{
  "version": 3,
  "sources": ["../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js", "../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js", "../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js", "../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/debug-build.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/worldwide.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/version.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/carrier.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/debug-logger.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/stacktrace.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/instrument/handlers.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/is.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/object.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/randomSafeContext.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/normalizationHints.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/normalize.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/string.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/misc.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/time.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/session.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/merge.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/propagationContext.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/weakRef.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/spanOnScope.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/scope.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/defaultScopes.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/chain-and-copy-promiselike.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/asyncContext/stackStrategy.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/asyncContext/index.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/attributes.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/currentScopes.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/semanticAttributes.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/spanstatus.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/utils.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/baggage.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/dsn.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/parseSampleRate.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/tracing.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/spanUtils.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/hasSpansEnabled.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/should-ignore-span.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/sentryNonRecordingSpan.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/constants.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/dynamicSamplingContext.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/spans/beforeSendSpan.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/envelope.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/envelope.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/logSpans.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/measurement.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/segmentSpanCaptureStrategy.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/spans/hasSpanStreamingEnabled.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/sentrySpan.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/handleCallbackErrors.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/sampling.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/trace.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/debounce.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/deferSegmentSpanCapture.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/bindScopeToEmitter.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/scopeData.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/spans/scopeContextAttributes.ts", "../../node_modules/.pnpm/@sentry+conventions@0.16.0/node_modules/@sentry/conventions/src/attributes.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/spans/captureSpan.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/syncpromise.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/eventProcessors.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/debug-ids.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/eventUtils.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/prepareEvent.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/exports.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/timer.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/asyncContext/tracing-channel-binding.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/api.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integration.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/trace-info.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/env.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/node.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/isBrowser.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/logs/envelope.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/logs/internal.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/metrics/envelope.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/metrics/internal.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/spans/spanJsonToStreamedSpan.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/spans/extractGenAiSpans.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/promisebuffer.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/ratelimit.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/transports/base.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/clientreport.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/transactionEvent.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/data-collection/filtering-snippets.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/data-collection/defaultPiiToCollectionOptions.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/data-collection/resolveDataCollectionOptions.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/client.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/ai/providerSkip.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/data-collection/filterKeyValueData.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/cookie.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/data-collection/filterQueryParams.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/data-collection/filterUrlQuery.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/data-collection/filterCollectedUrl.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/envToBool.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/checkin.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/url.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/isSentryRequestUrl.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/sdkMetadata.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/traceData.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/tracePropagationTargets.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/request.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/spanKind.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/breadcrumbs.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/functiontostring.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/eventFilters.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/aggregate-errors.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/eventbuilder.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/linkederrors.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/vendor/getIpAddress.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/requestdata.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/instrument/console.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/severity.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/path.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/console.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/conversationId.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/ai/gen-ai-attributes.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/ai/mediaStripping.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/ai/messageTruncation.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/ai/utils.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/workers-ai/constants.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/vercel-ai/constants.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/vercel-ai/vercel-ai-attributes.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/vercel-ai/utils.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/vercel-ai/index.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/openai/constants.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/openai/utils.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/openai/streaming.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/openai/index.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/anthropic-ai/constants.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/anthropic-ai/utils.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/anthropic-ai/streaming.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/anthropic-ai/index.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/google-genai/constants.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/google-genai/streaming.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/google-genai/utils.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/google-genai/index.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/langchain/constants.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/langchain/utils.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/langchain/index.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/langchain/embeddings.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/langgraph/constants.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/langgraph/utils.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/langgraph/index.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/spans/envelope.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/spans/estimateSize.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/tracing/spans/spanBuffer.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/spanStreaming.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/breadcrumb-log-level.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/exports.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/lru.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/transports/userAgent.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/server-runtime-client.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/node-stack-trace.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/express/request-layer-store.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/express/types.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/express/utils.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/express/set-sdk-processing-metadata.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/express/patch-layer.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/utils/get-default-export.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/express/index.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/postgresjs.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/http/constants.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/http/get-request-url.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/http/add-outgoing-request-breadcrumb.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/http/get-outgoing-span-data.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/http/inject-trace-propagation-headers.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/http/double-wrap-warning.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/http/client-subscriptions.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/http/client-patch.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/http/patch-request-to-capture-body.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/http/record-request-session.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/src/integrations/http/server-subscription.ts", "../../node_modules/.pnpm/@sentry+core@10.76.2/node_modules/@sentry/core/build/esm/index.js", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/version.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/internal/semver.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/internal/global-utils.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/diag/ComponentLogger.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/diag/types.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/diag/internal/logLevelLogger.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/api/diag.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/baggage/internal/baggage-impl.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/baggage/internal/symbol.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/baggage/utils.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/context/context.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/diag/consoleLogger.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/metrics/NoopMeter.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/metrics/Metric.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/propagation/TextMapPropagator.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/context/NoopContextManager.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/api/context.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/trace/trace_flags.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/trace/invalid-span-constants.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/trace/NonRecordingSpan.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/trace/context-utils.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/trace/spancontext-utils.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/trace/NoopTracer.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/trace/ProxyTracer.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/trace/NoopTracerProvider.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/trace/ProxyTracerProvider.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/trace/SamplingResult.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/trace/span_kind.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/trace/status.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/trace/internal/tracestate-validators.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/trace/internal/tracestate-impl.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/trace/internal/utils.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/context-api.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/diag-api.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/metrics/NoopMeterProvider.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/api/metrics.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/metrics-api.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/propagation/NoopTextMapPropagator.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/baggage/context-helpers.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/api/propagation.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/propagation-api.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/api/trace.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/trace-api.ts", "../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/src/index.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/debug-build.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/http/httpServerIntegration.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/trace/suppress-tracing.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/baggage/constants.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/baggage/utils.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/baggage/propagation/W3CBaggagePropagator.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/common/anchored-clock.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/common/attributes.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/common/logging-error-handler.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/common/global-error-handler.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/platform/node/environment.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/common/globalThis.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/version.ts", "../../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/src/internal/utils.ts", "../../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/src/trace/SemanticAttributes.ts", "../../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/src/trace/index.ts", "../../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/src/resource/SemanticResourceAttributes.ts", "../../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/src/resource/index.ts", "../../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/src/stable_attributes.ts", "../../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/src/stable_metrics.ts", "../../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/src/stable_events.ts", "../../node_modules/.pnpm/@opentelemetry+semantic-conventions@1.40.0/node_modules/@opentelemetry/semantic-conventions/src/index.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/semconv.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/platform/node/sdk-info.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/platform/node/index.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/platform/index.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/common/time.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/common/timer-util.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/ExportResult.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/propagation/composite.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/internal/validators.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/trace/TraceState.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/trace/W3CTraceContextPropagator.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/trace/rpc-metadata.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/utils/lodash.merge.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/utils/merge.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/utils/timeout.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/utils/url.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/utils/promise.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/utils/callback.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/utils/configuration.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/internal/exporter.ts", "../../node_modules/.pnpm/@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/core/src/index.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/http/httpServerSpansIntegration.ts", "../../node_modules/.pnpm/@opentelemetry+api-logs@0.220.0/node_modules/@opentelemetry/api-logs/src/types/LogRecord.ts", "../../node_modules/.pnpm/@opentelemetry+api-logs@0.220.0/node_modules/@opentelemetry/api-logs/src/NoopLogger.ts", "../../node_modules/.pnpm/@opentelemetry+api-logs@0.220.0/node_modules/@opentelemetry/api-logs/src/internal/global-utils.ts", "../../node_modules/.pnpm/@opentelemetry+api-logs@0.220.0/node_modules/@opentelemetry/api-logs/src/NoopLoggerProvider.ts", "../../node_modules/.pnpm/@opentelemetry+api-logs@0.220.0/node_modules/@opentelemetry/api-logs/src/ProxyLogger.ts", "../../node_modules/.pnpm/@opentelemetry+api-logs@0.220.0/node_modules/@opentelemetry/api-logs/src/ProxyLoggerProvider.ts", "../../node_modules/.pnpm/@opentelemetry+api-logs@0.220.0/node_modules/@opentelemetry/api-logs/src/api/logs.ts", "../../node_modules/.pnpm/@opentelemetry+api-logs@0.220.0/node_modules/@opentelemetry/api-logs/src/index.ts", "../../node_modules/.pnpm/@opentelemetry+instrumentation@0.220.0_@opentelemetry+api@1.9.1_supports-color@10.2.2/node_modules/@opentelemetry/instrumentation/src/autoLoaderUtils.ts", "../../node_modules/.pnpm/@opentelemetry+instrumentation@0.220.0_@opentelemetry+api@1.9.1_supports-color@10.2.2/node_modules/@opentelemetry/instrumentation/src/autoLoader.ts", "../../node_modules/.pnpm/@opentelemetry+instrumentation@0.220.0_@opentelemetry+api@1.9.1_supports-color@10.2.2/node_modules/@opentelemetry/instrumentation/src/semver.ts", "../../node_modules/.pnpm/@opentelemetry+instrumentation@0.220.0_@opentelemetry+api@1.9.1_supports-color@10.2.2/node_modules/@opentelemetry/instrumentation/src/shimmer.ts", "../../node_modules/.pnpm/@opentelemetry+instrumentation@0.220.0_@opentelemetry+api@1.9.1_supports-color@10.2.2/node_modules/@opentelemetry/instrumentation/src/instrumentation.ts", "../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js", "../../node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/common.js", "../../node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/browser.js", "../../node_modules/.pnpm/supports-color@10.2.2/node_modules/supports-color/index.js", "../../node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/node.js", "../../node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/index.js", "../../node_modules/.pnpm/module-details-from-path@1.0.4/node_modules/module-details-from-path/index.js", "../../node_modules/.pnpm/require-in-the-middle@8.0.1_supports-color@10.2.2/node_modules/require-in-the-middle/index.js", "../../node_modules/.pnpm/@opentelemetry+instrumentation@0.220.0_@opentelemetry+api@1.9.1_supports-color@10.2.2/node_modules/@opentelemetry/instrumentation/src/platform/node/ModuleNameTrie.ts", "../../node_modules/.pnpm/@opentelemetry+instrumentation@0.220.0_@opentelemetry+api@1.9.1_supports-color@10.2.2/node_modules/@opentelemetry/instrumentation/src/platform/node/RequireInTheMiddleSingleton.ts", "../../node_modules/.pnpm/import-in-the-middle@3.3.2/node_modules/import-in-the-middle/lib/register.js", "../../node_modules/.pnpm/import-in-the-middle@3.3.2/node_modules/import-in-the-middle/index.js", "../../node_modules/.pnpm/@opentelemetry+instrumentation@0.220.0_@opentelemetry+api@1.9.1_supports-color@10.2.2/node_modules/@opentelemetry/instrumentation/src/utils.ts", "../../node_modules/.pnpm/@opentelemetry+instrumentation@0.220.0_@opentelemetry+api@1.9.1_supports-color@10.2.2/node_modules/@opentelemetry/instrumentation/src/platform/node/instrumentation.ts", "../../node_modules/.pnpm/@opentelemetry+instrumentation@0.220.0_@opentelemetry+api@1.9.1_supports-color@10.2.2/node_modules/@opentelemetry/instrumentation/src/platform/node/normalize.ts", "../../node_modules/.pnpm/@opentelemetry+instrumentation@0.220.0_@opentelemetry+api@1.9.1_supports-color@10.2.2/node_modules/@opentelemetry/instrumentation/src/platform/node/index.ts", "../../node_modules/.pnpm/@opentelemetry+instrumentation@0.220.0_@opentelemetry+api@1.9.1_supports-color@10.2.2/node_modules/@opentelemetry/instrumentation/src/platform/index.ts", "../../node_modules/.pnpm/@opentelemetry+instrumentation@0.220.0_@opentelemetry+api@1.9.1_supports-color@10.2.2/node_modules/@opentelemetry/instrumentation/src/instrumentationNodeModuleDefinition.ts", "../../node_modules/.pnpm/@opentelemetry+instrumentation@0.220.0_@opentelemetry+api@1.9.1_supports-color@10.2.2/node_modules/@opentelemetry/instrumentation/src/instrumentationNodeModuleFile.ts", "../../node_modules/.pnpm/@opentelemetry+instrumentation@0.220.0_@opentelemetry+api@1.9.1_supports-color@10.2.2/node_modules/@opentelemetry/instrumentation/src/semconvStability.ts", "../../node_modules/.pnpm/@opentelemetry+instrumentation@0.220.0_@opentelemetry+api@1.9.1_supports-color@10.2.2/node_modules/@opentelemetry/instrumentation/src/index.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/nodeVersion.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/http/SentryHttpInstrumentation.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/http/index.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/utils/outgoingFetchRequest.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/node-fetch/undici-instrumentation.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/node-fetch/index.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/default-service-name.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/utils.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/ResourceImpl.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/detect-resources.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/detectors/EnvDetector.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/semconv.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/detectors/platform/node/machine-id/execAsync.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/detectors/platform/node/machine-id/getMachineId-darwin.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/detectors/platform/node/machine-id/getMachineId-linux.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/detectors/platform/node/machine-id/getMachineId-bsd.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/detectors/platform/node/machine-id/getMachineId-win.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/detectors/platform/node/machine-id/getMachineId-unsupported.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/detectors/platform/node/machine-id/getMachineId.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/detectors/platform/node/utils.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/detectors/platform/node/HostDetector.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/detectors/platform/node/OSDetector.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/detectors/platform/node/ProcessDetector.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/detectors/platform/node/ServiceInstanceIdDetector.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/detectors/platform/node/index.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/detectors/platform/index.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/detectors/NoopDetector.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/detectors/index.ts", "../../node_modules/.pnpm/@opentelemetry+resources@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/resources/src/index.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/enums.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/inspect.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/Span.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/Sampler.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/semconv.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/TracerMetrics.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/version.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/Tracer.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/MultiSpanProcessor.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/sampler/AlwaysOffSampler.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/sampler/AlwaysOnSampler.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/sampler/ParentBasedSampler.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/export/SpanProcessorMetrics.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/export/BatchSpanProcessorBase.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/platform/node/export/BatchSpanProcessor.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/platform/node/RandomIdGenerator.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/platform/node/index.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/platform/index.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/TracerProvider.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/export/ConsoleSpanExporter.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/export/InMemorySpanExporter.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/export/SimpleSpanProcessor.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/export/NoopSpanProcessor.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/sampler/AlwaysRecordSampler.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/sampler/TraceIdRatioBasedSampler.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace/src/index.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/src/config.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/src/utility.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/src/BasicTracerProvider-shim.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/src/BatchSpanProcessor-shim.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/src/SimpleSpanProcessor-shim.ts", "../../node_modules/.pnpm/@opentelemetry+sdk-trace-base@2.10.0_@opentelemetry+api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/src/index-shim.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/semanticAttributes.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/utils/getParentSpanId.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/utils/spanTypes.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/utils/getRequestSpanData.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/custom/client.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/utils/getSpanKind.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/constants.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/utils/contextData.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/utils/isSentryRequest.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/utils/getSamplingDecision.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/utils/parseSpanDescription.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/utils/enhanceDscWithOpenTelemetryRootSpanName.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/utils/getActiveSpan.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/debug-build.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/utils/TraceState.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/utils/makeTraceState.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/utils/setupCheck.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/propagator.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/trace.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/utils/suppressTracing.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/setupEventContextTrace.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/utils/buildContextWithSentryScopes.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/contextManager.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/utils/groupSpansWithParents.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/utils/mapStatus.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/spanExporter.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/utils/backfillStreamedSpanData.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/spanProcessor.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/sampler.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/applyOtelSpanData.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/tracer.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/tracerProvider.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/resource.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/utils/getTraceData.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/asyncContextStrategy.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/asyncLocalStorageContextManager.ts", "../../node_modules/.pnpm/@sentry+opentelemetry@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@open_51d4ed3b8a2a7938ebf5a443a2338a9c/node_modules/@sentry/opentelemetry/src/nodeAsyncContextStrategy.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/otel/contextManager.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/otel/logger.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/otel/instrument.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/childProcess.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/context.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/contextlines.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/utils/debug.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/local-variables/common.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/local-variables/local-variables-async.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/local-variables/local-variables-sync.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/local-variables/index.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/modules.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/utils/errorhandling.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/onuncaughtexception.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/onunhandledrejection.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/processSession.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/spotlight.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/console.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/integrations/systemError.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/proxy/base.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/proxy/parse-proxy-response.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/proxy/index.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/transports/http.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/utils/spotlight.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/utils/module.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/sdk/api.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/sdk/client.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/utils/detection.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/sdk/esmLoader.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/sdk/index.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/src/utils/addOriginToSpan.ts", "../../node_modules/.pnpm/@sentry+node-core@10.76.2_@opentelemetry+api@1.9.1_@opentelemetry+core@2.10.0_@opentele_109f1c5205592059c95b2cb25d56ff2a/node_modules/@sentry/node-core/build/esm/index.js", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/http.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/node-fetch.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/debug-build.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/utils/setHttpServerSpanRouteAttribute.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/express.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/fastify/v3/enums/AttributeNames.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/fastify/v3/constants.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/fastify/v3/utils.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/fastify/v3/instrumentation.ts", "../../node_modules/.pnpm/@sentry+conventions@0.16.0/node_modules/@sentry/conventions/src/op.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/debug-build.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/tracing-channel.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/graphql/utils.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/graphql/graphql-dc-subscriber.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/graphql/index.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/mongoose/mongoose-dc-subscriber.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/mongoose/index.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/mongodb/mongodb-span.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/mysql2/mysql2-dc-subscriber.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/mysql2/index.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/prisma/global.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/prisma/tracing-helper.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/prisma/index.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/redis/redis-dc-subscriber.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/redis/index.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/redis/redis-statement-serializer.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/vercel-ai/util.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/vercel-ai/vercel-ai-dc-subscriber.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/vercel-ai/index.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/integrations/tracing-channel/fastify/instrumentation.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/integrations/tracing-channel/fastify/utils.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/integrations/tracing-channel/fastify/errors.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/integrations/tracing-channel/fastify/index.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/src/mongoose/mongoose-legacy-span.ts", "../../node_modules/.pnpm/@sentry+server-utils@10.76.2/node_modules/@sentry/server-utils/build/esm/index.js", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/fastify/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/InstrumentationNodeModuleFile.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/graphql/vendored/enum.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/graphql/vendored/enums/AttributeNames.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/graphql/vendored/symbols.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/graphql/vendored/internal-types.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/graphql/vendored/utils.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/graphql/vendored/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/graphql/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/kafka/vendored/semconv.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/kafka/vendored/utils.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/kafka/vendored/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/kafka/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/lrumemoizer/vendored/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/lrumemoizer/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/mongo/vendored/utils.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/mongo/vendored/patches.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/mongo/vendored/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/mongo/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/mongoose/vendored/utils.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/mongoose/vendored/mongoose.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/mongoose/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/mysql/vendored/semconv.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/mysql/vendored/utils.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/mysql/vendored/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/mysql/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/mysql2/vendored/semconv.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/mysql2/vendored/utils.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/mysql2/vendored/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/mysql2/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/sdk/diagnosticsChannelInjection.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/utils/redisCache.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/redis/cache.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/redis/vendored/semconv.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/redis/vendored/ioredis-instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/redis/vendored/redis-instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/redis/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/postgres/vendored/enums/SpanNames.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/postgres/vendored/enums/AttributeNames.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/postgres/vendored/semconv.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/postgres/vendored/utils.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/postgres/vendored/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/postgres/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/postgresjs.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/hapi/vendored/enums/AttributeNames.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/hapi/vendored/internal-types.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/hapi/vendored/utils.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/hapi/vendored/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/hapi/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/hono/constants.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/hono/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/hono/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/koa/vendored/types.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/koa/vendored/enums/AttributeNames.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/koa/vendored/utils.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/koa/vendored/internal-types.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/koa/vendored/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/koa/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/connect/vendored/enums/AttributeNames.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/connect/vendored/internal-types.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/connect/vendored/utils.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/connect/vendored/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/connect/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/tedious/vendored/semconv.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/tedious/vendored/utils.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/tedious/vendored/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/tedious/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/genericPool/vendored/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/genericPool/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/amqplib/vendored/types.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/amqplib/vendored/semconv.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/amqplib/vendored/utils.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/amqplib/vendored/patches.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/amqplib/vendored/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/amqplib/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/vercelai/constants.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/vercelai/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/vercelai/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/openai/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/openai/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/anthropic-ai/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/anthropic-ai/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/google-genai/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/google-genai/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/langchain/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/langchain/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/langgraph/instrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/langgraph/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/firebase/otel/patches/firestore.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/firebase/otel/patches/functions.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/firebase/otel/firebaseInstrumentation.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/firebase/firebase.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/integrations/tracing/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/sdk/initOtel.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/src/sdk/index.ts", "../../node_modules/.pnpm/@sentry+node@10.76.2_@opentelemetry+core@2.10.0_@opentelemetry+api@1.9.1__supports-color@10.2.2/node_modules/@sentry/node/build/esm/index.js", "../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js", "../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js", "../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js", "../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js", "../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js", "../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/typeAliases.js", "../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js", "../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js", "../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js", "../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js", "../src/vendor/progress/index.ts", "../../node_modules/.pnpm/mimic-function@5.0.1/node_modules/mimic-function/index.js", "../../node_modules/.pnpm/onetime@7.0.0/node_modules/onetime/index.js", "../../node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/src/signals.ts", "../../node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/src/index.ts", "../../node_modules/.pnpm/restore-cursor@5.1.0/node_modules/restore-cursor/index.js", "../../node_modules/.pnpm/cli-cursor@5.0.0/node_modules/cli-cursor/index.js", "../../node_modules/.pnpm/cli-spinners@3.4.0/node_modules/cli-spinners/spinners.json", "../../node_modules/.pnpm/cli-spinners@3.4.0/node_modules/cli-spinners/index.js", "../../node_modules/.pnpm/yoctocolors@2.1.2/node_modules/yoctocolors/base.js", "../../node_modules/.pnpm/yoctocolors@2.1.2/node_modules/yoctocolors/index.js", "../../node_modules/.pnpm/is-unicode-supported@2.1.0/node_modules/is-unicode-supported/index.js", "../../node_modules/.pnpm/log-symbols@7.0.1/node_modules/log-symbols/symbols.js", "../../node_modules/.pnpm/log-symbols@7.0.1/node_modules/log-symbols/index.js", "../../node_modules/.pnpm/ansi-regex@6.2.2/node_modules/ansi-regex/index.js", "../../node_modules/.pnpm/strip-ansi@7.1.2/node_modules/strip-ansi/index.js", "../../node_modules/.pnpm/get-east-asian-width@1.4.0/node_modules/get-east-asian-width/lookup.js", "../../node_modules/.pnpm/get-east-asian-width@1.4.0/node_modules/get-east-asian-width/index.js", "../../node_modules/.pnpm/string-width@8.1.0/node_modules/string-width/index.js", "../../node_modules/.pnpm/is-interactive@2.0.0/node_modules/is-interactive/index.js", "../../node_modules/.pnpm/stdin-discarder@0.2.2/node_modules/stdin-discarder/index.js", "../../node_modules/.pnpm/ora@9.0.0/node_modules/ora/index.js", "../src/bundler/log.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/util/location.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parse-error/module-errors.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parse-error/to-node-description.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parse-error/standard-errors.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parse-error/strict-mode-errors.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parse-error/parse-expression-errors.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parse-error/pipeline-operator-errors.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parse-error.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/options.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugins/estree.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/tokenizer/context.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/tokenizer/types.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/babel-helper-validator-identifier/src/identifier.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/babel-helper-validator-identifier/src/keyword.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/util/identifier.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/util/scope.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugins/flow/scope.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugins/flow/index.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugins/jsx/xhtml.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/util/whitespace.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugins/jsx/index.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugins/typescript/scope.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/util/production-parameter.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parser/base.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parser/comments.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/tokenizer/state.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/babel-helper-string-parser/src/index.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/tokenizer/index.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/util/class-scope.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/util/expression-scope.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parser/util.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parser/node.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parser/lval.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugins/typescript/index.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugins/placeholders.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugins/v8intrinsic.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/plugin-utils.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parser/expression.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parser/statement.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/parser/index.ts", "../../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/src/index.ts", "../src/bundler/fs.ts", "../src/bundler/wasm.ts", "../src/bundler/serverOnly.ts", "../../node_modules/.pnpm/yocto-queue@1.2.2/node_modules/yocto-queue/index.js", "../../node_modules/.pnpm/p-limit@4.0.0/node_modules/p-limit/index.js", "../../node_modules/.pnpm/p-locate@6.0.0/node_modules/p-locate/index.js", "../../node_modules/.pnpm/locate-path@8.0.0/node_modules/locate-path/index.js", "../../node_modules/.pnpm/unicorn-magic@0.3.0/node_modules/unicorn-magic/default.js", "../../node_modules/.pnpm/unicorn-magic@0.3.0/node_modules/unicorn-magic/node.js", "../../node_modules/.pnpm/find-up@8.0.0/node_modules/find-up/index.js", "../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/lib/error.js", "../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/lib/argument.js", "../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/lib/help.js", "../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/lib/option.js", "../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/lib/suggestSimilar.js", "../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/lib/command.js", "../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/index.js", "../../node_modules/.pnpm/commander@14.0.3/node_modules/commander/esm.mjs", "../../node_modules/.pnpm/fetch-retry@6.0.0/node_modules/fetch-retry/index.js", "../src/index.ts", "../src/cli/version.ts", "../../node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@22.19.1/node_modules/@inquirer/core/dist/lib/key.js", "../../node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@22.19.1/node_modules/@inquirer/core/dist/lib/errors.js", "../../node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@22.19.1/node_modules/@inquirer/core/dist/lib/hook-engine.js", "../../node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@22.19.1/node_modules/@inquirer/core/dist/lib/use-state.js", "../../node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@22.19.1/node_modules/@inquirer/core/dist/lib/use-effect.js", "../../node_modules/.pnpm/@inquirer+figures@2.0.3/node_modules/@inquirer/figures/dist/index.js", "../../node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@22.19.1/node_modules/@inquirer/core/dist/lib/theme.js", "../../node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@22.19.1/node_modules/@inquirer/core/dist/lib/make-theme.js", "../../node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@22.19.1/node_modules/@inquirer/core/dist/lib/use-prefix.js", "../../node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@22.19.1/node_modules/@inquirer/core/dist/lib/use-memo.js", "../../node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@22.19.1/node_modules/@inquirer/core/dist/lib/use-ref.js", "../../node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@22.19.1/node_modules/@inquirer/core/dist/lib/use-keypress.js", "../../node_modules/.pnpm/cli-width@4.1.0/node_modules/cli-width/index.js", "../../node_modules/.pnpm/emoji-regex@10.6.0/node_modules/emoji-regex/index.js", "../../node_modules/.pnpm/string-width@7.2.0/node_modules/string-width/index.js", "../../node_modules/.pnpm/ansi-styles@6.2.3/node_modules/ansi-styles/index.js", "../../node_modules/.pnpm/wrap-ansi@9.0.2/node_modules/wrap-ansi/index.js", "../../node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@22.19.1/node_modules/@inquirer/core/dist/lib/utils.js", "../../node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@22.19.1/node_modules/@inquirer/core/dist/lib/pagination/use-pagination.js", "../../node_modules/.pnpm/mute-stream@3.0.0/node_modules/mute-stream/lib/index.js", "../../node_modules/.pnpm/@inquirer+ansi@2.0.3/node_modules/@inquirer/ansi/dist/index.js", "../../node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@22.19.1/node_modules/@inquirer/core/dist/lib/screen-manager.js", "../../node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@22.19.1/node_modules/@inquirer/core/dist/lib/promise-polyfill.js", "../../node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@22.19.1/node_modules/@inquirer/core/dist/lib/create-prompt.js", "../../node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@22.19.1/node_modules/@inquirer/core/dist/lib/Separator.js", "../../node_modules/.pnpm/@inquirer+core@11.1.1_@types+node@22.19.1/node_modules/@inquirer/core/dist/index.js", "../../node_modules/.pnpm/@inquirer+input@5.0.4_@types+node@22.19.1/node_modules/@inquirer/input/dist/index.js", "../../node_modules/.pnpm/@inquirer+select@5.0.4_@types+node@22.19.1/node_modules/@inquirer/select/dist/index.js", "../../node_modules/.pnpm/@inquirer+search@4.1.0_@types+node@22.19.1/node_modules/@inquirer/search/dist/index.js", "../../node_modules/.pnpm/@inquirer+confirm@6.0.4_@types+node@22.19.1/node_modules/@inquirer/confirm/dist/index.js", "../src/cli/lib/utils/prompts.ts", "../src/cli/lib/localDeployment/bigBrain.ts", "../../node_modules/.pnpm/openapi-fetch@0.17.0/node_modules/openapi-fetch/src/index.js", "../src/cli/lib/fsUtils.ts", "../src/cli/lib/localDeployment/filePaths.ts", "../../node_modules/.pnpm/address@2.0.3/node_modules/address/src/address.ts", "../../node_modules/.pnpm/address@2.0.3/node_modules/address/src/index.ts", "../../node_modules/.pnpm/detect-port@2.1.0/node_modules/detect-port/src/detect-port.ts", "../../node_modules/.pnpm/detect-port@2.1.0/node_modules/detect-port/src/wait-port.ts", "../../node_modules/.pnpm/detect-port@2.1.0/node_modules/detect-port/src/index.ts", "../src/cli/lib/localDeployment/utils.ts", "../src/cli/lib/localDeployment/serve.ts", "../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/util/constants.js", "../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/util/errors.js", "../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/util/utils.js", "../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/util/fattr.js", "../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/util/decoder.js", "../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/util/index.js", "../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/headers/entryHeader.js", "../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/headers/mainHeader.js", "../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/headers/index.js", "../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/methods/deflater.js", "../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/methods/inflater.js", "../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/methods/zipcrypto.js", "../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/methods/index.js", "../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/zipEntry.js", "../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/zipFile.js", "../../node_modules/.pnpm/adm-zip@0.6.1/node_modules/adm-zip/adm-zip.js", "../src/cli/lib/localDeployment/errors.ts", "../src/cli/lib/localDeployment/download.ts", "../src/cli/lib/localDeployment/run.ts", "../../node_modules/.pnpm/serve-handler@6.1.6/node_modules/serve-handler/src/glob-slash.js", "../../node_modules/.pnpm/concat-map@0.0.1/node_modules/concat-map/index.js", "../../node_modules/.pnpm/balanced-match@1.0.2/node_modules/balanced-match/index.js", "../../node_modules/.pnpm/brace-expansion@1.1.21/node_modules/brace-expansion/index.js", "../../node_modules/.pnpm/minimatch@3.1.5/node_modules/minimatch/minimatch.js", "../../node_modules/.pnpm/path-to-regexp@3.3.0/node_modules/path-to-regexp/index.js", "../../node_modules/.pnpm/mime-db@1.33.0/node_modules/mime-db/db.json", "../../node_modules/.pnpm/mime-db@1.33.0/node_modules/mime-db/index.js", "../../node_modules/.pnpm/mime-types@2.1.18/node_modules/mime-types/index.js", "../../node_modules/.pnpm/bytes@3.0.0/node_modules/bytes/index.js", "../../node_modules/.pnpm/content-disposition@0.5.2/node_modules/content-disposition/index.js", "../../node_modules/.pnpm/path-is-inside@1.0.2/node_modules/path-is-inside/lib/path-is-inside.js", "../../node_modules/.pnpm/range-parser@1.2.0/node_modules/range-parser/index.js", "../../node_modules/.pnpm/serve-handler@6.1.6/node_modules/serve-handler/src/directory.js", "../../node_modules/.pnpm/serve-handler@6.1.6/node_modules/serve-handler/src/error.js", "../../node_modules/.pnpm/serve-handler@6.1.6/node_modules/serve-handler/src/index.js", "../src/cli/lib/localDeployment/dashboard.ts", "../src/cli/lib/dashboard.ts", "../src/cli/lib/utils/utils.ts", "../src/bundler/external.ts", "../src/bundler/depgraph.ts", "../src/bundler/debugBundle.ts", "../src/bundler/index.ts", "../../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv/package.json", "../../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv/lib/main.js", "../src/cli/lib/envvars.ts", "../src/cli/lib/deployment.ts", "../src/cli/lib/config.ts", "../src/cli/lib/utils/sentry.ts", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/core/symbols.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/util/timers.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/core/errors.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/core/constants.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/core/tree.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/core/util.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/util/stats.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/core/diagnostics.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/core/request.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/handler/wrap-handler.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/dispatcher/dispatcher.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/handler/unwrap-handler.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/dispatcher/dispatcher-base.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/core/connect.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/llhttp/utils.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/llhttp/constants.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/llhttp/llhttp-wasm.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/fetch/constants.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/fetch/global.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/encoding/index.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/infra/index.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/fetch/data-url.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/util/runtime-features.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/webidl/index.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/fetch/util.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/fetch/formdata.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/fetch/formdata-parser.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/util/promise.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/fetch/body.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/dispatcher/client-h1.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/dispatcher/client-h2.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/dispatcher/client.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/dispatcher/fixed-queue.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/dispatcher/pool-base.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/dispatcher/pool.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/dispatcher/balanced-pool.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/dispatcher/round-robin-pool.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/dispatcher/agent.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/core/socks5-utils.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/core/socks5-client.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/dispatcher/proxy-agent.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/handler/retry-handler.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/dispatcher/retry-agent.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/dispatcher/h2c-client.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/api/readable.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/api/api-request.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/api/abort-signal.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/api/api-stream.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/api/api-pipeline.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/api/api-upgrade.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/api/api-connect.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/api/index.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/mock/mock-errors.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/mock/mock-symbols.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/mock/mock-utils.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/mock/mock-interceptor.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/mock/mock-client.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/mock/mock-call-history.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/mock/mock-pool.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/mock/pending-interceptors-formatter.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/mock/mock-agent.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/mock/snapshot-utils.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/mock/snapshot-recorder.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/mock/snapshot-agent.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/global.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/handler/decorator-handler.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/handler/redirect-handler.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/interceptor/redirect.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/interceptor/response-error.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/interceptor/retry.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/interceptor/dump.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/interceptor/dns.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/util/cache.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/util/date.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/handler/cache-handler.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/cache/memory-cache-store.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/handler/cache-revalidation-handler.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/interceptor/cache.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/interceptor/decompress.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/handler/deduplication-handler.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/interceptor/deduplicate.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/cache/sqlite-cache-store.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/fetch/headers.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/fetch/response.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/fetch/request.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/subresource-integrity/subresource-integrity.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/fetch/index.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/cache/util.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/cache/cache.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/cache/cachestorage.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/cookies/constants.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/cookies/util.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/cookies/parse.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/cookies/index.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/websocket/events.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/websocket/constants.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/websocket/util.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/websocket/frame.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/websocket/connection.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/websocket/permessage-deflate.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/websocket/receiver.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/websocket/sender.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/websocket/websocket.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/websocket/stream/websocketerror.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/websocket/stream/websocketstream.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/eventsource/util.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/eventsource/eventsource-stream.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/lib/web/eventsource/eventsource.js", "../../node_modules/.pnpm/undici@7.29.1/node_modules/undici/index.js", "../../node_modules/.pnpm/@commander-js+extra-typings@14.0.0_commander@14.0.3/node_modules/@commander-js/extra-typings/index.js", "../../node_modules/.pnpm/json5@2.2.3/node_modules/json5/lib/unicode.js", "../../node_modules/.pnpm/json5@2.2.3/node_modules/json5/lib/util.js", "../../node_modules/.pnpm/json5@2.2.3/node_modules/json5/lib/parse.js", "../../node_modules/.pnpm/json5@2.2.3/node_modules/json5/lib/stringify.js", "../../node_modules/.pnpm/json5@2.2.3/node_modules/json5/lib/index.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/constants.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/re.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/parse-options.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/identifiers.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/parse.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/valid.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/clean.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/inc.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/diff.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/major.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/minor.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/patch.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/prerelease.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rcompare.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-loose.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-build.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/sort.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rsort.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gt.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lt.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/eq.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/neq.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gte.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lte.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/cmp.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/coerce.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/lrucache.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/range.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/comparator.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/satisfies.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/to-comparators.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/max-satisfying.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-satisfying.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-version.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/valid.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/outside.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/gtr.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/ltr.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/intersects.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/simplify.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/subset.js", "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.js", "../../node_modules/.pnpm/picomatch@2.3.2/node_modules/picomatch/lib/constants.js", "../../node_modules/.pnpm/picomatch@2.3.2/node_modules/picomatch/lib/utils.js", "../../node_modules/.pnpm/picomatch@2.3.2/node_modules/picomatch/lib/scan.js", "../../node_modules/.pnpm/picomatch@2.3.2/node_modules/picomatch/lib/parse.js", "../../node_modules/.pnpm/picomatch@2.3.2/node_modules/picomatch/lib/picomatch.js", "../../node_modules/.pnpm/picomatch@2.3.2/node_modules/picomatch/index.js", "../../node_modules/.pnpm/readdirp@3.6.0/node_modules/readdirp/index.js", "../../node_modules/.pnpm/normalize-path@3.0.0/node_modules/normalize-path/index.js", "../../node_modules/.pnpm/anymatch@3.1.3/node_modules/anymatch/index.js", "../../node_modules/.pnpm/is-extglob@2.1.1/node_modules/is-extglob/index.js", "../../node_modules/.pnpm/is-glob@4.0.3/node_modules/is-glob/index.js", "../../node_modules/.pnpm/glob-parent@5.1.2/node_modules/glob-parent/index.js", "../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/utils.js", "../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/stringify.js", "../../node_modules/.pnpm/is-number@7.0.0/node_modules/is-number/index.js", "../../node_modules/.pnpm/to-regex-range@5.0.1/node_modules/to-regex-range/index.js", "../../node_modules/.pnpm/fill-range@7.1.1/node_modules/fill-range/index.js", "../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/compile.js", "../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/expand.js", "../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/constants.js", "../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/parse.js", "../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/index.js", "../../node_modules/.pnpm/binary-extensions@2.3.0/node_modules/binary-extensions/binary-extensions.json", "../../node_modules/.pnpm/binary-extensions@2.3.0/node_modules/binary-extensions/index.js", "../../node_modules/.pnpm/is-binary-path@2.1.0/node_modules/is-binary-path/index.js", "../../node_modules/.pnpm/chokidar@3.6.0/node_modules/chokidar/lib/constants.js", "../../node_modules/.pnpm/chokidar@3.6.0/node_modules/chokidar/lib/nodefs-handler.js", "../../node_modules/.pnpm/chokidar@3.6.0/node_modules/chokidar/lib/fsevents-handler.js", "../../node_modules/.pnpm/chokidar@3.6.0/node_modules/chokidar/index.js", "../../node_modules/.pnpm/@vercel+detect-agent@1.2.5/node_modules/@vercel/detect-agent/dist/index.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/errors.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/digest.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/buffer_utils.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/base64url.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/util/errors.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/random.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/iv.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/check_iv_length.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/is_key_object.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/check_cek_length.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/timing_safe_equal.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/cbc_tag.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/webcrypto.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/crypto_key.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/invalid_key_input.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/ciphers.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/is_key_like.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/decrypt.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/zlib.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/is_disjoint.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/is_object.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/aeskw.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/get_named_curve.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/ecdhes.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/check_p2s.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/pbes2kw.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/check_modulus_length.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/rsaes.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/cek.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/asn1.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/asn1_sequence_encoder.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/flags.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/jwk_to_key.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/key/import.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/check_key_type.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/encrypt.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/aesgcmkw.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/decrypt_key_management.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/validate_crit.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/validate_algorithms.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwe/flattened/decrypt.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwe/compact/decrypt.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwe/general/decrypt.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/asn1_sequence_decoder.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/key_to_jwk.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/key/export.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/encrypt_key_management.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwe/flattened/encrypt.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwe/general/encrypt.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/dsa_digest.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/node_key.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/hmac_digest.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/get_sign_verify_key.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/sign.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/verify.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jws/flattened/verify.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jws/compact/verify.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jws/general/verify.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/epoch.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/secs.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/lib/jwt_claims_set.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwt/verify.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwt/decrypt.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwe/compact/encrypt.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jws/flattened/sign.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jws/compact/sign.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jws/general/sign.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwt/produce.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwt/sign.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwt/encrypt.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwk/thumbprint.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwk/embedded.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwks/local.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/fetch_jwks.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwks/remote.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/jwt/unsecured.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/util/base64url.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/util/decode_protected_header.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/util/decode_jwt.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/generate.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/key/generate_key_pair.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/key/generate_secret.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/runtime/runtime.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/util/runtime.js", "../../node_modules/.pnpm/jose@4.15.9/node_modules/jose/dist/node/cjs/index.js", "../../node_modules/.pnpm/oidc-token-hash@5.2.0/node_modules/oidc-token-hash/lib/index.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/is_key_object.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/base64url.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/decode_jwt.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/is_plain_object.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/defaults.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/www_authenticate_parser.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/assert.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/pick.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/process_response.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/unix_timestamp.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/token_set.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/generators.js", "../../node_modules/.pnpm/yallist@4.0.0/node_modules/yallist/iterator.js", "../../node_modules/.pnpm/yallist@4.0.0/node_modules/yallist/yallist.js", "../../node_modules/.pnpm/lru-cache@6.0.0/node_modules/lru-cache/index.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/package.json", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/consts.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/request.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/weak_cache.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/deep_clone.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/keystore.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/merge.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/client.js", "../../node_modules/.pnpm/object-hash@2.2.0/node_modules/object-hash/index.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/issuer.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/device_flow_handle.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/client.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/issuer_registry.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/helpers/webfinger_normalize.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/issuer.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/passport_strategy.js", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/index.js", "../src/cli/index.ts", "../../node_modules/.pnpm/@commander-js+extra-typings@14.0.0_commander@14.0.3/node_modules/@commander-js/extra-typings/esm.mjs", "../src/cli/aiFiles.ts", "../src/bundler/context.ts", "../src/cli/lib/deploymentSelection.ts", "../src/cli/lib/api.ts", "../src/cli/lib/localDeployment/localDeployment.ts", "../src/cli/lib/localDeployment/upgrade.ts", "../src/cli/lib/localDeployment/secrets.ts", "../src/cli/lib/defaultEnv.ts", "../src/cli/lib/env.ts", "../src/cli/lib/run.ts", "../src/server/functionName.ts", "../src/server/components/paths.ts", "../src/server/api.ts", "../src/common/index.ts", "../src/browser/http_client.ts", "../src/values/base64.ts", "../src/values/value.ts", "../src/values/errors.ts", "../src/browser/logging.ts", "../src/browser/sync/client.ts", "../src/browser/sync/udf_path_utils.ts", "../src/browser/sync/local_state.ts", "../src/browser/sync/request_manager.ts", "../src/browser/sync/optimistic_updates_impl.ts", "../src/vendor/long.ts", "../src/browser/sync/remote_query_set.ts", "../src/browser/sync/protocol.ts", "../src/browser/sync/web_socket_manager.ts", "../src/browser/sync/session.ts", "../src/vendor/jwt-decode/index.ts", "../src/browser/sync/authentication_manager.ts", "../src/browser/sync/metrics.ts", "../src/cli/lib/dev.ts", "../src/cli/lib/components.ts", "../src/cli/lib/deploy2.ts", "../src/cli/lib/deployApi/startPush.ts", "../src/cli/lib/deployApi/paths.ts", "../src/cli/lib/deployApi/utils.ts", "../src/cli/lib/deployApi/modules.ts", "../src/cli/lib/deployApi/checkedComponent.ts", "../src/cli/lib/deployApi/types.ts", "../src/cli/lib/deployApi/componentDefinition.ts", "../src/cli/lib/deployApi/definitionConfig.ts", "../src/cli/lib/deployApi/finishPush.ts", "../src/cli/lib/deployApi/evaluateSchema.ts", "../src/cli/lib/indexes.ts", "../src/cli/lib/workos/workos.ts", "../src/cli/lib/workos/environmentApi.ts", "../src/cli/lib/workos/platformApi.ts", "../src/cli/lib/components/definition/bundle.ts", "../src/cli/lib/components/definition/directoryStructure.ts", "../src/cli/lib/components/constants.ts", "../src/cli/lib/codegen.ts", "../src/cli/codegen_templates/common.ts", "../src/cli/codegen_templates/api.ts", "../src/cli/codegen_templates/api_cjs.ts", "../src/cli/codegen_templates/validator_helpers.ts", "../src/cli/codegen_templates/dataModel.ts", "../src/cli/codegen_templates/readme.ts", "../src/cli/codegen_templates/server.ts", "../src/cli/codegen_templates/tsconfig.ts", "../src/cli/lib/typecheck.ts", "../src/cli/lib/watch.ts", "../src/cli/codegen_templates/component_server.ts", "../src/cli/codegen_templates/component_api.ts", "../src/cli/lib/debugBundlePath.ts", "../src/cli/lib/tracing.ts", "../src/cli/lib/checkForLargeIndexDeletion.ts", "../src/cli/lib/checkForSlowSchemaValidation.ts", "../src/cli/lib/formatValidationProgress.ts", "../src/cli/lib/checkForLargeIndexBackfill.ts", "../src/cli/lib/schemaEvaluation.ts", "../src/cli/lib/checkForStagedValidatorDeletion.ts", "../src/cli/lib/logs.ts", "../src/cli/lib/utils/stdin.ts", "../src/cli/lib/utils/aiAgent.ts", "../src/cli/lib/formatEnvValueForDotfile.ts", "../src/cli/lib/localDeployment/anonymous.ts", "../src/cli/lib/aiFiles/index.ts", "../src/cli/lib/versionApi.ts", "../src/cli/lib/aiFiles/paths.ts", "../src/cli/lib/aiFiles/guidelinesmd.ts", "../src/cli/lib/utils/hash.ts", "../src/cli/lib/aiFiles/utils.ts", "../src/cli/lib/aiFiles/state.ts", "../src/cli/codegen_templates/agentsmd.ts", "../src/cli/lib/aiFiles/agentsmd.ts", "../src/cli/codegen_templates/claudemd.ts", "../src/cli/lib/aiFiles/claudemd.ts", "../src/cli/lib/aiFiles/skills.ts", "../src/cli/lib/aiFiles/cursorrules.ts", "../src/cli/lib/deploymentSelector.ts", "../src/cli/lib/localDeployment/projectMismatch.ts", "../src/cli/lib/utils/globalConfig.ts", "../src/cli/lib/aiFiles/status.ts", "../src/cli/auth.ts", "../src/cli/codegen.ts", "../src/cli/convexExport.ts", "../src/cli/lib/command.ts", "../src/cli/lib/runTestFunction.ts", "../src/cli/lib/convexExport.ts", "../src/cli/convexImport.ts", "../src/cli/lib/convexImport.ts", "../src/cli/dashboard.ts", "../../node_modules/.pnpm/open@11.0.0/node_modules/open/index.js", "../../node_modules/.pnpm/wsl-utils@0.3.1/node_modules/wsl-utils/index.js", "../../node_modules/.pnpm/is-wsl@3.1.0/node_modules/is-wsl/index.js", "../../node_modules/.pnpm/is-inside-container@1.0.0/node_modules/is-inside-container/index.js", "../../node_modules/.pnpm/is-docker@3.0.0/node_modules/is-docker/index.js", "../../node_modules/.pnpm/powershell-utils@0.1.0/node_modules/powershell-utils/index.js", "../../node_modules/.pnpm/wsl-utils@0.3.1/node_modules/wsl-utils/utilities.js", "../../node_modules/.pnpm/define-lazy-prop@3.0.0/node_modules/define-lazy-prop/index.js", "../../node_modules/.pnpm/default-browser@5.5.0/node_modules/default-browser/index.js", "../../node_modules/.pnpm/default-browser-id@5.0.0/node_modules/default-browser-id/index.js", "../../node_modules/.pnpm/run-applescript@7.1.0/node_modules/run-applescript/index.js", "../../node_modules/.pnpm/bundle-name@4.1.0/node_modules/bundle-name/index.js", "../../node_modules/.pnpm/default-browser@5.5.0/node_modules/default-browser/windows.js", "../../node_modules/.pnpm/is-in-ssh@1.0.0/node_modules/is-in-ssh/index.js", "../src/cli/data.ts", "../src/cli/lib/data.ts", "../src/cli/deploy.ts", "../src/cli/lib/announceDeploymentTarget.ts", "../src/cli/lib/usage.ts", "../src/cli/lib/updates.ts", "../src/cli/lib/extractDeploymentNameForWorkOS.ts", "../src/cli/deploymentSelect.ts", "../src/cli/configure.ts", "../src/cli/lib/init.ts", "../../node_modules/.pnpm/openid-client@5.7.1/node_modules/openid-client/lib/index.mjs", "../src/cli/lib/login.ts", "../src/cli/deploymentCreate.ts", "../src/cli/lib/expiration.ts", "../src/cli/deploymentTokenCreate.ts", "../src/cli/deploymentTokenDelete.ts", "../src/cli/deploymentToken.ts", "../src/cli/usageLimits.ts", "../src/cli/env.ts", "../src/cli/envDefault.ts", "../src/cli/lib/usageLimits.ts", "../src/cli/deployment.ts", "../src/cli/deployments.ts", "../src/cli/dev.ts", "../src/cli/docs.ts", "../src/cli/lib/functionSpec.ts", "../src/cli/functionSpec.ts", "../src/cli/init.ts", "../src/cli/insights.ts", "../src/cli/lib/insights.ts", "../src/cli/integration.ts", "../src/cli/login.ts", "../src/cli/logout.ts", "../src/cli/logs.ts", "../src/cli/mcp.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/dist/chunk-Br0eD_fh.mjs", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/validators/dialects.ts", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/util.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/core.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/errors.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/parse.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/regexes.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/checks.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/doc.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/versions.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/schemas.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/memoizer.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/locales/en.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/registries.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/api.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/to-json-schema.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/json-schema-processors.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/classic/errors.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/classic/parse.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/classic/schemas.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/classic/compat.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/classic/iso.js", "../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/classic/coerce.js", "../../node_modules/.pnpm/@modelcontextprotocol+core@2.3.1/node_modules/@modelcontextprotocol/core/src/constants.ts", "../../node_modules/.pnpm/@modelcontextprotocol+core@2.3.1/node_modules/@modelcontextprotocol/core/src/schemas.ts", "../../node_modules/.pnpm/@modelcontextprotocol+core@2.3.1/node_modules/@modelcontextprotocol/core/src/auth.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/errors/crossBundleBrand.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/auth/errors.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/errors/sdkErrors.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/shared/authUtils.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/shared/clientCapabilityRequirements.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/shared/protocolEras.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/wire/textFallback.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/wire/resultFamilies.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/wire/rev2025-11-25/buildSchemas.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/wire/rev2025-11-25/legacyWrap.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/wire/rev2025-11-25/registry.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/wire/rev2025-11-25/codec.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/wire/rev2026-07-28/buildSchemas.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/shared/resultCacheHints.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/types/enums.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/types/errors.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/wire/rev2026-07-28/encodeContract.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/wire/rev2026-07-28/inputRequired.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/wire/rev2026-07-28/registry.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/wire/rev2026-07-28/codec.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/wire/codec.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/shared/envelope.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/types/schemas.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/types/guards.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/shared/mcpParamHeaders.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/shared/inboundClassification.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/util/schema.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/util/standardSchema.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/shared/elicitation.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/shared/inputRequired.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/shared/inputRequiredDriver.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/types/specTypeSchema.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/wire/bootstrap.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/shared/protocol.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/shared/inputRequiredEngine.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/content-type@1.0.5/node_modules/content-type/index.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/shared/mediaType.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/shared/metadataUtils.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/shared/stdio.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/shared/toolNameValidation.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/shared/transport.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/shared/uriTemplate.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/util/inMemory.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/util/zodCompat.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/wire/preload.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/validators/fromJsonSchema.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/code.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/scope.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/index.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/util.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/names.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/errors.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/boolSchema.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/rules.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/applicability.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/dataType.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/defaults.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/code.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/keyword.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/subschema.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/resolve.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/validate/index.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/validation_error.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/ref_error.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/index.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/data.json", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/utils.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/schemes.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/index.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/uri.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/core.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/id.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/ref.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/core/index.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitNumber.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/multipleOf.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/ucs2length.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitLength.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/pattern.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitProperties.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/required.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitItems.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/runtime/equal.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/const.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/enum.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/index.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/items.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/items2020.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/contains.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/dependencies.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/properties.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/not.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/anyOf.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/oneOf.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/allOf.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/if.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/thenElse.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/index.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/format/format.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/format/index.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/metadata.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/draft7.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/discriminator/types.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/discriminator/index.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-draft-07.json", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/ajv.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/dynamic/index.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/dependentRequired.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/validation/limitContains.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/next.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/unevaluated/index.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-2019-09/schema.json", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-2019-09/meta/applicator.json", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-2019-09/meta/content.json", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-2019-09/meta/core.json", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-2019-09/meta/format.json", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-2019-09/meta/meta-data.json", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-2019-09/meta/validation.json", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-2019-09/index.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/2019.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/vocabularies/draft2020.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-2020-12/schema.json", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/applicator.json", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/unevaluated.json", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/content.json", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/core.json", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/format-annotation.json", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/meta-data.json", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/validation.json", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/refs/json-schema-2020-12/index.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/2020.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.18.0/node_modules/ajv-formats/dist/formats.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.18.0/node_modules/ajv-formats/dist/limit.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/node_modules/.pnpm/ajv-formats@3.0.1_ajv@8.18.0/node_modules/ajv-formats/dist/index.js", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/core-internal/src/validators/ajvProvider.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/dist/shimsNode.mjs", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/completable.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/sseKeepAlive.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/serverEventBus.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/listenRouter.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/middleware/bearerAuth.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/middleware/oauthMetadata.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/scopeChallenge.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/legacyInputRequiredShim.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/server.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/mcp.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/perRequestTransport.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/invoke.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/requestBody.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/streamableHttp.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/createMcpHandler.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/middleware/hostHeaderValidation.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/middleware/originValidation.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/requestStateCodec.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/fromJsonSchema.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/stdio.ts", "../../node_modules/.pnpm/@modelcontextprotocol+server@2.3.1/node_modules/@modelcontextprotocol/server/src/server/serveStdio.ts", "../src/cli/lib/mcp/requestContext.ts", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Options.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Refs.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/errorMessages.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/selectParser.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/any.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/array.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/date.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/default.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/record.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/string.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/map.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/never.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/null.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/union.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/number.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/object.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/set.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parseDef.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js", "../../node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/index.js", "../src/cli/lib/mcp/tools/tables.ts", "../src/cli/lib/mcp/tools/data.ts", "../src/cli/lib/mcp/tools/status.ts", "../src/cli/lib/mcp/tools/functionSpec.ts", "../src/cli/lib/mcp/tools/run.ts", "../src/cli/lib/mcp/tools/env.ts", "../src/cli/lib/mcp/tools/runOneoffQuery.ts", "../src/cli/lib/mcp/tools/logs.ts", "../src/cli/lib/mcp/tools/insights.ts", "../src/cli/lib/mcp/tools/index.ts", "../src/cli/lib/utils/mutex.ts", "../src/cli/network_test.ts", "../src/cli/lib/networkTest.ts", "../src/cli/plugins.ts", "../src/cli/lib/plugins/claudeCode.ts", "../src/cli/lib/plugins/marketplaces.ts", "../src/cli/lib/plugins/utils.ts", "../src/cli/lib/plugins/codex.ts", "../src/cli/lib/plugins/harness.ts", "../src/cli/lib/plugins/skills.ts", "../src/cli/projectCreate.ts", "../src/cli/project.ts", "../src/cli/reinit.ts", "../src/cli/run.ts", "../src/cli/typecheck.ts", "../src/cli/update.ts", "../src/cli/program.ts"],
  "sourcesContent": ["const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n", "import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n", "// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n", "import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` \u2192 `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n", "declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n", "/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the `debug` singleton, or b) put your function elsewhere.\n *\n * Note: This file was originally called `global.ts`, but was changed to unblock users which might be doing\n * string replaces with bundlers like Vite for `global` (would break imports that rely on importing from utils/src/global).\n *\n * Why worldwide?\n *\n * Why not?\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { Integration } from '../types/integration';\nimport type { Carrier } from '../carrier';\nimport type { SdkSource } from './env';\n\n/** Internal global with common properties and Sentry extensions  */\nexport type InternalGlobal = {\n  navigator?: { userAgent?: string; maxTouchPoints?: number };\n  console: Console;\n  PerformanceObserver?: any;\n  Sentry?: any;\n  onerror?: {\n    (event: object | string, source?: string, lineno?: number, colno?: number, error?: Error): any;\n    __SENTRY_INSTRUMENTED__?: true;\n  };\n  onunhandledrejection?: {\n    (event: unknown): boolean;\n    __SENTRY_INSTRUMENTED__?: true;\n  };\n  SENTRY_ENVIRONMENT?: string;\n  SENTRY_DSN?: string;\n  SENTRY_RELEASE?: {\n    id?: string;\n  };\n  SENTRY_SDK_SOURCE?: SdkSource;\n  /**\n   * Debug IDs are indirectly injected by Sentry CLI or bundler plugins to directly reference a particular source map\n   * for resolving of a source file. The injected code will place an entry into the record for each loaded bundle/JS\n   * file.\n   */\n  _sentryDebugIds?: Record<string, string>;\n  /**\n   * Native debug IDs implementation (e.g., from Vercel).\n   * This uses the same format as _sentryDebugIds but with a different global name.\n   * Keys are `error.stack` strings, values are debug IDs.\n   */\n  _debugIds?: Record<string, string>;\n  /**\n   * Raw module metadata that is injected by bundler plugins.\n   *\n   * Keys are `error.stack` strings, values are the metadata.\n   */\n  _sentryModuleMetadata?: Record<string, any>;\n  _sentryEsmLoaderHookRegistered?: boolean;\n  _sentryWrappedDepth?: number;\n  /**\n   * Orchestrion bundler and runtime detection.\n   */\n  __SENTRY_ORCHESTRION__?: {\n    /** Empty array signifies runtime hooked */\n    runtime?: string[];\n    /** Empty array signifies bundler plugin ran */\n    bundler?: string[];\n    /**\n     * Channel-subscriber integration factories a bundler plugin's\n     * subscribe-injection stored here, keyed by export name (one per instrumented\n     * package actually bundled; the key dedupes packages split across several\n     * files). A bundler-only SDK (e.g. `@sentry/cloudflare`) reads these at\n     * `init()` and instantiates them.\n     */\n    integrations?: Map<string, () => Integration>;\n  };\n} & Carrier;\n\n/** Get's the global object for the current JavaScript runtime */\nexport const GLOBAL_OBJ = globalThis as unknown as InternalGlobal;\n", "// This is a magic string replaced by rollup\ndeclare const __SENTRY_SDK_VERSION__: string;\n\nexport const SDK_VERSION = typeof __SENTRY_SDK_VERSION__ === 'string' ? __SENTRY_SDK_VERSION__ : '0.0.0-unknown.0';\n", "import type { AsyncContextStack } from './asyncContext/stackStrategy';\nimport type { AsyncContextStrategy } from './asyncContext/types';\nimport type { Client } from './client';\nimport type { Scope } from './scope';\nimport type { SegmentSpanCaptureStrategy } from './tracing/segmentSpanCaptureStrategy';\nimport type { SerializedLog } from './types/log';\nimport type { SerializedMetric } from './types/metric';\nimport { SDK_VERSION } from './utils/version';\nimport { GLOBAL_OBJ } from './utils/worldwide';\n\n/**\n * An object that contains globally accessible properties and maintains a scope stack.\n * @hidden\n */\nexport interface Carrier {\n  __SENTRY__?: VersionedCarrier;\n}\n\ntype VersionedCarrier = {\n  version?: string;\n} & Record<Exclude<string, 'version'>, SentryCarrier>;\n\nexport interface SentryCarrier {\n  acs?: AsyncContextStrategy;\n  stack?: AsyncContextStack;\n\n  globalScope?: Scope;\n  defaultIsolationScope?: Scope;\n  defaultCurrentScope?: Scope;\n  loggerSettings?: { enabled: boolean };\n  /**\n   * A map of Sentry clients to their log buffers.\n   * This is used to store logs that are sent to Sentry.\n   */\n  clientToLogBufferMap?: WeakMap<Client, Array<SerializedLog>>;\n\n  /**\n   * A map of Sentry clients to their metric buffers.\n   * This is used to store metrics that are sent to Sentry.\n   */\n  clientToMetricBufferMap?: WeakMap<Client, Array<SerializedMetric>>;\n\n  /** Strategy for assembling segment spans into transactions; set by SDKs that defer capture. */\n  segmentSpanCaptureStrategy?: SegmentSpanCaptureStrategy;\n\n  /** Overwrites TextEncoder used in `@sentry/core`, need for `react-native@0.73` and older */\n  encodePolyfill?: (input: string) => Uint8Array;\n  /** Overwrites TextDecoder used in `@sentry/core`, need for `react-native@0.73` and older */\n  decodePolyfill?: (input: Uint8Array) => string;\n}\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nexport function getMainCarrier(): Carrier {\n  // This ensures a Sentry carrier exists\n  getSentryCarrier(GLOBAL_OBJ);\n  return GLOBAL_OBJ;\n}\n\n/** Will either get the existing sentry carrier, or create a new one. */\nexport function getSentryCarrier(carrier: Carrier): SentryCarrier {\n  const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n\n  // For now: First SDK that sets the .version property wins\n  __SENTRY__.version = __SENTRY__.version || SDK_VERSION;\n\n  // Intentionally populating and returning the version of \"this\" SDK instance\n  // rather than what's set in .version so that \"this\" SDK always gets its carrier\n  return (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n}\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__[]` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value\n * @returns the singleton\n */\nexport function getGlobalSingleton<Prop extends keyof SentryCarrier>(\n  name: Prop,\n  creator: () => NonNullable<SentryCarrier[Prop]>,\n  obj = GLOBAL_OBJ,\n): NonNullable<SentryCarrier[Prop]> {\n  const __SENTRY__ = (obj.__SENTRY__ = obj.__SENTRY__ || {});\n  const carrier = (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n  // Note: We do not want to set `carrier.version` here, as this may be called before any `init` is called, e.g. for the default scopes\n  return carrier[name] || (carrier[name] = creator());\n}\n", "import { getGlobalSingleton } from '../carrier';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { ConsoleLevel } from '../types/instrument';\nimport { GLOBAL_OBJ } from './worldwide';\n\nexport interface SentryDebugLogger {\n  disable(): void;\n  enable(): void;\n  isEnabled(): boolean;\n  log(...args: Parameters<typeof console.log>): void;\n  warn(...args: Parameters<typeof console.warn>): void;\n  error(...args: Parameters<typeof console.error>): void;\n}\n\nexport const CONSOLE_LEVELS: readonly ConsoleLevel[] = [\n  'debug',\n  'info',\n  'warn',\n  'error',\n  'log',\n  'assert',\n  'trace',\n] as const;\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\n/** This may be mutated by the console instrumentation. */\nexport const originalConsoleMethods: Partial<{\n  log(...args: Parameters<typeof console.log>): void;\n  info(...args: Parameters<typeof console.info>): void;\n  warn(...args: Parameters<typeof console.warn>): void;\n  error(...args: Parameters<typeof console.error>): void;\n  debug(...args: Parameters<typeof console.debug>): void;\n  assert(...args: Parameters<typeof console.assert>): void;\n  trace(...args: Parameters<typeof console.trace>): void;\n}> = {};\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nexport function consoleSandbox<T>(callback: () => T): T {\n  if (!('console' in GLOBAL_OBJ)) {\n    return callback();\n  }\n\n  const console = GLOBAL_OBJ.console;\n  const wrappedFuncs: Partial<Record<ConsoleLevel, (...args: unknown[]) => void>> = {};\n\n  const wrappedLevels = Object.keys(originalConsoleMethods) as ConsoleLevel[];\n\n  // Restore all wrapped console methods\n  wrappedLevels.forEach(level => {\n    const originalConsoleMethod = originalConsoleMethods[level];\n    wrappedFuncs[level] = console[level] as (...args: unknown[]) => void;\n    console[level] = originalConsoleMethod as (...args: unknown[]) => void;\n  });\n\n  try {\n    return callback();\n  } finally {\n    // Revert restoration to wrapped state\n    wrappedLevels.forEach(level => {\n      console[level] = wrappedFuncs[level] as (...args: unknown[]) => void;\n    });\n  }\n}\n\nfunction enable(): void {\n  _getLoggerSettings().enabled = true;\n}\n\nfunction disable(): void {\n  _getLoggerSettings().enabled = false;\n}\n\nfunction isEnabled(): boolean {\n  return _getLoggerSettings().enabled;\n}\n\nfunction log(...args: Parameters<typeof console.log>): void {\n  _maybeLog('log', ...args);\n}\n\nfunction warn(...args: Parameters<typeof console.warn>): void {\n  _maybeLog('warn', ...args);\n}\n\nfunction error(...args: Parameters<typeof console.error>): void {\n  _maybeLog('error', ...args);\n}\n\nfunction _maybeLog(level: ConsoleLevel, ...args: Parameters<(typeof console)[typeof level]>): void {\n  if (!DEBUG_BUILD) {\n    return;\n  }\n\n  if (isEnabled()) {\n    consoleSandbox(() => {\n      GLOBAL_OBJ.console[level](`${PREFIX}[${level}]:`, ...args);\n    });\n  }\n}\n\nfunction _getLoggerSettings(): { enabled: boolean } {\n  if (!DEBUG_BUILD) {\n    return { enabled: false };\n  }\n\n  return getGlobalSingleton('loggerSettings', () => ({ enabled: false }));\n}\n\n/**\n * This is a logger singleton which either logs things or no-ops if logging is not enabled.\n */\nexport const 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} satisfies SentryDebugLogger;\n", "import type { Event } from '../types/event';\nimport type { StackFrame } from '../types/stackframe';\nimport type { StackLineParser, StackParser } from '../types/stacktrace';\nimport type { VNode, VueViewModel } from '../types/vue';\n\nconst STACKTRACE_FRAME_LIMIT = 50;\nexport const UNKNOWN_FUNCTION = '?';\n// Used to sanitize webpack (error: *) wrapped stack errors\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nexport function createStackParser(...parsers: StackLineParser[]): StackParser {\n  const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n  return (stack: string, skipFirstLines: number = 0, framesToPop: number = 0): StackFrame[] => {\n    const frames: StackFrame[] = [];\n    const lines = stack.split('\\n');\n\n    for (let i = skipFirstLines; i < lines.length; i++) {\n      let line = lines[i] as string;\n      // Truncate lines over 1kb because many of the regular expressions use\n      // backtracking which results in run time that increases exponentially\n      // with input size. Huge strings can result in hangs/Denial of Service:\n      // https://github.com/getsentry/sentry-javascript/issues/2286\n      if (line.length > 1024) {\n        line = line.slice(0, 1024);\n      }\n\n      // https://github.com/getsentry/sentry-javascript/issues/5459\n      // Remove webpack (error: *) wrappers\n      const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n\n      // https://github.com/getsentry/sentry-javascript/issues/7813\n      // Skip Error: lines\n      // Using includes() instead of a regex to avoid O(n²) backtracking on long lines\n      // https://github.com/getsentry/sentry-javascript/issues/20052\n      if (cleanedLine.includes('Error: ')) {\n        continue;\n      }\n\n      for (const parser of sortedParsers) {\n        const frame = parser(cleanedLine);\n\n        if (frame) {\n          frames.push(frame);\n          break;\n        }\n      }\n\n      if (frames.length >= STACKTRACE_FRAME_LIMIT + framesToPop) {\n        break;\n      }\n    }\n\n    return stripSentryFramesAndReverse(frames.slice(framesToPop));\n  };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nexport function stackParserFromStackParserOptions(stackParser: StackParser | StackLineParser[]): StackParser {\n  if (Array.isArray(stackParser)) {\n    return createStackParser(...stackParser);\n  }\n  return stackParser;\n}\n\n/**\n * Removes Sentry frames from the top and bottom of the stack if present and enforces a limit of max number of frames.\n * Assumes stack input is ordered from top to bottom and returns the reverse representation so call site of the\n * function that caused the crash is the last frame in the array.\n * @hidden\n */\nexport function stripSentryFramesAndReverse(stack: ReadonlyArray<StackFrame>): StackFrame[] {\n  if (!stack.length) {\n    return [];\n  }\n\n  const localStack = Array.from(stack);\n\n  // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n  if (/sentryWrapped/.test(getLastStackFrame(localStack).function || '')) {\n    localStack.pop();\n  }\n\n  // Reversing in the middle of the procedure allows us to just pop the values off the stack\n  localStack.reverse();\n\n  // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n  if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || '')) {\n    localStack.pop();\n\n    // When using synthetic events, we will have a 2 levels deep stack, as `new Error('Sentry syntheticException')`\n    // is produced within the scope itself, making it:\n    //\n    //   Sentry.captureException()\n    //   scope.captureException()\n    //\n    // instead of just the top `Sentry` call itself.\n    // This forces us to possibly strip an additional frame in the exact same was as above.\n    if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || '')) {\n      localStack.pop();\n    }\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}\n\nfunction getLastStackFrame(arr: StackFrame[]): StackFrame {\n  return arr[arr.length - 1] || {};\n}\n\nconst defaultFunctionName = '<anonymous>';\n\n/**\n * Safely extract function name from itself\n */\nexport function getFunctionName(fn: unknown): string {\n  try {\n    if (!fn || typeof fn !== 'function') {\n      return defaultFunctionName;\n    }\n    return fn.name || defaultFunctionName;\n  } catch {\n    // Just accessing custom props in some Selenium environments\n    // can cause a \"Permission denied\" exception (see raven-js#495).\n    return defaultFunctionName;\n  }\n}\n\n/**\n * Get's stack frames from an event without needing to check for undefined properties.\n */\nexport function getFramesFromEvent(event: Event): StackFrame[] | undefined {\n  const exception = event.exception;\n\n  if (exception) {\n    const frames: StackFrame[] = [];\n    try {\n      // @ts-expect-error Object could be undefined\n      exception.values.forEach(value => {\n        // @ts-expect-error Value could be undefined\n        if (value.stacktrace.frames) {\n          // @ts-expect-error Value could be undefined\n          frames.push(...value.stacktrace.frames);\n        }\n      });\n      return frames;\n    } catch {\n      return undefined;\n    }\n  }\n  return undefined;\n}\n\n/**\n * Get the internal name of an internal Vue value, to represent it in a stacktrace.\n *\n * @param value The value to get the internal name of.\n * @deprecated This is Vue-specific and will be removed from `@sentry/core` in a future major version.\n * The `@sentry/vue` SDK inlines its own equivalent — there's no replacement export from core.\n */\nexport function getVueInternalName(value: VueViewModel | VNode): string {\n  // Check if it's a VNode (has __v_isVNode) or a component instance (has _isVue/__isVue)\n  const isVNode = '__v_isVNode' in value && value.__v_isVNode;\n\n  return isVNode ? '[VueVNode]' : '[VueViewModel]';\n}\n\n/**\n * Normalizes stack line paths by removing file:// prefix and leading slashes for Windows paths\n */\nexport function normalizeStackTracePath(path: string | undefined): string | undefined {\n  let filename = path?.startsWith('file://') ? path.slice(7) : path;\n  // If it's a Windows path, trim the leading slash so that `/C:/foo` becomes `C:/foo`\n  if (filename?.match(/\\/[A-Z]:/)) {\n    filename = filename.slice(1);\n  }\n  return filename;\n}\n", "import { DEBUG_BUILD } from '../debug-build';\nimport { debug } from '../utils/debug-logger';\nimport { getFunctionName } from '../utils/stacktrace';\n\nexport type InstrumentHandlerType =\n  | 'console'\n  | 'dom'\n  | 'fetch'\n  | 'fetch-body-resolved'\n  | 'history'\n  | 'xhr'\n  | 'error'\n  | 'unhandledrejection';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type InstrumentHandlerCallback = (data: any) => void;\n\n// We keep the handlers globally\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\n/** Add a handler function. Returns a function to remove the handler. */\nexport function addHandler(type: InstrumentHandlerType, handler: InstrumentHandlerCallback): () => void {\n  handlers[type] = handlers[type] || [];\n  handlers[type].push(handler);\n\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}\n\n/**\n * Reset all instrumentation handlers.\n * This can be used by tests to ensure we have a clean slate of instrumentation handlers.\n */\nexport function resetInstrumentationHandlers(): void {\n  Object.keys(handlers).forEach(key => {\n    handlers[key as InstrumentHandlerType] = undefined;\n  });\n}\n\n/** Maybe run an instrumentation function, unless it was already called. */\nexport function maybeInstrument(type: InstrumentHandlerType, instrumentFn: () => void): void {\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}\n\n/** Trigger handlers for a given instrumentation type. */\nexport function triggerHandlers(type: InstrumentHandlerType, data: unknown): void {\n  const typeHandlers = type && handlers[type];\n  if (!typeHandlers) {\n    return;\n  }\n\n  for (const handler of typeHandlers) {\n    try {\n      handler(data);\n    } catch (e) {\n      DEBUG_BUILD &&\n        debug.error(\n          `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n          e,\n        );\n    }\n  }\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { Primitive } from '../types/misc';\nimport type { ParameterizedString } from '../types/parameterize';\nimport type { PolymorphicEvent } from '../types/polymorphics';\nimport type { VNode, VueViewModel } from '../types/vue';\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isError(wat: unknown): wat is Error {\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}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat: unknown, className: string): boolean {\n  return objectToString.call(wat) === `[object ${className}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isErrorEvent(wat: unknown): boolean {\n  return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMError(wat: unknown): boolean {\n  return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMException(wat: unknown): boolean {\n  return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isString(wat: unknown): wat is string {\n  return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given string is parameterized\n * {@link isParameterizedString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isParameterizedString(wat: unknown): wat is ParameterizedString {\n  return (\n    typeof wat === 'object' &&\n    wat !== null &&\n    '__sentry_template_string__' in wat &&\n    '__sentry_template_values__' in wat\n  );\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPrimitive(wat: unknown): wat is Primitive {\n  return wat === null || isParameterizedString(wat) || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal, or a class instance.\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPlainObject(wat: unknown): wat is Record<string, unknown> {\n  return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value is a non-null object (i.e. `typeof` is `'object'` and it is not `null`).\n * Unlike {@link isPlainObject}, this also accepts arrays and class instances - it only rules out\n * `null`, primitives, and functions.\n * {@link isObjectLike}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isObjectLike(wat: unknown): wat is Record<PropertyKey, unknown> {\n  return typeof wat === 'object' && wat !== null;\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isEvent(wat: unknown): wat is PolymorphicEvent {\n  return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n * @deprecated This is browser-specific and will be removed from `@sentry/core` in a future major version.\n * Import `isElement` from `@sentry/browser-utils` instead.\n */\nexport function isElement(wat: unknown): boolean {\n  return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isRegExp(wat: unknown): wat is RegExp {\n  return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nexport function isThenable(wat: any): wat is PromiseLike<any> {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return Boolean(wat?.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a React SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n * @deprecated This is React-specific and will be removed from `@sentry/core` in a future major version.\n * Use the equivalent helper that ships with `@sentry/react` instead.\n */\nexport function isSyntheticEvent(wat: unknown): boolean {\n  return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\n// TODO: fix in v11, convert any to unknown\n// export function isInstanceOf<T>(wat: unknown, base: { new (...args: any[]): T }): wat is T {\nexport function isInstanceOf<T>(wat: any, base: any): wat is T {\n  try {\n    return wat instanceof base;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Checks whether given value's type is a Vue ViewModel or a VNode.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n * @deprecated This is Vue-specific and will be removed from `@sentry/core` in a future major version.\n * Use the equivalent helper that ships with `@sentry/vue` instead.\n */\nexport function isVueViewModel(wat: unknown): wat is VueViewModel | VNode {\n  // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n  // We also need to check for __v_isVNode because Vue 3 component render instances have an internal __v_isVNode property.\n  return !!(\n    typeof wat === 'object' &&\n    wat !== null &&\n    ((wat as VueViewModel).__isVue || (wat as VueViewModel)._isVue || (wat as { __v_isVNode?: boolean }).__v_isVNode)\n  );\n}\n\n/**\n * Checks whether the given parameter is a Standard Web API Request instance.\n *\n * Returns false if Request is not available in the current runtime.\n */\nexport function isRequest(request: unknown): request is Request {\n  return typeof Request !== 'undefined' && isInstanceOf(request, Request);\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { WrappedFunction } from '../types/wrappedfunction';\nimport { debug } from './debug-logger';\nimport { isError, isEvent, isObjectLike, isPrimitive } from './is';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * If the method on the passed object is not a function, the wrapper will not be applied.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, <other\n * args>)` or `origMethod.apply(this, [<other args>])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\n\nexport function fill(source: { [key: string]: any }, name: string, replacementFactory: (...args: any[]) => any): void {\n  if (!(name in source)) {\n    return;\n  }\n\n  // explicitly casting to unknown because we don't know the type of the method initially at all\n  const original = source[name] as unknown;\n\n  if (typeof original !== 'function') {\n    return;\n  }\n\n  const wrapped = replacementFactory(original) as WrappedFunction;\n\n  // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n  // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n  if (typeof wrapped === 'function') {\n    markFunctionWrapped(wrapped, original);\n  }\n\n  try {\n    source[name] = wrapped;\n  } catch {\n    DEBUG_BUILD && debug.log(`Failed to replace method \"${name}\" in object`, source);\n  }\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nexport function addNonEnumerableProperty(obj: object, name: string | symbol, value: unknown): void {\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}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nexport function markFunctionWrapped(wrapped: WrappedFunction, original: WrappedFunction): void {\n  try {\n    const proto = original.prototype || {};\n    wrapped.prototype = original.prototype = proto;\n    addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n  } catch {} // eslint-disable-line no-empty\n}\n\n/**\n * Wrap a method on an object by name, only if it is not already wrapped.\n *\n * Note: to set the wrapped method as a non-enumerable property, pass\n * false as the `enumerable` argument. This could be detected, but only\n * by either walking up the prototype chain, or iterating over all fields\n * in a `for(in)` loop. Neither are an acceptable performance impact for\n * the rare case where we might patch a non-enumerable method.\n */\nexport function wrapMethod<O extends {}, T extends string & keyof O>(\n  obj: O,\n  field: T,\n  wrapped: WrappedFunction,\n  enumerable: boolean = true,\n): void {\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}\n\n/**\n * This extracts the original function if available.  See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function getOriginalFunction<T extends Function>(func: WrappedFunction<T>): T | undefined {\n  return func.__sentry_original__;\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argument itself, when value is neither an Event nor\n *  an Error.\n */\nexport function convertToPlainObject<V>(value: V): Record<string, unknown> | V {\n  if (isError(value)) {\n    return {\n      message: value.message,\n      name: value.name,\n      stack: value.stack,\n      ...getOwnProperties(value),\n    };\n  }\n\n  // This handles browser events specifically, where certain properties are non-enumerable and need to be unpacked.\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\n  return value;\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj: unknown): { [key: string]: unknown } {\n  if (isObjectLike(obj)) {\n    return Object.fromEntries(Object.entries(obj));\n  }\n  return {};\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nexport function extractExceptionKeysForMessage(exception: Record<string, unknown>): string {\n  const keys = Object.keys(convertToPlainObject(exception));\n  keys.sort();\n\n  return !keys[0] ? '[object has no keys]' : keys.join(', ');\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n *\n * @deprecated This function is no longer used by the SDK and will be removed in a future major version.\n */\nexport function dropUndefinedKeys<T>(inputValue: T): T {\n  // This map keeps track of what already visited nodes map to.\n  // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n  // references as the input object.\n  const memoizationMap = new Map<unknown, unknown>();\n\n  // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n  return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys<T>(inputValue: T, memoizationMap: Map<unknown, unknown>): T {\n  // Early return for primitive values\n  if (inputValue === null || typeof inputValue !== 'object') {\n    return inputValue;\n  }\n\n  // Check memo map first for all object types\n  const memoVal = memoizationMap.get(inputValue);\n  if (memoVal !== undefined) {\n    return memoVal as T;\n  }\n\n  // handle arrays\n  if (Array.isArray(inputValue)) {\n    const returnValue: unknown[] = [];\n    // Store mapping to handle circular references\n    memoizationMap.set(inputValue, returnValue);\n\n    inputValue.forEach(value => {\n      returnValue.push(_dropUndefinedKeys(value, memoizationMap));\n    });\n\n    return returnValue as unknown as T;\n  }\n\n  if (isPojo(inputValue)) {\n    const returnValue: { [key: string]: unknown } = {};\n    // Store mapping to handle circular references\n    memoizationMap.set(inputValue, returnValue);\n\n    const keys = Object.keys(inputValue);\n\n    keys.forEach(key => {\n      const val = inputValue[key];\n      if (val !== undefined) {\n        returnValue[key] = _dropUndefinedKeys(val, memoizationMap);\n      }\n    });\n\n    return returnValue as T;\n  }\n\n  // For other object types, return as is\n  return inputValue;\n}\n\nfunction isPojo(input: unknown): input is Record<string, unknown> {\n  // Plain objects have Object as constructor or no constructor\n  const constructor = (input as object).constructor;\n  return constructor === Object || constructor === undefined;\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nexport function objectify(wat: unknown): typeof Object {\n  let objectified;\n  switch (true) {\n    // this will catch both undefined and null\n    case wat == undefined:\n      objectified = new String(wat);\n      break;\n\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\n    // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n    case isPrimitive(wat):\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      objectified = new (wat as any).constructor(wat);\n      break;\n\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", "import { GLOBAL_OBJ } from './worldwide';\n\nexport type RandomSafeContextRunner = <T>(callback: () => T) => T;\n\n// undefined = not yet resolved, null = no runner found, function = runner found\nlet RESOLVED_RUNNER: RandomSafeContextRunner | null | undefined;\n\n/**\n * Simple wrapper that allows SDKs to *secretly* set context wrapper to generate safe random IDs in cache components contexts\n */\nexport function withRandomSafeContext<T>(cb: () => T): T {\n  // Skips future symbol lookups if we've already resolved (or attempted to resolve) the runner once\n  if (RESOLVED_RUNNER !== undefined) {\n    return RESOLVED_RUNNER ? RESOLVED_RUNNER(cb) : cb();\n  }\n\n  const sym = Symbol.for('__SENTRY_SAFE_RANDOM_ID_WRAPPER__');\n  const globalWithSymbol: typeof GLOBAL_OBJ & { [sym]?: RandomSafeContextRunner } = GLOBAL_OBJ;\n\n  if (sym in globalWithSymbol && typeof globalWithSymbol[sym] === 'function') {\n    RESOLVED_RUNNER = globalWithSymbol[sym];\n    return RESOLVED_RUNNER(cb);\n  }\n\n  RESOLVED_RUNNER = null;\n  return cb();\n}\n\n/**\n * Identical to Math.random() but wrapped in withRandomSafeContext\n * to ensure safe random number generation in certain contexts (e.g., Next.js Cache Components).\n */\nexport function safeMathRandom(): number {\n  return withRandomSafeContext(() => Math.random());\n}\n\n/**\n * Identical to Date.now() but wrapped in withRandomSafeContext\n * to ensure safe time value generation in certain contexts (e.g., Next.js Cache Components).\n */\nexport function safeDateNow(): number {\n  return withRandomSafeContext(() => Date.now());\n}\n", "import { addNonEnumerableProperty } from './object';\n\n/**\n * Internal symbols for normalization behavior. JSON and other structured user payloads cannot\n * carry these keys, so they cannot spoof SDK-only normalization hints.\n * We use Symbol.for to ensure that the symbols are the same across different modules/files.\n */\nconst SENTRY_SKIP_NORMALIZATION = Symbol.for('sentry.skipNormalization');\nconst SENTRY_OVERRIDE_NORMALIZATION_DEPTH = Symbol.for('sentry.overrideNormalizationDepth');\n\n/** Marks an object so `normalize` returns it unchanged (already-normalized SDK data). */\nexport function setSkipNormalizationHint(obj: object): void {\n  addNonEnumerableProperty(obj, SENTRY_SKIP_NORMALIZATION, true);\n}\n\n/** Overrides remaining normalization depth from this object downward (e.g. Redux / Pinia state). */\nexport function setNormalizationDepthOverrideHint(obj: object, depth: number): void {\n  addNonEnumerableProperty(obj, SENTRY_OVERRIDE_NORMALIZATION_DEPTH, depth);\n}\n\n/** @internal */\nexport function hasSkipNormalizationHint(value: object) {\n  return Boolean((value as Record<symbol, unknown>)[SENTRY_SKIP_NORMALIZATION]);\n}\n\n/** @internal */\nexport function getNormalizationDepthOverrideHint(value: object): number | undefined {\n  const v = (value as Record<symbol, unknown>)[SENTRY_OVERRIDE_NORMALIZATION_DEPTH];\n  return typeof v === 'number' ? v : undefined;\n}\n", "import type { Primitive } from '../types/misc';\nimport { getNormalizationDepthOverrideHint, hasSkipNormalizationHint } from './normalizationHints';\nimport { convertToPlainObject } from './object';\nimport { getFunctionName } from './stacktrace';\n\ntype Stringifier = (value: Exclude<unknown, string | number | boolean | null>) => string | undefined;\n\n// We store a custom stringifier in module scope, which is not bullet proof\n// however, we currently only really use this for browser-specific values, where this should work just fine, generally.\nlet stringifier: Stringifier | undefined;\n\n/**\n * Set a custom stringifier for the normalize function.\n * If this returns a non-empty string, it will be used instead of the default stringification.\n * Return undefined to fall back to the generic behavior.\n */\nexport function setNormalizeStringifier(newStringifier: Stringifier | undefined): void {\n  stringifier = newStringifier;\n}\n\ntype Prototype = { constructor?: (...args: unknown[]) => unknown };\n// This is a hack to placate TS, relying on the fact that technically, arrays are objects with integer keys. Normally we\n// think of those keys as actual numbers, but `arr['0']` turns out to work just as well as `arr[0]`, and doing it this\n// way lets us use a single type in the places where behave as if we are only dealing with objects, even if some of them\n// might be arrays.\ntype ObjOrArray<T> = { [key: string]: T };\n\ntype MemoFunc = [\n  // memoize\n  (obj: object) => boolean,\n  // unmemoize\n  (obj: object) => void,\n];\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normalized output.\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function normalize(input: unknown, depth: number = 100, maxProperties: number = +Infinity): any {\n  try {\n    // since we're at the outermost level, we don't provide a key\n    return visit('', input, depth, maxProperties);\n  } catch (err) {\n    return { ERROR: `**non-serializable** (${err})` };\n  }\n}\n\n/** JSDoc */\nexport function normalizeToSize<T>(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  object: { [key: string]: any },\n  // Default Node.js REPL depth\n  depth: number = 3,\n  // 100kB, as 200kB is max payload size, so half sounds reasonable\n  maxSize: number = 100 * 1024,\n): T {\n  const normalized = normalize(object, depth);\n\n  if (jsonSize(normalized) > maxSize) {\n    return normalizeToSize(object, depth - 1, maxSize);\n  }\n\n  return normalized as T;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n  key: string,\n  value: unknown,\n  depth: number = +Infinity,\n  maxProperties: number = +Infinity,\n  memo = memoBuilder(),\n): Primitive | ObjOrArray<unknown> {\n  const [memoize, unmemoize] = memo;\n\n  // Get the simple cases out of the way first\n  if (\n    value == null || // this matches null and undefined -> eqeq not eqeqeq\n    ['boolean', 'string'].includes(typeof value) ||\n    (typeof value === 'number' && Number.isFinite(value))\n  ) {\n    return value as Primitive;\n  }\n\n  const stringified = stringifyValue(key, value);\n\n  // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n  // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n  if (!stringified.startsWith('[object ')) {\n    return stringified;\n  }\n\n  // From here on, we can assert that `value` is either an object or an array.\n\n  // Do not normalize objects that we know have already been normalized. Hints use internal symbols\n  // (see normalizationHints.ts) so user-controlled JSON cannot spoof them.\n  if (hasSkipNormalizationHint(value)) {\n    return value as ObjOrArray<unknown>;\n  }\n\n  // Override remaining depth from this node (e.g. Redux / Pinia state). Set via setNormalizationDepthOverrideHint.\n  const overrideDepth = getNormalizationDepthOverrideHint(value);\n  const remainingDepth = overrideDepth !== undefined ? overrideDepth : depth;\n\n  // We're also done if we've reached the max depth\n  if (remainingDepth === 0) {\n    // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n    return stringified.replace('object ', '');\n  }\n\n  // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n  if (memoize(value)) {\n    return '[Circular ~]';\n  }\n\n  // If the value has a `toJSON` method, we call it to extract more information\n  const valueWithToJSON = value as unknown & { toJSON?: () => unknown };\n  if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n    try {\n      const jsonValue = valueWithToJSON.toJSON();\n      // We need to normalize the return value of `.toJSON()` in case it has circular references\n      return visit('', jsonValue, remainingDepth - 1, maxProperties, memo);\n    } catch {\n      // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n    }\n  }\n\n  // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n  // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n  // property/entry, and keep track of the number of items we add to it.\n  const normalized = (Array.isArray(value) ? [] : {}) as ObjOrArray<unknown>;\n  let numAdded = 0;\n\n  // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n  // properties are non-enumerable and otherwise would get missed.\n  const visitable = convertToPlainObject(value as ObjOrArray<unknown>);\n\n  for (const visitKey in visitable) {\n    // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n    if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n      continue;\n    }\n\n    if (numAdded >= maxProperties) {\n      normalized[visitKey] = '[MaxProperties ~]';\n      break;\n    }\n\n    // Recursively visit all the child nodes\n    const visitValue = visitable[visitKey];\n    normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n\n    numAdded++;\n  }\n\n  // Once we've visited all the branches, remove the parent from memo storage\n  unmemoize(value);\n\n  // Return accumulated values\n  return normalized;\n}\n\n/* eslint-disable complexity */\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nexport function stringifyValue(\n  key: unknown,\n  // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n  // our internal use, it'll do\n  value: Exclude<unknown, string | number | boolean | null>,\n): string {\n  try {\n    // Runtime-specific stringifications (browser, framework integrations) are registered on the\n    // async-context strategy. Consult them before the universal fallbacks below.\n    if (stringifier) {\n      const stringified = stringifier(value);\n      // Safe to ignore empty strings here as well, we wont stringify to this\n      if (stringified) {\n        return stringified;\n      }\n    }\n\n    if (typeof global !== 'undefined' && value === global) {\n      return '[Global]';\n    }\n\n    if (typeof value === 'number' && !Number.isFinite(value)) {\n      return `[${value}]`;\n    }\n\n    if (typeof value === 'function') {\n      return `[Function: ${getFunctionName(value)}]`;\n    }\n\n    if (typeof value === 'symbol') {\n      return `[${String(value)}]`;\n    }\n\n    // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n    if (typeof value === 'bigint') {\n      return `[BigInt: ${String(value)}]`;\n    }\n\n    // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n    // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n    // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n    // we can make sure that only plain objects come out that way.\n    const objName = getConstructorName(value);\n\n    return `[object ${objName}]`;\n  } catch (err) {\n    return `**non-serializable** (${err})`;\n  }\n}\n/* eslint-enable complexity */\n\nfunction getConstructorName(value: unknown): string {\n  const prototype: Prototype | null = Object.getPrototypeOf(value);\n\n  return prototype?.constructor ? prototype.constructor.name : 'null prototype';\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value: string): number {\n  // eslint-disable-next-line no-bitwise\n  return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction jsonSize(value: any): number {\n  return utf8Length(JSON.stringify(value));\n}\n\n/**\n * Normalizes URLs in exceptions and stacktraces to a base path so Sentry can fingerprint\n * across platforms and working directory.\n *\n * @param url The URL to be normalized.\n * @param basePath The application base path.\n * @returns The normalized URL.\n */\nexport function normalizeUrlToBase(url: string, basePath: string): string {\n  const escapedBase = basePath\n    // Backslash to forward\n    .replace(/\\\\/g, '/')\n    // Escape RegExp special characters\n    .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n\n  let newUrl = url;\n  try {\n    newUrl = decodeURI(url);\n  } catch {\n    // Sometime this breaks\n  }\n  return (\n    newUrl\n      .replace(/\\\\/g, '/')\n      .replace(/webpack:\\/?/g, '') // Remove intermediate base path\n      // oxlint-disable-next-line sdk/no-regexp-constructor\n      .replace(new RegExp(`(file://)?/*${escapedBase}/*`, 'ig'), 'app:///')\n  );\n}\n\n/**\n * Helper to decycle json objects\n */\nfunction memoBuilder(): MemoFunc {\n  const inner = new WeakSet<object>();\n  function memoize(obj: object): boolean {\n    if (inner.has(obj)) {\n      return true;\n    }\n    inner.add(obj);\n    return false;\n  }\n\n  function unmemoize(obj: object): void {\n    inner.delete(obj);\n  }\n  return [memoize, unmemoize];\n}\n", "import { isPrimitive, isRegExp, isString } from './is';\nimport { stringifyValue } from './normalize';\n\nexport { escapeStringForRegex } from '../vendor/escapeStringForRegex';\n\n/**\n * Coerce a value to a string without ever throwing. Strings pass through unchanged (so an\n * already-serialized value isn't double-encoded and a plain string isn't wrapped in quotes);\n * anything else is `JSON.stringify`-ed, falling back to `fallback` if that throws (e.g. on\n * circular references or `BigInt`). Returns `undefined` for values `JSON.stringify` itself drops\n * (top-level `undefined`, functions, symbols), matching `JSON.stringify`'s own runtime behavior.\n *\n * @param value the value to stringify\n * @param fallback returned when serialization throws, or, if a function, called with `value` to\n *   produce the fallback. Defaults to `'[unserializable]'`.\n */\nexport function stringify(\n  value: unknown,\n  fallback: string | ((value: unknown) => string) = '[unserializable]',\n): string | undefined {\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}\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nexport function truncate(str: string, max: number = 0): string {\n  if (typeof str !== 'string' || max === 0) {\n    return str;\n  }\n  return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nexport function snipLine(line: string, colno: number): string {\n  let newLine = line;\n  const lineLength = newLine.length;\n  if (lineLength <= 150) {\n    return newLine;\n  }\n  if (colno > lineLength) {\n    // eslint-disable-next-line no-param-reassign\n    colno = lineLength;\n  }\n\n  let start = Math.max(colno - 60, 0);\n  if (start < 5) {\n    start = 0;\n  }\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\n  newLine = newLine.slice(start, end);\n  if (start > 0) {\n    newLine = `'{snip} ${newLine}`;\n  }\n  if (end < lineLength) {\n    newLine += ' {snip}';\n  }\n\n  return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\nexport function safeJoin(input: unknown[], delimiter?: string): string {\n  if (!Array.isArray(input)) {\n    return '';\n  }\n\n  const output = [];\n  // eslint-disable-next-line typescript/prefer-for-of\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      // While stringifyValue does not special-case errors, because we later handle them specifically based on the [object XXX] fallback,\n      // in this method we want to render them more nicely\n      output.push(value.message ? `${value.name}: ${value.message}` : value.name);\n    } else {\n      output.push(stringifyValue(undefined, value));\n    }\n  }\n\n  return output.join(delimiter);\n}\n\n/**\n * Checks if the given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nexport function isMatchingPattern(\n  value: string,\n  pattern: RegExp | string | ((value: string) => boolean),\n  requireExactStringMatch: boolean = false,\n): boolean {\n  if (!isString(value)) {\n    return false;\n  }\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\n  return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nexport function stringMatchesSomePattern(\n  testString: string,\n  patterns:\n    | Array<string | RegExp | ((value: string) => boolean)>\n    | Set<string | RegExp | ((value: string) => boolean)> = [],\n  requireExactStringMatch: boolean = false,\n): boolean {\n  for (const pattern of patterns) {\n    if (isMatchingPattern(testString, pattern, requireExactStringMatch)) {\n      return true;\n    }\n  }\n  return false;\n}\n", "import type { Event } from '../types/event';\nimport type { Exception } from '../types/exception';\nimport type { Mechanism } from '../types/mechanism';\nimport type { StackFrame } from '../types/stackframe';\nimport { addNonEnumerableProperty } from './object';\nimport { safeMathRandom, withRandomSafeContext } from './randomSafeContext';\nimport { snipLine } from './string';\nimport { GLOBAL_OBJ } from './worldwide';\n\ninterface CryptoInternal {\n  randomUUID?(): string;\n}\n\n/** An interface for common properties on global */\ninterface CryptoGlobal {\n  msCrypto?: CryptoInternal;\n  crypto?: CryptoInternal;\n}\n\nfunction getCrypto(): CryptoInternal | undefined {\n  const gbl = GLOBAL_OBJ as typeof GLOBAL_OBJ & CryptoGlobal;\n  return gbl.crypto || gbl.msCrypto;\n}\n\nlet emptyUuid: string | undefined;\n\nfunction getRandomByte(): number {\n  return safeMathRandom() * 16;\n}\n\n/**\n * UUID4 generator\n * @param crypto Object that provides the crypto API.\n * @returns string Generated UUID4.\n */\nexport function uuid4(crypto = getCrypto()): string {\n  try {\n    if (crypto?.randomUUID) {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      return withRandomSafeContext(() => crypto.randomUUID!()).replace(/-/g, '');\n    }\n  } catch {\n    // some runtimes can crash invoking crypto\n    // https://github.com/getsentry/sentry-javascript/issues/8935\n  }\n\n  if (!emptyUuid) {\n    // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n    // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n    emptyUuid = ([1e7] as unknown as string) + 1e3 + 4e3 + 8e3 + 1e11;\n  }\n\n  return emptyUuid.replace(/[018]/g, c =>\n    // eslint-disable-next-line no-bitwise\n    ((c as unknown as number) ^ ((getRandomByte() & 15) >> ((c as unknown as number) / 4))).toString(16),\n  );\n}\n\nfunction getFirstException(event: Event): Exception | undefined {\n  return event.exception?.values?.[0];\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nexport function getEventDescription(event: Event): string {\n  const { message, event_id: eventId } = event;\n  if (message) {\n    return message;\n  }\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}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nexport function addExceptionTypeValue(event: Event, value?: string, type?: string): void {\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}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nexport function addExceptionMechanism(event: Event, newMechanism?: Partial<Mechanism>): void {\n  const firstException = getFirstException(event);\n  if (!firstException) {\n    return;\n  }\n\n  const defaultMechanism = { type: 'generic', handled: true };\n  const currentMechanism = firstException.mechanism;\n  firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n  if (newMechanism && 'data' in newMechanism) {\n    const mergedData = { ...currentMechanism?.data, ...newMechanism.data };\n    firstException.mechanism.data = mergedData;\n  }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n  /^(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-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\ninterface SemVer {\n  major?: number;\n  minor?: number;\n  patch?: number;\n  prerelease?: string;\n  buildmetadata?: string;\n}\n\nfunction _parseInt(input: string | undefined): number {\n  return parseInt(input || '', 10);\n}\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nexport function parseSemver(input: string): SemVer {\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) ? undefined : major,\n    minor: isNaN(minor) ? undefined : minor,\n    patch: isNaN(patch) ? undefined : patch,\n    prerelease: match[4],\n  };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nexport function addContextToFrame(lines: string[], frame: StackFrame, linesOfContext: number = 5): void {\n  // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n  if (frame.lineno === undefined) {\n    return;\n  }\n\n  const maxLines = lines.length;\n  const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n  frame.pre_context = lines\n    .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n    .map((line: string) => snipLine(line, 0));\n\n  // We guard here to ensure this is not larger than the existing number of lines\n  const lineIndex = Math.min(maxLines - 1, sourceLine);\n\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  frame.context_line = snipLine(lines[lineIndex]!, frame.colno || 0);\n\n  frame.post_context = lines\n    .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n    .map((line: string) => snipLine(line, 0));\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nexport function checkOrSetAlreadyCaught(exception: unknown): boolean {\n  if (isAlreadyCaptured(exception)) {\n    return true;\n  }\n\n  try {\n    // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n    // `ExtraErrorData` integration\n    addNonEnumerableProperty(exception as { [key: string]: unknown }, '__sentry_captured__', true);\n  } catch {\n    // `exception` is a primitive, so we can't mark it seen\n  }\n\n  return false;\n}\n\n/**\n * Checks whether we've already captured the given exception (note: not an identical exception - the very object).\n * It is considered already captured if it has the `__sentry_captured__` property set to `true`.\n *\n * @internal Only considered for internal usage\n */\nexport function isAlreadyCaptured(exception: unknown): boolean | void {\n  try {\n    return (exception as { __sentry_captured__?: boolean }).__sentry_captured__;\n  } catch {} // eslint-disable-line no-empty\n}\n", "import { safeDateNow, withRandomSafeContext } from './randomSafeContext';\nimport { GLOBAL_OBJ } from './worldwide';\n\nconst ONE_SECOND_IN_MS = 1000;\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\ninterface Performance {\n  /**\n   * The millisecond timestamp at which measurement began, measured in Unix time.\n   */\n  timeOrigin: number;\n  /**\n   * Returns the current millisecond timestamp, where 0 represents the start of measurement.\n   */\n  now(): number;\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n */\nexport function dateTimestampInSeconds(): number {\n  return safeDateNow() / ONE_SECOND_IN_MS;\n}\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction createUnixTimestampInSecondsFunc(): () => number {\n  const { performance } = GLOBAL_OBJ as typeof GLOBAL_OBJ & { performance?: Performance };\n  // Some browser and environments don't have a performance or timeOrigin, so we fallback to\n  // using Date.now() to compute the starting time.\n  if (!performance?.now || !performance.timeOrigin) {\n    return dateTimestampInSeconds;\n  }\n\n  const timeOrigin = performance.timeOrigin;\n\n  // performance.now() is a monotonic clock, which means it starts at 0 when the process begins. To get the current\n  // wall clock time (actual UNIX timestamp), we need to add the starting time origin and the current time elapsed.\n  //\n  // TODO: This does not account for the case where the monotonic clock that powers performance.now() drifts from the\n  // wall clock time, which causes the returned timestamp to be inaccurate. We should investigate how to detect and\n  // correct for this.\n  // See: https://github.com/getsentry/sentry-javascript/issues/2590\n  // See: https://github.com/mdn/content/issues/4713\n  // See: https://dev.to/noamr/when-a-millisecond-is-not-a-millisecond-3h6\n  return () => {\n    return (timeOrigin + withRandomSafeContext(() => performance.now())) / ONE_SECOND_IN_MS;\n  };\n}\n\nlet _cachedTimestampInSeconds: (() => number) | undefined;\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nexport function timestampInSeconds(): number {\n  // We store this in a closure so that we don't have to create a new function every time this is called.\n  const func = _cachedTimestampInSeconds ?? (_cachedTimestampInSeconds = createUnixTimestampInSecondsFunc());\n  return func();\n}\n\n/**\n * Cached result of getBrowserTimeOrigin.\n */\nlet cachedTimeOrigin: number | null | undefined = null;\n\n/**\n * Gets the time origin and the mode used to determine it.\n *\n * Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n * performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n * data as reliable if they are within a reasonable threshold of the current time.\n *\n * TODO: move to `@sentry/browser-utils` package.\n */\nfunction getBrowserTimeOrigin(): number | undefined {\n  const { performance } = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n  if (!performance?.now) {\n    return undefined;\n  }\n\n  const threshold = 300_000; // 5 minutes in milliseconds\n  const performanceNow = withRandomSafeContext(() => performance.now());\n  const dateNow = safeDateNow();\n\n  const timeOrigin = performance.timeOrigin;\n  if (typeof timeOrigin === 'number') {\n    const timeOriginDelta = Math.abs(timeOrigin + performanceNow - dateNow);\n    if (timeOriginDelta < threshold) {\n      return timeOrigin;\n    }\n  }\n\n  // TODO: Remove all code related to `performance.timing.navigationStart` once we drop support for Safari 14.\n  // `performance.timeSince` is available in Safari 15.\n  // see: https://caniuse.com/mdn-api_performance_timeorigin\n\n  // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n  // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n  // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n  // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n  // Date API.\n  // eslint-disable-next-line typescript/no-deprecated\n  const navigationStart = performance.timing?.navigationStart;\n  if (typeof navigationStart === 'number') {\n    const navigationStartDelta = Math.abs(navigationStart + performanceNow - dateNow);\n    if (navigationStartDelta < threshold) {\n      return navigationStart;\n    }\n  }\n\n  // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to subtracting\n  // `performance.now()` from `Date.now()`.\n  return dateNow - performanceNow;\n}\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nexport function browserPerformanceTimeOrigin(): number | undefined {\n  if (cachedTimeOrigin === null) {\n    cachedTimeOrigin = getBrowserTimeOrigin();\n  }\n\n  return cachedTimeOrigin;\n}\n", "import type { SerializedSession, Session, SessionContext, SessionStatus } from './types/session';\nimport { uuid4 } from './utils/misc';\nimport { timestampInSeconds } from './utils/time';\n\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nexport function makeSession(context?: Omit<SessionContext, 'started' | 'status'>): Session {\n  // Both timestamp and started are in seconds since the UNIX epoch.\n  const startingTime = timestampInSeconds();\n\n  const session: 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\n  if (context) {\n    updateSession(session, context);\n  }\n\n  return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see Client.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\nexport function updateSession(session: Session, context: SessionContext = {}): void {\n  if (context.user) {\n    if (!session.ipAddress && context.user.ip_address) {\n      session.ipAddress = context.user.ip_address;\n    }\n\n    if (!session.did && !context.did) {\n      session.did = context.user.id || context.user.email || context.user.username;\n    }\n  }\n\n  session.timestamp = context.timestamp || timestampInSeconds();\n\n  if (context.abnormal_mechanism) {\n    session.abnormal_mechanism = context.abnormal_mechanism;\n  }\n\n  if (context.ignoreDuration) {\n    session.ignoreDuration = context.ignoreDuration;\n  }\n  if (context.sid) {\n    // Good enough uuid validation. — Kamil\n    session.sid = context.sid.length === 32 ? context.sid : uuid4();\n  }\n  if (context.init !== undefined) {\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 = undefined;\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}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n *               this function will keep the previously set status, unless it was `'ok'` in which case\n *               it is changed to `'exited'`.\n */\nexport function closeSession(session: Session, status?: Exclude<SessionStatus, 'ok'>): void {\n  let context = {};\n  if (status) {\n    context = { status };\n  } else if (session.status === 'ok') {\n    context = { status: 'exited' };\n  }\n\n  updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session: Session): SerializedSession {\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 * 1000).toISOString(),\n    timestamp: new Date(session.timestamp * 1000).toISOString(),\n    status: session.status,\n    errors: session.errors,\n    did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\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", "/**\n * Shallow merge two objects.\n * Does not mutate the passed in objects.\n * Undefined/empty values in the merge object will overwrite existing values.\n *\n * By default, this merges 2 levels deep.\n */\nexport function merge<T>(initialObj: T, mergeObj: T, levels = 2): T {\n  // If the merge value is not an object, or we have no merge levels left,\n  // we just set the value to the merge value\n  if (!mergeObj || typeof mergeObj !== 'object' || levels <= 0) {\n    return mergeObj;\n  }\n\n  // If the merge object is an empty object, and the initial object is not undefined, we return the initial object\n  if (initialObj && Object.keys(mergeObj).length === 0) {\n    return initialObj;\n  }\n\n  // Clone object\n  const output = { ...initialObj };\n\n  // Merge values into output, resursively\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\n  return output;\n}\n", "import { uuid4 } from './misc';\n\n/**\n * Generate a random, valid trace ID.\n */\nexport function generateTraceId(): string {\n  return uuid4();\n}\n\n/**\n * Generate a random, valid span ID.\n */\nexport function generateSpanId(): string {\n  return uuid4().substring(16);\n}\n", "import { GLOBAL_OBJ } from './worldwide';\n\n/**\n * Interface representing a weak reference to an object.\n * This matches the standard WeakRef interface but is defined here\n * because WeakRef is not available in ES2020 type definitions.\n */\ninterface WeakRefLike<T extends object> {\n  deref(): T | undefined;\n}\n\n/**\n * A wrapper type that represents either a WeakRef-like object or a direct reference.\n * Used for optional weak referencing in environments where WeakRef may not be available.\n */\nexport type MaybeWeakRef<T extends object> = WeakRefLike<T> | T;\n\n/**\n * Creates a weak reference to an object if WeakRef is available,\n * otherwise returns the object directly.\n *\n * This is useful for breaking circular references while maintaining\n * compatibility with environments that don't support WeakRef (e.g., older browsers).\n *\n * @param value - The object to create a weak reference to\n * @returns A WeakRef wrapper if available, or the original object as fallback\n */\nexport function makeWeakRef<T extends object>(value: T): MaybeWeakRef<T> {\n  try {\n    // @ts-expect-error - WeakRef may not be in the type definitions for older TS targets\n    const WeakRefImpl = GLOBAL_OBJ.WeakRef;\n    if (typeof WeakRefImpl === 'function') {\n      return new WeakRefImpl(value);\n    }\n  } catch {\n    // WeakRef not available or construction failed\n  }\n  return value;\n}\n\n/**\n * Resolves a potentially weak reference, returning the underlying object\n * or undefined if the reference has been garbage collected.\n *\n * @param ref - A MaybeWeakRef or undefined\n * @returns The referenced object, or undefined if GC'd or ref was undefined\n */\nexport function derefWeakRef<T extends object>(ref: MaybeWeakRef<T> | undefined): T | undefined {\n  if (!ref) {\n    return undefined;\n  }\n\n  // Check if this is a WeakRef (has deref method)\n  if (typeof ref === 'object' && 'deref' in ref && typeof ref.deref === 'function') {\n    try {\n      return ref.deref();\n    } catch {\n      // deref() failed - treat as GC'd\n      return undefined;\n    }\n  }\n\n  // Direct reference fallback\n  return ref as T;\n}\n", "import type { Scope } from '../scope';\nimport type { Span } from '../types/span';\nimport { addNonEnumerableProperty } from '../utils/object';\nimport { derefWeakRef, makeWeakRef, type MaybeWeakRef } from './weakRef';\n\nconst SCOPE_SPAN_FIELD = '_sentrySpan';\n\ntype ScopeWithMaybeSpan = Scope & {\n  [SCOPE_SPAN_FIELD]?: MaybeWeakRef<Span>;\n};\n\n/**\n * Set the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nexport function _setSpanForScope(scope: Scope, span: Span | undefined): void {\n  if (span) {\n    // Use WeakRef to avoid circular reference with span holding scope\n    addNonEnumerableProperty(scope as ScopeWithMaybeSpan, SCOPE_SPAN_FIELD, makeWeakRef(span));\n  } else {\n    // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n    delete (scope as ScopeWithMaybeSpan)[SCOPE_SPAN_FIELD];\n  }\n}\n\n/**\n * Get the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nexport function _getSpanForScope(scope: ScopeWithMaybeSpan): Span | undefined {\n  return derefWeakRef(scope[SCOPE_SPAN_FIELD]);\n}\n", "/* eslint-disable max-lines */\nimport type { AttributeObject, RawAttribute, RawAttributes } from './attributes';\nimport type { Client } from './client';\nimport { DEBUG_BUILD } from './debug-build';\nimport { updateSession } from './session';\nimport type { Attachment } from './types/attachment';\nimport type { Breadcrumb } from './types/breadcrumb';\nimport type { Context, Contexts } from './types/context';\nimport type { DynamicSamplingContext } from './types/envelope';\nimport type { Event, EventHint } from './types/event';\nimport type { EventProcessor } from './types/eventprocessor';\nimport type { Extra, Extras } from './types/extra';\nimport type { Primitive } from './types/misc';\nimport type { RequestEventData } from './types/request';\nimport type { Session } from './types/session';\nimport type { SeverityLevel } from './types/severity';\nimport type { Span } from './types/span';\nimport type { PropagationContext } from './types/tracing';\nimport type { User } from './types/user';\nimport { debug } from './utils/debug-logger';\nimport { isPlainObject } from './utils/is';\nimport { merge } from './utils/merge';\nimport { uuid4 } from './utils/misc';\nimport { generateTraceId } from './utils/propagationContext';\nimport { safeMathRandom } from './utils/randomSafeContext';\nimport { _getSpanForScope, _setSpanForScope } from './utils/spanOnScope';\nimport { truncate } from './utils/string';\nimport { dateTimestampInSeconds } from './utils/time';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * A context to be used for capturing an event.\n * This can either be a Scope, or a partial ScopeContext,\n * or a callback that receives the current scope and returns a new scope to use.\n */\nexport type CaptureContext = Scope | Partial<ScopeContext> | ((scope: Scope) => Scope);\n\n/**\n * Data that can be converted to a Scope.\n */\nexport interface ScopeContext {\n  user: User;\n  level: SeverityLevel;\n  extra: Extras;\n  contexts: Contexts;\n  tags: { [key: string]: Primitive };\n  attributes?: RawAttributes<Record<string, unknown>>;\n  fingerprint: string[];\n  propagationContext: PropagationContext;\n  conversationId?: string;\n}\n\nexport interface SdkProcessingMetadata {\n  [key: string]: unknown;\n  requestSession?: {\n    status: 'ok' | 'errored' | 'crashed';\n  };\n  normalizedRequest?: RequestEventData;\n  dynamicSamplingContext?: Partial<DynamicSamplingContext>;\n  capturedSpanScope?: Scope;\n  capturedSpanIsolationScope?: Scope;\n  spanCountBeforeProcessing?: number;\n  ipAddress?: string;\n}\n\n/**\n * Normalized data of the Scope, ready to be used.\n */\nexport interface ScopeData {\n  eventProcessors: EventProcessor[];\n  breadcrumbs: Breadcrumb[];\n  user: User;\n  tags: { [key: string]: Primitive };\n  // TODO(v11): Make this a required field (could be subtly breaking if we did it today)\n  attributes?: RawAttributes<Record<string, unknown>>;\n  extra: Extras;\n  contexts: Contexts;\n  attachments: Attachment[];\n  propagationContext: PropagationContext;\n  sdkProcessingMetadata: SdkProcessingMetadata;\n  fingerprint: string[];\n  level?: SeverityLevel;\n  transactionName?: string;\n  span?: Span;\n  conversationId?: string;\n}\n\n/**\n * Holds additional event information.\n */\nexport class Scope {\n  /** Flag if notifying is happening. */\n  protected _notifyingListeners: boolean;\n\n  /** Callback for client to receive scope changes. */\n  protected _scopeListeners: Array<(scope: Scope) => void>;\n\n  /** Callback list that will be called during event processing. */\n  protected _eventProcessors: EventProcessor[];\n\n  /** Array of breadcrumbs. */\n  protected _breadcrumbs: Breadcrumb[];\n\n  /** User */\n  protected _user: User;\n\n  /** Tags */\n  protected _tags: { [key: string]: Primitive };\n\n  /** Attributes */\n  protected _attributes: RawAttributes<Record<string, unknown>>;\n\n  /** Extra */\n  protected _extra: Extras;\n\n  /** Contexts */\n  protected _contexts: Contexts;\n\n  /** Attachments */\n  protected _attachments: Attachment[];\n\n  /** Propagation Context for distributed tracing */\n  protected _propagationContext: PropagationContext;\n\n  /**\n   * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n   * sent to Sentry\n   */\n  protected _sdkProcessingMetadata: SdkProcessingMetadata;\n\n  /** Fingerprint */\n  protected _fingerprint?: string[];\n\n  /** Severity */\n  protected _level?: SeverityLevel;\n\n  /**\n   * Transaction Name\n   *\n   * IMPORTANT: The transaction name on the scope has nothing to do with root spans/transaction objects.\n   * It's purpose is to assign a transaction to the scope that's added to non-transaction events.\n   */\n  protected _transactionName?: string;\n\n  /** Session */\n  protected _session?: Session;\n\n  /** The client on this scope */\n  protected _client?: Client;\n\n  /** Contains the last event id of a captured event.  */\n  protected _lastEventId?: string;\n\n  /** Conversation ID */\n  protected _conversationId?: string;\n\n  // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n  public 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    this._propagationContext = {\n      traceId: generateTraceId(),\n      sampleRand: safeMathRandom(),\n    };\n  }\n\n  /**\n   * Clone all data from this scope into a new scope.\n   */\n  public clone(): Scope {\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      // We need to copy the `values` array so insertions on a cloned scope\n      // won't affect the original array.\n      newScope._contexts.flags = {\n        values: [...this._contexts.flags.values],\n      };\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\n    _setSpanForScope(newScope, _getSpanForScope(this));\n\n    return newScope;\n  }\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  public setClient(client: Client | undefined): void {\n    this._client = client;\n  }\n\n  /**\n   * Set the ID of the last captured error event.\n   * This is generally only captured on the isolation scope.\n   */\n  public setLastEventId(lastEventId: string | undefined): void {\n    this._lastEventId = lastEventId;\n  }\n\n  /**\n   * Get the client assigned to this scope.\n   */\n  public getClient<C extends Client>(): C | undefined {\n    return this._client as C | undefined;\n  }\n\n  /**\n   * Get the ID of the last captured error event.\n   * This is generally only available on the isolation scope.\n   */\n  public lastEventId(): string | undefined {\n    return this._lastEventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addScopeListener(callback: (scope: Scope) => void): void {\n    this._scopeListeners.push(callback);\n  }\n\n  /**\n   * Add an event processor that will be called before an event is sent.\n   */\n  public addEventProcessor(callback: EventProcessor): this {\n    this._eventProcessors.push(callback);\n    return this;\n  }\n\n  /**\n   * Set the user for this scope.\n   * Set to `null` to unset the user.\n   */\n  public setUser(user: User | null): this {\n    // If null is passed we want to unset everything, but still define keys,\n    // so that later down in the pipeline any existing values are cleared.\n    this._user = user || {\n      email: undefined,\n      id: undefined,\n      ip_address: undefined,\n      username: undefined,\n    };\n\n    if (this._session) {\n      updateSession(this._session, { user });\n    }\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Get the user from this scope.\n   */\n  public getUser(): User | undefined {\n    return this._user;\n  }\n\n  /**\n   * Set the conversation ID for this scope.\n   * Set to `null` to unset the conversation ID.\n   */\n  public setConversationId(conversationId: string | null | undefined): this {\n    this._conversationId = conversationId || undefined;\n    this._notifyScopeListeners();\n    return this;\n  }\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  public setTags(tags: { [key: string]: Primitive }): this {\n    this._tags = {\n      ...this._tags,\n      ...tags,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Set a single tag that will be sent as tags data with the event.\n   */\n  public setTag(key: string, value: Primitive): this {\n    return this.setTags({ [key]: value });\n  }\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  public setAttributes<T extends Record<string, unknown>>(newAttributes: RawAttributes<T>): this {\n    this._attributes = {\n      ...this._attributes,\n      ...newAttributes,\n    };\n\n    this._notifyScopeListeners();\n    return this;\n  }\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  public setAttribute<T extends RawAttribute<T> extends { value: any } | { unit: any } ? AttributeObject : unknown>(\n    key: string,\n    value: RawAttribute<T>,\n  ): this {\n    return this.setAttributes({ [key]: value });\n  }\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  public removeAttribute(key: string): this {\n    if (key in this._attributes) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._attributes[key];\n      this._notifyScopeListeners();\n    }\n    return this;\n  }\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  public setExtras(extras: Extras): this {\n    this._extra = {\n      ...this._extra,\n      ...extras,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Set a single key:value extra entry that will be sent as extra data with the event.\n   */\n  public setExtra(key: string, extra: Extra): this {\n    this._extra = { ...this._extra, [key]: extra };\n    this._notifyScopeListeners();\n    return this;\n  }\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  public setFingerprint(fingerprint: string[]): this {\n    this._fingerprint = fingerprint;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets the level on the scope for future events.\n   */\n  public setLevel(level: SeverityLevel): this {\n    this._level = level;\n    this._notifyScopeListeners();\n    return this;\n  }\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  public setTransactionName(name?: string): this {\n    this._transactionName = name;\n    this._notifyScopeListeners();\n    return this;\n  }\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  public setContext(key: string, context: Context | null): this {\n    if (context === null) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._contexts[key];\n    } else {\n      this._contexts[key] = context;\n    }\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Set the session for the scope.\n   */\n  public setSession(session?: Session): this {\n    if (!session) {\n      delete this._session;\n    } else {\n      this._session = session;\n    }\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Get the session from the scope.\n   */\n  public getSession(): Session | undefined {\n    return this._session;\n  }\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  public update(captureContext?: CaptureContext): this {\n    if (!captureContext) {\n      return this;\n    }\n\n    const scopeToMerge = typeof captureContext === 'function' ? captureContext(this) : captureContext;\n\n    const scopeInstance =\n      scopeToMerge instanceof Scope\n        ? scopeToMerge.getScopeData()\n        : isPlainObject(scopeToMerge)\n          ? (captureContext as ScopeContext)\n          : undefined;\n\n    const {\n      tags,\n      attributes,\n      extra,\n      user,\n      contexts,\n      level,\n      fingerprint = [],\n      propagationContext,\n      conversationId,\n    } = scopeInstance || {};\n\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\n    if (user && Object.keys(user).length) {\n      this._user = user;\n    }\n\n    if (level) {\n      this._level = level;\n    }\n\n    if (fingerprint.length) {\n      this._fingerprint = fingerprint;\n    }\n\n    if (propagationContext) {\n      this._propagationContext = propagationContext;\n    }\n\n    if (conversationId) {\n      this._conversationId = conversationId;\n    }\n\n    return this;\n  }\n\n  /**\n   * Clears the current scope and resets its properties.\n   * Note: The client will not be cleared.\n   *\n   * @deprecated This method will be removed in v11. To reset scope state, re-initialize the SDK or run\n   * your code in a fresh scope via `withScope` instead.\n   */\n  public clear(): this {\n    // client is not cleared here on purpose!\n    this._breadcrumbs = [];\n    this._tags = {};\n    this._attributes = {};\n    this._extra = {};\n    this._user = {};\n    this._contexts = {};\n    this._level = undefined;\n    this._transactionName = undefined;\n    this._fingerprint = undefined;\n    this._session = undefined;\n    this._conversationId = undefined;\n    _setSpanForScope(this, undefined);\n    this._attachments = [];\n    this.setPropagationContext({\n      traceId: generateTraceId(),\n      sampleRand: safeMathRandom(),\n    });\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Adds a breadcrumb to the scope.\n   * By default, the last 100 breadcrumbs are kept.\n   */\n  public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): this {\n    const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n    // No data has been changed, so don't notify scope listeners\n    if (maxCrumbs <= 0) {\n      return this;\n    }\n\n    const mergedBreadcrumb: Breadcrumb = {\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\n    this._breadcrumbs.push(mergedBreadcrumb);\n    if (this._breadcrumbs.length > maxCrumbs) {\n      this._breadcrumbs = this._breadcrumbs.slice(-maxCrumbs);\n      this._client?.recordDroppedEvent('buffer_overflow', 'log_item');\n    }\n\n    this._notifyScopeListeners();\n\n    return this;\n  }\n\n  /**\n   * Get the last breadcrumb of the scope.\n   */\n  public getLastBreadcrumb(): Breadcrumb | undefined {\n    return this._breadcrumbs[this._breadcrumbs.length - 1];\n  }\n\n  /**\n   * Clear all breadcrumbs from the scope.\n   */\n  public clearBreadcrumbs(): this {\n    this._breadcrumbs = [];\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Add an attachment to the scope.\n   */\n  public addAttachment(attachment: Attachment): this {\n    this._attachments.push(attachment);\n    return this;\n  }\n\n  /**\n   * Clear all attachments from the scope.\n   */\n  public clearAttachments(): this {\n    this._attachments = [];\n    return this;\n  }\n\n  /**\n   * Get the data of this scope, which should be applied to an event during processing.\n   */\n  public getScopeData(): ScopeData {\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      span: _getSpanForScope(this),\n      conversationId: this._conversationId,\n    };\n  }\n\n  /**\n   * Add data which will be accessible during event processing but won't get sent to Sentry.\n   */\n  public setSDKProcessingMetadata(newData: SdkProcessingMetadata): this {\n    this._sdkProcessingMetadata = merge(this._sdkProcessingMetadata, newData, 2);\n    return this;\n  }\n\n  /**\n   * Add propagation context to the scope, used for distributed tracing\n   */\n  public setPropagationContext(context: PropagationContext): this {\n    this._propagationContext = context;\n    return this;\n  }\n\n  /**\n   * Get propagation context from the scope, used for distributed tracing\n   */\n  public getPropagationContext(): PropagationContext {\n    return this._propagationContext;\n  }\n\n  /**\n   * Capture an exception for this scope.\n   *\n   * @returns {string} The id of the captured Sentry event.\n   */\n  public captureException(exception: unknown, hint?: EventHint): string {\n    const eventId = hint?.event_id || uuid4();\n\n    if (!this._client) {\n      DEBUG_BUILD && debug.warn('No client configured on scope - will not capture exception!');\n      return eventId;\n    }\n\n    const syntheticException = new Error('Sentry syntheticException');\n\n    this._client.captureException(\n      exception,\n      {\n        originalException: exception,\n        syntheticException,\n        ...hint,\n        event_id: eventId,\n      },\n      this,\n    );\n\n    return eventId;\n  }\n\n  /**\n   * Capture a message for this scope.\n   *\n   * @returns {string} The id of the captured message.\n   */\n  public captureMessage(message: string, level?: SeverityLevel, hint?: EventHint): string {\n    const eventId = hint?.event_id || uuid4();\n\n    if (!this._client) {\n      DEBUG_BUILD && debug.warn('No client configured on scope - will not capture message!');\n      return eventId;\n    }\n\n    const syntheticException = hint?.syntheticException ?? new Error(message);\n\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\n    return eventId;\n  }\n\n  /**\n   * Capture a Sentry event for this scope.\n   *\n   * @returns {string} The id of the captured event.\n   */\n  public captureEvent(event: Event, hint?: EventHint): string {\n    const eventId = event.event_id || hint?.event_id || uuid4();\n\n    if (!this._client) {\n      DEBUG_BUILD && debug.warn('No client configured on scope - will not capture event!');\n      return eventId;\n    }\n\n    this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n\n    return eventId;\n  }\n\n  /**\n   * This will be called on every set call.\n   */\n  protected _notifyScopeListeners(): void {\n    // We need this check for this._notifyingListeners to be able to work on scope during updates\n    // If this check is not here we'll produce endless recursion when something is done with the scope\n    // during the callback.\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", "import { getGlobalSingleton } from './carrier';\nimport { Scope } from './scope';\n\n/** Get the default current scope. */\nexport function getDefaultCurrentScope(): Scope {\n  return getGlobalSingleton('defaultCurrentScope', () => new Scope());\n}\n\n/** Get the default isolation scope. */\nexport function getDefaultIsolationScope(): Scope {\n  return getGlobalSingleton('defaultIsolationScope', () => new Scope());\n}\n", "const isActualPromise = (p: unknown) =>\n  p instanceof Promise && !(p as unknown as ChainedPromiseLike<unknown>)[kChainedCopy];\n\ntype ChainedPromiseLike<T> = PromiseLike<T> & {\n  [kChainedCopy]: true;\n};\nconst kChainedCopy = Symbol('chained PromiseLike');\n\n/**\n * Copy the properties from a decorated promiselike object onto its chained\n * actual promise.\n */\nexport const chainAndCopyPromiseLike = <V, T extends PromiseLike<V>>(\n  original: T,\n  onSuccess: (value: V) => void,\n  onError: (e: unknown) => void,\n): T => {\n  const chained = original.then(\n    value => {\n      onSuccess(value);\n      return value;\n    },\n    err => {\n      onError(err);\n      throw err;\n    },\n  ) as T;\n\n  // if we're just dealing with \"normal\" Promise objects, return the chain\n  return isActualPromise(chained) && isActualPromise(original) ? chained : copyProps(original, chained);\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst copyProps = <T extends Record<string, any>>(original: T, chained: T): T => {\n  if (!chained) return original;\n  let mutated = false;\n  //oxlint-disable-next-line guard-for-in\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: unknown[]) => value.apply(original, args),\n        enumerable: true,\n        configurable: true,\n        writable: true,\n      });\n    } else {\n      (chained as Record<string, unknown>)[key] = value;\n    }\n  }\n\n  if (mutated) Object.assign(chained, { [kChainedCopy]: true });\n  return chained;\n};\n", "import type { Client } from '../client';\nimport { getDefaultCurrentScope, getDefaultIsolationScope } from '../defaultScopes';\nimport { Scope } from '../scope';\nimport { chainAndCopyPromiseLike } from '../utils/chain-and-copy-promiselike';\nimport { isThenable } from '../utils/is';\nimport { getMainCarrier, getSentryCarrier } from './../carrier';\nimport type { AsyncContextStrategy } from './types';\n\ninterface Layer {\n  client?: Client;\n  scope: Scope;\n}\n\n/**\n * This is an object that holds a stack of scopes.\n */\nexport class AsyncContextStack {\n  private readonly _stack: [Layer, ...Layer[]];\n  private _isolationScope: Scope;\n\n  public constructor(scope?: Scope, isolationScope?: Scope) {\n    let assignedScope;\n    if (!scope) {\n      assignedScope = new Scope();\n    } else {\n      assignedScope = scope;\n    }\n\n    let assignedIsolationScope;\n    if (!isolationScope) {\n      assignedIsolationScope = new Scope();\n    } else {\n      assignedIsolationScope = isolationScope;\n    }\n\n    // scope stack for domains or the process\n    this._stack = [{ scope: assignedScope }];\n    this._isolationScope = assignedIsolationScope;\n  }\n\n  /**\n   * Fork a scope for the stack.\n   */\n  public withScope<T>(callback: (scope: Scope) => T): T {\n    const scope = this._pushScope();\n\n    let maybePromiseResult: T;\n    try {\n      maybePromiseResult = callback(scope);\n    } catch (e) {\n      this._popScope();\n      throw e;\n    }\n\n    if (isThenable(maybePromiseResult)) {\n      return chainAndCopyPromiseLike(\n        maybePromiseResult as PromiseLike<Awaited<typeof maybePromiseResult>> & Record<string, unknown>,\n        () => this._popScope(),\n        () => this._popScope(),\n      ) as T;\n    }\n\n    this._popScope();\n    return maybePromiseResult;\n  }\n\n  /**\n   * Get the client of the stack.\n   */\n  public getClient<C extends Client>(): C | undefined {\n    return this.getStackTop().client as C;\n  }\n\n  /**\n   * Returns the scope of the top stack.\n   */\n  public getScope(): Scope {\n    return this.getStackTop().scope;\n  }\n\n  /**\n   * Get the isolation scope for the stack.\n   */\n  public getIsolationScope(): Scope {\n    return this._isolationScope;\n  }\n\n  /**\n   * Returns the topmost scope layer in the order domain > local > process.\n   */\n  public getStackTop(): Layer {\n    return this._stack[this._stack.length - 1] as Layer;\n  }\n\n  /**\n   * Push a scope to the stack.\n   */\n  private _pushScope(): Scope {\n    // We want to clone the content of prev scope\n    const scope = this.getScope().clone();\n    this._stack.push({\n      client: this.getClient(),\n      scope,\n    });\n    return scope;\n  }\n\n  /**\n   * Pop a scope from the stack.\n   */\n  private _popScope(): boolean {\n    if (this._stack.length <= 1) return false;\n    return !!this._stack.pop();\n  }\n}\n\n/**\n * Get the global async context stack.\n * This will be removed during the v8 cycle and is only here to make migration easier.\n */\nfunction getAsyncContextStack(): AsyncContextStack {\n  const registry = getMainCarrier();\n  const sentry = getSentryCarrier(registry);\n\n  return (sentry.stack = sentry.stack || new AsyncContextStack(getDefaultCurrentScope(), getDefaultIsolationScope()));\n}\n\nfunction withScope<T>(callback: (scope: Scope) => T): T {\n  return getAsyncContextStack().withScope(callback);\n}\n\nfunction withSetScope<T>(scope: Scope, callback: (scope: Scope) => T): T {\n  const stack = getAsyncContextStack();\n  return stack.withScope(() => {\n    stack.getStackTop().scope = scope;\n    return callback(scope);\n  });\n}\n\nfunction withIsolationScope<T>(callback: (isolationScope: Scope) => T): T {\n  return getAsyncContextStack().withScope(() => {\n    return callback(getAsyncContextStack().getIsolationScope());\n  });\n}\n\n/**\n * Get the stack-based async context strategy.\n */\nexport function getStackAsyncContextStrategy(): AsyncContextStrategy {\n  return {\n    withIsolationScope,\n    withScope,\n    withSetScope,\n    withSetIsolationScope: <T>(_isolationScope: Scope, callback: (isolationScope: Scope) => T) => {\n      return withIsolationScope(callback);\n    },\n    getCurrentScope: () => getAsyncContextStack().getScope(),\n    getIsolationScope: () => getAsyncContextStack().getIsolationScope(),\n  };\n}\n", "import type { Carrier } from './../carrier';\nimport { getMainCarrier, getSentryCarrier } from './../carrier';\nimport { getStackAsyncContextStrategy } from './stackStrategy';\nimport type { AsyncContextStrategy } from './types';\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nexport function setAsyncContextStrategy(strategy: AsyncContextStrategy | undefined): void {\n  // Get main carrier (global for every environment)\n  const registry = getMainCarrier();\n  const sentry = getSentryCarrier(registry);\n  sentry.acs = strategy;\n}\n\n/**\n * Get the current async context strategy.\n * If none has been setup, the default will be used.\n */\nexport function getAsyncContextStrategy(carrier: Carrier): AsyncContextStrategy {\n  const sentry = getSentryCarrier(carrier);\n\n  if (sentry.acs) {\n    return sentry.acs;\n  }\n\n  // Otherwise, use the default one (stack)\n  return getStackAsyncContextStrategy();\n}\n", "import type { DurationUnit, FractionUnit, InformationUnit } from './types/measurement';\nimport type { Primitive } from './types/misc';\nimport { isPrimitive } from './utils/is';\n\nexport type RawAttributes<T> = T & ValidatedAttributes<T>;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type RawAttribute<T> = T extends { value: any } | { unit: any } ? AttributeObject : T;\n\nexport type Attributes = Record<string, TypedAttributeValue>;\n\nexport type AttributeValueType = string | number | boolean | Array<string> | Array<number> | Array<boolean>;\n\ntype AttributeTypeMap = {\n  string: string;\n  integer: number;\n  double: number;\n  boolean: boolean;\n  array: Array<string> | Array<number> | Array<boolean>;\n};\n\n/* Generates a type from the AttributeTypeMap like:\n  | { value: string; type: 'string' }\n  | { value: number; type: 'integer' }\n  | { value: number; type: 'double' }\n */\ntype AttributeUnion = {\n  [K in keyof AttributeTypeMap]: {\n    value: AttributeTypeMap[K];\n    type: K;\n  };\n}[keyof AttributeTypeMap];\n\nexport type TypedAttributeValue = AttributeUnion & { unit?: AttributeUnit };\n\nexport type AttributeObject = {\n  value: unknown;\n  unit?: AttributeUnit;\n};\n\n// Unfortunately, we loose type safety if we did something like Exclude<MeasurementUnit, string>\n// so therefore we unionize between the three supported unit categories.\ntype AttributeUnit = DurationUnit | InformationUnit | FractionUnit;\n\n/* If an attribute has either a 'value' or 'unit' property, we use the ValidAttributeObject type. */\nexport type ValidatedAttributes<T> = {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  [K in keyof T]: T[K] extends { value: any } | { unit: any } ? AttributeObject : unknown;\n};\n\n/**\n * Type-guard: The attribute object has the shape the official attribute object (value, type, unit).\n * https://develop.sentry.dev/sdk/telemetry/scopes/#setting-attributes\n */\nexport function isAttributeObject(maybeObj: unknown): maybeObj is AttributeObject {\n  return (\n    typeof maybeObj === 'object' &&\n    maybeObj != null &&\n    !Array.isArray(maybeObj) &&\n    Object.keys(maybeObj).includes('value')\n  );\n}\n\n/**\n * Converts an attribute value to a typed attribute value.\n *\n * For now, we support primitive values and arrays, either raw or inside attribute objects.\n * If @param useFallback is true, we stringify other non-primitive values to a string attribute\n * value. Otherwise we return `undefined` for unsupported values.\n *\n * @param value - The value of the passed attribute.\n * @param useFallback - If true, unsupported values will be stringified to a string attribute value.\n *                      Defaults to false. In this case, `undefined` is returned for unsupported values.\n * @returns The typed attribute.\n */\nexport function attributeValueToTypedAttributeValue(\n  rawValue: unknown,\n  useFallback?: boolean | 'skip-undefined',\n): TypedAttributeValue | void {\n  const { value, unit } = isAttributeObject(rawValue) ? rawValue : { value: rawValue, unit: undefined };\n  const attributeValue = getTypedAttributeValue(value);\n  const checkedUnit = unit && typeof unit === 'string' ? { unit } : {};\n  if (attributeValue) {\n    return { ...attributeValue, ...checkedUnit };\n  }\n\n  if (!useFallback || (useFallback === 'skip-undefined' && value === undefined)) {\n    return;\n  }\n\n  // Fallback: stringify the value\n  // TODO(v11): be smarter here and use String constructor if stringify fails\n  // (this is a breaking change for already existing attribute values)\n  let stringValue = '';\n  try {\n    stringValue = JSON.stringify(value) ?? '';\n  } catch {\n    // Do nothing\n  }\n  return {\n    value: stringValue,\n    type: 'string',\n    ...checkedUnit,\n  };\n}\n\n/**\n * Serializes raw attributes to typed attributes as expected in our envelopes.\n *\n * @param attributes The raw attributes to serialize.\n * @param fallback   If true, unsupported values will be stringified to a string attribute value.\n *                   Defaults to false. In this case, `undefined` is returned for unsupported values.\n *\n * @returns The serialized attributes.\n */\nexport function serializeAttributes<T>(\n  attributes: RawAttributes<T> | undefined,\n  fallback: boolean | 'skip-undefined' = false,\n): Attributes {\n  const serializedAttributes: Attributes = {};\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}\n\n/**\n * Estimates the serialized byte size of {@link Attributes},\n * with a couple of heuristics for performance.\n */\nexport function estimateTypedAttributesSizeInBytes(attributes: Attributes | undefined): number {\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\n    if (Array.isArray(val)) {\n      // Assumption: Individual array items have the same type and roughly the same size\n      // probably not always true but allows us to cut down on runtime\n      weight += estimatePrimitiveSizeInBytes(val[0]) * val.length;\n    } else if (isPrimitive(val)) {\n      weight += estimatePrimitiveSizeInBytes(val);\n    } else {\n      // default fallback for anything else (objects)\n      weight += 100;\n    }\n  }\n  return weight;\n}\n\nfunction estimatePrimitiveSizeInBytes(value: Primitive): number {\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}\n\n/**\n * NOTE: We return typed attributes for primitives and arrays:\n *  - Relay currently only supports arrays consisting of primitive values. Attributes with non-conforming arrays are dropped by Relay, so runtime type validation in the SDK is unnecessary.\n *  - Objects are not supported yet and product support is still TBD.\n */\nfunction getTypedAttributeValue(value: unknown): TypedAttributeValue | void {\n  if (Array.isArray(value)) {\n    return { value, type: 'array' };\n  }\n\n  const primitiveType =\n    typeof value === 'string'\n      ? 'string'\n      : typeof value === 'boolean'\n        ? 'boolean'\n        : typeof value === 'number' && !Number.isNaN(value)\n          ? Number.isInteger(value)\n            ? 'integer'\n            : 'double'\n          : null;\n  if (primitiveType) {\n    // @ts-expect-error - TS complains because {@link TypedAttributeValue} is strictly typed to\n    // avoid setting the wrong `type` on the attribute value.\n    // In this case, getPrimitiveType already does the check but TS doesn't know that.\n    // The \"clean\" alternative is to return an object per `typeof value` case\n    // but that would require more bundle size\n    // Therefore, we ignore it.\n    return { value, type: primitiveType };\n  }\n}\n", "import { getAsyncContextStrategy } from './asyncContext';\nimport { getGlobalSingleton, getMainCarrier } from './carrier';\nimport type { Client } from './client';\nimport { Scope } from './scope';\nimport type { TraceContext } from './types/context';\nimport { generateSpanId } from './utils/propagationContext';\n\nlet _externalPropagationContextProvider: (() => { traceId: string; spanId: string } | undefined) | undefined;\n\n/**\n * Register an external propagation context provider function.\n * When registered, trace context will be read from the external source (e.g. OpenTelemetry)\n * instead of from the Sentry scope's propagation context.\n */\nexport function registerExternalPropagationContext(fn: () => { traceId: string; spanId: string } | undefined): void {\n  _externalPropagationContextProvider = fn;\n}\n\n/**\n * Get the external propagation context, if a provider has been registered.\n */\nexport function getExternalPropagationContext(): { traceId: string; spanId: string } | undefined {\n  return _externalPropagationContextProvider?.();\n}\n\n/**\n * Check if an external propagation context provider has been registered.\n */\nexport function hasExternalPropagationContext(): boolean {\n  return _externalPropagationContextProvider !== undefined;\n}\n\n/**\n * Get the currently active scope.\n */\nexport function getCurrentScope(): Scope {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  return acs.getCurrentScope();\n}\n\n/**\n * Get the currently active isolation scope.\n * The isolation scope is active for the current execution context.\n */\nexport function getIsolationScope(): Scope {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  return acs.getIsolationScope();\n}\n\n/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nexport function getGlobalScope(): Scope {\n  return getGlobalSingleton('globalScope', () => new Scope());\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n */\nexport function withScope<T>(callback: (scope: Scope) => T): T;\n/**\n * Set the given scope as the active scope in the callback.\n */\nexport function withScope<T>(scope: Scope | undefined, callback: (scope: Scope) => T): T;\n/**\n * Either creates a new active scope, or sets the given scope as active scope in the given callback.\n */\nexport function withScope<T>(\n  ...rest: [callback: (scope: Scope) => T] | [scope: Scope | undefined, callback: (scope: Scope) => T]\n): T {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n\n  // If a scope is defined, we want to make this the active scope instead of the default one\n  if (rest.length === 2) {\n    const [scope, callback] = rest;\n\n    if (!scope) {\n      return acs.withScope(callback);\n    }\n\n    return acs.withSetScope(scope, callback);\n  }\n\n  return acs.withScope(rest[0]);\n}\n\n/**\n * Attempts to fork the current isolation scope and the current scope based on the current async context strategy. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n */\nexport function withIsolationScope<T>(callback: (isolationScope: Scope) => T): T;\n/**\n * Set the provided isolation scope as active in the given callback. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n *\n * If you pass in `undefined` as a scope, it will fork a new isolation scope, the same as if no scope is passed.\n */\nexport function withIsolationScope<T>(isolationScope: Scope | undefined, callback: (isolationScope: Scope) => T): T;\n/**\n * Either creates a new active isolation scope, or sets the given isolation scope as active scope in the given callback.\n */\nexport function withIsolationScope<T>(\n  ...rest:\n    | [callback: (isolationScope: Scope) => T]\n    | [isolationScope: Scope | undefined, callback: (isolationScope: Scope) => T]\n): T {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n\n  // If a scope is defined, we want to make this the active scope instead of the default one\n  if (rest.length === 2) {\n    const [isolationScope, callback] = rest;\n\n    if (!isolationScope) {\n      return acs.withIsolationScope(callback);\n    }\n\n    return acs.withSetIsolationScope(isolationScope, callback);\n  }\n\n  return acs.withIsolationScope(rest[0]);\n}\n\n/**\n * Get the currently active client.\n */\nexport function getClient<C extends Client>(): C | undefined {\n  return getCurrentScope().getClient<C>();\n}\n\n/**\n * Get a trace context for the given scope.\n */\nexport function getTraceContextFromScope(scope: Scope): TraceContext {\n  const externalContext = getExternalPropagationContext();\n  if (externalContext) {\n    return { trace_id: externalContext.traceId, span_id: externalContext.spanId };\n  }\n\n  const propagationContext = scope.getPropagationContext();\n\n  const { traceId, parentSpanId, propagationSpanId } = propagationContext;\n\n  const traceContext: TraceContext = {\n    trace_id: traceId,\n    span_id: propagationSpanId || generateSpanId(),\n  };\n\n  if (parentSpanId) {\n    traceContext.parent_span_id = parentSpanId;\n  }\n\n  return traceContext;\n}\n", "/**\n * Use this attribute to represent the source of a span name.\n * Must be one of: custom, url, route, view, component, task\n * TODO(v11): remove this export\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = 'sentry.source';\n\n/**\n * Attributes that holds the sample rate that was locally applied to a span.\n * If this attribute is not defined, it means that the span inherited a sampling decision.\n *\n * NOTE: Is only defined on root spans.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = 'sentry.sample_rate';\n\n/**\n * Attribute holding the sample rate of the previous trace.\n * This is used to sample consistently across subsequent traces in the browser SDK.\n *\n * Note: Only defined on root spans, if opted into consistent sampling\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE = 'sentry.previous_trace_sample_rate';\n\n/**\n * Use this attribute to represent the operation of a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_OP = 'sentry.op';\n\n/**\n * Use this attribute to represent the origin of a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = 'sentry.origin';\n\n/**\n * Holds the human-readable span status message (e.g. set via\n * `span.setStatus({ code, message })`).\n *\n * Streamed (v2) span statuses are reduced to `ok`/`error`, so we preserve the\n * message as an attribute instead of dropping it. This mirrors the attribute\n * Sentry's OTLP ingestion uses for the same purpose.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_STATUS_MESSAGE = 'sentry.status.message';\n\n/** The reason why an idle span finished. */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON = 'sentry.idle_span_finish_reason';\n\n/** The unit of a measurement, which may be stored as a TimedEvent. */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT = 'sentry.measurement_unit';\n\n/** The value of a measurement, which may be stored as a TimedEvent. */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE = 'sentry.measurement_value';\n\n/** The release version of the application */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_RELEASE = 'sentry.release';\n/** The environment name (e.g., \"production\", \"staging\", \"development\") */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT = 'sentry.environment';\n/**\n * The segment name (e.g., \"GET /users\")\n * @deprecated Use `SENTRY_SEGMENT_NAME` `@sentry/conventions/attributes` instead.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_NAME = 'sentry.segment.name';\n/**\n * The id of the segment that this span belongs to.\n * @deprecated Use `SENTRY_SEGMENT_ID` `@sentry/conventions/attributes` instead.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SEGMENT_ID = 'sentry.segment.id';\n/**\n * The name of the Sentry SDK (e.g., \"sentry.php\", \"sentry.javascript\")\n * @deprecated Use `SENTRY_SDK_NAME` `@sentry/conventions/attributes` instead.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SDK_NAME = 'sentry.sdk.name';\n/**\n * The version of the Sentry SDK\n * @deprecated Use `SENTRY_SDK_VERSION` `@sentry/conventions/attributes` instead.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SDK_VERSION = 'sentry.sdk.version';\n/** The list of integrations enabled in the Sentry SDK (e.g., [\"InboundFilters\", \"BrowserTracing\"]) */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS = 'sentry.sdk.integrations';\n\n/** The user ID */\nexport const SEMANTIC_ATTRIBUTE_USER_ID = 'user.id';\n/** The user email */\nexport const SEMANTIC_ATTRIBUTE_USER_EMAIL = 'user.email';\n/** The user IP address */\nexport const SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS = 'user.ip_address';\n/** The user username */\nexport const SEMANTIC_ATTRIBUTE_USER_USERNAME = 'user.name';\n\n/**\n * A custom span name set by users guaranteed to be taken over any automatically\n * inferred name. This attribute is removed before the span is sent.\n *\n * @internal only meant for internal SDK usage\n * @hidden\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME = 'sentry.custom_span_name';\n\n/**\n * The id of the profile that this span occurred in.\n */\nexport const SEMANTIC_ATTRIBUTE_PROFILE_ID = 'sentry.profile_id';\n\nexport const SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME = 'sentry.exclusive_time';\n\nexport const SEMANTIC_ATTRIBUTE_CACHE_HIT = 'cache.hit';\n\nexport const SEMANTIC_ATTRIBUTE_CACHE_KEY = 'cache.key';\n\nexport const SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE = 'cache.item_size';\n\n/** TODO: Remove these once we update to latest semantic conventions */\nexport const SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD = 'http.request.method';\n/**\n * @deprecated Use `URL_FULL` `@sentry/conventions/attributes` instead.\n */\nexport const SEMANTIC_ATTRIBUTE_URL_FULL = 'url.full';\n\n/**\n * A span link attribute to mark the link as a special span link.\n *\n * Known values:\n * - `previous_trace`: The span links to the frontend root span of the previous trace.\n * - `next_trace`: The span links to the frontend root span of the next trace. (Not set by the SDK)\n *\n * Other values may be set as appropriate.\n * @see https://develop.sentry.dev/sdk/telemetry/traces/span-links/#link-types\n */\nexport const SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE = 'sentry.link.type';\n\n/**\n * =============================================================================\n * GEN AI ATTRIBUTES\n * Based on OpenTelemetry Semantic Conventions for Generative AI\n * @see https://opentelemetry.io/docs/specs/semconv/gen-ai/\n * =============================================================================\n */\n\n/**\n * The conversation ID for linking messages across API calls.\n * For OpenAI Assistants API: thread_id\n * For LangGraph: configurable.thread_id\n */\nexport const GEN_AI_CONVERSATION_ID_ATTRIBUTE = 'gen_ai.conversation.id';\n", "import type { Span } from '../types/span';\nimport type { SpanStatus } from '../types/spanStatus';\n\nexport const SPAN_STATUS_UNSET = 0;\nexport const SPAN_STATUS_OK = 1;\nexport const SPAN_STATUS_ERROR = 2;\n\n/**\n * Converts a HTTP status code into a sentry status with a message.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or internal_error.\n */\n// https://develop.sentry.dev/sdk/event-payloads/span/\nexport function getSpanStatusFromHttpCode(httpStatus: number): SpanStatus {\n  if (httpStatus < 400 && httpStatus >= 100) {\n    return { code: SPAN_STATUS_OK };\n  }\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\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\n  return { code: SPAN_STATUS_ERROR, message: 'internal_error' };\n}\n\n/**\n * Sets the Http status attributes on the current span based on the http code.\n * Additionally, the span's status is updated, depending on the http code.\n */\nexport function setHttpStatus(span: Span, httpStatus: number): void {\n  span.setAttribute('http.response.status_code', httpStatus);\n\n  const spanStatus = getSpanStatusFromHttpCode(httpStatus);\n  if (spanStatus.message !== 'unknown_error') {\n    span.setStatus(spanStatus);\n  }\n}\n", "import type { Scope } from '../scope';\nimport type { Span } from '../types/span';\nimport { addNonEnumerableProperty } from '../utils/object';\nimport { derefWeakRef, makeWeakRef, type MaybeWeakRef } from '../utils/weakRef';\n\nconst SCOPE_ON_START_SPAN_FIELD = '_sentryScope';\nconst ISOLATION_SCOPE_ON_START_SPAN_FIELD = '_sentryIsolationScope';\n\n// Brand marking a span whose `sentry.source` should be inferred OTel-style at span end (by\n// `applyOtelSpanData`) rather than pinned. `SentryTraceProvider` sets it on the spans it creates\n// so they behave like OTel SDK spans, which carry no Sentry source concept. We use `Symbol.for`\n// so the key is shared across duplicated copies of `@sentry/core`.\nconst OTEL_SOURCE_INFERENCE_SPAN_FIELD = Symbol.for('sentry.otelSourceInference');\n\n// Brand marking a span (otherwise subject to OTel-style source inference, see above) whose\n// `sentry.source` was explicitly set by user code after creation, so `applyOtelSpanData` stops\n// inferring and respects the chosen source and name. This is what tells a user-set `custom` source\n// apart from the default `custom` that `_startRootSpan` stamps on every root span.\nconst OTEL_SOURCE_EXPLICITLY_SET_SPAN_FIELD = Symbol.for('sentry.otelSourceExplicitlySet');\n\n// Brand marking a span created by the `SentryTracerProvider` (i.e. via the OTel tracer) rather than\n// directly through the core span API. Such a span is handed to OTel instrumentations as an OTel span,\n// so it must become immutable after `end()` like a real OTel SDK span (see `SentrySpan.end()`). Spans\n// created directly through core (e.g. the browser SDK) are not branded and stay mutable.\nconst TRACER_PROVIDER_SPAN_FIELD = Symbol.for('sentry.tracerProviderSpan');\n\ntype SpanWithScopes = Span & {\n  [SCOPE_ON_START_SPAN_FIELD]?: Scope;\n  [ISOLATION_SCOPE_ON_START_SPAN_FIELD]?: MaybeWeakRef<Scope>;\n};\n\ntype SpanWithOtelSourceInference = Span & {\n  [OTEL_SOURCE_INFERENCE_SPAN_FIELD]?: boolean;\n  [OTEL_SOURCE_EXPLICITLY_SET_SPAN_FIELD]?: boolean;\n};\n\ntype SpanWithTracerProviderBrand = Span & {\n  [TRACER_PROVIDER_SPAN_FIELD]?: boolean;\n};\n\n/** Store the scope & isolation scope for a span, which can the be used when it is finished. */\nexport function setCapturedScopesOnSpan(span: Span | undefined, scope: Scope, isolationScope: Scope): void {\n  if (span) {\n    addNonEnumerableProperty(span, ISOLATION_SCOPE_ON_START_SPAN_FIELD, makeWeakRef(isolationScope));\n    // We don't wrap the scope with a WeakRef here because webkit aggressively garbage collects\n    // and scopes are not held in memory for long periods of time.\n    addNonEnumerableProperty(span, SCOPE_ON_START_SPAN_FIELD, scope);\n  }\n}\n\n/**\n * Grabs the scope and isolation scope off a span that were active when the span was started.\n * If WeakRef was used and scopes have been garbage collected, returns undefined for those scopes.\n */\nexport function getCapturedScopesOnSpan(span: Span): { scope?: Scope; isolationScope?: Scope } {\n  const spanWithScopes = span as SpanWithScopes;\n\n  return {\n    scope: spanWithScopes[SCOPE_ON_START_SPAN_FIELD],\n    isolationScope: derefWeakRef(spanWithScopes[ISOLATION_SCOPE_ON_START_SPAN_FIELD]),\n  };\n}\n\n/**\n * Mark a span as eligible for OTel-style `sentry.source` inference at span end.\n * Set by `SentryTraceProvider` on the spans it creates; read by `SentrySpan.updateName()` and\n * `applyOtelSpanData()`.\n */\nexport function markSpanForOtelSourceInference(span: Span): void {\n  addNonEnumerableProperty(span, OTEL_SOURCE_INFERENCE_SPAN_FIELD, true);\n}\n\n/** Whether a span is marked for OTel-style `sentry.source` inference (see {@link markSpanForOtelSourceInference}). */\nexport function spanShouldInferOtelSource(span: Span): boolean {\n  return (span as SpanWithOtelSourceInference)[OTEL_SOURCE_INFERENCE_SPAN_FIELD] === true;\n}\n\n/**\n * Mark that user code explicitly set `sentry.source` on a span subject to OTel-style inference, so\n * `applyOtelSpanData` keeps that source (and name) instead of overriding it. Set by `SentrySpan`\n * when `setAttribute` writes the source on an already-branded span (the default `custom` source is\n * stamped at construction, before the brand, so it doesn't trip this).\n */\nexport function markSpanSourceAsExplicit(span: Span): void {\n  addNonEnumerableProperty(span, OTEL_SOURCE_EXPLICITLY_SET_SPAN_FIELD, true);\n}\n\n/** Whether user code explicitly set `sentry.source` on a span (see {@link markSpanSourceAsExplicit}). */\nexport function spanSourceWasExplicitlySet(span: Span): boolean {\n  return (span as SpanWithOtelSourceInference)[OTEL_SOURCE_EXPLICITLY_SET_SPAN_FIELD] === true;\n}\n\n/**\n * Mark a span as created by the `SentryTracerProvider` (via the OTel tracer). Set by `SentryTracer`\n * on every span it creates; read by `SentrySpan.end()` to seal the span against further writes once\n * it has ended, mirroring OTel SDK spans (which are immutable after `end()`).\n */\nexport function markSpanAsTracerProviderSpan(span: Span): void {\n  addNonEnumerableProperty(span, TRACER_PROVIDER_SPAN_FIELD, true);\n}\n\n/** Whether a span was created by the `SentryTracerProvider` (see {@link markSpanAsTracerProviderSpan}). */\nexport function spanIsTracerProviderSpan(span: Span): boolean {\n  return (span as SpanWithTracerProviderBrand)[TRACER_PROVIDER_SPAN_FIELD] === true;\n}\n", "import { DEBUG_BUILD } from '../debug-build';\nimport type { DynamicSamplingContext } from '../types/envelope';\nimport { debug } from './debug-logger';\nimport { isString } from './is';\n\nexport const SENTRY_BAGGAGE_KEY_PREFIX = 'sentry-';\n\nexport const SENTRY_BAGGAGE_KEY_PREFIX_REGEX = /^sentry-/;\n\n/**\n * Max length of a serialized baggage string\n *\n * https://www.w3.org/TR/baggage/#limits\n */\nexport const MAX_BAGGAGE_STRING_LENGTH = 8192;\n\n/**\n * Takes a baggage header and turns it into Dynamic Sampling Context, by extracting all the \"sentry-\" prefixed values\n * from it.\n *\n * @param baggageHeader A very bread definition of a baggage header as it might appear in various frameworks.\n * @returns The Dynamic Sampling Context that was found on `baggageHeader`, if there was any, `undefined` otherwise.\n */\nexport function baggageHeaderToDynamicSamplingContext(\n  // Very liberal definition of what any incoming header might look like\n  baggageHeader: string | string[] | number | null | undefined | boolean,\n): Partial<DynamicSamplingContext> | undefined {\n  const baggageObject = parseBaggageHeader(baggageHeader);\n\n  if (!baggageObject) {\n    return undefined;\n  }\n\n  // Read all \"sentry-\" prefixed values out of the baggage object and put it onto a dynamic sampling context object.\n  const dynamicSamplingContext = Object.entries(baggageObject).reduce<Record<string, string>>((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\n  // Only return a dynamic sampling context object if there are keys in it.\n  // A keyless object means there were no sentry values on the header, which means that there is no DSC.\n  if (Object.keys(dynamicSamplingContext).length > 0) {\n    return dynamicSamplingContext as Partial<DynamicSamplingContext>;\n  } else {\n    return undefined;\n  }\n}\n\n/**\n * Turns a Dynamic Sampling Object into a baggage header by prefixing all the keys on the object with \"sentry-\".\n *\n * @param dynamicSamplingContext The Dynamic Sampling Context to turn into a header. For convenience and compatibility\n * with the `getDynamicSamplingContext` method on the Transaction class ,this argument can also be `undefined`. If it is\n * `undefined` the function will return `undefined`.\n * @returns a baggage header, created from `dynamicSamplingContext`, or `undefined` either if `dynamicSamplingContext`\n * was `undefined`, or if `dynamicSamplingContext` didn't contain any values.\n */\nexport function dynamicSamplingContextToSentryBaggageHeader(\n  // this also takes undefined for convenience and bundle size in other places\n  dynamicSamplingContext?: Partial<DynamicSamplingContext>,\n): string | undefined {\n  if (!dynamicSamplingContext) {\n    return undefined;\n  }\n\n  // Prefix all DSC keys with \"sentry-\" and put them into a new object\n  const sentryPrefixedDSC = Object.entries(dynamicSamplingContext).reduce<Record<string, string>>(\n    (acc, [dscKey, dscValue]) => {\n      if (dscValue) {\n        acc[`${SENTRY_BAGGAGE_KEY_PREFIX}${dscKey}`] = dscValue;\n      }\n      return acc;\n    },\n    {},\n  );\n\n  return objectToBaggageHeader(sentryPrefixedDSC);\n}\n\n/**\n * Take a baggage header and parse it into an object.\n */\nexport function parseBaggageHeader(\n  baggageHeader: string | string[] | number | null | undefined | boolean,\n): Record<string, string> | undefined {\n  if (!baggageHeader || (!isString(baggageHeader) && !Array.isArray(baggageHeader))) {\n    return undefined;\n  }\n\n  if (Array.isArray(baggageHeader)) {\n    // Combine all baggage headers into one object containing the baggage values so we can later read the Sentry-DSC-values from it\n    return baggageHeader.reduce<Record<string, string>>((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\n  return baggageHeaderToObject(baggageHeader);\n}\n\n/**\n * Will parse a baggage header, which is a simple key-value map, into a flat object.\n *\n * @param baggageHeader The baggage header to parse.\n * @returns a flat object containing all the key-value pairs from `baggageHeader`.\n */\nfunction baggageHeaderToObject(baggageHeader: string): Record<string, string> {\n  return baggageHeader\n    .split(',')\n    .map(baggageEntry => {\n      const eqIdx = baggageEntry.indexOf('=');\n      if (eqIdx === -1) {\n        // Likely an invalid entry\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          // We ignore errors here, e.g. if the value cannot be URL decoded.\n          // This will then be skipped in the next step\n          return;\n        }\n      });\n    })\n    .reduce<Record<string, string>>((acc, [key, value]) => {\n      if (key && value) {\n        acc[key] = value;\n      }\n      return acc;\n    }, {});\n}\n\n/**\n * Turns a flat object (key-value pairs) into a baggage header, which is also just key-value pairs.\n *\n * @param object The object to turn into a baggage header.\n * @returns a baggage header string, or `undefined` if the object didn't have any values, since an empty baggage header\n * is not spec compliant.\n */\nexport function objectToBaggageHeader(object: Record<string, string>): string | undefined {\n  if (Object.keys(object).length === 0) {\n    // An empty baggage header is not spec compliant: We return undefined.\n    return undefined;\n  }\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 &&\n        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}\n\n/**\n * Merge two baggage headers into one.\n * - Sentry-specific entries (keys starting with \"sentry-\") from the new\n *   baggage take precedence\n * - Non-Sentry entries from existing baggage take precedence\n *\n * The order of the existing baggage will be preserved, and new entries will\n * be added to the end.\n *\n * This matches the behavior of OTEL's propagation.inject() which uses\n * `baggage.setEntry()`  to overwrite existing entries with the same key.\n */\nexport function mergeBaggageHeaders<Existing extends string | string[] | number | undefined>(\n  existing: Existing,\n  incoming: string,\n): string | undefined | Existing {\n  if (!existing) {\n    return incoming;\n  }\n\n  const existingEntries = parseBaggageHeader(existing);\n  const incomingEntries = parseBaggageHeader(incoming);\n\n  if (!incomingEntries) {\n    return existing;\n  }\n\n  // 1. All non-sentry entries from existing are kept\n  // 2. All sentry- entries from the new baggage are retained\n  // 3. If sentry- entries present in new, ignore from old, else keep from old.\n  // 4. Non-sentry entries from new are only kept if not in existing.\n\n  const merged: Record<string, string> = {};\n\n  // partition incoming entries into sentry and non-sentry prefixed\n  let hasNewSentryEntries = false;\n  const newSentryEntries: Record<string, string> = {};\n  const newNonSentryEntries: Record<string, string> = {};\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\n  // If new baggage contains at least one sentry- value, we remove all old\n  // sentry- values otherwise, we keep old sentry- values. If we don't remove\n  // old sentry- values, we end up with an inconsistent dynamic sampling\n  // context propagation.\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\n  // Assign new sentry fields.\n  if (hasNewSentryEntries) {\n    Object.assign(merged, newSentryEntries);\n  }\n\n  // assign new non-sentry fields not found on existing object.\n  for (const [key, value] of Object.entries(newNonSentryEntries)) {\n    merged[key] ??= value;\n  }\n\n  return objectToBaggageHeader(merged);\n}\n", "import type { Client } from '../client';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { DsnComponents, DsnLike, DsnProtocol } from '../types/dsn';\nimport { consoleSandbox, debug } from './debug-logger';\n\n/** Regular expression used to extract org ID from a DSN host. */\nconst ORG_ID_REGEX = /^o(\\d+)\\./;\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)((?:\\[[:.%\\w]+\\]|[\\w.-]+))(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol?: string): protocol is DsnProtocol {\n  return protocol === 'http' || protocol === 'https';\n}\n\n/**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\nexport function dsnToString(dsn: DsnComponents, withPassword: boolean = false): string {\n  const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n  return (\n    `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +\n    `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n  );\n}\n\n/**\n * Parses a Dsn from a given string.\n *\n * @param str A Dsn as string\n * @returns Dsn as DsnComponents or undefined if @param str is not a valid DSN string\n */\nexport function dsnFromString(str: string): DsnComponents | undefined {\n  const match = DSN_REGEX.exec(str);\n\n  if (!match) {\n    // This should be logged to the console\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.error(`Invalid Sentry Dsn: ${str}`);\n    });\n    return undefined;\n  }\n\n  const [protocol, publicKey, pass = '', host = '', port = '', lastPath = ''] = match.slice(1);\n  let path = '';\n  let projectId = lastPath;\n\n  const split = projectId.split('/');\n  if (split.length > 1) {\n    path = split.slice(0, -1).join('/');\n    projectId = split.pop() as string;\n  }\n\n  if (projectId) {\n    const projectMatch = projectId.match(/^\\d+/);\n    if (projectMatch) {\n      projectId = projectMatch[0];\n    }\n  }\n\n  return dsnFromComponents({ host, pass, path, projectId, port, protocol: protocol as DsnProtocol, publicKey });\n}\n\nfunction dsnFromComponents(components: DsnComponents): DsnComponents {\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}\n\nfunction validateDsn(dsn: DsnComponents): boolean {\n  if (!DEBUG_BUILD) {\n    return true;\n  }\n\n  const { port, projectId, protocol } = dsn;\n\n  const requiredComponents: ReadonlyArray<keyof DsnComponents> = ['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\n  if (hasMissingRequiredComponent) {\n    return false;\n  }\n\n  if (!projectId.match(/^\\d+$/)) {\n    debug.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n    return false;\n  }\n\n  if (!isValidProtocol(protocol)) {\n    debug.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n    return false;\n  }\n\n  if (port && isNaN(parseInt(port, 10))) {\n    debug.error(`Invalid Sentry Dsn: Invalid port ${port}`);\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Extract the org ID from a DSN host.\n *\n * @param host The host from a DSN\n * @returns The org ID if found, undefined otherwise\n */\nexport function extractOrgIdFromDsnHost(host: string): string | undefined {\n  const match = host.match(ORG_ID_REGEX);\n\n  return match?.[1];\n}\n\n/**\n *  Returns the organization ID of the client.\n *\n *  The organization ID is extracted from the DSN. If the client options include a `orgId`, this will always take precedence.\n */\nexport function extractOrgIdFromClient(client: Client): string | undefined {\n  const options = client.getOptions();\n\n  const { host } = client.getDsn() || {};\n\n  let org_id: string | undefined;\n\n  if (options.orgId) {\n    org_id = String(options.orgId);\n  } else if (host) {\n    org_id = extractOrgIdFromDsnHost(host);\n  }\n\n  return org_id;\n}\n\n/**\n * Creates a valid Sentry Dsn object, identifying a Sentry instance and project.\n * @returns a valid DsnComponents object or `undefined` if @param from is an invalid DSN source\n */\nexport function makeDsn(from: DsnLike): DsnComponents | undefined {\n  const components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n  if (!components || !validateDsn(components)) {\n    return undefined;\n  }\n  return components;\n}\n", "/**\n * Parse a sample rate from a given value.\n * This will either return a boolean or number sample rate, if the sample rate is valid (between 0 and 1).\n * If a string is passed, we try to convert it to a number.\n *\n * Any invalid sample rate will return `undefined`.\n */\nexport function parseSampleRate(sampleRate: unknown): number | undefined {\n  if (typeof sampleRate === 'boolean') {\n    return Number(sampleRate);\n  }\n\n  const rate = typeof sampleRate === 'string' ? parseFloat(sampleRate) : sampleRate;\n  if (typeof rate !== 'number' || isNaN(rate) || rate < 0 || rate > 1) {\n    return undefined;\n  }\n\n  return rate;\n}\n", "import type { Client } from '../client';\nimport type { DynamicSamplingContext } from '../types/envelope';\nimport type { PropagationContext } from '../types/tracing';\nimport type { TraceparentData } from '../types/transaction';\nimport { debug } from '../utils/debug-logger';\nimport { baggageHeaderToDynamicSamplingContext } from './baggage';\nimport { extractOrgIdFromClient } from './dsn';\nimport { parseSampleRate } from './parseSampleRate';\nimport { generateSpanId, generateTraceId } from './propagationContext';\nimport { safeMathRandom } from './randomSafeContext';\n\n// oxlint-disable-next-line sdk/no-regexp-constructor -- RegExp is used for readability here\nexport const TRACEPARENT_REGEXP = new RegExp(\n  '^[ \\\\t]*' + // whitespace\n    '([0-9a-f]{32})?' + // trace_id\n    '-?([0-9a-f]{16})?' + // span_id\n    '-?([01])?' + // sampled\n    '[ \\\\t]*$', // whitespace\n);\n\n/**\n * Extract transaction context data from a `sentry-trace` header.\n *\n * This is terrible naming but the function has nothing to do with the W3C traceparent header.\n * It can only parse the `sentry-trace` header and extract the \"trace parent\" data.\n *\n * @param traceparent Traceparent string\n *\n * @returns Object containing data from the header, or undefined if traceparent string is malformed\n */\nexport function extractTraceparentData(traceparent?: string): TraceparentData | undefined {\n  if (!traceparent) {\n    return undefined;\n  }\n\n  const matches = traceparent.match(TRACEPARENT_REGEXP);\n  if (!matches) {\n    return undefined;\n  }\n\n  let parentSampled: boolean | undefined;\n  if (matches[3] === '1') {\n    parentSampled = true;\n  } else if (matches[3] === '0') {\n    parentSampled = false;\n  }\n\n  return {\n    traceId: matches[1],\n    parentSampled,\n    parentSpanId: matches[2],\n  };\n}\n\n/**\n * Whether a propagation context continues an incoming trace, rather than being the head of a new one.\n *\n * Both fields have to be checked. `parentSpanId` is unset when the incoming `sentry-trace` header\n * carried no span id, which the header format allows. `dsc` is unset when a remote parent arrived\n * without any incoming baggage. Either one on its own therefore misses a continued trace.\n */\nexport function isContinuingTrace(propagationContext: PropagationContext): boolean {\n  return !!propagationContext.parentSpanId || !!propagationContext.dsc;\n}\n\n/**\n * Create a propagation context from incoming headers or\n * creates a minimal new one if the headers are undefined.\n */\nexport function propagationContextFromHeaders(\n  sentryTrace: string | undefined,\n  baggage: string | number | boolean | string[] | null | undefined,\n): PropagationContext {\n  const traceparentData = extractTraceparentData(sentryTrace);\n  const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggage);\n\n  if (!traceparentData?.traceId) {\n    return {\n      traceId: generateTraceId(),\n      sampleRand: safeMathRandom(),\n    };\n  }\n\n  const sampleRand = getSampleRandFromTraceparentAndDsc(traceparentData, dynamicSamplingContext);\n\n  // The sample_rand on the DSC needs to be generated based on traceparent + baggage.\n  if (dynamicSamplingContext) {\n    dynamicSamplingContext.sample_rand = sampleRand.toString();\n  }\n\n  const { traceId, parentSpanId, parentSampled } = traceparentData;\n\n  return {\n    traceId,\n    parentSpanId,\n    sampled: parentSampled,\n    dsc: dynamicSamplingContext || {}, // If we have traceparent data but no DSC it means we are not head of trace and we must freeze it\n    sampleRand,\n  };\n}\n\n/**\n * Create sentry-trace header from span context values.\n */\nexport function generateSentryTraceHeader(\n  traceId: string | undefined = generateTraceId(),\n  spanId: string | undefined = generateSpanId(),\n  sampled?: boolean,\n): string {\n  let sampledString = '';\n  if (sampled !== undefined) {\n    sampledString = sampled ? '-1' : '-0';\n  }\n  return `${traceId}-${spanId}${sampledString}`;\n}\n\n/**\n * Creates a W3C traceparent header from the given trace and span ids.\n */\nexport function generateTraceparentHeader(\n  traceId: string | undefined = generateTraceId(),\n  spanId: string | undefined = generateSpanId(),\n  sampled?: boolean,\n): string {\n  return `00-${traceId}-${spanId}-${sampled ? '01' : '00'}`;\n}\n\n/**\n * Given any combination of an incoming trace, generate a sample rand based on its defined semantics.\n *\n * Read more: https://develop.sentry.dev/sdk/telemetry/traces/#propagated-random-value\n */\nfunction getSampleRandFromTraceparentAndDsc(\n  traceparentData: TraceparentData | undefined,\n  dsc: Partial<DynamicSamplingContext> | undefined,\n): number {\n  // When there is an incoming sample rand use it.\n  const parsedSampleRand = parseSampleRate(dsc?.sample_rand);\n  if (parsedSampleRand !== undefined) {\n    return parsedSampleRand;\n  }\n\n  // Otherwise, if there is an incoming sampling decision + sample rate, generate a sample rand that would lead to the same sampling decision.\n  const parsedSampleRate = parseSampleRate(dsc?.sample_rate);\n  if (parsedSampleRate && traceparentData?.parentSampled !== undefined) {\n    return traceparentData.parentSampled\n      ? // Returns a sample rand with positive sampling decision [0, sampleRate)\n        safeMathRandom() * parsedSampleRate\n      : // Returns a sample rand with negative sampling decision [sampleRate, 1)\n        parsedSampleRate + safeMathRandom() * (1 - parsedSampleRate);\n  } else {\n    // If nothing applies, return a random sample rand.\n    return safeMathRandom();\n  }\n}\n\n/**\n * Determines whether a new trace should be continued based on the provided baggage org ID and the client's `strictTraceContinuation` option.\n * If the trace should not be continued, a new trace will be started.\n *\n * The result is dependent on the `strictTraceContinuation` option in the client.\n * See https://develop.sentry.dev/sdk/telemetry/traces/#stricttracecontinuation\n */\nexport function shouldContinueTrace(client: Client, baggageOrgId?: string): boolean {\n  const clientOrgId = extractOrgIdFromClient(client);\n\n  // Case: baggage orgID and Client orgID don't match - always start new trace\n  if (baggageOrgId && clientOrgId && baggageOrgId !== clientOrgId) {\n    debug.log(\n      `Won't continue trace because org IDs don't match (incoming baggage: ${baggageOrgId}, SDK options: ${clientOrgId})`,\n    );\n    return false;\n  }\n\n  const strictTraceContinuation = client.getOptions().strictTraceContinuation || false; // default for `strictTraceContinuation` is `false`\n\n  if (strictTraceContinuation) {\n    // With strict continuation enabled, don't continue trace if:\n    // - Baggage has orgID, but Client doesn't have one\n    // - Client has orgID, but baggage doesn't have one\n    if ((baggageOrgId && !clientOrgId) || (!baggageOrgId && clientOrgId)) {\n      debug.log(\n        `Starting a new trace because strict trace continuation is enabled but one org ID is missing (incoming baggage: ${baggageOrgId}, Sentry client: ${clientOrgId})`,\n      );\n      return false;\n    }\n  }\n\n  return true;\n}\n", "// oxlint-disable max-lines\nimport { getAsyncContextStrategy } from '../asyncContext';\nimport type { RawAttributes } from '../attributes';\nimport { serializeAttributes } from '../attributes';\nimport { getMainCarrier } from '../carrier';\nimport { getCurrentScope } from '../currentScopes';\nimport {\n  SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n  SEMANTIC_ATTRIBUTE_SENTRY_STATUS_MESSAGE,\n} from '../semanticAttributes';\nimport type { SentrySpan } from '../tracing/sentrySpan';\nimport { SPAN_STATUS_OK, SPAN_STATUS_UNSET } from '../tracing/spanstatus';\nimport { getCapturedScopesOnSpan } from '../tracing/utils';\nimport type { TraceContext } from '../types/context';\nimport type { SpanLink, SpanLinkJSON } from '../types/link';\nimport type {\n  SerializedStreamedSpan,\n  Span,\n  SpanAttributes,\n  SpanJSON,\n  SpanOrigin,\n  SpanTimeInput,\n  StreamedSpanJSON,\n} from '../types/span';\nimport type { SpanStatus } from '../types/spanStatus';\nimport { addNonEnumerableProperty } from '../utils/object';\nimport { generateSpanId } from '../utils/propagationContext';\nimport { timestampInSeconds } from '../utils/time';\nimport { generateSentryTraceHeader, generateTraceparentHeader } from '../utils/tracing';\nimport { consoleSandbox } from './debug-logger';\nimport { _getSpanForScope } from './spanOnScope';\n\n// These are aligned with OpenTelemetry trace flags\nexport const TRACE_FLAG_NONE = 0x0;\nexport const TRACE_FLAG_SAMPLED = 0x1;\n\nlet hasShownSpanDropWarning = false;\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in an event.\n * By default, this will only include trace_id, span_id & parent_span_id.\n * If `includeAllData` is true, it will also include data, op, status & origin.\n */\nexport function spanToTransactionTraceContext(span: Span): TraceContext {\n  const { spanId: span_id, traceId: trace_id } = span.spanContext();\n  const { data, op, parent_span_id, status, origin, links } = spanToJSON(span);\n\n  return {\n    parent_span_id,\n    span_id,\n    trace_id,\n    data,\n    op,\n    status,\n    origin,\n    links,\n  };\n}\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in a non-transaction event.\n */\nexport function spanToTraceContext(span: Span): TraceContext {\n  const { spanId, traceId: trace_id, isRemote } = span.spanContext();\n\n  // If the span is remote, we use a random/virtual span as span_id to the trace context,\n  // and the remote span as parent_span_id\n  const parent_span_id = isRemote ? spanId : spanToJSON(span).parent_span_id;\n  const scope = getCapturedScopesOnSpan(span).scope;\n\n  const span_id = isRemote ? scope?.getPropagationContext().propagationSpanId || generateSpanId() : spanId;\n\n  return {\n    parent_span_id,\n    span_id,\n    trace_id,\n  };\n}\n\n/**\n * Convert a Span to a Sentry trace header.\n */\nexport function spanToTraceHeader(span: Span): string {\n  const { traceId, spanId } = span.spanContext();\n  const sampled = spanIsSampled(span);\n  return generateSentryTraceHeader(traceId, spanId, sampled);\n}\n\n/**\n * Convert a Span to a W3C traceparent header.\n */\nexport function spanToTraceparentHeader(span: Span): string {\n  const { traceId, spanId } = span.spanContext();\n  const sampled = spanIsSampled(span);\n  return generateTraceparentHeader(traceId, spanId, sampled);\n}\n\n/**\n *  Converts the span links array to a flattened version to be sent within an envelope.\n *\n *  If the links array is empty, it returns `undefined` so the empty value can be dropped before it's sent.\n */\nexport function convertSpanLinksForEnvelope(links?: SpanLink[]): SpanLinkJSON[] | undefined {\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 undefined;\n  }\n}\n\n/**\n * Converts the span links array to a flattened version with serialized attributes for V2 spans.\n *\n * If the links array is empty, it returns `undefined` so the empty value can be dropped before it's sent.\n */\nexport function getStreamedSpanLinks(\n  links?: SpanLink[],\n): SpanLinkJSON<RawAttributes<Record<string, unknown>>>[] | undefined {\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 undefined;\n  }\n}\n\n/**\n * Convert a span time input into a timestamp in seconds.\n */\nexport function spanTimeInputToSeconds(input: SpanTimeInput | undefined): number {\n  if (typeof input === 'number') {\n    return ensureTimestampInSeconds(input);\n  }\n\n  if (Array.isArray(input)) {\n    // See {@link HrTime} for the array-based time format\n    return input[0] + input[1] / 1e9;\n  }\n\n  if (input instanceof Date) {\n    return ensureTimestampInSeconds(input.getTime());\n  }\n\n  return timestampInSeconds();\n}\n\n/**\n * Converts a timestamp to second, if it was in milliseconds, or keeps it as second.\n */\nfunction ensureTimestampInSeconds(timestamp: number): number {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Convert a span to a JSON representation.\n */\n// Note: Because of this, we currently have a circular type dependency (which we opted out of in package.json).\n// This is not avoidable as we need `spanToJSON` in `spanUtils.ts`, which in turn is needed by `span.ts` for backwards compatibility.\n// And `spanToJSON` needs the Span class from `span.ts` to check here.\nexport function spanToJSON(span: Span): SpanJSON {\n  if (spanIsSentrySpan(span)) {\n    return span.getSpanJSON();\n  }\n\n  const { spanId: span_id, traceId: trace_id } = span.spanContext();\n\n  // Handle a span from @opentelemetry/sdk-base-trace's `Span` class\n  if (spanIsOpenTelemetrySdkTraceBaseSpan(span)) {\n    const { attributes, startTime, name, endTime, status, links } = span;\n\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) || undefined,\n      status: getStatusMessage(status),\n      op: attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n      origin: attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined,\n      links: convertSpanLinksForEnvelope(links),\n    };\n  }\n\n  // Finally, at least we have `spanContext()`....\n  // This should not actually happen in reality, but we need to handle it for type safety.\n  return {\n    span_id,\n    trace_id,\n    start_timestamp: 0,\n    data: {},\n  };\n}\n\n/**\n * Convert a span to the intermediate {@link StreamedSpanJSON} representation.\n */\nexport function spanToStreamedSpanJSON(span: Span): StreamedSpanJSON {\n  if (spanIsSentrySpan(span)) {\n    return span.getStreamedSpanJSON();\n  }\n\n  const { spanId: span_id, traceId: trace_id } = span.spanContext();\n\n  // Handle a span from @opentelemetry/sdk-base-trace's `Span` class\n  if (spanIsOpenTelemetrySdkTraceBaseSpan(span)) {\n    const { attributes, startTime, name, endTime, status, links } = span;\n\n    return {\n      name,\n      span_id,\n      trace_id,\n      parent_span_id: getOtelParentSpanId(span),\n      start_timestamp: spanTimeInputToSeconds(startTime),\n      end_timestamp: spanTimeInputToSeconds(endTime),\n      is_segment: span === INTERNAL_getSegmentSpan(span),\n      status: getSimpleStatus(status),\n      attributes: addStatusMessageAttribute(attributes, status),\n      links: getStreamedSpanLinks(links),\n    };\n  }\n\n  // Finally, as a fallback, at least we have `spanContext()`....\n  // This should not actually happen in reality, but we need to handle it for type safety.\n  return {\n    span_id,\n    trace_id,\n    start_timestamp: 0,\n    name: '',\n    end_timestamp: 0,\n    status: 'ok',\n    is_segment: span === INTERNAL_getSegmentSpan(span),\n  };\n}\n\n/**\n * In preparation for the next major of OpenTelemetry, we want to support\n * looking up the parent span id according to the new API\n * In OTel v1, the parent span id is accessed as `parentSpanId`\n * In OTel v2, the parent span id is accessed as `spanId` on the `parentSpanContext`\n */\nfunction getOtelParentSpanId(span: OpenTelemetrySdkTraceBaseSpan): string | undefined {\n  return 'parentSpanId' in span\n    ? span.parentSpanId\n    : 'parentSpanContext' in span\n      ? (span.parentSpanContext as { spanId?: string } | undefined)?.spanId\n      : undefined;\n}\n\n/**\n * Converts a {@link StreamedSpanJSON} to a {@link SerializedSpan}.\n * This is the final serialized span format that is sent to Sentry.\n * The returned serilaized spans must not be consumed by users or SDK integrations.\n */\nexport function streamedSpanJsonToSerializedSpan(spanJson: StreamedSpanJSON): SerializedStreamedSpan {\n  return {\n    ...spanJson,\n    attributes: serializeAttributes(spanJson.attributes),\n    links: spanJson.links?.map(link => ({\n      ...link,\n      attributes: serializeAttributes(link.attributes),\n    })),\n  };\n}\n\nfunction spanIsOpenTelemetrySdkTraceBaseSpan(span: Span): span is OpenTelemetrySdkTraceBaseSpan {\n  const castSpan = span as Partial<OpenTelemetrySdkTraceBaseSpan>;\n  return !!castSpan.attributes && !!castSpan.startTime && !!castSpan.name && !!castSpan.endTime && !!castSpan.status;\n}\n\n/** Exported only for tests. */\nexport interface OpenTelemetrySdkTraceBaseSpan extends Span {\n  attributes: SpanAttributes;\n  startTime: SpanTimeInput;\n  name: string;\n  status: SpanStatus;\n  endTime: SpanTimeInput;\n  parentSpanId?: string;\n  links?: SpanLink[];\n}\n\n/**\n * Sadly, due to circular dependency checks we cannot actually import the Span class here and check for instanceof.\n * :( So instead we approximate this by checking if it has the `getSpanJSON` method.\n */\nexport function spanIsSentrySpan(span: Span): span is SentrySpan {\n  return typeof (span as SentrySpan).getSpanJSON === 'function';\n}\n\n/**\n * Returns true if a span is sampled.\n * In most cases, you should just use `span.isRecording()` instead.\n * However, this has a slightly different semantic, as it also returns false if the span is finished.\n * So in the case where this distinction is important, use this method.\n */\nexport function spanIsSampled(span: Span): boolean {\n  // We align our trace flags with the ones OpenTelemetry use\n  // So we also check for sampled the same way they do.\n  const { traceFlags } = span.spanContext();\n  return traceFlags === TRACE_FLAG_SAMPLED;\n}\n\n/** Get the status message to use for a JSON representation of a span. */\nexport function getStatusMessage(status: SpanStatus | undefined): string | undefined {\n  if (!status || status.code === SPAN_STATUS_UNSET) {\n    return undefined;\n  }\n\n  if (status.code === SPAN_STATUS_OK) {\n    return 'ok';\n  }\n\n  return status.message || 'internal_error';\n}\n\n/**\n * Convert the various statuses to the simple ones expected by Sentry for streamed spans ('ok' is default).\n */\nexport function getSimpleStatus(status: SpanStatus | undefined): 'ok' | 'error' {\n  return !status ||\n    status.code === SPAN_STATUS_OK ||\n    status.code === SPAN_STATUS_UNSET ||\n    status.message === 'cancelled'\n    ? 'ok'\n    : 'error';\n}\n\n/**\n * Returns the span's attributes with the SEMANTIC_ATTRIBUTE_SENTRY_STATUS_MESSAGE attribute added\n * if the span has an error status message worth preserving.\n *\n * An explicitly set attribute is never overwritten.\n */\nexport function addStatusMessageAttribute(\n  attributes: SpanAttributes,\n  status: SpanStatus | undefined,\n): RawAttributes<Record<string, unknown>> {\n  const statusMessage = getSimpleStatus(status) === 'error' ? status?.message : undefined;\n  return {\n    ...(statusMessage && { [SEMANTIC_ATTRIBUTE_SENTRY_STATUS_MESSAGE]: statusMessage }),\n    ...attributes,\n  };\n}\n\nconst CHILD_SPANS_FIELD = '_sentryChildSpans';\nconst ROOT_SPAN_FIELD = '_sentryRootSpan';\n\ntype SpanWithPotentialChildren = Span & {\n  [CHILD_SPANS_FIELD]?: Set<Span>;\n  [ROOT_SPAN_FIELD]?: Span;\n};\n\n/**\n * Adds an opaque child span reference to a span.\n */\nexport function addChildSpanToSpan(span: SpanWithPotentialChildren, childSpan: Span): void {\n  // We store the root span reference on the child span\n  // We need this for `getRootSpan()` to work\n  const rootSpan = span[ROOT_SPAN_FIELD] || span;\n  addNonEnumerableProperty(childSpan as SpanWithPotentialChildren, ROOT_SPAN_FIELD, rootSpan);\n\n  // `_sentryChildSpans` exists only so `getSpanDescendants()` can walk the tree when the segment span\n  // is sent, and that walk stops at an unsampled span without ever visiting its children. So a child\n  // tracked here would be held for the parent's lifetime and never read.\n  if (!spanIsSampled(span)) {\n    return;\n  }\n\n  // Once the segment span stopped recording, the tree has been read for the last time, and a child\n  // starting now belongs to whatever segment comes next: it is re-emitted on its own instead. Tracking\n  // it here would pin it for as long as the parent lives, which for a span left active in an async\n  // context (e.g. a framework boot span captured by a queue consumer) is the rest of the process. Only\n  // a parent that is itself still recording keeps tracking, so a late child that outlives its segment\n  // still collects the subtree it is re-emitted with.\n  if (!span.isRecording() && !rootSpan.isRecording()) {\n    return;\n  }\n\n  // We store a list of child spans on the parent span\n  // We need this for `getSpanDescendants()` to work\n  if (span[CHILD_SPANS_FIELD]) {\n    span[CHILD_SPANS_FIELD].add(childSpan);\n  } else {\n    addNonEnumerableProperty(span, CHILD_SPANS_FIELD, new Set([childSpan]));\n  }\n}\n\n/** This is only used internally by Idle Spans. */\nexport function removeChildSpanFromSpan(span: SpanWithPotentialChildren, childSpan: Span): void {\n  if (span[CHILD_SPANS_FIELD]) {\n    span[CHILD_SPANS_FIELD].delete(childSpan);\n  }\n}\n\n/**\n * Returns an array of the given span and all of its descendants.\n */\nexport function getSpanDescendants(span: SpanWithPotentialChildren): Span[] {\n  const resultSet = new Set<Span>();\n\n  function addSpanChildren(span: SpanWithPotentialChildren): void {\n    // This exit condition is required to not infinitely loop in case of a circular dependency.\n    if (resultSet.has(span)) {\n      return;\n      // We want to ignore unsampled spans (e.g. non recording spans)\n    } else if (spanIsSampled(span)) {\n      resultSet.add(span);\n      const childSpans = span[CHILD_SPANS_FIELD] ? Array.from(span[CHILD_SPANS_FIELD]) : [];\n      for (const childSpan of childSpans) {\n        addSpanChildren(childSpan);\n      }\n    }\n  }\n\n  addSpanChildren(span);\n\n  return Array.from(resultSet);\n}\n\n/**\n * Returns the root span of a given span.\n */\nexport const getRootSpan = INTERNAL_getSegmentSpan;\n\n/**\n * Returns the segment span of a given span.\n */\nexport function INTERNAL_getSegmentSpan(span: SpanWithPotentialChildren): Span {\n  return span[ROOT_SPAN_FIELD] || span;\n}\n\n/**\n * Returns the currently active span.\n */\nexport function getActiveSpan(): Span | undefined {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  if (acs.getActiveSpan) {\n    return acs.getActiveSpan();\n  }\n\n  return _getSpanForScope(getCurrentScope());\n}\n\n/**\n * Logs a warning once if `beforeSendSpan` is used to drop spans.\n */\nexport function showSpanDropWarning(): void {\n  if (!hasShownSpanDropWarning) {\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.warn(\n        '[Sentry] Returning null from `beforeSendSpan` is disallowed. To drop certain spans, configure the respective integrations directly or use `ignoreSpans`.',\n      );\n    });\n    hasShownSpanDropWarning = true;\n  }\n}\n\n/**\n * Updates the name of the given span and ensures that the span name is not\n * overwritten by the Sentry SDK.\n *\n * Use this function instead of `span.updateName()` if you want to make sure that\n * your name is kept. For some spans, for example root `http.server` spans the\n * Sentry SDK would otherwise overwrite the span name with a high-quality name\n * it infers when the span ends.\n *\n * Use this function in server code or when your span is started on the server\n * and on the client (browser). If you only update a span name on the client,\n * you can also use `span.updateName()` the SDK does not overwrite the name.\n *\n * @param span - The span to update the name of.\n * @param name - The name to set on the span.\n */\nexport function updateSpanName(span: Span, name: string): void {\n  span.updateName(name);\n  span.setAttributes({\n    [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom',\n    [SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME]: name,\n  });\n}\n", "import { getClient } from '../currentScopes';\nimport type { CoreOptions } from '../types/options';\n\n// Treeshakable guard to remove all code related to tracing\ndeclare const __SENTRY_TRACING__: boolean | undefined;\n\n/**\n * Determines if span recording is currently enabled.\n *\n * Spans are recorded when at least one of `tracesSampleRate` and `tracesSampler`\n * is defined in the SDK config. This function does not make any assumption about\n * sampling decisions, it only checks if the SDK is configured to record spans.\n *\n * Important: This function only determines if span recording is enabled. Trace\n * continuation and propagation is separately controlled and not covered by this function.\n * If this function returns `false`, traces can still be propagated (which is what\n * we refer to by \"Tracing without Performance\")\n * @see https://develop.sentry.dev/sdk/telemetry/traces/tracing-without-performance/\n *\n * @param maybeOptions An SDK options object to be passed to this function.\n * If this option is not provided, the function will use the current client's options.\n */\nexport function hasSpansEnabled(\n  maybeOptions?: Pick<CoreOptions, 'tracesSampleRate' | 'tracesSampler'> | undefined,\n): boolean {\n  if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {\n    return false;\n  }\n\n  const options = maybeOptions || getClient()?.getOptions();\n  return (\n    !!options &&\n    // 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}\n", "import { DEBUG_BUILD } from '../debug-build';\nimport type { ClientOptions, IgnoreSpanAttributeValue } from '../types/options';\nimport type { SpanJSON } from '../types/span';\nimport { debug } from './debug-logger';\nimport { isMatchingPattern } from './string';\n\nfunction logIgnoredSpan(droppedSpan: Pick<SpanJSON, 'description' | 'op'>): void {\n  debug.log(`Ignoring span ${droppedSpan.op} - ${droppedSpan.description} because it matches \\`ignoreSpans\\`.`);\n}\n\n/**\n * Check if a span should be ignored based on the ignoreSpans configuration.\n */\nexport function shouldIgnoreSpan(\n  span: Pick<SpanJSON, 'description' | 'op'> & { attributes?: Record<string, unknown> },\n  ignoreSpans: Required<ClientOptions>['ignoreSpans'],\n): boolean {\n  if (!ignoreSpans?.length) {\n    return false;\n  }\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\n    const hasAttributes = !!pattern.attributes && Object.keys(pattern.attributes).length > 0;\n    if (!pattern.name && !pattern.op && !hasAttributes) {\n      continue;\n    }\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\n      ? Object.entries(pattern.attributes).every(([key, valuePattern]) =>\n          _matchesAttributeValue(span.attributes?.[key], valuePattern),\n        )\n      : true;\n\n    // This check here is only correct because we can guarantee that we ran `isMatchingPattern`\n    // for at least one of `nameMatches`, `opMatches`, or `attrsMatch`. So in contrary to how this looks,\n    // not all of op, name, and attributes actually have to match. This is the most efficient way to check\n    // for all combinations of name, op, and attribute patterns.\n    if (nameMatches && opMatches && attrsMatch) {\n      DEBUG_BUILD && logIgnoredSpan(span);\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction _matchesAttributeValue(actual: unknown, pat: IgnoreSpanAttributeValue): boolean {\n  // String values support pattern matching\n  if (typeof actual === 'string' && (typeof pat === 'string' || pat instanceof RegExp)) {\n    return isMatchingPattern(actual, pat);\n  }\n  // Arrays: element-wise strict equality\n  if (Array.isArray(actual) && Array.isArray(pat)) {\n    return actual.length === pat.length && actual.every((v, i) => v === pat[i]);\n  }\n  // Primitives: strict equality\n  return actual === pat;\n}\n\n/**\n * Takes a list of spans, and a span that was dropped, and re-parents the child spans of the dropped span to the parent of the dropped span, if possible.\n * This mutates the spans array in place!\n */\nexport function reparentChildSpans(spans: SpanJSON[], dropSpan: SpanJSON): void {\n  const droppedSpanParentId = dropSpan.parent_span_id;\n  const droppedSpanId = dropSpan.span_id;\n\n  // This should generally not happen, as we do not apply this on root spans\n  // but to be safe, we just bail in this case\n  if (!droppedSpanParentId) {\n    return;\n  }\n\n  for (const span of spans) {\n    if (span.parent_span_id === droppedSpanId) {\n      span.parent_span_id = droppedSpanParentId;\n    }\n  }\n}\n\nfunction isStringOrRegExp(value: unknown): value is string | RegExp {\n  return typeof value === 'string' || value instanceof RegExp;\n}\n", "import type { EventDropReason } from '../types/clientreport';\nimport type {\n  SentrySpanArguments,\n  Span,\n  SpanAttributes,\n  SpanAttributeValue,\n  SpanContextData,\n  SpanTimeInput,\n} from '../types/span';\nimport type { SpanStatus } from '../types/spanStatus';\nimport { addNonEnumerableProperty } from '../utils/object';\nimport { generateSpanId, generateTraceId } from '../utils/propagationContext';\nimport { TRACE_FLAG_NONE } from '../utils/spanUtils';\n\ninterface SentryNonRecordingSpanArguments extends SentrySpanArguments {\n  dropReason?: EventDropReason;\n}\n\n// Brand used to detect non-recording spans via {@link spanIsNonRecordingSpan} without `instanceof`,\n// which is brittle when `@sentry/core` is duplicated across packages. We use `Symbol.for` so the key\n// is shared across copies of the module, and so user payloads (e.g. JSON) cannot spoof the marker.\nconst NON_RECORDING_SPAN_FIELD = Symbol.for('sentry.nonRecordingSpan');\n\n/**\n * A Sentry Span that is non-recording, meaning it will not be sent to Sentry.\n */\nexport class SentryNonRecordingSpan implements Span {\n  private _traceId: string;\n  private _spanId: string;\n\n  /**\n   * Reason why this span was dropped, if applicable ('ignored' or 'sample_rate').\n   * Used to propagate the correct client report outcome to descendant spans\n   * when span streaming is enabled.\n   */\n  public dropReason?: EventDropReason;\n\n  public constructor(spanContext: SentryNonRecordingSpanArguments = {}) {\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\n  /** @inheritdoc */\n  public spanContext(): SpanContextData {\n    return {\n      spanId: this._spanId,\n      traceId: this._traceId,\n      traceFlags: TRACE_FLAG_NONE,\n    };\n  }\n\n  /** @inheritdoc */\n  public end(_timestamp?: SpanTimeInput): void {}\n\n  /** @inheritdoc */\n  public setAttribute(_key: string, _value: SpanAttributeValue | undefined): this {\n    return this;\n  }\n\n  /** @inheritdoc */\n  public setAttributes(_values: SpanAttributes): this {\n    return this;\n  }\n\n  /** @inheritdoc */\n  public setStatus(_status: SpanStatus): this {\n    return this;\n  }\n\n  /** @inheritdoc */\n  public updateName(_name: string): this {\n    return this;\n  }\n\n  /** @inheritdoc */\n  public isRecording(): boolean {\n    return false;\n  }\n\n  /** @inheritdoc */\n  public addEvent(\n    _name: string,\n    _attributesOrStartTime?: SpanAttributes | SpanTimeInput,\n    _startTime?: SpanTimeInput,\n  ): this {\n    return this;\n  }\n\n  /** @inheritDoc */\n  public addLink(_link: unknown): this {\n    return this;\n  }\n\n  /** @inheritDoc */\n  public addLinks(_links: unknown[]): this {\n    return this;\n  }\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  public recordException(_exception: unknown, _time?: SpanTimeInput | undefined): void {\n    // noop\n  }\n}\n\n/**\n * Whether the given span is a {@link SentryNonRecordingSpan}.\n */\nexport function spanIsNonRecordingSpan(span: Span | undefined): span is SentryNonRecordingSpan {\n  return !!span && (span as { [NON_RECORDING_SPAN_FIELD]?: boolean })[NON_RECORDING_SPAN_FIELD] === true;\n}\n", "export const DEFAULT_ENVIRONMENT = 'production';\nexport const DEV_ENVIRONMENT = 'development';\n", "import type { Client } from '../client';\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { getClient } from '../currentScopes';\nimport type { Scope } from '../scope';\nimport {\n  SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE,\n  SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE,\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '../semanticAttributes';\nimport type { DynamicSamplingContext } from '../types/envelope';\nimport type { Span } from '../types/span';\nimport { baggageHeaderToDynamicSamplingContext, dynamicSamplingContextToSentryBaggageHeader } from '../utils/baggage';\nimport { extractOrgIdFromClient } from '../utils/dsn';\nimport { hasSpansEnabled } from '../utils/hasSpansEnabled';\nimport { addNonEnumerableProperty } from '../utils/object';\nimport { getRootSpan, spanIsSampled, spanToJSON } from '../utils/spanUtils';\nimport { spanIsNonRecordingSpan } from './sentryNonRecordingSpan';\nimport { getCapturedScopesOnSpan } from './utils';\n\n/**\n * If you change this value, also update the terser plugin config to\n * avoid minification of the object property!\n */\nconst FROZEN_DSC_FIELD = '_frozenDsc';\n\ntype SpanWithMaybeDsc = Span & {\n  [FROZEN_DSC_FIELD]?: Partial<DynamicSamplingContext> | undefined;\n};\n\n/**\n * Freeze the given DSC on the given span.\n */\nexport function freezeDscOnSpan(span: Span, dsc: Partial<DynamicSamplingContext>): void {\n  const spanWithMaybeDsc = span as SpanWithMaybeDsc;\n  addNonEnumerableProperty(spanWithMaybeDsc, FROZEN_DSC_FIELD, dsc);\n}\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatches the `createDsc` lifecycle hook as a side effect.\n */\nexport function getDynamicSamplingContextFromClient(trace_id: string, client: Client): DynamicSamplingContext {\n  const options = client.getOptions();\n\n  const { publicKey: public_key } = client.getDsn() || {};\n\n  // Instead of conditionally adding non-undefined values, we add them and then remove them if needed\n  // otherwise, the order of baggage entries changes, which \"breaks\" a bunch of tests etc.\n  const dsc: DynamicSamplingContext = {\n    environment: options.environment || DEFAULT_ENVIRONMENT,\n    release: options.release,\n    public_key,\n    trace_id,\n    org_id: extractOrgIdFromClient(client),\n  };\n\n  client.emit('createDsc', dsc);\n\n  return dsc;\n}\n\n/**\n * Get the dynamic sampling context for the currently active scopes.\n */\nexport function getDynamicSamplingContextFromScope(client: Client, scope: Scope): Partial<DynamicSamplingContext> {\n  const propagationContext = scope.getPropagationContext();\n  return propagationContext.dsc || getDynamicSamplingContextFromClient(propagationContext.traceId, client);\n}\n\n/**\n * Creates a dynamic sampling context from a span (and client and scope)\n *\n * @param span the span from which a few values like the root span name and sample rate are extracted.\n *\n * @returns a dynamic sampling context\n */\nexport function getDynamicSamplingContextFromSpan(span: Span): Readonly<Partial<DynamicSamplingContext>> {\n  const client = getClient();\n  if (!client) {\n    return {};\n  }\n\n  const rootSpan = getRootSpan(span);\n  const rootSpanJson = spanToJSON(rootSpan);\n  const rootSpanAttributes = rootSpanJson.data;\n  const traceState = rootSpan.spanContext().traceState;\n\n  // The span sample rate that was locally applied to the root span should also always be applied to the DSC, even if the DSC is frozen.\n  // This is so that the downstream traces/services can use parentSampleRate in their `tracesSampler` to make consistent sampling decisions across the entire trace.\n  const rootSpanSampleRate =\n    traceState?.get('sentry.sample_rate') ??\n    rootSpanAttributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] ??\n    rootSpanAttributes[SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE];\n\n  function applyLocalSampleRateToDsc(dsc: Partial<DynamicSamplingContext>): Partial<DynamicSamplingContext> {\n    if (typeof rootSpanSampleRate === 'number' || typeof rootSpanSampleRate === 'string') {\n      dsc.sample_rate = `${rootSpanSampleRate}`;\n    }\n    return dsc;\n  }\n\n  // For core implementation, we freeze the DSC onto the span as a non-enumerable property\n  const frozenDsc = (rootSpan as SpanWithMaybeDsc)[FROZEN_DSC_FIELD];\n  if (frozenDsc) {\n    return applyLocalSampleRateToDsc(frozenDsc);\n  }\n\n  // For a non-recording placeholder in Tracing without Performance (TwP) mode or an ignored segment,\n  // the DSC is not carried on the span; the scope is the source of truth. Resolve it from the span's\n  // captured scope so continued traces keep their incoming DSC.\n  //\n  // We gate this on `!hasSpansEnabled()` so it mirrors the `sentry-trace` source in `getTraceData`:\n  // with tracing enabled, other non-recording spans (e.g. an `onlyIfParent` placeholder) keep deriving\n  // their DSC from the span/client. Ignored segments are an explicit exception: they preserve the\n  // incoming DSC but override its sampling decision to agree with the propagated `sentry-trace`.\n  //\n  // We spread into a new object so applying the local sample rate can't mutate the scope's DSC.\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    if (capturedScope) {\n      const dsc = { ...getDynamicSamplingContextFromScope(client, capturedScope) };\n      if (isIgnoredRoot) {\n        dsc.sampled = 'false';\n      }\n      return applyLocalSampleRateToDsc(dsc);\n    }\n  }\n\n  // For OpenTelemetry, we freeze the DSC on the trace state\n  const traceStateDsc = traceState?.get('sentry.dsc');\n\n  // If the span has a DSC, we want it to take precedence\n  const dscOnTraceState = traceStateDsc && baggageHeaderToDynamicSamplingContext(traceStateDsc);\n\n  if (dscOnTraceState) {\n    return applyLocalSampleRateToDsc(dscOnTraceState);\n  }\n\n  // Else, we generate it from the span\n  const dsc = getDynamicSamplingContextFromClient(span.spanContext().traceId, client);\n\n  // We don't want to have a transaction name in the DSC if the source is \"url\" because URLs might contain PII\n  // TODO(v11): Only read `SENTRY_SEGMENT_NAME_SOURCE` once we removed `SEMANTIC_ATTRIBUTE_SENTRY_SOURCE`\n  const source =\n    rootSpanAttributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] ?? rootSpanAttributes['sentry.segment.name.source'];\n\n  // after JSON conversion, txn.name becomes jsonSpan.description\n  const name = rootSpanJson.description;\n  if (source !== 'url' && name) {\n    dsc.transaction = name;\n  }\n\n  // How can we even land here with hasSpansEnabled() returning false?\n  // Otel creates a Non-recording span in Tracing Without Performance mode when handling incoming requests\n  // So we end up with an active span that is not sampled (neither positively nor negatively)\n  if (hasSpansEnabled()) {\n    dsc.sampled = String(spanIsSampled(rootSpan));\n    dsc.sample_rand =\n      // 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') ??\n      // 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\n  applyLocalSampleRateToDsc(dsc);\n\n  client.emit('createDsc', dsc, rootSpan);\n\n  return dsc;\n}\n\n/**\n * Convert a Span to a baggage header.\n */\nexport function spanToBaggageHeader(span: Span): string | undefined {\n  const dsc = getDynamicSamplingContextFromSpan(span);\n  return dynamicSamplingContextToSentryBaggageHeader(dsc);\n}\n", "import type { CoreOptions } from '../../types/options';\nimport type { BeforeSendStreamedSpanCallback } from '../../types/options';\nimport type { StreamedSpanJSON } from '../../types/span';\nimport { addNonEnumerableProperty } from '../../utils/object';\n\ntype StaticBeforeSendSpanCallback = CoreOptions['beforeSendSpan'];\n\n/**\n * A wrapper to use the new span format in your `beforeSendSpan` callback.\n *\n * When using `traceLifecycle: 'stream'`, wrap your callback with this function\n * to receive and return {@link StreamedSpanJSON} instead of the standard {@link SpanJSON}.\n *\n * @example\n *\n * Sentry.init({\n *   traceLifecycle: 'stream',\n *   beforeSendSpan: withStreamedSpan((span) => {\n *     // span is of type StreamedSpanJSON\n *     return span;\n *   }),\n * });\n *\n * @param callback - The callback function that receives and returns a {@link StreamedSpanJSON}.\n * @returns A callback that is compatible with the `beforeSendSpan` option when using `traceLifecycle: 'stream'`.\n */\nexport function withStreamedSpan(\n  callback: (span: StreamedSpanJSON) => StreamedSpanJSON,\n): StaticBeforeSendSpanCallback & { _streamed: true } {\n  addNonEnumerableProperty(callback, '_streamed', true);\n  return callback as unknown as StaticBeforeSendSpanCallback & { _streamed: true };\n}\n\n/**\n * Typesafe check to identify if a `beforeSendSpan` callback expects the streamed span JSON format.\n *\n * @param callback - The `beforeSendSpan` callback to check.\n * @returns `true` if the callback was wrapped with {@link withStreamedSpan}.\n */\nexport function isStreamedBeforeSendSpanCallback(callback: unknown): callback is BeforeSendStreamedSpanCallback {\n  return !!callback && typeof callback === 'function' && '_streamed' in callback && !!callback._streamed;\n}\n", "import { getSentryCarrier } from '../carrier';\nimport type { Attachment } from '../types/attachment';\nimport type { DataCategory } from '../types/datacategory';\nimport type { DsnComponents } from '../types/dsn';\nimport type {\n  AttachmentItem,\n  BaseEnvelopeHeaders,\n  BaseEnvelopeItemHeaders,\n  Envelope,\n  EnvelopeItemType,\n  EventEnvelopeHeaders,\n  SpanItem,\n} from '../types/envelope';\nimport type { Event } from '../types/event';\nimport type { SdkInfo } from '../types/sdkinfo';\nimport type { SdkMetadata } from '../types/sdkmetadata';\nimport type { SpanJSON } from '../types/span';\nimport { dsnToString } from './dsn';\nimport { normalize } from './normalize';\nimport { safeDateNow } from './randomSafeContext';\nimport { GLOBAL_OBJ } from './worldwide';\n\n/**\n * Creates an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nexport function createEnvelope<E extends Envelope>(headers: E[0], items: E[1] = []): E {\n  return [headers, items] as E;\n}\n\n/**\n * Add an item to an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nexport function addItemToEnvelope<E extends Envelope>(envelope: E, newItem: E[1][number]): E {\n  const [headers, items] = envelope;\n  return [headers, [...items, newItem]] as unknown as E;\n}\n\n/**\n * Convenience function to loop through the items and item types of an envelope.\n * (This function was mostly created because working with envelope types is painful at the moment)\n *\n * If the callback returns true, the rest of the items will be skipped.\n */\nexport function forEachEnvelopeItem<E extends Envelope>(\n  envelope: Envelope,\n  callback: (envelopeItem: E[1][number], envelopeItemType: E[1][number][0]['type']) => boolean | void,\n): boolean {\n  const envelopeItems = envelope[1];\n\n  for (const envelopeItem of envelopeItems) {\n    const envelopeItemType = envelopeItem[0].type;\n    const result = callback(envelopeItem, envelopeItemType);\n\n    if (result) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Returns true if the envelope contains any of the given envelope item types\n */\nexport function envelopeContainsItemType(envelope: Envelope, types: EnvelopeItemType[]): boolean {\n  return forEachEnvelopeItem(envelope, (_, type) => types.includes(type));\n}\n\n/**\n * Encode a string to UTF8 array.\n */\nfunction encodeUTF8(input: string): Uint8Array {\n  const carrier = getSentryCarrier(GLOBAL_OBJ);\n  return carrier.encodePolyfill ? carrier.encodePolyfill(input) : new TextEncoder().encode(input);\n}\n\n/**\n * Decode a UTF8 array to string.\n */\nfunction decodeUTF8(input: Uint8Array): string {\n  const carrier = getSentryCarrier(GLOBAL_OBJ);\n  return carrier.decodePolyfill ? carrier.decodePolyfill(input) : new TextDecoder().decode(input);\n}\n\n/**\n * Serializes an envelope.\n */\nexport function serializeEnvelope(envelope: Envelope): string | Uint8Array {\n  const [envHeaders, items] = envelope;\n  // Initially we construct our envelope as a string and only convert to binary chunks if we encounter binary data\n  let parts: string | Uint8Array[] = JSON.stringify(envHeaders);\n\n  function append(next: string | Uint8Array): void {\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\n  for (const item of items) {\n    const [itemHeaders, payload] = item;\n\n    append(`\\n${JSON.stringify(itemHeaders)}\\n`);\n\n    if (typeof payload === 'string' || payload instanceof Uint8Array) {\n      append(payload);\n    } else {\n      let stringifiedPayload: string;\n      try {\n        stringifiedPayload = JSON.stringify(payload);\n      } catch {\n        // In case, despite all our efforts to keep `payload` circular-dependency-free, `JSON.stringify()` still\n        // fails, we try again after normalizing it again with infinite normalization depth. This of course has a\n        // performance impact but in this case a performance hit is better than throwing.\n        stringifiedPayload = JSON.stringify(normalize(payload));\n      }\n      append(stringifiedPayload);\n    }\n  }\n\n  return typeof parts === 'string' ? parts : concatBuffers(parts);\n}\n\nfunction concatBuffers(buffers: Uint8Array[]): Uint8Array {\n  const totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0);\n\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\n  return merged;\n}\n\n/**\n * Parses an envelope\n */\nexport function parseEnvelope(env: string | Uint8Array): Envelope {\n  let buffer = typeof env === 'string' ? encodeUTF8(env) : env;\n\n  function readBinary(length: number): Uint8Array {\n    const bin = buffer.subarray(0, length);\n    // Replace the buffer with the remaining data excluding trailing newline\n    buffer = buffer.subarray(length + 1);\n    return bin;\n  }\n\n  function readJson<T>(): T {\n    let i = buffer.indexOf(0xa);\n    // If we couldn't find a newline, we must have found the end of the buffer\n    if (i < 0) {\n      i = buffer.length;\n    }\n\n    return JSON.parse(decodeUTF8(readBinary(i))) as T;\n  }\n\n  const envelopeHeader = readJson<BaseEnvelopeHeaders>();\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const items: [any, any][] = [];\n\n  while (buffer.length) {\n    const itemHeader = readJson<BaseEnvelopeItemHeaders>();\n    const binaryLength = typeof itemHeader.length === 'number' ? itemHeader.length : undefined;\n\n    items.push([itemHeader, binaryLength ? readBinary(binaryLength) : readJson()]);\n  }\n\n  return [envelopeHeader, items];\n}\n\n/**\n * Creates envelope item for a single span\n */\nexport function createSpanEnvelopeItem(spanJson: Partial<SpanJSON>): SpanItem {\n  const spanHeaders: SpanItem[0] = {\n    type: 'span',\n  };\n\n  return [spanHeaders, spanJson];\n}\n\n/**\n * Creates attachment envelope items\n */\nexport function createAttachmentEnvelopeItem(attachment: Attachment): AttachmentItem {\n  const buffer = typeof attachment.data === 'string' ? encodeUTF8(attachment.data) : attachment.data;\n\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}\n\ntype OverriddenItemType = Exclude<EnvelopeItemType, DataCategory>;\n\n// Map of envelope item types to data categories where the category differs from the type.\n// Types that map to themselves (session, attachment, transaction, profile, feedback, span, metric) fall through.\nconst DATA_CATEGORY_OVERRIDES: Record<OverriddenItemType, DataCategory> = {\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};\n\nfunction _isOverriddenType(type: EnvelopeItemType): type is OverriddenItemType {\n  return type in DATA_CATEGORY_OVERRIDES;\n}\n\n/**\n * Maps the type of an envelope item to a data category.\n */\nexport function envelopeItemTypeToDataCategory(type: EnvelopeItemType): DataCategory {\n  return _isOverriddenType(type) ? DATA_CATEGORY_OVERRIDES[type] : type;\n}\n\n/** Extracts the minimal SDK info from the metadata or an events */\nexport function getSdkMetadataForEnvelopeHeader(metadataOrEvent?: SdkMetadata | Event): SdkInfo | undefined {\n  if (!metadataOrEvent?.sdk) {\n    return;\n  }\n  const { name, version } = metadataOrEvent.sdk;\n  return { name, version };\n}\n\n/**\n * Creates event envelope headers, based on event, sdk info and tunnel\n * Note: This function was extracted from the core package to make it available in Replay\n */\nexport function createEventEnvelopeHeaders(\n  event: Event,\n  sdkInfo: SdkInfo | undefined,\n  tunnel: string | undefined,\n  dsn?: DsnComponents,\n): EventEnvelopeHeaders {\n  const dynamicSamplingContext = event.sdkProcessingMetadata?.dynamicSamplingContext;\n  return {\n    event_id: event.event_id as string,\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}\n", "import type { Client } from './client';\nimport { getDynamicSamplingContextFromSpan } from './tracing/dynamicSamplingContext';\nimport type { SentrySpan } from './tracing/sentrySpan';\nimport { isStreamedBeforeSendSpanCallback } from './tracing/spans/beforeSendSpan';\nimport type { LegacyCSPReport } from './types/csp';\nimport type { DsnComponents } from './types/dsn';\nimport type {\n  DynamicSamplingContext,\n  EventEnvelope,\n  EventItem,\n  RawSecurityEnvelope,\n  RawSecurityItem,\n  SessionEnvelope,\n  SessionItem,\n  SpanEnvelope,\n  SpanItem,\n} from './types/envelope';\nimport type { Event } from './types/event';\nimport type { SdkInfo } from './types/sdkinfo';\nimport type { SdkMetadata } from './types/sdkmetadata';\nimport type { Session, SessionAggregates } from './types/session';\nimport { dsnToString } from './utils/dsn';\nimport {\n  createEnvelope,\n  createEventEnvelopeHeaders,\n  createSpanEnvelopeItem,\n  getSdkMetadataForEnvelopeHeader,\n} from './utils/envelope';\nimport { uuid4 } from './utils/misc';\nimport { safeDateNow } from './utils/randomSafeContext';\nimport { shouldIgnoreSpan } from './utils/should-ignore-span';\nimport { showSpanDropWarning, spanToJSON } from './utils/spanUtils';\n\n/**\n * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.\n * Merge with existing data if any.\n *\n * @internal, exported only for testing\n **/\nexport function _enhanceEventWithSdkInfo(event: Event, newSdkInfo?: SdkInfo): Event {\n  if (!newSdkInfo) {\n    return event;\n  }\n\n  const eventSdkInfo = event.sdk || {};\n\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:\n      event.sdk?.settings || newSdkInfo.settings\n        ? {\n            ...event.sdk?.settings,\n            ...newSdkInfo.settings,\n          }\n        : undefined,\n  };\n\n  return event;\n}\n\n/** Creates an envelope from a Session */\nexport function createSessionEnvelope(\n  session: Session | SessionAggregates,\n  dsn?: DsnComponents,\n  metadata?: SdkMetadata,\n  tunnel?: string,\n): SessionEnvelope {\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\n  const envelopeItem: SessionItem =\n    'aggregates' in session ? [{ type: 'sessions' }, session] : [{ type: 'session' }, session.toJSON()];\n\n  return createEnvelope<SessionEnvelope>(envelopeHeaders, [envelopeItem]);\n}\n\n/**\n * Create an Envelope from an event.\n */\nexport function createEventEnvelope(\n  event: Event,\n  dsn?: DsnComponents,\n  metadata?: SdkMetadata,\n  tunnel?: string,\n): EventEnvelope {\n  const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n\n  /*\n    Note: Due to TS, event.type may be `replay_event`, theoretically.\n    In practice, we never call `createEventEnvelope` with `replay_event` type,\n    and we'd have to adjust a looot of types to make this work properly.\n    We want to avoid casting this around, as that could lead to bugs (e.g. when we add another type)\n    So the safe choice is to really guard against the replay_event type here.\n  */\n  const eventType = event.type && event.type !== 'replay_event' ? event.type : 'event';\n\n  _enhanceEventWithSdkInfo(event, metadata?.sdk);\n\n  const envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn);\n\n  // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n  // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n  // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n  // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n  delete event.sdkProcessingMetadata;\n\n  const eventItem: EventItem = [{ type: eventType }, event];\n  return createEnvelope<EventEnvelope>(envelopeHeaders, [eventItem]);\n}\n\n/**\n * Create envelope from Span item.\n *\n * Takes an optional client and runs spans through `beforeSendSpan` if available.\n */\nexport function createSpanEnvelope(spans: [SentrySpan, ...SentrySpan[]], client?: Client): SpanEnvelope {\n  function dscHasRequiredProps(dsc: Partial<DynamicSamplingContext>): dsc is DynamicSamplingContext {\n    return !!dsc.trace_id && !!dsc.public_key;\n  }\n\n  // For the moment we'll obtain the DSC from the first span in the array\n  // This might need to be changed if we permit sending multiple spans from\n  // different segments in one envelope\n  const dsc = getDynamicSamplingContextFromSpan(spans[0]);\n\n  const dsn = client?.getDsn();\n  const tunnel = client?.getOptions().tunnel;\n\n  const headers: SpanEnvelope[0] = {\n    sent_at: new Date(safeDateNow()).toISOString(),\n    ...(dscHasRequiredProps(dsc) && { trace: dsc }),\n    ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n  };\n\n  const { beforeSendSpan, ignoreSpans } = client?.getOptions() || {};\n\n  const filteredSpans = ignoreSpans?.length\n    ? spans.filter(span => {\n        const json = spanToJSON(span);\n        return !shouldIgnoreSpan({ description: json.description, op: json.op, attributes: json.data }, ignoreSpans);\n      })\n    : spans;\n  const droppedSpans = spans.length - filteredSpans.length;\n\n  if (droppedSpans) {\n    client?.recordDroppedEvent('before_send', 'span', droppedSpans);\n  }\n\n  const convertToSpanJSON = beforeSendSpan\n    ? (span: SentrySpan) => {\n        const spanJson = spanToJSON(span);\n        const processedSpan = !isStreamedBeforeSendSpanCallback(beforeSendSpan) ? beforeSendSpan(spanJson) : spanJson;\n\n        if (!processedSpan) {\n          showSpanDropWarning();\n          return spanJson;\n        }\n\n        return processedSpan;\n      }\n    : spanToJSON;\n\n  const items: SpanItem[] = [];\n  for (const span of filteredSpans) {\n    const spanJson = convertToSpanJSON(span);\n    if (spanJson) {\n      items.push(createSpanEnvelopeItem(spanJson));\n    }\n  }\n\n  return createEnvelope<SpanEnvelope>(headers, items);\n}\n\n/**\n * Create an Envelope from a CSP report.\n */\nexport function createRawSecurityEnvelope(\n  report: LegacyCSPReport,\n  dsn: DsnComponents,\n  tunnel?: string,\n  release?: string,\n  environment?: string,\n): RawSecurityEnvelope {\n  const envelopeHeaders = {\n    event_id: uuid4(),\n    ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n  };\n\n  const eventItem: RawSecurityItem = [\n    { type: 'raw_security', sentry_release: release, sentry_environment: environment },\n    report,\n  ];\n\n  return createEnvelope<RawSecurityEnvelope>(envelopeHeaders, [eventItem]);\n}\n", "import { DEBUG_BUILD } from '../debug-build';\nimport type { Span } from '../types/span';\nimport { debug } from '../utils/debug-logger';\nimport { getRootSpan, spanIsSampled, spanToJSON } from '../utils/spanUtils';\n\n/**\n * Print a log message for a started span.\n */\nexport function logSpanStart(span: Span): void {\n  if (!DEBUG_BUILD) return;\n\n  const { description = '< unknown name >', op = '< unknown op >', parent_span_id: parentSpanId } = spanToJSON(span);\n  const { spanId } = span.spanContext();\n\n  const sampled = spanIsSampled(span);\n  const rootSpan = getRootSpan(span);\n  const isRootSpan = rootSpan === span;\n\n  const header = `[Tracing] Starting ${sampled ? 'sampled' : 'unsampled'} ${isRootSpan ? 'root ' : ''}span`;\n\n  const infoParts: string[] = [`op: ${op}`, `name: ${description}`, `ID: ${spanId}`];\n\n  if (parentSpanId) {\n    infoParts.push(`parent ID: ${parentSpanId}`);\n  }\n\n  if (!isRootSpan) {\n    const { op, description } = spanToJSON(rootSpan);\n    infoParts.push(`root ID: ${rootSpan.spanContext().spanId}`);\n    if (op) {\n      infoParts.push(`root op: ${op}`);\n    }\n    if (description) {\n      infoParts.push(`root description: ${description}`);\n    }\n  }\n\n  debug.log(`${header}\n  ${infoParts.join('\\n  ')}`);\n}\n\n/**\n * Print a log message for an ended span.\n */\nexport function logSpanEnd(span: Span): void {\n  if (!DEBUG_BUILD) return;\n\n  const { description = '< unknown name >', op = '< unknown op >' } = spanToJSON(span);\n  const { spanId } = span.spanContext();\n  const rootSpan = getRootSpan(span);\n  const isRootSpan = rootSpan === span;\n\n  const msg = `[Tracing] Finishing \"${op}\" ${isRootSpan ? 'root ' : ''}span \"${description}\" with ID ${spanId}`;\n  debug.log(msg);\n}\n", "import { DEBUG_BUILD } from '../debug-build';\nimport {\n  SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT,\n  SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE,\n} from '../semanticAttributes';\nimport type { Measurements, MeasurementUnit } from '../types/measurement';\nimport type { TimedEvent } from '../types/timedEvent';\nimport { debug } from '../utils/debug-logger';\nimport { getActiveSpan, getRootSpan } from '../utils/spanUtils';\n\n/**\n * Adds a measurement to the active transaction on the current global scope. You can optionally pass in a different span\n * as the 4th parameter.\n */\nexport function setMeasurement(name: string, value: number, unit: MeasurementUnit, activeSpan = getActiveSpan()): void {\n  const rootSpan = activeSpan && getRootSpan(activeSpan);\n\n  if (rootSpan) {\n    DEBUG_BUILD && debug.log(`[Measurement] Setting measurement on root span: ${name} = ${value} ${unit}`);\n    rootSpan.addEvent(name, {\n      [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: value,\n      [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: unit as string,\n    });\n  }\n}\n\n/**\n * Convert timed events to measurements.\n */\nexport function timedEventsToMeasurements(events: TimedEvent[]): Measurements | undefined {\n  if (!events || events.length === 0) {\n    return undefined;\n  }\n\n  const measurements: Measurements = {};\n  events.forEach(event => {\n    const attributes = event.attributes || {};\n    const unit = attributes[SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT] as MeasurementUnit | undefined;\n    const value = attributes[SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE] as number | undefined;\n\n    if (typeof unit === 'string' && typeof value === 'number') {\n      measurements[event.name] = { value, unit };\n    }\n  });\n\n  return measurements;\n}\n", "import { getMainCarrier, getSentryCarrier } from '../carrier';\nimport type { Scope } from '../scope';\nimport type { TransactionEvent } from '../types/event';\nimport type { Span } from '../types/span';\n\n/**\n * Callbacks the deferred-capture strategy hands to `_convertSpanToTransaction` when assembling a\n * transaction. The synchronous (browser) path calls the converter with no options, so neither runs.\n */\nexport interface SegmentSpanCaptureConvertOptions {\n  /** Skip a descendant already sent in an earlier transaction, so it isn't sent twice. */\n  isSpanAlreadyCaptured?: (span: Span) => boolean;\n  /** Record each span included here, so a child that ends after the snapshot can be emitted as an orphan. */\n  onSpanCaptured?: (span: Span) => void;\n}\n\nexport type SegmentSpanConverter = (options?: SegmentSpanCaptureConvertOptions) => TransactionEvent | undefined;\n\n/**\n * Assembles segment spans into transactions. Registered by SDKs that defer capture (see\n * `_INTERNAL_setDeferSegmentSpanCapture`); when unset, `SentrySpan` captures synchronously. Living\n * behind this seam tree-shakes the deferral machinery out of SDKs that never register one (e.g. browser).\n */\nexport interface SegmentSpanCaptureStrategy {\n  /** Assemble and capture a segment (root or standalone-root) span's transaction through its captured scope. */\n  onSegmentSpanEnded(convert: SegmentSpanConverter, scope: Scope): void;\n  /** Consider a child that ended after its segment for emission as its own orphan transaction. */\n  onChildSpanEnded(span: Span, rootSpan: Span, convert: SegmentSpanConverter, scope: Scope): void;\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Set the global segment-span capture strategy (or clear it with `undefined`).\n */\nexport function setSegmentSpanCaptureStrategy(strategy: SegmentSpanCaptureStrategy | undefined): void {\n  getSentryCarrier(getMainCarrier()).segmentSpanCaptureStrategy = strategy;\n}\n\n/** Get the global segment-span capture strategy, or `undefined` when none is registered. */\nexport function getSegmentSpanCaptureStrategy(): SegmentSpanCaptureStrategy | undefined {\n  return getSentryCarrier(getMainCarrier()).segmentSpanCaptureStrategy;\n}\n", "import type { Client } from '../../client';\n\n/**\n * Determines if span streaming is enabled for the given client\n */\nexport function hasSpanStreamingEnabled(client: Client): boolean {\n  return client.getOptions().traceLifecycle === 'stream';\n}\n", "/* eslint-disable max-lines */\nimport { getClient, getCurrentScope } from '../currentScopes';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { createSpanEnvelope } from '../envelope';\nimport {\n  SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME,\n  SEMANTIC_ATTRIBUTE_PROFILE_ID,\n  SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '../semanticAttributes';\nimport type { SpanEnvelope } from '../types/envelope';\nimport type { TransactionEvent } from '../types/event';\nimport type { SpanLink } from '../types/link';\nimport type {\n  SentrySpanArguments,\n  Span,\n  SpanAttributes,\n  SpanAttributeValue,\n  SpanContextData,\n  SpanJSON,\n  SpanOrigin,\n  SpanTimeInput,\n  StreamedSpanJSON,\n} from '../types/span';\nimport type { SpanStatus } from '../types/spanStatus';\nimport type { TimedEvent } from '../types/timedEvent';\nimport { debug } from '../utils/debug-logger';\nimport { generateSpanId, generateTraceId } from '../utils/propagationContext';\nimport {\n  addStatusMessageAttribute,\n  convertSpanLinksForEnvelope,\n  getRootSpan,\n  getSimpleStatus,\n  getSpanDescendants,\n  getStatusMessage,\n  getStreamedSpanLinks,\n  spanTimeInputToSeconds,\n  spanToJSON,\n  spanToTransactionTraceContext,\n  TRACE_FLAG_NONE,\n  TRACE_FLAG_SAMPLED,\n} from '../utils/spanUtils';\nimport { timestampInSeconds } from '../utils/time';\nimport { getDynamicSamplingContextFromSpan } from './dynamicSamplingContext';\nimport { logSpanEnd } from './logSpans';\nimport { timedEventsToMeasurements } from './measurement';\nimport { getSegmentSpanCaptureStrategy, type SegmentSpanCaptureConvertOptions } from './segmentSpanCaptureStrategy';\nimport { hasSpanStreamingEnabled } from './spans/hasSpanStreamingEnabled';\nimport {\n  getCapturedScopesOnSpan,\n  markSpanSourceAsExplicit,\n  spanIsTracerProviderSpan,\n  spanShouldInferOtelSource,\n} from './utils';\n\nconst MAX_SPAN_COUNT = 1000;\n\n/**\n * Span contains all data about a span\n */\nexport class SentrySpan implements Span {\n  protected _traceId: string;\n  protected _spanId: string;\n  protected _parentSpanId?: string | undefined;\n  protected _sampled: boolean | undefined;\n  protected _name?: string | undefined;\n  protected _attributes: SpanAttributes;\n  protected _links?: SpanLink[];\n  /** Epoch timestamp in seconds when the span started. */\n  protected _startTime: number;\n  /** Epoch timestamp in seconds when the span ended. */\n  protected _endTime?: number | undefined;\n  /** Internal keeper of the status */\n  protected _status?: SpanStatus;\n  /** The timed events added to this span. */\n  protected _events: TimedEvent[];\n\n  /** if true, treat span as a standalone span (not part of a transaction) */\n  private _isStandaloneSpan?: boolean;\n\n  /** if true, the span is sealed and ignores further mutations (set after end for tracer-provider spans) */\n  private _frozen?: boolean;\n\n  /**\n   * You should never call the constructor manually, always use `Sentry.startSpan()`\n   * or other span methods.\n   * @internal\n   * @hideconstructor\n   * @hidden\n   */\n  public constructor(spanContext: SentrySpanArguments = {}) {\n    this._traceId = spanContext.traceId || generateTraceId();\n    this._spanId = spanContext.spanId || generateSpanId();\n    this._startTime = spanContext.startTimestamp || timestampInSeconds();\n    this._links = spanContext.links;\n\n    this._attributes = {};\n    this.setAttributes({\n      [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual',\n      [SEMANTIC_ATTRIBUTE_SENTRY_OP]: spanContext.op,\n      ...spanContext.attributes,\n    });\n\n    this._name = spanContext.name;\n\n    if (spanContext.parentSpanId) {\n      this._parentSpanId = spanContext.parentSpanId;\n    }\n    // We want to include booleans as well here\n    if ('sampled' in spanContext) {\n      this._sampled = spanContext.sampled;\n    }\n    if (spanContext.endTimestamp) {\n      this._endTime = spanContext.endTimestamp;\n    }\n\n    this._events = [];\n\n    this._isStandaloneSpan = spanContext.isStandalone;\n\n    // If the span is already ended, ensure we finalize the span immediately\n    if (this._endTime) {\n      this._onSpanEnded();\n    }\n  }\n\n  /** @inheritDoc */\n  public addLink(link: SpanLink): this {\n    if (this._frozen) {\n      return this;\n    }\n    if (this._links) {\n      this._links.push(link);\n    } else {\n      this._links = [link];\n    }\n    return this;\n  }\n\n  /** @inheritDoc */\n  public addLinks(links: SpanLink[]): this {\n    if (this._frozen) {\n      return this;\n    }\n    if (this._links) {\n      this._links.push(...links);\n    } else {\n      this._links = links;\n    }\n    return this;\n  }\n\n  /**\n   * This should generally not be used,\n   * but it is needed for being compliant with the OTEL Span interface.\n   *\n   * @hidden\n   * @internal\n   */\n  public recordException(_exception: unknown, _time?: SpanTimeInput | undefined): void {\n    // noop\n  }\n\n  /** @inheritdoc */\n  public spanContext(): SpanContextData {\n    const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this;\n    return {\n      spanId,\n      traceId,\n      traceFlags: sampled ? TRACE_FLAG_SAMPLED : TRACE_FLAG_NONE,\n    };\n  }\n\n  /** @inheritdoc */\n  public setAttribute(key: string, value: SpanAttributeValue | undefined): this {\n    if (this._frozen) {\n      return this;\n    }\n\n    if (value === undefined) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._attributes[key];\n    } else {\n      this._attributes[key] = value;\n    }\n\n    // Setting the source on a span branded for OTel-style inference means user code is choosing it\n    // explicitly, so flag it to keep `applyOtelSpanData` from overriding it with an inferred source.\n    if (key === SEMANTIC_ATTRIBUTE_SENTRY_SOURCE && value !== undefined && spanShouldInferOtelSource(this)) {\n      markSpanSourceAsExplicit(this);\n    }\n\n    return this;\n  }\n\n  /** @inheritdoc */\n  public setAttributes(attributes: SpanAttributes): this {\n    Object.keys(attributes).forEach(key => this.setAttribute(key, attributes[key]));\n    return this;\n  }\n\n  /**\n   * This should generally not be used,\n   * but we need it for browser tracing where we want to adjust the start time afterwards.\n   * USE THIS WITH CAUTION!\n   *\n   * @hidden\n   * @internal\n   */\n  public updateStartTime(timeInput: SpanTimeInput): void {\n    if (this._frozen) {\n      return;\n    }\n    this._startTime = spanTimeInputToSeconds(timeInput);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setStatus(value: SpanStatus): this {\n    if (this._frozen) {\n      return this;\n    }\n    this._status = value;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public updateName(name: string): this {\n    if (this._frozen) {\n      return this;\n    }\n    this._name = name;\n    // Renaming a span marks its name as explicitly chosen, so we stamp `custom`.\n    // The exception is spans created by SentryTraceProvider: those are branded for\n    // OTel-style source inference at span end (mirroring OTel SDK spans, which have\n    // no Sentry source concept), so instrumentations renaming them must not pin\n    // `custom` — applyOtelSpanData infers the correct source (e.g. 'route', 'task').\n    if (!spanShouldInferOtelSource(this)) {\n      this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, 'custom');\n    }\n    return this;\n  }\n\n  /** @inheritdoc */\n  public end(endTimestamp?: SpanTimeInput): void {\n    // If already ended, skip the end-of-span processing, but still seal a tracer-provider span. The\n    // seal at the bottom of this method is skipped on this early return, and `_endTime` may have been\n    // set before this first `end()` call (e.g. via the constructor's `endTimestamp`), which would\n    // otherwise leave the span mutable after `end()`. End-of-span processing already ran in that case.\n    if (this._endTime) {\n      this._frozen = spanIsTracerProviderSpan(this);\n      return;\n    }\n\n    this._endTime = spanTimeInputToSeconds(endTimestamp);\n    logSpanEnd(this);\n\n    this._onSpanEnded();\n\n    // A span created by the SentryTracerProvider is handed to OTel instrumentations as an OTel span,\n    // so once end-of-span processing is done (including the `spanEnd` hook where `applyOtelSpanData`\n    // finalizes status/source) it is sealed against further writes — mirroring the OpenTelemetry SDK,\n    // where setters no-op after a span has ended. Without this, an instrumentation that sets\n    // status/attributes after `end()` (e.g. Next.js on a render error) would overwrite the finalized\n    // values, and the deferred capture would then serialize those late writes. Spans created directly\n    // through the core API (e.g. the browser SDK, which backfills resource-timing attributes after a\n    // span ends) are not tracer-provider spans and stay mutable.\n    this._frozen = spanIsTracerProviderSpan(this);\n  }\n\n  /**\n   * Get JSON representation of this span.\n   *\n   * @hidden\n   * @internal This method is purely for internal purposes and should not be used outside\n   * of SDK code. If you need to get a JSON representation of a span,\n   * use `spanToJSON(span)` instead.\n   */\n  public getSpanJSON(): SpanJSON {\n    return {\n      data: this._attributes,\n      description: this._name,\n      op: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n      parent_span_id: this._parentSpanId,\n      span_id: this._spanId,\n      start_timestamp: this._startTime,\n      status: getStatusMessage(this._status),\n      timestamp: this._endTime,\n      trace_id: this._traceId,\n      origin: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined,\n      profile_id: this._attributes[SEMANTIC_ATTRIBUTE_PROFILE_ID] as string | undefined,\n      exclusive_time: this._attributes[SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME] as number | undefined,\n      measurements: timedEventsToMeasurements(this._events),\n      is_segment: (this._isStandaloneSpan && getRootSpan(this) === this) || undefined,\n      segment_id: this._isStandaloneSpan ? getRootSpan(this).spanContext().spanId : undefined,\n      links: convertSpanLinksForEnvelope(this._links),\n    };\n  }\n\n  /**\n   * Get {@link StreamedSpanJSON} representation of this span.\n   *\n   * @hidden\n   * @internal This method is purely for internal purposes and should not be used outside\n   * of SDK code. If you need to get a JSON representation of a span,\n   * use `spanToStreamedSpanJSON(span)` instead.\n   */\n  public getStreamedSpanJSON(): StreamedSpanJSON {\n    return {\n      name: this._name ?? '',\n      span_id: this._spanId,\n      trace_id: this._traceId,\n      parent_span_id: this._parentSpanId,\n      start_timestamp: this._startTime,\n      // just in case _endTime is not set, we use the start time (i.e. duration 0)\n      end_timestamp: this._endTime ?? this._startTime,\n      is_segment: this._isStandaloneSpan || this === getRootSpan(this),\n      status: getSimpleStatus(this._status),\n      attributes: addStatusMessageAttribute(this._attributes, this._status),\n      links: getStreamedSpanLinks(this._links),\n    };\n  }\n\n  /** @inheritdoc */\n  public isRecording(): boolean {\n    return !this._endTime && !!this._sampled;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public addEvent(\n    name: string,\n    attributesOrStartTime?: SpanAttributes | SpanTimeInput,\n    startTime?: SpanTimeInput,\n  ): this {\n    if (this._frozen) {\n      return this;\n    }\n    DEBUG_BUILD && debug.log('[Tracing] Adding an event to span:', name);\n\n    const time = isSpanTimeInput(attributesOrStartTime) ? attributesOrStartTime : startTime || timestampInSeconds();\n    const attributes = isSpanTimeInput(attributesOrStartTime) ? {} : attributesOrStartTime || {};\n\n    const event: TimedEvent = {\n      name,\n      time: spanTimeInputToSeconds(time),\n      attributes,\n    };\n\n    this._events.push(event);\n\n    return this;\n  }\n\n  /**\n   * This method should generally not be used,\n   * but for now we need a way to publicly check if the `_isStandaloneSpan` flag is set.\n   * USE THIS WITH CAUTION!\n   * @internal\n   * @hidden\n   * @experimental\n   */\n  public isStandaloneSpan(): boolean {\n    return !!this._isStandaloneSpan;\n  }\n\n  /** Emit `spanEnd` when the span is ended. */\n  private _onSpanEnded(): void {\n    const client = getClient();\n    if (client) {\n      client.emit('spanEnd', this);\n      // Guarding sending standalone v1 spans as v2 streamed spans for now.\n      // Otherwise they'd be sent once as v1 spans and again as streamed spans.\n      // We'll migrate CLS and LCP spans to streamed spans in a later PR and\n      // INP spans in the next major of the SDK. At that point, we can fully remove\n      // standalone v1 spans <3\n      if (!this._isStandaloneSpan) {\n        client.emit('afterSpanEnd', this);\n      }\n    }\n\n    // A segment span is basically the root span of a local span tree.\n    // So for now, this is either what we previously refer to as the root span,\n    // or a standalone span.\n    const rootSpan = getRootSpan(this);\n    const isSegmentSpan = this._isStandaloneSpan || this === rootSpan;\n\n    // if this is a standalone span, we send it immediately\n    if (this._isStandaloneSpan) {\n      if (this._sampled) {\n        sendSpanEnvelope(createSpanEnvelope([this], client));\n      } else {\n        DEBUG_BUILD &&\n          debug.log('[Tracing] Discarding standalone span because its trace was not chosen to be sampled.');\n        if (client) {\n          client.recordDroppedEvent('sample_rate', 'span');\n        }\n      }\n      return;\n    }\n\n    // Non-segment children aren't captured on their own. A registered strategy may re-emit a late child\n    // as its own orphan transaction; without one, it's dropped.\n    if (!isSegmentSpan) {\n      const strategy = getSegmentSpanCaptureStrategy();\n      if (strategy) {\n        const scope = getCapturedScopesOnSpan(this).scope || getCurrentScope();\n        strategy.onChildSpanEnded(this, rootSpan, options => this._convertSpanToTransaction(options), scope);\n      }\n      return;\n    }\n\n    if (client && hasSpanStreamingEnabled(client)) {\n      // TODO (spans): Remove standalone span custom logic in favor of sending simple v2 web vital spans\n      client.emit('afterSegmentSpanEnd', this);\n      return;\n    }\n\n    // A registered strategy defers the snapshot so children closing just after the segment still land\n    // (and late ones can orphan); without one, assemble synchronously from the live tree.\n    const scope = getCapturedScopesOnSpan(this).scope || getCurrentScope();\n    const strategy = getSegmentSpanCaptureStrategy();\n    if (strategy) {\n      strategy.onSegmentSpanEnded(options => this._convertSpanToTransaction(options), scope);\n    } else {\n      const transactionEvent = this._convertSpanToTransaction();\n      if (transactionEvent) {\n        scope.captureEvent(transactionEvent);\n      }\n    }\n  }\n\n  /**\n   * Finish the transaction & prepare the event to send to Sentry.\n   */\n  private _convertSpanToTransaction(options: SegmentSpanCaptureConvertOptions = {}): TransactionEvent | undefined {\n    // We can only convert finished spans\n    if (!isFullFinishedSpan(spanToJSON(this))) {\n      return undefined;\n    }\n\n    if (!this._name) {\n      DEBUG_BUILD && debug.warn('Transaction has no name, falling back to `<unlabeled transaction>`.');\n      this._name = '<unlabeled transaction>';\n    }\n\n    const { scope: capturedSpanScope, isolationScope: capturedSpanIsolationScope } = getCapturedScopesOnSpan(this);\n\n    const normalizedRequest = capturedSpanScope?.getScopeData().sdkProcessingMetadata?.normalizedRequest;\n\n    if (this._sampled !== true) {\n      return undefined;\n    }\n\n    // Skip the span itself, standalone spans, and (when a strategy tracks it) spans already sent. The\n    // synchronous default passes no hooks, so this bookkeeping stays out of SDKs that don't defer.\n    options.onSpanCaptured?.(this);\n    const spans: SpanJSON[] = [];\n    for (const descendant of getSpanDescendants(this)) {\n      if (descendant === this || isStandaloneSpan(descendant) || options.isSpanAlreadyCaptured?.(descendant)) {\n        continue;\n      }\n      const spanJSON = spanToJSON(descendant);\n      if (!isFullFinishedSpan(spanJSON)) {\n        continue;\n      }\n      options.onSpanCaptured?.(descendant);\n      spans.push(spanJSON);\n    }\n\n    const source = this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n    // remove internal root span attributes we don't need to send.\n    /* eslint-disable @typescript-eslint/no-dynamic-delete */\n    delete this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n    let hasGenAiSpans = false;\n    spans.forEach(span => {\n      delete span.data[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n      if (span.op?.startsWith('gen_ai.')) {\n        hasGenAiSpans = true;\n      }\n    });\n    // eslint-enabled-next-line @typescript-eslint/no-dynamic-delete\n\n    const transaction: TransactionEvent = {\n      contexts: {\n        trace: spanToTransactionTraceContext(this),\n      },\n      spans:\n        // spans.sort() mutates the array, but `spans` is already a copy so we can safely do this here\n        // we do not use spans anymore after this point\n        spans.length > MAX_SPAN_COUNT\n          ? spans.sort((a, b) => a.start_timestamp - b.start_timestamp).slice(0, MAX_SPAN_COUNT)\n          : spans,\n      start_timestamp: this._startTime,\n      timestamp: this._endTime,\n      transaction: this._name,\n      type: 'transaction',\n      sdkProcessingMetadata: {\n        capturedSpanScope,\n        capturedSpanIsolationScope,\n        dynamicSamplingContext: getDynamicSamplingContextFromSpan(this),\n        hasGenAiSpans,\n      },\n      request: normalizedRequest,\n      ...(source && {\n        transaction_info: {\n          source,\n        },\n      }),\n    };\n\n    const measurements = timedEventsToMeasurements(this._events);\n    const hasMeasurements = measurements && Object.keys(measurements).length;\n\n    if (hasMeasurements) {\n      DEBUG_BUILD &&\n        debug.log(\n          '[Measurements] Adding measurements to transaction event',\n          JSON.stringify(measurements, undefined, 2),\n        );\n      transaction.measurements = measurements;\n    }\n\n    return transaction;\n  }\n}\n\nfunction isSpanTimeInput(value: undefined | SpanAttributes | SpanTimeInput): value is SpanTimeInput {\n  return (value && typeof value === 'number') || value instanceof Date || Array.isArray(value);\n}\n\n// We want to filter out any incomplete SpanJSON objects\nfunction isFullFinishedSpan(input: Partial<SpanJSON>): input is SpanJSON {\n  return !!input.start_timestamp && !!input.timestamp && !!input.span_id && !!input.trace_id;\n}\n\n/** `SentrySpan`s can be sent as a standalone span rather than belonging to a transaction */\nfunction isStandaloneSpan(span: Span): boolean {\n  return span instanceof SentrySpan && span.isStandaloneSpan();\n}\n\n/**\n * Sends a `SpanEnvelope`.\n *\n * Note: If the envelope's spans are dropped, e.g. via `beforeSendSpan`,\n * the envelope will not be sent either.\n */\nfunction sendSpanEnvelope(envelope: SpanEnvelope): void {\n  const client = getClient();\n  if (!client) {\n    return;\n  }\n\n  const spanItems = envelope[1];\n  if (!spanItems || spanItems.length === 0) {\n    client.recordDroppedEvent('before_send', 'span');\n    return;\n  }\n\n  // sendEnvelope should not throw\n  // eslint-disable-next-line @typescript-eslint/no-floating-promises\n  client.sendEnvelope(envelope);\n}\n", "import { chainAndCopyPromiseLike } from '../utils/chain-and-copy-promiselike';\nimport { isThenable } from '../utils/is';\n\n/* eslint-disable */\n// Vendor \"Awaited\" in to be TS 3.8 compatible\ntype AwaitedPromise<T> = T extends null | undefined\n  ? T // special case for `null | undefined` when not in `--strictNullChecks` mode\n  : T extends object & { then(onfulfilled: infer F, ...args: infer _): any } // `await` only unwraps object types with a callable `then`. Non-object types are not unwrapped\n    ? F extends (value: infer V, ...args: infer _) => any // if the argument to `then` is callable, extracts the first argument\n      ? V // normally this would recursively unwrap, but this is not possible in TS3.8\n      : never // the argument to `then` was not callable\n    : T; // non-object or non-thenable\n/* eslint-enable */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function handleCallbackErrors<Fn extends () => Promise<any>, PromiseValue = AwaitedPromise<ReturnType<Fn>>>(\n  fn: Fn,\n  onError: (error: unknown) => void,\n  onFinally?: () => void,\n  onSuccess?: (result: PromiseValue) => void,\n): ReturnType<Fn>;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function handleCallbackErrors<Fn extends () => any>(\n  fn: Fn,\n  onError: (error: unknown) => void,\n  onFinally?: () => void,\n  onSuccess?: (result: ReturnType<Fn>) => void,\n): ReturnType<Fn>;\n/**\n * Wrap a callback function with error handling.\n * If an error is thrown, it will be passed to the `onError` callback and re-thrown.\n *\n * If the return value of the function is a promise, it will be handled with `maybeHandlePromiseRejection`.\n *\n * If an `onFinally` callback is provided, this will be called when the callback has finished\n * - so if it returns a promise, once the promise resolved/rejected,\n * else once the callback has finished executing.\n * The `onFinally` callback will _always_ be called, no matter if an error was thrown or not.\n */\nexport function handleCallbackErrors<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  Fn extends () => any,\n  ValueType = ReturnType<Fn>,\n>(\n  fn: Fn,\n  onError: (error: unknown) => void,\n  onFinally: () => void = () => {},\n  onSuccess: (result: ValueType | AwaitedPromise<ValueType>) => void = () => {},\n): ValueType {\n  let maybePromiseResult: ReturnType<Fn>;\n  try {\n    maybePromiseResult = fn();\n  } catch (e) {\n    onError(e);\n    onFinally();\n    throw e;\n  }\n\n  return maybeHandlePromiseRejection(maybePromiseResult, onError, onFinally, onSuccess);\n}\n\n/**\n * Maybe handle a promise rejection.\n * This expects to be given a value that _may_ be a promise, or any other value.\n * If it is a promise, and it rejects, it will call the `onError` callback.\n *\n * For thenable objects with extra methods (like jQuery's jqXHR),\n * this function preserves those methods by wrapping the original thenable in a Proxy\n * that intercepts .then() calls to apply error handling while forwarding all other\n * properties to the original object.\n * This allows code like `startSpan(() => $.ajax(...)).abort()` to work correctly.\n */\nfunction maybeHandlePromiseRejection<MaybePromise>(\n  value: MaybePromise,\n  onError: (error: unknown) => void,\n  onFinally: () => void,\n  onSuccess: (result: MaybePromise | AwaitedPromise<MaybePromise>) => void,\n): MaybePromise {\n  if (isThenable(value)) {\n    return chainAndCopyPromiseLike(\n      value as MaybePromise & PromiseLike<Awaited<typeof value>> & Record<string, unknown>,\n      result => {\n        onFinally();\n        onSuccess(result as Awaited<MaybePromise>);\n      },\n      err => {\n        onError(err);\n        onFinally();\n      },\n    ) as MaybePromise;\n  }\n  // Non-thenable value - call callbacks immediately and return as-is\n  onFinally();\n  onSuccess(value);\n  return value;\n}\n", "import { DEBUG_BUILD } from '../debug-build';\nimport type { CoreOptions } from '../types/options';\nimport type { SamplingContext } from '../types/samplingcontext';\nimport { debug } from '../utils/debug-logger';\nimport { hasSpansEnabled } from '../utils/hasSpansEnabled';\nimport { parseSampleRate } from '../utils/parseSampleRate';\n\n/**\n * Makes a sampling decision for the given options.\n *\n * Called every time a root span is created. Only root spans which emerge with a `sampled` value of `true` will be\n * sent to Sentry.\n */\nexport function sampleSpan(\n  options: Pick<CoreOptions, 'tracesSampleRate' | 'tracesSampler'>,\n  samplingContext: SamplingContext,\n  sampleRand: number,\n): [sampled: boolean, sampleRate?: number, localSampleRateWasApplied?: boolean] {\n  // nothing to do if span recording is not enabled\n  if (!hasSpansEnabled(options)) {\n    return [false];\n  }\n\n  let localSampleRateWasApplied = undefined;\n\n  // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` were defined, so one of these should\n  // work; prefer the hook if so\n  let sampleRate;\n  if (typeof options.tracesSampler === 'function') {\n    sampleRate = options.tracesSampler({\n      ...samplingContext,\n      inheritOrSampleWith: fallbackSampleRate => {\n        // If we have an incoming parent sample rate, we'll just use that one.\n        // The sampling decision will be inherited because of the sample_rand that was generated when the trace reached the incoming boundaries of the SDK.\n        if (typeof samplingContext.parentSampleRate === 'number') {\n          return samplingContext.parentSampleRate;\n        }\n\n        // Fallback if parent sample rate is not on the incoming trace (e.g. if there is no baggage)\n        // This is to provide backwards compatibility if there are incoming traces from older SDKs that don't send a parent sample rate or a sample rand. In these cases we just want to force either a sampling decision on the downstream traces via the sample rate.\n        if (typeof samplingContext.parentSampled === 'boolean') {\n          return Number(samplingContext.parentSampled);\n        }\n\n        return fallbackSampleRate;\n      },\n    });\n    localSampleRateWasApplied = true;\n  } else if (samplingContext.parentSampled !== undefined) {\n    sampleRate = samplingContext.parentSampled;\n  } else if (typeof options.tracesSampleRate !== 'undefined') {\n    sampleRate = options.tracesSampleRate;\n    localSampleRateWasApplied = true;\n  }\n\n  // Since this is coming from the user (or from a function provided by the user), who knows what we might get.\n  // (The only valid values are booleans or numbers between 0 and 1.)\n  const parsedSampleRate = parseSampleRate(sampleRate);\n\n  if (parsedSampleRate === undefined) {\n    DEBUG_BUILD &&\n      debug.warn(\n        `[Tracing] Discarding root span because of invalid sample rate. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n          sampleRate,\n        )} of type ${JSON.stringify(typeof sampleRate)}.`,\n      );\n    return [false];\n  }\n\n  // if the function returned 0 (or false), or if `tracesSampleRate` is 0, it's a sign the transaction should be dropped\n  if (!parsedSampleRate) {\n    DEBUG_BUILD &&\n      debug.log(\n        `[Tracing] Discarding transaction because ${\n          typeof options.tracesSampler === 'function'\n            ? 'tracesSampler returned 0 or false'\n            : 'a negative sampling decision was inherited or tracesSampleRate is set to 0'\n        }`,\n      );\n    return [false, parsedSampleRate, localSampleRateWasApplied];\n  }\n\n  // We always compare the sample rand for the current execution context against the chosen sample rate.\n  // Read more: https://develop.sentry.dev/sdk/telemetry/traces/#propagated-random-value\n  const shouldSample = sampleRand < parsedSampleRate;\n\n  // if we're not going to keep it, we're done\n  if (!shouldSample) {\n    DEBUG_BUILD &&\n      debug.log(\n        `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(\n          sampleRate,\n        )})`,\n      );\n  }\n\n  return [shouldSample, parsedSampleRate, localSampleRateWasApplied];\n}\n", "/* eslint-disable max-lines */\n\nimport { getAsyncContextStrategy } from '../asyncContext';\nimport type { AsyncContextStrategy } from '../asyncContext/types';\nimport { getMainCarrier } from '../carrier';\nimport { getClient, getCurrentScope, getIsolationScope, withScope } from '../currentScopes';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Scope } from '../scope';\nimport {\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE,\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '../semanticAttributes';\nimport type { ClientOptions } from '../types/options';\nimport type { SentrySpanArguments, Span, SpanTimeInput } from '../types/span';\nimport type { StartSpanOptions } from '../types/startSpanOptions';\nimport { baggageHeaderToDynamicSamplingContext } from '../utils/baggage';\nimport { debug } from '../utils/debug-logger';\nimport { handleCallbackErrors } from '../utils/handleCallbackErrors';\nimport { hasSpansEnabled } from '../utils/hasSpansEnabled';\nimport { shouldIgnoreSpan } from '../utils/should-ignore-span';\nimport { hasSpanStreamingEnabled } from './spans/hasSpanStreamingEnabled';\nimport { parseSampleRate } from '../utils/parseSampleRate';\nimport { generateTraceId } from '../utils/propagationContext';\nimport { safeMathRandom } from '../utils/randomSafeContext';\nimport { _getSpanForScope, _setSpanForScope } from '../utils/spanOnScope';\nimport { addChildSpanToSpan, getRootSpan, spanIsSampled, spanTimeInputToSeconds, spanToJSON } from '../utils/spanUtils';\nimport { propagationContextFromHeaders, shouldContinueTrace } from '../utils/tracing';\nimport { freezeDscOnSpan, getDynamicSamplingContextFromSpan } from './dynamicSamplingContext';\nimport { logSpanStart } from './logSpans';\nimport { sampleSpan } from './sampling';\nimport { SentryNonRecordingSpan, spanIsNonRecordingSpan } from './sentryNonRecordingSpan';\nimport { SentrySpan } from './sentrySpan';\nimport { SPAN_STATUS_ERROR } from './spanstatus';\nimport { setCapturedScopesOnSpan } from './utils';\nimport type { Client } from '../client';\n\nexport const SUPPRESS_TRACING_KEY = '__SENTRY_SUPPRESS_TRACING__';\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * If you want to create a span that is not set as active, use {@link startInactiveSpan}.\n *\n * You'll always get a span passed to the callback,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nexport function startSpan<T>(options: StartSpanOptions, callback: (span: Span) => T): T {\n  const acs = getAcs();\n  if (acs.startSpan) {\n    return acs.startSpan(options, callback);\n  }\n\n  const spanArguments = parseSentrySpanArguments(options);\n  const { forceTransaction, parentSpan: customParentSpan, scope: customScope } = options;\n\n  // We still need to fork a potentially passed scope, as we set the active span on it\n  // and we need to ensure that it is cleaned up properly once the span ends.\n  const customForkedScope = customScope?.clone();\n\n  return withScope(customForkedScope, () => {\n    // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n    const wrapper = getActiveSpanWrapper<T>(customParentSpan);\n\n    return wrapper(() => {\n      const scope = getCurrentScope();\n      const parentSpan = getParentSpan(scope, customParentSpan);\n      const client = getClient();\n\n      const missingRequiredParent = options.onlyIfParent && !parentSpan;\n      const activeSpan = missingRequiredParent\n        ? startMissingRequiredParentSpan(scope, client)\n        : createChildOrRootSpan({\n            parentSpan,\n            spanArguments,\n            forceTransaction,\n            scope,\n          });\n\n      // Ignored root spans still need to be set on scope so that `getActiveSpan()` returns them\n      // and descendants are also non-recording. Ignored child spans don't need this because\n      // the parent span is already on scope.\n      if (!spanIsIgnored(activeSpan) || !parentSpan) {\n        _setSpanForScope(scope, activeSpan);\n      }\n\n      return handleCallbackErrors(\n        () => callback(activeSpan),\n        () => {\n          // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n          const { status } = spanToJSON(activeSpan);\n          if (activeSpan.isRecording() && (!status || status === 'ok')) {\n            activeSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n          }\n        },\n        () => {\n          activeSpan.end();\n        },\n      );\n    });\n  });\n}\n\n/**\n * Similar to `Sentry.startSpan`. Wraps a function with a transaction/span, but does not finish the span\n * after the function is done automatically. Use `span.end()` to end the span.\n *\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * You'll always get a span passed to the callback,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nexport function startSpanManual<T>(options: StartSpanOptions, callback: (span: Span, finish: () => void) => T): T {\n  const acs = getAcs();\n  if (acs.startSpanManual) {\n    return acs.startSpanManual(options, callback);\n  }\n\n  const spanArguments = parseSentrySpanArguments(options);\n  const { forceTransaction, parentSpan: customParentSpan, scope: customScope } = options;\n\n  const customForkedScope = customScope?.clone();\n\n  return withScope(customForkedScope, () => {\n    // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n    const wrapper = getActiveSpanWrapper<T>(customParentSpan);\n\n    return wrapper(() => {\n      const scope = getCurrentScope();\n      const parentSpan = getParentSpan(scope, customParentSpan);\n\n      const missingRequiredParent = options.onlyIfParent && !parentSpan;\n      const activeSpan = missingRequiredParent\n        ? startMissingRequiredParentSpan(scope, getClient())\n        : createChildOrRootSpan({\n            parentSpan,\n            spanArguments,\n            forceTransaction,\n            scope,\n          });\n\n      // We don't set ignored child spans onto the scope because there likely is an active,\n      // unignored span on the scope already.\n      if (!spanIsIgnored(activeSpan) || !parentSpan) {\n        _setSpanForScope(scope, activeSpan);\n      }\n\n      return handleCallbackErrors(\n        // We pass the `finish` function to the callback, so the user can finish the span manually\n        // this is mainly here for historic purposes because previously, we instructed users to call\n        // `finish` instead of `span.end()` to also clean up the scope. Nowadays, calling `span.end()`\n        // or `finish` has the same effect and we simply leave it here to avoid breaking user code.\n        () => callback(activeSpan, () => activeSpan.end()),\n        () => {\n          // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n          const { status } = spanToJSON(activeSpan);\n          if (activeSpan.isRecording() && (!status || status === 'ok')) {\n            activeSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n          }\n        },\n      );\n    });\n  });\n}\n\n/**\n * Creates a span. This span is not set as active, so will not get automatic instrumentation spans\n * as children or be able to be accessed via `Sentry.getActiveSpan()`.\n *\n * If you want to create a span that is set as active, use {@link startSpan}.\n *\n * This function will always return a span,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nexport function startInactiveSpan(options: StartSpanOptions): Span {\n  const acs = getAcs();\n  if (acs.startInactiveSpan) {\n    return acs.startInactiveSpan(options);\n  }\n\n  return _startInactiveSpanImpl(options);\n}\n\n/**\n * Internal version of startInactiveSpan that bypasses the ACS check.\n * Used by SentryTracerProvider to create spans without triggering recursion\n * through ACS overrides.\n * @hidden\n */\nexport function _INTERNAL_startInactiveSpan(options: StartSpanOptions): Span {\n  return _startInactiveSpanImpl(options);\n}\n\nfunction _startInactiveSpanImpl(options: StartSpanOptions): Span {\n  const spanArguments = parseSentrySpanArguments(options);\n  const { forceTransaction, parentSpan: customParentSpan } = options;\n\n  // If `options.scope` is defined, we use this as as a wrapper,\n  // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n  const wrapper = options.scope\n    ? (callback: () => Span) => withScope(options.scope, callback)\n    : customParentSpan !== undefined\n      ? (callback: () => Span) => withActiveSpan(customParentSpan, callback)\n      : (callback: () => Span) => callback();\n\n  return wrapper(() => {\n    const scope = getCurrentScope();\n    const parentSpan = getParentSpan(scope, customParentSpan);\n    const client = getClient();\n\n    const missingRequiredParent = options.onlyIfParent && !parentSpan;\n\n    if (missingRequiredParent) {\n      return startMissingRequiredParentSpan(scope, client);\n    }\n\n    return createChildOrRootSpan({\n      parentSpan,\n      spanArguments,\n      forceTransaction,\n      scope,\n    });\n  });\n}\n\n/**\n * Continue a trace from `sentry-trace` and `baggage` values.\n * These values can be obtained from incoming request headers, or in the browser from `<meta name=\"sentry-trace\">`\n * and `<meta name=\"baggage\">` HTML tags.\n *\n * Spans started with `startSpan`, `startSpanManual` and `startInactiveSpan`, within the callback will automatically\n * be attached to the incoming trace.\n */\nexport const continueTrace = <V>(\n  options: {\n    sentryTrace: Parameters<typeof propagationContextFromHeaders>[0];\n    baggage: Parameters<typeof propagationContextFromHeaders>[1];\n  },\n  callback: () => V,\n): V => {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  if (acs.continueTrace) {\n    return acs.continueTrace(options, callback);\n  }\n\n  const { sentryTrace, baggage } = options;\n\n  const client = getClient();\n  const incomingDsc = baggageHeaderToDynamicSamplingContext(baggage);\n  if (client && !shouldContinueTrace(client, incomingDsc?.org_id)) {\n    return startNewTrace(callback);\n  }\n\n  return withScope(scope => {\n    const propagationContext = propagationContextFromHeaders(sentryTrace, baggage);\n    scope.setPropagationContext(propagationContext);\n    _setSpanForScope(scope, undefined);\n    return callback();\n  });\n};\n\n/**\n * Forks the current scope and sets the provided span as active span in the context of the provided callback. Can be\n * passed `null` to start an entirely new span tree.\n *\n * @param span Spans started in the context of the provided callback will be children of this span. If `null` is passed,\n * spans started within the callback will not be attached to a parent span.\n * @param callback Execution context in which the provided span will be active. Is passed the newly forked scope.\n * @returns the value returned from the provided callback function.\n */\nexport function withActiveSpan<T>(span: Span | null, callback: (scope: Scope) => T): T {\n  const acs = getAcs();\n  if (acs.withActiveSpan) {\n    return acs.withActiveSpan(span, callback);\n  }\n\n  return withScope(scope => {\n    _setSpanForScope(scope, span || undefined);\n    return callback(scope);\n  });\n}\n\n/** Suppress tracing in the given callback, ensuring no spans are generated inside of it. */\nexport function suppressTracing<T>(callback: () => T): T {\n  const acs = getAcs();\n\n  if (acs.suppressTracing) {\n    return acs.suppressTracing(callback);\n  }\n\n  return withScope(scope => {\n    // Note: We do not wait for the callback to finish before we reset the metadata\n    // the reason for this is that otherwise, in the browser this can lead to very weird behavior\n    // as there is only a single top scope, if the callback takes longer to finish,\n    // other, unrelated spans may also be suppressed, which we do not want\n    // so instead, we only suppress tracing synchronoysly in the browser\n    scope.setSDKProcessingMetadata({ [SUPPRESS_TRACING_KEY]: true });\n    const res = callback();\n    scope.setSDKProcessingMetadata({ [SUPPRESS_TRACING_KEY]: undefined });\n    return res;\n  });\n}\n\n/** Check if tracing is suppressed. */\nexport function isTracingSuppressed(scope = getCurrentScope()): boolean {\n  const acs = getAcs();\n\n  if (acs.isTracingSuppressed) {\n    return acs.isTracingSuppressed(scope);\n  }\n\n  return scope.getScopeData().sdkProcessingMetadata[SUPPRESS_TRACING_KEY] === true;\n}\n\n/**\n * Starts a new trace for the duration of the provided callback. Spans started within the\n * callback will be part of the new trace instead of a potentially previously started trace.\n *\n * Important: Only use this function if you want to override the default trace lifetime and\n * propagation mechanism of the SDK for the duration and scope of the provided callback.\n * The newly created trace will also be the root of a new distributed trace, for example if\n * you make http requests within the callback.\n * This function might be useful if the operation you want to instrument should not be part\n * of a potentially ongoing trace.\n *\n * Default behavior:\n * - Server-side: A new trace is started for each incoming request.\n * - Browser: A new trace is started for each page our route. Navigating to a new route\n *            or page will automatically create a new trace.\n */\nexport function startNewTrace<T>(callback: () => T): T {\n  const acs = getAcs();\n  if (acs.startNewTrace) {\n    return acs.startNewTrace(callback);\n  }\n\n  return withScope(scope => {\n    scope.setPropagationContext({\n      traceId: generateTraceId(),\n      sampleRand: safeMathRandom(),\n    });\n    DEBUG_BUILD && debug.log(`Starting a new trace with id ${scope.getPropagationContext().traceId}`);\n    return withActiveSpan(null, callback);\n  });\n}\n\n/**\n * The placeholder returned from `startSpan*` when `onlyIfParent` is set but there is no parent span.\n * It carries the current trace id and captured scopes so the trace data it propagates (and any nested\n * span that resolves it as its root via `getRootSpan`) reads its DSC from the scope, preserving a\n * continued trace's DSC instead of fabricating a fresh client one. Also records the dropped-span outcome.\n */\nfunction startMissingRequiredParentSpan(scope: Scope, client: Client | undefined): SentryNonRecordingSpan {\n  client?.recordDroppedEvent('no_parent_span', 'span');\n  const span = new SentryNonRecordingSpan({ traceId: scope.getPropagationContext().traceId });\n  setCapturedScopesOnSpan(span, scope, getIsolationScope());\n  return span;\n}\n\nfunction createChildOrRootSpan({\n  parentSpan,\n  spanArguments,\n  forceTransaction,\n  scope,\n}: {\n  parentSpan: SentrySpan | undefined;\n  spanArguments: SentrySpanArguments;\n  forceTransaction?: boolean;\n  scope: Scope;\n}): Span {\n  const isolationScope = getIsolationScope();\n\n  if (!hasSpansEnabled()) {\n    const scopePropagationContext = scope.getPropagationContext();\n    const traceId = parentSpan ? parentSpan.spanContext().traceId : scopePropagationContext.traceId;\n\n    // The placeholder is a thin marker; it carries no sampling decision or DSC. Both are read from\n    // the scope: the sampling decision in `getTraceData`, the DSC in `getDynamicSamplingContextFromSpan`.\n    const span = new SentryNonRecordingSpan({ traceId });\n\n    // Nested placeholders link to their parent so `getRootSpan` resolves to the root placeholder,\n    // whose captured scope is the source of truth. Root/forced placeholders are their own root.\n    if (parentSpan && !forceTransaction) {\n      addChildSpanToSpan(parentSpan, span);\n    }\n\n    // Capture scopes so consumers (e.g. SentryTraceProvider) can read them and so the DSC can be\n    // resolved from the scope by `getDynamicSamplingContextFromSpan`. Consistent with `startIdleSpan`.\n    setCapturedScopesOnSpan(span, scope, isolationScope);\n\n    return span;\n  }\n\n  const client = getClient();\n  if (_shouldIgnoreStreamedSpan(client, spanArguments)) {\n    if (!isTracingSuppressed(scope)) {\n      // if tracing is actively suppressed (Sentry.suppressTracing(...)),\n      // we don't want to record a client outcome for the ignored span\n      client?.recordDroppedEvent('ignored', 'span');\n    }\n\n    const ignoredSpan = new SentryNonRecordingSpan({\n      dropReason: 'ignored',\n      traceId: parentSpan?.spanContext().traceId ?? scope.getPropagationContext().traceId,\n    });\n    if (parentSpan && !forceTransaction) {\n      // Preserve the root relationship so async context strategies can distinguish\n      // ignored children from ignored segments and keep the parent active.\n      addChildSpanToSpan(parentSpan, ignoredSpan);\n    }\n    setCapturedScopesOnSpan(ignoredSpan, scope, isolationScope);\n\n    return ignoredSpan;\n  }\n\n  let span: Span;\n  if (parentSpan && !forceTransaction) {\n    span = _startChildSpan(parentSpan, scope, spanArguments, isolationScope);\n    addChildSpanToSpan(parentSpan, span);\n  } else if (parentSpan) {\n    // If we forced a transaction but have a parent span, make sure to continue from the parent span, not the scope\n    const dsc = getDynamicSamplingContextFromSpan(parentSpan);\n    const { traceId, spanId: parentSpanId } = parentSpan.spanContext();\n    const parentSampled = spanIsSampled(parentSpan);\n\n    span = _startRootSpan(\n      {\n        traceId,\n        parentSpanId,\n        ...spanArguments,\n      },\n      scope,\n      isolationScope,\n      parentSampled,\n    );\n\n    freezeDscOnSpan(span, dsc);\n  } else {\n    const { traceId, dsc, parentSpanId, sampled: parentSampled } = scope.getPropagationContext();\n\n    span = _startRootSpan(\n      {\n        traceId,\n        parentSpanId,\n        ...spanArguments,\n      },\n      scope,\n      isolationScope,\n      parentSampled,\n    );\n\n    if (dsc) {\n      freezeDscOnSpan(span, dsc);\n    }\n  }\n\n  logSpanStart(span);\n\n  return span;\n}\n\n/**\n * This converts StartSpanOptions to SentrySpanArguments.\n * For the most part (for now) we accept the same options,\n * but some of them need to be transformed.\n */\nfunction parseSentrySpanArguments(options: StartSpanOptions): SentrySpanArguments {\n  const exp = options.experimental || {};\n  const initialCtx: SentrySpanArguments = {\n    isStandalone: exp.standalone,\n    ...options,\n  };\n\n  if (options.startTime) {\n    const ctx: SentrySpanArguments & { startTime?: SpanTimeInput } = { ...initialCtx };\n    ctx.startTimestamp = spanTimeInputToSeconds(options.startTime);\n    delete ctx.startTime;\n    return ctx;\n  }\n\n  return initialCtx;\n}\n\nfunction getAcs(): AsyncContextStrategy {\n  const carrier = getMainCarrier();\n  return getAsyncContextStrategy(carrier);\n}\n\nfunction _startRootSpan(\n  spanArguments: SentrySpanArguments,\n  scope: Scope,\n  isolationScope: Scope,\n  parentSampled?: boolean,\n): SentrySpan {\n  const client = getClient();\n  const options: Partial<ClientOptions> = client?.getOptions() || {};\n\n  const { name = '' } = spanArguments;\n\n  const mutableSpanSamplingData = { spanAttributes: { ...spanArguments.attributes }, spanName: name, parentSampled };\n\n  // we don't care about the decision for the moment; this is just a placeholder\n  client?.emit('beforeSampling', mutableSpanSamplingData, { decision: false });\n\n  // If hook consumers override the parentSampled flag, we will use that value instead of the actual one\n  const finalParentSampled = mutableSpanSamplingData.parentSampled ?? parentSampled;\n  const finalAttributes = mutableSpanSamplingData.spanAttributes;\n\n  const currentPropagationContext = scope.getPropagationContext();\n  const _isTracingSuppressed = isTracingSuppressed(scope);\n\n  const [sampled, sampleRate, localSampleRateWasApplied] = _isTracingSuppressed\n    ? [false]\n    : sampleSpan(\n        options,\n        {\n          name,\n          parentSampled: finalParentSampled,\n          attributes: finalAttributes,\n          normalizedRequest: isolationScope.getScopeData().sdkProcessingMetadata.normalizedRequest,\n          parentSampleRate: parseSampleRate(currentPropagationContext.dsc?.sample_rate),\n        },\n        currentPropagationContext.sampleRand,\n      );\n\n  const rootSpan = new SentrySpan({\n    ...spanArguments,\n    attributes: {\n      [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom',\n      [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]:\n        sampleRate !== undefined && localSampleRateWasApplied ? sampleRate : undefined,\n      ...finalAttributes,\n    },\n    sampled,\n  });\n\n  if (!sampled && client && !_isTracingSuppressed) {\n    DEBUG_BUILD && debug.log('[Tracing] Discarding root span because its trace was not chosen to be sampled.');\n    client.recordDroppedEvent('sample_rate', hasSpanStreamingEnabled(client) ? 'span' : 'transaction');\n  }\n\n  setCapturedScopesOnSpan(rootSpan, scope, isolationScope);\n\n  if (client) {\n    client.emit('spanStart', rootSpan);\n  }\n\n  return rootSpan;\n}\n\n/**\n * Creates a new `Span` while setting the current `Span.id` as `parentSpanId`.\n * This inherits the sampling decision from the parent span.\n */\nfunction _startChildSpan(\n  parentSpan: Span,\n  scope: Scope,\n  spanArguments: SentrySpanArguments,\n  isolationScope: Scope,\n): Span {\n  const { spanId, traceId } = parentSpan.spanContext();\n  const _isTracingSuppressed = isTracingSuppressed(scope);\n  const sampled = _isTracingSuppressed ? false : spanIsSampled(parentSpan);\n\n  const childSpan = sampled\n    ? new SentrySpan({\n        ...spanArguments,\n        parentSpanId: spanId,\n        traceId,\n        sampled,\n      })\n    : new SentryNonRecordingSpan({ traceId });\n\n  addChildSpanToSpan(parentSpan, childSpan);\n\n  setCapturedScopesOnSpan(childSpan, scope, isolationScope);\n\n  const client = getClient();\n\n  if (!client) {\n    return childSpan;\n  }\n\n  if (hasSpanStreamingEnabled(client) && spanIsNonRecordingSpan(childSpan)) {\n    if (spanIsNonRecordingSpan(parentSpan) && parentSpan.dropReason) {\n      // We land here if the parent span was a segment span that was ignored (`ignoreSpans`).\n      // In this case, the child was also ignored (see `sampled` above) but we need to\n      // record a client outcome for the child.\n      childSpan.dropReason = parentSpan.dropReason;\n      client.recordDroppedEvent(parentSpan.dropReason, 'span');\n    } else if (!_isTracingSuppressed) {\n      // Otherwise, the child is not sampled due to sampling of the parent span,\n      // hence we record a sample_rate client outcome for the child.\n      childSpan.dropReason = 'sample_rate';\n      client.recordDroppedEvent('sample_rate', 'span');\n    }\n  }\n\n  client.emit('spanStart', childSpan);\n  // If it has an endTimestamp, it's already ended\n  if (spanArguments.endTimestamp) {\n    client.emit('spanEnd', childSpan);\n    client.emit('afterSpanEnd', childSpan);\n  }\n\n  return childSpan;\n}\n\nfunction getParentSpan(scope: Scope, customParentSpan: Span | null | undefined): SentrySpan | undefined {\n  // always use the passed in span directly\n  if (customParentSpan) {\n    return customParentSpan as SentrySpan;\n  }\n\n  // This is different from `undefined` as it means the user explicitly wants no parent span\n  if (customParentSpan === null) {\n    return undefined;\n  }\n\n  const span = _getSpanForScope(scope) as SentrySpan | undefined;\n\n  if (!span) {\n    return undefined;\n  }\n\n  const client = getClient();\n  const options: Partial<ClientOptions> = client ? client.getOptions() : {};\n  if (options.parentSpanIsAlwaysRootSpan) {\n    return getRootSpan(span) as SentrySpan;\n  }\n\n  return span;\n}\n\nfunction getActiveSpanWrapper<T>(parentSpan: Span | undefined | null): (callback: () => T) => T {\n  return parentSpan !== undefined\n    ? (callback: () => T) => {\n        return withActiveSpan(parentSpan, callback);\n      }\n    : (callback: () => T) => callback();\n}\n\n/* Checks if `ignoreSpans` applies (extracted for bundle size)*/\nfunction _shouldIgnoreStreamedSpan(client: Client | undefined, spanArguments: SentrySpanArguments): boolean {\n  const ignoreSpans = client?.getOptions().ignoreSpans;\n\n  if (!client || !hasSpanStreamingEnabled(client) || !ignoreSpans?.length) {\n    return false;\n  }\n\n  return shouldIgnoreSpan(\n    {\n      description: spanArguments.name || '',\n      op: spanArguments.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_OP] || spanArguments.op,\n      attributes: spanArguments.attributes,\n    },\n    ignoreSpans,\n  );\n}\n\n/**\n * Whether a span is an ignored (`ignoreSpans`) placeholder. Such a span must not be set as the active\n * span when it has a parent, so its children attach to that parent and get re-parented rather than\n * dropped with it. Shared with the OTel-based provider so both span pipelines apply the same rule.\n */\nexport function spanIsIgnored(span: Span): span is SentryNonRecordingSpan {\n  return spanIsNonRecordingSpan(span) && span.dropReason === 'ignored';\n}\n", "type DebouncedCallback = {\n  (): void | unknown;\n  flush: () => void | unknown;\n  cancel: () => void;\n};\ntype CallbackFunction = () => unknown;\ntype DebounceOptions = {\n  /** The max. time in ms to wait for the callback to be invoked. */\n  maxWait?: number;\n  /** This can be overwritten to use a different setTimeout implementation, e.g. to avoid triggering change detection in Angular  */\n  setTimeoutImpl?: typeof setTimeout;\n};\n\n/**\n * Heavily simplified debounce function based on lodash.debounce.\n *\n * This function takes a callback function (@param fun) and delays its invocation\n * by @param wait milliseconds. Optionally, a maxWait can be specified in @param options,\n * which ensures that the callback is invoked at least once after the specified max. wait time.\n *\n * @param func the function whose invocation is to be debounced\n * @param wait the minimum time until the function is invoked after it was called once\n * @param options the options object, which can contain the `maxWait` property\n *\n * @returns the debounced version of the function, which needs to be called at least once to start the\n *          debouncing process. Subsequent calls will reset the debouncing timer and, in case @paramfunc\n *          was already invoked in the meantime, return @param func's return value.\n *          The debounced function has two additional properties:\n *          - `flush`: Invokes the debounced function immediately and returns its return value\n *          - `cancel`: Cancels the debouncing process and resets the debouncing timer\n */\nexport function debounce(func: CallbackFunction, wait: number, options?: DebounceOptions): DebouncedCallback {\n  let callbackReturnValue: unknown;\n\n  let timerId: ReturnType<typeof setTimeout> | undefined;\n  let maxTimerId: ReturnType<typeof setTimeout> | undefined;\n\n  const maxWait = options?.maxWait ? Math.max(options.maxWait, wait) : 0;\n  const setTimeoutImpl = options?.setTimeoutImpl || setTimeout;\n\n  function invokeFunc(): unknown {\n    cancelTimers();\n    callbackReturnValue = func();\n    return callbackReturnValue;\n  }\n\n  function cancelTimers(): void {\n    timerId !== undefined && clearTimeout(timerId);\n    maxTimerId !== undefined && clearTimeout(maxTimerId);\n    timerId = maxTimerId = undefined;\n  }\n\n  function flush(): unknown {\n    if (timerId !== undefined || maxTimerId !== undefined) {\n      return invokeFunc();\n    }\n    return callbackReturnValue;\n  }\n\n  function debounced(): unknown {\n    if (timerId) {\n      clearTimeout(timerId);\n    }\n    timerId = setTimeoutImpl(invokeFunc, wait);\n\n    if (maxWait && maxTimerId === undefined) {\n      maxTimerId = setTimeoutImpl(invokeFunc, maxWait);\n    }\n\n    return callbackReturnValue;\n  }\n\n  debounced.cancel = cancelTimers;\n  debounced.flush = flush;\n  return debounced;\n}\n", "import type { Client } from '../client';\nimport type { Scope } from '../scope';\nimport type { Span } from '../types/span';\nimport { debounce } from '../utils/debounce';\nimport { getSegmentSpanCaptureStrategy, setSegmentSpanCaptureStrategy } from './segmentSpanCaptureStrategy';\nimport type { SegmentSpanConverter } from './segmentSpanCaptureStrategy';\n\n// Spans already sent in a transaction, so a child ending after its segment can be emitted as its own\n// orphan transaction instead of being dropped or sent twice.\nconst CAPTURED_SPANS = new WeakSet<Span>();\nconst isSpanAlreadyCaptured = (span: Span): boolean => CAPTURED_SPANS.has(span);\nconst markSpanCaptured = (span: Span): void => {\n  CAPTURED_SPANS.add(span);\n};\n\n// One debounced queue per client, drained on the client's `flush`/`close`. Mirrors the OpenTelemetry\n// span exporter, which holds one such buffer per instance, and the debounce window matches it. The\n// capturing client is resolved from the span's captured scope and bound when the span ends, not\n// re-resolved at drain time, so a deferred transaction lands on the client that created the span even if\n// the current client (or the captured scope's own client) is reassigned before the debounce fires.\nconst CLIENT_QUEUES = new WeakMap<Client, (capture: () => void) => void>();\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Enable deferred segment-span transaction capture for a client: create its debounced queue and\n * register the strategy (idempotent).\n *\n * `SentrySpan` otherwise assembles the transaction synchronously the instant a segment span ends, which\n * drops children whose async instrumentation closes them later (a diagnostics-channel `asyncEnd`\n * callback in the same tick, or engine spans replayed on a later tick). The debounced snapshot delays\n * capture just enough for those later span ends to land first; a child that still ends after it is\n * emitted as its own orphan transaction. Pending captures drain on the client's `flush` hook, so\n * `Sentry.flush()` / `client.close()` cannot resolve before they run.\n */\nexport function _INTERNAL_setDeferSegmentSpanCapture(client: Client): void {\n  if (!getSegmentSpanCaptureStrategy()) {\n    setSegmentSpanCaptureStrategy(deferredSegmentSpanCaptureStrategy);\n  }\n  if (CLIENT_QUEUES.has(client)) {\n    return;\n  }\n\n  const pendingCaptures = new Set<() => void>();\n  const debouncedDrain = debounce(\n    () => {\n      const captures = [...pendingCaptures];\n      pendingCaptures.clear();\n      for (const capture of captures) {\n        capture();\n      }\n    },\n    1,\n    { maxWait: 100 },\n  );\n\n  client.on('flush', () => {\n    debouncedDrain.flush();\n  });\n\n  CLIENT_QUEUES.set(client, capture => {\n    pendingCaptures.add(capture);\n    debouncedDrain();\n  });\n}\n\nconst deferredSegmentSpanCaptureStrategy = {\n  onSegmentSpanEnded(convert: SegmentSpanConverter, scope: Scope): void {\n    const client = scope.getClient();\n    const enqueue = client && CLIENT_QUEUES.get(client);\n    if (!enqueue) {\n      // The capturing client didn't enable deferral: capture synchronously.\n      const transactionEvent = convert();\n      if (transactionEvent) {\n        client?.captureEvent(transactionEvent);\n      }\n      return;\n    }\n\n    enqueue(() => {\n      const transactionEvent = convert({ isSpanAlreadyCaptured, onSpanCaptured: markSpanCaptured });\n      if (transactionEvent) {\n        client.captureEvent(transactionEvent);\n      }\n    });\n  },\n\n  onChildSpanEnded(span: Span, rootSpan: Span, convert: SegmentSpanConverter, scope: Scope): void {\n    // Only a late child of an already-captured segment is an orphan. Inert under span streaming, where\n    // `CAPTURED_SPANS` is never populated.\n    if (CAPTURED_SPANS.has(span) || !CAPTURED_SPANS.has(rootSpan)) {\n      return;\n    }\n\n    const client = scope.getClient();\n    const enqueue = client && CLIENT_QUEUES.get(client);\n\n    const captureOrphan = (): void => {\n      const transactionEvent = convert({ isSpanAlreadyCaptured, onSpanCaptured: markSpanCaptured });\n      if (transactionEvent?.contexts?.trace?.data) {\n        // Tag orphans so they're distinguishable downstream (mirrors the OTel span exporter).\n        transactionEvent.contexts.trace.data['sentry.parent_span_already_sent'] = true;\n      }\n      if (transactionEvent) {\n        client?.captureEvent(transactionEvent);\n      }\n    };\n\n    // Defer when the capturing client batches; otherwise emit now so the orphan isn't dropped.\n    if (enqueue) {\n      enqueue(captureOrphan);\n    } else {\n      captureOrphan();\n    }\n  },\n};\n", "import { getCurrentScope, withScope } from '../currentScopes';\nimport type { Scope } from '../scope';\n\ntype BoundListener = (...args: unknown[]) => unknown;\n\n/**\n * Per-event map from a user-provided listener to its single scope-bound wrapper. We reuse one stable\n * wrapper per listener (rather than minting a new one per registration) and let the underlying\n * emitter/target handle repeat registrations:\n * - Node's `EventEmitter` allows duplicates and counts them, so registering the same wrapper N times\n *   fires N times and `removeListener` removes one instance per call — no orphaned wrappers.\n * - the DOM `EventTarget` dedupes by `(type, callback, capture)`, so reusing the wrapper preserves\n *   that idempotency; a fresh wrapper per call would defeat it and fire the listener repeatedly.\n */\ntype ListenerPatchMap = Map<string, WeakMap<BoundListener, BoundListener>>;\n\n// We patch both Node.js `EventEmitter` registration methods (`on`, `addListener`, ...) and the DOM\n// `EventTarget.addEventListener`, so this works for Node emitters and browser-native event targets.\n\n/** Listener-registration methods we patch so listeners inherit the bound scope. */\nconst ADD_LISTENER_METHODS = [\n  'addListener',\n  'on',\n  'once',\n  'prependListener',\n  'prependOnceListener',\n  'addEventListener',\n] as const;\n/** Listener-removal methods we patch so removals find the scope-bound wrapper. */\nconst REMOVE_LISTENER_METHODS = ['removeListener', 'off', 'removeEventListener'] as const;\n\n/** Symbol under which the patch map is stashed on a bound emitter. */\nconst SCOPE_BOUND_LISTENERS = Symbol('SentryScopeBoundListeners');\n\n/**\n * Minimal structural type for a Node.js-style `EventEmitter` or DOM `EventTarget`. We intentionally\n * avoid importing `node:events` so this stays usable in non-Node environments — objects without any\n * of these methods simply pass through untouched.\n */\ntype EventEmitterLike = Record<string, unknown>;\n\n// Tracks the scope-bound wrapper currently being registered. Node's `once`/`prependOnceListener`\n// synchronously re-enter `on`/`prependListener`, passing an internal \"once wrapper\" whose `.listener`\n// is our wrapper; that re-entry must not be wrapped again. We scope the guard to that exact wrapper\n// rather than using a blanket flag for the whole registration, so unrelated listeners added in the same\n// synchronous window — e.g. from a Node `newListener` handler, or on another bound emitter — are still\n// wrapped and keep their scope. Binding is synchronous, so a module-level value (with save/restore for\n// nesting) is safe here.\nlet registeringWrapper: BoundListener | undefined;\n\n// True when `listener` is the wrapper we're mid-registering, or a Node once-wrapper around it (Node sets\n// `.listener` on the once-wrapper to the function we passed). These are the only re-entrant adds to skip.\nfunction isReentrantWrapperRegistration(listener: BoundListener): boolean {\n  return (\n    registeringWrapper !== undefined &&\n    (listener === registeringWrapper || (listener as { listener?: unknown }).listener === registeringWrapper)\n  );\n}\n\n/**\n * Binds a scope to the given event emitter, so that any listener added to it runs with that scope\n * (and therefore the active span) active — even if the listener fires later, in a different async\n * context.\n *\n * By default the currently active scope is bound, captured at the time this function is called.\n * Pass an explicit `scope` to bind a different one.\n *\n * This is useful when instrumenting APIs that hand back an event emitter (e.g. a streamed database\n * query) whose `'data'` / `'error'` / `'end'` listeners would otherwise lose the trace context.\n *\n * Works with both Node.js `EventEmitter`s (`on`, `addListener`, ...) and DOM `EventTarget`s\n * (`addEventListener`). Objects exposing none of these methods are returned untouched.\n *\n * The isolation scope is intentionally not captured — it is carried along by the active async\n * context. This mirrors the event-emitter behavior of OpenTelemetry's `ContextManager.bind`.\n */\nexport function bindScopeToEmitter<T extends object>(emitter: T, scope: Scope = getCurrentScope()): T {\n  const ee = emitter as EventEmitterLike;\n\n  // Already bound -> nothing to do.\n  if (getPatchMap(ee)) {\n    return emitter;\n  }\n\n  createPatchMap(ee);\n\n  for (const methodName of ADD_LISTENER_METHODS) {\n    if (typeof ee[methodName] !== 'function') {\n      continue;\n    }\n    ee[methodName] = patchAddListener(ee, ee[methodName] as BoundListener, scope);\n  }\n\n  for (const methodName of REMOVE_LISTENER_METHODS) {\n    if (typeof ee[methodName] !== 'function') {\n      continue;\n    }\n    ee[methodName] = patchRemoveListener(ee, ee[methodName] as BoundListener);\n  }\n\n  if (typeof ee.removeAllListeners === 'function') {\n    ee.removeAllListeners = patchRemoveAllListeners(ee, ee.removeAllListeners as BoundListener);\n  }\n\n  return emitter;\n}\n\n/** Wraps a listener so it runs with the given scope active. */\nfunction bindListenerToScope(listener: BoundListener, scope: Scope): BoundListener {\n  return function (this: unknown, ...args: unknown[]) {\n    return withScope(scope, () => listener.apply(this, args));\n  };\n}\n\nfunction isBoundListener(listener: unknown): listener is BoundListener {\n  return typeof listener === 'function';\n}\n\nfunction patchAddListener(ee: EventEmitterLike, original: BoundListener, scope: Scope): BoundListener {\n  return function (this: unknown, ...args: unknown[]) {\n    const event = args[0] as string;\n    const listener = args[1];\n    // Extra args (e.g. the `options` argument of `addEventListener`) must be forwarded verbatim.\n    const rest = args.slice(2);\n\n    // Pass through what we must not wrap: non-function listeners (e.g. `EventListener` objects passed to\n    // `addEventListener`) and the re-entrant once-wrapper registration. Anything else is wrapped, even\n    // when added synchronously mid-registration.\n    if (!isBoundListener(listener) || isReentrantWrapperRegistration(listener)) {\n      return original.apply(this, args);\n    }\n\n    const map = getPatchMap(ee) || createPatchMap(ee);\n    let listeners = map.get(event);\n    if (!listeners) {\n      listeners = new WeakMap();\n      map.set(event, listeners);\n    }\n\n    // Reuse one stable wrapper per listener so repeat registrations are handled correctly by the\n    // underlying emitter/target (Node counts duplicates; the DOM dedupes by `(callback, capture)`).\n    let boundListener = listeners.get(listener);\n    if (!boundListener) {\n      boundListener = bindListenerToScope(listener, scope);\n      listeners.set(listener, boundListener);\n    }\n\n    const previous = registeringWrapper;\n    registeringWrapper = boundListener;\n    try {\n      return original.call(this, event, boundListener, ...rest);\n    } finally {\n      registeringWrapper = previous;\n    }\n  };\n}\n\n// Unlike `patchRemoveAllListeners`, this intentionally leaves the map entry in place: Node counts\n// duplicate registrations, so the same wrapper may still be registered after removing one instance,\n// and later `removeListener` calls need the mapping to find it. The entry is in a `WeakMap` keyed by\n// the user listener, so it is GC'd once the user drops their reference — no manual cleanup needed.\nfunction patchRemoveListener(ee: EventEmitterLike, original: BoundListener): BoundListener {\n  return function (this: unknown, ...args: unknown[]) {\n    const event = args[0] as string;\n    const listener = args[1];\n    const rest = args.slice(2);\n\n    const boundListener = isBoundListener(listener) ? getPatchMap(ee)?.get(event)?.get(listener) : undefined;\n    if (!boundListener) {\n      return original.apply(this, args);\n    }\n    // Pass the same stable wrapper and forward the caller's extra args (e.g. the `capture` option of\n    // `removeEventListener`) unchanged, so the emitter/target matches the right registration itself.\n    return original.call(this, event, boundListener, ...rest);\n  };\n}\n\n// Safe to drop map entries here (unlike `patchRemoveListener`): this removes *every* listener for the\n// event at once, so no registration referencing those wrappers remains. It also reclaims keys from the\n// strong outer `Map` (keyed by event-name strings), which would otherwise accumulate indefinitely.\nfunction patchRemoveAllListeners(ee: EventEmitterLike, original: BoundListener): BoundListener {\n  return function (this: unknown, ...args: unknown[]) {\n    const map = getPatchMap(ee);\n    if (map) {\n      if (args.length === 0) {\n        // `removeAllListeners()` with no event clears everything -> reset the map.\n        createPatchMap(ee);\n      } else {\n        const event = args[0] as string;\n        map.delete(event);\n      }\n    }\n    return original.apply(this, args);\n  };\n}\n\nfunction createPatchMap(ee: EventEmitterLike): ListenerPatchMap {\n  const map: ListenerPatchMap = new Map();\n  (ee as Record<symbol, ListenerPatchMap>)[SCOPE_BOUND_LISTENERS] = map;\n  return map;\n}\n\nfunction getPatchMap(ee: EventEmitterLike): ListenerPatchMap | undefined {\n  return (ee as Record<symbol, ListenerPatchMap | undefined>)[SCOPE_BOUND_LISTENERS];\n}\n", "import { getGlobalScope } from '../currentScopes';\nimport type { Scope, ScopeData } from '../scope';\nimport { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext';\nimport type { Breadcrumb } from '../types/breadcrumb';\nimport type { Event } from '../types/event';\nimport type { Span } from '../types/span';\nimport { merge } from './merge';\nimport { getRootSpan, spanToJSON, spanToTraceContext } from './spanUtils';\n\n/**\n * Applies data from the scope to the event and runs all event processors on it.\n */\nexport function applyScopeDataToEvent(event: Event, data: ScopeData): void {\n  const { fingerprint, span, breadcrumbs, sdkProcessingMetadata } = data;\n\n  // Apply general data\n  applyDataToEvent(event, data);\n\n  // We want to set the trace context for normal events only if there isn't already\n  // a trace context on the event. There is a product feature in place where we link\n  // errors with transaction and it relies on that.\n  if (span) {\n    applySpanToEvent(event, span);\n  }\n\n  applyFingerprintToEvent(event, fingerprint);\n  applyBreadcrumbsToEvent(event, breadcrumbs);\n  applySdkMetadataToEvent(event, sdkProcessingMetadata);\n}\n\n/** Merge data of two scopes together. */\nexport function mergeScopeData(data: ScopeData, mergeData: ScopeData): void {\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    span,\n  } = mergeData;\n\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\n  data.sdkProcessingMetadata = merge(data.sdkProcessingMetadata, sdkProcessingMetadata, 2);\n\n  if (level) {\n    data.level = level;\n  }\n\n  if (transactionName) {\n    data.transactionName = transactionName;\n  }\n\n  if (span) {\n    data.span = span;\n  }\n\n  if (breadcrumbs.length) {\n    data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];\n  }\n\n  if (fingerprint.length) {\n    data.fingerprint = [...data.fingerprint, ...fingerprint];\n  }\n\n  if (eventProcessors.length) {\n    data.eventProcessors = [...data.eventProcessors, ...eventProcessors];\n  }\n\n  if (attachments.length) {\n    data.attachments = [...data.attachments, ...attachments];\n  }\n\n  data.propagationContext = { ...data.propagationContext, ...propagationContext };\n}\n\n/**\n * Merges certain scope data. Undefined values will overwrite any existing values.\n * Exported only for tests.\n */\nexport function mergeAndOverwriteScopeData<\n  Prop extends 'extra' | 'tags' | 'attributes' | 'user' | 'contexts' | 'sdkProcessingMetadata',\n  Data extends ScopeData,\n>(data: Data, prop: Prop, mergeVal: Data[Prop]): void {\n  data[prop] = merge(data[prop], mergeVal, 1);\n}\n\n/** Exported only for tests */\nexport function mergeArray<Prop extends 'breadcrumbs' | 'fingerprint'>(\n  event: Event,\n  prop: Prop,\n  mergeVal: ScopeData[Prop],\n): void {\n  const prevVal = event[prop];\n  // If we are not merging any new values,\n  // we only need to proceed if there was an empty array before (as we want to replace it with undefined)\n  if (!mergeVal.length && (!prevVal || prevVal.length)) {\n    return;\n  }\n\n  const merged = [...(prevVal || []), ...mergeVal] as ScopeData[Prop];\n  event[prop] = merged.length ? merged : undefined;\n}\n\n/**\n * Get the scope data for the current scope after merging with the\n * global scope and isolation scope.\n *\n * @param currentScope - The current scope.\n * @returns The scope data.\n */\nexport function getCombinedScopeData(isolationScope: Scope | undefined, currentScope: Scope | undefined): ScopeData {\n  const scopeData = getGlobalScope().getScopeData();\n  isolationScope && mergeScopeData(scopeData, isolationScope.getScopeData());\n  currentScope && mergeScopeData(scopeData, currentScope.getScopeData());\n  return scopeData;\n}\n\nfunction applyDataToEvent(event: Event, data: ScopeData): void {\n  const { extra, tags, user, contexts, level, transactionName } = data;\n\n  if (Object.keys(extra).length) {\n    event.extra = { ...extra, ...event.extra };\n  }\n\n  if (Object.keys(tags).length) {\n    event.tags = { ...tags, ...event.tags };\n  }\n\n  if (Object.keys(user).length) {\n    event.user = { ...user, ...event.user };\n  }\n\n  if (Object.keys(contexts).length) {\n    event.contexts = { ...contexts, ...event.contexts };\n  }\n\n  if (level) {\n    event.level = level;\n  }\n\n  // transaction events get their `transaction` from the root span name\n  if (transactionName && event.type !== 'transaction') {\n    event.transaction = transactionName;\n  }\n}\n\nfunction applyBreadcrumbsToEvent(event: Event, breadcrumbs: Breadcrumb[]): void {\n  const mergedBreadcrumbs = [...(event.breadcrumbs || []), ...breadcrumbs];\n  event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined;\n}\n\nfunction applySdkMetadataToEvent(event: Event, sdkProcessingMetadata: ScopeData['sdkProcessingMetadata']): void {\n  event.sdkProcessingMetadata = {\n    ...event.sdkProcessingMetadata,\n    ...sdkProcessingMetadata,\n  };\n}\n\nfunction applySpanToEvent(event: Event, span: Span): void {\n  event.contexts = {\n    trace: spanToTraceContext(span),\n    ...event.contexts,\n  };\n\n  event.sdkProcessingMetadata = {\n    dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),\n    ...event.sdkProcessingMetadata,\n  };\n\n  const rootSpan = getRootSpan(span);\n  const transactionName = spanToJSON(rootSpan).description;\n  if (transactionName && !event.transaction && event.type === 'transaction') {\n    event.transaction = transactionName;\n  }\n}\n\n/**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\nfunction applyFingerprintToEvent(event: Event, fingerprint: ScopeData['fingerprint'] | undefined): void {\n  // Make sure it's an array first and we actually have something in place\n  event.fingerprint = event.fingerprint\n    ? Array.isArray(event.fingerprint)\n      ? event.fingerprint\n      : [event.fingerprint]\n    : [];\n\n  // If we have something on the scope, then merge it with event\n  if (fingerprint) {\n    event.fingerprint = event.fingerprint.concat(fingerprint);\n  }\n\n  // If we have no data at all, remove empty array default\n  if (!event.fingerprint.length) {\n    delete event.fingerprint;\n  }\n}\n", "import type { Contexts } from '../../types/context';\n\n/**\n * Convert known scope contexts set by SDK integrations to span attributes.\n * Only maps context keys that are relevant to browser SDKs.\n * Server-only contexts (aws, gcp, missing_instrumentation, trpc) are handled\n * by processSegmentSpan hooks in their respective packages.\n */\nexport function scopeContextsToSpanAttributes(contexts: Contexts): Record<string, unknown> {\n  const attrs: Record<string, unknown> = {};\n\n  const { response, profile, cloud_resource, culture, state } = contexts;\n\n  if (response) {\n    if (response.status_code != null) {\n      attrs['http.response.status_code'] = response.status_code;\n    }\n    if (response.body_size != null) {\n      attrs['http.response.body.size'] = response.body_size;\n    }\n  }\n\n  if (profile) {\n    if (profile.profile_id) {\n      attrs['sentry.profile_id'] = profile.profile_id;\n    }\n    if (profile.profiler_id) {\n      attrs['sentry.profiler_id'] = profile.profiler_id;\n    }\n  }\n\n  // CloudResourceContext keys are already in dot-notation (OTel resource conventions)\n  if (cloud_resource) {\n    for (const [key, value] of Object.entries(cloud_resource)) {\n      if (value != null) {\n        attrs[key] = value;\n      }\n    }\n  }\n\n  if (culture) {\n    if (culture.locale) {\n      attrs['culture.locale'] = culture.locale;\n    }\n    if (culture.timezone) {\n      attrs['culture.timezone'] = culture.timezone;\n    }\n  }\n\n  if (state?.state && typeof state.state.type === 'string') {\n    attrs['state.type'] = state.state.type;\n  }\n\n  // Framework version contexts\n  const angular = contexts['angular'];\n  if (angular) {\n    const version = angular['version'];\n    if (typeof version === 'string' || typeof version === 'number') {\n      attrs['angular.version'] = version;\n    }\n  }\n\n  const react = contexts['react'];\n  if (react) {\n    const version = react['version'];\n    if (typeof version === 'string' || typeof version === 'number') {\n      attrs['react.version'] = version;\n    }\n  }\n\n  return attrs;\n}\n", "// This is an auto-generated file. Do not edit!\n\n// Path: model/attributes/ai/ai__citations.json\n\n/**\n * References or sources cited by the AI model in its response. `ai.citations`\n *\n * Attribute Value Type: `Array<string>` {@link AI_CITATIONS_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated\n * @example [\"Citation 1\",\"Citation 2\"]\n */\nexport const AI_CITATIONS = 'ai.citations';\n\n/**\n * Type for {@link AI_CITATIONS} ai.citations\n */\nexport type AI_CITATIONS_TYPE = Array<string>;\n\n// Path: model/attributes/ai/ai__completion_tokens__used.json\n\n/**\n * The number of tokens used to respond to the message. `ai.completion_tokens.used`\n *\n * Attribute Value Type: `number` {@link AI_COMPLETION_TOKENS_USED_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_USAGE_OUTPUT_TOKENS} `gen_ai.usage.output_tokens`, {@link GEN_AI_USAGE_COMPLETION_TOKENS} `gen_ai.usage.completion_tokens`\n *\n * @deprecated Use {@link GEN_AI_USAGE_OUTPUT_TOKENS} (gen_ai.usage.output_tokens) instead\n * @example 10\n */\nexport const AI_COMPLETION_TOKENS_USED = 'ai.completion_tokens.used';\n\n/**\n * Type for {@link AI_COMPLETION_TOKENS_USED} ai.completion_tokens.used\n */\nexport type AI_COMPLETION_TOKENS_USED_TYPE = number;\n\n// Path: model/attributes/ai/ai__documents.json\n\n/**\n * Documents or content chunks used as context for the AI model. `ai.documents`\n *\n * Attribute Value Type: `Array<string>` {@link AI_DOCUMENTS_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated\n * @example [\"document1.txt\",\"document2.pdf\"]\n */\nexport const AI_DOCUMENTS = 'ai.documents';\n\n/**\n * Type for {@link AI_DOCUMENTS} ai.documents\n */\nexport type AI_DOCUMENTS_TYPE = Array<string>;\n\n// Path: model/attributes/ai/ai__finish_reason.json\n\n/**\n * The reason why the model stopped generating. `ai.finish_reason`\n *\n * Attribute Value Type: `string` {@link AI_FINISH_REASON_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_RESPONSE_FINISH_REASONS} `gen_ai.response.finish_reasons`\n *\n * @deprecated Use {@link GEN_AI_RESPONSE_FINISH_REASONS} (gen_ai.response.finish_reasons) instead\n * @example \"COMPLETE\"\n */\nexport const AI_FINISH_REASON = 'ai.finish_reason';\n\n/**\n * Type for {@link AI_FINISH_REASON} ai.finish_reason\n */\nexport type AI_FINISH_REASON_TYPE = string;\n\n// Path: model/attributes/ai/ai__frequency_penalty.json\n\n/**\n * 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. `ai.frequency_penalty`\n *\n * Attribute Value Type: `number` {@link AI_FREQUENCY_PENALTY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_REQUEST_FREQUENCY_PENALTY} `gen_ai.request.frequency_penalty`\n *\n * @deprecated Use {@link GEN_AI_REQUEST_FREQUENCY_PENALTY} (gen_ai.request.frequency_penalty) instead\n * @example 0.5\n */\nexport const AI_FREQUENCY_PENALTY = 'ai.frequency_penalty';\n\n/**\n * Type for {@link AI_FREQUENCY_PENALTY} ai.frequency_penalty\n */\nexport type AI_FREQUENCY_PENALTY_TYPE = number;\n\n// Path: model/attributes/ai/ai__function_call.json\n\n/**\n * For an AI model call, the function that was called. This is deprecated for OpenAI, and replaced by tool_calls `ai.function_call`\n *\n * Attribute Value Type: `string` {@link AI_FUNCTION_CALL_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_TOOL_NAME} `gen_ai.tool.name`, {@link MCP_TOOL_NAME} `mcp.tool.name`\n *\n * @deprecated Use {@link GEN_AI_TOOL_NAME} (gen_ai.tool.name) instead\n * @example \"function_name\"\n */\nexport const AI_FUNCTION_CALL = 'ai.function_call';\n\n/**\n * Type for {@link AI_FUNCTION_CALL} ai.function_call\n */\nexport type AI_FUNCTION_CALL_TYPE = string;\n\n// Path: model/attributes/ai/ai__generation_id.json\n\n/**\n * Unique identifier for the completion. `ai.generation_id`\n *\n * Attribute Value Type: `string` {@link AI_GENERATION_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_RESPONSE_ID} `gen_ai.response.id`\n *\n * @deprecated Use {@link GEN_AI_RESPONSE_ID} (gen_ai.response.id) instead\n * @example \"gen_123abc\"\n */\nexport const AI_GENERATION_ID = 'ai.generation_id';\n\n/**\n * Type for {@link AI_GENERATION_ID} ai.generation_id\n */\nexport type AI_GENERATION_ID_TYPE = string;\n\n// Path: model/attributes/ai/ai__input_messages.json\n\n/**\n * The input messages sent to the model `ai.input_messages`\n *\n * Attribute Value Type: `string` {@link AI_INPUT_MESSAGES_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_REQUEST_MESSAGES} `gen_ai.request.messages`\n *\n * @deprecated Use {@link GEN_AI_INPUT_MESSAGES} (gen_ai.input.messages) instead\n * @example \"[{\\\"role\\\": \\\"user\\\", \\\"message\\\": \\\"hello\\\"}]\"\n */\nexport const AI_INPUT_MESSAGES = 'ai.input_messages';\n\n/**\n * Type for {@link AI_INPUT_MESSAGES} ai.input_messages\n */\nexport type AI_INPUT_MESSAGES_TYPE = string;\n\n// Path: model/attributes/ai/ai__is_search_required.json\n\n/**\n * Boolean indicating if the model needs to perform a search. `ai.is_search_required`\n *\n * Attribute Value Type: `boolean` {@link AI_IS_SEARCH_REQUIRED_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated\n * @example false\n */\nexport const AI_IS_SEARCH_REQUIRED = 'ai.is_search_required';\n\n/**\n * Type for {@link AI_IS_SEARCH_REQUIRED} ai.is_search_required\n */\nexport type AI_IS_SEARCH_REQUIRED_TYPE = boolean;\n\n// Path: model/attributes/ai/ai__metadata.json\n\n/**\n * Extra metadata passed to an AI pipeline step. `ai.metadata`\n *\n * Attribute Value Type: `string` {@link AI_METADATA_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated\n * @example \"{\\\"user_id\\\": 123, \\\"session_id\\\": \\\"abc123\\\"}\"\n */\nexport const AI_METADATA = 'ai.metadata';\n\n/**\n * Type for {@link AI_METADATA} ai.metadata\n */\nexport type AI_METADATA_TYPE = string;\n\n// Path: model/attributes/ai/ai__model_id.json\n\n/**\n * The vendor-specific ID of the model used. `ai.model_id`\n *\n * Attribute Value Type: `string` {@link AI_MODEL_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_RESPONSE_MODEL} `gen_ai.response.model`\n *\n * @deprecated Use {@link GEN_AI_RESPONSE_MODEL} (gen_ai.response.model) instead\n * @example \"gpt-4\"\n */\nexport const AI_MODEL_ID = 'ai.model_id';\n\n/**\n * Type for {@link AI_MODEL_ID} ai.model_id\n */\nexport type AI_MODEL_ID_TYPE = string;\n\n// Path: model/attributes/ai/ai__model__provider.json\n\n/**\n * The provider of the model. `ai.model.provider`\n *\n * Attribute Value Type: `string` {@link AI_MODEL_PROVIDER_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_PROVIDER_NAME} `gen_ai.provider.name`, {@link GEN_AI_SYSTEM} `gen_ai.system`\n *\n * @deprecated Use {@link GEN_AI_PROVIDER_NAME} (gen_ai.provider.name) instead\n * @example \"openai\"\n */\nexport const AI_MODEL_PROVIDER = 'ai.model.provider';\n\n/**\n * Type for {@link AI_MODEL_PROVIDER} ai.model.provider\n */\nexport type AI_MODEL_PROVIDER_TYPE = string;\n\n// Path: model/attributes/ai/ai__pipeline__name.json\n\n/**\n * The name of the AI pipeline. `ai.pipeline.name`\n *\n * Attribute Value Type: `string` {@link AI_PIPELINE_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_PIPELINE_NAME} `gen_ai.pipeline.name`\n *\n * @deprecated Use {@link GEN_AI_PIPELINE_NAME} (gen_ai.pipeline.name) instead\n * @example \"Autofix Pipeline\"\n */\nexport const AI_PIPELINE_NAME = 'ai.pipeline.name';\n\n/**\n * Type for {@link AI_PIPELINE_NAME} ai.pipeline.name\n */\nexport type AI_PIPELINE_NAME_TYPE = string;\n\n// Path: model/attributes/ai/ai__preamble.json\n\n/**\n * 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. `ai.preamble`\n *\n * Attribute Value Type: `string` {@link AI_PREAMBLE_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_SYSTEM_INSTRUCTIONS} `gen_ai.system_instructions`\n *\n * @deprecated Use {@link GEN_AI_SYSTEM_INSTRUCTIONS} (gen_ai.system_instructions) instead\n * @example \"You are now a clown.\"\n */\nexport const AI_PREAMBLE = 'ai.preamble';\n\n/**\n * Type for {@link AI_PREAMBLE} ai.preamble\n */\nexport type AI_PREAMBLE_TYPE = string;\n\n// Path: model/attributes/ai/ai__presence_penalty.json\n\n/**\n * 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. `ai.presence_penalty`\n *\n * Attribute Value Type: `number` {@link AI_PRESENCE_PENALTY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_REQUEST_PRESENCE_PENALTY} `gen_ai.request.presence_penalty`\n *\n * @deprecated Use {@link GEN_AI_REQUEST_PRESENCE_PENALTY} (gen_ai.request.presence_penalty) instead\n * @example 0.5\n */\nexport const AI_PRESENCE_PENALTY = 'ai.presence_penalty';\n\n/**\n * Type for {@link AI_PRESENCE_PENALTY} ai.presence_penalty\n */\nexport type AI_PRESENCE_PENALTY_TYPE = number;\n\n// Path: model/attributes/ai/ai__prompt_tokens__used.json\n\n/**\n * The number of tokens used to process just the prompt. `ai.prompt_tokens.used`\n *\n * Attribute Value Type: `number` {@link AI_PROMPT_TOKENS_USED_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_USAGE_PROMPT_TOKENS} `gen_ai.usage.prompt_tokens`, {@link GEN_AI_USAGE_INPUT_TOKENS} `gen_ai.usage.input_tokens`\n *\n * @deprecated Use {@link GEN_AI_USAGE_INPUT_TOKENS} (gen_ai.usage.input_tokens) instead\n * @example 20\n */\nexport const AI_PROMPT_TOKENS_USED = 'ai.prompt_tokens.used';\n\n/**\n * Type for {@link AI_PROMPT_TOKENS_USED} ai.prompt_tokens.used\n */\nexport type AI_PROMPT_TOKENS_USED_TYPE = number;\n\n// Path: model/attributes/ai/ai__raw_prompting.json\n\n/**\n * When enabled, the user’s prompt will be sent to the model without any pre-processing. `ai.raw_prompting`\n *\n * Attribute Value Type: `boolean` {@link AI_RAW_PROMPTING_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated\n * @example true\n */\nexport const AI_RAW_PROMPTING = 'ai.raw_prompting';\n\n/**\n * Type for {@link AI_RAW_PROMPTING} ai.raw_prompting\n */\nexport type AI_RAW_PROMPTING_TYPE = boolean;\n\n// Path: model/attributes/ai/ai__responses.json\n\n/**\n * The response messages sent back by the AI model. `ai.responses`\n *\n * Attribute Value Type: `Array<string>` {@link AI_RESPONSES_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated Use {@link GEN_AI_OUTPUT_MESSAGES} (gen_ai.output.messages) instead\n * @example [\"hello\",\"world\"]\n */\nexport const AI_RESPONSES = 'ai.responses';\n\n/**\n * Type for {@link AI_RESPONSES} ai.responses\n */\nexport type AI_RESPONSES_TYPE = Array<string>;\n\n// Path: model/attributes/ai/ai__response_format.json\n\n/**\n * For an AI model call, the format of the response `ai.response_format`\n *\n * Attribute Value Type: `string` {@link AI_RESPONSE_FORMAT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated\n * @example \"json_object\"\n */\nexport const AI_RESPONSE_FORMAT = 'ai.response_format';\n\n/**\n * Type for {@link AI_RESPONSE_FORMAT} ai.response_format\n */\nexport type AI_RESPONSE_FORMAT_TYPE = string;\n\n// Path: model/attributes/ai/ai__search_queries.json\n\n/**\n * Queries used to search for relevant context or documents. `ai.search_queries`\n *\n * Attribute Value Type: `Array<string>` {@link AI_SEARCH_QUERIES_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated\n * @example [\"climate change effects\",\"renewable energy\"]\n */\nexport const AI_SEARCH_QUERIES = 'ai.search_queries';\n\n/**\n * Type for {@link AI_SEARCH_QUERIES} ai.search_queries\n */\nexport type AI_SEARCH_QUERIES_TYPE = Array<string>;\n\n// Path: model/attributes/ai/ai__search_results.json\n\n/**\n * Results returned from search queries for context. `ai.search_results`\n *\n * Attribute Value Type: `Array<string>` {@link AI_SEARCH_RESULTS_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated\n * @example [\"search_result_1, search_result_2\"]\n */\nexport const AI_SEARCH_RESULTS = 'ai.search_results';\n\n/**\n * Type for {@link AI_SEARCH_RESULTS} ai.search_results\n */\nexport type AI_SEARCH_RESULTS_TYPE = Array<string>;\n\n// Path: model/attributes/ai/ai__seed.json\n\n/**\n * The seed, ideally models given the same seed and same other parameters will produce the exact same output. `ai.seed`\n *\n * Attribute Value Type: `string` {@link AI_SEED_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_REQUEST_SEED} `gen_ai.request.seed`\n *\n * @deprecated Use {@link GEN_AI_REQUEST_SEED} (gen_ai.request.seed) instead\n * @example \"1234567890\"\n */\nexport const AI_SEED = 'ai.seed';\n\n/**\n * Type for {@link AI_SEED} ai.seed\n */\nexport type AI_SEED_TYPE = string;\n\n// Path: model/attributes/ai/ai__streaming.json\n\n/**\n * Whether the request was streamed back. `ai.streaming`\n *\n * Attribute Value Type: `boolean` {@link AI_STREAMING_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_RESPONSE_STREAMING} `gen_ai.response.streaming`\n *\n * @deprecated Use {@link GEN_AI_RESPONSE_STREAMING} (gen_ai.response.streaming) instead\n * @example true\n */\nexport const AI_STREAMING = 'ai.streaming';\n\n/**\n * Type for {@link AI_STREAMING} ai.streaming\n */\nexport type AI_STREAMING_TYPE = boolean;\n\n// Path: model/attributes/ai/ai__tags.json\n\n/**\n * Tags that describe an AI pipeline step. `ai.tags`\n *\n * Attribute Value Type: `string` {@link AI_TAGS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated\n * @example \"{\\\"executed_function\\\": \\\"add_integers\\\"}\"\n */\nexport const AI_TAGS = 'ai.tags';\n\n/**\n * Type for {@link AI_TAGS} ai.tags\n */\nexport type AI_TAGS_TYPE = string;\n\n// Path: model/attributes/ai/ai__temperature.json\n\n/**\n * For an AI model call, the temperature parameter. Temperature essentially means how random the output will be. `ai.temperature`\n *\n * Attribute Value Type: `number` {@link AI_TEMPERATURE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_REQUEST_TEMPERATURE} `gen_ai.request.temperature`\n *\n * @deprecated Use {@link GEN_AI_REQUEST_TEMPERATURE} (gen_ai.request.temperature) instead\n * @example 0.1\n */\nexport const AI_TEMPERATURE = 'ai.temperature';\n\n/**\n * Type for {@link AI_TEMPERATURE} ai.temperature\n */\nexport type AI_TEMPERATURE_TYPE = number;\n\n// Path: model/attributes/ai/ai__texts.json\n\n/**\n * Raw text inputs provided to the model. `ai.texts`\n *\n * Attribute Value Type: `Array<string>` {@link AI_TEXTS_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_INPUT_MESSAGES} `gen_ai.input.messages`\n *\n * @deprecated Use {@link GEN_AI_INPUT_MESSAGES} (gen_ai.input.messages) instead\n * @example [\"Hello, how are you?\",\"What is the capital of France?\"]\n */\nexport const AI_TEXTS = 'ai.texts';\n\n/**\n * Type for {@link AI_TEXTS} ai.texts\n */\nexport type AI_TEXTS_TYPE = Array<string>;\n\n// Path: model/attributes/ai/ai__tools.json\n\n/**\n * For an AI model call, the functions that are available `ai.tools`\n *\n * Attribute Value Type: `Array<string>` {@link AI_TOOLS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated Use {@link GEN_AI_TOOL_DEFINITIONS} (gen_ai.tool.definitions) instead\n * @example [\"function_1\",\"function_2\"]\n */\nexport const AI_TOOLS = 'ai.tools';\n\n/**\n * Type for {@link AI_TOOLS} ai.tools\n */\nexport type AI_TOOLS_TYPE = Array<string>;\n\n// Path: model/attributes/ai/ai__tool_calls.json\n\n/**\n * For an AI model call, the tool calls that were made. `ai.tool_calls`\n *\n * Attribute Value Type: `Array<string>` {@link AI_TOOL_CALLS_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated Use {@link GEN_AI_OUTPUT_MESSAGES} (gen_ai.output.messages) instead\n * @example [\"tool_call_1\",\"tool_call_2\"]\n */\nexport const AI_TOOL_CALLS = 'ai.tool_calls';\n\n/**\n * Type for {@link AI_TOOL_CALLS} ai.tool_calls\n */\nexport type AI_TOOL_CALLS_TYPE = Array<string>;\n\n// Path: model/attributes/ai/ai__top_k.json\n\n/**\n * 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). `ai.top_k`\n *\n * Attribute Value Type: `number` {@link AI_TOP_K_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_REQUEST_TOP_K} `gen_ai.request.top_k`\n *\n * @deprecated Use {@link GEN_AI_REQUEST_TOP_K} (gen_ai.request.top_k) instead\n * @example 35\n */\nexport const AI_TOP_K = 'ai.top_k';\n\n/**\n * Type for {@link AI_TOP_K} ai.top_k\n */\nexport type AI_TOP_K_TYPE = number;\n\n// Path: model/attributes/ai/ai__top_p.json\n\n/**\n * 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). `ai.top_p`\n *\n * Attribute Value Type: `number` {@link AI_TOP_P_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_REQUEST_TOP_P} `gen_ai.request.top_p`\n *\n * @deprecated Use {@link GEN_AI_REQUEST_TOP_P} (gen_ai.request.top_p) instead\n * @example 0.7\n */\nexport const AI_TOP_P = 'ai.top_p';\n\n/**\n * Type for {@link AI_TOP_P} ai.top_p\n */\nexport type AI_TOP_P_TYPE = number;\n\n// Path: model/attributes/ai/ai__total_cost.json\n\n/**\n * The total cost for the tokens used. `ai.total_cost`\n *\n * Attribute Value Type: `number` {@link AI_TOTAL_COST_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_COST_TOTAL_TOKENS} `gen_ai.cost.total_tokens`\n *\n * @deprecated Use {@link GEN_AI_COST_TOTAL_TOKENS} (gen_ai.cost.total_tokens) instead\n * @example 12.34\n */\nexport const AI_TOTAL_COST = 'ai.total_cost';\n\n/**\n * Type for {@link AI_TOTAL_COST} ai.total_cost\n */\nexport type AI_TOTAL_COST_TYPE = number;\n\n// Path: model/attributes/ai/ai__total_tokens__used.json\n\n/**\n * The total number of tokens used to process the prompt. `ai.total_tokens.used`\n *\n * Attribute Value Type: `number` {@link AI_TOTAL_TOKENS_USED_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_USAGE_TOTAL_TOKENS} `gen_ai.usage.total_tokens`\n *\n * @deprecated Use {@link GEN_AI_USAGE_TOTAL_TOKENS} (gen_ai.usage.total_tokens) instead\n * @example 30\n */\nexport const AI_TOTAL_TOKENS_USED = 'ai.total_tokens.used';\n\n/**\n * Type for {@link AI_TOTAL_TOKENS_USED} ai.total_tokens.used\n */\nexport type AI_TOTAL_TOKENS_USED_TYPE = number;\n\n// Path: model/attributes/ai/ai__warnings.json\n\n/**\n * Warning messages generated during model execution. `ai.warnings`\n *\n * Attribute Value Type: `Array<string>` {@link AI_WARNINGS_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated\n * @example [\"Token limit exceeded\"]\n */\nexport const AI_WARNINGS = 'ai.warnings';\n\n/**\n * Type for {@link AI_WARNINGS} ai.warnings\n */\nexport type AI_WARNINGS_TYPE = Array<string>;\n\n// Path: model/attributes/angular/angular__version.json\n\n/**\n * The version of the Angular framework `angular.version`\n *\n * Attribute Value Type: `string` {@link ANGULAR_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"17.1.0\"\n */\nexport const ANGULAR_VERSION = 'angular.version';\n\n/**\n * Type for {@link ANGULAR_VERSION} angular.version\n */\nexport type ANGULAR_VERSION_TYPE = string;\n\n// Path: model/attributes/app/app__app_build.json\n\n/**\n * Internal build identifier, as it appears on the platform. `app.app_build`\n *\n * Attribute Value Type: `string` {@link APP_APP_BUILD_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_BUILD} `app.build`\n *\n * @deprecated Use {@link APP_BUILD} (app.build) instead - Deprecated in favor of app.build\n * @example \"1\"\n */\nexport const APP_APP_BUILD = 'app.app_build';\n\n/**\n * Type for {@link APP_APP_BUILD} app.app_build\n */\nexport type APP_APP_BUILD_TYPE = string;\n\n// Path: model/attributes/app/app__app_identifier.json\n\n/**\n * Version-independent application identifier, often a dotted bundle ID. `app.app_identifier`\n *\n * Attribute Value Type: `string` {@link APP_APP_IDENTIFIER_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_IDENTIFIER} `app.identifier`\n *\n * @deprecated Use {@link APP_IDENTIFIER} (app.identifier) instead - Deprecated in favor of app.identifier\n * @example \"com.example.myapp\"\n */\nexport const APP_APP_IDENTIFIER = 'app.app_identifier';\n\n/**\n * Type for {@link APP_APP_IDENTIFIER} app.app_identifier\n */\nexport type APP_APP_IDENTIFIER_TYPE = string;\n\n// Path: model/attributes/app/app__app_name.json\n\n/**\n * Human readable application name, as it appears on the platform. `app.app_name`\n *\n * Attribute Value Type: `string` {@link APP_APP_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_NAME} `app.name`\n *\n * @deprecated Use {@link APP_NAME} (app.name) instead - Deprecated in favor of app.name\n * @example \"My App\"\n */\nexport const APP_APP_NAME = 'app.app_name';\n\n/**\n * Type for {@link APP_APP_NAME} app.app_name\n */\nexport type APP_APP_NAME_TYPE = string;\n\n// Path: model/attributes/app/app__app_start_time.json\n\n/**\n * Formatted UTC timestamp when the user started the application. `app.app_start_time`\n *\n * Attribute Value Type: `string` {@link APP_APP_START_TIME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_START_TIME} `app.start_time`\n *\n * @deprecated Use {@link APP_START_TIME} (app.start_time) instead - Deprecated in favor of app.start_time\n * @example \"2025-01-01T00:00:00.000Z\"\n */\nexport const APP_APP_START_TIME = 'app.app_start_time';\n\n/**\n * Type for {@link APP_APP_START_TIME} app.app_start_time\n */\nexport type APP_APP_START_TIME_TYPE = string;\n\n// Path: model/attributes/app/app__app_version.json\n\n/**\n * Human readable application version, as it appears on the platform. `app.app_version`\n *\n * Attribute Value Type: `string` {@link APP_APP_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_VERSION} `app.version`\n *\n * @deprecated Use {@link APP_VERSION} (app.version) instead - Deprecated in favor of app.version\n * @example \"1.0.0\"\n */\nexport const APP_APP_VERSION = 'app.app_version';\n\n/**\n * Type for {@link APP_APP_VERSION} app.app_version\n */\nexport type APP_APP_VERSION_TYPE = string;\n\n// Path: model/attributes/app/app__build.json\n\n/**\n * Internal build identifier, as it appears on the platform. `app.build`\n *\n * Attribute Value Type: `string` {@link APP_BUILD_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_APP_BUILD} `app.app_build`\n *\n * @example \"1\"\n */\nexport const APP_BUILD = 'app.build';\n\n/**\n * Type for {@link APP_BUILD} app.build\n */\nexport type APP_BUILD_TYPE = string;\n\n// Path: model/attributes/app/app__identifier.json\n\n/**\n * Version-independent application identifier, often a dotted bundle ID. `app.identifier`\n *\n * Attribute Value Type: `string` {@link APP_IDENTIFIER_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_APP_IDENTIFIER} `app.app_identifier`\n *\n * @example \"com.example.myapp\"\n */\nexport const APP_IDENTIFIER = 'app.identifier';\n\n/**\n * Type for {@link APP_IDENTIFIER} app.identifier\n */\nexport type APP_IDENTIFIER_TYPE = string;\n\n// Path: model/attributes/app/app__in_foreground.json\n\n/**\n * Whether the application is currently in the foreground. `app.in_foreground`\n *\n * Attribute Value Type: `boolean` {@link APP_IN_FOREGROUND_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example true\n */\nexport const APP_IN_FOREGROUND = 'app.in_foreground';\n\n/**\n * Type for {@link APP_IN_FOREGROUND} app.in_foreground\n */\nexport type APP_IN_FOREGROUND_TYPE = boolean;\n\n// Path: model/attributes/app/app__name.json\n\n/**\n * Human readable application name, as it appears on the platform. `app.name`\n *\n * Attribute Value Type: `string` {@link APP_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_APP_NAME} `app.app_name`\n *\n * @example \"My App\"\n */\nexport const APP_NAME = 'app.name';\n\n/**\n * Type for {@link APP_NAME} app.name\n */\nexport type APP_NAME_TYPE = string;\n\n// Path: model/attributes/app_start_cold.json\n\n/**\n * The duration of a cold app start in milliseconds `app_start_cold`\n *\n * Attribute Value Type: `number` {@link APP_START_COLD_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_VITALS_START_COLD_VALUE} `app.vitals.start.cold.value`\n *\n * @deprecated Use {@link APP_VITALS_START_COLD_VALUE} (app.vitals.start.cold.value) instead - Replaced by app.vitals.start.cold.value to align with the app.vitals.* namespace for mobile performance attributes\n * @example 1234.56\n */\nexport const APP_START_COLD = 'app_start_cold';\n\n/**\n * Type for {@link APP_START_COLD} app_start_cold\n */\nexport type APP_START_COLD_TYPE = number;\n\n// Path: model/attributes/app/app__start_time.json\n\n/**\n * Formatted UTC timestamp when the user started the application. `app.start_time`\n *\n * Attribute Value Type: `string` {@link APP_START_TIME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_APP_START_TIME} `app.app_start_time`\n *\n * @example \"2025-01-01T00:00:00.000Z\"\n */\nexport const APP_START_TIME = 'app.start_time';\n\n/**\n * Type for {@link APP_START_TIME} app.start_time\n */\nexport type APP_START_TIME_TYPE = string;\n\n// Path: model/attributes/app_start_type.json\n\n/**\n * Mobile app start variant. Either cold or warm. `app_start_type`\n *\n * Attribute Value Type: `string` {@link APP_START_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_VITALS_START_TYPE} `app.vitals.start.type`\n *\n * @deprecated Use {@link APP_VITALS_START_TYPE} (app.vitals.start.type) instead - Replaced by app.vitals.start.type to align with the app.vitals.* namespace for mobile performance attributes\n * @example \"cold\"\n */\nexport const APP_START_TYPE = 'app_start_type';\n\n/**\n * Type for {@link APP_START_TYPE} app_start_type\n */\nexport type APP_START_TYPE_TYPE = string;\n\n// Path: model/attributes/app_start_warm.json\n\n/**\n * The duration of a warm app start in milliseconds `app_start_warm`\n *\n * Attribute Value Type: `number` {@link APP_START_WARM_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_VITALS_START_WARM_VALUE} `app.vitals.start.warm.value`\n *\n * @deprecated Use {@link APP_VITALS_START_WARM_VALUE} (app.vitals.start.warm.value) instead - Replaced by app.vitals.start.warm.value to align with the app.vitals.* namespace for mobile performance attributes\n * @example 1234.56\n */\nexport const APP_START_WARM = 'app_start_warm';\n\n/**\n * Type for {@link APP_START_WARM} app_start_warm\n */\nexport type APP_START_WARM_TYPE = number;\n\n// Path: model/attributes/app/app__version.json\n\n/**\n * Human readable application version, as it appears on the platform. `app.version`\n *\n * Attribute Value Type: `string` {@link APP_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_APP_VERSION} `app.app_version`\n *\n * @example \"1.0.0\"\n */\nexport const APP_VERSION = 'app.version';\n\n/**\n * Type for {@link APP_VERSION} app.version\n */\nexport type APP_VERSION_TYPE = string;\n\n// Path: model/attributes/app/app__vitals__frames__delay__value.json\n\n/**\n * 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/). `app.vitals.frames.delay.value`\n *\n * Attribute Value Type: `number` {@link APP_VITALS_FRAMES_DELAY_VALUE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link FRAMES_DELAY} `frames.delay`\n *\n * @example 5\n */\nexport const APP_VITALS_FRAMES_DELAY_VALUE = 'app.vitals.frames.delay.value';\n\n/**\n * Type for {@link APP_VITALS_FRAMES_DELAY_VALUE} app.vitals.frames.delay.value\n */\nexport type APP_VITALS_FRAMES_DELAY_VALUE_TYPE = number;\n\n// Path: model/attributes/app/app__vitals__frames__frozen__count.json\n\n/**\n * The number of frozen frames rendered during the lifetime of the span. `app.vitals.frames.frozen.count`\n *\n * Attribute Value Type: `number` {@link APP_VITALS_FRAMES_FROZEN_COUNT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link FRAMES_FROZEN} `frames.frozen`\n *\n * @example 3\n */\nexport const APP_VITALS_FRAMES_FROZEN_COUNT = 'app.vitals.frames.frozen.count';\n\n/**\n * Type for {@link APP_VITALS_FRAMES_FROZEN_COUNT} app.vitals.frames.frozen.count\n */\nexport type APP_VITALS_FRAMES_FROZEN_COUNT_TYPE = number;\n\n// Path: model/attributes/app/app__vitals__frames__slow__count.json\n\n/**\n * The number of slow frames rendered during the lifetime of the span. `app.vitals.frames.slow.count`\n *\n * Attribute Value Type: `number` {@link APP_VITALS_FRAMES_SLOW_COUNT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link FRAMES_SLOW} `frames.slow`\n *\n * @example 1\n */\nexport const APP_VITALS_FRAMES_SLOW_COUNT = 'app.vitals.frames.slow.count';\n\n/**\n * Type for {@link APP_VITALS_FRAMES_SLOW_COUNT} app.vitals.frames.slow.count\n */\nexport type APP_VITALS_FRAMES_SLOW_COUNT_TYPE = number;\n\n// Path: model/attributes/app/app__vitals__frames__total__count.json\n\n/**\n * The number of total frames rendered during the lifetime of the span. `app.vitals.frames.total.count`\n *\n * Attribute Value Type: `number` {@link APP_VITALS_FRAMES_TOTAL_COUNT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link FRAMES_TOTAL} `frames.total`\n *\n * @example 60\n */\nexport const APP_VITALS_FRAMES_TOTAL_COUNT = 'app.vitals.frames.total.count';\n\n/**\n * Type for {@link APP_VITALS_FRAMES_TOTAL_COUNT} app.vitals.frames.total.count\n */\nexport type APP_VITALS_FRAMES_TOTAL_COUNT_TYPE = number;\n\n// Path: model/attributes/app/app__vitals__start__cold__value.json\n\n/**\n * The duration of a cold app start in milliseconds `app.vitals.start.cold.value`\n *\n * Attribute Value Type: `number` {@link APP_VITALS_START_COLD_VALUE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_START_COLD} `app_start_cold`\n *\n * @example 1234.56\n */\nexport const APP_VITALS_START_COLD_VALUE = 'app.vitals.start.cold.value';\n\n/**\n * Type for {@link APP_VITALS_START_COLD_VALUE} app.vitals.start.cold.value\n */\nexport type APP_VITALS_START_COLD_VALUE_TYPE = number;\n\n// Path: model/attributes/app/app__vitals__start__prewarmed.json\n\n/**\n * Whether the app start was prewarmed. `app.vitals.start.prewarmed`\n *\n * Attribute Value Type: `boolean` {@link APP_VITALS_START_PREWARMED_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example true\n */\nexport const APP_VITALS_START_PREWARMED = 'app.vitals.start.prewarmed';\n\n/**\n * Type for {@link APP_VITALS_START_PREWARMED} app.vitals.start.prewarmed\n */\nexport type APP_VITALS_START_PREWARMED_TYPE = boolean;\n\n// Path: model/attributes/app/app__vitals__start__reason.json\n\n/**\n * The reason that triggered the app start. `app.vitals.start.reason`\n *\n * Attribute Value Type: `string` {@link APP_VITALS_START_REASON_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"push\"\n */\nexport const APP_VITALS_START_REASON = 'app.vitals.start.reason';\n\n/**\n * Type for {@link APP_VITALS_START_REASON} app.vitals.start.reason\n */\nexport type APP_VITALS_START_REASON_TYPE = string;\n\n// Path: model/attributes/app/app__vitals__start__screen.json\n\n/**\n * 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. `app.vitals.start.screen`\n *\n * Attribute Value Type: `string` {@link APP_VITALS_START_SCREEN_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"MainActivity\"\n */\nexport const APP_VITALS_START_SCREEN = 'app.vitals.start.screen';\n\n/**\n * Type for {@link APP_VITALS_START_SCREEN} app.vitals.start.screen\n */\nexport type APP_VITALS_START_SCREEN_TYPE = string;\n\n// Path: model/attributes/app/app__vitals__start__type.json\n\n/**\n * The type of app start, for example `cold` or `warm` `app.vitals.start.type`\n *\n * Attribute Value Type: `string` {@link APP_VITALS_START_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_START_TYPE} `app_start_type`\n *\n * @example \"cold\"\n */\nexport const APP_VITALS_START_TYPE = 'app.vitals.start.type';\n\n/**\n * Type for {@link APP_VITALS_START_TYPE} app.vitals.start.type\n */\nexport type APP_VITALS_START_TYPE_TYPE = string;\n\n// Path: model/attributes/app/app__vitals__start__warm__value.json\n\n/**\n * The duration of a warm app start in milliseconds `app.vitals.start.warm.value`\n *\n * Attribute Value Type: `number` {@link APP_VITALS_START_WARM_VALUE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_START_WARM} `app_start_warm`\n *\n * @example 1234.56\n */\nexport const APP_VITALS_START_WARM_VALUE = 'app.vitals.start.warm.value';\n\n/**\n * Type for {@link APP_VITALS_START_WARM_VALUE} app.vitals.start.warm.value\n */\nexport type APP_VITALS_START_WARM_VALUE_TYPE = number;\n\n// Path: model/attributes/app/app__vitals__ttfd__value.json\n\n/**\n * The duration of time to full display in milliseconds `app.vitals.ttfd.value`\n *\n * Attribute Value Type: `number` {@link APP_VITALS_TTFD_VALUE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link TIME_TO_FULL_DISPLAY} `time_to_full_display`\n *\n * @example 1234.56\n */\nexport const APP_VITALS_TTFD_VALUE = 'app.vitals.ttfd.value';\n\n/**\n * Type for {@link APP_VITALS_TTFD_VALUE} app.vitals.ttfd.value\n */\nexport type APP_VITALS_TTFD_VALUE_TYPE = number;\n\n// Path: model/attributes/app/app__vitals__ttid__value.json\n\n/**\n * The duration of time to initial display in milliseconds `app.vitals.ttid.value`\n *\n * Attribute Value Type: `number` {@link APP_VITALS_TTID_VALUE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link TIME_TO_INITIAL_DISPLAY} `time_to_initial_display`\n *\n * @example 1234.56\n */\nexport const APP_VITALS_TTID_VALUE = 'app.vitals.ttid.value';\n\n/**\n * Type for {@link APP_VITALS_TTID_VALUE} app.vitals.ttid.value\n */\nexport type APP_VITALS_TTID_VALUE_TYPE = number;\n\n// Path: model/attributes/art/art__gc__blocking_count.json\n\n/**\n * Total number of blocking (stop-the-world) garbage collections performed by the Android Runtime `art.gc.blocking_count`\n *\n * Attribute Value Type: `number` {@link ART_GC_BLOCKING_COUNT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1\n */\nexport const ART_GC_BLOCKING_COUNT = 'art.gc.blocking_count';\n\n/**\n * Type for {@link ART_GC_BLOCKING_COUNT} art.gc.blocking_count\n */\nexport type ART_GC_BLOCKING_COUNT_TYPE = number;\n\n// Path: model/attributes/art/art__gc__blocking_time.json\n\n/**\n * Total time spent in blocking (stop-the-world) garbage collections by the Android Runtime, in milliseconds `art.gc.blocking_time`\n *\n * Attribute Value Type: `number` {@link ART_GC_BLOCKING_TIME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 11.873\n */\nexport const ART_GC_BLOCKING_TIME = 'art.gc.blocking_time';\n\n/**\n * Type for {@link ART_GC_BLOCKING_TIME} art.gc.blocking_time\n */\nexport type ART_GC_BLOCKING_TIME_TYPE = number;\n\n// Path: model/attributes/art/art__gc__pre_oome_count.json\n\n/**\n * Total number of garbage collections triggered as a last resort before an OutOfMemoryError by the Android Runtime `art.gc.pre_oome_count`\n *\n * Attribute Value Type: `number` {@link ART_GC_PRE_OOME_COUNT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 0\n */\nexport const ART_GC_PRE_OOME_COUNT = 'art.gc.pre_oome_count';\n\n/**\n * Type for {@link ART_GC_PRE_OOME_COUNT} art.gc.pre_oome_count\n */\nexport type ART_GC_PRE_OOME_COUNT_TYPE = number;\n\n// Path: model/attributes/art/art__gc__total_count.json\n\n/**\n * Total number of garbage collections performed by the Android Runtime `art.gc.total_count`\n *\n * Attribute Value Type: `number` {@link ART_GC_TOTAL_COUNT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1\n */\nexport const ART_GC_TOTAL_COUNT = 'art.gc.total_count';\n\n/**\n * Type for {@link ART_GC_TOTAL_COUNT} art.gc.total_count\n */\nexport type ART_GC_TOTAL_COUNT_TYPE = number;\n\n// Path: model/attributes/art/art__gc__total_time.json\n\n/**\n * Total time spent in garbage collection by the Android Runtime, in milliseconds `art.gc.total_time`\n *\n * Attribute Value Type: `number` {@link ART_GC_TOTAL_TIME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 11.807\n */\nexport const ART_GC_TOTAL_TIME = 'art.gc.total_time';\n\n/**\n * Type for {@link ART_GC_TOTAL_TIME} art.gc.total_time\n */\nexport type ART_GC_TOTAL_TIME_TYPE = number;\n\n// Path: model/attributes/art/art__gc__waiting_time.json\n\n/**\n * Total time threads spent waiting for garbage collection to complete in the Android Runtime, in milliseconds `art.gc.waiting_time`\n *\n * Attribute Value Type: `number` {@link ART_GC_WAITING_TIME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 8.054\n */\nexport const ART_GC_WAITING_TIME = 'art.gc.waiting_time';\n\n/**\n * Type for {@link ART_GC_WAITING_TIME} art.gc.waiting_time\n */\nexport type ART_GC_WAITING_TIME_TYPE = number;\n\n// Path: model/attributes/art/art__memory__free.json\n\n/**\n * Free memory available to the process as reported by the Android Runtime, in bytes `art.memory.free`\n *\n * Attribute Value Type: `number` {@link ART_MEMORY_FREE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 3181568\n */\nexport const ART_MEMORY_FREE = 'art.memory.free';\n\n/**\n * Type for {@link ART_MEMORY_FREE} art.memory.free\n */\nexport type ART_MEMORY_FREE_TYPE = number;\n\n// Path: model/attributes/art/art__memory__free_until_gc.json\n\n/**\n * Free memory available before a garbage collection would be triggered by the Android Runtime, in bytes `art.memory.free_until_gc`\n *\n * Attribute Value Type: `number` {@link ART_MEMORY_FREE_UNTIL_GC_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 3181568\n */\nexport const ART_MEMORY_FREE_UNTIL_GC = 'art.memory.free_until_gc';\n\n/**\n * Type for {@link ART_MEMORY_FREE_UNTIL_GC} art.memory.free_until_gc\n */\nexport type ART_MEMORY_FREE_UNTIL_GC_TYPE = number;\n\n// Path: model/attributes/art/art__memory__free_until_oome.json\n\n/**\n * Free memory available before an OutOfMemoryError would be thrown by the Android Runtime, in bytes `art.memory.free_until_oome`\n *\n * Attribute Value Type: `number` {@link ART_MEMORY_FREE_UNTIL_OOME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 196083712\n */\nexport const ART_MEMORY_FREE_UNTIL_OOME = 'art.memory.free_until_oome';\n\n/**\n * Type for {@link ART_MEMORY_FREE_UNTIL_OOME} art.memory.free_until_oome\n */\nexport type ART_MEMORY_FREE_UNTIL_OOME_TYPE = number;\n\n// Path: model/attributes/art/art__memory__max.json\n\n/**\n * Maximum memory the process is allowed to use as reported by the Android Runtime, in bytes `art.memory.max`\n *\n * Attribute Value Type: `number` {@link ART_MEMORY_MAX_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 201326592\n */\nexport const ART_MEMORY_MAX = 'art.memory.max';\n\n/**\n * Type for {@link ART_MEMORY_MAX} art.memory.max\n */\nexport type ART_MEMORY_MAX_TYPE = number;\n\n// Path: model/attributes/art/art__memory__total.json\n\n/**\n * Total memory currently allocated to the process by the Android Runtime, in bytes `art.memory.total`\n *\n * Attribute Value Type: `number` {@link ART_MEMORY_TOTAL_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 7774208\n */\nexport const ART_MEMORY_TOTAL = 'art.memory.total';\n\n/**\n * Type for {@link ART_MEMORY_TOTAL} art.memory.total\n */\nexport type ART_MEMORY_TOTAL_TYPE = number;\n\n// Path: model/attributes/aws/aws__cloudwatch__logs__log_group.json\n\n/**\n * The name of the CloudWatch Logs log group `aws.cloudwatch.logs.log_group`\n *\n * Attribute Value Type: `string` {@link AWS_CLOUDWATCH_LOGS_LOG_GROUP_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"/aws/lambda/my-function\"\n */\nexport const AWS_CLOUDWATCH_LOGS_LOG_GROUP = 'aws.cloudwatch.logs.log_group';\n\n/**\n * Type for {@link AWS_CLOUDWATCH_LOGS_LOG_GROUP} aws.cloudwatch.logs.log_group\n */\nexport type AWS_CLOUDWATCH_LOGS_LOG_GROUP_TYPE = string;\n\n// Path: model/attributes/aws/aws__cloudwatch__logs__log_stream.json\n\n/**\n * The name of the CloudWatch Logs log stream `aws.cloudwatch.logs.log_stream`\n *\n * Attribute Value Type: `string` {@link AWS_CLOUDWATCH_LOGS_LOG_STREAM_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"2024/01/01/[$LATEST]abcdef1234567890\"\n */\nexport const AWS_CLOUDWATCH_LOGS_LOG_STREAM = 'aws.cloudwatch.logs.log_stream';\n\n/**\n * Type for {@link AWS_CLOUDWATCH_LOGS_LOG_STREAM} aws.cloudwatch.logs.log_stream\n */\nexport type AWS_CLOUDWATCH_LOGS_LOG_STREAM_TYPE = string;\n\n// Path: model/attributes/aws/aws__cloudwatch__logs__url.json\n\n/**\n * The URL to the CloudWatch Logs log group `aws.cloudwatch.logs.url`\n *\n * Attribute Value Type: `string` {@link AWS_CLOUDWATCH_LOGS_URL_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logsV2:log-groups/log-group/my-log-group\"\n */\nexport const AWS_CLOUDWATCH_LOGS_URL = 'aws.cloudwatch.logs.url';\n\n/**\n * Type for {@link AWS_CLOUDWATCH_LOGS_URL} aws.cloudwatch.logs.url\n */\nexport type AWS_CLOUDWATCH_LOGS_URL_TYPE = string;\n\n// Path: model/attributes/aws/aws__dynamodb__attribute_definitions.json\n\n/**\n * The JSON-serialized value of each item in the `AttributeDefinitions` request field. `aws.dynamodb.attribute_definitions`\n *\n * Attribute Value Type: `Array<string>` {@link AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example [\"{ \\\"AttributeName\\\": \\\"string\\\", \\\"AttributeType\\\": \\\"string\\\" }\"]\n */\nexport const AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS = 'aws.dynamodb.attribute_definitions';\n\n/**\n * Type for {@link AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS} aws.dynamodb.attribute_definitions\n */\nexport type AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS_TYPE = Array<string>;\n\n// Path: model/attributes/aws/aws__dynamodb__consistent_read.json\n\n/**\n * The value of the `ConsistentRead` request parameter. `aws.dynamodb.consistent_read`\n *\n * Attribute Value Type: `boolean` {@link AWS_DYNAMODB_CONSISTENT_READ_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example true\n */\nexport const AWS_DYNAMODB_CONSISTENT_READ = 'aws.dynamodb.consistent_read';\n\n/**\n * Type for {@link AWS_DYNAMODB_CONSISTENT_READ} aws.dynamodb.consistent_read\n */\nexport type AWS_DYNAMODB_CONSISTENT_READ_TYPE = boolean;\n\n// Path: model/attributes/aws/aws__dynamodb__consumed_capacity.json\n\n/**\n * The JSON-serialized value of each item in the `ConsumedCapacity` response field. `aws.dynamodb.consumed_capacity`\n *\n * Attribute Value Type: `Array<string>` {@link AWS_DYNAMODB_CONSUMED_CAPACITY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @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 }\"]\n */\nexport const AWS_DYNAMODB_CONSUMED_CAPACITY = 'aws.dynamodb.consumed_capacity';\n\n/**\n * Type for {@link AWS_DYNAMODB_CONSUMED_CAPACITY} aws.dynamodb.consumed_capacity\n */\nexport type AWS_DYNAMODB_CONSUMED_CAPACITY_TYPE = Array<string>;\n\n// Path: model/attributes/aws/aws__dynamodb__count.json\n\n/**\n * The value of the `Count` response parameter. `aws.dynamodb.count`\n *\n * Attribute Value Type: `number` {@link AWS_DYNAMODB_COUNT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example 10\n */\nexport const AWS_DYNAMODB_COUNT = 'aws.dynamodb.count';\n\n/**\n * Type for {@link AWS_DYNAMODB_COUNT} aws.dynamodb.count\n */\nexport type AWS_DYNAMODB_COUNT_TYPE = number;\n\n// Path: model/attributes/aws/aws__dynamodb__exclusive_start_table.json\n\n/**\n * The value of the `ExclusiveStartTableName` request parameter. `aws.dynamodb.exclusive_start_table`\n *\n * Attribute Value Type: `string` {@link AWS_DYNAMODB_EXCLUSIVE_START_TABLE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"Users\"\n */\nexport const AWS_DYNAMODB_EXCLUSIVE_START_TABLE = 'aws.dynamodb.exclusive_start_table';\n\n/**\n * Type for {@link AWS_DYNAMODB_EXCLUSIVE_START_TABLE} aws.dynamodb.exclusive_start_table\n */\nexport type AWS_DYNAMODB_EXCLUSIVE_START_TABLE_TYPE = string;\n\n// Path: model/attributes/aws/aws__dynamodb__global_secondary_indexes.json\n\n/**\n * The JSON-serialized value of each item of the `GlobalSecondaryIndexes` request field. `aws.dynamodb.global_secondary_indexes`\n *\n * Attribute Value Type: `Array<string>` {@link AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example [\"{ \\\"IndexName\\\": \\\"string\\\", \\\"KeySchema\\\": [ { \\\"AttributeName\\\": \\\"string\\\", \\\"KeyType\\\": \\\"string\\\" } ], \\\"Projection\\\": { \\\"NonKeyAttributes\\\": [ \\\"string\\\" ], \\\"ProjectionType\\\": \\\"string\\\" }, \\\"ProvisionedThroughput\\\": { \\\"ReadCapacityUnits\\\": number, \\\"WriteCapacityUnits\\\": number } }\"]\n */\nexport const AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES = 'aws.dynamodb.global_secondary_indexes';\n\n/**\n * Type for {@link AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES} aws.dynamodb.global_secondary_indexes\n */\nexport type AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES_TYPE = Array<string>;\n\n// Path: model/attributes/aws/aws__dynamodb__global_secondary_index_updates.json\n\n/**\n * The JSON-serialized value of each item in the `GlobalSecondaryIndexUpdates` request field. `aws.dynamodb.global_secondary_index_updates`\n *\n * Attribute Value Type: `Array<string>` {@link AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example [\"{ \\\"Create\\\": { \\\"IndexName\\\": \\\"string\\\", \\\"KeySchema\\\": [ { \\\"AttributeName\\\": \\\"string\\\", \\\"KeyType\\\": \\\"string\\\" } ], \\\"Projection\\\": { \\\"NonKeyAttributes\\\": [ \\\"string\\\" ], \\\"ProjectionType\\\": \\\"string\\\" }, \\\"ProvisionedThroughput\\\": { \\\"ReadCapacityUnits\\\": number, \\\"WriteCapacityUnits\\\": number } }\"]\n */\nexport const AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES = 'aws.dynamodb.global_secondary_index_updates';\n\n/**\n * Type for {@link AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES} aws.dynamodb.global_secondary_index_updates\n */\nexport type AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES_TYPE = Array<string>;\n\n// Path: model/attributes/aws/aws__dynamodb__index_name.json\n\n/**\n * The value of the `IndexName` request parameter. `aws.dynamodb.index_name`\n *\n * Attribute Value Type: `string` {@link AWS_DYNAMODB_INDEX_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"name_to_group\"\n */\nexport const AWS_DYNAMODB_INDEX_NAME = 'aws.dynamodb.index_name';\n\n/**\n * Type for {@link AWS_DYNAMODB_INDEX_NAME} aws.dynamodb.index_name\n */\nexport type AWS_DYNAMODB_INDEX_NAME_TYPE = string;\n\n// Path: model/attributes/aws/aws__dynamodb__item_collection_metrics.json\n\n/**\n * The JSON-serialized value of the `ItemCollectionMetrics` response field. `aws.dynamodb.item_collection_metrics`\n *\n * Attribute Value Type: `string` {@link AWS_DYNAMODB_ITEM_COLLECTION_METRICS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @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 ] } ] }\"\n */\nexport const AWS_DYNAMODB_ITEM_COLLECTION_METRICS = 'aws.dynamodb.item_collection_metrics';\n\n/**\n * Type for {@link AWS_DYNAMODB_ITEM_COLLECTION_METRICS} aws.dynamodb.item_collection_metrics\n */\nexport type AWS_DYNAMODB_ITEM_COLLECTION_METRICS_TYPE = string;\n\n// Path: model/attributes/aws/aws__dynamodb__limit.json\n\n/**\n * The value of the `Limit` request parameter. `aws.dynamodb.limit`\n *\n * Attribute Value Type: `number` {@link AWS_DYNAMODB_LIMIT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example 10\n */\nexport const AWS_DYNAMODB_LIMIT = 'aws.dynamodb.limit';\n\n/**\n * Type for {@link AWS_DYNAMODB_LIMIT} aws.dynamodb.limit\n */\nexport type AWS_DYNAMODB_LIMIT_TYPE = number;\n\n// Path: model/attributes/aws/aws__dynamodb__local_secondary_indexes.json\n\n/**\n * The JSON-serialized value of each item of the `LocalSecondaryIndexes` request field. `aws.dynamodb.local_secondary_indexes`\n *\n * Attribute Value Type: `Array<string>` {@link AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example [\"{ \\\"IndexArn\\\": \\\"string\\\", \\\"IndexName\\\": \\\"string\\\", \\\"IndexSizeBytes\\\": number, \\\"ItemCount\\\": number, \\\"KeySchema\\\": [ { \\\"AttributeName\\\": \\\"string\\\", \\\"KeyType\\\": \\\"string\\\" } ], \\\"Projection\\\": { \\\"NonKeyAttributes\\\": [ \\\"string\\\" ], \\\"ProjectionType\\\": \\\"string\\\" } }\"]\n */\nexport const AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES = 'aws.dynamodb.local_secondary_indexes';\n\n/**\n * Type for {@link AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES} aws.dynamodb.local_secondary_indexes\n */\nexport type AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES_TYPE = Array<string>;\n\n// Path: model/attributes/aws/aws__dynamodb__projection.json\n\n/**\n * The value of the `ProjectionExpression` request parameter. `aws.dynamodb.projection`\n *\n * Attribute Value Type: `string` {@link AWS_DYNAMODB_PROJECTION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"Title, Price, Color\"\n */\nexport const AWS_DYNAMODB_PROJECTION = 'aws.dynamodb.projection';\n\n/**\n * Type for {@link AWS_DYNAMODB_PROJECTION} aws.dynamodb.projection\n */\nexport type AWS_DYNAMODB_PROJECTION_TYPE = string;\n\n// Path: model/attributes/aws/aws__dynamodb__provisioned_read_capacity.json\n\n/**\n * The value of the `ProvisionedThroughput.ReadCapacityUnits` request parameter. `aws.dynamodb.provisioned_read_capacity`\n *\n * Attribute Value Type: `number` {@link AWS_DYNAMODB_PROVISIONED_READ_CAPACITY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example 1\n */\nexport const AWS_DYNAMODB_PROVISIONED_READ_CAPACITY = 'aws.dynamodb.provisioned_read_capacity';\n\n/**\n * Type for {@link AWS_DYNAMODB_PROVISIONED_READ_CAPACITY} aws.dynamodb.provisioned_read_capacity\n */\nexport type AWS_DYNAMODB_PROVISIONED_READ_CAPACITY_TYPE = number;\n\n// Path: model/attributes/aws/aws__dynamodb__provisioned_write_capacity.json\n\n/**\n * The value of the `ProvisionedThroughput.WriteCapacityUnits` request parameter. `aws.dynamodb.provisioned_write_capacity`\n *\n * Attribute Value Type: `number` {@link AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example 2\n */\nexport const AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY = 'aws.dynamodb.provisioned_write_capacity';\n\n/**\n * Type for {@link AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY} aws.dynamodb.provisioned_write_capacity\n */\nexport type AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY_TYPE = number;\n\n// Path: model/attributes/aws/aws__dynamodb__scanned_count.json\n\n/**\n * The value of the `ScannedCount` response parameter. `aws.dynamodb.scanned_count`\n *\n * Attribute Value Type: `number` {@link AWS_DYNAMODB_SCANNED_COUNT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example 50\n */\nexport const AWS_DYNAMODB_SCANNED_COUNT = 'aws.dynamodb.scanned_count';\n\n/**\n * Type for {@link AWS_DYNAMODB_SCANNED_COUNT} aws.dynamodb.scanned_count\n */\nexport type AWS_DYNAMODB_SCANNED_COUNT_TYPE = number;\n\n// Path: model/attributes/aws/aws__dynamodb__scan_forward.json\n\n/**\n * The value of the `ScanIndexForward` request parameter. `aws.dynamodb.scan_forward`\n *\n * Attribute Value Type: `boolean` {@link AWS_DYNAMODB_SCAN_FORWARD_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example true\n */\nexport const AWS_DYNAMODB_SCAN_FORWARD = 'aws.dynamodb.scan_forward';\n\n/**\n * Type for {@link AWS_DYNAMODB_SCAN_FORWARD} aws.dynamodb.scan_forward\n */\nexport type AWS_DYNAMODB_SCAN_FORWARD_TYPE = boolean;\n\n// Path: model/attributes/aws/aws__dynamodb__segment.json\n\n/**\n * The value of the `Segment` request parameter. `aws.dynamodb.segment`\n *\n * Attribute Value Type: `number` {@link AWS_DYNAMODB_SEGMENT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example 10\n */\nexport const AWS_DYNAMODB_SEGMENT = 'aws.dynamodb.segment';\n\n/**\n * Type for {@link AWS_DYNAMODB_SEGMENT} aws.dynamodb.segment\n */\nexport type AWS_DYNAMODB_SEGMENT_TYPE = number;\n\n// Path: model/attributes/aws/aws__dynamodb__select.json\n\n/**\n * The value of the `Select` request parameter. `aws.dynamodb.select`\n *\n * Attribute Value Type: `string` {@link AWS_DYNAMODB_SELECT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"ALL_ATTRIBUTES\"\n */\nexport const AWS_DYNAMODB_SELECT = 'aws.dynamodb.select';\n\n/**\n * Type for {@link AWS_DYNAMODB_SELECT} aws.dynamodb.select\n */\nexport type AWS_DYNAMODB_SELECT_TYPE = string;\n\n// Path: model/attributes/aws/aws__dynamodb__table_count.json\n\n/**\n * The number of items in the `TableNames` response parameter. `aws.dynamodb.table_count`\n *\n * Attribute Value Type: `number` {@link AWS_DYNAMODB_TABLE_COUNT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example 20\n */\nexport const AWS_DYNAMODB_TABLE_COUNT = 'aws.dynamodb.table_count';\n\n/**\n * Type for {@link AWS_DYNAMODB_TABLE_COUNT} aws.dynamodb.table_count\n */\nexport type AWS_DYNAMODB_TABLE_COUNT_TYPE = number;\n\n// Path: model/attributes/aws/aws__dynamodb__table_names.json\n\n/**\n * The keys in the `RequestItems` object field. `aws.dynamodb.table_names`\n *\n * Attribute Value Type: `Array<string>` {@link AWS_DYNAMODB_TABLE_NAMES_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example [\"Users\",\"Cats\"]\n */\nexport const AWS_DYNAMODB_TABLE_NAMES = 'aws.dynamodb.table_names';\n\n/**\n * Type for {@link AWS_DYNAMODB_TABLE_NAMES} aws.dynamodb.table_names\n */\nexport type AWS_DYNAMODB_TABLE_NAMES_TYPE = Array<string>;\n\n// Path: model/attributes/aws/aws__dynamodb__total_segments.json\n\n/**\n * The value of the `TotalSegments` request parameter. `aws.dynamodb.total_segments`\n *\n * Attribute Value Type: `number` {@link AWS_DYNAMODB_TOTAL_SEGMENTS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example 100\n */\nexport const AWS_DYNAMODB_TOTAL_SEGMENTS = 'aws.dynamodb.total_segments';\n\n/**\n * Type for {@link AWS_DYNAMODB_TOTAL_SEGMENTS} aws.dynamodb.total_segments\n */\nexport type AWS_DYNAMODB_TOTAL_SEGMENTS_TYPE = number;\n\n// Path: model/attributes/aws/aws__extended_request_id.json\n\n/**\n * The AWS extended request ID as returned in the response headers. `aws.extended_request_id`\n *\n * Attribute Value Type: `string` {@link AWS_EXTENDED_REQUEST_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AWS_REQUEST_EXTENDED_ID} `aws.request.extended_id`\n *\n * @example \"wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=\"\n */\nexport const AWS_EXTENDED_REQUEST_ID = 'aws.extended_request_id';\n\n/**\n * Type for {@link AWS_EXTENDED_REQUEST_ID} aws.extended_request_id\n */\nexport type AWS_EXTENDED_REQUEST_ID_TYPE = string;\n\n// Path: model/attributes/aws/aws__kinesis__stream_name.json\n\n/**\n * The name of the AWS Kinesis stream the request refers to. `aws.kinesis.stream_name`\n *\n * Attribute Value Type: `string` {@link AWS_KINESIS_STREAM_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link _AWS_KINESIS_STREAM_NAME} `aws.kinesis.stream.name`\n *\n * @example \"some-stream-name\"\n */\nexport const AWS_KINESIS_STREAM_NAME = 'aws.kinesis.stream_name';\n\n/**\n * Type for {@link AWS_KINESIS_STREAM_NAME} aws.kinesis.stream_name\n */\nexport type AWS_KINESIS_STREAM_NAME_TYPE = string;\n\n// Path: model/attributes/aws/aws__kinesis__stream__name.json\n\n/**\n * The name of the AWS Kinesis stream the request refers to. `aws.kinesis.stream.name`\n *\n * Attribute Value Type: `string` {@link _AWS_KINESIS_STREAM_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link AWS_KINESIS_STREAM_NAME} `aws.kinesis.stream_name`\n *\n * @deprecated Use {@link AWS_KINESIS_STREAM_NAME} (aws.kinesis.stream_name) instead - This attribute is being deprecated in favor of aws.kinesis.stream_name, which is the OTel-aligned replacement.\n * @example \"some-stream-name\"\n */\nexport const _AWS_KINESIS_STREAM_NAME = 'aws.kinesis.stream.name';\n\n/**\n * Type for {@link _AWS_KINESIS_STREAM_NAME} aws.kinesis.stream.name\n */\nexport type _AWS_KINESIS_STREAM_NAME_TYPE = string;\n\n// Path: model/attributes/aws/aws__lambda__aws_request_id.json\n\n/**\n * The AWS request ID as received by the Lambda function runtime `aws.lambda.aws_request_id`\n *\n * Attribute Value Type: `string` {@link AWS_LAMBDA_AWS_REQUEST_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link FAAS_INVOCATION_ID} `faas.invocation_id`, {@link FAAS_EXECUTION} `faas.execution`\n *\n * @deprecated Use {@link FAAS_INVOCATION_ID} (faas.invocation_id) instead - This attribute is being deprecated in favor of faas.invocation_id\n * @example \"8476a536-e9f4-11e8-9739-2dfe598c3fcd\"\n */\nexport const AWS_LAMBDA_AWS_REQUEST_ID = 'aws.lambda.aws_request_id';\n\n/**\n * Type for {@link AWS_LAMBDA_AWS_REQUEST_ID} aws.lambda.aws_request_id\n */\nexport type AWS_LAMBDA_AWS_REQUEST_ID_TYPE = string;\n\n// Path: model/attributes/aws/aws__lambda__execution_duration_in_millis.json\n\n/**\n * The execution duration of the Lambda function invocation in milliseconds `aws.lambda.execution_duration_in_millis`\n *\n * Attribute Value Type: `number` {@link AWS_LAMBDA_EXECUTION_DURATION_IN_MILLIS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1234.56\n */\nexport const AWS_LAMBDA_EXECUTION_DURATION_IN_MILLIS = 'aws.lambda.execution_duration_in_millis';\n\n/**\n * Type for {@link AWS_LAMBDA_EXECUTION_DURATION_IN_MILLIS} aws.lambda.execution_duration_in_millis\n */\nexport type AWS_LAMBDA_EXECUTION_DURATION_IN_MILLIS_TYPE = number;\n\n// Path: model/attributes/aws/aws__lambda__function_name.json\n\n/**\n * The name of the Lambda function `aws.lambda.function_name`\n *\n * Attribute Value Type: `string` {@link AWS_LAMBDA_FUNCTION_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link FAAS_NAME} `faas.name`\n *\n * @deprecated Use {@link FAAS_NAME} (faas.name) instead - Use the OTel-aligned faas.name attribute instead\n * @example \"my-function\"\n */\nexport const AWS_LAMBDA_FUNCTION_NAME = 'aws.lambda.function_name';\n\n/**\n * Type for {@link AWS_LAMBDA_FUNCTION_NAME} aws.lambda.function_name\n */\nexport type AWS_LAMBDA_FUNCTION_NAME_TYPE = string;\n\n// Path: model/attributes/aws/aws__lambda__function_version.json\n\n/**\n * The version of the Lambda function `aws.lambda.function_version`\n *\n * Attribute Value Type: `string` {@link AWS_LAMBDA_FUNCTION_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link FAAS_VERSION} `faas.version`\n *\n * @deprecated Use {@link FAAS_VERSION} (faas.version) instead - Use the OTel-aligned faas.version attribute instead\n * @example \"$LATEST\"\n */\nexport const AWS_LAMBDA_FUNCTION_VERSION = 'aws.lambda.function_version';\n\n/**\n * Type for {@link AWS_LAMBDA_FUNCTION_VERSION} aws.lambda.function_version\n */\nexport type AWS_LAMBDA_FUNCTION_VERSION_TYPE = string;\n\n// Path: model/attributes/aws/aws__lambda__invoked_arn.json\n\n/**\n * The full ARN of the Lambda function that was invoked `aws.lambda.invoked_arn`\n *\n * Attribute Value Type: `string` {@link AWS_LAMBDA_INVOKED_ARN_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AWS_LAMBDA_INVOKED_FUNCTION_ARN} `aws.lambda.invoked_function_arn`\n *\n * @example \"arn:aws:lambda:us-east-1:123456789012:function:my-function\"\n */\nexport const AWS_LAMBDA_INVOKED_ARN = 'aws.lambda.invoked_arn';\n\n/**\n * Type for {@link AWS_LAMBDA_INVOKED_ARN} aws.lambda.invoked_arn\n */\nexport type AWS_LAMBDA_INVOKED_ARN_TYPE = string;\n\n// Path: model/attributes/aws/aws__lambda__invoked_function_arn.json\n\n/**\n * The full ARN of the Lambda function that was invoked `aws.lambda.invoked_function_arn`\n *\n * Attribute Value Type: `string` {@link AWS_LAMBDA_INVOKED_FUNCTION_ARN_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link AWS_LAMBDA_INVOKED_ARN} `aws.lambda.invoked_arn`\n *\n * @deprecated Use {@link AWS_LAMBDA_INVOKED_ARN} (aws.lambda.invoked_arn) instead - This attribute is being deprecated in favor of aws.lambda.invoked_arn\n * @example \"arn:aws:lambda:us-east-1:123456789012:function:my-function\"\n */\nexport const AWS_LAMBDA_INVOKED_FUNCTION_ARN = 'aws.lambda.invoked_function_arn';\n\n/**\n * Type for {@link AWS_LAMBDA_INVOKED_FUNCTION_ARN} aws.lambda.invoked_function_arn\n */\nexport type AWS_LAMBDA_INVOKED_FUNCTION_ARN_TYPE = string;\n\n// Path: model/attributes/aws/aws__lambda__remaining_time_in_millis.json\n\n/**\n * The remaining time in milliseconds before the Lambda function times out `aws.lambda.remaining_time_in_millis`\n *\n * Attribute Value Type: `number` {@link AWS_LAMBDA_REMAINING_TIME_IN_MILLIS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 5000\n */\nexport const AWS_LAMBDA_REMAINING_TIME_IN_MILLIS = 'aws.lambda.remaining_time_in_millis';\n\n/**\n * Type for {@link AWS_LAMBDA_REMAINING_TIME_IN_MILLIS} aws.lambda.remaining_time_in_millis\n */\nexport type AWS_LAMBDA_REMAINING_TIME_IN_MILLIS_TYPE = number;\n\n// Path: model/attributes/aws/aws__log__group__names.json\n\n/**\n * The name(s) of the AWS log group(s) an application is writing to. `aws.log.group.names`\n *\n * Attribute Value Type: `Array<string>` {@link AWS_LOG_GROUP_NAMES_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example [\"/aws/lambda/my-function\",\"opentelemetry-service\"]\n */\nexport const AWS_LOG_GROUP_NAMES = 'aws.log.group.names';\n\n/**\n * Type for {@link AWS_LOG_GROUP_NAMES} aws.log.group.names\n */\nexport type AWS_LOG_GROUP_NAMES_TYPE = Array<string>;\n\n// Path: model/attributes/aws/aws__log__stream__names.json\n\n/**\n * The name(s) of the AWS log stream(s) an application is writing to. `aws.log.stream.names`\n *\n * Attribute Value Type: `Array<string>` {@link AWS_LOG_STREAM_NAMES_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example [\"logs/main/10838bed-421f-43ef-870a-f43feacbbb5b\"]\n */\nexport const AWS_LOG_STREAM_NAMES = 'aws.log.stream.names';\n\n/**\n * Type for {@link AWS_LOG_STREAM_NAMES} aws.log.stream.names\n */\nexport type AWS_LOG_STREAM_NAMES_TYPE = Array<string>;\n\n// Path: model/attributes/aws/aws__request__extended_id.json\n\n/**\n * The AWS extended request ID as returned in the response headers. `aws.request.extended_id`\n *\n * Attribute Value Type: `string` {@link AWS_REQUEST_EXTENDED_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link AWS_EXTENDED_REQUEST_ID} `aws.extended_request_id`\n *\n * @deprecated Use {@link AWS_EXTENDED_REQUEST_ID} (aws.extended_request_id) instead - This attribute is being deprecated in favor of aws.extended_request_id, which is the OTel-aligned replacement.\n * @example \"wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=\"\n */\nexport const AWS_REQUEST_EXTENDED_ID = 'aws.request.extended_id';\n\n/**\n * Type for {@link AWS_REQUEST_EXTENDED_ID} aws.request.extended_id\n */\nexport type AWS_REQUEST_EXTENDED_ID_TYPE = string;\n\n// Path: model/attributes/aws/aws__request_id.json\n\n/**\n * The AWS request ID as returned in the response headers. `aws.request_id`\n *\n * Attribute Value Type: `string` {@link AWS_REQUEST_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link _AWS_REQUEST_ID} `aws.request.id`\n *\n * @example \"79b9da39-b7ae-508a-a6bc-864b2829c622\"\n */\nexport const AWS_REQUEST_ID = 'aws.request_id';\n\n/**\n * Type for {@link AWS_REQUEST_ID} aws.request_id\n */\nexport type AWS_REQUEST_ID_TYPE = string;\n\n// Path: model/attributes/aws/aws__request__id.json\n\n/**\n * The AWS request ID as returned in the response headers. `aws.request.id`\n *\n * Attribute Value Type: `string` {@link _AWS_REQUEST_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link AWS_REQUEST_ID} `aws.request_id`\n *\n * @deprecated Use {@link AWS_REQUEST_ID} (aws.request_id) instead - This attribute is being deprecated in favor of aws.request_id, which is the OTel-aligned replacement.\n * @example \"79b9da39-b7ae-508a-a6bc-864b2829c622\"\n */\nexport const _AWS_REQUEST_ID = 'aws.request.id';\n\n/**\n * Type for {@link _AWS_REQUEST_ID} aws.request.id\n */\nexport type _AWS_REQUEST_ID_TYPE = string;\n\n// Path: model/attributes/aws/aws__s3__bucket.json\n\n/**\n * The S3 bucket name the request refers to. `aws.s3.bucket`\n *\n * Attribute Value Type: `string` {@link AWS_S3_BUCKET_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"ot-demo-test\"\n */\nexport const AWS_S3_BUCKET = 'aws.s3.bucket';\n\n/**\n * Type for {@link AWS_S3_BUCKET} aws.s3.bucket\n */\nexport type AWS_S3_BUCKET_TYPE = string;\n\n// Path: model/attributes/aws/aws__secretsmanager__secret__arn.json\n\n/**\n * The ARN of the Secret stored in Secrets Manager. `aws.secretsmanager.secret.arn`\n *\n * Attribute Value Type: `string` {@link AWS_SECRETSMANAGER_SECRET_ARN_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"arn:aws:secretsmanager:us-east-1:123456789012:secret:SecretName-6RandomCharacters\"\n */\nexport const AWS_SECRETSMANAGER_SECRET_ARN = 'aws.secretsmanager.secret.arn';\n\n/**\n * Type for {@link AWS_SECRETSMANAGER_SECRET_ARN} aws.secretsmanager.secret.arn\n */\nexport type AWS_SECRETSMANAGER_SECRET_ARN_TYPE = string;\n\n// Path: model/attributes/aws/aws__sns__topic__arn.json\n\n/**\n * The ARN of the AWS SNS Topic. An Amazon SNS topic is a logical access point that acts as a communication channel. `aws.sns.topic.arn`\n *\n * Attribute Value Type: `string` {@link AWS_SNS_TOPIC_ARN_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"arn:aws:sns:us-east-1:123456789012:mystack-mytopic-NZJ5JSMVGFIE\"\n */\nexport const AWS_SNS_TOPIC_ARN = 'aws.sns.topic.arn';\n\n/**\n * Type for {@link AWS_SNS_TOPIC_ARN} aws.sns.topic.arn\n */\nexport type AWS_SNS_TOPIC_ARN_TYPE = string;\n\n// Path: model/attributes/aws/aws__step_functions__activity__arn.json\n\n/**\n * The ARN of the AWS Step Functions Activity. `aws.step_functions.activity.arn`\n *\n * Attribute Value Type: `string` {@link AWS_STEP_FUNCTIONS_ACTIVITY_ARN_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"arn:aws:states:us-east-1:123456789012:activity:get-greeting\"\n */\nexport const AWS_STEP_FUNCTIONS_ACTIVITY_ARN = 'aws.step_functions.activity.arn';\n\n/**\n * Type for {@link AWS_STEP_FUNCTIONS_ACTIVITY_ARN} aws.step_functions.activity.arn\n */\nexport type AWS_STEP_FUNCTIONS_ACTIVITY_ARN_TYPE = string;\n\n// Path: model/attributes/aws/aws__step_functions__state_machine__arn.json\n\n/**\n * The ARN of the AWS Step Functions State Machine. `aws.step_functions.state_machine.arn`\n *\n * Attribute Value Type: `string` {@link AWS_STEP_FUNCTIONS_STATE_MACHINE_ARN_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"arn:aws:states:us-east-1:123456789012:stateMachine:myStateMachine:1\"\n */\nexport const AWS_STEP_FUNCTIONS_STATE_MACHINE_ARN = 'aws.step_functions.state_machine.arn';\n\n/**\n * Type for {@link AWS_STEP_FUNCTIONS_STATE_MACHINE_ARN} aws.step_functions.state_machine.arn\n */\nexport type AWS_STEP_FUNCTIONS_STATE_MACHINE_ARN_TYPE = string;\n\n// Path: model/attributes/blocked_main_thread.json\n\n/**\n * Whether the main thread was blocked by the span. `blocked_main_thread`\n *\n * Attribute Value Type: `boolean` {@link BLOCKED_MAIN_THREAD_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example true\n */\nexport const BLOCKED_MAIN_THREAD = 'blocked_main_thread';\n\n/**\n * Type for {@link BLOCKED_MAIN_THREAD} blocked_main_thread\n */\nexport type BLOCKED_MAIN_THREAD_TYPE = boolean;\n\n// Path: model/attributes/browser/browser__name.json\n\n/**\n * The name of the browser. `browser.name`\n *\n * Attribute Value Type: `string` {@link BROWSER_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SENTRY_BROWSER_NAME} `sentry.browser.name`\n *\n * @example \"Chrome\"\n */\nexport const BROWSER_NAME = 'browser.name';\n\n/**\n * Type for {@link BROWSER_NAME} browser.name\n */\nexport type BROWSER_NAME_TYPE = string;\n\n// Path: model/attributes/browser/browser__performance__navigation__activation_start.json\n\n/**\n * The time between initiating a navigation to a page and the browser activating the page `browser.performance.navigation.activation_start`\n *\n * Attribute Value Type: `number` {@link BROWSER_PERFORMANCE_NAVIGATION_ACTIVATION_START_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link PERFORMANCE_ACTIVATIONSTART} `performance.activationStart`\n *\n * @example 1.983\n */\nexport const BROWSER_PERFORMANCE_NAVIGATION_ACTIVATION_START = 'browser.performance.navigation.activation_start';\n\n/**\n * Type for {@link BROWSER_PERFORMANCE_NAVIGATION_ACTIVATION_START} browser.performance.navigation.activation_start\n */\nexport type BROWSER_PERFORMANCE_NAVIGATION_ACTIVATION_START_TYPE = number;\n\n// Path: model/attributes/browser/browser__performance__time_origin.json\n\n/**\n * The browser's performance.timeOrigin timestamp representing the time when the pageload was initiated `browser.performance.time_origin`\n *\n * Attribute Value Type: `number` {@link BROWSER_PERFORMANCE_TIME_ORIGIN_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link PERFORMANCE_TIMEORIGIN} `performance.timeOrigin`\n *\n * @example 1776185678.886\n */\nexport const BROWSER_PERFORMANCE_TIME_ORIGIN = 'browser.performance.time_origin';\n\n/**\n * Type for {@link BROWSER_PERFORMANCE_TIME_ORIGIN} browser.performance.time_origin\n */\nexport type BROWSER_PERFORMANCE_TIME_ORIGIN_TYPE = number;\n\n// Path: model/attributes/browser/browser__report__type.json\n\n/**\n * A browser report sent via reporting API.. `browser.report.type`\n *\n * Attribute Value Type: `string` {@link BROWSER_REPORT_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"network-error\"\n */\nexport const BROWSER_REPORT_TYPE = 'browser.report.type';\n\n/**\n * Type for {@link BROWSER_REPORT_TYPE} browser.report.type\n */\nexport type BROWSER_REPORT_TYPE_TYPE = string;\n\n// Path: model/attributes/browser/browser__script__invoker.json\n\n/**\n * How a script was called in the browser. `browser.script.invoker`\n *\n * Attribute Value Type: `string` {@link BROWSER_SCRIPT_INVOKER_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"Window.requestAnimationFrame\"\n */\nexport const BROWSER_SCRIPT_INVOKER = 'browser.script.invoker';\n\n/**\n * Type for {@link BROWSER_SCRIPT_INVOKER} browser.script.invoker\n */\nexport type BROWSER_SCRIPT_INVOKER_TYPE = string;\n\n// Path: model/attributes/browser/browser__script__invoker_type.json\n\n/**\n * Browser script entry point type. `browser.script.invoker_type`\n *\n * Attribute Value Type: `string` {@link BROWSER_SCRIPT_INVOKER_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"event-listener\"\n */\nexport const BROWSER_SCRIPT_INVOKER_TYPE = 'browser.script.invoker_type';\n\n/**\n * Type for {@link BROWSER_SCRIPT_INVOKER_TYPE} browser.script.invoker_type\n */\nexport type BROWSER_SCRIPT_INVOKER_TYPE_TYPE = string;\n\n// Path: model/attributes/browser/browser__script__source_char_position.json\n\n/**\n * A number representing the script character position of the script. `browser.script.source_char_position`\n *\n * Attribute Value Type: `number` {@link BROWSER_SCRIPT_SOURCE_CHAR_POSITION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 678\n */\nexport const BROWSER_SCRIPT_SOURCE_CHAR_POSITION = 'browser.script.source_char_position';\n\n/**\n * Type for {@link BROWSER_SCRIPT_SOURCE_CHAR_POSITION} browser.script.source_char_position\n */\nexport type BROWSER_SCRIPT_SOURCE_CHAR_POSITION_TYPE = number;\n\n// Path: model/attributes/browser/browser__version.json\n\n/**\n * The version of the browser. `browser.version`\n *\n * Attribute Value Type: `string` {@link BROWSER_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SENTRY_BROWSER_VERSION} `sentry.browser.version`\n *\n * @example \"120.0.6099.130\"\n */\nexport const BROWSER_VERSION = 'browser.version';\n\n/**\n * Type for {@link BROWSER_VERSION} browser.version\n */\nexport type BROWSER_VERSION_TYPE = string;\n\n// Path: model/attributes/browser/browser__web_vital__cls__report_event.json\n\n/**\n * The event that caused the SDK to report CLS (pagehide or navigation) `browser.web_vital.cls.report_event`\n *\n * Attribute Value Type: `string` {@link BROWSER_WEB_VITAL_CLS_REPORT_EVENT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"navigation\"\n */\nexport const BROWSER_WEB_VITAL_CLS_REPORT_EVENT = 'browser.web_vital.cls.report_event';\n\n/**\n * Type for {@link BROWSER_WEB_VITAL_CLS_REPORT_EVENT} browser.web_vital.cls.report_event\n */\nexport type BROWSER_WEB_VITAL_CLS_REPORT_EVENT_TYPE = string;\n\n// Path: model/attributes/browser/browser__web_vital__cls__source__[key].json\n\n/**\n * The HTML elements or components responsible for the layout shift. <key> is a numeric index from 1 to N `browser.web_vital.cls.source.<key>`\n *\n * Attribute Value Type: `string` {@link BROWSER_WEB_VITAL_CLS_SOURCE_KEY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Has Dynamic Suffix: true\n *\n * Aliases: {@link CLS_SOURCE_KEY} `cls.source.<key>`\n *\n * @example \"body > div#app\"\n */\nexport const BROWSER_WEB_VITAL_CLS_SOURCE_KEY = 'browser.web_vital.cls.source.<key>';\n\n/**\n * Base key for {@link BROWSER_WEB_VITAL_CLS_SOURCE_KEY}. Use with a dynamic suffix, e.g. `${BROWSER_WEB_VITAL_CLS_SOURCE_KEY_BASE}.${key}`.\n */\nexport const BROWSER_WEB_VITAL_CLS_SOURCE_KEY_BASE = 'browser.web_vital.cls.source';\n\n/**\n * Type for {@link BROWSER_WEB_VITAL_CLS_SOURCE_KEY} browser.web_vital.cls.source.<key>\n */\nexport type BROWSER_WEB_VITAL_CLS_SOURCE_KEY_TYPE = string;\n\n// Path: model/attributes/browser/browser__web_vital__cls__value.json\n\n/**\n * The value of the recorded Cumulative Layout Shift (CLS) web vital `browser.web_vital.cls.value`\n *\n * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_CLS_VALUE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link CLS} `cls`\n *\n * @example 0.2361\n */\nexport const BROWSER_WEB_VITAL_CLS_VALUE = 'browser.web_vital.cls.value';\n\n/**\n * Type for {@link BROWSER_WEB_VITAL_CLS_VALUE} browser.web_vital.cls.value\n */\nexport type BROWSER_WEB_VITAL_CLS_VALUE_TYPE = number;\n\n// Path: model/attributes/browser/browser__web_vital__fcp__value.json\n\n/**\n * The time it takes for the browser to render the first piece of meaningful content on the screen `browser.web_vital.fcp.value`\n *\n * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_FCP_VALUE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link FCP} `fcp`\n *\n * @example 547.6951\n */\nexport const BROWSER_WEB_VITAL_FCP_VALUE = 'browser.web_vital.fcp.value';\n\n/**\n * Type for {@link BROWSER_WEB_VITAL_FCP_VALUE} browser.web_vital.fcp.value\n */\nexport type BROWSER_WEB_VITAL_FCP_VALUE_TYPE = number;\n\n// Path: model/attributes/browser/browser__web_vital__fp__value.json\n\n/**\n * The time in milliseconds it takes for the browser to render the first pixel on the screen `browser.web_vital.fp.value`\n *\n * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_FP_VALUE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link FP} `fp`\n *\n * @example 477.1926\n */\nexport const BROWSER_WEB_VITAL_FP_VALUE = 'browser.web_vital.fp.value';\n\n/**\n * Type for {@link BROWSER_WEB_VITAL_FP_VALUE} browser.web_vital.fp.value\n */\nexport type BROWSER_WEB_VITAL_FP_VALUE_TYPE = number;\n\n// Path: model/attributes/browser/browser__web_vital__inp__value.json\n\n/**\n * The value of the recorded Interaction to Next Paint (INP) web vital `browser.web_vital.inp.value`\n *\n * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_INP_VALUE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link INP} `inp`\n *\n * @example 200\n */\nexport const BROWSER_WEB_VITAL_INP_VALUE = 'browser.web_vital.inp.value';\n\n/**\n * Type for {@link BROWSER_WEB_VITAL_INP_VALUE} browser.web_vital.inp.value\n */\nexport type BROWSER_WEB_VITAL_INP_VALUE_TYPE = number;\n\n// Path: model/attributes/browser/browser__web_vital__lcp__element.json\n\n/**\n * The HTML element selector or component name for which LCP was reported `browser.web_vital.lcp.element`\n *\n * Attribute Value Type: `string` {@link BROWSER_WEB_VITAL_LCP_ELEMENT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link LCP_ELEMENT} `lcp.element`\n *\n * @example \"body > div#app > div#container > div\"\n */\nexport const BROWSER_WEB_VITAL_LCP_ELEMENT = 'browser.web_vital.lcp.element';\n\n/**\n * Type for {@link BROWSER_WEB_VITAL_LCP_ELEMENT} browser.web_vital.lcp.element\n */\nexport type BROWSER_WEB_VITAL_LCP_ELEMENT_TYPE = string;\n\n// Path: model/attributes/browser/browser__web_vital__lcp__id.json\n\n/**\n * The id of the dom element responsible for the largest contentful paint `browser.web_vital.lcp.id`\n *\n * Attribute Value Type: `string` {@link BROWSER_WEB_VITAL_LCP_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link LCP_ID} `lcp.id`\n *\n * @example \"#gero\"\n */\nexport const BROWSER_WEB_VITAL_LCP_ID = 'browser.web_vital.lcp.id';\n\n/**\n * Type for {@link BROWSER_WEB_VITAL_LCP_ID} browser.web_vital.lcp.id\n */\nexport type BROWSER_WEB_VITAL_LCP_ID_TYPE = string;\n\n// Path: model/attributes/browser/browser__web_vital__lcp__load_time.json\n\n/**\n * The time it took for the LCP element to be loaded `browser.web_vital.lcp.load_time`\n *\n * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_LCP_LOAD_TIME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link LCP_LOADTIME} `lcp.loadTime`\n *\n * @example 1402\n */\nexport const BROWSER_WEB_VITAL_LCP_LOAD_TIME = 'browser.web_vital.lcp.load_time';\n\n/**\n * Type for {@link BROWSER_WEB_VITAL_LCP_LOAD_TIME} browser.web_vital.lcp.load_time\n */\nexport type BROWSER_WEB_VITAL_LCP_LOAD_TIME_TYPE = number;\n\n// Path: model/attributes/browser/browser__web_vital__lcp__render_time.json\n\n/**\n * The time it took for the LCP element to be rendered `browser.web_vital.lcp.render_time`\n *\n * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_LCP_RENDER_TIME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link LCP_RENDERTIME} `lcp.renderTime`\n *\n * @example 1685\n */\nexport const BROWSER_WEB_VITAL_LCP_RENDER_TIME = 'browser.web_vital.lcp.render_time';\n\n/**\n * Type for {@link BROWSER_WEB_VITAL_LCP_RENDER_TIME} browser.web_vital.lcp.render_time\n */\nexport type BROWSER_WEB_VITAL_LCP_RENDER_TIME_TYPE = number;\n\n// Path: model/attributes/browser/browser__web_vital__lcp__report_event.json\n\n/**\n * The event that caused the SDK to report LCP (pagehide or navigation) `browser.web_vital.lcp.report_event`\n *\n * Attribute Value Type: `string` {@link BROWSER_WEB_VITAL_LCP_REPORT_EVENT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"pagehide\"\n */\nexport const BROWSER_WEB_VITAL_LCP_REPORT_EVENT = 'browser.web_vital.lcp.report_event';\n\n/**\n * Type for {@link BROWSER_WEB_VITAL_LCP_REPORT_EVENT} browser.web_vital.lcp.report_event\n */\nexport type BROWSER_WEB_VITAL_LCP_REPORT_EVENT_TYPE = string;\n\n// Path: model/attributes/browser/browser__web_vital__lcp__size.json\n\n/**\n * The size of the largest contentful paint element `browser.web_vital.lcp.size`\n *\n * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_LCP_SIZE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link LCP_SIZE} `lcp.size`\n *\n * @example 1024\n */\nexport const BROWSER_WEB_VITAL_LCP_SIZE = 'browser.web_vital.lcp.size';\n\n/**\n * Type for {@link BROWSER_WEB_VITAL_LCP_SIZE} browser.web_vital.lcp.size\n */\nexport type BROWSER_WEB_VITAL_LCP_SIZE_TYPE = number;\n\n// Path: model/attributes/browser/browser__web_vital__lcp__url.json\n\n/**\n * The url of the dom element responsible for the largest contentful paint `browser.web_vital.lcp.url`\n *\n * Attribute Value Type: `string` {@link BROWSER_WEB_VITAL_LCP_URL_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link LCP_URL} `lcp.url`\n *\n * @example \"https://example.com/static/img.png\"\n */\nexport const BROWSER_WEB_VITAL_LCP_URL = 'browser.web_vital.lcp.url';\n\n/**\n * Type for {@link BROWSER_WEB_VITAL_LCP_URL} browser.web_vital.lcp.url\n */\nexport type BROWSER_WEB_VITAL_LCP_URL_TYPE = string;\n\n// Path: model/attributes/browser/browser__web_vital__lcp__value.json\n\n/**\n * The value of the recorded Largest Contentful Paint (LCP) web vital `browser.web_vital.lcp.value`\n *\n * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_LCP_VALUE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link LCP} `lcp`\n *\n * @example 2500\n */\nexport const BROWSER_WEB_VITAL_LCP_VALUE = 'browser.web_vital.lcp.value';\n\n/**\n * Type for {@link BROWSER_WEB_VITAL_LCP_VALUE} browser.web_vital.lcp.value\n */\nexport type BROWSER_WEB_VITAL_LCP_VALUE_TYPE = number;\n\n// Path: model/attributes/browser/browser__web_vital__ttfb__request_time.json\n\n/**\n * 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 `browser.web_vital.ttfb.request_time`\n *\n * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_TTFB_REQUEST_TIME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link TTFB_REQUESTTIME} `ttfb.requestTime`\n *\n * @example 1554.5814\n */\nexport const BROWSER_WEB_VITAL_TTFB_REQUEST_TIME = 'browser.web_vital.ttfb.request_time';\n\n/**\n * Type for {@link BROWSER_WEB_VITAL_TTFB_REQUEST_TIME} browser.web_vital.ttfb.request_time\n */\nexport type BROWSER_WEB_VITAL_TTFB_REQUEST_TIME_TYPE = number;\n\n// Path: model/attributes/browser/browser__web_vital__ttfb__value.json\n\n/**\n * The value of the recorded Time To First Byte (TTFB) web vital in Milliseconds `browser.web_vital.ttfb.value`\n *\n * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_TTFB_VALUE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link TTFB} `ttfb`\n *\n * @example 194.3322\n */\nexport const BROWSER_WEB_VITAL_TTFB_VALUE = 'browser.web_vital.ttfb.value';\n\n/**\n * Type for {@link BROWSER_WEB_VITAL_TTFB_VALUE} browser.web_vital.ttfb.value\n */\nexport type BROWSER_WEB_VITAL_TTFB_VALUE_TYPE = number;\n\n// Path: model/attributes/cache/cache__hit.json\n\n/**\n * If the cache was hit during this span. `cache.hit`\n *\n * Attribute Value Type: `boolean` {@link CACHE_HIT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example true\n */\nexport const CACHE_HIT = 'cache.hit';\n\n/**\n * Type for {@link CACHE_HIT} cache.hit\n */\nexport type CACHE_HIT_TYPE = boolean;\n\n// Path: model/attributes/cache/cache__item_size.json\n\n/**\n * The size of the requested item in the cache. In bytes. `cache.item_size`\n *\n * Attribute Value Type: `number` {@link CACHE_ITEM_SIZE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 58\n */\nexport const CACHE_ITEM_SIZE = 'cache.item_size';\n\n/**\n * Type for {@link CACHE_ITEM_SIZE} cache.item_size\n */\nexport type CACHE_ITEM_SIZE_TYPE = number;\n\n// Path: model/attributes/cache/cache__key.json\n\n/**\n * The key of the cache accessed. `cache.key`\n *\n * Attribute Value Type: `Array<string>` {@link CACHE_KEY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example [\"my-cache-key\",\"my-other-cache-key\"]\n */\nexport const CACHE_KEY = 'cache.key';\n\n/**\n * Type for {@link CACHE_KEY} cache.key\n */\nexport type CACHE_KEY_TYPE = Array<string>;\n\n// Path: model/attributes/cache/cache__operation.json\n\n/**\n * The operation being performed on the cache. `cache.operation`\n *\n * Attribute Value Type: `string` {@link CACHE_OPERATION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"get\"\n */\nexport const CACHE_OPERATION = 'cache.operation';\n\n/**\n * Type for {@link CACHE_OPERATION} cache.operation\n */\nexport type CACHE_OPERATION_TYPE = string;\n\n// Path: model/attributes/cache/cache__ttl.json\n\n/**\n * The ttl of the cache in seconds `cache.ttl`\n *\n * Attribute Value Type: `number` {@link CACHE_TTL_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 120\n */\nexport const CACHE_TTL = 'cache.ttl';\n\n/**\n * Type for {@link CACHE_TTL} cache.ttl\n */\nexport type CACHE_TTL_TYPE = number;\n\n// Path: model/attributes/cache/cache__write.json\n\n/**\n * If the cache operation resulted in a write to the cache. `cache.write`\n *\n * Attribute Value Type: `boolean` {@link CACHE_WRITE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example true\n */\nexport const CACHE_WRITE = 'cache.write';\n\n/**\n * Type for {@link CACHE_WRITE} cache.write\n */\nexport type CACHE_WRITE_TYPE = boolean;\n\n// Path: model/attributes/channel.json\n\n/**\n * The channel name that is being used. `channel`\n *\n * Attribute Value Type: `string` {@link CHANNEL_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"mail\"\n */\nexport const CHANNEL = 'channel';\n\n/**\n * Type for {@link CHANNEL} channel\n */\nexport type CHANNEL_TYPE = string;\n\n// Path: model/attributes/client/client__address.json\n\n/**\n * Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name. `client.address`\n *\n * Attribute Value Type: `string` {@link CLIENT_ADDRESS_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link HTTP_CLIENT_IP} `http.client_ip`\n *\n * @example \"example.com\"\n */\nexport const CLIENT_ADDRESS = 'client.address';\n\n/**\n * Type for {@link CLIENT_ADDRESS} client.address\n */\nexport type CLIENT_ADDRESS_TYPE = string;\n\n// Path: model/attributes/client/client__port.json\n\n/**\n * Client port number. `client.port`\n *\n * Attribute Value Type: `number` {@link CLIENT_PORT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example 5432\n */\nexport const CLIENT_PORT = 'client.port';\n\n/**\n * Type for {@link CLIENT_PORT} client.port\n */\nexport type CLIENT_PORT_TYPE = number;\n\n// Path: model/attributes/cloudflare/cloudflare__d1__duration.json\n\n/**\n * The duration of a Cloudflare D1 operation. `cloudflare.d1.duration`\n *\n * Attribute Value Type: `number` {@link CLOUDFLARE_D1_DURATION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 543\n */\nexport const CLOUDFLARE_D1_DURATION = 'cloudflare.d1.duration';\n\n/**\n * Type for {@link CLOUDFLARE_D1_DURATION} cloudflare.d1.duration\n */\nexport type CLOUDFLARE_D1_DURATION_TYPE = number;\n\n// Path: model/attributes/cloudflare/cloudflare__d1__query_type.json\n\n/**\n * The type of query executed in a Cloudflare D1 operation `cloudflare.d1.query_type`\n *\n * Attribute Value Type: `string` {@link CLOUDFLARE_D1_QUERY_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link DB_OPERATION_NAME} `db.operation.name`, {@link DB_OPERATION} `db.operation`\n *\n * @deprecated Use {@link DB_OPERATION_NAME} (db.operation.name) instead\n * @example \"run\"\n */\nexport const CLOUDFLARE_D1_QUERY_TYPE = 'cloudflare.d1.query_type';\n\n/**\n * Type for {@link CLOUDFLARE_D1_QUERY_TYPE} cloudflare.d1.query_type\n */\nexport type CLOUDFLARE_D1_QUERY_TYPE_TYPE = string;\n\n// Path: model/attributes/cloudflare/cloudflare__d1__rows_read.json\n\n/**\n * The number of rows read in a Cloudflare D1 operation. `cloudflare.d1.rows_read`\n *\n * Attribute Value Type: `number` {@link CLOUDFLARE_D1_ROWS_READ_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 12\n */\nexport const CLOUDFLARE_D1_ROWS_READ = 'cloudflare.d1.rows_read';\n\n/**\n * Type for {@link CLOUDFLARE_D1_ROWS_READ} cloudflare.d1.rows_read\n */\nexport type CLOUDFLARE_D1_ROWS_READ_TYPE = number;\n\n// Path: model/attributes/cloudflare/cloudflare__d1__rows_written.json\n\n/**\n * The number of rows written in a Cloudflare D1 operation. `cloudflare.d1.rows_written`\n *\n * Attribute Value Type: `number` {@link CLOUDFLARE_D1_ROWS_WRITTEN_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 12\n */\nexport const CLOUDFLARE_D1_ROWS_WRITTEN = 'cloudflare.d1.rows_written';\n\n/**\n * Type for {@link CLOUDFLARE_D1_ROWS_WRITTEN} cloudflare.d1.rows_written\n */\nexport type CLOUDFLARE_D1_ROWS_WRITTEN_TYPE = number;\n\n// Path: model/attributes/cloudflare/cloudflare__durable_object__query__bindings.json\n\n/**\n * The number of bound parameters passed to the SQL exec call. `cloudflare.durable_object.query.bindings`\n *\n * Attribute Value Type: `number` {@link CLOUDFLARE_DURABLE_OBJECT_QUERY_BINDINGS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 2\n */\nexport const CLOUDFLARE_DURABLE_OBJECT_QUERY_BINDINGS = 'cloudflare.durable_object.query.bindings';\n\n/**\n * Type for {@link CLOUDFLARE_DURABLE_OBJECT_QUERY_BINDINGS} cloudflare.durable_object.query.bindings\n */\nexport type CLOUDFLARE_DURABLE_OBJECT_QUERY_BINDINGS_TYPE = number;\n\n// Path: model/attributes/cloudflare/cloudflare__durable_object__response__rows_read.json\n\n/**\n * The number of rows read by a Cloudflare Durable Object SQL operation. `cloudflare.durable_object.response.rows_read`\n *\n * Attribute Value Type: `number` {@link CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_READ_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 12\n */\nexport const CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_READ = 'cloudflare.durable_object.response.rows_read';\n\n/**\n * Type for {@link CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_READ} cloudflare.durable_object.response.rows_read\n */\nexport type CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_READ_TYPE = number;\n\n// Path: model/attributes/cloudflare/cloudflare__durable_object__response__rows_written.json\n\n/**\n * The number of rows written by a Cloudflare Durable Object SQL operation. `cloudflare.durable_object.response.rows_written`\n *\n * Attribute Value Type: `number` {@link CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_WRITTEN_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1\n */\nexport const CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_WRITTEN = 'cloudflare.durable_object.response.rows_written';\n\n/**\n * Type for {@link CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_WRITTEN} cloudflare.durable_object.response.rows_written\n */\nexport type CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_WRITTEN_TYPE = number;\n\n// Path: model/attributes/cloudflare/cloudflare__r2__bucket.json\n\n/**\n * The name of the Cloudflare R2 bucket binding `cloudflare.r2.bucket`\n *\n * Attribute Value Type: `string` {@link CLOUDFLARE_R2_BUCKET_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"MY_BUCKET\"\n */\nexport const CLOUDFLARE_R2_BUCKET = 'cloudflare.r2.bucket';\n\n/**\n * Type for {@link CLOUDFLARE_R2_BUCKET} cloudflare.r2.bucket\n */\nexport type CLOUDFLARE_R2_BUCKET_TYPE = string;\n\n// Path: model/attributes/cloudflare/cloudflare__r2__operation.json\n\n/**\n * The R2 API operation being performed `cloudflare.r2.operation`\n *\n * Attribute Value Type: `string` {@link CLOUDFLARE_R2_OPERATION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"GetObject\"\n */\nexport const CLOUDFLARE_R2_OPERATION = 'cloudflare.r2.operation';\n\n/**\n * Type for {@link CLOUDFLARE_R2_OPERATION} cloudflare.r2.operation\n */\nexport type CLOUDFLARE_R2_OPERATION_TYPE = string;\n\n// Path: model/attributes/cloudflare/cloudflare__r2__request__delimiter.json\n\n/**\n * The delimiter used to group objects in an R2 list operation `cloudflare.r2.request.delimiter`\n *\n * Attribute Value Type: `string` {@link CLOUDFLARE_R2_REQUEST_DELIMITER_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"/\"\n */\nexport const CLOUDFLARE_R2_REQUEST_DELIMITER = 'cloudflare.r2.request.delimiter';\n\n/**\n * Type for {@link CLOUDFLARE_R2_REQUEST_DELIMITER} cloudflare.r2.request.delimiter\n */\nexport type CLOUDFLARE_R2_REQUEST_DELIMITER_TYPE = string;\n\n// Path: model/attributes/cloudflare/cloudflare__r2__request__key.json\n\n/**\n * The object key used in the R2 operation `cloudflare.r2.request.key`\n *\n * Attribute Value Type: `string` {@link CLOUDFLARE_R2_REQUEST_KEY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"my-file.txt\"\n */\nexport const CLOUDFLARE_R2_REQUEST_KEY = 'cloudflare.r2.request.key';\n\n/**\n * Type for {@link CLOUDFLARE_R2_REQUEST_KEY} cloudflare.r2.request.key\n */\nexport type CLOUDFLARE_R2_REQUEST_KEY_TYPE = string;\n\n// Path: model/attributes/cloudflare/cloudflare__r2__request__part_number.json\n\n/**\n * The part number in a multipart upload operation `cloudflare.r2.request.part_number`\n *\n * Attribute Value Type: `number` {@link CLOUDFLARE_R2_REQUEST_PART_NUMBER_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1\n */\nexport const CLOUDFLARE_R2_REQUEST_PART_NUMBER = 'cloudflare.r2.request.part_number';\n\n/**\n * Type for {@link CLOUDFLARE_R2_REQUEST_PART_NUMBER} cloudflare.r2.request.part_number\n */\nexport type CLOUDFLARE_R2_REQUEST_PART_NUMBER_TYPE = number;\n\n// Path: model/attributes/cloudflare/cloudflare__r2__request__prefix.json\n\n/**\n * The prefix used to filter objects in an R2 list operation `cloudflare.r2.request.prefix`\n *\n * Attribute Value Type: `string` {@link CLOUDFLARE_R2_REQUEST_PREFIX_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"images/\"\n */\nexport const CLOUDFLARE_R2_REQUEST_PREFIX = 'cloudflare.r2.request.prefix';\n\n/**\n * Type for {@link CLOUDFLARE_R2_REQUEST_PREFIX} cloudflare.r2.request.prefix\n */\nexport type CLOUDFLARE_R2_REQUEST_PREFIX_TYPE = string;\n\n// Path: model/attributes/cloudflare/cloudflare__workflow__attempt.json\n\n/**\n * The current attempt number for a Cloudflare Workflow step `cloudflare.workflow.attempt`\n *\n * Attribute Value Type: `number` {@link CLOUDFLARE_WORKFLOW_ATTEMPT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1\n */\nexport const CLOUDFLARE_WORKFLOW_ATTEMPT = 'cloudflare.workflow.attempt';\n\n/**\n * Type for {@link CLOUDFLARE_WORKFLOW_ATTEMPT} cloudflare.workflow.attempt\n */\nexport type CLOUDFLARE_WORKFLOW_ATTEMPT_TYPE = number;\n\n// Path: model/attributes/cloudflare/cloudflare__workflow__retries__backoff.json\n\n/**\n * The backoff strategy for Cloudflare Workflow step retries `cloudflare.workflow.retries.backoff`\n *\n * Attribute Value Type: `string` {@link CLOUDFLARE_WORKFLOW_RETRIES_BACKOFF_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"exponential\"\n */\nexport const CLOUDFLARE_WORKFLOW_RETRIES_BACKOFF = 'cloudflare.workflow.retries.backoff';\n\n/**\n * Type for {@link CLOUDFLARE_WORKFLOW_RETRIES_BACKOFF} cloudflare.workflow.retries.backoff\n */\nexport type CLOUDFLARE_WORKFLOW_RETRIES_BACKOFF_TYPE = string;\n\n// Path: model/attributes/cloudflare/cloudflare__workflow__retries__delay.json\n\n/**\n * The delay between Cloudflare Workflow step retries `cloudflare.workflow.retries.delay`\n *\n * Attribute Value Type: `string` {@link CLOUDFLARE_WORKFLOW_RETRIES_DELAY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"5 seconds\"\n */\nexport const CLOUDFLARE_WORKFLOW_RETRIES_DELAY = 'cloudflare.workflow.retries.delay';\n\n/**\n * Type for {@link CLOUDFLARE_WORKFLOW_RETRIES_DELAY} cloudflare.workflow.retries.delay\n */\nexport type CLOUDFLARE_WORKFLOW_RETRIES_DELAY_TYPE = string;\n\n// Path: model/attributes/cloudflare/cloudflare__workflow__retries__limit.json\n\n/**\n * The maximum number of retries for a Cloudflare Workflow step `cloudflare.workflow.retries.limit`\n *\n * Attribute Value Type: `number` {@link CLOUDFLARE_WORKFLOW_RETRIES_LIMIT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 3\n */\nexport const CLOUDFLARE_WORKFLOW_RETRIES_LIMIT = 'cloudflare.workflow.retries.limit';\n\n/**\n * Type for {@link CLOUDFLARE_WORKFLOW_RETRIES_LIMIT} cloudflare.workflow.retries.limit\n */\nexport type CLOUDFLARE_WORKFLOW_RETRIES_LIMIT_TYPE = number;\n\n// Path: model/attributes/cloudflare/cloudflare__workflow__timeout.json\n\n/**\n * The timeout duration for a Cloudflare Workflow step `cloudflare.workflow.timeout`\n *\n * Attribute Value Type: `string` {@link CLOUDFLARE_WORKFLOW_TIMEOUT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"1 minute\"\n */\nexport const CLOUDFLARE_WORKFLOW_TIMEOUT = 'cloudflare.workflow.timeout';\n\n/**\n * Type for {@link CLOUDFLARE_WORKFLOW_TIMEOUT} cloudflare.workflow.timeout\n */\nexport type CLOUDFLARE_WORKFLOW_TIMEOUT_TYPE = string;\n\n// Path: model/attributes/cloud/cloud__account__id.json\n\n/**\n * The cloud account ID the resource is assigned to `cloud.account.id`\n *\n * Attribute Value Type: `string` {@link CLOUD_ACCOUNT_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"123456789012\"\n */\nexport const CLOUD_ACCOUNT_ID = 'cloud.account.id';\n\n/**\n * Type for {@link CLOUD_ACCOUNT_ID} cloud.account.id\n */\nexport type CLOUD_ACCOUNT_ID_TYPE = string;\n\n// Path: model/attributes/cloud/cloud__availability_zone.json\n\n/**\n * Cloud regions often have multiple, isolated locations known as zones to increase availability `cloud.availability_zone`\n *\n * Attribute Value Type: `string` {@link CLOUD_AVAILABILITY_ZONE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"us-east-1c\"\n */\nexport const CLOUD_AVAILABILITY_ZONE = 'cloud.availability_zone';\n\n/**\n * Type for {@link CLOUD_AVAILABILITY_ZONE} cloud.availability_zone\n */\nexport type CLOUD_AVAILABILITY_ZONE_TYPE = string;\n\n// Path: model/attributes/cloud/cloud__platform.json\n\n/**\n * The cloud platform in use `cloud.platform`\n *\n * Attribute Value Type: `string` {@link CLOUD_PLATFORM_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"aws_lambda\"\n */\nexport const CLOUD_PLATFORM = 'cloud.platform';\n\n/**\n * Type for {@link CLOUD_PLATFORM} cloud.platform\n */\nexport type CLOUD_PLATFORM_TYPE = string;\n\n// Path: model/attributes/cloud/cloud__provider.json\n\n/**\n * Name of the cloud provider `cloud.provider`\n *\n * Attribute Value Type: `string` {@link CLOUD_PROVIDER_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"aws\"\n */\nexport const CLOUD_PROVIDER = 'cloud.provider';\n\n/**\n * Type for {@link CLOUD_PROVIDER} cloud.provider\n */\nexport type CLOUD_PROVIDER_TYPE = string;\n\n// Path: model/attributes/cloud/cloud__region.json\n\n/**\n * The geographical region the resource is running `cloud.region`\n *\n * Attribute Value Type: `string` {@link CLOUD_REGION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"us-east-1\"\n */\nexport const CLOUD_REGION = 'cloud.region';\n\n/**\n * Type for {@link CLOUD_REGION} cloud.region\n */\nexport type CLOUD_REGION_TYPE = string;\n\n// Path: model/attributes/cloud/cloud__resource_id.json\n\n/**\n * Cloud provider-specific native identifier of the monitored cloud resource `cloud.resource_id`\n *\n * Attribute Value Type: `string` {@link CLOUD_RESOURCE_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link FAAS_ID} `faas.id`\n *\n * @example \"arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function\"\n */\nexport const CLOUD_RESOURCE_ID = 'cloud.resource_id';\n\n/**\n * Type for {@link CLOUD_RESOURCE_ID} cloud.resource_id\n */\nexport type CLOUD_RESOURCE_ID_TYPE = string;\n\n// Path: model/attributes/cls.json\n\n/**\n * The value of the recorded Cumulative Layout Shift (CLS) web vital `cls`\n *\n * Attribute Value Type: `number` {@link CLS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link BROWSER_WEB_VITAL_CLS_VALUE} `browser.web_vital.cls.value`\n *\n * @deprecated Use {@link BROWSER_WEB_VITAL_CLS_VALUE} (browser.web_vital.cls.value) instead - The CLS web vital is now recorded as a browser.web_vital.cls.value attribute.\n * @example 0.2361\n */\nexport const CLS = 'cls';\n\n/**\n * Type for {@link CLS} cls\n */\nexport type CLS_TYPE = number;\n\n// Path: model/attributes/cls/cls__source__[key].json\n\n/**\n * The HTML elements or components responsible for the layout shift. <key> is a numeric index from 1 to N `cls.source.<key>`\n *\n * Attribute Value Type: `string` {@link CLS_SOURCE_KEY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Has Dynamic Suffix: true\n *\n * Aliases: {@link BROWSER_WEB_VITAL_CLS_SOURCE_KEY} `browser.web_vital.cls.source.<key>`\n *\n * @deprecated Use {@link BROWSER_WEB_VITAL_CLS_SOURCE_KEY} (browser.web_vital.cls.source.<key>) instead - The CLS source is now recorded as a browser.web_vital.cls.source.<key> attribute.\n * @example \"body > div#app\"\n */\nexport const CLS_SOURCE_KEY = 'cls.source.<key>';\n\n/**\n * Base key for {@link CLS_SOURCE_KEY}. Use with a dynamic suffix, e.g. `${CLS_SOURCE_KEY_BASE}.${key}`.\n *\n * @deprecated Use {@link BROWSER_WEB_VITAL_CLS_SOURCE_KEY_BASE} (browser.web_vital.cls.source) instead - The CLS source is now recorded as a browser.web_vital.cls.source.<key> attribute.\n */\nexport const CLS_SOURCE_KEY_BASE = 'cls.source';\n\n/**\n * Type for {@link CLS_SOURCE_KEY} cls.source.<key>\n */\nexport type CLS_SOURCE_KEY_TYPE = string;\n\n// Path: model/attributes/code/code__filepath.json\n\n/**\n * The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path). `code.filepath`\n *\n * Attribute Value Type: `string` {@link CODE_FILEPATH_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link CODE_FILE_PATH} `code.file.path`\n *\n * @deprecated Use {@link CODE_FILE_PATH} (code.file.path) instead\n * @example \"/app/myapplication/http/handler/server.py\"\n */\nexport const CODE_FILEPATH = 'code.filepath';\n\n/**\n * Type for {@link CODE_FILEPATH} code.filepath\n */\nexport type CODE_FILEPATH_TYPE = string;\n\n// Path: model/attributes/code/code__file__path.json\n\n/**\n * The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path). `code.file.path`\n *\n * Attribute Value Type: `string` {@link CODE_FILE_PATH_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link CODE_FILEPATH} `code.filepath`\n *\n * @example \"/app/myapplication/http/handler/server.py\"\n */\nexport const CODE_FILE_PATH = 'code.file.path';\n\n/**\n * Type for {@link CODE_FILE_PATH} code.file.path\n */\nexport type CODE_FILE_PATH_TYPE = string;\n\n// Path: model/attributes/code/code__function.json\n\n/**\n * The method or function name, or equivalent (usually rightmost part of the code unit's name). `code.function`\n *\n * Attribute Value Type: `string` {@link CODE_FUNCTION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link CODE_FUNCTION_NAME} `code.function.name`\n *\n * @example \"server_request\"\n */\nexport const CODE_FUNCTION = 'code.function';\n\n/**\n * Type for {@link CODE_FUNCTION} code.function\n */\nexport type CODE_FUNCTION_TYPE = string;\n\n// Path: model/attributes/code/code__function__name.json\n\n/**\n * The method or function fully-qualified name without arguments. `code.function.name`\n *\n * Attribute Value Type: `string` {@link CODE_FUNCTION_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link CODE_FUNCTION} `code.function`\n *\n * @example \"server_request\"\n */\nexport const CODE_FUNCTION_NAME = 'code.function.name';\n\n/**\n * Type for {@link CODE_FUNCTION_NAME} code.function.name\n */\nexport type CODE_FUNCTION_NAME_TYPE = string;\n\n// Path: model/attributes/code/code__lineno.json\n\n/**\n * The line number in code.filepath best representing the operation. It SHOULD point within the code unit named in code.function `code.lineno`\n *\n * Attribute Value Type: `number` {@link CODE_LINENO_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link CODE_LINE_NUMBER} `code.line.number`\n *\n * @deprecated Use {@link CODE_LINE_NUMBER} (code.line.number) instead\n * @example 42\n */\nexport const CODE_LINENO = 'code.lineno';\n\n/**\n * Type for {@link CODE_LINENO} code.lineno\n */\nexport type CODE_LINENO_TYPE = number;\n\n// Path: model/attributes/code/code__line__number.json\n\n/**\n * The line number in code.filepath best representing the operation. It SHOULD point within the code unit named in code.function `code.line.number`\n *\n * Attribute Value Type: `number` {@link CODE_LINE_NUMBER_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link CODE_LINENO} `code.lineno`\n *\n * @example 42\n */\nexport const CODE_LINE_NUMBER = 'code.line.number';\n\n/**\n * Type for {@link CODE_LINE_NUMBER} code.line.number\n */\nexport type CODE_LINE_NUMBER_TYPE = number;\n\n// Path: model/attributes/code/code__namespace.json\n\n/**\n * 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. `code.namespace`\n *\n * Attribute Value Type: `string` {@link CODE_NAMESPACE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"http.handler\"\n */\nexport const CODE_NAMESPACE = 'code.namespace';\n\n/**\n * Type for {@link CODE_NAMESPACE} code.namespace\n */\nexport type CODE_NAMESPACE_TYPE = string;\n\n// Path: model/attributes/connectionType.json\n\n/**\n * Specifies the type of the current connection (e.g. wifi, ethernet, cellular , etc). `connectionType`\n *\n * Attribute Value Type: `string` {@link CONNECTIONTYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link NETWORK_CONNECTION_TYPE} `network.connection.type`, {@link DEVICE_CONNECTION_TYPE} `device.connection_type`\n *\n * @deprecated Use {@link NETWORK_CONNECTION_TYPE} (network.connection.type) instead - Old namespace-less attribute, to be replaced with network.connection.type for span-first future\n * @example \"wifi\"\n */\nexport const CONNECTIONTYPE = 'connectionType';\n\n/**\n * Type for {@link CONNECTIONTYPE} connectionType\n */\nexport type CONNECTIONTYPE_TYPE = string;\n\n// Path: model/attributes/connection/connection__rtt.json\n\n/**\n * Specifies the estimated effective round-trip time of the current connection, in milliseconds. `connection.rtt`\n *\n * Attribute Value Type: `number` {@link CONNECTION_RTT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link NETWORK_CONNECTION_RTT} `network.connection.rtt`\n *\n * @deprecated Use {@link NETWORK_CONNECTION_RTT} (network.connection.rtt) instead - Old attribute name (no official namespace), to be replaced with network.connection.rtt for span-first future\n * @example 100\n */\nexport const CONNECTION_RTT = 'connection.rtt';\n\n/**\n * Type for {@link CONNECTION_RTT} connection.rtt\n */\nexport type CONNECTION_RTT_TYPE = number;\n\n// Path: model/attributes/culture/culture__calendar.json\n\n/**\n * The calendar system used by the culture. `culture.calendar`\n *\n * Attribute Value Type: `string` {@link CULTURE_CALENDAR_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"GregorianCalendar\"\n */\nexport const CULTURE_CALENDAR = 'culture.calendar';\n\n/**\n * Type for {@link CULTURE_CALENDAR} culture.calendar\n */\nexport type CULTURE_CALENDAR_TYPE = string;\n\n// Path: model/attributes/culture/culture__display_name.json\n\n/**\n * Human readable name of the culture. `culture.display_name`\n *\n * Attribute Value Type: `string` {@link CULTURE_DISPLAY_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"English (United States)\"\n */\nexport const CULTURE_DISPLAY_NAME = 'culture.display_name';\n\n/**\n * Type for {@link CULTURE_DISPLAY_NAME} culture.display_name\n */\nexport type CULTURE_DISPLAY_NAME_TYPE = string;\n\n// Path: model/attributes/culture/culture__is_24_hour_format.json\n\n/**\n * Whether the culture uses 24-hour time format. `culture.is_24_hour_format`\n *\n * Attribute Value Type: `boolean` {@link CULTURE_IS_24_HOUR_FORMAT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example true\n */\nexport const CULTURE_IS_24_HOUR_FORMAT = 'culture.is_24_hour_format';\n\n/**\n * Type for {@link CULTURE_IS_24_HOUR_FORMAT} culture.is_24_hour_format\n */\nexport type CULTURE_IS_24_HOUR_FORMAT_TYPE = boolean;\n\n// Path: model/attributes/culture/culture__locale.json\n\n/**\n * The locale identifier following RFC 4646. `culture.locale`\n *\n * Attribute Value Type: `string` {@link CULTURE_LOCALE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"en-US\"\n */\nexport const CULTURE_LOCALE = 'culture.locale';\n\n/**\n * Type for {@link CULTURE_LOCALE} culture.locale\n */\nexport type CULTURE_LOCALE_TYPE = string;\n\n// Path: model/attributes/culture/culture__timezone.json\n\n/**\n * The timezone of the culture, as a geographic timezone identifier. `culture.timezone`\n *\n * Attribute Value Type: `string` {@link CULTURE_TIMEZONE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"Europe/Vienna\"\n */\nexport const CULTURE_TIMEZONE = 'culture.timezone';\n\n/**\n * Type for {@link CULTURE_TIMEZONE} culture.timezone\n */\nexport type CULTURE_TIMEZONE_TYPE = string;\n\n// Path: model/attributes/db/db__collection__name.json\n\n/**\n * The name of a collection (table, container) within the database. `db.collection.name`\n *\n * Attribute Value Type: `string` {@link DB_COLLECTION_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"users\"\n */\nexport const DB_COLLECTION_NAME = 'db.collection.name';\n\n/**\n * Type for {@link DB_COLLECTION_NAME} db.collection.name\n */\nexport type DB_COLLECTION_NAME_TYPE = string;\n\n// Path: model/attributes/db/db__driver__name.json\n\n/**\n * The name of the driver used for the database connection. `db.driver.name`\n *\n * Attribute Value Type: `string` {@link DB_DRIVER_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"psycopg2\"\n */\nexport const DB_DRIVER_NAME = 'db.driver.name';\n\n/**\n * Type for {@link DB_DRIVER_NAME} db.driver.name\n */\nexport type DB_DRIVER_NAME_TYPE = string;\n\n// Path: model/attributes/db/db__name.json\n\n/**\n * The name of the database being accessed. `db.name`\n *\n * Attribute Value Type: `string` {@link DB_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link DB_NAMESPACE} `db.namespace`\n *\n * @deprecated Use {@link DB_NAMESPACE} (db.namespace) instead\n * @example \"customers\"\n */\nexport const DB_NAME = 'db.name';\n\n/**\n * Type for {@link DB_NAME} db.name\n */\nexport type DB_NAME_TYPE = string;\n\n// Path: model/attributes/db/db__namespace.json\n\n/**\n * The name of the database being accessed. `db.namespace`\n *\n * Attribute Value Type: `string` {@link DB_NAMESPACE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link DB_NAME} `db.name`\n *\n * @example \"customers\"\n */\nexport const DB_NAMESPACE = 'db.namespace';\n\n/**\n * Type for {@link DB_NAMESPACE} db.namespace\n */\nexport type DB_NAMESPACE_TYPE = string;\n\n// Path: model/attributes/db/db__operation.json\n\n/**\n * The name of the operation being executed. `db.operation`\n *\n * Attribute Value Type: `string` {@link DB_OPERATION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link DB_OPERATION_NAME} `db.operation.name`, {@link CLOUDFLARE_D1_QUERY_TYPE} `cloudflare.d1.query_type`\n *\n * @deprecated Use {@link DB_OPERATION_NAME} (db.operation.name) instead\n * @example \"SELECT\"\n */\nexport const DB_OPERATION = 'db.operation';\n\n/**\n * Type for {@link DB_OPERATION} db.operation\n */\nexport type DB_OPERATION_TYPE = string;\n\n// Path: model/attributes/db/db__operation__batch__size.json\n\n/**\n * 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. `db.operation.batch.size`\n *\n * Attribute Value Type: `number` {@link DB_OPERATION_BATCH_SIZE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example 3\n */\nexport const DB_OPERATION_BATCH_SIZE = 'db.operation.batch.size';\n\n/**\n * Type for {@link DB_OPERATION_BATCH_SIZE} db.operation.batch.size\n */\nexport type DB_OPERATION_BATCH_SIZE_TYPE = number;\n\n// Path: model/attributes/db/db__operation__name.json\n\n/**\n * The name of the operation being executed. `db.operation.name`\n *\n * Attribute Value Type: `string` {@link DB_OPERATION_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link DB_OPERATION} `db.operation`, {@link CLOUDFLARE_D1_QUERY_TYPE} `cloudflare.d1.query_type`\n *\n * @example \"SELECT\"\n */\nexport const DB_OPERATION_NAME = 'db.operation.name';\n\n/**\n * Type for {@link DB_OPERATION_NAME} db.operation.name\n */\nexport type DB_OPERATION_NAME_TYPE = string;\n\n// Path: model/attributes/db/db__query__parameter__[key].json\n\n/**\n * 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. `db.query.parameter.<key>`\n *\n * Attribute Value Type: `string` {@link DB_QUERY_PARAMETER_KEY_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Has Dynamic Suffix: true\n *\n * @example \"db.query.parameter.foo='123'\"\n */\nexport const DB_QUERY_PARAMETER_KEY = 'db.query.parameter.<key>';\n\n/**\n * Base key for {@link DB_QUERY_PARAMETER_KEY}. Use with a dynamic suffix, e.g. `${DB_QUERY_PARAMETER_KEY_BASE}.${key}`.\n */\nexport const DB_QUERY_PARAMETER_KEY_BASE = 'db.query.parameter';\n\n/**\n * Type for {@link DB_QUERY_PARAMETER_KEY} db.query.parameter.<key>\n */\nexport type DB_QUERY_PARAMETER_KEY_TYPE = string;\n\n// Path: model/attributes/db/db__query__summary.json\n\n/**\n * A shortened representation of operation(s) in the full query. This attribute must be low-cardinality and should only contain the operation table names. `db.query.summary`\n *\n * Attribute Value Type: `string` {@link DB_QUERY_SUMMARY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"SELECT users\"\n */\nexport const DB_QUERY_SUMMARY = 'db.query.summary';\n\n/**\n * Type for {@link DB_QUERY_SUMMARY} db.query.summary\n */\nexport type DB_QUERY_SUMMARY_TYPE = string;\n\n// Path: model/attributes/db/db__query__text.json\n\n/**\n * 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. `db.query.text`\n *\n * Attribute Value Type: `string` {@link DB_QUERY_TEXT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link DB_STATEMENT} `db.statement`\n *\n * @example \"SELECT * FROM users WHERE id = $1\"\n */\nexport const DB_QUERY_TEXT = 'db.query.text';\n\n/**\n * Type for {@link DB_QUERY_TEXT} db.query.text\n */\nexport type DB_QUERY_TEXT_TYPE = string;\n\n// Path: model/attributes/db/db__redis__connection.json\n\n/**\n * The redis connection name. `db.redis.connection`\n *\n * Attribute Value Type: `string` {@link DB_REDIS_CONNECTION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"my-redis-instance\"\n */\nexport const DB_REDIS_CONNECTION = 'db.redis.connection';\n\n/**\n * Type for {@link DB_REDIS_CONNECTION} db.redis.connection\n */\nexport type DB_REDIS_CONNECTION_TYPE = string;\n\n// Path: model/attributes/db/db__redis__key.json\n\n/**\n * The key the Redis command is operating on. `db.redis.key`\n *\n * Attribute Value Type: `string` {@link DB_REDIS_KEY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"user:2047:city\"\n */\nexport const DB_REDIS_KEY = 'db.redis.key';\n\n/**\n * Type for {@link DB_REDIS_KEY} db.redis.key\n */\nexport type DB_REDIS_KEY_TYPE = string;\n\n// Path: model/attributes/db/db__redis__parameters.json\n\n/**\n * The array of command parameters given to a redis command. `db.redis.parameters`\n *\n * Attribute Value Type: `Array<string>` {@link DB_REDIS_PARAMETERS_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example [\"test\",\"*\"]\n */\nexport const DB_REDIS_PARAMETERS = 'db.redis.parameters';\n\n/**\n * Type for {@link DB_REDIS_PARAMETERS} db.redis.parameters\n */\nexport type DB_REDIS_PARAMETERS_TYPE = Array<string>;\n\n// Path: model/attributes/db/db__response__status_code.json\n\n/**\n * 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. `db.response.status_code`\n *\n * Attribute Value Type: `string` {@link DB_RESPONSE_STATUS_CODE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"ORA-17002\"\n */\nexport const DB_RESPONSE_STATUS_CODE = 'db.response.status_code';\n\n/**\n * Type for {@link DB_RESPONSE_STATUS_CODE} db.response.status_code\n */\nexport type DB_RESPONSE_STATUS_CODE_TYPE = string;\n\n// Path: model/attributes/db/db__sql__bindings.json\n\n/**\n * The array of query bindings. `db.sql.bindings`\n *\n * Attribute Value Type: `Array<string>` {@link DB_SQL_BINDINGS_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated Use {@link DB_QUERY_PARAMETER_KEY} (db.query.parameter.<key>) instead - Instead of adding every binding in the db.sql.bindings attribute, add them as individual entires with db.query.parameter.<key>.\n * @example [\"1\",\"foo\"]\n */\nexport const DB_SQL_BINDINGS = 'db.sql.bindings';\n\n/**\n * Type for {@link DB_SQL_BINDINGS} db.sql.bindings\n */\nexport type DB_SQL_BINDINGS_TYPE = Array<string>;\n\n// Path: model/attributes/db/db__statement.json\n\n/**\n * The database statement being executed. `db.statement`\n *\n * Attribute Value Type: `string` {@link DB_STATEMENT_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link DB_QUERY_TEXT} `db.query.text`\n *\n * @deprecated Use {@link DB_QUERY_TEXT} (db.query.text) instead\n * @example \"SELECT * FROM users\"\n */\nexport const DB_STATEMENT = 'db.statement';\n\n/**\n * Type for {@link DB_STATEMENT} db.statement\n */\nexport type DB_STATEMENT_TYPE = string;\n\n// Path: model/attributes/db/db__stored_procedure__name.json\n\n/**\n * The name of a stored procedure being called. `db.stored_procedure.name`\n *\n * Attribute Value Type: `string` {@link DB_STORED_PROCEDURE_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"GetUserById\"\n */\nexport const DB_STORED_PROCEDURE_NAME = 'db.stored_procedure.name';\n\n/**\n * Type for {@link DB_STORED_PROCEDURE_NAME} db.stored_procedure.name\n */\nexport type DB_STORED_PROCEDURE_NAME_TYPE = string;\n\n// Path: model/attributes/db/db__system.json\n\n/**\n * 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. `db.system`\n *\n * Attribute Value Type: `string` {@link DB_SYSTEM_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link DB_SYSTEM_NAME} `db.system.name`\n *\n * @deprecated Use {@link DB_SYSTEM_NAME} (db.system.name) instead\n * @example \"postgresql\"\n */\nexport const DB_SYSTEM = 'db.system';\n\n/**\n * Type for {@link DB_SYSTEM} db.system\n */\nexport type DB_SYSTEM_TYPE = string;\n\n// Path: model/attributes/db/db__system__name.json\n\n/**\n * 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. `db.system.name`\n *\n * Attribute Value Type: `string` {@link DB_SYSTEM_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link DB_SYSTEM} `db.system`\n *\n * @example \"postgresql\"\n */\nexport const DB_SYSTEM_NAME = 'db.system.name';\n\n/**\n * Type for {@link DB_SYSTEM_NAME} db.system.name\n */\nexport type DB_SYSTEM_NAME_TYPE = string;\n\n// Path: model/attributes/db/db__user.json\n\n/**\n * The database user. `db.user`\n *\n * Attribute Value Type: `string` {@link DB_USER_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"fancy_user\"\n */\nexport const DB_USER = 'db.user';\n\n/**\n * Type for {@link DB_USER} db.user\n */\nexport type DB_USER_TYPE = string;\n\n// Path: model/attributes/deviceMemory.json\n\n/**\n * The estimated total memory capacity of the device, only a rough estimation in gigabytes. `deviceMemory`\n *\n * Attribute Value Type: `string` {@link DEVICEMEMORY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link DEVICE_MEMORY_ESTIMATED_CAPACITY} `device.memory.estimated_capacity`\n *\n * @deprecated Use {@link DEVICE_MEMORY_ESTIMATED_CAPACITY} (device.memory.estimated_capacity) instead - Old namespace-less attribute, to be replaced with device.memory.estimated_capacity for span-first future\n * @example \"8 GB\"\n */\nexport const DEVICEMEMORY = 'deviceMemory';\n\n/**\n * Type for {@link DEVICEMEMORY} deviceMemory\n */\nexport type DEVICEMEMORY_TYPE = string;\n\n// Path: model/attributes/device/device__archs.json\n\n/**\n * The CPU architectures of the device. `device.archs`\n *\n * Attribute Value Type: `Array<string>` {@link DEVICE_ARCHS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example [\"arm64-v8a\",\"armeabi-v7a\",\"armeabi\"]\n */\nexport const DEVICE_ARCHS = 'device.archs';\n\n/**\n * Type for {@link DEVICE_ARCHS} device.archs\n */\nexport type DEVICE_ARCHS_TYPE = Array<string>;\n\n// Path: model/attributes/device/device__battery_level.json\n\n/**\n * The battery level of the device as a percentage (0-100). `device.battery_level`\n *\n * Attribute Value Type: `number` {@link DEVICE_BATTERY_LEVEL_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 100\n */\nexport const DEVICE_BATTERY_LEVEL = 'device.battery_level';\n\n/**\n * Type for {@link DEVICE_BATTERY_LEVEL} device.battery_level\n */\nexport type DEVICE_BATTERY_LEVEL_TYPE = number;\n\n// Path: model/attributes/device/device__battery_temperature.json\n\n/**\n * The battery temperature of the device in Celsius. `device.battery_temperature`\n *\n * Attribute Value Type: `number` {@link DEVICE_BATTERY_TEMPERATURE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 25\n */\nexport const DEVICE_BATTERY_TEMPERATURE = 'device.battery_temperature';\n\n/**\n * Type for {@link DEVICE_BATTERY_TEMPERATURE} device.battery_temperature\n */\nexport type DEVICE_BATTERY_TEMPERATURE_TYPE = number;\n\n// Path: model/attributes/device/device__boot_time.json\n\n/**\n * A formatted UTC timestamp when the system was booted. `device.boot_time`\n *\n * Attribute Value Type: `string` {@link DEVICE_BOOT_TIME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"2018-02-08T12:52:12Z\"\n */\nexport const DEVICE_BOOT_TIME = 'device.boot_time';\n\n/**\n * Type for {@link DEVICE_BOOT_TIME} device.boot_time\n */\nexport type DEVICE_BOOT_TIME_TYPE = string;\n\n// Path: model/attributes/device/device__brand.json\n\n/**\n * The brand of the device. `device.brand`\n *\n * Attribute Value Type: `string` {@link DEVICE_BRAND_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"Apple\"\n */\nexport const DEVICE_BRAND = 'device.brand';\n\n/**\n * Type for {@link DEVICE_BRAND} device.brand\n */\nexport type DEVICE_BRAND_TYPE = string;\n\n// Path: model/attributes/device/device__charging.json\n\n/**\n * Whether the device was charging or not. `device.charging`\n *\n * Attribute Value Type: `boolean` {@link DEVICE_CHARGING_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example false\n */\nexport const DEVICE_CHARGING = 'device.charging';\n\n/**\n * Type for {@link DEVICE_CHARGING} device.charging\n */\nexport type DEVICE_CHARGING_TYPE = boolean;\n\n// Path: model/attributes/device/device__chipset.json\n\n/**\n * The chipset of the device. `device.chipset`\n *\n * Attribute Value Type: `string` {@link DEVICE_CHIPSET_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"Qualcomm SM8550\"\n */\nexport const DEVICE_CHIPSET = 'device.chipset';\n\n/**\n * Type for {@link DEVICE_CHIPSET} device.chipset\n */\nexport type DEVICE_CHIPSET_TYPE = string;\n\n// Path: model/attributes/device/device__class.json\n\n/**\n * The classification of the device. For example, `low`, `medium`, or `high`. Typically inferred by Relay - SDKs generally do not need to set this directly. `device.class`\n *\n * Attribute Value Type: `string` {@link DEVICE_CLASS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"medium\"\n */\nexport const DEVICE_CLASS = 'device.class';\n\n/**\n * Type for {@link DEVICE_CLASS} device.class\n */\nexport type DEVICE_CLASS_TYPE = string;\n\n// Path: model/attributes/device/device__connection_type.json\n\n/**\n * The internet connection type currently being used by the device. `device.connection_type`\n *\n * Attribute Value Type: `string` {@link DEVICE_CONNECTION_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link NETWORK_CONNECTION_TYPE} `network.connection.type`, {@link CONNECTIONTYPE} `connectionType`\n *\n * @deprecated Use {@link NETWORK_CONNECTION_TYPE} (network.connection.type) instead - This attribute is being deprecated in favor of network.connection.type\n * @example \"wifi\"\n */\nexport const DEVICE_CONNECTION_TYPE = 'device.connection_type';\n\n/**\n * Type for {@link DEVICE_CONNECTION_TYPE} device.connection_type\n */\nexport type DEVICE_CONNECTION_TYPE_TYPE = string;\n\n// Path: model/attributes/device/device__cpu_description.json\n\n/**\n * A description of the CPU of the device. `device.cpu_description`\n *\n * Attribute Value Type: `string` {@link DEVICE_CPU_DESCRIPTION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz\"\n */\nexport const DEVICE_CPU_DESCRIPTION = 'device.cpu_description';\n\n/**\n * Type for {@link DEVICE_CPU_DESCRIPTION} device.cpu_description\n */\nexport type DEVICE_CPU_DESCRIPTION_TYPE = string;\n\n// Path: model/attributes/device/device__external_free_storage.json\n\n/**\n * External storage free size in bytes. `device.external_free_storage`\n *\n * Attribute Value Type: `number` {@link DEVICE_EXTERNAL_FREE_STORAGE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 67108864000\n */\nexport const DEVICE_EXTERNAL_FREE_STORAGE = 'device.external_free_storage';\n\n/**\n * Type for {@link DEVICE_EXTERNAL_FREE_STORAGE} device.external_free_storage\n */\nexport type DEVICE_EXTERNAL_FREE_STORAGE_TYPE = number;\n\n// Path: model/attributes/device/device__external_storage_size.json\n\n/**\n * External storage total size in bytes. `device.external_storage_size`\n *\n * Attribute Value Type: `number` {@link DEVICE_EXTERNAL_STORAGE_SIZE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 134217728000\n */\nexport const DEVICE_EXTERNAL_STORAGE_SIZE = 'device.external_storage_size';\n\n/**\n * Type for {@link DEVICE_EXTERNAL_STORAGE_SIZE} device.external_storage_size\n */\nexport type DEVICE_EXTERNAL_STORAGE_SIZE_TYPE = number;\n\n// Path: model/attributes/device/device__family.json\n\n/**\n * The family of the device. `device.family`\n *\n * Attribute Value Type: `string` {@link DEVICE_FAMILY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"iPhone\"\n */\nexport const DEVICE_FAMILY = 'device.family';\n\n/**\n * Type for {@link DEVICE_FAMILY} device.family\n */\nexport type DEVICE_FAMILY_TYPE = string;\n\n// Path: model/attributes/device/device__free_memory.json\n\n/**\n * Free system memory in bytes. `device.free_memory`\n *\n * Attribute Value Type: `number` {@link DEVICE_FREE_MEMORY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 2147483648\n */\nexport const DEVICE_FREE_MEMORY = 'device.free_memory';\n\n/**\n * Type for {@link DEVICE_FREE_MEMORY} device.free_memory\n */\nexport type DEVICE_FREE_MEMORY_TYPE = number;\n\n// Path: model/attributes/device/device__free_storage.json\n\n/**\n * Free device storage in bytes. `device.free_storage`\n *\n * Attribute Value Type: `number` {@link DEVICE_FREE_STORAGE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 107374182400\n */\nexport const DEVICE_FREE_STORAGE = 'device.free_storage';\n\n/**\n * Type for {@link DEVICE_FREE_STORAGE} device.free_storage\n */\nexport type DEVICE_FREE_STORAGE_TYPE = number;\n\n// Path: model/attributes/device/device__id.json\n\n/**\n * Unique device identifier. `device.id`\n *\n * Attribute Value Type: `string` {@link DEVICE_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\"\n */\nexport const DEVICE_ID = 'device.id';\n\n/**\n * Type for {@link DEVICE_ID} device.id\n */\nexport type DEVICE_ID_TYPE = string;\n\n// Path: model/attributes/device/device__locale.json\n\n/**\n * The locale of the device. `device.locale`\n *\n * Attribute Value Type: `string` {@link DEVICE_LOCALE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"en-US\"\n */\nexport const DEVICE_LOCALE = 'device.locale';\n\n/**\n * Type for {@link DEVICE_LOCALE} device.locale\n */\nexport type DEVICE_LOCALE_TYPE = string;\n\n// Path: model/attributes/device/device__low_memory.json\n\n/**\n * Whether the device was low on memory. `device.low_memory`\n *\n * Attribute Value Type: `boolean` {@link DEVICE_LOW_MEMORY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example false\n */\nexport const DEVICE_LOW_MEMORY = 'device.low_memory';\n\n/**\n * Type for {@link DEVICE_LOW_MEMORY} device.low_memory\n */\nexport type DEVICE_LOW_MEMORY_TYPE = boolean;\n\n// Path: model/attributes/device/device__low_power_mode.json\n\n/**\n * Whether the device is in Low Power Mode. `device.low_power_mode`\n *\n * Attribute Value Type: `boolean` {@link DEVICE_LOW_POWER_MODE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example true\n */\nexport const DEVICE_LOW_POWER_MODE = 'device.low_power_mode';\n\n/**\n * Type for {@link DEVICE_LOW_POWER_MODE} device.low_power_mode\n */\nexport type DEVICE_LOW_POWER_MODE_TYPE = boolean;\n\n// Path: model/attributes/device/device__manufacturer.json\n\n/**\n * The manufacturer of the device. `device.manufacturer`\n *\n * Attribute Value Type: `string` {@link DEVICE_MANUFACTURER_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"Google\"\n */\nexport const DEVICE_MANUFACTURER = 'device.manufacturer';\n\n/**\n * Type for {@link DEVICE_MANUFACTURER} device.manufacturer\n */\nexport type DEVICE_MANUFACTURER_TYPE = string;\n\n// Path: model/attributes/device/device__memory__estimated_capacity.json\n\n/**\n * 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 `device.memory.estimated_capacity`\n *\n * Attribute Value Type: `number` {@link DEVICE_MEMORY_ESTIMATED_CAPACITY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link DEVICEMEMORY} `deviceMemory`\n *\n * @example 8\n */\nexport const DEVICE_MEMORY_ESTIMATED_CAPACITY = 'device.memory.estimated_capacity';\n\n/**\n * Type for {@link DEVICE_MEMORY_ESTIMATED_CAPACITY} device.memory.estimated_capacity\n */\nexport type DEVICE_MEMORY_ESTIMATED_CAPACITY_TYPE = number;\n\n// Path: model/attributes/device/device__memory_size.json\n\n/**\n * Total system memory available in bytes. `device.memory_size`\n *\n * Attribute Value Type: `number` {@link DEVICE_MEMORY_SIZE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 17179869184\n */\nexport const DEVICE_MEMORY_SIZE = 'device.memory_size';\n\n/**\n * Type for {@link DEVICE_MEMORY_SIZE} device.memory_size\n */\nexport type DEVICE_MEMORY_SIZE_TYPE = number;\n\n// Path: model/attributes/device/device__model.json\n\n/**\n * The model of the device. `device.model`\n *\n * Attribute Value Type: `string` {@link DEVICE_MODEL_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"iPhone 15 Pro Max\"\n */\nexport const DEVICE_MODEL = 'device.model';\n\n/**\n * Type for {@link DEVICE_MODEL} device.model\n */\nexport type DEVICE_MODEL_TYPE = string;\n\n// Path: model/attributes/device/device__model_id.json\n\n/**\n * An internal hardware revision to identify the device exactly. `device.model_id`\n *\n * Attribute Value Type: `string` {@link DEVICE_MODEL_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"N861AP\"\n */\nexport const DEVICE_MODEL_ID = 'device.model_id';\n\n/**\n * Type for {@link DEVICE_MODEL_ID} device.model_id\n */\nexport type DEVICE_MODEL_ID_TYPE = string;\n\n// Path: model/attributes/device/device__name.json\n\n/**\n * The name of the device. On mobile, this is the user-assigned device name. On servers and desktops, this is typically the hostname. `device.name`\n *\n * Attribute Value Type: `string` {@link DEVICE_NAME_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"localhost\"\n */\nexport const DEVICE_NAME = 'device.name';\n\n/**\n * Type for {@link DEVICE_NAME} device.name\n */\nexport type DEVICE_NAME_TYPE = string;\n\n// Path: model/attributes/device/device__online.json\n\n/**\n * Whether the device was online or not. `device.online`\n *\n * Attribute Value Type: `boolean` {@link DEVICE_ONLINE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example true\n */\nexport const DEVICE_ONLINE = 'device.online';\n\n/**\n * Type for {@link DEVICE_ONLINE} device.online\n */\nexport type DEVICE_ONLINE_TYPE = boolean;\n\n// Path: model/attributes/device/device__orientation.json\n\n/**\n * The orientation of the device, either \"portrait\" or \"landscape\". `device.orientation`\n *\n * Attribute Value Type: `string` {@link DEVICE_ORIENTATION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"portrait\"\n */\nexport const DEVICE_ORIENTATION = 'device.orientation';\n\n/**\n * Type for {@link DEVICE_ORIENTATION} device.orientation\n */\nexport type DEVICE_ORIENTATION_TYPE = string;\n\n// Path: model/attributes/device/device__processor_count.json\n\n/**\n * Number of \"logical processors\". `device.processor_count`\n *\n * Attribute Value Type: `number` {@link DEVICE_PROCESSOR_COUNT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link HARDWARECONCURRENCY} `hardwareConcurrency`\n *\n * @example 8\n */\nexport const DEVICE_PROCESSOR_COUNT = 'device.processor_count';\n\n/**\n * Type for {@link DEVICE_PROCESSOR_COUNT} device.processor_count\n */\nexport type DEVICE_PROCESSOR_COUNT_TYPE = number;\n\n// Path: model/attributes/device/device__processor_frequency.json\n\n/**\n * Processor frequency in MHz. `device.processor_frequency`\n *\n * Attribute Value Type: `number` {@link DEVICE_PROCESSOR_FREQUENCY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 2400\n */\nexport const DEVICE_PROCESSOR_FREQUENCY = 'device.processor_frequency';\n\n/**\n * Type for {@link DEVICE_PROCESSOR_FREQUENCY} device.processor_frequency\n */\nexport type DEVICE_PROCESSOR_FREQUENCY_TYPE = number;\n\n// Path: model/attributes/device/device__screen_density.json\n\n/**\n * The screen density of the device. `device.screen_density`\n *\n * Attribute Value Type: `number` {@link DEVICE_SCREEN_DENSITY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 2.625\n */\nexport const DEVICE_SCREEN_DENSITY = 'device.screen_density';\n\n/**\n * Type for {@link DEVICE_SCREEN_DENSITY} device.screen_density\n */\nexport type DEVICE_SCREEN_DENSITY_TYPE = number;\n\n// Path: model/attributes/device/device__screen_dpi.json\n\n/**\n * The screen density in dots-per-inch (DPI) of the device. `device.screen_dpi`\n *\n * Attribute Value Type: `number` {@link DEVICE_SCREEN_DPI_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 420\n */\nexport const DEVICE_SCREEN_DPI = 'device.screen_dpi';\n\n/**\n * Type for {@link DEVICE_SCREEN_DPI} device.screen_dpi\n */\nexport type DEVICE_SCREEN_DPI_TYPE = number;\n\n// Path: model/attributes/device/device__screen_height_pixels.json\n\n/**\n * The height of the device screen in pixels. `device.screen_height_pixels`\n *\n * Attribute Value Type: `number` {@link DEVICE_SCREEN_HEIGHT_PIXELS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 2400\n */\nexport const DEVICE_SCREEN_HEIGHT_PIXELS = 'device.screen_height_pixels';\n\n/**\n * Type for {@link DEVICE_SCREEN_HEIGHT_PIXELS} device.screen_height_pixels\n */\nexport type DEVICE_SCREEN_HEIGHT_PIXELS_TYPE = number;\n\n// Path: model/attributes/device/device__screen_width_pixels.json\n\n/**\n * The width of the device screen in pixels. `device.screen_width_pixels`\n *\n * Attribute Value Type: `number` {@link DEVICE_SCREEN_WIDTH_PIXELS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1080\n */\nexport const DEVICE_SCREEN_WIDTH_PIXELS = 'device.screen_width_pixels';\n\n/**\n * Type for {@link DEVICE_SCREEN_WIDTH_PIXELS} device.screen_width_pixels\n */\nexport type DEVICE_SCREEN_WIDTH_PIXELS_TYPE = number;\n\n// Path: model/attributes/device/device__simulator.json\n\n/**\n * Whether the device is a simulator or an actual device. `device.simulator`\n *\n * Attribute Value Type: `boolean` {@link DEVICE_SIMULATOR_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example false\n */\nexport const DEVICE_SIMULATOR = 'device.simulator';\n\n/**\n * Type for {@link DEVICE_SIMULATOR} device.simulator\n */\nexport type DEVICE_SIMULATOR_TYPE = boolean;\n\n// Path: model/attributes/device/device__storage_size.json\n\n/**\n * Total device storage in bytes. `device.storage_size`\n *\n * Attribute Value Type: `number` {@link DEVICE_STORAGE_SIZE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 274877906944\n */\nexport const DEVICE_STORAGE_SIZE = 'device.storage_size';\n\n/**\n * Type for {@link DEVICE_STORAGE_SIZE} device.storage_size\n */\nexport type DEVICE_STORAGE_SIZE_TYPE = number;\n\n// Path: model/attributes/device/device__thermal_state.json\n\n/**\n * The thermal state of the device. Based on Apple's `ProcessInfo.ThermalState` enum: `nominal`, `fair`, `serious`, or `critical`. `device.thermal_state`\n *\n * Attribute Value Type: `string` {@link DEVICE_THERMAL_STATE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"nominal\"\n */\nexport const DEVICE_THERMAL_STATE = 'device.thermal_state';\n\n/**\n * Type for {@link DEVICE_THERMAL_STATE} device.thermal_state\n */\nexport type DEVICE_THERMAL_STATE_TYPE = string;\n\n// Path: model/attributes/device/device__timezone.json\n\n/**\n * The timezone of the device. `device.timezone`\n *\n * Attribute Value Type: `string` {@link DEVICE_TIMEZONE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"Europe/Vienna\"\n */\nexport const DEVICE_TIMEZONE = 'device.timezone';\n\n/**\n * Type for {@link DEVICE_TIMEZONE} device.timezone\n */\nexport type DEVICE_TIMEZONE_TYPE = string;\n\n// Path: model/attributes/device/device__usable_memory.json\n\n/**\n * Memory usable for the app in bytes. `device.usable_memory`\n *\n * Attribute Value Type: `number` {@link DEVICE_USABLE_MEMORY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 2147483648\n */\nexport const DEVICE_USABLE_MEMORY = 'device.usable_memory';\n\n/**\n * Type for {@link DEVICE_USABLE_MEMORY} device.usable_memory\n */\nexport type DEVICE_USABLE_MEMORY_TYPE = number;\n\n// Path: model/attributes/dist.json\n\n/**\n * The sentry dist. `dist`\n *\n * Attribute Value Type: `string` {@link DIST_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SENTRY_DIST} `sentry.dist`\n *\n * @deprecated Use {@link SENTRY_DIST} (sentry.dist) instead - This attribute is being deprecated in favor of sentry.dist.\n * @example \"1.0\"\n */\nexport const DIST = 'dist';\n\n/**\n * Type for {@link DIST} dist\n */\nexport type DIST_TYPE = string;\n\n// Path: model/attributes/effectiveConnectionType.json\n\n/**\n * Specifies the estimated effective type of the current connection (e.g. slow-2g, 2g, 3g, 4g). `effectiveConnectionType`\n *\n * Attribute Value Type: `string` {@link EFFECTIVECONNECTIONTYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link NETWORK_CONNECTION_EFFECTIVE_TYPE} `network.connection.effective_type`\n *\n * @deprecated Use {@link NETWORK_CONNECTION_EFFECTIVE_TYPE} (network.connection.effective_type) instead - Old namespace-less attribute, to be replaced with network.connection.effective_type for span-first future\n * @example \"4g\"\n */\nexport const EFFECTIVECONNECTIONTYPE = 'effectiveConnectionType';\n\n/**\n * Type for {@link EFFECTIVECONNECTIONTYPE} effectiveConnectionType\n */\nexport type EFFECTIVECONNECTIONTYPE_TYPE = string;\n\n// Path: model/attributes/environment.json\n\n/**\n * The sentry environment. `environment`\n *\n * Attribute Value Type: `string` {@link ENVIRONMENT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SENTRY_ENVIRONMENT} `sentry.environment`\n *\n * @deprecated Use {@link SENTRY_ENVIRONMENT} (sentry.environment) instead\n * @example \"production\"\n */\nexport const ENVIRONMENT = 'environment';\n\n/**\n * Type for {@link ENVIRONMENT} environment\n */\nexport type ENVIRONMENT_TYPE = string;\n\n// Path: model/attributes/error/error__type.json\n\n/**\n * Describes a class of error the operation ended with. `error.type`\n *\n * Attribute Value Type: `string` {@link ERROR_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"timeout\"\n */\nexport const ERROR_TYPE = 'error.type';\n\n/**\n * Type for {@link ERROR_TYPE} error.type\n */\nexport type ERROR_TYPE_TYPE = string;\n\n// Path: model/attributes/event/event__id.json\n\n/**\n * The unique identifier for this event (log record) `event.id`\n *\n * Attribute Value Type: `number` {@link EVENT_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1234567890\n */\nexport const EVENT_ID = 'event.id';\n\n/**\n * Type for {@link EVENT_ID} event.id\n */\nexport type EVENT_ID_TYPE = number;\n\n// Path: model/attributes/event/event__name.json\n\n/**\n * The name that uniquely identifies this event (log record) `event.name`\n *\n * Attribute Value Type: `string` {@link EVENT_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"Process Payload\"\n */\nexport const EVENT_NAME = 'event.name';\n\n/**\n * Type for {@link EVENT_NAME} event.name\n */\nexport type EVENT_NAME_TYPE = string;\n\n// Path: model/attributes/exception/exception__escaped.json\n\n/**\n * 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. `exception.escaped`\n *\n * Attribute Value Type: `boolean` {@link EXCEPTION_ESCAPED_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example true\n */\nexport const EXCEPTION_ESCAPED = 'exception.escaped';\n\n/**\n * Type for {@link EXCEPTION_ESCAPED} exception.escaped\n */\nexport type EXCEPTION_ESCAPED_TYPE = boolean;\n\n// Path: model/attributes/exception/exception__message.json\n\n/**\n * The error message. `exception.message`\n *\n * Attribute Value Type: `string` {@link EXCEPTION_MESSAGE_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"ENOENT: no such file or directory\"\n */\nexport const EXCEPTION_MESSAGE = 'exception.message';\n\n/**\n * Type for {@link EXCEPTION_MESSAGE} exception.message\n */\nexport type EXCEPTION_MESSAGE_TYPE = string;\n\n// Path: model/attributes/exception/exception__stacktrace.json\n\n/**\n * 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. `exception.stacktrace`\n *\n * Attribute Value Type: `string` {@link EXCEPTION_STACKTRACE_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @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)\"\n */\nexport const EXCEPTION_STACKTRACE = 'exception.stacktrace';\n\n/**\n * Type for {@link EXCEPTION_STACKTRACE} exception.stacktrace\n */\nexport type EXCEPTION_STACKTRACE_TYPE = string;\n\n// Path: model/attributes/exception/exception__type.json\n\n/**\n * 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. `exception.type`\n *\n * Attribute Value Type: `string` {@link EXCEPTION_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"OSError\"\n */\nexport const EXCEPTION_TYPE = 'exception.type';\n\n/**\n * Type for {@link EXCEPTION_TYPE} exception.type\n */\nexport type EXCEPTION_TYPE_TYPE = string;\n\n// Path: model/attributes/faas/faas__coldstart.json\n\n/**\n * A boolean that is true if the serverless function is executed for the first time (aka cold-start). `faas.coldstart`\n *\n * Attribute Value Type: `boolean` {@link FAAS_COLDSTART_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example true\n */\nexport const FAAS_COLDSTART = 'faas.coldstart';\n\n/**\n * Type for {@link FAAS_COLDSTART} faas.coldstart\n */\nexport type FAAS_COLDSTART_TYPE = boolean;\n\n// Path: model/attributes/faas/faas__cron.json\n\n/**\n * A string containing the schedule period as Cron Expression. `faas.cron`\n *\n * Attribute Value Type: `string` {@link FAAS_CRON_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"0/5 * * * ? *\"\n */\nexport const FAAS_CRON = 'faas.cron';\n\n/**\n * Type for {@link FAAS_CRON} faas.cron\n */\nexport type FAAS_CRON_TYPE = string;\n\n// Path: model/attributes/faas/faas__duration_in_ms.json\n\n/**\n * The duration a function took to run, in milliseconds. `faas.duration_in_ms`\n *\n * Attribute Value Type: `number` {@link FAAS_DURATION_IN_MS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 120\n */\nexport const FAAS_DURATION_IN_MS = 'faas.duration_in_ms';\n\n/**\n * Type for {@link FAAS_DURATION_IN_MS} faas.duration_in_ms\n */\nexport type FAAS_DURATION_IN_MS_TYPE = number;\n\n// Path: model/attributes/faas/faas__entry_point.json\n\n/**\n * The code that's run when the cloud provider invokes your function. `faas.entry_point`\n *\n * Attribute Value Type: `string` {@link FAAS_ENTRY_POINT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"my_main_function\"\n */\nexport const FAAS_ENTRY_POINT = 'faas.entry_point';\n\n/**\n * Type for {@link FAAS_ENTRY_POINT} faas.entry_point\n */\nexport type FAAS_ENTRY_POINT_TYPE = string;\n\n// Path: model/attributes/faas/faas__execution.json\n\n/**\n * The execution ID of the current function execution. `faas.execution`\n *\n * Attribute Value Type: `string` {@link FAAS_EXECUTION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link FAAS_INVOCATION_ID} `faas.invocation_id`, {@link AWS_LAMBDA_AWS_REQUEST_ID} `aws.lambda.aws_request_id`\n *\n * @deprecated Use {@link FAAS_INVOCATION_ID} (faas.invocation_id) instead - This attribute is being deprecated in favor of faas.invocation_id, which is the OTel-aligned replacement.\n * @example \"af9d5aa4-a685-4c5f-a22b-444f80b3cc28\"\n */\nexport const FAAS_EXECUTION = 'faas.execution';\n\n/**\n * Type for {@link FAAS_EXECUTION} faas.execution\n */\nexport type FAAS_EXECUTION_TYPE = string;\n\n// Path: model/attributes/faas/faas__id.json\n\n/**\n * The unique ID of the single function that this runtime instance executes. `faas.id`\n *\n * Attribute Value Type: `string` {@link FAAS_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link CLOUD_RESOURCE_ID} `cloud.resource_id`\n *\n * @deprecated Use {@link CLOUD_RESOURCE_ID} (cloud.resource_id) instead - 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).\n * @example \"arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function\"\n */\nexport const FAAS_ID = 'faas.id';\n\n/**\n * Type for {@link FAAS_ID} faas.id\n */\nexport type FAAS_ID_TYPE = string;\n\n// Path: model/attributes/faas/faas__identity.json\n\n/**\n * The Service Account (GCP), IAM Execution Role (AWS), or Managed Identity (Azure) used by the serverless function when interacting with other cloud services `faas.identity`\n *\n * Attribute Value Type: `string` {@link FAAS_IDENTITY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"name@project.iam.gserviceaccount.com (GCP), arn:aws:iam::123456789012:role/role-name (AWS), 00000000-0000-0000-0000-000000000000 (Azure)\"\n */\nexport const FAAS_IDENTITY = 'faas.identity';\n\n/**\n * Type for {@link FAAS_IDENTITY} faas.identity\n */\nexport type FAAS_IDENTITY_TYPE = string;\n\n// Path: model/attributes/faas/faas__invocation_id.json\n\n/**\n * The invocation ID of the current function invocation. `faas.invocation_id`\n *\n * Attribute Value Type: `string` {@link FAAS_INVOCATION_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AWS_LAMBDA_AWS_REQUEST_ID} `aws.lambda.aws_request_id`, {@link FAAS_EXECUTION} `faas.execution`\n *\n * @example \"af9d5aa4-a685-4c5f-a22b-444f80b3cc28\"\n */\nexport const FAAS_INVOCATION_ID = 'faas.invocation_id';\n\n/**\n * Type for {@link FAAS_INVOCATION_ID} faas.invocation_id\n */\nexport type FAAS_INVOCATION_ID_TYPE = string;\n\n// Path: model/attributes/faas/faas__invoked_name.json\n\n/**\n * The name of the invoked function. `faas.invoked_name`\n *\n * Attribute Value Type: `string` {@link FAAS_INVOKED_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"my-function\"\n */\nexport const FAAS_INVOKED_NAME = 'faas.invoked_name';\n\n/**\n * Type for {@link FAAS_INVOKED_NAME} faas.invoked_name\n */\nexport type FAAS_INVOKED_NAME_TYPE = string;\n\n// Path: model/attributes/faas/faas__invoked_provider.json\n\n/**\n * The cloud provider of the invoked function. `faas.invoked_provider`\n *\n * Attribute Value Type: `string` {@link FAAS_INVOKED_PROVIDER_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"aws\"\n */\nexport const FAAS_INVOKED_PROVIDER = 'faas.invoked_provider';\n\n/**\n * Type for {@link FAAS_INVOKED_PROVIDER} faas.invoked_provider\n */\nexport type FAAS_INVOKED_PROVIDER_TYPE = string;\n\n// Path: model/attributes/faas/faas__invoked_region.json\n\n/**\n * The cloud region of the invoked function. `faas.invoked_region`\n *\n * Attribute Value Type: `string` {@link FAAS_INVOKED_REGION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"eu-central-1\"\n */\nexport const FAAS_INVOKED_REGION = 'faas.invoked_region';\n\n/**\n * Type for {@link FAAS_INVOKED_REGION} faas.invoked_region\n */\nexport type FAAS_INVOKED_REGION_TYPE = string;\n\n// Path: model/attributes/faas/faas__name.json\n\n/**\n * The name of the serverless function `faas.name`\n *\n * Attribute Value Type: `string` {@link FAAS_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AWS_LAMBDA_FUNCTION_NAME} `aws.lambda.function_name`\n *\n * @example \"my_function\"\n */\nexport const FAAS_NAME = 'faas.name';\n\n/**\n * Type for {@link FAAS_NAME} faas.name\n */\nexport type FAAS_NAME_TYPE = string;\n\n// Path: model/attributes/faas/faas__time.json\n\n/**\n * A string containing the function invocation time in the ISO 8601 format expressed in UTC. `faas.time`\n *\n * Attribute Value Type: `string` {@link FAAS_TIME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"2020-01-23T13:47:06Z\"\n */\nexport const FAAS_TIME = 'faas.time';\n\n/**\n * Type for {@link FAAS_TIME} faas.time\n */\nexport type FAAS_TIME_TYPE = string;\n\n// Path: model/attributes/faas/faas__trigger.json\n\n/**\n * Type of the trigger which caused this function invocation. `faas.trigger`\n *\n * Attribute Value Type: `string` {@link FAAS_TRIGGER_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"timer\"\n */\nexport const FAAS_TRIGGER = 'faas.trigger';\n\n/**\n * Type for {@link FAAS_TRIGGER} faas.trigger\n */\nexport type FAAS_TRIGGER_TYPE = string;\n\n// Path: model/attributes/faas/faas__version.json\n\n/**\n * The version of the function that was invoked `faas.version`\n *\n * Attribute Value Type: `string` {@link FAAS_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AWS_LAMBDA_FUNCTION_VERSION} `aws.lambda.function_version`\n *\n * @example \"$LATEST\"\n */\nexport const FAAS_VERSION = 'faas.version';\n\n/**\n * Type for {@link FAAS_VERSION} faas.version\n */\nexport type FAAS_VERSION_TYPE = string;\n\n// Path: model/attributes/fcp.json\n\n/**\n * The time it takes for the browser to render the first piece of meaningful content on the screen `fcp`\n *\n * Attribute Value Type: `number` {@link FCP_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link BROWSER_WEB_VITAL_FCP_VALUE} `browser.web_vital.fcp.value`\n *\n * @deprecated Use {@link BROWSER_WEB_VITAL_FCP_VALUE} (browser.web_vital.fcp.value) instead - This attribute is being deprecated in favor of browser.web_vital.fcp.value\n * @example 547.6951\n */\nexport const FCP = 'fcp';\n\n/**\n * Type for {@link FCP} fcp\n */\nexport type FCP_TYPE = number;\n\n// Path: model/attributes/flag/flag__evaluation__[key].json\n\n/**\n * 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. `flag.evaluation.<key>`\n *\n * Attribute Value Type: `boolean` {@link FLAG_EVALUATION_KEY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Has Dynamic Suffix: true\n *\n * @example \"flag.evaluation.is_new_ui=true\"\n */\nexport const FLAG_EVALUATION_KEY = 'flag.evaluation.<key>';\n\n/**\n * Base key for {@link FLAG_EVALUATION_KEY}. Use with a dynamic suffix, e.g. `${FLAG_EVALUATION_KEY_BASE}.${key}`.\n */\nexport const FLAG_EVALUATION_KEY_BASE = 'flag.evaluation';\n\n/**\n * Type for {@link FLAG_EVALUATION_KEY} flag.evaluation.<key>\n */\nexport type FLAG_EVALUATION_KEY_TYPE = boolean;\n\n// Path: model/attributes/fp.json\n\n/**\n * The time it takes for the browser to render the first pixel on the screen `fp`\n *\n * Attribute Value Type: `number` {@link FP_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link BROWSER_WEB_VITAL_FP_VALUE} `browser.web_vital.fp.value`\n *\n * @deprecated Use {@link BROWSER_WEB_VITAL_FP_VALUE} (browser.web_vital.fp.value) instead - This attribute is being deprecated in favor of browser.web_vital.fp.value\n * @example 477.1926\n */\nexport const FP = 'fp';\n\n/**\n * Type for {@link FP} fp\n */\nexport type FP_TYPE = number;\n\n// Path: model/attributes/frames/frames__delay.json\n\n/**\n * 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/). `frames.delay`\n *\n * Attribute Value Type: `number` {@link FRAMES_DELAY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_VITALS_FRAMES_DELAY_VALUE} `app.vitals.frames.delay.value`\n *\n * @deprecated Use {@link APP_VITALS_FRAMES_DELAY_VALUE} (app.vitals.frames.delay.value) instead - Replaced by app.vitals.frames.delay.value to align with the app.vitals.* namespace for mobile performance attributes\n * @example 5\n */\nexport const FRAMES_DELAY = 'frames.delay';\n\n/**\n * Type for {@link FRAMES_DELAY} frames.delay\n */\nexport type FRAMES_DELAY_TYPE = number;\n\n// Path: model/attributes/frames/frames__frozen.json\n\n/**\n * The number of frozen frames rendered during the lifetime of the span. `frames.frozen`\n *\n * Attribute Value Type: `number` {@link FRAMES_FROZEN_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_VITALS_FRAMES_FROZEN_COUNT} `app.vitals.frames.frozen.count`\n *\n * @deprecated Use {@link APP_VITALS_FRAMES_FROZEN_COUNT} (app.vitals.frames.frozen.count) instead - Replaced by app.vitals.frames.frozen.count to align with the app.vitals.* namespace for mobile performance attributes\n * @example 3\n */\nexport const FRAMES_FROZEN = 'frames.frozen';\n\n/**\n * Type for {@link FRAMES_FROZEN} frames.frozen\n */\nexport type FRAMES_FROZEN_TYPE = number;\n\n// Path: model/attributes/frames_frozen_rate.json\n\n/**\n * The rate of frozen frames, or `app_vitals.frames.frozen.count` divided by `app_vitals.frames.total.count`. This is computed by Relay. `frames_frozen_rate`\n *\n * Attribute Value Type: `number` {@link FRAMES_FROZEN_RATE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n */\nexport const FRAMES_FROZEN_RATE = 'frames_frozen_rate';\n\n/**\n * Type for {@link FRAMES_FROZEN_RATE} frames_frozen_rate\n */\nexport type FRAMES_FROZEN_RATE_TYPE = number;\n\n// Path: model/attributes/frames/frames__slow.json\n\n/**\n * The number of slow frames rendered during the lifetime of the span. `frames.slow`\n *\n * Attribute Value Type: `number` {@link FRAMES_SLOW_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_VITALS_FRAMES_SLOW_COUNT} `app.vitals.frames.slow.count`\n *\n * @deprecated Use {@link APP_VITALS_FRAMES_SLOW_COUNT} (app.vitals.frames.slow.count) instead - Replaced by app.vitals.frames.slow.count to align with the app.vitals.* namespace for mobile performance attributes\n * @example 1\n */\nexport const FRAMES_SLOW = 'frames.slow';\n\n/**\n * Type for {@link FRAMES_SLOW} frames.slow\n */\nexport type FRAMES_SLOW_TYPE = number;\n\n// Path: model/attributes/frames_slow_rate.json\n\n/**\n * The rate of slow frames, or `app_vitals.frames.slow.count` divided by `app_vitals.frames.total.count`. This is computed by Relay. `frames_slow_rate`\n *\n * Attribute Value Type: `number` {@link FRAMES_SLOW_RATE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n */\nexport const FRAMES_SLOW_RATE = 'frames_slow_rate';\n\n/**\n * Type for {@link FRAMES_SLOW_RATE} frames_slow_rate\n */\nexport type FRAMES_SLOW_RATE_TYPE = number;\n\n// Path: model/attributes/frames/frames__total.json\n\n/**\n * The number of total frames rendered during the lifetime of the span. `frames.total`\n *\n * Attribute Value Type: `number` {@link FRAMES_TOTAL_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_VITALS_FRAMES_TOTAL_COUNT} `app.vitals.frames.total.count`\n *\n * @deprecated Use {@link APP_VITALS_FRAMES_TOTAL_COUNT} (app.vitals.frames.total.count) instead - Replaced by app.vitals.frames.total.count to align with the app.vitals.* namespace for mobile performance attributes\n * @example 60\n */\nexport const FRAMES_TOTAL = 'frames.total';\n\n/**\n * Type for {@link FRAMES_TOTAL} frames.total\n */\nexport type FRAMES_TOTAL_TYPE = number;\n\n// Path: model/attributes/fs_error.json\n\n/**\n * The error message of a file system error. `fs_error`\n *\n * Attribute Value Type: `string` {@link FS_ERROR_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated Use {@link ERROR_TYPE} (error.type) instead - This attribute is not part of the OpenTelemetry specification and error.type fits much better.\n * @example \"ENOENT: no such file or directory\"\n */\nexport const FS_ERROR = 'fs_error';\n\n/**\n * Type for {@link FS_ERROR} fs_error\n */\nexport type FS_ERROR_TYPE = string;\n\n// Path: model/attributes/gcp/gcp__function__context__event_id.json\n\n/**\n * The event ID from the legacy GCP Cloud Function context (1st gen) `gcp.function.context.event_id`\n *\n * Attribute Value Type: `string` {@link GCP_FUNCTION_CONTEXT_EVENT_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"1234567890\"\n */\nexport const GCP_FUNCTION_CONTEXT_EVENT_ID = 'gcp.function.context.event_id';\n\n/**\n * Type for {@link GCP_FUNCTION_CONTEXT_EVENT_ID} gcp.function.context.event_id\n */\nexport type GCP_FUNCTION_CONTEXT_EVENT_ID_TYPE = string;\n\n// Path: model/attributes/gcp/gcp__function__context__event_type.json\n\n/**\n * The type of the GCP Cloud Function event `gcp.function.context.event_type`\n *\n * Attribute Value Type: `string` {@link GCP_FUNCTION_CONTEXT_EVENT_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"google.pubsub.topic.publish\"\n */\nexport const GCP_FUNCTION_CONTEXT_EVENT_TYPE = 'gcp.function.context.event_type';\n\n/**\n * Type for {@link GCP_FUNCTION_CONTEXT_EVENT_TYPE} gcp.function.context.event_type\n */\nexport type GCP_FUNCTION_CONTEXT_EVENT_TYPE_TYPE = string;\n\n// Path: model/attributes/gcp/gcp__function__context__id.json\n\n/**\n * The unique event ID from the GCP CloudEvents context (2nd gen Cloud Functions) `gcp.function.context.id`\n *\n * Attribute Value Type: `string` {@link GCP_FUNCTION_CONTEXT_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"1234567890\"\n */\nexport const GCP_FUNCTION_CONTEXT_ID = 'gcp.function.context.id';\n\n/**\n * Type for {@link GCP_FUNCTION_CONTEXT_ID} gcp.function.context.id\n */\nexport type GCP_FUNCTION_CONTEXT_ID_TYPE = string;\n\n// Path: model/attributes/gcp/gcp__function__context__resource.json\n\n/**\n * The resource that triggered the GCP Cloud Function event `gcp.function.context.resource`\n *\n * Attribute Value Type: `string` {@link GCP_FUNCTION_CONTEXT_RESOURCE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"projects/my-project/topics/my-topic\"\n */\nexport const GCP_FUNCTION_CONTEXT_RESOURCE = 'gcp.function.context.resource';\n\n/**\n * Type for {@link GCP_FUNCTION_CONTEXT_RESOURCE} gcp.function.context.resource\n */\nexport type GCP_FUNCTION_CONTEXT_RESOURCE_TYPE = string;\n\n// Path: model/attributes/gcp/gcp__function__context__source.json\n\n/**\n * The source of the GCP Cloud Function event `gcp.function.context.source`\n *\n * Attribute Value Type: `string` {@link GCP_FUNCTION_CONTEXT_SOURCE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"//pubsub.googleapis.com/projects/my-project/topics/my-topic\"\n */\nexport const GCP_FUNCTION_CONTEXT_SOURCE = 'gcp.function.context.source';\n\n/**\n * Type for {@link GCP_FUNCTION_CONTEXT_SOURCE} gcp.function.context.source\n */\nexport type GCP_FUNCTION_CONTEXT_SOURCE_TYPE = string;\n\n// Path: model/attributes/gcp/gcp__function__context__specversion.json\n\n/**\n * The CloudEvents specification version of the GCP Cloud Function event `gcp.function.context.specversion`\n *\n * Attribute Value Type: `string` {@link GCP_FUNCTION_CONTEXT_SPECVERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"1.0\"\n */\nexport const GCP_FUNCTION_CONTEXT_SPECVERSION = 'gcp.function.context.specversion';\n\n/**\n * Type for {@link GCP_FUNCTION_CONTEXT_SPECVERSION} gcp.function.context.specversion\n */\nexport type GCP_FUNCTION_CONTEXT_SPECVERSION_TYPE = string;\n\n// Path: model/attributes/gcp/gcp__function__context__time.json\n\n/**\n * The timestamp of the GCP Cloud Function event `gcp.function.context.time`\n *\n * Attribute Value Type: `string` {@link GCP_FUNCTION_CONTEXT_TIME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"2024-01-01T00:00:00.000Z\"\n */\nexport const GCP_FUNCTION_CONTEXT_TIME = 'gcp.function.context.time';\n\n/**\n * Type for {@link GCP_FUNCTION_CONTEXT_TIME} gcp.function.context.time\n */\nexport type GCP_FUNCTION_CONTEXT_TIME_TYPE = string;\n\n// Path: model/attributes/gcp/gcp__function__context__timestamp.json\n\n/**\n * The legacy timestamp of the GCP Cloud Function event `gcp.function.context.timestamp`\n *\n * Attribute Value Type: `string` {@link GCP_FUNCTION_CONTEXT_TIMESTAMP_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"2024-01-01T00:00:00.000Z\"\n */\nexport const GCP_FUNCTION_CONTEXT_TIMESTAMP = 'gcp.function.context.timestamp';\n\n/**\n * Type for {@link GCP_FUNCTION_CONTEXT_TIMESTAMP} gcp.function.context.timestamp\n */\nexport type GCP_FUNCTION_CONTEXT_TIMESTAMP_TYPE = string;\n\n// Path: model/attributes/gcp/gcp__function__context__type.json\n\n/**\n * The type of the GCP Cloud Function event context `gcp.function.context.type`\n *\n * Attribute Value Type: `string` {@link GCP_FUNCTION_CONTEXT_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"cloud_functions.context\"\n */\nexport const GCP_FUNCTION_CONTEXT_TYPE = 'gcp.function.context.type';\n\n/**\n * Type for {@link GCP_FUNCTION_CONTEXT_TYPE} gcp.function.context.type\n */\nexport type GCP_FUNCTION_CONTEXT_TYPE_TYPE = string;\n\n// Path: model/attributes/gcp/gcp__project__id.json\n\n/**\n * The ID of the project in GCP that this resource is associated with `gcp.project.id`\n *\n * Attribute Value Type: `string` {@link GCP_PROJECT_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"my-project-123\"\n */\nexport const GCP_PROJECT_ID = 'gcp.project.id';\n\n/**\n * Type for {@link GCP_PROJECT_ID} gcp.project.id\n */\nexport type GCP_PROJECT_ID_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__agent__name.json\n\n/**\n * The name of the agent being used. `gen_ai.agent.name`\n *\n * Attribute Value Type: `string` {@link GEN_AI_AGENT_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"ResearchAssistant\"\n */\nexport const GEN_AI_AGENT_NAME = 'gen_ai.agent.name';\n\n/**\n * Type for {@link GEN_AI_AGENT_NAME} gen_ai.agent.name\n */\nexport type GEN_AI_AGENT_NAME_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__context__utilization.json\n\n/**\n * The fraction of the model context window utilized by this generation. `gen_ai.context.utilization`\n *\n * Attribute Value Type: `number` {@link GEN_AI_CONTEXT_UTILIZATION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 0.75\n */\nexport const GEN_AI_CONTEXT_UTILIZATION = 'gen_ai.context.utilization';\n\n/**\n * Type for {@link GEN_AI_CONTEXT_UTILIZATION} gen_ai.context.utilization\n */\nexport type GEN_AI_CONTEXT_UTILIZATION_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__context__window_size.json\n\n/**\n * The maximum context window size supported by the model for this generation. `gen_ai.context.window_size`\n *\n * Attribute Value Type: `number` {@link GEN_AI_CONTEXT_WINDOW_SIZE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 128000\n */\nexport const GEN_AI_CONTEXT_WINDOW_SIZE = 'gen_ai.context.window_size';\n\n/**\n * Type for {@link GEN_AI_CONTEXT_WINDOW_SIZE} gen_ai.context.window_size\n */\nexport type GEN_AI_CONTEXT_WINDOW_SIZE_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__conversation__id.json\n\n/**\n * The unique identifier for a conversation (session, thread), used to store and correlate messages within this conversation. `gen_ai.conversation.id`\n *\n * Attribute Value Type: `string` {@link GEN_AI_CONVERSATION_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"conv_5j66UpCpwteGg4YSxUnt7lPY\"\n */\nexport const GEN_AI_CONVERSATION_ID = 'gen_ai.conversation.id';\n\n/**\n * Type for {@link GEN_AI_CONVERSATION_ID} gen_ai.conversation.id\n */\nexport type GEN_AI_CONVERSATION_ID_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__cost__cache_creation__input_tokens.json\n\n/**\n * The cost of input tokens written to cache in USD. `gen_ai.cost.cache_creation.input_tokens`\n *\n * Attribute Value Type: `number` {@link GEN_AI_COST_CACHE_CREATION_INPUT_TOKENS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 12.34\n */\nexport const GEN_AI_COST_CACHE_CREATION_INPUT_TOKENS = 'gen_ai.cost.cache_creation.input_tokens';\n\n/**\n * Type for {@link GEN_AI_COST_CACHE_CREATION_INPUT_TOKENS} gen_ai.cost.cache_creation.input_tokens\n */\nexport type GEN_AI_COST_CACHE_CREATION_INPUT_TOKENS_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__cost__cache_read__input_tokens.json\n\n/**\n * The cost of cached input tokens in USD. `gen_ai.cost.cache_read.input_tokens`\n *\n * Attribute Value Type: `number` {@link GEN_AI_COST_CACHE_READ_INPUT_TOKENS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 12.34\n */\nexport const GEN_AI_COST_CACHE_READ_INPUT_TOKENS = 'gen_ai.cost.cache_read.input_tokens';\n\n/**\n * Type for {@link GEN_AI_COST_CACHE_READ_INPUT_TOKENS} gen_ai.cost.cache_read.input_tokens\n */\nexport type GEN_AI_COST_CACHE_READ_INPUT_TOKENS_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__cost__input_tokens.json\n\n/**\n * The total cost of all input tokens in USD (includes cached and cache creation tokens). `gen_ai.cost.input_tokens`\n *\n * Attribute Value Type: `number` {@link GEN_AI_COST_INPUT_TOKENS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 123.45\n */\nexport const GEN_AI_COST_INPUT_TOKENS = 'gen_ai.cost.input_tokens';\n\n/**\n * Type for {@link GEN_AI_COST_INPUT_TOKENS} gen_ai.cost.input_tokens\n */\nexport type GEN_AI_COST_INPUT_TOKENS_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__cost__output_tokens.json\n\n/**\n * The total cost of all output tokens in USD (includes reasoning tokens). `gen_ai.cost.output_tokens`\n *\n * Attribute Value Type: `number` {@link GEN_AI_COST_OUTPUT_TOKENS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 123.45\n */\nexport const GEN_AI_COST_OUTPUT_TOKENS = 'gen_ai.cost.output_tokens';\n\n/**\n * Type for {@link GEN_AI_COST_OUTPUT_TOKENS} gen_ai.cost.output_tokens\n */\nexport type GEN_AI_COST_OUTPUT_TOKENS_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__cost__reasoning__output_tokens.json\n\n/**\n * The cost of reasoning output tokens in USD. `gen_ai.cost.reasoning.output_tokens`\n *\n * Attribute Value Type: `number` {@link GEN_AI_COST_REASONING_OUTPUT_TOKENS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 12.34\n */\nexport const GEN_AI_COST_REASONING_OUTPUT_TOKENS = 'gen_ai.cost.reasoning.output_tokens';\n\n/**\n * Type for {@link GEN_AI_COST_REASONING_OUTPUT_TOKENS} gen_ai.cost.reasoning.output_tokens\n */\nexport type GEN_AI_COST_REASONING_OUTPUT_TOKENS_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__cost__total_tokens.json\n\n/**\n * The total cost for the tokens used. `gen_ai.cost.total_tokens`\n *\n * Attribute Value Type: `number` {@link GEN_AI_COST_TOTAL_TOKENS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link AI_TOTAL_COST} `ai.total_cost`\n *\n * @example 12.34\n */\nexport const GEN_AI_COST_TOTAL_TOKENS = 'gen_ai.cost.total_tokens';\n\n/**\n * Type for {@link GEN_AI_COST_TOTAL_TOKENS} gen_ai.cost.total_tokens\n */\nexport type GEN_AI_COST_TOTAL_TOKENS_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__embeddings__input.json\n\n/**\n * The input to the embeddings model. `gen_ai.embeddings.input`\n *\n * Attribute Value Type: `string` {@link GEN_AI_EMBEDDINGS_INPUT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"What's the weather in Paris?\"\n */\nexport const GEN_AI_EMBEDDINGS_INPUT = 'gen_ai.embeddings.input';\n\n/**\n * Type for {@link GEN_AI_EMBEDDINGS_INPUT} gen_ai.embeddings.input\n */\nexport type GEN_AI_EMBEDDINGS_INPUT_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__function_id.json\n\n/**\n * Framework-specific tracing label for the execution of a function or other unit of execution in a generative AI system. `gen_ai.function_id`\n *\n * Attribute Value Type: `string` {@link GEN_AI_FUNCTION_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"my-awesome-function\"\n */\nexport const GEN_AI_FUNCTION_ID = 'gen_ai.function_id';\n\n/**\n * Type for {@link GEN_AI_FUNCTION_ID} gen_ai.function_id\n */\nexport type GEN_AI_FUNCTION_ID_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__input__messages.json\n\n/**\n * 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:\"...\"}`. `gen_ai.input.messages`\n *\n * Attribute Value Type: `string` {@link GEN_AI_INPUT_MESSAGES_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AI_TEXTS} `ai.texts`\n *\n * @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°F\\\"}]}]\"\n */\nexport const GEN_AI_INPUT_MESSAGES = 'gen_ai.input.messages';\n\n/**\n * Type for {@link GEN_AI_INPUT_MESSAGES} gen_ai.input.messages\n */\nexport type GEN_AI_INPUT_MESSAGES_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__operation__name.json\n\n/**\n * The name of the operation being performed. It has the following list of well-known values: 'chat', 'create_agent', 'embeddings', 'execute_tool', 'generate_content', 'invoke_agent', 'text_completion'. If one of them applies, then that value MUST be used. Otherwise a custom value MAY be used. `gen_ai.operation.name`\n *\n * Attribute Value Type: `string` {@link GEN_AI_OPERATION_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"chat\"\n */\nexport const GEN_AI_OPERATION_NAME = 'gen_ai.operation.name';\n\n/**\n * Type for {@link GEN_AI_OPERATION_NAME} gen_ai.operation.name\n */\nexport type GEN_AI_OPERATION_NAME_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__operation__type.json\n\n/**\n * The type of AI operation. Must be one of 'agent' (invoke_agent and create_agent spans), 'ai_client' (any LLM call), 'tool' (execute_tool spans), 'handoff' (handoff spans), 'other' (input and output processors, skill loading, guardrails etc.) . Added during ingestion based on span.op and gen_ai.operation.type. Used to filter and aggregate data in the UI `gen_ai.operation.type`\n *\n * Attribute Value Type: `string` {@link GEN_AI_OPERATION_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"tool\"\n */\nexport const GEN_AI_OPERATION_TYPE = 'gen_ai.operation.type';\n\n/**\n * Type for {@link GEN_AI_OPERATION_TYPE} gen_ai.operation.type\n */\nexport type GEN_AI_OPERATION_TYPE_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__output__messages.json\n\n/**\n * 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. `gen_ai.output.messages`\n *\n * Attribute Value Type: `string` {@link GEN_AI_OUTPUT_MESSAGES_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"[{\\\"role\\\": \\\"assistant\\\", \\\"parts\\\": [{\\\"type\\\": \\\"text\\\", \\\"content\\\": \\\"The weather in Paris is currently rainy with a temperature of 57°F.\\\"}], \\\"finish_reason\\\": \\\"stop\\\"}]\"\n */\nexport const GEN_AI_OUTPUT_MESSAGES = 'gen_ai.output.messages';\n\n/**\n * Type for {@link GEN_AI_OUTPUT_MESSAGES} gen_ai.output.messages\n */\nexport type GEN_AI_OUTPUT_MESSAGES_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__pipeline__name.json\n\n/**\n * Name of the AI pipeline or chain being executed. `gen_ai.pipeline.name`\n *\n * Attribute Value Type: `string` {@link GEN_AI_PIPELINE_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link AI_PIPELINE_NAME} `ai.pipeline.name`\n *\n * @example \"Autofix Pipeline\"\n */\nexport const GEN_AI_PIPELINE_NAME = 'gen_ai.pipeline.name';\n\n/**\n * Type for {@link GEN_AI_PIPELINE_NAME} gen_ai.pipeline.name\n */\nexport type GEN_AI_PIPELINE_NAME_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__prompt.json\n\n/**\n * The input messages sent to the model `gen_ai.prompt`\n *\n * Attribute Value Type: `string` {@link GEN_AI_PROMPT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @deprecated  - Deprecated from OTEL, use gen_ai.input.messages with the new format instead.\n * @example \"[{\\\"role\\\": \\\"user\\\", \\\"message\\\": \\\"hello\\\"}]\"\n */\nexport const GEN_AI_PROMPT = 'gen_ai.prompt';\n\n/**\n * Type for {@link GEN_AI_PROMPT} gen_ai.prompt\n */\nexport type GEN_AI_PROMPT_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__prompt__name.json\n\n/**\n * The name of the prompt that uniquely identifies it. `gen_ai.prompt.name`\n *\n * Attribute Value Type: `string` {@link GEN_AI_PROMPT_NAME_TYPE}\n *\n * Apply Scrubbing: manual - Prompt names may reveal user behavior patterns or sensitive operations\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link MCP_PROMPT_NAME} `mcp.prompt.name`\n *\n * @example \"summarize_text\"\n */\nexport const GEN_AI_PROMPT_NAME = 'gen_ai.prompt.name';\n\n/**\n * Type for {@link GEN_AI_PROMPT_NAME} gen_ai.prompt.name\n */\nexport type GEN_AI_PROMPT_NAME_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__provider__name.json\n\n/**\n * The Generative AI provider as identified by the client or server instrumentation. `gen_ai.provider.name`\n *\n * Attribute Value Type: `string` {@link GEN_AI_PROVIDER_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AI_MODEL_PROVIDER} `ai.model.provider`, {@link GEN_AI_SYSTEM} `gen_ai.system`\n *\n * @example \"openai\"\n */\nexport const GEN_AI_PROVIDER_NAME = 'gen_ai.provider.name';\n\n/**\n * Type for {@link GEN_AI_PROVIDER_NAME} gen_ai.provider.name\n */\nexport type GEN_AI_PROVIDER_NAME_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__request__available_tools.json\n\n/**\n * The available tools for the model. It has to be a stringified version of an array of objects. `gen_ai.request.available_tools`\n *\n * Attribute Value Type: `string` {@link GEN_AI_REQUEST_AVAILABLE_TOOLS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated Use {@link GEN_AI_TOOL_DEFINITIONS} (gen_ai.tool.definitions) instead\n * @example \"[{\\\"name\\\": \\\"get_weather\\\", \\\"description\\\": \\\"Get the weather for a given location\\\"}, {\\\"name\\\": \\\"get_news\\\", \\\"description\\\": \\\"Get the news for a given topic\\\"}]\"\n */\nexport const GEN_AI_REQUEST_AVAILABLE_TOOLS = 'gen_ai.request.available_tools';\n\n/**\n * Type for {@link GEN_AI_REQUEST_AVAILABLE_TOOLS} gen_ai.request.available_tools\n */\nexport type GEN_AI_REQUEST_AVAILABLE_TOOLS_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__request__frequency_penalty.json\n\n/**\n * 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. `gen_ai.request.frequency_penalty`\n *\n * Attribute Value Type: `number` {@link GEN_AI_REQUEST_FREQUENCY_PENALTY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AI_FREQUENCY_PENALTY} `ai.frequency_penalty`\n *\n * @example 0.5\n */\nexport const GEN_AI_REQUEST_FREQUENCY_PENALTY = 'gen_ai.request.frequency_penalty';\n\n/**\n * Type for {@link GEN_AI_REQUEST_FREQUENCY_PENALTY} gen_ai.request.frequency_penalty\n */\nexport type GEN_AI_REQUEST_FREQUENCY_PENALTY_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__request__max_tokens.json\n\n/**\n * The maximum number of tokens to generate in the response. `gen_ai.request.max_tokens`\n *\n * Attribute Value Type: `number` {@link GEN_AI_REQUEST_MAX_TOKENS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example 2048\n */\nexport const GEN_AI_REQUEST_MAX_TOKENS = 'gen_ai.request.max_tokens';\n\n/**\n * Type for {@link GEN_AI_REQUEST_MAX_TOKENS} gen_ai.request.max_tokens\n */\nexport type GEN_AI_REQUEST_MAX_TOKENS_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__request__messages.json\n\n/**\n * 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:\"...\"}`. `gen_ai.request.messages`\n *\n * Attribute Value Type: `string` {@link GEN_AI_REQUEST_MESSAGES_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link AI_INPUT_MESSAGES} `ai.input_messages`\n *\n * @deprecated Use {@link GEN_AI_INPUT_MESSAGES} (gen_ai.input.messages) instead\n * @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\\\"}}]\"\n */\nexport const GEN_AI_REQUEST_MESSAGES = 'gen_ai.request.messages';\n\n/**\n * Type for {@link GEN_AI_REQUEST_MESSAGES} gen_ai.request.messages\n */\nexport type GEN_AI_REQUEST_MESSAGES_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__request__model.json\n\n/**\n * The model identifier being used for the request. `gen_ai.request.model`\n *\n * Attribute Value Type: `string` {@link GEN_AI_REQUEST_MODEL_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"gpt-4-turbo-preview\"\n */\nexport const GEN_AI_REQUEST_MODEL = 'gen_ai.request.model';\n\n/**\n * Type for {@link GEN_AI_REQUEST_MODEL} gen_ai.request.model\n */\nexport type GEN_AI_REQUEST_MODEL_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__request__presence_penalty.json\n\n/**\n * 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. `gen_ai.request.presence_penalty`\n *\n * Attribute Value Type: `number` {@link GEN_AI_REQUEST_PRESENCE_PENALTY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AI_PRESENCE_PENALTY} `ai.presence_penalty`\n *\n * @example 0.5\n */\nexport const GEN_AI_REQUEST_PRESENCE_PENALTY = 'gen_ai.request.presence_penalty';\n\n/**\n * Type for {@link GEN_AI_REQUEST_PRESENCE_PENALTY} gen_ai.request.presence_penalty\n */\nexport type GEN_AI_REQUEST_PRESENCE_PENALTY_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__request__reasoning_effort.json\n\n/**\n * Constrains the effort on reasoning for reasoning models. Supported values vary by provider. `gen_ai.request.reasoning_effort`\n *\n * Attribute Value Type: `string` {@link GEN_AI_REQUEST_REASONING_EFFORT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"high\"\n */\nexport const GEN_AI_REQUEST_REASONING_EFFORT = 'gen_ai.request.reasoning_effort';\n\n/**\n * Type for {@link GEN_AI_REQUEST_REASONING_EFFORT} gen_ai.request.reasoning_effort\n */\nexport type GEN_AI_REQUEST_REASONING_EFFORT_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__request__seed.json\n\n/**\n * The seed, ideally models given the same seed and same other parameters will produce the exact same output. `gen_ai.request.seed`\n *\n * Attribute Value Type: `string` {@link GEN_AI_REQUEST_SEED_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AI_SEED} `ai.seed`\n *\n * @example \"1234567890\"\n */\nexport const GEN_AI_REQUEST_SEED = 'gen_ai.request.seed';\n\n/**\n * Type for {@link GEN_AI_REQUEST_SEED} gen_ai.request.seed\n */\nexport type GEN_AI_REQUEST_SEED_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__request__stop_sequences.json\n\n/**\n * List of sequences that the model will use to stop generating further tokens. `gen_ai.request.stop_sequences`\n *\n * Attribute Value Type: `Array<string>` {@link GEN_AI_REQUEST_STOP_SEQUENCES_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example [\"forest\",\"lived\"]\n */\nexport const GEN_AI_REQUEST_STOP_SEQUENCES = 'gen_ai.request.stop_sequences';\n\n/**\n * Type for {@link GEN_AI_REQUEST_STOP_SEQUENCES} gen_ai.request.stop_sequences\n */\nexport type GEN_AI_REQUEST_STOP_SEQUENCES_TYPE = Array<string>;\n\n// Path: model/attributes/gen_ai/gen_ai__request__temperature.json\n\n/**\n * For an AI model call, the temperature parameter. Temperature essentially means how random the output will be. `gen_ai.request.temperature`\n *\n * Attribute Value Type: `number` {@link GEN_AI_REQUEST_TEMPERATURE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AI_TEMPERATURE} `ai.temperature`\n *\n * @example 0.1\n */\nexport const GEN_AI_REQUEST_TEMPERATURE = 'gen_ai.request.temperature';\n\n/**\n * Type for {@link GEN_AI_REQUEST_TEMPERATURE} gen_ai.request.temperature\n */\nexport type GEN_AI_REQUEST_TEMPERATURE_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__request__top_k.json\n\n/**\n * 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). `gen_ai.request.top_k`\n *\n * Attribute Value Type: `number` {@link GEN_AI_REQUEST_TOP_K_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AI_TOP_K} `ai.top_k`\n *\n * @example 35\n */\nexport const GEN_AI_REQUEST_TOP_K = 'gen_ai.request.top_k';\n\n/**\n * Type for {@link GEN_AI_REQUEST_TOP_K} gen_ai.request.top_k\n */\nexport type GEN_AI_REQUEST_TOP_K_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__request__top_p.json\n\n/**\n * 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). `gen_ai.request.top_p`\n *\n * Attribute Value Type: `number` {@link GEN_AI_REQUEST_TOP_P_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AI_TOP_P} `ai.top_p`\n *\n * @example 0.7\n */\nexport const GEN_AI_REQUEST_TOP_P = 'gen_ai.request.top_p';\n\n/**\n * Type for {@link GEN_AI_REQUEST_TOP_P} gen_ai.request.top_p\n */\nexport type GEN_AI_REQUEST_TOP_P_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__response__finish_reasons.json\n\n/**\n * The reason why the model stopped generating. `gen_ai.response.finish_reasons`\n *\n * Attribute Value Type: `string` {@link GEN_AI_RESPONSE_FINISH_REASONS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AI_FINISH_REASON} `ai.finish_reason`\n *\n * @example \"COMPLETE\"\n */\nexport const GEN_AI_RESPONSE_FINISH_REASONS = 'gen_ai.response.finish_reasons';\n\n/**\n * Type for {@link GEN_AI_RESPONSE_FINISH_REASONS} gen_ai.response.finish_reasons\n */\nexport type GEN_AI_RESPONSE_FINISH_REASONS_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__response__id.json\n\n/**\n * Unique identifier for the completion. `gen_ai.response.id`\n *\n * Attribute Value Type: `string` {@link GEN_AI_RESPONSE_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AI_GENERATION_ID} `ai.generation_id`\n *\n * @example \"gen_123abc\"\n */\nexport const GEN_AI_RESPONSE_ID = 'gen_ai.response.id';\n\n/**\n * Type for {@link GEN_AI_RESPONSE_ID} gen_ai.response.id\n */\nexport type GEN_AI_RESPONSE_ID_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__response__model.json\n\n/**\n * The vendor-specific ID of the model used. `gen_ai.response.model`\n *\n * Attribute Value Type: `string` {@link GEN_AI_RESPONSE_MODEL_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AI_MODEL_ID} `ai.model_id`\n *\n * @example \"gpt-4\"\n */\nexport const GEN_AI_RESPONSE_MODEL = 'gen_ai.response.model';\n\n/**\n * Type for {@link GEN_AI_RESPONSE_MODEL} gen_ai.response.model\n */\nexport type GEN_AI_RESPONSE_MODEL_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__response__streaming.json\n\n/**\n * Whether or not the AI model call's response was streamed back asynchronously `gen_ai.response.streaming`\n *\n * Attribute Value Type: `boolean` {@link GEN_AI_RESPONSE_STREAMING_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link AI_STREAMING} `ai.streaming`\n *\n * @example true\n */\nexport const GEN_AI_RESPONSE_STREAMING = 'gen_ai.response.streaming';\n\n/**\n * Type for {@link GEN_AI_RESPONSE_STREAMING} gen_ai.response.streaming\n */\nexport type GEN_AI_RESPONSE_STREAMING_TYPE = boolean;\n\n// Path: model/attributes/gen_ai/gen_ai__response__text.json\n\n/**\n * The model's response text messages. It has to be a stringified version of an array of response text messages. `gen_ai.response.text`\n *\n * Attribute Value Type: `string` {@link GEN_AI_RESPONSE_TEXT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated Use {@link GEN_AI_OUTPUT_MESSAGES} (gen_ai.output.messages) instead\n * @example \"[\\\"The weather in Paris is rainy and overcast, with temperatures around 57°F\\\", \\\"The weather in London is sunny and warm, with temperatures around 65°F\\\"]\"\n */\nexport const GEN_AI_RESPONSE_TEXT = 'gen_ai.response.text';\n\n/**\n * Type for {@link GEN_AI_RESPONSE_TEXT} gen_ai.response.text\n */\nexport type GEN_AI_RESPONSE_TEXT_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__response__time_to_first_chunk.json\n\n/**\n * Time in seconds when the first response content chunk arrived in streaming responses. `gen_ai.response.time_to_first_chunk`\n *\n * Attribute Value Type: `number` {@link GEN_AI_RESPONSE_TIME_TO_FIRST_CHUNK_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_RESPONSE_TIME_TO_FIRST_TOKEN} `gen_ai.response.time_to_first_token`\n *\n * @example 0.6853435\n */\nexport const GEN_AI_RESPONSE_TIME_TO_FIRST_CHUNK = 'gen_ai.response.time_to_first_chunk';\n\n/**\n * Type for {@link GEN_AI_RESPONSE_TIME_TO_FIRST_CHUNK} gen_ai.response.time_to_first_chunk\n */\nexport type GEN_AI_RESPONSE_TIME_TO_FIRST_CHUNK_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__response__time_to_first_token.json\n\n/**\n * Time in seconds when the first response content chunk arrived in streaming responses. `gen_ai.response.time_to_first_token`\n *\n * Attribute Value Type: `number` {@link GEN_AI_RESPONSE_TIME_TO_FIRST_TOKEN_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_RESPONSE_TIME_TO_FIRST_CHUNK} `gen_ai.response.time_to_first_chunk`\n *\n * @deprecated Use {@link GEN_AI_RESPONSE_TIME_TO_FIRST_CHUNK} (gen_ai.response.time_to_first_chunk) instead\n * @example 0.6853435\n */\nexport const GEN_AI_RESPONSE_TIME_TO_FIRST_TOKEN = 'gen_ai.response.time_to_first_token';\n\n/**\n * Type for {@link GEN_AI_RESPONSE_TIME_TO_FIRST_TOKEN} gen_ai.response.time_to_first_token\n */\nexport type GEN_AI_RESPONSE_TIME_TO_FIRST_TOKEN_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__response__tokens_per_second.json\n\n/**\n * The total output tokens per seconds throughput `gen_ai.response.tokens_per_second`\n *\n * Attribute Value Type: `number` {@link GEN_AI_RESPONSE_TOKENS_PER_SECOND_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 12345.67\n */\nexport const GEN_AI_RESPONSE_TOKENS_PER_SECOND = 'gen_ai.response.tokens_per_second';\n\n/**\n * Type for {@link GEN_AI_RESPONSE_TOKENS_PER_SECOND} gen_ai.response.tokens_per_second\n */\nexport type GEN_AI_RESPONSE_TOKENS_PER_SECOND_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__response__tool_calls.json\n\n/**\n * The tool calls in the model's response. It has to be a stringified version of an array of objects. `gen_ai.response.tool_calls`\n *\n * Attribute Value Type: `string` {@link GEN_AI_RESPONSE_TOOL_CALLS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated Use {@link GEN_AI_OUTPUT_MESSAGES} (gen_ai.output.messages) instead\n * @example \"[{\\\"name\\\": \\\"get_weather\\\", \\\"arguments\\\": {\\\"location\\\": \\\"Paris\\\"}}]\"\n */\nexport const GEN_AI_RESPONSE_TOOL_CALLS = 'gen_ai.response.tool_calls';\n\n/**\n * Type for {@link GEN_AI_RESPONSE_TOOL_CALLS} gen_ai.response.tool_calls\n */\nexport type GEN_AI_RESPONSE_TOOL_CALLS_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__system.json\n\n/**\n * The provider of the model. `gen_ai.system`\n *\n * Attribute Value Type: `string` {@link GEN_AI_SYSTEM_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AI_MODEL_PROVIDER} `ai.model.provider`, {@link GEN_AI_PROVIDER_NAME} `gen_ai.provider.name`\n *\n * @deprecated Use {@link GEN_AI_PROVIDER_NAME} (gen_ai.provider.name) instead\n * @example \"openai\"\n */\nexport const GEN_AI_SYSTEM = 'gen_ai.system';\n\n/**\n * Type for {@link GEN_AI_SYSTEM} gen_ai.system\n */\nexport type GEN_AI_SYSTEM_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__system_instructions.json\n\n/**\n * The system instructions passed to the model. `gen_ai.system_instructions`\n *\n * Attribute Value Type: `string` {@link GEN_AI_SYSTEM_INSTRUCTIONS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AI_PREAMBLE} `ai.preamble`\n *\n * @example \"You are a helpful assistant\"\n */\nexport const GEN_AI_SYSTEM_INSTRUCTIONS = 'gen_ai.system_instructions';\n\n/**\n * Type for {@link GEN_AI_SYSTEM_INSTRUCTIONS} gen_ai.system_instructions\n */\nexport type GEN_AI_SYSTEM_INSTRUCTIONS_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__system__message.json\n\n/**\n * The system instructions passed to the model. `gen_ai.system.message`\n *\n * Attribute Value Type: `string` {@link GEN_AI_SYSTEM_MESSAGE_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated Use {@link GEN_AI_SYSTEM_INSTRUCTIONS} (gen_ai.system_instructions) instead\n * @example \"You are a helpful assistant\"\n */\nexport const GEN_AI_SYSTEM_MESSAGE = 'gen_ai.system.message';\n\n/**\n * Type for {@link GEN_AI_SYSTEM_MESSAGE} gen_ai.system.message\n */\nexport type GEN_AI_SYSTEM_MESSAGE_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__tool__call__arguments.json\n\n/**\n * The arguments of the tool call. It has to be a stringified version of the arguments to the tool. `gen_ai.tool.call.arguments`\n *\n * Attribute Value Type: `string` {@link GEN_AI_TOOL_CALL_ARGUMENTS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_TOOL_INPUT} `gen_ai.tool.input`\n *\n * @example \"{\\\"location\\\": \\\"Paris\\\"}\"\n */\nexport const GEN_AI_TOOL_CALL_ARGUMENTS = 'gen_ai.tool.call.arguments';\n\n/**\n * Type for {@link GEN_AI_TOOL_CALL_ARGUMENTS} gen_ai.tool.call.arguments\n */\nexport type GEN_AI_TOOL_CALL_ARGUMENTS_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__tool__call__result.json\n\n/**\n * The result of the tool call. It has to be a stringified version of the result of the tool. `gen_ai.tool.call.result`\n *\n * Attribute Value Type: `string` {@link GEN_AI_TOOL_CALL_RESULT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_TOOL_OUTPUT} `gen_ai.tool.output`, {@link GEN_AI_TOOL_MESSAGE} `gen_ai.tool.message`, {@link MCP_TOOL_RESULT_CONTENT} `mcp.tool.result.content`\n *\n * @example \"rainy, 57°F\"\n */\nexport const GEN_AI_TOOL_CALL_RESULT = 'gen_ai.tool.call.result';\n\n/**\n * Type for {@link GEN_AI_TOOL_CALL_RESULT} gen_ai.tool.call.result\n */\nexport type GEN_AI_TOOL_CALL_RESULT_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__tool__definitions.json\n\n/**\n * The list of source system tool definitions available to the GenAI agent or model. `gen_ai.tool.definitions`\n *\n * Attribute Value Type: `string` {@link GEN_AI_TOOL_DEFINITIONS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @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\\\"]}}]\"\n */\nexport const GEN_AI_TOOL_DEFINITIONS = 'gen_ai.tool.definitions';\n\n/**\n * Type for {@link GEN_AI_TOOL_DEFINITIONS} gen_ai.tool.definitions\n */\nexport type GEN_AI_TOOL_DEFINITIONS_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__tool__description.json\n\n/**\n * The description of the tool being used. `gen_ai.tool.description`\n *\n * Attribute Value Type: `string` {@link GEN_AI_TOOL_DESCRIPTION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"Searches the web for current information about a topic\"\n */\nexport const GEN_AI_TOOL_DESCRIPTION = 'gen_ai.tool.description';\n\n/**\n * Type for {@link GEN_AI_TOOL_DESCRIPTION} gen_ai.tool.description\n */\nexport type GEN_AI_TOOL_DESCRIPTION_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__tool__input.json\n\n/**\n * The input of the tool being used. It has to be a stringified version of the input to the tool. `gen_ai.tool.input`\n *\n * Attribute Value Type: `string` {@link GEN_AI_TOOL_INPUT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_TOOL_CALL_ARGUMENTS} `gen_ai.tool.call.arguments`\n *\n * @deprecated Use {@link GEN_AI_TOOL_CALL_ARGUMENTS} (gen_ai.tool.call.arguments) instead\n * @example \"{\\\"location\\\": \\\"Paris\\\"}\"\n */\nexport const GEN_AI_TOOL_INPUT = 'gen_ai.tool.input';\n\n/**\n * Type for {@link GEN_AI_TOOL_INPUT} gen_ai.tool.input\n */\nexport type GEN_AI_TOOL_INPUT_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__tool__message.json\n\n/**\n * The response from a tool or function call passed to the model. `gen_ai.tool.message`\n *\n * Attribute Value Type: `string` {@link GEN_AI_TOOL_MESSAGE_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_TOOL_CALL_RESULT} `gen_ai.tool.call.result`, {@link GEN_AI_TOOL_OUTPUT} `gen_ai.tool.output`, {@link MCP_TOOL_RESULT_CONTENT} `mcp.tool.result.content`\n *\n * @deprecated Use {@link GEN_AI_TOOL_CALL_RESULT} (gen_ai.tool.call.result) instead\n * @example \"rainy, 57°F\"\n */\nexport const GEN_AI_TOOL_MESSAGE = 'gen_ai.tool.message';\n\n/**\n * Type for {@link GEN_AI_TOOL_MESSAGE} gen_ai.tool.message\n */\nexport type GEN_AI_TOOL_MESSAGE_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__tool__name.json\n\n/**\n * Name of the tool utilized by the agent. `gen_ai.tool.name`\n *\n * Attribute Value Type: `string` {@link GEN_AI_TOOL_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AI_FUNCTION_CALL} `ai.function_call`, {@link MCP_TOOL_NAME} `mcp.tool.name`\n *\n * @example \"Flights\"\n */\nexport const GEN_AI_TOOL_NAME = 'gen_ai.tool.name';\n\n/**\n * Type for {@link GEN_AI_TOOL_NAME} gen_ai.tool.name\n */\nexport type GEN_AI_TOOL_NAME_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__tool__output.json\n\n/**\n * The output of the tool being used. It has to be a stringified version of the output of the tool. `gen_ai.tool.output`\n *\n * Attribute Value Type: `string` {@link GEN_AI_TOOL_OUTPUT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_TOOL_CALL_RESULT} `gen_ai.tool.call.result`, {@link GEN_AI_TOOL_MESSAGE} `gen_ai.tool.message`, {@link MCP_TOOL_RESULT_CONTENT} `mcp.tool.result.content`\n *\n * @deprecated Use {@link GEN_AI_TOOL_CALL_RESULT} (gen_ai.tool.call.result) instead\n * @example \"rainy, 57°F\"\n */\nexport const GEN_AI_TOOL_OUTPUT = 'gen_ai.tool.output';\n\n/**\n * Type for {@link GEN_AI_TOOL_OUTPUT} gen_ai.tool.output\n */\nexport type GEN_AI_TOOL_OUTPUT_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__tool__type.json\n\n/**\n * The type of tool being used. `gen_ai.tool.type`\n *\n * Attribute Value Type: `string` {@link GEN_AI_TOOL_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @deprecated  - The gen_ai.tool.type attribute is deprecated and should no longer be set.\n * @example \"function\"\n */\nexport const GEN_AI_TOOL_TYPE = 'gen_ai.tool.type';\n\n/**\n * Type for {@link GEN_AI_TOOL_TYPE} gen_ai.tool.type\n */\nexport type GEN_AI_TOOL_TYPE_TYPE = string;\n\n// Path: model/attributes/gen_ai/gen_ai__usage__cache_creation__input_tokens.json\n\n/**\n * The number of tokens written to the cache when processing the AI input (prompt). `gen_ai.usage.cache_creation.input_tokens`\n *\n * Attribute Value Type: `number` {@link GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE} `gen_ai.usage.input_tokens.cache_write`\n *\n * @example 100\n */\nexport const GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS = 'gen_ai.usage.cache_creation.input_tokens';\n\n/**\n * Type for {@link GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS} gen_ai.usage.cache_creation.input_tokens\n */\nexport type GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__usage__cache_read__input_tokens.json\n\n/**\n * The number of cached tokens used to process the AI input (prompt). `gen_ai.usage.cache_read.input_tokens`\n *\n * Attribute Value Type: `number` {@link GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_USAGE_INPUT_TOKENS_CACHED} `gen_ai.usage.input_tokens.cached`\n *\n * @example 50\n */\nexport const GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS = 'gen_ai.usage.cache_read.input_tokens';\n\n/**\n * Type for {@link GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS} gen_ai.usage.cache_read.input_tokens\n */\nexport type GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__usage__completion_tokens.json\n\n/**\n * The number of tokens used in the GenAI response (completion). `gen_ai.usage.completion_tokens`\n *\n * Attribute Value Type: `number` {@link GEN_AI_USAGE_COMPLETION_TOKENS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AI_COMPLETION_TOKENS_USED} `ai.completion_tokens.used`, {@link GEN_AI_USAGE_OUTPUT_TOKENS} `gen_ai.usage.output_tokens`\n *\n * @deprecated Use {@link GEN_AI_USAGE_OUTPUT_TOKENS} (gen_ai.usage.output_tokens) instead\n * @example 10\n */\nexport const GEN_AI_USAGE_COMPLETION_TOKENS = 'gen_ai.usage.completion_tokens';\n\n/**\n * Type for {@link GEN_AI_USAGE_COMPLETION_TOKENS} gen_ai.usage.completion_tokens\n */\nexport type GEN_AI_USAGE_COMPLETION_TOKENS_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__usage__input_tokens.json\n\n/**\n * The number of tokens used to process the AI input (prompt) including cached input tokens. `gen_ai.usage.input_tokens`\n *\n * Attribute Value Type: `number` {@link GEN_AI_USAGE_INPUT_TOKENS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AI_PROMPT_TOKENS_USED} `ai.prompt_tokens.used`, {@link GEN_AI_USAGE_PROMPT_TOKENS} `gen_ai.usage.prompt_tokens`\n *\n * @example 10\n */\nexport const GEN_AI_USAGE_INPUT_TOKENS = 'gen_ai.usage.input_tokens';\n\n/**\n * Type for {@link GEN_AI_USAGE_INPUT_TOKENS} gen_ai.usage.input_tokens\n */\nexport type GEN_AI_USAGE_INPUT_TOKENS_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__usage__input_tokens__cached.json\n\n/**\n * The number of cached tokens used to process the AI input (prompt). `gen_ai.usage.input_tokens.cached`\n *\n * Attribute Value Type: `number` {@link GEN_AI_USAGE_INPUT_TOKENS_CACHED_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS} `gen_ai.usage.cache_read.input_tokens`\n *\n * @deprecated Use {@link GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS} (gen_ai.usage.cache_read.input_tokens) instead\n * @example 50\n */\nexport const GEN_AI_USAGE_INPUT_TOKENS_CACHED = 'gen_ai.usage.input_tokens.cached';\n\n/**\n * Type for {@link GEN_AI_USAGE_INPUT_TOKENS_CACHED} gen_ai.usage.input_tokens.cached\n */\nexport type GEN_AI_USAGE_INPUT_TOKENS_CACHED_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__usage__input_tokens__cache_write.json\n\n/**\n * The number of tokens written to the cache when processing the AI input (prompt). `gen_ai.usage.input_tokens.cache_write`\n *\n * Attribute Value Type: `number` {@link GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS} `gen_ai.usage.cache_creation.input_tokens`\n *\n * @deprecated Use {@link GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS} (gen_ai.usage.cache_creation.input_tokens) instead\n * @example 100\n */\nexport const GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE = 'gen_ai.usage.input_tokens.cache_write';\n\n/**\n * Type for {@link GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE} gen_ai.usage.input_tokens.cache_write\n */\nexport type GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__usage__output_tokens.json\n\n/**\n * The number of tokens used for creating the AI output (including reasoning tokens). `gen_ai.usage.output_tokens`\n *\n * Attribute Value Type: `number` {@link GEN_AI_USAGE_OUTPUT_TOKENS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AI_COMPLETION_TOKENS_USED} `ai.completion_tokens.used`, {@link GEN_AI_USAGE_COMPLETION_TOKENS} `gen_ai.usage.completion_tokens`\n *\n * @example 10\n */\nexport const GEN_AI_USAGE_OUTPUT_TOKENS = 'gen_ai.usage.output_tokens';\n\n/**\n * Type for {@link GEN_AI_USAGE_OUTPUT_TOKENS} gen_ai.usage.output_tokens\n */\nexport type GEN_AI_USAGE_OUTPUT_TOKENS_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__usage__output_tokens__reasoning.json\n\n/**\n * The number of tokens used for reasoning to create the AI output. `gen_ai.usage.output_tokens.reasoning`\n *\n * Attribute Value Type: `number` {@link GEN_AI_USAGE_OUTPUT_TOKENS_REASONING_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_USAGE_REASONING_OUTPUT_TOKENS} `gen_ai.usage.reasoning.output_tokens`\n *\n * @deprecated Use {@link GEN_AI_USAGE_REASONING_OUTPUT_TOKENS} (gen_ai.usage.reasoning.output_tokens) instead\n * @example 75\n */\nexport const GEN_AI_USAGE_OUTPUT_TOKENS_REASONING = 'gen_ai.usage.output_tokens.reasoning';\n\n/**\n * Type for {@link GEN_AI_USAGE_OUTPUT_TOKENS_REASONING} gen_ai.usage.output_tokens.reasoning\n */\nexport type GEN_AI_USAGE_OUTPUT_TOKENS_REASONING_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__usage__prompt_tokens.json\n\n/**\n * The number of tokens used in the GenAI input (prompt). `gen_ai.usage.prompt_tokens`\n *\n * Attribute Value Type: `number` {@link GEN_AI_USAGE_PROMPT_TOKENS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link AI_PROMPT_TOKENS_USED} `ai.prompt_tokens.used`, {@link GEN_AI_USAGE_INPUT_TOKENS} `gen_ai.usage.input_tokens`\n *\n * @deprecated Use {@link GEN_AI_USAGE_INPUT_TOKENS} (gen_ai.usage.input_tokens) instead\n * @example 20\n */\nexport const GEN_AI_USAGE_PROMPT_TOKENS = 'gen_ai.usage.prompt_tokens';\n\n/**\n * Type for {@link GEN_AI_USAGE_PROMPT_TOKENS} gen_ai.usage.prompt_tokens\n */\nexport type GEN_AI_USAGE_PROMPT_TOKENS_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__usage__reasoning__output_tokens.json\n\n/**\n * The number of tokens used for reasoning to create the AI output. `gen_ai.usage.reasoning.output_tokens`\n *\n * Attribute Value Type: `number` {@link GEN_AI_USAGE_REASONING_OUTPUT_TOKENS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_USAGE_OUTPUT_TOKENS_REASONING} `gen_ai.usage.output_tokens.reasoning`\n *\n * @example 75\n */\nexport const GEN_AI_USAGE_REASONING_OUTPUT_TOKENS = 'gen_ai.usage.reasoning.output_tokens';\n\n/**\n * Type for {@link GEN_AI_USAGE_REASONING_OUTPUT_TOKENS} gen_ai.usage.reasoning.output_tokens\n */\nexport type GEN_AI_USAGE_REASONING_OUTPUT_TOKENS_TYPE = number;\n\n// Path: model/attributes/gen_ai/gen_ai__usage__total_tokens.json\n\n/**\n * The total number of tokens used to process the prompt. (input tokens plus output todkens) `gen_ai.usage.total_tokens`\n *\n * Attribute Value Type: `number` {@link GEN_AI_USAGE_TOTAL_TOKENS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link AI_TOTAL_TOKENS_USED} `ai.total_tokens.used`\n *\n * @example 20\n */\nexport const GEN_AI_USAGE_TOTAL_TOKENS = 'gen_ai.usage.total_tokens';\n\n/**\n * Type for {@link GEN_AI_USAGE_TOTAL_TOKENS} gen_ai.usage.total_tokens\n */\nexport type GEN_AI_USAGE_TOTAL_TOKENS_TYPE = number;\n\n// Path: model/attributes/graphql/graphql__document.json\n\n/**\n * The GraphQL document being executed. `graphql.document`\n *\n * Attribute Value Type: `string` {@link GRAPHQL_DOCUMENT_TYPE}\n *\n * Apply Scrubbing: auto - The document may contain sensitive information in arguments or variables. Instrumentation should redact sensitive information when possible.\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"query findBookById { bookById(id: ?) { name } }\"\n */\nexport const GRAPHQL_DOCUMENT = 'graphql.document';\n\n/**\n * Type for {@link GRAPHQL_DOCUMENT} graphql.document\n */\nexport type GRAPHQL_DOCUMENT_TYPE = string;\n\n// Path: model/attributes/graphql/graphql__operation__name.json\n\n/**\n * The name of the operation being executed. `graphql.operation.name`\n *\n * Attribute Value Type: `string` {@link GRAPHQL_OPERATION_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"findBookById\"\n */\nexport const GRAPHQL_OPERATION_NAME = 'graphql.operation.name';\n\n/**\n * Type for {@link GRAPHQL_OPERATION_NAME} graphql.operation.name\n */\nexport type GRAPHQL_OPERATION_NAME_TYPE = string;\n\n// Path: model/attributes/graphql/graphql__operation__type.json\n\n/**\n * The type of the operation being executed. `graphql.operation.type`\n *\n * Attribute Value Type: `string` {@link GRAPHQL_OPERATION_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"query\"\n */\nexport const GRAPHQL_OPERATION_TYPE = 'graphql.operation.type';\n\n/**\n * Type for {@link GRAPHQL_OPERATION_TYPE} graphql.operation.type\n */\nexport type GRAPHQL_OPERATION_TYPE_TYPE = string;\n\n// Path: model/attributes/hardwareConcurrency.json\n\n/**\n * The number of logical CPU cores available. `hardwareConcurrency`\n *\n * Attribute Value Type: `string` {@link HARDWARECONCURRENCY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link DEVICE_PROCESSOR_COUNT} `device.processor_count`\n *\n * @deprecated Use {@link DEVICE_PROCESSOR_COUNT} (device.processor_count) instead - Old namespace-less attribute, to be replaced with device.processor_count for span-first future\n * @example \"14\"\n */\nexport const HARDWARECONCURRENCY = 'hardwareConcurrency';\n\n/**\n * Type for {@link HARDWARECONCURRENCY} hardwareConcurrency\n */\nexport type HARDWARECONCURRENCY_TYPE = string;\n\n// Path: model/attributes/http/http__client_ip.json\n\n/**\n * Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name. `http.client_ip`\n *\n * Attribute Value Type: `string` {@link HTTP_CLIENT_IP_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link CLIENT_ADDRESS} `client.address`\n *\n * @deprecated Use {@link CLIENT_ADDRESS} (client.address) instead\n * @example \"example.com\"\n */\nexport const HTTP_CLIENT_IP = 'http.client_ip';\n\n/**\n * Type for {@link HTTP_CLIENT_IP} http.client_ip\n */\nexport type HTTP_CLIENT_IP_TYPE = string;\n\n// Path: model/attributes/http/http__decoded_response_content_length.json\n\n/**\n * The decoded body size of the response (in bytes). `http.decoded_response_content_length`\n *\n * Attribute Value Type: `number` {@link HTTP_DECODED_RESPONSE_CONTENT_LENGTH_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 456\n */\nexport const HTTP_DECODED_RESPONSE_CONTENT_LENGTH = 'http.decoded_response_content_length';\n\n/**\n * Type for {@link HTTP_DECODED_RESPONSE_CONTENT_LENGTH} http.decoded_response_content_length\n */\nexport type HTTP_DECODED_RESPONSE_CONTENT_LENGTH_TYPE = number;\n\n// Path: model/attributes/http/http__flavor.json\n\n/**\n * The actual version of the protocol used for network communication. `http.flavor`\n *\n * Attribute Value Type: `string` {@link HTTP_FLAVOR_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link NETWORK_PROTOCOL_VERSION} `network.protocol.version`, {@link NET_PROTOCOL_VERSION} `net.protocol.version`\n *\n * @deprecated Use {@link NETWORK_PROTOCOL_VERSION} (network.protocol.version) instead\n * @example \"1.1\"\n */\nexport const HTTP_FLAVOR = 'http.flavor';\n\n/**\n * Type for {@link HTTP_FLAVOR} http.flavor\n */\nexport type HTTP_FLAVOR_TYPE = string;\n\n// Path: model/attributes/http/http__fragment.json\n\n/**\n * The fragments present in the URI. Note that this contains the leading # character, while the `url.fragment` attribute does not. `http.fragment`\n *\n * Attribute Value Type: `string` {@link HTTP_FRAGMENT_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"#details\"\n */\nexport const HTTP_FRAGMENT = 'http.fragment';\n\n/**\n * Type for {@link HTTP_FRAGMENT} http.fragment\n */\nexport type HTTP_FRAGMENT_TYPE = string;\n\n// Path: model/attributes/http/http__host.json\n\n/**\n * The domain name. `http.host`\n *\n * Attribute Value Type: `string` {@link HTTP_HOST_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link SERVER_ADDRESS} `server.address`, {@link CLIENT_ADDRESS} `client.address`, {@link HTTP_SERVER_NAME} `http.server_name`, {@link NET_HOST_NAME} `net.host.name`, {@link SERVER_NAME} `server_name`\n *\n * @deprecated Use {@link SERVER_ADDRESS} (server.address) instead - Deprecated, use one of `server.address` or `client.address`, depending on the usage\n * @example \"example.com\"\n */\nexport const HTTP_HOST = 'http.host';\n\n/**\n * Type for {@link HTTP_HOST} http.host\n */\nexport type HTTP_HOST_TYPE = string;\n\n// Path: model/attributes/http/http__method.json\n\n/**\n * The HTTP method used. `http.method`\n *\n * Attribute Value Type: `string` {@link HTTP_METHOD_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link HTTP_REQUEST_METHOD} `http.request.method`, {@link _HTTP_REQUEST_METHOD} `http.request_method`, {@link METHOD} `method`\n *\n * @deprecated Use {@link HTTP_REQUEST_METHOD} (http.request.method) instead\n * @example \"GET\"\n */\nexport const HTTP_METHOD = 'http.method';\n\n/**\n * Type for {@link HTTP_METHOD} http.method\n */\nexport type HTTP_METHOD_TYPE = string;\n\n// Path: model/attributes/http/http__query.json\n\n/**\n * The query string present in the URL. Note that this contains the leading ? character, while the `url.query` attribute does not. `http.query`\n *\n * Attribute Value Type: `string` {@link HTTP_QUERY_TYPE}\n *\n * Apply Scrubbing: auto - Query string values can contain sensitive information. Clients should attempt to scrub parameters that might contain sensitive information.\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"?foo=bar&bar=baz\"\n */\nexport const HTTP_QUERY = 'http.query';\n\n/**\n * Type for {@link HTTP_QUERY} http.query\n */\nexport type HTTP_QUERY_TYPE = string;\n\n// Path: model/attributes/http/http__request__body__data.json\n\n/**\n * HTTP request body data. Can be given as string or structural data of any format. `http.request.body.data`\n *\n * Attribute Value Type: `string` {@link HTTP_REQUEST_BODY_DATA_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"[{\\\"role\\\": \\\"user\\\", \\\"message\\\": \\\"hello\\\"}]\"\n */\nexport const HTTP_REQUEST_BODY_DATA = 'http.request.body.data';\n\n/**\n * Type for {@link HTTP_REQUEST_BODY_DATA} http.request.body.data\n */\nexport type HTTP_REQUEST_BODY_DATA_TYPE = string;\n\n// Path: model/attributes/http/http__request__connection_end.json\n\n/**\n * 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. `http.request.connection_end`\n *\n * Attribute Value Type: `number` {@link HTTP_REQUEST_CONNECTION_END_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1732829555.15\n */\nexport const HTTP_REQUEST_CONNECTION_END = 'http.request.connection_end';\n\n/**\n * Type for {@link HTTP_REQUEST_CONNECTION_END} http.request.connection_end\n */\nexport type HTTP_REQUEST_CONNECTION_END_TYPE = number;\n\n// Path: model/attributes/http/http__request__connect_start.json\n\n/**\n * The UNIX timestamp representing the time immediately before the user agent starts establishing the connection to the server to retrieve the resource. `http.request.connect_start`\n *\n * Attribute Value Type: `number` {@link HTTP_REQUEST_CONNECT_START_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1732829555.111\n */\nexport const HTTP_REQUEST_CONNECT_START = 'http.request.connect_start';\n\n/**\n * Type for {@link HTTP_REQUEST_CONNECT_START} http.request.connect_start\n */\nexport type HTTP_REQUEST_CONNECT_START_TYPE = number;\n\n// Path: model/attributes/http/http__request__domain_lookup_end.json\n\n/**\n * The UNIX timestamp representing the time immediately after the browser finishes the domain-name lookup for the resource. `http.request.domain_lookup_end`\n *\n * Attribute Value Type: `number` {@link HTTP_REQUEST_DOMAIN_LOOKUP_END_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1732829555.201\n */\nexport const HTTP_REQUEST_DOMAIN_LOOKUP_END = 'http.request.domain_lookup_end';\n\n/**\n * Type for {@link HTTP_REQUEST_DOMAIN_LOOKUP_END} http.request.domain_lookup_end\n */\nexport type HTTP_REQUEST_DOMAIN_LOOKUP_END_TYPE = number;\n\n// Path: model/attributes/http/http__request__domain_lookup_start.json\n\n/**\n * The UNIX timestamp representing the time immediately before the browser starts the domain name lookup for the resource. `http.request.domain_lookup_start`\n *\n * Attribute Value Type: `number` {@link HTTP_REQUEST_DOMAIN_LOOKUP_START_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1732829555.322\n */\nexport const HTTP_REQUEST_DOMAIN_LOOKUP_START = 'http.request.domain_lookup_start';\n\n/**\n * Type for {@link HTTP_REQUEST_DOMAIN_LOOKUP_START} http.request.domain_lookup_start\n */\nexport type HTTP_REQUEST_DOMAIN_LOOKUP_START_TYPE = number;\n\n// Path: model/attributes/http/http__request__fetch_start.json\n\n/**\n * The UNIX timestamp representing the time immediately before the browser starts to fetch the resource. `http.request.fetch_start`\n *\n * Attribute Value Type: `number` {@link HTTP_REQUEST_FETCH_START_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1732829555.389\n */\nexport const HTTP_REQUEST_FETCH_START = 'http.request.fetch_start';\n\n/**\n * Type for {@link HTTP_REQUEST_FETCH_START} http.request.fetch_start\n */\nexport type HTTP_REQUEST_FETCH_START_TYPE = number;\n\n// Path: model/attributes/http/http__request__header__[key].json\n\n/**\n * HTTP request headers, <key> being the normalized HTTP Header name (lowercase), the value being the header values. `http.request.header.<key>`\n *\n * Attribute Value Type: `Array<string>` {@link HTTP_REQUEST_HEADER_KEY_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Has Dynamic Suffix: true\n *\n * @example \"http.request.header.custom-header=['foo', 'bar']\"\n */\nexport const HTTP_REQUEST_HEADER_KEY = 'http.request.header.<key>';\n\n/**\n * Base key for {@link HTTP_REQUEST_HEADER_KEY}. Use with a dynamic suffix, e.g. `${HTTP_REQUEST_HEADER_KEY_BASE}.${key}`.\n */\nexport const HTTP_REQUEST_HEADER_KEY_BASE = 'http.request.header';\n\n/**\n * Type for {@link HTTP_REQUEST_HEADER_KEY} http.request.header.<key>\n */\nexport type HTTP_REQUEST_HEADER_KEY_TYPE = Array<string>;\n\n// Path: model/attributes/http/http__request__method.json\n\n/**\n * The HTTP method used. `http.request.method`\n *\n * Attribute Value Type: `string` {@link HTTP_REQUEST_METHOD_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link METHOD} `method`, {@link HTTP_METHOD} `http.method`, {@link _HTTP_REQUEST_METHOD} `http.request_method`\n *\n * @example \"GET\"\n */\nexport const HTTP_REQUEST_METHOD = 'http.request.method';\n\n/**\n * Type for {@link HTTP_REQUEST_METHOD} http.request.method\n */\nexport type HTTP_REQUEST_METHOD_TYPE = string;\n\n// Path: model/attributes/http/http__request_method.json\n\n/**\n * The HTTP method used. `http.request_method`\n *\n * Attribute Value Type: `string` {@link _HTTP_REQUEST_METHOD_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link METHOD} `method`, {@link HTTP_METHOD} `http.method`, {@link HTTP_REQUEST_METHOD} `http.request.method`\n *\n * @deprecated Use {@link HTTP_REQUEST_METHOD} (http.request.method) instead\n * @example \"GET\"\n */\nexport const _HTTP_REQUEST_METHOD = 'http.request_method';\n\n/**\n * Type for {@link _HTTP_REQUEST_METHOD} http.request_method\n */\nexport type _HTTP_REQUEST_METHOD_TYPE = string;\n\n// Path: model/attributes/http/http__request__redirect_end.json\n\n/**\n * The UNIX timestamp representing the timestamp immediately after receiving the last byte of the response of the last redirect `http.request.redirect_end`\n *\n * Attribute Value Type: `number` {@link HTTP_REQUEST_REDIRECT_END_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1732829558.502\n */\nexport const HTTP_REQUEST_REDIRECT_END = 'http.request.redirect_end';\n\n/**\n * Type for {@link HTTP_REQUEST_REDIRECT_END} http.request.redirect_end\n */\nexport type HTTP_REQUEST_REDIRECT_END_TYPE = number;\n\n// Path: model/attributes/http/http__request__redirect_start.json\n\n/**\n * The UNIX timestamp representing the start time of the fetch which that initiates the redirect. `http.request.redirect_start`\n *\n * Attribute Value Type: `number` {@link HTTP_REQUEST_REDIRECT_START_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1732829555.495\n */\nexport const HTTP_REQUEST_REDIRECT_START = 'http.request.redirect_start';\n\n/**\n * Type for {@link HTTP_REQUEST_REDIRECT_START} http.request.redirect_start\n */\nexport type HTTP_REQUEST_REDIRECT_START_TYPE = number;\n\n// Path: model/attributes/http/http__request__request_start.json\n\n/**\n * 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. `http.request.request_start`\n *\n * Attribute Value Type: `number` {@link HTTP_REQUEST_REQUEST_START_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1732829555.51\n */\nexport const HTTP_REQUEST_REQUEST_START = 'http.request.request_start';\n\n/**\n * Type for {@link HTTP_REQUEST_REQUEST_START} http.request.request_start\n */\nexport type HTTP_REQUEST_REQUEST_START_TYPE = number;\n\n// Path: model/attributes/http/http__request__resend_count.json\n\n/**\n * The ordinal number of request resending attempt (for any reason, including redirects). `http.request.resend_count`\n *\n * Attribute Value Type: `number` {@link HTTP_REQUEST_RESEND_COUNT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 2\n */\nexport const HTTP_REQUEST_RESEND_COUNT = 'http.request.resend_count';\n\n/**\n * Type for {@link HTTP_REQUEST_RESEND_COUNT} http.request.resend_count\n */\nexport type HTTP_REQUEST_RESEND_COUNT_TYPE = number;\n\n// Path: model/attributes/http/http__request__response_end.json\n\n/**\n * 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. `http.request.response_end`\n *\n * Attribute Value Type: `number` {@link HTTP_REQUEST_RESPONSE_END_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1732829555.89\n */\nexport const HTTP_REQUEST_RESPONSE_END = 'http.request.response_end';\n\n/**\n * Type for {@link HTTP_REQUEST_RESPONSE_END} http.request.response_end\n */\nexport type HTTP_REQUEST_RESPONSE_END_TYPE = number;\n\n// Path: model/attributes/http/http__request__response_start.json\n\n/**\n * 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. `http.request.response_start`\n *\n * Attribute Value Type: `number` {@link HTTP_REQUEST_RESPONSE_START_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1732829555.7\n */\nexport const HTTP_REQUEST_RESPONSE_START = 'http.request.response_start';\n\n/**\n * Type for {@link HTTP_REQUEST_RESPONSE_START} http.request.response_start\n */\nexport type HTTP_REQUEST_RESPONSE_START_TYPE = number;\n\n// Path: model/attributes/http/http__request__same_origin.json\n\n/**\n * Indicates that a URL has the same origin as the current page's origin in the browser. `http.request.same_origin`\n *\n * Attribute Value Type: `boolean` {@link HTTP_REQUEST_SAME_ORIGIN_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link URL_SAME_ORIGIN} `url.same_origin`\n *\n * @example true\n */\nexport const HTTP_REQUEST_SAME_ORIGIN = 'http.request.same_origin';\n\n/**\n * Type for {@link HTTP_REQUEST_SAME_ORIGIN} http.request.same_origin\n */\nexport type HTTP_REQUEST_SAME_ORIGIN_TYPE = boolean;\n\n// Path: model/attributes/http/http__request__secure_connection_start.json\n\n/**\n * 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. `http.request.secure_connection_start`\n *\n * Attribute Value Type: `number` {@link HTTP_REQUEST_SECURE_CONNECTION_START_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1732829555.73\n */\nexport const HTTP_REQUEST_SECURE_CONNECTION_START = 'http.request.secure_connection_start';\n\n/**\n * Type for {@link HTTP_REQUEST_SECURE_CONNECTION_START} http.request.secure_connection_start\n */\nexport type HTTP_REQUEST_SECURE_CONNECTION_START_TYPE = number;\n\n// Path: model/attributes/http/http__request__time_to_first_byte.json\n\n/**\n * 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 `http.request.time_to_first_byte`\n *\n * Attribute Value Type: `number` {@link HTTP_REQUEST_TIME_TO_FIRST_BYTE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1.032\n */\nexport const HTTP_REQUEST_TIME_TO_FIRST_BYTE = 'http.request.time_to_first_byte';\n\n/**\n * Type for {@link HTTP_REQUEST_TIME_TO_FIRST_BYTE} http.request.time_to_first_byte\n */\nexport type HTTP_REQUEST_TIME_TO_FIRST_BYTE_TYPE = number;\n\n// Path: model/attributes/http/http__request__worker_start.json\n\n/**\n * 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. `http.request.worker_start`\n *\n * Attribute Value Type: `number` {@link HTTP_REQUEST_WORKER_START_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1732829553.68\n */\nexport const HTTP_REQUEST_WORKER_START = 'http.request.worker_start';\n\n/**\n * Type for {@link HTTP_REQUEST_WORKER_START} http.request.worker_start\n */\nexport type HTTP_REQUEST_WORKER_START_TYPE = number;\n\n// Path: model/attributes/http/http__response__body__size.json\n\n/**\n * The encoded body size of the response (in bytes). `http.response.body.size`\n *\n * Attribute Value Type: `number` {@link HTTP_RESPONSE_BODY_SIZE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link HTTP_RESPONSE_CONTENT_LENGTH} `http.response_content_length`, {@link HTTP_RESPONSE_HEADER_CONTENT_LENGTH} `http.response.header.content-length`\n *\n * @example 123\n */\nexport const HTTP_RESPONSE_BODY_SIZE = 'http.response.body.size';\n\n/**\n * Type for {@link HTTP_RESPONSE_BODY_SIZE} http.response.body.size\n */\nexport type HTTP_RESPONSE_BODY_SIZE_TYPE = number;\n\n// Path: model/attributes/http/http__response_content_length.json\n\n/**\n * The encoded body size of the response (in bytes). `http.response_content_length`\n *\n * Attribute Value Type: `number` {@link HTTP_RESPONSE_CONTENT_LENGTH_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link HTTP_RESPONSE_BODY_SIZE} `http.response.body.size`, {@link HTTP_RESPONSE_HEADER_CONTENT_LENGTH} `http.response.header.content-length`\n *\n * @deprecated Use {@link HTTP_RESPONSE_BODY_SIZE} (http.response.body.size) instead\n * @example 123\n */\nexport const HTTP_RESPONSE_CONTENT_LENGTH = 'http.response_content_length';\n\n/**\n * Type for {@link HTTP_RESPONSE_CONTENT_LENGTH} http.response_content_length\n */\nexport type HTTP_RESPONSE_CONTENT_LENGTH_TYPE = number;\n\n// Path: model/attributes/http/http__response__header__content-length.json\n\n/**\n * The size of the message body sent to the recipient (in bytes) `http.response.header.content-length`\n *\n * Attribute Value Type: `string` {@link HTTP_RESPONSE_HEADER_CONTENT_LENGTH_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link HTTP_RESPONSE_CONTENT_LENGTH} `http.response_content_length`, {@link HTTP_RESPONSE_BODY_SIZE} `http.response.body.size`\n *\n * @example \"http.response.header.custom-header=['foo', 'bar']\"\n */\nexport const HTTP_RESPONSE_HEADER_CONTENT_LENGTH = 'http.response.header.content-length';\n\n/**\n * Type for {@link HTTP_RESPONSE_HEADER_CONTENT_LENGTH} http.response.header.content-length\n */\nexport type HTTP_RESPONSE_HEADER_CONTENT_LENGTH_TYPE = string;\n\n// Path: model/attributes/http/http__response__header__[key].json\n\n/**\n * HTTP response headers, <key> being the normalized HTTP Header name (lowercase), the value being the header values. `http.response.header.<key>`\n *\n * Attribute Value Type: `Array<string>` {@link HTTP_RESPONSE_HEADER_KEY_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Has Dynamic Suffix: true\n *\n * @example \"http.response.header.custom-header=['foo', 'bar']\"\n */\nexport const HTTP_RESPONSE_HEADER_KEY = 'http.response.header.<key>';\n\n/**\n * Base key for {@link HTTP_RESPONSE_HEADER_KEY}. Use with a dynamic suffix, e.g. `${HTTP_RESPONSE_HEADER_KEY_BASE}.${key}`.\n */\nexport const HTTP_RESPONSE_HEADER_KEY_BASE = 'http.response.header';\n\n/**\n * Type for {@link HTTP_RESPONSE_HEADER_KEY} http.response.header.<key>\n */\nexport type HTTP_RESPONSE_HEADER_KEY_TYPE = Array<string>;\n\n// Path: model/attributes/http/http__response__size.json\n\n/**\n * The transfer size of the response (in bytes). `http.response.size`\n *\n * Attribute Value Type: `number` {@link HTTP_RESPONSE_SIZE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link HTTP_RESPONSE_TRANSFER_SIZE} `http.response_transfer_size`\n *\n * @example 456\n */\nexport const HTTP_RESPONSE_SIZE = 'http.response.size';\n\n/**\n * Type for {@link HTTP_RESPONSE_SIZE} http.response.size\n */\nexport type HTTP_RESPONSE_SIZE_TYPE = number;\n\n// Path: model/attributes/http/http__response__status_code.json\n\n/**\n * The status code of the HTTP response. `http.response.status_code`\n *\n * Attribute Value Type: `number` {@link HTTP_RESPONSE_STATUS_CODE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link HTTP_STATUS_CODE} `http.status_code`\n *\n * @example 404\n */\nexport const HTTP_RESPONSE_STATUS_CODE = 'http.response.status_code';\n\n/**\n * Type for {@link HTTP_RESPONSE_STATUS_CODE} http.response.status_code\n */\nexport type HTTP_RESPONSE_STATUS_CODE_TYPE = number;\n\n// Path: model/attributes/http/http__response_transfer_size.json\n\n/**\n * The transfer size of the response (in bytes). `http.response_transfer_size`\n *\n * Attribute Value Type: `number` {@link HTTP_RESPONSE_TRANSFER_SIZE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link HTTP_RESPONSE_SIZE} `http.response.size`\n *\n * @deprecated Use {@link HTTP_RESPONSE_SIZE} (http.response.size) instead\n * @example 456\n */\nexport const HTTP_RESPONSE_TRANSFER_SIZE = 'http.response_transfer_size';\n\n/**\n * Type for {@link HTTP_RESPONSE_TRANSFER_SIZE} http.response_transfer_size\n */\nexport type HTTP_RESPONSE_TRANSFER_SIZE_TYPE = number;\n\n// Path: model/attributes/http/http__route.json\n\n/**\n * The matched route, that is, the path template in the format used by the respective server framework. `http.route`\n *\n * Attribute Value Type: `string` {@link HTTP_ROUTE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link URL_TEMPLATE} `url.template`\n *\n * @example \"/users/:id\"\n */\nexport const HTTP_ROUTE = 'http.route';\n\n/**\n * Type for {@link HTTP_ROUTE} http.route\n */\nexport type HTTP_ROUTE_TYPE = string;\n\n// Path: model/attributes/http/http__scheme.json\n\n/**\n * The URI scheme component identifying the used protocol. `http.scheme`\n *\n * Attribute Value Type: `string` {@link HTTP_SCHEME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link URL_SCHEME} `url.scheme`\n *\n * @deprecated Use {@link URL_SCHEME} (url.scheme) instead\n * @example \"https\"\n */\nexport const HTTP_SCHEME = 'http.scheme';\n\n/**\n * Type for {@link HTTP_SCHEME} http.scheme\n */\nexport type HTTP_SCHEME_TYPE = string;\n\n// Path: model/attributes/http/http__server_name.json\n\n/**\n * The server domain name `http.server_name`\n *\n * Attribute Value Type: `string` {@link HTTP_SERVER_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link SERVER_ADDRESS} `server.address`, {@link NET_HOST_NAME} `net.host.name`, {@link HTTP_HOST} `http.host`, {@link SERVER_NAME} `server_name`\n *\n * @deprecated Use {@link SERVER_ADDRESS} (server.address) instead\n * @example \"example.com\"\n */\nexport const HTTP_SERVER_NAME = 'http.server_name';\n\n/**\n * Type for {@link HTTP_SERVER_NAME} http.server_name\n */\nexport type HTTP_SERVER_NAME_TYPE = string;\n\n// Path: model/attributes/http/http__server__request__time_in_queue.json\n\n/**\n * 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. `http.server.request.time_in_queue`\n *\n * Attribute Value Type: `number` {@link HTTP_SERVER_REQUEST_TIME_IN_QUEUE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 50\n */\nexport const HTTP_SERVER_REQUEST_TIME_IN_QUEUE = 'http.server.request.time_in_queue';\n\n/**\n * Type for {@link HTTP_SERVER_REQUEST_TIME_IN_QUEUE} http.server.request.time_in_queue\n */\nexport type HTTP_SERVER_REQUEST_TIME_IN_QUEUE_TYPE = number;\n\n// Path: model/attributes/http/http__status_code.json\n\n/**\n * The status code of the HTTP response. `http.status_code`\n *\n * Attribute Value Type: `number` {@link HTTP_STATUS_CODE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link HTTP_RESPONSE_STATUS_CODE} `http.response.status_code`\n *\n * @deprecated Use {@link HTTP_RESPONSE_STATUS_CODE} (http.response.status_code) instead\n * @example 404\n */\nexport const HTTP_STATUS_CODE = 'http.status_code';\n\n/**\n * Type for {@link HTTP_STATUS_CODE} http.status_code\n */\nexport type HTTP_STATUS_CODE_TYPE = number;\n\n// Path: model/attributes/http/http__target.json\n\n/**\n * The pathname and query string of the URL. `http.target`\n *\n * Attribute Value Type: `string` {@link HTTP_TARGET_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @deprecated Use {@link URL_PATH} (url.path) instead - This attribute is being deprecated in favor of url.path and url.query\n * @example \"/test?foo=bar#buzz\"\n */\nexport const HTTP_TARGET = 'http.target';\n\n/**\n * Type for {@link HTTP_TARGET} http.target\n */\nexport type HTTP_TARGET_TYPE = string;\n\n// Path: model/attributes/http/http__url.json\n\n/**\n * The URL of the resource that was fetched. `http.url`\n *\n * Attribute Value Type: `string` {@link HTTP_URL_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link URL_FULL} `url.full`, {@link URL} `url`\n *\n * @deprecated Use {@link URL_FULL} (url.full) instead\n * @example \"https://example.com/test?foo=bar#buzz\"\n */\nexport const HTTP_URL = 'http.url';\n\n/**\n * Type for {@link HTTP_URL} http.url\n */\nexport type HTTP_URL_TYPE = string;\n\n// Path: model/attributes/http/http__user_agent.json\n\n/**\n * Value of the HTTP User-Agent header sent by the client. `http.user_agent`\n *\n * Attribute Value Type: `string` {@link HTTP_USER_AGENT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link USER_AGENT_ORIGINAL} `user_agent.original`\n *\n * @deprecated Use {@link USER_AGENT_ORIGINAL} (user_agent.original) instead\n * @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\"\n */\nexport const HTTP_USER_AGENT = 'http.user_agent';\n\n/**\n * Type for {@link HTTP_USER_AGENT} http.user_agent\n */\nexport type HTTP_USER_AGENT_TYPE = string;\n\n// Path: model/attributes/id.json\n\n/**\n * A unique identifier for the span. `id`\n *\n * Attribute Value Type: `string` {@link ID_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"f47ac10b58cc4372a5670e02b2c3d479\"\n */\nexport const ID = 'id';\n\n/**\n * Type for {@link ID} id\n */\nexport type ID_TYPE = string;\n\n// Path: model/attributes/inp.json\n\n/**\n * The value of the recorded Interaction to Next Paint (INP) web vital `inp`\n *\n * Attribute Value Type: `number` {@link INP_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link BROWSER_WEB_VITAL_INP_VALUE} `browser.web_vital.inp.value`\n *\n * @deprecated Use {@link BROWSER_WEB_VITAL_INP_VALUE} (browser.web_vital.inp.value) instead - The INP web vital is now recorded as a browser.web_vital.inp.value attribute.\n * @example 200\n */\nexport const INP = 'inp';\n\n/**\n * Type for {@link INP} inp\n */\nexport type INP_TYPE = number;\n\n// Path: model/attributes/jsonrpc/jsonrpc__protocol__version.json\n\n/**\n * The version of the JSON-RPC protocol used. `jsonrpc.protocol.version`\n *\n * Attribute Value Type: `string` {@link JSONRPC_PROTOCOL_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"2.0\"\n */\nexport const JSONRPC_PROTOCOL_VERSION = 'jsonrpc.protocol.version';\n\n/**\n * Type for {@link JSONRPC_PROTOCOL_VERSION} jsonrpc.protocol.version\n */\nexport type JSONRPC_PROTOCOL_VERSION_TYPE = string;\n\n// Path: model/attributes/jsonrpc/jsonrpc__request__id.json\n\n/**\n * The JSON-RPC request identifier. Unique within the session. `jsonrpc.request.id`\n *\n * Attribute Value Type: `string` {@link JSONRPC_REQUEST_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link MCP_REQUEST_ID} `mcp.request.id`\n *\n * @example \"1\"\n */\nexport const JSONRPC_REQUEST_ID = 'jsonrpc.request.id';\n\n/**\n * Type for {@link JSONRPC_REQUEST_ID} jsonrpc.request.id\n */\nexport type JSONRPC_REQUEST_ID_TYPE = string;\n\n// Path: model/attributes/jvm/jvm__gc__action.json\n\n/**\n * Name of the garbage collector action. `jvm.gc.action`\n *\n * Attribute Value Type: `string` {@link JVM_GC_ACTION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"end of minor GC\"\n */\nexport const JVM_GC_ACTION = 'jvm.gc.action';\n\n/**\n * Type for {@link JVM_GC_ACTION} jvm.gc.action\n */\nexport type JVM_GC_ACTION_TYPE = string;\n\n// Path: model/attributes/jvm/jvm__gc__name.json\n\n/**\n * Name of the garbage collector. `jvm.gc.name`\n *\n * Attribute Value Type: `string` {@link JVM_GC_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"G1 Young Generation\"\n */\nexport const JVM_GC_NAME = 'jvm.gc.name';\n\n/**\n * Type for {@link JVM_GC_NAME} jvm.gc.name\n */\nexport type JVM_GC_NAME_TYPE = string;\n\n// Path: model/attributes/jvm/jvm__memory__pool__name.json\n\n/**\n * Name of the memory pool. `jvm.memory.pool.name`\n *\n * Attribute Value Type: `string` {@link JVM_MEMORY_POOL_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"G1 Old Gen\"\n */\nexport const JVM_MEMORY_POOL_NAME = 'jvm.memory.pool.name';\n\n/**\n * Type for {@link JVM_MEMORY_POOL_NAME} jvm.memory.pool.name\n */\nexport type JVM_MEMORY_POOL_NAME_TYPE = string;\n\n// Path: model/attributes/jvm/jvm__memory__type.json\n\n/**\n * Name of the memory pool. `jvm.memory.type`\n *\n * Attribute Value Type: `string` {@link JVM_MEMORY_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"G1 Old Gen\"\n */\nexport const JVM_MEMORY_TYPE = 'jvm.memory.type';\n\n/**\n * Type for {@link JVM_MEMORY_TYPE} jvm.memory.type\n */\nexport type JVM_MEMORY_TYPE_TYPE = string;\n\n// Path: model/attributes/jvm/jvm__thread__daemon.json\n\n/**\n * Whether the thread is daemon or not. `jvm.thread.daemon`\n *\n * Attribute Value Type: `boolean` {@link JVM_THREAD_DAEMON_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example true\n */\nexport const JVM_THREAD_DAEMON = 'jvm.thread.daemon';\n\n/**\n * Type for {@link JVM_THREAD_DAEMON} jvm.thread.daemon\n */\nexport type JVM_THREAD_DAEMON_TYPE = boolean;\n\n// Path: model/attributes/jvm/jvm__thread__state.json\n\n/**\n * State of the thread. `jvm.thread.state`\n *\n * Attribute Value Type: `string` {@link JVM_THREAD_STATE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"blocked\"\n */\nexport const JVM_THREAD_STATE = 'jvm.thread.state';\n\n/**\n * Type for {@link JVM_THREAD_STATE} jvm.thread.state\n */\nexport type JVM_THREAD_STATE_TYPE = string;\n\n// Path: model/attributes/koa/koa__name.json\n\n/**\n * The name of the Koa middleware or matched route that handled the request. `koa.name`\n *\n * Attribute Value Type: `string` {@link KOA_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated  - No single replacement. SDKs should use http.route for router layers and code.function.name for middleware layers instead.\n * @example \"/users/:id\"\n */\nexport const KOA_NAME = 'koa.name';\n\n/**\n * Type for {@link KOA_NAME} koa.name\n */\nexport type KOA_NAME_TYPE = string;\n\n// Path: model/attributes/koa/koa__type.json\n\n/**\n * The type of the Koa layer that handled the request. `koa.type`\n *\n * Attribute Value Type: `string` {@link KOA_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"router\"\n */\nexport const KOA_TYPE = 'koa.type';\n\n/**\n * Type for {@link KOA_TYPE} koa.type\n */\nexport type KOA_TYPE_TYPE = string;\n\n// Path: model/attributes/lcp.json\n\n/**\n * The value of the recorded Largest Contentful Paint (LCP) web vital `lcp`\n *\n * Attribute Value Type: `number` {@link LCP_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link BROWSER_WEB_VITAL_LCP_VALUE} `browser.web_vital.lcp.value`\n *\n * @deprecated Use {@link BROWSER_WEB_VITAL_LCP_VALUE} (browser.web_vital.lcp.value) instead - The LCP web vital is now recorded as a browser.web_vital.lcp.value attribute.\n * @example 2500\n */\nexport const LCP = 'lcp';\n\n/**\n * Type for {@link LCP} lcp\n */\nexport type LCP_TYPE = number;\n\n// Path: model/attributes/lcp/lcp__element.json\n\n/**\n * The dom element responsible for the largest contentful paint. `lcp.element`\n *\n * Attribute Value Type: `string` {@link LCP_ELEMENT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link BROWSER_WEB_VITAL_LCP_ELEMENT} `browser.web_vital.lcp.element`\n *\n * @deprecated Use {@link BROWSER_WEB_VITAL_LCP_ELEMENT} (browser.web_vital.lcp.element) instead - The LCP element is now recorded as a browser.web_vital.lcp.element attribute.\n * @example \"img\"\n */\nexport const LCP_ELEMENT = 'lcp.element';\n\n/**\n * Type for {@link LCP_ELEMENT} lcp.element\n */\nexport type LCP_ELEMENT_TYPE = string;\n\n// Path: model/attributes/lcp/lcp__id.json\n\n/**\n * The id of the dom element responsible for the largest contentful paint. `lcp.id`\n *\n * Attribute Value Type: `string` {@link LCP_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link BROWSER_WEB_VITAL_LCP_ID} `browser.web_vital.lcp.id`\n *\n * @deprecated Use {@link BROWSER_WEB_VITAL_LCP_ID} (browser.web_vital.lcp.id) instead - The LCP id is now recorded as a browser.web_vital.lcp.id attribute.\n * @example \"#hero\"\n */\nexport const LCP_ID = 'lcp.id';\n\n/**\n * Type for {@link LCP_ID} lcp.id\n */\nexport type LCP_ID_TYPE = string;\n\n// Path: model/attributes/lcp/lcp__loadTime.json\n\n/**\n * The time it took for the LCP element to be loaded `lcp.loadTime`\n *\n * Attribute Value Type: `number` {@link LCP_LOADTIME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link BROWSER_WEB_VITAL_LCP_LOAD_TIME} `browser.web_vital.lcp.load_time`\n *\n * @deprecated Use {@link BROWSER_WEB_VITAL_LCP_LOAD_TIME} (browser.web_vital.lcp.load_time) instead - The LCP load time is now recorded as a browser.web_vital.lcp.load_time attribute.\n * @example 1402\n */\nexport const LCP_LOADTIME = 'lcp.loadTime';\n\n/**\n * Type for {@link LCP_LOADTIME} lcp.loadTime\n */\nexport type LCP_LOADTIME_TYPE = number;\n\n// Path: model/attributes/lcp/lcp__renderTime.json\n\n/**\n * The time it took for the LCP element to be rendered `lcp.renderTime`\n *\n * Attribute Value Type: `number` {@link LCP_RENDERTIME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link BROWSER_WEB_VITAL_LCP_RENDER_TIME} `browser.web_vital.lcp.render_time`\n *\n * @deprecated Use {@link BROWSER_WEB_VITAL_LCP_RENDER_TIME} (browser.web_vital.lcp.render_time) instead - The LCP render time is now recorded as a browser.web_vital.lcp.render_time attribute.\n * @example 1685\n */\nexport const LCP_RENDERTIME = 'lcp.renderTime';\n\n/**\n * Type for {@link LCP_RENDERTIME} lcp.renderTime\n */\nexport type LCP_RENDERTIME_TYPE = number;\n\n// Path: model/attributes/lcp/lcp__size.json\n\n/**\n * The size of the largest contentful paint element. `lcp.size`\n *\n * Attribute Value Type: `number` {@link LCP_SIZE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link BROWSER_WEB_VITAL_LCP_SIZE} `browser.web_vital.lcp.size`\n *\n * @deprecated Use {@link BROWSER_WEB_VITAL_LCP_SIZE} (browser.web_vital.lcp.size) instead - The LCP size is now recorded as a browser.web_vital.lcp.size attribute.\n * @example 1234\n */\nexport const LCP_SIZE = 'lcp.size';\n\n/**\n * Type for {@link LCP_SIZE} lcp.size\n */\nexport type LCP_SIZE_TYPE = number;\n\n// Path: model/attributes/lcp/lcp__url.json\n\n/**\n * The url of the dom element responsible for the largest contentful paint. `lcp.url`\n *\n * Attribute Value Type: `string` {@link LCP_URL_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link BROWSER_WEB_VITAL_LCP_URL} `browser.web_vital.lcp.url`\n *\n * @deprecated Use {@link BROWSER_WEB_VITAL_LCP_URL} (browser.web_vital.lcp.url) instead - The LCP url is now recorded as a browser.web_vital.lcp.url attribute.\n * @example \"https://example.com\"\n */\nexport const LCP_URL = 'lcp.url';\n\n/**\n * Type for {@link LCP_URL} lcp.url\n */\nexport type LCP_URL_TYPE = string;\n\n// Path: model/attributes/logger/logger__name.json\n\n/**\n * The name of the logger that generated this event. `logger.name`\n *\n * Attribute Value Type: `string` {@link LOGGER_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"myLogger\"\n */\nexport const LOGGER_NAME = 'logger.name';\n\n/**\n * Type for {@link LOGGER_NAME} logger.name\n */\nexport type LOGGER_NAME_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__cancelled__reason.json\n\n/**\n * Reason for the cancellation of an MCP operation. `mcp.cancelled.reason`\n *\n * Attribute Value Type: `string` {@link MCP_CANCELLED_REASON_TYPE}\n *\n * Apply Scrubbing: manual - Cancellation reasons may contain user-specific or sensitive information\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"User cancelled the request\"\n */\nexport const MCP_CANCELLED_REASON = 'mcp.cancelled.reason';\n\n/**\n * Type for {@link MCP_CANCELLED_REASON} mcp.cancelled.reason\n */\nexport type MCP_CANCELLED_REASON_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__cancelled__request_id.json\n\n/**\n * Request ID of the cancelled MCP operation. `mcp.cancelled.request_id`\n *\n * Attribute Value Type: `string` {@link MCP_CANCELLED_REQUEST_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"123\"\n */\nexport const MCP_CANCELLED_REQUEST_ID = 'mcp.cancelled.request_id';\n\n/**\n * Type for {@link MCP_CANCELLED_REQUEST_ID} mcp.cancelled.request_id\n */\nexport type MCP_CANCELLED_REQUEST_ID_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__client__name.json\n\n/**\n * Name of the MCP client application. `mcp.client.name`\n *\n * Attribute Value Type: `string` {@link MCP_CLIENT_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"claude-desktop\"\n */\nexport const MCP_CLIENT_NAME = 'mcp.client.name';\n\n/**\n * Type for {@link MCP_CLIENT_NAME} mcp.client.name\n */\nexport type MCP_CLIENT_NAME_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__client__title.json\n\n/**\n * Display title of the MCP client application. `mcp.client.title`\n *\n * Attribute Value Type: `string` {@link MCP_CLIENT_TITLE_TYPE}\n *\n * Apply Scrubbing: manual - Client titles may reveal user-specific application configurations or custom setups\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"Claude Desktop\"\n */\nexport const MCP_CLIENT_TITLE = 'mcp.client.title';\n\n/**\n * Type for {@link MCP_CLIENT_TITLE} mcp.client.title\n */\nexport type MCP_CLIENT_TITLE_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__client__version.json\n\n/**\n * Version of the MCP client application. `mcp.client.version`\n *\n * Attribute Value Type: `string` {@link MCP_CLIENT_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"1.0.0\"\n */\nexport const MCP_CLIENT_VERSION = 'mcp.client.version';\n\n/**\n * Type for {@link MCP_CLIENT_VERSION} mcp.client.version\n */\nexport type MCP_CLIENT_VERSION_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__lifecycle__phase.json\n\n/**\n * Lifecycle phase indicator for MCP operations. `mcp.lifecycle.phase`\n *\n * Attribute Value Type: `string` {@link MCP_LIFECYCLE_PHASE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"initialization_complete\"\n */\nexport const MCP_LIFECYCLE_PHASE = 'mcp.lifecycle.phase';\n\n/**\n * Type for {@link MCP_LIFECYCLE_PHASE} mcp.lifecycle.phase\n */\nexport type MCP_LIFECYCLE_PHASE_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__logging__data_type.json\n\n/**\n * Data type of the logged message content. `mcp.logging.data_type`\n *\n * Attribute Value Type: `string` {@link MCP_LOGGING_DATA_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"string\"\n */\nexport const MCP_LOGGING_DATA_TYPE = 'mcp.logging.data_type';\n\n/**\n * Type for {@link MCP_LOGGING_DATA_TYPE} mcp.logging.data_type\n */\nexport type MCP_LOGGING_DATA_TYPE_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__logging__level.json\n\n/**\n * Log level for MCP logging operations. `mcp.logging.level`\n *\n * Attribute Value Type: `string` {@link MCP_LOGGING_LEVEL_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"info\"\n */\nexport const MCP_LOGGING_LEVEL = 'mcp.logging.level';\n\n/**\n * Type for {@link MCP_LOGGING_LEVEL} mcp.logging.level\n */\nexport type MCP_LOGGING_LEVEL_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__logging__logger.json\n\n/**\n * Logger name for MCP logging operations. `mcp.logging.logger`\n *\n * Attribute Value Type: `string` {@link MCP_LOGGING_LOGGER_TYPE}\n *\n * Apply Scrubbing: manual - Logger names may be user-defined and could contain sensitive information\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"mcp_server\"\n */\nexport const MCP_LOGGING_LOGGER = 'mcp.logging.logger';\n\n/**\n * Type for {@link MCP_LOGGING_LOGGER} mcp.logging.logger\n */\nexport type MCP_LOGGING_LOGGER_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__logging__message.json\n\n/**\n * Log message content from MCP logging operations. `mcp.logging.message`\n *\n * Attribute Value Type: `string` {@link MCP_LOGGING_MESSAGE_TYPE}\n *\n * Apply Scrubbing: auto - Log messages can contain user data\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"Tool execution completed successfully\"\n */\nexport const MCP_LOGGING_MESSAGE = 'mcp.logging.message';\n\n/**\n * Type for {@link MCP_LOGGING_MESSAGE} mcp.logging.message\n */\nexport type MCP_LOGGING_MESSAGE_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__method__name.json\n\n/**\n * The name of the MCP request or notification method being called. `mcp.method.name`\n *\n * Attribute Value Type: `string` {@link MCP_METHOD_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"tools/call\"\n */\nexport const MCP_METHOD_NAME = 'mcp.method.name';\n\n/**\n * Type for {@link MCP_METHOD_NAME} mcp.method.name\n */\nexport type MCP_METHOD_NAME_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__progress__current.json\n\n/**\n * Current progress value of an MCP operation. `mcp.progress.current`\n *\n * Attribute Value Type: `number` {@link MCP_PROGRESS_CURRENT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 50\n */\nexport const MCP_PROGRESS_CURRENT = 'mcp.progress.current';\n\n/**\n * Type for {@link MCP_PROGRESS_CURRENT} mcp.progress.current\n */\nexport type MCP_PROGRESS_CURRENT_TYPE = number;\n\n// Path: model/attributes/mcp/mcp__progress__message.json\n\n/**\n * Progress message describing the current state of an MCP operation. `mcp.progress.message`\n *\n * Attribute Value Type: `string` {@link MCP_PROGRESS_MESSAGE_TYPE}\n *\n * Apply Scrubbing: manual - Progress messages may contain user-specific or sensitive information\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"Processing 50 of 100 items\"\n */\nexport const MCP_PROGRESS_MESSAGE = 'mcp.progress.message';\n\n/**\n * Type for {@link MCP_PROGRESS_MESSAGE} mcp.progress.message\n */\nexport type MCP_PROGRESS_MESSAGE_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__progress__percentage.json\n\n/**\n * Calculated progress percentage of an MCP operation. Computed from current/total * 100. `mcp.progress.percentage`\n *\n * Attribute Value Type: `number` {@link MCP_PROGRESS_PERCENTAGE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 50\n */\nexport const MCP_PROGRESS_PERCENTAGE = 'mcp.progress.percentage';\n\n/**\n * Type for {@link MCP_PROGRESS_PERCENTAGE} mcp.progress.percentage\n */\nexport type MCP_PROGRESS_PERCENTAGE_TYPE = number;\n\n// Path: model/attributes/mcp/mcp__progress__token.json\n\n/**\n * Token for tracking progress of an MCP operation. `mcp.progress.token`\n *\n * Attribute Value Type: `string` {@link MCP_PROGRESS_TOKEN_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"progress-token-123\"\n */\nexport const MCP_PROGRESS_TOKEN = 'mcp.progress.token';\n\n/**\n * Type for {@link MCP_PROGRESS_TOKEN} mcp.progress.token\n */\nexport type MCP_PROGRESS_TOKEN_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__progress__total.json\n\n/**\n * Total progress target value of an MCP operation. `mcp.progress.total`\n *\n * Attribute Value Type: `number` {@link MCP_PROGRESS_TOTAL_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 100\n */\nexport const MCP_PROGRESS_TOTAL = 'mcp.progress.total';\n\n/**\n * Type for {@link MCP_PROGRESS_TOTAL} mcp.progress.total\n */\nexport type MCP_PROGRESS_TOTAL_TYPE = number;\n\n// Path: model/attributes/mcp/mcp__prompt__name.json\n\n/**\n * Name of the MCP prompt template being used. `mcp.prompt.name`\n *\n * Attribute Value Type: `string` {@link MCP_PROMPT_NAME_TYPE}\n *\n * Apply Scrubbing: manual - Prompt names may reveal user behavior patterns or sensitive operations\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_PROMPT_NAME} `gen_ai.prompt.name`\n *\n * @deprecated Use {@link GEN_AI_PROMPT_NAME} (gen_ai.prompt.name) instead - OTel uses gen_ai.prompt.name for MCP prompt names\n * @example \"summarize\"\n */\nexport const MCP_PROMPT_NAME = 'mcp.prompt.name';\n\n/**\n * Type for {@link MCP_PROMPT_NAME} mcp.prompt.name\n */\nexport type MCP_PROMPT_NAME_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__prompt__result__description.json\n\n/**\n * Description of the prompt result. `mcp.prompt.result.description`\n *\n * Attribute Value Type: `string` {@link MCP_PROMPT_RESULT_DESCRIPTION_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"A summary of the requested information\"\n */\nexport const MCP_PROMPT_RESULT_DESCRIPTION = 'mcp.prompt.result.description';\n\n/**\n * Type for {@link MCP_PROMPT_RESULT_DESCRIPTION} mcp.prompt.result.description\n */\nexport type MCP_PROMPT_RESULT_DESCRIPTION_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__prompt__result__message_content.json\n\n/**\n * Content of the message in the prompt result. Used for single message results only. `mcp.prompt.result.message_content`\n *\n * Attribute Value Type: `string` {@link MCP_PROMPT_RESULT_MESSAGE_CONTENT_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"Please provide a summary of the document\"\n */\nexport const MCP_PROMPT_RESULT_MESSAGE_CONTENT = 'mcp.prompt.result.message_content';\n\n/**\n * Type for {@link MCP_PROMPT_RESULT_MESSAGE_CONTENT} mcp.prompt.result.message_content\n */\nexport type MCP_PROMPT_RESULT_MESSAGE_CONTENT_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__prompt__result__message_count.json\n\n/**\n * Number of messages in the prompt result. `mcp.prompt.result.message_count`\n *\n * Attribute Value Type: `number` {@link MCP_PROMPT_RESULT_MESSAGE_COUNT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 3\n */\nexport const MCP_PROMPT_RESULT_MESSAGE_COUNT = 'mcp.prompt.result.message_count';\n\n/**\n * Type for {@link MCP_PROMPT_RESULT_MESSAGE_COUNT} mcp.prompt.result.message_count\n */\nexport type MCP_PROMPT_RESULT_MESSAGE_COUNT_TYPE = number;\n\n// Path: model/attributes/mcp/mcp__prompt__result__message_role.json\n\n/**\n * Role of the message in the prompt result. Used for single message results only. `mcp.prompt.result.message_role`\n *\n * Attribute Value Type: `string` {@link MCP_PROMPT_RESULT_MESSAGE_ROLE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"user\"\n */\nexport const MCP_PROMPT_RESULT_MESSAGE_ROLE = 'mcp.prompt.result.message_role';\n\n/**\n * Type for {@link MCP_PROMPT_RESULT_MESSAGE_ROLE} mcp.prompt.result.message_role\n */\nexport type MCP_PROMPT_RESULT_MESSAGE_ROLE_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__protocol__ready.json\n\n/**\n * Protocol readiness indicator for MCP session. Non-zero value indicates the protocol is ready. `mcp.protocol.ready`\n *\n * Attribute Value Type: `number` {@link MCP_PROTOCOL_READY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1\n */\nexport const MCP_PROTOCOL_READY = 'mcp.protocol.ready';\n\n/**\n * Type for {@link MCP_PROTOCOL_READY} mcp.protocol.ready\n */\nexport type MCP_PROTOCOL_READY_TYPE = number;\n\n// Path: model/attributes/mcp/mcp__protocol__version.json\n\n/**\n * MCP protocol version used in the session. `mcp.protocol.version`\n *\n * Attribute Value Type: `string` {@link MCP_PROTOCOL_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"2024-11-05\"\n */\nexport const MCP_PROTOCOL_VERSION = 'mcp.protocol.version';\n\n/**\n * Type for {@link MCP_PROTOCOL_VERSION} mcp.protocol.version\n */\nexport type MCP_PROTOCOL_VERSION_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__request__argument__[key].json\n\n/**\n * 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. `mcp.request.argument.<key>`\n *\n * Attribute Value Type: `string` {@link MCP_REQUEST_ARGUMENT_KEY_TYPE}\n *\n * Apply Scrubbing: auto - Arguments contain user input\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Has Dynamic Suffix: true\n *\n * @example \"mcp.request.argument.query='weather in Paris'\"\n */\nexport const MCP_REQUEST_ARGUMENT_KEY = 'mcp.request.argument.<key>';\n\n/**\n * Base key for {@link MCP_REQUEST_ARGUMENT_KEY}. Use with a dynamic suffix, e.g. `${MCP_REQUEST_ARGUMENT_KEY_BASE}.${key}`.\n */\nexport const MCP_REQUEST_ARGUMENT_KEY_BASE = 'mcp.request.argument';\n\n/**\n * Type for {@link MCP_REQUEST_ARGUMENT_KEY} mcp.request.argument.<key>\n */\nexport type MCP_REQUEST_ARGUMENT_KEY_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__request__argument__name.json\n\n/**\n * Name argument from prompts/get MCP request. `mcp.request.argument.name`\n *\n * Attribute Value Type: `string` {@link MCP_REQUEST_ARGUMENT_NAME_TYPE}\n *\n * Apply Scrubbing: auto - Prompt names can contain user input\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"summarize\"\n */\nexport const MCP_REQUEST_ARGUMENT_NAME = 'mcp.request.argument.name';\n\n/**\n * Type for {@link MCP_REQUEST_ARGUMENT_NAME} mcp.request.argument.name\n */\nexport type MCP_REQUEST_ARGUMENT_NAME_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__request__argument__uri.json\n\n/**\n * URI argument from resources/read MCP request. `mcp.request.argument.uri`\n *\n * Attribute Value Type: `string` {@link MCP_REQUEST_ARGUMENT_URI_TYPE}\n *\n * Apply Scrubbing: auto - URIs can contain user file paths\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"file:///path/to/resource\"\n */\nexport const MCP_REQUEST_ARGUMENT_URI = 'mcp.request.argument.uri';\n\n/**\n * Type for {@link MCP_REQUEST_ARGUMENT_URI} mcp.request.argument.uri\n */\nexport type MCP_REQUEST_ARGUMENT_URI_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__request__id.json\n\n/**\n * JSON-RPC request identifier for the MCP request. Unique within the MCP session. `mcp.request.id`\n *\n * Attribute Value Type: `string` {@link MCP_REQUEST_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link JSONRPC_REQUEST_ID} `jsonrpc.request.id`\n *\n * @deprecated Use {@link JSONRPC_REQUEST_ID} (jsonrpc.request.id) instead - OTel models MCP as JSON-RPC, uses jsonrpc.request.id\n * @example \"1\"\n */\nexport const MCP_REQUEST_ID = 'mcp.request.id';\n\n/**\n * Type for {@link MCP_REQUEST_ID} mcp.request.id\n */\nexport type MCP_REQUEST_ID_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__resource__protocol.json\n\n/**\n * Protocol of the resource URI being accessed, extracted from the URI. `mcp.resource.protocol`\n *\n * Attribute Value Type: `string` {@link MCP_RESOURCE_PROTOCOL_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link NETWORK_PROTOCOL_NAME} `network.protocol.name`, {@link NET_PROTOCOL_NAME} `net.protocol.name`\n *\n * @deprecated Use {@link NETWORK_PROTOCOL_NAME} (network.protocol.name) instead - OTel uses the generic network.protocol.name attribute\n * @example \"file\"\n */\nexport const MCP_RESOURCE_PROTOCOL = 'mcp.resource.protocol';\n\n/**\n * Type for {@link MCP_RESOURCE_PROTOCOL} mcp.resource.protocol\n */\nexport type MCP_RESOURCE_PROTOCOL_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__resource__uri.json\n\n/**\n * The resource URI being accessed in an MCP operation. `mcp.resource.uri`\n *\n * Attribute Value Type: `string` {@link MCP_RESOURCE_URI_TYPE}\n *\n * Apply Scrubbing: auto - URIs can contain sensitive file paths\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"file:///path/to/file.txt\"\n */\nexport const MCP_RESOURCE_URI = 'mcp.resource.uri';\n\n/**\n * Type for {@link MCP_RESOURCE_URI} mcp.resource.uri\n */\nexport type MCP_RESOURCE_URI_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__server__name.json\n\n/**\n * Name of the MCP server application. `mcp.server.name`\n *\n * Attribute Value Type: `string` {@link MCP_SERVER_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"sentry-mcp-server\"\n */\nexport const MCP_SERVER_NAME = 'mcp.server.name';\n\n/**\n * Type for {@link MCP_SERVER_NAME} mcp.server.name\n */\nexport type MCP_SERVER_NAME_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__server__title.json\n\n/**\n * Display title of the MCP server application. `mcp.server.title`\n *\n * Attribute Value Type: `string` {@link MCP_SERVER_TITLE_TYPE}\n *\n * Apply Scrubbing: manual - Server titles may reveal user-specific application configurations or custom setups\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"Sentry MCP Server\"\n */\nexport const MCP_SERVER_TITLE = 'mcp.server.title';\n\n/**\n * Type for {@link MCP_SERVER_TITLE} mcp.server.title\n */\nexport type MCP_SERVER_TITLE_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__server__version.json\n\n/**\n * Version of the MCP server application. `mcp.server.version`\n *\n * Attribute Value Type: `string` {@link MCP_SERVER_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"0.1.0\"\n */\nexport const MCP_SERVER_VERSION = 'mcp.server.version';\n\n/**\n * Type for {@link MCP_SERVER_VERSION} mcp.server.version\n */\nexport type MCP_SERVER_VERSION_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__session__id.json\n\n/**\n * Identifier for the MCP session. `mcp.session.id`\n *\n * Attribute Value Type: `string` {@link MCP_SESSION_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"550e8400-e29b-41d4-a716-446655440000\"\n */\nexport const MCP_SESSION_ID = 'mcp.session.id';\n\n/**\n * Type for {@link MCP_SESSION_ID} mcp.session.id\n */\nexport type MCP_SESSION_ID_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__tool__name.json\n\n/**\n * Name of the MCP tool being called. `mcp.tool.name`\n *\n * Attribute Value Type: `string` {@link MCP_TOOL_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_TOOL_NAME} `gen_ai.tool.name`, {@link AI_FUNCTION_CALL} `ai.function_call`\n *\n * @deprecated Use {@link GEN_AI_TOOL_NAME} (gen_ai.tool.name) instead - OTel uses gen_ai.tool.name for MCP tool names\n * @example \"calculator\"\n */\nexport const MCP_TOOL_NAME = 'mcp.tool.name';\n\n/**\n * Type for {@link MCP_TOOL_NAME} mcp.tool.name\n */\nexport type MCP_TOOL_NAME_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__tool__result__content.json\n\n/**\n * The content of the tool result. `mcp.tool.result.content`\n *\n * Attribute Value Type: `string` {@link MCP_TOOL_RESULT_CONTENT_TYPE}\n *\n * Apply Scrubbing: auto - Tool results can contain user data\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link GEN_AI_TOOL_CALL_RESULT} `gen_ai.tool.call.result`, {@link GEN_AI_TOOL_MESSAGE} `gen_ai.tool.message`, {@link GEN_AI_TOOL_OUTPUT} `gen_ai.tool.output`\n *\n * @deprecated Use {@link GEN_AI_TOOL_CALL_RESULT} (gen_ai.tool.call.result) instead - OTel uses gen_ai.tool.call.result for MCP tool results\n * @example \"{\\\"output\\\": \\\"rainy\\\", \\\"toolCallId\\\": \\\"1\\\"}\"\n */\nexport const MCP_TOOL_RESULT_CONTENT = 'mcp.tool.result.content';\n\n/**\n * Type for {@link MCP_TOOL_RESULT_CONTENT} mcp.tool.result.content\n */\nexport type MCP_TOOL_RESULT_CONTENT_TYPE = string;\n\n// Path: model/attributes/mcp/mcp__tool__result__content_count.json\n\n/**\n * Number of content items in the tool result. `mcp.tool.result.content_count`\n *\n * Attribute Value Type: `number` {@link MCP_TOOL_RESULT_CONTENT_COUNT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1\n */\nexport const MCP_TOOL_RESULT_CONTENT_COUNT = 'mcp.tool.result.content_count';\n\n/**\n * Type for {@link MCP_TOOL_RESULT_CONTENT_COUNT} mcp.tool.result.content_count\n */\nexport type MCP_TOOL_RESULT_CONTENT_COUNT_TYPE = number;\n\n// Path: model/attributes/mcp/mcp__tool__result__is_error.json\n\n/**\n * Whether a tool execution resulted in an error. `mcp.tool.result.is_error`\n *\n * Attribute Value Type: `boolean` {@link MCP_TOOL_RESULT_IS_ERROR_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated Use {@link ERROR_TYPE} (error.type) instead - OTel uses error.type set to 'tool_error' when isError is true. Cannot be automatically backfilled due to type mismatch (boolean vs string).\n * @example false\n */\nexport const MCP_TOOL_RESULT_IS_ERROR = 'mcp.tool.result.is_error';\n\n/**\n * Type for {@link MCP_TOOL_RESULT_IS_ERROR} mcp.tool.result.is_error\n */\nexport type MCP_TOOL_RESULT_IS_ERROR_TYPE = boolean;\n\n// Path: model/attributes/mcp/mcp__transport.json\n\n/**\n * Transport method used for MCP communication. `mcp.transport`\n *\n * Attribute Value Type: `string` {@link MCP_TRANSPORT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link NETWORK_TRANSPORT} `network.transport`, {@link NET_TRANSPORT} `net.transport`\n *\n * @deprecated Use {@link NETWORK_TRANSPORT} (network.transport) instead - OTel uses the generic network.transport attribute\n * @example \"stdio\"\n */\nexport const MCP_TRANSPORT = 'mcp.transport';\n\n/**\n * Type for {@link MCP_TRANSPORT} mcp.transport\n */\nexport type MCP_TRANSPORT_TYPE = string;\n\n// Path: model/attributes/mdc/mdc__[key].json\n\n/**\n * 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. `mdc.<key>`\n *\n * Attribute Value Type: `string` {@link MDC_KEY_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Has Dynamic Suffix: true\n *\n * @example \"mdc.some_key='some_value'\"\n */\nexport const MDC_KEY = 'mdc.<key>';\n\n/**\n * Base key for {@link MDC_KEY}. Use with a dynamic suffix, e.g. `${MDC_KEY_BASE}.${key}`.\n */\nexport const MDC_KEY_BASE = 'mdc';\n\n/**\n * Type for {@link MDC_KEY} mdc.<key>\n */\nexport type MDC_KEY_TYPE = string;\n\n// Path: model/attributes/messaging/messaging__batch__message_count.json\n\n/**\n * The number of messages sent, received, or processed in the scope of the batching operation. `messaging.batch.message_count`\n *\n * Attribute Value Type: `number` {@link MESSAGING_BATCH_MESSAGE_COUNT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example 10\n */\nexport const MESSAGING_BATCH_MESSAGE_COUNT = 'messaging.batch.message_count';\n\n/**\n * Type for {@link MESSAGING_BATCH_MESSAGE_COUNT} messaging.batch.message_count\n */\nexport type MESSAGING_BATCH_MESSAGE_COUNT_TYPE = number;\n\n// Path: model/attributes/messaging/messaging__destination.json\n\n/**\n * The message destination name. `messaging.destination`\n *\n * Attribute Value Type: `string` {@link MESSAGING_DESTINATION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link MESSAGING_DESTINATION_NAME} `messaging.destination.name`\n *\n * @deprecated Use {@link MESSAGING_DESTINATION_NAME} (messaging.destination.name) instead - This attribute is being deprecated in favor of messaging.destination.name, which is the OTel-aligned replacement.\n * @example \"BestTopic\"\n */\nexport const MESSAGING_DESTINATION = 'messaging.destination';\n\n/**\n * Type for {@link MESSAGING_DESTINATION} messaging.destination\n */\nexport type MESSAGING_DESTINATION_TYPE = string;\n\n// Path: model/attributes/messaging/messaging__destination__connection.json\n\n/**\n * The message destination connection. `messaging.destination.connection`\n *\n * Attribute Value Type: `string` {@link MESSAGING_DESTINATION_CONNECTION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"BestTopic\"\n */\nexport const MESSAGING_DESTINATION_CONNECTION = 'messaging.destination.connection';\n\n/**\n * Type for {@link MESSAGING_DESTINATION_CONNECTION} messaging.destination.connection\n */\nexport type MESSAGING_DESTINATION_CONNECTION_TYPE = string;\n\n// Path: model/attributes/messaging/messaging__destination__name.json\n\n/**\n * The message destination name. `messaging.destination.name`\n *\n * Attribute Value Type: `string` {@link MESSAGING_DESTINATION_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link MESSAGING_DESTINATION} `messaging.destination`\n *\n * @example \"BestTopic\"\n */\nexport const MESSAGING_DESTINATION_NAME = 'messaging.destination.name';\n\n/**\n * Type for {@link MESSAGING_DESTINATION_NAME} messaging.destination.name\n */\nexport type MESSAGING_DESTINATION_NAME_TYPE = string;\n\n// Path: model/attributes/messaging/messaging__message__body__size.json\n\n/**\n * The size of the message body in bytes. `messaging.message.body.size`\n *\n * Attribute Value Type: `number` {@link MESSAGING_MESSAGE_BODY_SIZE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example 839\n */\nexport const MESSAGING_MESSAGE_BODY_SIZE = 'messaging.message.body.size';\n\n/**\n * Type for {@link MESSAGING_MESSAGE_BODY_SIZE} messaging.message.body.size\n */\nexport type MESSAGING_MESSAGE_BODY_SIZE_TYPE = number;\n\n// Path: model/attributes/messaging/messaging__message__conversation_id.json\n\n/**\n * The conversation ID identifying the conversation to which the message belongs, represented as a string. Sometimes called \"Correlation ID\". `messaging.message.conversation_id`\n *\n * Attribute Value Type: `string` {@link MESSAGING_MESSAGE_CONVERSATION_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"MyConversationId\"\n */\nexport const MESSAGING_MESSAGE_CONVERSATION_ID = 'messaging.message.conversation_id';\n\n/**\n * Type for {@link MESSAGING_MESSAGE_CONVERSATION_ID} messaging.message.conversation_id\n */\nexport type MESSAGING_MESSAGE_CONVERSATION_ID_TYPE = string;\n\n// Path: model/attributes/messaging/messaging__message__envelope__size.json\n\n/**\n * The size of the message body and metadata in bytes. `messaging.message.envelope.size`\n *\n * Attribute Value Type: `number` {@link MESSAGING_MESSAGE_ENVELOPE_SIZE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example 1045\n */\nexport const MESSAGING_MESSAGE_ENVELOPE_SIZE = 'messaging.message.envelope.size';\n\n/**\n * Type for {@link MESSAGING_MESSAGE_ENVELOPE_SIZE} messaging.message.envelope.size\n */\nexport type MESSAGING_MESSAGE_ENVELOPE_SIZE_TYPE = number;\n\n// Path: model/attributes/messaging/messaging__message__id.json\n\n/**\n * A value used by the messaging system as an identifier for the message, represented as a string. `messaging.message.id`\n *\n * Attribute Value Type: `string` {@link MESSAGING_MESSAGE_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"f47ac10b58cc4372a5670e02b2c3d479\"\n */\nexport const MESSAGING_MESSAGE_ID = 'messaging.message.id';\n\n/**\n * Type for {@link MESSAGING_MESSAGE_ID} messaging.message.id\n */\nexport type MESSAGING_MESSAGE_ID_TYPE = string;\n\n// Path: model/attributes/messaging/messaging__message__receive__latency.json\n\n/**\n * The latency between when the message was published and received. `messaging.message.receive.latency`\n *\n * Attribute Value Type: `number` {@link MESSAGING_MESSAGE_RECEIVE_LATENCY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1732847252\n */\nexport const MESSAGING_MESSAGE_RECEIVE_LATENCY = 'messaging.message.receive.latency';\n\n/**\n * Type for {@link MESSAGING_MESSAGE_RECEIVE_LATENCY} messaging.message.receive.latency\n */\nexport type MESSAGING_MESSAGE_RECEIVE_LATENCY_TYPE = number;\n\n// Path: model/attributes/messaging/messaging__message__retry__count.json\n\n/**\n * The amount of attempts to send the message. `messaging.message.retry.count`\n *\n * Attribute Value Type: `number` {@link MESSAGING_MESSAGE_RETRY_COUNT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 2\n */\nexport const MESSAGING_MESSAGE_RETRY_COUNT = 'messaging.message.retry.count';\n\n/**\n * Type for {@link MESSAGING_MESSAGE_RETRY_COUNT} messaging.message.retry.count\n */\nexport type MESSAGING_MESSAGE_RETRY_COUNT_TYPE = number;\n\n// Path: model/attributes/messaging/messaging__operation__name.json\n\n/**\n * The name of the messaging operation being performed `messaging.operation.name`\n *\n * Attribute Value Type: `string` {@link MESSAGING_OPERATION_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"send\"\n */\nexport const MESSAGING_OPERATION_NAME = 'messaging.operation.name';\n\n/**\n * Type for {@link MESSAGING_OPERATION_NAME} messaging.operation.name\n */\nexport type MESSAGING_OPERATION_NAME_TYPE = string;\n\n// Path: model/attributes/messaging/messaging__operation__type.json\n\n/**\n * A string identifying the type of the messaging operation `messaging.operation.type`\n *\n * Attribute Value Type: `string` {@link MESSAGING_OPERATION_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"create\"\n */\nexport const MESSAGING_OPERATION_TYPE = 'messaging.operation.type';\n\n/**\n * Type for {@link MESSAGING_OPERATION_TYPE} messaging.operation.type\n */\nexport type MESSAGING_OPERATION_TYPE_TYPE = string;\n\n// Path: model/attributes/messaging/messaging__rabbitmq__destination__routing_key.json\n\n/**\n * RabbitMQ message routing key. `messaging.rabbitmq.destination.routing_key`\n *\n * Attribute Value Type: `string` {@link MESSAGING_RABBITMQ_DESTINATION_ROUTING_KEY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"myKey\"\n */\nexport const MESSAGING_RABBITMQ_DESTINATION_ROUTING_KEY = 'messaging.rabbitmq.destination.routing_key';\n\n/**\n * Type for {@link MESSAGING_RABBITMQ_DESTINATION_ROUTING_KEY} messaging.rabbitmq.destination.routing_key\n */\nexport type MESSAGING_RABBITMQ_DESTINATION_ROUTING_KEY_TYPE = string;\n\n// Path: model/attributes/messaging/messaging__system.json\n\n/**\n * The messaging system as identified by the client instrumentation. `messaging.system`\n *\n * Attribute Value Type: `string` {@link MESSAGING_SYSTEM_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"activemq\"\n */\nexport const MESSAGING_SYSTEM = 'messaging.system';\n\n/**\n * Type for {@link MESSAGING_SYSTEM} messaging.system\n */\nexport type MESSAGING_SYSTEM_TYPE = string;\n\n// Path: model/attributes/method.json\n\n/**\n * The HTTP method used. `method`\n *\n * Attribute Value Type: `string` {@link METHOD_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link HTTP_REQUEST_METHOD} `http.request.method`, {@link _HTTP_REQUEST_METHOD} `http.request_method`, {@link HTTP_METHOD} `http.method`\n *\n * @deprecated Use {@link HTTP_REQUEST_METHOD} (http.request.method) instead\n * @example \"GET\"\n */\nexport const METHOD = 'method';\n\n/**\n * Type for {@link METHOD} method\n */\nexport type METHOD_TYPE = string;\n\n// Path: model/attributes/middleware/middleware__name.json\n\n/**\n * The name of the middleware. `middleware.name`\n *\n * Attribute Value Type: `string` {@link MIDDLEWARE_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"AuthenticationMiddleware\"\n */\nexport const MIDDLEWARE_NAME = 'middleware.name';\n\n/**\n * Type for {@link MIDDLEWARE_NAME} middleware.name\n */\nexport type MIDDLEWARE_NAME_TYPE = string;\n\n// Path: model/attributes/navigation/navigation__origin.json\n\n/**\n * The origin of the navigation (usually client side router navigations). Should preferrably parameterized template (like url.template) or a URL path otherwise. `navigation.origin`\n *\n * Attribute Value Type: `string` {@link NAVIGATION_ORIGIN_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SENTRY_SVELTEKIT_NAVIGATION_FROM} `sentry.sveltekit.navigation.from`\n *\n * @example \"/users/:id\"\n */\nexport const NAVIGATION_ORIGIN = 'navigation.origin';\n\n/**\n * Type for {@link NAVIGATION_ORIGIN} navigation.origin\n */\nexport type NAVIGATION_ORIGIN_TYPE = string;\n\n// Path: model/attributes/navigation/navigation__route__id.json\n\n/**\n * The identifier of the matched client-side route, as assigned by the routing framework (e.g., vue-router name, react-router id). `navigation.route.id`\n *\n * Attribute Value Type: `string` {@link NAVIGATION_ROUTE_ID_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"AboutView\"\n */\nexport const NAVIGATION_ROUTE_ID = 'navigation.route.id';\n\n/**\n * Type for {@link NAVIGATION_ROUTE_ID} navigation.route.id\n */\nexport type NAVIGATION_ROUTE_ID_TYPE = string;\n\n// Path: model/attributes/navigation/navigation__type.json\n\n/**\n * The type of navigation done by a client-side router. `navigation.type`\n *\n * Attribute Value Type: `string` {@link NAVIGATION_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SENTRY_SVELTEKIT_NAVIGATION_TYPE} `sentry.sveltekit.navigation.type`\n *\n * @example \"router.push\"\n */\nexport const NAVIGATION_TYPE = 'navigation.type';\n\n/**\n * Type for {@link NAVIGATION_TYPE} navigation.type\n */\nexport type NAVIGATION_TYPE_TYPE = string;\n\n// Path: model/attributes/nel/nel__elapsed_time.json\n\n/**\n * The elapsed number of milliseconds between the start of the resource fetch and when it was completed or aborted by the user agent. `nel.elapsed_time`\n *\n * Attribute Value Type: `number` {@link NEL_ELAPSED_TIME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 100\n */\nexport const NEL_ELAPSED_TIME = 'nel.elapsed_time';\n\n/**\n * Type for {@link NEL_ELAPSED_TIME} nel.elapsed_time\n */\nexport type NEL_ELAPSED_TIME_TYPE = number;\n\n// Path: model/attributes/nel/nel__phase.json\n\n/**\n * If request failed, the phase of its network error. If request succeeded, \"application\". `nel.phase`\n *\n * Attribute Value Type: `string` {@link NEL_PHASE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"application\"\n */\nexport const NEL_PHASE = 'nel.phase';\n\n/**\n * Type for {@link NEL_PHASE} nel.phase\n */\nexport type NEL_PHASE_TYPE = string;\n\n// Path: model/attributes/nel/nel__referrer.json\n\n/**\n * request's referrer, as determined by the referrer policy associated with its client. `nel.referrer`\n *\n * Attribute Value Type: `string` {@link NEL_REFERRER_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"https://example.com/foo?bar=baz\"\n */\nexport const NEL_REFERRER = 'nel.referrer';\n\n/**\n * Type for {@link NEL_REFERRER} nel.referrer\n */\nexport type NEL_REFERRER_TYPE = string;\n\n// Path: model/attributes/nel/nel__sampling_function.json\n\n/**\n * The sampling function used to determine if the request should be sampled. `nel.sampling_function`\n *\n * Attribute Value Type: `number` {@link NEL_SAMPLING_FUNCTION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 0.5\n */\nexport const NEL_SAMPLING_FUNCTION = 'nel.sampling_function';\n\n/**\n * Type for {@link NEL_SAMPLING_FUNCTION} nel.sampling_function\n */\nexport type NEL_SAMPLING_FUNCTION_TYPE = number;\n\n// Path: model/attributes/nel/nel__type.json\n\n/**\n * If request failed, the type of its network error. If request succeeded, \"ok\". `nel.type`\n *\n * Attribute Value Type: `string` {@link NEL_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"dns.unreachable\"\n */\nexport const NEL_TYPE = 'nel.type';\n\n/**\n * Type for {@link NEL_TYPE} nel.type\n */\nexport type NEL_TYPE_TYPE = string;\n\n// Path: model/attributes/network/network__connection__effective_type.json\n\n/**\n * Specifies the effective type of the current connection (e.g. slow-2g, 2g, 3g, 4g). `network.connection.effective_type`\n *\n * Attribute Value Type: `string` {@link NETWORK_CONNECTION_EFFECTIVE_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link EFFECTIVECONNECTIONTYPE} `effectiveConnectionType`\n *\n * @example \"4g\"\n */\nexport const NETWORK_CONNECTION_EFFECTIVE_TYPE = 'network.connection.effective_type';\n\n/**\n * Type for {@link NETWORK_CONNECTION_EFFECTIVE_TYPE} network.connection.effective_type\n */\nexport type NETWORK_CONNECTION_EFFECTIVE_TYPE_TYPE = string;\n\n// Path: model/attributes/network/network__connection__rtt.json\n\n/**\n * Specifies the estimated effective round-trip time of the current connection, in milliseconds. `network.connection.rtt`\n *\n * Attribute Value Type: `number` {@link NETWORK_CONNECTION_RTT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link CONNECTION_RTT} `connection.rtt`\n *\n * @example 100\n */\nexport const NETWORK_CONNECTION_RTT = 'network.connection.rtt';\n\n/**\n * Type for {@link NETWORK_CONNECTION_RTT} network.connection.rtt\n */\nexport type NETWORK_CONNECTION_RTT_TYPE = number;\n\n// Path: model/attributes/network/network__connection__type.json\n\n/**\n * Specifies the type of the current connection (e.g. wifi, ethernet, cellular , etc). `network.connection.type`\n *\n * Attribute Value Type: `string` {@link NETWORK_CONNECTION_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link DEVICE_CONNECTION_TYPE} `device.connection_type`, {@link CONNECTIONTYPE} `connectionType`\n *\n * @example \"wifi\"\n */\nexport const NETWORK_CONNECTION_TYPE = 'network.connection.type';\n\n/**\n * Type for {@link NETWORK_CONNECTION_TYPE} network.connection.type\n */\nexport type NETWORK_CONNECTION_TYPE_TYPE = string;\n\n// Path: model/attributes/network/network__local__address.json\n\n/**\n * Local address of the network connection - IP address or Unix domain socket name. `network.local.address`\n *\n * Attribute Value Type: `string` {@link NETWORK_LOCAL_ADDRESS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link NET_HOST_IP} `net.host.ip`, {@link NET_SOCK_HOST_ADDR} `net.sock.host.addr`\n *\n * @example \"10.1.2.80\"\n */\nexport const NETWORK_LOCAL_ADDRESS = 'network.local.address';\n\n/**\n * Type for {@link NETWORK_LOCAL_ADDRESS} network.local.address\n */\nexport type NETWORK_LOCAL_ADDRESS_TYPE = string;\n\n// Path: model/attributes/network/network__local__port.json\n\n/**\n * Local port number of the network connection. `network.local.port`\n *\n * Attribute Value Type: `number` {@link NETWORK_LOCAL_PORT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link NET_SOCK_HOST_PORT} `net.sock.host.port`\n *\n * @example 65400\n */\nexport const NETWORK_LOCAL_PORT = 'network.local.port';\n\n/**\n * Type for {@link NETWORK_LOCAL_PORT} network.local.port\n */\nexport type NETWORK_LOCAL_PORT_TYPE = number;\n\n// Path: model/attributes/network/network__peer__address.json\n\n/**\n * Peer address of the network connection - IP address or Unix domain socket name. `network.peer.address`\n *\n * Attribute Value Type: `string` {@link NETWORK_PEER_ADDRESS_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link NET_PEER_IP} `net.peer.ip`, {@link NET_SOCK_PEER_ADDR} `net.sock.peer.addr`\n *\n * @example \"10.1.2.80\"\n */\nexport const NETWORK_PEER_ADDRESS = 'network.peer.address';\n\n/**\n * Type for {@link NETWORK_PEER_ADDRESS} network.peer.address\n */\nexport type NETWORK_PEER_ADDRESS_TYPE = string;\n\n// Path: model/attributes/network/network__peer__port.json\n\n/**\n * Peer port number of the network connection. `network.peer.port`\n *\n * Attribute Value Type: `number` {@link NETWORK_PEER_PORT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example 65400\n */\nexport const NETWORK_PEER_PORT = 'network.peer.port';\n\n/**\n * Type for {@link NETWORK_PEER_PORT} network.peer.port\n */\nexport type NETWORK_PEER_PORT_TYPE = number;\n\n// Path: model/attributes/network/network__protocol__name.json\n\n/**\n * OSI application layer or non-OSI equivalent. `network.protocol.name`\n *\n * Attribute Value Type: `string` {@link NETWORK_PROTOCOL_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link NET_PROTOCOL_NAME} `net.protocol.name`, {@link MCP_RESOURCE_PROTOCOL} `mcp.resource.protocol`\n *\n * @example \"http\"\n */\nexport const NETWORK_PROTOCOL_NAME = 'network.protocol.name';\n\n/**\n * Type for {@link NETWORK_PROTOCOL_NAME} network.protocol.name\n */\nexport type NETWORK_PROTOCOL_NAME_TYPE = string;\n\n// Path: model/attributes/network/network__protocol__version.json\n\n/**\n * The actual version of the protocol used for network communication. `network.protocol.version`\n *\n * Attribute Value Type: `string` {@link NETWORK_PROTOCOL_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link HTTP_FLAVOR} `http.flavor`, {@link NET_PROTOCOL_VERSION} `net.protocol.version`\n *\n * @example \"1.1\"\n */\nexport const NETWORK_PROTOCOL_VERSION = 'network.protocol.version';\n\n/**\n * Type for {@link NETWORK_PROTOCOL_VERSION} network.protocol.version\n */\nexport type NETWORK_PROTOCOL_VERSION_TYPE = string;\n\n// Path: model/attributes/network/network__transport.json\n\n/**\n * OSI transport layer or inter-process communication method. `network.transport`\n *\n * Attribute Value Type: `string` {@link NETWORK_TRANSPORT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link NET_TRANSPORT} `net.transport`, {@link MCP_TRANSPORT} `mcp.transport`\n *\n * @example \"tcp\"\n */\nexport const NETWORK_TRANSPORT = 'network.transport';\n\n/**\n * Type for {@link NETWORK_TRANSPORT} network.transport\n */\nexport type NETWORK_TRANSPORT_TYPE = string;\n\n// Path: model/attributes/network/network__type.json\n\n/**\n * OSI network layer or non-OSI equivalent. `network.type`\n *\n * Attribute Value Type: `string` {@link NETWORK_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"ipv4\"\n */\nexport const NETWORK_TYPE = 'network.type';\n\n/**\n * Type for {@link NETWORK_TYPE} network.type\n */\nexport type NETWORK_TYPE_TYPE = string;\n\n// Path: model/attributes/net/net__host__ip.json\n\n/**\n * Local address of the network connection - IP address or Unix domain socket name. `net.host.ip`\n *\n * Attribute Value Type: `string` {@link NET_HOST_IP_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link NETWORK_LOCAL_ADDRESS} `network.local.address`, {@link NET_SOCK_HOST_ADDR} `net.sock.host.addr`\n *\n * @deprecated Use {@link NETWORK_LOCAL_ADDRESS} (network.local.address) instead\n * @example \"192.168.0.1\"\n */\nexport const NET_HOST_IP = 'net.host.ip';\n\n/**\n * Type for {@link NET_HOST_IP} net.host.ip\n */\nexport type NET_HOST_IP_TYPE = string;\n\n// Path: model/attributes/net/net__host__name.json\n\n/**\n * Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name. `net.host.name`\n *\n * Attribute Value Type: `string` {@link NET_HOST_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link SERVER_ADDRESS} `server.address`, {@link HTTP_SERVER_NAME} `http.server_name`, {@link HTTP_HOST} `http.host`, {@link SERVER_NAME} `server_name`\n *\n * @deprecated Use {@link SERVER_ADDRESS} (server.address) instead\n * @example \"example.com\"\n */\nexport const NET_HOST_NAME = 'net.host.name';\n\n/**\n * Type for {@link NET_HOST_NAME} net.host.name\n */\nexport type NET_HOST_NAME_TYPE = string;\n\n// Path: model/attributes/net/net__host__port.json\n\n/**\n * Server port number. `net.host.port`\n *\n * Attribute Value Type: `number` {@link NET_HOST_PORT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link SERVER_PORT} `server.port`\n *\n * @deprecated Use {@link SERVER_PORT} (server.port) instead\n * @example 1337\n */\nexport const NET_HOST_PORT = 'net.host.port';\n\n/**\n * Type for {@link NET_HOST_PORT} net.host.port\n */\nexport type NET_HOST_PORT_TYPE = number;\n\n// Path: model/attributes/net/net__peer__ip.json\n\n/**\n * Peer address of the network connection - IP address or Unix domain socket name. `net.peer.ip`\n *\n * Attribute Value Type: `string` {@link NET_PEER_IP_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link NETWORK_PEER_ADDRESS} `network.peer.address`, {@link NET_SOCK_PEER_ADDR} `net.sock.peer.addr`\n *\n * @deprecated Use {@link NETWORK_PEER_ADDRESS} (network.peer.address) instead\n * @example \"192.168.0.1\"\n */\nexport const NET_PEER_IP = 'net.peer.ip';\n\n/**\n * Type for {@link NET_PEER_IP} net.peer.ip\n */\nexport type NET_PEER_IP_TYPE = string;\n\n// Path: model/attributes/net/net__peer__name.json\n\n/**\n * Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name. `net.peer.name`\n *\n * Attribute Value Type: `string` {@link NET_PEER_NAME_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @deprecated Use {@link SERVER_ADDRESS} (server.address) instead - Deprecated, use server.address on client spans and client.address on server spans.\n * @example \"example.com\"\n */\nexport const NET_PEER_NAME = 'net.peer.name';\n\n/**\n * Type for {@link NET_PEER_NAME} net.peer.name\n */\nexport type NET_PEER_NAME_TYPE = string;\n\n// Path: model/attributes/net/net__peer__port.json\n\n/**\n * Peer port number. `net.peer.port`\n *\n * Attribute Value Type: `number` {@link NET_PEER_PORT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @deprecated Use {@link SERVER_PORT} (server.port) instead - Deprecated, use server.port on client spans and client.port on server spans.\n * @example 1337\n */\nexport const NET_PEER_PORT = 'net.peer.port';\n\n/**\n * Type for {@link NET_PEER_PORT} net.peer.port\n */\nexport type NET_PEER_PORT_TYPE = number;\n\n// Path: model/attributes/net/net__protocol__name.json\n\n/**\n * OSI application layer or non-OSI equivalent. `net.protocol.name`\n *\n * Attribute Value Type: `string` {@link NET_PROTOCOL_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link NETWORK_PROTOCOL_NAME} `network.protocol.name`, {@link MCP_RESOURCE_PROTOCOL} `mcp.resource.protocol`\n *\n * @deprecated Use {@link NETWORK_PROTOCOL_NAME} (network.protocol.name) instead\n * @example \"http\"\n */\nexport const NET_PROTOCOL_NAME = 'net.protocol.name';\n\n/**\n * Type for {@link NET_PROTOCOL_NAME} net.protocol.name\n */\nexport type NET_PROTOCOL_NAME_TYPE = string;\n\n// Path: model/attributes/net/net__protocol__version.json\n\n/**\n * The actual version of the protocol used for network communication. `net.protocol.version`\n *\n * Attribute Value Type: `string` {@link NET_PROTOCOL_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link NETWORK_PROTOCOL_VERSION} `network.protocol.version`, {@link HTTP_FLAVOR} `http.flavor`\n *\n * @deprecated Use {@link NETWORK_PROTOCOL_VERSION} (network.protocol.version) instead\n * @example \"1.1\"\n */\nexport const NET_PROTOCOL_VERSION = 'net.protocol.version';\n\n/**\n * Type for {@link NET_PROTOCOL_VERSION} net.protocol.version\n */\nexport type NET_PROTOCOL_VERSION_TYPE = string;\n\n// Path: model/attributes/net/net__sock__family.json\n\n/**\n * OSI transport and network layer `net.sock.family`\n *\n * Attribute Value Type: `string` {@link NET_SOCK_FAMILY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @deprecated Use {@link NETWORK_TRANSPORT} (network.transport) instead - Deprecated, use network.transport and network.type.\n * @example \"inet\"\n */\nexport const NET_SOCK_FAMILY = 'net.sock.family';\n\n/**\n * Type for {@link NET_SOCK_FAMILY} net.sock.family\n */\nexport type NET_SOCK_FAMILY_TYPE = string;\n\n// Path: model/attributes/net/net__sock__host__addr.json\n\n/**\n * Local address of the network connection mapping to Unix domain socket name. `net.sock.host.addr`\n *\n * Attribute Value Type: `string` {@link NET_SOCK_HOST_ADDR_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link NETWORK_LOCAL_ADDRESS} `network.local.address`, {@link NET_HOST_IP} `net.host.ip`\n *\n * @deprecated Use {@link NETWORK_LOCAL_ADDRESS} (network.local.address) instead\n * @example \"/var/my.sock\"\n */\nexport const NET_SOCK_HOST_ADDR = 'net.sock.host.addr';\n\n/**\n * Type for {@link NET_SOCK_HOST_ADDR} net.sock.host.addr\n */\nexport type NET_SOCK_HOST_ADDR_TYPE = string;\n\n// Path: model/attributes/net/net__sock__host__port.json\n\n/**\n * Local port number of the network connection. `net.sock.host.port`\n *\n * Attribute Value Type: `number` {@link NET_SOCK_HOST_PORT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link NETWORK_LOCAL_PORT} `network.local.port`\n *\n * @deprecated Use {@link NETWORK_LOCAL_PORT} (network.local.port) instead\n * @example 8080\n */\nexport const NET_SOCK_HOST_PORT = 'net.sock.host.port';\n\n/**\n * Type for {@link NET_SOCK_HOST_PORT} net.sock.host.port\n */\nexport type NET_SOCK_HOST_PORT_TYPE = number;\n\n// Path: model/attributes/net/net__sock__peer__addr.json\n\n/**\n * Peer address of the network connection - IP address `net.sock.peer.addr`\n *\n * Attribute Value Type: `string` {@link NET_SOCK_PEER_ADDR_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link NETWORK_PEER_ADDRESS} `network.peer.address`, {@link NET_PEER_IP} `net.peer.ip`\n *\n * @deprecated Use {@link NETWORK_PEER_ADDRESS} (network.peer.address) instead\n * @example \"192.168.0.1\"\n */\nexport const NET_SOCK_PEER_ADDR = 'net.sock.peer.addr';\n\n/**\n * Type for {@link NET_SOCK_PEER_ADDR} net.sock.peer.addr\n */\nexport type NET_SOCK_PEER_ADDR_TYPE = string;\n\n// Path: model/attributes/net/net__sock__peer__name.json\n\n/**\n * Peer address of the network connection - Unix domain socket name `net.sock.peer.name`\n *\n * Attribute Value Type: `string` {@link NET_SOCK_PEER_NAME_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @deprecated  - Deprecated from OTEL, no replacement at this time\n * @example \"/var/my.sock\"\n */\nexport const NET_SOCK_PEER_NAME = 'net.sock.peer.name';\n\n/**\n * Type for {@link NET_SOCK_PEER_NAME} net.sock.peer.name\n */\nexport type NET_SOCK_PEER_NAME_TYPE = string;\n\n// Path: model/attributes/net/net__sock__peer__port.json\n\n/**\n * Peer port number of the network connection. `net.sock.peer.port`\n *\n * Attribute Value Type: `number` {@link NET_SOCK_PEER_PORT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @deprecated Use {@link NETWORK_PEER_PORT} (network.peer.port) instead\n * @example 8080\n */\nexport const NET_SOCK_PEER_PORT = 'net.sock.peer.port';\n\n/**\n * Type for {@link NET_SOCK_PEER_PORT} net.sock.peer.port\n */\nexport type NET_SOCK_PEER_PORT_TYPE = number;\n\n// Path: model/attributes/net/net__transport.json\n\n/**\n * OSI transport layer or inter-process communication method. `net.transport`\n *\n * Attribute Value Type: `string` {@link NET_TRANSPORT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link NETWORK_TRANSPORT} `network.transport`, {@link MCP_TRANSPORT} `mcp.transport`\n *\n * @deprecated Use {@link NETWORK_TRANSPORT} (network.transport) instead\n * @example \"tcp\"\n */\nexport const NET_TRANSPORT = 'net.transport';\n\n/**\n * Type for {@link NET_TRANSPORT} net.transport\n */\nexport type NET_TRANSPORT_TYPE = string;\n\n// Path: model/attributes/os/os__build.json\n\n/**\n * The build ID of the operating system. `os.build`\n *\n * Attribute Value Type: `string` {@link OS_BUILD_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link OS_BUILD_ID} `os.build_id`\n *\n * @deprecated Use {@link OS_BUILD_ID} (os.build_id) instead\n * @example \"1234567890\"\n */\nexport const OS_BUILD = 'os.build';\n\n/**\n * Type for {@link OS_BUILD} os.build\n */\nexport type OS_BUILD_TYPE = string;\n\n// Path: model/attributes/os/os__build_id.json\n\n/**\n * The build ID of the operating system. `os.build_id`\n *\n * Attribute Value Type: `string` {@link OS_BUILD_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link OS_BUILD} `os.build`\n *\n * @example \"1234567890\"\n */\nexport const OS_BUILD_ID = 'os.build_id';\n\n/**\n * Type for {@link OS_BUILD_ID} os.build_id\n */\nexport type OS_BUILD_ID_TYPE = string;\n\n// Path: model/attributes/os/os__description.json\n\n/**\n * Human readable (not intended to be parsed) OS version information, like e.g. reported by ver or lsb_release -a commands. `os.description`\n *\n * Attribute Value Type: `string` {@link OS_DESCRIPTION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"Ubuntu 18.04.1 LTS\"\n */\nexport const OS_DESCRIPTION = 'os.description';\n\n/**\n * Type for {@link OS_DESCRIPTION} os.description\n */\nexport type OS_DESCRIPTION_TYPE = string;\n\n// Path: model/attributes/os/os__kernel_version.json\n\n/**\n * An independent kernel version string. Typically the entire output of the `uname` syscall. `os.kernel_version`\n *\n * Attribute Value Type: `string` {@link OS_KERNEL_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"20.2.0\"\n */\nexport const OS_KERNEL_VERSION = 'os.kernel_version';\n\n/**\n * Type for {@link OS_KERNEL_VERSION} os.kernel_version\n */\nexport type OS_KERNEL_VERSION_TYPE = string;\n\n// Path: model/attributes/os/os__name.json\n\n/**\n * Human readable operating system name. `os.name`\n *\n * Attribute Value Type: `string` {@link OS_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"Ubuntu\"\n */\nexport const OS_NAME = 'os.name';\n\n/**\n * Type for {@link OS_NAME} os.name\n */\nexport type OS_NAME_TYPE = string;\n\n// Path: model/attributes/os/os__raw_description.json\n\n/**\n * 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. `os.raw_description`\n *\n * Attribute Value Type: `string` {@link OS_RAW_DESCRIPTION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"Ubuntu 22.04.4 LTS (Jammy Jellyfish)\"\n */\nexport const OS_RAW_DESCRIPTION = 'os.raw_description';\n\n/**\n * Type for {@link OS_RAW_DESCRIPTION} os.raw_description\n */\nexport type OS_RAW_DESCRIPTION_TYPE = string;\n\n// Path: model/attributes/os/os__rooted.json\n\n/**\n * Whether the operating system has been jailbroken or rooted. `os.rooted`\n *\n * Attribute Value Type: `boolean` {@link OS_ROOTED_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example true\n */\nexport const OS_ROOTED = 'os.rooted';\n\n/**\n * Type for {@link OS_ROOTED} os.rooted\n */\nexport type OS_ROOTED_TYPE = boolean;\n\n// Path: model/attributes/os/os__theme.json\n\n/**\n * Whether the OS runs in dark mode or light mode. `os.theme`\n *\n * Attribute Value Type: `string` {@link OS_THEME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"dark\"\n */\nexport const OS_THEME = 'os.theme';\n\n/**\n * Type for {@link OS_THEME} os.theme\n */\nexport type OS_THEME_TYPE = string;\n\n// Path: model/attributes/os/os__type.json\n\n/**\n * The operating system type. `os.type`\n *\n * Attribute Value Type: `string` {@link OS_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"linux\"\n */\nexport const OS_TYPE = 'os.type';\n\n/**\n * Type for {@link OS_TYPE} os.type\n */\nexport type OS_TYPE_TYPE = string;\n\n// Path: model/attributes/os/os__version.json\n\n/**\n * The version of the operating system. `os.version`\n *\n * Attribute Value Type: `string` {@link OS_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"18.04.2\"\n */\nexport const OS_VERSION = 'os.version';\n\n/**\n * Type for {@link OS_VERSION} os.version\n */\nexport type OS_VERSION_TYPE = string;\n\n// Path: model/attributes/otel/otel__kind.json\n\n/**\n * The span kind (https://opentelemetry.io/docs/concepts/signals/traces/#span-kind). Deprecated, use `sentry.kind` instead. `otel.kind`\n *\n * Attribute Value Type: `string` {@link OTEL_KIND_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SENTRY_KIND} `sentry.kind`\n *\n * @deprecated Use {@link SENTRY_KIND} (sentry.kind) instead - Deprecated in favor of sentry.kind\n * @example \"SERVER\"\n */\nexport const OTEL_KIND = 'otel.kind';\n\n/**\n * Type for {@link OTEL_KIND} otel.kind\n */\nexport type OTEL_KIND_TYPE = string;\n\n// Path: model/attributes/otel/otel__scope__name.json\n\n/**\n * The name of the instrumentation scope - (InstrumentationScope.Name in OTLP). `otel.scope.name`\n *\n * Attribute Value Type: `string` {@link OTEL_SCOPE_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"io.opentelemetry.contrib.mongodb\"\n */\nexport const OTEL_SCOPE_NAME = 'otel.scope.name';\n\n/**\n * Type for {@link OTEL_SCOPE_NAME} otel.scope.name\n */\nexport type OTEL_SCOPE_NAME_TYPE = string;\n\n// Path: model/attributes/otel/otel__scope__version.json\n\n/**\n * The version of the instrumentation scope - (InstrumentationScope.Version in OTLP). `otel.scope.version`\n *\n * Attribute Value Type: `string` {@link OTEL_SCOPE_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"2.4.5\"\n */\nexport const OTEL_SCOPE_VERSION = 'otel.scope.version';\n\n/**\n * Type for {@link OTEL_SCOPE_VERSION} otel.scope.version\n */\nexport type OTEL_SCOPE_VERSION_TYPE = string;\n\n// Path: model/attributes/otel/otel__status_code.json\n\n/**\n * Name of the code, either “OK” or “ERROR”. MUST NOT be set if the status code is UNSET. `otel.status_code`\n *\n * Attribute Value Type: `string` {@link OTEL_STATUS_CODE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"OK\"\n */\nexport const OTEL_STATUS_CODE = 'otel.status_code';\n\n/**\n * Type for {@link OTEL_STATUS_CODE} otel.status_code\n */\nexport type OTEL_STATUS_CODE_TYPE = string;\n\n// Path: model/attributes/otel/otel__status_description.json\n\n/**\n * Description of the Status if it has a value, otherwise not set. `otel.status_description`\n *\n * Attribute Value Type: `string` {@link OTEL_STATUS_DESCRIPTION_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"resource not found\"\n */\nexport const OTEL_STATUS_DESCRIPTION = 'otel.status_description';\n\n/**\n * Type for {@link OTEL_STATUS_DESCRIPTION} otel.status_description\n */\nexport type OTEL_STATUS_DESCRIPTION_TYPE = string;\n\n// Path: model/attributes/params/params__[key].json\n\n/**\n * Decoded parameters extracted from a URL path. Usually added by client-side routing frameworks like vue-router. `params.<key>`\n *\n * Attribute Value Type: `string` {@link PARAMS_KEY_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Has Dynamic Suffix: true\n *\n * Aliases: {@link URL_PATH_PARAMETER_KEY} `url.path.parameter.<key>`\n *\n * @example \"params.id='123'\"\n */\nexport const PARAMS_KEY = 'params.<key>';\n\n/**\n * Base key for {@link PARAMS_KEY}. Use with a dynamic suffix, e.g. `${PARAMS_KEY_BASE}.${key}`.\n */\nexport const PARAMS_KEY_BASE = 'params';\n\n/**\n * Type for {@link PARAMS_KEY} params.<key>\n */\nexport type PARAMS_KEY_TYPE = string;\n\n// Path: model/attributes/performance/performance__activationStart.json\n\n/**\n * The time between initiating a navigation to a page and the browser activating the page `performance.activationStart`\n *\n * Attribute Value Type: `number` {@link PERFORMANCE_ACTIVATIONSTART_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link BROWSER_PERFORMANCE_NAVIGATION_ACTIVATION_START} `browser.performance.navigation.activation_start`\n *\n * @deprecated Use {@link BROWSER_PERFORMANCE_NAVIGATION_ACTIVATION_START} (browser.performance.navigation.activation_start) instead - The activationStart is now recorded as the browser.performance.navigation.activation_start attribute.\n * @example 1.983\n */\nexport const PERFORMANCE_ACTIVATIONSTART = 'performance.activationStart';\n\n/**\n * Type for {@link PERFORMANCE_ACTIVATIONSTART} performance.activationStart\n */\nexport type PERFORMANCE_ACTIVATIONSTART_TYPE = number;\n\n// Path: model/attributes/performance/performance__timeOrigin.json\n\n/**\n * The browser's performance.timeOrigin timestamp representing the time when the pageload was initiated `performance.timeOrigin`\n *\n * Attribute Value Type: `number` {@link PERFORMANCE_TIMEORIGIN_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link BROWSER_PERFORMANCE_TIME_ORIGIN} `browser.performance.time_origin`\n *\n * @deprecated Use {@link BROWSER_PERFORMANCE_TIME_ORIGIN} (browser.performance.time_origin) instead - The timeOrigin is now recorded as the browser.performance.time_origin attribute.\n * @example 1776185678.886\n */\nexport const PERFORMANCE_TIMEORIGIN = 'performance.timeOrigin';\n\n/**\n * Type for {@link PERFORMANCE_TIMEORIGIN} performance.timeOrigin\n */\nexport type PERFORMANCE_TIMEORIGIN_TYPE = number;\n\n// Path: model/attributes/previous_route.json\n\n/**\n * Also used by mobile SDKs to indicate the previous route in the application. `previous_route`\n *\n * Attribute Value Type: `string` {@link PREVIOUS_ROUTE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"HomeScreen\"\n */\nexport const PREVIOUS_ROUTE = 'previous_route';\n\n/**\n * Type for {@link PREVIOUS_ROUTE} previous_route\n */\nexport type PREVIOUS_ROUTE_TYPE = string;\n\n// Path: model/attributes/process/process__command_args.json\n\n/**\n * All the command arguments (including the command/executable itself) as received by the process. `process.command_args`\n *\n * Attribute Value Type: `Array<string>` {@link PROCESS_COMMAND_ARGS_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example [\"cmd/otecol\",\"--config=config.yaml\"]\n */\nexport const PROCESS_COMMAND_ARGS = 'process.command_args';\n\n/**\n * Type for {@link PROCESS_COMMAND_ARGS} process.command_args\n */\nexport type PROCESS_COMMAND_ARGS_TYPE = Array<string>;\n\n// Path: model/attributes/process/process__executable__name.json\n\n/**\n * The name of the executable that started the process. `process.executable.name`\n *\n * Attribute Value Type: `string` {@link PROCESS_EXECUTABLE_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"getsentry\"\n */\nexport const PROCESS_EXECUTABLE_NAME = 'process.executable.name';\n\n/**\n * Type for {@link PROCESS_EXECUTABLE_NAME} process.executable.name\n */\nexport type PROCESS_EXECUTABLE_NAME_TYPE = string;\n\n// Path: model/attributes/process/process__pid.json\n\n/**\n * The process ID of the running process. `process.pid`\n *\n * Attribute Value Type: `number` {@link PROCESS_PID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example 12345\n */\nexport const PROCESS_PID = 'process.pid';\n\n/**\n * Type for {@link PROCESS_PID} process.pid\n */\nexport type PROCESS_PID_TYPE = number;\n\n// Path: model/attributes/process/process__runtime__description.json\n\n/**\n * 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. `process.runtime.description`\n *\n * Attribute Value Type: `string` {@link PROCESS_RUNTIME_DESCRIPTION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link RUNTIME_RAW_DESCRIPTION} `runtime.raw_description`\n *\n * @example \"Eclipse OpenJ9 VM openj9-0.21.0\"\n */\nexport const PROCESS_RUNTIME_DESCRIPTION = 'process.runtime.description';\n\n/**\n * Type for {@link PROCESS_RUNTIME_DESCRIPTION} process.runtime.description\n */\nexport type PROCESS_RUNTIME_DESCRIPTION_TYPE = string;\n\n// Path: model/attributes/process/process__runtime__engine__name.json\n\n/**\n * The name of the runtime engine. `process.runtime.engine.name`\n *\n * Attribute Value Type: `string` {@link PROCESS_RUNTIME_ENGINE_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"v8\"\n */\nexport const PROCESS_RUNTIME_ENGINE_NAME = 'process.runtime.engine.name';\n\n/**\n * Type for {@link PROCESS_RUNTIME_ENGINE_NAME} process.runtime.engine.name\n */\nexport type PROCESS_RUNTIME_ENGINE_NAME_TYPE = string;\n\n// Path: model/attributes/process/process__runtime__engine__version.json\n\n/**\n * The version of the runtime engine. `process.runtime.engine.version`\n *\n * Attribute Value Type: `string` {@link PROCESS_RUNTIME_ENGINE_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"12.9.202.13-rusty\"\n */\nexport const PROCESS_RUNTIME_ENGINE_VERSION = 'process.runtime.engine.version';\n\n/**\n * Type for {@link PROCESS_RUNTIME_ENGINE_VERSION} process.runtime.engine.version\n */\nexport type PROCESS_RUNTIME_ENGINE_VERSION_TYPE = string;\n\n// Path: model/attributes/process/process__runtime__name.json\n\n/**\n * The name of the runtime. Equivalent to `name` in the Sentry runtime context. `process.runtime.name`\n *\n * Attribute Value Type: `string` {@link PROCESS_RUNTIME_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link RUNTIME_NAME} `runtime.name`\n *\n * @example \"node\"\n */\nexport const PROCESS_RUNTIME_NAME = 'process.runtime.name';\n\n/**\n * Type for {@link PROCESS_RUNTIME_NAME} process.runtime.name\n */\nexport type PROCESS_RUNTIME_NAME_TYPE = string;\n\n// Path: model/attributes/process/process__runtime__version.json\n\n/**\n * The version of the runtime of this process, as returned by the runtime without modification. Equivalent to `version` in the Sentry runtime context. `process.runtime.version`\n *\n * Attribute Value Type: `string` {@link PROCESS_RUNTIME_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link RUNTIME_VERSION} `runtime.version`\n *\n * @example \"18.04.2\"\n */\nexport const PROCESS_RUNTIME_VERSION = 'process.runtime.version';\n\n/**\n * Type for {@link PROCESS_RUNTIME_VERSION} process.runtime.version\n */\nexport type PROCESS_RUNTIME_VERSION_TYPE = string;\n\n// Path: model/attributes/query/query__[key].json\n\n/**\n * An item in a query string. Usually added by client-side routing frameworks like vue-router. `query.<key>`\n *\n * Attribute Value Type: `string` {@link QUERY_KEY_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Has Dynamic Suffix: true\n *\n * @deprecated Use {@link URL_QUERY} (url.query) instead - Instead of sending items individually in query.<key>, they should be sent all together with url.query.\n * @example \"query.id='123'\"\n */\nexport const QUERY_KEY = 'query.<key>';\n\n/**\n * Base key for {@link QUERY_KEY}. Use with a dynamic suffix, e.g. `${QUERY_KEY_BASE}.${key}`.\n *\n * @deprecated Use {@link URL_QUERY} (url.query) instead - Instead of sending items individually in query.<key>, they should be sent all together with url.query.\n */\nexport const QUERY_KEY_BASE = 'query';\n\n/**\n * Type for {@link QUERY_KEY} query.<key>\n */\nexport type QUERY_KEY_TYPE = string;\n\n// Path: model/attributes/react/react__version.json\n\n/**\n * The version of the React framework `react.version`\n *\n * Attribute Value Type: `string` {@link REACT_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"18.2.0\"\n */\nexport const REACT_VERSION = 'react.version';\n\n/**\n * Type for {@link REACT_VERSION} react.version\n */\nexport type REACT_VERSION_TYPE = string;\n\n// Path: model/attributes/release.json\n\n/**\n * The sentry release. `release`\n *\n * Attribute Value Type: `string` {@link RELEASE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SENTRY_RELEASE} `sentry.release`\n *\n * @deprecated Use {@link SENTRY_RELEASE} (sentry.release) instead\n * @example \"production\"\n */\nexport const RELEASE = 'release';\n\n/**\n * Type for {@link RELEASE} release\n */\nexport type RELEASE_TYPE = string;\n\n// Path: model/attributes/remix/remix__action_form_data__[key].json\n\n/**\n * Remix form data, <key> being the form data key, the value being the form data value. `remix.action_form_data.<key>`\n *\n * Attribute Value Type: `string` {@link REMIX_ACTION_FORM_DATA_KEY_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Has Dynamic Suffix: true\n *\n * @example \"http.response.header.text='test'\"\n */\nexport const REMIX_ACTION_FORM_DATA_KEY = 'remix.action_form_data.<key>';\n\n/**\n * Base key for {@link REMIX_ACTION_FORM_DATA_KEY}. Use with a dynamic suffix, e.g. `${REMIX_ACTION_FORM_DATA_KEY_BASE}.${key}`.\n */\nexport const REMIX_ACTION_FORM_DATA_KEY_BASE = 'remix.action_form_data';\n\n/**\n * Type for {@link REMIX_ACTION_FORM_DATA_KEY} remix.action_form_data.<key>\n */\nexport type REMIX_ACTION_FORM_DATA_KEY_TYPE = string;\n\n// Path: model/attributes/replay_id.json\n\n/**\n * The id of the sentry replay. `replay_id`\n *\n * Attribute Value Type: `string` {@link REPLAY_ID_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SENTRY_REPLAY_ID} `sentry.replay_id`\n *\n * @deprecated Use {@link SENTRY_REPLAY_ID} (sentry.replay_id) instead\n * @example \"123e4567e89b12d3a456426614174000\"\n */\nexport const REPLAY_ID = 'replay_id';\n\n/**\n * Type for {@link REPLAY_ID} replay_id\n */\nexport type REPLAY_ID_TYPE = string;\n\n// Path: model/attributes/resource/resource__deployment__environment.json\n\n/**\n * The software deployment environment name. `resource.deployment.environment`\n *\n * Attribute Value Type: `string` {@link RESOURCE_DEPLOYMENT_ENVIRONMENT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @deprecated Use {@link SENTRY_ENVIRONMENT} (sentry.environment) instead\n * @example \"production\"\n */\nexport const RESOURCE_DEPLOYMENT_ENVIRONMENT = 'resource.deployment.environment';\n\n/**\n * Type for {@link RESOURCE_DEPLOYMENT_ENVIRONMENT} resource.deployment.environment\n */\nexport type RESOURCE_DEPLOYMENT_ENVIRONMENT_TYPE = string;\n\n// Path: model/attributes/resource/resource__deployment__environment__name.json\n\n/**\n * The software deployment environment name. `resource.deployment.environment.name`\n *\n * Attribute Value Type: `string` {@link RESOURCE_DEPLOYMENT_ENVIRONMENT_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @deprecated Use {@link SENTRY_ENVIRONMENT} (sentry.environment) instead\n * @example \"production\"\n */\nexport const RESOURCE_DEPLOYMENT_ENVIRONMENT_NAME = 'resource.deployment.environment.name';\n\n/**\n * Type for {@link RESOURCE_DEPLOYMENT_ENVIRONMENT_NAME} resource.deployment.environment.name\n */\nexport type RESOURCE_DEPLOYMENT_ENVIRONMENT_NAME_TYPE = string;\n\n// Path: model/attributes/resource/resource__render_blocking_status.json\n\n/**\n * The render blocking status of the resource. `resource.render_blocking_status`\n *\n * Attribute Value Type: `string` {@link RESOURCE_RENDER_BLOCKING_STATUS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"non-blocking\"\n */\nexport const RESOURCE_RENDER_BLOCKING_STATUS = 'resource.render_blocking_status';\n\n/**\n * Type for {@link RESOURCE_RENDER_BLOCKING_STATUS} resource.render_blocking_status\n */\nexport type RESOURCE_RENDER_BLOCKING_STATUS_TYPE = string;\n\n// Path: model/attributes/route.json\n\n/**\n * 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. `route`\n *\n * Attribute Value Type: `string` {@link ROUTE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link HTTP_ROUTE} `http.route`\n *\n * @deprecated Use {@link HTTP_ROUTE} (http.route) instead\n * @example \"App\\\\Controller::indexAction\"\n */\nexport const ROUTE = 'route';\n\n/**\n * Type for {@link ROUTE} route\n */\nexport type ROUTE_TYPE = string;\n\n// Path: model/attributes/rpc/rpc__grpc__status_code.json\n\n/**\n * The numeric status code of the gRPC request. `rpc.grpc.status_code`\n *\n * Attribute Value Type: `number` {@link RPC_GRPC_STATUS_CODE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example 2\n */\nexport const RPC_GRPC_STATUS_CODE = 'rpc.grpc.status_code';\n\n/**\n * Type for {@link RPC_GRPC_STATUS_CODE} rpc.grpc.status_code\n */\nexport type RPC_GRPC_STATUS_CODE_TYPE = number;\n\n// Path: model/attributes/rpc/rpc__method.json\n\n/**\n * The fully-qualified logical name of the method from the RPC interface perspective. `rpc.method`\n *\n * Attribute Value Type: `string` {@link RPC_METHOD_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"com.example.ExampleService/exampleMethod\"\n */\nexport const RPC_METHOD = 'rpc.method';\n\n/**\n * Type for {@link RPC_METHOD} rpc.method\n */\nexport type RPC_METHOD_TYPE = string;\n\n// Path: model/attributes/rpc/rpc__response__status_code.json\n\n/**\n * Status code of the RPC returned by the RPC server or generated by the client. `rpc.response.status_code`\n *\n * Attribute Value Type: `string` {@link RPC_RESPONSE_STATUS_CODE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"DEADLINE_EXCEEDED\"\n */\nexport const RPC_RESPONSE_STATUS_CODE = 'rpc.response.status_code';\n\n/**\n * Type for {@link RPC_RESPONSE_STATUS_CODE} rpc.response.status_code\n */\nexport type RPC_RESPONSE_STATUS_CODE_TYPE = string;\n\n// Path: model/attributes/rpc/rpc__service.json\n\n/**\n * The full (logical) name of the service being called, including its package name, if applicable. `rpc.service`\n *\n * Attribute Value Type: `string` {@link RPC_SERVICE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"myService.BestService\"\n */\nexport const RPC_SERVICE = 'rpc.service';\n\n/**\n * Type for {@link RPC_SERVICE} rpc.service\n */\nexport type RPC_SERVICE_TYPE = string;\n\n// Path: model/attributes/rpc/rpc__system.json\n\n/**\n * A string identifying the remoting system. `rpc.system`\n *\n * Attribute Value Type: `string` {@link RPC_SYSTEM_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link RPC_SYSTEM_NAME} `rpc.system.name`\n *\n * @deprecated Use {@link RPC_SYSTEM_NAME} (rpc.system.name) instead - This attribute is being deprecated in favor of rpc.system.name, which is the OTel-aligned replacement.\n * @example \"aws-api\"\n */\nexport const RPC_SYSTEM = 'rpc.system';\n\n/**\n * Type for {@link RPC_SYSTEM} rpc.system\n */\nexport type RPC_SYSTEM_TYPE = string;\n\n// Path: model/attributes/rpc/rpc__system__name.json\n\n/**\n * A string identifying the remoting system. `rpc.system.name`\n *\n * Attribute Value Type: `string` {@link RPC_SYSTEM_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link RPC_SYSTEM} `rpc.system`\n *\n * @example \"aws-api\"\n */\nexport const RPC_SYSTEM_NAME = 'rpc.system.name';\n\n/**\n * Type for {@link RPC_SYSTEM_NAME} rpc.system.name\n */\nexport type RPC_SYSTEM_NAME_TYPE = string;\n\n// Path: model/attributes/runtime/runtime__build.json\n\n/**\n * The application build string, when it is separate from the version. `runtime.build`\n *\n * Attribute Value Type: `string` {@link RUNTIME_BUILD_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated  - The runtime.* namespace is deprecated in favor of process.runtime.*. No direct OTel equivalent exists for this attribute.\n * @example \"stable\"\n */\nexport const RUNTIME_BUILD = 'runtime.build';\n\n/**\n * Type for {@link RUNTIME_BUILD} runtime.build\n */\nexport type RUNTIME_BUILD_TYPE = string;\n\n// Path: model/attributes/runtime/runtime__name.json\n\n/**\n * The name of the runtime. For example node, CPython, or rustc. `runtime.name`\n *\n * Attribute Value Type: `string` {@link RUNTIME_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link PROCESS_RUNTIME_NAME} `process.runtime.name`\n *\n * @deprecated Use {@link PROCESS_RUNTIME_NAME} (process.runtime.name) instead - Prefer OTel-aligned process.runtime.name\n * @example \"node\"\n */\nexport const RUNTIME_NAME = 'runtime.name';\n\n/**\n * Type for {@link RUNTIME_NAME} runtime.name\n */\nexport type RUNTIME_NAME_TYPE = string;\n\n// Path: model/attributes/runtime/runtime__raw_description.json\n\n/**\n * Unprocessed description string as obtained from the runtime. Used to extract name and version for well-known runtimes. `runtime.raw_description`\n *\n * Attribute Value Type: `string` {@link RUNTIME_RAW_DESCRIPTION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link PROCESS_RUNTIME_DESCRIPTION} `process.runtime.description`\n *\n * @deprecated Use {@link PROCESS_RUNTIME_DESCRIPTION} (process.runtime.description) instead - Prefer OTel-aligned process.runtime.description\n * @example \"Eclipse OpenJ9 VM openj9-0.21.0\"\n */\nexport const RUNTIME_RAW_DESCRIPTION = 'runtime.raw_description';\n\n/**\n * Type for {@link RUNTIME_RAW_DESCRIPTION} runtime.raw_description\n */\nexport type RUNTIME_RAW_DESCRIPTION_TYPE = string;\n\n// Path: model/attributes/runtime/runtime__version.json\n\n/**\n * The version of the runtime. `runtime.version`\n *\n * Attribute Value Type: `string` {@link RUNTIME_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link PROCESS_RUNTIME_VERSION} `process.runtime.version`\n *\n * @deprecated Use {@link PROCESS_RUNTIME_VERSION} (process.runtime.version) instead - Prefer OTel-aligned process.runtime.version\n * @example \"18.04.2\"\n */\nexport const RUNTIME_VERSION = 'runtime.version';\n\n/**\n * Type for {@link RUNTIME_VERSION} runtime.version\n */\nexport type RUNTIME_VERSION_TYPE = string;\n\n// Path: model/attributes/score/score__[key].json\n\n/**\n * The weighted performance score for a web vital. This is defined as `score.weight.<key>` * `score.ratio.<key>`. `score.<key>`\n *\n * Attribute Value Type: `number` {@link SCORE_KEY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Has Dynamic Suffix: true\n *\n * @example \"score.cls=0.1723\"\n */\nexport const SCORE_KEY = 'score.<key>';\n\n/**\n * Base key for {@link SCORE_KEY}. Use with a dynamic suffix, e.g. `${SCORE_KEY_BASE}.${key}`.\n */\nexport const SCORE_KEY_BASE = 'score';\n\n/**\n * Type for {@link SCORE_KEY} score.<key>\n */\nexport type SCORE_KEY_TYPE = number;\n\n// Path: model/attributes/score/score__ratio__[key].json\n\n/**\n * The score for a web vital, normalized to a number between 0 and 1. `score.ratio.<key>`\n *\n * Attribute Value Type: `number` {@link SCORE_RATIO_KEY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Has Dynamic Suffix: true\n *\n * @example \"score.ratio.inp=0.7748\"\n */\nexport const SCORE_RATIO_KEY = 'score.ratio.<key>';\n\n/**\n * Base key for {@link SCORE_RATIO_KEY}. Use with a dynamic suffix, e.g. `${SCORE_RATIO_KEY_BASE}.${key}`.\n */\nexport const SCORE_RATIO_KEY_BASE = 'score.ratio';\n\n/**\n * Type for {@link SCORE_RATIO_KEY} score.ratio.<key>\n */\nexport type SCORE_RATIO_KEY_TYPE = number;\n\n// Path: model/attributes/score/score__total.json\n\n/**\n * The total performance score of a span. This is the sum of individual weighted web vital scores (see `score.<key>`). `score.total`\n *\n * Attribute Value Type: `number` {@link SCORE_TOTAL_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n */\nexport const SCORE_TOTAL = 'score.total';\n\n/**\n * Type for {@link SCORE_TOTAL} score.total\n */\nexport type SCORE_TOTAL_TYPE = number;\n\n// Path: model/attributes/score/score__weight__[key].json\n\n/**\n * The relative weight of a web vital in a span's performance score. `score.weight.<key>`\n *\n * Attribute Value Type: `number` {@link SCORE_WEIGHT_KEY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Has Dynamic Suffix: true\n *\n * @example \"score.weight.fcp=0.25\"\n */\nexport const SCORE_WEIGHT_KEY = 'score.weight.<key>';\n\n/**\n * Base key for {@link SCORE_WEIGHT_KEY}. Use with a dynamic suffix, e.g. `${SCORE_WEIGHT_KEY_BASE}.${key}`.\n */\nexport const SCORE_WEIGHT_KEY_BASE = 'score.weight';\n\n/**\n * Type for {@link SCORE_WEIGHT_KEY} score.weight.<key>\n */\nexport type SCORE_WEIGHT_KEY_TYPE = number;\n\n// Path: model/attributes/sentry/sentry__action.json\n\n/**\n * 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. `sentry.action`\n *\n * Attribute Value Type: `string` {@link SENTRY_ACTION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"SELECT\"\n */\nexport const SENTRY_ACTION = 'sentry.action';\n\n/**\n * Type for {@link SENTRY_ACTION} sentry.action\n */\nexport type SENTRY_ACTION_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__browser__name.json\n\n/**\n * The name of the browser. `sentry.browser.name`\n *\n * Attribute Value Type: `string` {@link SENTRY_BROWSER_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link BROWSER_NAME} `browser.name`\n *\n * @deprecated Use {@link BROWSER_NAME} (browser.name) instead\n * @example \"Chrome\"\n */\nexport const SENTRY_BROWSER_NAME = 'sentry.browser.name';\n\n/**\n * Type for {@link SENTRY_BROWSER_NAME} sentry.browser.name\n */\nexport type SENTRY_BROWSER_NAME_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__browser__version.json\n\n/**\n * The version of the browser. `sentry.browser.version`\n *\n * Attribute Value Type: `string` {@link SENTRY_BROWSER_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link BROWSER_VERSION} `browser.version`\n *\n * @deprecated Use {@link BROWSER_VERSION} (browser.version) instead\n * @example \"120.0.6099.130\"\n */\nexport const SENTRY_BROWSER_VERSION = 'sentry.browser.version';\n\n/**\n * Type for {@link SENTRY_BROWSER_VERSION} sentry.browser.version\n */\nexport type SENTRY_BROWSER_VERSION_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__cancellation_reason.json\n\n/**\n * The reason why a span ended early. `sentry.cancellation_reason`\n *\n * Attribute Value Type: `string` {@link SENTRY_CANCELLATION_REASON_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"document.hidden\"\n */\nexport const SENTRY_CANCELLATION_REASON = 'sentry.cancellation_reason';\n\n/**\n * Type for {@link SENTRY_CANCELLATION_REASON} sentry.cancellation_reason\n */\nexport type SENTRY_CANCELLATION_REASON_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__category.json\n\n/**\n * The high-level category of a span, derived from the span operation or span attributes. This categorizes spans by their general purpose (e.g., database, HTTP, UI). Known values include: 'ai', 'ai.pipeline', 'app', 'browser', 'cache', 'console', 'db', 'event', 'file', 'function.aws', 'function.azure', 'function.gcp', 'function.nextjs', 'function.remix', 'graphql', 'grpc', 'http', 'measure', 'middleware', 'navigation', 'pageload', 'queue', 'resource', 'rpc', 'serialize', 'subprocess', 'template', 'topic', 'ui', 'ui.angular', 'ui.ember', 'ui.react', 'ui.svelte', 'ui.vue', 'view', 'websocket'. `sentry.category`\n *\n * Attribute Value Type: `string` {@link SENTRY_CATEGORY_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"db\"\n */\nexport const SENTRY_CATEGORY = 'sentry.category';\n\n/**\n * Type for {@link SENTRY_CATEGORY} sentry.category\n */\nexport type SENTRY_CATEGORY_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__client_sample_rate.json\n\n/**\n * Rate at which a span was sampled in the SDK. `sentry.client_sample_rate`\n *\n * Attribute Value Type: `number` {@link SENTRY_CLIENT_SAMPLE_RATE_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 0.5\n */\nexport const SENTRY_CLIENT_SAMPLE_RATE = 'sentry.client_sample_rate';\n\n/**\n * Type for {@link SENTRY_CLIENT_SAMPLE_RATE} sentry.client_sample_rate\n */\nexport type SENTRY_CLIENT_SAMPLE_RATE_TYPE = number;\n\n// Path: model/attributes/sentry/sentry__description.json\n\n/**\n * The human-readable description of a span. `sentry.description`\n *\n * Attribute Value Type: `string` {@link SENTRY_DESCRIPTION_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"index view query\"\n */\nexport const SENTRY_DESCRIPTION = 'sentry.description';\n\n/**\n * Type for {@link SENTRY_DESCRIPTION} sentry.description\n */\nexport type SENTRY_DESCRIPTION_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__dist.json\n\n/**\n * The sentry dist. `sentry.dist`\n *\n * Attribute Value Type: `string` {@link SENTRY_DIST_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link DIST} `dist`\n *\n * @example \"1.0\"\n */\nexport const SENTRY_DIST = 'sentry.dist';\n\n/**\n * Type for {@link SENTRY_DIST} sentry.dist\n */\nexport type SENTRY_DIST_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__domain.json\n\n/**\n * 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. `sentry.domain`\n *\n * Attribute Value Type: `string` {@link SENTRY_DOMAIN_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"example.com\"\n */\nexport const SENTRY_DOMAIN = 'sentry.domain';\n\n/**\n * Type for {@link SENTRY_DOMAIN} sentry.domain\n */\nexport type SENTRY_DOMAIN_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__dsc__environment.json\n\n/**\n * The environment from the dynamic sampling context. `sentry.dsc.environment`\n *\n * Attribute Value Type: `string` {@link SENTRY_DSC_ENVIRONMENT_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: internal\n *\n * @example \"prod\"\n */\nexport const SENTRY_DSC_ENVIRONMENT = 'sentry.dsc.environment';\n\n/**\n * Type for {@link SENTRY_DSC_ENVIRONMENT} sentry.dsc.environment\n */\nexport type SENTRY_DSC_ENVIRONMENT_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__dsc__project_id.json\n\n/**\n * 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. `sentry.dsc.project_id`\n *\n * Attribute Value Type: `string` {@link SENTRY_DSC_PROJECT_ID_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: internal\n *\n * @example \"12345\"\n */\nexport const SENTRY_DSC_PROJECT_ID = 'sentry.dsc.project_id';\n\n/**\n * Type for {@link SENTRY_DSC_PROJECT_ID} sentry.dsc.project_id\n */\nexport type SENTRY_DSC_PROJECT_ID_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__dsc__public_key.json\n\n/**\n * The public key from the dynamic sampling context. `sentry.dsc.public_key`\n *\n * Attribute Value Type: `string` {@link SENTRY_DSC_PUBLIC_KEY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: internal\n *\n * @example \"c51734c603c4430eb57cb0a5728a479d\"\n */\nexport const SENTRY_DSC_PUBLIC_KEY = 'sentry.dsc.public_key';\n\n/**\n * Type for {@link SENTRY_DSC_PUBLIC_KEY} sentry.dsc.public_key\n */\nexport type SENTRY_DSC_PUBLIC_KEY_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__dsc__release.json\n\n/**\n * The release identifier from the dynamic sampling context. `sentry.dsc.release`\n *\n * Attribute Value Type: `string` {@link SENTRY_DSC_RELEASE_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: internal\n *\n * @example \"frontend@e8211be71b214afab5b85de4b4c54be3714952bb\"\n */\nexport const SENTRY_DSC_RELEASE = 'sentry.dsc.release';\n\n/**\n * Type for {@link SENTRY_DSC_RELEASE} sentry.dsc.release\n */\nexport type SENTRY_DSC_RELEASE_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__dsc__sampled.json\n\n/**\n * Whether the event was sampled according to the dynamic sampling context. `sentry.dsc.sampled`\n *\n * Attribute Value Type: `boolean` {@link SENTRY_DSC_SAMPLED_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: internal\n *\n * @example true\n */\nexport const SENTRY_DSC_SAMPLED = 'sentry.dsc.sampled';\n\n/**\n * Type for {@link SENTRY_DSC_SAMPLED} sentry.dsc.sampled\n */\nexport type SENTRY_DSC_SAMPLED_TYPE = boolean;\n\n// Path: model/attributes/sentry/sentry__dsc__sample_rate.json\n\n/**\n * The sample rate from the dynamic sampling context. `sentry.dsc.sample_rate`\n *\n * Attribute Value Type: `string` {@link SENTRY_DSC_SAMPLE_RATE_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: internal\n *\n * @example \"1.0\"\n */\nexport const SENTRY_DSC_SAMPLE_RATE = 'sentry.dsc.sample_rate';\n\n/**\n * Type for {@link SENTRY_DSC_SAMPLE_RATE} sentry.dsc.sample_rate\n */\nexport type SENTRY_DSC_SAMPLE_RATE_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__dsc__trace_id.json\n\n/**\n * The trace ID from the dynamic sampling context. `sentry.dsc.trace_id`\n *\n * Attribute Value Type: `string` {@link SENTRY_DSC_TRACE_ID_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: internal\n *\n * @example \"047372980460430cbc78d9779df33a46\"\n */\nexport const SENTRY_DSC_TRACE_ID = 'sentry.dsc.trace_id';\n\n/**\n * Type for {@link SENTRY_DSC_TRACE_ID} sentry.dsc.trace_id\n */\nexport type SENTRY_DSC_TRACE_ID_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__dsc__transaction.json\n\n/**\n * The transaction name from the dynamic sampling context. `sentry.dsc.transaction`\n *\n * Attribute Value Type: `string` {@link SENTRY_DSC_TRANSACTION_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: internal\n *\n * @example \"/issues/errors-outages/\"\n */\nexport const SENTRY_DSC_TRANSACTION = 'sentry.dsc.transaction';\n\n/**\n * Type for {@link SENTRY_DSC_TRANSACTION} sentry.dsc.transaction\n */\nexport type SENTRY_DSC_TRANSACTION_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__environment.json\n\n/**\n * The sentry environment. `sentry.environment`\n *\n * Attribute Value Type: `string` {@link SENTRY_ENVIRONMENT_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link ENVIRONMENT} `environment`\n *\n * @example \"production\"\n */\nexport const SENTRY_ENVIRONMENT = 'sentry.environment';\n\n/**\n * Type for {@link SENTRY_ENVIRONMENT} sentry.environment\n */\nexport type SENTRY_ENVIRONMENT_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__exclusive_time.json\n\n/**\n * The exclusive time duration of the span in milliseconds. `sentry.exclusive_time`\n *\n * Attribute Value Type: `number` {@link SENTRY_EXCLUSIVE_TIME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1234\n */\nexport const SENTRY_EXCLUSIVE_TIME = 'sentry.exclusive_time';\n\n/**\n * Type for {@link SENTRY_EXCLUSIVE_TIME} sentry.exclusive_time\n */\nexport type SENTRY_EXCLUSIVE_TIME_TYPE = number;\n\n// Path: model/attributes/sentry/sentry__graphql__operation.json\n\n/**\n * Indicates the type of graphql operation, emitted by the Javascript SDK. `sentry.graphql.operation`\n *\n * Attribute Value Type: `string` {@link SENTRY_GRAPHQL_OPERATION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"getUserById\"\n */\nexport const SENTRY_GRAPHQL_OPERATION = 'sentry.graphql.operation';\n\n/**\n * Type for {@link SENTRY_GRAPHQL_OPERATION} sentry.graphql.operation\n */\nexport type SENTRY_GRAPHQL_OPERATION_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__group.json\n\n/**\n * Stores the hash of `sentry.normalized_description`. This is primarily used for grouping spans in the product end. `sentry.group`\n *\n * Attribute Value Type: `string` {@link SENTRY_GROUP_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n */\nexport const SENTRY_GROUP = 'sentry.group';\n\n/**\n * Type for {@link SENTRY_GROUP} sentry.group\n */\nexport type SENTRY_GROUP_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__http__prefetch.json\n\n/**\n * If an http request was a prefetch request. `sentry.http.prefetch`\n *\n * Attribute Value Type: `boolean` {@link SENTRY_HTTP_PREFETCH_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example true\n */\nexport const SENTRY_HTTP_PREFETCH = 'sentry.http.prefetch';\n\n/**\n * Type for {@link SENTRY_HTTP_PREFETCH} sentry.http.prefetch\n */\nexport type SENTRY_HTTP_PREFETCH_TYPE = boolean;\n\n// Path: model/attributes/sentry/sentry__idle_span_finish_reason.json\n\n/**\n * The reason why an idle span ended early. `sentry.idle_span_finish_reason`\n *\n * Attribute Value Type: `string` {@link SENTRY_IDLE_SPAN_FINISH_REASON_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"idleTimeout\"\n */\nexport const SENTRY_IDLE_SPAN_FINISH_REASON = 'sentry.idle_span_finish_reason';\n\n/**\n * Type for {@link SENTRY_IDLE_SPAN_FINISH_REASON} sentry.idle_span_finish_reason\n */\nexport type SENTRY_IDLE_SPAN_FINISH_REASON_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__is_remote.json\n\n/**\n * Indicates whether a span's parent is remote. `sentry.is_remote`\n *\n * Attribute Value Type: `boolean` {@link SENTRY_IS_REMOTE_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example true\n */\nexport const SENTRY_IS_REMOTE = 'sentry.is_remote';\n\n/**\n * Type for {@link SENTRY_IS_REMOTE} sentry.is_remote\n */\nexport type SENTRY_IS_REMOTE_TYPE = boolean;\n\n// Path: model/attributes/sentry/sentry__kind.json\n\n/**\n * 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. `sentry.kind`\n *\n * Attribute Value Type: `string` {@link SENTRY_KIND_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link OTEL_KIND} `otel.kind`\n *\n * @example \"server\"\n */\nexport const SENTRY_KIND = 'sentry.kind';\n\n/**\n * Type for {@link SENTRY_KIND} sentry.kind\n */\nexport type SENTRY_KIND_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__main_thread.json\n\n/**\n * Whether the span or event occurred on the main thread. Computed by Relay and should not be set by SDKs. `sentry.main_thread`\n *\n * Attribute Value Type: `boolean` {@link SENTRY_MAIN_THREAD_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example true\n */\nexport const SENTRY_MAIN_THREAD = 'sentry.main_thread';\n\n/**\n * Type for {@link SENTRY_MAIN_THREAD} sentry.main_thread\n */\nexport type SENTRY_MAIN_THREAD_TYPE = boolean;\n\n// Path: model/attributes/sentry/sentry__message__parameter__[key].json\n\n/**\n * 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) `sentry.message.parameter.<key>`\n *\n * Attribute Value Type: `string` {@link SENTRY_MESSAGE_PARAMETER_KEY_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"sentry.message.parameter.0='123'\"\n */\nexport const SENTRY_MESSAGE_PARAMETER_KEY = 'sentry.message.parameter.<key>';\n\n/**\n * Type for {@link SENTRY_MESSAGE_PARAMETER_KEY} sentry.message.parameter.<key>\n */\nexport type SENTRY_MESSAGE_PARAMETER_KEY_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__message__template.json\n\n/**\n * The parameterized template string. `sentry.message.template`\n *\n * Attribute Value Type: `string` {@link SENTRY_MESSAGE_TEMPLATE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"Hello, {name}!\"\n */\nexport const SENTRY_MESSAGE_TEMPLATE = 'sentry.message.template';\n\n/**\n * Type for {@link SENTRY_MESSAGE_TEMPLATE} sentry.message.template\n */\nexport type SENTRY_MESSAGE_TEMPLATE_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__metric__source.json\n\n/**\n * The provenance of a metric.  For example, this can be set to indicate if a metric was generated by Relay from a span. `sentry.metric.source`\n *\n * Attribute Value Type: `string` {@link SENTRY_METRIC_SOURCE_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"span\"\n */\nexport const SENTRY_METRIC_SOURCE = 'sentry.metric.source';\n\n/**\n * Type for {@link SENTRY_METRIC_SOURCE} sentry.metric.source\n */\nexport type SENTRY_METRIC_SOURCE_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__mobile.json\n\n/**\n * Whether the application is using a mobile SDK. Computed by Relay and should not be set by SDKs. `sentry.mobile`\n *\n * Attribute Value Type: `boolean` {@link SENTRY_MOBILE_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example true\n */\nexport const SENTRY_MOBILE = 'sentry.mobile';\n\n/**\n * Type for {@link SENTRY_MOBILE} sentry.mobile\n */\nexport type SENTRY_MOBILE_TYPE = boolean;\n\n// Path: model/attributes/sentry/sentry__module__[key].json\n\n/**\n * A module that was loaded in the process. The key is the name of the module. `sentry.module.<key>`\n *\n * Attribute Value Type: `string` {@link SENTRY_MODULE_KEY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Has Dynamic Suffix: true\n *\n * @example \"sentry.module.brianium/paratest='v7.7.0'\"\n */\nexport const SENTRY_MODULE_KEY = 'sentry.module.<key>';\n\n/**\n * Base key for {@link SENTRY_MODULE_KEY}. Use with a dynamic suffix, e.g. `${SENTRY_MODULE_KEY_BASE}.${key}`.\n */\nexport const SENTRY_MODULE_KEY_BASE = 'sentry.module';\n\n/**\n * Type for {@link SENTRY_MODULE_KEY} sentry.module.<key>\n */\nexport type SENTRY_MODULE_KEY_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__nextjs__ssr__function__route.json\n\n/**\n * 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. `sentry.nextjs.ssr.function.route`\n *\n * Attribute Value Type: `string` {@link SENTRY_NEXTJS_SSR_FUNCTION_ROUTE_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"/posts/[id]/layout\"\n */\nexport const SENTRY_NEXTJS_SSR_FUNCTION_ROUTE = 'sentry.nextjs.ssr.function.route';\n\n/**\n * Type for {@link SENTRY_NEXTJS_SSR_FUNCTION_ROUTE} sentry.nextjs.ssr.function.route\n */\nexport type SENTRY_NEXTJS_SSR_FUNCTION_ROUTE_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__nextjs__ssr__function__type.json\n\n/**\n * 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. `sentry.nextjs.ssr.function.type`\n *\n * Attribute Value Type: `string` {@link SENTRY_NEXTJS_SSR_FUNCTION_TYPE_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"generateMetadata\"\n */\nexport const SENTRY_NEXTJS_SSR_FUNCTION_TYPE = 'sentry.nextjs.ssr.function.type';\n\n/**\n * Type for {@link SENTRY_NEXTJS_SSR_FUNCTION_TYPE} sentry.nextjs.ssr.function.type\n */\nexport type SENTRY_NEXTJS_SSR_FUNCTION_TYPE_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__normalized_db_query.json\n\n/**\n * The normalized version of `db.query.text`. `sentry.normalized_db_query`\n *\n * Attribute Value Type: `string` {@link SENTRY_NORMALIZED_DB_QUERY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"SELECT .. FROM sentry_project WHERE (project_id = %s)\"\n */\nexport const SENTRY_NORMALIZED_DB_QUERY = 'sentry.normalized_db_query';\n\n/**\n * Type for {@link SENTRY_NORMALIZED_DB_QUERY} sentry.normalized_db_query\n */\nexport type SENTRY_NORMALIZED_DB_QUERY_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__normalized_db_query__hash.json\n\n/**\n * The hash of `sentry.normalized_db_query`. `sentry.normalized_db_query.hash`\n *\n * Attribute Value Type: `string` {@link SENTRY_NORMALIZED_DB_QUERY_HASH_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n */\nexport const SENTRY_NORMALIZED_DB_QUERY_HASH = 'sentry.normalized_db_query.hash';\n\n/**\n * Type for {@link SENTRY_NORMALIZED_DB_QUERY_HASH} sentry.normalized_db_query.hash\n */\nexport type SENTRY_NORMALIZED_DB_QUERY_HASH_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__normalized_description.json\n\n/**\n * 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). `sentry.normalized_description`\n *\n * Attribute Value Type: `string` {@link SENTRY_NORMALIZED_DESCRIPTION_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"SELECT .. FROM sentry_project WHERE (project_id = %s)\"\n */\nexport const SENTRY_NORMALIZED_DESCRIPTION = 'sentry.normalized_description';\n\n/**\n * Type for {@link SENTRY_NORMALIZED_DESCRIPTION} sentry.normalized_description\n */\nexport type SENTRY_NORMALIZED_DESCRIPTION_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__observed_timestamp_nanos.json\n\n/**\n * The timestamp at which an envelope was received by Relay, in nanoseconds. `sentry.observed_timestamp_nanos`\n *\n * Attribute Value Type: `string` {@link SENTRY_OBSERVED_TIMESTAMP_NANOS_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"1544712660300000000\"\n */\nexport const SENTRY_OBSERVED_TIMESTAMP_NANOS = 'sentry.observed_timestamp_nanos';\n\n/**\n * Type for {@link SENTRY_OBSERVED_TIMESTAMP_NANOS} sentry.observed_timestamp_nanos\n */\nexport type SENTRY_OBSERVED_TIMESTAMP_NANOS_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__op.json\n\n/**\n * The operation of a span. `sentry.op`\n *\n * Attribute Value Type: `string` {@link SENTRY_OP_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"http.client\"\n */\nexport const SENTRY_OP = 'sentry.op';\n\n/**\n * Type for {@link SENTRY_OP} sentry.op\n */\nexport type SENTRY_OP_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__origin.json\n\n/**\n * The origin of the instrumentation (e.g. span, log, etc.) `sentry.origin`\n *\n * Attribute Value Type: `string` {@link SENTRY_ORIGIN_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"auto.http.otel.fastify\"\n */\nexport const SENTRY_ORIGIN = 'sentry.origin';\n\n/**\n * Type for {@link SENTRY_ORIGIN} sentry.origin\n */\nexport type SENTRY_ORIGIN_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__platform.json\n\n/**\n * The sdk platform that generated the event. `sentry.platform`\n *\n * Attribute Value Type: `string` {@link SENTRY_PLATFORM_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"php\"\n */\nexport const SENTRY_PLATFORM = 'sentry.platform';\n\n/**\n * Type for {@link SENTRY_PLATFORM} sentry.platform\n */\nexport type SENTRY_PLATFORM_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__profiler_id.json\n\n/**\n * The id of the currently running profiler (continuous profiling) `sentry.profiler_id`\n *\n * Attribute Value Type: `string` {@link SENTRY_PROFILER_ID_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"18779b64dd35d1a538e7ce2dd2d3fad3\"\n */\nexport const SENTRY_PROFILER_ID = 'sentry.profiler_id';\n\n/**\n * Type for {@link SENTRY_PROFILER_ID} sentry.profiler_id\n */\nexport type SENTRY_PROFILER_ID_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__profile_id.json\n\n/**\n * The ID of the Sentry profile the span is associated with. This is only meaningful for transaction-based profiling. `sentry.profile_id`\n *\n * Attribute Value Type: `string` {@link SENTRY_PROFILE_ID_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"123e4567e89b12d3a456426614174000\"\n */\nexport const SENTRY_PROFILE_ID = 'sentry.profile_id';\n\n/**\n * Type for {@link SENTRY_PROFILE_ID} sentry.profile_id\n */\nexport type SENTRY_PROFILE_ID_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__release.json\n\n/**\n * The sentry release. `sentry.release`\n *\n * Attribute Value Type: `string` {@link SENTRY_RELEASE_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SERVICE_VERSION} `service.version`, {@link RELEASE} `release`\n *\n * @example \"7.0.0\"\n */\nexport const SENTRY_RELEASE = 'sentry.release';\n\n/**\n * Type for {@link SENTRY_RELEASE} sentry.release\n */\nexport type SENTRY_RELEASE_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__replay_id.json\n\n/**\n * The id of the sentry replay. `sentry.replay_id`\n *\n * Attribute Value Type: `string` {@link SENTRY_REPLAY_ID_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link REPLAY_ID} `replay_id`\n *\n * @example \"123e4567e89b12d3a456426614174000\"\n */\nexport const SENTRY_REPLAY_ID = 'sentry.replay_id';\n\n/**\n * Type for {@link SENTRY_REPLAY_ID} sentry.replay_id\n */\nexport type SENTRY_REPLAY_ID_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__replay_is_buffering.json\n\n/**\n * A sentinel attribute on log events indicating whether the current Session Replay is being buffered (onErrorSampleRate). `sentry.replay_is_buffering`\n *\n * Attribute Value Type: `boolean` {@link SENTRY_REPLAY_IS_BUFFERING_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example true\n */\nexport const SENTRY_REPLAY_IS_BUFFERING = 'sentry.replay_is_buffering';\n\n/**\n * Type for {@link SENTRY_REPLAY_IS_BUFFERING} sentry.replay_is_buffering\n */\nexport type SENTRY_REPLAY_IS_BUFFERING_TYPE = boolean;\n\n// Path: model/attributes/sentry/sentry__report_event.json\n\n/**\n * (Deprecated) The event that caused the SDK to report CLS or LCP (pagehide or navigation) `sentry.report_event`\n *\n * Attribute Value Type: `string` {@link SENTRY_REPORT_EVENT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated  - The report event is now recorded as a browser.web_vital.lcp.report_event or browser.web_vital.cls.report_event attribute. No backfill required.\n * @example \"pagehide\"\n */\nexport const SENTRY_REPORT_EVENT = 'sentry.report_event';\n\n/**\n * Type for {@link SENTRY_REPORT_EVENT} sentry.report_event\n */\nexport type SENTRY_REPORT_EVENT_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__sdk__integrations.json\n\n/**\n * 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. `sentry.sdk.integrations`\n *\n * Attribute Value Type: `Array<string>` {@link SENTRY_SDK_INTEGRATIONS_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example [\"InboundFilters\",\"FunctionToString\",\"BrowserApiErrors\",\"Breadcrumbs\"]\n */\nexport const SENTRY_SDK_INTEGRATIONS = 'sentry.sdk.integrations';\n\n/**\n * Type for {@link SENTRY_SDK_INTEGRATIONS} sentry.sdk.integrations\n */\nexport type SENTRY_SDK_INTEGRATIONS_TYPE = Array<string>;\n\n// Path: model/attributes/sentry/sentry__sdk__name.json\n\n/**\n * The sentry sdk name. `sentry.sdk.name`\n *\n * Attribute Value Type: `string` {@link SENTRY_SDK_NAME_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"@sentry/react\"\n */\nexport const SENTRY_SDK_NAME = 'sentry.sdk.name';\n\n/**\n * Type for {@link SENTRY_SDK_NAME} sentry.sdk.name\n */\nexport type SENTRY_SDK_NAME_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__sdk__version.json\n\n/**\n * The sentry sdk version. `sentry.sdk.version`\n *\n * Attribute Value Type: `string` {@link SENTRY_SDK_VERSION_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"7.0.0\"\n */\nexport const SENTRY_SDK_VERSION = 'sentry.sdk.version';\n\n/**\n * Type for {@link SENTRY_SDK_VERSION} sentry.sdk.version\n */\nexport type SENTRY_SDK_VERSION_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__segment__id.json\n\n/**\n * The segment ID of a span `sentry.segment.id`\n *\n * Attribute Value Type: `string` {@link SENTRY_SEGMENT_ID_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link _SENTRY_SEGMENT_ID} `sentry.segment_id`\n *\n * @example \"051581bf3cb55c13\"\n */\nexport const SENTRY_SEGMENT_ID = 'sentry.segment.id';\n\n/**\n * Type for {@link SENTRY_SEGMENT_ID} sentry.segment.id\n */\nexport type SENTRY_SEGMENT_ID_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__segment_id.json\n\n/**\n * The segment ID of a span `sentry.segment_id`\n *\n * Attribute Value Type: `string` {@link _SENTRY_SEGMENT_ID_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SENTRY_SEGMENT_ID} `sentry.segment.id`\n *\n * @deprecated Use {@link SENTRY_SEGMENT_ID} (sentry.segment.id) instead\n * @example \"051581bf3cb55c13\"\n */\nexport const _SENTRY_SEGMENT_ID = 'sentry.segment_id';\n\n/**\n * Type for {@link _SENTRY_SEGMENT_ID} sentry.segment_id\n */\nexport type _SENTRY_SEGMENT_ID_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__segment__name.json\n\n/**\n * The segment name of a span `sentry.segment.name`\n *\n * Attribute Value Type: `string` {@link SENTRY_SEGMENT_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SENTRY_TRANSACTION} `sentry.transaction`, {@link TRANSACTION} `transaction`\n *\n * @example \"GET /user\"\n */\nexport const SENTRY_SEGMENT_NAME = 'sentry.segment.name';\n\n/**\n * Type for {@link SENTRY_SEGMENT_NAME} sentry.segment.name\n */\nexport type SENTRY_SEGMENT_NAME_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__server_sample_rate.json\n\n/**\n * Rate at which a span was sampled in Relay. `sentry.server_sample_rate`\n *\n * Attribute Value Type: `number` {@link SENTRY_SERVER_SAMPLE_RATE_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 0.5\n */\nexport const SENTRY_SERVER_SAMPLE_RATE = 'sentry.server_sample_rate';\n\n/**\n * Type for {@link SENTRY_SERVER_SAMPLE_RATE} sentry.server_sample_rate\n */\nexport type SENTRY_SERVER_SAMPLE_RATE_TYPE = number;\n\n// Path: model/attributes/sentry/sentry__source.json\n\n/**\n * The source of a span, also referred to as transaction source. Known values are:  `'custom'`, `'url'`, `'route'`, `'component'`, `'view'`, `'task'`. '`source`' describes a parametrized route, while `'url'` describes the full URL, potentially containing identifiers. `sentry.source`\n *\n * Attribute Value Type: `string` {@link SENTRY_SOURCE_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated Use {@link SENTRY_SPAN_SOURCE} (sentry.span.source) instead - This attribute is being deprecated in favor of sentry.span.source\n * @example \"route\"\n */\nexport const SENTRY_SOURCE = 'sentry.source';\n\n/**\n * Type for {@link SENTRY_SOURCE} sentry.source\n */\nexport type SENTRY_SOURCE_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__span__source.json\n\n/**\n * The source of a span, also referred to as transaction source. Known values are:  `'custom'`, `'url'`, `'route'`, `'component'`, `'view'`, `'task'`. '`source`' describes a parametrized route, while `'url'` describes the full URL, potentially containing identifiers. `sentry.span.source`\n *\n * Attribute Value Type: `string` {@link SENTRY_SPAN_SOURCE_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"route\"\n */\nexport const SENTRY_SPAN_SOURCE = 'sentry.span.source';\n\n/**\n * Type for {@link SENTRY_SPAN_SOURCE} sentry.span.source\n */\nexport type SENTRY_SPAN_SOURCE_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__status.json\n\n/**\n * The span's status (either \"ok\" or \"error\"). Older SDKs may set this to a more specific error, but this behaviour is deprecated. `sentry.status`\n *\n * Attribute Value Type: `string` {@link SENTRY_STATUS_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"ok\"\n */\nexport const SENTRY_STATUS = 'sentry.status';\n\n/**\n * Type for {@link SENTRY_STATUS} sentry.status\n */\nexport type SENTRY_STATUS_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__status_code.json\n\n/**\n * The HTTP status code used in Sentry Insights. Typically set by Sentry during ingestion, rather than by clients. `sentry.status_code`\n *\n * Attribute Value Type: `number` {@link SENTRY_STATUS_CODE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 200\n */\nexport const SENTRY_STATUS_CODE = 'sentry.status_code';\n\n/**\n * Type for {@link SENTRY_STATUS_CODE} sentry.status_code\n */\nexport type SENTRY_STATUS_CODE_TYPE = number;\n\n// Path: model/attributes/sentry/sentry__status__message.json\n\n/**\n * The from OTLP extracted status message. `sentry.status.message`\n *\n * Attribute Value Type: `string` {@link SENTRY_STATUS_MESSAGE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"foobar\"\n */\nexport const SENTRY_STATUS_MESSAGE = 'sentry.status.message';\n\n/**\n * Type for {@link SENTRY_STATUS_MESSAGE} sentry.status.message\n */\nexport type SENTRY_STATUS_MESSAGE_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__sveltekit__navigation__from.json\n\n/**\n * the navigation origin (sveltekit router) `sentry.sveltekit.navigation.from`\n *\n * Attribute Value Type: `string` {@link SENTRY_SVELTEKIT_NAVIGATION_FROM_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link NAVIGATION_ORIGIN} `navigation.origin`\n *\n * @deprecated Use {@link NAVIGATION_ORIGIN} (navigation.origin) instead - Use the more generic attribute instead\n * @example \"/home\"\n */\nexport const SENTRY_SVELTEKIT_NAVIGATION_FROM = 'sentry.sveltekit.navigation.from';\n\n/**\n * Type for {@link SENTRY_SVELTEKIT_NAVIGATION_FROM} sentry.sveltekit.navigation.from\n */\nexport type SENTRY_SVELTEKIT_NAVIGATION_FROM_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__sveltekit__navigation__to.json\n\n/**\n * the navigation destination `sentry.sveltekit.navigation.to`\n *\n * Attribute Value Type: `string` {@link SENTRY_SVELTEKIT_NAVIGATION_TO_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated  - the navigation destination is already covered by url.* attributes\n * @example \"/users/:id\"\n */\nexport const SENTRY_SVELTEKIT_NAVIGATION_TO = 'sentry.sveltekit.navigation.to';\n\n/**\n * Type for {@link SENTRY_SVELTEKIT_NAVIGATION_TO} sentry.sveltekit.navigation.to\n */\nexport type SENTRY_SVELTEKIT_NAVIGATION_TO_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__sveltekit__navigation__type.json\n\n/**\n * The type of navigation event emitted from the sveltekit client router `sentry.sveltekit.navigation.type`\n *\n * Attribute Value Type: `string` {@link SENTRY_SVELTEKIT_NAVIGATION_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link NAVIGATION_TYPE} `navigation.type`\n *\n * @deprecated Use {@link NAVIGATION_TYPE} (navigation.type) instead - Use the more generic attribute instead\n * @example \"link\"\n */\nexport const SENTRY_SVELTEKIT_NAVIGATION_TYPE = 'sentry.sveltekit.navigation.type';\n\n/**\n * Type for {@link SENTRY_SVELTEKIT_NAVIGATION_TYPE} sentry.sveltekit.navigation.type\n */\nexport type SENTRY_SVELTEKIT_NAVIGATION_TYPE_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__thread__id.json\n\n/**\n * Current “managed” thread ID. `sentry.thread.id`\n *\n * Attribute Value Type: `number` {@link SENTRY_THREAD_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated Use {@link THREAD_ID} (thread.id) instead - This attribute is being deprecated in favor of the OTel-standard thread.id\n * @example 56\n */\nexport const SENTRY_THREAD_ID = 'sentry.thread.id';\n\n/**\n * Type for {@link SENTRY_THREAD_ID} sentry.thread.id\n */\nexport type SENTRY_THREAD_ID_TYPE = number;\n\n// Path: model/attributes/sentry/sentry__timestamp__sequence.json\n\n/**\n * 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. `sentry.timestamp.sequence`\n *\n * Attribute Value Type: `number` {@link SENTRY_TIMESTAMP_SEQUENCE_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 0\n */\nexport const SENTRY_TIMESTAMP_SEQUENCE = 'sentry.timestamp.sequence';\n\n/**\n * Type for {@link SENTRY_TIMESTAMP_SEQUENCE} sentry.timestamp.sequence\n */\nexport type SENTRY_TIMESTAMP_SEQUENCE_TYPE = number;\n\n// Path: model/attributes/sentry/sentry__trace_lifecycle.json\n\n/**\n * Indicates the chosen trace lifecycle mode of the SDK (stream or static) `sentry.trace_lifecycle`\n *\n * Attribute Value Type: `string` {@link SENTRY_TRACE_LIFECYCLE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"stream\"\n */\nexport const SENTRY_TRACE_LIFECYCLE = 'sentry.trace_lifecycle';\n\n/**\n * Type for {@link SENTRY_TRACE_LIFECYCLE} sentry.trace_lifecycle\n */\nexport type SENTRY_TRACE_LIFECYCLE_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__trace__parent_span_id.json\n\n/**\n * 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. `sentry.trace.parent_span_id`\n *\n * Attribute Value Type: `string` {@link SENTRY_TRACE_PARENT_SPAN_ID_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @deprecated\n * @example \"b0e6f15b45c36b12\"\n */\nexport const SENTRY_TRACE_PARENT_SPAN_ID = 'sentry.trace.parent_span_id';\n\n/**\n * Type for {@link SENTRY_TRACE_PARENT_SPAN_ID} sentry.trace.parent_span_id\n */\nexport type SENTRY_TRACE_PARENT_SPAN_ID_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__trace__status.json\n\n/**\n * The segment's status (either \"ok\" or \"error\"). Older SDKs may set this to a more specific error, but this behaviour is deprecated. `sentry.trace.status`\n *\n * Attribute Value Type: `string` {@link SENTRY_TRACE_STATUS_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"ok\"\n */\nexport const SENTRY_TRACE_STATUS = 'sentry.trace.status';\n\n/**\n * Type for {@link SENTRY_TRACE_STATUS} sentry.trace.status\n */\nexport type SENTRY_TRACE_STATUS_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__transaction.json\n\n/**\n * The sentry transaction (segment name). `sentry.transaction`\n *\n * Attribute Value Type: `string` {@link SENTRY_TRANSACTION_TYPE}\n *\n * Apply Scrubbing: never\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SENTRY_SEGMENT_NAME} `sentry.segment.name`, {@link TRANSACTION} `transaction`\n *\n * @deprecated Use {@link SENTRY_SEGMENT_NAME} (sentry.segment.name) instead - This attribute is being deprecated in favor of sentry.segment.name\n * @example \"GET /\"\n */\nexport const SENTRY_TRANSACTION = 'sentry.transaction';\n\n/**\n * Type for {@link SENTRY_TRANSACTION} sentry.transaction\n */\nexport type SENTRY_TRANSACTION_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__user__email.json\n\n/**\n * User email address. `sentry.user.email`\n *\n * Attribute Value Type: `string` {@link SENTRY_USER_EMAIL_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link USER_EMAIL} `user.email`\n *\n * @deprecated Use {@link USER_EMAIL} (user.email) instead\n */\nexport const SENTRY_USER_EMAIL = 'sentry.user.email';\n\n/**\n * Type for {@link SENTRY_USER_EMAIL} sentry.user.email\n */\nexport type SENTRY_USER_EMAIL_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__user__geo__city.json\n\n/**\n * Human readable city name. `sentry.user.geo.city`\n *\n * Attribute Value Type: `string` {@link SENTRY_USER_GEO_CITY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link USER_GEO_CITY} `user.geo.city`\n *\n * @deprecated Use {@link USER_GEO_CITY} (user.geo.city) instead\n */\nexport const SENTRY_USER_GEO_CITY = 'sentry.user.geo.city';\n\n/**\n * Type for {@link SENTRY_USER_GEO_CITY} sentry.user.geo.city\n */\nexport type SENTRY_USER_GEO_CITY_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__user__geo__country_code.json\n\n/**\n * Two-letter country code (ISO 3166-1 alpha-2). `sentry.user.geo.country_code`\n *\n * Attribute Value Type: `string` {@link SENTRY_USER_GEO_COUNTRY_CODE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link USER_GEO_COUNTRY_CODE} `user.geo.country_code`\n *\n * @deprecated Use {@link USER_GEO_COUNTRY_CODE} (user.geo.country_code) instead\n */\nexport const SENTRY_USER_GEO_COUNTRY_CODE = 'sentry.user.geo.country_code';\n\n/**\n * Type for {@link SENTRY_USER_GEO_COUNTRY_CODE} sentry.user.geo.country_code\n */\nexport type SENTRY_USER_GEO_COUNTRY_CODE_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__user__geo__region.json\n\n/**\n * Human readable region name or code. `sentry.user.geo.region`\n *\n * Attribute Value Type: `string` {@link SENTRY_USER_GEO_REGION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link USER_GEO_REGION} `user.geo.region`\n *\n * @deprecated Use {@link USER_GEO_REGION} (user.geo.region) instead\n */\nexport const SENTRY_USER_GEO_REGION = 'sentry.user.geo.region';\n\n/**\n * Type for {@link SENTRY_USER_GEO_REGION} sentry.user.geo.region\n */\nexport type SENTRY_USER_GEO_REGION_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__user__geo__subdivision.json\n\n/**\n * Human readable subdivision name. `sentry.user.geo.subdivision`\n *\n * Attribute Value Type: `string` {@link SENTRY_USER_GEO_SUBDIVISION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link USER_GEO_SUBDIVISION} `user.geo.subdivision`\n *\n * @deprecated Use {@link USER_GEO_SUBDIVISION} (user.geo.subdivision) instead\n */\nexport const SENTRY_USER_GEO_SUBDIVISION = 'sentry.user.geo.subdivision';\n\n/**\n * Type for {@link SENTRY_USER_GEO_SUBDIVISION} sentry.user.geo.subdivision\n */\nexport type SENTRY_USER_GEO_SUBDIVISION_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__user__id.json\n\n/**\n * Unique identifier of the user. `sentry.user.id`\n *\n * Attribute Value Type: `string` {@link SENTRY_USER_ID_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link USER_ID} `user.id`\n *\n * @deprecated Use {@link USER_ID} (user.id) instead\n */\nexport const SENTRY_USER_ID = 'sentry.user.id';\n\n/**\n * Type for {@link SENTRY_USER_ID} sentry.user.id\n */\nexport type SENTRY_USER_ID_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__user__ip.json\n\n/**\n * The IP address of the user. `sentry.user.ip`\n *\n * Attribute Value Type: `string` {@link SENTRY_USER_IP_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link USER_IP_ADDRESS} `user.ip_address`\n *\n * @deprecated Use {@link USER_IP_ADDRESS} (user.ip_address) instead\n */\nexport const SENTRY_USER_IP = 'sentry.user.ip';\n\n/**\n * Type for {@link SENTRY_USER_IP} sentry.user.ip\n */\nexport type SENTRY_USER_IP_TYPE = string;\n\n// Path: model/attributes/sentry/sentry__user__username.json\n\n/**\n * Short name or login/username of the user. `sentry.user.username`\n *\n * Attribute Value Type: `string` {@link SENTRY_USER_USERNAME_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link USER_NAME} `user.name`\n *\n * @deprecated Use {@link USER_NAME} (user.name) instead\n */\nexport const SENTRY_USER_USERNAME = 'sentry.user.username';\n\n/**\n * Type for {@link SENTRY_USER_USERNAME} sentry.user.username\n */\nexport type SENTRY_USER_USERNAME_TYPE = string;\n\n// Path: model/attributes/server/server__address.json\n\n/**\n * Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name. `server.address`\n *\n * Attribute Value Type: `string` {@link SERVER_ADDRESS_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link HTTP_SERVER_NAME} `http.server_name`, {@link NET_HOST_NAME} `net.host.name`, {@link HTTP_HOST} `http.host`, {@link SERVER_NAME} `server_name`\n *\n * @example \"example.com\"\n */\nexport const SERVER_ADDRESS = 'server.address';\n\n/**\n * Type for {@link SERVER_ADDRESS} server.address\n */\nexport type SERVER_ADDRESS_TYPE = string;\n\n// Path: model/attributes/server_name.json\n\n/**\n * Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name. `server_name`\n *\n * Attribute Value Type: `string` {@link SERVER_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SERVER_ADDRESS} `server.address`, {@link HTTP_SERVER_NAME} `http.server_name`, {@link NET_HOST_NAME} `net.host.name`, {@link HTTP_HOST} `http.host`\n *\n * @deprecated Use {@link SERVER_ADDRESS} (server.address) instead - This attribute is being deprecated in favor of server.address, which is the OTel-aligned replacement.\n * @example \"example.com\"\n */\nexport const SERVER_NAME = 'server_name';\n\n/**\n * Type for {@link SERVER_NAME} server_name\n */\nexport type SERVER_NAME_TYPE = string;\n\n// Path: model/attributes/server/server__port.json\n\n/**\n * Server port number. `server.port`\n *\n * Attribute Value Type: `number` {@link SERVER_PORT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link NET_HOST_PORT} `net.host.port`\n *\n * @example 1337\n */\nexport const SERVER_PORT = 'server.port';\n\n/**\n * Type for {@link SERVER_PORT} server.port\n */\nexport type SERVER_PORT_TYPE = number;\n\n// Path: model/attributes/service/service__name.json\n\n/**\n * Logical name of the service. `service.name`\n *\n * Attribute Value Type: `string` {@link SERVICE_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"omegastar\"\n */\nexport const SERVICE_NAME = 'service.name';\n\n/**\n * Type for {@link SERVICE_NAME} service.name\n */\nexport type SERVICE_NAME_TYPE = string;\n\n// Path: model/attributes/service/service__version.json\n\n/**\n * The version string of the service API or implementation. The format is not defined by these conventions. `service.version`\n *\n * Attribute Value Type: `string` {@link SERVICE_VERSION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link SENTRY_RELEASE} `sentry.release`\n *\n * @example \"5.0.0\"\n */\nexport const SERVICE_VERSION = 'service.version';\n\n/**\n * Type for {@link SERVICE_VERSION} service.version\n */\nexport type SERVICE_VERSION_TYPE = string;\n\n// Path: model/attributes/session/session__id.json\n\n/**\n * A unique id identifying the active session at the time of setting this attribute `session.id`\n *\n * Attribute Value Type: `string` {@link SESSION_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"00112233-4455-6677-8899-aabbccddeeff\"\n */\nexport const SESSION_ID = 'session.id';\n\n/**\n * Type for {@link SESSION_ID} session.id\n */\nexport type SESSION_ID_TYPE = string;\n\n// Path: model/attributes/stall_percentage.json\n\n/**\n * The fraction of time the app was stalled. Only applies to React Native. This is computed by Relay. `stall_percentage`\n *\n * Attribute Value Type: `number` {@link STALL_PERCENTAGE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n */\nexport const STALL_PERCENTAGE = 'stall_percentage';\n\n/**\n * Type for {@link STALL_PERCENTAGE} stall_percentage\n */\nexport type STALL_PERCENTAGE_TYPE = number;\n\n// Path: model/attributes/stall_total_time.json\n\n/**\n * The combined duration of all stalls in milliseconds. Only applies to React Native. This is computed by Relay. `stall_total_time`\n *\n * Attribute Value Type: `number` {@link STALL_TOTAL_TIME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n */\nexport const STALL_TOTAL_TIME = 'stall_total_time';\n\n/**\n * Type for {@link STALL_TOTAL_TIME} stall_total_time\n */\nexport type STALL_TOTAL_TIME_TYPE = number;\n\n// Path: model/attributes/state/state__type.json\n\n/**\n * The type of state management library `state.type`\n *\n * Attribute Value Type: `string` {@link STATE_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"redux\"\n */\nexport const STATE_TYPE = 'state.type';\n\n/**\n * Type for {@link STATE_TYPE} state.type\n */\nexport type STATE_TYPE_TYPE = string;\n\n// Path: model/attributes/thread/thread__id.json\n\n/**\n * Current “managed” thread ID. `thread.id`\n *\n * Attribute Value Type: `number` {@link THREAD_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example 56\n */\nexport const THREAD_ID = 'thread.id';\n\n/**\n * Type for {@link THREAD_ID} thread.id\n */\nexport type THREAD_ID_TYPE = number;\n\n// Path: model/attributes/thread/thread__name.json\n\n/**\n * Current thread name. `thread.name`\n *\n * Attribute Value Type: `string` {@link THREAD_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"main\"\n */\nexport const THREAD_NAME = 'thread.name';\n\n/**\n * Type for {@link THREAD_NAME} thread.name\n */\nexport type THREAD_NAME_TYPE = string;\n\n// Path: model/attributes/timber/timber__tag.json\n\n/**\n * The log tag provided by the timber logging framework. `timber.tag`\n *\n * Attribute Value Type: `string` {@link TIMBER_TAG_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"MyTag\"\n */\nexport const TIMBER_TAG = 'timber.tag';\n\n/**\n * Type for {@link TIMBER_TAG} timber.tag\n */\nexport type TIMBER_TAG_TYPE = string;\n\n// Path: model/attributes/time_to_full_display.json\n\n/**\n * The duration of time to full display in milliseconds `time_to_full_display`\n *\n * Attribute Value Type: `number` {@link TIME_TO_FULL_DISPLAY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_VITALS_TTFD_VALUE} `app.vitals.ttfd.value`\n *\n * @deprecated Use {@link APP_VITALS_TTFD_VALUE} (app.vitals.ttfd.value) instead - Replaced by app.vitals.ttfd.value to align with the app.vitals.* namespace for mobile performance attributes\n * @example 1234.56\n */\nexport const TIME_TO_FULL_DISPLAY = 'time_to_full_display';\n\n/**\n * Type for {@link TIME_TO_FULL_DISPLAY} time_to_full_display\n */\nexport type TIME_TO_FULL_DISPLAY_TYPE = number;\n\n// Path: model/attributes/time_to_initial_display.json\n\n/**\n * The duration of time to initial display in milliseconds `time_to_initial_display`\n *\n * Attribute Value Type: `number` {@link TIME_TO_INITIAL_DISPLAY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link APP_VITALS_TTID_VALUE} `app.vitals.ttid.value`\n *\n * @deprecated Use {@link APP_VITALS_TTID_VALUE} (app.vitals.ttid.value) instead - Replaced by app.vitals.ttid.value to align with the app.vitals.* namespace for mobile performance attributes\n * @example 1234.56\n */\nexport const TIME_TO_INITIAL_DISPLAY = 'time_to_initial_display';\n\n/**\n * Type for {@link TIME_TO_INITIAL_DISPLAY} time_to_initial_display\n */\nexport type TIME_TO_INITIAL_DISPLAY_TYPE = number;\n\n// Path: model/attributes/transaction.json\n\n/**\n * The sentry transaction (segment name). `transaction`\n *\n * Attribute Value Type: `string` {@link TRANSACTION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SENTRY_SEGMENT_NAME} `sentry.segment.name`, {@link SENTRY_TRANSACTION} `sentry.transaction`\n *\n * @deprecated Use {@link SENTRY_SEGMENT_NAME} (sentry.segment.name) instead\n * @example \"GET /\"\n */\nexport const TRANSACTION = 'transaction';\n\n/**\n * Type for {@link TRANSACTION} transaction\n */\nexport type TRANSACTION_TYPE = string;\n\n// Path: model/attributes/trpc/trpc__procedure_path.json\n\n/**\n * The path of the tRPC procedure being called `trpc.procedure_path`\n *\n * Attribute Value Type: `string` {@link TRPC_PROCEDURE_PATH_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"user.getById\"\n */\nexport const TRPC_PROCEDURE_PATH = 'trpc.procedure_path';\n\n/**\n * Type for {@link TRPC_PROCEDURE_PATH} trpc.procedure_path\n */\nexport type TRPC_PROCEDURE_PATH_TYPE = string;\n\n// Path: model/attributes/trpc/trpc__procedure_type.json\n\n/**\n * The type of the tRPC procedure `trpc.procedure_type`\n *\n * Attribute Value Type: `string` {@link TRPC_PROCEDURE_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"query\"\n */\nexport const TRPC_PROCEDURE_TYPE = 'trpc.procedure_type';\n\n/**\n * Type for {@link TRPC_PROCEDURE_TYPE} trpc.procedure_type\n */\nexport type TRPC_PROCEDURE_TYPE_TYPE = string;\n\n// Path: model/attributes/ttfb.json\n\n/**\n * The value of the recorded Time To First Byte (TTFB) web vital in milliseconds `ttfb`\n *\n * Attribute Value Type: `number` {@link TTFB_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link BROWSER_WEB_VITAL_TTFB_VALUE} `browser.web_vital.ttfb.value`\n *\n * @deprecated Use {@link BROWSER_WEB_VITAL_TTFB_VALUE} (browser.web_vital.ttfb.value) instead - This attribute is being deprecated in favor of browser.web_vital.ttfb.value\n * @example 194\n */\nexport const TTFB = 'ttfb';\n\n/**\n * Type for {@link TTFB} ttfb\n */\nexport type TTFB_TYPE = number;\n\n// Path: model/attributes/ttfb/ttfb__requestTime.json\n\n/**\n * 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 `ttfb.requestTime`\n *\n * Attribute Value Type: `number` {@link TTFB_REQUESTTIME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link BROWSER_WEB_VITAL_TTFB_REQUEST_TIME} `browser.web_vital.ttfb.request_time`\n *\n * @deprecated Use {@link BROWSER_WEB_VITAL_TTFB_REQUEST_TIME} (browser.web_vital.ttfb.request_time) instead - This attribute is being deprecated in favor of browser.web_vital.ttfb.request_time\n * @example 1554.5814\n */\nexport const TTFB_REQUESTTIME = 'ttfb.requestTime';\n\n/**\n * Type for {@link TTFB_REQUESTTIME} ttfb.requestTime\n */\nexport type TTFB_REQUESTTIME_TYPE = number;\n\n// Path: model/attributes/type.json\n\n/**\n * More granular type of the operation happening. `type`\n *\n * Attribute Value Type: `string` {@link TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"fetch\"\n */\nexport const TYPE = 'type';\n\n/**\n * Type for {@link TYPE} type\n */\nexport type TYPE_TYPE = string;\n\n// Path: model/attributes/ui/ui__component_name.json\n\n/**\n * The name of the associated component. `ui.component_name`\n *\n * Attribute Value Type: `string` {@link UI_COMPONENT_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"HomeButton\"\n */\nexport const UI_COMPONENT_NAME = 'ui.component_name';\n\n/**\n * Type for {@link UI_COMPONENT_NAME} ui.component_name\n */\nexport type UI_COMPONENT_NAME_TYPE = string;\n\n// Path: model/attributes/ui/ui__contributes_to_ttfd.json\n\n/**\n * Whether the span execution contributed to the TTFD (time to fully drawn) metric. `ui.contributes_to_ttfd`\n *\n * Attribute Value Type: `boolean` {@link UI_CONTRIBUTES_TO_TTFD_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example true\n */\nexport const UI_CONTRIBUTES_TO_TTFD = 'ui.contributes_to_ttfd';\n\n/**\n * Type for {@link UI_CONTRIBUTES_TO_TTFD} ui.contributes_to_ttfd\n */\nexport type UI_CONTRIBUTES_TO_TTFD_TYPE = boolean;\n\n// Path: model/attributes/ui/ui__contributes_to_ttid.json\n\n/**\n * Whether the span execution contributed to the TTID (time to initial display) metric. `ui.contributes_to_ttid`\n *\n * Attribute Value Type: `boolean` {@link UI_CONTRIBUTES_TO_TTID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example true\n */\nexport const UI_CONTRIBUTES_TO_TTID = 'ui.contributes_to_ttid';\n\n/**\n * Type for {@link UI_CONTRIBUTES_TO_TTID} ui.contributes_to_ttid\n */\nexport type UI_CONTRIBUTES_TO_TTID_TYPE = boolean;\n\n// Path: model/attributes/ui/ui__element__height.json\n\n/**\n * The height of the UI element (for Html in pixels) `ui.element.height`\n *\n * Attribute Value Type: `number` {@link UI_ELEMENT_HEIGHT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 256\n */\nexport const UI_ELEMENT_HEIGHT = 'ui.element.height';\n\n/**\n * Type for {@link UI_ELEMENT_HEIGHT} ui.element.height\n */\nexport type UI_ELEMENT_HEIGHT_TYPE = number;\n\n// Path: model/attributes/ui/ui__element__id.json\n\n/**\n * The id of the UI element `ui.element.id`\n *\n * Attribute Value Type: `string` {@link UI_ELEMENT_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"btn-login\"\n */\nexport const UI_ELEMENT_ID = 'ui.element.id';\n\n/**\n * Type for {@link UI_ELEMENT_ID} ui.element.id\n */\nexport type UI_ELEMENT_ID_TYPE = string;\n\n// Path: model/attributes/ui/ui__element__identifier.json\n\n/**\n * The identifier used to measure the UI element timing `ui.element.identifier`\n *\n * Attribute Value Type: `string` {@link UI_ELEMENT_IDENTIFIER_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"heroImage\"\n */\nexport const UI_ELEMENT_IDENTIFIER = 'ui.element.identifier';\n\n/**\n * Type for {@link UI_ELEMENT_IDENTIFIER} ui.element.identifier\n */\nexport type UI_ELEMENT_IDENTIFIER_TYPE = string;\n\n// Path: model/attributes/ui/ui__element__load_time.json\n\n/**\n * The loading time of a UI element (from time origin to finished loading) `ui.element.load_time`\n *\n * Attribute Value Type: `number` {@link UI_ELEMENT_LOAD_TIME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 998.2234\n */\nexport const UI_ELEMENT_LOAD_TIME = 'ui.element.load_time';\n\n/**\n * Type for {@link UI_ELEMENT_LOAD_TIME} ui.element.load_time\n */\nexport type UI_ELEMENT_LOAD_TIME_TYPE = number;\n\n// Path: model/attributes/ui/ui__element__paint_type.json\n\n/**\n * The type of element paint. Can either be 'image-paint' or 'text-paint' `ui.element.paint_type`\n *\n * Attribute Value Type: `string` {@link UI_ELEMENT_PAINT_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"image-paint\"\n */\nexport const UI_ELEMENT_PAINT_TYPE = 'ui.element.paint_type';\n\n/**\n * Type for {@link UI_ELEMENT_PAINT_TYPE} ui.element.paint_type\n */\nexport type UI_ELEMENT_PAINT_TYPE_TYPE = string;\n\n// Path: model/attributes/ui/ui__element__render_time.json\n\n/**\n * The rendering time of the UI element (from time origin to finished rendering) `ui.element.render_time`\n *\n * Attribute Value Type: `number` {@link UI_ELEMENT_RENDER_TIME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1023.1124\n */\nexport const UI_ELEMENT_RENDER_TIME = 'ui.element.render_time';\n\n/**\n * Type for {@link UI_ELEMENT_RENDER_TIME} ui.element.render_time\n */\nexport type UI_ELEMENT_RENDER_TIME_TYPE = number;\n\n// Path: model/attributes/ui/ui__element__type.json\n\n/**\n * type of the UI element `ui.element.type`\n *\n * Attribute Value Type: `string` {@link UI_ELEMENT_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"img\"\n */\nexport const UI_ELEMENT_TYPE = 'ui.element.type';\n\n/**\n * Type for {@link UI_ELEMENT_TYPE} ui.element.type\n */\nexport type UI_ELEMENT_TYPE_TYPE = string;\n\n// Path: model/attributes/ui/ui__element__url.json\n\n/**\n * The URL of the UI element (e.g. an img src) `ui.element.url`\n *\n * Attribute Value Type: `string` {@link UI_ELEMENT_URL_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"https://assets.myapp.com/hero.png\"\n */\nexport const UI_ELEMENT_URL = 'ui.element.url';\n\n/**\n * Type for {@link UI_ELEMENT_URL} ui.element.url\n */\nexport type UI_ELEMENT_URL_TYPE = string;\n\n// Path: model/attributes/ui/ui__element__width.json\n\n/**\n * The width of the UI element (for HTML in pixels) `ui.element.width`\n *\n * Attribute Value Type: `number` {@link UI_ELEMENT_WIDTH_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 512\n */\nexport const UI_ELEMENT_WIDTH = 'ui.element.width';\n\n/**\n * Type for {@link UI_ELEMENT_WIDTH} ui.element.width\n */\nexport type UI_ELEMENT_WIDTH_TYPE = number;\n\n// Path: model/attributes/url.json\n\n/**\n * The URL of the resource that was fetched. `url`\n *\n * Attribute Value Type: `string` {@link URL_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link URL_FULL} `url.full`, {@link HTTP_URL} `http.url`\n *\n * @deprecated Use {@link URL_FULL} (url.full) instead\n * @example \"https://example.com/test?foo=bar#buzz\"\n */\nexport const URL = 'url';\n\n/**\n * Type for {@link URL} url\n */\nexport type URL_TYPE = string;\n\n// Path: model/attributes/url/url__domain.json\n\n/**\n * Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name. `url.domain`\n *\n * Attribute Value Type: `string` {@link URL_DOMAIN_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"example.com\"\n */\nexport const URL_DOMAIN = 'url.domain';\n\n/**\n * Type for {@link URL_DOMAIN} url.domain\n */\nexport type URL_DOMAIN_TYPE = string;\n\n// Path: model/attributes/url/url__fragment.json\n\n/**\n * The fragments present in the URI. Note that this does not contain the leading # character, while the `http.fragment` attribute does. `url.fragment`\n *\n * Attribute Value Type: `string` {@link URL_FRAGMENT_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"details\"\n */\nexport const URL_FRAGMENT = 'url.fragment';\n\n/**\n * Type for {@link URL_FRAGMENT} url.fragment\n */\nexport type URL_FRAGMENT_TYPE = string;\n\n// Path: model/attributes/url/url__full.json\n\n/**\n * The URL of the resource that was fetched. `url.full`\n *\n * Attribute Value Type: `string` {@link URL_FULL_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link HTTP_URL} `http.url`, {@link URL} `url`\n *\n * @example \"https://example.com/test?foo=bar#buzz\"\n */\nexport const URL_FULL = 'url.full';\n\n/**\n * Type for {@link URL_FULL} url.full\n */\nexport type URL_FULL_TYPE = string;\n\n// Path: model/attributes/url/url__path.json\n\n/**\n * The URI path component. `url.path`\n *\n * Attribute Value Type: `string` {@link URL_PATH_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"/foo\"\n */\nexport const URL_PATH = 'url.path';\n\n/**\n * Type for {@link URL_PATH} url.path\n */\nexport type URL_PATH_TYPE = string;\n\n// Path: model/attributes/url/url__path__parameter__[key].json\n\n/**\n * Decoded parameters extracted from a URL path. Usually added by client-side routing frameworks like vue-router. `url.path.parameter.<key>`\n *\n * Attribute Value Type: `string` {@link URL_PATH_PARAMETER_KEY_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Has Dynamic Suffix: true\n *\n * Aliases: {@link PARAMS_KEY} `params.<key>`\n *\n * @example \"url.path.parameter.id='123'\"\n */\nexport const URL_PATH_PARAMETER_KEY = 'url.path.parameter.<key>';\n\n/**\n * Base key for {@link URL_PATH_PARAMETER_KEY}. Use with a dynamic suffix, e.g. `${URL_PATH_PARAMETER_KEY_BASE}.${key}`.\n */\nexport const URL_PATH_PARAMETER_KEY_BASE = 'url.path.parameter';\n\n/**\n * Type for {@link URL_PATH_PARAMETER_KEY} url.path.parameter.<key>\n */\nexport type URL_PATH_PARAMETER_KEY_TYPE = string;\n\n// Path: model/attributes/url/url__port.json\n\n/**\n * Server port number. `url.port`\n *\n * Attribute Value Type: `number` {@link URL_PORT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example 1337\n */\nexport const URL_PORT = 'url.port';\n\n/**\n * Type for {@link URL_PORT} url.port\n */\nexport type URL_PORT_TYPE = number;\n\n// Path: model/attributes/url/url__query.json\n\n/**\n * The query string present in the URL. Note that this does not contain the leading ? character, while the `http.query` attribute does. `url.query`\n *\n * Attribute Value Type: `string` {@link URL_QUERY_TYPE}\n *\n * Apply Scrubbing: auto - Query string values can contain sensitive information. Clients should attempt to scrub parameters that might contain sensitive information.\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"foo=bar&bar=baz\"\n */\nexport const URL_QUERY = 'url.query';\n\n/**\n * Type for {@link URL_QUERY} url.query\n */\nexport type URL_QUERY_TYPE = string;\n\n// Path: model/attributes/url/url__same_origin.json\n\n/**\n * Indicates that a URL has the same origin as the current page's origin in the browser. `url.same_origin`\n *\n * Attribute Value Type: `boolean` {@link URL_SAME_ORIGIN_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link HTTP_REQUEST_SAME_ORIGIN} `http.request.same_origin`\n *\n * @deprecated Use {@link HTTP_REQUEST_SAME_ORIGIN} (http.request.same_origin) instead - This attribute is being deprecated in favor of http.request.same_origin.\n * @example true\n */\nexport const URL_SAME_ORIGIN = 'url.same_origin';\n\n/**\n * Type for {@link URL_SAME_ORIGIN} url.same_origin\n */\nexport type URL_SAME_ORIGIN_TYPE = boolean;\n\n// Path: model/attributes/url/url__scheme.json\n\n/**\n * The URI scheme component identifying the used protocol. `url.scheme`\n *\n * Attribute Value Type: `string` {@link URL_SCHEME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link HTTP_SCHEME} `http.scheme`\n *\n * @example \"https\"\n */\nexport const URL_SCHEME = 'url.scheme';\n\n/**\n * Type for {@link URL_SCHEME} url.scheme\n */\nexport type URL_SCHEME_TYPE = string;\n\n// Path: model/attributes/url/url__template.json\n\n/**\n * The low-cardinality template of an absolute path reference. `url.template`\n *\n * Attribute Value Type: `string` {@link URL_TEMPLATE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link HTTP_ROUTE} `http.route`\n *\n * @example \"/users/:id\"\n */\nexport const URL_TEMPLATE = 'url.template';\n\n/**\n * Type for {@link URL_TEMPLATE} url.template\n */\nexport type URL_TEMPLATE_TYPE = string;\n\n// Path: model/attributes/user_agent/user_agent__original.json\n\n/**\n * Value of the HTTP User-Agent header sent by the client. `user_agent.original`\n *\n * Attribute Value Type: `string` {@link USER_AGENT_ORIGINAL_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link HTTP_USER_AGENT} `http.user_agent`\n *\n * @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\"\n */\nexport const USER_AGENT_ORIGINAL = 'user_agent.original';\n\n/**\n * Type for {@link USER_AGENT_ORIGINAL} user_agent.original\n */\nexport type USER_AGENT_ORIGINAL_TYPE = string;\n\n// Path: model/attributes/user/user__email.json\n\n/**\n * User email address. `user.email`\n *\n * Attribute Value Type: `string` {@link USER_EMAIL_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link SENTRY_USER_EMAIL} `sentry.user.email`\n *\n * @example \"test@example.com\"\n */\nexport const USER_EMAIL = 'user.email';\n\n/**\n * Type for {@link USER_EMAIL} user.email\n */\nexport type USER_EMAIL_TYPE = string;\n\n// Path: model/attributes/user/user__full_name.json\n\n/**\n * User's full name. `user.full_name`\n *\n * Attribute Value Type: `string` {@link USER_FULL_NAME_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"John Smith\"\n */\nexport const USER_FULL_NAME = 'user.full_name';\n\n/**\n * Type for {@link USER_FULL_NAME} user.full_name\n */\nexport type USER_FULL_NAME_TYPE = string;\n\n// Path: model/attributes/user/user__geo__city.json\n\n/**\n * Human readable city name. `user.geo.city`\n *\n * Attribute Value Type: `string` {@link USER_GEO_CITY_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SENTRY_USER_GEO_CITY} `sentry.user.geo.city`\n *\n * @example \"Toronto\"\n */\nexport const USER_GEO_CITY = 'user.geo.city';\n\n/**\n * Type for {@link USER_GEO_CITY} user.geo.city\n */\nexport type USER_GEO_CITY_TYPE = string;\n\n// Path: model/attributes/user/user__geo__country_code.json\n\n/**\n * Two-letter country code (ISO 3166-1 alpha-2). `user.geo.country_code`\n *\n * Attribute Value Type: `string` {@link USER_GEO_COUNTRY_CODE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SENTRY_USER_GEO_COUNTRY_CODE} `sentry.user.geo.country_code`\n *\n * @example \"CA\"\n */\nexport const USER_GEO_COUNTRY_CODE = 'user.geo.country_code';\n\n/**\n * Type for {@link USER_GEO_COUNTRY_CODE} user.geo.country_code\n */\nexport type USER_GEO_COUNTRY_CODE_TYPE = string;\n\n// Path: model/attributes/user/user__geo__region.json\n\n/**\n * Human readable region name or code. `user.geo.region`\n *\n * Attribute Value Type: `string` {@link USER_GEO_REGION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SENTRY_USER_GEO_REGION} `sentry.user.geo.region`\n *\n * @example \"Canada\"\n */\nexport const USER_GEO_REGION = 'user.geo.region';\n\n/**\n * Type for {@link USER_GEO_REGION} user.geo.region\n */\nexport type USER_GEO_REGION_TYPE = string;\n\n// Path: model/attributes/user/user__geo__subdivision.json\n\n/**\n * Human readable subdivision name. `user.geo.subdivision`\n *\n * Attribute Value Type: `string` {@link USER_GEO_SUBDIVISION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SENTRY_USER_GEO_SUBDIVISION} `sentry.user.geo.subdivision`\n *\n * @example \"Ontario\"\n */\nexport const USER_GEO_SUBDIVISION = 'user.geo.subdivision';\n\n/**\n * Type for {@link USER_GEO_SUBDIVISION} user.geo.subdivision\n */\nexport type USER_GEO_SUBDIVISION_TYPE = string;\n\n// Path: model/attributes/user/user__hash.json\n\n/**\n * Unique user hash to correlate information for a user in anonymized form. `user.hash`\n *\n * Attribute Value Type: `string` {@link USER_HASH_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example \"8ae4c2993e0f4f3b8b2d1b1f3b5e8f4d\"\n */\nexport const USER_HASH = 'user.hash';\n\n/**\n * Type for {@link USER_HASH} user.hash\n */\nexport type USER_HASH_TYPE = string;\n\n// Path: model/attributes/user/user__id.json\n\n/**\n * Unique identifier of the user. `user.id`\n *\n * Attribute Value Type: `string` {@link USER_ID_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link SENTRY_USER_ID} `sentry.user.id`\n *\n * @example \"S-1-5-21-202424912787-2692429404-2351956786-1000\"\n */\nexport const USER_ID = 'user.id';\n\n/**\n * Type for {@link USER_ID} user.id\n */\nexport type USER_ID_TYPE = string;\n\n// Path: model/attributes/user/user__ip_address.json\n\n/**\n * The IP address of the user. `user.ip_address`\n *\n * Attribute Value Type: `string` {@link USER_IP_ADDRESS_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * Aliases: {@link SENTRY_USER_IP} `sentry.user.ip`\n *\n * @example \"192.168.1.1\"\n */\nexport const USER_IP_ADDRESS = 'user.ip_address';\n\n/**\n * Type for {@link USER_IP_ADDRESS} user.ip_address\n */\nexport type USER_IP_ADDRESS_TYPE = string;\n\n// Path: model/attributes/user/user__name.json\n\n/**\n * Short name or login/username of the user. `user.name`\n *\n * Attribute Value Type: `string` {@link USER_NAME_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * Aliases: {@link SENTRY_USER_USERNAME} `sentry.user.username`\n *\n * @example \"j.smith\"\n */\nexport const USER_NAME = 'user.name';\n\n/**\n * Type for {@link USER_NAME} user.name\n */\nexport type USER_NAME_TYPE = string;\n\n// Path: model/attributes/user/user__roles.json\n\n/**\n * Array of user roles at the time of the event. `user.roles`\n *\n * Attribute Value Type: `Array<string>` {@link USER_ROLES_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: Yes\n * Visibility: public\n *\n * @example [\"admin\",\"editor\"]\n */\nexport const USER_ROLES = 'user.roles';\n\n/**\n * Type for {@link USER_ROLES} user.roles\n */\nexport type USER_ROLES_TYPE = Array<string>;\n\n// Path: model/attributes/vercel/vercel__branch.json\n\n/**\n * Git branch name for Vercel project `vercel.branch`\n *\n * Attribute Value Type: `string` {@link VERCEL_BRANCH_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"main\"\n */\nexport const VERCEL_BRANCH = 'vercel.branch';\n\n/**\n * Type for {@link VERCEL_BRANCH} vercel.branch\n */\nexport type VERCEL_BRANCH_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__build_id.json\n\n/**\n * Identifier for the Vercel build (only present on build logs) `vercel.build_id`\n *\n * Attribute Value Type: `string` {@link VERCEL_BUILD_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"bld_cotnkcr76\"\n */\nexport const VERCEL_BUILD_ID = 'vercel.build_id';\n\n/**\n * Type for {@link VERCEL_BUILD_ID} vercel.build_id\n */\nexport type VERCEL_BUILD_ID_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__deployment_id.json\n\n/**\n * Identifier for the Vercel deployment `vercel.deployment_id`\n *\n * Attribute Value Type: `string` {@link VERCEL_DEPLOYMENT_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"dpl_233NRGRjVZX1caZrXWtz5g1TAksD\"\n */\nexport const VERCEL_DEPLOYMENT_ID = 'vercel.deployment_id';\n\n/**\n * Type for {@link VERCEL_DEPLOYMENT_ID} vercel.deployment_id\n */\nexport type VERCEL_DEPLOYMENT_ID_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__destination.json\n\n/**\n * Origin of the external content in Vercel (only on external logs) `vercel.destination`\n *\n * Attribute Value Type: `string` {@link VERCEL_DESTINATION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"https://vitals.vercel-insights.com/v1\"\n */\nexport const VERCEL_DESTINATION = 'vercel.destination';\n\n/**\n * Type for {@link VERCEL_DESTINATION} vercel.destination\n */\nexport type VERCEL_DESTINATION_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__edge_type.json\n\n/**\n * Type of edge runtime in Vercel `vercel.edge_type`\n *\n * Attribute Value Type: `string` {@link VERCEL_EDGE_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"edge-function\"\n */\nexport const VERCEL_EDGE_TYPE = 'vercel.edge_type';\n\n/**\n * Type for {@link VERCEL_EDGE_TYPE} vercel.edge_type\n */\nexport type VERCEL_EDGE_TYPE_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__entrypoint.json\n\n/**\n * Entrypoint for the request in Vercel `vercel.entrypoint`\n *\n * Attribute Value Type: `string` {@link VERCEL_ENTRYPOINT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"api/index.js\"\n */\nexport const VERCEL_ENTRYPOINT = 'vercel.entrypoint';\n\n/**\n * Type for {@link VERCEL_ENTRYPOINT} vercel.entrypoint\n */\nexport type VERCEL_ENTRYPOINT_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__execution_region.json\n\n/**\n * Region where the request is executed `vercel.execution_region`\n *\n * Attribute Value Type: `string` {@link VERCEL_EXECUTION_REGION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"sfo1\"\n */\nexport const VERCEL_EXECUTION_REGION = 'vercel.execution_region';\n\n/**\n * Type for {@link VERCEL_EXECUTION_REGION} vercel.execution_region\n */\nexport type VERCEL_EXECUTION_REGION_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__id.json\n\n/**\n * Unique identifier for the log entry in Vercel `vercel.id`\n *\n * Attribute Value Type: `string` {@link VERCEL_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"1573817187330377061717300000\"\n */\nexport const VERCEL_ID = 'vercel.id';\n\n/**\n * Type for {@link VERCEL_ID} vercel.id\n */\nexport type VERCEL_ID_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__ja3_digest.json\n\n/**\n * JA3 fingerprint digest of Vercel request `vercel.ja3_digest`\n *\n * Attribute Value Type: `string` {@link VERCEL_JA3_DIGEST_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"769,47-53-5-10-49161-49162-49171-49172-50-56-19-4,0-10-11,23-24-25,0\"\n */\nexport const VERCEL_JA3_DIGEST = 'vercel.ja3_digest';\n\n/**\n * Type for {@link VERCEL_JA3_DIGEST} vercel.ja3_digest\n */\nexport type VERCEL_JA3_DIGEST_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__ja4_digest.json\n\n/**\n * JA4 fingerprint digest `vercel.ja4_digest`\n *\n * Attribute Value Type: `string` {@link VERCEL_JA4_DIGEST_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"t13d1516h2_8daaf6152771_02713d6af862\"\n */\nexport const VERCEL_JA4_DIGEST = 'vercel.ja4_digest';\n\n/**\n * Type for {@link VERCEL_JA4_DIGEST} vercel.ja4_digest\n */\nexport type VERCEL_JA4_DIGEST_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__log_type.json\n\n/**\n * Vercel log output type `vercel.log_type`\n *\n * Attribute Value Type: `string` {@link VERCEL_LOG_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"stdout\"\n */\nexport const VERCEL_LOG_TYPE = 'vercel.log_type';\n\n/**\n * Type for {@link VERCEL_LOG_TYPE} vercel.log_type\n */\nexport type VERCEL_LOG_TYPE_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__path.json\n\n/**\n * Function or dynamic path of the request in Vercel. `vercel.path`\n *\n * Attribute Value Type: `string` {@link VERCEL_PATH_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"/dynamic/[route].json\"\n */\nexport const VERCEL_PATH = 'vercel.path';\n\n/**\n * Type for {@link VERCEL_PATH} vercel.path\n */\nexport type VERCEL_PATH_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__project_id.json\n\n/**\n * Identifier for the Vercel project `vercel.project_id`\n *\n * Attribute Value Type: `string` {@link VERCEL_PROJECT_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"gdufoJxB6b9b1fEqr1jUtFkyavUU\"\n */\nexport const VERCEL_PROJECT_ID = 'vercel.project_id';\n\n/**\n * Type for {@link VERCEL_PROJECT_ID} vercel.project_id\n */\nexport type VERCEL_PROJECT_ID_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__project_name.json\n\n/**\n * Name of the Vercel project `vercel.project_name`\n *\n * Attribute Value Type: `string` {@link VERCEL_PROJECT_NAME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"my-app\"\n */\nexport const VERCEL_PROJECT_NAME = 'vercel.project_name';\n\n/**\n * Type for {@link VERCEL_PROJECT_NAME} vercel.project_name\n */\nexport type VERCEL_PROJECT_NAME_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__proxy__cache_id.json\n\n/**\n * Original request ID when request is served from cache `vercel.proxy.cache_id`\n *\n * Attribute Value Type: `string` {@link VERCEL_PROXY_CACHE_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"pdx1::v8g4b-1744143786684-93dafbc0f70d\"\n */\nexport const VERCEL_PROXY_CACHE_ID = 'vercel.proxy.cache_id';\n\n/**\n * Type for {@link VERCEL_PROXY_CACHE_ID} vercel.proxy.cache_id\n */\nexport type VERCEL_PROXY_CACHE_ID_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__proxy__client_ip.json\n\n/**\n * Client IP address `vercel.proxy.client_ip`\n *\n * Attribute Value Type: `string` {@link VERCEL_PROXY_CLIENT_IP_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"120.75.16.101\"\n */\nexport const VERCEL_PROXY_CLIENT_IP = 'vercel.proxy.client_ip';\n\n/**\n * Type for {@link VERCEL_PROXY_CLIENT_IP} vercel.proxy.client_ip\n */\nexport type VERCEL_PROXY_CLIENT_IP_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__proxy__host.json\n\n/**\n * Hostname of the request `vercel.proxy.host`\n *\n * Attribute Value Type: `string` {@link VERCEL_PROXY_HOST_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"test.vercel.app\"\n */\nexport const VERCEL_PROXY_HOST = 'vercel.proxy.host';\n\n/**\n * Type for {@link VERCEL_PROXY_HOST} vercel.proxy.host\n */\nexport type VERCEL_PROXY_HOST_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__proxy__lambda_region.json\n\n/**\n * Region where lambda function executed `vercel.proxy.lambda_region`\n *\n * Attribute Value Type: `string` {@link VERCEL_PROXY_LAMBDA_REGION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"sfo1\"\n */\nexport const VERCEL_PROXY_LAMBDA_REGION = 'vercel.proxy.lambda_region';\n\n/**\n * Type for {@link VERCEL_PROXY_LAMBDA_REGION} vercel.proxy.lambda_region\n */\nexport type VERCEL_PROXY_LAMBDA_REGION_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__proxy__method.json\n\n/**\n * HTTP method of the request `vercel.proxy.method`\n *\n * Attribute Value Type: `string` {@link VERCEL_PROXY_METHOD_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"GET\"\n */\nexport const VERCEL_PROXY_METHOD = 'vercel.proxy.method';\n\n/**\n * Type for {@link VERCEL_PROXY_METHOD} vercel.proxy.method\n */\nexport type VERCEL_PROXY_METHOD_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__proxy__path.json\n\n/**\n * Request path with query parameters `vercel.proxy.path`\n *\n * Attribute Value Type: `string` {@link VERCEL_PROXY_PATH_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"/dynamic/some-value.json?route=some-value\"\n */\nexport const VERCEL_PROXY_PATH = 'vercel.proxy.path';\n\n/**\n * Type for {@link VERCEL_PROXY_PATH} vercel.proxy.path\n */\nexport type VERCEL_PROXY_PATH_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__proxy__path_type.json\n\n/**\n * How the request was served based on its path and project configuration `vercel.proxy.path_type`\n *\n * Attribute Value Type: `string` {@link VERCEL_PROXY_PATH_TYPE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"func\"\n */\nexport const VERCEL_PROXY_PATH_TYPE = 'vercel.proxy.path_type';\n\n/**\n * Type for {@link VERCEL_PROXY_PATH_TYPE} vercel.proxy.path_type\n */\nexport type VERCEL_PROXY_PATH_TYPE_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__proxy__path_type_variant.json\n\n/**\n * Variant of the path type `vercel.proxy.path_type_variant`\n *\n * Attribute Value Type: `string` {@link VERCEL_PROXY_PATH_TYPE_VARIANT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"api\"\n */\nexport const VERCEL_PROXY_PATH_TYPE_VARIANT = 'vercel.proxy.path_type_variant';\n\n/**\n * Type for {@link VERCEL_PROXY_PATH_TYPE_VARIANT} vercel.proxy.path_type_variant\n */\nexport type VERCEL_PROXY_PATH_TYPE_VARIANT_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__proxy__referer.json\n\n/**\n * Referer of the request `vercel.proxy.referer`\n *\n * Attribute Value Type: `string` {@link VERCEL_PROXY_REFERER_TYPE}\n *\n * Apply Scrubbing: auto\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"*.vercel.app\"\n */\nexport const VERCEL_PROXY_REFERER = 'vercel.proxy.referer';\n\n/**\n * Type for {@link VERCEL_PROXY_REFERER} vercel.proxy.referer\n */\nexport type VERCEL_PROXY_REFERER_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__proxy__region.json\n\n/**\n * Region where the request is processed `vercel.proxy.region`\n *\n * Attribute Value Type: `string` {@link VERCEL_PROXY_REGION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"sfo1\"\n */\nexport const VERCEL_PROXY_REGION = 'vercel.proxy.region';\n\n/**\n * Type for {@link VERCEL_PROXY_REGION} vercel.proxy.region\n */\nexport type VERCEL_PROXY_REGION_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__proxy__response_byte_size.json\n\n/**\n * Size of the response in bytes `vercel.proxy.response_byte_size`\n *\n * Attribute Value Type: `number` {@link VERCEL_PROXY_RESPONSE_BYTE_SIZE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1024\n */\nexport const VERCEL_PROXY_RESPONSE_BYTE_SIZE = 'vercel.proxy.response_byte_size';\n\n/**\n * Type for {@link VERCEL_PROXY_RESPONSE_BYTE_SIZE} vercel.proxy.response_byte_size\n */\nexport type VERCEL_PROXY_RESPONSE_BYTE_SIZE_TYPE = number;\n\n// Path: model/attributes/vercel/vercel__proxy__scheme.json\n\n/**\n * Protocol of the request `vercel.proxy.scheme`\n *\n * Attribute Value Type: `string` {@link VERCEL_PROXY_SCHEME_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"https\"\n */\nexport const VERCEL_PROXY_SCHEME = 'vercel.proxy.scheme';\n\n/**\n * Type for {@link VERCEL_PROXY_SCHEME} vercel.proxy.scheme\n */\nexport type VERCEL_PROXY_SCHEME_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__proxy__status_code.json\n\n/**\n * HTTP status code of the proxy request `vercel.proxy.status_code`\n *\n * Attribute Value Type: `number` {@link VERCEL_PROXY_STATUS_CODE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 200\n */\nexport const VERCEL_PROXY_STATUS_CODE = 'vercel.proxy.status_code';\n\n/**\n * Type for {@link VERCEL_PROXY_STATUS_CODE} vercel.proxy.status_code\n */\nexport type VERCEL_PROXY_STATUS_CODE_TYPE = number;\n\n// Path: model/attributes/vercel/vercel__proxy__timestamp.json\n\n/**\n * Unix timestamp when the proxy request was made `vercel.proxy.timestamp`\n *\n * Attribute Value Type: `number` {@link VERCEL_PROXY_TIMESTAMP_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 1573817250172\n */\nexport const VERCEL_PROXY_TIMESTAMP = 'vercel.proxy.timestamp';\n\n/**\n * Type for {@link VERCEL_PROXY_TIMESTAMP} vercel.proxy.timestamp\n */\nexport type VERCEL_PROXY_TIMESTAMP_TYPE = number;\n\n// Path: model/attributes/vercel/vercel__proxy__user_agent.json\n\n/**\n * User agent strings of the request `vercel.proxy.user_agent`\n *\n * Attribute Value Type: `Array<string>` {@link VERCEL_PROXY_USER_AGENT_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example [\"Mozilla/5.0...\"]\n */\nexport const VERCEL_PROXY_USER_AGENT = 'vercel.proxy.user_agent';\n\n/**\n * Type for {@link VERCEL_PROXY_USER_AGENT} vercel.proxy.user_agent\n */\nexport type VERCEL_PROXY_USER_AGENT_TYPE = Array<string>;\n\n// Path: model/attributes/vercel/vercel__proxy__vercel_cache.json\n\n/**\n * Cache status sent to the browser `vercel.proxy.vercel_cache`\n *\n * Attribute Value Type: `string` {@link VERCEL_PROXY_VERCEL_CACHE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"REVALIDATED\"\n */\nexport const VERCEL_PROXY_VERCEL_CACHE = 'vercel.proxy.vercel_cache';\n\n/**\n * Type for {@link VERCEL_PROXY_VERCEL_CACHE} vercel.proxy.vercel_cache\n */\nexport type VERCEL_PROXY_VERCEL_CACHE_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__proxy__vercel_id.json\n\n/**\n * Vercel-specific identifier `vercel.proxy.vercel_id`\n *\n * Attribute Value Type: `string` {@link VERCEL_PROXY_VERCEL_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"sfo1::abc123\"\n */\nexport const VERCEL_PROXY_VERCEL_ID = 'vercel.proxy.vercel_id';\n\n/**\n * Type for {@link VERCEL_PROXY_VERCEL_ID} vercel.proxy.vercel_id\n */\nexport type VERCEL_PROXY_VERCEL_ID_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__proxy__waf_action.json\n\n/**\n * Action taken by firewall rules `vercel.proxy.waf_action`\n *\n * Attribute Value Type: `string` {@link VERCEL_PROXY_WAF_ACTION_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"deny\"\n */\nexport const VERCEL_PROXY_WAF_ACTION = 'vercel.proxy.waf_action';\n\n/**\n * Type for {@link VERCEL_PROXY_WAF_ACTION} vercel.proxy.waf_action\n */\nexport type VERCEL_PROXY_WAF_ACTION_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__proxy__waf_rule_id.json\n\n/**\n * ID of the firewall rule that matched `vercel.proxy.waf_rule_id`\n *\n * Attribute Value Type: `string` {@link VERCEL_PROXY_WAF_RULE_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"rule_gAHz8jtSB1Gy\"\n */\nexport const VERCEL_PROXY_WAF_RULE_ID = 'vercel.proxy.waf_rule_id';\n\n/**\n * Type for {@link VERCEL_PROXY_WAF_RULE_ID} vercel.proxy.waf_rule_id\n */\nexport type VERCEL_PROXY_WAF_RULE_ID_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__request_id.json\n\n/**\n * Identifier of the Vercel request `vercel.request_id`\n *\n * Attribute Value Type: `string` {@link VERCEL_REQUEST_ID_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"643af4e3-975a-4cc7-9e7a-1eda11539d90\"\n */\nexport const VERCEL_REQUEST_ID = 'vercel.request_id';\n\n/**\n * Type for {@link VERCEL_REQUEST_ID} vercel.request_id\n */\nexport type VERCEL_REQUEST_ID_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__source.json\n\n/**\n * Origin of the Vercel log (build, edge, lambda, static, external, or firewall) `vercel.source`\n *\n * Attribute Value Type: `string` {@link VERCEL_SOURCE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example \"build\"\n */\nexport const VERCEL_SOURCE = 'vercel.source';\n\n/**\n * Type for {@link VERCEL_SOURCE} vercel.source\n */\nexport type VERCEL_SOURCE_TYPE = string;\n\n// Path: model/attributes/vercel/vercel__status_code.json\n\n/**\n * HTTP status code of the request (-1 means no response returned and the lambda crashed) `vercel.status_code`\n *\n * Attribute Value Type: `number` {@link VERCEL_STATUS_CODE_TYPE}\n *\n * Apply Scrubbing: manual\n *\n * Attribute defined in OTEL: No\n * Visibility: public\n *\n * @example 200\n */\nexport const VERCEL_STATUS_CODE = 'vercel.status_code';\n\n/**\n * Type for {@link VERCEL_STATUS_CODE} vercel.status_code\n */\nexport type VERCEL_STATUS_CODE_TYPE = number;\n\nexport type AttributeType =\n  | 'string'\n  | 'boolean'\n  | 'integer'\n  | 'double'\n  | 'string[]'\n  | 'boolean[]'\n  | 'integer[]'\n  | 'double[]'\n  | 'any';\n\nexport type ApplyScrubbing = 'auto' | 'manual' | 'never';\n\nexport type AttributeVisibility = 'public' | 'internal';\n\nexport interface ApplyScrubbingInfo {\n  /** How PII scrubbing should be applied to the attribute value */\n  key: ApplyScrubbing;\n  /** Reason why this scrubbing mode applies */\n  reason?: string;\n}\n\nexport interface DeprecationInfo {\n  /** What this attribute was replaced with */\n  replacement?: string;\n  /** Reason for deprecation */\n  reason?: string;\n}\n\nexport interface ChangelogEntry {\n  /** The sentry-conventions release version */\n  version: string;\n  /** GitHub PR numbers */\n  prs?: number[];\n  /** Optional description of what changed */\n  description?: string;\n}\n\nexport interface AttributeMetadata {\n  /** A description of the attribute */\n  brief: string;\n  /** The type of the attribute value */\n  type: AttributeType;\n  /** How PII scrubbing should be applied to the attribute value */\n  applyScrubbing: ApplyScrubbingInfo;\n  /** Whether the attribute is defined in OpenTelemetry Semantic Conventions */\n  isInOtel: boolean;\n  /** Whether the attribute is public or internal to Sentry */\n  visibility: AttributeVisibility;\n  /** If an attribute has a dynamic suffix */\n  hasDynamicSuffix?: boolean;\n  /** An example value of the attribute */\n  example?: AttributeValue;\n  /** If an attribute was deprecated, and what it was replaced with */\n  deprecation?: DeprecationInfo;\n  /** If there are attributes that alias to this attribute */\n  aliases?: AttributeName[];\n  /** Changelog entries tracking how this attribute has changed across versions */\n  changelog?: ChangelogEntry[];\n  /** A list of freeform notes providing additional context about how this attribute behaves, common pitfalls, or query-time nuances */\n  additionalContext?: string[];\n}\n\nexport const ATTRIBUTE_TYPE: Record<string, AttributeType> = {\n  'ai.citations': 'string[]',\n  'ai.completion_tokens.used': 'integer',\n  'ai.documents': 'string[]',\n  'ai.finish_reason': 'string',\n  'ai.frequency_penalty': 'double',\n  'ai.function_call': 'string',\n  'ai.generation_id': 'string',\n  'ai.input_messages': 'string',\n  'ai.is_search_required': 'boolean',\n  'ai.metadata': 'string',\n  'ai.model_id': 'string',\n  'ai.model.provider': 'string',\n  'ai.pipeline.name': 'string',\n  'ai.preamble': 'string',\n  'ai.presence_penalty': 'double',\n  'ai.prompt_tokens.used': 'integer',\n  'ai.raw_prompting': 'boolean',\n  'ai.responses': 'string[]',\n  'ai.response_format': 'string',\n  'ai.search_queries': 'string[]',\n  'ai.search_results': 'string[]',\n  'ai.seed': 'string',\n  'ai.streaming': 'boolean',\n  'ai.tags': 'string',\n  'ai.temperature': 'double',\n  'ai.texts': 'string[]',\n  'ai.tools': 'string[]',\n  'ai.tool_calls': 'string[]',\n  'ai.top_k': 'integer',\n  'ai.top_p': 'double',\n  'ai.total_cost': 'double',\n  'ai.total_tokens.used': 'integer',\n  'ai.warnings': 'string[]',\n  'angular.version': 'string',\n  'app.app_build': 'string',\n  'app.app_identifier': 'string',\n  'app.app_name': 'string',\n  'app.app_start_time': 'string',\n  'app.app_version': 'string',\n  'app.build': 'string',\n  'app.identifier': 'string',\n  'app.in_foreground': 'boolean',\n  'app.name': 'string',\n  app_start_cold: 'double',\n  'app.start_time': 'string',\n  app_start_type: 'string',\n  app_start_warm: 'double',\n  'app.version': 'string',\n  'app.vitals.frames.delay.value': 'integer',\n  'app.vitals.frames.frozen.count': 'integer',\n  'app.vitals.frames.slow.count': 'integer',\n  'app.vitals.frames.total.count': 'integer',\n  'app.vitals.start.cold.value': 'double',\n  'app.vitals.start.prewarmed': 'boolean',\n  'app.vitals.start.reason': 'string',\n  'app.vitals.start.screen': 'string',\n  'app.vitals.start.type': 'string',\n  'app.vitals.start.warm.value': 'double',\n  'app.vitals.ttfd.value': 'double',\n  'app.vitals.ttid.value': 'double',\n  'art.gc.blocking_count': 'integer',\n  'art.gc.blocking_time': 'double',\n  'art.gc.pre_oome_count': 'integer',\n  'art.gc.total_count': 'integer',\n  'art.gc.total_time': 'double',\n  'art.gc.waiting_time': 'double',\n  'art.memory.free': 'integer',\n  'art.memory.free_until_gc': 'integer',\n  'art.memory.free_until_oome': 'integer',\n  'art.memory.max': 'integer',\n  'art.memory.total': 'integer',\n  'aws.cloudwatch.logs.log_group': 'string',\n  'aws.cloudwatch.logs.log_stream': 'string',\n  'aws.cloudwatch.logs.url': 'string',\n  'aws.dynamodb.attribute_definitions': 'string[]',\n  'aws.dynamodb.consistent_read': 'boolean',\n  'aws.dynamodb.consumed_capacity': 'string[]',\n  'aws.dynamodb.count': 'integer',\n  'aws.dynamodb.exclusive_start_table': 'string',\n  'aws.dynamodb.global_secondary_indexes': 'string[]',\n  'aws.dynamodb.global_secondary_index_updates': 'string[]',\n  'aws.dynamodb.index_name': 'string',\n  'aws.dynamodb.item_collection_metrics': 'string',\n  'aws.dynamodb.limit': 'integer',\n  'aws.dynamodb.local_secondary_indexes': 'string[]',\n  'aws.dynamodb.projection': 'string',\n  'aws.dynamodb.provisioned_read_capacity': 'double',\n  'aws.dynamodb.provisioned_write_capacity': 'double',\n  'aws.dynamodb.scanned_count': 'integer',\n  'aws.dynamodb.scan_forward': 'boolean',\n  'aws.dynamodb.segment': 'integer',\n  'aws.dynamodb.select': 'string',\n  'aws.dynamodb.table_count': 'integer',\n  'aws.dynamodb.table_names': 'string[]',\n  'aws.dynamodb.total_segments': 'integer',\n  'aws.extended_request_id': 'string',\n  'aws.kinesis.stream_name': 'string',\n  'aws.kinesis.stream.name': 'string',\n  'aws.lambda.aws_request_id': 'string',\n  'aws.lambda.execution_duration_in_millis': 'double',\n  'aws.lambda.function_name': 'string',\n  'aws.lambda.function_version': 'string',\n  'aws.lambda.invoked_arn': 'string',\n  'aws.lambda.invoked_function_arn': 'string',\n  'aws.lambda.remaining_time_in_millis': 'double',\n  'aws.log.group.names': 'string[]',\n  'aws.log.stream.names': 'string[]',\n  'aws.request.extended_id': 'string',\n  'aws.request_id': 'string',\n  'aws.request.id': 'string',\n  'aws.s3.bucket': 'string',\n  'aws.secretsmanager.secret.arn': 'string',\n  'aws.sns.topic.arn': 'string',\n  'aws.step_functions.activity.arn': 'string',\n  'aws.step_functions.state_machine.arn': 'string',\n  blocked_main_thread: 'boolean',\n  'browser.name': 'string',\n  'browser.performance.navigation.activation_start': 'double',\n  'browser.performance.time_origin': 'double',\n  'browser.report.type': 'string',\n  'browser.script.invoker': 'string',\n  'browser.script.invoker_type': 'string',\n  'browser.script.source_char_position': 'integer',\n  'browser.version': 'string',\n  'browser.web_vital.cls.report_event': 'string',\n  'browser.web_vital.cls.source.<key>': 'string',\n  'browser.web_vital.cls.value': 'double',\n  'browser.web_vital.fcp.value': 'double',\n  'browser.web_vital.fp.value': 'double',\n  'browser.web_vital.inp.value': 'double',\n  'browser.web_vital.lcp.element': 'string',\n  'browser.web_vital.lcp.id': 'string',\n  'browser.web_vital.lcp.load_time': 'integer',\n  'browser.web_vital.lcp.render_time': 'integer',\n  'browser.web_vital.lcp.report_event': 'string',\n  'browser.web_vital.lcp.size': 'integer',\n  'browser.web_vital.lcp.url': 'string',\n  'browser.web_vital.lcp.value': 'double',\n  'browser.web_vital.ttfb.request_time': 'double',\n  'browser.web_vital.ttfb.value': 'double',\n  'cache.hit': 'boolean',\n  'cache.item_size': 'integer',\n  'cache.key': 'string[]',\n  'cache.operation': 'string',\n  'cache.ttl': 'integer',\n  'cache.write': 'boolean',\n  channel: 'string',\n  'client.address': 'string',\n  'client.port': 'integer',\n  'cloudflare.d1.duration': 'integer',\n  'cloudflare.d1.query_type': 'string',\n  'cloudflare.d1.rows_read': 'integer',\n  'cloudflare.d1.rows_written': 'integer',\n  'cloudflare.durable_object.query.bindings': 'integer',\n  'cloudflare.durable_object.response.rows_read': 'integer',\n  'cloudflare.durable_object.response.rows_written': 'integer',\n  'cloudflare.r2.bucket': 'string',\n  'cloudflare.r2.operation': 'string',\n  'cloudflare.r2.request.delimiter': 'string',\n  'cloudflare.r2.request.key': 'string',\n  'cloudflare.r2.request.part_number': 'integer',\n  'cloudflare.r2.request.prefix': 'string',\n  'cloudflare.workflow.attempt': 'integer',\n  'cloudflare.workflow.retries.backoff': 'string',\n  'cloudflare.workflow.retries.delay': 'string',\n  'cloudflare.workflow.retries.limit': 'integer',\n  'cloudflare.workflow.timeout': 'string',\n  'cloud.account.id': 'string',\n  'cloud.availability_zone': 'string',\n  'cloud.platform': 'string',\n  'cloud.provider': 'string',\n  'cloud.region': 'string',\n  'cloud.resource_id': 'string',\n  cls: 'double',\n  'cls.source.<key>': 'string',\n  'code.filepath': 'string',\n  'code.file.path': 'string',\n  'code.function': 'string',\n  'code.function.name': 'string',\n  'code.lineno': 'integer',\n  'code.line.number': 'integer',\n  'code.namespace': 'string',\n  connectionType: 'string',\n  'connection.rtt': 'integer',\n  'culture.calendar': 'string',\n  'culture.display_name': 'string',\n  'culture.is_24_hour_format': 'boolean',\n  'culture.locale': 'string',\n  'culture.timezone': 'string',\n  'db.collection.name': 'string',\n  'db.driver.name': 'string',\n  'db.name': 'string',\n  'db.namespace': 'string',\n  'db.operation': 'string',\n  'db.operation.batch.size': 'integer',\n  'db.operation.name': 'string',\n  'db.query.parameter.<key>': 'string',\n  'db.query.summary': 'string',\n  'db.query.text': 'string',\n  'db.redis.connection': 'string',\n  'db.redis.key': 'string',\n  'db.redis.parameters': 'string[]',\n  'db.response.status_code': 'string',\n  'db.sql.bindings': 'string[]',\n  'db.statement': 'string',\n  'db.stored_procedure.name': 'string',\n  'db.system': 'string',\n  'db.system.name': 'string',\n  'db.user': 'string',\n  deviceMemory: 'string',\n  'device.archs': 'string[]',\n  'device.battery_level': 'double',\n  'device.battery_temperature': 'double',\n  'device.boot_time': 'string',\n  'device.brand': 'string',\n  'device.charging': 'boolean',\n  'device.chipset': 'string',\n  'device.class': 'string',\n  'device.connection_type': 'string',\n  'device.cpu_description': 'string',\n  'device.external_free_storage': 'integer',\n  'device.external_storage_size': 'integer',\n  'device.family': 'string',\n  'device.free_memory': 'integer',\n  'device.free_storage': 'integer',\n  'device.id': 'string',\n  'device.locale': 'string',\n  'device.low_memory': 'boolean',\n  'device.low_power_mode': 'boolean',\n  'device.manufacturer': 'string',\n  'device.memory.estimated_capacity': 'integer',\n  'device.memory_size': 'integer',\n  'device.model': 'string',\n  'device.model_id': 'string',\n  'device.name': 'string',\n  'device.online': 'boolean',\n  'device.orientation': 'string',\n  'device.processor_count': 'integer',\n  'device.processor_frequency': 'double',\n  'device.screen_density': 'double',\n  'device.screen_dpi': 'integer',\n  'device.screen_height_pixels': 'integer',\n  'device.screen_width_pixels': 'integer',\n  'device.simulator': 'boolean',\n  'device.storage_size': 'integer',\n  'device.thermal_state': 'string',\n  'device.timezone': 'string',\n  'device.usable_memory': 'integer',\n  dist: 'string',\n  effectiveConnectionType: 'string',\n  environment: 'string',\n  'error.type': 'string',\n  'event.id': 'integer',\n  'event.name': 'string',\n  'exception.escaped': 'boolean',\n  'exception.message': 'string',\n  'exception.stacktrace': 'string',\n  'exception.type': 'string',\n  'faas.coldstart': 'boolean',\n  'faas.cron': 'string',\n  'faas.duration_in_ms': 'integer',\n  'faas.entry_point': 'string',\n  'faas.execution': 'string',\n  'faas.id': 'string',\n  'faas.identity': 'string',\n  'faas.invocation_id': 'string',\n  'faas.invoked_name': 'string',\n  'faas.invoked_provider': 'string',\n  'faas.invoked_region': 'string',\n  'faas.name': 'string',\n  'faas.time': 'string',\n  'faas.trigger': 'string',\n  'faas.version': 'string',\n  fcp: 'double',\n  'flag.evaluation.<key>': 'boolean',\n  fp: 'double',\n  'frames.delay': 'integer',\n  'frames.frozen': 'integer',\n  frames_frozen_rate: 'double',\n  'frames.slow': 'integer',\n  frames_slow_rate: 'double',\n  'frames.total': 'integer',\n  fs_error: 'string',\n  'gcp.function.context.event_id': 'string',\n  'gcp.function.context.event_type': 'string',\n  'gcp.function.context.id': 'string',\n  'gcp.function.context.resource': 'string',\n  'gcp.function.context.source': 'string',\n  'gcp.function.context.specversion': 'string',\n  'gcp.function.context.time': 'string',\n  'gcp.function.context.timestamp': 'string',\n  'gcp.function.context.type': 'string',\n  'gcp.project.id': 'string',\n  'gen_ai.agent.name': 'string',\n  'gen_ai.context.utilization': 'double',\n  'gen_ai.context.window_size': 'integer',\n  'gen_ai.conversation.id': 'string',\n  'gen_ai.cost.cache_creation.input_tokens': 'double',\n  'gen_ai.cost.cache_read.input_tokens': 'double',\n  'gen_ai.cost.input_tokens': 'double',\n  'gen_ai.cost.output_tokens': 'double',\n  'gen_ai.cost.reasoning.output_tokens': 'double',\n  'gen_ai.cost.total_tokens': 'double',\n  'gen_ai.embeddings.input': 'string',\n  'gen_ai.function_id': 'string',\n  'gen_ai.input.messages': 'string',\n  'gen_ai.operation.name': 'string',\n  'gen_ai.operation.type': 'string',\n  'gen_ai.output.messages': 'string',\n  'gen_ai.pipeline.name': 'string',\n  'gen_ai.prompt': 'string',\n  'gen_ai.prompt.name': 'string',\n  'gen_ai.provider.name': 'string',\n  'gen_ai.request.available_tools': 'string',\n  'gen_ai.request.frequency_penalty': 'double',\n  'gen_ai.request.max_tokens': 'integer',\n  'gen_ai.request.messages': 'string',\n  'gen_ai.request.model': 'string',\n  'gen_ai.request.presence_penalty': 'double',\n  'gen_ai.request.reasoning_effort': 'string',\n  'gen_ai.request.seed': 'string',\n  'gen_ai.request.stop_sequences': 'string[]',\n  'gen_ai.request.temperature': 'double',\n  'gen_ai.request.top_k': 'integer',\n  'gen_ai.request.top_p': 'double',\n  'gen_ai.response.finish_reasons': 'string',\n  'gen_ai.response.id': 'string',\n  'gen_ai.response.model': 'string',\n  'gen_ai.response.streaming': 'boolean',\n  'gen_ai.response.text': 'string',\n  'gen_ai.response.time_to_first_chunk': 'double',\n  'gen_ai.response.time_to_first_token': 'double',\n  'gen_ai.response.tokens_per_second': 'double',\n  'gen_ai.response.tool_calls': 'string',\n  'gen_ai.system': 'string',\n  'gen_ai.system_instructions': 'string',\n  'gen_ai.system.message': 'string',\n  'gen_ai.tool.call.arguments': 'string',\n  'gen_ai.tool.call.result': 'string',\n  'gen_ai.tool.definitions': 'string',\n  'gen_ai.tool.description': 'string',\n  'gen_ai.tool.input': 'string',\n  'gen_ai.tool.message': 'string',\n  'gen_ai.tool.name': 'string',\n  'gen_ai.tool.output': 'string',\n  'gen_ai.tool.type': 'string',\n  'gen_ai.usage.cache_creation.input_tokens': 'integer',\n  'gen_ai.usage.cache_read.input_tokens': 'integer',\n  'gen_ai.usage.completion_tokens': 'integer',\n  'gen_ai.usage.input_tokens': 'integer',\n  'gen_ai.usage.input_tokens.cached': 'integer',\n  'gen_ai.usage.input_tokens.cache_write': 'integer',\n  'gen_ai.usage.output_tokens': 'integer',\n  'gen_ai.usage.output_tokens.reasoning': 'integer',\n  'gen_ai.usage.prompt_tokens': 'integer',\n  'gen_ai.usage.reasoning.output_tokens': 'integer',\n  'gen_ai.usage.total_tokens': 'integer',\n  'graphql.document': 'string',\n  'graphql.operation.name': 'string',\n  'graphql.operation.type': 'string',\n  hardwareConcurrency: 'string',\n  'http.client_ip': 'string',\n  'http.decoded_response_content_length': 'integer',\n  'http.flavor': 'string',\n  'http.fragment': 'string',\n  'http.host': 'string',\n  'http.method': 'string',\n  'http.query': 'string',\n  'http.request.body.data': 'string',\n  'http.request.connection_end': 'double',\n  'http.request.connect_start': 'double',\n  'http.request.domain_lookup_end': 'double',\n  'http.request.domain_lookup_start': 'double',\n  'http.request.fetch_start': 'double',\n  'http.request.header.<key>': 'string[]',\n  'http.request.method': 'string',\n  'http.request_method': 'string',\n  'http.request.redirect_end': 'double',\n  'http.request.redirect_start': 'double',\n  'http.request.request_start': 'double',\n  'http.request.resend_count': 'integer',\n  'http.request.response_end': 'double',\n  'http.request.response_start': 'double',\n  'http.request.same_origin': 'boolean',\n  'http.request.secure_connection_start': 'double',\n  'http.request.time_to_first_byte': 'double',\n  'http.request.worker_start': 'double',\n  'http.response.body.size': 'integer',\n  'http.response_content_length': 'integer',\n  'http.response.header.content-length': 'string',\n  'http.response.header.<key>': 'string[]',\n  'http.response.size': 'integer',\n  'http.response.status_code': 'integer',\n  'http.response_transfer_size': 'integer',\n  'http.route': 'string',\n  'http.scheme': 'string',\n  'http.server_name': 'string',\n  'http.server.request.time_in_queue': 'double',\n  'http.status_code': 'integer',\n  'http.target': 'string',\n  'http.url': 'string',\n  'http.user_agent': 'string',\n  id: 'string',\n  inp: 'double',\n  'jsonrpc.protocol.version': 'string',\n  'jsonrpc.request.id': 'string',\n  'jvm.gc.action': 'string',\n  'jvm.gc.name': 'string',\n  'jvm.memory.pool.name': 'string',\n  'jvm.memory.type': 'string',\n  'jvm.thread.daemon': 'boolean',\n  'jvm.thread.state': 'string',\n  'koa.name': 'string',\n  'koa.type': 'string',\n  lcp: 'double',\n  'lcp.element': 'string',\n  'lcp.id': 'string',\n  'lcp.loadTime': 'integer',\n  'lcp.renderTime': 'integer',\n  'lcp.size': 'integer',\n  'lcp.url': 'string',\n  'logger.name': 'string',\n  'mcp.cancelled.reason': 'string',\n  'mcp.cancelled.request_id': 'string',\n  'mcp.client.name': 'string',\n  'mcp.client.title': 'string',\n  'mcp.client.version': 'string',\n  'mcp.lifecycle.phase': 'string',\n  'mcp.logging.data_type': 'string',\n  'mcp.logging.level': 'string',\n  'mcp.logging.logger': 'string',\n  'mcp.logging.message': 'string',\n  'mcp.method.name': 'string',\n  'mcp.progress.current': 'integer',\n  'mcp.progress.message': 'string',\n  'mcp.progress.percentage': 'double',\n  'mcp.progress.token': 'string',\n  'mcp.progress.total': 'integer',\n  'mcp.prompt.name': 'string',\n  'mcp.prompt.result.description': 'string',\n  'mcp.prompt.result.message_content': 'string',\n  'mcp.prompt.result.message_count': 'integer',\n  'mcp.prompt.result.message_role': 'string',\n  'mcp.protocol.ready': 'integer',\n  'mcp.protocol.version': 'string',\n  'mcp.request.argument.<key>': 'string',\n  'mcp.request.argument.name': 'string',\n  'mcp.request.argument.uri': 'string',\n  'mcp.request.id': 'string',\n  'mcp.resource.protocol': 'string',\n  'mcp.resource.uri': 'string',\n  'mcp.server.name': 'string',\n  'mcp.server.title': 'string',\n  'mcp.server.version': 'string',\n  'mcp.session.id': 'string',\n  'mcp.tool.name': 'string',\n  'mcp.tool.result.content': 'string',\n  'mcp.tool.result.content_count': 'integer',\n  'mcp.tool.result.is_error': 'boolean',\n  'mcp.transport': 'string',\n  'mdc.<key>': 'string',\n  'messaging.batch.message_count': 'integer',\n  'messaging.destination': 'string',\n  'messaging.destination.connection': 'string',\n  'messaging.destination.name': 'string',\n  'messaging.message.body.size': 'integer',\n  'messaging.message.conversation_id': 'string',\n  'messaging.message.envelope.size': 'integer',\n  'messaging.message.id': 'string',\n  'messaging.message.receive.latency': 'integer',\n  'messaging.message.retry.count': 'integer',\n  'messaging.operation.name': 'string',\n  'messaging.operation.type': 'string',\n  'messaging.rabbitmq.destination.routing_key': 'string',\n  'messaging.system': 'string',\n  method: 'string',\n  'middleware.name': 'string',\n  'navigation.origin': 'string',\n  'navigation.route.id': 'string',\n  'navigation.type': 'string',\n  'nel.elapsed_time': 'integer',\n  'nel.phase': 'string',\n  'nel.referrer': 'string',\n  'nel.sampling_function': 'double',\n  'nel.type': 'string',\n  'network.connection.effective_type': 'string',\n  'network.connection.rtt': 'integer',\n  'network.connection.type': 'string',\n  'network.local.address': 'string',\n  'network.local.port': 'integer',\n  'network.peer.address': 'string',\n  'network.peer.port': 'integer',\n  'network.protocol.name': 'string',\n  'network.protocol.version': 'string',\n  'network.transport': 'string',\n  'network.type': 'string',\n  'net.host.ip': 'string',\n  'net.host.name': 'string',\n  'net.host.port': 'integer',\n  'net.peer.ip': 'string',\n  'net.peer.name': 'string',\n  'net.peer.port': 'integer',\n  'net.protocol.name': 'string',\n  'net.protocol.version': 'string',\n  'net.sock.family': 'string',\n  'net.sock.host.addr': 'string',\n  'net.sock.host.port': 'integer',\n  'net.sock.peer.addr': 'string',\n  'net.sock.peer.name': 'string',\n  'net.sock.peer.port': 'integer',\n  'net.transport': 'string',\n  'os.build': 'string',\n  'os.build_id': 'string',\n  'os.description': 'string',\n  'os.kernel_version': 'string',\n  'os.name': 'string',\n  'os.raw_description': 'string',\n  'os.rooted': 'boolean',\n  'os.theme': 'string',\n  'os.type': 'string',\n  'os.version': 'string',\n  'otel.kind': 'string',\n  'otel.scope.name': 'string',\n  'otel.scope.version': 'string',\n  'otel.status_code': 'string',\n  'otel.status_description': 'string',\n  'params.<key>': 'string',\n  'performance.activationStart': 'double',\n  'performance.timeOrigin': 'double',\n  previous_route: 'string',\n  'process.command_args': 'string[]',\n  'process.executable.name': 'string',\n  'process.pid': 'integer',\n  'process.runtime.description': 'string',\n  'process.runtime.engine.name': 'string',\n  'process.runtime.engine.version': 'string',\n  'process.runtime.name': 'string',\n  'process.runtime.version': 'string',\n  'query.<key>': 'string',\n  'react.version': 'string',\n  release: 'string',\n  'remix.action_form_data.<key>': 'string',\n  replay_id: 'string',\n  'resource.deployment.environment': 'string',\n  'resource.deployment.environment.name': 'string',\n  'resource.render_blocking_status': 'string',\n  route: 'string',\n  'rpc.grpc.status_code': 'integer',\n  'rpc.method': 'string',\n  'rpc.response.status_code': 'string',\n  'rpc.service': 'string',\n  'rpc.system': 'string',\n  'rpc.system.name': 'string',\n  'runtime.build': 'string',\n  'runtime.name': 'string',\n  'runtime.raw_description': 'string',\n  'runtime.version': 'string',\n  'score.<key>': 'double',\n  'score.ratio.<key>': 'double',\n  'score.total': 'double',\n  'score.weight.<key>': 'double',\n  'sentry.action': 'string',\n  'sentry.browser.name': 'string',\n  'sentry.browser.version': 'string',\n  'sentry.cancellation_reason': 'string',\n  'sentry.category': 'string',\n  'sentry.client_sample_rate': 'double',\n  'sentry.description': 'string',\n  'sentry.dist': 'string',\n  'sentry.domain': 'string',\n  'sentry.dsc.environment': 'string',\n  'sentry.dsc.project_id': 'string',\n  'sentry.dsc.public_key': 'string',\n  'sentry.dsc.release': 'string',\n  'sentry.dsc.sampled': 'boolean',\n  'sentry.dsc.sample_rate': 'string',\n  'sentry.dsc.trace_id': 'string',\n  'sentry.dsc.transaction': 'string',\n  'sentry.environment': 'string',\n  'sentry.exclusive_time': 'double',\n  'sentry.graphql.operation': 'string',\n  'sentry.group': 'string',\n  'sentry.http.prefetch': 'boolean',\n  'sentry.idle_span_finish_reason': 'string',\n  'sentry.is_remote': 'boolean',\n  'sentry.kind': 'string',\n  'sentry.main_thread': 'boolean',\n  'sentry.message.parameter.<key>': 'string',\n  'sentry.message.template': 'string',\n  'sentry.metric.source': 'string',\n  'sentry.mobile': 'boolean',\n  'sentry.module.<key>': 'string',\n  'sentry.nextjs.ssr.function.route': 'string',\n  'sentry.nextjs.ssr.function.type': 'string',\n  'sentry.normalized_db_query': 'string',\n  'sentry.normalized_db_query.hash': 'string',\n  'sentry.normalized_description': 'string',\n  'sentry.observed_timestamp_nanos': 'string',\n  'sentry.op': 'string',\n  'sentry.origin': 'string',\n  'sentry.platform': 'string',\n  'sentry.profiler_id': 'string',\n  'sentry.profile_id': 'string',\n  'sentry.release': 'string',\n  'sentry.replay_id': 'string',\n  'sentry.replay_is_buffering': 'boolean',\n  'sentry.report_event': 'string',\n  'sentry.sdk.integrations': 'string[]',\n  'sentry.sdk.name': 'string',\n  'sentry.sdk.version': 'string',\n  'sentry.segment.id': 'string',\n  'sentry.segment_id': 'string',\n  'sentry.segment.name': 'string',\n  'sentry.server_sample_rate': 'double',\n  'sentry.source': 'string',\n  'sentry.span.source': 'string',\n  'sentry.status': 'string',\n  'sentry.status_code': 'integer',\n  'sentry.status.message': 'string',\n  'sentry.sveltekit.navigation.from': 'string',\n  'sentry.sveltekit.navigation.to': 'string',\n  'sentry.sveltekit.navigation.type': 'string',\n  'sentry.thread.id': 'integer',\n  'sentry.timestamp.sequence': 'integer',\n  'sentry.trace_lifecycle': 'string',\n  'sentry.trace.parent_span_id': 'string',\n  'sentry.trace.status': 'string',\n  'sentry.transaction': 'string',\n  'sentry.user.email': 'string',\n  'sentry.user.geo.city': 'string',\n  'sentry.user.geo.country_code': 'string',\n  'sentry.user.geo.region': 'string',\n  'sentry.user.geo.subdivision': 'string',\n  'sentry.user.id': 'string',\n  'sentry.user.ip': 'string',\n  'sentry.user.username': 'string',\n  'server.address': 'string',\n  server_name: 'string',\n  'server.port': 'integer',\n  'service.name': 'string',\n  'service.version': 'string',\n  'session.id': 'string',\n  stall_percentage: 'double',\n  stall_total_time: 'double',\n  'state.type': 'string',\n  'thread.id': 'integer',\n  'thread.name': 'string',\n  'timber.tag': 'string',\n  time_to_full_display: 'double',\n  time_to_initial_display: 'double',\n  transaction: 'string',\n  'trpc.procedure_path': 'string',\n  'trpc.procedure_type': 'string',\n  ttfb: 'double',\n  'ttfb.requestTime': 'double',\n  type: 'string',\n  'ui.component_name': 'string',\n  'ui.contributes_to_ttfd': 'boolean',\n  'ui.contributes_to_ttid': 'boolean',\n  'ui.element.height': 'integer',\n  'ui.element.id': 'string',\n  'ui.element.identifier': 'string',\n  'ui.element.load_time': 'double',\n  'ui.element.paint_type': 'string',\n  'ui.element.render_time': 'double',\n  'ui.element.type': 'string',\n  'ui.element.url': 'string',\n  'ui.element.width': 'integer',\n  url: 'string',\n  'url.domain': 'string',\n  'url.fragment': 'string',\n  'url.full': 'string',\n  'url.path': 'string',\n  'url.path.parameter.<key>': 'string',\n  'url.port': 'integer',\n  'url.query': 'string',\n  'url.same_origin': 'boolean',\n  'url.scheme': 'string',\n  'url.template': 'string',\n  'user_agent.original': 'string',\n  'user.email': 'string',\n  'user.full_name': 'string',\n  'user.geo.city': 'string',\n  'user.geo.country_code': 'string',\n  'user.geo.region': 'string',\n  'user.geo.subdivision': 'string',\n  'user.hash': 'string',\n  'user.id': 'string',\n  'user.ip_address': 'string',\n  'user.name': 'string',\n  'user.roles': 'string[]',\n  'vercel.branch': 'string',\n  'vercel.build_id': 'string',\n  'vercel.deployment_id': 'string',\n  'vercel.destination': 'string',\n  'vercel.edge_type': 'string',\n  'vercel.entrypoint': 'string',\n  'vercel.execution_region': 'string',\n  'vercel.id': 'string',\n  'vercel.ja3_digest': 'string',\n  'vercel.ja4_digest': 'string',\n  'vercel.log_type': 'string',\n  'vercel.path': 'string',\n  'vercel.project_id': 'string',\n  'vercel.project_name': 'string',\n  'vercel.proxy.cache_id': 'string',\n  'vercel.proxy.client_ip': 'string',\n  'vercel.proxy.host': 'string',\n  'vercel.proxy.lambda_region': 'string',\n  'vercel.proxy.method': 'string',\n  'vercel.proxy.path': 'string',\n  'vercel.proxy.path_type': 'string',\n  'vercel.proxy.path_type_variant': 'string',\n  'vercel.proxy.referer': 'string',\n  'vercel.proxy.region': 'string',\n  'vercel.proxy.response_byte_size': 'integer',\n  'vercel.proxy.scheme': 'string',\n  'vercel.proxy.status_code': 'integer',\n  'vercel.proxy.timestamp': 'integer',\n  'vercel.proxy.user_agent': 'string[]',\n  'vercel.proxy.vercel_cache': 'string',\n  'vercel.proxy.vercel_id': 'string',\n  'vercel.proxy.waf_action': 'string',\n  'vercel.proxy.waf_rule_id': 'string',\n  'vercel.request_id': 'string',\n  'vercel.source': 'string',\n  'vercel.status_code': 'integer',\n};\n\nexport type AttributeName =\n  | typeof AI_CITATIONS\n  | typeof AI_COMPLETION_TOKENS_USED\n  | typeof AI_DOCUMENTS\n  | typeof AI_FINISH_REASON\n  | typeof AI_FREQUENCY_PENALTY\n  | typeof AI_FUNCTION_CALL\n  | typeof AI_GENERATION_ID\n  | typeof AI_INPUT_MESSAGES\n  | typeof AI_IS_SEARCH_REQUIRED\n  | typeof AI_METADATA\n  | typeof AI_MODEL_ID\n  | typeof AI_MODEL_PROVIDER\n  | typeof AI_PIPELINE_NAME\n  | typeof AI_PREAMBLE\n  | typeof AI_PRESENCE_PENALTY\n  | typeof AI_PROMPT_TOKENS_USED\n  | typeof AI_RAW_PROMPTING\n  | typeof AI_RESPONSES\n  | typeof AI_RESPONSE_FORMAT\n  | typeof AI_SEARCH_QUERIES\n  | typeof AI_SEARCH_RESULTS\n  | typeof AI_SEED\n  | typeof AI_STREAMING\n  | typeof AI_TAGS\n  | typeof AI_TEMPERATURE\n  | typeof AI_TEXTS\n  | typeof AI_TOOLS\n  | typeof AI_TOOL_CALLS\n  | typeof AI_TOP_K\n  | typeof AI_TOP_P\n  | typeof AI_TOTAL_COST\n  | typeof AI_TOTAL_TOKENS_USED\n  | typeof AI_WARNINGS\n  | typeof ANGULAR_VERSION\n  | typeof APP_APP_BUILD\n  | typeof APP_APP_IDENTIFIER\n  | typeof APP_APP_NAME\n  | typeof APP_APP_START_TIME\n  | typeof APP_APP_VERSION\n  | typeof APP_BUILD\n  | typeof APP_IDENTIFIER\n  | typeof APP_IN_FOREGROUND\n  | typeof APP_NAME\n  | typeof APP_START_COLD\n  | typeof APP_START_TIME\n  | typeof APP_START_TYPE\n  | typeof APP_START_WARM\n  | typeof APP_VERSION\n  | typeof APP_VITALS_FRAMES_DELAY_VALUE\n  | typeof APP_VITALS_FRAMES_FROZEN_COUNT\n  | typeof APP_VITALS_FRAMES_SLOW_COUNT\n  | typeof APP_VITALS_FRAMES_TOTAL_COUNT\n  | typeof APP_VITALS_START_COLD_VALUE\n  | typeof APP_VITALS_START_PREWARMED\n  | typeof APP_VITALS_START_REASON\n  | typeof APP_VITALS_START_SCREEN\n  | typeof APP_VITALS_START_TYPE\n  | typeof APP_VITALS_START_WARM_VALUE\n  | typeof APP_VITALS_TTFD_VALUE\n  | typeof APP_VITALS_TTID_VALUE\n  | typeof ART_GC_BLOCKING_COUNT\n  | typeof ART_GC_BLOCKING_TIME\n  | typeof ART_GC_PRE_OOME_COUNT\n  | typeof ART_GC_TOTAL_COUNT\n  | typeof ART_GC_TOTAL_TIME\n  | typeof ART_GC_WAITING_TIME\n  | typeof ART_MEMORY_FREE\n  | typeof ART_MEMORY_FREE_UNTIL_GC\n  | typeof ART_MEMORY_FREE_UNTIL_OOME\n  | typeof ART_MEMORY_MAX\n  | typeof ART_MEMORY_TOTAL\n  | typeof AWS_CLOUDWATCH_LOGS_LOG_GROUP\n  | typeof AWS_CLOUDWATCH_LOGS_LOG_STREAM\n  | typeof AWS_CLOUDWATCH_LOGS_URL\n  | typeof AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS\n  | typeof AWS_DYNAMODB_CONSISTENT_READ\n  | typeof AWS_DYNAMODB_CONSUMED_CAPACITY\n  | typeof AWS_DYNAMODB_COUNT\n  | typeof AWS_DYNAMODB_EXCLUSIVE_START_TABLE\n  | typeof AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES\n  | typeof AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES\n  | typeof AWS_DYNAMODB_INDEX_NAME\n  | typeof AWS_DYNAMODB_ITEM_COLLECTION_METRICS\n  | typeof AWS_DYNAMODB_LIMIT\n  | typeof AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES\n  | typeof AWS_DYNAMODB_PROJECTION\n  | typeof AWS_DYNAMODB_PROVISIONED_READ_CAPACITY\n  | typeof AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY\n  | typeof AWS_DYNAMODB_SCANNED_COUNT\n  | typeof AWS_DYNAMODB_SCAN_FORWARD\n  | typeof AWS_DYNAMODB_SEGMENT\n  | typeof AWS_DYNAMODB_SELECT\n  | typeof AWS_DYNAMODB_TABLE_COUNT\n  | typeof AWS_DYNAMODB_TABLE_NAMES\n  | typeof AWS_DYNAMODB_TOTAL_SEGMENTS\n  | typeof AWS_EXTENDED_REQUEST_ID\n  | typeof AWS_KINESIS_STREAM_NAME\n  | typeof _AWS_KINESIS_STREAM_NAME\n  | typeof AWS_LAMBDA_AWS_REQUEST_ID\n  | typeof AWS_LAMBDA_EXECUTION_DURATION_IN_MILLIS\n  | typeof AWS_LAMBDA_FUNCTION_NAME\n  | typeof AWS_LAMBDA_FUNCTION_VERSION\n  | typeof AWS_LAMBDA_INVOKED_ARN\n  | typeof AWS_LAMBDA_INVOKED_FUNCTION_ARN\n  | typeof AWS_LAMBDA_REMAINING_TIME_IN_MILLIS\n  | typeof AWS_LOG_GROUP_NAMES\n  | typeof AWS_LOG_STREAM_NAMES\n  | typeof AWS_REQUEST_EXTENDED_ID\n  | typeof AWS_REQUEST_ID\n  | typeof _AWS_REQUEST_ID\n  | typeof AWS_S3_BUCKET\n  | typeof AWS_SECRETSMANAGER_SECRET_ARN\n  | typeof AWS_SNS_TOPIC_ARN\n  | typeof AWS_STEP_FUNCTIONS_ACTIVITY_ARN\n  | typeof AWS_STEP_FUNCTIONS_STATE_MACHINE_ARN\n  | typeof BLOCKED_MAIN_THREAD\n  | typeof BROWSER_NAME\n  | typeof BROWSER_PERFORMANCE_NAVIGATION_ACTIVATION_START\n  | typeof BROWSER_PERFORMANCE_TIME_ORIGIN\n  | typeof BROWSER_REPORT_TYPE\n  | typeof BROWSER_SCRIPT_INVOKER\n  | typeof BROWSER_SCRIPT_INVOKER_TYPE\n  | typeof BROWSER_SCRIPT_SOURCE_CHAR_POSITION\n  | typeof BROWSER_VERSION\n  | typeof BROWSER_WEB_VITAL_CLS_REPORT_EVENT\n  | typeof BROWSER_WEB_VITAL_CLS_SOURCE_KEY\n  | typeof BROWSER_WEB_VITAL_CLS_VALUE\n  | typeof BROWSER_WEB_VITAL_FCP_VALUE\n  | typeof BROWSER_WEB_VITAL_FP_VALUE\n  | typeof BROWSER_WEB_VITAL_INP_VALUE\n  | typeof BROWSER_WEB_VITAL_LCP_ELEMENT\n  | typeof BROWSER_WEB_VITAL_LCP_ID\n  | typeof BROWSER_WEB_VITAL_LCP_LOAD_TIME\n  | typeof BROWSER_WEB_VITAL_LCP_RENDER_TIME\n  | typeof BROWSER_WEB_VITAL_LCP_REPORT_EVENT\n  | typeof BROWSER_WEB_VITAL_LCP_SIZE\n  | typeof BROWSER_WEB_VITAL_LCP_URL\n  | typeof BROWSER_WEB_VITAL_LCP_VALUE\n  | typeof BROWSER_WEB_VITAL_TTFB_REQUEST_TIME\n  | typeof BROWSER_WEB_VITAL_TTFB_VALUE\n  | typeof CACHE_HIT\n  | typeof CACHE_ITEM_SIZE\n  | typeof CACHE_KEY\n  | typeof CACHE_OPERATION\n  | typeof CACHE_TTL\n  | typeof CACHE_WRITE\n  | typeof CHANNEL\n  | typeof CLIENT_ADDRESS\n  | typeof CLIENT_PORT\n  | typeof CLOUDFLARE_D1_DURATION\n  | typeof CLOUDFLARE_D1_QUERY_TYPE\n  | typeof CLOUDFLARE_D1_ROWS_READ\n  | typeof CLOUDFLARE_D1_ROWS_WRITTEN\n  | typeof CLOUDFLARE_DURABLE_OBJECT_QUERY_BINDINGS\n  | typeof CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_READ\n  | typeof CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_WRITTEN\n  | typeof CLOUDFLARE_R2_BUCKET\n  | typeof CLOUDFLARE_R2_OPERATION\n  | typeof CLOUDFLARE_R2_REQUEST_DELIMITER\n  | typeof CLOUDFLARE_R2_REQUEST_KEY\n  | typeof CLOUDFLARE_R2_REQUEST_PART_NUMBER\n  | typeof CLOUDFLARE_R2_REQUEST_PREFIX\n  | typeof CLOUDFLARE_WORKFLOW_ATTEMPT\n  | typeof CLOUDFLARE_WORKFLOW_RETRIES_BACKOFF\n  | typeof CLOUDFLARE_WORKFLOW_RETRIES_DELAY\n  | typeof CLOUDFLARE_WORKFLOW_RETRIES_LIMIT\n  | typeof CLOUDFLARE_WORKFLOW_TIMEOUT\n  | typeof CLOUD_ACCOUNT_ID\n  | typeof CLOUD_AVAILABILITY_ZONE\n  | typeof CLOUD_PLATFORM\n  | typeof CLOUD_PROVIDER\n  | typeof CLOUD_REGION\n  | typeof CLOUD_RESOURCE_ID\n  | typeof CLS\n  | typeof CLS_SOURCE_KEY\n  | typeof CODE_FILEPATH\n  | typeof CODE_FILE_PATH\n  | typeof CODE_FUNCTION\n  | typeof CODE_FUNCTION_NAME\n  | typeof CODE_LINENO\n  | typeof CODE_LINE_NUMBER\n  | typeof CODE_NAMESPACE\n  | typeof CONNECTIONTYPE\n  | typeof CONNECTION_RTT\n  | typeof CULTURE_CALENDAR\n  | typeof CULTURE_DISPLAY_NAME\n  | typeof CULTURE_IS_24_HOUR_FORMAT\n  | typeof CULTURE_LOCALE\n  | typeof CULTURE_TIMEZONE\n  | typeof DB_COLLECTION_NAME\n  | typeof DB_DRIVER_NAME\n  | typeof DB_NAME\n  | typeof DB_NAMESPACE\n  | typeof DB_OPERATION\n  | typeof DB_OPERATION_BATCH_SIZE\n  | typeof DB_OPERATION_NAME\n  | typeof DB_QUERY_PARAMETER_KEY\n  | typeof DB_QUERY_SUMMARY\n  | typeof DB_QUERY_TEXT\n  | typeof DB_REDIS_CONNECTION\n  | typeof DB_REDIS_KEY\n  | typeof DB_REDIS_PARAMETERS\n  | typeof DB_RESPONSE_STATUS_CODE\n  | typeof DB_SQL_BINDINGS\n  | typeof DB_STATEMENT\n  | typeof DB_STORED_PROCEDURE_NAME\n  | typeof DB_SYSTEM\n  | typeof DB_SYSTEM_NAME\n  | typeof DB_USER\n  | typeof DEVICEMEMORY\n  | typeof DEVICE_ARCHS\n  | typeof DEVICE_BATTERY_LEVEL\n  | typeof DEVICE_BATTERY_TEMPERATURE\n  | typeof DEVICE_BOOT_TIME\n  | typeof DEVICE_BRAND\n  | typeof DEVICE_CHARGING\n  | typeof DEVICE_CHIPSET\n  | typeof DEVICE_CLASS\n  | typeof DEVICE_CONNECTION_TYPE\n  | typeof DEVICE_CPU_DESCRIPTION\n  | typeof DEVICE_EXTERNAL_FREE_STORAGE\n  | typeof DEVICE_EXTERNAL_STORAGE_SIZE\n  | typeof DEVICE_FAMILY\n  | typeof DEVICE_FREE_MEMORY\n  | typeof DEVICE_FREE_STORAGE\n  | typeof DEVICE_ID\n  | typeof DEVICE_LOCALE\n  | typeof DEVICE_LOW_MEMORY\n  | typeof DEVICE_LOW_POWER_MODE\n  | typeof DEVICE_MANUFACTURER\n  | typeof DEVICE_MEMORY_ESTIMATED_CAPACITY\n  | typeof DEVICE_MEMORY_SIZE\n  | typeof DEVICE_MODEL\n  | typeof DEVICE_MODEL_ID\n  | typeof DEVICE_NAME\n  | typeof DEVICE_ONLINE\n  | typeof DEVICE_ORIENTATION\n  | typeof DEVICE_PROCESSOR_COUNT\n  | typeof DEVICE_PROCESSOR_FREQUENCY\n  | typeof DEVICE_SCREEN_DENSITY\n  | typeof DEVICE_SCREEN_DPI\n  | typeof DEVICE_SCREEN_HEIGHT_PIXELS\n  | typeof DEVICE_SCREEN_WIDTH_PIXELS\n  | typeof DEVICE_SIMULATOR\n  | typeof DEVICE_STORAGE_SIZE\n  | typeof DEVICE_THERMAL_STATE\n  | typeof DEVICE_TIMEZONE\n  | typeof DEVICE_USABLE_MEMORY\n  | typeof DIST\n  | typeof EFFECTIVECONNECTIONTYPE\n  | typeof ENVIRONMENT\n  | typeof ERROR_TYPE\n  | typeof EVENT_ID\n  | typeof EVENT_NAME\n  | typeof EXCEPTION_ESCAPED\n  | typeof EXCEPTION_MESSAGE\n  | typeof EXCEPTION_STACKTRACE\n  | typeof EXCEPTION_TYPE\n  | typeof FAAS_COLDSTART\n  | typeof FAAS_CRON\n  | typeof FAAS_DURATION_IN_MS\n  | typeof FAAS_ENTRY_POINT\n  | typeof FAAS_EXECUTION\n  | typeof FAAS_ID\n  | typeof FAAS_IDENTITY\n  | typeof FAAS_INVOCATION_ID\n  | typeof FAAS_INVOKED_NAME\n  | typeof FAAS_INVOKED_PROVIDER\n  | typeof FAAS_INVOKED_REGION\n  | typeof FAAS_NAME\n  | typeof FAAS_TIME\n  | typeof FAAS_TRIGGER\n  | typeof FAAS_VERSION\n  | typeof FCP\n  | typeof FLAG_EVALUATION_KEY\n  | typeof FP\n  | typeof FRAMES_DELAY\n  | typeof FRAMES_FROZEN\n  | typeof FRAMES_FROZEN_RATE\n  | typeof FRAMES_SLOW\n  | typeof FRAMES_SLOW_RATE\n  | typeof FRAMES_TOTAL\n  | typeof FS_ERROR\n  | typeof GCP_FUNCTION_CONTEXT_EVENT_ID\n  | typeof GCP_FUNCTION_CONTEXT_EVENT_TYPE\n  | typeof GCP_FUNCTION_CONTEXT_ID\n  | typeof GCP_FUNCTION_CONTEXT_RESOURCE\n  | typeof GCP_FUNCTION_CONTEXT_SOURCE\n  | typeof GCP_FUNCTION_CONTEXT_SPECVERSION\n  | typeof GCP_FUNCTION_CONTEXT_TIME\n  | typeof GCP_FUNCTION_CONTEXT_TIMESTAMP\n  | typeof GCP_FUNCTION_CONTEXT_TYPE\n  | typeof GCP_PROJECT_ID\n  | typeof GEN_AI_AGENT_NAME\n  | typeof GEN_AI_CONTEXT_UTILIZATION\n  | typeof GEN_AI_CONTEXT_WINDOW_SIZE\n  | typeof GEN_AI_CONVERSATION_ID\n  | typeof GEN_AI_COST_CACHE_CREATION_INPUT_TOKENS\n  | typeof GEN_AI_COST_CACHE_READ_INPUT_TOKENS\n  | typeof GEN_AI_COST_INPUT_TOKENS\n  | typeof GEN_AI_COST_OUTPUT_TOKENS\n  | typeof GEN_AI_COST_REASONING_OUTPUT_TOKENS\n  | typeof GEN_AI_COST_TOTAL_TOKENS\n  | typeof GEN_AI_EMBEDDINGS_INPUT\n  | typeof GEN_AI_FUNCTION_ID\n  | typeof GEN_AI_INPUT_MESSAGES\n  | typeof GEN_AI_OPERATION_NAME\n  | typeof GEN_AI_OPERATION_TYPE\n  | typeof GEN_AI_OUTPUT_MESSAGES\n  | typeof GEN_AI_PIPELINE_NAME\n  | typeof GEN_AI_PROMPT\n  | typeof GEN_AI_PROMPT_NAME\n  | typeof GEN_AI_PROVIDER_NAME\n  | typeof GEN_AI_REQUEST_AVAILABLE_TOOLS\n  | typeof GEN_AI_REQUEST_FREQUENCY_PENALTY\n  | typeof GEN_AI_REQUEST_MAX_TOKENS\n  | typeof GEN_AI_REQUEST_MESSAGES\n  | typeof GEN_AI_REQUEST_MODEL\n  | typeof GEN_AI_REQUEST_PRESENCE_PENALTY\n  | typeof GEN_AI_REQUEST_REASONING_EFFORT\n  | typeof GEN_AI_REQUEST_SEED\n  | typeof GEN_AI_REQUEST_STOP_SEQUENCES\n  | typeof GEN_AI_REQUEST_TEMPERATURE\n  | typeof GEN_AI_REQUEST_TOP_K\n  | typeof GEN_AI_REQUEST_TOP_P\n  | typeof GEN_AI_RESPONSE_FINISH_REASONS\n  | typeof GEN_AI_RESPONSE_ID\n  | typeof GEN_AI_RESPONSE_MODEL\n  | typeof GEN_AI_RESPONSE_STREAMING\n  | typeof GEN_AI_RESPONSE_TEXT\n  | typeof GEN_AI_RESPONSE_TIME_TO_FIRST_CHUNK\n  | typeof GEN_AI_RESPONSE_TIME_TO_FIRST_TOKEN\n  | typeof GEN_AI_RESPONSE_TOKENS_PER_SECOND\n  | typeof GEN_AI_RESPONSE_TOOL_CALLS\n  | typeof GEN_AI_SYSTEM\n  | typeof GEN_AI_SYSTEM_INSTRUCTIONS\n  | typeof GEN_AI_SYSTEM_MESSAGE\n  | typeof GEN_AI_TOOL_CALL_ARGUMENTS\n  | typeof GEN_AI_TOOL_CALL_RESULT\n  | typeof GEN_AI_TOOL_DEFINITIONS\n  | typeof GEN_AI_TOOL_DESCRIPTION\n  | typeof GEN_AI_TOOL_INPUT\n  | typeof GEN_AI_TOOL_MESSAGE\n  | typeof GEN_AI_TOOL_NAME\n  | typeof GEN_AI_TOOL_OUTPUT\n  | typeof GEN_AI_TOOL_TYPE\n  | typeof GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS\n  | typeof GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS\n  | typeof GEN_AI_USAGE_COMPLETION_TOKENS\n  | typeof GEN_AI_USAGE_INPUT_TOKENS\n  | typeof GEN_AI_USAGE_INPUT_TOKENS_CACHED\n  | typeof GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE\n  | typeof GEN_AI_USAGE_OUTPUT_TOKENS\n  | typeof GEN_AI_USAGE_OUTPUT_TOKENS_REASONING\n  | typeof GEN_AI_USAGE_PROMPT_TOKENS\n  | typeof GEN_AI_USAGE_REASONING_OUTPUT_TOKENS\n  | typeof GEN_AI_USAGE_TOTAL_TOKENS\n  | typeof GRAPHQL_DOCUMENT\n  | typeof GRAPHQL_OPERATION_NAME\n  | typeof GRAPHQL_OPERATION_TYPE\n  | typeof HARDWARECONCURRENCY\n  | typeof HTTP_CLIENT_IP\n  | typeof HTTP_DECODED_RESPONSE_CONTENT_LENGTH\n  | typeof HTTP_FLAVOR\n  | typeof HTTP_FRAGMENT\n  | typeof HTTP_HOST\n  | typeof HTTP_METHOD\n  | typeof HTTP_QUERY\n  | typeof HTTP_REQUEST_BODY_DATA\n  | typeof HTTP_REQUEST_CONNECTION_END\n  | typeof HTTP_REQUEST_CONNECT_START\n  | typeof HTTP_REQUEST_DOMAIN_LOOKUP_END\n  | typeof HTTP_REQUEST_DOMAIN_LOOKUP_START\n  | typeof HTTP_REQUEST_FETCH_START\n  | typeof HTTP_REQUEST_HEADER_KEY\n  | typeof HTTP_REQUEST_METHOD\n  | typeof _HTTP_REQUEST_METHOD\n  | typeof HTTP_REQUEST_REDIRECT_END\n  | typeof HTTP_REQUEST_REDIRECT_START\n  | typeof HTTP_REQUEST_REQUEST_START\n  | typeof HTTP_REQUEST_RESEND_COUNT\n  | typeof HTTP_REQUEST_RESPONSE_END\n  | typeof HTTP_REQUEST_RESPONSE_START\n  | typeof HTTP_REQUEST_SAME_ORIGIN\n  | typeof HTTP_REQUEST_SECURE_CONNECTION_START\n  | typeof HTTP_REQUEST_TIME_TO_FIRST_BYTE\n  | typeof HTTP_REQUEST_WORKER_START\n  | typeof HTTP_RESPONSE_BODY_SIZE\n  | typeof HTTP_RESPONSE_CONTENT_LENGTH\n  | typeof HTTP_RESPONSE_HEADER_CONTENT_LENGTH\n  | typeof HTTP_RESPONSE_HEADER_KEY\n  | typeof HTTP_RESPONSE_SIZE\n  | typeof HTTP_RESPONSE_STATUS_CODE\n  | typeof HTTP_RESPONSE_TRANSFER_SIZE\n  | typeof HTTP_ROUTE\n  | typeof HTTP_SCHEME\n  | typeof HTTP_SERVER_NAME\n  | typeof HTTP_SERVER_REQUEST_TIME_IN_QUEUE\n  | typeof HTTP_STATUS_CODE\n  | typeof HTTP_TARGET\n  | typeof HTTP_URL\n  | typeof HTTP_USER_AGENT\n  | typeof ID\n  | typeof INP\n  | typeof JSONRPC_PROTOCOL_VERSION\n  | typeof JSONRPC_REQUEST_ID\n  | typeof JVM_GC_ACTION\n  | typeof JVM_GC_NAME\n  | typeof JVM_MEMORY_POOL_NAME\n  | typeof JVM_MEMORY_TYPE\n  | typeof JVM_THREAD_DAEMON\n  | typeof JVM_THREAD_STATE\n  | typeof KOA_NAME\n  | typeof KOA_TYPE\n  | typeof LCP\n  | typeof LCP_ELEMENT\n  | typeof LCP_ID\n  | typeof LCP_LOADTIME\n  | typeof LCP_RENDERTIME\n  | typeof LCP_SIZE\n  | typeof LCP_URL\n  | typeof LOGGER_NAME\n  | typeof MCP_CANCELLED_REASON\n  | typeof MCP_CANCELLED_REQUEST_ID\n  | typeof MCP_CLIENT_NAME\n  | typeof MCP_CLIENT_TITLE\n  | typeof MCP_CLIENT_VERSION\n  | typeof MCP_LIFECYCLE_PHASE\n  | typeof MCP_LOGGING_DATA_TYPE\n  | typeof MCP_LOGGING_LEVEL\n  | typeof MCP_LOGGING_LOGGER\n  | typeof MCP_LOGGING_MESSAGE\n  | typeof MCP_METHOD_NAME\n  | typeof MCP_PROGRESS_CURRENT\n  | typeof MCP_PROGRESS_MESSAGE\n  | typeof MCP_PROGRESS_PERCENTAGE\n  | typeof MCP_PROGRESS_TOKEN\n  | typeof MCP_PROGRESS_TOTAL\n  | typeof MCP_PROMPT_NAME\n  | typeof MCP_PROMPT_RESULT_DESCRIPTION\n  | typeof MCP_PROMPT_RESULT_MESSAGE_CONTENT\n  | typeof MCP_PROMPT_RESULT_MESSAGE_COUNT\n  | typeof MCP_PROMPT_RESULT_MESSAGE_ROLE\n  | typeof MCP_PROTOCOL_READY\n  | typeof MCP_PROTOCOL_VERSION\n  | typeof MCP_REQUEST_ARGUMENT_KEY\n  | typeof MCP_REQUEST_ARGUMENT_NAME\n  | typeof MCP_REQUEST_ARGUMENT_URI\n  | typeof MCP_REQUEST_ID\n  | typeof MCP_RESOURCE_PROTOCOL\n  | typeof MCP_RESOURCE_URI\n  | typeof MCP_SERVER_NAME\n  | typeof MCP_SERVER_TITLE\n  | typeof MCP_SERVER_VERSION\n  | typeof MCP_SESSION_ID\n  | typeof MCP_TOOL_NAME\n  | typeof MCP_TOOL_RESULT_CONTENT\n  | typeof MCP_TOOL_RESULT_CONTENT_COUNT\n  | typeof MCP_TOOL_RESULT_IS_ERROR\n  | typeof MCP_TRANSPORT\n  | typeof MDC_KEY\n  | typeof MESSAGING_BATCH_MESSAGE_COUNT\n  | typeof MESSAGING_DESTINATION\n  | typeof MESSAGING_DESTINATION_CONNECTION\n  | typeof MESSAGING_DESTINATION_NAME\n  | typeof MESSAGING_MESSAGE_BODY_SIZE\n  | typeof MESSAGING_MESSAGE_CONVERSATION_ID\n  | typeof MESSAGING_MESSAGE_ENVELOPE_SIZE\n  | typeof MESSAGING_MESSAGE_ID\n  | typeof MESSAGING_MESSAGE_RECEIVE_LATENCY\n  | typeof MESSAGING_MESSAGE_RETRY_COUNT\n  | typeof MESSAGING_OPERATION_NAME\n  | typeof MESSAGING_OPERATION_TYPE\n  | typeof MESSAGING_RABBITMQ_DESTINATION_ROUTING_KEY\n  | typeof MESSAGING_SYSTEM\n  | typeof METHOD\n  | typeof MIDDLEWARE_NAME\n  | typeof NAVIGATION_ORIGIN\n  | typeof NAVIGATION_ROUTE_ID\n  | typeof NAVIGATION_TYPE\n  | typeof NEL_ELAPSED_TIME\n  | typeof NEL_PHASE\n  | typeof NEL_REFERRER\n  | typeof NEL_SAMPLING_FUNCTION\n  | typeof NEL_TYPE\n  | typeof NETWORK_CONNECTION_EFFECTIVE_TYPE\n  | typeof NETWORK_CONNECTION_RTT\n  | typeof NETWORK_CONNECTION_TYPE\n  | typeof NETWORK_LOCAL_ADDRESS\n  | typeof NETWORK_LOCAL_PORT\n  | typeof NETWORK_PEER_ADDRESS\n  | typeof NETWORK_PEER_PORT\n  | typeof NETWORK_PROTOCOL_NAME\n  | typeof NETWORK_PROTOCOL_VERSION\n  | typeof NETWORK_TRANSPORT\n  | typeof NETWORK_TYPE\n  | typeof NET_HOST_IP\n  | typeof NET_HOST_NAME\n  | typeof NET_HOST_PORT\n  | typeof NET_PEER_IP\n  | typeof NET_PEER_NAME\n  | typeof NET_PEER_PORT\n  | typeof NET_PROTOCOL_NAME\n  | typeof NET_PROTOCOL_VERSION\n  | typeof NET_SOCK_FAMILY\n  | typeof NET_SOCK_HOST_ADDR\n  | typeof NET_SOCK_HOST_PORT\n  | typeof NET_SOCK_PEER_ADDR\n  | typeof NET_SOCK_PEER_NAME\n  | typeof NET_SOCK_PEER_PORT\n  | typeof NET_TRANSPORT\n  | typeof OS_BUILD\n  | typeof OS_BUILD_ID\n  | typeof OS_DESCRIPTION\n  | typeof OS_KERNEL_VERSION\n  | typeof OS_NAME\n  | typeof OS_RAW_DESCRIPTION\n  | typeof OS_ROOTED\n  | typeof OS_THEME\n  | typeof OS_TYPE\n  | typeof OS_VERSION\n  | typeof OTEL_KIND\n  | typeof OTEL_SCOPE_NAME\n  | typeof OTEL_SCOPE_VERSION\n  | typeof OTEL_STATUS_CODE\n  | typeof OTEL_STATUS_DESCRIPTION\n  | typeof PARAMS_KEY\n  | typeof PERFORMANCE_ACTIVATIONSTART\n  | typeof PERFORMANCE_TIMEORIGIN\n  | typeof PREVIOUS_ROUTE\n  | typeof PROCESS_COMMAND_ARGS\n  | typeof PROCESS_EXECUTABLE_NAME\n  | typeof PROCESS_PID\n  | typeof PROCESS_RUNTIME_DESCRIPTION\n  | typeof PROCESS_RUNTIME_ENGINE_NAME\n  | typeof PROCESS_RUNTIME_ENGINE_VERSION\n  | typeof PROCESS_RUNTIME_NAME\n  | typeof PROCESS_RUNTIME_VERSION\n  | typeof QUERY_KEY\n  | typeof REACT_VERSION\n  | typeof RELEASE\n  | typeof REMIX_ACTION_FORM_DATA_KEY\n  | typeof REPLAY_ID\n  | typeof RESOURCE_DEPLOYMENT_ENVIRONMENT\n  | typeof RESOURCE_DEPLOYMENT_ENVIRONMENT_NAME\n  | typeof RESOURCE_RENDER_BLOCKING_STATUS\n  | typeof ROUTE\n  | typeof RPC_GRPC_STATUS_CODE\n  | typeof RPC_METHOD\n  | typeof RPC_RESPONSE_STATUS_CODE\n  | typeof RPC_SERVICE\n  | typeof RPC_SYSTEM\n  | typeof RPC_SYSTEM_NAME\n  | typeof RUNTIME_BUILD\n  | typeof RUNTIME_NAME\n  | typeof RUNTIME_RAW_DESCRIPTION\n  | typeof RUNTIME_VERSION\n  | typeof SCORE_KEY\n  | typeof SCORE_RATIO_KEY\n  | typeof SCORE_TOTAL\n  | typeof SCORE_WEIGHT_KEY\n  | typeof SENTRY_ACTION\n  | typeof SENTRY_BROWSER_NAME\n  | typeof SENTRY_BROWSER_VERSION\n  | typeof SENTRY_CANCELLATION_REASON\n  | typeof SENTRY_CATEGORY\n  | typeof SENTRY_CLIENT_SAMPLE_RATE\n  | typeof SENTRY_DESCRIPTION\n  | typeof SENTRY_DIST\n  | typeof SENTRY_DOMAIN\n  | typeof SENTRY_DSC_ENVIRONMENT\n  | typeof SENTRY_DSC_PROJECT_ID\n  | typeof SENTRY_DSC_PUBLIC_KEY\n  | typeof SENTRY_DSC_RELEASE\n  | typeof SENTRY_DSC_SAMPLED\n  | typeof SENTRY_DSC_SAMPLE_RATE\n  | typeof SENTRY_DSC_TRACE_ID\n  | typeof SENTRY_DSC_TRANSACTION\n  | typeof SENTRY_ENVIRONMENT\n  | typeof SENTRY_EXCLUSIVE_TIME\n  | typeof SENTRY_GRAPHQL_OPERATION\n  | typeof SENTRY_GROUP\n  | typeof SENTRY_HTTP_PREFETCH\n  | typeof SENTRY_IDLE_SPAN_FINISH_REASON\n  | typeof SENTRY_IS_REMOTE\n  | typeof SENTRY_KIND\n  | typeof SENTRY_MAIN_THREAD\n  | typeof SENTRY_MESSAGE_PARAMETER_KEY\n  | typeof SENTRY_MESSAGE_TEMPLATE\n  | typeof SENTRY_METRIC_SOURCE\n  | typeof SENTRY_MOBILE\n  | typeof SENTRY_MODULE_KEY\n  | typeof SENTRY_NEXTJS_SSR_FUNCTION_ROUTE\n  | typeof SENTRY_NEXTJS_SSR_FUNCTION_TYPE\n  | typeof SENTRY_NORMALIZED_DB_QUERY\n  | typeof SENTRY_NORMALIZED_DB_QUERY_HASH\n  | typeof SENTRY_NORMALIZED_DESCRIPTION\n  | typeof SENTRY_OBSERVED_TIMESTAMP_NANOS\n  | typeof SENTRY_OP\n  | typeof SENTRY_ORIGIN\n  | typeof SENTRY_PLATFORM\n  | typeof SENTRY_PROFILER_ID\n  | typeof SENTRY_PROFILE_ID\n  | typeof SENTRY_RELEASE\n  | typeof SENTRY_REPLAY_ID\n  | typeof SENTRY_REPLAY_IS_BUFFERING\n  | typeof SENTRY_REPORT_EVENT\n  | typeof SENTRY_SDK_INTEGRATIONS\n  | typeof SENTRY_SDK_NAME\n  | typeof SENTRY_SDK_VERSION\n  | typeof SENTRY_SEGMENT_ID\n  | typeof _SENTRY_SEGMENT_ID\n  | typeof SENTRY_SEGMENT_NAME\n  | typeof SENTRY_SERVER_SAMPLE_RATE\n  | typeof SENTRY_SOURCE\n  | typeof SENTRY_SPAN_SOURCE\n  | typeof SENTRY_STATUS\n  | typeof SENTRY_STATUS_CODE\n  | typeof SENTRY_STATUS_MESSAGE\n  | typeof SENTRY_SVELTEKIT_NAVIGATION_FROM\n  | typeof SENTRY_SVELTEKIT_NAVIGATION_TO\n  | typeof SENTRY_SVELTEKIT_NAVIGATION_TYPE\n  | typeof SENTRY_THREAD_ID\n  | typeof SENTRY_TIMESTAMP_SEQUENCE\n  | typeof SENTRY_TRACE_LIFECYCLE\n  | typeof SENTRY_TRACE_PARENT_SPAN_ID\n  | typeof SENTRY_TRACE_STATUS\n  | typeof SENTRY_TRANSACTION\n  | typeof SENTRY_USER_EMAIL\n  | typeof SENTRY_USER_GEO_CITY\n  | typeof SENTRY_USER_GEO_COUNTRY_CODE\n  | typeof SENTRY_USER_GEO_REGION\n  | typeof SENTRY_USER_GEO_SUBDIVISION\n  | typeof SENTRY_USER_ID\n  | typeof SENTRY_USER_IP\n  | typeof SENTRY_USER_USERNAME\n  | typeof SERVER_ADDRESS\n  | typeof SERVER_NAME\n  | typeof SERVER_PORT\n  | typeof SERVICE_NAME\n  | typeof SERVICE_VERSION\n  | typeof SESSION_ID\n  | typeof STALL_PERCENTAGE\n  | typeof STALL_TOTAL_TIME\n  | typeof STATE_TYPE\n  | typeof THREAD_ID\n  | typeof THREAD_NAME\n  | typeof TIMBER_TAG\n  | typeof TIME_TO_FULL_DISPLAY\n  | typeof TIME_TO_INITIAL_DISPLAY\n  | typeof TRANSACTION\n  | typeof TRPC_PROCEDURE_PATH\n  | typeof TRPC_PROCEDURE_TYPE\n  | typeof TTFB\n  | typeof TTFB_REQUESTTIME\n  | typeof TYPE\n  | typeof UI_COMPONENT_NAME\n  | typeof UI_CONTRIBUTES_TO_TTFD\n  | typeof UI_CONTRIBUTES_TO_TTID\n  | typeof UI_ELEMENT_HEIGHT\n  | typeof UI_ELEMENT_ID\n  | typeof UI_ELEMENT_IDENTIFIER\n  | typeof UI_ELEMENT_LOAD_TIME\n  | typeof UI_ELEMENT_PAINT_TYPE\n  | typeof UI_ELEMENT_RENDER_TIME\n  | typeof UI_ELEMENT_TYPE\n  | typeof UI_ELEMENT_URL\n  | typeof UI_ELEMENT_WIDTH\n  | typeof URL\n  | typeof URL_DOMAIN\n  | typeof URL_FRAGMENT\n  | typeof URL_FULL\n  | typeof URL_PATH\n  | typeof URL_PATH_PARAMETER_KEY\n  | typeof URL_PORT\n  | typeof URL_QUERY\n  | typeof URL_SAME_ORIGIN\n  | typeof URL_SCHEME\n  | typeof URL_TEMPLATE\n  | typeof USER_AGENT_ORIGINAL\n  | typeof USER_EMAIL\n  | typeof USER_FULL_NAME\n  | typeof USER_GEO_CITY\n  | typeof USER_GEO_COUNTRY_CODE\n  | typeof USER_GEO_REGION\n  | typeof USER_GEO_SUBDIVISION\n  | typeof USER_HASH\n  | typeof USER_ID\n  | typeof USER_IP_ADDRESS\n  | typeof USER_NAME\n  | typeof USER_ROLES\n  | typeof VERCEL_BRANCH\n  | typeof VERCEL_BUILD_ID\n  | typeof VERCEL_DEPLOYMENT_ID\n  | typeof VERCEL_DESTINATION\n  | typeof VERCEL_EDGE_TYPE\n  | typeof VERCEL_ENTRYPOINT\n  | typeof VERCEL_EXECUTION_REGION\n  | typeof VERCEL_ID\n  | typeof VERCEL_JA3_DIGEST\n  | typeof VERCEL_JA4_DIGEST\n  | typeof VERCEL_LOG_TYPE\n  | typeof VERCEL_PATH\n  | typeof VERCEL_PROJECT_ID\n  | typeof VERCEL_PROJECT_NAME\n  | typeof VERCEL_PROXY_CACHE_ID\n  | typeof VERCEL_PROXY_CLIENT_IP\n  | typeof VERCEL_PROXY_HOST\n  | typeof VERCEL_PROXY_LAMBDA_REGION\n  | typeof VERCEL_PROXY_METHOD\n  | typeof VERCEL_PROXY_PATH\n  | typeof VERCEL_PROXY_PATH_TYPE\n  | typeof VERCEL_PROXY_PATH_TYPE_VARIANT\n  | typeof VERCEL_PROXY_REFERER\n  | typeof VERCEL_PROXY_REGION\n  | typeof VERCEL_PROXY_RESPONSE_BYTE_SIZE\n  | typeof VERCEL_PROXY_SCHEME\n  | typeof VERCEL_PROXY_STATUS_CODE\n  | typeof VERCEL_PROXY_TIMESTAMP\n  | typeof VERCEL_PROXY_USER_AGENT\n  | typeof VERCEL_PROXY_VERCEL_CACHE\n  | typeof VERCEL_PROXY_VERCEL_ID\n  | typeof VERCEL_PROXY_WAF_ACTION\n  | typeof VERCEL_PROXY_WAF_RULE_ID\n  | typeof VERCEL_REQUEST_ID\n  | typeof VERCEL_SOURCE\n  | typeof VERCEL_STATUS_CODE;\n\nexport const ATTRIBUTE_METADATA: Record<AttributeName, AttributeMetadata> = {\n  'ai.citations': {\n    brief: 'References or sources cited by the AI model in its response.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: ['Citation 1', 'Citation 2'],\n    deprecation: {},\n    changelog: [\n      { version: '0.5.0', prs: [264] },\n      { version: '0.1.0', prs: [55] },\n    ],\n  },\n  'ai.completion_tokens.used': {\n    brief: 'The number of tokens used to respond to the message.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 10,\n    deprecation: {\n      replacement: 'gen_ai.usage.output_tokens',\n    },\n    aliases: ['gen_ai.usage.output_tokens', 'gen_ai.usage.completion_tokens'],\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [57, 61] }, { version: '0.0.0' }],\n  },\n  'ai.documents': {\n    brief: 'Documents or content chunks used as context for the AI model.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: ['document1.txt', 'document2.pdf'],\n    deprecation: {},\n    changelog: [\n      { version: '0.5.0', prs: [264] },\n      { version: '0.1.0', prs: [55] },\n    ],\n  },\n  'ai.finish_reason': {\n    brief: 'The reason why the model stopped generating.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'COMPLETE',\n    deprecation: {\n      replacement: 'gen_ai.response.finish_reasons',\n    },\n    aliases: ['gen_ai.response.finish_reasons'],\n    changelog: [{ version: '0.1.0', prs: [55, 57, 61, 108, 127] }],\n  },\n  'ai.frequency_penalty': {\n    brief:\n      '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.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 0.5,\n    deprecation: {\n      replacement: 'gen_ai.request.frequency_penalty',\n    },\n    aliases: ['gen_ai.request.frequency_penalty'],\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [55, 57, 61, 108] },\n    ],\n  },\n  'ai.function_call': {\n    brief:\n      'For an AI model call, the function that was called. This is deprecated for OpenAI, and replaced by tool_calls',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'function_name',\n    deprecation: {\n      replacement: 'gen_ai.tool.name',\n    },\n    aliases: ['gen_ai.tool.name', 'mcp.tool.name'],\n    changelog: [{ version: '0.1.0', prs: [55, 57, 61, 108] }],\n  },\n  'ai.generation_id': {\n    brief: 'Unique identifier for the completion.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'gen_123abc',\n    deprecation: {\n      replacement: 'gen_ai.response.id',\n    },\n    aliases: ['gen_ai.response.id'],\n    changelog: [{ version: '0.1.0', prs: [55, 57, 61, 108, 127] }],\n  },\n  'ai.input_messages': {\n    brief: 'The input messages sent to the model',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '[{\"role\": \"user\", \"message\": \"hello\"}]',\n    deprecation: {\n      replacement: 'gen_ai.input.messages',\n    },\n    aliases: ['gen_ai.request.messages'],\n    changelog: [{ version: '0.1.0', prs: [65, 119] }, { version: '0.0.0' }],\n  },\n  'ai.is_search_required': {\n    brief: 'Boolean indicating if the model needs to perform a search.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: false,\n    deprecation: {},\n    changelog: [\n      { version: '0.5.0', prs: [264] },\n      { version: '0.1.0', prs: [55] },\n    ],\n  },\n  'ai.metadata': {\n    brief: 'Extra metadata passed to an AI pipeline step.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '{\"user_id\": 123, \"session_id\": \"abc123\"}',\n    deprecation: {},\n    changelog: [\n      { version: '0.5.0', prs: [264] },\n      { version: '0.1.0', prs: [55, 127] },\n    ],\n  },\n  'ai.model_id': {\n    brief: 'The vendor-specific ID of the model used.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'gpt-4',\n    deprecation: {\n      replacement: 'gen_ai.response.model',\n    },\n    aliases: ['gen_ai.response.model'],\n    changelog: [{ version: '0.1.0', prs: [57, 61, 127] }, { version: '0.0.0' }],\n  },\n  'ai.model.provider': {\n    brief: 'The provider of the model.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'openai',\n    deprecation: {\n      replacement: 'gen_ai.provider.name',\n    },\n    aliases: ['gen_ai.provider.name', 'gen_ai.system'],\n    changelog: [\n      { version: '0.4.0', prs: [253] },\n      { version: '0.1.0', prs: [57, 61, 108, 127] },\n    ],\n  },\n  'ai.pipeline.name': {\n    brief: 'The name of the AI pipeline.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Autofix Pipeline',\n    deprecation: {\n      replacement: 'gen_ai.pipeline.name',\n    },\n    aliases: ['gen_ai.pipeline.name'],\n    changelog: [{ version: '0.1.0', prs: [53, 76, 108, 127] }],\n  },\n  'ai.preamble': {\n    brief:\n      \"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.\",\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'You are now a clown.',\n    deprecation: {\n      replacement: 'gen_ai.system_instructions',\n    },\n    aliases: ['gen_ai.system_instructions'],\n    changelog: [\n      { version: '0.5.0', prs: [264] },\n      { version: '0.1.0', prs: [55] },\n    ],\n  },\n  'ai.presence_penalty': {\n    brief:\n      '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.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 0.5,\n    deprecation: {\n      replacement: 'gen_ai.request.presence_penalty',\n    },\n    aliases: ['gen_ai.request.presence_penalty'],\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [55, 57, 61, 108] },\n    ],\n  },\n  'ai.prompt_tokens.used': {\n    brief: 'The number of tokens used to process just the prompt.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 20,\n    deprecation: {\n      replacement: 'gen_ai.usage.input_tokens',\n    },\n    aliases: ['gen_ai.usage.prompt_tokens', 'gen_ai.usage.input_tokens'],\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [57, 61] }, { version: '0.0.0' }],\n  },\n  'ai.raw_prompting': {\n    brief: 'When enabled, the user’s prompt will be sent to the model without any pre-processing.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    deprecation: {},\n    changelog: [\n      { version: '0.5.0', prs: [264] },\n      { version: '0.1.0', prs: [55] },\n    ],\n  },\n  'ai.responses': {\n    brief: 'The response messages sent back by the AI model.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: ['hello', 'world'],\n    deprecation: {\n      replacement: 'gen_ai.output.messages',\n    },\n    changelog: [{ version: '0.1.0', prs: [65, 127] }, { version: '0.0.0' }],\n  },\n  'ai.response_format': {\n    brief: 'For an AI model call, the format of the response',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'json_object',\n    deprecation: {},\n    changelog: [\n      { version: '0.5.0', prs: [264] },\n      { version: '0.1.0', prs: [55, 127] },\n    ],\n  },\n  'ai.search_queries': {\n    brief: 'Queries used to search for relevant context or documents.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: ['climate change effects', 'renewable energy'],\n    deprecation: {},\n    changelog: [\n      { version: '0.5.0', prs: [264] },\n      { version: '0.1.0', prs: [55] },\n    ],\n  },\n  'ai.search_results': {\n    brief: 'Results returned from search queries for context.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: ['search_result_1, search_result_2'],\n    deprecation: {},\n    changelog: [\n      { version: '0.5.0', prs: [264] },\n      { version: '0.1.0', prs: [55] },\n    ],\n  },\n  'ai.seed': {\n    brief: 'The seed, ideally models given the same seed and same other parameters will produce the exact same output.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '1234567890',\n    deprecation: {\n      replacement: 'gen_ai.request.seed',\n    },\n    aliases: ['gen_ai.request.seed'],\n    changelog: [{ version: '0.1.0', prs: [55, 57, 61, 108, 127] }],\n  },\n  'ai.streaming': {\n    brief: 'Whether the request was streamed back.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    deprecation: {\n      replacement: 'gen_ai.response.streaming',\n    },\n    aliases: ['gen_ai.response.streaming'],\n    changelog: [{ version: '0.1.0', prs: [76, 108] }, { version: '0.0.0' }],\n  },\n  'ai.tags': {\n    brief: 'Tags that describe an AI pipeline step.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '{\"executed_function\": \"add_integers\"}',\n    deprecation: {},\n    changelog: [\n      { version: '0.5.0', prs: [264] },\n      { version: '0.1.0', prs: [55, 127] },\n    ],\n  },\n  'ai.temperature': {\n    brief:\n      'For an AI model call, the temperature parameter. Temperature essentially means how random the output will be.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 0.1,\n    deprecation: {\n      replacement: 'gen_ai.request.temperature',\n    },\n    aliases: ['gen_ai.request.temperature'],\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [55, 57, 61, 108] },\n    ],\n  },\n  'ai.texts': {\n    brief: 'Raw text inputs provided to the model.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: ['Hello, how are you?', 'What is the capital of France?'],\n    deprecation: {\n      replacement: 'gen_ai.input.messages',\n    },\n    aliases: ['gen_ai.input.messages'],\n    changelog: [\n      { version: '0.5.0', prs: [264] },\n      { version: '0.1.0', prs: [55] },\n    ],\n  },\n  'ai.tools': {\n    brief: 'For an AI model call, the functions that are available',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: ['function_1', 'function_2'],\n    deprecation: {\n      replacement: 'gen_ai.tool.definitions',\n    },\n    changelog: [{ version: '0.1.0', prs: [55, 65, 127] }],\n  },\n  'ai.tool_calls': {\n    brief: 'For an AI model call, the tool calls that were made.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: ['tool_call_1', 'tool_call_2'],\n    deprecation: {\n      replacement: 'gen_ai.output.messages',\n    },\n    changelog: [{ version: '0.1.0', prs: [55, 65] }],\n  },\n  'ai.top_k': {\n    brief:\n      '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).',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 35,\n    deprecation: {\n      replacement: 'gen_ai.request.top_k',\n    },\n    aliases: ['gen_ai.request.top_k'],\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [55, 57, 61, 108] },\n    ],\n  },\n  'ai.top_p': {\n    brief:\n      '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).',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 0.7,\n    deprecation: {\n      replacement: 'gen_ai.request.top_p',\n    },\n    aliases: ['gen_ai.request.top_p'],\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [55, 57, 61, 108] },\n    ],\n  },\n  'ai.total_cost': {\n    brief: 'The total cost for the tokens used.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 12.34,\n    deprecation: {\n      replacement: 'gen_ai.cost.total_tokens',\n    },\n    aliases: ['gen_ai.cost.total_tokens'],\n    changelog: [\n      { version: '0.5.0', prs: [264] },\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [53] },\n    ],\n  },\n  'ai.total_tokens.used': {\n    brief: 'The total number of tokens used to process the prompt.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 30,\n    deprecation: {\n      replacement: 'gen_ai.usage.total_tokens',\n    },\n    aliases: ['gen_ai.usage.total_tokens'],\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [57, 61, 108] }, { version: '0.0.0' }],\n  },\n  'ai.warnings': {\n    brief: 'Warning messages generated during model execution.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: ['Token limit exceeded'],\n    deprecation: {},\n    changelog: [\n      { version: '0.5.0', prs: [264] },\n      { version: '0.1.0', prs: [55] },\n    ],\n  },\n  'angular.version': {\n    brief: 'The version of the Angular framework',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '17.1.0',\n    changelog: [{ version: '0.7.0', prs: [367], description: 'Added angular.version attribute' }],\n  },\n  'app.app_build': {\n    brief: 'Internal build identifier, as it appears on the platform.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '1',\n    deprecation: {\n      replacement: 'app.build',\n      reason: 'Deprecated in favor of app.build',\n    },\n    aliases: ['app.build'],\n    changelog: [\n      { version: '0.5.0', prs: [296], description: 'Added and deprecated app.app_build in favor of app.build' },\n    ],\n  },\n  'app.app_identifier': {\n    brief: 'Version-independent application identifier, often a dotted bundle ID.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'com.example.myapp',\n    deprecation: {\n      replacement: 'app.identifier',\n      reason: 'Deprecated in favor of app.identifier',\n    },\n    aliases: ['app.identifier'],\n    changelog: [\n      {\n        version: '0.5.0',\n        prs: [296],\n        description: 'Added and deprecated app.app_identifier in favor of app.identifier',\n      },\n    ],\n  },\n  'app.app_name': {\n    brief: 'Human readable application name, as it appears on the platform.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'My App',\n    deprecation: {\n      replacement: 'app.name',\n      reason: 'Deprecated in favor of app.name',\n    },\n    aliases: ['app.name'],\n    changelog: [\n      { version: '0.5.0', prs: [296], description: 'Added and deprecated app.app_name in favor of app.name' },\n    ],\n  },\n  'app.app_start_time': {\n    brief: 'Formatted UTC timestamp when the user started the application.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '2025-01-01T00:00:00.000Z',\n    deprecation: {\n      replacement: 'app.start_time',\n      reason: 'Deprecated in favor of app.start_time',\n    },\n    aliases: ['app.start_time'],\n    changelog: [\n      {\n        version: '0.5.0',\n        prs: [296],\n        description: 'Added and deprecated app.app_start_time in favor of app.start_time',\n      },\n    ],\n  },\n  'app.app_version': {\n    brief: 'Human readable application version, as it appears on the platform.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '1.0.0',\n    deprecation: {\n      replacement: 'app.version',\n      reason: 'Deprecated in favor of app.version',\n    },\n    aliases: ['app.version'],\n    changelog: [\n      { version: '0.5.0', prs: [296], description: 'Added and deprecated app.app_version in favor of app.version' },\n    ],\n  },\n  'app.build': {\n    brief: 'Internal build identifier, as it appears on the platform.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '1',\n    aliases: ['app.app_build'],\n    changelog: [{ version: '0.5.0', prs: [296], description: 'Added app.build attribute' }],\n  },\n  'app.identifier': {\n    brief: 'Version-independent application identifier, often a dotted bundle ID.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'com.example.myapp',\n    aliases: ['app.app_identifier'],\n    changelog: [{ version: '0.5.0', prs: [296], description: 'Added app.identifier attribute' }],\n  },\n  'app.in_foreground': {\n    brief: 'Whether the application is currently in the foreground.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.5.0', prs: [296], description: 'Added app.in_foreground attribute' }],\n  },\n  'app.name': {\n    brief: 'Human readable application name, as it appears on the platform.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'My App',\n    aliases: ['app.app_name'],\n    changelog: [{ version: '0.5.0', prs: [296], description: 'Added app.name attribute' }],\n  },\n  app_start_cold: {\n    brief: 'The duration of a cold app start in milliseconds',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1234.56,\n    deprecation: {\n      replacement: 'app.vitals.start.cold.value',\n      reason:\n        'Replaced by app.vitals.start.cold.value to align with the app.vitals.* namespace for mobile performance attributes',\n    },\n    aliases: ['app.vitals.start.cold.value'],\n    changelog: [\n      { version: '0.5.0', prs: [323], description: 'Added and deprecated in favor of app.vitals.start.cold.value' },\n    ],\n  },\n  'app.start_time': {\n    brief: 'Formatted UTC timestamp when the user started the application.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '2025-01-01T00:00:00.000Z',\n    aliases: ['app.app_start_time'],\n    changelog: [{ version: '0.5.0', prs: [296], description: 'Added app.start_time attribute' }],\n  },\n  app_start_type: {\n    brief: 'Mobile app start variant. Either cold or warm.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'cold',\n    deprecation: {\n      replacement: 'app.vitals.start.type',\n      reason:\n        'Replaced by app.vitals.start.type to align with the app.vitals.* namespace for mobile performance attributes',\n    },\n    aliases: ['app.vitals.start.type'],\n    changelog: [\n      { version: '0.5.0', prs: [313], description: 'Deprecated in favor of app.vitals.start.type' },\n      { version: '0.1.0', prs: [127] },\n      { version: '0.0.0' },\n    ],\n  },\n  app_start_warm: {\n    brief: 'The duration of a warm app start in milliseconds',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1234.56,\n    deprecation: {\n      replacement: 'app.vitals.start.warm.value',\n      reason:\n        'Replaced by app.vitals.start.warm.value to align with the app.vitals.* namespace for mobile performance attributes',\n    },\n    aliases: ['app.vitals.start.warm.value'],\n    changelog: [\n      { version: '0.5.0', prs: [323], description: 'Added and deprecated in favor of app.vitals.start.warm.value' },\n    ],\n  },\n  'app.version': {\n    brief: 'Human readable application version, as it appears on the platform.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '1.0.0',\n    aliases: ['app.app_version'],\n    changelog: [{ version: '0.5.0', prs: [296], description: 'Added app.version attribute' }],\n  },\n  'app.vitals.frames.delay.value': {\n    brief:\n      '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/).',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 5,\n    aliases: ['frames.delay'],\n    changelog: [\n      { version: '0.5.0', prs: [313], description: 'Added app.vitals.frames.delay.value to replace frames.delay' },\n    ],\n  },\n  'app.vitals.frames.frozen.count': {\n    brief: 'The number of frozen frames rendered during the lifetime of the span.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 3,\n    aliases: ['frames.frozen'],\n    changelog: [\n      { version: '0.5.0', prs: [313], description: 'Added app.vitals.frames.frozen.count to replace frames.frozen' },\n    ],\n  },\n  'app.vitals.frames.slow.count': {\n    brief: 'The number of slow frames rendered during the lifetime of the span.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1,\n    aliases: ['frames.slow'],\n    changelog: [\n      { version: '0.5.0', prs: [313], description: 'Added app.vitals.frames.slow.count to replace frames.slow' },\n    ],\n  },\n  'app.vitals.frames.total.count': {\n    brief: 'The number of total frames rendered during the lifetime of the span.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 60,\n    aliases: ['frames.total'],\n    changelog: [\n      { version: '0.5.0', prs: [313], description: 'Added app.vitals.frames.total.count to replace frames.total' },\n    ],\n  },\n  'app.vitals.start.cold.value': {\n    brief: 'The duration of a cold app start in milliseconds',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1234.56,\n    aliases: ['app_start_cold'],\n    changelog: [{ version: '0.5.0', prs: [313], description: 'Added app.vitals.start.cold.value attribute' }],\n  },\n  'app.vitals.start.prewarmed': {\n    brief: 'Whether the app start was prewarmed.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.11.0', prs: [379], description: 'Added app.vitals.start.prewarmed attribute' }],\n  },\n  'app.vitals.start.reason': {\n    brief: 'The reason that triggered the app start.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'push',\n    changelog: [{ version: '0.7.0', prs: [353], description: 'Added app.vitals.start.reason attribute' }],\n  },\n  'app.vitals.start.screen': {\n    brief:\n      '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.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'MainActivity',\n    changelog: [{ version: '0.7.0', prs: [353], description: 'Added app.vitals.start.screen attribute' }],\n  },\n  'app.vitals.start.type': {\n    brief: 'The type of app start, for example `cold` or `warm`',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'cold',\n    aliases: ['app_start_type'],\n    changelog: [{ version: '0.5.0', prs: [313], description: 'Added app.vitals.start.type attribute' }],\n  },\n  'app.vitals.start.warm.value': {\n    brief: 'The duration of a warm app start in milliseconds',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1234.56,\n    aliases: ['app_start_warm'],\n    changelog: [{ version: '0.5.0', prs: [313], description: 'Added app.vitals.start.warm.value attribute' }],\n  },\n  'app.vitals.ttfd.value': {\n    brief: 'The duration of time to full display in milliseconds',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1234.56,\n    aliases: ['time_to_full_display'],\n    changelog: [{ version: '0.5.0', prs: [313], description: 'Added app.vitals.ttfd.value attribute' }],\n  },\n  'app.vitals.ttid.value': {\n    brief: 'The duration of time to initial display in milliseconds',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1234.56,\n    aliases: ['time_to_initial_display'],\n    changelog: [{ version: '0.5.0', prs: [313], description: 'Added app.vitals.ttid.value attribute' }],\n  },\n  'art.gc.blocking_count': {\n    brief: 'Total number of blocking (stop-the-world) garbage collections performed by the Android Runtime',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1,\n    changelog: [{ version: '0.11.0', prs: [382], description: 'Added art.gc.blocking_count attribute' }],\n  },\n  'art.gc.blocking_time': {\n    brief: 'Total time spent in blocking (stop-the-world) garbage collections by the Android Runtime, in milliseconds',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 11.873,\n    changelog: [{ version: '0.11.0', prs: [382], description: 'Added art.gc.blocking_time attribute' }],\n  },\n  'art.gc.pre_oome_count': {\n    brief:\n      'Total number of garbage collections triggered as a last resort before an OutOfMemoryError by the Android Runtime',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 0,\n    changelog: [{ version: '0.11.0', prs: [382], description: 'Added art.gc.pre_oome_count attribute' }],\n  },\n  'art.gc.total_count': {\n    brief: 'Total number of garbage collections performed by the Android Runtime',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1,\n    changelog: [{ version: '0.11.0', prs: [382], description: 'Added art.gc.total_count attribute' }],\n  },\n  'art.gc.total_time': {\n    brief: 'Total time spent in garbage collection by the Android Runtime, in milliseconds',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 11.807,\n    changelog: [{ version: '0.11.0', prs: [382], description: 'Added art.gc.total_time attribute' }],\n  },\n  'art.gc.waiting_time': {\n    brief:\n      'Total time threads spent waiting for garbage collection to complete in the Android Runtime, in milliseconds',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 8.054,\n    changelog: [{ version: '0.11.0', prs: [382], description: 'Added art.gc.waiting_time attribute' }],\n  },\n  'art.memory.free': {\n    brief: 'Free memory available to the process as reported by the Android Runtime, in bytes',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 3181568,\n    changelog: [{ version: '0.11.0', prs: [382], description: 'Added art.memory.free attribute' }],\n  },\n  'art.memory.free_until_gc': {\n    brief: 'Free memory available before a garbage collection would be triggered by the Android Runtime, in bytes',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 3181568,\n    changelog: [{ version: '0.11.0', prs: [382], description: 'Added art.memory.free_until_gc attribute' }],\n  },\n  'art.memory.free_until_oome': {\n    brief: 'Free memory available before an OutOfMemoryError would be thrown by the Android Runtime, in bytes',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 196083712,\n    changelog: [{ version: '0.11.0', prs: [382], description: 'Added art.memory.free_until_oome attribute' }],\n  },\n  'art.memory.max': {\n    brief: 'Maximum memory the process is allowed to use as reported by the Android Runtime, in bytes',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 201326592,\n    changelog: [{ version: '0.11.0', prs: [382], description: 'Added art.memory.max attribute' }],\n  },\n  'art.memory.total': {\n    brief: 'Total memory currently allocated to the process by the Android Runtime, in bytes',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 7774208,\n    changelog: [{ version: '0.11.0', prs: [382], description: 'Added art.memory.total attribute' }],\n  },\n  'aws.cloudwatch.logs.log_group': {\n    brief: 'The name of the CloudWatch Logs log group',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '/aws/lambda/my-function',\n    changelog: [{ version: '0.7.0', prs: [369], description: 'Added aws.cloudwatch.logs.log_group attribute' }],\n  },\n  'aws.cloudwatch.logs.log_stream': {\n    brief: 'The name of the CloudWatch Logs log stream',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '2024/01/01/[$LATEST]abcdef1234567890',\n    changelog: [{ version: '0.7.0', prs: [369], description: 'Added aws.cloudwatch.logs.log_stream attribute' }],\n  },\n  'aws.cloudwatch.logs.url': {\n    brief: 'The URL to the CloudWatch Logs log group',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logsV2:log-groups/log-group/my-log-group',\n    changelog: [{ version: '0.7.0', prs: [369], description: 'Added aws.cloudwatch.logs.url attribute' }],\n  },\n  'aws.dynamodb.attribute_definitions': {\n    brief: 'The JSON-serialized value of each item in the `AttributeDefinitions` request field.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: ['{ \"AttributeName\": \"string\", \"AttributeType\": \"string\" }'],\n    changelog: [{ version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.attribute_definitions attribute' }],\n  },\n  'aws.dynamodb.consistent_read': {\n    brief: 'The value of the `ConsistentRead` request parameter.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.consistent_read attribute' }],\n  },\n  'aws.dynamodb.consumed_capacity': {\n    brief: 'The JSON-serialized value of each item in the `ConsumedCapacity` response field.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: [\n      '{ \"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 }',\n    ],\n    changelog: [{ version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.consumed_capacity attribute' }],\n  },\n  'aws.dynamodb.count': {\n    brief: 'The value of the `Count` response parameter.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 10,\n    changelog: [{ version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.count attribute' }],\n  },\n  'aws.dynamodb.exclusive_start_table': {\n    brief: 'The value of the `ExclusiveStartTableName` request parameter.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'Users',\n    changelog: [{ version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.exclusive_start_table attribute' }],\n  },\n  'aws.dynamodb.global_secondary_indexes': {\n    brief: 'The JSON-serialized value of each item of the `GlobalSecondaryIndexes` request field.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: [\n      '{ \"IndexName\": \"string\", \"KeySchema\": [ { \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" }, \"ProvisionedThroughput\": { \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }',\n    ],\n    changelog: [\n      { version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.global_secondary_indexes attribute' },\n    ],\n  },\n  'aws.dynamodb.global_secondary_index_updates': {\n    brief: 'The JSON-serialized value of each item in the `GlobalSecondaryIndexUpdates` request field.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: [\n      '{ \"Create\": { \"IndexName\": \"string\", \"KeySchema\": [ { \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" }, \"ProvisionedThroughput\": { \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }',\n    ],\n    changelog: [\n      { version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.global_secondary_index_updates attribute' },\n    ],\n  },\n  'aws.dynamodb.index_name': {\n    brief: 'The value of the `IndexName` request parameter.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'name_to_group',\n    changelog: [{ version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.index_name attribute' }],\n  },\n  'aws.dynamodb.item_collection_metrics': {\n    brief: 'The JSON-serialized value of the `ItemCollectionMetrics` response field.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example:\n      '{ \"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 ] } ] }',\n    changelog: [{ version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.item_collection_metrics attribute' }],\n  },\n  'aws.dynamodb.limit': {\n    brief: 'The value of the `Limit` request parameter.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 10,\n    changelog: [{ version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.limit attribute' }],\n  },\n  'aws.dynamodb.local_secondary_indexes': {\n    brief: 'The JSON-serialized value of each item of the `LocalSecondaryIndexes` request field.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: [\n      '{ \"IndexArn\": \"string\", \"IndexName\": \"string\", \"IndexSizeBytes\": number, \"ItemCount\": number, \"KeySchema\": [ { \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" } }',\n    ],\n    changelog: [{ version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.local_secondary_indexes attribute' }],\n  },\n  'aws.dynamodb.projection': {\n    brief: 'The value of the `ProjectionExpression` request parameter.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'Title, Price, Color',\n    changelog: [{ version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.projection attribute' }],\n  },\n  'aws.dynamodb.provisioned_read_capacity': {\n    brief: 'The value of the `ProvisionedThroughput.ReadCapacityUnits` request parameter.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 1,\n    changelog: [\n      { version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.provisioned_read_capacity attribute' },\n    ],\n  },\n  'aws.dynamodb.provisioned_write_capacity': {\n    brief: 'The value of the `ProvisionedThroughput.WriteCapacityUnits` request parameter.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 2,\n    changelog: [\n      { version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.provisioned_write_capacity attribute' },\n    ],\n  },\n  'aws.dynamodb.scanned_count': {\n    brief: 'The value of the `ScannedCount` response parameter.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 50,\n    changelog: [{ version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.scanned_count attribute' }],\n  },\n  'aws.dynamodb.scan_forward': {\n    brief: 'The value of the `ScanIndexForward` request parameter.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.scan_forward attribute' }],\n  },\n  'aws.dynamodb.segment': {\n    brief: 'The value of the `Segment` request parameter.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 10,\n    changelog: [{ version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.segment attribute' }],\n  },\n  'aws.dynamodb.select': {\n    brief: 'The value of the `Select` request parameter.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'ALL_ATTRIBUTES',\n    changelog: [{ version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.select attribute' }],\n  },\n  'aws.dynamodb.table_count': {\n    brief: 'The number of items in the `TableNames` response parameter.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 20,\n    changelog: [{ version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.table_count attribute' }],\n  },\n  'aws.dynamodb.table_names': {\n    brief: 'The keys in the `RequestItems` object field.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: ['Users', 'Cats'],\n    changelog: [{ version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.table_names attribute' }],\n  },\n  'aws.dynamodb.total_segments': {\n    brief: 'The value of the `TotalSegments` request parameter.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 100,\n    changelog: [{ version: '0.16.0', prs: [479], description: 'Added aws.dynamodb.total_segments attribute' }],\n  },\n  'aws.extended_request_id': {\n    brief: 'The AWS extended request ID as returned in the response headers.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=',\n    aliases: ['aws.request.extended_id'],\n    changelog: [{ version: '0.16.0', prs: [480], description: 'Added aws.extended_request_id attribute' }],\n  },\n  'aws.kinesis.stream_name': {\n    brief: 'The name of the AWS Kinesis stream the request refers to.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'some-stream-name',\n    aliases: ['aws.kinesis.stream.name'],\n    changelog: [{ version: '0.16.0', prs: [480], description: 'Added aws.kinesis.stream_name attribute' }],\n  },\n  'aws.kinesis.stream.name': {\n    brief: 'The name of the AWS Kinesis stream the request refers to.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'some-stream-name',\n    deprecation: {\n      replacement: 'aws.kinesis.stream_name',\n      reason:\n        'This attribute is being deprecated in favor of aws.kinesis.stream_name, which is the OTel-aligned replacement.',\n    },\n    aliases: ['aws.kinesis.stream_name'],\n    changelog: [\n      {\n        version: '0.16.0',\n        prs: [480],\n        description: 'Added aws.kinesis.stream.name attribute, deprecated in favor of aws.kinesis.stream_name',\n      },\n    ],\n  },\n  'aws.lambda.aws_request_id': {\n    brief: 'The AWS request ID as received by the Lambda function runtime',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '8476a536-e9f4-11e8-9739-2dfe598c3fcd',\n    deprecation: {\n      replacement: 'faas.invocation_id',\n      reason: 'This attribute is being deprecated in favor of faas.invocation_id',\n    },\n    aliases: ['faas.invocation_id', 'faas.execution'],\n    changelog: [\n      { version: '0.16.0', prs: [473], description: 'Added faas.execution as an alias' },\n      {\n        version: '0.11.1',\n        prs: [414, 424],\n        description: 'Deprecated aws.lambda.aws_request_id in favor of faas.invocation_id',\n      },\n      { version: '0.7.0', prs: [369], description: 'Added aws.lambda.aws_request_id attribute' },\n    ],\n  },\n  'aws.lambda.execution_duration_in_millis': {\n    brief: 'The execution duration of the Lambda function invocation in milliseconds',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1234.56,\n    changelog: [\n      { version: '0.7.0', prs: [369], description: 'Added aws.lambda.execution_duration_in_millis attribute' },\n    ],\n  },\n  'aws.lambda.function_name': {\n    brief: 'The name of the Lambda function',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'my-function',\n    deprecation: {\n      replacement: 'faas.name',\n      reason: 'Use the OTel-aligned faas.name attribute instead',\n    },\n    aliases: ['faas.name'],\n    changelog: [\n      { version: '0.11.1', prs: [414], description: 'Deprecated aws.lambda.function_name in favor of faas.name' },\n      { version: '0.7.0', prs: [369], description: 'Added aws.lambda.function_name attribute' },\n    ],\n  },\n  'aws.lambda.function_version': {\n    brief: 'The version of the Lambda function',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '$LATEST',\n    deprecation: {\n      replacement: 'faas.version',\n      reason: 'Use the OTel-aligned faas.version attribute instead',\n    },\n    aliases: ['faas.version'],\n    changelog: [\n      {\n        version: '0.11.1',\n        prs: [414, 424],\n        description: 'Deprecated aws.lambda.function_version in favor of faas.version',\n      },\n      { version: '0.7.0', prs: [369], description: 'Added aws.lambda.function_version attribute' },\n    ],\n  },\n  'aws.lambda.invoked_arn': {\n    brief: 'The full ARN of the Lambda function that was invoked',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'arn:aws:lambda:us-east-1:123456789012:function:my-function',\n    aliases: ['aws.lambda.invoked_function_arn'],\n    changelog: [{ version: '0.11.1', prs: [414] }],\n  },\n  'aws.lambda.invoked_function_arn': {\n    brief: 'The full ARN of the Lambda function that was invoked',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'arn:aws:lambda:us-east-1:123456789012:function:my-function',\n    deprecation: {\n      replacement: 'aws.lambda.invoked_arn',\n      reason: 'This attribute is being deprecated in favor of aws.lambda.invoked_arn',\n    },\n    aliases: ['aws.lambda.invoked_arn'],\n    changelog: [\n      {\n        version: '0.11.1',\n        prs: [414],\n        description: 'Deprecated aws.lambda.invoked_function_arn in favor of aws.lambda.invoked_arn',\n      },\n      { version: '0.7.0', prs: [369], description: 'Added aws.lambda.invoked_function_arn attribute' },\n    ],\n  },\n  'aws.lambda.remaining_time_in_millis': {\n    brief: 'The remaining time in milliseconds before the Lambda function times out',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 5000,\n    changelog: [{ version: '0.7.0', prs: [369], description: 'Added aws.lambda.remaining_time_in_millis attribute' }],\n  },\n  'aws.log.group.names': {\n    brief: 'The name(s) of the AWS log group(s) an application is writing to.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: ['/aws/lambda/my-function', 'opentelemetry-service'],\n    changelog: [{ version: '0.11.1', prs: [414] }],\n  },\n  'aws.log.stream.names': {\n    brief: 'The name(s) of the AWS log stream(s) an application is writing to.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: ['logs/main/10838bed-421f-43ef-870a-f43feacbbb5b'],\n    changelog: [{ version: '0.11.1', prs: [414] }],\n  },\n  'aws.request.extended_id': {\n    brief: 'The AWS extended request ID as returned in the response headers.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=',\n    deprecation: {\n      replacement: 'aws.extended_request_id',\n      reason:\n        'This attribute is being deprecated in favor of aws.extended_request_id, which is the OTel-aligned replacement.',\n    },\n    aliases: ['aws.extended_request_id'],\n    changelog: [\n      {\n        version: '0.16.0',\n        prs: [480],\n        description: 'Added aws.request.extended_id attribute, deprecated in favor of aws.extended_request_id',\n      },\n    ],\n  },\n  'aws.request_id': {\n    brief: 'The AWS request ID as returned in the response headers.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '79b9da39-b7ae-508a-a6bc-864b2829c622',\n    aliases: ['aws.request.id'],\n    changelog: [{ version: '0.16.0', prs: [480], description: 'Added aws.request_id attribute' }],\n  },\n  'aws.request.id': {\n    brief: 'The AWS request ID as returned in the response headers.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '79b9da39-b7ae-508a-a6bc-864b2829c622',\n    deprecation: {\n      replacement: 'aws.request_id',\n      reason: 'This attribute is being deprecated in favor of aws.request_id, which is the OTel-aligned replacement.',\n    },\n    aliases: ['aws.request_id'],\n    changelog: [\n      {\n        version: '0.16.0',\n        prs: [480],\n        description: 'Added aws.request.id attribute, deprecated in favor of aws.request_id',\n      },\n    ],\n  },\n  'aws.s3.bucket': {\n    brief: 'The S3 bucket name the request refers to.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'ot-demo-test',\n    changelog: [{ version: '0.16.0', prs: [480], description: 'Added aws.s3.bucket attribute' }],\n  },\n  'aws.secretsmanager.secret.arn': {\n    brief: 'The ARN of the Secret stored in Secrets Manager.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'arn:aws:secretsmanager:us-east-1:123456789012:secret:SecretName-6RandomCharacters',\n    changelog: [{ version: '0.16.0', prs: [480], description: 'Added aws.secretsmanager.secret.arn attribute' }],\n  },\n  'aws.sns.topic.arn': {\n    brief:\n      'The ARN of the AWS SNS Topic. An Amazon SNS topic is a logical access point that acts as a communication channel.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'arn:aws:sns:us-east-1:123456789012:mystack-mytopic-NZJ5JSMVGFIE',\n    changelog: [{ version: '0.16.0', prs: [480], description: 'Added aws.sns.topic.arn attribute' }],\n  },\n  'aws.step_functions.activity.arn': {\n    brief: 'The ARN of the AWS Step Functions Activity.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'arn:aws:states:us-east-1:123456789012:activity:get-greeting',\n    changelog: [{ version: '0.16.0', prs: [480], description: 'Added aws.step_functions.activity.arn attribute' }],\n  },\n  'aws.step_functions.state_machine.arn': {\n    brief: 'The ARN of the AWS Step Functions State Machine.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'arn:aws:states:us-east-1:123456789012:stateMachine:myStateMachine:1',\n    changelog: [{ version: '0.16.0', prs: [480], description: 'Added aws.step_functions.state_machine.arn attribute' }],\n  },\n  blocked_main_thread: {\n    brief: 'Whether the main thread was blocked by the span.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.0.0' }],\n  },\n  'browser.name': {\n    brief: 'The name of the browser.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Chrome',\n    aliases: ['sentry.browser.name'],\n    changelog: [{ version: '0.1.0', prs: [127, 139] }, { version: '0.0.0' }],\n  },\n  'browser.performance.navigation.activation_start': {\n    brief: 'The time between initiating a navigation to a page and the browser activating the page',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1.983,\n    aliases: ['performance.activationStart'],\n    changelog: [\n      { version: '0.5.0', prs: [321], description: 'Added browser.performance.navigation.activation_start attribute' },\n    ],\n  },\n  'browser.performance.time_origin': {\n    brief: \"The browser's performance.timeOrigin timestamp representing the time when the pageload was initiated\",\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1776185678.886,\n    aliases: ['performance.timeOrigin'],\n    changelog: [\n      { version: '0.5.0', prs: [321], description: 'Added browser.performance.time_origin attribute attribute' },\n    ],\n  },\n  'browser.report.type': {\n    brief: 'A browser report sent via reporting API..',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'network-error',\n    changelog: [{ version: '0.1.0', prs: [68, 127] }],\n  },\n  'browser.script.invoker': {\n    brief: 'How a script was called in the browser.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Window.requestAnimationFrame',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'browser.script.invoker_type': {\n    brief: 'Browser script entry point type.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'event-listener',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'browser.script.source_char_position': {\n    brief: 'A number representing the script character position of the script.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 678,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'browser.version': {\n    brief: 'The version of the browser.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '120.0.6099.130',\n    aliases: ['sentry.browser.version'],\n    changelog: [{ version: '0.1.0', prs: [59, 127, 139] }],\n  },\n  'browser.web_vital.cls.report_event': {\n    brief: 'The event that caused the SDK to report CLS (pagehide or navigation)',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'navigation',\n    changelog: [{ version: '0.5.0', prs: [319], description: 'Added browser.web_vital.cls.report_event attribute' }],\n  },\n  'browser.web_vital.cls.source.<key>': {\n    brief: 'The HTML elements or components responsible for the layout shift. <key> is a numeric index from 1 to N',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    hasDynamicSuffix: true,\n    example: 'body > div#app',\n    aliases: ['cls.source.<key>'],\n    changelog: [{ version: '0.5.0', prs: [234] }],\n  },\n  'browser.web_vital.cls.value': {\n    brief: 'The value of the recorded Cumulative Layout Shift (CLS) web vital',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 0.2361,\n    aliases: ['cls'],\n    changelog: [{ version: '0.5.0', prs: [229], description: 'Added browser.web_vital.cls.value attribute' }],\n  },\n  'browser.web_vital.fcp.value': {\n    brief: 'The time it takes for the browser to render the first piece of meaningful content on the screen',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 547.6951,\n    aliases: ['fcp'],\n    changelog: [{ version: '0.5.0', prs: [235] }],\n  },\n  'browser.web_vital.fp.value': {\n    brief: 'The time in milliseconds it takes for the browser to render the first pixel on the screen',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 477.1926,\n    aliases: ['fp'],\n    changelog: [{ version: '0.5.0', prs: [235] }],\n  },\n  'browser.web_vital.inp.value': {\n    brief: 'The value of the recorded Interaction to Next Paint (INP) web vital',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 200,\n    aliases: ['inp'],\n    changelog: [{ version: '0.5.0', prs: [229], description: 'Added browser.web_vital.inp.value attribute' }],\n  },\n  'browser.web_vital.lcp.element': {\n    brief: 'The HTML element selector or component name for which LCP was reported',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'body > div#app > div#container > div',\n    aliases: ['lcp.element'],\n    changelog: [{ version: '0.5.0', prs: [233] }],\n  },\n  'browser.web_vital.lcp.id': {\n    brief: 'The id of the dom element responsible for the largest contentful paint',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '#gero',\n    aliases: ['lcp.id'],\n    changelog: [{ version: '0.5.0', prs: [233] }],\n  },\n  'browser.web_vital.lcp.load_time': {\n    brief: 'The time it took for the LCP element to be loaded',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1402,\n    aliases: ['lcp.loadTime'],\n    changelog: [{ version: '0.5.0', prs: [233] }],\n  },\n  'browser.web_vital.lcp.render_time': {\n    brief: 'The time it took for the LCP element to be rendered',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1685,\n    aliases: ['lcp.renderTime'],\n    changelog: [{ version: '0.5.0', prs: [233] }],\n  },\n  'browser.web_vital.lcp.report_event': {\n    brief: 'The event that caused the SDK to report LCP (pagehide or navigation)',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'pagehide',\n    changelog: [{ version: '0.5.0', prs: [319], description: 'Added browser.web_vital.lcp.report_event attribute' }],\n  },\n  'browser.web_vital.lcp.size': {\n    brief: 'The size of the largest contentful paint element',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1024,\n    aliases: ['lcp.size'],\n    changelog: [{ version: '0.5.0', prs: [233] }],\n  },\n  'browser.web_vital.lcp.url': {\n    brief: 'The url of the dom element responsible for the largest contentful paint',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'https://example.com/static/img.png',\n    aliases: ['lcp.url'],\n    changelog: [{ version: '0.5.0', prs: [233] }],\n  },\n  'browser.web_vital.lcp.value': {\n    brief: 'The value of the recorded Largest Contentful Paint (LCP) web vital',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 2500,\n    aliases: ['lcp'],\n    changelog: [{ version: '0.5.0', prs: [229], description: 'Added browser.web_vital.lcp.value attribute' }],\n  },\n  'browser.web_vital.ttfb.request_time': {\n    brief:\n      \"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\",\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1554.5814,\n    aliases: ['ttfb.requestTime'],\n    changelog: [{ version: '0.5.0', prs: [235] }],\n  },\n  'browser.web_vital.ttfb.value': {\n    brief: 'The value of the recorded Time To First Byte (TTFB) web vital in Milliseconds',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 194.3322,\n    aliases: ['ttfb'],\n    changelog: [{ version: '0.5.0', prs: [235] }],\n  },\n  'cache.hit': {\n    brief: 'If the cache was hit during this span.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.0.0' }],\n  },\n  'cache.item_size': {\n    brief: 'The size of the requested item in the cache. In bytes.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 58,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'cache.key': {\n    brief: 'The key of the cache accessed.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: ['my-cache-key', 'my-other-cache-key'],\n    changelog: [{ version: '0.0.0' }],\n  },\n  'cache.operation': {\n    brief: 'The operation being performed on the cache.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'get',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'cache.ttl': {\n    brief: 'The ttl of the cache in seconds',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 120,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'cache.write': {\n    brief: 'If the cache operation resulted in a write to the cache.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.5.0' }],\n  },\n  channel: {\n    brief: 'The channel name that is being used.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'mail',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'client.address': {\n    brief:\n      'Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'example.com',\n    aliases: ['http.client_ip'],\n    changelog: [{ version: '0.1.0', prs: [106, 127] }, { version: '0.0.0' }],\n  },\n  'client.port': {\n    brief: 'Client port number.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 5432,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'cloudflare.d1.duration': {\n    brief: 'The duration of a Cloudflare D1 operation.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 543,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'cloudflare.d1.query_type': {\n    brief: 'The type of query executed in a Cloudflare D1 operation',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'run',\n    deprecation: {\n      replacement: 'db.operation.name',\n    },\n    aliases: ['db.operation.name', 'db.operation'],\n    changelog: [{ version: '0.11.0', prs: [392], description: 'Added cloudflare.d1.query_type attribute' }],\n  },\n  'cloudflare.d1.rows_read': {\n    brief: 'The number of rows read in a Cloudflare D1 operation.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 12,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'cloudflare.d1.rows_written': {\n    brief: 'The number of rows written in a Cloudflare D1 operation.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 12,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'cloudflare.durable_object.query.bindings': {\n    brief: 'The number of bound parameters passed to the SQL exec call.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 2,\n    changelog: [\n      { version: '0.13.0', prs: [435], description: 'Added cloudflare.durable_object.query.bindings attribute' },\n    ],\n  },\n  'cloudflare.durable_object.response.rows_read': {\n    brief: 'The number of rows read by a Cloudflare Durable Object SQL operation.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 12,\n    changelog: [\n      { version: '0.13.0', prs: [435], description: 'Added cloudflare.durable_object.response.rows_read attribute' },\n    ],\n  },\n  'cloudflare.durable_object.response.rows_written': {\n    brief: 'The number of rows written by a Cloudflare Durable Object SQL operation.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1,\n    changelog: [\n      { version: '0.13.0', prs: [435], description: 'Added cloudflare.durable_object.response.rows_written attribute' },\n    ],\n  },\n  'cloudflare.r2.bucket': {\n    brief: 'The name of the Cloudflare R2 bucket binding',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'MY_BUCKET',\n    changelog: [{ version: '0.11.1', prs: [413], description: 'Added cloudflare.r2.bucket attribute' }],\n  },\n  'cloudflare.r2.operation': {\n    brief: 'The R2 API operation being performed',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'GetObject',\n    changelog: [{ version: '0.11.1', prs: [413], description: 'Added cloudflare.r2.operation attribute' }],\n  },\n  'cloudflare.r2.request.delimiter': {\n    brief: 'The delimiter used to group objects in an R2 list operation',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '/',\n    changelog: [{ version: '0.11.1', prs: [413], description: 'Added cloudflare.r2.request.delimiter attribute' }],\n  },\n  'cloudflare.r2.request.key': {\n    brief: 'The object key used in the R2 operation',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'my-file.txt',\n    changelog: [{ version: '0.11.1', prs: [413], description: 'Added cloudflare.r2.request.key attribute' }],\n  },\n  'cloudflare.r2.request.part_number': {\n    brief: 'The part number in a multipart upload operation',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1,\n    changelog: [{ version: '0.11.1', prs: [413], description: 'Added cloudflare.r2.request.part_number attribute' }],\n  },\n  'cloudflare.r2.request.prefix': {\n    brief: 'The prefix used to filter objects in an R2 list operation',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'images/',\n    changelog: [{ version: '0.11.1', prs: [413], description: 'Added cloudflare.r2.request.prefix attribute' }],\n  },\n  'cloudflare.workflow.attempt': {\n    brief: 'The current attempt number for a Cloudflare Workflow step',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1,\n    changelog: [{ version: '0.11.0', prs: [392], description: 'Added cloudflare.workflow.attempt attribute' }],\n  },\n  'cloudflare.workflow.retries.backoff': {\n    brief: 'The backoff strategy for Cloudflare Workflow step retries',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'exponential',\n    changelog: [{ version: '0.11.0', prs: [392], description: 'Added cloudflare.workflow.retries.backoff attribute' }],\n  },\n  'cloudflare.workflow.retries.delay': {\n    brief: 'The delay between Cloudflare Workflow step retries',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '5 seconds',\n    changelog: [{ version: '0.11.0', prs: [392], description: 'Added cloudflare.workflow.retries.delay attribute' }],\n  },\n  'cloudflare.workflow.retries.limit': {\n    brief: 'The maximum number of retries for a Cloudflare Workflow step',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 3,\n    changelog: [{ version: '0.11.0', prs: [392], description: 'Added cloudflare.workflow.retries.limit attribute' }],\n  },\n  'cloudflare.workflow.timeout': {\n    brief: 'The timeout duration for a Cloudflare Workflow step',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '1 minute',\n    changelog: [{ version: '0.11.0', prs: [392], description: 'Added cloudflare.workflow.timeout attribute' }],\n  },\n  'cloud.account.id': {\n    brief: 'The cloud account ID the resource is assigned to',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '123456789012',\n    changelog: [{ version: '0.7.0', prs: [364], description: 'Added cloud.account.id attribute' }],\n  },\n  'cloud.availability_zone': {\n    brief: 'Cloud regions often have multiple, isolated locations known as zones to increase availability',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'us-east-1c',\n    changelog: [{ version: '0.7.0', prs: [364], description: 'Added cloud.availability_zone attribute' }],\n  },\n  'cloud.platform': {\n    brief: 'The cloud platform in use',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'aws_lambda',\n    changelog: [{ version: '0.7.0', prs: [364], description: 'Added cloud.platform attribute' }],\n  },\n  'cloud.provider': {\n    brief: 'Name of the cloud provider',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'aws',\n    changelog: [{ version: '0.7.0', prs: [364], description: 'Added cloud.provider attribute' }],\n  },\n  'cloud.region': {\n    brief: 'The geographical region the resource is running',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'us-east-1',\n    changelog: [{ version: '0.7.0', prs: [364], description: 'Added cloud.region attribute' }],\n  },\n  'cloud.resource_id': {\n    brief: 'Cloud provider-specific native identifier of the monitored cloud resource',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function',\n    aliases: ['faas.id'],\n    changelog: [\n      { version: '0.16.0', prs: [475], description: 'Added faas.id as an alias' },\n      { version: '0.11.1', prs: [414] },\n    ],\n    additionalContext: [\n      '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.',\n    ],\n  },\n  cls: {\n    brief: 'The value of the recorded Cumulative Layout Shift (CLS) web vital',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 0.2361,\n    deprecation: {\n      replacement: 'browser.web_vital.cls.value',\n      reason: 'The CLS web vital is now recorded as a browser.web_vital.cls.value attribute.',\n    },\n    aliases: ['browser.web_vital.cls.value'],\n    changelog: [\n      {\n        version: '0.5.0',\n        prs: [229],\n        description: \"Added and deprecated attribute to document JS SDK's current behaviour\",\n      },\n    ],\n  },\n  'cls.source.<key>': {\n    brief: 'The HTML elements or components responsible for the layout shift. <key> is a numeric index from 1 to N',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    hasDynamicSuffix: true,\n    example: 'body > div#app',\n    deprecation: {\n      replacement: 'browser.web_vital.cls.source.<key>',\n      reason: 'The CLS source is now recorded as a browser.web_vital.cls.source.<key> attribute.',\n    },\n    aliases: ['browser.web_vital.cls.source.<key>'],\n    changelog: [{ version: '0.5.0', prs: [234] }],\n  },\n  'code.filepath': {\n    brief:\n      'The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path).',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '/app/myapplication/http/handler/server.py',\n    deprecation: {\n      replacement: 'code.file.path',\n    },\n    aliases: ['code.file.path'],\n    changelog: [{ version: '0.1.0', prs: [61] }, { version: '0.0.0' }],\n  },\n  'code.file.path': {\n    brief:\n      'The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path).',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '/app/myapplication/http/handler/server.py',\n    aliases: ['code.filepath'],\n    changelog: [{ version: '0.0.0' }],\n  },\n  'code.function': {\n    brief: \"The method or function name, or equivalent (usually rightmost part of the code unit's name).\",\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'server_request',\n    aliases: ['code.function.name'],\n    changelog: [{ version: '0.1.0', prs: [61, 74] }, { version: '0.0.0' }],\n  },\n  'code.function.name': {\n    brief: 'The method or function fully-qualified name without arguments.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'server_request',\n    aliases: ['code.function'],\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'code.lineno': {\n    brief:\n      'The line number in code.filepath best representing the operation. It SHOULD point within the code unit named in code.function',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 42,\n    deprecation: {\n      replacement: 'code.line.number',\n    },\n    aliases: ['code.line.number'],\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [61, 108] }, { version: '0.0.0' }],\n  },\n  'code.line.number': {\n    brief:\n      'The line number in code.filepath best representing the operation. It SHOULD point within the code unit named in code.function',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 42,\n    aliases: ['code.lineno'],\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'code.namespace': {\n    brief:\n      \"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.\",\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'http.handler',\n    changelog: [{ version: '0.1.0', prs: [61, 74] }, { version: '0.0.0' }],\n  },\n  connectionType: {\n    brief: 'Specifies the type of the current connection (e.g. wifi, ethernet, cellular , etc).',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'wifi',\n    deprecation: {\n      replacement: 'network.connection.type',\n      reason: 'Old namespace-less attribute, to be replaced with network.connection.type for span-first future',\n    },\n    aliases: ['network.connection.type', 'device.connection_type'],\n    changelog: [\n      {\n        version: '0.5.0',\n        prs: [279],\n        description: \"Added and deprecated attribute to document JS SDK's current behaviour\",\n      },\n    ],\n  },\n  'connection.rtt': {\n    brief: 'Specifies the estimated effective round-trip time of the current connection, in milliseconds.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 100,\n    deprecation: {\n      replacement: 'network.connection.rtt',\n      reason:\n        'Old attribute name (no official namespace), to be replaced with network.connection.rtt for span-first future',\n    },\n    aliases: ['network.connection.rtt'],\n    changelog: [\n      {\n        version: '0.5.0',\n        prs: [279],\n        description: \"Added and deprecated attribute to document JS SDK's current behaviour\",\n      },\n    ],\n  },\n  'culture.calendar': {\n    brief: 'The calendar system used by the culture.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'GregorianCalendar',\n    changelog: [{ version: '0.4.0', prs: [243] }],\n  },\n  'culture.display_name': {\n    brief: 'Human readable name of the culture.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'English (United States)',\n    changelog: [{ version: '0.4.0', prs: [243] }],\n  },\n  'culture.is_24_hour_format': {\n    brief: 'Whether the culture uses 24-hour time format.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.4.0', prs: [243] }],\n  },\n  'culture.locale': {\n    brief: 'The locale identifier following RFC 4646.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'en-US',\n    changelog: [{ version: '0.4.0', prs: [243] }],\n  },\n  'culture.timezone': {\n    brief: 'The timezone of the culture, as a geographic timezone identifier.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Europe/Vienna',\n    changelog: [{ version: '0.4.0', prs: [243] }],\n  },\n  'db.collection.name': {\n    brief: 'The name of a collection (table, container) within the database.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'users',\n    changelog: [{ version: '0.1.0', prs: [106, 127] }, { version: '0.0.0' }],\n  },\n  'db.driver.name': {\n    brief: 'The name of the driver used for the database connection.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'psycopg2',\n    changelog: [{ version: '0.5.0', prs: [297], description: 'Added db.driver.name attribute' }],\n  },\n  'db.name': {\n    brief: 'The name of the database being accessed.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'customers',\n    deprecation: {\n      replacement: 'db.namespace',\n    },\n    aliases: ['db.namespace'],\n    changelog: [{ version: '0.1.0', prs: [61, 127] }, { version: '0.0.0' }],\n  },\n  'db.namespace': {\n    brief: 'The name of the database being accessed.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'customers',\n    aliases: ['db.name'],\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'db.operation': {\n    brief: 'The name of the operation being executed.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'SELECT',\n    deprecation: {\n      replacement: 'db.operation.name',\n    },\n    aliases: ['db.operation.name', 'cloudflare.d1.query_type'],\n    changelog: [{ version: '0.4.0', prs: [199] }, { version: '0.1.0', prs: [61, 127] }, { version: '0.0.0' }],\n  },\n  'db.operation.batch.size': {\n    brief:\n      '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.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 3,\n    changelog: [{ version: '0.11.0', prs: [407], description: 'Added db.operation.batch.size attribute' }],\n  },\n  'db.operation.name': {\n    brief: 'The name of the operation being executed.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'SELECT',\n    aliases: ['db.operation', 'cloudflare.d1.query_type'],\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'db.query.parameter.<key>': {\n    brief:\n      '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.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    hasDynamicSuffix: true,\n    example: \"db.query.parameter.foo='123'\",\n    changelog: [{ version: '0.1.0', prs: [103, 127] }],\n  },\n  'db.query.summary': {\n    brief:\n      'A shortened representation of operation(s) in the full query. This attribute must be low-cardinality and should only contain the operation table names.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'SELECT users',\n    changelog: [{ version: '0.4.0', prs: [208] }, { version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'db.query.text': {\n    brief:\n      '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.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'SELECT * FROM users WHERE id = $1',\n    aliases: ['db.statement'],\n    changelog: [{ version: '0.4.0', prs: [208] }, { version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'db.redis.connection': {\n    brief: 'The redis connection name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'my-redis-instance',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'db.redis.key': {\n    brief: 'The key the Redis command is operating on.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'user:2047:city',\n    changelog: [{ version: '0.6.0', prs: [326], description: 'Added db.redis.key attribute' }],\n  },\n  'db.redis.parameters': {\n    brief: 'The array of command parameters given to a redis command.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: ['test', '*'],\n    changelog: [{ version: '0.0.0' }],\n  },\n  'db.response.status_code': {\n    brief:\n      '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.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'ORA-17002',\n    changelog: [{ version: '0.16.0', prs: [462], description: 'Added db.response.status_code attribute' }],\n  },\n  'db.sql.bindings': {\n    brief: 'The array of query bindings.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: ['1', 'foo'],\n    deprecation: {\n      replacement: 'db.query.parameter.<key>',\n      reason:\n        'Instead of adding every binding in the db.sql.bindings attribute, add them as individual entires with db.query.parameter.<key>.',\n    },\n    changelog: [{ version: '0.1.0', prs: [61] }, { version: '0.0.0' }],\n  },\n  'db.statement': {\n    brief: 'The database statement being executed.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'SELECT * FROM users',\n    deprecation: {\n      replacement: 'db.query.text',\n    },\n    aliases: ['db.query.text'],\n    changelog: [{ version: '0.4.0', prs: [199] }, { version: '0.1.0', prs: [61, 127] }, { version: '0.0.0' }],\n  },\n  'db.stored_procedure.name': {\n    brief: 'The name of a stored procedure being called.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'GetUserById',\n    changelog: [{ version: '0.11.0', prs: [398] }],\n  },\n  'db.system': {\n    brief:\n      '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.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'postgresql',\n    deprecation: {\n      replacement: 'db.system.name',\n    },\n    aliases: ['db.system.name'],\n    changelog: [{ version: '0.4.0', prs: [199, 224] }, { version: '0.1.0', prs: [61, 127] }, { version: '0.0.0' }],\n  },\n  'db.system.name': {\n    brief:\n      '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.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'postgresql',\n    aliases: ['db.system'],\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'db.user': {\n    brief: 'The database user.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'fancy_user',\n    changelog: [{ version: '0.0.0' }],\n  },\n  deviceMemory: {\n    brief: 'The estimated total memory capacity of the device, only a rough estimation in gigabytes.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '8 GB',\n    deprecation: {\n      replacement: 'device.memory.estimated_capacity',\n      reason:\n        'Old namespace-less attribute, to be replaced with device.memory.estimated_capacity for span-first future',\n    },\n    aliases: ['device.memory.estimated_capacity'],\n    changelog: [\n      {\n        version: '0.5.0',\n        prs: [281],\n        description: \"Added and deprecated attribute to document JS SDK's current behaviour\",\n      },\n    ],\n  },\n  'device.archs': {\n    brief: 'The CPU architectures of the device.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: ['arm64-v8a', 'armeabi-v7a', 'armeabi'],\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.archs attribute' }],\n  },\n  'device.battery_level': {\n    brief: 'The battery level of the device as a percentage (0-100).',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 100,\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.battery_level attribute' }],\n  },\n  'device.battery_temperature': {\n    brief: 'The battery temperature of the device in Celsius.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 25,\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.battery_temperature attribute' }],\n  },\n  'device.boot_time': {\n    brief: 'A formatted UTC timestamp when the system was booted.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '2018-02-08T12:52:12Z',\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.boot_time attribute' }],\n  },\n  'device.brand': {\n    brief: 'The brand of the device.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Apple',\n    changelog: [{ version: '0.1.0', prs: [116, 127] }],\n  },\n  'device.charging': {\n    brief: 'Whether the device was charging or not.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: false,\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.charging attribute' }],\n  },\n  'device.chipset': {\n    brief: 'The chipset of the device.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Qualcomm SM8550',\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.chipset attribute' }],\n  },\n  'device.class': {\n    brief:\n      'The classification of the device. For example, `low`, `medium`, or `high`. Typically inferred by Relay - SDKs generally do not need to set this directly.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'medium',\n    changelog: [{ version: '0.5.0', prs: [300], description: 'Added device.class attribute' }],\n  },\n  'device.connection_type': {\n    brief: 'The internet connection type currently being used by the device.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'wifi',\n    deprecation: {\n      replacement: 'network.connection.type',\n      reason: 'This attribute is being deprecated in favor of network.connection.type',\n    },\n    aliases: ['network.connection.type', 'connectionType'],\n    changelog: [\n      {\n        version: '0.5.0',\n        prs: [303],\n        description: 'Added and deprecated device.connection_type in favor of network.connection.type',\n      },\n    ],\n  },\n  'device.cpu_description': {\n    brief: 'A description of the CPU of the device.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz',\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.cpu_description attribute' }],\n  },\n  'device.external_free_storage': {\n    brief: 'External storage free size in bytes.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 67108864000,\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.external_free_storage attribute' }],\n  },\n  'device.external_storage_size': {\n    brief: 'External storage total size in bytes.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 134217728000,\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.external_storage_size attribute' }],\n  },\n  'device.family': {\n    brief: 'The family of the device.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'iPhone',\n    changelog: [{ version: '0.1.0', prs: [116, 127] }],\n  },\n  'device.free_memory': {\n    brief: 'Free system memory in bytes.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 2147483648,\n    changelog: [{ version: '0.5.0', prs: [300], description: 'Added device.free_memory attribute' }],\n  },\n  'device.free_storage': {\n    brief: 'Free device storage in bytes.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 107374182400,\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.free_storage attribute' }],\n  },\n  'device.id': {\n    brief: 'Unique device identifier.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.id attribute' }],\n  },\n  'device.locale': {\n    brief: 'The locale of the device.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'en-US',\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.locale attribute' }],\n  },\n  'device.low_memory': {\n    brief: 'Whether the device was low on memory.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: false,\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.low_memory attribute' }],\n  },\n  'device.low_power_mode': {\n    brief: 'Whether the device is in Low Power Mode.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.6.0', prs: [314], description: 'Added device.low_power_mode attribute' }],\n  },\n  'device.manufacturer': {\n    brief: 'The manufacturer of the device.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'Google',\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.manufacturer attribute' }],\n  },\n  'device.memory.estimated_capacity': {\n    brief:\n      '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',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 8,\n    aliases: ['deviceMemory'],\n    changelog: [\n      {\n        version: '0.5.0',\n        prs: [281],\n        description: 'Added attribute device.memory.estimated_capacity to be used instead of deviceMemory',\n      },\n    ],\n  },\n  'device.memory_size': {\n    brief: 'Total system memory available in bytes.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 17179869184,\n    changelog: [{ version: '0.5.0', prs: [300], description: 'Added device.memory_size attribute' }],\n  },\n  'device.model': {\n    brief: 'The model of the device.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'iPhone 15 Pro Max',\n    changelog: [{ version: '0.1.0', prs: [116, 127] }],\n  },\n  'device.model_id': {\n    brief: 'An internal hardware revision to identify the device exactly.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'N861AP',\n    changelog: [{ version: '0.5.0', prs: [300], description: 'Added device.model_id attribute' }],\n  },\n  'device.name': {\n    brief:\n      'The name of the device. On mobile, this is the user-assigned device name. On servers and desktops, this is typically the hostname.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'localhost',\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.name attribute' }],\n  },\n  'device.online': {\n    brief: 'Whether the device was online or not.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.online attribute' }],\n  },\n  'device.orientation': {\n    brief: 'The orientation of the device, either \"portrait\" or \"landscape\".',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'portrait',\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.orientation attribute' }],\n  },\n  'device.processor_count': {\n    brief: 'Number of \"logical processors\".',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 8,\n    aliases: ['hardwareConcurrency'],\n    changelog: [\n      {\n        version: '0.5.0',\n        prs: [300],\n        description: 'Added and deprecated attribute device.processor_count in favor of device.cpu.logical_core_count',\n      },\n    ],\n  },\n  'device.processor_frequency': {\n    brief: 'Processor frequency in MHz.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 2400,\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.processor_frequency attribute' }],\n  },\n  'device.screen_density': {\n    brief: 'The screen density of the device.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 2.625,\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.screen_density attribute' }],\n  },\n  'device.screen_dpi': {\n    brief: 'The screen density in dots-per-inch (DPI) of the device.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 420,\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.screen_dpi attribute' }],\n  },\n  'device.screen_height_pixels': {\n    brief: 'The height of the device screen in pixels.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 2400,\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.screen_height_pixels attribute' }],\n  },\n  'device.screen_width_pixels': {\n    brief: 'The width of the device screen in pixels.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1080,\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.screen_width_pixels attribute' }],\n  },\n  'device.simulator': {\n    brief: 'Whether the device is a simulator or an actual device.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: false,\n    changelog: [{ version: '0.5.0', prs: [300], description: 'Added device.simulator attribute' }],\n  },\n  'device.storage_size': {\n    brief: 'Total device storage in bytes.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 274877906944,\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.storage_size attribute' }],\n  },\n  'device.thermal_state': {\n    brief:\n      \"The thermal state of the device. Based on Apple's `ProcessInfo.ThermalState` enum: `nominal`, `fair`, `serious`, or `critical`.\",\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'nominal',\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.thermal_state attribute' }],\n  },\n  'device.timezone': {\n    brief: 'The timezone of the device.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Europe/Vienna',\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.timezone attribute' }],\n  },\n  'device.usable_memory': {\n    brief: 'Memory usable for the app in bytes.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 2147483648,\n    changelog: [{ version: '0.5.0', prs: [303], description: 'Added device.usable_memory attribute' }],\n  },\n  dist: {\n    brief: 'The sentry dist.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '1.0',\n    deprecation: {\n      replacement: 'sentry.dist',\n      reason: 'This attribute is being deprecated in favor of sentry.dist.',\n    },\n    aliases: ['sentry.dist'],\n    changelog: [{ version: '0.16.0', prs: [489], description: 'Added dist attribute' }],\n  },\n  effectiveConnectionType: {\n    brief: 'Specifies the estimated effective type of the current connection (e.g. slow-2g, 2g, 3g, 4g).',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '4g',\n    deprecation: {\n      replacement: 'network.connection.effective_type',\n      reason:\n        'Old namespace-less attribute, to be replaced with network.connection.effective_type for span-first future',\n    },\n    aliases: ['network.connection.effective_type'],\n    changelog: [\n      {\n        version: '0.5.0',\n        prs: [279],\n        description: \"Added and deprecated attribute to document JS SDK's current behaviour\",\n      },\n    ],\n  },\n  environment: {\n    brief: 'The sentry environment.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'production',\n    deprecation: {\n      replacement: 'sentry.environment',\n    },\n    aliases: ['sentry.environment'],\n    changelog: [{ version: '0.1.0', prs: [61, 127] }, { version: '0.0.0' }],\n  },\n  'error.type': {\n    brief: 'Describes a class of error the operation ended with.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'timeout',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'event.id': {\n    brief: 'The unique identifier for this event (log record)',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1234567890,\n    changelog: [{ version: '0.1.0', prs: [101] }],\n  },\n  'event.name': {\n    brief: 'The name that uniquely identifies this event (log record)',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Process Payload',\n    changelog: [{ version: '0.1.0', prs: [101, 127] }],\n  },\n  'exception.escaped': {\n    brief:\n      '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.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.0.0' }],\n  },\n  'exception.message': {\n    brief: 'The error message.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'ENOENT: no such file or directory',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'exception.stacktrace': {\n    brief:\n      '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.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example:\n      '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)',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'exception.type': {\n    brief:\n      '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.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'OSError',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'faas.coldstart': {\n    brief: 'A boolean that is true if the serverless function is executed for the first time (aka cold-start).',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.0.0' }],\n  },\n  'faas.cron': {\n    brief: 'A string containing the schedule period as Cron Expression.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '0/5 * * * ? *',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'faas.duration_in_ms': {\n    brief: 'The duration a function took to run, in milliseconds.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 120,\n    changelog: [{ version: '0.11.0', prs: [403] }],\n  },\n  'faas.entry_point': {\n    brief: \"The code that's run when the cloud provider invokes your function.\",\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'my_main_function',\n    changelog: [{ version: '0.11.0', prs: [403, 415] }],\n  },\n  'faas.execution': {\n    brief: 'The execution ID of the current function execution.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28',\n    deprecation: {\n      replacement: 'faas.invocation_id',\n      reason:\n        'This attribute is being deprecated in favor of faas.invocation_id, which is the OTel-aligned replacement.',\n    },\n    aliases: ['faas.invocation_id', 'aws.lambda.aws_request_id'],\n    changelog: [\n      {\n        version: '0.16.0',\n        prs: [473],\n        description: 'Added faas.execution attribute, deprecated in favor of faas.invocation_id',\n      },\n    ],\n  },\n  'faas.id': {\n    brief: 'The unique ID of the single function that this runtime instance executes.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function',\n    deprecation: {\n      replacement: 'cloud.resource_id',\n      reason:\n        '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).',\n    },\n    aliases: ['cloud.resource_id'],\n    changelog: [\n      {\n        version: '0.16.0',\n        prs: [475],\n        description: 'Added faas.id attribute, deprecated in favor of cloud.resource_id',\n      },\n    ],\n  },\n  'faas.identity': {\n    brief:\n      'The Service Account (GCP), IAM Execution Role (AWS), or Managed Identity (Azure) used by the serverless function when interacting with other cloud services',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example:\n      'name@project.iam.gserviceaccount.com (GCP), arn:aws:iam::123456789012:role/role-name (AWS), 00000000-0000-0000-0000-000000000000 (Azure)',\n    changelog: [{ version: '0.11.0', prs: [403] }],\n  },\n  'faas.invocation_id': {\n    brief: 'The invocation ID of the current function invocation.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28',\n    aliases: ['aws.lambda.aws_request_id', 'faas.execution'],\n    changelog: [\n      { version: '0.16.0', prs: [473], description: 'Added faas.execution as an alias' },\n      { version: '0.11.1', prs: [414, 424] },\n    ],\n  },\n  'faas.invoked_name': {\n    brief: 'The name of the invoked function.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'my-function',\n    changelog: [{ version: '0.16.0', prs: [481], description: 'Added faas.invoked_name attribute' }],\n  },\n  'faas.invoked_provider': {\n    brief: 'The cloud provider of the invoked function.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'aws',\n    changelog: [{ version: '0.16.0', prs: [481], description: 'Added faas.invoked_provider attribute' }],\n  },\n  'faas.invoked_region': {\n    brief: 'The cloud region of the invoked function.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'eu-central-1',\n    changelog: [{ version: '0.16.0', prs: [481], description: 'Added faas.invoked_region attribute' }],\n  },\n  'faas.name': {\n    brief: 'The name of the serverless function',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'my_function',\n    aliases: ['aws.lambda.function_name'],\n    changelog: [{ version: '0.11.0', prs: [403, 415] }],\n  },\n  'faas.time': {\n    brief: 'A string containing the function invocation time in the ISO 8601 format expressed in UTC.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '2020-01-23T13:47:06Z',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'faas.trigger': {\n    brief: 'Type of the trigger which caused this function invocation.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'timer',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'faas.version': {\n    brief: 'The version of the function that was invoked',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '$LATEST',\n    aliases: ['aws.lambda.function_version'],\n    changelog: [{ version: '0.11.1', prs: [414, 424] }],\n  },\n  fcp: {\n    brief: 'The time it takes for the browser to render the first piece of meaningful content on the screen',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 547.6951,\n    deprecation: {\n      replacement: 'browser.web_vital.fcp.value',\n      reason: 'This attribute is being deprecated in favor of browser.web_vital.fcp.value',\n    },\n    aliases: ['browser.web_vital.fcp.value'],\n    changelog: [{ version: '0.5.0', prs: [235] }],\n  },\n  'flag.evaluation.<key>': {\n    brief:\n      '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.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    hasDynamicSuffix: true,\n    example: 'flag.evaluation.is_new_ui=true',\n    changelog: [{ version: '0.1.0', prs: [103] }],\n  },\n  fp: {\n    brief: 'The time it takes for the browser to render the first pixel on the screen',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 477.1926,\n    deprecation: {\n      replacement: 'browser.web_vital.fp.value',\n      reason: 'This attribute is being deprecated in favor of browser.web_vital.fp.value',\n    },\n    aliases: ['browser.web_vital.fp.value'],\n    changelog: [{ version: '0.5.0', prs: [235] }],\n  },\n  'frames.delay': {\n    brief:\n      '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/).',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 5,\n    deprecation: {\n      replacement: 'app.vitals.frames.delay.value',\n      reason:\n        'Replaced by app.vitals.frames.delay.value to align with the app.vitals.* namespace for mobile performance attributes',\n    },\n    aliases: ['app.vitals.frames.delay.value'],\n    changelog: [\n      { version: '0.5.0', prs: [313], description: 'Deprecated in favor of app.vitals.frames.delay.value' },\n      { version: '0.4.0', prs: [228] },\n      { version: '0.0.0' },\n    ],\n  },\n  'frames.frozen': {\n    brief: 'The number of frozen frames rendered during the lifetime of the span.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 3,\n    deprecation: {\n      replacement: 'app.vitals.frames.frozen.count',\n      reason:\n        'Replaced by app.vitals.frames.frozen.count to align with the app.vitals.* namespace for mobile performance attributes',\n    },\n    aliases: ['app.vitals.frames.frozen.count'],\n    changelog: [\n      { version: '0.5.0', prs: [313], description: 'Deprecated in favor of app.vitals.frames.frozen.count' },\n      { version: '0.4.0', prs: [228] },\n      { version: '0.0.0' },\n    ],\n  },\n  frames_frozen_rate: {\n    brief:\n      'The rate of frozen frames, or `app_vitals.frames.frozen.count` divided by `app_vitals.frames.total.count`. This is computed by Relay.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    changelog: [{ version: '0.7.0', prs: [362], description: 'Added frames_frozen_rate attribute' }],\n  },\n  'frames.slow': {\n    brief: 'The number of slow frames rendered during the lifetime of the span.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1,\n    deprecation: {\n      replacement: 'app.vitals.frames.slow.count',\n      reason:\n        'Replaced by app.vitals.frames.slow.count to align with the app.vitals.* namespace for mobile performance attributes',\n    },\n    aliases: ['app.vitals.frames.slow.count'],\n    changelog: [\n      { version: '0.5.0', prs: [313], description: 'Deprecated in favor of app.vitals.frames.slow.count' },\n      { version: '0.4.0', prs: [228] },\n      { version: '0.0.0' },\n    ],\n  },\n  frames_slow_rate: {\n    brief:\n      'The rate of slow frames, or `app_vitals.frames.slow.count` divided by `app_vitals.frames.total.count`. This is computed by Relay.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    changelog: [{ version: '0.7.0', prs: [362], description: 'Added frames_slow_rate attribute' }],\n  },\n  'frames.total': {\n    brief: 'The number of total frames rendered during the lifetime of the span.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 60,\n    deprecation: {\n      replacement: 'app.vitals.frames.total.count',\n      reason:\n        'Replaced by app.vitals.frames.total.count to align with the app.vitals.* namespace for mobile performance attributes',\n    },\n    aliases: ['app.vitals.frames.total.count'],\n    changelog: [\n      { version: '0.5.0', prs: [313], description: 'Deprecated in favor of app.vitals.frames.total.count' },\n      { version: '0.4.0', prs: [228] },\n      { version: '0.0.0' },\n    ],\n  },\n  fs_error: {\n    brief: 'The error message of a file system error.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'ENOENT: no such file or directory',\n    deprecation: {\n      replacement: 'error.type',\n      reason: 'This attribute is not part of the OpenTelemetry specification and error.type fits much better.',\n    },\n    changelog: [{ version: '0.1.0', prs: [61, 127] }, { version: '0.0.0' }],\n  },\n  'gcp.function.context.event_id': {\n    brief: 'The event ID from the legacy GCP Cloud Function context (1st gen)',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '1234567890',\n    changelog: [{ version: '0.7.0', prs: [371], description: 'Added gcp.function.context.event_id attribute' }],\n  },\n  'gcp.function.context.event_type': {\n    brief: 'The type of the GCP Cloud Function event',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'google.pubsub.topic.publish',\n    changelog: [{ version: '0.7.0', prs: [371], description: 'Added gcp.function.context.event_type attribute' }],\n  },\n  'gcp.function.context.id': {\n    brief: 'The unique event ID from the GCP CloudEvents context (2nd gen Cloud Functions)',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '1234567890',\n    changelog: [{ version: '0.7.0', prs: [371], description: 'Added gcp.function.context.id attribute' }],\n  },\n  'gcp.function.context.resource': {\n    brief: 'The resource that triggered the GCP Cloud Function event',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'projects/my-project/topics/my-topic',\n    changelog: [{ version: '0.7.0', prs: [371], description: 'Added gcp.function.context.resource attribute' }],\n  },\n  'gcp.function.context.source': {\n    brief: 'The source of the GCP Cloud Function event',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '//pubsub.googleapis.com/projects/my-project/topics/my-topic',\n    changelog: [{ version: '0.7.0', prs: [371], description: 'Added gcp.function.context.source attribute' }],\n  },\n  'gcp.function.context.specversion': {\n    brief: 'The CloudEvents specification version of the GCP Cloud Function event',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '1.0',\n    changelog: [{ version: '0.7.0', prs: [371], description: 'Added gcp.function.context.specversion attribute' }],\n  },\n  'gcp.function.context.time': {\n    brief: 'The timestamp of the GCP Cloud Function event',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '2024-01-01T00:00:00.000Z',\n    changelog: [{ version: '0.7.0', prs: [371], description: 'Added gcp.function.context.time attribute' }],\n  },\n  'gcp.function.context.timestamp': {\n    brief: 'The legacy timestamp of the GCP Cloud Function event',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '2024-01-01T00:00:00.000Z',\n    changelog: [{ version: '0.7.0', prs: [371], description: 'Added gcp.function.context.timestamp attribute' }],\n  },\n  'gcp.function.context.type': {\n    brief: 'The type of the GCP Cloud Function event context',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'cloud_functions.context',\n    changelog: [{ version: '0.7.0', prs: [371], description: 'Added gcp.function.context.type attribute' }],\n  },\n  'gcp.project.id': {\n    brief: 'The ID of the project in GCP that this resource is associated with',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'my-project-123',\n    changelog: [{ version: '0.11.0', prs: [403] }],\n  },\n  'gen_ai.agent.name': {\n    brief: 'The name of the agent being used.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'ResearchAssistant',\n    changelog: [{ version: '0.1.0', prs: [62, 127] }],\n  },\n  'gen_ai.context.utilization': {\n    brief: 'The fraction of the model context window utilized by this generation.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 0.75,\n    changelog: [{ version: '0.5.0', prs: [315], description: 'Added gen_ai.context.utilization attribute' }],\n  },\n  'gen_ai.context.window_size': {\n    brief: 'The maximum context window size supported by the model for this generation.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 128000,\n    changelog: [{ version: '0.5.0', prs: [315], description: 'Added gen_ai.context.window_size attribute' }],\n  },\n  'gen_ai.conversation.id': {\n    brief:\n      'The unique identifier for a conversation (session, thread), used to store and correlate messages within this conversation.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'conv_5j66UpCpwteGg4YSxUnt7lPY',\n    changelog: [{ version: '0.4.0', prs: [250] }],\n  },\n  'gen_ai.cost.cache_creation.input_tokens': {\n    brief: 'The cost of input tokens written to cache in USD.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 12.34,\n    changelog: [{ version: '0.16.0', description: 'Added gen_ai.cost.cache_creation.input_tokens attribute' }],\n    additionalContext: [\n      '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.',\n      \"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.\",\n      'This is a subset of gen_ai.cost.input_tokens, not an independent cost. Do not sum this with gen_ai.cost.input_tokens — it is already included.',\n    ],\n  },\n  'gen_ai.cost.cache_read.input_tokens': {\n    brief: 'The cost of cached input tokens in USD.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 12.34,\n    changelog: [{ version: '0.16.0', description: 'Added gen_ai.cost.cache_read.input_tokens attribute' }],\n    additionalContext: [\n      '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.',\n      \"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.\",\n      'This is a subset of gen_ai.cost.input_tokens, not an independent cost. Do not sum this with gen_ai.cost.input_tokens — it is already included.',\n    ],\n  },\n  'gen_ai.cost.input_tokens': {\n    brief: 'The total cost of all input tokens in USD (includes cached and cache creation tokens).',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 123.45,\n    changelog: [\n      { version: '0.9.0', prs: [397], description: 'Add additional_context' },\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [112] },\n    ],\n    additionalContext: [\n      '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.',\n      \"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.\",\n      '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.',\n    ],\n  },\n  'gen_ai.cost.output_tokens': {\n    brief: 'The total cost of all output tokens in USD (includes reasoning tokens).',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 123.45,\n    changelog: [\n      { version: '0.9.0', prs: [397], description: 'Add additional_context' },\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [112] },\n    ],\n    additionalContext: [\n      '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.',\n      \"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.\",\n      '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.',\n    ],\n  },\n  'gen_ai.cost.reasoning.output_tokens': {\n    brief: 'The cost of reasoning output tokens in USD.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 12.34,\n    changelog: [{ version: '0.16.0', description: 'Added gen_ai.cost.reasoning.output_tokens attribute' }],\n    additionalContext: [\n      '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.',\n      \"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.\",\n      'This is a subset of gen_ai.cost.output_tokens, not an independent cost. Do not sum this with gen_ai.cost.output_tokens — it is already included.',\n    ],\n  },\n  'gen_ai.cost.total_tokens': {\n    brief: 'The total cost for the tokens used.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 12.34,\n    aliases: ['ai.total_cost'],\n    changelog: [\n      { version: '0.9.0', prs: [397], description: 'Add additional_context' },\n      { version: '0.5.0', prs: [264] },\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [126] },\n    ],\n    additionalContext: [\n      '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.',\n      \"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.\",\n    ],\n  },\n  'gen_ai.embeddings.input': {\n    brief: 'The input to the embeddings model.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: \"What's the weather in Paris?\",\n    changelog: [{ version: '0.3.1', prs: [195] }],\n  },\n  'gen_ai.function_id': {\n    brief:\n      'Framework-specific tracing label for the execution of a function or other unit of execution in a generative AI system.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'my-awesome-function',\n    changelog: [{ version: '0.5.0', prs: [308], description: 'Added gen_ai.function_id attribute' }],\n  },\n  'gen_ai.input.messages': {\n    brief:\n      '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:\"...\"}`.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example:\n      '[{\"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°F\"}]}]',\n    aliases: ['ai.texts'],\n    changelog: [\n      { version: '0.5.0', prs: [264] },\n      { version: '0.4.0', prs: [221] },\n    ],\n  },\n  'gen_ai.operation.name': {\n    brief:\n      \"The name of the operation being performed. It has the following list of well-known values: 'chat', 'create_agent', 'embeddings', 'execute_tool', 'generate_content', 'invoke_agent', 'text_completion'. If one of them applies, then that value MUST be used. Otherwise a custom value MAY be used.\",\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'chat',\n    changelog: [\n      { version: '0.4.0', prs: [225] },\n      { version: '0.1.0', prs: [62, 127] },\n    ],\n  },\n  'gen_ai.operation.type': {\n    brief:\n      \"The type of AI operation. Must be one of 'agent' (invoke_agent and create_agent spans), 'ai_client' (any LLM call), 'tool' (execute_tool spans), 'handoff' (handoff spans), 'other' (input and output processors, skill loading, guardrails etc.) . Added during ingestion based on span.op and gen_ai.operation.type. Used to filter and aggregate data in the UI\",\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'tool',\n    changelog: [\n      { version: '0.4.0', prs: [257] },\n      { version: '0.1.0', prs: [113, 127] },\n    ],\n  },\n  'gen_ai.output.messages': {\n    brief:\n      \"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.\",\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example:\n      '[{\"role\": \"assistant\", \"parts\": [{\"type\": \"text\", \"content\": \"The weather in Paris is currently rainy with a temperature of 57°F.\"}], \"finish_reason\": \"stop\"}]',\n    changelog: [{ version: '0.4.0', prs: [221] }],\n  },\n  'gen_ai.pipeline.name': {\n    brief: 'Name of the AI pipeline or chain being executed.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Autofix Pipeline',\n    aliases: ['ai.pipeline.name'],\n    changelog: [{ version: '0.1.0', prs: [76, 127] }],\n  },\n  'gen_ai.prompt': {\n    brief: 'The input messages sent to the model',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '[{\"role\": \"user\", \"message\": \"hello\"}]',\n    deprecation: {\n      reason: 'Deprecated from OTEL, use gen_ai.input.messages with the new format instead.',\n    },\n    changelog: [{ version: '0.1.0', prs: [74, 108, 119] }, { version: '0.0.0' }],\n  },\n  'gen_ai.prompt.name': {\n    brief: 'The name of the prompt that uniquely identifies it.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n      reason: 'Prompt names may reveal user behavior patterns or sensitive operations',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'summarize_text',\n    aliases: ['mcp.prompt.name'],\n    changelog: [{ version: '0.12.0', prs: [420], description: 'Added gen_ai.prompt.name attribute' }],\n  },\n  'gen_ai.provider.name': {\n    brief: 'The Generative AI provider as identified by the client or server instrumentation.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'openai',\n    aliases: ['ai.model.provider', 'gen_ai.system'],\n    changelog: [{ version: '0.4.0', prs: [253] }],\n  },\n  'gen_ai.request.available_tools': {\n    brief: 'The available tools for the model. It has to be a stringified version of an array of objects.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example:\n      '[{\"name\": \"get_weather\", \"description\": \"Get the weather for a given location\"}, {\"name\": \"get_news\", \"description\": \"Get the news for a given topic\"}]',\n    deprecation: {\n      replacement: 'gen_ai.tool.definitions',\n    },\n    changelog: [\n      { version: '0.4.0', prs: [221] },\n      { version: '0.1.0', prs: [63, 127] },\n    ],\n  },\n  'gen_ai.request.frequency_penalty': {\n    brief:\n      '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.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 0.5,\n    aliases: ['ai.frequency_penalty'],\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [57] },\n    ],\n  },\n  'gen_ai.request.max_tokens': {\n    brief: 'The maximum number of tokens to generate in the response.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 2048,\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [62] },\n    ],\n  },\n  'gen_ai.request.messages': {\n    brief:\n      '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:\"...\"}`.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example:\n      '[{\"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\"}}]',\n    deprecation: {\n      replacement: 'gen_ai.input.messages',\n    },\n    aliases: ['ai.input_messages'],\n    changelog: [\n      { version: '0.4.0', prs: [221] },\n      { version: '0.1.0', prs: [63, 74, 108, 119, 122] },\n    ],\n  },\n  'gen_ai.request.model': {\n    brief: 'The model identifier being used for the request.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'gpt-4-turbo-preview',\n    changelog: [{ version: '0.1.0', prs: [62, 127] }],\n  },\n  'gen_ai.request.presence_penalty': {\n    brief:\n      '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.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 0.5,\n    aliases: ['ai.presence_penalty'],\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [57] },\n    ],\n  },\n  'gen_ai.request.reasoning_effort': {\n    brief: 'Constrains the effort on reasoning for reasoning models. Supported values vary by provider.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'high',\n    changelog: [{ version: '0.13.0', prs: [334], description: 'Added gen_ai.request.reasoning_effort attribute' }],\n  },\n  'gen_ai.request.seed': {\n    brief: 'The seed, ideally models given the same seed and same other parameters will produce the exact same output.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '1234567890',\n    aliases: ['ai.seed'],\n    changelog: [{ version: '0.1.0', prs: [57, 127] }],\n  },\n  'gen_ai.request.stop_sequences': {\n    brief: 'List of sequences that the model will use to stop generating further tokens.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: ['forest', 'lived'],\n    changelog: [{ version: '0.16.0', prs: [482], description: 'Added gen_ai.request.stop_sequences attribute' }],\n  },\n  'gen_ai.request.temperature': {\n    brief:\n      'For an AI model call, the temperature parameter. Temperature essentially means how random the output will be.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 0.1,\n    aliases: ['ai.temperature'],\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [57] },\n    ],\n  },\n  'gen_ai.request.top_k': {\n    brief:\n      '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).',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 35,\n    aliases: ['ai.top_k'],\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [57] },\n    ],\n  },\n  'gen_ai.request.top_p': {\n    brief:\n      '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).',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 0.7,\n    aliases: ['ai.top_p'],\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [57] },\n    ],\n  },\n  'gen_ai.response.finish_reasons': {\n    brief: 'The reason why the model stopped generating.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'COMPLETE',\n    aliases: ['ai.finish_reason'],\n    changelog: [{ version: '0.1.0', prs: [57, 127] }],\n  },\n  'gen_ai.response.id': {\n    brief: 'Unique identifier for the completion.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'gen_123abc',\n    aliases: ['ai.generation_id'],\n    changelog: [{ version: '0.1.0', prs: [57, 127] }],\n  },\n  'gen_ai.response.model': {\n    brief: 'The vendor-specific ID of the model used.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'gpt-4',\n    aliases: ['ai.model_id'],\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'gen_ai.response.streaming': {\n    brief: \"Whether or not the AI model call's response was streamed back asynchronously\",\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    aliases: ['ai.streaming'],\n    changelog: [{ version: '0.1.0', prs: [76] }],\n  },\n  'gen_ai.response.text': {\n    brief:\n      \"The model's response text messages. It has to be a stringified version of an array of response text messages.\",\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example:\n      '[\"The weather in Paris is rainy and overcast, with temperatures around 57°F\", \"The weather in London is sunny and warm, with temperatures around 65°F\"]',\n    deprecation: {\n      replacement: 'gen_ai.output.messages',\n    },\n    changelog: [\n      { version: '0.4.0', prs: [221] },\n      { version: '0.1.0', prs: [63, 74] },\n    ],\n  },\n  'gen_ai.response.time_to_first_chunk': {\n    brief: 'Time in seconds when the first response content chunk arrived in streaming responses.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 0.6853435,\n    aliases: ['gen_ai.response.time_to_first_token'],\n    changelog: [{ version: '0.11.0', prs: [418], description: 'Added gen_ai.response.time_to_first_chunk attribute' }],\n  },\n  'gen_ai.response.time_to_first_token': {\n    brief: 'Time in seconds when the first response content chunk arrived in streaming responses.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 0.6853435,\n    deprecation: {\n      replacement: 'gen_ai.response.time_to_first_chunk',\n    },\n    aliases: ['gen_ai.response.time_to_first_chunk'],\n    changelog: [\n      { version: '0.11.0', prs: [418], description: 'Deprecate in favor of gen_ai.response.time_to_first_chunk' },\n      { version: '0.4.0', prs: [227] },\n    ],\n  },\n  'gen_ai.response.tokens_per_second': {\n    brief: 'The total output tokens per seconds throughput',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 12345.67,\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [66] },\n    ],\n  },\n  'gen_ai.response.tool_calls': {\n    brief: \"The tool calls in the model's response. It has to be a stringified version of an array of objects.\",\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '[{\"name\": \"get_weather\", \"arguments\": {\"location\": \"Paris\"}}]',\n    deprecation: {\n      replacement: 'gen_ai.output.messages',\n    },\n    changelog: [\n      { version: '0.4.0', prs: [221] },\n      { version: '0.1.0', prs: [63, 74] },\n    ],\n  },\n  'gen_ai.system': {\n    brief: 'The provider of the model.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'openai',\n    deprecation: {\n      replacement: 'gen_ai.provider.name',\n    },\n    aliases: ['ai.model.provider', 'gen_ai.provider.name'],\n    changelog: [\n      { version: '0.4.0', prs: [253] },\n      { version: '0.1.0', prs: [57, 127] },\n    ],\n  },\n  'gen_ai.system_instructions': {\n    brief: 'The system instructions passed to the model.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'You are a helpful assistant',\n    aliases: ['ai.preamble'],\n    changelog: [\n      { version: '0.5.0', prs: [264] },\n      { version: '0.4.0', prs: [221] },\n    ],\n  },\n  'gen_ai.system.message': {\n    brief: 'The system instructions passed to the model.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'You are a helpful assistant',\n    deprecation: {\n      replacement: 'gen_ai.system_instructions',\n    },\n    changelog: [\n      { version: '0.4.0', prs: [221] },\n      { version: '0.1.0', prs: [62] },\n    ],\n  },\n  'gen_ai.tool.call.arguments': {\n    brief: 'The arguments of the tool call. It has to be a stringified version of the arguments to the tool.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '{\"location\": \"Paris\"}',\n    aliases: ['gen_ai.tool.input'],\n    changelog: [\n      { version: '0.5.0', prs: [265] },\n      { version: '0.4.0', prs: [221] },\n    ],\n  },\n  'gen_ai.tool.call.result': {\n    brief: 'The result of the tool call. It has to be a stringified version of the result of the tool.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'rainy, 57°F',\n    aliases: ['gen_ai.tool.output', 'gen_ai.tool.message', 'mcp.tool.result.content'],\n    changelog: [\n      { version: '0.5.0', prs: [265] },\n      { version: '0.4.0', prs: [221] },\n    ],\n  },\n  'gen_ai.tool.definitions': {\n    brief: 'The list of source system tool definitions available to the GenAI agent or model.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example:\n      '[{\"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\"]}}]',\n    changelog: [{ version: '0.4.0', prs: [221] }],\n  },\n  'gen_ai.tool.description': {\n    brief: 'The description of the tool being used.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'Searches the web for current information about a topic',\n    changelog: [{ version: '0.1.0', prs: [62, 127] }],\n  },\n  'gen_ai.tool.input': {\n    brief: 'The input of the tool being used. It has to be a stringified version of the input to the tool.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '{\"location\": \"Paris\"}',\n    deprecation: {\n      replacement: 'gen_ai.tool.call.arguments',\n    },\n    aliases: ['gen_ai.tool.call.arguments'],\n    changelog: [\n      { version: '0.5.0', prs: [265] },\n      { version: '0.1.0', prs: [63, 74] },\n    ],\n  },\n  'gen_ai.tool.message': {\n    brief: 'The response from a tool or function call passed to the model.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'rainy, 57°F',\n    deprecation: {\n      replacement: 'gen_ai.tool.call.result',\n    },\n    aliases: ['gen_ai.tool.call.result', 'gen_ai.tool.output', 'mcp.tool.result.content'],\n    changelog: [\n      { version: '0.5.0', prs: [265] },\n      { version: '0.1.0', prs: [62] },\n    ],\n  },\n  'gen_ai.tool.name': {\n    brief: 'Name of the tool utilized by the agent.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'Flights',\n    aliases: ['ai.function_call', 'mcp.tool.name'],\n    changelog: [{ version: '0.1.0', prs: [57, 127] }],\n  },\n  'gen_ai.tool.output': {\n    brief: 'The output of the tool being used. It has to be a stringified version of the output of the tool.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'rainy, 57°F',\n    deprecation: {\n      replacement: 'gen_ai.tool.call.result',\n    },\n    aliases: ['gen_ai.tool.call.result', 'gen_ai.tool.message', 'mcp.tool.result.content'],\n    changelog: [\n      { version: '0.5.0', prs: [265] },\n      { version: '0.1.0', prs: [63, 74] },\n    ],\n  },\n  'gen_ai.tool.type': {\n    brief: 'The type of tool being used.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'function',\n    deprecation: {\n      reason: 'The gen_ai.tool.type attribute is deprecated and should no longer be set.',\n    },\n    changelog: [{ version: '0.1.0', prs: [62, 127] }],\n  },\n  'gen_ai.usage.cache_creation.input_tokens': {\n    brief: 'The number of tokens written to the cache when processing the AI input (prompt).',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 100,\n    aliases: ['gen_ai.usage.input_tokens.cache_write'],\n    changelog: [\n      { version: '0.11.0', prs: [418], description: 'Added gen_ai.usage.cache_creation.input_tokens attribute' },\n    ],\n    additionalContext: [\n      '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.',\n    ],\n  },\n  'gen_ai.usage.cache_read.input_tokens': {\n    brief: 'The number of cached tokens used to process the AI input (prompt).',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 50,\n    aliases: ['gen_ai.usage.input_tokens.cached'],\n    changelog: [{ version: '0.11.0', prs: [418], description: 'Added gen_ai.usage.cache_read.input_tokens attribute' }],\n    additionalContext: [\n      '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.',\n      'This is a subset of gen_ai.usage.input_tokens, not an independent count. Do not sum this with gen_ai.usage.input_tokens — it is already included.',\n    ],\n  },\n  'gen_ai.usage.completion_tokens': {\n    brief: 'The number of tokens used in the GenAI response (completion).',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 10,\n    deprecation: {\n      replacement: 'gen_ai.usage.output_tokens',\n    },\n    aliases: ['ai.completion_tokens.used', 'gen_ai.usage.output_tokens'],\n    changelog: [\n      { version: '0.9.0', prs: [397], description: 'Add additional_context' },\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [61] },\n      { version: '0.0.0' },\n    ],\n    additionalContext: [\n      '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.',\n    ],\n  },\n  'gen_ai.usage.input_tokens': {\n    brief: 'The number of tokens used to process the AI input (prompt) including cached input tokens.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 10,\n    aliases: ['ai.prompt_tokens.used', 'gen_ai.usage.prompt_tokens'],\n    changelog: [\n      {\n        version: '0.11.0',\n        prs: [418],\n        description: 'Update additional_context to reference gen_ai.usage.cache_read.input_tokens',\n      },\n      { version: '0.9.0', prs: [397], description: 'Add additional_context' },\n      { version: '0.5.0', prs: [261] },\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [112] },\n      { version: '0.0.0' },\n    ],\n    additionalContext: [\n      '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.',\n      'This count includes cached input tokens. gen_ai.usage.cache_read.input_tokens is a subset of this value, not an independent count — do not sum them together.',\n    ],\n  },\n  'gen_ai.usage.input_tokens.cached': {\n    brief: 'The number of cached tokens used to process the AI input (prompt).',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 50,\n    deprecation: {\n      replacement: 'gen_ai.usage.cache_read.input_tokens',\n    },\n    aliases: ['gen_ai.usage.cache_read.input_tokens'],\n    changelog: [\n      { version: '0.11.0', prs: [418], description: 'Deprecate in favor of gen_ai.usage.cache_read.input_tokens' },\n      { version: '0.9.0', prs: [397], description: 'Add additional_context' },\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [62, 112] },\n    ],\n    additionalContext: [\n      '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.',\n      'This is a subset of gen_ai.usage.input_tokens, not an independent count. Do not sum this with gen_ai.usage.input_tokens — it is already included.',\n    ],\n  },\n  'gen_ai.usage.input_tokens.cache_write': {\n    brief: 'The number of tokens written to the cache when processing the AI input (prompt).',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 100,\n    deprecation: {\n      replacement: 'gen_ai.usage.cache_creation.input_tokens',\n    },\n    aliases: ['gen_ai.usage.cache_creation.input_tokens'],\n    changelog: [\n      { version: '0.11.0', prs: [418], description: 'Deprecate in favor of gen_ai.usage.cache_creation.input_tokens' },\n      { version: '0.9.0', prs: [397], description: 'Add additional_context' },\n      { version: '0.4.0', prs: [217, 228] },\n    ],\n    additionalContext: [\n      '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.',\n    ],\n  },\n  'gen_ai.usage.output_tokens': {\n    brief: 'The number of tokens used for creating the AI output (including reasoning tokens).',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 10,\n    aliases: ['ai.completion_tokens.used', 'gen_ai.usage.completion_tokens'],\n    changelog: [\n      {\n        version: '0.11.0',\n        prs: [418],\n        description: 'Update additional_context to reference gen_ai.usage.reasoning.output_tokens',\n      },\n      { version: '0.9.0', prs: [397], description: 'Add additional_context' },\n      { version: '0.5.0', prs: [261] },\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [112] },\n      { version: '0.0.0' },\n    ],\n    additionalContext: [\n      '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.',\n      'This count includes reasoning tokens. gen_ai.usage.reasoning.output_tokens is a subset of this value, not an independent count — do not sum them together.',\n    ],\n  },\n  'gen_ai.usage.output_tokens.reasoning': {\n    brief: 'The number of tokens used for reasoning to create the AI output.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 75,\n    deprecation: {\n      replacement: 'gen_ai.usage.reasoning.output_tokens',\n    },\n    aliases: ['gen_ai.usage.reasoning.output_tokens'],\n    changelog: [\n      { version: '0.11.0', prs: [418], description: 'Deprecate in favor of gen_ai.usage.reasoning.output_tokens' },\n      { version: '0.9.0', prs: [397], description: 'Add additional_context' },\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [62, 112] },\n    ],\n    additionalContext: [\n      '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.',\n      'This is a subset of gen_ai.usage.output_tokens, not an independent count. Do not sum this with gen_ai.usage.output_tokens — it is already included.',\n    ],\n  },\n  'gen_ai.usage.prompt_tokens': {\n    brief: 'The number of tokens used in the GenAI input (prompt).',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 20,\n    deprecation: {\n      replacement: 'gen_ai.usage.input_tokens',\n    },\n    aliases: ['ai.prompt_tokens.used', 'gen_ai.usage.input_tokens'],\n    changelog: [\n      { version: '0.9.0', prs: [397], description: 'Add additional_context' },\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [61] },\n      { version: '0.0.0' },\n    ],\n    additionalContext: [\n      '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.',\n    ],\n  },\n  'gen_ai.usage.reasoning.output_tokens': {\n    brief: 'The number of tokens used for reasoning to create the AI output.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 75,\n    aliases: ['gen_ai.usage.output_tokens.reasoning'],\n    changelog: [{ version: '0.11.0', prs: [418], description: 'Added gen_ai.usage.reasoning.output_tokens attribute' }],\n    additionalContext: [\n      '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.',\n      'This is a subset of gen_ai.usage.output_tokens, not an independent count. Do not sum this with gen_ai.usage.output_tokens — it is already included.',\n    ],\n  },\n  'gen_ai.usage.total_tokens': {\n    brief: 'The total number of tokens used to process the prompt. (input tokens plus output todkens)',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 20,\n    aliases: ['ai.total_tokens.used'],\n    changelog: [\n      { version: '0.9.0', prs: [397], description: 'Add additional_context' },\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [57] },\n    ],\n    additionalContext: [\n      '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.',\n      'This is the sum of gen_ai.usage.input_tokens and gen_ai.usage.output_tokens. Do not sum this with either of them — they are already included.',\n    ],\n  },\n  'graphql.document': {\n    brief: 'The GraphQL document being executed.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n      reason:\n        'The document may contain sensitive information in arguments or variables. Instrumentation should redact sensitive information when possible.',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'query findBookById { bookById(id: ?) { name } }',\n    changelog: [\n      {\n        version: '0.7.0',\n        description: 'Adds the `graphql.document` attribute to track the GraphQL document being executed.',\n      },\n    ],\n  },\n  'graphql.operation.name': {\n    brief: 'The name of the operation being executed.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'findBookById',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'graphql.operation.type': {\n    brief: 'The type of the operation being executed.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'query',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  hardwareConcurrency: {\n    brief: 'The number of logical CPU cores available.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '14',\n    deprecation: {\n      replacement: 'device.processor_count',\n      reason: 'Old namespace-less attribute, to be replaced with device.processor_count for span-first future',\n    },\n    aliases: ['device.processor_count'],\n    changelog: [\n      {\n        version: '0.5.0',\n        prs: [281, 300],\n        description: \"Added and deprecated attribute to document JS SDK's current behaviour\",\n      },\n    ],\n  },\n  'http.client_ip': {\n    brief:\n      'Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'example.com',\n    deprecation: {\n      replacement: 'client.address',\n    },\n    aliases: ['client.address'],\n    changelog: [{ version: '0.1.0', prs: [61, 106, 127] }, { version: '0.0.0' }],\n  },\n  'http.decoded_response_content_length': {\n    brief: 'The decoded body size of the response (in bytes).',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 456,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'http.flavor': {\n    brief: 'The actual version of the protocol used for network communication.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '1.1',\n    deprecation: {\n      replacement: 'network.protocol.version',\n    },\n    aliases: ['network.protocol.version', 'net.protocol.version'],\n    changelog: [{ version: '0.1.0', prs: [61, 108, 127] }, { version: '0.0.0' }],\n  },\n  'http.fragment': {\n    brief:\n      'The fragments present in the URI. Note that this contains the leading # character, while the `url.fragment` attribute does not.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '#details',\n    changelog: [{ version: '0.0.0' }],\n  },\n  'http.host': {\n    brief: 'The domain name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'example.com',\n    deprecation: {\n      replacement: 'server.address',\n      reason: 'Deprecated, use one of `server.address` or `client.address`, depending on the usage',\n    },\n    aliases: ['server.address', 'client.address', 'http.server_name', 'net.host.name', 'server_name'],\n    changelog: [{ version: '0.1.0', prs: [61, 108, 127] }, { version: '0.0.0' }],\n  },\n  'http.method': {\n    brief: 'The HTTP method used.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'GET',\n    deprecation: {\n      replacement: 'http.request.method',\n    },\n    aliases: ['http.request.method', 'http.request_method', 'method'],\n    changelog: [{ version: '0.1.0', prs: [61, 127] }, { version: '0.0.0' }],\n  },\n  'http.query': {\n    brief:\n      'The query string present in the URL. Note that this contains the leading ? character, while the `url.query` attribute does not.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n      reason:\n        'Query string values can contain sensitive information. Clients should attempt to scrub parameters that might contain sensitive information.',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '?foo=bar&bar=baz',\n    changelog: [{ version: '0.0.0' }],\n  },\n  'http.request.body.data': {\n    brief: 'HTTP request body data. Can be given as string or structural data of any format.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '[{\"role\": \"user\", \"message\": \"hello\"}]',\n    changelog: [{ version: '0.6.0', prs: [336], description: 'Added http.request.body.data attribute' }],\n  },\n  'http.request.connection_end': {\n    brief:\n      '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.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1732829555.15,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [134] }, { version: '0.0.0' }],\n  },\n  'http.request.connect_start': {\n    brief:\n      'The UNIX timestamp representing the time immediately before the user agent starts establishing the connection to the server to retrieve the resource.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1732829555.111,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [134] }, { version: '0.0.0' }],\n  },\n  'http.request.domain_lookup_end': {\n    brief:\n      'The UNIX timestamp representing the time immediately after the browser finishes the domain-name lookup for the resource.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1732829555.201,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [134] }, { version: '0.0.0' }],\n  },\n  'http.request.domain_lookup_start': {\n    brief:\n      'The UNIX timestamp representing the time immediately before the browser starts the domain name lookup for the resource.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1732829555.322,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [134] }, { version: '0.0.0' }],\n  },\n  'http.request.fetch_start': {\n    brief: 'The UNIX timestamp representing the time immediately before the browser starts to fetch the resource.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1732829555.389,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [134] }, { version: '0.0.0' }],\n  },\n  'http.request.header.<key>': {\n    brief:\n      'HTTP request headers, <key> being the normalized HTTP Header name (lowercase), the value being the header values.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    hasDynamicSuffix: true,\n    example: \"http.request.header.custom-header=['foo', 'bar']\",\n    changelog: [\n      { version: '0.4.0', prs: [201, 204] },\n      { version: '0.1.0', prs: [103] },\n    ],\n  },\n  'http.request.method': {\n    brief: 'The HTTP method used.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'GET',\n    aliases: ['method', 'http.method', 'http.request_method'],\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'http.request_method': {\n    brief: 'The HTTP method used.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'GET',\n    deprecation: {\n      replacement: 'http.request.method',\n    },\n    aliases: ['method', 'http.method', 'http.request.method'],\n    changelog: [{ version: '0.6.0', prs: [343], description: 'Added http.request_method attribute' }],\n  },\n  'http.request.redirect_end': {\n    brief:\n      'The UNIX timestamp representing the timestamp immediately after receiving the last byte of the response of the last redirect',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1732829558.502,\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [130, 134] },\n    ],\n  },\n  'http.request.redirect_start': {\n    brief: 'The UNIX timestamp representing the start time of the fetch which that initiates the redirect.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1732829555.495,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [134] }, { version: '0.0.0' }],\n  },\n  'http.request.request_start': {\n    brief:\n      '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.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1732829555.51,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [134] }, { version: '0.0.0' }],\n  },\n  'http.request.resend_count': {\n    brief: 'The ordinal number of request resending attempt (for any reason, including redirects).',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 2,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'http.request.response_end': {\n    brief:\n      '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.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1732829555.89,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [134] }, { version: '0.0.0' }],\n  },\n  'http.request.response_start': {\n    brief:\n      '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.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1732829555.7,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [134] }, { version: '0.0.0' }],\n  },\n  'http.request.same_origin': {\n    brief: \"Indicates that a URL has the same origin as the current page's origin in the browser.\",\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    aliases: ['url.same_origin'],\n    changelog: [{ version: '0.16.0', prs: [456], description: 'Added http.request.same_origin attribute' }],\n  },\n  'http.request.secure_connection_start': {\n    brief:\n      '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.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1732829555.73,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [134] }, { version: '0.0.0' }],\n  },\n  'http.request.time_to_first_byte': {\n    brief:\n      \"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\",\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1.032,\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [131] },\n    ],\n  },\n  'http.request.worker_start': {\n    brief:\n      '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.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1732829553.68,\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [130, 134] },\n    ],\n  },\n  'http.response.body.size': {\n    brief: 'The encoded body size of the response (in bytes).',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 123,\n    aliases: ['http.response_content_length', 'http.response.header.content-length'],\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [106] }, { version: '0.0.0' }],\n  },\n  'http.response_content_length': {\n    brief: 'The encoded body size of the response (in bytes).',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 123,\n    deprecation: {\n      replacement: 'http.response.body.size',\n    },\n    aliases: ['http.response.body.size', 'http.response.header.content-length'],\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [61, 106] }, { version: '0.0.0' }],\n  },\n  'http.response.header.content-length': {\n    brief: 'The size of the message body sent to the recipient (in bytes)',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: \"http.response.header.custom-header=['foo', 'bar']\",\n    aliases: ['http.response_content_length', 'http.response.body.size'],\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'http.response.header.<key>': {\n    brief:\n      'HTTP response headers, <key> being the normalized HTTP Header name (lowercase), the value being the header values.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    hasDynamicSuffix: true,\n    example: \"http.response.header.custom-header=['foo', 'bar']\",\n    changelog: [\n      { version: '0.4.0', prs: [201, 204] },\n      { version: '0.1.0', prs: [103] },\n    ],\n  },\n  'http.response.size': {\n    brief: 'The transfer size of the response (in bytes).',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 456,\n    aliases: ['http.response_transfer_size'],\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'http.response.status_code': {\n    brief: 'The status code of the HTTP response.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 404,\n    aliases: ['http.status_code'],\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'http.response_transfer_size': {\n    brief: 'The transfer size of the response (in bytes).',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 456,\n    deprecation: {\n      replacement: 'http.response.size',\n    },\n    aliases: ['http.response.size'],\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [61] }, { version: '0.0.0' }],\n  },\n  'http.route': {\n    brief: 'The matched route, that is, the path template in the format used by the respective server framework.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '/users/:id',\n    aliases: ['url.template'],\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'http.scheme': {\n    brief: 'The URI scheme component identifying the used protocol.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'https',\n    deprecation: {\n      replacement: 'url.scheme',\n    },\n    aliases: ['url.scheme'],\n    changelog: [{ version: '0.1.0', prs: [61, 127] }, { version: '0.0.0' }],\n  },\n  'http.server_name': {\n    brief: 'The server domain name',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'example.com',\n    deprecation: {\n      replacement: 'server.address',\n    },\n    aliases: ['server.address', 'net.host.name', 'http.host', 'server_name'],\n    changelog: [{ version: '0.1.0', prs: [61, 108, 127] }, { version: '0.0.0' }],\n  },\n  'http.server.request.time_in_queue': {\n    brief:\n      '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.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 50,\n    changelog: [{ version: '0.5.0', prs: [267] }],\n  },\n  'http.status_code': {\n    brief: 'The status code of the HTTP response.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 404,\n    deprecation: {\n      replacement: 'http.response.status_code',\n    },\n    aliases: ['http.response.status_code'],\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [61] }, { version: '0.0.0' }],\n  },\n  'http.target': {\n    brief: 'The pathname and query string of the URL.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '/test?foo=bar#buzz',\n    deprecation: {\n      replacement: 'url.path',\n      reason: 'This attribute is being deprecated in favor of url.path and url.query',\n    },\n    changelog: [{ version: '0.1.0', prs: [61] }, { version: '0.0.0' }],\n  },\n  'http.url': {\n    brief: 'The URL of the resource that was fetched.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'https://example.com/test?foo=bar#buzz',\n    deprecation: {\n      replacement: 'url.full',\n    },\n    aliases: ['url.full', 'url'],\n    changelog: [{ version: '0.1.0', prs: [61, 108] }, { version: '0.0.0' }],\n  },\n  'http.user_agent': {\n    brief: 'Value of the HTTP User-Agent header sent by the client.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example:\n      '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',\n    deprecation: {\n      replacement: 'user_agent.original',\n    },\n    aliases: ['user_agent.original'],\n    changelog: [{ version: '0.1.0', prs: [61, 127] }, { version: '0.0.0' }],\n  },\n  id: {\n    brief: 'A unique identifier for the span.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'f47ac10b58cc4372a5670e02b2c3d479',\n    changelog: [{ version: '0.0.0' }],\n  },\n  inp: {\n    brief: 'The value of the recorded Interaction to Next Paint (INP) web vital',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 200,\n    deprecation: {\n      replacement: 'browser.web_vital.inp.value',\n      reason: 'The INP web vital is now recorded as a browser.web_vital.inp.value attribute.',\n    },\n    aliases: ['browser.web_vital.inp.value'],\n    changelog: [\n      {\n        version: '0.5.0',\n        prs: [229],\n        description: \"Added and deprecated attribute to document JS SDK's current behaviour\",\n      },\n    ],\n  },\n  'jsonrpc.protocol.version': {\n    brief: 'The version of the JSON-RPC protocol used.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '2.0',\n    changelog: [{ version: '0.12.0', prs: [420], description: 'Added jsonrpc.protocol.version attribute' }],\n  },\n  'jsonrpc.request.id': {\n    brief: 'The JSON-RPC request identifier. Unique within the session.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '1',\n    aliases: ['mcp.request.id'],\n    changelog: [{ version: '0.12.0', prs: [420], description: 'Added jsonrpc.request.id attribute' }],\n  },\n  'jvm.gc.action': {\n    brief: 'Name of the garbage collector action.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'end of minor GC',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'jvm.gc.name': {\n    brief: 'Name of the garbage collector.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'G1 Young Generation',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'jvm.memory.pool.name': {\n    brief: 'Name of the memory pool.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'G1 Old Gen',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'jvm.memory.type': {\n    brief: 'Name of the memory pool.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'G1 Old Gen',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'jvm.thread.daemon': {\n    brief: 'Whether the thread is daemon or not.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.0.0' }],\n  },\n  'jvm.thread.state': {\n    brief: 'State of the thread.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'blocked',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'koa.name': {\n    brief: 'The name of the Koa middleware or matched route that handled the request.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '/users/:id',\n    deprecation: {\n      reason:\n        'No single replacement. SDKs should use http.route for router layers and code.function.name for middleware layers instead.',\n    },\n    changelog: [{ version: '0.16.0', prs: [490], description: 'Added koa.name attribute as deprecated' }],\n  },\n  'koa.type': {\n    brief: 'The type of the Koa layer that handled the request.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'router',\n    changelog: [{ version: '0.16.0', prs: [471], description: 'Added koa.type attribute' }],\n  },\n  lcp: {\n    brief: 'The value of the recorded Largest Contentful Paint (LCP) web vital',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 2500,\n    deprecation: {\n      replacement: 'browser.web_vital.lcp.value',\n      reason: 'The LCP web vital is now recorded as a browser.web_vital.lcp.value attribute.',\n    },\n    aliases: ['browser.web_vital.lcp.value'],\n    changelog: [\n      {\n        version: '0.5.0',\n        prs: [229],\n        description: \"Added and deprecated attribute to document JS SDK's current behaviour\",\n      },\n    ],\n  },\n  'lcp.element': {\n    brief: 'The dom element responsible for the largest contentful paint.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'img',\n    deprecation: {\n      replacement: 'browser.web_vital.lcp.element',\n      reason: 'The LCP element is now recorded as a browser.web_vital.lcp.element attribute.',\n    },\n    aliases: ['browser.web_vital.lcp.element'],\n    changelog: [{ version: '0.5.0', prs: [233] }, { version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'lcp.id': {\n    brief: 'The id of the dom element responsible for the largest contentful paint.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '#hero',\n    deprecation: {\n      replacement: 'browser.web_vital.lcp.id',\n      reason: 'The LCP id is now recorded as a browser.web_vital.lcp.id attribute.',\n    },\n    aliases: ['browser.web_vital.lcp.id'],\n    changelog: [{ version: '0.5.0', prs: [233] }, { version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'lcp.loadTime': {\n    brief: 'The time it took for the LCP element to be loaded',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1402,\n    deprecation: {\n      replacement: 'browser.web_vital.lcp.load_time',\n      reason: 'The LCP load time is now recorded as a browser.web_vital.lcp.load_time attribute.',\n    },\n    aliases: ['browser.web_vital.lcp.load_time'],\n    changelog: [{ version: '0.5.0', prs: [233] }],\n  },\n  'lcp.renderTime': {\n    brief: 'The time it took for the LCP element to be rendered',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1685,\n    deprecation: {\n      replacement: 'browser.web_vital.lcp.render_time',\n      reason: 'The LCP render time is now recorded as a browser.web_vital.lcp.render_time attribute.',\n    },\n    aliases: ['browser.web_vital.lcp.render_time'],\n    changelog: [{ version: '0.5.0', prs: [233] }],\n  },\n  'lcp.size': {\n    brief: 'The size of the largest contentful paint element.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1234,\n    deprecation: {\n      replacement: 'browser.web_vital.lcp.size',\n      reason: 'The LCP size is now recorded as a browser.web_vital.lcp.size attribute.',\n    },\n    aliases: ['browser.web_vital.lcp.size'],\n    changelog: [{ version: '0.5.0', prs: [233] }, { version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'lcp.url': {\n    brief: 'The url of the dom element responsible for the largest contentful paint.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'https://example.com',\n    deprecation: {\n      replacement: 'browser.web_vital.lcp.url',\n      reason: 'The LCP url is now recorded as a browser.web_vital.lcp.url attribute.',\n    },\n    aliases: ['browser.web_vital.lcp.url'],\n    changelog: [{ version: '0.5.0', prs: [233] }, { version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'logger.name': {\n    brief: 'The name of the logger that generated this event.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'myLogger',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'mcp.cancelled.reason': {\n    brief: 'Reason for the cancellation of an MCP operation.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n      reason: 'Cancellation reasons may contain user-specific or sensitive information',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'User cancelled the request',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.cancelled.request_id': {\n    brief: 'Request ID of the cancelled MCP operation.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '123',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.client.name': {\n    brief: 'Name of the MCP client application.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'claude-desktop',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.client.title': {\n    brief: 'Display title of the MCP client application.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n      reason: 'Client titles may reveal user-specific application configurations or custom setups',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Claude Desktop',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.client.version': {\n    brief: 'Version of the MCP client application.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '1.0.0',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.lifecycle.phase': {\n    brief: 'Lifecycle phase indicator for MCP operations.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'initialization_complete',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.logging.data_type': {\n    brief: 'Data type of the logged message content.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'string',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.logging.level': {\n    brief: 'Log level for MCP logging operations.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'info',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.logging.logger': {\n    brief: 'Logger name for MCP logging operations.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n      reason: 'Logger names may be user-defined and could contain sensitive information',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'mcp_server',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.logging.message': {\n    brief: 'Log message content from MCP logging operations.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n      reason: 'Log messages can contain user data',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Tool execution completed successfully',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.method.name': {\n    brief: 'The name of the MCP request or notification method being called.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'tools/call',\n    changelog: [\n      { version: '0.12.0', prs: [420], description: 'Set is_in_otel=true, attribute exists in OTel MCP registry' },\n      { version: '0.3.0', prs: [171] },\n    ],\n  },\n  'mcp.progress.current': {\n    brief: 'Current progress value of an MCP operation.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 50,\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.3.0', prs: [171] },\n    ],\n  },\n  'mcp.progress.message': {\n    brief: 'Progress message describing the current state of an MCP operation.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n      reason: 'Progress messages may contain user-specific or sensitive information',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Processing 50 of 100 items',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.progress.percentage': {\n    brief: 'Calculated progress percentage of an MCP operation. Computed from current/total * 100.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 50,\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.3.0', prs: [171] },\n    ],\n  },\n  'mcp.progress.token': {\n    brief: 'Token for tracking progress of an MCP operation.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'progress-token-123',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.progress.total': {\n    brief: 'Total progress target value of an MCP operation.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 100,\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.3.0', prs: [171] },\n    ],\n  },\n  'mcp.prompt.name': {\n    brief: 'Name of the MCP prompt template being used.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n      reason: 'Prompt names may reveal user behavior patterns or sensitive operations',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'summarize',\n    deprecation: {\n      replacement: 'gen_ai.prompt.name',\n      reason: 'OTel uses gen_ai.prompt.name for MCP prompt names',\n    },\n    aliases: ['gen_ai.prompt.name'],\n    changelog: [\n      { version: '0.12.0', prs: [420], description: 'Deprecated in favor of gen_ai.prompt.name' },\n      { version: '0.3.0', prs: [171] },\n    ],\n  },\n  'mcp.prompt.result.description': {\n    brief: 'Description of the prompt result.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'A summary of the requested information',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.prompt.result.message_content': {\n    brief: 'Content of the message in the prompt result. Used for single message results only.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Please provide a summary of the document',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.prompt.result.message_count': {\n    brief: 'Number of messages in the prompt result.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 3,\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.3.0', prs: [171] },\n    ],\n  },\n  'mcp.prompt.result.message_role': {\n    brief: 'Role of the message in the prompt result. Used for single message results only.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'user',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.protocol.ready': {\n    brief: 'Protocol readiness indicator for MCP session. Non-zero value indicates the protocol is ready.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1,\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.3.0', prs: [171] },\n    ],\n  },\n  'mcp.protocol.version': {\n    brief: 'MCP protocol version used in the session.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '2024-11-05',\n    changelog: [\n      { version: '0.12.0', prs: [420], description: 'Set is_in_otel=true, attribute exists in OTel MCP registry' },\n      { version: '0.3.0', prs: [171] },\n    ],\n  },\n  'mcp.request.argument.<key>': {\n    brief:\n      '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.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n      reason: 'Arguments contain user input',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    hasDynamicSuffix: true,\n    example: \"mcp.request.argument.query='weather in Paris'\",\n    changelog: [{ version: '0.3.0', prs: [176] }],\n  },\n  'mcp.request.argument.name': {\n    brief: 'Name argument from prompts/get MCP request.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n      reason: 'Prompt names can contain user input',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'summarize',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.request.argument.uri': {\n    brief: 'URI argument from resources/read MCP request.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n      reason: 'URIs can contain user file paths',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'file:///path/to/resource',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.request.id': {\n    brief: 'JSON-RPC request identifier for the MCP request. Unique within the MCP session.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '1',\n    deprecation: {\n      replacement: 'jsonrpc.request.id',\n      reason: 'OTel models MCP as JSON-RPC, uses jsonrpc.request.id',\n    },\n    aliases: ['jsonrpc.request.id'],\n    changelog: [\n      { version: '0.12.0', prs: [420], description: 'Deprecated in favor of jsonrpc.request.id' },\n      { version: '0.3.0', prs: [171] },\n    ],\n  },\n  'mcp.resource.protocol': {\n    brief: 'Protocol of the resource URI being accessed, extracted from the URI.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'file',\n    deprecation: {\n      replacement: 'network.protocol.name',\n      reason: 'OTel uses the generic network.protocol.name attribute',\n    },\n    aliases: ['network.protocol.name', 'net.protocol.name'],\n    changelog: [\n      { version: '0.12.0', prs: [420], description: 'Deprecated in favor of network.protocol.name' },\n      { version: '0.3.0', prs: [171] },\n    ],\n  },\n  'mcp.resource.uri': {\n    brief: 'The resource URI being accessed in an MCP operation.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n      reason: 'URIs can contain sensitive file paths',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'file:///path/to/file.txt',\n    changelog: [\n      { version: '0.12.0', prs: [420], description: 'Set is_in_otel=true, attribute exists in OTel MCP registry' },\n      { version: '0.3.0', prs: [171] },\n    ],\n  },\n  'mcp.server.name': {\n    brief: 'Name of the MCP server application.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'sentry-mcp-server',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.server.title': {\n    brief: 'Display title of the MCP server application.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n      reason: 'Server titles may reveal user-specific application configurations or custom setups',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Sentry MCP Server',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.server.version': {\n    brief: 'Version of the MCP server application.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '0.1.0',\n    changelog: [{ version: '0.3.0', prs: [171] }],\n  },\n  'mcp.session.id': {\n    brief: 'Identifier for the MCP session.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '550e8400-e29b-41d4-a716-446655440000',\n    changelog: [\n      { version: '0.12.0', prs: [420], description: 'Set is_in_otel=true, attribute exists in OTel MCP registry' },\n      { version: '0.3.0', prs: [171] },\n    ],\n  },\n  'mcp.tool.name': {\n    brief: 'Name of the MCP tool being called.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'calculator',\n    deprecation: {\n      replacement: 'gen_ai.tool.name',\n      reason: 'OTel uses gen_ai.tool.name for MCP tool names',\n    },\n    aliases: ['gen_ai.tool.name', 'ai.function_call'],\n    changelog: [\n      { version: '0.12.0', prs: [420], description: 'Deprecated in favor of gen_ai.tool.name' },\n      { version: '0.3.0', prs: [171] },\n    ],\n  },\n  'mcp.tool.result.content': {\n    brief: 'The content of the tool result.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n      reason: 'Tool results can contain user data',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '{\"output\": \"rainy\", \"toolCallId\": \"1\"}',\n    deprecation: {\n      replacement: 'gen_ai.tool.call.result',\n      reason: 'OTel uses gen_ai.tool.call.result for MCP tool results',\n    },\n    aliases: ['gen_ai.tool.call.result', 'gen_ai.tool.message', 'gen_ai.tool.output'],\n    changelog: [\n      { version: '0.12.0', prs: [420], description: 'Deprecated in favor of gen_ai.tool.call.result' },\n      { version: '0.3.0', prs: [171] },\n      { version: '0.2.0', prs: [164] },\n    ],\n  },\n  'mcp.tool.result.content_count': {\n    brief: 'Number of content items in the tool result.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1,\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.3.0', prs: [171] },\n    ],\n  },\n  'mcp.tool.result.is_error': {\n    brief: 'Whether a tool execution resulted in an error.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: false,\n    deprecation: {\n      replacement: 'error.type',\n      reason:\n        \"OTel uses error.type set to 'tool_error' when isError is true. Cannot be automatically backfilled due to type mismatch (boolean vs string).\",\n    },\n    changelog: [\n      { version: '0.12.0', prs: [420], description: 'Deprecated in favor of error.type' },\n      { version: '0.3.0', prs: [171] },\n    ],\n  },\n  'mcp.transport': {\n    brief: 'Transport method used for MCP communication.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'stdio',\n    deprecation: {\n      replacement: 'network.transport',\n      reason: 'OTel uses the generic network.transport attribute',\n    },\n    aliases: ['network.transport', 'net.transport'],\n    changelog: [\n      { version: '0.12.0', prs: [420], description: 'Deprecated in favor of network.transport' },\n      { version: '0.3.0', prs: [171] },\n    ],\n  },\n  'mdc.<key>': {\n    brief:\n      \"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.\",\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    hasDynamicSuffix: true,\n    example: \"mdc.some_key='some_value'\",\n    changelog: [{ version: '0.3.0', prs: [176] }],\n  },\n  'messaging.batch.message_count': {\n    brief: 'The number of messages sent, received, or processed in the scope of the batching operation.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 10,\n    changelog: [{ version: '0.6.0', prs: [341], description: 'Added messaging.batch.message_count attribute' }],\n  },\n  'messaging.destination': {\n    brief: 'The message destination name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'BestTopic',\n    deprecation: {\n      replacement: 'messaging.destination.name',\n      reason:\n        'This attribute is being deprecated in favor of messaging.destination.name, which is the OTel-aligned replacement.',\n    },\n    aliases: ['messaging.destination.name'],\n    changelog: [\n      {\n        version: '0.16.0',\n        prs: [482],\n        description: 'Added messaging.destination attribute, deprecated in favor of messaging.destination.name',\n      },\n    ],\n  },\n  'messaging.destination.connection': {\n    brief: 'The message destination connection.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'BestTopic',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'messaging.destination.name': {\n    brief: 'The message destination name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'BestTopic',\n    aliases: ['messaging.destination'],\n    changelog: [\n      { version: '0.16.0', prs: [482], description: 'Added messaging.destination as an alias' },\n      { version: '0.1.0', prs: [127] },\n      { version: '0.0.0' },\n    ],\n  },\n  'messaging.message.body.size': {\n    brief: 'The size of the message body in bytes.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 839,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'messaging.message.conversation_id': {\n    brief:\n      'The conversation ID identifying the conversation to which the message belongs, represented as a string. Sometimes called \"Correlation ID\".',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'MyConversationId',\n    changelog: [{ version: '0.16.0', prs: [468], description: 'Added messaging.message.conversation_id attribute' }],\n  },\n  'messaging.message.envelope.size': {\n    brief: 'The size of the message body and metadata in bytes.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 1045,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'messaging.message.id': {\n    brief: 'A value used by the messaging system as an identifier for the message, represented as a string.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'f47ac10b58cc4372a5670e02b2c3d479',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'messaging.message.receive.latency': {\n    brief: 'The latency between when the message was published and received.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1732847252,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'messaging.message.retry.count': {\n    brief: 'The amount of attempts to send the message.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 2,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'messaging.operation.name': {\n    brief: 'The name of the messaging operation being performed',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'send',\n    changelog: [{ version: '0.11.0', prs: [392], description: 'Added messaging.operation.name attribute' }],\n  },\n  'messaging.operation.type': {\n    brief: 'A string identifying the type of the messaging operation',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'create',\n    changelog: [{ version: '0.1.0', prs: [51, 127] }],\n  },\n  'messaging.rabbitmq.destination.routing_key': {\n    brief: 'RabbitMQ message routing key.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'myKey',\n    changelog: [\n      { version: '0.16.0', prs: [468], description: 'Added messaging.rabbitmq.destination.routing_key attribute' },\n    ],\n  },\n  'messaging.system': {\n    brief: 'The messaging system as identified by the client instrumentation.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'activemq',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  method: {\n    brief: 'The HTTP method used.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'GET',\n    deprecation: {\n      replacement: 'http.request.method',\n    },\n    aliases: ['http.request.method', 'http.request_method', 'http.method'],\n    changelog: [{ version: '0.1.0', prs: [61, 127] }, { version: '0.0.0' }],\n  },\n  'middleware.name': {\n    brief: 'The name of the middleware.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'AuthenticationMiddleware',\n    changelog: [{ version: '0.6.0', prs: [336], description: 'Added middleware.name attribute' }],\n  },\n  'navigation.origin': {\n    brief:\n      'The origin of the navigation (usually client side router navigations). Should preferrably parameterized template (like url.template) or a URL path otherwise.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '/users/:id',\n    aliases: ['sentry.sveltekit.navigation.from'],\n    changelog: [{ version: '0.16.0', prs: [467], description: 'Added navigation.origin attribute' }],\n  },\n  'navigation.route.id': {\n    brief:\n      'The identifier of the matched client-side route, as assigned by the routing framework (e.g., vue-router name, react-router id).',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'AboutView',\n    changelog: [{ version: '0.16.0', prs: [468], description: 'Added navigation.route.id attribute' }],\n  },\n  'navigation.type': {\n    brief: 'The type of navigation done by a client-side router.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'router.push',\n    aliases: ['sentry.sveltekit.navigation.type'],\n    changelog: [\n      { version: '0.16.0', prs: [467], description: 'Added new deprecated alias' },\n      { version: '0.1.0', prs: [127] },\n      { version: '0.0.0' },\n    ],\n  },\n  'nel.elapsed_time': {\n    brief:\n      'The elapsed number of milliseconds between the start of the resource fetch and when it was completed or aborted by the user agent.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 100,\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [68] },\n    ],\n  },\n  'nel.phase': {\n    brief: 'If request failed, the phase of its network error. If request succeeded, \"application\".',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'application',\n    changelog: [{ version: '0.1.0', prs: [68, 127] }],\n  },\n  'nel.referrer': {\n    brief: \"request's referrer, as determined by the referrer policy associated with its client.\",\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'https://example.com/foo?bar=baz',\n    changelog: [{ version: '0.1.0', prs: [68, 127] }],\n  },\n  'nel.sampling_function': {\n    brief: 'The sampling function used to determine if the request should be sampled.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 0.5,\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.1.0', prs: [68] },\n    ],\n  },\n  'nel.type': {\n    brief: 'If request failed, the type of its network error. If request succeeded, \"ok\".',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'dns.unreachable',\n    changelog: [{ version: '0.1.0', prs: [68, 127] }],\n  },\n  'network.connection.effective_type': {\n    brief: 'Specifies the effective type of the current connection (e.g. slow-2g, 2g, 3g, 4g).',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '4g',\n    aliases: ['effectiveConnectionType'],\n    changelog: [\n      {\n        version: '0.5.0',\n        prs: [279],\n        description: 'Added attribute network.connection.effective_type to be used instead of effectiveConnectionType',\n      },\n    ],\n  },\n  'network.connection.rtt': {\n    brief: 'Specifies the estimated effective round-trip time of the current connection, in milliseconds.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 100,\n    aliases: ['connection.rtt'],\n    changelog: [\n      {\n        version: '0.5.0',\n        prs: [279],\n        description: 'Added attribute network.connection.rtt to be used instead of connection.rtt',\n      },\n    ],\n  },\n  'network.connection.type': {\n    brief: 'Specifies the type of the current connection (e.g. wifi, ethernet, cellular , etc).',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'wifi',\n    aliases: ['device.connection_type', 'connectionType'],\n    changelog: [\n      {\n        version: '0.5.0',\n        prs: [279],\n        description: 'Added attribute network.connection.type to be used instead of connectionType',\n      },\n    ],\n  },\n  'network.local.address': {\n    brief: 'Local address of the network connection - IP address or Unix domain socket name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '10.1.2.80',\n    aliases: ['net.host.ip', 'net.sock.host.addr'],\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'network.local.port': {\n    brief: 'Local port number of the network connection.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 65400,\n    aliases: ['net.sock.host.port'],\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'network.peer.address': {\n    brief: 'Peer address of the network connection - IP address or Unix domain socket name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '10.1.2.80',\n    aliases: ['net.peer.ip', 'net.sock.peer.addr'],\n    changelog: [{ version: '0.1.0', prs: [108, 127] }, { version: '0.0.0' }],\n  },\n  'network.peer.port': {\n    brief: 'Peer port number of the network connection.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 65400,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'network.protocol.name': {\n    brief: 'OSI application layer or non-OSI equivalent.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'http',\n    aliases: ['net.protocol.name', 'mcp.resource.protocol'],\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'network.protocol.version': {\n    brief: 'The actual version of the protocol used for network communication.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '1.1',\n    aliases: ['http.flavor', 'net.protocol.version'],\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'network.transport': {\n    brief: 'OSI transport layer or inter-process communication method.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'tcp',\n    aliases: ['net.transport', 'mcp.transport'],\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'network.type': {\n    brief: 'OSI network layer or non-OSI equivalent.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'ipv4',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'net.host.ip': {\n    brief: 'Local address of the network connection - IP address or Unix domain socket name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '192.168.0.1',\n    deprecation: {\n      replacement: 'network.local.address',\n    },\n    aliases: ['network.local.address', 'net.sock.host.addr'],\n    changelog: [{ version: '0.1.0', prs: [61, 108, 127] }, { version: '0.0.0' }],\n  },\n  'net.host.name': {\n    brief:\n      'Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'example.com',\n    deprecation: {\n      replacement: 'server.address',\n    },\n    aliases: ['server.address', 'http.server_name', 'http.host', 'server_name'],\n    changelog: [{ version: '0.1.0', prs: [61, 108, 127] }, { version: '0.0.0' }],\n  },\n  'net.host.port': {\n    brief: 'Server port number.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 1337,\n    deprecation: {\n      replacement: 'server.port',\n    },\n    aliases: ['server.port'],\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [61] }, { version: '0.0.0' }],\n  },\n  'net.peer.ip': {\n    brief: 'Peer address of the network connection - IP address or Unix domain socket name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '192.168.0.1',\n    deprecation: {\n      replacement: 'network.peer.address',\n    },\n    aliases: ['network.peer.address', 'net.sock.peer.addr'],\n    changelog: [{ version: '0.1.0', prs: [61, 108, 127] }, { version: '0.0.0' }],\n  },\n  'net.peer.name': {\n    brief:\n      'Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'example.com',\n    deprecation: {\n      replacement: 'server.address',\n      reason: 'Deprecated, use server.address on client spans and client.address on server spans.',\n    },\n    changelog: [{ version: '0.1.0', prs: [61, 127] }, { version: '0.0.0' }],\n  },\n  'net.peer.port': {\n    brief: 'Peer port number.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 1337,\n    deprecation: {\n      replacement: 'server.port',\n      reason: 'Deprecated, use server.port on client spans and client.port on server spans.',\n    },\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [61] }, { version: '0.0.0' }],\n  },\n  'net.protocol.name': {\n    brief: 'OSI application layer or non-OSI equivalent.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'http',\n    deprecation: {\n      replacement: 'network.protocol.name',\n    },\n    aliases: ['network.protocol.name', 'mcp.resource.protocol'],\n    changelog: [{ version: '0.1.0', prs: [61, 127] }, { version: '0.0.0' }],\n  },\n  'net.protocol.version': {\n    brief: 'The actual version of the protocol used for network communication.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '1.1',\n    deprecation: {\n      replacement: 'network.protocol.version',\n    },\n    aliases: ['network.protocol.version', 'http.flavor'],\n    changelog: [{ version: '0.1.0', prs: [61, 108, 127] }, { version: '0.0.0' }],\n  },\n  'net.sock.family': {\n    brief: 'OSI transport and network layer',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'inet',\n    deprecation: {\n      replacement: 'network.transport',\n      reason: 'Deprecated, use network.transport and network.type.',\n    },\n    changelog: [{ version: '0.1.0', prs: [61, 127] }, { version: '0.0.0' }],\n  },\n  'net.sock.host.addr': {\n    brief: 'Local address of the network connection mapping to Unix domain socket name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '/var/my.sock',\n    deprecation: {\n      replacement: 'network.local.address',\n    },\n    aliases: ['network.local.address', 'net.host.ip'],\n    changelog: [{ version: '0.1.0', prs: [61, 108, 127] }, { version: '0.0.0' }],\n  },\n  'net.sock.host.port': {\n    brief: 'Local port number of the network connection.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 8080,\n    deprecation: {\n      replacement: 'network.local.port',\n    },\n    aliases: ['network.local.port'],\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [61] }, { version: '0.0.0' }],\n  },\n  'net.sock.peer.addr': {\n    brief: 'Peer address of the network connection - IP address',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '192.168.0.1',\n    deprecation: {\n      replacement: 'network.peer.address',\n    },\n    aliases: ['network.peer.address', 'net.peer.ip'],\n    changelog: [{ version: '0.1.0', prs: [61, 108, 127] }, { version: '0.0.0' }],\n  },\n  'net.sock.peer.name': {\n    brief: 'Peer address of the network connection - Unix domain socket name',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '/var/my.sock',\n    deprecation: {\n      reason: 'Deprecated from OTEL, no replacement at this time',\n    },\n    changelog: [{ version: '0.1.0', prs: [61, 119, 127] }, { version: '0.0.0' }],\n  },\n  'net.sock.peer.port': {\n    brief: 'Peer port number of the network connection.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 8080,\n    deprecation: {\n      replacement: 'network.peer.port',\n    },\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.1.0', prs: [61] }, { version: '0.0.0' }],\n  },\n  'net.transport': {\n    brief: 'OSI transport layer or inter-process communication method.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'tcp',\n    deprecation: {\n      replacement: 'network.transport',\n    },\n    aliases: ['network.transport', 'mcp.transport'],\n    changelog: [{ version: '0.1.0', prs: [61, 127] }, { version: '0.0.0' }],\n  },\n  'os.build': {\n    brief: 'The build ID of the operating system.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '1234567890',\n    deprecation: {\n      replacement: 'os.build_id',\n    },\n    aliases: ['os.build_id'],\n    changelog: [\n      { version: '0.5.0', prs: [301], description: 'Added os.build attribute, deprecated in favor of os.build_id' },\n    ],\n  },\n  'os.build_id': {\n    brief: 'The build ID of the operating system.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '1234567890',\n    aliases: ['os.build'],\n    changelog: [\n      { version: '0.5.0', prs: [301], description: 'Added os.build as alias' },\n      { version: '0.1.0', prs: [127] },\n      { version: '0.0.0' },\n    ],\n  },\n  'os.description': {\n    brief:\n      'Human readable (not intended to be parsed) OS version information, like e.g. reported by ver or lsb_release -a commands.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'Ubuntu 18.04.1 LTS',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'os.kernel_version': {\n    brief: 'An independent kernel version string. Typically the entire output of the `uname` syscall.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '20.2.0',\n    changelog: [{ version: '0.5.0', prs: [301], description: 'Added os.kernel_version attribute' }],\n  },\n  'os.name': {\n    brief: 'Human readable operating system name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'Ubuntu',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'os.raw_description': {\n    brief:\n      '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.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Ubuntu 22.04.4 LTS (Jammy Jellyfish)',\n    changelog: [{ version: '0.5.0', prs: [301], description: 'Added os.raw_description attribute' }],\n  },\n  'os.rooted': {\n    brief: 'Whether the operating system has been jailbroken or rooted.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.5.0', prs: [301], description: 'Added os.rooted attribute' }],\n  },\n  'os.theme': {\n    brief: 'Whether the OS runs in dark mode or light mode.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'dark',\n    changelog: [{ version: '0.5.0', prs: [301], description: 'Added os.theme attribute' }],\n  },\n  'os.type': {\n    brief: 'The operating system type.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'linux',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'os.version': {\n    brief: 'The version of the operating system.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '18.04.2',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'otel.kind': {\n    brief:\n      'The span kind (https://opentelemetry.io/docs/concepts/signals/traces/#span-kind). Deprecated, use `sentry.kind` instead.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'SERVER',\n    deprecation: {\n      replacement: 'sentry.kind',\n      reason: 'Deprecated in favor of sentry.kind',\n    },\n    aliases: ['sentry.kind'],\n    changelog: [{ version: '0.13.0', prs: [440], description: 'Added otel.kind attribute' }],\n  },\n  'otel.scope.name': {\n    brief: 'The name of the instrumentation scope - (InstrumentationScope.Name in OTLP).',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'io.opentelemetry.contrib.mongodb',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'otel.scope.version': {\n    brief: 'The version of the instrumentation scope - (InstrumentationScope.Version in OTLP).',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '2.4.5',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'otel.status_code': {\n    brief: 'Name of the code, either “OK” or “ERROR”. MUST NOT be set if the status code is UNSET.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'OK',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'otel.status_description': {\n    brief: 'Description of the Status if it has a value, otherwise not set.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'resource not found',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'params.<key>': {\n    brief:\n      'Decoded parameters extracted from a URL path. Usually added by client-side routing frameworks like vue-router.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    hasDynamicSuffix: true,\n    example: \"params.id='123'\",\n    aliases: ['url.path.parameter.<key>'],\n    changelog: [{ version: '0.1.0', prs: [103] }],\n  },\n  'performance.activationStart': {\n    brief: 'The time between initiating a navigation to a page and the browser activating the page',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1.983,\n    deprecation: {\n      replacement: 'browser.performance.navigation.activation_start',\n      reason: 'The activationStart is now recorded as the browser.performance.navigation.activation_start attribute.',\n    },\n    aliases: ['browser.performance.navigation.activation_start'],\n    changelog: [{ version: '0.5.0', prs: [321], description: 'Added performance.activationStart attribute' }],\n  },\n  'performance.timeOrigin': {\n    brief: \"The browser's performance.timeOrigin timestamp representing the time when the pageload was initiated\",\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1776185678.886,\n    deprecation: {\n      replacement: 'browser.performance.time_origin',\n      reason: 'The timeOrigin is now recorded as the browser.performance.time_origin attribute.',\n    },\n    aliases: ['browser.performance.time_origin'],\n    changelog: [{ version: '0.5.0', prs: [321], description: 'Added performance.timeOrigin attribute' }],\n  },\n  previous_route: {\n    brief: 'Also used by mobile SDKs to indicate the previous route in the application.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'HomeScreen',\n    changelog: [{ version: '0.1.0', prs: [74] }, { version: '0.0.0' }],\n  },\n  'process.command_args': {\n    brief: 'All the command arguments (including the command/executable itself) as received by the process.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: ['cmd/otecol', '--config=config.yaml'],\n    changelog: [{ version: '0.6.0', prs: [327], description: 'Added process.command_args attribute' }],\n  },\n  'process.executable.name': {\n    brief: 'The name of the executable that started the process.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'getsentry',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'process.pid': {\n    brief: 'The process ID of the running process.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 12345,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'process.runtime.description': {\n    brief:\n      '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.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'Eclipse OpenJ9 VM openj9-0.21.0',\n    aliases: ['runtime.raw_description'],\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'process.runtime.engine.name': {\n    brief: 'The name of the runtime engine.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'v8',\n    changelog: [{ version: '0.0.0' }],\n  },\n  'process.runtime.engine.version': {\n    brief: 'The version of the runtime engine.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '12.9.202.13-rusty',\n    changelog: [{ version: '0.0.0' }],\n  },\n  'process.runtime.name': {\n    brief: 'The name of the runtime. Equivalent to `name` in the Sentry runtime context.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'node',\n    aliases: ['runtime.name'],\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'process.runtime.version': {\n    brief:\n      'The version of the runtime of this process, as returned by the runtime without modification. Equivalent to `version` in the Sentry runtime context.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '18.04.2',\n    aliases: ['runtime.version'],\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'query.<key>': {\n    brief: 'An item in a query string. Usually added by client-side routing frameworks like vue-router.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    hasDynamicSuffix: true,\n    example: \"query.id='123'\",\n    deprecation: {\n      replacement: 'url.query',\n      reason: 'Instead of sending items individually in query.<key>, they should be sent all together with url.query.',\n    },\n    changelog: [{ version: '0.1.0', prs: [103] }],\n  },\n  'react.version': {\n    brief: 'The version of the React framework',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '18.2.0',\n    changelog: [{ version: '0.7.0', prs: [368], description: 'Added react.version attribute' }],\n  },\n  release: {\n    brief: 'The sentry release.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'production',\n    deprecation: {\n      replacement: 'sentry.release',\n    },\n    aliases: ['sentry.release'],\n    changelog: [{ version: '0.1.0', prs: [61, 127] }, { version: '0.0.0' }],\n  },\n  'remix.action_form_data.<key>': {\n    brief: 'Remix form data, <key> being the form data key, the value being the form data value.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    hasDynamicSuffix: true,\n    example: \"http.response.header.text='test'\",\n    changelog: [{ version: '0.1.0', prs: [103] }],\n  },\n  replay_id: {\n    brief: 'The id of the sentry replay.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '123e4567e89b12d3a456426614174000',\n    deprecation: {\n      replacement: 'sentry.replay_id',\n    },\n    aliases: ['sentry.replay_id'],\n    changelog: [{ version: '0.1.0', prs: [61] }, { version: '0.0.0' }],\n  },\n  'resource.deployment.environment': {\n    brief: 'The software deployment environment name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'production',\n    deprecation: {\n      replacement: 'sentry.environment',\n    },\n    changelog: [{ version: '0.5.0', prs: [266] }],\n  },\n  'resource.deployment.environment.name': {\n    brief: 'The software deployment environment name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'production',\n    deprecation: {\n      replacement: 'sentry.environment',\n    },\n    changelog: [{ version: '0.3.1', prs: [196] }],\n  },\n  'resource.render_blocking_status': {\n    brief: 'The render blocking status of the resource.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'non-blocking',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  route: {\n    brief:\n      '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.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'App\\\\Controller::indexAction',\n    deprecation: {\n      replacement: 'http.route',\n    },\n    aliases: ['http.route'],\n    changelog: [{ version: '0.1.0', prs: [61, 74] }, { version: '0.0.0' }],\n  },\n  'rpc.grpc.status_code': {\n    brief: 'The numeric status code of the gRPC request.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 2,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'rpc.method': {\n    brief: 'The fully-qualified logical name of the method from the RPC interface perspective.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'com.example.ExampleService/exampleMethod',\n    changelog: [{ version: '0.7.0', prs: [351], description: 'Added rpc.method attribute' }],\n  },\n  'rpc.response.status_code': {\n    brief: 'Status code of the RPC returned by the RPC server or generated by the client.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'DEADLINE_EXCEEDED',\n    changelog: [{ version: '0.7.0', prs: [352], description: 'Added rpc.response.status_code attribute' }],\n  },\n  'rpc.service': {\n    brief: 'The full (logical) name of the service being called, including its package name, if applicable.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'myService.BestService',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'rpc.system': {\n    brief: 'A string identifying the remoting system.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'aws-api',\n    deprecation: {\n      replacement: 'rpc.system.name',\n      reason: 'This attribute is being deprecated in favor of rpc.system.name, which is the OTel-aligned replacement.',\n    },\n    aliases: ['rpc.system.name'],\n    changelog: [\n      {\n        version: '0.16.0',\n        prs: [482],\n        description: 'Added rpc.system attribute, deprecated in favor of rpc.system.name',\n      },\n    ],\n  },\n  'rpc.system.name': {\n    brief: 'A string identifying the remoting system.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'aws-api',\n    aliases: ['rpc.system'],\n    changelog: [{ version: '0.16.0', prs: [482], description: 'Added rpc.system.name attribute' }],\n  },\n  'runtime.build': {\n    brief: 'The application build string, when it is separate from the version.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'stable',\n    deprecation: {\n      reason:\n        'The runtime.* namespace is deprecated in favor of process.runtime.*. No direct OTel equivalent exists for this attribute.',\n    },\n    changelog: [{ version: '0.11.0', prs: [383], description: 'Added and deprecated runtime.build attribute' }],\n  },\n  'runtime.name': {\n    brief: 'The name of the runtime. For example node, CPython, or rustc.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'node',\n    deprecation: {\n      replacement: 'process.runtime.name',\n      reason: 'Prefer OTel-aligned process.runtime.name',\n    },\n    aliases: ['process.runtime.name'],\n    changelog: [\n      {\n        version: '0.11.0',\n        prs: [383],\n        description: 'Added and deprecated runtime.name attribute in favor of process.runtime.name',\n      },\n    ],\n  },\n  'runtime.raw_description': {\n    brief:\n      'Unprocessed description string as obtained from the runtime. Used to extract name and version for well-known runtimes.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Eclipse OpenJ9 VM openj9-0.21.0',\n    deprecation: {\n      replacement: 'process.runtime.description',\n      reason: 'Prefer OTel-aligned process.runtime.description',\n    },\n    aliases: ['process.runtime.description'],\n    changelog: [\n      {\n        version: '0.11.0',\n        prs: [383],\n        description: 'Added and deprecated runtime.raw_description attribute in favor of process.runtime.description',\n      },\n    ],\n  },\n  'runtime.version': {\n    brief: 'The version of the runtime.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '18.04.2',\n    deprecation: {\n      replacement: 'process.runtime.version',\n      reason: 'Prefer OTel-aligned process.runtime.version',\n    },\n    aliases: ['process.runtime.version'],\n    changelog: [\n      {\n        version: '0.11.0',\n        prs: [383],\n        description: 'Added and deprecated runtime.version attribute in favor of process.runtime.version',\n      },\n    ],\n  },\n  'score.<key>': {\n    brief:\n      'The weighted performance score for a web vital. This is defined as `score.weight.<key>` * `score.ratio.<key>`.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    hasDynamicSuffix: true,\n    example: 'score.cls=0.1723',\n    changelog: [{ version: '0.7.0', prs: [355], description: 'Added score.<key> attribute' }],\n  },\n  'score.ratio.<key>': {\n    brief: 'The score for a web vital, normalized to a number between 0 and 1.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    hasDynamicSuffix: true,\n    example: 'score.ratio.inp=0.7748',\n    changelog: [{ version: '0.7.0', prs: [355], description: 'Added score.ratio.<key> attribute' }],\n  },\n  'score.total': {\n    brief:\n      'The total performance score of a span. This is the sum of individual weighted web vital scores (see `score.<key>`).',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    changelog: [{ version: '0.7.0', prs: [355], description: 'Added score.total attribute' }],\n  },\n  'score.weight.<key>': {\n    brief: \"The relative weight of a web vital in a span's performance score.\",\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    hasDynamicSuffix: true,\n    example: 'score.weight.fcp=0.25',\n    changelog: [{ version: '0.7.0', prs: [355], description: 'Added score.weight.<key> attribute' }],\n  },\n  'sentry.action': {\n    brief:\n      '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.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'SELECT',\n    changelog: [{ version: '0.4.0', prs: [212] }],\n  },\n  'sentry.browser.name': {\n    brief: 'The name of the browser.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Chrome',\n    deprecation: {\n      replacement: 'browser.name',\n    },\n    aliases: ['browser.name'],\n    changelog: [{ version: '0.1.0', prs: [139] }],\n  },\n  'sentry.browser.version': {\n    brief: 'The version of the browser.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '120.0.6099.130',\n    deprecation: {\n      replacement: 'browser.version',\n    },\n    aliases: ['browser.version'],\n    changelog: [{ version: '0.1.0', prs: [139] }],\n  },\n  'sentry.cancellation_reason': {\n    brief: 'The reason why a span ended early.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'document.hidden',\n    changelog: [{ version: '0.0.0' }],\n  },\n  'sentry.category': {\n    brief:\n      \"The high-level category of a span, derived from the span operation or span attributes. This categorizes spans by their general purpose (e.g., database, HTTP, UI). Known values include: 'ai', 'ai.pipeline', 'app', 'browser', 'cache', 'console', 'db', 'event', 'file', 'function.aws', 'function.azure', 'function.gcp', 'function.nextjs', 'function.remix', 'graphql', 'grpc', 'http', 'measure', 'middleware', 'navigation', 'pageload', 'queue', 'resource', 'rpc', 'serialize', 'subprocess', 'template', 'topic', 'ui', 'ui.angular', 'ui.ember', 'ui.react', 'ui.svelte', 'ui.vue', 'view', 'websocket'.\",\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'db',\n    changelog: [{ version: '0.4.0', prs: [218] }],\n  },\n  'sentry.client_sample_rate': {\n    brief: 'Rate at which a span was sampled in the SDK.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 0.5,\n    changelog: [{ version: '0.1.0', prs: [102] }],\n  },\n  'sentry.description': {\n    brief: 'The human-readable description of a span.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'index view query',\n    changelog: [{ version: '0.1.0', prs: [135] }],\n  },\n  'sentry.dist': {\n    brief: 'The sentry dist.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '1.0',\n    aliases: ['dist'],\n    changelog: [{ version: '0.16.0', prs: [489], description: 'Added dist as an alias' }, { version: '0.0.0' }],\n  },\n  'sentry.domain': {\n    brief:\n      '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.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'example.com',\n    changelog: [{ version: '0.4.0', prs: [212] }],\n  },\n  'sentry.dsc.environment': {\n    brief: 'The environment from the dynamic sampling context.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'internal',\n    example: 'prod',\n    changelog: [{ version: '0.3.0', prs: [185] }],\n  },\n  'sentry.dsc.project_id': {\n    brief:\n      '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.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'internal',\n    example: '12345',\n    changelog: [{ version: '0.7.0', prs: [358], description: 'Add sentry.dsc.project_id as an attribute' }],\n  },\n  'sentry.dsc.public_key': {\n    brief: 'The public key from the dynamic sampling context.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'internal',\n    example: 'c51734c603c4430eb57cb0a5728a479d',\n    changelog: [{ version: '0.3.0', prs: [185] }],\n  },\n  'sentry.dsc.release': {\n    brief: 'The release identifier from the dynamic sampling context.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'internal',\n    example: 'frontend@e8211be71b214afab5b85de4b4c54be3714952bb',\n    changelog: [{ version: '0.3.0', prs: [185] }],\n  },\n  'sentry.dsc.sampled': {\n    brief: 'Whether the event was sampled according to the dynamic sampling context.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'internal',\n    example: true,\n    changelog: [{ version: '0.3.0', prs: [185] }],\n  },\n  'sentry.dsc.sample_rate': {\n    brief: 'The sample rate from the dynamic sampling context.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'internal',\n    example: '1.0',\n    changelog: [{ version: '0.3.0', prs: [185] }],\n  },\n  'sentry.dsc.trace_id': {\n    brief: 'The trace ID from the dynamic sampling context.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'internal',\n    example: '047372980460430cbc78d9779df33a46',\n    changelog: [{ version: '0.3.0', prs: [185] }],\n  },\n  'sentry.dsc.transaction': {\n    brief: 'The transaction name from the dynamic sampling context.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'internal',\n    example: '/issues/errors-outages/',\n    changelog: [{ version: '0.3.0', prs: [185] }],\n  },\n  'sentry.environment': {\n    brief: 'The sentry environment.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'production',\n    aliases: ['environment'],\n    changelog: [{ version: '0.0.0' }],\n  },\n  'sentry.exclusive_time': {\n    brief: 'The exclusive time duration of the span in milliseconds.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1234,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.3.0', prs: [160] }, { version: '0.0.0' }],\n  },\n  'sentry.graphql.operation': {\n    brief: 'Indicates the type of graphql operation, emitted by the Javascript SDK.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'getUserById',\n    changelog: [{ version: '0.3.1', prs: [190] }],\n  },\n  'sentry.group': {\n    brief:\n      'Stores the hash of `sentry.normalized_description`. This is primarily used for grouping spans in the product end.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    changelog: [{ version: '0.4.0', prs: [212] }],\n  },\n  'sentry.http.prefetch': {\n    brief: 'If an http request was a prefetch request.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.0.0' }],\n  },\n  'sentry.idle_span_finish_reason': {\n    brief: 'The reason why an idle span ended early.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'idleTimeout',\n    changelog: [{ version: '0.0.0' }],\n  },\n  'sentry.is_remote': {\n    brief: \"Indicates whether a span's parent is remote.\",\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.3.1', prs: [190] }],\n  },\n  'sentry.kind': {\n    brief:\n      '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.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'server',\n    aliases: ['otel.kind'],\n    changelog: [{ version: '0.3.1', prs: [190] }],\n  },\n  'sentry.main_thread': {\n    brief: 'Whether the span or event occurred on the main thread. Computed by Relay and should not be set by SDKs.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.5.0' }],\n  },\n  'sentry.message.parameter.<key>': {\n    brief:\n      \"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)\",\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: \"sentry.message.parameter.0='123'\",\n    changelog: [{ version: '0.1.0', prs: [116] }],\n  },\n  'sentry.message.template': {\n    brief: 'The parameterized template string.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Hello, {name}!',\n    changelog: [{ version: '0.1.0', prs: [116] }],\n  },\n  'sentry.metric.source': {\n    brief:\n      'The provenance of a metric.  For example, this can be set to indicate if a metric was generated by Relay from a span.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'span',\n    changelog: [{ version: '0.16.0', prs: [476], description: 'Added sentry.metric.source attribute' }],\n  },\n  'sentry.mobile': {\n    brief: 'Whether the application is using a mobile SDK. Computed by Relay and should not be set by SDKs.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.5.0' }],\n  },\n  'sentry.module.<key>': {\n    brief: 'A module that was loaded in the process. The key is the name of the module.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    hasDynamicSuffix: true,\n    example: \"sentry.module.brianium/paratest='v7.7.0'\",\n    changelog: [{ version: '0.1.0', prs: [103] }],\n  },\n  'sentry.nextjs.ssr.function.route': {\n    brief:\n      '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.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '/posts/[id]/layout',\n    changelog: [{ version: '0.1.0', prs: [54, 106] }],\n  },\n  'sentry.nextjs.ssr.function.type': {\n    brief:\n      '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.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'generateMetadata',\n    changelog: [{ version: '0.1.0', prs: [54, 106] }],\n  },\n  'sentry.normalized_db_query': {\n    brief: 'The normalized version of `db.query.text`.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'SELECT .. FROM sentry_project WHERE (project_id = %s)',\n    changelog: [{ version: '0.3.1', prs: [194] }],\n  },\n  'sentry.normalized_db_query.hash': {\n    brief: 'The hash of `sentry.normalized_db_query`.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    changelog: [{ version: '0.4.0', prs: [200] }],\n  },\n  'sentry.normalized_description': {\n    brief:\n      '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).',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'SELECT .. FROM sentry_project WHERE (project_id = %s)',\n    changelog: [{ version: '0.4.0', prs: [212] }],\n  },\n  'sentry.observed_timestamp_nanos': {\n    brief: 'The timestamp at which an envelope was received by Relay, in nanoseconds.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '1544712660300000000',\n    changelog: [\n      { version: '0.3.0', prs: [174] },\n      { version: '0.2.0', prs: [137] },\n    ],\n  },\n  'sentry.op': {\n    brief: 'The operation of a span.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'http.client',\n    changelog: [{ version: '0.0.0' }],\n  },\n  'sentry.origin': {\n    brief: 'The origin of the instrumentation (e.g. span, log, etc.)',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'auto.http.otel.fastify',\n    changelog: [{ version: '0.1.0', prs: [68] }, { version: '0.0.0' }],\n  },\n  'sentry.platform': {\n    brief: 'The sdk platform that generated the event.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'php',\n    changelog: [{ version: '0.0.0' }],\n  },\n  'sentry.profiler_id': {\n    brief: 'The id of the currently running profiler (continuous profiling)',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '18779b64dd35d1a538e7ce2dd2d3fad3',\n    changelog: [{ version: '0.4.0', prs: [242] }],\n  },\n  'sentry.profile_id': {\n    brief:\n      'The ID of the Sentry profile the span is associated with. This is only meaningful for transaction-based profiling.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '123e4567e89b12d3a456426614174000',\n    changelog: [{ version: '0.6.0', prs: [344], description: 'Added sentry.profile_id attribute' }],\n  },\n  'sentry.release': {\n    brief: 'The sentry release.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '7.0.0',\n    aliases: ['service.version', 'release'],\n    changelog: [{ version: '0.0.0' }],\n  },\n  'sentry.replay_id': {\n    brief: 'The id of the sentry replay.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '123e4567e89b12d3a456426614174000',\n    aliases: ['replay_id'],\n    changelog: [{ version: '0.0.0' }],\n  },\n  'sentry.replay_is_buffering': {\n    brief:\n      'A sentinel attribute on log events indicating whether the current Session Replay is being buffered (onErrorSampleRate).',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.3.0', prs: [185] }],\n  },\n  'sentry.report_event': {\n    brief: '(Deprecated) The event that caused the SDK to report CLS or LCP (pagehide or navigation)',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'pagehide',\n    deprecation: {\n      reason:\n        'The report event is now recorded as a browser.web_vital.lcp.report_event or browser.web_vital.cls.report_event attribute. No backfill required.',\n    },\n    changelog: [{ version: '0.5.0', prs: [320], description: 'Added sentry.report_event attribute' }],\n  },\n  'sentry.sdk.integrations': {\n    brief:\n      '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.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: ['InboundFilters', 'FunctionToString', 'BrowserApiErrors', 'Breadcrumbs'],\n    changelog: [{ version: '0.0.0', prs: [42] }],\n  },\n  'sentry.sdk.name': {\n    brief: 'The sentry sdk name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '@sentry/react',\n    changelog: [{ version: '0.0.0' }],\n  },\n  'sentry.sdk.version': {\n    brief: 'The sentry sdk version.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '7.0.0',\n    changelog: [{ version: '0.0.0' }],\n  },\n  'sentry.segment.id': {\n    brief: 'The segment ID of a span',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '051581bf3cb55c13',\n    aliases: ['sentry.segment_id'],\n    changelog: [{ version: '0.1.0', prs: [107, 124] }],\n  },\n  'sentry.segment_id': {\n    brief: 'The segment ID of a span',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '051581bf3cb55c13',\n    deprecation: {\n      replacement: 'sentry.segment.id',\n    },\n    aliases: ['sentry.segment.id'],\n    changelog: [{ version: '0.1.0', prs: [124] }],\n  },\n  'sentry.segment.name': {\n    brief: 'The segment name of a span',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'GET /user',\n    aliases: ['sentry.transaction', 'transaction'],\n    changelog: [\n      { version: '0.6.0', prs: [345], description: 'Added sentry.transaction and transaction aliases' },\n      { version: '0.1.0', prs: [104] },\n    ],\n  },\n  'sentry.server_sample_rate': {\n    brief: 'Rate at which a span was sampled in Relay.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 0.5,\n    changelog: [{ version: '0.1.0', prs: [102] }],\n  },\n  'sentry.source': {\n    brief:\n      \"The source of a span, also referred to as transaction source. Known values are:  `'custom'`, `'url'`, `'route'`, `'component'`, `'view'`, `'task'`. '`source`' describes a parametrized route, while `'url'` describes the full URL, potentially containing identifiers.\",\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'route',\n    deprecation: {\n      replacement: 'sentry.span.source',\n      reason: 'This attribute is being deprecated in favor of sentry.span.source',\n    },\n    changelog: [{ version: '0.5.0' }],\n  },\n  'sentry.span.source': {\n    brief:\n      \"The source of a span, also referred to as transaction source. Known values are:  `'custom'`, `'url'`, `'route'`, `'component'`, `'view'`, `'task'`. '`source`' describes a parametrized route, while `'url'` describes the full URL, potentially containing identifiers.\",\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'route',\n    changelog: [{ version: '0.4.0', prs: [214] }, { version: '0.0.0' }],\n  },\n  'sentry.status': {\n    brief:\n      'The span\\'s status (either \"ok\" or \"error\"). Older SDKs may set this to a more specific error, but this behaviour is deprecated.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'ok',\n    changelog: [{ version: '0.14.0', prs: [453] }],\n  },\n  'sentry.status_code': {\n    brief:\n      'The HTTP status code used in Sentry Insights. Typically set by Sentry during ingestion, rather than by clients.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 200,\n    changelog: [{ version: '0.4.0', prs: [223, 228] }],\n  },\n  'sentry.status.message': {\n    brief: 'The from OTLP extracted status message.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'foobar',\n    changelog: [{ version: '0.3.1', prs: [190] }],\n  },\n  'sentry.sveltekit.navigation.from': {\n    brief: 'the navigation origin (sveltekit router)',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '/home',\n    deprecation: {\n      replacement: 'navigation.origin',\n      reason: 'Use the more generic attribute instead',\n    },\n    aliases: ['navigation.origin'],\n    changelog: [{ version: '0.16.0', prs: [467], description: 'Added sentry.sveltekit.navigation.from attribute' }],\n  },\n  'sentry.sveltekit.navigation.to': {\n    brief: 'the navigation destination',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '/users/:id',\n    deprecation: {\n      reason: 'the navigation destination is already covered by url.* attributes',\n    },\n    changelog: [{ version: '0.16.0', prs: [467], description: 'Added sentry.sveltekit.navigation.to attribute' }],\n  },\n  'sentry.sveltekit.navigation.type': {\n    brief: 'The type of navigation event emitted from the sveltekit client router',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'link',\n    deprecation: {\n      replacement: 'navigation.type',\n      reason: 'Use the more generic attribute instead',\n    },\n    aliases: ['navigation.type'],\n    changelog: [{ version: '0.16.0', prs: [467], description: 'Added sentry.sveltekit.navigation.type attribute' }],\n  },\n  'sentry.thread.id': {\n    brief: 'Current “managed” thread ID.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 56,\n    deprecation: {\n      replacement: 'thread.id',\n      reason: 'This attribute is being deprecated in favor of the OTel-standard thread.id',\n    },\n    changelog: [{ version: '0.13.0', prs: [451] }],\n  },\n  'sentry.timestamp.sequence': {\n    brief:\n      '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.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 0,\n    changelog: [{ version: '0.5.0', prs: [262] }],\n  },\n  'sentry.trace_lifecycle': {\n    brief: 'Indicates the chosen trace lifecycle mode of the SDK (stream or static)',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'stream',\n    changelog: [{ version: '0.13.0', prs: [442], description: 'Added sentry.trace_lifecycle attribute' }],\n  },\n  'sentry.trace.parent_span_id': {\n    brief:\n      '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.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'b0e6f15b45c36b12',\n    deprecation: {},\n    changelog: [\n      { version: '0.5.0', prs: [287], description: 'Deprecate `sentry.trace.parent_span_id`' },\n      { version: '0.1.0', prs: [116] },\n    ],\n  },\n  'sentry.trace.status': {\n    brief:\n      'The segment\\'s status (either \"ok\" or \"error\"). Older SDKs may set this to a more specific error, but this behaviour is deprecated.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'ok',\n    changelog: [{ version: '0.14.0', prs: [453] }],\n  },\n  'sentry.transaction': {\n    brief: 'The sentry transaction (segment name).',\n    type: 'string',\n    applyScrubbing: {\n      key: 'never',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'GET /',\n    deprecation: {\n      replacement: 'sentry.segment.name',\n      reason: 'This attribute is being deprecated in favor of sentry.segment.name',\n    },\n    aliases: ['sentry.segment.name', 'transaction'],\n    changelog: [\n      { version: '0.6.0', prs: [345], description: 'Deprecated sentry.transaction in favor of sentry.segment.name' },\n      { version: '0.0.0' },\n    ],\n  },\n  'sentry.user.email': {\n    brief: 'User email address.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    deprecation: {\n      replacement: 'user.email',\n    },\n    aliases: ['user.email'],\n    changelog: [{ version: '0.10.0', prs: [406] }],\n  },\n  'sentry.user.geo.city': {\n    brief: 'Human readable city name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    deprecation: {\n      replacement: 'user.geo.city',\n    },\n    aliases: ['user.geo.city'],\n    changelog: [{ version: '0.10.0', prs: [406] }],\n  },\n  'sentry.user.geo.country_code': {\n    brief: 'Two-letter country code (ISO 3166-1 alpha-2).',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    deprecation: {\n      replacement: 'user.geo.country_code',\n    },\n    aliases: ['user.geo.country_code'],\n    changelog: [{ version: '0.10.0', prs: [406] }],\n  },\n  'sentry.user.geo.region': {\n    brief: 'Human readable region name or code.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    deprecation: {\n      replacement: 'user.geo.region',\n    },\n    aliases: ['user.geo.region'],\n    changelog: [{ version: '0.10.0', prs: [406] }],\n  },\n  'sentry.user.geo.subdivision': {\n    brief: 'Human readable subdivision name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    deprecation: {\n      replacement: 'user.geo.subdivision',\n    },\n    aliases: ['user.geo.subdivision'],\n    changelog: [{ version: '0.10.0', prs: [406] }],\n  },\n  'sentry.user.id': {\n    brief: 'Unique identifier of the user.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    deprecation: {\n      replacement: 'user.id',\n    },\n    aliases: ['user.id'],\n    changelog: [{ version: '0.10.0', prs: [406] }],\n  },\n  'sentry.user.ip': {\n    brief: 'The IP address of the user.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    deprecation: {\n      replacement: 'user.ip_address',\n    },\n    aliases: ['user.ip_address'],\n    changelog: [{ version: '0.10.0', prs: [406] }],\n  },\n  'sentry.user.username': {\n    brief: 'Short name or login/username of the user.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    deprecation: {\n      replacement: 'user.name',\n    },\n    aliases: ['user.name'],\n    changelog: [{ version: '0.10.0', prs: [406] }],\n  },\n  'server.address': {\n    brief:\n      'Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'example.com',\n    aliases: ['http.server_name', 'net.host.name', 'http.host', 'server_name'],\n    changelog: [{ version: '0.1.0', prs: [108, 127] }, { version: '0.0.0' }],\n  },\n  server_name: {\n    brief:\n      'Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'example.com',\n    deprecation: {\n      replacement: 'server.address',\n      reason: 'This attribute is being deprecated in favor of server.address, which is the OTel-aligned replacement.',\n    },\n    aliases: ['server.address', 'http.server_name', 'net.host.name', 'http.host'],\n    changelog: [\n      {\n        version: '0.16.0',\n        prs: [477],\n        description: 'Added server_name attribute, deprecated in favor of server.address',\n      },\n    ],\n  },\n  'server.port': {\n    brief: 'Server port number.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 1337,\n    aliases: ['net.host.port'],\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'service.name': {\n    brief: 'Logical name of the service.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'omegastar',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'service.version': {\n    brief: 'The version string of the service API or implementation. The format is not defined by these conventions.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '5.0.0',\n    aliases: ['sentry.release'],\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'session.id': {\n    brief: 'A unique id identifying the active session at the time of setting this attribute',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '00112233-4455-6677-8899-aabbccddeeff',\n    changelog: [{ version: '0.11.0', prs: [412], description: 'Added session.id attribute' }],\n  },\n  stall_percentage: {\n    brief: 'The fraction of time the app was stalled. Only applies to React Native. This is computed by Relay.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    changelog: [{ version: '0.7.0', prs: [362], description: 'Added stall_percentage attribute' }],\n  },\n  stall_total_time: {\n    brief:\n      'The combined duration of all stalls in milliseconds. Only applies to React Native. This is computed by Relay.',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    changelog: [{ version: '0.7.0', prs: [362], description: 'Added stall_total_time attribute' }],\n  },\n  'state.type': {\n    brief: 'The type of state management library',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'redux',\n    changelog: [{ version: '0.7.0', prs: [365], description: 'Added state.type attribute' }],\n  },\n  'thread.id': {\n    brief: 'Current “managed” thread ID.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 56,\n    changelog: [{ version: '0.0.0' }],\n  },\n  'thread.name': {\n    brief: 'Current thread name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'main',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'timber.tag': {\n    brief: 'The log tag provided by the timber logging framework.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'MyTag',\n    changelog: [{ version: '0.3.0', prs: [183] }],\n  },\n  time_to_full_display: {\n    brief: 'The duration of time to full display in milliseconds',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1234.56,\n    deprecation: {\n      replacement: 'app.vitals.ttfd.value',\n      reason:\n        'Replaced by app.vitals.ttfd.value to align with the app.vitals.* namespace for mobile performance attributes',\n    },\n    aliases: ['app.vitals.ttfd.value'],\n    changelog: [\n      { version: '0.5.0', prs: [313], description: 'Added and deprecated in favor of app.vitals.ttfd.value' },\n    ],\n  },\n  time_to_initial_display: {\n    brief: 'The duration of time to initial display in milliseconds',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1234.56,\n    deprecation: {\n      replacement: 'app.vitals.ttid.value',\n      reason:\n        'Replaced by app.vitals.ttid.value to align with the app.vitals.* namespace for mobile performance attributes',\n    },\n    aliases: ['app.vitals.ttid.value'],\n    changelog: [\n      { version: '0.5.0', prs: [313], description: 'Added and deprecated in favor of app.vitals.ttid.value' },\n    ],\n  },\n  transaction: {\n    brief: 'The sentry transaction (segment name).',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'GET /',\n    deprecation: {\n      replacement: 'sentry.segment.name',\n    },\n    aliases: ['sentry.segment.name', 'sentry.transaction'],\n    changelog: [\n      {\n        version: '0.6.0',\n        prs: [345],\n        description: 'Updated transaction deprecation replacement to sentry.segment.name',\n      },\n      { version: '0.1.0', prs: [61, 127] },\n      { version: '0.0.0' },\n    ],\n  },\n  'trpc.procedure_path': {\n    brief: 'The path of the tRPC procedure being called',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'user.getById',\n    changelog: [{ version: '0.7.0', prs: [370], description: 'Added trpc.procedure_path attribute' }],\n  },\n  'trpc.procedure_type': {\n    brief: 'The type of the tRPC procedure',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'query',\n    changelog: [{ version: '0.7.0', prs: [370], description: 'Added trpc.procedure_type attribute' }],\n  },\n  ttfb: {\n    brief: 'The value of the recorded Time To First Byte (TTFB) web vital in milliseconds',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 194,\n    deprecation: {\n      replacement: 'browser.web_vital.ttfb.value',\n      reason: 'This attribute is being deprecated in favor of browser.web_vital.ttfb.value',\n    },\n    aliases: ['browser.web_vital.ttfb.value'],\n    changelog: [{ version: '0.5.0', prs: [235] }],\n  },\n  'ttfb.requestTime': {\n    brief:\n      \"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\",\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1554.5814,\n    deprecation: {\n      replacement: 'browser.web_vital.ttfb.request_time',\n      reason: 'This attribute is being deprecated in favor of browser.web_vital.ttfb.request_time',\n    },\n    aliases: ['browser.web_vital.ttfb.request_time'],\n    changelog: [{ version: '0.5.0', prs: [235] }],\n  },\n  type: {\n    brief: 'More granular type of the operation happening.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'fetch',\n    changelog: [{ version: '0.0.0' }],\n  },\n  'ui.component_name': {\n    brief: 'The name of the associated component.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'HomeButton',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'ui.contributes_to_ttfd': {\n    brief: 'Whether the span execution contributed to the TTFD (time to fully drawn) metric.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.0.0' }],\n  },\n  'ui.contributes_to_ttid': {\n    brief: 'Whether the span execution contributed to the TTID (time to initial display) metric.',\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    changelog: [{ version: '0.0.0' }],\n  },\n  'ui.element.height': {\n    brief: 'The height of the UI element (for Html in pixels)',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 256,\n    changelog: [{ version: '0.5.0', prs: [284], description: 'Added ui.element.height attribute' }],\n  },\n  'ui.element.id': {\n    brief: 'The id of the UI element',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'btn-login',\n    changelog: [{ version: '0.5.0', prs: [284], description: 'Added ui.element.id attribute' }],\n  },\n  'ui.element.identifier': {\n    brief: 'The identifier used to measure the UI element timing',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'heroImage',\n    changelog: [{ version: '0.5.0', prs: [284], description: 'Added ui.element.identifier attribute' }],\n  },\n  'ui.element.load_time': {\n    brief: 'The loading time of a UI element (from time origin to finished loading)',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 998.2234,\n    changelog: [{ version: '0.5.0', prs: [284], description: 'Added ui.element.load_time attribute' }],\n  },\n  'ui.element.paint_type': {\n    brief: \"The type of element paint. Can either be 'image-paint' or 'text-paint'\",\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'image-paint',\n    changelog: [{ version: '0.5.0', prs: [284], description: 'Added ui.element.paint_type attribute' }],\n  },\n  'ui.element.render_time': {\n    brief: 'The rendering time of the UI element (from time origin to finished rendering)',\n    type: 'double',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1023.1124,\n    changelog: [{ version: '0.5.0', prs: [284], description: 'Added ui.element.render_time attribute' }],\n  },\n  'ui.element.type': {\n    brief: 'type of the UI element',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'img',\n    changelog: [{ version: '0.5.0', prs: [284], description: 'Added ui.element.type attribute' }],\n  },\n  'ui.element.url': {\n    brief: 'The URL of the UI element (e.g. an img src)',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'https://assets.myapp.com/hero.png',\n    changelog: [{ version: '0.5.0', prs: [284], description: 'Added ui.element.url attribute' }],\n  },\n  'ui.element.width': {\n    brief: 'The width of the UI element (for HTML in pixels)',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 512,\n    changelog: [{ version: '0.5.0', prs: [284], description: 'Added ui.element.width attribute' }],\n  },\n  url: {\n    brief: 'The URL of the resource that was fetched.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'https://example.com/test?foo=bar#buzz',\n    deprecation: {\n      replacement: 'url.full',\n    },\n    aliases: ['url.full', 'http.url'],\n    changelog: [{ version: '0.1.0', prs: [61] }, { version: '0.0.0' }],\n  },\n  'url.domain': {\n    brief:\n      'Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'example.com',\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'url.fragment': {\n    brief:\n      'The fragments present in the URI. Note that this does not contain the leading # character, while the `http.fragment` attribute does.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'details',\n    changelog: [{ version: '0.0.0' }],\n  },\n  'url.full': {\n    brief: 'The URL of the resource that was fetched.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'https://example.com/test?foo=bar#buzz',\n    aliases: ['http.url', 'url'],\n    changelog: [{ version: '0.1.0', prs: [108] }, { version: '0.0.0' }],\n  },\n  'url.path': {\n    brief: 'The URI path component.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '/foo',\n    changelog: [{ version: '0.0.0' }],\n  },\n  'url.path.parameter.<key>': {\n    brief:\n      'Decoded parameters extracted from a URL path. Usually added by client-side routing frameworks like vue-router.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    hasDynamicSuffix: true,\n    example: \"url.path.parameter.id='123'\",\n    aliases: ['params.<key>'],\n    changelog: [{ version: '0.1.0', prs: [103] }],\n  },\n  'url.port': {\n    brief: 'Server port number.',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 1337,\n    changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }],\n  },\n  'url.query': {\n    brief:\n      'The query string present in the URL. Note that this does not contain the leading ? character, while the `http.query` attribute does.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n      reason:\n        'Query string values can contain sensitive information. Clients should attempt to scrub parameters that might contain sensitive information.',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'foo=bar&bar=baz',\n    changelog: [{ version: '0.0.0' }],\n  },\n  'url.same_origin': {\n    brief: \"Indicates that a URL has the same origin as the current page's origin in the browser.\",\n    type: 'boolean',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: true,\n    deprecation: {\n      replacement: 'http.request.same_origin',\n      reason: 'This attribute is being deprecated in favor of http.request.same_origin.',\n    },\n    aliases: ['http.request.same_origin'],\n    changelog: [\n      {\n        version: '0.16.0',\n        prs: [456],\n        description: 'Added url.same_origin attribute, deprecated in favor of http.request.same_origin',\n      },\n    ],\n  },\n  'url.scheme': {\n    brief: 'The URI scheme component identifying the used protocol.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'https',\n    aliases: ['http.scheme'],\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'url.template': {\n    brief: 'The low-cardinality template of an absolute path reference.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '/users/:id',\n    aliases: ['http.route'],\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'user_agent.original': {\n    brief: 'Value of the HTTP User-Agent header sent by the client.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example:\n      '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',\n    aliases: ['http.user_agent'],\n    changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }],\n  },\n  'user.email': {\n    brief: 'User email address.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'test@example.com',\n    aliases: ['sentry.user.email'],\n    changelog: [{ version: '0.0.0' }],\n  },\n  'user.full_name': {\n    brief: \"User's full name.\",\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'John Smith',\n    changelog: [{ version: '0.0.0' }],\n  },\n  'user.geo.city': {\n    brief: 'Human readable city name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Toronto',\n    aliases: ['sentry.user.geo.city'],\n    changelog: [{ version: '0.0.0' }],\n  },\n  'user.geo.country_code': {\n    brief: 'Two-letter country code (ISO 3166-1 alpha-2).',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'CA',\n    aliases: ['sentry.user.geo.country_code'],\n    changelog: [{ version: '0.0.0' }],\n  },\n  'user.geo.region': {\n    brief: 'Human readable region name or code.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Canada',\n    aliases: ['sentry.user.geo.region'],\n    changelog: [{ version: '0.0.0' }],\n  },\n  'user.geo.subdivision': {\n    brief: 'Human readable subdivision name.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'Ontario',\n    aliases: ['sentry.user.geo.subdivision'],\n    changelog: [{ version: '0.0.0' }],\n  },\n  'user.hash': {\n    brief: 'Unique user hash to correlate information for a user in anonymized form.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: '8ae4c2993e0f4f3b8b2d1b1f3b5e8f4d',\n    changelog: [{ version: '0.0.0' }],\n  },\n  'user.id': {\n    brief: 'Unique identifier of the user.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'S-1-5-21-202424912787-2692429404-2351956786-1000',\n    aliases: ['sentry.user.id'],\n    changelog: [{ version: '0.0.0' }],\n  },\n  'user.ip_address': {\n    brief: 'The IP address of the user.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '192.168.1.1',\n    aliases: ['sentry.user.ip'],\n    changelog: [{ version: '0.1.0', prs: [75] }],\n  },\n  'user.name': {\n    brief: 'Short name or login/username of the user.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: 'j.smith',\n    aliases: ['sentry.user.username'],\n    changelog: [{ version: '0.0.0' }],\n  },\n  'user.roles': {\n    brief: 'Array of user roles at the time of the event.',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: true,\n    visibility: 'public',\n    example: ['admin', 'editor'],\n    changelog: [{ version: '0.0.0' }],\n  },\n  'vercel.branch': {\n    brief: 'Git branch name for Vercel project',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'main',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.build_id': {\n    brief: 'Identifier for the Vercel build (only present on build logs)',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'bld_cotnkcr76',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.deployment_id': {\n    brief: 'Identifier for the Vercel deployment',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'dpl_233NRGRjVZX1caZrXWtz5g1TAksD',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.destination': {\n    brief: 'Origin of the external content in Vercel (only on external logs)',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'https://vitals.vercel-insights.com/v1',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.edge_type': {\n    brief: 'Type of edge runtime in Vercel',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'edge-function',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.entrypoint': {\n    brief: 'Entrypoint for the request in Vercel',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'api/index.js',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.execution_region': {\n    brief: 'Region where the request is executed',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'sfo1',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.id': {\n    brief: 'Unique identifier for the log entry in Vercel',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '1573817187330377061717300000',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.ja3_digest': {\n    brief: 'JA3 fingerprint digest of Vercel request',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '769,47-53-5-10-49161-49162-49171-49172-50-56-19-4,0-10-11,23-24-25,0',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.ja4_digest': {\n    brief: 'JA4 fingerprint digest',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 't13d1516h2_8daaf6152771_02713d6af862',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.log_type': {\n    brief: 'Vercel log output type',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'stdout',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.path': {\n    brief: 'Function or dynamic path of the request in Vercel.',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '/dynamic/[route].json',\n    changelog: [{ version: '0.6.0', prs: [349], description: 'Added vercel.path attribute' }],\n  },\n  'vercel.project_id': {\n    brief: 'Identifier for the Vercel project',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'gdufoJxB6b9b1fEqr1jUtFkyavUU',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.project_name': {\n    brief: 'Name of the Vercel project',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'my-app',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.proxy.cache_id': {\n    brief: 'Original request ID when request is served from cache',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'pdx1::v8g4b-1744143786684-93dafbc0f70d',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.proxy.client_ip': {\n    brief: 'Client IP address',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '120.75.16.101',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.proxy.host': {\n    brief: 'Hostname of the request',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'test.vercel.app',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.proxy.lambda_region': {\n    brief: 'Region where lambda function executed',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'sfo1',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.proxy.method': {\n    brief: 'HTTP method of the request',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'GET',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.proxy.path': {\n    brief: 'Request path with query parameters',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '/dynamic/some-value.json?route=some-value',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.proxy.path_type': {\n    brief: 'How the request was served based on its path and project configuration',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'func',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.proxy.path_type_variant': {\n    brief: 'Variant of the path type',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'api',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.proxy.referer': {\n    brief: 'Referer of the request',\n    type: 'string',\n    applyScrubbing: {\n      key: 'auto',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '*.vercel.app',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.proxy.region': {\n    brief: 'Region where the request is processed',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'sfo1',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.proxy.response_byte_size': {\n    brief: 'Size of the response in bytes',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1024,\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.2.0', prs: [163] },\n    ],\n  },\n  'vercel.proxy.scheme': {\n    brief: 'Protocol of the request',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'https',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.proxy.status_code': {\n    brief: 'HTTP status code of the proxy request',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 200,\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.2.0', prs: [163] },\n    ],\n  },\n  'vercel.proxy.timestamp': {\n    brief: 'Unix timestamp when the proxy request was made',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 1573817250172,\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.2.0', prs: [163] },\n    ],\n  },\n  'vercel.proxy.user_agent': {\n    brief: 'User agent strings of the request',\n    type: 'string[]',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: ['Mozilla/5.0...'],\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.proxy.vercel_cache': {\n    brief: 'Cache status sent to the browser',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'REVALIDATED',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.proxy.vercel_id': {\n    brief: 'Vercel-specific identifier',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'sfo1::abc123',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.proxy.waf_action': {\n    brief: 'Action taken by firewall rules',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'deny',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.proxy.waf_rule_id': {\n    brief: 'ID of the firewall rule that matched',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'rule_gAHz8jtSB1Gy',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.request_id': {\n    brief: 'Identifier of the Vercel request',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: '643af4e3-975a-4cc7-9e7a-1eda11539d90',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.source': {\n    brief: 'Origin of the Vercel log (build, edge, lambda, static, external, or firewall)',\n    type: 'string',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 'build',\n    changelog: [{ version: '0.2.0', prs: [163] }],\n  },\n  'vercel.status_code': {\n    brief: 'HTTP status code of the request (-1 means no response returned and the lambda crashed)',\n    type: 'integer',\n    applyScrubbing: {\n      key: 'manual',\n    },\n    isInOtel: false,\n    visibility: 'public',\n    example: 200,\n    changelog: [\n      { version: '0.4.0', prs: [228] },\n      { version: '0.2.0', prs: [163] },\n    ],\n  },\n};\n\nexport type AttributeValue = string | number | boolean | Array<string> | Array<number> | Array<boolean>;\n\nexport type Attributes = {\n  [AI_CITATIONS]?: AI_CITATIONS_TYPE;\n  [AI_COMPLETION_TOKENS_USED]?: AI_COMPLETION_TOKENS_USED_TYPE;\n  [AI_DOCUMENTS]?: AI_DOCUMENTS_TYPE;\n  [AI_FINISH_REASON]?: AI_FINISH_REASON_TYPE;\n  [AI_FREQUENCY_PENALTY]?: AI_FREQUENCY_PENALTY_TYPE;\n  [AI_FUNCTION_CALL]?: AI_FUNCTION_CALL_TYPE;\n  [AI_GENERATION_ID]?: AI_GENERATION_ID_TYPE;\n  [AI_INPUT_MESSAGES]?: AI_INPUT_MESSAGES_TYPE;\n  [AI_IS_SEARCH_REQUIRED]?: AI_IS_SEARCH_REQUIRED_TYPE;\n  [AI_METADATA]?: AI_METADATA_TYPE;\n  [AI_MODEL_ID]?: AI_MODEL_ID_TYPE;\n  [AI_MODEL_PROVIDER]?: AI_MODEL_PROVIDER_TYPE;\n  [AI_PIPELINE_NAME]?: AI_PIPELINE_NAME_TYPE;\n  [AI_PREAMBLE]?: AI_PREAMBLE_TYPE;\n  [AI_PRESENCE_PENALTY]?: AI_PRESENCE_PENALTY_TYPE;\n  [AI_PROMPT_TOKENS_USED]?: AI_PROMPT_TOKENS_USED_TYPE;\n  [AI_RAW_PROMPTING]?: AI_RAW_PROMPTING_TYPE;\n  [AI_RESPONSES]?: AI_RESPONSES_TYPE;\n  [AI_RESPONSE_FORMAT]?: AI_RESPONSE_FORMAT_TYPE;\n  [AI_SEARCH_QUERIES]?: AI_SEARCH_QUERIES_TYPE;\n  [AI_SEARCH_RESULTS]?: AI_SEARCH_RESULTS_TYPE;\n  [AI_SEED]?: AI_SEED_TYPE;\n  [AI_STREAMING]?: AI_STREAMING_TYPE;\n  [AI_TAGS]?: AI_TAGS_TYPE;\n  [AI_TEMPERATURE]?: AI_TEMPERATURE_TYPE;\n  [AI_TEXTS]?: AI_TEXTS_TYPE;\n  [AI_TOOLS]?: AI_TOOLS_TYPE;\n  [AI_TOOL_CALLS]?: AI_TOOL_CALLS_TYPE;\n  [AI_TOP_K]?: AI_TOP_K_TYPE;\n  [AI_TOP_P]?: AI_TOP_P_TYPE;\n  [AI_TOTAL_COST]?: AI_TOTAL_COST_TYPE;\n  [AI_TOTAL_TOKENS_USED]?: AI_TOTAL_TOKENS_USED_TYPE;\n  [AI_WARNINGS]?: AI_WARNINGS_TYPE;\n  [ANGULAR_VERSION]?: ANGULAR_VERSION_TYPE;\n  [APP_APP_BUILD]?: APP_APP_BUILD_TYPE;\n  [APP_APP_IDENTIFIER]?: APP_APP_IDENTIFIER_TYPE;\n  [APP_APP_NAME]?: APP_APP_NAME_TYPE;\n  [APP_APP_START_TIME]?: APP_APP_START_TIME_TYPE;\n  [APP_APP_VERSION]?: APP_APP_VERSION_TYPE;\n  [APP_BUILD]?: APP_BUILD_TYPE;\n  [APP_IDENTIFIER]?: APP_IDENTIFIER_TYPE;\n  [APP_IN_FOREGROUND]?: APP_IN_FOREGROUND_TYPE;\n  [APP_NAME]?: APP_NAME_TYPE;\n  [APP_START_COLD]?: APP_START_COLD_TYPE;\n  [APP_START_TIME]?: APP_START_TIME_TYPE;\n  [APP_START_TYPE]?: APP_START_TYPE_TYPE;\n  [APP_START_WARM]?: APP_START_WARM_TYPE;\n  [APP_VERSION]?: APP_VERSION_TYPE;\n  [APP_VITALS_FRAMES_DELAY_VALUE]?: APP_VITALS_FRAMES_DELAY_VALUE_TYPE;\n  [APP_VITALS_FRAMES_FROZEN_COUNT]?: APP_VITALS_FRAMES_FROZEN_COUNT_TYPE;\n  [APP_VITALS_FRAMES_SLOW_COUNT]?: APP_VITALS_FRAMES_SLOW_COUNT_TYPE;\n  [APP_VITALS_FRAMES_TOTAL_COUNT]?: APP_VITALS_FRAMES_TOTAL_COUNT_TYPE;\n  [APP_VITALS_START_COLD_VALUE]?: APP_VITALS_START_COLD_VALUE_TYPE;\n  [APP_VITALS_START_PREWARMED]?: APP_VITALS_START_PREWARMED_TYPE;\n  [APP_VITALS_START_REASON]?: APP_VITALS_START_REASON_TYPE;\n  [APP_VITALS_START_SCREEN]?: APP_VITALS_START_SCREEN_TYPE;\n  [APP_VITALS_START_TYPE]?: APP_VITALS_START_TYPE_TYPE;\n  [APP_VITALS_START_WARM_VALUE]?: APP_VITALS_START_WARM_VALUE_TYPE;\n  [APP_VITALS_TTFD_VALUE]?: APP_VITALS_TTFD_VALUE_TYPE;\n  [APP_VITALS_TTID_VALUE]?: APP_VITALS_TTID_VALUE_TYPE;\n  [ART_GC_BLOCKING_COUNT]?: ART_GC_BLOCKING_COUNT_TYPE;\n  [ART_GC_BLOCKING_TIME]?: ART_GC_BLOCKING_TIME_TYPE;\n  [ART_GC_PRE_OOME_COUNT]?: ART_GC_PRE_OOME_COUNT_TYPE;\n  [ART_GC_TOTAL_COUNT]?: ART_GC_TOTAL_COUNT_TYPE;\n  [ART_GC_TOTAL_TIME]?: ART_GC_TOTAL_TIME_TYPE;\n  [ART_GC_WAITING_TIME]?: ART_GC_WAITING_TIME_TYPE;\n  [ART_MEMORY_FREE]?: ART_MEMORY_FREE_TYPE;\n  [ART_MEMORY_FREE_UNTIL_GC]?: ART_MEMORY_FREE_UNTIL_GC_TYPE;\n  [ART_MEMORY_FREE_UNTIL_OOME]?: ART_MEMORY_FREE_UNTIL_OOME_TYPE;\n  [ART_MEMORY_MAX]?: ART_MEMORY_MAX_TYPE;\n  [ART_MEMORY_TOTAL]?: ART_MEMORY_TOTAL_TYPE;\n  [AWS_CLOUDWATCH_LOGS_LOG_GROUP]?: AWS_CLOUDWATCH_LOGS_LOG_GROUP_TYPE;\n  [AWS_CLOUDWATCH_LOGS_LOG_STREAM]?: AWS_CLOUDWATCH_LOGS_LOG_STREAM_TYPE;\n  [AWS_CLOUDWATCH_LOGS_URL]?: AWS_CLOUDWATCH_LOGS_URL_TYPE;\n  [AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS]?: AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS_TYPE;\n  [AWS_DYNAMODB_CONSISTENT_READ]?: AWS_DYNAMODB_CONSISTENT_READ_TYPE;\n  [AWS_DYNAMODB_CONSUMED_CAPACITY]?: AWS_DYNAMODB_CONSUMED_CAPACITY_TYPE;\n  [AWS_DYNAMODB_COUNT]?: AWS_DYNAMODB_COUNT_TYPE;\n  [AWS_DYNAMODB_EXCLUSIVE_START_TABLE]?: AWS_DYNAMODB_EXCLUSIVE_START_TABLE_TYPE;\n  [AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES]?: AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES_TYPE;\n  [AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES]?: AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES_TYPE;\n  [AWS_DYNAMODB_INDEX_NAME]?: AWS_DYNAMODB_INDEX_NAME_TYPE;\n  [AWS_DYNAMODB_ITEM_COLLECTION_METRICS]?: AWS_DYNAMODB_ITEM_COLLECTION_METRICS_TYPE;\n  [AWS_DYNAMODB_LIMIT]?: AWS_DYNAMODB_LIMIT_TYPE;\n  [AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES]?: AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES_TYPE;\n  [AWS_DYNAMODB_PROJECTION]?: AWS_DYNAMODB_PROJECTION_TYPE;\n  [AWS_DYNAMODB_PROVISIONED_READ_CAPACITY]?: AWS_DYNAMODB_PROVISIONED_READ_CAPACITY_TYPE;\n  [AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY]?: AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY_TYPE;\n  [AWS_DYNAMODB_SCANNED_COUNT]?: AWS_DYNAMODB_SCANNED_COUNT_TYPE;\n  [AWS_DYNAMODB_SCAN_FORWARD]?: AWS_DYNAMODB_SCAN_FORWARD_TYPE;\n  [AWS_DYNAMODB_SEGMENT]?: AWS_DYNAMODB_SEGMENT_TYPE;\n  [AWS_DYNAMODB_SELECT]?: AWS_DYNAMODB_SELECT_TYPE;\n  [AWS_DYNAMODB_TABLE_COUNT]?: AWS_DYNAMODB_TABLE_COUNT_TYPE;\n  [AWS_DYNAMODB_TABLE_NAMES]?: AWS_DYNAMODB_TABLE_NAMES_TYPE;\n  [AWS_DYNAMODB_TOTAL_SEGMENTS]?: AWS_DYNAMODB_TOTAL_SEGMENTS_TYPE;\n  [AWS_EXTENDED_REQUEST_ID]?: AWS_EXTENDED_REQUEST_ID_TYPE;\n  [AWS_KINESIS_STREAM_NAME]?: AWS_KINESIS_STREAM_NAME_TYPE;\n  [_AWS_KINESIS_STREAM_NAME]?: _AWS_KINESIS_STREAM_NAME_TYPE;\n  [AWS_LAMBDA_AWS_REQUEST_ID]?: AWS_LAMBDA_AWS_REQUEST_ID_TYPE;\n  [AWS_LAMBDA_EXECUTION_DURATION_IN_MILLIS]?: AWS_LAMBDA_EXECUTION_DURATION_IN_MILLIS_TYPE;\n  [AWS_LAMBDA_FUNCTION_NAME]?: AWS_LAMBDA_FUNCTION_NAME_TYPE;\n  [AWS_LAMBDA_FUNCTION_VERSION]?: AWS_LAMBDA_FUNCTION_VERSION_TYPE;\n  [AWS_LAMBDA_INVOKED_ARN]?: AWS_LAMBDA_INVOKED_ARN_TYPE;\n  [AWS_LAMBDA_INVOKED_FUNCTION_ARN]?: AWS_LAMBDA_INVOKED_FUNCTION_ARN_TYPE;\n  [AWS_LAMBDA_REMAINING_TIME_IN_MILLIS]?: AWS_LAMBDA_REMAINING_TIME_IN_MILLIS_TYPE;\n  [AWS_LOG_GROUP_NAMES]?: AWS_LOG_GROUP_NAMES_TYPE;\n  [AWS_LOG_STREAM_NAMES]?: AWS_LOG_STREAM_NAMES_TYPE;\n  [AWS_REQUEST_EXTENDED_ID]?: AWS_REQUEST_EXTENDED_ID_TYPE;\n  [AWS_REQUEST_ID]?: AWS_REQUEST_ID_TYPE;\n  [_AWS_REQUEST_ID]?: _AWS_REQUEST_ID_TYPE;\n  [AWS_S3_BUCKET]?: AWS_S3_BUCKET_TYPE;\n  [AWS_SECRETSMANAGER_SECRET_ARN]?: AWS_SECRETSMANAGER_SECRET_ARN_TYPE;\n  [AWS_SNS_TOPIC_ARN]?: AWS_SNS_TOPIC_ARN_TYPE;\n  [AWS_STEP_FUNCTIONS_ACTIVITY_ARN]?: AWS_STEP_FUNCTIONS_ACTIVITY_ARN_TYPE;\n  [AWS_STEP_FUNCTIONS_STATE_MACHINE_ARN]?: AWS_STEP_FUNCTIONS_STATE_MACHINE_ARN_TYPE;\n  [BLOCKED_MAIN_THREAD]?: BLOCKED_MAIN_THREAD_TYPE;\n  [BROWSER_NAME]?: BROWSER_NAME_TYPE;\n  [BROWSER_PERFORMANCE_NAVIGATION_ACTIVATION_START]?: BROWSER_PERFORMANCE_NAVIGATION_ACTIVATION_START_TYPE;\n  [BROWSER_PERFORMANCE_TIME_ORIGIN]?: BROWSER_PERFORMANCE_TIME_ORIGIN_TYPE;\n  [BROWSER_REPORT_TYPE]?: BROWSER_REPORT_TYPE_TYPE;\n  [BROWSER_SCRIPT_INVOKER]?: BROWSER_SCRIPT_INVOKER_TYPE;\n  [BROWSER_SCRIPT_INVOKER_TYPE]?: BROWSER_SCRIPT_INVOKER_TYPE_TYPE;\n  [BROWSER_SCRIPT_SOURCE_CHAR_POSITION]?: BROWSER_SCRIPT_SOURCE_CHAR_POSITION_TYPE;\n  [BROWSER_VERSION]?: BROWSER_VERSION_TYPE;\n  [BROWSER_WEB_VITAL_CLS_REPORT_EVENT]?: BROWSER_WEB_VITAL_CLS_REPORT_EVENT_TYPE;\n  [BROWSER_WEB_VITAL_CLS_SOURCE_KEY]?: BROWSER_WEB_VITAL_CLS_SOURCE_KEY_TYPE;\n  [BROWSER_WEB_VITAL_CLS_VALUE]?: BROWSER_WEB_VITAL_CLS_VALUE_TYPE;\n  [BROWSER_WEB_VITAL_FCP_VALUE]?: BROWSER_WEB_VITAL_FCP_VALUE_TYPE;\n  [BROWSER_WEB_VITAL_FP_VALUE]?: BROWSER_WEB_VITAL_FP_VALUE_TYPE;\n  [BROWSER_WEB_VITAL_INP_VALUE]?: BROWSER_WEB_VITAL_INP_VALUE_TYPE;\n  [BROWSER_WEB_VITAL_LCP_ELEMENT]?: BROWSER_WEB_VITAL_LCP_ELEMENT_TYPE;\n  [BROWSER_WEB_VITAL_LCP_ID]?: BROWSER_WEB_VITAL_LCP_ID_TYPE;\n  [BROWSER_WEB_VITAL_LCP_LOAD_TIME]?: BROWSER_WEB_VITAL_LCP_LOAD_TIME_TYPE;\n  [BROWSER_WEB_VITAL_LCP_RENDER_TIME]?: BROWSER_WEB_VITAL_LCP_RENDER_TIME_TYPE;\n  [BROWSER_WEB_VITAL_LCP_REPORT_EVENT]?: BROWSER_WEB_VITAL_LCP_REPORT_EVENT_TYPE;\n  [BROWSER_WEB_VITAL_LCP_SIZE]?: BROWSER_WEB_VITAL_LCP_SIZE_TYPE;\n  [BROWSER_WEB_VITAL_LCP_URL]?: BROWSER_WEB_VITAL_LCP_URL_TYPE;\n  [BROWSER_WEB_VITAL_LCP_VALUE]?: BROWSER_WEB_VITAL_LCP_VALUE_TYPE;\n  [BROWSER_WEB_VITAL_TTFB_REQUEST_TIME]?: BROWSER_WEB_VITAL_TTFB_REQUEST_TIME_TYPE;\n  [BROWSER_WEB_VITAL_TTFB_VALUE]?: BROWSER_WEB_VITAL_TTFB_VALUE_TYPE;\n  [CACHE_HIT]?: CACHE_HIT_TYPE;\n  [CACHE_ITEM_SIZE]?: CACHE_ITEM_SIZE_TYPE;\n  [CACHE_KEY]?: CACHE_KEY_TYPE;\n  [CACHE_OPERATION]?: CACHE_OPERATION_TYPE;\n  [CACHE_TTL]?: CACHE_TTL_TYPE;\n  [CACHE_WRITE]?: CACHE_WRITE_TYPE;\n  [CHANNEL]?: CHANNEL_TYPE;\n  [CLIENT_ADDRESS]?: CLIENT_ADDRESS_TYPE;\n  [CLIENT_PORT]?: CLIENT_PORT_TYPE;\n  [CLOUDFLARE_D1_DURATION]?: CLOUDFLARE_D1_DURATION_TYPE;\n  [CLOUDFLARE_D1_QUERY_TYPE]?: CLOUDFLARE_D1_QUERY_TYPE_TYPE;\n  [CLOUDFLARE_D1_ROWS_READ]?: CLOUDFLARE_D1_ROWS_READ_TYPE;\n  [CLOUDFLARE_D1_ROWS_WRITTEN]?: CLOUDFLARE_D1_ROWS_WRITTEN_TYPE;\n  [CLOUDFLARE_DURABLE_OBJECT_QUERY_BINDINGS]?: CLOUDFLARE_DURABLE_OBJECT_QUERY_BINDINGS_TYPE;\n  [CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_READ]?: CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_READ_TYPE;\n  [CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_WRITTEN]?: CLOUDFLARE_DURABLE_OBJECT_RESPONSE_ROWS_WRITTEN_TYPE;\n  [CLOUDFLARE_R2_BUCKET]?: CLOUDFLARE_R2_BUCKET_TYPE;\n  [CLOUDFLARE_R2_OPERATION]?: CLOUDFLARE_R2_OPERATION_TYPE;\n  [CLOUDFLARE_R2_REQUEST_DELIMITER]?: CLOUDFLARE_R2_REQUEST_DELIMITER_TYPE;\n  [CLOUDFLARE_R2_REQUEST_KEY]?: CLOUDFLARE_R2_REQUEST_KEY_TYPE;\n  [CLOUDFLARE_R2_REQUEST_PART_NUMBER]?: CLOUDFLARE_R2_REQUEST_PART_NUMBER_TYPE;\n  [CLOUDFLARE_R2_REQUEST_PREFIX]?: CLOUDFLARE_R2_REQUEST_PREFIX_TYPE;\n  [CLOUDFLARE_WORKFLOW_ATTEMPT]?: CLOUDFLARE_WORKFLOW_ATTEMPT_TYPE;\n  [CLOUDFLARE_WORKFLOW_RETRIES_BACKOFF]?: CLOUDFLARE_WORKFLOW_RETRIES_BACKOFF_TYPE;\n  [CLOUDFLARE_WORKFLOW_RETRIES_DELAY]?: CLOUDFLARE_WORKFLOW_RETRIES_DELAY_TYPE;\n  [CLOUDFLARE_WORKFLOW_RETRIES_LIMIT]?: CLOUDFLARE_WORKFLOW_RETRIES_LIMIT_TYPE;\n  [CLOUDFLARE_WORKFLOW_TIMEOUT]?: CLOUDFLARE_WORKFLOW_TIMEOUT_TYPE;\n  [CLOUD_ACCOUNT_ID]?: CLOUD_ACCOUNT_ID_TYPE;\n  [CLOUD_AVAILABILITY_ZONE]?: CLOUD_AVAILABILITY_ZONE_TYPE;\n  [CLOUD_PLATFORM]?: CLOUD_PLATFORM_TYPE;\n  [CLOUD_PROVIDER]?: CLOUD_PROVIDER_TYPE;\n  [CLOUD_REGION]?: CLOUD_REGION_TYPE;\n  [CLOUD_RESOURCE_ID]?: CLOUD_RESOURCE_ID_TYPE;\n  [CLS]?: CLS_TYPE;\n  [CLS_SOURCE_KEY]?: CLS_SOURCE_KEY_TYPE;\n  [CODE_FILEPATH]?: CODE_FILEPATH_TYPE;\n  [CODE_FILE_PATH]?: CODE_FILE_PATH_TYPE;\n  [CODE_FUNCTION]?: CODE_FUNCTION_TYPE;\n  [CODE_FUNCTION_NAME]?: CODE_FUNCTION_NAME_TYPE;\n  [CODE_LINENO]?: CODE_LINENO_TYPE;\n  [CODE_LINE_NUMBER]?: CODE_LINE_NUMBER_TYPE;\n  [CODE_NAMESPACE]?: CODE_NAMESPACE_TYPE;\n  [CONNECTIONTYPE]?: CONNECTIONTYPE_TYPE;\n  [CONNECTION_RTT]?: CONNECTION_RTT_TYPE;\n  [CULTURE_CALENDAR]?: CULTURE_CALENDAR_TYPE;\n  [CULTURE_DISPLAY_NAME]?: CULTURE_DISPLAY_NAME_TYPE;\n  [CULTURE_IS_24_HOUR_FORMAT]?: CULTURE_IS_24_HOUR_FORMAT_TYPE;\n  [CULTURE_LOCALE]?: CULTURE_LOCALE_TYPE;\n  [CULTURE_TIMEZONE]?: CULTURE_TIMEZONE_TYPE;\n  [DB_COLLECTION_NAME]?: DB_COLLECTION_NAME_TYPE;\n  [DB_DRIVER_NAME]?: DB_DRIVER_NAME_TYPE;\n  [DB_NAME]?: DB_NAME_TYPE;\n  [DB_NAMESPACE]?: DB_NAMESPACE_TYPE;\n  [DB_OPERATION]?: DB_OPERATION_TYPE;\n  [DB_OPERATION_BATCH_SIZE]?: DB_OPERATION_BATCH_SIZE_TYPE;\n  [DB_OPERATION_NAME]?: DB_OPERATION_NAME_TYPE;\n  [DB_QUERY_PARAMETER_KEY]?: DB_QUERY_PARAMETER_KEY_TYPE;\n  [DB_QUERY_SUMMARY]?: DB_QUERY_SUMMARY_TYPE;\n  [DB_QUERY_TEXT]?: DB_QUERY_TEXT_TYPE;\n  [DB_REDIS_CONNECTION]?: DB_REDIS_CONNECTION_TYPE;\n  [DB_REDIS_KEY]?: DB_REDIS_KEY_TYPE;\n  [DB_REDIS_PARAMETERS]?: DB_REDIS_PARAMETERS_TYPE;\n  [DB_RESPONSE_STATUS_CODE]?: DB_RESPONSE_STATUS_CODE_TYPE;\n  [DB_SQL_BINDINGS]?: DB_SQL_BINDINGS_TYPE;\n  [DB_STATEMENT]?: DB_STATEMENT_TYPE;\n  [DB_STORED_PROCEDURE_NAME]?: DB_STORED_PROCEDURE_NAME_TYPE;\n  [DB_SYSTEM]?: DB_SYSTEM_TYPE;\n  [DB_SYSTEM_NAME]?: DB_SYSTEM_NAME_TYPE;\n  [DB_USER]?: DB_USER_TYPE;\n  [DEVICEMEMORY]?: DEVICEMEMORY_TYPE;\n  [DEVICE_ARCHS]?: DEVICE_ARCHS_TYPE;\n  [DEVICE_BATTERY_LEVEL]?: DEVICE_BATTERY_LEVEL_TYPE;\n  [DEVICE_BATTERY_TEMPERATURE]?: DEVICE_BATTERY_TEMPERATURE_TYPE;\n  [DEVICE_BOOT_TIME]?: DEVICE_BOOT_TIME_TYPE;\n  [DEVICE_BRAND]?: DEVICE_BRAND_TYPE;\n  [DEVICE_CHARGING]?: DEVICE_CHARGING_TYPE;\n  [DEVICE_CHIPSET]?: DEVICE_CHIPSET_TYPE;\n  [DEVICE_CLASS]?: DEVICE_CLASS_TYPE;\n  [DEVICE_CONNECTION_TYPE]?: DEVICE_CONNECTION_TYPE_TYPE;\n  [DEVICE_CPU_DESCRIPTION]?: DEVICE_CPU_DESCRIPTION_TYPE;\n  [DEVICE_EXTERNAL_FREE_STORAGE]?: DEVICE_EXTERNAL_FREE_STORAGE_TYPE;\n  [DEVICE_EXTERNAL_STORAGE_SIZE]?: DEVICE_EXTERNAL_STORAGE_SIZE_TYPE;\n  [DEVICE_FAMILY]?: DEVICE_FAMILY_TYPE;\n  [DEVICE_FREE_MEMORY]?: DEVICE_FREE_MEMORY_TYPE;\n  [DEVICE_FREE_STORAGE]?: DEVICE_FREE_STORAGE_TYPE;\n  [DEVICE_ID]?: DEVICE_ID_TYPE;\n  [DEVICE_LOCALE]?: DEVICE_LOCALE_TYPE;\n  [DEVICE_LOW_MEMORY]?: DEVICE_LOW_MEMORY_TYPE;\n  [DEVICE_LOW_POWER_MODE]?: DEVICE_LOW_POWER_MODE_TYPE;\n  [DEVICE_MANUFACTURER]?: DEVICE_MANUFACTURER_TYPE;\n  [DEVICE_MEMORY_ESTIMATED_CAPACITY]?: DEVICE_MEMORY_ESTIMATED_CAPACITY_TYPE;\n  [DEVICE_MEMORY_SIZE]?: DEVICE_MEMORY_SIZE_TYPE;\n  [DEVICE_MODEL]?: DEVICE_MODEL_TYPE;\n  [DEVICE_MODEL_ID]?: DEVICE_MODEL_ID_TYPE;\n  [DEVICE_NAME]?: DEVICE_NAME_TYPE;\n  [DEVICE_ONLINE]?: DEVICE_ONLINE_TYPE;\n  [DEVICE_ORIENTATION]?: DEVICE_ORIENTATION_TYPE;\n  [DEVICE_PROCESSOR_COUNT]?: DEVICE_PROCESSOR_COUNT_TYPE;\n  [DEVICE_PROCESSOR_FREQUENCY]?: DEVICE_PROCESSOR_FREQUENCY_TYPE;\n  [DEVICE_SCREEN_DENSITY]?: DEVICE_SCREEN_DENSITY_TYPE;\n  [DEVICE_SCREEN_DPI]?: DEVICE_SCREEN_DPI_TYPE;\n  [DEVICE_SCREEN_HEIGHT_PIXELS]?: DEVICE_SCREEN_HEIGHT_PIXELS_TYPE;\n  [DEVICE_SCREEN_WIDTH_PIXELS]?: DEVICE_SCREEN_WIDTH_PIXELS_TYPE;\n  [DEVICE_SIMULATOR]?: DEVICE_SIMULATOR_TYPE;\n  [DEVICE_STORAGE_SIZE]?: DEVICE_STORAGE_SIZE_TYPE;\n  [DEVICE_THERMAL_STATE]?: DEVICE_THERMAL_STATE_TYPE;\n  [DEVICE_TIMEZONE]?: DEVICE_TIMEZONE_TYPE;\n  [DEVICE_USABLE_MEMORY]?: DEVICE_USABLE_MEMORY_TYPE;\n  [DIST]?: DIST_TYPE;\n  [EFFECTIVECONNECTIONTYPE]?: EFFECTIVECONNECTIONTYPE_TYPE;\n  [ENVIRONMENT]?: ENVIRONMENT_TYPE;\n  [ERROR_TYPE]?: ERROR_TYPE_TYPE;\n  [EVENT_ID]?: EVENT_ID_TYPE;\n  [EVENT_NAME]?: EVENT_NAME_TYPE;\n  [EXCEPTION_ESCAPED]?: EXCEPTION_ESCAPED_TYPE;\n  [EXCEPTION_MESSAGE]?: EXCEPTION_MESSAGE_TYPE;\n  [EXCEPTION_STACKTRACE]?: EXCEPTION_STACKTRACE_TYPE;\n  [EXCEPTION_TYPE]?: EXCEPTION_TYPE_TYPE;\n  [FAAS_COLDSTART]?: FAAS_COLDSTART_TYPE;\n  [FAAS_CRON]?: FAAS_CRON_TYPE;\n  [FAAS_DURATION_IN_MS]?: FAAS_DURATION_IN_MS_TYPE;\n  [FAAS_ENTRY_POINT]?: FAAS_ENTRY_POINT_TYPE;\n  [FAAS_EXECUTION]?: FAAS_EXECUTION_TYPE;\n  [FAAS_ID]?: FAAS_ID_TYPE;\n  [FAAS_IDENTITY]?: FAAS_IDENTITY_TYPE;\n  [FAAS_INVOCATION_ID]?: FAAS_INVOCATION_ID_TYPE;\n  [FAAS_INVOKED_NAME]?: FAAS_INVOKED_NAME_TYPE;\n  [FAAS_INVOKED_PROVIDER]?: FAAS_INVOKED_PROVIDER_TYPE;\n  [FAAS_INVOKED_REGION]?: FAAS_INVOKED_REGION_TYPE;\n  [FAAS_NAME]?: FAAS_NAME_TYPE;\n  [FAAS_TIME]?: FAAS_TIME_TYPE;\n  [FAAS_TRIGGER]?: FAAS_TRIGGER_TYPE;\n  [FAAS_VERSION]?: FAAS_VERSION_TYPE;\n  [FCP]?: FCP_TYPE;\n  [FLAG_EVALUATION_KEY]?: FLAG_EVALUATION_KEY_TYPE;\n  [FP]?: FP_TYPE;\n  [FRAMES_DELAY]?: FRAMES_DELAY_TYPE;\n  [FRAMES_FROZEN]?: FRAMES_FROZEN_TYPE;\n  [FRAMES_FROZEN_RATE]?: FRAMES_FROZEN_RATE_TYPE;\n  [FRAMES_SLOW]?: FRAMES_SLOW_TYPE;\n  [FRAMES_SLOW_RATE]?: FRAMES_SLOW_RATE_TYPE;\n  [FRAMES_TOTAL]?: FRAMES_TOTAL_TYPE;\n  [FS_ERROR]?: FS_ERROR_TYPE;\n  [GCP_FUNCTION_CONTEXT_EVENT_ID]?: GCP_FUNCTION_CONTEXT_EVENT_ID_TYPE;\n  [GCP_FUNCTION_CONTEXT_EVENT_TYPE]?: GCP_FUNCTION_CONTEXT_EVENT_TYPE_TYPE;\n  [GCP_FUNCTION_CONTEXT_ID]?: GCP_FUNCTION_CONTEXT_ID_TYPE;\n  [GCP_FUNCTION_CONTEXT_RESOURCE]?: GCP_FUNCTION_CONTEXT_RESOURCE_TYPE;\n  [GCP_FUNCTION_CONTEXT_SOURCE]?: GCP_FUNCTION_CONTEXT_SOURCE_TYPE;\n  [GCP_FUNCTION_CONTEXT_SPECVERSION]?: GCP_FUNCTION_CONTEXT_SPECVERSION_TYPE;\n  [GCP_FUNCTION_CONTEXT_TIME]?: GCP_FUNCTION_CONTEXT_TIME_TYPE;\n  [GCP_FUNCTION_CONTEXT_TIMESTAMP]?: GCP_FUNCTION_CONTEXT_TIMESTAMP_TYPE;\n  [GCP_FUNCTION_CONTEXT_TYPE]?: GCP_FUNCTION_CONTEXT_TYPE_TYPE;\n  [GCP_PROJECT_ID]?: GCP_PROJECT_ID_TYPE;\n  [GEN_AI_AGENT_NAME]?: GEN_AI_AGENT_NAME_TYPE;\n  [GEN_AI_CONTEXT_UTILIZATION]?: GEN_AI_CONTEXT_UTILIZATION_TYPE;\n  [GEN_AI_CONTEXT_WINDOW_SIZE]?: GEN_AI_CONTEXT_WINDOW_SIZE_TYPE;\n  [GEN_AI_CONVERSATION_ID]?: GEN_AI_CONVERSATION_ID_TYPE;\n  [GEN_AI_COST_CACHE_CREATION_INPUT_TOKENS]?: GEN_AI_COST_CACHE_CREATION_INPUT_TOKENS_TYPE;\n  [GEN_AI_COST_CACHE_READ_INPUT_TOKENS]?: GEN_AI_COST_CACHE_READ_INPUT_TOKENS_TYPE;\n  [GEN_AI_COST_INPUT_TOKENS]?: GEN_AI_COST_INPUT_TOKENS_TYPE;\n  [GEN_AI_COST_OUTPUT_TOKENS]?: GEN_AI_COST_OUTPUT_TOKENS_TYPE;\n  [GEN_AI_COST_REASONING_OUTPUT_TOKENS]?: GEN_AI_COST_REASONING_OUTPUT_TOKENS_TYPE;\n  [GEN_AI_COST_TOTAL_TOKENS]?: GEN_AI_COST_TOTAL_TOKENS_TYPE;\n  [GEN_AI_EMBEDDINGS_INPUT]?: GEN_AI_EMBEDDINGS_INPUT_TYPE;\n  [GEN_AI_FUNCTION_ID]?: GEN_AI_FUNCTION_ID_TYPE;\n  [GEN_AI_INPUT_MESSAGES]?: GEN_AI_INPUT_MESSAGES_TYPE;\n  [GEN_AI_OPERATION_NAME]?: GEN_AI_OPERATION_NAME_TYPE;\n  [GEN_AI_OPERATION_TYPE]?: GEN_AI_OPERATION_TYPE_TYPE;\n  [GEN_AI_OUTPUT_MESSAGES]?: GEN_AI_OUTPUT_MESSAGES_TYPE;\n  [GEN_AI_PIPELINE_NAME]?: GEN_AI_PIPELINE_NAME_TYPE;\n  [GEN_AI_PROMPT]?: GEN_AI_PROMPT_TYPE;\n  [GEN_AI_PROMPT_NAME]?: GEN_AI_PROMPT_NAME_TYPE;\n  [GEN_AI_PROVIDER_NAME]?: GEN_AI_PROVIDER_NAME_TYPE;\n  [GEN_AI_REQUEST_AVAILABLE_TOOLS]?: GEN_AI_REQUEST_AVAILABLE_TOOLS_TYPE;\n  [GEN_AI_REQUEST_FREQUENCY_PENALTY]?: GEN_AI_REQUEST_FREQUENCY_PENALTY_TYPE;\n  [GEN_AI_REQUEST_MAX_TOKENS]?: GEN_AI_REQUEST_MAX_TOKENS_TYPE;\n  [GEN_AI_REQUEST_MESSAGES]?: GEN_AI_REQUEST_MESSAGES_TYPE;\n  [GEN_AI_REQUEST_MODEL]?: GEN_AI_REQUEST_MODEL_TYPE;\n  [GEN_AI_REQUEST_PRESENCE_PENALTY]?: GEN_AI_REQUEST_PRESENCE_PENALTY_TYPE;\n  [GEN_AI_REQUEST_REASONING_EFFORT]?: GEN_AI_REQUEST_REASONING_EFFORT_TYPE;\n  [GEN_AI_REQUEST_SEED]?: GEN_AI_REQUEST_SEED_TYPE;\n  [GEN_AI_REQUEST_STOP_SEQUENCES]?: GEN_AI_REQUEST_STOP_SEQUENCES_TYPE;\n  [GEN_AI_REQUEST_TEMPERATURE]?: GEN_AI_REQUEST_TEMPERATURE_TYPE;\n  [GEN_AI_REQUEST_TOP_K]?: GEN_AI_REQUEST_TOP_K_TYPE;\n  [GEN_AI_REQUEST_TOP_P]?: GEN_AI_REQUEST_TOP_P_TYPE;\n  [GEN_AI_RESPONSE_FINISH_REASONS]?: GEN_AI_RESPONSE_FINISH_REASONS_TYPE;\n  [GEN_AI_RESPONSE_ID]?: GEN_AI_RESPONSE_ID_TYPE;\n  [GEN_AI_RESPONSE_MODEL]?: GEN_AI_RESPONSE_MODEL_TYPE;\n  [GEN_AI_RESPONSE_STREAMING]?: GEN_AI_RESPONSE_STREAMING_TYPE;\n  [GEN_AI_RESPONSE_TEXT]?: GEN_AI_RESPONSE_TEXT_TYPE;\n  [GEN_AI_RESPONSE_TIME_TO_FIRST_CHUNK]?: GEN_AI_RESPONSE_TIME_TO_FIRST_CHUNK_TYPE;\n  [GEN_AI_RESPONSE_TIME_TO_FIRST_TOKEN]?: GEN_AI_RESPONSE_TIME_TO_FIRST_TOKEN_TYPE;\n  [GEN_AI_RESPONSE_TOKENS_PER_SECOND]?: GEN_AI_RESPONSE_TOKENS_PER_SECOND_TYPE;\n  [GEN_AI_RESPONSE_TOOL_CALLS]?: GEN_AI_RESPONSE_TOOL_CALLS_TYPE;\n  [GEN_AI_SYSTEM]?: GEN_AI_SYSTEM_TYPE;\n  [GEN_AI_SYSTEM_INSTRUCTIONS]?: GEN_AI_SYSTEM_INSTRUCTIONS_TYPE;\n  [GEN_AI_SYSTEM_MESSAGE]?: GEN_AI_SYSTEM_MESSAGE_TYPE;\n  [GEN_AI_TOOL_CALL_ARGUMENTS]?: GEN_AI_TOOL_CALL_ARGUMENTS_TYPE;\n  [GEN_AI_TOOL_CALL_RESULT]?: GEN_AI_TOOL_CALL_RESULT_TYPE;\n  [GEN_AI_TOOL_DEFINITIONS]?: GEN_AI_TOOL_DEFINITIONS_TYPE;\n  [GEN_AI_TOOL_DESCRIPTION]?: GEN_AI_TOOL_DESCRIPTION_TYPE;\n  [GEN_AI_TOOL_INPUT]?: GEN_AI_TOOL_INPUT_TYPE;\n  [GEN_AI_TOOL_MESSAGE]?: GEN_AI_TOOL_MESSAGE_TYPE;\n  [GEN_AI_TOOL_NAME]?: GEN_AI_TOOL_NAME_TYPE;\n  [GEN_AI_TOOL_OUTPUT]?: GEN_AI_TOOL_OUTPUT_TYPE;\n  [GEN_AI_TOOL_TYPE]?: GEN_AI_TOOL_TYPE_TYPE;\n  [GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS]?: GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS_TYPE;\n  [GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS]?: GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS_TYPE;\n  [GEN_AI_USAGE_COMPLETION_TOKENS]?: GEN_AI_USAGE_COMPLETION_TOKENS_TYPE;\n  [GEN_AI_USAGE_INPUT_TOKENS]?: GEN_AI_USAGE_INPUT_TOKENS_TYPE;\n  [GEN_AI_USAGE_INPUT_TOKENS_CACHED]?: GEN_AI_USAGE_INPUT_TOKENS_CACHED_TYPE;\n  [GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE]?: GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_TYPE;\n  [GEN_AI_USAGE_OUTPUT_TOKENS]?: GEN_AI_USAGE_OUTPUT_TOKENS_TYPE;\n  [GEN_AI_USAGE_OUTPUT_TOKENS_REASONING]?: GEN_AI_USAGE_OUTPUT_TOKENS_REASONING_TYPE;\n  [GEN_AI_USAGE_PROMPT_TOKENS]?: GEN_AI_USAGE_PROMPT_TOKENS_TYPE;\n  [GEN_AI_USAGE_REASONING_OUTPUT_TOKENS]?: GEN_AI_USAGE_REASONING_OUTPUT_TOKENS_TYPE;\n  [GEN_AI_USAGE_TOTAL_TOKENS]?: GEN_AI_USAGE_TOTAL_TOKENS_TYPE;\n  [GRAPHQL_DOCUMENT]?: GRAPHQL_DOCUMENT_TYPE;\n  [GRAPHQL_OPERATION_NAME]?: GRAPHQL_OPERATION_NAME_TYPE;\n  [GRAPHQL_OPERATION_TYPE]?: GRAPHQL_OPERATION_TYPE_TYPE;\n  [HARDWARECONCURRENCY]?: HARDWARECONCURRENCY_TYPE;\n  [HTTP_CLIENT_IP]?: HTTP_CLIENT_IP_TYPE;\n  [HTTP_DECODED_RESPONSE_CONTENT_LENGTH]?: HTTP_DECODED_RESPONSE_CONTENT_LENGTH_TYPE;\n  [HTTP_FLAVOR]?: HTTP_FLAVOR_TYPE;\n  [HTTP_FRAGMENT]?: HTTP_FRAGMENT_TYPE;\n  [HTTP_HOST]?: HTTP_HOST_TYPE;\n  [HTTP_METHOD]?: HTTP_METHOD_TYPE;\n  [HTTP_QUERY]?: HTTP_QUERY_TYPE;\n  [HTTP_REQUEST_BODY_DATA]?: HTTP_REQUEST_BODY_DATA_TYPE;\n  [HTTP_REQUEST_CONNECTION_END]?: HTTP_REQUEST_CONNECTION_END_TYPE;\n  [HTTP_REQUEST_CONNECT_START]?: HTTP_REQUEST_CONNECT_START_TYPE;\n  [HTTP_REQUEST_DOMAIN_LOOKUP_END]?: HTTP_REQUEST_DOMAIN_LOOKUP_END_TYPE;\n  [HTTP_REQUEST_DOMAIN_LOOKUP_START]?: HTTP_REQUEST_DOMAIN_LOOKUP_START_TYPE;\n  [HTTP_REQUEST_FETCH_START]?: HTTP_REQUEST_FETCH_START_TYPE;\n  [HTTP_REQUEST_HEADER_KEY]?: HTTP_REQUEST_HEADER_KEY_TYPE;\n  [HTTP_REQUEST_METHOD]?: HTTP_REQUEST_METHOD_TYPE;\n  [_HTTP_REQUEST_METHOD]?: _HTTP_REQUEST_METHOD_TYPE;\n  [HTTP_REQUEST_REDIRECT_END]?: HTTP_REQUEST_REDIRECT_END_TYPE;\n  [HTTP_REQUEST_REDIRECT_START]?: HTTP_REQUEST_REDIRECT_START_TYPE;\n  [HTTP_REQUEST_REQUEST_START]?: HTTP_REQUEST_REQUEST_START_TYPE;\n  [HTTP_REQUEST_RESEND_COUNT]?: HTTP_REQUEST_RESEND_COUNT_TYPE;\n  [HTTP_REQUEST_RESPONSE_END]?: HTTP_REQUEST_RESPONSE_END_TYPE;\n  [HTTP_REQUEST_RESPONSE_START]?: HTTP_REQUEST_RESPONSE_START_TYPE;\n  [HTTP_REQUEST_SAME_ORIGIN]?: HTTP_REQUEST_SAME_ORIGIN_TYPE;\n  [HTTP_REQUEST_SECURE_CONNECTION_START]?: HTTP_REQUEST_SECURE_CONNECTION_START_TYPE;\n  [HTTP_REQUEST_TIME_TO_FIRST_BYTE]?: HTTP_REQUEST_TIME_TO_FIRST_BYTE_TYPE;\n  [HTTP_REQUEST_WORKER_START]?: HTTP_REQUEST_WORKER_START_TYPE;\n  [HTTP_RESPONSE_BODY_SIZE]?: HTTP_RESPONSE_BODY_SIZE_TYPE;\n  [HTTP_RESPONSE_CONTENT_LENGTH]?: HTTP_RESPONSE_CONTENT_LENGTH_TYPE;\n  [HTTP_RESPONSE_HEADER_CONTENT_LENGTH]?: HTTP_RESPONSE_HEADER_CONTENT_LENGTH_TYPE;\n  [HTTP_RESPONSE_HEADER_KEY]?: HTTP_RESPONSE_HEADER_KEY_TYPE;\n  [HTTP_RESPONSE_SIZE]?: HTTP_RESPONSE_SIZE_TYPE;\n  [HTTP_RESPONSE_STATUS_CODE]?: HTTP_RESPONSE_STATUS_CODE_TYPE;\n  [HTTP_RESPONSE_TRANSFER_SIZE]?: HTTP_RESPONSE_TRANSFER_SIZE_TYPE;\n  [HTTP_ROUTE]?: HTTP_ROUTE_TYPE;\n  [HTTP_SCHEME]?: HTTP_SCHEME_TYPE;\n  [HTTP_SERVER_NAME]?: HTTP_SERVER_NAME_TYPE;\n  [HTTP_SERVER_REQUEST_TIME_IN_QUEUE]?: HTTP_SERVER_REQUEST_TIME_IN_QUEUE_TYPE;\n  [HTTP_STATUS_CODE]?: HTTP_STATUS_CODE_TYPE;\n  [HTTP_TARGET]?: HTTP_TARGET_TYPE;\n  [HTTP_URL]?: HTTP_URL_TYPE;\n  [HTTP_USER_AGENT]?: HTTP_USER_AGENT_TYPE;\n  [ID]?: ID_TYPE;\n  [INP]?: INP_TYPE;\n  [JSONRPC_PROTOCOL_VERSION]?: JSONRPC_PROTOCOL_VERSION_TYPE;\n  [JSONRPC_REQUEST_ID]?: JSONRPC_REQUEST_ID_TYPE;\n  [JVM_GC_ACTION]?: JVM_GC_ACTION_TYPE;\n  [JVM_GC_NAME]?: JVM_GC_NAME_TYPE;\n  [JVM_MEMORY_POOL_NAME]?: JVM_MEMORY_POOL_NAME_TYPE;\n  [JVM_MEMORY_TYPE]?: JVM_MEMORY_TYPE_TYPE;\n  [JVM_THREAD_DAEMON]?: JVM_THREAD_DAEMON_TYPE;\n  [JVM_THREAD_STATE]?: JVM_THREAD_STATE_TYPE;\n  [KOA_NAME]?: KOA_NAME_TYPE;\n  [KOA_TYPE]?: KOA_TYPE_TYPE;\n  [LCP]?: LCP_TYPE;\n  [LCP_ELEMENT]?: LCP_ELEMENT_TYPE;\n  [LCP_ID]?: LCP_ID_TYPE;\n  [LCP_LOADTIME]?: LCP_LOADTIME_TYPE;\n  [LCP_RENDERTIME]?: LCP_RENDERTIME_TYPE;\n  [LCP_SIZE]?: LCP_SIZE_TYPE;\n  [LCP_URL]?: LCP_URL_TYPE;\n  [LOGGER_NAME]?: LOGGER_NAME_TYPE;\n  [MCP_CANCELLED_REASON]?: MCP_CANCELLED_REASON_TYPE;\n  [MCP_CANCELLED_REQUEST_ID]?: MCP_CANCELLED_REQUEST_ID_TYPE;\n  [MCP_CLIENT_NAME]?: MCP_CLIENT_NAME_TYPE;\n  [MCP_CLIENT_TITLE]?: MCP_CLIENT_TITLE_TYPE;\n  [MCP_CLIENT_VERSION]?: MCP_CLIENT_VERSION_TYPE;\n  [MCP_LIFECYCLE_PHASE]?: MCP_LIFECYCLE_PHASE_TYPE;\n  [MCP_LOGGING_DATA_TYPE]?: MCP_LOGGING_DATA_TYPE_TYPE;\n  [MCP_LOGGING_LEVEL]?: MCP_LOGGING_LEVEL_TYPE;\n  [MCP_LOGGING_LOGGER]?: MCP_LOGGING_LOGGER_TYPE;\n  [MCP_LOGGING_MESSAGE]?: MCP_LOGGING_MESSAGE_TYPE;\n  [MCP_METHOD_NAME]?: MCP_METHOD_NAME_TYPE;\n  [MCP_PROGRESS_CURRENT]?: MCP_PROGRESS_CURRENT_TYPE;\n  [MCP_PROGRESS_MESSAGE]?: MCP_PROGRESS_MESSAGE_TYPE;\n  [MCP_PROGRESS_PERCENTAGE]?: MCP_PROGRESS_PERCENTAGE_TYPE;\n  [MCP_PROGRESS_TOKEN]?: MCP_PROGRESS_TOKEN_TYPE;\n  [MCP_PROGRESS_TOTAL]?: MCP_PROGRESS_TOTAL_TYPE;\n  [MCP_PROMPT_NAME]?: MCP_PROMPT_NAME_TYPE;\n  [MCP_PROMPT_RESULT_DESCRIPTION]?: MCP_PROMPT_RESULT_DESCRIPTION_TYPE;\n  [MCP_PROMPT_RESULT_MESSAGE_CONTENT]?: MCP_PROMPT_RESULT_MESSAGE_CONTENT_TYPE;\n  [MCP_PROMPT_RESULT_MESSAGE_COUNT]?: MCP_PROMPT_RESULT_MESSAGE_COUNT_TYPE;\n  [MCP_PROMPT_RESULT_MESSAGE_ROLE]?: MCP_PROMPT_RESULT_MESSAGE_ROLE_TYPE;\n  [MCP_PROTOCOL_READY]?: MCP_PROTOCOL_READY_TYPE;\n  [MCP_PROTOCOL_VERSION]?: MCP_PROTOCOL_VERSION_TYPE;\n  [MCP_REQUEST_ARGUMENT_KEY]?: MCP_REQUEST_ARGUMENT_KEY_TYPE;\n  [MCP_REQUEST_ARGUMENT_NAME]?: MCP_REQUEST_ARGUMENT_NAME_TYPE;\n  [MCP_REQUEST_ARGUMENT_URI]?: MCP_REQUEST_ARGUMENT_URI_TYPE;\n  [MCP_REQUEST_ID]?: MCP_REQUEST_ID_TYPE;\n  [MCP_RESOURCE_PROTOCOL]?: MCP_RESOURCE_PROTOCOL_TYPE;\n  [MCP_RESOURCE_URI]?: MCP_RESOURCE_URI_TYPE;\n  [MCP_SERVER_NAME]?: MCP_SERVER_NAME_TYPE;\n  [MCP_SERVER_TITLE]?: MCP_SERVER_TITLE_TYPE;\n  [MCP_SERVER_VERSION]?: MCP_SERVER_VERSION_TYPE;\n  [MCP_SESSION_ID]?: MCP_SESSION_ID_TYPE;\n  [MCP_TOOL_NAME]?: MCP_TOOL_NAME_TYPE;\n  [MCP_TOOL_RESULT_CONTENT]?: MCP_TOOL_RESULT_CONTENT_TYPE;\n  [MCP_TOOL_RESULT_CONTENT_COUNT]?: MCP_TOOL_RESULT_CONTENT_COUNT_TYPE;\n  [MCP_TOOL_RESULT_IS_ERROR]?: MCP_TOOL_RESULT_IS_ERROR_TYPE;\n  [MCP_TRANSPORT]?: MCP_TRANSPORT_TYPE;\n  [MDC_KEY]?: MDC_KEY_TYPE;\n  [MESSAGING_BATCH_MESSAGE_COUNT]?: MESSAGING_BATCH_MESSAGE_COUNT_TYPE;\n  [MESSAGING_DESTINATION]?: MESSAGING_DESTINATION_TYPE;\n  [MESSAGING_DESTINATION_CONNECTION]?: MESSAGING_DESTINATION_CONNECTION_TYPE;\n  [MESSAGING_DESTINATION_NAME]?: MESSAGING_DESTINATION_NAME_TYPE;\n  [MESSAGING_MESSAGE_BODY_SIZE]?: MESSAGING_MESSAGE_BODY_SIZE_TYPE;\n  [MESSAGING_MESSAGE_CONVERSATION_ID]?: MESSAGING_MESSAGE_CONVERSATION_ID_TYPE;\n  [MESSAGING_MESSAGE_ENVELOPE_SIZE]?: MESSAGING_MESSAGE_ENVELOPE_SIZE_TYPE;\n  [MESSAGING_MESSAGE_ID]?: MESSAGING_MESSAGE_ID_TYPE;\n  [MESSAGING_MESSAGE_RECEIVE_LATENCY]?: MESSAGING_MESSAGE_RECEIVE_LATENCY_TYPE;\n  [MESSAGING_MESSAGE_RETRY_COUNT]?: MESSAGING_MESSAGE_RETRY_COUNT_TYPE;\n  [MESSAGING_OPERATION_NAME]?: MESSAGING_OPERATION_NAME_TYPE;\n  [MESSAGING_OPERATION_TYPE]?: MESSAGING_OPERATION_TYPE_TYPE;\n  [MESSAGING_RABBITMQ_DESTINATION_ROUTING_KEY]?: MESSAGING_RABBITMQ_DESTINATION_ROUTING_KEY_TYPE;\n  [MESSAGING_SYSTEM]?: MESSAGING_SYSTEM_TYPE;\n  [METHOD]?: METHOD_TYPE;\n  [MIDDLEWARE_NAME]?: MIDDLEWARE_NAME_TYPE;\n  [NAVIGATION_ORIGIN]?: NAVIGATION_ORIGIN_TYPE;\n  [NAVIGATION_ROUTE_ID]?: NAVIGATION_ROUTE_ID_TYPE;\n  [NAVIGATION_TYPE]?: NAVIGATION_TYPE_TYPE;\n  [NEL_ELAPSED_TIME]?: NEL_ELAPSED_TIME_TYPE;\n  [NEL_PHASE]?: NEL_PHASE_TYPE;\n  [NEL_REFERRER]?: NEL_REFERRER_TYPE;\n  [NEL_SAMPLING_FUNCTION]?: NEL_SAMPLING_FUNCTION_TYPE;\n  [NEL_TYPE]?: NEL_TYPE_TYPE;\n  [NETWORK_CONNECTION_EFFECTIVE_TYPE]?: NETWORK_CONNECTION_EFFECTIVE_TYPE_TYPE;\n  [NETWORK_CONNECTION_RTT]?: NETWORK_CONNECTION_RTT_TYPE;\n  [NETWORK_CONNECTION_TYPE]?: NETWORK_CONNECTION_TYPE_TYPE;\n  [NETWORK_LOCAL_ADDRESS]?: NETWORK_LOCAL_ADDRESS_TYPE;\n  [NETWORK_LOCAL_PORT]?: NETWORK_LOCAL_PORT_TYPE;\n  [NETWORK_PEER_ADDRESS]?: NETWORK_PEER_ADDRESS_TYPE;\n  [NETWORK_PEER_PORT]?: NETWORK_PEER_PORT_TYPE;\n  [NETWORK_PROTOCOL_NAME]?: NETWORK_PROTOCOL_NAME_TYPE;\n  [NETWORK_PROTOCOL_VERSION]?: NETWORK_PROTOCOL_VERSION_TYPE;\n  [NETWORK_TRANSPORT]?: NETWORK_TRANSPORT_TYPE;\n  [NETWORK_TYPE]?: NETWORK_TYPE_TYPE;\n  [NET_HOST_IP]?: NET_HOST_IP_TYPE;\n  [NET_HOST_NAME]?: NET_HOST_NAME_TYPE;\n  [NET_HOST_PORT]?: NET_HOST_PORT_TYPE;\n  [NET_PEER_IP]?: NET_PEER_IP_TYPE;\n  [NET_PEER_NAME]?: NET_PEER_NAME_TYPE;\n  [NET_PEER_PORT]?: NET_PEER_PORT_TYPE;\n  [NET_PROTOCOL_NAME]?: NET_PROTOCOL_NAME_TYPE;\n  [NET_PROTOCOL_VERSION]?: NET_PROTOCOL_VERSION_TYPE;\n  [NET_SOCK_FAMILY]?: NET_SOCK_FAMILY_TYPE;\n  [NET_SOCK_HOST_ADDR]?: NET_SOCK_HOST_ADDR_TYPE;\n  [NET_SOCK_HOST_PORT]?: NET_SOCK_HOST_PORT_TYPE;\n  [NET_SOCK_PEER_ADDR]?: NET_SOCK_PEER_ADDR_TYPE;\n  [NET_SOCK_PEER_NAME]?: NET_SOCK_PEER_NAME_TYPE;\n  [NET_SOCK_PEER_PORT]?: NET_SOCK_PEER_PORT_TYPE;\n  [NET_TRANSPORT]?: NET_TRANSPORT_TYPE;\n  [OS_BUILD]?: OS_BUILD_TYPE;\n  [OS_BUILD_ID]?: OS_BUILD_ID_TYPE;\n  [OS_DESCRIPTION]?: OS_DESCRIPTION_TYPE;\n  [OS_KERNEL_VERSION]?: OS_KERNEL_VERSION_TYPE;\n  [OS_NAME]?: OS_NAME_TYPE;\n  [OS_RAW_DESCRIPTION]?: OS_RAW_DESCRIPTION_TYPE;\n  [OS_ROOTED]?: OS_ROOTED_TYPE;\n  [OS_THEME]?: OS_THEME_TYPE;\n  [OS_TYPE]?: OS_TYPE_TYPE;\n  [OS_VERSION]?: OS_VERSION_TYPE;\n  [OTEL_KIND]?: OTEL_KIND_TYPE;\n  [OTEL_SCOPE_NAME]?: OTEL_SCOPE_NAME_TYPE;\n  [OTEL_SCOPE_VERSION]?: OTEL_SCOPE_VERSION_TYPE;\n  [OTEL_STATUS_CODE]?: OTEL_STATUS_CODE_TYPE;\n  [OTEL_STATUS_DESCRIPTION]?: OTEL_STATUS_DESCRIPTION_TYPE;\n  [PARAMS_KEY]?: PARAMS_KEY_TYPE;\n  [PERFORMANCE_ACTIVATIONSTART]?: PERFORMANCE_ACTIVATIONSTART_TYPE;\n  [PERFORMANCE_TIMEORIGIN]?: PERFORMANCE_TIMEORIGIN_TYPE;\n  [PREVIOUS_ROUTE]?: PREVIOUS_ROUTE_TYPE;\n  [PROCESS_COMMAND_ARGS]?: PROCESS_COMMAND_ARGS_TYPE;\n  [PROCESS_EXECUTABLE_NAME]?: PROCESS_EXECUTABLE_NAME_TYPE;\n  [PROCESS_PID]?: PROCESS_PID_TYPE;\n  [PROCESS_RUNTIME_DESCRIPTION]?: PROCESS_RUNTIME_DESCRIPTION_TYPE;\n  [PROCESS_RUNTIME_ENGINE_NAME]?: PROCESS_RUNTIME_ENGINE_NAME_TYPE;\n  [PROCESS_RUNTIME_ENGINE_VERSION]?: PROCESS_RUNTIME_ENGINE_VERSION_TYPE;\n  [PROCESS_RUNTIME_NAME]?: PROCESS_RUNTIME_NAME_TYPE;\n  [PROCESS_RUNTIME_VERSION]?: PROCESS_RUNTIME_VERSION_TYPE;\n  [QUERY_KEY]?: QUERY_KEY_TYPE;\n  [REACT_VERSION]?: REACT_VERSION_TYPE;\n  [RELEASE]?: RELEASE_TYPE;\n  [REMIX_ACTION_FORM_DATA_KEY]?: REMIX_ACTION_FORM_DATA_KEY_TYPE;\n  [REPLAY_ID]?: REPLAY_ID_TYPE;\n  [RESOURCE_DEPLOYMENT_ENVIRONMENT]?: RESOURCE_DEPLOYMENT_ENVIRONMENT_TYPE;\n  [RESOURCE_DEPLOYMENT_ENVIRONMENT_NAME]?: RESOURCE_DEPLOYMENT_ENVIRONMENT_NAME_TYPE;\n  [RESOURCE_RENDER_BLOCKING_STATUS]?: RESOURCE_RENDER_BLOCKING_STATUS_TYPE;\n  [ROUTE]?: ROUTE_TYPE;\n  [RPC_GRPC_STATUS_CODE]?: RPC_GRPC_STATUS_CODE_TYPE;\n  [RPC_METHOD]?: RPC_METHOD_TYPE;\n  [RPC_RESPONSE_STATUS_CODE]?: RPC_RESPONSE_STATUS_CODE_TYPE;\n  [RPC_SERVICE]?: RPC_SERVICE_TYPE;\n  [RPC_SYSTEM]?: RPC_SYSTEM_TYPE;\n  [RPC_SYSTEM_NAME]?: RPC_SYSTEM_NAME_TYPE;\n  [RUNTIME_BUILD]?: RUNTIME_BUILD_TYPE;\n  [RUNTIME_NAME]?: RUNTIME_NAME_TYPE;\n  [RUNTIME_RAW_DESCRIPTION]?: RUNTIME_RAW_DESCRIPTION_TYPE;\n  [RUNTIME_VERSION]?: RUNTIME_VERSION_TYPE;\n  [SCORE_KEY]?: SCORE_KEY_TYPE;\n  [SCORE_RATIO_KEY]?: SCORE_RATIO_KEY_TYPE;\n  [SCORE_TOTAL]?: SCORE_TOTAL_TYPE;\n  [SCORE_WEIGHT_KEY]?: SCORE_WEIGHT_KEY_TYPE;\n  [SENTRY_ACTION]?: SENTRY_ACTION_TYPE;\n  [SENTRY_BROWSER_NAME]?: SENTRY_BROWSER_NAME_TYPE;\n  [SENTRY_BROWSER_VERSION]?: SENTRY_BROWSER_VERSION_TYPE;\n  [SENTRY_CANCELLATION_REASON]?: SENTRY_CANCELLATION_REASON_TYPE;\n  [SENTRY_CATEGORY]?: SENTRY_CATEGORY_TYPE;\n  [SENTRY_CLIENT_SAMPLE_RATE]?: SENTRY_CLIENT_SAMPLE_RATE_TYPE;\n  [SENTRY_DESCRIPTION]?: SENTRY_DESCRIPTION_TYPE;\n  [SENTRY_DIST]?: SENTRY_DIST_TYPE;\n  [SENTRY_DOMAIN]?: SENTRY_DOMAIN_TYPE;\n  [SENTRY_DSC_ENVIRONMENT]?: SENTRY_DSC_ENVIRONMENT_TYPE;\n  [SENTRY_DSC_PROJECT_ID]?: SENTRY_DSC_PROJECT_ID_TYPE;\n  [SENTRY_DSC_PUBLIC_KEY]?: SENTRY_DSC_PUBLIC_KEY_TYPE;\n  [SENTRY_DSC_RELEASE]?: SENTRY_DSC_RELEASE_TYPE;\n  [SENTRY_DSC_SAMPLED]?: SENTRY_DSC_SAMPLED_TYPE;\n  [SENTRY_DSC_SAMPLE_RATE]?: SENTRY_DSC_SAMPLE_RATE_TYPE;\n  [SENTRY_DSC_TRACE_ID]?: SENTRY_DSC_TRACE_ID_TYPE;\n  [SENTRY_DSC_TRANSACTION]?: SENTRY_DSC_TRANSACTION_TYPE;\n  [SENTRY_ENVIRONMENT]?: SENTRY_ENVIRONMENT_TYPE;\n  [SENTRY_EXCLUSIVE_TIME]?: SENTRY_EXCLUSIVE_TIME_TYPE;\n  [SENTRY_GRAPHQL_OPERATION]?: SENTRY_GRAPHQL_OPERATION_TYPE;\n  [SENTRY_GROUP]?: SENTRY_GROUP_TYPE;\n  [SENTRY_HTTP_PREFETCH]?: SENTRY_HTTP_PREFETCH_TYPE;\n  [SENTRY_IDLE_SPAN_FINISH_REASON]?: SENTRY_IDLE_SPAN_FINISH_REASON_TYPE;\n  [SENTRY_IS_REMOTE]?: SENTRY_IS_REMOTE_TYPE;\n  [SENTRY_KIND]?: SENTRY_KIND_TYPE;\n  [SENTRY_MAIN_THREAD]?: SENTRY_MAIN_THREAD_TYPE;\n  [SENTRY_MESSAGE_PARAMETER_KEY]?: SENTRY_MESSAGE_PARAMETER_KEY_TYPE;\n  [SENTRY_MESSAGE_TEMPLATE]?: SENTRY_MESSAGE_TEMPLATE_TYPE;\n  [SENTRY_METRIC_SOURCE]?: SENTRY_METRIC_SOURCE_TYPE;\n  [SENTRY_MOBILE]?: SENTRY_MOBILE_TYPE;\n  [SENTRY_MODULE_KEY]?: SENTRY_MODULE_KEY_TYPE;\n  [SENTRY_NEXTJS_SSR_FUNCTION_ROUTE]?: SENTRY_NEXTJS_SSR_FUNCTION_ROUTE_TYPE;\n  [SENTRY_NEXTJS_SSR_FUNCTION_TYPE]?: SENTRY_NEXTJS_SSR_FUNCTION_TYPE_TYPE;\n  [SENTRY_NORMALIZED_DB_QUERY]?: SENTRY_NORMALIZED_DB_QUERY_TYPE;\n  [SENTRY_NORMALIZED_DB_QUERY_HASH]?: SENTRY_NORMALIZED_DB_QUERY_HASH_TYPE;\n  [SENTRY_NORMALIZED_DESCRIPTION]?: SENTRY_NORMALIZED_DESCRIPTION_TYPE;\n  [SENTRY_OBSERVED_TIMESTAMP_NANOS]?: SENTRY_OBSERVED_TIMESTAMP_NANOS_TYPE;\n  [SENTRY_OP]?: SENTRY_OP_TYPE;\n  [SENTRY_ORIGIN]?: SENTRY_ORIGIN_TYPE;\n  [SENTRY_PLATFORM]?: SENTRY_PLATFORM_TYPE;\n  [SENTRY_PROFILER_ID]?: SENTRY_PROFILER_ID_TYPE;\n  [SENTRY_PROFILE_ID]?: SENTRY_PROFILE_ID_TYPE;\n  [SENTRY_RELEASE]?: SENTRY_RELEASE_TYPE;\n  [SENTRY_REPLAY_ID]?: SENTRY_REPLAY_ID_TYPE;\n  [SENTRY_REPLAY_IS_BUFFERING]?: SENTRY_REPLAY_IS_BUFFERING_TYPE;\n  [SENTRY_REPORT_EVENT]?: SENTRY_REPORT_EVENT_TYPE;\n  [SENTRY_SDK_INTEGRATIONS]?: SENTRY_SDK_INTEGRATIONS_TYPE;\n  [SENTRY_SDK_NAME]?: SENTRY_SDK_NAME_TYPE;\n  [SENTRY_SDK_VERSION]?: SENTRY_SDK_VERSION_TYPE;\n  [SENTRY_SEGMENT_ID]?: SENTRY_SEGMENT_ID_TYPE;\n  [_SENTRY_SEGMENT_ID]?: _SENTRY_SEGMENT_ID_TYPE;\n  [SENTRY_SEGMENT_NAME]?: SENTRY_SEGMENT_NAME_TYPE;\n  [SENTRY_SERVER_SAMPLE_RATE]?: SENTRY_SERVER_SAMPLE_RATE_TYPE;\n  [SENTRY_SOURCE]?: SENTRY_SOURCE_TYPE;\n  [SENTRY_SPAN_SOURCE]?: SENTRY_SPAN_SOURCE_TYPE;\n  [SENTRY_STATUS]?: SENTRY_STATUS_TYPE;\n  [SENTRY_STATUS_CODE]?: SENTRY_STATUS_CODE_TYPE;\n  [SENTRY_STATUS_MESSAGE]?: SENTRY_STATUS_MESSAGE_TYPE;\n  [SENTRY_SVELTEKIT_NAVIGATION_FROM]?: SENTRY_SVELTEKIT_NAVIGATION_FROM_TYPE;\n  [SENTRY_SVELTEKIT_NAVIGATION_TO]?: SENTRY_SVELTEKIT_NAVIGATION_TO_TYPE;\n  [SENTRY_SVELTEKIT_NAVIGATION_TYPE]?: SENTRY_SVELTEKIT_NAVIGATION_TYPE_TYPE;\n  [SENTRY_THREAD_ID]?: SENTRY_THREAD_ID_TYPE;\n  [SENTRY_TIMESTAMP_SEQUENCE]?: SENTRY_TIMESTAMP_SEQUENCE_TYPE;\n  [SENTRY_TRACE_LIFECYCLE]?: SENTRY_TRACE_LIFECYCLE_TYPE;\n  [SENTRY_TRACE_PARENT_SPAN_ID]?: SENTRY_TRACE_PARENT_SPAN_ID_TYPE;\n  [SENTRY_TRACE_STATUS]?: SENTRY_TRACE_STATUS_TYPE;\n  [SENTRY_TRANSACTION]?: SENTRY_TRANSACTION_TYPE;\n  [SENTRY_USER_EMAIL]?: SENTRY_USER_EMAIL_TYPE;\n  [SENTRY_USER_GEO_CITY]?: SENTRY_USER_GEO_CITY_TYPE;\n  [SENTRY_USER_GEO_COUNTRY_CODE]?: SENTRY_USER_GEO_COUNTRY_CODE_TYPE;\n  [SENTRY_USER_GEO_REGION]?: SENTRY_USER_GEO_REGION_TYPE;\n  [SENTRY_USER_GEO_SUBDIVISION]?: SENTRY_USER_GEO_SUBDIVISION_TYPE;\n  [SENTRY_USER_ID]?: SENTRY_USER_ID_TYPE;\n  [SENTRY_USER_IP]?: SENTRY_USER_IP_TYPE;\n  [SENTRY_USER_USERNAME]?: SENTRY_USER_USERNAME_TYPE;\n  [SERVER_ADDRESS]?: SERVER_ADDRESS_TYPE;\n  [SERVER_NAME]?: SERVER_NAME_TYPE;\n  [SERVER_PORT]?: SERVER_PORT_TYPE;\n  [SERVICE_NAME]?: SERVICE_NAME_TYPE;\n  [SERVICE_VERSION]?: SERVICE_VERSION_TYPE;\n  [SESSION_ID]?: SESSION_ID_TYPE;\n  [STALL_PERCENTAGE]?: STALL_PERCENTAGE_TYPE;\n  [STALL_TOTAL_TIME]?: STALL_TOTAL_TIME_TYPE;\n  [STATE_TYPE]?: STATE_TYPE_TYPE;\n  [THREAD_ID]?: THREAD_ID_TYPE;\n  [THREAD_NAME]?: THREAD_NAME_TYPE;\n  [TIMBER_TAG]?: TIMBER_TAG_TYPE;\n  [TIME_TO_FULL_DISPLAY]?: TIME_TO_FULL_DISPLAY_TYPE;\n  [TIME_TO_INITIAL_DISPLAY]?: TIME_TO_INITIAL_DISPLAY_TYPE;\n  [TRANSACTION]?: TRANSACTION_TYPE;\n  [TRPC_PROCEDURE_PATH]?: TRPC_PROCEDURE_PATH_TYPE;\n  [TRPC_PROCEDURE_TYPE]?: TRPC_PROCEDURE_TYPE_TYPE;\n  [TTFB]?: TTFB_TYPE;\n  [TTFB_REQUESTTIME]?: TTFB_REQUESTTIME_TYPE;\n  [TYPE]?: TYPE_TYPE;\n  [UI_COMPONENT_NAME]?: UI_COMPONENT_NAME_TYPE;\n  [UI_CONTRIBUTES_TO_TTFD]?: UI_CONTRIBUTES_TO_TTFD_TYPE;\n  [UI_CONTRIBUTES_TO_TTID]?: UI_CONTRIBUTES_TO_TTID_TYPE;\n  [UI_ELEMENT_HEIGHT]?: UI_ELEMENT_HEIGHT_TYPE;\n  [UI_ELEMENT_ID]?: UI_ELEMENT_ID_TYPE;\n  [UI_ELEMENT_IDENTIFIER]?: UI_ELEMENT_IDENTIFIER_TYPE;\n  [UI_ELEMENT_LOAD_TIME]?: UI_ELEMENT_LOAD_TIME_TYPE;\n  [UI_ELEMENT_PAINT_TYPE]?: UI_ELEMENT_PAINT_TYPE_TYPE;\n  [UI_ELEMENT_RENDER_TIME]?: UI_ELEMENT_RENDER_TIME_TYPE;\n  [UI_ELEMENT_TYPE]?: UI_ELEMENT_TYPE_TYPE;\n  [UI_ELEMENT_URL]?: UI_ELEMENT_URL_TYPE;\n  [UI_ELEMENT_WIDTH]?: UI_ELEMENT_WIDTH_TYPE;\n  [URL]?: URL_TYPE;\n  [URL_DOMAIN]?: URL_DOMAIN_TYPE;\n  [URL_FRAGMENT]?: URL_FRAGMENT_TYPE;\n  [URL_FULL]?: URL_FULL_TYPE;\n  [URL_PATH]?: URL_PATH_TYPE;\n  [URL_PATH_PARAMETER_KEY]?: URL_PATH_PARAMETER_KEY_TYPE;\n  [URL_PORT]?: URL_PORT_TYPE;\n  [URL_QUERY]?: URL_QUERY_TYPE;\n  [URL_SAME_ORIGIN]?: URL_SAME_ORIGIN_TYPE;\n  [URL_SCHEME]?: URL_SCHEME_TYPE;\n  [URL_TEMPLATE]?: URL_TEMPLATE_TYPE;\n  [USER_AGENT_ORIGINAL]?: USER_AGENT_ORIGINAL_TYPE;\n  [USER_EMAIL]?: USER_EMAIL_TYPE;\n  [USER_FULL_NAME]?: USER_FULL_NAME_TYPE;\n  [USER_GEO_CITY]?: USER_GEO_CITY_TYPE;\n  [USER_GEO_COUNTRY_CODE]?: USER_GEO_COUNTRY_CODE_TYPE;\n  [USER_GEO_REGION]?: USER_GEO_REGION_TYPE;\n  [USER_GEO_SUBDIVISION]?: USER_GEO_SUBDIVISION_TYPE;\n  [USER_HASH]?: USER_HASH_TYPE;\n  [USER_ID]?: USER_ID_TYPE;\n  [USER_IP_ADDRESS]?: USER_IP_ADDRESS_TYPE;\n  [USER_NAME]?: USER_NAME_TYPE;\n  [USER_ROLES]?: USER_ROLES_TYPE;\n  [VERCEL_BRANCH]?: VERCEL_BRANCH_TYPE;\n  [VERCEL_BUILD_ID]?: VERCEL_BUILD_ID_TYPE;\n  [VERCEL_DEPLOYMENT_ID]?: VERCEL_DEPLOYMENT_ID_TYPE;\n  [VERCEL_DESTINATION]?: VERCEL_DESTINATION_TYPE;\n  [VERCEL_EDGE_TYPE]?: VERCEL_EDGE_TYPE_TYPE;\n  [VERCEL_ENTRYPOINT]?: VERCEL_ENTRYPOINT_TYPE;\n  [VERCEL_EXECUTION_REGION]?: VERCEL_EXECUTION_REGION_TYPE;\n  [VERCEL_ID]?: VERCEL_ID_TYPE;\n  [VERCEL_JA3_DIGEST]?: VERCEL_JA3_DIGEST_TYPE;\n  [VERCEL_JA4_DIGEST]?: VERCEL_JA4_DIGEST_TYPE;\n  [VERCEL_LOG_TYPE]?: VERCEL_LOG_TYPE_TYPE;\n  [VERCEL_PATH]?: VERCEL_PATH_TYPE;\n  [VERCEL_PROJECT_ID]?: VERCEL_PROJECT_ID_TYPE;\n  [VERCEL_PROJECT_NAME]?: VERCEL_PROJECT_NAME_TYPE;\n  [VERCEL_PROXY_CACHE_ID]?: VERCEL_PROXY_CACHE_ID_TYPE;\n  [VERCEL_PROXY_CLIENT_IP]?: VERCEL_PROXY_CLIENT_IP_TYPE;\n  [VERCEL_PROXY_HOST]?: VERCEL_PROXY_HOST_TYPE;\n  [VERCEL_PROXY_LAMBDA_REGION]?: VERCEL_PROXY_LAMBDA_REGION_TYPE;\n  [VERCEL_PROXY_METHOD]?: VERCEL_PROXY_METHOD_TYPE;\n  [VERCEL_PROXY_PATH]?: VERCEL_PROXY_PATH_TYPE;\n  [VERCEL_PROXY_PATH_TYPE]?: VERCEL_PROXY_PATH_TYPE_TYPE;\n  [VERCEL_PROXY_PATH_TYPE_VARIANT]?: VERCEL_PROXY_PATH_TYPE_VARIANT_TYPE;\n  [VERCEL_PROXY_REFERER]?: VERCEL_PROXY_REFERER_TYPE;\n  [VERCEL_PROXY_REGION]?: VERCEL_PROXY_REGION_TYPE;\n  [VERCEL_PROXY_RESPONSE_BYTE_SIZE]?: VERCEL_PROXY_RESPONSE_BYTE_SIZE_TYPE;\n  [VERCEL_PROXY_SCHEME]?: VERCEL_PROXY_SCHEME_TYPE;\n  [VERCEL_PROXY_STATUS_CODE]?: VERCEL_PROXY_STATUS_CODE_TYPE;\n  [VERCEL_PROXY_TIMESTAMP]?: VERCEL_PROXY_TIMESTAMP_TYPE;\n  [VERCEL_PROXY_USER_AGENT]?: VERCEL_PROXY_USER_AGENT_TYPE;\n  [VERCEL_PROXY_VERCEL_CACHE]?: VERCEL_PROXY_VERCEL_CACHE_TYPE;\n  [VERCEL_PROXY_VERCEL_ID]?: VERCEL_PROXY_VERCEL_ID_TYPE;\n  [VERCEL_PROXY_WAF_ACTION]?: VERCEL_PROXY_WAF_ACTION_TYPE;\n  [VERCEL_PROXY_WAF_RULE_ID]?: VERCEL_PROXY_WAF_RULE_ID_TYPE;\n  [VERCEL_REQUEST_ID]?: VERCEL_REQUEST_ID_TYPE;\n  [VERCEL_SOURCE]?: VERCEL_SOURCE_TYPE;\n  [VERCEL_STATUS_CODE]?: VERCEL_STATUS_CODE_TYPE;\n} & Record<string, AttributeValue | undefined>;\n", "import type { RawAttributes } from '../../attributes';\nimport type { Client } from '../../client';\nimport type { ScopeData } from '../../scope';\nimport {\n  SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT,\n  SEMANTIC_ATTRIBUTE_SENTRY_RELEASE,\n  SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS,\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n  SEMANTIC_ATTRIBUTE_USER_EMAIL,\n  SEMANTIC_ATTRIBUTE_USER_ID,\n  SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS,\n  SEMANTIC_ATTRIBUTE_USER_USERNAME,\n} from '../../semanticAttributes';\nimport type { SerializedStreamedSpan, Span, StreamedSpanJSON } from '../../types/span';\nimport { getCombinedScopeData } from '../../utils/scopeData';\nimport {\n  INTERNAL_getSegmentSpan,\n  showSpanDropWarning,\n  spanToStreamedSpanJSON,\n  streamedSpanJsonToSerializedSpan,\n} from '../../utils/spanUtils';\nimport { getCapturedScopesOnSpan } from '../utils';\nimport { isStreamedBeforeSendSpanCallback } from './beforeSendSpan';\nimport { scopeContextsToSpanAttributes } from './scopeContextAttributes';\nimport { DEFAULT_ENVIRONMENT } from '../../constants';\nimport {\n  SENTRY_SDK_NAME,\n  SENTRY_SDK_VERSION,\n  SENTRY_SEGMENT_ID,\n  SENTRY_SEGMENT_NAME,\n  SENTRY_TRACE_LIFECYCLE,\n} from '@sentry/conventions/attributes';\n\nexport type SerializedStreamedSpanWithSegmentSpan = SerializedStreamedSpan & {\n  _segmentSpan: Span;\n};\n\n/**\n * Captures a span and returns a JSON representation to be enqueued for sending.\n *\n * IMPORTANT: This function converts the span to JSON immediately to avoid writing\n * to an already-ended OTel span instance (which is blocked by the OTel Span class).\n *\n * @returns the final serialized span with a reference to its segment span. This reference\n * is needed later on to compute the DSC for the span envelope.\n */\nexport function captureSpan(span: Span, client: Client): SerializedStreamedSpanWithSegmentSpan {\n  // Convert to JSON FIRST - we cannot write to an already-ended span\n  const spanJSON = spanToStreamedSpanJSON(span);\n\n  const segmentSpan = INTERNAL_getSegmentSpan(span);\n  const serializedSegmentSpan = spanToStreamedSpanJSON(segmentSpan);\n\n  const { isolationScope: spanIsolationScope, scope: spanScope } = getCapturedScopesOnSpan(span);\n\n  const finalScopeData = getCombinedScopeData(spanIsolationScope, spanScope);\n\n  applyCommonSpanAttributes(spanJSON, serializedSegmentSpan, client, finalScopeData);\n\n  // Access `kind` via duck-typing — OTel span objects have this property but it's not on Sentry's Span type.\n  // It is forwarded to `preprocessSpan` subscribers (e.g. the OpenTelemetry SDK backfills op/source/name from it).\n  const spanKind = (span as { kind?: number }).kind;\n\n  // Preprocess the span JSON before any other hooks run, so that `processSpan`/`processSegmentSpan`\n  // subscribers (incl. integrations) and `beforeSendSpan` see fully inferred span data.\n  client.emit('preprocessSpan', spanJSON, { spanKind });\n\n  if (spanJSON.is_segment) {\n    applyScopeToSegmentSpan(spanJSON, finalScopeData);\n    applySdkMetadataToSegmentSpan(spanJSON, client);\n    // Allow hook subscribers to mutate the segment span JSON\n    // This also invokes the `processSegmentSpan` hook of all integrations\n    client.emit('processSegmentSpan', spanJSON);\n  }\n\n  // This allows hook subscribers to mutate the span JSON\n  // This also invokes the `processSpan` hook of all integrations\n  client.emit('processSpan', spanJSON);\n\n  const { beforeSendSpan } = client.getOptions();\n  const processedSpan =\n    beforeSendSpan && isStreamedBeforeSendSpanCallback(beforeSendSpan)\n      ? applyBeforeSendSpanCallback(spanJSON, beforeSendSpan)\n      : spanJSON;\n\n  const spanNameSource = processedSpan.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n  if (spanJSON.is_segment && spanNameSource) {\n    // Backfill sentry.segment.name.source from sentry.source.\n    // TODO(v11): Remove this backfill once we removed setting SEMANTIC_ATTRIBUTE_SENTRY_SOURCE in favour of\n    // SENTRY_SEGMENT_NAME_SOURCE from @sentry/conventions/attributes only on segment spans.\n    safeSetSpanJSONAttributes(processedSpan, {\n      ['sentry.segment.name.source']: spanNameSource,\n    });\n  }\n\n  return {\n    ...streamedSpanJsonToSerializedSpan(processedSpan),\n    _segmentSpan: segmentSpan,\n  };\n}\n\nfunction applyScopeToSegmentSpan(segmentSpanJSON: StreamedSpanJSON, scopeData: ScopeData): void {\n  const contextAttributes = scopeContextsToSpanAttributes(scopeData.contexts);\n  safeSetSpanJSONAttributes(segmentSpanJSON, contextAttributes);\n}\n\n/**\n * Safely set attributes on a span JSON.\n * If an attribute already exists, it will not be overwritten.\n */\nexport function safeSetSpanJSONAttributes(\n  spanJSON: StreamedSpanJSON,\n  newAttributes: RawAttributes<Record<string, unknown>>,\n): void {\n  const originalAttributes = spanJSON.attributes ?? (spanJSON.attributes = {});\n\n  Object.entries(newAttributes).forEach(([key, value]) => {\n    if (value != null && !(key in originalAttributes)) {\n      originalAttributes[key] = value;\n    }\n  });\n}\n\nfunction applySdkMetadataToSegmentSpan(segmentSpanJSON: StreamedSpanJSON, client: Client): void {\n  const integrationNames = client.getIntegrationNames();\n  if (!integrationNames.length) return;\n\n  safeSetSpanJSONAttributes(segmentSpanJSON, {\n    [SEMANTIC_ATTRIBUTE_SENTRY_SDK_INTEGRATIONS]: integrationNames,\n  });\n}\n\nfunction applyCommonSpanAttributes(\n  spanJSON: StreamedSpanJSON,\n  serializedSegmentSpan: StreamedSpanJSON,\n  client: Client,\n  scopeData: ScopeData,\n): void {\n  const sdk = client.getSdkMetadata();\n  const { release, environment } = client.getOptions();\n\n  // avoid overwriting any previously set attributes (from users or potentially our SDK instrumentation)\n  safeSetSpanJSONAttributes(spanJSON, {\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    [SEMANTIC_ATTRIBUTE_SENTRY_RELEASE]: release,\n    [SEMANTIC_ATTRIBUTE_SENTRY_ENVIRONMENT]: environment || DEFAULT_ENVIRONMENT,\n    [SEMANTIC_ATTRIBUTE_USER_ID]: scopeData.user?.id,\n    [SEMANTIC_ATTRIBUTE_USER_EMAIL]: scopeData.user?.email,\n    [SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS]: scopeData.user?.ip_address,\n    [SEMANTIC_ATTRIBUTE_USER_USERNAME]: scopeData.user?.username,\n    ...scopeData.attributes,\n  });\n}\n\n/**\n * Apply a user-provided beforeSendSpan callback to a span JSON.\n */\nexport function applyBeforeSendSpanCallback(\n  span: StreamedSpanJSON,\n  beforeSendSpan: (span: StreamedSpanJSON) => StreamedSpanJSON,\n): StreamedSpanJSON {\n  const modifedSpan = beforeSendSpan(span);\n  if (!modifedSpan) {\n    showSpanDropWarning();\n    return span;\n  }\n  return modifedSpan;\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isThenable } from './is';\n\n/** SyncPromise internal states */\nconst STATE_PENDING = 0;\nconst STATE_RESOLVED = 1;\nconst STATE_REJECTED = 2;\n\ntype State = typeof STATE_PENDING | typeof STATE_RESOLVED | typeof STATE_REJECTED;\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\nexport function resolvedSyncPromise(): PromiseLike<void>;\nexport function resolvedSyncPromise<T>(value: T | PromiseLike<T>): PromiseLike<T>;\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nexport function resolvedSyncPromise<T>(value?: T | PromiseLike<T>): PromiseLike<T> {\n  return new SyncPromise(resolve => {\n    resolve(value);\n  });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nexport function rejectedSyncPromise<T = never>(reason?: any): PromiseLike<T> {\n  return new SyncPromise((_, reject) => {\n    reject(reason);\n  });\n}\n\ntype Executor<T> = (resolve: (value?: T | PromiseLike<T> | null) => void, reject: (reason?: any) => void) => void;\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nexport class SyncPromise<T> implements PromiseLike<T> {\n  private _state: State;\n  private _handlers: Array<[boolean, (value: T) => void, (reason: any) => any]>;\n  private _value: any;\n\n  public constructor(executor: Executor<T>) {\n    this._state = STATE_PENDING;\n    this._handlers = [];\n\n    this._runExecutor(executor);\n  }\n\n  /** @inheritdoc */\n  public then<TResult1 = T, TResult2 = never>(\n    onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n    onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null,\n  ): PromiseLike<TResult1 | TResult2> {\n    return new SyncPromise((resolve, reject) => {\n      this._handlers.push([\n        false,\n        result => {\n          if (!onfulfilled) {\n            // TODO: ¯\\_(ツ)_/¯\n            // TODO: FIXME\n            resolve(result as any);\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\n  /** @inheritdoc */\n  public catch<TResult = never>(\n    onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null,\n  ): PromiseLike<T | TResult> {\n    return this.then(val => val, onrejected);\n  }\n\n  /** @inheritdoc */\n  public finally<TResult>(onfinally?: (() => void) | null): PromiseLike<TResult> {\n    return new SyncPromise<TResult>((resolve, reject) => {\n      let val: TResult | any;\n      let isRejected: boolean;\n\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\n        resolve(val as unknown as any);\n      });\n    });\n  }\n\n  /** Excute the resolve/reject handlers. */\n  private _executeHandlers(): void {\n    if (this._state === STATE_PENDING) {\n      return;\n    }\n\n    const cachedHandlers = this._handlers.slice();\n    this._handlers = [];\n\n    cachedHandlers.forEach(handler => {\n      if (handler[0]) {\n        return;\n      }\n\n      if (this._state === STATE_RESOLVED) {\n        handler[1](this._value as unknown as any);\n      }\n\n      if (this._state === STATE_REJECTED) {\n        handler[2](this._value);\n      }\n\n      handler[0] = true;\n    });\n  }\n\n  /** Run the executor for the SyncPromise. */\n  private _runExecutor(executor: Executor<T>): void {\n    const setResult = (state: State, value?: T | PromiseLike<T> | any): void => {\n      if (this._state !== STATE_PENDING) {\n        return;\n      }\n\n      if (isThenable(value)) {\n        void (value as PromiseLike<T>).then(resolve, reject);\n        return;\n      }\n\n      this._state = state;\n      this._value = value;\n\n      this._executeHandlers();\n    };\n\n    const resolve = (value: unknown): void => {\n      setResult(STATE_RESOLVED, value);\n    };\n\n    const reject = (reason: unknown): void => {\n      setResult(STATE_REJECTED, reason);\n    };\n\n    try {\n      executor(resolve, reject);\n    } catch (e) {\n      reject(e);\n    }\n  }\n}\n", "import { DEBUG_BUILD } from './debug-build';\nimport type { Event, EventHint } from './types/event';\nimport type { EventProcessor } from './types/eventprocessor';\nimport { debug } from './utils/debug-logger';\nimport { isThenable } from './utils/is';\nimport { rejectedSyncPromise, resolvedSyncPromise } from './utils/syncpromise';\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nexport function notifyEventProcessors(\n  processors: EventProcessor[],\n  event: Event | null,\n  hint: EventHint,\n  index: number = 0,\n): PromiseLike<Event | null> {\n  try {\n    const result = _notifyEventProcessors(event, hint, processors, index);\n    return isThenable(result) ? result : resolvedSyncPromise(result);\n  } catch (error) {\n    return rejectedSyncPromise(error);\n  }\n}\n\nfunction _notifyEventProcessors(\n  event: Event | null,\n  hint: EventHint,\n  processors: EventProcessor[],\n  index: number,\n): Event | null | PromiseLike<Event | null> {\n  const processor = processors[index];\n\n  if (!event || !processor) {\n    return event;\n  }\n\n  const result = processor({ ...event }, hint);\n\n  DEBUG_BUILD && result === null && debug.log(`Event processor \"${processor.id || '?'}\" dropped event`);\n\n  if (isThenable(result)) {\n    return result.then(final => _notifyEventProcessors(final, hint, processors, index + 1));\n  }\n\n  return _notifyEventProcessors(result, hint, processors, index + 1);\n}\n", "import type { DebugImage } from '../types/debugMeta';\nimport type { StackParser } from '../types/stacktrace';\nimport { normalizeStackTracePath } from './stacktrace';\nimport { GLOBAL_OBJ } from './worldwide';\n\ntype StackString = string;\ntype CachedResult = [string, string];\n\nlet parsedStackResults: Record<StackString, CachedResult> | undefined;\nlet lastSentryKeysCount: number | undefined;\nlet lastNativeKeysCount: number | undefined;\nlet cachedFilenameDebugIds: Record<string, string> | undefined;\n\n/**\n * Clears the cached debug ID mappings.\n * Useful for testing or when the global debug ID state changes.\n */\nexport function clearDebugIdCache(): void {\n  parsedStackResults = undefined;\n  lastSentryKeysCount = undefined;\n  lastNativeKeysCount = undefined;\n  cachedFilenameDebugIds = undefined;\n}\n\n/**\n * Returns a map of filenames to debug identifiers.\n * Supports both proprietary _sentryDebugIds and native _debugIds (e.g., from Vercel) formats.\n */\nexport function getFilenameToDebugIdMap(stackParser: StackParser): Record<string, string> {\n  const sentryDebugIdMap = GLOBAL_OBJ._sentryDebugIds;\n  const nativeDebugIdMap = GLOBAL_OBJ._debugIds;\n\n  if (!sentryDebugIdMap && !nativeDebugIdMap) {\n    return {};\n  }\n\n  const sentryDebugIdKeys = sentryDebugIdMap ? Object.keys(sentryDebugIdMap) : [];\n  const nativeDebugIdKeys = nativeDebugIdMap ? Object.keys(nativeDebugIdMap) : [];\n\n  // If the count of registered globals hasn't changed since the last call, we\n  // can just return the cached result.\n  if (\n    cachedFilenameDebugIds &&\n    sentryDebugIdKeys.length === lastSentryKeysCount &&\n    nativeDebugIdKeys.length === lastNativeKeysCount\n  ) {\n    return cachedFilenameDebugIds;\n  }\n\n  lastSentryKeysCount = sentryDebugIdKeys.length;\n  lastNativeKeysCount = nativeDebugIdKeys.length;\n\n  // Build a map of filename -> debug_id from both sources\n  cachedFilenameDebugIds = {};\n\n  if (!parsedStackResults) {\n    parsedStackResults = {};\n  }\n\n  const processDebugIds = (debugIdKeys: string[], debugIdMap: Record<string, string>): void => {\n    for (const key of debugIdKeys) {\n      const debugId = debugIdMap[key];\n      const result = parsedStackResults?.[key];\n\n      if (result && cachedFilenameDebugIds && debugId) {\n        // Use cached filename but update with current debug ID\n        cachedFilenameDebugIds[result[0]] = debugId;\n        // Update cached result with new debug ID\n        if (parsedStackResults) {\n          parsedStackResults[key] = [result[0], debugId];\n        }\n      } else if (debugId) {\n        const parsedStack = stackParser(key);\n\n        for (let i = parsedStack.length - 1; i >= 0; i--) {\n          const stackFrame = parsedStack[i];\n          const filename = stackFrame?.filename;\n\n          if (filename && cachedFilenameDebugIds && parsedStackResults) {\n            cachedFilenameDebugIds[filename] = debugId;\n            parsedStackResults[key] = [filename, debugId];\n            break;\n          }\n        }\n      }\n    }\n  };\n\n  if (sentryDebugIdMap) {\n    processDebugIds(sentryDebugIdKeys, sentryDebugIdMap);\n  }\n\n  // Native _debugIds will override _sentryDebugIds if same file\n  if (nativeDebugIdMap) {\n    processDebugIds(nativeDebugIdKeys, nativeDebugIdMap);\n  }\n\n  return cachedFilenameDebugIds;\n}\n\n/**\n * Returns a list of debug images for the given resources.\n */\nexport function getDebugImagesForResources(\n  stackParser: StackParser,\n  resource_paths: ReadonlyArray<string>,\n): DebugImage[] {\n  const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n\n  if (!filenameDebugIdMap) {\n    return [];\n  }\n\n  const images: DebugImage[] = [];\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\n  return images;\n}\n", "import type { Event, EventHint } from '../types/event';\n\nexport function isInternalException(hint: EventHint): boolean {\n  return (hint.data as { __sentry__: boolean })?.__sentry__ === true;\n}\n\n/**\n * Get a list of possible event messages from a Sentry event.\n */\nexport function getPossibleEventMessages(event: Event): string[] {\n  const possibleMessages: string[] = [];\n\n  if (event.message) {\n    possibleMessages.push(event.message);\n  }\n\n  try {\n    // @ts-expect-error Try catching to save bundle size\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    // ignore errors here\n  }\n\n  return possibleMessages;\n}\n", "import type { Client } from '../client';\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { notifyEventProcessors } from '../eventProcessors';\nimport type { CaptureContext, ScopeContext } from '../scope';\nimport { Scope } from '../scope';\nimport type { Event, EventHint } from '../types/event';\nimport type { ClientOptions } from '../types/options';\nimport type { StackParser } from '../types/stacktrace';\nimport { getFilenameToDebugIdMap } from './debug-ids';\nimport { isInternalException } from './eventUtils';\nimport { addExceptionMechanism, uuid4 } from './misc';\nimport { normalize } from './normalize';\nimport { applyScopeDataToEvent, getCombinedScopeData } from './scopeData';\nimport { truncate } from './string';\nimport { resolvedSyncPromise } from './syncpromise';\nimport { dateTimestampInSeconds } from './time';\n\n/**\n * This type makes sure that we get either a CaptureContext, OR an EventHint.\n * It does not allow mixing them, which could lead to unexpected outcomes, e.g. this is disallowed:\n * { user: { id: '123' }, mechanism: { handled: false } }\n */\nexport type ExclusiveEventHintOrCaptureContext =\n  | (CaptureContext & Partial<{ [key in keyof EventHint]: never }>)\n  | (EventHint & Partial<{ [key in keyof ScopeContext]: never }>);\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 scope A scope containing event metadata.\n * @returns A new event with more information.\n * @hidden\n */\nexport function prepareEvent(\n  options: ClientOptions,\n  event: Event,\n  hint: EventHint,\n  scope?: Scope,\n  client?: Client,\n  isolationScope?: Scope,\n): PromiseLike<Event | null> {\n  const { normalizeDepth = 3, normalizeMaxBreadth = 1_000 } = options;\n  const prepared: Event = {\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\n  applyClientOptions(prepared, options);\n  applyIntegrationsMetadata(prepared, integrations);\n\n  if (client) {\n    client.emit('applyFrameMetadata', event);\n  }\n\n  // Only put debug IDs onto frames for error events.\n  if (event.type === undefined) {\n    applyDebugIds(prepared, options.stackParser);\n  }\n\n  // If we have scope given to us, use it as the base for further modifications.\n  // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n  const finalScope = getFinalScope(scope, hint.captureContext);\n\n  if (hint.mechanism) {\n    addExceptionMechanism(prepared, hint.mechanism);\n  }\n\n  const clientEventProcessors = client ? client.getEventProcessors() : [];\n\n  // This should be the last thing called, since we want that\n  // {@link Scope.addEventProcessor} gets the finished prepared event.\n  // Merge scope data together\n  const data = getCombinedScopeData(isolationScope, finalScope);\n\n  const attachments = [...(hint.attachments || []), ...data.attachments];\n  if (attachments.length) {\n    hint.attachments = attachments;\n  }\n\n  applyScopeDataToEvent(prepared, data);\n\n  const eventProcessors = [\n    ...clientEventProcessors,\n    // Run scope event processors _after_ all other processors\n    ...data.eventProcessors,\n  ];\n\n  // Skip event processors for internal exceptions to prevent recursion\n  const result: PromiseLike<Event | null> = isInternalException(hint)\n    ? resolvedSyncPromise(prepared)\n    : notifyEventProcessors(eventProcessors, prepared, hint);\n\n  return result.then(evt => {\n    if (evt) {\n      // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n      // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n      // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n      // any new data\n      applyDebugMeta(evt);\n    }\n\n    if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n      return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n    }\n    return evt;\n  });\n}\n\n/**\n * Enhances event using the client configuration.\n * It takes care of all \"static\" values like environment, release and `dist`,\n * as well as truncating overly long values.\n *\n * Only exported for tests.\n *\n * @param event event instance to be enhanced\n */\nexport function applyClientOptions(event: Event, options: ClientOptions): void {\n  const { environment, release, dist, maxValueLength } = options;\n\n  // empty strings do not make sense for environment, release, and dist\n  // so we handle them the same as if they were not provided\n  event.environment = event.environment || environment || DEFAULT_ENVIRONMENT;\n\n  if (!event.release && release) {\n    event.release = release;\n  }\n\n  if (!event.dist && dist) {\n    event.dist = dist;\n  }\n\n  const request = event.request;\n  if (request?.url && maxValueLength) {\n    request.url = truncate(request.url, maxValueLength);\n  }\n\n  if (maxValueLength) {\n    event.exception?.values?.forEach(exception => {\n      if (exception.value) {\n        // Truncates error messages\n        exception.value = truncate(exception.value, maxValueLength);\n      }\n    });\n  }\n}\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nexport function applyDebugIds(event: Event, stackParser: StackParser): void {\n  // Build a map of filename -> debug_id\n  const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n\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}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nexport function applyDebugMeta(event: Event): void {\n  // Extract debug IDs and filenames from the stack frames on the event.\n  const filenameDebugIdMap: Record<string, string> = {};\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\n  if (Object.keys(filenameDebugIdMap).length === 0) {\n    return;\n  }\n\n  // Fill debug_meta information\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}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event: Event, integrationNames: string[]): void {\n  if (integrationNames.length > 0) {\n    event.sdk = event.sdk || {};\n    event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\n  }\n}\n\n/**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\nfunction normalizeEvent(event: Event | null, depth: number, maxBreadth: number): Event | null {\n  if (!event) {\n    return null;\n  }\n\n  const normalized: Event = {\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\n  // event.contexts.trace stores information about a Transaction. Similarly,\n  // event.spans[] stores information about child Spans. Given that a\n  // Transaction is conceptually a Span, normalization should apply to both\n  // Transactions and Spans consistently.\n  // For now the decision is to skip normalization of Transactions and Spans,\n  // so this block overwrites the normalized event to add back the original\n  // Transaction information prior to normalization.\n  if (event.contexts?.trace && normalized.contexts) {\n    normalized.contexts.trace = event.contexts.trace;\n\n    // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n    if (event.contexts.trace.data) {\n      normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n    }\n  }\n\n  // event.spans[].data may contain circular/dangerous data so we need to normalize it\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\n  // event.contexts.flags (FeatureFlagContext) stores context for our feature\n  // flag integrations. It has a greater nesting depth than our other typed\n  // Contexts, so we re-normalize with a fixed depth of 3 here. We do not want\n  // to skip this in case of conflicting, user-provided context.\n  if (event.contexts?.flags && normalized.contexts) {\n    normalized.contexts.flags = normalize(event.contexts.flags, 3, maxBreadth);\n  }\n\n  return normalized;\n}\n\nfunction getFinalScope(scope: Scope | undefined, captureContext: CaptureContext | undefined): Scope | undefined {\n  if (!captureContext) {\n    return scope;\n  }\n\n  const finalScope = scope ? scope.clone() : new Scope();\n  finalScope.update(captureContext);\n  return finalScope;\n}\n\n/**\n * Parse either an `EventHint` directly, or convert a `CaptureContext` to an `EventHint`.\n * This is used to allow to update method signatures that used to accept a `CaptureContext` but should now accept an `EventHint`.\n */\nexport function parseEventHintOrCaptureContext(\n  hint: ExclusiveEventHintOrCaptureContext | undefined,\n): EventHint | undefined {\n  if (!hint) {\n    return undefined;\n  }\n\n  // If you pass a Scope or `() => Scope` as CaptureContext, we just return this as captureContext\n  if (hintIsScopeOrFunction(hint)) {\n    return { captureContext: hint };\n  }\n\n  if (hintIsScopeContext(hint)) {\n    return {\n      captureContext: hint,\n    };\n  }\n\n  return hint;\n}\n\nfunction hintIsScopeOrFunction(hint: CaptureContext | EventHint): hint is Scope | ((scope: Scope) => Scope) {\n  return hint instanceof Scope || typeof hint === 'function';\n}\n\ntype ScopeContextProperty = keyof ScopeContext;\nconst captureContextKeys: readonly ScopeContextProperty[] = [\n  'user',\n  'level',\n  'extra',\n  'contexts',\n  'tags',\n  'fingerprint',\n  'propagationContext',\n] as const;\n\nfunction hintIsScopeContext(hint: Partial<ScopeContext> | EventHint): hint is Partial<ScopeContext> {\n  return Object.keys(hint).some(key => captureContextKeys.includes(key as ScopeContextProperty));\n}\n", "import type { AttributeObject, RawAttribute, RawAttributes } from './attributes';\nimport { getClient, getCurrentScope, getIsolationScope } from './currentScopes';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { CaptureContext } from './scope';\nimport { closeSession, makeSession, updateSession } from './session';\nimport type { Event, EventHint } from './types/event';\nimport type { EventProcessor } from './types/eventprocessor';\nimport type { Extra, Extras } from './types/extra';\nimport type { Primitive } from './types/misc';\nimport type { Session, SessionContext } from './types/session';\nimport type { SeverityLevel } from './types/severity';\nimport type { User } from './types/user';\nimport { debug } from './utils/debug-logger';\nimport type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent';\nimport { getCombinedScopeData } from './utils/scopeData';\nimport { GLOBAL_OBJ } from './utils/worldwide';\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nexport function captureException(exception: unknown, hint?: ExclusiveEventHintOrCaptureContext): string {\n  return getCurrentScope().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nexport function captureMessage(message: string, captureContext?: CaptureContext | SeverityLevel): string {\n  // This is necessary to provide explicit scopes upgrade, without changing the original\n  // arity of the `captureMessage(message, level)` method.\n  const level = typeof captureContext === 'string' ? captureContext : undefined;\n  const hint = typeof captureContext !== 'string' ? { captureContext } : undefined;\n  return getCurrentScope().captureMessage(message, level, hint);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nexport function captureEvent(event: Event, hint?: EventHint): string {\n  return getCurrentScope().captureEvent(event, hint);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\nexport function setContext(name: string, context: { [key: string]: unknown } | null): void {\n  getIsolationScope().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nexport function setExtras(extras: Extras): void {\n  getIsolationScope().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nexport function setExtra(key: string, extra: Extra): void {\n  getIsolationScope().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nexport function setTags(tags: { [key: string]: Primitive }): void {\n  getIsolationScope().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nexport function setTag(key: string, value: Primitive): void {\n  getIsolationScope().setTag(key, value);\n}\n\n/**\n * Sets attributes on the isolation 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 attributes - The attributes to set on the scope, as key-value pairs.\n *\n * @example\n * ```typescript\n * Sentry.setAttributes({\n *   is_admin: true,\n *   payment_selection: 'credit_card',\n *   render_duration: 150,\n * });\n * ```\n */\nexport function setAttributes<T extends Record<string, unknown>>(attributes: RawAttributes<T>): void {\n  getIsolationScope().setAttributes(attributes);\n}\n\n/**\n * Sets an attribute on the isolation 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 * Sentry.setAttribute('is_admin', true);\n * Sentry.setAttribute('render_duration', 150);\n * ```\n */\nexport function setAttribute<\n  // oxlint-disable-next-line typescript-eslint/no-explicit-any\n  T extends RawAttribute<T> extends { value: any } | { unit: any } ? AttributeObject : unknown,\n>(key: string, value: RawAttribute<T>): void {\n  getIsolationScope().setAttribute(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nexport function setUser(user: User | null): void {\n  getIsolationScope().setUser(user);\n}\n\n/**\n * Sets the conversation ID for the current isolation scope.\n *\n * @param conversationId The conversation ID to set. Pass `null` or `undefined` to unset the conversation ID.\n */\nexport function setConversationId(conversationId: string | null | undefined): void {\n  getIsolationScope().setConversationId(conversationId);\n}\n\n/**\n * The last error event id of the isolation scope.\n *\n * Warning: This function really returns the last recorded error event id on the current\n * isolation scope. If you call this function after handling a certain error and another error\n * is captured in between, the last one is returned instead of the one you might expect.\n * Also, ids of events that were never sent to Sentry (for example because\n * they were dropped by sampling or `beforeSend`) could be returned.\n *\n * @returns The last event id of the isolation scope.\n */\nexport function lastEventId(): string | undefined {\n  return getIsolationScope().lastEventId();\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function flush(timeout?: number): Promise<boolean> {\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}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function close(timeout?: number): Promise<boolean> {\n  const client = getClient();\n  if (client) {\n    return client.close(timeout);\n  }\n  DEBUG_BUILD && debug.warn('Cannot flush events and disable SDK. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * Returns true if Sentry has been properly initialized.\n */\nexport function isInitialized(): boolean {\n  return !!getClient();\n}\n\n/** If the SDK is initialized & enabled. */\nexport function isEnabled(): boolean {\n  const client = getClient();\n  return client?.getOptions().enabled !== false && !!client?.getTransport();\n}\n\n/**\n * Add an event processor.\n * This will be added to the current isolation scope, ensuring any event that is processed in the current execution\n * context will have the processor applied.\n */\nexport function addEventProcessor(callback: EventProcessor): void {\n  getIsolationScope().addEventProcessor(callback);\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nexport function startSession(context?: SessionContext): Session {\n  const isolationScope = getIsolationScope();\n\n  const { user } = getCombinedScopeData(isolationScope, getCurrentScope());\n\n  // Will fetch userAgent if called from browser sdk\n  const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n  const session = makeSession({\n    user,\n    ...(userAgent && { userAgent }),\n    ...context,\n  });\n\n  // End existing session if there's one\n  const currentSession = isolationScope.getSession();\n  if (currentSession?.status === 'ok') {\n    updateSession(currentSession, { status: 'exited' });\n  }\n\n  endSession();\n\n  // Afterwards we set the new session on the scope\n  isolationScope.setSession(session);\n\n  return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nexport function endSession(): void {\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n\n  const session = currentScope.getSession() || isolationScope.getSession();\n  if (session) {\n    closeSession(session);\n  }\n  _sendSessionUpdate();\n\n  // the session is over; take it off of the scope\n  isolationScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate(): void {\n  const isolationScope = getIsolationScope();\n  const client = getClient();\n  const session = isolationScope.getSession();\n  if (session && client) {\n    client.captureSession(session);\n  }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n *            Defaults to `false`.\n */\nexport function captureSession(end: boolean = false): void {\n  // both send the update and pull the session from the scope\n  if (end) {\n    endSession();\n    return;\n  }\n\n  // only send the update\n  _sendSessionUpdate();\n}\n", "/**\n * Calls `unref` on a timer, if the method is available on @param timer.\n *\n * `unref()` is used to allow processes to exit immediately, even if the timer\n * is still running and hasn't resolved yet.\n *\n * Use this in places where code can run on browser or server, since browsers\n * do not support `unref`.\n */\nexport function safeUnref(timer: ReturnType<typeof setTimeout>): ReturnType<typeof setTimeout> {\n  if (typeof timer === 'object' && typeof timer.unref === 'function') {\n    timer.unref();\n  }\n  return timer;\n}\n", "import { getMainCarrier } from '../carrier';\nimport type { Scope } from '../scope';\nimport { _setSpanForScope } from '../utils/spanOnScope';\nimport { safeUnref } from '../utils/timer';\nimport { getAsyncContextStrategy } from './index';\nimport type { TracingChannelBinding } from './types';\n\n/**\n * Execute a callback whenever the tracing channel binding is available.\n * If it is not available after retry, the callback is not executed.\n */\nexport function waitForTracingChannelBinding(callback: () => void, retries = 1): void {\n  const binding = getAsyncContextStrategy(getMainCarrier()).getTracingChannelBinding?.();\n\n  if (binding) {\n    callback();\n    return;\n  }\n\n  if (!retries) {\n    return;\n  }\n\n  // It is possible that the binding is not available yet when this is initially called\n  // This happens when users use a custom OTEL setup\n  // In this case, we wait for a tick and try again afterwards\n  // If it still fails, we bail and do nothing\n  // `safeUnref` so this retry timer never keeps the process alive on its own (Node server runtimes).\n  safeUnref(\n    setTimeout(() => {\n      waitForTracingChannelBinding(callback, retries - 1);\n    }, 1),\n  );\n}\n\n/**\n * Build the default {@link TracingChannelBinding} shared by AsyncLocalStorage-based strategies.\n *\n * The ALS instance is supplied by the caller (kept as `unknown`).\n * The binding clones the current scope, plants the span on it, and reuses the existing isolation scope.\n *\n * The OpenTelemetry strategy does not use this: its store value is an OTel context, not a\n * `{ scope, isolationScope }` pair.\n */\nexport function _INTERNAL_createTracingChannelBinding(\n  asyncLocalStorage: NonNullable<unknown>,\n  getScopes: () => { scope: Scope; isolationScope: Scope },\n): TracingChannelBinding {\n  return {\n    asyncLocalStorage,\n    getStoreWithActiveSpan: span => {\n      const { scope, isolationScope } = getScopes();\n      const activeScope = scope.clone();\n      _setSpanForScope(activeScope, span);\n\n      return { scope: activeScope, isolationScope };\n    },\n  };\n}\n", "import type { ReportDialogOptions } from './report-dialog';\nimport type { DsnComponents, DsnLike } from './types/dsn';\nimport type { SdkInfo } from './types/sdkinfo';\nimport { dsnToString, makeDsn } from './utils/dsn';\n\nexport const SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn: DsnComponents): string {\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}\n\n/** Returns the ingest API endpoint for target. */\nfunction _getIngestEndpoint(dsn: DsnComponents): string {\n  return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\n\n/** Returns a URL-encoded string with auth config suitable for a query string. */\nfunction _encodedAuth(dsn: DsnComponents, sdkInfo: SdkInfo | undefined): string {\n  const params: Record<string, string> = {\n    sentry_version: SENTRY_API_VERSION,\n  };\n\n  if (dsn.publicKey) {\n    // We send only the minimum set of required information. See\n    // https://github.com/getsentry/sentry-javascript/issues/2572.\n    params.sentry_key = dsn.publicKey;\n  }\n\n  if (sdkInfo) {\n    params.sentry_client = `${sdkInfo.name}/${sdkInfo.version}`;\n  }\n\n  return new URLSearchParams(params).toString();\n}\n\n/**\n * Returns the envelope endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\nexport function getEnvelopeEndpointWithUrlEncodedAuth(dsn: DsnComponents, tunnel?: string, sdkInfo?: SdkInfo): string {\n  return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\n\n/** Returns the url to the report dialog endpoint. */\nexport function getReportDialogEndpoint(dsnLike: DsnLike, dialogOptions: ReportDialogOptions): string {\n  const dsn = makeDsn(dsnLike);\n  if (!dsn) {\n    return '';\n  }\n\n  const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n  let encodedOptions = `dsn=${dsnToString(dsn)}`;\n  for (const key in dialogOptions) {\n    if (key === 'dsn') {\n      continue;\n    }\n\n    if (key === 'onClose') {\n      continue;\n    }\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] as string)}`;\n    }\n  }\n\n  return `${endpoint}?${encodedOptions}`;\n}\n", "import type { Client } from './client';\nimport { getClient } from './currentScopes';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { Event, EventHint } from './types/event';\nimport type { Integration, IntegrationFn } from './types/integration';\nimport type { CoreOptions } from './types/options';\nimport type { StreamedSpanJSON } from './types/span';\nimport { debug } from './utils/debug-logger';\n\nexport const installedIntegrations: string[] = [];\n\n/** Map of integrations assigned to a client */\nexport type IntegrationIndex = {\n  [key: string]: Integration;\n};\n\ntype IntegrationWithDefaultInstance = Integration & { isDefaultInstance?: true };\n\n/**\n * Remove duplicates from the given array, preferring the last instance of any duplicate. Not guaranteed to\n * preserve the order of integrations in the array.\n *\n * @private\n */\nfunction filterDuplicates(integrations: Integration[]): Integration[] {\n  const integrationsByName: { [key: string]: Integration } = {};\n\n  integrations.forEach((currentInstance: IntegrationWithDefaultInstance) => {\n    const { name } = currentInstance;\n\n    const existingInstance: IntegrationWithDefaultInstance | undefined = integrationsByName[name];\n\n    // We want integrations later in the array to overwrite earlier ones of the same type, except that we never want a\n    // default instance to overwrite an existing user instance\n    if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {\n      return;\n    }\n\n    integrationsByName[name] = currentInstance;\n  });\n\n  return Object.values(integrationsByName);\n}\n\n/** Gets integrations to install */\nexport function getIntegrationsToSetup(\n  options: Pick<CoreOptions, 'defaultIntegrations' | 'integrations'>,\n): Integration[] {\n  const defaultIntegrations = options.defaultIntegrations || [];\n  const userIntegrations = options.integrations;\n\n  // We flag default instances, so that later we can tell them apart from any user-created instances of the same class\n  defaultIntegrations.forEach((integration: IntegrationWithDefaultInstance) => {\n    integration.isDefaultInstance = true;\n  });\n\n  let integrations: Integration[];\n\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\n  return filterDuplicates(integrations);\n}\n\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nexport function setupIntegrations(client: Client, integrations: Integration[]): IntegrationIndex {\n  const integrationIndex: IntegrationIndex = {};\n\n  integrations.forEach((integration: Integration | undefined) => {\n    if (integration?.beforeSetup) {\n      integration.beforeSetup(client);\n    }\n  });\n\n  integrations.forEach((integration: Integration | undefined) => {\n    // guard against empty provided integrations\n    if (integration) {\n      setupIntegration(client, integration, integrationIndex);\n    }\n  });\n\n  return integrationIndex;\n}\n\n/**\n * Execute the `afterAllSetup` hooks of the given integrations.\n */\nexport function afterSetupIntegrations(client: Client, integrations: Integration[]): void {\n  for (const integration of integrations) {\n    // guard against empty provided integrations\n    if (integration?.afterAllSetup) {\n      integration.afterAllSetup(client);\n    }\n  }\n}\n\n/** Setup a single integration.  */\nexport function setupIntegration(client: Client, integration: Integration, integrationIndex: IntegrationIndex): void {\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\n  // `setupOnce` is only called the first time\n  if (!installedIntegrations.includes(integration.name) && typeof integration.setupOnce === 'function') {\n    integration.setupOnce();\n    installedIntegrations.push(integration.name);\n  }\n\n  // `setup` is run for each client\n  if (integration.setup && typeof integration.setup === 'function') {\n    integration.setup(client);\n  }\n\n  if (typeof integration.preprocessEvent === 'function') {\n    const callback = integration.preprocessEvent.bind(integration) as typeof integration.preprocessEvent;\n    client.on('preprocessEvent', (event, hint) => callback(event, hint, client));\n  }\n\n  if (typeof integration.processEvent === 'function') {\n    const callback = integration.processEvent.bind(integration) as typeof integration.processEvent;\n\n    const processor = Object.assign((event: Event, hint: EventHint) => callback(event, hint, client), {\n      id: integration.name,\n    });\n\n    client.addEventProcessor(processor);\n  }\n\n  (['processSpan', 'processSegmentSpan'] as const).forEach(hook => {\n    const callback = integration[hook];\n    if (typeof callback === 'function') {\n      // The cast is needed because TS can't resolve overloads when the discriminant is a union type.\n      // Both overloads have the same callback signature so this is safe.\n      client.on(hook as 'processSpan', (span: StreamedSpanJSON) => callback.call(integration, span, client));\n    }\n  });\n\n  DEBUG_BUILD && debug.log(`Integration installed: ${integration.name}`);\n}\n\n/** Add an integration to the current scope's client. */\nexport function addIntegration(integration: Integration): void {\n  const client = getClient();\n\n  if (!client) {\n    DEBUG_BUILD && debug.warn(`Cannot add integration \"${integration.name}\" because no SDK Client is available.`);\n    return;\n  }\n\n  client.addIntegration(integration);\n}\n\n/**\n * Define an integration function that can be used to create an integration instance.\n * Note that this by design hides the implementation details of the integration, as they are considered internal.\n */\nexport function defineIntegration<Fn extends IntegrationFn>(\n  fn: Fn,\n): (...args: Parameters<Fn>) => Integration & { name: ReturnType<Fn>['name'] } {\n  return fn;\n}\n\n// When  extending an integration, we allow other properties to be passed-through\ntype IntegrationWithOtherProperties = Record<string, unknown> & Integration;\ntype ExtendedIntegration<Base extends Integration, Extended extends Partial<IntegrationWithOtherProperties>> = Omit<\n  Base,\n  keyof Extended\n> &\n  Extended;\n\n/**\n * Wrap a parent integration with an extended integration.\n * Any passed integration function will call the parent integration function first, if it exists.\n *\n * Example usage:\n *\n * @example\n * ```typescript\n * const parentIntegration = defineIntegration(() => ({\n *   name: 'ParentIntegration',\n *   setupOnce: () => {\n *     console.log('ParentIntegration setupOnce');\n *   },\n * }));\n *\n * const extendedIntegration = extendIntegration(parentIntegration, {\n *   setupOnce: () => {\n *     console.log('ExtendedIntegration setupOnce');\n *   },\n * });\n * ```\n */\nexport function extendIntegration<Base extends Integration, Extended extends Partial<IntegrationWithOtherProperties>>(\n  integration: Base,\n  extendedIntegration: Extended,\n): ExtendedIntegration<Base, Extended> {\n  // The extension overrides the base for any shared key (object spread + the wrapping below), so the\n  // result type drops the overridden base keys rather than intersecting them — `Base & Extended` would\n  // wrongly intersect shared keys (e.g. a re-typed property collapses to `never`).\n  const wrappedIntegration = {\n    ...integration,\n    ...extendedIntegration,\n  } as ExtendedIntegration<Base, Extended>;\n\n  // Make sure that functions that are extended also call the base functions, if defined\n  // oxlint-disable-next-line guard-for-in\n  for (const key in extendedIntegration) {\n    const baseValue = integration[key as keyof Base];\n    const extendedValue = extendedIntegration[key];\n\n    type ValueType = typeof extendedValue;\n\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      }) as ValueType;\n\n      // We know this is OK, but typescript does not properly narrow/infer types here\n      // so instead of casting the wrappedFunction to some complicated type, we just make clear that we simply overwrite this\n      (wrappedIntegration as Record<string, unknown>)[key] = wrappedFunction;\n    }\n  }\n\n  return wrappedIntegration;\n}\n", "import type { Client } from '../client';\nimport { getTraceContextFromScope, withScope } from '../currentScopes';\nimport type { Scope } from '../scope';\nimport {\n  getDynamicSamplingContextFromScope,\n  getDynamicSamplingContextFromSpan,\n} from '../tracing/dynamicSamplingContext';\nimport type { TraceContext } from '../types/context';\nimport type { DynamicSamplingContext } from '../types/envelope';\nimport { getActiveSpan, spanToTraceContext } from './spanUtils';\n\n/** Extract trace information from scope */\nexport function _getTraceInfoFromScope(\n  client: Client,\n  scope: Scope | undefined,\n): [dynamicSamplingContext: Partial<DynamicSamplingContext> | undefined, traceContext: TraceContext | undefined] {\n  if (!scope) {\n    return [undefined, undefined];\n  }\n\n  return withScope(scope, () => {\n    const span = getActiveSpan();\n    const traceContext = span ? spanToTraceContext(span) : getTraceContextFromScope(scope);\n    const dynamicSamplingContext = span\n      ? getDynamicSamplingContextFromSpan(span)\n      : getDynamicSamplingContextFromScope(client, scope);\n    return [dynamicSamplingContext, traceContext];\n  });\n}\n", "/*\n * This module exists for optimizations in the build process through rollup and terser.  We define some global\n * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these\n * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will\n * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to\n * `debug` and preventing node-related code from appearing in browser bundles.\n *\n * Attention:\n * This file should not be used to define constants/flags that are intended to be used for tree-shaking conducted by\n * users. These flags should live in their respective packages, as we identified user tooling (specifically webpack)\n * having issues tree-shaking these constants across package boundaries.\n * An example for this is the __SENTRY_DEBUG__ constant. It is declared in each package individually because we want\n * users to be able to shake away expressions that it guards.\n */\n\ndeclare const __SENTRY_BROWSER_BUNDLE__: boolean | undefined;\n\nexport type SdkSource = 'npm' | 'cdn' | 'loader' | 'aws-lambda-layer';\n\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nexport function isBrowserBundle(): boolean {\n  return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n\n/**\n * Get source of SDK.\n */\nexport function getSDKSource(): SdkSource {\n  // The `/*! ... */` marker is replaced by our CDN bundle build step with `return 'cdn';`.\n  // It uses the `/*!` legal-comment syntax specifically so it survives esbuild's transpile\n  // (which strips ordinary `/* ... */` block comments).\n  /*! __SENTRY_SDK_SOURCE__ */ return 'npm';\n}\n", "/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the `debug` singleton, or b) put your function elsewhere.\n */\n\nimport { isBrowserBundle } from './env';\n\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nexport function isNodeEnv(): boolean {\n  // explicitly check for browser bundles as those can be optimized statically\n  // by terser/rollup.\n  return (\n    !isBrowserBundle() &&\n    Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'\n  );\n}\n\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param request The module path to resolve\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction dynamicRequire(mod: any, request: string): any {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return mod.require(request);\n}\n\n/**\n * Helper for dynamically loading module that should work with linked dependencies.\n * The problem is that we _should_ be using `require(require.resolve(moduleName, { paths: [cwd()] }))`\n * However it's _not possible_ to do that with Webpack, as it has to know all the dependencies during\n * build time. `require.resolve` is also not available in any other way, so we cannot create,\n * a fake helper like we do with `dynamicRequire`.\n *\n * We always prefer to use local package, thus the value is not returned early from each `try/catch` block.\n * That is to mimic the behavior of `require.resolve` exactly.\n *\n * @param moduleName module name to require\n * @param existingModule module to use for requiring\n * @returns possibly required module\n */\nexport function loadModule<T>(\n  moduleName: string,\n  // Default parameters are evaluated before the body runs, so a bare `module` would throw a\n  // ReferenceError in ESM before reaching the try/catch below that makes this helper degrade\n  // gracefully. Guard it so the ESM build resolves to `undefined` instead of crashing.\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  existingModule: any = typeof module !== 'undefined' ? module : undefined,\n): T | undefined {\n  let mod: T | undefined;\n\n  try {\n    mod = dynamicRequire(existingModule, moduleName);\n  } catch {\n    // no-empty\n  }\n\n  if (!mod) {\n    try {\n      const { cwd } = dynamicRequire(existingModule, 'process');\n      mod = dynamicRequire(existingModule, `${cwd()}/node_modules/${moduleName}`) as T;\n    } catch {\n      // no-empty\n    }\n  }\n\n  return mod;\n}\n", "import { isNodeEnv } from './node';\nimport { GLOBAL_OBJ } from './worldwide';\n\n/**\n * Returns true if we are in the browser.\n */\nexport function isBrowser(): boolean {\n  // eslint-disable-next-line no-restricted-globals\n  return typeof window !== 'undefined' && (!isNodeEnv() || isElectronNodeRenderer());\n}\n\ntype ElectronProcess = { type?: string };\n\n// Electron renderers with nodeIntegration enabled are detected as Node.js so we specifically test for them\nfunction isElectronNodeRenderer(): boolean {\n  const process = (GLOBAL_OBJ as typeof GLOBAL_OBJ & { process?: ElectronProcess }).process;\n  return process?.type === 'renderer';\n}\n", "import type { DsnComponents } from '../types/dsn';\nimport type { LogContainerItem, LogEnvelope } from '../types/envelope';\nimport type { SerializedLog } from '../types/log';\nimport type { SdkMetadata } from '../types/sdkmetadata';\nimport { dsnToString } from '../utils/dsn';\nimport { createEnvelope } from '../utils/envelope';\nimport { isBrowser } from '../utils/isBrowser';\n\n/**\n * Creates a log container envelope item for a list of logs.\n *\n * @param items - The logs to include in the envelope.\n * @param inferUserData - If true, tells Relay to infer the end-user IP and User-Agent from the incoming request.\n *                        Only emitted as `ingest_settings` in browser environments.\n * @returns The created log container envelope item.\n */\nexport function createLogContainerEnvelopeItem(items: Array<SerializedLog>, inferUserData?: boolean): LogContainerItem {\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}\n\n/**\n * Creates an envelope for a list of logs.\n *\n * Logs from multiple traces can be included in the same envelope.\n *\n * @param logs - The logs to include in the envelope.\n * @param metadata - The metadata to include in the envelope.\n * @param tunnel - The tunnel to include in the envelope.\n * @param dsn - The DSN to include in the envelope.\n * @param inferUserData - If true, tells Relay to infer the end-user IP and User-Agent from the incoming request.\n * @returns The created envelope.\n */\nexport function createLogEnvelope(\n  logs: Array<SerializedLog>,\n  metadata?: SdkMetadata,\n  tunnel?: string,\n  dsn?: DsnComponents,\n  inferUserData?: boolean,\n): LogEnvelope {\n  const headers: LogEnvelope[0] = {};\n\n  if (metadata?.sdk) {\n    headers.sdk = {\n      name: metadata.sdk.name,\n      version: metadata.sdk.version,\n    };\n  }\n\n  if (!!tunnel && !!dsn) {\n    headers.dsn = dsnToString(dsn);\n  }\n\n  return createEnvelope<LogEnvelope>(headers, [createLogContainerEnvelopeItem(logs, inferUserData)]);\n}\n", "import type { Attributes } from '../attributes';\nimport { serializeAttributes } from '../attributes';\nimport { getGlobalSingleton } from '../carrier';\nimport type { Client } from '../client';\nimport { getClient, getCurrentScope, getIsolationScope } from '../currentScopes';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Integration } from '../types/integration';\nimport type { Log, SerializedLog } from '../types/log';\nimport { consoleSandbox, debug } from '../utils/debug-logger';\nimport { isParameterizedString } from '../utils/is';\nimport { getCombinedScopeData } from '../utils/scopeData';\nimport { _getSpanForScope } from '../utils/spanOnScope';\nimport { timestampInSeconds } from '../utils/time';\nimport { getSequenceAttribute } from '../utils/timestampSequence';\nimport { _getTraceInfoFromScope } from '../utils/trace-info';\nimport { SEVERITY_TEXT_TO_SEVERITY_NUMBER } from './constants';\nimport { createLogEnvelope } from './envelope';\n\nconst MAX_LOG_BUFFER_SIZE = 100;\n\n/**\n * Sets a log attribute if the value exists and the attribute key is not already present.\n *\n * @param logAttributes - The log attributes object to modify.\n * @param key - The attribute key to set.\n * @param value - The value to set (only sets if truthy and key not present).\n * @param setEvenIfPresent - Whether to set the attribute if it is present. Defaults to true.\n */\nfunction setLogAttribute(\n  logAttributes: Record<string, unknown>,\n  key: string,\n  value: unknown,\n  setEvenIfPresent = true,\n): void {\n  if (value && (!logAttributes[key] || setEvenIfPresent)) {\n    logAttributes[key] = value;\n  }\n}\n\n/**\n * Captures a serialized log event and adds it to the log buffer for the given client.\n *\n * @param client - A client. Uses the current client if not provided.\n * @param serializedLog - The serialized log event to capture.\n *\n * @experimental This method will experience breaking changes. This is not yet part of\n * the stable Sentry SDK API and can be changed or removed without warning.\n */\nexport function _INTERNAL_captureSerializedLog(client: Client, serializedLog: SerializedLog): void {\n  const bufferMap = _getBufferMap();\n  const logBuffer = _INTERNAL_getLogBuffer(client);\n\n  if (logBuffer === undefined) {\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}\n\n/**\n * Captures a log event and sends it to Sentry.\n *\n * @param log - The log event to capture.\n * @param scope - A scope. Uses the current scope if not provided.\n * @param client - A client. Uses the current client if not provided.\n * @param captureSerializedLog - A function to capture the serialized log.\n *\n * @experimental This method will experience breaking changes. This is not yet part of\n * the stable Sentry SDK API and can be changed or removed without warning.\n */\nexport function _INTERNAL_captureLog(\n  beforeLog: Log,\n  currentScope = getCurrentScope(),\n  captureSerializedLog: (client: Client, log: SerializedLog) => void = _INTERNAL_captureSerializedLog,\n): void {\n  const client = currentScope?.getClient() ?? getClient();\n  if (!client) {\n    DEBUG_BUILD && debug.warn('No client available to capture log.');\n    return;\n  }\n\n  const { release, environment, enableLogs = true, beforeSendLog } = client.getOptions();\n  if (!enableLogs) {\n    DEBUG_BUILD && debug.warn('logging option not enabled, log will not be captured.');\n    return;\n  }\n\n  const [, traceContext] = _getTraceInfoFromScope(client, currentScope);\n\n  const processedLogAttributes = {\n    ...beforeLog.attributes,\n  };\n\n  const {\n    user: { id, email, username },\n    attributes: scopeAttributes = {},\n  } = getCombinedScopeData(getIsolationScope(), currentScope);\n\n  setLogAttribute(processedLogAttributes, 'user.id', id, false);\n  setLogAttribute(processedLogAttributes, 'user.email', email, false);\n  setLogAttribute(processedLogAttributes, 'user.name', username, false);\n\n  setLogAttribute(processedLogAttributes, 'sentry.release', release);\n  setLogAttribute(processedLogAttributes, 'sentry.environment', environment);\n\n  const { name, version } = client.getSdkMetadata()?.sdk ?? {};\n  setLogAttribute(processedLogAttributes, 'sentry.sdk.name', name);\n  setLogAttribute(processedLogAttributes, 'sentry.sdk.version', version);\n\n  const replay = client.getIntegrationByName<\n    Integration & {\n      getReplayId: (onlyIfSampled?: boolean) => string;\n      getRecordingMode: () => 'session' | 'buffer' | undefined;\n    }\n  >('Replay');\n\n  const replayId = replay?.getReplayId(true);\n  setLogAttribute(processedLogAttributes, 'sentry.replay_id', replayId);\n\n  if (replayId && replay?.getRecordingMode() === 'buffer') {\n    // We send this so we can identify cases where the replayId is attached but the replay itself might not have been sent to Sentry\n    setLogAttribute(processedLogAttributes, 'sentry._internal.replay_is_buffering', true);\n  }\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\n  const span = _getSpanForScope(currentScope);\n  // Add the parent span ID to the log attributes for trace context\n  setLogAttribute(processedLogAttributes, 'sentry.trace.parent_span_id', span?.spanContext().spanId);\n\n  const processedLog = { ...beforeLog, attributes: processedLogAttributes };\n\n  client.emit('beforeCaptureLog', processedLog);\n\n  // We need to wrap this in `consoleSandbox` to avoid recursive calls to `beforeSendLog`\n  const log = beforeSendLog ? consoleSandbox(() => beforeSendLog(processedLog)) : processedLog;\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\n  const { level, message, attributes: logAttributes = {}, severityNumber } = log;\n\n  const timestamp = timestampInSeconds();\n  const sequenceAttr = getSequenceAttribute(timestamp);\n\n  const serializedLog: 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\n  captureSerializedLog(client, serializedLog);\n\n  client.emit('afterCaptureLog', log);\n}\n\n/**\n * Flushes the logs buffer to Sentry.\n *\n * @param client - A client.\n * @param maybeLogBuffer - A log buffer. Uses the log buffer for the given client if not provided.\n *\n * @experimental This method will experience breaking changes. This is not yet part of\n * the stable Sentry SDK API and can be changed or removed without warning.\n */\nexport function _INTERNAL_flushLogsBuffer(client: Client, maybeLogBuffer?: Array<SerializedLog>): void {\n  const logBuffer = maybeLogBuffer ?? _INTERNAL_getLogBuffer(client) ?? [];\n  if (logBuffer.length === 0) {\n    return;\n  }\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\n  // Clear the log buffer after envelopes have been constructed.\n  _getBufferMap().set(client, []);\n\n  client.emit('flushLogs');\n\n  // sendEnvelope should not throw\n  // eslint-disable-next-line @typescript-eslint/no-floating-promises\n  client.sendEnvelope(envelope);\n}\n\n/**\n * Returns the log buffer for a given client.\n *\n * Exported for testing purposes.\n *\n * @param client - The client to get the log buffer for.\n * @returns The log buffer for the given client.\n */\nexport function _INTERNAL_getLogBuffer(client: Client): Array<SerializedLog> | undefined {\n  return _getBufferMap().get(client);\n}\n\nfunction _getBufferMap(): WeakMap<Client, Array<SerializedLog>> {\n  // The reference to the Client <> LogBuffer map is stored on the carrier to ensure it's always the same\n  return getGlobalSingleton('clientToLogBufferMap', () => new WeakMap<Client, Array<SerializedLog>>());\n}\n\n/**\n * Sanitizes serialized log attributes by replacing lone surrogates in both\n * keys and string values with U+FFFD.\n */\nfunction sanitizeLogAttributes(attributes: Attributes): Attributes {\n  const sanitized: Attributes = {};\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}\n\n/**\n * Replaces unpaired UTF-16 surrogates with U+FFFD (replacement character).\n *\n * Lone surrogates (U+D800–U+DFFF not part of a valid pair) cause `serde_json`\n * on the server to reject the entire log batch when they appear in\n * JSON-escaped form (e.g. `\\uD800`). Replacing them at the SDK level ensures\n * only the offending characters are lost instead of the whole payload.\n *\n * Uses the native `String.prototype.toWellFormed()` when available\n * (Node 20+, Chrome 111+, Safari 15.4+, Firefox 119+, Hermes).\n * On older runtimes without native support, returns the string as-is.\n *\n * Exported for testing\n */\nexport function _removeLoneSurrogates(str: string): string {\n  // isWellFormed/toWellFormed are ES2024 (not in our TS lib target), so we feature-detect via Object().\n  const strObj: Record<string, Function> = 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", "import type { DsnComponents } from '../types/dsn';\nimport type { MetricContainerItem, MetricEnvelope } from '../types/envelope';\nimport type { SerializedMetric } from '../types/metric';\nimport type { SdkMetadata } from '../types/sdkmetadata';\nimport { dsnToString } from '../utils/dsn';\nimport { createEnvelope } from '../utils/envelope';\nimport { isBrowser } from '../utils/isBrowser';\n\n/**\n * Creates a metric container envelope item for a list of metrics.\n *\n * @param items - The metrics to include in the envelope.\n * @param inferUserData - If true, tells Relay to infer the end-user IP and User-Agent from the incoming request.\n *                        Only emitted as `ingest_settings` in browser environments.\n * @returns The created metric container envelope item.\n */\nexport function createMetricContainerEnvelopeItem(\n  items: Array<SerializedMetric>,\n  inferUserData?: boolean,\n): MetricContainerItem {\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    } as MetricContainerItem[0],\n    {\n      version: 2,\n      ...(isBrowser() && {\n        ingest_settings: { infer_ip: inferSetting, infer_user_agent: inferSetting },\n      }),\n      items,\n    },\n  ];\n}\n\n/**\n * Creates an envelope for a list of metrics.\n *\n * Metrics from multiple traces can be included in the same envelope.\n *\n * @param metrics - The metrics to include in the envelope.\n * @param metadata - The metadata to include in the envelope.\n * @param tunnel - The tunnel to include in the envelope.\n * @param dsn - The DSN to include in the envelope.\n * @param inferUserData - If true, tells Relay to infer the end-user IP and User-Agent from the incoming request.\n * @returns The created envelope.\n */\nexport function createMetricEnvelope(\n  metrics: Array<SerializedMetric>,\n  metadata?: SdkMetadata,\n  tunnel?: string,\n  dsn?: DsnComponents,\n  inferUserData?: boolean,\n): MetricEnvelope {\n  const headers: MetricEnvelope[0] = {};\n\n  if (metadata?.sdk) {\n    headers.sdk = {\n      name: metadata.sdk.name,\n      version: metadata.sdk.version,\n    };\n  }\n\n  if (!!tunnel && !!dsn) {\n    headers.dsn = dsnToString(dsn);\n  }\n\n  return createEnvelope<MetricEnvelope>(headers, [createMetricContainerEnvelopeItem(metrics, inferUserData)]);\n}\n", "import { type RawAttributes, serializeAttributes } from '../attributes';\nimport { getGlobalSingleton } from '../carrier';\nimport type { Client } from '../client';\nimport { getClient, getCurrentScope, getIsolationScope } from '../currentScopes';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Scope } from '../scope';\nimport type { Integration } from '../types/integration';\nimport type { Metric, SerializedMetric } from '../types/metric';\nimport type { User } from '../types/user';\nimport { debug } from '../utils/debug-logger';\nimport { getCombinedScopeData } from '../utils/scopeData';\nimport { _getSpanForScope } from '../utils/spanOnScope';\nimport { timestampInSeconds } from '../utils/time';\nimport { getSequenceAttribute } from '../utils/timestampSequence';\nimport { _getTraceInfoFromScope } from '../utils/trace-info';\nimport { createMetricEnvelope } from './envelope';\n\nconst MAX_METRIC_BUFFER_SIZE = 1000;\n\n/**\n * Sets a metric attribute if the value exists and the attribute key is not already present.\n *\n * @param metricAttributes - The metric attributes object to modify.\n * @param key - The attribute key to set.\n * @param value - The value to set (only sets if truthy and key not present).\n * @param setEvenIfPresent - Whether to set the attribute if it is present. Defaults to true.\n */\nfunction setMetricAttribute(\n  metricAttributes: Record<string, unknown>,\n  key: string,\n  value: unknown,\n  setEvenIfPresent = true,\n): void {\n  if (value && (setEvenIfPresent || !(key in metricAttributes))) {\n    metricAttributes[key] = value;\n  }\n}\n\n/**\n * Captures a serialized metric event and adds it to the metric buffer for the given client.\n *\n * @param client - A client. Uses the current client if not provided.\n * @param serializedMetric - The serialized metric event to capture.\n *\n * @experimental This method will experience breaking changes. This is not yet part of\n * the stable Sentry SDK API and can be changed or removed without warning.\n */\nexport function _INTERNAL_captureSerializedMetric(client: Client, serializedMetric: SerializedMetric): void {\n  const bufferMap = _getBufferMap();\n  const metricBuffer = _INTERNAL_getMetricBuffer(client);\n\n  if (metricBuffer === undefined) {\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}\n\n/**\n * Options for capturing a metric internally.\n */\nexport interface InternalCaptureMetricOptions {\n  /**\n   * The scope to capture the metric with.\n   */\n  scope?: Scope;\n\n  /**\n   * A function to capture the serialized metric.\n   */\n  captureSerializedMetric?: (client: Client, metric: SerializedMetric) => void;\n}\n\n/**\n * Enriches metric with all contextual attributes (user, SDK metadata, replay, etc.)\n */\nfunction _enrichMetricAttributes(beforeMetric: Metric, client: Client, user: User): Metric {\n  const { release, environment } = client.getOptions();\n\n  const processedMetricAttributes = {\n    ...beforeMetric.attributes,\n  };\n\n  // Add user attributes\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\n  // Add Sentry metadata\n  setMetricAttribute(processedMetricAttributes, 'sentry.release', release);\n  setMetricAttribute(processedMetricAttributes, 'sentry.environment', environment);\n\n  // Add SDK metadata\n  const { name, version } = client.getSdkMetadata()?.sdk ?? {};\n  setMetricAttribute(processedMetricAttributes, 'sentry.sdk.name', name);\n  setMetricAttribute(processedMetricAttributes, 'sentry.sdk.version', version);\n\n  // Add replay metadata\n  const replay = client.getIntegrationByName<\n    Integration & {\n      getReplayId: (onlyIfSampled?: boolean) => string;\n      getRecordingMode: () => 'session' | 'buffer' | undefined;\n    }\n  >('Replay');\n\n  const replayId = replay?.getReplayId(true);\n  setMetricAttribute(processedMetricAttributes, 'sentry.replay_id', replayId);\n\n  if (replayId && replay?.getRecordingMode() === 'buffer') {\n    setMetricAttribute(processedMetricAttributes, 'sentry._internal.replay_is_buffering', true);\n  }\n\n  return {\n    ...beforeMetric,\n    attributes: processedMetricAttributes,\n  };\n}\n\n/**\n * Creates a serialized metric ready to be sent to Sentry.\n */\nfunction _buildSerializedMetric(\n  metric: Metric,\n  client: Client,\n  currentScope: Scope,\n  scopeAttributes: RawAttributes<Record<string, unknown>> | undefined,\n): SerializedMetric {\n  // Get trace context\n  const [, traceContext] = _getTraceInfoFromScope(client, currentScope);\n  const span = _getSpanForScope(currentScope);\n  const traceId = span ? span.spanContext().traceId : traceContext?.trace_id;\n  const spanId = span ? span.spanContext().spanId : undefined;\n\n  const timestamp = timestampInSeconds();\n  const sequenceAttr = getSequenceAttribute(timestamp);\n\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}\n\n/**\n * Captures a metric event and sends it to Sentry.\n *\n * @param metric - The metric event to capture.\n * @param options - Options for capturing the metric.\n *\n * @experimental This method will experience breaking changes. This is not yet part of\n * the stable Sentry SDK API and can be changed or removed without warning.\n */\nexport function _INTERNAL_captureMetric(beforeMetric: Metric, options?: InternalCaptureMetricOptions): void {\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\n  const { _experiments, enableMetrics, beforeSendMetric } = client.getOptions();\n\n  // todo(v11): Remove the experimental flag\n  // eslint-disable-next-line typescript/no-deprecated\n  const metricsEnabled = enableMetrics ?? _experiments?.enableMetrics ?? true;\n\n  if (!metricsEnabled) {\n    DEBUG_BUILD && debug.warn('metrics option not enabled, metric will not be captured.');\n    return;\n  }\n\n  // Enrich metric with contextual attributes\n  const { user, attributes: scopeAttributes } = getCombinedScopeData(getIsolationScope(), currentScope);\n  const enrichedMetric = _enrichMetricAttributes(beforeMetric, client, user);\n\n  client.emit('processMetric', enrichedMetric);\n\n  // todo(v11): Remove the experimental `beforeSendMetric`\n  // eslint-disable-next-line typescript/no-deprecated\n  const beforeSendCallback = beforeSendMetric || _experiments?.beforeSendMetric;\n  const processedMetric = beforeSendCallback ? beforeSendCallback(enrichedMetric) : enrichedMetric;\n\n  if (!processedMetric) {\n    DEBUG_BUILD && debug.log('`beforeSendMetric` returned `null`, will not send metric.');\n    return;\n  }\n\n  const serializedMetric = _buildSerializedMetric(processedMetric, client, currentScope, scopeAttributes);\n\n  DEBUG_BUILD && debug.log('[Metric]', serializedMetric);\n\n  captureSerializedMetric(client, serializedMetric);\n\n  client.emit('afterCaptureMetric', processedMetric);\n}\n\n/**\n * Flushes the metrics buffer to Sentry.\n *\n * @param client - A client.\n * @param maybeMetricBuffer - A metric buffer. Uses the metric buffer for the given client if not provided.\n *\n * @experimental This method will experience breaking changes. This is not yet part of\n * the stable Sentry SDK API and can be changed or removed without warning.\n */\nexport function _INTERNAL_flushMetricsBuffer(client: Client, maybeMetricBuffer?: Array<SerializedMetric>): void {\n  const metricBuffer = maybeMetricBuffer ?? _INTERNAL_getMetricBuffer(client) ?? [];\n  if (metricBuffer.length === 0) {\n    return;\n  }\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\n  // Clear the metric buffer after envelopes have been constructed.\n  _getBufferMap().set(client, []);\n\n  client.emit('flushMetrics');\n\n  // sendEnvelope should not throw\n  // eslint-disable-next-line @typescript-eslint/no-floating-promises\n  client.sendEnvelope(envelope);\n}\n\n/**\n * Returns the metric buffer for a given client.\n *\n * Exported for testing purposes.\n *\n * @param client - The client to get the metric buffer for.\n * @returns The metric buffer for the given client.\n */\nexport function _INTERNAL_getMetricBuffer(client: Client): Array<SerializedMetric> | undefined {\n  return _getBufferMap().get(client);\n}\n\nfunction _getBufferMap(): WeakMap<Client, Array<SerializedMetric>> {\n  // The reference to the Client <> MetricBuffer map is stored on the carrier to ensure it's always the same\n  return getGlobalSingleton('clientToMetricBufferMap', () => new WeakMap<Client, Array<SerializedMetric>>());\n}\n", "import type { RawAttributes } from '../../attributes';\nimport type { SerializedStreamedSpan, SpanJSON, StreamedSpanJSON } from '../../types/span';\nimport { streamedSpanJsonToSerializedSpan } from '../../utils/spanUtils';\n\n/**\n * Converts a v1 SpanJSON (from a legacy transaction) to a serialized v2 StreamedSpan.\n */\nexport function spanJsonToSerializedStreamedSpan(span: SpanJSON): SerializedStreamedSpan {\n  const streamedSpan: StreamedSpanJSON = {\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 || span.start_timestamp,\n    status: !span.status || span.status === 'ok' || span.status === 'cancelled' ? 'ok' : 'error',\n    is_segment: false,\n    attributes: { ...(span.data as RawAttributes<Record<string, unknown>>) },\n    links: span.links,\n  };\n\n  return streamedSpanJsonToSerializedSpan(streamedSpan);\n}\n", "import type { Client } from '../../client';\nimport type { SpanContainerItem } from '../../types/envelope';\nimport type { Event } from '../../types/event';\nimport { isBrowser } from '../../utils/isBrowser';\nimport { hasSpanStreamingEnabled } from './hasSpanStreamingEnabled';\nimport { spanJsonToSerializedStreamedSpan } from './spanJsonToStreamedSpan';\n\n/**\n * Extracts gen_ai spans from a transaction event, converts them to span v2 format,\n * and returns them as a SpanContainerItem.\n *\n * Only applies to static mode (non-streaming) transactions.\n *\n * WARNING: This function mutates `event.spans` by removing the extracted gen_ai spans\n * from the array. Call this before creating the event envelope so the transaction\n * item does not include the extracted spans.\n */\nexport function extractGenAiSpansFromEvent(event: Event, client: Client): SpanContainerItem | undefined {\n  if (\n    event.type !== 'transaction' ||\n    !event.spans?.length ||\n    !event.sdkProcessingMetadata?.hasGenAiSpans ||\n    client.getOptions().streamGenAiSpans === false ||\n    hasSpanStreamingEnabled(client)\n  ) {\n    return undefined;\n  }\n\n  const genAiSpans = [];\n  const remainingSpans = [];\n\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\n  if (genAiSpans.length === 0) {\n    return undefined;\n  }\n\n  event.spans = remainingSpans;\n\n  const inferSetting = client.getDataCollectionOptions().userInfo ? 'auto' : 'never';\n\n  return [\n    { type: 'span', item_count: genAiSpans.length, content_type: 'application/vnd.sentry.items.span.v2+json' },\n    {\n      version: 2,\n      ...(isBrowser() && {\n        ingest_settings: { infer_ip: inferSetting, infer_user_agent: inferSetting },\n      }),\n      items: genAiSpans,\n    },\n  ];\n}\n", "import { rejectedSyncPromise, resolvedSyncPromise } from './syncpromise';\nimport { safeUnref } from './timer';\n\nexport interface PromiseBuffer<T> {\n  // exposes the internal array so tests can assert on the state of it.\n  // XXX: this really should not be public api.\n  $: PromiseLike<T>[];\n  add(taskProducer: () => PromiseLike<T>): PromiseLike<T>;\n  drain(timeout?: number): PromiseLike<boolean>;\n}\n\nexport const SENTRY_BUFFER_FULL_ERROR = Symbol.for('SentryBufferFullError');\n\n/**\n * Creates an new PromiseBuffer object with the specified limit\n * @param limit max number of promises that can be stored in the buffer\n */\nexport function makePromiseBuffer<T>(limit: number = 100): PromiseBuffer<T> {\n  const buffer: Set<PromiseLike<T>> = new Set();\n\n  function isReady(): boolean {\n    return buffer.size < limit;\n  }\n\n  /**\n   * Remove a promise from the queue.\n   *\n   * @param task Can be any PromiseLike<T>\n   * @returns Removed promise.\n   */\n  function remove(task: PromiseLike<T>): void {\n    buffer.delete(task);\n  }\n\n  /**\n   * Add a promise (representing an in-flight action) to the queue, and set it to remove itself on fulfillment.\n   *\n   * @param taskProducer A function producing any PromiseLike<T>; In previous versions this used to be `task:\n   *        PromiseLike<T>`, but under that model, Promises were instantly created on the call-site and their executor\n   *        functions therefore ran immediately. Thus, even if the buffer was full, the action still happened. By\n   *        requiring the promise to be wrapped in a function, we can defer promise creation until after the buffer\n   *        limit check.\n   * @returns The original promise.\n   */\n  function add(taskProducer: () => PromiseLike<T>): PromiseLike<T> {\n    if (!isReady()) {\n      return rejectedSyncPromise(SENTRY_BUFFER_FULL_ERROR);\n    }\n\n    // start the task and add its promise to the queue\n    const task = taskProducer();\n    buffer.add(task);\n    void task.then(\n      () => remove(task),\n      () => remove(task),\n    );\n    return task;\n  }\n\n  /**\n   * Wait for all promises in the queue to resolve or for timeout to expire, whichever comes first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the queue is still non-empty. Passing `0` (or\n   * not passing anything) will make the promise wait as long as it takes for the queue to drain before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if the queue is already empty or drains before the timeout, and\n   * `false` otherwise\n   */\n  function drain(timeout?: number): PromiseLike<boolean> {\n    if (!buffer.size) {\n      return resolvedSyncPromise(true);\n    }\n\n    // We want to resolve even if one of the promises rejects\n    const drainPromise = Promise.allSettled(Array.from(buffer)).then(() => true);\n\n    if (!timeout) {\n      return drainPromise;\n    }\n\n    const promises = [\n      drainPromise,\n      new Promise<boolean>(resolve => safeUnref(setTimeout(() => resolve(false), timeout))),\n    ];\n\n    return Promise.race(promises);\n  }\n\n  return {\n    get $(): PromiseLike<T>[] {\n      return Array.from(buffer);\n    },\n    add,\n    drain,\n  };\n}\n", "import type { DataCategory } from '../types/datacategory';\nimport type { TransportMakeRequestResponse } from '../types/transport';\nimport { safeDateNow } from './randomSafeContext';\n\n// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend\nexport type RateLimits = Record<string, number>;\n\nexport const DEFAULT_RETRY_AFTER = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param header string representation of 'Retry-After' header\n * @param now current unix timestamp\n *\n */\nexport function parseRetryAfterHeader(header: string, now: number = safeDateNow()): number {\n  const headerDelay = parseInt(`${header}`, 10);\n  if (!isNaN(headerDelay)) {\n    return headerDelay * 1000;\n  }\n\n  const headerDate = Date.parse(`${header}`);\n  if (!isNaN(headerDate)) {\n    return headerDate - now;\n  }\n\n  return DEFAULT_RETRY_AFTER;\n}\n\n/**\n * Gets the time that the given category is disabled until for rate limiting.\n * In case no category-specific limit is set but a general rate limit across all categories is active,\n * that time is returned.\n *\n * @return the time in ms that the category is disabled until or 0 if there's no active rate limit.\n */\nexport function disabledUntil(limits: RateLimits, dataCategory: DataCategory): number {\n  return limits[dataCategory] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nexport function isRateLimited(limits: RateLimits, dataCategory: DataCategory, now: number = safeDateNow()): boolean {\n  return disabledUntil(limits, dataCategory) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n *\n * @return the updated RateLimits object.\n */\nexport function updateRateLimits(\n  limits: RateLimits,\n  { statusCode, headers }: TransportMakeRequestResponse,\n  now: number = safeDateNow(),\n): RateLimits {\n  const updatedRateLimits: RateLimits = {\n    ...limits,\n  };\n\n  // \"The name is case-insensitive.\"\n  // https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n  const rateLimitHeader = headers?.['x-sentry-rate-limits'];\n  const retryAfterHeader = headers?.['retry-after'];\n\n  if (rateLimitHeader) {\n    /**\n     * rate limit headers are of the form\n     *     <header>,<header>,..\n     * where each <header> is of the form\n     *     <retry_after>: <categories>: <scope>: <reason_code>: <namespaces>\n     * where\n     *     <retry_after> is a delay in seconds\n     *     <categories> is the event type(s) (error, transaction, etc) being rate limited and is of the form\n     *         <category>;<category>;...\n     *     <scope> is what's being limited (org, project, or key) - ignored by SDK\n     *     <reason_code> is an arbitrary string like \"org_quota\" - ignored by SDK\n     *     <namespaces> Semicolon-separated list of metric namespace identifiers. Defines which namespace(s) will be affected.\n     *         Only present if rate limit applies to the metric_bucket data category.\n     */\n    for (const limit of rateLimitHeader.trim().split(',')) {\n      const [retryAfter, categories, , , namespaces] = limit.split(':', 5) as [string, ...string[]];\n      const headerDelay = parseInt(retryAfter, 10);\n      const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n      if (!categories) {\n        updatedRateLimits.all = now + delay;\n      } else {\n        for (const category of categories.split(';')) {\n          if (category === 'metric_bucket') {\n            // namespaces will be present when 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 * 1000;\n  }\n\n  return updatedRateLimits;\n}\n", "import { DEBUG_BUILD } from '../debug-build';\nimport type { EventDropReason } from '../types/clientreport';\nimport type { Envelope, EnvelopeItem } from '../types/envelope';\nimport type {\n  InternalBaseTransportOptions,\n  Transport,\n  TransportMakeRequestResponse,\n  TransportRequestExecutor,\n} from '../types/transport';\nimport { debug } from '../utils/debug-logger';\nimport {\n  createEnvelope,\n  envelopeContainsItemType,\n  envelopeItemTypeToDataCategory,\n  forEachEnvelopeItem,\n  serializeEnvelope,\n} from '../utils/envelope';\nimport { makePromiseBuffer, type PromiseBuffer, SENTRY_BUFFER_FULL_ERROR } from '../utils/promisebuffer';\nimport { isRateLimited, type RateLimits, updateRateLimits } from '../utils/ratelimit';\n\nexport const DEFAULT_TRANSPORT_BUFFER_SIZE = 64;\n\n/**\n * Creates an instance of a Sentry `Transport`\n *\n * @param options\n * @param makeRequest\n */\nexport function createTransport(\n  options: InternalBaseTransportOptions,\n  makeRequest: TransportRequestExecutor,\n  buffer: PromiseBuffer<TransportMakeRequestResponse> = makePromiseBuffer(\n    options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,\n  ),\n): Transport {\n  let rateLimits: RateLimits = {};\n  const flush = (timeout?: number): PromiseLike<boolean> => buffer.drain(timeout);\n\n  function send(envelope: Envelope): PromiseLike<TransportMakeRequestResponse> {\n    const filteredEnvelopeItems: EnvelopeItem[] = [];\n\n    // Drop rate limited items from envelope\n    forEachEnvelopeItem(envelope, (item, type) => {\n      const dataCategory = envelopeItemTypeToDataCategory(type);\n      if (isRateLimited(rateLimits, dataCategory)) {\n        options.recordDroppedEvent('ratelimit_backoff', dataCategory);\n      } else {\n        filteredEnvelopeItems.push(item);\n      }\n    });\n\n    // Skip sending if envelope is empty after filtering out rate limited events\n    if (filteredEnvelopeItems.length === 0) {\n      return Promise.resolve({});\n    }\n\n    const filteredEnvelope: Envelope = createEnvelope(envelope[0], filteredEnvelopeItems as (typeof envelope)[1]);\n\n    // Creates client report for each item in an envelope\n    const recordEnvelopeLoss = (reason: EventDropReason): void => {\n      // Don't record outcomes for client reports - we don't want to create a feedback loop if client reports themselves fail to send\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        options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type));\n      });\n    };\n\n    const requestTask = (): PromiseLike<TransportMakeRequestResponse> =>\n      makeRequest({ body: serializeEnvelope(filteredEnvelope) }).then(\n        response => {\n          // Handle 413 Content Too Large\n          // Loss of envelope content is expected so we record a send_error client report\n          // https://develop.sentry.dev/sdk/expected-features/#dealing-with-network-failures\n          if (response.statusCode === 413) {\n            DEBUG_BUILD &&\n              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\n          // We don't want to throw on NOK responses, but we want to at least log them\n          if (\n            DEBUG_BUILD &&\n            response.statusCode !== undefined &&\n            (response.statusCode < 200 || response.statusCode >= 300)\n          ) {\n            debug.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n          }\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\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\n  return {\n    send,\n    flush,\n  };\n}\n", "import type { ClientReport } from '../types/clientreport';\nimport type { ClientReportEnvelope, ClientReportItem } from '../types/envelope';\nimport { createEnvelope } from './envelope';\nimport { dateTimestampInSeconds } from './time';\n\n/**\n * Creates client report envelope\n * @param discarded_events An array of discard events\n * @param dsn A DSN that can be set on the header. Optional.\n */\nexport function createClientReportEnvelope(\n  discarded_events: ClientReport['discarded_events'],\n  dsn?: string,\n  timestamp?: number,\n): ClientReportEnvelope {\n  const clientReportItem: ClientReportItem = [\n    { type: 'client_report' },\n    {\n      timestamp: timestamp || dateTimestampInSeconds(),\n      discarded_events,\n    },\n  ];\n  return createEnvelope<ClientReportEnvelope>(dsn ? { dsn } : {}, [clientReportItem]);\n}\n", "import { SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_PROFILE_ID } from '../semanticAttributes';\nimport type { TransactionEvent } from '../types/event';\nimport type { SpanJSON } from '../types/span';\n\n/**\n * Converts a transaction event to a span JSON object.\n */\nexport function convertTransactionEventToSpanJson(event: TransactionEvent): SpanJSON {\n  const { trace_id, parent_span_id, span_id, status, origin, data, op } = event.contexts?.trace ?? {};\n\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,\n    timestamp: event.timestamp,\n    trace_id: trace_id ?? '',\n    origin,\n    profile_id: data?.[SEMANTIC_ATTRIBUTE_PROFILE_ID] as string | undefined,\n    exclusive_time: data?.[SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME] as number | undefined,\n    measurements: event.measurements,\n    is_segment: true,\n  };\n}\n\n/**\n * Converts a span JSON object to a transaction event.\n */\nexport function convertSpanJsonToTransactionEvent(span: SpanJSON): TransactionEvent {\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 && { [SEMANTIC_ATTRIBUTE_PROFILE_ID]: span.profile_id }),\n          ...(span.exclusive_time && { [SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: span.exclusive_time }),\n        },\n      },\n    },\n    measurements: span.measurements,\n  };\n}\n", "export const FILTERED_VALUE = '[Filtered]';\n\nexport const PII_HEADER_SNIPPETS = ['forwarded', '-ip', 'remote-', 'via', '-user'];\n\nexport const SENSITIVE_KEY_SNIPPETS = [\n  'auth',\n  'token',\n  'secret',\n  'session', // 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];\n\n/**\n * Extra substrings matched only against individual Cookie / Set-Cookie **names** (not header names),\n * so we can cover common session secrets that do not match {@link SENSITIVE_KEY_SNIPPETS}\n * (e.g. `connect.sid` does not contain `session`) without false positives on arbitrary HTTP headers.\n *\n * Cookie names are checked with the same `includes()` list as headers plus these entries; omit redundant\n * cookie-only snippets that are already implied by a header match (e.g. `oauth` → `auth`, `id_token` → `token`,\n * `next-auth` → `auth`).\n */\nexport const 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", "import { PII_HEADER_SNIPPETS } from './filtering-snippets';\nimport type { ResolvedDataCollection } from '../../types/datacollection';\n\n/**\n * Helper function that maps the `sendDefaultPii` boolean flag to the corresponding `DataCollection` configuration.\n * Used as a backward-compatibility bridge when `dataCollection` is not set by the user.\n *\n * TODO(v11): Remove this function along with `sendDefaultPii`. Once `dataCollection` is the only API,\n * the DEFAULTS in `resolveDataCollectionOptions` (including `userInfo: true`) will always apply.\n */\nexport function defaultPiiToCollectionOptions(sendDefaultPii?: boolean): ResolvedDataCollection {\n  return sendDefaultPii === true\n    ? {\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        stackFrameVariables: true,\n        frameContextLines: 7, // default should be 5, but ContextLines integration uses 7\n      }\n    : {\n        userInfo: false,\n        cookies: { deny: PII_HEADER_SNIPPETS },\n        httpHeaders: { request: { deny: PII_HEADER_SNIPPETS }, response: { deny: PII_HEADER_SNIPPETS } },\n        httpBodies: [],\n        urlQueryParams: { deny: PII_HEADER_SNIPPETS },\n        // The GraphQL document has literal values redacted at collection time, so it was historically\n        // always attached regardless of `sendDefaultPii`; keep it on to preserve that behavior.\n        graphQL: { document: true, variables: true },\n        genAI: { inputs: false, outputs: false },\n        // Database query values were only sent with `sendDefaultPii: true` (e.g. Supabase gated on it),\n        // so map the legacy \"off\" state to `false`.\n        databaseQueryData: false,\n        stackFrameVariables: true,\n        frameContextLines: 7, // default should be 5, but ContextLines integration uses 7\n      };\n}\n", "import type {\n  CollectBehavior,\n  DataCollection,\n  HttpHeadersCollection,\n  ResolvedDataCollection,\n} from '../../types/datacollection';\nimport { defaultPiiToCollectionOptions } from './defaultPiiToCollectionOptions';\n\nconst DEFAULTS: ResolvedDataCollection = {\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  stackFrameVariables: true,\n  frameContextLines: 5,\n};\n\nfunction isCollectBehavior(value: CollectBehavior | HttpHeadersCollection): value is CollectBehavior {\n  return typeof value === 'boolean' || 'allow' in value || 'deny' in value;\n}\n\nfunction resolveHttpHeaders(\n  httpHeaders: DataCollection['httpHeaders'],\n  base: ResolvedDataCollection,\n): ResolvedDataCollection['httpHeaders'] {\n  if (httpHeaders === undefined) {\n    return { ...base.httpHeaders };\n  }\n\n  if (isCollectBehavior(httpHeaders)) {\n    return { request: httpHeaders, response: httpHeaders };\n  }\n\n  return {\n    request: httpHeaders.request ?? base.httpHeaders.request,\n    response: httpHeaders.response ?? base.httpHeaders.response,\n  };\n}\n\n/**\n * Resolves the effective `DataCollection` configuration from client options.\n *\n * Precedence:\n * 1. Fields explicitly set in `dataCollection`\n * 2. If `sendDefaultPii` is set and `dataCollection` is absent, bridge via `defaultPiiToCollectionOptions`\n * 3. Spec defaults\n *\n * TODO(v11): Remove `sendDefaultPii` support and always fall through to DEFAULTS so that `userInfo: true`\n * NOTE: In v10, DEFAULTS only apply when `dataCollection` is explicitly provided.\n * When `dataCollection` is absent, the legacy `sendDefaultPii` bridge is used, which defaults to\n * `userInfo: false` to preserve backward compatibility.\n */\nexport function resolveDataCollectionOptions(options: {\n  dataCollection?: DataCollection;\n  sendDefaultPii?: boolean;\n}): ResolvedDataCollection {\n  // TODO(v11): Remove the sendDefaultPii bridge and always use DEFAULTS.\n  const base = options.dataCollection != null ? DEFAULTS : defaultPiiToCollectionOptions(options.sendDefaultPii);\n\n  const dc = options.dataCollection ?? {};\n\n  return {\n    userInfo: dc.userInfo ?? base.userInfo,\n    cookies: dc.cookies ?? base.cookies,\n    httpHeaders: resolveHttpHeaders(dc.httpHeaders, base),\n    httpBodies: dc.httpBodies ?? base.httpBodies,\n    // oxlint-disable-next-line typescript/no-deprecated\n    urlQueryParams: dc.urlQueryParams ?? dc.queryParams ?? base.urlQueryParams,\n    graphQL: {\n      document: dc.graphQL?.document ?? base.graphQL.document,\n      variables: dc.graphQL?.variables ?? base.graphQL.variables,\n    },\n    genAI: {\n      inputs: dc.genAI?.inputs ?? base.genAI.inputs,\n      outputs: dc.genAI?.outputs ?? base.genAI.outputs,\n    },\n    databaseQueryData: dc.databaseQueryData ?? base.databaseQueryData,\n    stackFrameVariables: dc.stackFrameVariables ?? base.stackFrameVariables,\n    frameContextLines: dc.frameContextLines ?? base.frameContextLines,\n  };\n}\n", "/* eslint-disable max-lines */\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from './api';\nimport { DEFAULT_ENVIRONMENT } from './constants';\nimport { getCurrentScope, getIsolationScope, getTraceContextFromScope } from './currentScopes';\nimport { DEBUG_BUILD } from './debug-build';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope';\nimport type { IntegrationIndex } from './integration';\nimport { afterSetupIntegrations, setupIntegration, setupIntegrations } from './integration';\nimport { _INTERNAL_flushLogsBuffer } from './logs/internal';\nimport { _INTERNAL_flushMetricsBuffer } from './metrics/internal';\nimport type { Scope } from './scope';\nimport { updateSession } from './session';\nimport { getDynamicSamplingContextFromScope } from './tracing/dynamicSamplingContext';\nimport { isStreamedBeforeSendSpanCallback } from './tracing/spans/beforeSendSpan';\nimport { extractGenAiSpansFromEvent } from './tracing/spans/extractGenAiSpans';\nimport { DEFAULT_TRANSPORT_BUFFER_SIZE } from './transports/base';\nimport type { Breadcrumb, BreadcrumbHint, FetchBreadcrumbHint, XhrBreadcrumbHint } from './types/breadcrumb';\nimport type { CheckIn, MonitorConfig } from './types/checkin';\nimport type { EventDropReason, Outcome } from './types/clientreport';\nimport type { DataCategory } from './types/datacategory';\nimport type { DsnComponents } from './types/dsn';\nimport type { DynamicSamplingContext, Envelope } from './types/envelope';\nimport type { ErrorEvent, Event, EventHint, EventType, TransactionEvent } from './types/event';\nimport type { EventProcessor } from './types/eventprocessor';\nimport type { FeedbackEvent } from './types/feedback';\nimport type { Integration } from './types/integration';\nimport type { Log } from './types/log';\nimport type { Metric } from './types/metric';\nimport type { Primitive } from './types/misc';\nimport type { ClientOptions } from './types/options';\nimport type { ParameterizedString } from './types/parameterize';\nimport type { ReplayEndEvent, ReplayStartEvent } from './types/replay';\nimport type { RequestEventData } from './types/request';\nimport type { SdkMetadata } from './types/sdkmetadata';\nimport type { Session, SessionAggregates } from './types/session';\nimport type { SeverityLevel } from './types/severity';\nimport type { Span, SpanAttributes, SpanContextData, SpanJSON, StreamedSpanJSON } from './types/span';\nimport type { StartSpanOptions } from './types/startSpanOptions';\nimport type { Transport, TransportMakeRequestResponse } from './types/transport';\nimport type { ResolvedDataCollection } from './types/datacollection';\nimport { createClientReportEnvelope } from './utils/clientreport';\nimport { debug } from './utils/debug-logger';\nimport { dsnToString, makeDsn } from './utils/dsn';\nimport { addItemToEnvelope, createAttachmentEnvelopeItem } from './utils/envelope';\nimport { getPossibleEventMessages, isInternalException } from './utils/eventUtils';\nimport { isObjectLike, isParameterizedString, isPlainObject, isPrimitive, isThenable } from './utils/is';\nimport { merge } from './utils/merge';\nimport { checkOrSetAlreadyCaught, uuid4 } from './utils/misc';\nimport { parseSampleRate } from './utils/parseSampleRate';\nimport { prepareEvent } from './utils/prepareEvent';\nimport { makePromiseBuffer, type PromiseBuffer, SENTRY_BUFFER_FULL_ERROR } from './utils/promisebuffer';\nimport { safeMathRandom } from './utils/randomSafeContext';\nimport { reparentChildSpans, shouldIgnoreSpan } from './utils/should-ignore-span';\nimport { showSpanDropWarning } from './utils/spanUtils';\nimport { safeUnref } from './utils/timer';\nimport { convertSpanJsonToTransactionEvent, convertTransactionEventToSpanJson } from './utils/transactionEvent';\nimport { resolveDataCollectionOptions } from './utils/data-collection/resolveDataCollectionOptions';\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';\n\nconst INTERNAL_ERROR_SYMBOL = Symbol.for('SentryInternalError');\nconst DO_NOT_SEND_EVENT_SYMBOL = Symbol.for('SentryDoNotSendEventError');\n\n// Default interval for flushing logs and metrics (5 seconds)\nconst DEFAULT_FLUSH_INTERVAL = 5000;\n\ninterface InternalError {\n  message: string;\n  [INTERNAL_ERROR_SYMBOL]: true;\n}\n\ninterface DoNotSendEventError {\n  message: string;\n  [DO_NOT_SEND_EVENT_SYMBOL]: true;\n}\n\nfunction _makeInternalError(message: string): InternalError {\n  return {\n    message,\n    [INTERNAL_ERROR_SYMBOL]: true,\n  };\n}\n\nfunction _makeDoNotSendEventError(message: string): DoNotSendEventError {\n  return {\n    message,\n    [DO_NOT_SEND_EVENT_SYMBOL]: true,\n  };\n}\n\nfunction _isInternalError(error: unknown): error is InternalError {\n  return isObjectLike(error) && INTERNAL_ERROR_SYMBOL in error;\n}\n\nfunction _isDoNotSendEventError(error: unknown): error is DoNotSendEventError {\n  return isObjectLike(error) && DO_NOT_SEND_EVENT_SYMBOL in error;\n}\n\n/**\n * Sets up weight-based flushing for logs or metrics.\n * This helper function encapsulates the common pattern of:\n * 1. Tracking accumulated weight of items\n * 2. Flushing when weight exceeds threshold (800KB)\n * 3. Flushing after timeout period from the first item\n *\n * Uses closure variables to track weight and timeout state.\n */\nfunction setupWeightBasedFlushing<\n  T,\n  AfterCaptureHook extends 'afterCaptureLog' | 'afterCaptureMetric',\n  FlushHook extends 'flushLogs' | 'flushMetrics',\n>(\n  client: Client,\n  afterCaptureHook: AfterCaptureHook,\n  flushHook: FlushHook,\n  estimateSizeFn: (item: T) => number,\n  flushFn: (client: Client) => void,\n): void {\n  // Track weight and timeout in closure variables\n  let weight = 0;\n  let flushTimeout: ReturnType<typeof setTimeout> | undefined;\n  let isTimerActive = false;\n\n  // @ts-expect-error - TypeScript can't narrow generic hook types to match specific overloads, but we know this is type-safe\n  client.on(flushHook, () => {\n    weight = 0;\n    clearTimeout(flushTimeout);\n    isTimerActive = false;\n  });\n\n  // @ts-expect-error - TypeScript can't narrow generic hook types to match specific overloads, but we know this is type-safe\n  client.on(afterCaptureHook, (item: T) => {\n    weight += estimateSizeFn(item);\n\n    // We flush the buffer if it exceeds 0.8 MB\n    // The weight is a rough estimate, so we flush way before the payload gets too big.\n    if (weight >= 800_000) {\n      flushFn(client);\n    } else if (!isTimerActive) {\n      const flushInterval = client.getOptions()._flushInterval ?? DEFAULT_FLUSH_INTERVAL;\n      if (flushInterval > 0) {\n        // Only start timer if one isn't already running.\n        // This prevents flushing being delayed by items that arrive close to the timeout limit\n        // and thus resetting the flushing timeout and delaying items being flushed.\n        isTimerActive = true;\n        // Use safeUnref so the timer doesn't prevent the process from exiting\n        flushTimeout = safeUnref(\n          setTimeout(() => {\n            flushFn(client);\n            // Note: isTimerActive is reset by the flushHook handler above, not here,\n            // to avoid race conditions when new items arrive during the flush.\n          }, flushInterval),\n        );\n      }\n    }\n  });\n\n  client.on('flush', () => {\n    flushFn(client);\n  });\n}\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event, it is passed through\n * {@link Client._prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends Client<NodeOptions> {\n *   public constructor(options: NodeOptions) {\n *     super(options);\n *   }\n *\n *   // ...\n * }\n */\nexport abstract class Client<O extends ClientOptions = ClientOptions> {\n  /** Options passed to the SDK. */\n  protected readonly _options: O;\n\n  /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n  protected readonly _dsn?: DsnComponents;\n\n  protected readonly _transport?: Transport;\n\n  /** Array of set up integrations. */\n  protected _integrations: IntegrationIndex;\n\n  /** Number of calls being processed */\n  protected _numProcessing: number;\n\n  protected _eventProcessors: EventProcessor[];\n\n  /** Holds flushable  */\n  protected _outcomes: { [key: string]: number };\n\n  // eslint-disable-next-line @typescript-eslint/ban-types\n  protected _hooks: Record<string, Set<Function>>;\n\n  protected _promiseBuffer: PromiseBuffer<unknown>;\n\n  protected readonly _dataCollection: ResolvedDataCollection;\n\n  /**\n   * Initializes this client instance.\n   *\n   * @param options Options for the client.\n   */\n  protected constructor(options: O) {\n    this._options = options;\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\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\n    if (this._dsn) {\n      const url = getEnvelopeEndpointWithUrlEncodedAuth(\n        this._dsn,\n        options.tunnel,\n        options._metadata ? options._metadata.sdk : undefined,\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\n    // Backfill enableLogs option from _experiments.enableLogs\n    // todo(v11): Remove the experimental flag\n    // eslint-disable-next-line typescript/no-deprecated\n    this._options.enableLogs = this._options.enableLogs ?? this._options._experiments?.enableLogs ?? true;\n\n    // Setup log flushing with weight and timeout tracking\n    if (this._options.enableLogs) {\n      setupWeightBasedFlushing(this, 'afterCaptureLog', 'flushLogs', estimateLogSizeInBytes, _INTERNAL_flushLogsBuffer);\n    }\n\n    // todo(v11): Remove the experimental flag\n    // eslint-disable-next-line typescript/no-deprecated\n    const enableMetrics = this._options.enableMetrics ?? this._options._experiments?.enableMetrics ?? true;\n\n    // Setup metric flushing with weight and timeout tracking\n    if (enableMetrics) {\n      setupWeightBasedFlushing(\n        this,\n        'afterCaptureMetric',\n        'flushMetrics',\n        estimateMetricSizeInBytes,\n        _INTERNAL_flushMetricsBuffer,\n      );\n    }\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  public captureException(exception: unknown, hint?: EventHint, scope?: Scope): string {\n    const eventId = uuid4();\n\n    // ensure we haven't captured this very object before\n    if (checkOrSetAlreadyCaught(exception)) {\n      DEBUG_BUILD && debug.log(ALREADY_SEEN_ERROR);\n      return eventId;\n    }\n\n    const hintWithEventId = {\n      event_id: eventId,\n      ...hint,\n    };\n\n    this._process(\n      () =>\n        this.eventFromException(exception, hintWithEventId)\n          .then(event => this._captureEvent(event, hintWithEventId, scope))\n          .then(res => res),\n      'error',\n    );\n\n    return hintWithEventId.event_id;\n  }\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  public captureMessage(\n    message: ParameterizedString,\n    level?: SeverityLevel,\n    hint?: EventHint,\n    currentScope?: Scope,\n  ): string {\n    const hintWithEventId = {\n      event_id: uuid4(),\n      ...hint,\n    };\n\n    const eventMessage = isParameterizedString(message) ? message : String(message);\n    const isMessage = isPrimitive(message);\n    const promisedEvent = isMessage\n      ? this.eventFromMessage(eventMessage, level, hintWithEventId)\n      : this.eventFromException(message, hintWithEventId);\n\n    this._process(\n      () => promisedEvent.then(event => this._captureEvent(event, hintWithEventId, currentScope)),\n      isMessage ? 'unknown' : 'error',\n    );\n\n    return hintWithEventId.event_id;\n  }\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  public captureEvent(event: Event, hint?: EventHint, currentScope?: Scope): string {\n    const eventId = uuid4();\n\n    // ensure we haven't captured this very object before\n    if (hint?.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n      DEBUG_BUILD && debug.log(ALREADY_SEEN_ERROR);\n      return eventId;\n    }\n\n    const hintWithEventId = {\n      event_id: eventId,\n      ...hint,\n    };\n\n    const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n    const capturedSpanScope: Scope | undefined = sdkProcessingMetadata.capturedSpanScope;\n    const capturedSpanIsolationScope: Scope | undefined = sdkProcessingMetadata.capturedSpanIsolationScope;\n    const dataCategory = getDataCategoryByType(event.type);\n\n    this._process(\n      () => this._captureEvent(event, hintWithEventId, capturedSpanScope || currentScope, capturedSpanIsolationScope),\n      dataCategory,\n    );\n\n    return hintWithEventId.event_id;\n  }\n\n  /**\n   * Captures a session.\n   */\n  public captureSession(session: Session): void {\n    this.sendSession(session);\n    // After sending, we set init false to indicate it's not the first occurrence\n    updateSession(session, { init: false });\n  }\n\n  /**\n   * Create a cron monitor check in and send it to Sentry. This method is not available on all clients.\n   *\n   * @param checkIn An object that describes a check in.\n   * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n   * to create a monitor automatically when sending a check in.\n   * @param scope An optional scope containing event metadata.\n   * @returns A string representing the id of the check in.\n   */\n  public captureCheckIn?(checkIn: CheckIn, monitorConfig?: MonitorConfig, scope?: Scope): string;\n\n  /**\n   * Get the current Dsn.\n   */\n  public getDsn(): DsnComponents | undefined {\n    return this._dsn;\n  }\n\n  /**\n   * Get the current options.\n   */\n  public getOptions(): O {\n    return this._options;\n  }\n\n  /**\n   * Get the resolved data collection configuration.\n   */\n  public getDataCollectionOptions(): ResolvedDataCollection {\n    return this._dataCollection;\n  }\n\n  /**\n   * Get the SDK metadata.\n   * @see SdkMetadata\n   */\n  public getSdkMetadata(): SdkMetadata | undefined {\n    return this._options._metadata;\n  }\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  public getTransport(): Transport | undefined {\n    return this._transport;\n  }\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  public async flush(timeout?: number): PromiseLike<boolean> {\n    const transport = this._transport;\n\n    // Emit `flush` unconditionally so weight-based log/metric flushers drain\n    // their buffers and clear their idle timers, even when no transport is\n    // configured (e.g. no DSN).\n    this.emit('flush');\n\n    if (!transport) {\n      return true;\n    }\n\n    const clientFinished = await this._isClientDoneProcessing(timeout);\n    const transportFlushed = await transport.flush(timeout);\n\n    return clientFinished && transportFlushed;\n  }\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  public async close(timeout?: number): PromiseLike<boolean> {\n    const result = await this.flush(timeout);\n    this.getOptions().enabled = false;\n    this.emit('close');\n    return result;\n  }\n\n  /**\n   * Get all installed event processors.\n   */\n  public getEventProcessors(): EventProcessor[] {\n    return this._eventProcessors;\n  }\n\n  /**\n   * Adds an event processor that applies to any event processed by this client.\n   */\n  public addEventProcessor(eventProcessor: EventProcessor): void {\n    this._eventProcessors.push(eventProcessor);\n  }\n\n  /**\n   * Initialize this client.\n   * Call this after the client was set on a scope.\n   */\n  public init(): void {\n    if (\n      this._isEnabled() ||\n      // 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    ) {\n      this._setupIntegrations();\n    }\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  public getIntegrationByName<T extends Integration = Integration>(integrationName: string): T | undefined {\n    return this._integrations[integrationName] as T | undefined;\n  }\n\n  /**\n   * Returns the names of all installed integrations.\n   */\n  public getIntegrationNames(): string[] {\n    return Object.keys(this._integrations);\n  }\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  public addIntegration(integration: Integration): void {\n    const isAlreadyInstalled = this._integrations[integration.name];\n\n    if (!isAlreadyInstalled && integration.beforeSetup) {\n      integration.beforeSetup(this);\n    }\n\n    // This hook takes care of only installing if not already installed\n    setupIntegration(this, integration, this._integrations);\n    // Here we need to check manually to make sure to not run this multiple times\n    if (!isAlreadyInstalled) {\n      afterSetupIntegrations(this, [integration]);\n    }\n  }\n\n  /**\n   * Send a fully prepared event to Sentry.\n   */\n  public sendEvent(event: Event, hint: EventHint = {}): void {\n    this.emit('beforeSendEvent', event, hint);\n\n    // Extract gen_ai spans from transaction and convert to span v2 format.\n    // This mutates event.spans to remove the extracted spans.\n    const genAiSpanItem = extractGenAiSpansFromEvent(event, this);\n\n    let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n\n    if (!isInternalException(hint)) {\n      for (const attachment of hint.attachments || []) {\n        env = addItemToEnvelope(env, createAttachmentEnvelopeItem(attachment));\n      }\n    }\n\n    if (genAiSpanItem) {\n      env = addItemToEnvelope(env, genAiSpanItem);\n    }\n\n    // sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this.sendEnvelope(env).then(sendResponse => this.emit('afterSendEvent', event, sendResponse));\n  }\n\n  /**\n   * Send a session or session aggregrates to Sentry.\n   */\n  public sendSession(session: Session | SessionAggregates): void {\n    // Backfill release and environment on 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\n    this.emit('beforeSendSession', session);\n\n    const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n\n    // sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this.sendEnvelope(env);\n  }\n\n  /**\n   * Record on the client that an event got dropped (ie, an event that will not be sent to Sentry).\n   */\n  public recordDroppedEvent(reason: EventDropReason, category: DataCategory, count: number = 1): void {\n    if (this._options.sendClientReports) {\n      // We want to track each category (error, transaction, session, replay_event) separately\n      // but still keep the distinction between different type of outcomes.\n      // We could use nested maps, but it's much easier to read and type this way.\n      // A correct type for map-based implementation if we want to go that route\n      // would be `Partial<Record<SentryRequestType, Partial<Record<Outcome, number>>>>`\n      // With typescript 4.1 we could even use template literal types\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  /* eslint-disable @typescript-eslint/unified-signatures */\n  /**\n   * Register a callback for whenever a span is started.\n   * Receives the span as argument.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'spanStart', callback: (span: Span) => void): () => void;\n\n  /**\n   * Register a callback before span sampling runs. Receives a `samplingDecision` object argument with a `decision`\n   * property that can be used to make a sampling decision that will be enforced, before any span sampling runs.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(\n    hook: 'beforeSampling',\n    callback: (\n      samplingData: {\n        spanAttributes: SpanAttributes;\n        spanName: string;\n        parentSampled?: boolean;\n        parentSampleRate?: number;\n        parentContext?: SpanContextData;\n      },\n      samplingDecision: { decision: boolean },\n    ) => void,\n  ): void;\n\n  /**\n   * Register a callback for after a span is ended.\n   * NOTE: The span cannot be mutated anymore in this callback.\n   * Receives the span as argument.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'spanEnd', callback: (span: Span) => void): () => void;\n\n  /**\n   * Register a callback for after a span is ended and the `spanEnd` hook has run.\n   * NOTE: The span cannot be mutated anymore in this callback.\n   */\n  public on(hook: 'afterSpanEnd', callback: (immutableSegmentSpan: Readonly<Span>) => void): () => void;\n\n  /**\n   * Register a callback for after a segment span is ended and the `segmentSpanEnd` hook has run.\n   * NOTE: The segment span cannot be mutated anymore in this callback.\n   */\n  public on(hook: 'afterSegmentSpanEnd', callback: (immutableSegmentSpan: Readonly<Span>) => void): () => void;\n\n  /**\n   * Register a callback to preprocess a span JSON _before_ it is passed to the `processSpan` and\n   * `processSegmentSpan` hooks. Use this to backfill data that subsequent hooks rely on.\n   * The optional `hint` exposes additional context about the originating span (e.g. the OTel `spanKind`).\n   */\n  public on(\n    hook: 'preprocessSpan',\n    callback: (streamedSpanJSON: StreamedSpanJSON, hint?: { spanKind?: number }) => void,\n  ): () => void;\n\n  /**\n   * Register a callback for when a span JSON is processed, to add some data to the span JSON.\n   */\n  public on(hook: 'processSpan', callback: (streamedSpanJSON: StreamedSpanJSON) => void): () => void;\n\n  /**\n   * Register a callback for when a segment span JSON is processed, to add some data to the segment span JSON.\n   */\n  public on(hook: 'processSegmentSpan', callback: (streamedSpanJSON: StreamedSpanJSON) => void): () => void;\n\n  /**\n   * Register a callback for when an idle span is allowed to auto-finish.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'idleSpanEnableAutoFinish', callback: (span: Span) => void): () => void;\n\n  /**\n   * Register a callback for transaction start and finish.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'beforeEnvelope', callback: (envelope: Envelope) => void): () => void;\n\n  /**\n   * Register a callback that runs when stack frame metadata should be applied to an event.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'applyFrameMetadata', callback: (event: Event) => void): () => void;\n\n  /**\n   * Register a callback for before sending an event.\n   * This is called right before an event is sent and should not be used to mutate the event.\n   * Receives an Event & EventHint as arguments.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'beforeSendEvent', callback: (event: Event, hint?: EventHint | undefined) => void): () => void;\n\n  /**\n   * Register a callback for before sending a session or session aggregrates..\n   * Receives the session/aggregate as second argument.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'beforeSendSession', callback: (session: Session | SessionAggregates) => void): () => void;\n\n  /**\n   * Register a callback for preprocessing an event,\n   * before it is passed to (global) event processors.\n   * Receives an Event & EventHint as arguments.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'preprocessEvent', callback: (event: Event, hint?: EventHint | undefined) => void): () => void;\n\n  /**\n   * Register a callback for postprocessing an event,\n   * after it was passed to (global) event processors, before it is being sent.\n   * Receives an Event & EventHint as arguments.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'postprocessEvent', callback: (event: Event, hint?: EventHint | undefined) => void): () => void;\n\n  /**\n   * Register a callback for when an event has been sent.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(\n    hook: 'afterSendEvent',\n    callback: (event: Event, sendResponse: TransportMakeRequestResponse) => void,\n  ): () => void;\n\n  /**\n   * Register a callback before a breadcrumb is added.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'beforeAddBreadcrumb', callback: (breadcrumb: Breadcrumb, hint?: BreadcrumbHint) => void): () => void;\n\n  /**\n   * Register a callback when a DSC (Dynamic Sampling Context) is created.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'createDsc', callback: (dsc: DynamicSamplingContext, rootSpan?: Span) => void): () => void;\n\n  /**\n   * Register a callback when a Feedback event has been prepared.\n   * This should be used to mutate the event. The options argument can hint\n   * about what kind of mutation it expects.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(\n    hook: 'beforeSendFeedback',\n    callback: (feedback: FeedbackEvent, options?: { includeReplay?: boolean }) => void,\n  ): () => void;\n\n  /**\n   * Register a callback when the feedback widget is opened in a user's browser\n   */\n  public on(hook: 'openFeedbackWidget', callback: () => void): () => void;\n\n  /**\n   * A hook that is called when a replay session starts recording (either session or buffer mode).\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'replayStart', callback: (event: ReplayStartEvent) => void): () => void;\n\n  /**\n   * A hook that is called when a replay session stops recording, either manually or due to an\n   * internal condition such as `maxReplayDuration` expiry, send failure, or mutation limit.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'replayEnd', callback: (event: ReplayEndEvent) => void): () => void;\n\n  /**\n   * A hook for the browser tracing integrations to trigger a span start for a page load.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(\n    hook: 'startPageLoadSpan',\n    callback: (\n      options: StartSpanOptions,\n      traceOptions?: { sentryTrace?: string | undefined; baggage?: string | undefined },\n    ) => void,\n  ): () => void;\n\n  /**\n   * A hook for the browser tracing integrations to trigger the end of a page load span.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'endPageloadSpan', callback: () => void): () => void;\n\n  /**\n   * A hook for the browser tracing integrations to trigger after the pageload span was started.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'afterStartPageLoadSpan', callback: (span: Span) => void): () => void;\n\n  /**\n   * A hook for triggering right before a navigation span is started.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(\n    hook: 'beforeStartNavigationSpan',\n    callback: (options: StartSpanOptions, navigationOptions?: { isRedirect?: boolean; url?: string }) => void,\n  ): () => void;\n\n  /**\n   * A hook for browser tracing integrations to trigger a span for a navigation.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(\n    hook: 'startNavigationSpan',\n    callback: (options: StartSpanOptions, navigationOptions?: { isRedirect?: boolean; url?: string }) => void,\n  ): () => void;\n\n  /**\n   * A hook for GraphQL client integration to enhance a span with request data.\n   * @returns A function that, when executed, removes the registered callback.\n   */\n  public on(\n    hook: 'beforeOutgoingRequestSpan',\n    callback: (span: Span, hint: XhrBreadcrumbHint | FetchBreadcrumbHint) => void,\n  ): () => void;\n\n  /**\n   * A hook for GraphQL client integration to enhance a breadcrumb with request data.\n   * @returns A function that, when executed, removes the registered callback.\n   */\n  public on(\n    hook: 'beforeOutgoingRequestBreadcrumb',\n    callback: (breadcrumb: Breadcrumb, hint: XhrBreadcrumbHint | FetchBreadcrumbHint) => void,\n  ): () => void;\n\n  /**\n   * A hook that is called when the client is flushing\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'flush', callback: () => void): () => void;\n\n  /**\n   * A hook that is called when the client is closing\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'close', callback: () => void): () => void;\n\n  /**\n   * A hook that is called before a log is captured. This hooks runs before `beforeSendLog` is fired.\n   *\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'beforeCaptureLog', callback: (log: Log) => void): () => void;\n\n  /**\n   * A hook that is called after a log is captured\n   *\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'afterCaptureLog', callback: (log: Log) => void): () => void;\n\n  /**\n   * A hook that is called when the client is flushing logs\n   *\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'flushLogs', callback: () => void): () => void;\n\n  /**\n   * A hook that is called after capturing a metric. This hooks runs after `beforeSendMetric` is fired.\n   *\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'afterCaptureMetric', callback: (metric: Metric) => void): () => void;\n\n  /**\n   * A hook that is called when the client is flushing metrics\n   *\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'flushMetrics', callback: () => void): () => void;\n\n  /**\n   * A hook that is called when a metric is processed before it is captured and before the `beforeSendMetric` callback is fired.\n   *\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'processMetric', callback: (metric: Metric) => void): () => void;\n\n  /**\n   * A hook that is called when a http server request is started.\n   * This hook is called after request isolation, but before the request is processed.\n   *\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(\n    hook: 'httpServerRequest',\n    callback: (request: unknown, response: unknown, normalizedRequest: RequestEventData) => void,\n  ): () => void;\n\n  /**\n   * A hook that is called when the UI Profiler should start profiling.\n   *\n   * This hook is called when running `Sentry.uiProfiler.startProfiler()`.\n   *\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'startUIProfiler', callback: () => void): () => void;\n\n  /**\n   * A hook that is called when the UI Profiler should stop profiling.\n   *\n   * This hook is called when running `Sentry.uiProfiler.stopProfiler()`.\n   *\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'stopUIProfiler', callback: () => void): () => void;\n\n  /**\n   * Register a hook on this client.\n   */\n  public on(hook: string, callback: unknown): () => void {\n    const hookCallbacks = (this._hooks[hook] = this._hooks[hook] || new Set());\n\n    // Wrap the callback in a function so that registering the same callback instance multiple\n    // times results in the callback being called multiple times.\n    // @ts-expect-error - The `callback` type is correct and must be a function due to the\n    // individual, specific overloads of this function.\n    // eslint-disable-next-line @typescript-eslint/ban-types\n    const uniqueCallback: Function = (...args: unknown[]) => callback(...args);\n\n    hookCallbacks.add(uniqueCallback);\n\n    // This function returns a callback execution handler that, when invoked,\n    // deregisters a callback. This is crucial for managing instances where callbacks\n    // need to be unregistered to prevent self-referencing in callback closures,\n    // ensuring proper garbage collection.\n    return () => {\n      hookCallbacks.delete(uniqueCallback);\n    };\n  }\n\n  /** Fire a hook whenever a span starts. */\n  public emit(hook: 'spanStart', span: Span): void;\n\n  /** A hook that is called every time before a span is sampled. */\n  public emit(\n    hook: 'beforeSampling',\n    samplingData: {\n      spanAttributes: SpanAttributes;\n      spanName: string;\n      parentSampled?: boolean;\n      parentSampleRate?: number;\n      parentContext?: SpanContextData;\n    },\n    samplingDecision: { decision: boolean },\n  ): void;\n\n  /** Fire a hook whenever a span ends. */\n  public emit(hook: 'spanEnd', span: Span): void;\n\n  /**\n   * Fire a hook event after a span ends and the `spanEnd` hook has run.\n   */\n  public emit(hook: 'afterSpanEnd', immutableSpan: Readonly<Span>): void;\n\n  /**\n   * Fire a hook event after a segment span ends and the `spanEnd` hook has run.\n   */\n  public emit(hook: 'afterSegmentSpanEnd', immutableSegmentSpan: Readonly<Span>): void;\n\n  /**\n   * Fire a hook event to preprocess a span JSON before the `processSpan` and `processSegmentSpan` hooks run.\n   */\n  public emit(hook: 'preprocessSpan', streamedSpanJSON: StreamedSpanJSON, hint?: { spanKind?: number }): void;\n\n  /**\n   * Fire a hook event when a span JSON is processed, to add some data to the span JSON.\n   */\n  public emit(hook: 'processSpan', streamedSpanJSON: StreamedSpanJSON): void;\n\n  /**\n   * Fire a hook event for when a segment span JSON is processed, to add some data to the segment span JSON.\n   */\n  public emit(hook: 'processSegmentSpan', streamedSpanJSON: StreamedSpanJSON): void;\n\n  /**\n   * Fire a hook indicating that an idle span is allowed to auto finish.\n   */\n  public emit(hook: 'idleSpanEnableAutoFinish', span: Span): void;\n\n  /**\n   * Fire a hook event for envelope creation and sending. Expects to be given an envelope as the\n   * second argument.\n   */\n  public emit(hook: 'beforeEnvelope', envelope: Envelope): void;\n\n  /**\n   * Fire a hook indicating that stack frame metadata should be applied to the event passed to the hook.\n   */\n  public emit(hook: 'applyFrameMetadata', event: Event): void;\n\n  /**\n   * Fire a hook event before sending an event.\n   * This is called right before an event is sent and should not be used to mutate the event.\n   * Expects to be given an Event & EventHint as the second/third argument.\n   */\n  public emit(hook: 'beforeSendEvent', event: Event, hint?: EventHint): void;\n\n  /**\n   * Fire a hook event before sending a session/aggregates.\n   * Expects to be given the prepared session/aggregates as second argument.\n   */\n  public emit(hook: 'beforeSendSession', session: Session | SessionAggregates): void;\n\n  /**\n   * Fire a hook event to process events before they are passed to (global) event processors.\n   * Expects to be given an Event & EventHint as the second/third argument.\n   */\n  public emit(hook: 'preprocessEvent', event: Event, hint?: EventHint): void;\n\n  /**\n   * Fire a hook event to process a user on an event before it is sent to Sentry, after all other processors have run.\n   * Expects to be given an Event & EventHint as the second/third argument.\n   */\n  public emit(hook: 'postprocessEvent', event: Event, hint?: EventHint): void;\n\n  /**\n   * Fire a hook event after sending an event. Expects to be given an Event as the\n   * second argument.\n   */\n  public emit(hook: 'afterSendEvent', event: Event, sendResponse: TransportMakeRequestResponse): void;\n\n  /**\n   * Fire a hook for when a breadcrumb is added. Expects the breadcrumb as second argument.\n   */\n  public emit(hook: 'beforeAddBreadcrumb', breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void;\n\n  /**\n   * Fire a hook for when a DSC (Dynamic Sampling Context) is created. Expects the DSC as second argument.\n   */\n  public emit(hook: 'createDsc', dsc: DynamicSamplingContext, rootSpan?: Span): void;\n\n  /**\n   * Fire a hook event for after preparing a feedback event. Events to be given\n   * a feedback event as the second argument, and an optional options object as\n   * third argument.\n   */\n  public emit(hook: 'beforeSendFeedback', feedback: FeedbackEvent, options?: { includeReplay?: boolean }): void;\n\n  /**\n   * Fire a hook event for when the feedback widget is opened in a user's browser\n   */\n  public emit(hook: 'openFeedbackWidget'): void;\n\n  /**\n   * Fire a hook event when a replay session starts recording.\n   */\n  public emit(hook: 'replayStart', event: ReplayStartEvent): void;\n\n  /**\n   * Fire a hook event when a replay session stops recording.\n   */\n  public emit(hook: 'replayEnd', event: ReplayEndEvent): void;\n\n  /**\n   * Emit a hook event for browser tracing integrations to trigger a span start for a page load.\n   */\n  public emit(\n    hook: 'startPageLoadSpan',\n    options: StartSpanOptions,\n    traceOptions?: { sentryTrace?: string | undefined; baggage?: string | undefined },\n  ): void;\n\n  /**\n   * Emit a hook event for browser tracing integrations to trigger the end of a page load span.\n   */\n  public emit(hook: 'endPageloadSpan'): void;\n\n  /**\n   * Emit a hook event for browser tracing integrations to trigger after the pageload span was started.\n   */\n  public emit(hook: 'afterStartPageLoadSpan', span: Span): void;\n\n  /**\n   * Emit a hook event for triggering right before a navigation span is started.\n   */\n  public emit(\n    hook: 'beforeStartNavigationSpan',\n    options: StartSpanOptions,\n    navigationOptions?: { isRedirect?: boolean; url?: string },\n  ): void;\n\n  /**\n   * Emit a hook event for browser tracing integrations to trigger a span for a navigation.\n   */\n  public emit(\n    hook: 'startNavigationSpan',\n    options: StartSpanOptions,\n    navigationOptions?: { isRedirect?: boolean; url?: string },\n  ): void;\n\n  /**\n   * Emit a hook event for GraphQL client integration to enhance a span with request data.\n   */\n  public emit(hook: 'beforeOutgoingRequestSpan', span: Span, hint: XhrBreadcrumbHint | FetchBreadcrumbHint): void;\n\n  /**\n   * Emit a hook event for GraphQL client integration to enhance a breadcrumb with request data.\n   */\n  public emit(\n    hook: 'beforeOutgoingRequestBreadcrumb',\n    breadcrumb: Breadcrumb,\n    hint: XhrBreadcrumbHint | FetchBreadcrumbHint,\n  ): void;\n\n  /**\n   * Emit a hook event for client flush\n   */\n  public emit(hook: 'flush'): void;\n\n  /**\n   * Emit a hook event for client close\n   */\n  public emit(hook: 'close'): void;\n\n  /**\n   * Emit a hook event for client before capturing a log. This hooks runs before `beforeSendLog` is fired.\n   */\n  public emit(hook: 'beforeCaptureLog', log: Log): void;\n\n  /**\n   * Emit a hook event for client after capturing a log.\n   */\n  public emit(hook: 'afterCaptureLog', log: Log): void;\n\n  /**\n   * Emit a hook event for client flush logs\n   */\n  public emit(hook: 'flushLogs'): void;\n\n  /**\n   * Emit a hook event for client after capturing a metric.\n   */\n  public emit(hook: 'afterCaptureMetric', metric: Metric): void;\n\n  /**\n   * Emit a hook event for client flush metrics\n   */\n  public emit(hook: 'flushMetrics'): void;\n\n  /**\n   *\n   * Emit a hook event for client to process a metric before it is captured.\n   * This hook is called before the `beforeSendMetric` callback is fired.\n   */\n  public emit(hook: 'processMetric', metric: Metric): void;\n\n  /**\n   * Emit a hook event for client when a http server request is started.\n   * This hook is called after request isolation, but before the request is processed.\n   */\n  public emit(\n    hook: 'httpServerRequest',\n    request: unknown,\n    response: unknown,\n    normalizedRequest: RequestEventData,\n  ): void;\n\n  /**\n   * Emit a hook event for starting the UI Profiler.\n   */\n  public emit(hook: 'startUIProfiler'): void;\n\n  /**\n   * Emit a hook event for stopping the UI Profiler.\n   */\n  public emit(hook: 'stopUIProfiler'): void;\n\n  /**\n   * Emit a hook that was previously registered via `on()`.\n   */\n  public emit(hook: string, ...rest: unknown[]): void {\n    const callbacks = this._hooks[hook];\n    if (callbacks) {\n      callbacks.forEach(callback => callback(...rest));\n    }\n  }\n\n  /**\n   * Send an envelope to Sentry.\n   */\n  // @ts-expect-error - PromiseLike is a subset of Promise\n  public async sendEnvelope(envelope: Envelope): PromiseLike<TransportMakeRequestResponse> {\n    this.emit('beforeEnvelope', envelope);\n\n    if (this._isEnabled() && this._transport) {\n      try {\n        return await this._transport.send(envelope);\n      } catch (reason) {\n        DEBUG_BUILD && debug.error('Error while sending envelope:', reason);\n        return {};\n      }\n    }\n\n    DEBUG_BUILD && debug.error('Transport disabled');\n    return {};\n  }\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  public registerCleanup(callback: () => void): void {\n    // No-op in base class - subclasses override to implement cleanup registration\n  }\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  public dispose(): void {\n    // Base class has no cleanup logic - subclasses implement their own\n  }\n\n  /* eslint-enable @typescript-eslint/unified-signatures */\n\n  /** Setup integrations for this client. */\n  protected _setupIntegrations(): void {\n    const { integrations } = this._options;\n    this._integrations = setupIntegrations(this, integrations);\n    afterSetupIntegrations(this, integrations);\n  }\n\n  /** Updates existing session based on the provided event */\n  protected _updateSessionFromEvent(session: Session, event: Event): void {\n    // initially, set `crashed` based on the event level and update from exceptions if there are any later on\n    let crashed = event.level === 'fatal';\n    let errored = false;\n    const exceptions = event.exception?.values;\n\n    if (exceptions) {\n      errored = true;\n      // reset crashed to false if there are exceptions, to ensure `mechanism.handled` is respected.\n      crashed = false;\n\n      for (const ex of exceptions) {\n        if (ex.mechanism?.handled === false) {\n          crashed = true;\n          break;\n        }\n      }\n    }\n\n    // A session is updated and that session update is sent in only one of the two following scenarios:\n    // 1. Session with non terminal status and 0 errors + an error occurred -> Will set error count to 1 and send update\n    // 2. Session with non terminal status and 1 error + a crash occurred -> Will set status crashed and send update\n    const sessionNonTerminal = session.status === 'ok';\n    const shouldUpdateAndSend = (sessionNonTerminal && session.errors === 0) || (sessionNonTerminal && crashed);\n\n    if (shouldUpdateAndSend) {\n      updateSession(session, {\n        ...(crashed && { status: 'crashed' }),\n        errors: session.errors || Number(errored || crashed),\n      });\n      this.captureSession(session);\n    }\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  protected async _isClientDoneProcessing(timeout?: number): Promise<boolean> {\n    let ticked = 0;\n\n    while (!timeout || ticked < timeout) {\n      await new Promise(resolve => setTimeout(resolve, 1));\n\n      if (!this._numProcessing) {\n        return true;\n      }\n      ticked++;\n    }\n\n    return false;\n  }\n\n  /** Determines whether this SDK is enabled and a transport is present. */\n  protected _isEnabled(): boolean {\n    return this.getOptions().enabled !== false && this._transport !== undefined;\n  }\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  protected _prepareEvent(\n    event: Event,\n    hint: EventHint,\n    currentScope: Scope,\n    isolationScope: Scope,\n  ): PromiseLike<Event | null> {\n    const options = this.getOptions();\n    const integrations = this.getIntegrationNames();\n    if (!hint.integrations && integrations.length) {\n      hint.integrations = integrations;\n    }\n\n    this.emit('preprocessEvent', event, hint);\n\n    if (!event.type) {\n      isolationScope.setLastEventId(event.event_id || hint.event_id);\n    }\n\n    return prepareEvent(options, event, hint, currentScope, this, isolationScope).then(evt => {\n      if (evt === null) {\n        return evt;\n      }\n\n      this.emit('postprocessEvent', evt, hint);\n\n      evt.contexts = {\n        trace: { ...evt.contexts?.trace, ...getTraceContextFromScope(currentScope) },\n        ...evt.contexts,\n      };\n\n      const dynamicSamplingContext = getDynamicSamplingContextFromScope(this, currentScope);\n\n      evt.sdkProcessingMetadata = {\n        dynamicSamplingContext,\n        ...evt.sdkProcessingMetadata,\n      };\n\n      return evt;\n    });\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  protected _captureEvent(\n    event: Event,\n    hint: EventHint = {},\n    currentScope = getCurrentScope(),\n    isolationScope = getIsolationScope(),\n  ): PromiseLike<string | undefined> {\n    if (DEBUG_BUILD && isErrorEvent(event)) {\n      debug.log(`Captured error event \\`${getPossibleEventMessages(event)[0] || '<unknown>'}\\``);\n    }\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 undefined;\n      },\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  protected _processEvent(\n    event: Event,\n    hint: EventHint,\n    currentScope: Scope,\n    isolationScope: Scope,\n  ): PromiseLike<Event> {\n    const options = this.getOptions();\n    const { sampleRate } = options;\n\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\n    // 1.0 === 100% events are sent\n    // 0.0 === 0% events are sent\n    // Sampling for transaction happens somewhere else\n    const parsedSampleRate = typeof sampleRate === 'undefined' ? undefined : parseSampleRate(sampleRate);\n    const dataCategory = getDataCategoryByType(event.type);\n\n    return this._prepareEvent(event, hint, currentScope, isolationScope)\n      .then(prepared => {\n        if (prepared === null) {\n          this.recordDroppedEvent('event_processor', dataCategory);\n          throw _makeDoNotSendEventError('An event processor returned `null`, will not send event.');\n        }\n\n        if (isInternalException(hint)) {\n          return prepared;\n        }\n\n        const result = processBeforeSend(this, options, prepared, hint);\n        return _validateBeforeSendResult(result, beforeSendLabel);\n      })\n      .then(processedEvent => {\n        if (processedEvent === null) {\n          this.recordDroppedEvent('before_send', dataCategory);\n          if (isTransaction) {\n            const spans = event.spans || [];\n            // the transaction itself counts as one span, plus all the child spans that are added\n            const spanCount = 1 + spans.length;\n            this.recordDroppedEvent('before_send', 'span', spanCount);\n          }\n          throw _makeDoNotSendEventError(`${beforeSendLabel} returned \\`null\\`, will not send event.`);\n        }\n\n        const session = currentScope.getSession() || isolationScope.getSession();\n        if (isError && session) {\n          this._updateSessionFromEvent(session, processedEvent);\n        }\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\n        if (isTransaction) {\n          const spanCountBefore = processedEvent.sdkProcessingMetadata?.spanCountBeforeProcessing || 0;\n          const spanCountAfter = processedEvent.spans ? processedEvent.spans.length : 0;\n\n          const droppedSpanCount = spanCountBefore - spanCountAfter;\n          if (droppedSpanCount > 0) {\n            this.recordDroppedEvent('before_send', 'span', droppedSpanCount);\n          }\n        }\n\n        // None of the Sentry built event processor will update transaction name,\n        // so if the transaction name has been changed by an event processor, we know\n        // it has to come from custom event processor added by a user\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\n        this.sendEvent(processedEvent, hint);\n        return processedEvent;\n      })\n      .then(null, reason => {\n        if (_isDoNotSendEventError(reason) || _isInternalError(reason)) {\n          throw reason;\n        }\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  /**\n   * Occupies the client with processing and event\n   */\n  protected _process<T>(taskProducer: () => PromiseLike<T>, dataCategory: DataCategory): void {\n    this._numProcessing++;\n\n    void this._promiseBuffer.add(taskProducer).then(\n      value => {\n        this._numProcessing--;\n        return value;\n      },\n      reason => {\n        this._numProcessing--;\n\n        if (reason === SENTRY_BUFFER_FULL_ERROR) {\n          this.recordDroppedEvent('queue_overflow', dataCategory);\n        }\n\n        return reason;\n      },\n    );\n  }\n\n  /**\n   * Clears outcomes on this client and returns them.\n   */\n  protected _clearOutcomes(): Outcome[] {\n    const outcomes = this._outcomes;\n    this._outcomes = {};\n    return Object.entries(outcomes).map(([key, quantity]) => {\n      const [reason, category] = key.split(':') as [EventDropReason, DataCategory];\n      return {\n        reason,\n        category,\n        quantity,\n      };\n    });\n  }\n\n  /**\n   * Sends client reports as an envelope.\n   */\n  protected _flushOutcomes(): void {\n    DEBUG_BUILD && debug.log('Flushing outcomes...');\n\n    const outcomes = this._clearOutcomes();\n\n    if (outcomes.length === 0) {\n      DEBUG_BUILD && debug.log('No outcomes to send');\n      return;\n    }\n\n    // This is really the only place where we want to check for a DSN and only send outcomes then\n    if (!this._dsn) {\n      DEBUG_BUILD && debug.log('No dsn provided, will not send outcomes');\n      return;\n    }\n\n    DEBUG_BUILD && debug.log('Sending outcomes:', outcomes);\n\n    const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn));\n\n    // sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this.sendEnvelope(envelope);\n  }\n\n  /**\n   * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n   */\n  public abstract eventFromException(_exception: unknown, _hint?: EventHint): PromiseLike<Event>;\n\n  /**\n   * Creates an {@link Event} from primitive inputs to `captureMessage`.\n   */\n  public abstract eventFromMessage(\n    _message: ParameterizedString,\n    _level?: SeverityLevel,\n    _hint?: EventHint,\n  ): PromiseLike<Event>;\n}\n\nfunction getDataCategoryByType(type: EventType | 'replay_event' | undefined): DataCategory {\n  return type === 'replay_event' ? 'replay' : type || 'error';\n}\n\n/**\n * Verifies that return value of configured `beforeSend` or `beforeSendTransaction` is of expected type, and returns the value if so.\n */\nfunction _validateBeforeSendResult(\n  beforeSendResult: PromiseLike<Event | null> | Event | null,\n  beforeSendLabel: string,\n): PromiseLike<Event | null> | Event | null {\n  const invalidValueError = `${beforeSendLabel} must return \\`null\\` or a valid event.`;\n  if (isThenable(beforeSendResult)) {\n    return beforeSendResult.then(\n      event => {\n        if (!isPlainObject(event) && event !== null) {\n          throw _makeInternalError(invalidValueError);\n        }\n        return event;\n      },\n      e => {\n        throw _makeInternalError(`${beforeSendLabel} rejected with ${e}`);\n      },\n    );\n  } else if (!isPlainObject(beforeSendResult) && beforeSendResult !== null) {\n    throw _makeInternalError(invalidValueError);\n  }\n  return beforeSendResult;\n}\n\n/**\n * Process the matching `beforeSendXXX` callback.\n */\nfunction processBeforeSend(\n  client: Client,\n  options: ClientOptions,\n  event: Event,\n  hint: EventHint,\n): PromiseLike<Event | null> | Event | null {\n  const { beforeSend, beforeSendTransaction, ignoreSpans } = options;\n  const beforeSendSpan = !isStreamedBeforeSendSpanCallback(options.beforeSendSpan) && options.beforeSendSpan;\n\n  let processedEvent = event;\n\n  if (isErrorEvent(processedEvent) && beforeSend) {\n    return beforeSend(processedEvent, hint);\n  }\n\n  if (isTransactionEvent(processedEvent)) {\n    // Avoid processing if we don't have to\n    if (beforeSendSpan || ignoreSpans) {\n      // 1. Process root span\n      const rootSpanJson = convertTransactionEventToSpanJson(processedEvent);\n\n      // 1.1 If the root span should be ignored, drop the whole transaction\n      if (\n        ignoreSpans?.length &&\n        shouldIgnoreSpan(\n          { description: rootSpanJson.description, op: rootSpanJson.op, attributes: rootSpanJson.data },\n          ignoreSpans,\n        )\n      ) {\n        // dropping the whole transaction!\n        return null;\n      }\n\n      // 1.2 If a `beforeSendSpan` callback is defined, process the root span\n      if (beforeSendSpan) {\n        const processedRootSpanJson = beforeSendSpan(rootSpanJson);\n        if (!processedRootSpanJson) {\n          showSpanDropWarning();\n        } else {\n          // update event with processed root span values\n          processedEvent = merge(event, convertSpanJsonToTransactionEvent(processedRootSpanJson));\n        }\n      }\n\n      // 2. Process child spans\n      if (processedEvent.spans) {\n        const processedSpans: SpanJSON[] = [];\n\n        const initialSpans = processedEvent.spans;\n\n        for (const span of initialSpans) {\n          // 2.a If the child span should be ignored, reparent it to the root span\n          if (\n            ignoreSpans?.length &&\n            shouldIgnoreSpan({ description: span.description, op: span.op, attributes: span.data }, ignoreSpans)\n          ) {\n            reparentChildSpans(initialSpans, span);\n            continue;\n          }\n\n          // 2.b If a `beforeSendSpan` callback is defined, process the child span\n          if (beforeSendSpan) {\n            const processedSpan = beforeSendSpan(span);\n            if (!processedSpan) {\n              showSpanDropWarning();\n              processedSpans.push(span);\n            } else {\n              processedSpans.push(processedSpan);\n            }\n          } else {\n            processedSpans.push(span);\n          }\n        }\n\n        const droppedSpans = processedEvent.spans.length - processedSpans.length;\n        if (droppedSpans) {\n          client.recordDroppedEvent('before_send', 'span', droppedSpans);\n        }\n\n        processedEvent.spans = processedSpans;\n      }\n    }\n\n    if (beforeSendTransaction) {\n      if (processedEvent.spans) {\n        // We store the # of spans before processing in SDK metadata,\n        // so we can compare it afterwards to determine how many spans were dropped\n        const spanCountBefore = processedEvent.spans.length;\n        processedEvent.sdkProcessingMetadata = {\n          ...event.sdkProcessingMetadata,\n          spanCountBeforeProcessing: spanCountBefore,\n        };\n      }\n      return beforeSendTransaction(processedEvent as TransactionEvent, hint);\n    }\n  }\n\n  return processedEvent;\n}\n\nfunction isErrorEvent(event: Event): event is ErrorEvent {\n  return event.type === undefined;\n}\n\nfunction isTransactionEvent(event: Event): event is TransactionEvent {\n  return event.type === 'transaction';\n}\n\n/**\n * Estimate the size of a metric in bytes.\n *\n * @param metric - The metric to estimate the size of.\n * @returns The estimated size of the metric in bytes.\n */\nfunction estimateMetricSizeInBytes(metric: Metric): number {\n  let weight = 0;\n\n  // Estimate byte size of 2 bytes per character. This is a rough estimate JS strings are stored as UTF-16.\n  if (metric.name) {\n    weight += metric.name.length * 2;\n  }\n\n  // Add weight for number\n  weight += 8;\n\n  return weight + estimateAttributesSizeInBytes(metric.attributes);\n}\n\n/**\n * Estimate the size of a log in bytes.\n *\n * @param log - The log to estimate the size of.\n * @returns The estimated size of the log in bytes.\n */\nfunction estimateLogSizeInBytes(log: Log): number {\n  let weight = 0;\n\n  // Estimate byte size of 2 bytes per character. This is a rough estimate JS strings are stored as UTF-16.\n  if (log.message) {\n    weight += log.message.length * 2;\n  }\n\n  return weight + estimateAttributesSizeInBytes(log.attributes);\n}\n\n/**\n * Estimate the size of attributes in bytes.\n *\n * @param attributes - The attributes object to estimate the size of.\n * @returns The estimated size of the attributes in bytes.\n */\nfunction estimateAttributesSizeInBytes(attributes: Record<string, unknown> | undefined): number {\n  if (!attributes) {\n    return 0;\n  }\n\n  let weight = 0;\n\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      // For objects values, we estimate the size of the object as 100 bytes\n      weight += 100;\n    }\n  });\n\n  return weight;\n}\n\nfunction estimatePrimitiveSizeInBytes(value: Primitive): number {\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\n  return 0;\n}\n", "import { DEBUG_BUILD } from '../../debug-build';\nimport { debug } from '../debug-logger';\n\n/**\n * Registry tracking which AI provider modules should skip instrumentation wrapping.\n *\n * This prevents duplicate spans when a higher-level integration (like LangChain)\n * already instruments AI providers at a higher abstraction level.\n */\nconst SKIPPED_AI_PROVIDERS = new Set<string>();\n\n/**\n * Mark AI provider modules to skip instrumentation wrapping.\n *\n * This prevents duplicate spans when a higher-level integration (like LangChain)\n * already instruments AI providers at a higher abstraction level.\n *\n * @internal\n * @param modules - Array of npm module names to skip (e.g., '@anthropic-ai/sdk', 'openai')\n *\n * @example\n * ```typescript\n * // In LangChain integration\n * _INTERNAL_skipAiProviderWrapping(['@anthropic-ai/sdk', 'openai', '@google/generative-ai']);\n * ```\n */\nexport function _INTERNAL_skipAiProviderWrapping(modules: string[]): void {\n  modules.forEach(module => {\n    SKIPPED_AI_PROVIDERS.add(module);\n    DEBUG_BUILD && debug.log(`AI provider \"${module}\" wrapping will be skipped`);\n  });\n}\n\n/**\n * Check if an AI provider module should skip instrumentation wrapping.\n *\n * @internal\n * @param module - The npm module name (e.g., '@anthropic-ai/sdk', 'openai')\n * @returns true if wrapping should be skipped\n *\n * @example\n * ```typescript\n * // In AI provider instrumentation\n * if (_INTERNAL_shouldSkipAiProviderWrapping('@anthropic-ai/sdk')) {\n *   return Reflect.construct(Original, args); // Don't instrument\n * }\n * ```\n */\nexport function _INTERNAL_shouldSkipAiProviderWrapping(module: string): boolean {\n  return SKIPPED_AI_PROVIDERS.has(module);\n}\n\n/**\n * Clear all AI provider skip registrations.\n *\n * This is automatically called at the start of Sentry.init() to ensure a clean state\n * between different client initializations.\n *\n * @internal\n */\nexport function _INTERNAL_clearAiProviderSkips(): void {\n  SKIPPED_AI_PROVIDERS.clear();\n  DEBUG_BUILD && debug.log('Cleared AI provider skip registrations');\n}\n", "import type { CollectBehavior } from '../../types/datacollection';\nimport { FILTERED_VALUE as FILTERED, SENSITIVE_KEY_SNIPPETS } from './filtering-snippets';\n\nfunction isSensitiveKey(lower: string, denySnippets: string[]): boolean {\n  return denySnippets.some(snippet => lower.includes(snippet));\n}\n\nexport function shouldFilterDataKey(key: string, behavior: CollectBehavior, additionalDenyTerms?: string[]): boolean {\n  if (behavior === false) {\n    return true;\n  }\n\n  const lowerKey = key.toLowerCase();\n  const denySnippets =\n    additionalDenyTerms != null ? [...SENSITIVE_KEY_SNIPPETS, ...additionalDenyTerms] : SENSITIVE_KEY_SNIPPETS;\n\n  if (isSensitiveKey(lowerKey, denySnippets)) {\n    return true;\n  }\n\n  if (behavior === true) {\n    return false;\n  }\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}\n\n/**\n * Filters a key-value record according to a `CollectBehavior`.\n *\n * Key names are always preserved. Values are either kept, replaced with\n * `[Filtered]`, or the entire record is dropped (off mode).\n *\n * @param additionalDenyTerms - Additional sensitive snippets to check beyond the built-in denylist.\n */\nexport function filterKeyValueData<T>(\n  data: Record<string, T>,\n  behavior: CollectBehavior,\n  additionalDenyTerms?: string[],\n): Record<string, T | string> {\n  if (behavior === false) {\n    return {};\n  }\n\n  const result: Record<string, T | string> = {};\n  for (const key of Object.keys(data)) {\n    result[key] = shouldFilterDataKey(key, behavior, additionalDenyTerms) ? FILTERED : data[key]!;\n  }\n  return result;\n}\n", "/**\n * This code was originally copied from the 'cookie` module at v0.5.0 and was simplified for our use case.\n * https://github.com/jshttp/cookie/blob/a0c84147aab6266bdb3996cf4062e93907c0b0fc/index.js\n * It had the following license:\n *\n * (The MIT License)\n *\n * Copyright (c) 2012-2014 Roman Shtylman <shtylman@gmail.com>\n * Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * 'Software'), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * Parses a cookie string\n */\nexport function parseCookie(str: string): Record<string, string> {\n  const obj: Record<string, string> = {};\n  let index = 0;\n\n  while (index < str.length) {\n    const eqIdx = str.indexOf('=', index);\n\n    // no more cookie pairs\n    if (eqIdx === -1) {\n      break;\n    }\n\n    let endIdx = str.indexOf(';', index);\n\n    if (endIdx === -1) {\n      endIdx = str.length;\n    } else if (endIdx < eqIdx) {\n      // backtrack on prior semicolon\n      index = str.lastIndexOf(';', eqIdx - 1) + 1;\n      continue;\n    }\n\n    const key = str.slice(index, eqIdx).trim();\n\n    // only assign once\n    if (undefined === obj[key]) {\n      let val = str.slice(eqIdx + 1, endIdx).trim();\n\n      // quoted values\n      if (val.charCodeAt(0) === 0x22) {\n        val = val.slice(1, -1);\n      }\n\n      try {\n        obj[key] = val.indexOf('%') !== -1 ? decodeURIComponent(val) : val;\n      } catch {\n        obj[key] = val;\n      }\n    }\n\n    index = endIdx + 1;\n  }\n\n  return obj;\n}\n", "import type { CollectBehavior } from '../../types/datacollection';\nimport { FILTERED_VALUE } from './filtering-snippets';\nimport { shouldFilterDataKey } from './filterKeyValueData';\n\n/**\n * Filters a query parameter string according to a `CollectBehavior`.\n *\n * Parameter names are decoded for filtering, while the original encoding, order, and duplicate keys are preserved.\n */\nexport function filterQueryParams(queryString: string, behavior: CollectBehavior): string | undefined {\n  if (!queryString || behavior === false) {\n    return undefined;\n  }\n\n  return queryString\n    .split('&')\n    .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\n      return key !== undefined && shouldFilterDataKey(key, behavior) ? `${encodedKey}=${FILTERED_VALUE}` : pair;\n    })\n    .join('&');\n}\n", "import type { CollectBehavior } from '../../types/datacollection';\nimport { filterQueryParams } from './filterQueryParams';\n\n/**\n * Applies a `CollectBehavior` to the query string of a full URL, leaving every other URL component\n * (scheme, host, path, fragment) untouched.\n *\n * The query is located by string offsets rather than by parsing, so the URL is returned byte-for-byte\n * apart from the query itself. This keeps relative URLs, non-HTTP schemes and unusual encodings intact,\n * none of which survive a `URL` round-trip.\n *\n * Returns the URL with its query filtered, or with the query removed entirely when collection is off.\n */\nexport function filterUrlQuery(url: string, behavior: CollectBehavior): string {\n  // The fragment is delimited first: a `?` after a `#` belongs to the fragment, not the query.\n  const fragmentStart = url.indexOf('#');\n  const queryEnd = fragmentStart === -1 ? url.length : fragmentStart;\n\n  const queryStart = url.indexOf('?');\n  if (queryStart === -1 || queryStart > queryEnd) {\n    return url;\n  }\n\n  const prefix = url.slice(0, queryStart);\n  const query = url.slice(queryStart + 1, queryEnd);\n  const suffix = url.slice(queryEnd);\n\n  const filtered = filterQueryParams(query, behavior);\n\n  return filtered ? `${prefix}?${filtered}${suffix}` : `${prefix}${suffix}`;\n}\n", "import type { Client } from '../../client';\nimport { getClient } from '../../currentScopes';\nimport type { CollectBehavior } from '../../types/datacollection';\nimport { filterQueryParams } from './filterQueryParams';\nimport { filterUrlQuery } from './filterUrlQuery';\n\nfunction urlQueryParamsBehavior(client: Client | undefined): CollectBehavior {\n  // Instrumentation can run before a client exists; the denylist default is the safe fallback.\n  return (client ?? getClient())?.getDataCollectionOptions().urlQueryParams ?? true;\n}\n\n/**\n * Applies `dataCollection.urlQueryParams` to a URL the SDK collected itself, for use as `url.full`.\n *\n * Call this at every site where instrumentation records a URL. Routing the SDK's own URLs through a\n * helper is what makes the filtering provenance-correct: a URL a user attaches themselves never passes\n * through here, and `dataCollection` is only meant to gate automatically collected data.\n *\n * Pass the `client` the URL belongs to whenever one is at hand — falling back to `getClient()` resolves\n * against the current scope, which is the wrong client in a multi-client setup.\n */\nexport function filterCollectedUrl(url: string, client?: Client): string;\nexport function filterCollectedUrl(url: string | undefined, client?: Client): string | undefined;\nexport function filterCollectedUrl(url: string | undefined, client?: Client): string | undefined {\n  return url === undefined ? undefined : filterUrlQuery(url, urlQueryParamsBehavior(client));\n}\n\n/**\n * Applies `dataCollection.urlQueryParams` to a query string the SDK collected itself, for use as\n * `url.query`. Returns `undefined` when the query must not be collected at all.\n *\n * See {@link filterCollectedUrl} for why this is a helper and why passing `client` is preferred.\n */\nexport function filterCollectedUrlQuery(query: string | undefined, client?: Client): string | undefined {\n  // An empty query is passed through as-is so call sites keep emitting the same shape as before.\n  if (!query) {\n    return query;\n  }\n\n  // v10 records `URL.search` verbatim, so the leading `?` has to survive filtering.\n  const hasPrefix = query.startsWith('?');\n  const filtered = filterQueryParams(hasPrefix ? query.slice(1) : query, urlQueryParamsBehavior(client));\n  return filtered && hasPrefix ? `?${filtered}` : filtered;\n}\n", "export const FALSY_ENV_VALUES = new Set(['false', 'f', 'n', 'no', 'off', '0']);\nexport const TRUTHY_ENV_VALUES = new Set(['true', 't', 'y', 'yes', 'on', '1']);\n\nexport type StrictBoolCast = {\n  strict: true;\n};\n\nexport type LooseBoolCast = {\n  strict?: false;\n};\n\nexport type BoolCastOptions = StrictBoolCast | LooseBoolCast;\n\nexport function envToBool(value: unknown, options?: LooseBoolCast): boolean;\nexport function envToBool(value: unknown, options: StrictBoolCast): boolean | null;\nexport function envToBool(value: unknown, options?: BoolCastOptions): boolean | null;\n/**\n * A helper function which casts an ENV variable value to `true` or `false` using the constants defined above.\n * In strict mode, it may return `null` if the value doesn't match any of the predefined values.\n *\n * @param value The value of the env variable\n * @param options -- Only has `strict` key for now, which requires a strict match for `true` in TRUTHY_ENV_VALUES\n * @returns true/false if the lowercase value matches the predefined values above. If not, null in strict mode,\n *          and Boolean(value) in loose mode.\n */\nexport function envToBool(value: unknown, options?: BoolCastOptions): boolean | null {\n  const normalized = String(value).toLowerCase();\n\n  if (FALSY_ENV_VALUES.has(normalized)) {\n    return false;\n  }\n\n  if (TRUTHY_ENV_VALUES.has(normalized)) {\n    return true;\n  }\n\n  return options?.strict ? null : Boolean(value);\n}\n", "import type { SerializedCheckIn } from './types/checkin';\nimport type { DsnComponents } from './types/dsn';\nimport type { CheckInEnvelope, CheckInItem, DynamicSamplingContext } from './types/envelope';\nimport type { SdkMetadata } from './types/sdkmetadata';\nimport { dsnToString } from './utils/dsn';\nimport { createEnvelope } from './utils/envelope';\nimport { safeDateNow } from './utils/randomSafeContext';\n\n/**\n * Create envelope from check in item.\n */\nexport function createCheckInEnvelope(\n  checkIn: SerializedCheckIn,\n  dynamicSamplingContext?: Partial<DynamicSamplingContext>,\n  metadata?: SdkMetadata,\n  tunnel?: string,\n  dsn?: DsnComponents,\n): CheckInEnvelope {\n  const headers: CheckInEnvelope[0] = {\n    sent_at: new Date(safeDateNow()).toISOString(),\n  };\n\n  if (metadata?.sdk) {\n    headers.sdk = {\n      name: metadata.sdk.name,\n      version: metadata.sdk.version,\n    };\n  }\n\n  if (!!tunnel && !!dsn) {\n    headers.dsn = dsnToString(dsn);\n  }\n\n  if (dynamicSamplingContext) {\n    headers.trace = dynamicSamplingContext as DynamicSamplingContext;\n  }\n\n  const item = createCheckInEnvelopeItem(checkIn);\n  return createEnvelope<CheckInEnvelope>(headers, [item]);\n}\n\nfunction createCheckInEnvelopeItem(checkIn: SerializedCheckIn): CheckInItem {\n  const checkInHeaders: CheckInItem[0] = {\n    type: 'check_in',\n  };\n  return [checkInHeaders, checkIn];\n}\n", "import { URL_FULL } from '@sentry/conventions/attributes';\nimport {\n  SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '../semanticAttributes';\nimport type { Client } from '../client';\nimport type { SpanAttributes } from '../types/span';\nimport { filterCollectedUrl, filterCollectedUrlQuery } from './data-collection/filterCollectedUrl';\n\ntype PartialURL = {\n  host?: string;\n  path?: string;\n  protocol?: string;\n  relative?: string;\n  search?: string;\n  hash?: string;\n};\n\ninterface URLwithCanParse extends URL {\n  canParse: (url: string, base?: string | URL | undefined) => boolean;\n}\n\n// A subset of the URL object that is valid for relative URLs\n// The URL object cannot handle relative URLs, so we need to handle them separately\ntype RelativeURL = {\n  isRelative: true;\n  pathname: URL['pathname'];\n  search: URL['search'];\n  hash: URL['hash'];\n};\n\ntype URLObject = RelativeURL | URL;\n\n// Curious about `thismessage:/`? See: https://www.rfc-editor.org/rfc/rfc2557.html\n//  > When the methods above do not yield an absolute URI, a base URL\n//  > of \"thismessage:/\" MUST be employed. This base URL has been\n//  > defined for the sole purpose of resolving relative references\n//  > within a multipart/related structure when no other base URI is\n//  > specified.\n//\n// We need to provide a base URL to `parseStringToURLObject` because the fetch API gives us a\n// relative URL sometimes.\n//\n// This is the only case where we need to provide a base URL to `parseStringToURLObject`\n// because the relative URL is not valid on its own.\nconst DEFAULT_BASE_URL = 'thismessage:/';\n\n/**\n * Checks if the URL object is relative\n *\n * @param url - The URL object to check\n * @returns True if the URL object is relative, false otherwise\n */\nexport function isURLObjectRelative(url: URLObject): url is RelativeURL {\n  return 'isRelative' in url;\n}\n\n/**\n * Parses string to a URL object\n *\n * @param url - The URL to parse\n * @returns The parsed URL object or undefined if the URL is invalid\n */\nexport function parseStringToURLObject(url: string, urlBase?: string | URL | undefined): URLObject | undefined {\n  const isRelative = url.indexOf('://') <= 0 && url.indexOf('//') !== 0;\n  const base = urlBase ?? (isRelative ? DEFAULT_BASE_URL : undefined);\n  try {\n    // Use `canParse` to short-circuit the URL constructor if it's not a valid URL\n    // This is faster than trying to construct the URL and catching the error\n    // Node 20+, Chrome 120+, Firefox 115+, Safari 17+\n    if ('canParse' in URL && !(URL as unknown as URLwithCanParse).canParse(url, base)) {\n      return undefined;\n    }\n\n    const fullUrlObject = new URL(url, base);\n    if (isRelative) {\n      // Because we used a fake base URL, we need to return a relative URL object.\n      // We cannot return anything about the origin, host, etc. because it will refer to the fake base URL.\n      return {\n        isRelative,\n        pathname: fullUrlObject.pathname,\n        search: fullUrlObject.search,\n        hash: fullUrlObject.hash,\n      };\n    }\n    return fullUrlObject;\n  } catch {\n    // empty body\n  }\n\n  return undefined;\n}\n\n/**\n * Takes a URL object and returns a sanitized string which is safe to use as span name\n * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data\n */\nexport function getSanitizedUrlStringFromUrlObject(url: URLObject): string {\n  if (isURLObjectRelative(url)) {\n    return url.pathname;\n  }\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\n  return newUrl.toString();\n}\n\ntype PartialRequest = {\n  method?: string;\n};\n\nfunction getHttpSpanNameFromUrlObject(\n  urlObject: URLObject | undefined,\n  kind: 'server' | 'client',\n  request?: PartialRequest,\n  routeName?: string,\n): string {\n  const method = request?.method?.toUpperCase() ?? 'GET';\n  const route = routeName\n    ? routeName\n    : urlObject\n      ? kind === 'client'\n        ? getSanitizedUrlStringFromUrlObject(urlObject)\n        : urlObject.pathname\n      : '/';\n\n  return `${method} ${route}`;\n}\n\n/**\n * Takes a parsed URL object and returns a set of attributes for the span\n * that represents the HTTP request for that url. This is used for both server\n * and client http spans.\n *\n * Follows https://opentelemetry.io/docs/specs/semconv/http/.\n *\n * @param urlObject - see {@link parseStringToURLObject}\n * @param kind - The type of HTTP operation (server or client)\n * @param spanOrigin - The origin of the span\n * @param request - The request object, see {@link PartialRequest}\n * @param routeName - The name of the route, must be low cardinality\n * @param client - The client the span belongs to, used to resolve `dataCollection.urlQueryParams`.\n * Falls back to the current scope's client when omitted, which is the wrong one in a multi-client setup.\n * @returns The span name and attributes for the HTTP operation\n */\nexport function getHttpSpanDetailsFromUrlObject(\n  urlObject: URLObject | undefined,\n  kind: 'server' | 'client',\n  spanOrigin: string,\n  request?: PartialRequest,\n  routeName?: string,\n  client?: Client,\n): [name: string, attributes: SpanAttributes] {\n  const attributes: SpanAttributes = {\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanOrigin,\n    [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n  };\n\n  if (routeName) {\n    // This is based on https://opentelemetry.io/docs/specs/semconv/http/http-spans/#name\n    attributes[kind === 'server' ? 'http.route' : 'url.template'] = routeName;\n    attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] = 'route';\n  }\n\n  if (request?.method) {\n    attributes[SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD] = request.method.toUpperCase();\n  }\n\n  if (urlObject) {\n    if (urlObject.search) {\n      attributes['url.query'] = filterCollectedUrlQuery(urlObject.search, client);\n    }\n    if (urlObject.hash) {\n      attributes['url.fragment'] = urlObject.hash;\n    }\n    if (urlObject.pathname) {\n      attributes['url.path'] = urlObject.pathname;\n      if (urlObject.pathname === '/') {\n        attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] = 'route';\n      }\n    }\n\n    if (!isURLObjectRelative(urlObject)) {\n      attributes[URL_FULL] = filterCollectedUrl(urlObject.href, client);\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\n  return [getHttpSpanNameFromUrlObject(urlObject, kind, request, routeName), attributes];\n}\n\n/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not <a/> href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nexport function parseUrl(url: string): PartialURL {\n  if (!url) {\n    return {};\n  }\n\n  const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n  if (!match) {\n    return {};\n  }\n\n  // coerce to undefined values to empty string so we don't get 'undefined'\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, // everything minus origin\n  };\n}\n\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\nexport function stripUrlQueryAndFragment(urlPath: string): string {\n  return (urlPath.split(/[?#]/, 1) as [string, ...string[]])[0];\n}\n\n/**\n * Takes a URL object and returns a sanitized string which is safe to use as span name\n * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data\n */\nexport function getSanitizedUrlString(url: PartialURL): string {\n  const { protocol, host, path } = url;\n\n  const filteredHost =\n    host\n      // Always filter out authority\n      ?.replace(/^.*@/, '[filtered]:[filtered]@')\n      // Don't show standard :80 (http) and :443 (https) ports to reduce the noise\n      // TODO: Use new URL global if it exists\n      .replace(/(:80)$/, '')\n      .replace(/(:443)$/, '') || '';\n\n  return `${protocol ? `${protocol}://` : ''}${filteredHost}${path}`;\n}\n\n/**\n * Strips the content from a data URL, returning a placeholder with the MIME type.\n *\n * Data URLs can be very long (e.g. base64 encoded scripts for Web Workers),\n * with little valuable information, often leading to envelopes getting dropped due\n * to size limit violations. Therefore, we strip data URLs and replace them with a\n * placeholder.\n *\n * @param url - The URL to process\n * @param includeDataPrefix - If true, includes the first 10 characters of the data stream\n *                            for debugging (e.g., to identify magic bytes like WASM's AGFzbQ).\n *                            Defaults to true.\n * @returns For data URLs, returns a short format like `data:text/javascript;base64,SGVsbG8gV2... [truncated]`.\n *          For non-data URLs, returns the original URL unchanged.\n */\nexport function stripDataUrlContent(url: string, includeDataPrefix: boolean = true): string {\n  if (url.startsWith('data:')) {\n    // Match the MIME type (everything after 'data:' until the first ';' or ',')\n    const match = url.match(/^data:([^;,]+)/);\n    const mimeType = match ? match[1] : 'text/plain';\n    const isBase64 = url.includes(';base64,');\n\n    // Find where the actual data starts (after the comma)\n    const dataStart = url.indexOf(',');\n    let dataPrefix = '';\n    if (includeDataPrefix && dataStart !== -1) {\n      const data = url.slice(dataStart + 1);\n      // Include first 10 chars of data to help identify content (e.g., magic bytes)\n      dataPrefix = data.length > 10 ? `${data.slice(0, 10)}... [truncated]` : data;\n    }\n\n    return `data:${mimeType}${isBase64 ? ',base64' : ''}${dataPrefix ? `,${dataPrefix}` : ''}`;\n  }\n  return url;\n}\n", "import type { Client } from '../client';\nimport type { DsnComponents } from '../types/dsn';\nimport { isURLObjectRelative, parseStringToURLObject } from './url';\n\n/**\n * Checks whether given url points to Sentry server\n *\n * @param url url to verify\n */\nexport function isSentryRequestUrl(url: string, client: Client | undefined): boolean {\n  const dsn = client?.getDsn();\n  const tunnel = client?.getOptions().tunnel;\n  return checkDsn(url, dsn) || checkTunnel(url, tunnel);\n}\n\nfunction checkTunnel(url: string, tunnel: string | undefined): boolean {\n  if (!tunnel) {\n    return false;\n  }\n\n  return removeTrailingSlash(url) === removeTrailingSlash(tunnel);\n}\n\nfunction checkDsn(url: string, dsn: DsnComponents | undefined): boolean {\n  // Requests to Sentry's ingest endpoint must have a `sentry_key` in the query string\n  // This is equivalent to the public_key which is required in the DSN\n  // see https://develop.sentry.dev/sdk/overview/#parsing-the-dsn\n  // Therefore, a request to the same host and with a `sentry_key` in the query string\n  // can be considered a request to the ingest endpoint.\n  const urlParts = parseStringToURLObject(url);\n  if (!urlParts || isURLObjectRelative(urlParts)) {\n    return false;\n  }\n\n  if (!dsn) {\n    return false;\n  }\n\n  return hostnameMatchesDsnHost(urlParts.hostname, dsn.host) && /(^|&|\\?)sentry_key=/.test(urlParts.search);\n}\n\nfunction hostnameMatchesDsnHost(hostname: string, dsnHost: string): boolean {\n  return hostname === dsnHost || (dsnHost.length > 0 && hostname.endsWith(`.${dsnHost}`));\n}\n\nfunction removeTrailingSlash(str: string): string {\n  return str[str.length - 1] === '/' ? str.slice(0, -1) : str;\n}\n", "import type { CoreOptions } from '../types/options';\nimport { SDK_VERSION } from '../utils/version';\n\n/**\n * A builder for the SDK metadata in the options for the SDK initialization.\n *\n * Note: This function is identical to `buildMetadata` in Remix and NextJS and SvelteKit.\n * We don't extract it for bundle size reasons.\n * @see https://github.com/getsentry/sentry-javascript/pull/7404\n * @see https://github.com/getsentry/sentry-javascript/pull/4196\n *\n * If you make changes to this function consider updating the others as well.\n *\n * @param options SDK options object that gets mutated\n * @param names list of package names\n */\nexport function applySdkMetadata(options: CoreOptions, name: string, names = [name], source = 'npm'): void {\n  const sdk = ((options._metadata = options._metadata || {}).sdk = options._metadata.sdk || {});\n\n  if (!sdk.name) {\n    sdk.name = `sentry.javascript.${name}`;\n    sdk.packages = names.map(name => ({\n      name: `${source}:@sentry/${name}`,\n      version: SDK_VERSION,\n    }));\n    sdk.version = SDK_VERSION;\n  }\n}\n", "import { getAsyncContextStrategy } from '../asyncContext';\nimport { getMainCarrier } from '../carrier';\nimport type { Client } from '../client';\nimport { getClient, getCurrentScope, hasExternalPropagationContext } from '../currentScopes';\nimport { isEnabled } from '../exports';\nimport type { Scope } from '../scope';\nimport { getDynamicSamplingContextFromScope, getDynamicSamplingContextFromSpan } from '../tracing';\nimport { spanIsNonRecordingSpan } from '../tracing/sentryNonRecordingSpan';\nimport type { Span } from '../types/span';\nimport type { SerializedTraceData } from '../types/tracing';\nimport { dynamicSamplingContextToSentryBaggageHeader } from './baggage';\nimport { debug } from './debug-logger';\nimport { hasSpansEnabled } from './hasSpansEnabled';\nimport { getActiveSpan, spanToTraceHeader, spanToTraceparentHeader } from './spanUtils';\nimport { generateSentryTraceHeader, generateTraceparentHeader, TRACEPARENT_REGEXP } from './tracing';\n\n/**\n * Extracts trace propagation data from the current span or from the client's scope (via transaction or propagation\n * context) and serializes it to `sentry-trace` and `baggage` values. These values can be used to propagate\n * a trace via our tracing Http headers or Html `<meta>` tags.\n *\n * This function also applies some validation to the generated sentry-trace and baggage values to ensure that\n * only valid strings are returned.\n *\n * When an external propagation context is registered (e.g. via the OTLP integration) and there is no active\n * Sentry span, this function returns an empty object to defer outgoing request propagation to the external\n * propagator (e.g. an OpenTelemetry propagator).\n *\n * If (@param options.propagateTraceparent) is `true`, the function will also generate a `traceparent` value,\n * following the W3C traceparent header format.\n *\n * @returns an object with the tracing data values. The object keys are the name of the tracing key to be used as header\n * or meta tag name.\n */\nexport function getTraceData(\n  options: { span?: Span; scope?: Scope; client?: Client; propagateTraceparent?: boolean } = {},\n): SerializedTraceData {\n  const client = options.client || getClient();\n  if (!isEnabled() || !client) {\n    return {};\n  }\n\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  if (acs.getTraceData) {\n    return acs.getTraceData(options);\n  }\n\n  const scope = options.scope || getCurrentScope();\n  const span = options.span || getActiveSpan();\n\n  // In Tracing-without-Performance (TwP) mode, spans are non-recording placeholders that carry no\n  // sampling decision of their own (it's deferred). The scope is the source of truth, so we read\n  // the trace headers from the scope. A non-recording span in *tracing* mode (e.g. an unsampled\n  // child or an ignored span) is different: it represents an explicit negative decision, which\n  // `spanToTraceHeader` correctly encodes as `-0`, so we keep reading those from the span.\n  const isTwpPlaceholder = spanIsNonRecordingSpan(span) && !hasSpansEnabled(client.getOptions());\n\n  // When there's no recording span and an external propagation context is registered (e.g. OTLP\n  // integration), return empty to let the external propagator handle outgoing request propagation.\n  if (!span && hasExternalPropagationContext()) {\n    return {};\n  }\n\n  const sentryTrace = span && !isTwpPlaceholder ? spanToTraceHeader(span) : scopeToTraceHeader(scope);\n  const dsc = span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromScope(client, scope);\n  const baggage = dynamicSamplingContextToSentryBaggageHeader(dsc);\n\n  const isValidSentryTraceHeader = TRACEPARENT_REGEXP.test(sentryTrace);\n  if (!isValidSentryTraceHeader) {\n    debug.warn('Invalid sentry-trace data. Cannot generate trace data');\n    return {};\n  }\n\n  const traceData: SerializedTraceData = {\n    'sentry-trace': sentryTrace,\n    baggage,\n  };\n\n  if (options.propagateTraceparent) {\n    traceData.traceparent = span && !isTwpPlaceholder ? spanToTraceparentHeader(span) : scopeToTraceparentHeader(scope);\n  }\n\n  return traceData;\n}\n\n/**\n * Get a sentry-trace header value for the given scope.\n */\nfunction scopeToTraceHeader(scope: Scope): string {\n  const { traceId, sampled, propagationSpanId } = scope.getPropagationContext();\n  return generateSentryTraceHeader(traceId, propagationSpanId, sampled);\n}\n\nfunction scopeToTraceparentHeader(scope: Scope): string {\n  const { traceId, sampled, propagationSpanId } = scope.getPropagationContext();\n  return generateTraceparentHeader(traceId, propagationSpanId, sampled);\n}\n", "import { DEBUG_BUILD } from '../debug-build';\nimport type { CoreOptions as Options } from '../types/options';\nimport { debug } from './debug-logger';\nimport type { LRUMap } from './lru';\nimport { stringMatchesSomePattern } from './string';\n\nconst NOT_PROPAGATED_MESSAGE =\n  '[Tracing] Not injecting trace data for url because it does not match tracePropagationTargets:';\n\n/**\n * Check if a given URL should be propagated to or not.\n * If no url is defined, or no trace propagation targets are defined, this will always return `true`.\n * You can also optionally provide a decision map, to cache decisions and avoid repeated regex lookups.\n */\nexport function shouldPropagateTraceForUrl(\n  url: string | undefined,\n  tracePropagationTargets: Options['tracePropagationTargets'],\n  decisionMap?: LRUMap<string, boolean>,\n): boolean {\n  if (typeof url !== 'string' || !tracePropagationTargets) {\n    return true;\n  }\n\n  const cachedDecision = decisionMap?.get(url);\n  if (cachedDecision !== undefined) {\n    DEBUG_BUILD && !cachedDecision && debug.log(NOT_PROPAGATED_MESSAGE, url);\n    return cachedDecision;\n  }\n\n  const decision = stringMatchesSomePattern(url, tracePropagationTargets);\n  decisionMap?.set(url, decision);\n\n  DEBUG_BUILD && !decision && debug.log(NOT_PROPAGATED_MESSAGE, url);\n  return decision;\n}\n", "/* eslint-disable max-lines-per-function */\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Scope } from '../scope';\nimport type { ResolvedDataCollection } from '../types/datacollection';\nimport type { PolymorphicRequest } from '../types/polymorphics';\nimport type { RequestEventData } from '../types/request';\nimport type { WebFetchHeaders, WebFetchRequest } from '../types/webfetchapi';\nimport { debug } from './debug-logger';\nimport { defaultPiiToCollectionOptions } from './data-collection/defaultPiiToCollectionOptions';\nimport { FILTERED_VALUE, SENSITIVE_COOKIE_NAME_SNIPPETS } from './data-collection/filtering-snippets';\nimport { filterKeyValueData } from './data-collection/filterKeyValueData';\nimport { safeUnref } from './timer';\n\n/**\n * Maximum size of incoming HTTP request bodies attached to events.\n *\n * - `'none'`: No request bodies will be attached\n * - `'small'`: Request bodies up to 1,000 bytes will be attached\n * - `'medium'`: Request bodies up to 10,000 bytes will be attached\n * - `'always'`: Request bodies will always be attached (up to 1MB hard cap)\n */\nexport type MaxRequestBodySize = 'none' | 'small' | 'medium' | 'always';\n\n/** Hard cap on captured body size, even when `maxRequestBodySize` is `'always'`. */\nexport const MAX_BODY_BYTE_LENGTH = 1_024 * 1_024;\n\n/** Content types that are safe to capture as text. */\nconst TEXT_CONTENT_TYPES = [\n  'text/',\n  'application/json',\n  'application/x-www-form-urlencoded',\n  'application/xml',\n  'application/graphql',\n];\n\n/**\n * Convert a `maxRequestBodySize` setting to a maximum byte length.\n */\nexport function getMaxBodyByteLength(maxRequestBodySize: Exclude<MaxRequestBodySize, 'none'>): number {\n  if (maxRequestBodySize === 'small') return 1_000;\n  if (maxRequestBodySize === 'medium') return 10_000;\n  return MAX_BODY_BYTE_LENGTH;\n}\n\n/**\n * Transforms a `Headers` object that implements the `Web Fetch API` (https://developer.mozilla.org/en-US/docs/Web/API/Headers) into a simple key-value dict.\n * The header keys will be lower case: e.g. A \"Content-Type\" header will be stored as \"content-type\".\n */\nexport function winterCGHeadersToDict(winterCGHeaders: WebFetchHeaders): Record<string, string> {\n  const headers: Record<string, string> = {};\n  try {\n    winterCGHeaders.forEach((value, key) => {\n      if (typeof value === 'string') {\n        // We check that value is a string even though it might be redundant to make sure prototype pollution is not possible.\n        headers[key] = value;\n      }\n    });\n  } catch {\n    // just return the empty headers\n  }\n\n  return headers;\n}\n\n/**\n * Convert common request headers to a simple dictionary.\n */\nexport function headersToDict(\n  reqHeaders: Record<string, string | string[] | undefined | number>,\n): Record<string, string> {\n  const headers: Record<string, string> = Object.create(null);\n\n  try {\n    Object.entries(reqHeaders).forEach(([key, value]) => {\n      if (typeof value === 'string') {\n        headers[key] = value;\n      } else if (typeof value === 'number') {\n        headers[key] = String(value);\n      }\n    });\n  } catch {\n    // just return the empty headers\n  }\n\n  return headers;\n}\n\n/**\n * Converts a `Request` object that implements the `Web Fetch API` (https://developer.mozilla.org/en-US/docs/Web/API/Headers) into the format that the `RequestData` integration understands.\n */\nexport function winterCGRequestToRequestData(req: WebFetchRequest): RequestEventData {\n  const headers = winterCGHeadersToDict(req.headers);\n\n  return {\n    method: req.method,\n    url: req.url,\n    query_string: extractQueryParamsFromUrl(req.url),\n    headers,\n    // TODO: Can we extract body data from the request?\n  };\n}\n\n/**\n * Checks if the content type is textual and safe to capture.\n */\nfunction isTextualContentType(contentType: string | null): boolean {\n  if (!contentType) {\n    return false;\n  }\n  const lowerContentType = contentType.toLowerCase();\n  return TEXT_CONTENT_TYPES.some(type => lowerContentType.includes(type));\n}\n\n/**\n * Captures the body from a Web Fetch API Request and adds it to the isolation scope.\n *\n * This function clones the request to read the body without affecting the original.\n * Only textual content types are captured - binary data is skipped.\n *\n * This is used by WinterCG-compatible runtimes (Cloudflare Workers, Deno, Bun, Vercel Edge, etc.)\n * that use the Web Fetch API Request object.\n *\n * @param request - The incoming Web Fetch API Request\n * @param isolationScope - The isolation scope to add the body to\n * @param maxRequestBodySize - The maximum size of the request body to capture ('small' = 1KB, 'medium' = 10KB, 'always' = 1MB)\n */\nexport async function captureBodyFromWinterCGRequest(\n  request: WebFetchRequest,\n  isolationScope: Scope,\n  maxRequestBodySize: Exclude<MaxRequestBodySize, 'none'>,\n): Promise<void> {\n  try {\n    const contentType = request.headers.get('content-type');\n\n    if (!isTextualContentType(contentType)) {\n      DEBUG_BUILD && debug.log('Skipping body capture for non-textual content type:', contentType);\n      return;\n    }\n\n    if (!request.body) {\n      return;\n    }\n\n    const contentLength = request.headers.get('content-length');\n    const maxBodySize = getMaxBodyByteLength(maxRequestBodySize);\n\n    if (contentLength) {\n      const length = parseInt(contentLength, 10);\n      if (!isNaN(length) && length > MAX_BODY_BYTE_LENGTH) {\n        DEBUG_BUILD && debug.log('Skipping body capture: body too large', length);\n        return;\n      }\n    }\n\n    const clonedRequest = request.clone();\n    const bodyPromise = clonedRequest.text();\n    const timeoutPromise = new Promise<null>(resolve => {\n      safeUnref(setTimeout(() => resolve(null), 2000));\n    });\n\n    const body = await Promise.race([bodyPromise, timeoutPromise]);\n\n    if (body === null) {\n      DEBUG_BUILD && debug.log('Timeout reading request body');\n      return;\n    }\n\n    if (!body) {\n      return;\n    }\n\n    // Using TextEncoder to get byte length for UTF-8 strings\n    const encoder = new TextEncoder();\n    const bytes = encoder.encode(body);\n    const bodyByteLength = bytes.length;\n\n    let truncatedBody: string;\n    if (bodyByteLength > maxBodySize) {\n      const decoder = new TextDecoder();\n      truncatedBody = `${decoder.decode(bytes.slice(0, maxBodySize - 3))}...`;\n    } else {\n      truncatedBody = body;\n    }\n\n    isolationScope.setSDKProcessingMetadata({ normalizedRequest: { data: truncatedBody } });\n\n    DEBUG_BUILD && debug.log('Captured request body:', bodyByteLength, 'bytes');\n  } catch (error) {\n    DEBUG_BUILD && debug.error('Error capturing request body:', error);\n  }\n}\n\n/**\n * Convert a HTTP request object to RequestEventData to be passed as normalizedRequest.\n * Instead of allowing `PolymorphicRequest` to be passed,\n * we want to be more specific and generally require a http.IncomingMessage-like object.\n */\nexport function httpRequestToRequestData(request: {\n  method?: string;\n  url?: string;\n  headers?: {\n    [key: string]: string | string[] | undefined;\n  };\n  protocol?: string;\n  socket?: {\n    encrypted?: boolean;\n    remoteAddress?: string;\n  };\n}): RequestEventData {\n  const headers = request.headers || {};\n\n  // Check for x-forwarded-host first, then fall back to host header\n  const forwardedHost = typeof headers['x-forwarded-host'] === 'string' ? headers['x-forwarded-host'] : undefined;\n  const host = forwardedHost || (typeof headers.host === 'string' ? headers.host : undefined);\n\n  // Check for x-forwarded-proto first, then fall back to existing protocol detection\n  const forwardedProto = typeof headers['x-forwarded-proto'] === 'string' ? headers['x-forwarded-proto'] : undefined;\n  const protocol = forwardedProto || request.protocol || (request.socket?.encrypted ? 'https' : 'http');\n\n  const url = request.url || '';\n\n  const absoluteUrl = getAbsoluteUrl({\n    url,\n    host,\n    protocol,\n  });\n\n  // This is non-standard, but may be sometimes set\n  // It may be overwritten later by our own body handling\n  const data = (request as PolymorphicRequest).body || undefined;\n\n  // This is non-standard, but may be set on e.g. Next.js or Express requests\n  const cookies = (request as PolymorphicRequest).cookies;\n\n  return {\n    url: absoluteUrl,\n    method: request.method,\n    query_string: extractQueryParamsFromUrl(url),\n    headers: headersToDict(headers),\n    cookies,\n    data,\n  };\n}\n\nfunction getAbsoluteUrl({\n  url,\n  protocol,\n  host,\n}: {\n  url?: string;\n  protocol: string;\n  host?: string;\n}): string | undefined {\n  if (url?.startsWith('http')) {\n    return url;\n  }\n\n  if (url && host) {\n    return `${protocol}://${host}${url}`;\n  }\n\n  return undefined;\n}\n\n/**\n * Converts incoming HTTP request or response headers to OpenTelemetry span attributes following semantic conventions.\n * Header names are converted to the format: http.<request|response>.header.<key>\n * where <key> is the header name in lowercase with dashes converted to underscores.\n *\n * @param lifecycle - The lifecycle of the headers, either 'request' or 'response'\n *\n * @see https://opentelemetry.io/docs/specs/semconv/registry/attributes/http/#http-request-header\n * @see https://opentelemetry.io/docs/specs/semconv/registry/attributes/http/#http-response-header\n *\n * @see https://getsentry.github.io/sentry-conventions/attributes/http/#http-request-header-key\n * @see https://getsentry.github.io/sentry-conventions/attributes/http/#http-response-header-key\n */\nexport function httpHeadersToSpanAttributes(\n  headers: Record<string, string | string[] | undefined>,\n  // TODO(v11): Remove boolean support once sendDefaultPii is fully removed.\n  // Internally, always pass ResolvedDataCollection from client.getDataCollectionOptions().\n  dataCollection: ResolvedDataCollection | boolean = false,\n  lifecycle: 'request' | 'response' = 'request',\n): Record<string, string> {\n  const resolvedDataCollection =\n    typeof dataCollection === 'boolean' ? defaultPiiToCollectionOptions(dataCollection) : dataCollection;\n\n  const headerBehavior =\n    lifecycle === 'request' ? resolvedDataCollection.httpHeaders.request : resolvedDataCollection.httpHeaders.response;\n  const cookieBehavior = resolvedDataCollection.cookies;\n  const prefix = `http.${lifecycle}.header.`;\n\n  const spanAttributes: Record<string, string> = {};\n\n  try {\n    const regularHeaders: Record<string, string> = {};\n\n    for (const [key, value] of Object.entries(headers)) {\n      if (value == null) {\n        continue;\n      }\n\n      const lowerKey = key.toLowerCase();\n      const isCookieHeader = lowerKey === 'cookie' || lowerKey === 'set-cookie';\n\n      if (isCookieHeader) {\n        if (cookieBehavior === false) {\n          continue;\n        }\n\n        if (typeof value === 'string' && value !== '') {\n          const parsed = parseCookieHeader(value, lowerKey === 'set-cookie');\n          const filtered = filterKeyValueData(parsed, cookieBehavior, SENSITIVE_COOKIE_NAME_SNIPPETS);\n          for (const [cookieKey, cookieValue] of Object.entries(filtered)) {\n            spanAttributes[`${prefix}${normalizeAttributeKey(lowerKey)}.${normalizeAttributeKey(cookieKey)}`] =\n              cookieValue;\n          }\n        } else {\n          spanAttributes[`${prefix}${normalizeAttributeKey(lowerKey)}`] = FILTERED_VALUE;\n        }\n      } else {\n        if (headerBehavior === false) {\n          continue;\n        }\n\n        if (Array.isArray(value)) {\n          regularHeaders[lowerKey] = value.map(v => (v != null ? String(v) : v)).join(';');\n        } else if (typeof value === 'string') {\n          regularHeaders[lowerKey] = value;\n        }\n      }\n    }\n\n    if (headerBehavior !== false) {\n      const filtered = filterKeyValueData(regularHeaders, headerBehavior);\n      for (const [headerKey, headerValue] of Object.entries(filtered)) {\n        spanAttributes[`${prefix}${normalizeAttributeKey(headerKey)}`] = headerValue;\n      }\n    }\n  } catch {\n    // Return empty object if there's an error\n  }\n\n  return spanAttributes;\n}\n\nfunction normalizeAttributeKey(key: string): string {\n  return key.replace(/-/g, '_');\n}\n\nfunction parseCookieHeader(value: string, isSetCookie: boolean): Record<string, string> {\n  // Set-Cookie: single cookie with attributes (\"name=value; HttpOnly; Secure\")\n  // Cookie: multiple cookies separated by \"; \" (\"cookie1=value1; cookie2=value2\")\n  const semicolonIndex = value.indexOf(';');\n  const cookieString = isSetCookie && semicolonIndex !== -1 ? value.substring(0, semicolonIndex) : value;\n  const cookies = isSetCookie ? [cookieString] : cookieString.split('; ');\n\n  const result: Record<string, string> = {};\n  for (const cookie of cookies) {\n    const equalSignIndex = cookie.indexOf('=');\n    const cookieKey = (equalSignIndex !== -1 ? cookie.substring(0, equalSignIndex) : cookie).toLowerCase();\n    const cookieValue = equalSignIndex !== -1 ? cookie.substring(equalSignIndex + 1) : '';\n    result[cookieKey] = cookieValue;\n  }\n  return result;\n}\n\n/** Extract the query params from an URL. */\nexport function extractQueryParamsFromUrl(url: string): string | undefined {\n  // url is path and query string\n  if (!url) {\n    return;\n  }\n\n  try {\n    // The `URL` constructor can't handle internal URLs of the form `/some/path/here`, so stick a dummy protocol and\n    // hostname as the base. Since the point here is just to grab the query string, it doesn't matter what we use.\n    const queryParams = new URL(url, 'http://s.io').search.slice(1);\n    return queryParams.length ? queryParams : undefined;\n  } catch {\n    return undefined;\n  }\n}\n", "/**\n * The kind of a span, mirroring OpenTelemetry's `SpanKind` enum values.\n *\n * Exported as a plain const object so SDK code can set a span's kind without\n * importing `@opentelemetry/api` just for the enum. The numeric values must\n * stay in sync with OpenTelemetry's `SpanKind` since they are passed through to\n * the underlying OTel span and sampler.\n */\nexport const SPAN_KIND = {\n  INTERNAL: 0,\n  SERVER: 1,\n  CLIENT: 2,\n  PRODUCER: 3,\n  CONSUMER: 4,\n} as const;\n\nexport type SpanKindValue = (typeof SPAN_KIND)[keyof typeof SPAN_KIND];\n\n// Reverse of SPAN_KIND (value → name), for the `otel.kind` attribute. The numeric keys come from\n// SPAN_KIND so they stay in sync; `satisfies` ensures every kind has a name.\nconst SPAN_KIND_NAME = {\n  [SPAN_KIND.INTERNAL]: 'INTERNAL',\n  [SPAN_KIND.SERVER]: 'SERVER',\n  [SPAN_KIND.CLIENT]: 'CLIENT',\n  [SPAN_KIND.PRODUCER]: 'PRODUCER',\n  [SPAN_KIND.CONSUMER]: 'CONSUMER',\n} as const satisfies Record<SpanKindValue, string>;\n\n/**\n * Resolve the string name of a span kind value (e.g. `1` → `'SERVER'`), mirroring the reverse\n * mapping of OpenTelemetry's `SpanKind` enum. Used for the `otel.kind` span attribute, so SDK\n * code doesn't need to import `@opentelemetry/api` just for that reverse lookup.\n */\nexport function spanKindToName(kind: number): (typeof SPAN_KIND_NAME)[SpanKindValue] | undefined {\n  return SPAN_KIND_NAME[kind as SpanKindValue];\n}\n", "import { getClient, getIsolationScope } from './currentScopes';\nimport type { Breadcrumb, BreadcrumbHint } from './types/breadcrumb';\nimport { consoleSandbox } from './utils/debug-logger';\nimport { dateTimestampInSeconds } from './utils/time';\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 100;\n\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n */\nexport function addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void {\n  const client = getClient();\n  const isolationScope = getIsolationScope();\n\n  if (!client) return;\n\n  const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } = client.getOptions();\n\n  if (maxBreadcrumbs <= 0) return;\n\n  const timestamp = dateTimestampInSeconds();\n  const mergedBreadcrumb = { timestamp, ...breadcrumb };\n  const finalBreadcrumb = beforeBreadcrumb\n    ? consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint))\n    : mergedBreadcrumb;\n\n  if (finalBreadcrumb === null) return;\n\n  if (client.emit) {\n    client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n  }\n\n  isolationScope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n}\n", "import type { Client } from '../client';\nimport { getClient } from '../currentScopes';\nimport { defineIntegration } from '../integration';\nimport type { IntegrationFn } from '../types/integration';\nimport type { WrappedFunction } from '../types/wrappedfunction';\nimport { getOriginalFunction } from '../utils/object';\n\nconst INTEGRATION_NAME = 'FunctionToString' as const;\n\nconst SETUP_CLIENTS = new WeakMap<Client, boolean>();\n\nconst _functionToStringIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      const originalFunctionToString = Function.prototype.toString;\n\n      // intrinsics (like Function.prototype) might be immutable in some environments\n      // e.g. Node with --frozen-intrinsics, XS (an embedded JavaScript engine) or SES (a JavaScript proposal)\n      try {\n        Function.prototype.toString = function (this: WrappedFunction, ...args: unknown[]): string {\n          const originalFunction = getOriginalFunction(this);\n          let unwrappedFunction: WrappedFunction | undefined;\n\n          try {\n            if (SETUP_CLIENTS.has(getClient() as Client) && originalFunction !== undefined) {\n              unwrappedFunction = originalFunction;\n            }\n          } catch {\n            // Reading the Sentry carrier off `getClient()` can throw a `SecurityError` when `this` (or the global\n            // object) is a `WindowProxy` whose browsing context was navigated cross-origin. The native\n            // `toString` never throws here, so fall back to it to avoid turning harmless introspection into noise.\n          }\n\n          return originalFunctionToString.apply(unwrappedFunction ?? this, args);\n        };\n      } catch {\n        // ignore errors here, just don't patch this\n      }\n    },\n    setup(client) {\n      SETUP_CLIENTS.set(client, true);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Patch toString calls to return proper name for wrapped functions.\n *\n * ```js\n * Sentry.init({\n *   integrations: [\n *     functionToStringIntegration(),\n *   ],\n * });\n * ```\n */\nexport const functionToStringIntegration = defineIntegration(_functionToStringIntegration);\n", "import { DEBUG_BUILD } from '../debug-build';\nimport { defineIntegration } from '../integration';\nimport type { Event } from '../types/event';\nimport type { IntegrationFn } from '../types/integration';\nimport type { StackFrame } from '../types/stackframe';\nimport { debug } from '../utils/debug-logger';\nimport { getPossibleEventMessages } from '../utils/eventUtils';\nimport { getEventDescription } from '../utils/misc';\nimport { stringMatchesSomePattern } from '../utils/string';\n\n// \"Script error.\" is hard coded into browsers for errors that it can't read.\n// this is the result of a script being pulled in from an external domain and CORS.\nconst DEFAULT_IGNORE_ERRORS = [\n  /^Script error\\.?$/,\n  /^Javascript error: Script error\\.? on line 0$/,\n  /^ResizeObserver loop completed with undelivered notifications.$/, // 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$/, // This is thrown when google tag manager is used in combination with an ad blocker\n  /^Can't find variable: gmo$/, // Error from Google Search App https://issuetracker.google.com/issues/396043331\n  /^undefined is not an object \\(evaluating 'a\\.[A-Z]'\\)$/, // Random error that happens but not actionable or noticeable to end-users.\n  /can't redefine non-configurable property \"solana\"/, // Probably a browser extension or custom browser (Brave) throwing this error\n  /vv\\(\\)\\.getRestrictions is not a function/, // Error thrown by GTM, seemingly not affecting end-users\n  /Can't find variable: _AutofillCallbackHandler/, // Unactionable error in instagram webview https://developers.facebook.com/community/threads/320013549791141/\n  /Object Not Found Matching Id:\\d+, MethodName:simulateEvent/, // unactionable error from CEFSharp, a .NET library that embeds chromium in .NET apps\n  /Java exception was raised during method invocation$/, // 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$/, // error from Facebook Mobile browser (https://github.com/getsentry/sentry-javascript/issues/15065, https://github.com/getsentry/sentry-javascript/issues/23733)\n];\n\n/** Options for the EventFilters integration */\nexport interface EventFiltersOptions {\n  allowUrls: Array<string | RegExp>;\n  denyUrls: Array<string | RegExp>;\n  ignoreErrors: Array<string | RegExp>;\n  ignoreTransactions: Array<string | RegExp>;\n  ignoreInternal: boolean;\n  disableErrorDefaults: boolean;\n}\n\nconst INTEGRATION_NAME = 'EventFilters' as const;\n\n/**\n * An integration that filters out events (errors and transactions) based on:\n *\n * - (Errors) A curated list of known low-value or irrelevant errors (see {@link DEFAULT_IGNORE_ERRORS})\n * - (Errors) A list of error messages or urls/filenames passed in via\n *   - Top level Sentry.init options (`ignoreErrors`, `denyUrls`, `allowUrls`)\n *   - The same options passed to the integration directly via @param options\n * - (Transactions/Spans) A list of root span (transaction) names passed in via\n *   - Top level Sentry.init option (`ignoreTransactions`)\n *   - The same option passed to the integration directly via @param options\n *\n * Events filtered by this integration will not be sent to Sentry.\n */\nexport const eventFiltersIntegration = defineIntegration((options: Partial<EventFiltersOptions> = {}) => {\n  let mergedOptions: Partial<EventFiltersOptions> | undefined;\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});\n\n/**\n * An integration that filters out events (errors and transactions) based on:\n *\n * - (Errors) A curated list of known low-value or irrelevant errors (see {@link DEFAULT_IGNORE_ERRORS})\n * - (Errors) A list of error messages or urls/filenames passed in via\n *   - Top level Sentry.init options (`ignoreErrors`, `denyUrls`, `allowUrls`)\n *   - The same options passed to the integration directly via @param options\n * - (Transactions/Spans) A list of root span (transaction) names passed in via\n *   - Top level Sentry.init option (`ignoreTransactions`)\n *   - The same option passed to the integration directly via @param options\n *\n * Events filtered by this integration will not be sent to Sentry.\n *\n * @deprecated this integration was renamed and will be removed in a future major version.\n * Use `eventFiltersIntegration` instead.\n */\nexport const inboundFiltersIntegration = defineIntegration(((options: Partial<EventFiltersOptions> = {}) => {\n  return {\n    ...eventFiltersIntegration(options),\n    name: 'InboundFilters' as const,\n  };\n}) satisfies IntegrationFn);\n\nfunction _mergeOptions(\n  internalOptions: Partial<EventFiltersOptions> = {},\n  clientOptions: Partial<EventFiltersOptions> = {},\n): Partial<EventFiltersOptions> {\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}\n\nfunction _shouldDropEvent(event: Event, options: Partial<EventFiltersOptions>): boolean {\n  if (!event.type) {\n    // Filter errors\n    if (_isIgnoredError(event, options.ignoreErrors)) {\n      DEBUG_BUILD &&\n        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 &&\n        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 &&\n        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 &&\n        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    // Filter transactions\n\n    if (_isIgnoredTransaction(event, options.ignoreTransactions)) {\n      DEBUG_BUILD &&\n        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}\n\nfunction _isIgnoredError(event: Event, ignoreErrors?: Array<string | RegExp>): boolean {\n  if (!ignoreErrors?.length) {\n    return false;\n  }\n\n  return getPossibleEventMessages(event).some(message => stringMatchesSomePattern(message, ignoreErrors));\n}\n\nfunction _isIgnoredTransaction(event: Event, ignoreTransactions?: Array<string | RegExp>): boolean {\n  if (!ignoreTransactions?.length) {\n    return false;\n  }\n\n  const name = event.transaction;\n  return name ? stringMatchesSomePattern(name, ignoreTransactions) : false;\n}\n\nfunction _isDeniedUrl(event: Event, denyUrls?: Array<string | RegExp>): boolean {\n  if (!denyUrls?.length) {\n    return false;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? false : stringMatchesSomePattern(url, denyUrls);\n}\n\nfunction _isAllowedUrl(event: Event, allowUrls?: Array<string | RegExp>): boolean {\n  if (!allowUrls?.length) {\n    return true;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? true : stringMatchesSomePattern(url, allowUrls);\n}\n\nfunction _getLastValidUrl(frames: StackFrame[] = []): string | null {\n  for (let i = frames.length - 1; i >= 0; i--) {\n    const frame = frames[i];\n\n    if (frame && frame.filename !== '<anonymous>' && frame.filename !== '[native code]') {\n      return frame.filename || null;\n    }\n  }\n\n  return null;\n}\n\nfunction _getEventFilterUrl(event: Event): string | null {\n  try {\n    // If there are linked exceptions or exception aggregates we only want to match against the top frame of the \"root\" (the main exception)\n    // The root always comes last in linked exceptions\n    const rootException = [...(event.exception?.values ?? [])]\n      .reverse()\n      .find(value => value.mechanism?.parent_id === undefined && 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}\n\nfunction _isUselessError(event: Event): boolean {\n  // We only want to consider events for dropping that actually have recorded exception values.\n  if (!event.exception?.values?.length) {\n    return false;\n  }\n\n  return (\n    // No top-level message\n    !event.message &&\n    // 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", "import type { ExtendedError } from '../types/error';\nimport type { Event, EventHint } from '../types/event';\nimport type { Exception } from '../types/exception';\nimport type { StackParser } from '../types/stacktrace';\nimport { isError } from './is';\n\n/**\n * Creates exceptions inside `event.exception.values` for errors that are nested on properties based on the `key` parameter.\n */\nexport function applyAggregateErrorsToEvent(\n  exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,\n  parser: StackParser,\n  key: string,\n  limit: number,\n  event: Event,\n  hint?: EventHint,\n): void {\n  if (!event.exception?.values || !hint || !isError(hint.originalException)) {\n    return;\n  }\n\n  // Generally speaking the last item in `event.exception.values` is the exception originating from the original Error\n  const originalException: Exception | undefined =\n    event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : undefined;\n\n  // We only create exception grouping if there is an exception in the event.\n  if (originalException) {\n    event.exception.values = aggregateExceptionsFromError(\n      exceptionFromErrorImplementation,\n      parser,\n      limit,\n      hint.originalException as ExtendedError,\n      key,\n      event.exception.values,\n      originalException,\n      0,\n    );\n  }\n}\n\nfunction aggregateExceptionsFromError(\n  exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,\n  parser: StackParser,\n  limit: number,\n  error: ExtendedError,\n  key: string,\n  prevExceptions: Exception[],\n  exception: Exception,\n  exceptionId: number,\n): Exception[] {\n  if (prevExceptions.length >= limit + 1) {\n    return prevExceptions;\n  }\n\n  let newExceptions = [...prevExceptions];\n\n  // Recursively call this function in order to walk down a chain of errors\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] as ExtendedError,\n      key,\n      [newException, ...newExceptions],\n      newException,\n      newExceptionId,\n    );\n  }\n\n  // This will create exception grouping for AggregateErrors\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError\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 as ExtendedError,\n          key,\n          [newException, ...newExceptions],\n          newException,\n          newExceptionId,\n        );\n      }\n    });\n  }\n\n  return newExceptions;\n}\n\nfunction isExceptionGroup(error: ExtendedError): error is ExtendedError & { errors: unknown[] } {\n  return Array.isArray(error.errors);\n}\n\nfunction applyExceptionGroupFieldsForParentException(\n  exception: Exception,\n  exceptionId: number,\n  error: ExtendedError,\n): void {\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}\n\nfunction applyExceptionGroupFieldsForChildException(\n  exception: Exception,\n  source: string,\n  exceptionId: number,\n  parentId: number | undefined,\n): void {\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", "import type { Client } from '../client';\nimport type { Event, EventHint } from '../types/event';\nimport type { Exception } from '../types/exception';\nimport type { Extras } from '../types/extra';\nimport type { Mechanism } from '../types/mechanism';\nimport type { ParameterizedString } from '../types/parameterize';\nimport type { SeverityLevel } from '../types/severity';\nimport type { StackFrame } from '../types/stackframe';\nimport type { StackParser } from '../types/stacktrace';\nimport { isError, isErrorEvent, isParameterizedString, isPlainObject } from './is';\nimport { addExceptionMechanism, addExceptionTypeValue } from './misc';\nimport { normalizeToSize } from './normalize';\nimport { extractExceptionKeysForMessage } from './object';\n\n/**\n * Extracts stack frames from the error.stack string\n */\nexport function parseStackFrames(stackParser: StackParser, error: Error): StackFrame[] {\n  return stackParser(error.stack || '', 1);\n}\n\nfunction hasSentryFetchUrlHost(error: unknown): error is Error & { __sentry_fetch_url_host__: string } {\n  return isError(error) && '__sentry_fetch_url_host__' in error && typeof error.__sentry_fetch_url_host__ === 'string';\n}\n\n/**\n * Enhances the error message with the hostname for better Sentry error reporting.\n * This allows third-party packages to still match on the original error message,\n * while Sentry gets the enhanced version with context.\n *\n * Only used internally\n * @hidden\n */\nexport function _enhanceErrorWithSentryInfo<T extends Error>(error: T): string {\n  // If the error has a __sentry_fetch_url_host__ property (added by fetch instrumentation),\n  // enhance the error message with the hostname.\n  if (hasSentryFetchUrlHost(error)) {\n    return `${error.message} (${error.__sentry_fetch_url_host__})`;\n  }\n\n  return error.message;\n}\n\n/**\n * Extracts stack frames from the error and builds a Sentry Exception\n */\nexport function exceptionFromError(stackParser: StackParser, error: Error): Exception {\n  const exception: Exception = {\n    type: error.name || error.constructor.name,\n    value: _enhanceErrorWithSentryInfo(error),\n  };\n\n  const frames = parseStackFrames(stackParser, error);\n  if (frames.length) {\n    exception.stacktrace = { frames };\n  }\n\n  return exception;\n}\n\n/** If a plain object has a property that is an `Error`, return this error. */\nfunction getErrorPropertyFromObject(obj: Record<string, unknown>): Error | undefined {\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\n  return undefined;\n}\n\nfunction getMessageForObject(exception: Record<string, unknown>): string {\n  if ('name' in exception && typeof exception.name === 'string') {\n    let message = `'${exception.name}' captured as exception`;\n\n    if ('message' in exception && typeof exception.message === 'string') {\n      message += ` with message '${exception.message}'`;\n    }\n\n    return message;\n  } else if ('message' in exception && typeof exception.message === 'string') {\n    return exception.message;\n  }\n\n  const keys = extractExceptionKeysForMessage(exception);\n\n  // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n  // We still want to try to get a decent message for these cases\n  if (isErrorEvent(exception)) {\n    return `Event \\`ErrorEvent\\` captured as exception with message \\`${exception.message}\\``;\n  }\n\n  const className = getObjectClassName(exception);\n\n  return `${\n    className && className !== 'Object' ? `'${className}'` : 'Object'\n  } captured as exception with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj: unknown): string | undefined | void {\n  try {\n    const prototype: unknown | null = Object.getPrototypeOf(obj);\n    return prototype ? prototype.constructor.name : undefined;\n  } catch {\n    // ignore errors here\n  }\n}\n\nfunction getException(\n  client: Client,\n  mechanism: Mechanism,\n  exception: unknown,\n  hint?: EventHint,\n): [Error, Extras | undefined] {\n  if (isError(exception)) {\n    return [exception, undefined];\n  }\n\n  // Mutate this!\n  mechanism.synthetic = true;\n\n  if (isPlainObject(exception)) {\n    const normalizeDepth = client?.getOptions().normalizeDepth;\n    const extras = { ['__serialized__']: normalizeToSize(exception, normalizeDepth) };\n\n    const errorFromProp = getErrorPropertyFromObject(exception);\n    if (errorFromProp) {\n      return [errorFromProp, extras];\n    }\n\n    const message = getMessageForObject(exception);\n    const ex = hint?.syntheticException || new Error(message);\n    ex.message = message;\n\n    return [ex, extras];\n  }\n\n  // This handles when someone does: `throw \"something awesome\";`\n  // We use synthesized Error here so we can extract a (rough) stack trace.\n  const ex = hint?.syntheticException || new Error(exception as string);\n  ex.message = `${exception}`;\n\n  return [ex, undefined];\n}\n\n/**\n * Builds and Event from a Exception\n * @hidden\n */\nexport function eventFromUnknownInput(\n  client: Client,\n  stackParser: StackParser,\n  exception: unknown,\n  hint?: EventHint,\n): Event {\n  const providedMechanism: Mechanism | undefined = hint?.data && (hint.data as { mechanism: Mechanism }).mechanism;\n  const mechanism: Mechanism = providedMechanism || {\n    handled: true,\n    type: 'generic',\n  };\n\n  const [ex, extras] = getException(client, mechanism, exception, hint);\n\n  const event: Event = {\n    exception: {\n      values: [exceptionFromError(stackParser, ex)],\n    },\n  };\n\n  if (extras) {\n    event.extra = extras;\n  }\n\n  addExceptionTypeValue(event, undefined, undefined);\n  addExceptionMechanism(event, mechanism);\n\n  return {\n    ...event,\n    event_id: hint?.event_id,\n  };\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n  stackParser: StackParser,\n  message: ParameterizedString,\n  level: SeverityLevel = 'info',\n  hint?: EventHint,\n  attachStacktrace?: boolean,\n): Event {\n  const event: Event = {\n    event_id: hint?.event_id,\n    level,\n  };\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\n  if (isParameterizedString(message)) {\n    const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n    event.logentry = {\n      message: __sentry_template_string__,\n      params: __sentry_template_values__,\n    };\n    return event;\n  }\n\n  event.message = message;\n  return event;\n}\n", "import { defineIntegration } from '../integration';\nimport type { IntegrationFn } from '../types/integration';\nimport { applyAggregateErrorsToEvent } from '../utils/aggregate-errors';\nimport { exceptionFromError } from '../utils/eventbuilder';\n\ninterface LinkedErrorsOptions {\n  key?: string;\n  limit?: number;\n}\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\nconst INTEGRATION_NAME = 'LinkedErrors' as const;\n\nconst _linkedErrorsIntegration = ((options: LinkedErrorsOptions = {}) => {\n  const limit = options.limit || DEFAULT_LIMIT;\n  const key = options.key || DEFAULT_KEY;\n\n  return {\n    name: INTEGRATION_NAME,\n    preprocessEvent(event, hint, client) {\n      const options = client.getOptions();\n\n      applyAggregateErrorsToEvent(exceptionFromError, options.stackParser, key, limit, event, hint);\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const linkedErrorsIntegration = defineIntegration(_linkedErrorsIntegration);\n", "// Vendored / modified from @sergiodxa/remix-utils\n\n// https://github.com/sergiodxa/remix-utils/blob/02af80e12829a53696bfa8f3c2363975cf59f55e/src/server/get-client-ip-address.ts\n// Copyright (c) 2021 Sergio Xalambrí\n// SPDX-License-Identifier: MIT\n\n// The headers to check, in priority order\nexport const ipHeaderNames = [\n  'X-Client-IP',\n  'X-Forwarded-For',\n  'Fly-Client-IP',\n  'CF-Connecting-IP',\n  'Fastly-Client-Ip',\n  'True-Client-Ip',\n  'X-Real-IP',\n  'X-Cluster-Client-IP',\n  'X-Forwarded',\n  'Forwarded-For',\n  'Forwarded',\n  'X-Vercel-Forwarded-For',\n];\n\n/**\n * Get the IP address of the client sending a request.\n *\n * It receives a Request headers object and use it to get the\n * IP address from one of the following headers in order.\n *\n * If the IP address is valid, it will be returned. Otherwise, null will be\n * returned.\n *\n * If the header values contains more than one IP address, the first valid one\n * will be returned.\n */\nexport function getClientIPAddress(headers: { [key: string]: string | string[] | undefined }): string | null {\n  // Build a map of lowercase header names to their values for case-insensitive lookup\n  // This is needed because headers from different sources may have different casings\n  const lowerCaseHeaders: { [key: string]: string | string[] | undefined } = {};\n\n  for (const key of Object.keys(headers)) {\n    lowerCaseHeaders[key.toLowerCase()] = headers[key];\n  }\n\n  // This will end up being Array<string | string[] | undefined | null> because of the various possible values a header\n  // can take\n  const headerValues = ipHeaderNames.map((headerName: string) => {\n    const rawValue = lowerCaseHeaders[headerName.toLowerCase()];\n    const value = Array.isArray(rawValue) ? rawValue.join(';') : rawValue;\n\n    if (headerName === 'Forwarded') {\n      return parseForwardedHeader(value);\n    }\n\n    return value?.split(',').map((v: string) => v.trim());\n  });\n\n  // Flatten the array and filter out any falsy entries\n  const flattenedHeaderValues = headerValues.reduce((acc: string[], val) => {\n    if (!val) {\n      return acc;\n    }\n\n    return acc.concat(val);\n  }, []);\n\n  // Find the first value which is a valid IP address, if any\n  const ipAddress = flattenedHeaderValues.find(ip => ip !== null && isIP(ip));\n\n  return ipAddress || null;\n}\n\nfunction parseForwardedHeader(value: string | null | undefined): string | null {\n  if (!value) {\n    return null;\n  }\n\n  for (const part of value.split(';')) {\n    if (part.startsWith('for=')) {\n      return part.slice(4);\n    }\n  }\n\n  return null;\n}\n\n//\n/**\n * Custom method instead of importing this from `net` package, as this only exists in node\n * Accepts:\n * 127.0.0.1\n * 192.168.1.1\n * 192.168.1.255\n * 255.255.255.255\n * 10.1.1.1\n * 0.0.0.0\n * 2b01:cb19:8350:ed00:d0dd:fa5b:de31:8be5\n *\n * Rejects:\n * 1.1.1.01\n * 30.168.1.255.1\n * 127.1\n * 192.168.1.256\n * -1.2.3.4\n * 1.1.1.1.\n * 3...3\n * 192.168.1.099\n */\nfunction isIP(str: string): boolean {\n  const regex =\n    /(?:^(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}$)|(?:^(?:(?:[a-fA-F\\d]{1,4}:){7}(?:[a-fA-F\\d]{1,4}|:)|(?:[a-fA-F\\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|:[a-fA-F\\d]{1,4}|:)|(?:[a-fA-F\\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,2}|:)|(?:[a-fA-F\\d]{1,4}:){4}(?:(?::[a-fA-F\\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,3}|:)|(?:[a-fA-F\\d]{1,4}:){3}(?:(?::[a-fA-F\\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,4}|:)|(?:[a-fA-F\\d]{1,4}:){2}(?:(?::[a-fA-F\\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,5}|:)|(?:[a-fA-F\\d]{1,4}:){1}(?:(?::[a-fA-F\\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,6}|:)|(?::(?:(?::[a-fA-F\\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,7}|:)))(?:%[0-9a-zA-Z]{1,})?$)/;\n  return regex.test(str);\n}\n", "import type { Client } from '../client';\nimport { getIsolationScope } from '../currentScopes';\nimport { defineIntegration } from '../integration';\nimport { SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS } from '../semanticAttributes';\nimport type { CollectBehavior, ResolvedDataCollection } from '../types/datacollection';\nimport type { Event } from '../types/event';\nimport type { IntegrationFn } from '../types/integration';\nimport type { QueryParams, RequestEventData } from '../types/request';\nimport type { StreamedSpanJSON } from '../types/span';\nimport { parseCookie } from '../utils/cookie';\nimport { filterQueryParams } from '../utils/data-collection/filterQueryParams';\nimport { filterUrlQuery } from '../utils/data-collection/filterUrlQuery';\nimport { httpHeadersToSpanAttributes } from '../utils/request';\nimport { getClientIPAddress, ipHeaderNames } from '../vendor/getIpAddress';\nimport { safeSetSpanJSONAttributes } from '../tracing/spans/captureSpan';\nimport { URL_FULL, URL_QUERY } from '@sentry/conventions/attributes';\n\ninterface RequestDataIncludeOptions {\n  cookies?: boolean;\n  data?: boolean;\n  headers?: boolean;\n  ip?: boolean;\n  query_string?: boolean;\n  url?: boolean;\n}\n\ntype RequestDataIntegrationOptions = {\n  /**\n   * Controls what data is pulled from the request and added to the event.\n   */\n  include?: RequestDataIncludeOptions;\n};\n\nconst INTEGRATION_NAME = 'RequestData' as const;\n\nconst _requestDataIntegration = ((options: RequestDataIntegrationOptions = {}) => {\n  // Per spec, integration-level options override global dataCollection.\n  // When include overrides a category back on that dataCollection turned off,\n  // we flip the dataCollection behavior to true (default denylist filtering).\n  function resolveIncludeAndDataCollection(client: Client): {\n    include: RequestDataIncludeOptions;\n    dataCollection: ResolvedDataCollection;\n  } {\n    const dc = client.getDataCollectionOptions();\n    const dataCollection: ResolvedDataCollection = {\n      ...dc,\n      ...(options.include?.cookies === true && dc.cookies === false && { cookies: true as const }),\n      ...(options.include?.headers === true &&\n        dc.httpHeaders.request === false && {\n          httpHeaders: { ...dc.httpHeaders, request: true as const },\n        }),\n      ...(options.include?.query_string === true && dc.urlQueryParams === false && { urlQueryParams: true as const }),\n    };\n\n    return {\n      dataCollection,\n      include: {\n        cookies: dataCollection.cookies !== false,\n        // Always attach body data that's already on the scope — dataCollection.httpBodies gates write-time, not read-time\n        data: true,\n        headers: dataCollection.httpHeaders.request !== false,\n        ip: dataCollection.userInfo,\n        query_string: dataCollection.urlQueryParams !== false,\n        // No dataCollection equivalent — URL is always included\n        url: true,\n        ...options.include,\n      },\n    };\n  }\n\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(event, _hint, client) {\n      const { sdkProcessingMetadata = {} } = event;\n      const { normalizedRequest, ipAddress } = sdkProcessingMetadata;\n\n      const { include, dataCollection } = resolveIncludeAndDataCollection(client);\n\n      if (normalizedRequest) {\n        addNormalizedRequestDataToEvent(event, normalizedRequest, { ipAddress }, include, dataCollection);\n      }\n\n      return event;\n    },\n    processSegmentSpan(span, client) {\n      const { sdkProcessingMetadata = {} } = getIsolationScope().getScopeData();\n      const { normalizedRequest, ipAddress } = sdkProcessingMetadata;\n\n      if (!normalizedRequest) {\n        return;\n      }\n\n      const { include, dataCollection } = resolveIncludeAndDataCollection(client);\n\n      addNormalizedRequestDataToSpan(span, normalizedRequest, ipAddress, include, dataCollection);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Add data about a request to an event. Primarily for use in Node-based SDKs, but included in `@sentry/core`\n * so it can be used in cross-platform SDKs like `@sentry/nextjs`.\n */\nexport const requestDataIntegration = defineIntegration(_requestDataIntegration);\n\n/**\n * Add already normalized request data to an event.\n * This mutates the passed in event.\n */\nfunction addNormalizedRequestDataToEvent(\n  event: Event,\n  req: RequestEventData,\n  // Data that should not go into `event.request` but is somehow related to requests\n  additionalData: { ipAddress?: string },\n  include: RequestDataIncludeOptions,\n  dataCollection: ResolvedDataCollection,\n): void {\n  const requestData = extractNormalizedRequestData(req, include);\n  if (requestData.query_string) {\n    requestData.query_string = normalizeAndFilterQueryString(requestData.query_string, dataCollection.urlQueryParams);\n  }\n  if (requestData.url) {\n    requestData.url = filterUrlQuery(requestData.url, dataCollection.urlQueryParams);\n  }\n\n  event.request = {\n    ...event.request,\n    ...requestData,\n  };\n\n  if (include.ip) {\n    const ip = (req.headers && getClientIPAddress(req.headers)) || additionalData.ipAddress;\n    if (ip) {\n      event.user = {\n        ...event.user,\n        ip_address: ip,\n      };\n    }\n  }\n}\n\nfunction addNormalizedRequestDataToSpan(\n  span: StreamedSpanJSON,\n  normalizedRequest: RequestEventData,\n  ipAddress: string | undefined,\n  include: RequestDataIncludeOptions,\n  dataCollection: ResolvedDataCollection,\n): void {\n  const requestData = extractNormalizedRequestData(normalizedRequest, include);\n  const attributes: Record<string, unknown> = {};\n\n  if (requestData.url) {\n    attributes[URL_FULL] = filterUrlQuery(requestData.url, dataCollection.urlQueryParams);\n  }\n\n  if (requestData.method) {\n    attributes['http.request.method'] = requestData.method;\n  }\n\n  if (requestData.query_string) {\n    attributes[URL_QUERY] = normalizeAndFilterQueryString(requestData.query_string, dataCollection.urlQueryParams);\n  }\n\n  safeSetSpanJSONAttributes(span, attributes);\n\n  // Process cookies before headers so normalizedRequest.cookies takes precedence\n  // over the raw cookie header (matching the processEvent path).\n  if (requestData.cookies && Object.keys(requestData.cookies).length > 0) {\n    const cookieString = Object.entries(requestData.cookies)\n      .map(([name, value]) => `${name}=${value}`)\n      .join('; ');\n    const cookieAttributes = httpHeadersToSpanAttributes({ cookie: cookieString }, dataCollection, 'request');\n    safeSetSpanJSONAttributes(span, cookieAttributes);\n  }\n\n  if (requestData.headers) {\n    const headerAttributes = httpHeadersToSpanAttributes(requestData.headers, dataCollection, 'request');\n    safeSetSpanJSONAttributes(span, headerAttributes);\n  }\n\n  if (requestData.data != null) {\n    const serialized = typeof requestData.data === 'string' ? requestData.data : JSON.stringify(requestData.data);\n    if (serialized) {\n      safeSetSpanJSONAttributes(span, { 'http.request.body.data': serialized });\n    }\n  }\n\n  if (include.ip) {\n    const ip = (normalizedRequest.headers && getClientIPAddress(normalizedRequest.headers)) || ipAddress || undefined;\n    if (ip) {\n      safeSetSpanJSONAttributes(span, { [SEMANTIC_ATTRIBUTE_USER_IP_ADDRESS]: ip });\n    }\n  }\n}\n\nfunction extractNormalizedRequestData(\n  normalizedRequest: RequestEventData,\n  include: RequestDataIncludeOptions,\n): RequestEventData {\n  const requestData: RequestEventData = {};\n  const headers = { ...normalizedRequest.headers };\n\n  if (include.headers) {\n    requestData.headers = headers;\n\n    if (!include.cookies) {\n      delete (headers as { cookie?: string }).cookie;\n    }\n\n    if (!include.ip) {\n      const ipHeaderNamesLower = new Set(ipHeaderNames.map(name => name.toLowerCase()));\n      for (const key of Object.keys(headers)) {\n        if (ipHeaderNamesLower.has(key.toLowerCase())) {\n          // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n          delete (headers as Record<string, unknown>)[key];\n        }\n      }\n    }\n  }\n\n  requestData.method = normalizedRequest.method;\n\n  if (include.url) {\n    requestData.url = normalizedRequest.url;\n  }\n\n  if (include.cookies) {\n    const cookies = normalizedRequest.cookies || (headers?.cookie ? parseCookie(headers.cookie) : undefined);\n    requestData.cookies = cookies || {};\n  }\n\n  if (include.query_string) {\n    requestData.query_string = normalizedRequest.query_string;\n  }\n\n  if (include.data) {\n    requestData.data = normalizedRequest.data;\n  }\n\n  return requestData;\n}\n\nfunction normalizeAndFilterQueryString(queryString: QueryParams, behavior: CollectBehavior): string | undefined {\n  const normalized = normalizeQueryString(queryString);\n  return normalized ? filterQueryParams(normalized, behavior) : undefined;\n}\n\nfunction normalizeQueryString(queryString: QueryParams): string | undefined {\n  if (typeof queryString === 'string') {\n    return queryString || undefined;\n  }\n\n  const pairs = Array.isArray(queryString) ? queryString : Object.entries(queryString);\n  const normalized = new URLSearchParams(pairs).toString();\n  return normalized || undefined;\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { ConsoleLevel, HandlerDataConsole } from '../types/instrument';\nimport { CONSOLE_LEVELS, originalConsoleMethods } from '../utils/debug-logger';\nimport { fill } from '../utils/object';\nimport { stringMatchesSomePattern } from '../utils/string';\nimport { GLOBAL_OBJ } from '../utils/worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers';\nimport { debug } from '../utils/debug-logger';\n\n/**\n * Filter out console messages that match the given strings or regular expressions.\n * These will neither be passed to the handler, and they will also not be logged to the user, unless they have debug enabled.\n * This is a set to avoid duplicate integration setups to add the same filter multiple times.\n */\nconst _filter = new Set<string | RegExp>([]);\n\n/**\n * Add an instrumentation handler for when a console.xxx method is called.\n * Returns a function to remove the handler.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addConsoleInstrumentationHandler(handler: (data: HandlerDataConsole) => void): () => void {\n  const type = 'console';\n  const removeHandler = addHandler(type, handler);\n  maybeInstrument(type, instrumentConsole);\n  return removeHandler;\n}\n\n/**\n * Add a filter to the console instrumentation to filter out console messages that match the given strings or regular expressions.\n * Returns a function to remove the filter.\n */\nexport function addConsoleInstrumentationFilter(filter: (string | RegExp)[]): () => void {\n  for (const f of filter) {\n    _filter.add(f);\n  }\n\n  return () => {\n    for (const f of filter) {\n      _filter.delete(f);\n    }\n  };\n}\n\n/** Only exported for tests. */\nexport function _INTERNAL_resetConsoleInstrumentationOptions(): void {\n  _filter.clear();\n}\n\n// The console levels *this* copy of the SDK has already wrapped. A copy must wrap each level at\n// most once: re-wrapping overwrites `originalConsoleMethods[level]` with a function that itself\n// reads `originalConsoleMethods[level]`, so calling through to the \"original\" (here and in\n// `consoleSandbox`) re-enters a wrapper indefinitely, ending in a `RangeError: Maximum call stack\n// size exceeded`. This can happen e.g. in React Native when instrumentation state is re-initialized\n// while the console stays wrapped. See getsentry/sentry-react-native SDK-CRASHES-REACT-NATIVE-5HZ.\n// We intentionally track this per copy rather than checking for the shared `__sentry_original__`\n// marker: a *different* SDK copy's wrapper (e.g. separate CDN bundles that each inline\n// `@sentry/core`) is safe to wrap since its call chain resolves down to the native method, and\n// skipping it would silently drop that copy's console handlers (breadcrumbs, `captureConsole`).\nconst instrumentedLevels = new Set<ConsoleLevel>();\n\n/** Only exported for tests. */\nexport function instrumentConsole(): void {\n  if (!('console' in GLOBAL_OBJ)) {\n    return;\n  }\n\n  CONSOLE_LEVELS.forEach(function (level: ConsoleLevel): void {\n    if (instrumentedLevels.has(level) || !(level in GLOBAL_OBJ.console)) {\n      return;\n    }\n\n    instrumentedLevels.add(level);\n\n    fill(GLOBAL_OBJ.console, level, function (originalConsoleMethod: () => any): Function {\n      originalConsoleMethods[level] = originalConsoleMethod;\n\n      return function (...args: any[]): void {\n        const firstArg = args[0];\n        const log = originalConsoleMethods[level];\n\n        const isFiltered = _filter.size && typeof firstArg === 'string' && stringMatchesSomePattern(firstArg, _filter);\n\n        // Only trigger handlers for non-filtered messages\n        if (!isFiltered) {\n          triggerHandlers('console', { args, level } as HandlerDataConsole);\n        }\n\n        // Only log filtered messages in debug mode\n        if (!isFiltered || (DEBUG_BUILD && debug.isEnabled())) {\n          // Call original console method\n          log?.apply(GLOBAL_OBJ.console, args);\n        }\n      };\n    });\n  });\n}\n", "import type { SeverityLevel } from '../types/severity';\n\n/**\n * Converts a string-based level into a `SeverityLevel`, normalizing it along the way.\n *\n * @param level String representation of desired `SeverityLevel`.\n * @returns The `SeverityLevel` corresponding to the given string, or 'log' if the string isn't a valid level.\n */\nexport function severityLevelFromString(level: SeverityLevel | string): SeverityLevel {\n  return (\n    level === 'warn' ? 'warning' : ['fatal', 'error', 'warning', 'log', 'info', 'debug'].includes(level) ? level : 'log'\n  ) as SeverityLevel;\n}\n", "// Slightly modified (no IE8 support, ES6) and transcribed to TypeScript\n// https://github.com/calvinmetcalf/rollup-plugin-node-builtins/blob/63ab8aacd013767445ca299e468d9a60a95328d7/src/es6/path.js\n//\n// Copyright Joyent, Inc.and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n/** JSDoc */\nfunction normalizeArray(parts: string[], allowAboveRoot?: boolean): string[] {\n  // if the path tries to go above the root, `up` ends up > 0\n  let up = 0;\n  for (let i = parts.length - 1; i >= 0; i--) {\n    const last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nconst splitPathRe = /^(\\S+:\\\\|\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^/\\\\]+?|)(\\.[^./\\\\]*|))(?:[/\\\\]*)$/;\n/** JSDoc */\nfunction splitPath(filename: string): string[] {\n  // Truncate files names greater than 1024 characters to avoid regex dos\n  // https://github.com/getsentry/sentry-javascript/pull/8737#discussion_r1285719172\n  const truncated = filename.length > 1024 ? `<truncated>${filename.slice(-1024)}` : filename;\n  const parts = splitPathRe.exec(truncated);\n  return parts ? parts.slice(1) : [];\n}\n\n// path.resolve([from ...], to)\n// posix version\n/** JSDoc */\nexport function resolve(...args: string[]): string {\n  let resolvedPath = '';\n  let resolvedAbsolute = false;\n\n  for (let i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    const path = i >= 0 ? args[i] : '/';\n\n    // Skip empty entries\n    if (!path) {\n      continue;\n    }\n\n    resolvedPath = `${path}/${resolvedPath}`;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(\n    resolvedPath.split('/').filter(p => !!p),\n    !resolvedAbsolute,\n  ).join('/');\n\n  return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n}\n\n/** JSDoc */\nfunction trim(arr: string[]): string[] {\n  let start = 0;\n  for (; start < arr.length; start++) {\n    if (arr[start] !== '') {\n      break;\n    }\n  }\n\n  let end = arr.length - 1;\n  for (; end >= 0; end--) {\n    if (arr[end] !== '') {\n      break;\n    }\n  }\n\n  if (start > end) {\n    return [];\n  }\n  return arr.slice(start, end - start + 1);\n}\n\n// path.relative(from, to)\n// posix version\n/** JSDoc */\nexport function relative(from: string, to: string): string {\n  /* eslint-disable no-param-reassign */\n  from = resolve(from).slice(1);\n  to = resolve(to).slice(1);\n  /* eslint-enable no-param-reassign */\n\n  const fromParts = trim(from.split('/'));\n  const toParts = trim(to.split('/'));\n\n  const length = Math.min(fromParts.length, toParts.length);\n  let samePartsLength = length;\n  for (let i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  let outputParts = [];\n  for (let i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n}\n\n// path.normalize(path)\n// posix version\n/** JSDoc */\nexport function normalizePath(path: string): string {\n  const isPathAbsolute = isAbsolute(path);\n  const trailingSlash = path.slice(-1) === '/';\n\n  // Normalize the path\n  let normalizedPath = normalizeArray(\n    path.split('/').filter(p => !!p),\n    !isPathAbsolute,\n  ).join('/');\n\n  if (!normalizedPath && !isPathAbsolute) {\n    normalizedPath = '.';\n  }\n  if (normalizedPath && trailingSlash) {\n    normalizedPath += '/';\n  }\n\n  return (isPathAbsolute ? '/' : '') + normalizedPath;\n}\n\n// posix version\n/** JSDoc */\nexport function isAbsolute(path: string): boolean {\n  return path.charAt(0) === '/';\n}\n\n// posix version\n/** JSDoc */\nexport function join(...args: string[]): string {\n  return normalizePath(args.join('/'));\n}\n\n/** JSDoc */\nexport function dirname(path: string): string {\n  const result = splitPath(path);\n  const root = result[0] || '';\n  let dir = result[1];\n\n  if (!root && !dir) {\n    // No dirname whatsoever\n    return '.';\n  }\n\n  if (dir) {\n    // It has a dirname, strip trailing slash\n    dir = dir.slice(0, dir.length - 1);\n  }\n\n  return root + dir;\n}\n\n/** JSDoc */\nexport function basename(path: string, ext?: string): string {\n  let f = splitPath(path)[2] || '';\n  if (ext && f.slice(ext.length * -1) === ext) {\n    f = f.slice(0, f.length - ext.length);\n  }\n  return f;\n}\n", "import { addBreadcrumb } from '../breadcrumbs';\nimport { getClient } from '../currentScopes';\nimport { addConsoleInstrumentationFilter, addConsoleInstrumentationHandler } from '../instrument/console';\nimport { defineIntegration } from '../integration';\nimport type { ConsoleLevel } from '../types/instrument';\nimport { CONSOLE_LEVELS } from '../utils/debug-logger';\nimport { severityLevelFromString } from '../utils/severity';\nimport { safeJoin } from '../utils/string';\nimport { GLOBAL_OBJ } from '../utils/worldwide';\n\ninterface ConsoleIntegrationOptions {\n  levels: ConsoleLevel[];\n  /**\n   * Filter out console messages that match the given strings or regular expressions.\n   * These will neither be passed to the handler, and they will also not be logged to the user, unless they have debug enabled.\n   */\n  filter?: (string | RegExp)[];\n}\n\ntype GlobalObjectWithUtil = typeof GLOBAL_OBJ & {\n  util: {\n    format: (...args: unknown[]) => string;\n  };\n};\n\nconst INTEGRATION_NAME = 'Console' as const;\n\n/**\n * Captures calls to the `console` API as breadcrumbs in Sentry.\n *\n * By default the integration instruments `console.debug`, `console.info`, `console.warn`, `console.error`,\n * `console.log`, `console.trace`, and `console.assert`. You can use the `levels` option to customize which\n * levels are captured.\n *\n * @example\n *\n * ```js\n * Sentry.init({\n *   integrations: [Sentry.consoleIntegration({ levels: ['error', 'warn'] })],\n * });\n * ```\n */\nexport const consoleIntegration = defineIntegration((options: Partial<ConsoleIntegrationOptions> = {}) => {\n  const levels = new Set(options.levels || CONSOLE_LEVELS);\n\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\n        addConsoleBreadcrumb(level, args);\n      });\n      client.registerCleanup(unsubscribe);\n\n      if (options.filter) {\n        const unsubscribe = addConsoleInstrumentationFilter(options.filter);\n        client.registerCleanup(unsubscribe);\n      }\n    },\n  };\n});\n\n/**\n * Capture a console breadcrumb.\n *\n * Exported just for tests.\n */\nexport function addConsoleBreadcrumb(level: ConsoleLevel, args: unknown[]): void {\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\n  if (level === 'assert') {\n    if (args[0] === false) {\n      const assertionArgs = args.slice(1);\n      breadcrumb.message =\n        assertionArgs.length > 0 ? `Assertion failed: ${formatConsoleArgs(assertionArgs)}` : 'Assertion failed';\n      breadcrumb.data.arguments = assertionArgs;\n    } else {\n      // Don't capture a breadcrumb for passed assertions\n      return;\n    }\n  }\n\n  addBreadcrumb(breadcrumb, {\n    input: args,\n    level,\n  });\n}\n\nfunction formatConsoleArgs(values: unknown[]): string {\n  return 'util' in GLOBAL_OBJ && typeof (GLOBAL_OBJ as GlobalObjectWithUtil).util.format === 'function'\n    ? (GLOBAL_OBJ as GlobalObjectWithUtil).util.format(...values)\n    : safeJoin(values, ' ');\n}\n", "import type { Client } from '../client';\nimport { getCurrentScope, getIsolationScope } from '../currentScopes';\nimport { defineIntegration } from '../integration';\nimport { GEN_AI_CONVERSATION_ID_ATTRIBUTE } from '../semanticAttributes';\nimport type { IntegrationFn } from '../types/integration';\nimport type { Span } from '../types/span';\nimport { spanToJSON } from '../utils/spanUtils';\n\nconst INTEGRATION_NAME = 'ConversationId' as const;\n\nconst _conversationIdIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setup(client: Client) {\n      client.on('spanStart', (span: Span) => {\n        const scopeData = getCurrentScope().getScopeData();\n        const isolationScopeData = getIsolationScope().getScopeData();\n\n        const conversationId = scopeData.conversationId || isolationScopeData.conversationId;\n\n        if (conversationId) {\n          const { op, data: attributes, description: name } = spanToJSON(span);\n\n          // Only apply conversation ID to gen_ai spans.\n          // We also check for Vercel AI spans (ai.operationId attribute or ai.* span name)\n          // because the Vercel AI integration sets the gen_ai.* op in its own spanStart handler\n          // which fires after this, so the op is not yet available at this point.\n          if (!op?.startsWith('gen_ai.') && !attributes['ai.operationId'] && !name?.startsWith('ai.')) {\n            return;\n          }\n\n          span.setAttribute(GEN_AI_CONVERSATION_ID_ATTRIBUTE, conversationId);\n        }\n      });\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Automatically applies conversation ID from scope to spans.\n *\n * This integration reads the conversation ID from the current or isolation scope\n * and applies it to spans when they start. This ensures the conversation ID is\n * available for all AI-related operations.\n */\nexport const conversationIdIntegration = defineIntegration(_conversationIdIntegration);\n", "/**\n * OpenAI Integration Telemetry Attributes\n * Based on OpenTelemetry Semantic Conventions for Generative AI\n * @see https://opentelemetry.io/docs/specs/semconv/gen-ai/\n */\n\n// =============================================================================\n// OPENTELEMETRY SEMANTIC CONVENTIONS FOR GENAI\n// =============================================================================\n\n/**\n * The input messages sent to the model\n */\nexport const GEN_AI_PROMPT_ATTRIBUTE = 'gen_ai.prompt';\n\n/**\n * The Generative AI system being used\n * For OpenAI, this should always be \"openai\"\n */\nexport const GEN_AI_SYSTEM_ATTRIBUTE = 'gen_ai.system';\n\n/**\n * The name of the model as requested\n * Examples: \"gpt-4\", \"gpt-3.5-turbo\"\n */\nexport const GEN_AI_REQUEST_MODEL_ATTRIBUTE = 'gen_ai.request.model';\n\n/**\n * Whether streaming was enabled for the request\n */\nexport const GEN_AI_REQUEST_STREAM_ATTRIBUTE = 'gen_ai.request.stream';\n\n/**\n * The temperature setting for the model request\n */\nexport const GEN_AI_REQUEST_TEMPERATURE_ATTRIBUTE = 'gen_ai.request.temperature';\n\n/**\n * The maximum number of tokens requested\n */\nexport const GEN_AI_REQUEST_MAX_TOKENS_ATTRIBUTE = 'gen_ai.request.max_tokens';\n\n/**\n * The frequency penalty setting for the model request\n */\nexport const GEN_AI_REQUEST_FREQUENCY_PENALTY_ATTRIBUTE = 'gen_ai.request.frequency_penalty';\n\n/**\n * The presence penalty setting for the model request\n */\nexport const GEN_AI_REQUEST_PRESENCE_PENALTY_ATTRIBUTE = 'gen_ai.request.presence_penalty';\n\n/**\n * The top_p (nucleus sampling) setting for the model request\n */\nexport const GEN_AI_REQUEST_TOP_P_ATTRIBUTE = 'gen_ai.request.top_p';\n\n/**\n * The top_k setting for the model request\n */\nexport const GEN_AI_REQUEST_TOP_K_ATTRIBUTE = 'gen_ai.request.top_k';\n\n/**\n * Stop sequences for the model request\n */\nexport const GEN_AI_REQUEST_STOP_SEQUENCES_ATTRIBUTE = 'gen_ai.request.stop_sequences';\n\n/**\n * The encoding format for the model request\n */\nexport const GEN_AI_REQUEST_ENCODING_FORMAT_ATTRIBUTE = 'gen_ai.request.encoding_format';\n\n/**\n * The dimensions for the model request\n */\nexport const GEN_AI_REQUEST_DIMENSIONS_ATTRIBUTE = 'gen_ai.request.dimensions';\n\n/**\n * Array of reasons why the model stopped generating tokens\n */\nexport const GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE = 'gen_ai.response.finish_reasons';\n\n/**\n * The name of the model that generated the response\n */\nexport const GEN_AI_RESPONSE_MODEL_ATTRIBUTE = 'gen_ai.response.model';\n\n/**\n * The unique identifier for the response\n */\nexport const GEN_AI_RESPONSE_ID_ATTRIBUTE = 'gen_ai.response.id';\n\n/**\n * The reason why the model stopped generating tokens\n */\nexport const GEN_AI_RESPONSE_STOP_REASON_ATTRIBUTE = 'gen_ai.response.stop_reason';\n\n/**\n * The number of tokens used in the prompt\n */\nexport const GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE = 'gen_ai.usage.input_tokens';\n\n/**\n * The number of tokens used in the response\n */\nexport const GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE = 'gen_ai.usage.output_tokens';\n\n/**\n * The total number of tokens used (input + output)\n */\nexport const GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE = 'gen_ai.usage.total_tokens';\n\n/**\n * The operation name\n */\nexport const GEN_AI_OPERATION_NAME_ATTRIBUTE = 'gen_ai.operation.name';\n\n/**\n * Original length of messages array, used to indicate truncations had occured\n */\nexport const GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE = 'sentry.sdk_meta.gen_ai.input.messages.original_length';\n\n/**\n * The prompt messages\n * Only recorded when recordInputs is enabled\n */\nexport const GEN_AI_INPUT_MESSAGES_ATTRIBUTE = 'gen_ai.input.messages';\n\n/**\n * The model's response messages including text and tool calls\n * Only recorded when recordOutputs is enabled\n * Format: stringified array of message objects with role, parts, and finish_reason\n * @see https://opentelemetry.io/docs/specs/semconv/registry/attributes/gen-ai/#gen-ai-output-messages\n */\nexport const GEN_AI_OUTPUT_MESSAGES_ATTRIBUTE = 'gen_ai.output.messages';\n\n/**\n * The system instructions extracted from system messages\n * Only recorded when recordInputs is enabled\n * According to OpenTelemetry spec: https://opentelemetry.io/docs/specs/semconv/registry/attributes/gen-ai/#gen-ai-system-instructions\n */\nexport const GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE = 'gen_ai.system_instructions';\n\n/**\n * The response text\n * Only recorded when recordOutputs is enabled\n */\nexport const GEN_AI_RESPONSE_TEXT_ATTRIBUTE = 'gen_ai.response.text';\n\n/**\n * The available tools from incoming request\n * Only recorded when recordInputs is enabled\n */\nexport const GEN_AI_REQUEST_AVAILABLE_TOOLS_ATTRIBUTE = 'gen_ai.request.available_tools';\n\n/**\n * Whether the response is a streaming response\n */\nexport const GEN_AI_RESPONSE_STREAMING_ATTRIBUTE = 'gen_ai.response.streaming';\n\n/**\n * The tool calls from the response\n * Only recorded when recordOutputs is enabled\n */\nexport const GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE = 'gen_ai.response.tool_calls';\n\n/**\n * The agent name\n */\nexport const GEN_AI_AGENT_NAME_ATTRIBUTE = 'gen_ai.agent.name';\n\n/**\n * The pipeline name\n */\nexport const GEN_AI_PIPELINE_NAME_ATTRIBUTE = 'gen_ai.pipeline.name';\n\n/**\n * The conversation ID for linking messages across API calls\n * For OpenAI Assistants API: thread_id\n * For LangGraph: configurable.thread_id\n */\nexport const GEN_AI_CONVERSATION_ID_ATTRIBUTE = 'gen_ai.conversation.id';\n\n/**\n * The number of cache creation input tokens used\n */\nexport const GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS_ATTRIBUTE = 'gen_ai.usage.cache_creation_input_tokens';\n\n/**\n * The number of cache read input tokens used\n */\nexport const GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS_ATTRIBUTE = 'gen_ai.usage.cache_read_input_tokens';\n\n/**\n * The number of cache write input tokens used\n */\nexport const GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE = 'gen_ai.usage.input_tokens.cache_write';\n\n/**\n * The number of cached input tokens that were used\n */\nexport const GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE = 'gen_ai.usage.input_tokens.cached';\n\n/**\n * The span operation name for invoking an agent\n */\nexport const GEN_AI_INVOKE_AGENT_OPERATION_ATTRIBUTE = 'gen_ai.invoke_agent';\n\n/**\n * The span operation name for generating content\n */\nexport const GEN_AI_GENERATE_CONTENT_OPERATION_ATTRIBUTE = 'gen_ai.generate_content';\n\n/**\n * The embeddings input\n * Only recorded when recordInputs is enabled\n */\nexport const GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE = 'gen_ai.embeddings.input';\n\n/**\n * The span operation for embeddings\n */\nexport const GEN_AI_EMBEDDINGS_OPERATION_ATTRIBUTE = 'gen_ai.embeddings';\n\n/**\n * The span operation name for reranking\n */\nexport const GEN_AI_RERANK_DO_RERANK_OPERATION_ATTRIBUTE = 'gen_ai.rerank';\n\n/**\n * The span operation name for executing a tool\n */\nexport const GEN_AI_EXECUTE_TOOL_OPERATION_ATTRIBUTE = 'gen_ai.execute_tool';\n\n/**\n * The tool name for tool call spans\n */\nexport const GEN_AI_TOOL_NAME_ATTRIBUTE = 'gen_ai.tool.name';\n\n/**\n * The tool call ID\n */\nexport const GEN_AI_TOOL_CALL_ID_ATTRIBUTE = 'gen_ai.tool.call.id';\n\n/**\n * The tool type (e.g., 'function')\n */\nexport const GEN_AI_TOOL_TYPE_ATTRIBUTE = 'gen_ai.tool.type';\n\n/**\n * The tool input/arguments\n */\nexport const GEN_AI_TOOL_INPUT_ATTRIBUTE = 'gen_ai.tool.input';\n\n/**\n * The tool output/result\n */\nexport const GEN_AI_TOOL_OUTPUT_ATTRIBUTE = 'gen_ai.tool.output';\n\n/**\n * The description of the tool being used\n * @see https://opentelemetry.io/docs/specs/semconv/registry/attributes/gen-ai/#gen-ai-tool-description\n */\nexport const GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE = 'gen_ai.tool.description';\n", "/**\n * Inline media content source, with a potentially very large base64\n * blob or data: uri.\n */\nexport type ContentMedia = Record<string, unknown> &\n  (\n    | {\n        media_type: string;\n        data: string;\n      }\n    | {\n        image_url: `data:${string}`;\n      }\n    | {\n        image_url: { url: `data:${string}` };\n      }\n    | {\n        type: 'blob' | 'base64';\n        content: string;\n      }\n    | {\n        b64_json: string;\n      }\n    | {\n        uri: `data:${string}`;\n      }\n    | {\n        type: 'input_audio';\n        input_audio: { data: string };\n      }\n    | {\n        type: 'file';\n        file: { file_data?: string };\n      }\n  );\n\n/**\n * Check if a content part is an OpenAI/Anthropic media source\n */\nexport function isContentMedia(part: unknown): part is ContentMedia {\n  if (!part || typeof part !== 'object') return false;\n\n  return (\n    isContentMediaSource(part) ||\n    hasInlineData(part) ||\n    hasImageUrl(part) ||\n    hasInputAudio(part) ||\n    hasFileData(part) ||\n    hasMediaTypeData(part) ||\n    hasVercelFileData(part) ||\n    hasVercelImageData(part) ||\n    hasBlobOrBase64Type(part) ||\n    hasB64Json(part) ||\n    hasImageGenerationResult(part) ||\n    hasDataUri(part)\n  );\n}\n\nfunction hasImageUrl(part: NonNullable<unknown>): boolean {\n  if (!('image_url' in part)) return false;\n  if (typeof part.image_url === 'string') return part.image_url.startsWith('data:');\n  return hasNestedImageUrl(part);\n}\n\nfunction hasNestedImageUrl(part: NonNullable<unknown>): part is { image_url: { url: string } } {\n  return (\n    'image_url' in part &&\n    !!part.image_url &&\n    typeof part.image_url === 'object' &&\n    'url' in part.image_url &&\n    typeof part.image_url.url === 'string' &&\n    part.image_url.url.startsWith('data:')\n  );\n}\n\nfunction isContentMediaSource(part: NonNullable<unknown>): boolean {\n  return 'type' in part && typeof part.type === 'string' && 'source' in part && isContentMedia(part.source);\n}\n\nfunction hasInlineData(part: NonNullable<unknown>): part is { inlineData: { data?: string } } {\n  return (\n    'inlineData' in part &&\n    !!part.inlineData &&\n    typeof part.inlineData === 'object' &&\n    'data' in part.inlineData &&\n    typeof part.inlineData.data === 'string'\n  );\n}\n\nfunction hasInputAudio(part: NonNullable<unknown>): part is { type: 'input_audio'; input_audio: { data: string } } {\n  return (\n    'type' in part &&\n    part.type === 'input_audio' &&\n    'input_audio' in part &&\n    !!part.input_audio &&\n    typeof part.input_audio === 'object' &&\n    'data' in part.input_audio &&\n    typeof part.input_audio.data === 'string'\n  );\n}\n\nfunction hasFileData(part: NonNullable<unknown>): part is { type: 'file'; file: { file_data: string } } {\n  return (\n    'type' in part &&\n    part.type === 'file' &&\n    'file' in part &&\n    !!part.file &&\n    typeof part.file === 'object' &&\n    'file_data' in part.file &&\n    typeof part.file.file_data === 'string'\n  );\n}\n\nfunction hasMediaTypeData(part: NonNullable<unknown>): part is { media_type: string; data: string } {\n  return 'media_type' in part && typeof part.media_type === 'string' && 'data' in part;\n}\n\n/**\n * Check for Vercel AI SDK file format: { type: \"file\", mediaType: \"...\", data: \"...\" }\n * Only matches base64/binary data, not HTTP/HTTPS URLs (which should be preserved).\n */\nfunction hasVercelFileData(part: NonNullable<unknown>): part is { type: 'file'; mediaType: string; data: string } {\n  return (\n    'type' in part &&\n    part.type === 'file' &&\n    'mediaType' in part &&\n    typeof part.mediaType === 'string' &&\n    'data' in part &&\n    typeof part.data === 'string' &&\n    // Only strip base64/binary data, not HTTP/HTTPS URLs which should be preserved as references\n    !part.data.startsWith('http://') &&\n    !part.data.startsWith('https://')\n  );\n}\n\n/**\n * Check for Vercel AI SDK image format: { type: \"image\", image: \"base64...\", mimeType?: \"...\" }\n * Only matches base64/data URIs, not HTTP/HTTPS URLs (which should be preserved).\n * Note: mimeType is optional in Vercel AI SDK image parts.\n */\nfunction hasVercelImageData(part: NonNullable<unknown>): part is { type: 'image'; image: string; mimeType?: string } {\n  return (\n    'type' in part &&\n    part.type === 'image' &&\n    'image' in part &&\n    typeof part.image === 'string' &&\n    // Only strip base64/data URIs, not HTTP/HTTPS URLs which should be preserved as references\n    !part.image.startsWith('http://') &&\n    !part.image.startsWith('https://')\n  );\n}\n\nfunction hasBlobOrBase64Type(part: NonNullable<unknown>): part is { type: 'blob' | 'base64'; content: string } {\n  return 'type' in part && (part.type === 'blob' || part.type === 'base64');\n}\n\nfunction hasB64Json(part: NonNullable<unknown>): part is { b64_json: string } {\n  return 'b64_json' in part;\n}\n\nfunction hasImageGenerationResult(part: NonNullable<unknown>): part is { type: 'image_generation'; result: string } {\n  return 'type' in part && 'result' in part && part.type === 'image_generation';\n}\n\nfunction hasDataUri(part: NonNullable<unknown>): part is { uri: string } {\n  return 'uri' in part && typeof part.uri === 'string' && part.uri.startsWith('data:');\n}\n\nconst REMOVED_STRING = '[Blob substitute]';\n\nconst MEDIA_FIELDS = ['image_url', 'data', 'content', 'b64_json', 'result', 'uri', 'image'] as const;\n\n/**\n * Replace inline binary data in a single media content part with a placeholder.\n */\nexport function stripInlineMediaFromSingleMessage(part: ContentMedia): ContentMedia {\n  const strip = { ...part };\n  if (isContentMedia(strip.source)) {\n    strip.source = stripInlineMediaFromSingleMessage(strip.source);\n  }\n  if (hasInlineData(part)) {\n    strip.inlineData = { ...part.inlineData, data: REMOVED_STRING };\n  }\n  if (hasNestedImageUrl(part)) {\n    strip.image_url = { ...part.image_url, url: REMOVED_STRING };\n  }\n  if (hasInputAudio(part)) {\n    strip.input_audio = { ...part.input_audio, data: REMOVED_STRING };\n  }\n  if (hasFileData(part)) {\n    strip.file = { ...part.file, file_data: REMOVED_STRING };\n  }\n  for (const field of MEDIA_FIELDS) {\n    if (typeof strip[field] === 'string') strip[field] = REMOVED_STRING;\n  }\n  return strip;\n}\n", "import { isContentMedia, stripInlineMediaFromSingleMessage } from './mediaStripping';\n\n/**\n * Default maximum size in bytes for GenAI messages.\n * Messages exceeding this limit will be truncated.\n */\nexport const DEFAULT_GEN_AI_MESSAGES_BYTE_LIMIT = 20000;\n\n/**\n * Message format used by OpenAI and Anthropic APIs.\n */\ntype ContentMessage = {\n  [key: string]: unknown;\n  content: string;\n};\n\n/**\n * One block inside OpenAI / Anthropic `content: [...]` arrays (text, image_url, etc.).\n */\ntype ContentArrayBlock = {\n  [key: string]: unknown;\n  type: string;\n};\n\n/**\n * Message format used by OpenAI and Anthropic APIs for media.\n */\ntype ContentArrayMessage = {\n  [key: string]: unknown;\n  content: ContentArrayBlock[];\n};\n\n/**\n * Message format used by Google GenAI API.\n * Parts can be strings or objects with a text property.\n */\ntype PartsMessage = {\n  [key: string]: unknown;\n  parts: Array<TextPart | MediaPart>;\n};\n\n/**\n * A part in a Google GenAI message that contains text.\n */\ntype TextPart = string | { text: string };\n\n/**\n * A part in a Google GenAI that contains media.\n */\ntype MediaPart = {\n  type: string;\n  content: string;\n};\n\n/**\n * One element of an array-based message: OpenAI/Anthropic `content[]` or Google `parts`.\n */\ntype ArrayMessageItem = TextPart | MediaPart | ContentArrayBlock;\n\n/**\n * Calculate the UTF-8 byte length of a string.\n */\nconst utf8Bytes = (text: string): number => {\n  return new TextEncoder().encode(text).length;\n};\n\n/**\n * Calculate the UTF-8 byte length of a value's JSON representation.\n */\nconst jsonBytes = (value: unknown): number => {\n  return utf8Bytes(JSON.stringify(value));\n};\n\n/**\n * Truncate a string to fit within maxBytes (inclusive) when encoded as UTF-8.\n * Uses binary search for efficiency with multi-byte characters.\n *\n * @param text - The string to truncate\n * @param maxBytes - Maximum byte length (inclusive, UTF-8 encoded)\n * @returns Truncated string whose UTF-8 byte length is at most maxBytes\n */\nfunction truncateTextByBytes(text: string, maxBytes: number): string {\n  if (utf8Bytes(text) <= maxBytes) {\n    return text;\n  }\n\n  let low = 0;\n  let high = text.length;\n  let bestFit = '';\n\n  while (low <= high) {\n    const mid = Math.floor((low + high) / 2);\n    const candidate = text.slice(0, mid);\n    const byteSize = utf8Bytes(candidate);\n\n    if (byteSize <= maxBytes) {\n      bestFit = candidate;\n      low = mid + 1;\n    } else {\n      high = mid - 1;\n    }\n  }\n\n  return bestFit;\n}\n\n/**\n * Extract text content from a message item.\n * Handles plain strings and objects with a text property.\n *\n * @returns The text content\n */\nfunction getItemText(item: ArrayMessageItem): string {\n  if (typeof item === 'string') {\n    return item;\n  }\n  if ('text' in item && typeof item.text === 'string') {\n    return item.text;\n  }\n  return '';\n}\n\n/**\n * Create a new item with updated text content while preserving the original structure.\n *\n * @param item - Original item (string or object)\n * @param text - New text content\n * @returns New item with updated text\n */\nfunction withItemText(item: ArrayMessageItem, text: string): ArrayMessageItem {\n  if (typeof item === 'string') {\n    return text;\n  }\n  return { ...item, text };\n}\n\n/**\n * Check if a message has the OpenAI/Anthropic content format.\n */\nfunction isContentMessage(message: unknown): message is ContentMessage {\n  return (\n    message !== null &&\n    typeof message === 'object' &&\n    'content' in message &&\n    typeof (message as ContentMessage).content === 'string'\n  );\n}\n\n/**\n * Check if a message has the OpenAI/Anthropic content array format.\n */\nfunction isContentArrayMessage(message: unknown): message is ContentArrayMessage {\n  return message !== null && typeof message === 'object' && 'content' in message && Array.isArray(message.content);\n}\n\n/**\n * Check if a message has the Google GenAI parts format.\n */\nfunction isPartsMessage(message: unknown): message is PartsMessage {\n  return (\n    message !== null &&\n    typeof message === 'object' &&\n    'parts' in message &&\n    Array.isArray((message as PartsMessage).parts) &&\n    (message as PartsMessage).parts.length > 0\n  );\n}\n\n/**\n * Truncate a message with `content: string` format (OpenAI/Anthropic).\n *\n * @param message - Message with content property\n * @param maxBytes - Maximum byte limit\n * @returns Array with truncated message, or empty array if it doesn't fit\n */\nfunction truncateContentMessage(message: ContentMessage, maxBytes: number): unknown[] {\n  // Calculate overhead (message structure without content)\n  const emptyMessage = { ...message, content: '' };\n  const overhead = jsonBytes(emptyMessage);\n  const availableForContent = maxBytes - overhead;\n\n  if (availableForContent <= 0) {\n    return [];\n  }\n\n  const truncatedContent = truncateTextByBytes(message.content, availableForContent);\n  return [{ ...message, content: truncatedContent }];\n}\n\n/**\n * Extracts the array items and their key from an array-based message.\n * Returns `null` key if neither `parts` nor `content` is a valid array.\n */\nfunction getArrayItems(message: PartsMessage | ContentArrayMessage): {\n  key: 'parts' | 'content' | null;\n  items: ArrayMessageItem[];\n} {\n  if ('parts' in message && Array.isArray(message.parts)) {\n    return { key: 'parts', items: message.parts };\n  }\n  if ('content' in message && Array.isArray(message.content)) {\n    return { key: 'content', items: message.content };\n  }\n  return { key: null, items: [] };\n}\n\n/**\n * Truncate a message with an array-based format.\n * Handles both `parts: [...]` (Google GenAI) and `content: [...]` (OpenAI/Anthropic multimodal).\n * Keeps as many complete items as possible, only truncating the first item if needed.\n *\n * @param message - Message with parts or content array\n * @param maxBytes - Maximum byte limit\n * @returns Array with truncated message, or empty array if it doesn't fit\n */\nfunction truncateArrayMessage(message: PartsMessage | ContentArrayMessage, maxBytes: number): unknown[] {\n  const { key, items } = getArrayItems(message);\n\n  if (key === null || items.length === 0) {\n    return [];\n  }\n\n  // Calculate overhead by creating empty text items\n  const emptyItems = items.map(item => withItemText(item, ''));\n  const overhead = jsonBytes({ ...message, [key]: emptyItems });\n  let remainingBytes = maxBytes - overhead;\n\n  if (remainingBytes <= 0) {\n    return [];\n  }\n\n  // Include items until we run out of space\n  const includedItems: ArrayMessageItem[] = [];\n\n  for (const item of items) {\n    const text = getItemText(item);\n    const textSize = utf8Bytes(text);\n\n    if (textSize <= remainingBytes) {\n      // Item fits: include it as-is\n      includedItems.push(item);\n      remainingBytes -= textSize;\n    } else if (includedItems.length === 0) {\n      // First item doesn't fit: truncate it\n      const truncated = truncateTextByBytes(text, remainingBytes);\n      if (truncated) {\n        includedItems.push(withItemText(item, truncated));\n      }\n      break;\n    } else {\n      // Subsequent item doesn't fit: stop here\n      break;\n    }\n  }\n\n  /* c8 ignore start\n   * for type safety only, algorithm guarantees SOME text included */\n  if (includedItems.length <= 0) {\n    return [];\n  } else {\n    /* c8 ignore stop */\n    return [{ ...message, [key]: includedItems }];\n  }\n}\n\n/**\n * Truncate a single message to fit within maxBytes.\n *\n * Supports three message formats:\n * - OpenAI/Anthropic: `{ ..., content: string }`\n * - Vercel AI/OpenAI multimodal: `{ ..., content: Array<{type, text?, ...}> }`\n * - Google GenAI: `{ ..., parts: Array<string | {text: string} | non-text> }`\n *\n * @param message - The message to truncate\n * @param maxBytes - Maximum byte limit for the message\n * @returns Array containing the truncated message, or empty array if truncation fails\n */\nfunction truncateSingleMessage(message: unknown, maxBytes: number): unknown[] {\n  if (!message) return [];\n\n  // Handle plain strings (e.g., embeddings input)\n  if (typeof message === 'string') {\n    const truncated = truncateTextByBytes(message, maxBytes);\n    return truncated ? [truncated] : [];\n  }\n\n  if (typeof message !== 'object') {\n    return [];\n  }\n\n  if (isContentMessage(message)) {\n    return truncateContentMessage(message, maxBytes);\n  }\n\n  if (isContentArrayMessage(message) || isPartsMessage(message)) {\n    return truncateArrayMessage(message, maxBytes);\n  }\n\n  // Unknown message format: cannot truncate safely\n  return [];\n}\n\n/**\n * Strip the inline media from message arrays.\n *\n * This returns a stripped message. We do NOT want to mutate the data in place,\n * because of course we still want the actual API/client to handle the media.\n */\nfunction stripInlineMediaFromMessages(messages: unknown[]): unknown[] {\n  const stripped = messages.map(message => {\n    let newMessage: Record<string, unknown> | undefined = undefined;\n    if (!!message && typeof message === 'object') {\n      if (isContentArrayMessage(message)) {\n        newMessage = {\n          ...message,\n          content: stripInlineMediaFromMessages(message.content),\n        };\n      } else if ('content' in message && isContentMedia(message.content)) {\n        newMessage = {\n          ...message,\n          content: stripInlineMediaFromSingleMessage(message.content),\n        };\n      }\n      if (isPartsMessage(message)) {\n        newMessage = {\n          // might have to strip content AND parts\n          ...(newMessage ?? message),\n          parts: stripInlineMediaFromMessages(message.parts),\n        };\n      }\n      if (isContentMedia(newMessage)) {\n        newMessage = stripInlineMediaFromSingleMessage(newMessage);\n      } else if (isContentMedia(message)) {\n        newMessage = stripInlineMediaFromSingleMessage(message);\n      }\n    }\n    return newMessage ?? message;\n  });\n  return stripped;\n}\n\n/**\n * Truncate an array of messages to fit within a byte limit.\n *\n * Strategy:\n * - Always keeps only the last (newest) message\n * - Strips inline media from the message\n * - Truncates the message content if it exceeds the byte limit\n *\n * @param messages - Array of messages to truncate\n * @param maxBytes - Maximum total byte limit for the message\n * @returns Array containing only the last message (possibly truncated)\n *\n * @example\n * ```ts\n * const messages = [msg1, msg2, msg3, msg4]; // newest is msg4\n * const truncated = truncateMessagesByBytes(messages, 10000);\n * // Returns [msg4] (truncated if needed)\n * ```\n */\nfunction truncateMessagesByBytes(messages: unknown[], maxBytes: number): unknown[] {\n  // Early return for empty or invalid input\n  if (!Array.isArray(messages) || messages.length === 0) {\n    return messages;\n  }\n\n  // The result is always a single-element array that callers wrap with\n  // JSON.stringify([message]), so subtract the 2-byte array wrapper (\"[\"  and \"]\")\n  // to ensure the final serialized value stays under the limit.\n  const effectiveMaxBytes = maxBytes - 2;\n\n  // Always keep only the last message\n  const lastMessage = messages[messages.length - 1];\n\n  // Strip inline media from the single message\n  const stripped = stripInlineMediaFromMessages([lastMessage]);\n  const strippedMessage = stripped[0];\n\n  // Check if it fits\n  const messageBytes = jsonBytes(strippedMessage);\n  if (messageBytes <= effectiveMaxBytes) {\n    return stripped;\n  }\n\n  // Truncate the single message if needed\n  return truncateSingleMessage(strippedMessage, effectiveMaxBytes);\n}\n\n/**\n * Truncate GenAI messages using the default byte limit.\n *\n * Convenience wrapper around `truncateMessagesByBytes` with the default limit.\n *\n * @param messages - Array of messages to truncate\n * @returns Truncated array of messages\n */\nexport function truncateGenAiMessages(messages: unknown[]): unknown[] {\n  return truncateMessagesByBytes(messages, DEFAULT_GEN_AI_MESSAGES_BYTE_LIMIT);\n}\n\n/**\n * Truncate GenAI string input using the default byte limit.\n *\n * @param input - The string to truncate\n * @returns Truncated string\n */\nexport function truncateGenAiStringInput(input: string): string {\n  return truncateTextByBytes(input, DEFAULT_GEN_AI_MESSAGES_BYTE_LIMIT);\n}\n", "/**\n * Shared utils for AI integrations (OpenAI, Anthropic, Verce.AI, etc.)\n */\nimport {\n  GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS,\n  GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS,\n  GEN_AI_USAGE_REASONING_OUTPUT_TOKENS,\n} from '@sentry/conventions/attributes';\nimport { getClient } from '../../currentScopes';\nimport { hasSpanStreamingEnabled } from '../spans/hasSpanStreamingEnabled';\nimport type { Span } from '../../types/span';\nimport { isThenable } from '../../utils/is';\nimport {\n  GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE,\n  GEN_AI_RESPONSE_ID_ATTRIBUTE,\n  GEN_AI_RESPONSE_MODEL_ATTRIBUTE,\n  GEN_AI_RESPONSE_STREAMING_ATTRIBUTE,\n  GEN_AI_RESPONSE_TEXT_ATTRIBUTE,\n  GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE,\n  GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE,\n  GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE,\n  GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE,\n} from './gen-ai-attributes';\nimport { truncateGenAiMessages, truncateGenAiStringInput } from './messageTruncation';\n\nexport interface AIRecordingOptions {\n  recordInputs?: boolean;\n  recordOutputs?: boolean;\n}\n\n/**\n * A method registry entry describes a single instrumented method:\n * which gen_ai operation it maps to and whether it is intrinsically streaming.\n */\nexport interface InstrumentedMethodEntry {\n  /** Operation name (e.g. 'chat', 'embeddings', 'generate_content'). Omit for factory methods that only need result proxying. */\n  operation?: string;\n  /** True if the method itself is always streaming (not param-based) */\n  streaming?: boolean;\n  /** When set, the method's return value is re-proxied with this as the base path */\n  proxyResultPath?: string;\n}\n\n/**\n * Maps method paths to their registry entries.\n * Used by proxy-based AI client instrumentations to determine which methods\n * to instrument, what operation name to use, and whether they stream.\n */\nexport type InstrumentedMethodRegistry = Record<string, InstrumentedMethodEntry>;\n\n/**\n * Resolves AI recording options by falling back to the client's `dataCollection.genAI` settings.\n * Precedence: explicit option > dataCollection.genAI > sendDefaultPii > false\n */\nexport function resolveAIRecordingOptions<T extends AIRecordingOptions>(options?: T): T & Required<AIRecordingOptions> {\n  const genAI = getClient()?.getDataCollectionOptions().genAI;\n  return {\n    ...options,\n    recordInputs: options?.recordInputs ?? genAI?.inputs ?? false,\n    recordOutputs: options?.recordOutputs ?? genAI?.outputs ?? false,\n  } as T & Required<AIRecordingOptions>;\n}\n\n/**\n * Resolves whether truncation should be enabled.\n * If the user explicitly set `enableTruncation`, that value is used.\n * Otherwise, truncation is disabled whenever gen_ai spans are sent through the span streaming / v2\n * span path, i.e. full span streaming (`traceLifecycle: 'stream'`) or `streamGenAiSpans`. That path\n * is not subject to the transaction payload-size limits that truncation works around, so the full\n * message data can be retained. `streamGenAiSpans` is opt-out (on unless explicitly set to `false`).\n */\nexport function shouldEnableTruncation(enableTruncation: boolean | undefined): boolean {\n  if (enableTruncation !== undefined) {\n    return enableTruncation;\n  }\n\n  const client = getClient();\n  if (!client) {\n    return true;\n  }\n\n  return !hasSpanStreamingEnabled(client) && client.getOptions().streamGenAiSpans === false;\n}\n\n/**\n * Build method path from current traversal\n */\nexport function buildMethodPath(currentPath: string, prop: string): string {\n  return currentPath ? `${currentPath}.${prop}` : prop;\n}\n\n/**\n * Build token usage attributes. Input tokens include cache reads and writes, which are subsets.\n */\nexport function getTokenUsageAttributes(\n  promptTokens?: number,\n  completionTokens?: number,\n  cacheCreationInputTokens?: number,\n  cacheReadInputTokens?: number,\n  totalTokens?: number,\n): Record<string, number> {\n  const attributes: Record<string, number> = {};\n\n  if (typeof promptTokens === 'number') {\n    attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] = promptTokens;\n  }\n  if (typeof cacheCreationInputTokens === 'number') {\n    attributes[GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS] = cacheCreationInputTokens;\n  }\n  if (typeof cacheReadInputTokens === 'number') {\n    attributes[GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS] = cacheReadInputTokens;\n  }\n  if (typeof completionTokens === 'number') {\n    attributes[GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE] = completionTokens;\n  }\n  if (typeof totalTokens === 'number') {\n    attributes[GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE] = totalTokens;\n  } else if (typeof promptTokens === 'number' || typeof completionTokens === 'number') {\n    attributes[GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE] =\n      (typeof promptTokens === 'number' ? promptTokens : 0) +\n      (typeof completionTokens === 'number' ? completionTokens : 0);\n  }\n  return attributes;\n}\n\nexport interface StreamResponseState {\n  responseId?: string;\n  responseModel?: string;\n  finishReasons: string[];\n  responseTexts: string[];\n  toolCalls: unknown[];\n  promptTokens?: number;\n  completionTokens?: number;\n  totalTokens?: number;\n  cacheCreationInputTokens?: number;\n  cacheReadInputTokens?: number;\n  reasoningOutputTokens?: number;\n}\n\n/**\n * Ends a streaming span by setting all accumulated response attributes and ending the span.\n * Shared across OpenAI, Anthropic, and Google GenAI streaming implementations.\n */\nexport function endStreamSpan(span: Span, state: StreamResponseState, recordOutputs: boolean): void {\n  if (!span.isRecording()) {\n    return;\n  }\n\n  const attrs: Record<string, string | number | boolean> = {\n    [GEN_AI_RESPONSE_STREAMING_ATTRIBUTE]: true,\n  };\n\n  if (state.responseId) attrs[GEN_AI_RESPONSE_ID_ATTRIBUTE] = state.responseId;\n  if (state.responseModel) attrs[GEN_AI_RESPONSE_MODEL_ATTRIBUTE] = state.responseModel;\n\n  Object.assign(\n    attrs,\n    getTokenUsageAttributes(\n      state.promptTokens,\n      state.completionTokens,\n      state.cacheCreationInputTokens,\n      state.cacheReadInputTokens,\n      state.totalTokens,\n    ),\n  );\n  if (typeof state.reasoningOutputTokens === 'number') {\n    attrs[GEN_AI_USAGE_REASONING_OUTPUT_TOKENS] = state.reasoningOutputTokens;\n  }\n\n  if (state.finishReasons.length) {\n    attrs[GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE] = JSON.stringify(state.finishReasons);\n  }\n  if (recordOutputs && state.responseTexts.length) {\n    attrs[GEN_AI_RESPONSE_TEXT_ATTRIBUTE] = state.responseTexts.join('');\n  }\n  if (recordOutputs && state.toolCalls.length) {\n    attrs[GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE] = JSON.stringify(state.toolCalls);\n  }\n\n  span.setAttributes(attrs);\n  span.end();\n}\n\n/**\n * Get the truncated JSON string for a string, an array of messages, or an object.\n *\n * @param value - The value to truncate and serialize\n * @returns The truncated JSON string\n */\nexport function getTruncatedJsonString<T>(value: T | T[]): string {\n  if (typeof value === 'string') {\n    // Some values are already JSON strings, so we don't need to duplicate the JSON parsing\n    return truncateGenAiStringInput(value);\n  }\n  // Both truncation (media stripping recurses the value) and `JSON.stringify` can throw on\n  // circular refs or non-serializable values (e.g. BigInt); never let that crash instrumentation.\n  try {\n    return JSON.stringify(Array.isArray(value) ? truncateGenAiMessages(value) : value);\n  } catch {\n    return '[unserializable]';\n  }\n}\n\n/**\n * Extract system instructions from messages array.\n * Finds the first system message and formats it according to OpenTelemetry semantic conventions.\n *\n * @param messages - Array of messages to extract system instructions from\n * @returns systemInstructions (JSON string) and filteredMessages (without system message)\n */\nexport function extractSystemInstructions(messages: unknown[] | unknown): {\n  systemInstructions: string | undefined;\n  filteredMessages: unknown[] | unknown;\n} {\n  if (!Array.isArray(messages)) {\n    return { systemInstructions: undefined, filteredMessages: messages };\n  }\n\n  const systemMessageIndex = messages.findIndex(\n    msg => msg && typeof msg === 'object' && 'role' in msg && (msg as { role: string }).role === 'system',\n  );\n\n  if (systemMessageIndex === -1) {\n    return { systemInstructions: undefined, filteredMessages: messages };\n  }\n\n  const systemMessage = messages[systemMessageIndex] as { role: string; content?: string | unknown };\n  const systemContent =\n    typeof systemMessage.content === 'string'\n      ? systemMessage.content\n      : systemMessage.content !== undefined\n        ? JSON.stringify(systemMessage.content)\n        : undefined;\n\n  if (!systemContent) {\n    return { systemInstructions: undefined, filteredMessages: messages };\n  }\n\n  const systemInstructions = JSON.stringify([{ type: 'text', content: systemContent }]);\n  const filteredMessages = [...messages.slice(0, systemMessageIndex), ...messages.slice(systemMessageIndex + 1)];\n\n  return { systemInstructions, filteredMessages };\n}\n\n/**\n * Creates a wrapped version of .withResponse() that replaces the data field\n * with the instrumented result while preserving metadata (response, request_id).\n */\nasync function createWithResponseWrapper<T>(\n  originalWithResponse: Promise<unknown>,\n  instrumentedPromise: Promise<T>,\n): Promise<unknown> {\n  // Awaited together rather than in sequence so both promises get a handler attached synchronously.\n  // Awaiting them one after the other leaves the second unobserved when the first rejects, which\n  // surfaces as an unhandled rejection.\n  const [instrumentedResult, originalWrapper] = await Promise.all([instrumentedPromise, originalWithResponse]);\n\n  // Combine instrumented result with original metadata\n  if (originalWrapper && typeof originalWrapper === 'object' && 'data' in originalWrapper) {\n    return {\n      ...originalWrapper,\n      data: instrumentedResult,\n    };\n  }\n  return instrumentedResult;\n}\n\n/**\n * Wraps a promise-like object to preserve additional methods (like .withResponse())\n * that AI SDK clients (OpenAI, Anthropic) attach to their APIPromise return values.\n *\n * Standard Promise methods (.then, .catch, .finally) are routed to the instrumented\n * promise to preserve Sentry's span instrumentation, while custom SDK methods are\n * forwarded to the original promise to maintain the SDK's API surface.\n */\nexport function wrapPromiseWithMethods<R>(\n  originalPromiseLike: Promise<R>,\n  instrumentedPromise: Promise<R>,\n): Promise<R> {\n  // If the original result is not thenable, return the instrumented promise\n  if (!isThenable(originalPromiseLike)) {\n    return instrumentedPromise;\n  }\n\n  // Create a proxy that forwards Promise methods to instrumentedPromise\n  // and preserves additional methods from the original result\n  return new Proxy(originalPromiseLike, {\n    get(target: object, prop: string | symbol): unknown {\n      // For standard Promise methods (.then, .catch, .finally, Symbol.toStringTag),\n      // use instrumentedPromise to preserve Sentry instrumentation.\n      // For custom methods (like .withResponse()), use the original target.\n      const useInstrumentedPromise = prop in Promise.prototype || prop === Symbol.toStringTag;\n      const source = useInstrumentedPromise ? instrumentedPromise : target;\n\n      const value = Reflect.get(source, prop) as unknown;\n\n      // Special handling for .withResponse() to preserve instrumentation\n      // .withResponse() returns { data: T, response: Response, request_id: string }\n      if (prop === 'withResponse' && typeof value === 'function') {\n        return function wrappedWithResponse(this: unknown): unknown {\n          const originalWithResponse = (value as (...args: unknown[]) => unknown).call(target);\n          return createWithResponseWrapper(originalWithResponse, instrumentedPromise);\n        };\n      }\n\n      return typeof value === 'function' ? value.bind(source) : value;\n    },\n  }) as Promise<R>;\n}\n", "/**\n * The provider value for the `gen_ai.provider.name` attribute.\n * @see https://developers.cloudflare.com/workers-ai/\n */\nexport const WORKERS_AI_PROVIDER_NAME = 'cloudflare.workers_ai';\n\n/**\n * The Sentry origin for spans created by the Workers AI instrumentation.\n */\nexport const WORKERS_AI_ORIGIN = 'auto.ai.cloudflare.workers_ai';\n\n/**\n * The key used to register this provider in the AI provider skip registry.\n *\n * @see `_INTERNAL_skipAiProviderWrapping`\n */\nexport const WORKERS_AI_INTEGRATION_NAME = 'WorkersAI' as const;\n", "import type { ToolCallSpanContext } from './types';\n\n// Global map to track tool call IDs to their corresponding span contexts.\n// This allows us to capture tool errors and link them to the correct span\n// without keeping full Span objects (and their potentially large attributes) alive.\nexport const toolCallSpanContextMap = new Map<string, ToolCallSpanContext>();\n\n// Used to make tool descriptions available to execute_tool spans in the span streaming path.\n// Streamed spans are processed individually, so execute_tool spans cannot look up descriptions\n// from their sibling doGenerate span on span end (as we do for transactions).\n// Instead we store descriptions at spanStart and apply them in the processSpan hook.\n// Stores parent_span_id -> Map<toolName, description>\nexport const toolDescriptionMap = new Map<string, Map<string, string>>();\n\n/** Maps Vercel AI span names to standardized OpenTelemetry operation names. */\nexport const SPAN_TO_OPERATION_NAME = new Map<string, string>([\n  ['ai.generateText', 'invoke_agent'],\n  ['ai.streamText', 'invoke_agent'],\n  ['ai.generateObject', 'invoke_agent'],\n  ['ai.streamObject', 'invoke_agent'],\n  ['ai.generateText.doGenerate', 'generate_content'],\n  ['ai.streamText.doStream', 'generate_content'],\n  ['ai.generateObject.doGenerate', 'generate_content'],\n  ['ai.streamObject.doStream', 'generate_content'],\n  ['ai.embed.doEmbed', 'embeddings'],\n  ['ai.embedMany.doEmbed', 'embeddings'],\n  ['ai.rerank.doRerank', 'rerank'],\n  ['ai.toolCall', 'execute_tool'],\n]);\n", "/**\n * AI SDK Telemetry Attributes\n * Based on https://ai-sdk.dev/docs/ai-sdk-core/telemetry#collected-data\n */\n\n// =============================================================================\n// COMMON ATTRIBUTES\n// =============================================================================\n\n/**\n * Common attribute for operation name across all functions and spans\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#collected-data\n */\nexport const OPERATION_NAME_ATTRIBUTE = 'operation.name';\n\n/**\n * Common attribute for AI operation ID across all functions and spans\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#collected-data\n */\nexport const AI_OPERATION_ID_ATTRIBUTE = 'ai.operationId';\n\n// =============================================================================\n// SHARED ATTRIBUTES\n// =============================================================================\n\n/**\n * `generateText` function - `ai.generateText` span\n * `streamText` function - `ai.streamText` span\n *\n * The prompt that was used when calling the function\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#generatetext-function\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#streamtext-function\n */\nexport const AI_PROMPT_ATTRIBUTE = 'ai.prompt';\n\n/**\n * `generateObject` function - `ai.generateObject` span\n * `streamObject` function - `ai.streamObject` span\n *\n * The JSON schema version of the schema that was passed into the function\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#generateobject-function\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#streamobject-function\n */\nexport const AI_SCHEMA_ATTRIBUTE = 'ai.schema';\n\n/**\n * `generateObject` function - `ai.generateObject` span\n * `streamObject` function - `ai.streamObject` span\n *\n * The object that was generated (stringified JSON)\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#generateobject-function\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#streamobject-function\n */\nexport const AI_RESPONSE_OBJECT_ATTRIBUTE = 'ai.response.object';\n\n/**\n * `embed` function - `ai.embed.doEmbed` span\n * `embedMany` function - `ai.embedMany` span\n *\n * The values that were passed into the function (array)\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#embed-function\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#embedmany-function\n */\nexport const AI_VALUES_ATTRIBUTE = 'ai.values';\n\n// =============================================================================\n// GENERATETEXT FUNCTION - UNIQUE ATTRIBUTES\n// =============================================================================\n\n/**\n * `generateText` function - `ai.generateText` span\n *\n * The text that was generated\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#generatetext-function\n */\nexport const AI_RESPONSE_TEXT_ATTRIBUTE = 'ai.response.text';\n\n/**\n * `generateText` function - `ai.generateText` span\n *\n * The tool calls that were made as part of the generation (stringified JSON)\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#generatetext-function\n */\nexport const AI_RESPONSE_TOOL_CALLS_ATTRIBUTE = 'ai.response.toolCalls';\n\n/**\n * `generateText` function - `ai.generateText` span\n *\n * The reason why the generation finished\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#generatetext-function\n */\nexport const AI_RESPONSE_FINISH_REASON_ATTRIBUTE = 'ai.response.finishReason';\n\n/**\n * `generateText` function - `ai.generateText` span\n *\n * The maximum number of steps that were set\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#generatetext-function\n */\nexport const AI_SETTINGS_MAX_STEPS_ATTRIBUTE = 'ai.settings.maxSteps';\n\n/**\n * `generateText` function - `ai.generateText.doGenerate` span\n *\n * The messages that were passed into the provider\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#generatetext-function\n */\nexport const AI_PROMPT_MESSAGES_ATTRIBUTE = 'ai.prompt.messages';\n\n/**\n * `generateText` function - `ai.generateText.doGenerate` span\n *\n * Array of stringified tool definitions\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#generatetext-function\n */\nexport const AI_PROMPT_TOOLS_ATTRIBUTE = 'ai.prompt.tools';\n\n// =============================================================================\n// BASIC LLM SPAN INFORMATION\n// =============================================================================\n\n/**\n * Basic LLM span information\n * Multiple spans\n *\n * The id of the model\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#basic-llm-span-information\n */\nexport const AI_MODEL_ID_ATTRIBUTE = 'ai.model.id';\n\n/**\n * Basic LLM span information\n * Multiple spans\n *\n * Provider specific metadata returned with the generation response\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#basic-llm-span-information\n */\nexport const AI_RESPONSE_PROVIDER_METADATA_ATTRIBUTE = 'ai.response.providerMetadata';\n\n/**\n * Basic LLM span information\n * Multiple spans\n *\n * The number of cached input tokens that were used\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#basic-llm-span-information\n */\nexport const AI_USAGE_CACHED_INPUT_TOKENS_ATTRIBUTE = 'ai.usage.cachedInputTokens';\n\n/**\n * Prefix for the per-category breakdown of input tokens (AI SDK v6+), e.g.\n * `noCacheTokens`, `cacheReadTokens`, `cacheWriteTokens`. Only emitted by v6, where\n * `ai.usage.inputTokens` is already cache-inclusive.\n */\nexport const AI_USAGE_INPUT_TOKEN_DETAILS_ATTRIBUTE_PREFIX = 'ai.usage.inputTokenDetails.';\n\n/**\n * Basic LLM span information\n * Multiple spans\n *\n * The functionId that was set through `telemetry.functionId`\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#basic-llm-span-information\n */\nexport const AI_TELEMETRY_FUNCTION_ID_ATTRIBUTE = 'ai.telemetry.functionId';\n\n/**\n * Basic LLM span information\n * Multiple spans\n *\n * The number of completion tokens that were used\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#basic-llm-span-information\n */\nexport const AI_USAGE_COMPLETION_TOKENS_ATTRIBUTE = 'ai.usage.completionTokens';\n\n/**\n * Basic LLM span information\n * Multiple spans\n *\n * The number of prompt tokens that were used\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#basic-llm-span-information\n */\nexport const AI_USAGE_PROMPT_TOKENS_ATTRIBUTE = 'ai.usage.promptTokens';\n\n// =============================================================================\n// CALL LLM SPAN INFORMATION\n// =============================================================================\n\n/**\n * Call LLM span information\n * Individual LLM call spans\n *\n * The model that was used to generate the response\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#call-llm-span-information\n */\nexport const AI_RESPONSE_MODEL_ATTRIBUTE = 'ai.response.model';\n\n/**\n * Call LLM span information\n * Individual LLM call spans\n *\n * The id of the response\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#call-llm-span-information\n */\nexport const AI_RESPONSE_ID_ATTRIBUTE = 'ai.response.id';\n\n/**\n * Call LLM span information\n * Individual LLM call spans\n *\n * The timestamp of the response\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#call-llm-span-information\n */\nexport const AI_RESPONSE_TIMESTAMP_ATTRIBUTE = 'ai.response.timestamp';\n\n// =============================================================================\n// BASIC EMBEDDING SPAN INFORMATION\n// =============================================================================\n\n/**\n * Basic embedding span information\n * Embedding spans\n *\n * The number of tokens that were used\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#basic-embedding-span-information\n */\nexport const AI_USAGE_TOKENS_ATTRIBUTE = 'ai.usage.tokens';\n\n// =============================================================================\n// TOOL CALL SPANS\n// =============================================================================\n\n/**\n * Tool call spans\n * `ai.toolCall` span\n *\n * The name of the tool\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#tool-call-spans\n */\nexport const AI_TOOL_CALL_NAME_ATTRIBUTE = 'ai.toolCall.name';\n\n/**\n * Tool call spans\n * `ai.toolCall` span\n *\n * The id of the tool call\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#tool-call-spans\n */\nexport const AI_TOOL_CALL_ID_ATTRIBUTE = 'ai.toolCall.id';\n\n/**\n * Tool call spans\n * `ai.toolCall` span\n *\n * The parameters of the tool call\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#tool-call-spans\n */\nexport const AI_TOOL_CALL_ARGS_ATTRIBUTE = 'ai.toolCall.args';\n\n/**\n * Tool call spans\n * `ai.toolCall` span\n *\n * The result of the tool call\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#tool-call-spans\n */\nexport const AI_TOOL_CALL_RESULT_ATTRIBUTE = 'ai.toolCall.result';\n\n// =============================================================================\n// PROVIDER METADATA\n// =============================================================================\n\n/**\n * OpenAI Provider Metadata\n * @see https://ai-sdk.dev/providers/ai-sdk-providers/openai\n * @see https://github.com/vercel/ai/blob/65e042afde6aad4da9d7a62526ece839eb34f9a5/packages/openai/src/openai-chat-language-model.ts#L397-L416\n * @see https://github.com/vercel/ai/blob/65e042afde6aad4da9d7a62526ece839eb34f9a5/packages/openai/src/responses/openai-responses-language-model.ts#L377C7-L384\n */\nexport interface OpenAiProviderMetadata {\n  /**\n   * The number of predicted output tokens that were accepted.\n   * @see https://ai-sdk.dev/providers/ai-sdk-providers/openai#predicted-outputs\n   */\n  acceptedPredictionTokens?: number;\n\n  /**\n   * The number of predicted output tokens that were rejected.\n   * @see https://ai-sdk.dev/providers/ai-sdk-providers/openai#predicted-outputs\n   */\n  rejectedPredictionTokens?: number;\n\n  /**\n   * The number of reasoning tokens that the model generated.\n   * @see https://ai-sdk.dev/providers/ai-sdk-providers/openai#responses-models\n   */\n  reasoningTokens?: number;\n\n  /**\n   * The number of prompt tokens that were a cache hit.\n   * @see https://ai-sdk.dev/providers/ai-sdk-providers/openai#responses-models\n   */\n  cachedPromptTokens?: number;\n\n  /**\n   * @see https://ai-sdk.dev/providers/ai-sdk-providers/openai#responses-models\n   *\n   * The ID of the response. Can be used to continue a conversation.\n   */\n  responseId?: string;\n}\n\n/**\n * Anthropic Provider Metadata\n * @see https://ai-sdk.dev/providers/ai-sdk-providers/anthropic\n * @see https://github.com/vercel/ai/blob/65e042afde6aad4da9d7a62526ece839eb34f9a5/packages/anthropic/src/anthropic-messages-language-model.ts#L346-L352\n */\ninterface AnthropicProviderMetadata {\n  /**\n   * The number of tokens that were used to create the cache.\n   * @see https://ai-sdk.dev/providers/ai-sdk-providers/anthropic#cache-control\n   */\n  cacheCreationInputTokens?: number;\n\n  /**\n   * The number of tokens that were read from the cache.\n   * @see https://ai-sdk.dev/providers/ai-sdk-providers/anthropic#cache-control\n   */\n  cacheReadInputTokens?: number;\n\n  /**\n   * Usage metrics for the Anthropic model.\n   */\n  usage?: {\n    input_tokens: number;\n    cache_creation_input_tokens?: number;\n    cache_read_input_tokens?: number;\n    cache_creation?: {\n      ephemeral_5m_input_tokens?: number;\n      ephemeral_1h_input_tokens?: number;\n    };\n    output_tokens?: number;\n    service_tier?: string;\n  };\n}\n\n/**\n * Amazon Bedrock Provider Metadata\n * @see https://ai-sdk.dev/providers/ai-sdk-providers/amazon-bedrock\n * @see https://github.com/vercel/ai/blob/65e042afde6aad4da9d7a62526ece839eb34f9a5/packages/amazon-bedrock/src/bedrock-chat-language-model.ts#L263-L280\n */\ninterface AmazonBedrockProviderMetadata {\n  /**\n   * @see https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseTrace.html\n   */\n  trace?: {\n    /**\n     * The guardrail trace object.\n     * @see https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_GuardrailTraceAssessment.html\n     *\n     * This was purposely left as unknown as it's a complex object. This can be typed in the future\n     * if the SDK decides to support bedrock in a more advanced way.\n     */\n    guardrail?: unknown;\n    /**\n     * The request's prompt router.\n     * @see https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_PromptRouterTrace.html\n     */\n    promptRouter?: {\n      /**\n       * The ID of the invoked model.\n       */\n      invokedModelId?: string;\n    };\n  };\n  usage?: {\n    /**\n     * The number of tokens that were read from the cache.\n     * @see https://ai-sdk.dev/providers/ai-sdk-providers/amazon-bedrock#cache-points\n     */\n    cacheReadInputTokens?: number;\n\n    /**\n     * The number of tokens that were written to the cache.\n     * @see https://ai-sdk.dev/providers/ai-sdk-providers/amazon-bedrock#cache-points\n     */\n    cacheWriteInputTokens?: number;\n  };\n}\n\n/**\n * Google Generative AI Provider Metadata\n * @see https://ai-sdk.dev/providers/ai-sdk-providers/google-generative-ai\n */\nexport interface GoogleGenerativeAIProviderMetadata {\n  /**\n   * @see https://github.com/vercel/ai/blob/65e042afde6aad4da9d7a62526ece839eb34f9a5/packages/google/src/google-generative-ai-prompt.ts#L28-L30\n   */\n  groundingMetadata: null | {\n    /**\n     * Array of search queries used to retrieve information\n     * @example [\"What's the weather in Chicago this weekend?\"]\n     *\n     * @see https://ai-sdk.dev/providers/ai-sdk-providers/google-generative-ai#search-grounding\n     */\n    webSearchQueries: string[] | null;\n    /**\n     * Contains the main search result content used as an entry point\n     * The `renderedContent` field contains the formatted content\n     * @see https://ai-sdk.dev/providers/ai-sdk-providers/google-generative-ai#search-grounding\n     */\n    searchEntryPoint?: {\n      renderedContent: string;\n    } | null;\n    /**\n     * Contains details about how specific response parts are supported by search results\n     * @see https://ai-sdk.dev/providers/ai-sdk-providers/google-generative-ai#search-grounding\n     */\n    groundingSupports: Array<{\n      /**\n       * Information about the grounded text segment.\n       */\n      segment: {\n        /**\n         * The start index of the text segment.\n         */\n        startIndex?: number | null;\n        /**\n         * The end index of the text segment.\n         */\n        endIndex?: number | null;\n        /**\n         * The actual text segment.\n         */\n        text?: string | null;\n      };\n      /**\n       * References to supporting search result chunks.\n       */\n      groundingChunkIndices?: number[] | null;\n      /**\n       * Confidence scores (0-1) for each supporting chunk.\n       */\n      confidenceScores?: number[] | null;\n    }> | null;\n  };\n  /**\n   * @see https://github.com/vercel/ai/blob/65e042afde6aad4da9d7a62526ece839eb34f9a5/packages/google/src/google-generative-ai-language-model.ts#L620-L627\n   * @see https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/configure-safety-filters\n   */\n  safetyRatings?: null | unknown;\n\n  /**\n   * Raw token usage returned by the Gemini API. Reasoning (\"thoughts\") tokens are reported here in\n   * `thoughtsTokenCount`, separately from the candidate output count, so they have to be added back\n   * into `gen_ai.usage.output_tokens`.\n   * @see https://ai.google.dev/api/generate-content#UsageMetadata\n   * @see https://github.com/vercel/ai/blob/main/packages/google/src/google-language-model.ts\n   */\n  usageMetadata?: null | {\n    promptTokenCount?: number;\n    candidatesTokenCount?: number;\n    thoughtsTokenCount?: number;\n    totalTokenCount?: number;\n  };\n}\n\n/**\n * DeepSeek Provider Metadata\n * @see https://ai-sdk.dev/providers/ai-sdk-providers/deepseek\n */\ninterface DeepSeekProviderMetadata {\n  /**\n   * The number of tokens that were cache hits.\n   * @see https://ai-sdk.dev/providers/ai-sdk-providers/deepseek#cache-token-usage\n   */\n  promptCacheHitTokens?: number;\n\n  /**\n   * The number of tokens that were cache misses.\n   * @see https://ai-sdk.dev/providers/ai-sdk-providers/deepseek#cache-token-usage\n   */\n  promptCacheMissTokens?: number;\n}\n\n/**\n * Perplexity Provider Metadata\n * @see https://ai-sdk.dev/providers/ai-sdk-providers/perplexity\n */\ninterface PerplexityProviderMetadata {\n  /**\n   * Object containing citationTokens and numSearchQueries metrics\n   */\n  usage?: {\n    citationTokens?: number;\n    numSearchQueries?: number;\n  };\n  /**\n   * Array of image URLs when return_images is enabled.\n   *\n   * You can enable image responses by setting return_images: true in the provider options.\n   * This feature is only available to Perplexity Tier-2 users and above.\n   */\n  images?: Array<{\n    imageUrl?: string;\n    originUrl?: string;\n    height?: number;\n    width?: number;\n  }>;\n}\n\nexport interface ProviderMetadata {\n  openai?: OpenAiProviderMetadata;\n  azure?: OpenAiProviderMetadata; // v6: Azure Responses API uses 'azure' key instead of 'openai'\n  anthropic?: AnthropicProviderMetadata;\n  bedrock?: AmazonBedrockProviderMetadata;\n  google?: GoogleGenerativeAIProviderMetadata;\n  vertex?: GoogleGenerativeAIProviderMetadata; // v6: Google Vertex uses 'vertex' key instead of 'google'\n  deepseek?: DeepSeekProviderMetadata;\n  perplexity?: PerplexityProviderMetadata;\n}\n", "import type { TraceContext } from '../../types/context';\nimport type { Span, SpanAttributes, SpanJSON } from '../../types/span';\nimport {\n  GEN_AI_INPUT_MESSAGES_ATTRIBUTE,\n  GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE,\n  GEN_AI_REQUEST_AVAILABLE_TOOLS_ATTRIBUTE,\n  GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE,\n  GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE,\n  GEN_AI_TOOL_NAME_ATTRIBUTE,\n  GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE,\n  GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE,\n} from '../ai/gen-ai-attributes';\nimport { extractSystemInstructions, getTruncatedJsonString } from '../ai/utils';\nimport { stringify } from '../../utils/string';\nimport { toolCallSpanContextMap } from './constants';\nimport type { TokenSummary, ToolCallSpanContext } from './types';\nimport { AI_PROMPT_ATTRIBUTE, AI_PROMPT_MESSAGES_ATTRIBUTE } from './vercel-ai-attributes';\n\n/**\n * Accumulates token data from a span to its parent in the token accumulator map.\n * This function extracts token usage from the current span and adds it to the\n * accumulated totals for its parent span.\n */\nexport function accumulateTokensForParent(span: SpanJSON, tokenAccumulator: Map<string, TokenSummary>): void {\n  const parentSpanId = span.parent_span_id;\n  if (!parentSpanId) {\n    return;\n  }\n\n  const inputTokens = span.data[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE];\n  const outputTokens = span.data[GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE];\n\n  if (typeof inputTokens === 'number' || typeof outputTokens === 'number') {\n    const existing = tokenAccumulator.get(parentSpanId) || { inputTokens: 0, outputTokens: 0 };\n\n    if (typeof inputTokens === 'number') {\n      existing.inputTokens += inputTokens;\n    }\n    if (typeof outputTokens === 'number') {\n      existing.outputTokens += outputTokens;\n    }\n\n    tokenAccumulator.set(parentSpanId, existing);\n  }\n}\n\n/**\n * Applies accumulated token data to the `gen_ai.invoke_agent` span.\n * Only immediate children of the `gen_ai.invoke_agent` span are considered,\n * since aggregation will automatically occur for each parent span.\n */\nexport function applyAccumulatedTokens(\n  spanOrTrace: SpanJSON | TraceContext,\n  tokenAccumulator: Map<string, TokenSummary>,\n): void {\n  const accumulated = tokenAccumulator.get(spanOrTrace.span_id);\n  if (!accumulated || !spanOrTrace.data) {\n    return;\n  }\n\n  if (accumulated.inputTokens > 0) {\n    spanOrTrace.data[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] = accumulated.inputTokens;\n  }\n  if (accumulated.outputTokens > 0) {\n    spanOrTrace.data[GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE] = accumulated.outputTokens;\n  }\n  if (accumulated.inputTokens > 0 || accumulated.outputTokens > 0) {\n    spanOrTrace.data['gen_ai.usage.total_tokens'] = accumulated.inputTokens + accumulated.outputTokens;\n  }\n}\n\n/**\n * Builds a map of tool name -> description from all spans with available_tools.\n * This avoids O(n²) iteration and repeated JSON parsing.\n */\nfunction buildToolDescriptionMap(spans: SpanJSON[]): Map<string, string> {\n  const toolDescriptions = new Map<string, string>();\n\n  for (const span of spans) {\n    const availableTools = span.data[GEN_AI_REQUEST_AVAILABLE_TOOLS_ATTRIBUTE];\n    if (typeof availableTools !== 'string') {\n      continue;\n    }\n    try {\n      const tools = JSON.parse(availableTools) as Array<{ name?: string; description?: string }>;\n      for (const tool of tools) {\n        if (tool.name && tool.description && !toolDescriptions.has(tool.name)) {\n          toolDescriptions.set(tool.name, tool.description);\n        }\n      }\n    } catch {\n      // ignore parse errors\n    }\n  }\n\n  return toolDescriptions;\n}\n\n/**\n * Applies tool descriptions and accumulated tokens to spans in a single pass.\n *\n * - For `gen_ai.execute_tool` spans: looks up tool description from\n *   `gen_ai.request.available_tools` on sibling spans\n * - For `gen_ai.invoke_agent` spans: applies accumulated token data from children\n */\nexport function applyToolDescriptionsAndTokens(spans: SpanJSON[], tokenAccumulator: Map<string, TokenSummary>): void {\n  // Build lookup map once to avoid O(n²) iteration and repeated JSON parsing\n  const toolDescriptions = buildToolDescriptionMap(spans);\n\n  for (const span of spans) {\n    if (span.op === 'gen_ai.execute_tool') {\n      const toolName = span.data[GEN_AI_TOOL_NAME_ATTRIBUTE];\n      if (typeof toolName === 'string') {\n        const description = toolDescriptions.get(toolName);\n        if (description) {\n          span.data[GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE] = description;\n        }\n      }\n    }\n\n    if (span.op === 'gen_ai.invoke_agent') {\n      applyAccumulatedTokens(span, tokenAccumulator);\n    }\n  }\n}\n\n/**\n * Get the span context associated with a tool call ID.\n */\nexport function _INTERNAL_getSpanContextForToolCallId(toolCallId: string): ToolCallSpanContext | undefined {\n  return toolCallSpanContextMap.get(toolCallId);\n}\n\n/**\n * Clean up the span mapping for a tool call ID\n */\nexport function _INTERNAL_cleanupToolCallSpanContext(toolCallId: string): void {\n  toolCallSpanContextMap.delete(toolCallId);\n}\n\n/**\n * Convert an array of tool strings to a JSON string\n */\nexport function convertAvailableToolsToJsonString(tools: unknown[]): string {\n  const toolObjects = tools.map(tool => {\n    if (typeof tool === 'string') {\n      try {\n        return JSON.parse(tool);\n      } catch {\n        return tool;\n      }\n    }\n    return tool;\n  });\n  return JSON.stringify(toolObjects);\n}\n\n/**\n * Filter out invalid entries in messages array\n * @param input - The input array to filter\n * @returns The filtered array\n */\nfunction filterMessagesArray(input: unknown[]): { role: string; content: string }[] {\n  return input.filter(\n    (m: unknown): m is { role: string; content: string } =>\n      !!m && typeof m === 'object' && 'role' in m && 'content' in m,\n  );\n}\n\n/**\n * Normalize the user input (stringified object with prompt, system, messages) to messages array\n */\nexport function convertUserInputToMessagesFormat(userInput: string): { role: string; content: string }[] {\n  try {\n    const p = JSON.parse(userInput);\n    if (!!p && typeof p === 'object') {\n      let { messages } = p;\n      const { prompt, system } = p;\n      const result: { role: string; content: string }[] = [];\n\n      // prepend top-level system instruction if present\n      if (typeof system === 'string') {\n        result.push({ role: 'system', content: system });\n      }\n\n      // stringified messages array\n      if (typeof messages === 'string') {\n        try {\n          messages = JSON.parse(messages);\n        } catch {\n          // ignore parse errors\n        }\n      }\n\n      // messages array format: { messages: [...] }\n      if (Array.isArray(messages)) {\n        result.push(...filterMessagesArray(messages));\n        return result;\n      }\n\n      // prompt array format: { prompt: [...] }\n      if (Array.isArray(prompt)) {\n        result.push(...filterMessagesArray(prompt));\n        return result;\n      }\n\n      // prompt string format: { prompt: \"...\" }\n      if (typeof prompt === 'string') {\n        result.push({ role: 'user', content: prompt });\n      }\n\n      if (result.length > 0) {\n        return result;\n      }\n    }\n    // eslint-disable-next-line no-empty\n  } catch {}\n  return [];\n}\n\n/**\n * Generate a request.messages JSON array from the prompt field in the\n * invoke_agent op\n */\nexport function requestMessagesFromPrompt(span: Span, attributes: SpanAttributes, enableTruncation: boolean): void {\n  if (\n    typeof attributes[AI_PROMPT_ATTRIBUTE] === 'string' &&\n    !attributes[GEN_AI_INPUT_MESSAGES_ATTRIBUTE] &&\n    !attributes[AI_PROMPT_MESSAGES_ATTRIBUTE]\n  ) {\n    // No messages array is present, so we need to convert the prompt to the proper messages format\n    // This is the case for ai.generateText spans\n    // The ai.prompt attribute is a stringified object with prompt, system, messages attributes\n    // The format of these is described in the vercel docs, for instance: https://ai-sdk.dev/docs/reference/ai-sdk-core/stream-object#parameters\n    const userInput = attributes[AI_PROMPT_ATTRIBUTE];\n    const messages = convertUserInputToMessagesFormat(userInput);\n    if (messages.length) {\n      const { systemInstructions, filteredMessages } = extractSystemInstructions(messages);\n\n      if (systemInstructions) {\n        span.setAttribute(GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE, systemInstructions);\n      }\n\n      const filteredLength = Array.isArray(filteredMessages) ? filteredMessages.length : 0;\n      const messagesJson = enableTruncation ? getTruncatedJsonString(filteredMessages) : stringify(filteredMessages);\n\n      span.setAttributes({\n        [AI_PROMPT_ATTRIBUTE]: messagesJson,\n        [GEN_AI_INPUT_MESSAGES_ATTRIBUTE]: messagesJson,\n        [GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE]: filteredLength,\n      });\n    }\n  } else if (typeof attributes[AI_PROMPT_MESSAGES_ATTRIBUTE] === 'string') {\n    // In this case we already get a properly formatted messages array, this is the preferred way to get the messages\n    // This is the case for ai.generateText.doGenerate spans\n    const originalMessagesJson = attributes[AI_PROMPT_MESSAGES_ATTRIBUTE];\n    try {\n      const messages = JSON.parse(originalMessagesJson);\n      if (Array.isArray(messages)) {\n        const { systemInstructions, filteredMessages } = extractSystemInstructions(messages);\n\n        if (systemInstructions) {\n          span.setAttribute(GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE, systemInstructions);\n        }\n\n        const filteredLength = Array.isArray(filteredMessages) ? filteredMessages.length : 0;\n\n        // `extractSystemInstructions` returns the original array reference unchanged when no\n        // system message is extracted. When truncation is also disabled, re-serializing would\n        // reproduce the SDK's own input string, so we reuse it instead of allocating a second\n        // full-size copy of the payload (matters for large prompts in memory-constrained runtimes).\n        const messagesJson =\n          !enableTruncation && filteredMessages === messages\n            ? originalMessagesJson\n            : enableTruncation\n              ? getTruncatedJsonString(filteredMessages)\n              : stringify(filteredMessages);\n\n        span.setAttributes({\n          [AI_PROMPT_MESSAGES_ATTRIBUTE]: messagesJson,\n          [GEN_AI_INPUT_MESSAGES_ATTRIBUTE]: messagesJson,\n          [GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE]: filteredLength,\n        });\n      }\n      // eslint-disable-next-line no-empty\n    } catch {}\n  }\n}\n", "/* eslint-disable max-lines */\nimport type { Client } from '../../client';\nimport { getClient } from '../../currentScopes';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../../semanticAttributes';\nimport { shouldEnableTruncation } from '../ai/utils';\nimport type { Event } from '../../types/event';\nimport type { Span, SpanAttributes, SpanAttributeValue, SpanJSON, StreamedSpanJSON } from '../../types/span';\nimport { _INTERNAL_skipAiProviderWrapping } from '../../utils/ai/providerSkip';\nimport { spanToJSON } from '../../utils/spanUtils';\nimport { WORKERS_AI_INTEGRATION_NAME } from '../workers-ai/constants';\nimport {\n  GEN_AI_CONVERSATION_ID_ATTRIBUTE,\n  GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE,\n  GEN_AI_INPUT_MESSAGES_ATTRIBUTE,\n  GEN_AI_OPERATION_NAME_ATTRIBUTE,\n  GEN_AI_OUTPUT_MESSAGES_ATTRIBUTE,\n  GEN_AI_REQUEST_MODEL_ATTRIBUTE,\n  GEN_AI_RESPONSE_MODEL_ATTRIBUTE,\n  GEN_AI_TOOL_CALL_ID_ATTRIBUTE,\n  GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE,\n  GEN_AI_TOOL_INPUT_ATTRIBUTE,\n  GEN_AI_TOOL_NAME_ATTRIBUTE,\n  GEN_AI_TOOL_OUTPUT_ATTRIBUTE,\n  GEN_AI_TOOL_TYPE_ATTRIBUTE,\n  GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE,\n  GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE,\n  GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,\n  GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE,\n  GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE,\n} from '../ai/gen-ai-attributes';\nimport { SPAN_TO_OPERATION_NAME, toolCallSpanContextMap, toolDescriptionMap } from './constants';\nimport type { TokenSummary } from './types';\nimport { hasSpanStreamingEnabled } from '../spans/hasSpanStreamingEnabled';\nimport {\n  accumulateTokensForParent,\n  applyAccumulatedTokens,\n  applyToolDescriptionsAndTokens,\n  convertAvailableToolsToJsonString,\n  requestMessagesFromPrompt,\n} from './utils';\nimport type { OpenAiProviderMetadata, ProviderMetadata } from './vercel-ai-attributes';\nimport {\n  AI_MODEL_ID_ATTRIBUTE,\n  AI_OPERATION_ID_ATTRIBUTE,\n  AI_PROMPT_MESSAGES_ATTRIBUTE,\n  AI_PROMPT_TOOLS_ATTRIBUTE,\n  AI_RESPONSE_FINISH_REASON_ATTRIBUTE,\n  AI_RESPONSE_OBJECT_ATTRIBUTE,\n  AI_RESPONSE_PROVIDER_METADATA_ATTRIBUTE,\n  AI_RESPONSE_TEXT_ATTRIBUTE,\n  AI_RESPONSE_TOOL_CALLS_ATTRIBUTE,\n  AI_SCHEMA_ATTRIBUTE,\n  AI_TELEMETRY_FUNCTION_ID_ATTRIBUTE,\n  AI_TOOL_CALL_ARGS_ATTRIBUTE,\n  AI_TOOL_CALL_ID_ATTRIBUTE,\n  AI_TOOL_CALL_NAME_ATTRIBUTE,\n  AI_TOOL_CALL_RESULT_ATTRIBUTE,\n  AI_USAGE_CACHED_INPUT_TOKENS_ATTRIBUTE,\n  AI_USAGE_COMPLETION_TOKENS_ATTRIBUTE,\n  AI_USAGE_INPUT_TOKEN_DETAILS_ATTRIBUTE_PREFIX,\n  AI_USAGE_PROMPT_TOKENS_ATTRIBUTE,\n  AI_USAGE_TOKENS_ATTRIBUTE,\n  AI_VALUES_ATTRIBUTE,\n  OPERATION_NAME_ATTRIBUTE,\n} from './vercel-ai-attributes';\n\n/**\n * Post-process spans emitted by the Vercel AI SDK.\n * This is supposed to be used in `client.on('spanStart', ...)\n */\nfunction onVercelAiSpanStart(span: Span): void {\n  const { data: attributes, description: name } = spanToJSON(span);\n\n  if (!name) {\n    return;\n  }\n\n  // Tool call spans\n  // https://ai-sdk.dev/docs/ai-sdk-core/telemetry#tool-call-spans\n  if (attributes[AI_TOOL_CALL_NAME_ATTRIBUTE] && attributes[AI_TOOL_CALL_ID_ATTRIBUTE] && name === 'ai.toolCall') {\n    processToolCallSpan(span, attributes);\n    return;\n  }\n\n  // V6+ Check if this is a Vercel AI span by checking if the operation ID attribute is present.\n  // V5+ Check if this is a Vercel AI span by name pattern.\n  if (!attributes[AI_OPERATION_ID_ATTRIBUTE] && !name.startsWith('ai.')) {\n    return;\n  }\n\n  // Registered lazily here (not at `setupOnce`) so a direct `env.AI.run` call made before any `ai`\n  // SDK call still gets its own span.\n  if (SPAN_TO_OPERATION_NAME.get(name) === 'generate_content') {\n    _INTERNAL_skipAiProviderWrapping([WORKERS_AI_INTEGRATION_NAME]);\n  }\n\n  const client = getClient();\n  const integration = client?.getIntegrationByName('VercelAI') as\n    | { options?: { enableTruncation?: boolean } }\n    | undefined;\n  const enableTruncation = shouldEnableTruncation(integration?.options?.enableTruncation);\n\n  processGenerateSpan(span, name, attributes, enableTruncation);\n}\n\nfunction vercelAiEventProcessor(event: Event): Event {\n  if (event.type === 'transaction' && event.spans) {\n    // Map to accumulate token data by parent span ID\n    const tokenAccumulator: Map<string, TokenSummary> = new Map();\n\n    // First pass: process all spans and accumulate token data\n    for (const span of event.spans) {\n      processEndedVercelAiSpan(span);\n\n      // Accumulate token data for parent spans\n      accumulateTokensForParent(span, tokenAccumulator);\n    }\n\n    // Second pass: apply tool descriptions and accumulated tokens\n    applyToolDescriptionsAndTokens(event.spans, tokenAccumulator);\n\n    // Also apply to root when it is the invoke_agent pipeline\n    const trace = event.contexts?.trace;\n    if (trace?.op === 'gen_ai.invoke_agent') {\n      applyAccumulatedTokens(trace, tokenAccumulator);\n    }\n  }\n\n  return event;\n}\n\n/**\n * Tool call structure from Vercel AI SDK\n * Note: V5/V6 use 'input' for arguments, V4 and earlier use 'args'\n */\ninterface VercelToolCall {\n  toolCallId: string;\n  toolName: string;\n  input?: Record<string, unknown> | string; // V5/V6\n  args?: string; // V4 and earlier\n}\n\n/**\n * Normalize finish reason to match OpenTelemetry semantic conventions.\n * Valid values: \"stop\", \"length\", \"content_filter\", \"tool_call\", \"error\"\n *\n * Vercel AI SDK uses \"tool-calls\" (plural, with hyphen) which we map to \"tool_call\".\n */\nfunction normalizeFinishReason(finishReason: unknown): string {\n  if (typeof finishReason !== 'string') {\n    return 'stop';\n  }\n\n  // Map Vercel AI SDK finish reasons to OpenTelemetry semantic convention values\n  switch (finishReason) {\n    case 'tool-calls':\n      return 'tool_call';\n    case 'stop':\n    case 'length':\n    case 'content_filter':\n    case 'error':\n      return finishReason;\n    default:\n      // For unknown values, return as-is (schema allows arbitrary strings)\n      return finishReason;\n  }\n}\n\n/**\n * Build gen_ai.output.messages from ai.response.text and/or ai.response.toolCalls\n *\n * Format follows OpenTelemetry semantic conventions:\n * [{\"role\": \"assistant\", \"parts\": [...], \"finish_reason\": \"stop\"}]\n *\n * Parts can be:\n * - {\"type\": \"text\", \"content\": \"...\"}\n * - {\"type\": \"tool_call\", \"id\": \"...\", \"name\": \"...\", \"arguments\": \"...\"}\n */\nfunction buildOutputMessages(attributes: Record<string, unknown>): void {\n  const responseText = attributes[AI_RESPONSE_TEXT_ATTRIBUTE];\n  const responseToolCalls = attributes[AI_RESPONSE_TOOL_CALLS_ATTRIBUTE];\n  const finishReason = attributes[AI_RESPONSE_FINISH_REASON_ATTRIBUTE];\n\n  // Skip if neither text nor tool calls are present\n  if (responseText == null && responseToolCalls == null) {\n    return;\n  }\n\n  const parts: Array<Record<string, unknown>> = [];\n\n  // Add text part if present\n  if (typeof responseText === 'string' && responseText.length > 0) {\n    parts.push({\n      type: 'text',\n      content: responseText,\n    });\n  }\n\n  // Add tool call parts if present\n  if (responseToolCalls != null) {\n    try {\n      // Tool calls can be a string (JSON) or already parsed array\n      const toolCalls: VercelToolCall[] =\n        typeof responseToolCalls === 'string' ? JSON.parse(responseToolCalls) : responseToolCalls;\n\n      if (Array.isArray(toolCalls)) {\n        for (const toolCall of toolCalls) {\n          // V5/V6 use 'input', V4 and earlier use 'args'\n          const args = toolCall.input ?? toolCall.args;\n          parts.push({\n            type: 'tool_call',\n            id: toolCall.toolCallId,\n            name: toolCall.toolName,\n            // Handle undefined args: JSON.stringify(undefined) returns undefined, not a string,\n            // which would cause the property to be omitted from the final JSON output\n            arguments: typeof args === 'string' ? args : JSON.stringify(args ?? {}),\n          });\n        }\n        // Only delete tool calls attribute if we successfully processed them\n        // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n        delete attributes[AI_RESPONSE_TOOL_CALLS_ATTRIBUTE];\n      }\n    } catch {\n      // Ignore parsing errors - tool calls attribute is preserved\n    }\n  }\n\n  // Only set output messages and delete text attribute if we have parts\n  if (parts.length > 0) {\n    const outputMessage = {\n      role: 'assistant',\n      parts,\n      finish_reason: normalizeFinishReason(finishReason),\n    };\n\n    attributes[GEN_AI_OUTPUT_MESSAGES_ATTRIBUTE] = JSON.stringify([outputMessage]);\n\n    // Remove the text attribute since it's now captured in gen_ai.output.messages\n    // Note: tool calls attribute is deleted above only if successfully parsed\n    // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n    delete attributes[AI_RESPONSE_TEXT_ATTRIBUTE];\n  }\n}\n\n/**\n * Post-process spans emitted by the Vercel AI SDK.\n */\n/**\n * Rename and normalize Vercel AI SDK attributes to OpenTelemetry semantic conventions.\n * This is the shared attribute processing logic used by both the legacy event processor\n * path (SpanJSON) and the streamed span path (StreamedSpanJSON).\n */\nexport function processVercelAiSpanAttributes(attributes: Record<string, unknown>): void {\n  renameAttributeKey(attributes, AI_USAGE_COMPLETION_TOKENS_ATTRIBUTE, GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE);\n  renameAttributeKey(attributes, AI_USAGE_PROMPT_TOKENS_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE);\n  renameAttributeKey(attributes, AI_USAGE_CACHED_INPUT_TOKENS_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE);\n\n  // Parent spans (ai.streamText, ai.streamObject, etc.) use inputTokens/outputTokens instead of promptTokens/completionTokens\n  renameAttributeKey(attributes, 'ai.usage.inputTokens', GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE);\n  renameAttributeKey(attributes, 'ai.usage.outputTokens', GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE);\n\n  // Embedding spans use ai.usage.tokens instead of promptTokens/completionTokens\n  renameAttributeKey(attributes, AI_USAGE_TOKENS_ATTRIBUTE, GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE);\n\n  // AI SDK uses avgOutputTokensPerSecond, map to our expected attribute name\n  renameAttributeKey(attributes, 'ai.response.avgOutputTokensPerSecond', 'ai.response.avgCompletionTokensPerSecond');\n\n  // v6 input tokens are cache-inclusive (marked by the presence of `inputTokenDetails.*`); only\n  // older SDKs need the cached tokens added back.\n  const inputTokensAreCacheInclusive = Object.keys(attributes).some(key =>\n    key.startsWith(AI_USAGE_INPUT_TOKEN_DETAILS_ATTRIBUTE_PREFIX),\n  );\n  if (\n    !inputTokensAreCacheInclusive &&\n    typeof attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] === 'number' &&\n    typeof attributes[GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE] === 'number'\n  ) {\n    attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] =\n      attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] + attributes[GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE];\n  }\n\n  // Compute total tokens from input + output (embeddings may only have input tokens)\n  if (typeof attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] === 'number') {\n    const outputTokens =\n      typeof attributes[GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE] === 'number'\n        ? attributes[GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE]\n        : 0;\n    attributes[GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE] = outputTokens + attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE];\n  }\n\n  // Convert the available tools array to a JSON string\n  if (attributes[AI_PROMPT_TOOLS_ATTRIBUTE] && Array.isArray(attributes[AI_PROMPT_TOOLS_ATTRIBUTE])) {\n    attributes[AI_PROMPT_TOOLS_ATTRIBUTE] = convertAvailableToolsToJsonString(\n      attributes[AI_PROMPT_TOOLS_ATTRIBUTE] as unknown[],\n    );\n  }\n\n  // Rename AI SDK attributes to standardized gen_ai attributes\n  // Map operation.name to OpenTelemetry semantic convention values\n  if (attributes[OPERATION_NAME_ATTRIBUTE]) {\n    // V6+ sets ai.operationId to the bare operation (e.g. \"ai.streamText\") while\n    // operation.name appends functionId (e.g. \"ai.streamText myAgent\").\n    // When ai.operationId is present, use it for correct mapping.\n    const rawOperationName = attributes[AI_OPERATION_ID_ATTRIBUTE]\n      ? (attributes[AI_OPERATION_ID_ATTRIBUTE] as string)\n      : (attributes[OPERATION_NAME_ATTRIBUTE] as string);\n    const operationName = SPAN_TO_OPERATION_NAME.get(rawOperationName) ?? rawOperationName;\n    attributes[GEN_AI_OPERATION_NAME_ATTRIBUTE] = operationName;\n    // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n    delete attributes[OPERATION_NAME_ATTRIBUTE];\n  }\n  renameAttributeKey(attributes, AI_PROMPT_MESSAGES_ATTRIBUTE, GEN_AI_INPUT_MESSAGES_ATTRIBUTE);\n\n  // Build gen_ai.output.messages from response text and/or tool calls\n  // Note: buildOutputMessages also removes the source attributes when output is successfully generated\n  buildOutputMessages(attributes);\n\n  renameAttributeKey(attributes, AI_RESPONSE_OBJECT_ATTRIBUTE, 'gen_ai.response.object');\n  renameAttributeKey(attributes, AI_PROMPT_TOOLS_ATTRIBUTE, 'gen_ai.request.available_tools');\n\n  renameAttributeKey(attributes, AI_TOOL_CALL_ARGS_ATTRIBUTE, GEN_AI_TOOL_INPUT_ATTRIBUTE);\n  renameAttributeKey(attributes, AI_TOOL_CALL_RESULT_ATTRIBUTE, GEN_AI_TOOL_OUTPUT_ATTRIBUTE);\n\n  renameAttributeKey(attributes, AI_SCHEMA_ATTRIBUTE, 'gen_ai.request.schema');\n  renameAttributeKey(attributes, AI_MODEL_ID_ATTRIBUTE, GEN_AI_REQUEST_MODEL_ATTRIBUTE);\n\n  // Map embedding input: ai.values → gen_ai.embeddings.input\n  // Vercel AI SDK JSON-stringifies each value individually, so we parse each element back.\n  // Single embed gets unwrapped to a plain value; batch embedMany stays as a JSON array.\n  if (Array.isArray(attributes[AI_VALUES_ATTRIBUTE])) {\n    const parsed = (attributes[AI_VALUES_ATTRIBUTE] as string[]).map(v => {\n      try {\n        return JSON.parse(v);\n      } catch {\n        return v;\n      }\n    });\n    attributes[GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE] = parsed.length === 1 ? parsed[0] : JSON.stringify(parsed);\n  }\n\n  addProviderMetadataToAttributes(attributes);\n\n  for (const key of Object.keys(attributes)) {\n    // JSON-stringify any array-valued attributes so they survive v2 span serialization.\n    // Can be removed once span streaming supports arrays natively.\n    if (Array.isArray(attributes[key])) {\n      attributes[key] = JSON.stringify(attributes[key]);\n    }\n    // Change attributes namespaced with `ai.X` to `vercel.ai.X`\n    if (key.startsWith('ai.')) {\n      renameAttributeKey(attributes, key, `vercel.${key}`);\n    }\n  }\n}\n\nfunction processEndedVercelAiSpan(span: SpanJSON): void {\n  const { data: attributes, origin } = span;\n\n  if (origin !== 'auto.vercelai.otel') {\n    return;\n  }\n\n  // The Vercel AI SDK sets span status to raw error message strings.\n  // Any such value should be normalized to a SpanStatusType value. We pick internal_error as it is the most generic.\n  if (span.status && span.status !== 'ok') {\n    span.status = 'internal_error';\n  }\n\n  processVercelAiSpanAttributes(attributes);\n}\n\nfunction processVercelAiStreamedSpan(span: StreamedSpanJSON): void {\n  const attributes = span.attributes;\n  if (attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] !== 'auto.vercelai.otel') {\n    return;\n  }\n\n  processVercelAiSpanAttributes(attributes);\n\n  // Look up tool description from the toolDescriptionMap for execute_tool spans\n  if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] === 'gen_ai.execute_tool' && span.parent_span_id) {\n    const descriptions = toolDescriptionMap.get(span.parent_span_id);\n\n    if (descriptions) {\n      const toolName = attributes[GEN_AI_TOOL_NAME_ATTRIBUTE];\n      if (typeof toolName === 'string') {\n        const desc = descriptions.get(toolName);\n        if (desc) {\n          attributes[GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE] = desc;\n        }\n      }\n    }\n  }\n\n  // Clean up tool descriptions when the parent span ends\n  toolDescriptionMap.delete(span.span_id);\n}\n\n/**\n * Renames an attribute key in the provided attributes object if the old key exists.\n * This function safely handles null and undefined values.\n */\nfunction renameAttributeKey(attributes: Record<string, unknown>, oldKey: string, newKey: string): void {\n  if (attributes[oldKey] != null) {\n    attributes[newKey] = attributes[oldKey];\n    // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n    delete attributes[oldKey];\n  }\n}\n\nfunction processToolCallSpan(span: Span, attributes: SpanAttributes): void {\n  span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.vercelai.otel');\n  span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'gen_ai.execute_tool');\n  span.setAttribute(GEN_AI_OPERATION_NAME_ATTRIBUTE, 'execute_tool');\n  renameAttributeKey(attributes, AI_TOOL_CALL_NAME_ATTRIBUTE, GEN_AI_TOOL_NAME_ATTRIBUTE);\n  renameAttributeKey(attributes, AI_TOOL_CALL_ID_ATTRIBUTE, GEN_AI_TOOL_CALL_ID_ATTRIBUTE);\n\n  // Store the span context in our global map using the tool call ID.\n  // This allows us to capture tool errors and link them to the correct span\n  // without retaining the full Span object in memory.\n  const toolCallId = attributes[GEN_AI_TOOL_CALL_ID_ATTRIBUTE];\n\n  if (typeof toolCallId === 'string') {\n    toolCallSpanContextMap.set(toolCallId, span.spanContext());\n  }\n\n  // https://opentelemetry.io/docs/specs/semconv/registry/attributes/gen-ai/#gen-ai-tool-type\n  if (!attributes[GEN_AI_TOOL_TYPE_ATTRIBUTE]) {\n    span.setAttribute(GEN_AI_TOOL_TYPE_ATTRIBUTE, 'function');\n  }\n  const toolName = attributes[GEN_AI_TOOL_NAME_ATTRIBUTE];\n  if (toolName) {\n    span.updateName(`execute_tool ${toolName}`);\n  }\n}\n\nfunction processGenerateSpan(span: Span, name: string, attributes: SpanAttributes, enableTruncation: boolean): void {\n  span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.vercelai.otel');\n\n  const nameWthoutAi = name.replace('ai.', '');\n  span.setAttribute('ai.pipeline.name', nameWthoutAi);\n  span.updateName(nameWthoutAi);\n\n  const functionId = attributes[AI_TELEMETRY_FUNCTION_ID_ATTRIBUTE];\n  if (functionId && typeof functionId === 'string') {\n    span.setAttribute('gen_ai.function_id', functionId);\n  }\n\n  requestMessagesFromPrompt(span, attributes, enableTruncation);\n\n  if (attributes[AI_MODEL_ID_ATTRIBUTE] && !attributes[GEN_AI_RESPONSE_MODEL_ATTRIBUTE]) {\n    span.setAttribute(GEN_AI_RESPONSE_MODEL_ATTRIBUTE, attributes[AI_MODEL_ID_ATTRIBUTE]);\n  }\n  span.setAttribute('ai.streaming', name.includes('stream'));\n\n  // Set the op based on the operation name registry\n  const operationName = SPAN_TO_OPERATION_NAME.get(name);\n  if (operationName) {\n    span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, `gen_ai.${operationName}`);\n  } else if (name.startsWith('ai.stream')) {\n    span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'ai.run');\n  }\n\n  // For invoke_agent pipeline spans, use 'invoke_agent' as the description\n  // to be consistent with other AI integrations (e.g. LangGraph)\n  if (operationName === 'invoke_agent') {\n    if (functionId && typeof functionId === 'string') {\n      span.updateName(`invoke_agent ${functionId}`);\n    } else {\n      span.updateName('invoke_agent');\n    }\n    return;\n  }\n\n  const modelId = attributes[AI_MODEL_ID_ATTRIBUTE];\n  if (modelId && operationName) {\n    span.updateName(`${operationName} ${modelId}`);\n  }\n\n  // Store tool descriptions in the toolDescriptionMap so processSpan can apply them to execute_tool spans.\n  // This is only needed for span streaming (transaction path handles this separately)\n  const client = getClient();\n  if (\n    client &&\n    hasSpanStreamingEnabled(client) &&\n    attributes[AI_PROMPT_TOOLS_ATTRIBUTE] &&\n    Array.isArray(attributes[AI_PROMPT_TOOLS_ATTRIBUTE])\n  ) {\n    const descriptions = new Map<string, string>();\n\n    // parse tool names and descriptions from tool string array\n    for (const toolStr of attributes[AI_PROMPT_TOOLS_ATTRIBUTE] as unknown[]) {\n      try {\n        const parsed = (typeof toolStr === 'string' ? JSON.parse(toolStr) : toolStr) as {\n          name?: string;\n          description?: string;\n        };\n        if (parsed?.name && parsed?.description) {\n          descriptions.set(parsed.name, parsed.description);\n        }\n      } catch {\n        // ignore parse errors\n      }\n    }\n    if (descriptions.size > 0) {\n      // Tool call spans are siblings of doGenerate (both children of invoke_agent),\n      // so we key by the parent span ID (the invoke_agent span).\n      const parentSpanId = spanToJSON(span).parent_span_id;\n      if (parentSpanId) {\n        toolDescriptionMap.set(parentSpanId, descriptions);\n      }\n    }\n  }\n}\n\nconst CLIENTS_WITH_VERCEL_AI_PROCESSORS = new WeakSet<Client>();\n\n/**\n * Add event processors to the given client to process Vercel AI spans.\n *\n * Idempotent: both the integration and the Next.js SDK register these, and duplicate hooks would\n * process every span twice.\n */\nexport function addVercelAiProcessors(client: Client): void {\n  if (CLIENTS_WITH_VERCEL_AI_PROCESSORS.has(client)) {\n    return;\n  }\n  CLIENTS_WITH_VERCEL_AI_PROCESSORS.add(client);\n\n  client.on('spanStart', onVercelAiSpanStart);\n  // Note: We cannot do this on `spanEnd`, because the span cannot be mutated anymore at this point\n  client.addEventProcessor(Object.assign(vercelAiEventProcessor, { id: 'VercelAiEventProcessor' }));\n  client.on('processSpan', span => {\n    processVercelAiStreamedSpan(span);\n  });\n}\n\n/**\n * Derive the `gen_ai.usage.*` cache/reasoning/prediction token attributes and `gen_ai.conversation.id`\n * from an AI SDK `providerMetadata` object.\n *\n * Shared between the OTel processor (which parses `providerMetadata` from a serialized span attribute)\n * and the `ai` >= 7 tracing-channel subscriber (which receives it as an object on the channel result),\n * so both paths emit an identical shape. Pass the already-parsed object; unknown/empty input yields `{}`.\n */\nexport function getProviderMetadataAttributes(providerMetadata: unknown): Record<string, number | string> {\n  const attributes: Record<string, number | string> = {};\n\n  if (!providerMetadata || typeof providerMetadata !== 'object') {\n    return attributes;\n  }\n  const metadata = providerMetadata as ProviderMetadata;\n\n  // OpenAI (v5 uses 'openai', v6 Azure Responses API uses 'azure')\n  const openaiMetadata: OpenAiProviderMetadata | undefined = metadata.openai ?? metadata.azure;\n  if (openaiMetadata) {\n    setAttributeIfDefined(attributes, GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE, openaiMetadata.cachedPromptTokens);\n    setAttributeIfDefined(attributes, 'gen_ai.usage.output_tokens.reasoning', openaiMetadata.reasoningTokens);\n    setAttributeIfDefined(\n      attributes,\n      'gen_ai.usage.output_tokens.prediction_accepted',\n      openaiMetadata.acceptedPredictionTokens,\n    );\n    setAttributeIfDefined(\n      attributes,\n      'gen_ai.usage.output_tokens.prediction_rejected',\n      openaiMetadata.rejectedPredictionTokens,\n    );\n    setAttributeIfDefined(attributes, GEN_AI_CONVERSATION_ID_ATTRIBUTE, openaiMetadata.responseId);\n  }\n\n  if (metadata.anthropic) {\n    const cachedInputTokens =\n      metadata.anthropic.usage?.cache_read_input_tokens ?? metadata.anthropic.cacheReadInputTokens;\n    setAttributeIfDefined(attributes, GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE, cachedInputTokens);\n\n    const cacheWriteInputTokens =\n      metadata.anthropic.usage?.cache_creation_input_tokens ?? metadata.anthropic.cacheCreationInputTokens;\n    setAttributeIfDefined(attributes, GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE, cacheWriteInputTokens);\n  }\n\n  if (metadata.bedrock?.usage) {\n    setAttributeIfDefined(\n      attributes,\n      GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,\n      metadata.bedrock.usage.cacheReadInputTokens,\n    );\n    setAttributeIfDefined(\n      attributes,\n      GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITE_ATTRIBUTE,\n      metadata.bedrock.usage.cacheWriteInputTokens,\n    );\n  }\n\n  if (metadata.deepseek) {\n    setAttributeIfDefined(\n      attributes,\n      GEN_AI_USAGE_INPUT_TOKENS_CACHED_ATTRIBUTE,\n      metadata.deepseek.promptCacheHitTokens,\n    );\n    setAttributeIfDefined(attributes, 'gen_ai.usage.input_tokens.cache_miss', metadata.deepseek.promptCacheMissTokens);\n  }\n\n  // Google (v5 uses 'google', v6 Vertex AI uses 'vertex'). Gemini reports its reasoning (\"thoughts\")\n  // tokens separately from the candidate output count, so the SDK's `outputTokens` covers only the\n  // visible answer. Recompute output from `candidatesTokenCount + thoughtsTokenCount` rather than\n  // adding onto the existing value, which stays correct even if a future SDK version already folds\n  // reasoning in. `candidatesTokenCount` is omitted when the response is truncated during thinking,\n  // which means no candidate tokens, so it counts as zero. Reasoning is a subset of output per the\n  // conventions, so it is only written alongside the reasoning-inclusive output it belongs to.\n  const googleUsage = (metadata.google ?? metadata.vertex)?.usageMetadata;\n  if (googleUsage && typeof googleUsage.thoughtsTokenCount === 'number' && googleUsage.thoughtsTokenCount > 0) {\n    attributes[GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE] =\n      (googleUsage.candidatesTokenCount ?? 0) + googleUsage.thoughtsTokenCount;\n    setAttributeIfDefined(attributes, GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE, googleUsage.totalTokenCount);\n    setAttributeIfDefined(attributes, 'gen_ai.usage.reasoning.output_tokens', googleUsage.thoughtsTokenCount);\n  }\n\n  return attributes;\n}\n\n/**\n * Usage attributes that `getProviderMetadataAttributes` derives from `providerMetadata`, which\n * describes only the last step of a call. They must not be written onto a span that reports usage\n * aggregated across steps (`gen_ai.invoke_agent`), where they would replace the aggregate with one\n * step's figures. Exported so the channel/orchestrion subscribers, which call\n * `getProviderMetadataAttributes` directly rather than through `addProviderMetadataToAttributes`,\n * apply the same rule.\n */\nexport const LAST_STEP_ONLY_USAGE_KEYS = new Set<string>([\n  GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE,\n  GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE,\n  'gen_ai.usage.reasoning.output_tokens',\n]);\n\nfunction addProviderMetadataToAttributes(attributes: Record<string, unknown>): void {\n  const providerMetadata = attributes[AI_RESPONSE_PROVIDER_METADATA_ATTRIBUTE] as string | undefined;\n  if (!providerMetadata) {\n    return;\n  }\n  // An `invoke_agent` span carries the summed `ai.usage.*` of every step, while `providerMetadata`\n  // describes the last step alone. Writing output or total from it would replace the aggregate with\n  // one step's figures, so a two-step call reports output 50 against input 900. The event-processor\n  // path happens to overwrite it again in `applyAccumulatedTokens`; the streamed path ships it.\n  // Reasoning goes with them: it is a subset of an output the parent never recomputes, and the\n  // accumulator never sums it, so the last step's count would stand in for the whole call.\n  const lastStepOnly = attributes[GEN_AI_OPERATION_NAME_ATTRIBUTE] === 'invoke_agent';\n  try {\n    const derived = getProviderMetadataAttributes(JSON.parse(providerMetadata) as ProviderMetadata);\n    for (const [key, value] of Object.entries(derived)) {\n      // Preserve the original behaviour of not overwriting an already-set conversation id.\n      if (key === GEN_AI_CONVERSATION_ID_ATTRIBUTE && attributes[key]) {\n        continue;\n      }\n      if (lastStepOnly && LAST_STEP_ONLY_USAGE_KEYS.has(key)) {\n        continue;\n      }\n      attributes[key] = value;\n    }\n  } catch {\n    // Ignore\n  }\n}\n\n/**\n * Sets an attribute only if the value is not null or undefined.\n */\nfunction setAttributeIfDefined(\n  attributes: Record<string, unknown>,\n  key: string,\n  value: SpanAttributeValue | undefined,\n): void {\n  if (value != null) {\n    attributes[key] = value;\n  }\n}\n", "import type { InstrumentedMethodRegistry } from '../ai/utils';\n\nexport const OPENAI_INTEGRATION_NAME = 'OpenAI' as const;\n\n// https://platform.openai.com/docs/quickstart?api-mode=responses\n// https://platform.openai.com/docs/quickstart?api-mode=chat\n// https://platform.openai.com/docs/api-reference/conversations\nexport const OPENAI_METHOD_REGISTRY = {\n  'responses.create': { operation: 'chat' },\n  'chat.completions.create': { operation: 'chat' },\n  'embeddings.create': { operation: 'embeddings' },\n  // Conversations API - for conversation state management\n  // https://platform.openai.com/docs/guides/conversation-state\n  'conversations.create': { operation: 'chat' },\n} as const satisfies InstrumentedMethodRegistry;\nexport const RESPONSES_TOOL_CALL_EVENT_TYPES = [\n  'response.output_item.added',\n  'response.function_call_arguments.delta',\n  'response.function_call_arguments.done',\n  'response.output_item.done',\n] as const;\nexport const RESPONSE_EVENT_TYPES = [\n  'response.created',\n  'response.in_progress',\n  'response.failed',\n  'response.completed',\n  'response.incomplete',\n  'response.queued',\n  'response.output_text.delta',\n  ...RESPONSES_TOOL_CALL_EVENT_TYPES,\n] as const;\n", "import {\n  GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS,\n  GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS,\n} from '@sentry/conventions/attributes';\nimport type { Span } from '../../types/span';\nimport type { SpanAttributeValue } from '../../types/span';\nimport { isObjectLike } from '../../utils/is';\nimport {\n  GEN_AI_CONVERSATION_ID_ATTRIBUTE,\n  GEN_AI_REQUEST_DIMENSIONS_ATTRIBUTE,\n  GEN_AI_REQUEST_ENCODING_FORMAT_ATTRIBUTE,\n  GEN_AI_REQUEST_FREQUENCY_PENALTY_ATTRIBUTE,\n  GEN_AI_REQUEST_MODEL_ATTRIBUTE,\n  GEN_AI_REQUEST_PRESENCE_PENALTY_ATTRIBUTE,\n  GEN_AI_REQUEST_STREAM_ATTRIBUTE,\n  GEN_AI_REQUEST_TEMPERATURE_ATTRIBUTE,\n  GEN_AI_REQUEST_TOP_P_ATTRIBUTE,\n  GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE,\n  GEN_AI_RESPONSE_ID_ATTRIBUTE,\n  GEN_AI_RESPONSE_MODEL_ATTRIBUTE,\n  GEN_AI_RESPONSE_TEXT_ATTRIBUTE,\n  GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE,\n  GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE,\n  GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE,\n  GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE,\n} from '../ai/gen-ai-attributes';\nimport type { ChatCompletionChunk, ResponseStreamingEvent } from './types';\n\n/**\n * Check if streaming event is from the Responses API\n */\nexport function isResponsesApiStreamEvent(event: unknown): event is ResponseStreamingEvent {\n  return (\n    event !== null &&\n    typeof event === 'object' &&\n    'type' in event &&\n    typeof (event as Record<string, unknown>).type === 'string' &&\n    ((event as Record<string, unknown>).type as string).startsWith('response.')\n  );\n}\n\n/**\n * Check if streaming event is a chat completion chunk\n */\nexport function isChatCompletionChunk(event: unknown): event is ChatCompletionChunk {\n  return (\n    event !== null &&\n    typeof event === 'object' &&\n    'object' in event &&\n    (event as Record<string, unknown>).object === 'chat.completion.chunk'\n  );\n}\n\n/**\n * Add response attributes to a span using duck-typing.\n * Works for Chat Completions, Responses API, Embeddings, and Conversations API responses.\n */\nexport function addResponseAttributes(span: Span, result: unknown, recordOutputs?: boolean): void {\n  if (!result || typeof result !== 'object') return;\n\n  const response = result as Record<string, unknown>;\n  const attrs: Record<string, SpanAttributeValue> = {};\n\n  // Response ID\n  if (typeof response.id === 'string') {\n    attrs[GEN_AI_RESPONSE_ID_ATTRIBUTE] = response.id;\n  }\n\n  // Response model\n  if (typeof response.model === 'string') {\n    attrs[GEN_AI_RESPONSE_MODEL_ATTRIBUTE] = response.model;\n  }\n\n  // Conversation ID (conversation objects use id as conversation link)\n  if (response.object === 'conversation' && typeof response.id === 'string') {\n    attrs[GEN_AI_CONVERSATION_ID_ATTRIBUTE] = response.id;\n  }\n\n  // Token usage — supports both naming conventions (chat: prompt_tokens/completion_tokens, responses: input_tokens/output_tokens)\n  if (response.usage && typeof response.usage === 'object') {\n    const usage = response.usage as Record<string, unknown>;\n\n    const inputTokens = usage.prompt_tokens ?? usage.input_tokens;\n    if (typeof inputTokens === 'number') {\n      attrs[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] = inputTokens;\n    }\n\n    const outputTokens = usage.completion_tokens ?? usage.output_tokens;\n    if (typeof outputTokens === 'number') {\n      attrs[GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE] = outputTokens;\n    }\n\n    if (typeof usage.total_tokens === 'number') {\n      attrs[GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE] = usage.total_tokens;\n    }\n    const inputDetails = usage.prompt_tokens_details ?? usage.input_tokens_details;\n    if (isObjectLike(inputDetails)) {\n      if (typeof inputDetails.cached_tokens === 'number') {\n        attrs[GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS] = inputDetails.cached_tokens;\n      }\n      if (typeof inputDetails.cache_write_tokens === 'number') {\n        attrs[GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS] = inputDetails.cache_write_tokens;\n      }\n    }\n  }\n\n  // Finish reasons from choices (chat completions)\n  if (Array.isArray(response.choices)) {\n    const choices = response.choices as Array<Record<string, unknown>>;\n    const finishReasons = choices\n      .map(choice => choice.finish_reason)\n      .filter((reason): reason is string => typeof reason === 'string');\n    if (finishReasons.length > 0) {\n      attrs[GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE] = JSON.stringify(finishReasons);\n    }\n\n    if (recordOutputs) {\n      // Response text from choices\n      const responseTexts = choices.map(choice => {\n        const message = choice.message as Record<string, unknown> | undefined;\n        return (message?.content as string) || '';\n      });\n      attrs[GEN_AI_RESPONSE_TEXT_ATTRIBUTE] = JSON.stringify(responseTexts);\n\n      // Tool calls from choices\n      const toolCalls = choices\n        .map(choice => {\n          const message = choice.message as Record<string, unknown> | undefined;\n          return message?.tool_calls;\n        })\n        .filter(calls => Array.isArray(calls) && calls.length > 0)\n        .flat();\n\n      if (toolCalls.length > 0) {\n        attrs[GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE] = JSON.stringify(toolCalls);\n      }\n    }\n  }\n\n  // Finish reason from status (responses API)\n  if (typeof response.status === 'string') {\n    // Only set if not already set from choices\n    if (!attrs[GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE]) {\n      attrs[GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE] = JSON.stringify([response.status]);\n    }\n  }\n\n  if (recordOutputs) {\n    // Response text from output_text (responses API)\n    if (typeof response.output_text === 'string' && !attrs[GEN_AI_RESPONSE_TEXT_ATTRIBUTE]) {\n      attrs[GEN_AI_RESPONSE_TEXT_ATTRIBUTE] = response.output_text;\n    }\n\n    // Tool calls from output array (responses API)\n    if (Array.isArray(response.output) && response.output.length > 0 && !attrs[GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE]) {\n      const functionCalls = (response.output as Array<Record<string, unknown>>).filter(\n        item => item?.type === 'function_call',\n      );\n      if (functionCalls.length > 0) {\n        attrs[GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE] = JSON.stringify(functionCalls);\n      }\n    }\n  }\n\n  span.setAttributes(attrs);\n}\n\n/**\n * Extract conversation ID from request parameters\n * Supports both Conversations API and previous_response_id chaining\n * @see https://platform.openai.com/docs/guides/conversation-state\n */\nfunction extractConversationId(params: Record<string, unknown>): string | undefined {\n  // Conversations API: conversation parameter (e.g., \"conv_...\")\n  if ('conversation' in params && typeof params.conversation === 'string') {\n    return params.conversation;\n  }\n  // Responses chaining: previous_response_id links to parent response\n  if ('previous_response_id' in params && typeof params.previous_response_id === 'string') {\n    return params.previous_response_id;\n  }\n  return undefined;\n}\n\n/**\n * Extract request parameters including model settings and conversation context\n */\nexport function extractRequestParameters(params: Record<string, unknown>): Record<string, unknown> {\n  const attributes: Record<string, unknown> = {\n    [GEN_AI_REQUEST_MODEL_ATTRIBUTE]: params.model ?? 'unknown',\n  };\n\n  if ('temperature' in params) attributes[GEN_AI_REQUEST_TEMPERATURE_ATTRIBUTE] = params.temperature;\n  if ('top_p' in params) attributes[GEN_AI_REQUEST_TOP_P_ATTRIBUTE] = params.top_p;\n  if ('frequency_penalty' in params) attributes[GEN_AI_REQUEST_FREQUENCY_PENALTY_ATTRIBUTE] = params.frequency_penalty;\n  if ('presence_penalty' in params) attributes[GEN_AI_REQUEST_PRESENCE_PENALTY_ATTRIBUTE] = params.presence_penalty;\n  if ('stream' in params) attributes[GEN_AI_REQUEST_STREAM_ATTRIBUTE] = params.stream;\n  if ('encoding_format' in params) attributes[GEN_AI_REQUEST_ENCODING_FORMAT_ATTRIBUTE] = params.encoding_format;\n  if ('dimensions' in params) attributes[GEN_AI_REQUEST_DIMENSIONS_ATTRIBUTE] = params.dimensions;\n\n  // Capture conversation ID for linking messages across API calls\n  const conversationId = extractConversationId(params);\n  if (conversationId) {\n    attributes[GEN_AI_CONVERSATION_ID_ATTRIBUTE] = conversationId;\n  }\n\n  return attributes;\n}\n", "import { captureException } from '../../exports';\nimport { SPAN_STATUS_ERROR } from '../../tracing';\nimport type { Span } from '../../types/span';\nimport { endStreamSpan } from '../ai/utils';\nimport { RESPONSE_EVENT_TYPES } from './constants';\nimport type {\n  ChatCompletionChunk,\n  ChatCompletionToolCall,\n  OpenAIResponseObject,\n  ResponseFunctionCall,\n  ResponseStreamingEvent,\n} from './types';\nimport { isChatCompletionChunk, isResponsesApiStreamEvent } from './utils';\n\n/**\n * State object used to accumulate information from a stream of OpenAI events/chunks.\n */\ninterface StreamingState {\n  /** Types of events encountered in the stream. */\n  eventTypes: string[];\n  /** Collected response text fragments (for output recording). */\n  responseTexts: string[];\n  /** Reasons for finishing the response, as reported by the API. */\n  finishReasons: string[];\n  /** The response ID. */\n  responseId: string;\n  /** The model name. */\n  responseModel: string;\n  /** Number of prompt/input tokens used. */\n  promptTokens: number | undefined;\n  /** Number of completion/output tokens used. */\n  completionTokens: number | undefined;\n  /** Total number of tokens used (prompt + completion). */\n  totalTokens: number | undefined;\n  cacheReadInputTokens: number | undefined;\n  cacheCreationInputTokens: number | undefined;\n  /**\n   * Accumulated tool calls from Chat Completion streaming, indexed by tool call index.\n   * @see https://platform.openai.com/docs/guides/function-calling?api-mode=chat#streaming\n   */\n  chatCompletionToolCalls: Record<number, ChatCompletionToolCall>;\n  /**\n   * Accumulated function calls from Responses API streaming.\n   * @see https://platform.openai.com/docs/guides/function-calling?api-mode=responses#streaming\n   */\n  responsesApiToolCalls: Array<ResponseFunctionCall | unknown>;\n}\n\n/**\n * Processes tool calls from a chat completion chunk delta.\n * Follows the pattern: accumulate by index, then convert to array at the end.\n *\n * @param toolCalls - Array of tool calls from the delta.\n * @param state - The current streaming state to update.\n *\n *  @see https://platform.openai.com/docs/guides/function-calling#streaming\n */\nfunction processChatCompletionToolCalls(toolCalls: ChatCompletionToolCall[], state: StreamingState): void {\n  for (const toolCall of toolCalls) {\n    const index = toolCall.index;\n    if (index === undefined || !toolCall.function) continue;\n\n    // Initialize tool call if this is the first chunk for this index\n    if (!(index in state.chatCompletionToolCalls)) {\n      state.chatCompletionToolCalls[index] = {\n        ...toolCall,\n        function: {\n          name: toolCall.function.name,\n          arguments: toolCall.function.arguments || '',\n        },\n      };\n    } else {\n      // Accumulate function arguments from subsequent chunks\n      const existingToolCall = state.chatCompletionToolCalls[index];\n      if (toolCall.function.arguments && existingToolCall?.function) {\n        existingToolCall.function.arguments += toolCall.function.arguments;\n      }\n    }\n  }\n}\n\n/**\n * Processes a single OpenAI ChatCompletionChunk event, updating the streaming state.\n *\n * @param chunk - The ChatCompletionChunk event to process.\n * @param state - The current streaming state to update.\n * @param recordOutputs - Whether to record output text fragments.\n */\nfunction processChatCompletionChunk(chunk: ChatCompletionChunk, state: StreamingState, recordOutputs: boolean): void {\n  state.responseId = chunk.id ?? state.responseId;\n  state.responseModel = chunk.model ?? state.responseModel;\n\n  if (chunk.usage) {\n    // For stream responses, the input tokens remain constant across all events in the stream.\n    // Output tokens, however, are only finalized in the last event.\n    // Since we can't guarantee that the last event will include usage data or even be a typed event,\n    // we update the output token values on every event that includes them.\n    // This ensures that output token usage is always set, even if the final event lacks it.\n    state.promptTokens = chunk.usage.prompt_tokens;\n    state.completionTokens = chunk.usage.completion_tokens;\n    state.totalTokens = chunk.usage.total_tokens;\n    state.cacheReadInputTokens = chunk.usage.prompt_tokens_details?.cached_tokens ?? state.cacheReadInputTokens;\n    state.cacheCreationInputTokens =\n      chunk.usage.prompt_tokens_details?.cache_write_tokens ?? state.cacheCreationInputTokens;\n  }\n\n  for (const choice of chunk.choices ?? []) {\n    if (recordOutputs) {\n      if (choice.delta?.content) {\n        state.responseTexts.push(choice.delta.content);\n      }\n\n      // Handle tool calls from delta\n      if (choice.delta?.tool_calls) {\n        processChatCompletionToolCalls(choice.delta.tool_calls, state);\n      }\n    }\n    if (choice.finish_reason) {\n      state.finishReasons.push(choice.finish_reason);\n    }\n  }\n}\n\n/**\n * Processes a single OpenAI Responses API streaming event, updating the streaming state and span.\n *\n * @param streamEvent - The event to process (may be an error or unknown object).\n * @param state - The current streaming state to update.\n * @param recordOutputs - Whether to record output text fragments.\n * @param span - The span to update with error status if needed.\n */\nfunction processResponsesApiEvent(\n  streamEvent: ResponseStreamingEvent | unknown | Error,\n  state: StreamingState,\n  recordOutputs: boolean,\n  span: Span,\n): void {\n  if (!(streamEvent && typeof streamEvent === 'object')) {\n    state.eventTypes.push('unknown:non-object');\n    return;\n  }\n  if (streamEvent instanceof Error) {\n    span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n    captureException(streamEvent, {\n      mechanism: {\n        handled: false,\n        type: 'auto.ai.openai.stream-response',\n      },\n    });\n    return;\n  }\n\n  if (!('type' in streamEvent)) return;\n  const event = streamEvent as ResponseStreamingEvent;\n\n  if (!RESPONSE_EVENT_TYPES.includes(event.type)) {\n    state.eventTypes.push(event.type);\n    return;\n  }\n\n  // Handle output text delta\n  if (recordOutputs) {\n    // Handle tool call events for Responses API\n    if (event.type === 'response.output_item.done' && 'item' in event) {\n      state.responsesApiToolCalls.push(event.item);\n    }\n\n    if (event.type === 'response.output_text.delta' && 'delta' in event && event.delta) {\n      state.responseTexts.push(event.delta);\n      return;\n    }\n  }\n\n  if ('response' in event) {\n    const { response } = event as { response: OpenAIResponseObject };\n    state.responseId = response.id ?? state.responseId;\n    state.responseModel = response.model ?? state.responseModel;\n\n    if (response.usage) {\n      // For stream responses, the input tokens remain constant across all events in the stream.\n      // Output tokens, however, are only finalized in the last event.\n      // Since we can't guarantee that the last event will include usage data or even be a typed event,\n      // we update the output token values on every event that includes them.\n      // This ensures that output token usage is always set, even if the final event lacks it.\n      state.promptTokens = response.usage.input_tokens;\n      state.completionTokens = response.usage.output_tokens;\n      state.totalTokens = response.usage.total_tokens;\n      state.cacheReadInputTokens = response.usage.input_tokens_details?.cached_tokens ?? state.cacheReadInputTokens;\n      state.cacheCreationInputTokens =\n        response.usage.input_tokens_details?.cache_write_tokens ?? state.cacheCreationInputTokens;\n    }\n\n    if (response.status) {\n      state.finishReasons.push(response.status);\n    }\n\n    if (recordOutputs && response.output_text) {\n      state.responseTexts.push(response.output_text);\n    }\n  }\n}\n\n/**\n * Instruments a stream of OpenAI events, updating the provided span with relevant attributes and\n * optionally recording output text. This function yields each event from the input stream as it is processed.\n *\n * @template T - The type of events in the stream.\n * @param stream - The async iterable stream of events to instrument.\n * @param span - The span to add attributes to and to finish at the end of the stream.\n * @param recordOutputs - Whether to record output text fragments in the span.\n * @returns An async generator yielding each event from the input stream.\n */\nexport async function* instrumentStream<T>(\n  stream: AsyncIterable<T>,\n  span: Span,\n  recordOutputs: boolean,\n): AsyncGenerator<T, void, unknown> {\n  const state: StreamingState = {\n    eventTypes: [],\n    responseTexts: [],\n    finishReasons: [],\n    responseId: '',\n    responseModel: '',\n    promptTokens: undefined,\n    completionTokens: undefined,\n    totalTokens: undefined,\n    cacheReadInputTokens: undefined,\n    cacheCreationInputTokens: undefined,\n    chatCompletionToolCalls: {},\n    responsesApiToolCalls: [],\n  };\n\n  try {\n    for await (const event of stream) {\n      if (isChatCompletionChunk(event)) {\n        processChatCompletionChunk(event as ChatCompletionChunk, state, recordOutputs);\n      } else if (isResponsesApiStreamEvent(event)) {\n        processResponsesApiEvent(event as ResponseStreamingEvent, state, recordOutputs, span);\n      }\n      yield event;\n    }\n  } finally {\n    const allToolCalls = [...Object.values(state.chatCompletionToolCalls), ...state.responsesApiToolCalls];\n    endStreamSpan(span, { ...state, toolCalls: allToolCalls }, recordOutputs);\n  }\n}\n", "import { DEBUG_BUILD } from '../../debug-build';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../../semanticAttributes';\nimport { SPAN_STATUS_ERROR } from '../../tracing';\nimport { startSpan, startSpanManual } from '../../tracing/trace';\nimport type { Span, SpanAttributeValue } from '../../types/span';\nimport { debug } from '../../utils/debug-logger';\nimport {\n  GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE,\n  GEN_AI_INPUT_MESSAGES_ATTRIBUTE,\n  GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE,\n  GEN_AI_OPERATION_NAME_ATTRIBUTE,\n  GEN_AI_REQUEST_AVAILABLE_TOOLS_ATTRIBUTE,\n  GEN_AI_REQUEST_MODEL_ATTRIBUTE,\n  GEN_AI_SYSTEM_ATTRIBUTE,\n  GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE,\n} from '../ai/gen-ai-attributes';\nimport type { InstrumentedMethodEntry } from '../ai/utils';\nimport { stringify } from '../../utils/string';\nimport {\n  buildMethodPath,\n  extractSystemInstructions,\n  getTruncatedJsonString,\n  resolveAIRecordingOptions,\n  shouldEnableTruncation,\n  wrapPromiseWithMethods,\n} from '../ai/utils';\nimport { OPENAI_METHOD_REGISTRY } from './constants';\nimport { instrumentStream } from './streaming';\nimport type { ChatCompletionChunk, OpenAiOptions, OpenAIStream, ResponseStreamingEvent } from './types';\nimport { addResponseAttributes, extractRequestParameters } from './utils';\n\n/**\n * Extract available tools from request parameters\n */\nfunction extractAvailableTools(params: Record<string, unknown>): string | undefined {\n  const tools = Array.isArray(params.tools) ? params.tools : [];\n  const hasWebSearchOptions = params.web_search_options && typeof params.web_search_options === 'object';\n  const webSearchOptions = hasWebSearchOptions\n    ? [{ type: 'web_search_options', ...(params.web_search_options as Record<string, unknown>) }]\n    : [];\n\n  const availableTools = [...tools, ...webSearchOptions];\n  if (availableTools.length === 0) {\n    return undefined;\n  }\n\n  try {\n    return JSON.stringify(availableTools);\n  } catch (error) {\n    DEBUG_BUILD && debug.error('Failed to serialize OpenAI tools:', error);\n    return undefined;\n  }\n}\n\n/**\n * Extract request attributes from method arguments\n */\nexport function extractRequestAttributes(args: unknown[], operationName: string): Record<string, unknown> {\n  const attributes: Record<string, unknown> = {\n    [GEN_AI_SYSTEM_ATTRIBUTE]: 'openai',\n    [GEN_AI_OPERATION_NAME_ATTRIBUTE]: operationName,\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ai.openai',\n  };\n\n  if (args.length > 0 && typeof args[0] === 'object' && args[0] !== null) {\n    const params = args[0] as Record<string, unknown>;\n\n    const availableTools = extractAvailableTools(params);\n    if (availableTools) {\n      attributes[GEN_AI_REQUEST_AVAILABLE_TOOLS_ATTRIBUTE] = availableTools;\n    }\n\n    Object.assign(attributes, extractRequestParameters(params));\n  } else {\n    attributes[GEN_AI_REQUEST_MODEL_ATTRIBUTE] = 'unknown';\n  }\n\n  return attributes;\n}\n\n// Extract and record AI request inputs, if present. This is intentionally separate from response attributes.\nexport function addRequestAttributes(\n  span: Span,\n  params: Record<string, unknown>,\n  operationName: string,\n  enableTruncation: boolean,\n): void {\n  // Store embeddings input on a separate attribute and do not truncate it\n  if (operationName === 'embeddings' && 'input' in params) {\n    const input = params.input;\n\n    // No input provided\n    if (input == null) {\n      return;\n    }\n\n    // Empty input string\n    if (typeof input === 'string' && input.length === 0) {\n      return;\n    }\n\n    // Empty array input\n    if (Array.isArray(input) && input.length === 0) {\n      return;\n    }\n\n    // Store strings as-is, arrays/objects as JSON\n    span.setAttribute(GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE, typeof input === 'string' ? input : JSON.stringify(input));\n    return;\n  }\n\n  const src = 'input' in params ? params.input : 'messages' in params ? params.messages : undefined;\n\n  if (!src) {\n    return;\n  }\n\n  if (Array.isArray(src) && src.length === 0) {\n    return;\n  }\n\n  const { systemInstructions, filteredMessages } = extractSystemInstructions(src);\n\n  if (systemInstructions) {\n    span.setAttribute(GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE, systemInstructions);\n  }\n\n  span.setAttribute(\n    GEN_AI_INPUT_MESSAGES_ATTRIBUTE,\n    enableTruncation ? getTruncatedJsonString(filteredMessages) : stringify(filteredMessages),\n  );\n\n  if (Array.isArray(filteredMessages)) {\n    span.setAttribute(GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE, filteredMessages.length);\n  } else {\n    span.setAttribute(GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE, 1);\n  }\n}\n\n/**\n * Instrument a method with Sentry spans\n * Following Sentry AI Agents Manual Instrumentation conventions\n * @see https://docs.sentry.io/platforms/javascript/guides/node/tracing/instrumentation/ai-agents-module/#manual-instrumentation\n */\nfunction instrumentMethod<T extends unknown[], R>(\n  originalMethod: (...args: T) => Promise<R>,\n  methodPath: string,\n  instrumentedMethod: InstrumentedMethodEntry,\n  context: unknown,\n  options: OpenAiOptions,\n): (...args: T) => Promise<R> {\n  return function instrumentedCall(...args: T): Promise<R> {\n    const operationName = instrumentedMethod.operation || 'unknown';\n    const requestAttributes = extractRequestAttributes(args, operationName);\n    const model = (requestAttributes[GEN_AI_REQUEST_MODEL_ATTRIBUTE] as string) || 'unknown';\n\n    const params = args[0] as Record<string, unknown> | undefined;\n    const isStreamRequested = params && typeof params === 'object' && params.stream === true;\n\n    const spanConfig = {\n      name: `${operationName} ${model}`,\n      op: `gen_ai.${operationName}`,\n      attributes: requestAttributes as Record<string, SpanAttributeValue>,\n    };\n\n    if (isStreamRequested) {\n      let originalResult!: Promise<R>;\n\n      const instrumentedPromise = startSpanManual(spanConfig, (span: Span) => {\n        originalResult = originalMethod.apply(context, args);\n\n        if (options.recordInputs && params) {\n          addRequestAttributes(span, params, operationName, shouldEnableTruncation(options.enableTruncation));\n        }\n\n        // Return async processing\n        return (async () => {\n          try {\n            const result = await originalResult;\n            return instrumentStream(\n              result as OpenAIStream<ChatCompletionChunk | ResponseStreamingEvent>,\n              span,\n              options.recordOutputs ?? false,\n            ) as unknown as R;\n          } catch (error) {\n            span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n            span.end();\n            throw error;\n          }\n        })();\n      });\n\n      return wrapPromiseWithMethods(originalResult, instrumentedPromise);\n    }\n\n    // Non-streaming\n    let originalResult!: Promise<R>;\n\n    const instrumentedPromise = startSpan(spanConfig, (span: Span) => {\n      // Call synchronously to capture the promise\n      originalResult = originalMethod.apply(context, args);\n\n      if (options.recordInputs && params) {\n        addRequestAttributes(span, params, operationName, shouldEnableTruncation(options.enableTruncation));\n      }\n\n      return originalResult.then(result => {\n        addResponseAttributes(span, result, options.recordOutputs);\n        return result;\n      });\n    });\n\n    return wrapPromiseWithMethods(originalResult, instrumentedPromise);\n  };\n}\n\n/**\n * Create a deep proxy for OpenAI client instrumentation\n */\nfunction createDeepProxy<T extends object>(target: T, currentPath = '', options: OpenAiOptions): T {\n  return new Proxy(target, {\n    get(obj: object, prop: string): unknown {\n      const value = (obj as Record<string, unknown>)[prop];\n      const methodPath = buildMethodPath(currentPath, String(prop));\n\n      const instrumentedMethod = OPENAI_METHOD_REGISTRY[methodPath as keyof typeof OPENAI_METHOD_REGISTRY];\n      if (typeof value === 'function' && instrumentedMethod) {\n        return instrumentMethod(\n          value as (...args: unknown[]) => Promise<unknown>,\n          methodPath,\n          instrumentedMethod,\n          obj,\n          options,\n        );\n      }\n\n      if (typeof value === 'function') {\n        // Bind non-instrumented functions to preserve the original `this` context,\n        // which is required for accessing private class fields (e.g. #baseURL) in OpenAI SDK v5.\n        return value.bind(obj);\n      }\n\n      if (value && typeof value === 'object') {\n        return createDeepProxy(value, methodPath, options);\n      }\n\n      return value;\n    },\n  }) as T;\n}\n\n/**\n * Instrument an OpenAI client with Sentry tracing\n * Can be used across Node.js, Cloudflare Workers, and Vercel Edge\n */\nexport function instrumentOpenAiClient<T extends object>(client: T, options?: OpenAiOptions): T {\n  return createDeepProxy(client, '', resolveAIRecordingOptions(options));\n}\n", "import type { InstrumentedMethodRegistry } from '../ai/utils';\n\nexport const ANTHROPIC_AI_INTEGRATION_NAME = 'Anthropic_AI' as const;\n\n// https://docs.anthropic.com/en/api/messages\n// https://docs.anthropic.com/en/api/models-list\nexport const ANTHROPIC_METHOD_REGISTRY = {\n  'messages.create': { operation: 'chat' },\n  'messages.stream': { operation: 'chat', streaming: true },\n  'messages.countTokens': { operation: 'chat' },\n  'models.get': { operation: 'models' },\n  'completions.create': { operation: 'chat' },\n  'models.retrieve': { operation: 'models' },\n  'beta.messages.create': { operation: 'chat' },\n} as const satisfies InstrumentedMethodRegistry;\n", "import { captureException } from '../../exports';\nimport { SPAN_STATUS_ERROR } from '../../tracing';\nimport type { Span } from '../../types/span';\nimport type { SpanStatusType } from '../../types/spanStatus';\nimport {\n  GEN_AI_INPUT_MESSAGES_ATTRIBUTE,\n  GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE,\n  GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE,\n} from '../ai/gen-ai-attributes';\nimport { extractSystemInstructions, getTruncatedJsonString } from '../ai/utils';\nimport { stringify } from '../../utils/string';\nimport type { AnthropicAiResponse } from './types';\n\n/**\n * Set the messages and messages original length attributes.\n * Extracts system instructions before truncation.\n */\nexport function setMessagesAttribute(span: Span, messages: unknown, enableTruncation: boolean): void {\n  if (Array.isArray(messages) && messages.length === 0) {\n    return;\n  }\n\n  const { systemInstructions, filteredMessages } = extractSystemInstructions(messages);\n\n  if (systemInstructions) {\n    span.setAttributes({\n      [GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE]: systemInstructions,\n    });\n  }\n\n  const filteredLength = Array.isArray(filteredMessages) ? filteredMessages.length : 1;\n  span.setAttributes({\n    [GEN_AI_INPUT_MESSAGES_ATTRIBUTE]: enableTruncation\n      ? getTruncatedJsonString(filteredMessages)\n      : stringify(filteredMessages),\n    [GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE]: filteredLength,\n  });\n}\n\nconst ANTHROPIC_ERROR_TYPE_TO_SPAN_STATUS: Record<string, SpanStatusType> = {\n  invalid_request_error: 'invalid_argument',\n  authentication_error: 'unauthenticated',\n  permission_error: 'permission_denied',\n  not_found_error: 'not_found',\n  request_too_large: 'failed_precondition',\n  rate_limit_error: 'resource_exhausted',\n  api_error: 'internal_error',\n  overloaded_error: 'unavailable',\n};\n\n/**\n * Map an Anthropic API error type to a SpanStatusType value.\n * @see https://docs.anthropic.com/en/api/errors#error-shapes\n */\nexport function mapAnthropicErrorToStatusMessage(errorType: string | undefined): SpanStatusType {\n  if (!errorType) {\n    return 'internal_error';\n  }\n  return ANTHROPIC_ERROR_TYPE_TO_SPAN_STATUS[errorType] || 'internal_error';\n}\n\n/**\n * Capture error information from the response\n * @see https://docs.anthropic.com/en/api/errors#error-shapes\n */\nexport function handleResponseError(span: Span, response: AnthropicAiResponse): void {\n  if (response.error) {\n    span.setStatus({ code: SPAN_STATUS_ERROR, message: mapAnthropicErrorToStatusMessage(response.error.type) });\n\n    captureException(response.error, {\n      mechanism: {\n        handled: false,\n        type: 'auto.ai.anthropic.anthropic_error',\n      },\n    });\n  }\n}\n\n/**\n * Include the system prompt in the messages list, if available\n */\nexport function messagesFromParams(params: Record<string, unknown>): unknown[] {\n  const { system, messages, input } = params;\n\n  const systemMessages = typeof system === 'string' ? [{ role: 'system', content: params.system }] : [];\n\n  const inputParamMessages = Array.isArray(input) ? input : input != null ? [input] : undefined;\n\n  const messagesParamMessages = Array.isArray(messages) ? messages : messages != null ? [messages] : [];\n\n  const userMessages = inputParamMessages ?? messagesParamMessages;\n\n  return [...systemMessages, ...userMessages];\n}\n", "import { captureException } from '../../exports';\nimport { SPAN_STATUS_ERROR } from '../../tracing';\nimport type { Span } from '../../types/span';\nimport { endStreamSpan } from '../ai/utils';\nimport type { AnthropicAiStreamingEvent } from './types';\nimport { mapAnthropicErrorToStatusMessage } from './utils';\n\n/**\n * State object used to accumulate information from a stream of Anthropic AI events.\n */\ninterface StreamingState {\n  /** Collected response text fragments (for output recording). */\n  responseTexts: string[];\n  /** Reasons for finishing the response, as reported by the API. */\n  finishReasons: string[];\n  /** The response ID. */\n  responseId: string;\n  /** The model name. */\n  responseModel: string;\n  /** Number of prompt/input tokens used. */\n  promptTokens: number | undefined;\n  /** Number of completion/output tokens used. */\n  completionTokens: number | undefined;\n  /** Number of cache creation input tokens used. */\n  cacheCreationInputTokens: number | undefined;\n  /** Number of cache read input tokens used. */\n  cacheReadInputTokens: number | undefined;\n  /** Accumulated tool calls (finalized) */\n  toolCalls: Array<Record<string, unknown>>;\n  /** In-progress tool call blocks keyed by index */\n  activeToolBlocks: Record<\n    number,\n    {\n      id?: string;\n      name?: string;\n      inputJsonParts: string[];\n    }\n  >;\n}\n\n/**\n * Checks if an event is an error event\n * @param event - The event to process\n * @param state - The state of the streaming process\n * @param recordOutputs - Whether to record outputs\n * @param span - The span to update\n * @returns Whether an error occurred\n */\n\nfunction isErrorEvent(event: AnthropicAiStreamingEvent, span: Span): boolean {\n  if ('type' in event && typeof event.type === 'string') {\n    if (event.type === 'error') {\n      // The SDK surfaces this error to the caller (the async iterator rejects / their `error`\n      // listener fires), so we only mark the span failed and do not record it.\n      span.setStatus({ code: SPAN_STATUS_ERROR, message: mapAnthropicErrorToStatusMessage(event.error?.type) });\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Processes the message metadata of an event\n * @param event - The event to process\n * @param state - The state of the streaming process\n */\n\nfunction handleMessageMetadata(event: AnthropicAiStreamingEvent, state: StreamingState): void {\n  // Cumulative token counts and the final stop reason both arrive on the message_delta event.\n  // @see https://docs.anthropic.com/en/docs/build-with-claude/streaming#event-types\n  if (event.type === 'message_delta') {\n    if (event.usage && typeof event.usage.output_tokens === 'number') {\n      state.completionTokens = event.usage.output_tokens;\n    }\n    if (event.delta?.stop_reason) {\n      state.finishReasons.push(event.delta.stop_reason);\n    }\n  }\n\n  if (event.message) {\n    const message = event.message;\n\n    if (message.id) state.responseId = message.id;\n    if (message.model) state.responseModel = message.model;\n\n    if (message.usage) {\n      if (typeof message.usage.input_tokens === 'number') {\n        state.promptTokens =\n          message.usage.input_tokens +\n          (message.usage.cache_creation_input_tokens ?? 0) +\n          (message.usage.cache_read_input_tokens ?? 0);\n      }\n      if (typeof message.usage.cache_creation_input_tokens === 'number')\n        state.cacheCreationInputTokens = message.usage.cache_creation_input_tokens;\n      if (typeof message.usage.cache_read_input_tokens === 'number')\n        state.cacheReadInputTokens = message.usage.cache_read_input_tokens;\n    }\n  }\n}\n\n/**\n * Handle start of a content block (e.g., tool_use)\n */\nfunction handleContentBlockStart(event: AnthropicAiStreamingEvent, state: StreamingState): void {\n  if (event.type !== 'content_block_start' || typeof event.index !== 'number' || !event.content_block) return;\n  if (event.content_block.type === 'tool_use' || event.content_block.type === 'server_tool_use') {\n    state.activeToolBlocks[event.index] = {\n      id: event.content_block.id,\n      name: event.content_block.name,\n      inputJsonParts: [],\n    };\n  }\n}\n\n/**\n * Handle deltas of a content block, including input_json_delta for tool_use\n */\nfunction handleContentBlockDelta(\n  event: AnthropicAiStreamingEvent,\n  state: StreamingState,\n  recordOutputs: boolean,\n): void {\n  if (event.type !== 'content_block_delta' || !event.delta) return;\n\n  // Accumulate tool_use input JSON deltas only when we have an index and an active tool block\n  if (\n    typeof event.index === 'number' &&\n    'partial_json' in event.delta &&\n    typeof event.delta.partial_json === 'string'\n  ) {\n    const active = state.activeToolBlocks[event.index];\n    if (active) {\n      active.inputJsonParts.push(event.delta.partial_json);\n    }\n  }\n\n  // Accumulate streamed response text regardless of index\n  if (recordOutputs && typeof event.delta.text === 'string') {\n    state.responseTexts.push(event.delta.text);\n  }\n}\n\n/**\n * Handle stop of a content block; finalize tool_use entries\n */\nfunction handleContentBlockStop(event: AnthropicAiStreamingEvent, state: StreamingState): void {\n  if (event.type !== 'content_block_stop' || typeof event.index !== 'number') return;\n\n  const active = state.activeToolBlocks[event.index];\n  if (!active) return;\n\n  const raw = active.inputJsonParts.join('');\n  let parsedInput: unknown;\n\n  try {\n    parsedInput = raw ? JSON.parse(raw) : {};\n  } catch {\n    parsedInput = { __unparsed: raw };\n  }\n\n  state.toolCalls.push({\n    type: 'tool_use',\n    id: active.id,\n    name: active.name,\n    input: parsedInput,\n  });\n\n  // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n  delete state.activeToolBlocks[event.index];\n}\n\n/**\n * Processes an event\n * @param event - The event to process\n * @param state - The state of the streaming process\n * @param recordOutputs - Whether to record outputs\n * @param span - The span to update\n */\nfunction processEvent(\n  event: AnthropicAiStreamingEvent,\n  state: StreamingState,\n  recordOutputs: boolean,\n  span: Span,\n): void {\n  if (!(event && typeof event === 'object')) {\n    return;\n  }\n\n  const isError = isErrorEvent(event, span);\n  if (isError) return;\n\n  handleMessageMetadata(event, state);\n\n  // Tool call events are sent via 3 separate events:\n  // - content_block_start (start of the tool call)\n  // - content_block_delta (delta aka input of the tool call)\n  // - content_block_stop (end of the tool call)\n  // We need to handle them all to capture the full tool call.\n  handleContentBlockStart(event, state);\n  handleContentBlockDelta(event, state, recordOutputs);\n  handleContentBlockStop(event, state);\n}\n\n/**\n * Instruments an async iterable stream of Anthropic events, updates the span with\n * streaming attributes and (optionally) the aggregated output text, and yields\n * each event from the input stream unchanged.\n */\nexport async function* instrumentAsyncIterableStream(\n  stream: AsyncIterable<AnthropicAiStreamingEvent>,\n  span: Span,\n  recordOutputs: boolean,\n): AsyncGenerator<AnthropicAiStreamingEvent, void, unknown> {\n  const state: StreamingState = {\n    responseTexts: [],\n    finishReasons: [],\n    responseId: '',\n    responseModel: '',\n    promptTokens: undefined,\n    completionTokens: undefined,\n    cacheCreationInputTokens: undefined,\n    cacheReadInputTokens: undefined,\n    toolCalls: [],\n    activeToolBlocks: {},\n  };\n\n  try {\n    for await (const event of stream) {\n      processEvent(event, state, recordOutputs, span);\n      yield event;\n    }\n  } finally {\n    endStreamSpan(span, state, recordOutputs);\n  }\n}\n\n/**\n * Instruments a MessageStream by registering event handlers and preserving the original stream API.\n */\nexport function instrumentMessageStream<R extends { on: (...args: unknown[]) => void }>(\n  stream: R,\n  span: Span,\n  recordOutputs: boolean,\n): R {\n  const state: StreamingState = {\n    responseTexts: [],\n    finishReasons: [],\n    responseId: '',\n    responseModel: '',\n    promptTokens: undefined,\n    completionTokens: undefined,\n    cacheCreationInputTokens: undefined,\n    cacheReadInputTokens: undefined,\n    toolCalls: [],\n    activeToolBlocks: {},\n  };\n\n  stream.on('streamEvent', (event: unknown) => {\n    processEvent(event as AnthropicAiStreamingEvent, state, recordOutputs, span);\n  });\n\n  // The event fired when a message is done being streamed by the API. Corresponds to the message_stop SSE event.\n  // @see https://github.com/anthropics/anthropic-sdk-typescript/blob/d3be31f5a4e6ebb4c0a2f65dbb8f381ae73a9166/helpers.md?plain=1#L42-L44\n  stream.on('message', () => {\n    endStreamSpan(span, state, recordOutputs);\n  });\n\n  stream.on('error', (error: unknown) => {\n    // Attaching this listener stops the stream error from being raised as an unhandled rejection, so\n    // we capture it here to avoid swallowing it (e.g. for callers that don't await/iterate the stream).\n    captureException(error, {\n      mechanism: {\n        handled: false,\n        type: 'auto.ai.anthropic.stream_error',\n      },\n    });\n\n    if (span.isRecording()) {\n      span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n      span.end();\n    }\n  });\n\n  return stream;\n}\n", "import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../../semanticAttributes';\nimport { SPAN_STATUS_ERROR } from '../../tracing';\nimport { startSpan, startSpanManual } from '../../tracing/trace';\nimport type { Span, SpanAttributeValue } from '../../types/span';\nimport {\n  GEN_AI_OPERATION_NAME_ATTRIBUTE,\n  GEN_AI_PROMPT_ATTRIBUTE,\n  GEN_AI_REQUEST_AVAILABLE_TOOLS_ATTRIBUTE,\n  GEN_AI_REQUEST_FREQUENCY_PENALTY_ATTRIBUTE,\n  GEN_AI_REQUEST_MAX_TOKENS_ATTRIBUTE,\n  GEN_AI_REQUEST_MODEL_ATTRIBUTE,\n  GEN_AI_REQUEST_STREAM_ATTRIBUTE,\n  GEN_AI_REQUEST_TEMPERATURE_ATTRIBUTE,\n  GEN_AI_REQUEST_TOP_K_ATTRIBUTE,\n  GEN_AI_REQUEST_TOP_P_ATTRIBUTE,\n  GEN_AI_RESPONSE_ID_ATTRIBUTE,\n  GEN_AI_RESPONSE_MODEL_ATTRIBUTE,\n  GEN_AI_RESPONSE_TEXT_ATTRIBUTE,\n  GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE,\n  GEN_AI_SYSTEM_ATTRIBUTE,\n} from '../ai/gen-ai-attributes';\nimport type { InstrumentedMethodEntry } from '../ai/utils';\nimport {\n  getTokenUsageAttributes,\n  resolveAIRecordingOptions,\n  shouldEnableTruncation,\n  wrapPromiseWithMethods,\n} from '../ai/utils';\nimport { ANTHROPIC_METHOD_REGISTRY } from './constants';\nimport { instrumentAsyncIterableStream, instrumentMessageStream } from './streaming';\nimport type { AnthropicAiOptions, AnthropicAiResponse, AnthropicAiStreamingEvent, ContentBlock } from './types';\nimport { handleResponseError, messagesFromParams, setMessagesAttribute } from './utils';\n\n// Set only while a streaming helper (e.g. `messages.stream()`) synchronously delegates to the\n// underlying `create`. The SDK invokes that internal `create` synchronously, so a plain flag\n// suppresses exactly the duplicate delegation and nothing else: a `create` made later from a\n// stream event handler runs in a separate async continuation with the flag already cleared.\nlet suppressDelegatedCreate = false;\n\n// Methods that have already been wrapped, so instrumenting the same client twice is a no-op.\nconst INSTRUMENTED_METHODS = new WeakSet<object>();\n\n/**\n * Extract request attributes from method arguments\n */\nexport function extractRequestAttributes(\n  args: unknown[],\n  methodPath: string,\n  operationName: string,\n): Record<string, unknown> {\n  const attributes: Record<string, unknown> = {\n    [GEN_AI_SYSTEM_ATTRIBUTE]: 'anthropic',\n    [GEN_AI_OPERATION_NAME_ATTRIBUTE]: operationName,\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ai.anthropic',\n  };\n\n  if (args.length > 0 && typeof args[0] === 'object' && args[0] !== null) {\n    const params = args[0] as Record<string, unknown>;\n    if (params.tools && Array.isArray(params.tools)) {\n      attributes[GEN_AI_REQUEST_AVAILABLE_TOOLS_ATTRIBUTE] = JSON.stringify(params.tools);\n    }\n\n    attributes[GEN_AI_REQUEST_MODEL_ATTRIBUTE] = params.model ?? 'unknown';\n    if ('temperature' in params) attributes[GEN_AI_REQUEST_TEMPERATURE_ATTRIBUTE] = params.temperature;\n    if ('top_p' in params) attributes[GEN_AI_REQUEST_TOP_P_ATTRIBUTE] = params.top_p;\n    if ('stream' in params) attributes[GEN_AI_REQUEST_STREAM_ATTRIBUTE] = params.stream;\n    if ('top_k' in params) attributes[GEN_AI_REQUEST_TOP_K_ATTRIBUTE] = params.top_k;\n    if ('frequency_penalty' in params)\n      attributes[GEN_AI_REQUEST_FREQUENCY_PENALTY_ATTRIBUTE] = params.frequency_penalty;\n    if ('max_tokens' in params) attributes[GEN_AI_REQUEST_MAX_TOKENS_ATTRIBUTE] = params.max_tokens;\n  } else {\n    if (methodPath === 'models.retrieve' || methodPath === 'models.get') {\n      // models.retrieve(model-id) and models.get(model-id)\n      attributes[GEN_AI_REQUEST_MODEL_ATTRIBUTE] = args[0];\n    } else {\n      attributes[GEN_AI_REQUEST_MODEL_ATTRIBUTE] = 'unknown';\n    }\n  }\n\n  return attributes;\n}\n\n/**\n * Add private request attributes to spans.\n * This is only recorded if recordInputs is true.\n */\nexport function addPrivateRequestAttributes(\n  span: Span,\n  params: Record<string, unknown>,\n  enableTruncation: boolean,\n): void {\n  const messages = messagesFromParams(params);\n  setMessagesAttribute(span, messages, enableTruncation);\n\n  if ('prompt' in params) {\n    span.setAttributes({ [GEN_AI_PROMPT_ATTRIBUTE]: JSON.stringify(params.prompt) });\n  }\n}\n\n/**\n * Add content attributes when recordOutputs is enabled\n */\nfunction addContentAttributes(span: Span, response: AnthropicAiResponse): void {\n  // Messages.create\n  if ('content' in response) {\n    if (Array.isArray(response.content)) {\n      span.setAttributes({\n        [GEN_AI_RESPONSE_TEXT_ATTRIBUTE]: response.content\n          .map((item: ContentBlock) => item.text)\n          .filter(text => !!text)\n          .join(''),\n      });\n\n      const toolCalls: Array<ContentBlock> = [];\n\n      for (const item of response.content) {\n        if (item.type === 'tool_use' || item.type === 'server_tool_use') {\n          toolCalls.push(item);\n        }\n      }\n      if (toolCalls.length > 0) {\n        span.setAttributes({ [GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE]: JSON.stringify(toolCalls) });\n      }\n    }\n  }\n  // Completions.create\n  if ('completion' in response) {\n    span.setAttributes({ [GEN_AI_RESPONSE_TEXT_ATTRIBUTE]: response.completion });\n  }\n  // Models.countTokens\n  if ('input_tokens' in response) {\n    span.setAttributes({ [GEN_AI_RESPONSE_TEXT_ATTRIBUTE]: JSON.stringify(response.input_tokens) });\n  }\n}\n\n/**\n * Add basic metadata attributes from the response\n */\nfunction addMetadataAttributes(span: Span, response: AnthropicAiResponse): void {\n  if ('id' in response && 'model' in response) {\n    span.setAttributes({\n      [GEN_AI_RESPONSE_ID_ATTRIBUTE]: response.id,\n      [GEN_AI_RESPONSE_MODEL_ATTRIBUTE]: response.model,\n    });\n\n    if ('usage' in response && response.usage) {\n      span.setAttributes(\n        getTokenUsageAttributes(\n          response.usage.input_tokens +\n            (response.usage.cache_creation_input_tokens ?? 0) +\n            (response.usage.cache_read_input_tokens ?? 0),\n          response.usage.output_tokens,\n          response.usage.cache_creation_input_tokens,\n          response.usage.cache_read_input_tokens,\n        ),\n      );\n    }\n  }\n}\n\n/**\n * Add response attributes to spans\n */\nexport function addResponseAttributes(span: Span, response: AnthropicAiResponse, recordOutputs?: boolean): void {\n  if (!response || typeof response !== 'object') return;\n\n  // capture error, do not add attributes if error (they shouldn't exist)\n  if ('type' in response && response.type === 'error') {\n    handleResponseError(span, response);\n    return;\n  }\n\n  // Private response attributes that are only recorded if recordOutputs is true.\n  if (recordOutputs) {\n    addContentAttributes(span, response);\n  }\n\n  // Add basic metadata attributes\n  addMetadataAttributes(span, response);\n}\n\n/**\n * Handle common error catching and reporting for streaming requests\n */\nfunction handleStreamingError(error: unknown, span: Span): never {\n  if (span.isRecording()) {\n    span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n    span.end();\n  }\n  throw error;\n}\n\n/**\n * Handle streaming cases with common logic\n */\nfunction handleStreamingRequest<T extends unknown[], R>(\n  target: (...args: T) => R | Promise<R>,\n  invocationThis: unknown,\n  args: T,\n  requestAttributes: Record<string, unknown>,\n  operationName: string,\n  methodPath: string,\n  params: Record<string, unknown> | undefined,\n  options: AnthropicAiOptions,\n  isStreamRequested: boolean,\n  isStreamingMethod: boolean,\n): R | Promise<R> {\n  const model = requestAttributes[GEN_AI_REQUEST_MODEL_ATTRIBUTE] ?? 'unknown';\n  const spanConfig = {\n    name: `${operationName} ${model}`,\n    op: `gen_ai.${operationName}`,\n    attributes: requestAttributes as Record<string, SpanAttributeValue>,\n  };\n\n  // messages.stream() always returns a sync MessageStream, even with stream: true param\n  if (isStreamRequested && !isStreamingMethod) {\n    let originalResult!: Promise<R>;\n\n    const instrumentedPromise = startSpanManual(spanConfig, (span: Span) => {\n      originalResult = target.apply(invocationThis, args) as Promise<R>;\n\n      if (options.recordInputs && params) {\n        addPrivateRequestAttributes(span, params, shouldEnableTruncation(options.enableTruncation));\n      }\n\n      return (async () => {\n        try {\n          const result = await originalResult;\n          return instrumentAsyncIterableStream(\n            result as AsyncIterable<AnthropicAiStreamingEvent>,\n            span,\n            options.recordOutputs ?? false,\n          ) as unknown as R;\n        } catch (error) {\n          return handleStreamingError(error, span);\n        }\n      })();\n    });\n\n    return wrapPromiseWithMethods(originalResult, instrumentedPromise);\n  } else {\n    return startSpanManual(spanConfig, span => {\n      try {\n        if (options.recordInputs && params) {\n          addPrivateRequestAttributes(span, params, shouldEnableTruncation(options.enableTruncation));\n        }\n        // The helper synchronously delegates to `create`; suppress that one internal call so it\n        // does not produce a duplicate child span (see the dedup gate in `instrumentMethod`).\n        suppressDelegatedCreate = true;\n        const messageStream = target.apply(invocationThis, args);\n        suppressDelegatedCreate = false;\n        return instrumentMessageStream(messageStream, span, options.recordOutputs ?? false);\n      } catch (error) {\n        suppressDelegatedCreate = false;\n        return handleStreamingError(error, span);\n      }\n    });\n  }\n}\n\n/**\n * Instrument a method with Sentry spans\n * Following Sentry AI Agents Manual Instrumentation conventions\n * @see https://docs.sentry.io/platforms/javascript/guides/node/tracing/instrumentation/ai-agents-module/#manual-instrumentation\n */\nfunction instrumentMethod<T extends unknown[], R>(\n  originalMethod: (...args: T) => R | Promise<R>,\n  methodPath: string,\n  instrumentedMethod: InstrumentedMethodEntry,\n  context: unknown,\n  options: AnthropicAiOptions,\n): (...args: T) => R | Promise<R> {\n  return new Proxy(originalMethod, {\n    apply(target, thisArg, args: T): R | Promise<R> {\n      // Preserve the caller's `this` so instrumentation stays transparent: the SDK's methods\n      // rely on private fields bound to the real instance, and internal delegation (e.g.\n      // `messages.stream()` calling `this.create()`) must resolve against the same object it\n      // would on an uninstrumented client. Fall back to the wrap-time owner for unbound calls.\n      const invocationThis = thisArg !== undefined ? thisArg : context;\n\n      const isStreamingMethod = instrumentedMethod.streaming === true;\n\n      // If this is the SDK's internal `create` delegation from a streaming helper (e.g.\n      // `messages.stream()` invoking `this.create()`), skip instrumentation: the helper span\n      // already represents this operation, so a second span would be a duplicate.\n      if (!isStreamingMethod && suppressDelegatedCreate) {\n        return target.apply(invocationThis, args);\n      }\n\n      const operationName = instrumentedMethod.operation || 'unknown';\n      const requestAttributes = extractRequestAttributes(args, methodPath, operationName);\n      const model = requestAttributes[GEN_AI_REQUEST_MODEL_ATTRIBUTE] ?? 'unknown';\n\n      const params = typeof args[0] === 'object' ? (args[0] as Record<string, unknown>) : undefined;\n      const isStreamRequested = Boolean(params?.stream);\n\n      if (isStreamRequested || isStreamingMethod) {\n        return handleStreamingRequest(\n          target,\n          invocationThis,\n          args,\n          requestAttributes,\n          operationName,\n          methodPath,\n          params,\n          options,\n          isStreamRequested,\n          isStreamingMethod,\n        );\n      }\n\n      let originalResult!: Promise<R>;\n\n      const instrumentedPromise = startSpan(\n        {\n          name: `${operationName} ${model}`,\n          op: `gen_ai.${operationName}`,\n          attributes: requestAttributes as Record<string, SpanAttributeValue>,\n        },\n        span => {\n          originalResult = target.apply(invocationThis, args) as Promise<R>;\n\n          if (options.recordInputs && params) {\n            addPrivateRequestAttributes(span, params, shouldEnableTruncation(options.enableTruncation));\n          }\n\n          return originalResult.then(result => {\n            addResponseAttributes(span, result as AnthropicAiResponse, options.recordOutputs);\n            return result;\n          });\n        },\n      );\n\n      return wrapPromiseWithMethods(originalResult, instrumentedPromise);\n    },\n  }) as (...args: T) => R | Promise<R>;\n}\n\n/**\n * Instrument the Anthropic client's methods in place.\n *\n * We deliberately do not wrap the client in a Proxy. The Anthropic SDK relies on private class\n * fields (`this.#field`), which are invisible to a Proxy and throw if a method runs with a\n * proxied `this`. Wrapping the registered methods in place (as own properties shadowing the\n * prototype) keeps `this` bound to the real instance, so instrumentation stays observationally\n * transparent: internal delegation (e.g. `messages.stream()` calling `this.create()`) and\n * `instanceof` checks behave exactly as on an uninstrumented client, and non-instrumented\n * methods are left untouched.\n */\nfunction instrumentClientInPlace<T extends object>(client: T, options: AnthropicAiOptions): T {\n  for (const methodPath of Object.keys(ANTHROPIC_METHOD_REGISTRY) as Array<keyof typeof ANTHROPIC_METHOD_REGISTRY>) {\n    const segments = methodPath.split('.');\n    const methodName = segments.pop() as string;\n\n    let owner = client as Record<string, unknown> | undefined;\n    for (const segment of segments) {\n      owner = owner?.[segment] as Record<string, unknown> | undefined;\n    }\n\n    if (!owner || typeof owner[methodName] !== 'function') {\n      continue;\n    }\n\n    const originalMethod = owner[methodName] as (...args: unknown[]) => unknown;\n    if (INSTRUMENTED_METHODS.has(originalMethod)) {\n      continue;\n    }\n\n    const instrumented = instrumentMethod(\n      originalMethod,\n      methodPath,\n      ANTHROPIC_METHOD_REGISTRY[methodPath],\n      owner,\n      options,\n    );\n    INSTRUMENTED_METHODS.add(instrumented);\n    owner[methodName] = instrumented;\n  }\n\n  return client;\n}\n\n/**\n * Instrument an Anthropic AI client with Sentry tracing\n * Can be used across Node.js, Cloudflare Workers, and Vercel Edge\n *\n * @template T - The type of the client that extends object\n * @param client - The Anthropic AI client to instrument\n * @param options - Optional configuration for recording inputs and outputs\n * @returns The instrumented client with the same type as the input\n */\nexport function instrumentAnthropicAiClient<T extends object>(anthropicAiClient: T, options?: AnthropicAiOptions): T {\n  return instrumentClientInPlace(anthropicAiClient, resolveAIRecordingOptions(options));\n}\n", "import type { InstrumentedMethodRegistry } from '../ai/utils';\n\nexport const GOOGLE_GENAI_INTEGRATION_NAME = 'Google_GenAI' as const;\n\n// https://ai.google.dev/api/rest/v1/models/generateContent\n// https://ai.google.dev/api/rest/v1/chats/sendMessage\n// https://googleapis.github.io/js-genai/release_docs/classes/models.Models.html#generatecontentstream\n// https://googleapis.github.io/js-genai/release_docs/classes/chats.Chat.html#sendmessagestream\nexport const GOOGLE_GENAI_METHOD_REGISTRY = {\n  'models.generateContent': { operation: 'generate_content' },\n  'models.generateContentStream': { operation: 'generate_content', streaming: true },\n  'models.embedContent': { operation: 'embeddings' },\n  'chats.create': { proxyResultPath: 'chat' },\n  'chat.sendMessage': { operation: 'chat' },\n  'chat.sendMessageStream': { operation: 'chat', streaming: true },\n} as const satisfies InstrumentedMethodRegistry;\n\n// Constants for internal use\nexport const GOOGLE_GENAI_SYSTEM_NAME = 'google_genai';\n", "import { captureException } from '../../exports';\nimport { SPAN_STATUS_ERROR } from '../../tracing';\nimport type { Span } from '../../types/span';\nimport { endStreamSpan } from '../ai/utils';\nimport type { GoogleGenAIResponse } from './types';\n\n/**\n * State object used to accumulate information from a stream of Google GenAI events.\n */\ninterface StreamingState {\n  /** Collected response text fragments (for output recording). */\n  responseTexts: string[];\n  /** Reasons for finishing the response, as reported by the API. */\n  finishReasons: string[];\n  /** The response ID. */\n  responseId?: string;\n  /** The model name. */\n  responseModel?: string;\n  /** Number of prompt/input tokens used. */\n  promptTokens?: number;\n  /** Number of completion/output tokens used. */\n  completionTokens?: number;\n  candidateTokens?: number;\n  reasoningOutputTokens?: number;\n  /** Number of total tokens used. */\n  totalTokens?: number;\n  cacheReadInputTokens?: number;\n  /** Accumulated tool calls (finalized) */\n  toolCalls: Array<Record<string, unknown>>;\n}\n\n/**\n * Checks if a response chunk contains an error\n * @param chunk - The response chunk to check\n * @param span - The span to update if error is found\n * @returns Whether an error occurred\n */\nfunction isErrorChunk(chunk: GoogleGenAIResponse, span: Span): boolean {\n  const feedback = chunk?.promptFeedback;\n  if (feedback?.blockReason) {\n    const message = feedback.blockReasonMessage ?? feedback.blockReason;\n    span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n    captureException(`Content blocked: ${message}`, {\n      mechanism: { handled: false, type: 'auto.ai.google_genai' },\n    });\n    return true;\n  }\n  return false;\n}\n\n/**\n * Processes response metadata from a chunk\n * @param chunk - The response chunk to process\n * @param state - The state of the streaming process\n */\nfunction handleResponseMetadata(chunk: GoogleGenAIResponse, state: StreamingState): void {\n  if (typeof chunk.responseId === 'string') state.responseId = chunk.responseId;\n  if (typeof chunk.modelVersion === 'string') state.responseModel = chunk.modelVersion;\n\n  const usage = chunk.usageMetadata;\n  if (usage) {\n    if (typeof usage.promptTokenCount === 'number') state.promptTokens = usage.promptTokenCount;\n    if (typeof usage.candidatesTokenCount === 'number') state.candidateTokens = usage.candidatesTokenCount;\n    if (typeof usage.thoughtsTokenCount === 'number') state.reasoningOutputTokens = usage.thoughtsTokenCount;\n    if (state.candidateTokens !== undefined || state.reasoningOutputTokens !== undefined) {\n      state.completionTokens = (state.candidateTokens ?? 0) + (state.reasoningOutputTokens ?? 0);\n    }\n    if (typeof usage.totalTokenCount === 'number') state.totalTokens = usage.totalTokenCount;\n    if (typeof usage.cachedContentTokenCount === 'number') state.cacheReadInputTokens = usage.cachedContentTokenCount;\n  }\n}\n\n/**\n * Processes candidate content from a response chunk\n * @param chunk - The response chunk to process\n * @param state - The state of the streaming process\n * @param recordOutputs - Whether to record outputs\n */\nfunction handleCandidateContent(chunk: GoogleGenAIResponse, state: StreamingState, recordOutputs: boolean): void {\n  if (Array.isArray(chunk.functionCalls)) {\n    state.toolCalls.push(...chunk.functionCalls);\n  }\n\n  for (const candidate of chunk.candidates ?? []) {\n    if (candidate?.finishReason && !state.finishReasons.includes(candidate.finishReason)) {\n      state.finishReasons.push(candidate.finishReason);\n    }\n\n    for (const part of candidate?.content?.parts ?? []) {\n      if (recordOutputs && part.text) state.responseTexts.push(part.text);\n      if (part.functionCall) {\n        state.toolCalls.push({\n          type: 'function',\n          id: part.functionCall.id,\n          name: part.functionCall.name,\n          arguments: part.functionCall.args,\n        });\n      }\n    }\n  }\n}\n\n/**\n * Processes a single chunk from the Google GenAI stream\n * @param chunk - The chunk to process\n * @param state - The state of the streaming process\n * @param recordOutputs - Whether to record outputs\n * @param span - The span to update\n */\nfunction processChunk(chunk: GoogleGenAIResponse, state: StreamingState, recordOutputs: boolean, span: Span): void {\n  if (!chunk || isErrorChunk(chunk, span)) return;\n  handleResponseMetadata(chunk, state);\n  handleCandidateContent(chunk, state, recordOutputs);\n}\n\n/**\n * Instruments an async iterable stream of Google GenAI response chunks, updates the span with\n * streaming attributes and (optionally) the aggregated output text, and yields\n * each chunk from the input stream unchanged.\n */\nexport async function* instrumentStream(\n  stream: AsyncIterable<GoogleGenAIResponse>,\n  span: Span,\n  recordOutputs: boolean,\n): AsyncGenerator<GoogleGenAIResponse, void, unknown> {\n  const state: StreamingState = {\n    responseTexts: [],\n    finishReasons: [],\n    toolCalls: [],\n  };\n\n  try {\n    for await (const chunk of stream) {\n      processChunk(chunk, state, recordOutputs, span);\n      yield chunk;\n    }\n  } finally {\n    endStreamSpan(span, state, recordOutputs);\n  }\n}\n", "// Copied from https://googleapis.github.io/js-genai/release_docs/index.html\nexport type ContentListUnion = Content | Content[] | PartListUnion;\nexport type ContentUnion = Content | PartUnion[] | PartUnion;\nexport type Content = {\n  parts?: Part[];\n  role?: string;\n};\nexport type PartUnion = Part | string;\nexport type Part = Record<string, unknown> & {\n  inlineData?: {\n    data?: string;\n    displayName?: string;\n    mimeType?: string;\n  };\n  text?: string;\n};\nexport type PartListUnion = PartUnion[] | PartUnion;\n\n// our consistent span message shape\nexport type Message = Record<string, unknown> & {\n  role: string;\n  content?: PartListUnion;\n  parts?: PartListUnion;\n};\n\n/**\n *\n */\nexport function contentUnionToMessages(content: ContentListUnion, role = 'user'): Message[] {\n  if (typeof content === 'string') {\n    return [{ role, content }];\n  }\n  if (Array.isArray(content)) {\n    return content.flatMap(content => contentUnionToMessages(content, role));\n  }\n  if (typeof content !== 'object' || !content) return [];\n  if ('role' in content && typeof content.role === 'string') {\n    return [content as Message];\n  }\n  if ('parts' in content) {\n    return [{ ...content, role } as Message];\n  }\n  return [{ role, content }];\n}\n", "/* eslint-disable max-lines */\nimport { GEN_AI_USAGE_REASONING_OUTPUT_TOKENS } from '@sentry/conventions/attributes';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../../semanticAttributes';\nimport { SPAN_STATUS_ERROR } from '../../tracing';\nimport { startSpan, startSpanManual } from '../../tracing/trace';\nimport type { Span, SpanAttributeValue } from '../../types/span';\nimport { handleCallbackErrors } from '../../utils/handleCallbackErrors';\nimport {\n  GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE,\n  GEN_AI_INPUT_MESSAGES_ATTRIBUTE,\n  GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE,\n  GEN_AI_OPERATION_NAME_ATTRIBUTE,\n  GEN_AI_REQUEST_AVAILABLE_TOOLS_ATTRIBUTE,\n  GEN_AI_REQUEST_FREQUENCY_PENALTY_ATTRIBUTE,\n  GEN_AI_REQUEST_MAX_TOKENS_ATTRIBUTE,\n  GEN_AI_REQUEST_MODEL_ATTRIBUTE,\n  GEN_AI_REQUEST_PRESENCE_PENALTY_ATTRIBUTE,\n  GEN_AI_REQUEST_TEMPERATURE_ATTRIBUTE,\n  GEN_AI_REQUEST_TOP_K_ATTRIBUTE,\n  GEN_AI_REQUEST_TOP_P_ATTRIBUTE,\n  GEN_AI_RESPONSE_MODEL_ATTRIBUTE,\n  GEN_AI_RESPONSE_TEXT_ATTRIBUTE,\n  GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE,\n  GEN_AI_SYSTEM_ATTRIBUTE,\n  GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE,\n} from '../ai/gen-ai-attributes';\nimport type { InstrumentedMethodEntry } from '../ai/utils';\nimport { stringify } from '../../utils/string';\nimport {\n  buildMethodPath,\n  getTokenUsageAttributes,\n  extractSystemInstructions,\n  getTruncatedJsonString,\n  resolveAIRecordingOptions,\n  shouldEnableTruncation,\n} from '../ai/utils';\nimport { GOOGLE_GENAI_METHOD_REGISTRY, GOOGLE_GENAI_SYSTEM_NAME } from './constants';\nimport { instrumentStream } from './streaming';\nimport type { Candidate, ContentPart, GoogleGenAIOptions, GoogleGenAIResponse } from './types';\nimport type { ContentListUnion, ContentUnion, Message, PartListUnion } from './utils';\nimport { contentUnionToMessages } from './utils';\n\n/**\n * Extract model from parameters or chat context object\n * For chat instances, the model is available on the chat object as 'model' (older versions) or 'modelVersion' (newer versions)\n */\nexport function extractModel(params: Record<string, unknown>, context?: unknown): string {\n  if ('model' in params && typeof params.model === 'string') {\n    return params.model;\n  }\n\n  // Try to get model from chat context object (chat instance has model property)\n  if (context && typeof context === 'object') {\n    const contextObj = context as Record<string, unknown>;\n\n    // Check for 'model' property (older versions, and streaming)\n    if ('model' in contextObj && typeof contextObj.model === 'string') {\n      return contextObj.model;\n    }\n\n    // Check for 'modelVersion' property (newer versions)\n    if ('modelVersion' in contextObj && typeof contextObj.modelVersion === 'string') {\n      return contextObj.modelVersion;\n    }\n  }\n\n  return 'unknown';\n}\n\n/**\n * Extract generation config parameters\n */\nfunction extractConfigAttributes(config: Record<string, unknown>): Record<string, SpanAttributeValue> {\n  const attributes: Record<string, SpanAttributeValue> = {};\n\n  if ('temperature' in config && typeof config.temperature === 'number') {\n    attributes[GEN_AI_REQUEST_TEMPERATURE_ATTRIBUTE] = config.temperature;\n  }\n  if ('topP' in config && typeof config.topP === 'number') {\n    attributes[GEN_AI_REQUEST_TOP_P_ATTRIBUTE] = config.topP;\n  }\n  if ('topK' in config && typeof config.topK === 'number') {\n    attributes[GEN_AI_REQUEST_TOP_K_ATTRIBUTE] = config.topK;\n  }\n  if ('maxOutputTokens' in config && typeof config.maxOutputTokens === 'number') {\n    attributes[GEN_AI_REQUEST_MAX_TOKENS_ATTRIBUTE] = config.maxOutputTokens;\n  }\n  if ('frequencyPenalty' in config && typeof config.frequencyPenalty === 'number') {\n    attributes[GEN_AI_REQUEST_FREQUENCY_PENALTY_ATTRIBUTE] = config.frequencyPenalty;\n  }\n  if ('presencePenalty' in config && typeof config.presencePenalty === 'number') {\n    attributes[GEN_AI_REQUEST_PRESENCE_PENALTY_ATTRIBUTE] = config.presencePenalty;\n  }\n\n  return attributes;\n}\n\n/**\n * Extract request attributes from method arguments\n * Builds the base attributes for span creation including system info, model, and config\n */\nexport function extractRequestAttributes(\n  operationName: string,\n  params?: Record<string, unknown>,\n  context?: unknown,\n): Record<string, SpanAttributeValue> {\n  const attributes: Record<string, SpanAttributeValue> = {\n    [GEN_AI_SYSTEM_ATTRIBUTE]: GOOGLE_GENAI_SYSTEM_NAME,\n    [GEN_AI_OPERATION_NAME_ATTRIBUTE]: operationName,\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ai.google_genai',\n  };\n\n  if (params) {\n    attributes[GEN_AI_REQUEST_MODEL_ATTRIBUTE] = extractModel(params, context);\n\n    // Extract generation config parameters\n    if ('config' in params && typeof params.config === 'object' && params.config) {\n      const config = params.config as Record<string, unknown>;\n      Object.assign(attributes, extractConfigAttributes(config));\n\n      // Extract available tools from config\n      if ('tools' in config && Array.isArray(config.tools)) {\n        const functionDeclarations = config.tools.flatMap(\n          (tool: { functionDeclarations: unknown[] }) => tool.functionDeclarations,\n        );\n        attributes[GEN_AI_REQUEST_AVAILABLE_TOOLS_ATTRIBUTE] = JSON.stringify(functionDeclarations);\n      }\n    }\n  } else {\n    attributes[GEN_AI_REQUEST_MODEL_ATTRIBUTE] = extractModel({}, context);\n  }\n\n  return attributes;\n}\n\n/**\n * Add private request attributes to spans.\n * This is only recorded if recordInputs is true.\n * Handles different parameter formats for different Google GenAI methods.\n */\nexport function addPrivateRequestAttributes(\n  span: Span,\n  params: Record<string, unknown>,\n  operationName: string,\n  enableTruncation: boolean,\n): void {\n  if (operationName === 'embeddings') {\n    const contents = params.contents;\n    if (contents != null) {\n      span.setAttribute(\n        GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE,\n        typeof contents === 'string' ? contents : JSON.stringify(contents),\n      );\n    }\n    return;\n  }\n\n  const messages: Message[] = [];\n\n  // config.systemInstruction: ContentUnion\n  if (\n    'config' in params &&\n    params.config &&\n    typeof params.config === 'object' &&\n    'systemInstruction' in params.config &&\n    params.config.systemInstruction\n  ) {\n    messages.push(...contentUnionToMessages(params.config.systemInstruction as ContentUnion, 'system'));\n  }\n\n  // For chats.create: history contains the conversation history\n  if ('history' in params) {\n    messages.push(...contentUnionToMessages(params.history as PartListUnion, 'user'));\n  }\n\n  // For models.generateContent: ContentListUnion\n  if ('contents' in params) {\n    messages.push(...contentUnionToMessages(params.contents as ContentListUnion, 'user'));\n  }\n\n  // For chat.sendMessage: message can be PartListUnion\n  if ('message' in params) {\n    messages.push(...contentUnionToMessages(params.message as PartListUnion, 'user'));\n  }\n\n  if (Array.isArray(messages) && messages.length) {\n    const { systemInstructions, filteredMessages } = extractSystemInstructions(messages);\n\n    if (systemInstructions) {\n      span.setAttribute(GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE, systemInstructions);\n    }\n\n    const filteredLength = Array.isArray(filteredMessages) ? filteredMessages.length : 0;\n    span.setAttributes({\n      [GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE]: filteredLength,\n      [GEN_AI_INPUT_MESSAGES_ATTRIBUTE]: enableTruncation\n        ? getTruncatedJsonString(filteredMessages)\n        : stringify(filteredMessages),\n    });\n  }\n}\n\n/**\n * Add response attributes from the Google GenAI response\n * @see https://github.com/googleapis/js-genai/blob/v1.19.0/src/types.ts#L2313\n */\nexport function addResponseAttributes(span: Span, response: GoogleGenAIResponse, recordOutputs?: boolean): void {\n  if (!response || typeof response !== 'object') return;\n\n  if (response.modelVersion) {\n    span.setAttribute(GEN_AI_RESPONSE_MODEL_ATTRIBUTE, response.modelVersion);\n  }\n\n  // Add usage metadata if present\n  if (response.usageMetadata && typeof response.usageMetadata === 'object') {\n    const usage = response.usageMetadata;\n    const hasOutput = typeof usage.candidatesTokenCount === 'number' || typeof usage.thoughtsTokenCount === 'number';\n    span.setAttributes(\n      getTokenUsageAttributes(\n        usage.promptTokenCount,\n        hasOutput ? (usage.candidatesTokenCount ?? 0) + (usage.thoughtsTokenCount ?? 0) : undefined,\n        undefined,\n        usage.cachedContentTokenCount,\n        usage.totalTokenCount,\n      ),\n    );\n    if (typeof usage.thoughtsTokenCount === 'number') {\n      span.setAttribute(GEN_AI_USAGE_REASONING_OUTPUT_TOKENS, usage.thoughtsTokenCount);\n    }\n  }\n\n  // Add response text if recordOutputs is enabled\n  if (recordOutputs && Array.isArray(response.candidates) && response.candidates.length > 0) {\n    const responseTexts = response.candidates\n      .map((candidate: Candidate) => {\n        if (candidate.content?.parts && Array.isArray(candidate.content.parts)) {\n          return candidate.content.parts\n            .map((part: ContentPart) => (typeof part.text === 'string' ? part.text : ''))\n            .filter((text: string) => text.length > 0)\n            .join('');\n        }\n        return '';\n      })\n      .filter((text: string) => text.length > 0);\n\n    if (responseTexts.length > 0) {\n      span.setAttributes({\n        [GEN_AI_RESPONSE_TEXT_ATTRIBUTE]: responseTexts.join(''),\n      });\n    }\n  }\n\n  // Add tool calls if recordOutputs is enabled\n  if (recordOutputs && response.functionCalls) {\n    const functionCalls = response.functionCalls;\n    if (Array.isArray(functionCalls) && functionCalls.length > 0) {\n      span.setAttributes({\n        [GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE]: JSON.stringify(functionCalls),\n      });\n    }\n  }\n}\n\n/**\n * Instrument any async or synchronous genai method with Sentry spans\n * Handles operations like models.generateContent and chat.sendMessage and chats.create\n * @see https://docs.sentry.io/platforms/javascript/guides/node/tracing/instrumentation/ai-agents-module/#manual-instrumentation\n */\nfunction instrumentMethod<T extends unknown[], R>(\n  originalMethod: (...args: T) => R | Promise<R>,\n  methodPath: string,\n  instrumentedMethod: InstrumentedMethodEntry,\n  context: unknown,\n  options: GoogleGenAIOptions,\n): (...args: T) => R | Promise<R> {\n  const isEmbeddings = instrumentedMethod.operation === 'embeddings';\n\n  return new Proxy(originalMethod, {\n    apply(target, _, args: T): R | Promise<R> {\n      const operationName = instrumentedMethod.operation || 'unknown';\n      const params = args[0] as Record<string, unknown> | undefined;\n      const requestAttributes = extractRequestAttributes(operationName, params, context);\n      const model = requestAttributes[GEN_AI_REQUEST_MODEL_ATTRIBUTE] ?? 'unknown';\n\n      // Check if this is a streaming method\n      if (instrumentedMethod.streaming) {\n        // Use startSpanManual for streaming methods to control span lifecycle\n        return startSpanManual(\n          {\n            name: `${operationName} ${model}`,\n            op: `gen_ai.${operationName}`,\n            attributes: requestAttributes,\n          },\n          async (span: Span) => {\n            try {\n              if (options.recordInputs && params) {\n                addPrivateRequestAttributes(\n                  span,\n                  params,\n                  operationName,\n                  shouldEnableTruncation(options.enableTruncation),\n                );\n              }\n              const stream = await target.apply(context, args);\n              return instrumentStream(stream, span, Boolean(options.recordOutputs)) as R;\n            } catch (error) {\n              span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n              span.end();\n              throw error;\n            }\n          },\n        );\n      }\n      // Single span for both sync and async operations\n      return startSpan(\n        {\n          name: `${operationName} ${model}`,\n          op: `gen_ai.${operationName}`,\n          attributes: requestAttributes,\n        },\n        (span: Span) => {\n          if (options.recordInputs && params) {\n            addPrivateRequestAttributes(span, params, operationName, shouldEnableTruncation(options.enableTruncation));\n          }\n\n          // `onError` is a no-op because the rejection is rethrown to the caller and `startSpan` already\n          // marks the span errored; both leading callbacks are positional and only exist to reach `onSuccess`.\n          return handleCallbackErrors(\n            () => target.apply(context, args),\n            () => {},\n            () => {},\n            result => {\n              // Only add response attributes for content-producing methods, not for embeddings\n              if (!isEmbeddings) {\n                addResponseAttributes(span, result, options.recordOutputs);\n              }\n            },\n          );\n        },\n      );\n    },\n  }) as (...args: T) => R | Promise<R>;\n}\n\n/**\n * Create a deep proxy for Google GenAI client instrumentation\n * Recursively instruments methods and handles special cases like chats.create\n */\nfunction createDeepProxy<T extends object>(target: T, currentPath = '', options: GoogleGenAIOptions): T {\n  return new Proxy(target, {\n    get: (t, prop, receiver) => {\n      const value = Reflect.get(t, prop, receiver);\n      const methodPath = buildMethodPath(currentPath, String(prop));\n\n      const instrumentedMethod: InstrumentedMethodEntry | undefined =\n        GOOGLE_GENAI_METHOD_REGISTRY[methodPath as keyof typeof GOOGLE_GENAI_METHOD_REGISTRY];\n      if (typeof value === 'function' && instrumentedMethod) {\n        // If an operation is specified, we need to instrument the method itself\n        const wrappedMethod = instrumentedMethod.operation\n          ? instrumentMethod(value as (...args: unknown[]) => unknown, methodPath, instrumentedMethod, t, options)\n          : value.bind(t);\n\n        if (!instrumentedMethod.proxyResultPath) {\n          return wrappedMethod;\n        }\n\n        // If a proxyResultPath is specified, we need to proxy the result of the method.\n        // Note: This currently only properly handles synchronous methods. For async methods,\n        // the Promise itself would be proxied instead of the resolved value. Currently we\n        // don't have a case where this is needed, so I'll keep it simple for now.\n        return function (...args: unknown[]): unknown {\n          const result = wrappedMethod(...args);\n          if (result && typeof result === 'object') {\n            return createDeepProxy(result as object, instrumentedMethod.proxyResultPath, options);\n          }\n          return result;\n        };\n      }\n\n      if (typeof value === 'function') {\n        // Bind non-instrumented functions to preserve the original `this` context\n        return value.bind(t);\n      }\n\n      if (value && typeof value === 'object') {\n        return createDeepProxy(value, methodPath, options);\n      }\n\n      return value;\n    },\n  });\n}\n\n/**\n * Instrument a Google GenAI client with Sentry tracing\n * Can be used across Node.js, Cloudflare Workers, and Vercel Edge\n *\n * @template T - The type of the client that extends client object\n * @param client - The Google GenAI client to instrument\n * @param options - Optional configuration for recording inputs and outputs\n * @returns The instrumented client with the same type as the input\n *\n * @example\n * ```typescript\n * import { GoogleGenAI } from '@google/genai';\n * import { instrumentGoogleGenAIClient } from '@sentry/core';\n *\n * const genAI = new GoogleGenAI({ apiKey: process.env.GOOGLE_GENAI_API_KEY });\n * const instrumentedClient = instrumentGoogleGenAIClient(genAI);\n *\n * // Now both chats.create and sendMessage will be instrumented\n * const chat = instrumentedClient.chats.create({ model: 'gemini-1.5-pro' });\n * const response = await chat.sendMessage({ message: 'Hello' });\n * ```\n */\nexport function instrumentGoogleGenAIClient<T extends object>(client: T, options?: GoogleGenAIOptions): T {\n  return createDeepProxy(client, '', resolveAIRecordingOptions(options));\n}\n", "export const LANGCHAIN_INTEGRATION_NAME = 'LangChain' as const;\nexport const LANGCHAIN_ORIGIN = 'auto.ai.langchain';\n\nexport const ROLE_MAP: Record<string, string> = {\n  human: 'user',\n  ai: 'assistant',\n  assistant: 'assistant',\n  system: 'system',\n  function: 'function',\n  tool: 'tool',\n};\n", "import {\n  GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS,\n  GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS,\n} from '@sentry/conventions/attributes';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../../semanticAttributes';\nimport type { SpanAttributeValue } from '../../types/span';\nimport { stringify } from '../../utils/string';\nimport { isObjectLike } from '../../utils/is';\nimport {\n  GEN_AI_AGENT_NAME_ATTRIBUTE,\n  GEN_AI_INPUT_MESSAGES_ATTRIBUTE,\n  GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE,\n  GEN_AI_OPERATION_NAME_ATTRIBUTE,\n  GEN_AI_REQUEST_FREQUENCY_PENALTY_ATTRIBUTE,\n  GEN_AI_REQUEST_MAX_TOKENS_ATTRIBUTE,\n  GEN_AI_REQUEST_MODEL_ATTRIBUTE,\n  GEN_AI_REQUEST_PRESENCE_PENALTY_ATTRIBUTE,\n  GEN_AI_REQUEST_STREAM_ATTRIBUTE,\n  GEN_AI_REQUEST_TEMPERATURE_ATTRIBUTE,\n  GEN_AI_REQUEST_TOP_P_ATTRIBUTE,\n  GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE,\n  GEN_AI_RESPONSE_ID_ATTRIBUTE,\n  GEN_AI_RESPONSE_MODEL_ATTRIBUTE,\n  GEN_AI_RESPONSE_STOP_REASON_ATTRIBUTE,\n  GEN_AI_RESPONSE_TEXT_ATTRIBUTE,\n  GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE,\n  GEN_AI_SYSTEM_ATTRIBUTE,\n  GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE,\n} from '../ai/gen-ai-attributes';\nimport { isContentMedia, stripInlineMediaFromSingleMessage } from '../ai/mediaStripping';\nimport { extractSystemInstructions, getTruncatedJsonString, getTokenUsageAttributes } from '../ai/utils';\nimport { LANGCHAIN_ORIGIN, ROLE_MAP } from './constants';\nimport type { LangChainLLMResult, LangChainMessage, LangChainSerialized } from './types';\n\n/**\n * Assigns an attribute only when the value is neither `undefined` nor `null`.\n *\n * We keep this tiny helper because call sites are repetitive and easy to miswrite.\n * It also preserves falsy-but-valid values like `0` and `\"\"`.\n */\nconst setIfDefined = (target: Record<string, SpanAttributeValue | undefined>, key: string, value: unknown): void => {\n  if (value != null) target[key] = value as SpanAttributeValue;\n};\n\n/**\n * Like `setIfDefined`, but converts the value with `Number()` and skips only when the\n * result is `NaN`. This ensures numeric 0 makes it through (unlike truthy checks).\n */\nconst setNumberIfDefined = (\n  target: Record<string, SpanAttributeValue | undefined>,\n  key: string,\n  value: unknown,\n): void => {\n  const n = Number(value);\n  if (!Number.isNaN(n)) target[key] = n;\n};\n\n/**\n * Converts message content to a string, stripping inline media (base64 images, audio, etc.)\n * from multimodal content before stringification so downstream media stripping can't miss it.\n *\n * @example\n * // String content passes through unchanged:\n * normalizeContent(\"Hello\") // => \"Hello\"\n *\n * // Multimodal array content — media is replaced with \"[Blob substitute]\" before JSON.stringify:\n * normalizeContent([\n *   { type: \"text\", text: \"What color?\" },\n *   { type: \"image_url\", image_url: { url: \"data:image/png;base64,iVBOR...\" } }\n * ])\n * // => '[{\"type\":\"text\",\"text\":\"What color?\"},{\"type\":\"image_url\",\"image_url\":{\"url\":\"[Blob substitute]\"}}]'\n *\n * // Without this, stringification would JSON.stringify the raw array and the base64 blob\n * // would end up in span attributes, since downstream stripping only works on objects.\n */\nfunction normalizeContent(v: unknown): string | undefined {\n  if (Array.isArray(v)) {\n    try {\n      const stripped = v.map(part =>\n        part && typeof part === 'object' && isContentMedia(part) ? stripInlineMediaFromSingleMessage(part) : part,\n      );\n      return JSON.stringify(stripped);\n    } catch {\n      return String(v);\n    }\n  }\n  return stringify(v, String);\n}\n\n/**\n * Normalizes a single role token to our canonical set.\n *\n * @param role Incoming role value (free-form, any casing)\n * @returns Canonical role: 'user' | 'assistant' | 'system' | 'function' | 'tool' | <passthrough>\n */\nfunction normalizeMessageRole(role: string): string {\n  const normalized = role.toLowerCase();\n  return ROLE_MAP[normalized] ?? normalized;\n}\n\n/**\n * Infers a role from a LangChain message constructor name.\n *\n * Checks for substrings like \"System\", \"Human\", \"AI\", etc.\n */\nfunction normalizeRoleNameFromCtor(name: string): string {\n  if (name.includes('System')) return 'system';\n  if (name.includes('Human')) return 'user';\n  if (name.includes('AI') || name.includes('Assistant')) return 'assistant';\n  if (name.includes('Function')) return 'function';\n  if (name.includes('Tool')) return 'tool';\n  return 'user';\n}\n\n/**\n * Returns invocation params from a LangChain `tags` object.\n *\n * LangChain often passes runtime parameters (model, temperature, etc.) via the\n * `tags.invocation_params` bag. If `tags` is an array (LangChain sometimes uses\n * string tags), we return `undefined`.\n *\n * @param tags LangChain tags (string[] or record)\n * @returns The `invocation_params` object, if present\n */\nexport function getInvocationParams(tags?: string[] | Record<string, unknown>): Record<string, unknown> | undefined {\n  if (!tags || Array.isArray(tags)) return undefined;\n  return tags.invocation_params as Record<string, unknown> | undefined;\n}\n\n/**\n * Normalizes a heterogeneous set of LangChain messages to `{ role, content }`.\n *\n * Why so many branches? LangChain messages can arrive in several shapes:\n *  - Message classes with `_getType()` (most reliable)\n *  - Classes with meaningful constructor names (e.g. `SystemMessage`)\n *  - Plain objects with `type`, or `{ role, content }`\n *  - Serialized format with `{ lc: 1, id: [...], kwargs: { content } }`\n * We preserve the prioritization to minimize behavioral drift.\n *\n * @param messages Mixed LangChain messages\n * @returns Array of normalized `{ role, content }`\n */\nexport function normalizeLangChainMessages(\n  messages: LangChainMessage[],\n): Array<{ role: string; content: string | undefined }> {\n  return messages.map(message => {\n    // 1) Prefer _getType() when present\n    const maybeGetType = (message as { _getType?: () => string })._getType;\n    if (typeof maybeGetType === 'function') {\n      const messageType = maybeGetType.call(message);\n      return {\n        role: normalizeMessageRole(messageType),\n        content: normalizeContent(message.content),\n      };\n    }\n\n    // 2) Serialized LangChain format (lc: 1) - check before constructor name\n    // This is more reliable than constructor.name which can be lost during serialization\n    if (message.lc === 1 && message.kwargs) {\n      const id = message.id;\n      const messageType = Array.isArray(id) && id.length > 0 ? id[id.length - 1] : '';\n      const role = typeof messageType === 'string' ? normalizeRoleNameFromCtor(messageType) : 'user';\n\n      return {\n        role: normalizeMessageRole(role),\n        content: normalizeContent(message.kwargs?.content),\n      };\n    }\n\n    // 3) Then objects with `type`\n    if (message.type) {\n      const role = String(message.type).toLowerCase();\n      return {\n        role: normalizeMessageRole(role),\n        content: normalizeContent(message.content),\n      };\n    }\n\n    // 4) Then objects with `{ role, content }` - check before constructor name\n    // Plain objects have constructor.name=\"Object\" which would incorrectly default to \"user\"\n    if (message.role) {\n      return {\n        role: normalizeMessageRole(String(message.role)),\n        content: normalizeContent(message.content),\n      };\n    }\n\n    // 5) Then try constructor name (SystemMessage / HumanMessage / ...)\n    // Only use this if we haven't matched a more specific case\n    const ctor = (message as { constructor?: { name?: string } }).constructor?.name;\n    if (ctor && ctor !== 'Object') {\n      return {\n        role: normalizeMessageRole(normalizeRoleNameFromCtor(ctor)),\n        content: normalizeContent(message.content),\n      };\n    }\n\n    // 6) Fallback: treat as user text\n    return {\n      role: 'user',\n      content: normalizeContent(message.content),\n    };\n  });\n}\n\n/**\n * Extracts request attributes common to both LLM and ChatModel invocations.\n *\n * Source precedence:\n * 1) `invocationParams` (highest)\n * 2) `langSmithMetadata`\n *\n * Numeric values are set even when 0 (e.g. `temperature: 0`), but skipped if `NaN`.\n */\nfunction extractCommonRequestAttributes(\n  serialized: LangChainSerialized,\n  invocationParams?: Record<string, unknown>,\n  langSmithMetadata?: Record<string, unknown>,\n): Record<string, SpanAttributeValue> {\n  const attrs: Record<string, SpanAttributeValue> = {};\n\n  // Get kwargs if available (from constructor type)\n  const kwargs = 'kwargs' in serialized ? serialized.kwargs : undefined;\n\n  const temperature = invocationParams?.temperature ?? langSmithMetadata?.ls_temperature ?? kwargs?.temperature;\n  setNumberIfDefined(attrs, GEN_AI_REQUEST_TEMPERATURE_ATTRIBUTE, temperature);\n\n  const maxTokens = invocationParams?.max_tokens ?? langSmithMetadata?.ls_max_tokens ?? kwargs?.max_tokens;\n  setNumberIfDefined(attrs, GEN_AI_REQUEST_MAX_TOKENS_ATTRIBUTE, maxTokens);\n\n  const topP = invocationParams?.top_p ?? kwargs?.top_p;\n  setNumberIfDefined(attrs, GEN_AI_REQUEST_TOP_P_ATTRIBUTE, topP);\n\n  const frequencyPenalty = invocationParams?.frequency_penalty;\n  setNumberIfDefined(attrs, GEN_AI_REQUEST_FREQUENCY_PENALTY_ATTRIBUTE, frequencyPenalty);\n\n  const presencePenalty = invocationParams?.presence_penalty;\n  setNumberIfDefined(attrs, GEN_AI_REQUEST_PRESENCE_PENALTY_ATTRIBUTE, presencePenalty);\n\n  // LangChain uses `stream`. We only set the attribute if the key actually exists\n  // (some callbacks report `false` even on streamed requests, this stems from LangChain's callback handler).\n  if (invocationParams && 'stream' in invocationParams) {\n    setIfDefined(attrs, GEN_AI_REQUEST_STREAM_ATTRIBUTE, Boolean(invocationParams.stream));\n  }\n\n  return attrs;\n}\n\n/**\n * Small helper to assemble boilerplate attributes shared by both request extractors.\n * Always uses 'chat' as the operation type for all LLM and chat model operations.\n */\nfunction baseRequestAttributes(\n  system: unknown,\n  modelName: unknown,\n  serialized: LangChainSerialized,\n  invocationParams?: Record<string, unknown>,\n  langSmithMetadata?: Record<string, unknown>,\n): Record<string, SpanAttributeValue | undefined> {\n  return {\n    [GEN_AI_SYSTEM_ATTRIBUTE]: stringify(system ?? 'langchain', String),\n    [GEN_AI_OPERATION_NAME_ATTRIBUTE]: 'chat',\n    [GEN_AI_REQUEST_MODEL_ATTRIBUTE]: stringify(modelName, String),\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: LANGCHAIN_ORIGIN,\n    ...extractCommonRequestAttributes(serialized, invocationParams, langSmithMetadata),\n  };\n}\n\n/**\n * Extracts attributes for plain LLM invocations (string prompts).\n *\n * - Operation is tagged as `chat` following OpenTelemetry semantic conventions.\n *   LangChain LLM operations are treated as chat operations.\n * - When `recordInputs` is true, string prompts are wrapped into `{role:\"user\"}`\n *   messages to align with the chat schema used elsewhere.\n */\nexport function extractLLMRequestAttributes(\n  llm: LangChainSerialized,\n  prompts: string[],\n  recordInputs: boolean,\n  enableTruncation: boolean,\n  invocationParams?: Record<string, unknown>,\n  langSmithMetadata?: Record<string, unknown>,\n): Record<string, SpanAttributeValue | undefined> {\n  const system = langSmithMetadata?.ls_provider;\n  const modelName = invocationParams?.model ?? langSmithMetadata?.ls_model_name ?? 'unknown';\n\n  const attrs = baseRequestAttributes(system, modelName, llm, invocationParams, langSmithMetadata);\n\n  if (recordInputs && Array.isArray(prompts) && prompts.length > 0) {\n    setIfDefined(attrs, GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE, prompts.length);\n    const messages = prompts.map(p => ({ role: 'user', content: p }));\n    setIfDefined(\n      attrs,\n      GEN_AI_INPUT_MESSAGES_ATTRIBUTE,\n      enableTruncation ? getTruncatedJsonString(messages) : stringify(messages),\n    );\n  }\n\n  return attrs;\n}\n\n/**\n * Extracts attributes for ChatModel invocations (array-of-arrays of messages).\n *\n * - Operation is tagged as `chat` following OpenTelemetry semantic conventions.\n *   LangChain chat model operations are chat operations.\n * - We flatten LangChain's `LangChainMessage[][]` and normalize shapes into a\n *   consistent `{ role, content }` array when `recordInputs` is true.\n * - Provider system value falls back to `serialized.id?.[2]`.\n */\nexport function extractChatModelRequestAttributes(\n  llm: LangChainSerialized,\n  langChainMessages: LangChainMessage[][],\n  recordInputs: boolean,\n  enableTruncation: boolean,\n  invocationParams?: Record<string, unknown>,\n  langSmithMetadata?: Record<string, unknown>,\n): Record<string, SpanAttributeValue | undefined> {\n  const system = langSmithMetadata?.ls_provider ?? llm.id?.[2];\n  const modelName = invocationParams?.model ?? langSmithMetadata?.ls_model_name ?? 'unknown';\n\n  const attrs = baseRequestAttributes(system, modelName, llm, invocationParams, langSmithMetadata);\n\n  if (recordInputs && Array.isArray(langChainMessages) && langChainMessages.length > 0) {\n    const normalized = normalizeLangChainMessages(langChainMessages.flat());\n\n    const { systemInstructions, filteredMessages } = extractSystemInstructions(normalized);\n\n    if (systemInstructions) {\n      setIfDefined(attrs, GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE, systemInstructions);\n    }\n\n    const filteredLength = Array.isArray(filteredMessages) ? filteredMessages.length : 0;\n    setIfDefined(attrs, GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE, filteredLength);\n\n    setIfDefined(\n      attrs,\n      GEN_AI_INPUT_MESSAGES_ATTRIBUTE,\n      enableTruncation ? getTruncatedJsonString(filteredMessages) : stringify(filteredMessages),\n    );\n  }\n\n  return attrs;\n}\n\n/**\n * Extracts tool calls from generations and records them on the span attributes.\n * Prefers message.tool_calls (LangChain's normalized format). Falls back to\n * scanning message.content for Anthropic-style tool_use items in older versions\n * where tool_calls may not be populated.\n */\nfunction addToolCallsAttributes(generations: LangChainMessage[][], attrs: Record<string, SpanAttributeValue>): void {\n  const toolCalls: unknown[] = [];\n  const flatGenerations = generations.flat();\n\n  for (const gen of flatGenerations) {\n    const msg = gen.message as Record<string, unknown> | undefined;\n    const msgToolCalls = msg?.tool_calls as unknown[] | undefined;\n    if (Array.isArray(msgToolCalls) && msgToolCalls.length > 0) {\n      toolCalls.push(...msgToolCalls);\n    } else {\n      // Fallback for older LangChain versions: scan message.content for Anthropic-style tool_use\n      const content = gen.message?.content;\n      if (Array.isArray(content)) {\n        for (const item of content) {\n          const t = item as Record<string, unknown>;\n          if (t.type === 'tool_use') toolCalls.push(t);\n        }\n      }\n    }\n  }\n\n  if (toolCalls.length > 0) {\n    setIfDefined(attrs, GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE, stringify(toolCalls, String));\n  }\n}\n\nexport function extractMessageTokenUsageAttributes(message: LangChainMessage): Record<string, number> {\n  const usage = message.usage_metadata;\n  if (isObjectLike(usage)) {\n    const details = isObjectLike(usage.input_token_details) ? usage.input_token_details : undefined;\n    return getTokenUsageAttributes(\n      usage.input_tokens,\n      usage.output_tokens,\n      details?.cache_creation,\n      details?.cache_read,\n      usage.total_tokens,\n    );\n  }\n\n  const metadata = message.response_metadata;\n  const tokenUsage = isObjectLike(metadata) && isObjectLike(metadata.tokenUsage) ? metadata.tokenUsage : undefined;\n  return getTokenUsageAttributes(\n    tokenUsage?.promptTokens,\n    tokenUsage?.completionTokens,\n    undefined,\n    undefined,\n    tokenUsage?.totalTokens,\n  );\n}\n\nfunction addTokenUsageAttributes(llmResult: LangChainLLMResult, attrs: Record<string, SpanAttributeValue>): void {\n  const normalizedUsage: Record<string, number> = {};\n  const legacyMessageUsage: Record<string, number> = {};\n  for (const generations of llmResult.generations ?? []) {\n    // Candidate messages share the usage totals for their prompt.\n    const message = generations[0]?.message;\n    if (message) {\n      const usage = isObjectLike(message.usage_metadata) ? normalizedUsage : legacyMessageUsage;\n      for (const [key, value] of Object.entries(extractMessageTokenUsageAttributes(message))) {\n        usage[key] = (usage[key] ?? 0) + value;\n      }\n    }\n  }\n  Object.assign(attrs, Object.keys(normalizedUsage).length > 0 ? normalizedUsage : legacyMessageUsage);\n\n  const llmOutput = llmResult.llmOutput;\n  if (!llmOutput) return;\n\n  const tokenUsage = llmOutput.tokenUsage as\n    | { promptTokens?: number; completionTokens?: number; totalTokens?: number }\n    | undefined;\n  const anthropicUsage = llmOutput.usage as\n    | {\n        input_tokens?: number;\n        output_tokens?: number;\n        cache_creation_input_tokens?: number;\n        cache_read_input_tokens?: number;\n      }\n    | undefined;\n\n  // llmOutput.tokenUsage can contain only the final stream chunk's counters.\n  if (anthropicUsage && Object.keys(normalizedUsage).length === 0 && Object.keys(legacyMessageUsage).length === 0) {\n    const { input_tokens, output_tokens, cache_creation_input_tokens, cache_read_input_tokens } = anthropicUsage;\n    const hasInput =\n      input_tokens !== undefined || cache_creation_input_tokens !== undefined || cache_read_input_tokens !== undefined;\n    Object.assign(\n      attrs,\n      getTokenUsageAttributes(\n        hasInput\n          ? (input_tokens ?? 0) + (cache_creation_input_tokens ?? 0) + (cache_read_input_tokens ?? 0)\n          : undefined,\n        output_tokens,\n        cache_creation_input_tokens,\n        cache_read_input_tokens,\n      ),\n    );\n  } else if (tokenUsage && Object.keys(normalizedUsage).length === 0 && Object.keys(legacyMessageUsage).length === 0) {\n    Object.assign(\n      attrs,\n      getTokenUsageAttributes(\n        tokenUsage.promptTokens,\n        tokenUsage.completionTokens,\n        undefined,\n        undefined,\n        tokenUsage.totalTokens,\n      ),\n    );\n  }\n  if (anthropicUsage) {\n    if (\n      typeof anthropicUsage.cache_creation_input_tokens === 'number' &&\n      !(GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS in attrs)\n    ) {\n      attrs[GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS] = anthropicUsage.cache_creation_input_tokens;\n    }\n    if (\n      typeof anthropicUsage.cache_read_input_tokens === 'number' &&\n      !(GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS in attrs)\n    ) {\n      attrs[GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS] = anthropicUsage.cache_read_input_tokens;\n    }\n  }\n}\n\n/**\n * Extracts response-related attributes based on a `LangChainLLMResult`.\n *\n * - Records finish reasons when present on generations (e.g., OpenAI)\n * - When `recordOutputs` is true, captures textual response content and any\n *   tool calls.\n * - Also propagates model name (`model_name` or `model`), response `id`, and\n *   `stop_reason` (for providers that use it).\n */\nexport function extractLlmResponseAttributes(\n  llmResult: LangChainLLMResult,\n  recordOutputs: boolean,\n): Record<string, SpanAttributeValue> | undefined {\n  if (!llmResult) return;\n\n  const attrs: Record<string, SpanAttributeValue> = {};\n\n  if (Array.isArray(llmResult.generations)) {\n    const finishReasons = llmResult.generations\n      .flat()\n      .map(g => {\n        // v1 uses generationInfo.finish_reason\n        if (g.generationInfo?.finish_reason) {\n          return g.generationInfo.finish_reason;\n        }\n        // v0.3+ uses generation_info.finish_reason\n        if (g.generation_info?.finish_reason) {\n          return g.generation_info.finish_reason;\n        }\n        return null;\n      })\n      .filter((r): r is string => typeof r === 'string');\n\n    if (finishReasons.length > 0) {\n      setIfDefined(attrs, GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE, stringify(finishReasons, String));\n    }\n\n    // Tool calls metadata (names, IDs) are not PII, so capture them regardless of recordOutputs\n    addToolCallsAttributes(llmResult.generations as LangChainMessage[][], attrs);\n\n    if (recordOutputs) {\n      const texts = llmResult.generations\n        .flat()\n        .map(gen => gen.text ?? gen.message?.content)\n        .filter(t => typeof t === 'string');\n\n      if (texts.length > 0) {\n        setIfDefined(attrs, GEN_AI_RESPONSE_TEXT_ATTRIBUTE, stringify(texts, String));\n      }\n    }\n  }\n\n  addTokenUsageAttributes(llmResult, attrs);\n\n  const llmOutput = llmResult.llmOutput;\n\n  // Extract from v1 generations structure if available\n  const firstGeneration = llmResult.generations?.[0]?.[0];\n  const v1Message = firstGeneration?.message;\n\n  // Provider model identifier: `model_name` (OpenAI-style) or `model` (others)\n  // v1 stores this in message.response_metadata.model_name\n  const modelName = llmOutput?.model_name ?? llmOutput?.model ?? v1Message?.response_metadata?.model_name;\n  if (modelName) setIfDefined(attrs, GEN_AI_RESPONSE_MODEL_ATTRIBUTE, modelName);\n\n  // Response ID: v1 stores this in message.id\n  const responseId = llmOutput?.id ?? v1Message?.id;\n  if (responseId) {\n    setIfDefined(attrs, GEN_AI_RESPONSE_ID_ATTRIBUTE, responseId);\n  }\n\n  // Stop reason: v1 stores this in message.response_metadata.finish_reason\n  const stopReason = llmOutput?.stop_reason ?? v1Message?.response_metadata?.finish_reason;\n  if (stopReason) {\n    setIfDefined(attrs, GEN_AI_RESPONSE_STOP_REASON_ATTRIBUTE, stringify(stopReason, String));\n  }\n\n  return attrs;\n}\n\nexport function getAgentNameFromMetadata(metadata?: Record<string, unknown>): Record<string, SpanAttributeValue> {\n  const attrs: Record<string, SpanAttributeValue> = {};\n  // lc_agent_name is injected by instrumentCompiledGraphInvoke (langgraph integration)\n  const agentName = metadata?.lc_agent_name;\n  if (typeof agentName === 'string') {\n    attrs[GEN_AI_AGENT_NAME_ATTRIBUTE] = agentName;\n  }\n  return attrs;\n}\n\nexport function extractToolDefinitions(extraParams?: Record<string, unknown>): string | undefined {\n  const tools =\n    (extraParams?.invocation_params as Record<string, unknown>)?.tools ??\n    (extraParams?.options as Record<string, unknown>)?.tools;\n  if (!Array.isArray(tools) || tools.length === 0) return undefined;\n  const toolDefs = tools.map((tool: Record<string, unknown>) => {\n    const fn = tool.function as Record<string, unknown> | undefined;\n    return {\n      type: 'function',\n      name: tool.name ?? fn?.name ?? '',\n      description: tool.description ?? fn?.description,\n    };\n  });\n  return JSON.stringify(toolDefs);\n}\n\n/** Duck-types a LangChain `CallbackManager` (avoids coupling to a specific `@langchain/core` resolution). */\nfunction isCallbackManager(value: unknown): value is {\n  addHandler: (handler: unknown, inherit?: boolean) => void;\n  copy: () => unknown;\n  handlers?: unknown[];\n} {\n  if (!value || typeof value !== 'object') {\n    return false;\n  }\n  const candidate = value as { addHandler?: unknown; copy?: unknown };\n  return typeof candidate.addHandler === 'function' && typeof candidate.copy === 'function';\n}\n\nfunction isSentryHandler(handler: unknown): boolean {\n  return typeof handler === 'object' && (handler as Record<string, unknown>)?.name === 'SentryCallbackHandler';\n}\n\nfunction containsSentryHandler(handlers: unknown[]): boolean {\n  return handlers.some(isSentryHandler);\n}\n\n/**\n * Merge `sentryHandler` into a given set of LangChain callbacks or callback manager.\n * @internal Exported for cross-package instrumentation.\n */\nexport function _INTERNAL_mergeLangChainCallbackHandler(existing: unknown, sentryHandler: unknown): unknown {\n  if (!existing) {\n    return [sentryHandler];\n  }\n\n  if (isCallbackManager(existing)) {\n    if (containsSentryHandler(existing.handlers ?? [])) {\n      return existing;\n    }\n\n    const copied = existing.copy() as { addHandler: (handler: unknown, inherit?: boolean) => void };\n    copied.addHandler(sentryHandler, true);\n    return copied;\n  }\n\n  const handlers = Array.isArray(existing) ? existing : [existing];\n  if (containsSentryHandler(handlers)) {\n    return existing;\n  }\n\n  return [...handlers, sentryHandler];\n}\n", "/* eslint-disable max-lines */\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../../semanticAttributes';\nimport { SPAN_STATUS_ERROR } from '../../tracing';\nimport { startSpanManual } from '../../tracing/trace';\nimport type { Span, SpanAttributeValue } from '../../types/span';\nimport {\n  GEN_AI_OPERATION_NAME_ATTRIBUTE,\n  GEN_AI_REQUEST_AVAILABLE_TOOLS_ATTRIBUTE,\n  GEN_AI_REQUEST_MODEL_ATTRIBUTE,\n  GEN_AI_TOOL_INPUT_ATTRIBUTE,\n  GEN_AI_TOOL_NAME_ATTRIBUTE,\n  GEN_AI_TOOL_OUTPUT_ATTRIBUTE,\n} from '../ai/gen-ai-attributes';\nimport { resolveAIRecordingOptions, shouldEnableTruncation } from '../ai/utils';\nimport { LANGCHAIN_ORIGIN } from './constants';\nimport type {\n  LangChainCallbackHandler,\n  LangChainLLMResult,\n  LangChainMessage,\n  LangChainOptions,\n  LangChainSerialized,\n} from './types';\nimport {\n  extractChatModelRequestAttributes,\n  extractLLMRequestAttributes,\n  extractLlmResponseAttributes,\n  extractToolDefinitions,\n  getAgentNameFromMetadata,\n  getInvocationParams,\n} from './utils';\n\n/**\n * Creates a Sentry callback handler for LangChain\n * Returns a plain object that LangChain will call via duck-typing\n *\n * This is a stateful handler that tracks spans across multiple LangChain executions.\n */\nexport function createLangChainCallbackHandler(options: LangChainOptions = {}): LangChainCallbackHandler {\n  const { recordInputs, recordOutputs } = resolveAIRecordingOptions(options);\n  const enableTruncation = shouldEnableTruncation(options.enableTruncation);\n\n  // Internal state - single instance tracks all spans\n  const spanMap = new Map<string, Span>();\n\n  /**\n   * Exit a span and clean up\n   */\n  const exitSpan = (runId: string): void => {\n    const span = spanMap.get(runId);\n    if (span?.isRecording()) {\n      span.end();\n      spanMap.delete(runId);\n    }\n  };\n\n  /**\n   * Handler for LLM Start\n   * This handler will be called by LangChain's callback handler when an LLM event is detected.\n   */\n  const handler: LangChainCallbackHandler = {\n    // Required LangChain BaseCallbackHandler properties\n    lc_serializable: false,\n    lc_namespace: ['langchain_core', 'callbacks', 'sentry'],\n    lc_secrets: undefined,\n    lc_attributes: undefined,\n    lc_aliases: undefined,\n    lc_serializable_keys: undefined,\n    lc_id: ['langchain_core', 'callbacks', 'sentry'],\n    lc_kwargs: {},\n    name: 'SentryCallbackHandler',\n\n    // BaseCallbackHandlerInput boolean flags\n    ignoreLLM: false,\n    ignoreChain: false,\n    ignoreAgent: false,\n    ignoreRetriever: false,\n    ignoreCustomEvent: false,\n    raiseError: false,\n    awaitHandlers: true,\n\n    handleLLMStart(\n      llm: unknown,\n      prompts: string[],\n      runId: string,\n      _parentRunId?: string,\n      _extraParams?: Record<string, unknown>,\n      tags?: string[],\n      metadata?: Record<string, unknown>,\n      _runName?: string,\n    ) {\n      const invocationParams = getInvocationParams(tags);\n      const attributes = extractLLMRequestAttributes(\n        llm as LangChainSerialized,\n        prompts,\n        recordInputs,\n        enableTruncation,\n        invocationParams,\n        metadata,\n      );\n      const modelName = attributes[GEN_AI_REQUEST_MODEL_ATTRIBUTE];\n      const operationName = attributes[GEN_AI_OPERATION_NAME_ATTRIBUTE];\n\n      startSpanManual(\n        {\n          name: `${operationName} ${modelName}`,\n          op: 'gen_ai.chat',\n          attributes: {\n            ...getAgentNameFromMetadata(metadata),\n            ...attributes,\n            [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'gen_ai.chat',\n          },\n        },\n        span => {\n          spanMap.set(runId, span);\n          return span;\n        },\n      );\n    },\n\n    // Chat Model Start Handler\n    handleChatModelStart(\n      llm: unknown,\n      messages: unknown,\n      runId: string,\n      _parentRunId?: string,\n      extraParams?: Record<string, unknown>,\n      tags?: string[],\n      metadata?: Record<string, unknown>,\n      _runName?: string,\n    ) {\n      const invocationParams = getInvocationParams(tags);\n      const attributes = extractChatModelRequestAttributes(\n        llm as LangChainSerialized,\n        messages as LangChainMessage[][],\n        recordInputs,\n        enableTruncation,\n        invocationParams,\n        metadata,\n      );\n\n      const toolDefsJson = extractToolDefinitions(extraParams);\n      if (toolDefsJson) {\n        attributes[GEN_AI_REQUEST_AVAILABLE_TOOLS_ATTRIBUTE] = toolDefsJson;\n      }\n\n      const modelName = attributes[GEN_AI_REQUEST_MODEL_ATTRIBUTE];\n      const operationName = attributes[GEN_AI_OPERATION_NAME_ATTRIBUTE];\n\n      startSpanManual(\n        {\n          name: `${operationName} ${modelName}`,\n          op: 'gen_ai.chat',\n          attributes: {\n            ...getAgentNameFromMetadata(metadata),\n            ...attributes,\n            [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'gen_ai.chat',\n          },\n        },\n        span => {\n          spanMap.set(runId, span);\n          return span;\n        },\n      );\n    },\n\n    // LLM End Handler - note: handleLLMEnd with capital LLM (used by both LLMs and chat models!)\n    handleLLMEnd(\n      output: unknown,\n      runId: string,\n      _parentRunId?: string,\n      _tags?: string[],\n      _extraParams?: Record<string, unknown>,\n    ) {\n      const span = spanMap.get(runId);\n      if (span?.isRecording()) {\n        const attributes = extractLlmResponseAttributes(output as LangChainLLMResult, recordOutputs);\n        if (attributes) {\n          span.setAttributes(attributes);\n        }\n        exitSpan(runId);\n      }\n    },\n\n    // LLM Error Handler - note: handleLLMError with capital LLM\n    handleLLMError(_error: Error, runId: string) {\n      // The error is surfaced to the caller (invoke() rejects), so we only mark the span failed and\n      // do not record it.\n      const span = spanMap.get(runId);\n      if (span?.isRecording()) {\n        span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n        exitSpan(runId);\n      }\n    },\n\n    // Chain Start Handler\n    handleChainStart(\n      chain: { name?: string },\n      inputs: Record<string, unknown>,\n      runId: string,\n      _parentRunId?: string,\n      _tags?: string[],\n      metadata?: Record<string, unknown>,\n      _runType?: string,\n      runName?: string,\n    ) {\n      // Skip chain spans when inside an agent context (createReactAgent).\n      // The agent already creates an invoke_agent span; internal chain steps\n      // (ChannelWrite, Branch, prompt, etc.) are noise.\n      if (metadata?.__sentry_langgraph__) {\n        return;\n      }\n\n      const chainName = runName || chain.name || 'unknown_chain';\n      const attributes: Record<string, SpanAttributeValue> = {\n        [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ai.langchain',\n        'langchain.chain.name': chainName,\n      };\n\n      if (recordInputs) {\n        attributes['langchain.chain.inputs'] = JSON.stringify(inputs);\n      }\n\n      startSpanManual(\n        {\n          name: `chain ${chainName}`,\n          op: 'gen_ai.invoke_agent',\n          attributes: {\n            ...attributes,\n            [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'gen_ai.invoke_agent',\n          },\n        },\n        span => {\n          spanMap.set(runId, span);\n          return span;\n        },\n      );\n    },\n\n    // Chain End Handler\n    handleChainEnd(outputs: unknown, runId: string) {\n      const span = spanMap.get(runId);\n      if (span?.isRecording()) {\n        // Add outputs if recordOutputs is enabled\n        if (recordOutputs) {\n          span.setAttributes({\n            'langchain.chain.outputs': JSON.stringify(outputs),\n          });\n        }\n        exitSpan(runId);\n      }\n    },\n\n    // Chain Error Handler\n    handleChainError(_error: Error, runId: string) {\n      // The error is surfaced to the caller (invoke() rejects), so we only mark the span failed and\n      // do not record it.\n      const span = spanMap.get(runId);\n      if (span?.isRecording()) {\n        span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n        exitSpan(runId);\n      }\n    },\n\n    // Tool Start Handler\n    handleToolStart(\n      tool: { name?: string },\n      input: string,\n      runId: string,\n      _parentRunId?: string,\n      _tags?: string[],\n      metadata?: Record<string, unknown>,\n      runName?: string,\n    ) {\n      // Skip tool spans when inside an agent context (createReactAgent).\n      // Tool spans are created by wrapToolsWithSpans with richer attributes.\n      if (metadata?.__sentry_langgraph__) {\n        return;\n      }\n\n      // runName is set to tool.name by LangChain's StructuredTool.call()\n      const toolName = runName || tool.name || 'unknown_tool';\n      const attributes: Record<string, SpanAttributeValue> = {\n        ...getAgentNameFromMetadata(metadata),\n        [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: LANGCHAIN_ORIGIN,\n        [GEN_AI_OPERATION_NAME_ATTRIBUTE]: 'execute_tool',\n        [GEN_AI_TOOL_NAME_ATTRIBUTE]: toolName,\n      };\n\n      if (recordInputs) {\n        attributes[GEN_AI_TOOL_INPUT_ATTRIBUTE] = input;\n      }\n\n      startSpanManual(\n        {\n          name: `execute_tool ${toolName}`,\n          op: 'gen_ai.execute_tool',\n          attributes: {\n            ...attributes,\n            [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'gen_ai.execute_tool',\n          },\n        },\n        span => {\n          spanMap.set(runId, span);\n          return span;\n        },\n      );\n    },\n\n    // Tool End Handler\n    handleToolEnd(output: unknown, runId: string) {\n      const span = spanMap.get(runId);\n      if (span?.isRecording()) {\n        if (recordOutputs) {\n          // LangChain tools may return ToolMessage objects — extract the content\n          const outputObj = output as Record<string, unknown> | undefined;\n          const content =\n            outputObj && typeof outputObj === 'object' && 'content' in outputObj ? outputObj.content : output;\n          span.setAttributes({\n            [GEN_AI_TOOL_OUTPUT_ATTRIBUTE]: typeof content === 'string' ? content : JSON.stringify(content),\n          });\n        }\n        exitSpan(runId);\n      }\n    },\n\n    // Tool Error Handler\n    handleToolError(_error: Error, runId: string) {\n      // The error is surfaced to the caller (invoke() rejects), so we only mark the span failed and\n      // do not record it.\n      const span = spanMap.get(runId);\n      if (span?.isRecording()) {\n        span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n        exitSpan(runId);\n      }\n    },\n\n    // LangChain BaseCallbackHandler required methods\n    copy() {\n      return handler;\n    },\n\n    toJSON() {\n      return {\n        lc: 1,\n        type: 'not_implemented',\n        id: handler.lc_id,\n      };\n    },\n\n    toJSONNotImplemented() {\n      return {\n        lc: 1,\n        type: 'not_implemented',\n        id: handler.lc_id,\n      };\n    },\n  };\n\n  return handler;\n}\n\nexport { instrumentLangChainEmbeddings } from './embeddings';\n", "import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../../semanticAttributes';\nimport { startSpan } from '../../tracing/trace';\nimport type { SpanAttributeValue } from '../../types/span';\nimport {\n  GEN_AI_EMBEDDINGS_OPERATION_ATTRIBUTE,\n  GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE,\n  GEN_AI_OPERATION_NAME_ATTRIBUTE,\n  GEN_AI_REQUEST_DIMENSIONS_ATTRIBUTE,\n  GEN_AI_REQUEST_ENCODING_FORMAT_ATTRIBUTE,\n  GEN_AI_REQUEST_MODEL_ATTRIBUTE,\n  GEN_AI_SYSTEM_ATTRIBUTE,\n} from '../ai/gen-ai-attributes';\nimport { resolveAIRecordingOptions } from '../ai/utils';\nimport { LANGCHAIN_ORIGIN } from './constants';\nimport type { LangChainOptions } from './types';\n\n/**\n * Infers the AI provider system name from the embedding class instance.\n */\nfunction inferSystemFromInstance(instance: Record<string, unknown>): string {\n  const name = (instance.constructor as { name?: string })?.name ?? '';\n  if (name.includes('OpenAI')) return 'openai';\n  if (name.includes('Google')) return 'google_genai';\n  if (name.includes('Mistral')) return 'mistralai';\n  if (name.includes('Vertex')) return 'google_vertexai';\n  if (name.includes('Bedrock')) return 'aws_bedrock';\n  if (name.includes('Ollama')) return 'ollama';\n  if (name.includes('Cloudflare')) return 'cloudflare';\n  if (name.includes('Cohere')) return 'cohere';\n  return 'langchain';\n}\n\n/**\n * Extracts span attributes from a LangChain embedding class instance.\n */\nfunction extractEmbeddingAttributes(instance: unknown): Record<string, unknown> {\n  const embeddingsInstance = (instance ?? {}) as Record<string, unknown>;\n\n  const attributes: Record<string, unknown> = {\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: LANGCHAIN_ORIGIN,\n    [SEMANTIC_ATTRIBUTE_SENTRY_OP]: GEN_AI_EMBEDDINGS_OPERATION_ATTRIBUTE,\n    [GEN_AI_OPERATION_NAME_ATTRIBUTE]: 'embeddings',\n    [GEN_AI_REQUEST_MODEL_ATTRIBUTE]: embeddingsInstance.model ?? 'unknown',\n  };\n\n  attributes[GEN_AI_SYSTEM_ATTRIBUTE] = inferSystemFromInstance(embeddingsInstance);\n  if ('dimensions' in embeddingsInstance) {\n    attributes[GEN_AI_REQUEST_DIMENSIONS_ATTRIBUTE] = embeddingsInstance.dimensions;\n  }\n  if ('encodingFormat' in embeddingsInstance) {\n    attributes[GEN_AI_REQUEST_ENCODING_FORMAT_ATTRIBUTE] = embeddingsInstance.encodingFormat;\n  }\n\n  return attributes;\n}\n\n/**\n * Builds the span options for a LangChain embedding call from the embeddings instance and input.\n *\n * @internal Exported so the diagnostics-channel (orchestrion) instrumentation can build the same\n * span as the prototype-patching path below.\n */\nexport function _INTERNAL_getLangChainEmbeddingsSpanOptions(\n  instance: unknown,\n  input: unknown,\n  options: LangChainOptions = {},\n): { name: string; op: string; attributes: Record<string, SpanAttributeValue> } {\n  const { recordInputs } = resolveAIRecordingOptions(options);\n  const attributes = extractEmbeddingAttributes(instance);\n  const modelName = attributes[GEN_AI_REQUEST_MODEL_ATTRIBUTE] || 'unknown';\n\n  if (recordInputs && input != null) {\n    attributes[GEN_AI_EMBEDDINGS_INPUT_ATTRIBUTE] = typeof input === 'string' ? input : JSON.stringify(input);\n  }\n\n  return {\n    name: `embeddings ${modelName}`,\n    op: GEN_AI_EMBEDDINGS_OPERATION_ATTRIBUTE,\n    attributes: attributes as Record<string, SpanAttributeValue>,\n  };\n}\n\n/**\n * Wraps a LangChain embedding method (embedQuery or embedDocuments) to create Sentry spans.\n *\n * Used internally by the Node.js auto-instrumentation to patch embedding class prototypes.\n */\nexport function instrumentEmbeddingMethod(\n  originalMethod: (...args: unknown[]) => Promise<unknown>,\n  options: LangChainOptions = {},\n): (...args: unknown[]) => Promise<unknown> {\n  return new Proxy(originalMethod, {\n    apply(target, thisArg, args: unknown[]): Promise<unknown> {\n      return startSpan(_INTERNAL_getLangChainEmbeddingsSpanOptions(thisArg, args[0], options), () => {\n        // On rejection `startSpan` marks the span failed and rethrows to the caller, so we don't\n        // record the error ourselves.\n        return Reflect.apply(target, thisArg, args);\n      });\n    },\n  }) as (...args: unknown[]) => Promise<unknown>;\n}\n\n/**\n * Wraps a LangChain embeddings instance to create Sentry spans for `embedQuery` and `embedDocuments` calls.\n *\n * Use this in non-Node runtimes (Cloudflare, browser, etc.) where auto-instrumentation is not available.\n *\n * @example\n * ```javascript\n * import * as Sentry from '@sentry/cloudflare';\n * import { OpenAIEmbeddings } from '@langchain/openai';\n *\n * const embeddings = Sentry.instrumentLangChainEmbeddings(\n *   new OpenAIEmbeddings({ model: 'text-embedding-3-small' })\n * );\n *\n * await embeddings.embedQuery('Hello world');\n * await embeddings.embedDocuments(['doc1', 'doc2']);\n * ```\n */\nexport function instrumentLangChainEmbeddings<T extends object>(instance: T, options?: LangChainOptions): T {\n  const embeddingsInstance = instance as Record<string, unknown>;\n\n  if (typeof embeddingsInstance.embedQuery === 'function') {\n    embeddingsInstance.embedQuery = instrumentEmbeddingMethod(\n      embeddingsInstance.embedQuery as (...args: unknown[]) => Promise<unknown>,\n      options,\n    );\n  }\n\n  if (typeof embeddingsInstance.embedDocuments === 'function') {\n    embeddingsInstance.embedDocuments = instrumentEmbeddingMethod(\n      embeddingsInstance.embedDocuments as (...args: unknown[]) => Promise<unknown>,\n      options,\n    );\n  }\n\n  return instance;\n}\n", "export const LANGGRAPH_INTEGRATION_NAME = 'LangGraph' as const;\nexport const LANGGRAPH_ORIGIN = 'auto.ai.langgraph';\n", "import {\n  GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS,\n  GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS,\n} from '@sentry/conventions/attributes';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../../semanticAttributes';\nimport { SPAN_STATUS_ERROR } from '../../tracing';\nimport type { Span, SpanAttributes } from '../../types/span';\nimport {\n  GEN_AI_AGENT_NAME_ATTRIBUTE,\n  GEN_AI_EXECUTE_TOOL_OPERATION_ATTRIBUTE,\n  GEN_AI_OPERATION_NAME_ATTRIBUTE,\n  GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE,\n  GEN_AI_RESPONSE_MODEL_ATTRIBUTE,\n  GEN_AI_RESPONSE_TEXT_ATTRIBUTE,\n  GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE,\n  GEN_AI_TOOL_CALL_ID_ATTRIBUTE,\n  GEN_AI_TOOL_INPUT_ATTRIBUTE,\n  GEN_AI_TOOL_OUTPUT_ATTRIBUTE,\n  GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE,\n  GEN_AI_TOOL_NAME_ATTRIBUTE,\n  GEN_AI_TOOL_TYPE_ATTRIBUTE,\n  GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE,\n  GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE,\n  GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE,\n} from '../ai/gen-ai-attributes';\nimport type { BaseChatModel, LangChainMessage } from '../langchain/types';\nimport { extractMessageTokenUsageAttributes, normalizeLangChainMessages } from '../langchain/utils';\nimport { startSpan } from '../trace';\nimport { LANGGRAPH_ORIGIN } from './constants';\nimport type { CompiledGraph, LangGraphOptions, LangGraphTool } from './types';\n\n/**\n * Extract LLM model object from createReactAgent params\n */\nexport function extractLLMFromParams(args: unknown[]): BaseChatModel | null {\n  const arg = args[0];\n  if (typeof arg !== 'object' || !arg || !('llm' in arg) || !arg.llm || typeof arg.llm !== 'object') {\n    return null;\n  }\n  const llm = arg.llm as BaseChatModel;\n  if (typeof llm.modelName !== 'string' && typeof llm.model !== 'string') {\n    return null;\n  }\n  return llm;\n}\n\n/**\n * Extract agent name from createReactAgent params\n */\nexport function extractAgentNameFromParams(args: unknown[]): string | null {\n  const arg = args[0];\n  if (typeof arg === 'object' && !!arg && 'name' in arg && typeof arg.name === 'string') {\n    return arg.name;\n  }\n  return null;\n}\n\n/**\n * Wraps an array of LangChain tools so each invocation creates a gen_ai.execute_tool span.\n *\n * Wraps each tool's invoke() method in place. A marker prevents double-wrapping.\n */\nexport function wrapToolsWithSpans(tools: unknown[], options: LangGraphOptions, agentName?: string): unknown[] {\n  const SENTRY_WRAPPED = '__sentry_tool_wrapped__';\n\n  for (const tool of tools) {\n    if (!tool || typeof tool !== 'object') {\n      continue;\n    }\n\n    const t = tool as Record<string, unknown>;\n    const originalInvoke = t.invoke;\n    if (typeof originalInvoke !== 'function' || Object.prototype.hasOwnProperty.call(t, SENTRY_WRAPPED)) {\n      continue;\n    }\n\n    const toolName = typeof t.name === 'string' ? t.name : 'unknown_tool';\n    const toolDescription = typeof t.description === 'string' ? t.description : undefined;\n\n    const wrappedInvoke = new Proxy(originalInvoke as (...args: unknown[]) => unknown, {\n      apply(target, thisArg, args: unknown[]): unknown {\n        const spanAttributes: SpanAttributes = {\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: LANGGRAPH_ORIGIN,\n          [SEMANTIC_ATTRIBUTE_SENTRY_OP]: GEN_AI_EXECUTE_TOOL_OPERATION_ATTRIBUTE,\n          [GEN_AI_OPERATION_NAME_ATTRIBUTE]: 'execute_tool',\n          [GEN_AI_TOOL_NAME_ATTRIBUTE]: toolName,\n          [GEN_AI_TOOL_TYPE_ATTRIBUTE]: 'function',\n        };\n\n        // Read agent name from LangChain's propagated config metadata at call time,\n        // so shared tools get the correct agent name for each invocation\n        const callConfig = args[1] as Record<string, unknown> | undefined;\n        const callAgentName = (callConfig?.metadata as Record<string, unknown>)?.lc_agent_name ?? agentName;\n        if (typeof callAgentName === 'string') {\n          spanAttributes[GEN_AI_AGENT_NAME_ATTRIBUTE] = callAgentName;\n        }\n\n        if (toolDescription) {\n          spanAttributes[GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE] = toolDescription;\n        }\n\n        // LangGraph ToolNode passes { name, args, id, type: \"tool_call\" }\n        const input = args[0] as Record<string, unknown> | undefined;\n        if (typeof input === 'object' && !!input) {\n          if ('id' in input && typeof input.id === 'string') {\n            spanAttributes[GEN_AI_TOOL_CALL_ID_ATTRIBUTE] = input.id;\n          }\n\n          if (options.recordInputs) {\n            const toolArgs = 'args' in input && typeof input.args === 'object' ? input.args : input;\n            try {\n              spanAttributes[GEN_AI_TOOL_INPUT_ATTRIBUTE] = JSON.stringify(toolArgs);\n            } catch {\n              // skip if not serializable\n            }\n          }\n        }\n\n        return startSpan(\n          {\n            op: GEN_AI_EXECUTE_TOOL_OPERATION_ATTRIBUTE,\n            name: `execute_tool ${toolName}`,\n            attributes: spanAttributes,\n          },\n          async span => {\n            try {\n              const result = await Reflect.apply(target, thisArg, args);\n\n              if (options.recordOutputs) {\n                try {\n                  // ToolMessage objects wrap the result in .content\n                  const resultObj = result as Record<string, unknown> | undefined;\n                  const content =\n                    resultObj && typeof resultObj === 'object' && 'content' in resultObj ? resultObj.content : result;\n                  span.setAttribute(\n                    GEN_AI_TOOL_OUTPUT_ATTRIBUTE,\n                    typeof content === 'string' ? content : JSON.stringify(content),\n                  );\n                } catch {\n                  // skip if not serializable\n                }\n              }\n\n              return result;\n            } catch (error) {\n              // The error is rethrown to the caller (invoke() rejects), so we only mark the span\n              // failed and do not record it.\n              span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n              throw error;\n            }\n          },\n        );\n      },\n    });\n\n    t.invoke = wrappedInvoke;\n    Object.defineProperty(t, SENTRY_WRAPPED, { value: true, enumerable: false });\n  }\n\n  return tools;\n}\n\n/**\n * Extract tool calls from messages\n */\nexport function extractToolCalls(messages: Array<Record<string, unknown>> | null): unknown[] | null {\n  if (!messages || messages.length === 0) {\n    return null;\n  }\n\n  const toolCalls: unknown[] = [];\n\n  for (const message of messages) {\n    if (message && typeof message === 'object') {\n      const msgToolCalls = message.tool_calls;\n      if (msgToolCalls && Array.isArray(msgToolCalls)) {\n        toolCalls.push(...msgToolCalls);\n      }\n    }\n  }\n\n  return toolCalls.length > 0 ? toolCalls : null;\n}\n\n/**\n * Extract token usage from a message's usage_metadata or response_metadata\n * Returns token counts without setting span attributes\n */\nexport function extractTokenUsageFromMessage(message: LangChainMessage): {\n  inputTokens: number;\n  outputTokens: number;\n  totalTokens: number;\n  cacheCreationInputTokens?: number;\n  cacheReadInputTokens?: number;\n} {\n  const attributes = extractMessageTokenUsageAttributes(message);\n  return {\n    inputTokens: attributes[GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] ?? 0,\n    outputTokens: attributes[GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE] ?? 0,\n    totalTokens: attributes[GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE] ?? 0,\n    cacheCreationInputTokens: attributes[GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS],\n    cacheReadInputTokens: attributes[GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS],\n  };\n}\n\n/**\n * Extract model and finish reason from a message's response_metadata\n */\nexport function extractModelMetadata(span: Span, message: LangChainMessage): void {\n  const msg = message as Record<string, unknown>;\n\n  if (msg.response_metadata && typeof msg.response_metadata === 'object') {\n    const metadata = msg.response_metadata as Record<string, unknown>;\n\n    if (metadata.model_name && typeof metadata.model_name === 'string') {\n      span.setAttribute(GEN_AI_RESPONSE_MODEL_ATTRIBUTE, metadata.model_name);\n    }\n\n    if (metadata.finish_reason && typeof metadata.finish_reason === 'string') {\n      span.setAttribute(GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE, [metadata.finish_reason]);\n    }\n  }\n}\n\n/**\n * Extract tools from compiled graph structure\n *\n * Tools are stored in: compiledGraph.builder.nodes.tools.runnable.tools\n */\nexport function extractToolsFromCompiledGraph(compiledGraph: CompiledGraph): unknown[] | null {\n  if (!compiledGraph.builder?.nodes?.tools?.runnable?.tools) {\n    return null;\n  }\n\n  const tools = compiledGraph.builder?.nodes?.tools?.runnable?.tools;\n\n  if (!tools || !Array.isArray(tools) || tools.length === 0) {\n    return null;\n  }\n\n  // Extract name, description, and schema from each tool's lc_kwargs\n  return tools.map((tool: LangGraphTool) => ({\n    name: tool.lc_kwargs?.name,\n    description: tool.lc_kwargs?.description,\n    schema: tool.lc_kwargs?.schema,\n  }));\n}\n\n/**\n * Set response attributes on the span\n */\nexport function setResponseAttributes(span: Span, inputMessages: LangChainMessage[] | null, result: unknown): void {\n  // Extract messages from result\n  const resultObj = result as { messages?: LangChainMessage[] } | undefined;\n  const outputMessages = resultObj?.messages;\n\n  if (!outputMessages || !Array.isArray(outputMessages)) {\n    return;\n  }\n\n  // Get new messages (delta between input and output)\n  const inputCount = inputMessages?.length ?? 0;\n  const newMessages = outputMessages.length > inputCount ? outputMessages.slice(inputCount) : [];\n\n  if (newMessages.length === 0) {\n    return;\n  }\n\n  // Extract and set tool calls from new messages BEFORE normalization\n  // (normalization strips tool_calls, so we need to extract them first)\n  const toolCalls = extractToolCalls(newMessages as Array<Record<string, unknown>>);\n  if (toolCalls) {\n    span.setAttribute(GEN_AI_RESPONSE_TOOL_CALLS_ATTRIBUTE, JSON.stringify(toolCalls));\n  }\n\n  // Normalize the new messages\n  const normalizedNewMessages = normalizeLangChainMessages(newMessages);\n  span.setAttribute(GEN_AI_RESPONSE_TEXT_ATTRIBUTE, JSON.stringify(normalizedNewMessages));\n\n  // Accumulate token usage across all messages\n  let totalInputTokens = 0;\n  let totalOutputTokens = 0;\n  let totalTokens = 0;\n  let cacheCreationInputTokens: number | undefined;\n  let cacheReadInputTokens: number | undefined;\n\n  // Extract metadata from messages\n  for (const message of newMessages) {\n    // Accumulate token usage\n    const tokens = extractTokenUsageFromMessage(message);\n    totalInputTokens += tokens.inputTokens;\n    totalOutputTokens += tokens.outputTokens;\n    totalTokens += tokens.totalTokens;\n    if (tokens.cacheCreationInputTokens !== undefined) {\n      cacheCreationInputTokens = (cacheCreationInputTokens ?? 0) + tokens.cacheCreationInputTokens;\n    }\n    if (tokens.cacheReadInputTokens !== undefined) {\n      cacheReadInputTokens = (cacheReadInputTokens ?? 0) + tokens.cacheReadInputTokens;\n    }\n\n    // Extract model metadata (last message's metadata wins for model/finish_reason)\n    extractModelMetadata(span, message);\n  }\n\n  // Set accumulated token usage on span\n  if (totalInputTokens > 0) {\n    span.setAttribute(GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE, totalInputTokens);\n  }\n  if (totalOutputTokens > 0) {\n    span.setAttribute(GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE, totalOutputTokens);\n  }\n  if (totalTokens > 0) {\n    span.setAttribute(GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE, totalTokens);\n  }\n  if (cacheCreationInputTokens !== undefined) {\n    span.setAttribute(GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS, cacheCreationInputTokens);\n  }\n  if (cacheReadInputTokens !== undefined) {\n    span.setAttribute(GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS, cacheReadInputTokens);\n  }\n}\n", "import { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../../semanticAttributes';\nimport { SPAN_STATUS_ERROR } from '../../tracing';\nimport {\n  GEN_AI_AGENT_NAME_ATTRIBUTE,\n  GEN_AI_CONVERSATION_ID_ATTRIBUTE,\n  GEN_AI_INPUT_MESSAGES_ATTRIBUTE,\n  GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE,\n  GEN_AI_INVOKE_AGENT_OPERATION_ATTRIBUTE,\n  GEN_AI_OPERATION_NAME_ATTRIBUTE,\n  GEN_AI_PIPELINE_NAME_ATTRIBUTE,\n  GEN_AI_REQUEST_AVAILABLE_TOOLS_ATTRIBUTE,\n  GEN_AI_REQUEST_MODEL_ATTRIBUTE,\n  GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE,\n} from '../ai/gen-ai-attributes';\nimport {\n  extractSystemInstructions,\n  getTruncatedJsonString,\n  resolveAIRecordingOptions,\n  shouldEnableTruncation,\n} from '../ai/utils';\nimport { stringify } from '../../utils/string';\nimport type { SpanAttributeValue } from '../../types/span';\nimport { createLangChainCallbackHandler } from '../langchain';\nimport type { BaseChatModel, LangChainMessage } from '../langchain/types';\nimport { normalizeLangChainMessages } from '../langchain/utils';\nimport { startSpan } from '../trace';\nimport { LANGGRAPH_ORIGIN } from './constants';\nimport type { CompiledGraph, LangGraphOptions } from './types';\nimport {\n  extractAgentNameFromParams,\n  extractLLMFromParams,\n  extractToolsFromCompiledGraph,\n  setResponseAttributes,\n  wrapToolsWithSpans,\n} from './utils';\nimport { _INTERNAL_mergeLangChainCallbackHandler } from '../langchain/utils';\n\nlet _insideCreateReactAgent = false;\n\nconst SENTRY_PATCHED = '__sentry_patched__';\n\n/**\n * Builds the span options for a LangGraph `create_agent` span.\n *\n * @internal Exported so the diagnostics-channel (orchestrion) instrumentation can open the same span\n * as the prototype-patching path below without re-declaring the semantic attribute keys.\n */\nexport function _INTERNAL_getLangGraphCreateAgentSpanOptions(agentName?: string): {\n  op: string;\n  name: string;\n  attributes: Record<string, SpanAttributeValue>;\n} {\n  const attributes: Record<string, SpanAttributeValue> = {\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: LANGGRAPH_ORIGIN,\n    [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'gen_ai.create_agent',\n    [GEN_AI_OPERATION_NAME_ATTRIBUTE]: 'create_agent',\n  };\n\n  if (agentName) {\n    attributes[GEN_AI_AGENT_NAME_ATTRIBUTE] = agentName;\n  }\n\n  return {\n    op: 'gen_ai.create_agent',\n    name: agentName ? `create_agent ${agentName}` : 'create_agent',\n    attributes,\n  };\n}\n\n/**\n * Instruments StateGraph's compile method to create spans for agent creation and invocation\n *\n * Wraps the compile() method to:\n * - Create a `gen_ai.create_agent` span when compile() is called\n * - Automatically wrap the invoke() method on the returned compiled graph with a `gen_ai.invoke_agent` span\n *\n */\nexport function instrumentStateGraphCompile(\n  originalCompile: (...args: unknown[]) => CompiledGraph,\n  options: LangGraphOptions,\n): (...args: unknown[]) => CompiledGraph {\n  if (Object.prototype.hasOwnProperty.call(originalCompile, SENTRY_PATCHED)) {\n    return originalCompile;\n  }\n\n  const sentryHandler = createLangChainCallbackHandler(options);\n\n  const wrapped = new Proxy(originalCompile, {\n    apply(target, thisArg, args: unknown[]): CompiledGraph {\n      // Skip when called from within createReactAgent to avoid duplicate instrumentation\n      if (_insideCreateReactAgent) {\n        return Reflect.apply(target, thisArg, args);\n      }\n\n      return startSpan(_INTERNAL_getLangGraphCreateAgentSpanOptions(), span => {\n        try {\n          const compiledGraph = Reflect.apply(target, thisArg, args);\n          const compileOptions = args.length > 0 ? (args[0] as Record<string, unknown>) : {};\n\n          // Extract graph name\n          if (compileOptions?.name && typeof compileOptions.name === 'string') {\n            span.setAttribute(GEN_AI_AGENT_NAME_ATTRIBUTE, compileOptions.name);\n            span.updateName(`create_agent ${compileOptions.name}`);\n          }\n\n          // Instrument agent invoke method on the compiled graph\n          const originalInvoke = compiledGraph.invoke;\n          if (originalInvoke && typeof originalInvoke === 'function') {\n            compiledGraph.invoke = instrumentCompiledGraphInvoke(\n              originalInvoke.bind(compiledGraph) as (...args: unknown[]) => Promise<unknown>,\n              compiledGraph,\n              compileOptions,\n              options,\n              undefined,\n              sentryHandler,\n            ) as typeof originalInvoke;\n          }\n\n          return compiledGraph;\n        } catch (error) {\n          // The error is rethrown to the caller (compile() throws), so we only mark the span failed\n          // and do not record it.\n          span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n          throw error;\n        }\n      });\n    },\n  }) as (...args: unknown[]) => CompiledGraph;\n\n  Object.defineProperty(wrapped, SENTRY_PATCHED, { value: true, enumerable: false });\n  return wrapped;\n}\n\n/**\n * Instruments CompiledGraph's invoke method to create spans for agent invocation\n *\n * Creates a `gen_ai.invoke_agent` span when invoke() is called\n */\nexport function instrumentCompiledGraphInvoke(\n  originalInvoke: (...args: unknown[]) => Promise<unknown>,\n  graphInstance: CompiledGraph,\n  compileOptions: Record<string, unknown>,\n  options: LangGraphOptions,\n  llm?: BaseChatModel | null,\n  sentryCallbackHandler?: unknown,\n): (...args: unknown[]) => Promise<unknown> {\n  return new Proxy(originalInvoke, {\n    apply(target, thisArg, args: unknown[]): Promise<unknown> {\n      const modelName = llm?.modelName ?? llm?.model;\n      return startSpan(\n        {\n          op: 'gen_ai.invoke_agent',\n          name: 'invoke_agent',\n          attributes: {\n            [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: LANGGRAPH_ORIGIN,\n            [SEMANTIC_ATTRIBUTE_SENTRY_OP]: GEN_AI_INVOKE_AGENT_OPERATION_ATTRIBUTE,\n            [GEN_AI_OPERATION_NAME_ATTRIBUTE]: 'invoke_agent',\n          },\n        },\n        async span => {\n          try {\n            const graphName = compileOptions?.name;\n\n            if (graphName && typeof graphName === 'string') {\n              span.setAttribute(GEN_AI_PIPELINE_NAME_ATTRIBUTE, graphName);\n              span.setAttribute(GEN_AI_AGENT_NAME_ATTRIBUTE, graphName);\n              span.updateName(`invoke_agent ${graphName}`);\n            }\n\n            if (modelName) {\n              span.setAttribute(GEN_AI_REQUEST_MODEL_ATTRIBUTE, modelName);\n            }\n\n            // Extract thread_id from the config (second argument)\n            // LangGraph uses config.configurable.thread_id for conversation/session linking\n            const config = args.length > 1 ? (args[1] as Record<string, unknown> | undefined) : undefined;\n            const configurable = config?.configurable as Record<string, unknown> | undefined;\n            const threadId = configurable?.thread_id;\n            if (threadId && typeof threadId === 'string') {\n              span.setAttribute(GEN_AI_CONVERSATION_ID_ATTRIBUTE, threadId);\n            }\n\n            // Inject callback handler and agent name into invoke config\n            if (sentryCallbackHandler) {\n              const invokeConfig = (args[1] ?? {}) as Record<string, unknown>;\n              args[1] = invokeConfig;\n\n              const existingMetadata = (invokeConfig.metadata ?? {}) as Record<string, unknown>;\n              invokeConfig.metadata = {\n                ...existingMetadata,\n                __sentry_langgraph__: true,\n                ...(typeof graphName === 'string' ? { lc_agent_name: graphName } : {}),\n              };\n\n              invokeConfig.callbacks = _INTERNAL_mergeLangChainCallbackHandler(\n                invokeConfig.callbacks,\n                sentryCallbackHandler,\n              );\n            }\n\n            // Extract available tools from the graph instance\n            const tools = extractToolsFromCompiledGraph(graphInstance);\n            if (tools) {\n              span.setAttribute(GEN_AI_REQUEST_AVAILABLE_TOOLS_ATTRIBUTE, JSON.stringify(tools));\n            }\n\n            // Parse input messages\n            const recordInputs = options.recordInputs;\n            const recordOutputs = options.recordOutputs;\n            const inputMessages =\n              args.length > 0 ? ((args[0] as { messages?: LangChainMessage[] } | null)?.messages ?? []) : [];\n\n            if (inputMessages && recordInputs) {\n              const normalizedMessages = normalizeLangChainMessages(inputMessages);\n              const { systemInstructions, filteredMessages } = extractSystemInstructions(normalizedMessages);\n\n              if (systemInstructions) {\n                span.setAttribute(GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE, systemInstructions);\n              }\n\n              const enableTruncation = shouldEnableTruncation(options.enableTruncation);\n              const filteredLength = Array.isArray(filteredMessages) ? filteredMessages.length : 0;\n              span.setAttributes({\n                [GEN_AI_INPUT_MESSAGES_ATTRIBUTE]: enableTruncation\n                  ? getTruncatedJsonString(filteredMessages)\n                  : stringify(filteredMessages),\n                [GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE]: filteredLength,\n              });\n            }\n\n            // Call original invoke\n            const result = await Reflect.apply(target, thisArg, args);\n\n            if (recordOutputs) {\n              setResponseAttributes(span, inputMessages ?? null, result);\n            }\n\n            return result;\n          } catch (error) {\n            // The error is rethrown to the caller (invoke() rejects), so we only mark the span failed\n            // and do not record it.\n            span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n            throw error;\n          }\n        },\n      );\n    },\n  }) as (...args: unknown[]) => Promise<unknown>;\n}\n\n/**\n * Instruments createReactAgent to create invoke_agent and execute_tool spans.\n */\nexport function instrumentCreateReactAgent(\n  originalCreateReactAgent: (...args: unknown[]) => CompiledGraph,\n  options?: LangGraphOptions,\n): (...args: unknown[]) => CompiledGraph {\n  if (Object.prototype.hasOwnProperty.call(originalCreateReactAgent, SENTRY_PATCHED)) {\n    return originalCreateReactAgent;\n  }\n\n  const resolvedOptions = resolveAIRecordingOptions(options);\n  const sentryHandler = createLangChainCallbackHandler(resolvedOptions);\n\n  const wrapped = new Proxy(originalCreateReactAgent, {\n    apply(target, thisArg, args: unknown[]): CompiledGraph {\n      const llm = extractLLMFromParams(args);\n      const agentName = extractAgentNameFromParams(args);\n\n      // Wrap tools with execute_tool spans (direct access gives us name, type, description)\n      const params = args[0] as Record<string, unknown> | undefined;\n      if (params && Array.isArray(params.tools) && params.tools.length > 0) {\n        wrapToolsWithSpans(params.tools, resolvedOptions, agentName ?? undefined);\n      }\n\n      // Suppress StateGraph.compile instrumentation inside createReactAgent\n      _insideCreateReactAgent = true;\n      let compiledGraph: CompiledGraph;\n      try {\n        compiledGraph = Reflect.apply(target, thisArg, args);\n      } finally {\n        _insideCreateReactAgent = false;\n      }\n\n      // Wrap invoke() on the returned compiled graph\n      const originalInvoke = compiledGraph.invoke;\n      if (originalInvoke && typeof originalInvoke === 'function') {\n        const compileOptions: Record<string, unknown> = {};\n        if (agentName) {\n          compileOptions.name = agentName;\n        }\n\n        compiledGraph.invoke = instrumentCompiledGraphInvoke(\n          originalInvoke.bind(compiledGraph) as (...args: unknown[]) => Promise<unknown>,\n          compiledGraph,\n          compileOptions,\n          resolvedOptions,\n          llm,\n          sentryHandler,\n        ) as typeof originalInvoke;\n      }\n\n      return compiledGraph;\n    },\n  }) as (...args: unknown[]) => CompiledGraph;\n\n  Object.defineProperty(wrapped, SENTRY_PATCHED, { value: true, enumerable: false });\n  return wrapped;\n}\n\n/**\n * Directly instruments a StateGraph instance to add tracing spans\n *\n * This function can be used to manually instrument LangGraph StateGraph instances\n * in environments where automatic instrumentation is not available or desired.\n *\n * @param stateGraph - The StateGraph instance to instrument\n * @param options - Optional configuration for recording inputs/outputs\n *\n * @example\n * ```typescript\n * import { instrumentStateGraph } from '@sentry/cloudflare';\n * import { StateGraph } from '@langchain/langgraph';\n *\n * const graph = new StateGraph(MessagesAnnotation)\n *   .addNode('agent', mockLlm)\n *   .addEdge(START, 'agent')\n *   .addEdge('agent', END);\n *\n * instrumentStateGraph(graph, { recordInputs: true, recordOutputs: true });\n * const compiled = graph.compile({ name: 'my_agent' });\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function instrumentStateGraph<T extends { compile: (...args: any[]) => any }>(\n  stateGraph: T,\n  options?: LangGraphOptions,\n): T {\n  stateGraph.compile = instrumentStateGraphCompile(stateGraph.compile, resolveAIRecordingOptions(options));\n\n  return stateGraph;\n}\n\n/**\n * Directly instruments a StateGraph instance to add tracing spans.\n *\n * @deprecated This function was renamed and will be removed in a future major version.\n * Use `instrumentStateGraph` instead.\n */\nexport const instrumentLangGraph = instrumentStateGraph;\n", "import type { Client } from '../../client';\nimport type { DynamicSamplingContext, SpanContainerItem, StreamedSpanEnvelope } from '../../types/envelope';\nimport type { SerializedStreamedSpan } from '../../types/span';\nimport { dsnToString } from '../../utils/dsn';\nimport { createEnvelope, getSdkMetadataForEnvelopeHeader } from '../../utils/envelope';\nimport { isBrowser } from '../../utils/isBrowser';\nimport { safeDateNow } from '../../utils/randomSafeContext';\n\n/**\n * Creates a span v2 span streaming envelope\n */\nexport function createStreamedSpanEnvelope(\n  serializedSpans: Array<SerializedStreamedSpan>,\n  dsc: Partial<DynamicSamplingContext>,\n  client: Client,\n): StreamedSpanEnvelope {\n  const options = client.getOptions();\n  const dsn = client.getDsn();\n  const tunnel = options.tunnel;\n  const sdk = getSdkMetadataForEnvelopeHeader(options._metadata);\n\n  const headers: StreamedSpanEnvelope[0] = {\n    sent_at: new Date(safeDateNow()).toISOString(),\n    ...(dscHasRequiredProps(dsc) && { trace: dsc }),\n    ...(sdk && { sdk }),\n    ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n  };\n\n  const inferSetting = client.getDataCollectionOptions().userInfo ? 'auto' : 'never';\n\n  const spanContainer: SpanContainerItem = [\n    { type: 'span', item_count: serializedSpans.length, content_type: 'application/vnd.sentry.items.span.v2+json' },\n    {\n      version: 2,\n      ...(isBrowser() && {\n        ingest_settings: { infer_ip: inferSetting, infer_user_agent: inferSetting },\n      }),\n      items: serializedSpans,\n    },\n  ];\n\n  return createEnvelope<StreamedSpanEnvelope>(headers, [spanContainer]);\n}\n\nfunction dscHasRequiredProps(dsc: Partial<DynamicSamplingContext>): dsc is DynamicSamplingContext {\n  return !!dsc.trace_id && !!dsc.public_key;\n}\n", "import { estimateTypedAttributesSizeInBytes } from '../../attributes';\nimport type { SerializedStreamedSpan } from '../../types/span';\n\n/**\n * Estimates the serialized byte size of a {@link SerializedStreamedSpan}.\n *\n * Uses 2 bytes per character as a UTF-16 approximation, and 8 bytes per number.\n * The estimate is intentionally conservative and may be slightly lower than the\n * actual byte size on the wire.\n * We compensate for this by setting the span buffers internal limit well below the limit\n * of how large an actual span v2 envelope may be.\n */\nexport function estimateSerializedSpanSizeInBytes(span: SerializedStreamedSpan): number {\n  /*\n   * Fixed-size fields are pre-computed as a constant for performance:\n   * - two timestamps (8 bytes each = 16)\n   * - is_segment boolean (5 bytes, assumed false for most spans)\n   * - trace_id  – always 32 hex chars (64 bytes)\n   * - span_id   – always 16 hex chars (32 bytes)\n   * - parent_span_id – 16 hex chars, assumed present for most spans (32 bytes)\n   * - status \"ok\" – most common value (8 bytes)\n   * = 156 bytes total base\n   */\n  let weight = 156;\n  weight += span.name.length * 2;\n  weight += estimateTypedAttributesSizeInBytes(span.attributes);\n  if (span.links && span.links.length > 0) {\n    // Assumption: Links are roughly equal in number of attributes\n    // probably not always true but allows us to cut down on runtime\n    const firstLink = span.links[0];\n    const attributes = firstLink?.attributes;\n    // Fixed size 100 due to span_id, trace_id and sampled flag (see above)\n    const linkWeight = 100 + (attributes ? estimateTypedAttributesSizeInBytes(attributes) : 0);\n    weight += linkWeight * span.links.length;\n  }\n  return weight;\n}\n", "import type { Client } from '../../client';\nimport { DEBUG_BUILD } from '../../debug-build';\nimport type { SerializedStreamedSpan } from '../../types/span';\nimport { debug } from '../../utils/debug-logger';\nimport { safeUnref } from '../../utils/timer';\nimport { getDynamicSamplingContextFromSpan } from '../dynamicSamplingContext';\nimport type { SerializedStreamedSpanWithSegmentSpan } from './captureSpan';\nimport { createStreamedSpanEnvelope } from './envelope';\nimport { estimateSerializedSpanSizeInBytes } from './estimateSize';\n\n/**\n * We must not send more than 1000 spans in one envelope.\n * Otherwise the envelope is dropped by Relay.\n */\nconst MAX_SPANS_PER_ENVELOPE = 1000;\n\nconst MAX_TRACE_WEIGHT_IN_BYTES = 5_000_000;\n\ninterface TraceBucket {\n  spans: Set<SerializedStreamedSpanWithSegmentSpan>;\n  size: number;\n  timeout: ReturnType<typeof setTimeout>;\n}\n\nexport interface SpanBufferOptions {\n  /**\n   * Max spans per trace before auto-flush\n   * Must not exceed 1000.\n   *\n   * @default 1_000\n   */\n  maxSpanLimit?: number;\n\n  /**\n   * Per-trace flush timeout in ms. A timeout is started when a trace bucket is first created\n   * and fires flush() for that specific trace when it expires.\n   * Must be greater than 0.\n   *\n   * @default 5_000\n   */\n  flushInterval?: number;\n\n  /**\n   * Max accumulated byte weight of spans per trace before auto-flush.\n   * Size is estimated, not exact. Uses 2 bytes per character for strings (UTF-16).\n   *\n   * @default 5_000_000 (5 MB)\n   */\n  maxTraceWeightInBytes?: number;\n}\n\n/**\n * A buffer for serialized streamed span JSON objects that flushes them to Sentry in Span v2 envelopes.\n * Handles per-trace timeout-based flushing, size thresholds, and graceful shutdown.\n * Also handles computation of the Dynamic Sampling Context (DSC) for the trace, if it wasn't yet\n * frozen onto the segment span.\n *\n * For this, we need the reference to the segment span instance, from\n * which we compute the DSC. Doing this in the buffer ensures that we compute the DSC as late as possible,\n * allowing span name and data updates up to this point. Worth noting here that the segment span is likely\n * still active and modifyable when child spans are added to the buffer.\n */\nexport class SpanBuffer {\n  /* Bucket spans by their trace id, along with accumulated size and a per-trace flush timeout */\n  private _traceBuckets: Map<string, TraceBucket>;\n\n  private _client: Client;\n  private _maxSpanLimit: number;\n  private _flushInterval: number;\n  private _maxTraceWeight: number;\n\n  public constructor(client: Client, options?: SpanBufferOptions) {\n    this._traceBuckets = new Map();\n    this._client = client;\n\n    const { maxSpanLimit, flushInterval, maxTraceWeightInBytes } = options ?? {};\n\n    this._maxSpanLimit =\n      maxSpanLimit && maxSpanLimit > 0 && maxSpanLimit <= MAX_SPANS_PER_ENVELOPE\n        ? maxSpanLimit\n        : MAX_SPANS_PER_ENVELOPE;\n    this._flushInterval = flushInterval && flushInterval > 0 ? flushInterval : 5_000;\n    this._maxTraceWeight =\n      maxTraceWeightInBytes && maxTraceWeightInBytes > 0 ? maxTraceWeightInBytes : MAX_TRACE_WEIGHT_IN_BYTES;\n\n    this._client.on('flush', () => {\n      this.drain();\n    });\n\n    this._client.on('close', () => {\n      // No need to drain the buffer here as `Client.close()` internally already calls `Client.flush()`\n      // which already invokes the `flush` hook and thus drains the buffer.\n      this._traceBuckets.forEach(bucket => {\n        clearTimeout(bucket.timeout);\n      });\n      this._traceBuckets.clear();\n    });\n  }\n\n  /**\n   * Add a span to the buffer.\n   */\n  public add(spanJSON: SerializedStreamedSpanWithSegmentSpan): void {\n    const traceId = spanJSON.trace_id;\n    let bucket = this._traceBuckets.get(traceId);\n\n    if (!bucket) {\n      bucket = {\n        spans: new Set(),\n        size: 0,\n        timeout: safeUnref(\n          setTimeout(() => {\n            this.flush(traceId);\n          }, this._flushInterval),\n        ),\n      };\n      this._traceBuckets.set(traceId, bucket);\n    }\n\n    bucket.spans.add(spanJSON);\n    bucket.size += estimateSerializedSpanSizeInBytes(spanJSON);\n\n    if (bucket.spans.size >= this._maxSpanLimit || bucket.size >= this._maxTraceWeight) {\n      this.flush(traceId);\n    }\n  }\n\n  /**\n   * Drain and flush all buffered traces.\n   */\n  public drain(): void {\n    if (!this._traceBuckets.size) {\n      return;\n    }\n\n    DEBUG_BUILD && debug.log(`Flushing span tree map with ${this._traceBuckets.size} traces`);\n\n    this._traceBuckets.forEach((_, traceId) => {\n      this.flush(traceId);\n    });\n  }\n\n  /**\n   * Flush spans of a specific trace.\n   * In contrast to {@link SpanBuffer.drain}, this method does not flush all traces, but only the one with the given traceId.\n   */\n  public flush(traceId: string): void {\n    const bucket = this._traceBuckets.get(traceId);\n    if (!bucket) {\n      return;\n    }\n\n    if (!bucket.spans.size) {\n      // we should never get here, given we always add a span when we create a new bucket\n      // and delete the bucket once we flush out the trace\n      this._removeTrace(traceId);\n      return;\n    }\n\n    const spans = Array.from(bucket.spans);\n\n    const segmentSpan = spans[0]?._segmentSpan;\n    if (!segmentSpan) {\n      DEBUG_BUILD && debug.warn('No segment span reference found on span JSON, cannot compute DSC');\n      this._removeTrace(traceId);\n      return;\n    }\n\n    const dsc = getDynamicSamplingContextFromSpan(segmentSpan);\n\n    const cleanedSpans: SerializedStreamedSpan[] = spans.map(spanJSON => {\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      const { _segmentSpan, ...cleanSpanJSON } = spanJSON;\n      return cleanSpanJSON;\n    });\n\n    const envelope = createStreamedSpanEnvelope(cleanedSpans, dsc, this._client);\n\n    DEBUG_BUILD && debug.log(`Sending span envelope for trace ${traceId} with ${cleanedSpans.length} spans`);\n\n    this._client.sendEnvelope(envelope).then(null, reason => {\n      DEBUG_BUILD && debug.error('Error while sending streamed span envelope:', reason);\n    });\n\n    this._removeTrace(traceId);\n  }\n\n  private _removeTrace(traceId: string): void {\n    const bucket = this._traceBuckets.get(traceId);\n    if (bucket) {\n      clearTimeout(bucket.timeout);\n    }\n    this._traceBuckets.delete(traceId);\n  }\n}\n", "import type { IntegrationFn } from '../types/integration';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { defineIntegration } from '../integration';\nimport { isStreamedBeforeSendSpanCallback } from '../tracing/spans/beforeSendSpan';\nimport { captureSpan } from '../tracing/spans/captureSpan';\nimport { hasSpanStreamingEnabled } from '../tracing/spans/hasSpanStreamingEnabled';\nimport { SpanBuffer } from '../tracing/spans/spanBuffer';\nimport { debug } from '../utils/debug-logger';\nimport { spanIsSampled } from '../utils/spanUtils';\n\nexport const spanStreamingIntegration = defineIntegration(() => {\n  return {\n    name: 'SpanStreaming' as const,\n\n    setup(client) {\n      const initialMessage = 'SpanStreaming integration requires';\n      const fallbackMsg = 'Falling back to static trace lifecycle.';\n      const clientOptions = client.getOptions();\n\n      if (!hasSpanStreamingEnabled(client)) {\n        clientOptions.traceLifecycle = 'static';\n        DEBUG_BUILD && debug.warn(`${initialMessage} \\`traceLifecycle\\` to be set to \"stream\"! ${fallbackMsg}`);\n        return;\n      }\n\n      const beforeSendSpan = clientOptions.beforeSendSpan;\n      if (beforeSendSpan && !isStreamedBeforeSendSpanCallback(beforeSendSpan)) {\n        clientOptions.traceLifecycle = 'static';\n        DEBUG_BUILD &&\n          debug.warn(`${initialMessage} a beforeSendSpan callback using \\`withStreamedSpan\\`! ${fallbackMsg}`);\n        return;\n      }\n\n      const buffer = new SpanBuffer(client);\n\n      client.on('afterSpanEnd', span => {\n        if (!spanIsSampled(span)) {\n          return;\n        }\n        buffer.add(captureSpan(span, client));\n      });\n    },\n  };\n}) satisfies IntegrationFn;\n", "import type { SeverityLevel } from '../types/severity';\n\n/**\n * Determine a breadcrumb's log level (only `warning` or `error`) based on an HTTP status code.\n */\nexport function getBreadcrumbLogLevelFromHttpStatusCode(statusCode: number | undefined): SeverityLevel | undefined {\n  // NOTE: undefined defaults to 'info' in Sentry\n  if (statusCode === undefined) {\n    return undefined;\n  } else if (statusCode >= 400 && statusCode < 500) {\n    return 'warning';\n  } else if (statusCode >= 500) {\n    return 'error';\n  } else {\n    return undefined;\n  }\n}\n", "/**\n * Replaces constructor functions in module exports, handling read-only properties,\n * and both default and named exports by wrapping them with the constructor.\n *\n * @param exports The module exports object to modify\n * @param exportName The name of the export to replace (e.g., 'GoogleGenAI', 'Anthropic', 'OpenAI')\n * @param wrappedConstructor The wrapped constructor function to replace the original with\n * @returns void\n */\nexport function replaceExports(\n  exports: { [key: string]: unknown },\n  exportName: string,\n  wrappedConstructor: unknown,\n): void {\n  const original = exports[exportName];\n\n  if (typeof original !== 'function') {\n    return;\n  }\n\n  // Replace the named export - handle read-only properties\n  try {\n    exports[exportName] = wrappedConstructor;\n  } catch {\n    // If direct assignment fails, override the property descriptor\n    Object.defineProperty(exports, exportName, {\n      value: wrappedConstructor,\n      writable: true,\n      configurable: true,\n      enumerable: true,\n    });\n  }\n\n  // Replace the default export if it points to the original constructor\n  if (exports.default === original) {\n    try {\n      exports.default = wrappedConstructor;\n    } catch {\n      Object.defineProperty(exports, 'default', {\n        value: wrappedConstructor,\n        writable: true,\n        configurable: true,\n        enumerable: true,\n      });\n    }\n  }\n}\n", "/** A simple Least Recently Used map */\nexport class LRUMap<K, V> {\n  private readonly _cache: Map<K, V>;\n\n  public constructor(private readonly _maxSize: number) {\n    this._cache = new Map<K, V>();\n  }\n\n  /** Get the current size of the cache */\n  public get size(): number {\n    return this._cache.size;\n  }\n\n  /** Get an entry or undefined if it was not in the cache. Re-inserts to update the recently used order */\n  public get(key: K): V | undefined {\n    const value = this._cache.get(key);\n    if (value === undefined) {\n      return undefined;\n    }\n    // Remove and re-insert to update the order\n    this._cache.delete(key);\n    this._cache.set(key, value);\n    return value;\n  }\n\n  /** Insert an entry and evict an older entry if we've reached maxSize */\n  public set(key: K, value: V): void {\n    if (this._cache.size >= this._maxSize) {\n      // keys() returns an iterator in insertion order so keys().next() gives us the oldest key\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      const nextKey = this._cache.keys().next().value!;\n      this._cache.delete(nextKey);\n    }\n    this._cache.set(key, value);\n  }\n\n  /** Remove an entry and return the entry if it was in the cache */\n  public remove(key: K): V | undefined {\n    const value = this._cache.get(key);\n    if (value) {\n      this._cache.delete(key);\n    }\n    return value;\n  }\n\n  /** Clear all entries */\n  public clear(): void {\n    this._cache.clear();\n  }\n\n  /** Get all the keys */\n  public keys(): Array<K> {\n    return Array.from(this._cache.keys());\n  }\n\n  /** Get all the values */\n  public values(): Array<V> {\n    const values: V[] = [];\n    this._cache.forEach(value => values.push(value));\n    return values;\n  }\n}\n", "import type { ClientOptions } from '../types/options';\n\n/**\n * Takes the SDK metadata and adds the user-agent header to the transport options.\n * This ensures that the SDK sends the user-agent header with SDK name and version to\n * all requests made by the transport.\n *\n * @see https://develop.sentry.dev/sdk/overview/#user-agent\n */\nexport function addUserAgentToTransportHeaders(options: ClientOptions): void {\n  const sdkMetadata = options._metadata?.sdk;\n  const sdkUserAgent =\n    sdkMetadata?.name && sdkMetadata?.version ? `${sdkMetadata?.name}/${sdkMetadata?.version}` : undefined;\n\n  options.transportOptions = {\n    ...options.transportOptions,\n    headers: {\n      ...(sdkUserAgent && { 'user-agent': sdkUserAgent }),\n      ...options.transportOptions?.headers,\n    },\n  };\n}\n", "import { createCheckInEnvelope } from './checkin';\nimport { Client } from './client';\nimport { getIsolationScope } from './currentScopes';\nimport { DEBUG_BUILD } from './debug-build';\nimport { spanStreamingIntegration } from './integrations/spanStreaming';\nimport type { Scope } from './scope';\nimport { DEFAULT_TRANSPORT_BUFFER_SIZE } from './transports/base';\nimport { addUserAgentToTransportHeaders } from './transports/userAgent';\nimport type { CheckIn, MonitorConfig, SerializedCheckIn } from './types/checkin';\nimport type { Event, EventHint } from './types/event';\nimport type { ClientOptions } from './types/options';\nimport type { ParameterizedString } from './types/parameterize';\nimport type { SeverityLevel } from './types/severity';\nimport type { BaseTransportOptions, Transport } from './types/transport';\nimport { debug } from './utils/debug-logger';\nimport { eventFromMessage, eventFromUnknownInput } from './utils/eventbuilder';\nimport { uuid4 } from './utils/misc';\nimport { makePromiseBuffer } from './utils/promisebuffer';\nimport { resolvedSyncPromise } from './utils/syncpromise';\nimport { _getTraceInfoFromScope } from './utils/trace-info';\n\nexport interface ServerRuntimeClientOptions extends ClientOptions<BaseTransportOptions> {\n  platform?: string;\n  runtime?: { name: string; version?: string };\n  serverName?: string;\n}\n\n/**\n * The Sentry Server Runtime Client SDK.\n */\nexport class ServerRuntimeClient<\n  O extends ClientOptions & ServerRuntimeClientOptions = ServerRuntimeClientOptions,\n> extends Client<O> {\n  private _disposeCallbacks: (() => void)[] = [];\n\n  /**\n   * Creates a new Edge SDK instance.\n   * @param options Configuration options for this SDK.\n   */\n  public constructor(options: O) {\n    addUserAgentToTransportHeaders(options);\n\n    // When span streaming is enabled (`traceLifecycle: 'stream'`), the `spanStreamingIntegration`\n    // is required to flush spans. We add it here so the individual server SDKs don't have to.\n    // A user-provided `spanStreamingIntegration` always takes precedence over the one we add.\n    if (options.traceLifecycle === 'stream' && !options.integrations.some(i => i.name === 'SpanStreaming')) {\n      options.integrations.push(spanStreamingIntegration());\n    }\n\n    super(options);\n\n    this._setUpMetricsProcessing();\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromException(exception: unknown, hint?: EventHint): PromiseLike<Event> {\n    const event = eventFromUnknownInput(this, this._options.stackParser, exception, hint);\n    event.level = 'error';\n\n    return resolvedSyncPromise(event);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromMessage(\n    message: ParameterizedString,\n    level: SeverityLevel = 'info',\n    hint?: EventHint,\n  ): PromiseLike<Event> {\n    return resolvedSyncPromise(\n      eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace),\n    );\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureException(exception: unknown, hint?: EventHint, scope?: Scope): string {\n    setCurrentRequestSessionErroredOrCrashed(hint);\n    return super.captureException(exception, hint, scope);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureEvent(event: Event, hint?: EventHint, scope?: Scope): string {\n    // If the event is of type Exception, then a request session should be captured\n    const isException = !event.type && event.exception?.values && event.exception.values.length > 0;\n    if (isException) {\n      setCurrentRequestSessionErroredOrCrashed(hint);\n    }\n\n    return super.captureEvent(event, hint, scope);\n  }\n\n  /**\n   * Create a cron monitor check in and send it to Sentry.\n   *\n   * @param checkIn An object that describes a check in.\n   * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n   * to create a monitor automatically when sending a check in.\n   */\n  public captureCheckIn(checkIn: CheckIn, monitorConfig?: MonitorConfig, scope?: Scope): string {\n    const id = 'checkInId' in checkIn && checkIn.checkInId ? checkIn.checkInId : uuid4();\n    if (!this._isEnabled()) {\n      DEBUG_BUILD && debug.warn('SDK not enabled, will not capture check-in.');\n      return id;\n    }\n\n    const options = this.getOptions();\n    const { release, environment, tunnel } = options;\n\n    const serializedCheckIn: SerializedCheckIn = {\n      check_in_id: id,\n      monitor_slug: checkIn.monitorSlug,\n      status: checkIn.status,\n      release,\n      environment,\n    };\n\n    if ('duration' in checkIn) {\n      serializedCheckIn.duration = checkIn.duration;\n    }\n\n    if (monitorConfig) {\n      serializedCheckIn.monitor_config = {\n        schedule: monitorConfig.schedule,\n        checkin_margin: monitorConfig.checkinMargin,\n        max_runtime: monitorConfig.maxRuntime,\n        timezone: monitorConfig.timezone,\n        failure_issue_threshold: monitorConfig.failureIssueThreshold,\n        recovery_threshold: monitorConfig.recoveryThreshold,\n      };\n    }\n\n    const [dynamicSamplingContext, traceContext] = _getTraceInfoFromScope(this, scope);\n    if (traceContext) {\n      serializedCheckIn.contexts = {\n        trace: traceContext,\n      };\n    }\n\n    const envelope = createCheckInEnvelope(\n      serializedCheckIn,\n      dynamicSamplingContext,\n      this.getSdkMetadata(),\n      tunnel,\n      this.getDsn(),\n    );\n\n    DEBUG_BUILD && debug.log('Sending checkin:', checkIn.monitorSlug, checkIn.status);\n\n    // sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this.sendEnvelope(envelope);\n\n    return id;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public override registerCleanup(callback: () => void): void {\n    this._disposeCallbacks.push(callback);\n  }\n\n  /**\n   * Disposes of the client and releases all resources.\n   *\n   * This method clears all internal state to allow the client to be garbage collected.\n   * It clears hooks, event processors, integrations, transport, and other internal references.\n   *\n   * Call this method after flushing to allow the client to be garbage collected.\n   * After calling dispose(), the client should not be used anymore.\n   *\n   * Subclasses should override this method to clean up their own resources and call `super.dispose()`.\n   */\n  public override dispose(): void {\n    DEBUG_BUILD && debug.log('Disposing client...');\n\n    // Run all registered cleanup callbacks\n    for (const callback of this._disposeCallbacks) {\n      try {\n        callback();\n      } catch {\n        // Ignore errors in cleanup callbacks\n      }\n    }\n    this._disposeCallbacks.length = 0;\n\n    for (const hookName of Object.keys(this._hooks)) {\n      this._hooks[hookName]?.clear();\n    }\n\n    this._hooks = {};\n    this._eventProcessors.length = 0;\n    this._integrations = {};\n    this._outcomes = {};\n    (this as unknown as { _transport?: Transport })._transport = undefined;\n    this._promiseBuffer = makePromiseBuffer(DEFAULT_TRANSPORT_BUFFER_SIZE);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  protected _prepareEvent(\n    event: Event,\n    hint: EventHint,\n    currentScope: Scope,\n    isolationScope: Scope,\n  ): PromiseLike<Event | null> {\n    if (this._options.platform) {\n      event.platform = event.platform || this._options.platform;\n    }\n\n    if (this._options.runtime) {\n      event.contexts = {\n        ...event.contexts,\n        runtime: event.contexts?.runtime || this._options.runtime,\n      };\n    }\n\n    if (this._options.serverName) {\n      event.server_name = event.server_name || this._options.serverName;\n    }\n\n    return super._prepareEvent(event, hint, currentScope, isolationScope);\n  }\n\n  /**\n   * Process a server-side metric before it is captured.\n   */\n  private _setUpMetricsProcessing(): void {\n    this.on('processMetric', metric => {\n      if (this._options.serverName) {\n        metric.attributes = {\n          'server.address': this._options.serverName,\n          ...metric.attributes,\n        };\n      }\n    });\n  }\n}\n\nfunction setCurrentRequestSessionErroredOrCrashed(eventHint?: EventHint): void {\n  const requestSession = getIsolationScope().getScopeData().sdkProcessingMetadata.requestSession;\n  if (requestSession) {\n    // We mutate instead of doing `setSdkProcessingMetadata` because the http integration stores away a particular\n    // isolationScope. If that isolation scope is forked, setting the processing metadata here will not mutate the\n    // original isolation scope that the http integration stored away.\n    const isHandledException = eventHint?.mechanism?.handled ?? true;\n    // A request session can go from \"errored\" -> \"crashed\" but not \"crashed\" -> \"errored\".\n    // Crashed (unhandled exception) is worse than errored (handled exception).\n    if (isHandledException && requestSession.status !== 'crashed') {\n      requestSession.status = 'errored';\n    } else if (!isHandledException) {\n      requestSession.status = 'crashed';\n    }\n  }\n}\n", "// This code was originally forked from https://github.com/felixge/node-stack-trace\n// Since then it has been highly modified to fit our needs.\n\n// Copyright (c) 2011 Felix Geisendörfer (felix@debuggable.com)//\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions://\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.//\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport type { StackLineParser, StackLineParserFn } from '../types/stacktrace';\nimport { normalizeStackTracePath, UNKNOWN_FUNCTION } from './stacktrace';\n\nexport type GetModuleFn = (filename: string | undefined) => string | undefined;\n\n/**\n * Does this filename look like it's part of the app code?\n */\nexport function filenameIsInApp(filename: string, isNative: boolean = false): boolean {\n  const isInternal =\n    isNative ||\n    (filename &&\n      // It's not internal if it's an absolute linux path\n      !filename.startsWith('/') &&\n      // It's not internal if it's an absolute windows path\n      !filename.match(/^[A-Z]:/) &&\n      // It's not internal if the path is starting with a dot\n      !filename.startsWith('.') &&\n      // It's not internal if the frame has a protocol. In node, this is usually the case if the file got pre-processed with a bundler like webpack\n      !filename.match(/^[a-zA-Z]([a-zA-Z0-9.\\-+])*:\\/\\//)); // Schema from: https://stackoverflow.com/a/3641782\n\n  // in_app is all that's not an internal Node function or a module within node_modules\n  // note that isNative appears to return true even for node core libraries\n  // see https://github.com/getsentry/raven-node/issues/176\n\n  return !isInternal && filename !== undefined && !filename.includes('node_modules/');\n}\n\n/** Node Stack line parser */\nexport function node(getModule?: GetModuleFn): StackLineParserFn {\n  const FILENAME_MATCH = /^\\s*[-]{4,}$/;\n  const FULL_MATCH = /at (?:async )?(?:(.+?)\\s+\\()?(?:(.+):(\\d+):(\\d+)?|([^)]+))\\)?/;\n  const DATA_URI_MATCH = /at (?:async )?(.+?) \\(data:(.*?),/;\n\n  return (line: string) => {\n    const dataUriMatch = line.match(DATA_URI_MATCH);\n    if (dataUriMatch) {\n      return {\n        filename: `<data:${dataUriMatch[2]}>`,\n        function: dataUriMatch[1],\n      };\n    }\n\n    const lineMatch = line.match(FULL_MATCH);\n\n    if (lineMatch) {\n      let object: string | undefined;\n      let method: string | undefined;\n      let functionName: string | undefined;\n      let typeName: string | undefined;\n      let methodName: string | undefined;\n\n      if (lineMatch[1]) {\n        functionName = lineMatch[1];\n\n        let methodStart = functionName.lastIndexOf('.');\n        if (functionName[methodStart - 1] === '.') {\n          methodStart--;\n        }\n\n        if (methodStart > 0) {\n          object = functionName.slice(0, methodStart);\n          method = functionName.slice(methodStart + 1);\n          const objectEnd = object.indexOf('.Module');\n          if (objectEnd > 0) {\n            functionName = functionName.slice(objectEnd + 1);\n            object = object.slice(0, objectEnd);\n          }\n        }\n        typeName = undefined;\n      }\n\n      if (method) {\n        typeName = object;\n        methodName = method;\n      }\n\n      if (method === '<anonymous>') {\n        methodName = undefined;\n        functionName = undefined;\n      }\n\n      if (functionName === undefined) {\n        methodName = methodName || UNKNOWN_FUNCTION;\n        functionName = typeName ? `${typeName}.${methodName}` : methodName;\n      }\n\n      let filename = normalizeStackTracePath(lineMatch[2]);\n      const isNative = lineMatch[5] === 'native';\n\n      if (!filename && lineMatch[5] && !isNative) {\n        filename = lineMatch[5];\n      }\n\n      const maybeDecodedFilename = filename ? _safeDecodeURI(filename) : undefined;\n      return {\n        filename: maybeDecodedFilename ?? filename,\n        module: maybeDecodedFilename && getModule?.(maybeDecodedFilename),\n        function: functionName,\n        lineno: _parseIntOrUndefined(lineMatch[3]),\n        colno: _parseIntOrUndefined(lineMatch[4]),\n        in_app: filenameIsInApp(filename || '', isNative),\n      };\n    }\n\n    if (line.match(FILENAME_MATCH)) {\n      return {\n        filename: line,\n      };\n    }\n\n    return undefined;\n  };\n}\n\n/**\n * Node.js stack line parser\n *\n * This is in @sentry/core so it can be used from the Electron SDK in the browser for when `nodeIntegration == true`.\n * This allows it to be used without referencing or importing any node specific code which causes bundlers to complain\n */\nexport function nodeStackLineParser(getModule?: GetModuleFn): StackLineParser {\n  return [90, node(getModule)];\n}\n\nfunction _parseIntOrUndefined(input: string | undefined): number | undefined {\n  return parseInt(input || '', 10) || undefined;\n}\n\nfunction _safeDecodeURI(filename: string): string | undefined {\n  try {\n    return decodeURI(filename);\n  } catch {\n    return undefined;\n  }\n}\n", "/**\n * Platform-portable Express tracing integration.\n *\n * @module\n *\n * This Sentry integration is a derivative work based on the OpenTelemetry\n * Express instrumentation.\n *\n * <https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-express>\n *\n * Extended under the terms of the Apache 2.0 license linked below:\n *\n * ----\n *\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ExpressRequest } from './types';\n\n// map of patched request objects to stored layers\nconst requestLayerStore = new WeakMap<ExpressRequest, string[]>();\nexport const storeLayer = (req: ExpressRequest, layer: string) => {\n  const store = requestLayerStore.get(req);\n  if (!store) {\n    requestLayerStore.set(req, [layer]);\n  } else {\n    store.push(layer);\n  }\n};\n\nexport const getStoredLayers = (req: ExpressRequest) => {\n  let store = requestLayerStore.get(req);\n  if (!store) {\n    store = [];\n    requestLayerStore.set(req, store);\n  }\n  return store;\n};\n", "/**\n * Platform-portable Express tracing integration.\n *\n * @module\n *\n * This Sentry integration is a derivative work based on the OpenTelemetry\n * Express instrumentation.\n *\n * <https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-express>\n *\n * Extended under the terms of the Apache 2.0 license linked below:\n *\n * ----\n *\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Integration } from '../../types/integration';\nimport type { RequestEventData } from '../../types/request';\nimport type { SpanAttributes } from '../../types/span';\n\nexport const ATTR_EXPRESS_NAME = 'express.name';\nexport const ATTR_HTTP_ROUTE = 'http.route';\nexport const ATTR_EXPRESS_TYPE = 'express.type';\n\nexport type ExpressExport = {\n  Router: ExpressRouterv5 | ExpressRouterv4;\n  application: ExpressApplication;\n};\n\nexport type ExpressExportv5 = ExpressExport & {\n  Router: ExpressRouterv5;\n};\n\nexport type ExpressExportv4 = ExpressExport & {\n  Router: ExpressRouterv4;\n};\n\nexport type ExpressModuleExport = ExpressExport | { default: ExpressExport };\n\nexport interface ExpressRequest extends RequestEventData {\n  originalUrl: string;\n  route: unknown;\n  // Note: req.res is typed as optional (only present after middleware init).\n  // mark optional to preserve compat with express v4 types.\n  res?: ExpressResponse;\n}\n\n// just a minimum type def for what we need, since this also needs to\n// work in environments lacking node:http\nexport interface ExpressResponse {\n  once(ev: string, listener: Function): this;\n  removeListener(ev: string, listener?: Function): this;\n  emit(ev: string, ...data: unknown[]): this;\n}\n\nexport interface NextFunction {\n  (err?: unknown): void;\n  /**\n   * \"Break-out\" of a router by calling {next('router')};\n   * @see {https://expressjs.com/en/guide/using-middleware.html#middleware.router}\n   */\n  (deferToNext: 'router'): void;\n  /**\n   * \"Break-out\" of a route by calling {next('route')};\n   * @see {https://expressjs.com/en/guide/using-middleware.html#middleware.application}\n   */\n  (deferToNext: 'route'): void;\n}\n\n// Need to mark this as `any` so they don't conflict with the actual express\n//oxlint-disable-next-line no-explicit-any\nexport type ExpressApplicationRequestHandler = (...handlers: any[]) => any;\n\nexport type ExpressRequestInfo<T = unknown> = {\n  /** An express request object */\n  request: T;\n  route: string;\n  layerType: ExpressLayerType;\n};\n\nexport type ExpressLayerType = 'router' | 'middleware' | 'request_handler';\nexport const ExpressLayerType_ROUTER = 'router';\nexport const ExpressLayerType_MIDDLEWARE = 'middleware';\nexport const ExpressLayerType_REQUEST_HANDLER = 'request_handler';\n\nexport type PathParams = string | RegExp | Array<string | RegExp>;\nexport type LayerPathSegment = string | RegExp | number;\n\nexport interface ExpressRoute {\n  path: string;\n  stack: ExpressLayer[];\n}\n\nexport type ExpressRouterv4 = ExpressRouter;\n\nexport interface ExpressRouterv5 {\n  prototype: ExpressRouter;\n}\n\n// https://github.com/expressjs/express/blob/main/lib/router/layer.js#L33\nexport type ExpressLayer = {\n  handle: Function &\n    Record<string, unknown> & {\n      stack?: ExpressLayer[];\n    };\n  name: string;\n  params: { [key: string]: string };\n  path?: string;\n  regexp: RegExp;\n  route?: ExpressLayer;\n};\n\nexport type ExpressRouter = {\n  params: { [key: string]: string };\n  _params: string[];\n  caseSensitive: boolean;\n  mergeParams: boolean;\n  strict: boolean;\n  stack: ExpressLayer[];\n  route(prefix: PathParams): ExpressRoute;\n  use(...handlers: unknown[]): unknown;\n};\n\nexport type IgnoreMatcher = string | RegExp | ((name: string) => boolean);\n\nexport type ExpressIntegrationOptions = {\n  /**\n   * @deprecated Pass the express module as the first argument, and an\n   * options getter as the second argument to patchExpressModule.\n   */\n  express?: ExpressModuleExport;\n\n  /** Ignore specific based on their name */\n  ignoreLayers?: IgnoreMatcher[];\n  /** Ignore specific layers based on their type */\n  ignoreLayersType?: ExpressLayerType[];\n  /**\n   * Optional callback invoked each time a layer resolves the matched HTTP route.\n   * Platform-specific integrations (e.g. Node.js) use this to propagate the\n   * resolved route to the underlying transport layer (e.g. OTel RPCMetadata).\n   */\n  onRouteResolved?: (route: string | undefined) => void;\n\n  /**\n   * Callback deciding whether an error passed to `next(error)` should be captured\n   * and sent to Sentry.\n   *\n   * By default, 5xx errors (and errors without a resolvable status) are sent, while\n   * 3xx and 4xx errors are not. Set to `false` to capture no errors at all.\n   *\n   * Capturing Express errors still requires `setupExpressErrorHandler(app)`. Passing\n   * `shouldHandleError` to that call instead is deprecated: it takes precedence over\n   * this option, but will be removed in v11.\n   *\n   * @example\n   *\n   * ```javascript\n   * Sentry.init({\n   *   integrations: [\n   *     Sentry.expressIntegration({\n   *       shouldHandleError(error) {\n   *         return (error.statusCode ?? 500) >= 500;\n   *       },\n   *     }),\n   *   ],\n   * });\n   * ```\n   */\n  shouldHandleError?: ExpressShouldHandleError;\n};\n\nexport type LayerMetadata = {\n  attributes: SpanAttributes;\n  name: string;\n};\n\nexport interface ExpressApplication {\n  stack: ExpressLayer[];\n  use: ExpressApplicationRequestHandler;\n}\n\nexport interface MiddlewareError extends Error {\n  status?: number | string;\n  statusCode?: number | string;\n  status_code?: number | string;\n  output?: {\n    statusCode?: number | string;\n  };\n}\n\nexport type ExpressMiddleware = (req: ExpressRequest, res: ExpressResponse, next: () => void) => void;\n\nexport type ExpressErrorMiddleware = (\n  error: MiddlewareError,\n  req: ExpressRequest,\n  res: ExpressResponse,\n  next: (error: MiddlewareError) => void,\n) => void;\n\n/** Callback deciding whether an error should be captured; `false` disables capture entirely. */\nexport type ExpressShouldHandleError = ((error: MiddlewareError) => boolean) | false;\n\n/**\n * The Express integration is defined per platform (e.g. `expressIntegration()` in `@sentry/node`), so\n * `expressErrorHandler` reads its `shouldHandleError` back off the registered instance by name.\n * `getShouldHandleError` is optional because not every platform's Express integration implements it.\n */\nexport interface ExpressIntegration extends Integration {\n  getShouldHandleError?: () => ExpressShouldHandleError | undefined;\n}\n\nexport interface ExpressHandlerOptions {\n  /**\n   * Callback method deciding whether error should be captured and sent to Sentry\n   *\n   * @param error Captured middleware error\n   *\n   * @deprecated Configure `shouldHandleError` on `expressIntegration()` rather than here. Keep calling\n   * `setupExpressErrorHandler(app)` as that is what captures the errors. This option will be removed in v11.\n   *\n   * @example\n   *\n   * ```javascript\n   * Sentry.init({\n   *   integrations: [\n   *     Sentry.expressIntegration({\n   *       shouldHandleError(error) {\n   *         return (error.statusCode ?? 500) >= 500;\n   *       },\n   *     }),\n   *   ],\n   * });\n   * ```\n   */\n  shouldHandleError?(this: void, error: MiddlewareError): boolean;\n}\n", "/**\n * Platform-portable Express tracing integration.\n *\n * @module\n *\n * This Sentry integration is a derivative work based on the OpenTelemetry\n * Express instrumentation.\n *\n * <https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-express>\n *\n * Extended under the terms of the Apache 2.0 license linked below:\n *\n * ----\n *\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { SpanAttributes } from '../../types/span';\nimport { getStoredLayers } from './request-layer-store';\nimport type {\n  ExpressIntegrationOptions,\n  ExpressLayer,\n  ExpressLayerType,\n  ExpressRequest,\n  LayerPathSegment,\n  MiddlewareError,\n  ExpressRouterv4,\n  ExpressExportv5,\n  ExpressExportv4,\n} from './types';\nimport {\n  ATTR_EXPRESS_NAME,\n  ATTR_EXPRESS_TYPE,\n  ExpressLayerType_MIDDLEWARE,\n  ExpressLayerType_REQUEST_HANDLER,\n  ExpressLayerType_ROUTER,\n} from './types';\nimport { stringMatchesSomePattern } from '../../utils/string';\n\n/**\n * Converts a user-provided error value into an error and error message pair\n *\n * @param error - User-provided error value\n * @returns Both an Error or string representation of the value and an error message\n */\nexport const asErrorAndMessage = (error: unknown): [string | Error, string] =>\n  error instanceof Error ? [error, error.message] : [String(error), String(error)];\n\n/**\n * Checks if a route contains parameter patterns (e.g., :id, :userId)\n * which are valid even if they don't exactly match the original URL\n */\nexport function isRoutePattern(route: string): boolean {\n  return route.includes(':') || route.includes('*');\n}\n\n/**\n * Parse express layer context to retrieve a name and attributes.\n * @param route The route of the layer\n * @param layer Express layer\n * @param [layerPath] if present, the path on which the layer has been mounted\n */\nexport const getLayerMetadata = (\n  route: string,\n  layer: ExpressLayer,\n  layerPath?: string,\n): {\n  attributes: SpanAttributes & { [ATTR_EXPRESS_NAME]: string; [ATTR_EXPRESS_TYPE]: ExpressLayerType };\n  name: string;\n} => {\n  if (layer.name === 'router') {\n    const maybeRouterPath = getRouterPath('', layer);\n    const extractedRouterPath = maybeRouterPath ? maybeRouterPath : layerPath || route || '/';\n\n    return {\n      attributes: {\n        [ATTR_EXPRESS_NAME]: extractedRouterPath,\n        [ATTR_EXPRESS_TYPE]: ExpressLayerType_ROUTER,\n      },\n      name: `router - ${extractedRouterPath}`,\n    };\n  } else if (layer.name === 'bound dispatch' || layer.name === 'handle') {\n    return {\n      attributes: {\n        [ATTR_EXPRESS_NAME]: (route || layerPath) ?? 'request handler',\n        [ATTR_EXPRESS_TYPE]: ExpressLayerType_REQUEST_HANDLER,\n      },\n      name: `request handler${layer.path ? ` - ${route || layerPath}` : ''}`,\n    };\n  } else {\n    return {\n      attributes: {\n        [ATTR_EXPRESS_NAME]: layer.name,\n        [ATTR_EXPRESS_TYPE]: ExpressLayerType_MIDDLEWARE,\n      },\n      name: `middleware - ${layer.name}`,\n    };\n  }\n};\n\n/**\n * Recursively search the router path from layer stack\n * @param path The path to reconstruct\n * @param layer The layer to reconstruct from\n * @returns The reconstructed path\n */\nexport const getRouterPath = (path: string, layer: ExpressLayer): string => {\n  const stackLayer = Array.isArray(layer.handle?.stack) ? layer.handle?.stack?.[0] : undefined;\n\n  if (stackLayer?.route?.path) {\n    return `${path}${stackLayer.route.path}`;\n  }\n\n  if (stackLayer && Array.isArray(stackLayer?.handle?.stack)) {\n    return getRouterPath(path, stackLayer);\n  }\n\n  return path;\n};\n\n/**\n * Check whether the given request is ignored by configuration\n * It will not re-throw exceptions from `list` provided by the client\n * @param constant e.g URL of request\n * @param [list] List of ignore patterns\n * @param [onException] callback for doing something when an exception has\n *     occurred\n */\nexport type ExpressIsLayerIgnoredOptions = Pick<ExpressIntegrationOptions, 'ignoreLayersType' | 'ignoreLayers'>;\nexport const isLayerIgnored = (\n  name: string,\n  type: ExpressLayerType,\n  config?: ExpressIsLayerIgnoredOptions,\n): boolean => {\n  if (Array.isArray(config?.ignoreLayersType) && config?.ignoreLayersType?.includes(type)) {\n    return true;\n  }\n  if (!Array.isArray(config?.ignoreLayers)) {\n    return false;\n  }\n  try {\n    return stringMatchesSomePattern(name, config.ignoreLayers, true);\n  } catch {}\n\n  return false;\n};\n\n/**\n * Extracts the actual matched route from Express request for OpenTelemetry instrumentation.\n * Returns the route that should be used as the http.route attribute.\n *\n * @param req - The Express request object with layers store\n * @param constructedRoute - The constructed route from `getConstructedRoute`\n * @returns The matched route string or undefined if no valid route is found\n */\nexport function getActualMatchedRoute(req: ExpressRequest, constructedRoute: string): string | undefined {\n  const layersStore = getStoredLayers(req);\n\n  // If no layers are stored, no route can be determined\n  if (layersStore.length === 0) {\n    return undefined;\n  }\n\n  // Handle root path case - if all paths are root, only return root if originalUrl is also root\n  // The layer store also includes root paths in case a non-existing url was requested\n  if (layersStore.every(path => path === '/')) {\n    return req.originalUrl === '/' ? '/' : undefined;\n  }\n\n  if (constructedRoute === '*') {\n    return constructedRoute;\n  }\n\n  // For RegExp routes or route arrays, return the constructed route\n  // This handles the case where the route is defined using RegExp or an array\n  if (\n    constructedRoute.includes('/') &&\n    (constructedRoute.includes(',') ||\n      constructedRoute.includes('\\\\') ||\n      constructedRoute.includes('*') ||\n      constructedRoute.includes('['))\n  ) {\n    return constructedRoute;\n  }\n\n  // Ensure route starts with '/' if it doesn't already\n  const normalizedRoute = constructedRoute.startsWith('/') ? constructedRoute : `/${constructedRoute}`;\n\n  // Validate that this appears to be a matched route\n  // A route is considered matched if:\n  // 1. We have a constructed route\n  // 2. The original URL matches or starts with our route pattern\n  const isValidRoute =\n    normalizedRoute.length > 0 &&\n    (req.originalUrl === normalizedRoute ||\n      req.originalUrl.startsWith(normalizedRoute) ||\n      isRoutePattern(normalizedRoute));\n\n  return isValidRoute ? normalizedRoute : undefined;\n}\n\nexport function getConstructedRoute(req: ExpressRequest) {\n  const layersStore: string[] = getStoredLayers(req);\n\n  let constructedRoute: string = '';\n  for (const path of layersStore) {\n    if (path === '/' || path === '/*') {\n      continue;\n    }\n    constructedRoute += !constructedRoute || constructedRoute.endsWith('/') ? path : `/${path}`;\n  }\n\n  return constructedRoute.replace(/\\/{2,}/g, '/');\n}\n\nexport const getLayerPath = (args: unknown[]): string | undefined => {\n  const firstArg = args[0];\n\n  if (Array.isArray(firstArg)) {\n    return firstArg.map(arg => extractLayerPathSegment(arg) || '').join(',');\n  }\n\n  return extractLayerPathSegment(firstArg as LayerPathSegment);\n};\n\nconst extractLayerPathSegment = (arg: LayerPathSegment): string | undefined =>\n  typeof arg === 'string' ? arg : arg instanceof RegExp || typeof arg === 'number' ? String(arg) : undefined;\n\n// v5 we instrument Router.prototype\n// v4 we instrument Router itself\nexport const isExpressWithRouterPrototype = (express: unknown): express is ExpressExportv5 =>\n  isExpressRouterPrototype((express as ExpressExportv5)?.Router?.prototype);\n\n// In Express v4, Router is a function (not a plain object), so we need to accept both\nconst isExpressRouterPrototype = (routerProto?: unknown): routerProto is ExpressRouterv4 =>\n  (typeof routerProto === 'object' || typeof routerProto === 'function') &&\n  !!routerProto &&\n  'route' in routerProto &&\n  typeof (routerProto as ExpressRouterv4).route === 'function';\n\nexport const isExpressWithoutRouterPrototype = (express: unknown): express is ExpressExportv4 =>\n  isExpressRouterPrototype((express as ExpressExportv4).Router) && !isExpressWithRouterPrototype(express);\n\nfunction getStatusCodeFromResponse(error: MiddlewareError): number {\n  const statusCode = error.status || error.statusCode || error.status_code || error.output?.statusCode;\n  return statusCode ? parseInt(statusCode as string, 10) : 500;\n}\n\n/** Returns true if response code is internal server error */\nexport function defaultShouldHandleError(error: MiddlewareError): boolean {\n  const status = getStatusCodeFromResponse(error);\n  return status >= 500;\n}\n", "/**\n * Platform-portable Express tracing integration.\n *\n * @module\n *\n * This Sentry integration is a derivative work based on the OpenTelemetry\n * Express instrumentation.\n *\n * <https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-express>\n *\n * Extended under the terms of the Apache 2.0 license linked below:\n *\n * ----\n *\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Abstract this out because we call it in multiple places, and it's cheaper to\n * only do one time for any given request.\n */\n\nimport type { ExpressRequest } from './types';\nimport { getIsolationScope } from '../../currentScopes';\nimport { httpRequestToRequestData } from '../../utils/request';\n\n// TODO: consider moving this into a core util, eg\n// setSDKProcessingMetadataFromRequest(..), if other integrations need it.\nexport function setSDKProcessingMetadata(request: ExpressRequest) {\n  const sdkProcMeta = getIsolationScope()?.getScopeData()?.sdkProcessingMetadata;\n  if (!sdkProcMeta?.normalizedRequest) {\n    const normalizedRequest = httpRequestToRequestData(request);\n    getIsolationScope().setSDKProcessingMetadata({ normalizedRequest });\n  }\n}\n", "/**\n * Platform-portable Express tracing integration.\n *\n * @module\n *\n * This Sentry integration is a derivative work based on the OpenTelemetry\n * Express instrumentation.\n *\n * <https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-express>\n *\n * Extended under the terms of the Apache 2.0 license linked below:\n *\n * ----\n *\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DEBUG_BUILD } from '../../debug-build';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../../semanticAttributes';\nimport { SPAN_STATUS_ERROR, startSpanManual, withActiveSpan } from '../../tracing';\nimport { debug } from '../../utils/debug-logger';\nimport type { SpanAttributes } from '../../types/span';\nimport { getActiveSpan } from '../../utils/spanUtils';\nimport { getStoredLayers, storeLayer } from './request-layer-store';\nimport {\n  type ExpressRequest,\n  type ExpressResponse,\n  type ExpressIntegrationOptions,\n  type ExpressLayer,\n  ATTR_HTTP_ROUTE,\n  ATTR_EXPRESS_TYPE,\n  ATTR_EXPRESS_NAME,\n  ExpressLayerType_ROUTER,\n} from './types';\nimport {\n  asErrorAndMessage,\n  getActualMatchedRoute,\n  getConstructedRoute,\n  getLayerMetadata,\n  isLayerIgnored,\n} from './utils';\nimport { getIsolationScope } from '../../currentScopes';\nimport { getDefaultIsolationScope } from '../../defaultScopes';\nimport { getOriginalFunction, markFunctionWrapped } from '../../utils/object';\nimport { setSDKProcessingMetadata } from './set-sdk-processing-metadata';\n\nexport type ExpressPatchLayerOptions = Pick<\n  ExpressIntegrationOptions,\n  'onRouteResolved' | 'ignoreLayers' | 'ignoreLayersType'\n>;\n\nexport function patchLayer(\n  getOptions: () => ExpressPatchLayerOptions,\n  maybeLayer?: ExpressLayer,\n  layerPath?: string,\n): void {\n  if (!maybeLayer?.handle) {\n    return;\n  }\n  const layer = maybeLayer;\n\n  const layerHandleOriginal = layer.handle;\n\n  // avoid patching multiple times the same layer\n  if (getOriginalFunction(layerHandleOriginal)) {\n    return;\n  }\n\n  if (layerHandleOriginal.length === 4) {\n    // todo: instrument error handlers\n    return;\n  }\n\n  function layerHandlePatched(\n    this: ExpressLayer,\n    req: ExpressRequest,\n    res: ExpressResponse,\n    //oxlint-disable-next-line no-explicit-any\n    ...otherArgs: any[]\n  ) {\n    const options = getOptions();\n\n    // Set normalizedRequest here because expressRequestHandler middleware\n    // (registered via setupExpressErrorHandler) is added after routes and\n    // therefore never runs for successful requests — route handlers typically\n    // send a response without calling next(). It would be safe to set this\n    // multiple times, since the data is identical, but more performant not to.\n    setSDKProcessingMetadata(req);\n\n    // Only create spans when there's an active parent span\n    // Without a parent span, this request is being ignored, so skip it\n    const parentSpan = getActiveSpan();\n    if (!parentSpan) {\n      return layerHandleOriginal.apply(this, [req, res, ...otherArgs]);\n    }\n\n    if (layerPath) {\n      storeLayer(req, layerPath);\n    }\n    const storedLayers = getStoredLayers(req);\n    const isLayerPathStored = !!layerPath;\n\n    const constructedRoute = getConstructedRoute(req);\n    const actualMatchedRoute = getActualMatchedRoute(req, constructedRoute);\n\n    options.onRouteResolved?.(actualMatchedRoute);\n\n    const metadata = getLayerMetadata(constructedRoute, layer, layerPath);\n    const name = metadata.attributes[ATTR_EXPRESS_NAME];\n    const type = metadata.attributes[ATTR_EXPRESS_TYPE];\n    const attributes: SpanAttributes = Object.assign(metadata.attributes, {\n      [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.express',\n      [SEMANTIC_ATTRIBUTE_SENTRY_OP]: `${type}.express`,\n    });\n    if (actualMatchedRoute) {\n      attributes[ATTR_HTTP_ROUTE] = actualMatchedRoute;\n    }\n\n    // verify against the config if the layer should be ignored\n    if (isLayerIgnored(metadata.attributes[ATTR_EXPRESS_NAME], type, options)) {\n      // XXX: the isLayerPathStored guard here is *not* present in the\n      // original @opentelemetry/instrumentation-express impl, but was\n      // suggested by the Sentry code review bot. It appears to correctly\n      // prevent improper layer calculation in the case where there's a\n      // middleware without a layerPath argument. It's unclear whether\n      // that's possible, or if any existing code depends on that \"bug\".\n      if (isLayerPathStored) {\n        storedLayers.pop();\n      }\n      return layerHandleOriginal.apply(this, [req, res, ...otherArgs]);\n    }\n\n    const currentScope = getIsolationScope();\n    if (currentScope !== getDefaultIsolationScope()) {\n      if (type === 'request_handler') {\n        // type cast b/c Otel unfortunately types info.request as any :(\n        const method = req.method ? req.method.toUpperCase() : 'GET';\n        currentScope.setTransactionName(`${method} ${constructedRoute}`);\n      }\n    } else {\n      DEBUG_BUILD && debug.warn('Isolation scope is still default isolation scope - skipping setting transactionName');\n    }\n\n    return startSpanManual({ name, attributes }, span => {\n      let spanHasEnded = false;\n      // TODO: Fix router spans (getRouterPath does not work properly) to\n      // have useful names before removing this branch\n      if (metadata.attributes[ATTR_EXPRESS_TYPE] === ExpressLayerType_ROUTER) {\n        span.end();\n        spanHasEnded = true;\n      }\n      // listener for response.on('finish')\n      const onResponseFinish = () => {\n        if (!spanHasEnded) {\n          spanHasEnded = true;\n          span.end();\n        }\n      };\n\n      // verify we have a callback\n      for (let i = 0; i < otherArgs.length; i++) {\n        const callback = otherArgs[i] as Function;\n        if (typeof callback !== 'function') {\n          continue;\n        }\n\n        //oxlint-disable-next-line no-explicit-any\n        otherArgs[i] = function (...args: any[]) {\n          // express considers anything but an empty value, \"route\" or \"router\"\n          // passed to its callback to be an error\n          const maybeError = args[0];\n          const isError = !!maybeError && maybeError !== 'route' && maybeError !== 'router';\n          if (!spanHasEnded && isError) {\n            const [_, message] = asErrorAndMessage(maybeError);\n            // intentionally do not record the exception here, because\n            // the error handler we assign does that, provided the user\n            // correctly calls setupExpressErrorHandler.\n            // TODO: A future enhancement can automatically attach\n            // the error handler if we detect that it has not been added.\n            span.setStatus({\n              code: SPAN_STATUS_ERROR,\n              message,\n            });\n          }\n\n          if (!spanHasEnded) {\n            spanHasEnded = true;\n            res.removeListener('finish', onResponseFinish);\n            span.end();\n          }\n          if (!(req.route && isError) && isLayerPathStored) {\n            storedLayers.pop();\n          }\n          // execute the callback back in the parent's scope, so that\n          // we bubble up each level as next() is called.\n          return withActiveSpan(parentSpan, () => callback.apply(this, args));\n        };\n        break;\n      }\n\n      try {\n        return layerHandleOriginal.apply(this, [req, res, ...otherArgs]);\n      } catch (anyError) {\n        const [_, message] = asErrorAndMessage(anyError);\n        // intentionally do not record the exception here, because\n        // the error handler we assign does that, provided the user\n        // correctly calls setupExpressErrorHandler.\n        // TODO: A future enhancement can automatically attach\n        // the error handler if we detect that it has not been added.\n        span.setStatus({\n          code: SPAN_STATUS_ERROR,\n          message,\n        });\n        throw anyError;\n        /* v8 ignore next - it sees the block end at the throw */\n      } finally {\n        // At this point if the callback wasn't called, that means\n        // either the layer is asynchronous (so it will call the\n        // callback later on) or that the layer directly ends the\n        // http response, so we'll hook into the \"finish\" event to\n        // handle the later case.\n        if (!spanHasEnded) {\n          res.once('finish', onResponseFinish);\n        }\n      }\n    });\n  }\n\n  // `handle` isn't just a regular function in some cases. It also contains\n  // some properties holding metadata and state so we need to proxy them\n  // through through patched function. Use a for-in to also pick up properties\n  // that other libraries might add to the prototype before we instrument.\n  // ref: https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1950\n  // ref: https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2271\n  // oxlint-disable-next-line guard-for-in\n  for (const key in layerHandleOriginal as Function & Record<string, unknown>) {\n    // skip standard function prototype fields that both have\n    if (key in layerHandlePatched) {\n      continue;\n    }\n    Object.defineProperty(layerHandlePatched, key, {\n      get() {\n        return layerHandleOriginal[key];\n      },\n      set(value) {\n        layerHandleOriginal[key] = value;\n      },\n    });\n  }\n\n  markFunctionWrapped(layerHandlePatched, layerHandleOriginal);\n\n  Object.defineProperty(layer, 'handle', {\n    enumerable: true,\n    configurable: true,\n    writable: true,\n    value: layerHandlePatched,\n  });\n}\n", "/**\n * Often we patch a module's default export, but we want to be able to do\n * something like this:\n *\n * ```ts\n * patchTheThing(await import('the-thing'));\n * ```\n *\n * Or like this:\n *\n * ```ts\n * import theThing from 'the-thing';\n * patchTheThing(theThing);\n * ```\n *\n * Note: this does not support modules with a falsey default export. However,\n * presumably in those cases, there's no default export to patch anyway.\n */\nexport function getDefaultExport<T>(moduleExport: T | { default: T }): T {\n  return (\n    (!!moduleExport &&\n      typeof moduleExport === 'object' &&\n      'default' in moduleExport &&\n      (moduleExport as { default: T }).default) ||\n    (moduleExport as T)\n  );\n}\n", "/**\n * Platform-portable Express tracing integration.\n *\n * @module\n *\n * This Sentry integration is a derivative work based on the OpenTelemetry\n * Express instrumentation.\n *\n * <https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-express>\n *\n * Extended under the terms of the Apache 2.0 license linked below:\n *\n * ----\n *\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { debug } from '../../utils/debug-logger';\nimport { captureException } from '../../exports';\nimport { getClient } from '../../currentScopes';\nimport { DEBUG_BUILD } from '../../debug-build';\nimport type {\n  ExpressApplication,\n  ExpressErrorMiddleware,\n  ExpressHandlerOptions,\n  ExpressIntegration,\n  ExpressIntegrationOptions,\n  ExpressLayer,\n  ExpressMiddleware,\n  ExpressModuleExport,\n  ExpressRequest,\n  ExpressResponse,\n  ExpressRouter,\n  ExpressRouterv4,\n  ExpressRouterv5,\n  ExpressShouldHandleError,\n  MiddlewareError,\n} from './types';\nimport {\n  defaultShouldHandleError,\n  getLayerPath,\n  isExpressWithoutRouterPrototype,\n  isExpressWithRouterPrototype,\n} from './utils';\nimport { wrapMethod } from '../../utils/object';\nimport { patchLayer } from './patch-layer';\nimport { setSDKProcessingMetadata } from './set-sdk-processing-metadata';\nimport { getDefaultExport } from '../../utils/get-default-export';\n\nfunction isLegacyOptions(\n  options: ExpressModuleExport | (ExpressIntegrationOptions & { express: ExpressModuleExport }),\n): options is ExpressIntegrationOptions & { express: ExpressModuleExport } {\n  return !!(options as { express: ExpressModuleExport }).express;\n}\n\n// TODO: remove this deprecation handling in v11\nlet didLegacyDeprecationWarning = false;\nfunction deprecationWarning() {\n  if (!didLegacyDeprecationWarning) {\n    didLegacyDeprecationWarning = true;\n    DEBUG_BUILD &&\n      debug.warn(\n        '[Express] `patchExpressModule(options)` is deprecated. Use `patchExpressModule(moduleExports, getOptions)` instead.',\n      );\n  }\n}\n\n/**\n * This is a portable instrumentatiton function that works in any environment\n * where Express can be loaded, without depending on OpenTelemetry.\n *\n * @example\n * ```javascript\n * import express from 'express';\n * import * as Sentry from '@sentry/deno'; // or any SDK that extends core\n *\n * Sentry.patchExpressModule(express, () => ({}));\n * ```\n */\nexport function patchExpressModule(\n  moduleExports: ExpressModuleExport,\n  getOptions: () => ExpressIntegrationOptions,\n): ExpressModuleExport;\n/**\n * @deprecated Pass the Express module export as the first argument and options getter as the second argument.\n */\nexport function patchExpressModule(\n  options: ExpressIntegrationOptions & { express: ExpressModuleExport },\n): ExpressModuleExport;\nexport function patchExpressModule(\n  optionsOrExports: ExpressModuleExport | (ExpressIntegrationOptions & { express: ExpressModuleExport }),\n  maybeGetOptions?: () => ExpressIntegrationOptions,\n): ExpressModuleExport {\n  let getOptions: () => ExpressIntegrationOptions;\n  let moduleExports: ExpressModuleExport;\n  if (!maybeGetOptions && isLegacyOptions(optionsOrExports)) {\n    // eslint-disable-next-line typescript/no-deprecated\n    const { express, ...options } = optionsOrExports;\n    moduleExports = express;\n    getOptions = () => options;\n    deprecationWarning();\n  } else if (typeof maybeGetOptions !== 'function') {\n    throw new TypeError('`patchExpressModule(moduleExports, getOptions)` requires a `getOptions` callback');\n  } else {\n    getOptions = maybeGetOptions;\n    moduleExports = optionsOrExports as ExpressModuleExport;\n  }\n\n  // pass in the require() or import() result of express\n  const express = getDefaultExport(moduleExports);\n  const routerProto: ExpressRouterv4 | ExpressRouterv5 | undefined = isExpressWithRouterPrototype(express)\n    ? express.Router.prototype // Express v5\n    : isExpressWithoutRouterPrototype(express)\n      ? express.Router // Express v4\n      : undefined;\n\n  if (!routerProto) {\n    throw new TypeError('no valid Express route function to instrument');\n  }\n\n  // oxlint-disable-next-line @typescript-eslint/unbound-method\n  const originalRouteMethod = routerProto.route;\n  try {\n    wrapMethod(\n      routerProto,\n      'route',\n      function routeTrace(this: ExpressRouter, ...args: Parameters<typeof originalRouteMethod>[]) {\n        const route = originalRouteMethod.apply(this, args);\n        const layer = this.stack[this.stack.length - 1] as ExpressLayer;\n        patchLayer(getOptions, layer, getLayerPath(args));\n        return route;\n      },\n    );\n  } catch (e) {\n    DEBUG_BUILD && debug.error('Failed to patch express route method:', e);\n  }\n\n  // oxlint-disable-next-line @typescript-eslint/unbound-method\n  const originalRouterUse = routerProto.use;\n  try {\n    wrapMethod(\n      routerProto,\n      'use',\n      function useTrace(this: ExpressApplication, ...args: Parameters<typeof originalRouterUse>) {\n        const route = originalRouterUse.apply(this, args);\n        const layer = this.stack[this.stack.length - 1];\n        if (!layer) {\n          return route;\n        }\n        patchLayer(getOptions, layer, getLayerPath(args));\n        return route;\n      },\n    );\n  } catch (e) {\n    DEBUG_BUILD && debug.error('Failed to patch express use method:', e);\n  }\n\n  const { application } = express;\n  const originalApplicationUse = application.use;\n  try {\n    wrapMethod(\n      application,\n      'use',\n      function appUseTrace(\n        this: ExpressApplication & {\n          _router?: ExpressRouter;\n          router?: ExpressRouter;\n        },\n        ...args: Parameters<ExpressApplication['use']>\n      ) {\n        // If we access app.router in express 4.x we trigger an assertion error.\n        // This property existed in v3, was removed in v4 and then re-added in v5.\n        const route = originalApplicationUse.apply(this, args);\n        const router = isExpressWithRouterPrototype(express) ? this.router : this._router;\n        if (router) {\n          const layer = router.stack[router.stack.length - 1];\n          if (layer) {\n            patchLayer(getOptions, layer, getLayerPath(args));\n          }\n        }\n        return route;\n      },\n    );\n  } catch (e) {\n    DEBUG_BUILD && debug.error('Failed to patch express application.use method:', e);\n  }\n\n  return express;\n}\n\n/**\n * The `shouldHandleError` configured on the registered Express integration, if any.\n *\n * The integration is defined per platform (e.g. `expressIntegration()` in `@sentry/node`), so it is\n * looked up by name here — the same way `getIntegrationByName` is used for `VercelAI` and\n * `ProfilingIntegration`.\n */\nfunction getIntegrationShouldHandleError(): ExpressShouldHandleError | undefined {\n  return getClient()?.getIntegrationByName<ExpressIntegration>('Express')?.getShouldHandleError?.();\n}\n\n/**\n * An Express-compatible error handler, used by setupExpressErrorHandler\n */\nexport function expressErrorHandler(options?: ExpressHandlerOptions): ExpressErrorMiddleware {\n  return function sentryErrorMiddleware(\n    error: MiddlewareError,\n    request: ExpressRequest,\n    res: ExpressResponse,\n    next: (error: MiddlewareError) => void,\n  ): void {\n    // When an error happens, the `expressRequestHandler` middleware does not run, so we set it here too\n    setSDKProcessingMetadata(request);\n    const shouldHandleError =\n      // oxlint-disable-next-line typescript/no-deprecated\n      options?.shouldHandleError ?? getIntegrationShouldHandleError() ?? defaultShouldHandleError;\n\n    if (shouldHandleError === false) {\n      next(error);\n      return;\n    }\n\n    if (shouldHandleError(error)) {\n      const eventId = captureException(error, {\n        mechanism: { type: 'auto.middleware.express', handled: false },\n      });\n      (res as { sentry?: string }).sentry = eventId;\n    }\n\n    next(error);\n  };\n}\n\n/**\n * Add an Express error handler to capture errors to Sentry.\n *\n * The error handler must be before any other middleware and after all controllers.\n *\n * @param app The Express instances\n * @param options {ExpressHandlerOptions} Configuration options for the handler\n *\n * @example\n * ```javascript\n * import * as Sentry from 'sentry/deno'; // or any other @sentry/<platform>\n * import * as express from 'express';\n *\n * Sentry.instrumentExpress(express);\n *\n * const app = express();\n *\n * // Add your routes, etc.\n *\n * // Add this after all routes,\n * // but before any and other error-handling middlewares are defined\n * Sentry.setupExpressErrorHandler(app);\n *\n * app.listen(3000);\n * ```\n */\nexport function setupExpressErrorHandler(\n  app: {\n    //oxlint-disable-next-line no-explicit-any\n    use: (middleware: any) => unknown;\n  },\n  options?: ExpressHandlerOptions,\n): void {\n  app.use(expressRequestHandler());\n  app.use(expressErrorHandler(options));\n}\n\nfunction expressRequestHandler(): ExpressMiddleware {\n  return function sentryRequestMiddleware(request: ExpressRequest, _res: ExpressResponse, next: () => void): void {\n    setSDKProcessingMetadata(request);\n    next();\n  };\n}\n", "// Portable instrumentation for https://github.com/porsager/postgres\n// This can be used in any environment (Node.js, Cloudflare Workers, etc.)\n// without depending on OpenTelemetry module hooking.\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../semanticAttributes';\nimport { SPAN_STATUS_ERROR, startSpanManual } from '../tracing';\nimport type { Span } from '../types/span';\nimport { debug } from '../utils/debug-logger';\nimport { isObjectLike } from '../utils/is';\nimport { getActiveSpan } from '../utils/spanUtils';\n\nconst SQL_OPERATION_REGEX = /^(SELECT|INSERT|UPDATE|DELETE|CREATE|DROP|ALTER)/i;\n\nexport type PostgresConnectionContext = {\n  ATTR_DB_NAMESPACE?: string;\n  ATTR_SERVER_ADDRESS?: string;\n  ATTR_SERVER_PORT?: string;\n};\n\ninterface PostgresJsSqlInstrumentationOptions {\n  /**\n   * Whether to require a parent span for the instrumentation.\n   * If set to true, the instrumentation will only create spans if there is a parent span\n   * available in the current scope.\n   * @default true\n   */\n  requireParentSpan?: boolean;\n  /**\n   * Hook to modify the span before it is started.\n   * This can be used to set additional attributes or modify the span in any way.\n   */\n  requestHook?: (span: Span, sanitizedSqlQuery: string, postgresConnectionContext?: PostgresConnectionContext) => void;\n}\n\nconst CONNECTION_CONTEXT_SYMBOL = Symbol('sentryPostgresConnectionContext');\n\n// Use the same Symbol.for() markers as the Node.js OTel instrumentation\n// so that both approaches recognize each other and prevent double-wrapping.\nconst INSTRUMENTED_MARKER = Symbol.for('sentry.instrumented.postgresjs');\n// Marker to track if a query was created from an instrumented sql instance.\n// This prevents double-spanning when both the wrapper and the Node.js Query.prototype\n// fallback patch are active simultaneously.\nconst QUERY_FROM_INSTRUMENTED_SQL = Symbol.for('sentry.query.from.instrumented.sql');\n\n/**\n * Instruments a postgres.js `sql` instance with Sentry tracing.\n *\n * This is a portable instrumentation function that works in any environment\n * (Node.js, Cloudflare Workers, etc.) without depending on OpenTelemetry.\n *\n * @example\n * ```javascript\n * import postgres from 'postgres';\n * import * as Sentry from '@sentry/cloudflare'; // or '@sentry/deno'\n *\n * const sql = Sentry.instrumentPostgresJsSql(\n *   postgres({ host: 'localhost', database: 'mydb' })\n * );\n *\n * // All queries now create Sentry spans\n * await sql`SELECT * FROM users WHERE id = ${userId}`;\n * ```\n */\nexport function instrumentPostgresJsSql<T>(sql: T, options?: PostgresJsSqlInstrumentationOptions): T {\n  if (!sql || typeof sql !== 'function') {\n    DEBUG_BUILD && debug.warn('instrumentPostgresJsSql: provided value is not a valid postgres.js sql instance');\n    return sql;\n  }\n\n  return _instrumentSqlInstance(sql, { requireParentSpan: true, ...options }) as T;\n}\n\n/**\n * Instruments a sql instance by wrapping its query execution methods.\n */\nfunction _instrumentSqlInstance(\n  sql: unknown,\n  options: PostgresJsSqlInstrumentationOptions,\n  parentConnectionContext?: PostgresConnectionContext,\n): unknown {\n  // Check if already instrumented to prevent double-wrapping\n  // Using Symbol.for() ensures the marker survives proxying\n  if ((sql as Record<symbol, unknown>)[INSTRUMENTED_MARKER]) {\n    return sql;\n  }\n\n  // Wrap the sql function to intercept query creation\n  const proxiedSql: unknown = new Proxy(sql as (...args: unknown[]) => unknown, {\n    apply(target, thisArg, argumentsList: unknown[]) {\n      const query = Reflect.apply(target, thisArg, argumentsList);\n\n      if (isObjectLike(query) && 'handle' in query) {\n        _wrapSingleQueryHandle(query as { handle: unknown; strings?: string[] }, proxiedSql, options);\n      }\n\n      return query;\n    },\n    get(target, prop) {\n      const original = (target as unknown as Record<string | symbol, unknown>)[prop];\n\n      if (typeof prop !== 'string' || typeof original !== 'function') {\n        return original;\n      }\n\n      // Wrap methods that return PendingQuery objects (unsafe, file)\n      if (prop === 'unsafe' || prop === 'file') {\n        return _wrapQueryMethod(original as (...args: unknown[]) => unknown, target, proxiedSql, options);\n      }\n\n      // Wrap begin and reserve (not savepoint to avoid duplicate spans)\n      if (prop === 'begin' || prop === 'reserve') {\n        return _wrapCallbackMethod(original as (...args: unknown[]) => unknown, target, proxiedSql, options);\n      }\n\n      return original;\n    },\n  });\n\n  // Use provided parent context if available, otherwise extract from sql.options\n  if (parentConnectionContext) {\n    (proxiedSql as Record<symbol, unknown>)[CONNECTION_CONTEXT_SYMBOL] = parentConnectionContext;\n  } else {\n    _attachConnectionContext(sql, proxiedSql as Record<symbol, unknown>);\n  }\n\n  // Mark both the original and proxy as instrumented to prevent double-wrapping\n  (sql as Record<symbol, unknown>)[INSTRUMENTED_MARKER] = true;\n  (proxiedSql as Record<symbol, unknown>)[INSTRUMENTED_MARKER] = true;\n\n  return proxiedSql;\n}\n\n/**\n * Wraps query-returning methods (unsafe, file) to ensure their queries are instrumented.\n */\nfunction _wrapQueryMethod(\n  original: (...args: unknown[]) => unknown,\n  target: unknown,\n  proxiedSql: unknown,\n  options: PostgresJsSqlInstrumentationOptions,\n): (...args: unknown[]) => unknown {\n  return function (this: unknown, ...args: unknown[]): unknown {\n    const query = Reflect.apply(original, target, args);\n\n    if (isObjectLike(query) && 'handle' in query) {\n      _wrapSingleQueryHandle(query as { handle: unknown; strings?: string[] }, proxiedSql, options);\n    }\n\n    return query;\n  };\n}\n\n/**\n * Wraps callback-based methods (begin, reserve) to recursively instrument Sql instances.\n * Note: These methods can also be used as tagged templates, which we pass through unchanged.\n *\n * Savepoint is not wrapped to avoid complex nested transaction instrumentation issues.\n * Queries within savepoint callbacks are still instrumented through the parent transaction's Sql instance.\n */\nfunction _wrapCallbackMethod(\n  original: (...args: unknown[]) => unknown,\n  target: unknown,\n  parentSqlInstance: unknown,\n  options: PostgresJsSqlInstrumentationOptions,\n): (...args: unknown[]) => unknown {\n  return function (this: unknown, ...args: unknown[]): unknown {\n    // Extract parent context to propagate to child instances\n    const parentContext = (parentSqlInstance as Record<symbol, unknown>)[CONNECTION_CONTEXT_SYMBOL] as\n      | PostgresConnectionContext\n      | undefined;\n\n    // Check if this is a callback-based call by verifying the last argument is a function\n    const isCallbackBased = typeof args[args.length - 1] === 'function';\n\n    if (!isCallbackBased) {\n      // Not a callback-based call - could be tagged template or promise-based\n      const result = Reflect.apply(original, target, args);\n      // If result is a Promise (e.g., reserve() without callback), instrument the resolved Sql instance\n      if (result && typeof (result as Promise<unknown>).then === 'function') {\n        return (result as Promise<unknown>).then((sqlInstance: unknown) => {\n          return _instrumentSqlInstance(sqlInstance, options, parentContext);\n        });\n      }\n      return result;\n    }\n\n    // Callback-based call: wrap the callback to instrument the Sql instance\n    const callback = (args.length === 1 ? args[0] : args[1]) as (sql: unknown) => unknown;\n    const wrappedCallback = function (sqlInstance: unknown): unknown {\n      const instrumentedSql = _instrumentSqlInstance(sqlInstance, options, parentContext);\n      return callback(instrumentedSql);\n    };\n\n    const newArgs = args.length === 1 ? [wrappedCallback] : [args[0], wrappedCallback];\n    return Reflect.apply(original, target, newArgs);\n  };\n}\n\n/**\n * Wraps a single query's handle method to create spans.\n */\nfunction _wrapSingleQueryHandle(\n  query: { handle: unknown; strings?: string[]; __sentryWrapped?: boolean },\n  sqlInstance: unknown,\n  options: PostgresJsSqlInstrumentationOptions,\n): void {\n  // Prevent double wrapping - check if the handle itself is already wrapped\n  if ((query.handle as { __sentryWrapped?: boolean })?.__sentryWrapped) {\n    return;\n  }\n\n  // Mark this query as coming from an instrumented sql instance.\n  // This prevents the Node.js Query.prototype fallback patch from double-spanning.\n  (query as Record<symbol, unknown>)[QUERY_FROM_INSTRUMENTED_SQL] = true;\n\n  const originalHandle = query.handle as (...args: unknown[]) => Promise<unknown>;\n\n  // IMPORTANT: We must replace the handle function directly, not use a Proxy,\n  // because Query.then() internally calls this.handle(), which would bypass a Proxy wrapper.\n  const wrappedHandle = async function (this: { executed?: boolean }, ...args: unknown[]): Promise<unknown> {\n    // postgres.js calls handle() from then/catch/finally — only the first call executes SQL,\n    // subsequent calls are no-ops (guarded by this.executed). Skip span creation for no-ops.\n    if (this.executed || !_shouldCreateSpans(options)) {\n      return originalHandle.apply(this, args);\n    }\n\n    const fullQuery = _reconstructQuery(query.strings);\n    const sanitizedSqlQuery = _sanitizeSqlQuery(fullQuery);\n\n    return startSpanManual(\n      {\n        name: sanitizedSqlQuery || 'postgresjs.query',\n        op: 'db',\n      },\n      (span: Span) => {\n        span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.db.postgresjs');\n\n        span.setAttributes({\n          'db.system.name': 'postgres',\n          'db.query.text': sanitizedSqlQuery,\n        });\n\n        const connectionContext = sqlInstance\n          ? ((sqlInstance as Record<symbol, unknown>)[CONNECTION_CONTEXT_SYMBOL] as\n              | PostgresConnectionContext\n              | undefined)\n          : undefined;\n\n        _setConnectionAttributes(span, connectionContext);\n\n        if (options.requestHook) {\n          try {\n            options.requestHook(span, sanitizedSqlQuery, connectionContext);\n          } catch (e) {\n            span.setAttribute('sentry.hook.error', 'requestHook failed');\n            DEBUG_BUILD && debug.error('Error in requestHook for PostgresJs instrumentation:', e);\n          }\n        }\n\n        const queryWithCallbacks = this as {\n          resolve: unknown;\n          reject: unknown;\n        };\n\n        queryWithCallbacks.resolve = new Proxy(queryWithCallbacks.resolve as (...args: unknown[]) => unknown, {\n          apply: (resolveTarget, resolveThisArg, resolveArgs: [{ command?: string }]) => {\n            try {\n              _setOperationName(span, sanitizedSqlQuery, resolveArgs?.[0]?.command);\n              span.end();\n            } catch (e) {\n              DEBUG_BUILD && debug.error('Error ending span in resolve callback:', e);\n            }\n\n            return Reflect.apply(resolveTarget, resolveThisArg, resolveArgs);\n          },\n        });\n\n        queryWithCallbacks.reject = new Proxy(queryWithCallbacks.reject as (...args: unknown[]) => unknown, {\n          apply: (rejectTarget, rejectThisArg, rejectArgs: { message?: string; code?: string; name?: string }[]) => {\n            try {\n              span.setStatus({\n                code: SPAN_STATUS_ERROR,\n                message: rejectArgs?.[0]?.message || 'unknown_error',\n              });\n\n              span.setAttribute('db.response.status_code', rejectArgs?.[0]?.code || 'unknown');\n              span.setAttribute('error.type', rejectArgs?.[0]?.name || 'unknown');\n\n              _setOperationName(span, sanitizedSqlQuery);\n              span.end();\n            } catch (e) {\n              DEBUG_BUILD && debug.error('Error ending span in reject callback:', e);\n            }\n            return Reflect.apply(rejectTarget, rejectThisArg, rejectArgs);\n          },\n        });\n\n        // Handle synchronous errors that might occur before promise is created\n        try {\n          return originalHandle.apply(this, args);\n        } catch (e) {\n          span.setStatus({\n            code: SPAN_STATUS_ERROR,\n            message: e instanceof Error ? e.message : 'unknown_error',\n          });\n          span.end();\n          throw e;\n        }\n      },\n    );\n  };\n\n  (wrappedHandle as { __sentryWrapped?: boolean }).__sentryWrapped = true;\n  query.handle = wrappedHandle;\n}\n\n/**\n * Determines whether a span should be created based on the current context.\n * If `requireParentSpan` is set to true in the options, a span will\n * only be created if there is a parent span available.\n */\nfunction _shouldCreateSpans(options: PostgresJsSqlInstrumentationOptions): boolean {\n  const hasParentSpan = getActiveSpan() !== undefined;\n  return hasParentSpan || !options.requireParentSpan;\n}\n\n/**\n * Reconstructs the full SQL query from template strings with PostgreSQL placeholders.\n *\n * For sql`SELECT * FROM users WHERE id = ${123} AND name = ${'foo'}`:\n *   strings = [\"SELECT * FROM users WHERE id = \", \" AND name = \", \"\"]\n *   returns: \"SELECT * FROM users WHERE id = $1 AND name = $2\"\n *\n * @internal Exported for testing only\n */\nexport function _reconstructQuery(strings: string[] | undefined): string | undefined {\n  if (!strings?.length) {\n    return undefined;\n  }\n  if (strings.length === 1) {\n    return strings[0] || undefined;\n  }\n  // Join template parts with PostgreSQL placeholders ($1, $2, etc.)\n  return strings.reduce((acc, str, i) => (i === 0 ? str : `${acc}$${i}${str}`), '');\n}\n\nlet integerLiteralRE: RegExp | undefined;\n\n/**\n * Sanitize SQL query as per the OTEL semantic conventions\n * https://opentelemetry.io/docs/specs/semconv/database/database-spans/#sanitization-of-dbquerytext\n *\n * PostgreSQL $n placeholders are preserved per OTEL spec - they're parameterized queries,\n * not sensitive literals. Only actual values (strings, numbers, booleans) are sanitized.\n *\n * @internal Exported for testing only\n */\nexport function _sanitizeSqlQuery(sqlQuery: string | undefined): string {\n  if (!sqlQuery) {\n    return 'Unknown SQL Query';\n  }\n\n  // Lazy init: constructing this at module scope would evaluate the lookbehind\n  // on import and crash Safari <16.4 browser bundles that reach this file via\n  // the core barrel. Building it on first call keeps the cost off the import path.\n  if (!integerLiteralRE) {\n    integerLiteralRE = new RegExp('(?<!\\\\$)-?\\\\b\\\\d+\\\\b', 'g');\n  }\n\n  return (\n    sqlQuery\n      // Remove comments first (they may contain newlines and extra spaces)\n      .replace(/--.*$/gm, '') // Single line comments (multiline mode)\n      .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '') // Multi-line comments\n      .replace(/;\\s*$/, '') // Remove trailing semicolons\n      // Collapse whitespace to a single space (after removing comments)\n      .replace(/\\s+/g, ' ')\n      .trim() // Remove extra spaces and trim\n      // Sanitize hex/binary literals before string literals\n      .replace(/\\bX'[0-9A-Fa-f]*'/gi, '?') // Hex string literals\n      .replace(/\\bB'[01]*'/gi, '?') // Binary string literals\n      // Sanitize string literals (handles escaped quotes)\n      .replace(/'(?:[^']|'')*'/g, '?')\n      // Sanitize hex numbers\n      .replace(/\\b0x[0-9A-Fa-f]+/gi, '?')\n      // Sanitize boolean literals\n      .replace(/\\b(?:TRUE|FALSE)\\b/gi, '?')\n      // Sanitize numeric literals (preserve $n placeholders via negative lookbehind)\n      .replace(/-?\\b\\d+\\.?\\d*[eE][+-]?\\d+\\b/g, '?') // Scientific notation\n      .replace(/-?\\b\\d+\\.\\d+\\b/g, '?') // Decimals\n      .replace(/-?\\.\\d+\\b/g, '?') // Decimals starting with dot\n      .replace(integerLiteralRE, '?') // Integers (NOT $n placeholders)\n      // Collapse IN clauses for cardinality (both ? and $n variants)\n      .replace(/\\bIN\\b\\s*\\(\\s*\\?(?:\\s*,\\s*\\?)*\\s*\\)/gi, 'IN (?)')\n      .replace(/\\bIN\\b\\s*\\(\\s*\\$\\d+(?:\\s*,\\s*\\$\\d+)*\\s*\\)/gi, 'IN ($?)')\n  );\n}\n\n/**\n * Sets connection context attributes on a span.\n *\n * @internal Exported for the orchestrion (diagnostics-channel) integration.\n */\nexport function _setConnectionAttributes(span: Span, connectionContext: PostgresConnectionContext | undefined): void {\n  if (!connectionContext) {\n    return;\n  }\n  if (connectionContext.ATTR_DB_NAMESPACE) {\n    span.setAttribute('db.namespace', connectionContext.ATTR_DB_NAMESPACE);\n  }\n  if (connectionContext.ATTR_SERVER_ADDRESS) {\n    span.setAttribute('server.address', connectionContext.ATTR_SERVER_ADDRESS);\n  }\n  if (connectionContext.ATTR_SERVER_PORT !== undefined) {\n    // Port is stored as string in PostgresConnectionContext for requestHook backwards compatibility,\n    // but semantic conventions expect port as a number for span attributes\n    const portNumber = parseInt(connectionContext.ATTR_SERVER_PORT, 10);\n    if (!isNaN(portNumber)) {\n      span.setAttribute('server.port', portNumber);\n    }\n  }\n}\n\n/**\n * Extracts DB operation name from SQL query and sets it on the span.\n *\n * @internal Exported for the orchestrion (diagnostics-channel) integration.\n */\nexport function _setOperationName(span: Span, sanitizedQuery: string | undefined, command?: string): void {\n  if (command) {\n    span.setAttribute('db.operation.name', command);\n    return;\n  }\n  // Fallback: extract operation from the SQL query\n  const operationMatch = sanitizedQuery?.match(SQL_OPERATION_REGEX);\n  if (operationMatch?.[1]) {\n    span.setAttribute('db.operation.name', operationMatch[1].toUpperCase());\n  }\n}\n\n/**\n * Builds a {@link PostgresConnectionContext} from postgres.js' parsed options\n * (which store `host`/`port` as arrays). Defaults to 'localhost'/5432.\n *\n * @internal Exported for the orchestrion (diagnostics-channel) integration.\n */\nexport function _buildConnectionContext(options: {\n  host?: string[];\n  port?: number[];\n  database?: string;\n}): PostgresConnectionContext {\n  const host = options.host?.[0] || 'localhost';\n  const port = options.port?.[0] || 5432;\n  return {\n    ATTR_DB_NAMESPACE: typeof options.database === 'string' && options.database !== '' ? options.database : undefined,\n    ATTR_SERVER_ADDRESS: host,\n    ATTR_SERVER_PORT: String(port),\n  };\n}\n\n/**\n * Extracts and stores connection context from sql.options.\n */\nfunction _attachConnectionContext(sql: unknown, proxiedSql: Record<symbol, unknown>): void {\n  const sqlInstance = sql as { options?: { host?: string[]; port?: number[]; database?: string } };\n  if (!sqlInstance.options || typeof sqlInstance.options !== 'object') {\n    return;\n  }\n\n  proxiedSql[CONNECTION_CONTEXT_SYMBOL] = _buildConnectionContext(sqlInstance.options);\n}\n", "export const LOG_PREFIX = '@sentry/instrumentation-http';\nexport const HTTP_ON_CLIENT_REQUEST = 'http.client.request.created';\nexport const HTTP_ON_SERVER_REQUEST = 'http.server.request.start';\nexport type ClientSubscriptionName = typeof HTTP_ON_CLIENT_REQUEST;\nexport type ServerSubscriptionName = typeof HTTP_ON_SERVER_REQUEST;\n", "import type { HttpClientRequest, HttpRequestOptions } from './types';\n\n/** Convert an outgoing request to request options. */\nexport function getRequestOptions(request: HttpClientRequest): HttpRequestOptions {\n  // request.host may be 'hostname:port' when the caller passed\n  // { host: 'hostname:port' } to http.request(). Split it so that\n  // `hostname` is always port-free (matching the http.RequestOptions contract)\n  // and the port is not lost when request.port is undefined.\n  const hostWithPort = request.host || '';\n  const portInHost = /^(.*):(\\d+)$/.exec(hostWithPort);\n  const hostname = portInHost ? portInHost[1] : hostWithPort;\n  const port = request.port ?? (portInHost ? Number(portInHost[2]) : undefined);\n\n  return {\n    method: request.method,\n    port,\n    protocol: request.protocol,\n    host: request.host,\n    hostname,\n    path: request.path,\n    headers: request.getHeaders(),\n  };\n}\n\nexport function getRequestUrl(requestOptions: HttpRequestOptions): string {\n  try {\n    return String(getRequestUrlObject(requestOptions));\n  } catch {\n    return '';\n  }\n}\n\nexport function getRequestUrlObject(requestOptions: HttpRequestOptions): URL {\n  const protocol = requestOptions.protocol || 'http:';\n  const hostHeader = requestOptions.headers?.host && String(requestOptions.headers?.host);\n  const hostname = hostHeader || requestOptions.hostname || requestOptions.host || '';\n  // Don't log standard :80 (http) and :443 (https) ports to reduce the noise\n  // Also don't add port if the hostname already includes a port\n  const port =\n    !requestOptions.port || requestOptions.port === 80 || requestOptions.port === 443 || /^(.*):(\\d+)$/.test(hostname)\n      ? ''\n      : `:${requestOptions.port}`;\n  const path = requestOptions.path ? requestOptions.path : '/';\n  const base = `${protocol}//${hostname}${port}`;\n  // A path starting with `//` (valid for e.g. S3 object keys) would otherwise be parsed as a\n  // protocol-relative reference, discarding the request's origin, so we resolve it against the origin.\n  return new URL(path.startsWith('//') ? `${base}${path}` : path, base);\n}\n\n/**\n * Build the full URL string from a Node.js ClientRequest.\n */\nexport function getRequestUrlFromClientRequest(request: HttpClientRequest): string {\n  return String(getRequestUrl(getRequestOptions(request)));\n}\n", "import { addBreadcrumb } from '../../breadcrumbs';\nimport { getBreadcrumbLogLevelFromHttpStatusCode } from '../../utils/breadcrumb-log-level';\nimport { filterCollectedUrlQuery } from '../../utils/data-collection/filterCollectedUrl';\nimport { getSanitizedUrlString, parseUrl } from '../../utils/url';\nimport { getRequestUrlFromClientRequest } from './get-request-url';\nimport type { HttpClientRequest, HttpIncomingMessage } from './types';\n\n/**\n * Create a breadcrumb for a finished outgoing HTTP request.\n */\nexport function addOutgoingRequestBreadcrumb(\n  request: HttpClientRequest,\n  response: HttpIncomingMessage | undefined,\n): void {\n  const url = getRequestUrlFromClientRequest(request);\n  const parsedUrl = parseUrl(url);\n\n  const statusCode = response?.statusCode;\n  const level = getBreadcrumbLogLevelFromHttpStatusCode(statusCode);\n\n  addBreadcrumb(\n    {\n      category: 'http',\n      data: {\n        status_code: statusCode,\n        url: getSanitizedUrlString(parsedUrl),\n        'http.method': request.method || 'GET',\n        ...(parsedUrl.search ? { 'http.query': filterCollectedUrlQuery(parsedUrl.search) } : {}),\n        ...(parsedUrl.hash ? { 'http.fragment': parsedUrl.hash } : {}),\n      },\n      type: 'http',\n      level,\n    },\n    {\n      event: 'response',\n      request,\n      response,\n    },\n  );\n}\n", "import type { Span, SpanAttributes } from '../../types/span';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP } from '../../semanticAttributes';\nimport { filterCollectedUrl } from '../../utils/data-collection/filterCollectedUrl';\nimport { getHttpSpanDetailsFromUrlObject, parseStringToURLObject } from '../../utils/url';\nimport type { HttpClientRequest, HttpIncomingMessage } from './types';\nimport { getRequestUrlFromClientRequest } from './get-request-url';\nimport type { StartSpanOptions } from '../../types/startSpanOptions';\n\n/**\n * Build the initial span name and attributes for an outgoing HTTP request.\n * This is called before the span is created, to get the initial details.\n */\nexport function getOutgoingRequestSpanData(request: HttpClientRequest): StartSpanOptions {\n  const url = getRequestUrlFromClientRequest(request);\n  const [name, attributes] = getHttpSpanDetailsFromUrlObject(\n    parseStringToURLObject(url),\n    'client',\n    'auto.http.client',\n    request,\n  );\n\n  const userAgent = request.getHeader('user-agent');\n\n  return {\n    name,\n    attributes: {\n      // TODO(v11): Update these to the Sentry semantic attributes for urls.\n      // https://getsentry.github.io/sentry-conventions/attributes/\n      [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.client',\n      'otel.kind': 'CLIENT',\n      'http.url': filterCollectedUrl(url),\n      'http.method': request.method,\n      'http.target': filterCollectedUrl(request.path || '/'),\n      'net.peer.name': request.host,\n      'http.host': request.getHeader('host') as string | undefined,\n      ...(userAgent ? { 'user_agent.original': userAgent as string } : {}),\n      ...attributes,\n    },\n    onlyIfParent: true,\n  };\n}\n\n/**\n * Add span attributes once the response is received.\n */\nexport function setIncomingResponseSpanData(response: HttpIncomingMessage, span: Span): void {\n  const { statusCode, statusMessage, httpVersion, socket } = response;\n  const transport = httpVersion?.toUpperCase() !== 'QUIC' ? 'ip_tcp' : 'ip_udp';\n\n  span.setAttributes({\n    'http.response.status_code': statusCode,\n    'network.protocol.version': httpVersion,\n    // TODO(v11): Update these to the Sentry semantic attributes for urls.\n    // https://getsentry.github.io/sentry-conventions/attributes/\n    'http.flavor': httpVersion,\n    'network.transport': transport,\n    'net.transport': transport,\n    'http.status_text': statusMessage?.toUpperCase(),\n    'http.status_code': statusCode,\n    ...getResponseContentLengthAttributes(response),\n    ...getSocketAttrs(socket),\n  });\n}\n\nfunction getSocketAttrs(socket: HttpIncomingMessage['socket']): SpanAttributes {\n  if (!socket) return {};\n  const { remoteAddress, remotePort } = socket;\n  return {\n    'network.peer.address': remoteAddress,\n    'network.peer.port': remotePort,\n    'net.peer.ip': remoteAddress,\n    'net.peer.port': remotePort,\n  };\n}\n\nfunction getResponseContentLengthAttributes(response: HttpIncomingMessage): SpanAttributes {\n  const { headers } = response;\n  const contentLengthHeader = headers['content-length'];\n  const length = contentLengthHeader ? parseInt(String(contentLengthHeader), 10) : -1;\n  const encoding = headers['content-encoding'];\n  return length >= 0\n    ? encoding && encoding !== 'identity'\n      ? { 'http.response_content_length': length }\n      : { 'http.response_content_length_uncompressed': length }\n    : {};\n}\n", "import type { LRUMap } from '../../utils/lru';\nimport { getClient } from '../../currentScopes';\nimport { DEBUG_BUILD } from '../../debug-build';\nimport { debug } from '../../utils/debug-logger';\nimport { isError } from '../../utils/is';\nimport { getTraceData } from '../../utils/traceData';\nimport { shouldPropagateTraceForUrl } from '../../utils/tracePropagationTargets';\nimport { LOG_PREFIX } from './constants';\nimport { getRequestUrlFromClientRequest } from './get-request-url';\nimport type { HttpClientRequest } from './types';\nimport { mergeBaggageHeaders } from '../../utils/baggage';\n\n/**\n * Inject Sentry trace-propagation headers into an outgoing request if the\n * target URL matches the configured `tracePropagationTargets`.\n *\n * Note: this must be called *before* calling `request.end()` (or firing the\n * `http.client.request.start` diagnostics channel), because at that point,\n * the headers have already been sent, and cannot be modified.\n */\nexport function injectTracePropagationHeaders(\n  request: HttpClientRequest,\n  propagationDecisionMap: LRUMap<string, boolean>,\n): void {\n  const url = getRequestUrlFromClientRequest(request);\n  const clientOptions = getClient()?.getOptions();\n  const { tracePropagationTargets, propagateTraceparent } = clientOptions ?? {};\n\n  if (!shouldPropagateTraceForUrl(url, tracePropagationTargets, propagationDecisionMap)) {\n    return;\n  }\n\n  const hasExistingSentryTraceHeader = !!request.getHeader('sentry-trace');\n\n  if (hasExistingSentryTraceHeader) {\n    // add nothing if there's already a sentry-trace header,\n    // or else baggage can be sent twice.\n    return;\n  }\n\n  const traceData = getTraceData({ propagateTraceparent });\n  if (!traceData) return;\n\n  const { 'sentry-trace': sentryTrace, baggage, traceparent } = traceData;\n\n  if (sentryTrace) {\n    try {\n      request.setHeader('sentry-trace', sentryTrace);\n      DEBUG_BUILD && debug.log(LOG_PREFIX, 'Added sentry-trace header');\n    } catch (e) {\n      DEBUG_BUILD &&\n        debug.error(LOG_PREFIX, 'Failed to set sentry-trace header:', isError(e) ? e.message : 'Unknown error');\n    }\n  }\n\n  if (traceparent && !request.getHeader('traceparent')) {\n    try {\n      request.setHeader('traceparent', traceparent);\n      DEBUG_BUILD && debug.log(LOG_PREFIX, 'Added traceparent header');\n    } catch (e) {\n      DEBUG_BUILD &&\n        debug.error(LOG_PREFIX, 'Failed to set traceparent header:', isError(e) ? e.message : 'Unknown error');\n    }\n  }\n\n  if (baggage) {\n    const merged = mergeBaggageHeaders(request.getHeader('baggage'), baggage);\n    if (merged) {\n      try {\n        request.setHeader('baggage', merged);\n        DEBUG_BUILD && debug.log(LOG_PREFIX, 'Added baggage header');\n      } catch (e) {\n        DEBUG_BUILD &&\n          debug.error(LOG_PREFIX, 'Failed to set baggage header:', isError(e) ? e.message : 'Unknown error');\n      }\n    }\n  }\n}\n", "import { DEBUG_BUILD } from '../../debug-build';\nimport { debug } from '../../utils/debug-logger';\nimport type { HttpModuleExport } from './types';\n\nconst isOtelWrapped = (fn: Function & { __unwrap?: Function }): fn is Function & { __unwrap: Function } =>\n  typeof fn.__unwrap === 'function';\n\n// exported for tess\nexport const warning =\n  'Double-wrapped http.client detected. Either disable spans in Sentry.httpIntegration, or disable the OpenTelemetry HTTP instrumentation. See: https://docs.sentry.io/platforms/javascript/guides/express/opentelemetry/custom-setup/#custom-http-instrumentation';\n\nlet didDoubleWrapWarning = false;\n// no-op in non-debug builds\nexport const doubleWrapWarning = DEBUG_BUILD\n  ? (http: HttpModuleExport) => {\n      if (!didDoubleWrapWarning) {\n        if (isOtelWrapped(http.request) || isOtelWrapped(http.get)) {\n          didDoubleWrapWarning = true;\n          debug.warn(warning);\n        }\n      }\n    }\n  : () => {};\n", "/**\n * Define the channels and subscription methods to subscribe to in order to\n * instrument the `node:http` module. Note that this does *not* actually\n * register the subscriptions, it simply returns a data object with the\n * channel names and the subscription handlers. Attach these to diagnostic\n * channels on Node versions where they are supported (ie, >=22.12.0).\n *\n * If any other platforms that do support diagnostic channels eventually add\n * channel coverage for the `node:http` client, then these methods can be\n * used on those platforms as well.\n *\n * This implementation is used in the client-patch strategy, by simply\n * calling the handlers with the relevant data at the appropriate time.\n */\n\nimport type { SpanStatus } from '../../types/spanStatus';\nimport { addOutgoingRequestBreadcrumb } from './add-outgoing-request-breadcrumb';\nimport {\n  bindScopeToEmitter,\n  getSpanStatusFromHttpCode,\n  SPAN_STATUS_ERROR,\n  SPAN_STATUS_UNSET,\n  startInactiveSpan,\n  SUPPRESS_TRACING_KEY,\n  withActiveSpan,\n} from '../../tracing';\nimport { debug } from '../../utils/debug-logger';\nimport { LRUMap } from '../../utils/lru';\nimport { getOutgoingRequestSpanData, setIncomingResponseSpanData } from './get-outgoing-span-data';\nimport { getRequestUrlFromClientRequest } from './get-request-url';\nimport { injectTracePropagationHeaders } from './inject-trace-propagation-headers';\nimport type { HttpInstrumentationOptions, HttpClientRequest, HttpIncomingMessage } from './types';\nimport { DEBUG_BUILD } from '../../debug-build';\nimport { LOG_PREFIX, HTTP_ON_CLIENT_REQUEST } from './constants';\nimport type { ClientSubscriptionName } from './constants';\nimport { getClient, getCurrentScope } from '../../currentScopes';\nimport { hasSpansEnabled } from '../../utils/hasSpansEnabled';\nimport { isSentryRequestUrl } from '../../utils/isSentryRequestUrl';\nimport { doubleWrapWarning } from './double-wrap-warning';\n\ntype ChannelListener = (message: unknown, name: string | symbol) => void;\n\nexport type HttpClientSubscriptions = Record<ClientSubscriptionName, ChannelListener>;\n\nexport function getHttpClientSubscriptions(options: HttpInstrumentationOptions): HttpClientSubscriptions {\n  const propagationDecisionMap = new LRUMap<string, boolean>(100);\n  const getConfig = () => getClient()?.getOptions();\n\n  const onHttpClientRequestCreated: ChannelListener = (data: unknown): void => {\n    // Skip all instrumentation if tracing is suppressed\n    // (e.g., Sentry's own transport uses this to avoid self-instrumentation)\n    if (getCurrentScope().getScopeData().sdkProcessingMetadata[SUPPRESS_TRACING_KEY] === true) {\n      return;\n    }\n\n    const clientOptions = getConfig();\n    const {\n      errorMonitor = 'error',\n      spans: createSpans = clientOptions ? hasSpansEnabled(clientOptions) : true,\n      propagateTrace = false,\n      breadcrumbs = true,\n      http,\n      https,\n      suppressOtelWarning = false,\n    } = options;\n\n    const { request } = data as { request: HttpClientRequest };\n    const requestUrl = getRequestUrlFromClientRequest(request);\n\n    // The suppression check above only works while the suppression is readable, which it is not when\n    // the SDK does not own the OpenTelemetry setup: `suppressTracing()` writes to an OpenTelemetry\n    // context that no registered context manager propagates. Recognizing the SDK's own requests by\n    // their URL holds either way, and it has to: instrumenting them makes each envelope send record\n    // a dropped-span outcome, which the `beforeExit` client report flush then sends as another\n    // envelope, keeping the process alive forever.\n    if (isSentryRequestUrl(requestUrl, getClient())) {\n      return;\n    }\n\n    // check if request is ignored. if so, we do nothing at all.\n    if (options.ignoreOutgoingRequests?.(requestUrl, request)) {\n      return;\n    }\n\n    // guard against adding breadcrumbs multiple times, or when not enabled\n    let addedBreadcrumbs = false;\n    function addBreadcrumbs(request: HttpClientRequest, response: HttpIncomingMessage | undefined) {\n      if (!addedBreadcrumbs) {\n        addedBreadcrumbs = true;\n        addOutgoingRequestBreadcrumb(request, response);\n      }\n    }\n\n    // called if spans and/or trace propagation are disabled\n    function breadcrumbsOnly(request: HttpClientRequest) {\n      request.on(errorMonitor, () => addBreadcrumbs(request, undefined));\n      request.prependListener('response', response => {\n        if (request.listenerCount('response') <= 1) {\n          response.resume();\n        }\n        response.on('end', () => addBreadcrumbs(request, response));\n        response.on(errorMonitor, () => addBreadcrumbs(request, response));\n      });\n    }\n\n    if (!createSpans) {\n      // no spans, but maybe tracing and/or breadcrumbs\n      if (breadcrumbs) {\n        breadcrumbsOnly(request);\n      }\n      if (propagateTrace) {\n        injectTracePropagationHeaders(request, propagationDecisionMap);\n      }\n      return;\n    }\n\n    // guard against OTel wrapping the same module and emitting double-spans\n    // this doesn't prevent it, just prints a debug warning for the user.\n    if (!suppressOtelWarning) {\n      if (http) doubleWrapWarning(http);\n      if (https) doubleWrapWarning(https);\n    }\n\n    // spans are enabled\n    const span = startInactiveSpan(getOutgoingRequestSpanData(request));\n    options.outgoingRequestHook?.(span, request);\n\n    // Inject trace headers after span creation so sentry-trace contains the\n    // outgoing span's ID (not the parent's), enabling downstream services to\n    // link to this span.\n    if (propagateTrace) {\n      if (span.isRecording()) {\n        withActiveSpan(span, () => {\n          injectTracePropagationHeaders(request, propagationDecisionMap);\n        });\n      } else {\n        injectTracePropagationHeaders(request, propagationDecisionMap);\n      }\n    }\n\n    let spanEnded = false;\n    function endSpan(status: SpanStatus): void {\n      if (!spanEnded) {\n        spanEnded = true;\n        span.setStatus(status);\n        span.end();\n      }\n    }\n\n    // Fallback: end span if the connection closes before any response.\n    // This is removed if we do get a response, because in that case\n    // we want to only end the span when the response is finished.\n    const requestOnClose = () => endSpan({ code: SPAN_STATUS_UNSET });\n    request.on('close', requestOnClose);\n\n    request.on(errorMonitor, error => {\n      DEBUG_BUILD && debug.log(LOG_PREFIX, 'outgoingRequest on request error()', error);\n      if (breadcrumbs) {\n        addBreadcrumbs(request, undefined);\n      }\n      endSpan({ code: SPAN_STATUS_ERROR });\n    });\n\n    request.prependListener('response', response => {\n      // no longer need this, listen on response now.\n      // do not end the span until the response finishes\n      request.removeListener('close', requestOnClose);\n      if (request.listenerCount('response') <= 1) {\n        response.resume();\n      }\n      setIncomingResponseSpanData(response, span);\n      bindScopeToEmitter(response);\n      options.outgoingResponseHook?.(span, response);\n\n      let finished = false;\n      function finishWithResponse(error?: unknown): void {\n        if (!finished) {\n          finished = true;\n          if (error) {\n            DEBUG_BUILD && debug.log(LOG_PREFIX, 'outgoingRequest on response error()', error);\n          }\n          if (breadcrumbs) {\n            addBreadcrumbs(request, response);\n          }\n          const aborted = response.aborted && !response.complete;\n          const status: SpanStatus =\n            error || typeof response.statusCode !== 'number' || aborted\n              ? { code: SPAN_STATUS_ERROR }\n              : getSpanStatusFromHttpCode(response.statusCode);\n          options.applyCustomAttributesOnSpan?.(span, request, response);\n          endSpan(status);\n        }\n      }\n\n      response.on('end', () => finishWithResponse());\n      response.on(errorMonitor, finishWithResponse);\n    });\n  };\n\n  return {\n    [HTTP_ON_CLIENT_REQUEST]: onHttpClientRequestCreated,\n  };\n}\n", "/**\n * Platform-portable HTTP(S) outgoing-request patching integration\n *\n * Patches the `http` and `https` Node.js built-in module exports to create\n * Sentry spans for outgoing requests and optionally inject distributed trace\n * propagation headers.\n *\n * @module\n *\n * This Sentry integration is a derivative work based on the OpenTelemetry\n * HTTP instrumentation.\n *\n * <https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-http>\n *\n * Extended under the terms of the Apache 2.0 license linked below:\n *\n * ----\n *\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getDefaultExport } from '../../utils/get-default-export';\nimport { HTTP_ON_CLIENT_REQUEST } from './constants';\nimport type { HttpExport, HttpModuleExport, HttpInstrumentationOptions, HttpClientRequest } from './types';\nimport { getOriginalFunction, wrapMethod } from '../../utils/object';\nimport { getHttpClientSubscriptions } from './client-subscriptions';\n\nlet onHttpClientRequestCreated: ReturnType<typeof getHttpClientSubscriptions>[typeof HTTP_ON_CLIENT_REQUEST];\n\n/**\n * Patch `ClientRequest.prototype._storeHeader` so that every outgoing request\n * is routed through our instrumentation.\n *\n * We deliberately patch the shared `ClientRequest` prototype rather than the\n * module's `request`/`get` exports. Every outgoing request — no matter how the\n * module was imported (`require('node:http')`, `import http from 'node:http'`,\n * or `import * as http from 'node:http'`) — ultimately constructs a\n * `ClientRequest` and serializes its headers through `_storeHeader` on this one\n * prototype. ES module namespace bindings (`import * as http` / `import\n * { request }`) are immutable snapshots that cannot be monkey-patched at all,\n * but the prototype is a shared, mutable object, so patching it reaches those\n * consumers too.\n *\n * `_storeHeader` is the method that renders the outgoing header block into\n * `request._header`. We run *before* the original, which is the last moment a\n * header can still be added via `setHeader` (afterwards `request._header` is\n * set and any `setHeader` call throws `ERR_HTTP_HEADERS_SENT`). It runs\n * synchronously in the caller's async context — during `request.end()` /\n * `request.write()` — so spans are parented correctly, and is invoked exactly\n * once per request whether the headers are being sent immediately or buffered\n * while a socket is assigned.\n *\n * We intentionally do *not* hook `onSocket`: it does not fire until a socket is\n * assigned to the request, which for an `Agent` with all sockets busy (e.g.\n * `maxSockets: 1`) happens only *after* the request's headers have already been\n * serialized — far too late to inject trace-propagation headers.\n *\n * `https` requests reuse `http`'s `ClientRequest`, so patching `http` covers\n * both; the `https` module does not expose its own `ClientRequest` and is a\n * no-op here.\n */\nfunction patchClientRequest(httpModule: HttpExport, options: HttpInstrumentationOptions): void {\n  const proto = httpModule.ClientRequest?.prototype;\n\n  // Nothing to patch if the module doesn't expose `ClientRequest` (e.g. `https`)\n  if (typeof proto?._storeHeader !== 'function') {\n    return;\n  }\n\n  const subscriptions = getHttpClientSubscriptions({\n    ...options,\n    http: httpModule,\n  });\n\n  onHttpClientRequestCreated = subscriptions[HTTP_ON_CLIENT_REQUEST];\n\n  // This means it was already wrapped, we just update onHttpClientRequestCreated and then stop\n  // future calls will pick up the new function\n  if (getOriginalFunction(proto._storeHeader)) {\n    return;\n  }\n\n  const originalStoreHeader = proto._storeHeader;\n  wrapMethod(proto, '_storeHeader', function patchedStoreHeader(this: HttpClientRequest, ...args: unknown[]) {\n    // Never let instrumentation errors break the underlying request.\n    try {\n      onHttpClientRequestCreated({ request: this }, HTTP_ON_CLIENT_REQUEST);\n    } catch {\n      // ignore\n    }\n    return originalStoreHeader.apply(this, args);\n  });\n}\n\nfunction patchModule(httpModuleExport: HttpModuleExport, options: HttpInstrumentationOptions = {}): HttpModuleExport {\n  // Resolve to the underlying module in case we were handed an interop\n  // container (e.g. `{ default: http }`). Either the container or its default\n  // export carries the same `ClientRequest` class.\n  const httpModule = getDefaultExport(httpModuleExport);\n  patchClientRequest(httpModule, options);\n  return httpModuleExport;\n}\n\n/**\n * Patch `node:http`. This also covers `node:https` as it reuses the same `ClientRequest` class.\n *\n * @example\n * ```javascript\n * import http from 'http';\n * import { patchHttpModule } from '@sentry/core';\n * patchHttpModule(http, { propagateTrace: true });\n * ```\n */\nexport const patchHttpModuleClient = (\n  httpModuleExport: HttpModuleExport,\n  options: HttpInstrumentationOptions = {},\n): HttpModuleExport => patchModule(httpModuleExport, options);\n", "import type { Scope } from '../../scope';\nimport { debug } from '../../utils/debug-logger';\nimport { DEBUG_BUILD } from '../../debug-build';\nimport type { HttpIncomingMessage } from './types';\nimport { getMaxBodyByteLength, type MaxRequestBodySize } from '../../utils/request';\n\n/**\n * This method patches the request object to capture the body.\n * Instead of actually consuming the streamed body ourselves, which has\n * potential side effects, we monkey patch `req.on('data')` to intercept\n * the body chunks. This way, we only read the body if the user also consumes\n * the body, ensuring we do not change any behavior in unexpected ways.\n */\nexport function patchRequestToCaptureBody(\n  req: HttpIncomingMessage,\n  isolationScope: Scope,\n  maxIncomingRequestBodySize: Exclude<MaxRequestBodySize, 'none'>,\n  integrationName: string,\n): void {\n  let bodyByteLength = 0;\n  const chunks: Buffer[] = [];\n\n  DEBUG_BUILD && debug.log(integrationName, 'Patching request.on');\n\n  // keep track of the original callbacks to remove listeners later\n  // `off` depends on having the exact same function reference passed in,\n  // so we need to be able to map original listeners to our wrapped ones.\n  const callbackMap = new WeakMap();\n\n  const maxBodySize = getMaxBodyByteLength(maxIncomingRequestBodySize);\n\n  try {\n    // eslint-disable-next-line @typescript-eslint/unbound-method\n    req.on = req.addListener = new Proxy(req.on, {\n      apply: (target, thisArg, args: Parameters<typeof req.on>) => {\n        const [event, listener, ...restArgs] = args;\n\n        if (event === 'data') {\n          DEBUG_BUILD &&\n            debug.log(integrationName, `Handling request.on(\"data\") with maximum body size of ${maxBodySize}b`);\n\n          const callback = new Proxy(listener, {\n            apply: (target, thisArg, args: Parameters<typeof listener>) => {\n              try {\n                const chunk = args[0] as Buffer | string;\n                const bufferifiedChunk = Buffer.from(chunk);\n\n                if (bodyByteLength < maxBodySize) {\n                  chunks.push(bufferifiedChunk);\n                  bodyByteLength += bufferifiedChunk.byteLength;\n                } else if (DEBUG_BUILD) {\n                  debug.log(\n                    integrationName,\n                    `Dropping request body chunk because maximum body length of ${maxBodySize}b is exceeded.`,\n                  );\n                }\n              } catch (_err) {\n                DEBUG_BUILD && debug.error(integrationName, 'Encountered error while storing body chunk.');\n              }\n\n              return Reflect.apply(target, thisArg, args);\n            },\n          });\n\n          callbackMap.set(listener, callback);\n\n          return Reflect.apply(target, thisArg, [event, callback, ...restArgs]);\n        }\n\n        return Reflect.apply(target, thisArg, args);\n      },\n    });\n\n    // Ensure we also remove callbacks correctly\n    // eslint-disable-next-line @typescript-eslint/unbound-method\n    req.off = req.removeListener = new Proxy(req.off, {\n      apply: (target, thisArg, args: Parameters<typeof req.off>) => {\n        const [, listener] = args;\n\n        const callback = callbackMap.get(listener);\n        if (callback) {\n          callbackMap.delete(listener);\n\n          const modifiedArgs = args.slice();\n          modifiedArgs[1] = callback;\n          return Reflect.apply(target, thisArg, modifiedArgs);\n        }\n\n        return Reflect.apply(target, thisArg, args);\n      },\n    });\n\n    req.on('end', () => {\n      try {\n        const body = Buffer.concat(chunks).toString('utf-8');\n        if (body) {\n          // Using Buffer.byteLength here, because the body may contain characters that are not 1 byte long\n          const bodyByteLength = Buffer.byteLength(body, 'utf-8');\n          const truncatedBody =\n            bodyByteLength > maxBodySize\n              ? `${Buffer.from(body)\n                  .subarray(0, maxBodySize - 3)\n                  .toString('utf-8')}...`\n              : body;\n\n          isolationScope.setSDKProcessingMetadata({ normalizedRequest: { data: truncatedBody } });\n        }\n      } catch (error) {\n        if (DEBUG_BUILD) {\n          debug.error(integrationName, 'Error building captured request body', error);\n        }\n      }\n    });\n  } catch (error) {\n    if (DEBUG_BUILD) {\n      debug.error(integrationName, 'Error patching request to capture body', error);\n    }\n  }\n}\n", "import type { Client } from '../../client';\nimport { debug } from '../../utils/debug-logger';\nimport { DEBUG_BUILD } from '../../debug-build';\nimport type { Scope } from '../../scope';\nimport type { HttpServerResponse } from './types';\nimport type { AggregationCounts } from '../../types/session';\nimport { safeDateNow } from '../../utils/randomSafeContext';\nimport { safeUnref } from '../../utils/timer';\n\nconst clientToRequestSessionAggregatesMap = new WeakMap<\n  Client,\n  { [timestampRoundedToSeconds: string]: { exited: number; crashed: number; errored: number } }\n>();\n\n/**\n * Starts a session and tracks it in the context of a given isolation scope.\n * When the passed response is finished, the session is put into a task and\n * is aggregated with other sessions that may happen in a certain time window\n * (sessionFlushingDelayMs).\n *\n * The sessions are always aggregated by the client that is on the current\n * scope at the time of ending the response (if there is one).\n */\nexport function recordRequestSession(\n  client: Client,\n  {\n    requestIsolationScope,\n    response,\n    sessionFlushingDelayMS,\n  }: {\n    requestIsolationScope: Scope;\n    response: HttpServerResponse;\n    sessionFlushingDelayMS?: number;\n  },\n): void {\n  requestIsolationScope.setSDKProcessingMetadata({\n    requestSession: { status: 'ok' },\n  });\n\n  response.once('close', () => {\n    const requestSession = requestIsolationScope.getScopeData().sdkProcessingMetadata.requestSession;\n\n    if (client && requestSession) {\n      DEBUG_BUILD && debug.log(`Recorded request session with status: ${requestSession.status}`);\n\n      const roundedDate = new Date(safeDateNow());\n      roundedDate.setSeconds(0, 0);\n      const dateBucketKey = roundedDate.toISOString();\n\n      const existingClientAggregate = clientToRequestSessionAggregatesMap.get(client);\n      const bucket = existingClientAggregate?.[dateBucketKey] || { exited: 0, crashed: 0, errored: 0 };\n      bucket[({ ok: 'exited', crashed: 'crashed', errored: 'errored' } as const)[requestSession.status]]++;\n\n      if (existingClientAggregate) {\n        existingClientAggregate[dateBucketKey] = bucket;\n      } else {\n        DEBUG_BUILD && debug.log('Opened new request session aggregate.');\n        const newClientAggregate = { [dateBucketKey]: bucket };\n        clientToRequestSessionAggregatesMap.set(client, newClientAggregate);\n\n        const flushPendingClientAggregates = (): void => {\n          clearTimeout(timeout);\n          unregisterClientFlushHook();\n          clientToRequestSessionAggregatesMap.delete(client);\n\n          const aggregatePayload: AggregationCounts[] = Object.entries(newClientAggregate).map(\n            ([timestamp, value]) => ({\n              started: timestamp,\n              exited: value.exited,\n              errored: value.errored,\n              crashed: value.crashed,\n            }),\n          );\n          client.sendSession({ aggregates: aggregatePayload });\n        };\n\n        const unregisterClientFlushHook = client.on('flush', () => {\n          DEBUG_BUILD && debug.log('Sending request session aggregate due to client flush');\n          flushPendingClientAggregates();\n        });\n        const timeout = setTimeout(() => {\n          DEBUG_BUILD && debug.log('Sending request session aggregate due to flushing schedule');\n          flushPendingClientAggregates();\n        }, sessionFlushingDelayMS);\n        safeUnref(timeout);\n      }\n    }\n  });\n}\n", "// oxlint-disable max-lines\n/**\n * Provide the `http.server.request.start` subscription function that we use\n * to instrument incoming HTTP requests that use the `node:http` module.\n *\n * On Node.js v18.7 and up, we can just assign the diagnostics channel\n * listener, and that's enough. But for older node versions, or other SSJS\n * platforms, we have to explicitly fire the provided method an a patched\n * Server.emit method.\n *\n * This decision is made in the relevant Node/Bun/Deno SDKs; core just\n * provides them with the methods to use.\n *\n * When `options.spans` is enabled (explicitly or via the client's tracing\n * config), this also creates server spans around the emitted `'request'`\n * event. The OTel-mode node integration creates spans through a different\n * code path and opts out via explicit `spans: false`.\n */\n\nimport type { ServerSubscriptionName } from './constants';\ntype ChannelListener = (message: unknown, name: string | symbol) => void;\nimport { HTTP_ON_SERVER_REQUEST } from './constants';\nimport type { HttpIncomingMessage, HttpInstrumentationOptions, HttpServer, HttpServerResponse } from './types';\nimport { DEBUG_BUILD } from '../../debug-build';\nimport { debug } from '../../utils/debug-logger';\nimport { getClient, getCurrentScope, getIsolationScope, withIsolationScope } from '../../currentScopes';\nimport { hasSpansEnabled } from '../../utils/hasSpansEnabled';\nimport { headersToDict, httpHeadersToSpanAttributes, httpRequestToRequestData } from '../../utils/request';\nimport { patchRequestToCaptureBody } from './patch-request-to-capture-body';\nimport { isURLObjectRelative, parseStringToURLObject, stripUrlQueryAndFragment } from '../../utils/url';\nimport { recordRequestSession } from './record-request-session';\nimport { generateSpanId, generateTraceId } from '../../utils/propagationContext';\nimport { continueTrace } from '../../tracing/trace';\nimport { getSpanStatusFromHttpCode, SPAN_STATUS_ERROR, startSpanManual } from '../../tracing';\nimport {\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '../../semanticAttributes';\nimport { safeMathRandom } from '../../utils/randomSafeContext';\nimport { SPAN_KIND } from '../../spanKind';\nimport type { SpanAttributes } from '../../types/span';\nimport type { SpanStatus } from '../../types/spanStatus';\nimport { HTTP_URL, URL_FULL, URL_PATH } from '@sentry/conventions/attributes';\nimport { filterCollectedUrl } from '../../utils/data-collection/filterCollectedUrl';\n\n// Tree-shakable guard to remove all code related to tracing\ndeclare const __SENTRY_TRACING__: boolean;\n\nconst INTEGRATION_NAME = 'Http.Server';\nconst SPANS_INTEGRATION_NAME = 'Http.SentryServerSpans';\n\nexport type HttpServerSubscriptions = Record<ServerSubscriptionName, ChannelListener>;\n\n// Tracks the last Sentry-created emit wrapper for each server so we can detect\n// when user code has replaced server.emit (e.g. with a proxy of the original)\n// and re-wrap it to restore Sentry's instrumentation.\nconst lastSentryEmitMap = new WeakMap<HttpServer, HttpServer['emit']>();\n\nconst kRequestMark = Symbol.for('sentry_http_server_instrumented');\ntype MarkedRequest = HttpIncomingMessage & {\n  [kRequestMark]?: boolean;\n};\n\n/** return true if it is NOT already marked */\nfunction markRequest(request: MarkedRequest): boolean {\n  return !request[kRequestMark] && (request[kRequestMark] = true);\n}\n\nexport function instrumentServer(options: HttpInstrumentationOptions, server: HttpServer): void {\n  // Use a proxy and a WeakSet of server objects here, rather than a\n  // wrappedFunction, because NestJS has been observed to \"fork\" emit\n  // methods, including copying properties, leading to false positives.\n  // Furthermore, we mark the Request object so that if two copies of this\n  // instrumentation both are run on forked emit() methods for the same\n  // request, we still only ever create a single root span. Previously,\n  // this was done with a flag on the OTEL context, but in this non-OTEL\n  // version, we mark the Request itself with a non-enumerable prop instead.\n\n  // oxlint-disable-next-line typescript/unbound-method -- `this` is forwarded via Proxy/target.apply below\n  const currentEmit = server.emit;\n  const instrumentedEmit = lastSentryEmitMap.get(server);\n\n  // Skip re-wrapping only if already instrumented AND server.emit still points\n  // to our wrapper. If user code replaced server.emit (e.g. with a proxy of the\n  // original pre-Sentry emit), re-wrap so Sentry's instrumentation is restored.\n  if (currentEmit === instrumentedEmit) {\n    return;\n  }\n\n  const newEmit = new Proxy(currentEmit, {\n    apply(target, thisArg, args: unknown[]) {\n      const [event, ...data] = args;\n      if (event !== 'request') {\n        return target.apply(thisArg, args);\n      }\n\n      const client = getClient();\n      const [request, response] = data as [HttpIncomingMessage, HttpServerResponse];\n\n      if (!client || !markRequest(request)) {\n        return target.apply(thisArg, args);\n      }\n\n      DEBUG_BUILD && debug.log(INTEGRATION_NAME, 'Handling incoming request');\n      const isolationScope = getIsolationScope().clone();\n      isolationScope.setClient(client);\n\n      const ipAddress = request.socket?.remoteAddress;\n      const url = request.url || '/';\n      const normalizedRequest = httpRequestToRequestData(request);\n      const {\n        maxRequestBodySize = 'medium',\n        ignoreRequestBody,\n        sessions = true,\n        sessionFlushingDelayMS = 60_000,\n      } = options;\n\n      if (maxRequestBodySize !== 'none' && !ignoreRequestBody?.(url, request)) {\n        patchRequestToCaptureBody(request, isolationScope, maxRequestBodySize, INTEGRATION_NAME);\n      }\n\n      // Update the isolation scope, isolate this request\n      isolationScope.setSDKProcessingMetadata({ normalizedRequest, ipAddress });\n\n      // attempt to update the scope's `transactionName` based on the request\n      // URL. Ideally, framework instrumentations coming after the\n      // HttpInstrumentation update the transactionName once we get a\n      // parameterized route.\n      const httpMethod = (request.method || 'GET').toUpperCase();\n      const httpTargetWithoutQueryFragment = stripUrlQueryAndFragment(url);\n\n      const bestEffortTransactionName = `${httpMethod} ${httpTargetWithoutQueryFragment}`;\n\n      isolationScope.setTransactionName(bestEffortTransactionName);\n\n      if (sessions) {\n        recordRequestSession(client, {\n          requestIsolationScope: isolationScope,\n          response,\n          sessionFlushingDelayMS: sessionFlushingDelayMS ?? 60_000,\n        });\n      }\n\n      return withIsolationScope(isolationScope, () => {\n        const sentryTrace = normalizedRequest.headers?.['sentry-trace'];\n        const baggage = normalizedRequest.headers?.['baggage'];\n        const sentryTraceValue = Array.isArray(sentryTrace) ? sentryTrace[0] : sentryTrace;\n        return continueTrace(\n          {\n            sentryTrace: sentryTraceValue,\n            baggage: Array.isArray(baggage) ? baggage[0] : baggage,\n          },\n          () => {\n            const propagationContext = getCurrentScope().getPropagationContext();\n            // Set propagationSpanId after continueTrace because it calls\n            // withScope + setPropagationContext internally, which would\n            // overwrite any previously set value.\n            propagationContext.propagationSpanId = generateSpanId();\n            // In OTel mode, continueTrace does not generate a new traceId\n            // when there is no incoming sentry-trace header. We generate one\n            // explicitly here so each request gets a unique trace ID even when\n            // tracing is disabled.\n            if (!sentryTraceValue) {\n              propagationContext.traceId = generateTraceId();\n              propagationContext.sampleRand = safeMathRandom();\n            }\n\n            response.once('close', () => {\n              isolationScope.setContext('response', {\n                status_code: response.statusCode,\n              });\n            });\n\n            const wrap = options.wrapServerEmitRequest;\n            let emitResult: boolean = false;\n            if (wrap) {\n              wrap(request, response, normalizedRequest, () => {\n                emitResult = target.apply(thisArg, args) as boolean;\n              });\n            } else {\n              emitResult = target.apply(thisArg, args) as boolean;\n            }\n            return emitResult;\n          },\n        );\n      });\n    },\n  });\n\n  lastSentryEmitMap.set(server, newEmit);\n  server.emit = newEmit;\n}\n\nexport function getHttpServerSubscriptions(options: HttpInstrumentationOptions): HttpServerSubscriptions {\n  // The decision whether to create spans is evaluated per request (not once\n  // here), so it stays responsive to client-state changes after setup. This\n  // mirrors `getHttpClientSubscriptions`. Callers can force the no-span path\n  // with explicit `spans: false` (the node OTel `httpServerIntegration` does\n  // this because it creates spans through a separate code path).\n  const userWrap = options.wrapServerEmitRequest;\n  const spanWrap = buildServerSpanWrap(options);\n\n  const effectiveOptions: HttpInstrumentationOptions = {\n    ...options,\n    wrapServerEmitRequest(request, response, normalizedRequest, next) {\n      const clientOptions = getClient()?.getOptions();\n      const createSpans = options.spans ?? (clientOptions ? hasSpansEnabled(clientOptions) : false);\n      if (createSpans) {\n        // spanWrap composes the user's wrap (outer) with span creation (inner).\n        spanWrap(request, response, normalizedRequest, next);\n      } else if (userWrap) {\n        userWrap(request, response, normalizedRequest, next);\n      } else {\n        next();\n      }\n    },\n  };\n\n  const onHttpServerRequest: ChannelListener = (data: unknown): void => {\n    const { server } = data as { server: HttpServer };\n    instrumentServer(effectiveOptions, server);\n  };\n\n  return { [HTTP_ON_SERVER_REQUEST]: onHttpServerRequest };\n}\n\nfunction buildServerSpanWrap(\n  options: HttpInstrumentationOptions,\n): NonNullable<HttpInstrumentationOptions['wrapServerEmitRequest']> {\n  const {\n    wrapServerEmitRequest: userWrap,\n    ignoreIncomingRequests,\n    ignoreStaticAssets = true,\n    onSpanCreated,\n    errorMonitor = 'error',\n    onSpanEnd,\n  } = options;\n\n  return (request, response, normalizedRequest, next) => {\n    if (typeof __SENTRY_TRACING__ !== 'undefined' && !__SENTRY_TRACING__) {\n      return next();\n    }\n\n    // User wrap runs outside the span so it can set up context\n    // (e.g. OTel propagation) before the span is created.\n    return userWrap ? userWrap(request, response, normalizedRequest, createSpan) : createSpan();\n\n    function createSpan(): unknown {\n      const isolationScope = getIsolationScope();\n      const client = isolationScope.getClient();\n      if (!client) {\n        return next();\n      }\n\n      if (\n        shouldIgnoreSpansForIncomingRequest(request, {\n          ignoreStaticAssets,\n          ignoreIncomingRequests,\n        })\n      ) {\n        DEBUG_BUILD && debug.log(SPANS_INTEGRATION_NAME, 'Skipping span creation for incoming request', request.url);\n        return next();\n      }\n\n      const fullUrl = normalizedRequest.url || request.url || '/';\n      const urlObj = parseStringToURLObject(fullUrl);\n      const httpTargetWithoutQueryFragment = urlObj ? urlObj.pathname : stripUrlQueryAndFragment(fullUrl);\n      const method = (request.method || 'GET').toUpperCase();\n      const name = `${method} ${httpTargetWithoutQueryFragment}`;\n      const headers = request.headers;\n      const userAgent = headers['user-agent'];\n      const ips = headers['x-forwarded-for'];\n      const httpVersion = request.httpVersion;\n      const host = headers.host as undefined | string;\n      const hostname = host?.replace(/^(.*)(:[0-9]{1,5})/, '$1') || 'localhost';\n      const scheme = fullUrl.startsWith('https') ? 'https' : 'http';\n      const { socket } = request;\n      const { localAddress, localPort, remoteAddress, remotePort } = socket ?? {};\n\n      return startSpanManual(\n        {\n          name,\n          // Pass SERVER so the OTel sampler infers op='http.server' rather than\n          // 'http', which it does for the INTERNAL default.\n          kind: SPAN_KIND.SERVER,\n          attributes: {\n            // Sentry-specific attributes\n            [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.server',\n            [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.server',\n            [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n            // Set http.route to the URL path as a best-effort route name.\n            // Framework integrations (Express, etc.) update this via onSpanEnd.\n            'http.route': httpTargetWithoutQueryFragment,\n            // OTel kind (explicit attribute so it appears in span data)\n            'otel.kind': 'SERVER',\n            // Network attributes\n            'net.host.ip': localAddress,\n            'net.host.port': localPort,\n            'net.peer.ip': remoteAddress,\n            'net.peer.port': remotePort,\n            'sentry.http.prefetch': isKnownPrefetchRequest(request) || undefined,\n            // Old Semantic Conventions attributes for compatibility\n            [URL_FULL]: urlObj && !isURLObjectRelative(urlObj) ? filterCollectedUrl(urlObj.href, client) : undefined,\n            [URL_PATH]: urlObj?.pathname ?? httpTargetWithoutQueryFragment,\n            // oxlint-disable-next-line typescript-eslint(no-deprecated)\n            [HTTP_URL]: filterCollectedUrl(fullUrl, client),\n            'http.method': method,\n            'http.target': filterCollectedUrl(\n              urlObj ? `${urlObj.pathname}${urlObj.search}` : httpTargetWithoutQueryFragment,\n              client,\n            ),\n            'http.host': host,\n            'net.host.name': hostname,\n            'http.client_ip': typeof ips === 'string' ? ips.split(',')[0] : undefined,\n            'http.user_agent': userAgent,\n            'http.scheme': scheme,\n            'http.flavor': httpVersion,\n            'net.transport': httpVersion?.toUpperCase() === 'QUIC' ? 'ip_udp' : 'ip_tcp',\n            ...getRequestContentLengthAttribute(request),\n            ...httpHeadersToSpanAttributes(normalizedRequest.headers || {}, client.getDataCollectionOptions()),\n          },\n        },\n        span => {\n          onSpanCreated?.(span, request, response);\n          // Ensure we only end the span once\n          // E.g. error can be emitted before close is emitted\n          let isEnded = false;\n\n          function endSpan(status: SpanStatus): void {\n            if (isEnded) {\n              return;\n            }\n\n            isEnded = true;\n            // set attributes that come from the response\n            span.setAttributes({\n              'http.status_text': response.statusMessage?.toUpperCase(),\n              'http.response.status_code': response.statusCode,\n              'http.status_code': response.statusCode,\n              ...httpHeadersToSpanAttributes(\n                headersToDict(response.headers),\n                client?.getDataCollectionOptions() ?? false,\n                'response',\n              ),\n            });\n            span.setStatus(status);\n            onSpanEnd?.(span, request, response);\n            span.end();\n          }\n\n          response.once('close', () => {\n            endSpan(getSpanStatusFromHttpCode(response.statusCode));\n          });\n\n          response.once(errorMonitor, () => {\n            const httpStatus = getSpanStatusFromHttpCode(response.statusCode);\n            // Ensure we def. have an error status here\n            endSpan(httpStatus.code === SPAN_STATUS_ERROR ? httpStatus : { code: SPAN_STATUS_ERROR });\n          });\n\n          // Continue handling the request inside the active span context\n          next();\n        },\n      );\n    }\n  };\n}\n\nfunction shouldIgnoreSpansForIncomingRequest(\n  request: HttpIncomingMessage,\n  {\n    ignoreStaticAssets,\n    ignoreIncomingRequests,\n  }: {\n    ignoreStaticAssets?: boolean;\n    ignoreIncomingRequests?: (urlPath: string, request: HttpIncomingMessage) => boolean;\n  },\n): boolean {\n  // request.url is the only property that holds any information about the url\n  // it only consists of the URL path and query string (if any)\n  const urlPath = request.url;\n\n  const method = request.method?.toUpperCase();\n  // We do not capture OPTIONS/HEAD requests as spans\n  if (method === 'OPTIONS' || method === 'HEAD' || !urlPath) {\n    return true;\n  }\n\n  // Default static asset filtering\n  if (ignoreStaticAssets && method === 'GET' && isStaticAssetRequest(urlPath)) {\n    return true;\n  }\n\n  if (ignoreIncomingRequests?.(urlPath, request)) {\n    return true;\n  }\n\n  return false;\n}\n\nexport function isStaticAssetRequest(urlPath: string): boolean {\n  const path = stripUrlQueryAndFragment(urlPath);\n  // Common static file extensions\n  if (path.match(/\\.(ico|png|jpg|jpeg|gif|svg|css|js|woff|woff2|ttf|eot|webp|avif)$/)) {\n    return true;\n  }\n\n  // Common metadata files\n  if (path.match(/^\\/(robots\\.txt|sitemap\\.xml|manifest\\.json|browserconfig\\.xml)$/)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction isKnownPrefetchRequest(req: HttpIncomingMessage): boolean {\n  // Currently only handles Next.js prefetch requests but may check other frameworks in the future.\n  return req.headers['next-router-prefetch'] === '1';\n}\n\nfunction getRequestContentLengthAttribute(request: HttpIncomingMessage): SpanAttributes {\n  const { headers } = request;\n  const contentLengthHeader = headers['content-length'];\n  const length = contentLengthHeader ? parseInt(String(contentLengthHeader), 10) : -1;\n  const encoding = headers['content-encoding'];\n  return length >= 0\n    ? encoding && encoding !== 'identity'\n      ? { 'http.request_content_length': length }\n      : { 'http.request_content_length_uncompressed': length }\n    : {};\n}\n", "export { registerSpanErrorInstrumentation } from './tracing/errors.js';\nexport { getCapturedScopesOnSpan, markSpanAsTracerProviderSpan, markSpanForOtelSourceInference, markSpanSourceAsExplicit, setCapturedScopesOnSpan, spanIsTracerProviderSpan, spanShouldInferOtelSource, spanSourceWasExplicitlySet } from './tracing/utils.js';\nexport { TRACING_DEFAULTS, startIdleSpan } from './tracing/idleSpan.js';\nexport { SentrySpan } from './tracing/sentrySpan.js';\nexport { _INTERNAL_setDeferSegmentSpanCapture } from './tracing/deferSegmentSpanCapture.js';\nexport { SentryNonRecordingSpan } from './tracing/sentryNonRecordingSpan.js';\nexport { SPAN_STATUS_ERROR, SPAN_STATUS_OK, SPAN_STATUS_UNSET, getSpanStatusFromHttpCode, setHttpStatus } from './tracing/spanstatus.js';\nexport { SUPPRESS_TRACING_KEY, _INTERNAL_startInactiveSpan, continueTrace, isTracingSuppressed, spanIsIgnored, startInactiveSpan, startNewTrace, startSpan, startSpanManual, suppressTracing, withActiveSpan } from './tracing/trace.js';\nexport { bindScopeToEmitter } from './tracing/bindScopeToEmitter.js';\nexport { getDynamicSamplingContextFromClient, getDynamicSamplingContextFromScope, getDynamicSamplingContextFromSpan, spanToBaggageHeader } from './tracing/dynamicSamplingContext.js';\nexport { setMeasurement, timedEventsToMeasurements } from './tracing/measurement.js';\nexport { sampleSpan } from './tracing/sampling.js';\nexport { logSpanEnd, logSpanStart } from './tracing/logSpans.js';\nexport { captureSpan, safeSetSpanJSONAttributes } from './tracing/spans/captureSpan.js';\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_SOURCE, 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 } from './semanticAttributes.js';\nexport { createEventEnvelope, createSessionEnvelope, createSpanEnvelope } from './envelope.js';\nexport { addEventProcessor, captureEvent, captureException, captureMessage, captureSession, close, endSession, flush, isEnabled, isInitialized, lastEventId, setAttribute, setAttributes, setContext, setConversationId, setExtra, setExtras, setTag, setTags, setUser, startSession } from './exports.js';\nexport { captureCheckIn, withMonitor } from './monitor.js';\nexport { getClient, getCurrentScope, getExternalPropagationContext, getGlobalScope, getIsolationScope, getTraceContextFromScope, hasExternalPropagationContext, registerExternalPropagationContext, withIsolationScope, withScope } from './currentScopes.js';\nexport { getDefaultCurrentScope, getDefaultIsolationScope } from './defaultScopes.js';\nexport { getAsyncContextStrategy, setAsyncContextStrategy } from './asyncContext/index.js';\nexport { _INTERNAL_createTracingChannelBinding, waitForTracingChannelBinding } from './asyncContext/tracing-channel-binding.js';\nexport { getGlobalSingleton, getMainCarrier } from './carrier.js';\nexport { closeSession, makeSession, updateSession } from './session.js';\nexport { Scope } from './scope.js';\nexport { notifyEventProcessors } from './eventProcessors.js';\nexport { SENTRY_API_VERSION, getEnvelopeEndpointWithUrlEncodedAuth, getReportDialogEndpoint } from './api.js';\nexport { Client } from './client.js';\nexport { initAndBind, setCurrentClient } from './sdk.js';\nexport { createTransport } from './transports/base.js';\nexport { makeOfflineTransport } from './transports/offline.js';\nexport { MULTIPLEXED_TRANSPORT_EXTRA_KEY, makeMultiplexedTransport } from './transports/multiplexed.js';\nexport { addIntegration, defineIntegration, extendIntegration, getIntegrationsToSetup, installedIntegrations } from './integration.js';\nexport { _INTERNAL_clearAiProviderSkips, _INTERNAL_shouldSkipAiProviderWrapping, _INTERNAL_skipAiProviderWrapping } from './utils/ai/providerSkip.js';\nexport { filterKeyValueData as _INTERNAL_filterKeyValueData } from './utils/data-collection/filterKeyValueData.js';\nexport { filterCookies as _INTERNAL_filterCookies } from './utils/data-collection/filterCookies.js';\nexport { filterQueryParams as _INTERNAL_filterQueryParams } from './utils/data-collection/filterQueryParams.js';\nexport { filterCollectedUrl, filterCollectedUrlQuery } from './utils/data-collection/filterCollectedUrl.js';\nexport { envToBool } from './utils/envToBool.js';\nexport { applyScopeDataToEvent, getCombinedScopeData, mergeScopeData } from './utils/scopeData.js';\nexport { prepareEvent } from './utils/prepareEvent.js';\nexport { createCheckInEnvelope } from './checkin.js';\nexport { hasSpansEnabled } from './utils/hasSpansEnabled.js';\nexport { isStreamedBeforeSendSpanCallback, withStreamedSpan } from './tracing/spans/beforeSendSpan.js';\nexport { isSentryRequestUrl } from './utils/isSentryRequestUrl.js';\nexport { handleCallbackErrors } from './utils/handleCallbackErrors.js';\nexport { fmt, parameterize } from './utils/parameterize.js';\nexport { handleTunnelRequest } from './utils/tunnel.js';\nexport { addAutoIpAddressToSession, addAutoIpAddressToUser } from './utils/ipAddress.js';\nexport { INTERNAL_getSegmentSpan, addChildSpanToSpan, convertSpanLinksForEnvelope, getActiveSpan, getRootSpan, getSpanDescendants, getStatusMessage, spanIsSampled, spanIsSentrySpan, spanTimeInputToSeconds, spanToJSON, spanToStreamedSpanJSON, spanToTraceContext, spanToTraceHeader, updateSpanName } from './utils/spanUtils.js';\nexport { _setSpanForScope as _INTERNAL_setSpanForScope } from './utils/spanOnScope.js';\nexport { parseSampleRate } from './utils/parseSampleRate.js';\nexport { applySdkMetadata } from './utils/sdkMetadata.js';\nexport { getTraceData } from './utils/traceData.js';\nexport { shouldPropagateTraceForUrl } from './utils/tracePropagationTargets.js';\nexport { getTraceMetaTags } from './utils/meta.js';\nexport { debounce } from './utils/debounce.js';\nexport { uniq } from './utils/array.js';\nexport { derefWeakRef, makeWeakRef } from './utils/weakRef.js';\nexport { shouldIgnoreSpan } from './utils/should-ignore-span.js';\nexport { MAX_BODY_BYTE_LENGTH, captureBodyFromWinterCGRequest, extractQueryParamsFromUrl, getMaxBodyByteLength, headersToDict, httpHeadersToSpanAttributes, httpRequestToRequestData, winterCGHeadersToDict, winterCGRequestToRequestData } from './utils/request.js';\nexport { DEFAULT_ENVIRONMENT, DEV_ENVIRONMENT } from './constants.js';\nexport { SPAN_KIND, spanKindToName } from './spanKind.js';\nexport { addBreadcrumb } from './breadcrumbs.js';\nexport { functionToStringIntegration } from './integrations/functiontostring.js';\nexport { eventFiltersIntegration, inboundFiltersIntegration } from './integrations/eventFilters.js';\nexport { linkedErrorsIntegration } from './integrations/linkederrors.js';\nexport { moduleMetadataIntegration } from './integrations/moduleMetadata.js';\nexport { requestDataIntegration } from './integrations/requestdata.js';\nexport { captureConsoleIntegration } from './integrations/captureconsole.js';\nexport { dedupeIntegration } from './integrations/dedupe.js';\nexport { extraErrorDataIntegration } from './integrations/extraerrordata.js';\nexport { rewriteFramesIntegration } from './integrations/rewriteframes.js';\nexport { instrumentSupabaseClient, supabaseIntegration } from './integrations/supabase.js';\nexport { zodErrorsIntegration } from './integrations/zoderrors.js';\nexport { thirdPartyErrorFilterIntegration } from './integrations/third-party-errors-filter.js';\nexport { consoleIntegration } from './integrations/console.js';\nexport { featureFlagsIntegration } from './integrations/featureFlags/featureFlagsIntegration.js';\nexport { growthbookIntegration } from './integrations/featureFlags/growthbook.js';\nexport { conversationIdIntegration } from './integrations/conversationId.js';\nexport { profiler } from './profiling.js';\nexport { _INTERNAL_getTracingHeadersForFetchRequest, instrumentFetchRequest } from './fetch.js';\nexport { captureFeedback } from './feedback.js';\nexport { _INTERNAL_captureLog, _INTERNAL_captureSerializedLog, _INTERNAL_flushLogsBuffer } from './logs/internal.js';\nimport * as publicApi from './logs/public-api.js';\nexport { publicApi as logger };\nexport { consoleLoggingIntegration } from './logs/console-integration.js';\nexport { _INTERNAL_captureMetric, _INTERNAL_captureSerializedMetric, _INTERNAL_flushMetricsBuffer } from './metrics/internal.js';\nimport * as publicApi$1 from './metrics/public-api.js';\nexport { publicApi$1 as metrics };\nexport { createConsolaReporter } from './integrations/consola.js';\nexport { LAST_STEP_ONLY_USAGE_KEYS, addVercelAiProcessors, getProviderMetadataAttributes } from './tracing/vercel-ai/index.js';\nexport { getTruncatedJsonString, resolveAIRecordingOptions, shouldEnableTruncation } from './tracing/ai/utils.js';\nexport { GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE, GEN_AI_REQUEST_MODEL_ATTRIBUTE, GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE } from './tracing/ai/gen-ai-attributes.js';\nexport { _INTERNAL_cleanupToolCallSpanContext, _INTERNAL_getSpanContextForToolCallId } from './tracing/vercel-ai/utils.js';\nexport { toolCallSpanContextMap as _INTERNAL_toolCallSpanContextMap } from './tracing/vercel-ai/constants.js';\nexport { addRequestAttributes as addOpenAiRequestAttributes, extractRequestAttributes as extractOpenAiRequestAttributes, instrumentOpenAiClient } from './tracing/openai/index.js';\nexport { addResponseAttributes as addOpenAiResponseAttributes, extractRequestParameters as extractOpenAiRequestParameters } from './tracing/openai/utils.js';\nexport { instrumentStream as instrumentOpenAiStream } from './tracing/openai/streaming.js';\nexport { OPENAI_INTEGRATION_NAME } from './tracing/openai/constants.js';\nexport { addPrivateRequestAttributes as addAnthropicRequestAttributes, addResponseAttributes as addAnthropicResponseAttributes, extractRequestAttributes as extractAnthropicRequestAttributes, instrumentAnthropicAiClient } from './tracing/anthropic-ai/index.js';\nexport { instrumentAsyncIterableStream, instrumentMessageStream } from './tracing/anthropic-ai/streaming.js';\nexport { ANTHROPIC_AI_INTEGRATION_NAME } from './tracing/anthropic-ai/constants.js';\nexport { addPrivateRequestAttributes as addGoogleGenAIRequestAttributes, addResponseAttributes as addGoogleGenAIResponseAttributes, extractRequestAttributes as extractGoogleGenAIRequestAttributes, instrumentGoogleGenAIClient } from './tracing/google-genai/index.js';\nexport { instrumentStream as instrumentGoogleGenAIStream } from './tracing/google-genai/streaming.js';\nexport { GOOGLE_GENAI_INTEGRATION_NAME } from './tracing/google-genai/constants.js';\nexport { createLangChainCallbackHandler } from './tracing/langchain/index.js';\nexport { _INTERNAL_getLangChainEmbeddingsSpanOptions, instrumentLangChainEmbeddings } from './tracing/langchain/embeddings.js';\nexport { _INTERNAL_mergeLangChainCallbackHandler } from './tracing/langchain/utils.js';\nexport { LANGCHAIN_INTEGRATION_NAME } from './tracing/langchain/constants.js';\nexport { _INTERNAL_getLangGraphCreateAgentSpanOptions, instrumentCompiledGraphInvoke, instrumentCreateReactAgent, instrumentLangGraph, instrumentStateGraph, instrumentStateGraphCompile } from './tracing/langgraph/index.js';\nexport { extractAgentNameFromParams, extractLLMFromParams, wrapToolsWithSpans } from './tracing/langgraph/utils.js';\nexport { LANGGRAPH_INTEGRATION_NAME } from './tracing/langgraph/constants.js';\nexport { instrumentWorkersAiClient } from './tracing/workers-ai/index.js';\nexport { SpanBuffer } from './tracing/spans/spanBuffer.js';\nexport { hasSpanStreamingEnabled } from './tracing/spans/hasSpanStreamingEnabled.js';\nexport { spanStreamingIntegration } from './integrations/spanStreaming.js';\nexport { _INTERNAL_FLAG_BUFFER_SIZE, _INTERNAL_MAX_FLAGS_PER_SPAN, _INTERNAL_addFeatureFlagToActiveSpan, _INTERNAL_copyFlagsFromScopeToEvent, _INTERNAL_insertFlagToScope } from './utils/featureFlags.js';\nexport { applyAggregateErrorsToEvent } from './utils/aggregate-errors.js';\nexport { getBreadcrumbLogLevelFromHttpStatusCode } from './utils/breadcrumb-log-level.js';\nexport { dsnFromString, dsnToString, makeDsn } from './utils/dsn.js';\nexport { SentryError } from './utils/error.js';\nexport { GLOBAL_OBJ } from './utils/worldwide.js';\nexport { addConsoleInstrumentationFilter, addConsoleInstrumentationHandler } from './instrument/console.js';\nexport { addFetchEndInstrumentationHandler, addFetchInstrumentationHandler } from './instrument/fetch.js';\nexport { addGlobalErrorInstrumentationHandler } from './instrument/globalError.js';\nexport { addGlobalUnhandledRejectionInstrumentationHandler } from './instrument/globalUnhandledRejection.js';\nexport { addHandler, maybeInstrument, resetInstrumentationHandlers, triggerHandlers } from './instrument/handlers.js';\nexport { isDOMError, isDOMException, isElement, isError, isErrorEvent, isEvent, isInstanceOf, isObjectLike, isParameterizedString, isPlainObject, isPrimitive, isRegExp, isString, isSyntheticEvent, isThenable, isVueViewModel } from './utils/is.js';\nexport { isBrowser } from './utils/isBrowser.js';\nexport { CONSOLE_LEVELS, consoleSandbox, debug, originalConsoleMethods } from './utils/debug-logger.js';\nexport { addContextToFrame, addExceptionMechanism, addExceptionTypeValue, checkOrSetAlreadyCaught, getEventDescription, isAlreadyCaptured, parseSemver, uuid4 } from './utils/misc.js';\nexport { normalize, normalizeToSize, normalizeUrlToBase, setNormalizeStringifier } from './utils/normalize.js';\nexport { setNormalizationDepthOverrideHint, setSkipNormalizationHint } from './utils/normalizationHints.js';\nexport { addNonEnumerableProperty, convertToPlainObject, dropUndefinedKeys, extractExceptionKeysForMessage, fill, getOriginalFunction, markFunctionWrapped, objectify } from './utils/object.js';\nexport { basename, dirname, isAbsolute, join, normalizePath, relative, resolve } from './utils/path.js';\nexport { SENTRY_BUFFER_FULL_ERROR, makePromiseBuffer } from './utils/promisebuffer.js';\nexport { severityLevelFromString } from './utils/severity.js';\nexport { replaceExports } from './utils/exports.js';\nexport { UNKNOWN_FUNCTION, createStackParser, getFramesFromEvent, getFunctionName, stackParserFromStackParserOptions, stripSentryFramesAndReverse } from './utils/stacktrace.js';\nexport { isMatchingPattern, safeJoin, snipLine, stringMatchesSomePattern, stringify, truncate } from './utils/string.js';\nexport { isNativeFunction, supportsDOMError, supportsDOMException, supportsErrorEvent, supportsFetch, supportsHistory, supportsNativeFetch, supportsReferrerPolicy, supportsReportingObserver } from './utils/supports.js';\nexport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise } from './utils/syncpromise.js';\nexport { browserPerformanceTimeOrigin, dateTimestampInSeconds, timestampInSeconds } from './utils/time.js';\nexport { TRACEPARENT_REGEXP, extractTraceparentData, generateSentryTraceHeader, generateTraceparentHeader, isContinuingTrace, propagationContextFromHeaders, shouldContinueTrace } from './utils/tracing.js';\nexport { getSDKSource, isBrowserBundle } from './utils/env.js';\nexport { addItemToEnvelope, createAttachmentEnvelopeItem, createEnvelope, createEventEnvelopeHeaders, createSpanEnvelopeItem, envelopeContainsItemType, envelopeItemTypeToDataCategory, forEachEnvelopeItem, getSdkMetadataForEnvelopeHeader, parseEnvelope, serializeEnvelope } from './utils/envelope.js';\nexport { createClientReportEnvelope } from './utils/clientreport.js';\nexport { DEFAULT_RETRY_AFTER, disabledUntil, isRateLimited, parseRetryAfterHeader, updateRateLimits } from './utils/ratelimit.js';\nexport { MAX_BAGGAGE_STRING_LENGTH, SENTRY_BAGGAGE_KEY_PREFIX, SENTRY_BAGGAGE_KEY_PREFIX_REGEX, baggageHeaderToDynamicSamplingContext, dynamicSamplingContextToSentryBaggageHeader, mergeBaggageHeaders, objectToBaggageHeader, parseBaggageHeader } from './utils/baggage.js';\nexport { getHttpSpanDetailsFromUrlObject, getSanitizedUrlString, getSanitizedUrlStringFromUrlObject, isURLObjectRelative, parseStringToURLObject, parseUrl, stripDataUrlContent, stripUrlQueryAndFragment } from './utils/url.js';\nexport { _enhanceErrorWithSentryInfo as _INTERNAL_enhanceErrorWithSentryInfo, eventFromMessage, eventFromUnknownInput, exceptionFromError, parseStackFrames } from './utils/eventbuilder.js';\nexport { LRUMap } from './utils/lru.js';\nexport { generateSpanId, generateTraceId } from './utils/propagationContext.js';\nexport { SDK_VERSION } from './utils/version.js';\nexport { getDebugImagesForResources, getFilenameToDebugIdMap } from './utils/debug-ids.js';\nexport { getFilenameToMetadataMap } from './metadata.js';\nexport { escapeStringForRegex } from './vendor/escapeStringForRegex.js';\nexport { safeDateNow as _INTERNAL_safeDateNow, safeMathRandom as _INTERNAL_safeMathRandom, withRandomSafeContext as _INTERNAL_withRandomSafeContext } from './utils/randomSafeContext.js';\nexport { ServerRuntimeClient } from './server-runtime-client.js';\nexport { trpcMiddleware } from './trpc.js';\nexport { wrapMcpServerWithSentry } from './integrations/mcp-server/index.js';\nexport { isNodeEnv, loadModule } from './utils/node.js';\nexport { filenameIsInApp, node, nodeStackLineParser } from './utils/node-stack-trace.js';\nexport { vercelWaitUntil } from './utils/vercelWaitUntil.js';\nexport { flushIfServerless } from './utils/flushIfServerless.js';\nexport { callFrameToStackFrame, watchdogTimer } from './utils/anr.js';\nexport { safeUnref as _INTERNAL_safeUnref } from './utils/timer.js';\nexport { expressErrorHandler, patchExpressModule, setupExpressErrorHandler } from './integrations/express/index.js';\nexport { _buildConnectionContext as _INTERNAL_buildPostgresConnectionContext, _reconstructQuery as _INTERNAL_reconstructPostgresQuery, _sanitizeSqlQuery as _INTERNAL_sanitizeSqlQuery, _setConnectionAttributes as _INTERNAL_setPostgresConnectionAttributes, _setOperationName as _INTERNAL_setPostgresOperationName, instrumentPostgresJsSql } from './integrations/postgresjs.js';\nexport { getSqlQuerySummary as _INTERNAL_getSqlQuerySummary } from './utils/sql.js';\nexport { patchHttpModuleClient } from './integrations/http/client-patch.js';\nexport { getHttpClientSubscriptions } from './integrations/http/client-subscriptions.js';\nexport { getHttpServerSubscriptions, isStaticAssetRequest } from './integrations/http/server-subscription.js';\nexport { recordRequestSession } from './integrations/http/record-request-session.js';\nexport { addOutgoingRequestBreadcrumb } from './integrations/http/add-outgoing-request-breadcrumb.js';\nexport { getRequestOptions, getRequestUrl, getRequestUrlFromClientRequest, getRequestUrlObject } from './integrations/http/get-request-url.js';\nexport { HTTP_ON_CLIENT_REQUEST, HTTP_ON_SERVER_REQUEST } from './integrations/http/constants.js';\nexport { getComponentName, getLocationHref, htmlTreeAsString } from './utils/browser.js';\n//# sourceMappingURL=index.js.map\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '1.9.1';\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { VERSION } from '../version';\n\nconst re = /^(\\d+)\\.(\\d+)\\.(\\d+)(-(.+))?$/;\n\n/**\n * Create a function to test an API version to see if it is compatible with the provided ownVersion.\n *\n * The returned function has the following semantics:\n * - Exact match is always compatible\n * - Major versions must match exactly\n *    - 1.x package cannot use global 2.x package\n *    - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n *    - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n *    - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param ownVersion version which should be checked against\n */\nexport function _makeCompatibilityCheck(\n  ownVersion: string\n): (globalVersion: string) => boolean {\n  const acceptedVersions = new Set<string>([ownVersion]);\n  const rejectedVersions = new Set<string>();\n\n  const myVersionMatch = ownVersion.match(re);\n  if (!myVersionMatch) {\n    // we cannot guarantee compatibility so we always return noop\n    return () => false;\n  }\n\n  const ownVersionParsed = {\n    major: +myVersionMatch[1],\n    minor: +myVersionMatch[2],\n    patch: +myVersionMatch[3],\n    prerelease: myVersionMatch[4],\n  };\n\n  // if ownVersion has a prerelease tag, versions must match exactly\n  if (ownVersionParsed.prerelease != null) {\n    return function isExactmatch(globalVersion: string): boolean {\n      return globalVersion === ownVersion;\n    };\n  }\n\n  function _reject(v: string) {\n    rejectedVersions.add(v);\n    return false;\n  }\n\n  function _accept(v: string) {\n    acceptedVersions.add(v);\n    return true;\n  }\n\n  return function isCompatible(globalVersion: string): boolean {\n    if (acceptedVersions.has(globalVersion)) {\n      return true;\n    }\n\n    if (rejectedVersions.has(globalVersion)) {\n      return false;\n    }\n\n    const globalVersionMatch = globalVersion.match(re);\n    if (!globalVersionMatch) {\n      // cannot parse other version\n      // we cannot guarantee compatibility so we always noop\n      return _reject(globalVersion);\n    }\n\n    const globalVersionParsed = {\n      major: +globalVersionMatch[1],\n      minor: +globalVersionMatch[2],\n      patch: +globalVersionMatch[3],\n      prerelease: globalVersionMatch[4],\n    };\n\n    // if globalVersion has a prerelease tag, versions must match exactly\n    if (globalVersionParsed.prerelease != null) {\n      return _reject(globalVersion);\n    }\n\n    // major versions must match\n    if (ownVersionParsed.major !== globalVersionParsed.major) {\n      return _reject(globalVersion);\n    }\n\n    if (ownVersionParsed.major === 0) {\n      if (\n        ownVersionParsed.minor === globalVersionParsed.minor &&\n        ownVersionParsed.patch <= globalVersionParsed.patch\n      ) {\n        return _accept(globalVersion);\n      }\n\n      return _reject(globalVersion);\n    }\n\n    if (ownVersionParsed.minor <= globalVersionParsed.minor) {\n      return _accept(globalVersion);\n    }\n\n    return _reject(globalVersion);\n  };\n}\n\n/**\n * Test an API version to see if it is compatible with this API.\n *\n * - Exact match is always compatible\n * - Major versions must match exactly\n *    - 1.x package cannot use global 2.x package\n *    - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n *    - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n *    - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param version version of the API requesting an instance of the global API\n */\nexport const isCompatible = _makeCompatibilityCheck(VERSION);\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { MeterProvider } from '../metrics/MeterProvider';\nimport type { ContextManager } from '../context/types';\nimport type { DiagLogger } from '../diag/types';\nimport type { TextMapPropagator } from '../propagation/TextMapPropagator';\nimport type { TracerProvider } from '../trace/tracer_provider';\nimport { VERSION } from '../version';\nimport { isCompatible } from './semver';\n\nconst major = VERSION.split('.')[0];\nconst GLOBAL_OPENTELEMETRY_API_KEY = Symbol.for(\n  `opentelemetry.js.api.${major}`\n);\n\ndeclare const self: unknown;\ndeclare const window: unknown;\ndeclare const global: unknown;\n\nconst _global = (\n  typeof globalThis === 'object'\n    ? globalThis\n    : typeof self === 'object'\n      ? self\n      : typeof window === 'object'\n        ? window\n        : typeof global === 'object'\n          ? global\n          : {}\n) as OTelGlobal;\n\nexport function registerGlobal<Type extends keyof OTelGlobalAPI>(\n  type: Type,\n  instance: OTelGlobalAPI[Type],\n  diag: DiagLogger,\n  allowOverride = false\n): boolean {\n  const api = (_global[GLOBAL_OPENTELEMETRY_API_KEY] = _global[\n    GLOBAL_OPENTELEMETRY_API_KEY\n  ] ?? {\n    version: VERSION,\n  });\n\n  if (!allowOverride && api[type]) {\n    // already registered an API of this type\n    const err = new Error(\n      `@opentelemetry/api: Attempted duplicate registration of API: ${type}`\n    );\n    diag.error(err.stack || err.message);\n    return false;\n  }\n\n  if (api.version !== VERSION) {\n    // All registered APIs must be of the same version exactly\n    const err = new Error(\n      `@opentelemetry/api: Registration of version v${api.version} for ${type} does not match previously registered API v${VERSION}`\n    );\n    diag.error(err.stack || err.message);\n    return false;\n  }\n\n  api[type] = instance;\n  diag.debug(\n    `@opentelemetry/api: Registered a global for ${type} v${VERSION}.`\n  );\n\n  return true;\n}\n\nexport function getGlobal<Type extends keyof OTelGlobalAPI>(\n  type: Type\n): OTelGlobalAPI[Type] | undefined {\n  const globalVersion = _global[GLOBAL_OPENTELEMETRY_API_KEY]?.version;\n  if (!globalVersion || !isCompatible(globalVersion)) {\n    return;\n  }\n  return _global[GLOBAL_OPENTELEMETRY_API_KEY]?.[type];\n}\n\nexport function unregisterGlobal(type: keyof OTelGlobalAPI, diag: DiagLogger) {\n  diag.debug(\n    `@opentelemetry/api: Unregistering a global for ${type} v${VERSION}.`\n  );\n  const api = _global[GLOBAL_OPENTELEMETRY_API_KEY];\n\n  if (api) {\n    delete api[type];\n  }\n}\n\ntype OTelGlobal = {\n  [GLOBAL_OPENTELEMETRY_API_KEY]?: OTelGlobalAPI;\n};\n\ntype OTelGlobalAPI = {\n  version: string;\n\n  diag?: DiagLogger;\n  trace?: TracerProvider;\n  context?: ContextManager;\n  metrics?: MeterProvider;\n  propagation?: TextMapPropagator;\n};\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getGlobal } from '../internal/global-utils';\nimport type { ComponentLoggerOptions, DiagLogger } from './types';\n\n/**\n * Component Logger which is meant to be used as part of any component which\n * will add automatically additional namespace in front of the log message.\n * It will then forward all message to global diag logger\n * @example\n * const cLogger = diag.createComponentLogger({ namespace: '@opentelemetry/instrumentation-http' });\n * cLogger.debug('test');\n * // @opentelemetry/instrumentation-http test\n */\nexport class DiagComponentLogger implements DiagLogger {\n  private _namespace: string;\n\n  constructor(props: ComponentLoggerOptions) {\n    this._namespace = props.namespace || 'DiagComponentLogger';\n  }\n\n  public debug(...args: unknown[]): void {\n    return logProxy('debug', this._namespace, args);\n  }\n\n  public error(...args: unknown[]): void {\n    return logProxy('error', this._namespace, args);\n  }\n\n  public info(...args: unknown[]): void {\n    return logProxy('info', this._namespace, args);\n  }\n\n  public warn(...args: unknown[]): void {\n    return logProxy('warn', this._namespace, args);\n  }\n\n  public verbose(...args: unknown[]): void {\n    return logProxy('verbose', this._namespace, args);\n  }\n}\n\nfunction logProxy(\n  funcName: keyof DiagLogger,\n  namespace: string,\n  args: unknown[]\n): void {\n  const logger = getGlobal('diag');\n  // shortcut if logger not set\n  if (!logger) {\n    return;\n  }\n\n  return logger[funcName](namespace, ...args);\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @since 1.0.0\n */\nexport type DiagLogFunction = (message: string, ...args: unknown[]) => void;\n\n/**\n * Defines an internal diagnostic logger interface which is used to log internal diagnostic\n * messages, you can set the default diagnostic logger via the {@link DiagAPI} setLogger function.\n * API provided implementations include :-\n * - a No-Op {@link createNoopDiagLogger}\n * - a {@link DiagLogLevel} filtering wrapper {@link createLogLevelDiagLogger}\n * - a general Console {@link DiagConsoleLogger} version.\n *\n * @since 1.0.0\n */\nexport interface DiagLogger {\n  /** Log an error scenario that was not expected and caused the requested operation to fail. */\n  error: DiagLogFunction;\n\n  /**\n   * Log a warning scenario to inform the developer of an issues that should be investigated.\n   * The requested operation may or may not have succeeded or completed.\n   */\n  warn: DiagLogFunction;\n\n  /**\n   * Log a general informational message, this should not affect functionality.\n   * This is also the default logging level so this should NOT be used for logging\n   * debugging level information.\n   */\n  info: DiagLogFunction;\n\n  /**\n   * Log a general debug message that can be useful for identifying a failure.\n   * Information logged at this level may include diagnostic details that would\n   * help identify a failure scenario.\n   * For example: Logging the order of execution of async operations.\n   */\n  debug: DiagLogFunction;\n\n  /**\n   * Log a detailed (verbose) trace level logging that can be used to identify failures\n   * where debug level logging would be insufficient, this level of tracing can include\n   * input and output parameters and as such may include PII information passing through\n   * the API. As such it is recommended that this level of tracing should not be enabled\n   * in a production environment.\n   */\n  verbose: DiagLogFunction;\n}\n\n/**\n * Defines the available internal logging levels for the diagnostic logger, the numeric values\n * of the levels are defined to match the original values from the initial LogLevel to avoid\n * compatibility/migration issues for any implementation that assume the numeric ordering.\n */\nexport enum DiagLogLevel {\n  /** Diagnostic Logging level setting to disable all logging (except and forced logs) */\n  NONE = 0,\n\n  /** Identifies an error scenario */\n  ERROR = 30,\n\n  /** Identifies a warning scenario */\n  WARN = 50,\n\n  /** General informational log message */\n  INFO = 60,\n\n  /** General debug log message */\n  DEBUG = 70,\n\n  /**\n   * Detailed trace level logging should only be used for development, should only be set\n   * in a development environment.\n   */\n  VERBOSE = 80,\n\n  /** Used to set the logging level to include all logging */\n  ALL = 9999,\n}\n\n/**\n * Defines options for ComponentLogger\n *\n * @since 1.0.0\n */\nexport interface ComponentLoggerOptions {\n  namespace: string;\n}\n\n/**\n * @since 1.4.1\n */\nexport interface DiagLoggerOptions {\n  /**\n   * The {@link DiagLogLevel} used to filter logs sent to the logger.\n   *\n   * @defaultValue DiagLogLevel.INFO\n   */\n  logLevel?: DiagLogLevel;\n\n  /**\n   * Setting this value to `true` will suppress the warning message normally emitted when registering a logger when another logger is already registered.\n   */\n  suppressOverrideMessage?: boolean;\n}\n\nexport interface DiagLoggerApi {\n  /**\n   * Set the global DiagLogger and DiagLogLevel.\n   * If a global diag logger is already set, this will override it.\n   *\n   * @param logger - The {@link DiagLogger} instance to set as the default logger.\n   * @param options - A {@link DiagLoggerOptions} object. If not provided, default values will be set.\n   * @returns `true` if the logger was successfully registered, else `false`\n   */\n  setLogger(logger: DiagLogger, options?: DiagLoggerOptions): boolean;\n\n  /**\n   *\n   * @param logger - The {@link DiagLogger} instance to set as the default logger.\n   * @param logLevel - The {@link DiagLogLevel} used to filter logs sent to the logger. If not provided it will default to {@link DiagLogLevel.INFO}.\n   * @returns `true` if the logger was successfully registered, else `false`\n   */\n  setLogger(logger: DiagLogger, logLevel?: DiagLogLevel): boolean;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DiagLogFunction, DiagLogger } from '../types';\nimport { DiagLogLevel } from '../types';\n\nexport function createLogLevelDiagLogger(\n  maxLevel: DiagLogLevel,\n  logger: DiagLogger\n): DiagLogger {\n  if (maxLevel < DiagLogLevel.NONE) {\n    maxLevel = DiagLogLevel.NONE;\n  } else if (maxLevel > DiagLogLevel.ALL) {\n    maxLevel = DiagLogLevel.ALL;\n  }\n\n  // In case the logger is null or undefined\n  logger = logger || {};\n\n  function _filterFunc(\n    funcName: keyof DiagLogger,\n    theLevel: DiagLogLevel\n  ): DiagLogFunction {\n    const theFunc = logger[funcName];\n\n    if (typeof theFunc === 'function' && maxLevel >= theLevel) {\n      return theFunc.bind(logger);\n    }\n    return function () {};\n  }\n\n  return {\n    error: _filterFunc('error', DiagLogLevel.ERROR),\n    warn: _filterFunc('warn', DiagLogLevel.WARN),\n    info: _filterFunc('info', DiagLogLevel.INFO),\n    debug: _filterFunc('debug', DiagLogLevel.DEBUG),\n    verbose: _filterFunc('verbose', DiagLogLevel.VERBOSE),\n  };\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { DiagComponentLogger } from '../diag/ComponentLogger';\nimport { createLogLevelDiagLogger } from '../diag/internal/logLevelLogger';\nimport type {\n  ComponentLoggerOptions,\n  DiagLogFunction,\n  DiagLogger,\n  DiagLoggerApi,\n} from '../diag/types';\nimport { DiagLogLevel } from '../diag/types';\nimport {\n  getGlobal,\n  registerGlobal,\n  unregisterGlobal,\n} from '../internal/global-utils';\n\nconst API_NAME = 'diag';\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry internal\n * diagnostic API\n *\n * @since 1.0.0\n */\nexport class DiagAPI implements DiagLogger, DiagLoggerApi {\n  private static _instance?: DiagAPI;\n\n  /** Get the singleton instance of the DiagAPI API */\n  public static instance(): DiagAPI {\n    if (!this._instance) {\n      this._instance = new DiagAPI();\n    }\n\n    return this._instance;\n  }\n\n  /**\n   * Private internal constructor\n   * @private\n   */\n  private constructor() {\n    function _logProxy(funcName: keyof DiagLogger): DiagLogFunction {\n      return function (...args) {\n        const logger = getGlobal('diag');\n        // shortcut if logger not set\n        if (!logger) return;\n        return logger[funcName](...args);\n      };\n    }\n\n    // Using self local variable for minification purposes as 'this' cannot be minified\n    const self = this;\n\n    // DiagAPI specific functions\n\n    const setLogger: DiagLoggerApi['setLogger'] = (\n      logger,\n      optionsOrLogLevel = { logLevel: DiagLogLevel.INFO }\n    ) => {\n      if (logger === self) {\n        // There isn't much we can do here.\n        // Logging to the console might break the user application.\n        // Try to log to self. If a logger was previously registered it will receive the log.\n        const err = new Error(\n          'Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation'\n        );\n        self.error(err.stack ?? err.message);\n        return false;\n      }\n\n      if (typeof optionsOrLogLevel === 'number') {\n        optionsOrLogLevel = {\n          logLevel: optionsOrLogLevel,\n        };\n      }\n\n      const oldLogger = getGlobal('diag');\n      const newLogger = createLogLevelDiagLogger(\n        optionsOrLogLevel.logLevel ?? DiagLogLevel.INFO,\n        logger\n      );\n      // There already is an logger registered. We'll let it know before overwriting it.\n      if (oldLogger && !optionsOrLogLevel.suppressOverrideMessage) {\n        const stack = new Error().stack ?? '<failed to generate stacktrace>';\n        oldLogger.warn(`Current logger will be overwritten from ${stack}`);\n        newLogger.warn(\n          `Current logger will overwrite one already registered from ${stack}`\n        );\n      }\n\n      return registerGlobal('diag', newLogger, self, true);\n    };\n\n    self.setLogger = setLogger;\n\n    self.disable = () => {\n      unregisterGlobal(API_NAME, self);\n    };\n\n    self.createComponentLogger = (options: ComponentLoggerOptions) => {\n      return new DiagComponentLogger(options);\n    };\n\n    self.verbose = _logProxy('verbose');\n    self.debug = _logProxy('debug');\n    self.info = _logProxy('info');\n    self.warn = _logProxy('warn');\n    self.error = _logProxy('error');\n  }\n\n  public setLogger!: DiagLoggerApi['setLogger'];\n  /**\n   *\n   */\n  public createComponentLogger!: (\n    options: ComponentLoggerOptions\n  ) => DiagLogger;\n\n  // DiagLogger implementation\n  public verbose!: DiagLogFunction;\n  public debug!: DiagLogFunction;\n  public info!: DiagLogFunction;\n  public warn!: DiagLogFunction;\n  public error!: DiagLogFunction;\n\n  /**\n   * Unregister the global logger and return to Noop\n   */\n  public disable!: () => void;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Baggage, BaggageEntry } from '../types';\n\nexport class BaggageImpl implements Baggage {\n  private _entries: Map<string, BaggageEntry>;\n\n  constructor(entries?: Map<string, BaggageEntry>) {\n    this._entries = entries ? new Map(entries) : new Map();\n  }\n\n  getEntry(key: string): BaggageEntry | undefined {\n    const entry = this._entries.get(key);\n    if (!entry) {\n      return undefined;\n    }\n\n    return Object.assign({}, entry);\n  }\n\n  getAllEntries(): [string, BaggageEntry][] {\n    return Array.from(this._entries.entries());\n  }\n\n  setEntry(key: string, entry: BaggageEntry): BaggageImpl {\n    const newBaggage = new BaggageImpl(this._entries);\n    newBaggage._entries.set(key, entry);\n    return newBaggage;\n  }\n\n  removeEntry(key: string): BaggageImpl {\n    const newBaggage = new BaggageImpl(this._entries);\n    newBaggage._entries.delete(key);\n    return newBaggage;\n  }\n\n  removeEntries(...keys: string[]): BaggageImpl {\n    const newBaggage = new BaggageImpl(this._entries);\n    for (const key of keys) {\n      newBaggage._entries.delete(key);\n    }\n    return newBaggage;\n  }\n\n  clear(): BaggageImpl {\n    return new BaggageImpl();\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Symbol used to make BaggageEntryMetadata an opaque type\n */\nexport const baggageEntryMetadataSymbol = Symbol('BaggageEntryMetadata');\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { DiagAPI } from '../api/diag';\nimport { BaggageImpl } from './internal/baggage-impl';\nimport { baggageEntryMetadataSymbol } from './internal/symbol';\nimport type { Baggage, BaggageEntry, BaggageEntryMetadata } from './types';\n\nconst diag = DiagAPI.instance();\n\n/**\n * Create a new Baggage with optional entries\n *\n * @param entries An array of baggage entries the new baggage should contain\n */\nexport function createBaggage(\n  entries: Record<string, BaggageEntry> = {}\n): Baggage {\n  return new BaggageImpl(new Map(Object.entries(entries)));\n}\n\n/**\n * Create a serializable BaggageEntryMetadata object from a string.\n *\n * @param str string metadata. Format is currently not defined by the spec and has no special meaning.\n *\n * @since 1.0.0\n */\nexport function baggageEntryMetadataFromString(\n  str: string\n): BaggageEntryMetadata {\n  if (typeof str !== 'string') {\n    diag.error(\n      `Cannot create baggage metadata from unknown type: ${typeof str}`\n    );\n    str = '';\n  }\n\n  return {\n    __TYPE__: baggageEntryMetadataSymbol,\n    toString() {\n      return str;\n    },\n  };\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Context } from './types';\n\n/**\n * Get a key to uniquely identify a context value\n *\n * @since 1.0.0\n */\nexport function createContextKey(description: string) {\n  // The specification states that for the same input, multiple calls should\n  // return different keys. Due to the nature of the JS dependency management\n  // system, this creates problems where multiple versions of some package\n  // could hold different keys for the same property.\n  //\n  // Therefore, we use Symbol.for which returns the same key for the same input.\n  return Symbol.for(description);\n}\n\nclass BaseContext implements Context {\n  private _currentContext!: Map<symbol, unknown>;\n\n  /**\n   * Construct a new context which inherits values from an optional parent context.\n   *\n   * @param parentContext a context from which to inherit values\n   */\n  constructor(parentContext?: Map<symbol, unknown>) {\n    // for minification\n    const self = this;\n\n    self._currentContext = parentContext ? new Map(parentContext) : new Map();\n\n    self.getValue = (key: symbol) => self._currentContext.get(key);\n\n    self.setValue = (key: symbol, value: unknown): Context => {\n      const context = new BaseContext(self._currentContext);\n      context._currentContext.set(key, value);\n      return context;\n    };\n\n    self.deleteValue = (key: symbol): Context => {\n      const context = new BaseContext(self._currentContext);\n      context._currentContext.delete(key);\n      return context;\n    };\n  }\n\n  /**\n   * Get a value from the context.\n   *\n   * @param key key which identifies a context value\n   */\n  public getValue!: (key: symbol) => unknown;\n\n  /**\n   * Create a new context which inherits from this context and has\n   * the given key set to the given value.\n   *\n   * @param key context key for which to set the value\n   * @param value value to set for the given key\n   */\n  public setValue!: (key: symbol, value: unknown) => Context;\n\n  /**\n   * Return a new context which inherits from this context but does\n   * not contain a value for the given key.\n   *\n   * @param key context key for which to clear a value\n   */\n  public deleteValue!: (key: symbol) => Context;\n}\n\n/**\n * The root context is used as the default parent context when there is no active context\n *\n * @since 1.0.0\n */\nexport const ROOT_CONTEXT: Context = new BaseContext();\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DiagLogger, DiagLogFunction } from './types';\n\ntype ConsoleMapKeys = 'error' | 'warn' | 'info' | 'debug' | 'trace';\nconst consoleMap: { n: keyof DiagLogger; c: ConsoleMapKeys }[] = [\n  { n: 'error', c: 'error' },\n  { n: 'warn', c: 'warn' },\n  { n: 'info', c: 'info' },\n  { n: 'debug', c: 'debug' },\n  { n: 'verbose', c: 'trace' },\n];\n\n// Save original console methods at module load time, before any instrumentation\n// can wrap them. This ensures DiagConsoleLogger calls the unwrapped originals.\n// Exported for testing only — not part of the public API.\nexport const _originalConsoleMethods: Partial<\n  Record<ConsoleMapKeys | 'log', typeof console.log>\n> = {};\nif (typeof console !== 'undefined') {\n  const keys: (ConsoleMapKeys | 'log')[] = [\n    'error',\n    'warn',\n    'info',\n    'debug',\n    'trace',\n    'log',\n  ];\n  for (const key of keys) {\n    // eslint-disable-next-line no-console\n    if (typeof console[key] === 'function') {\n      // eslint-disable-next-line no-console\n      _originalConsoleMethods[key] = console[key];\n    }\n  }\n}\n\n/**\n * A simple Immutable Console based diagnostic logger which will output any messages to the Console.\n * If you want to limit the amount of logging to a specific level or lower use the\n * {@link createLogLevelDiagLogger}\n *\n * @since 1.0.0\n */\nexport class DiagConsoleLogger implements DiagLogger {\n  constructor() {\n    function _consoleFunc(funcName: ConsoleMapKeys): DiagLogFunction {\n      return function (...args) {\n        // Prefer original (pre-instrumentation) methods saved at module load time.\n        let theFunc = _originalConsoleMethods[funcName];\n        // Some environments only expose the console when the F12 developer console is open\n        if (typeof theFunc !== 'function') {\n          theFunc = _originalConsoleMethods['log'];\n        }\n        // Fall back in case console was not available at module load time but became available later.\n        if (typeof theFunc !== 'function' && console) {\n          // eslint-disable-next-line no-console\n          theFunc = console[funcName];\n          if (typeof theFunc !== 'function') {\n            // eslint-disable-next-line no-console\n            theFunc = console.log;\n          }\n        }\n        if (typeof theFunc === 'function') {\n          return theFunc.apply(console, args);\n        }\n      };\n    }\n\n    for (let i = 0; i < consoleMap.length; i++) {\n      this[consoleMap[i].n] = _consoleFunc(consoleMap[i].c);\n    }\n  }\n\n  /** Log an error scenario that was not expected and caused the requested operation to fail. */\n  public error!: DiagLogFunction;\n\n  /**\n   * Log a warning scenario to inform the developer of an issues that should be investigated.\n   * The requested operation may or may not have succeeded or completed.\n   */\n  public warn!: DiagLogFunction;\n\n  /**\n   * Log a general informational message, this should not affect functionality.\n   * This is also the default logging level so this should NOT be used for logging\n   * debugging level information.\n   */\n  public info!: DiagLogFunction;\n\n  /**\n   * Log a general debug message that can be useful for identifying a failure.\n   * Information logged at this level may include diagnostic details that would\n   * help identify a failure scenario. Useful scenarios would be to log the execution\n   * order of async operations\n   */\n  public debug!: DiagLogFunction;\n\n  /**\n   * Log a detailed (verbose) trace level logging that can be used to identify failures\n   * where debug level logging would be insufficient, this level of tracing can include\n   * input and output parameters and as such may include PII information passing through\n   * the API. As such it is recommended that this level of tracing should not be enabled\n   * in a production environment.\n   */\n  public verbose!: DiagLogFunction;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Meter } from './Meter';\nimport type {\n  BatchObservableCallback,\n  Counter,\n  Gauge,\n  Histogram,\n  MetricAttributes,\n  MetricOptions,\n  Observable,\n  ObservableCallback,\n  ObservableCounter,\n  ObservableGauge,\n  ObservableUpDownCounter,\n  UpDownCounter,\n} from './Metric';\n\n/**\n * NoopMeter is a noop implementation of the {@link Meter} interface. It reuses\n * constant NoopMetrics for all of its methods.\n */\nexport class NoopMeter implements Meter {\n  constructor() {}\n\n  /**\n   * @see {@link Meter.createGauge}\n   */\n  createGauge(_name: string, _options?: MetricOptions): Gauge {\n    return NOOP_GAUGE_METRIC;\n  }\n\n  /**\n   * @see {@link Meter.createHistogram}\n   */\n  createHistogram(_name: string, _options?: MetricOptions): Histogram {\n    return NOOP_HISTOGRAM_METRIC;\n  }\n\n  /**\n   * @see {@link Meter.createCounter}\n   */\n  createCounter(_name: string, _options?: MetricOptions): Counter {\n    return NOOP_COUNTER_METRIC;\n  }\n\n  /**\n   * @see {@link Meter.createUpDownCounter}\n   */\n  createUpDownCounter(_name: string, _options?: MetricOptions): UpDownCounter {\n    return NOOP_UP_DOWN_COUNTER_METRIC;\n  }\n\n  /**\n   * @see {@link Meter.createObservableGauge}\n   */\n  createObservableGauge(\n    _name: string,\n    _options?: MetricOptions\n  ): ObservableGauge {\n    return NOOP_OBSERVABLE_GAUGE_METRIC;\n  }\n\n  /**\n   * @see {@link Meter.createObservableCounter}\n   */\n  createObservableCounter(\n    _name: string,\n    _options?: MetricOptions\n  ): ObservableCounter {\n    return NOOP_OBSERVABLE_COUNTER_METRIC;\n  }\n\n  /**\n   * @see {@link Meter.createObservableUpDownCounter}\n   */\n  createObservableUpDownCounter(\n    _name: string,\n    _options?: MetricOptions\n  ): ObservableUpDownCounter {\n    return NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC;\n  }\n\n  /**\n   * @see {@link Meter.addBatchObservableCallback}\n   */\n  addBatchObservableCallback(\n    _callback: BatchObservableCallback,\n    _observables: Observable[]\n  ): void {}\n\n  /**\n   * @see {@link Meter.removeBatchObservableCallback}\n   */\n  removeBatchObservableCallback(_callback: BatchObservableCallback): void {}\n}\n\nexport class NoopMetric {}\n\nexport class NoopCounterMetric extends NoopMetric implements Counter {\n  add(_value: number, _attributes: MetricAttributes): void {}\n}\n\nexport class NoopUpDownCounterMetric\n  extends NoopMetric\n  implements UpDownCounter\n{\n  add(_value: number, _attributes: MetricAttributes): void {}\n}\n\nexport class NoopGaugeMetric extends NoopMetric implements Gauge {\n  record(_value: number, _attributes: MetricAttributes): void {}\n}\n\nexport class NoopHistogramMetric extends NoopMetric implements Histogram {\n  record(_value: number, _attributes: MetricAttributes): void {}\n}\n\nexport class NoopObservableMetric {\n  addCallback(_callback: ObservableCallback) {}\n\n  removeCallback(_callback: ObservableCallback) {}\n}\n\nexport class NoopObservableCounterMetric\n  extends NoopObservableMetric\n  implements ObservableCounter {}\n\nexport class NoopObservableGaugeMetric\n  extends NoopObservableMetric\n  implements ObservableGauge {}\n\nexport class NoopObservableUpDownCounterMetric\n  extends NoopObservableMetric\n  implements ObservableUpDownCounter {}\n\nexport const NOOP_METER = new NoopMeter();\n\n// Synchronous instruments\nexport const NOOP_COUNTER_METRIC = new NoopCounterMetric();\nexport const NOOP_GAUGE_METRIC = new NoopGaugeMetric();\nexport const NOOP_HISTOGRAM_METRIC = new NoopHistogramMetric();\nexport const NOOP_UP_DOWN_COUNTER_METRIC = new NoopUpDownCounterMetric();\n\n// Asynchronous instruments\nexport const NOOP_OBSERVABLE_COUNTER_METRIC = new NoopObservableCounterMetric();\nexport const NOOP_OBSERVABLE_GAUGE_METRIC = new NoopObservableGaugeMetric();\nexport const NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC =\n  new NoopObservableUpDownCounterMetric();\n\n/**\n * Create a no-op Meter\n *\n * @since 1.3.0\n */\nexport function createNoopMeter(): Meter {\n  return NOOP_METER;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Attributes, AttributeValue } from '../common/Attributes';\nimport type { Context } from '../context/types';\n\n/**\n * Advisory options influencing aggregation configuration parameters.\n *\n * @since 1.7.0\n * @experimental\n */\nexport interface MetricAdvice {\n  /**\n   * Hint the explicit bucket boundaries for SDK if the metric is been\n   * aggregated with a HistogramAggregator.\n   */\n  explicitBucketBoundaries?: number[];\n}\n\n/**\n * Options needed for metric creation\n *\n * @since 1.3.0\n */\nexport interface MetricOptions {\n  /**\n   * The description of the Metric.\n   * @default ''\n   */\n  description?: string;\n\n  /**\n   * The unit of the Metric values.\n   * @default ''\n   */\n  unit?: string;\n\n  /**\n   * Indicates the type of the recorded value.\n   * @default {@link ValueType.DOUBLE}\n   */\n  valueType?: ValueType;\n\n  /**\n   * The advice influencing aggregation configuration parameters.\n   * @experimental\n   * @since 1.7.0\n   */\n  advice?: MetricAdvice;\n}\n\n/**\n * The Type of value. It describes how the data is reported.\n *\n * @since 1.3.0\n */\nexport enum ValueType {\n  INT,\n  DOUBLE,\n}\n\n/**\n * Counter is the most common synchronous instrument. This instrument supports\n * an `Add(increment)` function for reporting a sum, and is restricted to\n * non-negative increments. The default aggregation is Sum, as for any additive\n * instrument.\n *\n * Example uses for Counter:\n * <ol>\n *   <li> count the number of bytes received. </li>\n *   <li> count the number of requests completed. </li>\n *   <li> count the number of accounts created. </li>\n *   <li> count the number of checkpoints run. </li>\n *   <li> count the number of 5xx errors. </li>\n * <ol>\n *\n * @since 1.3.0\n */\nexport interface Counter<\n  AttributesTypes extends MetricAttributes = MetricAttributes,\n> {\n  /**\n   * Increment value of counter by the input. Inputs must not be negative.\n   */\n  add(value: number, attributes?: AttributesTypes, context?: Context): void;\n}\n\n/**\n * @since 1.3.0\n */\nexport interface UpDownCounter<\n  AttributesTypes extends MetricAttributes = MetricAttributes,\n> {\n  /**\n   * Increment value of counter by the input. Inputs may be negative.\n   */\n  add(value: number, attributes?: AttributesTypes, context?: Context): void;\n}\n\n/**\n * @since 1.9.0\n */\nexport interface Gauge<\n  AttributesTypes extends MetricAttributes = MetricAttributes,\n> {\n  /**\n   * Records a measurement.\n   */\n  record(value: number, attributes?: AttributesTypes, context?: Context): void;\n}\n\n/**\n * @since 1.3.0\n */\nexport interface Histogram<\n  AttributesTypes extends MetricAttributes = MetricAttributes,\n> {\n  /**\n   * Records a measurement. Value of the measurement must not be negative.\n   */\n  record(value: number, attributes?: AttributesTypes, context?: Context): void;\n}\n\n/**\n * @deprecated please use {@link Attributes}\n * @since 1.3.0\n */\nexport type MetricAttributes = Attributes;\n\n/**\n * @deprecated please use {@link AttributeValue}\n * @since 1.3.0\n */\nexport type MetricAttributeValue = AttributeValue;\n\n/**\n * Interface that is being used in callback function for Observable Metric.\n *\n * @since 1.3.0\n */\nexport interface ObservableResult<\n  AttributesTypes extends MetricAttributes = MetricAttributes,\n> {\n  /**\n   * Observe a measurement of the value associated with the given attributes.\n   *\n   * @param value The value to be observed.\n   * @param attributes The attributes associated with the value. If more than\n   * one value is associated with the same attributes values, SDK may pick the\n   * last one or simply drop the entire observable result.\n   */\n  observe(\n    this: ObservableResult<AttributesTypes>,\n    value: number,\n    attributes?: AttributesTypes\n  ): void;\n}\n\n/**\n * Interface that is being used in batch observable callback function.\n */\nexport interface BatchObservableResult<\n  AttributesTypes extends MetricAttributes = MetricAttributes,\n> {\n  /**\n   * Observe a measurement of the value associated with the given attributes.\n   *\n   * @param metric The observable metric to be observed.\n   * @param value The value to be observed.\n   * @param attributes The attributes associated with the value. If more than\n   * one value is associated with the same attributes values, SDK may pick the\n   * last one or simply drop the entire observable result.\n   */\n  observe(\n    this: BatchObservableResult<AttributesTypes>,\n    metric: Observable<AttributesTypes>,\n    value: number,\n    attributes?: AttributesTypes\n  ): void;\n}\n\n/**\n * The observable callback for Observable instruments.\n *\n * @since 1.3.0\n */\nexport type ObservableCallback<\n  AttributesTypes extends MetricAttributes = MetricAttributes,\n> = (\n  observableResult: ObservableResult<AttributesTypes>\n) => void | Promise<void>;\n\n/**\n * The observable callback for a batch of Observable instruments.\n *\n * @since 1.3.0\n */\nexport type BatchObservableCallback<\n  AttributesTypes extends MetricAttributes = MetricAttributes,\n> = (\n  observableResult: BatchObservableResult<AttributesTypes>\n) => void | Promise<void>;\n\n/**\n * @since 1.3.0\n */\nexport interface Observable<\n  AttributesTypes extends MetricAttributes = MetricAttributes,\n> {\n  /**\n   * Sets up a function that will be called whenever a metric collection is initiated.\n   *\n   * If the function is already in the list of callbacks for this Observable, the function is not added a second time.\n   */\n  addCallback(callback: ObservableCallback<AttributesTypes>): void;\n\n  /**\n   * Removes a callback previously registered with {@link Observable.addCallback}.\n   */\n  removeCallback(callback: ObservableCallback<AttributesTypes>): void;\n}\n\n/**\n * @since 1.3.0\n */\nexport type ObservableCounter<\n  AttributesTypes extends MetricAttributes = MetricAttributes,\n> = Observable<AttributesTypes>;\n/**\n * @since 1.3.0\n */\nexport type ObservableUpDownCounter<\n  AttributesTypes extends MetricAttributes = MetricAttributes,\n> = Observable<AttributesTypes>;\n/**\n * @since 1.3.0\n */\nexport type ObservableGauge<\n  AttributesTypes extends MetricAttributes = MetricAttributes,\n> = Observable<AttributesTypes>;\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Context } from '../context/types';\n\n/**\n * Injects `Context` into and extracts it from carriers that travel\n * in-band across process boundaries. Encoding is expected to conform to the\n * HTTP Header Field semantics. Values are often encoded as RPC/HTTP request\n * headers.\n *\n * The carrier of propagated data on both the client (injector) and server\n * (extractor) side is usually an object such as http headers. Propagation is\n * usually implemented via library-specific request interceptors, where the\n * client-side injects values and the server-side extracts them.\n *\n * @since 1.0.0\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface TextMapPropagator<Carrier = any> {\n  /**\n   * Injects values from a given `Context` into a carrier.\n   *\n   * OpenTelemetry defines a common set of format values (TextMapPropagator),\n   * and each has an expected `carrier` type.\n   *\n   * @param context the Context from which to extract values to transmit over\n   *     the wire.\n   * @param carrier the carrier of propagation fields, such as http request\n   *     headers.\n   * @param setter an optional {@link TextMapSetter}. If undefined, values will be\n   *     set by direct object assignment.\n   */\n  inject(\n    context: Context,\n    carrier: Carrier,\n    setter: TextMapSetter<Carrier>\n  ): void;\n\n  /**\n   * Given a `Context` and a carrier, extract context values from a\n   * carrier and return a new context, created from the old context, with the\n   * extracted values.\n   *\n   * @param context the Context from which to extract values to transmit over\n   *     the wire.\n   * @param carrier the carrier of propagation fields, such as http request\n   *     headers.\n   * @param getter an optional {@link TextMapGetter}. If undefined, keys will be all\n   *     own properties, and keys will be accessed by direct object access.\n   */\n  extract(\n    context: Context,\n    carrier: Carrier,\n    getter: TextMapGetter<Carrier>\n  ): Context;\n\n  /**\n   * Return a list of all fields which may be used by the propagator.\n   */\n  fields(): string[];\n}\n\n/**\n * A setter is specified by the caller to define a specific method\n * to set key/value pairs on the carrier within a propagator\n *\n * @since 1.0.0\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface TextMapSetter<Carrier = any> {\n  /**\n   * Callback used to set a key/value pair on an object.\n   *\n   * Should be called by the propagator each time a key/value pair\n   * should be set, and should set that key/value pair on the propagator.\n   *\n   * @param carrier object or class which carries key/value pairs\n   * @param key string key to modify\n   * @param value value to be set to the key on the carrier\n   */\n  set(carrier: Carrier, key: string, value: string): void;\n}\n\n/**\n * A getter is specified by the caller to define a specific method\n * to get the value of a key from a carrier.\n *\n * @since 1.0.0\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface TextMapGetter<Carrier = any> {\n  /**\n   * Get a list of all keys available on the carrier.\n   *\n   * @param carrier\n   */\n  keys(carrier: Carrier): string[];\n\n  /**\n   * Get the value of a specific key from the carrier.\n   *\n   * @param carrier\n   * @param key\n   */\n  get(carrier: Carrier, key: string): undefined | string | string[];\n}\n\n/**\n * @since 1.0.0\n */\nexport const defaultTextMapGetter: TextMapGetter = {\n  get(carrier, key) {\n    if (carrier == null) {\n      return undefined;\n    }\n    return carrier[key];\n  },\n\n  keys(carrier) {\n    if (carrier == null) {\n      return [];\n    }\n    return Object.keys(carrier);\n  },\n};\n\n/**\n * @since 1.0.0\n */\nexport const defaultTextMapSetter: TextMapSetter = {\n  set(carrier, key, value) {\n    if (carrier == null) {\n      return;\n    }\n\n    carrier[key] = value;\n  },\n};\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ROOT_CONTEXT } from './context';\nimport type * as types from './types';\n\nexport class NoopContextManager implements types.ContextManager {\n  active(): types.Context {\n    return ROOT_CONTEXT;\n  }\n\n  with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n    _context: types.Context,\n    fn: F,\n    thisArg?: ThisParameterType<F>,\n    ...args: A\n  ): ReturnType<F> {\n    return fn.call(thisArg, ...args);\n  }\n\n  bind<T>(_context: types.Context, target: T): T {\n    return target;\n  }\n\n  enable(): this {\n    return this;\n  }\n\n  disable(): this {\n    return this;\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { NoopContextManager } from '../context/NoopContextManager';\nimport type { Context, ContextManager } from '../context/types';\nimport {\n  getGlobal,\n  registerGlobal,\n  unregisterGlobal,\n} from '../internal/global-utils';\nimport { DiagAPI } from './diag';\n\nconst API_NAME = 'context';\nconst NOOP_CONTEXT_MANAGER = new NoopContextManager();\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Context API\n *\n * @since 1.0.0\n */\nexport class ContextAPI {\n  private static _instance?: ContextAPI;\n\n  /** Empty private constructor prevents end users from constructing a new instance of the API */\n  private constructor() {}\n\n  /** Get the singleton instance of the Context API */\n  public static getInstance(): ContextAPI {\n    if (!this._instance) {\n      this._instance = new ContextAPI();\n    }\n\n    return this._instance;\n  }\n\n  /**\n   * Set the current context manager.\n   *\n   * @returns true if the context manager was successfully registered, else false\n   */\n  public setGlobalContextManager(contextManager: ContextManager): boolean {\n    return registerGlobal(API_NAME, contextManager, DiagAPI.instance());\n  }\n\n  /**\n   * Get the currently active context\n   */\n  public active(): Context {\n    return this._getContextManager().active();\n  }\n\n  /**\n   * Execute a function with an active context\n   *\n   * @param context context to be active during function execution\n   * @param fn function to execute in a context\n   * @param thisArg optional receiver to be used for calling fn\n   * @param args optional arguments forwarded to fn\n   */\n  public with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n    context: Context,\n    fn: F,\n    thisArg?: ThisParameterType<F>,\n    ...args: A\n  ): ReturnType<F> {\n    return this._getContextManager().with(context, fn, thisArg, ...args);\n  }\n\n  /**\n   * Bind a context to a target function or event emitter\n   *\n   * @param context context to bind to the event emitter or function. Defaults to the currently active context\n   * @param target function or event emitter to bind\n   */\n  public bind<T>(context: Context, target: T): T {\n    return this._getContextManager().bind(context, target);\n  }\n\n  private _getContextManager(): ContextManager {\n    return getGlobal(API_NAME) || NOOP_CONTEXT_MANAGER;\n  }\n\n  /** Disable and remove the global context manager */\n  public disable() {\n    this._getContextManager().disable();\n    unregisterGlobal(API_NAME, DiagAPI.instance());\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * @since 1.0.0\n */\nexport enum TraceFlags {\n  /** Represents no flag set. */\n  NONE = 0x0,\n  /** Bit to represent whether trace is sampled in trace flags. */\n  SAMPLED = 0x1 << 0,\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { SpanContext } from './span_context';\nimport { TraceFlags } from './trace_flags';\n\n/**\n * @since 1.0.0\n */\nexport const INVALID_SPANID = '0000000000000000';\n\n/**\n * @since 1.0.0\n */\nexport const INVALID_TRACEID = '00000000000000000000000000000000';\n\n/**\n * @since 1.0.0\n */\nexport const INVALID_SPAN_CONTEXT: SpanContext = {\n  traceId: INVALID_TRACEID,\n  spanId: INVALID_SPANID,\n  traceFlags: TraceFlags.NONE,\n};\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Exception } from '../common/Exception';\nimport type { TimeInput } from '../common/Time';\nimport type { SpanAttributes } from './attributes';\nimport { INVALID_SPAN_CONTEXT } from './invalid-span-constants';\nimport type { Span } from './span';\nimport type { SpanContext } from './span_context';\nimport type { SpanStatus } from './status';\nimport type { Link } from './link';\n\n/**\n * The NonRecordingSpan is the default {@link Span} that is used when no Span\n * implementation is available. All operations are no-op including context\n * propagation.\n */\nexport class NonRecordingSpan implements Span {\n  private readonly _spanContext: SpanContext;\n\n  constructor(spanContext: SpanContext = INVALID_SPAN_CONTEXT) {\n    this._spanContext = spanContext;\n  }\n\n  // Returns a SpanContext.\n  spanContext(): SpanContext {\n    return this._spanContext;\n  }\n\n  // By default does nothing\n  setAttribute(_key: string, _value: unknown): this {\n    return this;\n  }\n\n  // By default does nothing\n  setAttributes(_attributes: SpanAttributes): this {\n    return this;\n  }\n\n  // By default does nothing\n  addEvent(_name: string, _attributes?: SpanAttributes): this {\n    return this;\n  }\n\n  addLink(_link: Link): this {\n    return this;\n  }\n\n  addLinks(_links: Link[]): this {\n    return this;\n  }\n\n  // By default does nothing\n  setStatus(_status: SpanStatus): this {\n    return this;\n  }\n\n  // By default does nothing\n  updateName(_name: string): this {\n    return this;\n  }\n\n  // By default does nothing\n  end(_endTime?: TimeInput): void {}\n\n  // isRecording always returns false for NonRecordingSpan.\n  isRecording(): boolean {\n    return false;\n  }\n\n  // By default does nothing\n  recordException(_exception: Exception, _time?: TimeInput): void {}\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createContextKey } from '../context/context';\nimport type { Context } from '../context/types';\nimport type { Span } from './span';\nimport type { SpanContext } from './span_context';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { ContextAPI } from '../api/context';\n\n/**\n * span key\n */\nconst SPAN_KEY = createContextKey('OpenTelemetry Context Key SPAN');\n\n/**\n * Return the span if one exists\n *\n * @param context context to get span from\n */\nexport function getSpan(context: Context): Span | undefined {\n  return (context.getValue(SPAN_KEY) as Span) || undefined;\n}\n\n/**\n * Gets the span from the current context, if one exists.\n */\nexport function getActiveSpan(): Span | undefined {\n  return getSpan(ContextAPI.getInstance().active());\n}\n\n/**\n * Set the span on a context\n *\n * @param context context to use as parent\n * @param span span to set active\n */\nexport function setSpan(context: Context, span: Span): Context {\n  return context.setValue(SPAN_KEY, span);\n}\n\n/**\n * Remove current span stored in the context\n *\n * @param context context to delete span from\n */\nexport function deleteSpan(context: Context): Context {\n  return context.deleteValue(SPAN_KEY);\n}\n\n/**\n * Wrap span context in a NoopSpan and set as span in a new\n * context\n *\n * @param context context to set active span on\n * @param spanContext span context to be wrapped\n */\nexport function setSpanContext(\n  context: Context,\n  spanContext: SpanContext\n): Context {\n  return setSpan(context, new NonRecordingSpan(spanContext));\n}\n\n/**\n * Get the span context of the span if it exists.\n *\n * @param context context to get values from\n */\nexport function getSpanContext(context: Context): SpanContext | undefined {\n  return getSpan(context)?.spanContext();\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { INVALID_SPANID, INVALID_TRACEID } from './invalid-span-constants';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport type { Span } from './span';\nimport type { SpanContext } from './span_context';\n\n// Valid characters (0-9, a-f, A-F) are marked as 1.\nconst isHex = new Uint8Array([\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,\n]);\n\nfunction isValidHex(id: string, length: number): boolean {\n  // As of 1.9.0 the id was allowed to be a non-string value,\n  // even though it was not possible in the types.\n  if (typeof id !== 'string' || id.length !== length) return false;\n\n  let r = 0;\n  for (let i = 0; i < id.length; i += 4) {\n    r +=\n      (isHex[id.charCodeAt(i)] | 0) +\n      (isHex[id.charCodeAt(i + 1)] | 0) +\n      (isHex[id.charCodeAt(i + 2)] | 0) +\n      (isHex[id.charCodeAt(i + 3)] | 0);\n  }\n\n  return r === length;\n}\n\n/**\n * @since 1.0.0\n */\nexport function isValidTraceId(traceId: string): boolean {\n  return isValidHex(traceId, 32) && traceId !== INVALID_TRACEID;\n}\n\n/**\n * @since 1.0.0\n */\nexport function isValidSpanId(spanId: string): boolean {\n  return isValidHex(spanId, 16) && spanId !== INVALID_SPANID;\n}\n\n/**\n * Returns true if this {@link SpanContext} is valid.\n * @return true if this {@link SpanContext} is valid.\n *\n * @since 1.0.0\n */\nexport function isSpanContextValid(spanContext: SpanContext): boolean {\n  return (\n    isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId)\n  );\n}\n\n/**\n * Wrap the given {@link SpanContext} in a new non-recording {@link Span}\n *\n * @param spanContext span context to be wrapped\n * @returns a new non-recording {@link Span} with the provided context\n */\nexport function wrapSpanContext(spanContext: SpanContext): Span {\n  return new NonRecordingSpan(spanContext);\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ContextAPI } from '../api/context';\nimport type { Context } from '../context/types';\nimport { getSpanContext, setSpan } from '../trace/context-utils';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport type { Span } from './span';\nimport { isSpanContextValid } from './spancontext-utils';\nimport type { SpanOptions } from './SpanOptions';\nimport type { SpanContext } from './span_context';\nimport type { Tracer } from './tracer';\n\nconst contextApi = ContextAPI.getInstance();\n\n/**\n * No-op implementations of {@link Tracer}.\n */\nexport class NoopTracer implements Tracer {\n  // startSpan starts a noop span.\n  startSpan(\n    name: string,\n    options?: SpanOptions,\n    context = contextApi.active()\n  ): Span {\n    const root = Boolean(options?.root);\n    if (root) {\n      return new NonRecordingSpan();\n    }\n\n    const parentFromContext = context && getSpanContext(context);\n\n    if (\n      isSpanContext(parentFromContext) &&\n      isSpanContextValid(parentFromContext)\n    ) {\n      return new NonRecordingSpan(parentFromContext);\n    } else {\n      return new NonRecordingSpan();\n    }\n  }\n\n  startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n    name: string,\n    fn: F\n  ): ReturnType<F>;\n  startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n    name: string,\n    opts: SpanOptions | undefined,\n    fn: F\n  ): ReturnType<F>;\n  startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n    name: string,\n    opts: SpanOptions | undefined,\n    ctx: Context | undefined,\n    fn: F\n  ): ReturnType<F>;\n  startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n    name: string,\n    arg2?: F | SpanOptions,\n    arg3?: F | Context,\n    arg4?: F\n  ): ReturnType<F> | undefined {\n    let opts: SpanOptions | undefined;\n    let ctx: Context | undefined;\n    let fn: F;\n\n    if (arguments.length < 2) {\n      return;\n    } else if (arguments.length === 2) {\n      fn = arg2 as F;\n    } else if (arguments.length === 3) {\n      opts = arg2 as SpanOptions | undefined;\n      fn = arg3 as F;\n    } else {\n      opts = arg2 as SpanOptions | undefined;\n      ctx = arg3 as Context | undefined;\n      fn = arg4 as F;\n    }\n\n    const parentContext = ctx ?? contextApi.active();\n    const span = this.startSpan(name, opts, parentContext);\n    const contextWithSpanSet = setSpan(parentContext, span);\n\n    return contextApi.with(contextWithSpanSet, fn, undefined, span);\n  }\n}\n\nfunction isSpanContext(spanContext: unknown): spanContext is SpanContext {\n  return (\n    spanContext !== null &&\n    typeof spanContext === 'object' &&\n    'spanId' in spanContext &&\n    typeof spanContext['spanId'] === 'string' &&\n    'traceId' in spanContext &&\n    typeof spanContext['traceId'] === 'string' &&\n    'traceFlags' in spanContext &&\n    typeof spanContext['traceFlags'] === 'number'\n  );\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Context } from '../context/types';\nimport { NoopTracer } from './NoopTracer';\nimport type { Span } from './span';\nimport type { SpanOptions } from './SpanOptions';\nimport type { Tracer } from './tracer';\nimport type { TracerOptions } from './tracer_options';\n\nconst NOOP_TRACER = new NoopTracer();\n\n/**\n * Proxy tracer provided by the proxy tracer provider\n *\n * @since 1.0.0\n */\nexport class ProxyTracer implements Tracer {\n  // When a real implementation is provided, this will be it\n  private _delegate?: Tracer;\n  private _provider: TracerDelegator;\n  public readonly name: string;\n  public readonly version?: string;\n  public readonly options?: TracerOptions;\n\n  constructor(\n    provider: TracerDelegator,\n    name: string,\n    version?: string,\n    options?: TracerOptions\n  ) {\n    this._provider = provider;\n    this.name = name;\n    this.version = version;\n    this.options = options;\n  }\n\n  startSpan(name: string, options?: SpanOptions, context?: Context): Span {\n    return this._getTracer().startSpan(name, options, context);\n  }\n\n  startActiveSpan<F extends (span: Span) => unknown>(\n    _name: string,\n    _options: F | SpanOptions,\n    _context?: F | Context,\n    _fn?: F\n  ): ReturnType<F> {\n    const tracer = this._getTracer();\n    return Reflect.apply(tracer.startActiveSpan, tracer, arguments);\n  }\n\n  /**\n   * Try to get a tracer from the proxy tracer provider.\n   * If the proxy tracer provider has no delegate, return a noop tracer.\n   */\n  private _getTracer() {\n    if (this._delegate) {\n      return this._delegate;\n    }\n\n    const tracer = this._provider.getDelegateTracer(\n      this.name,\n      this.version,\n      this.options\n    );\n\n    if (!tracer) {\n      return NOOP_TRACER;\n    }\n\n    this._delegate = tracer;\n    return this._delegate;\n  }\n}\n\n/**\n * @since 1.0.3\n */\nexport interface TracerDelegator {\n  getDelegateTracer(\n    name: string,\n    version?: string,\n    options?: TracerOptions\n  ): Tracer | undefined;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { NoopTracer } from './NoopTracer';\nimport type { Tracer } from './tracer';\nimport type { TracerOptions } from './tracer_options';\nimport type { TracerProvider } from './tracer_provider';\n\n/**\n * An implementation of the {@link TracerProvider} which returns an impotent\n * Tracer for all calls to `getTracer`.\n *\n * All operations are no-op.\n */\nexport class NoopTracerProvider implements TracerProvider {\n  getTracer(\n    _name?: string,\n    _version?: string,\n    _options?: TracerOptions\n  ): Tracer {\n    return new NoopTracer();\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Tracer } from './tracer';\nimport type { TracerProvider } from './tracer_provider';\nimport { ProxyTracer } from './ProxyTracer';\nimport { NoopTracerProvider } from './NoopTracerProvider';\nimport type { TracerOptions } from './tracer_options';\n\nconst NOOP_TRACER_PROVIDER = new NoopTracerProvider();\n\n/**\n * Tracer provider which provides {@link ProxyTracer}s.\n *\n * Before a delegate is set, tracers provided are NoOp.\n *   When a delegate is set, traces are provided from the delegate.\n *   When a delegate is set after tracers have already been provided,\n *   all tracers already provided will use the provided delegate implementation.\n *\n * @deprecated This will be removed in the next major version.\n * @since 1.0.0\n */\nexport class ProxyTracerProvider implements TracerProvider {\n  private _delegate?: TracerProvider;\n\n  /**\n   * Get a {@link ProxyTracer}\n   */\n  getTracer(name: string, version?: string, options?: TracerOptions): Tracer {\n    return (\n      this.getDelegateTracer(name, version, options) ??\n      new ProxyTracer(this, name, version, options)\n    );\n  }\n\n  getDelegate(): TracerProvider {\n    return this._delegate ?? NOOP_TRACER_PROVIDER;\n  }\n\n  /**\n   * Set the delegate tracer provider\n   */\n  setDelegate(delegate: TracerProvider) {\n    this._delegate = delegate;\n  }\n\n  getDelegateTracer(\n    name: string,\n    version?: string,\n    options?: TracerOptions\n  ): Tracer | undefined {\n    return this._delegate?.getTracer(name, version, options);\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { SpanAttributes } from './attributes';\nimport type { TraceState } from './trace_state';\n\n/**\n * @deprecated use the one declared in @opentelemetry/sdk-trace-base instead.\n * A sampling decision that determines how a {@link Span} will be recorded\n * and collected.\n *\n * @since 1.0.0\n */\nexport enum SamplingDecision {\n  /**\n   * `Span.isRecording() === false`, span will not be recorded and all events\n   * and attributes will be dropped.\n   */\n  NOT_RECORD,\n  /**\n   * `Span.isRecording() === true`, but `Sampled` flag in {@link TraceFlags}\n   * MUST NOT be set.\n   */\n  RECORD,\n  /**\n   * `Span.isRecording() === true` AND `Sampled` flag in {@link TraceFlags}\n   * MUST be set.\n   */\n  RECORD_AND_SAMPLED,\n}\n\n/**\n * @deprecated use the one declared in @opentelemetry/sdk-trace-base instead.\n * A sampling result contains a decision for a {@link Span} and additional\n * attributes the sampler would like to added to the Span.\n *\n * @since 1.0.0\n */\nexport interface SamplingResult {\n  /**\n   * A sampling decision, refer to {@link SamplingDecision} for details.\n   */\n  decision: SamplingDecision;\n  /**\n   * The list of attributes returned by SamplingResult MUST be immutable.\n   * Caller may call {@link Sampler}.shouldSample any number of times and\n   * can safely cache the returned value.\n   */\n  attributes?: Readonly<SpanAttributes>;\n  /**\n   * A {@link TraceState} that will be associated with the {@link Span} through\n   * the new {@link SpanContext}. Samplers SHOULD return the TraceState from\n   * the passed-in {@link Context} if they do not intend to change it. Leaving\n   * the value undefined will also leave the TraceState unchanged.\n   */\n  traceState?: TraceState;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @since 1.0.0\n */\nexport enum SpanKind {\n  /** Default value. Indicates that the span is used internally. */\n  INTERNAL = 0,\n\n  /**\n   * Indicates that the span covers server-side handling of an RPC or other\n   * remote request.\n   */\n  SERVER = 1,\n\n  /**\n   * Indicates that the span covers the client-side wrapper around an RPC or\n   * other remote request.\n   */\n  CLIENT = 2,\n\n  /**\n   * Indicates that the span describes producer sending a message to a\n   * broker. Unlike client and server, there is no direct critical path latency\n   * relationship between producer and consumer spans.\n   */\n  PRODUCER = 3,\n\n  /**\n   * Indicates that the span describes consumer receiving a message from a\n   * broker. Unlike client and server, there is no direct critical path latency\n   * relationship between producer and consumer spans.\n   */\n  CONSUMER = 4,\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @since 1.0.0\n */\nexport interface SpanStatus {\n  /** The status code of this message. */\n  code: SpanStatusCode;\n  /** A developer-facing error message. */\n  message?: string;\n}\n\n/**\n * An enumeration of status codes.\n *\n * @since 1.0.0\n */\nexport enum SpanStatusCode {\n  /**\n   * The default status.\n   */\n  UNSET = 0,\n  /**\n   * The operation has been validated by an Application developer or\n   * Operator to have completed successfully.\n   */\n  OK = 1,\n  /**\n   * The operation contains an error.\n   */\n  ERROR = 2,\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nconst VALID_KEY_CHAR_RANGE = '[_0-9a-z-*/]';\nconst VALID_KEY = `[a-z]${VALID_KEY_CHAR_RANGE}{0,255}`;\nconst VALID_VENDOR_KEY = `[a-z0-9]${VALID_KEY_CHAR_RANGE}{0,240}@[a-z]${VALID_KEY_CHAR_RANGE}{0,13}`;\nconst VALID_KEY_REGEX = new RegExp(`^(?:${VALID_KEY}|${VALID_VENDOR_KEY})$`);\nconst VALID_VALUE_BASE_REGEX = /^[ -~]{0,255}[!-~]$/;\nconst INVALID_VALUE_COMMA_EQUAL_REGEX = /,|=/;\n\n/**\n * Key is opaque string up to 256 characters printable. It MUST begin with a\n * lowercase letter, and can only contain lowercase letters a-z, digits 0-9,\n * underscores _, dashes -, asterisks *, and forward slashes /.\n * For multi-tenant vendor scenarios, an at sign (@) can be used to prefix the\n * vendor name. Vendors SHOULD set the tenant ID at the beginning of the key.\n * see https://www.w3.org/TR/trace-context/#key\n */\nexport function validateKey(key: string): boolean {\n  return VALID_KEY_REGEX.test(key);\n}\n\n/**\n * Value is opaque string up to 256 characters printable ASCII RFC0020\n * characters (i.e., the range 0x20 to 0x7E) except comma , and =.\n */\nexport function validateValue(value: string): boolean {\n  return (\n    VALID_VALUE_BASE_REGEX.test(value) &&\n    !INVALID_VALUE_COMMA_EQUAL_REGEX.test(value)\n  );\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { TraceState } from '../trace_state';\nimport { validateKey, validateValue } from './tracestate-validators';\n\nconst MAX_TRACE_STATE_ITEMS = 32;\nconst MAX_TRACE_STATE_LEN = 512;\nconst LIST_MEMBERS_SEPARATOR = ',';\nconst LIST_MEMBER_KEY_VALUE_SPLITTER = '=';\n\n/**\n * TraceState must be a class and not a simple object type because of the spec\n * requirement (https://www.w3.org/TR/trace-context/#tracestate-field).\n *\n * Here is the list of allowed mutations:\n * - New key-value pair should be added into the beginning of the list\n * - The value of any key can be updated. Modified keys MUST be moved to the\n * beginning of the list.\n */\nexport class TraceStateImpl implements TraceState {\n  private _internalState: Map<string, string> = new Map();\n\n  constructor(rawTraceState?: string) {\n    if (rawTraceState) this._parse(rawTraceState);\n  }\n\n  set(key: string, value: string): TraceStateImpl {\n    // TODO: Benchmark the different approaches(map vs list) and\n    // use the faster one.\n    const traceState = this._clone();\n    if (traceState._internalState.has(key)) {\n      traceState._internalState.delete(key);\n    }\n    traceState._internalState.set(key, value);\n    return traceState;\n  }\n\n  unset(key: string): TraceStateImpl {\n    const traceState = this._clone();\n    traceState._internalState.delete(key);\n    return traceState;\n  }\n\n  get(key: string): string | undefined {\n    return this._internalState.get(key);\n  }\n\n  serialize(): string {\n    return (\n      Array.from(this._internalState.keys())\n        // Use reduceRight() because keys are stored in reverse insertion order.\n        .reduceRight((agg: string[], key) => {\n          agg.push(key + LIST_MEMBER_KEY_VALUE_SPLITTER + this.get(key));\n          return agg;\n        }, [])\n        .join(LIST_MEMBERS_SEPARATOR)\n    );\n  }\n\n  private _parse(rawTraceState: string) {\n    if (rawTraceState.length > MAX_TRACE_STATE_LEN) return;\n    this._internalState = rawTraceState\n      .split(LIST_MEMBERS_SEPARATOR)\n      // Use reduceRight() so new keys (.set(...)) will be placed at the beginning\n      .reduceRight((agg: Map<string, string>, part: string) => {\n        const listMember = part.trim(); // Optional Whitespace (OWS) handling\n        const i = listMember.indexOf(LIST_MEMBER_KEY_VALUE_SPLITTER);\n        if (i !== -1) {\n          const key = listMember.slice(0, i);\n          const value = listMember.slice(i + 1, part.length);\n          if (validateKey(key) && validateValue(value)) {\n            agg.set(key, value);\n          } else {\n            // TODO: Consider to add warning log\n          }\n        }\n        return agg;\n      }, new Map());\n\n    // Because of the reverse() requirement, trunc must be done after map is created\n    if (this._internalState.size > MAX_TRACE_STATE_ITEMS) {\n      this._internalState = new Map(\n        Array.from(this._internalState.entries())\n          .reverse() // Use reverse same as original tracestate parse chain\n          .slice(0, MAX_TRACE_STATE_ITEMS)\n      );\n    }\n  }\n\n  // @ts-expect-error TS6133 Accessed in tests only.\n  private _keys(): string[] {\n    return Array.from(this._internalState.keys()).reverse();\n  }\n\n  private _clone(): TraceStateImpl {\n    const traceState = new TraceStateImpl();\n    traceState._internalState = new Map(this._internalState);\n    return traceState;\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { TraceState } from '../trace_state';\nimport { TraceStateImpl } from './tracestate-impl';\n\n/**\n * @since 1.1.0\n */\nexport function createTraceState(rawTraceState?: string): TraceState {\n  return new TraceStateImpl(rawTraceState);\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { ContextAPI } from './api/context';\n/**\n * Entrypoint for context API\n * @since 1.0.0\n */\nexport const context = ContextAPI.getInstance();\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { DiagAPI } from './api/diag';\n/**\n * Entrypoint for Diag API.\n * Defines Diagnostic handler used for internal diagnostic logging operations.\n * The default provides a Noop DiagLogger implementation which may be changed via the\n * diag.setLogger(logger: DiagLogger) function.\n *\n * @since 1.0.0\n */\nexport const diag = DiagAPI.instance();\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Meter, MeterOptions } from './Meter';\nimport type { MeterProvider } from './MeterProvider';\nimport { NOOP_METER } from './NoopMeter';\n\n/**\n * An implementation of the {@link MeterProvider} which returns an impotent Meter\n * for all calls to `getMeter`\n */\nexport class NoopMeterProvider implements MeterProvider {\n  getMeter(_name: string, _version?: string, _options?: MeterOptions): Meter {\n    return NOOP_METER;\n  }\n}\n\nexport const NOOP_METER_PROVIDER = new NoopMeterProvider();\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Meter, MeterOptions } from '../metrics/Meter';\nimport type { MeterProvider } from '../metrics/MeterProvider';\nimport { NOOP_METER_PROVIDER } from '../metrics/NoopMeterProvider';\nimport {\n  getGlobal,\n  registerGlobal,\n  unregisterGlobal,\n} from '../internal/global-utils';\nimport { DiagAPI } from './diag';\n\nconst API_NAME = 'metrics';\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Metrics API\n */\nexport class MetricsAPI {\n  private static _instance?: MetricsAPI;\n\n  /** Empty private constructor prevents end users from constructing a new instance of the API */\n  private constructor() {}\n\n  /** Get the singleton instance of the Metrics API */\n  public static getInstance(): MetricsAPI {\n    if (!this._instance) {\n      this._instance = new MetricsAPI();\n    }\n\n    return this._instance;\n  }\n\n  /**\n   * Set the current global meter provider.\n   * Returns true if the meter provider was successfully registered, else false.\n   */\n  public setGlobalMeterProvider(provider: MeterProvider): boolean {\n    return registerGlobal(API_NAME, provider, DiagAPI.instance());\n  }\n\n  /**\n   * Returns the global meter provider.\n   */\n  public getMeterProvider(): MeterProvider {\n    return getGlobal(API_NAME) || NOOP_METER_PROVIDER;\n  }\n\n  /**\n   * Returns a meter from the global meter provider.\n   */\n  public getMeter(\n    name: string,\n    version?: string,\n    options?: MeterOptions\n  ): Meter {\n    return this.getMeterProvider().getMeter(name, version, options);\n  }\n\n  /** Remove the global meter provider */\n  public disable(): void {\n    unregisterGlobal(API_NAME, DiagAPI.instance());\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { MetricsAPI } from './api/metrics';\n/**\n * Entrypoint for metrics API\n *\n * @since 1.3.0\n */\nexport const metrics = MetricsAPI.getInstance();\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Context } from '../context/types';\nimport type { TextMapPropagator } from './TextMapPropagator';\n\n/**\n * No-op implementations of {@link TextMapPropagator}.\n */\nexport class NoopTextMapPropagator implements TextMapPropagator {\n  /** Noop inject function does nothing */\n  inject(_context: Context, _carrier: unknown): void {}\n  /** Noop extract function does nothing and returns the input context */\n  extract(context: Context, _carrier: unknown): Context {\n    return context;\n  }\n  fields(): string[] {\n    return [];\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ContextAPI } from '../api/context';\nimport { createContextKey } from '../context/context';\nimport type { Context } from '../context/types';\nimport type { Baggage } from './types';\n\n/**\n * Baggage key\n */\nconst BAGGAGE_KEY = createContextKey('OpenTelemetry Baggage Key');\n\n/**\n * Retrieve the current baggage from the given context\n *\n * @param {Context} Context that manage all context values\n * @returns {Baggage} Extracted baggage from the context\n */\nexport function getBaggage(context: Context): Baggage | undefined {\n  return (context.getValue(BAGGAGE_KEY) as Baggage) || undefined;\n}\n\n/**\n * Retrieve the current baggage from the active/current context\n *\n * @returns {Baggage} Extracted baggage from the context\n */\nexport function getActiveBaggage(): Baggage | undefined {\n  return getBaggage(ContextAPI.getInstance().active());\n}\n\n/**\n * Store a baggage in the given context\n *\n * @param {Context} Context that manage all context values\n * @param {Baggage} baggage that will be set in the actual context\n */\nexport function setBaggage(context: Context, baggage: Baggage): Context {\n  return context.setValue(BAGGAGE_KEY, baggage);\n}\n\n/**\n * Delete the baggage stored in the given context\n *\n * @param {Context} Context that manage all context values\n */\nexport function deleteBaggage(context: Context): Context {\n  return context.deleteValue(BAGGAGE_KEY);\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Context } from '../context/types';\nimport {\n  getGlobal,\n  registerGlobal,\n  unregisterGlobal,\n} from '../internal/global-utils';\nimport { NoopTextMapPropagator } from '../propagation/NoopTextMapPropagator';\nimport type {\n  TextMapGetter,\n  TextMapPropagator,\n  TextMapSetter,\n} from '../propagation/TextMapPropagator';\nimport {\n  defaultTextMapGetter,\n  defaultTextMapSetter,\n} from '../propagation/TextMapPropagator';\nimport {\n  getBaggage,\n  getActiveBaggage,\n  setBaggage,\n  deleteBaggage,\n} from '../baggage/context-helpers';\nimport { createBaggage } from '../baggage/utils';\nimport { DiagAPI } from './diag';\n\nconst API_NAME = 'propagation';\nconst NOOP_TEXT_MAP_PROPAGATOR = new NoopTextMapPropagator();\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Propagation API\n *\n * @since 1.0.0\n */\nexport class PropagationAPI {\n  private static _instance?: PropagationAPI;\n\n  /** Empty private constructor prevents end users from constructing a new instance of the API */\n  private constructor() {}\n\n  /** Get the singleton instance of the Propagator API */\n  public static getInstance(): PropagationAPI {\n    if (!this._instance) {\n      this._instance = new PropagationAPI();\n    }\n\n    return this._instance;\n  }\n\n  /**\n   * Set the current propagator.\n   *\n   * @returns true if the propagator was successfully registered, else false\n   */\n  public setGlobalPropagator(propagator: TextMapPropagator): boolean {\n    return registerGlobal(API_NAME, propagator, DiagAPI.instance());\n  }\n\n  /**\n   * Inject context into a carrier to be propagated inter-process\n   *\n   * @param context Context carrying tracing data to inject\n   * @param carrier carrier to inject context into\n   * @param setter Function used to set values on the carrier\n   */\n  public inject<Carrier>(\n    context: Context,\n    carrier: Carrier,\n    setter: TextMapSetter<Carrier> = defaultTextMapSetter\n  ): void {\n    return this._getGlobalPropagator().inject(context, carrier, setter);\n  }\n\n  /**\n   * Extract context from a carrier\n   *\n   * @param context Context which the newly created context will inherit from\n   * @param carrier Carrier to extract context from\n   * @param getter Function used to extract keys from a carrier\n   */\n  public extract<Carrier>(\n    context: Context,\n    carrier: Carrier,\n    getter: TextMapGetter<Carrier> = defaultTextMapGetter\n  ): Context {\n    return this._getGlobalPropagator().extract(context, carrier, getter);\n  }\n\n  /**\n   * Return a list of all fields which may be used by the propagator.\n   */\n  public fields(): string[] {\n    return this._getGlobalPropagator().fields();\n  }\n\n  /** Remove the global propagator */\n  public disable() {\n    unregisterGlobal(API_NAME, DiagAPI.instance());\n  }\n\n  public createBaggage = createBaggage;\n\n  public getBaggage = getBaggage;\n\n  public getActiveBaggage = getActiveBaggage;\n\n  public setBaggage = setBaggage;\n\n  public deleteBaggage = deleteBaggage;\n\n  private _getGlobalPropagator(): TextMapPropagator {\n    return getGlobal(API_NAME) || NOOP_TEXT_MAP_PROPAGATOR;\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { PropagationAPI } from './api/propagation';\n/**\n * Entrypoint for propagation API\n *\n * @since 1.0.0\n */\nexport const propagation = PropagationAPI.getInstance();\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n  getGlobal,\n  registerGlobal,\n  unregisterGlobal,\n} from '../internal/global-utils';\nimport { ProxyTracerProvider } from '../trace/ProxyTracerProvider';\nimport {\n  isSpanContextValid,\n  wrapSpanContext,\n} from '../trace/spancontext-utils';\nimport type { Tracer } from '../trace/tracer';\nimport type { TracerProvider } from '../trace/tracer_provider';\nimport {\n  deleteSpan,\n  getActiveSpan,\n  getSpan,\n  getSpanContext,\n  setSpan,\n  setSpanContext,\n} from '../trace/context-utils';\nimport { DiagAPI } from './diag';\n\nconst API_NAME = 'trace';\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Tracing API\n *\n * @since 1.0.0\n */\nexport class TraceAPI {\n  private static _instance?: TraceAPI;\n\n  private _proxyTracerProvider = new ProxyTracerProvider();\n\n  /** Empty private constructor prevents end users from constructing a new instance of the API */\n  private constructor() {}\n\n  /** Get the singleton instance of the Trace API */\n  public static getInstance(): TraceAPI {\n    if (!this._instance) {\n      this._instance = new TraceAPI();\n    }\n\n    return this._instance;\n  }\n\n  /**\n   * Set the current global tracer.\n   *\n   * @returns true if the tracer provider was successfully registered, else false\n   */\n  public setGlobalTracerProvider(provider: TracerProvider): boolean {\n    const success = registerGlobal(\n      API_NAME,\n      this._proxyTracerProvider,\n      DiagAPI.instance()\n    );\n    if (success) {\n      this._proxyTracerProvider.setDelegate(provider);\n    }\n    return success;\n  }\n\n  /**\n   * Returns the global tracer provider.\n   */\n  public getTracerProvider(): TracerProvider {\n    return getGlobal(API_NAME) || this._proxyTracerProvider;\n  }\n\n  /**\n   * Returns a tracer from the global tracer provider.\n   */\n  public getTracer(name: string, version?: string): Tracer {\n    return this.getTracerProvider().getTracer(name, version);\n  }\n\n  /** Remove the global tracer provider */\n  public disable() {\n    unregisterGlobal(API_NAME, DiagAPI.instance());\n    this._proxyTracerProvider = new ProxyTracerProvider();\n  }\n\n  public wrapSpanContext = wrapSpanContext;\n\n  public isSpanContextValid = isSpanContextValid;\n\n  public deleteSpan = deleteSpan;\n\n  public getSpan = getSpan;\n\n  public getActiveSpan = getActiveSpan;\n\n  public getSpanContext = getSpanContext;\n\n  public setSpan = setSpan;\n\n  public setSpanContext = setSpanContext;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { TraceAPI } from './api/trace';\n\n/**\n * Entrypoint for trace API\n *\n * @since 1.0.0\n */\nexport const trace = TraceAPI.getInstance();\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @module @opentelemetry/api\n */\n\nexport type {\n  BaggageEntry,\n  BaggageEntryMetadata,\n  Baggage,\n} from './baggage/types';\nexport { baggageEntryMetadataFromString } from './baggage/utils';\nexport type { Exception } from './common/Exception';\nexport type { HrTime, TimeInput } from './common/Time';\nexport type { Attributes, AttributeValue } from './common/Attributes';\n\n// Context APIs\nexport { createContextKey, ROOT_CONTEXT } from './context/context';\nexport type { Context, ContextManager } from './context/types';\nexport type { ContextAPI } from './api/context';\n\n// Diag APIs\nexport { DiagConsoleLogger } from './diag/consoleLogger';\nexport { DiagLogLevel } from './diag/types';\nexport type {\n  DiagLogFunction,\n  DiagLogger,\n  ComponentLoggerOptions,\n  DiagLoggerOptions,\n} from './diag/types';\nexport type { DiagAPI } from './api/diag';\n\n// Metrics APIs\nexport { createNoopMeter } from './metrics/NoopMeter';\nexport type { MeterOptions, Meter } from './metrics/Meter';\nexport type { MeterProvider } from './metrics/MeterProvider';\nexport { ValueType } from './metrics/Metric';\nexport type {\n  Counter,\n  Gauge,\n  Histogram,\n  MetricOptions,\n  UpDownCounter,\n  MetricAdvice,\n  MetricAttributes,\n  MetricAttributeValue,\n  Observable,\n  ObservableCounter,\n  ObservableGauge,\n  ObservableUpDownCounter,\n  BatchObservableCallback,\n  ObservableCallback,\n  BatchObservableResult,\n  ObservableResult,\n} from './metrics/Metric';\nexport type { MetricsAPI } from './api/metrics';\n\n// Propagation APIs\nexport {\n  defaultTextMapGetter,\n  defaultTextMapSetter,\n} from './propagation/TextMapPropagator';\nexport type {\n  TextMapPropagator,\n  TextMapSetter,\n  TextMapGetter,\n} from './propagation/TextMapPropagator';\nexport type { PropagationAPI } from './api/propagation';\n\n// Trace APIs\nexport type { SpanAttributes, SpanAttributeValue } from './trace/attributes';\nexport type { Link } from './trace/link';\nexport { ProxyTracer, type TracerDelegator } from './trace/ProxyTracer';\n// TODO: Remove ProxyTracerProvider export in the next major version.\nexport { ProxyTracerProvider } from './trace/ProxyTracerProvider';\nexport type { Sampler } from './trace/Sampler';\nexport { SamplingDecision, type SamplingResult } from './trace/SamplingResult';\nexport type { SpanContext } from './trace/span_context';\nexport { SpanKind } from './trace/span_kind';\nexport type { Span } from './trace/span';\nexport type { SpanOptions } from './trace/SpanOptions';\nexport { type SpanStatus, SpanStatusCode } from './trace/status';\nexport { TraceFlags } from './trace/trace_flags';\nexport type { TraceState } from './trace/trace_state';\nexport { createTraceState } from './trace/internal/utils';\nexport type { TracerProvider } from './trace/tracer_provider';\nexport type { Tracer } from './trace/tracer';\nexport type { TracerOptions } from './trace/tracer_options';\nexport {\n  isSpanContextValid,\n  isValidTraceId,\n  isValidSpanId,\n} from './trace/spancontext-utils';\nexport {\n  INVALID_SPANID,\n  INVALID_TRACEID,\n  INVALID_SPAN_CONTEXT,\n} from './trace/invalid-span-constants';\nexport type { TraceAPI } from './api/trace';\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { context } from './context-api';\nimport { diag } from './diag-api';\nimport { metrics } from './metrics-api';\nimport { propagation } from './propagation-api';\nimport { trace } from './trace-api';\n\n// Named export.\nexport { context, diag, metrics, propagation, trace };\n// Default export.\nexport default {\n  context,\n  diag,\n  metrics,\n  propagation,\n  trace,\n};\n", "declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n", "import { subscribe } from 'node:diagnostics_channel';\nimport type { RequestOptions } from 'node:http';\nimport { context, createContextKey, propagation } from '@opentelemetry/api';\nimport type { HttpIncomingMessage, HttpServerResponse, Integration, IntegrationFn } from '@sentry/core';\nimport {\n  addNonEnumerableProperty,\n  debug,\n  getClient,\n  getHttpServerSubscriptions,\n  HTTP_ON_SERVER_REQUEST,\n  recordRequestSession,\n} from '@sentry/core';\nimport type { RequestEventData } from '@sentry/core';\nimport { DEBUG_BUILD } from '../../debug-build';\n\n// Re-export so existing test imports continue to work; the implementation now lives in core.\nexport { recordRequestSession };\n\nconst HTTP_SERVER_INSTRUMENTED_KEY = createContextKey('sentry_http_server_instrumented');\nconst INTEGRATION_NAME = 'Http.Server' as const;\n\n// Inlining this type to not depend on newer TS types\ninterface WeakRefImpl<T> {\n  deref(): T | undefined;\n}\n\ntype StartSpanCallback = (next: () => boolean) => boolean;\ntype RequestWithOptionalStartSpanCallback = HttpIncomingMessage & {\n  _startSpanCallback?: WeakRefImpl<StartSpanCallback>;\n};\n\nexport interface HttpServerIntegrationOptions {\n  /**\n   * Whether the integration should create [Sessions](https://docs.sentry.io/product/releases/health/#sessions) for incoming requests to track the health and crash-free rate of your releases in Sentry.\n   * Read more about Release Health: https://docs.sentry.io/product/releases/health/\n   *\n   * Defaults to `true`.\n   */\n  sessions?: boolean;\n\n  /**\n   * Number of milliseconds until sessions tracked with `trackIncomingRequestsAsSessions` will be flushed as a session aggregate.\n   *\n   * Defaults to `60000` (60s).\n   */\n  sessionFlushingDelayMS?: number;\n\n  /**\n   * Do not capture the request body for incoming HTTP requests to URLs where the given callback returns `true`.\n   * This can be useful for long running requests where the body is not needed and we want to avoid capturing it.\n   *\n   * @param url Contains the entire URL, including query string (if any), protocol, host, etc. of the incoming request.\n   * @param request Contains the {@type RequestOptions} object used to make the incoming request.\n   */\n  ignoreRequestBody?: (url: string, request: RequestOptions) => boolean;\n\n  /**\n   * Controls the maximum size of incoming HTTP request bodies attached to events.\n   *\n   * Available options:\n   * - 'none': No request bodies will be attached\n   * - 'small': Request bodies up to 1,000 bytes will be attached\n   * - 'medium': Request bodies up to 10,000 bytes will be attached (default)\n   * - 'always': Request bodies will always be attached\n   *\n   * Note that even with 'always' setting, bodies exceeding 1MB will never be attached\n   * for performance and security reasons.\n   *\n   * @default 'medium'\n   */\n  maxRequestBodySize?: 'none' | 'small' | 'medium' | 'always';\n}\n\n/**\n * Add a callback to the request object that will be called when the request is started.\n * The callback will receive the next function to continue processing the request.\n */\nexport function addStartSpanCallback(request: RequestWithOptionalStartSpanCallback, callback: StartSpanCallback): void {\n  addNonEnumerableProperty(request, '_startSpanCallback', new WeakRef(callback));\n}\n\nconst _httpServerIntegration = ((options: HttpServerIntegrationOptions = {}) => {\n  const _options = {\n    sessions: options.sessions ?? true,\n    sessionFlushingDelayMS: options.sessionFlushingDelayMS ?? 60_000,\n    maxRequestBodySize: options.maxRequestBodySize ?? 'medium',\n    // Server spans are created by `httpServerSpansIntegration` via the\n    // `httpServerRequest` client event + `_startSpanCallback`, not by the\n    // core subscription helper. Explicitly opt out so the helper does not\n    // double-create spans when the client has tracing enabled.\n    spans: false as const,\n    // Cast: core uses HttpIncomingMessage; node consumers pass\n    // RequestOptions-typed callbacks.\n    // The two are structurally compatible for the fields the callback reads\n    // (url, method, headers).\n    ignoreRequestBody: options.ignoreRequestBody as\n      | ((url: string, request: HttpIncomingMessage) => boolean)\n      | undefined,\n\n    /**\n     * Hook called by core's `instrumentServer` to wrap the upstream\n     * `emit('request')` call.\n     *\n     * We use it to extract OTel context from request headers and re-enter\n     * the OTel context before the framework sees the request, so subsequent\n     * spans (eg from `httpServerSpansIntegration`) attach to the right trace.\n     */\n    wrapServerEmitRequest(\n      request: HttpIncomingMessage,\n      response: HttpServerResponse,\n      normalizedRequest: RequestEventData,\n      next: () => void,\n    ): void {\n      const client = getClient();\n      if (!client) return next();\n\n      // Guard against double-wrapping: if our wrapper somehow runs inside an\n      // already-instrumented context, just continue without re-extracting\n      // and re-emitting.\n      if (context.active().getValue(HTTP_SERVER_INSTRUMENTED_KEY)) {\n        return next();\n      }\n\n      const ctx = propagation\n        .extract(context.active(), normalizedRequest.headers)\n        .setValue(HTTP_SERVER_INSTRUMENTED_KEY, true);\n\n      context.with(ctx, () => {\n        // httpServerSpansIntegration listens for this and may attach\n        // `_startSpanCallback` to the request to wrap span creation around\n        // the emit.\n        client.emit('httpServerRequest', request, response, normalizedRequest);\n\n        const callback = (request as RequestWithOptionalStartSpanCallback)._startSpanCallback?.deref();\n        if (callback) {\n          callback(() => {\n            next();\n            return true;\n          });\n        } else {\n          next();\n        }\n      });\n    },\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      const { [HTTP_ON_SERVER_REQUEST]: onHttpServerRequestStart } = getHttpServerSubscriptions(_options);\n      subscribe(HTTP_ON_SERVER_REQUEST, onHttpServerRequestStart);\n    },\n    afterAllSetup(client) {\n      if (DEBUG_BUILD && client.getIntegrationByName('Http')) {\n        debug.warn(\n          'It seems that you have manually added `httpServerIntegration` while `httpIntegration` is also present. Make sure to remove `httpServerIntegration` when adding `httpIntegration`.',\n        );\n      }\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * This integration handles request isolation, trace continuation and other core Sentry functionality around incoming http requests\n * handled via the node `http` module.\n *\n * This version uses OpenTelemetry for context propagation and span management.\n *\n * @see {@link ../../light/integrations/httpServerIntegration.ts} for the lightweight version without OpenTelemetry\n */\nexport const httpServerIntegration = _httpServerIntegration as (\n  options?: HttpServerIntegrationOptions,\n) => Integration & {\n  name: 'Http.Server';\n  setupOnce: () => void;\n};\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Context } from '@opentelemetry/api';\nimport { createContextKey } from '@opentelemetry/api';\n\nconst SUPPRESS_TRACING_KEY = createContextKey(\n  'OpenTelemetry SDK Context Key SUPPRESS_TRACING'\n);\n\nexport function suppressTracing(context: Context): Context {\n  return context.setValue(SUPPRESS_TRACING_KEY, true);\n}\n\nexport function unsuppressTracing(context: Context): Context {\n  return context.deleteValue(SUPPRESS_TRACING_KEY);\n}\n\nexport function isTracingSuppressed(context: Context): boolean {\n  return context.getValue(SUPPRESS_TRACING_KEY) === true;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const BAGGAGE_KEY_PAIR_SEPARATOR = '=';\nexport const BAGGAGE_PROPERTIES_SEPARATOR = ';';\nexport const BAGGAGE_ITEMS_SEPARATOR = ',';\n\n// Name of the http header used to propagate the baggage\nexport const BAGGAGE_HEADER = 'baggage';\n// Maximum number of name-value pairs allowed by w3c spec\nexport const BAGGAGE_MAX_NAME_VALUE_PAIRS = 180;\n// Maximum number of bytes per a single name-value pair allowed by w3c spec\nexport const BAGGAGE_MAX_PER_NAME_VALUE_PAIRS = 4096;\n// Maximum total length of all name-value pairs allowed by w3c spec\nexport const BAGGAGE_MAX_TOTAL_LENGTH = 8192;\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {\n  Baggage,\n  BaggageEntry,\n  BaggageEntryMetadata,\n} from '@opentelemetry/api';\nimport { baggageEntryMetadataFromString } from '@opentelemetry/api';\nimport {\n  BAGGAGE_ITEMS_SEPARATOR,\n  BAGGAGE_PROPERTIES_SEPARATOR,\n  BAGGAGE_KEY_PAIR_SEPARATOR,\n  BAGGAGE_MAX_TOTAL_LENGTH,\n  BAGGAGE_MAX_NAME_VALUE_PAIRS,\n  BAGGAGE_MAX_PER_NAME_VALUE_PAIRS,\n} from './constants';\n\ntype ParsedBaggageKeyValue = {\n  key: string;\n  value: string;\n  metadata: BaggageEntryMetadata | undefined;\n};\n\nexport function serializeKeyPairs(keyPairs: string[]): string {\n  return keyPairs.reduce((hValue: string, current: string) => {\n    const value = `${hValue}${\n      hValue !== '' ? BAGGAGE_ITEMS_SEPARATOR : ''\n    }${current}`;\n    return value.length > BAGGAGE_MAX_TOTAL_LENGTH ? hValue : value;\n  }, '');\n}\n\nexport function getKeyPairs(baggage: Baggage): string[] {\n  return baggage.getAllEntries().map(([key, value]) => {\n    let entry = `${encodeURIComponent(key)}=${encodeURIComponent(value.value)}`;\n\n    // include opaque metadata if provided\n    // NOTE: we intentionally don't URI-encode the metadata - that responsibility falls on the metadata implementation\n    if (value.metadata !== undefined) {\n      entry += BAGGAGE_PROPERTIES_SEPARATOR + value.metadata.toString();\n    }\n\n    return entry;\n  });\n}\n\nexport function parsePairKeyValue(\n  entry: string\n): ParsedBaggageKeyValue | undefined {\n  if (!entry) return;\n  const metadataSeparatorIndex = entry.indexOf(BAGGAGE_PROPERTIES_SEPARATOR);\n  const keyPairPart =\n    metadataSeparatorIndex === -1\n      ? entry\n      : entry.substring(0, metadataSeparatorIndex);\n\n  const separatorIndex = keyPairPart.indexOf(BAGGAGE_KEY_PAIR_SEPARATOR);\n  if (separatorIndex <= 0) return;\n\n  const rawKey = keyPairPart.substring(0, separatorIndex).trim();\n  const rawValue = keyPairPart.substring(separatorIndex + 1).trim();\n\n  if (!rawKey || !rawValue) return;\n  let key: string;\n  let value: string;\n  try {\n    key = decodeURIComponent(rawKey);\n    value = decodeURIComponent(rawValue);\n  } catch {\n    return;\n  }\n\n  let metadata;\n  if (\n    metadataSeparatorIndex !== -1 &&\n    metadataSeparatorIndex < entry.length - 1\n  ) {\n    const metadataString = entry.substring(metadataSeparatorIndex + 1);\n    metadata = baggageEntryMetadataFromString(metadataString);\n  }\n\n  return { key, value, metadata };\n}\n\n/**\n * Parses a single baggage header string into the provided record, applying limits defined in this package.\n * Uses indexOf/substring in a while loop to avoid allocating a full array of split entries.\n * Returns the updated pair count so callers can track totals across multiple header values.\n */\nexport function parseBaggageHeaderString(\n  value: string,\n  baggage: Record<string, BaggageEntry>,\n  count: number,\n  totalSize: number\n): [count: number, totalSize: number] {\n  let start = 0;\n  while (start < value.length && count < BAGGAGE_MAX_NAME_VALUE_PAIRS) {\n    const end = value.indexOf(BAGGAGE_ITEMS_SEPARATOR, start);\n    const entryEnd = end === -1 ? value.length : end;\n    const entryLength = entryEnd - start;\n\n    if (entryLength <= BAGGAGE_MAX_PER_NAME_VALUE_PAIRS) {\n      const keyPair = parsePairKeyValue(value.substring(start, entryEnd));\n      if (keyPair) {\n        // Comma separator is counted for every accepted entry after the first\n        const entrySize = (count === 0 ? 0 : 1) + entryLength;\n        if (totalSize + entrySize > BAGGAGE_MAX_TOTAL_LENGTH) break;\n        baggage[keyPair.key] = keyPair.metadata\n          ? { value: keyPair.value, metadata: keyPair.metadata }\n          : { value: keyPair.value };\n        count++;\n        totalSize += entrySize;\n      }\n    }\n\n    if (end === -1) break;\n    start = end + 1;\n  }\n  return [count, totalSize];\n}\n\n/**\n * Parse a string serialized in the baggage HTTP Format (without metadata):\n * https://github.com/w3c/baggage/blob/master/baggage/HTTP_HEADER_FORMAT.md\n */\nexport function parseKeyPairsIntoRecord(\n  value?: string\n): Record<string, string> {\n  const result: Record<string, string> = {};\n\n  if (typeof value === 'string' && value.length > 0) {\n    value.split(BAGGAGE_ITEMS_SEPARATOR).forEach(entry => {\n      const keyPair = parsePairKeyValue(entry);\n\n      if (keyPair !== undefined && keyPair.value.length > 0) {\n        result[keyPair.key] = keyPair.value;\n      }\n    });\n  }\n\n  return result;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n  BaggageEntry,\n  Context,\n  TextMapGetter,\n  TextMapPropagator,\n  TextMapSetter,\n} from '@opentelemetry/api';\nimport { propagation } from '@opentelemetry/api';\n\nimport { isTracingSuppressed } from '../../trace/suppress-tracing';\nimport {\n  BAGGAGE_HEADER,\n  BAGGAGE_MAX_NAME_VALUE_PAIRS,\n  BAGGAGE_MAX_PER_NAME_VALUE_PAIRS,\n} from '../constants';\nimport {\n  getKeyPairs,\n  parseBaggageHeaderString,\n  serializeKeyPairs,\n} from '../utils';\n\n/**\n * Propagates {@link Baggage} through Context format propagation.\n *\n * Based on the Baggage specification:\n * https://w3c.github.io/baggage/\n */\nexport class W3CBaggagePropagator implements TextMapPropagator {\n  inject(context: Context, carrier: unknown, setter: TextMapSetter): void {\n    const baggage = propagation.getBaggage(context);\n    if (!baggage || isTracingSuppressed(context)) return;\n    const keyPairs = getKeyPairs(baggage)\n      .filter((pair: string) => {\n        return pair.length <= BAGGAGE_MAX_PER_NAME_VALUE_PAIRS;\n      })\n      .slice(0, BAGGAGE_MAX_NAME_VALUE_PAIRS);\n    const headerValue = serializeKeyPairs(keyPairs);\n    if (headerValue.length > 0) {\n      setter.set(carrier, BAGGAGE_HEADER, headerValue);\n    }\n  }\n\n  extract(context: Context, carrier: unknown, getter: TextMapGetter): Context {\n    const headerValue = getter.get(carrier, BAGGAGE_HEADER);\n    if (!headerValue) {\n      return context;\n    }\n\n    const baggage: Record<string, BaggageEntry> = {};\n    let count = 0;\n\n    let totalSize = 0;\n    if (Array.isArray(headerValue)) {\n      for (let i = 0; i < headerValue.length; i++) {\n        [count, totalSize] = parseBaggageHeaderString(\n          headerValue[i],\n          baggage,\n          count,\n          totalSize\n        );\n      }\n    } else {\n      [count] = parseBaggageHeaderString(\n        headerValue,\n        baggage,\n        count,\n        totalSize\n      );\n    }\n\n    if (count === 0) {\n      return context;\n    }\n\n    return propagation.setBaggage(context, propagation.createBaggage(baggage));\n  }\n\n  fields(): string[] {\n    return [BAGGAGE_HEADER];\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport interface Clock {\n  /**\n   * Return the current time in milliseconds from some epoch such as the Unix epoch or process start\n   */\n  now(): number;\n}\n\n/**\n * A utility for returning wall times anchored to a given point in time. Wall time measurements will\n * not be taken from the system, but instead are computed by adding a monotonic clock time\n * to the anchor point.\n *\n * This is needed because the system time can change and result in unexpected situations like\n * spans ending before they are started. Creating an anchored clock for each local root span\n * ensures that span timings and durations are accurate while preventing span times from drifting\n * too far from the system clock.\n *\n * Only creating an anchored clock once per local trace ensures span times are correct relative\n * to each other. For example, a child span will never have a start time before its parent even\n * if the system clock is corrected during the local trace.\n *\n * Heavily inspired by the OTel Java anchored clock\n * https://github.com/open-telemetry/opentelemetry-java/blob/main/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/AnchoredClock.java\n */\nexport class AnchoredClock implements Clock {\n  private _monotonicClock: Clock;\n  private _epochMillis: number;\n  private _performanceMillis: number;\n\n  /**\n   * Create a new AnchoredClock anchored to the current time returned by systemClock.\n   *\n   * @param systemClock should be a clock that returns the number of milliseconds since January 1 1970 such as Date\n   * @param monotonicClock should be a clock that counts milliseconds monotonically such as window.performance or perf_hooks.performance\n   */\n  public constructor(systemClock: Clock, monotonicClock: Clock) {\n    this._monotonicClock = monotonicClock;\n    this._epochMillis = systemClock.now();\n    this._performanceMillis = monotonicClock.now();\n  }\n\n  /**\n   * Returns the current time by adding the number of milliseconds since the\n   * AnchoredClock was created to the creation epoch time\n   */\n  public now(): number {\n    const delta = this._monotonicClock.now() - this._performanceMillis;\n    return this._epochMillis + delta;\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AttributeValue, Attributes } from '@opentelemetry/api';\nimport { diag } from '@opentelemetry/api';\n\nexport function sanitizeAttributes(attributes: unknown): Attributes {\n  const out: Attributes = {};\n\n  if (typeof attributes !== 'object' || attributes == null) {\n    return out;\n  }\n\n  for (const key in attributes) {\n    if (!Object.prototype.hasOwnProperty.call(attributes, key)) {\n      continue;\n    }\n    if (!isAttributeKey(key)) {\n      diag.warn(`Invalid attribute key: ${key}`);\n      continue;\n    }\n    const val = (attributes as Record<string, unknown>)[key];\n    if (!isAttributeValue(val)) {\n      diag.warn(`Invalid attribute value set for key: ${key}`);\n      continue;\n    }\n    if (Array.isArray(val)) {\n      out[key] = val.slice();\n    } else {\n      out[key] = val;\n    }\n  }\n\n  return out;\n}\n\nexport function isAttributeKey(key: unknown): key is string {\n  return typeof key === 'string' && key !== '';\n}\n\nexport function isAttributeValue(val: unknown): val is AttributeValue {\n  if (val == null) {\n    return true;\n  }\n\n  if (Array.isArray(val)) {\n    return isHomogeneousAttributeValueArray(val);\n  }\n\n  return isValidPrimitiveAttributeValueType(typeof val);\n}\n\nfunction isHomogeneousAttributeValueArray(arr: unknown[]): boolean {\n  let type: string | undefined;\n\n  for (const element of arr) {\n    // null/undefined elements are allowed\n    if (element == null) continue;\n    const elementType = typeof element;\n\n    if (elementType === type) {\n      continue;\n    }\n\n    if (!type) {\n      if (isValidPrimitiveAttributeValueType(elementType)) {\n        type = elementType;\n        continue;\n      }\n      // encountered an invalid primitive\n      return false;\n    }\n\n    return false;\n  }\n\n  return true;\n}\n\nfunction isValidPrimitiveAttributeValueType(valType: string): boolean {\n  switch (valType) {\n    case 'number':\n    case 'boolean':\n    case 'string':\n      return true;\n  }\n\n  return false;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Exception } from '@opentelemetry/api';\nimport { diag } from '@opentelemetry/api';\nimport type { ErrorHandler } from './types';\n\n/**\n * Returns a function that logs an error using the provided logger, or a\n * console logger if one was not provided.\n */\nexport function loggingErrorHandler(): ErrorHandler {\n  return (ex: Exception) => {\n    diag.error(stringifyException(ex));\n  };\n}\n\n/**\n * Converts an exception into a string representation\n * @param {Exception} ex\n */\nfunction stringifyException(ex: Exception | string): string {\n  if (typeof ex === 'string') {\n    return ex;\n  } else {\n    return JSON.stringify(flattenException(ex));\n  }\n}\n\n/**\n * Flattens an exception into key-value pairs by traversing the prototype chain\n * and coercing values to strings. Duplicate properties will not be overwritten;\n * the first insert wins.\n */\nfunction flattenException(ex: Exception): Record<string, string> {\n  const result = {} as Record<string, string>;\n  let current = ex;\n\n  while (current !== null) {\n    Object.getOwnPropertyNames(current).forEach(propertyName => {\n      if (result[propertyName]) return;\n      const value = current[propertyName as keyof typeof current];\n      if (value) {\n        result[propertyName] = String(value);\n      }\n    });\n    current = Object.getPrototypeOf(current);\n  }\n\n  return result;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Exception } from '@opentelemetry/api';\nimport { loggingErrorHandler } from './logging-error-handler';\nimport type { ErrorHandler } from './types';\n\n/** The global error handler delegate */\nlet delegateHandler = loggingErrorHandler();\n\n/**\n * Set the global error handler\n * @param {ErrorHandler} handler\n */\nexport function setGlobalErrorHandler(handler: ErrorHandler): void {\n  delegateHandler = handler;\n}\n\n/**\n * Return the global error handler\n * @param {Exception} ex\n */\nexport function globalErrorHandler(ex: Exception): void {\n  try {\n    delegateHandler(ex);\n  } catch {} // eslint-disable-line no-empty\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { diag } from '@opentelemetry/api';\nimport { inspect } from 'util';\n\n/**\n * Retrieves a number from an environment variable.\n * - Returns `undefined` if the environment variable is empty, unset, contains only whitespace, or is not a number.\n * - Returns a number in all other cases.\n *\n * @param {string} key - The name of the environment variable to retrieve.\n * @returns {number | undefined} - The number value or `undefined`.\n */\nexport function getNumberFromEnv(key: string): number | undefined {\n  const raw = process.env[key];\n  if (raw == null || raw.trim() === '') {\n    return undefined;\n  }\n\n  const value = Number(raw);\n  if (isNaN(value)) {\n    diag.warn(\n      `Unknown value ${inspect(raw)} for ${key}, expected a number, using defaults`\n    );\n    return undefined;\n  }\n\n  return value;\n}\n\n/**\n * Retrieves a string from an environment variable.\n * - Returns `undefined` if the environment variable is empty, unset, or contains only whitespace.\n *\n * @param {string} key - The name of the environment variable to retrieve.\n * @returns {string | undefined} - The string value or `undefined`.\n */\nexport function getStringFromEnv(key: string): string | undefined {\n  const raw = process.env[key];\n  if (raw == null || raw.trim() === '') {\n    return undefined;\n  }\n  return raw;\n}\n\n/**\n * Retrieves a boolean value from an environment variable.\n * - Trims leading and trailing whitespace and ignores casing.\n * - Returns `false` if the environment variable is empty, unset, or contains only whitespace.\n * - Returns `false` for strings that cannot be mapped to a boolean.\n *\n * @param {string} key - The name of the environment variable to retrieve.\n * @returns {boolean} - The boolean value or `false` if the environment variable is unset empty, unset, or contains only whitespace.\n */\nexport function getBooleanFromEnv(key: string): boolean {\n  const raw = process.env[key]?.trim().toLowerCase();\n  if (raw == null || raw === '') {\n    // NOTE: falling back to `false` instead of `undefined` as required by the specification.\n    // If you have a use-case that requires `undefined`, consider using `getStringFromEnv()` and applying the necessary\n    // normalizations in the consuming code.\n    return false;\n  }\n  if (raw === 'true') {\n    return true;\n  } else if (raw === 'false') {\n    return false;\n  } else {\n    diag.warn(\n      `Unknown value ${inspect(raw)} for ${key}, expected 'true' or 'false', falling back to 'false' (default)`\n    );\n    return false;\n  }\n}\n\n/**\n * Retrieves a list of strings from an environment variable.\n * - Uses ',' as the delimiter.\n * - Trims leading and trailing whitespace from each entry.\n * - Excludes empty entries.\n * - Returns `undefined` if the environment variable is empty or contains only whitespace.\n * - Returns an empty array if all entries are empty or whitespace.\n *\n * @param {string} key - The name of the environment variable to retrieve.\n * @returns {string[] | undefined} - The list of strings or `undefined`.\n */\nexport function getStringListFromEnv(key: string): string[] | undefined {\n  return getStringFromEnv(key)\n    ?.split(',')\n    .map(v => v.trim())\n    .filter(s => s !== '');\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @deprecated Use globalThis directly instead.\n */\nexport const _globalThis = globalThis;\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '2.10.0';\n", "/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Creates a const map from the given values\n * @param values - An array of values to be used as keys and values in the map.\n * @returns A populated version of the map with the values and keys derived from the values.\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function createConstMap<T>(values: Array<T[keyof T]>): T {\n  // eslint-disable-next-line prefer-const, @typescript-eslint/no-explicit-any\n  let res: any = {};\n  const len = values.length;\n  for (let lp = 0; lp < len; lp++) {\n    const val = values[lp];\n    if (val) {\n      res[String(val).toUpperCase().replace(/[-.]/g, '_')] = val;\n    }\n  }\n\n  return res as T;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createConstMap } from '../internal/utils';\n\n//----------------------------------------------------------------------------------------------------------\n// DO NOT EDIT, this is an Auto-generated file from scripts/semconv/templates//templates/SemanticAttributes.ts.j2\n//----------------------------------------------------------------------------------------------------------\n\n//----------------------------------------------------------------------------------------------------------\n// Constant values for SemanticAttributes\n//----------------------------------------------------------------------------------------------------------\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_AWS_LAMBDA_INVOKED_ARN = 'aws.lambda.invoked_arn';\nconst TMP_DB_SYSTEM = 'db.system';\nconst TMP_DB_CONNECTION_STRING = 'db.connection_string';\nconst TMP_DB_USER = 'db.user';\nconst TMP_DB_JDBC_DRIVER_CLASSNAME = 'db.jdbc.driver_classname';\nconst TMP_DB_NAME = 'db.name';\nconst TMP_DB_STATEMENT = 'db.statement';\nconst TMP_DB_OPERATION = 'db.operation';\nconst TMP_DB_MSSQL_INSTANCE_NAME = 'db.mssql.instance_name';\nconst TMP_DB_CASSANDRA_KEYSPACE = 'db.cassandra.keyspace';\nconst TMP_DB_CASSANDRA_PAGE_SIZE = 'db.cassandra.page_size';\nconst TMP_DB_CASSANDRA_CONSISTENCY_LEVEL = 'db.cassandra.consistency_level';\nconst TMP_DB_CASSANDRA_TABLE = 'db.cassandra.table';\nconst TMP_DB_CASSANDRA_IDEMPOTENCE = 'db.cassandra.idempotence';\nconst TMP_DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT =\n  'db.cassandra.speculative_execution_count';\nconst TMP_DB_CASSANDRA_COORDINATOR_ID = 'db.cassandra.coordinator.id';\nconst TMP_DB_CASSANDRA_COORDINATOR_DC = 'db.cassandra.coordinator.dc';\nconst TMP_DB_HBASE_NAMESPACE = 'db.hbase.namespace';\nconst TMP_DB_REDIS_DATABASE_INDEX = 'db.redis.database_index';\nconst TMP_DB_MONGODB_COLLECTION = 'db.mongodb.collection';\nconst TMP_DB_SQL_TABLE = 'db.sql.table';\nconst TMP_EXCEPTION_TYPE = 'exception.type';\nconst TMP_EXCEPTION_MESSAGE = 'exception.message';\nconst TMP_EXCEPTION_STACKTRACE = 'exception.stacktrace';\nconst TMP_EXCEPTION_ESCAPED = 'exception.escaped';\nconst TMP_FAAS_TRIGGER = 'faas.trigger';\nconst TMP_FAAS_EXECUTION = 'faas.execution';\nconst TMP_FAAS_DOCUMENT_COLLECTION = 'faas.document.collection';\nconst TMP_FAAS_DOCUMENT_OPERATION = 'faas.document.operation';\nconst TMP_FAAS_DOCUMENT_TIME = 'faas.document.time';\nconst TMP_FAAS_DOCUMENT_NAME = 'faas.document.name';\nconst TMP_FAAS_TIME = 'faas.time';\nconst TMP_FAAS_CRON = 'faas.cron';\nconst TMP_FAAS_COLDSTART = 'faas.coldstart';\nconst TMP_FAAS_INVOKED_NAME = 'faas.invoked_name';\nconst TMP_FAAS_INVOKED_PROVIDER = 'faas.invoked_provider';\nconst TMP_FAAS_INVOKED_REGION = 'faas.invoked_region';\nconst TMP_NET_TRANSPORT = 'net.transport';\nconst TMP_NET_PEER_IP = 'net.peer.ip';\nconst TMP_NET_PEER_PORT = 'net.peer.port';\nconst TMP_NET_PEER_NAME = 'net.peer.name';\nconst TMP_NET_HOST_IP = 'net.host.ip';\nconst TMP_NET_HOST_PORT = 'net.host.port';\nconst TMP_NET_HOST_NAME = 'net.host.name';\nconst TMP_NET_HOST_CONNECTION_TYPE = 'net.host.connection.type';\nconst TMP_NET_HOST_CONNECTION_SUBTYPE = 'net.host.connection.subtype';\nconst TMP_NET_HOST_CARRIER_NAME = 'net.host.carrier.name';\nconst TMP_NET_HOST_CARRIER_MCC = 'net.host.carrier.mcc';\nconst TMP_NET_HOST_CARRIER_MNC = 'net.host.carrier.mnc';\nconst TMP_NET_HOST_CARRIER_ICC = 'net.host.carrier.icc';\nconst TMP_PEER_SERVICE = 'peer.service';\nconst TMP_ENDUSER_ID = 'enduser.id';\nconst TMP_ENDUSER_ROLE = 'enduser.role';\nconst TMP_ENDUSER_SCOPE = 'enduser.scope';\nconst TMP_THREAD_ID = 'thread.id';\nconst TMP_THREAD_NAME = 'thread.name';\nconst TMP_CODE_FUNCTION = 'code.function';\nconst TMP_CODE_NAMESPACE = 'code.namespace';\nconst TMP_CODE_FILEPATH = 'code.filepath';\nconst TMP_CODE_LINENO = 'code.lineno';\nconst TMP_HTTP_METHOD = 'http.method';\nconst TMP_HTTP_URL = 'http.url';\nconst TMP_HTTP_TARGET = 'http.target';\nconst TMP_HTTP_HOST = 'http.host';\nconst TMP_HTTP_SCHEME = 'http.scheme';\nconst TMP_HTTP_STATUS_CODE = 'http.status_code';\nconst TMP_HTTP_FLAVOR = 'http.flavor';\nconst TMP_HTTP_USER_AGENT = 'http.user_agent';\nconst TMP_HTTP_REQUEST_CONTENT_LENGTH = 'http.request_content_length';\nconst TMP_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED =\n  'http.request_content_length_uncompressed';\nconst TMP_HTTP_RESPONSE_CONTENT_LENGTH = 'http.response_content_length';\nconst TMP_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED =\n  'http.response_content_length_uncompressed';\nconst TMP_HTTP_SERVER_NAME = 'http.server_name';\nconst TMP_HTTP_ROUTE = 'http.route';\nconst TMP_HTTP_CLIENT_IP = 'http.client_ip';\nconst TMP_AWS_DYNAMODB_TABLE_NAMES = 'aws.dynamodb.table_names';\nconst TMP_AWS_DYNAMODB_CONSUMED_CAPACITY = 'aws.dynamodb.consumed_capacity';\nconst TMP_AWS_DYNAMODB_ITEM_COLLECTION_METRICS =\n  'aws.dynamodb.item_collection_metrics';\nconst TMP_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY =\n  'aws.dynamodb.provisioned_read_capacity';\nconst TMP_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY =\n  'aws.dynamodb.provisioned_write_capacity';\nconst TMP_AWS_DYNAMODB_CONSISTENT_READ = 'aws.dynamodb.consistent_read';\nconst TMP_AWS_DYNAMODB_PROJECTION = 'aws.dynamodb.projection';\nconst TMP_AWS_DYNAMODB_LIMIT = 'aws.dynamodb.limit';\nconst TMP_AWS_DYNAMODB_ATTRIBUTES_TO_GET = 'aws.dynamodb.attributes_to_get';\nconst TMP_AWS_DYNAMODB_INDEX_NAME = 'aws.dynamodb.index_name';\nconst TMP_AWS_DYNAMODB_SELECT = 'aws.dynamodb.select';\nconst TMP_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES =\n  'aws.dynamodb.global_secondary_indexes';\nconst TMP_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES =\n  'aws.dynamodb.local_secondary_indexes';\nconst TMP_AWS_DYNAMODB_EXCLUSIVE_START_TABLE =\n  'aws.dynamodb.exclusive_start_table';\nconst TMP_AWS_DYNAMODB_TABLE_COUNT = 'aws.dynamodb.table_count';\nconst TMP_AWS_DYNAMODB_SCAN_FORWARD = 'aws.dynamodb.scan_forward';\nconst TMP_AWS_DYNAMODB_SEGMENT = 'aws.dynamodb.segment';\nconst TMP_AWS_DYNAMODB_TOTAL_SEGMENTS = 'aws.dynamodb.total_segments';\nconst TMP_AWS_DYNAMODB_COUNT = 'aws.dynamodb.count';\nconst TMP_AWS_DYNAMODB_SCANNED_COUNT = 'aws.dynamodb.scanned_count';\nconst TMP_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS =\n  'aws.dynamodb.attribute_definitions';\nconst TMP_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES =\n  'aws.dynamodb.global_secondary_index_updates';\nconst TMP_MESSAGING_SYSTEM = 'messaging.system';\nconst TMP_MESSAGING_DESTINATION = 'messaging.destination';\nconst TMP_MESSAGING_DESTINATION_KIND = 'messaging.destination_kind';\nconst TMP_MESSAGING_TEMP_DESTINATION = 'messaging.temp_destination';\nconst TMP_MESSAGING_PROTOCOL = 'messaging.protocol';\nconst TMP_MESSAGING_PROTOCOL_VERSION = 'messaging.protocol_version';\nconst TMP_MESSAGING_URL = 'messaging.url';\nconst TMP_MESSAGING_MESSAGE_ID = 'messaging.message_id';\nconst TMP_MESSAGING_CONVERSATION_ID = 'messaging.conversation_id';\nconst TMP_MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES =\n  'messaging.message_payload_size_bytes';\nconst TMP_MESSAGING_MESSAGE_PAYLOAD_COMPRESSED_SIZE_BYTES =\n  'messaging.message_payload_compressed_size_bytes';\nconst TMP_MESSAGING_OPERATION = 'messaging.operation';\nconst TMP_MESSAGING_CONSUMER_ID = 'messaging.consumer_id';\nconst TMP_MESSAGING_RABBITMQ_ROUTING_KEY = 'messaging.rabbitmq.routing_key';\nconst TMP_MESSAGING_KAFKA_MESSAGE_KEY = 'messaging.kafka.message_key';\nconst TMP_MESSAGING_KAFKA_CONSUMER_GROUP = 'messaging.kafka.consumer_group';\nconst TMP_MESSAGING_KAFKA_CLIENT_ID = 'messaging.kafka.client_id';\nconst TMP_MESSAGING_KAFKA_PARTITION = 'messaging.kafka.partition';\nconst TMP_MESSAGING_KAFKA_TOMBSTONE = 'messaging.kafka.tombstone';\nconst TMP_RPC_SYSTEM = 'rpc.system';\nconst TMP_RPC_SERVICE = 'rpc.service';\nconst TMP_RPC_METHOD = 'rpc.method';\nconst TMP_RPC_GRPC_STATUS_CODE = 'rpc.grpc.status_code';\nconst TMP_RPC_JSONRPC_VERSION = 'rpc.jsonrpc.version';\nconst TMP_RPC_JSONRPC_REQUEST_ID = 'rpc.jsonrpc.request_id';\nconst TMP_RPC_JSONRPC_ERROR_CODE = 'rpc.jsonrpc.error_code';\nconst TMP_RPC_JSONRPC_ERROR_MESSAGE = 'rpc.jsonrpc.error_message';\nconst TMP_MESSAGE_TYPE = 'message.type';\nconst TMP_MESSAGE_ID = 'message.id';\nconst TMP_MESSAGE_COMPRESSED_SIZE = 'message.compressed_size';\nconst TMP_MESSAGE_UNCOMPRESSED_SIZE = 'message.uncompressed_size';\n\n/**\n * The full invoked ARN as provided on the `Context` passed to the function (`Lambda-Runtime-Invoked-Function-Arn` header on the `/runtime/invocation/next` applicable).\n *\n * Note: This may be different from `faas.id` if an alias is involved.\n *\n * @deprecated Use ATTR_AWS_LAMBDA_INVOKED_ARN in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_LAMBDA_INVOKED_ARN = TMP_AWS_LAMBDA_INVOKED_ARN;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use ATTR_DB_SYSTEM in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_SYSTEM = TMP_DB_SYSTEM;\n\n/**\n * The connection string used to connect to the database. It is recommended to remove embedded credentials.\n *\n * @deprecated Use ATTR_DB_CONNECTION_STRING in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_CONNECTION_STRING = TMP_DB_CONNECTION_STRING;\n\n/**\n * Username for accessing the database.\n *\n * @deprecated Use ATTR_DB_USER in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_USER = TMP_DB_USER;\n\n/**\n * The fully-qualified class name of the [Java Database Connectivity (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to connect.\n *\n * @deprecated Use ATTR_DB_JDBC_DRIVER_CLASSNAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_JDBC_DRIVER_CLASSNAME = TMP_DB_JDBC_DRIVER_CLASSNAME;\n\n/**\n * If no [tech-specific attribute](#call-level-attributes-for-specific-technologies) is defined, this attribute is used to report the name of the database being accessed. For commands that switch the database, this should be set to the target database (even if the command fails).\n *\n * Note: In some SQL databases, the database name to be used is called &#34;schema name&#34;.\n *\n * @deprecated Use ATTR_DB_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_NAME = TMP_DB_NAME;\n\n/**\n * The database statement being executed.\n *\n * Note: The value may be sanitized to exclude sensitive information.\n *\n * @deprecated Use ATTR_DB_STATEMENT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_STATEMENT = TMP_DB_STATEMENT;\n\n/**\n * The name of the operation being executed, e.g. the [MongoDB command name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as `findAndModify`, or the SQL keyword.\n *\n * Note: When setting this to an SQL keyword, it is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if the operation name is provided by the library being instrumented. If the SQL statement has an ambiguous operation, or performs more than one operation, this value may be omitted.\n *\n * @deprecated Use ATTR_DB_OPERATION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_OPERATION = TMP_DB_OPERATION;\n\n/**\n * The Microsoft SQL Server [instance name](https://docs.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15) connecting to. This name is used to determine the port of a named instance.\n *\n * Note: If setting a `db.mssql.instance_name`, `net.peer.port` is no longer required (but still recommended if non-standard).\n *\n * @deprecated Use ATTR_DB_MSSQL_INSTANCE_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_MSSQL_INSTANCE_NAME = TMP_DB_MSSQL_INSTANCE_NAME;\n\n/**\n * The name of the keyspace being accessed. To be used instead of the generic `db.name` attribute.\n *\n * @deprecated Use ATTR_DB_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_CASSANDRA_KEYSPACE = TMP_DB_CASSANDRA_KEYSPACE;\n\n/**\n * The fetch size used for paging, i.e. how many rows will be returned at once.\n *\n * @deprecated Use ATTR_DB_CASSANDRA_PAGE_SIZE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_CASSANDRA_PAGE_SIZE = TMP_DB_CASSANDRA_PAGE_SIZE;\n\n/**\n * The consistency level of the query. Based on consistency values from [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html).\n *\n * @deprecated Use ATTR_DB_CASSANDRA_CONSISTENCY_LEVEL in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_CASSANDRA_CONSISTENCY_LEVEL =\n  TMP_DB_CASSANDRA_CONSISTENCY_LEVEL;\n\n/**\n * The name of the primary table that the operation is acting upon, including the schema name (if applicable).\n *\n * Note: This mirrors the db.sql.table attribute but references cassandra rather than sql. It is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if it is provided by the library being instrumented. If the operation is acting upon an anonymous table, or more than one table, this value MUST NOT be set.\n *\n * @deprecated Use ATTR_DB_CASSANDRA_TABLE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_CASSANDRA_TABLE = TMP_DB_CASSANDRA_TABLE;\n\n/**\n * Whether or not the query is idempotent.\n *\n * @deprecated Use ATTR_DB_CASSANDRA_IDEMPOTENCE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_CASSANDRA_IDEMPOTENCE = TMP_DB_CASSANDRA_IDEMPOTENCE;\n\n/**\n * The number of times a query was speculatively executed. Not set or `0` if the query was not executed speculatively.\n *\n * @deprecated Use ATTR_DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT =\n  TMP_DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT;\n\n/**\n * The ID of the coordinating node for a query.\n *\n * @deprecated Use ATTR_DB_CASSANDRA_COORDINATOR_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_CASSANDRA_COORDINATOR_ID =\n  TMP_DB_CASSANDRA_COORDINATOR_ID;\n\n/**\n * The data center of the coordinating node for a query.\n *\n * @deprecated Use ATTR_DB_CASSANDRA_COORDINATOR_DC in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_CASSANDRA_COORDINATOR_DC =\n  TMP_DB_CASSANDRA_COORDINATOR_DC;\n\n/**\n * The [HBase namespace](https://hbase.apache.org/book.html#_namespace) being accessed. To be used instead of the generic `db.name` attribute.\n *\n * @deprecated Use ATTR_DB_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_HBASE_NAMESPACE = TMP_DB_HBASE_NAMESPACE;\n\n/**\n * The index of the database being accessed as used in the [`SELECT` command](https://redis.io/commands/select), provided as an integer. To be used instead of the generic `db.name` attribute.\n *\n * @deprecated Use ATTR_DB_REDIS_DATABASE_INDEX in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_REDIS_DATABASE_INDEX = TMP_DB_REDIS_DATABASE_INDEX;\n\n/**\n * The collection being accessed within the database stated in `db.name`.\n *\n * @deprecated Use ATTR_DB_MONGODB_COLLECTION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_MONGODB_COLLECTION = TMP_DB_MONGODB_COLLECTION;\n\n/**\n * The name of the primary table that the operation is acting upon, including the schema name (if applicable).\n *\n * Note: It is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if it is provided by the library being instrumented. If the operation is acting upon an anonymous table, or more than one table, this value MUST NOT be set.\n *\n * @deprecated Use ATTR_DB_SQL_TABLE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_DB_SQL_TABLE = TMP_DB_SQL_TABLE;\n\n/**\n * 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.\n *\n * @deprecated Use ATTR_EXCEPTION_TYPE.\n */\nexport const SEMATTRS_EXCEPTION_TYPE = TMP_EXCEPTION_TYPE;\n\n/**\n * The exception message.\n *\n * @deprecated Use ATTR_EXCEPTION_MESSAGE.\n */\nexport const SEMATTRS_EXCEPTION_MESSAGE = TMP_EXCEPTION_MESSAGE;\n\n/**\n * 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.\n *\n * @deprecated Use ATTR_EXCEPTION_STACKTRACE.\n */\nexport const SEMATTRS_EXCEPTION_STACKTRACE = TMP_EXCEPTION_STACKTRACE;\n\n/**\n* 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.\n*\n* Note: An exception is considered to have escaped (or left) the scope of a span,\nif that span is ended while the exception is still logically &#34;in flight&#34;.\nThis may be actually &#34;in flight&#34; in some languages (e.g. if the exception\nis passed to a Context manager&#39;s `__exit__` method in Python) but will\nusually be caught at the point of recording the exception in most languages.\n\nIt is usually not possible to determine at the point where an exception is thrown\nwhether it will escape the scope of a span.\nHowever, it is trivial to know that an exception\nwill escape, if one checks for an active exception just before ending the span,\nas done in the [example above](#exception-end-example).\n\nIt follows that an exception may still escape the scope of the span\neven if the `exception.escaped` attribute was not set or set to false,\nsince the event might have been recorded at a time where it was not\nclear whether the exception will escape.\n*\n* @deprecated Use ATTR_EXCEPTION_ESCAPED.\n*/\nexport const SEMATTRS_EXCEPTION_ESCAPED = TMP_EXCEPTION_ESCAPED;\n\n/**\n * Type of the trigger on which the function is executed.\n *\n * @deprecated Use ATTR_FAAS_TRIGGER in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_FAAS_TRIGGER = TMP_FAAS_TRIGGER;\n\n/**\n * The execution ID of the current function execution.\n *\n * @deprecated Use ATTR_FAAS_INVOCATION_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_FAAS_EXECUTION = TMP_FAAS_EXECUTION;\n\n/**\n * The name of the source on which the triggering operation was performed. For example, in Cloud Storage or S3 corresponds to the bucket name, and in Cosmos DB to the database name.\n *\n * @deprecated Use ATTR_FAAS_DOCUMENT_COLLECTION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_FAAS_DOCUMENT_COLLECTION = TMP_FAAS_DOCUMENT_COLLECTION;\n\n/**\n * Describes the type of the operation that was performed on the data.\n *\n * @deprecated Use ATTR_FAAS_DOCUMENT_OPERATION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_FAAS_DOCUMENT_OPERATION = TMP_FAAS_DOCUMENT_OPERATION;\n\n/**\n * A string containing the time when the data was accessed in the [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).\n *\n * @deprecated Use ATTR_FAAS_DOCUMENT_TIME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_FAAS_DOCUMENT_TIME = TMP_FAAS_DOCUMENT_TIME;\n\n/**\n * The document name/table subjected to the operation. For example, in Cloud Storage or S3 is the name of the file, and in Cosmos DB the table name.\n *\n * @deprecated Use ATTR_FAAS_DOCUMENT_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_FAAS_DOCUMENT_NAME = TMP_FAAS_DOCUMENT_NAME;\n\n/**\n * A string containing the function invocation time in the [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).\n *\n * @deprecated Use ATTR_FAAS_TIME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_FAAS_TIME = TMP_FAAS_TIME;\n\n/**\n * A string containing the schedule period as [Cron Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm).\n *\n * @deprecated Use ATTR_FAAS_CRON in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_FAAS_CRON = TMP_FAAS_CRON;\n\n/**\n * A boolean that is true if the serverless function is executed for the first time (aka cold-start).\n *\n * @deprecated Use ATTR_FAAS_COLDSTART in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_FAAS_COLDSTART = TMP_FAAS_COLDSTART;\n\n/**\n * The name of the invoked function.\n *\n * Note: SHOULD be equal to the `faas.name` resource attribute of the invoked function.\n *\n * @deprecated Use ATTR_FAAS_INVOKED_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_FAAS_INVOKED_NAME = TMP_FAAS_INVOKED_NAME;\n\n/**\n * The cloud provider of the invoked function.\n *\n * Note: SHOULD be equal to the `cloud.provider` resource attribute of the invoked function.\n *\n * @deprecated Use ATTR_FAAS_INVOKED_PROVIDER in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_FAAS_INVOKED_PROVIDER = TMP_FAAS_INVOKED_PROVIDER;\n\n/**\n * The cloud region of the invoked function.\n *\n * Note: SHOULD be equal to the `cloud.region` resource attribute of the invoked function.\n *\n * @deprecated Use ATTR_FAAS_INVOKED_REGION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_FAAS_INVOKED_REGION = TMP_FAAS_INVOKED_REGION;\n\n/**\n * Transport protocol used. See note below.\n *\n * @deprecated Use ATTR_NET_TRANSPORT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_NET_TRANSPORT = TMP_NET_TRANSPORT;\n\n/**\n * Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6).\n *\n * @deprecated Use ATTR_NET_PEER_IP in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_NET_PEER_IP = TMP_NET_PEER_IP;\n\n/**\n * Remote port number.\n *\n * @deprecated Use ATTR_NET_PEER_PORT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_NET_PEER_PORT = TMP_NET_PEER_PORT;\n\n/**\n * Remote hostname or similar, see note below.\n *\n * @deprecated Use ATTR_NET_PEER_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_NET_PEER_NAME = TMP_NET_PEER_NAME;\n\n/**\n * Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.\n *\n * @deprecated Use ATTR_NET_HOST_IP in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_NET_HOST_IP = TMP_NET_HOST_IP;\n\n/**\n * Like `net.peer.port` but for the host port.\n *\n * @deprecated Use ATTR_NET_HOST_PORT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_NET_HOST_PORT = TMP_NET_HOST_PORT;\n\n/**\n * Local hostname or similar, see note below.\n *\n * @deprecated Use ATTR_NET_HOST_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_NET_HOST_NAME = TMP_NET_HOST_NAME;\n\n/**\n * The internet connection type currently being used by the host.\n *\n * @deprecated Use ATTR_NETWORK_CONNECTION_TYPE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_NET_HOST_CONNECTION_TYPE = TMP_NET_HOST_CONNECTION_TYPE;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use ATTR_NETWORK_CONNECTION_SUBTYPE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_NET_HOST_CONNECTION_SUBTYPE =\n  TMP_NET_HOST_CONNECTION_SUBTYPE;\n\n/**\n * The name of the mobile carrier.\n *\n * @deprecated Use ATTR_NETWORK_CARRIER_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_NET_HOST_CARRIER_NAME = TMP_NET_HOST_CARRIER_NAME;\n\n/**\n * The mobile carrier country code.\n *\n * @deprecated Use ATTR_NETWORK_CARRIER_MCC in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_NET_HOST_CARRIER_MCC = TMP_NET_HOST_CARRIER_MCC;\n\n/**\n * The mobile carrier network code.\n *\n * @deprecated Use ATTR_NETWORK_CARRIER_MNC in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_NET_HOST_CARRIER_MNC = TMP_NET_HOST_CARRIER_MNC;\n\n/**\n * The ISO 3166-1 alpha-2 2-character country code associated with the mobile carrier network.\n *\n * @deprecated Use ATTR_NETWORK_CARRIER_ICC in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_NET_HOST_CARRIER_ICC = TMP_NET_HOST_CARRIER_ICC;\n\n/**\n * The [`service.name`](../../resource/semantic_conventions/README.md#service) of the remote service. SHOULD be equal to the actual `service.name` resource attribute of the remote service if any.\n *\n * @deprecated Use ATTR_PEER_SERVICE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_PEER_SERVICE = TMP_PEER_SERVICE;\n\n/**\n * Username or client_id extracted from the access token or [Authorization](https://tools.ietf.org/html/rfc7235#section-4.2) header in the inbound request from outside the system.\n *\n * @deprecated Use ATTR_ENDUSER_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_ENDUSER_ID = TMP_ENDUSER_ID;\n\n/**\n * Actual/assumed role the client is making the request under extracted from token or application security context.\n *\n * @deprecated Use ATTR_ENDUSER_ROLE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_ENDUSER_ROLE = TMP_ENDUSER_ROLE;\n\n/**\n * Scopes or granted authorities the client currently possesses extracted from token or application security context. The value would come from the scope associated with an [OAuth 2.0 Access Token](https://tools.ietf.org/html/rfc6749#section-3.3) or an attribute value in a [SAML 2.0 Assertion](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html).\n *\n * @deprecated Use ATTR_ENDUSER_SCOPE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_ENDUSER_SCOPE = TMP_ENDUSER_SCOPE;\n\n/**\n * Current &#34;managed&#34; thread ID (as opposed to OS thread ID).\n *\n * @deprecated Use ATTR_THREAD_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_THREAD_ID = TMP_THREAD_ID;\n\n/**\n * Current thread name.\n *\n * @deprecated Use ATTR_THREAD_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_THREAD_NAME = TMP_THREAD_NAME;\n\n/**\n * The method or function name, or equivalent (usually rightmost part of the code unit&#39;s name).\n *\n * @deprecated Use ATTR_CODE_FUNCTION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_CODE_FUNCTION = TMP_CODE_FUNCTION;\n\n/**\n * The &#34;namespace&#34; 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.\n *\n * @deprecated Use ATTR_CODE_NAMESPACE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_CODE_NAMESPACE = TMP_CODE_NAMESPACE;\n\n/**\n * The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path).\n *\n * @deprecated Use ATTR_CODE_FILEPATH in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_CODE_FILEPATH = TMP_CODE_FILEPATH;\n\n/**\n * The line number in `code.filepath` best representing the operation. It SHOULD point within the code unit named in `code.function`.\n *\n * @deprecated Use ATTR_CODE_LINENO in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_CODE_LINENO = TMP_CODE_LINENO;\n\n/**\n * HTTP request method.\n *\n * @deprecated Use ATTR_HTTP_METHOD in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_HTTP_METHOD = TMP_HTTP_METHOD;\n\n/**\n * Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not transmitted over HTTP, but if it is known, it should be included nevertheless.\n *\n * Note: `http.url` MUST NOT contain credentials passed via URL in form of `https://username:password@www.example.com/`. In such case the attribute&#39;s value should be `https://www.example.com/`.\n *\n * @deprecated Use ATTR_HTTP_URL in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_HTTP_URL = TMP_HTTP_URL;\n\n/**\n * The full request target as passed in a HTTP request line or equivalent.\n *\n * @deprecated Use ATTR_HTTP_TARGET in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_HTTP_TARGET = TMP_HTTP_TARGET;\n\n/**\n * The value of the [HTTP host header](https://tools.ietf.org/html/rfc7230#section-5.4). An empty Host header should also be reported, see note.\n *\n * Note: When the header is present but empty the attribute SHOULD be set to the empty string. Note that this is a valid situation that is expected in certain cases, according the aforementioned [section of RFC 7230](https://tools.ietf.org/html/rfc7230#section-5.4). When the header is not set the attribute MUST NOT be set.\n *\n * @deprecated Use ATTR_HTTP_HOST in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_HTTP_HOST = TMP_HTTP_HOST;\n\n/**\n * The URI scheme identifying the used protocol.\n *\n * @deprecated Use ATTR_HTTP_SCHEME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_HTTP_SCHEME = TMP_HTTP_SCHEME;\n\n/**\n * [HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).\n *\n * @deprecated Use ATTR_HTTP_STATUS_CODE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_HTTP_STATUS_CODE = TMP_HTTP_STATUS_CODE;\n\n/**\n * Kind of HTTP protocol used.\n *\n * Note: If `net.transport` is not specified, it can be assumed to be `IP.TCP` except if `http.flavor` is `QUIC`, in which case `IP.UDP` is assumed.\n *\n * @deprecated Use ATTR_HTTP_FLAVOR in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_HTTP_FLAVOR = TMP_HTTP_FLAVOR;\n\n/**\n * Value of the [HTTP User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.\n *\n * @deprecated Use ATTR_HTTP_USER_AGENT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_HTTP_USER_AGENT = TMP_HTTP_USER_AGENT;\n\n/**\n * The size of the request payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the [Content-Length](https://tools.ietf.org/html/rfc7230#section-3.3.2) header. For requests using transport encoding, this should be the compressed size.\n *\n * @deprecated Use ATTR_HTTP_REQUEST_CONTENT_LENGTH in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH =\n  TMP_HTTP_REQUEST_CONTENT_LENGTH;\n\n/**\n * The size of the uncompressed request payload body after transport decoding. Not set if transport encoding not used.\n *\n * @deprecated Use ATTR_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED =\n  TMP_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED;\n\n/**\n * The size of the response payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the [Content-Length](https://tools.ietf.org/html/rfc7230#section-3.3.2) header. For requests using transport encoding, this should be the compressed size.\n *\n * @deprecated Use ATTR_HTTP_RESPONSE_CONTENT_LENGTH in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH =\n  TMP_HTTP_RESPONSE_CONTENT_LENGTH;\n\n/**\n * The size of the uncompressed response payload body after transport decoding. Not set if transport encoding not used.\n *\n * @deprecated Use ATTR_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED =\n  TMP_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED;\n\n/**\n * The primary server name of the matched virtual host. This should be obtained via configuration. If no such configuration can be obtained, this attribute MUST NOT be set ( `net.host.name` should be used instead).\n *\n * Note: `http.url` is usually not readily available on the server side but would have to be assembled in a cumbersome and sometimes lossy process from other information (see e.g. open-telemetry/opentelemetry-python/pull/148). It is thus preferred to supply the raw data that is available.\n *\n * @deprecated Use ATTR_HTTP_SERVER_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_HTTP_SERVER_NAME = TMP_HTTP_SERVER_NAME;\n\n/**\n * The matched route (path template).\n *\n * @deprecated Use ATTR_HTTP_ROUTE.\n */\nexport const SEMATTRS_HTTP_ROUTE = TMP_HTTP_ROUTE;\n\n/**\n* The IP address of the original client behind all proxies, if known (e.g. from [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For)).\n*\n* Note: This is not necessarily the same as `net.peer.ip`, which would\nidentify the network-level peer, which may be a proxy.\n\nThis attribute should be set when a source of information different\nfrom the one used for `net.peer.ip`, is available even if that other\nsource just confirms the same value as `net.peer.ip`.\nRationale: For `net.peer.ip`, one typically does not know if it\ncomes from a proxy, reverse proxy, or the actual client. Setting\n`http.client_ip` when it&#39;s the same as `net.peer.ip` means that\none is at least somewhat confident that the address is not that of\nthe closest proxy.\n*\n* @deprecated Use ATTR_HTTP_CLIENT_IP in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n*/\nexport const SEMATTRS_HTTP_CLIENT_IP = TMP_HTTP_CLIENT_IP;\n\n/**\n * The keys in the `RequestItems` object field.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_TABLE_NAMES in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_TABLE_NAMES = TMP_AWS_DYNAMODB_TABLE_NAMES;\n\n/**\n * The JSON-serialized value of each item in the `ConsumedCapacity` response field.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_CONSUMED_CAPACITY in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_CONSUMED_CAPACITY =\n  TMP_AWS_DYNAMODB_CONSUMED_CAPACITY;\n\n/**\n * The JSON-serialized value of the `ItemCollectionMetrics` response field.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_ITEM_COLLECTION_METRICS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_ITEM_COLLECTION_METRICS =\n  TMP_AWS_DYNAMODB_ITEM_COLLECTION_METRICS;\n\n/**\n * The value of the `ProvisionedThroughput.ReadCapacityUnits` request parameter.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY =\n  TMP_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY;\n\n/**\n * The value of the `ProvisionedThroughput.WriteCapacityUnits` request parameter.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY =\n  TMP_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY;\n\n/**\n * The value of the `ConsistentRead` request parameter.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_CONSISTENT_READ in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_CONSISTENT_READ =\n  TMP_AWS_DYNAMODB_CONSISTENT_READ;\n\n/**\n * The value of the `ProjectionExpression` request parameter.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_PROJECTION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_PROJECTION = TMP_AWS_DYNAMODB_PROJECTION;\n\n/**\n * The value of the `Limit` request parameter.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_LIMIT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_LIMIT = TMP_AWS_DYNAMODB_LIMIT;\n\n/**\n * The value of the `AttributesToGet` request parameter.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_ATTRIBUTES_TO_GET in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_ATTRIBUTES_TO_GET =\n  TMP_AWS_DYNAMODB_ATTRIBUTES_TO_GET;\n\n/**\n * The value of the `IndexName` request parameter.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_INDEX_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_INDEX_NAME = TMP_AWS_DYNAMODB_INDEX_NAME;\n\n/**\n * The value of the `Select` request parameter.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_SELECT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_SELECT = TMP_AWS_DYNAMODB_SELECT;\n\n/**\n * The JSON-serialized value of each item of the `GlobalSecondaryIndexes` request field.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES =\n  TMP_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES;\n\n/**\n * The JSON-serialized value of each item of the `LocalSecondaryIndexes` request field.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES =\n  TMP_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES;\n\n/**\n * The value of the `ExclusiveStartTableName` request parameter.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_EXCLUSIVE_START_TABLE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_EXCLUSIVE_START_TABLE =\n  TMP_AWS_DYNAMODB_EXCLUSIVE_START_TABLE;\n\n/**\n * The the number of items in the `TableNames` response parameter.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_TABLE_COUNT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_TABLE_COUNT = TMP_AWS_DYNAMODB_TABLE_COUNT;\n\n/**\n * The value of the `ScanIndexForward` request parameter.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_SCAN_FORWARD in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_SCAN_FORWARD = TMP_AWS_DYNAMODB_SCAN_FORWARD;\n\n/**\n * The value of the `Segment` request parameter.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_SEGMENT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_SEGMENT = TMP_AWS_DYNAMODB_SEGMENT;\n\n/**\n * The value of the `TotalSegments` request parameter.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_TOTAL_SEGMENTS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_TOTAL_SEGMENTS =\n  TMP_AWS_DYNAMODB_TOTAL_SEGMENTS;\n\n/**\n * The value of the `Count` response parameter.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_COUNT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_COUNT = TMP_AWS_DYNAMODB_COUNT;\n\n/**\n * The value of the `ScannedCount` response parameter.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_SCANNED_COUNT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_SCANNED_COUNT =\n  TMP_AWS_DYNAMODB_SCANNED_COUNT;\n\n/**\n * The JSON-serialized value of each item in the `AttributeDefinitions` request field.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS =\n  TMP_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS;\n\n/**\n * The JSON-serialized value of each item in the the `GlobalSecondaryIndexUpdates` request field.\n *\n * @deprecated Use ATTR_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES =\n  TMP_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES;\n\n/**\n * A string identifying the messaging system.\n *\n * @deprecated Use ATTR_MESSAGING_SYSTEM in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_MESSAGING_SYSTEM = TMP_MESSAGING_SYSTEM;\n\n/**\n * The message destination name. This might be equal to the span name but is required nevertheless.\n *\n * @deprecated Use ATTR_MESSAGING_DESTINATION_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_MESSAGING_DESTINATION = TMP_MESSAGING_DESTINATION;\n\n/**\n * The kind of message destination.\n *\n * @deprecated Removed in semconv v1.20.0.\n */\nexport const SEMATTRS_MESSAGING_DESTINATION_KIND =\n  TMP_MESSAGING_DESTINATION_KIND;\n\n/**\n * A boolean that is true if the message destination is temporary.\n *\n * @deprecated Use ATTR_MESSAGING_DESTINATION_TEMPORARY in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_MESSAGING_TEMP_DESTINATION =\n  TMP_MESSAGING_TEMP_DESTINATION;\n\n/**\n * The name of the transport protocol.\n *\n * @deprecated Use ATTR_NETWORK_PROTOCOL_NAME.\n */\nexport const SEMATTRS_MESSAGING_PROTOCOL = TMP_MESSAGING_PROTOCOL;\n\n/**\n * The version of the transport protocol.\n *\n * @deprecated Use ATTR_NETWORK_PROTOCOL_VERSION.\n */\nexport const SEMATTRS_MESSAGING_PROTOCOL_VERSION =\n  TMP_MESSAGING_PROTOCOL_VERSION;\n\n/**\n * Connection string.\n *\n * @deprecated Removed in semconv v1.17.0.\n */\nexport const SEMATTRS_MESSAGING_URL = TMP_MESSAGING_URL;\n\n/**\n * A value used by the messaging system as an identifier for the message, represented as a string.\n *\n * @deprecated Use ATTR_MESSAGING_MESSAGE_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_MESSAGING_MESSAGE_ID = TMP_MESSAGING_MESSAGE_ID;\n\n/**\n * The [conversation ID](#conversations) identifying the conversation to which the message belongs, represented as a string. Sometimes called &#34;Correlation ID&#34;.\n *\n * @deprecated Use ATTR_MESSAGING_MESSAGE_CONVERSATION_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_MESSAGING_CONVERSATION_ID = TMP_MESSAGING_CONVERSATION_ID;\n\n/**\n * The (uncompressed) size of the message payload in bytes. Also use this attribute if it is unknown whether the compressed or uncompressed payload size is reported.\n *\n * @deprecated Use ATTR_MESSAGING_MESSAGE_BODY_SIZE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES =\n  TMP_MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES;\n\n/**\n * The compressed size of the message payload in bytes.\n *\n * @deprecated Removed in semconv v1.22.0.\n */\nexport const SEMATTRS_MESSAGING_MESSAGE_PAYLOAD_COMPRESSED_SIZE_BYTES =\n  TMP_MESSAGING_MESSAGE_PAYLOAD_COMPRESSED_SIZE_BYTES;\n\n/**\n * A string identifying the kind of message consumption as defined in the [Operation names](#operation-names) section above. If the operation is &#34;send&#34;, this attribute MUST NOT be set, since the operation can be inferred from the span kind in that case.\n *\n * @deprecated Use ATTR_MESSAGING_OPERATION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_MESSAGING_OPERATION = TMP_MESSAGING_OPERATION;\n\n/**\n * The identifier for the consumer receiving a message. For Kafka, set it to `{messaging.kafka.consumer_group} - {messaging.kafka.client_id}`, if both are present, or only `messaging.kafka.consumer_group`. For brokers, such as RabbitMQ and Artemis, set it to the `client_id` of the client consuming the message.\n *\n * @deprecated Removed in semconv v1.21.0.\n */\nexport const SEMATTRS_MESSAGING_CONSUMER_ID = TMP_MESSAGING_CONSUMER_ID;\n\n/**\n * RabbitMQ message routing key.\n *\n * @deprecated Use ATTR_MESSAGING_RABBITMQ_DESTINATION_ROUTING_KEY in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_MESSAGING_RABBITMQ_ROUTING_KEY =\n  TMP_MESSAGING_RABBITMQ_ROUTING_KEY;\n\n/**\n * Message keys in Kafka are used for grouping alike messages to ensure they&#39;re processed on the same partition. They differ from `messaging.message_id` in that they&#39;re not unique. If the key is `null`, the attribute MUST NOT be set.\n *\n * Note: If the key type is not string, it&#39;s string representation has to be supplied for the attribute. If the key has no unambiguous, canonical string form, don&#39;t include its value.\n *\n * @deprecated Use ATTR_MESSAGING_KAFKA_MESSAGE_KEY in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_MESSAGING_KAFKA_MESSAGE_KEY =\n  TMP_MESSAGING_KAFKA_MESSAGE_KEY;\n\n/**\n * Name of the Kafka Consumer Group that is handling the message. Only applies to consumers, not producers.\n *\n * @deprecated Use ATTR_MESSAGING_KAFKA_CONSUMER_GROUP in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_MESSAGING_KAFKA_CONSUMER_GROUP =\n  TMP_MESSAGING_KAFKA_CONSUMER_GROUP;\n\n/**\n * Client Id for the Consumer or Producer that is handling the message.\n *\n * @deprecated Use ATTR_MESSAGING_CLIENT_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_MESSAGING_KAFKA_CLIENT_ID = TMP_MESSAGING_KAFKA_CLIENT_ID;\n\n/**\n * Partition the message is sent to.\n *\n * @deprecated Use ATTR_MESSAGING_KAFKA_DESTINATION_PARTITION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_MESSAGING_KAFKA_PARTITION = TMP_MESSAGING_KAFKA_PARTITION;\n\n/**\n * A boolean that is true if the message is a tombstone.\n *\n * @deprecated Use ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_MESSAGING_KAFKA_TOMBSTONE = TMP_MESSAGING_KAFKA_TOMBSTONE;\n\n/**\n * A string identifying the remoting system.\n *\n * @deprecated Use ATTR_RPC_SYSTEM in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_RPC_SYSTEM = TMP_RPC_SYSTEM;\n\n/**\n * The full (logical) name of the service being called, including its package name, if applicable.\n *\n * Note: This is the logical name of the service from the RPC interface perspective, which can be different from the name of any implementing class. The `code.namespace` attribute may be used to store the latter (despite the attribute name, it may include a class name; e.g., class with method actually executing the call on the server side, RPC client stub class on the client side).\n *\n * @deprecated Use ATTR_RPC_SERVICE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_RPC_SERVICE = TMP_RPC_SERVICE;\n\n/**\n * The name of the (logical) method being called, must be equal to the $method part in the span name.\n *\n * Note: This is the logical name of the method from the RPC interface perspective, which can be different from the name of any implementing method/function. The `code.function` attribute may be used to store the latter (e.g., method actually executing the call on the server side, RPC client stub method on the client side).\n *\n * @deprecated Use ATTR_RPC_METHOD in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_RPC_METHOD = TMP_RPC_METHOD;\n\n/**\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n *\n * @deprecated Use ATTR_RPC_GRPC_STATUS_CODE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_RPC_GRPC_STATUS_CODE = TMP_RPC_GRPC_STATUS_CODE;\n\n/**\n * Protocol version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0 does not specify this, the value can be omitted.\n *\n * @deprecated Use ATTR_RPC_JSONRPC_VERSION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_RPC_JSONRPC_VERSION = TMP_RPC_JSONRPC_VERSION;\n\n/**\n * `id` property of request or response. Since protocol allows id to be int, string, `null` or missing (for notifications), value is expected to be cast to string for simplicity. Use empty string in case of `null` value. Omit entirely if this is a notification.\n *\n * @deprecated Use ATTR_RPC_JSONRPC_REQUEST_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_RPC_JSONRPC_REQUEST_ID = TMP_RPC_JSONRPC_REQUEST_ID;\n\n/**\n * `error.code` property of response if it is an error response.\n *\n * @deprecated Use ATTR_RPC_JSONRPC_ERROR_CODE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_RPC_JSONRPC_ERROR_CODE = TMP_RPC_JSONRPC_ERROR_CODE;\n\n/**\n * `error.message` property of response if it is an error response.\n *\n * @deprecated Use ATTR_RPC_JSONRPC_ERROR_MESSAGE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_RPC_JSONRPC_ERROR_MESSAGE = TMP_RPC_JSONRPC_ERROR_MESSAGE;\n\n/**\n * Whether this is a received or sent message.\n *\n * @deprecated Use ATTR_MESSAGE_TYPE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_MESSAGE_TYPE = TMP_MESSAGE_TYPE;\n\n/**\n * MUST be calculated as two different counters starting from `1` one for sent messages and one for received message.\n *\n * Note: This way we guarantee that the values will be consistent between different implementations.\n *\n * @deprecated Use ATTR_MESSAGE_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_MESSAGE_ID = TMP_MESSAGE_ID;\n\n/**\n * Compressed size of the message in bytes.\n *\n * @deprecated Use ATTR_MESSAGE_COMPRESSED_SIZE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_MESSAGE_COMPRESSED_SIZE = TMP_MESSAGE_COMPRESSED_SIZE;\n\n/**\n * Uncompressed size of the message in bytes.\n *\n * @deprecated Use ATTR_MESSAGE_UNCOMPRESSED_SIZE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMATTRS_MESSAGE_UNCOMPRESSED_SIZE = TMP_MESSAGE_UNCOMPRESSED_SIZE;\n\n/**\n * Definition of available values for SemanticAttributes\n * This type is used for backward compatibility, you should use the individual exported\n * constants SemanticAttributes_XXXXX rather than the exported constant map. As any single reference\n * to a constant map value will result in all strings being included into your bundle.\n * @deprecated Use the SEMATTRS_XXXXX constants rather than the SemanticAttributes.XXXXX for bundle minification.\n */\nexport type SemanticAttributes = {\n  /**\n   * The full invoked ARN as provided on the `Context` passed to the function (`Lambda-Runtime-Invoked-Function-Arn` header on the `/runtime/invocation/next` applicable).\n   *\n   * Note: This may be different from `faas.id` if an alias is involved.\n   */\n  AWS_LAMBDA_INVOKED_ARN: 'aws.lambda.invoked_arn';\n\n  /**\n   * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n   */\n  DB_SYSTEM: 'db.system';\n\n  /**\n   * The connection string used to connect to the database. It is recommended to remove embedded credentials.\n   */\n  DB_CONNECTION_STRING: 'db.connection_string';\n\n  /**\n   * Username for accessing the database.\n   */\n  DB_USER: 'db.user';\n\n  /**\n   * The fully-qualified class name of the [Java Database Connectivity (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to connect.\n   */\n  DB_JDBC_DRIVER_CLASSNAME: 'db.jdbc.driver_classname';\n\n  /**\n   * If no [tech-specific attribute](#call-level-attributes-for-specific-technologies) is defined, this attribute is used to report the name of the database being accessed. For commands that switch the database, this should be set to the target database (even if the command fails).\n   *\n   * Note: In some SQL databases, the database name to be used is called &#34;schema name&#34;.\n   */\n  DB_NAME: 'db.name';\n\n  /**\n   * The database statement being executed.\n   *\n   * Note: The value may be sanitized to exclude sensitive information.\n   */\n  DB_STATEMENT: 'db.statement';\n\n  /**\n   * The name of the operation being executed, e.g. the [MongoDB command name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as `findAndModify`, or the SQL keyword.\n   *\n   * Note: When setting this to an SQL keyword, it is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if the operation name is provided by the library being instrumented. If the SQL statement has an ambiguous operation, or performs more than one operation, this value may be omitted.\n   */\n  DB_OPERATION: 'db.operation';\n\n  /**\n   * The Microsoft SQL Server [instance name](https://docs.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15) connecting to. This name is used to determine the port of a named instance.\n   *\n   * Note: If setting a `db.mssql.instance_name`, `net.peer.port` is no longer required (but still recommended if non-standard).\n   */\n  DB_MSSQL_INSTANCE_NAME: 'db.mssql.instance_name';\n\n  /**\n   * The name of the keyspace being accessed. To be used instead of the generic `db.name` attribute.\n   */\n  DB_CASSANDRA_KEYSPACE: 'db.cassandra.keyspace';\n\n  /**\n   * The fetch size used for paging, i.e. how many rows will be returned at once.\n   */\n  DB_CASSANDRA_PAGE_SIZE: 'db.cassandra.page_size';\n\n  /**\n   * The consistency level of the query. Based on consistency values from [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html).\n   */\n  DB_CASSANDRA_CONSISTENCY_LEVEL: 'db.cassandra.consistency_level';\n\n  /**\n   * The name of the primary table that the operation is acting upon, including the schema name (if applicable).\n   *\n   * Note: This mirrors the db.sql.table attribute but references cassandra rather than sql. It is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if it is provided by the library being instrumented. If the operation is acting upon an anonymous table, or more than one table, this value MUST NOT be set.\n   */\n  DB_CASSANDRA_TABLE: 'db.cassandra.table';\n\n  /**\n   * Whether or not the query is idempotent.\n   */\n  DB_CASSANDRA_IDEMPOTENCE: 'db.cassandra.idempotence';\n\n  /**\n   * The number of times a query was speculatively executed. Not set or `0` if the query was not executed speculatively.\n   */\n  DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT: 'db.cassandra.speculative_execution_count';\n\n  /**\n   * The ID of the coordinating node for a query.\n   */\n  DB_CASSANDRA_COORDINATOR_ID: 'db.cassandra.coordinator.id';\n\n  /**\n   * The data center of the coordinating node for a query.\n   */\n  DB_CASSANDRA_COORDINATOR_DC: 'db.cassandra.coordinator.dc';\n\n  /**\n   * The [HBase namespace](https://hbase.apache.org/book.html#_namespace) being accessed. To be used instead of the generic `db.name` attribute.\n   */\n  DB_HBASE_NAMESPACE: 'db.hbase.namespace';\n\n  /**\n   * The index of the database being accessed as used in the [`SELECT` command](https://redis.io/commands/select), provided as an integer. To be used instead of the generic `db.name` attribute.\n   */\n  DB_REDIS_DATABASE_INDEX: 'db.redis.database_index';\n\n  /**\n   * The collection being accessed within the database stated in `db.name`.\n   */\n  DB_MONGODB_COLLECTION: 'db.mongodb.collection';\n\n  /**\n   * The name of the primary table that the operation is acting upon, including the schema name (if applicable).\n   *\n   * Note: It is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if it is provided by the library being instrumented. If the operation is acting upon an anonymous table, or more than one table, this value MUST NOT be set.\n   */\n  DB_SQL_TABLE: 'db.sql.table';\n\n  /**\n   * 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.\n   */\n  EXCEPTION_TYPE: 'exception.type';\n\n  /**\n   * The exception message.\n   */\n  EXCEPTION_MESSAGE: 'exception.message';\n\n  /**\n   * 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.\n   */\n  EXCEPTION_STACKTRACE: 'exception.stacktrace';\n\n  /**\n  * 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.\n  *\n  * Note: An exception is considered to have escaped (or left) the scope of a span,\nif that span is ended while the exception is still logically &#34;in flight&#34;.\nThis may be actually &#34;in flight&#34; in some languages (e.g. if the exception\nis passed to a Context manager&#39;s `__exit__` method in Python) but will\nusually be caught at the point of recording the exception in most languages.\n\nIt is usually not possible to determine at the point where an exception is thrown\nwhether it will escape the scope of a span.\nHowever, it is trivial to know that an exception\nwill escape, if one checks for an active exception just before ending the span,\nas done in the [example above](#exception-end-example).\n\nIt follows that an exception may still escape the scope of the span\neven if the `exception.escaped` attribute was not set or set to false,\nsince the event might have been recorded at a time where it was not\nclear whether the exception will escape.\n  */\n  EXCEPTION_ESCAPED: 'exception.escaped';\n\n  /**\n   * Type of the trigger on which the function is executed.\n   */\n  FAAS_TRIGGER: 'faas.trigger';\n\n  /**\n   * The execution ID of the current function execution.\n   */\n  FAAS_EXECUTION: 'faas.execution';\n\n  /**\n   * The name of the source on which the triggering operation was performed. For example, in Cloud Storage or S3 corresponds to the bucket name, and in Cosmos DB to the database name.\n   */\n  FAAS_DOCUMENT_COLLECTION: 'faas.document.collection';\n\n  /**\n   * Describes the type of the operation that was performed on the data.\n   */\n  FAAS_DOCUMENT_OPERATION: 'faas.document.operation';\n\n  /**\n   * A string containing the time when the data was accessed in the [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).\n   */\n  FAAS_DOCUMENT_TIME: 'faas.document.time';\n\n  /**\n   * The document name/table subjected to the operation. For example, in Cloud Storage or S3 is the name of the file, and in Cosmos DB the table name.\n   */\n  FAAS_DOCUMENT_NAME: 'faas.document.name';\n\n  /**\n   * A string containing the function invocation time in the [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).\n   */\n  FAAS_TIME: 'faas.time';\n\n  /**\n   * A string containing the schedule period as [Cron Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm).\n   */\n  FAAS_CRON: 'faas.cron';\n\n  /**\n   * A boolean that is true if the serverless function is executed for the first time (aka cold-start).\n   */\n  FAAS_COLDSTART: 'faas.coldstart';\n\n  /**\n   * The name of the invoked function.\n   *\n   * Note: SHOULD be equal to the `faas.name` resource attribute of the invoked function.\n   */\n  FAAS_INVOKED_NAME: 'faas.invoked_name';\n\n  /**\n   * The cloud provider of the invoked function.\n   *\n   * Note: SHOULD be equal to the `cloud.provider` resource attribute of the invoked function.\n   */\n  FAAS_INVOKED_PROVIDER: 'faas.invoked_provider';\n\n  /**\n   * The cloud region of the invoked function.\n   *\n   * Note: SHOULD be equal to the `cloud.region` resource attribute of the invoked function.\n   */\n  FAAS_INVOKED_REGION: 'faas.invoked_region';\n\n  /**\n   * Transport protocol used. See note below.\n   */\n  NET_TRANSPORT: 'net.transport';\n\n  /**\n   * Remote address of the peer (dotted decimal for IPv4 or [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6).\n   */\n  NET_PEER_IP: 'net.peer.ip';\n\n  /**\n   * Remote port number.\n   */\n  NET_PEER_PORT: 'net.peer.port';\n\n  /**\n   * Remote hostname or similar, see note below.\n   */\n  NET_PEER_NAME: 'net.peer.name';\n\n  /**\n   * Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.\n   */\n  NET_HOST_IP: 'net.host.ip';\n\n  /**\n   * Like `net.peer.port` but for the host port.\n   */\n  NET_HOST_PORT: 'net.host.port';\n\n  /**\n   * Local hostname or similar, see note below.\n   */\n  NET_HOST_NAME: 'net.host.name';\n\n  /**\n   * The internet connection type currently being used by the host.\n   */\n  NET_HOST_CONNECTION_TYPE: 'net.host.connection.type';\n\n  /**\n   * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n   */\n  NET_HOST_CONNECTION_SUBTYPE: 'net.host.connection.subtype';\n\n  /**\n   * The name of the mobile carrier.\n   */\n  NET_HOST_CARRIER_NAME: 'net.host.carrier.name';\n\n  /**\n   * The mobile carrier country code.\n   */\n  NET_HOST_CARRIER_MCC: 'net.host.carrier.mcc';\n\n  /**\n   * The mobile carrier network code.\n   */\n  NET_HOST_CARRIER_MNC: 'net.host.carrier.mnc';\n\n  /**\n   * The ISO 3166-1 alpha-2 2-character country code associated with the mobile carrier network.\n   */\n  NET_HOST_CARRIER_ICC: 'net.host.carrier.icc';\n\n  /**\n   * The [`service.name`](../../resource/semantic_conventions/README.md#service) of the remote service. SHOULD be equal to the actual `service.name` resource attribute of the remote service if any.\n   */\n  PEER_SERVICE: 'peer.service';\n\n  /**\n   * Username or client_id extracted from the access token or [Authorization](https://tools.ietf.org/html/rfc7235#section-4.2) header in the inbound request from outside the system.\n   */\n  ENDUSER_ID: 'enduser.id';\n\n  /**\n   * Actual/assumed role the client is making the request under extracted from token or application security context.\n   */\n  ENDUSER_ROLE: 'enduser.role';\n\n  /**\n   * Scopes or granted authorities the client currently possesses extracted from token or application security context. The value would come from the scope associated with an [OAuth 2.0 Access Token](https://tools.ietf.org/html/rfc6749#section-3.3) or an attribute value in a [SAML 2.0 Assertion](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html).\n   */\n  ENDUSER_SCOPE: 'enduser.scope';\n\n  /**\n   * Current &#34;managed&#34; thread ID (as opposed to OS thread ID).\n   */\n  THREAD_ID: 'thread.id';\n\n  /**\n   * Current thread name.\n   */\n  THREAD_NAME: 'thread.name';\n\n  /**\n   * The method or function name, or equivalent (usually rightmost part of the code unit&#39;s name).\n   */\n  CODE_FUNCTION: 'code.function';\n\n  /**\n   * The &#34;namespace&#34; 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.\n   */\n  CODE_NAMESPACE: 'code.namespace';\n\n  /**\n   * The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path).\n   */\n  CODE_FILEPATH: 'code.filepath';\n\n  /**\n   * The line number in `code.filepath` best representing the operation. It SHOULD point within the code unit named in `code.function`.\n   */\n  CODE_LINENO: 'code.lineno';\n\n  /**\n   * HTTP request method.\n   */\n  HTTP_METHOD: 'http.method';\n\n  /**\n   * Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not transmitted over HTTP, but if it is known, it should be included nevertheless.\n   *\n   * Note: `http.url` MUST NOT contain credentials passed via URL in form of `https://username:password@www.example.com/`. In such case the attribute&#39;s value should be `https://www.example.com/`.\n   */\n  HTTP_URL: 'http.url';\n\n  /**\n   * The full request target as passed in a HTTP request line or equivalent.\n   */\n  HTTP_TARGET: 'http.target';\n\n  /**\n   * The value of the [HTTP host header](https://tools.ietf.org/html/rfc7230#section-5.4). An empty Host header should also be reported, see note.\n   *\n   * Note: When the header is present but empty the attribute SHOULD be set to the empty string. Note that this is a valid situation that is expected in certain cases, according the aforementioned [section of RFC 7230](https://tools.ietf.org/html/rfc7230#section-5.4). When the header is not set the attribute MUST NOT be set.\n   */\n  HTTP_HOST: 'http.host';\n\n  /**\n   * The URI scheme identifying the used protocol.\n   */\n  HTTP_SCHEME: 'http.scheme';\n\n  /**\n   * [HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).\n   */\n  HTTP_STATUS_CODE: 'http.status_code';\n\n  /**\n   * Kind of HTTP protocol used.\n   *\n   * Note: If `net.transport` is not specified, it can be assumed to be `IP.TCP` except if `http.flavor` is `QUIC`, in which case `IP.UDP` is assumed.\n   */\n  HTTP_FLAVOR: 'http.flavor';\n\n  /**\n   * Value of the [HTTP User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.\n   */\n  HTTP_USER_AGENT: 'http.user_agent';\n\n  /**\n   * The size of the request payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the [Content-Length](https://tools.ietf.org/html/rfc7230#section-3.3.2) header. For requests using transport encoding, this should be the compressed size.\n   */\n  HTTP_REQUEST_CONTENT_LENGTH: 'http.request_content_length';\n\n  /**\n   * The size of the uncompressed request payload body after transport decoding. Not set if transport encoding not used.\n   */\n  HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED: 'http.request_content_length_uncompressed';\n\n  /**\n   * The size of the response payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the [Content-Length](https://tools.ietf.org/html/rfc7230#section-3.3.2) header. For requests using transport encoding, this should be the compressed size.\n   */\n  HTTP_RESPONSE_CONTENT_LENGTH: 'http.response_content_length';\n\n  /**\n   * The size of the uncompressed response payload body after transport decoding. Not set if transport encoding not used.\n   */\n  HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED: 'http.response_content_length_uncompressed';\n\n  /**\n   * The primary server name of the matched virtual host. This should be obtained via configuration. If no such configuration can be obtained, this attribute MUST NOT be set ( `net.host.name` should be used instead).\n   *\n   * Note: `http.url` is usually not readily available on the server side but would have to be assembled in a cumbersome and sometimes lossy process from other information (see e.g. open-telemetry/opentelemetry-python/pull/148). It is thus preferred to supply the raw data that is available.\n   */\n  HTTP_SERVER_NAME: 'http.server_name';\n\n  /**\n   * The matched route (path template).\n   */\n  HTTP_ROUTE: 'http.route';\n\n  /**\n  * The IP address of the original client behind all proxies, if known (e.g. from [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For)).\n  *\n  * Note: This is not necessarily the same as `net.peer.ip`, which would\nidentify the network-level peer, which may be a proxy.\n\nThis attribute should be set when a source of information different\nfrom the one used for `net.peer.ip`, is available even if that other\nsource just confirms the same value as `net.peer.ip`.\nRationale: For `net.peer.ip`, one typically does not know if it\ncomes from a proxy, reverse proxy, or the actual client. Setting\n`http.client_ip` when it&#39;s the same as `net.peer.ip` means that\none is at least somewhat confident that the address is not that of\nthe closest proxy.\n  */\n  HTTP_CLIENT_IP: 'http.client_ip';\n\n  /**\n   * The keys in the `RequestItems` object field.\n   */\n  AWS_DYNAMODB_TABLE_NAMES: 'aws.dynamodb.table_names';\n\n  /**\n   * The JSON-serialized value of each item in the `ConsumedCapacity` response field.\n   */\n  AWS_DYNAMODB_CONSUMED_CAPACITY: 'aws.dynamodb.consumed_capacity';\n\n  /**\n   * The JSON-serialized value of the `ItemCollectionMetrics` response field.\n   */\n  AWS_DYNAMODB_ITEM_COLLECTION_METRICS: 'aws.dynamodb.item_collection_metrics';\n\n  /**\n   * The value of the `ProvisionedThroughput.ReadCapacityUnits` request parameter.\n   */\n  AWS_DYNAMODB_PROVISIONED_READ_CAPACITY: 'aws.dynamodb.provisioned_read_capacity';\n\n  /**\n   * The value of the `ProvisionedThroughput.WriteCapacityUnits` request parameter.\n   */\n  AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY: 'aws.dynamodb.provisioned_write_capacity';\n\n  /**\n   * The value of the `ConsistentRead` request parameter.\n   */\n  AWS_DYNAMODB_CONSISTENT_READ: 'aws.dynamodb.consistent_read';\n\n  /**\n   * The value of the `ProjectionExpression` request parameter.\n   */\n  AWS_DYNAMODB_PROJECTION: 'aws.dynamodb.projection';\n\n  /**\n   * The value of the `Limit` request parameter.\n   */\n  AWS_DYNAMODB_LIMIT: 'aws.dynamodb.limit';\n\n  /**\n   * The value of the `AttributesToGet` request parameter.\n   */\n  AWS_DYNAMODB_ATTRIBUTES_TO_GET: 'aws.dynamodb.attributes_to_get';\n\n  /**\n   * The value of the `IndexName` request parameter.\n   */\n  AWS_DYNAMODB_INDEX_NAME: 'aws.dynamodb.index_name';\n\n  /**\n   * The value of the `Select` request parameter.\n   */\n  AWS_DYNAMODB_SELECT: 'aws.dynamodb.select';\n\n  /**\n   * The JSON-serialized value of each item of the `GlobalSecondaryIndexes` request field.\n   */\n  AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES: 'aws.dynamodb.global_secondary_indexes';\n\n  /**\n   * The JSON-serialized value of each item of the `LocalSecondaryIndexes` request field.\n   */\n  AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES: 'aws.dynamodb.local_secondary_indexes';\n\n  /**\n   * The value of the `ExclusiveStartTableName` request parameter.\n   */\n  AWS_DYNAMODB_EXCLUSIVE_START_TABLE: 'aws.dynamodb.exclusive_start_table';\n\n  /**\n   * The the number of items in the `TableNames` response parameter.\n   */\n  AWS_DYNAMODB_TABLE_COUNT: 'aws.dynamodb.table_count';\n\n  /**\n   * The value of the `ScanIndexForward` request parameter.\n   */\n  AWS_DYNAMODB_SCAN_FORWARD: 'aws.dynamodb.scan_forward';\n\n  /**\n   * The value of the `Segment` request parameter.\n   */\n  AWS_DYNAMODB_SEGMENT: 'aws.dynamodb.segment';\n\n  /**\n   * The value of the `TotalSegments` request parameter.\n   */\n  AWS_DYNAMODB_TOTAL_SEGMENTS: 'aws.dynamodb.total_segments';\n\n  /**\n   * The value of the `Count` response parameter.\n   */\n  AWS_DYNAMODB_COUNT: 'aws.dynamodb.count';\n\n  /**\n   * The value of the `ScannedCount` response parameter.\n   */\n  AWS_DYNAMODB_SCANNED_COUNT: 'aws.dynamodb.scanned_count';\n\n  /**\n   * The JSON-serialized value of each item in the `AttributeDefinitions` request field.\n   */\n  AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS: 'aws.dynamodb.attribute_definitions';\n\n  /**\n   * The JSON-serialized value of each item in the the `GlobalSecondaryIndexUpdates` request field.\n   */\n  AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES: 'aws.dynamodb.global_secondary_index_updates';\n\n  /**\n   * A string identifying the messaging system.\n   */\n  MESSAGING_SYSTEM: 'messaging.system';\n\n  /**\n   * The message destination name. This might be equal to the span name but is required nevertheless.\n   */\n  MESSAGING_DESTINATION: 'messaging.destination';\n\n  /**\n   * The kind of message destination.\n   */\n  MESSAGING_DESTINATION_KIND: 'messaging.destination_kind';\n\n  /**\n   * A boolean that is true if the message destination is temporary.\n   */\n  MESSAGING_TEMP_DESTINATION: 'messaging.temp_destination';\n\n  /**\n   * The name of the transport protocol.\n   */\n  MESSAGING_PROTOCOL: 'messaging.protocol';\n\n  /**\n   * The version of the transport protocol.\n   */\n  MESSAGING_PROTOCOL_VERSION: 'messaging.protocol_version';\n\n  /**\n   * Connection string.\n   */\n  MESSAGING_URL: 'messaging.url';\n\n  /**\n   * A value used by the messaging system as an identifier for the message, represented as a string.\n   */\n  MESSAGING_MESSAGE_ID: 'messaging.message_id';\n\n  /**\n   * The [conversation ID](#conversations) identifying the conversation to which the message belongs, represented as a string. Sometimes called &#34;Correlation ID&#34;.\n   */\n  MESSAGING_CONVERSATION_ID: 'messaging.conversation_id';\n\n  /**\n   * The (uncompressed) size of the message payload in bytes. Also use this attribute if it is unknown whether the compressed or uncompressed payload size is reported.\n   */\n  MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES: 'messaging.message_payload_size_bytes';\n\n  /**\n   * The compressed size of the message payload in bytes.\n   */\n  MESSAGING_MESSAGE_PAYLOAD_COMPRESSED_SIZE_BYTES: 'messaging.message_payload_compressed_size_bytes';\n\n  /**\n   * A string identifying the kind of message consumption as defined in the [Operation names](#operation-names) section above. If the operation is &#34;send&#34;, this attribute MUST NOT be set, since the operation can be inferred from the span kind in that case.\n   */\n  MESSAGING_OPERATION: 'messaging.operation';\n\n  /**\n   * The identifier for the consumer receiving a message. For Kafka, set it to `{messaging.kafka.consumer_group} - {messaging.kafka.client_id}`, if both are present, or only `messaging.kafka.consumer_group`. For brokers, such as RabbitMQ and Artemis, set it to the `client_id` of the client consuming the message.\n   */\n  MESSAGING_CONSUMER_ID: 'messaging.consumer_id';\n\n  /**\n   * RabbitMQ message routing key.\n   */\n  MESSAGING_RABBITMQ_ROUTING_KEY: 'messaging.rabbitmq.routing_key';\n\n  /**\n   * Message keys in Kafka are used for grouping alike messages to ensure they&#39;re processed on the same partition. They differ from `messaging.message_id` in that they&#39;re not unique. If the key is `null`, the attribute MUST NOT be set.\n   *\n   * Note: If the key type is not string, it&#39;s string representation has to be supplied for the attribute. If the key has no unambiguous, canonical string form, don&#39;t include its value.\n   */\n  MESSAGING_KAFKA_MESSAGE_KEY: 'messaging.kafka.message_key';\n\n  /**\n   * Name of the Kafka Consumer Group that is handling the message. Only applies to consumers, not producers.\n   */\n  MESSAGING_KAFKA_CONSUMER_GROUP: 'messaging.kafka.consumer_group';\n\n  /**\n   * Client Id for the Consumer or Producer that is handling the message.\n   */\n  MESSAGING_KAFKA_CLIENT_ID: 'messaging.kafka.client_id';\n\n  /**\n   * Partition the message is sent to.\n   */\n  MESSAGING_KAFKA_PARTITION: 'messaging.kafka.partition';\n\n  /**\n   * A boolean that is true if the message is a tombstone.\n   */\n  MESSAGING_KAFKA_TOMBSTONE: 'messaging.kafka.tombstone';\n\n  /**\n   * A string identifying the remoting system.\n   */\n  RPC_SYSTEM: 'rpc.system';\n\n  /**\n   * The full (logical) name of the service being called, including its package name, if applicable.\n   *\n   * Note: This is the logical name of the service from the RPC interface perspective, which can be different from the name of any implementing class. The `code.namespace` attribute may be used to store the latter (despite the attribute name, it may include a class name; e.g., class with method actually executing the call on the server side, RPC client stub class on the client side).\n   */\n  RPC_SERVICE: 'rpc.service';\n\n  /**\n   * The name of the (logical) method being called, must be equal to the $method part in the span name.\n   *\n   * Note: This is the logical name of the method from the RPC interface perspective, which can be different from the name of any implementing method/function. The `code.function` attribute may be used to store the latter (e.g., method actually executing the call on the server side, RPC client stub method on the client side).\n   */\n  RPC_METHOD: 'rpc.method';\n\n  /**\n   * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n   */\n  RPC_GRPC_STATUS_CODE: 'rpc.grpc.status_code';\n\n  /**\n   * Protocol version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0 does not specify this, the value can be omitted.\n   */\n  RPC_JSONRPC_VERSION: 'rpc.jsonrpc.version';\n\n  /**\n   * `id` property of request or response. Since protocol allows id to be int, string, `null` or missing (for notifications), value is expected to be cast to string for simplicity. Use empty string in case of `null` value. Omit entirely if this is a notification.\n   */\n  RPC_JSONRPC_REQUEST_ID: 'rpc.jsonrpc.request_id';\n\n  /**\n   * `error.code` property of response if it is an error response.\n   */\n  RPC_JSONRPC_ERROR_CODE: 'rpc.jsonrpc.error_code';\n\n  /**\n   * `error.message` property of response if it is an error response.\n   */\n  RPC_JSONRPC_ERROR_MESSAGE: 'rpc.jsonrpc.error_message';\n\n  /**\n   * Whether this is a received or sent message.\n   */\n  MESSAGE_TYPE: 'message.type';\n\n  /**\n   * MUST be calculated as two different counters starting from `1` one for sent messages and one for received message.\n   *\n   * Note: This way we guarantee that the values will be consistent between different implementations.\n   */\n  MESSAGE_ID: 'message.id';\n\n  /**\n   * Compressed size of the message in bytes.\n   */\n  MESSAGE_COMPRESSED_SIZE: 'message.compressed_size';\n\n  /**\n   * Uncompressed size of the message in bytes.\n   */\n  MESSAGE_UNCOMPRESSED_SIZE: 'message.uncompressed_size';\n};\n\n/**\n * Create exported Value Map for SemanticAttributes values\n * @deprecated Use the SEMATTRS_XXXXX constants rather than the SemanticAttributes.XXXXX for bundle minification\n */\nexport const SemanticAttributes: SemanticAttributes =\n  /*#__PURE__*/ createConstMap<SemanticAttributes>([\n    TMP_AWS_LAMBDA_INVOKED_ARN,\n    TMP_DB_SYSTEM,\n    TMP_DB_CONNECTION_STRING,\n    TMP_DB_USER,\n    TMP_DB_JDBC_DRIVER_CLASSNAME,\n    TMP_DB_NAME,\n    TMP_DB_STATEMENT,\n    TMP_DB_OPERATION,\n    TMP_DB_MSSQL_INSTANCE_NAME,\n    TMP_DB_CASSANDRA_KEYSPACE,\n    TMP_DB_CASSANDRA_PAGE_SIZE,\n    TMP_DB_CASSANDRA_CONSISTENCY_LEVEL,\n    TMP_DB_CASSANDRA_TABLE,\n    TMP_DB_CASSANDRA_IDEMPOTENCE,\n    TMP_DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT,\n    TMP_DB_CASSANDRA_COORDINATOR_ID,\n    TMP_DB_CASSANDRA_COORDINATOR_DC,\n    TMP_DB_HBASE_NAMESPACE,\n    TMP_DB_REDIS_DATABASE_INDEX,\n    TMP_DB_MONGODB_COLLECTION,\n    TMP_DB_SQL_TABLE,\n    TMP_EXCEPTION_TYPE,\n    TMP_EXCEPTION_MESSAGE,\n    TMP_EXCEPTION_STACKTRACE,\n    TMP_EXCEPTION_ESCAPED,\n    TMP_FAAS_TRIGGER,\n    TMP_FAAS_EXECUTION,\n    TMP_FAAS_DOCUMENT_COLLECTION,\n    TMP_FAAS_DOCUMENT_OPERATION,\n    TMP_FAAS_DOCUMENT_TIME,\n    TMP_FAAS_DOCUMENT_NAME,\n    TMP_FAAS_TIME,\n    TMP_FAAS_CRON,\n    TMP_FAAS_COLDSTART,\n    TMP_FAAS_INVOKED_NAME,\n    TMP_FAAS_INVOKED_PROVIDER,\n    TMP_FAAS_INVOKED_REGION,\n    TMP_NET_TRANSPORT,\n    TMP_NET_PEER_IP,\n    TMP_NET_PEER_PORT,\n    TMP_NET_PEER_NAME,\n    TMP_NET_HOST_IP,\n    TMP_NET_HOST_PORT,\n    TMP_NET_HOST_NAME,\n    TMP_NET_HOST_CONNECTION_TYPE,\n    TMP_NET_HOST_CONNECTION_SUBTYPE,\n    TMP_NET_HOST_CARRIER_NAME,\n    TMP_NET_HOST_CARRIER_MCC,\n    TMP_NET_HOST_CARRIER_MNC,\n    TMP_NET_HOST_CARRIER_ICC,\n    TMP_PEER_SERVICE,\n    TMP_ENDUSER_ID,\n    TMP_ENDUSER_ROLE,\n    TMP_ENDUSER_SCOPE,\n    TMP_THREAD_ID,\n    TMP_THREAD_NAME,\n    TMP_CODE_FUNCTION,\n    TMP_CODE_NAMESPACE,\n    TMP_CODE_FILEPATH,\n    TMP_CODE_LINENO,\n    TMP_HTTP_METHOD,\n    TMP_HTTP_URL,\n    TMP_HTTP_TARGET,\n    TMP_HTTP_HOST,\n    TMP_HTTP_SCHEME,\n    TMP_HTTP_STATUS_CODE,\n    TMP_HTTP_FLAVOR,\n    TMP_HTTP_USER_AGENT,\n    TMP_HTTP_REQUEST_CONTENT_LENGTH,\n    TMP_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED,\n    TMP_HTTP_RESPONSE_CONTENT_LENGTH,\n    TMP_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED,\n    TMP_HTTP_SERVER_NAME,\n    TMP_HTTP_ROUTE,\n    TMP_HTTP_CLIENT_IP,\n    TMP_AWS_DYNAMODB_TABLE_NAMES,\n    TMP_AWS_DYNAMODB_CONSUMED_CAPACITY,\n    TMP_AWS_DYNAMODB_ITEM_COLLECTION_METRICS,\n    TMP_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY,\n    TMP_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY,\n    TMP_AWS_DYNAMODB_CONSISTENT_READ,\n    TMP_AWS_DYNAMODB_PROJECTION,\n    TMP_AWS_DYNAMODB_LIMIT,\n    TMP_AWS_DYNAMODB_ATTRIBUTES_TO_GET,\n    TMP_AWS_DYNAMODB_INDEX_NAME,\n    TMP_AWS_DYNAMODB_SELECT,\n    TMP_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES,\n    TMP_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES,\n    TMP_AWS_DYNAMODB_EXCLUSIVE_START_TABLE,\n    TMP_AWS_DYNAMODB_TABLE_COUNT,\n    TMP_AWS_DYNAMODB_SCAN_FORWARD,\n    TMP_AWS_DYNAMODB_SEGMENT,\n    TMP_AWS_DYNAMODB_TOTAL_SEGMENTS,\n    TMP_AWS_DYNAMODB_COUNT,\n    TMP_AWS_DYNAMODB_SCANNED_COUNT,\n    TMP_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS,\n    TMP_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES,\n    TMP_MESSAGING_SYSTEM,\n    TMP_MESSAGING_DESTINATION,\n    TMP_MESSAGING_DESTINATION_KIND,\n    TMP_MESSAGING_TEMP_DESTINATION,\n    TMP_MESSAGING_PROTOCOL,\n    TMP_MESSAGING_PROTOCOL_VERSION,\n    TMP_MESSAGING_URL,\n    TMP_MESSAGING_MESSAGE_ID,\n    TMP_MESSAGING_CONVERSATION_ID,\n    TMP_MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES,\n    TMP_MESSAGING_MESSAGE_PAYLOAD_COMPRESSED_SIZE_BYTES,\n    TMP_MESSAGING_OPERATION,\n    TMP_MESSAGING_CONSUMER_ID,\n    TMP_MESSAGING_RABBITMQ_ROUTING_KEY,\n    TMP_MESSAGING_KAFKA_MESSAGE_KEY,\n    TMP_MESSAGING_KAFKA_CONSUMER_GROUP,\n    TMP_MESSAGING_KAFKA_CLIENT_ID,\n    TMP_MESSAGING_KAFKA_PARTITION,\n    TMP_MESSAGING_KAFKA_TOMBSTONE,\n    TMP_RPC_SYSTEM,\n    TMP_RPC_SERVICE,\n    TMP_RPC_METHOD,\n    TMP_RPC_GRPC_STATUS_CODE,\n    TMP_RPC_JSONRPC_VERSION,\n    TMP_RPC_JSONRPC_REQUEST_ID,\n    TMP_RPC_JSONRPC_ERROR_CODE,\n    TMP_RPC_JSONRPC_ERROR_MESSAGE,\n    TMP_MESSAGE_TYPE,\n    TMP_MESSAGE_ID,\n    TMP_MESSAGE_COMPRESSED_SIZE,\n    TMP_MESSAGE_UNCOMPRESSED_SIZE,\n  ]);\n\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for DbSystemValues enum definition\n *\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n * ---------------------------------------------------------------------------------------------------------- */\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_DBSYSTEMVALUES_OTHER_SQL = 'other_sql';\nconst TMP_DBSYSTEMVALUES_MSSQL = 'mssql';\nconst TMP_DBSYSTEMVALUES_MYSQL = 'mysql';\nconst TMP_DBSYSTEMVALUES_ORACLE = 'oracle';\nconst TMP_DBSYSTEMVALUES_DB2 = 'db2';\nconst TMP_DBSYSTEMVALUES_POSTGRESQL = 'postgresql';\nconst TMP_DBSYSTEMVALUES_REDSHIFT = 'redshift';\nconst TMP_DBSYSTEMVALUES_HIVE = 'hive';\nconst TMP_DBSYSTEMVALUES_CLOUDSCAPE = 'cloudscape';\nconst TMP_DBSYSTEMVALUES_HSQLDB = 'hsqldb';\nconst TMP_DBSYSTEMVALUES_PROGRESS = 'progress';\nconst TMP_DBSYSTEMVALUES_MAXDB = 'maxdb';\nconst TMP_DBSYSTEMVALUES_HANADB = 'hanadb';\nconst TMP_DBSYSTEMVALUES_INGRES = 'ingres';\nconst TMP_DBSYSTEMVALUES_FIRSTSQL = 'firstsql';\nconst TMP_DBSYSTEMVALUES_EDB = 'edb';\nconst TMP_DBSYSTEMVALUES_CACHE = 'cache';\nconst TMP_DBSYSTEMVALUES_ADABAS = 'adabas';\nconst TMP_DBSYSTEMVALUES_FIREBIRD = 'firebird';\nconst TMP_DBSYSTEMVALUES_DERBY = 'derby';\nconst TMP_DBSYSTEMVALUES_FILEMAKER = 'filemaker';\nconst TMP_DBSYSTEMVALUES_INFORMIX = 'informix';\nconst TMP_DBSYSTEMVALUES_INSTANTDB = 'instantdb';\nconst TMP_DBSYSTEMVALUES_INTERBASE = 'interbase';\nconst TMP_DBSYSTEMVALUES_MARIADB = 'mariadb';\nconst TMP_DBSYSTEMVALUES_NETEZZA = 'netezza';\nconst TMP_DBSYSTEMVALUES_PERVASIVE = 'pervasive';\nconst TMP_DBSYSTEMVALUES_POINTBASE = 'pointbase';\nconst TMP_DBSYSTEMVALUES_SQLITE = 'sqlite';\nconst TMP_DBSYSTEMVALUES_SYBASE = 'sybase';\nconst TMP_DBSYSTEMVALUES_TERADATA = 'teradata';\nconst TMP_DBSYSTEMVALUES_VERTICA = 'vertica';\nconst TMP_DBSYSTEMVALUES_H2 = 'h2';\nconst TMP_DBSYSTEMVALUES_COLDFUSION = 'coldfusion';\nconst TMP_DBSYSTEMVALUES_CASSANDRA = 'cassandra';\nconst TMP_DBSYSTEMVALUES_HBASE = 'hbase';\nconst TMP_DBSYSTEMVALUES_MONGODB = 'mongodb';\nconst TMP_DBSYSTEMVALUES_REDIS = 'redis';\nconst TMP_DBSYSTEMVALUES_COUCHBASE = 'couchbase';\nconst TMP_DBSYSTEMVALUES_COUCHDB = 'couchdb';\nconst TMP_DBSYSTEMVALUES_COSMOSDB = 'cosmosdb';\nconst TMP_DBSYSTEMVALUES_DYNAMODB = 'dynamodb';\nconst TMP_DBSYSTEMVALUES_NEO4J = 'neo4j';\nconst TMP_DBSYSTEMVALUES_GEODE = 'geode';\nconst TMP_DBSYSTEMVALUES_ELASTICSEARCH = 'elasticsearch';\nconst TMP_DBSYSTEMVALUES_MEMCACHED = 'memcached';\nconst TMP_DBSYSTEMVALUES_COCKROACHDB = 'cockroachdb';\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_OTHER_SQL in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_OTHER_SQL = TMP_DBSYSTEMVALUES_OTHER_SQL;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_MSSQL in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_MSSQL = TMP_DBSYSTEMVALUES_MSSQL;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_MYSQL in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_MYSQL = TMP_DBSYSTEMVALUES_MYSQL;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_ORACLE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_ORACLE = TMP_DBSYSTEMVALUES_ORACLE;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_DB2 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_DB2 = TMP_DBSYSTEMVALUES_DB2;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_POSTGRESQL in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_POSTGRESQL = TMP_DBSYSTEMVALUES_POSTGRESQL;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_REDSHIFT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_REDSHIFT = TMP_DBSYSTEMVALUES_REDSHIFT;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_HIVE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_HIVE = TMP_DBSYSTEMVALUES_HIVE;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_CLOUDSCAPE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_CLOUDSCAPE = TMP_DBSYSTEMVALUES_CLOUDSCAPE;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_HSQLDB in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_HSQLDB = TMP_DBSYSTEMVALUES_HSQLDB;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_PROGRESS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_PROGRESS = TMP_DBSYSTEMVALUES_PROGRESS;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_MAXDB in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_MAXDB = TMP_DBSYSTEMVALUES_MAXDB;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_HANADB in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_HANADB = TMP_DBSYSTEMVALUES_HANADB;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_INGRES in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_INGRES = TMP_DBSYSTEMVALUES_INGRES;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_FIRSTSQL in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_FIRSTSQL = TMP_DBSYSTEMVALUES_FIRSTSQL;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_EDB in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_EDB = TMP_DBSYSTEMVALUES_EDB;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_CACHE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_CACHE = TMP_DBSYSTEMVALUES_CACHE;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_ADABAS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_ADABAS = TMP_DBSYSTEMVALUES_ADABAS;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_FIREBIRD in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_FIREBIRD = TMP_DBSYSTEMVALUES_FIREBIRD;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_DERBY in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_DERBY = TMP_DBSYSTEMVALUES_DERBY;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_FILEMAKER in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_FILEMAKER = TMP_DBSYSTEMVALUES_FILEMAKER;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_INFORMIX in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_INFORMIX = TMP_DBSYSTEMVALUES_INFORMIX;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_INSTANTDB in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_INSTANTDB = TMP_DBSYSTEMVALUES_INSTANTDB;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_INTERBASE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_INTERBASE = TMP_DBSYSTEMVALUES_INTERBASE;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_MARIADB in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_MARIADB = TMP_DBSYSTEMVALUES_MARIADB;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_NETEZZA in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_NETEZZA = TMP_DBSYSTEMVALUES_NETEZZA;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_PERVASIVE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_PERVASIVE = TMP_DBSYSTEMVALUES_PERVASIVE;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_POINTBASE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_POINTBASE = TMP_DBSYSTEMVALUES_POINTBASE;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_SQLITE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_SQLITE = TMP_DBSYSTEMVALUES_SQLITE;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_SYBASE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_SYBASE = TMP_DBSYSTEMVALUES_SYBASE;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_TERADATA in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_TERADATA = TMP_DBSYSTEMVALUES_TERADATA;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_VERTICA in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_VERTICA = TMP_DBSYSTEMVALUES_VERTICA;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_H2 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_H2 = TMP_DBSYSTEMVALUES_H2;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_COLDFUSION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_COLDFUSION = TMP_DBSYSTEMVALUES_COLDFUSION;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_CASSANDRA in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_CASSANDRA = TMP_DBSYSTEMVALUES_CASSANDRA;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_HBASE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_HBASE = TMP_DBSYSTEMVALUES_HBASE;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_MONGODB in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_MONGODB = TMP_DBSYSTEMVALUES_MONGODB;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_REDIS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_REDIS = TMP_DBSYSTEMVALUES_REDIS;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_COUCHBASE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_COUCHBASE = TMP_DBSYSTEMVALUES_COUCHBASE;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_COUCHDB in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_COUCHDB = TMP_DBSYSTEMVALUES_COUCHDB;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_COSMOSDB in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_COSMOSDB = TMP_DBSYSTEMVALUES_COSMOSDB;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_DYNAMODB in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_DYNAMODB = TMP_DBSYSTEMVALUES_DYNAMODB;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_NEO4J in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_NEO4J = TMP_DBSYSTEMVALUES_NEO4J;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_GEODE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_GEODE = TMP_DBSYSTEMVALUES_GEODE;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_ELASTICSEARCH in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_ELASTICSEARCH = TMP_DBSYSTEMVALUES_ELASTICSEARCH;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_MEMCACHED in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_MEMCACHED = TMP_DBSYSTEMVALUES_MEMCACHED;\n\n/**\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n *\n * @deprecated Use DB_SYSTEM_VALUE_COCKROACHDB in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBSYSTEMVALUES_COCKROACHDB = TMP_DBSYSTEMVALUES_COCKROACHDB;\n\n/**\n * Identifies the Values for DbSystemValues enum definition\n *\n * An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.\n * @deprecated Use the DBSYSTEMVALUES_XXXXX constants rather than the DbSystemValues.XXXXX for bundle minification.\n */\nexport type DbSystemValues = {\n  /** Some other SQL database. Fallback only. See notes. */\n  OTHER_SQL: 'other_sql';\n\n  /** Microsoft SQL Server. */\n  MSSQL: 'mssql';\n\n  /** MySQL. */\n  MYSQL: 'mysql';\n\n  /** Oracle Database. */\n  ORACLE: 'oracle';\n\n  /** IBM Db2. */\n  DB2: 'db2';\n\n  /** PostgreSQL. */\n  POSTGRESQL: 'postgresql';\n\n  /** Amazon Redshift. */\n  REDSHIFT: 'redshift';\n\n  /** Apache Hive. */\n  HIVE: 'hive';\n\n  /** Cloudscape. */\n  CLOUDSCAPE: 'cloudscape';\n\n  /** HyperSQL DataBase. */\n  HSQLDB: 'hsqldb';\n\n  /** Progress Database. */\n  PROGRESS: 'progress';\n\n  /** SAP MaxDB. */\n  MAXDB: 'maxdb';\n\n  /** SAP HANA. */\n  HANADB: 'hanadb';\n\n  /** Ingres. */\n  INGRES: 'ingres';\n\n  /** FirstSQL. */\n  FIRSTSQL: 'firstsql';\n\n  /** EnterpriseDB. */\n  EDB: 'edb';\n\n  /** InterSystems Caché. */\n  CACHE: 'cache';\n\n  /** Adabas (Adaptable Database System). */\n  ADABAS: 'adabas';\n\n  /** Firebird. */\n  FIREBIRD: 'firebird';\n\n  /** Apache Derby. */\n  DERBY: 'derby';\n\n  /** FileMaker. */\n  FILEMAKER: 'filemaker';\n\n  /** Informix. */\n  INFORMIX: 'informix';\n\n  /** InstantDB. */\n  INSTANTDB: 'instantdb';\n\n  /** InterBase. */\n  INTERBASE: 'interbase';\n\n  /** MariaDB. */\n  MARIADB: 'mariadb';\n\n  /** Netezza. */\n  NETEZZA: 'netezza';\n\n  /** Pervasive PSQL. */\n  PERVASIVE: 'pervasive';\n\n  /** PointBase. */\n  POINTBASE: 'pointbase';\n\n  /** SQLite. */\n  SQLITE: 'sqlite';\n\n  /** Sybase. */\n  SYBASE: 'sybase';\n\n  /** Teradata. */\n  TERADATA: 'teradata';\n\n  /** Vertica. */\n  VERTICA: 'vertica';\n\n  /** H2. */\n  H2: 'h2';\n\n  /** ColdFusion IMQ. */\n  COLDFUSION: 'coldfusion';\n\n  /** Apache Cassandra. */\n  CASSANDRA: 'cassandra';\n\n  /** Apache HBase. */\n  HBASE: 'hbase';\n\n  /** MongoDB. */\n  MONGODB: 'mongodb';\n\n  /** Redis. */\n  REDIS: 'redis';\n\n  /** Couchbase. */\n  COUCHBASE: 'couchbase';\n\n  /** CouchDB. */\n  COUCHDB: 'couchdb';\n\n  /** Microsoft Azure Cosmos DB. */\n  COSMOSDB: 'cosmosdb';\n\n  /** Amazon DynamoDB. */\n  DYNAMODB: 'dynamodb';\n\n  /** Neo4j. */\n  NEO4J: 'neo4j';\n\n  /** Apache Geode. */\n  GEODE: 'geode';\n\n  /** Elasticsearch. */\n  ELASTICSEARCH: 'elasticsearch';\n\n  /** Memcached. */\n  MEMCACHED: 'memcached';\n\n  /** CockroachDB. */\n  COCKROACHDB: 'cockroachdb';\n};\n\n/**\n * The constant map of values for DbSystemValues.\n * @deprecated Use the DBSYSTEMVALUES_XXXXX constants rather than the DbSystemValues.XXXXX for bundle minification.\n */\nexport const DbSystemValues: DbSystemValues =\n  /*#__PURE__*/ createConstMap<DbSystemValues>([\n    TMP_DBSYSTEMVALUES_OTHER_SQL,\n    TMP_DBSYSTEMVALUES_MSSQL,\n    TMP_DBSYSTEMVALUES_MYSQL,\n    TMP_DBSYSTEMVALUES_ORACLE,\n    TMP_DBSYSTEMVALUES_DB2,\n    TMP_DBSYSTEMVALUES_POSTGRESQL,\n    TMP_DBSYSTEMVALUES_REDSHIFT,\n    TMP_DBSYSTEMVALUES_HIVE,\n    TMP_DBSYSTEMVALUES_CLOUDSCAPE,\n    TMP_DBSYSTEMVALUES_HSQLDB,\n    TMP_DBSYSTEMVALUES_PROGRESS,\n    TMP_DBSYSTEMVALUES_MAXDB,\n    TMP_DBSYSTEMVALUES_HANADB,\n    TMP_DBSYSTEMVALUES_INGRES,\n    TMP_DBSYSTEMVALUES_FIRSTSQL,\n    TMP_DBSYSTEMVALUES_EDB,\n    TMP_DBSYSTEMVALUES_CACHE,\n    TMP_DBSYSTEMVALUES_ADABAS,\n    TMP_DBSYSTEMVALUES_FIREBIRD,\n    TMP_DBSYSTEMVALUES_DERBY,\n    TMP_DBSYSTEMVALUES_FILEMAKER,\n    TMP_DBSYSTEMVALUES_INFORMIX,\n    TMP_DBSYSTEMVALUES_INSTANTDB,\n    TMP_DBSYSTEMVALUES_INTERBASE,\n    TMP_DBSYSTEMVALUES_MARIADB,\n    TMP_DBSYSTEMVALUES_NETEZZA,\n    TMP_DBSYSTEMVALUES_PERVASIVE,\n    TMP_DBSYSTEMVALUES_POINTBASE,\n    TMP_DBSYSTEMVALUES_SQLITE,\n    TMP_DBSYSTEMVALUES_SYBASE,\n    TMP_DBSYSTEMVALUES_TERADATA,\n    TMP_DBSYSTEMVALUES_VERTICA,\n    TMP_DBSYSTEMVALUES_H2,\n    TMP_DBSYSTEMVALUES_COLDFUSION,\n    TMP_DBSYSTEMVALUES_CASSANDRA,\n    TMP_DBSYSTEMVALUES_HBASE,\n    TMP_DBSYSTEMVALUES_MONGODB,\n    TMP_DBSYSTEMVALUES_REDIS,\n    TMP_DBSYSTEMVALUES_COUCHBASE,\n    TMP_DBSYSTEMVALUES_COUCHDB,\n    TMP_DBSYSTEMVALUES_COSMOSDB,\n    TMP_DBSYSTEMVALUES_DYNAMODB,\n    TMP_DBSYSTEMVALUES_NEO4J,\n    TMP_DBSYSTEMVALUES_GEODE,\n    TMP_DBSYSTEMVALUES_ELASTICSEARCH,\n    TMP_DBSYSTEMVALUES_MEMCACHED,\n    TMP_DBSYSTEMVALUES_COCKROACHDB,\n  ]);\n\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for DbCassandraConsistencyLevelValues enum definition\n *\n * The consistency level of the query. Based on consistency values from [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html).\n * ---------------------------------------------------------------------------------------------------------- */\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ALL = 'all';\nconst TMP_DBCASSANDRACONSISTENCYLEVELVALUES_EACH_QUORUM = 'each_quorum';\nconst TMP_DBCASSANDRACONSISTENCYLEVELVALUES_QUORUM = 'quorum';\nconst TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_QUORUM = 'local_quorum';\nconst TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ONE = 'one';\nconst TMP_DBCASSANDRACONSISTENCYLEVELVALUES_TWO = 'two';\nconst TMP_DBCASSANDRACONSISTENCYLEVELVALUES_THREE = 'three';\nconst TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_ONE = 'local_one';\nconst TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ANY = 'any';\nconst TMP_DBCASSANDRACONSISTENCYLEVELVALUES_SERIAL = 'serial';\nconst TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_SERIAL = 'local_serial';\n\n/**\n * The consistency level of the query. Based on consistency values from [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html).\n *\n * @deprecated Use DB_CASSANDRA_CONSISTENCY_LEVEL_VALUE_ALL in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBCASSANDRACONSISTENCYLEVELVALUES_ALL =\n  TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ALL;\n\n/**\n * The consistency level of the query. Based on consistency values from [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html).\n *\n * @deprecated Use DB_CASSANDRA_CONSISTENCY_LEVEL_VALUE_EACH_QUORUM in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBCASSANDRACONSISTENCYLEVELVALUES_EACH_QUORUM =\n  TMP_DBCASSANDRACONSISTENCYLEVELVALUES_EACH_QUORUM;\n\n/**\n * The consistency level of the query. Based on consistency values from [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html).\n *\n * @deprecated Use DB_CASSANDRA_CONSISTENCY_LEVEL_VALUE_QUORUM in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBCASSANDRACONSISTENCYLEVELVALUES_QUORUM =\n  TMP_DBCASSANDRACONSISTENCYLEVELVALUES_QUORUM;\n\n/**\n * The consistency level of the query. Based on consistency values from [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html).\n *\n * @deprecated Use DB_CASSANDRA_CONSISTENCY_LEVEL_VALUE_LOCAL_QUORUM in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_QUORUM =\n  TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_QUORUM;\n\n/**\n * The consistency level of the query. Based on consistency values from [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html).\n *\n * @deprecated Use DB_CASSANDRA_CONSISTENCY_LEVEL_VALUE_ONE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBCASSANDRACONSISTENCYLEVELVALUES_ONE =\n  TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ONE;\n\n/**\n * The consistency level of the query. Based on consistency values from [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html).\n *\n * @deprecated Use DB_CASSANDRA_CONSISTENCY_LEVEL_VALUE_TWO in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBCASSANDRACONSISTENCYLEVELVALUES_TWO =\n  TMP_DBCASSANDRACONSISTENCYLEVELVALUES_TWO;\n\n/**\n * The consistency level of the query. Based on consistency values from [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html).\n *\n * @deprecated Use DB_CASSANDRA_CONSISTENCY_LEVEL_VALUE_THREE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBCASSANDRACONSISTENCYLEVELVALUES_THREE =\n  TMP_DBCASSANDRACONSISTENCYLEVELVALUES_THREE;\n\n/**\n * The consistency level of the query. Based on consistency values from [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html).\n *\n * @deprecated Use DB_CASSANDRA_CONSISTENCY_LEVEL_VALUE_LOCAL_ONE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_ONE =\n  TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_ONE;\n\n/**\n * The consistency level of the query. Based on consistency values from [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html).\n *\n * @deprecated Use DB_CASSANDRA_CONSISTENCY_LEVEL_VALUE_ANY in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBCASSANDRACONSISTENCYLEVELVALUES_ANY =\n  TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ANY;\n\n/**\n * The consistency level of the query. Based on consistency values from [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html).\n *\n * @deprecated Use DB_CASSANDRA_CONSISTENCY_LEVEL_VALUE_SERIAL in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBCASSANDRACONSISTENCYLEVELVALUES_SERIAL =\n  TMP_DBCASSANDRACONSISTENCYLEVELVALUES_SERIAL;\n\n/**\n * The consistency level of the query. Based on consistency values from [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html).\n *\n * @deprecated Use DB_CASSANDRA_CONSISTENCY_LEVEL_VALUE_LOCAL_SERIAL in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_SERIAL =\n  TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_SERIAL;\n\n/**\n * Identifies the Values for DbCassandraConsistencyLevelValues enum definition\n *\n * The consistency level of the query. Based on consistency values from [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html).\n * @deprecated Use the DBCASSANDRACONSISTENCYLEVELVALUES_XXXXX constants rather than the DbCassandraConsistencyLevelValues.XXXXX for bundle minification.\n */\nexport type DbCassandraConsistencyLevelValues = {\n  /** all. */\n  ALL: 'all';\n\n  /** each_quorum. */\n  EACH_QUORUM: 'each_quorum';\n\n  /** quorum. */\n  QUORUM: 'quorum';\n\n  /** local_quorum. */\n  LOCAL_QUORUM: 'local_quorum';\n\n  /** one. */\n  ONE: 'one';\n\n  /** two. */\n  TWO: 'two';\n\n  /** three. */\n  THREE: 'three';\n\n  /** local_one. */\n  LOCAL_ONE: 'local_one';\n\n  /** any. */\n  ANY: 'any';\n\n  /** serial. */\n  SERIAL: 'serial';\n\n  /** local_serial. */\n  LOCAL_SERIAL: 'local_serial';\n};\n\n/**\n * The constant map of values for DbCassandraConsistencyLevelValues.\n * @deprecated Use the DBCASSANDRACONSISTENCYLEVELVALUES_XXXXX constants rather than the DbCassandraConsistencyLevelValues.XXXXX for bundle minification.\n */\nexport const DbCassandraConsistencyLevelValues: DbCassandraConsistencyLevelValues =\n  /*#__PURE__*/ createConstMap<DbCassandraConsistencyLevelValues>([\n    TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ALL,\n    TMP_DBCASSANDRACONSISTENCYLEVELVALUES_EACH_QUORUM,\n    TMP_DBCASSANDRACONSISTENCYLEVELVALUES_QUORUM,\n    TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_QUORUM,\n    TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ONE,\n    TMP_DBCASSANDRACONSISTENCYLEVELVALUES_TWO,\n    TMP_DBCASSANDRACONSISTENCYLEVELVALUES_THREE,\n    TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_ONE,\n    TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ANY,\n    TMP_DBCASSANDRACONSISTENCYLEVELVALUES_SERIAL,\n    TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_SERIAL,\n  ]);\n\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for FaasTriggerValues enum definition\n *\n * Type of the trigger on which the function is executed.\n * ---------------------------------------------------------------------------------------------------------- */\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_FAASTRIGGERVALUES_DATASOURCE = 'datasource';\nconst TMP_FAASTRIGGERVALUES_HTTP = 'http';\nconst TMP_FAASTRIGGERVALUES_PUBSUB = 'pubsub';\nconst TMP_FAASTRIGGERVALUES_TIMER = 'timer';\nconst TMP_FAASTRIGGERVALUES_OTHER = 'other';\n\n/**\n * Type of the trigger on which the function is executed.\n *\n * @deprecated Use FAAS_TRIGGER_VALUE_DATASOURCE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const FAASTRIGGERVALUES_DATASOURCE = TMP_FAASTRIGGERVALUES_DATASOURCE;\n\n/**\n * Type of the trigger on which the function is executed.\n *\n * @deprecated Use FAAS_TRIGGER_VALUE_HTTP in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const FAASTRIGGERVALUES_HTTP = TMP_FAASTRIGGERVALUES_HTTP;\n\n/**\n * Type of the trigger on which the function is executed.\n *\n * @deprecated Use FAAS_TRIGGER_VALUE_PUBSUB in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const FAASTRIGGERVALUES_PUBSUB = TMP_FAASTRIGGERVALUES_PUBSUB;\n\n/**\n * Type of the trigger on which the function is executed.\n *\n * @deprecated Use FAAS_TRIGGER_VALUE_TIMER in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const FAASTRIGGERVALUES_TIMER = TMP_FAASTRIGGERVALUES_TIMER;\n\n/**\n * Type of the trigger on which the function is executed.\n *\n * @deprecated Use FAAS_TRIGGER_VALUE_OTHER in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const FAASTRIGGERVALUES_OTHER = TMP_FAASTRIGGERVALUES_OTHER;\n\n/**\n * Identifies the Values for FaasTriggerValues enum definition\n *\n * Type of the trigger on which the function is executed.\n * @deprecated Use the FAASTRIGGERVALUES_XXXXX constants rather than the FaasTriggerValues.XXXXX for bundle minification.\n */\nexport type FaasTriggerValues = {\n  /** A response to some data source operation such as a database or filesystem read/write. */\n  DATASOURCE: 'datasource';\n\n  /** To provide an answer to an inbound HTTP request. */\n  HTTP: 'http';\n\n  /** A function is set to be executed when messages are sent to a messaging system. */\n  PUBSUB: 'pubsub';\n\n  /** A function is scheduled to be executed regularly. */\n  TIMER: 'timer';\n\n  /** If none of the others apply. */\n  OTHER: 'other';\n};\n\n/**\n * The constant map of values for FaasTriggerValues.\n * @deprecated Use the FAASTRIGGERVALUES_XXXXX constants rather than the FaasTriggerValues.XXXXX for bundle minification.\n */\nexport const FaasTriggerValues: FaasTriggerValues =\n  /*#__PURE__*/ createConstMap<FaasTriggerValues>([\n    TMP_FAASTRIGGERVALUES_DATASOURCE,\n    TMP_FAASTRIGGERVALUES_HTTP,\n    TMP_FAASTRIGGERVALUES_PUBSUB,\n    TMP_FAASTRIGGERVALUES_TIMER,\n    TMP_FAASTRIGGERVALUES_OTHER,\n  ]);\n\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for FaasDocumentOperationValues enum definition\n *\n * Describes the type of the operation that was performed on the data.\n * ---------------------------------------------------------------------------------------------------------- */\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_FAASDOCUMENTOPERATIONVALUES_INSERT = 'insert';\nconst TMP_FAASDOCUMENTOPERATIONVALUES_EDIT = 'edit';\nconst TMP_FAASDOCUMENTOPERATIONVALUES_DELETE = 'delete';\n\n/**\n * Describes the type of the operation that was performed on the data.\n *\n * @deprecated Use FAAS_DOCUMENT_OPERATION_VALUE_INSERT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const FAASDOCUMENTOPERATIONVALUES_INSERT =\n  TMP_FAASDOCUMENTOPERATIONVALUES_INSERT;\n\n/**\n * Describes the type of the operation that was performed on the data.\n *\n * @deprecated Use FAAS_DOCUMENT_OPERATION_VALUE_EDIT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const FAASDOCUMENTOPERATIONVALUES_EDIT =\n  TMP_FAASDOCUMENTOPERATIONVALUES_EDIT;\n\n/**\n * Describes the type of the operation that was performed on the data.\n *\n * @deprecated Use FAAS_DOCUMENT_OPERATION_VALUE_DELETE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const FAASDOCUMENTOPERATIONVALUES_DELETE =\n  TMP_FAASDOCUMENTOPERATIONVALUES_DELETE;\n\n/**\n * Identifies the Values for FaasDocumentOperationValues enum definition\n *\n * Describes the type of the operation that was performed on the data.\n * @deprecated Use the FAASDOCUMENTOPERATIONVALUES_XXXXX constants rather than the FaasDocumentOperationValues.XXXXX for bundle minification.\n */\nexport type FaasDocumentOperationValues = {\n  /** When a new object is created. */\n  INSERT: 'insert';\n\n  /** When an object is modified. */\n  EDIT: 'edit';\n\n  /** When an object is deleted. */\n  DELETE: 'delete';\n};\n\n/**\n * The constant map of values for FaasDocumentOperationValues.\n * @deprecated Use the FAASDOCUMENTOPERATIONVALUES_XXXXX constants rather than the FaasDocumentOperationValues.XXXXX for bundle minification.\n */\nexport const FaasDocumentOperationValues: FaasDocumentOperationValues =\n  /*#__PURE__*/ createConstMap<FaasDocumentOperationValues>([\n    TMP_FAASDOCUMENTOPERATIONVALUES_INSERT,\n    TMP_FAASDOCUMENTOPERATIONVALUES_EDIT,\n    TMP_FAASDOCUMENTOPERATIONVALUES_DELETE,\n  ]);\n\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for FaasInvokedProviderValues enum definition\n *\n * The cloud provider of the invoked function.\n *\n * Note: SHOULD be equal to the `cloud.provider` resource attribute of the invoked function.\n * ---------------------------------------------------------------------------------------------------------- */\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_FAASINVOKEDPROVIDERVALUES_ALIBABA_CLOUD = 'alibaba_cloud';\nconst TMP_FAASINVOKEDPROVIDERVALUES_AWS = 'aws';\nconst TMP_FAASINVOKEDPROVIDERVALUES_AZURE = 'azure';\nconst TMP_FAASINVOKEDPROVIDERVALUES_GCP = 'gcp';\n\n/**\n * The cloud provider of the invoked function.\n *\n * Note: SHOULD be equal to the `cloud.provider` resource attribute of the invoked function.\n *\n * @deprecated Use FAAS_INVOKED_PROVIDER_VALUE_ALIBABA_CLOUD in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const FAASINVOKEDPROVIDERVALUES_ALIBABA_CLOUD =\n  TMP_FAASINVOKEDPROVIDERVALUES_ALIBABA_CLOUD;\n\n/**\n * The cloud provider of the invoked function.\n *\n * Note: SHOULD be equal to the `cloud.provider` resource attribute of the invoked function.\n *\n * @deprecated Use FAAS_INVOKED_PROVIDER_VALUE_AWS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const FAASINVOKEDPROVIDERVALUES_AWS = TMP_FAASINVOKEDPROVIDERVALUES_AWS;\n\n/**\n * The cloud provider of the invoked function.\n *\n * Note: SHOULD be equal to the `cloud.provider` resource attribute of the invoked function.\n *\n * @deprecated Use FAAS_INVOKED_PROVIDER_VALUE_AZURE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const FAASINVOKEDPROVIDERVALUES_AZURE =\n  TMP_FAASINVOKEDPROVIDERVALUES_AZURE;\n\n/**\n * The cloud provider of the invoked function.\n *\n * Note: SHOULD be equal to the `cloud.provider` resource attribute of the invoked function.\n *\n * @deprecated Use FAAS_INVOKED_PROVIDER_VALUE_GCP in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const FAASINVOKEDPROVIDERVALUES_GCP = TMP_FAASINVOKEDPROVIDERVALUES_GCP;\n\n/**\n * Identifies the Values for FaasInvokedProviderValues enum definition\n *\n * The cloud provider of the invoked function.\n *\n * Note: SHOULD be equal to the `cloud.provider` resource attribute of the invoked function.\n * @deprecated Use the FAASINVOKEDPROVIDERVALUES_XXXXX constants rather than the FaasInvokedProviderValues.XXXXX for bundle minification.\n */\nexport type FaasInvokedProviderValues = {\n  /** Alibaba Cloud. */\n  ALIBABA_CLOUD: 'alibaba_cloud';\n\n  /** Amazon Web Services. */\n  AWS: 'aws';\n\n  /** Microsoft Azure. */\n  AZURE: 'azure';\n\n  /** Google Cloud Platform. */\n  GCP: 'gcp';\n};\n\n/**\n * The constant map of values for FaasInvokedProviderValues.\n * @deprecated Use the FAASINVOKEDPROVIDERVALUES_XXXXX constants rather than the FaasInvokedProviderValues.XXXXX for bundle minification.\n */\nexport const FaasInvokedProviderValues: FaasInvokedProviderValues =\n  /*#__PURE__*/ createConstMap<FaasInvokedProviderValues>([\n    TMP_FAASINVOKEDPROVIDERVALUES_ALIBABA_CLOUD,\n    TMP_FAASINVOKEDPROVIDERVALUES_AWS,\n    TMP_FAASINVOKEDPROVIDERVALUES_AZURE,\n    TMP_FAASINVOKEDPROVIDERVALUES_GCP,\n  ]);\n\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for NetTransportValues enum definition\n *\n * Transport protocol used. See note below.\n * ---------------------------------------------------------------------------------------------------------- */\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_NETTRANSPORTVALUES_IP_TCP = 'ip_tcp';\nconst TMP_NETTRANSPORTVALUES_IP_UDP = 'ip_udp';\nconst TMP_NETTRANSPORTVALUES_IP = 'ip';\nconst TMP_NETTRANSPORTVALUES_UNIX = 'unix';\nconst TMP_NETTRANSPORTVALUES_PIPE = 'pipe';\nconst TMP_NETTRANSPORTVALUES_INPROC = 'inproc';\nconst TMP_NETTRANSPORTVALUES_OTHER = 'other';\n\n/**\n * Transport protocol used. See note below.\n *\n * @deprecated Use NET_TRANSPORT_VALUE_IP_TCP in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETTRANSPORTVALUES_IP_TCP = TMP_NETTRANSPORTVALUES_IP_TCP;\n\n/**\n * Transport protocol used. See note below.\n *\n * @deprecated Use NET_TRANSPORT_VALUE_IP_UDP in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETTRANSPORTVALUES_IP_UDP = TMP_NETTRANSPORTVALUES_IP_UDP;\n\n/**\n * Transport protocol used. See note below.\n *\n * @deprecated Removed in v1.21.0.\n */\nexport const NETTRANSPORTVALUES_IP = TMP_NETTRANSPORTVALUES_IP;\n\n/**\n * Transport protocol used. See note below.\n *\n * @deprecated Removed in v1.21.0.\n */\nexport const NETTRANSPORTVALUES_UNIX = TMP_NETTRANSPORTVALUES_UNIX;\n\n/**\n * Transport protocol used. See note below.\n *\n * @deprecated Use NET_TRANSPORT_VALUE_PIPE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETTRANSPORTVALUES_PIPE = TMP_NETTRANSPORTVALUES_PIPE;\n\n/**\n * Transport protocol used. See note below.\n *\n * @deprecated Use NET_TRANSPORT_VALUE_INPROC in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETTRANSPORTVALUES_INPROC = TMP_NETTRANSPORTVALUES_INPROC;\n\n/**\n * Transport protocol used. See note below.\n *\n * @deprecated Use NET_TRANSPORT_VALUE_OTHER in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETTRANSPORTVALUES_OTHER = TMP_NETTRANSPORTVALUES_OTHER;\n\n/**\n * Identifies the Values for NetTransportValues enum definition\n *\n * Transport protocol used. See note below.\n * @deprecated Use the NETTRANSPORTVALUES_XXXXX constants rather than the NetTransportValues.XXXXX for bundle minification.\n */\nexport type NetTransportValues = {\n  /** ip_tcp. */\n  IP_TCP: 'ip_tcp';\n\n  /** ip_udp. */\n  IP_UDP: 'ip_udp';\n\n  /** Another IP-based protocol. */\n  IP: 'ip';\n\n  /** Unix Domain socket. See below. */\n  UNIX: 'unix';\n\n  /** Named or anonymous pipe. See note below. */\n  PIPE: 'pipe';\n\n  /** In-process communication. */\n  INPROC: 'inproc';\n\n  /** Something else (non IP-based). */\n  OTHER: 'other';\n};\n\n/**\n * The constant map of values for NetTransportValues.\n * @deprecated Use the NETTRANSPORTVALUES_XXXXX constants rather than the NetTransportValues.XXXXX for bundle minification.\n */\nexport const NetTransportValues: NetTransportValues =\n  /*#__PURE__*/ createConstMap<NetTransportValues>([\n    TMP_NETTRANSPORTVALUES_IP_TCP,\n    TMP_NETTRANSPORTVALUES_IP_UDP,\n    TMP_NETTRANSPORTVALUES_IP,\n    TMP_NETTRANSPORTVALUES_UNIX,\n    TMP_NETTRANSPORTVALUES_PIPE,\n    TMP_NETTRANSPORTVALUES_INPROC,\n    TMP_NETTRANSPORTVALUES_OTHER,\n  ]);\n\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for NetHostConnectionTypeValues enum definition\n *\n * The internet connection type currently being used by the host.\n * ---------------------------------------------------------------------------------------------------------- */\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_NETHOSTCONNECTIONTYPEVALUES_WIFI = 'wifi';\nconst TMP_NETHOSTCONNECTIONTYPEVALUES_WIRED = 'wired';\nconst TMP_NETHOSTCONNECTIONTYPEVALUES_CELL = 'cell';\nconst TMP_NETHOSTCONNECTIONTYPEVALUES_UNAVAILABLE = 'unavailable';\nconst TMP_NETHOSTCONNECTIONTYPEVALUES_UNKNOWN = 'unknown';\n\n/**\n * The internet connection type currently being used by the host.\n *\n * @deprecated Use NETWORK_CONNECTION_TYPE_VALUE_WIFI in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONTYPEVALUES_WIFI =\n  TMP_NETHOSTCONNECTIONTYPEVALUES_WIFI;\n\n/**\n * The internet connection type currently being used by the host.\n *\n * @deprecated Use NETWORK_CONNECTION_TYPE_VALUE_WIRED in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONTYPEVALUES_WIRED =\n  TMP_NETHOSTCONNECTIONTYPEVALUES_WIRED;\n\n/**\n * The internet connection type currently being used by the host.\n *\n * @deprecated Use NETWORK_CONNECTION_TYPE_VALUE_CELL in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONTYPEVALUES_CELL =\n  TMP_NETHOSTCONNECTIONTYPEVALUES_CELL;\n\n/**\n * The internet connection type currently being used by the host.\n *\n * @deprecated Use NETWORK_CONNECTION_TYPE_VALUE_UNAVAILABLE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONTYPEVALUES_UNAVAILABLE =\n  TMP_NETHOSTCONNECTIONTYPEVALUES_UNAVAILABLE;\n\n/**\n * The internet connection type currently being used by the host.\n *\n * @deprecated Use NETWORK_CONNECTION_TYPE_VALUE_UNKNOWN in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONTYPEVALUES_UNKNOWN =\n  TMP_NETHOSTCONNECTIONTYPEVALUES_UNKNOWN;\n\n/**\n * Identifies the Values for NetHostConnectionTypeValues enum definition\n *\n * The internet connection type currently being used by the host.\n * @deprecated Use the NETHOSTCONNECTIONTYPEVALUES_XXXXX constants rather than the NetHostConnectionTypeValues.XXXXX for bundle minification.\n */\nexport type NetHostConnectionTypeValues = {\n  /** wifi. */\n  WIFI: 'wifi';\n\n  /** wired. */\n  WIRED: 'wired';\n\n  /** cell. */\n  CELL: 'cell';\n\n  /** unavailable. */\n  UNAVAILABLE: 'unavailable';\n\n  /** unknown. */\n  UNKNOWN: 'unknown';\n};\n\n/**\n * The constant map of values for NetHostConnectionTypeValues.\n * @deprecated Use the NETHOSTCONNECTIONTYPEVALUES_XXXXX constants rather than the NetHostConnectionTypeValues.XXXXX for bundle minification.\n */\nexport const NetHostConnectionTypeValues: NetHostConnectionTypeValues =\n  /*#__PURE__*/ createConstMap<NetHostConnectionTypeValues>([\n    TMP_NETHOSTCONNECTIONTYPEVALUES_WIFI,\n    TMP_NETHOSTCONNECTIONTYPEVALUES_WIRED,\n    TMP_NETHOSTCONNECTIONTYPEVALUES_CELL,\n    TMP_NETHOSTCONNECTIONTYPEVALUES_UNAVAILABLE,\n    TMP_NETHOSTCONNECTIONTYPEVALUES_UNKNOWN,\n  ]);\n\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for NetHostConnectionSubtypeValues enum definition\n *\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n * ---------------------------------------------------------------------------------------------------------- */\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_GPRS = 'gprs';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EDGE = 'edge';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_UMTS = 'umts';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_CDMA = 'cdma';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_0 = 'evdo_0';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_A = 'evdo_a';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_CDMA2000_1XRTT = 'cdma2000_1xrtt';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSDPA = 'hsdpa';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSUPA = 'hsupa';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSPA = 'hspa';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_IDEN = 'iden';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_B = 'evdo_b';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_LTE = 'lte';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EHRPD = 'ehrpd';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSPAP = 'hspap';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_GSM = 'gsm';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_TD_SCDMA = 'td_scdma';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_IWLAN = 'iwlan';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_NR = 'nr';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_NRNSA = 'nrnsa';\nconst TMP_NETHOSTCONNECTIONSUBTYPEVALUES_LTE_CA = 'lte_ca';\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_GPRS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_GPRS =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_GPRS;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_EDGE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_EDGE =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EDGE;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_UMTS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_UMTS =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_UMTS;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_CDMA in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_CDMA =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_CDMA;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_EVDO_0 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_0 =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_0;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_EVDO_A in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_A =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_A;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_CDMA2000_1XRTT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_CDMA2000_1XRTT =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_CDMA2000_1XRTT;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_HSDPA in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_HSDPA =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSDPA;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_HSUPA in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_HSUPA =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSUPA;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_HSPA in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_HSPA =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSPA;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_IDEN in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_IDEN =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_IDEN;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_EVDO_B in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_B =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_B;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_LTE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_LTE =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_LTE;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_EHRPD in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_EHRPD =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EHRPD;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_HSPAP in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_HSPAP =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSPAP;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_GSM in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_GSM =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_GSM;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_TD_SCDMA in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_TD_SCDMA =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_TD_SCDMA;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_IWLAN in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_IWLAN =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_IWLAN;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_NR in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_NR =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_NR;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_NRNSA in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_NRNSA =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_NRNSA;\n\n/**\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n *\n * @deprecated Use NETWORK_CONNECTION_SUBTYPE_VALUE_LTE_CA in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const NETHOSTCONNECTIONSUBTYPEVALUES_LTE_CA =\n  TMP_NETHOSTCONNECTIONSUBTYPEVALUES_LTE_CA;\n\n/**\n * Identifies the Values for NetHostConnectionSubtypeValues enum definition\n *\n * This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.\n * @deprecated Use the NETHOSTCONNECTIONSUBTYPEVALUES_XXXXX constants rather than the NetHostConnectionSubtypeValues.XXXXX for bundle minification.\n */\nexport type NetHostConnectionSubtypeValues = {\n  /** GPRS. */\n  GPRS: 'gprs';\n\n  /** EDGE. */\n  EDGE: 'edge';\n\n  /** UMTS. */\n  UMTS: 'umts';\n\n  /** CDMA. */\n  CDMA: 'cdma';\n\n  /** EVDO Rel. 0. */\n  EVDO_0: 'evdo_0';\n\n  /** EVDO Rev. A. */\n  EVDO_A: 'evdo_a';\n\n  /** CDMA2000 1XRTT. */\n  CDMA2000_1XRTT: 'cdma2000_1xrtt';\n\n  /** HSDPA. */\n  HSDPA: 'hsdpa';\n\n  /** HSUPA. */\n  HSUPA: 'hsupa';\n\n  /** HSPA. */\n  HSPA: 'hspa';\n\n  /** IDEN. */\n  IDEN: 'iden';\n\n  /** EVDO Rev. B. */\n  EVDO_B: 'evdo_b';\n\n  /** LTE. */\n  LTE: 'lte';\n\n  /** EHRPD. */\n  EHRPD: 'ehrpd';\n\n  /** HSPAP. */\n  HSPAP: 'hspap';\n\n  /** GSM. */\n  GSM: 'gsm';\n\n  /** TD-SCDMA. */\n  TD_SCDMA: 'td_scdma';\n\n  /** IWLAN. */\n  IWLAN: 'iwlan';\n\n  /** 5G NR (New Radio). */\n  NR: 'nr';\n\n  /** 5G NRNSA (New Radio Non-Standalone). */\n  NRNSA: 'nrnsa';\n\n  /** LTE CA. */\n  LTE_CA: 'lte_ca';\n};\n\n/**\n * The constant map of values for NetHostConnectionSubtypeValues.\n * @deprecated Use the NETHOSTCONNECTIONSUBTYPEVALUES_XXXXX constants rather than the NetHostConnectionSubtypeValues.XXXXX for bundle minification.\n */\nexport const NetHostConnectionSubtypeValues: NetHostConnectionSubtypeValues =\n  /*#__PURE__*/ createConstMap<NetHostConnectionSubtypeValues>([\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_GPRS,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EDGE,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_UMTS,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_CDMA,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_0,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_A,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_CDMA2000_1XRTT,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSDPA,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSUPA,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSPA,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_IDEN,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_B,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_LTE,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EHRPD,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSPAP,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_GSM,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_TD_SCDMA,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_IWLAN,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_NR,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_NRNSA,\n    TMP_NETHOSTCONNECTIONSUBTYPEVALUES_LTE_CA,\n  ]);\n\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for HttpFlavorValues enum definition\n *\n * Kind of HTTP protocol used.\n *\n * Note: If `net.transport` is not specified, it can be assumed to be `IP.TCP` except if `http.flavor` is `QUIC`, in which case `IP.UDP` is assumed.\n * ---------------------------------------------------------------------------------------------------------- */\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_HTTPFLAVORVALUES_HTTP_1_0 = '1.0';\nconst TMP_HTTPFLAVORVALUES_HTTP_1_1 = '1.1';\nconst TMP_HTTPFLAVORVALUES_HTTP_2_0 = '2.0';\nconst TMP_HTTPFLAVORVALUES_SPDY = 'SPDY';\nconst TMP_HTTPFLAVORVALUES_QUIC = 'QUIC';\n\n/**\n * Kind of HTTP protocol used.\n *\n * Note: If `net.transport` is not specified, it can be assumed to be `IP.TCP` except if `http.flavor` is `QUIC`, in which case `IP.UDP` is assumed.\n *\n * @deprecated Use HTTP_FLAVOR_VALUE_HTTP_1_0 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const HTTPFLAVORVALUES_HTTP_1_0 = TMP_HTTPFLAVORVALUES_HTTP_1_0;\n\n/**\n * Kind of HTTP protocol used.\n *\n * Note: If `net.transport` is not specified, it can be assumed to be `IP.TCP` except if `http.flavor` is `QUIC`, in which case `IP.UDP` is assumed.\n *\n * @deprecated Use HTTP_FLAVOR_VALUE_HTTP_1_1 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const HTTPFLAVORVALUES_HTTP_1_1 = TMP_HTTPFLAVORVALUES_HTTP_1_1;\n\n/**\n * Kind of HTTP protocol used.\n *\n * Note: If `net.transport` is not specified, it can be assumed to be `IP.TCP` except if `http.flavor` is `QUIC`, in which case `IP.UDP` is assumed.\n *\n * @deprecated Use HTTP_FLAVOR_VALUE_HTTP_2_0 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const HTTPFLAVORVALUES_HTTP_2_0 = TMP_HTTPFLAVORVALUES_HTTP_2_0;\n\n/**\n * Kind of HTTP protocol used.\n *\n * Note: If `net.transport` is not specified, it can be assumed to be `IP.TCP` except if `http.flavor` is `QUIC`, in which case `IP.UDP` is assumed.\n *\n * @deprecated Use HTTP_FLAVOR_VALUE_SPDY in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const HTTPFLAVORVALUES_SPDY = TMP_HTTPFLAVORVALUES_SPDY;\n\n/**\n * Kind of HTTP protocol used.\n *\n * Note: If `net.transport` is not specified, it can be assumed to be `IP.TCP` except if `http.flavor` is `QUIC`, in which case `IP.UDP` is assumed.\n *\n * @deprecated Use HTTP_FLAVOR_VALUE_QUIC in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const HTTPFLAVORVALUES_QUIC = TMP_HTTPFLAVORVALUES_QUIC;\n\n/**\n * Identifies the Values for HttpFlavorValues enum definition\n *\n * Kind of HTTP protocol used.\n *\n * Note: If `net.transport` is not specified, it can be assumed to be `IP.TCP` except if `http.flavor` is `QUIC`, in which case `IP.UDP` is assumed.\n * @deprecated Use the HTTPFLAVORVALUES_XXXXX constants rather than the HttpFlavorValues.XXXXX for bundle minification.\n */\nexport type HttpFlavorValues = {\n  /** HTTP 1.0. */\n  HTTP_1_0: '1.0';\n\n  /** HTTP 1.1. */\n  HTTP_1_1: '1.1';\n\n  /** HTTP 2. */\n  HTTP_2_0: '2.0';\n\n  /** SPDY protocol. */\n  SPDY: 'SPDY';\n\n  /** QUIC protocol. */\n  QUIC: 'QUIC';\n};\n\n/**\n * The constant map of values for HttpFlavorValues.\n * @deprecated Use the HTTPFLAVORVALUES_XXXXX constants rather than the HttpFlavorValues.XXXXX for bundle minification.\n */\nexport const HttpFlavorValues: HttpFlavorValues = {\n  HTTP_1_0: TMP_HTTPFLAVORVALUES_HTTP_1_0,\n  HTTP_1_1: TMP_HTTPFLAVORVALUES_HTTP_1_1,\n  HTTP_2_0: TMP_HTTPFLAVORVALUES_HTTP_2_0,\n  SPDY: TMP_HTTPFLAVORVALUES_SPDY,\n  QUIC: TMP_HTTPFLAVORVALUES_QUIC,\n};\n\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for MessagingDestinationKindValues enum definition\n *\n * The kind of message destination.\n * ---------------------------------------------------------------------------------------------------------- */\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_MESSAGINGDESTINATIONKINDVALUES_QUEUE = 'queue';\nconst TMP_MESSAGINGDESTINATIONKINDVALUES_TOPIC = 'topic';\n\n/**\n * The kind of message destination.\n *\n * @deprecated Removed in semconv v1.20.0.\n */\nexport const MESSAGINGDESTINATIONKINDVALUES_QUEUE =\n  TMP_MESSAGINGDESTINATIONKINDVALUES_QUEUE;\n\n/**\n * The kind of message destination.\n *\n * @deprecated Removed in semconv v1.20.0.\n */\nexport const MESSAGINGDESTINATIONKINDVALUES_TOPIC =\n  TMP_MESSAGINGDESTINATIONKINDVALUES_TOPIC;\n\n/**\n * Identifies the Values for MessagingDestinationKindValues enum definition\n *\n * The kind of message destination.\n * @deprecated Use the MESSAGINGDESTINATIONKINDVALUES_XXXXX constants rather than the MessagingDestinationKindValues.XXXXX for bundle minification.\n */\nexport type MessagingDestinationKindValues = {\n  /** A message sent to a queue. */\n  QUEUE: 'queue';\n\n  /** A message sent to a topic. */\n  TOPIC: 'topic';\n};\n\n/**\n * The constant map of values for MessagingDestinationKindValues.\n * @deprecated Use the MESSAGINGDESTINATIONKINDVALUES_XXXXX constants rather than the MessagingDestinationKindValues.XXXXX for bundle minification.\n */\nexport const MessagingDestinationKindValues: MessagingDestinationKindValues =\n  /*#__PURE__*/ createConstMap<MessagingDestinationKindValues>([\n    TMP_MESSAGINGDESTINATIONKINDVALUES_QUEUE,\n    TMP_MESSAGINGDESTINATIONKINDVALUES_TOPIC,\n  ]);\n\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for MessagingOperationValues enum definition\n *\n * A string identifying the kind of message consumption as defined in the [Operation names](#operation-names) section above. If the operation is &#34;send&#34;, this attribute MUST NOT be set, since the operation can be inferred from the span kind in that case.\n * ---------------------------------------------------------------------------------------------------------- */\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_MESSAGINGOPERATIONVALUES_RECEIVE = 'receive';\nconst TMP_MESSAGINGOPERATIONVALUES_PROCESS = 'process';\n\n/**\n * A string identifying the kind of message consumption as defined in the [Operation names](#operation-names) section above. If the operation is &#34;send&#34;, this attribute MUST NOT be set, since the operation can be inferred from the span kind in that case.\n *\n * @deprecated Use MESSAGING_OPERATION_TYPE_VALUE_RECEIVE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const MESSAGINGOPERATIONVALUES_RECEIVE =\n  TMP_MESSAGINGOPERATIONVALUES_RECEIVE;\n\n/**\n * A string identifying the kind of message consumption as defined in the [Operation names](#operation-names) section above. If the operation is &#34;send&#34;, this attribute MUST NOT be set, since the operation can be inferred from the span kind in that case.\n *\n * @deprecated Use MESSAGING_OPERATION_TYPE_VALUE_PROCESS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const MESSAGINGOPERATIONVALUES_PROCESS =\n  TMP_MESSAGINGOPERATIONVALUES_PROCESS;\n\n/**\n * Identifies the Values for MessagingOperationValues enum definition\n *\n * A string identifying the kind of message consumption as defined in the [Operation names](#operation-names) section above. If the operation is &#34;send&#34;, this attribute MUST NOT be set, since the operation can be inferred from the span kind in that case.\n * @deprecated Use the MESSAGINGOPERATIONVALUES_XXXXX constants rather than the MessagingOperationValues.XXXXX for bundle minification.\n */\nexport type MessagingOperationValues = {\n  /** receive. */\n  RECEIVE: 'receive';\n\n  /** process. */\n  PROCESS: 'process';\n};\n\n/**\n * The constant map of values for MessagingOperationValues.\n * @deprecated Use the MESSAGINGOPERATIONVALUES_XXXXX constants rather than the MessagingOperationValues.XXXXX for bundle minification.\n */\nexport const MessagingOperationValues: MessagingOperationValues =\n  /*#__PURE__*/ createConstMap<MessagingOperationValues>([\n    TMP_MESSAGINGOPERATIONVALUES_RECEIVE,\n    TMP_MESSAGINGOPERATIONVALUES_PROCESS,\n  ]);\n\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for RpcGrpcStatusCodeValues enum definition\n *\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n * ---------------------------------------------------------------------------------------------------------- */\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_RPCGRPCSTATUSCODEVALUES_OK = 0;\nconst TMP_RPCGRPCSTATUSCODEVALUES_CANCELLED = 1;\nconst TMP_RPCGRPCSTATUSCODEVALUES_UNKNOWN = 2;\nconst TMP_RPCGRPCSTATUSCODEVALUES_INVALID_ARGUMENT = 3;\nconst TMP_RPCGRPCSTATUSCODEVALUES_DEADLINE_EXCEEDED = 4;\nconst TMP_RPCGRPCSTATUSCODEVALUES_NOT_FOUND = 5;\nconst TMP_RPCGRPCSTATUSCODEVALUES_ALREADY_EXISTS = 6;\nconst TMP_RPCGRPCSTATUSCODEVALUES_PERMISSION_DENIED = 7;\nconst TMP_RPCGRPCSTATUSCODEVALUES_RESOURCE_EXHAUSTED = 8;\nconst TMP_RPCGRPCSTATUSCODEVALUES_FAILED_PRECONDITION = 9;\nconst TMP_RPCGRPCSTATUSCODEVALUES_ABORTED = 10;\nconst TMP_RPCGRPCSTATUSCODEVALUES_OUT_OF_RANGE = 11;\nconst TMP_RPCGRPCSTATUSCODEVALUES_UNIMPLEMENTED = 12;\nconst TMP_RPCGRPCSTATUSCODEVALUES_INTERNAL = 13;\nconst TMP_RPCGRPCSTATUSCODEVALUES_UNAVAILABLE = 14;\nconst TMP_RPCGRPCSTATUSCODEVALUES_DATA_LOSS = 15;\nconst TMP_RPCGRPCSTATUSCODEVALUES_UNAUTHENTICATED = 16;\n\n/**\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n *\n * @deprecated Use RPC_GRPC_STATUS_CODE_VALUE_OK in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const RPCGRPCSTATUSCODEVALUES_OK = TMP_RPCGRPCSTATUSCODEVALUES_OK;\n\n/**\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n *\n * @deprecated Use RPC_GRPC_STATUS_CODE_VALUE_CANCELLED in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const RPCGRPCSTATUSCODEVALUES_CANCELLED =\n  TMP_RPCGRPCSTATUSCODEVALUES_CANCELLED;\n\n/**\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n *\n * @deprecated Use RPC_GRPC_STATUS_CODE_VALUE_UNKNOWN in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const RPCGRPCSTATUSCODEVALUES_UNKNOWN =\n  TMP_RPCGRPCSTATUSCODEVALUES_UNKNOWN;\n\n/**\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n *\n * @deprecated Use RPC_GRPC_STATUS_CODE_VALUE_INVALID_ARGUMENT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const RPCGRPCSTATUSCODEVALUES_INVALID_ARGUMENT =\n  TMP_RPCGRPCSTATUSCODEVALUES_INVALID_ARGUMENT;\n\n/**\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n *\n * @deprecated Use RPC_GRPC_STATUS_CODE_VALUE_DEADLINE_EXCEEDED in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const RPCGRPCSTATUSCODEVALUES_DEADLINE_EXCEEDED =\n  TMP_RPCGRPCSTATUSCODEVALUES_DEADLINE_EXCEEDED;\n\n/**\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n *\n * @deprecated Use RPC_GRPC_STATUS_CODE_VALUE_NOT_FOUND in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const RPCGRPCSTATUSCODEVALUES_NOT_FOUND =\n  TMP_RPCGRPCSTATUSCODEVALUES_NOT_FOUND;\n\n/**\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n *\n * @deprecated Use RPC_GRPC_STATUS_CODE_VALUE_ALREADY_EXISTS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const RPCGRPCSTATUSCODEVALUES_ALREADY_EXISTS =\n  TMP_RPCGRPCSTATUSCODEVALUES_ALREADY_EXISTS;\n\n/**\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n *\n * @deprecated Use RPC_GRPC_STATUS_CODE_VALUE_PERMISSION_DENIED in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const RPCGRPCSTATUSCODEVALUES_PERMISSION_DENIED =\n  TMP_RPCGRPCSTATUSCODEVALUES_PERMISSION_DENIED;\n\n/**\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n *\n * @deprecated Use RPC_GRPC_STATUS_CODE_VALUE_RESOURCE_EXHAUSTED in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const RPCGRPCSTATUSCODEVALUES_RESOURCE_EXHAUSTED =\n  TMP_RPCGRPCSTATUSCODEVALUES_RESOURCE_EXHAUSTED;\n\n/**\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n *\n * @deprecated Use RPC_GRPC_STATUS_CODE_VALUE_FAILED_PRECONDITION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const RPCGRPCSTATUSCODEVALUES_FAILED_PRECONDITION =\n  TMP_RPCGRPCSTATUSCODEVALUES_FAILED_PRECONDITION;\n\n/**\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n *\n * @deprecated Use RPC_GRPC_STATUS_CODE_VALUE_ABORTED in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const RPCGRPCSTATUSCODEVALUES_ABORTED =\n  TMP_RPCGRPCSTATUSCODEVALUES_ABORTED;\n\n/**\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n *\n * @deprecated Use RPC_GRPC_STATUS_CODE_VALUE_OUT_OF_RANGE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const RPCGRPCSTATUSCODEVALUES_OUT_OF_RANGE =\n  TMP_RPCGRPCSTATUSCODEVALUES_OUT_OF_RANGE;\n\n/**\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n *\n * @deprecated Use RPC_GRPC_STATUS_CODE_VALUE_UNIMPLEMENTED in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const RPCGRPCSTATUSCODEVALUES_UNIMPLEMENTED =\n  TMP_RPCGRPCSTATUSCODEVALUES_UNIMPLEMENTED;\n\n/**\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n *\n * @deprecated Use RPC_GRPC_STATUS_CODE_VALUE_INTERNAL in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const RPCGRPCSTATUSCODEVALUES_INTERNAL =\n  TMP_RPCGRPCSTATUSCODEVALUES_INTERNAL;\n\n/**\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n *\n * @deprecated Use RPC_GRPC_STATUS_CODE_VALUE_UNAVAILABLE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const RPCGRPCSTATUSCODEVALUES_UNAVAILABLE =\n  TMP_RPCGRPCSTATUSCODEVALUES_UNAVAILABLE;\n\n/**\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n *\n * @deprecated Use RPC_GRPC_STATUS_CODE_VALUE_DATA_LOSS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const RPCGRPCSTATUSCODEVALUES_DATA_LOSS =\n  TMP_RPCGRPCSTATUSCODEVALUES_DATA_LOSS;\n\n/**\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n *\n * @deprecated Use RPC_GRPC_STATUS_CODE_VALUE_UNAUTHENTICATED in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const RPCGRPCSTATUSCODEVALUES_UNAUTHENTICATED =\n  TMP_RPCGRPCSTATUSCODEVALUES_UNAUTHENTICATED;\n\n/**\n * Identifies the Values for RpcGrpcStatusCodeValues enum definition\n *\n * The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.\n * @deprecated Use the RPCGRPCSTATUSCODEVALUES_XXXXX constants rather than the RpcGrpcStatusCodeValues.XXXXX for bundle minification.\n */\nexport type RpcGrpcStatusCodeValues = {\n  /** OK. */\n  OK: 0;\n\n  /** CANCELLED. */\n  CANCELLED: 1;\n\n  /** UNKNOWN. */\n  UNKNOWN: 2;\n\n  /** INVALID_ARGUMENT. */\n  INVALID_ARGUMENT: 3;\n\n  /** DEADLINE_EXCEEDED. */\n  DEADLINE_EXCEEDED: 4;\n\n  /** NOT_FOUND. */\n  NOT_FOUND: 5;\n\n  /** ALREADY_EXISTS. */\n  ALREADY_EXISTS: 6;\n\n  /** PERMISSION_DENIED. */\n  PERMISSION_DENIED: 7;\n\n  /** RESOURCE_EXHAUSTED. */\n  RESOURCE_EXHAUSTED: 8;\n\n  /** FAILED_PRECONDITION. */\n  FAILED_PRECONDITION: 9;\n\n  /** ABORTED. */\n  ABORTED: 10;\n\n  /** OUT_OF_RANGE. */\n  OUT_OF_RANGE: 11;\n\n  /** UNIMPLEMENTED. */\n  UNIMPLEMENTED: 12;\n\n  /** INTERNAL. */\n  INTERNAL: 13;\n\n  /** UNAVAILABLE. */\n  UNAVAILABLE: 14;\n\n  /** DATA_LOSS. */\n  DATA_LOSS: 15;\n\n  /** UNAUTHENTICATED. */\n  UNAUTHENTICATED: 16;\n};\n\n/**\n * The constant map of values for RpcGrpcStatusCodeValues.\n * @deprecated Use the RPCGRPCSTATUSCODEVALUES_XXXXX constants rather than the RpcGrpcStatusCodeValues.XXXXX for bundle minification.\n */\nexport const RpcGrpcStatusCodeValues: RpcGrpcStatusCodeValues = {\n  OK: TMP_RPCGRPCSTATUSCODEVALUES_OK,\n  CANCELLED: TMP_RPCGRPCSTATUSCODEVALUES_CANCELLED,\n  UNKNOWN: TMP_RPCGRPCSTATUSCODEVALUES_UNKNOWN,\n  INVALID_ARGUMENT: TMP_RPCGRPCSTATUSCODEVALUES_INVALID_ARGUMENT,\n  DEADLINE_EXCEEDED: TMP_RPCGRPCSTATUSCODEVALUES_DEADLINE_EXCEEDED,\n  NOT_FOUND: TMP_RPCGRPCSTATUSCODEVALUES_NOT_FOUND,\n  ALREADY_EXISTS: TMP_RPCGRPCSTATUSCODEVALUES_ALREADY_EXISTS,\n  PERMISSION_DENIED: TMP_RPCGRPCSTATUSCODEVALUES_PERMISSION_DENIED,\n  RESOURCE_EXHAUSTED: TMP_RPCGRPCSTATUSCODEVALUES_RESOURCE_EXHAUSTED,\n  FAILED_PRECONDITION: TMP_RPCGRPCSTATUSCODEVALUES_FAILED_PRECONDITION,\n  ABORTED: TMP_RPCGRPCSTATUSCODEVALUES_ABORTED,\n  OUT_OF_RANGE: TMP_RPCGRPCSTATUSCODEVALUES_OUT_OF_RANGE,\n  UNIMPLEMENTED: TMP_RPCGRPCSTATUSCODEVALUES_UNIMPLEMENTED,\n  INTERNAL: TMP_RPCGRPCSTATUSCODEVALUES_INTERNAL,\n  UNAVAILABLE: TMP_RPCGRPCSTATUSCODEVALUES_UNAVAILABLE,\n  DATA_LOSS: TMP_RPCGRPCSTATUSCODEVALUES_DATA_LOSS,\n  UNAUTHENTICATED: TMP_RPCGRPCSTATUSCODEVALUES_UNAUTHENTICATED,\n};\n\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for MessageTypeValues enum definition\n *\n * Whether this is a received or sent message.\n * ---------------------------------------------------------------------------------------------------------- */\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_MESSAGETYPEVALUES_SENT = 'SENT';\nconst TMP_MESSAGETYPEVALUES_RECEIVED = 'RECEIVED';\n\n/**\n * Whether this is a received or sent message.\n *\n * @deprecated Use MESSAGE_TYPE_VALUE_SENT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const MESSAGETYPEVALUES_SENT = TMP_MESSAGETYPEVALUES_SENT;\n\n/**\n * Whether this is a received or sent message.\n *\n * @deprecated Use MESSAGE_TYPE_VALUE_RECEIVED in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const MESSAGETYPEVALUES_RECEIVED = TMP_MESSAGETYPEVALUES_RECEIVED;\n\n/**\n * Identifies the Values for MessageTypeValues enum definition\n *\n * Whether this is a received or sent message.\n * @deprecated Use the MESSAGETYPEVALUES_XXXXX constants rather than the MessageTypeValues.XXXXX for bundle minification.\n */\nexport type MessageTypeValues = {\n  /** sent. */\n  SENT: 'SENT';\n\n  /** received. */\n  RECEIVED: 'RECEIVED';\n};\n\n/**\n * The constant map of values for MessageTypeValues.\n * @deprecated Use the MESSAGETYPEVALUES_XXXXX constants rather than the MessageTypeValues.XXXXX for bundle minification.\n */\nexport const MessageTypeValues: MessageTypeValues =\n  /*#__PURE__*/ createConstMap<MessageTypeValues>([\n    TMP_MESSAGETYPEVALUES_SENT,\n    TMP_MESSAGETYPEVALUES_RECEIVED,\n  ]);\n", "/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-restricted-syntax --\n * These re-exports are only of constants, only one-level deep at this point,\n * and should not cause problems for tree-shakers.\n */\nexport * from './SemanticAttributes';\n", "/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createConstMap } from '../internal/utils';\n\n//----------------------------------------------------------------------------------------------------------\n// DO NOT EDIT, this is an Auto-generated file from scripts/semconv/templates//templates/SemanticAttributes.ts.j2\n//----------------------------------------------------------------------------------------------------------\n\n//----------------------------------------------------------------------------------------------------------\n// Constant values for SemanticResourceAttributes\n//----------------------------------------------------------------------------------------------------------\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_CLOUD_PROVIDER = 'cloud.provider';\nconst TMP_CLOUD_ACCOUNT_ID = 'cloud.account.id';\nconst TMP_CLOUD_REGION = 'cloud.region';\nconst TMP_CLOUD_AVAILABILITY_ZONE = 'cloud.availability_zone';\nconst TMP_CLOUD_PLATFORM = 'cloud.platform';\nconst TMP_AWS_ECS_CONTAINER_ARN = 'aws.ecs.container.arn';\nconst TMP_AWS_ECS_CLUSTER_ARN = 'aws.ecs.cluster.arn';\nconst TMP_AWS_ECS_LAUNCHTYPE = 'aws.ecs.launchtype';\nconst TMP_AWS_ECS_TASK_ARN = 'aws.ecs.task.arn';\nconst TMP_AWS_ECS_TASK_FAMILY = 'aws.ecs.task.family';\nconst TMP_AWS_ECS_TASK_REVISION = 'aws.ecs.task.revision';\nconst TMP_AWS_EKS_CLUSTER_ARN = 'aws.eks.cluster.arn';\nconst TMP_AWS_LOG_GROUP_NAMES = 'aws.log.group.names';\nconst TMP_AWS_LOG_GROUP_ARNS = 'aws.log.group.arns';\nconst TMP_AWS_LOG_STREAM_NAMES = 'aws.log.stream.names';\nconst TMP_AWS_LOG_STREAM_ARNS = 'aws.log.stream.arns';\nconst TMP_CONTAINER_NAME = 'container.name';\nconst TMP_CONTAINER_ID = 'container.id';\nconst TMP_CONTAINER_RUNTIME = 'container.runtime';\nconst TMP_CONTAINER_IMAGE_NAME = 'container.image.name';\nconst TMP_CONTAINER_IMAGE_TAG = 'container.image.tag';\nconst TMP_DEPLOYMENT_ENVIRONMENT = 'deployment.environment';\nconst TMP_DEVICE_ID = 'device.id';\nconst TMP_DEVICE_MODEL_IDENTIFIER = 'device.model.identifier';\nconst TMP_DEVICE_MODEL_NAME = 'device.model.name';\nconst TMP_FAAS_NAME = 'faas.name';\nconst TMP_FAAS_ID = 'faas.id';\nconst TMP_FAAS_VERSION = 'faas.version';\nconst TMP_FAAS_INSTANCE = 'faas.instance';\nconst TMP_FAAS_MAX_MEMORY = 'faas.max_memory';\nconst TMP_HOST_ID = 'host.id';\nconst TMP_HOST_NAME = 'host.name';\nconst TMP_HOST_TYPE = 'host.type';\nconst TMP_HOST_ARCH = 'host.arch';\nconst TMP_HOST_IMAGE_NAME = 'host.image.name';\nconst TMP_HOST_IMAGE_ID = 'host.image.id';\nconst TMP_HOST_IMAGE_VERSION = 'host.image.version';\nconst TMP_K8S_CLUSTER_NAME = 'k8s.cluster.name';\nconst TMP_K8S_NODE_NAME = 'k8s.node.name';\nconst TMP_K8S_NODE_UID = 'k8s.node.uid';\nconst TMP_K8S_NAMESPACE_NAME = 'k8s.namespace.name';\nconst TMP_K8S_POD_UID = 'k8s.pod.uid';\nconst TMP_K8S_POD_NAME = 'k8s.pod.name';\nconst TMP_K8S_CONTAINER_NAME = 'k8s.container.name';\nconst TMP_K8S_REPLICASET_UID = 'k8s.replicaset.uid';\nconst TMP_K8S_REPLICASET_NAME = 'k8s.replicaset.name';\nconst TMP_K8S_DEPLOYMENT_UID = 'k8s.deployment.uid';\nconst TMP_K8S_DEPLOYMENT_NAME = 'k8s.deployment.name';\nconst TMP_K8S_STATEFULSET_UID = 'k8s.statefulset.uid';\nconst TMP_K8S_STATEFULSET_NAME = 'k8s.statefulset.name';\nconst TMP_K8S_DAEMONSET_UID = 'k8s.daemonset.uid';\nconst TMP_K8S_DAEMONSET_NAME = 'k8s.daemonset.name';\nconst TMP_K8S_JOB_UID = 'k8s.job.uid';\nconst TMP_K8S_JOB_NAME = 'k8s.job.name';\nconst TMP_K8S_CRONJOB_UID = 'k8s.cronjob.uid';\nconst TMP_K8S_CRONJOB_NAME = 'k8s.cronjob.name';\nconst TMP_OS_TYPE = 'os.type';\nconst TMP_OS_DESCRIPTION = 'os.description';\nconst TMP_OS_NAME = 'os.name';\nconst TMP_OS_VERSION = 'os.version';\nconst TMP_PROCESS_PID = 'process.pid';\nconst TMP_PROCESS_EXECUTABLE_NAME = 'process.executable.name';\nconst TMP_PROCESS_EXECUTABLE_PATH = 'process.executable.path';\nconst TMP_PROCESS_COMMAND = 'process.command';\nconst TMP_PROCESS_COMMAND_LINE = 'process.command_line';\nconst TMP_PROCESS_COMMAND_ARGS = 'process.command_args';\nconst TMP_PROCESS_OWNER = 'process.owner';\nconst TMP_PROCESS_RUNTIME_NAME = 'process.runtime.name';\nconst TMP_PROCESS_RUNTIME_VERSION = 'process.runtime.version';\nconst TMP_PROCESS_RUNTIME_DESCRIPTION = 'process.runtime.description';\nconst TMP_SERVICE_NAME = 'service.name';\nconst TMP_SERVICE_NAMESPACE = 'service.namespace';\nconst TMP_SERVICE_INSTANCE_ID = 'service.instance.id';\nconst TMP_SERVICE_VERSION = 'service.version';\nconst TMP_TELEMETRY_SDK_NAME = 'telemetry.sdk.name';\nconst TMP_TELEMETRY_SDK_LANGUAGE = 'telemetry.sdk.language';\nconst TMP_TELEMETRY_SDK_VERSION = 'telemetry.sdk.version';\nconst TMP_TELEMETRY_AUTO_VERSION = 'telemetry.auto.version';\nconst TMP_WEBENGINE_NAME = 'webengine.name';\nconst TMP_WEBENGINE_VERSION = 'webengine.version';\nconst TMP_WEBENGINE_DESCRIPTION = 'webengine.description';\n\n/**\n * Name of the cloud provider.\n *\n * @deprecated Use ATTR_CLOUD_PROVIDER in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CLOUD_PROVIDER = TMP_CLOUD_PROVIDER;\n\n/**\n * The cloud account ID the resource is assigned to.\n *\n * @deprecated Use ATTR_CLOUD_ACCOUNT_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CLOUD_ACCOUNT_ID = TMP_CLOUD_ACCOUNT_ID;\n\n/**\n * The geographical region the resource is running. Refer to your provider&#39;s docs to see the available regions, for example [Alibaba Cloud regions](https://www.alibabacloud.com/help/doc-detail/40654.htm), [AWS regions](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/), [Azure regions](https://azure.microsoft.com/en-us/global-infrastructure/geographies/), or [Google Cloud regions](https://cloud.google.com/about/locations).\n *\n * @deprecated Use ATTR_CLOUD_REGION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CLOUD_REGION = TMP_CLOUD_REGION;\n\n/**\n * Cloud regions often have multiple, isolated locations known as zones to increase availability. Availability zone represents the zone where the resource is running.\n *\n * Note: Availability zones are called &#34;zones&#34; on Alibaba Cloud and Google Cloud.\n *\n * @deprecated Use ATTR_CLOUD_AVAILABILITY_ZONE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CLOUD_AVAILABILITY_ZONE = TMP_CLOUD_AVAILABILITY_ZONE;\n\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use ATTR_CLOUD_PLATFORM in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CLOUD_PLATFORM = TMP_CLOUD_PLATFORM;\n\n/**\n * The Amazon Resource Name (ARN) of an [ECS container instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html).\n *\n * @deprecated Use ATTR_AWS_ECS_CONTAINER_ARN in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_ECS_CONTAINER_ARN = TMP_AWS_ECS_CONTAINER_ARN;\n\n/**\n * The ARN of an [ECS cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html).\n *\n * @deprecated Use ATTR_AWS_ECS_CLUSTER_ARN in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_ECS_CLUSTER_ARN = TMP_AWS_ECS_CLUSTER_ARN;\n\n/**\n * The [launch type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) for an ECS task.\n *\n * @deprecated Use ATTR_AWS_ECS_LAUNCHTYPE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_ECS_LAUNCHTYPE = TMP_AWS_ECS_LAUNCHTYPE;\n\n/**\n * The ARN of an [ECS task definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html).\n *\n * @deprecated Use ATTR_AWS_ECS_TASK_ARN in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_ECS_TASK_ARN = TMP_AWS_ECS_TASK_ARN;\n\n/**\n * The task definition family this task definition is a member of.\n *\n * @deprecated Use ATTR_AWS_ECS_TASK_FAMILY in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_ECS_TASK_FAMILY = TMP_AWS_ECS_TASK_FAMILY;\n\n/**\n * The revision for this task definition.\n *\n * @deprecated Use ATTR_AWS_ECS_TASK_REVISION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_ECS_TASK_REVISION = TMP_AWS_ECS_TASK_REVISION;\n\n/**\n * The ARN of an EKS cluster.\n *\n * @deprecated Use ATTR_AWS_EKS_CLUSTER_ARN in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_EKS_CLUSTER_ARN = TMP_AWS_EKS_CLUSTER_ARN;\n\n/**\n * The name(s) of the AWS log group(s) an application is writing to.\n *\n * Note: Multiple log groups must be supported for cases like multi-container applications, where a single application has sidecar containers, and each write to their own log group.\n *\n * @deprecated Use ATTR_AWS_LOG_GROUP_NAMES in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_LOG_GROUP_NAMES = TMP_AWS_LOG_GROUP_NAMES;\n\n/**\n * The Amazon Resource Name(s) (ARN) of the AWS log group(s).\n *\n * Note: See the [log group ARN format documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format).\n *\n * @deprecated Use ATTR_AWS_LOG_GROUP_ARNS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_LOG_GROUP_ARNS = TMP_AWS_LOG_GROUP_ARNS;\n\n/**\n * The name(s) of the AWS log stream(s) an application is writing to.\n *\n * @deprecated Use ATTR_AWS_LOG_STREAM_NAMES in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_LOG_STREAM_NAMES = TMP_AWS_LOG_STREAM_NAMES;\n\n/**\n * The ARN(s) of the AWS log stream(s).\n *\n * Note: See the [log stream ARN format documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format). One log group can contain several log streams, so these ARNs necessarily identify both a log group and a log stream.\n *\n * @deprecated Use ATTR_AWS_LOG_STREAM_ARNS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_LOG_STREAM_ARNS = TMP_AWS_LOG_STREAM_ARNS;\n\n/**\n * Container name.\n *\n * @deprecated Use ATTR_CONTAINER_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CONTAINER_NAME = TMP_CONTAINER_NAME;\n\n/**\n * Container ID. Usually a UUID, as for example used to [identify Docker containers](https://docs.docker.com/engine/reference/run/#container-identification). The UUID might be abbreviated.\n *\n * @deprecated Use ATTR_CONTAINER_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CONTAINER_ID = TMP_CONTAINER_ID;\n\n/**\n * The container runtime managing this container.\n *\n * @deprecated Use ATTR_CONTAINER_RUNTIME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CONTAINER_RUNTIME = TMP_CONTAINER_RUNTIME;\n\n/**\n * Name of the image the container was built on.\n *\n * @deprecated Use ATTR_CONTAINER_IMAGE_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CONTAINER_IMAGE_NAME = TMP_CONTAINER_IMAGE_NAME;\n\n/**\n * Container image tag.\n *\n * @deprecated Use ATTR_CONTAINER_IMAGE_TAGS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CONTAINER_IMAGE_TAG = TMP_CONTAINER_IMAGE_TAG;\n\n/**\n * Name of the [deployment environment](https://en.wikipedia.org/wiki/Deployment_environment) (aka deployment tier).\n *\n * @deprecated Use ATTR_DEPLOYMENT_ENVIRONMENT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_DEPLOYMENT_ENVIRONMENT = TMP_DEPLOYMENT_ENVIRONMENT;\n\n/**\n * A unique identifier representing the device.\n *\n * Note: The device identifier MUST only be defined using the values outlined below. This value is not an advertising identifier and MUST NOT be used as such. On iOS (Swift or Objective-C), this value MUST be equal to the [vendor identifier](https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor). On Android (Java or Kotlin), this value MUST be equal to the Firebase Installation ID or a globally unique UUID which is persisted across sessions in your application. More information can be found [here](https://developer.android.com/training/articles/user-data-ids) on best practices and exact implementation details. Caution should be taken when storing personal data or anything which can identify a user. GDPR and data protection laws may apply, ensure you do your own due diligence.\n *\n * @deprecated Use ATTR_DEVICE_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_DEVICE_ID = TMP_DEVICE_ID;\n\n/**\n * The model identifier for the device.\n *\n * Note: It&#39;s recommended this value represents a machine readable version of the model identifier rather than the market or consumer-friendly name of the device.\n *\n * @deprecated Use ATTR_DEVICE_MODEL_IDENTIFIER in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_DEVICE_MODEL_IDENTIFIER = TMP_DEVICE_MODEL_IDENTIFIER;\n\n/**\n * The marketing name for the device model.\n *\n * Note: It&#39;s recommended this value represents a human readable version of the device model rather than a machine readable alternative.\n *\n * @deprecated Use ATTR_DEVICE_MODEL_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_DEVICE_MODEL_NAME = TMP_DEVICE_MODEL_NAME;\n\n/**\n * The name of the single function that this runtime instance executes.\n *\n * Note: This is the name of the function as configured/deployed on the FaaS platform and is usually different from the name of the callback function (which may be stored in the [`code.namespace`/`code.function`](../../trace/semantic_conventions/span-general.md#source-code-attributes) span attributes).\n *\n * @deprecated Use ATTR_FAAS_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_FAAS_NAME = TMP_FAAS_NAME;\n\n/**\n* The unique ID of the single function that this runtime instance executes.\n*\n* Note: Depending on the cloud provider, use:\n\n* **AWS Lambda:** The function [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).\nTake care not to use the &#34;invoked ARN&#34; directly but replace any\n[alias suffix](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) with the resolved function version, as the same runtime instance may be invokable with multiple\ndifferent aliases.\n* **GCP:** The [URI of the resource](https://cloud.google.com/iam/docs/full-resource-names)\n* **Azure:** The [Fully Qualified Resource ID](https://docs.microsoft.com/en-us/rest/api/resources/resources/get-by-id).\n\nOn some providers, it may not be possible to determine the full ID at startup,\nwhich is why this field cannot be made required. For example, on AWS the account ID\npart of the ARN is not available without calling another AWS API\nwhich may be deemed too slow for a short-running lambda function.\nAs an alternative, consider setting `faas.id` as a span attribute instead.\n*\n* @deprecated Use ATTR_CLOUD_RESOURCE_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n*/\nexport const SEMRESATTRS_FAAS_ID = TMP_FAAS_ID;\n\n/**\n* The immutable version of the function being executed.\n*\n* Note: Depending on the cloud provider and platform, use:\n\n* **AWS Lambda:** The [function version](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html)\n  (an integer represented as a decimal string).\n* **Google Cloud Run:** The [revision](https://cloud.google.com/run/docs/managing/revisions)\n  (i.e., the function name plus the revision suffix).\n* **Google Cloud Functions:** The value of the\n  [`K_REVISION` environment variable](https://cloud.google.com/functions/docs/env-var#runtime_environment_variables_set_automatically).\n* **Azure Functions:** Not applicable. Do not set this attribute.\n*\n* @deprecated Use ATTR_FAAS_VERSION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n*/\nexport const SEMRESATTRS_FAAS_VERSION = TMP_FAAS_VERSION;\n\n/**\n * The execution environment ID as a string, that will be potentially reused for other invocations to the same function/function version.\n *\n * Note: * **AWS Lambda:** Use the (full) log stream name.\n *\n * @deprecated Use ATTR_FAAS_INSTANCE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_FAAS_INSTANCE = TMP_FAAS_INSTANCE;\n\n/**\n * The amount of memory available to the serverless function in MiB.\n *\n * Note: It&#39;s recommended to set this attribute since e.g. too little memory can easily stop a Java AWS Lambda function from working correctly. On AWS Lambda, the environment variable `AWS_LAMBDA_FUNCTION_MEMORY_SIZE` provides this information.\n *\n * @deprecated Use ATTR_FAAS_MAX_MEMORY in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_FAAS_MAX_MEMORY = TMP_FAAS_MAX_MEMORY;\n\n/**\n * Unique host ID. For Cloud, this must be the instance_id assigned by the cloud provider.\n *\n * @deprecated Use ATTR_HOST_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_HOST_ID = TMP_HOST_ID;\n\n/**\n * Name of the host. On Unix systems, it may contain what the hostname command returns, or the fully qualified hostname, or another name specified by the user.\n *\n * @deprecated Use ATTR_HOST_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_HOST_NAME = TMP_HOST_NAME;\n\n/**\n * Type of host. For Cloud, this must be the machine type.\n *\n * @deprecated Use ATTR_HOST_TYPE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_HOST_TYPE = TMP_HOST_TYPE;\n\n/**\n * The CPU architecture the host system is running on.\n *\n * @deprecated Use ATTR_HOST_ARCH in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_HOST_ARCH = TMP_HOST_ARCH;\n\n/**\n * Name of the VM image or OS install the host was instantiated from.\n *\n * @deprecated Use ATTR_HOST_IMAGE_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_HOST_IMAGE_NAME = TMP_HOST_IMAGE_NAME;\n\n/**\n * VM image ID. For Cloud, this value is from the provider.\n *\n * @deprecated Use ATTR_HOST_IMAGE_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_HOST_IMAGE_ID = TMP_HOST_IMAGE_ID;\n\n/**\n * The version string of the VM image as defined in [Version Attributes](README.md#version-attributes).\n *\n * @deprecated Use ATTR_HOST_IMAGE_VERSION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_HOST_IMAGE_VERSION = TMP_HOST_IMAGE_VERSION;\n\n/**\n * The name of the cluster.\n *\n * @deprecated Use ATTR_K8S_CLUSTER_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_CLUSTER_NAME = TMP_K8S_CLUSTER_NAME;\n\n/**\n * The name of the Node.\n *\n * @deprecated Use ATTR_K8S_NODE_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_NODE_NAME = TMP_K8S_NODE_NAME;\n\n/**\n * The UID of the Node.\n *\n * @deprecated Use ATTR_K8S_NODE_UID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_NODE_UID = TMP_K8S_NODE_UID;\n\n/**\n * The name of the namespace that the pod is running in.\n *\n * @deprecated Use ATTR_K8S_NAMESPACE_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_NAMESPACE_NAME = TMP_K8S_NAMESPACE_NAME;\n\n/**\n * The UID of the Pod.\n *\n * @deprecated Use ATTR_K8S_POD_UID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_POD_UID = TMP_K8S_POD_UID;\n\n/**\n * The name of the Pod.\n *\n * @deprecated Use ATTR_K8S_POD_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_POD_NAME = TMP_K8S_POD_NAME;\n\n/**\n * The name of the Container in a Pod template.\n *\n * @deprecated Use ATTR_K8S_CONTAINER_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_CONTAINER_NAME = TMP_K8S_CONTAINER_NAME;\n\n/**\n * The UID of the ReplicaSet.\n *\n * @deprecated Use ATTR_K8S_REPLICASET_UID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_REPLICASET_UID = TMP_K8S_REPLICASET_UID;\n\n/**\n * The name of the ReplicaSet.\n *\n * @deprecated Use ATTR_K8S_REPLICASET_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_REPLICASET_NAME = TMP_K8S_REPLICASET_NAME;\n\n/**\n * The UID of the Deployment.\n *\n * @deprecated Use ATTR_K8S_DEPLOYMENT_UID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_DEPLOYMENT_UID = TMP_K8S_DEPLOYMENT_UID;\n\n/**\n * The name of the Deployment.\n *\n * @deprecated Use ATTR_K8S_DEPLOYMENT_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_DEPLOYMENT_NAME = TMP_K8S_DEPLOYMENT_NAME;\n\n/**\n * The UID of the StatefulSet.\n *\n * @deprecated Use ATTR_K8S_STATEFULSET_UID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_STATEFULSET_UID = TMP_K8S_STATEFULSET_UID;\n\n/**\n * The name of the StatefulSet.\n *\n * @deprecated Use ATTR_K8S_STATEFULSET_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_STATEFULSET_NAME = TMP_K8S_STATEFULSET_NAME;\n\n/**\n * The UID of the DaemonSet.\n *\n * @deprecated Use ATTR_K8S_DAEMONSET_UID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_DAEMONSET_UID = TMP_K8S_DAEMONSET_UID;\n\n/**\n * The name of the DaemonSet.\n *\n * @deprecated Use ATTR_K8S_DAEMONSET_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_DAEMONSET_NAME = TMP_K8S_DAEMONSET_NAME;\n\n/**\n * The UID of the Job.\n *\n * @deprecated Use ATTR_K8S_JOB_UID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_JOB_UID = TMP_K8S_JOB_UID;\n\n/**\n * The name of the Job.\n *\n * @deprecated Use ATTR_K8S_JOB_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_JOB_NAME = TMP_K8S_JOB_NAME;\n\n/**\n * The UID of the CronJob.\n *\n * @deprecated Use ATTR_K8S_CRONJOB_UID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_CRONJOB_UID = TMP_K8S_CRONJOB_UID;\n\n/**\n * The name of the CronJob.\n *\n * @deprecated Use ATTR_K8S_CRONJOB_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_CRONJOB_NAME = TMP_K8S_CRONJOB_NAME;\n\n/**\n * The operating system type.\n *\n * @deprecated Use ATTR_OS_TYPE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_OS_TYPE = TMP_OS_TYPE;\n\n/**\n * Human readable (not intended to be parsed) OS version information, like e.g. reported by `ver` or `lsb_release -a` commands.\n *\n * @deprecated Use ATTR_OS_DESCRIPTION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_OS_DESCRIPTION = TMP_OS_DESCRIPTION;\n\n/**\n * Human readable operating system name.\n *\n * @deprecated Use ATTR_OS_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_OS_NAME = TMP_OS_NAME;\n\n/**\n * The version string of the operating system as defined in [Version Attributes](../../resource/semantic_conventions/README.md#version-attributes).\n *\n * @deprecated Use ATTR_OS_VERSION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_OS_VERSION = TMP_OS_VERSION;\n\n/**\n * Process identifier (PID).\n *\n * @deprecated Use ATTR_PROCESS_PID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_PID = TMP_PROCESS_PID;\n\n/**\n * The name of the process executable. On Linux based systems, can be set to the `Name` in `proc/[pid]/status`. On Windows, can be set to the base name of `GetProcessImageFileNameW`.\n *\n * @deprecated Use ATTR_PROCESS_EXECUTABLE_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_EXECUTABLE_NAME = TMP_PROCESS_EXECUTABLE_NAME;\n\n/**\n * The full path to the process executable. On Linux based systems, can be set to the target of `proc/[pid]/exe`. On Windows, can be set to the result of `GetProcessImageFileNameW`.\n *\n * @deprecated Use ATTR_PROCESS_EXECUTABLE_PATH in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_EXECUTABLE_PATH = TMP_PROCESS_EXECUTABLE_PATH;\n\n/**\n * The command used to launch the process (i.e. the command name). On Linux based systems, can be set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can be set to the first parameter extracted from `GetCommandLineW`.\n *\n * @deprecated Use ATTR_PROCESS_COMMAND in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_COMMAND = TMP_PROCESS_COMMAND;\n\n/**\n * The full command used to launch the process as a single string representing the full command. On Windows, can be set to the result of `GetCommandLineW`. Do not set this if you have to assemble it just for monitoring; use `process.command_args` instead.\n *\n * @deprecated Use ATTR_PROCESS_COMMAND_LINE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_COMMAND_LINE = TMP_PROCESS_COMMAND_LINE;\n\n/**\n * All the command arguments (including the command/executable itself) as received by the process. On Linux-based systems (and some other Unixoid systems supporting procfs), can be set according to the list of null-delimited strings extracted from `proc/[pid]/cmdline`. For libc-based executables, this would be the full argv vector passed to `main`.\n *\n * @deprecated Use ATTR_PROCESS_COMMAND_ARGS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_COMMAND_ARGS = TMP_PROCESS_COMMAND_ARGS;\n\n/**\n * The username of the user that owns the process.\n *\n * @deprecated Use ATTR_PROCESS_OWNER in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_OWNER = TMP_PROCESS_OWNER;\n\n/**\n * The name of the runtime of this process. For compiled native binaries, this SHOULD be the name of the compiler.\n *\n * @deprecated Use ATTR_PROCESS_RUNTIME_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_RUNTIME_NAME = TMP_PROCESS_RUNTIME_NAME;\n\n/**\n * The version of the runtime of this process, as returned by the runtime without modification.\n *\n * @deprecated Use ATTR_PROCESS_RUNTIME_VERSION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_RUNTIME_VERSION = TMP_PROCESS_RUNTIME_VERSION;\n\n/**\n * An additional description about the runtime of the process, for example a specific vendor customization of the runtime environment.\n *\n * @deprecated Use ATTR_PROCESS_RUNTIME_DESCRIPTION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_RUNTIME_DESCRIPTION =\n  TMP_PROCESS_RUNTIME_DESCRIPTION;\n\n/**\n * Logical name of the service.\n *\n * Note: MUST be the same for all instances of horizontally scaled services. If the value was not specified, SDKs MUST fallback to `unknown_service:` concatenated with [`process.executable.name`](process.md#process), e.g. `unknown_service:bash`. If `process.executable.name` is not available, the value MUST be set to `unknown_service`.\n *\n * @deprecated Use ATTR_SERVICE_NAME.\n */\nexport const SEMRESATTRS_SERVICE_NAME = TMP_SERVICE_NAME;\n\n/**\n * A namespace for `service.name`.\n *\n * Note: A string value having a meaning that helps to distinguish a group of services, for example the team name that owns a group of services. `service.name` is expected to be unique within the same namespace. If `service.namespace` is not specified in the Resource then `service.name` is expected to be unique for all services that have no explicit namespace defined (so the empty/unspecified namespace is simply one more valid namespace). Zero-length namespace string is assumed equal to unspecified namespace.\n *\n * @deprecated Use ATTR_SERVICE_NAMESPACE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_SERVICE_NAMESPACE = TMP_SERVICE_NAMESPACE;\n\n/**\n * The string ID of the service instance.\n *\n * Note: MUST be unique for each instance of the same `service.namespace,service.name` pair (in other words `service.namespace,service.name,service.instance.id` triplet MUST be globally unique). The ID helps to distinguish instances of the same service that exist at the same time (e.g. instances of a horizontally scaled service). It is preferable for the ID to be persistent and stay the same for the lifetime of the service instance, however it is acceptable that the ID is ephemeral and changes during important lifetime events for the service (e.g. service restarts). If the service has no inherent unique ID that can be used as the value of this attribute it is recommended to generate a random Version 1 or Version 4 RFC 4122 UUID (services aiming for reproducible UUIDs may also use Version 5, see RFC 4122 for more recommendations).\n *\n * @deprecated Use ATTR_SERVICE_INSTANCE_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_SERVICE_INSTANCE_ID = TMP_SERVICE_INSTANCE_ID;\n\n/**\n * The version string of the service API or implementation.\n *\n * @deprecated Use ATTR_SERVICE_VERSION.\n */\nexport const SEMRESATTRS_SERVICE_VERSION = TMP_SERVICE_VERSION;\n\n/**\n * The name of the telemetry SDK as defined above.\n *\n * @deprecated Use ATTR_TELEMETRY_SDK_NAME.\n */\nexport const SEMRESATTRS_TELEMETRY_SDK_NAME = TMP_TELEMETRY_SDK_NAME;\n\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use ATTR_TELEMETRY_SDK_LANGUAGE.\n */\nexport const SEMRESATTRS_TELEMETRY_SDK_LANGUAGE = TMP_TELEMETRY_SDK_LANGUAGE;\n\n/**\n * The version string of the telemetry SDK.\n *\n * @deprecated Use ATTR_TELEMETRY_SDK_VERSION.\n */\nexport const SEMRESATTRS_TELEMETRY_SDK_VERSION = TMP_TELEMETRY_SDK_VERSION;\n\n/**\n * The version string of the auto instrumentation agent, if used.\n *\n * @deprecated Use ATTR_TELEMETRY_DISTRO_VERSION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_TELEMETRY_AUTO_VERSION = TMP_TELEMETRY_AUTO_VERSION;\n\n/**\n * The name of the web engine.\n *\n * @deprecated Use ATTR_WEBENGINE_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_WEBENGINE_NAME = TMP_WEBENGINE_NAME;\n\n/**\n * The version of the web engine.\n *\n * @deprecated Use ATTR_WEBENGINE_VERSION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_WEBENGINE_VERSION = TMP_WEBENGINE_VERSION;\n\n/**\n * Additional description of the web engine (e.g. detailed version and edition information).\n *\n * @deprecated Use ATTR_WEBENGINE_DESCRIPTION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_WEBENGINE_DESCRIPTION = TMP_WEBENGINE_DESCRIPTION;\n\n/**\n * Definition of available values for SemanticResourceAttributes\n * This type is used for backward compatibility, you should use the individual exported\n * constants SemanticResourceAttributes_XXXXX rather than the exported constant map. As any single reference\n * to a constant map value will result in all strings being included into your bundle.\n * @deprecated Use the SEMRESATTRS_XXXXX constants rather than the SemanticResourceAttributes.XXXXX for bundle minification.\n */\nexport type SemanticResourceAttributes = {\n  /**\n   * Name of the cloud provider.\n   */\n  CLOUD_PROVIDER: 'cloud.provider';\n\n  /**\n   * The cloud account ID the resource is assigned to.\n   */\n  CLOUD_ACCOUNT_ID: 'cloud.account.id';\n\n  /**\n   * The geographical region the resource is running. Refer to your provider&#39;s docs to see the available regions, for example [Alibaba Cloud regions](https://www.alibabacloud.com/help/doc-detail/40654.htm), [AWS regions](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/), [Azure regions](https://azure.microsoft.com/en-us/global-infrastructure/geographies/), or [Google Cloud regions](https://cloud.google.com/about/locations).\n   */\n  CLOUD_REGION: 'cloud.region';\n\n  /**\n   * Cloud regions often have multiple, isolated locations known as zones to increase availability. Availability zone represents the zone where the resource is running.\n   *\n   * Note: Availability zones are called &#34;zones&#34; on Alibaba Cloud and Google Cloud.\n   */\n  CLOUD_AVAILABILITY_ZONE: 'cloud.availability_zone';\n\n  /**\n   * The cloud platform in use.\n   *\n   * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n   */\n  CLOUD_PLATFORM: 'cloud.platform';\n\n  /**\n   * The Amazon Resource Name (ARN) of an [ECS container instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html).\n   */\n  AWS_ECS_CONTAINER_ARN: 'aws.ecs.container.arn';\n\n  /**\n   * The ARN of an [ECS cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html).\n   */\n  AWS_ECS_CLUSTER_ARN: 'aws.ecs.cluster.arn';\n\n  /**\n   * The [launch type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) for an ECS task.\n   */\n  AWS_ECS_LAUNCHTYPE: 'aws.ecs.launchtype';\n\n  /**\n   * The ARN of an [ECS task definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html).\n   */\n  AWS_ECS_TASK_ARN: 'aws.ecs.task.arn';\n\n  /**\n   * The task definition family this task definition is a member of.\n   */\n  AWS_ECS_TASK_FAMILY: 'aws.ecs.task.family';\n\n  /**\n   * The revision for this task definition.\n   */\n  AWS_ECS_TASK_REVISION: 'aws.ecs.task.revision';\n\n  /**\n   * The ARN of an EKS cluster.\n   */\n  AWS_EKS_CLUSTER_ARN: 'aws.eks.cluster.arn';\n\n  /**\n   * The name(s) of the AWS log group(s) an application is writing to.\n   *\n   * Note: Multiple log groups must be supported for cases like multi-container applications, where a single application has sidecar containers, and each write to their own log group.\n   */\n  AWS_LOG_GROUP_NAMES: 'aws.log.group.names';\n\n  /**\n   * The Amazon Resource Name(s) (ARN) of the AWS log group(s).\n   *\n   * Note: See the [log group ARN format documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format).\n   */\n  AWS_LOG_GROUP_ARNS: 'aws.log.group.arns';\n\n  /**\n   * The name(s) of the AWS log stream(s) an application is writing to.\n   */\n  AWS_LOG_STREAM_NAMES: 'aws.log.stream.names';\n\n  /**\n   * The ARN(s) of the AWS log stream(s).\n   *\n   * Note: See the [log stream ARN format documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format). One log group can contain several log streams, so these ARNs necessarily identify both a log group and a log stream.\n   */\n  AWS_LOG_STREAM_ARNS: 'aws.log.stream.arns';\n\n  /**\n   * Container name.\n   */\n  CONTAINER_NAME: 'container.name';\n\n  /**\n   * Container ID. Usually a UUID, as for example used to [identify Docker containers](https://docs.docker.com/engine/reference/run/#container-identification). The UUID might be abbreviated.\n   */\n  CONTAINER_ID: 'container.id';\n\n  /**\n   * The container runtime managing this container.\n   */\n  CONTAINER_RUNTIME: 'container.runtime';\n\n  /**\n   * Name of the image the container was built on.\n   */\n  CONTAINER_IMAGE_NAME: 'container.image.name';\n\n  /**\n   * Container image tag.\n   */\n  CONTAINER_IMAGE_TAG: 'container.image.tag';\n\n  /**\n   * Name of the [deployment environment](https://en.wikipedia.org/wiki/Deployment_environment) (aka deployment tier).\n   */\n  DEPLOYMENT_ENVIRONMENT: 'deployment.environment';\n\n  /**\n   * A unique identifier representing the device.\n   *\n   * Note: The device identifier MUST only be defined using the values outlined below. This value is not an advertising identifier and MUST NOT be used as such. On iOS (Swift or Objective-C), this value MUST be equal to the [vendor identifier](https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor). On Android (Java or Kotlin), this value MUST be equal to the Firebase Installation ID or a globally unique UUID which is persisted across sessions in your application. More information can be found [here](https://developer.android.com/training/articles/user-data-ids) on best practices and exact implementation details. Caution should be taken when storing personal data or anything which can identify a user. GDPR and data protection laws may apply, ensure you do your own due diligence.\n   */\n  DEVICE_ID: 'device.id';\n\n  /**\n   * The model identifier for the device.\n   *\n   * Note: It&#39;s recommended this value represents a machine readable version of the model identifier rather than the market or consumer-friendly name of the device.\n   */\n  DEVICE_MODEL_IDENTIFIER: 'device.model.identifier';\n\n  /**\n   * The marketing name for the device model.\n   *\n   * Note: It&#39;s recommended this value represents a human readable version of the device model rather than a machine readable alternative.\n   */\n  DEVICE_MODEL_NAME: 'device.model.name';\n\n  /**\n   * The name of the single function that this runtime instance executes.\n   *\n   * Note: This is the name of the function as configured/deployed on the FaaS platform and is usually different from the name of the callback function (which may be stored in the [`code.namespace`/`code.function`](../../trace/semantic_conventions/span-general.md#source-code-attributes) span attributes).\n   */\n  FAAS_NAME: 'faas.name';\n\n  /**\n  * The unique ID of the single function that this runtime instance executes.\n  *\n  * Note: Depending on the cloud provider, use:\n\n* **AWS Lambda:** The function [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).\nTake care not to use the &#34;invoked ARN&#34; directly but replace any\n[alias suffix](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) with the resolved function version, as the same runtime instance may be invokable with multiple\ndifferent aliases.\n* **GCP:** The [URI of the resource](https://cloud.google.com/iam/docs/full-resource-names)\n* **Azure:** The [Fully Qualified Resource ID](https://docs.microsoft.com/en-us/rest/api/resources/resources/get-by-id).\n\nOn some providers, it may not be possible to determine the full ID at startup,\nwhich is why this field cannot be made required. For example, on AWS the account ID\npart of the ARN is not available without calling another AWS API\nwhich may be deemed too slow for a short-running lambda function.\nAs an alternative, consider setting `faas.id` as a span attribute instead.\n  */\n  FAAS_ID: 'faas.id';\n\n  /**\n  * The immutable version of the function being executed.\n  *\n  * Note: Depending on the cloud provider and platform, use:\n\n* **AWS Lambda:** The [function version](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html)\n  (an integer represented as a decimal string).\n* **Google Cloud Run:** The [revision](https://cloud.google.com/run/docs/managing/revisions)\n  (i.e., the function name plus the revision suffix).\n* **Google Cloud Functions:** The value of the\n  [`K_REVISION` environment variable](https://cloud.google.com/functions/docs/env-var#runtime_environment_variables_set_automatically).\n* **Azure Functions:** Not applicable. Do not set this attribute.\n  */\n  FAAS_VERSION: 'faas.version';\n\n  /**\n   * The execution environment ID as a string, that will be potentially reused for other invocations to the same function/function version.\n   *\n   * Note: * **AWS Lambda:** Use the (full) log stream name.\n   */\n  FAAS_INSTANCE: 'faas.instance';\n\n  /**\n   * The amount of memory available to the serverless function in MiB.\n   *\n   * Note: It&#39;s recommended to set this attribute since e.g. too little memory can easily stop a Java AWS Lambda function from working correctly. On AWS Lambda, the environment variable `AWS_LAMBDA_FUNCTION_MEMORY_SIZE` provides this information.\n   */\n  FAAS_MAX_MEMORY: 'faas.max_memory';\n\n  /**\n   * Unique host ID. For Cloud, this must be the instance_id assigned by the cloud provider.\n   */\n  HOST_ID: 'host.id';\n\n  /**\n   * Name of the host. On Unix systems, it may contain what the hostname command returns, or the fully qualified hostname, or another name specified by the user.\n   */\n  HOST_NAME: 'host.name';\n\n  /**\n   * Type of host. For Cloud, this must be the machine type.\n   */\n  HOST_TYPE: 'host.type';\n\n  /**\n   * The CPU architecture the host system is running on.\n   */\n  HOST_ARCH: 'host.arch';\n\n  /**\n   * Name of the VM image or OS install the host was instantiated from.\n   */\n  HOST_IMAGE_NAME: 'host.image.name';\n\n  /**\n   * VM image ID. For Cloud, this value is from the provider.\n   */\n  HOST_IMAGE_ID: 'host.image.id';\n\n  /**\n   * The version string of the VM image as defined in [Version Attributes](README.md#version-attributes).\n   */\n  HOST_IMAGE_VERSION: 'host.image.version';\n\n  /**\n   * The name of the cluster.\n   */\n  K8S_CLUSTER_NAME: 'k8s.cluster.name';\n\n  /**\n   * The name of the Node.\n   */\n  K8S_NODE_NAME: 'k8s.node.name';\n\n  /**\n   * The UID of the Node.\n   */\n  K8S_NODE_UID: 'k8s.node.uid';\n\n  /**\n   * The name of the namespace that the pod is running in.\n   */\n  K8S_NAMESPACE_NAME: 'k8s.namespace.name';\n\n  /**\n   * The UID of the Pod.\n   */\n  K8S_POD_UID: 'k8s.pod.uid';\n\n  /**\n   * The name of the Pod.\n   */\n  K8S_POD_NAME: 'k8s.pod.name';\n\n  /**\n   * The name of the Container in a Pod template.\n   */\n  K8S_CONTAINER_NAME: 'k8s.container.name';\n\n  /**\n   * The UID of the ReplicaSet.\n   */\n  K8S_REPLICASET_UID: 'k8s.replicaset.uid';\n\n  /**\n   * The name of the ReplicaSet.\n   */\n  K8S_REPLICASET_NAME: 'k8s.replicaset.name';\n\n  /**\n   * The UID of the Deployment.\n   */\n  K8S_DEPLOYMENT_UID: 'k8s.deployment.uid';\n\n  /**\n   * The name of the Deployment.\n   */\n  K8S_DEPLOYMENT_NAME: 'k8s.deployment.name';\n\n  /**\n   * The UID of the StatefulSet.\n   */\n  K8S_STATEFULSET_UID: 'k8s.statefulset.uid';\n\n  /**\n   * The name of the StatefulSet.\n   */\n  K8S_STATEFULSET_NAME: 'k8s.statefulset.name';\n\n  /**\n   * The UID of the DaemonSet.\n   */\n  K8S_DAEMONSET_UID: 'k8s.daemonset.uid';\n\n  /**\n   * The name of the DaemonSet.\n   */\n  K8S_DAEMONSET_NAME: 'k8s.daemonset.name';\n\n  /**\n   * The UID of the Job.\n   */\n  K8S_JOB_UID: 'k8s.job.uid';\n\n  /**\n   * The name of the Job.\n   */\n  K8S_JOB_NAME: 'k8s.job.name';\n\n  /**\n   * The UID of the CronJob.\n   */\n  K8S_CRONJOB_UID: 'k8s.cronjob.uid';\n\n  /**\n   * The name of the CronJob.\n   */\n  K8S_CRONJOB_NAME: 'k8s.cronjob.name';\n\n  /**\n   * The operating system type.\n   */\n  OS_TYPE: 'os.type';\n\n  /**\n   * Human readable (not intended to be parsed) OS version information, like e.g. reported by `ver` or `lsb_release -a` commands.\n   */\n  OS_DESCRIPTION: 'os.description';\n\n  /**\n   * Human readable operating system name.\n   */\n  OS_NAME: 'os.name';\n\n  /**\n   * The version string of the operating system as defined in [Version Attributes](../../resource/semantic_conventions/README.md#version-attributes).\n   */\n  OS_VERSION: 'os.version';\n\n  /**\n   * Process identifier (PID).\n   */\n  PROCESS_PID: 'process.pid';\n\n  /**\n   * The name of the process executable. On Linux based systems, can be set to the `Name` in `proc/[pid]/status`. On Windows, can be set to the base name of `GetProcessImageFileNameW`.\n   */\n  PROCESS_EXECUTABLE_NAME: 'process.executable.name';\n\n  /**\n   * The full path to the process executable. On Linux based systems, can be set to the target of `proc/[pid]/exe`. On Windows, can be set to the result of `GetProcessImageFileNameW`.\n   */\n  PROCESS_EXECUTABLE_PATH: 'process.executable.path';\n\n  /**\n   * The command used to launch the process (i.e. the command name). On Linux based systems, can be set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can be set to the first parameter extracted from `GetCommandLineW`.\n   */\n  PROCESS_COMMAND: 'process.command';\n\n  /**\n   * The full command used to launch the process as a single string representing the full command. On Windows, can be set to the result of `GetCommandLineW`. Do not set this if you have to assemble it just for monitoring; use `process.command_args` instead.\n   */\n  PROCESS_COMMAND_LINE: 'process.command_line';\n\n  /**\n   * All the command arguments (including the command/executable itself) as received by the process. On Linux-based systems (and some other Unixoid systems supporting procfs), can be set according to the list of null-delimited strings extracted from `proc/[pid]/cmdline`. For libc-based executables, this would be the full argv vector passed to `main`.\n   */\n  PROCESS_COMMAND_ARGS: 'process.command_args';\n\n  /**\n   * The username of the user that owns the process.\n   */\n  PROCESS_OWNER: 'process.owner';\n\n  /**\n   * The name of the runtime of this process. For compiled native binaries, this SHOULD be the name of the compiler.\n   */\n  PROCESS_RUNTIME_NAME: 'process.runtime.name';\n\n  /**\n   * The version of the runtime of this process, as returned by the runtime without modification.\n   */\n  PROCESS_RUNTIME_VERSION: 'process.runtime.version';\n\n  /**\n   * An additional description about the runtime of the process, for example a specific vendor customization of the runtime environment.\n   */\n  PROCESS_RUNTIME_DESCRIPTION: 'process.runtime.description';\n\n  /**\n   * Logical name of the service.\n   *\n   * Note: MUST be the same for all instances of horizontally scaled services. If the value was not specified, SDKs MUST fallback to `unknown_service:` concatenated with [`process.executable.name`](process.md#process), e.g. `unknown_service:bash`. If `process.executable.name` is not available, the value MUST be set to `unknown_service`.\n   */\n  SERVICE_NAME: 'service.name';\n\n  /**\n   * A namespace for `service.name`.\n   *\n   * Note: A string value having a meaning that helps to distinguish a group of services, for example the team name that owns a group of services. `service.name` is expected to be unique within the same namespace. If `service.namespace` is not specified in the Resource then `service.name` is expected to be unique for all services that have no explicit namespace defined (so the empty/unspecified namespace is simply one more valid namespace). Zero-length namespace string is assumed equal to unspecified namespace.\n   */\n  SERVICE_NAMESPACE: 'service.namespace';\n\n  /**\n   * The string ID of the service instance.\n   *\n   * Note: MUST be unique for each instance of the same `service.namespace,service.name` pair (in other words `service.namespace,service.name,service.instance.id` triplet MUST be globally unique). The ID helps to distinguish instances of the same service that exist at the same time (e.g. instances of a horizontally scaled service). It is preferable for the ID to be persistent and stay the same for the lifetime of the service instance, however it is acceptable that the ID is ephemeral and changes during important lifetime events for the service (e.g. service restarts). If the service has no inherent unique ID that can be used as the value of this attribute it is recommended to generate a random Version 1 or Version 4 RFC 4122 UUID (services aiming for reproducible UUIDs may also use Version 5, see RFC 4122 for more recommendations).\n   */\n  SERVICE_INSTANCE_ID: 'service.instance.id';\n\n  /**\n   * The version string of the service API or implementation.\n   */\n  SERVICE_VERSION: 'service.version';\n\n  /**\n   * The name of the telemetry SDK as defined above.\n   */\n  TELEMETRY_SDK_NAME: 'telemetry.sdk.name';\n\n  /**\n   * The language of the telemetry SDK.\n   */\n  TELEMETRY_SDK_LANGUAGE: 'telemetry.sdk.language';\n\n  /**\n   * The version string of the telemetry SDK.\n   */\n  TELEMETRY_SDK_VERSION: 'telemetry.sdk.version';\n\n  /**\n   * The version string of the auto instrumentation agent, if used.\n   */\n  TELEMETRY_AUTO_VERSION: 'telemetry.auto.version';\n\n  /**\n   * The name of the web engine.\n   */\n  WEBENGINE_NAME: 'webengine.name';\n\n  /**\n   * The version of the web engine.\n   */\n  WEBENGINE_VERSION: 'webengine.version';\n\n  /**\n   * Additional description of the web engine (e.g. detailed version and edition information).\n   */\n  WEBENGINE_DESCRIPTION: 'webengine.description';\n};\n\n/**\n * Create exported Value Map for SemanticResourceAttributes values\n * @deprecated Use the SEMRESATTRS_XXXXX constants rather than the SemanticResourceAttributes.XXXXX for bundle minification\n */\nexport const SemanticResourceAttributes: SemanticResourceAttributes =\n  /*#__PURE__*/ createConstMap<SemanticResourceAttributes>([\n    TMP_CLOUD_PROVIDER,\n    TMP_CLOUD_ACCOUNT_ID,\n    TMP_CLOUD_REGION,\n    TMP_CLOUD_AVAILABILITY_ZONE,\n    TMP_CLOUD_PLATFORM,\n    TMP_AWS_ECS_CONTAINER_ARN,\n    TMP_AWS_ECS_CLUSTER_ARN,\n    TMP_AWS_ECS_LAUNCHTYPE,\n    TMP_AWS_ECS_TASK_ARN,\n    TMP_AWS_ECS_TASK_FAMILY,\n    TMP_AWS_ECS_TASK_REVISION,\n    TMP_AWS_EKS_CLUSTER_ARN,\n    TMP_AWS_LOG_GROUP_NAMES,\n    TMP_AWS_LOG_GROUP_ARNS,\n    TMP_AWS_LOG_STREAM_NAMES,\n    TMP_AWS_LOG_STREAM_ARNS,\n    TMP_CONTAINER_NAME,\n    TMP_CONTAINER_ID,\n    TMP_CONTAINER_RUNTIME,\n    TMP_CONTAINER_IMAGE_NAME,\n    TMP_CONTAINER_IMAGE_TAG,\n    TMP_DEPLOYMENT_ENVIRONMENT,\n    TMP_DEVICE_ID,\n    TMP_DEVICE_MODEL_IDENTIFIER,\n    TMP_DEVICE_MODEL_NAME,\n    TMP_FAAS_NAME,\n    TMP_FAAS_ID,\n    TMP_FAAS_VERSION,\n    TMP_FAAS_INSTANCE,\n    TMP_FAAS_MAX_MEMORY,\n    TMP_HOST_ID,\n    TMP_HOST_NAME,\n    TMP_HOST_TYPE,\n    TMP_HOST_ARCH,\n    TMP_HOST_IMAGE_NAME,\n    TMP_HOST_IMAGE_ID,\n    TMP_HOST_IMAGE_VERSION,\n    TMP_K8S_CLUSTER_NAME,\n    TMP_K8S_NODE_NAME,\n    TMP_K8S_NODE_UID,\n    TMP_K8S_NAMESPACE_NAME,\n    TMP_K8S_POD_UID,\n    TMP_K8S_POD_NAME,\n    TMP_K8S_CONTAINER_NAME,\n    TMP_K8S_REPLICASET_UID,\n    TMP_K8S_REPLICASET_NAME,\n    TMP_K8S_DEPLOYMENT_UID,\n    TMP_K8S_DEPLOYMENT_NAME,\n    TMP_K8S_STATEFULSET_UID,\n    TMP_K8S_STATEFULSET_NAME,\n    TMP_K8S_DAEMONSET_UID,\n    TMP_K8S_DAEMONSET_NAME,\n    TMP_K8S_JOB_UID,\n    TMP_K8S_JOB_NAME,\n    TMP_K8S_CRONJOB_UID,\n    TMP_K8S_CRONJOB_NAME,\n    TMP_OS_TYPE,\n    TMP_OS_DESCRIPTION,\n    TMP_OS_NAME,\n    TMP_OS_VERSION,\n    TMP_PROCESS_PID,\n    TMP_PROCESS_EXECUTABLE_NAME,\n    TMP_PROCESS_EXECUTABLE_PATH,\n    TMP_PROCESS_COMMAND,\n    TMP_PROCESS_COMMAND_LINE,\n    TMP_PROCESS_COMMAND_ARGS,\n    TMP_PROCESS_OWNER,\n    TMP_PROCESS_RUNTIME_NAME,\n    TMP_PROCESS_RUNTIME_VERSION,\n    TMP_PROCESS_RUNTIME_DESCRIPTION,\n    TMP_SERVICE_NAME,\n    TMP_SERVICE_NAMESPACE,\n    TMP_SERVICE_INSTANCE_ID,\n    TMP_SERVICE_VERSION,\n    TMP_TELEMETRY_SDK_NAME,\n    TMP_TELEMETRY_SDK_LANGUAGE,\n    TMP_TELEMETRY_SDK_VERSION,\n    TMP_TELEMETRY_AUTO_VERSION,\n    TMP_WEBENGINE_NAME,\n    TMP_WEBENGINE_VERSION,\n    TMP_WEBENGINE_DESCRIPTION,\n  ]);\n\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for CloudProviderValues enum definition\n *\n * Name of the cloud provider.\n * ---------------------------------------------------------------------------------------------------------- */\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_CLOUDPROVIDERVALUES_ALIBABA_CLOUD = 'alibaba_cloud';\nconst TMP_CLOUDPROVIDERVALUES_AWS = 'aws';\nconst TMP_CLOUDPROVIDERVALUES_AZURE = 'azure';\nconst TMP_CLOUDPROVIDERVALUES_GCP = 'gcp';\n\n/**\n * Name of the cloud provider.\n *\n * @deprecated Use CLOUD_PROVIDER_VALUE_ALIBABA_CLOUD in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPROVIDERVALUES_ALIBABA_CLOUD =\n  TMP_CLOUDPROVIDERVALUES_ALIBABA_CLOUD;\n\n/**\n * Name of the cloud provider.\n *\n * @deprecated Use CLOUD_PROVIDER_VALUE_AWS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPROVIDERVALUES_AWS = TMP_CLOUDPROVIDERVALUES_AWS;\n\n/**\n * Name of the cloud provider.\n *\n * @deprecated Use CLOUD_PROVIDER_VALUE_AZURE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPROVIDERVALUES_AZURE = TMP_CLOUDPROVIDERVALUES_AZURE;\n\n/**\n * Name of the cloud provider.\n *\n * @deprecated Use CLOUD_PROVIDER_VALUE_GCP in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPROVIDERVALUES_GCP = TMP_CLOUDPROVIDERVALUES_GCP;\n\n/**\n * Identifies the Values for CloudProviderValues enum definition\n *\n * Name of the cloud provider.\n * @deprecated Use the CLOUDPROVIDERVALUES_XXXXX constants rather than the CloudProviderValues.XXXXX for bundle minification.\n */\nexport type CloudProviderValues = {\n  /** Alibaba Cloud. */\n  ALIBABA_CLOUD: 'alibaba_cloud';\n\n  /** Amazon Web Services. */\n  AWS: 'aws';\n\n  /** Microsoft Azure. */\n  AZURE: 'azure';\n\n  /** Google Cloud Platform. */\n  GCP: 'gcp';\n};\n\n/**\n * The constant map of values for CloudProviderValues.\n * @deprecated Use the CLOUDPROVIDERVALUES_XXXXX constants rather than the CloudProviderValues.XXXXX for bundle minification.\n */\nexport const CloudProviderValues: CloudProviderValues =\n  /*#__PURE__*/ createConstMap<CloudProviderValues>([\n    TMP_CLOUDPROVIDERVALUES_ALIBABA_CLOUD,\n    TMP_CLOUDPROVIDERVALUES_AWS,\n    TMP_CLOUDPROVIDERVALUES_AZURE,\n    TMP_CLOUDPROVIDERVALUES_GCP,\n  ]);\n\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for CloudPlatformValues enum definition\n *\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n * ---------------------------------------------------------------------------------------------------------- */\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_ECS = 'alibaba_cloud_ecs';\nconst TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_FC = 'alibaba_cloud_fc';\nconst TMP_CLOUDPLATFORMVALUES_AWS_EC2 = 'aws_ec2';\nconst TMP_CLOUDPLATFORMVALUES_AWS_ECS = 'aws_ecs';\nconst TMP_CLOUDPLATFORMVALUES_AWS_EKS = 'aws_eks';\nconst TMP_CLOUDPLATFORMVALUES_AWS_LAMBDA = 'aws_lambda';\nconst TMP_CLOUDPLATFORMVALUES_AWS_ELASTIC_BEANSTALK = 'aws_elastic_beanstalk';\nconst TMP_CLOUDPLATFORMVALUES_AZURE_VM = 'azure_vm';\nconst TMP_CLOUDPLATFORMVALUES_AZURE_CONTAINER_INSTANCES =\n  'azure_container_instances';\nconst TMP_CLOUDPLATFORMVALUES_AZURE_AKS = 'azure_aks';\nconst TMP_CLOUDPLATFORMVALUES_AZURE_FUNCTIONS = 'azure_functions';\nconst TMP_CLOUDPLATFORMVALUES_AZURE_APP_SERVICE = 'azure_app_service';\nconst TMP_CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE = 'gcp_compute_engine';\nconst TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_RUN = 'gcp_cloud_run';\nconst TMP_CLOUDPLATFORMVALUES_GCP_KUBERNETES_ENGINE = 'gcp_kubernetes_engine';\nconst TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_FUNCTIONS = 'gcp_cloud_functions';\nconst TMP_CLOUDPLATFORMVALUES_GCP_APP_ENGINE = 'gcp_app_engine';\n\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_ALIBABA_CLOUD_ECS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_ALIBABA_CLOUD_ECS =\n  TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_ECS;\n\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_ALIBABA_CLOUD_FC in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_ALIBABA_CLOUD_FC =\n  TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_FC;\n\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AWS_EC2 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AWS_EC2 = TMP_CLOUDPLATFORMVALUES_AWS_EC2;\n\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AWS_ECS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AWS_ECS = TMP_CLOUDPLATFORMVALUES_AWS_ECS;\n\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AWS_EKS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AWS_EKS = TMP_CLOUDPLATFORMVALUES_AWS_EKS;\n\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AWS_LAMBDA in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AWS_LAMBDA =\n  TMP_CLOUDPLATFORMVALUES_AWS_LAMBDA;\n\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AWS_ELASTIC_BEANSTALK in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AWS_ELASTIC_BEANSTALK =\n  TMP_CLOUDPLATFORMVALUES_AWS_ELASTIC_BEANSTALK;\n\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AZURE_VM in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AZURE_VM = TMP_CLOUDPLATFORMVALUES_AZURE_VM;\n\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AZURE_CONTAINER_INSTANCES in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AZURE_CONTAINER_INSTANCES =\n  TMP_CLOUDPLATFORMVALUES_AZURE_CONTAINER_INSTANCES;\n\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AZURE_AKS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AZURE_AKS = TMP_CLOUDPLATFORMVALUES_AZURE_AKS;\n\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AZURE_FUNCTIONS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AZURE_FUNCTIONS =\n  TMP_CLOUDPLATFORMVALUES_AZURE_FUNCTIONS;\n\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AZURE_APP_SERVICE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AZURE_APP_SERVICE =\n  TMP_CLOUDPLATFORMVALUES_AZURE_APP_SERVICE;\n\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_GCP_COMPUTE_ENGINE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE =\n  TMP_CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE;\n\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_GCP_CLOUD_RUN in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_GCP_CLOUD_RUN =\n  TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_RUN;\n\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_GCP_KUBERNETES_ENGINE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_GCP_KUBERNETES_ENGINE =\n  TMP_CLOUDPLATFORMVALUES_GCP_KUBERNETES_ENGINE;\n\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_GCP_CLOUD_FUNCTIONS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_GCP_CLOUD_FUNCTIONS =\n  TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_FUNCTIONS;\n\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_GCP_APP_ENGINE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_GCP_APP_ENGINE =\n  TMP_CLOUDPLATFORMVALUES_GCP_APP_ENGINE;\n\n/**\n * Identifies the Values for CloudPlatformValues enum definition\n *\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n * @deprecated Use the CLOUDPLATFORMVALUES_XXXXX constants rather than the CloudPlatformValues.XXXXX for bundle minification.\n */\nexport type CloudPlatformValues = {\n  /** Alibaba Cloud Elastic Compute Service. */\n  ALIBABA_CLOUD_ECS: 'alibaba_cloud_ecs';\n\n  /** Alibaba Cloud Function Compute. */\n  ALIBABA_CLOUD_FC: 'alibaba_cloud_fc';\n\n  /** AWS Elastic Compute Cloud. */\n  AWS_EC2: 'aws_ec2';\n\n  /** AWS Elastic Container Service. */\n  AWS_ECS: 'aws_ecs';\n\n  /** AWS Elastic Kubernetes Service. */\n  AWS_EKS: 'aws_eks';\n\n  /** AWS Lambda. */\n  AWS_LAMBDA: 'aws_lambda';\n\n  /** AWS Elastic Beanstalk. */\n  AWS_ELASTIC_BEANSTALK: 'aws_elastic_beanstalk';\n\n  /** Azure Virtual Machines. */\n  AZURE_VM: 'azure_vm';\n\n  /** Azure Container Instances. */\n  AZURE_CONTAINER_INSTANCES: 'azure_container_instances';\n\n  /** Azure Kubernetes Service. */\n  AZURE_AKS: 'azure_aks';\n\n  /** Azure Functions. */\n  AZURE_FUNCTIONS: 'azure_functions';\n\n  /** Azure App Service. */\n  AZURE_APP_SERVICE: 'azure_app_service';\n\n  /** Google Cloud Compute Engine (GCE). */\n  GCP_COMPUTE_ENGINE: 'gcp_compute_engine';\n\n  /** Google Cloud Run. */\n  GCP_CLOUD_RUN: 'gcp_cloud_run';\n\n  /** Google Cloud Kubernetes Engine (GKE). */\n  GCP_KUBERNETES_ENGINE: 'gcp_kubernetes_engine';\n\n  /** Google Cloud Functions (GCF). */\n  GCP_CLOUD_FUNCTIONS: 'gcp_cloud_functions';\n\n  /** Google Cloud App Engine (GAE). */\n  GCP_APP_ENGINE: 'gcp_app_engine';\n};\n\n/**\n * The constant map of values for CloudPlatformValues.\n * @deprecated Use the CLOUDPLATFORMVALUES_XXXXX constants rather than the CloudPlatformValues.XXXXX for bundle minification.\n */\nexport const CloudPlatformValues: CloudPlatformValues =\n  /*#__PURE__*/ createConstMap<CloudPlatformValues>([\n    TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_ECS,\n    TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_FC,\n    TMP_CLOUDPLATFORMVALUES_AWS_EC2,\n    TMP_CLOUDPLATFORMVALUES_AWS_ECS,\n    TMP_CLOUDPLATFORMVALUES_AWS_EKS,\n    TMP_CLOUDPLATFORMVALUES_AWS_LAMBDA,\n    TMP_CLOUDPLATFORMVALUES_AWS_ELASTIC_BEANSTALK,\n    TMP_CLOUDPLATFORMVALUES_AZURE_VM,\n    TMP_CLOUDPLATFORMVALUES_AZURE_CONTAINER_INSTANCES,\n    TMP_CLOUDPLATFORMVALUES_AZURE_AKS,\n    TMP_CLOUDPLATFORMVALUES_AZURE_FUNCTIONS,\n    TMP_CLOUDPLATFORMVALUES_AZURE_APP_SERVICE,\n    TMP_CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE,\n    TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_RUN,\n    TMP_CLOUDPLATFORMVALUES_GCP_KUBERNETES_ENGINE,\n    TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_FUNCTIONS,\n    TMP_CLOUDPLATFORMVALUES_GCP_APP_ENGINE,\n  ]);\n\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for AwsEcsLaunchtypeValues enum definition\n *\n * The [launch type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) for an ECS task.\n * ---------------------------------------------------------------------------------------------------------- */\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_AWSECSLAUNCHTYPEVALUES_EC2 = 'ec2';\nconst TMP_AWSECSLAUNCHTYPEVALUES_FARGATE = 'fargate';\n\n/**\n * The [launch type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) for an ECS task.\n *\n * @deprecated Use AWS_ECS_LAUNCHTYPE_VALUE_EC2 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const AWSECSLAUNCHTYPEVALUES_EC2 = TMP_AWSECSLAUNCHTYPEVALUES_EC2;\n\n/**\n * The [launch type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) for an ECS task.\n *\n * @deprecated Use AWS_ECS_LAUNCHTYPE_VALUE_FARGATE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const AWSECSLAUNCHTYPEVALUES_FARGATE =\n  TMP_AWSECSLAUNCHTYPEVALUES_FARGATE;\n\n/**\n * Identifies the Values for AwsEcsLaunchtypeValues enum definition\n *\n * The [launch type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) for an ECS task.\n * @deprecated Use the AWSECSLAUNCHTYPEVALUES_XXXXX constants rather than the AwsEcsLaunchtypeValues.XXXXX for bundle minification.\n */\nexport type AwsEcsLaunchtypeValues = {\n  /** ec2. */\n  EC2: 'ec2';\n\n  /** fargate. */\n  FARGATE: 'fargate';\n};\n\n/**\n * The constant map of values for AwsEcsLaunchtypeValues.\n * @deprecated Use the AWSECSLAUNCHTYPEVALUES_XXXXX constants rather than the AwsEcsLaunchtypeValues.XXXXX for bundle minification.\n */\nexport const AwsEcsLaunchtypeValues: AwsEcsLaunchtypeValues =\n  /*#__PURE__*/ createConstMap<AwsEcsLaunchtypeValues>([\n    TMP_AWSECSLAUNCHTYPEVALUES_EC2,\n    TMP_AWSECSLAUNCHTYPEVALUES_FARGATE,\n  ]);\n\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for HostArchValues enum definition\n *\n * The CPU architecture the host system is running on.\n * ---------------------------------------------------------------------------------------------------------- */\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_HOSTARCHVALUES_AMD64 = 'amd64';\nconst TMP_HOSTARCHVALUES_ARM32 = 'arm32';\nconst TMP_HOSTARCHVALUES_ARM64 = 'arm64';\nconst TMP_HOSTARCHVALUES_IA64 = 'ia64';\nconst TMP_HOSTARCHVALUES_PPC32 = 'ppc32';\nconst TMP_HOSTARCHVALUES_PPC64 = 'ppc64';\nconst TMP_HOSTARCHVALUES_X86 = 'x86';\n\n/**\n * The CPU architecture the host system is running on.\n *\n * @deprecated Use HOST_ARCH_VALUE_AMD64 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const HOSTARCHVALUES_AMD64 = TMP_HOSTARCHVALUES_AMD64;\n\n/**\n * The CPU architecture the host system is running on.\n *\n * @deprecated Use HOST_ARCH_VALUE_ARM32 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const HOSTARCHVALUES_ARM32 = TMP_HOSTARCHVALUES_ARM32;\n\n/**\n * The CPU architecture the host system is running on.\n *\n * @deprecated Use HOST_ARCH_VALUE_ARM64 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const HOSTARCHVALUES_ARM64 = TMP_HOSTARCHVALUES_ARM64;\n\n/**\n * The CPU architecture the host system is running on.\n *\n * @deprecated Use HOST_ARCH_VALUE_IA64 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const HOSTARCHVALUES_IA64 = TMP_HOSTARCHVALUES_IA64;\n\n/**\n * The CPU architecture the host system is running on.\n *\n * @deprecated Use HOST_ARCH_VALUE_PPC32 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const HOSTARCHVALUES_PPC32 = TMP_HOSTARCHVALUES_PPC32;\n\n/**\n * The CPU architecture the host system is running on.\n *\n * @deprecated Use HOST_ARCH_VALUE_PPC64 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const HOSTARCHVALUES_PPC64 = TMP_HOSTARCHVALUES_PPC64;\n\n/**\n * The CPU architecture the host system is running on.\n *\n * @deprecated Use HOST_ARCH_VALUE_X86 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const HOSTARCHVALUES_X86 = TMP_HOSTARCHVALUES_X86;\n\n/**\n * Identifies the Values for HostArchValues enum definition\n *\n * The CPU architecture the host system is running on.\n * @deprecated Use the HOSTARCHVALUES_XXXXX constants rather than the HostArchValues.XXXXX for bundle minification.\n */\nexport type HostArchValues = {\n  /** AMD64. */\n  AMD64: 'amd64';\n\n  /** ARM32. */\n  ARM32: 'arm32';\n\n  /** ARM64. */\n  ARM64: 'arm64';\n\n  /** Itanium. */\n  IA64: 'ia64';\n\n  /** 32-bit PowerPC. */\n  PPC32: 'ppc32';\n\n  /** 64-bit PowerPC. */\n  PPC64: 'ppc64';\n\n  /** 32-bit x86. */\n  X86: 'x86';\n};\n\n/**\n * The constant map of values for HostArchValues.\n * @deprecated Use the HOSTARCHVALUES_XXXXX constants rather than the HostArchValues.XXXXX for bundle minification.\n */\nexport const HostArchValues: HostArchValues =\n  /*#__PURE__*/ createConstMap<HostArchValues>([\n    TMP_HOSTARCHVALUES_AMD64,\n    TMP_HOSTARCHVALUES_ARM32,\n    TMP_HOSTARCHVALUES_ARM64,\n    TMP_HOSTARCHVALUES_IA64,\n    TMP_HOSTARCHVALUES_PPC32,\n    TMP_HOSTARCHVALUES_PPC64,\n    TMP_HOSTARCHVALUES_X86,\n  ]);\n\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for OsTypeValues enum definition\n *\n * The operating system type.\n * ---------------------------------------------------------------------------------------------------------- */\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_OSTYPEVALUES_WINDOWS = 'windows';\nconst TMP_OSTYPEVALUES_LINUX = 'linux';\nconst TMP_OSTYPEVALUES_DARWIN = 'darwin';\nconst TMP_OSTYPEVALUES_FREEBSD = 'freebsd';\nconst TMP_OSTYPEVALUES_NETBSD = 'netbsd';\nconst TMP_OSTYPEVALUES_OPENBSD = 'openbsd';\nconst TMP_OSTYPEVALUES_DRAGONFLYBSD = 'dragonflybsd';\nconst TMP_OSTYPEVALUES_HPUX = 'hpux';\nconst TMP_OSTYPEVALUES_AIX = 'aix';\nconst TMP_OSTYPEVALUES_SOLARIS = 'solaris';\nconst TMP_OSTYPEVALUES_Z_OS = 'z_os';\n\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_WINDOWS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_WINDOWS = TMP_OSTYPEVALUES_WINDOWS;\n\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_LINUX in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_LINUX = TMP_OSTYPEVALUES_LINUX;\n\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_DARWIN in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_DARWIN = TMP_OSTYPEVALUES_DARWIN;\n\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_FREEBSD in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_FREEBSD = TMP_OSTYPEVALUES_FREEBSD;\n\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_NETBSD in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_NETBSD = TMP_OSTYPEVALUES_NETBSD;\n\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_OPENBSD in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_OPENBSD = TMP_OSTYPEVALUES_OPENBSD;\n\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_DRAGONFLYBSD in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_DRAGONFLYBSD = TMP_OSTYPEVALUES_DRAGONFLYBSD;\n\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_HPUX in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_HPUX = TMP_OSTYPEVALUES_HPUX;\n\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_AIX in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_AIX = TMP_OSTYPEVALUES_AIX;\n\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_SOLARIS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_SOLARIS = TMP_OSTYPEVALUES_SOLARIS;\n\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_Z_OS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_Z_OS = TMP_OSTYPEVALUES_Z_OS;\n\n/**\n * Identifies the Values for OsTypeValues enum definition\n *\n * The operating system type.\n * @deprecated Use the OSTYPEVALUES_XXXXX constants rather than the OsTypeValues.XXXXX for bundle minification.\n */\nexport type OsTypeValues = {\n  /** Microsoft Windows. */\n  WINDOWS: 'windows';\n\n  /** Linux. */\n  LINUX: 'linux';\n\n  /** Apple Darwin. */\n  DARWIN: 'darwin';\n\n  /** FreeBSD. */\n  FREEBSD: 'freebsd';\n\n  /** NetBSD. */\n  NETBSD: 'netbsd';\n\n  /** OpenBSD. */\n  OPENBSD: 'openbsd';\n\n  /** DragonFly BSD. */\n  DRAGONFLYBSD: 'dragonflybsd';\n\n  /** HP-UX (Hewlett Packard Unix). */\n  HPUX: 'hpux';\n\n  /** AIX (Advanced Interactive eXecutive). */\n  AIX: 'aix';\n\n  /** Oracle Solaris. */\n  SOLARIS: 'solaris';\n\n  /** IBM z/OS. */\n  Z_OS: 'z_os';\n};\n\n/**\n * The constant map of values for OsTypeValues.\n * @deprecated Use the OSTYPEVALUES_XXXXX constants rather than the OsTypeValues.XXXXX for bundle minification.\n */\nexport const OsTypeValues: OsTypeValues =\n  /*#__PURE__*/ createConstMap<OsTypeValues>([\n    TMP_OSTYPEVALUES_WINDOWS,\n    TMP_OSTYPEVALUES_LINUX,\n    TMP_OSTYPEVALUES_DARWIN,\n    TMP_OSTYPEVALUES_FREEBSD,\n    TMP_OSTYPEVALUES_NETBSD,\n    TMP_OSTYPEVALUES_OPENBSD,\n    TMP_OSTYPEVALUES_DRAGONFLYBSD,\n    TMP_OSTYPEVALUES_HPUX,\n    TMP_OSTYPEVALUES_AIX,\n    TMP_OSTYPEVALUES_SOLARIS,\n    TMP_OSTYPEVALUES_Z_OS,\n  ]);\n\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for TelemetrySdkLanguageValues enum definition\n *\n * The language of the telemetry SDK.\n * ---------------------------------------------------------------------------------------------------------- */\n\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_CPP = 'cpp';\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_DOTNET = 'dotnet';\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_ERLANG = 'erlang';\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_GO = 'go';\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_JAVA = 'java';\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_NODEJS = 'nodejs';\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_PHP = 'php';\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_PYTHON = 'python';\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_RUBY = 'ruby';\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_WEBJS = 'webjs';\n\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_CPP.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_CPP =\n  TMP_TELEMETRYSDKLANGUAGEVALUES_CPP;\n\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_DOTNET.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_DOTNET =\n  TMP_TELEMETRYSDKLANGUAGEVALUES_DOTNET;\n\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_ERLANG.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_ERLANG =\n  TMP_TELEMETRYSDKLANGUAGEVALUES_ERLANG;\n\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_GO.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_GO = TMP_TELEMETRYSDKLANGUAGEVALUES_GO;\n\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_JAVA.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_JAVA =\n  TMP_TELEMETRYSDKLANGUAGEVALUES_JAVA;\n\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_NODEJS.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_NODEJS =\n  TMP_TELEMETRYSDKLANGUAGEVALUES_NODEJS;\n\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_PHP.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_PHP =\n  TMP_TELEMETRYSDKLANGUAGEVALUES_PHP;\n\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_PYTHON.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_PYTHON =\n  TMP_TELEMETRYSDKLANGUAGEVALUES_PYTHON;\n\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_RUBY.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_RUBY =\n  TMP_TELEMETRYSDKLANGUAGEVALUES_RUBY;\n\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_WEBJS =\n  TMP_TELEMETRYSDKLANGUAGEVALUES_WEBJS;\n\n/**\n * Identifies the Values for TelemetrySdkLanguageValues enum definition\n *\n * The language of the telemetry SDK.\n * @deprecated Use the TELEMETRYSDKLANGUAGEVALUES_XXXXX constants rather than the TelemetrySdkLanguageValues.XXXXX for bundle minification.\n */\nexport type TelemetrySdkLanguageValues = {\n  /** cpp. */\n  CPP: 'cpp';\n\n  /** dotnet. */\n  DOTNET: 'dotnet';\n\n  /** erlang. */\n  ERLANG: 'erlang';\n\n  /** go. */\n  GO: 'go';\n\n  /** java. */\n  JAVA: 'java';\n\n  /** nodejs. */\n  NODEJS: 'nodejs';\n\n  /** php. */\n  PHP: 'php';\n\n  /** python. */\n  PYTHON: 'python';\n\n  /** ruby. */\n  RUBY: 'ruby';\n\n  /** webjs. */\n  WEBJS: 'webjs';\n};\n\n/**\n * The constant map of values for TelemetrySdkLanguageValues.\n * @deprecated Use the TELEMETRYSDKLANGUAGEVALUES_XXXXX constants rather than the TelemetrySdkLanguageValues.XXXXX for bundle minification.\n */\nexport const TelemetrySdkLanguageValues: TelemetrySdkLanguageValues =\n  /*#__PURE__*/ createConstMap<TelemetrySdkLanguageValues>([\n    TMP_TELEMETRYSDKLANGUAGEVALUES_CPP,\n    TMP_TELEMETRYSDKLANGUAGEVALUES_DOTNET,\n    TMP_TELEMETRYSDKLANGUAGEVALUES_ERLANG,\n    TMP_TELEMETRYSDKLANGUAGEVALUES_GO,\n    TMP_TELEMETRYSDKLANGUAGEVALUES_JAVA,\n    TMP_TELEMETRYSDKLANGUAGEVALUES_NODEJS,\n    TMP_TELEMETRYSDKLANGUAGEVALUES_PHP,\n    TMP_TELEMETRYSDKLANGUAGEVALUES_PYTHON,\n    TMP_TELEMETRYSDKLANGUAGEVALUES_RUBY,\n    TMP_TELEMETRYSDKLANGUAGEVALUES_WEBJS,\n  ]);\n", "/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-restricted-syntax --\n * These re-exports are only of constants, only one-level deep at this point,\n * and should not cause problems for tree-shakers.\n */\nexport * from './SemanticResourceAttributes';\n", "/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n//----------------------------------------------------------------------------------------------------------\n// DO NOT EDIT, this is an Auto-generated file from scripts/semconv/templates/registry/stable/attributes.ts.j2\n//----------------------------------------------------------------------------------------------------------\n\n/**\n * ASP.NET Core exception middleware handling result.\n *\n * @example handled\n * @example unhandled\n */\nexport const ATTR_ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT = 'aspnetcore.diagnostics.exception.result' as const;\n\n/**\n * Enum value \"aborted\" for attribute {@link ATTR_ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT}.\n *\n * Exception handling didn't run because the request was aborted.\n */\nexport const ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_ABORTED = \"aborted\" as const;\n\n/**\n * Enum value \"handled\" for attribute {@link ATTR_ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT}.\n *\n * Exception was handled by the exception handling middleware.\n */\nexport const ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_HANDLED = \"handled\" as const;\n\n/**\n * Enum value \"skipped\" for attribute {@link ATTR_ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT}.\n *\n * Exception handling was skipped because the response had started.\n */\nexport const ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_SKIPPED = \"skipped\" as const;\n\n/**\n * Enum value \"unhandled\" for attribute {@link ATTR_ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT}.\n *\n * Exception was not handled by the exception handling middleware.\n */\nexport const ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_UNHANDLED = \"unhandled\" as const;\n\n/**\n * Full type name of the [`IExceptionHandler`](https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.diagnostics.iexceptionhandler) implementation that handled the exception.\n *\n * @example Contoso.MyHandler\n */\nexport const ATTR_ASPNETCORE_DIAGNOSTICS_HANDLER_TYPE = 'aspnetcore.diagnostics.handler.type' as const;\n\n/**\n * Rate limiting policy name.\n *\n * @example fixed\n * @example sliding\n * @example token\n */\nexport const ATTR_ASPNETCORE_RATE_LIMITING_POLICY = 'aspnetcore.rate_limiting.policy' as const;\n\n/**\n * Rate-limiting result, shows whether the lease was acquired or contains a rejection reason\n *\n * @example acquired\n * @example request_canceled\n */\nexport const ATTR_ASPNETCORE_RATE_LIMITING_RESULT = 'aspnetcore.rate_limiting.result' as const;\n\n/**\n * Enum value \"acquired\" for attribute {@link ATTR_ASPNETCORE_RATE_LIMITING_RESULT}.\n *\n * Lease was acquired\n */\nexport const ASPNETCORE_RATE_LIMITING_RESULT_VALUE_ACQUIRED = \"acquired\" as const;\n\n/**\n * Enum value \"endpoint_limiter\" for attribute {@link ATTR_ASPNETCORE_RATE_LIMITING_RESULT}.\n *\n * Lease request was rejected by the endpoint limiter\n */\nexport const ASPNETCORE_RATE_LIMITING_RESULT_VALUE_ENDPOINT_LIMITER = \"endpoint_limiter\" as const;\n\n/**\n * Enum value \"global_limiter\" for attribute {@link ATTR_ASPNETCORE_RATE_LIMITING_RESULT}.\n *\n * Lease request was rejected by the global limiter\n */\nexport const ASPNETCORE_RATE_LIMITING_RESULT_VALUE_GLOBAL_LIMITER = \"global_limiter\" as const;\n\n/**\n * Enum value \"request_canceled\" for attribute {@link ATTR_ASPNETCORE_RATE_LIMITING_RESULT}.\n *\n * Lease request was canceled\n */\nexport const ASPNETCORE_RATE_LIMITING_RESULT_VALUE_REQUEST_CANCELED = \"request_canceled\" as const;\n\n/**\n * Flag indicating if request was handled by the application pipeline.\n *\n * @example true\n */\nexport const ATTR_ASPNETCORE_REQUEST_IS_UNHANDLED = 'aspnetcore.request.is_unhandled' as const;\n\n/**\n * A value that indicates whether the matched route is a fallback route.\n *\n * @example true\n */\nexport const ATTR_ASPNETCORE_ROUTING_IS_FALLBACK = 'aspnetcore.routing.is_fallback' as const;\n\n/**\n * Match result - success or failure\n *\n * @example success\n * @example failure\n */\nexport const ATTR_ASPNETCORE_ROUTING_MATCH_STATUS = 'aspnetcore.routing.match_status' as const;\n\n/**\n * Enum value \"failure\" for attribute {@link ATTR_ASPNETCORE_ROUTING_MATCH_STATUS}.\n *\n * Match failed\n */\nexport const ASPNETCORE_ROUTING_MATCH_STATUS_VALUE_FAILURE = \"failure\" as const;\n\n/**\n * Enum value \"success\" for attribute {@link ATTR_ASPNETCORE_ROUTING_MATCH_STATUS}.\n *\n * Match succeeded\n */\nexport const ASPNETCORE_ROUTING_MATCH_STATUS_VALUE_SUCCESS = \"success\" as const;\n\n/**\n * A value that indicates whether the user is authenticated.\n *\n * @example true\n */\nexport const ATTR_ASPNETCORE_USER_IS_AUTHENTICATED = 'aspnetcore.user.is_authenticated' as const;\n\n/**\n * Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n *\n * @example client.example.com\n * @example 10.1.2.80\n * @example /tmp/my.sock\n *\n * @note When observed from the server side, and when communicating through an intermediary, `client.address` **SHOULD** represent the client address behind any intermediaries,  for example proxies, if it's available.\n */\nexport const ATTR_CLIENT_ADDRESS = 'client.address' as const;\n\n/**\n * Client port number.\n *\n * @example 65123\n *\n * @note When observed from the server side, and when communicating through an intermediary, `client.port` **SHOULD** represent the client port behind any intermediaries,  for example proxies, if it's available.\n */\nexport const ATTR_CLIENT_PORT = 'client.port' as const;\n\n/**\n * The column number in `code.file.path` best representing the operation. It **SHOULD** point within the code unit named in `code.function.name`. This attribute **MUST NOT** be used on the Profile signal since the data is already captured in 'message Line'. This constraint is imposed to prevent redundancy and maintain data integrity.\n *\n * @example 16\n */\nexport const ATTR_CODE_COLUMN_NUMBER = 'code.column.number' as const;\n\n/**\n * The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path). This attribute **MUST NOT** be used on the Profile signal since the data is already captured in 'message Function'. This constraint is imposed to prevent redundancy and maintain data integrity.\n *\n * @example \"/usr/local/MyApplication/content_root/app/index.php\"\n */\nexport const ATTR_CODE_FILE_PATH = 'code.file.path' as const;\n\n/**\n * The method or function fully-qualified name without arguments. The value should fit the natural representation of the language runtime, which is also likely the same used within `code.stacktrace` attribute value. This attribute **MUST NOT** be used on the Profile signal since the data is already captured in 'message Function'. This constraint is imposed to prevent redundancy and maintain data integrity.\n *\n * @example com.example.MyHttpService.serveRequest\n * @example GuzzleHttp\\\\Client::transfer\n * @example fopen\n *\n * @note Values and format depends on each language runtime, thus it is impossible to provide an exhaustive list of examples.\n * The values are usually the same (or prefixes of) the ones found in native stack trace representation stored in\n * `code.stacktrace` without information on arguments.\n *\n * Examples:\n *\n *   - Java method: `com.example.MyHttpService.serveRequest`\n *   - Java anonymous class method: `com.mycompany.Main$1.myMethod`\n *   - Java lambda method: `com.mycompany.Main$$Lambda/0x0000748ae4149c00.myMethod`\n *   - PHP function: `GuzzleHttp\\Client::transfer`\n *   - Go function: `github.com/my/repo/pkg.foo.func5`\n *   - Elixir: `OpenTelemetry.Ctx.new`\n *   - Erlang: `opentelemetry_ctx:new`\n *   - Rust: `playground::my_module::my_cool_func`\n *   - C function: `fopen`\n */\nexport const ATTR_CODE_FUNCTION_NAME = 'code.function.name' as const;\n\n/**\n * The line number in `code.file.path` best representing the operation. It **SHOULD** point within the code unit named in `code.function.name`. This attribute **MUST NOT** be used on the Profile signal since the data is already captured in 'message Line'. This constraint is imposed to prevent redundancy and maintain data integrity.\n *\n * @example 42\n */\nexport const ATTR_CODE_LINE_NUMBER = 'code.line.number' as const;\n\n/**\n * A stacktrace as a string in the natural representation for the language runtime. The representation is identical to [`exception.stacktrace`](/docs/exceptions/exceptions-spans.md#stacktrace-representation). This attribute **MUST NOT** be used on the Profile signal since the data is already captured in 'message Location'. This constraint is imposed to prevent redundancy and maintain data integrity.\n *\n * @example \"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)\\\\n\"\n */\nexport const ATTR_CODE_STACKTRACE = 'code.stacktrace' as const;\n\n/**\n * The name of a collection (table, container) within the database.\n *\n * @example public.users\n * @example customers\n *\n * @note It is **RECOMMENDED** to capture the value as provided by the application\n * without attempting to do any case normalization.\n *\n * The collection name **SHOULD NOT** be extracted from `db.query.text`,\n * when the database system supports query text with multiple collections\n * in non-batch operations.\n *\n * For batch operations, if the individual operations are known to have the same\n * collection name then that collection name **SHOULD** be used.\n */\nexport const ATTR_DB_COLLECTION_NAME = 'db.collection.name' as const;\n\n/**\n * The name of the database, fully qualified within the server address and port.\n *\n * @example customers\n * @example test.users\n *\n * @note If a database system has multiple namespace components, they **SHOULD** be concatenated from the most general to the most specific namespace component, using `|` as a separator between the components. Any missing components (and their associated separators) **SHOULD** be omitted.\n * Semantic conventions for individual database systems **SHOULD** document what `db.namespace` means in the context of that system.\n * It is **RECOMMENDED** to capture the value as provided by the application without attempting to do any case normalization.\n */\nexport const ATTR_DB_NAMESPACE = 'db.namespace' as const;\n\n/**\n * The number of queries included in a batch operation.\n *\n * @example 2\n * @example 3\n * @example 4\n *\n * @note Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` **SHOULD** never be `1`.\n */\nexport const ATTR_DB_OPERATION_BATCH_SIZE = 'db.operation.batch.size' as const;\n\n/**\n * The name of the operation or command being executed.\n *\n * @example findAndModify\n * @example HMSET\n * @example SELECT\n *\n * @note It is **RECOMMENDED** to capture the value as provided by the application\n * without attempting to do any case normalization.\n *\n * The operation name **SHOULD NOT** be extracted from `db.query.text`,\n * when the database system supports query text with multiple operations\n * in non-batch operations.\n *\n * If spaces can occur in the operation name, multiple consecutive spaces\n * **SHOULD** be normalized to a single space.\n *\n * For batch operations, if the individual operations are known to have the same operation name\n * then that operation name **SHOULD** be used prepended by `BATCH `,\n * otherwise `db.operation.name` **SHOULD** be `BATCH` or some other database\n * system specific term if more applicable.\n */\nexport const ATTR_DB_OPERATION_NAME = 'db.operation.name' as const;\n\n/**\n * Low cardinality summary of a database query.\n *\n * @example SELECT wuser_table\n * @example INSERT shipping_details SELECT orders\n * @example get user by id\n *\n * @note The query summary describes a class of database queries and is useful\n * as a grouping key, especially when analyzing telemetry for database\n * calls involving complex queries.\n *\n * Summary may be available to the instrumentation through\n * instrumentation hooks or other means. If it is not available, instrumentations\n * that support query parsing **SHOULD** generate a summary following\n * [Generating query summary](/docs/db/database-spans.md#generating-a-summary-of-the-query)\n * section.\n *\n * For batch operations, if the individual operations are known to have the same query summary\n * then that query summary **SHOULD** be used prepended by `BATCH `,\n * otherwise `db.query.summary` **SHOULD** be `BATCH` or some other database\n * system specific term if more applicable.\n */\nexport const ATTR_DB_QUERY_SUMMARY = 'db.query.summary' as const;\n\n/**\n * The database query being executed.\n *\n * @example SELECT * FROM wuser_table where username = ?\n * @example SET mykey ?\n *\n * @note For sanitization see [Sanitization of `db.query.text`](/docs/db/database-spans.md#sanitization-of-dbquerytext).\n * For batch operations, if the individual operations are known to have the same query text then that query text **SHOULD** be used, otherwise all of the individual query texts **SHOULD** be concatenated with separator `; ` or some other database system specific separator if more applicable.\n * Parameterized query text **SHOULD NOT** be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n */\nexport const ATTR_DB_QUERY_TEXT = 'db.query.text' as const;\n\n/**\n * Database response status code.\n *\n * @example 102\n * @example ORA-17002\n * @example 08P01\n * @example 404\n *\n * @note 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.\n * Semantic conventions for individual database systems **SHOULD** document what `db.response.status_code` means in the context of that system.\n */\nexport const ATTR_DB_RESPONSE_STATUS_CODE = 'db.response.status_code' as const;\n\n/**\n * The name of a stored procedure within the database.\n *\n * @example GetCustomer\n *\n * @note It is **RECOMMENDED** to capture the value as provided by the application\n * without attempting to do any case normalization.\n *\n * For batch operations, if the individual operations are known to have the same\n * stored procedure name then that stored procedure name **SHOULD** be used.\n */\nexport const ATTR_DB_STORED_PROCEDURE_NAME = 'db.stored_procedure.name' as const;\n\n/**\n * The database management system (DBMS) product as identified by the client instrumentation.\n *\n * @note The actual DBMS may differ from the one identified by the client. For example, when using PostgreSQL client libraries to connect to a CockroachDB, the `db.system.name` is set to `postgresql` based on the instrumentation's best knowledge.\n */\nexport const ATTR_DB_SYSTEM_NAME = 'db.system.name' as const;\n\n/**\n * Enum value \"mariadb\" for attribute {@link ATTR_DB_SYSTEM_NAME}.\n *\n * [MariaDB](https://mariadb.org/)\n */\nexport const DB_SYSTEM_NAME_VALUE_MARIADB = \"mariadb\" as const;\n\n/**\n * Enum value \"microsoft.sql_server\" for attribute {@link ATTR_DB_SYSTEM_NAME}.\n *\n * [Microsoft SQL Server](https://www.microsoft.com/sql-server)\n */\nexport const DB_SYSTEM_NAME_VALUE_MICROSOFT_SQL_SERVER = \"microsoft.sql_server\" as const;\n\n/**\n * Enum value \"mysql\" for attribute {@link ATTR_DB_SYSTEM_NAME}.\n *\n * [MySQL](https://www.mysql.com/)\n */\nexport const DB_SYSTEM_NAME_VALUE_MYSQL = \"mysql\" as const;\n\n/**\n * Enum value \"postgresql\" for attribute {@link ATTR_DB_SYSTEM_NAME}.\n *\n * [PostgreSQL](https://www.postgresql.org/)\n */\nexport const DB_SYSTEM_NAME_VALUE_POSTGRESQL = \"postgresql\" as const;\n\n/**\n * Name of the garbage collector managed heap generation.\n *\n * @example gen0\n * @example gen1\n * @example gen2\n */\nexport const ATTR_DOTNET_GC_HEAP_GENERATION = 'dotnet.gc.heap.generation' as const;\n\n/**\n * Enum value \"gen0\" for attribute {@link ATTR_DOTNET_GC_HEAP_GENERATION}.\n *\n * Generation 0\n */\nexport const DOTNET_GC_HEAP_GENERATION_VALUE_GEN0 = \"gen0\" as const;\n\n/**\n * Enum value \"gen1\" for attribute {@link ATTR_DOTNET_GC_HEAP_GENERATION}.\n *\n * Generation 1\n */\nexport const DOTNET_GC_HEAP_GENERATION_VALUE_GEN1 = \"gen1\" as const;\n\n/**\n * Enum value \"gen2\" for attribute {@link ATTR_DOTNET_GC_HEAP_GENERATION}.\n *\n * Generation 2\n */\nexport const DOTNET_GC_HEAP_GENERATION_VALUE_GEN2 = \"gen2\" as const;\n\n/**\n * Enum value \"loh\" for attribute {@link ATTR_DOTNET_GC_HEAP_GENERATION}.\n *\n * Large Object Heap\n */\nexport const DOTNET_GC_HEAP_GENERATION_VALUE_LOH = \"loh\" as const;\n\n/**\n * Enum value \"poh\" for attribute {@link ATTR_DOTNET_GC_HEAP_GENERATION}.\n *\n * Pinned Object Heap\n */\nexport const DOTNET_GC_HEAP_GENERATION_VALUE_POH = \"poh\" as const;\n\n/**\n * Describes a class of error the operation ended with.\n *\n * @example timeout\n * @example java.net.UnknownHostException\n * @example server_certificate_invalid\n * @example 500\n *\n * @note The `error.type` **SHOULD** be predictable, and **SHOULD** have low cardinality.\n *\n * When `error.type` is set to a type (e.g., an exception type), its\n * canonical class name identifying the type within the artifact **SHOULD** be used.\n *\n * Instrumentations **SHOULD** document the list of errors they report.\n *\n * The cardinality of `error.type` within one instrumentation library **SHOULD** be low.\n * Telemetry consumers that aggregate data from multiple instrumentation libraries and applications\n * should be prepared for `error.type` to have high cardinality at query time when no\n * additional filters are applied.\n *\n * If the operation has completed successfully, instrumentations **SHOULD NOT** set `error.type`.\n *\n * If a specific domain defines its own set of error identifiers (such as HTTP or RPC status codes),\n * it's **RECOMMENDED** to:\n *\n *   - Use a domain-specific attribute\n *   - Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n */\nexport const ATTR_ERROR_TYPE = 'error.type' as const;\n\n/**\n * Enum value \"_OTHER\" for attribute {@link ATTR_ERROR_TYPE}.\n *\n * A fallback error value to be used when the instrumentation doesn't define a custom value.\n */\nexport const ERROR_TYPE_VALUE_OTHER = \"_OTHER\" as const;\n\n/**\n * Indicates that the exception is escaping the scope of the span.\n *\n * @deprecated It's no longer recommended to record exceptions that are handled and do not escape the scope of a span.\n */\nexport const ATTR_EXCEPTION_ESCAPED = 'exception.escaped' as const;\n\n/**\n * The exception message.\n *\n * @example Division by zero\n * @example Can't convert 'int' object to str implicitly\n *\n * @note > [!WARNING]\n *\n * > This attribute may contain sensitive information.\n */\nexport const ATTR_EXCEPTION_MESSAGE = 'exception.message' as const;\n\n/**\n * 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.\n *\n * @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)\\\\n\"\n */\nexport const ATTR_EXCEPTION_STACKTRACE = 'exception.stacktrace' as const;\n\n/**\n * 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.\n *\n * @example java.net.ConnectException\n * @example OSError\n */\nexport const ATTR_EXCEPTION_TYPE = 'exception.type' as const;\n\n/**\n * HTTP request headers, `<key>` being the normalized HTTP Header name (lowercase), the value being the header values.\n *\n * @example [\"application/json\"]\n * @example [\"1.2.3.4\", \"1.2.3.5\"]\n *\n * @note Instrumentations **SHOULD** require an explicit configuration of which headers are to be captured.\n * Including all request headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\n *\n * The `User-Agent` header is already captured in the `user_agent.original` attribute.\n * Users **MAY** explicitly configure instrumentations to capture them even though it is not recommended.\n *\n * The attribute value **MUST** consist of either multiple header values as an array of strings\n * or a single-item array containing a possibly comma-concatenated string, depending on the way\n * the HTTP library provides access to headers.\n *\n * Examples:\n *\n *   - A header `Content-Type: application/json` **SHOULD** be recorded as the `http.request.header.content-type`\n *     attribute with value `[\"application/json\"]`.\n *   - A header `X-Forwarded-For: 1.2.3.4, 1.2.3.5` **SHOULD** be recorded as the `http.request.header.x-forwarded-for`\n *     attribute with value `[\"1.2.3.4\", \"1.2.3.5\"]` or `[\"1.2.3.4, 1.2.3.5\"]` depending on the HTTP library.\n */\nexport const ATTR_HTTP_REQUEST_HEADER = (key: string) => `http.request.header.${key}`;\n\n/**\n * HTTP request method.\n *\n * @example GET\n * @example POST\n * @example HEAD\n *\n * @note HTTP request method value **SHOULD** be \"known\" to the instrumentation.\n * By default, this convention defines \"known\" methods as the ones listed in [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-methods),\n * the PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\n * and the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\n *\n * If the HTTP request method is not known to instrumentation, it **MUST** set the `http.request.method` attribute to `_OTHER`.\n *\n * If the HTTP instrumentation could end up converting valid HTTP request methods to `_OTHER`, then it **MUST** provide a way to override\n * the list of known HTTP methods. If this override is done via environment variable, then the environment variable **MUST** be named\n * OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS and support a comma-separated list of case-sensitive known HTTP methods.\n *\n *\n * If this override is done via declarative configuration, then the list **MUST** be configurable via the `known_methods` property\n * (an array of case-sensitive strings with minimum items 0) under `.instrumentation/development.general.http.client` and/or\n * `.instrumentation/development.general.http.server`.\n *\n * In either case, this list **MUST** be a full override of the default known methods,\n * it is not a list of known methods in addition to the defaults.\n *\n * HTTP method names are case-sensitive and `http.request.method` attribute value **MUST** match a known HTTP method name exactly.\n * Instrumentations for specific web frameworks that consider HTTP methods to be case insensitive, **SHOULD** populate a canonical equivalent.\n * Tracing instrumentations that do so, **MUST** also set `http.request.method_original` to the original value.\n */\nexport const ATTR_HTTP_REQUEST_METHOD = 'http.request.method' as const;\n\n/**\n * Enum value \"_OTHER\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * Any HTTP method that the instrumentation has no prior knowledge of.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_OTHER = \"_OTHER\" as const;\n\n/**\n * Enum value \"CONNECT\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * CONNECT method.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_CONNECT = \"CONNECT\" as const;\n\n/**\n * Enum value \"DELETE\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * DELETE method.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_DELETE = \"DELETE\" as const;\n\n/**\n * Enum value \"GET\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * GET method.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_GET = \"GET\" as const;\n\n/**\n * Enum value \"HEAD\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * HEAD method.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_HEAD = \"HEAD\" as const;\n\n/**\n * Enum value \"OPTIONS\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * OPTIONS method.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_OPTIONS = \"OPTIONS\" as const;\n\n/**\n * Enum value \"PATCH\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * PATCH method.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_PATCH = \"PATCH\" as const;\n\n/**\n * Enum value \"POST\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * POST method.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_POST = \"POST\" as const;\n\n/**\n * Enum value \"PUT\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * PUT method.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_PUT = \"PUT\" as const;\n\n/**\n * Enum value \"TRACE\" for attribute {@link ATTR_HTTP_REQUEST_METHOD}.\n *\n * TRACE method.\n */\nexport const HTTP_REQUEST_METHOD_VALUE_TRACE = \"TRACE\" as const;\n\n/**\n * Original HTTP method sent by the client in the request line.\n *\n * @example GeT\n * @example ACL\n * @example foo\n */\nexport const ATTR_HTTP_REQUEST_METHOD_ORIGINAL = 'http.request.method_original' as const;\n\n/**\n * The ordinal number of request resending attempt (for any reason, including redirects).\n *\n * @example 3\n *\n * @note The resend count **SHOULD** be updated each time an HTTP request gets resent by the client, regardless of what was the cause of the resending (e.g. redirection, authorization failure, 503 Server Unavailable, network issues, or any other).\n */\nexport const ATTR_HTTP_REQUEST_RESEND_COUNT = 'http.request.resend_count' as const;\n\n/**\n * HTTP response headers, `<key>` being the normalized HTTP Header name (lowercase), the value being the header values.\n *\n * @example [\"application/json\"]\n * @example [\"abc\", \"def\"]\n *\n * @note Instrumentations **SHOULD** require an explicit configuration of which headers are to be captured.\n * Including all response headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\n *\n * Users **MAY** explicitly configure instrumentations to capture them even though it is not recommended.\n *\n * The attribute value **MUST** consist of either multiple header values as an array of strings\n * or a single-item array containing a possibly comma-concatenated string, depending on the way\n * the HTTP library provides access to headers.\n *\n * Examples:\n *\n *   - A header `Content-Type: application/json` header **SHOULD** be recorded as the `http.request.response.content-type`\n *     attribute with value `[\"application/json\"]`.\n *   - A header `My-custom-header: abc, def` header **SHOULD** be recorded as the `http.response.header.my-custom-header`\n *     attribute with value `[\"abc\", \"def\"]` or `[\"abc, def\"]` depending on the HTTP library.\n */\nexport const ATTR_HTTP_RESPONSE_HEADER = (key: string) => `http.response.header.${key}`;\n\n/**\n * [HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).\n *\n * @example 200\n */\nexport const ATTR_HTTP_RESPONSE_STATUS_CODE = 'http.response.status_code' as const;\n\n/**\n * The matched route template for the request. This **MUST** be low-cardinality and include all static path segments, with dynamic path segments represented with placeholders.\n *\n * @example /users/:userID?\n * @example my-controller/my-action/{id?}\n *\n * @note **MUST NOT** be populated when this is not supported by the HTTP server framework as the route attribute should have low-cardinality and the URI path can NOT substitute it.\n * **SHOULD** include the [application root](/docs/http/http-spans.md#http-server-definitions) if there is one.\n *\n * A static path segment is a part of the route template with a fixed, low-cardinality value. This includes literal strings like `/users/` and placeholders that\n * are constrained to a finite, predefined set of values, e.g. `{controller}` or `{action}`.\n *\n * A dynamic path segment is a placeholder for a value that can have high cardinality and is not constrained to a predefined list like static path segments.\n *\n * Instrumentations **SHOULD** use routing information provided by the corresponding web framework. They **SHOULD** pick the most precise source of routing information and **MAY**\n * support custom route formatting. Instrumentations **SHOULD** document the format and the API used to obtain the route string.\n */\nexport const ATTR_HTTP_ROUTE = 'http.route' as const;\n\n/**\n * Name of the garbage collector action.\n *\n * @example end of minor GC\n * @example end of major GC\n *\n * @note Garbage collector action is generally obtained via [GarbageCollectionNotificationInfo#getGcAction()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcAction()).\n */\nexport const ATTR_JVM_GC_ACTION = 'jvm.gc.action' as const;\n\n/**\n * Name of the garbage collector.\n *\n * @example G1 Young Generation\n * @example G1 Old Generation\n *\n * @note Garbage collector name is generally obtained via [GarbageCollectionNotificationInfo#getGcName()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcName()).\n */\nexport const ATTR_JVM_GC_NAME = 'jvm.gc.name' as const;\n\n/**\n * Name of the memory pool.\n *\n * @example G1 Old Gen\n * @example G1 Eden space\n * @example G1 Survivor Space\n *\n * @note Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()).\n */\nexport const ATTR_JVM_MEMORY_POOL_NAME = 'jvm.memory.pool.name' as const;\n\n/**\n * The type of memory.\n *\n * @example heap\n * @example non_heap\n */\nexport const ATTR_JVM_MEMORY_TYPE = 'jvm.memory.type' as const;\n\n/**\n * Enum value \"heap\" for attribute {@link ATTR_JVM_MEMORY_TYPE}.\n *\n * Heap memory.\n */\nexport const JVM_MEMORY_TYPE_VALUE_HEAP = \"heap\" as const;\n\n/**\n * Enum value \"non_heap\" for attribute {@link ATTR_JVM_MEMORY_TYPE}.\n *\n * Non-heap memory\n */\nexport const JVM_MEMORY_TYPE_VALUE_NON_HEAP = \"non_heap\" as const;\n\n/**\n * Whether the thread is daemon or not.\n */\nexport const ATTR_JVM_THREAD_DAEMON = 'jvm.thread.daemon' as const;\n\n/**\n * State of the thread.\n *\n * @example runnable\n * @example blocked\n */\nexport const ATTR_JVM_THREAD_STATE = 'jvm.thread.state' as const;\n\n/**\n * Enum value \"blocked\" for attribute {@link ATTR_JVM_THREAD_STATE}.\n *\n * A thread that is blocked waiting for a monitor lock is in this state.\n */\nexport const JVM_THREAD_STATE_VALUE_BLOCKED = \"blocked\" as const;\n\n/**\n * Enum value \"new\" for attribute {@link ATTR_JVM_THREAD_STATE}.\n *\n * A thread that has not yet started is in this state.\n */\nexport const JVM_THREAD_STATE_VALUE_NEW = \"new\" as const;\n\n/**\n * Enum value \"runnable\" for attribute {@link ATTR_JVM_THREAD_STATE}.\n *\n * A thread executing in the Java virtual machine is in this state.\n */\nexport const JVM_THREAD_STATE_VALUE_RUNNABLE = \"runnable\" as const;\n\n/**\n * Enum value \"terminated\" for attribute {@link ATTR_JVM_THREAD_STATE}.\n *\n * A thread that has exited is in this state.\n */\nexport const JVM_THREAD_STATE_VALUE_TERMINATED = \"terminated\" as const;\n\n/**\n * Enum value \"timed_waiting\" for attribute {@link ATTR_JVM_THREAD_STATE}.\n *\n * A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state.\n */\nexport const JVM_THREAD_STATE_VALUE_TIMED_WAITING = \"timed_waiting\" as const;\n\n/**\n * Enum value \"waiting\" for attribute {@link ATTR_JVM_THREAD_STATE}.\n *\n * A thread that is waiting indefinitely for another thread to perform a particular action is in this state.\n */\nexport const JVM_THREAD_STATE_VALUE_WAITING = \"waiting\" as const;\n\n/**\n * Local address of the network connection - IP address or Unix domain socket name.\n *\n * @example 10.1.2.80\n * @example /tmp/my.sock\n */\nexport const ATTR_NETWORK_LOCAL_ADDRESS = 'network.local.address' as const;\n\n/**\n * Local port number of the network connection.\n *\n * @example 65123\n */\nexport const ATTR_NETWORK_LOCAL_PORT = 'network.local.port' as const;\n\n/**\n * Peer address of the network connection - IP address or Unix domain socket name.\n *\n * @example 10.1.2.80\n * @example /tmp/my.sock\n */\nexport const ATTR_NETWORK_PEER_ADDRESS = 'network.peer.address' as const;\n\n/**\n * Peer port number of the network connection.\n *\n * @example 65123\n */\nexport const ATTR_NETWORK_PEER_PORT = 'network.peer.port' as const;\n\n/**\n * [OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.\n *\n * @example amqp\n * @example http\n * @example mqtt\n *\n * @note The value **SHOULD** be normalized to lowercase.\n */\nexport const ATTR_NETWORK_PROTOCOL_NAME = 'network.protocol.name' as const;\n\n/**\n * The actual version of the protocol used for network communication.\n *\n * @example 1.1\n * @example 2\n *\n * @note If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute **SHOULD** be set to the negotiated version. If the actual protocol version is not known, this attribute **SHOULD NOT** be set.\n */\nexport const ATTR_NETWORK_PROTOCOL_VERSION = 'network.protocol.version' as const;\n\n/**\n * [OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n *\n * @example tcp\n * @example udp\n *\n * @note The value **SHOULD** be normalized to lowercase.\n *\n * Consider always setting the transport when setting a port number, since\n * a port number is ambiguous without knowing the transport. For example\n * different processes could be listening on TCP port 12345 and UDP port 12345.\n */\nexport const ATTR_NETWORK_TRANSPORT = 'network.transport' as const;\n\n/**\n * Enum value \"pipe\" for attribute {@link ATTR_NETWORK_TRANSPORT}.\n *\n * Named or anonymous pipe.\n */\nexport const NETWORK_TRANSPORT_VALUE_PIPE = \"pipe\" as const;\n\n/**\n * Enum value \"quic\" for attribute {@link ATTR_NETWORK_TRANSPORT}.\n *\n * QUIC\n */\nexport const NETWORK_TRANSPORT_VALUE_QUIC = \"quic\" as const;\n\n/**\n * Enum value \"tcp\" for attribute {@link ATTR_NETWORK_TRANSPORT}.\n *\n * TCP\n */\nexport const NETWORK_TRANSPORT_VALUE_TCP = \"tcp\" as const;\n\n/**\n * Enum value \"udp\" for attribute {@link ATTR_NETWORK_TRANSPORT}.\n *\n * UDP\n */\nexport const NETWORK_TRANSPORT_VALUE_UDP = \"udp\" as const;\n\n/**\n * Enum value \"unix\" for attribute {@link ATTR_NETWORK_TRANSPORT}.\n *\n * Unix domain socket\n */\nexport const NETWORK_TRANSPORT_VALUE_UNIX = \"unix\" as const;\n\n/**\n * [OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.\n *\n * @example ipv4\n * @example ipv6\n *\n * @note The value **SHOULD** be normalized to lowercase.\n */\nexport const ATTR_NETWORK_TYPE = 'network.type' as const;\n\n/**\n * Enum value \"ipv4\" for attribute {@link ATTR_NETWORK_TYPE}.\n *\n * IPv4\n */\nexport const NETWORK_TYPE_VALUE_IPV4 = \"ipv4\" as const;\n\n/**\n * Enum value \"ipv6\" for attribute {@link ATTR_NETWORK_TYPE}.\n *\n * IPv6\n */\nexport const NETWORK_TYPE_VALUE_IPV6 = \"ipv6\" as const;\n\n/**\n * The name of the instrumentation scope - (`InstrumentationScope.Name` in OTLP).\n *\n * @example io.opentelemetry.contrib.mongodb\n */\nexport const ATTR_OTEL_SCOPE_NAME = 'otel.scope.name' as const;\n\n/**\n * The version of the instrumentation scope - (`InstrumentationScope.Version` in OTLP).\n *\n * @example 1.0.0\n */\nexport const ATTR_OTEL_SCOPE_VERSION = 'otel.scope.version' as const;\n\n/**\n * Name of the code, either \"OK\" or \"ERROR\". **MUST NOT** be set if the status code is UNSET.\n */\nexport const ATTR_OTEL_STATUS_CODE = 'otel.status_code' as const;\n\n/**\n * Enum value \"ERROR\" for attribute {@link ATTR_OTEL_STATUS_CODE}.\n *\n * The operation contains an error.\n */\nexport const OTEL_STATUS_CODE_VALUE_ERROR = \"ERROR\" as const;\n\n/**\n * Enum value \"OK\" for attribute {@link ATTR_OTEL_STATUS_CODE}.\n *\n * The operation has been validated by an Application developer or Operator to have completed successfully.\n */\nexport const OTEL_STATUS_CODE_VALUE_OK = \"OK\" as const;\n\n/**\n * Description of the Status if it has a value, otherwise not set.\n *\n * @example resource not found\n */\nexport const ATTR_OTEL_STATUS_DESCRIPTION = 'otel.status_description' as const;\n\n/**\n * Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n *\n * @example example.com\n * @example 10.1.2.80\n * @example /tmp/my.sock\n *\n * @note When observed from the client side, and when communicating through an intermediary, `server.address` **SHOULD** represent the server address behind any intermediaries, for example proxies, if it's available.\n */\nexport const ATTR_SERVER_ADDRESS = 'server.address' as const;\n\n/**\n * Server port number.\n *\n * @example 80\n * @example 8080\n * @example 443\n *\n * @note When observed from the client side, and when communicating through an intermediary, `server.port` **SHOULD** represent the server port behind any intermediaries, for example proxies, if it's available.\n */\nexport const ATTR_SERVER_PORT = 'server.port' as const;\n\n/**\n * The string ID of the service instance.\n *\n * @example 627cc493-f310-47de-96bd-71410b7dec09\n *\n * @note **MUST** be unique for each instance of the same `service.namespace,service.name` pair (in other words\n * `service.namespace,service.name,service.instance.id` triplet **MUST** be globally unique). The ID helps to\n * distinguish instances of the same service that exist at the same time (e.g. instances of a horizontally scaled\n * service).\n *\n * Implementations, such as SDKs, are recommended to generate a random Version 1 or Version 4 [RFC\n * 4122](https://www.ietf.org/rfc/rfc4122.txt) UUID, but are free to use an inherent unique ID as the source of\n * this value if stability is desirable. In that case, the ID **SHOULD** be used as source of a UUID Version 5 and\n * **SHOULD** use the following UUID as the namespace: `4d63009a-8d0f-11ee-aad7-4c796ed8e320`.\n *\n * UUIDs are typically recommended, as only an opaque value for the purposes of identifying a service instance is\n * needed. Similar to what can be seen in the man page for the\n * [`/etc/machine-id`](https://www.freedesktop.org/software/systemd/man/latest/machine-id.html) file, the underlying\n * data, such as pod name and namespace should be treated as confidential, being the user's choice to expose it\n * or not via another resource attribute.\n *\n * For applications running behind an application server (like unicorn), we do not recommend using one identifier\n * for all processes participating in the application. Instead, it's recommended each division (e.g. a worker\n * thread in unicorn) to have its own instance.id.\n *\n * It's not recommended for a Collector to set `service.instance.id` if it can't unambiguously determine the\n * service instance that is generating that telemetry. For instance, creating an UUID based on `pod.name` will\n * likely be wrong, as the Collector might not know from which container within that pod the telemetry originated.\n * However, Collectors can set the `service.instance.id` if they can unambiguously determine the service instance\n * for that telemetry. This is typically the case for scraping receivers, as they know the target address and\n * port.\n */\nexport const ATTR_SERVICE_INSTANCE_ID = 'service.instance.id' as const;\n\n/**\n * Logical name of the service.\n *\n * @example shoppingcart\n *\n * @note **MUST** be the same for all instances of horizontally scaled services. If the value was not specified, SDKs **MUST** fallback to `unknown_service:` concatenated with [`process.executable.name`](process.md), e.g. `unknown_service:bash`. If `process.executable.name` is not available, the value **MUST** be set to `unknown_service`.\n */\nexport const ATTR_SERVICE_NAME = 'service.name' as const;\n\n/**\n * A namespace for `service.name`.\n *\n * @example Shop\n *\n * @note A string value having a meaning that helps to distinguish a group of services, for example the team name that owns a group of services. `service.name` is expected to be unique within the same namespace. If `service.namespace` is not specified in the Resource then `service.name` is expected to be unique for all services that have no explicit namespace defined (so the empty/unspecified namespace is simply one more valid namespace). Zero-length namespace string is assumed equal to unspecified namespace.\n */\nexport const ATTR_SERVICE_NAMESPACE = 'service.namespace' as const;\n\n/**\n * The version string of the service component. The format is not defined by these conventions.\n *\n * @example 2.0.0\n * @example a01dbef8a\n */\nexport const ATTR_SERVICE_VERSION = 'service.version' as const;\n\n/**\n * SignalR HTTP connection closure status.\n *\n * @example app_shutdown\n * @example timeout\n */\nexport const ATTR_SIGNALR_CONNECTION_STATUS = 'signalr.connection.status' as const;\n\n/**\n * Enum value \"app_shutdown\" for attribute {@link ATTR_SIGNALR_CONNECTION_STATUS}.\n *\n * The connection was closed because the app is shutting down.\n */\nexport const SIGNALR_CONNECTION_STATUS_VALUE_APP_SHUTDOWN = \"app_shutdown\" as const;\n\n/**\n * Enum value \"normal_closure\" for attribute {@link ATTR_SIGNALR_CONNECTION_STATUS}.\n *\n * The connection was closed normally.\n */\nexport const SIGNALR_CONNECTION_STATUS_VALUE_NORMAL_CLOSURE = \"normal_closure\" as const;\n\n/**\n * Enum value \"timeout\" for attribute {@link ATTR_SIGNALR_CONNECTION_STATUS}.\n *\n * The connection was closed due to a timeout.\n */\nexport const SIGNALR_CONNECTION_STATUS_VALUE_TIMEOUT = \"timeout\" as const;\n\n/**\n * [SignalR transport type](https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/TransportProtocols.md)\n *\n * @example web_sockets\n * @example long_polling\n */\nexport const ATTR_SIGNALR_TRANSPORT = 'signalr.transport' as const;\n\n/**\n * Enum value \"long_polling\" for attribute {@link ATTR_SIGNALR_TRANSPORT}.\n *\n * LongPolling protocol\n */\nexport const SIGNALR_TRANSPORT_VALUE_LONG_POLLING = \"long_polling\" as const;\n\n/**\n * Enum value \"server_sent_events\" for attribute {@link ATTR_SIGNALR_TRANSPORT}.\n *\n * ServerSentEvents protocol\n */\nexport const SIGNALR_TRANSPORT_VALUE_SERVER_SENT_EVENTS = \"server_sent_events\" as const;\n\n/**\n * Enum value \"web_sockets\" for attribute {@link ATTR_SIGNALR_TRANSPORT}.\n *\n * WebSockets protocol\n */\nexport const SIGNALR_TRANSPORT_VALUE_WEB_SOCKETS = \"web_sockets\" as const;\n\n/**\n * The language of the telemetry SDK.\n */\nexport const ATTR_TELEMETRY_SDK_LANGUAGE = 'telemetry.sdk.language' as const;\n\n/**\n * Enum value \"cpp\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_CPP = \"cpp\" as const;\n\n/**\n * Enum value \"dotnet\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_DOTNET = \"dotnet\" as const;\n\n/**\n * Enum value \"erlang\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_ERLANG = \"erlang\" as const;\n\n/**\n * Enum value \"go\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_GO = \"go\" as const;\n\n/**\n * Enum value \"java\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_JAVA = \"java\" as const;\n\n/**\n * Enum value \"nodejs\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_NODEJS = \"nodejs\" as const;\n\n/**\n * Enum value \"php\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_PHP = \"php\" as const;\n\n/**\n * Enum value \"python\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_PYTHON = \"python\" as const;\n\n/**\n * Enum value \"ruby\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_RUBY = \"ruby\" as const;\n\n/**\n * Enum value \"rust\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_RUST = \"rust\" as const;\n\n/**\n * Enum value \"swift\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_SWIFT = \"swift\" as const;\n\n/**\n * Enum value \"webjs\" for attribute {@link ATTR_TELEMETRY_SDK_LANGUAGE}.\n */\nexport const TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS = \"webjs\" as const;\n\n/**\n * The name of the telemetry SDK as defined above.\n *\n * @example opentelemetry\n *\n * @note The OpenTelemetry SDK **MUST** set the `telemetry.sdk.name` attribute to `opentelemetry`.\n * If another SDK, like a fork or a vendor-provided implementation, is used, this SDK **MUST** set the\n * `telemetry.sdk.name` attribute to the fully-qualified class or module name of this SDK's main entry point\n * or another suitable identifier depending on the language.\n * The identifier `opentelemetry` is reserved and **MUST NOT** be used in this case.\n * All custom identifiers **SHOULD** be stable across different versions of an implementation.\n */\nexport const ATTR_TELEMETRY_SDK_NAME = 'telemetry.sdk.name' as const;\n\n/**\n * The version string of the telemetry SDK.\n *\n * @example 1.2.3\n */\nexport const ATTR_TELEMETRY_SDK_VERSION = 'telemetry.sdk.version' as const;\n\n/**\n * The [URI fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component\n *\n * @example SemConv\n */\nexport const ATTR_URL_FRAGMENT = 'url.fragment' as const;\n\n/**\n * Absolute URL describing a network resource according to [RFC3986](https://www.rfc-editor.org/rfc/rfc3986)\n *\n * @example https://www.foo.bar/search?q=OpenTelemetry#SemConv\n * @example //localhost\n *\n * @note For network calls, URL usually has `scheme://host[:port][path][?query][#fragment]` format, where the fragment\n * is not transmitted over HTTP, but if it is known, it **SHOULD** be included nevertheless.\n *\n * `url.full` **MUST NOT** contain credentials passed via URL in form of `https://username:password@www.example.com/`.\n * In such case username and password **SHOULD** be redacted and attribute's value **SHOULD** be `https://REDACTED:REDACTED@www.example.com/`.\n *\n * `url.full` **SHOULD** capture the absolute URL when it is available (or can be reconstructed).\n *\n * Sensitive content provided in `url.full` **SHOULD** be scrubbed when instrumentations can identify it.\n *\n *\n * Query string values for the following keys **SHOULD** be redacted by default and replaced by the\n * value `REDACTED`:\n *\n *   - [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n *   - [`Signature`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n *   - [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token)\n *   - [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls)\n *\n * This list is subject to change over time.\n *\n * Matching of query parameter keys against the sensitive list **SHOULD** be case-sensitive.\n *\n *\n * Instrumentation **MAY** provide a way to override this list via declarative configuration.\n * If so, it **SHOULD** use the `sensitive_query_parameters` property\n * (an array of case-sensitive strings with minimum items 0) under\n * `.instrumentation/development.general.sanitization.url`.\n * This list is a full override of the default sensitive query parameter keys,\n * it is not a list of keys in addition to the defaults.\n *\n * When a query string value is redacted, the query string key **SHOULD** still be preserved, e.g.\n * `https://www.example.com/path?color=blue&sig=REDACTED`.\n */\nexport const ATTR_URL_FULL = 'url.full' as const;\n\n/**\n * The [URI path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component\n *\n * @example /search\n *\n * @note Sensitive content provided in `url.path` **SHOULD** be scrubbed when instrumentations can identify it.\n */\nexport const ATTR_URL_PATH = 'url.path' as const;\n\n/**\n * The [URI query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component\n *\n * @example q=OpenTelemetry\n *\n * @note Sensitive content provided in `url.query` **SHOULD** be scrubbed when instrumentations can identify it.\n *\n *\n * Query string values for the following keys **SHOULD** be redacted by default and replaced by the value `REDACTED`:\n *\n *   - [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n *   - [`Signature`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n *   - [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token)\n *   - [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls)\n *\n * This list is subject to change over time.\n *\n * Matching of query parameter keys against the sensitive list **SHOULD** be case-sensitive.\n *\n * Instrumentation **MAY** provide a way to override this list via declarative configuration.\n * If so, it **SHOULD** use the `sensitive_query_parameters` property\n * (an array of case-sensitive strings with minimum items 0) under\n * `.instrumentation/development.general.sanitization.url`.\n * This list is a full override of the default sensitive query parameter keys,\n * it is not a list of keys in addition to the defaults.\n *\n * When a query string value is redacted, the query string key **SHOULD** still be preserved, e.g.\n * `q=OpenTelemetry&sig=REDACTED`.\n */\nexport const ATTR_URL_QUERY = 'url.query' as const;\n\n/**\n * The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n *\n * @example https\n * @example ftp\n * @example telnet\n */\nexport const ATTR_URL_SCHEME = 'url.scheme' as const;\n\n/**\n * Value of the [HTTP User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent) header sent by the client.\n *\n * @example CERN-LineMode/2.15 libwww/2.17b3\n * @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\n * @example YourApp/1.0.0 grpc-java-okhttp/1.27.2\n */\nexport const ATTR_USER_AGENT_ORIGINAL = 'user_agent.original' as const;\n\n", "/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n//----------------------------------------------------------------------------------------------------------\n// DO NOT EDIT, this is an Auto-generated file from scripts/semconv/templates/register/stable/metrics.ts.j2\n//----------------------------------------------------------------------------------------------------------\n\n/**\n * Number of exceptions caught by exception handling middleware.\n *\n * @note Meter name: `Microsoft.AspNetCore.Diagnostics`; Added in: ASP.NET Core 8.0\n */\nexport const METRIC_ASPNETCORE_DIAGNOSTICS_EXCEPTIONS = 'aspnetcore.diagnostics.exceptions' as const;\n\n/**\n * Number of requests that are currently active on the server that hold a rate limiting lease.\n *\n * @note Meter name: `Microsoft.AspNetCore.RateLimiting`; Added in: ASP.NET Core 8.0\n */\nexport const METRIC_ASPNETCORE_RATE_LIMITING_ACTIVE_REQUEST_LEASES = 'aspnetcore.rate_limiting.active_request_leases' as const;\n\n/**\n * Number of requests that are currently queued, waiting to acquire a rate limiting lease.\n *\n * @note Meter name: `Microsoft.AspNetCore.RateLimiting`; Added in: ASP.NET Core 8.0\n */\nexport const METRIC_ASPNETCORE_RATE_LIMITING_QUEUED_REQUESTS = 'aspnetcore.rate_limiting.queued_requests' as const;\n\n/**\n * The time the request spent in a queue waiting to acquire a rate limiting lease.\n *\n * @note Meter name: `Microsoft.AspNetCore.RateLimiting`; Added in: ASP.NET Core 8.0\n */\nexport const METRIC_ASPNETCORE_RATE_LIMITING_REQUEST_TIME_IN_QUEUE = 'aspnetcore.rate_limiting.request.time_in_queue' as const;\n\n/**\n * The duration of rate limiting lease held by requests on the server.\n *\n * @note Meter name: `Microsoft.AspNetCore.RateLimiting`; Added in: ASP.NET Core 8.0\n */\nexport const METRIC_ASPNETCORE_RATE_LIMITING_REQUEST_LEASE_DURATION = 'aspnetcore.rate_limiting.request_lease.duration' as const;\n\n/**\n * Number of requests that tried to acquire a rate limiting lease.\n *\n * @note Requests could be:\n *\n *   - Rejected by global or endpoint rate limiting policies\n *   - Canceled while waiting for the lease.\n *\n * Meter name: `Microsoft.AspNetCore.RateLimiting`; Added in: ASP.NET Core 8.0\n */\nexport const METRIC_ASPNETCORE_RATE_LIMITING_REQUESTS = 'aspnetcore.rate_limiting.requests' as const;\n\n/**\n * Number of requests that were attempted to be matched to an endpoint.\n *\n * @note Meter name: `Microsoft.AspNetCore.Routing`; Added in: ASP.NET Core 8.0\n */\nexport const METRIC_ASPNETCORE_ROUTING_MATCH_ATTEMPTS = 'aspnetcore.routing.match_attempts' as const;\n\n/**\n * Duration of database client operations.\n *\n * @note Batch operations **SHOULD** be recorded as a single operation.\n */\nexport const METRIC_DB_CLIENT_OPERATION_DURATION = 'db.client.operation.duration' as const;\n\n/**\n * The number of .NET assemblies that are currently loaded.\n *\n * @note Meter name: `System.Runtime`; Added in: .NET 9.0.\n * This metric reports the same values as calling [`AppDomain.CurrentDomain.GetAssemblies().Length`](https://learn.microsoft.com/dotnet/api/system.appdomain.getassemblies).\n */\nexport const METRIC_DOTNET_ASSEMBLY_COUNT = 'dotnet.assembly.count' as const;\n\n/**\n * The number of exceptions that have been thrown in managed code.\n *\n * @note Meter name: `System.Runtime`; Added in: .NET 9.0.\n * This metric reports the same values as counting calls to [`AppDomain.CurrentDomain.FirstChanceException`](https://learn.microsoft.com/dotnet/api/system.appdomain.firstchanceexception).\n */\nexport const METRIC_DOTNET_EXCEPTIONS = 'dotnet.exceptions' as const;\n\n/**\n * The number of garbage collections that have occurred since the process has started.\n *\n * @note Meter name: `System.Runtime`; Added in: .NET 9.0.\n * This metric uses the [`GC.CollectionCount(int generation)`](https://learn.microsoft.com/dotnet/api/system.gc.collectioncount) API to calculate exclusive collections per generation.\n */\nexport const METRIC_DOTNET_GC_COLLECTIONS = 'dotnet.gc.collections' as const;\n\n/**\n * The *approximate* number of bytes allocated on the managed GC heap since the process has started. The returned value does not include any native allocations.\n *\n * @note Meter name: `System.Runtime`; Added in: .NET 9.0.\n * This metric reports the same values as calling [`GC.GetTotalAllocatedBytes()`](https://learn.microsoft.com/dotnet/api/system.gc.gettotalallocatedbytes).\n */\nexport const METRIC_DOTNET_GC_HEAP_TOTAL_ALLOCATED = 'dotnet.gc.heap.total_allocated' as const;\n\n/**\n * The heap fragmentation, as observed during the latest garbage collection.\n *\n * @note Meter name: `System.Runtime`; Added in: .NET 9.0.\n * This metric reports the same values as calling [`GC.GetGCMemoryInfo().GenerationInfo.FragmentationAfterBytes`](https://learn.microsoft.com/dotnet/api/system.gcgenerationinfo.fragmentationafterbytes).\n */\nexport const METRIC_DOTNET_GC_LAST_COLLECTION_HEAP_FRAGMENTATION_SIZE = 'dotnet.gc.last_collection.heap.fragmentation.size' as const;\n\n/**\n * The managed GC heap size (including fragmentation), as observed during the latest garbage collection.\n *\n * @note Meter name: `System.Runtime`; Added in: .NET 9.0.\n * This metric reports the same values as calling [`GC.GetGCMemoryInfo().GenerationInfo.SizeAfterBytes`](https://learn.microsoft.com/dotnet/api/system.gcgenerationinfo.sizeafterbytes).\n */\nexport const METRIC_DOTNET_GC_LAST_COLLECTION_HEAP_SIZE = 'dotnet.gc.last_collection.heap.size' as const;\n\n/**\n * The amount of committed virtual memory in use by the .NET GC, as observed during the latest garbage collection.\n *\n * @note Meter name: `System.Runtime`; Added in: .NET 9.0.\n * This metric reports the same values as calling [`GC.GetGCMemoryInfo().TotalCommittedBytes`](https://learn.microsoft.com/dotnet/api/system.gcmemoryinfo.totalcommittedbytes). Committed virtual memory may be larger than the heap size because it includes both memory for storing existing objects (the heap size) and some extra memory that is ready to handle newly allocated objects in the future.\n */\nexport const METRIC_DOTNET_GC_LAST_COLLECTION_MEMORY_COMMITTED_SIZE = 'dotnet.gc.last_collection.memory.committed_size' as const;\n\n/**\n * The total amount of time paused in GC since the process has started.\n *\n * @note Meter name: `System.Runtime`; Added in: .NET 9.0.\n * This metric reports the same values as calling [`GC.GetTotalPauseDuration()`](https://learn.microsoft.com/dotnet/api/system.gc.gettotalpauseduration).\n */\nexport const METRIC_DOTNET_GC_PAUSE_TIME = 'dotnet.gc.pause.time' as const;\n\n/**\n * The amount of time the JIT compiler has spent compiling methods since the process has started.\n *\n * @note Meter name: `System.Runtime`; Added in: .NET 9.0.\n * This metric reports the same values as calling [`JitInfo.GetCompilationTime()`](https://learn.microsoft.com/dotnet/api/system.runtime.jitinfo.getcompilationtime).\n */\nexport const METRIC_DOTNET_JIT_COMPILATION_TIME = 'dotnet.jit.compilation.time' as const;\n\n/**\n * Count of bytes of intermediate language that have been compiled since the process has started.\n *\n * @note Meter name: `System.Runtime`; Added in: .NET 9.0.\n * This metric reports the same values as calling [`JitInfo.GetCompiledILBytes()`](https://learn.microsoft.com/dotnet/api/system.runtime.jitinfo.getcompiledilbytes).\n */\nexport const METRIC_DOTNET_JIT_COMPILED_IL_SIZE = 'dotnet.jit.compiled_il.size' as const;\n\n/**\n * The number of times the JIT compiler (re)compiled methods since the process has started.\n *\n * @note Meter name: `System.Runtime`; Added in: .NET 9.0.\n * This metric reports the same values as calling [`JitInfo.GetCompiledMethodCount()`](https://learn.microsoft.com/dotnet/api/system.runtime.jitinfo.getcompiledmethodcount).\n */\nexport const METRIC_DOTNET_JIT_COMPILED_METHODS = 'dotnet.jit.compiled_methods' as const;\n\n/**\n * The number of times there was contention when trying to acquire a monitor lock since the process has started.\n *\n * @note Meter name: `System.Runtime`; Added in: .NET 9.0.\n * This metric reports the same values as calling [`Monitor.LockContentionCount`](https://learn.microsoft.com/dotnet/api/system.threading.monitor.lockcontentioncount).\n */\nexport const METRIC_DOTNET_MONITOR_LOCK_CONTENTIONS = 'dotnet.monitor.lock_contentions' as const;\n\n/**\n * The number of processors available to the process.\n *\n * @note Meter name: `System.Runtime`; Added in: .NET 9.0.\n * This metric reports the same values as accessing [`Environment.ProcessorCount`](https://learn.microsoft.com/dotnet/api/system.environment.processorcount).\n */\nexport const METRIC_DOTNET_PROCESS_CPU_COUNT = 'dotnet.process.cpu.count' as const;\n\n/**\n * CPU time used by the process.\n *\n * @note Meter name: `System.Runtime`; Added in: .NET 9.0.\n * This metric reports the same values as accessing the corresponding processor time properties on [`System.Diagnostics.Process`](https://learn.microsoft.com/dotnet/api/system.diagnostics.process).\n */\nexport const METRIC_DOTNET_PROCESS_CPU_TIME = 'dotnet.process.cpu.time' as const;\n\n/**\n * The number of bytes of physical memory mapped to the process context.\n *\n * @note Meter name: `System.Runtime`; Added in: .NET 9.0.\n * This metric reports the same values as calling [`Environment.WorkingSet`](https://learn.microsoft.com/dotnet/api/system.environment.workingset).\n */\nexport const METRIC_DOTNET_PROCESS_MEMORY_WORKING_SET = 'dotnet.process.memory.working_set' as const;\n\n/**\n * The number of work items that are currently queued to be processed by the thread pool.\n *\n * @note Meter name: `System.Runtime`; Added in: .NET 9.0.\n * This metric reports the same values as calling [`ThreadPool.PendingWorkItemCount`](https://learn.microsoft.com/dotnet/api/system.threading.threadpool.pendingworkitemcount).\n */\nexport const METRIC_DOTNET_THREAD_POOL_QUEUE_LENGTH = 'dotnet.thread_pool.queue.length' as const;\n\n/**\n * The number of thread pool threads that currently exist.\n *\n * @note Meter name: `System.Runtime`; Added in: .NET 9.0.\n * This metric reports the same values as calling [`ThreadPool.ThreadCount`](https://learn.microsoft.com/dotnet/api/system.threading.threadpool.threadcount).\n */\nexport const METRIC_DOTNET_THREAD_POOL_THREAD_COUNT = 'dotnet.thread_pool.thread.count' as const;\n\n/**\n * The number of work items that the thread pool has completed since the process has started.\n *\n * @note Meter name: `System.Runtime`; Added in: .NET 9.0.\n * This metric reports the same values as calling [`ThreadPool.CompletedWorkItemCount`](https://learn.microsoft.com/dotnet/api/system.threading.threadpool.completedworkitemcount).\n */\nexport const METRIC_DOTNET_THREAD_POOL_WORK_ITEM_COUNT = 'dotnet.thread_pool.work_item.count' as const;\n\n/**\n * The number of timer instances that are currently active.\n *\n * @note Meter name: `System.Runtime`; Added in: .NET 9.0.\n * This metric reports the same values as calling [`Timer.ActiveCount`](https://learn.microsoft.com/dotnet/api/system.threading.timer.activecount).\n */\nexport const METRIC_DOTNET_TIMER_COUNT = 'dotnet.timer.count' as const;\n\n/**\n * Duration of HTTP client requests.\n */\nexport const METRIC_HTTP_CLIENT_REQUEST_DURATION = 'http.client.request.duration' as const;\n\n/**\n * Duration of HTTP server requests.\n */\nexport const METRIC_HTTP_SERVER_REQUEST_DURATION = 'http.server.request.duration' as const;\n\n/**\n * Number of classes currently loaded.\n */\nexport const METRIC_JVM_CLASS_COUNT = 'jvm.class.count' as const;\n\n/**\n * Number of classes loaded since JVM start.\n */\nexport const METRIC_JVM_CLASS_LOADED = 'jvm.class.loaded' as const;\n\n/**\n * Number of classes unloaded since JVM start.\n */\nexport const METRIC_JVM_CLASS_UNLOADED = 'jvm.class.unloaded' as const;\n\n/**\n * Number of processors available to the Java virtual machine.\n */\nexport const METRIC_JVM_CPU_COUNT = 'jvm.cpu.count' as const;\n\n/**\n * Recent CPU utilization for the process as reported by the JVM.\n *\n * @note The value range is [0.0,1.0]. This utilization is not defined as being for the specific interval since last measurement (unlike `system.cpu.utilization`). [Reference](https://docs.oracle.com/en/java/javase/17/docs/api/jdk.management/com/sun/management/OperatingSystemMXBean.html#getProcessCpuLoad()).\n */\nexport const METRIC_JVM_CPU_RECENT_UTILIZATION = 'jvm.cpu.recent_utilization' as const;\n\n/**\n * CPU time used by the process as reported by the JVM.\n */\nexport const METRIC_JVM_CPU_TIME = 'jvm.cpu.time' as const;\n\n/**\n * Duration of JVM garbage collection actions.\n */\nexport const METRIC_JVM_GC_DURATION = 'jvm.gc.duration' as const;\n\n/**\n * Measure of memory committed.\n */\nexport const METRIC_JVM_MEMORY_COMMITTED = 'jvm.memory.committed' as const;\n\n/**\n * Measure of max obtainable memory.\n */\nexport const METRIC_JVM_MEMORY_LIMIT = 'jvm.memory.limit' as const;\n\n/**\n * Measure of memory used.\n */\nexport const METRIC_JVM_MEMORY_USED = 'jvm.memory.used' as const;\n\n/**\n * Measure of memory used, as measured after the most recent garbage collection event on this pool.\n */\nexport const METRIC_JVM_MEMORY_USED_AFTER_LAST_GC = 'jvm.memory.used_after_last_gc' as const;\n\n/**\n * Number of executing platform threads.\n */\nexport const METRIC_JVM_THREAD_COUNT = 'jvm.thread.count' as const;\n\n/**\n * Number of connections that are currently active on the server.\n *\n * @note Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n */\nexport const METRIC_KESTREL_ACTIVE_CONNECTIONS = 'kestrel.active_connections' as const;\n\n/**\n * Number of TLS handshakes that are currently in progress on the server.\n *\n * @note Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n */\nexport const METRIC_KESTREL_ACTIVE_TLS_HANDSHAKES = 'kestrel.active_tls_handshakes' as const;\n\n/**\n * The duration of connections on the server.\n *\n * @note Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n */\nexport const METRIC_KESTREL_CONNECTION_DURATION = 'kestrel.connection.duration' as const;\n\n/**\n * Number of connections that are currently queued and are waiting to start.\n *\n * @note Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n */\nexport const METRIC_KESTREL_QUEUED_CONNECTIONS = 'kestrel.queued_connections' as const;\n\n/**\n * Number of HTTP requests on multiplexed connections (HTTP/2 and HTTP/3) that are currently queued and are waiting to start.\n *\n * @note Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n */\nexport const METRIC_KESTREL_QUEUED_REQUESTS = 'kestrel.queued_requests' as const;\n\n/**\n * Number of connections rejected by the server.\n *\n * @note Connections are rejected when the currently active count exceeds the value configured with `MaxConcurrentConnections`.\n * Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n */\nexport const METRIC_KESTREL_REJECTED_CONNECTIONS = 'kestrel.rejected_connections' as const;\n\n/**\n * The duration of TLS handshakes on the server.\n *\n * @note Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n */\nexport const METRIC_KESTREL_TLS_HANDSHAKE_DURATION = 'kestrel.tls_handshake.duration' as const;\n\n/**\n * Number of connections that are currently upgraded (WebSockets). .\n *\n * @note The counter only tracks HTTP/1.1 connections.\n *\n * Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n */\nexport const METRIC_KESTREL_UPGRADED_CONNECTIONS = 'kestrel.upgraded_connections' as const;\n\n/**\n * Number of connections that are currently active on the server.\n *\n * @note Meter name: `Microsoft.AspNetCore.Http.Connections`; Added in: ASP.NET Core 8.0\n */\nexport const METRIC_SIGNALR_SERVER_ACTIVE_CONNECTIONS = 'signalr.server.active_connections' as const;\n\n/**\n * The duration of connections on the server.\n *\n * @note Meter name: `Microsoft.AspNetCore.Http.Connections`; Added in: ASP.NET Core 8.0\n */\nexport const METRIC_SIGNALR_SERVER_CONNECTION_DURATION = 'signalr.server.connection.duration' as const;\n\n", "/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n//-----------------------------------------------------------------------------------------------------------\n// DO NOT EDIT, this is an Auto-generated file from scripts/semconv/templates/registry/ts-stable/events.ts.j2\n//-----------------------------------------------------------------------------------------------------------\n\n/**\n * This event describes a single exception.\n */\nexport const EVENT_EXCEPTION = 'exception' as const;\n\n", "/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-restricted-syntax --\n * These re-exports are only of constants, only two-levels deep, and\n * should not cause problems for tree-shakers.\n */\n\n// Deprecated. These are kept around for compatibility purposes\nexport * from './trace';\nexport * from './resource';\n\n// Use these instead\nexport * from './stable_attributes';\nexport * from './stable_metrics';\nexport * from './stable_events';\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by this package.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n\n/**\n * The name of the runtime of this process.\n *\n * @example OpenJDK Runtime Environment\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_PROCESS_RUNTIME_NAME = 'process.runtime.name' as const;\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { VERSION } from '../../version';\nimport {\n  ATTR_TELEMETRY_SDK_NAME,\n  ATTR_TELEMETRY_SDK_LANGUAGE,\n  TELEMETRY_SDK_LANGUAGE_VALUE_NODEJS,\n  ATTR_TELEMETRY_SDK_VERSION,\n} from '@opentelemetry/semantic-conventions';\nimport { ATTR_PROCESS_RUNTIME_NAME } from '../../semconv';\n\n/** Constants describing the SDK in use */\nexport const SDK_INFO = {\n  [ATTR_TELEMETRY_SDK_NAME]: 'opentelemetry',\n  [ATTR_PROCESS_RUNTIME_NAME]: 'node',\n  [ATTR_TELEMETRY_SDK_LANGUAGE]: TELEMETRY_SDK_LANGUAGE_VALUE_NODEJS,\n  [ATTR_TELEMETRY_SDK_VERSION]: VERSION,\n};\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport {\n  getStringFromEnv,\n  getBooleanFromEnv,\n  getNumberFromEnv,\n  getStringListFromEnv,\n} from './environment';\nexport { _globalThis } from '../../common/globalThis';\nexport { SDK_INFO } from './sdk-info';\n\n/**\n * @deprecated Use performance directly.\n */\nexport const otperformance: { now(): number; readonly timeOrigin: number } =\n  performance;\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nexport {\n  SDK_INFO,\n  _globalThis,\n  otperformance,\n  getBooleanFromEnv,\n  getStringFromEnv,\n  getNumberFromEnv,\n  getStringListFromEnv,\n} from './node';\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type * as api from '@opentelemetry/api';\nimport { otperformance as performance } from '../platform';\n\nconst NANOSECOND_DIGITS = 9;\nconst NANOSECOND_DIGITS_IN_MILLIS = 6;\nconst MILLISECONDS_TO_NANOSECONDS = Math.pow(10, NANOSECOND_DIGITS_IN_MILLIS);\nconst SECOND_TO_NANOSECONDS = Math.pow(10, NANOSECOND_DIGITS);\n\n/**\n * Converts a number of milliseconds from epoch to HrTime([seconds, remainder in nanoseconds]).\n * @param epochMillis\n */\nexport function millisToHrTime(epochMillis: number): api.HrTime {\n  const epochSeconds = epochMillis / 1000;\n  // Decimals only.\n  const seconds = Math.trunc(epochSeconds);\n  // Round sub-nanosecond accuracy to nanosecond.\n  const nanos = Math.round((epochMillis % 1000) * MILLISECONDS_TO_NANOSECONDS);\n  return [seconds, nanos];\n}\n\n/**\n * @deprecated Use `performance.timeOrigin` directly.\n */\nexport function getTimeOrigin(): number {\n  return performance.timeOrigin;\n}\n\n/**\n * Returns an hrtime calculated via performance component.\n * @param performanceNow\n */\nexport function hrTime(performanceNow?: number): api.HrTime {\n  const timeOrigin = millisToHrTime(performance.timeOrigin);\n  const now = millisToHrTime(\n    typeof performanceNow === 'number' ? performanceNow : performance.now()\n  );\n\n  return addHrTimes(timeOrigin, now);\n}\n\n/**\n *\n * Converts a TimeInput to an HrTime, defaults to _hrtime().\n * @param time\n */\nexport function timeInputToHrTime(time: api.TimeInput): api.HrTime {\n  // process.hrtime\n  if (isTimeInputHrTime(time)) {\n    return time as api.HrTime;\n  } else if (typeof time === 'number') {\n    // Distinguish between a relative performance.now() value and an absolute\n    // epoch-millisecond timestamp.\n    //\n    // performance.timeOrigin uses a monotonic clock that may be slightly ahead\n    // of Date.now() due to clock adjustments (see MDN docs). This means a\n    // real epoch-ms value (e.g. Date.now()) can land just below\n    // performance.timeOrigin, causing it to be misclassified as a relative\n    // performance.now() reading and doubled when timeOrigin is added.\n    //\n    // A genuine performance.now() value represents elapsed time since the\n    // document/process started, so it is bounded by system uptime. No real\n    // system has been running long enough for performance.now() to reach half\n    // the current epoch time (~1994 in ms terms). We therefore treat any value\n    // below half of performance.timeOrigin as a relative performance.now()\n    // reading, and everything else as an absolute epoch-millisecond timestamp.\n    if (time < performance.timeOrigin / 2) {\n      return hrTime(time);\n    } else {\n      // epoch milliseconds or performance.timeOrigin\n      return millisToHrTime(time);\n    }\n  } else if (time instanceof Date) {\n    return millisToHrTime(time.getTime());\n  } else {\n    throw TypeError('Invalid input type');\n  }\n}\n\n/**\n * Returns a duration of two hrTime.\n * @param startTime\n * @param endTime\n */\nexport function hrTimeDuration(\n  startTime: api.HrTime,\n  endTime: api.HrTime\n): api.HrTime {\n  let seconds = endTime[0] - startTime[0];\n  let nanos = endTime[1] - startTime[1];\n\n  // overflow\n  if (nanos < 0) {\n    seconds -= 1;\n    // negate\n    nanos += SECOND_TO_NANOSECONDS;\n  }\n\n  return [seconds, nanos];\n}\n\n/**\n * Convert hrTime to timestamp, for example \"2019-05-14T17:00:00.000123456Z\"\n * @param time\n */\nexport function hrTimeToTimeStamp(time: api.HrTime): string {\n  const precision = NANOSECOND_DIGITS;\n  const tmp = `${'0'.repeat(precision)}${time[1]}Z`;\n  const nanoString = tmp.substring(tmp.length - precision - 1);\n  const date = new Date(time[0] * 1000).toISOString();\n  return date.replace('000Z', nanoString);\n}\n\n/**\n * Convert hrTime to nanoseconds.\n * @param time\n */\nexport function hrTimeToNanoseconds(time: api.HrTime): number {\n  return time[0] * SECOND_TO_NANOSECONDS + time[1];\n}\n\n/**\n * Convert hrTime to microseconds.\n * @param time\n */\nexport function hrTimeToMicroseconds(time: api.HrTime): number {\n  return time[0] * 1e6 + time[1] / 1e3;\n}\n\n/**\n * Convert hrTime to milliseconds.\n * @param time\n */\nexport function hrTimeToMilliseconds(time: api.HrTime): number {\n  return time[0] * 1e3 + time[1] / 1e6;\n}\n\n/**\n * Convert hrTime to seconds.\n * @param time\n */\nexport function hrTimeToSeconds(time: api.HrTime): number {\n  return time[0] + time[1] / SECOND_TO_NANOSECONDS;\n}\n/**\n * check if time is HrTime\n * @param value\n */\nexport function isTimeInputHrTime(value: unknown): value is api.HrTime {\n  return (\n    Array.isArray(value) &&\n    value.length === 2 &&\n    typeof value[0] === 'number' &&\n    typeof value[1] === 'number'\n  );\n}\n\n/**\n * check if input value is a correct types.TimeInput\n * @param value\n */\nexport function isTimeInput(\n  value: unknown\n): value is api.HrTime | number | Date {\n  return (\n    isTimeInputHrTime(value) ||\n    typeof value === 'number' ||\n    value instanceof Date\n  );\n}\n\n/**\n * Given 2 HrTime formatted times, return their sum as an HrTime.\n */\nexport function addHrTimes(time1: api.HrTime, time2: api.HrTime): api.HrTime {\n  const out = [time1[0] + time2[0], time1[1] + time2[1]] as api.HrTime;\n\n  // Nanoseconds\n  if (out[1] >= SECOND_TO_NANOSECONDS) {\n    out[1] -= SECOND_TO_NANOSECONDS;\n    out[0] += 1;\n  }\n\n  return out;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @deprecated please copy this code to your implementation instead, this function will be removed in the next major version of this package.\n * @param timer\n */\nexport function unrefTimer(timer: { unref(): unknown } | number): void {\n  if (typeof timer !== 'number') {\n    timer.unref();\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport interface ExportResult {\n  code: ExportResultCode;\n  error?: Error;\n}\n\nexport enum ExportResultCode {\n  SUCCESS,\n  FAILED,\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n  Context,\n  TextMapGetter,\n  TextMapPropagator,\n  TextMapSetter,\n} from '@opentelemetry/api';\nimport { diag } from '@opentelemetry/api';\n\n/** Configuration object for composite propagator */\nexport interface CompositePropagatorConfig {\n  /**\n   * List of propagators to run. Propagators run in the\n   * list order. If a propagator later in the list writes the same context\n   * key as a propagator earlier in the list, the later on will \"win\".\n   */\n  propagators?: TextMapPropagator[];\n}\n\n/** Combines multiple propagators into a single propagator. */\nexport class CompositePropagator implements TextMapPropagator {\n  private readonly _propagators: TextMapPropagator[];\n  private readonly _fields: string[];\n\n  /**\n   * Construct a composite propagator from a list of propagators.\n   *\n   * @param [config] Configuration object for composite propagator\n   */\n  constructor(config: CompositePropagatorConfig = {}) {\n    this._propagators = config.propagators ?? [];\n\n    const fields = new Set<string>();\n    for (const propagator of this._propagators) {\n      // older propagators may not have fields function, null check to be sure\n      const propagatorFields =\n        typeof propagator.fields === 'function' ? propagator.fields() : [];\n      for (const field of propagatorFields) {\n        fields.add(field);\n      }\n    }\n    this._fields = Array.from(fields);\n  }\n\n  /**\n   * Run each of the configured propagators with the given context and carrier.\n   * Propagators are run in the order they are configured, so if multiple\n   * propagators write the same carrier key, the propagator later in the list\n   * will \"win\".\n   *\n   * @param context Context to inject\n   * @param carrier Carrier into which context will be injected\n   */\n  inject(context: Context, carrier: unknown, setter: TextMapSetter): void {\n    for (const propagator of this._propagators) {\n      try {\n        propagator.inject(context, carrier, setter);\n      } catch (err) {\n        diag.warn(\n          `Failed to inject with ${propagator.constructor.name}. Err: ${err.message}`\n        );\n      }\n    }\n  }\n\n  /**\n   * Run each of the configured propagators with the given context and carrier.\n   * Propagators are run in the order they are configured, so if multiple\n   * propagators write the same context key, the propagator later in the list\n   * will \"win\".\n   *\n   * @param context Context to add values to\n   * @param carrier Carrier from which to extract context\n   */\n  extract(context: Context, carrier: unknown, getter: TextMapGetter): Context {\n    return this._propagators.reduce((ctx, propagator) => {\n      try {\n        return propagator.extract(ctx, carrier, getter);\n      } catch (err) {\n        diag.warn(\n          `Failed to extract with ${propagator.constructor.name}. Err: ${err.message}`\n        );\n      }\n      return ctx;\n    }, context);\n  }\n\n  fields(): string[] {\n    // return a new array so our fields cannot be modified\n    return this._fields.slice();\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nconst VALID_KEY_CHAR_RANGE = '[_0-9a-z-*/]';\nconst VALID_KEY = `[a-z]${VALID_KEY_CHAR_RANGE}{0,255}`;\nconst VALID_VENDOR_KEY = `[a-z0-9]${VALID_KEY_CHAR_RANGE}{0,240}@[a-z]${VALID_KEY_CHAR_RANGE}{0,13}`;\nconst VALID_KEY_REGEX = new RegExp(`^(?:${VALID_KEY}|${VALID_VENDOR_KEY})$`);\nconst VALID_VALUE_BASE_REGEX = /^[ -~]{0,255}[!-~]$/;\nconst INVALID_VALUE_COMMA_EQUAL_REGEX = /,|=/;\n\n/**\n * Key is opaque string up to 256 characters printable. It MUST begin with a\n * lowercase letter, and can only contain lowercase letters a-z, digits 0-9,\n * underscores _, dashes -, asterisks *, and forward slashes /.\n * For multi-tenant vendor scenarios, an at sign (@) can be used to prefix the\n * vendor name. Vendors SHOULD set the tenant ID at the beginning of the key.\n * see https://www.w3.org/TR/trace-context/#key\n */\nexport function validateKey(key: string): boolean {\n  return VALID_KEY_REGEX.test(key);\n}\n\n/**\n * Value is opaque string up to 256 characters printable ASCII RFC0020\n * characters (i.e., the range 0x20 to 0x7E) except comma , and =.\n */\nexport function validateValue(value: string): boolean {\n  return (\n    VALID_VALUE_BASE_REGEX.test(value) &&\n    !INVALID_VALUE_COMMA_EQUAL_REGEX.test(value)\n  );\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { TraceState as TraceStateApi } from '@opentelemetry/api';\nimport { validateKey, validateValue } from '../internal/validators';\n\nconst MAX_TRACE_STATE_ITEMS = 32;\nconst MAX_TRACE_STATE_LEN = 512;\nconst LIST_MEMBERS_SEPARATOR = ',';\nconst LIST_MEMBER_KEY_VALUE_SPLITTER = '=';\n\n/**\n * TraceState must be a class and not a simple object type because of the spec\n * requirement (https://www.w3.org/TR/trace-context/#tracestate-field).\n *\n * Here is the list of allowed mutations:\n * - New key-value pair should be added into the beginning of the list\n * - The value of any key can be updated. Modified keys MUST be moved to the\n * beginning of the list.\n */\nexport class TraceState implements TraceStateApi {\n  private _length: number;\n  private _rawTraceState: string;\n  private _internalState: Map<string, string> | undefined;\n\n  constructor(rawTraceState?: string) {\n    this._rawTraceState =\n      typeof rawTraceState === 'string' ? rawTraceState : '';\n    this._length = this._rawTraceState.length;\n  }\n\n  set(key: string, value: string): TraceState {\n    if (!validateKey(key) || !validateValue(value)) {\n      return this;\n    }\n\n    const currState = this._getState();\n    const currValue = currState.get(key);\n    // Get the new length depending if we already have a value or not\n    // - for existing keys we add the difference between the length of the values\n    // - for new keys is the key & value lenght plus\n    //   - +1 for the key/value splitter\n    //   - +1 for the separator if there are other keys\n    let newLength = this._length;\n    if (typeof currValue === 'string') {\n      newLength += value.length - currValue.length;\n    } else {\n      newLength += key.length + value.length + (currState.size > 0 ? 2 : 1);\n    }\n    if (newLength > MAX_TRACE_STATE_LEN) {\n      return this;\n    }\n\n    const newState = new Map(currState);\n    newState.delete(key);\n    newState.set(key, value);\n    return this._fromState(newState, newLength);\n  }\n\n  unset(key: string): TraceState {\n    const currState = this._getState();\n    const currValue = currState.get(key);\n\n    // No need to create a new instance if the key does not exist\n    if (typeof currValue !== 'string') {\n      return this;\n    }\n\n    // Get the new length depending if we already have a value or not\n    // - for existing keys we substract key and value length plus\n    //   - +1 for the key/value splitter\n    //   - +1 for the separator if there are other keys\n    let newLength = this._length - (key.length + currValue.length + 1);\n    if (currState.size > 1) {\n      // remove separator from length if there's no key or only one.\n      newLength = newLength - 1;\n    }\n\n    const newState = new Map(currState);\n    newState.delete(key);\n    return this._fromState(newState, newLength);\n  }\n\n  get(key: string): string | undefined {\n    const currState = this._getState();\n    return currState.get(key);\n  }\n\n  serialize(): string {\n    // Maps put new entries at the end. We prepend the seralized entry\n    // to get the right order according to the spec (updated members go 1st)\n    let serialized = '';\n    let index = 0;\n    for (const entry of this._getState()) {\n      if (index > 0) {\n        serialized = LIST_MEMBERS_SEPARATOR + serialized;\n      }\n      serialized =\n        `${entry[0]}${LIST_MEMBER_KEY_VALUE_SPLITTER}${entry[1]}` + serialized;\n      index++;\n    }\n    return serialized;\n  }\n\n  private _getState(): Map<string, string> {\n    if (this._internalState) {\n      return this._internalState;\n    }\n\n    // Not parsed yet, lets do it\n    const vendorMembers = this._rawTraceState.split(LIST_MEMBERS_SEPARATOR);\n\n    // This Map will have the order reversed\n    const vendorEntries = new Map();\n    let currentLength = 0;\n\n    for (const member of vendorMembers) {\n      const m = member.trim();\n      const idx = m.indexOf(LIST_MEMBER_KEY_VALUE_SPLITTER);\n      if (idx === -1) {\n        continue;\n      }\n\n      const key = m.slice(0, idx);\n      const value = m.slice(idx + 1);\n      if (!validateKey(key) || !validateValue(value)) {\n        continue;\n      }\n\n      // Skip if adding the new member exceeds the length\n      const futureLength =\n        currentLength + m.length + (vendorEntries.size > 0 ? 1 : 0);\n      if (futureLength > MAX_TRACE_STATE_LEN) {\n        continue;\n      }\n\n      // All good, add it\n      vendorEntries.set(key, value);\n      currentLength = futureLength;\n\n      // Check if we reached the max items\n      if (vendorEntries.size >= MAX_TRACE_STATE_ITEMS) {\n        break;\n      }\n    }\n\n    // Now we set the length & the Map in the right order\n    this._length = currentLength;\n    this._internalState = new Map(\n      Array.from(vendorEntries.entries()).reverse()\n    );\n    return this._internalState;\n  }\n\n  private _fromState(state: Map<string, string>, length: number): TraceState {\n    const traceState = Object.create(TraceState.prototype) as TraceState;\n    traceState._internalState = state;\n    traceState._length = length;\n    return traceState;\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n  Context,\n  SpanContext,\n  TextMapGetter,\n  TextMapPropagator,\n  TextMapSetter,\n} from '@opentelemetry/api';\nimport { isSpanContextValid, trace, TraceFlags } from '@opentelemetry/api';\nimport { isTracingSuppressed } from './suppress-tracing';\nimport { TraceState } from './TraceState';\n\nexport const TRACE_PARENT_HEADER = 'traceparent';\nexport const TRACE_STATE_HEADER = 'tracestate';\n\nconst VERSION = '00';\nconst VERSION_PART = '(?!ff)[\\\\da-f]{2}';\nconst TRACE_ID_PART = '(?![0]{32})[\\\\da-f]{32}';\nconst PARENT_ID_PART = '(?![0]{16})[\\\\da-f]{16}';\nconst FLAGS_PART = '[\\\\da-f]{2}';\nconst TRACE_PARENT_REGEX = new RegExp(\n  `^\\\\s?(${VERSION_PART})-(${TRACE_ID_PART})-(${PARENT_ID_PART})-(${FLAGS_PART})(-.*)?\\\\s?$`\n);\n\n/**\n * Parses information from the [traceparent] span tag and converts it into {@link SpanContext}\n * @param traceParent - A meta property that comes from server.\n *     It should be dynamically generated server side to have the server's request trace Id,\n *     a parent span Id that was set on the server's request span,\n *     and the trace flags to indicate the server's sampling decision\n *     (01 = sampled, 00 = not sampled).\n *     for example: '{version}-{traceId}-{spanId}-{sampleDecision}'\n *     For more information see {@link https://www.w3.org/TR/trace-context/}\n */\nexport function parseTraceParent(traceParent: string): SpanContext | null {\n  const match = TRACE_PARENT_REGEX.exec(traceParent);\n  if (!match) return null;\n\n  // According to the specification the implementation should be compatible\n  // with future versions. If there are more parts, we only reject it if it's using version 00\n  // See https://www.w3.org/TR/trace-context/#versioning-of-traceparent\n  if (match[1] === '00' && match[5]) return null;\n\n  return {\n    traceId: match[2],\n    spanId: match[3],\n    traceFlags: parseInt(match[4], 16),\n  };\n}\n\n/**\n * Propagates {@link SpanContext} through Trace Context format propagation.\n *\n * Based on the Trace Context specification:\n * https://www.w3.org/TR/trace-context/\n */\nexport class W3CTraceContextPropagator implements TextMapPropagator {\n  inject(context: Context, carrier: unknown, setter: TextMapSetter): void {\n    const spanContext = trace.getSpanContext(context);\n    if (\n      !spanContext ||\n      isTracingSuppressed(context) ||\n      !isSpanContextValid(spanContext)\n    )\n      return;\n\n    const traceParent = `${VERSION}-${spanContext.traceId}-${\n      spanContext.spanId\n    }-0${Number(spanContext.traceFlags || TraceFlags.NONE).toString(16)}`;\n\n    setter.set(carrier, TRACE_PARENT_HEADER, traceParent);\n    if (spanContext.traceState) {\n      setter.set(\n        carrier,\n        TRACE_STATE_HEADER,\n        spanContext.traceState.serialize()\n      );\n    }\n  }\n\n  extract(context: Context, carrier: unknown, getter: TextMapGetter): Context {\n    const traceParentHeader = getter.get(carrier, TRACE_PARENT_HEADER);\n    if (!traceParentHeader) return context;\n    const traceParent = Array.isArray(traceParentHeader)\n      ? traceParentHeader[0]\n      : traceParentHeader;\n    if (typeof traceParent !== 'string') return context;\n    const spanContext = parseTraceParent(traceParent);\n    if (!spanContext) return context;\n\n    spanContext.isRemote = true;\n\n    const traceStateHeader = getter.get(carrier, TRACE_STATE_HEADER);\n    if (traceStateHeader) {\n      // If more than one `tracestate` header is found, we merge them into a\n      // single header.\n      const state = Array.isArray(traceStateHeader)\n        ? traceStateHeader.join(',')\n        : traceStateHeader;\n      spanContext.traceState = new TraceState(\n        typeof state === 'string' ? state : undefined\n      );\n    }\n    return trace.setSpanContext(context, spanContext);\n  }\n\n  fields(): string[] {\n    return [TRACE_PARENT_HEADER, TRACE_STATE_HEADER];\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Context, Span } from '@opentelemetry/api';\nimport { createContextKey } from '@opentelemetry/api';\n\nconst RPC_METADATA_KEY = createContextKey(\n  'OpenTelemetry SDK Context Key RPC_METADATA'\n);\n\nexport enum RPCType {\n  HTTP = 'http',\n}\n\ntype HTTPMetadata = {\n  type: RPCType.HTTP;\n  route?: string;\n  span: Span;\n};\n\n/**\n * Allows for future rpc metadata to be used with this mechanism\n */\nexport type RPCMetadata = HTTPMetadata;\n\nexport function setRPCMetadata(context: Context, meta: RPCMetadata): Context {\n  return context.setValue(RPC_METADATA_KEY, meta);\n}\n\nexport function deleteRPCMetadata(context: Context): Context {\n  return context.deleteValue(RPC_METADATA_KEY);\n}\n\nexport function getRPCMetadata(context: Context): RPCMetadata | undefined {\n  return context.getValue(RPC_METADATA_KEY) as RPCMetadata | undefined;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * based on lodash in order to support esm builds without esModuleInterop.\n * lodash is using MIT License.\n **/\n\nconst objectTag = '[object Object]';\nconst nullTag = '[object Null]';\nconst undefinedTag = '[object Undefined]';\nconst funcProto = Function.prototype;\nconst funcToString = funcProto.toString;\nconst objectCtorString = funcToString.call(Object);\nconst getPrototypeOf = Object.getPrototypeOf;\nconst objectProto = Object.prototype;\nconst hasOwnProperty = objectProto.hasOwnProperty;\nconst symToStringTag = Symbol ? Symbol.toStringTag : undefined;\nconst nativeObjectToString = objectProto.toString;\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nexport function isPlainObject(value: any) {\n  if (!isObjectLike(value) || baseGetTag(value) !== objectTag) {\n    return false;\n  }\n  const proto = getPrototypeOf(value);\n  if (proto === null) {\n    return true;\n  }\n  const Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return (\n    typeof Ctor == 'function' &&\n    Ctor instanceof Ctor &&\n    funcToString.call(Ctor) === objectCtorString\n  );\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value: any) {\n  return value != null && typeof value == 'object';\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value: any) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return symToStringTag && symToStringTag in Object(value)\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value: any) {\n  const isOwn = hasOwnProperty.call(value, symToStringTag as any),\n    tag = value[symToStringTag as any];\n  let unmasked = false;\n\n  try {\n    value[symToStringTag as any] = undefined;\n    unmasked = true;\n  } catch {\n    // silence\n  }\n\n  const result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag as any] = tag;\n    } else {\n      delete value[symToStringTag as any];\n    }\n  }\n  return result;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value: any) {\n  return nativeObjectToString.call(value);\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { isPlainObject } from './lodash.merge';\n\nconst MAX_LEVEL = 20;\n\ninterface ObjectInto {\n  obj: any;\n  key: string;\n}\n\n/**\n * Merges objects together\n * @param args - objects / values to be merged\n */\nexport function merge(...args: any[]): any {\n  let result: any = args.shift();\n  const objects: WeakMap<any, ObjectInto[]> | undefined = new WeakMap<\n    any,\n    ObjectInto[]\n  >();\n  while (args.length > 0) {\n    result = mergeTwoObjects(result, args.shift(), 0, objects);\n  }\n\n  return result;\n}\n\nfunction takeValue(value: any): any {\n  if (isArray(value)) {\n    return value.slice();\n  }\n  return value;\n}\n\n/**\n * Merges two objects\n * @param one - first object\n * @param two - second object\n * @param level - current deep level\n * @param objects - objects holder that has been already referenced - to prevent\n * cyclic dependency\n */\nfunction mergeTwoObjects(\n  one: any,\n  two: any,\n  level = 0,\n  objects: WeakMap<any, ObjectInto[]>\n): any {\n  let result: any;\n  if (level > MAX_LEVEL) {\n    return undefined;\n  }\n  level++;\n  if (isPrimitive(one) || isPrimitive(two) || isFunction(two)) {\n    result = takeValue(two);\n  } else if (isArray(one)) {\n    result = one.slice();\n    if (isArray(two)) {\n      for (let i = 0, j = two.length; i < j; i++) {\n        result.push(takeValue(two[i]));\n      }\n    } else if (isObject(two)) {\n      const keys = Object.keys(two);\n      for (let i = 0, j = keys.length; i < j; i++) {\n        const key = keys[i];\n        if (\n          key === '__proto__' ||\n          key === 'constructor' ||\n          key === 'prototype'\n        ) {\n          continue;\n        }\n        result[key] = takeValue(two[key]);\n      }\n    }\n  } else if (isObject(one)) {\n    if (isObject(two)) {\n      if (!shouldMerge(one, two)) {\n        return two;\n      }\n      result = Object.assign({}, one);\n      const keys = Object.keys(two);\n\n      for (let i = 0, j = keys.length; i < j; i++) {\n        const key = keys[i];\n        if (\n          key === '__proto__' ||\n          key === 'constructor' ||\n          key === 'prototype'\n        ) {\n          continue;\n        }\n        const twoValue = two[key];\n\n        if (isPrimitive(twoValue)) {\n          if (typeof twoValue === 'undefined') {\n            delete result[key];\n          } else {\n            // result[key] = takeValue(twoValue);\n            result[key] = twoValue;\n          }\n        } else {\n          const obj1 = result[key];\n          const obj2 = twoValue;\n\n          if (\n            wasObjectReferenced(one, key, objects) ||\n            wasObjectReferenced(two, key, objects)\n          ) {\n            delete result[key];\n          } else {\n            if (isObject(obj1) && isObject(obj2)) {\n              const arr1 = objects.get(obj1) || [];\n              const arr2 = objects.get(obj2) || [];\n              arr1.push({ obj: one, key });\n              arr2.push({ obj: two, key });\n              objects.set(obj1, arr1);\n              objects.set(obj2, arr2);\n            }\n\n            result[key] = mergeTwoObjects(\n              result[key],\n              twoValue,\n              level,\n              objects\n            );\n          }\n        }\n      }\n    } else {\n      result = two;\n    }\n  }\n\n  return result;\n}\n\n/**\n * Function to check if object has been already reference\n * @param obj\n * @param key\n * @param objects\n */\nfunction wasObjectReferenced(\n  obj: any,\n  key: string,\n  objects: WeakMap<any, ObjectInto[]>\n): boolean {\n  const arr = objects.get(obj[key]) || [];\n  for (let i = 0, j = arr.length; i < j; i++) {\n    const info = arr[i];\n    if (info.key === key && info.obj === obj) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction isArray(value: any): boolean {\n  return Array.isArray(value);\n}\n\nfunction isFunction(value: any): boolean {\n  return typeof value === 'function';\n}\n\nfunction isObject(value: any): boolean {\n  return (\n    !isPrimitive(value) &&\n    !isArray(value) &&\n    !isFunction(value) &&\n    typeof value === 'object'\n  );\n}\n\nfunction isPrimitive(value: any): boolean {\n  return (\n    typeof value === 'string' ||\n    typeof value === 'number' ||\n    typeof value === 'boolean' ||\n    typeof value === 'undefined' ||\n    value instanceof Date ||\n    value instanceof RegExp ||\n    value === null\n  );\n}\n\nfunction shouldMerge(one: any, two: any): boolean {\n  if (!isPlainObject(one) || !isPlainObject(two)) {\n    return false;\n  }\n\n  return true;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Error that is thrown on timeouts.\n */\nexport class TimeoutError extends Error {\n  constructor(message?: string) {\n    super(message);\n\n    // manually adjust prototype to retain `instanceof` functionality when targeting ES5, see:\n    // https://github.com/Microsoft/TypeScript-wiki/blob/main/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n    Object.setPrototypeOf(this, TimeoutError.prototype);\n  }\n}\n\n/**\n * Adds a timeout to a promise and rejects if the specified timeout has elapsed. Also rejects if the specified promise\n * rejects, and resolves if the specified promise resolves.\n *\n * <p> NOTE: this operation will continue even after it throws a {@link TimeoutError}.\n *\n * @param promise promise to use with timeout.\n * @param timeout the timeout in milliseconds until the returned promise is rejected.\n */\nexport function callWithTimeout<T>(\n  promise: Promise<T>,\n  timeout: number\n): Promise<T> {\n  let timeoutHandle: ReturnType<typeof setTimeout>;\n\n  const timeoutPromise = new Promise<never>(function timeoutFunction(\n    _resolve,\n    reject\n  ) {\n    timeoutHandle = setTimeout(function timeoutHandler() {\n      reject(new TimeoutError('Operation timed out.'));\n    }, timeout);\n  });\n\n  return Promise.race([promise, timeoutPromise]).then(\n    result => {\n      clearTimeout(timeoutHandle);\n      return result;\n    },\n    reason => {\n      clearTimeout(timeoutHandle);\n      throw reason;\n    }\n  );\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nexport function urlMatches(url: string, urlToMatch: string | RegExp): boolean {\n  if (typeof urlToMatch === 'string') {\n    return url === urlToMatch;\n  } else {\n    return !!url.match(urlToMatch);\n  }\n}\n/**\n * Check if {@param url} should be ignored when comparing against {@param ignoredUrls}\n * @param url\n * @param ignoredUrls\n */\nexport function isUrlIgnored(\n  url: string,\n  ignoredUrls?: Array<string | RegExp>\n): boolean {\n  if (!ignoredUrls) {\n    return false;\n  }\n\n  for (const ignoreUrl of ignoredUrls) {\n    if (urlMatches(url, ignoreUrl)) {\n      return true;\n    }\n  }\n  return false;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport class Deferred<T> {\n  private _promise: Promise<T>;\n  private _resolve!: (val: T) => void;\n  private _reject!: (error: unknown) => void;\n  constructor() {\n    this._promise = new Promise((resolve, reject) => {\n      this._resolve = resolve;\n      this._reject = reject;\n    });\n  }\n\n  get promise() {\n    return this._promise;\n  }\n\n  resolve(val: T) {\n    this._resolve(val);\n  }\n\n  reject(err: unknown) {\n    this._reject(err);\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Deferred } from './promise';\n\n/**\n * Bind the callback and only invoke the callback once regardless how many times `BindOnceFuture.call` is invoked.\n */\nexport class BindOnceFuture<\n  R,\n  This = unknown,\n  T extends (this: This, ...args: unknown[]) => R = () => R,\n> {\n  private _isCalled = false;\n  private _deferred = new Deferred<R>();\n  private _callback: T;\n  private _that: This;\n\n  constructor(callback: T, that: This) {\n    this._callback = callback;\n    this._that = that;\n  }\n\n  get isCalled() {\n    return this._isCalled;\n  }\n\n  get promise() {\n    return this._deferred.promise;\n  }\n\n  call(...args: Parameters<T>): Promise<R> {\n    if (!this._isCalled) {\n      this._isCalled = true;\n      try {\n        Promise.resolve(this._callback.call(this._that, ...args)).then(\n          val => this._deferred.resolve(val),\n          err => this._deferred.reject(err)\n        );\n      } catch (err) {\n        this._deferred.reject(err);\n      }\n    }\n    return this._deferred.promise;\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { diag, DiagLogLevel } from '@opentelemetry/api';\n\nconst logLevelMap: { [key: string]: DiagLogLevel } = {\n  ALL: DiagLogLevel.ALL,\n  VERBOSE: DiagLogLevel.VERBOSE,\n  DEBUG: DiagLogLevel.DEBUG,\n  INFO: DiagLogLevel.INFO,\n  WARN: DiagLogLevel.WARN,\n  ERROR: DiagLogLevel.ERROR,\n  NONE: DiagLogLevel.NONE,\n};\n\n/**\n * Convert a string to a {@link DiagLogLevel}, defaults to {@link DiagLogLevel} if the log level does not exist or undefined if the input is undefined.\n * @param value\n */\nexport function diagLogLevelFromString(\n  value: string | undefined\n): DiagLogLevel | undefined {\n  if (value == null) {\n    // don't fall back to default - no value set has different semantics for ús than an incorrect value (do not set vs. fall back to default)\n    return undefined;\n  }\n\n  const resolvedLogLevel = logLevelMap[value.toUpperCase()];\n\n  if (resolvedLogLevel == null) {\n    diag.warn(\n      `Unknown log level \"${value}\", expected one of ${Object.keys(logLevelMap)}, using default`\n    );\n    return DiagLogLevel.INFO;\n  }\n\n  return resolvedLogLevel;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { context } from '@opentelemetry/api';\nimport type { ExportResult } from '../ExportResult';\nimport { suppressTracing } from '../trace/suppress-tracing';\n\nexport interface Exporter<T> {\n  export(arg: T, resultCallback: (result: ExportResult) => void): void;\n}\n\n/**\n * @internal\n * Shared functionality used by Exporters while exporting data, including suppression of Traces.\n */\nexport function _export<T>(\n  exporter: Exporter<T>,\n  arg: T\n): Promise<ExportResult> {\n  return new Promise(resolve => {\n    // prevent downstream exporter calls from generating spans\n    context.with(suppressTracing(context.active()), () => {\n      exporter.export(arg, resolve);\n    });\n  });\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport { W3CBaggagePropagator } from './baggage/propagation/W3CBaggagePropagator';\nexport { AnchoredClock } from './common/anchored-clock';\nexport type { Clock } from './common/anchored-clock';\nexport { isAttributeValue, sanitizeAttributes } from './common/attributes';\nexport {\n  globalErrorHandler,\n  setGlobalErrorHandler,\n} from './common/global-error-handler';\nexport { loggingErrorHandler } from './common/logging-error-handler';\nexport {\n  addHrTimes,\n  getTimeOrigin,\n  hrTime,\n  hrTimeDuration,\n  hrTimeToMicroseconds,\n  hrTimeToMilliseconds,\n  hrTimeToNanoseconds,\n  hrTimeToSeconds,\n  hrTimeToTimeStamp,\n  isTimeInput,\n  isTimeInputHrTime,\n  millisToHrTime,\n  timeInputToHrTime,\n} from './common/time';\nexport { unrefTimer } from './common/timer-util';\nexport type { ErrorHandler, InstrumentationScope } from './common/types';\nexport { ExportResultCode } from './ExportResult';\nexport type { ExportResult } from './ExportResult';\nexport { parseKeyPairsIntoRecord } from './baggage/utils';\nexport {\n  SDK_INFO,\n  _globalThis,\n  getStringFromEnv,\n  getBooleanFromEnv,\n  getNumberFromEnv,\n  getStringListFromEnv,\n  otperformance,\n} from './platform';\nexport { CompositePropagator } from './propagation/composite';\nexport type { CompositePropagatorConfig } from './propagation/composite';\nexport {\n  TRACE_PARENT_HEADER,\n  TRACE_STATE_HEADER,\n  W3CTraceContextPropagator,\n  parseTraceParent,\n} from './trace/W3CTraceContextPropagator';\nexport {\n  RPCType,\n  deleteRPCMetadata,\n  getRPCMetadata,\n  setRPCMetadata,\n} from './trace/rpc-metadata';\nexport type { RPCMetadata } from './trace/rpc-metadata';\nexport {\n  isTracingSuppressed,\n  suppressTracing,\n  unsuppressTracing,\n} from './trace/suppress-tracing';\nexport { TraceState } from './trace/TraceState';\nexport { merge } from './utils/merge';\nexport { TimeoutError, callWithTimeout } from './utils/timeout';\nexport { isUrlIgnored, urlMatches } from './utils/url';\nexport { BindOnceFuture } from './utils/callback';\nexport { diagLogLevelFromString } from './utils/configuration';\nimport { _export } from './internal/exporter';\nexport const internal = {\n  _export,\n};\n", "/* eslint-disable max-lines */\nimport { errorMonitor } from 'node:events';\nimport type { IncomingHttpHeaders } from 'node:http';\nimport { context } from '@opentelemetry/api';\nimport type { RPCMetadata } from '@opentelemetry/core';\nimport { RPCType, setRPCMetadata } from '@opentelemetry/core';\nimport {\n  HTTP_CLIENT_IP,\n  HTTP_FLAVOR,\n  HTTP_HOST,\n  HTTP_METHOD,\n  HTTP_RESPONSE_STATUS_CODE,\n  HTTP_ROUTE,\n  HTTP_SCHEME,\n  HTTP_STATUS_CODE,\n  HTTP_TARGET,\n  HTTP_URL,\n  HTTP_USER_AGENT,\n  NET_HOST_IP,\n  NET_HOST_NAME,\n  NET_HOST_PORT,\n  NET_PEER_IP,\n  NET_PEER_PORT,\n  NET_TRANSPORT,\n  SENTRY_HTTP_PREFETCH,\n  URL_FULL,\n  URL_PATH,\n} from '@sentry/conventions/attributes';\nimport type {\n  Event,\n  HttpClientRequest,\n  HttpIncomingMessage,\n  HttpServerResponse,\n  Integration,\n  IntegrationFn,\n  Span,\n  SpanAttributes,\n  SpanStatus,\n} from '@sentry/core';\nimport {\n  debug,\n  getIsolationScope,\n  getSpanStatusFromHttpCode,\n  httpHeadersToSpanAttributes,\n  isURLObjectRelative,\n  parseStringToURLObject,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SPAN_STATUS_ERROR,\n  stripUrlQueryAndFragment,\n  isTracingSuppressed,\n  bindScopeToEmitter,\n  startInactiveSpan,\n  withActiveSpan,\n  SPAN_KIND,\n  filterCollectedUrl,\n} from '@sentry/core';\nimport { DEBUG_BUILD } from '../../debug-build';\nimport type { NodeClient } from '../../sdk/client';\nimport { addStartSpanCallback } from './httpServerIntegration';\n\nconst INTEGRATION_NAME = 'Http.ServerSpans' as const;\n\n// Tree-shakable guard to remove all code related to tracing\ndeclare const __SENTRY_TRACING__: boolean;\n\nexport interface HttpServerSpansIntegrationOptions {\n  /**\n   * Do not capture spans for incoming HTTP requests to URLs where the given callback returns `true`.\n   * Spans will be non recording if tracing is disabled.\n   *\n   * The `urlPath` param consists of the URL path and query string (if any) of the incoming request.\n   * For example: `'/users/details?id=123'`\n   *\n   * The `request` param contains the original {@type IncomingMessage} object of the incoming request.\n   * You can use it to filter on additional properties like method, headers, etc.\n   */\n  ignoreIncomingRequests?: (urlPath: string, request: HttpIncomingMessage) => boolean;\n\n  /**\n   * Whether to automatically ignore common static asset requests like favicon.ico, robots.txt, etc.\n   * This helps reduce noise in your transactions.\n   *\n   * @default `true`\n   */\n  ignoreStaticAssets?: boolean;\n\n  /**\n   * Do not capture spans for incoming HTTP requests with the given status codes.\n   * By default, spans with some 3xx and 4xx status codes are ignored (see @default).\n   * Expects an array of status codes or a range of status codes, e.g. [[300,399], 404] would ignore 3xx and 404 status codes.\n   *\n   * @default `[[401, 404], [301, 303], [305, 399]]`\n   */\n  ignoreStatusCodes?: (number | [number, number])[];\n\n  /**\n   * @deprecated This is deprecated in favor of `incomingRequestSpanHook`.\n   */\n  instrumentation?: {\n    requestHook?: (span: Span, req: HttpClientRequest | HttpIncomingMessage) => void;\n    responseHook?: (span: Span, response: HttpIncomingMessage | HttpServerResponse) => void;\n    applyCustomAttributesOnSpan?: (\n      span: Span,\n      request: HttpClientRequest | HttpIncomingMessage,\n      response: HttpIncomingMessage | HttpServerResponse,\n    ) => void;\n  };\n\n  /**\n   * A hook that can be used to mutate the span for incoming requests.\n   * This is triggered after the span is created, but before it is recorded.\n   */\n  onSpanCreated?: (span: Span, request: HttpIncomingMessage, response: HttpServerResponse) => void;\n}\n\nconst _httpServerSpansIntegration = ((options: HttpServerSpansIntegrationOptions = {}) => {\n  const ignoreStaticAssets = options.ignoreStaticAssets ?? true;\n  const ignoreIncomingRequests = options.ignoreIncomingRequests;\n  const ignoreStatusCodes = options.ignoreStatusCodes ?? [\n    [401, 404],\n    // 300 and 304 are possibly valid status codes we do not want to filter\n    [301, 303],\n    [305, 399],\n  ];\n\n  const { onSpanCreated } = options;\n  // eslint-disable-next-line typescript/no-deprecated\n  const { requestHook, responseHook, applyCustomAttributesOnSpan } = options.instrumentation ?? {};\n\n  return {\n    name: INTEGRATION_NAME,\n    setup(client: NodeClient) {\n      // If no tracing, we can just skip everything here\n      if (typeof __SENTRY_TRACING__ !== 'undefined' && !__SENTRY_TRACING__) {\n        return;\n      }\n\n      client.on('httpServerRequest', (_request, _response, normalizedRequest) => {\n        // Type-casting this here because we do not want to put the node types into core\n        const request = _request as HttpIncomingMessage;\n        const response = _response as HttpServerResponse;\n\n        const startSpan = (next: () => boolean): boolean => {\n          if (\n            shouldIgnoreSpansForIncomingRequest(request, {\n              ignoreStaticAssets,\n              ignoreIncomingRequests,\n            })\n          ) {\n            DEBUG_BUILD && debug.log(INTEGRATION_NAME, 'Skipping span creation for incoming request', request.url);\n            return next();\n          }\n\n          const fullUrl = normalizedRequest.url || request.url || '/';\n          const urlObj = parseStringToURLObject(fullUrl);\n\n          const headers = request.headers;\n          const userAgent = headers['user-agent'];\n          const ips = headers['x-forwarded-for'];\n          const httpVersion = request.httpVersion;\n          const host = headers.host as string | undefined;\n          const hostname = host?.replace(/^(.*)(:[0-9]{1,5})/, '$1') || 'localhost';\n\n          const scheme = fullUrl.startsWith('https') ? 'https' : 'http';\n\n          const method = normalizedRequest.method || request.method?.toUpperCase() || 'GET';\n          const httpTargetWithoutQueryFragment = urlObj ? urlObj.pathname : stripUrlQueryAndFragment(fullUrl);\n          const bestEffortTransactionName = `${method} ${httpTargetWithoutQueryFragment}`;\n\n          const span = startInactiveSpan({\n            name: bestEffortTransactionName,\n            kind: SPAN_KIND.SERVER,\n            attributes: {\n              // Sentry specific attributes\n              [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.server',\n              [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.otel.http',\n              [SENTRY_HTTP_PREFETCH]: isKnownPrefetchRequest(request) || undefined,\n              [URL_FULL]: urlObj && !isURLObjectRelative(urlObj) ? filterCollectedUrl(urlObj.href, client) : undefined,\n              [URL_PATH]: urlObj?.pathname ?? httpTargetWithoutQueryFragment,\n              // Old Semantic Conventions attributes - added for compatibility with what `@opentelemetry/instrumentation-http` output before\n              /* eslint-disable typescript/no-deprecated */\n              [HTTP_URL]: filterCollectedUrl(fullUrl, client),\n              [HTTP_METHOD]: normalizedRequest.method,\n              [HTTP_TARGET]: filterCollectedUrl(\n                urlObj ? `${urlObj.pathname}${urlObj.search}` : httpTargetWithoutQueryFragment,\n                client,\n              ),\n              [HTTP_HOST]: host,\n              [NET_HOST_NAME]: hostname,\n              [HTTP_CLIENT_IP]: typeof ips === 'string' ? ips.split(',')[0] : undefined,\n              [HTTP_USER_AGENT]: userAgent,\n              [HTTP_SCHEME]: scheme,\n              [HTTP_FLAVOR]: httpVersion,\n              [NET_TRANSPORT]: httpVersion?.toUpperCase() === 'QUIC' ? 'ip_udp' : 'ip_tcp',\n              /* eslint-enable typescript/no-deprecated */\n              ...getRequestContentLengthAttribute(request),\n              ...httpHeadersToSpanAttributes(normalizedRequest.headers || {}, client.getDataCollectionOptions()),\n            },\n          });\n\n          // TODO v11: Remove the following three hooks, only onSpanCreated should remain\n          requestHook?.(span, request);\n          responseHook?.(span, response);\n          applyCustomAttributesOnSpan?.(span, request, response);\n          onSpanCreated?.(span, request, response);\n\n          const rpcMetadata: RPCMetadata = { type: RPCType.HTTP, span };\n\n          return withActiveSpan(span, () => {\n            // TODO(v11): Get rid of RPC metadata here\n            return context.with(setRPCMetadata(context.active(), rpcMetadata), () => {\n              bindScopeToEmitter(request);\n              bindScopeToEmitter(response);\n\n              // Ensure we only end the span once\n              // E.g. error can be emitted before close is emitted\n              let isEnded = false;\n              function endSpan(status: SpanStatus): void {\n                if (isEnded) {\n                  return;\n                }\n\n                isEnded = true;\n\n                const newAttributes = getIncomingRequestAttributesOnResponse(request, response, rpcMetadata);\n                span.setAttributes(newAttributes);\n                span.setStatus(status);\n                span.end();\n\n                // Update the transaction name if the route has changed\n                const route = newAttributes['http.route'];\n                if (route) {\n                  getIsolationScope().setTransactionName(`${request.method?.toUpperCase() || 'GET'} ${route}`);\n                }\n              }\n\n              response.on('close', () => {\n                endSpan(getSpanStatusFromHttpCode(response.statusCode));\n              });\n              response.on(errorMonitor, () => {\n                const httpStatus = getSpanStatusFromHttpCode(response.statusCode);\n                // Ensure we def. have an error status here\n                endSpan(httpStatus.code === SPAN_STATUS_ERROR ? httpStatus : { code: SPAN_STATUS_ERROR });\n              });\n\n              return next();\n            });\n          });\n        };\n\n        addStartSpanCallback(request, startSpan);\n      });\n    },\n    processEvent(event) {\n      if (event.type === 'transaction') {\n        const statusCode = event.contexts?.trace?.data?.['http.response.status_code'];\n        if (typeof statusCode === 'number') {\n          // Drop transaction if it has a status code that should be ignored\n          if (shouldFilterStatusCode(statusCode, ignoreStatusCodes)) {\n            DEBUG_BUILD && debug.log('Dropping transaction due to status code', statusCode);\n            return null;\n          }\n\n          // Surface the HTTP status as the top-level `response` context. The OTel SDK span\n          // exporter already does this on its path; doing it here covers transactions produced\n          // by the `SentryTracerProvider`, which bypasses that exporter.\n          event.contexts = {\n            ...event.contexts,\n            response: {\n              ...event.contexts?.response,\n              status_code: statusCode,\n            },\n          };\n        }\n      }\n\n      return event;\n    },\n    afterAllSetup(client) {\n      if (!DEBUG_BUILD) {\n        return;\n      }\n\n      if (client.getIntegrationByName('Http')) {\n        debug.warn(\n          'It seems that you have manually added `httpServerSpansIntegration` while `httpIntegration` is also present. Make sure to remove `httpIntegration` when adding `httpServerSpansIntegration`.',\n        );\n      }\n\n      if (!client.getIntegrationByName('Http.Server')) {\n        debug.error(\n          'It seems that you have manually added `httpServerSpansIntegration` without adding `httpServerIntegration`. This is a requiement for spans to be created - please add the `httpServerIntegration` integration.',\n        );\n      }\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * This integration emits spans for incoming requests handled via the node `http` module.\n * It requires the `httpServerIntegration` to be present.\n */\nexport const httpServerSpansIntegration = _httpServerSpansIntegration as (\n  options?: HttpServerSpansIntegrationOptions,\n) => Integration & {\n  name: 'Http.ServerSpans';\n  setup: (client: NodeClient) => void;\n  processEvent: (event: Event) => Event | null;\n};\n\nfunction isKnownPrefetchRequest(req: HttpIncomingMessage): boolean {\n  // Currently only handles Next.js prefetch requests but may check other frameworks in the future.\n  return req.headers['next-router-prefetch'] === '1';\n}\n\n/**\n * Check if a request is for a common static asset that should be ignored by default.\n *\n * Only exported for tests.\n */\nexport function isStaticAssetRequest(urlPath: string): boolean {\n  const path = stripUrlQueryAndFragment(urlPath);\n  // Common static file extensions\n  if (path.match(/\\.(ico|png|jpg|jpeg|gif|svg|css|js|woff|woff2|ttf|eot|webp|avif)$/)) {\n    return true;\n  }\n\n  // Common metadata files\n  if (path.match(/^\\/(robots\\.txt|sitemap\\.xml|manifest\\.json|browserconfig\\.xml)$/)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction shouldIgnoreSpansForIncomingRequest(\n  request: HttpIncomingMessage,\n  {\n    ignoreStaticAssets,\n    ignoreIncomingRequests,\n  }: {\n    ignoreStaticAssets?: boolean;\n    ignoreIncomingRequests?: (urlPath: string, request: HttpIncomingMessage) => boolean;\n  },\n): boolean {\n  if (isTracingSuppressed()) {\n    return true;\n  }\n\n  // request.url is the only property that holds any information about the url\n  // it only consists of the URL path and query string (if any)\n  const urlPath = request.url;\n\n  const method = request.method?.toUpperCase();\n  // We do not capture OPTIONS/HEAD requests as spans\n  if (method === 'OPTIONS' || method === 'HEAD' || !urlPath) {\n    return true;\n  }\n\n  // Default static asset filtering\n  if (ignoreStaticAssets && method === 'GET' && isStaticAssetRequest(urlPath)) {\n    return true;\n  }\n\n  if (ignoreIncomingRequests?.(urlPath, request)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction getRequestContentLengthAttribute(request: HttpIncomingMessage): SpanAttributes {\n  const length = getContentLength(request.headers);\n  if (length == null) {\n    return {};\n  }\n\n  if (isCompressed(request.headers)) {\n    return {\n      ['http.request_content_length']: length,\n    };\n  } else {\n    return {\n      ['http.request_content_length_uncompressed']: length,\n    };\n  }\n}\n\nfunction getContentLength(headers: IncomingHttpHeaders): number | null {\n  const contentLengthHeader = headers['content-length'];\n  if (contentLengthHeader === undefined) return null;\n\n  const contentLength = parseInt(contentLengthHeader, 10);\n  if (isNaN(contentLength)) return null;\n\n  return contentLength;\n}\n\nfunction isCompressed(headers: IncomingHttpHeaders): boolean {\n  const encoding = headers['content-encoding'];\n\n  return !!encoding && encoding !== 'identity';\n}\n\nfunction getIncomingRequestAttributesOnResponse(\n  request: HttpIncomingMessage,\n  response: HttpServerResponse,\n  rpcMetadata?: RPCMetadata,\n): SpanAttributes {\n  // take socket from the request,\n  // since it may be detached from the response object in keep-alive mode\n  const { socket } = request;\n  const { statusCode, statusMessage } = response;\n\n  const newAttributes: SpanAttributes = {\n    [HTTP_RESPONSE_STATUS_CODE]: statusCode,\n    // eslint-disable-next-line typescript/no-deprecated\n    [HTTP_STATUS_CODE]: statusCode,\n    'http.status_text': statusMessage?.toUpperCase(),\n  };\n\n  if (socket) {\n    const { localAddress, localPort, remoteAddress, remotePort } = socket;\n    // eslint-disable-next-line typescript/no-deprecated\n    newAttributes[NET_HOST_IP] = localAddress;\n    // eslint-disable-next-line typescript/no-deprecated\n    newAttributes[NET_HOST_PORT] = localPort;\n    // eslint-disable-next-line typescript/no-deprecated\n    newAttributes[NET_PEER_IP] = remoteAddress;\n    // oxlint-disable-next-line typescript/no-deprecated\n    newAttributes[NET_PEER_PORT] = remotePort;\n  }\n  // eslint-disable-next-line typescript/no-deprecated\n  newAttributes[HTTP_STATUS_CODE] = statusCode;\n  newAttributes['http.status_text'] = (statusMessage || '').toUpperCase();\n\n  if (rpcMetadata?.type === RPCType.HTTP && rpcMetadata.route !== undefined) {\n    const routeName = rpcMetadata.route;\n    newAttributes[HTTP_ROUTE] = routeName;\n  }\n\n  return newAttributes;\n}\n\n/**\n * If the given status code should be filtered for the given list of status codes/ranges.\n */\nfunction shouldFilterStatusCode(statusCode: number, dropForStatusCodes: (number | [number, number])[]): boolean {\n  return dropForStatusCodes.some(code => {\n    if (typeof code === 'number') {\n      return code === statusCode;\n    }\n\n    const [min, max] = code;\n    return statusCode >= min && statusCode <= max;\n  });\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Context, TimeInput } from '@opentelemetry/api';\nimport type { AnyValue, AnyValueMap } from './AnyValue';\n\nexport type LogBody = AnyValue;\nexport type LogAttributes = AnyValueMap;\n\nexport enum SeverityNumber {\n  UNSPECIFIED = 0,\n  TRACE = 1,\n  TRACE2 = 2,\n  TRACE3 = 3,\n  TRACE4 = 4,\n  DEBUG = 5,\n  DEBUG2 = 6,\n  DEBUG3 = 7,\n  DEBUG4 = 8,\n  INFO = 9,\n  INFO2 = 10,\n  INFO3 = 11,\n  INFO4 = 12,\n  WARN = 13,\n  WARN2 = 14,\n  WARN3 = 15,\n  WARN4 = 16,\n  ERROR = 17,\n  ERROR2 = 18,\n  ERROR3 = 19,\n  ERROR4 = 20,\n  FATAL = 21,\n  FATAL2 = 22,\n  FATAL3 = 23,\n  FATAL4 = 24,\n}\n\nexport interface LogRecord {\n  /**\n   * The unique identifier for the log record.\n   */\n  eventName?: string;\n\n  /**\n   * The time when the log record occurred as UNIX Epoch time in nanoseconds.\n   */\n  timestamp?: TimeInput;\n\n  /**\n   * Time when the event was observed by the collection system.\n   */\n  observedTimestamp?: TimeInput;\n\n  /**\n   * Numerical value of the severity.\n   */\n  severityNumber?: SeverityNumber;\n\n  /**\n   * The severity text.\n   */\n  severityText?: string;\n\n  /**\n   * A value containing the body of the log record.\n   */\n  body?: LogBody;\n\n  /**\n   * Attributes that define the log record.\n   */\n  attributes?: LogAttributes;\n\n  /**\n   * An exception (or error) associated with the log record.\n   *\n   * @experimental\n   */\n  exception?: unknown;\n\n  /**\n   * The Context associated with the LogRecord.\n   */\n  context?: Context;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Logger } from './types/Logger';\nimport type { LogRecord } from './types/LogRecord';\n\nexport class NoopLogger implements Logger {\n  emit(_logRecord: LogRecord): void {}\n  enabled(): boolean {\n    return false;\n  }\n}\n\nexport const NOOP_LOGGER = new NoopLogger();\n\n/**\n * Create a no-op Logger\n */\nexport function createNoopLogger(): Logger {\n  return NOOP_LOGGER;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { LoggerProvider } from '../types/LoggerProvider';\n\nexport const GLOBAL_LOGS_API_KEY = Symbol.for('io.opentelemetry.js.api.logs');\n\ntype Get<T> = (version: number) => T;\ntype OtelGlobal = Partial<{\n  [GLOBAL_LOGS_API_KEY]: Get<LoggerProvider>;\n}>;\n\nexport const _global = globalThis as OtelGlobal;\n\n/**\n * Make a function which accepts a version integer and returns the instance of an API if the version\n * is compatible, or a fallback version (usually NOOP) if it is not.\n *\n * @param requiredVersion Backwards compatibility version which is required to return the instance\n * @param instance Instance which should be returned if the required version is compatible\n * @param fallback Fallback instance, usually NOOP, which will be returned if the required version is not compatible\n */\nexport function makeGetter<T>(\n  requiredVersion: number,\n  instance: T,\n  fallback: T\n): Get<T> {\n  return (version: number): T =>\n    version === requiredVersion ? instance : fallback;\n}\n\n/**\n * A number which should be incremented each time a backwards incompatible\n * change is made to the API. This number is used when an API package\n * attempts to access the global API to ensure it is getting a compatible\n * version. If the global API is not compatible with the API package\n * attempting to get it, a NOOP API implementation will be returned.\n */\nexport const API_BACKWARDS_COMPATIBILITY_VERSION = 1;\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { LoggerProvider } from './types/LoggerProvider';\nimport type { Logger } from './types/Logger';\nimport type { LoggerOptions } from './types/LoggerOptions';\nimport { NoopLogger } from './NoopLogger';\n\nexport class NoopLoggerProvider implements LoggerProvider {\n  getLogger(\n    _name: string,\n    _version?: string | undefined,\n    _options?: LoggerOptions | undefined\n  ): Logger {\n    return new NoopLogger();\n  }\n}\n\nexport const NOOP_LOGGER_PROVIDER = new NoopLoggerProvider();\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Context } from '@opentelemetry/api';\nimport { NOOP_LOGGER } from './NoopLogger';\nimport type { Logger } from './types/Logger';\nimport type { LoggerOptions } from './types/LoggerOptions';\nimport type { LogRecord } from './types/LogRecord';\nimport type { SeverityNumber } from './types/LogRecord';\n\nexport class ProxyLogger implements Logger {\n  // When a real implementation is provided, this will be it\n  private _delegate?: Logger;\n  private _provider: LoggerDelegator;\n  public readonly name: string;\n  public readonly version?: string | undefined;\n  public readonly options?: LoggerOptions | undefined;\n\n  constructor(\n    provider: LoggerDelegator,\n    name: string,\n    version?: string | undefined,\n    options?: LoggerOptions | undefined\n  ) {\n    this._provider = provider;\n    this.name = name;\n    this.version = version;\n    this.options = options;\n  }\n\n  /**\n   * Emit a log record. This method should only be used by log appenders.\n   *\n   * @param logRecord\n   */\n  emit(logRecord: LogRecord): void {\n    this._getLogger().emit(logRecord);\n  }\n\n  enabled(options?: {\n    context?: Context;\n    severityNumber?: SeverityNumber;\n    eventName?: string;\n  }): boolean {\n    return this._getLogger().enabled(options);\n  }\n\n  /**\n   * Try to get a logger from the proxy logger provider.\n   * If the proxy logger provider has no delegate, return a noop logger.\n   */\n  private _getLogger() {\n    if (this._delegate) {\n      return this._delegate;\n    }\n    const logger = this._provider._getDelegateLogger(\n      this.name,\n      this.version,\n      this.options\n    );\n    if (!logger) {\n      return NOOP_LOGGER;\n    }\n    this._delegate = logger;\n    return this._delegate;\n  }\n}\n\nexport interface LoggerDelegator {\n  _getDelegateLogger(\n    name: string,\n    version?: string,\n    options?: LoggerOptions\n  ): Logger | undefined;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { LoggerProvider } from './types/LoggerProvider';\nimport type { Logger } from './types/Logger';\nimport type { LoggerOptions } from './types/LoggerOptions';\nimport { NOOP_LOGGER_PROVIDER } from './NoopLoggerProvider';\nimport { ProxyLogger } from './ProxyLogger';\n\nexport class ProxyLoggerProvider implements LoggerProvider {\n  private _delegate?: LoggerProvider;\n\n  getLogger(\n    name: string,\n    version?: string | undefined,\n    options?: LoggerOptions | undefined\n  ): Logger {\n    return (\n      this._getDelegateLogger(name, version, options) ??\n      new ProxyLogger(this, name, version, options)\n    );\n  }\n\n  /**\n   * Get the delegate logger provider.\n   * Used by tests only.\n   * @internal\n   */\n  _getDelegate(): LoggerProvider {\n    return this._delegate ?? NOOP_LOGGER_PROVIDER;\n  }\n\n  /**\n   * Set the delegate logger provider\n   * @internal\n   */\n  _setDelegate(delegate: LoggerProvider) {\n    this._delegate = delegate;\n  }\n\n  /**\n   * @internal\n   */\n  _getDelegateLogger(\n    name: string,\n    version?: string | undefined,\n    options?: LoggerOptions | undefined\n  ): Logger | undefined {\n    return this._delegate?.getLogger(name, version, options);\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n  API_BACKWARDS_COMPATIBILITY_VERSION,\n  GLOBAL_LOGS_API_KEY,\n  _global,\n  makeGetter,\n} from '../internal/global-utils';\nimport type { LoggerProvider } from '../types/LoggerProvider';\nimport { NOOP_LOGGER_PROVIDER } from '../NoopLoggerProvider';\nimport type { Logger } from '../types/Logger';\nimport type { LoggerOptions } from '../types/LoggerOptions';\nimport { ProxyLoggerProvider } from '../ProxyLoggerProvider';\n\nexport class LogsAPI {\n  private static _instance?: LogsAPI;\n\n  private _proxyLoggerProvider = new ProxyLoggerProvider();\n\n  private constructor() {}\n\n  public static getInstance(): LogsAPI {\n    if (!this._instance) {\n      this._instance = new LogsAPI();\n    }\n\n    return this._instance;\n  }\n\n  public setGlobalLoggerProvider(provider: LoggerProvider): LoggerProvider {\n    if (_global[GLOBAL_LOGS_API_KEY]) {\n      return this.getLoggerProvider();\n    }\n\n    _global[GLOBAL_LOGS_API_KEY] = makeGetter<LoggerProvider>(\n      API_BACKWARDS_COMPATIBILITY_VERSION,\n      provider,\n      NOOP_LOGGER_PROVIDER\n    );\n    this._proxyLoggerProvider._setDelegate(provider);\n\n    return provider;\n  }\n\n  /**\n   * Returns the global logger provider.\n   *\n   * @returns LoggerProvider\n   */\n  public getLoggerProvider(): LoggerProvider {\n    return (\n      _global[GLOBAL_LOGS_API_KEY]?.(API_BACKWARDS_COMPATIBILITY_VERSION) ??\n      this._proxyLoggerProvider\n    );\n  }\n\n  /**\n   * Returns a Logger, creating one if one with the given name, version,\n   * schemaUrl, and attributes is not already created.\n   *\n   * Getting a Logger may be expensive, especially when `attributes` are\n   * provided. Reuse Logger instances where possible instead of calling\n   * `getLogger()` on hot paths.\n   *\n   * @param name The name of the logger or instrumentation library.\n   * @param version The version of the logger or instrumentation library.\n   * @param options The options of the logger or instrumentation library.\n   * @returns {@link Logger}\n   */\n  public getLogger(\n    name: string,\n    version?: string,\n    options?: LoggerOptions\n  ): Logger {\n    return this.getLoggerProvider().getLogger(name, version, options);\n  }\n\n  /** Remove the global logger provider */\n  public disable(): void {\n    delete _global[GLOBAL_LOGS_API_KEY];\n    this._proxyLoggerProvider = new ProxyLoggerProvider();\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport type { Logger } from './types/Logger';\nexport type { LoggerProvider } from './types/LoggerProvider';\nexport { SeverityNumber } from './types/LogRecord';\nexport type { LogAttributes, LogBody, LogRecord } from './types/LogRecord';\nexport type { LoggerOptions } from './types/LoggerOptions';\nexport type { AnyValue, AnyValueMap } from './types/AnyValue';\nexport { createNoopLogger } from './NoopLogger';\n\nimport { LogsAPI } from './api/logs';\nexport const logs = LogsAPI.getInstance();\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { TracerProvider, MeterProvider } from '@opentelemetry/api';\nimport type { Instrumentation } from './types';\nimport type { LoggerProvider } from '@opentelemetry/api-logs';\n\n/**\n * Enable instrumentations\n * @param instrumentations\n * @param tracerProvider\n * @param meterProvider\n */\nexport function enableInstrumentations(\n  instrumentations: Instrumentation[],\n  tracerProvider?: TracerProvider,\n  meterProvider?: MeterProvider,\n  loggerProvider?: LoggerProvider\n): void {\n  for (let i = 0, j = instrumentations.length; i < j; i++) {\n    const instrumentation = instrumentations[i];\n    if (tracerProvider) {\n      instrumentation.setTracerProvider(tracerProvider);\n    }\n    if (meterProvider) {\n      instrumentation.setMeterProvider(meterProvider);\n    }\n    if (loggerProvider && instrumentation.setLoggerProvider) {\n      instrumentation.setLoggerProvider(loggerProvider);\n    }\n    // instrumentations have been already enabled during creation\n    // so enable only if user prevented that by setting enabled to false\n    // this is to prevent double enabling but when calling register all\n    // instrumentations should be now enabled\n    if (!instrumentation.getConfig().enabled) {\n      instrumentation.enable();\n    }\n  }\n}\n\n/**\n * Disable instrumentations\n * @param instrumentations\n */\nexport function disableInstrumentations(\n  instrumentations: Instrumentation[]\n): void {\n  instrumentations.forEach(instrumentation => instrumentation.disable());\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { trace, metrics } from '@opentelemetry/api';\nimport { logs } from '@opentelemetry/api-logs';\nimport {\n  disableInstrumentations,\n  enableInstrumentations,\n} from './autoLoaderUtils';\nimport type { AutoLoaderOptions } from './types_internal';\n\n/**\n * It will register instrumentations and plugins\n * @param options\n * @return returns function to unload instrumentation and plugins that were\n *   registered\n */\nexport function registerInstrumentations(\n  options: AutoLoaderOptions\n): () => void {\n  const tracerProvider = options.tracerProvider || trace.getTracerProvider();\n  const meterProvider = options.meterProvider || metrics.getMeterProvider();\n  const loggerProvider = options.loggerProvider || logs.getLoggerProvider();\n  const instrumentations = options.instrumentations?.flat() ?? [];\n\n  enableInstrumentations(\n    instrumentations,\n    tracerProvider,\n    meterProvider,\n    loggerProvider\n  );\n\n  return () => {\n    disableInstrumentations(instrumentations);\n  };\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// This is a custom semantic versioning implementation compatible with the\n// `satisfies(version, range, options?)` function from the `semver` npm package;\n// with the exception that the `loose` option is not supported.\n//\n// The motivation for the custom semver implementation is that\n// `semver` package has some initialization delay (lots of RegExp init and compile)\n// and this leads to coldstart overhead for the OTEL Lambda Node.js layer.\n// Hence, we have implemented lightweight version of it internally with required functionalities.\n\nimport { diag } from '@opentelemetry/api';\n\nconst VERSION_REGEXP =\n  /^(?:v)?(?<version>(?<major>0|[1-9]\\d*)\\.(?<minor>0|[1-9]\\d*)\\.(?<patch>0|[1-9]\\d*))(?:-(?<prerelease>(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+(?<build>[0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\nconst RANGE_REGEXP =\n  /^(?<op><|>|=|==|<=|>=|~|\\^|~>)?\\s*(?:v)?(?<version>(?<major>x|X|\\*|0|[1-9]\\d*)(?:\\.(?<minor>x|X|\\*|0|[1-9]\\d*))?(?:\\.(?<patch>x|X|\\*|0|[1-9]\\d*))?)(?:-(?<prerelease>(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+(?<build>[0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\nconst operatorResMap: { [op: string]: number[] } = {\n  '>': [1],\n  '>=': [0, 1],\n  '=': [0],\n  '<=': [-1, 0],\n  '<': [-1],\n  '!=': [-1, 1],\n};\n\n/** Interface for the options to configure semantic versioning satisfy check. */\nexport interface SatisfiesOptions {\n  /**\n   * If set to true, the pre-release checks will be included\n   * as described [here](https://github.com/npm/node-semver#prerelease-tags).\n   */\n  includePrerelease?: boolean;\n}\n\ninterface ParsedVersion {\n  op?: string;\n\n  version?: string;\n  versionSegments?: string[];\n  versionSegmentCount?: number;\n\n  prerelease?: string;\n  prereleaseSegments?: string[];\n  prereleaseSegmentCount?: number;\n\n  build?: string;\n\n  invalid?: boolean;\n}\n\n/**\n * Checks given version whether it satisfies given range expression.\n * @param version the [version](https://github.com/npm/node-semver#versions) to be checked\n * @param range   the [range](https://github.com/npm/node-semver#ranges) expression for version check\n * @param options options to configure semver satisfy check\n */\nexport function satisfies(\n  version: string,\n  range: string,\n  options?: SatisfiesOptions\n): boolean {\n  // Strict semver format check\n  if (!_validateVersion(version)) {\n    diag.error(`Invalid version: ${version}`);\n    return false;\n  }\n\n  // If range is empty, satisfy check succeeds regardless what version is\n  if (!range) {\n    return true;\n  }\n\n  // Cleanup range\n  range = range.replace(/([<>=~^]+)\\s+/g, '$1');\n\n  // Parse version\n  const parsedVersion: ParsedVersion | undefined = _parseVersion(version);\n  if (!parsedVersion) {\n    return false;\n  }\n\n  const allParsedRanges: ParsedVersion[] = [];\n\n  // Check given version whether it satisfies given range expression\n  const checkResult: boolean = _doSatisfies(\n    parsedVersion,\n    range,\n    allParsedRanges,\n    options\n  );\n\n  // If check result is OK,\n  // do another final check for pre-release, if pre-release check is included by option\n  if (checkResult && !options?.includePrerelease) {\n    return _doPreleaseCheck(parsedVersion, allParsedRanges);\n  }\n  return checkResult;\n}\n\nfunction _validateVersion(version: unknown): boolean {\n  return typeof version === 'string' && VERSION_REGEXP.test(version);\n}\n\nfunction _doSatisfies(\n  parsedVersion: ParsedVersion,\n  range: string,\n  allParsedRanges: ParsedVersion[],\n  options?: SatisfiesOptions\n): boolean {\n  if (range.includes('||')) {\n    // A version matches a range if and only if\n    // every comparator in at least one of the ||-separated comparator sets is satisfied by the version\n    const ranges: string[] = range.trim().split('||');\n    for (const r of ranges) {\n      if (_checkRange(parsedVersion, r, allParsedRanges, options)) {\n        return true;\n      }\n    }\n    return false;\n  } else if (range.includes(' - ')) {\n    // Hyphen ranges: https://github.com/npm/node-semver#hyphen-ranges-xyz---abc\n    range = replaceHyphen(range, options);\n  } else if (range.includes(' ')) {\n    // Multiple separated ranges and all needs to be satisfied for success\n    const ranges: string[] = range\n      .trim()\n      .replace(/\\s{2,}/g, ' ')\n      .split(' ');\n    for (const r of ranges) {\n      if (!_checkRange(parsedVersion, r, allParsedRanges, options)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  // Check given parsed version with given range\n  return _checkRange(parsedVersion, range, allParsedRanges, options);\n}\n\nfunction _checkRange(\n  parsedVersion: ParsedVersion,\n  range: string,\n  allParsedRanges: ParsedVersion[],\n  options?: SatisfiesOptions\n): boolean {\n  range = _normalizeRange(range, options);\n  if (range.includes(' ')) {\n    // If there are multiple ranges separated, satisfy each of them\n    return _doSatisfies(parsedVersion, range, allParsedRanges, options);\n  } else {\n    // Validate and parse range\n    const parsedRange: ParsedVersion = _parseRange(range);\n    allParsedRanges.push(parsedRange);\n    // Check parsed version by parsed range\n    return _satisfies(parsedVersion, parsedRange);\n  }\n}\n\nfunction _satisfies(\n  parsedVersion: ParsedVersion,\n  parsedRange: ParsedVersion\n): boolean {\n  // If range is invalid, satisfy check fails (no error throw)\n  if (parsedRange.invalid) {\n    return false;\n  }\n\n  // If range is empty or wildcard, satisfy check succeeds regardless what version is\n  if (!parsedRange.version || _isWildcard(parsedRange.version)) {\n    return true;\n  }\n\n  // Compare version segment first\n  let comparisonResult: number = _compareVersionSegments(\n    parsedVersion.versionSegments || [],\n    parsedRange.versionSegments || []\n  );\n\n  // If versions segments are equal, compare by pre-release segments\n  if (comparisonResult === 0) {\n    const versionPrereleaseSegments: string[] =\n      parsedVersion.prereleaseSegments || [];\n    const rangePrereleaseSegments: string[] =\n      parsedRange.prereleaseSegments || [];\n    if (!versionPrereleaseSegments.length && !rangePrereleaseSegments.length) {\n      comparisonResult = 0;\n    } else if (\n      !versionPrereleaseSegments.length &&\n      rangePrereleaseSegments.length\n    ) {\n      comparisonResult = 1;\n    } else if (\n      versionPrereleaseSegments.length &&\n      !rangePrereleaseSegments.length\n    ) {\n      comparisonResult = -1;\n    } else {\n      comparisonResult = _compareVersionSegments(\n        versionPrereleaseSegments,\n        rangePrereleaseSegments\n      );\n    }\n  }\n\n  // Resolve check result according to comparison operator\n  return operatorResMap[parsedRange.op!]?.includes(comparisonResult);\n}\n\nfunction _doPreleaseCheck(\n  parsedVersion: ParsedVersion,\n  allParsedRanges: ParsedVersion[]\n): boolean {\n  if (parsedVersion.prerelease) {\n    return allParsedRanges.some(\n      r => r.prerelease && r.version === parsedVersion.version\n    );\n  }\n  return true;\n}\n\nfunction _normalizeRange(range: string, options?: SatisfiesOptions): string {\n  range = range.trim();\n  range = replaceCaret(range, options);\n  range = replaceTilde(range);\n  range = replaceXRange(range, options);\n  range = range.trim();\n  return range;\n}\n\nfunction isX(id?: string): boolean {\n  return !id || id.toLowerCase() === 'x' || id === '*';\n}\n\nfunction _parseVersion(versionString: string): ParsedVersion | undefined {\n  const match: RegExpMatchArray | null = versionString.match(VERSION_REGEXP);\n  if (!match) {\n    diag.error(`Invalid version: ${versionString}`);\n    return undefined;\n  }\n\n  const version: string = match!.groups!.version;\n  const prerelease: string = match!.groups!.prerelease;\n  const build: string = match!.groups!.build;\n\n  const versionSegments: string[] = version.split('.');\n  const prereleaseSegments: string[] | undefined = prerelease?.split('.');\n\n  return {\n    op: undefined,\n\n    version,\n    versionSegments,\n    versionSegmentCount: versionSegments.length,\n\n    prerelease,\n    prereleaseSegments,\n    prereleaseSegmentCount: prereleaseSegments ? prereleaseSegments.length : 0,\n\n    build,\n  };\n}\n\nfunction _parseRange(rangeString: string): ParsedVersion {\n  if (!rangeString) {\n    return {};\n  }\n\n  const match: RegExpMatchArray | null = rangeString.match(RANGE_REGEXP);\n  if (!match) {\n    diag.error(`Invalid range: ${rangeString}`);\n    return {\n      invalid: true,\n    };\n  }\n\n  let op: string = match!.groups!.op;\n  const version: string = match!.groups!.version;\n  const prerelease: string = match!.groups!.prerelease;\n  const build: string = match!.groups!.build;\n\n  const versionSegments: string[] = version.split('.');\n  const prereleaseSegments: string[] | undefined = prerelease?.split('.');\n\n  if (op === '==') {\n    op = '=';\n  }\n\n  return {\n    op: op || '=',\n\n    version,\n    versionSegments,\n    versionSegmentCount: versionSegments.length,\n\n    prerelease,\n    prereleaseSegments,\n    prereleaseSegmentCount: prereleaseSegments ? prereleaseSegments.length : 0,\n\n    build,\n  };\n}\n\nfunction _isWildcard(s: string | undefined): boolean {\n  return s === '*' || s === 'x' || s === 'X';\n}\n\nfunction _parseVersionString(v: string): string | number {\n  const n: number = parseInt(v, 10);\n  return isNaN(n) ? v : n;\n}\n\nfunction _normalizeVersionType(\n  a: string | number,\n  b: string | number\n): [string, string] | [number, number] {\n  if (typeof a === typeof b) {\n    if (typeof a === 'number') {\n      return [a as number, b as number];\n    } else if (typeof a === 'string') {\n      return [a as string, b as string];\n    } else {\n      throw new Error('Version segments can only be strings or numbers');\n    }\n  } else {\n    return [String(a), String(b)];\n  }\n}\n\nfunction _compareVersionStrings(v1: string, v2: string): number {\n  if (_isWildcard(v1) || _isWildcard(v2)) {\n    return 0;\n  }\n  const [parsedV1, parsedV2] = _normalizeVersionType(\n    _parseVersionString(v1),\n    _parseVersionString(v2)\n  );\n  if (parsedV1 > parsedV2) {\n    return 1;\n  } else if (parsedV1 < parsedV2) {\n    return -1;\n  }\n  return 0;\n}\n\nfunction _compareVersionSegments(v1: string[], v2: string[]): number {\n  for (let i = 0; i < Math.max(v1.length, v2.length); i++) {\n    const res: number = _compareVersionStrings(v1[i] || '0', v2[i] || '0');\n    if (res !== 0) {\n      return res;\n    }\n  }\n  return 0;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// The rest of this file is adapted from portions of https://github.com/npm/node-semver/tree/868d4bb\n// License:\n/*\n * The ISC License\n *\n * Copyright (c) Isaac Z. Schlueter and Contributors\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\n * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]';\nconst NUMERICIDENTIFIER = '0|[1-9]\\\\d*';\nconst NONNUMERICIDENTIFIER = `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`;\nconst GTLT = '((?:<|>)?=?)';\n\nconst PRERELEASEIDENTIFIER = `(?:${NUMERICIDENTIFIER}|${NONNUMERICIDENTIFIER})`;\nconst PRERELEASE = `(?:-(${PRERELEASEIDENTIFIER}(?:\\\\.${PRERELEASEIDENTIFIER})*))`;\n\nconst BUILDIDENTIFIER = `${LETTERDASHNUMBER}+`;\nconst BUILD = `(?:\\\\+(${BUILDIDENTIFIER}(?:\\\\.${BUILDIDENTIFIER})*))`;\n\nconst XRANGEIDENTIFIER = `${NUMERICIDENTIFIER}|x|X|\\\\*`;\nconst XRANGEPLAIN =\n  `[v=\\\\s]*(${XRANGEIDENTIFIER})` +\n  `(?:\\\\.(${XRANGEIDENTIFIER})` +\n  `(?:\\\\.(${XRANGEIDENTIFIER})` +\n  `(?:${PRERELEASE})?${BUILD}?` +\n  ')?)?';\nconst XRANGE = `^${GTLT}\\\\s*${XRANGEPLAIN}$`;\nconst XRANGE_REGEXP = new RegExp(XRANGE);\n\nconst HYPHENRANGE =\n  `^\\\\s*(${XRANGEPLAIN})` + '\\\\s+-\\\\s+' + `(${XRANGEPLAIN})` + '\\\\s*$';\nconst HYPHENRANGE_REGEXP = new RegExp(HYPHENRANGE);\n\nconst LONETILDE = '(?:~>?)';\nconst TILDE = `^${LONETILDE}${XRANGEPLAIN}$`;\nconst TILDE_REGEXP = new RegExp(TILDE);\n\nconst LONECARET = '(?:\\\\^)';\nconst CARET = `^${LONECARET}${XRANGEPLAIN}$`;\nconst CARET_REGEXP = new RegExp(CARET);\n\n// Borrowed from https://github.com/npm/node-semver/blob/868d4bbe3d318c52544f38d5f9977a1103e924c2/classes/range.js#L285\n//\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nfunction replaceTilde(comp: string): string {\n  const r = TILDE_REGEXP;\n  return comp.replace(r, (_, M, m, p, pr) => {\n    let ret;\n\n    if (isX(M)) {\n      ret = '';\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0 <${+M + 1}.0.0-0`;\n    } else if (isX(p)) {\n      // ~1.2 == >=1.2.0 <1.3.0-0\n      ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`;\n    } else if (pr) {\n      ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;\n    } else {\n      // ~1.2.3 == >=1.2.3 <1.3.0-0\n      ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`;\n    }\n    return ret;\n  });\n}\n\n// Borrowed from https://github.com/npm/node-semver/blob/868d4bbe3d318c52544f38d5f9977a1103e924c2/classes/range.js#L329\n//\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nfunction replaceCaret(comp: string, options?: SatisfiesOptions): string {\n  const r = CARET_REGEXP;\n  const z = options?.includePrerelease ? '-0' : '';\n  return comp.replace(r, (_, M, m, p, pr) => {\n    let ret;\n\n    if (isX(M)) {\n      ret = '';\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`;\n    } else if (isX(p)) {\n      if (M === '0') {\n        ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`;\n      } else {\n        ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`;\n      }\n    } else if (pr) {\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`;\n        } else {\n          ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;\n        }\n      } else {\n        ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`;\n      }\n    } else {\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p}${z} <${M}.${m}.${+p + 1}-0`;\n        } else {\n          ret = `>=${M}.${m}.${p}${z} <${M}.${+m + 1}.0-0`;\n        }\n      } else {\n        ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`;\n      }\n    }\n    return ret;\n  });\n}\n\n// Borrowed from https://github.com/npm/node-semver/blob/868d4bbe3d318c52544f38d5f9977a1103e924c2/classes/range.js#L390\nfunction replaceXRange(comp: string, options?: SatisfiesOptions): string {\n  const r = XRANGE_REGEXP;\n  return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n    const xM = isX(M);\n    const xm = xM || isX(m);\n    const xp = xm || isX(p);\n    const anyX = xp;\n\n    if (gtlt === '=' && anyX) {\n      gtlt = '';\n    }\n\n    // if we're including prereleases in the match, then we need\n    // to fix this to -0, the lowest possible prerelease value\n    pr = options?.includePrerelease ? '-0' : '';\n\n    if (xM) {\n      if (gtlt === '>' || gtlt === '<') {\n        // nothing is allowed\n        ret = '<0.0.0-0';\n      } else {\n        // nothing is forbidden\n        ret = '*';\n      }\n    } else if (gtlt && anyX) {\n      // we know patch is an x, because we have any x at all.\n      // replace X with 0\n      if (xm) {\n        m = 0;\n      }\n      p = 0;\n\n      if (gtlt === '>') {\n        // >1 => >=2.0.0\n        // >1.2 => >=1.3.0\n        gtlt = '>=';\n        if (xm) {\n          M = +M + 1;\n          m = 0;\n          p = 0;\n        } else {\n          m = +m + 1;\n          p = 0;\n        }\n      } else if (gtlt === '<=') {\n        // <=0.7.x is actually <0.8.0, since any 0.7.x should\n        // pass.  Similarly, <=7.x is actually <8.0.0, etc.\n        gtlt = '<';\n        if (xm) {\n          M = +M + 1;\n        } else {\n          m = +m + 1;\n        }\n      }\n\n      if (gtlt === '<') {\n        pr = '-0';\n      }\n\n      ret = `${gtlt + M}.${m}.${p}${pr}`;\n    } else if (xm) {\n      ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`;\n    } else if (xp) {\n      ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`;\n    }\n\n    return ret;\n  });\n}\n\n// Borrowed from https://github.com/npm/node-semver/blob/868d4bbe3d318c52544f38d5f9977a1103e924c2/classes/range.js#L488\n//\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\nfunction replaceHyphen(comp: string, options?: SatisfiesOptions): string {\n  const r = HYPHENRANGE_REGEXP;\n  return comp.replace(\n    r,\n    (_, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr) => {\n      if (isX(fM)) {\n        from = '';\n      } else if (isX(fm)) {\n        from = `>=${fM}.0.0${options?.includePrerelease ? '-0' : ''}`;\n      } else if (isX(fp)) {\n        from = `>=${fM}.${fm}.0${options?.includePrerelease ? '-0' : ''}`;\n      } else if (fpr) {\n        from = `>=${from}`;\n      } else {\n        from = `>=${from}${options?.includePrerelease ? '-0' : ''}`;\n      }\n\n      if (isX(tM)) {\n        to = '';\n      } else if (isX(tm)) {\n        to = `<${+tM + 1}.0.0-0`;\n      } else if (isX(tp)) {\n        to = `<${tM}.${+tm + 1}.0-0`;\n      } else if (tpr) {\n        to = `<=${tM}.${tm}.${tp}-${tpr}`;\n      } else if (options?.includePrerelease) {\n        to = `<${tM}.${tm}.${+tp + 1}-0`;\n      } else {\n        to = `<=${to}`;\n      }\n\n      return `${from} ${to}`.trim();\n    }\n  );\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/*\n * BSD 2-Clause License\n *\n * Copyright (c) 2013-2019, Forrest L Norvell\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n *   list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n *   this list of conditions and the following disclaimer in the documentation\n *   and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* Modified by OpenTelemetry Authors\n *  - converted to TypeScript\n *  - aligned with style-guide\n */\n\nimport type { ShimWrapped } from './types';\n\n// Default to complaining loudly when things don't go according to plan.\n// eslint-disable-next-line no-console\nlet logger: typeof console.error = console.error.bind(console);\n\n// Sets a property on an object, preserving its enumerability.\n// This function assumes that the property is already writable.\nfunction defineProperty(obj: object, name: PropertyKey, value: unknown): void {\n  const enumerable =\n    !!obj[name as keyof typeof obj] &&\n    Object.prototype.propertyIsEnumerable.call(obj, name);\n\n  Object.defineProperty(obj, name, {\n    configurable: true,\n    enumerable,\n    writable: true,\n    value,\n  });\n}\n\nexport const wrap = <Nodule extends object, FieldName extends keyof Nodule>(\n  nodule: Nodule,\n  name: FieldName,\n  wrapper: (original: Nodule[FieldName], name: FieldName) => Nodule[FieldName]\n): ShimWrapped | undefined => {\n  if (!nodule || !nodule[name]) {\n    logger('no original function ' + String(name) + ' to wrap');\n    return;\n  }\n\n  if (!wrapper) {\n    logger('no wrapper function');\n    logger(new Error().stack);\n    return;\n  }\n\n  const original = nodule[name];\n\n  if (typeof original !== 'function' || typeof wrapper !== 'function') {\n    logger('original object and wrapper must be functions');\n    return;\n  }\n\n  const wrapped = wrapper(original, name) as object;\n\n  defineProperty(wrapped, '__original', original);\n  defineProperty(wrapped, '__unwrap', () => {\n    if (nodule[name] === wrapped) {\n      defineProperty(nodule, name, original);\n    }\n  });\n  defineProperty(wrapped, '__wrapped', true);\n  defineProperty(nodule, name, wrapped);\n  return wrapped as ShimWrapped;\n};\n\nexport const massWrap = <Nodule extends object, FieldName extends keyof Nodule>(\n  nodules: Nodule[],\n  names: FieldName[],\n  wrapper: (original: Nodule[FieldName]) => Nodule[FieldName]\n): void => {\n  if (!nodules) {\n    logger('must provide one or more modules to patch');\n    logger(new Error().stack);\n    return;\n  } else if (!Array.isArray(nodules)) {\n    nodules = [nodules];\n  }\n\n  if (!(names && Array.isArray(names))) {\n    logger('must provide one or more functions to wrap on modules');\n    return;\n  }\n\n  nodules.forEach(nodule => {\n    names.forEach(name => {\n      wrap(nodule, name, wrapper);\n    });\n  });\n};\n\nexport const unwrap = <Nodule extends object>(\n  nodule: Nodule,\n  name: keyof Nodule\n): void => {\n  if (!nodule || !nodule[name]) {\n    logger('no function to unwrap.');\n    logger(new Error().stack);\n    return;\n  }\n\n  const wrapped = nodule[name] as unknown as ShimWrapped;\n\n  if (!wrapped.__unwrap) {\n    logger(\n      'no original to unwrap to -- has ' +\n        String(name) +\n        ' already been unwrapped?'\n    );\n  } else {\n    wrapped.__unwrap();\n    return;\n  }\n};\n\nexport const massUnwrap = <Nodule extends object>(\n  nodules: Nodule[],\n  names: Array<keyof Nodule>\n): void => {\n  if (!nodules) {\n    logger('must provide one or more modules to patch');\n    logger(new Error().stack);\n    return;\n  } else if (!Array.isArray(nodules)) {\n    nodules = [nodules];\n  }\n\n  if (!(names && Array.isArray(names))) {\n    logger('must provide one or more functions to unwrap on modules');\n    return;\n  }\n\n  nodules.forEach(nodule => {\n    names.forEach(name => {\n      unwrap(nodule, name);\n    });\n  });\n};\n\nexport interface ShimmerOptions {\n  logger?: typeof console.error;\n}\n\nexport default function shimmer(options: ShimmerOptions): void {\n  if (options && options.logger) {\n    if (typeof options.logger !== 'function') {\n      logger(\"new logger isn't a function, not replacing\");\n    } else {\n      logger = options.logger;\n    }\n  }\n}\n\nshimmer.wrap = wrap;\nshimmer.massWrap = massWrap;\nshimmer.unwrap = unwrap;\nshimmer.massUnwrap = massUnwrap;\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n  DiagLogger,\n  Meter,\n  MeterProvider,\n  Tracer,\n  TracerProvider,\n  Span,\n} from '@opentelemetry/api';\nimport { diag, metrics, trace } from '@opentelemetry/api';\nimport type { Logger, LoggerProvider } from '@opentelemetry/api-logs';\nimport { logs } from '@opentelemetry/api-logs';\nimport * as shimmer from './shimmer';\nimport type {\n  InstrumentationModuleDefinition,\n  Instrumentation,\n  InstrumentationConfig,\n  SpanCustomizationHook,\n} from './types';\n\n/**\n * Base abstract internal class for instrumenting node and web plugins\n */\nexport abstract class InstrumentationAbstract<\n  ConfigType extends InstrumentationConfig = InstrumentationConfig,\n> implements Instrumentation<ConfigType>\n{\n  protected _config: ConfigType = {} as ConfigType;\n\n  private _tracer: Tracer;\n  private _meter: Meter;\n  private _logger: Logger;\n  protected _diag: DiagLogger;\n  public readonly instrumentationName: string;\n  public readonly instrumentationVersion: string;\n\n  constructor(\n    instrumentationName: string,\n    instrumentationVersion: string,\n    config: ConfigType\n  ) {\n    this.instrumentationName = instrumentationName;\n    this.instrumentationVersion = instrumentationVersion;\n\n    this.setConfig(config);\n\n    this._diag = diag.createComponentLogger({\n      namespace: instrumentationName,\n    });\n\n    this._tracer = trace.getTracer(instrumentationName, instrumentationVersion);\n    this._meter = metrics.getMeter(instrumentationName, instrumentationVersion);\n    this._logger = logs.getLogger(instrumentationName, instrumentationVersion);\n    this._updateMetricInstruments();\n  }\n\n  /* Api to wrap instrumented method */\n  protected _wrap = shimmer.wrap;\n  /* Api to unwrap instrumented methods */\n  protected _unwrap = shimmer.unwrap;\n  /* Api to mass wrap instrumented method */\n  protected _massWrap = shimmer.massWrap;\n  /* Api to mass unwrap instrumented methods */\n  protected _massUnwrap = shimmer.massUnwrap;\n\n  /* Returns meter */\n  protected get meter(): Meter {\n    return this._meter;\n  }\n\n  /**\n   * Sets MeterProvider to this plugin\n   * @param meterProvider\n   */\n  public setMeterProvider(meterProvider: MeterProvider): void {\n    this._meter = meterProvider.getMeter(\n      this.instrumentationName,\n      this.instrumentationVersion\n    );\n\n    this._updateMetricInstruments();\n  }\n\n  /* Returns logger */\n  protected get logger(): Logger {\n    return this._logger;\n  }\n\n  /**\n   * Sets LoggerProvider to this plugin\n   * @param loggerProvider\n   */\n  public setLoggerProvider(loggerProvider: LoggerProvider): void {\n    this._logger = loggerProvider.getLogger(\n      this.instrumentationName,\n      this.instrumentationVersion\n    );\n  }\n\n  /**\n   * @experimental\n   *\n   * Get module definitions defined by {@link init}.\n   * This can be used for experimental compile-time instrumentation.\n   *\n   * @returns an array of {@link InstrumentationModuleDefinition}\n   */\n  public getModuleDefinitions(): InstrumentationModuleDefinition[] {\n    const initResult = this.init() ?? [];\n    if (!Array.isArray(initResult)) {\n      return [initResult];\n    }\n\n    return initResult;\n  }\n\n  /**\n   * Sets the new metric instruments with the current Meter.\n   */\n  protected _updateMetricInstruments(): void {\n    return;\n  }\n\n  /* Returns InstrumentationConfig */\n  public getConfig(): ConfigType {\n    return this._config;\n  }\n\n  /**\n   * Sets InstrumentationConfig to this plugin\n   * @param config\n   */\n  public setConfig(config: ConfigType): void {\n    // copy config first level properties to ensure they are immutable.\n    // nested properties are not copied, thus are mutable from the outside.\n    this._config = {\n      enabled: true,\n      ...config,\n    };\n  }\n\n  /**\n   * Sets TracerProvider to this plugin\n   * @param tracerProvider\n   */\n  public setTracerProvider(tracerProvider: TracerProvider): void {\n    this._tracer = tracerProvider.getTracer(\n      this.instrumentationName,\n      this.instrumentationVersion\n    );\n  }\n\n  /* Returns tracer */\n  protected get tracer(): Tracer {\n    return this._tracer;\n  }\n\n  /* Enable plugin */\n  public abstract enable(): void;\n\n  /* Disable plugin */\n  public abstract disable(): void;\n\n  /**\n   * Init method in which plugin should define _modules and patches for\n   * methods.\n   */\n  protected abstract init():\n    | InstrumentationModuleDefinition\n    | InstrumentationModuleDefinition[]\n    | void;\n\n  /**\n   * Execute span customization hook, if configured, and log any errors.\n   * Any semantics of the trigger and info are defined by the specific instrumentation.\n   * @param hookHandler The optional hook handler which the user has configured via instrumentation config\n   * @param triggerName The name of the trigger for executing the hook for logging purposes\n   * @param span The span to which the hook should be applied\n   * @param info The info object to be passed to the hook, with useful data the hook may use\n   */\n  protected _runSpanCustomizationHook<SpanCustomizationInfoType>(\n    hookHandler: SpanCustomizationHook<SpanCustomizationInfoType> | undefined,\n    triggerName: string,\n    span: Span,\n    info: SpanCustomizationInfoType\n  ) {\n    if (!hookHandler) {\n      return;\n    }\n\n    try {\n      hookHandler(span, info);\n    } catch (e) {\n      this._diag.error(\n        'Error running span customization hook due to exception in handler',\n        { triggerName },\n        e\n      );\n    }\n  }\n}\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n", "/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n", "import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif (!('FORCE_COLOR' in env)) {\n\t\treturn;\n\t}\n\n\tif (env.FORCE_COLOR === 'true') {\n\t\treturn 1;\n\t}\n\n\tif (env.FORCE_COLOR === 'false') {\n\t\treturn 0;\n\t}\n\n\tif (env.FORCE_COLOR.length === 0) {\n\t\treturn 1;\n\t}\n\n\tconst level = Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\n\tif (![0, 1, 2, 3].includes(level)) {\n\t\treturn;\n\t}\n\n\treturn level;\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n", "/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = `  ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n", "/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n", "'use strict'\n\nvar sep = require('path').sep\n\nmodule.exports = function (file) {\n  var segments = file.split(sep)\n  var index = segments.lastIndexOf('node_modules')\n\n  if (index === -1) return\n  if (!segments[index + 1]) return\n\n  var scoped = segments[index + 1][0] === '@'\n  var name = scoped ? segments[index + 1] + '/' + segments[index + 2] : segments[index + 1]\n  var offset = scoped ? 3 : 2\n\n  var basedir = ''\n  var lastBaseDirSegmentIndex = index + offset - 1\n  for (var i = 0; i <= lastBaseDirSegmentIndex; i++) {\n    if (i === lastBaseDirSegmentIndex) {\n      basedir += segments[i]\n    } else {\n      basedir += segments[i] + sep\n    }\n  }\n\n  var path = ''\n  var lastSegmentIndex = segments.length - 1\n  for (var i2 = index + offset; i2 <= lastSegmentIndex; i2++) {\n    if (i2 === lastSegmentIndex) {\n      path += segments[i2]\n    } else {\n      path += segments[i2] + sep\n    }\n  }\n\n  return {\n    name: name,\n    basedir: basedir,\n    path: path\n  }\n}\n", "'use strict'\n\nconst path = require('path')\nconst Module = require('module')\nconst debug = require('debug')('require-in-the-middle')\nconst moduleDetailsFromPath = require('module-details-from-path')\n\n// Using the default export is discouraged, but kept for backward compatibility.\n// Use this instead:\n//    const { Hook } = require('require-in-the-middle')\nmodule.exports = Hook\nmodule.exports.Hook = Hook\n\nlet builtinModules // Set<string>\n\n/**\n * Is the given module a \"core\" module?\n * https://nodejs.org/api/modules.html#core-modules\n *\n * @type {(moduleName: string) => boolean}\n */\nlet isCore\nif (Module.isBuiltin) { // Added in node v18.6.0, v16.17.0\n  isCore = Module.isBuiltin\n} else if (Module.builtinModules) { // Added in node v9.3.0, v8.10.0, v6.13.0\n  isCore = moduleName => {\n    if (moduleName.startsWith('node:')) {\n      return true\n    }\n\n    if (builtinModules === undefined) {\n      builtinModules = new Set(Module.builtinModules)\n    }\n\n    return builtinModules.has(moduleName)\n  }\n} else {\n  throw new Error('\\'require-in-the-middle\\' requires Node.js >=v9.3.0 or >=v8.10.0')\n}\n\n// 'foo/bar.js' or 'foo/bar/index.js' => 'foo/bar'\nconst normalize = /([/\\\\]index)?(\\.js)?$/\n\n// Cache `onrequire`-patched exports for modules.\n//\n// Exports for built-in (a.k.a. \"core\") modules are stored in an internal Map.\n//\n// Exports for non-core modules are stored on a private field on the `Module`\n// object in `require.cache`. This allows users to delete from `require.cache`\n// to trigger a re-load (and re-run of the hook's `onrequire`) of a module the\n// next time it is required.\n// https://nodejs.org/docs/latest/api/all.html#all_modules_requirecache\n//\n// In some special cases -- e.g. some other `require()` hook swapping out\n// `Module._cache` like `@babel/register` -- a non-core module won't be in\n// `require.cache`. In that case this falls back to caching on the internal Map.\nclass ExportsCache {\n  constructor () {\n    this._localCache = new Map() // <module filename or id> -> <exports>\n    this._kRitmExports = Symbol('RitmExports')\n  }\n\n  has (filename, isBuiltin) {\n    if (this._localCache.has(filename)) {\n      return true\n    } else if (!isBuiltin) {\n      const mod = require.cache[filename]\n      return !!(mod && this._kRitmExports in mod)\n    } else {\n      return false\n    }\n  }\n\n  get (filename, isBuiltin) {\n    const cachedExports = this._localCache.get(filename)\n    if (cachedExports !== undefined) {\n      return cachedExports\n    } else if (!isBuiltin) {\n      const mod = require.cache[filename]\n      return (mod && mod[this._kRitmExports])\n    }\n  }\n\n  set (filename, exports, isBuiltin) {\n    if (isBuiltin) {\n      this._localCache.set(filename, exports)\n    } else if (filename in require.cache) {\n      require.cache[filename][this._kRitmExports] = exports\n    } else {\n      debug('non-core module is unexpectedly not in require.cache: \"%s\"', filename)\n      this._localCache.set(filename, exports)\n    }\n  }\n}\n\nfunction Hook (modules, options, onrequire) {\n  if ((this instanceof Hook) === false) return new Hook(modules, options, onrequire)\n  if (typeof modules === 'function') {\n    onrequire = modules\n    modules = null\n    options = null\n  } else if (typeof options === 'function') {\n    onrequire = options\n    options = null\n  }\n\n  if (typeof Module._resolveFilename !== 'function') {\n    console.error('Error: Expected Module._resolveFilename to be a function (was: %s) - aborting!', typeof Module._resolveFilename)\n    console.error('Please report this error as an issue related to Node.js %s at https://github.com/nodejs/require-in-the-middle/issues', process.version)\n    return\n  }\n\n  this._cache = new ExportsCache()\n\n  this._unhooked = false\n  this._origRequire = Module.prototype.require\n\n  const self = this\n  const patching = new Set()\n  const internals = options ? options.internals === true : false\n  const hasWhitelist = Array.isArray(modules)\n\n  debug('registering require hook')\n\n  this._require = Module.prototype.require = function (id) {\n    if (self._unhooked === true) {\n      // if the patched require function could not be removed because\n      // someone else patched it after it was patched here, we just\n      // abort and pass the request onwards to the original require\n      debug('ignoring require call - module is soft-unhooked')\n      return self._origRequire.apply(this, arguments)\n    }\n\n    return patchedRequire.call(this, arguments, false)\n  }\n\n  if (typeof process.getBuiltinModule === 'function') {\n    this._origGetBuiltinModule = process.getBuiltinModule\n    this._getBuiltinModule = process.getBuiltinModule = function (id) {\n      if (self._unhooked === true) {\n        // if the patched process.getBuiltinModule function could not be removed because\n        // someone else patched it after it was patched here, we just abort and pass the\n        // request onwards to the original process.getBuiltinModule\n        debug('ignoring process.getBuiltinModule call - module is soft-unhooked')\n        return self._origGetBuiltinModule.apply(this, arguments)\n      }\n\n      return patchedRequire.call(this, arguments, true)\n    }\n  }\n\n  // Preserve the original require/process.getBuiltinModule arguments in `args`\n  function patchedRequire (args, coreOnly) {\n    const id = args[0]\n    const core = isCore(id)\n    let filename // the string used for caching\n    if (core) {\n      filename = id\n      // If this is a builtin module that can be identified both as 'foo' and\n      // 'node:foo', then prefer 'foo' as the caching key.\n      if (id.startsWith('node:')) {\n        const idWithoutPrefix = id.slice(5)\n        if (isCore(idWithoutPrefix)) {\n          filename = idWithoutPrefix\n        }\n      }\n    } else if (coreOnly) {\n      // `coreOnly` is `true` if this was a call to `process.getBuiltinModule`, in which case\n      // we don't want to return anything if the requested `id` isn't a core module. Falling\n      // back to default behaviour, which at the time of this wrting is simply returning `undefined`\n      debug('call to process.getBuiltinModule with unknown built-in id')\n      return self._origGetBuiltinModule.apply(this, args)\n    } else {\n      try {\n        filename = Module._resolveFilename(id, this)\n      } catch (resolveErr) {\n        // If someone *else* monkey-patches before this monkey-patch, then that\n        // code might expect `require(someId)` to get through so it can be\n        // handled, even if `someId` cannot be resolved to a filename. In this\n        // case, instead of throwing we defer to the underlying `require`.\n        //\n        // For example the Azure Functions Node.js worker module does this,\n        // where `@azure/functions-core` resolves to an internal object.\n        // https://github.com/Azure/azure-functions-nodejs-worker/blob/v3.5.2/src/setupCoreModule.ts#L46-L54\n        debug('Module._resolveFilename(\"%s\") threw %j, calling original Module.require', id, resolveErr.message)\n        return self._origRequire.apply(this, args)\n      }\n    }\n\n    let moduleName, basedir\n\n    debug('processing %s module require(\\'%s\\'): %s', core === true ? 'core' : 'non-core', id, filename)\n\n    // return known patched modules immediately\n    if (self._cache.has(filename, core) === true) {\n      debug('returning already patched cached module: %s', filename)\n      return self._cache.get(filename, core)\n    }\n\n    // Check if this module has a patcher in-progress already.\n    // Otherwise, mark this module as patching in-progress.\n    const isPatching = patching.has(filename)\n    if (isPatching === false) {\n      patching.add(filename)\n    }\n\n    const exports = coreOnly\n      ? self._origGetBuiltinModule.apply(this, args)\n      : self._origRequire.apply(this, args)\n\n    // If it's already patched, just return it as-is.\n    if (isPatching === true) {\n      debug('module is in the process of being patched already - ignoring: %s', filename)\n      return exports\n    }\n\n    // The module has already been loaded,\n    // so the patching mark can be cleaned up.\n    patching.delete(filename)\n\n    if (core === true) {\n      if (hasWhitelist === true && modules.includes(filename) === false) {\n        debug('ignoring core module not on whitelist: %s', filename)\n        return exports // abort if module name isn't on whitelist\n      }\n      moduleName = filename\n    } else if (hasWhitelist === true && modules.includes(filename)) {\n      // whitelist includes the absolute path to the file including extension\n      const parsedPath = path.parse(filename)\n      moduleName = parsedPath.name\n      basedir = parsedPath.dir\n    } else {\n      const stat = moduleDetailsFromPath(filename)\n      if (stat === undefined) {\n        debug('could not parse filename: %s', filename)\n        return exports // abort if filename could not be parsed\n      }\n      moduleName = stat.name\n      basedir = stat.basedir\n\n      // Ex: require('foo/lib/../bar.js')\n      // moduleName = 'foo'\n      // fullModuleName = 'foo/bar'\n      const fullModuleName = resolveModuleName(stat)\n\n      debug('resolved filename to module: %s (id: %s, resolved: %s, basedir: %s)', moduleName, id, fullModuleName, basedir)\n\n      let matchFound = false\n      if (hasWhitelist) {\n        if (!id.startsWith('.') && modules.includes(id)) {\n          // Not starting with '.' means `id` is identifying a module path,\n          // as opposed to a local file path. (Note: I'm not sure about\n          // absolute paths, but those are handled above.)\n          // If this `id` is in `modules`, then this could be a match to an\n          // package \"exports\" entry point that wouldn't otherwise match below.\n          moduleName = id\n          matchFound = true\n        }\n\n        // abort if module name isn't on whitelist\n        if (!modules.includes(moduleName) && !modules.includes(fullModuleName)) {\n          return exports\n        }\n\n        if (modules.includes(fullModuleName) && fullModuleName !== moduleName) {\n          // if we get to this point, it means that we're requiring a whitelisted sub-module\n          moduleName = fullModuleName\n          matchFound = true\n        }\n      }\n\n      if (!matchFound) {\n        // figure out if this is the main module file, or a file inside the module\n        let res\n        try {\n          res = require.resolve(moduleName, { paths: [basedir] })\n        } catch (e) {\n          debug('could not resolve module: %s', moduleName)\n          self._cache.set(filename, exports, core)\n          return exports // abort if module could not be resolved (e.g. no main in package.json and no index.js file)\n        }\n\n        if (res !== filename) {\n          // this is a module-internal file\n          if (internals === true) {\n            // use the module-relative path to the file, prefixed by original module name\n            moduleName = moduleName + path.sep + path.relative(basedir, filename)\n            debug('preparing to process require of internal file: %s', moduleName)\n          } else {\n            debug('ignoring require of non-main module file: %s', res)\n            self._cache.set(filename, exports, core)\n            return exports // abort if not main module file\n          }\n        }\n      }\n    }\n\n    // ensure that the cache entry is assigned a value before calling\n    // onrequire, in case calling onrequire requires the same module.\n    self._cache.set(filename, exports, core)\n    debug('calling require hook: %s', moduleName)\n    const patchedExports = onrequire(exports, moduleName, basedir)\n    self._cache.set(filename, patchedExports, core)\n\n    debug('returning module: %s', moduleName)\n    return patchedExports\n  }\n}\n\nHook.prototype.unhook = function () {\n  this._unhooked = true\n\n  if (this._require === Module.prototype.require) {\n    Module.prototype.require = this._origRequire\n    debug('require unhook successful')\n  } else {\n    debug('require unhook unsuccessful')\n  }\n\n  if (process.getBuiltinModule !== undefined) {\n    if (this._getBuiltinModule === process.getBuiltinModule) {\n      process.getBuiltinModule = this._origGetBuiltinModule\n      debug('process.getBuiltinModule unhook successful')\n    } else {\n      debug('process.getBuiltinModule unhook unsuccessful')\n    }\n  }\n}\n\nfunction resolveModuleName (stat) {\n  const normalizedPath = path.sep !== '/' ? stat.path.split(path.sep).join('/') : stat.path\n  return path.posix.join(stat.name, normalizedPath).replace(normalize, '')\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Hooked } from './RequireInTheMiddleSingleton';\n\nexport const ModuleNameSeparator = '/';\n\n/**\n * Node in a `ModuleNameTrie`\n */\nclass ModuleNameTrieNode {\n  hooks: Array<{ hook: Hooked; insertedId: number }> = [];\n  children: Map<string, ModuleNameTrieNode> = new Map();\n}\n\ntype ModuleNameTrieSearchOptions = {\n  /**\n   * Whether to return the results in insertion order\n   */\n  maintainInsertionOrder?: boolean;\n  /**\n   * Whether to return only full matches\n   */\n  fullOnly?: boolean;\n};\n\n/**\n * Trie containing nodes that represent a part of a module name (i.e. the parts separated by forward slash)\n */\nexport class ModuleNameTrie {\n  private _trie: ModuleNameTrieNode = new ModuleNameTrieNode();\n  private _counter: number = 0;\n\n  /**\n   * Insert a module hook into the trie\n   *\n   * @param {Hooked} hook Hook\n   */\n  insert(hook: Hooked) {\n    let trieNode = this._trie;\n\n    for (const moduleNamePart of hook.moduleName.split(ModuleNameSeparator)) {\n      let nextNode = trieNode.children.get(moduleNamePart);\n      if (!nextNode) {\n        nextNode = new ModuleNameTrieNode();\n        trieNode.children.set(moduleNamePart, nextNode);\n      }\n      trieNode = nextNode;\n    }\n    trieNode.hooks.push({ hook, insertedId: this._counter++ });\n  }\n\n  /**\n   * Search for matching hooks in the trie\n   *\n   * @param {string} moduleName Module name\n   * @param {boolean} maintainInsertionOrder Whether to return the results in insertion order\n   * @param {boolean} fullOnly Whether to return only full matches\n   * @returns {Hooked[]} Matching hooks\n   */\n  search(\n    moduleName: string,\n    { maintainInsertionOrder, fullOnly }: ModuleNameTrieSearchOptions = {}\n  ): Hooked[] {\n    let trieNode = this._trie;\n    const results: ModuleNameTrieNode['hooks'] = [];\n    let foundFull = true;\n\n    for (const moduleNamePart of moduleName.split(ModuleNameSeparator)) {\n      const nextNode = trieNode.children.get(moduleNamePart);\n      if (!nextNode) {\n        foundFull = false;\n        break;\n      }\n      if (!fullOnly) {\n        results.push(...nextNode.hooks);\n      }\n      trieNode = nextNode;\n    }\n\n    if (fullOnly && foundFull) {\n      results.push(...trieNode.hooks);\n    }\n\n    if (results.length === 0) {\n      return [];\n    }\n    if (results.length === 1) {\n      return [results[0].hook];\n    }\n    if (maintainInsertionOrder) {\n      results.sort((a, b) => a.insertedId - b.insertedId);\n    }\n    return results.map(({ hook }) => hook);\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { OnRequireFn } from 'require-in-the-middle';\nimport { Hook } from 'require-in-the-middle';\nimport * as path from 'path';\nimport { ModuleNameTrie, ModuleNameSeparator } from './ModuleNameTrie';\n\nexport type Hooked = {\n  moduleName: string;\n  onRequire: OnRequireFn;\n};\n\n/**\n * Whether Mocha is running in this process\n * Inspired by https://github.com/AndreasPizsa/detect-mocha\n *\n * @type {boolean}\n */\nconst isMocha = [\n  'afterEach',\n  'after',\n  'beforeEach',\n  'before',\n  'describe',\n  'it',\n].every(fn => {\n  // @ts-expect-error TS7053: Element implicitly has an 'any' type\n  return typeof global[fn] === 'function';\n});\n\n/**\n * Singleton class for `require-in-the-middle`\n * Allows instrumentation plugins to patch modules with only a single `require` patch\n * WARNING: Because this class will create its own `require-in-the-middle` (RITM) instance,\n * we should minimize the number of new instances of this class.\n * Multiple instances of `@opentelemetry/instrumentation` (e.g. multiple versions) in a single process\n * will result in multiple instances of RITM, which will have an impact\n * on the performance of instrumentation hooks being applied.\n */\nexport class RequireInTheMiddleSingleton {\n  private _moduleNameTrie: ModuleNameTrie = new ModuleNameTrie();\n  private static _instance?: RequireInTheMiddleSingleton;\n\n  private constructor() {\n    this._initialize();\n  }\n\n  private _initialize() {\n    new Hook(\n      // Intercept all `require` calls; we will filter the matching ones below\n      null,\n      { internals: true },\n      (exports, name, basedir) => {\n        // For internal files on Windows, `name` will use backslash as the path separator\n        const normalizedModuleName = normalizePathSeparators(name);\n\n        const matches = this._moduleNameTrie.search(normalizedModuleName, {\n          maintainInsertionOrder: true,\n          // For core modules (e.g. `fs`), do not match on sub-paths (e.g. `fs/promises').\n          // This matches the behavior of `require-in-the-middle`.\n          // `basedir` is always `undefined` for core modules.\n          fullOnly: basedir === undefined,\n        });\n\n        for (const { onRequire } of matches) {\n          exports = onRequire(exports, name, basedir);\n        }\n\n        return exports;\n      }\n    );\n  }\n\n  /**\n   * Register a hook with `require-in-the-middle`\n   *\n   * @param {string} moduleName Module name\n   * @param {OnRequireFn} onRequire Hook function\n   * @returns {Hooked} Registered hook\n   */\n  register(moduleName: string, onRequire: OnRequireFn): Hooked {\n    const hooked = { moduleName, onRequire };\n    this._moduleNameTrie.insert(hooked);\n    return hooked;\n  }\n\n  /**\n   * Get the `RequireInTheMiddleSingleton` singleton\n   *\n   * @returns {RequireInTheMiddleSingleton} Singleton of `RequireInTheMiddleSingleton`\n   */\n  static getInstance(): RequireInTheMiddleSingleton {\n    // Mocha runs all test suites in the same process\n    // This prevents test suites from sharing a singleton\n    if (isMocha) return new RequireInTheMiddleSingleton();\n\n    return (this._instance =\n      this._instance ?? new RequireInTheMiddleSingleton());\n  }\n}\n\n/**\n * Normalize the path separators to forward slash in a module name or path\n *\n * @param {string} moduleNameOrPath Module name or path\n * @returns {string} Normalized module name or path\n */\nfunction normalizePathSeparators(moduleNameOrPath: string): string {\n  return path.sep !== ModuleNameSeparator\n    ? moduleNameOrPath.split(path.sep).join(ModuleNameSeparator)\n    : moduleNameOrPath;\n}\n", "// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2.0 License.\n//\n// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2021 Datadog, Inc.\n\nconst importHooks = [] // TODO should this be a Set?\nconst setters = new WeakMap()\nconst getters = new WeakMap()\nconst specifiers = new Map()\nconst toHook = []\n\nconst proxyHandler = {\n  set (target, name, value) {\n    const set = setters.get(target)\n    const setter = set && set[name]\n    if (typeof setter === 'function') {\n      return setter(value)\n    }\n    // If a module doesn't export the property being assigned (e.g. no default\n    // export), there is no setter to call. Don't crash userland code.\n    return true\n  },\n\n  get (target, name) {\n    if (name === Symbol.toStringTag) {\n      return 'Module'\n    }\n\n    const getter = getters.get(target)[name]\n\n    if (typeof getter === 'function') {\n      return getter()\n    }\n  },\n\n  defineProperty (target, property, descriptor) {\n    if ((!('value' in descriptor))) {\n      throw new Error('Getters/setters are not supported for exports property descriptors.')\n    }\n\n    const set = setters.get(target)\n    const setter = set && set[property]\n    if (typeof setter === 'function') {\n      return setter(descriptor.value)\n    }\n    return true\n  }\n}\n\nfunction register (name, namespace, set, get, specifier) {\n  specifiers.set(name, specifier)\n  setters.set(namespace, set)\n  getters.set(namespace, get)\n  const proxy = new Proxy(namespace, proxyHandler)\n  importHooks.forEach(hook => hook(name, proxy, specifier))\n  toHook.push([name, proxy, specifier])\n}\n\n// Delays (ms) for re-reading exports that were still in their temporal dead zone\n// when the wrapper first ran (circular imports). Retried on a microtask first,\n// then at these intervals; unref'd so best-effort retries never hold the process\n// open. Frozen once at module load rather than rebuilt per wrapper.\nconst RETRY_DELAYS = [0, 10, 50]\n\n/**\n * Per-wrapped-module state a generated wrapper builds once to expose its exports\n * through iitm's proxy. Each wrapper holds a local binding per export plus\n * `write`/`read` closures over it; `bind` seeds that binding from the real\n * module and installs the proxy's `set`/`get` for the name, and `flush` resolves\n * any export that was undefined (circular import) once it becomes available.\n *\n * This is the boilerplate the wrapper used to inline in full per module. Hoisting\n * it here compiles it once instead of once per wrapped module and keeps the\n * per-export bind call site monomorphic.\n */\nclass ModuleBinder {\n  // Mimics a Module namespace object (https://tc39.es/ecma262/#sec-module-namespace-objects).\n  namespace = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } })\n  set = {}\n  get = {}\n  #overridden = Object.create(null)\n  #pending = []\n\n  /**\n   * Seeds `key` from `source` and installs its proxy accessors. A value that is\n   * undefined or throws `ReferenceError` (temporal dead zone during a circular\n   * import) is deferred to `flush`; any other throw propagates.\n   *\n   * @param {string} key The export name.\n   * @param {object} source The real module namespace to read the value from.\n   * @param {(value: unknown) => void} write Assigns the wrapper's local binding.\n   * @param {() => unknown} read Reads the wrapper's local binding.\n   * @param {boolean} useFallback Fall back to `source.default` (the synthetic\n   * `module.exports` name a builtin does not expose on its ESM namespace).\n   * @returns {void}\n   */\n  bind (key, source, write, read, useFallback) {\n    const readSource = useFallback\n      ? () => source[key] ?? source.default\n      : () => source[key]\n    this.#overridden[key] = false\n    let deferred = false\n    try {\n      const value = readSource()\n      write(value)\n      this.namespace[key] = value\n    } catch (error) {\n      if (!(error instanceof ReferenceError)) throw error\n      deferred = true\n    }\n    if (deferred || read() === undefined) {\n      this.#pending.push(this.#makeUpdater(key, readSource, write))\n    }\n    this.set[key] = (value) => {\n      this.#overridden[key] = true\n      write(value)\n      return true\n    }\n    this.get[key] = read\n  }\n\n  /**\n   * @param {string} key The export name to update.\n   * @param {() => unknown} readSource Reads the current value from the real module.\n   * @param {(value: unknown) => void} write Assigns the wrapper's local binding.\n   * @returns {() => boolean} Updater returning whether the value is now settled.\n   */\n  #makeUpdater (key, readSource, write) {\n    return () => {\n      if (this.#overridden[key] === true) return true\n      try {\n        const value = readSource()\n        if (value !== undefined) {\n          write(value)\n          this.namespace[key] = value\n          return true\n        }\n        return false\n      } catch (error) {\n        if (error instanceof ReferenceError) return false\n        // Only reached if a getter starts throwing a non-ReferenceError after the\n        // initial bind read already succeeded or deferred; surfaces in flush's\n        // microtask. Kept as-is from the inline wrapper.\n        /* c8 ignore next */\n        throw error\n      }\n    }\n  }\n\n  #flushOnce () {\n    const next = []\n    for (const updater of this.#pending) {\n      // If it still throws ReferenceError, keep it for the (single) next attempt.\n      if (updater() !== true) next.push(updater)\n    }\n    this.#pending = next\n  }\n\n  /**\n   * Resolves exports deferred by `bind` (undefined or TDZ at wrapper-eval time).\n   * Retries on a microtask, then at `RETRY_DELAYS`, giving up afterwards to avoid\n   * unbounded retries. A no-op when nothing was deferred.\n   *\n   * @returns {void}\n   */\n  flush () {\n    if (this.#pending.length === 0) return\n    queueMicrotask(() => {\n      this.#flushOnce()\n      this.#scheduleRetry(0)\n    })\n  }\n\n  /**\n   * @param {number} attempt Index into `RETRY_DELAYS` for the next retry.\n   * @returns {void}\n   */\n  #scheduleRetry (attempt) {\n    if (this.#pending.length === 0) return\n    if (attempt >= RETRY_DELAYS.length) {\n      // Give up: leave exports as-is to avoid unbounded retries.\n      this.#pending = []\n      return\n    }\n    const timer = setTimeout(() => {\n      this.#flushOnce()\n      this.#scheduleRetry(attempt + 1)\n    }, RETRY_DELAYS[attempt])\n    // Don't keep the process alive just for best-effort retries.\n    if (timer && typeof timer.unref === 'function') timer.unref()\n  }\n}\n\nexports.register = register\nexports.ModuleBinder = ModuleBinder\nexports.importHooks = importHooks\nexports.specifiers = specifiers\nexports.toHook = toHook\n", "// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2.0 License.\n//\n// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2021 Datadog, Inc.\n\nconst path = require('path')\nconst moduleDetailsFromPath = require('module-details-from-path')\nconst { fileURLToPath } = require('url')\nconst { MessageChannel } = require('worker_threads')\n\nlet { isBuiltin } = require('module')\nif (!isBuiltin) {\n  isBuiltin = () => true\n}\n\nconst {\n  importHooks,\n  specifiers,\n  toHook\n} = require('./lib/register')\n\n/**\n * Checks turbopack specifiers separately (for Next.js 16+).\n *\n * If turbopack is used, specifiers will have an additional hash appended to the end.\n * Something like \"ai\" might become \"ai-5e7181a616786b24\". This only happens in Next.js 16+.\n * Just checking if the baseDir ends with this new specifier won't match, as the baseDir still has the plain package.\n *\n * This logic isolates a new check for checking the actual name in the case turbopack is being used.\n *\n * @param specifier {string}\n * @param baseDir {string}\n */\nfunction isTurbopackSpecifier (specifier, baseDir) {\n  const usingTurbopack = process.env.TURBOPACK ?? process.argv.includes('--turbo')\n  if (!usingTurbopack) return false\n\n  const specifierWithoutTurbopackHash = specifier.slice(0, specifier.lastIndexOf('-'))\n  return baseDir.endsWith(specifierWithoutTurbopackHash)\n}\n\nfunction addHook (hook) {\n  importHooks.push(hook)\n  toHook.forEach(([name, namespace, specifier]) => hook(name, namespace, specifier))\n}\n\nfunction removeHook (hook) {\n  const index = importHooks.indexOf(hook)\n  if (index > -1) {\n    importHooks.splice(index, 1)\n  }\n}\n\nfunction callHookFn (hookFn, namespace, name, baseDir) {\n  const newDefault = hookFn(namespace, name, baseDir)\n  if (newDefault && newDefault !== namespace) {\n    // Only ESM modules that actually export `default` can have it reassigned.\n    // Some hooks return a value unconditionally; avoid crashing when the module\n    // has no default export (see issue #188).\n    if ('default' in namespace) {\n      namespace.default = newDefault\n    }\n  }\n}\n\nlet sendModulesToLoader\n\n/**\n * EXPERIMENTAL\n * This feature is experimental and may change in minor versions.\n * **NOTE** This feature is incompatible with the {internals: true} Hook option.\n *\n * Creates a message channel with a port that can be used to add hooks to the\n * list of exclusively included modules.\n *\n * This can be used to only wrap modules that are Hook'ed, however modules need\n * to be hooked before they are imported.\n *\n * ```ts\n * import { register } from 'module'\n * import { Hook, createAddHookMessageChannel } from 'import-in-the-middle'\n *\n * const { registerOptions, waitForAllMessagesAcknowledged } = createAddHookMessageChannel()\n *\n * register('import-in-the-middle/hook.mjs', import.meta.url, registerOptions)\n *\n * Hook(['fs'], (exported, name, baseDir) => {\n *   // Instrument the fs module\n * })\n *\n * // Ensure that the loader has acknowledged all the modules\n * // before we allow execution to continue\n * await waitForAllMessagesAcknowledged()\n * ```\n */\nfunction createAddHookMessageChannel () {\n  const { port1, port2 } = new MessageChannel()\n  let pendingAckCount = 0\n  let resolveFn\n\n  sendModulesToLoader = (modules) => {\n    pendingAckCount++\n    port1.postMessage(modules)\n  }\n\n  port1.on('message', () => {\n    pendingAckCount--\n\n    if (resolveFn && pendingAckCount <= 0) {\n      resolveFn()\n    }\n  }).unref()\n\n  function waitForAllMessagesAcknowledged () {\n    // This timer is to prevent the process from exiting with code 13:\n    // 13: Unsettled Top-Level Await.\n    const timer = setInterval(() => { }, 1000)\n    const promise = new Promise((resolve) => {\n      resolveFn = resolve\n    }).then(() => { clearInterval(timer) })\n\n    if (pendingAckCount === 0) {\n      resolveFn()\n    }\n\n    return promise\n  }\n\n  const addHookMessagePort = port2\n  const registerOptions = { data: { addHookMessagePort, include: [] }, transferList: [addHookMessagePort] }\n\n  return { registerOptions, addHookMessagePort, waitForAllMessagesAcknowledged }\n}\n\nfunction Hook (modules, options, hookFn) {\n  if ((this instanceof Hook) === false) return new Hook(modules, options, hookFn)\n  if (typeof modules === 'function') {\n    hookFn = modules\n    modules = null\n    options = null\n  } else if (typeof options === 'function') {\n    hookFn = options\n    options = null\n  }\n  const internals = options ? options.internals === true : false\n\n  if (sendModulesToLoader && Array.isArray(modules)) {\n    sendModulesToLoader(modules)\n  }\n\n  this._iitmHook = (name, namespace, specifier) => {\n    const loadUrl = name\n    const isNodeUrl = loadUrl.startsWith('node:')\n    let filePath, baseDir\n\n    if (isNodeUrl) {\n      // Normalize builtin module name to *not* have 'node:' prefix, unless\n      // required, as it is for 'node:test' and some others.  `module.isBuiltin`\n      // is available in all Node.js versions that have node:-only modules.\n      const unprefixed = name.slice(5)\n      if (isBuiltin(unprefixed)) {\n        name = unprefixed\n      }\n    } else if (loadUrl.startsWith('file://')) {\n      const stackTraceLimit = Error.stackTraceLimit\n      Error.stackTraceLimit = 0\n      try {\n        filePath = fileURLToPath(name)\n        name = filePath\n      } catch (e) {}\n      Error.stackTraceLimit = stackTraceLimit\n\n      if (filePath) {\n        const details = moduleDetailsFromPath(filePath)\n        if (details) {\n          name = details.name\n          baseDir = details.basedir\n        }\n      }\n    }\n\n    if (modules) {\n      for (const matchArg of modules) {\n        if (filePath && matchArg === filePath) {\n          // abspath match\n          callHookFn(hookFn, namespace, filePath, undefined)\n        } else if (matchArg === name) {\n          if (!baseDir) {\n            // built-in module (or unexpected non file:// name?)\n            callHookFn(hookFn, namespace, name, baseDir)\n          } else if (baseDir.endsWith(specifiers.get(loadUrl)) || isTurbopackSpecifier(specifiers.get(loadUrl), baseDir)) {\n            // An import of the top-level module (e.g. `import 'ioredis'`).\n            // Note: Slight behaviour difference from RITM. RITM uses\n            // `require.resolve(name)` to see if filename is the module\n            // main file, which will catch `require('ioredis/built/index.js')`.\n            // The check here will not catch `import 'ioredis/built/index.js'`.\n            callHookFn(hookFn, namespace, name, baseDir)\n          } else if (internals) {\n            const internalPath = name + path.sep + path.relative(baseDir, filePath)\n            callHookFn(hookFn, namespace, internalPath, baseDir)\n          }\n        } else if (matchArg === specifier) {\n          callHookFn(hookFn, namespace, specifier, baseDir)\n        }\n      }\n    } else {\n      callHookFn(hookFn, namespace, name, baseDir)\n    }\n  }\n\n  addHook(this._iitmHook)\n}\n\nHook.prototype.unhook = function () {\n  removeHook(this._iitmHook)\n}\n\nmodule.exports = Hook\nmodule.exports.Hook = Hook\nmodule.exports.addHook = addHook\nmodule.exports.removeHook = removeHook\nmodule.exports.createAddHookMessageChannel = createAddHookMessageChannel\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ShimWrapped } from './types';\n\n/**\n * function to execute patched function and being able to catch errors\n * @param execute - function to be executed\n * @param onFinish - callback to run when execute finishes\n */\nexport function safeExecuteInTheMiddle<T>(\n  execute: () => T,\n  onFinish: (e: Error | undefined, result: T | undefined) => void,\n  preventThrowingError?: boolean\n): T {\n  let error: Error | undefined;\n  let result: T | undefined;\n  try {\n    result = execute();\n  } catch (e) {\n    error = e;\n  } finally {\n    onFinish(error, result);\n    if (error && !preventThrowingError) {\n      // eslint-disable-next-line no-unsafe-finally\n      throw error;\n    }\n    // eslint-disable-next-line no-unsafe-finally\n    return result as T;\n  }\n}\n\n/**\n * Async function to execute patched function and being able to catch errors\n * @param execute - function to be executed\n * @param onFinish - callback to run when execute finishes\n */\nexport async function safeExecuteInTheMiddleAsync<T>(\n  execute: () => T,\n  onFinish: (\n    e: Error | undefined,\n    result: T | undefined\n  ) => Promise<void> | void,\n  preventThrowingError?: boolean\n): Promise<T> {\n  let error: Error | undefined;\n  let result: T | undefined;\n  try {\n    result = await execute();\n  } catch (e) {\n    error = e;\n  } finally {\n    await onFinish(error, result);\n    if (error && !preventThrowingError) {\n      // eslint-disable-next-line no-unsafe-finally\n      throw error;\n    }\n    // eslint-disable-next-line no-unsafe-finally\n    return result as T;\n  }\n}\n/**\n * Checks if certain function has been already wrapped\n * @param func\n */\nexport function isWrapped(func: unknown): func is ShimWrapped {\n  return (\n    typeof func === 'function' &&\n    typeof (func as ShimWrapped).__original === 'function' &&\n    typeof (func as ShimWrapped).__unwrap === 'function' &&\n    (func as ShimWrapped).__wrapped === true\n  );\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type * as types from '../../types';\nimport * as path from 'path';\nimport { types as utilTypes } from 'util';\nimport { satisfies } from '../../semver';\nimport type { massWrap, massUnwrap } from '../../shimmer';\nimport { wrap, unwrap } from '../../shimmer';\nimport { InstrumentationAbstract } from '../../instrumentation';\nimport type { Hooked } from './RequireInTheMiddleSingleton';\nimport { RequireInTheMiddleSingleton } from './RequireInTheMiddleSingleton';\nimport type { HookFn } from 'import-in-the-middle';\nimport { Hook as HookImport } from 'import-in-the-middle';\nimport type {\n  InstrumentationConfig,\n  InstrumentationModuleDefinition,\n} from '../../types';\nimport { diag } from '@opentelemetry/api';\nimport type { OnRequireFn } from 'require-in-the-middle';\nimport { Hook as HookRequire } from 'require-in-the-middle';\nimport { readFileSync } from 'fs';\nimport { isWrapped } from '../../utils';\n\n/**\n * Base abstract class for instrumenting node plugins\n */\nexport abstract class InstrumentationBase<\n    ConfigType extends InstrumentationConfig = InstrumentationConfig,\n  >\n  extends InstrumentationAbstract<ConfigType>\n  implements types.Instrumentation<ConfigType>\n{\n  private _modules: InstrumentationModuleDefinition[];\n  private _hooks: (Hooked | HookRequire)[] = [];\n  private _requireInTheMiddleSingleton: RequireInTheMiddleSingleton =\n    RequireInTheMiddleSingleton.getInstance();\n  private _enabled = false;\n\n  constructor(\n    instrumentationName: string,\n    instrumentationVersion: string,\n    config: ConfigType\n  ) {\n    super(instrumentationName, instrumentationVersion, config);\n\n    let modules = this.init();\n\n    if (modules && !Array.isArray(modules)) {\n      modules = [modules];\n    }\n\n    this._modules = (modules as InstrumentationModuleDefinition[]) || [];\n\n    if (this._config.enabled) {\n      this.enable();\n    }\n  }\n\n  protected override _wrap: typeof wrap = (moduleExports, name, wrapper) => {\n    if (isWrapped(moduleExports[name])) {\n      this._unwrap(moduleExports, name);\n    }\n    if (!utilTypes.isProxy(moduleExports)) {\n      return wrap(moduleExports, name, wrapper);\n    } else {\n      const wrapped = wrap(Object.assign({}, moduleExports), name, wrapper);\n      Object.defineProperty(moduleExports, name, {\n        value: wrapped,\n      });\n      return wrapped;\n    }\n  };\n\n  protected override _unwrap: typeof unwrap = (moduleExports, name) => {\n    if (!utilTypes.isProxy(moduleExports)) {\n      return unwrap(moduleExports, name);\n    } else {\n      return Object.defineProperty(moduleExports, name, {\n        value: moduleExports[name],\n      });\n    }\n  };\n\n  protected override _massWrap: typeof massWrap = (\n    moduleExportsArray,\n    names,\n    wrapper\n  ) => {\n    if (!moduleExportsArray) {\n      diag.error('must provide one or more modules to patch');\n      return;\n    } else if (!Array.isArray(moduleExportsArray)) {\n      moduleExportsArray = [moduleExportsArray];\n    }\n\n    if (!(names && Array.isArray(names))) {\n      diag.error('must provide one or more functions to wrap on modules');\n      return;\n    }\n\n    moduleExportsArray.forEach(moduleExports => {\n      names.forEach(name => {\n        this._wrap(moduleExports, name, wrapper);\n      });\n    });\n  };\n\n  protected override _massUnwrap: typeof massUnwrap = (\n    moduleExportsArray,\n    names\n  ) => {\n    if (!moduleExportsArray) {\n      diag.error('must provide one or more modules to patch');\n      return;\n    } else if (!Array.isArray(moduleExportsArray)) {\n      moduleExportsArray = [moduleExportsArray];\n    }\n\n    if (!(names && Array.isArray(names))) {\n      diag.error('must provide one or more functions to wrap on modules');\n      return;\n    }\n\n    moduleExportsArray.forEach(moduleExports => {\n      names.forEach(name => {\n        this._unwrap(moduleExports, name);\n      });\n    });\n  };\n\n  private _warnOnPreloadedModules(): void {\n    // Access require via globalThis to prevent webpack from analyzing it as a dependency expression\n    const nodeRequire = globalThis.require;\n    if (!nodeRequire?.resolve || !nodeRequire?.cache) return;\n\n    this._modules.forEach((module: InstrumentationModuleDefinition) => {\n      const { name } = module;\n      try {\n        const resolvedModule = nodeRequire.resolve(name);\n        if (nodeRequire.cache[resolvedModule]?.loaded) {\n          // Module is already cached, which means the instrumentation hook might not work\n          this._diag.warn(\n            `Module ${name} has been loaded before ${this.instrumentationName} so it might not work, please initialize it before requiring ${name}`\n          );\n        }\n      } catch {\n        // Module isn't available, we can simply skip\n      }\n    });\n  }\n\n  private _extractPackageVersion(baseDir: string): string | undefined {\n    try {\n      const json = readFileSync(path.join(baseDir, 'package.json'), {\n        encoding: 'utf8',\n      });\n      const version = JSON.parse(json).version;\n      return typeof version === 'string' ? version : undefined;\n    } catch {\n      diag.warn('Failed extracting version', baseDir);\n    }\n\n    return undefined;\n  }\n\n  private _onRequire<T>(\n    module: InstrumentationModuleDefinition,\n    exports: T,\n    name: string,\n    baseDir?: string | void\n  ): T {\n    if (!baseDir) {\n      if (typeof module.patch === 'function') {\n        module.moduleExports = exports;\n        if (this._enabled) {\n          this._diag.debug(\n            'Applying instrumentation patch for nodejs core module on require hook',\n            {\n              module: module.name,\n            }\n          );\n          return module.patch(exports);\n        }\n      }\n      return exports;\n    }\n\n    const version = this._extractPackageVersion(baseDir);\n    module.moduleVersion = version;\n    if (module.name === name) {\n      // main module\n      if (\n        isSupported(module.supportedVersions, version, module.includePrerelease)\n      ) {\n        if (typeof module.patch === 'function') {\n          module.moduleExports = exports;\n          if (this._enabled) {\n            this._diag.debug(\n              'Applying instrumentation patch for module on require hook',\n              {\n                module: module.name,\n                version: module.moduleVersion,\n                baseDir,\n              }\n            );\n            return module.patch(exports, module.moduleVersion);\n          }\n        }\n      }\n      return exports;\n    }\n    // internal file\n    const files = module.files ?? [];\n    const normalizedName = path.normalize(name);\n    const supportedFileInstrumentations = files.filter(\n      f =>\n        f.name === normalizedName &&\n        isSupported(f.supportedVersions, version, module.includePrerelease)\n    );\n    return supportedFileInstrumentations.reduce<T>((patchedExports, file) => {\n      file.moduleExports = patchedExports;\n      if (this._enabled) {\n        this._diag.debug(\n          'Applying instrumentation patch for nodejs module file on require hook',\n          {\n            module: module.name,\n            version: module.moduleVersion,\n            fileName: file.name,\n            baseDir,\n          }\n        );\n\n        // patch signature is not typed, so we cast it assuming it's correct\n        return file.patch(patchedExports, module.moduleVersion) as T;\n      }\n      return patchedExports;\n    }, exports);\n  }\n\n  public enable(): void {\n    if (this._enabled) {\n      return;\n    }\n    this._enabled = true;\n\n    // already hooked, just call patch again\n    if (this._hooks.length > 0) {\n      for (const module of this._modules) {\n        if (typeof module.patch === 'function' && module.moduleExports) {\n          this._diag.debug(\n            'Applying instrumentation patch for nodejs module on instrumentation enabled',\n            {\n              module: module.name,\n              version: module.moduleVersion,\n            }\n          );\n          module.patch(module.moduleExports, module.moduleVersion);\n        }\n        for (const file of module.files) {\n          if (file.moduleExports) {\n            this._diag.debug(\n              'Applying instrumentation patch for nodejs module file on instrumentation enabled',\n              {\n                module: module.name,\n                version: module.moduleVersion,\n                fileName: file.name,\n              }\n            );\n            file.patch(file.moduleExports, module.moduleVersion);\n          }\n        }\n      }\n      return;\n    }\n\n    this._warnOnPreloadedModules();\n    for (const module of this._modules) {\n      const hookFn: HookFn = (exports, name, baseDir) => {\n        if (!baseDir && path.isAbsolute(name)) {\n          // Change IITM `name` and `baseDir` values to match what RITM returns.\n          // See \"Comparing to RITM\" on https://github.com/nodejs/import-in-the-middle/pull/241\n          // for an example of the differences.\n          const parsedPath = path.parse(name);\n          name = parsedPath.name;\n          baseDir = parsedPath.dir;\n        }\n        return this._onRequire<typeof exports>(module, exports, name, baseDir);\n      };\n      const onRequire: OnRequireFn = (exports, name, baseDir) => {\n        return this._onRequire<typeof exports>(module, exports, name, baseDir);\n      };\n\n      // `RequireInTheMiddleSingleton` does not support absolute paths.\n      // For an absolute paths, we must create a separate instance of the\n      // require-in-the-middle `Hook`.\n      const hook = path.isAbsolute(module.name)\n        ? new HookRequire([module.name], { internals: true }, onRequire)\n        : this._requireInTheMiddleSingleton.register(module.name, onRequire);\n\n      this._hooks.push(hook);\n      const esmHook = new HookImport(\n        [module.name],\n        { internals: true },\n        <HookFn>hookFn\n      );\n      this._hooks.push(esmHook);\n    }\n  }\n\n  public disable(): void {\n    if (!this._enabled) {\n      return;\n    }\n    this._enabled = false;\n\n    for (const module of this._modules) {\n      if (typeof module.unpatch === 'function' && module.moduleExports) {\n        this._diag.debug(\n          'Removing instrumentation patch for nodejs module on instrumentation disabled',\n          {\n            module: module.name,\n            version: module.moduleVersion,\n          }\n        );\n        module.unpatch(module.moduleExports, module.moduleVersion);\n      }\n      for (const file of module.files) {\n        if (file.moduleExports) {\n          this._diag.debug(\n            'Removing instrumentation patch for nodejs module file on instrumentation disabled',\n            {\n              module: module.name,\n              version: module.moduleVersion,\n              fileName: file.name,\n            }\n          );\n          file.unpatch(file.moduleExports, module.moduleVersion);\n        }\n      }\n    }\n  }\n\n  public isEnabled(): boolean {\n    return this._enabled;\n  }\n}\n\nfunction isSupported(\n  supportedVersions: string[],\n  version?: string,\n  includePrerelease?: boolean\n): boolean {\n  if (typeof version === 'undefined') {\n    // If we don't have the version, accept the wildcard case only\n    return supportedVersions.includes('*');\n  }\n\n  return supportedVersions.some(supportedVersion => {\n    return satisfies(version, supportedVersion, { includePrerelease });\n  });\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport { normalize } from 'path';\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nexport { InstrumentationBase } from './instrumentation';\nexport { normalize } from './normalize';\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport { InstrumentationBase, normalize } from './node';\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n  InstrumentationModuleDefinition,\n  InstrumentationModuleFile,\n} from './types';\n\nexport class InstrumentationNodeModuleDefinition\n  implements InstrumentationModuleDefinition\n{\n  files: InstrumentationModuleFile[];\n  public name: string;\n  public supportedVersions: string[];\n  public patch;\n  public unpatch;\n  constructor(\n    name: string,\n    supportedVersions: string[],\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    patch?: (exports: any, moduleVersion?: string) => any,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    unpatch?: (exports: any, moduleVersion?: string) => void,\n    files?: InstrumentationModuleFile[]\n  ) {\n    this.files = files || [];\n    this.name = name;\n    this.supportedVersions = supportedVersions;\n    this.patch = patch;\n    this.unpatch = unpatch;\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { InstrumentationModuleFile } from './types';\nimport { normalize } from './platform/index';\n\nexport class InstrumentationNodeModuleFile\n  implements InstrumentationModuleFile\n{\n  public name: string;\n  public supportedVersions: string[];\n  public patch;\n  public unpatch;\n\n  constructor(\n    name: string,\n    supportedVersions: string[],\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    patch: (moduleExports: any, moduleVersion?: string) => any,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    unpatch: (moduleExports?: any, moduleVersion?: string) => void\n  ) {\n    this.name = normalize(name);\n    this.supportedVersions = supportedVersions;\n    this.patch = patch;\n    this.unpatch = unpatch;\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport enum SemconvStability {\n  /** Emit only stable semantic conventions. */\n  STABLE = 0x1,\n  /** Emit only old semantic conventions. */\n  OLD = 0x2,\n  /** Emit both stable and old semantic conventions. */\n  DUPLICATE = 0x1 | 0x2,\n}\n\n// Common namespaces mentioned in semantic-conventions docs, but allow\n// other custom strings.\ntype SemConvStabilityNamespace =\n  | 'http'\n  | 'messaging'\n  | 'database'\n  | 'k8s'\n  | (string & {});\n\n/**\n * Determine the appropriate semconv stability for the given namespace.\n *\n * This will parse the given string of comma-separated values (often\n * `process.env.OTEL_SEMCONV_STABILITY_OPT_IN`) looking for the `${namespace}`\n * or `${namespace}/dup` tokens. This is a pattern defined by a number of\n * non-normative semconv documents.\n *\n * For example:\n * - namespace 'http': https://opentelemetry.io/docs/specs/semconv/non-normative/http-migration/\n * - namespace 'database': https://opentelemetry.io/docs/specs/semconv/non-normative/database-migration/\n * - namespace 'k8s': https://opentelemetry.io/docs/specs/semconv/non-normative/k8s-migration/\n *\n * Usage:\n *\n *  import {SemconvStability, semconvStabilityFromStr} from '@opentelemetry/instrumentation';\n *\n *  export class FooInstrumentation extends InstrumentationBase<FooInstrumentationConfig> {\n *    private _semconvStability: SemconvStability;\n *    constructor(config: FooInstrumentationConfig = {}) {\n *      super('@opentelemetry/instrumentation-foo', VERSION, config);\n *\n *      // When supporting the OTEL_SEMCONV_STABILITY_OPT_IN envvar\n *      this._semconvStability = semconvStabilityFromStr(\n *        'http',\n *        process.env.OTEL_SEMCONV_STABILITY_OPT_IN\n *      );\n *\n *      // or when supporting a `semconvStabilityOptIn` config option (e.g. for\n *      // the web where there are no envvars).\n *      this._semconvStability = semconvStabilityFromStr(\n *        'http',\n *        config?.semconvStabilityOptIn\n *      );\n *    }\n *  }\n *\n *  // Then, to apply semconv, use the following or similar:\n *  if (this._semconvStability & SemconvStability.OLD) {\n *    // ...\n *  }\n *  if (this._semconvStability & SemconvStability.STABLE) {\n *    // ...\n *  }\n *\n */\nexport function semconvStabilityFromStr(\n  namespace: SemConvStabilityNamespace,\n  str: string | undefined\n) {\n  let semconvStability = SemconvStability.OLD;\n\n  // The same parsing of `str` as `getStringListFromEnv` from the core pkg.\n  const entries = str\n    ?.split(',')\n    .map(v => v.trim())\n    .filter(s => s !== '');\n  for (const entry of entries ?? []) {\n    if (entry.toLowerCase() === namespace + '/dup') {\n      // DUPLICATE takes highest precedence.\n      semconvStability = SemconvStability.DUPLICATE;\n      break;\n    } else if (entry.toLowerCase() === namespace) {\n      semconvStability = SemconvStability.STABLE;\n    }\n  }\n\n  return semconvStability;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport { registerInstrumentations } from './autoLoader';\nexport { InstrumentationBase } from './platform/index';\nexport { InstrumentationNodeModuleDefinition } from './instrumentationNodeModuleDefinition';\nexport { InstrumentationNodeModuleFile } from './instrumentationNodeModuleFile';\nexport type {\n  Instrumentation,\n  InstrumentationConfig,\n  InstrumentationModuleDefinition,\n  InstrumentationModuleFile,\n  ShimWrapped,\n  SpanCustomizationHook,\n} from './types';\nexport type { AutoLoaderOptions, AutoLoaderResult } from './types_internal';\nexport {\n  isWrapped,\n  safeExecuteInTheMiddle,\n  safeExecuteInTheMiddleAsync,\n} from './utils';\nexport { SemconvStability, semconvStabilityFromStr } from './semconvStability';\n", "import { parseSemver } from '@sentry/core';\n\nexport const NODE_VERSION = parseSemver(process.versions.node) as { major: number; minor: number; patch: number };\nexport const NODE_MAJOR = NODE_VERSION.major;\nexport const NODE_MINOR = NODE_VERSION.minor;\n", "import type { ChannelListener } from 'node:diagnostics_channel';\nimport { subscribe, unsubscribe } from 'node:diagnostics_channel';\nimport { context, trace } from '@opentelemetry/api';\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase } from '@opentelemetry/instrumentation';\nimport type { ClientRequest, IncomingMessage, ServerResponse } from 'node:http';\nimport type { HttpClientRequest, HttpIncomingMessage, HttpInstrumentationOptions, Span } from '@sentry/core';\nimport {\n  getHttpClientSubscriptions,\n  patchHttpModuleClient,\n  SDK_VERSION,\n  getRequestOptions,\n  isTracingSuppressed,\n} from '@sentry/core';\nimport { INSTRUMENTATION_NAME } from './constants';\nimport { HTTP_ON_CLIENT_REQUEST } from '@sentry/core';\nimport { NODE_VERSION } from '../../nodeVersion';\nimport { errorMonitor } from 'node:events';\nimport * as http from 'node:http';\n\nconst FULLY_SUPPORTS_HTTP_DIAGNOSTICS_CHANNEL =\n  (NODE_VERSION.major === 22 && NODE_VERSION.minor >= 12) ||\n  (NODE_VERSION.major === 23 && NODE_VERSION.minor >= 2) ||\n  NODE_VERSION.major >= 24;\n\ninterface OutgoingHttpRequestInstrumentationOptions {\n  /**\n   * Whether breadcrumbs should be recorded for outgoing requests.\n   *\n   * @default `true`\n   */\n  breadcrumbs?: boolean;\n\n  /**\n   * Whether to create spans for outgoing requests (user preference).\n   * This only takes effect if `createSpansForOutgoingRequests` is not disabled.\n   * If `createSpansForOutgoingRequests` is explicitly set false, this option is ignored.\n   *\n   * @default `true`\n   */\n  spans?: boolean;\n\n  /**\n   * Whether to propagate Sentry trace headers in outgoing requests.\n   *\n   * @default `true`\n   */\n  propagateTraceInOutgoingRequests?: boolean;\n\n  /**\n   * @deprecated Use spans option instead.\n   *\n   * @default `true`\n   */\n  createSpansForOutgoingRequests?: boolean;\n\n  /**\n   * Do not instrument outgoing HTTP requests to URLs where the given callback returns `true`.\n   * When it returns `true`, the request is skipped entirely: no breadcrumb and no span are created,\n   * and no trace headers are propagated for that request.\n   *\n   * @param url Contains the entire URL, including query string (if any), protocol, host, etc. of the outgoing request.\n   * @param request Contains the {@type RequestOptions} object used to make the outgoing request.\n   */\n  ignoreOutgoingRequests?: (url: string, request: http.RequestOptions) => boolean;\n\n  /**\n   * Hooks for outgoing request spans, only called when spans are created for outgoing requests\n   * (i.e. when `spans` is enabled).\n   * These mirror the OTEL HttpInstrumentation hooks for backwards compatibility.\n   */\n  outgoingRequestHook?: (span: Span, request: ClientRequest | HttpClientRequest) => void;\n  outgoingResponseHook?: (span: Span, response: IncomingMessage | HttpIncomingMessage) => void;\n  outgoingRequestApplyCustomAttributes?: (\n    span: Span,\n    request: HttpClientRequest,\n    response: HttpIncomingMessage,\n  ) => void;\n}\n\nexport type SentryHttpInstrumentationOptions = InstrumentationConfig &\n  OutgoingHttpRequestInstrumentationOptions & {\n    // All options below do not do anything anymore in this instrumentation, and will be removed in the future.\n    // They are only kept here for backwards compatibility - the respective functionality is now handled by the httpServerIntegration/httpServerSpansIntegration.\n\n    /**\n     * @deprecated This no longer does anything.\n     */\n    extractIncomingTraceFromHeader?: boolean;\n\n    /**\n     * @deprecated This no longer does anything.\n     */\n    ignoreStaticAssets?: boolean;\n\n    /**\n     * @deprecated This no longer does anything.\n     */\n    disableIncomingRequestSpans?: boolean;\n\n    /**\n     * @deprecated This no longer does anything.\n     */\n    ignoreSpansForIncomingRequests?: (urlPath: string, request: IncomingMessage) => boolean;\n\n    /**\n     * @deprecated This no longer does anything.\n     */\n    ignoreIncomingRequestBody?: (url: string, request: http.RequestOptions) => boolean;\n\n    /**\n     * @deprecated This no longer does anything.\n     */\n    maxIncomingRequestBodySize?: 'none' | 'small' | 'medium' | 'always';\n\n    /**\n     * @deprecated This no longer does anything.\n     */\n    trackIncomingRequestsAsSessions?: boolean;\n\n    /**\n     * @deprecated This no longer does anything.\n     */\n    instrumentation?: {\n      requestHook?: (span: Span, req: ClientRequest | IncomingMessage) => void;\n      responseHook?: (span: Span, response: IncomingMessage | ServerResponse) => void;\n      applyCustomAttributesOnSpan?: (\n        span: Span,\n        request: ClientRequest | IncomingMessage,\n        response: IncomingMessage | ServerResponse,\n      ) => void;\n    };\n\n    /**\n     * @deprecated This no longer does anything.\n     */\n    sessionFlushingDelayMS?: number;\n  };\n\n/**\n * This instruments the http modules for outgoing requests.\n * It uses the diagnostics channel if available, otherwise it falls back to monkey-patching.\n *\n * The instrumentation will start spans, create breadcrumbs, and propagate trace headers in outgoing requests (depending on the settings).\n * This can be called multiple times, where the last invocation will have the current options.\n *\n * @TODO Cleanup options in v11\n */\nexport function instrumentHttpOutgoingRequests(\n  instrumentationOptions: OutgoingHttpRequestInstrumentationOptions = {},\n): void {\n  const { outgoingRequestApplyCustomAttributes: applyCustomAttributesOnSpan, ...options } = instrumentationOptions;\n  const patchOptions = {\n    propagateTrace: options.propagateTraceInOutgoingRequests ?? true,\n    applyCustomAttributesOnSpan,\n    ...options,\n    // oxlint-disable-next-line typescript/no-deprecated\n    spans: options.createSpansForOutgoingRequests !== false && (options.spans ?? true),\n    ignoreOutgoingRequests(url, request) {\n      return (\n        isTracingSuppressed() || !!options.ignoreOutgoingRequests?.(url, getRequestOptions(request as ClientRequest))\n      );\n    },\n    outgoingRequestHook(span, request) {\n      options.outgoingRequestHook?.(span, request);\n      // We monkey-patch `req.once('response'), which is used to trigger\n      // the callback of the request, so that it runs in the active context\n      // eslint-disable-next-line @typescript-eslint/unbound-method, typescript/no-deprecated\n      const originalOnce = request.once;\n\n      const newOnce = new Proxy(originalOnce, {\n        apply(target, thisArg, args: Parameters<typeof originalOnce>) {\n          const [event] = args;\n          if (event !== 'response') {\n            return target.apply(thisArg, args);\n          }\n\n          const parentContext = context.active();\n          const requestContext = trace.setSpan(parentContext, span);\n\n          return context.with(requestContext, () => {\n            return target.apply(thisArg, args);\n          });\n        },\n      });\n\n      // eslint-disable-next-line typescript/no-deprecated\n      request.once = newOnce;\n    },\n    outgoingResponseHook(span, response) {\n      options.outgoingResponseHook?.(span, response);\n    },\n    errorMonitor,\n    // Pass these in to detect OTel double-wrapping if we're enabling spans\n    http,\n  } satisfies HttpInstrumentationOptions;\n\n  if (FULLY_SUPPORTS_HTTP_DIAGNOSTICS_CHANNEL) {\n    instrumentHttpOutgoingRequestsViaChannel(patchOptions);\n  } else {\n    instrumentHttpOutgoingRequestsViaMonkeyPatching(patchOptions);\n  }\n}\n\nlet _currentListener: ChannelListener | undefined;\nfunction instrumentHttpOutgoingRequestsViaChannel(options: HttpInstrumentationOptions): void {\n  const { [HTTP_ON_CLIENT_REQUEST]: onHttpClientRequestCreated } = getHttpClientSubscriptions(options);\n  // If it was previously subscribed, first unsubscribe it\n  // TODO(v11): We can likely remove this when we drop preload support\n  if (_currentListener) {\n    unsubscribe(HTTP_ON_CLIENT_REQUEST, _currentListener);\n  }\n\n  subscribe(HTTP_ON_CLIENT_REQUEST, onHttpClientRequestCreated);\n  _currentListener = onHttpClientRequestCreated;\n}\n\n/**\n * Instrument outgoing HTTP(S) requests by old-school monkey-patching the `http` module.\n * This is the fallback for runtimes that do not fully support the `node:http` client diagnostics channel\n * (Node < 22.12).\n */\nfunction instrumentHttpOutgoingRequestsViaMonkeyPatching(options: HttpInstrumentationOptions): void {\n  // Patching http also patches https, as this uses the same underlying object\n  patchHttpModuleClient(http, options);\n}\n\n/**\n * This custom HTTP instrumentation handles outgoing HTTP requests.\n *\n * It provides:\n * - Breadcrumbs for all outgoing requests\n * - Trace propagation headers (when enabled)\n * - Span creation for outgoing requests (when createSpansForOutgoingRequests is enabled)\n *\n * Span creation requires Node 22+ and uses diagnostic channels to avoid monkey-patching.\n * By default, this is only enabled in the node SDK, not in node-core or other runtime SDKs.\n *\n * Important note: Contrary to other OTEL instrumentation, this one cannot be unwrapped.\n *\n * This is heavily inspired & adapted from:\n * https://github.com/open-telemetry/opentelemetry-js/blob/f8ab5592ddea5cba0a3b33bf8d74f27872c0367f/experimental/packages/opentelemetry-instrumentation-http/src/http.ts\n *\n * @deprecated This will be removed in v11. Use instrumentHttpOutgoingRequests() instead.\n */\nexport class SentryHttpInstrumentation extends InstrumentationBase<SentryHttpInstrumentationOptions> {\n  public constructor(config: SentryHttpInstrumentationOptions = {}) {\n    super(INSTRUMENTATION_NAME, SDK_VERSION, config);\n  }\n\n  /** @inheritdoc */\n  public init(): void {\n    instrumentHttpOutgoingRequests(this.getConfig());\n  }\n}\n", "import type { RequestOptions } from 'node:http';\nimport type { HttpIncomingMessage } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport type { NodeClient } from '../../sdk/client';\nimport type { HttpServerIntegrationOptions } from './httpServerIntegration';\nimport { httpServerIntegration } from './httpServerIntegration';\nimport type { HttpServerSpansIntegrationOptions } from './httpServerSpansIntegration';\nimport { httpServerSpansIntegration } from './httpServerSpansIntegration';\nimport type { SentryHttpInstrumentationOptions } from './SentryHttpInstrumentation';\nimport { instrumentHttpOutgoingRequests } from './SentryHttpInstrumentation';\n\nconst INTEGRATION_NAME = 'Http' as const;\n\ninterface HttpOptions {\n  /**\n   * Whether breadcrumbs should be recorded for outgoing requests.\n   * Defaults to true\n   */\n  breadcrumbs?: boolean;\n\n  /**\n   * Whether to create spans for requests or not.\n   * As of now, creates spans for incoming requests, but not outgoing requests.\n   *\n   * @default `true`\n   */\n  spans?: boolean;\n\n  /**\n   * Whether the integration should create [Sessions](https://docs.sentry.io/product/releases/health/#sessions) for incoming requests to track the health and crash-free rate of your releases in Sentry.\n   * Read more about Release Health: https://docs.sentry.io/product/releases/health/\n   *\n   * Defaults to `true`.\n   */\n  trackIncomingRequestsAsSessions?: boolean;\n\n  /**\n   * Number of milliseconds until sessions tracked with `trackIncomingRequestsAsSessions` will be flushed as a session aggregate.\n   *\n   * Defaults to `60000` (60s).\n   */\n  sessionFlushingDelayMS?: number;\n\n  /**\n   * Whether to inject trace propagation headers (sentry-trace, baggage, traceparent) into outgoing HTTP requests.\n   *\n   * When set to `false`, Sentry will not inject any trace propagation headers, but will still create breadcrumbs\n   * (if `breadcrumbs` is enabled).\n   *\n   * @default `true`\n   */\n  tracePropagation?: boolean;\n\n  /**\n   * Do not capture spans or breadcrumbs for outgoing HTTP requests to URLs where the given callback returns `true`.\n   * This controls both span & breadcrumb creation - spans will be non recording if tracing is disabled.\n   *\n   * The `url` param contains the entire URL, including query string (if any), protocol, host, etc. of the outgoing request.\n   * For example: `'https://someService.com/users/details?id=123'`\n   *\n   * The `request` param contains the original {@type RequestOptions} object used to make the outgoing request.\n   * You can use it to filter on additional properties like method, headers, etc.\n   */\n  ignoreOutgoingRequests?: (url: string, request: RequestOptions) => boolean;\n\n  /**\n   * Do not capture spans for incoming HTTP requests to URLs where the given callback returns `true`.\n   * Spans will be non recording if tracing is disabled.\n   *\n   * The `urlPath` param consists of the URL path and query string (if any) of the incoming request.\n   * For example: `'/users/details?id=123'`\n   *\n   * The `request` param contains the original {@type IncomingMessage} object of the incoming request.\n   * You can use it to filter on additional properties like method, headers, etc.\n   */\n  ignoreIncomingRequests?: (urlPath: string, request: HttpIncomingMessage) => boolean;\n\n  /**\n   * Do not capture spans for incoming HTTP requests with the given status codes.\n   * By default, spans with some 3xx and 4xx status codes are ignored (see @default).\n   * Expects an array of status codes or a range of status codes, e.g. [[300,399], 404] would ignore 3xx and 404 status codes.\n   *\n   * @default `[[401, 404], [301, 303], [305, 399]]`\n   */\n  dropSpansForIncomingRequestStatusCodes?: (number | [number, number])[];\n\n  /**\n   * Do not capture the request body for incoming HTTP requests to URLs where the given callback returns `true`.\n   * This can be useful for long running requests where the body is not needed and we want to avoid capturing it.\n   *\n   * @param url Contains the entire URL, including query string (if any), protocol, host, etc. of the incoming request.\n   * @param request Contains the {@type RequestOptions} object used to make the incoming request.\n   */\n  ignoreIncomingRequestBody?: (url: string, request: RequestOptions) => boolean;\n\n  /**\n   * Whether to automatically ignore common static asset requests like favicon.ico, robots.txt, etc.\n   * This helps reduce noise in your transactions.\n   *\n   * @default `true`\n   */\n  ignoreStaticAssets?: boolean;\n\n  /**\n   * Controls the maximum size of incoming HTTP request bodies attached to events.\n   *\n   * Available options:\n   * - 'none': No request bodies will be attached\n   * - 'small': Request bodies up to 1,000 bytes will be attached\n   * - 'medium': Request bodies up to 10,000 bytes will be attached (default)\n   * - 'always': Request bodies will always be attached\n   *\n   * Note that even with 'always' setting, bodies exceeding 1MB will never be attached\n   * for performance and security reasons.\n   *\n   * @default 'medium'\n   */\n  maxIncomingRequestBodySize?: 'none' | 'small' | 'medium' | 'always';\n\n  /**\n   * If true, do not generate spans for incoming requests at all.\n   * This is used by Remix to avoid generating spans for incoming requests, as it generates its own spans.\n   */\n  disableIncomingRequestSpans?: boolean;\n}\n\nexport const instrumentSentryHttp = Object.assign(instrumentHttpOutgoingRequests, {\n  id: `${INTEGRATION_NAME}.sentry`,\n});\n\n/**\n * The http integration instruments Node's internal http and https modules.\n * It creates breadcrumbs for outgoing HTTP requests which will be attached to the currently active span.\n */\nexport const httpIntegration = defineIntegration((options: HttpOptions = {}) => {\n  // In node-core, for now we disable incoming requests spans by default\n  // we may revisit this in a future release\n  const spans = options.spans ?? false;\n  const disableIncomingRequestSpans = options.disableIncomingRequestSpans ?? false;\n  const enabledServerSpans = spans && !disableIncomingRequestSpans;\n\n  const serverOptions: HttpServerIntegrationOptions = {\n    sessions: options.trackIncomingRequestsAsSessions,\n    sessionFlushingDelayMS: options.sessionFlushingDelayMS,\n    ignoreRequestBody: options.ignoreIncomingRequestBody,\n    maxRequestBodySize: options.maxIncomingRequestBodySize,\n  };\n\n  const serverSpansOptions: HttpServerSpansIntegrationOptions = {\n    ignoreIncomingRequests: options.ignoreIncomingRequests,\n    ignoreStaticAssets: options.ignoreStaticAssets,\n    ignoreStatusCodes: options.dropSpansForIncomingRequestStatusCodes,\n  };\n\n  const httpInstrumentationOptions: SentryHttpInstrumentationOptions = {\n    breadcrumbs: options.breadcrumbs,\n    propagateTraceInOutgoingRequests: options.tracePropagation ?? true,\n    ignoreOutgoingRequests: options.ignoreOutgoingRequests,\n    spans,\n  };\n\n  const server = httpServerIntegration(serverOptions);\n  const serverSpans = httpServerSpansIntegration(serverSpansOptions);\n\n  return {\n    name: INTEGRATION_NAME,\n    setup(client: NodeClient) {\n      if (enabledServerSpans) {\n        serverSpans.setup(client);\n      }\n    },\n    setupOnce() {\n      server.setupOnce();\n\n      instrumentHttpOutgoingRequests(httpInstrumentationOptions);\n    },\n\n    processEvent(event) {\n      // Note: We always run this, even if spans are disabled\n      // The reason being that e.g. the remix integration disables span creation here but still wants to use the ignore status codes option\n      return serverSpans.processEvent(event);\n    },\n  };\n});\n", "import type { LRUMap, SanitizedRequestData, Span } from '@sentry/core';\nimport {\n  filterCollectedUrlQuery,\n  addBreadcrumb,\n  getActiveSpan,\n  getBreadcrumbLogLevelFromHttpStatusCode,\n  getClient,\n  getSanitizedUrlString,\n  getTraceData,\n  parseUrl,\n  shouldPropagateTraceForUrl,\n  mergeBaggageHeaders,\n  spanIsIgnored,\n  withActiveSpan,\n} from '@sentry/core';\nimport type { UndiciRequest, UndiciResponse } from '../integrations/node-fetch/types';\nimport { debug } from '@sentry/core';\nconst SENTRY_TRACE_HEADER = 'sentry-trace';\nconst SENTRY_BAGGAGE_HEADER = 'baggage';\nconst W3C_TRACEPARENT_HEADER = 'traceparent';\n/**\n * Add trace propagation headers to an outgoing fetch/undici request.\n *\n * Checks if the request URL matches trace propagation targets,\n * then injects sentry-trace, traceparent, and baggage headers.\n *\n * When a `span` is passed (the outgoing `http.client` span), its trace data is propagated so downstream\n * services are parented to that span. Without a span, the active scope's trace data is used.\n *\n * Existing trace headers (e.g. set manually by the user via `getTraceData()`) always take precedence and\n * are de-duplicated rather than overwritten, so we never emit two `sentry-trace`/`baggage` entries.\n */\n// eslint-disable-next-line complexity\nexport function addTracePropagationHeadersToFetchRequest(\n  request: UndiciRequest,\n  propagationDecisionMap: LRUMap<string, boolean>,\n  span?: Span,\n): void {\n  const url = getAbsoluteUrl(request.origin, request.path);\n\n  // Manually add the trace headers, if it applies\n  // Note: We do not use `propagation.inject()` here, because our propagator relies on an active span\n  // Which we do not have in this case\n  // The propagator _may_ overwrite this, but this should be fine as it is the same data\n  const { tracePropagationTargets, propagateTraceparent } = getClient()?.getOptions() || {};\n\n  if (!shouldPropagateTraceForUrl(url, tracePropagationTargets, propagationDecisionMap)) {\n    return;\n  }\n\n  // An ignored child must not become the propagation parent because no span will be emitted for it.\n  // Otherwise, make the span active so the propagated headers reference it instead of its parent.\n  const spanForTraceHeaders = span && spanIsIgnored(span) && getActiveSpan() ? undefined : span;\n  const addedHeaders = spanForTraceHeaders\n    ? withActiveSpan(spanForTraceHeaders, () => getTraceData({ propagateTraceparent }))\n    : getTraceData({ propagateTraceparent });\n\n  if (!addedHeaders) {\n    return;\n  }\n\n  const { 'sentry-trace': sentryTrace, baggage, traceparent } = addedHeaders;\n\n  // Undici can expose headers either as a raw string (v5-style) or as a flat array of pairs (v6-style).\n  // In the array form, even indices are header names and odd indices are values; in undici v6 a value\n  // may be `string | string[]` when a header has multiple values. The helpers below (_deduplicateArrayHeader,\n  // push, etc.) expect each value slot to be a single string, so we normalize array headers first.\n  const requestHeaders: string[] = Array.isArray(request.headers)\n    ? normalizeUndiciHeaderPairs(request.headers)\n    : stringToArrayHeaders(request.headers);\n\n  // OTel's UndiciInstrumentation calls propagation.inject() which unconditionally\n  // appends headers to the request. When the user also sets headers via getTraceData(),\n  // this results in duplicate sentry-trace and baggage (and optionally traceparent) entries.\n  // We clean these up before applying our own logic.\n  _deduplicateArrayHeader(requestHeaders, SENTRY_TRACE_HEADER);\n  _deduplicateArrayHeader(requestHeaders, SENTRY_BAGGAGE_HEADER);\n  if (propagateTraceparent) {\n    _deduplicateArrayHeader(requestHeaders, W3C_TRACEPARENT_HEADER);\n  }\n\n  // We do not want to overwrite existing headers here\n  // If the core UndiciInstrumentation is registered, it will already have set the headers\n  // We do not want to add any then\n  const hasExistingSentryTraceHeader = _findExistingHeaderIndex(requestHeaders, SENTRY_TRACE_HEADER) !== -1;\n\n  // We do not want to set any headers if we already have an existing sentry-trace header.\n  // sentry-trace is still the source of truth, otherwise we risk mixing up baggage and sentry-trace values.\n  if (!hasExistingSentryTraceHeader) {\n    if (sentryTrace) {\n      requestHeaders.push(SENTRY_TRACE_HEADER, sentryTrace);\n    }\n\n    if (traceparent && _findExistingHeaderIndex(requestHeaders, 'traceparent') === -1) {\n      requestHeaders.push('traceparent', traceparent);\n    }\n\n    // For baggage, we make sure to merge this into a possibly existing header\n    const existingBaggageIndex = _findExistingHeaderIndex(requestHeaders, SENTRY_BAGGAGE_HEADER);\n    if (baggage && existingBaggageIndex === -1) {\n      requestHeaders.push(SENTRY_BAGGAGE_HEADER, baggage);\n    } else if (baggage) {\n      // headers in format [key_0, value_0, key_1, value_1, ...], hence the +1 here\n      const existingBaggageValue = requestHeaders[existingBaggageIndex + 1];\n      const merged = mergeBaggageHeaders(existingBaggageValue, baggage);\n      if (merged) {\n        requestHeaders[existingBaggageIndex + 1] = merged;\n      }\n    }\n  }\n\n  if (Array.isArray(request.headers)) {\n    // Replace contents in place so we keep the same array reference undici/fetch still holds.\n    // `requestHeaders` is already normalized (string pairs only); splice writes them back.\n    request.headers.splice(0, request.headers.length, ...requestHeaders);\n  } else {\n    request.headers = arrayToStringHeaders(requestHeaders);\n  }\n}\n\n/**\n * Convert undici’s header array into `[name, value, name, value, ...]` where every value is a string.\n *\n * Undici v6 uses this shape: `[k1, v1, k2, v2, ...]`. Types allow each `v` to be `string | string[]` when\n * that header has multiple values. Sentry’s dedupe/merge helpers expect one string per value slot, so\n * multi-value arrays are joined with `', '`. Missing value slots become `''`.\n */\nfunction normalizeUndiciHeaderPairs(headers: (string | string[])[]): string[] {\n  const out: string[] = [];\n  for (let i = 0; i < headers.length; i++) {\n    const entry = headers[i];\n    if (i % 2 === 0) {\n      // Header name (should always be a string; coerce defensively).\n      out.push(typeof entry === 'string' ? entry : String(entry));\n    } else {\n      // Header value: flatten `string[]` to a single string for downstream string-only helpers.\n      out.push(Array.isArray(entry) ? entry.join(', ') : (entry ?? ''));\n    }\n  }\n  return out;\n}\n\nfunction stringToArrayHeaders(requestHeaders: string): string[] {\n  const headersArray = requestHeaders.split('\\r\\n');\n  const headers: string[] = [];\n  for (const header of headersArray) {\n    try {\n      const colonIndex = header.indexOf(':');\n      if (colonIndex === -1) {\n        continue;\n      }\n      const key = header.slice(0, colonIndex).trim();\n      const value = header.slice(colonIndex + 1).trim();\n      if (key) {\n        headers.push(key, value);\n      }\n    } catch {\n      debug.warn(`Failed to convert string request header to array header: ${header}`);\n    }\n  }\n  return headers;\n}\n\nfunction arrayToStringHeaders(headers: string[]): string {\n  const headerPairs: string[] = [];\n\n  for (let i = 0; i < headers.length; i += 2) {\n    const key = headers[i];\n    const value = headers[i + 1];\n    if (!key || value == null) {\n      // skip falsy keys but only null/undefined values\n      continue;\n    }\n    headerPairs.push(`${key}: ${value}`);\n  }\n\n  if (!headerPairs.length) {\n    return '';\n  }\n\n  return headerPairs.join('\\r\\n').concat('\\r\\n');\n}\n\n/**\n * For a given header name, if there are multiple entries in the [key, value, key, value, ...] array,\n * keep the first entry and remove the rest.\n * For baggage, values are merged to preserve all entries but to dedupe sentry- values, and always\n * keep the first occurrence of them\n */\nfunction _deduplicateArrayHeader(headers: string[], headerName: string): void {\n  let firstIndex = -1;\n  for (let i = 0; i < headers.length; i += 2) {\n    if (headers[i] !== headerName) {\n      continue;\n    }\n\n    if (firstIndex === -1) {\n      firstIndex = i;\n      continue;\n    }\n\n    const firstHeaderValue = headers[firstIndex + 1];\n    if (headerName === SENTRY_BAGGAGE_HEADER && firstHeaderValue) {\n      // mergeBaggageHeaders always takes sentry- values from the new baggage (2nd param) and merges\n      // it with the existing one (1st param). Here, we want to keep the first header's existing\n      // sentry- values in favor of the new ones. Hence we swap the parameters.\n      const merged = mergeBaggageHeaders(headers[i + 1], firstHeaderValue);\n      if (merged) {\n        headers[firstIndex + 1] = merged;\n      }\n    }\n    headers.splice(i, 2);\n    i -= 2;\n  }\n}\n\n/**\n * Find the index of an existing header in an array of headers.\n * Only take even indices, because headers are in format [key_0, value_0, key_1, value_1, ...]\n * otherwise we could match a header _value_ with @param name\n */\nfunction _findExistingHeaderIndex(headers: string[], name: string): number {\n  return headers.findIndex((header, i) => i % 2 === 0 && header === name);\n}\n\n/** Add a breadcrumb for an outgoing fetch/undici request. */\nexport function addFetchRequestBreadcrumb(request: UndiciRequest, response: UndiciResponse): void {\n  const data = getBreadcrumbData(request);\n\n  const statusCode = response.statusCode;\n  const level = getBreadcrumbLogLevelFromHttpStatusCode(statusCode);\n\n  addBreadcrumb(\n    {\n      category: 'http',\n      data: {\n        status_code: statusCode,\n        ...data,\n      },\n      type: 'http',\n      level,\n    },\n    {\n      event: 'response',\n      request,\n      response,\n    },\n  );\n}\n\nfunction getBreadcrumbData(request: UndiciRequest): Partial<SanitizedRequestData> {\n  try {\n    const url = getAbsoluteUrl(request.origin, request.path);\n    const parsedUrl = parseUrl(url);\n\n    const data: Partial<SanitizedRequestData> = {\n      url: getSanitizedUrlString(parsedUrl),\n      'http.method': request.method || 'GET',\n    };\n\n    if (parsedUrl.search) {\n      data['http.query'] = filterCollectedUrlQuery(parsedUrl.search);\n    }\n    if (parsedUrl.hash) {\n      data['http.fragment'] = parsedUrl.hash;\n    }\n\n    return data;\n  } catch {\n    return {};\n  }\n}\n\n/** Get the absolute URL from an origin and path. */\nexport function getAbsoluteUrl(origin: string, path: string = '/'): string {\n  try {\n    const url = new URL(path, origin);\n    return url.toString();\n  } catch {\n    // fallback: Construct it on our own\n    const url = `${origin}`;\n\n    if (url.endsWith('/') && path.startsWith('/')) {\n      return `${url}${path.slice(1)}`;\n    }\n\n    if (!url.endsWith('/') && !path.startsWith('/')) {\n      return `${url}/${path}`;\n    }\n\n    return `${url}${path}`;\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/ed97091c9890dd18e52759f2ea98e9d7593b3ae4/packages/instrumentation-undici\n * - Upstream version: @opentelemetry/instrumentation-undici@0.24.0\n * - Tracking issue: https://github.com/getsentry/sentry-javascript/issues/20165\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n * - Dropped the OTel metrics (no MeterProvider is wired up) and the dead\n *   `requireParentforSpans` code path (the SDK always passes `false`)\n * - Dropped the `@opentelemetry/instrumentation` base (undici reports via `diagnostics_channel`,\n *   so no module patching was needed) — exposed as a plain `instrumentUndici()` function that the\n *   integration wires up directly\n */\n\n/* eslint-disable max-lines */\n\nimport * as diagch from 'diagnostics_channel';\nimport { URL } from 'url';\n\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport {\n  debug,\n  getClient,\n  getSpanStatusFromHttpCode,\n  hasSpanStreamingEnabled,\n  isTracingSuppressed,\n  LRUMap,\n  SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SPAN_KIND,\n  SPAN_STATUS_ERROR,\n  startInactiveSpan,\n  stripDataUrlContent,\n  filterCollectedUrl,\n  filterCollectedUrlQuery,\n} from '@sentry/core';\nimport { addFetchRequestBreadcrumb, addTracePropagationHeadersToFetchRequest } from '../../utils/outgoingFetchRequest';\nimport {\n  HTTP_REQUEST_METHOD,\n  HTTP_RESPONSE_STATUS_CODE,\n  NETWORK_PEER_ADDRESS,\n  NETWORK_PEER_PORT,\n  SERVER_ADDRESS,\n  SERVER_PORT,\n  URL_FULL,\n  URL_PATH,\n  URL_QUERY,\n  URL_SCHEME,\n  USER_AGENT_ORIGINAL,\n} from '@sentry/conventions/attributes';\nimport { DEBUG_BUILD } from '../../debug-build';\nimport type {\n  NodeFetchOptions,\n  UndiciRequest,\n  RequestErrorMessage,\n  RequestHeadersMessage,\n  RequestMessage,\n  RequestTrailersMessage,\n  ResponseHeadersMessage,\n} from './types';\n\n// `http.request.method_original` is not part of `@sentry/conventions`, so we keep it inline.\nconst ATTR_HTTP_REQUEST_METHOD_ORIGINAL = 'http.request.method_original';\n\n// Keep ref to avoid https://github.com/nodejs/node/issues/42170 bug\n// We can replace this with _isInstrumented once we drop support for Node.js 18.18.0\nconst _channelSubs: Array<unknown> = [];\nconst spanFromReq = new WeakMap<UndiciRequest, Span>();\n// Whether breadcrumbs (and span-less trace propagation) should be skipped for a given request.\n// We evaluate this at request-creation time because the active context is no longer correct by the\n// time the response-headers event fires.\nconst ignoreRequestMap = new WeakMap<UndiciRequest, boolean>();\n// Caches trace-propagation decisions per URL so we don't recompute the `tracePropagationTargets` regexes per request.\nconst propagationDecisionMap = new LRUMap<string, boolean>(100);\n\n/**\n * Instrument outgoing HTTP requests made through `undici` or the global `fetch` API: emit `http.client`\n * spans, record breadcrumbs, and propagate traces into the outgoing request headers.\n *\n * Span creation is gated by the `spans` option (defaults to `true`). When spans are disabled, breadcrumbs\n * are still recorded and trace propagation headers are still injected (gated by `tracePropagation`).\n *\n * undici reports its request lifecycle via `diagnostics_channel`, so rather than patching any module we\n * subscribe to those channels directly. This is idempotent — subsequent calls are no-ops once the\n * channels have been subscribed to, and the config of the first call wins.\n *\n * A combination of https://github.com/elastic/apm-agent-nodejs and\n * https://github.com/gadget-inc/opentelemetry-instrumentations/blob/main/packages/opentelemetry-instrumentation-undici/src/index.ts\n */\nexport function instrumentUndici(config: NodeFetchOptions = {}): void {\n  // Avoid duplicate subscriptions\n  if (_channelSubs.length) {\n    return;\n  }\n\n  subscribeToChannel('undici:request:create', message => onRequestCreated(config, message as RequestMessage));\n  subscribeToChannel('undici:client:sendHeaders', message =>\n    onRequestHeaders(config, message as RequestHeadersMessage),\n  );\n  subscribeToChannel('undici:request:headers', message => onResponseHeaders(config, message as ResponseHeadersMessage));\n  subscribeToChannel('undici:request:trailers', message => onDone(message as RequestTrailersMessage));\n  subscribeToChannel('undici:request:error', message => onError(message as RequestErrorMessage));\n}\n\n/** Replaces OTel's `safeExecuteInTheMiddle`: run `fn`, route any error to `onError`, and swallow it. */\nfunction safeExecute<T>(fn: () => T, onError: (error: unknown) => void): T | undefined {\n  try {\n    return fn();\n  } catch (error) {\n    onError(error);\n    return undefined;\n  }\n}\n\nfunction subscribeToChannel(\n  diagnosticChannel: string,\n  onMessage: (message: unknown, name: string | symbol) => void,\n): void {\n  // `diagnostics_channel` had a ref counting bug until v18.19.0.\n  // https://github.com/nodejs/node/pull/47520\n  const [major = 0, minor = 0] = process.version\n    .replace('v', '')\n    .split('.')\n    .map(n => Number(n));\n  const useNewSubscribe = major > 18 || (major === 18 && minor >= 19);\n\n  if (useNewSubscribe) {\n    _channelSubs.push(diagch.subscribe?.(diagnosticChannel, onMessage));\n  } else {\n    _channelSubs.push(diagch.channel(diagnosticChannel).subscribe(onMessage));\n  }\n}\n\nfunction parseRequestHeaders(request: UndiciRequest): Map<string, string | string[]> {\n  const result = new Map<string, string | string[]>();\n\n  if (Array.isArray(request.headers)) {\n    // headers are an array [k1, v2, k2, v2] (undici v6+)\n    // values could be string or a string[] for multiple values\n    for (let i = 0; i < request.headers.length; i += 2) {\n      const key = request.headers[i];\n      const value = request.headers[i + 1];\n\n      // Key should always be a string, but the types don't know that, and let's be safe\n      if (typeof key === 'string' && value !== undefined) {\n        result.set(key.toLowerCase(), value);\n      }\n    }\n  } else if (typeof request.headers === 'string') {\n    // headers are a raw string (undici v5)\n    // headers could be repeated in several lines for multiple values\n    const headers = request.headers.split('\\r\\n');\n    for (const line of headers) {\n      if (!line) {\n        continue;\n      }\n      const colonIndex = line.indexOf(':');\n      if (colonIndex === -1) {\n        // Invalid header? Probably this can't happen, but again let's be safe.\n        continue;\n      }\n      const key = line.substring(0, colonIndex).toLowerCase();\n      const value = line.substring(colonIndex + 1).trim();\n      const allValues = result.get(key);\n\n      if (allValues && Array.isArray(allValues)) {\n        allValues.push(value);\n      } else if (allValues) {\n        result.set(key, [allValues, value]);\n      } else {\n        result.set(key, value);\n      }\n    }\n  }\n  return result;\n}\n\n// This is the 1st message we receive for each request (fired after request creation). Here we will\n// create the span and populate some atttributes, then link the span to the request for further\n// span processing\nfunction onRequestCreated(config: NodeFetchOptions, { request }: RequestMessage): void {\n  const url = getAbsoluteUrl(request.origin, request.path);\n\n  const ignoredByCallback = safeExecute(\n    () => !!config.ignoreOutgoingRequests?.(url),\n    e => e && DEBUG_BUILD && debug.error('caught ignoreOutgoingRequests error: ', e),\n  );\n\n  // Breadcrumbs & span-less trace propagation are additionally skipped when tracing is suppressed.\n  // We store this here because the active context is no longer correct in later channel events.\n  const ignoreForBreadcrumbs = isTracingSuppressed() || !!ignoredByCallback;\n  ignoreRequestMap.set(request, ignoreForBreadcrumbs);\n\n  // When spans are disabled we do not create a span, but we still inject trace propagation headers\n  // directly (unless disabled via `tracePropagation`).\n  if (!config.spans) {\n    if (config.tracePropagation !== false && !ignoreForBreadcrumbs) {\n      addTracePropagationHeadersToFetchRequest(request, propagationDecisionMap);\n    }\n    return;\n  }\n\n  // Ignore span creation if:\n  // - the outgoing request is ignored via config\n  // - method is 'CONNECT'\n  if (request.method === 'CONNECT' || ignoredByCallback) {\n    return;\n  }\n\n  let requestUrl;\n  try {\n    requestUrl = new URL(request.path, request.origin);\n  } catch (err) {\n    DEBUG_BUILD && debug.warn('could not determine url.full:', err);\n    // Skip instrumenting this request.\n    return;\n  }\n  const urlScheme = requestUrl.protocol.replace(':', '');\n  const requestMethod = getRequestMethod(request.method);\n  const attributes: SpanAttributes = {\n    [HTTP_REQUEST_METHOD]: requestMethod,\n    [ATTR_HTTP_REQUEST_METHOD_ORIGINAL]: request.method,\n    [URL_FULL]: filterCollectedUrl(requestUrl.toString()),\n    [URL_PATH]: requestUrl.pathname,\n    [URL_QUERY]: filterCollectedUrlQuery(requestUrl.search),\n    [URL_SCHEME]: urlScheme,\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.otel.node_fetch',\n  };\n\n  // Sanitize data URLs to prevent long base64 strings in span attributes\n  if (url.startsWith('data:')) {\n    const sanitizedUrl = stripDataUrlContent(url);\n    attributes['http.url'] = sanitizedUrl;\n    attributes[URL_FULL] = sanitizedUrl;\n    attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME] = `${request.method || 'GET'} ${sanitizedUrl}`;\n  }\n\n  const schemePorts: Record<string, string> = { https: '443', http: '80' };\n  const serverAddress = requestUrl.hostname;\n  const serverPort = requestUrl.port || schemePorts[urlScheme];\n\n  attributes[SERVER_ADDRESS] = serverAddress;\n  if (serverPort && !isNaN(Number(serverPort))) {\n    attributes[SERVER_PORT] = Number(serverPort);\n  }\n\n  // Get user agent from headers\n  const headersMap = parseRequestHeaders(request);\n  const userAgentValues = headersMap.get('user-agent');\n\n  if (userAgentValues) {\n    // NOTE: having multiple user agents is not expected so\n    // we're going to take last one like `curl` does\n    // ref: https://curl.se/docs/manpage.html#-A\n    const userAgent = Array.isArray(userAgentValues) ? userAgentValues[userAgentValues.length - 1] : userAgentValues;\n    attributes[USER_AGENT_ORIGINAL] = userAgent;\n  }\n\n  // Outside of span streaming, only record an `http.client` span when it has a parent. An orphan\n  // one (no local parent) is left to the server for the downstream sampling decision: `onlyIfParent`\n  // still creates a non-recording span so trace propagation headers are injected, but it isn't\n  // emitted as a standalone transaction. This rule also lives in `SentrySampler`, but that only runs\n  // when an OpenTelemetry SDK tracer provider is set up, so we enforce it here too, which covers\n  // SDKs that don't use an OpenTelemetry tracer provider at all.\n  const client = getClient();\n  const span = startInactiveSpan({\n    name: requestMethod === '_OTHER' ? 'HTTP' : requestMethod,\n    kind: SPAN_KIND.CLIENT,\n    attributes,\n    onlyIfParent: !client || !hasSpanStreamingEnabled(client),\n  });\n\n  // Execute the request hook if defined\n  safeExecute(\n    () => config.requestHook?.(span, request),\n    e => e && DEBUG_BUILD && debug.error('caught requestHook error: ', e),\n  );\n\n  // Context propagation goes last so no hook can tamper the propagation headers.\n  // We propagate the trace data of the freshly created client span (not the active parent span)\n  // so downstream services are parented to the http.client span, matching the upstream behavior.\n  // This also de-duplicates against any trace headers the user set manually (e.g. via `getTraceData()`).\n  addTracePropagationHeadersToFetchRequest(request, propagationDecisionMap, span);\n\n  spanFromReq.set(request, span);\n}\n\n// This is the 2nd message we receive for each request. It is fired when connection with\n// the remote is established and about to send the first byte. Here we do have info about the\n// remote address and port so we can populate some `network.*` attributes into the span\nfunction onRequestHeaders(config: NodeFetchOptions, { request, socket }: RequestHeadersMessage): void {\n  const span = spanFromReq.get(request);\n\n  if (!span) {\n    return;\n  }\n\n  const { remoteAddress, remotePort } = socket;\n  const spanAttributes: SpanAttributes = {\n    [NETWORK_PEER_ADDRESS]: remoteAddress,\n    [NETWORK_PEER_PORT]: remotePort,\n  };\n\n  // After hooks have been processed (which may modify request headers)\n  // we can collect the headers based on the configuration\n  if (config.headersToSpanAttributes?.requestHeaders) {\n    const headersToAttribs = new Set(config.headersToSpanAttributes.requestHeaders.map(n => n.toLowerCase()));\n    const headersMap = parseRequestHeaders(request);\n\n    for (const [name, value] of headersMap.entries()) {\n      if (headersToAttribs.has(name)) {\n        const attrValue = Array.isArray(value) ? value : [value];\n        spanAttributes[`http.request.header.${name}`] = attrValue;\n      }\n    }\n  }\n\n  span.setAttributes(spanAttributes);\n}\n\n// This is the 3rd message we get for each request and it's fired when the server\n// headers are received, body may not be accessible yet.\n// From the response headers we can set the status and content length\nfunction onResponseHeaders(config: NodeFetchOptions, { request, response }: ResponseHeadersMessage): void {\n  // Breadcrumbs are recorded independently of spans, so this runs even when span creation is disabled.\n  const breadcrumbsEnabled = config.breadcrumbs !== false;\n  if (breadcrumbsEnabled && !ignoreRequestMap.get(request)) {\n    addFetchRequestBreadcrumb(request, response);\n  }\n\n  const span = spanFromReq.get(request);\n\n  if (!span) {\n    return;\n  }\n\n  const spanAttributes: SpanAttributes = {\n    [HTTP_RESPONSE_STATUS_CODE]: response.statusCode,\n  };\n\n  // Execute the response hook if defined\n  safeExecute(\n    () => config.responseHook?.(span, { request, response }),\n    e => e && DEBUG_BUILD && debug.error('caught responseHook error: ', e),\n  );\n\n  if (config.headersToSpanAttributes?.responseHeaders) {\n    const headersToAttribs = new Set<string>();\n    config.headersToSpanAttributes?.responseHeaders.forEach(name => headersToAttribs.add(name.toLowerCase()));\n\n    for (let idx = 0; idx < response.headers.length; idx = idx + 2) {\n      const nameBuf = response.headers[idx];\n      const valueBuf = response.headers[idx + 1];\n      if (nameBuf === undefined || valueBuf === undefined) {\n        continue;\n      }\n      const name = nameBuf.toString().toLowerCase();\n      const value = valueBuf;\n\n      if (headersToAttribs.has(name)) {\n        const attrName = `http.response.header.${name}`;\n        if (!Object.prototype.hasOwnProperty.call(spanAttributes, attrName)) {\n          spanAttributes[attrName] = [value.toString()];\n        } else {\n          (spanAttributes[attrName] as string[]).push(value.toString());\n        }\n      }\n    }\n  }\n\n  span.setAttributes(spanAttributes);\n\n  // Resolve the HTTP status code to a Sentry span status here (like the raw http client/server\n  // instrumentation does) instead of setting a bare error and deferring to downstream inference.\n  // The SentryTracerProvider's status finalization reads the already-stringified span status, which\n  // can no longer be inferred back to `not_found` etc. the way the OpenTelemetry SDK exporter's\n  // `mapStatus` does from the raw `{ code, message }`.\n  if (response.statusCode >= 400) {\n    span.setStatus(getSpanStatusFromHttpCode(response.statusCode));\n  }\n}\n\n// This is the last event we receive if the request went without any errors\nfunction onDone({ request }: RequestTrailersMessage): void {\n  const span = spanFromReq.get(request);\n\n  if (!span) {\n    return;\n  }\n\n  span.end();\n  spanFromReq.delete(request);\n}\n\n// This is the event we get when something is wrong in the request like\n// - invalid options when calling `fetch` global API or any undici method for request\n// - connectivity errors such as unreachable host\n// - requests aborted through an `AbortController.signal`\n// NOTE: server errors are considered valid responses and it's the lib consumer\n// who should deal with that.\nfunction onError({ request, error }: RequestErrorMessage): void {\n  const span = spanFromReq.get(request);\n\n  if (!span) {\n    return;\n  }\n\n  // NOTE: in `undici@6.3.0` when request aborted the error type changes from\n  // a custom error (`RequestAbortedError`) to a built-in `DOMException` carrying\n  // some differences:\n  // - `code` is from DOMEXception (ABORT_ERR: 20)\n  // - `message` changes\n  // - stacktrace is smaller and contains node internal frames\n  span.setStatus({\n    code: SPAN_STATUS_ERROR,\n    message: error.message,\n  });\n  span.end();\n  spanFromReq.delete(request);\n}\n\nfunction getRequestMethod(original: string): string {\n  const knownMethods = {\n    CONNECT: true,\n    OPTIONS: true,\n    HEAD: true,\n    GET: true,\n    POST: true,\n    PUT: true,\n    PATCH: true,\n    DELETE: true,\n    TRACE: true,\n    // QUERY from https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/\n    QUERY: true,\n  };\n\n  if (original.toUpperCase() in knownMethods) {\n    return original.toUpperCase();\n  }\n\n  return '_OTHER';\n}\n\n// Matching the behavior of the base instrumentation\nfunction getAbsoluteUrl(origin: string, path: string = '/'): string {\n  const url = `${origin}`;\n\n  if (url.endsWith('/') && path.startsWith('/')) {\n    return `${url}${path.slice(1)}`;\n  }\n\n  if (!url.endsWith('/') && !path.startsWith('/')) {\n    return `${url}/${path}`;\n  }\n\n  return `${url}${path}`;\n}\n", "import type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport type { NodeFetchOptions } from './types';\nimport { instrumentUndici } from './undici-instrumentation';\n\nconst _nativeNodeFetchIntegration = ((options: NodeFetchOptions = {}) => {\n  return {\n    name: 'NodeFetch' as const,\n    setupOnce() {\n      instrumentUndici(options);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Instrument outgoing fetch requests made through the native node `fetch` API.\n * This emits (depending on the integration options) spans and breadcrumbs, as well as injecting trace propagation headers into the request.\n */\nexport const nativeNodeFetchIntegration = defineIntegration(_nativeNodeFetchIntegration);\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nlet serviceName: string | undefined;\n\n/**\n * Returns the default service name for OpenTelemetry resources.\n * In Node.js environments, returns \"unknown_service:<process.argv0>\".\n * In browser/edge environments, returns \"unknown_service\".\n */\nexport function defaultServiceName(): string {\n  if (serviceName === undefined) {\n    try {\n      const argv0 = globalThis.process.argv0;\n      serviceName = argv0 ? `unknown_service:${argv0}` : 'unknown_service';\n    } catch {\n      serviceName = 'unknown_service';\n    }\n  }\n  return serviceName;\n}\n\n/** @internal For testing purposes only */\nexport function _clearDefaultServiceNameCache(): void {\n  serviceName = undefined;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const isPromiseLike = <R>(val: unknown): val is PromiseLike<R> => {\n  return (\n    val !== null &&\n    typeof val === 'object' &&\n    typeof (val as Partial<PromiseLike<R>>).then === 'function'\n  );\n};\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Attributes, AttributeValue } from '@opentelemetry/api';\nimport { diag } from '@opentelemetry/api';\nimport { SDK_INFO } from '@opentelemetry/core';\nimport {\n  ATTR_SERVICE_NAME,\n  ATTR_TELEMETRY_SDK_LANGUAGE,\n  ATTR_TELEMETRY_SDK_NAME,\n  ATTR_TELEMETRY_SDK_VERSION,\n} from '@opentelemetry/semantic-conventions';\nimport type { Resource } from './Resource';\nimport { defaultServiceName } from './default-service-name';\nimport type {\n  DetectedResource,\n  DetectedResourceAttributes,\n  MaybePromise,\n  RawResourceAttribute,\n  ResourceOptions,\n} from './types';\nimport { isPromiseLike } from './utils';\n\nclass ResourceImpl implements Resource {\n  private _rawAttributes: RawResourceAttribute[];\n  private _asyncAttributesPending = false;\n  private _schemaUrl?: string;\n\n  private _memoizedAttributes?: Attributes;\n\n  static FromAttributeList(\n    attributes: [string, MaybePromise<AttributeValue | undefined>][],\n    options?: ResourceOptions\n  ): Resource {\n    const res = new ResourceImpl({}, options);\n    res._rawAttributes = guardedRawAttributes(attributes);\n    res._asyncAttributesPending =\n      attributes.filter(([_, val]) => isPromiseLike(val)).length > 0;\n    return res;\n  }\n\n  constructor(\n    /**\n     * A dictionary of attributes with string keys and values that provide\n     * information about the entity as numbers, strings or booleans\n     * TODO: Consider to add check/validation on attributes.\n     */\n    resource: DetectedResource,\n    options?: ResourceOptions\n  ) {\n    const attributes = resource.attributes ?? {};\n    this._rawAttributes = Object.entries(attributes).map(([k, v]) => {\n      if (isPromiseLike(v)) {\n        // side-effect\n        this._asyncAttributesPending = true;\n      }\n\n      return [k, v];\n    });\n\n    this._rawAttributes = guardedRawAttributes(this._rawAttributes);\n    this._schemaUrl = validateSchemaUrl(options?.schemaUrl);\n  }\n\n  public get asyncAttributesPending(): boolean {\n    return this._asyncAttributesPending;\n  }\n\n  public async waitForAsyncAttributes(): Promise<void> {\n    if (!this.asyncAttributesPending) {\n      return;\n    }\n\n    for (let i = 0; i < this._rawAttributes.length; i++) {\n      const [k, v] = this._rawAttributes[i];\n      this._rawAttributes[i] = [k, isPromiseLike(v) ? await v : v];\n    }\n\n    this._asyncAttributesPending = false;\n  }\n\n  public get attributes(): Attributes {\n    if (this.asyncAttributesPending) {\n      diag.error(\n        'Accessing resource attributes before async attributes settled'\n      );\n    }\n\n    if (this._memoizedAttributes) {\n      return this._memoizedAttributes;\n    }\n\n    const attrs: Attributes = {};\n    for (const [k, v] of this._rawAttributes) {\n      if (isPromiseLike(v)) {\n        diag.debug(`Unsettled resource attribute ${k} skipped`);\n        continue;\n      }\n      if (v != null) {\n        attrs[k] ??= v;\n      }\n    }\n\n    // only memoize output if all attributes are settled\n    if (!this._asyncAttributesPending) {\n      this._memoizedAttributes = attrs;\n    }\n\n    return attrs;\n  }\n\n  public getRawAttributes(): RawResourceAttribute[] {\n    return this._rawAttributes;\n  }\n\n  public get schemaUrl(): string | undefined {\n    return this._schemaUrl;\n  }\n\n  public merge(resource: Resource | null): Resource {\n    if (resource == null) return this;\n\n    // Order is important\n    // Spec states incoming attributes override existing attributes\n    const mergedSchemaUrl = mergeSchemaUrl(this, resource);\n    const mergedOptions: ResourceOptions | undefined = mergedSchemaUrl\n      ? { schemaUrl: mergedSchemaUrl }\n      : undefined;\n\n    return ResourceImpl.FromAttributeList(\n      [...resource.getRawAttributes(), ...this.getRawAttributes()],\n      mergedOptions\n    );\n  }\n}\n\nexport function resourceFromAttributes(\n  attributes: DetectedResourceAttributes,\n  options?: ResourceOptions\n): Resource {\n  return ResourceImpl.FromAttributeList(Object.entries(attributes), options);\n}\n\nexport function resourceFromDetectedResource(\n  detectedResource: DetectedResource,\n  options?: ResourceOptions\n): Resource {\n  return new ResourceImpl(detectedResource, options);\n}\n\nexport function emptyResource(): Resource {\n  return resourceFromAttributes({});\n}\n\nexport function defaultResource(): Resource {\n  return resourceFromAttributes({\n    [ATTR_SERVICE_NAME]: defaultServiceName(),\n    [ATTR_TELEMETRY_SDK_LANGUAGE]: SDK_INFO[ATTR_TELEMETRY_SDK_LANGUAGE],\n    [ATTR_TELEMETRY_SDK_NAME]: SDK_INFO[ATTR_TELEMETRY_SDK_NAME],\n    [ATTR_TELEMETRY_SDK_VERSION]: SDK_INFO[ATTR_TELEMETRY_SDK_VERSION],\n  });\n}\n\nfunction guardedRawAttributes(\n  attributes: RawResourceAttribute[]\n): RawResourceAttribute[] {\n  return attributes.map(([k, v]) => {\n    if (isPromiseLike(v)) {\n      return [\n        k,\n        v.catch(err => {\n          diag.debug(\n            'promise rejection for resource attribute: %s - %s',\n            k,\n            err\n          );\n          return undefined;\n        }),\n      ];\n    }\n    return [k, v];\n  });\n}\n\nfunction validateSchemaUrl(schemaUrl?: string): string | undefined {\n  if (typeof schemaUrl === 'string' || schemaUrl === undefined) {\n    return schemaUrl;\n  }\n\n  diag.warn(\n    'Schema URL must be string or undefined, got %s. Schema URL will be ignored.',\n    schemaUrl\n  );\n\n  return undefined;\n}\n\nfunction mergeSchemaUrl(\n  old: Resource,\n  updating: Resource | null\n): string | undefined {\n  const oldSchemaUrl = old?.schemaUrl;\n  const updatingSchemaUrl = updating?.schemaUrl;\n\n  const isOldEmpty = oldSchemaUrl === undefined || oldSchemaUrl === '';\n  const isUpdatingEmpty =\n    updatingSchemaUrl === undefined || updatingSchemaUrl === '';\n\n  if (isOldEmpty) {\n    return updatingSchemaUrl;\n  }\n\n  if (isUpdatingEmpty) {\n    return oldSchemaUrl;\n  }\n\n  if (oldSchemaUrl === updatingSchemaUrl) {\n    return oldSchemaUrl;\n  }\n\n  diag.warn(\n    'Schema URL merge conflict: old resource has \"%s\", updating resource has \"%s\". Resulting resource will have undefined Schema URL.',\n    oldSchemaUrl,\n    updatingSchemaUrl\n  );\n\n  return undefined;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { diag } from '@opentelemetry/api';\nimport type { Resource } from './Resource';\nimport { emptyResource, resourceFromDetectedResource } from './ResourceImpl';\nimport type { ResourceDetectionConfig } from './config';\n\n/**\n * Runs all resource detectors and returns the results merged into a single Resource.\n *\n * @param config Configuration for resource detection\n */\nexport const detectResources = (\n  config: ResourceDetectionConfig = {}\n): Resource => {\n  const resources: Resource[] = (config.detectors || []).map(d => {\n    try {\n      const resource = resourceFromDetectedResource(d.detect(config));\n      diag.debug(`${d.constructor.name} found resource.`, resource);\n      return resource;\n    } catch (e) {\n      diag.debug(`${d.constructor.name} failed: ${e.message}`);\n      return emptyResource();\n    }\n  });\n\n  return resources.reduce(\n    (acc, resource) => acc.merge(resource),\n    emptyResource()\n  );\n};\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Attributes } from '@opentelemetry/api';\nimport { diag } from '@opentelemetry/api';\nimport { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions';\nimport type { ResourceDetectionConfig } from '../config';\nimport type { DetectedResource, ResourceDetector } from '../types';\nimport { getStringFromEnv } from '@opentelemetry/core';\n\n/**\n * EnvDetector can be used to detect the presence of and create a Resource\n * from the OTEL_RESOURCE_ATTRIBUTES environment variable.\n */\nclass EnvDetector implements ResourceDetector {\n  // Type, attribute keys, and attribute values should not exceed 256 characters.\n  private readonly _MAX_LENGTH = 255;\n\n  // OTEL_RESOURCE_ATTRIBUTES is a comma-separated list of attributes.\n  private readonly _COMMA_SEPARATOR = ',';\n\n  // OTEL_RESOURCE_ATTRIBUTES contains key value pair separated by '='.\n  private readonly _LABEL_KEY_VALUE_SPLITTER = '=';\n\n  /**\n   * Returns a {@link Resource} populated with attributes from the\n   * OTEL_RESOURCE_ATTRIBUTES environment variable. Note this is an async\n   * function to conform to the Detector interface.\n   *\n   * @param config The resource detection config\n   */\n  detect(_config?: ResourceDetectionConfig): DetectedResource {\n    const attributes: Attributes = {};\n\n    const rawAttributes = getStringFromEnv('OTEL_RESOURCE_ATTRIBUTES');\n    const serviceName = getStringFromEnv('OTEL_SERVICE_NAME');\n\n    if (rawAttributes) {\n      try {\n        const parsedAttributes = this._parseResourceAttributes(rawAttributes);\n        Object.assign(attributes, parsedAttributes);\n      } catch (e) {\n        diag.debug(`EnvDetector failed: ${e instanceof Error ? e.message : e}`);\n      }\n    }\n\n    if (serviceName) {\n      attributes[ATTR_SERVICE_NAME] = serviceName;\n    }\n\n    return { attributes };\n  }\n\n  /**\n   * Creates an attribute map from the OTEL_RESOURCE_ATTRIBUTES environment\n   * variable.\n   *\n   * OTEL_RESOURCE_ATTRIBUTES: A comma-separated list of attributes in the\n   * format \"key1=value1,key2=value2\". The ',' and '=' characters in keys\n   * and values MUST be percent-encoded. Other characters MAY be percent-encoded.\n   *\n   * Per the spec, on any error (e.g., decoding failure), the entire environment\n   * variable value is discarded.\n   *\n   * @param rawEnvAttributes The resource attributes as a comma-separated list\n   * of key/value pairs.\n   * @returns The parsed resource attributes.\n   * @throws Error if parsing fails (caller handles by discarding all attributes)\n   */\n  private _parseResourceAttributes(rawEnvAttributes?: string): Attributes {\n    if (!rawEnvAttributes) return {};\n\n    const attributes: Attributes = {};\n    const rawAttributes: string[] = rawEnvAttributes\n      .split(this._COMMA_SEPARATOR)\n      .filter(attr => attr.trim() !== ''); // Filter out empty entries\n\n    for (const rawAttribute of rawAttributes) {\n      const keyValuePair: string[] = rawAttribute.split(\n        this._LABEL_KEY_VALUE_SPLITTER\n      );\n\n      // Per spec: ',' and '=' MUST be percent-encoded in keys and values.\n      // If we get != 2 parts, there's an unencoded '=' which is an error.\n      if (keyValuePair.length !== 2) {\n        throw new Error(\n          `Invalid format for OTEL_RESOURCE_ATTRIBUTES: \"${rawAttribute}\". ` +\n            \"Expected format: key=value. The ',' and '=' characters must be percent-encoded in keys and values.\"\n        );\n      }\n\n      const [rawKey, rawValue] = keyValuePair;\n      const key = rawKey.trim();\n      const value = rawValue.trim();\n\n      if (key.length === 0) {\n        throw new Error(\n          `Invalid OTEL_RESOURCE_ATTRIBUTES: empty attribute key in \"${rawAttribute}\".`\n        );\n      }\n\n      let decodedKey: string;\n      let decodedValue: string;\n      try {\n        decodedKey = decodeURIComponent(key);\n        decodedValue = decodeURIComponent(value);\n      } catch (e) {\n        throw new Error(\n          `Failed to percent-decode OTEL_RESOURCE_ATTRIBUTES entry \"${rawAttribute}\": ${e instanceof Error ? e.message : e}`,\n          { cause: e }\n        );\n      }\n\n      if (decodedKey.length > this._MAX_LENGTH) {\n        throw new Error(\n          `Attribute key exceeds the maximum length of ${this._MAX_LENGTH} characters: \"${decodedKey}\".`\n        );\n      }\n\n      if (decodedValue.length > this._MAX_LENGTH) {\n        throw new Error(\n          `Attribute value exceeds the maximum length of ${this._MAX_LENGTH} characters for key \"${decodedKey}\".`\n        );\n      }\n\n      attributes[decodedKey] = decodedValue;\n    }\n\n    return attributes;\n  }\n}\n\nexport const envDetector = new EnvDetector();\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by this package.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n\n/**\n * The cloud account ID the resource is assigned to.\n *\n * @example 111111111111\n * @example opentelemetry\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_CLOUD_ACCOUNT_ID = 'cloud.account.id' as const;\n\n/**\n * Cloud regions often have multiple, isolated locations known as zones to increase availability. Availability zone represents the zone where the resource is running.\n *\n * @example us-east-1c\n *\n * @note Availability zones are called \"zones\" on Alibaba Cloud and Google Cloud.\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_CLOUD_AVAILABILITY_ZONE = 'cloud.availability_zone' as const;\n\n/**\n * Name of the cloud provider.\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_CLOUD_PROVIDER = 'cloud.provider' as const;\n\n/**\n * The geographical region the resource is running.\n *\n * @example us-central1\n * @example us-east-1\n *\n * @note Refer to your provider's docs to see the available regions, for example [Alibaba Cloud regions](https://www.alibabacloud.com/help/doc-detail/40654.htm), [AWS regions](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/), [Azure regions](https://azure.microsoft.com/global-infrastructure/geographies/), [Google Cloud regions](https://cloud.google.com/about/locations), or [Tencent Cloud regions](https://www.tencentcloud.com/document/product/213/6091).\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_CLOUD_REGION = 'cloud.region' as const;\n\n/**\n * Container ID. Usually a UUID, as for example used to [identify Docker containers](https://docs.docker.com/engine/containers/run/#container-identification). The UUID might be abbreviated.\n *\n * @example a3bf90e006b2\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_CONTAINER_ID = 'container.id' as const;\n\n/**\n * Name of the image the container was built on.\n *\n * @example gcr.io/opentelemetry/operator\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_CONTAINER_IMAGE_NAME = 'container.image.name' as const;\n\n/**\n * Container image tags. An example can be found in [Docker Image Inspect](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect). Should be only the `<tag>` section of the full name for example from `registry.example.com/my-org/my-image:<tag>`.\n *\n * @example [\"v1.27.1\", \"3.5.7-0\"]\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_CONTAINER_IMAGE_TAGS = 'container.image.tags' as const;\n\n/**\n * Container name used by container runtime.\n *\n * @example opentelemetry-autoconf\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_CONTAINER_NAME = 'container.name' as const;\n\n/**\n * The CPU architecture the host system is running on.\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_HOST_ARCH = 'host.arch' as const;\n\n/**\n * Unique host ID. For Cloud, this must be the instance_id assigned by the cloud provider. For non-containerized systems, this should be the `machine-id`. See the table below for the sources to use to determine the `machine-id` based on operating system.\n *\n * @example fdbf79e8af94cb7f9e8df36789187052\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_HOST_ID = 'host.id' as const;\n\n/**\n * VM image ID or host OS image ID. For Cloud, this value is from the provider.\n *\n * @example ami-07b06b442921831e5\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_HOST_IMAGE_ID = 'host.image.id' as const;\n\n/**\n * Name of the VM image or OS install the host was instantiated from.\n *\n * @example infra-ami-eks-worker-node-7d4ec78312\n * @example CentOS-8-x86_64-1905\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_HOST_IMAGE_NAME = 'host.image.name' as const;\n\n/**\n * The version string of the VM image or host OS as defined in [Version Attributes](/docs/resource/README.md#version-attributes).\n *\n * @example 0.1\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_HOST_IMAGE_VERSION = 'host.image.version' as const;\n\n/**\n * Name of the host. On Unix systems, it may contain what the hostname command returns, or the fully qualified hostname, or another name specified by the user.\n *\n * @example opentelemetry-test\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_HOST_NAME = 'host.name' as const;\n\n/**\n * Type of host. For Cloud, this must be the machine type.\n *\n * @example n1-standard-1\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_HOST_TYPE = 'host.type' as const;\n\n/**\n * The name of the cluster.\n *\n * @example opentelemetry-cluster\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_K8S_CLUSTER_NAME = 'k8s.cluster.name' as const;\n\n/**\n * The name of the Deployment.\n *\n * @example opentelemetry\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_K8S_DEPLOYMENT_NAME = 'k8s.deployment.name' as const;\n\n/**\n * The name of the namespace that the pod is running in.\n *\n * @example default\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_K8S_NAMESPACE_NAME = 'k8s.namespace.name' as const;\n\n/**\n * The name of the Pod.\n *\n * @example opentelemetry-pod-autoconf\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_K8S_POD_NAME = 'k8s.pod.name' as const;\n\n/**\n * The operating system type.\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_OS_TYPE = 'os.type' as const;\n\n/**\n * The version string of the operating system as defined in [Version Attributes](/docs/resource/README.md#version-attributes).\n *\n * @example 14.2.1\n * @example 18.04.1\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_OS_VERSION = 'os.version' as const;\n\n/**\n * The command used to launch the process (i.e. the command name). On Linux based systems, can be set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can be set to the first parameter extracted from `GetCommandLineW`.\n *\n * @example cmd/otelcol\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_PROCESS_COMMAND = 'process.command' as const;\n\n/**\n * All the command arguments (including the command/executable itself) as received by the process. On Linux-based systems (and some other Unixoid systems supporting procfs), can be set according to the list of null-delimited strings extracted from `proc/[pid]/cmdline`. For libc-based executables, this would be the full argv vector passed to `main`.\n *\n * @example [\"cmd/otecol\", \"--config=config.yaml\"]\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_PROCESS_COMMAND_ARGS = 'process.command_args' as const;\n\n/**\n * The name of the process executable. On Linux based systems, this **SHOULD** be set to the base name of the target of `/proc/[pid]/exe`. On Windows, this **SHOULD** be set to the base name of `GetProcessImageFileNameW`.\n *\n * @example otelcol\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_PROCESS_EXECUTABLE_NAME = 'process.executable.name' as const;\n\n/**\n * The full path to the process executable. On Linux based systems, can be set to the target of `proc/[pid]/exe`. On Windows, can be set to the result of `GetProcessImageFileNameW`.\n *\n * @example /usr/bin/cmd/otelcol\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_PROCESS_EXECUTABLE_PATH = 'process.executable.path' as const;\n\n/**\n * The username of the user that owns the process.\n *\n * @example root\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_PROCESS_OWNER = 'process.owner' as const;\n\n/**\n * Process identifier (PID).\n *\n * @example 1234\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_PROCESS_PID = 'process.pid' as const;\n\n/**\n * An additional description about the runtime of the process, for example a specific vendor customization of the runtime environment.\n *\n * @example \"Eclipse OpenJ9 Eclipse OpenJ9 VM openj9-0.21.0\"\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_PROCESS_RUNTIME_DESCRIPTION =\n  'process.runtime.description' as const;\n\n/**\n * The name of the runtime of this process.\n *\n * @example OpenJDK Runtime Environment\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_PROCESS_RUNTIME_NAME = 'process.runtime.name' as const;\n\n/**\n * The version of the runtime of this process, as returned by the runtime without modification.\n *\n * @example \"14.0.2\"\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_PROCESS_RUNTIME_VERSION = 'process.runtime.version' as const;\n\n/**\n * The string ID of the service instance.\n *\n * @example 627cc493-f310-47de-96bd-71410b7dec09\n *\n * @note **MUST** be unique for each instance of the same `service.namespace,service.name` pair (in other words\n * `service.namespace,service.name,service.instance.id` triplet **MUST** be globally unique). The ID helps to\n * distinguish instances of the same service that exist at the same time (e.g. instances of a horizontally scaled\n * service).\n *\n * Implementations, such as SDKs, are recommended to generate a random Version 1 or Version 4 [RFC\n * 4122](https://www.ietf.org/rfc/rfc4122.txt) UUID, but are free to use an inherent unique ID as the source of\n * this value if stability is desirable. In that case, the ID **SHOULD** be used as source of a UUID Version 5 and\n * **SHOULD** use the following UUID as the namespace: `4d63009a-8d0f-11ee-aad7-4c796ed8e320`.\n *\n * UUIDs are typically recommended, as only an opaque value for the purposes of identifying a service instance is\n * needed. Similar to what can be seen in the man page for the\n * [`/etc/machine-id`](https://www.freedesktop.org/software/systemd/man/latest/machine-id.html) file, the underlying\n * data, such as pod name and namespace should be treated as confidential, being the user's choice to expose it\n * or not via another resource attribute.\n *\n * For applications running behind an application server (like unicorn), we do not recommend using one identifier\n * for all processes participating in the application. Instead, it's recommended each division (e.g. a worker\n * thread in unicorn) to have its own instance.id.\n *\n * It's not recommended for a Collector to set `service.instance.id` if it can't unambiguously determine the\n * service instance that is generating that telemetry. For instance, creating an UUID based on `pod.name` will\n * likely be wrong, as the Collector might not know from which container within that pod the telemetry originated.\n * However, Collectors can set the `service.instance.id` if they can unambiguously determine the service instance\n * for that telemetry. This is typically the case for scraping receivers, as they know the target address and\n * port.\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_SERVICE_INSTANCE_ID = 'service.instance.id' as const;\n\n/**\n * A namespace for `service.name`.\n *\n * @example Shop\n *\n * @note A string value having a meaning that helps to distinguish a group of services, for example the team name that owns a group of services. `service.name` is expected to be unique within the same namespace. If `service.namespace` is not specified in the Resource then `service.name` is expected to be unique for all services that have no explicit namespace defined (so the empty/unspecified namespace is simply one more valid namespace). Zero-length namespace string is assumed equal to unspecified namespace.\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_SERVICE_NAMESPACE = 'service.namespace' as const;\n\n/**\n * Additional description of the web engine (e.g. detailed version and edition information).\n *\n * @example WildFly Full 21.0.0.Final (WildFly Core 13.0.1.Final) - 2.2.2.Final\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_WEBENGINE_DESCRIPTION = 'webengine.description' as const;\n\n/**\n * The name of the web engine.\n *\n * @example WildFly\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_WEBENGINE_NAME = 'webengine.name' as const;\n\n/**\n * The version of the web engine.\n *\n * @example 21.0.0\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_WEBENGINE_VERSION = 'webengine.version' as const;\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport * as child_process from 'child_process';\nimport * as util from 'util';\n\nexport const execAsync = util.promisify(child_process.exec);\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { execAsync } from './execAsync';\nimport { diag } from '@opentelemetry/api';\n\nexport async function getMachineId(): Promise<string | undefined> {\n  try {\n    const result = await execAsync('ioreg -rd1 -c \"IOPlatformExpertDevice\"');\n\n    const idLine = result.stdout\n      .split('\\n')\n      .find(line => line.includes('IOPlatformUUID'));\n\n    if (!idLine) {\n      return undefined;\n    }\n\n    const parts = idLine.split('\" = \"');\n    if (parts.length === 2) {\n      return parts[1].slice(0, -1);\n    }\n  } catch (e) {\n    diag.debug(`error reading machine id: ${e}`);\n  }\n\n  return undefined;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { promises as fs } from 'fs';\nimport { diag } from '@opentelemetry/api';\n\nexport async function getMachineId(): Promise<string | undefined> {\n  const paths = ['/etc/machine-id', '/var/lib/dbus/machine-id'];\n\n  for (const path of paths) {\n    try {\n      const result = await fs.readFile(path, { encoding: 'utf8' });\n      return result.trim();\n    } catch (e) {\n      diag.debug(`error reading machine id: ${e}`);\n    }\n  }\n\n  return undefined;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { promises as fs } from 'fs';\nimport { execAsync } from './execAsync';\nimport { diag } from '@opentelemetry/api';\n\nexport async function getMachineId(): Promise<string | undefined> {\n  try {\n    const result = await fs.readFile('/etc/hostid', { encoding: 'utf8' });\n    return result.trim();\n  } catch (e) {\n    diag.debug(`error reading machine id: ${e}`);\n  }\n\n  try {\n    const result = await execAsync('kenv -q smbios.system.uuid');\n    return result.stdout.trim();\n  } catch (e) {\n    diag.debug(`error reading machine id: ${e}`);\n  }\n\n  return undefined;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport * as process from 'process';\nimport { execAsync } from './execAsync';\nimport { diag } from '@opentelemetry/api';\n\nexport async function getMachineId(): Promise<string | undefined> {\n  const args =\n    'QUERY HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Cryptography /v MachineGuid';\n  let command = '%windir%\\\\System32\\\\REG.exe';\n  if (process.arch === 'ia32' && 'PROCESSOR_ARCHITEW6432' in process.env) {\n    command = '%windir%\\\\sysnative\\\\cmd.exe /c ' + command;\n  }\n\n  try {\n    const result = await execAsync(`${command} ${args}`);\n    const parts = result.stdout.split('REG_SZ');\n    if (parts.length === 2) {\n      return parts[1].trim();\n    }\n  } catch (e) {\n    diag.debug(`error reading machine id: ${e}`);\n  }\n\n  return undefined;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { diag } from '@opentelemetry/api';\n\nexport async function getMachineId(): Promise<string | undefined> {\n  diag.debug('could not read machine-id: unsupported platform');\n  return undefined;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport * as process from 'process';\n\nlet getMachineIdImpl: undefined | (() => Promise<string | undefined>);\n\nexport async function getMachineId(): Promise<string | undefined> {\n  if (!getMachineIdImpl) {\n    switch (process.platform) {\n      case 'darwin':\n        getMachineIdImpl = (await import('./getMachineId-darwin.js'))\n          .getMachineId;\n        break;\n      case 'linux':\n        getMachineIdImpl = (await import('./getMachineId-linux.js'))\n          .getMachineId;\n        break;\n      case 'freebsd':\n        getMachineIdImpl = (await import('./getMachineId-bsd.js')).getMachineId;\n        break;\n      case 'win32':\n        getMachineIdImpl = (await import('./getMachineId-win.js')).getMachineId;\n        break;\n      default:\n        getMachineIdImpl = (await import('./getMachineId-unsupported.js'))\n          .getMachineId;\n        break;\n    }\n  }\n\n  return getMachineIdImpl();\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nexport const normalizeArch = (nodeArchString: string): string => {\n  // Maps from https://nodejs.org/api/os.html#osarch to arch values in spec:\n  // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/resource/semantic_conventions/host.md\n  switch (nodeArchString) {\n    case 'arm':\n      return 'arm32';\n    case 'ppc':\n      return 'ppc32';\n    case 'x64':\n      return 'amd64';\n    default:\n      return nodeArchString;\n  }\n};\n\nexport const normalizeType = (nodePlatform: string): string => {\n  // Maps from https://nodejs.org/api/os.html#osplatform to arch values in spec:\n  // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/resource/semantic_conventions/os.md\n  switch (nodePlatform) {\n    case 'sunos':\n      return 'solaris';\n    case 'win32':\n      return 'windows';\n    default:\n      return nodePlatform;\n  }\n};\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ATTR_HOST_ARCH, ATTR_HOST_ID, ATTR_HOST_NAME } from '../../../semconv';\nimport { arch, hostname } from 'os';\nimport type { ResourceDetectionConfig } from '../../../config';\nimport type {\n  DetectedResource,\n  DetectedResourceAttributes,\n  ResourceDetector,\n} from '../../../types';\nimport { getMachineId } from './machine-id/getMachineId';\nimport { normalizeArch } from './utils';\n\n/**\n * HostDetector detects the resources related to the host current process is\n * running on. Currently only non-cloud-based attributes are included.\n */\nclass HostDetector implements ResourceDetector {\n  detect(_config?: ResourceDetectionConfig): DetectedResource {\n    const attributes: DetectedResourceAttributes = {\n      [ATTR_HOST_NAME]: hostname(),\n      [ATTR_HOST_ARCH]: normalizeArch(arch()),\n      [ATTR_HOST_ID]: getMachineId(),\n    };\n\n    return { attributes };\n  }\n}\n\nexport const hostDetector = new HostDetector();\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Attributes } from '@opentelemetry/api';\nimport { ATTR_OS_TYPE, ATTR_OS_VERSION } from '../../../semconv';\nimport { platform, release } from 'os';\nimport type { ResourceDetectionConfig } from '../../../config';\nimport type { DetectedResource, ResourceDetector } from '../../../types';\nimport { normalizeType } from './utils';\n\n/**\n * OSDetector detects the resources related to the operating system (OS) on\n * which the process represented by this resource is running.\n */\nclass OSDetector implements ResourceDetector {\n  detect(_config?: ResourceDetectionConfig): DetectedResource {\n    const attributes: Attributes = {\n      [ATTR_OS_TYPE]: normalizeType(platform()),\n      [ATTR_OS_VERSION]: release(),\n    };\n    return { attributes };\n  }\n}\n\nexport const osDetector = new OSDetector();\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Attributes } from '@opentelemetry/api';\nimport { diag } from '@opentelemetry/api';\nimport {\n  ATTR_PROCESS_COMMAND,\n  ATTR_PROCESS_COMMAND_ARGS,\n  ATTR_PROCESS_EXECUTABLE_NAME,\n  ATTR_PROCESS_EXECUTABLE_PATH,\n  ATTR_PROCESS_OWNER,\n  ATTR_PROCESS_PID,\n  ATTR_PROCESS_RUNTIME_DESCRIPTION,\n  ATTR_PROCESS_RUNTIME_NAME,\n  ATTR_PROCESS_RUNTIME_VERSION,\n} from '../../../semconv';\nimport * as os from 'os';\nimport type { ResourceDetectionConfig } from '../../../config';\nimport type { DetectedResource, ResourceDetector } from '../../../types';\n\n/**\n * ProcessDetector will be used to detect the resources related current process running\n * and being instrumented from the NodeJS Process module.\n */\nclass ProcessDetector implements ResourceDetector {\n  detect(_config?: ResourceDetectionConfig): DetectedResource {\n    const attributes: Attributes = {\n      [ATTR_PROCESS_PID]: process.pid,\n      [ATTR_PROCESS_EXECUTABLE_NAME]: process.title,\n      [ATTR_PROCESS_EXECUTABLE_PATH]: process.execPath,\n      [ATTR_PROCESS_COMMAND_ARGS]: [\n        process.argv[0],\n        ...process.execArgv,\n        ...process.argv.slice(1),\n      ],\n      [ATTR_PROCESS_RUNTIME_VERSION]: process.versions.node,\n      [ATTR_PROCESS_RUNTIME_NAME]: 'nodejs',\n      [ATTR_PROCESS_RUNTIME_DESCRIPTION]: 'Node.js',\n    };\n\n    if (process.argv.length > 1) {\n      attributes[ATTR_PROCESS_COMMAND] = process.argv[1];\n    }\n\n    try {\n      const userInfo = os.userInfo();\n      attributes[ATTR_PROCESS_OWNER] = userInfo.username;\n    } catch (e) {\n      diag.debug(`error obtaining process owner: ${e}`);\n    }\n\n    return { attributes };\n  }\n}\n\nexport const processDetector = new ProcessDetector();\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ATTR_SERVICE_INSTANCE_ID } from '../../../semconv';\nimport { randomUUID } from 'crypto';\nimport type { ResourceDetectionConfig } from '../../../config';\nimport type { DetectedResource, ResourceDetector } from '../../../types';\n\n/**\n * ServiceInstanceIdDetector detects the resources related to the service instance ID.\n */\nclass ServiceInstanceIdDetector implements ResourceDetector {\n  detect(_config?: ResourceDetectionConfig): DetectedResource {\n    return {\n      attributes: {\n        [ATTR_SERVICE_INSTANCE_ID]: randomUUID(),\n      },\n    };\n  }\n}\n\n/**\n * @experimental\n */\nexport const serviceInstanceIdDetector = new ServiceInstanceIdDetector();\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport { hostDetector } from './HostDetector';\nexport { osDetector } from './OSDetector';\nexport { processDetector } from './ProcessDetector';\nexport { serviceInstanceIdDetector } from './ServiceInstanceIdDetector';\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nexport {\n  hostDetector,\n  osDetector,\n  processDetector,\n  serviceInstanceIdDetector,\n} from './node';\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DetectedResource, ResourceDetector } from '../types';\n\nexport class NoopDetector implements ResourceDetector {\n  detect(): DetectedResource {\n    return {\n      attributes: {},\n    };\n  }\n}\n\nexport const noopDetector = new NoopDetector();\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport { envDetector } from './EnvDetector';\nexport {\n  hostDetector,\n  osDetector,\n  processDetector,\n  serviceInstanceIdDetector,\n} from './platform';\nexport { noopDetector } from './NoopDetector';\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport type { ResourceDetectionConfig } from './config';\nexport { detectResources } from './detect-resources';\nexport {\n  envDetector,\n  hostDetector,\n  osDetector,\n  processDetector,\n  serviceInstanceIdDetector,\n} from './detectors';\nexport type { Resource } from './Resource';\nexport {\n  resourceFromAttributes,\n  defaultResource,\n  emptyResource,\n} from './ResourceImpl';\nexport { defaultServiceName } from './default-service-name';\nexport type {\n  ResourceDetector,\n  DetectedResource,\n  DetectedResourceAttributes,\n  RawResourceAttribute,\n  MaybePromise,\n} from './types';\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Event name definitions\nexport const ExceptionEventName = 'exception';\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Attributes, AttributeValue } from '@opentelemetry/api';\nimport type { Resource } from '@opentelemetry/resources';\n\n/**\n * Well-known symbol used by Node.js `util.inspect` (and `console.*`) to\n * render an object via a custom representation. Defined as a global Symbol\n * so it works without importing from `node:util`, keeping this module safe\n * for browser builds (where the symbol is simply never looked up).\n */\nexport const inspectCustom = Symbol.for('nodejs.util.inspect.custom');\n\n/**\n * Collect a Resource's settled attributes without touching the\n * `attributes` getter, which emits diag.error/debug entries when async\n * attribute detectors are still pending. Promise-like (unsettled)\n * entries are silently skipped so logging a Span/Tracer/Provider during\n * startup doesn't recurse through the diag pipeline.\n */\nexport function settledResourceAttributes(resource: Resource): Attributes {\n  const attrs: Attributes = {};\n  for (const [k, v] of resource.getRawAttributes()) {\n    if (typeof (v as Partial<PromiseLike<unknown>>)?.then === 'function') {\n      continue;\n    }\n    if (v != null) {\n      attrs[k] ??= v as AttributeValue;\n    }\n  }\n  return attrs;\n}\n\nexport type InspectFn = (value: unknown, options: unknown) => string;\n\nexport interface InspectStylizeOptions {\n  depth?: number | null;\n  stylize?: (text: string, styleType: string) => string;\n}\n\n/**\n * Build a class-tagged inspect representation. Returns a stub like\n * `[ClassName]` once the recursion budget is exhausted, otherwise returns\n * `ClassName <inspected payload>` so nested fields keep proper coloring,\n * indentation, and depth handling. In environments that don't supply an\n * `inspect` callback (e.g. browsers), falls back to returning the raw\n * payload object.\n */\nexport function formatInspect(\n  className: string,\n  payload: object,\n  depth: number,\n  options: InspectStylizeOptions | undefined,\n  inspect: InspectFn | undefined\n): unknown {\n  if (typeof depth === 'number' && depth < 0) {\n    const tag = `[${className}]`;\n    return options?.stylize ? options.stylize(tag, 'special') : tag;\n  }\n  if (typeof inspect !== 'function' || !options) {\n    return payload;\n  }\n  const childOptions = {\n    ...options,\n    depth: options.depth == null ? options.depth : options.depth - 1,\n  };\n  return `${className} ${inspect(payload, childOptions)}`;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n  Context,\n  Exception,\n  HrTime,\n  Link,\n  Span as APISpan,\n  SpanOptions as APISpanOptions,\n  Attributes,\n  AttributeValue,\n  SpanContext,\n  SpanKind,\n  SpanStatus,\n  TimeInput,\n} from '@opentelemetry/api';\nimport { diag, SpanStatusCode } from '@opentelemetry/api';\nimport type { InstrumentationScope } from '@opentelemetry/core';\nimport {\n  addHrTimes,\n  millisToHrTime,\n  hrTime,\n  hrTimeDuration,\n  isAttributeValue,\n  isTimeInput,\n  isTimeInputHrTime,\n  otperformance,\n  sanitizeAttributes,\n} from '@opentelemetry/core';\nimport type { Resource } from '@opentelemetry/resources';\nimport {\n  ATTR_EXCEPTION_MESSAGE,\n  ATTR_EXCEPTION_STACKTRACE,\n  ATTR_EXCEPTION_TYPE,\n} from '@opentelemetry/semantic-conventions';\nimport type { ReadableSpan } from './export/ReadableSpan';\nimport { ExceptionEventName } from './enums';\nimport type { SpanProcessor } from './SpanProcessor';\nimport type { TimedEvent } from './TimedEvent';\nimport type { SpanLimits } from './types';\nimport type { InspectFn, InspectStylizeOptions } from './inspect';\nimport {\n  formatInspect,\n  inspectCustom,\n  settledResourceAttributes,\n} from './inspect';\n\n/**\n * This type provides the properties of @link{ReadableSpan} at the same time\n * of the Span API\n */\nexport type Span = APISpan & ReadableSpan;\n\n// `root` is omitted because it is consumed by Tracer.startSpan() to strip\n// parent context but it has no meaning when constructing a Span directly.\ntype SpanOptions = Omit<APISpanOptions, 'root'> & {\n  resource: Resource;\n  scope: InstrumentationScope;\n  context: Context;\n  spanContext: SpanContext;\n  name: string;\n  // Required here to override optional `kind` from the API's SpanOptions\n  // SpanImpl assigns it unconditionally and ReadableSpan expects it to be set.\n  kind: SpanKind;\n  parentSpanContext?: SpanContext;\n  spanLimits: SpanLimits;\n  spanProcessor: SpanProcessor;\n  recordEndMetrics?: () => void;\n};\n\n/**\n * This class represents a span.\n */\nexport class SpanImpl implements Span {\n  // Below properties are included to implement ReadableSpan for export\n  // purposes but are not intended to be written-to directly.\n  private readonly _spanContext: SpanContext;\n  readonly kind: SpanKind;\n  readonly parentSpanContext?: SpanContext;\n  readonly attributes: Attributes = {};\n  readonly links: Link[] = [];\n  readonly events: TimedEvent[] = [];\n  readonly startTime: HrTime;\n  readonly resource: Resource;\n  readonly instrumentationScope: InstrumentationScope;\n\n  private _droppedAttributesCount = 0;\n  private _droppedEventsCount: number = 0;\n  private _droppedLinksCount: number = 0;\n  private _attributesCount: number = 0;\n\n  name: string;\n  status: SpanStatus = {\n    code: SpanStatusCode.UNSET,\n  };\n  endTime: HrTime = [0, 0];\n  private _ended = false;\n  private _duration: HrTime = [-1, -1];\n  private readonly _spanProcessor: SpanProcessor;\n  private readonly _spanLimits: SpanLimits;\n  private readonly _attributeValueLengthLimit: number;\n  private readonly _recordEndMetrics?: () => void;\n\n  private readonly _performanceStartTime: number;\n  private readonly _performanceOffset: number;\n  private readonly _startTimeProvided: boolean;\n\n  /**\n   * Constructs a new SpanImpl instance.\n   */\n  constructor(opts: SpanOptions) {\n    const now = Date.now();\n\n    this._spanContext = opts.spanContext;\n    this._performanceStartTime = otperformance.now();\n    this._performanceOffset =\n      now - (this._performanceStartTime + otperformance.timeOrigin);\n    this._startTimeProvided = opts.startTime != null;\n    this._spanLimits = opts.spanLimits;\n    this._attributeValueLengthLimit =\n      this._spanLimits.attributeValueLengthLimit ?? 0;\n    this._spanProcessor = opts.spanProcessor;\n\n    this.name = opts.name;\n    this.parentSpanContext = opts.parentSpanContext;\n    this.kind = opts.kind;\n    if (opts.links) {\n      for (const link of opts.links) {\n        this.addLink(link);\n      }\n    }\n    this.startTime = this._getTime(opts.startTime ?? now);\n    this.resource = opts.resource;\n    this.instrumentationScope = opts.scope;\n    this._recordEndMetrics = opts.recordEndMetrics;\n\n    if (opts.attributes != null) {\n      this.setAttributes(opts.attributes);\n    }\n\n    this._spanProcessor.onStart(this, opts.context);\n  }\n\n  spanContext(): SpanContext {\n    return this._spanContext;\n  }\n\n  setAttribute(key: string, value?: AttributeValue): this;\n  setAttribute(key: string, value: unknown): this {\n    if (value == null || this._isSpanEnded()) return this;\n    if (key.length === 0) {\n      diag.warn(`Invalid attribute key: ${key}`);\n      return this;\n    }\n    if (!isAttributeValue(value)) {\n      diag.warn(`Invalid attribute value set for key: ${key}`);\n      return this;\n    }\n\n    const { attributeCountLimit } = this._spanLimits;\n    const isNewKey = !Object.prototype.hasOwnProperty.call(\n      this.attributes,\n      key\n    );\n\n    if (\n      attributeCountLimit !== undefined &&\n      this._attributesCount >= attributeCountLimit &&\n      isNewKey\n    ) {\n      this._droppedAttributesCount++;\n      return this;\n    }\n\n    this.attributes[key] = this._truncateToSize(value);\n    if (isNewKey) {\n      this._attributesCount++;\n    }\n    return this;\n  }\n\n  setAttributes(attributes: Attributes): this {\n    for (const key in attributes) {\n      if (Object.prototype.hasOwnProperty.call(attributes, key)) {\n        this.setAttribute(key, attributes[key]);\n      }\n    }\n    return this;\n  }\n\n  /**\n   *\n   * @param name Span Name\n   * @param [attributesOrStartTime] Span attributes or start time\n   *     if type is {@type TimeInput} and 3rd param is undefined\n   * @param [timeStamp] Specified time stamp for the event\n   */\n  addEvent(\n    name: string,\n    attributesOrStartTime?: Attributes | TimeInput,\n    timeStamp?: TimeInput\n  ): this {\n    if (this._isSpanEnded()) return this;\n\n    const { eventCountLimit } = this._spanLimits;\n\n    if (eventCountLimit === 0) {\n      diag.warn('No events allowed.');\n      this._droppedEventsCount++;\n      return this;\n    }\n\n    if (\n      eventCountLimit !== undefined &&\n      this.events.length >= eventCountLimit\n    ) {\n      if (this._droppedEventsCount === 0) {\n        diag.debug('Dropping extra events.');\n      }\n      this.events.shift();\n      this._droppedEventsCount++;\n    }\n\n    if (isTimeInput(attributesOrStartTime)) {\n      if (!isTimeInput(timeStamp)) {\n        timeStamp = attributesOrStartTime;\n      }\n      attributesOrStartTime = undefined;\n    }\n\n    const sanitized = sanitizeAttributes(attributesOrStartTime);\n    const { attributePerEventCountLimit } = this._spanLimits;\n    const attributes: Attributes = {};\n    let droppedAttributesCount = 0;\n    let eventAttributesCount = 0;\n\n    for (const attr in sanitized) {\n      if (!Object.prototype.hasOwnProperty.call(sanitized, attr)) {\n        continue;\n      }\n      const attrVal = sanitized[attr];\n      if (\n        attributePerEventCountLimit !== undefined &&\n        eventAttributesCount >= attributePerEventCountLimit\n      ) {\n        droppedAttributesCount++;\n        continue;\n      }\n      attributes[attr] = this._truncateToSize(attrVal!);\n      eventAttributesCount++;\n    }\n\n    this.events.push({\n      name,\n      attributes,\n      time: this._getTime(timeStamp),\n      droppedAttributesCount,\n    });\n    return this;\n  }\n\n  addLink(link: Link): this {\n    if (this._isSpanEnded()) return this;\n\n    const { linkCountLimit } = this._spanLimits;\n\n    if (linkCountLimit === 0) {\n      this._droppedLinksCount++;\n      return this;\n    }\n\n    if (linkCountLimit !== undefined && this.links.length >= linkCountLimit) {\n      if (this._droppedLinksCount === 0) {\n        diag.debug('Dropping extra links.');\n      }\n      this.links.shift();\n      this._droppedLinksCount++;\n    }\n\n    const { attributePerLinkCountLimit } = this._spanLimits;\n    const sanitized = sanitizeAttributes(link.attributes);\n    const attributes: Attributes = {};\n    let droppedAttributesCount = 0;\n    let linkAttributesCount = 0;\n\n    for (const attr in sanitized) {\n      if (!Object.prototype.hasOwnProperty.call(sanitized, attr)) {\n        continue;\n      }\n      const attrVal = sanitized[attr];\n      if (\n        attributePerLinkCountLimit !== undefined &&\n        linkAttributesCount >= attributePerLinkCountLimit\n      ) {\n        droppedAttributesCount++;\n        continue;\n      }\n      attributes[attr] = this._truncateToSize(attrVal!);\n      linkAttributesCount++;\n    }\n\n    const processedLink: Link = { context: link.context };\n    if (linkAttributesCount > 0) {\n      processedLink.attributes = attributes;\n    }\n    if (droppedAttributesCount > 0) {\n      processedLink.droppedAttributesCount = droppedAttributesCount;\n    }\n\n    this.links.push(processedLink);\n    return this;\n  }\n\n  addLinks(links: Link[]): this {\n    for (const link of links) {\n      this.addLink(link);\n    }\n    return this;\n  }\n\n  setStatus(status: SpanStatus): this {\n    if (this._isSpanEnded()) return this;\n    if (status.code === SpanStatusCode.UNSET) return this;\n    if (this.status.code === SpanStatusCode.OK) return this;\n\n    const newStatus: SpanStatus = { code: status.code };\n\n    // When using try-catch, the caught \"error\" is of type `any`. When then assigning `any` to `status.message`,\n    // TypeScript will not error. While this can happen during use of any API, it is more common on Span#setStatus()\n    // as it's likely used in a catch-block. Therefore, we validate if `status.message` is actually a string, null, or\n    // undefined to avoid an incorrect type causing issues downstream.\n    if (status.code === SpanStatusCode.ERROR) {\n      if (typeof status.message === 'string') {\n        newStatus.message = status.message;\n      } else if (status.message != null) {\n        diag.warn(\n          `Dropping invalid status.message of type '${typeof status.message}', expected 'string'`\n        );\n      }\n    }\n\n    this.status = newStatus;\n    return this;\n  }\n\n  updateName(name: string): this {\n    if (this._isSpanEnded()) return this;\n    this.name = name;\n    return this;\n  }\n\n  end(endTime?: TimeInput): void {\n    if (this._isSpanEnded()) {\n      diag.error(\n        `${this.name} ${this._spanContext.traceId}-${this._spanContext.spanId} - You can only call end() on a span once.`\n      );\n      return;\n    }\n    this.endTime = this._getTime(endTime);\n    this._duration = hrTimeDuration(this.startTime, this.endTime);\n\n    if (this._duration[0] < 0) {\n      diag.warn(\n        'Inconsistent start and end time, startTime > endTime. Setting span duration to 0ms.',\n        this.startTime,\n        this.endTime\n      );\n      this.endTime = this.startTime.slice() as HrTime;\n      this._duration = [0, 0];\n    }\n\n    if (this._droppedEventsCount > 0) {\n      diag.warn(\n        `Dropped ${this._droppedEventsCount} events because eventCountLimit reached`\n      );\n    }\n    if (this._droppedLinksCount > 0) {\n      diag.warn(\n        `Dropped ${this._droppedLinksCount} links because linkCountLimit reached`\n      );\n    }\n    if (this._spanProcessor.onEnding) {\n      this._spanProcessor.onEnding(this);\n    }\n\n    this._recordEndMetrics?.();\n    this._ended = true;\n    this._spanProcessor.onEnd(this);\n  }\n\n  private _getTime(inp?: TimeInput): HrTime {\n    if (typeof inp === 'number' && inp <= otperformance.now()) {\n      // must be a performance timestamp\n      // apply correction and convert to hrtime\n      return hrTime(inp + this._performanceOffset);\n    }\n\n    if (typeof inp === 'number') {\n      return millisToHrTime(inp);\n    }\n\n    if (inp instanceof Date) {\n      return millisToHrTime(inp.getTime());\n    }\n\n    if (isTimeInputHrTime(inp)) {\n      return inp;\n    }\n\n    if (this._startTimeProvided) {\n      // if user provided a time for the start manually\n      // we can't use duration to calculate event/end times\n      return millisToHrTime(Date.now());\n    }\n\n    const msDuration = otperformance.now() - this._performanceStartTime;\n    return addHrTimes(this.startTime, millisToHrTime(msDuration));\n  }\n\n  isRecording(): boolean {\n    return this._ended === false;\n  }\n\n  recordException(exception: Exception, time?: TimeInput): void {\n    const attributes: Attributes = {};\n    if (typeof exception === 'string') {\n      attributes[ATTR_EXCEPTION_MESSAGE] = exception;\n    } else if (exception) {\n      if (exception.code) {\n        attributes[ATTR_EXCEPTION_TYPE] = exception.code.toString();\n      } else if (exception.name) {\n        attributes[ATTR_EXCEPTION_TYPE] = exception.name;\n      }\n      if (exception.message) {\n        attributes[ATTR_EXCEPTION_MESSAGE] = exception.message;\n      }\n      if (exception.stack) {\n        attributes[ATTR_EXCEPTION_STACKTRACE] = exception.stack;\n      }\n    }\n\n    // these are minimum requirements from spec\n    if (attributes[ATTR_EXCEPTION_TYPE] || attributes[ATTR_EXCEPTION_MESSAGE]) {\n      this.addEvent(ExceptionEventName, attributes, time);\n    } else {\n      diag.warn(`Failed to record an exception ${exception}`);\n    }\n  }\n\n  get duration(): HrTime {\n    return this._duration;\n  }\n\n  get ended(): boolean {\n    return this._ended;\n  }\n\n  get droppedAttributesCount(): number {\n    return this._droppedAttributesCount;\n  }\n\n  get droppedEventsCount(): number {\n    return this._droppedEventsCount;\n  }\n\n  get droppedLinksCount(): number {\n    return this._droppedLinksCount;\n  }\n\n  private _isSpanEnded(): boolean {\n    if (this._ended) {\n      const error = new Error(\n        `Operation attempted on ended Span {traceId: ${this._spanContext.traceId}, spanId: ${this._spanContext.spanId}}`\n      );\n\n      diag.warn(\n        `Cannot execute the operation on ended Span {traceId: ${this._spanContext.traceId}, spanId: ${this._spanContext.spanId}}`,\n        error\n      );\n    }\n    return this._ended;\n  }\n\n  // Utility function to truncate given value within size\n  // for value type of string, will truncate to given limit\n  // for type of non-string, will return same value\n  private _truncateToLimitUtil(value: string, limit: number): string {\n    if (value.length <= limit) {\n      return value;\n    }\n    return value.substring(0, limit);\n  }\n\n  /**\n   * If the given attribute value is of type string and has more characters than given {@code attributeValueLengthLimit} then\n   * return string with truncated to {@code attributeValueLengthLimit} characters\n   *\n   * If the given attribute value is array of strings then\n   * return new array of strings with each element truncated to {@code attributeValueLengthLimit} characters\n   *\n   * Otherwise return same Attribute {@code value}\n   *\n   * @param value Attribute value\n   * @returns truncated attribute value if required, otherwise same value\n   */\n  private _truncateToSize(value: AttributeValue): AttributeValue {\n    const limit = this._attributeValueLengthLimit;\n    // Check limit\n    if (limit <= 0) {\n      // Negative values are invalid, so do not truncate\n      diag.warn(`Attribute value limit must be positive, got ${limit}`);\n      return value;\n    }\n\n    // String\n    if (typeof value === 'string') {\n      return this._truncateToLimitUtil(value, limit);\n    }\n\n    // Array of strings\n    if (Array.isArray(value)) {\n      return (value as []).map(val =>\n        typeof val === 'string' ? this._truncateToLimitUtil(val, limit) : val\n      );\n    }\n\n    // Other types, no need to apply value length limit\n    return value;\n  }\n\n  [inspectCustom](\n    depth: number,\n    options: InspectStylizeOptions | undefined,\n    inspect: InspectFn | undefined\n  ): unknown {\n    const payload = {\n      name: this.name,\n      kind: this.kind,\n      spanContext: this._spanContext,\n      parentSpanContext: this.parentSpanContext,\n      status: this.status,\n      startTime: this.startTime,\n      endTime: this.endTime,\n      duration: this._duration,\n      ended: this._ended,\n      attributes: this.attributes,\n      events: this.events,\n      links: this.links,\n      droppedAttributesCount: this._droppedAttributesCount,\n      droppedEventsCount: this._droppedEventsCount,\n      droppedLinksCount: this._droppedLinksCount,\n      instrumentationScope: this.instrumentationScope,\n      resource: { attributes: settledResourceAttributes(this.resource) },\n    };\n    return formatInspect('SpanImpl', payload, depth, options, inspect);\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n  Context,\n  Link,\n  Attributes,\n  SpanKind,\n  TraceState,\n} from '@opentelemetry/api';\n\n/**\n * A sampling decision that determines how a {@link Span} will be recorded\n * and collected.\n */\nexport enum SamplingDecision {\n  /**\n   * `Span.isRecording() === false`, span will not be recorded and all events\n   * and attributes will be dropped.\n   */\n  NOT_RECORD,\n  /**\n   * `Span.isRecording() === true`, but `Sampled` flag in {@link TraceFlags}\n   * MUST NOT be set.\n   */\n  RECORD,\n  /**\n   * `Span.isRecording() === true` AND `Sampled` flag in {@link TraceFlags}\n   * MUST be set.\n   */\n  RECORD_AND_SAMPLED,\n}\n\n/**\n * A sampling result contains a decision for a {@link Span} and additional\n * attributes the sampler would like to added to the Span.\n */\nexport interface SamplingResult {\n  /**\n   * A sampling decision, refer to {@link SamplingDecision} for details.\n   */\n  decision: SamplingDecision;\n  /**\n   * The list of attributes returned by SamplingResult MUST be immutable.\n   * Caller may call {@link Sampler}.shouldSample any number of times and\n   * can safely cache the returned value.\n   */\n  attributes?: Readonly<Attributes>;\n  /**\n   * A {@link TraceState} that will be associated with the {@link Span} through\n   * the new {@link SpanContext}. Samplers SHOULD return the TraceState from\n   * the passed-in {@link Context} if they do not intend to change it. Leaving\n   * the value undefined will also leave the TraceState unchanged.\n   */\n  traceState?: TraceState;\n}\n\n/**\n * This interface represent a sampler. Sampling is a mechanism to control the\n * noise and overhead introduced by OpenTelemetry by reducing the number of\n * samples of traces collected and sent to the backend.\n */\nexport interface Sampler {\n  /**\n   * Checks whether span needs to be created and tracked.\n   *\n   * @param context Parent Context which may contain a span.\n   * @param traceId of the span to be created. It can be different from the\n   *     traceId in the {@link SpanContext}. Typically in situations when the\n   *     span to be created starts a new trace.\n   * @param spanName of the span to be created.\n   * @param spanKind of the span to be created.\n   * @param attributes Initial set of Attributes for the Span being constructed.\n   * @param links Collection of links that will be associated with the Span to\n   *     be created. Typically useful for batch operations.\n   * @returns a {@link SamplingResult}.\n   */\n  shouldSample(\n    context: Context,\n    traceId: string,\n    spanName: string,\n    spanKind: SpanKind,\n    attributes: Attributes,\n    links: Link[]\n  ): SamplingResult;\n\n  /** Returns the sampler name or short description with the configuration. */\n  toString(): string;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by this package.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n\n/**\n * A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance.\n *\n * @example otlp_grpc_span_exporter/0\n * @example custom-name\n *\n * @note Implementations **SHOULD** ensure a low cardinality for this attribute, even across application or SDK restarts.\n * E.g. implementations **MUST NOT** use UUIDs as values for this attribute.\n *\n * Implementations **MAY** achieve these goals by following a `<otel.component.type>/<instance-counter>` pattern, e.g. `batching_span_processor/0`.\n * Hereby `otel.component.type` refers to the corresponding attribute value of the component.\n *\n * The value of `instance-counter` **MAY** be automatically assigned by the component and uniqueness within the enclosing SDK instance **MUST** be guaranteed.\n * For example, `<instance-counter>` **MAY** be implemented by using a monotonically increasing counter (starting with `0`), which is incremented every time an\n * instance of the given component type is started.\n *\n * With this implementation, for example the first Batching Span Processor would have `batching_span_processor/0`\n * as `otel.component.name`, the second one `batching_span_processor/1` and so on.\n * These values will therefore be reused in the case of an application restart.\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_OTEL_COMPONENT_NAME = 'otel.component.name' as const;\n\n/**\n * A name identifying the type of the OpenTelemetry component.\n *\n * @example batching_span_processor\n * @example com.example.MySpanExporter\n *\n * @note If none of the standardized values apply, implementations **SHOULD** use the language-defined name of the type.\n * E.g. for Java the fully qualified classname **SHOULD** be used in this case.\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_OTEL_COMPONENT_TYPE = 'otel.component.type' as const;\n\n/**\n * Determines whether the span has a parent span, and if so, [whether it is a remote parent](https://opentelemetry.io/docs/specs/otel/trace/api/#isremote)\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_OTEL_SPAN_PARENT_ORIGIN = 'otel.span.parent.origin' as const;\n\n/**\n * The result value of the sampler for this span\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_OTEL_SPAN_SAMPLING_RESULT =\n  'otel.span.sampling_result' as const;\n\n/**\n * The number of spans for which the processing has finished, either successful or failed.\n *\n * @note For successful processing, `error.type` **MUST NOT** be set. For failed processing, `error.type` **MUST** contain the failure cause.\n * For the SDK Simple and Batching Span Processor a span is considered to be processed already when it has been submitted to the exporter, not when the corresponding export call has finished.\n *\n * @experimental This metric is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const METRIC_OTEL_SDK_PROCESSOR_SPAN_PROCESSED =\n  'otel.sdk.processor.span.processed' as const;\n\n/**\n * The maximum number of spans the queue of a given instance of an SDK span processor can hold.\n *\n * @note Only applies to span processors which use a queue, e.g. the SDK Batching Span Processor.\n *\n * @experimental This metric is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const METRIC_OTEL_SDK_PROCESSOR_SPAN_QUEUE_CAPACITY =\n  'otel.sdk.processor.span.queue.capacity' as const;\n\n/**\n * The number of spans in the queue of a given instance of an SDK span processor.\n *\n * @note Only applies to span processors which use a queue, e.g. the SDK Batching Span Processor.\n *\n * @experimental This metric is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const METRIC_OTEL_SDK_PROCESSOR_SPAN_QUEUE_SIZE =\n  'otel.sdk.processor.span.queue.size' as const;\n\n/**\n * The number of created spans with `recording=true` for which the end operation has not been called yet.\n *\n * @experimental This metric is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const METRIC_OTEL_SDK_SPAN_LIVE = 'otel.sdk.span.live' as const;\n\n/**\n * The number of created spans.\n *\n * @note Implementations **MUST** record this metric for all spans, even for non-recording ones.\n *\n * @experimental This metric is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const METRIC_OTEL_SDK_SPAN_STARTED = 'otel.sdk.span.started' as const;\n\n/**\n * Enum value \"batching_span_processor\" for attribute {@link ATTR_OTEL_COMPONENT_TYPE}.\n *\n * The builtin SDK batching span processor\n *\n * @experimental This enum value is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const OTEL_COMPONENT_TYPE_VALUE_BATCHING_SPAN_PROCESSOR =\n  'batching_span_processor' as const;\n\n/**\n * Enum value \"simple_span_processor\" for attribute {@link ATTR_OTEL_COMPONENT_TYPE}.\n *\n * The builtin SDK simple span processor\n *\n * @experimental This enum value is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const OTEL_COMPONENT_TYPE_VALUE_SIMPLE_SPAN_PROCESSOR =\n  'simple_span_processor' as const;\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {\n  Counter,\n  Meter,\n  SpanContext,\n  UpDownCounter,\n} from '@opentelemetry/api';\nimport { SamplingDecision } from './Sampler';\nimport {\n  ATTR_OTEL_SPAN_PARENT_ORIGIN,\n  ATTR_OTEL_SPAN_SAMPLING_RESULT,\n  METRIC_OTEL_SDK_SPAN_LIVE,\n  METRIC_OTEL_SDK_SPAN_STARTED,\n} from './semconv';\n\n/**\n * Generates `otel.sdk.span.*` metrics.\n * https://opentelemetry.io/docs/specs/semconv/otel/sdk-metrics/#span-metrics\n */\nexport class TracerMetrics {\n  private readonly startedSpans: Counter;\n  private readonly liveSpans: UpDownCounter;\n\n  constructor(meter: Meter) {\n    this.startedSpans = meter.createCounter(METRIC_OTEL_SDK_SPAN_STARTED, {\n      unit: '{span}',\n      description: 'The number of created spans.',\n    });\n\n    this.liveSpans = meter.createUpDownCounter(METRIC_OTEL_SDK_SPAN_LIVE, {\n      unit: '{span}',\n      description: 'The number of currently live spans.',\n    });\n  }\n\n  startSpan(\n    parentSpanCtx: SpanContext | undefined,\n    samplingDecision: SamplingDecision\n  ): () => void {\n    const samplingDecisionStr = samplingDecisionToString(samplingDecision);\n    this.startedSpans.add(1, {\n      [ATTR_OTEL_SPAN_PARENT_ORIGIN]: parentOrigin(parentSpanCtx),\n      [ATTR_OTEL_SPAN_SAMPLING_RESULT]: samplingDecisionStr,\n    });\n\n    if (samplingDecision === SamplingDecision.NOT_RECORD) {\n      return () => {};\n    }\n\n    const liveSpanAttributes = {\n      [ATTR_OTEL_SPAN_SAMPLING_RESULT]: samplingDecisionStr,\n    };\n    this.liveSpans.add(1, liveSpanAttributes);\n    return () => {\n      this.liveSpans.add(-1, liveSpanAttributes);\n    };\n  }\n}\n\nfunction parentOrigin(parentSpanContext: SpanContext | undefined): string {\n  if (!parentSpanContext) {\n    return 'none';\n  }\n  if (parentSpanContext.isRemote) {\n    return 'remote';\n  }\n  return 'local';\n}\n\nfunction samplingDecisionToString(decision: SamplingDecision): string {\n  switch (decision) {\n    case SamplingDecision.RECORD_AND_SAMPLED:\n      return 'RECORD_AND_SAMPLE';\n    case SamplingDecision.RECORD:\n      return 'RECORD_ONLY';\n    case SamplingDecision.NOT_RECORD:\n      return 'DROP';\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '2.10.0';\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport * as api from '@opentelemetry/api';\nimport type { InstrumentationScope } from '@opentelemetry/core';\nimport { sanitizeAttributes, isTracingSuppressed } from '@opentelemetry/core';\nimport { SpanImpl } from './Span';\nimport type { SpanLimits, TracerOptions } from './types';\nimport type { SpanProcessor } from './SpanProcessor';\nimport type { Sampler } from './Sampler';\nimport type { IdGenerator } from './IdGenerator';\nimport type { Resource } from '@opentelemetry/resources';\nimport { TracerMetrics } from './TracerMetrics';\nimport { VERSION } from './version';\nimport type { InspectFn, InspectStylizeOptions } from './inspect';\nimport {\n  formatInspect,\n  inspectCustom,\n  settledResourceAttributes,\n} from './inspect';\n\n/**\n * This class represents a basic tracer.\n */\nexport class Tracer implements api.Tracer {\n  private readonly _sampler: Sampler;\n  private readonly _spanLimits: SpanLimits;\n  private readonly _idGenerator: IdGenerator;\n  readonly instrumentationScope: InstrumentationScope;\n\n  private readonly _resource: Resource;\n  private readonly _spanProcessor: SpanProcessor;\n  private readonly _tracerMetrics: TracerMetrics;\n\n  /**\n   * Constructs a new Tracer instance.\n   */\n  constructor(\n    instrumentationScope: InstrumentationScope,\n    options: TracerOptions\n  ) {\n    this.instrumentationScope = instrumentationScope;\n    this._sampler = options.sampler;\n    this._spanLimits = options.spanLimits;\n    this._resource = options.resource;\n    this._idGenerator = options.idGenerator;\n    this._spanProcessor = options.spanProcessor;\n\n    const meter = options.meterProvider.getMeter(\n      '@opentelemetry/sdk-trace',\n      VERSION\n    );\n    this._tracerMetrics = new TracerMetrics(meter);\n  }\n\n  /**\n   * Starts a new Span or returns the default NoopSpan based on the sampling\n   * decision.\n   */\n  startSpan(\n    name: string,\n    options: api.SpanOptions = {},\n    context = api.context.active()\n  ): api.Span {\n    // remove span from context in case a root span is requested via options\n    if (options.root) {\n      context = api.trace.deleteSpan(context);\n    }\n    const parentSpan = api.trace.getSpan(context);\n\n    if (isTracingSuppressed(context)) {\n      api.diag.debug('Instrumentation suppressed, returning Noop Span');\n      const nonRecordingSpan = api.trace.wrapSpanContext(\n        api.INVALID_SPAN_CONTEXT\n      );\n      return nonRecordingSpan;\n    }\n\n    const parentSpanContext = parentSpan?.spanContext();\n    const spanId = this._idGenerator.generateSpanId();\n    let validParentSpanContext;\n    let traceId;\n    let traceState;\n    if (\n      !parentSpanContext ||\n      !api.trace.isSpanContextValid(parentSpanContext)\n    ) {\n      // New root span.\n      traceId = this._idGenerator.generateTraceId();\n    } else {\n      // New child span.\n      traceId = parentSpanContext.traceId;\n      traceState = parentSpanContext.traceState;\n      validParentSpanContext = parentSpanContext;\n    }\n\n    const spanKind = options.kind ?? api.SpanKind.INTERNAL;\n    const links = (options.links ?? []).map(link => {\n      return {\n        context: link.context,\n        attributes: sanitizeAttributes(link.attributes),\n      };\n    });\n    const attributes = sanitizeAttributes(options.attributes);\n    // make sampling decision\n    const samplingResult = this._sampler.shouldSample(\n      context,\n      traceId,\n      name,\n      spanKind,\n      attributes,\n      links\n    );\n\n    const recordEndMetrics = this._tracerMetrics.startSpan(\n      parentSpanContext,\n      samplingResult.decision\n    );\n\n    traceState = samplingResult.traceState ?? traceState;\n\n    const traceFlags =\n      samplingResult.decision === api.SamplingDecision.RECORD_AND_SAMPLED\n        ? api.TraceFlags.SAMPLED\n        : api.TraceFlags.NONE;\n    const spanContext = { traceId, spanId, traceFlags, traceState };\n    if (samplingResult.decision === api.SamplingDecision.NOT_RECORD) {\n      api.diag.debug(\n        'Recording is off, propagating context in a non-recording span'\n      );\n      const nonRecordingSpan = api.trace.wrapSpanContext(spanContext);\n      return nonRecordingSpan;\n    }\n\n    // Set initial span attributes. The attributes object may have been mutated\n    // by the sampler, so we sanitize the merged attributes before setting them.\n    const initAttributes = sanitizeAttributes(\n      Object.assign(attributes, samplingResult.attributes)\n    );\n\n    const span = new SpanImpl({\n      resource: this._resource,\n      scope: this.instrumentationScope,\n      context,\n      spanContext,\n      name,\n      kind: spanKind,\n      links,\n      parentSpanContext: validParentSpanContext,\n      attributes: initAttributes,\n      startTime: options.startTime,\n      spanProcessor: this._spanProcessor,\n      spanLimits: this._spanLimits,\n      recordEndMetrics,\n    });\n    return span;\n  }\n\n  /**\n   * Starts a new {@link Span} and calls the given function passing it the\n   * created span as first argument.\n   * Additionally the new span gets set in context and this context is activated\n   * for the duration of the function call.\n   *\n   * **Important**: The callback function is responsible for calling `span.end()`\n   * to finish the span. Unlike some other OpenTelemetry implementations, the span\n   * is NOT automatically ended when the callback returns. If `span.end()` is not\n   * called, the span will never be exported and will be silently lost.\n   *\n   * @param name The name of the span\n   * @param [options] SpanOptions used for span creation\n   * @param [context] Context to use to extract parent\n   * @param fn function called in the context of the span and receives the newly created span as an argument\n   * @returns return value of fn\n   * @example\n   *   const something = tracer.startActiveSpan('op', span => {\n   *     try {\n   *       do some work\n   *       span.setStatus({code: SpanStatusCode.OK});\n   *       return something;\n   *     } catch (err) {\n   *       span.setStatus({\n   *         code: SpanStatusCode.ERROR,\n   *         message: err.message,\n   *       });\n   *       throw err;\n   *     } finally {\n   *       span.end();\n   *     }\n   *   });\n   * @example\n   *   const span = tracer.startActiveSpan('op', span => {\n   *     try {\n   *       do some work\n   *       return span;\n   *     } catch (err) {\n   *       span.setStatus({\n   *         code: SpanStatusCode.ERROR,\n   *         message: err.message,\n   *       });\n   *       throw err;\n   *     }\n   *   });\n   *   do some more work\n   *   span.end();\n   */\n  startActiveSpan<F extends (span: api.Span) => ReturnType<F>>(\n    name: string,\n    fn: F\n  ): ReturnType<F>;\n  startActiveSpan<F extends (span: api.Span) => ReturnType<F>>(\n    name: string,\n    opts: api.SpanOptions,\n    fn: F\n  ): ReturnType<F>;\n  startActiveSpan<F extends (span: api.Span) => ReturnType<F>>(\n    name: string,\n    opts: api.SpanOptions,\n    ctx: api.Context,\n    fn: F\n  ): ReturnType<F>;\n  startActiveSpan<F extends (span: api.Span) => ReturnType<F>>(\n    name: string,\n    arg2?: F | api.SpanOptions,\n    arg3?: F | api.Context,\n    arg4?: F\n  ): ReturnType<F> | undefined {\n    let opts: api.SpanOptions | undefined;\n    let ctx: api.Context | undefined;\n    let fn: F;\n\n    if (arguments.length < 2) {\n      return;\n    } else if (arguments.length === 2) {\n      fn = arg2 as F;\n    } else if (arguments.length === 3) {\n      opts = arg2 as api.SpanOptions | undefined;\n      fn = arg3 as F;\n    } else {\n      opts = arg2 as api.SpanOptions | undefined;\n      ctx = arg3 as api.Context | undefined;\n      fn = arg4 as F;\n    }\n\n    const parentContext = ctx ?? api.context.active();\n    const span = this.startSpan(name, opts, parentContext);\n    const contextWithSpanSet = api.trace.setSpan(parentContext, span);\n\n    return api.context.with(contextWithSpanSet, fn, undefined, span);\n  }\n\n  [inspectCustom](\n    depth: number,\n    options: InspectStylizeOptions | undefined,\n    inspect: InspectFn | undefined\n  ): unknown {\n    const payload = {\n      instrumentationScope: this.instrumentationScope,\n      resource: { attributes: settledResourceAttributes(this._resource) },\n      spanLimits: this._spanLimits,\n    };\n    return formatInspect('Tracer', payload, depth, options, inspect);\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Context } from '@opentelemetry/api';\nimport { globalErrorHandler } from '@opentelemetry/core';\nimport type { ReadableSpan } from './export/ReadableSpan';\nimport type { Span } from './Span';\nimport type { SpanProcessor } from './SpanProcessor';\n\n/**\n * Implementation of the {@link SpanProcessor} that simply forwards all\n * received events to a list of {@link SpanProcessor}s.\n */\nexport class MultiSpanProcessor implements SpanProcessor {\n  private readonly _spanProcessors: SpanProcessor[];\n  constructor(spanProcessors: SpanProcessor[]) {\n    this._spanProcessors = spanProcessors;\n  }\n\n  forceFlush(): Promise<void> {\n    const promises: Promise<void>[] = [];\n\n    for (const spanProcessor of this._spanProcessors) {\n      promises.push(spanProcessor.forceFlush());\n    }\n    return new Promise(resolve => {\n      Promise.all(promises)\n        .then(() => {\n          resolve();\n        })\n        .catch(error => {\n          globalErrorHandler(\n            error || new Error('MultiSpanProcessor: forceFlush failed')\n          );\n          resolve();\n        });\n    });\n  }\n\n  onStart(span: Span, context: Context): void {\n    for (const spanProcessor of this._spanProcessors) {\n      spanProcessor.onStart(span, context);\n    }\n  }\n\n  onEnding(span: Span): void {\n    for (const spanProcessor of this._spanProcessors) {\n      if (spanProcessor.onEnding) {\n        spanProcessor.onEnding(span);\n      }\n    }\n  }\n\n  onEnd(span: ReadableSpan): void {\n    for (const spanProcessor of this._spanProcessors) {\n      spanProcessor.onEnd(span);\n    }\n  }\n\n  shutdown(): Promise<void> {\n    const promises: Promise<void>[] = [];\n\n    for (const spanProcessor of this._spanProcessors) {\n      promises.push(spanProcessor.shutdown());\n    }\n    return new Promise((resolve, reject) => {\n      Promise.all(promises).then(() => {\n        resolve();\n      }, reject);\n    });\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Sampler, SamplingResult } from '../Sampler';\nimport { SamplingDecision } from '../Sampler';\n\n/** Sampler that samples no traces. */\nexport class AlwaysOffSampler implements Sampler {\n  shouldSample(): SamplingResult {\n    return {\n      decision: SamplingDecision.NOT_RECORD,\n    };\n  }\n\n  toString(): string {\n    return 'AlwaysOffSampler';\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Sampler, SamplingResult } from '../Sampler';\nimport { SamplingDecision } from '../Sampler';\n\n/** Sampler that samples all traces. */\nexport class AlwaysOnSampler implements Sampler {\n  shouldSample(): SamplingResult {\n    return {\n      decision: SamplingDecision.RECORD_AND_SAMPLED,\n    };\n  }\n\n  toString(): string {\n    return 'AlwaysOnSampler';\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Context, Link, Attributes, SpanKind } from '@opentelemetry/api';\nimport { isSpanContextValid, TraceFlags, trace } from '@opentelemetry/api';\nimport { globalErrorHandler } from '@opentelemetry/core';\nimport { AlwaysOffSampler } from './AlwaysOffSampler';\nimport { AlwaysOnSampler } from './AlwaysOnSampler';\nimport type { Sampler, SamplingResult } from '../Sampler';\n\n/**\n * A composite sampler that either respects the parent span's sampling decision\n * or delegates to `delegateSampler` for root spans.\n */\nexport class ParentBasedSampler implements Sampler {\n  private _root: Sampler;\n  private _remoteParentSampled: Sampler;\n  private _remoteParentNotSampled: Sampler;\n  private _localParentSampled: Sampler;\n  private _localParentNotSampled: Sampler;\n\n  constructor(config: ParentBasedSamplerConfig) {\n    this._root = config.root;\n\n    if (!this._root) {\n      globalErrorHandler(\n        new Error('ParentBasedSampler must have a root sampler configured')\n      );\n      this._root = new AlwaysOnSampler();\n    }\n\n    this._remoteParentSampled =\n      config.remoteParentSampled ?? new AlwaysOnSampler();\n    this._remoteParentNotSampled =\n      config.remoteParentNotSampled ?? new AlwaysOffSampler();\n    this._localParentSampled =\n      config.localParentSampled ?? new AlwaysOnSampler();\n    this._localParentNotSampled =\n      config.localParentNotSampled ?? new AlwaysOffSampler();\n  }\n\n  shouldSample(\n    context: Context,\n    traceId: string,\n    spanName: string,\n    spanKind: SpanKind,\n    attributes: Attributes,\n    links: Link[]\n  ): SamplingResult {\n    const parentContext = trace.getSpanContext(context);\n\n    if (!parentContext || !isSpanContextValid(parentContext)) {\n      return this._root.shouldSample(\n        context,\n        traceId,\n        spanName,\n        spanKind,\n        attributes,\n        links\n      );\n    }\n\n    if (parentContext.isRemote) {\n      if (parentContext.traceFlags & TraceFlags.SAMPLED) {\n        return this._remoteParentSampled.shouldSample(\n          context,\n          traceId,\n          spanName,\n          spanKind,\n          attributes,\n          links\n        );\n      }\n      return this._remoteParentNotSampled.shouldSample(\n        context,\n        traceId,\n        spanName,\n        spanKind,\n        attributes,\n        links\n      );\n    }\n\n    if (parentContext.traceFlags & TraceFlags.SAMPLED) {\n      return this._localParentSampled.shouldSample(\n        context,\n        traceId,\n        spanName,\n        spanKind,\n        attributes,\n        links\n      );\n    }\n\n    return this._localParentNotSampled.shouldSample(\n      context,\n      traceId,\n      spanName,\n      spanKind,\n      attributes,\n      links\n    );\n  }\n\n  toString(): string {\n    return `ParentBased{root=${this._root.toString()}, remoteParentSampled=${this._remoteParentSampled.toString()}, remoteParentNotSampled=${this._remoteParentNotSampled.toString()}, localParentSampled=${this._localParentSampled.toString()}, localParentNotSampled=${this._localParentNotSampled.toString()}}`;\n  }\n}\n\ninterface ParentBasedSamplerConfig {\n  /** Sampler called for spans with no parent */\n  root: Sampler;\n  /** Sampler called for spans with a remote parent which was sampled. Default AlwaysOn */\n  remoteParentSampled?: Sampler;\n  /** Sampler called for spans with a remote parent which was not sampled. Default AlwaysOff */\n  remoteParentNotSampled?: Sampler;\n  /** Sampler called for spans with a local parent which was sampled. Default AlwaysOn */\n  localParentSampled?: Sampler;\n  /** Sampler called for spans with a local parent which was not sampled. Default AlwaysOff */\n  localParentNotSampled?: Sampler;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n  Attributes,\n  Counter,\n  Meter,\n  ObservableCallback,\n  ObservableUpDownCounter,\n} from '@opentelemetry/api';\nimport { ATTR_ERROR_TYPE } from '@opentelemetry/semantic-conventions';\nimport {\n  ATTR_OTEL_COMPONENT_NAME,\n  ATTR_OTEL_COMPONENT_TYPE,\n  METRIC_OTEL_SDK_PROCESSOR_SPAN_PROCESSED,\n  METRIC_OTEL_SDK_PROCESSOR_SPAN_QUEUE_CAPACITY,\n  METRIC_OTEL_SDK_PROCESSOR_SPAN_QUEUE_SIZE,\n} from '../semconv';\n\nconst componentCounter = new Map<string, number>();\n\ninterface QueueConfig {\n  capacity: number;\n  getQueueSize: () => number;\n}\n\nexport class SpanProcessorMetrics {\n  private readonly processedSpans: Counter;\n  private readonly queueSize: ObservableUpDownCounter | undefined;\n  private readonly queueSizeCallback: ObservableCallback | undefined;\n\n  private readonly standardAttrs: Attributes;\n  private readonly droppedAttrs: Attributes;\n\n  constructor(componentType: string, meter: Meter, queueConfig?: QueueConfig) {\n    const counter = componentCounter.get(componentType) ?? 0;\n    componentCounter.set(componentType, counter + 1);\n\n    this.standardAttrs = {\n      [ATTR_OTEL_COMPONENT_TYPE]: componentType,\n      [ATTR_OTEL_COMPONENT_NAME]: `${componentType}/${counter}`,\n    };\n\n    this.droppedAttrs = {\n      ...this.standardAttrs,\n      [ATTR_ERROR_TYPE]: 'queue_full',\n    };\n\n    this.processedSpans = meter.createCounter(\n      METRIC_OTEL_SDK_PROCESSOR_SPAN_PROCESSED,\n      {\n        unit: '{span}',\n        description:\n          'The number of spans for which the processing has finished, either successful or failed.',\n      }\n    );\n\n    if (queueConfig) {\n      const { capacity, getQueueSize } = queueConfig;\n      const queueCapacity = meter.createUpDownCounter(\n        METRIC_OTEL_SDK_PROCESSOR_SPAN_QUEUE_CAPACITY,\n        {\n          unit: '{span}',\n          description:\n            'The maximum number of spans the queue of a given instance of an SDK span processor can hold.',\n        }\n      );\n      queueCapacity.add(capacity, this.standardAttrs);\n\n      this.queueSize = meter.createObservableUpDownCounter(\n        METRIC_OTEL_SDK_PROCESSOR_SPAN_QUEUE_SIZE,\n        {\n          unit: '{span}',\n          description:\n            'The number of spans in the queue of a given instance of an SDK span processor.',\n        }\n      );\n      this.queueSizeCallback = result =>\n        result.observe(getQueueSize(), this.standardAttrs);\n      this.queueSize.addCallback(this.queueSizeCallback);\n    }\n  }\n\n  dropSpans(count: number) {\n    this.processedSpans.add(count, this.droppedAttrs);\n  }\n\n  finishSpans(count: number, error: Error | undefined) {\n    if (!error) {\n      this.processedSpans.add(count, this.standardAttrs);\n      return;\n    }\n\n    const attrs = {\n      ...this.standardAttrs,\n      [ATTR_ERROR_TYPE]: error.name,\n    };\n    this.processedSpans.add(count, attrs);\n  }\n\n  shutdown() {\n    if (this.queueSize && this.queueSizeCallback) {\n      this.queueSize.removeCallback(this.queueSizeCallback);\n    }\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Context } from '@opentelemetry/api';\nimport { context, createNoopMeter, diag, TraceFlags } from '@opentelemetry/api';\nimport {\n  BindOnceFuture,\n  ExportResultCode,\n  globalErrorHandler,\n  suppressTracing,\n} from '@opentelemetry/core';\nimport type { Span } from '../Span';\nimport type { SpanProcessor } from '../SpanProcessor';\nimport type { BatchSpanProcessorOptions } from '../types';\nimport type { ReadableSpan } from './ReadableSpan';\nimport type { SpanExporter } from './SpanExporter';\nimport { SpanProcessorMetrics } from './SpanProcessorMetrics';\nimport { OTEL_COMPONENT_TYPE_VALUE_BATCHING_SPAN_PROCESSOR } from '../semconv';\n\n/**\n * Implementation of the {@link SpanProcessor} that batches spans exported by\n * the SDK then pushes them to the exporter pipeline.\n */\nexport abstract class BatchSpanProcessorBase<\n  T extends BatchSpanProcessorOptions,\n> implements SpanProcessor\n{\n  private readonly _maxExportBatchSize: number;\n  private readonly _maxQueueSize: number;\n  private readonly _scheduledDelayMillis: number;\n  private readonly _exportTimeoutMillis: number;\n  private readonly _exporter: SpanExporter;\n  private readonly _metrics: SpanProcessorMetrics;\n\n  private _isExporting = false;\n  private _finishedSpans: ReadableSpan[] = [];\n  private _timer: NodeJS.Timeout | number | undefined;\n  private _shutdownOnce: BindOnceFuture<void>;\n  private _droppedSpansCount: number = 0;\n\n  constructor(options: T) {\n    this._exporter = options.exporter;\n    this._maxExportBatchSize = options.maxExportBatchSize ?? 512;\n    this._maxQueueSize = options.maxQueueSize ?? 2048;\n    this._scheduledDelayMillis = options.scheduledDelayMillis ?? 5000;\n    this._exportTimeoutMillis = options.exportTimeoutMillis ?? 30000;\n\n    this._shutdownOnce = new BindOnceFuture(this._shutdown, this);\n\n    if (this._maxExportBatchSize > this._maxQueueSize) {\n      diag.warn(\n        'BatchSpanProcessor: maxExportBatchSize must be smaller or equal to maxQueueSize, setting maxExportBatchSize to match maxQueueSize'\n      );\n      this._maxExportBatchSize = this._maxQueueSize;\n    }\n\n    const meter = options.selfObsMeterProvider\n      ? options.selfObsMeterProvider.getMeter('@opentelemetry/sdk-trace')\n      : createNoopMeter();\n    this._metrics = new SpanProcessorMetrics(\n      OTEL_COMPONENT_TYPE_VALUE_BATCHING_SPAN_PROCESSOR,\n      meter,\n      {\n        capacity: this._maxQueueSize,\n        getQueueSize: () => this._finishedSpans.length,\n      }\n    );\n  }\n\n  forceFlush(): Promise<void> {\n    if (this._shutdownOnce.isCalled) {\n      return this._shutdownOnce.promise;\n    }\n    return this._flushAll();\n  }\n\n  // does nothing.\n  onStart(_span: Span, _parentContext: Context): void {}\n\n  onEnd(span: ReadableSpan): void {\n    if (this._shutdownOnce.isCalled) {\n      return;\n    }\n\n    if ((span.spanContext().traceFlags & TraceFlags.SAMPLED) === 0) {\n      return;\n    }\n\n    this._addToBuffer(span);\n  }\n\n  shutdown(): Promise<void> {\n    return this._shutdownOnce.call();\n  }\n\n  private _shutdown() {\n    return Promise.resolve()\n      .then(() => {\n        return this.onShutdown();\n      })\n      .then(() => {\n        return this._flushAll();\n      })\n      .then(() => {\n        this._metrics.shutdown();\n        return this._exporter.shutdown();\n      });\n  }\n\n  /** Add a span in the buffer. */\n  private _addToBuffer(span: ReadableSpan) {\n    if (this._finishedSpans.length >= this._maxQueueSize) {\n      // limit reached, drop span\n\n      if (this._droppedSpansCount === 0) {\n        diag.debug('maxQueueSize reached, dropping spans');\n      }\n      this._droppedSpansCount++;\n      this._metrics.dropSpans(1);\n\n      return;\n    }\n\n    if (this._droppedSpansCount > 0) {\n      // some spans were dropped, log once with count of spans dropped\n      diag.warn(\n        `Dropped ${this._droppedSpansCount} spans because maxQueueSize reached`\n      );\n      this._droppedSpansCount = 0;\n    }\n\n    this._finishedSpans.push(span);\n    this._maybeStartTimer();\n  }\n\n  /**\n   * Send all spans to the exporter respecting the batch size limit\n   * This function is used only on forceFlush or shutdown,\n   * for all other cases _flush should be used\n   * */\n  private _flushAll(): Promise<void> {\n    return new Promise((resolve, reject) => {\n      const promises = [];\n      // calculate number of batches\n      const count = Math.ceil(\n        this._finishedSpans.length / this._maxExportBatchSize\n      );\n      for (let i = 0, j = count; i < j; i++) {\n        promises.push(this._flushOneBatch());\n      }\n      Promise.all(promises)\n        .then(() => {\n          resolve();\n        })\n        .catch(reject);\n    });\n  }\n\n  private _flushOneBatch(): Promise<void> {\n    this._clearTimer();\n    if (this._finishedSpans.length === 0) {\n      return Promise.resolve();\n    }\n    return new Promise((resolve, reject) => {\n      const timer = setTimeout(() => {\n        // don't wait anymore for export, this way the next batch can start\n        reject(new Error('Timeout'));\n      }, this._exportTimeoutMillis);\n      // prevent downstream exporter calls from generating spans\n      context.with(suppressTracing(context.active()), () => {\n        // Reset the finished spans buffer here because the next invocations of the _flush method\n        // could pass the same finished spans to the exporter if the buffer is cleared\n        // outside the execution of this callback.\n        let spans: ReadableSpan[];\n        if (this._finishedSpans.length <= this._maxExportBatchSize) {\n          spans = this._finishedSpans;\n          this._finishedSpans = [];\n        } else {\n          spans = this._finishedSpans.splice(0, this._maxExportBatchSize);\n        }\n\n        const doExport = () =>\n          this._exporter.export(spans, result => {\n            clearTimeout(timer);\n            this._metrics.finishSpans(spans.length, result.error);\n            if (result.code === ExportResultCode.SUCCESS) {\n              resolve();\n            } else {\n              reject(\n                result.error ??\n                  new Error('BatchSpanProcessor: span export failed')\n              );\n            }\n          });\n\n        let pendingResources: Array<Promise<void>> | null = null;\n        for (let i = 0, len = spans.length; i < len; i++) {\n          const span = spans[i];\n          if (\n            span.resource.asyncAttributesPending &&\n            span.resource.waitForAsyncAttributes\n          ) {\n            pendingResources ??= [];\n            pendingResources.push(span.resource.waitForAsyncAttributes());\n          }\n        }\n\n        // Avoid scheduling a promise to make the behavior more predictable and easier to test\n        if (pendingResources === null) {\n          doExport();\n        } else {\n          Promise.all(pendingResources).then(doExport, err => {\n            globalErrorHandler(err);\n            reject(err);\n          });\n        }\n      });\n    });\n  }\n\n  private _maybeStartTimer() {\n    if (this._isExporting) return;\n    const flush = () => {\n      this._isExporting = true;\n      this._flushOneBatch()\n        .finally(() => {\n          this._isExporting = false;\n          if (this._finishedSpans.length > 0) {\n            this._clearTimer();\n            this._maybeStartTimer();\n          }\n        })\n        .catch(e => {\n          this._isExporting = false;\n          globalErrorHandler(e);\n        });\n    };\n    // we only wait if the queue doesn't have enough elements yet\n    if (this._finishedSpans.length >= this._maxExportBatchSize) {\n      return flush();\n    }\n    if (this._timer !== undefined) return;\n    this._timer = setTimeout(() => flush(), this._scheduledDelayMillis);\n\n    // depending on runtime, this may be a 'number' or NodeJS.Timeout\n    if (typeof this._timer !== 'number') {\n      this._timer.unref();\n    }\n  }\n\n  private _clearTimer() {\n    if (this._timer !== undefined) {\n      clearTimeout(this._timer);\n      this._timer = undefined;\n    }\n  }\n\n  protected abstract onShutdown(): void;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { BatchSpanProcessorBase } from '../../../export/BatchSpanProcessorBase';\nimport type { BatchSpanProcessorOptions } from '../../../types';\n\nexport class BatchSpanProcessor extends BatchSpanProcessorBase<BatchSpanProcessorOptions> {\n  protected onShutdown(): void {}\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { IdGenerator } from '../../IdGenerator';\n\nconst SPAN_ID_BYTES = 8;\nconst TRACE_ID_BYTES = 16;\n\nexport class RandomIdGenerator implements IdGenerator {\n  /**\n   * Returns a random 16-byte trace ID formatted/encoded as a 32 lowercase hex\n   * characters corresponding to 128 bits.\n   */\n  generateTraceId = getIdGenerator(TRACE_ID_BYTES);\n\n  /**\n   * Returns a random 8-byte span ID formatted/encoded as a 16 lowercase hex\n   * characters corresponding to 64 bits.\n   */\n  generateSpanId = getIdGenerator(SPAN_ID_BYTES);\n}\n\nconst SHARED_BUFFER = Buffer.allocUnsafe(TRACE_ID_BYTES);\nfunction getIdGenerator(bytes: number): () => string {\n  return function generateId() {\n    for (let i = 0; i < bytes / 4; i++) {\n      // unsigned right shift drops decimal part of the number\n      // it is required because if a number between 2**32 and 2**32 - 1 is generated, an out of range error is thrown by writeUInt32BE\n      SHARED_BUFFER.writeUInt32BE((Math.random() * 2 ** 32) >>> 0, i * 4);\n    }\n\n    // If buffer is all 0, set the last byte to 1 to guarantee a valid w3c id is generated\n    for (let i = 0; i < bytes; i++) {\n      if (SHARED_BUFFER[i] > 0) {\n        break;\n      } else if (i === bytes - 1) {\n        SHARED_BUFFER[bytes - 1] = 1;\n      }\n    }\n\n    return SHARED_BUFFER.toString('hex', 0, bytes);\n  };\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport { BatchSpanProcessor } from './export/BatchSpanProcessor';\nexport { RandomIdGenerator } from './RandomIdGenerator';\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport { BatchSpanProcessor, RandomIdGenerator } from './node';\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n  TracerProvider as ApiTracerProvider,\n  Tracer as ApiTracer,\n} from '@opentelemetry/api';\nimport { createNoopMeter } from '@opentelemetry/api';\nimport type { Resource } from '@opentelemetry/resources';\nimport { defaultResource } from '@opentelemetry/resources';\nimport type { SpanProcessor } from './SpanProcessor';\nimport { Tracer } from './Tracer';\nimport { MultiSpanProcessor } from './MultiSpanProcessor';\nimport type { TracerProviderOptions, TracerOptions } from './types';\nimport { ParentBasedSampler } from './sampler/ParentBasedSampler';\nimport { AlwaysOnSampler } from './sampler/AlwaysOnSampler';\nimport { RandomIdGenerator } from './platform';\nimport type { InspectFn, InspectStylizeOptions } from './inspect';\nimport {\n  formatInspect,\n  inspectCustom,\n  settledResourceAttributes,\n} from './inspect';\n\nenum ForceFlushState {\n  'resolved',\n  'timeout',\n  'error',\n  'unresolved',\n}\n\n/**\n * This class represents a basic tracer provider which platform libraries can extend\n */\nexport class TracerProvider implements ApiTracerProvider {\n  private readonly _resource: Resource;\n  private readonly _activeSpanProcessor: MultiSpanProcessor;\n  private readonly _forceFlushTimeoutMillis: number;\n  private readonly _tracerOptions: TracerOptions;\n  private readonly _tracers: Map<string, Tracer> = new Map();\n\n  constructor(options: TracerProviderOptions = {}) {\n    this._forceFlushTimeoutMillis = options.forceFlushTimeoutMillis ?? 30000;\n    this._resource = options.resource ?? defaultResource();\n    const spanProcessors = options.spanProcessors ?? [];\n    this._activeSpanProcessor = new MultiSpanProcessor(spanProcessors);\n\n    this._tracerOptions = {\n      resource: this._resource,\n      sampler:\n        options.sampler ??\n        new ParentBasedSampler({\n          root: new AlwaysOnSampler(),\n        }),\n      spanLimits: {\n        attributeCountLimit: options.spanLimits?.attributeCountLimit ?? 128,\n        attributeValueLengthLimit:\n          options.spanLimits?.attributeValueLengthLimit ?? Infinity,\n        eventCountLimit: options.spanLimits?.eventCountLimit ?? 128,\n        linkCountLimit: options.spanLimits?.linkCountLimit ?? 128,\n        attributePerEventCountLimit:\n          options.spanLimits?.attributePerEventCountLimit ?? 128,\n        attributePerLinkCountLimit:\n          options.spanLimits?.attributePerLinkCountLimit ?? 128,\n      },\n      idGenerator: options.idGenerator || new RandomIdGenerator(),\n      spanProcessor: this._activeSpanProcessor,\n      meterProvider: options.meterProvider ?? {\n        getMeter() {\n          return createNoopMeter();\n        },\n      },\n    };\n  }\n\n  getTracer(\n    name: string,\n    version?: string,\n    options?: { schemaUrl?: string }\n  ): ApiTracer {\n    const key = `${name}@${version || ''}:${options?.schemaUrl || ''}`;\n    if (!this._tracers.has(key)) {\n      this._tracers.set(\n        key,\n        new Tracer(\n          { name, version, schemaUrl: options?.schemaUrl },\n          this._tracerOptions\n        )\n      );\n    }\n\n    return this._tracers.get(key)!;\n  }\n\n  forceFlush(): Promise<void> {\n    const timeout = this._forceFlushTimeoutMillis;\n    const promises = this._activeSpanProcessor['_spanProcessors'].map(\n      (spanProcessor: SpanProcessor) => {\n        return new Promise(resolve => {\n          let state: ForceFlushState;\n          const timeoutInterval = setTimeout(() => {\n            resolve(\n              new Error(\n                `Span processor did not completed within timeout period of ${timeout} ms`\n              )\n            );\n            state = ForceFlushState.timeout;\n          }, timeout);\n\n          spanProcessor\n            .forceFlush()\n            .then(() => {\n              clearTimeout(timeoutInterval);\n              if (state !== ForceFlushState.timeout) {\n                state = ForceFlushState.resolved;\n                resolve(state);\n              }\n            })\n            .catch(error => {\n              clearTimeout(timeoutInterval);\n              state = ForceFlushState.error;\n              resolve(error);\n            });\n        });\n      }\n    );\n\n    return new Promise<void>((resolve, reject) => {\n      Promise.all(promises)\n        .then(results => {\n          const errors = results.filter(\n            result => result !== ForceFlushState.resolved\n          );\n          if (errors.length > 0) {\n            reject(errors);\n          } else {\n            resolve();\n          }\n        })\n        .catch(error => reject([error]));\n    });\n  }\n\n  shutdown(): Promise<void> {\n    return this._activeSpanProcessor.shutdown();\n  }\n\n  [inspectCustom](\n    depth: number,\n    options: InspectStylizeOptions | undefined,\n    inspect: InspectFn | undefined\n  ): unknown {\n    const processors = this._activeSpanProcessor[\n      '_spanProcessors'\n    ] as SpanProcessor[];\n    const payload = {\n      resource: { attributes: settledResourceAttributes(this._resource) },\n      tracers: Array.from(this._tracers.keys()),\n      spanProcessors: processors.map(\n        p => p.constructor?.name ?? 'SpanProcessor'\n      ),\n    };\n    return formatInspect('TracerProvider', payload, depth, options, inspect);\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { SpanExporter } from './SpanExporter';\nimport type { ReadableSpan } from './ReadableSpan';\nimport type { ExportResult } from '@opentelemetry/core';\nimport { ExportResultCode, hrTimeToMicroseconds } from '@opentelemetry/core';\n\n/**\n * This is implementation of {@link SpanExporter} that prints spans to the\n * console. This class can be used for diagnostic purposes.\n *\n * NOTE: This {@link SpanExporter} is intended for diagnostics use only, output rendered to the console may change at any time.\n */\n\n/* eslint-disable no-console */\nexport class ConsoleSpanExporter implements SpanExporter {\n  /**\n   * Export spans.\n   * @param spans\n   * @param resultCallback\n   */\n  export(\n    spans: ReadableSpan[],\n    resultCallback: (result: ExportResult) => void\n  ): void {\n    return this._sendSpans(spans, resultCallback);\n  }\n\n  /**\n   * Shutdown the exporter.\n   */\n  shutdown(): Promise<void> {\n    this._sendSpans([]);\n    return this.forceFlush();\n  }\n\n  /**\n   * Exports any pending spans in exporter\n   */\n  forceFlush(): Promise<void> {\n    return Promise.resolve();\n  }\n\n  /**\n   * converts span info into more readable format\n   * @param span\n   */\n  private _exportInfo(span: ReadableSpan) {\n    return {\n      resource: {\n        attributes: span.resource.attributes,\n      },\n      instrumentationScope: span.instrumentationScope,\n      traceId: span.spanContext().traceId,\n      parentSpanContext: span.parentSpanContext,\n      traceState: span.spanContext().traceState?.serialize(),\n      name: span.name,\n      id: span.spanContext().spanId,\n      kind: span.kind,\n      timestamp: hrTimeToMicroseconds(span.startTime),\n      duration: hrTimeToMicroseconds(span.duration),\n      attributes: span.attributes,\n      status: span.status,\n      events: span.events,\n      links: span.links,\n    };\n  }\n\n  /**\n   * Showing spans in console\n   * @param spans\n   * @param done\n   */\n  private _sendSpans(\n    spans: ReadableSpan[],\n    done?: (result: ExportResult) => void\n  ): void {\n    for (const span of spans) {\n      console.dir(this._exportInfo(span), { depth: 3 });\n    }\n    if (done) {\n      return done({ code: ExportResultCode.SUCCESS });\n    }\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { SpanExporter } from './SpanExporter';\nimport type { ReadableSpan } from './ReadableSpan';\nimport type { ExportResult } from '@opentelemetry/core';\nimport { ExportResultCode } from '@opentelemetry/core';\n\n/**\n * This class can be used for testing purposes. It stores the exported spans\n * in a list in memory that can be retrieved using the `getFinishedSpans()`\n * method.\n */\nexport class InMemorySpanExporter implements SpanExporter {\n  private _finishedSpans: ReadableSpan[] = [];\n  /**\n   * Indicates if the exporter has been \"shutdown.\"\n   * When false, exported spans will not be stored in-memory.\n   */\n  protected _stopped = false;\n\n  export(\n    spans: ReadableSpan[],\n    resultCallback: (result: ExportResult) => void\n  ): void {\n    if (this._stopped)\n      return resultCallback({\n        code: ExportResultCode.FAILED,\n        error: new Error('Exporter has been stopped'),\n      });\n    this._finishedSpans.push(...spans);\n\n    setTimeout(() => resultCallback({ code: ExportResultCode.SUCCESS }), 0);\n  }\n\n  shutdown(): Promise<void> {\n    this._stopped = true;\n    this._finishedSpans = [];\n    return this.forceFlush();\n  }\n\n  /**\n   * Exports any pending spans in the exporter\n   */\n  forceFlush(): Promise<void> {\n    return Promise.resolve();\n  }\n\n  reset(): void {\n    this._finishedSpans = [];\n  }\n\n  getFinishedSpans(): ReadableSpan[] {\n    return this._finishedSpans;\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Context } from '@opentelemetry/api';\nimport { createNoopMeter, TraceFlags } from '@opentelemetry/api';\nimport {\n  internal,\n  ExportResultCode,\n  globalErrorHandler,\n  BindOnceFuture,\n} from '@opentelemetry/core';\nimport type { Span } from '../Span';\nimport type { SpanProcessor } from '../SpanProcessor';\nimport type { SimpleSpanProcessorOptions } from '../types';\nimport type { ReadableSpan } from './ReadableSpan';\nimport type { SpanExporter } from './SpanExporter';\nimport { SpanProcessorMetrics } from './SpanProcessorMetrics';\nimport { OTEL_COMPONENT_TYPE_VALUE_SIMPLE_SPAN_PROCESSOR } from '../semconv';\n\n/**\n * An implementation of the {@link SpanProcessor} that converts the {@link Span}\n * to {@link ReadableSpan} and passes it to the configured exporter.\n *\n * Only spans that are sampled are converted.\n *\n * NOTE: This {@link SpanProcessor} exports every ended span individually instead of batching spans together, which causes significant performance overhead with most exporters. For production use, please consider using the {@link BatchSpanProcessor} instead.\n */\nexport class SimpleSpanProcessor implements SpanProcessor {\n  private readonly _exporter: SpanExporter;\n  private readonly _metrics: SpanProcessorMetrics;\n  private _shutdownOnce: BindOnceFuture<void>;\n  private _pendingExports: Set<Promise<void>>;\n\n  constructor(options: SimpleSpanProcessorOptions) {\n    this._exporter = options.exporter;\n    this._shutdownOnce = new BindOnceFuture(this._shutdown, this);\n    this._pendingExports = new Set<Promise<void>>();\n\n    const meter = options.selfObsMeterProvider\n      ? options.selfObsMeterProvider.getMeter('@opentelemetry/sdk-trace')\n      : createNoopMeter();\n    this._metrics = new SpanProcessorMetrics(\n      OTEL_COMPONENT_TYPE_VALUE_SIMPLE_SPAN_PROCESSOR,\n      meter\n    );\n  }\n\n  async forceFlush(): Promise<void> {\n    let pendingExportError: unknown;\n    let pendingExportRejected = false;\n    try {\n      await Promise.all(Array.from(this._pendingExports));\n    } catch (err) {\n      pendingExportError = err;\n      pendingExportRejected = true;\n    }\n    if (this._exporter.forceFlush) {\n      await this._exporter.forceFlush();\n    }\n    if (pendingExportRejected) {\n      throw pendingExportError;\n    }\n  }\n\n  onStart(_span: Span, _parentContext: Context): void {}\n\n  onEnd(span: ReadableSpan): void {\n    if (this._shutdownOnce.isCalled) {\n      return;\n    }\n\n    if ((span.spanContext().traceFlags & TraceFlags.SAMPLED) === 0) {\n      return;\n    }\n\n    const pendingExport = this._doExport(span);\n    // Enqueue this export to the pending list so it can be flushed by the user.\n    this._pendingExports.add(pendingExport);\n    void pendingExport.then(\n      () => {\n        this._pendingExports.delete(pendingExport);\n      },\n      err => {\n        globalErrorHandler(err);\n        this._pendingExports.delete(pendingExport);\n      }\n    );\n  }\n\n  private async _doExport(span: ReadableSpan): Promise<void> {\n    if (span.resource.asyncAttributesPending) {\n      // Ensure resource is fully resolved before exporting.\n      await span.resource.waitForAsyncAttributes?.();\n    }\n\n    const result = await internal._export(this._exporter, [span]);\n    this._metrics.finishSpans(1, result.error);\n    if (result.code !== ExportResultCode.SUCCESS) {\n      throw (\n        result.error ??\n        new Error(`SimpleSpanProcessor: span export failed (status ${result})`)\n      );\n    }\n  }\n\n  shutdown(): Promise<void> {\n    return this._shutdownOnce.call();\n  }\n\n  private _shutdown(): Promise<void> {\n    this._metrics.shutdown();\n    return this._exporter.shutdown();\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Context } from '@opentelemetry/api';\nimport type { ReadableSpan } from './ReadableSpan';\nimport type { Span } from '../Span';\nimport type { SpanProcessor } from '../SpanProcessor';\n\n/** No-op implementation of SpanProcessor */\nexport class NoopSpanProcessor implements SpanProcessor {\n  onStart(_span: Span, _context: Context): void {}\n  onEnd(_span: ReadableSpan): void {}\n  shutdown(): Promise<void> {\n    return Promise.resolve();\n  }\n  forceFlush(): Promise<void> {\n    return Promise.resolve();\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Context, Link, Attributes, SpanKind } from '@opentelemetry/api';\nimport type { Sampler, SamplingResult } from '../Sampler';\nimport { SamplingDecision } from '../Sampler';\n\n/**\n * Creates a sampler that wraps a delegate and upgrades NOT_RECORD decisions to\n * RECORD, ensuring all spans are recorded without affecting the sampling rate.\n */\nexport function createAlwaysRecordSampler(delegate: Sampler): Sampler {\n  if (!delegate) {\n    throw new Error('createAlwaysRecordSampler requires a delegate sampler');\n  }\n  return {\n    shouldSample(\n      context: Context,\n      traceId: string,\n      spanName: string,\n      spanKind: SpanKind,\n      attributes: Attributes,\n      links: Link[]\n    ): SamplingResult {\n      const result = delegate.shouldSample(\n        context,\n        traceId,\n        spanName,\n        spanKind,\n        attributes,\n        links\n      );\n      if (result.decision === SamplingDecision.NOT_RECORD) {\n        return {\n          decision: SamplingDecision.RECORD,\n          attributes: result.attributes,\n          traceState: result.traceState,\n        };\n      }\n      return result;\n    },\n    toString(): string {\n      return `AlwaysRecordSampler{${delegate.toString()}}`;\n    },\n  };\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { isValidTraceId } from '@opentelemetry/api';\nimport type { Sampler, SamplingResult } from '../Sampler';\nimport { SamplingDecision } from '../Sampler';\n\n/** Sampler that samples a given fraction of traces based of trace id deterministically. */\nexport class TraceIdRatioBasedSampler implements Sampler {\n  private readonly _ratio;\n  private _upperBound: number;\n\n  constructor(ratio = 0) {\n    this._ratio = this._normalize(ratio);\n    this._upperBound =\n      this._ratio === 1 ? 0x100000000 : Math.floor(this._ratio * 0xffffffff);\n  }\n\n  shouldSample(context: unknown, traceId: string): SamplingResult {\n    return {\n      decision:\n        isValidTraceId(traceId) && this._accumulate(traceId) < this._upperBound\n          ? SamplingDecision.RECORD_AND_SAMPLED\n          : SamplingDecision.NOT_RECORD,\n    };\n  }\n\n  toString(): string {\n    return `TraceIdRatioBased{${this._ratio}}`;\n  }\n\n  private _normalize(ratio: number): number {\n    if (typeof ratio !== 'number' || isNaN(ratio)) return 0;\n    return ratio >= 1 ? 1 : ratio <= 0 ? 0 : ratio;\n  }\n\n  private _accumulate(traceId: string): number {\n    let accumulation = 0;\n    for (let i = 0; i < 32; i += 8) {\n      let part = 0;\n      for (let j = 0; j < 8; j++) {\n        const c = traceId.charCodeAt(i + j);\n        // Convert hex char code to value: '0'-'9' -> 0-9, 'a'-'f' -> 10-15, 'A'-'F' -> 10-15\n        const v = c < 58 ? c - 48 : c < 71 ? c - 55 : c - 87;\n        part = (part << 4) | v;\n      }\n      accumulation = (accumulation ^ part) >>> 0;\n    }\n    return accumulation;\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport { TracerProvider } from './TracerProvider';\nexport { BatchSpanProcessor, RandomIdGenerator } from './platform';\nexport { ConsoleSpanExporter } from './export/ConsoleSpanExporter';\nexport { InMemorySpanExporter } from './export/InMemorySpanExporter';\nexport type { ReadableSpan } from './export/ReadableSpan';\nexport { SimpleSpanProcessor } from './export/SimpleSpanProcessor';\nexport type { SpanExporter } from './export/SpanExporter';\nexport { NoopSpanProcessor } from './export/NoopSpanProcessor';\nexport { AlwaysOffSampler } from './sampler/AlwaysOffSampler';\nexport { AlwaysOnSampler } from './sampler/AlwaysOnSampler';\nexport { createAlwaysRecordSampler } from './sampler/AlwaysRecordSampler';\nexport { ParentBasedSampler } from './sampler/ParentBasedSampler';\nexport { TraceIdRatioBasedSampler } from './sampler/TraceIdRatioBasedSampler';\nexport { SamplingDecision } from './Sampler';\nexport type { Sampler, SamplingResult } from './Sampler';\nexport type { Span } from './Span';\nexport type { SpanProcessor } from './SpanProcessor';\nexport type { TimedEvent } from './TimedEvent';\nexport type {\n  BatchSpanProcessorOptions,\n  BatchSpanProcessorBrowserOptions,\n  SimpleSpanProcessorOptions,\n  SpanLimits,\n  SpanProcessorOptions,\n  TracerProviderOptions,\n} from './types';\nexport type { IdGenerator } from './IdGenerator';\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { diag } from '@opentelemetry/api';\nimport { getNumberFromEnv, getStringFromEnv } from '@opentelemetry/core';\nimport type { Sampler } from '@opentelemetry/sdk-trace';\nimport {\n  AlwaysOffSampler,\n  AlwaysOnSampler,\n  ParentBasedSampler,\n  TraceIdRatioBasedSampler,\n} from '@opentelemetry/sdk-trace';\n\nconst enum TracesSamplerValues {\n  AlwaysOff = 'always_off',\n  AlwaysOn = 'always_on',\n  ParentBasedAlwaysOff = 'parentbased_always_off',\n  ParentBasedAlwaysOn = 'parentbased_always_on',\n  ParentBasedTraceIdRatio = 'parentbased_traceidratio',\n  TraceIdRatio = 'traceidratio',\n}\n\nconst DEFAULT_RATIO = 1;\n\n/**\n * Load default configuration. For fields with primitive values, any user-provided\n * value will override the corresponding default value. For fields with\n * non-primitive values (like `spanLimits`), the user-provided value will be\n * used to extend the default value.\n */\n\n// object needs to be wrapped in this function and called when needed otherwise\n// envs are parsed before tests are ran - causes tests using these envs to fail\nexport function loadDefaultConfig() {\n  return {\n    sampler: buildSamplerFromEnv(),\n    forceFlushTimeoutMillis: 30000,\n    generalLimits: {\n      attributeValueLengthLimit:\n        getNumberFromEnv('OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT') ?? Infinity,\n      attributeCountLimit:\n        getNumberFromEnv('OTEL_ATTRIBUTE_COUNT_LIMIT') ?? 128,\n    },\n    spanLimits: {\n      attributeValueLengthLimit:\n        getNumberFromEnv('OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT') ?? Infinity,\n      attributeCountLimit:\n        getNumberFromEnv('OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT') ?? 128,\n      linkCountLimit: getNumberFromEnv('OTEL_SPAN_LINK_COUNT_LIMIT') ?? 128,\n      eventCountLimit: getNumberFromEnv('OTEL_SPAN_EVENT_COUNT_LIMIT') ?? 128,\n      attributePerEventCountLimit:\n        getNumberFromEnv('OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT') ?? 128,\n      attributePerLinkCountLimit:\n        getNumberFromEnv('OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT') ?? 128,\n    },\n  };\n}\n\n/**\n * Based on environment, builds a sampler, complies with specification.\n */\nexport function buildSamplerFromEnv(): Sampler {\n  const sampler =\n    getStringFromEnv('OTEL_TRACES_SAMPLER') ??\n    TracesSamplerValues.ParentBasedAlwaysOn;\n  switch (sampler) {\n    case TracesSamplerValues.AlwaysOn:\n      return new AlwaysOnSampler();\n    case TracesSamplerValues.AlwaysOff:\n      return new AlwaysOffSampler();\n    case TracesSamplerValues.ParentBasedAlwaysOn:\n      return new ParentBasedSampler({\n        root: new AlwaysOnSampler(),\n      });\n    case TracesSamplerValues.ParentBasedAlwaysOff:\n      return new ParentBasedSampler({\n        root: new AlwaysOffSampler(),\n      });\n    case TracesSamplerValues.TraceIdRatio:\n      return new TraceIdRatioBasedSampler(getSamplerProbabilityFromEnv());\n    case TracesSamplerValues.ParentBasedTraceIdRatio:\n      return new ParentBasedSampler({\n        root: new TraceIdRatioBasedSampler(getSamplerProbabilityFromEnv()),\n      });\n    default:\n      diag.error(\n        `OTEL_TRACES_SAMPLER value \"${sampler}\" invalid, defaulting to \"${TracesSamplerValues.ParentBasedAlwaysOn}\".`\n      );\n      return new ParentBasedSampler({\n        root: new AlwaysOnSampler(),\n      });\n  }\n}\n\nfunction getSamplerProbabilityFromEnv(): number | undefined {\n  const probability = getNumberFromEnv('OTEL_TRACES_SAMPLER_ARG');\n  if (probability == null) {\n    diag.error(\n      `OTEL_TRACES_SAMPLER_ARG is blank, defaulting to ${DEFAULT_RATIO}.`\n    );\n    return DEFAULT_RATIO;\n  }\n\n  if (probability < 0 || probability > 1) {\n    diag.error(\n      `OTEL_TRACES_SAMPLER_ARG=${probability} was given, but it is out of range ([0..1]), defaulting to ${DEFAULT_RATIO}.`\n    );\n    return DEFAULT_RATIO;\n  }\n\n  return probability;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { TracerConfig } from './types-shim';\nimport { getNumberFromEnv } from '@opentelemetry/core';\n\nexport const DEFAULT_ATTRIBUTE_COUNT_LIMIT = 128;\nexport const DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT = Infinity;\n\n/**\n * When general limits are provided and model specific limits are not,\n * configures the model specific limits by using the values from the general ones.\n * @param userConfig User provided tracer configuration\n */\nexport function reconfigureLimits(userConfig: TracerConfig): TracerConfig {\n  const spanLimits = Object.assign({}, userConfig.spanLimits);\n\n  /**\n   * Reassign span attribute count limit to use first non null value defined by user or use default value\n   */\n  spanLimits.attributeCountLimit =\n    userConfig.spanLimits?.attributeCountLimit ??\n    userConfig.generalLimits?.attributeCountLimit ??\n    getNumberFromEnv('OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT') ??\n    getNumberFromEnv('OTEL_ATTRIBUTE_COUNT_LIMIT') ??\n    DEFAULT_ATTRIBUTE_COUNT_LIMIT;\n\n  /**\n   * Reassign span attribute value length limit to use first non null value defined by user or use default value\n   */\n  spanLimits.attributeValueLengthLimit =\n    userConfig.spanLimits?.attributeValueLengthLimit ??\n    userConfig.generalLimits?.attributeValueLengthLimit ??\n    getNumberFromEnv('OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT') ??\n    getNumberFromEnv('OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT') ??\n    DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT;\n\n  return Object.assign({}, userConfig, { spanLimits });\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { merge } from '@opentelemetry/core';\nimport { loadDefaultConfig } from './config';\nimport type { TracerConfig } from './types-shim';\nimport { reconfigureLimits } from './utility';\nimport { TracerProvider } from '@opentelemetry/sdk-trace';\n\n/**\n * A TracerProvider implementation that reads configuration defaults from\n * OTEL_* environment variables per\n * https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/\n */\nexport class BasicTracerProvider extends TracerProvider {\n  constructor(config: TracerConfig = {}) {\n    const mergedConfig = merge(\n      {},\n      loadDefaultConfig(),\n      reconfigureLimits(config)\n    );\n    delete mergedConfig.generalLimits;\n    super(mergedConfig);\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getNumberFromEnv } from '@opentelemetry/core';\nimport type { SpanExporter } from '@opentelemetry/sdk-trace';\nimport { BatchSpanProcessor as BatchSpanProcessNoEnvConfig } from '@opentelemetry/sdk-trace';\nimport type {\n  BatchSpanProcessorBrowserConfig,\n  BufferConfig,\n} from './types-shim';\n\n/**\n * A BatchSpanProcessor that applies `OTEL_*` environment variable fallbacks per\n * https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/\n */\nexport class BatchSpanProcessor extends BatchSpanProcessNoEnvConfig {\n  constructor(\n    exporter: SpanExporter,\n    config?: BufferConfig | BatchSpanProcessorBrowserConfig\n  ) {\n    if (!config) {\n      config = {};\n    }\n    const envFallbacks: [keyof BufferConfig, string][] = [\n      ['maxExportBatchSize', 'OTEL_BSP_MAX_EXPORT_BATCH_SIZE'],\n      ['maxQueueSize', 'OTEL_BSP_MAX_QUEUE_SIZE'],\n      ['scheduledDelayMillis', 'OTEL_BSP_SCHEDULE_DELAY'],\n      ['exportTimeoutMillis', 'OTEL_BSP_EXPORT_TIMEOUT'],\n    ];\n    for (const [configName, envName] of envFallbacks) {\n      if (config[configName] === undefined) {\n        const envFallback = getNumberFromEnv(envName);\n        if (envFallback !== undefined) {\n          config[configName] = envFallback;\n        }\n      }\n    }\n\n    super({ exporter, ...config });\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { SpanExporter } from '@opentelemetry/sdk-trace';\nimport { SimpleSpanProcessor as SdkTraceSimpleSpanProcessor } from '@opentelemetry/sdk-trace';\n\n/**\n * A SimpleSpanProcessor with the old constructor call signature that\n * takes just a single exporter argument. This version does not support\n * the additional options that the SimpleSpanProcessor in sdk-trace does.\n */\nexport class SimpleSpanProcessor extends SdkTraceSimpleSpanProcessor {\n  constructor(exporter: SpanExporter) {\n    super({ exporter });\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport { BasicTracerProvider } from './BasicTracerProvider-shim';\nexport type {\n  BufferConfig,\n  BatchSpanProcessorBrowserConfig,\n  GeneralLimits,\n  TracerConfig,\n  SDKRegistrationConfig,\n} from './types-shim';\nexport { BatchSpanProcessor } from './BatchSpanProcessor-shim';\nexport { SimpleSpanProcessor } from './SimpleSpanProcessor-shim';\n\nexport {\n  ConsoleSpanExporter,\n  RandomIdGenerator,\n  InMemorySpanExporter,\n  NoopSpanProcessor,\n  AlwaysOffSampler,\n  AlwaysOnSampler,\n  ParentBasedSampler,\n  TraceIdRatioBasedSampler,\n  SamplingDecision,\n} from '@opentelemetry/sdk-trace';\nexport type {\n  ReadableSpan,\n  SpanExporter,\n  Sampler,\n  SamplingResult,\n  Span,\n  SpanProcessor,\n  TimedEvent,\n  SpanLimits,\n  IdGenerator,\n} from '@opentelemetry/sdk-trace';\n", "/** If this attribute is true, it means that the parent is a remote span. */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_PARENT_IS_REMOTE = 'sentry.parentIsRemote';\n\n// These are not standardized yet, but used by the graphql instrumentation\nexport const SEMANTIC_ATTRIBUTE_SENTRY_GRAPHQL_OPERATION = 'sentry.graphql.operation';\n", "import type { ReadableSpan } from '@opentelemetry/sdk-trace-base';\n\n/**\n * Get the parent span id from a span.\n * In OTel v1, the parent span id is accessed as `parentSpanId`\n * In OTel v2, the parent span id is accessed as `spanId` on the `parentSpanContext`\n */\nexport function getParentSpanId(span: ReadableSpan): string | undefined {\n  if ('parentSpanId' in span) {\n    return span.parentSpanId as string | undefined;\n  } else if ('parentSpanContext' in span) {\n    return (span.parentSpanContext as { spanId?: string } | undefined)?.spanId;\n  }\n\n  return undefined;\n}\n", "import type { SpanKind, SpanStatus } from '@opentelemetry/api';\nimport type { ReadableSpan, TimedEvent } from '@opentelemetry/sdk-trace-base';\nimport type { AbstractSpan } from '../types';\nimport { isObjectLike } from '@sentry/core';\nimport { getParentSpanId } from './getParentSpanId';\n\n/**\n * Check if a given span has attributes.\n * This is necessary because the base `Span` type does not have attributes,\n * so in places where we are passed a generic span, we need to check if we want to access them.\n */\nexport function spanHasAttributes<SpanType extends AbstractSpan>(\n  span: SpanType,\n): span is SpanType & { attributes: ReadableSpan['attributes'] } {\n  const castSpan = span as ReadableSpan;\n  return isObjectLike(castSpan.attributes);\n}\n\n/**\n * Check if a given span has a kind.\n * This is necessary because the base `Span` type does not have a kind,\n * so in places where we are passed a generic span, we need to check if we want to access it.\n */\nexport function spanHasKind<SpanType extends AbstractSpan>(span: SpanType): span is SpanType & { kind: SpanKind } {\n  const castSpan = span as ReadableSpan;\n  return typeof castSpan.kind === 'number';\n}\n\n/**\n * Check if a given span has a status.\n * This is necessary because the base `Span` type does not have a status,\n * so in places where we are passed a generic span, we need to check if we want to access it.\n */\nexport function spanHasStatus<SpanType extends AbstractSpan>(\n  span: SpanType,\n): span is SpanType & { status: SpanStatus } {\n  const castSpan = span as ReadableSpan;\n  return !!castSpan.status;\n}\n\n/**\n * Check if a given span has a name.\n * This is necessary because the base `Span` type does not have a name,\n * so in places where we are passed a generic span, we need to check if we want to access it.\n */\nexport function spanHasName<SpanType extends AbstractSpan>(span: SpanType): span is SpanType & { name: string } {\n  const castSpan = span as ReadableSpan;\n  return !!castSpan.name;\n}\n\n/**\n * Check if a given span has a kind.\n * This is necessary because the base `Span` type does not have a kind,\n * so in places where we are passed a generic span, we need to check if we want to access it.\n */\nexport function spanHasParentId<SpanType extends AbstractSpan>(\n  span: SpanType,\n): span is SpanType & { parentSpanId: string } {\n  const castSpan = span as ReadableSpan;\n  return !!getParentSpanId(castSpan);\n}\n\n/**\n * Check if a given span has events.\n * This is necessary because the base `Span` type does not have events,\n * so in places where we are passed a generic span, we need to check if we want to access it.\n */\nexport function spanHasEvents<SpanType extends AbstractSpan>(\n  span: SpanType,\n): span is SpanType & { events: TimedEvent[] } {\n  const castSpan = span as ReadableSpan;\n  return Array.isArray(castSpan.events);\n}\n", "import type { Span } from '@opentelemetry/api';\nimport type { ReadableSpan } from '@opentelemetry/sdk-trace-base';\nimport { HTTP_METHOD, HTTP_REQUEST_METHOD, HTTP_URL, URL_FULL } from '@sentry/conventions/attributes';\nimport type { SanitizedRequestData } from '@sentry/core';\nimport { filterCollectedUrlQuery, getSanitizedUrlString, parseUrl } from '@sentry/core';\nimport { spanHasAttributes } from './spanTypes';\n\n/**\n * Get sanitizied request data from an OTEL span.\n */\nexport function getRequestSpanData(span: Span | ReadableSpan): Partial<SanitizedRequestData> {\n  // The base `Span` type has no `attributes`, so we need to guard here against that\n  if (!spanHasAttributes(span)) {\n    return {};\n  }\n\n  // eslint-disable-next-line typescript/no-deprecated\n  const maybeUrlAttribute = (span.attributes[URL_FULL] || span.attributes[HTTP_URL]) as string | undefined;\n\n  const data: Partial<SanitizedRequestData> = {\n    url: maybeUrlAttribute,\n    // eslint-disable-next-line typescript/no-deprecated\n    'http.method': (span.attributes[HTTP_REQUEST_METHOD] || span.attributes[HTTP_METHOD]) as string | undefined,\n  };\n\n  // Default to GET if URL is set but method is not\n  if (!data['http.method'] && data.url) {\n    data['http.method'] = 'GET';\n  }\n\n  try {\n    if (typeof maybeUrlAttribute === 'string') {\n      const url = parseUrl(maybeUrlAttribute);\n\n      data.url = getSanitizedUrlString(url);\n\n      // The URL may come from a third-party instrumentation that never ran it through the SDK's filtering.\n      const query = filterCollectedUrlQuery(url.search);\n      if (query) {\n        data['http.query'] = query;\n      }\n      if (url.hash) {\n        data['http.fragment'] = url.hash;\n      }\n    }\n  } catch {\n    // ignore\n  }\n\n  return data;\n}\n", "import type { Tracer } from '@opentelemetry/api';\nimport { trace } from '@opentelemetry/api';\nimport type { Client } from '@sentry/core';\nimport { SDK_VERSION } from '@sentry/core';\nimport type { OpenTelemetryClient as OpenTelemetryClientInterface, OpenTelemetryTracerProvider } from '../types';\n\n// Typescript complains if we do not use `...args: any[]` for the mixin, with:\n// A mixin class must have a constructor with a single rest parameter of type 'any[]'.ts(2545)\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Wrap an Client class with things we need for OpenTelemetry support.\n * Make sure that the Client class passed in is non-abstract!\n *\n * Usage:\n * const OpenTelemetryClient = getWrappedClientClass(NodeClient);\n * const client = new OpenTelemetryClient(options);\n */\nexport function wrapClientClass<\n  ClassConstructor extends new (...args: any[]) => Client,\n  WrappedClassConstructor extends new (...args: any[]) => Client & OpenTelemetryClientInterface,\n>(ClientClass: ClassConstructor): WrappedClassConstructor {\n  // @ts-expect-error We just assume that this is non-abstract, if you pass in an abstract class this would make it non-abstract\n  class OpenTelemetryClient extends ClientClass implements OpenTelemetryClientInterface {\n    public traceProvider: OpenTelemetryTracerProvider | undefined;\n    private _tracer: Tracer | undefined;\n\n    public constructor(...args: any[]) {\n      super(...args);\n    }\n\n    /** Get the OTEL tracer. */\n    public get tracer(): Tracer {\n      if (this._tracer) {\n        return this._tracer;\n      }\n\n      const name = '@sentry/opentelemetry';\n      const version = SDK_VERSION;\n      const tracer = trace.getTracer(name, version);\n      this._tracer = tracer;\n\n      return tracer;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public async flush(timeout?: number): Promise<boolean> {\n      const provider = this.traceProvider;\n      await provider?.forceFlush();\n      return super.flush(timeout);\n    }\n  }\n\n  return OpenTelemetryClient as unknown as WrappedClassConstructor;\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n", "import { SpanKind } from '@opentelemetry/api';\nimport type { AbstractSpan } from '../types';\nimport { spanHasKind } from './spanTypes';\n\n/**\n * Get the span kind from a span.\n * For whatever reason, this is not public API on the generic \"Span\" type,\n * so we need to check if we actually have a `SDKTraceBaseSpan` where we can fetch this from.\n * Otherwise, we fall back to `SpanKind.INTERNAL`.\n */\nexport function getSpanKind(span: AbstractSpan): SpanKind {\n  if (spanHasKind(span)) {\n    return span.kind;\n  }\n\n  return SpanKind.INTERNAL;\n}\n", "import { createContextKey } from '@opentelemetry/api';\n\nexport const SENTRY_TRACE_HEADER = 'sentry-trace';\nexport const SENTRY_BAGGAGE_HEADER = 'baggage';\n\nexport const SENTRY_TRACE_STATE_DSC = 'sentry.dsc';\nexport const SENTRY_TRACE_STATE_SAMPLED_NOT_RECORDING = 'sentry.sampled_not_recording';\nexport const SENTRY_TRACE_STATE_URL = 'sentry.url';\nexport const SENTRY_TRACE_STATE_SAMPLE_RAND = 'sentry.sample_rand';\nexport const SENTRY_TRACE_STATE_SAMPLE_RATE = 'sentry.sample_rate';\n\n/**\n *  A flag marking a context as ignored because the span associated with the context\n *  is ignored (`ignoreSpans` filter).\n */\nexport const SENTRY_TRACE_STATE_CHILD_IGNORED = 'sentry.ignored';\n\n/**\n *  A flag marking a segment span as ignored because it matched the `ignoreSpans` filter.\n *  Unlike `SENTRY_TRACE_STATE_CHILD_IGNORED` (used for child spans), this flag is NOT consumed\n *  by the context manager for re-parenting. Instead, it propagates to child spans so they\n *  can record the correct client report outcome (`ignored` instead of `sample_rate`).\n */\nexport const SENTRY_TRACE_STATE_SEGMENT_IGNORED = 'sentry.segment_ignored';\n\nexport const SENTRY_SCOPES_CONTEXT_KEY = createContextKey('sentry_scopes');\n\nexport const SENTRY_FORK_ISOLATION_SCOPE_CONTEXT_KEY = createContextKey('sentry_fork_isolation_scope');\n\nexport const SENTRY_FORK_SET_SCOPE_CONTEXT_KEY = createContextKey('sentry_fork_set_scope');\n\nexport const SENTRY_FORK_SET_ISOLATION_SCOPE_CONTEXT_KEY = createContextKey('sentry_fork_set_isolation_scope');\n", "import type { Context } from '@opentelemetry/api';\nimport type { Scope } from '@sentry/core';\nimport { addNonEnumerableProperty, derefWeakRef, makeWeakRef, type MaybeWeakRef } from '@sentry/core';\nimport { SENTRY_SCOPES_CONTEXT_KEY } from '../constants';\nimport type { CurrentScopes } from '../types';\n\nconst SCOPE_CONTEXT_FIELD = '_scopeContext';\n\ntype ScopeWithContext = Scope & {\n  [SCOPE_CONTEXT_FIELD]?: MaybeWeakRef<Context>;\n};\n\n/**\n * Try to get the current scopes from the given OTEL context.\n * This requires a Context Manager that was wrapped with getWrappedContextManager.\n */\nexport function getScopesFromContext(context: Context): CurrentScopes | undefined {\n  return context.getValue(SENTRY_SCOPES_CONTEXT_KEY) as CurrentScopes | undefined;\n}\n\n/**\n * Set the current scopes on an OTEL context.\n * This will return a forked context with the Propagation Context set.\n */\nexport function setScopesOnContext(context: Context, scopes: CurrentScopes): Context {\n  return context.setValue(SENTRY_SCOPES_CONTEXT_KEY, scopes);\n}\n\n/**\n * Set the context on the scope so we can later look it up.\n * We need this to get the context from the scope in the `trace` functions.\n *\n * We use WeakRef to avoid a circular reference between the scope and the context.\n * The context holds scopes (via SENTRY_SCOPES_CONTEXT_KEY), and if the scope held\n * a strong reference back to the context, neither could be garbage collected even\n * when the context is no longer reachable from application code (e.g., after a\n * request completes but pooled connections retain patched callbacks).\n */\nexport function setContextOnScope(scope: Scope, context: Context): void {\n  addNonEnumerableProperty(scope, SCOPE_CONTEXT_FIELD, makeWeakRef(context));\n}\n\n/**\n * Get the context related to a scope.\n * Returns undefined if the context has been garbage collected (when WeakRef is used).\n */\nexport function getContextFromScope(scope: Scope): Context | undefined {\n  return derefWeakRef((scope as ScopeWithContext)[SCOPE_CONTEXT_FIELD]);\n}\n", "import { HTTP_URL, URL_FULL } from '@sentry/conventions/attributes';\nimport { getClient, isSentryRequestUrl } from '@sentry/core';\nimport type { AbstractSpan } from '../types';\nimport { spanHasAttributes } from './spanTypes';\n\n/**\n *\n * @param otelSpan Checks whether a given OTEL Span is an http request to sentry.\n * @returns boolean\n */\nexport function isSentryRequestSpan(span: AbstractSpan): boolean {\n  if (!spanHasAttributes(span)) {\n    return false;\n  }\n\n  const { attributes } = span;\n\n  // `URL_FULL` is the new attribute, but we still support the old one, `HTTP_URL`, for now.\n  // eslint-disable-next-line typescript/no-deprecated\n  const httpUrl = attributes[HTTP_URL] || attributes[URL_FULL];\n\n  if (!httpUrl) {\n    return false;\n  }\n\n  return isSentryRequestUrl(httpUrl.toString(), getClient());\n}\n", "import type { SpanContext } from '@opentelemetry/api';\nimport { TraceFlags } from '@opentelemetry/api';\nimport type { Client, Span } from '@sentry/core';\nimport {\n  baggageHeaderToDynamicSamplingContext,\n  getRootSpan,\n  hasSpansEnabled,\n  spanIsIgnored,\n  spanIsSampled,\n  spanIsSentrySpan,\n} from '@sentry/core';\nimport { SENTRY_TRACE_STATE_DSC, SENTRY_TRACE_STATE_SAMPLED_NOT_RECORDING } from '../constants';\n\n/**\n * OpenTelemetry only knows about SAMPLED or NONE decision,\n * but for us it is important to differentiate between unset and unsampled.\n *\n * Both of these are identified as `traceFlags === TracegFlags.NONE`,\n * but we additionally look at a special trace state to differentiate between them.\n */\nexport function getSamplingDecision(spanContext: SpanContext): boolean | undefined {\n  const { traceFlags, traceState } = spanContext;\n\n  const sampledNotRecording = traceState ? traceState.get(SENTRY_TRACE_STATE_SAMPLED_NOT_RECORDING) === '1' : false;\n\n  // If trace flag is `SAMPLED`, we interpret this as sampled\n  // If it is `NONE`, it could mean either it was sampled to be not recorder, or that it was not sampled at all\n  // For us this is an important difference, sow e look at the SENTRY_TRACE_STATE_SAMPLED_NOT_RECORDING\n  // to identify which it is\n  if (traceFlags === TraceFlags.SAMPLED) {\n    return true;\n  }\n\n  if (sampledNotRecording) {\n    return false;\n  }\n\n  // Fall back to DSC as a last resort, that may also contain `sampled`...\n  const dscString = traceState ? traceState.get(SENTRY_TRACE_STATE_DSC) : undefined;\n  const dsc = dscString ? baggageHeaderToDynamicSamplingContext(dscString) : undefined;\n\n  if (dsc?.sampled === 'true') {\n    return true;\n  }\n  if (dsc?.sampled === 'false') {\n    return false;\n  }\n\n  return undefined;\n}\n\n/**\n * Resolve a span's sampling decision for trace propagation, also handling native Sentry spans.\n *\n * Prefer the OpenTelemetry trace state via {@link getSamplingDecision}. Native Sentry spans (created\n * by the `SentryTracerProvider`) don't carry that trace state, so when it's absent we fall back to the\n * span's own decision via `spanIsSampled` — but only for an *explicit* decision. An explicit decision\n * originates at a real `SentrySpan` root (a negatively sampled root, or a child of one) or an ignored\n * segment root. Other non-recording placeholder roots (orphan/suppressed spans or TwP placeholders)\n * and remote spans have a *deferred* decision that lives elsewhere (the scope, or the incoming trace\n * state), so we return `undefined` rather than wrongly asserting `-0`.\n *\n * TODO(v11): Once the OTel SDK provider is gone and every local span is a native Sentry span, the\n * trace-state lookup only matters for remote (incoming) spans; the local path always reads the span's\n * own decision, so the \"native-vs-OTel-SDK span\" framing can be dropped (local → span, remote → trace state).\n */\nexport function getSampledForPropagation(span: Span, client: Client | undefined): boolean | undefined {\n  const spanContext = span.spanContext();\n  const rootSpan = getRootSpan(span);\n\n  // Prefer the OTel trace state: it carries the decision for OTel SDK spans and for remote (incoming)\n  // spans, and unambiguously separates sampled / unsampled / deferred.\n  const samplingDecision = getSamplingDecision(spanContext);\n  if (samplingDecision !== undefined) {\n    return samplingDecision;\n  }\n\n  if (spanIsIgnored(rootSpan)) {\n    return false;\n  }\n\n  // No trace state in it. Only read the span's own decision (`spanIsSampled`) when it's an explicit\n  // one, which lives on a native recording `SentrySpan` root (created by the SentryTracerProvider).\n  // Everything else defers: TwP (deferred), remote spans (decision is in the incoming trace state),\n  // and non-recording placeholder roots — whether a Sentry orphan/suppressed span or, on the OTel SDK\n  // path, an OpenTelemetry `NonRecordingSpan` (which `spanIsSentrySpan` also excludes).\n  if (!hasSpansEnabled(client?.getOptions()) || spanContext.isRemote || !spanIsSentrySpan(rootSpan)) {\n    return undefined;\n  }\n\n  return spanIsSampled(span);\n}\n", "import type { Attributes, AttributeValue } from '@opentelemetry/api';\nimport { SpanKind } from '@opentelemetry/api';\nimport {\n  DB_STATEMENT,\n  DB_SYSTEM,\n  DB_SYSTEM_NAME,\n  FAAS_TRIGGER,\n  HTTP_METHOD,\n  HTTP_REQUEST_METHOD,\n  HTTP_ROUTE,\n  HTTP_TARGET,\n  HTTP_URL,\n  MESSAGING_SYSTEM,\n  RPC_SERVICE,\n  URL_FULL,\n} from '@sentry/conventions/attributes';\nimport type { Span, SpanAttributes, TransactionSource } from '@sentry/core';\nimport {\n  getSanitizedUrlString,\n  parseUrl,\n  SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n  spanToJSON,\n  stripUrlQueryAndFragment,\n  filterCollectedUrl,\n  filterCollectedUrlQuery,\n} from '@sentry/core';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_GRAPHQL_OPERATION } from '../semanticAttributes';\nimport type { AbstractSpan } from '../types';\nimport { getSpanKind } from './getSpanKind';\nimport { spanHasAttributes, spanHasName } from './spanTypes';\n\ninterface SpanDescription {\n  op: string | undefined;\n  description: string;\n  source: TransactionSource;\n  data?: Record<string, string | undefined>;\n}\n\n/**\n * Infer the op & description for a set of name, attributes and kind of a span.\n */\nexport function inferSpanData(spanName: string, attributes: SpanAttributes, kind: SpanKind): SpanDescription {\n  // if http.method exists, this is an http request span\n  // eslint-disable-next-line typescript/no-deprecated\n  const httpMethod = attributes[HTTP_REQUEST_METHOD] || attributes[HTTP_METHOD];\n  if (httpMethod) {\n    return descriptionForHttpMethod({ attributes, name: spanName, kind }, httpMethod);\n  }\n\n  // eslint-disable-next-line typescript/no-deprecated\n  const dbSystem = attributes[DB_SYSTEM_NAME] || attributes[DB_SYSTEM];\n  const opIsCache =\n    typeof attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] === 'string' &&\n    attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP].startsWith('cache.');\n\n  // If db.type exists then this is a database call span\n  // If the Redis DB is used as a cache, the span description should not be changed\n  if (dbSystem && !opIsCache) {\n    return descriptionForDbSystem({ attributes, name: spanName });\n  }\n\n  const customSourceOrRoute = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] === 'custom' ? 'custom' : 'route';\n\n  // If rpc.service exists then this is a rpc call span.\n  // eslint-disable-next-line typescript/no-deprecated\n  const rpcService = attributes[RPC_SERVICE];\n  if (rpcService) {\n    return {\n      ...getUserUpdatedNameAndSource(spanName, attributes, 'route'),\n      op: 'rpc',\n    };\n  }\n\n  // If messaging.system exists then this is a messaging system span.\n  // eslint-disable-next-line typescript/no-deprecated\n  const messagingSystem = attributes[MESSAGING_SYSTEM];\n  if (messagingSystem) {\n    return {\n      ...getUserUpdatedNameAndSource(spanName, attributes, customSourceOrRoute),\n      op: 'message',\n    };\n  }\n\n  // If faas.trigger exists then this is a function as a service span.\n  // eslint-disable-next-line typescript/no-deprecated\n  const faasTrigger = attributes[FAAS_TRIGGER];\n  if (faasTrigger) {\n    return {\n      ...getUserUpdatedNameAndSource(spanName, attributes, customSourceOrRoute),\n      op: faasTrigger.toString(),\n    };\n  }\n\n  return { op: undefined, description: spanName, source: 'custom' };\n}\n\n/**\n * Extract better op/description from an otel span.\n *\n * Does not overwrite the span name if the source is already set to custom to ensure\n * that user-updated span names are preserved. In this case, we only adjust the op but\n * leave span description and source unchanged.\n *\n * Based on https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/7422ce2a06337f68a59b552b8c5a2ac125d6bae5/exporter/sentryexporter/sentry_exporter.go#L306\n */\nexport function parseSpanDescription(span: AbstractSpan): SpanDescription {\n  let attributes: Attributes;\n  let name: string;\n\n  // TODO(v11): Once the OTel SDK provider is removed and SentryTracerProvider is the only path,\n  // every span is a native Sentry span — drop this `spanHasAttributes` (OTel ReadableSpan) branch\n  // and keep only the `spanToJSON()` path below.\n  if (spanHasAttributes(span)) {\n    attributes = span.attributes;\n    name = spanHasName(span) ? span.name : '<unknown>';\n  } else {\n    const json = typeof (span as Span).spanContext === 'function' ? spanToJSON(span as Span) : undefined;\n    attributes = json?.data || {};\n    name = spanHasName(span) ? span.name : json?.description || '<unknown>';\n  }\n\n  const kind = getSpanKind(span);\n  return inferSpanData(name, attributes, kind);\n}\n\nfunction descriptionForDbSystem({ attributes, name }: { attributes: Attributes; name: string }): SpanDescription {\n  // if we already have a custom name, we don't overwrite it but only set the op\n  const userDefinedName = attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n  if (typeof userDefinedName === 'string') {\n    return {\n      op: 'db',\n      description: userDefinedName,\n      source: (attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] as TransactionSource) || 'custom',\n    };\n  }\n\n  // if we already have the source set to custom, we don't overwrite the span description but only set the op\n  if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] === 'custom') {\n    return { op: 'db', description: name, source: 'custom' };\n  }\n\n  // Use DB statement (Ex \"SELECT * FROM table\") if possible as description.\n  // eslint-disable-next-line typescript/no-deprecated\n  const statement = attributes[DB_STATEMENT];\n\n  const description = statement ? statement.toString() : name;\n\n  return { op: 'db', description, source: 'task' };\n}\n\n/** Only exported for tests. */\nexport function descriptionForHttpMethod(\n  { name, kind, attributes }: { name: string; attributes: Attributes; kind: SpanKind },\n  httpMethod: AttributeValue,\n): SpanDescription {\n  const opParts = ['http'];\n\n  switch (kind) {\n    case SpanKind.CLIENT:\n      opParts.push('client');\n      break;\n    case SpanKind.SERVER:\n      opParts.push('server');\n      break;\n  }\n\n  // Spans for HTTP requests we have determined to be prefetch requests will have a `.prefetch` postfix in the op\n  if (attributes['sentry.http.prefetch']) {\n    opParts.push('prefetch');\n  }\n\n  const { urlPath, url, query, fragment, hasRoute } = getSanitizedUrl(attributes, kind);\n\n  if (!urlPath) {\n    return { ...getUserUpdatedNameAndSource(name, attributes), op: opParts.join('.') };\n  }\n\n  const graphqlOperationsAttribute = attributes[SEMANTIC_ATTRIBUTE_SENTRY_GRAPHQL_OPERATION];\n\n  // Ex. GET /api/users\n  const baseDescription = `${httpMethod} ${urlPath}`;\n\n  // When the http span has a graphql operation, append it to the description\n  // We add these in the graphqlIntegration\n  const inferredDescription = graphqlOperationsAttribute\n    ? `${baseDescription} (${getGraphqlOperationNamesFromAttribute(graphqlOperationsAttribute)})`\n    : baseDescription;\n\n  // If `httpPath` is a root path, then we can categorize the transaction source as route.\n  const inferredSource: TransactionSource = hasRoute || urlPath === '/' ? 'route' : 'url';\n\n  const data: Record<string, string> = {};\n\n  if (url) {\n    data.url = filterCollectedUrl(url);\n  }\n  const filteredQuery = filterCollectedUrlQuery(query);\n  if (filteredQuery) {\n    // Strip the leading `?`/`#` (the `URL.search`/`URL.hash` prefix) so the attribute matches the\n    // canonical format the OTel SDK exporter emits (`getData` in `spanExporter.ts` slices these too).\n    // TODO(v11): emit `url.query`/`url.fragment` (OTel-standard, no leading `?`/`#`) and drop\n    // this stripping + `http.query`/`http.fragment`; `http.query` is specced to keep the leading `?`.\n    data['http.query'] = filteredQuery.slice(1);\n  }\n  if (fragment) {\n    data['http.fragment'] = fragment.slice(1);\n  }\n\n  // If the span kind is neither client nor server, we use the original name\n  // this infers that somebody manually started this span, in which case we don't want to overwrite the name\n  const isClientOrServerKind = kind === SpanKind.CLIENT || kind === SpanKind.SERVER;\n\n  // If the span is an auto-span (=it comes from one of our instrumentations),\n  // we always want to infer the name\n  // this is necessary because some of the auto-instrumentation we use uses kind=INTERNAL\n  const origin = attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] || 'manual';\n  const isManualSpan = !`${origin}`.startsWith('auto');\n\n  // If users (or in very rare occasions we) set the source to custom, we don't overwrite the name\n  const alreadyHasCustomSource = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] === 'custom';\n  const customSpanName = attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n\n  const useInferredDescription =\n    !alreadyHasCustomSource && customSpanName == null && (isClientOrServerKind || !isManualSpan);\n\n  const { description, source } = useInferredDescription\n    ? { description: inferredDescription, source: inferredSource }\n    : getUserUpdatedNameAndSource(name, attributes);\n\n  return {\n    op: opParts.join('.'),\n    description,\n    source,\n    data,\n  };\n}\n\nfunction getGraphqlOperationNamesFromAttribute(attr: AttributeValue): string {\n  if (Array.isArray(attr)) {\n    // oxlint-disable-next-line typescript/require-array-sort-compare\n    const sorted = attr.slice().sort();\n\n    // Up to 5 items, we just add all of them\n    if (sorted.length <= 5) {\n      return sorted.join(', ');\n    } else {\n      // Else, we add the first 5 and the diff of other operations\n      return `${sorted.slice(0, 5).join(', ')}, +${sorted.length - 5}`;\n    }\n  }\n\n  return `${attr}`;\n}\n\n/** Exported for tests only */\nexport function getSanitizedUrl(\n  attributes: Attributes,\n  kind: SpanKind,\n): {\n  url: string | undefined;\n  urlPath: string | undefined;\n  query: string | undefined;\n  fragment: string | undefined;\n  hasRoute: boolean;\n} {\n  // This is the relative path of the URL, e.g. /sub\n  // eslint-disable-next-line typescript/no-deprecated\n  const httpTarget = attributes[HTTP_TARGET];\n  // This is the full URL, including host & query params etc., e.g. https://example.com/sub?foo=bar\n  // eslint-disable-next-line typescript/no-deprecated\n  const httpUrl = attributes[HTTP_URL] || attributes[URL_FULL];\n  // This is the normalized route name - may not always be available!\n  const httpRoute = attributes[HTTP_ROUTE];\n\n  const parsedUrl = typeof httpUrl === 'string' ? parseUrl(httpUrl) : undefined;\n  const url = parsedUrl ? getSanitizedUrlString(parsedUrl) : undefined;\n  const query = parsedUrl?.search || undefined;\n  const fragment = parsedUrl?.hash || undefined;\n\n  if (typeof httpRoute === 'string') {\n    return { urlPath: httpRoute, url, query, fragment, hasRoute: true };\n  }\n\n  if (kind === SpanKind.SERVER && typeof httpTarget === 'string') {\n    return { urlPath: stripUrlQueryAndFragment(httpTarget), url, query, fragment, hasRoute: false };\n  }\n\n  if (parsedUrl) {\n    return { urlPath: url, url, query, fragment, hasRoute: false };\n  }\n\n  // fall back to target even for client spans, if no URL is present\n  if (typeof httpTarget === 'string') {\n    return { urlPath: stripUrlQueryAndFragment(httpTarget), url, query, fragment, hasRoute: false };\n  }\n\n  return { urlPath: undefined, url, query, fragment, hasRoute: false };\n}\n\n/**\n * Because Otel instrumentation sometimes mutates span names via `span.updateName`, the only way\n * to ensure that a user-set span name is preserved is to store it as a tmp attribute on the span.\n * We delete this attribute once we're done with it when preparing the event envelope.\n *\n * This temp attribute always takes precedence over the original name.\n *\n * We also need to take care of setting the correct source. Users can always update the source\n * after updating the name, so we need to respect that.\n *\n * @internal exported only for testing\n */\nexport function getUserUpdatedNameAndSource(\n  originalName: string,\n  attributes: Attributes,\n  fallbackSource: TransactionSource = 'custom',\n): {\n  description: string;\n  source: TransactionSource;\n} {\n  const source = (attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] as TransactionSource) || fallbackSource;\n  const description = attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n\n  if (description && typeof description === 'string') {\n    return {\n      description,\n      source,\n    };\n  }\n\n  return { description: originalName, source };\n}\n", "import type { Client } from '@sentry/core';\nimport { hasSpansEnabled, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, spanToJSON } from '@sentry/core';\nimport { getSampledForPropagation } from './getSamplingDecision';\nimport { parseSpanDescription } from './parseSpanDescription';\n\n/**\n * Setup a DSC handler on the passed client,\n * ensuring that the transaction name is inferred from the span correctly.\n */\nexport function enhanceDscWithOpenTelemetryRootSpanName(client: Client): void {\n  client.on('createDsc', (dsc, rootSpan) => {\n    if (!rootSpan) {\n      return;\n    }\n\n    const jsonSpan = spanToJSON(rootSpan);\n    const attributes = jsonSpan.data;\n    const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n    const sampled = getSampledForPropagation(rootSpan, client);\n\n    // We want to overwrite the transaction on the DSC that is created by default in core, so that we\n    // infer the span name (e.g. \"GET /foo\" instead of \"GET\"); `parseSpanDescription` reads the span\n    // attributes. This mutates the passed-in DSC.\n    // A negatively sampled trace carries no transaction name in its DSC, matching the OTel SDK whose\n    // unsampled spans are nameless non-recording spans. Core derives one from the span name, so we\n    // drop it here for native (SentryTracerProvider) spans that do have a name.\n    if (sampled === false) {\n      delete dsc.transaction;\n    } else if (jsonSpan.description) {\n      const { description } = parseSpanDescription(rootSpan);\n      if (source !== 'url' && description) {\n        dsc.transaction = description;\n      }\n    }\n\n    // Only write the sampling decision in tracing mode. In TwP mode it is deferred (read from the\n    // scope/incoming trace state), so we leave any value core already resolved untouched.\n    if (hasSpansEnabled()) {\n      dsc.sampled = sampled == undefined ? undefined : String(sampled);\n    }\n  });\n}\n", "import type { Span } from '@opentelemetry/api';\nimport { trace } from '@opentelemetry/api';\n\n/**\n * Returns the currently active span.\n */\nexport function getActiveSpan(): Span | undefined {\n  return trace.getActiveSpan();\n}\n", "declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n", "/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * NOTICE from the Sentry authors:\n * - Minimal vendored implementation of `TraceState` from `@opentelemetry/core`\n *   to avoid pulling in that dependency for a single class.\n * - Drops raw-string parsing and key/value validation, neither of which are\n *   used by the SDK — the W3C `tracestate` header is parsed by OTel's own\n *   propagators (which use their own `TraceState`), and every key we `set`\n *   is a known constant.\n */\nimport type { TraceState as TraceStateInterface } from '@opentelemetry/api';\n\n/**\n * Minimal implementation of the W3C `tracestate` field as a `@opentelemetry/api`\n * `TraceState`. New entries are inserted at the front of the list, and updating\n * an existing key moves it to the front.\n *\n * See https://www.w3.org/TR/trace-context/#tracestate-field for the field spec.\n */\nexport class TraceState implements TraceStateInterface {\n  private _internalState: Map<string, string> = new Map();\n\n  /** @inheritDoc */\n  public set(key: string, value: string): TraceState {\n    const next = this._clone();\n    if (next._internalState.has(key)) {\n      next._internalState.delete(key);\n    }\n    next._internalState.set(key, value);\n    return next;\n  }\n\n  /** @inheritDoc */\n  public unset(key: string): TraceState {\n    const next = this._clone();\n    next._internalState.delete(key);\n    return next;\n  }\n\n  /** @inheritDoc */\n  public get(key: string): string | undefined {\n    return this._internalState.get(key);\n  }\n\n  /** @inheritDoc */\n  public serialize(): string {\n    return Array.from(this._internalState.keys())\n      .reverse()\n      .map(key => `${key}=${this._internalState.get(key)}`)\n      .join(',');\n  }\n\n  private _clone(): TraceState {\n    const next = new TraceState();\n    next._internalState = new Map(this._internalState);\n    return next;\n  }\n}\n", "import type { DynamicSamplingContext } from '@sentry/core';\nimport { dynamicSamplingContextToSentryBaggageHeader } from '@sentry/core';\nimport { SENTRY_TRACE_STATE_DSC, SENTRY_TRACE_STATE_SAMPLED_NOT_RECORDING } from '../constants';\nimport { TraceState } from './TraceState';\n\n/**\n * Generate a TraceState for the given data.\n */\nexport function makeTraceState({\n  dsc,\n  sampled,\n}: {\n  dsc?: Partial<DynamicSamplingContext>;\n  sampled?: boolean;\n}): TraceState {\n  // We store the DSC as OTEL trace state on the span context\n  const dscString = dsc ? dynamicSamplingContextToSentryBaggageHeader(dsc) : undefined;\n\n  const traceStateBase = new TraceState();\n\n  const traceStateWithDsc = dscString ? traceStateBase.set(SENTRY_TRACE_STATE_DSC, dscString) : traceStateBase;\n\n  // We also specifically want to store if this is sampled to be not recording,\n  // or unsampled (=could be either sampled or not)\n  return sampled === false ? traceStateWithDsc.set(SENTRY_TRACE_STATE_SAMPLED_NOT_RECORDING, '1') : traceStateWithDsc;\n}\n", "type OpenTelemetryElement =\n  | 'SentrySpanProcessor'\n  | 'SentryContextManager'\n  | 'SentryPropagator'\n  | 'SentrySampler'\n  | 'SentryTracerProvider';\n\nconst setupElements = new Set<OpenTelemetryElement>();\n\n/** Get all the OpenTelemetry elements that have been set up. */\nexport function openTelemetrySetupCheck(): OpenTelemetryElement[] {\n  return Array.from(setupElements);\n}\n\n/** Mark an OpenTelemetry element as setup. */\nexport function setIsSetup(element: OpenTelemetryElement): void {\n  setupElements.add(element);\n}\n\n/** Only exported for tests. */\nexport function clearOpenTelemetrySetupCheck(): void {\n  setupElements.clear();\n}\n", "import type { Baggage, Context, Span, SpanContext, TextMapGetter, TextMapSetter } from '@opentelemetry/api';\nimport { context, INVALID_TRACEID, propagation, trace, TraceFlags } from '@opentelemetry/api';\nimport { isTracingSuppressed, W3CBaggagePropagator } from '@opentelemetry/core';\nimport { HTTP_URL, URL_FULL } from '@sentry/conventions/attributes';\nimport type { Client, continueTrace, DynamicSamplingContext, Scope } from '@sentry/core';\nimport {\n  baggageHeaderToDynamicSamplingContext,\n  debug,\n  generateSentryTraceHeader,\n  generateTraceparentHeader,\n  getClient,\n  getCurrentScope,\n  getDynamicSamplingContextFromScope,\n  getDynamicSamplingContextFromSpan,\n  getIsolationScope,\n  LRUMap,\n  parseBaggageHeader,\n  propagationContextFromHeaders,\n  SENTRY_BAGGAGE_KEY_PREFIX,\n  shouldContinueTrace,\n  shouldPropagateTraceForUrl,\n  spanToJSON,\n} from '@sentry/core';\nimport { SENTRY_BAGGAGE_HEADER, SENTRY_TRACE_HEADER, SENTRY_TRACE_STATE_URL } from './constants';\nimport { DEBUG_BUILD } from './debug-build';\nimport { getScopesFromContext, setScopesOnContext } from './utils/contextData';\nimport { getSampledForPropagation, getSamplingDecision } from './utils/getSamplingDecision';\nimport { makeTraceState } from './utils/makeTraceState';\nimport { setIsSetup } from './utils/setupCheck';\n\n/**\n * Injects and extracts `sentry-trace` and `baggage` headers from carriers.\n */\nexport class SentryPropagator extends W3CBaggagePropagator {\n  /** A map of URLs that have already been checked for if they match tracePropagationTargets. */\n  private _urlMatchesTargetsMap: LRUMap<string, boolean>;\n\n  public constructor() {\n    super();\n    setIsSetup('SentryPropagator');\n\n    // We're caching results so we don't have to recompute regexp every time we create a request.\n    this._urlMatchesTargetsMap = new LRUMap<string, boolean>(100);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public inject(context: Context, carrier: unknown, setter: TextMapSetter): void {\n    if (isTracingSuppressed(context)) {\n      DEBUG_BUILD && debug.log('[Tracing] Not injecting trace data for url because tracing is suppressed.');\n      return;\n    }\n\n    const activeSpan = trace.getSpan(context);\n    const url = activeSpan && getCurrentURL(activeSpan);\n\n    const { tracePropagationTargets, propagateTraceparent } = getClient()?.getOptions() || {};\n    if (!shouldPropagateTraceForUrl(url, tracePropagationTargets, this._urlMatchesTargetsMap)) {\n      DEBUG_BUILD &&\n        debug.log('[Tracing] Not injecting trace data for url because it does not match tracePropagationTargets:', url);\n      return;\n    }\n\n    const existingBaggageHeader = getExistingBaggage(carrier);\n    const existingSentryTraceHeader = getExistingSentryTrace(carrier);\n\n    let baggage = propagation.getBaggage(context) || propagation.createBaggage({});\n\n    const { dynamicSamplingContext, traceId, spanId, sampled } = getInjectionData(context);\n\n    if (existingBaggageHeader) {\n      const baggageEntries = parseBaggageHeader(existingBaggageHeader);\n\n      if (baggageEntries) {\n        Object.entries(baggageEntries).forEach(([key, value]) => {\n          if (!existingSentryTraceHeader && key.startsWith(SENTRY_BAGGAGE_KEY_PREFIX)) {\n            // Edge case: A baggage header with sentry- keys was added previously but no\n            // sentry-trace header. In this case we remove the old sentry-keys and add new\n            // ones below.\n            return;\n          }\n          baggage = baggage.setEntry(key, { value });\n        });\n      }\n    }\n\n    if (!existingSentryTraceHeader && dynamicSamplingContext) {\n      baggage = Object.entries(dynamicSamplingContext).reduce<Baggage>((b, [dscKey, dscValue]) => {\n        if (dscValue) {\n          return b.setEntry(`${SENTRY_BAGGAGE_KEY_PREFIX}${dscKey}`, { value: dscValue });\n        }\n        return b;\n      }, baggage);\n    }\n\n    // We also want to avoid setting the default OTEL trace ID, if we get that for whatever reason\n    if (!existingSentryTraceHeader && traceId && traceId !== INVALID_TRACEID) {\n      setter.set(carrier, SENTRY_TRACE_HEADER, generateSentryTraceHeader(traceId, spanId, sampled));\n\n      if (propagateTraceparent) {\n        setter.set(carrier, 'traceparent', generateTraceparentHeader(traceId, spanId, sampled));\n      }\n    }\n\n    super.inject(propagation.setBaggage(context, baggage), carrier, setter);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public extract(context: Context, carrier: unknown, getter: TextMapGetter): Context {\n    const maybeSentryTraceHeader: string | string[] | undefined = getter.get(carrier, SENTRY_TRACE_HEADER);\n    const baggage = getter.get(carrier, SENTRY_BAGGAGE_HEADER);\n\n    const sentryTrace = maybeSentryTraceHeader\n      ? Array.isArray(maybeSentryTraceHeader)\n        ? maybeSentryTraceHeader[0]\n        : maybeSentryTraceHeader\n      : undefined;\n\n    // Add remote parent span context\n    // If there is no incoming trace, this will return the context as-is\n    return ensureScopesOnContext(getContextWithRemoteActiveSpan(context, { sentryTrace, baggage }));\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public fields(): string[] {\n    return [SENTRY_TRACE_HEADER, SENTRY_BAGGAGE_HEADER, 'traceparent'];\n  }\n}\n\n// Re-exported from @sentry/core for backwards compatibility\nexport { shouldPropagateTraceForUrl } from '@sentry/core';\n\n/**\n * Get propagation injection data for the given context.\n * The additional options can be passed to override the scope and client that is otherwise derived from the context.\n */\nexport function getInjectionData(\n  context: Context,\n  options: { scope?: Scope; client?: Client } = {},\n): {\n  dynamicSamplingContext: Partial<DynamicSamplingContext> | undefined;\n  traceId: string | undefined;\n  spanId: string | undefined;\n  sampled: boolean | undefined;\n} {\n  const span = trace.getSpan(context);\n\n  // If we have a remote span, the spanId should be considered as the parentSpanId, not spanId itself\n  // Instead, we use a virtual (generated) spanId for propagation\n  if (span?.spanContext().isRemote) {\n    const spanContext = span.spanContext();\n    const dynamicSamplingContext = getDynamicSamplingContextFromSpan(span);\n\n    return {\n      dynamicSamplingContext,\n      traceId: spanContext.traceId,\n      spanId: undefined,\n      sampled: getSamplingDecision(spanContext), // TODO: Do we need to change something here?\n    };\n  }\n\n  // If we have a local span, we just use this\n  if (span) {\n    const spanContext = span.spanContext();\n    const dynamicSamplingContext = getDynamicSamplingContextFromSpan(span);\n\n    return {\n      dynamicSamplingContext,\n      traceId: spanContext.traceId,\n      spanId: spanContext.spanId,\n      sampled: getSampledForPropagation(span, options.client),\n    };\n  }\n\n  // Else we try to use the propagation context from the scope\n  // The only scenario where this should happen is when we neither have a span, nor an incoming trace\n  const scope = options.scope || getScopesFromContext(context)?.scope || getCurrentScope();\n  const client = options.client || getClient();\n\n  const propagationContext = scope.getPropagationContext();\n  const dynamicSamplingContext = client ? getDynamicSamplingContextFromScope(client, scope) : undefined;\n  return {\n    dynamicSamplingContext,\n    traceId: propagationContext.traceId,\n    spanId: propagationContext.propagationSpanId,\n    sampled: propagationContext.sampled,\n  };\n}\n\nfunction getContextWithRemoteActiveSpan(\n  ctx: Context,\n  { sentryTrace, baggage }: Parameters<typeof continueTrace>[0],\n): Context {\n  const propagationContext = propagationContextFromHeaders(sentryTrace, baggage);\n\n  const { traceId, parentSpanId, sampled, dsc } = propagationContext;\n\n  const client = getClient();\n  const incomingDsc = baggageHeaderToDynamicSamplingContext(baggage);\n\n  // We only want to set the virtual span if we are continuing a concrete trace\n  // Otherwise, we ignore the incoming trace here, e.g. if we have no trace headers\n  if (!parentSpanId || (client && !shouldContinueTrace(client, incomingDsc?.org_id))) {\n    return ctx;\n  }\n\n  const spanContext = generateRemoteSpanContext({\n    traceId,\n    spanId: parentSpanId,\n    sampled,\n    dsc,\n  });\n\n  return trace.setSpanContext(ctx, spanContext);\n}\n\n/**\n * Takes trace strings and propagates them as a remote active span.\n * This should be used in addition to `continueTrace` in OTEL-powered environments.\n */\nexport function continueTraceAsRemoteSpan<T>(\n  ctx: Context,\n  options: Parameters<typeof continueTrace>[0],\n  callback: () => T,\n): T {\n  const ctxWithSpanContext = ensureScopesOnContext(getContextWithRemoteActiveSpan(ctx, options));\n\n  return context.with(ctxWithSpanContext, callback);\n}\n\nfunction ensureScopesOnContext(ctx: Context): Context {\n  // If there are no scopes yet on the context, ensure we have them\n  const scopes = getScopesFromContext(ctx);\n  const newScopes = {\n    // If we have no scope here, this is most likely either the root context or a context manually derived from it\n    // In this case, we want to fork the current scope, to ensure we do not pollute the root scope\n    scope: scopes ? scopes.scope : getCurrentScope().clone(),\n    isolationScope: scopes ? scopes.isolationScope : getIsolationScope(),\n  };\n\n  return setScopesOnContext(ctx, newScopes);\n}\n\n/** Try to get the existing baggage header so we can merge this in. */\nfunction getExistingBaggage(carrier: unknown): string | undefined {\n  try {\n    const baggage = (carrier as Record<string, string | string[]>)[SENTRY_BAGGAGE_HEADER];\n    return Array.isArray(baggage) ? baggage.join(',') : baggage;\n  } catch {\n    return undefined;\n  }\n}\n\nfunction getExistingSentryTrace(carrier: unknown): string | string[] | undefined {\n  try {\n    return (carrier as Record<string, string | string[]>)[SENTRY_TRACE_HEADER];\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * It is pretty tricky to get access to the outgoing request URL of a request in the propagator.\n * As we only have access to the context of the span to be sent and the carrier (=headers),\n * but the span may be unsampled and thus have no attributes.\n *\n * So we use the following logic:\n * 1. If we have an active span, we check if it has a URL attribute.\n * 2. Else, if the active span has no URL attribute (e.g. it is unsampled), we check a special trace state (which we set in our sampler).\n */\nfunction getCurrentURL(span: Span): string | undefined {\n  const spanData = spanToJSON(span).data;\n  // `URL_FULL` is the new attribute, but we still support the old one, `HTTP_URL`, for now.\n  // eslint-disable-next-line typescript/no-deprecated\n  const urlAttribute = spanData[HTTP_URL] || spanData[URL_FULL];\n  if (typeof urlAttribute === 'string') {\n    return urlAttribute;\n  }\n\n  // Also look at the traceState, which we may set in the sampler even for unsampled spans\n  const urlTraceState = span.spanContext().traceState?.get(SENTRY_TRACE_STATE_URL);\n  if (urlTraceState) {\n    return urlTraceState;\n  }\n\n  return undefined;\n}\n\nfunction generateRemoteSpanContext({\n  spanId,\n  traceId,\n  sampled,\n  dsc,\n}: {\n  spanId: string;\n  traceId: string;\n  sampled: boolean | undefined;\n  dsc?: Partial<DynamicSamplingContext>;\n}): SpanContext {\n  // We store the DSC as OTEL trace state on the span context\n  const traceState = makeTraceState({\n    dsc,\n    sampled,\n  });\n\n  const spanContext: SpanContext = {\n    traceId,\n    spanId,\n    isRemote: true,\n    traceFlags: sampled ? TraceFlags.SAMPLED : TraceFlags.NONE,\n    traceState,\n  };\n\n  return spanContext;\n}\n", "import type { Context, Span, SpanContext, SpanOptions, TimeInput, Tracer } from '@opentelemetry/api';\nimport { context, SpanStatusCode, trace, TraceFlags } from '@opentelemetry/api';\nimport { isTracingSuppressed, suppressTracing } from '@opentelemetry/core';\nimport type {\n  Client,\n  continueTrace as baseContinueTrace,\n  DynamicSamplingContext,\n  Scope,\n  Span as SentrySpan,\n  TraceContext,\n} from '@sentry/core';\nimport {\n  _INTERNAL_safeMathRandom,\n  generateSpanId,\n  generateTraceId,\n  getClient,\n  getCurrentScope,\n  getDynamicSamplingContextFromScope,\n  getDynamicSamplingContextFromSpan,\n  getRootSpan,\n  getTraceContextFromScope,\n  handleCallbackErrors,\n  hasSpansEnabled,\n  SDK_VERSION,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  spanToJSON,\n  spanToTraceContext,\n} from '@sentry/core';\nimport { continueTraceAsRemoteSpan } from './propagator';\nimport type { OpenTelemetryClient, OpenTelemetrySpanContext } from './types';\nimport { getContextFromScope } from './utils/contextData';\nimport { getSamplingDecision } from './utils/getSamplingDecision';\nimport { makeTraceState } from './utils/makeTraceState';\n\n/**\n * Internal helper for starting spans and manual spans. See {@link startSpan} and {@link startSpanManual} for the public APIs.\n * @param options - The span context options\n * @param callback - The callback to execute with the span\n * @param autoEnd - Whether to automatically end the span after the callback completes\n */\nfunction _startSpan<T>(options: OpenTelemetrySpanContext, callback: (span: Span) => T, autoEnd: boolean): T {\n  const tracer = getTracer();\n\n  const { name, parentSpan: customParentSpan } = options;\n\n  // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n  const wrapper = getActiveSpanWrapper<T>(customParentSpan);\n\n  return wrapper(() => {\n    const activeCtx = getContext(options.scope, options.forceTransaction);\n    const missingRequiredParent = options.onlyIfParent && !trace.getSpan(activeCtx);\n    const ctx = missingRequiredParent ? suppressTracing(activeCtx) : activeCtx;\n\n    if (missingRequiredParent) {\n      getClient()?.recordDroppedEvent('no_parent_span', 'span');\n    }\n\n    const spanOptions = getSpanOptions(options);\n\n    // If spans are not enabled, ensure we suppress tracing for the span creation\n    // but preserve the original context for the callback execution\n    // This ensures that we don't create spans when tracing is disabled which\n    // would otherwise be a problem for users that don't enable tracing but use\n    // custom OpenTelemetry setups.\n    if (!hasSpansEnabled()) {\n      const suppressedCtx = isTracingSuppressed(ctx) ? ctx : suppressTracing(ctx);\n\n      return context.with(suppressedCtx, () => {\n        return tracer.startActiveSpan(name, spanOptions, suppressedCtx, span => {\n          patchSpanEnd(span);\n          // Restore the original unsuppressed context for the callback execution\n          // so that custom OpenTelemetry spans maintain the correct context.\n          // We use activeCtx (not ctx) because ctx may be suppressed when onlyIfParent is true\n          // and no parent span exists. Using activeCtx ensures custom OTel spans are never\n          // inadvertently suppressed.\n          return context.with(activeCtx, () => {\n            return handleCallbackErrors(\n              () => callback(span),\n              () => {\n                // Only set the span status to ERROR when there wasn't any status set before, in order to avoid stomping useful span statuses\n                if (spanToJSON(span).status === undefined) {\n                  span.setStatus({ code: SpanStatusCode.ERROR });\n                }\n              },\n              autoEnd ? () => span.end() : undefined,\n            );\n          });\n        });\n      });\n    }\n\n    return tracer.startActiveSpan(name, spanOptions, ctx, span => {\n      patchSpanEnd(span);\n      return handleCallbackErrors(\n        () => callback(span),\n        () => {\n          // Only set the span status to ERROR when there wasn't any status set before, in order to avoid stomping useful span statuses\n          if (spanToJSON(span).status === undefined) {\n            span.setStatus({ code: SpanStatusCode.ERROR });\n          }\n        },\n        autoEnd ? () => span.end() : undefined,\n      );\n    });\n  });\n}\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * If you want to create a span that is not set as active, use {@link startInactiveSpan}.\n *\n * You'll always get a span passed to the callback,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nexport function startSpan<T>(options: OpenTelemetrySpanContext, callback: (span: Span) => T): T {\n  return _startSpan(options, callback, true);\n}\n\n/**\n * Similar to `Sentry.startSpan`. Wraps a function with a span, but does not finish the span\n * after the function is done automatically. You'll have to call `span.end()` or the `finish` function passed to the callback manually.\n *\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * You'll always get a span passed to the callback,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nexport function startSpanManual<T>(\n  options: OpenTelemetrySpanContext,\n  callback: (span: Span, finish: () => void) => T,\n): T {\n  return _startSpan(options, span => callback(span, () => span.end()), false);\n}\n\n/**\n * Creates a span. This span is not set as active, so will not get automatic instrumentation spans\n * as children or be able to be accessed via `Sentry.getActiveSpan()`.\n *\n * If you want to create a span that is set as active, use {@link startSpan}.\n *\n * This function will always return a span,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nexport function startInactiveSpan(options: OpenTelemetrySpanContext): Span {\n  const tracer = getTracer();\n\n  const { name, parentSpan: customParentSpan } = options;\n\n  // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n  const wrapper = getActiveSpanWrapper<Span>(customParentSpan);\n\n  return wrapper(() => {\n    const activeCtx = getContext(options.scope, options.forceTransaction);\n    const missingRequiredParent = options.onlyIfParent && !trace.getSpan(activeCtx);\n    let ctx = missingRequiredParent ? suppressTracing(activeCtx) : activeCtx;\n\n    if (missingRequiredParent) {\n      getClient()?.recordDroppedEvent('no_parent_span', 'span');\n    }\n\n    const spanOptions = getSpanOptions(options);\n\n    if (!hasSpansEnabled()) {\n      ctx = isTracingSuppressed(ctx) ? ctx : suppressTracing(ctx);\n    }\n\n    const span = tracer.startSpan(name, spanOptions, ctx);\n    patchSpanEnd(span);\n    return span;\n  });\n}\n\n/**\n * Forks the current scope and sets the provided span as active span in the context of the provided callback. Can be\n * passed `null` to start an entirely new span tree.\n *\n * @param span Spans started in the context of the provided callback will be children of this span. If `null` is passed,\n * spans started within the callback will be root spans.\n * @param callback Execution context in which the provided span will be active. Is passed the newly forked scope.\n * @returns the value returned from the provided callback function.\n */\nexport function withActiveSpan<T>(span: Span | null, callback: (scope: Scope) => T): T {\n  const newContextWithActiveSpan = span ? trace.setSpan(context.active(), span) : trace.deleteSpan(context.active());\n  return context.with(newContextWithActiveSpan, () => callback(getCurrentScope()));\n}\n\nfunction getTracer(): Tracer {\n  const client = getClient<Client & OpenTelemetryClient>();\n  return client?.tracer || trace.getTracer('@sentry/opentelemetry', SDK_VERSION);\n}\n\nfunction getSpanOptions(options: OpenTelemetrySpanContext): SpanOptions {\n  const { startTime, attributes, kind, op, links } = options;\n\n  // OTEL expects timestamps in ms, not seconds\n  const fixedStartTime = typeof startTime === 'number' ? ensureTimestampInMilliseconds(startTime) : startTime;\n\n  return {\n    attributes: op\n      ? {\n          [SEMANTIC_ATTRIBUTE_SENTRY_OP]: op,\n          ...attributes,\n        }\n      : attributes,\n    kind,\n    links,\n    startTime: fixedStartTime,\n  };\n}\n\nfunction ensureTimestampInMilliseconds(timestamp: number): number {\n  const isMs = timestamp < 9999999999;\n  return isMs ? timestamp * 1000 : timestamp;\n}\n\n/**\n * Wraps the span's `end()` method so that numeric timestamps passed in seconds\n * are converted to milliseconds before reaching OTel's native `Span.end()`.\n */\nfunction patchSpanEnd(span: Span): void {\n  const originalEnd = span.end.bind(span);\n  span.end = (endTime?: TimeInput) => {\n    return originalEnd(typeof endTime === 'number' ? ensureTimestampInMilliseconds(endTime) : endTime);\n  };\n}\n\nfunction getContext(scope: Scope | undefined, forceTransaction: boolean | undefined): Context {\n  const ctx = getContextForScope(scope);\n  const parentSpan = trace.getSpan(ctx);\n\n  // In the case that we have no parent span, we start a new trace\n  // Note that if we continue a trace, we'll always have a remote parent span here anyhow\n  if (!parentSpan) {\n    return ctx;\n  }\n\n  // If we don't want to force a transaction, and we have a parent span, all good, we just return as-is!\n  if (!forceTransaction) {\n    return ctx;\n  }\n\n  // Else, if we do have a parent span but want to force a transaction, we have to simulate a \"root\" context\n\n  // Else, we need to do two things:\n  // 1. Unset the parent span from the context, so we'll create a new root span\n  // 2. Ensure the propagation context is correct, so we'll continue from the parent span\n  const ctxWithoutSpan = trace.deleteSpan(ctx);\n\n  const { spanId, traceId } = parentSpan.spanContext();\n  const sampled = getSamplingDecision(parentSpan.spanContext());\n\n  // In this case, when we are forcing a transaction, we want to treat this like continuing an incoming trace\n  // so we set the traceState according to the root span\n  const rootSpan = getRootSpan(parentSpan);\n  const dsc = getDynamicSamplingContextFromSpan(rootSpan);\n\n  const traceState = makeTraceState({\n    dsc,\n    sampled,\n  });\n\n  const spanOptions: SpanContext = {\n    traceId,\n    spanId,\n    isRemote: true,\n    traceFlags: sampled ? TraceFlags.SAMPLED : TraceFlags.NONE,\n    traceState,\n  };\n\n  const ctxWithSpanContext = trace.setSpanContext(ctxWithoutSpan, spanOptions);\n\n  return ctxWithSpanContext;\n}\n\nfunction getContextForScope(scope?: Scope): Context {\n  if (scope) {\n    const ctx = getContextFromScope(scope);\n    if (ctx) {\n      return ctx;\n    }\n  }\n\n  return context.active();\n}\n\n/**\n * Continue a trace from `sentry-trace` and `baggage` values.\n * These values can be obtained from incoming request headers, or in the browser from `<meta name=\"sentry-trace\">`\n * and `<meta name=\"baggage\">` HTML tags.\n *\n * Spans started with `startSpan`, `startSpanManual` and `startInactiveSpan`, within the callback will automatically\n * be attached to the incoming trace.\n *\n * This is a custom version of `continueTrace` that is used in OTEL-powered environments.\n * It propagates the trace as a remote span, in addition to setting it on the propagation context.\n */\nexport function continueTrace<T>(options: Parameters<typeof baseContinueTrace>[0], callback: () => T): T {\n  return continueTraceAsRemoteSpan(context.active(), options, callback);\n}\n\n/**\n * Start a new trace with a unique traceId, ensuring all spans created within the callback\n * share the same traceId.\n *\n * This is a custom version of `startNewTrace` for OTEL-powered environments.\n * It injects the new traceId as a remote span context into the OTEL context, so that\n * `startInactiveSpan` and `startSpan` pick it up correctly.\n */\nexport function startNewTrace<T>(callback: () => T): T {\n  const traceId = generateTraceId();\n  const spanId = generateSpanId();\n\n  const spanContext: SpanContext = {\n    traceId,\n    spanId,\n    isRemote: true,\n    traceFlags: TraceFlags.NONE,\n  };\n\n  const ctxWithTrace = trace.setSpanContext(context.active(), spanContext);\n\n  return context.with(ctxWithTrace, () => {\n    getCurrentScope().setPropagationContext({\n      traceId,\n      sampleRand: _INTERNAL_safeMathRandom(),\n    });\n    return callback();\n  });\n}\n\n/**\n * Get the trace context for a given scope.\n * We have a custom implementation here because we need an OTEL-specific way to get the span from a scope.\n */\nexport function getTraceContextForScope(\n  client: Client,\n  scope: Scope,\n): [dynamicSamplingContext: Partial<DynamicSamplingContext>, traceContext: TraceContext] {\n  const ctx = getContextFromScope(scope);\n  const span = ctx && trace.getSpan(ctx);\n\n  const traceContext = span ? spanToTraceContext(span) : getTraceContextFromScope(scope);\n\n  const dynamicSamplingContext = span\n    ? getDynamicSamplingContextFromSpan(span)\n    : getDynamicSamplingContextFromScope(client, scope);\n  return [dynamicSamplingContext, traceContext];\n}\n\nfunction getActiveSpanWrapper<T>(parentSpan: Span | SentrySpan | undefined | null): (callback: () => T) => T {\n  return parentSpan !== undefined\n    ? (callback: () => T) => {\n        return withActiveSpan(parentSpan, callback);\n      }\n    : (callback: () => T) => callback();\n}\n", "import { context } from '@opentelemetry/api';\nimport {\n  suppressTracing as suppressTracingImpl,\n  isTracingSuppressed as isTracingSuppressedImpl,\n} from '@opentelemetry/core';\nimport type { Scope } from '@sentry/core';\nimport { getContextFromScope } from './contextData';\n\n/** Suppress tracing in the given callback, ensuring no spans are generated inside of it. */\nexport function suppressTracing<T>(callback: () => T): T {\n  const ctx = suppressTracingImpl(context.active());\n  return context.with(ctx, callback);\n}\n\nexport function isTracingSuppressed(scope?: Scope): boolean {\n  const ctx = scope ? getContextFromScope(scope) : context.active();\n  return ctx ? isTracingSuppressedImpl(ctx) : false;\n}\n", "import type { Client } from '@sentry/core';\nimport { getDynamicSamplingContextFromSpan, getRootSpan, spanToTraceContext } from '@sentry/core';\nimport { getActiveSpan } from './utils/getActiveSpan';\n\n/** Ensure the `trace` context is set on all events. */\nexport function setupEventContextTrace(client: Client): void {\n  client.on('preprocessEvent', event => {\n    const span = getActiveSpan();\n    // For transaction events, this is handled separately\n    // Because the active span may not be the span that is actually the transaction event\n    if (!span || event.type === 'transaction') {\n      return;\n    }\n\n    // If event has already set `trace` context, use that one.\n    event.contexts = {\n      trace: spanToTraceContext(span),\n      ...event.contexts,\n    };\n\n    const rootSpan = getRootSpan(span);\n\n    event.sdkProcessingMetadata = {\n      dynamicSamplingContext: getDynamicSamplingContextFromSpan(rootSpan),\n      ...event.sdkProcessingMetadata,\n    };\n\n    return event;\n  });\n}\n", "import type { Context } from '@opentelemetry/api';\nimport { trace } from '@opentelemetry/api';\nimport type { Scope } from '@sentry/core';\nimport { getCurrentScope, getIsolationScope } from '@sentry/core';\nimport {\n  SENTRY_FORK_ISOLATION_SCOPE_CONTEXT_KEY,\n  SENTRY_FORK_SET_ISOLATION_SCOPE_CONTEXT_KEY,\n  SENTRY_FORK_SET_SCOPE_CONTEXT_KEY,\n  SENTRY_TRACE_STATE_CHILD_IGNORED,\n} from '../constants';\nimport { getScopesFromContext, setContextOnScope, setScopesOnContext } from './contextData';\n\n/**\n * Merge Sentry scopes into an OpenTelemetry {@link Context} and apply trace-context adjustments\n * used by Sentry OpenTelemetry context manager(s).\n *\n * @param context - Context passed into `ContextManager.with`.\n * @param activeContext - Context that was active before entering `with` (e.g. `this.active()`), used\n *   to restore the parent span when the incoming span is marked ignored for children.\n * @returns A new context ready for `super.with` / `AsyncLocalStorage.run`.\n */\nexport function buildContextWithSentryScopes(context: Context, activeContext: Context): Context {\n  const span = trace.getSpan(context);\n  let effectiveContext: Context;\n  if (span?.spanContext().traceState?.get(SENTRY_TRACE_STATE_CHILD_IGNORED) === '1') {\n    const contextWithoutSpan = trace.deleteSpan(context);\n    const parentSpan = trace.getSpan(activeContext);\n    effectiveContext = parentSpan ? trace.setSpan(contextWithoutSpan, parentSpan) : contextWithoutSpan;\n  } else {\n    effectiveContext = context;\n  }\n\n  const currentScopes = getScopesFromContext(effectiveContext);\n  const currentScope = currentScopes?.scope || getCurrentScope();\n  const currentIsolationScope = currentScopes?.isolationScope || getIsolationScope();\n\n  const shouldForkIsolationScope = effectiveContext.getValue(SENTRY_FORK_ISOLATION_SCOPE_CONTEXT_KEY) === true;\n  const scope = effectiveContext.getValue(SENTRY_FORK_SET_SCOPE_CONTEXT_KEY) as Scope | undefined;\n  const isolationScope = effectiveContext.getValue(SENTRY_FORK_SET_ISOLATION_SCOPE_CONTEXT_KEY) as Scope | undefined;\n\n  const newCurrentScope = scope || currentScope.clone();\n  const newIsolationScope =\n    isolationScope || (shouldForkIsolationScope ? currentIsolationScope.clone() : currentIsolationScope);\n  const scopes = { scope: newCurrentScope, isolationScope: newIsolationScope };\n\n  const ctx1 = setScopesOnContext(effectiveContext, scopes);\n\n  const ctx2 = ctx1\n    .deleteValue(SENTRY_FORK_ISOLATION_SCOPE_CONTEXT_KEY)\n    .deleteValue(SENTRY_FORK_SET_SCOPE_CONTEXT_KEY)\n    .deleteValue(SENTRY_FORK_SET_ISOLATION_SCOPE_CONTEXT_KEY);\n\n  setContextOnScope(newCurrentScope, ctx2);\n\n  return ctx2;\n}\n", "import type { AsyncLocalStorage } from 'node:async_hooks';\nimport type { Context, ContextManager } from '@opentelemetry/api';\nimport { SENTRY_SCOPES_CONTEXT_KEY } from './constants';\nimport { buildContextWithSentryScopes } from './utils/buildContextWithSentryScopes';\nimport { setIsSetup } from './utils/setupCheck';\n\nexport type AsyncLocalStorageLookup = {\n  asyncLocalStorage: AsyncLocalStorage<unknown>;\n  contextSymbol: symbol;\n};\n\ntype ExtendedContextManagerInstance<ContextManagerInstance extends ContextManager> = new (\n  ...args: unknown[]\n) => ContextManagerInstance & {\n  getAsyncLocalStorageLookup(): AsyncLocalStorageLookup;\n};\n\n/**\n * Wrap an OpenTelemetry ContextManager in a way that ensures the context is kept in sync with the Sentry Scope.\n *\n * Usage:\n * import { AsyncLocalStorageContextManager } from '@opentelemetry/context-async-hooks';\n * const SentryContextManager = wrapContextManagerClass(AsyncLocalStorageContextManager);\n * const contextManager = new SentryContextManager();\n *\n * @deprecated Use {@link SentryAsyncLocalStorageContextManager} instead.\n */\nexport function wrapContextManagerClass<ContextManagerInstance extends ContextManager>(\n  ContextManagerClass: new (...args: unknown[]) => ContextManagerInstance,\n): ExtendedContextManagerInstance<ContextManagerInstance> {\n  /**\n   * This is a custom ContextManager for OpenTelemetry, which extends the default AsyncLocalStorageContextManager.\n   * It ensures that we create new scopes per context, so that the OTEL Context & the Sentry Scope are always in sync.\n   *\n   * Note that we currently only support AsyncHooks with this,\n   * but since this should work for Node 14+ anyhow that should be good enough.\n   */\n\n  // @ts-expect-error TS does not like this, but we know this is fine\n  class SentryContextManager extends ContextManagerClass {\n    public constructor(...args: unknown[]) {\n      super(...args);\n      setIsSetup('SentryContextManager');\n    }\n    /**\n     * Overwrite with() of the original AsyncLocalStorageContextManager\n     * to ensure we also create new scopes per context.\n     */\n    public with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n      context: Context,\n      fn: F,\n      thisArg?: ThisParameterType<F>,\n      ...args: A\n    ): ReturnType<F> {\n      const ctx2 = buildContextWithSentryScopes(context, this.active());\n      return super.with(ctx2, fn, thisArg, ...args);\n    }\n\n    /**\n     * Gets underlying AsyncLocalStorage and symbol to allow lookup of scope.\n     */\n    public getAsyncLocalStorageLookup(): AsyncLocalStorageLookup {\n      return {\n        // @ts-expect-error This is on the base class, but not part of the interface\n        asyncLocalStorage: this._asyncLocalStorage,\n        contextSymbol: SENTRY_SCOPES_CONTEXT_KEY,\n      };\n    }\n  }\n\n  return SentryContextManager as unknown as ExtendedContextManagerInstance<ContextManagerInstance>;\n}\n", "import type { ReadableSpan } from '@opentelemetry/sdk-trace-base';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_PARENT_IS_REMOTE } from '../semanticAttributes';\nimport { getParentSpanId } from './getParentSpanId';\n\nexport interface SpanNode {\n  id: string;\n  span?: ReadableSpan;\n  parentNode?: SpanNode | undefined;\n  children: SpanNode[];\n}\n\ntype SpanMap = Map<string, SpanNode>;\n\n/**\n * This function runs through a list of OTEL Spans, and wraps them in an `SpanNode`\n * where each node holds a reference to their parent node.\n */\nexport function groupSpansWithParents(spans: ReadableSpan[]): SpanNode[] {\n  const nodeMap: SpanMap = new Map<string, SpanNode>();\n\n  for (const span of spans) {\n    createOrUpdateSpanNodeAndRefs(nodeMap, span);\n  }\n\n  return Array.from(nodeMap, function ([_id, spanNode]) {\n    return spanNode;\n  });\n}\n\n/**\n * This returns the _local_ parent ID - `parentId` on the span may point to a remote span.\n */\nexport function getLocalParentId(span: ReadableSpan): string | undefined {\n  const parentIsRemote = span.attributes[SEMANTIC_ATTRIBUTE_SENTRY_PARENT_IS_REMOTE] === true;\n  // If the parentId is the trace parent ID, we pretend it's undefined\n  // As this means the parent exists somewhere else\n  return !parentIsRemote ? getParentSpanId(span) : undefined;\n}\n\nfunction createOrUpdateSpanNodeAndRefs(nodeMap: SpanMap, span: ReadableSpan): void {\n  const id = span.spanContext().spanId;\n  const parentId = getLocalParentId(span);\n\n  if (!parentId) {\n    createOrUpdateNode(nodeMap, { id, span, children: [] });\n    return;\n  }\n\n  // Else make sure to create parent node as well\n  // Note that the parent may not know it's parent _yet_, this may be updated in a later pass\n  const parentNode = createOrGetParentNode(nodeMap, parentId);\n  const node = createOrUpdateNode(nodeMap, { id, span, parentNode, children: [] });\n  parentNode.children.push(node);\n}\n\nfunction createOrGetParentNode(nodeMap: SpanMap, id: string): SpanNode {\n  const existing = nodeMap.get(id);\n\n  if (existing) {\n    return existing;\n  }\n\n  return createOrUpdateNode(nodeMap, { id, children: [] });\n}\n\nfunction createOrUpdateNode(nodeMap: SpanMap, spanNode: SpanNode): SpanNode {\n  const existing = nodeMap.get(spanNode.id);\n\n  // If span is already set, nothing to do here\n  if (existing?.span) {\n    return existing;\n  }\n\n  // If it exists but span is not set yet, we update it\n  if (existing && !existing.span) {\n    existing.span = spanNode.span;\n    existing.parentNode = spanNode.parentNode;\n    return existing;\n  }\n\n  // Else, we create a new one...\n  nodeMap.set(spanNode.id, spanNode);\n  return spanNode;\n}\n", "import { SpanStatusCode } from '@opentelemetry/api';\nimport { HTTP_RESPONSE_STATUS_CODE, HTTP_STATUS_CODE, RPC_GRPC_STATUS_CODE } from '@sentry/conventions/attributes';\nimport type { SpanAttributes, SpanStatus } from '@sentry/core';\nimport { getSpanStatusFromHttpCode, SPAN_STATUS_ERROR, SPAN_STATUS_OK } from '@sentry/core';\nimport type { AbstractSpan } from '../types';\nimport { spanHasAttributes, spanHasStatus } from './spanTypes';\n\n// canonicalCodesGrpcMap maps some GRPC codes to Sentry's span statuses. See description in grpc documentation.\nconst canonicalGrpcErrorCodesMap: Record<string, SpanStatus['message']> = {\n  '1': 'cancelled',\n  '2': 'unknown_error',\n  '3': 'invalid_argument',\n  '4': 'deadline_exceeded',\n  '5': 'not_found',\n  '6': 'already_exists',\n  '7': 'permission_denied',\n  '8': 'resource_exhausted',\n  '9': 'failed_precondition',\n  '10': 'aborted',\n  '11': 'out_of_range',\n  '12': 'unimplemented',\n  '13': 'internal_error',\n  '14': 'unavailable',\n  '15': 'data_loss',\n  '16': 'unauthenticated',\n} as const;\n\nexport const isStatusErrorMessageValid = (message: string): boolean => {\n  return Object.values(canonicalGrpcErrorCodesMap).includes(message as SpanStatus['message']);\n};\n\n/**\n * Get a Sentry span status from an otel span.\n */\nexport function mapStatus(span: AbstractSpan): SpanStatus {\n  const attributes = spanHasAttributes(span) ? span.attributes : {};\n  const status = spanHasStatus(span) ? span.status : undefined;\n\n  if (status) {\n    // Since span status OK is not set by default, we give it priority: https://opentelemetry.io/docs/concepts/signals/traces/#span-status\n    if (status.code === SpanStatusCode.OK) {\n      return { code: SPAN_STATUS_OK };\n      // If the span is already marked as erroneous we return that exact status\n    } else if (status.code === SpanStatusCode.ERROR) {\n      if (typeof status.message === 'undefined') {\n        const inferredStatus = inferStatusFromAttributes(attributes);\n        if (inferredStatus) {\n          return inferredStatus;\n        }\n      }\n\n      if (status.message && isStatusErrorMessageValid(status.message)) {\n        return { code: SPAN_STATUS_ERROR, message: status.message };\n      } else {\n        return { code: SPAN_STATUS_ERROR, message: 'internal_error' };\n      }\n    }\n  }\n\n  // If the span status is UNSET, we try to infer it from HTTP or GRPC status codes.\n  const inferredStatus = inferStatusFromAttributes(attributes);\n\n  if (inferredStatus) {\n    return inferredStatus;\n  }\n\n  // We default to setting the spans status to ok.\n  if (status?.code === SpanStatusCode.UNSET) {\n    return { code: SPAN_STATUS_OK };\n  } else {\n    return { code: SPAN_STATUS_ERROR, message: 'unknown_error' };\n  }\n}\n\nexport function inferStatusFromAttributes(attributes: SpanAttributes): SpanStatus | undefined {\n  // If the span status is UNSET, we try to infer it from HTTP or GRPC status codes.\n\n  // eslint-disable-next-line typescript/no-deprecated\n  const httpCodeAttribute = attributes[HTTP_RESPONSE_STATUS_CODE] || attributes[HTTP_STATUS_CODE];\n  // eslint-disable-next-line typescript/no-deprecated\n  const grpcCodeAttribute = attributes[RPC_GRPC_STATUS_CODE];\n\n  const numberHttpCode =\n    typeof httpCodeAttribute === 'number'\n      ? httpCodeAttribute\n      : typeof httpCodeAttribute === 'string'\n        ? parseInt(httpCodeAttribute)\n        : undefined;\n\n  if (typeof numberHttpCode === 'number') {\n    return getSpanStatusFromHttpCode(numberHttpCode);\n  }\n\n  if (typeof grpcCodeAttribute === 'string') {\n    return { code: SPAN_STATUS_ERROR, message: canonicalGrpcErrorCodesMap[grpcCodeAttribute] || 'unknown_error' };\n  }\n\n  return undefined;\n}\n", "/* eslint-disable max-lines */\nimport type { Span } from '@opentelemetry/api';\nimport { SpanKind } from '@opentelemetry/api';\nimport type { ReadableSpan } from '@opentelemetry/sdk-trace-base';\nimport { HTTP_RESPONSE_STATUS_CODE, HTTP_STATUS_CODE } from '@sentry/conventions/attributes';\nimport type {\n  SpanAttributes,\n  SpanJSON,\n  SpanOrigin,\n  TraceContext,\n  TransactionEvent,\n  TransactionSource,\n} from '@sentry/core';\nimport {\n  _INTERNAL_safeDateNow,\n  captureEvent,\n  convertSpanLinksForEnvelope,\n  debounce,\n  debug,\n  getCapturedScopesOnSpan,\n  getDynamicSamplingContextFromSpan,\n  getStatusMessage,\n  LRUMap,\n  SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE,\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n  spanTimeInputToSeconds,\n  timedEventsToMeasurements,\n} from '@sentry/core';\nimport { DEBUG_BUILD } from './debug-build';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_PARENT_IS_REMOTE } from './semanticAttributes';\nimport { getParentSpanId } from './utils/getParentSpanId';\nimport { getRequestSpanData } from './utils/getRequestSpanData';\nimport type { SpanNode } from './utils/groupSpansWithParents';\nimport { getLocalParentId, groupSpansWithParents } from './utils/groupSpansWithParents';\nimport { mapStatus } from './utils/mapStatus';\nimport { parseSpanDescription } from './utils/parseSpanDescription';\n\ntype SpanNodeCompleted = SpanNode & { span: ReadableSpan };\n\nconst MAX_SPAN_COUNT = 1000;\nconst DEFAULT_TIMEOUT = 300; // 5 min\nconst SENT_SPANS_MAX_SIZE = 10000;\n\ninterface FinishedSpanBucket {\n  timestampInS: number;\n  spans: Set<ReadableSpan>;\n}\n\n/**\n * A Sentry-specific exporter that converts OpenTelemetry Spans to Sentry Spans & Transactions.\n */\nexport class SentrySpanExporter {\n  /*\n   * A quick explanation on the buckets: We do bucketing of finished spans for efficiency. This span exporter is\n   * accumulating spans until a root span is encountered and then it flushes all the spans that are descendants of that\n   * root span. Because it is totally in the realm of possibilities that root spans are never finished, and we don't\n   * want to accumulate spans indefinitely in memory, we need to periodically evacuate spans. Naively we could simply\n   * store the spans in an array and each time a new span comes in we could iterate through the entire array and\n   * evacuate all spans that have an end-timestamp that is older than our limit. This could get quite expensive because\n   * we would have to iterate a potentially large number of spans every time we evacuate. We want to avoid these large\n   * bursts of computation.\n   *\n   * Instead we go for a bucketing approach and put spans into buckets, based on what second\n   * (modulo the time limit) the span was put into the exporter. With buckets, when we decide to evacuate, we can\n   * iterate through the bucket entries instead, which have an upper bound of items, making the evacuation much more\n   * efficient. Cleaning up also becomes much more efficient since it simply involves de-referencing a bucket within the\n   * bucket array, and letting garbage collection take care of the rest.\n   */\n  private _finishedSpanBuckets: (FinishedSpanBucket | undefined)[];\n  private _finishedSpanBucketSize: number;\n  private _spansToBucketEntry: WeakMap<ReadableSpan, FinishedSpanBucket>;\n  private _lastCleanupTimestampInS: number;\n  private _sentSpans: LRUMap<string, number>;\n  /* Internally, we use a debounced flush to give some wiggle room to the span processor to accumulate more spans. */\n  private _debouncedFlush: ReturnType<typeof debounce>;\n\n  public constructor(options?: {\n    /** Lower bound of time in seconds until spans that are buffered but have not been sent as part of a transaction get cleared from memory. */\n    timeout?: number;\n  }) {\n    this._finishedSpanBucketSize = options?.timeout || DEFAULT_TIMEOUT;\n    this._finishedSpanBuckets = new Array(this._finishedSpanBucketSize).fill(undefined);\n    this._lastCleanupTimestampInS = Math.floor(_INTERNAL_safeDateNow() / 1000);\n    this._spansToBucketEntry = new WeakMap();\n    this._sentSpans = new LRUMap<string, number>(SENT_SPANS_MAX_SIZE);\n    this._debouncedFlush = debounce(this.flush.bind(this), 1, { maxWait: 100 });\n  }\n\n  /**\n   * Export a single span.\n   * This is called by the span processor whenever a span is ended.\n   */\n  public export(span: ReadableSpan): void {\n    const currentTimestampInS = Math.floor(_INTERNAL_safeDateNow() / 1000);\n\n    if (this._lastCleanupTimestampInS !== currentTimestampInS) {\n      let droppedSpanCount = 0;\n      this._finishedSpanBuckets.forEach((bucket, i) => {\n        if (bucket && bucket.timestampInS <= currentTimestampInS - this._finishedSpanBucketSize) {\n          droppedSpanCount += bucket.spans.size;\n          this._finishedSpanBuckets[i] = undefined;\n        }\n      });\n      if (droppedSpanCount > 0) {\n        DEBUG_BUILD &&\n          debug.log(\n            `SpanExporter dropped ${droppedSpanCount} spans because they were pending for more than ${this._finishedSpanBucketSize} seconds.`,\n          );\n      }\n      this._lastCleanupTimestampInS = currentTimestampInS;\n    }\n\n    const currentBucketIndex = currentTimestampInS % this._finishedSpanBucketSize;\n    const currentBucket = this._finishedSpanBuckets[currentBucketIndex] || {\n      timestampInS: currentTimestampInS,\n      spans: new Set(),\n    };\n    this._finishedSpanBuckets[currentBucketIndex] = currentBucket;\n    currentBucket.spans.add(span);\n    this._spansToBucketEntry.set(span, currentBucket);\n\n    // If the span doesn't have a local parent ID (it's a root span), we're gonna flush all the ended spans\n    const localParentId = getLocalParentId(span);\n    if (!localParentId || this._sentSpans.get(localParentId)) {\n      this._debouncedFlush();\n    }\n  }\n\n  /**\n   * Try to flush any pending spans immediately.\n   * This is called internally by the exporter (via _debouncedFlush),\n   * but can also be triggered externally if we force-flush.\n   */\n  public flush(): void {\n    const finishedSpans = this._finishedSpanBuckets.flatMap(bucket => (bucket ? Array.from(bucket.spans) : []));\n\n    const sentSpans = this._maybeSend(finishedSpans);\n\n    const sentSpanCount = sentSpans.size;\n    const remainingOpenSpanCount = finishedSpans.length - sentSpanCount;\n    DEBUG_BUILD &&\n      debug.log(\n        `SpanExporter exported ${sentSpanCount} spans, ${remainingOpenSpanCount} spans are waiting for their parent spans to finish`,\n      );\n\n    for (const span of sentSpans) {\n      this._sentSpans.set(span.spanContext().spanId, 1);\n      const bucketEntry = this._spansToBucketEntry.get(span);\n      if (bucketEntry) {\n        bucketEntry.spans.delete(span);\n      }\n    }\n\n    // Cancel a pending debounced flush, if there is one\n    // This can be relevant if we directly flush, circumventing the debounce\n    // in that case, we want to cancel any pending debounced flush\n    this._debouncedFlush.cancel();\n  }\n\n  /**\n   * Clear the exporter.\n   * This is called when the span processor is shut down.\n   */\n  public clear(): void {\n    this._finishedSpanBuckets = this._finishedSpanBuckets.fill(undefined);\n    this._sentSpans.clear();\n    this._debouncedFlush.cancel();\n  }\n\n  /**\n   * Send the given spans, but only if they are part of a finished transaction.\n   *\n   * Returns the sent spans.\n   * Spans remain unsent when their parent span is not yet finished.\n   * This will happen regularly, as child spans are generally finished before their parents.\n   * But it _could_ also happen because, for whatever reason, a parent span was lost.\n   * In this case, we'll eventually need to clean this up.\n   */\n  private _maybeSend(spans: ReadableSpan[]): Set<ReadableSpan> {\n    const grouped = groupSpansWithParents(spans);\n    const sentSpans = new Set<ReadableSpan>();\n\n    const rootNodes = this._getCompletedRootNodes(grouped);\n\n    for (const root of rootNodes) {\n      const span = root.span;\n      sentSpans.add(span);\n      const transactionEvent = createTransactionForOtelSpan(span);\n\n      // Add an attribute to the transaction event to indicate that this transaction is an orphaned transaction\n      if (root.parentNode && this._sentSpans.get(root.parentNode.id)) {\n        const traceData = transactionEvent.contexts?.trace?.data;\n        if (traceData) {\n          traceData['sentry.parent_span_already_sent'] = true;\n        }\n      }\n\n      // We'll recursively add all the child spans to this array\n      const spans = transactionEvent.spans || [];\n\n      let hasGenAiSpans = false;\n      for (const child of root.children) {\n        if (createAndFinishSpanForOtelSpan(child, spans, sentSpans)) {\n          hasGenAiSpans = true;\n        }\n      }\n\n      // spans.sort() mutates the array, but we do not use this anymore after this point\n      // so we can safely mutate it here\n      transactionEvent.spans =\n        spans.length > MAX_SPAN_COUNT\n          ? spans.sort((a, b) => a.start_timestamp - b.start_timestamp).slice(0, MAX_SPAN_COUNT)\n          : spans;\n\n      if (hasGenAiSpans) {\n        transactionEvent.sdkProcessingMetadata = {\n          ...transactionEvent.sdkProcessingMetadata,\n          hasGenAiSpans: true,\n        };\n      }\n\n      const measurements = timedEventsToMeasurements(span.events);\n      if (measurements) {\n        transactionEvent.measurements = measurements;\n      }\n\n      captureEvent(transactionEvent);\n    }\n\n    return sentSpans;\n  }\n\n  /** Check if a node is a completed root node or a node whose parent has already been sent */\n  private _nodeIsCompletedRootNodeOrHasSentParent(node: SpanNode): node is SpanNodeCompleted {\n    return !!node.span && (!node.parentNode || !!this._sentSpans.get(node.parentNode.id));\n  }\n\n  /** Get all completed root nodes from a list of nodes */\n  private _getCompletedRootNodes(nodes: SpanNode[]): SpanNodeCompleted[] {\n    // TODO: We should be able to remove the explicit `node is SpanNodeCompleted` type guard\n    //       once we stop supporting TS < 5.5\n    return nodes.filter((node): node is SpanNodeCompleted => this._nodeIsCompletedRootNodeOrHasSentParent(node));\n  }\n}\n\nfunction parseSpan(span: ReadableSpan): { op?: string; origin?: SpanOrigin; source?: TransactionSource } {\n  const attributes = span.attributes;\n\n  const origin = attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined;\n  const op = attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] as string | undefined;\n  const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] as TransactionSource | undefined;\n\n  return { origin, op, source };\n}\n\n/** Exported only for tests. */\nexport function createTransactionForOtelSpan(span: ReadableSpan): TransactionEvent {\n  const { op, description, data, origin = 'manual', source } = getSpanData(span);\n  const capturedSpanScopes = getCapturedScopesOnSpan(span as unknown as Span);\n\n  const sampleRate = span.attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] as number | undefined;\n\n  const attributes: SpanAttributes = {\n    [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source,\n    [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: sampleRate,\n    [SEMANTIC_ATTRIBUTE_SENTRY_OP]: op,\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: origin,\n    ...data,\n    ...removeSentryAttributes(span.attributes),\n  };\n\n  const { links } = span;\n  const { traceId: trace_id, spanId: span_id } = span.spanContext();\n\n  // If parentSpanIdFromTraceState is defined at all, we want it to take precedence\n  // In that case, an empty string should be interpreted as \"no parent span id\",\n  // even if `span.parentSpanId` is set\n  // this is the case when we are starting a new trace, where we have a virtual span based on the propagationContext\n  // We only want to continue the traceId in this case, but ignore the parent span\n  const parent_span_id = getParentSpanId(span);\n\n  const status = mapStatus(span);\n\n  const traceContext: TraceContext = {\n    parent_span_id,\n    span_id,\n    trace_id,\n    data: attributes,\n    origin,\n    op,\n    status: getStatusMessage(status), // As per protocol, span status is allowed to be undefined\n    links: convertSpanLinksForEnvelope(links),\n  };\n\n  const statusCode = attributes[HTTP_RESPONSE_STATUS_CODE];\n  const responseContext = typeof statusCode === 'number' ? { response: { status_code: statusCode } } : undefined;\n\n  const transactionEvent: TransactionEvent = {\n    contexts: {\n      trace: traceContext,\n      otel: {\n        resource: span.resource.attributes,\n      },\n      ...responseContext,\n    },\n    spans: [],\n    start_timestamp: spanTimeInputToSeconds(span.startTime),\n    timestamp: spanTimeInputToSeconds(span.endTime),\n    transaction: description,\n    type: 'transaction',\n    sdkProcessingMetadata: {\n      capturedSpanScope: capturedSpanScopes.scope,\n      capturedSpanIsolationScope: capturedSpanScopes.isolationScope,\n      sampleRate,\n      dynamicSamplingContext: getDynamicSamplingContextFromSpan(span as unknown as Span),\n    },\n    ...(source && {\n      transaction_info: {\n        source,\n      },\n    }),\n  };\n\n  return transactionEvent;\n}\n\n/**\n * Returns `true` if this span or any descendant is a gen_ai span.\n */\nfunction createAndFinishSpanForOtelSpan(node: SpanNode, spans: SpanJSON[], sentSpans: Set<ReadableSpan>): boolean {\n  const span = node.span;\n\n  if (span) {\n    sentSpans.add(span);\n  }\n\n  const shouldDrop = !span;\n\n  // If this span should be dropped, we still want to create spans for the children of this\n  if (shouldDrop) {\n    let hasGenAiSpans = false;\n    node.children.forEach(child => {\n      if (createAndFinishSpanForOtelSpan(child, spans, sentSpans)) {\n        hasGenAiSpans = true;\n      }\n    });\n    return hasGenAiSpans;\n  }\n\n  const span_id = span.spanContext().spanId;\n  const trace_id = span.spanContext().traceId;\n  const parentSpanId = getParentSpanId(span);\n\n  const { attributes, startTime, endTime, links } = span;\n\n  const { op, description, data, origin = 'manual' } = getSpanData(span);\n  const allData = {\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: origin,\n    [SEMANTIC_ATTRIBUTE_SENTRY_OP]: op,\n    ...removeSentryAttributes(attributes),\n    ...data,\n  };\n\n  const status = mapStatus(span);\n\n  const spanJSON: SpanJSON = {\n    span_id,\n    trace_id,\n    data: allData,\n    description,\n    parent_span_id: parentSpanId,\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) || undefined,\n    status: getStatusMessage(status), // As per protocol, span status is allowed to be undefined\n    op,\n    origin,\n    measurements: timedEventsToMeasurements(span.events),\n    links: convertSpanLinksForEnvelope(links),\n  };\n\n  spans.push(spanJSON);\n\n  let hasGenAiSpans = !!op?.startsWith('gen_ai.');\n  node.children.forEach(child => {\n    if (createAndFinishSpanForOtelSpan(child, spans, sentSpans)) {\n      hasGenAiSpans = true;\n    }\n  });\n  return hasGenAiSpans;\n}\n\nfunction getSpanData(span: ReadableSpan): {\n  data: Record<string, unknown>;\n  op?: string;\n  description: string;\n  source?: TransactionSource;\n  origin?: SpanOrigin;\n} {\n  const { op: definedOp, source: definedSource, origin } = parseSpan(span);\n  const { op: inferredOp, description, source: inferredSource, data: inferredData } = parseSpanDescription(span);\n\n  const op = definedOp || inferredOp;\n  const source = definedSource || inferredSource;\n\n  const data = { ...inferredData, ...getData(span) };\n\n  return {\n    op,\n    description,\n    source,\n    origin,\n    data,\n  };\n}\n\n/**\n * Remove custom `sentry.` attributes we do not need to send.\n * These are more carrier attributes we use inside of the SDK, we do not need to send them to the API.\n */\nfunction removeSentryAttributes(data: Record<string, unknown>): Record<string, unknown> {\n  const cleanedData = { ...data };\n\n  /* eslint-disable @typescript-eslint/no-dynamic-delete */\n  delete cleanedData[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE];\n  delete cleanedData[SEMANTIC_ATTRIBUTE_SENTRY_PARENT_IS_REMOTE];\n  delete cleanedData[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n  /* eslint-enable @typescript-eslint/no-dynamic-delete */\n\n  return cleanedData;\n}\n\nfunction getData(span: ReadableSpan): Record<string, unknown> {\n  const attributes = span.attributes;\n  const data: Record<string, unknown> = {};\n\n  if (span.kind !== SpanKind.INTERNAL) {\n    data['otel.kind'] = SpanKind[span.kind];\n  }\n\n  // eslint-disable-next-line typescript/no-deprecated\n  const maybeHttpStatusCodeAttribute = attributes[HTTP_STATUS_CODE];\n  if (maybeHttpStatusCodeAttribute) {\n    data[HTTP_RESPONSE_STATUS_CODE] = maybeHttpStatusCodeAttribute as string;\n  }\n\n  const requestData = getRequestSpanData(span);\n\n  if (requestData.url) {\n    data.url = requestData.url;\n  }\n\n  // TODO(v11): emit `url.query`/`url.fragment` (OTel-standard, no leading `?`/`#`) and drop\n  // this stripping + the `http.query`/`http.fragment` attributes. `http.query` is actually specced to\n  // keep the leading `?`, so stripping diverges from our own conventions; `url.query` sidesteps it.\n  if (requestData['http.query']) {\n    data['http.query'] = requestData['http.query'].slice(1);\n  }\n  if (requestData['http.fragment']) {\n    data['http.fragment'] = requestData['http.fragment'].slice(1);\n  }\n\n  return data;\n}\n", "import type { SpanAttributes, StreamedSpanJSON } from '@sentry/core';\nimport {\n  safeSetSpanJSONAttributes,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n  SPAN_KIND,\n  spanKindToName,\n} from '@sentry/core';\nimport { inferSpanData } from './parseSpanDescription';\nimport { SENTRY_ORIGIN } from '@sentry/conventions/attributes';\n\n/**\n * Backfill op, source, name and data on a streamed span JSON from OTel semantic conventions.\n * Mirrors the inference the {@link SentrySpanExporter} applies to non-streamed spans via `getSpanData`.\n * Explicitly set attributes are preserved via `safeSetSpanJSONAttributes`.\n *\n * Runs as a `preprocessSpan` subscriber (streamed-only) on both span pipelines: the OTel SDK\n * `SentrySpanProcessor` and the `SentryTracerProvider`. On the latter, `applyOtelSpanData` has already\n * inferred most data on the native span; this fills the remaining gap (per-span `sentry.source` on\n * child spans, which `applyOtelSpanData` only sets on segment roots). `inferSpanData` is deterministic\n * on the same attributes, so re-running it here is a no-op for already-inferred fields.\n */\nexport function backfillStreamedSpanDataFromOtel(spanJSON: StreamedSpanJSON, hint?: { spanKind?: number }): void {\n  const attributes = spanJSON.attributes ?? {};\n\n  const kind = hint?.spanKind ?? SPAN_KIND.INTERNAL;\n  const { op, description, source, data } = inferSpanData(spanJSON.name, attributes as unknown as SpanAttributes, kind);\n\n  spanJSON.name = description;\n\n  safeSetSpanJSONAttributes(spanJSON, {\n    [SEMANTIC_ATTRIBUTE_SENTRY_OP]: op,\n    [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source,\n    // If nothing in the chain previously set an origin, we now default it to 'manual'\n    // For transactions, this is done in the SpanExporter.\n    // TODO (v11): Remove this again once we fully moved away from OTel's TracerProvider.\n    // at this point, we use `SentrySpan` everywhere, which defaults its origin to 'manual'.\n    [SENTRY_ORIGIN]: 'manual',\n    ...data,\n  });\n\n  if (kind !== SPAN_KIND.INTERNAL) {\n    safeSetSpanJSONAttributes(spanJSON, {\n      'otel.kind': spanKindToName(kind),\n    });\n  }\n}\n", "import type { Context } from '@opentelemetry/api';\nimport { ROOT_CONTEXT, trace } from '@opentelemetry/api';\nimport type { ReadableSpan, Span, SpanProcessor as SpanProcessorInterface } from '@opentelemetry/sdk-trace-base';\nimport type { Client } from '@sentry/core';\nimport {\n  addChildSpanToSpan,\n  getClient,\n  getDefaultCurrentScope,\n  getDefaultIsolationScope,\n  hasSpanStreamingEnabled,\n  logSpanEnd,\n  logSpanStart,\n  setCapturedScopesOnSpan,\n} from '@sentry/core';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_PARENT_IS_REMOTE } from './semanticAttributes';\nimport { SentrySpanExporter } from './spanExporter';\nimport { backfillStreamedSpanDataFromOtel } from './utils/backfillStreamedSpanData';\nimport { getScopesFromContext } from './utils/contextData';\nimport { setIsSetup } from './utils/setupCheck';\n/**\n * Converts OpenTelemetry Spans to Sentry Spans and sends them to Sentry via\n * the Sentry SDK.\n */\nexport class SentrySpanProcessor implements SpanProcessorInterface {\n  private _exporter: SentrySpanExporter;\n  private _client: Client | undefined;\n  private _unsubscribePreprocessSpan: (() => void) | undefined = undefined;\n\n  public constructor(options?: { timeout?: number; client?: Client }) {\n    setIsSetup('SentrySpanProcessor');\n    this._exporter = new SentrySpanExporter(options);\n    this._client = options?.client ?? getClient();\n\n    if (this._client && hasSpanStreamingEnabled(this._client)) {\n      // Streamed spans skip the exporter, so they don't get op/source/name inferred from OTel\n      // semantic conventions. We backfill them here, reusing the same inference as the exporter.\n      // This runs as a `preprocessSpan` subscriber so the inferred data is available to all\n      // `processSpan`/`processSegmentSpan` hooks (incl. integrations) and `beforeSendSpan`.\n      this._unsubscribePreprocessSpan = this._client.on('preprocessSpan', backfillStreamedSpanDataFromOtel);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public async forceFlush(): Promise<void> {\n    this._exporter.flush();\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public async shutdown(): Promise<void> {\n    this._unsubscribePreprocessSpan?.();\n    this._exporter.clear();\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public onStart(span: Span, parentContext: Context): void {\n    // This is a reliable way to get the parent span - because this is exactly how the parent is identified in the OTEL SDK\n    const parentSpan = trace.getSpan(parentContext);\n\n    let scopes = getScopesFromContext(parentContext);\n\n    // We need access to the parent span in order to be able to move up the span tree for breadcrumbs\n    if (parentSpan && !parentSpan.spanContext().isRemote) {\n      addChildSpanToSpan(parentSpan, span);\n    }\n\n    // We need this in the span exporter\n    if (parentSpan?.spanContext().isRemote) {\n      span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_PARENT_IS_REMOTE, true);\n    }\n\n    // The root context does not have scopes stored, so we check for this specifically\n    // As fallback we attach the global scopes\n    if (parentContext === ROOT_CONTEXT) {\n      scopes = {\n        scope: getDefaultCurrentScope(),\n        isolationScope: getDefaultIsolationScope(),\n      };\n    }\n\n    // We need the scope at time of span creation in order to apply it to the event when the span is finished\n    if (scopes) {\n      setCapturedScopesOnSpan(span, scopes.scope, scopes.isolationScope);\n    }\n\n    logSpanStart(span);\n\n    this._client?.emit('spanStart', span);\n  }\n\n  /** @inheritDoc */\n  public onEnd(span: Span & ReadableSpan): void {\n    logSpanEnd(span);\n\n    this._client?.emit('spanEnd', span);\n\n    if (this._client && hasSpanStreamingEnabled(this._client)) {\n      this._client.emit('afterSpanEnd', span);\n    } else {\n      this._exporter.export(span);\n    }\n  }\n}\n", "/* eslint-disable complexity */\nimport type { Context, Span, TraceState as TraceStateInterface } from '@opentelemetry/api';\nimport { isSpanContextValid, SpanKind, trace } from '@opentelemetry/api';\nimport { TraceState } from './utils/TraceState';\nimport type { Sampler, SamplingResult } from '@opentelemetry/sdk-trace-base';\nimport { SamplingDecision } from '@opentelemetry/sdk-trace-base';\nimport { HTTP_METHOD, HTTP_REQUEST_METHOD, HTTP_URL, URL_FULL } from '@sentry/conventions/attributes';\nimport type { Client, SpanAttributes } from '@sentry/core';\nimport {\n  _INTERNAL_safeMathRandom,\n  baggageHeaderToDynamicSamplingContext,\n  debug,\n  hasSpansEnabled,\n  hasSpanStreamingEnabled,\n  parseSampleRate,\n  sampleSpan,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE,\n  shouldIgnoreSpan,\n} from '@sentry/core';\nimport {\n  SENTRY_TRACE_STATE_DSC,\n  SENTRY_TRACE_STATE_CHILD_IGNORED,\n  SENTRY_TRACE_STATE_SAMPLE_RAND,\n  SENTRY_TRACE_STATE_SAMPLE_RATE,\n  SENTRY_TRACE_STATE_SAMPLED_NOT_RECORDING,\n  SENTRY_TRACE_STATE_SEGMENT_IGNORED,\n  SENTRY_TRACE_STATE_URL,\n} from './constants';\nimport { DEBUG_BUILD } from './debug-build';\nimport { getScopesFromContext } from './utils/contextData';\nimport { getSamplingDecision } from './utils/getSamplingDecision';\nimport { inferSpanData } from './utils/parseSpanDescription';\nimport { setIsSetup } from './utils/setupCheck';\n\n/**\n * A custom OTEL sampler that uses Sentry sampling rates to make its decision\n */\nexport class SentrySampler implements Sampler {\n  private _client: Client;\n  private _isSpanStreaming: boolean;\n\n  public constructor(client: Client) {\n    this._client = client;\n    this._isSpanStreaming = hasSpanStreamingEnabled(client);\n    setIsSetup('SentrySampler');\n  }\n\n  /** @inheritDoc */\n  public shouldSample(\n    context: Context,\n    traceId: string,\n    spanName: string,\n    spanKind: SpanKind,\n    spanAttributes: SpanAttributes,\n    _links: unknown,\n  ): SamplingResult {\n    const options = this._client.getOptions();\n    const { ignoreSpans } = options;\n\n    const parentSpan = getValidSpan(context);\n    const parentContext = parentSpan?.spanContext();\n\n    if (!hasSpansEnabled(options)) {\n      return wrapSamplingDecision({ decision: undefined, context, spanAttributes });\n    }\n\n    // `HTTP_REQUEST_METHOD` is the new attribute, but we still support the old one, `HTTP_METHOD`, for now.\n    // eslint-disable-next-line typescript/no-deprecated\n    const maybeSpanHttpMethod = spanAttributes[HTTP_METHOD] || spanAttributes[HTTP_REQUEST_METHOD];\n\n    // If we have a http.client span that has no local parent, we never want to sample it\n    // but we want to leave downstream sampling decisions up to the server.\n    // Exception: when span streaming is enabled, we always emit these spans.\n    if (spanKind === SpanKind.CLIENT && maybeSpanHttpMethod && (!parentSpan || parentContext?.isRemote)) {\n      if (!this._isSpanStreaming) {\n        this._client.recordDroppedEvent('no_parent_span', 'span');\n        return wrapSamplingDecision({ decision: undefined, context, spanAttributes });\n      }\n    }\n\n    const parentSampled = parentSpan ? getParentSampled(parentSpan, traceId, spanName) : undefined;\n    const isRootSpan = !parentSpan || parentContext?.isRemote;\n\n    // We only sample based on parameters (like tracesSampleRate or tracesSampler) for root spans (which is done in sampleSpan).\n    // Non-root-spans simply inherit the sampling decision from their parent.\n    if (!isRootSpan) {\n      if (this._isSpanStreaming) {\n        // `ignoreSpans` is only applied at span start for streamed spans.\n        // Static spans/transactions get filtered at transaction end.\n        // Likewise, we only record client outcomes for child spans when streaming\n        if (parentSampled) {\n          if (ignoreSpans?.length) {\n            const { description: inferredChildName, op: childOp } = inferSpanData(spanName, spanAttributes, spanKind);\n            if (\n              shouldIgnoreSpan(\n                {\n                  description: inferredChildName,\n                  op: spanAttributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] ?? childOp,\n                  attributes: spanAttributes,\n                },\n                ignoreSpans,\n              )\n            ) {\n              this._client.recordDroppedEvent('ignored', 'span');\n              return wrapSamplingDecision({\n                decision: SamplingDecision.NOT_RECORD,\n                context,\n                spanAttributes,\n                ignoredChildSpan: true,\n              });\n            }\n          }\n        }\n\n        if (!parentSampled) {\n          const parentSegmentIgnored = parentContext?.traceState?.get(SENTRY_TRACE_STATE_SEGMENT_IGNORED) === '1';\n          this._client.recordDroppedEvent(parentSegmentIgnored ? 'ignored' : 'sample_rate', 'span');\n        }\n      }\n\n      return wrapSamplingDecision({\n        decision: parentSampled ? SamplingDecision.RECORD_AND_SAMPLED : SamplingDecision.NOT_RECORD,\n        context,\n        spanAttributes,\n      });\n    }\n\n    // We want to pass the inferred name & attributes to the sampler method\n    const {\n      description: inferredSpanName,\n      data: inferredAttributes,\n      op,\n    } = inferSpanData(spanName, spanAttributes, spanKind);\n\n    const mergedAttributes = {\n      ...inferredAttributes,\n      ...spanAttributes,\n    };\n\n    if (op) {\n      mergedAttributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] = op;\n    }\n\n    if (\n      this._isSpanStreaming &&\n      ignoreSpans?.length &&\n      shouldIgnoreSpan(\n        {\n          description: inferredSpanName,\n          op: mergedAttributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] ?? op,\n          attributes: mergedAttributes,\n        },\n        ignoreSpans,\n      )\n    ) {\n      this._client.recordDroppedEvent('ignored', 'span');\n      return wrapSamplingDecision({\n        decision: SamplingDecision.NOT_RECORD,\n        context,\n        spanAttributes,\n        ignoredSegmentSpan: true,\n      });\n    }\n\n    const mutableSamplingDecision = { decision: true };\n    this._client.emit(\n      'beforeSampling',\n      {\n        spanAttributes: mergedAttributes,\n        spanName: inferredSpanName,\n        parentSampled: parentSampled,\n        parentContext: parentContext,\n      },\n      mutableSamplingDecision,\n    );\n    if (!mutableSamplingDecision.decision) {\n      return wrapSamplingDecision({ decision: undefined, context, spanAttributes });\n    }\n\n    const { isolationScope } = getScopesFromContext(context) ?? {};\n\n    const dscString = parentContext?.traceState ? parentContext.traceState.get(SENTRY_TRACE_STATE_DSC) : undefined;\n    const dsc = dscString ? baggageHeaderToDynamicSamplingContext(dscString) : undefined;\n\n    const sampleRand = parseSampleRate(dsc?.sample_rand) ?? _INTERNAL_safeMathRandom();\n\n    const [sampled, sampleRate, localSampleRateWasApplied] = sampleSpan(\n      options,\n      {\n        name: inferredSpanName,\n        attributes: mergedAttributes,\n        normalizedRequest: isolationScope?.getScopeData().sdkProcessingMetadata.normalizedRequest,\n        parentSampled,\n        parentSampleRate: parseSampleRate(dsc?.sample_rate),\n      },\n      sampleRand,\n    );\n\n    const method = `${maybeSpanHttpMethod}`.toUpperCase();\n    if (method === 'OPTIONS' || method === 'HEAD') {\n      DEBUG_BUILD && debug.log(`[Tracing] Not sampling span because HTTP method is '${method}' for ${spanName}`);\n\n      return wrapSamplingDecision({\n        decision: SamplingDecision.NOT_RECORD,\n        context,\n        spanAttributes,\n        sampleRand,\n        downstreamTraceSampleRate: 0, // we don't want to sample anything in the downstream trace either\n      });\n    }\n\n    if (\n      !sampled &&\n      // We check for `parentSampled === undefined` because we only want to record client reports for spans that are trace roots (ie. when there was incoming trace)\n      parentSampled === undefined\n    ) {\n      DEBUG_BUILD && debug.log('[Tracing] Discarding root span because its trace was not chosen to be sampled.');\n      this._client.recordDroppedEvent('sample_rate', this._isSpanStreaming ? 'span' : 'transaction');\n    }\n\n    return {\n      ...wrapSamplingDecision({\n        decision: sampled ? SamplingDecision.RECORD_AND_SAMPLED : SamplingDecision.NOT_RECORD,\n        context,\n        spanAttributes,\n        sampleRand,\n        downstreamTraceSampleRate: localSampleRateWasApplied ? sampleRate : undefined,\n      }),\n      attributes: {\n        // We set the sample rate on the span when a local sample rate was applied to better understand how traces were sampled in Sentry\n        [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]: localSampleRateWasApplied ? sampleRate : undefined,\n      },\n    };\n  }\n\n  /** Returns the sampler name or short description with the configuration. */\n  public toString(): string {\n    return 'SentrySampler';\n  }\n}\n\nfunction getParentSampled(parentSpan: Span, traceId: string, spanName: string): boolean | undefined {\n  const parentContext = parentSpan.spanContext();\n\n  // Only inherit sample rate if `traceId` is the same\n  // Note for testing: `isSpanContextValid()` checks the format of the traceId/spanId, so we need to pass valid ones\n  if (isSpanContextValid(parentContext) && parentContext.traceId === traceId) {\n    if (parentContext.isRemote) {\n      const parentSampled = getSamplingDecision(parentSpan.spanContext());\n      DEBUG_BUILD &&\n        debug.log(`[Tracing] Inheriting remote parent's sampled decision for ${spanName}: ${parentSampled}`);\n      return parentSampled;\n    }\n\n    const parentSampled = getSamplingDecision(parentContext);\n    DEBUG_BUILD && debug.log(`[Tracing] Inheriting parent's sampled decision for ${spanName}: ${parentSampled}`);\n    return parentSampled;\n  }\n\n  return undefined;\n}\n\n/**\n * Wrap a sampling decision with data that Sentry needs to work properly with it.\n * If you pass `decision: undefined`, it will be treated as `NOT_RECORDING`, but in contrast to passing `NOT_RECORDING`\n * it will not propagate this decision to downstream Sentry SDKs.\n */\nexport function wrapSamplingDecision({\n  decision,\n  context,\n  spanAttributes,\n  sampleRand,\n  downstreamTraceSampleRate,\n  ignoredChildSpan,\n  ignoredSegmentSpan,\n}: {\n  decision: SamplingDecision | undefined;\n  context: Context;\n  spanAttributes: SpanAttributes;\n  sampleRand?: number;\n  downstreamTraceSampleRate?: number;\n  // flags for ignored streamed spans (only set for span streaming)\n  ignoredChildSpan?: boolean;\n  ignoredSegmentSpan?: boolean;\n}): SamplingResult {\n  let traceState = getBaseTraceState(context, spanAttributes);\n\n  // We will override the propagated sample rate downstream when\n  // - the tracesSampleRate is applied\n  // - the tracesSampler is invoked\n  // Since unsampled OTEL spans (NonRecordingSpans) cannot hold attributes we need to store this on the (trace)context.\n  if (downstreamTraceSampleRate !== undefined) {\n    traceState = traceState.set(SENTRY_TRACE_STATE_SAMPLE_RATE, `${downstreamTraceSampleRate}`);\n  }\n\n  if (sampleRand !== undefined) {\n    traceState = traceState.set(SENTRY_TRACE_STATE_SAMPLE_RAND, `${sampleRand}`);\n  }\n\n  if (ignoredChildSpan) {\n    traceState = traceState.set(SENTRY_TRACE_STATE_CHILD_IGNORED, '1');\n  }\n\n  if (ignoredSegmentSpan) {\n    traceState = traceState.set(SENTRY_TRACE_STATE_SEGMENT_IGNORED, '1');\n  }\n\n  // If the decision is undefined, we treat it as NOT_RECORDING, but we don't propagate this decision to downstream SDKs\n  // Which is done by not setting `SENTRY_TRACE_STATE_SAMPLED_NOT_RECORDING` traceState\n  if (decision == undefined) {\n    return { decision: SamplingDecision.NOT_RECORD, traceState };\n  }\n\n  if (decision === SamplingDecision.NOT_RECORD) {\n    return { decision, traceState: traceState.set(SENTRY_TRACE_STATE_SAMPLED_NOT_RECORDING, '1') };\n  }\n\n  return { decision, traceState };\n}\n\nfunction getBaseTraceState(context: Context, spanAttributes: SpanAttributes): TraceStateInterface {\n  const parentSpan = trace.getSpan(context);\n  const parentContext = parentSpan?.spanContext();\n\n  let traceState = parentContext?.traceState || new TraceState();\n\n  // We always keep the URL on the trace state, so we can access it in the propagator\n  // `URL_FULL` is the new attribute, but we still support the old one, `HTTP_URL`, for now.\n  // eslint-disable-next-line typescript/no-deprecated\n  const url = spanAttributes[HTTP_URL] || spanAttributes[URL_FULL];\n  if (url && typeof url === 'string') {\n    traceState = traceState.set(SENTRY_TRACE_STATE_URL, url);\n  }\n\n  return traceState;\n}\n\n/**\n * If the active span is invalid, we want to ignore it as parent.\n * This aligns with how otel tracers and default samplers handle these cases.\n */\nfunction getValidSpan(context: Context): Span | undefined {\n  const span = trace.getSpan(context);\n  return span && isSpanContextValid(span.spanContext()) ? span : undefined;\n}\n", "import { SpanKind } from '@opentelemetry/api';\nimport { HTTP_RESPONSE_STATUS_CODE, HTTP_STATUS_CODE } from '@sentry/conventions/attributes';\nimport {\n  addNonEnumerableProperty,\n  getClient,\n  hasSpanStreamingEnabled,\n  SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n  spanShouldInferOtelSource,\n  spanSourceWasExplicitlySet,\n  spanToJSON,\n  SPAN_STATUS_ERROR,\n  SPAN_STATUS_OK,\n} from '@sentry/core';\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport { inferStatusFromAttributes, isStatusErrorMessageValid } from './utils/mapStatus';\nimport { inferSpanData } from './utils/parseSpanDescription';\n\ntype SentrySpanWithOtelKind = Span & { kind?: SpanKind };\n\n/**\n * Backfill a native Sentry span with the data the OpenTelemetry SDK pipeline would otherwise derive\n * from OTel semantic attributes: `sentry.op`, `sentry.source`, the span name, `otel.kind`, and status.\n *\n * On the OTel SDK provider this happens in the `SentrySpanProcessor`/`SentrySpanExporter` while\n * converting `ReadableSpan`s to Sentry payloads (via `parseSpanDescription` + `mapStatus`).\n * `SentryTracerProvider` creates native Sentry spans directly and never goes through that pipeline,\n * so the same inference has to run here instead — once at span start, and again at span end\n * (`finalizeStatus`, once attributes like `http.route` and the status code are available).\n */\nexport function applyOtelSpanData(span: Span, options: { finalizeStatus?: boolean } = {}): void {\n  const spanJSON = spanToJSON(span);\n  const attributes = spanJSON.data;\n  const kind = (span as SentrySpanWithOtelKind).kind ?? SpanKind.INTERNAL;\n  const mayInferSource = spanShouldInferOtelSource(span);\n  const hasCustomSpanName = attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME] !== undefined;\n  // We may only infer the source/name when the span is OTel-branded and user code hasn't already\n  // chosen them: either via `updateSpanName` (which sets `sentry.custom_span_name`) or by explicitly\n  // setting `sentry.source`. Without the explicit-source check we couldn't tell a user-set `custom`\n  // apart from the default `custom` stamped on every root span at span start, and would override it.\n  const canInferSource = mayInferSource && !hasCustomSpanName && !spanSourceWasExplicitlySet(span);\n  const attributesForInference =\n    canInferSource && attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] === 'custom'\n      ? { ...attributes, [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: undefined }\n      : attributes;\n  const inferred = inferSpanData(spanJSON.description || '<unknown>', attributesForInference, kind);\n\n  if (kind !== SpanKind.INTERNAL && attributes['otel.kind'] === undefined) {\n    span.setAttribute('otel.kind', SpanKind[kind]);\n  }\n\n  if (inferred.op && attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] === undefined) {\n    span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, inferred.op);\n  }\n\n  // Don't apply 'url' source at creation time, only at span end (finalizeStatus).\n  // At creation, http.route may not be set yet, so inference falls back to 'url'.\n  // Keeping the default 'custom' source from _startRootSpan allows\n  // enhanceDscWithOpenTelemetryRootSpanName to include the transaction name in\n  // the DSC. At span end, http.route is typically available and inference returns\n  // 'route' instead. If it's still 'url', it's applied then.\n  // We also only set `source` on segment roots (spans that become transactions):\n  // those with no parent, plus SERVER spans, which are the segment root even when\n  // continuing a distributed trace (where they carry a remote `parent_span_id`).\n  const shouldApplyInferredSource =\n    inferred.source !== undefined &&\n    inferred.source !== 'custom' &&\n    (options.finalizeStatus || inferred.source !== 'url') &&\n    (spanJSON.parent_span_id === undefined || kind === SpanKind.SERVER);\n\n  if (shouldApplyInferredSource && (attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] === undefined || canInferSource)) {\n    span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, inferred.source);\n  }\n\n  if (inferred.data) {\n    Object.entries(inferred.data).forEach(([key, value]) => {\n      if (value !== undefined && attributes[key] === undefined) {\n        span.setAttribute(key, value);\n      }\n    });\n  }\n\n  if (options.finalizeStatus) {\n    applyOtelCompatibilityAttributes(span, attributes);\n    const client = getClient();\n    applyOtelSpanStatus(span, attributes, spanJSON.status, !!client && hasSpanStreamingEnabled(client));\n  }\n\n  // Only re-infer the name for spans branded for OTel source inference (those the provider created\n  // without an explicit Sentry source). A span created with an explicit source — e.g. a Sentry\n  // instrumentation calling `startSpan({ name, attributes: { 'sentry.source': 'url' } })` like the Bun\n  // server integration — already has a deliberate name and must be left alone. Renaming it would also\n  // stamp `source: 'custom'` (via `updateName`), which then leaks the URL into the DSC transaction name.\n  if (\n    mayInferSource &&\n    inferred.description !== spanJSON.description &&\n    (attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] !== 'custom' || canInferSource)\n  ) {\n    span.updateName(inferred.description);\n  }\n}\n\n/** Stash the OTel span kind on a Sentry span so {@link applyOtelSpanData} can read it. */\nexport function applyOtelSpanKind(span: Span, kind: SpanKind | undefined): void {\n  addNonEnumerableProperty(span as SentrySpanWithOtelKind, 'kind', kind ?? SpanKind.INTERNAL);\n}\n\nfunction applyOtelSpanStatus(\n  span: Span,\n  attributes: SpanAttributes,\n  status: string | undefined,\n  spanStreamingEnabled: boolean,\n): void {\n  if (status === undefined) {\n    span.setStatus(inferStatusFromAttributes(attributes) || { code: SPAN_STATUS_OK });\n    return;\n  }\n\n  // Normalize a non-canonical error message to `internal_error` for the (non-streamed) transaction\n  // `status` field, matching the OTel SDK exporter's `mapStatus`. Skip this under span streaming: the\n  // streamed serializer preserves the raw message as `sentry.status.message` by reading the live span\n  // status, and the OTel SDK path keeps it too because `mapStatus` maps at export without mutating the\n  // span. Overwriting it here would replace that message with `internal_error`.\n  if (!spanStreamingEnabled && status !== 'ok' && !isStatusErrorMessageValid(status)) {\n    span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n  }\n}\n\nfunction applyOtelCompatibilityAttributes(span: Span, attributes: SpanAttributes): void {\n  // `http.status_code` is the deprecated legacy attribute, read for backward compatibility.\n  // eslint-disable-next-line typescript/no-deprecated\n  const legacyHttpStatusCode = attributes[HTTP_STATUS_CODE];\n\n  if (attributes[HTTP_RESPONSE_STATUS_CODE] === undefined && legacyHttpStatusCode !== undefined) {\n    span.setAttribute(HTTP_RESPONSE_STATUS_CODE, legacyHttpStatusCode);\n    attributes[HTTP_RESPONSE_STATUS_CODE] = legacyHttpStatusCode;\n  }\n}\n", "import type { Context, Span as OpenTelemetrySpan, SpanOptions, Tracer } from '@opentelemetry/api';\nimport { context, trace } from '@opentelemetry/api';\nimport { isTracingSuppressed } from '@opentelemetry/core';\nimport {\n  _INTERNAL_safeMathRandom,\n  _INTERNAL_setSpanForScope,\n  _INTERNAL_startInactiveSpan,\n  addChildSpanToSpan,\n  getCapturedScopesOnSpan,\n  getCurrentScope,\n  getDynamicSamplingContextFromSpan,\n  getIsolationScope,\n  markSpanAsTracerProviderSpan,\n  markSpanForOtelSourceInference,\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n  SentryNonRecordingSpan,\n  setCapturedScopesOnSpan,\n  spanIsIgnored,\n  startNewTrace,\n  withScope,\n} from '@sentry/core';\nimport type { Span, SpanAttributes, SpanLink } from '@sentry/core';\nimport { applyOtelSpanData, applyOtelSpanKind } from './applyOtelSpanData';\nimport { SENTRY_FORK_SET_ISOLATION_SCOPE_CONTEXT_KEY, SENTRY_TRACE_STATE_DSC } from './constants';\nimport { getSamplingDecision } from './utils/getSamplingDecision';\n\nexport class SentryTracer implements Tracer {\n  /** @inheritdoc */\n  public startSpan(name: string, options: SpanOptions = {}, ctx?: Context): OpenTelemetrySpan {\n    const parentContext = ctx || context.active();\n    const parentSpan = options.root ? undefined : trace.getSpan(parentContext);\n\n    if (isTracingSuppressed(parentContext)) {\n      return this._createNonRecordingSpan(parentSpan);\n    }\n\n    const span = this._startSentrySpan(name, options, parentSpan, ctx !== undefined);\n\n    // Mark the span as provider-created so it becomes immutable after `end()` like an OTel SDK span\n    // (see `SentrySpan.end()`). Spans created directly through the core API (e.g. the browser SDK)\n    // are not marked and keep their mutable behavior.\n    markSpanAsTracerProviderSpan(span);\n\n    applyOtelSpanKind(span, options.kind);\n    if (options.attributes?.[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] === undefined) {\n      markSpanForOtelSourceInference(span);\n    }\n    applyOtelSpanData(span);\n    return span as OpenTelemetrySpan;\n  }\n\n  /** @inheritdoc */\n  public startActiveSpan<F extends (span: OpenTelemetrySpan) => unknown>(name: string, fn: F): ReturnType<F>;\n  public startActiveSpan<F extends (span: OpenTelemetrySpan) => unknown>(\n    name: string,\n    options: SpanOptions,\n    fn: F,\n  ): ReturnType<F>;\n  public startActiveSpan<F extends (span: OpenTelemetrySpan) => unknown>(\n    name: string,\n    options: SpanOptions,\n    ctx: Context,\n    fn: F,\n  ): ReturnType<F>;\n  public startActiveSpan<F extends (span: OpenTelemetrySpan) => unknown>(\n    name: string,\n    optionsOrFn: SpanOptions | F,\n    contextOrFn?: Context | F,\n    fn?: F,\n  ): ReturnType<F> {\n    const options = typeof optionsOrFn === 'function' ? {} : optionsOrFn;\n    const ctx = typeof contextOrFn === 'function' || contextOrFn === undefined ? context.active() : contextOrFn;\n    const callback = (\n      typeof optionsOrFn === 'function' ? optionsOrFn : typeof contextOrFn === 'function' ? contextOrFn : fn\n    ) as F;\n\n    const span = this.startSpan(name, options, ctx);\n\n    // Run the span's callback under the isolation scope captured when the span was created, so scope state\n    // used or set during the span (tags, breadcrumbs, captured errors) belongs to that span and stays\n    // isolated from other concurrent work. Without this it can land on a different isolation scope. This\n    // holds for ignored spans too, which run the callback without ever becoming the active span.\n    const capturedIsolationScope = getCapturedScopesOnSpan(span as unknown as Span).isolationScope;\n    const withCapturedIsolationScope = (contextToFork: Context): Context =>\n      capturedIsolationScope\n        ? contextToFork.setValue(SENTRY_FORK_SET_ISOLATION_SCOPE_CONTEXT_KEY, capturedIsolationScope)\n        : contextToFork;\n\n    // Mirror core's `startSpan`: an ignored (`ignoreSpans`) span that has a parent must not become the\n    // active span. Otherwise its children would attach to it and, since it's non-recording, be dropped\n    // along with it (cascading the drop down the whole subtree). Leaving the parent active lets the\n    // children attach to it and get re-parented instead. An ignored root span has no parent and still\n    // becomes active, so its subtree is dropped as intended.\n    if (spanIsIgnored(span as unknown as Span) && trace.getSpan(ctx)) {\n      return context.with(withCapturedIsolationScope(ctx), () => callback(span)) as ReturnType<F>;\n    }\n\n    return context.with(withCapturedIsolationScope(trace.setSpan(ctx, span)), () => {\n      _INTERNAL_setSpanForScope(getCurrentScope(), span as unknown as Span);\n      return callback(span) as ReturnType<F>;\n    });\n  }\n\n  private _startSentrySpan(\n    name: string,\n    options: SpanOptions,\n    parentSpan: OpenTelemetrySpan | undefined,\n    hasExplicitContext: boolean,\n  ): Span {\n    const sentryOptions = {\n      name,\n      attributes: options.attributes as SpanAttributes | undefined,\n      links: options.links as SpanLink[] | undefined,\n      startTime: options.startTime,\n    };\n\n    if (options.root) {\n      return startNewTrace(() => _INTERNAL_startInactiveSpan({ ...sentryOptions, parentSpan: null }));\n    }\n\n    if (parentSpan?.spanContext().isRemote) {\n      return this._startRootSpanWithRemoteParent(sentryOptions, parentSpan);\n    }\n\n    if (parentSpan) {\n      return _INTERNAL_startInactiveSpan({ ...sentryOptions, parentSpan: parentSpan as unknown as Span });\n    }\n\n    // No parent span and no remote parent: this is a fresh root span. Start a new trace instead of\n    // continuing the scope's (possibly auto-generated) propagation context, matching the OpenTelemetry\n    // SDK where each root span without an incoming trace gets its own trace id.\n    return startNewTrace(() =>\n      _INTERNAL_startInactiveSpan({\n        ...sentryOptions,\n        parentSpan: hasExplicitContext ? null : undefined,\n      }),\n    );\n  }\n\n  private _startRootSpanWithRemoteParent(\n    options: Parameters<typeof _INTERNAL_startInactiveSpan>[0],\n    parentSpan: OpenTelemetrySpan,\n  ): Span {\n    const { spanId, traceId, traceState } = parentSpan.spanContext();\n    const dsc = getDynamicSamplingContextFromSpan(parentSpan as unknown as Span);\n    const sampleRand = typeof dsc.sample_rand === 'string' ? Number(dsc.sample_rand) : undefined;\n\n    // Only freeze the DSC when the remote parent actually carried one (i.e. there was incoming\n    // baggage). Otherwise leave it unset so it is derived dynamically from the span — picking up the\n    // span's `transaction` name and the generated `sample_rand` — matching the OpenTelemetry SDK.\n    const hasIncomingDsc = !!traceState?.get(SENTRY_TRACE_STATE_DSC);\n\n    return withScope(scope => {\n      scope.setPropagationContext({\n        traceId,\n        parentSpanId: spanId,\n        sampled: getSamplingDecision(parentSpan.spanContext()),\n        dsc: hasIncomingDsc ? dsc : undefined,\n        sampleRand:\n          typeof sampleRand === 'number' && !Number.isNaN(sampleRand) ? sampleRand : _INTERNAL_safeMathRandom(),\n      });\n      _INTERNAL_setSpanForScope(scope, undefined);\n\n      return _INTERNAL_startInactiveSpan({ ...options, parentSpan: null });\n    });\n  }\n\n  private _createNonRecordingSpan(parentSpan: OpenTelemetrySpan | undefined): OpenTelemetrySpan {\n    const span = new SentryNonRecordingSpan({ traceId: parentSpan?.spanContext().traceId });\n    // Link to the parent (like core's `createChildOrRootSpan`) so `getRootSpan` and DSC\n    // resolution reach the parent. Non-recording spans no longer carry a `parentSpanId`.\n    if (parentSpan) {\n      addChildSpanToSpan(parentSpan as unknown as Span, span);\n    }\n    // Capture the scopes (mirroring `createChildOrRootSpan`) so `startActiveSpan` can\n    // fork the isolation scope onto the OTel context for work inside a suppressed span.\n    setCapturedScopesOnSpan(span, getCurrentScope(), getIsolationScope());\n    return span as OpenTelemetrySpan;\n  }\n}\n", "import type { Tracer, TracerOptions, TracerProvider } from '@opentelemetry/api';\nimport type { SpanAttributes } from '@sentry/core';\nimport { SentryTracer } from './tracer';\n\n/**\n * A minimal OpenTelemetry TracerProvider which creates native Sentry spans.\n */\nexport class SentryTracerProvider implements TracerProvider {\n  public readonly resource?: { attributes: SpanAttributes };\n\n  private readonly _tracers = new Map<string, SentryTracer>();\n\n  public constructor(options: { resource?: { attributes: SpanAttributes } } = {}) {\n    this.resource = options.resource;\n  }\n\n  /** @inheritdoc */\n  public getTracer(name: string, version?: string, options?: TracerOptions): Tracer {\n    const key = JSON.stringify([name, version, options]);\n    const cachedTracer = this._tracers.get(key);\n    if (cachedTracer) {\n      return cachedTracer;\n    }\n\n    const tracer = new SentryTracer();\n    this._tracers.set(key, tracer);\n    return tracer;\n  }\n\n  /** Compatibility with SDK tracer providers. */\n  public forceFlush(): Promise<void> {\n    return Promise.resolve();\n  }\n\n  /** Compatibility with SDK tracer providers. */\n  public shutdown(): Promise<void> {\n    return Promise.resolve();\n  }\n}\n", "import type { Attributes, AttributeValue } from '@opentelemetry/api';\nimport { SDK_INFO } from '@opentelemetry/core';\nimport { SERVICE_NAME, SERVICE_VERSION } from '@sentry/conventions/attributes';\nimport { SDK_VERSION } from '@sentry/core';\n\n// These resource attributes are not part of `@sentry/conventions`, so we inline the\n// stable OTel attribute keys here as plain strings rather than depending on\n// `@opentelemetry/semantic-conventions`. The string values must match exactly, as\n// `SDK_INFO` (from `@opentelemetry/core`) is keyed by them.\n// This is OTEL-specific and not relevant for Sentry, and will eventually go away.\nconst ATTR_TELEMETRY_SDK_LANGUAGE = 'telemetry.sdk.language';\nconst ATTR_TELEMETRY_SDK_NAME = 'telemetry.sdk.name';\nconst ATTR_TELEMETRY_SDK_VERSION = 'telemetry.sdk.version';\nconst SEMRESATTRS_SERVICE_NAMESPACE = 'service.namespace';\n\ntype RawResourceAttribute = [string, AttributeValue | undefined];\n\n/**\n * Minimal Resource implementation that satisfies the OpenTelemetry Resource interface\n * used by BasicTracerProvider, without depending on `@opentelemetry/resources`.\n */\nclass SentryResource {\n  private _attributes: Attributes;\n\n  public constructor(attributes: Attributes) {\n    this._attributes = attributes;\n  }\n\n  public get attributes(): Attributes {\n    return this._attributes;\n  }\n\n  public merge(other: SentryResource | null): SentryResource {\n    if (!other) {\n      return this;\n    }\n    return new SentryResource({ ...this._attributes, ...other.attributes });\n  }\n\n  public getRawAttributes(): RawResourceAttribute[] {\n    return Object.entries(this._attributes);\n  }\n}\n\n/**\n * Parses `OTEL_RESOURCE_ATTRIBUTES` env var (comma-separated `key=value` pairs).\n * Values are URL-decoded per the OTel spec.\n */\nfunction parseOtelResourceAttributes(raw: string | undefined): Attributes {\n  if (!raw) {\n    return {};\n  }\n  const result: Attributes = {};\n  for (const pair of raw.split(',')) {\n    const eq = pair.indexOf('=');\n    if (eq === -1) {\n      continue;\n    }\n    const key = pair.substring(0, eq).trim();\n    const value = pair.substring(eq + 1).trim();\n    if (key) {\n      try {\n        result[key] = decodeURIComponent(value);\n      } catch {\n        result[key] = value;\n      }\n    }\n  }\n  return result;\n}\n\n/**\n * Returns a Resource for use in Sentry's OpenTelemetry TracerProvider setup.\n *\n * Combines the default OTel SDK telemetry attributes with Sentry-specific\n * service attributes, equivalent to what was previously done via:\n * `defaultResource().merge(resourceFromAttributes({ ... }))`\n *\n * Respects OTEL_SERVICE_NAME and OTEL_RESOURCE_ATTRIBUTES environment variables\n * per the OpenTelemetry specification.\n */\nexport function getSentryResource(serviceNameFallback: string): SentryResource {\n  const env = typeof process !== 'undefined' ? process.env : {};\n  const otelServiceName = env.OTEL_SERVICE_NAME;\n  const otelResourceAttrs = parseOtelResourceAttributes(env.OTEL_RESOURCE_ATTRIBUTES);\n\n  return new SentryResource({\n    // Lowest priority: Sentry defaults\n    // eslint-disable-next-line typescript/no-deprecated\n    [SEMRESATTRS_SERVICE_NAMESPACE]: 'sentry',\n    [SERVICE_NAME]: serviceNameFallback,\n    // OTEL_RESOURCE_ATTRIBUTES overrides defaults (including service.name and service.namespace)\n    ...otelResourceAttrs,\n    // OTEL_SERVICE_NAME explicitly overrides service.name\n    ...(otelServiceName ? { [SERVICE_NAME]: otelServiceName } : {}),\n    // Highest priority: Sentry SDK telemetry attrs (cannot be overridden by env vars)\n    [SERVICE_VERSION]: SDK_VERSION,\n    [ATTR_TELEMETRY_SDK_LANGUAGE]: SDK_INFO[ATTR_TELEMETRY_SDK_LANGUAGE],\n    [ATTR_TELEMETRY_SDK_NAME]: SDK_INFO[ATTR_TELEMETRY_SDK_NAME],\n    [ATTR_TELEMETRY_SDK_VERSION]: SDK_INFO[ATTR_TELEMETRY_SDK_VERSION],\n  });\n}\n", "import * as api from '@opentelemetry/api';\nimport type { Client, Scope, SerializedTraceData, Span } from '@sentry/core';\nimport {\n  dynamicSamplingContextToSentryBaggageHeader,\n  generateSentryTraceHeader,\n  generateTraceparentHeader,\n  getCapturedScopesOnSpan,\n} from '@sentry/core';\nimport { getInjectionData } from '../propagator';\nimport { getContextFromScope } from './contextData';\n\n/**\n * Otel-specific implementation of `getTraceData`.\n * @see `@sentry/core` version of `getTraceData` for more information\n */\nexport function getTraceData({\n  span,\n  scope,\n  client,\n  propagateTraceparent,\n}: { span?: Span; scope?: Scope; client?: Client; propagateTraceparent?: boolean } = {}): SerializedTraceData {\n  let ctx = (scope && getContextFromScope(scope)) ?? api.context.active();\n\n  if (span) {\n    const { scope } = getCapturedScopesOnSpan(span);\n    // fall back to current context if for whatever reason we can't find the one of the span\n    ctx = (scope && getContextFromScope(scope)) || api.trace.setSpan(api.context.active(), span);\n  }\n\n  const { traceId, spanId, sampled, dynamicSamplingContext } = getInjectionData(ctx, { scope, client });\n\n  const traceData: SerializedTraceData = {\n    'sentry-trace': generateSentryTraceHeader(traceId, spanId, sampled),\n    baggage: dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext),\n  };\n\n  if (propagateTraceparent) {\n    traceData.traceparent = generateTraceparentHeader(traceId, spanId, sampled);\n  }\n\n  return traceData;\n}\n", "import * as api from '@opentelemetry/api';\nimport type { Scope, TracingChannelBinding, withActiveSpan as defaultWithActiveSpan } from '@sentry/core';\nimport {\n  _INTERNAL_safeMathRandom,\n  generateTraceId,\n  getDefaultCurrentScope,\n  getDefaultIsolationScope,\n  isContinuingTrace,\n  setAsyncContextStrategy,\n} from '@sentry/core';\nimport {\n  SENTRY_FORK_ISOLATION_SCOPE_CONTEXT_KEY,\n  SENTRY_FORK_SET_ISOLATION_SCOPE_CONTEXT_KEY,\n  SENTRY_FORK_SET_SCOPE_CONTEXT_KEY,\n} from './constants';\nimport { continueTrace, startInactiveSpan, startNewTrace, startSpan, startSpanManual, withActiveSpan } from './trace';\nimport type { CurrentScopes } from './types';\nimport { getContextFromScope, getScopesFromContext } from './utils/contextData';\nimport { getActiveSpan } from './utils/getActiveSpan';\nimport { getTraceData } from './utils/getTraceData';\nimport { suppressTracing, isTracingSuppressed } from './utils/suppressTracing';\n\n/**\n * Sets the async context strategy to use follow the OTEL context under the hood.\n * We handle forking a hub inside of our custom OTEL Context Manager (./otelContextManager.ts)\n */\nexport function setOpenTelemetryContextAsyncContextStrategy(options?: {\n  getTracingChannelBinding?: () => TracingChannelBinding | undefined;\n}): void {\n  function getScopes(): CurrentScopes {\n    const ctx = api.context.active();\n    const scopes = getScopesFromContext(ctx);\n\n    if (scopes) {\n      return scopes;\n    }\n\n    // fallback behavior:\n    // if, for whatever reason, we can't find scopes on the context here, we have to fix this somehow\n    return {\n      scope: getDefaultCurrentScope(),\n      isolationScope: getDefaultIsolationScope(),\n    };\n  }\n\n  function withScope<T>(callback: (scope: Scope) => T): T {\n    const ctx = api.context.active();\n\n    // We depend on the otelContextManager to handle the context/hub\n    // We set the `SENTRY_FORK_ISOLATION_SCOPE_CONTEXT_KEY` context value, which is picked up by\n    // the OTEL context manager, which uses the presence of this key to determine if it should\n    // fork the isolation scope, or not\n    // as by default, we don't want to fork this, unless triggered explicitly by `withScope`\n    return api.context.with(ctx, () => {\n      return callback(getCurrentScope());\n    });\n  }\n\n  function withSetScope<T>(scope: Scope, callback: (scope: Scope) => T): T {\n    const ctx = getContextFromScope(scope) || api.context.active();\n\n    // We depend on the otelContextManager to handle the context/hub\n    // We set the `SENTRY_FORK_SET_SCOPE_CONTEXT_KEY` context value, which is picked up by\n    // the OTEL context manager, which picks up this scope as the current scope\n    return api.context.with(ctx.setValue(SENTRY_FORK_SET_SCOPE_CONTEXT_KEY, scope), () => {\n      return callback(scope);\n    });\n  }\n\n  function withIsolationScope<T>(callback: (isolationScope: Scope) => T): T {\n    const ctx = api.context.active();\n\n    // We depend on the otelContextManager to handle the context/hub\n    // We set the `SENTRY_FORK_ISOLATION_SCOPE_CONTEXT_KEY` context value, which is picked up by\n    // the OTEL context manager, which uses the presence of this key to determine if it should\n    // fork the isolation scope, or not\n    return api.context.with(ctx.setValue(SENTRY_FORK_ISOLATION_SCOPE_CONTEXT_KEY, true), () => {\n      // When forking an isolation scope, unless we are continuing an incoming\n      // trace, we give the freshly forked scope its own trace. This way, new\n      // root spans in an isolation scope will get separate traces. The\n      // previous trace's `sampled` and `propagationSpanId` are dropped on\n      // purpose. Carrying them over would apply the old trace's sampling\n      // decision to the new one and propagate a span id from a different trace.\n      const scope = getCurrentScope();\n      if (!isContinuingTrace(scope.getPropagationContext())) {\n        scope.setPropagationContext({\n          traceId: generateTraceId(),\n          sampleRand: _INTERNAL_safeMathRandom(),\n        });\n      }\n      return callback(getIsolationScope());\n    });\n  }\n\n  function withSetIsolationScope<T>(isolationScope: Scope, callback: (isolationScope: Scope) => T): T {\n    const ctx = api.context.active();\n\n    // We depend on the otelContextManager to handle the context/hub\n    // We set the `SENTRY_FORK_ISOLATION_SCOPE_CONTEXT_KEY` context value, which is picked up by\n    // the OTEL context manager, which uses the presence of this key to determine if it should\n    // fork the isolation scope, or not\n    return api.context.with(ctx.setValue(SENTRY_FORK_SET_ISOLATION_SCOPE_CONTEXT_KEY, isolationScope), () => {\n      return callback(getIsolationScope());\n    });\n  }\n\n  function getCurrentScope(): Scope {\n    return getScopes().scope;\n  }\n\n  function getIsolationScope(): Scope {\n    return getScopes().isolationScope;\n  }\n\n  setAsyncContextStrategy({\n    withScope,\n    withSetScope,\n    withSetIsolationScope,\n    withIsolationScope,\n    getCurrentScope,\n    getIsolationScope,\n    startSpan,\n    startSpanManual,\n    startInactiveSpan,\n    getActiveSpan,\n    suppressTracing,\n    isTracingSuppressed,\n    getTraceData,\n    continueTrace,\n    startNewTrace,\n    // The types here don't fully align, because our own `Span` type is narrower\n    // than the OTEL one - but this is OK for here, as we now we'll only have OTEL spans passed around\n    withActiveSpan: withActiveSpan as typeof defaultWithActiveSpan,\n    getTracingChannelBinding: options?.getTracingChannelBinding,\n  });\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * NOTICE from the Sentry authors:\n * This implementation follows the behavior of OpenTelemetry’s `@opentelemetry/context-async-hooks`\n * package, combining logic that upstream splits across:\n * - https://github.com/open-telemetry/opentelemetry-js/blob/main/packages/opentelemetry-context-async-hooks/src/AbstractAsyncHooksContextManager.ts\n * - https://github.com/open-telemetry/opentelemetry-js/blob/main/packages/opentelemetry-context-async-hooks/src/AsyncLocalStorageContextManager.ts\n * It is a single-class re-implementation for Sentry (not a verbatim copy of those files).\n */\n\nimport type { Context, ContextManager } from '@opentelemetry/api';\nimport { ROOT_CONTEXT } from '@opentelemetry/api';\nimport { AsyncLocalStorage } from 'node:async_hooks';\nimport { EventEmitter } from 'node:events';\nimport type { AsyncLocalStorageLookup } from './contextManager';\nimport { SENTRY_SCOPES_CONTEXT_KEY } from './constants';\nimport { buildContextWithSentryScopes } from './utils/buildContextWithSentryScopes';\nimport { setIsSetup } from './utils/setupCheck';\nimport { getAsyncContextStrategy, getMainCarrier } from '@sentry/core';\n\ntype ListenerFn = (...args: unknown[]) => unknown;\n\n/**\n * Per-event map from user listeners to context-bound listeners.\n */\ntype PatchMap = Record<string, WeakMap<ListenerFn, ListenerFn>>;\n\nconst ADD_LISTENER_METHODS = ['addListener', 'on', 'once', 'prependListener', 'prependOnceListener'] as const;\n\n/**\n * OpenTelemetry-compatible context manager using Node.js `AsyncLocalStorage`.\n * Semantics match `@opentelemetry/context-async-hooks` (function `bind` + `EventEmitter` patching).\n */\nexport class SentryAsyncLocalStorageContextManager implements ContextManager {\n  protected readonly _asyncLocalStorage: AsyncLocalStorage<Context>;\n\n  private readonly _kOtListeners = Symbol('OtListeners');\n  private _wrapped = false;\n\n  public constructor() {\n    setIsSetup('SentryContextManager');\n    // Pick the instance from the async context strategy\n    // this should normally always be there, but if it is not for whatever reason, we fall back to a new instance\n    this._asyncLocalStorage =\n      (getAsyncContextStrategy(getMainCarrier()).getTracingChannelBinding?.()\n        ?.asyncLocalStorage as AsyncLocalStorage<Context>) ?? new AsyncLocalStorage<Context>();\n  }\n\n  public active(): Context {\n    return this._asyncLocalStorage.getStore() ?? ROOT_CONTEXT;\n  }\n\n  public with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n    context: Context,\n    fn: F,\n    thisArg?: ThisParameterType<F>,\n    ...args: A\n  ): ReturnType<F> {\n    const ctx2 = buildContextWithSentryScopes(context, this.active());\n    const cb = thisArg == null ? fn : fn.bind(thisArg);\n    return this._asyncLocalStorage.run(ctx2, cb as never, ...args);\n  }\n\n  public enable(): this {\n    return this;\n  }\n\n  public disable(): this {\n    this._asyncLocalStorage.disable();\n    return this;\n  }\n\n  public bind<T>(context: Context, target: T): T {\n    if (target instanceof EventEmitter) {\n      return this._bindEventEmitter(context, target);\n    }\n    if (typeof target === 'function') {\n      return this._bindFunction(context, target as unknown as ListenerFn) as T;\n    }\n    return target;\n  }\n\n  /**\n   * Gets underlying AsyncLocalStorage and symbol to allow lookup of scope.\n   * This is Sentry-specific.\n   */\n  public getAsyncLocalStorageLookup(): AsyncLocalStorageLookup {\n    return {\n      asyncLocalStorage: this._asyncLocalStorage,\n      contextSymbol: SENTRY_SCOPES_CONTEXT_KEY,\n    };\n  }\n\n  private _bindFunction(context: Context, target: ListenerFn): ListenerFn {\n    const managerWith = this.with.bind(this);\n    const contextWrapper = function (this: never, ...args: unknown[]) {\n      return managerWith(context, () => target.apply(this, args));\n    };\n    Object.defineProperty(contextWrapper, 'length', {\n      enumerable: false,\n      configurable: true,\n      writable: false,\n      value: target.length,\n    });\n    return contextWrapper;\n  }\n\n  private _bindEventEmitter<T extends EventEmitter>(context: Context, ee: T): T {\n    if (this._getPatchMap(ee) !== undefined) {\n      return ee;\n    }\n    this._createPatchMap(ee);\n\n    for (const methodName of ADD_LISTENER_METHODS) {\n      if (ee[methodName] === undefined) continue;\n      ee[methodName] = this._patchAddListener(\n        ee,\n        ee[methodName] as unknown as (...args: unknown[]) => unknown,\n        context,\n      );\n    }\n    if (typeof ee.removeListener === 'function') {\n      // oxlint-disable-next-line @typescript-eslint/unbound-method -- patched like upstream OTel context manager\n      ee.removeListener = this._patchRemoveListener(ee, ee.removeListener as (...args: unknown[]) => unknown);\n    }\n    if (typeof ee.off === 'function') {\n      // oxlint-disable-next-line @typescript-eslint/unbound-method\n      ee.off = this._patchRemoveListener(ee, ee.off as (...args: unknown[]) => unknown);\n    }\n    if (typeof ee.removeAllListeners === 'function') {\n      ee.removeAllListeners = this._patchRemoveAllListeners(\n        ee,\n        // oxlint-disable-next-line @typescript-eslint/unbound-method\n        ee.removeAllListeners as (...args: unknown[]) => unknown,\n      );\n    }\n    return ee;\n  }\n\n  private _patchRemoveListener(ee: EventEmitter, original: (...args: unknown[]) => unknown) {\n    // oxlint-disable-next-line @typescript-eslint/no-this-alias\n    const contextManager = this;\n    return function (this: unknown, event: string, listener: ListenerFn) {\n      const events = contextManager._getPatchMap(ee)?.[event];\n      if (events === undefined) {\n        return original.call(this, event, listener);\n      }\n      const patchedListener = events.get(listener);\n      return original.call(this, event, patchedListener || listener);\n    };\n  }\n\n  private _patchRemoveAllListeners(ee: EventEmitter, original: (...args: unknown[]) => unknown) {\n    // oxlint-disable-next-line @typescript-eslint/no-this-alias\n    const contextManager = this;\n    return function (this: unknown, event?: string) {\n      const map = contextManager._getPatchMap(ee);\n      if (map !== undefined) {\n        if (arguments.length === 0) {\n          contextManager._createPatchMap(ee);\n        } else if (event !== undefined && map[event] !== undefined) {\n          // oxlint-disable-next-line @typescript-eslint/no-dynamic-delete -- event-keyed listener map\n          delete map[event];\n        }\n      }\n      return original.apply(this, arguments);\n    };\n  }\n\n  private _patchAddListener(ee: EventEmitter, original: (...args: unknown[]) => unknown, context: Context) {\n    // oxlint-disable-next-line @typescript-eslint/no-this-alias\n    const contextManager = this;\n    return function (this: unknown, event: string, listener: ListenerFn) {\n      if (contextManager._wrapped) {\n        return original.call(this, event, listener);\n      }\n      let map = contextManager._getPatchMap(ee);\n      if (map === undefined) {\n        map = contextManager._createPatchMap(ee);\n      }\n      let listeners = map[event];\n      if (listeners === undefined) {\n        listeners = new WeakMap();\n        map[event] = listeners;\n      }\n      const patchedListener = contextManager.bind(context, listener);\n      listeners.set(listener, patchedListener);\n\n      contextManager._wrapped = true;\n      try {\n        return original.call(this, event, patchedListener);\n      } finally {\n        contextManager._wrapped = false;\n      }\n    };\n  }\n\n  private _createPatchMap(ee: EventEmitter): PatchMap {\n    const map = Object.create(null) as PatchMap;\n    (ee as unknown as Record<symbol, PatchMap>)[this._kOtListeners] = map;\n    return map;\n  }\n\n  private _getPatchMap(ee: EventEmitter): PatchMap | undefined {\n    return (ee as unknown as Record<symbol, PatchMap | undefined>)[this._kOtListeners];\n  }\n}\n", "import * as api from '@opentelemetry/api';\nimport { setOpenTelemetryContextAsyncContextStrategy } from './asyncContextStrategy';\nimport { AsyncLocalStorage } from 'node:async_hooks';\nimport { getRootSpan, spanIsIgnored, type TracingChannelBinding } from '@sentry/core';\nimport { SENTRY_TRACE_STATE_CHILD_IGNORED } from './constants';\n\ninterface ContextApi {\n  _getContextManager():\n    | undefined\n    | {\n        getAsyncLocalStorageLookup(): {\n          asyncLocalStorage: unknown;\n        };\n      };\n}\n\nexport function setNodeOpenTelemetryContextAsyncContextStrategy(options?: { skipOpenTelemetrySetup?: boolean }): void {\n  setOpenTelemetryContextAsyncContextStrategy({\n    getTracingChannelBinding: !options?.skipOpenTelemetrySetup\n      ? getDefaultAsyncLocalStorageFactory()\n      : getCustomAsyncLocalStorageFactory(),\n  });\n}\n\n/**\n * In the default case, we build the local storage instance ourselves here.\n * The default asyncLocalStorageContextManager will then use this internally.\n */\nfunction getDefaultAsyncLocalStorageFactory(): () => TracingChannelBinding {\n  const defaultAsyncLocalStorage = new AsyncLocalStorage<api.Context>();\n\n  return () => {\n    return {\n      asyncLocalStorage: defaultAsyncLocalStorage,\n      getStoreWithActiveSpan,\n    } satisfies TracingChannelBinding;\n  };\n}\n\n/**\n * If we have a custom context manager, we need to access it via the context manager\n * this may not be available yet, if this is called before the Otel ContextManager was setup\n * in this case, we need to return undefined and retry later, hoping that the setup works by then\n */\nfunction getCustomAsyncLocalStorageFactory(): () => TracingChannelBinding | undefined {\n  return () => {\n    try {\n      const contextManager = (api.context as unknown as ContextApi)._getContextManager();\n      const asyncLocalStorage = contextManager?.getAsyncLocalStorageLookup().asyncLocalStorage;\n\n      return asyncLocalStorage\n        ? ({\n            asyncLocalStorage,\n            getStoreWithActiveSpan,\n          } satisfies TracingChannelBinding)\n        : undefined;\n    } catch {\n      return undefined;\n    }\n  };\n}\n\nfunction getStoreWithActiveSpan(span: Parameters<TracingChannelBinding['getStoreWithActiveSpan']>[0]): api.Context {\n  const activeContext = api.context.active();\n\n  // Tracing channels bind directly to the context manager's AsyncLocalStorage and bypass\n  // SentryContextManager.with(), so ignored children must restore their parent here as well.\n  const isIgnoredChild =\n    (spanIsIgnored(span) && getRootSpan(span) !== span) ||\n    span.spanContext().traceState?.get(SENTRY_TRACE_STATE_CHILD_IGNORED) === '1';\n\n  return isIgnoredChild ? activeContext : api.trace.setSpan(activeContext, span);\n}\n", "import { SentryAsyncLocalStorageContextManager } from '@sentry/opentelemetry';\n\n/**\n * This is a custom ContextManager for OpenTelemetry & Sentry.\n * It ensures that we create a new hub per context, so that the OTEL Context & the Sentry Scopes are always in sync.\n */\nexport const SentryContextManager = SentryAsyncLocalStorageContextManager;\n", "import { diag, DiagLogLevel } from '@opentelemetry/api';\nimport { debug } from '@sentry/core';\n\n/**\n * Setup the OTEL logger to use our own debug logger.\n */\nexport function setupOpenTelemetryLogger(): void {\n  // Disable diag, to ensure this works even if called multiple times\n  diag.disable();\n  diag.setLogger(\n    {\n      error: debug.error,\n      warn: debug.warn,\n      info: debug.log,\n      debug: debug.log,\n      verbose: debug.log,\n    },\n    DiagLogLevel.DEBUG,\n  );\n}\n", "import { type Instrumentation, registerInstrumentations } from '@opentelemetry/instrumentation';\n\n/** Exported only for tests. */\nexport const INSTRUMENTED: Record<string, Instrumentation> = {};\n\nexport function generateInstrumentOnce<\n  Options,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  InstrumentationClass extends new (...args: any[]) => Instrumentation,\n>(\n  name: string,\n  instrumentationClass: InstrumentationClass,\n  optionsCallback: (options: Options) => ConstructorParameters<InstrumentationClass>[0],\n): ((options: Options) => InstanceType<InstrumentationClass>) & { id: string };\nexport function generateInstrumentOnce<\n  Options = unknown,\n  InstrumentationInstance extends Instrumentation = Instrumentation,\n>(\n  name: string,\n  creator: (options?: Options) => InstrumentationInstance,\n): ((options?: Options) => InstrumentationInstance) & { id: string };\n/**\n * Instrument an OpenTelemetry instrumentation once.\n * This will skip running instrumentation again if it was already instrumented.\n */\nexport function generateInstrumentOnce<Options>(\n  name: string,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  creatorOrClass: (new (...args: any[]) => Instrumentation) | ((options?: Options) => Instrumentation),\n  optionsCallback?: (options: Options) => unknown,\n): ((options: Options) => Instrumentation) & { id: string } {\n  if (optionsCallback) {\n    return _generateInstrumentOnceWithOptions(\n      name,\n      creatorOrClass as new (...args: unknown[]) => Instrumentation,\n      optionsCallback,\n    );\n  }\n\n  return _generateInstrumentOnce(name, creatorOrClass as (options?: Options) => Instrumentation);\n}\n\n// The plain version without handling of options\n// Should not be used with custom options that are mutated in the creator!\nfunction _generateInstrumentOnce<Options = unknown, InstrumentationInstance extends Instrumentation = Instrumentation>(\n  name: string,\n  creator: (options?: Options) => InstrumentationInstance,\n): ((options?: Options) => InstrumentationInstance) & { id: string } {\n  return Object.assign(\n    (options?: Options) => {\n      const instrumented = INSTRUMENTED[name] as InstrumentationInstance | undefined;\n      if (instrumented) {\n        // If options are provided, ensure we update them\n        if (options) {\n          instrumented.setConfig(options);\n        }\n        return instrumented;\n      }\n\n      const instrumentation = creator(options);\n      INSTRUMENTED[name] = instrumentation;\n\n      registerInstrumentations({\n        instrumentations: [instrumentation],\n      });\n\n      return instrumentation;\n    },\n    { id: name },\n  );\n}\n\n// This version handles options properly\nfunction _generateInstrumentOnceWithOptions<\n  Options,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  InstrumentationClass extends new (...args: any[]) => Instrumentation,\n>(\n  name: string,\n  instrumentationClass: InstrumentationClass,\n  optionsCallback: (options: Options) => ConstructorParameters<InstrumentationClass>[0],\n): ((options: Options) => InstanceType<InstrumentationClass>) & { id: string } {\n  return Object.assign(\n    (_options: Options) => {\n      const options = optionsCallback(_options);\n\n      const instrumented = INSTRUMENTED[name] as InstanceType<InstrumentationClass> | undefined;\n      if (instrumented) {\n        // Ensure we update options\n        instrumented.setConfig(options);\n        return instrumented;\n      }\n\n      const instrumentation = new instrumentationClass(options) as InstanceType<InstrumentationClass>;\n      INSTRUMENTED[name] = instrumentation;\n\n      registerInstrumentations({\n        instrumentations: [instrumentation],\n      });\n\n      return instrumentation;\n    },\n    { id: name },\n  );\n}\n\n/**\n * Ensure a given callback is called when the instrumentation is actually wrapping something.\n * This can be used to ensure some logic is only called when the instrumentation is actually active.\n *\n * This function returns a function that can be invoked with a callback.\n * This callback will either be invoked immediately\n * (e.g. if the instrumentation was already wrapped, or if _wrap could not be patched),\n * or once the instrumentation is actually wrapping something.\n *\n * Make sure to call this function right after adding the instrumentation, otherwise it may be too late!\n * The returned callback can be used any time, and also multiple times.\n */\nexport function instrumentWhenWrapped<T extends Instrumentation>(instrumentation: T): (callback: () => void) => void {\n  let isWrapped = false;\n  let callbacks: (() => void)[] = [];\n\n  if (!hasWrap(instrumentation)) {\n    isWrapped = true;\n  } else {\n    const originalWrap = instrumentation['_wrap'];\n\n    instrumentation['_wrap'] = (...args: Parameters<typeof originalWrap>) => {\n      isWrapped = true;\n      callbacks.forEach(callback => callback());\n      callbacks = [];\n      return originalWrap(...args);\n    };\n  }\n\n  const registerCallback = (callback: () => void): void => {\n    if (isWrapped) {\n      callback();\n    } else {\n      callbacks.push(callback);\n    }\n  };\n\n  return registerCallback;\n}\n\nfunction hasWrap<T extends Instrumentation>(\n  instrumentation: T,\n): instrumentation is T & { _wrap: (...args: unknown[]) => unknown } {\n  return typeof (instrumentation as T & { _wrap?: (...args: unknown[]) => unknown })['_wrap'] === 'function';\n}\n", "import type { ChildProcess } from 'node:child_process';\nimport * as diagnosticsChannel from 'node:diagnostics_channel';\nimport type { Worker } from 'node:worker_threads';\nimport { addBreadcrumb, captureException, defineIntegration, isObjectLike } from '@sentry/core';\n\ninterface Options {\n  /**\n   * Whether to include child process arguments in breadcrumbs data.\n   *\n   * @default false\n   */\n  includeChildProcessArgs?: boolean;\n\n  /**\n   * Whether to capture errors from worker threads.\n   *\n   * @default true\n   */\n  captureWorkerErrors?: boolean;\n}\n\nconst INTEGRATION_NAME = 'ChildProcess' as const;\n\n/**\n * Capture breadcrumbs and events for child processes and worker threads.\n */\nexport const childProcessIntegration = defineIntegration((options: Options = {}) => {\n  return {\n    name: INTEGRATION_NAME,\n    setup() {\n      diagnosticsChannel.channel('child_process').subscribe((event: unknown) => {\n        if (isObjectLike(event) && 'process' in event) {\n          captureChildProcessEvents(event.process as ChildProcess, options);\n        }\n      });\n\n      diagnosticsChannel.channel('worker_threads').subscribe((event: unknown) => {\n        if (isObjectLike(event) && 'worker' in event) {\n          captureWorkerThreadEvents(event.worker as Worker, options);\n        }\n      });\n    },\n  };\n});\n\nfunction captureChildProcessEvents(child: ChildProcess, options: Options): void {\n  let hasExited = false;\n  let data: Record<string, unknown> | undefined;\n\n  child\n    .on('spawn', () => {\n      // This is Sentry getting macOS OS context\n      if (child.spawnfile === '/usr/bin/sw_vers') {\n        hasExited = true;\n        return;\n      }\n\n      data = { spawnfile: child.spawnfile };\n      if (options.includeChildProcessArgs) {\n        data.spawnargs = child.spawnargs;\n      }\n    })\n    .on('exit', code => {\n      if (!hasExited) {\n        hasExited = true;\n\n        // Only log for non-zero exit codes\n        if (code !== null && code !== 0) {\n          addBreadcrumb({\n            category: 'child_process',\n            message: `Child process exited with code '${code}'`,\n            level: code === 0 ? 'info' : 'warning',\n            data,\n          });\n        }\n      }\n    })\n    .on('error', error => {\n      if (!hasExited) {\n        hasExited = true;\n\n        addBreadcrumb({\n          category: 'child_process',\n          message: `Child process errored with '${error.message}'`,\n          level: 'error',\n          data,\n        });\n      }\n    });\n}\n\nfunction captureWorkerThreadEvents(worker: Worker, options: Options): void {\n  let threadId: number | undefined;\n\n  worker\n    .on('online', () => {\n      threadId = worker.threadId;\n    })\n    .on('error', error => {\n      if (options.captureWorkerErrors !== false) {\n        captureException(error, {\n          mechanism: { type: 'auto.child_process.worker_thread', handled: false, data: { threadId: String(threadId) } },\n        });\n      } else {\n        addBreadcrumb({\n          category: 'worker_thread',\n          message: `Worker thread errored with '${error.message}'`,\n          level: 'error',\n          data: { threadId },\n        });\n      }\n    });\n}\n", "/* eslint-disable max-lines */\n\nimport { execFile } from 'node:child_process';\nimport { readdir, readFile } from 'node:fs';\nimport * as os from 'node:os';\nimport { join } from 'node:path';\nimport { promisify } from 'node:util';\nimport type {\n  AppContext,\n  CloudResourceContext,\n  Contexts,\n  CultureContext,\n  DeviceContext,\n  Event,\n  IntegrationFn,\n  OsContext,\n} from '@sentry/core';\nimport { defineIntegration, safeSetSpanJSONAttributes } from '@sentry/core';\n\nexport const readFileAsync = promisify(readFile);\nexport const readDirAsync = promisify(readdir);\n\n// Process enhanced with methods from Node 18, 20, 22 as @types/node\n// is on `14.18.0` to match minimum version requirements of the SDK\ninterface ProcessWithCurrentValues extends NodeJS.Process {\n  availableMemory?(): number;\n}\n\nconst INTEGRATION_NAME = 'Context' as const;\n\ninterface DeviceContextOptions {\n  cpu?: boolean;\n  memory?: boolean;\n}\n\ninterface ContextOptions {\n  app?: boolean;\n  os?: boolean;\n  device?: DeviceContextOptions | boolean;\n  culture?: boolean;\n  cloudResource?: boolean;\n}\n\nconst _nodeContextIntegration = ((options: ContextOptions = {}) => {\n  const _options = {\n    app: true,\n    os: true,\n    device: true,\n    culture: true,\n    cloudResource: true,\n    ...options,\n  };\n\n  // Compute contexts eagerly (shared between tx and span paths)\n  const appContext = _options.app ? getAppContext() : undefined;\n  const deviceContext = _options.device ? getDeviceContext(_options.device) : undefined;\n  const cultureContext = _options.culture ? getCultureContext() : undefined;\n  const cloudResourceContext = _options.cloudResource ? getCloudResourceContext() : undefined;\n  const osContextPromise = _options.os ? getOsContext() : undefined;\n\n  // Map static context data to span attributes\n  const cachedSpanAttributes: Record<string, unknown> = {\n    'process.runtime.engine.name': 'v8',\n    'process.runtime.engine.version': process.versions.v8,\n    ...contextsToSpanAttributes({\n      app: appContext,\n      device: deviceContext,\n      culture: cultureContext,\n      cloud_resource: cloudResourceContext,\n    }),\n  };\n\n  if (osContextPromise) {\n    osContextPromise\n      .then(osCtx => Object.assign(cachedSpanAttributes, contextsToSpanAttributes({ os: osCtx })))\n      .catch(() => {\n        // Ignore - os attributes will be undefined\n      });\n  }\n\n  // Build contexts for event processing (reuses same data, awaits async OS context)\n  const contextsPromise: Promise<Contexts> = (async () => {\n    const contexts: Contexts = {};\n    if (osContextPromise) {\n      contexts.os = await osContextPromise;\n    }\n    if (appContext) {\n      contexts.app = appContext;\n    }\n    if (deviceContext) {\n      contexts.device = deviceContext;\n    }\n    if (cultureContext) {\n      contexts.culture = cultureContext;\n    }\n    if (cloudResourceContext) {\n      contexts.cloud_resource = cloudResourceContext;\n    }\n    return contexts;\n  })();\n\n  async function addContext(event: Event): Promise<Event> {\n    const updatedContext = _updateContext(await contextsPromise);\n\n    event.contexts = {\n      ...event.contexts,\n      app: { ...updatedContext.app, ...event.contexts?.app },\n      os: { ...updatedContext.os, ...event.contexts?.os },\n      device: { ...updatedContext.device, ...event.contexts?.device },\n      culture: { ...updatedContext.culture, ...event.contexts?.culture },\n      cloud_resource: { ...updatedContext.cloud_resource, ...event.contexts?.cloud_resource },\n    };\n\n    return event;\n  }\n\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(event) {\n      return addContext(event);\n    },\n    processSegmentSpan(span) {\n      safeSetSpanJSONAttributes(span, cachedSpanAttributes);\n      safeSetSpanJSONAttributes(span, getDynamicSpanAttributes(appContext, deviceContext));\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Capture context about the environment and the device that the client is running on, to events.\n */\nexport const nodeContextIntegration = defineIntegration(_nodeContextIntegration);\n\n/**\n * Updates the context with dynamic values that can change\n */\nfunction _updateContext(contexts: Contexts): Contexts {\n  // Only update properties if they exist\n\n  if (contexts.app?.app_memory) {\n    contexts.app.app_memory = process.memoryUsage().rss;\n  }\n\n  if (contexts.app?.free_memory && typeof (process as ProcessWithCurrentValues).availableMemory === 'function') {\n    const freeMemory = (process as ProcessWithCurrentValues).availableMemory?.();\n    if (freeMemory != null) {\n      contexts.app.free_memory = freeMemory;\n    }\n  }\n\n  if (contexts.device?.free_memory) {\n    contexts.device.free_memory = os.freemem();\n  }\n\n  return contexts;\n}\n\nexport function contextsToSpanAttributes(contexts: Contexts): Record<string, unknown> {\n  const attrs: Record<string, unknown> = {};\n\n  const { app, device, os: osCtx, culture, cloud_resource } = contexts;\n\n  if (app) {\n    if (app.app_start_time) {\n      attrs['app.start_time'] = app.app_start_time;\n    }\n  }\n\n  if (device) {\n    if (device.arch) {\n      attrs['device.archs'] = [device.arch];\n    }\n    if (device.boot_time) {\n      attrs['device.boot_time'] = device.boot_time;\n    }\n    if (device.memory_size != null) {\n      attrs['device.memory_size'] = device.memory_size;\n    }\n    if (device.processor_count != null) {\n      attrs['device.processor_count'] = device.processor_count;\n    }\n    if (device.cpu_description) {\n      attrs['device.cpu_description'] = device.cpu_description;\n    }\n    if (device.processor_frequency != null) {\n      attrs['device.processor_frequency'] = device.processor_frequency;\n    }\n  }\n\n  if (osCtx) {\n    if (osCtx.name) {\n      attrs['os.name'] = osCtx.name;\n    }\n    if (osCtx.version) {\n      attrs['os.version'] = osCtx.version;\n    }\n    if (osCtx.kernel_version) {\n      attrs['os.kernel_version'] = osCtx.kernel_version;\n    }\n    if (osCtx.build) {\n      attrs['os.build'] = osCtx.build;\n    }\n  }\n\n  if (culture) {\n    if (culture.locale) {\n      attrs['culture.locale'] = culture.locale;\n    }\n    if (culture.timezone) {\n      attrs['culture.timezone'] = culture.timezone;\n    }\n  }\n\n  // CloudResourceContext already uses dot-notation keys matching span attribute conventions\n  if (cloud_resource) {\n    for (const [key, value] of Object.entries(cloud_resource)) {\n      if (value != null) {\n        attrs[key] = value;\n      }\n    }\n  }\n\n  return attrs;\n}\n\nexport function getDynamicSpanAttributes(\n  appContext: AppContext | undefined,\n  deviceContext: DeviceContext | undefined,\n): Record<string, unknown> {\n  const attrs: Record<string, unknown> = {};\n\n  if (appContext) {\n    attrs['app.memory'] = process.memoryUsage().rss;\n    if (typeof (process as ProcessWithCurrentValues).availableMemory === 'function') {\n      const freeMemory = (process as ProcessWithCurrentValues).availableMemory?.();\n      if (freeMemory != null) {\n        attrs['app.free_memory'] = freeMemory;\n      }\n    }\n  }\n\n  // Only include if memory tracking was initially enabled (indicated by free_memory being set)\n  if (deviceContext?.free_memory != null) {\n    attrs['device.free_memory'] = os.freemem();\n  }\n\n  return attrs;\n}\n\n/**\n * Returns the operating system context.\n *\n * Based on the current platform, this uses a different strategy to provide the\n * most accurate OS information. Since this might involve spawning subprocesses\n * or accessing the file system, this should only be executed lazily and cached.\n *\n *  - On macOS (Darwin), this will execute the `sw_vers` utility. The context\n *    has a `name`, `version`, `build` and `kernel_version` set.\n *  - On Linux, this will try to load a distribution release from `/etc` and set\n *    the `name`, `version` and `kernel_version` fields.\n *  - On all other platforms, only a `name` and `version` will be returned. Note\n *    that `version` might actually be the kernel version.\n */\nasync function getOsContext(): Promise<OsContext> {\n  const platformId = os.platform();\n  switch (platformId) {\n    case 'darwin':\n      return getDarwinInfo();\n    case 'linux':\n      return getLinuxInfo();\n    default:\n      return {\n        name: PLATFORM_NAMES[platformId] || platformId,\n        version: os.release(),\n      };\n  }\n}\n\nfunction getCultureContext(): CultureContext | undefined {\n  try {\n    if (typeof process.versions.icu !== 'string') {\n      // Node was built without ICU support\n      return;\n    }\n\n    // Check that node was built with full Intl support. Its possible it was built without support for non-English\n    // locales which will make resolvedOptions inaccurate\n    //\n    // https://nodejs.org/api/intl.html#detecting-internationalization-support\n    const january = new Date(9e8);\n    const spanish = new Intl.DateTimeFormat('es', { month: 'long' });\n    if (spanish.format(january) === 'enero') {\n      const options = Intl.DateTimeFormat().resolvedOptions();\n\n      return {\n        locale: options.locale,\n        timezone: options.timeZone,\n      };\n    }\n  } catch {\n    //\n  }\n\n  return;\n}\n\n/**\n * Get app context information from process\n */\nexport function getAppContext(): AppContext {\n  const app_memory = process.memoryUsage().rss;\n  // oxlint-disable-next-line sdk/no-unsafe-random-apis\n  const app_start_time = new Date(Date.now() - process.uptime() * 1000).toISOString();\n  // https://nodejs.org/api/process.html#processavailablememory\n  const appContext: AppContext = { app_start_time, app_memory };\n\n  if (typeof (process as ProcessWithCurrentValues).availableMemory === 'function') {\n    const freeMemory = (process as ProcessWithCurrentValues).availableMemory?.();\n    if (freeMemory != null) {\n      appContext.free_memory = freeMemory;\n    }\n  }\n\n  return appContext;\n}\n\n/**\n * Gets device information from os\n */\nexport function getDeviceContext(deviceOpt: DeviceContextOptions | true): DeviceContext {\n  const device: DeviceContext = {};\n\n  // Sometimes os.uptime() throws due to lacking permissions: https://github.com/getsentry/sentry-javascript/issues/8202\n  let uptime;\n  try {\n    uptime = os.uptime();\n  } catch {\n    // noop\n  }\n\n  // os.uptime or its return value seem to be undefined in certain environments (e.g. Azure functions).\n  // Hence, we only set boot time, if we get a valid uptime value.\n  // @see https://github.com/getsentry/sentry-javascript/issues/5856\n  if (typeof uptime === 'number') {\n    // oxlint-disable-next-line sdk/no-unsafe-random-apis\n    device.boot_time = new Date(Date.now() - uptime * 1000).toISOString();\n  }\n\n  device.arch = os.arch();\n\n  if (deviceOpt === true || deviceOpt.memory) {\n    device.memory_size = os.totalmem();\n    device.free_memory = os.freemem();\n  }\n\n  if (deviceOpt === true || deviceOpt.cpu) {\n    const cpuInfo = os.cpus() as os.CpuInfo[] | undefined;\n    const firstCpu = cpuInfo?.[0];\n    if (firstCpu) {\n      device.processor_count = cpuInfo.length;\n      device.cpu_description = firstCpu.model;\n      device.processor_frequency = firstCpu.speed;\n    }\n  }\n\n  return device;\n}\n\n/** Mapping of Node's platform names to actual OS names. */\nconst PLATFORM_NAMES: { [platform: string]: string } = {\n  aix: 'IBM AIX',\n  freebsd: 'FreeBSD',\n  openbsd: 'OpenBSD',\n  sunos: 'SunOS',\n  win32: 'Windows',\n  ohos: 'OpenHarmony',\n  android: 'Android',\n};\n\n/** Linux version file to check for a distribution. */\ninterface DistroFile {\n  /** The file name, located in `/etc`. */\n  name: string;\n  /** Potential distributions to check. */\n  distros: [string, ...string[]];\n}\n\n/** Mapping of linux release files located in /etc to distributions. */\nconst LINUX_DISTROS: DistroFile[] = [\n  { name: 'fedora-release', distros: ['Fedora'] },\n  { name: 'redhat-release', distros: ['Red Hat Linux', 'Centos'] },\n  { name: 'redhat_version', distros: ['Red Hat Linux'] },\n  { name: 'SuSE-release', distros: ['SUSE Linux'] },\n  { name: 'lsb-release', distros: ['Ubuntu Linux', 'Arch Linux'] },\n  { name: 'debian_version', distros: ['Debian'] },\n  { name: 'debian_release', distros: ['Debian'] },\n  { name: 'arch-release', distros: ['Arch Linux'] },\n  { name: 'gentoo-release', distros: ['Gentoo Linux'] },\n  { name: 'novell-release', distros: ['SUSE Linux'] },\n  { name: 'alpine-release', distros: ['Alpine Linux'] },\n];\n\n/** Functions to extract the OS version from Linux release files. */\nconst LINUX_VERSIONS: {\n  [identifier: string]: (content: string) => string | undefined;\n} = {\n  alpine: content => content,\n  arch: content => matchFirst(/distrib_release=(.*)/, content),\n  centos: content => matchFirst(/release ([^ ]+)/, content),\n  debian: content => content,\n  fedora: content => matchFirst(/release (..)/, content),\n  mint: content => matchFirst(/distrib_release=(.*)/, content),\n  red: content => matchFirst(/release ([^ ]+)/, content),\n  suse: content => matchFirst(/VERSION = (.*)\\n/, content),\n  ubuntu: content => matchFirst(/distrib_release=(.*)/, content),\n};\n\n/**\n * Executes a regular expression with one capture group.\n *\n * @param regex A regular expression to execute.\n * @param text Content to execute the RegEx on.\n * @returns The captured string if matched; otherwise undefined.\n */\nfunction matchFirst(regex: RegExp, text: string): string | undefined {\n  const match = regex.exec(text);\n  return match ? match[1] : undefined;\n}\n\n/** Loads the macOS operating system context. */\nasync function getDarwinInfo(): Promise<OsContext> {\n  // Default values that will be used in case no operating system information\n  // can be loaded. The default version is computed via heuristics from the\n  // kernel version, but the build ID is missing.\n  const darwinInfo: OsContext = {\n    kernel_version: os.release(),\n    name: 'Mac OS X',\n    version: `10.${Number(os.release().split('.')[0]) - 4}`,\n  };\n\n  try {\n    // We try to load the actual macOS version by executing the `sw_vers` tool.\n    // This tool should be available on every standard macOS installation. In\n    // case this fails, we stick with the values computed above.\n\n    const output = await new Promise<string>((resolve, reject) => {\n      execFile('/usr/bin/sw_vers', (error: Error | null, stdout: string) => {\n        if (error) {\n          reject(error);\n          return;\n        }\n        resolve(stdout);\n      });\n    });\n\n    darwinInfo.name = matchFirst(/^ProductName:\\s+(.*)$/m, output);\n    darwinInfo.version = matchFirst(/^ProductVersion:\\s+(.*)$/m, output);\n    darwinInfo.build = matchFirst(/^BuildVersion:\\s+(.*)$/m, output);\n  } catch {\n    // ignore\n  }\n\n  return darwinInfo;\n}\n\n/** Returns a distribution identifier to look up version callbacks. */\nfunction getLinuxDistroId(name: string): string {\n  return (name.split(' ') as [string])[0].toLowerCase();\n}\n\n/** Loads the Linux operating system context. */\nasync function getLinuxInfo(): Promise<OsContext> {\n  // By default, we cannot assume anything about the distribution or Linux\n  // version. `os.release()` returns the kernel version and we assume a generic\n  // \"Linux\" name, which will be replaced down below.\n  const linuxInfo: OsContext = {\n    kernel_version: os.release(),\n    name: 'Linux',\n  };\n\n  try {\n    // We start guessing the distribution by listing files in the /etc\n    // directory. This is were most Linux distributions (except Knoppix) store\n    // release files with certain distribution-dependent meta data. We search\n    // for exactly one known file defined in `LINUX_DISTROS` and exit if none\n    // are found. In case there are more than one file, we just stick with the\n    // first one.\n    const etcFiles = await readDirAsync('/etc');\n    const distroFile = LINUX_DISTROS.find(file => etcFiles.includes(file.name));\n    if (!distroFile) {\n      return linuxInfo;\n    }\n\n    // Once that file is known, load its contents. To make searching in those\n    // files easier, we lowercase the file contents. Since these files are\n    // usually quite small, this should not allocate too much memory and we only\n    // hold on to it for a very short amount of time.\n    const distroPath = join('/etc', distroFile.name);\n    const contents = (await readFileAsync(distroPath, { encoding: 'utf-8' })).toLowerCase();\n\n    // Some Linux distributions store their release information in the same file\n    // (e.g. RHEL and Centos). In those cases, we scan the file for an\n    // identifier, that basically consists of the first word of the linux\n    // distribution name (e.g. \"red\" for Red Hat). In case there is no match, we\n    // just assume the first distribution in our list.\n    const { distros } = distroFile;\n    linuxInfo.name = distros.find(d => contents.indexOf(getLinuxDistroId(d)) >= 0) || distros[0];\n\n    // Based on the found distribution, we can now compute the actual version\n    // number. This is different for every distribution, so several strategies\n    // are computed in `LINUX_VERSIONS`.\n    const id = getLinuxDistroId(linuxInfo.name);\n    linuxInfo.version = LINUX_VERSIONS[id]?.(contents);\n  } catch {\n    // ignore\n  }\n\n  return linuxInfo;\n}\n\n/**\n * Grabs some information about hosting provider based on best effort.\n */\nfunction getCloudResourceContext(): CloudResourceContext | undefined {\n  if (process.env.VERCEL) {\n    // https://vercel.com/docs/concepts/projects/environment-variables/system-environment-variables#system-environment-variables\n    return {\n      'cloud.provider': 'vercel',\n      'cloud.region': process.env.VERCEL_REGION,\n    };\n  } else if (process.env.AWS_REGION) {\n    // https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html\n    return {\n      'cloud.provider': 'aws',\n      'cloud.region': process.env.AWS_REGION,\n      'cloud.platform': process.env.AWS_EXECUTION_ENV,\n    };\n  } else if (process.env.GCP_PROJECT) {\n    // https://cloud.google.com/composer/docs/how-to/managing/environment-variables#reserved_variables\n    return {\n      'cloud.provider': 'gcp',\n    };\n  } else if (process.env.ALIYUN_REGION_ID) {\n    // TODO: find where I found these environment variables - at least gc.github.com returns something\n    return {\n      'cloud.provider': 'alibaba_cloud',\n      'cloud.region': process.env.ALIYUN_REGION_ID,\n    };\n  } else if (process.env.WEBSITE_SITE_NAME && process.env.REGION_NAME) {\n    // https://learn.microsoft.com/en-us/azure/app-service/reference-app-settings?tabs=kudu%2Cdotnet#app-environment\n    return {\n      'cloud.provider': 'azure',\n      'cloud.region': process.env.REGION_NAME,\n    };\n  } else if (process.env.IBM_CLOUD_REGION) {\n    // TODO: find where I found these environment variables - at least gc.github.com returns something\n    return {\n      'cloud.provider': 'ibm_cloud',\n      'cloud.region': process.env.IBM_CLOUD_REGION,\n    };\n  } else if (process.env.TENCENTCLOUD_REGION) {\n    // https://www.tencentcloud.com/document/product/583/32748\n    return {\n      'cloud.provider': 'tencent_cloud',\n      'cloud.region': process.env.TENCENTCLOUD_REGION,\n      'cloud.account.id': process.env.TENCENTCLOUD_APPID,\n      'cloud.availability_zone': process.env.TENCENTCLOUD_ZONE,\n    };\n  } else if (process.env.NETLIFY) {\n    // https://docs.netlify.com/configure-builds/environment-variables/#read-only-variables\n    return {\n      'cloud.provider': 'netlify',\n    };\n  } else if (process.env.FLY_REGION) {\n    // https://fly.io/docs/reference/runtime-environment/\n    return {\n      'cloud.provider': 'fly.io',\n      'cloud.region': process.env.FLY_REGION,\n    };\n  } else if (process.env.DYNO) {\n    // https://devcenter.heroku.com/articles/dynos#local-environment-variables\n    return {\n      'cloud.provider': 'heroku',\n    };\n  } else {\n    return undefined;\n  }\n}\n", "import { createReadStream } from 'node:fs';\nimport { createInterface } from 'node:readline';\nimport type { Event, IntegrationFn, StackFrame } from '@sentry/core';\nimport { debug, defineIntegration, LRUMap, snipLine } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build';\n\nconst LRU_FILE_CONTENTS_CACHE = new LRUMap<string, Record<number, string>>(10);\nconst LRU_FILE_CONTENTS_FS_READ_FAILED = new LRUMap<string, 1>(20);\nconst DEFAULT_LINES_OF_CONTEXT = 7;\nconst INTEGRATION_NAME = 'ContextLines' as const;\n// Determines the upper bound of lineno/colno that we will attempt to read. Large colno values are likely to be\n// minified code while large lineno values are likely to be bundled code.\n// Exported for testing purposes.\nexport const MAX_CONTEXTLINES_COLNO: number = 1000;\nexport const MAX_CONTEXTLINES_LINENO: number = 10000;\n\n// TODO(v11): Use `dataCollection.frameContextLines` default (5)\ninterface ContextLinesOptions {\n  /**\n   * Sets the number of context lines for each frame when loading a file.\n   * Defaults to 7.\n   *\n   * Set to 0 to disable loading and inclusion of source files.\n   *\n   * When set, this option takes precedence over `dataCollection.frameContextLines`.\n   **/\n  frameContextLines?: number;\n}\n\n/**\n * Exported for testing purposes.\n */\nexport function resetFileContentCache(): void {\n  LRU_FILE_CONTENTS_CACHE.clear();\n}\n\n/**\n * Get or init map value\n */\nfunction emplace<T extends LRUMap<K, V>, K extends string, V>(map: T, key: K, contents: V): V {\n  const value = map.get(key);\n\n  if (value === undefined) {\n    map.set(key, contents);\n    return contents;\n  }\n\n  return value;\n}\n\n/**\n * Determines if context lines should be skipped for a file.\n * - .min.(mjs|cjs|js) files are and not useful since they dont point to the original source\n * - node: prefixed modules are part of the runtime and cannot be resolved to a file\n * - data: skip json, wasm and inline js https://nodejs.org/api/esm.html#data-imports\n */\nfunction shouldSkipContextLinesForFile(path: string): boolean {\n  // Test the most common prefix and extension first. These are the ones we\n  // are most likely to see in user applications and are the ones we can break out of first.\n  if (path.startsWith('node:')) return true;\n  if (path.endsWith('.min.js')) return true;\n  if (path.endsWith('.min.cjs')) return true;\n  if (path.endsWith('.min.mjs')) return true;\n  if (path.startsWith('data:')) return true;\n  return false;\n}\n\n/**\n * Determines if we should skip contextlines based off the max lineno and colno values.\n */\nfunction shouldSkipContextLinesForFrame(frame: StackFrame): boolean {\n  if (frame.lineno !== undefined && frame.lineno > MAX_CONTEXTLINES_LINENO) return true;\n  if (frame.colno !== undefined && frame.colno > MAX_CONTEXTLINES_COLNO) return true;\n  return false;\n}\n/**\n * Checks if we have all the contents that we need in the cache.\n */\nfunction rangeExistsInContentCache(file: string, range: ReadlineRange): boolean {\n  const contents = LRU_FILE_CONTENTS_CACHE.get(file);\n  if (contents === undefined) return false;\n\n  for (let i = range[0]; i <= range[1]; i++) {\n    if (contents[i] === undefined) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Creates contiguous ranges of lines to read from a file. In the case where context lines overlap,\n * the ranges are merged to create a single range.\n */\nfunction makeLineReaderRanges(lines: number[], linecontext: number): ReadlineRange[] {\n  if (!lines.length) {\n    return [];\n  }\n\n  let i = 0;\n  const line = lines[0];\n\n  if (typeof line !== 'number') {\n    return [];\n  }\n\n  let current = makeContextRange(line, linecontext);\n  const out: ReadlineRange[] = [];\n  // eslint-disable-next-line no-constant-condition\n  while (true) {\n    if (i === lines.length - 1) {\n      out.push(current);\n      break;\n    }\n\n    // If the next line falls into the current range, extend the current range to lineno + linecontext.\n    const next = lines[i + 1];\n    if (typeof next !== 'number') {\n      break;\n    }\n    if (next <= current[1]) {\n      current[1] = next + linecontext;\n    } else {\n      out.push(current);\n      current = makeContextRange(next, linecontext);\n    }\n\n    i++;\n  }\n\n  return out;\n}\n\n/**\n * Extracts lines from a file and stores them in a cache.\n */\nfunction getContextLinesFromFile(path: string, ranges: ReadlineRange[], output: Record<number, string>): Promise<void> {\n  return new Promise((resolve, _reject) => {\n    // It is important *not* to have any async code between createInterface and the 'line' event listener\n    // as it will cause the 'line' event to\n    // be emitted before the listener is attached.\n    const stream = createReadStream(path);\n    const lineReaded = createInterface({\n      input: stream,\n    });\n\n    // We need to explicitly destroy the stream to prevent memory leaks,\n    // removing the listeners on the readline interface is not enough.\n    // See: https://github.com/nodejs/node/issues/9002 and https://github.com/getsentry/sentry-javascript/issues/14892\n    function destroyStreamAndResolve(): void {\n      stream.destroy();\n      resolve();\n    }\n\n    // Init at zero and increment at the start of the loop because lines are 1 indexed.\n    let lineNumber = 0;\n    let currentRangeIndex = 0;\n    const range = ranges[currentRangeIndex];\n    if (range === undefined) {\n      // We should never reach this point, but if we do, we should resolve the promise to prevent it from hanging.\n      destroyStreamAndResolve();\n      return;\n    }\n    let rangeStart = range[0];\n    let rangeEnd = range[1];\n\n    // We use this inside Promise.all, so we need to resolve the promise even if there is an error\n    // to prevent Promise.all from short circuiting the rest.\n    function onStreamError(e: Error): void {\n      // Mark file path as failed to read and prevent multiple read attempts.\n      LRU_FILE_CONTENTS_FS_READ_FAILED.set(path, 1);\n      DEBUG_BUILD && debug.error(`Failed to read file: ${path}. Error: ${e}`);\n      lineReaded.close();\n      lineReaded.removeAllListeners();\n      destroyStreamAndResolve();\n    }\n\n    // We need to handle the error event to prevent the process from crashing in < Node 16\n    // https://github.com/nodejs/node/pull/31603\n    stream.on('error', onStreamError);\n    lineReaded.on('error', onStreamError);\n    lineReaded.on('close', destroyStreamAndResolve);\n\n    lineReaded.on('line', line => {\n      lineNumber++;\n      if (lineNumber < rangeStart) return;\n\n      // !Warning: This mutates the cache by storing the snipped line into the cache.\n      output[lineNumber] = snipLine(line, 0);\n\n      if (lineNumber >= rangeEnd) {\n        if (currentRangeIndex === ranges.length - 1) {\n          // We need to close the file stream and remove listeners, else the reader will continue to run our listener;\n          lineReaded.close();\n          lineReaded.removeAllListeners();\n          return;\n        }\n        currentRangeIndex++;\n        const range = ranges[currentRangeIndex];\n        if (range === undefined) {\n          // This should never happen as it means we have a bug in the context.\n          lineReaded.close();\n          lineReaded.removeAllListeners();\n          return;\n        }\n        rangeStart = range[0];\n        rangeEnd = range[1];\n      }\n    });\n  });\n}\n\n/**\n * Adds surrounding (context) lines of the line that an exception occurred on to the event.\n * This is done by reading the file line by line and extracting the lines. The extracted lines are stored in\n * a cache to prevent multiple reads of the same file. Failures to read a file are similarly cached to prevent multiple\n * failing reads from happening.\n */\n/* eslint-disable complexity */\nasync function addSourceContext(event: Event, contextLines: number): Promise<Event> {\n  // keep a lookup map of which files we've already enqueued to read,\n  // so we don't enqueue the same file multiple times which would cause multiple i/o reads\n  const filesToLines: Record<string, number[]> = {};\n\n  if (contextLines > 0 && event.exception?.values) {\n    for (const exception of event.exception.values) {\n      if (!exception.stacktrace?.frames?.length) {\n        continue;\n      }\n\n      // Maps preserve insertion order, so we iterate in reverse, starting at the\n      // outermost frame and closer to where the exception has occurred (poor mans priority)\n      for (let i = exception.stacktrace.frames.length - 1; i >= 0; i--) {\n        const frame: StackFrame | undefined = exception.stacktrace.frames[i];\n        const filename = frame?.filename;\n\n        if (\n          !frame ||\n          typeof filename !== 'string' ||\n          typeof frame.lineno !== 'number' ||\n          shouldSkipContextLinesForFile(filename) ||\n          shouldSkipContextLinesForFrame(frame)\n        ) {\n          continue;\n        }\n\n        const filesToLinesOutput = filesToLines[filename];\n        if (!filesToLinesOutput) filesToLines[filename] = [];\n        // @ts-expect-error this is defined above\n        filesToLines[filename].push(frame.lineno);\n      }\n    }\n  }\n\n  const files = Object.keys(filesToLines);\n  if (files.length == 0) {\n    return event;\n  }\n\n  const readlinePromises: Promise<void>[] = [];\n  for (const file of files) {\n    // If we failed to read this before, dont try reading it again.\n    if (LRU_FILE_CONTENTS_FS_READ_FAILED.get(file)) {\n      continue;\n    }\n\n    const filesToLineRanges = filesToLines[file];\n    if (!filesToLineRanges) {\n      continue;\n    }\n\n    // Sort ranges so that they are sorted by line increasing order and match how the file is read.\n    filesToLineRanges.sort((a, b) => a - b);\n    // Check if the contents are already in the cache and if we can avoid reading the file again.\n    const ranges = makeLineReaderRanges(filesToLineRanges, contextLines);\n    if (ranges.every(r => rangeExistsInContentCache(file, r))) {\n      continue;\n    }\n\n    const cache = emplace(LRU_FILE_CONTENTS_CACHE, file, {});\n    readlinePromises.push(getContextLinesFromFile(file, ranges, cache));\n  }\n\n  // The promise rejections are caught in order to prevent them from short circuiting Promise.all\n  await Promise.all(readlinePromises).catch(() => {\n    DEBUG_BUILD && debug.log('Failed to read one or more source files and resolve context lines');\n  });\n\n  // Perform the same loop as above, but this time we can assume all files are in the cache\n  // and attempt to add source context to frames.\n  if (contextLines > 0 && event.exception?.values) {\n    for (const exception of event.exception.values) {\n      if (exception.stacktrace?.frames && exception.stacktrace.frames.length > 0) {\n        addSourceContextToFrames(exception.stacktrace.frames, contextLines, LRU_FILE_CONTENTS_CACHE);\n      }\n    }\n  }\n\n  return event;\n}\n/* eslint-enable complexity */\n\n/** Adds context lines to frames */\nfunction addSourceContextToFrames(\n  frames: StackFrame[],\n  contextLines: number,\n  cache: LRUMap<string, Record<number, string>>,\n): void {\n  for (const frame of frames) {\n    // Only add context if we have a filename and it hasn't already been added\n    if (frame.filename && frame.context_line === undefined && typeof frame.lineno === 'number') {\n      const contents = cache.get(frame.filename);\n      if (contents === undefined) {\n        continue;\n      }\n\n      addContextToFrame(frame.lineno, frame, contextLines, contents);\n    }\n  }\n}\n\n/**\n * Clears the context lines from a frame, used to reset a frame to its original state\n * if we fail to resolve all context lines for it.\n */\nfunction clearLineContext(frame: StackFrame): void {\n  delete frame.pre_context;\n  delete frame.context_line;\n  delete frame.post_context;\n}\n\n/**\n * Resolves context lines before and after the given line number and appends them to the frame;\n */\nexport function addContextToFrame(\n  lineno: number,\n  frame: StackFrame,\n  contextLines: number,\n  contents: Record<number, string> | undefined,\n): void {\n  // When there is no line number in the frame, attaching context is nonsensical and will even break grouping.\n  // We already check for lineno before calling this, but since StackFrame lineno ism optional, we check it again.\n  if (frame.lineno === undefined || contents === undefined) {\n    DEBUG_BUILD && debug.error('Cannot resolve context for frame with no lineno or file contents');\n    return;\n  }\n\n  frame.pre_context = [];\n  for (let i = makeRangeStart(lineno, contextLines); i < lineno; i++) {\n    // We always expect the start context as line numbers cannot be negative. If we dont find a line, then\n    // something went wrong somewhere. Clear the context and return without adding any linecontext.\n    const line = contents[i];\n    if (line === undefined) {\n      clearLineContext(frame);\n      DEBUG_BUILD && debug.error(`Could not find line ${i} in file ${frame.filename}`);\n      return;\n    }\n\n    frame.pre_context.push(line);\n  }\n\n  // We should always have the context line. If we dont, something went wrong, so we clear the context and return\n  // without adding any linecontext.\n  if (contents[lineno] === undefined) {\n    clearLineContext(frame);\n    DEBUG_BUILD && debug.error(`Could not find line ${lineno} in file ${frame.filename}`);\n    return;\n  }\n\n  frame.context_line = contents[lineno];\n\n  const end = makeRangeEnd(lineno, contextLines);\n  frame.post_context = [];\n  for (let i = lineno + 1; i <= end; i++) {\n    // Since we dont track when the file ends, we cant clear the context if we dont find a line as it could\n    // just be that we reached the end of the file.\n    const line = contents[i];\n    if (line === undefined) {\n      break;\n    }\n    frame.post_context.push(line);\n  }\n}\n\n// Helper functions for generating line context ranges. They take a line number and the number of lines of context to\n// include before and after the line and generate an inclusive range of indices.\ntype ReadlineRange = [start: number, end: number];\n// Compute inclusive end context range\nfunction makeRangeStart(line: number, linecontext: number): number {\n  return Math.max(1, line - linecontext);\n}\n// Compute inclusive start context range\nfunction makeRangeEnd(line: number, linecontext: number): number {\n  return line + linecontext;\n}\n// Determine start and end indices for context range (inclusive);\nfunction makeContextRange(line: number, linecontext: number): [start: number, end: number] {\n  return [makeRangeStart(line, linecontext), makeRangeEnd(line, linecontext)];\n}\n\n/** Exported only for tests, as a type-safe variant. */\nexport const _contextLinesIntegration = ((options: ContextLinesOptions = {}) => {\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(event, _hint, client) {\n      const contextLines =\n        options.frameContextLines ?? client?.getDataCollectionOptions().frameContextLines ?? DEFAULT_LINES_OF_CONTEXT;\n      return addSourceContext(event, contextLines);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Capture the lines before and after the frame's context.\n */\nexport const contextLinesIntegration = defineIntegration(_contextLinesIntegration);\n", "let cachedDebuggerEnabled: boolean | undefined;\n\n/**\n * Was the debugger enabled when this function was first called?\n */\nexport async function isDebuggerEnabled(): Promise<boolean> {\n  if (cachedDebuggerEnabled === undefined) {\n    try {\n      // Node can be built without inspector support\n      const inspector = await import('node:inspector');\n      cachedDebuggerEnabled = !!inspector.url();\n    } catch {\n      cachedDebuggerEnabled = false;\n    }\n  }\n\n  return cachedDebuggerEnabled;\n}\n", "import type { Debugger } from 'node:inspector';\nimport type { CollectBehavior } from '@sentry/core';\nimport { _INTERNAL_filterKeyValueData } from '@sentry/core';\n\nexport type Variables = Record<string, unknown>;\n\n/**\n * Filters captured frame variables by name according to a `dataCollection.stackFrameVariables` behavior.\n *\n * `true` keeps all variables (built-in sensitive names are still scrubbed), `false` drops them all, and the\n * `{ allow: [...] }` / `{ deny: [...] }` forms filter by variable name.\n */\nexport function filterFrameVariables(vars: Variables, behavior: CollectBehavior): Variables {\n  return _INTERNAL_filterKeyValueData(vars, behavior);\n}\n\nexport type RateLimitIncrement = () => void;\n\n/**\n * The key used to store the local variables on the error object.\n */\nexport const LOCAL_VARIABLES_KEY = '__SENTRY_ERROR_LOCAL_VARIABLES__';\n\n/**\n * Creates a rate limiter that will call the disable callback when the rate limit is reached and the enable callback\n * when a timeout has occurred.\n * @param maxPerSecond Maximum number of calls per second\n * @param enable Callback to enable capture\n * @param disable Callback to disable capture\n * @returns A function to call to increment the rate limiter count\n */\nexport function createRateLimiter(\n  maxPerSecond: number,\n  enable: () => void,\n  disable: (seconds: number) => void,\n): RateLimitIncrement {\n  let count = 0;\n  let retrySeconds = 5;\n  let disabledTimeout = 0;\n\n  setInterval(() => {\n    if (disabledTimeout === 0) {\n      if (count > maxPerSecond) {\n        retrySeconds *= 2;\n        disable(retrySeconds);\n\n        // Cap at one day\n        if (retrySeconds > 86400) {\n          retrySeconds = 86400;\n        }\n        disabledTimeout = retrySeconds;\n      }\n    } else {\n      disabledTimeout -= 1;\n\n      if (disabledTimeout === 0) {\n        enable();\n      }\n    }\n\n    count = 0;\n  }, 1_000).unref();\n\n  return () => {\n    count += 1;\n  };\n}\n\n// Add types for the exception event data\nexport type PausedExceptionEvent = Debugger.PausedEventDataType & {\n  data: {\n    // This contains error.stack\n    description: string;\n    objectId?: string;\n  };\n};\n\n/** Could this be an anonymous function? */\nexport function isAnonymous(name: string | undefined): boolean {\n  return name !== undefined && (name.length === 0 || name === '?' || name === '<anonymous>');\n}\n\n/** Do the function names appear to match? */\nexport function functionNamesMatch(a: string | undefined, b: string | undefined): boolean {\n  return a === b || `Object.${a}` === b || a === `Object.${b}` || (isAnonymous(a) && isAnonymous(b));\n}\n\nexport interface FrameVariables {\n  function: string;\n  vars?: Variables;\n}\n\nexport interface LocalVariablesIntegrationOptions {\n  /**\n   * Capture local variables for both caught and uncaught exceptions\n   *\n   * - When false, only uncaught exceptions will have local variables\n   * - When true, both caught and uncaught exceptions will have local variables.\n   *\n   * Defaults to `true`.\n   *\n   * Capturing local variables for all exceptions can be expensive since the debugger pauses for every throw to collect\n   * local variables.\n   *\n   * To reduce the likelihood of this feature impacting app performance or throughput, this feature is rate-limited.\n   * Once the rate limit is reached, local variables will only be captured for uncaught exceptions until a timeout has\n   * been reached.\n   */\n  captureAllExceptions?: boolean;\n  /**\n   * Maximum number of exceptions to capture local variables for per second before rate limiting is triggered.\n   */\n  maxExceptionsPerSecond?: number;\n  /**\n   * When true, local variables will be captured for all frames, including those that are not in_app.\n   *\n   * Defaults to `false`.\n   */\n  includeOutOfAppFrames?: boolean;\n}\n\nexport interface LocalVariablesWorkerArgs extends LocalVariablesIntegrationOptions {\n  /**\n   * Whether to enable debug logging.\n   */\n  debug: boolean;\n  /**\n   * Base path used to calculate module name.\n   *\n   * Defaults to `dirname(process.argv[1])` and falls back to `process.cwd()`\n   */\n  basePath?: string;\n}\n", "import { Worker } from 'node:worker_threads';\nimport type { CollectBehavior, Event, EventHint, Exception, IntegrationFn } from '@sentry/core';\nimport { debug, defineIntegration, getClient } from '@sentry/core';\nimport type { NodeClient } from '../../sdk/client';\nimport { isDebuggerEnabled } from '../../utils/debug';\nimport type { FrameVariables, LocalVariablesIntegrationOptions, LocalVariablesWorkerArgs } from './common';\nimport { filterFrameVariables, functionNamesMatch, LOCAL_VARIABLES_KEY } from './common';\n\n// This string is a placeholder that gets overwritten with the worker code.\nexport const base64WorkerScript = '###LocalVariablesWorkerScript###';\n\nfunction log(...args: unknown[]): void {\n  debug.log('[LocalVariables]', ...args);\n}\n\n/**\n * Adds local variables to exception frames\n */\nexport const localVariablesAsyncIntegration = defineIntegration(((\n  integrationOptions: LocalVariablesIntegrationOptions = {},\n) => {\n  function addLocalVariablesToException(\n    exception: Exception,\n    localVariables: FrameVariables[],\n    behavior: CollectBehavior,\n  ): void {\n    // When disabled, nothing is collected so we don't attach empty `vars` to frames\n    if (behavior === false) {\n      return;\n    }\n\n    // Filter out frames where the function name is `new Promise` since these are in the error.stack frames\n    // but do not appear in the debugger call frames\n    const frames = (exception.stacktrace?.frames || []).filter(frame => frame.function !== 'new Promise');\n\n    for (let i = 0; i < frames.length; i++) {\n      // Sentry frames are in reverse order\n      const frameIndex = frames.length - i - 1;\n\n      const frameLocalVariables = localVariables[i];\n      const frame = frames[frameIndex];\n\n      if (!frame || !frameLocalVariables) {\n        // Drop out if we run out of frames to match up\n        break;\n      }\n\n      if (\n        // We need to have vars to add\n        frameLocalVariables.vars === undefined ||\n        // Only skip out-of-app frames if includeOutOfAppFrames is not true\n        (frame.in_app === false && integrationOptions.includeOutOfAppFrames !== true) ||\n        // The function names need to match\n        !functionNamesMatch(frame.function, frameLocalVariables.function)\n      ) {\n        continue;\n      }\n\n      frame.vars = filterFrameVariables(frameLocalVariables.vars, behavior);\n    }\n  }\n\n  function addLocalVariablesToEvent(event: Event, hint: EventHint): Event {\n    if (\n      hint.originalException &&\n      typeof hint.originalException === 'object' &&\n      LOCAL_VARIABLES_KEY in hint.originalException &&\n      Array.isArray(hint.originalException[LOCAL_VARIABLES_KEY])\n    ) {\n      const behavior = getClient()?.getDataCollectionOptions().stackFrameVariables ?? true;\n\n      for (const exception of event.exception?.values || []) {\n        addLocalVariablesToException(exception, hint.originalException[LOCAL_VARIABLES_KEY], behavior);\n      }\n\n      hint.originalException[LOCAL_VARIABLES_KEY] = undefined;\n    }\n\n    return event;\n  }\n\n  async function startInspector(): Promise<void> {\n    // We load inspector dynamically because on some platforms Node is built without inspector support\n    const inspector = await import('node:inspector');\n    if (!inspector.url()) {\n      inspector.open(0);\n    }\n  }\n\n  function startWorker(options: LocalVariablesWorkerArgs): void {\n    const worker = new Worker(new URL(`data:application/javascript;base64,${base64WorkerScript}`), {\n      workerData: options,\n      // We don't want any Node args to be passed to the worker\n      execArgv: [],\n      env: { ...process.env, NODE_OPTIONS: undefined },\n    });\n\n    process.on('exit', () => {\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      worker.terminate();\n    });\n\n    worker.once('error', (err: Error) => {\n      log('Worker error', err);\n    });\n\n    worker.once('exit', (code: number) => {\n      log('Worker exit', code);\n    });\n\n    // Ensure this thread can't block app exit\n    worker.unref();\n  }\n\n  return {\n    name: 'LocalVariablesAsync' as const,\n    async setup(client: NodeClient) {\n      const clientOptions = client.getOptions();\n\n      if (!clientOptions.includeLocalVariables) {\n        return;\n      }\n\n      if (await isDebuggerEnabled()) {\n        debug.warn('Local variables capture has been disabled because the debugger was already enabled');\n        return;\n      }\n\n      const options: LocalVariablesWorkerArgs = {\n        ...integrationOptions,\n        debug: debug.isEnabled(),\n      };\n\n      startInspector().then(\n        () => {\n          try {\n            startWorker(options);\n          } catch (e) {\n            debug.error('Failed to start worker', e);\n          }\n        },\n        e => {\n          debug.error('Failed to start inspector', e);\n        },\n      );\n    },\n    processEvent(event: Event, hint: EventHint): Event {\n      return addLocalVariablesToEvent(event, hint);\n    },\n  };\n}) satisfies IntegrationFn);\n", "import type { Debugger, InspectorNotification, Runtime, Session } from 'node:inspector';\nimport type { CollectBehavior, Event, Exception, IntegrationFn, StackFrame, StackParser } from '@sentry/core';\nimport { debug, defineIntegration, getClient, LRUMap } from '@sentry/core';\nimport { NODE_MAJOR } from '../../nodeVersion';\nimport type { NodeClient } from '../../sdk/client';\nimport { isDebuggerEnabled } from '../../utils/debug';\nimport type {\n  FrameVariables,\n  LocalVariablesIntegrationOptions,\n  PausedExceptionEvent,\n  RateLimitIncrement,\n  Variables,\n} from './common';\nimport { createRateLimiter, filterFrameVariables, functionNamesMatch } from './common';\n\n/** Creates a unique hash from stack frames */\nexport function hashFrames(frames: StackFrame[] | undefined): string | undefined {\n  if (frames === undefined) {\n    return;\n  }\n\n  // Only hash the 10 most recent frames (ie. the last 10)\n  return frames.slice(-10).reduce((acc, frame) => `${acc},${frame.function},${frame.lineno},${frame.colno}`, '');\n}\n\n/**\n * We use the stack parser to create a unique hash from the exception stack trace\n * This is used to lookup vars when the exception passes through the event processor\n */\nexport function hashFromStack(stackParser: StackParser, stack: string | undefined): string | undefined {\n  if (stack === undefined) {\n    return undefined;\n  }\n\n  return hashFrames(stackParser(stack, 1));\n}\n\ntype OnPauseEvent = InspectorNotification<Debugger.PausedEventDataType>;\nexport interface DebugSession {\n  /** Configures and connects to the debug session */\n  configureAndConnect(onPause: (message: OnPauseEvent, complete: () => void) => void, captureAll: boolean): void;\n  /** Updates which kind of exceptions to capture */\n  setPauseOnExceptions(captureAll: boolean): void;\n  /** Gets local variables for an objectId */\n  getLocalVariables(objectId: string, callback: (vars: Variables) => void): void;\n}\n\ntype Next<T> = (result: T) => void;\ntype Add<T> = (fn: Next<T>) => void;\ntype CallbackWrapper<T> = { add: Add<T>; next: Next<T> };\n\n/** Creates a container for callbacks to be called sequentially */\nexport function createCallbackList<T>(complete: Next<T>): CallbackWrapper<T> {\n  // A collection of callbacks to be executed last to first\n  let callbacks: Next<T>[] = [];\n\n  let completedCalled = false;\n  function checkedComplete(result: T): void {\n    callbacks = [];\n    if (completedCalled) {\n      return;\n    }\n    completedCalled = true;\n    complete(result);\n  }\n\n  // complete should be called last\n  callbacks.push(checkedComplete);\n\n  function add(fn: Next<T>): void {\n    callbacks.push(fn);\n  }\n\n  function next(result: T): void {\n    const popped = callbacks.pop() || checkedComplete;\n\n    try {\n      popped(result);\n    } catch {\n      // If there is an error, we still want to call the complete callback\n      checkedComplete(result);\n    }\n  }\n\n  return { add, next };\n}\n\n/**\n * Promise API is available as `Experimental` and in Node 19 only.\n *\n * Callback-based API is `Stable` since v14 and `Experimental` since v8.\n * Because of that, we are creating our own `AsyncSession` class.\n *\n * https://nodejs.org/docs/latest-v19.x/api/inspector.html#promises-api\n * https://nodejs.org/docs/latest-v14.x/api/inspector.html\n */\nclass AsyncSession implements DebugSession {\n  /** Throws if inspector API is not available */\n  private constructor(private readonly _session: Session) {\n    //\n  }\n\n  public static async create(orDefault?: DebugSession | undefined): Promise<DebugSession> {\n    if (orDefault) {\n      return orDefault;\n    }\n\n    const inspector = await import('node:inspector');\n    return new AsyncSession(new inspector.Session());\n  }\n\n  /** @inheritdoc */\n  public configureAndConnect(onPause: (event: OnPauseEvent, complete: () => void) => void, captureAll: boolean): void {\n    this._session.connect();\n\n    this._session.on('Debugger.paused', event => {\n      onPause(event, () => {\n        // After the pause work is complete, resume execution or the exception context memory is leaked\n        this._session.post('Debugger.resume');\n      });\n    });\n\n    this._session.post('Debugger.enable');\n    this._session.post('Debugger.setPauseOnExceptions', { state: captureAll ? 'all' : 'uncaught' });\n  }\n\n  public setPauseOnExceptions(captureAll: boolean): void {\n    this._session.post('Debugger.setPauseOnExceptions', { state: captureAll ? 'all' : 'uncaught' });\n  }\n\n  /** @inheritdoc */\n  public getLocalVariables(objectId: string, complete: (vars: Variables) => void): void {\n    this._getProperties(objectId, props => {\n      const { add, next } = createCallbackList<Variables>(complete);\n\n      for (const prop of props) {\n        if (prop.value?.objectId && prop.value.className === 'Array') {\n          const id = prop.value.objectId;\n          add(vars => this._unrollArray(id, prop.name, vars, next));\n        } else if (prop.value?.objectId && prop.value.className === 'Object') {\n          const id = prop.value.objectId;\n          add(vars => this._unrollObject(id, prop.name, vars, next));\n        } else if (prop.value) {\n          add(vars => this._unrollOther(prop, vars, next));\n        }\n      }\n\n      next({});\n    });\n  }\n\n  /**\n   * Gets all the PropertyDescriptors of an object\n   */\n  private _getProperties(objectId: string, next: (result: Runtime.PropertyDescriptor[]) => void): void {\n    this._session.post(\n      'Runtime.getProperties',\n      {\n        objectId,\n        ownProperties: true,\n      },\n      (err, params) => {\n        if (err) {\n          next([]);\n        } else {\n          next(params.result);\n        }\n      },\n    );\n  }\n\n  /**\n   * Unrolls an array property\n   */\n  private _unrollArray(objectId: string, name: string, vars: Variables, next: (vars: Variables) => void): void {\n    this._getProperties(objectId, props => {\n      vars[name] = props\n        .filter(v => v.name !== 'length' && !isNaN(parseInt(v.name, 10)))\n        .sort((a, b) => parseInt(a.name, 10) - parseInt(b.name, 10))\n        .map(v => v.value?.value);\n\n      next(vars);\n    });\n  }\n\n  /**\n   * Unrolls an object property\n   */\n  private _unrollObject(objectId: string, name: string, vars: Variables, next: (obj: Variables) => void): void {\n    this._getProperties(objectId, props => {\n      vars[name] = props\n        .map<[string, unknown]>(v => [v.name, v.value?.value])\n        .reduce((obj, [key, val]) => {\n          obj[key] = val;\n          return obj;\n        }, {} as Variables);\n\n      next(vars);\n    });\n  }\n\n  /**\n   * Unrolls other properties\n   */\n  private _unrollOther(prop: Runtime.PropertyDescriptor, vars: Variables, next: (vars: Variables) => void): void {\n    if (prop.value) {\n      if ('value' in prop.value) {\n        if (prop.value.value === undefined || prop.value.value === null) {\n          vars[prop.name] = `<${prop.value.value}>`;\n        } else {\n          vars[prop.name] = prop.value.value;\n        }\n      } else if ('description' in prop.value && prop.value.type !== 'function') {\n        vars[prop.name] = `<${prop.value.description}>`;\n      } else if (prop.value.type === 'undefined') {\n        vars[prop.name] = '<undefined>';\n      }\n    }\n\n    next(vars);\n  }\n}\n\nconst INTEGRATION_NAME = 'LocalVariables' as const;\n\n/**\n * Adds local variables to exception frames\n */\nconst _localVariablesSyncIntegration = ((\n  options: LocalVariablesIntegrationOptions = {},\n  sessionOverride?: DebugSession,\n) => {\n  const cachedFrames: LRUMap<string, FrameVariables[]> = new LRUMap(20);\n  let rateLimiter: RateLimitIncrement | undefined;\n  let shouldProcessEvent = false;\n\n  function addLocalVariablesToException(exception: Exception, behavior: CollectBehavior): void {\n    const hash = hashFrames(exception.stacktrace?.frames);\n\n    if (hash === undefined) {\n      return;\n    }\n\n    // Check if we have local variables for an exception that matches the hash\n    // remove is identical to get but also removes the entry from the cache\n    const cachedFrame = cachedFrames.remove(hash);\n\n    // When disabled, nothing is collected so we don't attach empty `vars` to frames\n    if (cachedFrame === undefined || behavior === false) {\n      return;\n    }\n\n    // Filter out frames where the function name is `new Promise` since these are in the error.stack frames\n    // but do not appear in the debugger call frames\n    const frames = (exception.stacktrace?.frames || []).filter(frame => frame.function !== 'new Promise');\n\n    for (let i = 0; i < frames.length; i++) {\n      // Sentry frames are in reverse order\n      const frameIndex = frames.length - i - 1;\n\n      const cachedFrameVariable = cachedFrame[i];\n      const frameVariable = frames[frameIndex];\n\n      // Drop out if we run out of frames to match up\n      if (!frameVariable || !cachedFrameVariable) {\n        break;\n      }\n\n      if (\n        // We need to have vars to add\n        cachedFrameVariable.vars === undefined ||\n        // Only skip out-of-app frames if includeOutOfAppFrames is not true\n        (frameVariable.in_app === false && options.includeOutOfAppFrames !== true) ||\n        // The function names need to match\n        !functionNamesMatch(frameVariable.function, cachedFrameVariable.function)\n      ) {\n        continue;\n      }\n\n      frameVariable.vars = filterFrameVariables(cachedFrameVariable.vars, behavior);\n    }\n  }\n\n  function addLocalVariablesToEvent(event: Event): Event {\n    for (const exception of event.exception?.values || []) {\n      addLocalVariablesToException(exception, getClient()?.getDataCollectionOptions().stackFrameVariables ?? true);\n    }\n\n    return event;\n  }\n\n  let setupPromise: Promise<void> | undefined;\n\n  async function setup(): Promise<void> {\n    const client = getClient<NodeClient>();\n    const clientOptions = client?.getOptions();\n\n    if (!clientOptions?.includeLocalVariables) {\n      return;\n    }\n\n    // Only setup this integration if the Node version is >= v18\n    // https://github.com/getsentry/sentry-javascript/issues/7697\n    const unsupportedNodeVersion = NODE_MAJOR < 18;\n\n    if (unsupportedNodeVersion) {\n      debug.log('The `LocalVariables` integration is only supported on Node >= v18.');\n      return;\n    }\n\n    if (await isDebuggerEnabled()) {\n      debug.warn('Local variables capture has been disabled because the debugger was already enabled');\n      return;\n    }\n\n    try {\n      const session = await AsyncSession.create(sessionOverride);\n\n      const handlePaused = (\n        stackParser: StackParser,\n        { params: { reason, data, callFrames } }: InspectorNotification<PausedExceptionEvent>,\n        complete: () => void,\n      ): void => {\n        if (reason !== 'exception' && reason !== 'promiseRejection') {\n          complete();\n          return;\n        }\n\n        rateLimiter?.();\n\n        // data.description contains the original error.stack\n        const exceptionHash = hashFromStack(stackParser, data.description);\n\n        if (exceptionHash == undefined) {\n          complete();\n          return;\n        }\n\n        const { add, next } = createCallbackList<FrameVariables[]>(frames => {\n          cachedFrames.set(exceptionHash, frames);\n          complete();\n        });\n\n        // Because we're queuing up and making all these calls synchronously, we can potentially overflow the stack\n        // For this reason we only attempt to get local variables for the first 5 frames\n        for (let i = 0; i < Math.min(callFrames.length, 5); i++) {\n          // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n          const { scopeChain, functionName, this: obj } = callFrames[i]!;\n\n          const localScope = scopeChain.find(scope => scope.type === 'local');\n\n          // obj.className is undefined in ESM modules\n          const fn = obj.className === 'global' || !obj.className ? functionName : `${obj.className}.${functionName}`;\n\n          if (localScope?.object.objectId === undefined) {\n            add(frames => {\n              frames[i] = { function: fn };\n              next(frames);\n            });\n          } else {\n            const id = localScope.object.objectId;\n            add(frames =>\n              session.getLocalVariables(id, vars => {\n                frames[i] = { function: fn, vars };\n                next(frames);\n              }),\n            );\n          }\n        }\n\n        next([]);\n      };\n\n      const captureAll = options.captureAllExceptions !== false;\n\n      session.configureAndConnect(\n        (ev, complete) =>\n          handlePaused(clientOptions.stackParser, ev as InspectorNotification<PausedExceptionEvent>, complete),\n        captureAll,\n      );\n\n      if (captureAll) {\n        const max = options.maxExceptionsPerSecond || 50;\n\n        rateLimiter = createRateLimiter(\n          max,\n          () => {\n            debug.log('Local variables rate-limit lifted.');\n            session.setPauseOnExceptions(true);\n          },\n          seconds => {\n            debug.log(\n              `Local variables rate-limit exceeded. Disabling capturing of caught exceptions for ${seconds} seconds.`,\n            );\n            session.setPauseOnExceptions(false);\n          },\n        );\n      }\n\n      shouldProcessEvent = true;\n    } catch (error) {\n      debug.log('The `LocalVariables` integration failed to start.', error);\n    }\n  }\n\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      setupPromise = setup();\n    },\n    async processEvent(event: Event): Promise<Event> {\n      await setupPromise;\n\n      if (shouldProcessEvent) {\n        return addLocalVariablesToEvent(event);\n      }\n\n      return event;\n    },\n    // These are entirely for testing\n    _getCachedFramesCount(): number {\n      return cachedFrames.size;\n    },\n    _getFirstCachedFrame(): FrameVariables[] | undefined {\n      return cachedFrames.values()[0];\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds local variables to exception frames.\n */\nexport const localVariablesSyncIntegration = defineIntegration(_localVariablesSyncIntegration);\n", "import type { Integration } from '@sentry/core';\nimport { NODE_VERSION } from '../../nodeVersion';\nimport type { LocalVariablesIntegrationOptions } from './common';\nimport { localVariablesAsyncIntegration } from './local-variables-async';\nimport { localVariablesSyncIntegration } from './local-variables-sync';\n\nexport const localVariablesIntegration = (options: LocalVariablesIntegrationOptions = {}): Integration => {\n  return NODE_VERSION.major < 19 ? localVariablesSyncIntegration(options) : localVariablesAsyncIntegration(options);\n};\n", "import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { GLOBAL_OBJ, type IntegrationFn } from '@sentry/core';\n\ntype ModuleInfo = Record<string, string>;\n\nlet moduleCache: ModuleInfo | undefined;\n\nconst INTEGRATION_NAME = 'Modules' as const;\n\ndeclare const __SENTRY_SERVER_MODULES__: Record<string, string>;\n\n/**\n * Reads the modules injected at build time into `__SENTRY_SERVER_MODULES__` (e.g. by the Next.js SDK).\n *\n * Must be read lazily (per call), not captured at module-eval time: webpack replaces the token via\n * `DefinePlugin` (available immediately), but Turbopack assigns `globalThis.__SENTRY_SERVER_MODULES__`\n * at runtime, *after* this module's imports are hoisted and evaluated. A `const` capture would be\n * empty under Turbopack. See getsentry/sentry-javascript#19147.\n */\nfunction getServerModules(): Record<string, string> {\n  // webpack: the token is replaced with a literal at build time.\n  if (typeof __SENTRY_SERVER_MODULES__ !== 'undefined') {\n    return __SENTRY_SERVER_MODULES__;\n  }\n  // Turbopack: the value is assigned onto the global object at runtime.\n  return (\n    (GLOBAL_OBJ as typeof GLOBAL_OBJ & { __SENTRY_SERVER_MODULES__?: Record<string, string> })\n      .__SENTRY_SERVER_MODULES__ ?? {}\n  );\n}\n\nconst _modulesIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(event) {\n      event.modules = {\n        ...event.modules,\n        ..._getModules(),\n      };\n\n      return event;\n    },\n    getModules: _getModules,\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Add node modules / packages to the event.\n * For this, multiple sources are used:\n * - They can be injected at build time into the __SENTRY_SERVER_MODULES__ variable (e.g. in Next.js)\n * - They are extracted from the dependencies & devDependencies in the package.json file\n * - They are extracted from the require.cache (CJS only)\n */\nexport const modulesIntegration = _modulesIntegration;\n\nfunction getRequireCachePaths(): string[] {\n  try {\n    return require.cache ? Object.keys(require.cache as Record<string, unknown>) : [];\n  } catch {\n    return [];\n  }\n}\n\n/** Extract information about package.json modules */\nfunction collectModules(): ModuleInfo {\n  return {\n    ...getServerModules(),\n    ...getModulesFromPackageJson(),\n    /*! rollup-include-cjs-only */\n    ...collectRequireModules(),\n    /*! rollup-include-cjs-only-end */\n  };\n}\n\n/** Extract information about package.json modules from require.cache */\nfunction collectRequireModules(): ModuleInfo {\n  const mainPaths = require.main?.paths || [];\n  const paths = getRequireCachePaths();\n\n  // We start with the modules from package.json (if possible)\n  // These may be overwritten by more specific versions from the require.cache\n  const infos: ModuleInfo = {};\n  const seen = new Set<string>();\n\n  paths.forEach(path => {\n    let dir = path;\n\n    /** Traverse directories upward in the search of package.json file */\n    const updir = (): void | (() => void) => {\n      const orig = dir;\n      dir = dirname(orig);\n\n      if (!dir || orig === dir || seen.has(orig)) {\n        return undefined;\n      }\n      if (mainPaths.indexOf(dir) < 0) {\n        return updir();\n      }\n\n      const pkgfile = join(orig, 'package.json');\n      seen.add(orig);\n\n      if (!existsSync(pkgfile)) {\n        return updir();\n      }\n\n      try {\n        const info = JSON.parse(readFileSync(pkgfile, 'utf8')) as {\n          name: string;\n          version: string;\n        };\n        infos[info.name] = info.version;\n      } catch {\n        // no-empty\n      }\n    };\n\n    updir();\n  });\n\n  return infos;\n}\n\n/** Fetches the list of modules and the versions loaded by the entry file for your node.js app. */\nfunction _getModules(): ModuleInfo {\n  if (!moduleCache) {\n    moduleCache = collectModules();\n  }\n  return moduleCache;\n}\n\ninterface PackageJson {\n  dependencies?: Record<string, string>;\n  devDependencies?: Record<string, string>;\n}\n\nfunction getPackageJson(): PackageJson {\n  try {\n    const filePath = join(process.cwd(), 'package.json');\n    const packageJson = JSON.parse(readFileSync(filePath, 'utf8')) as PackageJson;\n\n    return packageJson;\n  } catch {\n    return {};\n  }\n}\n\nfunction getModulesFromPackageJson(): ModuleInfo {\n  const packageJson = getPackageJson();\n\n  return {\n    ...packageJson.dependencies,\n    ...packageJson.devDependencies,\n  };\n}\n", "import { consoleSandbox, debug, getClient } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { NodeClient } from '../sdk/client';\n\nconst DEFAULT_SHUTDOWN_TIMEOUT = 2000;\n\nlet isShuttingDown = false;\n\n/**\n * @hidden\n */\nexport function logAndExitProcess(error: unknown): void {\n  // A broken stderr makes the console write below raise EPIPE, re-entering here. Return\n  // rather than exit, so the in-flight `client.close()` still flushes the fatal event.\n  if (isShuttingDown) {\n    return;\n  }\n  isShuttingDown = true;\n\n  consoleSandbox(() => {\n    // eslint-disable-next-line no-console\n    console.error(error);\n  });\n\n  const client = getClient<NodeClient>();\n\n  if (client === undefined) {\n    DEBUG_BUILD && debug.warn('No NodeClient was defined, we are exiting the process now.');\n    global.process.exit(1);\n    return;\n  }\n\n  const options = client.getOptions();\n  const timeout =\n    options?.shutdownTimeout && options.shutdownTimeout > 0 ? options.shutdownTimeout : DEFAULT_SHUTDOWN_TIMEOUT;\n  client.close(timeout).then(\n    (result: boolean) => {\n      if (!result) {\n        DEBUG_BUILD && debug.warn('We reached the timeout for emptying the request buffer, still exiting now!');\n      }\n      global.process.exit(1);\n    },\n    error => {\n      DEBUG_BUILD && debug.error(error);\n      global.process.exit(1);\n    },\n  );\n}\n", "import { captureException, debug, defineIntegration, getClient } from '@sentry/core';\nimport { isMainThread } from 'worker_threads';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { NodeClient } from '../sdk/client';\nimport { logAndExitProcess } from '../utils/errorhandling';\n\ntype OnFatalErrorHandler = (firstError: Error, secondError?: Error) => void;\n\ninterface OnUncaughtExceptionOptions {\n  /**\n   * Controls if the SDK should register a handler to exit the process on uncaught errors:\n   * - `true`: The SDK will exit the process on all uncaught errors.\n   * - `false`: The SDK will only exit the process when there are no other `uncaughtException` handlers attached.\n   *\n   * Default: `false`\n   */\n  exitEvenIfOtherHandlersAreRegistered: boolean;\n\n  /**\n   * This is called when an uncaught error would cause the process to exit.\n   *\n   * @param firstError Uncaught error causing the process to exit\n   * @param secondError Will be set if the handler was called multiple times. This can happen either because\n   * `onFatalError` itself threw, or because an independent error happened somewhere else while `onFatalError`\n   * was running.\n   */\n  onFatalError?(this: void, firstError: Error, secondError?: Error): void;\n}\n\nconst INTEGRATION_NAME = 'OnUncaughtException' as const;\n\n/**\n * Add a global exception handler.\n */\nexport const onUncaughtExceptionIntegration = defineIntegration((options: Partial<OnUncaughtExceptionOptions> = {}) => {\n  const optionsWithDefaults = {\n    exitEvenIfOtherHandlersAreRegistered: false,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    setup(client: NodeClient) {\n      // errors in worker threads are already handled by the childProcessIntegration\n      // also we don't want to exit the Node process on worker thread errors\n      if (!isMainThread) {\n        return;\n      }\n\n      global.process.on('uncaughtException', makeErrorHandler(client, optionsWithDefaults));\n    },\n  };\n});\n\ntype ErrorHandler = { _errorHandler: boolean } & ((error: Error) => void);\n\n/** Exported only for tests */\nexport function makeErrorHandler(client: NodeClient, options: OnUncaughtExceptionOptions): ErrorHandler {\n  const timeout = 2000;\n  let caughtFirstError: boolean = false;\n  let caughtSecondError: boolean = false;\n  let calledFatalError: boolean = false;\n  let firstError: Error;\n\n  const clientOptions = client.getOptions();\n\n  return Object.assign(\n    (error: Error): void => {\n      let onFatalError: OnFatalErrorHandler = logAndExitProcess;\n\n      if (options.onFatalError) {\n        onFatalError = options.onFatalError;\n      } else if (clientOptions.onFatalError) {\n        onFatalError = clientOptions.onFatalError as OnFatalErrorHandler;\n      }\n\n      // Attaching a listener to `uncaughtException` will prevent the node process from exiting. We generally do not\n      // want to alter this behaviour so we check for other listeners that users may have attached themselves and adjust\n      // exit behaviour of the SDK accordingly:\n      // - If other listeners are attached, do not exit.\n      // - If the only listener attached is ours, exit.\n      const userProvidedListenersCount = global.process.listeners('uncaughtException').filter(listener => {\n        // There are 3 listeners we ignore:\n        return (\n          // as soon as we're using domains this listener is attached by node itself\n          listener.name !== 'domainUncaughtExceptionClear' &&\n          // the handler we register in this integration\n          (listener as ErrorHandler)._errorHandler !== true\n        );\n      }).length;\n\n      const processWouldExit = userProvidedListenersCount === 0;\n      const shouldApplyFatalHandlingLogic = options.exitEvenIfOtherHandlersAreRegistered || processWouldExit;\n\n      if (!caughtFirstError) {\n        // this is the first uncaught error and the ultimate reason for shutting down\n        // we want to do absolutely everything possible to ensure it gets captured\n        // also we want to make sure we don't go recursion crazy if more errors happen after this one\n        firstError = error;\n        caughtFirstError = true;\n\n        if (getClient() === client) {\n          captureException(error, {\n            originalException: error,\n            captureContext: {\n              level: 'fatal',\n            },\n            mechanism: {\n              handled: false,\n              type: 'auto.node.onuncaughtexception',\n            },\n          });\n        }\n\n        if (!calledFatalError && shouldApplyFatalHandlingLogic) {\n          calledFatalError = true;\n          onFatalError(error);\n        }\n      } else {\n        if (shouldApplyFatalHandlingLogic) {\n          if (calledFatalError) {\n            // we hit an error *after* calling onFatalError - pretty boned at this point, just shut it down\n            DEBUG_BUILD &&\n              debug.warn(\n                'uncaught exception after calling fatal error shutdown callback - this is bad! forcing shutdown',\n              );\n            logAndExitProcess(error);\n          } else if (!caughtSecondError) {\n            // two cases for how we can hit this branch:\n            //   - capturing of first error blew up and we just caught the exception from that\n            //     - quit trying to capture, proceed with shutdown\n            //   - a second independent error happened while waiting for first error to capture\n            //     - want to avoid causing premature shutdown before first error capture finishes\n            // it's hard to immediately tell case 1 from case 2 without doing some fancy/questionable domain stuff\n            // so let's instead just delay a bit before we proceed with our action here\n            // in case 1, we just wait a bit unnecessarily but ultimately do the same thing\n            // in case 2, the delay hopefully made us wait long enough for the capture to finish\n            // two potential nonideal outcomes:\n            //   nonideal case 1: capturing fails fast, we sit around for a few seconds unnecessarily before proceeding correctly by calling onFatalError\n            //   nonideal case 2: case 2 happens, 1st error is captured but slowly, timeout completes before capture and we treat second error as the sendErr of (nonexistent) failure from trying to capture first error\n            // note that after hitting this branch, we might catch more errors where (caughtSecondError && !calledFatalError)\n            //   we ignore them - they don't matter to us, we're just waiting for the second error timeout to finish\n            caughtSecondError = true;\n            setTimeout(() => {\n              if (!calledFatalError) {\n                // it was probably case 1, let's treat err as the sendErr and call onFatalError\n                calledFatalError = true;\n                onFatalError(firstError, error);\n              } else {\n                // it was probably case 2, our first error finished capturing while we waited, cool, do nothing\n              }\n            }, timeout); // capturing could take at least sendTimeout to fail, plus an arbitrary second for how long it takes to collect surrounding source etc\n          }\n        }\n      }\n    },\n    { _errorHandler: true },\n  );\n}\n", "import type { Client, IntegrationFn, SeverityLevel, Span } from '@sentry/core';\nimport {\n  captureException,\n  consoleSandbox,\n  defineIntegration,\n  getClient,\n  isMatchingPattern,\n  isObjectLike,\n  withActiveSpan,\n} from '@sentry/core';\nimport { logAndExitProcess } from '../utils/errorhandling';\n\ntype UnhandledRejectionMode = 'none' | 'warn' | 'strict';\n\ntype IgnoreMatcher = { name?: string | RegExp; message?: string | RegExp };\n\ninterface OnUnhandledRejectionOptions {\n  /**\n   * Option deciding what to do after capturing unhandledRejection,\n   * that mimicks behavior of node's --unhandled-rejection flag.\n   */\n  mode: UnhandledRejectionMode;\n  /** Rejection Errors to ignore (don't capture or warn). */\n  ignore?: IgnoreMatcher[];\n}\n\nconst INTEGRATION_NAME = 'OnUnhandledRejection';\n\nconst DEFAULT_IGNORES: IgnoreMatcher[] = [\n  {\n    name: 'AI_NoOutputGeneratedError', // When stream aborts in Vercel AI SDK V5, Vercel flush() fails with an error\n  },\n  {\n    name: 'AbortError', // When stream aborts in Vercel AI SDK V6\n  },\n];\n\nconst _onUnhandledRejectionIntegration = ((options: Partial<OnUnhandledRejectionOptions> = {}) => {\n  const opts: OnUnhandledRejectionOptions = {\n    mode: options.mode ?? 'warn',\n    ignore: [...DEFAULT_IGNORES, ...(options.ignore ?? [])],\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      global.process.on('unhandledRejection', makeUnhandledPromiseHandler(client, opts));\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const onUnhandledRejectionIntegration = defineIntegration(_onUnhandledRejectionIntegration);\n\n/** Extract error info safely */\nfunction extractErrorInfo(reason: unknown): { name: string; message: string } {\n  // Check if reason is an object (including Error instances, not just plain objects)\n  if (!isObjectLike(reason)) {\n    return { name: '', message: String(reason ?? '') };\n  }\n\n  const errorLike = reason as Record<string, unknown>;\n  const name = typeof errorLike.name === 'string' ? errorLike.name : '';\n  const message = typeof errorLike.message === 'string' ? errorLike.message : String(reason);\n\n  return { name, message };\n}\n\n/** Check if a matcher matches the reason */\nfunction isMatchingReason(matcher: IgnoreMatcher, errorInfo: ReturnType<typeof extractErrorInfo>): boolean {\n  // name/message matcher\n  const nameMatches = matcher.name === undefined || isMatchingPattern(errorInfo.name, matcher.name, true);\n\n  const messageMatches = matcher.message === undefined || isMatchingPattern(errorInfo.message, matcher.message);\n\n  return nameMatches && messageMatches;\n}\n\n/** Match helper */\nfunction matchesIgnore(list: IgnoreMatcher[], reason: unknown): boolean {\n  const errorInfo = extractErrorInfo(reason);\n  return list.some(matcher => isMatchingReason(matcher, errorInfo));\n}\n\n/** Core handler */\nexport function makeUnhandledPromiseHandler(\n  client: Client,\n  options: OnUnhandledRejectionOptions,\n): (reason: unknown, promise: unknown) => void {\n  return function sendUnhandledPromise(reason: unknown, _promise: unknown): void {\n    // Only handle for the active client\n    if (getClient() !== client) {\n      return;\n    }\n\n    // Skip if configured to ignore\n    if (matchesIgnore(options.ignore ?? [], reason)) {\n      return;\n    }\n\n    const level: SeverityLevel = options.mode === 'strict' ? 'fatal' : 'error';\n\n    // this can be set in places where we cannot reliably get access to the active span/error\n    // when the error bubbles up to this handler, we can use this to set the active span\n    const activeSpanForError = isObjectLike(reason)\n      ? (reason as { _sentry_active_span?: Span })._sentry_active_span\n      : undefined;\n\n    const activeSpanWrapper = activeSpanForError\n      ? (fn: () => void) => withActiveSpan(activeSpanForError, fn)\n      : (fn: () => void) => fn();\n\n    activeSpanWrapper(() => {\n      captureException(reason, {\n        originalException: reason,\n        captureContext: {\n          extra: { unhandledPromiseRejection: true },\n          level,\n        },\n        mechanism: {\n          handled: false,\n          type: 'auto.node.onunhandledrejection',\n        },\n      });\n    });\n\n    handleRejection(reason, options.mode);\n  };\n}\n\n/**\n * Handler for `mode` option\n */\nfunction handleRejection(reason: unknown, mode: UnhandledRejectionMode): void {\n  // https://github.com/nodejs/node/blob/7cf6f9e964aa00772965391c23acda6d71972a9a/lib/internal/process/promises.js#L234-L240\n  const rejectionWarning =\n    'This error originated either by ' +\n    'throwing inside of an async function without a catch block, ' +\n    'or by rejecting a promise which was not handled with .catch().' +\n    ' The promise rejected with the reason:';\n\n  /* eslint-disable no-console */\n  if (mode === 'warn') {\n    consoleSandbox(() => {\n      console.warn(rejectionWarning);\n      console.error(isObjectLike(reason) && 'stack' in reason ? reason.stack : reason);\n    });\n  } else if (mode === 'strict') {\n    consoleSandbox(() => {\n      console.warn(rejectionWarning);\n    });\n    logAndExitProcess(reason);\n  }\n  /* eslint-enable no-console */\n}\n", "import { defineIntegration, endSession, getIsolationScope, startSession } from '@sentry/core';\n\nconst INTEGRATION_NAME = 'ProcessSession' as const;\n\n/**\n * Records a Session for the current process to track release health.\n */\nexport const processSessionIntegration = defineIntegration(() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      startSession();\n\n      // Emitted in the case of healthy sessions, error of `mechanism.handled: true` and unhandledrejections because\n      // The 'beforeExit' event is not emitted for conditions causing explicit termination,\n      // such as calling process.exit() or uncaught exceptions.\n      // Ref: https://nodejs.org/api/process.html#process_event_beforeexit\n      process.on('beforeExit', () => {\n        const session = getIsolationScope().getSession();\n\n        // Only call endSession if a Session exists on the Scope and has not already reached a\n        // Terminal Status, because \"When a session is moved away from ok it must not be updated\n        // anymore.\" `ok` is the only non-terminal status.\n        // Ref: https://develop.sentry.dev/sdk/sessions/\n        if (session?.status === 'ok') {\n          endSession();\n        }\n      });\n    },\n  };\n});\n", "import * as http from 'node:http';\nimport type { Client, Envelope, IntegrationFn } from '@sentry/core';\nimport { debug, defineIntegration, serializeEnvelope, suppressTracing } from '@sentry/core';\n\ntype SpotlightConnectionOptions = {\n  /**\n   * Set this if the Spotlight Sidecar is not running on localhost:8969\n   * By default, the Url is set to http://localhost:8969/stream\n   */\n  sidecarUrl?: string;\n};\n\nexport const INTEGRATION_NAME = 'Spotlight' as const;\n\nconst _spotlightIntegration = ((options: Partial<SpotlightConnectionOptions> = {}) => {\n  const _options = {\n    sidecarUrl: options.sidecarUrl || 'http://localhost:8969/stream',\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      try {\n        if (process.env.NODE_ENV && process.env.NODE_ENV !== 'development') {\n          debug.warn(\"[Spotlight] It seems you're not in dev mode. Do you really want to have Spotlight enabled?\");\n        }\n      } catch {\n        // ignore\n      }\n      connectToSpotlight(client, _options);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Use this integration to send errors and transactions to Spotlight.\n *\n * Learn more about spotlight at https://spotlightjs.com\n *\n * Important: This integration only works with Node 18 or newer.\n */\nexport const spotlightIntegration = defineIntegration(_spotlightIntegration);\n\nfunction connectToSpotlight(client: Client, options: Required<SpotlightConnectionOptions>): void {\n  const spotlightUrl = parseSidecarUrl(options.sidecarUrl);\n  if (!spotlightUrl) {\n    return;\n  }\n\n  let failedRequests = 0;\n\n  client.on('beforeEnvelope', (envelope: Envelope) => {\n    if (failedRequests > 3) {\n      debug.warn('[Spotlight] Disabled Sentry -> Spotlight integration due to too many failed requests');\n      return;\n    }\n\n    const serializedEnvelope = serializeEnvelope(envelope);\n    suppressTracing(() => {\n      const req = http.request(\n        {\n          method: 'POST',\n          path: spotlightUrl.pathname,\n          hostname: spotlightUrl.hostname,\n          port: spotlightUrl.port,\n          headers: {\n            'Content-Type': 'application/x-sentry-envelope',\n          },\n        },\n        res => {\n          if (res.statusCode && res.statusCode >= 200 && res.statusCode < 400) {\n            // Reset failed requests counter on success\n            failedRequests = 0;\n          }\n          res.on('data', () => {\n            // Drain socket\n          });\n\n          res.on('end', () => {\n            // Drain socket\n          });\n          res.setEncoding('utf8');\n        },\n      );\n\n      req.on('error', () => {\n        failedRequests++;\n        debug.warn('[Spotlight] Failed to send envelope to Spotlight Sidecar');\n      });\n      req.write(serializedEnvelope);\n      req.end();\n    });\n  });\n}\n\nfunction parseSidecarUrl(url: string): URL | undefined {\n  try {\n    return new URL(`${url}`);\n  } catch {\n    debug.warn(`[Spotlight] Invalid sidecar URL: ${url}`);\n    return undefined;\n  }\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ConsoleLevel, HandlerDataConsole, WrappedFunction } from '@sentry/core';\nimport {\n  CONSOLE_LEVELS,\n  GLOBAL_OBJ,\n  consoleIntegration as coreConsoleIntegration,\n  defineIntegration,\n  fill,\n  markFunctionWrapped,\n  maybeInstrument,\n  originalConsoleMethods,\n  triggerHandlers,\n} from '@sentry/core';\n\ninterface ConsoleIntegrationOptions {\n  levels: ConsoleLevel[];\n  /**\n   * Filter out console messages that match the given strings or regular expressions.\n   * These will neither be passed to the handler, and they will also not be logged to the user, unless they have debug enabled.\n   */\n  filter?: (string | RegExp)[];\n}\n\n/**\n * Node-specific console integration that captures breadcrumbs and handles\n * the AWS Lambda runtime replacing console methods after our patch.\n *\n * In Lambda, console methods are patched via `Object.defineProperty` so that\n * external replacements (by the Lambda runtime) are absorbed as the delegate\n * while our wrapper stays in place. Outside Lambda, this delegates entirely\n * to the core `consoleIntegration` which uses the simpler `fill`-based patch.\n */\nexport const consoleIntegration = defineIntegration((options: Partial<ConsoleIntegrationOptions> = {}) => {\n  return {\n    name: 'Console' as const,\n    setup(client) {\n      if (process.env.LAMBDA_TASK_ROOT) {\n        maybeInstrument('console', instrumentConsoleLambda);\n      }\n\n      // Delegate breadcrumb handling to the core console integration.\n      const core = coreConsoleIntegration({\n        ...options,\n        filter: [\n          ...(options.filter || []),\n          // Deprecation on Node 26 for module.require(), which is used by IITM\n          '[DEP0205] DeprecationWarning',\n        ],\n      });\n      core.setup?.(client);\n    },\n  };\n});\n\n/**\n * NOTE: This currently ignores the filter option.\n * We can revisit this later.\n */\nfunction instrumentConsoleLambda(): void {\n  const consoleObj = GLOBAL_OBJ?.console;\n  if (!consoleObj) {\n    return;\n  }\n\n  CONSOLE_LEVELS.forEach((level: ConsoleLevel) => {\n    if (level in consoleObj) {\n      patchWithDefineProperty(consoleObj, level);\n    }\n  });\n}\n\nfunction patchWithDefineProperty(consoleObj: Console, level: ConsoleLevel): void {\n  const nativeMethod = consoleObj[level] as (...args: unknown[]) => void;\n  originalConsoleMethods[level] = nativeMethod;\n\n  let delegate: Function = nativeMethod;\n  let savedDelegate: Function | undefined;\n  let isExecuting = false;\n\n  const wrapper = function (...args: any[]): void {\n    if (isExecuting) {\n      // Re-entrant call: a third party captured `wrapper` via the getter and calls it from inside their replacement. We must\n      // use `nativeMethod` (not `delegate`) to break the cycle, and we intentionally skip `triggerHandlers` to avoid duplicate\n      // breadcrumbs. The outer invocation already triggered the handlers for this console call.\n      nativeMethod.apply(consoleObj, args);\n      return;\n    }\n    isExecuting = true;\n    try {\n      triggerHandlers('console', { args, level } as HandlerDataConsole);\n      delegate.apply(consoleObj, args);\n    } finally {\n      isExecuting = false;\n    }\n  };\n  markFunctionWrapped(wrapper as unknown as WrappedFunction, nativeMethod as unknown as WrappedFunction);\n\n  // consoleSandbox reads originalConsoleMethods[level] to temporarily bypass instrumentation. We replace it with a distinct reference (.bind creates a\n  // new function identity) so the setter can tell apart \"consoleSandbox bypass\" from \"external code restoring a native method captured before Sentry init.\"\n  const sandboxBypass = nativeMethod.bind(consoleObj);\n  originalConsoleMethods[level] = sandboxBypass;\n\n  try {\n    let current: any = wrapper;\n\n    Object.defineProperty(consoleObj, level, {\n      configurable: true,\n      enumerable: true,\n      get() {\n        return current;\n      },\n      set(newValue) {\n        if (newValue === wrapper) {\n          // consoleSandbox restoring the wrapper: recover the saved delegate.\n          if (savedDelegate !== undefined) {\n            delegate = savedDelegate;\n            savedDelegate = undefined;\n          }\n          current = wrapper;\n        } else if (newValue === sandboxBypass) {\n          // consoleSandbox entering bypass: save delegate, let getter return sandboxBypass directly so calls skip the wrapper entirely.\n          savedDelegate = delegate;\n          current = sandboxBypass;\n        } else if (typeof newValue === 'function' && !(newValue as WrappedFunction).__sentry_original__) {\n          delegate = newValue;\n          current = wrapper;\n        } else {\n          current = newValue;\n        }\n      },\n    });\n  } catch {\n    // Fall back to fill-based patching if defineProperty fails\n    fill(consoleObj, level, function (originalConsoleMethod: () => any): Function {\n      originalConsoleMethods[level] = originalConsoleMethod;\n\n      return function (this: Console, ...args: any[]): void {\n        triggerHandlers('console', { args, level } as HandlerDataConsole);\n        originalConsoleMethods[level]?.apply(this, args);\n      };\n    });\n  }\n}\n", "import * as util from 'node:util';\nimport { defineIntegration } from '@sentry/core';\n\nconst INTEGRATION_NAME = 'NodeSystemError' as const;\n\ntype SystemErrorContext = {\n  dest?: string; // If present, the file path destination when reporting a file system error\n  errno: number; // The system-provided error number\n  path?: string; // If present, the file path when reporting a file system error\n};\n\ntype SystemError = Error & SystemErrorContext;\n\nfunction isSystemError(error: unknown): error is SystemError {\n  if (!(error instanceof Error)) {\n    return false;\n  }\n\n  if (!('errno' in error) || typeof error.errno !== 'number') {\n    return false;\n  }\n\n  // Workaround for Bun where getSystemErrorMap doesn't exist\n  // Can be removed once Bun supports getSystemErrorMap\n  // https://github.com/oven-sh/bun/issues/22872\n  if (typeof util.getSystemErrorMap !== 'function') {\n    return false;\n  }\n\n  // Appears this is the recommended way to check for Node.js SystemError\n  // https://github.com/nodejs/node/issues/46869\n  return util.getSystemErrorMap().has(error.errno);\n}\n\ntype Options = {\n  /**\n   * If true, includes the `path` and `dest` properties in the error context.\n   */\n  includePaths?: boolean;\n};\n\n/**\n * Captures context for Node.js SystemError errors.\n */\nexport const systemErrorIntegration = defineIntegration((options: Options = {}) => {\n  return {\n    name: INTEGRATION_NAME,\n    processEvent: (event, hint, client) => {\n      if (!isSystemError(hint.originalException)) {\n        return event;\n      }\n\n      const error = hint.originalException;\n\n      const errorContext: SystemErrorContext = {\n        ...(error as SystemErrorContext),\n      };\n\n      if (!client.getDataCollectionOptions().userInfo && options.includePaths !== true) {\n        delete errorContext.path;\n        delete errorContext.dest;\n      }\n\n      event.contexts = {\n        ...event.contexts,\n        node_system_error: errorContext,\n      };\n\n      for (const exception of event.exception?.values || []) {\n        if (exception.value) {\n          if (error.path && exception.value.includes(error.path)) {\n            exception.value = exception.value.replace(`'${error.path}'`, '').trim();\n          }\n          if (error.dest && exception.value.includes(error.dest)) {\n            exception.value = exception.value.replace(`'${error.dest}'`, '').trim();\n          }\n        }\n      }\n\n      return event;\n    },\n  };\n});\n", "/**\n * This code was originally forked from https://github.com/TooTallNate/proxy-agents/tree/b133295fd16f6475578b6b15bd9b4e33ecb0d0b7\n * With the following LICENSE:\n *\n * (The MIT License)\n *\n * Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net>*\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * 'Software'), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:*\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.*\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/* eslint-disable @typescript-eslint/explicit-member-accessibility */\n/* eslint-disable @typescript-eslint/member-ordering */\n/* eslint-disable jsdoc/require-jsdoc */\nimport * as http from 'node:http';\nimport type * as net from 'node:net';\nimport type { Duplex } from 'node:stream';\nimport type * as tls from 'node:tls';\n\nexport * from './helpers';\n\ninterface HttpConnectOpts extends net.TcpNetConnectOpts {\n  secureEndpoint: false;\n  protocol?: string;\n}\n\ninterface HttpsConnectOpts extends tls.ConnectionOptions {\n  secureEndpoint: true;\n  protocol?: string;\n  port: number;\n}\n\nexport type AgentConnectOpts = HttpConnectOpts | HttpsConnectOpts;\n\nconst INTERNAL = Symbol('AgentBaseInternalState');\n\ninterface InternalState {\n  defaultPort?: number;\n  protocol?: string;\n  currentSocket?: Duplex;\n}\n\nexport abstract class Agent extends http.Agent {\n  private [INTERNAL]: InternalState;\n\n  // Set by `http.Agent` - missing from `@types/node`\n  options!: Partial<net.TcpNetConnectOpts & tls.ConnectionOptions>;\n  keepAlive!: boolean;\n\n  constructor(opts?: http.AgentOptions) {\n    super(opts);\n    this[INTERNAL] = {};\n  }\n\n  abstract connect(\n    req: http.ClientRequest,\n    options: AgentConnectOpts,\n  ): Promise<Duplex | http.Agent> | Duplex | http.Agent;\n\n  /**\n   * Determine whether this is an `http` or `https` request.\n   */\n  isSecureEndpoint(options?: AgentConnectOpts): boolean {\n    if (options) {\n      // First check the `secureEndpoint` property explicitly, since this\n      // means that a parent `Agent` is \"passing through\" to this instance.\n      if (typeof (options as Partial<typeof options>).secureEndpoint === 'boolean') {\n        return options.secureEndpoint;\n      }\n\n      // If no explicit `secure` endpoint, check if `protocol` property is\n      // set. This will usually be the case since using a full string URL\n      // or `URL` instance should be the most common usage.\n      if (typeof options.protocol === 'string') {\n        return options.protocol === 'https:';\n      }\n    }\n\n    // Finally, if no `protocol` property was set, then fall back to\n    // checking the stack trace of the current call stack, and try to\n    // detect the \"https\" module.\n    const { stack } = new Error();\n    if (typeof stack !== 'string') return false;\n    return stack.split('\\n').some(l => l.indexOf('(https.js:') !== -1 || l.indexOf('node:https:') !== -1);\n  }\n\n  createSocket(req: http.ClientRequest, options: AgentConnectOpts, cb: (err: Error | null, s?: Duplex) => void): void {\n    const connectOpts = {\n      ...options,\n      secureEndpoint: this.isSecureEndpoint(options),\n    };\n    Promise.resolve()\n      .then(() => this.connect(req, connectOpts))\n      .then(socket => {\n        if (socket instanceof http.Agent) {\n          // @ts-expect-error `addRequest()` isn't defined in `@types/node`\n          return socket.addRequest(req, connectOpts);\n        }\n        this[INTERNAL].currentSocket = socket;\n        // @ts-expect-error `createSocket()` isn't defined in `@types/node`\n        super.createSocket(req, options, cb);\n      }, cb);\n  }\n\n  createConnection(): Duplex {\n    const socket = this[INTERNAL].currentSocket;\n    this[INTERNAL].currentSocket = undefined;\n    if (!socket) {\n      throw new Error('No socket was returned in the `connect()` function');\n    }\n    return socket;\n  }\n\n  get defaultPort(): number {\n    return this[INTERNAL].defaultPort ?? (this.protocol === 'https:' ? 443 : 80);\n  }\n\n  set defaultPort(v: number) {\n    if (this[INTERNAL]) {\n      this[INTERNAL].defaultPort = v;\n    }\n  }\n\n  get protocol(): string {\n    return this[INTERNAL].protocol ?? (this.isSecureEndpoint() ? 'https:' : 'http:');\n  }\n\n  set protocol(v: string) {\n    if (this[INTERNAL]) {\n      this[INTERNAL].protocol = v;\n    }\n  }\n}\n", "/**\n * This code was originally forked from https://github.com/TooTallNate/proxy-agents/tree/b133295fd16f6475578b6b15bd9b4e33ecb0d0b7\n * With the following LICENSE:\n *\n * (The MIT License)\n *\n * Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net>*\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * 'Software'), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:*\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.*\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable jsdoc/require-jsdoc */\nimport type { IncomingHttpHeaders } from 'node:http';\nimport type { Readable } from 'node:stream';\nimport { debug } from '@sentry/core';\n\nfunction debugLog(...args: unknown[]): void {\n  debug.log('[https-proxy-agent:parse-proxy-response]', ...args);\n}\n\nexport interface ConnectResponse {\n  statusCode: number;\n  statusText: string;\n  headers: IncomingHttpHeaders;\n}\n\nexport function parseProxyResponse(socket: Readable): Promise<{ connect: ConnectResponse; buffered: Buffer }> {\n  return new Promise((resolve, reject) => {\n    // we need to buffer any HTTP traffic that happens with the proxy before we get\n    // the CONNECT response, so that if the response is anything other than an \"200\"\n    // response code, then we can re-play the \"data\" events on the socket once the\n    // HTTP parser is hooked up...\n    let buffersLength = 0;\n    const buffers: Buffer[] = [];\n\n    function read() {\n      const b = socket.read();\n      if (b) ondata(b);\n      else socket.once('readable', read);\n    }\n\n    function cleanup() {\n      socket.removeListener('end', onend);\n      socket.removeListener('error', onerror);\n      socket.removeListener('readable', read);\n    }\n\n    function onend() {\n      cleanup();\n      debugLog('onend');\n      reject(new Error('Proxy connection ended before receiving CONNECT response'));\n    }\n\n    function onerror(err: Error) {\n      cleanup();\n      debugLog('onerror %o', err);\n      reject(err);\n    }\n\n    function ondata(b: Buffer) {\n      buffers.push(b);\n      buffersLength += b.length;\n\n      const buffered = Buffer.concat(buffers, buffersLength);\n      const endOfHeaders = buffered.indexOf('\\r\\n\\r\\n');\n\n      if (endOfHeaders === -1) {\n        // keep buffering\n        debugLog('have not received end of HTTP headers yet...');\n        read();\n        return;\n      }\n\n      const headerParts = buffered.subarray(0, endOfHeaders).toString('ascii').split('\\r\\n');\n      const firstLine = headerParts.shift();\n      if (!firstLine) {\n        socket.destroy();\n        return reject(new Error('No header received from proxy CONNECT response'));\n      }\n      const firstLineParts = firstLine.split(' ');\n      const statusCode = +(firstLineParts[1] || 0);\n      const statusText = firstLineParts.slice(2).join(' ');\n      const headers: IncomingHttpHeaders = {};\n      for (const header of headerParts) {\n        if (!header) continue;\n        const firstColon = header.indexOf(':');\n        if (firstColon === -1) {\n          socket.destroy();\n          return reject(new Error(`Invalid header from proxy CONNECT response: \"${header}\"`));\n        }\n        const key = header.slice(0, firstColon).toLowerCase();\n        const value = header.slice(firstColon + 1).trimStart();\n        const current = headers[key];\n        if (typeof current === 'string') {\n          headers[key] = [current, value];\n        } else if (Array.isArray(current)) {\n          current.push(value);\n        } else {\n          headers[key] = value;\n        }\n      }\n      debugLog('got proxy server response: %o %o', firstLine, headers);\n      cleanup();\n      resolve({\n        connect: {\n          statusCode,\n          statusText,\n          headers,\n        },\n        buffered,\n      });\n    }\n\n    socket.on('error', onerror);\n    socket.on('end', onend);\n\n    read();\n  });\n}\n", "/**\n * This code was originally forked from https://github.com/TooTallNate/proxy-agents/tree/b133295fd16f6475578b6b15bd9b4e33ecb0d0b7\n * With the following LICENSE:\n *\n * (The MIT License)\n *\n * Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net>*\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * 'Software'), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:*\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.*\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/* eslint-disable @typescript-eslint/explicit-member-accessibility */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n// eslint-disable-next-line import/no-duplicates\nimport type * as http from 'node:http';\n// eslint-disable-next-line import/no-duplicates\nimport type { OutgoingHttpHeaders } from 'node:http';\nimport * as net from 'node:net';\nimport * as tls from 'node:tls';\nimport { debug } from '@sentry/core';\nimport type { AgentConnectOpts } from './base';\nimport { Agent } from './base';\nimport { parseProxyResponse } from './parse-proxy-response';\n\nfunction debugLog(...args: unknown[]): void {\n  debug.log('[https-proxy-agent]', ...args);\n}\n\ntype Protocol<T> = T extends `${infer Protocol}:${infer _}` ? Protocol : never;\n\ntype ConnectOptsMap = {\n  http: Omit<net.TcpNetConnectOpts, 'host' | 'port'>;\n  https: Omit<tls.ConnectionOptions, 'host' | 'port'>;\n};\n\ntype ConnectOpts<T> = {\n  [P in keyof ConnectOptsMap]: Protocol<T> extends P ? ConnectOptsMap[P] : never;\n}[keyof ConnectOptsMap];\n\nexport type HttpsProxyAgentOptions<T> = ConnectOpts<T> &\n  http.AgentOptions & {\n    headers?: OutgoingHttpHeaders | (() => OutgoingHttpHeaders);\n  };\n\n/**\n * The `HttpsProxyAgent` implements an HTTP Agent subclass that connects to\n * the specified \"HTTP(s) proxy server\" in order to proxy HTTPS requests.\n *\n * Outgoing HTTP requests are first tunneled through the proxy server using the\n * `CONNECT` HTTP request method to establish a connection to the proxy server,\n * and then the proxy server connects to the destination target and issues the\n * HTTP request from the proxy server.\n *\n * `https:` requests have their socket connection upgraded to TLS once\n * the connection to the proxy server has been established.\n */\nexport class HttpsProxyAgent<Uri extends string> extends Agent {\n  static protocols = ['http', 'https'] as const;\n\n  readonly proxy: URL;\n  proxyHeaders: OutgoingHttpHeaders | (() => OutgoingHttpHeaders);\n  connectOpts: net.TcpNetConnectOpts & tls.ConnectionOptions;\n\n  constructor(proxy: Uri | URL, opts?: HttpsProxyAgentOptions<Uri>) {\n    super(opts);\n    this.options = {};\n    this.proxy = typeof proxy === 'string' ? new URL(proxy) : proxy;\n    this.proxyHeaders = opts?.headers ?? {};\n    debugLog('Creating new HttpsProxyAgent instance: %o', this.proxy.href);\n\n    // Trim off the brackets from IPv6 addresses\n    const host = (this.proxy.hostname || this.proxy.host).replace(/^\\[|\\]$/g, '');\n    const port = this.proxy.port ? parseInt(this.proxy.port, 10) : this.proxy.protocol === 'https:' ? 443 : 80;\n    this.connectOpts = {\n      // Attempt to negotiate http/1.1 for proxy servers that support http/2\n      ALPNProtocols: ['http/1.1'],\n      ...(opts ? omit(opts, 'headers') : null),\n      host,\n      port,\n    };\n  }\n\n  /**\n   * Called when the node-core HTTP client library is creating a\n   * new HTTP request.\n   */\n  async connect(req: http.ClientRequest, opts: AgentConnectOpts): Promise<net.Socket> {\n    const { proxy } = this;\n\n    if (!opts.host) {\n      throw new TypeError('No \"host\" provided');\n    }\n\n    // Create a socket connection to the proxy server.\n    let socket: net.Socket;\n    if (proxy.protocol === 'https:') {\n      debugLog('Creating `tls.Socket`: %o', this.connectOpts);\n      const servername = this.connectOpts.servername || this.connectOpts.host;\n      socket = tls.connect({\n        ...this.connectOpts,\n        servername: servername && net.isIP(servername) ? undefined : servername,\n      });\n    } else {\n      debugLog('Creating `net.Socket`: %o', this.connectOpts);\n      socket = net.connect(this.connectOpts);\n    }\n\n    const headers: OutgoingHttpHeaders =\n      typeof this.proxyHeaders === 'function' ? this.proxyHeaders() : { ...this.proxyHeaders };\n    const host = net.isIPv6(opts.host) ? `[${opts.host}]` : opts.host;\n    let payload = `CONNECT ${host}:${opts.port} HTTP/1.1\\r\\n`;\n\n    // Inject the `Proxy-Authorization` header if necessary.\n    if (proxy.username || proxy.password) {\n      const auth = `${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}`;\n      headers['Proxy-Authorization'] = `Basic ${Buffer.from(auth).toString('base64')}`;\n    }\n\n    headers.Host = `${host}:${opts.port}`;\n\n    if (!headers['Proxy-Connection']) {\n      headers['Proxy-Connection'] = this.keepAlive ? 'Keep-Alive' : 'close';\n    }\n    for (const name of Object.keys(headers)) {\n      payload += `${name}: ${headers[name]}\\r\\n`;\n    }\n\n    const proxyResponsePromise = parseProxyResponse(socket);\n\n    socket.write(`${payload}\\r\\n`);\n\n    const { connect, buffered } = await proxyResponsePromise;\n    req.emit('proxyConnect', connect);\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore Not EventEmitter in Node types\n    this.emit('proxyConnect', connect, req);\n\n    if (connect.statusCode === 200) {\n      req.once('socket', resume);\n\n      if (opts.secureEndpoint) {\n        // The proxy is connecting to a TLS server, so upgrade\n        // this socket connection to a TLS connection.\n        debugLog('Upgrading socket connection to TLS');\n        const servername = opts.servername || opts.host;\n        return tls.connect({\n          ...omit(opts, 'host', 'path', 'port'),\n          socket,\n          servername: net.isIP(servername) ? undefined : servername,\n        });\n      }\n\n      return socket;\n    }\n\n    // Some other status code that's not 200... need to re-play the HTTP\n    // header \"data\" events onto the socket once the HTTP machinery is\n    // attached so that the node core `http` can parse and handle the\n    // error status code.\n\n    // Close the original socket, and a new \"fake\" socket is returned\n    // instead, so that the proxy doesn't get the HTTP request\n    // written to it (which may contain `Authorization` headers or other\n    // sensitive data).\n    //\n    // See: https://hackerone.com/reports/541502\n    socket.destroy();\n\n    const fakeSocket = new net.Socket({ writable: false });\n    fakeSocket.readable = true;\n\n    // Need to wait for the \"socket\" event to re-play the \"data\" events.\n    req.once('socket', (s: net.Socket) => {\n      debugLog('Replaying proxy buffer for failed request');\n      // Replay the \"buffered\" Buffer onto the fake `socket`, since at\n      // this point the HTTP module machinery has been hooked up for\n      // the user.\n      s.push(buffered);\n      s.push(null);\n    });\n\n    return fakeSocket;\n  }\n}\n\nfunction resume(socket: net.Socket | tls.TLSSocket): void {\n  socket.resume();\n}\n\nfunction omit<T extends object, K extends [...(keyof T)[]]>(\n  obj: T,\n  ...keys: K\n): {\n  [K2 in Exclude<keyof T, K[number]>]: T[K2];\n} {\n  const ret = {} as {\n    [K in keyof typeof obj]: (typeof obj)[K];\n  };\n  let key: keyof typeof obj;\n  for (key in obj) {\n    if (!keys.includes(key)) {\n      ret[key] = obj[key];\n    }\n  }\n  return ret;\n}\n", "import * as http from 'node:http';\nimport * as https from 'node:https';\nimport { Readable } from 'node:stream';\nimport { createGzip } from 'node:zlib';\nimport type {\n  BaseTransportOptions,\n  Transport,\n  TransportMakeRequestResponse,\n  TransportRequest,\n  TransportRequestExecutor,\n} from '@sentry/core';\nimport { consoleSandbox, createTransport, suppressTracing } from '@sentry/core';\nimport { HttpsProxyAgent } from '../proxy';\nimport type { HTTPModule } from './http-module';\n\nexport interface NodeTransportOptions extends BaseTransportOptions {\n  /** Set a proxy that should be used for outbound requests. */\n  proxy?: string;\n  /** HTTPS proxy CA certificates */\n  caCerts?: string | Buffer | Array<string | Buffer>;\n  /** Custom HTTP module. Defaults to the native 'http' and 'https' modules. */\n  httpModule?: HTTPModule;\n  /** Allow overriding connection keepAlive, defaults to false */\n  keepAlive?: boolean;\n}\n\n// Estimated maximum size for reasonable standalone event\nconst GZIP_THRESHOLD = 1024 * 32;\n\n/**\n * Gets a stream from a Uint8Array or string\n * Readable.from is ideal but was added in node.js v12.3.0 and v10.17.0\n */\nfunction streamFromBody(body: Uint8Array | string): Readable {\n  return new Readable({\n    read() {\n      this.push(body);\n      this.push(null);\n    },\n  });\n}\n\n/**\n * Creates a Transport that uses native the native 'http' and 'https' modules to send events to Sentry.\n */\nexport function makeNodeTransport(options: NodeTransportOptions): Transport {\n  let urlSegments: URL;\n\n  try {\n    urlSegments = new URL(options.url);\n  } catch (_e) {\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.warn(\n        '[@sentry/node]: Invalid dsn or tunnel option, will not send any events. The tunnel option must be a full URL when used.',\n      );\n    });\n    return createTransport(options, () => Promise.resolve({}));\n  }\n\n  const isHttps = urlSegments.protocol === 'https:';\n\n  // Proxy prioritization: http => `options.proxy` | `process.env.http_proxy`\n  // Proxy prioritization: https => `options.proxy` | `process.env.https_proxy` | `process.env.http_proxy`\n  const proxy = applyNoProxyOption(\n    urlSegments,\n    options.proxy || (isHttps ? process.env.https_proxy : undefined) || process.env.http_proxy,\n  );\n\n  const nativeHttpModule = isHttps ? https : http;\n  const keepAlive = options.keepAlive === undefined ? false : options.keepAlive;\n\n  // TODO(v11): Evaluate if we can set keepAlive to true. This would involve testing for memory leaks in older node\n  // versions(>= 8) as they had memory leaks when using it: #2555\n  const agent = proxy\n    ? (new HttpsProxyAgent(proxy) as http.Agent)\n    : new nativeHttpModule.Agent({ keepAlive, maxSockets: 30, timeout: 2000 });\n\n  const requestExecutor = createRequestExecutor(options, options.httpModule ?? nativeHttpModule, agent);\n  return createTransport(options, requestExecutor);\n}\n\n/**\n * Honors the `no_proxy` env variable with the highest priority to allow for hosts exclusion.\n *\n * @param transportUrl The URL the transport intends to send events to.\n * @param proxy The client configured proxy.\n * @returns A proxy the transport should use.\n */\nfunction applyNoProxyOption(transportUrlSegments: URL, proxy: string | undefined): string | undefined {\n  const { no_proxy } = process.env;\n\n  const urlIsExemptFromProxy = no_proxy\n    ?.split(',')\n    .some(\n      exemption => transportUrlSegments.host.endsWith(exemption) || transportUrlSegments.hostname.endsWith(exemption),\n    );\n\n  if (urlIsExemptFromProxy) {\n    return undefined;\n  } else {\n    return proxy;\n  }\n}\n\n/**\n * Creates a RequestExecutor to be used with `createTransport`.\n */\nfunction createRequestExecutor(\n  options: NodeTransportOptions,\n  httpModule: HTTPModule,\n  agent: http.Agent,\n): TransportRequestExecutor {\n  const { hostname, pathname, port, protocol, search } = new URL(options.url);\n  return function makeRequest(request: TransportRequest): Promise<TransportMakeRequestResponse> {\n    return new Promise((resolve, reject) => {\n      // This ensures we do not generate any spans in OpenTelemetry for the transport\n      suppressTracing(() => {\n        let body = streamFromBody(request.body);\n\n        const headers: Record<string, string> = { ...options.headers };\n\n        if (request.body.length > GZIP_THRESHOLD) {\n          headers['content-encoding'] = 'gzip';\n          body = body.pipe(createGzip());\n        }\n\n        const hostnameIsIPv6 = hostname.startsWith('[');\n\n        const req = httpModule.request(\n          {\n            method: 'POST',\n            agent,\n            headers,\n            // Remove \"[\" and \"]\" from IPv6 hostnames\n            hostname: hostnameIsIPv6 ? hostname.slice(1, -1) : hostname,\n            path: `${pathname}${search}`,\n            port,\n            protocol,\n            ca: options.caCerts,\n          },\n          res => {\n            res.on('data', () => {\n              // Drain socket\n            });\n\n            res.on('end', () => {\n              // Drain socket\n            });\n\n            res.setEncoding('utf8');\n\n            // \"Key-value pairs of header names and values. Header names are lower-cased.\"\n            // https://nodejs.org/api/http.html#http_message_headers\n            const retryAfterHeader = res.headers['retry-after'] ?? null;\n            const rateLimitsHeader = res.headers['x-sentry-rate-limits'] ?? null;\n\n            resolve({\n              statusCode: res.statusCode,\n              headers: {\n                'retry-after': retryAfterHeader,\n                'x-sentry-rate-limits': Array.isArray(rateLimitsHeader)\n                  ? rateLimitsHeader[0] || null\n                  : rateLimitsHeader,\n              },\n            });\n          },\n        );\n\n        req.on('error', reject);\n        body.pipe(req);\n      });\n    });\n  };\n}\n", "import { envToBool } from '@sentry/core';\n\n/**\n * Parse the spotlight option with proper precedence:\n * - `false` or explicit string from options: use as-is\n * - `true`: enable spotlight, but prefer a custom URL from the env var if set\n * - `undefined`: defer entirely to the env var (bool or URL)\n */\nexport function getSpotlightConfig(optionsSpotlight: boolean | string | undefined): boolean | string | undefined {\n  if (optionsSpotlight === false) {\n    return false;\n  }\n\n  if (typeof optionsSpotlight === 'string') {\n    return optionsSpotlight;\n  }\n\n  // optionsSpotlight is true or undefined\n  const envBool = envToBool(process.env.SENTRY_SPOTLIGHT, { strict: true });\n  const envUrl = envBool === null && process.env.SENTRY_SPOTLIGHT ? process.env.SENTRY_SPOTLIGHT : undefined;\n\n  return optionsSpotlight === true\n    ? (envUrl ?? true) // true: use env URL if present, otherwise true\n    : (envBool ?? envUrl); // undefined: use env var (bool or URL)\n}\n", "import { posix, sep } from 'node:path';\nimport { dirname } from '@sentry/core';\n\n/** normalizes Windows paths */\nfunction normalizeWindowsPath(path: string): string {\n  return path\n    .replace(/^[A-Z]:/, '') // remove Windows-style prefix\n    .replace(/\\\\/g, '/'); // replace all `\\` instances with `/`\n}\n\n/** Creates a function that gets the module name from a filename */\nexport function createGetModuleFromFilename(\n  basePath: string = process.argv[1] ? dirname(process.argv[1]) : process.cwd(),\n  isWindows: boolean = sep === '\\\\',\n): (filename: string | undefined) => string | undefined {\n  const normalizedBase = isWindows ? normalizeWindowsPath(basePath) : basePath;\n\n  return (filename: string | undefined) => {\n    if (!filename) {\n      return;\n    }\n\n    const normalizedFilename = isWindows ? normalizeWindowsPath(filename) : filename;\n\n    // eslint-disable-next-line prefer-const\n    let { dir, base: file, ext } = posix.parse(normalizedFilename);\n\n    if (ext === '.js' || ext === '.mjs' || ext === '.cjs') {\n      file = file.slice(0, ext.length * -1);\n    }\n\n    // The file name might be URI-encoded which we want to decode to\n    // the original file name.\n    const decodedFile = decodeURIComponent(file);\n\n    if (!dir) {\n      // No dirname whatsoever\n      dir = '.';\n    }\n\n    const n = dir.lastIndexOf('/node_modules');\n    if (n > -1) {\n      return `${dir.slice(n + 14).replace(/\\//g, '.')}:${decodedFile}`;\n    }\n\n    // Let's see if it's a part of the main module\n    // To be a part of main module, it has to share the same base\n    if (dir.startsWith(normalizedBase)) {\n      const moduleName = dir.slice(normalizedBase.length + 1).replace(/\\//g, '.');\n      return moduleName ? `${moduleName}:${decodedFile}` : decodedFile;\n    }\n\n    return decodedFile;\n  };\n}\n", "// PUBLIC APIS\n\nimport type { StackParser } from '@sentry/core';\nimport { createStackParser, GLOBAL_OBJ, nodeStackLineParser } from '@sentry/core';\nimport { createGetModuleFromFilename } from '../utils/module';\n\n/**\n * Returns a release dynamically from environment variables.\n */\n// eslint-disable-next-line complexity\nexport function getSentryRelease(fallback?: string): string | undefined {\n  // Always read first as Sentry takes this as precedence\n  if (process.env.SENTRY_RELEASE) {\n    return process.env.SENTRY_RELEASE;\n  }\n\n  // This supports the variable that sentry-webpack-plugin injects\n  if (GLOBAL_OBJ.SENTRY_RELEASE?.id) {\n    return GLOBAL_OBJ.SENTRY_RELEASE.id;\n  }\n\n  // This list is in approximate alpha order, separated into 3 categories:\n  // 1. Git providers\n  // 2. CI providers with specific environment variables (has the provider name in the variable name)\n  // 3. CI providers with generic environment variables (checked for last to prevent possible false positives)\n\n  const possibleReleaseNameOfGitProvider =\n    // GitHub Actions - https://help.github.com/en/actions/configuring-and-managing-workflows/using-environment-variables#default-environment-variables\n    process.env['GITHUB_SHA'] ||\n    // GitLab CI - https://docs.gitlab.com/ee/ci/variables/predefined_variables.html\n    process.env['CI_MERGE_REQUEST_SOURCE_BRANCH_SHA'] ||\n    process.env['CI_BUILD_REF'] ||\n    process.env['CI_COMMIT_SHA'] ||\n    // Bitbucket - https://support.atlassian.com/bitbucket-cloud/docs/variables-and-secrets/\n    process.env['BITBUCKET_COMMIT'];\n\n  const possibleReleaseNameOfCiProvidersWithSpecificEnvVar =\n    // AppVeyor - https://www.appveyor.com/docs/environment-variables/\n    process.env['APPVEYOR_PULL_REQUEST_HEAD_COMMIT'] ||\n    process.env['APPVEYOR_REPO_COMMIT'] ||\n    // AWS CodeBuild - https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html\n    process.env['CODEBUILD_RESOLVED_SOURCE_VERSION'] ||\n    // AWS Amplify - https://docs.aws.amazon.com/amplify/latest/userguide/environment-variables.html\n    process.env['AWS_COMMIT_ID'] ||\n    // Azure Pipelines - https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml\n    process.env['BUILD_SOURCEVERSION'] ||\n    // Bitrise - https://devcenter.bitrise.io/builds/available-environment-variables/\n    process.env['GIT_CLONE_COMMIT_HASH'] ||\n    // Buddy CI - https://buddy.works/docs/pipelines/environment-variables#default-environment-variables\n    process.env['BUDDY_EXECUTION_REVISION'] ||\n    // Builtkite - https://buildkite.com/docs/pipelines/environment-variables\n    process.env['BUILDKITE_COMMIT'] ||\n    // CircleCI - https://circleci.com/docs/variables/\n    process.env['CIRCLE_SHA1'] ||\n    // Cirrus CI - https://cirrus-ci.org/guide/writing-tasks/#environment-variables\n    process.env['CIRRUS_CHANGE_IN_REPO'] ||\n    // Codefresh - https://codefresh.io/docs/docs/codefresh-yaml/variables/\n    process.env['CF_REVISION'] ||\n    // Codemagic - https://docs.codemagic.io/yaml-basic-configuration/environment-variables/\n    process.env['CM_COMMIT'] ||\n    // Cloudflare Pages - https://developers.cloudflare.com/pages/platform/build-configuration/#environment-variables\n    process.env['CF_PAGES_COMMIT_SHA'] ||\n    // Drone - https://docs.drone.io/pipeline/environment/reference/\n    process.env['DRONE_COMMIT_SHA'] ||\n    // Flightcontrol - https://www.flightcontrol.dev/docs/guides/flightcontrol/environment-variables#built-in-environment-variables\n    process.env['FC_GIT_COMMIT_SHA'] ||\n    // Heroku #1 https://devcenter.heroku.com/articles/heroku-ci\n    process.env['HEROKU_TEST_RUN_COMMIT_VERSION'] ||\n    // Heroku #2 https://devcenter.heroku.com/articles/dyno-metadata#dyno-metadata\n    process.env['HEROKU_BUILD_COMMIT'] ||\n    // Heroku #3 (deprecated by Heroku, kept for backward compatibility)\n    process.env['HEROKU_SLUG_COMMIT'] ||\n    // Railway - https://docs.railway.app/reference/variables#git-variables\n    process.env['RAILWAY_GIT_COMMIT_SHA'] ||\n    // Render - https://render.com/docs/environment-variables\n    process.env['RENDER_GIT_COMMIT'] ||\n    // Semaphore CI - https://docs.semaphoreci.com/ci-cd-environment/environment-variables\n    process.env['SEMAPHORE_GIT_SHA'] ||\n    // TravisCI - https://docs.travis-ci.com/user/environment-variables/#default-environment-variables\n    process.env['TRAVIS_PULL_REQUEST_SHA'] ||\n    // Vercel - https://vercel.com/docs/v2/build-step#system-environment-variables\n    process.env['VERCEL_GIT_COMMIT_SHA'] ||\n    process.env['VERCEL_GITHUB_COMMIT_SHA'] ||\n    process.env['VERCEL_GITLAB_COMMIT_SHA'] ||\n    process.env['VERCEL_BITBUCKET_COMMIT_SHA'] ||\n    // Zeit (now known as Vercel)\n    process.env['ZEIT_GITHUB_COMMIT_SHA'] ||\n    process.env['ZEIT_GITLAB_COMMIT_SHA'] ||\n    process.env['ZEIT_BITBUCKET_COMMIT_SHA'];\n\n  const possibleReleaseNameOfCiProvidersWithGenericEnvVar =\n    // CloudBees CodeShip - https://docs.cloudbees.com/docs/cloudbees-codeship/latest/pro-builds-and-configuration/environment-variables\n    process.env['CI_COMMIT_ID'] ||\n    // Coolify - https://coolify.io/docs/knowledge-base/environment-variables\n    process.env['SOURCE_COMMIT'] ||\n    // Heroku #3 https://devcenter.heroku.com/changelog-items/630\n    process.env['SOURCE_VERSION'] ||\n    // Jenkins - https://plugins.jenkins.io/git/#environment-variables\n    process.env['GIT_COMMIT'] ||\n    // Netlify - https://docs.netlify.com/configure-builds/environment-variables/#build-metadata\n    process.env['COMMIT_REF'] ||\n    // TeamCity - https://www.jetbrains.com/help/teamcity/predefined-build-parameters.html\n    process.env['BUILD_VCS_NUMBER'] ||\n    // Woodpecker CI - https://woodpecker-ci.org/docs/usage/environment\n    process.env['CI_COMMIT_SHA'];\n\n  return (\n    possibleReleaseNameOfGitProvider ||\n    possibleReleaseNameOfCiProvidersWithSpecificEnvVar ||\n    possibleReleaseNameOfCiProvidersWithGenericEnvVar ||\n    fallback\n  );\n}\n\n/** Node.js stack parser */\nexport const defaultStackParser: StackParser = createStackParser(nodeStackLineParser(createGetModuleFromFilename()));\n", "import * as os from 'node:os';\nimport type { Tracer } from '@opentelemetry/api';\nimport { trace } from '@opentelemetry/api';\nimport { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport type { DynamicSamplingContext, Scope, ServerRuntimeClientOptions, TraceContext } from '@sentry/core';\nimport {\n  _INTERNAL_clearAiProviderSkips,\n  _INTERNAL_flushLogsBuffer,\n  _INTERNAL_flushMetricsBuffer,\n  _INTERNAL_setDeferSegmentSpanCapture,\n  applySdkMetadata,\n  debug,\n  SDK_VERSION,\n  ServerRuntimeClient,\n} from '@sentry/core';\nimport {\n  type AsyncLocalStorageLookup,\n  getTraceContextForScope,\n  type OpenTelemetryTracerProvider,\n} from '@sentry/opentelemetry';\nimport { isMainThread, threadId } from 'worker_threads';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { NodeClientOptions } from '../types';\n\nconst DEFAULT_CLIENT_REPORT_FLUSH_INTERVAL_MS = 60_000; // 60s was chosen arbitrarily\n\n/** A client for using Sentry with Node & OpenTelemetry. */\nexport class NodeClient extends ServerRuntimeClient<NodeClientOptions> {\n  public traceProvider: OpenTelemetryTracerProvider | undefined;\n  public asyncLocalStorageLookup: AsyncLocalStorageLookup | undefined;\n\n  private _tracer: Tracer | undefined;\n  private _clientReportInterval: NodeJS.Timeout | undefined;\n  private _clientReportOnExitFlushListener: (() => void) | undefined;\n  private _logOnExitFlushListener: (() => void) | undefined;\n  private _metricsOnExitFlushListener: (() => void) | undefined;\n\n  public constructor(options: NodeClientOptions) {\n    const serverName =\n      options.includeServerName === false\n        ? undefined\n        : options.serverName || global.process.env.SENTRY_NAME || os.hostname();\n\n    const clientOptions: ServerRuntimeClientOptions = {\n      ...options,\n      platform: 'node',\n      // Use provided runtime or default to 'node' with current process version\n      runtime: options.runtime || { name: 'node', version: global.process.version },\n      serverName,\n    };\n\n    if (options.openTelemetryInstrumentations) {\n      registerInstrumentations({\n        instrumentations: options.openTelemetryInstrumentations,\n      });\n    }\n\n    applySdkMetadata(clientOptions, 'node');\n\n    debug.log(`Initializing Sentry: process: ${process.pid}, thread: ${isMainThread ? 'main' : `worker-${threadId}`}.`);\n\n    super(clientOptions);\n\n    if (this.getOptions().enableLogs) {\n      this._logOnExitFlushListener = () => {\n        _INTERNAL_flushLogsBuffer(this);\n      };\n\n      if (serverName) {\n        this.on('beforeCaptureLog', log => {\n          log.attributes = {\n            ...log.attributes,\n            'server.address': serverName,\n          };\n        });\n      }\n\n      process.on('beforeExit', this._logOnExitFlushListener);\n    }\n\n    this._metricsOnExitFlushListener = () => {\n      _INTERNAL_flushMetricsBuffer(this);\n    };\n    process.on('beforeExit', this._metricsOnExitFlushListener);\n\n    // Enable deferred segment-span transaction capture here, in the constructor, rather than in\n    // `initOtel`. Every client runs its constructor exactly once, whereas `initOtel` only runs on\n    // `Sentry.init()` and only fully wires up the first client (a second `init` loses the\n    // `setGlobalTracerProvider` race and bails early, and a manually constructed `NodeClient` never\n    // runs `initOtel` at all). Anchoring on the constructor means every client — first, second, or\n    // manual — defers correctly. It's unconditional and cheap: clients on the OpenTelemetry SDK\n    // provider path produce OTel spans that never reach `SentrySpan`, so the strategy is simply never\n    // consulted for them.\n    _INTERNAL_setDeferSegmentSpanCapture(this);\n  }\n\n  /** Get the OTEL tracer. */\n  public get tracer(): Tracer {\n    if (this._tracer) {\n      return this._tracer;\n    }\n\n    const name = '@sentry/node';\n    const version = SDK_VERSION;\n    const tracer = trace.getTracer(name, version);\n    this._tracer = tracer;\n\n    return tracer;\n  }\n\n  /** @inheritDoc */\n  // @ts-expect-error - PromiseLike is a subset of Promise\n  public async flush(timeout?: number): PromiseLike<boolean> {\n    await this.traceProvider?.forceFlush();\n\n    if (this.getOptions().sendClientReports) {\n      this._flushOutcomes();\n    }\n\n    return super.flush(timeout);\n  }\n\n  /** @inheritDoc */\n  // @ts-expect-error - PromiseLike is a subset of Promise\n  public async close(timeout?: number | undefined): PromiseLike<boolean> {\n    if (this._clientReportInterval) {\n      clearInterval(this._clientReportInterval);\n    }\n\n    if (this._clientReportOnExitFlushListener) {\n      process.off('beforeExit', this._clientReportOnExitFlushListener);\n    }\n\n    if (this._logOnExitFlushListener) {\n      process.off('beforeExit', this._logOnExitFlushListener);\n    }\n\n    if (this._metricsOnExitFlushListener) {\n      process.off('beforeExit', this._metricsOnExitFlushListener);\n    }\n\n    const allEventsSent = await super.close(timeout);\n    if (this.traceProvider) {\n      await this.traceProvider.shutdown();\n    }\n\n    return allEventsSent;\n  }\n\n  /**\n   * Will start tracking client reports for this client.\n   *\n   * NOTICE: This method will create an interval that is periodically called and attach a `process.on('beforeExit')`\n   * hook. To clean up these resources, call `.close()` when you no longer intend to use the client. Not doing so will\n   * result in a memory leak.\n   */\n  // The reason client reports need to be manually activated with this method instead of just enabling them in a\n  // constructor, is that if users periodically and unboundedly create new clients, we will create more and more\n  // intervals and beforeExit listeners, thus leaking memory. In these situations, users are required to call\n  // `client.close()` in order to dispose of the acquired resources.\n  // We assume that calling this method in Sentry.init() is a sensible default, because calling Sentry.init() over and\n  // over again would also result in memory leaks.\n  // Note: We have experimented with using `FinalizationRegisty` to clear the interval when the client is garbage\n  // collected, but it did not work, because the cleanup function never got called.\n  public startClientReportTracking(): void {\n    const clientOptions = this.getOptions();\n    if (clientOptions.sendClientReports) {\n      this._clientReportOnExitFlushListener = () => {\n        this._flushOutcomes();\n      };\n\n      this._clientReportInterval = setInterval(() => {\n        DEBUG_BUILD && debug.log('Flushing client reports based on interval.');\n        this._flushOutcomes();\n      }, clientOptions.clientReportFlushInterval ?? DEFAULT_CLIENT_REPORT_FLUSH_INTERVAL_MS)\n        // Unref is critical for not preventing the process from exiting because the interval is active.\n        .unref();\n\n      process.on('beforeExit', this._clientReportOnExitFlushListener);\n    }\n  }\n\n  /** @inheritDoc */\n  protected _setupIntegrations(): void {\n    // Clear AI provider skip registrations before setting up integrations\n    // This ensures a clean state between different client initializations\n    // (e.g., when LangChain skips OpenAI in one client, but a subsequent client uses OpenAI standalone)\n    _INTERNAL_clearAiProviderSkips();\n    super._setupIntegrations();\n  }\n\n  /** Custom implementation for OTEL, so we can handle scope-span linking. */\n  protected _getTraceInfoFromScope(\n    scope: Scope | undefined,\n  ): [dynamicSamplingContext: Partial<DynamicSamplingContext> | undefined, traceContext: TraceContext | undefined] {\n    if (!scope) {\n      return [undefined, undefined];\n    }\n\n    return getTraceContextForScope(this, scope);\n  }\n}\n", "import { consoleSandbox } from '@sentry/core';\nimport { NODE_MAJOR, NODE_MINOR } from '../nodeVersion';\n\nfunction isCjs(): boolean {\n  /*! rollup-include-cjs-only */\n  return true;\n  /*! rollup-include-cjs-only-end */\n\n  /*! rollup-include-esm-only */\n  return false;\n  /*! rollup-include-esm-only-end */\n}\n\nlet hasWarnedAboutNodeVersion: boolean | undefined;\n\n/**\n * Check if the current Node.js version supports module.register\n */\nexport function supportsEsmLoaderHooks(): boolean {\n  if (isCjs()) {\n    return false;\n  }\n\n  if (NODE_MAJOR >= 21 || (NODE_MAJOR === 20 && NODE_MINOR >= 6) || (NODE_MAJOR === 18 && NODE_MINOR >= 19)) {\n    return true;\n  }\n\n  if (!hasWarnedAboutNodeVersion) {\n    hasWarnedAboutNodeVersion = true;\n\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `[Sentry] You are using Node.js v${process.versions.node} in ESM mode (\"import syntax\"). The Sentry Node.js SDK is not compatible with ESM in Node.js versions before 18.19.0 or before 20.6.0. Please either build your application with CommonJS (\"require() syntax\"), or upgrade your Node.js version.`,\n      );\n    });\n  }\n\n  return false;\n}\n", "import { debug, GLOBAL_OBJ } from '@sentry/core';\nimport { createAddHookMessageChannel } from 'import-in-the-middle';\nimport * as moduleModule from 'module';\nimport { supportsEsmLoaderHooks } from '../utils/detection';\n\n/**\n * Initialize the ESM loader - This method is private and not part of the public\n * API.\n *\n * @ignore\n */\nexport function initializeEsmLoader(): void {\n  if (!supportsEsmLoaderHooks()) {\n    return;\n  }\n\n  if (!GLOBAL_OBJ._sentryEsmLoaderHookRegistered) {\n    GLOBAL_OBJ._sentryEsmLoaderHookRegistered = true;\n\n    try {\n      const { addHookMessagePort } = createAddHookMessageChannel();\n      moduleModule.register('import-in-the-middle/hook.mjs', import.meta.url, {\n        data: { addHookMessagePort, include: [] },\n        transferList: [addHookMessagePort],\n      });\n    } catch (error) {\n      debug.warn(\"Failed to register 'import-in-the-middle' hook\", error);\n    }\n  }\n}\n", "import type { Integration, Options } from '@sentry/core';\nimport {\n  applySdkMetadata,\n  consoleSandbox,\n  conversationIdIntegration,\n  debug,\n  envToBool,\n  functionToStringIntegration,\n  getCurrentScope,\n  getIntegrationsToSetup,\n  hasSpansEnabled,\n  inboundFiltersIntegration,\n  linkedErrorsIntegration,\n  propagationContextFromHeaders,\n  requestDataIntegration,\n  stackParserFromStackParserOptions,\n} from '@sentry/core';\nimport {\n  enhanceDscWithOpenTelemetryRootSpanName,\n  openTelemetrySetupCheck,\n  setOpenTelemetryContextAsyncContextStrategy,\n  setupEventContextTrace,\n} from '@sentry/opentelemetry';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { childProcessIntegration } from '../integrations/childProcess';\nimport { nodeContextIntegration } from '../integrations/context';\nimport { contextLinesIntegration } from '../integrations/contextlines';\nimport { httpIntegration } from '../integrations/http';\nimport { localVariablesIntegration } from '../integrations/local-variables';\nimport { modulesIntegration } from '../integrations/modules';\nimport { nativeNodeFetchIntegration } from '../integrations/node-fetch';\nimport { onUncaughtExceptionIntegration } from '../integrations/onuncaughtexception';\nimport { onUnhandledRejectionIntegration } from '../integrations/onunhandledrejection';\nimport { processSessionIntegration } from '../integrations/processSession';\nimport { INTEGRATION_NAME as SPOTLIGHT_INTEGRATION_NAME, spotlightIntegration } from '../integrations/spotlight';\nimport { consoleIntegration } from '../integrations/console';\nimport { systemErrorIntegration } from '../integrations/systemError';\nimport { makeNodeTransport } from '../transports';\nimport type { NodeClientOptions, NodeOptions } from '../types';\nimport { getSpotlightConfig } from '../utils/spotlight';\nimport { defaultStackParser, getSentryRelease } from './api';\nimport { NodeClient } from './client';\nimport { initializeEsmLoader } from './esmLoader';\n\n/**\n * Get default integrations for the Node-Core SDK.\n */\nexport function getDefaultIntegrations(): Integration[] {\n  return [\n    // Common\n    // TODO(v11): Replace with `eventFiltersIntegration` once we remove the deprecated `inboundFiltersIntegration`\n    // eslint-disable-next-line typescript/no-deprecated\n    inboundFiltersIntegration(),\n    functionToStringIntegration(),\n    linkedErrorsIntegration(),\n    requestDataIntegration(),\n    systemErrorIntegration(),\n    conversationIdIntegration(),\n    // Native Wrappers\n    consoleIntegration(),\n    httpIntegration(),\n    nativeNodeFetchIntegration(),\n    // Global Handlers\n    onUncaughtExceptionIntegration(),\n    onUnhandledRejectionIntegration(),\n    // Event Info\n    contextLinesIntegration(),\n    localVariablesIntegration(),\n    nodeContextIntegration(),\n    childProcessIntegration(),\n    processSessionIntegration(),\n    modulesIntegration(),\n  ];\n}\n\n/**\n * Initialize Sentry for Node.\n */\nexport function init(options: NodeOptions | undefined = {}): NodeClient | undefined {\n  return _init(options, getDefaultIntegrations);\n}\n\n/**\n * Initialize Sentry for Node, without any integrations added by default.\n */\nexport function initWithoutDefaultIntegrations(options: NodeOptions | undefined = {}): NodeClient {\n  return _init(options, () => []);\n}\n\n/**\n * Initialize Sentry for Node, without performance instrumentation.\n */\nfunction _init(\n  _options: NodeOptions | undefined = {},\n  getDefaultIntegrationsImpl: (options: Options) => Integration[],\n): NodeClient {\n  const options = getClientOptions(_options, getDefaultIntegrationsImpl);\n\n  if (options.debug === true) {\n    if (DEBUG_BUILD) {\n      debug.enable();\n    } else {\n      // use `console.warn` rather than `debug.warn` since by non-debug bundles have all `debug.x` statements stripped\n      consoleSandbox(() => {\n        // eslint-disable-next-line no-console\n        console.warn('[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.');\n      });\n    }\n  }\n\n  if (options.registerEsmLoaderHooks !== false) {\n    initializeEsmLoader();\n  }\n\n  setOpenTelemetryContextAsyncContextStrategy(options);\n\n  const scope = getCurrentScope();\n  scope.update(options.initialScope);\n\n  if (options.spotlight && !options.integrations.some(({ name }) => name === SPOTLIGHT_INTEGRATION_NAME)) {\n    options.integrations.push(\n      spotlightIntegration({\n        sidecarUrl: typeof options.spotlight === 'string' ? options.spotlight : undefined,\n      }),\n    );\n  }\n\n  applySdkMetadata(options, 'node-core');\n\n  const client = new NodeClient(options);\n  // The client is on the current scope, from where it generally is inherited\n  getCurrentScope().setClient(client);\n\n  client.init();\n\n  /*! rollup-include-cjs-only */\n  debug.log(`SDK initialized from CommonJS`);\n  /*! rollup-include-cjs-only-end */\n  /*! rollup-include-esm-only */\n  debug.log(`SDK initialized from ESM`);\n  /*! rollup-include-esm-only-end */\n\n  client.startClientReportTracking();\n\n  updateScopeFromEnvVariables();\n\n  enhanceDscWithOpenTelemetryRootSpanName(client);\n  setupEventContextTrace(client);\n\n  // Ensure we flush events when vercel functions are ended\n  // See: https://vercel.com/docs/functions/functions-api-reference#sigterm-signal\n  if (process.env.VERCEL) {\n    process.on('SIGTERM', async () => {\n      // We have 500ms for processing here, so we try to make sure to have enough time to send the events\n      await client.flush(200);\n    });\n  }\n\n  return client;\n}\n\n/**\n * Validate that your OpenTelemetry setup is correct.\n */\nexport function validateOpenTelemetrySetup(): void {\n  if (!DEBUG_BUILD) {\n    return;\n  }\n\n  const setup = openTelemetrySetupCheck();\n\n  const required: ReturnType<typeof openTelemetrySetupCheck> = ['SentryContextManager', 'SentryPropagator'];\n\n  const hasSentryTracerProvider = setup.includes('SentryTracerProvider');\n\n  if (hasSpansEnabled() && !hasSentryTracerProvider) {\n    required.push('SentrySpanProcessor');\n  }\n\n  for (const k of required) {\n    if (!setup.includes(k)) {\n      debug.error(\n        `You have to set up the ${k}. Without this, the OpenTelemetry & Sentry integration will not work properly.`,\n      );\n    }\n  }\n\n  if (!hasSentryTracerProvider && !setup.includes('SentrySampler')) {\n    debug.warn(\n      'You have to set up the SentrySampler. Without this, the OpenTelemetry & Sentry integration may still work, but sample rates set for the Sentry SDK will not be respected. If you use a custom sampler, make sure to use `wrapSamplingDecision`.',\n    );\n  }\n}\n\nfunction getClientOptions(\n  options: NodeOptions,\n  getDefaultIntegrationsImpl: (options: Options) => Integration[],\n): NodeClientOptions {\n  const release = getRelease(options.release);\n\n  const spotlight = getSpotlightConfig(options.spotlight);\n\n  const tracesSampleRate = getTracesSampleRate(options.tracesSampleRate);\n\n  const mergedOptions = {\n    ...options,\n    dsn: options.dsn ?? process.env.SENTRY_DSN,\n    environment: options.environment ?? process.env.SENTRY_ENVIRONMENT,\n    sendClientReports: options.sendClientReports ?? true,\n    transport: options.transport ?? makeNodeTransport,\n    stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n    release,\n    tracesSampleRate,\n    spotlight,\n    debug: envToBool(options.debug ?? process.env.SENTRY_DEBUG),\n  };\n\n  const integrations = options.integrations;\n  const defaultIntegrations = options.defaultIntegrations ?? getDefaultIntegrationsImpl(mergedOptions);\n\n  const resolvedIntegrations = getIntegrationsToSetup({\n    defaultIntegrations,\n    integrations,\n  });\n\n  return {\n    ...mergedOptions,\n    integrations: resolvedIntegrations,\n  };\n}\n\nfunction getRelease(release: NodeOptions['release']): string | undefined {\n  if (release !== undefined) {\n    return release;\n  }\n\n  const detectedRelease = getSentryRelease();\n  if (detectedRelease !== undefined) {\n    return detectedRelease;\n  }\n\n  return undefined;\n}\n\nfunction getTracesSampleRate(tracesSampleRate: NodeOptions['tracesSampleRate']): number | undefined {\n  if (tracesSampleRate !== undefined) {\n    return tracesSampleRate;\n  }\n\n  const sampleRateFromEnv = process.env.SENTRY_TRACES_SAMPLE_RATE;\n  if (!sampleRateFromEnv) {\n    return undefined;\n  }\n\n  const parsed = parseFloat(sampleRateFromEnv);\n  return isFinite(parsed) ? parsed : undefined;\n}\n\n/**\n * Update scope and propagation context based on environmental variables.\n *\n * See https://github.com/getsentry/rfcs/blob/main/text/0071-continue-trace-over-process-boundaries.md\n * for more details.\n */\nfunction updateScopeFromEnvVariables(): void {\n  if (envToBool(process.env.SENTRY_USE_ENVIRONMENT) !== false) {\n    const sentryTraceEnv = process.env.SENTRY_TRACE;\n    const baggageEnv = process.env.SENTRY_BAGGAGE;\n    const propagationContext = propagationContextFromHeaders(sentryTraceEnv, baggageEnv);\n    getCurrentScope().setPropagationContext(propagationContext);\n  }\n}\n", "import type { Span } from '@opentelemetry/api';\nimport type { SpanOrigin } from '@sentry/core';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';\n\n/** Adds an origin to an OTEL Span. */\nexport function addOriginToSpan(span: Span, origin: SpanOrigin): void {\n  span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, origin);\n}\n", "export { httpIntegration } from './integrations/http/index.js';\nexport { httpServerSpansIntegration } from './integrations/http/httpServerSpansIntegration.js';\nexport { httpServerIntegration } from './integrations/http/httpServerIntegration.js';\nexport { SentryHttpInstrumentation, instrumentHttpOutgoingRequests } from './integrations/http/SentryHttpInstrumentation.js';\nexport { nativeNodeFetchIntegration } from './integrations/node-fetch/index.js';\nexport { instrumentUndici } from './integrations/node-fetch/undici-instrumentation.js';\nexport { SentryNodeFetchInstrumentation } from './integrations/node-fetch/SentryNodeFetchInstrumentation.js';\nexport { SentryContextManager } from './otel/contextManager.js';\nexport { setupOpenTelemetryLogger } from './otel/logger.js';\nexport { INSTRUMENTED, generateInstrumentOnce, instrumentWhenWrapped } from './otel/instrument.js';\nexport { getDefaultIntegrations, init, initWithoutDefaultIntegrations, validateOpenTelemetrySetup } from './sdk/index.js';\nexport { setIsolationScope } from './sdk/scope.js';\nexport { NodeClient } from './sdk/client.js';\nexport { ensureIsWrapped } from './utils/ensureIsWrapped.js';\nexport { processSessionIntegration } from './integrations/processSession.js';\nexport { setOpenTelemetryContextAsyncContextStrategy as setNodeAsyncContextStrategy } from '@sentry/opentelemetry';\nexport { anrIntegration, disableAnrDetectionForCallback } from './integrations/anr/index.js';\nexport { SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, Scope, addBreadcrumb, addEventProcessor, addIntegration, bindScopeToEmitter, captureCheckIn, captureConsoleIntegration, captureEvent, captureException, captureFeedback, captureMessage, captureSession, close, consoleLoggingIntegration, continueTrace, createConsolaReporter, createTransport, dedupeIntegration, endSession, envToBool, eventFiltersIntegration, extraErrorDataIntegration, featureFlagsIntegration, flush, functionToStringIntegration, getActiveSpan, getClient, getCurrentScope, getGlobalScope, getIsolationScope, getRequestUrl, getRootSpan, getSpanDescendants, getSpanStatusFromHttpCode, getTraceData, getTraceMetaTags, inboundFiltersIntegration, instrumentSupabaseClient, isEnabled, isInitialized, lastEventId, linkedErrorsIntegration, metrics, parameterize, profiler, requestDataIntegration, rewriteFramesIntegration, setAttribute, setAttributes, setContext, setCurrentClient, setExtra, setExtras, setHttpStatus, setMeasurement, setTag, setTags, setUser, spanStreamingIntegration, spanToBaggageHeader, spanToJSON, spanToTraceHeader, startInactiveSpan, startNewTrace, startSession, startSpan, startSpanManual, supabaseIntegration, suppressTracing, trpcMiddleware, updateSpanName, withActiveSpan, withIsolationScope, withMonitor, withScope, withStreamedSpan, wrapMcpServerWithSentry, zodErrorsIntegration } from '@sentry/core';\nimport * as exports$1 from './logs/exports.js';\nexport { exports$1 as logger };\nexport { nodeContextIntegration } from './integrations/context.js';\nexport { _INTERNAL_normalizeCollectionInterval, nodeRuntimeMetricsIntegration } from './integrations/nodeRuntimeMetrics.js';\nexport { contextLinesIntegration } from './integrations/contextlines.js';\nexport { localVariablesIntegration } from './integrations/local-variables/index.js';\nexport { modulesIntegration } from './integrations/modules.js';\nexport { onUncaughtExceptionIntegration } from './integrations/onuncaughtexception.js';\nexport { onUnhandledRejectionIntegration } from './integrations/onunhandledrejection.js';\nexport { spotlightIntegration } from './integrations/spotlight.js';\nexport { systemErrorIntegration } from './integrations/systemError.js';\nexport { childProcessIntegration } from './integrations/childProcess.js';\nexport { createSentryWinstonTransport } from './integrations/winston.js';\nexport { pinoIntegration } from './integrations/pino.js';\nexport { consoleIntegration } from './integrations/console.js';\nexport { defaultStackParser, getSentryRelease } from './sdk/api.js';\nexport { createGetModuleFromFilename } from './utils/module.js';\nexport { addOriginToSpan } from './utils/addOriginToSpan.js';\nexport { initializeEsmLoader } from './sdk/esmLoader.js';\nexport { createMissingInstrumentationContext } from './utils/createMissingInstrumentationContext.js';\nexport { makeNodeTransport } from './transports/http.js';\nexport { cron } from './cron/index.js';\nexport { NODE_VERSION } from './nodeVersion.js';\n//# sourceMappingURL=index.js.map\n", "import type { RequestOptions } from 'node:http';\nimport type { HttpClientRequest, HttpIncomingMessage, HttpServerResponse, Span } from '@sentry/core';\nimport { defineIntegration, hasSpansEnabled, stripDataUrlContent, getRequestUrlFromClientRequest } from '@sentry/core';\nimport type {\n  NodeClient,\n  SentryHttpInstrumentationOptions,\n  HttpServerIntegrationOptions,\n  HttpServerSpansIntegrationOptions,\n} from '@sentry/node-core';\nimport { httpServerIntegration, httpServerSpansIntegration, instrumentHttpOutgoingRequests } from '@sentry/node-core';\nimport { URL_FULL } from '@sentry/conventions/attributes';\n\nconst INTEGRATION_NAME = 'Http' as const;\n\n// TODO(v11): Consolidate all the various HTTP integration options into one,\n// and deprecate the duplicated and aliased options.\ninterface HttpOptions {\n  /**\n   * Whether breadcrumbs should be recorded for outgoing requests.\n   * Defaults to true\n   */\n  breadcrumbs?: boolean;\n\n  /**\n   * If set to false, do not emit any spans.\n   * This will ensure that the default HttpInstrumentation from OpenTelemetry is not setup,\n   * only the Sentry-specific instrumentation for request isolation is applied.\n   *\n   * If `skipOpenTelemetrySetup: true` is configured, this defaults to `false`, otherwise it defaults to `true`.\n   */\n  spans?: boolean;\n\n  /**\n   * Whether the integration should create [Sessions](https://docs.sentry.io/product/releases/health/#sessions) for incoming requests to track the health and crash-free rate of your releases in Sentry.\n   * Read more about Release Health: https://docs.sentry.io/product/releases/health/\n   *\n   * Defaults to `true`.\n   */\n  trackIncomingRequestsAsSessions?: boolean;\n\n  /**\n   * Number of milliseconds until sessions tracked with `trackIncomingRequestsAsSessions` will be flushed as a session aggregate.\n   *\n   * Defaults to `60000` (60s).\n   */\n  sessionFlushingDelayMS?: number;\n\n  /**\n   * Whether to inject trace propagation headers (sentry-trace, baggage, traceparent) into outgoing HTTP requests.\n   *\n   * When set to `false`, Sentry will not inject any trace propagation headers, but will still create breadcrumbs\n   * (if `breadcrumbs` is enabled). This is useful when `skipOpenTelemetrySetup: true` is configured and you want\n   * to avoid duplicate trace headers being injected by both Sentry and OpenTelemetry's HttpInstrumentation.\n   *\n   * @default `true`\n   */\n  tracePropagation?: boolean;\n\n  /**\n   * Do not capture spans or breadcrumbs for outgoing HTTP requests to URLs where the given callback returns `true`.\n   * This controls both span & breadcrumb creation - spans will be non recording if tracing is disabled.\n   *\n   * The `url` param contains the entire URL, including query string (if any), protocol, host, etc. of the outgoing request.\n   * For example: `'https://someService.com/users/details?id=123'`\n   *\n   * The `request` param contains the original {@type RequestOptions} object used to make the outgoing request.\n   * You can use it to filter on additional properties like method, headers, etc.\n   */\n  ignoreOutgoingRequests?: (url: string, request: RequestOptions) => boolean;\n\n  /**\n   * Do not capture spans for incoming HTTP requests to URLs where the given callback returns `true`.\n   * Spans will be non recording if tracing is disabled.\n   *\n   * The `urlPath` param consists of the URL path and query string (if any) of the incoming request.\n   * For example: `'/users/details?id=123'`\n   *\n   * The `request` param contains the original {@type IncomingMessage} object of the incoming request.\n   * You can use it to filter on additional properties like method, headers, etc.\n   */\n  ignoreIncomingRequests?: (urlPath: string, request: HttpIncomingMessage) => boolean;\n\n  /**\n   * A hook that can be used to mutate the span for incoming requests.\n   * This is triggered after the span is created, but before it is recorded.\n   */\n  incomingRequestSpanHook?: (span: Span, request: HttpIncomingMessage, response: HttpServerResponse) => void;\n\n  /**\n   * Whether to automatically ignore common static asset requests like favicon.ico, robots.txt, etc.\n   * This helps reduce noise in your transactions.\n   *\n   * @default `true`\n   */\n  ignoreStaticAssets?: boolean;\n\n  /**\n   * Do not capture spans for incoming HTTP requests with the given status codes.\n   * By default, spans with some 3xx and 4xx status codes are ignored (see @default).\n   * Expects an array of status codes or a range of status codes, e.g. [[300,399], 404] would ignore 3xx and 404 status codes.\n   *\n   * @default `[[401, 404], [301, 303], [305, 399]]`\n   */\n  dropSpansForIncomingRequestStatusCodes?: (number | [number, number])[];\n\n  /**\n   * Do not capture the request body for incoming HTTP requests to URLs where the given callback returns `true`.\n   * This can be useful for long running requests where the body is not needed and we want to avoid capturing it.\n   *\n   * @param url Contains the entire URL, including query string (if any), protocol, host, etc. of the incoming request.\n   * @param request Contains the {@type RequestOptions} object used to make the incoming request.\n   */\n  ignoreIncomingRequestBody?: (url: string, request: RequestOptions) => boolean;\n\n  /**\n   * Controls the maximum size of incoming HTTP request bodies attached to events.\n   *\n   * Available options:\n   * - 'none': No request bodies will be attached\n   * - 'small': Request bodies up to 1,000 bytes will be attached\n   * - 'medium': Request bodies up to 10,000 bytes will be attached (default)\n   * - 'always': Request bodies will always be attached\n   *\n   * Note that even with 'always' setting, bodies exceeding 1MB will never be attached\n   * for performance and security reasons.\n   *\n   * @default 'medium'\n   */\n  maxIncomingRequestBodySize?: 'none' | 'small' | 'medium' | 'always';\n\n  /**\n   * If true, do not generate spans for incoming requests at all.\n   * This is used by Remix to avoid generating spans for incoming requests, as it generates its own spans.\n   */\n  disableIncomingRequestSpans?: boolean;\n\n  /**\n   * Additional instrumentation options that are passed to the underlying HttpInstrumentation.\n   */\n  instrumentation?: {\n    requestHook?: (span: Span, req: HttpIncomingMessage | HttpClientRequest) => void;\n    responseHook?: (span: Span, response: HttpIncomingMessage | HttpServerResponse) => void;\n    applyCustomAttributesOnSpan?: (\n      span: Span,\n      request: HttpIncomingMessage | HttpClientRequest,\n      response: HttpIncomingMessage | HttpServerResponse,\n    ) => void;\n  };\n}\n\nexport const instrumentSentryHttp = Object.assign(instrumentHttpOutgoingRequests, {\n  id: `${INTEGRATION_NAME}.sentry`,\n});\n\n/**\n * The http integration instruments Node's internal http and https modules.\n * It creates breadcrumbs and spans for outgoing HTTP requests which will be attached to the currently active span.\n */\nexport const httpIntegration = defineIntegration((options: HttpOptions = {}) => {\n  const spans = options.spans ?? true;\n  const disableIncomingRequestSpans = options.disableIncomingRequestSpans;\n  const enableServerSpans = spans && !disableIncomingRequestSpans;\n\n  const serverOptions = {\n    sessions: options.trackIncomingRequestsAsSessions,\n    sessionFlushingDelayMS: options.sessionFlushingDelayMS,\n    ignoreRequestBody: options.ignoreIncomingRequestBody,\n    maxRequestBodySize: options.maxIncomingRequestBodySize,\n  } satisfies HttpServerIntegrationOptions;\n\n  const serverSpansOptions: HttpServerSpansIntegrationOptions = {\n    ignoreIncomingRequests: options.ignoreIncomingRequests,\n    ignoreStaticAssets: options.ignoreStaticAssets,\n    ignoreStatusCodes: options.dropSpansForIncomingRequestStatusCodes,\n    instrumentation: options.instrumentation,\n    onSpanCreated: options.incomingRequestSpanHook,\n  };\n\n  const server = httpServerIntegration(serverOptions);\n  const serverSpans = httpServerSpansIntegration(serverSpansOptions);\n\n  return {\n    name: INTEGRATION_NAME,\n    setup(client: NodeClient) {\n      const clientOptions = client.getOptions();\n\n      if (enableServerSpans && hasSpansEnabled(clientOptions)) {\n        serverSpans.setup(client);\n      }\n    },\n    setupOnce() {\n      server.setupOnce();\n\n      const sentryHttpInstrumentationOptions: SentryHttpInstrumentationOptions = {\n        breadcrumbs: options.breadcrumbs,\n        spans,\n        propagateTraceInOutgoingRequests: options.tracePropagation ?? true,\n        createSpansForOutgoingRequests: spans,\n        ignoreOutgoingRequests: options.ignoreOutgoingRequests,\n        outgoingRequestHook: (span: Span, request: HttpClientRequest) => {\n          // Sanitize data URLs to prevent long base64 strings in span attributes\n          const url = getRequestUrlFromClientRequest(request);\n          if (url.startsWith('data:')) {\n            const sanitizedUrl = stripDataUrlContent(url);\n            // TODO(v11): Update these to the Sentry semantic attributes.\n            // https://getsentry.github.io/sentry-conventions/attributes/\n            span.setAttribute('http.url', sanitizedUrl);\n            span.setAttribute(URL_FULL, sanitizedUrl);\n            span.updateName(`${request.method || 'GET'} ${sanitizedUrl}`);\n          }\n          options.instrumentation?.requestHook?.(span, request);\n        },\n        outgoingResponseHook: options.instrumentation?.responseHook,\n        outgoingRequestApplyCustomAttributes: options.instrumentation?.applyCustomAttributesOnSpan,\n      };\n\n      // This is Sentry-specific instrumentation for outgoing request\n      // breadcrumbs & trace propagation. It uses the diagnostic channels on\n      // node versions that support it, falling back to monkey-patching when\n      // needed.\n      instrumentHttpOutgoingRequests(sentryHttpInstrumentationOptions);\n    },\n    processEvent(event) {\n      // Always run this, even if spans are disabled\n      // The reason being that e.g. the remix integration disables span\n      // creation here but still wants to use the ignore status codes option\n      return serverSpans.processEvent(event);\n    },\n  };\n});\n", "import { instrumentUndici, type NodeFetchOptions } from '@sentry/node-core';\nimport type { NodeClientOptions } from '../types';\nimport type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration, getClient, hasSpansEnabled } from '@sentry/core';\n\n/**\n * This is a variant of the node-core integration where the default for spans is different.\n * In v11, this will be the only implementation.\n */\nconst _nativeNodeFetchIntegration = ((options: NodeFetchOptions = {}) => {\n  return {\n    name: 'NodeFetch' as const,\n    setupOnce() {\n      const clientOptions = getClient()?.getOptions();\n      instrumentUndici({\n        ...options,\n        spans: _shouldInstrumentSpans(options, clientOptions),\n      });\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Instrument outgoing fetch requests made through the native node `fetch` API.\n * This emits (depending on the integration options) spans and breadcrumbs, as well as injecting trace propagation headers into the request.\n */\nexport const nativeNodeFetchIntegration = defineIntegration(_nativeNodeFetchIntegration);\n\nfunction _shouldInstrumentSpans(options: NodeFetchOptions, clientOptions: Partial<NodeClientOptions> = {}): boolean {\n  // If `spans` is passed in, it takes precedence\n  // Else, we by default emit spans, unless `skipOpenTelemetrySetup` is set to `true` or spans are not enabled\n  return options.spans ?? (!clientOptions.skipOpenTelemetrySetup && hasSpansEnabled(clientOptions));\n}\n", "declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n", "import { getActiveSpan, getRootSpan, SEMANTIC_ATTRIBUTE_SENTRY_OP, spanToJSON } from '@sentry/core';\n\n/**\n * Set the `http.route` attribute on the root HTTP server span for the current trace.\n *\n * No-op when there is no active span, no root span, or the root span is not an\n * `http.server` span — so framework instrumentations can call this unconditionally\n * without risking attribute pollution on non-HTTP root spans.\n */\nexport function setHttpServerSpanRouteAttribute(route: string): void {\n  const activeSpan = getActiveSpan();\n  if (!activeSpan) {\n    return;\n  }\n  const rootSpan = getRootSpan(activeSpan);\n  if (!rootSpan) {\n    return;\n  }\n  if (spanToJSON(rootSpan).data[SEMANTIC_ATTRIBUTE_SENTRY_OP] !== 'http.server') {\n    return;\n  }\n  rootSpan.setAttribute('http.route', route);\n}\n", "// Automatic istrumentation for Express using OTel\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition } from '@opentelemetry/instrumentation';\n\nimport { ensureIsWrapped, generateInstrumentOnce } from '@sentry/node-core';\nimport {\n  type ExpressIntegration,\n  type ExpressIntegrationOptions,\n  type IntegrationFn,\n  debug,\n  patchExpressModule,\n  SDK_VERSION,\n  defineIntegration,\n  setupExpressErrorHandler as coreSetupExpressErrorHandler,\n  type ExpressHandlerOptions,\n} from '@sentry/core';\nexport { expressErrorHandler } from '@sentry/core';\nimport { DEBUG_BUILD } from '../../debug-build';\nimport { setHttpServerSpanRouteAttribute } from '../../utils/setHttpServerSpanRouteAttribute';\n\nconst INTEGRATION_NAME = 'Express' as const;\nconst SUPPORTED_VERSIONS = ['>=4.0.0 <6'];\n\nexport function setupExpressErrorHandler(\n  //oxlint-disable-next-line no-explicit-any\n  app: { use: (middleware: any) => unknown },\n  options?: ExpressHandlerOptions,\n): void {\n  coreSetupExpressErrorHandler(app, options);\n  ensureIsWrapped(app.use, 'express');\n}\n\nexport type ExpressInstrumentationConfig = InstrumentationConfig &\n  Omit<ExpressIntegrationOptions, 'express' | 'onRouteResolved'>;\n\nexport const instrumentExpress = generateInstrumentOnce(\n  INTEGRATION_NAME,\n  (options?: ExpressInstrumentationConfig) => new ExpressInstrumentation(options),\n);\n\nexport class ExpressInstrumentation extends InstrumentationBase<ExpressInstrumentationConfig> {\n  public constructor(config: ExpressInstrumentationConfig = {}) {\n    super('sentry-express', SDK_VERSION, config);\n  }\n  public init(): InstrumentationNodeModuleDefinition {\n    const module = new InstrumentationNodeModuleDefinition(\n      'express',\n      SUPPORTED_VERSIONS,\n      express => {\n        try {\n          patchExpressModule(express, () => ({\n            ...this.getConfig(),\n            onRouteResolved(route) {\n              if (route) {\n                setHttpServerSpanRouteAttribute(route);\n              }\n            },\n          }));\n        } catch (e) {\n          DEBUG_BUILD && debug.error('Failed to patch express module:', e);\n        }\n        return express;\n      },\n      // we do not ever actually unpatch in our SDKs\n      express => express,\n    );\n    return module;\n  }\n}\nconst _expressIntegration = ((options?: ExpressInstrumentationConfig) => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      instrumentExpress(options);\n    },\n    // Read back by `expressErrorHandler` in `@sentry/core`, which is what captures Express errors.\n    getShouldHandleError() {\n      return options?.shouldHandleError;\n    },\n  } satisfies ExpressIntegration;\n}) satisfies IntegrationFn;\n\nexport const expressIntegration = defineIntegration(_expressIntegration);\n", "// Vendored from https://github.com/open-telemetry/opentelemetry-js-contrib/blob/407f61591ba69a39a6908264379d4d98a48dbec4/plugins/node/opentelemetry-instrumentation-fastify/src/enums/AttributeNames.ts\n//\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport enum AttributeNames {\n  FASTIFY_NAME = 'fastify.name',\n  FASTIFY_TYPE = 'fastify.type',\n  HOOK_NAME = 'hook.name',\n  PLUGIN_NAME = 'plugin.name',\n}\n\nexport enum FastifyTypes {\n  MIDDLEWARE = 'middleware',\n  REQUEST_HANDLER = 'request_handler',\n}\n\nexport enum FastifyNames {\n  MIDDLEWARE = 'middleware',\n  REQUEST_HANDLER = 'request handler',\n}\n", "// Vendored from https://github.com/open-telemetry/opentelemetry-js-contrib/blob/407f61591ba69a39a6908264379d4d98a48dbec4/plugins/node/opentelemetry-instrumentation-fastify/src/constants.ts\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const spanRequestSymbol = Symbol('opentelemetry.instrumentation.fastify.request_active_span');\n\n// The instrumentation creates a span for invocations of lifecycle hook handlers\n// that take `(request, reply, ...[, done])` arguments. Currently this is all\n// lifecycle hooks except `onRequestAbort`.\n// https://fastify.dev/docs/latest/Reference/Hooks\nexport const hooksNamesToWrap = new Set([\n  'onTimeout',\n  'onRequest',\n  'preParsing',\n  'preValidation',\n  'preSerialization',\n  'preHandler',\n  'onSend',\n  'onResponse',\n  'onError',\n]);\n", "// Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/blob/407f61591ba69a39a6908264379d4d98a48dbec4/plugins/node/opentelemetry-instrumentation-fastify/src/utils.ts\n/* eslint-disable jsdoc/require-jsdoc */\n/* eslint-disable @typescript-eslint/no-dynamic-delete */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { type Attributes, type Span, SpanStatusCode, type Tracer } from '@opentelemetry/api';\nimport { spanRequestSymbol } from './constants';\nimport type { PluginFastifyReply } from './internal-types';\n\n/**\n * Starts Span\n * @param reply - reply function\n * @param tracer - tracer\n * @param spanName - span name\n * @param spanAttributes - span attributes\n */\nexport function startSpan(\n  reply: PluginFastifyReply,\n  tracer: Tracer,\n  spanName: string,\n  spanAttributes: Attributes = {},\n) {\n  const span = tracer.startSpan(spanName, { attributes: spanAttributes });\n\n  const spans: Span[] = reply[spanRequestSymbol] || [];\n  spans.push(span);\n\n  Object.defineProperty(reply, spanRequestSymbol, {\n    enumerable: false,\n    configurable: true,\n    value: spans,\n  });\n\n  return span;\n}\n\n/**\n * Ends span\n * @param reply - reply function\n * @param err - error\n */\nexport function endSpan(reply: PluginFastifyReply, err?: any) {\n  const spans = reply[spanRequestSymbol] || [];\n  // there is no active span, or it has already ended\n  if (!spans.length) {\n    return;\n  }\n  // biome-ignore lint/complexity/noForEach: <explanation>\n  spans.forEach((span: Span) => {\n    if (err) {\n      span.setStatus({\n        code: SpanStatusCode.ERROR,\n        message: err.message,\n      });\n      span.recordException(err);\n    }\n    span.end();\n  });\n  delete reply[spanRequestSymbol];\n}\n\n// @TODO after approve add this to instrumentation package and replace usage\n// when it will be released\n\n/**\n * This function handles the missing case from instrumentation package when\n * execute can either return a promise or void. And using async is not an\n * option as it is producing unwanted side effects.\n * @param execute - function to be executed\n * @param onFinish - function called when function executed\n * @param preventThrowingError - prevent to throw error when execute\n * function fails\n */\nexport function safeExecuteInTheMiddleMaybePromise<T>(\n  execute: () => Promise<T>,\n  onFinish: (e: unknown, result?: T) => void,\n  preventThrowingError?: boolean,\n): Promise<T>;\nexport function safeExecuteInTheMiddleMaybePromise<T>(\n  execute: () => T,\n  onFinish: (e: unknown, result?: T) => void,\n  preventThrowingError?: boolean,\n): T;\nexport function safeExecuteInTheMiddleMaybePromise<T>(\n  execute: () => T | Promise<T>,\n  onFinish: (e: unknown, result?: T) => void,\n  preventThrowingError?: boolean,\n): T | Promise<T> | undefined {\n  let error: unknown;\n  let result: T | Promise<T> | undefined = undefined;\n  try {\n    result = execute();\n\n    if (isPromise(result)) {\n      result.then(\n        res => onFinish(undefined, res),\n        err => onFinish(err),\n      );\n    }\n  } catch (e) {\n    error = e;\n  } finally {\n    if (!isPromise(result)) {\n      onFinish(error, result);\n      if (error && !preventThrowingError) {\n        // eslint-disable-next-line no-unsafe-finally\n        throw error;\n      }\n    }\n    // eslint-disable-next-line no-unsafe-finally\n    return result;\n  }\n}\n\nfunction isPromise<T>(val: T | Promise<T>): val is Promise<T> {\n  return (\n    (typeof val === 'object' && val && typeof Object.getOwnPropertyDescriptor(val, 'then')?.value === 'function') ||\n    false\n  );\n}\n", "// Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/blob/407f61591ba69a39a6908264379d4d98a48dbec4/plugins/node/opentelemetry-instrumentation-fastify/src/instrumentation.ts\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-this-alias */\n/* eslint-disable jsdoc/require-jsdoc */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { type Attributes, context, SpanStatusCode, trace } from '@opentelemetry/api';\nimport {\n  InstrumentationBase,\n  InstrumentationNodeModuleDefinition,\n  safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport { HTTP_ROUTE } from '@sentry/conventions/attributes';\nimport type { Span } from '@sentry/core';\nimport {\n  getClient,\n  getIsolationScope,\n  SDK_VERSION,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  spanToJSON,\n} from '@sentry/core';\nimport { setHttpServerSpanRouteAttribute } from '../../../../utils/setHttpServerSpanRouteAttribute';\nimport type {\n  FastifyErrorCodes,\n  FastifyInstance,\n  FastifyReply,\n  FastifyRequest,\n  HandlerOriginal,\n  HookHandlerDoneFunction,\n} from '../types';\nimport { AttributeNames, FastifyNames, FastifyTypes } from './enums/AttributeNames';\nimport type { PluginFastifyReply } from './internal-types';\nimport type { FastifyInstrumentationConfig } from './types';\nimport { endSpan, safeExecuteInTheMiddleMaybePromise, startSpan } from './utils';\n/** @knipignore */\n\nconst PACKAGE_NAME = '@sentry/instrumentation-fastify-v3';\nconst ANONYMOUS_NAME = 'anonymous';\n\n// The instrumentation creates a span for invocations of lifecycle hook handlers\n// that take `(request, reply, ...[, done])` arguments. Currently this is all\n// lifecycle hooks except `onRequestAbort`.\n// https://fastify.dev/docs/latest/Reference/Hooks\nconst hooksNamesToWrap = new Set([\n  'onTimeout',\n  'onRequest',\n  'preParsing',\n  'preValidation',\n  'preSerialization',\n  'preHandler',\n  'onSend',\n  'onResponse',\n  'onError',\n]);\n\n/**\n * Fastify instrumentation for OpenTelemetry\n */\nexport class FastifyInstrumentationV3 extends InstrumentationBase<FastifyInstrumentationConfig> {\n  public constructor(config: FastifyInstrumentationConfig = {}) {\n    super(PACKAGE_NAME, SDK_VERSION, config);\n  }\n\n  public init(): InstrumentationNodeModuleDefinition[] {\n    return [\n      new InstrumentationNodeModuleDefinition('fastify', ['>=3.0.0 <3.21.0'], moduleExports => {\n        return this._patchConstructor(moduleExports);\n      }),\n    ];\n  }\n\n  private _hookOnRequest() {\n    const instrumentation = this;\n\n    return function onRequest(request: FastifyRequest, reply: FastifyReply, done: HookHandlerDoneFunction) {\n      if (!instrumentation.isEnabled()) {\n        return done();\n      }\n      instrumentation._wrap(reply, 'send', instrumentation._patchSend());\n\n      const anyRequest = request as any;\n\n      const routeName = anyRequest.routeOptions\n        ? anyRequest.routeOptions.url // since fastify@4.10.0\n        : request.routerPath;\n      if (routeName) {\n        setHttpServerSpanRouteAttribute(routeName);\n      }\n\n      const method = request.method || 'GET';\n\n      getIsolationScope().setTransactionName(`${method} ${routeName}`);\n      done();\n    };\n  }\n\n  private _wrapHandler(\n    pluginName: string,\n    hookName: string,\n    original: HandlerOriginal,\n    syncFunctionWithDone: boolean,\n  ): () => Promise<unknown> {\n    const instrumentation = this;\n    this._diag.debug('Patching fastify route.handler function');\n\n    return function (this: any, ...args: unknown[]): Promise<unknown> {\n      if (!instrumentation.isEnabled()) {\n        return original.apply(this, args);\n      }\n\n      const name = original.name || pluginName || ANONYMOUS_NAME;\n      const spanName = `${FastifyNames.MIDDLEWARE} - ${name}`;\n\n      const reply = args[1] as PluginFastifyReply;\n\n      const span = startSpan(reply, instrumentation.tracer, spanName, {\n        [AttributeNames.FASTIFY_TYPE]: FastifyTypes.MIDDLEWARE,\n        [AttributeNames.PLUGIN_NAME]: pluginName,\n        [AttributeNames.HOOK_NAME]: hookName,\n      });\n\n      const origDone = syncFunctionWithDone && (args[args.length - 1] as HookHandlerDoneFunction);\n      if (origDone) {\n        args[args.length - 1] = function (...doneArgs: Parameters<HookHandlerDoneFunction>) {\n          endSpan(reply);\n          origDone.apply(this, doneArgs);\n        };\n      }\n\n      return context.with(trace.setSpan(context.active(), span), () => {\n        return safeExecuteInTheMiddleMaybePromise(\n          () => {\n            return original.apply(this, args);\n          },\n          err => {\n            if (err instanceof Error) {\n              span.setStatus({\n                code: SpanStatusCode.ERROR,\n                message: err.message,\n              });\n              span.recordException(err);\n            }\n            // async hooks should end the span as soon as the promise is resolved\n            if (!syncFunctionWithDone) {\n              endSpan(reply);\n            }\n          },\n        );\n      });\n    };\n  }\n\n  private _wrapAddHook(): (original: FastifyInstance['addHook']) => () => FastifyInstance {\n    const instrumentation = this;\n    this._diag.debug('Patching fastify server.addHook function');\n\n    // biome-ignore lint/complexity/useArrowFunction: <explanation>\n    return function (original: FastifyInstance['addHook']): () => FastifyInstance {\n      return function wrappedAddHook(this: any, ...args: any) {\n        const name = args[0] as string;\n        const handler = args[1] as HandlerOriginal;\n        const pluginName = this.pluginName;\n        if (!hooksNamesToWrap.has(name)) {\n          return original.apply(this, args);\n        }\n\n        const syncFunctionWithDone =\n          typeof args[args.length - 1] === 'function' && handler.constructor.name !== 'AsyncFunction';\n\n        return original.apply(this, [\n          name,\n          instrumentation._wrapHandler(pluginName, name, handler, syncFunctionWithDone),\n        ] as never);\n      };\n    };\n  }\n\n  private _patchConstructor(moduleExports: {\n    fastify: () => FastifyInstance;\n    errorCodes: FastifyErrorCodes | undefined;\n  }): () => FastifyInstance {\n    const instrumentation = this;\n\n    function fastify(this: FastifyInstance, ...args: any) {\n      const app: FastifyInstance = moduleExports.fastify.apply(this, args);\n      app.addHook('onRequest', instrumentation._hookOnRequest());\n      app.addHook('preHandler', instrumentation._hookPreHandler());\n\n      instrumentClient();\n\n      instrumentation._wrap(app, 'addHook', instrumentation._wrapAddHook());\n\n      return app;\n    }\n\n    if (moduleExports.errorCodes !== undefined) {\n      fastify.errorCodes = moduleExports.errorCodes;\n    }\n    fastify.fastify = fastify;\n    fastify.default = fastify;\n    return fastify;\n  }\n\n  private _patchSend() {\n    const instrumentation = this;\n    this._diag.debug('Patching fastify reply.send function');\n\n    return function patchSend(original: () => FastifyReply): () => FastifyReply {\n      return function send(this: FastifyReply, ...args: any) {\n        const maybeError: any = args[0];\n\n        if (!instrumentation.isEnabled()) {\n          return original.apply(this, args);\n        }\n\n        return safeExecuteInTheMiddle<FastifyReply>(\n          () => {\n            return original.apply(this, args);\n          },\n          err => {\n            if (!err && maybeError instanceof Error) {\n              // eslint-disable-next-line no-param-reassign\n              err = maybeError;\n            }\n            endSpan(this, err);\n          },\n        );\n      };\n    };\n  }\n\n  private _hookPreHandler() {\n    const instrumentation = this;\n    this._diag.debug('Patching fastify preHandler function');\n\n    return function preHandler(this: any, request: FastifyRequest, reply: FastifyReply, done: HookHandlerDoneFunction) {\n      if (!instrumentation.isEnabled()) {\n        return done();\n      }\n      const anyRequest = request as any;\n\n      const handler = anyRequest.routeOptions?.handler || anyRequest.context?.handler;\n      const handlerName = handler?.name.startsWith('bound ') ? handler.name.substring(6) : handler?.name;\n      const spanName = `${FastifyNames.REQUEST_HANDLER} - ${handlerName || this.pluginName || ANONYMOUS_NAME}`;\n\n      const spanAttributes: Attributes = {\n        [AttributeNames.PLUGIN_NAME]: this.pluginName,\n        [AttributeNames.FASTIFY_TYPE]: FastifyTypes.REQUEST_HANDLER,\n        // eslint-disable-next-line typescript/no-deprecated\n        [HTTP_ROUTE]: anyRequest.routeOptions\n          ? anyRequest.routeOptions.url // since fastify@4.10.0\n          : request.routerPath,\n      };\n      if (handlerName) {\n        spanAttributes[AttributeNames.FASTIFY_NAME] = handlerName;\n      }\n      const span = startSpan(reply, instrumentation.tracer, spanName, spanAttributes);\n\n      addFastifyV3SpanAttributes(span);\n\n      const { requestHook } = instrumentation.getConfig();\n      if (requestHook) {\n        safeExecuteInTheMiddle(\n          () => requestHook(span, { request }),\n          e => {\n            if (e) {\n              instrumentation._diag.error('request hook failed', e);\n            }\n          },\n          true,\n        );\n      }\n\n      return context.with(trace.setSpan(context.active(), span), () => {\n        done();\n      });\n    };\n  }\n}\n\nfunction instrumentClient(): void {\n  const client = getClient();\n  if (client) {\n    client.on('spanStart', (span: Span) => {\n      addFastifyV3SpanAttributes(span);\n    });\n  }\n}\n\nfunction addFastifyV3SpanAttributes(span: Span): void {\n  const attributes = spanToJSON(span).data;\n\n  // this is one of: middleware, request_handler\n  const type = attributes['fastify.type'];\n\n  // If this is already set, or we have no fastify span, no need to process again...\n  if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] || !type) {\n    return;\n  }\n\n  span.setAttributes({\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.otel.fastify',\n    [SEMANTIC_ATTRIBUTE_SENTRY_OP]: `${type}.fastify`,\n  });\n\n  // Also update the name, we don't need to \"middleware - \" prefix\n  const name = attributes['fastify.name'] || attributes['plugin.name'] || attributes['hook.name'];\n  if (typeof name === 'string') {\n    // Try removing `fastify -> ` and `@fastify/otel -> ` prefixes\n    // This is a bit of a hack, and not always working for all spans\n    // But it's the best we can do without a proper API\n    const updatedName = name.replace(/^fastify -> /, '').replace(/^@fastify\\/otel -> /, '');\n\n    span.updateName(updatedName);\n  }\n}\n", "// This is an auto-generated file. Do not edit!\n\n// Path: model/op/browser.json\n// Name: browser\n\n/**\n * A full page load of a web application.\n */\nexport const BROWSER_PAGELOAD_SPAN_OP = 'pageload';\n\n/**\n * Client-side browser history change in a web application.\n */\nexport const BROWSER_NAVIGATION_SPAN_OP = 'navigation';\n\n/**\n * Resource as per [Performance Resource Timing](https://w3c.github.io/resource-timing/#sec-performanceresourcetiming). Defaults to resource.other if resource cannot be indentified.\n */\nexport const BROWSER_RESOURCE_SPAN_OP = 'resource';\n\nexport const BROWSER_RESOURCE_SCRIPT_SPAN_OP = 'resource.script';\n\nexport const BROWSER_RESOURCE_LINK_SPAN_OP = 'resource.link';\n\nexport const BROWSER_RESOURCE_IMG_SPAN_OP = 'resource.img';\n\nexport const BROWSER_RESOURCE_CSS_SPAN_OP = 'resource.css';\n\nexport const BROWSER_RESOURCE_AUDIO_SPAN_OP = 'resource.audio';\n\nexport const BROWSER_RESOURCE_VIDEO_SPAN_OP = 'resource.video';\n\nexport const BROWSER_RESOURCE_IFRAME_SPAN_OP = 'resource.iframe';\n\nexport const BROWSER_RESOURCE_OTHER_SPAN_OP = 'resource.other';\n\n/**\n * Usage of browser APIs or functionality\n */\nexport const BROWSER_BROWSER_SPAN_OP = 'browser';\n\nexport const BROWSER_BROWSER_PAINT_SPAN_OP = 'browser.paint';\n\n/**\n * Operations related to browser UI\n */\nexport const BROWSER_UI_SPAN_OP = 'ui';\n\n/**\n * A task that is taken on the main UI thread. Typically used to indicate to users about things like the [Long Tasks API](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming).\n */\nexport const BROWSER_UI_TASK_SPAN_OP = 'ui.task';\n\nexport const BROWSER_UI_RENDER_SPAN_OP = 'ui.render';\n\nexport const BROWSER_UI_ACTION_SPAN_OP = 'ui.action';\n\nexport const BROWSER_UI_ACTION_CLICK_SPAN_OP = 'ui.action.click';\n\nexport const BROWSER_UI_REACT_SPAN_OP = 'ui.react';\n\nexport const BROWSER_UI_REACT_MOUNT_SPAN_OP = 'ui.react.mount';\n\nexport const BROWSER_UI_REACT_RENDER_SPAN_OP = 'ui.react.render';\n\nexport const BROWSER_UI_REACT_UPDATE_SPAN_OP = 'ui.react.update';\n\nexport const BROWSER_UI_VUE_SPAN_OP = 'ui.vue';\n\nexport const BROWSER_UI_SVELTE_SPAN_OP = 'ui.svelte';\n\nexport const BROWSER_UI_ANGULAR_SPAN_OP = 'ui.angular';\n\nexport const BROWSER_UI_EMBER_SPAN_OP = 'ui.ember';\n\nexport const BROWSER_UI_LIVEWIRE_SPAN_OP = 'ui.livewire';\n\n// Path: model/op/database.json\n// Name: database\n\n// Description: Database related spans are expected to follow OpenTelemetry's Database semantic conventions when possible.\n\nexport const DATABASE_DB_SPAN_OP = 'db';\n\nexport const DATABASE_DB_QUERY_SPAN_OP = 'db.query';\n\nexport const DATABASE_CACHE_SPAN_OP = 'cache';\n\nexport const DATABASE_CACHE_GET_SPAN_OP = 'cache.get';\n\nexport const DATABASE_CACHE_PUT_SPAN_OP = 'cache.put';\n\nexport const DATABASE_CACHE_REMOVE_SPAN_OP = 'cache.remove';\n\n// Path: model/op/faas.json\n// Name: faas\n\n// Description: Serverless (FAAS)\n\nexport const FAAS_HTTP_SPAN_OP = 'http';\n\nexport const FAAS_GRPC_SPAN_OP = 'grpc';\n\nexport const FAAS_FUNCTION_GCP_SPAN_OP = 'function.gcp';\n\nexport const FAAS_FUNCTION_AWS_SPAN_OP = 'function.aws';\n\nexport const FAAS_FUNCTION_AZURE_SPAN_OP = 'function.azure';\n\n// Path: model/op/gen_ai.json\n// Name: gen_ai\n\n// Description: Operations related to Generative AI interactions\n\n/**\n * A chat interaction with a generative AI model\n */\nexport const GEN_AI_CHAT_SPAN_OP = 'chat';\n\n/**\n * Execution of a tool or function by a generative AI model\n */\nexport const GEN_AI_EXECUTE_TOOL_SPAN_OP = 'execute_tool';\n\n/**\n * Handoff of control between different AI agents or components\n */\nexport const GEN_AI_HANDOFF_SPAN_OP = 'handoff';\n\n/**\n * Invocation of an AI agent to perform a task\n */\nexport const GEN_AI_INVOKE_AGENT_SPAN_OP = 'invoke_agent';\n\n// Path: model/op/general.json\n// Name: general\n\n/**\n * A general point-in-time span indicating an event\n */\nexport const GENERAL_MARK_SPAN_OP = 'mark';\n\n/**\n * The time it took for a set of instructions to execute\n */\nexport const GENERAL_FUNCTION_SPAN_OP = 'function';\n\n// Path: model/op/messaging.json\n// Name: messaging\n\n// Description: Messaging related spans represent operations on topics in streaming data systems and queues, such as producing and consuming messages in Kafka, RabbitMQ.\n\n/**\n * A general queue operation.\n */\nexport const MESSAGING_QUEUE_SPAN_OP = 'queue';\n\n/**\n * Publishing a message to a queue.\n */\nexport const MESSAGING_QUEUE_PUBLISH_SPAN_OP = 'queue.publish';\n\n/**\n * Creating a queue or a message for later publishing.\n */\nexport const MESSAGING_QUEUE_CREATE_SPAN_OP = 'queue.create';\n\n/**\n * Receiving a message from a queue.\n */\nexport const MESSAGING_QUEUE_RECEIVE_SPAN_OP = 'queue.receive';\n\n/**\n * Processing a message from a queue.\n */\nexport const MESSAGING_QUEUE_PROCESS_SPAN_OP = 'queue.process';\n\n/**\n * Settling a message, e.g. acknowledging or rejecting it.\n */\nexport const MESSAGING_QUEUE_SETTLE_SPAN_OP = 'queue.settle';\n\n/**\n * Publishing a message to an arq queue.\n */\nexport const MESSAGING_QUEUE_SUBMIT_ARQ_SPAN_OP = 'queue.submit.arq';\n\n/**\n * Processing a message from an arq queue.\n */\nexport const MESSAGING_QUEUE_TASK_ARQ_SPAN_OP = 'queue.task.arq';\n\n/**\n * Publishing a message to a Celery broker.\n */\nexport const MESSAGING_QUEUE_SUBMIT_CELERY_SPAN_OP = 'queue.submit.celery';\n\n/**\n * Processing a message from a Celery queue.\n */\nexport const MESSAGING_QUEUE_TASK_CELERY_SPAN_OP = 'queue.task.celery';\n\n/**\n * Processing a message from a Dramatiq queue.\n */\nexport const MESSAGING_QUEUE_TASK_DRAMATIQ_SPAN_OP = 'queue.task.dramatiq';\n\n/**\n * Publishing a message to a Huey instance.\n */\nexport const MESSAGING_QUEUE_SUBMIT_HUEY_SPAN_OP = 'queue.submit.huey';\n\n/**\n * Processing a message from a Huey instance.\n */\nexport const MESSAGING_QUEUE_TASK_HUEY_SPAN_OP = 'queue.task.huey';\n\n/**\n * Processing a message from an RQ queue.\n */\nexport const MESSAGING_QUEUE_TASK_RQ_SPAN_OP = 'queue.task.rq';\n\n// Path: model/op/mobile.json\n// Name: mobile\n\nexport const MOBILE_APP_SPAN_OP = 'app';\n\nexport const MOBILE_UI_SPAN_OP = 'ui';\n\nexport const MOBILE_NAVIGATION_SPAN_OP = 'navigation';\n\nexport const MOBILE_FILE_SPAN_OP = 'file';\n\nexport const MOBILE_SERIALIZE_SPAN_OP = 'serialize';\n\nexport const MOBILE_HTTP_SPAN_OP = 'http';\n\n// Path: model/op/web_server.json\n// Name: web_server\n\n/**\n * A general point-in-time span indicating an event\n */\nexport const WEB_SERVER_HTTP_SPAN_OP = 'http';\n\nexport const WEB_SERVER_HTTP_CLIENT_SPAN_OP = 'http.client';\n\nexport const WEB_SERVER_HTTP_SERVER_SPAN_OP = 'http.server';\n\nexport const WEB_SERVER_WEBSOCKET_SPAN_OP = 'websocket';\n\nexport const WEB_SERVER_RPC_SPAN_OP = 'rpc';\n\nexport const WEB_SERVER_GRPC_SPAN_OP = 'grpc';\n\nexport const WEB_SERVER_GRAPHQL_SPAN_OP = 'graphql';\n\nexport const WEB_SERVER_SUBPROCESS_SPAN_OP = 'subprocess';\n\nexport const WEB_SERVER_MIDDLEWARE_SPAN_OP = 'middleware';\n\nexport const WEB_SERVER_VIEW_SPAN_OP = 'view';\n\nexport const WEB_SERVER_TEMPLATE_SPAN_OP = 'template';\n\nexport const WEB_SERVER_FUNCTION_SPAN_OP = 'function';\n\nexport const WEB_SERVER_FUNCTION_REMIX_SPAN_OP = 'function.remix';\n\nexport const WEB_SERVER_FUNCTION_NEXTJS_SPAN_OP = 'function.nextjs';\n\nexport const WEB_SERVER_SERIALIZE_SPAN_OP = 'serialize';\n\nexport const WEB_SERVER_CONSOLE_SPAN_OP = 'console';\n\nexport const WEB_SERVER_FILE_SPAN_OP = 'file';\n\nexport const WEB_SERVER_APP_SPAN_OP = 'app';\n", "declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n", "import type { TracingChannel, TracingChannelSubscribers } from 'node:diagnostics_channel';\nimport type { AsyncLocalStorage } from 'node:async_hooks';\nimport type { ExclusiveEventHintOrCaptureContext, Span } from '@sentry/core';\nimport {\n  debug,\n  captureException,\n  isObjectLike,\n  SPAN_STATUS_ERROR,\n  getAsyncContextStrategy,\n  getMainCarrier,\n  getActiveSpan,\n} from '@sentry/core';\nimport { DEBUG_BUILD } from './debug-build';\nimport { ERROR_TYPE } from '@sentry/conventions/attributes';\n\nexport type TracingChannelPayloadWithSpan<TData extends object> = TData & {\n  /**\n   * The current active span for the traced call.\n   */\n  _sentrySpan?: Span;\n\n  /**\n   * The context's active store value, used to restore the context for asyncStart continuations for callback-based tracing.\n   */\n  _sentryCallerStore?: unknown;\n\n  /** Set by Node's tracing channel when the traced operation failed. */\n  error?: unknown;\n};\n\n/*\n * A type patch so that we don't have to handle all subscription types.\n */\nexport interface SentryTracingChannel<TData extends object = object> extends Omit<\n  TracingChannel<TData, TracingChannelPayloadWithSpan<TData>>,\n  'subscribe' | 'unsubscribe'\n> {\n  subscribe(subscribers: Partial<TracingChannelSubscribers<TracingChannelPayloadWithSpan<TData>>>): void;\n  unsubscribe(subscribers: Partial<TracingChannelSubscribers<TracingChannelPayloadWithSpan<TData>>>): void;\n}\n\nexport interface TracingChannelLifeCycleOptions<TData extends object = object> {\n  /**\n   * Invoked with the span and the channel context object once the traced operation completes\n   * Use it to enrich the span from the result/error (branch on `'error' in data` / `'result' in data`) or to run cleanup.\n   */\n  beforeSpanEnd?: (span: Span, data: TracingChannelPayloadWithSpan<TData>) => void;\n\n  /**\n   * Whether a thrown error is captured as a Sentry event. The span is always marked with error status regardless. Defaults to `false`.\n   * You can alternatively pass a function that sets the ExclusiveEventHintOrCaptureContext on the captured error.\n   * Set `true` for instrumentations that own the error boundary, (e.g: route handlers)\n   * For database drivers, it is not recommended to set this at all.\n   */\n  captureError?: boolean | ((e: unknown) => ExclusiveEventHintOrCaptureContext);\n\n  /**\n   * Take ownership of *when* the span ends: return `true` and the helper won't end it on\n   * `end`/`asyncEnd`. For results that settle out-of-band — e.g. a streamed `EventEmitter` that\n   * completes via its own `'end'`/`'error'` events.\n   *\n   * Call `end` when it settles — `end()` on success, `end(error)` on failure. `end` owns *how* the span\n   * ends (error status/attributes, `captureError`, `beforeSpanEnd`) and is idempotent. Default `false`\n   * lets the helper end the span as usual.\n   */\n  deferSpanEnd?: (args: {\n    span: Span;\n    data: TracingChannelPayloadWithSpan<TData>;\n    /** Ends the span: `end()` on success, `end(error)` on failure (which marks `data` as errored). Idempotent. */\n    end: (error?: unknown) => void;\n  }) => boolean;\n\n  /**\n   * Apply span/scope binding only if there is a parent span, similar to returning `undefined` in the `getSpan` callback.\n   * If you need to perform some conditional checking on the parent span before deciding, do it in the `getSpan` callback.\n   */\n  requiresParentSpan?: boolean;\n}\n\n/** Returned by {@link bindTracingChannelToSpan}: the bound channel plus a teardown handle. */\nexport interface TracingChannelBindingHandle<TData extends object = object> {\n  /**\n   * The tracing channel with the span bound into async context.\n   */\n  channel: SentryTracingChannel<TData>;\n\n  /**\n   * Tears down the binding: unsubscribes lifecycle handlers, when present, and unbinds the start store.\n   * Idempotent, and a no-op when no async context binding was available.\n   */\n  unbind: () => void;\n}\n\nconst NOOP = (): void => {};\n\n/**\n * Bind a span and its lifecycle to a tracing channel so the span becomes the active async context\n * for the traced operation and is ended when the operation completes.\n *\n * `getSpan` may return `undefined` to opt a payload out entirely: nothing is bound, no span is\n * tracked, and the active context is left untouched. Use it for events that ride the same channel\n * but should reuse the enclosing span instead of opening (and ending) their own — e.g. an agent\n * loop's per-step events, where ending a freshly opened span would close the parent prematurely.\n */\nexport function bindTracingChannelToSpan<TData extends object>(\n  channel: TracingChannel<TData, TData>,\n  getSpan: (data: TracingChannelPayloadWithSpan<TData>) => Span | undefined,\n  opts?: TracingChannelLifeCycleOptions<TData>,\n): TracingChannelBindingHandle<TData> {\n  const handle = bindSpanToChannelStore(channel, getSpan, opts);\n\n  const beforeSpanEnd = opts?.beforeSpanEnd;\n  const deferSpanEnd = opts?.deferSpanEnd;\n  const getErrorHint = (e: unknown): ExclusiveEventHintOrCaptureContext => {\n    if (typeof opts?.captureError === 'function') {\n      return opts.captureError(e);\n    }\n\n    return {\n      mechanism: {\n        type: 'auto.diagnostic_channels.bind_span',\n        handled: false,\n      },\n    };\n  };\n\n  // Apply Sentry error status + attributes (and capture, if configured) to a span. Shared by the\n  // channel `error` lifecycle and the deferred `end` util so the two can't drift.\n  const annotateSpanError = (span: Span, error: unknown): void => {\n    if (opts?.captureError) {\n      captureException(error, getErrorHint(error));\n    }\n\n    const { message, attributes } = getErrorInfo(error);\n    span.setStatus({ code: SPAN_STATUS_ERROR, message });\n    span.setAttributes(attributes);\n  };\n\n  // Creates an end fn for deferred handlers to use, ensures consistent span end behavior\n  const makeDeferredEnd = (span: Span, data: TracingChannelPayloadWithSpan<TData>) => {\n    let ended = false;\n\n    return (error?: unknown): void => {\n      if (ended) {\n        return;\n      }\n\n      ended = true;\n      if (error !== undefined) {\n        annotateSpanError(span, error);\n        // Without this the payload still looks successful, so `beforeSpanEnd` enriches the span from\n        // a `result` the operation never produced.\n        data.error = error;\n      }\n\n      endBoundSpan(data, beforeSpanEnd);\n    };\n  };\n\n  const subscribers: Partial<TracingChannelSubscribers<TracingChannelPayloadWithSpan<TData>>> = {\n    start: NOOP,\n    asyncStart: NOOP,\n    end(data) {\n      // The operation settled synchronously (returned or threw)\n      // Presence checks because caller can return `undefined` result or throw a falsy value.\n      if ('error' in data || 'result' in data) {\n        const span = data._sentrySpan;\n        if (span && deferSpanEnd?.({ span, data, end: makeDeferredEnd(span, data) })) {\n          return;\n        }\n        endBoundSpan(data, beforeSpanEnd);\n      }\n    },\n    error(data) {\n      // No span was bound for this payload (`getSpan` returned undefined), so there is nothing to\n      // annotate and no instrumentation that owns capturing this error.\n      const span = data._sentrySpan;\n      if (!span) {\n        return;\n      }\n\n      annotateSpanError(span, data.error);\n    },\n    asyncEnd(data) {\n      const span = data._sentrySpan;\n      if (span && deferSpanEnd?.({ span, data, end: makeDeferredEnd(span, data) })) {\n        return;\n      }\n      endBoundSpan(data, beforeSpanEnd);\n    },\n  };\n\n  handle.channel.subscribe(subscribers);\n\n  return {\n    channel: handle.channel,\n    unbind: () => {\n      handle.channel.unsubscribe(subscribers);\n      handle.unbind();\n    },\n  };\n}\n\n/**\n * Bind a span into the channel's async context so it becomes active for the traced operation,\n * without managing its lifecycle. The primitive behind {@link bindTracingChannelToSpan}, which\n * layers span-ending and error handling on top.\n *\n * `getSpan` may return `undefined` to leave the active context untouched for that payload.\n */\nfunction bindSpanToChannelStore<TData extends object>(\n  channel: TracingChannel<TData, TData>,\n  getSpan: (data: TracingChannelPayloadWithSpan<TData>) => Span | undefined,\n  opts?: Pick<TracingChannelLifeCycleOptions, 'requiresParentSpan'>,\n): TracingChannelBindingHandle<TData> {\n  // Grabs the tracing channel binding defined by the AsyncContext strategy implementation\n  const binding = getAsyncContextStrategy(getMainCarrier()).getTracingChannelBinding?.();\n\n  // If no binding, then either the implementer doesn't support tracing channels or there is no active strategy\n  // Failure mode here means we would still access the channel and potentially subscribe to it, but parenting will be off.\n  if (!binding) {\n    DEBUG_BUILD && debug.log('[TracingChannel] Could not access async context binding.');\n\n    return {\n      channel,\n      unbind: NOOP,\n    };\n  }\n\n  // Grab the ALS instance, we don't really care what is in it as long as the AsyncContext strategy can use its value to figure out parenting.\n  const asyncLocalStorage = binding.asyncLocalStorage as AsyncLocalStorage<TData>;\n\n  // bindStore activates the ALS for the traced call; any getStore() inside it returns the value bound for that context.\n  // 1. Produce: getStoreWithActiveSpan(span) clones the current scope, plants the span via _INTERNAL_setSpanForScope, and returns { scope, isolationScope }, the active context carrying our span.\n  // 2. Bind: the courier hands that opaque value to channel.start.bindStore(asyncLocalStorage, producer), which runs the traced op inside asyncLocalStorage.run(value, …); it never inspects the value.\n  // 3. Read: inside the op, Sentry's scope machinery calls getScopes() → asyncStorage.getStore() on that same ALS, so getCurrentScope/getIsolationScope/getActiveSpan resolve to the scope carrying our span.\n  // 4. Nest: any child span started in the traced op parents to that active span.\n  channel.start.bindStore(asyncLocalStorage, (data: TracingChannelPayloadWithSpan<TData>) => {\n    // Stash the caller's store before we swap in the span store, so `asyncStart` can restore it for\n    // callback-style channels (see `_sentryCallerStore`).\n    data._sentryCallerStore = asyncLocalStorage.getStore();\n\n    const shouldGetSpan = !opts?.requiresParentSpan || getActiveSpan();\n    const span = shouldGetSpan ? getSpan(data) : undefined;\n    if (!span) {\n      // Leave the active context untouched so nested operations keep parenting to the enclosing span.\n      return data._sentryCallerStore as TData;\n    }\n    data._sentrySpan = span;\n\n    return binding.getStoreWithActiveSpan(span) as TData;\n  });\n\n  // Restore the caller's context for the async continuation. Only callback-style channels `runStores`\n  // `asyncStart` (so the callback runs inside this store). promise channels `publish` it, leaving this\n  // inert, their continuation already inherits the caller's context natively.\n  channel.asyncStart.bindStore(asyncLocalStorage, (data: TracingChannelPayloadWithSpan<TData>) => {\n    return data._sentryCallerStore as TData;\n  });\n\n  return {\n    channel,\n    unbind: () => {\n      // Removes the stores\n      channel.start.unbindStore(asyncLocalStorage);\n      channel.asyncStart.unbindStore(asyncLocalStorage);\n    },\n  };\n}\n\nfunction endBoundSpan<TData extends object>(\n  data: TracingChannelPayloadWithSpan<TData>,\n  beforeSpanEnd: TracingChannelLifeCycleOptions<TData>['beforeSpanEnd'],\n): void {\n  const span = data._sentrySpan;\n  if (!span) {\n    return;\n  }\n  beforeSpanEnd?.(span, data);\n  span.end();\n}\n\ntype ErrorInfo = {\n  message: string | undefined;\n  attributes: Record<string, string>;\n};\n\n/**\n * Best-effort message and attribute extraction for thrown/rejected values.\n */\nfunction getErrorInfo(error: unknown): ErrorInfo {\n  const errorIsObject = isObjectLike(error);\n  const raw = errorIsObject ? ('message' in error ? error.message : undefined) : error;\n\n  // Leave the status message unset if not set (e.g. an `AggregateError` from\n  // ECONNREFUSED, whose `.message` is empty). Otherwise cast to string.\n  const message = raw ? String(raw) : undefined;\n  const type = errorIsObject && 'name' in error ? String(error.name) : 'unknown';\n\n  return {\n    message,\n    attributes: {\n      [ERROR_TYPE]: type,\n    },\n  };\n}\n", "import { SENTRY_GRAPHQL_OPERATION } from '@sentry/conventions/attributes';\nimport type { Span } from '@sentry/core';\nimport { getClient, isObjectLike, getRootSpan, spanToJSON } from '@sentry/core';\n\n// Same key the OTel path uses, so renames stay consistent across both.\nconst ORIGINAL_DESCRIPTION_ATTRIBUTE = 'original-description';\n\n// graphql-js token kinds whose values may carry user data (literal arguments). We\n// replace them in the serialized document so raw inline values can never reach\n// `graphql.document`. Mirrors the legacy OTel instrumentation's redaction set.\nconst REDACTED_LITERAL_KINDS = new Set(['Int', 'Float', 'String', 'BlockString']);\n\n/** Minimal shape of a graphql-js lexer token, enough to locate literal spans for redaction. */\ninterface GraphqlToken {\n  kind: string;\n  start: number;\n  end: number;\n  next?: GraphqlToken | null;\n}\n\n/** Minimal shape of a parsed graphql-js `DocumentNode`, enough to read its source and tokens. */\nexport interface GraphqlDocumentNode {\n  loc?: {\n    startToken?: GraphqlToken;\n    source?: { body?: string };\n  };\n}\n\n/**\n * Rename the enclosing root span to include the operation name(s), e.g. `GET /graphql (query GetUser)`.\n * Mirrors the legacy OTel `useOperationNameForRootSpan` behavior; `parseSpanDescription` reads the same\n * `sentry.graphql.operation` attribute on the OTel export path.\n */\nexport function renameRootSpanWithOperation(span: Span, operationType: string, operationName?: string): void {\n  const rootSpan = getRootSpan(span);\n  // Nothing to rename if the operation span is itself the root (graphql ran outside any span).\n  if (rootSpan === span) {\n    return;\n  }\n\n  const rootSpanJson = spanToJSON(rootSpan);\n\n  const newOperation = operationName ? `${operationType} ${operationName}` : operationType;\n\n  // A single operation is stored as a string, multiple as an array.\n  const existingOperations = rootSpanJson.data[SENTRY_GRAPHQL_OPERATION];\n  let operations: string | string[];\n  if (Array.isArray(existingOperations)) {\n    operations = [...(existingOperations as string[]), newOperation];\n  } else if (typeof existingOperations === 'string') {\n    operations = [existingOperations, newOperation];\n  } else {\n    operations = newOperation;\n  }\n  rootSpan.setAttribute(SENTRY_GRAPHQL_OPERATION, operations);\n\n  // Keep the pre-rename name so repeated renames don't compound.\n  const originalDescription =\n    (rootSpanJson.data[ORIGINAL_DESCRIPTION_ATTRIBUTE] as string | undefined) ?? rootSpanJson.description;\n  if (!rootSpanJson.data[ORIGINAL_DESCRIPTION_ATTRIBUTE]) {\n    rootSpan.setAttribute(ORIGINAL_DESCRIPTION_ATTRIBUTE, originalDescription);\n  }\n\n  rootSpan.updateName(`${originalDescription} (${getGraphqlOperationNamesFromAttribute(operations)})`);\n}\n\n/** Format the accumulated operations for the root span name: up to 5 sorted names, then `+N`. */\nfunction getGraphqlOperationNamesFromAttribute(attr: string | string[]): string {\n  if (Array.isArray(attr)) {\n    // oxlint-disable-next-line typescript/require-array-sort-compare\n    const sorted = attr.slice().sort();\n    if (sorted.length <= 5) {\n      return sorted.join(', ');\n    }\n\n    return `${sorted.slice(0, 5).join(', ')}, +${sorted.length - 5}`;\n  }\n\n  return attr;\n}\n\n/**\n * Span name follows the GraphQL semantic conventions: `<operation.type> <operation.name>` when both\n * are available, `<operation.type>` when only the type is, otherwise a static fallback.\n */\nexport function getOperationSpanName(\n  operationType: string | undefined,\n  operationName: string | undefined,\n  fallbackName: string,\n): string {\n  if (operationType && operationName) {\n    return `${operationType} ${operationName}`;\n  }\n  if (operationType) {\n    return operationType;\n  }\n\n  return fallbackName;\n}\n\n/** Whether a graphql execution result carries GraphQL errors (returned on `result.errors`). */\nexport function hasResultErrors(result: unknown): boolean {\n  if (isObjectLike(result) && 'errors' in result) {\n    const errors = (result as { errors?: unknown }).errors;\n\n    return Array.isArray(errors) && errors.length > 0;\n  }\n\n  return false;\n}\n\n/**\n * Serialize a parsed document into `graphql.document` while redacting every literal argument value:\n * the original source text is preserved verbatim except that string/number literal spans are\n * replaced (`\"foo\"` -> `\"*\"`, `42` -> `*`). graphql does not sanitize its channel payload, so this\n * prevents raw inline values (potential PII) from leaving the process. Variable values are never\n * included. Returns `undefined` (rather than throwing) on anything it cannot serialize.\n */\nfunction redactGraphqlDocument(document: GraphqlDocumentNode | undefined): string | undefined {\n  const loc = document?.loc;\n  const body = loc?.source?.body;\n  if (typeof body !== 'string' || !loc?.startToken) {\n    return undefined;\n  }\n\n  try {\n    // Collect literal token spans, then splice them out back-to-front so earlier offsets stay valid.\n    const ranges: Array<{ start: number; end: number; kind: string }> = [];\n    for (let token: GraphqlToken | null | undefined = loc.startToken; token; token = token.next) {\n      if (REDACTED_LITERAL_KINDS.has(token.kind)) {\n        ranges.push({ start: token.start, end: token.end, kind: token.kind });\n      }\n    }\n\n    let out = body;\n    // Reverse index loop (not `for...of`) so we splice back-to-front; `i` is bounded by the loop, so\n    // `ranges[i]` is always present and the `!` just satisfies `noUncheckedIndexedAccess`.\n    for (let i = ranges.length - 1; i >= 0; i--) {\n      const { start, end, kind } = ranges[i]!;\n      const replacement = kind === 'String' || kind === 'BlockString' ? '\"*\"' : '*';\n      out = out.slice(0, start) + replacement + out.slice(end);\n    }\n\n    return out;\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * Returns the redacted document if `dataCollection.graphQL.document` is enabled, `undefined` otherwise.\n */\nexport function collectGraphqlDocument(document: GraphqlDocumentNode | undefined): string | undefined {\n  if (getClient()?.getDataCollectionOptions().graphQL.document !== true) {\n    return undefined;\n  }\n  return redactGraphqlDocument(document);\n}\n", "import type { TracingChannel } from 'node:diagnostics_channel';\nimport { GRAPHQL_DOCUMENT, GRAPHQL_OPERATION_NAME, GRAPHQL_OPERATION_TYPE } from '@sentry/conventions/attributes';\nimport { WEB_SERVER_GRAPHQL_SPAN_OP } from '@sentry/conventions/op';\nimport {\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SPAN_STATUS_ERROR,\n  startInactiveSpan,\n} from '@sentry/core';\nimport { bindTracingChannelToSpan } from '../tracing-channel';\nimport type { GraphqlDocumentNode } from './utils';\nimport { collectGraphqlDocument, getOperationSpanName, hasResultErrors, renameRootSpanWithOperation } from './utils';\n\n// Channel names published by graphql >= 17.0.0 (see graphql-js `src/diagnostics.ts`).\n// Hardcoded so the subscriber does not have to import graphql — the channels just\n// have to be subscribed to before the user's graphql code publishes.\nexport const GRAPHQL_DC_CHANNEL_PARSE = 'graphql:parse';\nexport const GRAPHQL_DC_CHANNEL_VALIDATE = 'graphql:validate';\nexport const GRAPHQL_DC_CHANNEL_EXECUTE = 'graphql:execute';\nexport const GRAPHQL_DC_CHANNEL_SUBSCRIBE = 'graphql:subscribe';\nexport const GRAPHQL_DC_CHANNEL_RESOLVE = 'graphql:resolve';\n\nconst ORIGIN = 'auto.graphql.diagnostic_channel';\n\nconst SPAN_NAME_PARSE = 'graphql.parse';\nconst SPAN_NAME_VALIDATE = 'graphql.validate';\nconst SPAN_NAME_EXECUTE = 'graphql.execute';\nconst SPAN_NAME_SUBSCRIBE = 'graphql.subscribe';\nconst SPAN_NAME_RESOLVE = 'graphql.resolve';\n\n// Field-level attributes for resolver spans. Not in `@sentry/conventions`; these match the keys the\n// vendored OTel instrumentation emits so there is no drift between the two paths.\nconst GRAPHQL_FIELD_NAME = 'graphql.field.name';\nconst GRAPHQL_FIELD_PATH = 'graphql.field.path';\nconst GRAPHQL_FIELD_TYPE = 'graphql.field.type';\nconst GRAPHQL_PARENT_NAME = 'graphql.parent.name';\n\n/** Context published on the sync-only `graphql:parse` channel. */\nexport interface GraphqlParseData {\n  source: string | { body?: string };\n  result?: GraphqlDocumentNode;\n  error?: unknown;\n}\n\n/** Context published on the sync-only `graphql:validate` channel. */\nexport interface GraphqlValidateData {\n  document: GraphqlDocumentNode;\n  /** Validation errors returned by validation; an empty array means the document is valid. */\n  result?: ReadonlyArray<unknown>;\n  error?: unknown;\n}\n\n/**\n * Context published on the `graphql:execute` and `graphql:subscribe` channels.\n *\n * `result` carries an `ExecutionResult` (or, for subscriptions, an async generator); GraphQL errors\n * collected during execution surface on `result.errors` rather than as the channel's `error`\n * lifecycle event, which only fires on an abrupt throw.\n */\nexport interface GraphqlOperationData {\n  document: GraphqlDocumentNode;\n  operationName?: string;\n  operationType?: string;\n  result?: unknown;\n  error?: unknown;\n}\n\n/**\n * Context published on the per-field `graphql:resolve` channel.\n *\n * A resolver throw or rejection publishes the `error` lifecycle event here; the same failure also\n * surfaces in the enclosing execution result.\n */\nexport interface GraphqlResolveData {\n  fieldName: string;\n  parentType: string;\n  fieldType: string;\n  fieldPath: string;\n  /** Whether the field is handled by graphql's default property resolver (vs. a user resolver). */\n  isDefaultResolver: boolean;\n  alias?: string;\n  args?: unknown;\n  result?: unknown;\n  error?: unknown;\n}\n\n/** Options controlling which graphql channels the subscriber emits spans for. */\nexport interface GraphqlDiagnosticChannelsOptions {\n  /**\n   * Do not create spans for resolvers. Resolver spans are per-field and can be very high volume.\n   * Defaults to `true`.\n   */\n  ignoreResolveSpans?: boolean;\n\n  /**\n   * When resolver spans are enabled, do not create them for graphql's default property resolver\n   * (fields without a user-defined resolver), which are rarely interesting. Defaults to `true`.\n   */\n  ignoreTrivialResolveSpans?: boolean;\n\n  /**\n   * Rename the enclosing root span to include the operation name(s), e.g.\n   * `GET /graphql` -> `GET /graphql (query GetUser)`. Defaults to `true`.\n   */\n  useOperationNameForRootSpan?: boolean;\n}\n\n/**\n * Platform-provided factory that creates a native tracing channel for the given name. The\n * subscriber binds the span and its lifecycle onto the channel via `bindTracingChannelToSpan`,\n * which propagates the active span through the runtime's async context.\n *\n * Node passes `node:diagnostics_channel`'s `tracingChannel` directly.\n */\nexport type GraphqlTracingChannelFactory = <T extends object>(name: string) => TracingChannel<T, T>;\n\n/**\n * Subscribe Sentry span handlers to graphql's diagnostics-channel events\n * (`graphql:parse`, `:validate`, `:execute`, `:subscribe`), published by graphql >= 17.0.0.\n *\n * On older graphql versions the channels are never published to, so the subscribers are inert —\n * there is no double-instrumentation against the vendored OTel patcher, which is gated to `< 17`.\n *\n * The per-field `graphql:resolve` channel is only subscribed when `ignoreResolveSpans` is `false`:\n * resolver spans are per-field and can be extremely high-volume, so they are off by default (matching\n * the legacy OTel path). When enabled, `ignoreTrivialResolveSpans` (default `true`) additionally skips\n * graphql's default property resolver.\n */\nexport function subscribeGraphqlDiagnosticChannels(\n  tracingChannel: GraphqlTracingChannelFactory,\n  options: GraphqlDiagnosticChannelsOptions = {},\n): void {\n  const ignoreResolveSpans = options.ignoreResolveSpans !== false;\n  const ignoreTrivialResolveSpans = options.ignoreTrivialResolveSpans !== false;\n  const useOperationNameForRootSpan = options.useOperationNameForRootSpan !== false;\n\n  setupParseChannel(tracingChannel);\n  setupValidateChannel(tracingChannel);\n  setupOperationChannel(tracingChannel, GRAPHQL_DC_CHANNEL_EXECUTE, SPAN_NAME_EXECUTE, useOperationNameForRootSpan);\n  setupOperationChannel(tracingChannel, GRAPHQL_DC_CHANNEL_SUBSCRIBE, SPAN_NAME_SUBSCRIBE, useOperationNameForRootSpan);\n\n  if (!ignoreResolveSpans) {\n    setupResolveChannel(tracingChannel, ignoreTrivialResolveSpans);\n  }\n}\n\nfunction setupParseChannel(tracingChannel: GraphqlTracingChannelFactory): void {\n  bindTracingChannelToSpan(tracingChannel<GraphqlParseData>(GRAPHQL_DC_CHANNEL_PARSE), () =>\n    startInactiveSpan({\n      name: SPAN_NAME_PARSE,\n      attributes: {\n        [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n        [SEMANTIC_ATTRIBUTE_SENTRY_OP]: WEB_SERVER_GRAPHQL_SPAN_OP,\n      },\n    }),\n  );\n}\n\nfunction setupValidateChannel(tracingChannel: GraphqlTracingChannelFactory): void {\n  bindTracingChannelToSpan(\n    tracingChannel<GraphqlValidateData>(GRAPHQL_DC_CHANNEL_VALIDATE),\n    data => {\n      return startInactiveSpan({\n        name: SPAN_NAME_VALIDATE,\n        attributes: {\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n          [SEMANTIC_ATTRIBUTE_SENTRY_OP]: WEB_SERVER_GRAPHQL_SPAN_OP,\n          [GRAPHQL_DOCUMENT]: collectGraphqlDocument(data.document),\n        },\n      });\n    },\n    {\n      beforeSpanEnd: (span, data) => {\n        // Validation completes normally even when it returns errors, so flag the span here.\n        if (Array.isArray(data.result) && data.result.length > 0) {\n          span.setStatus({ code: SPAN_STATUS_ERROR, message: 'invalid_argument' });\n        }\n      },\n    },\n  );\n}\n\nfunction setupOperationChannel(\n  tracingChannel: GraphqlTracingChannelFactory,\n  channelName: string,\n  fallbackName: string,\n  useOperationNameForRootSpan: boolean,\n): void {\n  bindTracingChannelToSpan(\n    tracingChannel<GraphqlOperationData>(channelName),\n    data => {\n      const span = startInactiveSpan({\n        name: getOperationSpanName(data.operationType, data.operationName, fallbackName),\n        attributes: {\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n          [SEMANTIC_ATTRIBUTE_SENTRY_OP]: WEB_SERVER_GRAPHQL_SPAN_OP,\n          [GRAPHQL_OPERATION_TYPE]: data.operationType,\n          [GRAPHQL_OPERATION_NAME]: data.operationName || undefined,\n          [GRAPHQL_DOCUMENT]: collectGraphqlDocument(data.document),\n        },\n      });\n\n      if (useOperationNameForRootSpan && data.operationType) {\n        renameRootSpanWithOperation(span, data.operationType, data.operationName);\n      }\n\n      return span;\n    },\n    {\n      beforeSpanEnd: (span, data) => {\n        // GraphQL errors are returned on `result.errors`, not as a thrown error, so flag the span here.\n        if (hasResultErrors(data.result)) {\n          span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n        }\n      },\n    },\n  );\n}\n\nfunction setupResolveChannel(tracingChannel: GraphqlTracingChannelFactory, ignoreTrivialResolveSpans: boolean): void {\n  bindTracingChannelToSpan(tracingChannel<GraphqlResolveData>(GRAPHQL_DC_CHANNEL_RESOLVE), data => {\n    // Returning `undefined` opts this field out: no span is created and the active context is left\n    // untouched, so the field still resolves under its parent span.\n    if (ignoreTrivialResolveSpans && data.isDefaultResolver) {\n      return undefined;\n    }\n\n    return startInactiveSpan({\n      name: `${SPAN_NAME_RESOLVE} ${data.fieldPath}`,\n      attributes: {\n        [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n        [SEMANTIC_ATTRIBUTE_SENTRY_OP]: WEB_SERVER_GRAPHQL_SPAN_OP,\n        [GRAPHQL_FIELD_NAME]: data.fieldName,\n        [GRAPHQL_FIELD_PATH]: data.fieldPath,\n        [GRAPHQL_FIELD_TYPE]: data.fieldType,\n        [GRAPHQL_PARENT_NAME]: data.parentType,\n      },\n    });\n  });\n}\n", "import { defineIntegration, type IntegrationFn, waitForTracingChannelBinding } from '@sentry/core';\nimport * as dc from 'node:diagnostics_channel';\nimport { type GraphqlDiagnosticChannelsOptions, subscribeGraphqlDiagnosticChannels } from './graphql-dc-subscriber';\n\nconst _graphqlIntegration = ((options: GraphqlDiagnosticChannelsOptions = {}) => {\n  return {\n    name: 'Graphql' as const,\n    setupOnce() {\n      // Bail on Node <= 18.18.0, where `tracingChannel` does not exist.\n      if (!dc.tracingChannel) {\n        return;\n      }\n\n      // Subscribe to graphql's native tracing channels (graphql >= 17).\n      // This is a no-op on versions that don't publish to the channels, so it is always safe to call.\n      waitForTracingChannelBinding(() => {\n        subscribeGraphqlDiagnosticChannels(dc.tracingChannel, options);\n      });\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Auto-instrument the [graphql](https://www.npmjs.com/package/graphql) library via its native\n * `node:diagnostics_channel` tracing channels (graphql >= 17).\n *\n * On older graphql versions the channels are never published to, so this integration is inert and\n * the vendored OTel instrumentation (gated to `< 17`) handles instrumentation instead.\n */\nexport const graphqlIntegration = defineIntegration(_graphqlIntegration);\n", "import type { TracingChannel } from 'node:diagnostics_channel';\nimport {\n  DB_COLLECTION_NAME,\n  DB_NAMESPACE,\n  DB_OPERATION_BATCH_SIZE,\n  DB_OPERATION_NAME,\n  DB_QUERY_TEXT,\n  DB_SYSTEM_NAME,\n  SERVER_ADDRESS,\n  SERVER_PORT,\n} from '@sentry/conventions/attributes';\nimport {\n  isObjectLike,\n  debug,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  startInactiveSpan,\n} from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { bindTracingChannelToSpan } from '../tracing-channel';\n\n// Channel names published by mongoose >= 9.7.0 (see mongoose `lib/tracing.js`,\n// `lib/query.js`, `lib/aggregate.js`, `lib/model.js` and `lib/cursor/*`).\n// Hardcoded so the subscriber does not have to import mongoose — the channels\n// just have to be subscribed to before the user's mongoose code publishes.\nexport const MONGOOSE_DC_CHANNEL_QUERY = 'mongoose:query';\nexport const MONGOOSE_DC_CHANNEL_AGGREGATE = 'mongoose:aggregate';\nexport const MONGOOSE_DC_CHANNEL_MODEL_SAVE = 'mongoose:model:save';\nexport const MONGOOSE_DC_CHANNEL_MODEL_INSERT_MANY = 'mongoose:model:insertMany';\nexport const MONGOOSE_DC_CHANNEL_MODEL_BULK_WRITE = 'mongoose:model:bulkWrite';\nexport const MONGOOSE_DC_CHANNEL_CURSOR_NEXT = 'mongoose:cursor:next';\n\nconst ORIGIN = 'auto.db.mongoose.diagnostic_channel';\nconst DB_SYSTEM_NAME_VALUE_MONGODB = 'mongodb';\n\n// Cap recursion so a self-referential or pathologically deep query can never\n// stall (or blow the stack in) instrumentation.\nconst MAX_REDACTION_DEPTH = 10;\n\n/**\n * Shape of the context object mongoose >= 9.7.0 publishes on its tracing\n * channels (mongoose's `TracingContext`, see `types/tracing.d.ts`).\n *\n * Node's `tracePromise` mutates this same object with `result`/`error` once the\n * operation settles, which `bindTracingChannelToSpan` reads in its lifecycle\n * handlers — hence both are declared optional here.\n *\n * Unlike redis/ioredis, mongoose does NOT pre-sanitize the payload, so `args`\n * carries the raw user query. We redact it before emitting `db.query.text`.\n */\nexport interface MongooseTracingData {\n  operation: string;\n  /** Absent for connection-level `aggregate()` calls, which have no model/collection. */\n  collection?: string;\n  database?: string;\n  serverAddress?: string;\n  serverPort?: number;\n  /** Cursor channels only: the cursor's fetch batch size and tailable flag. */\n  batchSize?: number;\n  tailable?: boolean;\n  /**\n   * Operation-specific arguments. `filter` (queries/cursors) and `pipeline`\n   * (aggregations) carry the query shape; `docs`/`ops` carry batch payloads.\n   */\n  args?: {\n    filter?: unknown;\n    pipeline?: unknown;\n    docs?: unknown;\n    ops?: unknown;\n    [key: string]: unknown;\n  };\n  result?: unknown;\n  error?: Error;\n}\n\n/**\n * Platform-provided factory that creates a native tracing channel for the given name. The\n * subscriber binds the span and its lifecycle onto the channel via `bindTracingChannelToSpan`,\n * which propagates the active span through the runtime's async context.\n *\n * Node passes `node:diagnostics_channel`'s `tracingChannel` directly.\n */\nexport type MongooseTracingChannelFactory = <T extends object>(name: string) => TracingChannel<T, T>;\n\nlet subscribed = false;\n\n/**\n * Subscribe Sentry span handlers to mongoose's diagnostics-channel events\n * (`mongoose:query`, `:aggregate`, `:model:save`, `:model:insertMany`,\n * `:model:bulkWrite`, `:cursor:next`), published by mongoose >= 9.7.0.\n *\n * On older mongoose versions the channels are never published to, so the\n * subscribers are inert — there is no double-instrumentation against the\n * IITM-based vendored patcher, which is gated to `< 9.7.0`.\n *\n * Idempotent: subsequent calls are a no-op.\n */\nexport function subscribeMongooseDiagnosticChannels(tracingChannel: MongooseTracingChannelFactory): void {\n  if (subscribed) {\n    return;\n  }\n  subscribed = true;\n\n  try {\n    setupChannel(tracingChannel, MONGOOSE_DC_CHANNEL_QUERY);\n    setupChannel(tracingChannel, MONGOOSE_DC_CHANNEL_AGGREGATE);\n    setupChannel(tracingChannel, MONGOOSE_DC_CHANNEL_MODEL_SAVE);\n    setupChannel(tracingChannel, MONGOOSE_DC_CHANNEL_MODEL_INSERT_MANY);\n    setupChannel(tracingChannel, MONGOOSE_DC_CHANNEL_MODEL_BULK_WRITE);\n    setupChannel(tracingChannel, MONGOOSE_DC_CHANNEL_CURSOR_NEXT);\n  } catch {\n    // The factory relies on `node:diagnostics_channel`, which isn't always\n    // available. Fail closed; the SDK simply won't emit mongoose spans here.\n    DEBUG_BUILD && debug.log('Mongoose node:diagnostics_channel subscription failed.');\n  }\n}\n\nfunction setupChannel(tracingChannel: MongooseTracingChannelFactory, channelName: string): void {\n  bindTracingChannelToSpan(tracingChannel<MongooseTracingData>(channelName), data => {\n    const collection = data.collection;\n    const queryText = redactMongoQuery(data.args?.pipeline ?? data.args?.filter);\n    const batchSize = getBatchSize(data);\n\n    return startInactiveSpan({\n      name: collection ? `mongoose.${collection}.${data.operation}` : `mongoose.${data.operation}`,\n      attributes: {\n        [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n        [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'db',\n        [DB_SYSTEM_NAME]: DB_SYSTEM_NAME_VALUE_MONGODB,\n        [DB_OPERATION_NAME]: data.operation,\n        [DB_COLLECTION_NAME]: collection ?? undefined,\n        [DB_NAMESPACE]: data.database ?? undefined,\n        [DB_QUERY_TEXT]: queryText ?? undefined,\n        [DB_OPERATION_BATCH_SIZE]: batchSize ?? undefined,\n        [SERVER_ADDRESS]: data.serverAddress ?? undefined,\n        [SERVER_PORT]: data.serverPort ?? undefined,\n      },\n    });\n  });\n}\n\n/**\n * `db.operation.batch.size` is only meaningful for genuine batch operations.\n * Mongoose's cursor `batchSize` is a fetch-tuning option, not a batch operation\n * size, so it is intentionally excluded here.\n */\nfunction getBatchSize(data: MongooseTracingData): number | undefined {\n  const args = data.args;\n  const batch = data.operation === 'insertMany' ? args?.docs : data.operation === 'bulkWrite' ? args?.ops : undefined;\n\n  return Array.isArray(batch) && batch.length > 1 ? batch.length : undefined;\n}\n\n/**\n * Serialize a mongoose filter/pipeline into `db.query.text` while stripping every\n * value: keys and Mongo operators (`$gt`, `$in`, …) are preserved, leaf values\n * become `'?'`. Mongoose does not sanitize its channel payload, so this prevents\n * raw user data (potential PII) from leaving the process. Returns `undefined`\n * (rather than throwing) on anything it cannot serialize.\n */\nfunction redactMongoQuery(value: unknown): string | undefined {\n  if (value == null) {\n    return undefined;\n  }\n\n  try {\n    const redacted = redactValue(value, 0);\n    const text = JSON.stringify(redacted);\n\n    // Skip empty/uninformative shapes (e.g. a `findOne()` with no filter).\n    return text == null || text === '{}' || text === '[]' ? undefined : text;\n  } catch {\n    return undefined;\n  }\n}\n\nfunction redactValue(value: unknown, depth: number): unknown {\n  if (depth > MAX_REDACTION_DEPTH) {\n    return '?';\n  }\n\n  if (Array.isArray(value)) {\n    return value.map(item => redactValue(item, depth + 1));\n  }\n\n  if (isObjectLike(value)) {\n    const out: Record<string, unknown> = {};\n    for (const key of Object.keys(value as Record<string, unknown>)) {\n      out[key] = redactValue((value as Record<string, unknown>)[key], depth + 1);\n    }\n\n    return out;\n  }\n\n  return '?';\n}\n", "import { defineIntegration, type IntegrationFn, waitForTracingChannelBinding } from '@sentry/core';\nimport * as dc from 'node:diagnostics_channel';\nimport { subscribeMongooseDiagnosticChannels } from './mongoose-dc-subscriber';\n\nexport type { MongooseLegacyCollection, StartMongooseLegacySpanOptions } from './mongoose-legacy-span';\nexport { startMongooseLegacySpan } from './mongoose-legacy-span';\n\nconst _mongooseIntegration = (() => {\n  return {\n    name: 'Mongoose',\n    setupOnce() {\n      // Bail on Node <= 18.18.0, where `tracingChannel` does not exist.\n      if (!dc.tracingChannel) {\n        return;\n      }\n\n      // Subscribe to mongoose's native tracing channels (mongoose >= 9.7).\n      // This is a no-op on versions that don't publish to the channels, so it is always safe to call.\n      waitForTracingChannelBinding(() => {\n        subscribeMongooseDiagnosticChannels(dc.tracingChannel);\n      });\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Auto-instrument the [mongoose](https://www.npmjs.com/package/mongoose) library via its native\n * `node:diagnostics_channel` tracing channels (mongoose >= 9.7).\n *\n * On older mongoose versions the channels are never published to, so this integration is inert and\n * the IITM-based patcher (gated to `< 9.7.0`) handles instrumentation instead.\n */\nexport const mongooseIntegration = defineIntegration(_mongooseIntegration);\n", "import type { Span, SpanAttributes } from '@sentry/core';\nimport { isObjectLike, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SPAN_KIND, startInactiveSpan } from '@sentry/core';\n\n// OTel \"OLD\" db/net semantic-conventions, reproduced from the vendored\n// `@opentelemetry/instrumentation-mongodb` span shape so the orchestrion\n// spans match the OTel ones byte-for-byte. Inlined as literals to avoid\n// importing the deprecated convention constants.\nconst ATTR_DB_SYSTEM = 'db.system';\nconst ATTR_DB_NAME = 'db.name';\nconst ATTR_DB_OPERATION = 'db.operation';\nconst ATTR_DB_STATEMENT = 'db.statement';\nconst ATTR_DB_MONGODB_COLLECTION = 'db.mongodb.collection';\nconst ATTR_DB_CONNECTION_STRING = 'db.connection_string';\nconst ATTR_NET_PEER_NAME = 'net.peer.name';\nconst ATTR_NET_PEER_PORT = 'net.peer.port';\nconst DB_SYSTEM_VALUE_MONGODB = 'mongodb';\n\n/**\n * The db/collection namespace mongodb (v4+) passes to `Connection.command`\n */\nexport interface MongodbNamespace {\n  db: string;\n  collection?: string;\n}\n\ninterface V4Command {\n  documents?: unknown[];\n  cursors?: unknown;\n  [key: string]: unknown;\n}\n\n/**\n * Replaces every leaf value in the command object with '?', keeping keys\n * and Mongo operators. hides PII and improves grouping. Reproduced from\n * the OTel instrumentation.\n */\nexport function serializeDbStatement(commandObj: Record<string, unknown>): string {\n  return JSON.stringify(scrubStatement(commandObj));\n}\n\nfunction scrubStatement(value: unknown): unknown {\n  if (Array.isArray(value)) {\n    return value.map(element => scrubStatement(element));\n  }\n\n  if (isCommandObj(value)) {\n    const initial: Record<string, unknown> = {};\n    return Object.entries(value)\n      .map(([key, element]) => [key, scrubStatement(element)])\n      .reduce((prev, current) => {\n        if (isCommandEntry(current)) {\n          prev[current[0]] = current[1];\n        }\n        return prev;\n      }, initial);\n  }\n\n  // A value like string or number, possibly contains PII, scrub it.\n  return '?';\n}\n\nfunction isCommandObj(value: unknown): value is Record<string, unknown> {\n  return isObjectLike(value) && !isBuffer(value);\n}\n\nfunction isBuffer(value: unknown): boolean {\n  return typeof Buffer !== 'undefined' && Buffer.isBuffer(value);\n}\n\nfunction isCommandEntry(value: unknown): value is [string, unknown] {\n  return Array.isArray(value);\n}\n\n/**\n * Build span attributes for a mongodb v4+ command from the connection\n * context, namespace and command.\n */\nexport function getV4SpanAttributes(\n  connectionCtx: { address?: string } | undefined,\n  ns: MongodbNamespace,\n  command: V4Command | undefined,\n  operation: string | undefined,\n  origin: string,\n): SpanAttributes {\n  let host: string | undefined;\n  let port: string | undefined;\n  if (connectionCtx) {\n    const hostParts = typeof connectionCtx.address === 'string' ? connectionCtx.address.split(':') : '';\n    if (hostParts.length === 2) {\n      host = hostParts[0];\n      port = hostParts[1];\n    }\n  }\n\n  let commandObj: Record<string, unknown> | undefined;\n  if (command?.documents?.[0]) {\n    commandObj = command.documents[0] as Record<string, unknown>;\n  } else if (command?.cursors) {\n    commandObj = command.cursors as Record<string, unknown>;\n  } else {\n    commandObj = command;\n  }\n\n  return getSpanAttributes(ns.db, ns.collection, host, port, commandObj, operation, origin);\n}\n\n/**\n * Shared attribute builder used by both the v3 topology path and the v4+\n * connection path.\n */\nexport function getSpanAttributes(\n  dbName: string | undefined,\n  dbCollection: string | undefined,\n  host: string | undefined,\n  port: string | undefined,\n  commandObj: Record<string, unknown> | undefined,\n  operation: string | undefined,\n  origin: string,\n): SpanAttributes {\n  const attributes: SpanAttributes = {\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: origin,\n    [ATTR_DB_SYSTEM]: DB_SYSTEM_VALUE_MONGODB,\n    [ATTR_DB_NAME]: dbName,\n    [ATTR_DB_MONGODB_COLLECTION]: dbCollection,\n    [ATTR_DB_OPERATION]: operation,\n    [ATTR_DB_CONNECTION_STRING]: `mongodb://${host}:${port}/${dbName}`,\n  };\n\n  if (host && port) {\n    attributes[ATTR_NET_PEER_NAME] = host;\n    const portNumber = parseInt(port, 10);\n    if (!isNaN(portNumber)) {\n      attributes[ATTR_NET_PEER_PORT] = portNumber;\n    }\n  }\n\n  if (commandObj) {\n    try {\n      attributes[ATTR_DB_STATEMENT] = serializeDbStatement(commandObj);\n    } catch {\n      // ignore serialization errors — the statement is best-effort metadata\n    }\n  }\n\n  return attributes;\n}\n\n/** The v3 driver topology, from which host/port are read (mongodb 3.x). */\nexport interface MongoV3Topology {\n  s?: {\n    options?: { host?: string; port?: number };\n    host?: string;\n    port?: number;\n  };\n  description?: { address?: string };\n}\n\n/**\n * Determine the operation name for a mongodb v3 `command` from the command\n * document, mirroring the vendored instrumentation. Returns `undefined` for\n * commands it doesn't classify (e.g. `endSessions`).\n */\nexport function getV3CommandOperation(command: Record<string, unknown>): string | undefined {\n  if (command.createIndexes !== undefined) {\n    return 'createIndexes';\n  } else if (command.findandmodify !== undefined) {\n    return 'findAndModify';\n  } else if (command.ismaster !== undefined) {\n    return 'isMaster';\n  } else if (command.count !== undefined) {\n    return 'count';\n  } else if (command.aggregate !== undefined) {\n    return 'aggregate';\n  }\n  return undefined;\n}\n\n/**\n * Build span attributes for a mongodb v3 operation from the topology,\n * namespace string and command.\n */\nexport function getV3SpanAttributes(\n  ns: string,\n  topology: MongoV3Topology | undefined,\n  command: Record<string, unknown> | undefined,\n  operation: string | undefined,\n  origin: string,\n): SpanAttributes {\n  let host: string | undefined;\n  let port: string | undefined;\n  if (topology?.s) {\n    host = topology.s.options?.host ?? topology.s.host;\n    port = (topology.s.options?.port ?? topology.s.port)?.toString();\n    if (host == null || port == null) {\n      const address = topology.description?.address;\n      if (address) {\n        const segments = address.split(':');\n        host = segments[0];\n        port = segments[1];\n      }\n    }\n  }\n\n  // The namespace is `[db].[collection-or-index]`; coerce to string\n  // (might be a MongoDBNamespace)\n  const [dbName, dbCollection] = ns.toString().split('.');\n  const commandObj =\n    (command?.query as Record<string, unknown> | undefined) ??\n    (command?.q as Record<string, unknown> | undefined) ??\n    command;\n\n  return getSpanAttributes(dbName, dbCollection, host, port, commandObj, operation, origin);\n}\n\n/**\n * Start a mongodb client span with the legacy (pre-stable) db/net semantic\n * conventions.\n *\n * `op: 'db'` is set explicitly rather than relying on `inferDbSpanData`,\n * to support platforms that lack it (ie, Deno).\n */\nexport function startMongoSpan(attributes: SpanAttributes): Span {\n  return startInactiveSpan({\n    name: `mongodb.${attributes[ATTR_DB_OPERATION] || 'command'}`,\n    op: 'db',\n    kind: SPAN_KIND.CLIENT,\n    attributes,\n  });\n}\n", "import type { TracingChannel } from 'node:diagnostics_channel';\nimport {\n  DB_NAMESPACE,\n  DB_OPERATION_NAME,\n  DB_QUERY_TEXT,\n  DB_SYSTEM_NAME,\n  SERVER_ADDRESS,\n  SERVER_PORT,\n} from '@sentry/conventions/attributes';\nimport {\n  _INTERNAL_sanitizeSqlQuery,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  startInactiveSpan,\n} from '@sentry/core';\nimport { bindTracingChannelToSpan } from '../tracing-channel';\n\n// Channel names published by mysql2 >= 3.20.0 (see mysql2 `lib/tracing.js`).\n// Hardcoded so the subscriber does not have to import mysql2 — the channels\n// just have to be subscribed to before the user's mysql2 code publishes.\nexport const MYSQL2_DC_CHANNEL_QUERY = 'mysql2:query';\nexport const MYSQL2_DC_CHANNEL_EXECUTE = 'mysql2:execute';\nexport const MYSQL2_DC_CHANNEL_CONNECT = 'mysql2:connect';\nexport const MYSQL2_DC_CHANNEL_POOL_CONNECT = 'mysql2:pool:connect';\n\nconst ORIGIN = 'auto.db.mysql2.diagnostic_channel';\nconst DB_SYSTEM_NAME_VALUE_MYSQL = 'mysql';\n\n// Leading keyword of a SQL statement (SELECT, INSERT, …) → `db.operation.name`.\nconst SQL_OPERATION_RE = /^\\s*(\\w+)/;\n\n/**\n * Shape of the context object mysql2 >= 3.20.0 publishes on its query/execute\n * tracing channels (see mysql2 `lib/base/connection.js`).\n *\n * Node's `traceCallback`/`tracePromise` mutate this same object with\n * `result`/`error` once the operation settles, which `bindTracingChannelToSpan`\n * reads in its lifecycle handlers — hence both are declared optional here.\n *\n * `query` is the SQL statement. On the `query` channel mysql2 has already\n * inlined `values` into it (`Connection.format`), so it carries raw user data;\n * on the `execute` channel it keeps `?` placeholders. Either way we sanitize it\n * before emitting `db.query.text` and never attach `values`.\n */\nexport interface MySQL2QueryData {\n  query?: string;\n  values?: unknown;\n  database?: string;\n  serverAddress?: string;\n  /** Absent for unix-socket connections, where `serverAddress` is the socket path. */\n  serverPort?: number;\n  result?: unknown;\n  error?: Error;\n}\n\n/**\n * Shape of the context object mysql2 >= 3.20.0 publishes on its\n * `connect`/`pool:connect` channels.\n */\nexport interface MySQL2ConnectData {\n  database?: string;\n  serverAddress?: string;\n  serverPort?: number;\n  user?: string;\n  result?: unknown;\n  error?: Error;\n}\n\n/**\n * Platform-provided factory that creates a native tracing channel for the given name. The\n * subscriber binds the span and its lifecycle onto the channel via `bindTracingChannelToSpan`,\n * which propagates the active span through the runtime's async context.\n *\n * Node passes `node:diagnostics_channel`'s `tracingChannel` directly.\n */\nexport type MySQL2TracingChannelFactory = <T extends object>(name: string) => TracingChannel<T, T>;\n\n/**\n * Subscribe Sentry span handlers to mysql2's diagnostics-channel events\n * (`mysql2:query`, `:execute`, `:connect`, `:pool:connect`), published by\n * mysql2 >= 3.20.0.\n *\n * On older mysql2 versions the channels are never published to, so the\n * subscribers are inert — there is no double-instrumentation against the\n * vendored OTel patcher, which is gated to `< 3.20.0`.\n */\nexport function subscribeMysql2DiagnosticChannels(tracingChannel: MySQL2TracingChannelFactory): void {\n  setupQueryChannel(tracingChannel, MYSQL2_DC_CHANNEL_QUERY);\n  setupQueryChannel(tracingChannel, MYSQL2_DC_CHANNEL_EXECUTE);\n  setupConnectChannel(tracingChannel, MYSQL2_DC_CHANNEL_CONNECT, 'mysql2.connect');\n  setupConnectChannel(tracingChannel, MYSQL2_DC_CHANNEL_POOL_CONNECT, 'mysql2.pool.connect');\n}\n\nfunction setupQueryChannel(tracingChannel: MySQL2TracingChannelFactory, channelName: string): void {\n  bindTracingChannelToSpan(\n    tracingChannel<MySQL2QueryData>(channelName),\n    data => {\n      // mysql2 does not sanitize its channel payload, so the statement may carry\n      // raw user values (on the `query` channel they are inlined). Strip every\n      // literal before it leaves the process; `values` is never attached.\n      const queryText = data.query ? _INTERNAL_sanitizeSqlQuery(data.query) : undefined;\n      const operation = queryText?.match(SQL_OPERATION_RE)?.[1]?.toUpperCase();\n\n      return startInactiveSpan({\n        name: queryText || 'mysql2.query',\n        attributes: {\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n          [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'db',\n          [DB_SYSTEM_NAME]: DB_SYSTEM_NAME_VALUE_MYSQL,\n          [DB_QUERY_TEXT]: queryText,\n          [DB_OPERATION_NAME]: operation,\n          [DB_NAMESPACE]: data.database || undefined,\n          [SERVER_ADDRESS]: data.serverAddress,\n          [SERVER_PORT]: data.serverPort,\n        },\n      });\n    },\n    { requiresParentSpan: true },\n  );\n}\n\nfunction setupConnectChannel(tracingChannel: MySQL2TracingChannelFactory, channelName: string, spanName: string): void {\n  bindTracingChannelToSpan(\n    tracingChannel<MySQL2ConnectData>(channelName),\n    data => {\n      return startInactiveSpan({\n        name: spanName,\n        attributes: {\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n          [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'db',\n          [DB_SYSTEM_NAME]: DB_SYSTEM_NAME_VALUE_MYSQL,\n          [DB_NAMESPACE]: data.database || undefined,\n          [SERVER_ADDRESS]: data.serverAddress,\n          [SERVER_PORT]: data.serverPort,\n        },\n      });\n    },\n    { requiresParentSpan: true },\n  );\n}\n", "import { defineIntegration, type IntegrationFn, waitForTracingChannelBinding } from '@sentry/core';\nimport * as dc from 'node:diagnostics_channel';\nimport { subscribeMysql2DiagnosticChannels } from './mysql2-dc-subscriber';\n\nconst _mysql2Integration = (() => {\n  return {\n    name: 'Mysql2',\n    setupOnce() {\n      // Bail on Node <= 18.18.0, where `tracingChannel` does not exist.\n      if (!dc.tracingChannel) {\n        return;\n      }\n\n      // Subscribe to mysql2's native tracing channels (mysql2 >= 3.20.0).\n      // This is a no-op on versions that don't publish to the channels, so it is always safe to call.\n      waitForTracingChannelBinding(() => {\n        subscribeMysql2DiagnosticChannels(dc.tracingChannel);\n      });\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Auto-instrument the [mysql2](https://www.npmjs.com/package/mysql2) library via its native\n * `node:diagnostics_channel` tracing channels (mysql2 >= 3.20.0).\n *\n * On older mysql2 versions the channels are never published to, so this integration is inert and\n * the vendored OTel instrumentation (gated to `< 3.20.0`) handles instrumentation instead.\n */\nexport const mysql2Integration = defineIntegration(_mysql2Integration);\n", "/*\n * Copyright Prisma\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/prisma/prisma/tree/b6feea5565ec577545a79547d24273ccdd11b4c7/packages/instrumentation-contract\n * - Upstream version: @prisma/instrumentation-contract@7.8.0\n * - Replaced `import packageJson from '../package.json'` with hardcoded major version\n */\n\nimport type { PrismaInstrumentationGlobalValue, TracingHelper } from './types';\n\nconst majorVersion = '7';\n\nconst GLOBAL_INSTRUMENTATION_KEY = 'PRISMA_INSTRUMENTATION';\nconst GLOBAL_VERSIONED_INSTRUMENTATION_KEY = `V${majorVersion}_PRISMA_INSTRUMENTATION` as const;\n\ntype GlobalThisWithPrismaInstrumentation = typeof globalThis & {\n  [GLOBAL_INSTRUMENTATION_KEY]?: PrismaInstrumentationGlobalValue;\n} & {\n  [K in typeof GLOBAL_VERSIONED_INSTRUMENTATION_KEY]?: PrismaInstrumentationGlobalValue;\n};\n\nconst globalThisWithPrismaInstrumentation = globalThis as GlobalThisWithPrismaInstrumentation;\n\nexport function getGlobalTracingHelper(): TracingHelper | undefined {\n  const versionedGlobal = globalThisWithPrismaInstrumentation[GLOBAL_VERSIONED_INSTRUMENTATION_KEY];\n\n  if (versionedGlobal?.helper) {\n    return versionedGlobal.helper;\n  }\n\n  const fallbackGlobal = globalThisWithPrismaInstrumentation[GLOBAL_INSTRUMENTATION_KEY];\n\n  return fallbackGlobal?.helper;\n}\n\nexport function setGlobalTracingHelper(helper: TracingHelper): void {\n  const globalValue: PrismaInstrumentationGlobalValue = { helper };\n\n  globalThisWithPrismaInstrumentation[GLOBAL_VERSIONED_INSTRUMENTATION_KEY] = globalValue;\n  globalThisWithPrismaInstrumentation[GLOBAL_INSTRUMENTATION_KEY] = globalValue;\n}\n\nexport function clearGlobalTracingHelper(): void {\n  globalThisWithPrismaInstrumentation[GLOBAL_VERSIONED_INSTRUMENTATION_KEY] = undefined;\n  globalThisWithPrismaInstrumentation[GLOBAL_INSTRUMENTATION_KEY] = undefined;\n}\n", "/*\n * Copyright Prisma\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/prisma/prisma/tree/b6feea5565ec577545a79547d24273ccdd11b4c7/packages/instrumentation\n * - Upstream version: @prisma/instrumentation@7.8.0\n * - Replaced `@prisma/instrumentation-contract` imports with local vendored types\n * - Span creation uses Sentry's span APIs (`startSpanManual` / `startInactiveSpan`) instead of the OTel tracer\n * - Span creation sets the Sentry origin, renames `db_query` spans to their SQL text, and backfills\n *   `db.system` for older Prisma versions\n * - Added a `createEngineSpan` method so a single helper serves both Prisma v5 (which calls\n *   `createEngineSpan`) and v6/v7 (which call `dispatchEngineSpans`)\n */\n\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport {\n  debug,\n  getActiveSpan,\n  LRUMap,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SPAN_KIND,\n  startInactiveSpan,\n  startSpanManual,\n} from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { EngineSpan, ExtendedSpanOptions, SpanCallback, TracingHelper } from './types';\nimport { DB_SYSTEM } from '@sentry/conventions/attributes';\n\n// Reading `process.env` can throw in runtimes that gate env access (e.g. Deno without `--allow-env`)\n// and `process` may be absent altogether (edge runtimes), so this degrades to `false` in those cases.\nconst showAllTraces = ((): boolean => {\n  try {\n    return process.env.PRISMA_SHOW_ALL_TRACES === 'true';\n  } catch {\n    return false;\n  }\n})();\n\nconst nonSampledTraceParent = `00-10-10-00`;\n\nconst PRISMA_ORIGIN = 'auto.db.otel.prisma';\n\ntype Options = {\n  ignoreSpanTypes: (string | RegExp)[];\n};\n\n// Vendored in from @prisma/instrumentation v5:\ntype V5EngineSpanEvent = {\n  span: boolean;\n  spans: V5EngineSpan[];\n};\n\ntype V5EngineSpanKind = 'client' | 'internal';\n\ntype V5EngineSpan = {\n  span: boolean;\n  name: string;\n  trace_id: string;\n  span_id: string;\n  parent_span_id: string;\n  start_time: [number, number];\n  end_time: [number, number];\n  attributes?: Record<string, string>;\n  links?: { trace_id: string; span_id: string }[];\n  kind: V5EngineSpanKind;\n};\n\n// Prisma v5 dispatches engine spans (`prisma:engine:*`, which carry the SQL `db.statement`) one batch\n// at a time, out of order, and detached from the active span, naming their parent only by id: a span\n// references either a client span (by the Sentry span id Prisma learned via `getTraceParent`) or a\n// sibling engine span (by the engine's own id), and a batch may not contain the parent it references.\n// By the time the engine reports them the client span may already have ended, so `getActiveSpan()`\n// can't be used to find it. `prismaSpanRegistry` maps span ids to their Sentry span, and an engine\n// span whose parent isn't registered yet waits in `pendingEngineSpans` until a later batch registers it.\nconst MAX_TRACKED_PRISMA_SPANS = 1000;\nconst prismaSpanRegistry = new LRUMap<string, Span>(MAX_TRACKED_PRISMA_SPANS);\nconst pendingEngineSpans: V5EngineSpan[] = [];\n\n/** Register a span so v5 engine spans can later resolve it as a parent by the id Prisma reports it under. */\nfunction registerPrismaSpan(id: string, span: Span): void {\n  prismaSpanRegistry.set(id, span);\n}\n\n/**\n * Older Prisma versions emit `prisma:engine:db_query` spans without a `db.system`, so it's backfilled here.\n */\nfunction buildSpanAttributes(name: string, attributes: Record<string, unknown> | undefined): SpanAttributes {\n  const merged: SpanAttributes = {\n    ...(attributes as SpanAttributes | undefined),\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: PRISMA_ORIGIN,\n  };\n\n  // oxlint-disable-next-line typescript/no-deprecated\n  if (name === 'prisma:engine:db_query' && merged[DB_SYSTEM] == null) {\n    // oxlint-disable-next-line typescript/no-deprecated\n    merged[DB_SYSTEM] = 'prisma';\n  }\n\n  return merged;\n}\n\n/**\n * Db query spans are named after their SQL text (e.g. `SELECT * FROM \"User\"`) rather than the generic\n * engine name. v5/v6 emit `prisma:engine:db_query`; v7 inlined the engine and emits `prisma:client:db_query`.\n */\nfunction buildSpanName(name: string, attributes: SpanAttributes): string {\n  const queryText = attributes['db.query.text'];\n  if ((name === 'prisma:engine:db_query' || name === 'prisma:client:db_query') && typeof queryText === 'string') {\n    return queryText;\n  }\n  return name;\n}\n\n/**\n * Create every pending v5 engine span whose parent is now registered, repeating until no further span\n * resolves (so a child queued before its parent is created once the parent arrives in a later batch).\n * Each span is created under its resolved parent and registered by its engine id so its own children\n * can find it; origin, the `prisma:engine:db_query` to SQL rename, and the `db.system` backfill are\n * applied here, exactly as for v6/v7 engine spans.\n */\nfunction createResolvedEngineSpans(): void {\n  // Terminates: `createdSpan` is only set true right after a `splice`, so every pass that keeps the\n  // loop going strictly shrinks the finite `pendingEngineSpans`; a pass that resolves nothing exits.\n  let createdSpan = true;\n  while (createdSpan) {\n    createdSpan = false;\n    for (let i = pendingEngineSpans.length - 1; i >= 0; i--) {\n      const engineSpan = pendingEngineSpans[i]!;\n      const parentSpan = prismaSpanRegistry.get(engineSpan.parent_span_id);\n      if (!parentSpan) {\n        continue;\n      }\n\n      const attributes = buildSpanAttributes(engineSpan.name, engineSpan.attributes);\n      const span = startInactiveSpan({\n        name: buildSpanName(engineSpan.name, attributes),\n        attributes,\n        kind: engineSpan.kind === 'client' ? SPAN_KIND.CLIENT : SPAN_KIND.INTERNAL,\n        startTime: engineSpan.start_time,\n        parentSpan,\n      });\n      registerPrismaSpan(engineSpan.span_id, span);\n\n      // Engine links reference other engine spans by their engine id; re-point them at the Sentry spans\n      // we minted (mirroring v6/v7's `dispatchEngineSpan`). Links must be added before the span ends,\n      // since the SentryTracerProvider seals spans on end. Links to spans we haven't created are dropped.\n      if (engineSpan.links) {\n        span.addLinks(\n          engineSpan.links.flatMap(link => {\n            const linkedSpan = prismaSpanRegistry.get(link.span_id);\n            return linkedSpan ? [{ context: linkedSpan.spanContext() }] : [];\n          }),\n        );\n      }\n\n      span.end(engineSpan.end_time);\n\n      pendingEngineSpans.splice(i, 1);\n      createdSpan = true;\n    }\n  }\n}\n\n/**\n * This satisifes the TracingHelper interface for Prisma v5 and v6/v7.\n */\nexport class ActiveTracingHelper implements TracingHelper {\n  private ignoreSpanTypes: (string | RegExp)[];\n\n  public constructor({ ignoreSpanTypes }: Options) {\n    this.ignoreSpanTypes = ignoreSpanTypes;\n  }\n\n  public isEnabled(): boolean {\n    return true;\n  }\n\n  public getTraceParent(span?: Span): string {\n    const spanContext = (span ?? getActiveSpan())?.spanContext();\n    if (spanContext) {\n      return `00-${spanContext.traceId}-${spanContext.spanId}-0${spanContext.traceFlags}`;\n    }\n    return nonSampledTraceParent;\n  }\n\n  public dispatchEngineSpans(spans: EngineSpan[]): void {\n    const linkIds = new Map<string, string>();\n    const roots = spans.filter(span => span.parentId === null);\n\n    for (const root of roots) {\n      dispatchEngineSpan(root, spans, linkIds, this.ignoreSpanTypes);\n    }\n  }\n\n  /**\n   * Prisma v5 broke the tracing helper interface with the v6 major, replacing `createEngineSpan` with\n   * `dispatchEngineSpans`. We implement the v6/v7 interface (`dispatchEngineSpans`) but also keep this\n   * v5-only method so the same helper doesn't blow up in Prisma 5 users' faces, minting v5 engine spans\n   * through Sentry's span APIs instead of crashing.\n   */\n  public createEngineSpan(engineSpanEvent: V5EngineSpanEvent): void {\n    pendingEngineSpans.push(...engineSpanEvent.spans);\n\n    // Resolve before capping so a span is only ever dropped after a full resolution attempt, never\n    // before it had a chance to find its parent. What remains are orphans whose parent was never\n    // registered (e.g. evicted from the registry under sustained load); cap that backlog so it can't\n    // grow without bound.\n    createResolvedEngineSpans();\n\n    const overflow = pendingEngineSpans.length - MAX_TRACKED_PRISMA_SPANS;\n    if (overflow > 0) {\n      DEBUG_BUILD &&\n        debug.log(`[Prisma] Dropping ${overflow} unresolved v5 engine span(s) whose parent was never registered.`);\n      pendingEngineSpans.splice(0, overflow);\n    }\n  }\n\n  public getActiveContext(): Span | undefined {\n    return getActiveSpan();\n  }\n\n  public runInChildSpan<R>(nameOrOptions: string | ExtendedSpanOptions, callback: SpanCallback<R>): R {\n    const options: ExtendedSpanOptions = typeof nameOrOptions === 'string' ? { name: nameOrOptions } : nameOrOptions;\n\n    if (options.internal && !showAllTraces) {\n      return callback();\n    }\n\n    const name = `prisma:client:${options.name}`;\n\n    if (shouldIgnoreSpan(name, this.ignoreSpanTypes)) {\n      return callback();\n    }\n\n    const parentSpan = getActiveSpan();\n\n    const attributes = buildSpanAttributes(name, options.attributes as Record<string, unknown> | undefined);\n    const spanOptions = {\n      name: buildSpanName(name, attributes),\n      attributes,\n      kind: options.kind,\n      links: options.links,\n      startTime: options.startTime,\n      parentSpan,\n    };\n\n    if (options.active === false) {\n      const span = startInactiveSpan(spanOptions);\n      // Register the client span so a v5 engine span (dispatched later, detached) can resolve it as a\n      // parent by the Sentry span id Prisma reported via `getTraceParent` (see `createResolvedEngineSpans`).\n      registerPrismaSpan(span.spanContext().spanId, span);\n      return endSpan(span, () => callback(span, parentSpan));\n    }\n\n    return startSpanManual(spanOptions, span => {\n      registerPrismaSpan(span.spanContext().spanId, span);\n      return endSpan(span, () => callback(span, parentSpan));\n    });\n  }\n}\n\nfunction dispatchEngineSpan(\n  engineSpan: EngineSpan,\n  allSpans: EngineSpan[],\n  linkIds: Map<string, string>,\n  ignoreSpanTypes: (string | RegExp)[],\n): void {\n  if (shouldIgnoreSpan(engineSpan.name, ignoreSpanTypes)) {\n    return;\n  }\n\n  const attributes = buildSpanAttributes(engineSpan.name, engineSpan.attributes);\n\n  startSpanManual(\n    {\n      name: buildSpanName(engineSpan.name, attributes),\n      attributes,\n      kind: engineSpan.kind === 'client' ? SPAN_KIND.CLIENT : SPAN_KIND.INTERNAL,\n      startTime: engineSpan.startTime,\n    },\n    span => {\n      linkIds.set(engineSpan.id, span.spanContext().spanId);\n\n      if (engineSpan.links) {\n        span.addLinks(\n          engineSpan.links.flatMap(link => {\n            const linkedId = linkIds.get(link);\n            if (!linkedId) {\n              return [];\n            }\n            return {\n              context: {\n                spanId: linkedId,\n                traceId: span.spanContext().traceId,\n                traceFlags: span.spanContext().traceFlags,\n              },\n            };\n          }),\n        );\n      }\n\n      const children = allSpans.filter(s => s.parentId === engineSpan.id);\n      for (const child of children) {\n        dispatchEngineSpan(child, allSpans, linkIds, ignoreSpanTypes);\n      }\n\n      span.end(engineSpan.endTime);\n    },\n  );\n}\n\nfunction endSpan<T>(span: Span, run: () => T): T {\n  let result: T;\n  try {\n    result = run();\n  } catch (reason) {\n    span.end();\n    throw reason;\n  }\n\n  if (isPromiseLike(result)) {\n    return result.then(\n      value => {\n        span.end();\n        return value;\n      },\n      reason => {\n        span.end();\n        throw reason;\n      },\n    ) as T;\n  }\n  span.end();\n  return result;\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n  return value != null && typeof (value as Record<string, unknown>)['then'] === 'function';\n}\n\nfunction shouldIgnoreSpan(spanName: string, ignoreSpanTypes: (string | RegExp)[]): boolean {\n  return ignoreSpanTypes.some(pattern => (typeof pattern === 'string' ? pattern === spanName : pattern.test(spanName)));\n}\n", "import type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { setGlobalTracingHelper } from './global';\nimport { ActiveTracingHelper } from './tracing-helper';\n\nconst INTEGRATION_NAME = 'Prisma' as const;\n\nexport interface PrismaInstrumentationConfig {\n  /**\n   * Span types that should not be traced. Matched against the full span name (e.g. `prisma:client:operation`),\n   * either exactly (string) or by pattern (RegExp).\n   */\n  ignoreSpanTypes?: (string | RegExp)[];\n}\n\nexport interface PrismaOptions {\n  /**\n   * @deprecated This is no longer used, v5 works out of the box.\n   */\n  prismaInstrumentation?: unknown;\n  /**\n   * Configuration for the Prisma tracing helper.\n   */\n  instrumentationConfig?: PrismaInstrumentationConfig;\n}\n\n/**\n * Sets up the global Prisma tracing helper that Prisma looks up on `globalThis` to emit tracing data.\n *\n * Prisma reads `globalThis.PRISMA_INSTRUMENTATION` (and its versioned variant) to find a \"TracingHelper\"\n * which it uses internally to create spans, so it can produce tracing data without depending on\n * OpenTelemetry. The helper we install here mints spans through Sentry's span APIs. A single helper\n * serves both Prisma v5 (which calls `createEngineSpan`) and v6/v7 (which call `dispatchEngineSpans`),\n * so it doesn't blow up on version mismatches.\n */\nexport function instrumentPrisma(options?: PrismaOptions): void {\n  setGlobalTracingHelper(\n    new ActiveTracingHelper({\n      ignoreSpanTypes: options?.instrumentationConfig?.ignoreSpanTypes ?? [],\n    }),\n  );\n}\n\nconst _prismaIntegration = ((options?: PrismaOptions) => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      instrumentPrisma(options);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [prisma](https://www.npmjs.com/package/prisma) library.\n * For more information, see the [`prismaIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/prisma/).\n *\n * NOTE: This integration works out of the box with Prisma v6, and v7.\n * On Prisma versions prior to v6, add `previewFeatures = [\"tracing\"]` to the client generator block of your Prisma schema:\n *\n *    ```\n *    generator client {\n *      provider = \"prisma-client-js\"\n *      previewFeatures = [\"tracing\"]\n *    }\n *    ```\n */\nexport const prismaIntegration = defineIntegration(_prismaIntegration);\n", "import type { TracingChannel } from 'node:diagnostics_channel';\nimport {\n  DB_OPERATION_BATCH_SIZE,\n  DB_QUERY_TEXT,\n  DB_SYSTEM_NAME,\n  SERVER_ADDRESS,\n  SERVER_PORT,\n} from '@sentry/conventions/attributes';\nimport type { Span } from '@sentry/core';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, startInactiveSpan } from '@sentry/core';\nimport { bindTracingChannelToSpan } from '../tracing-channel';\n\n// Channel names published by node-redis >= 5.12.0 and ioredis >= 5.11.0.\n// Hardcoded so the subscriber does not have to import either library — the\n// channels just have to be subscribed to before the user's redis code\n// publishes.\nexport const REDIS_DC_CHANNEL_COMMAND = 'node-redis:command';\nexport const REDIS_DC_CHANNEL_BATCH = 'node-redis:batch';\nexport const REDIS_DC_CHANNEL_CONNECT = 'node-redis:connect';\nexport const IOREDIS_DC_CHANNEL_COMMAND = 'ioredis:command';\nexport const IOREDIS_DC_CHANNEL_CONNECT = 'ioredis:connect';\n\nconst ORIGIN = 'auto.db.redis.diagnostic_channel';\nconst DB_SYSTEM_NAME_VALUE_REDIS = 'redis';\n\n/**\n * Shape of the `node-redis:command` channel payload published by node-redis.\n *\n * Both `command` and `args` are already redacted by node-redis itself (see\n * `sanitizeArgs` in @redis/client) using the OTel `redis-common` rules. The\n * arg array is `[<command>, <safe arg>, ..., '?', ...]` — `?` replaces any\n * value the library considers sensitive. Subscribers can emit `args` directly\n * as `db.query.text` without further serialization.\n */\nexport interface RedisCommandData {\n  command: string;\n  /** First arg is the command name itself; consumers should slice it off. */\n  args: string[];\n  database?: number;\n  serverAddress?: string;\n  serverPort?: number;\n  result?: unknown;\n  error?: Error;\n}\n\n/**\n * Shape of the `ioredis:command` channel payload published by ioredis >= 5.11.0.\n *\n * As with node-redis, args are already sanitized by ioredis (`sanitizeArgs` in\n * `lib/tracing.ts`) before publishing. Unlike node-redis, the command name is\n * NOT prepended to `args`.\n */\nexport interface IORedisCommandData {\n  command: string;\n  args: string[];\n  batchMode?: 'MULTI';\n  batchSize?: number;\n  database?: number;\n  serverAddress?: string;\n  serverPort?: number;\n  result?: unknown;\n  error?: Error;\n}\n\n/** Shape of the `node-redis:batch` channel payload published by node-redis. */\nexport interface RedisBatchData {\n  batchMode?: 'MULTI' | 'PIPELINE';\n  batchSize?: number;\n  database?: number;\n  clientId?: string | number;\n  serverAddress?: string;\n  serverPort?: number;\n  result?: unknown[];\n  error?: Error;\n}\n\n/** Shape of the `*:connect` channel payload published by node-redis and ioredis. */\nexport interface RedisConnectData {\n  serverAddress?: string;\n  serverPort?: number;\n  url?: string;\n  error?: Error;\n}\n\n/**\n * Optional callback invoked once the redis command response arrives. Useful\n * for attaching response-derived attributes (e.g. cache hit/miss, payload size).\n *\n * Mirrors `@opentelemetry/instrumentation-ioredis`' response hook so existing\n * Sentry node code (`cacheResponseHook`) can be reused unchanged.\n */\nexport type RedisDiagnosticChannelResponseHook = (\n  span: Span,\n  cmdName: string,\n  cmdArgs: string[],\n  result: unknown,\n) => void;\n\n/**\n * Platform-provided factory that creates a native tracing channel for the given name. The\n * subscriber binds the span and its lifecycle onto the channel via `bindTracingChannelToSpan`,\n * which propagates the active span through the runtime's async context.\n *\n * Both Node and Deno pass `node:diagnostics_channel`'s `tracingChannel` directly.\n */\nexport type RedisTracingChannelFactory = <T extends object>(name: string) => TracingChannel<T, T>;\n\n/**\n * Subscribe Sentry span handlers to node-redis and ioredis diagnostics-channel\n * events: `node-redis:command`/`:batch`/`:connect` (published by node-redis\n * >= 5.12.0) and `ioredis:command`/`:connect` (published by ioredis >= 5.11.0).\n *\n * On older client versions the channels are never published to, so subscribers\n * are inert — there is no double-instrumentation against any IITM-based\n * patcher gated to those older versions.\n */\nexport function subscribeRedisDiagnosticChannels(\n  tracingChannel: RedisTracingChannelFactory,\n  responseHook?: RedisDiagnosticChannelResponseHook,\n): void {\n  // node-redis: command name appears as args[0] in the channel payload, so\n  // strip it before the statement and response hook see it.\n  setupCommandChannel<RedisCommandData>(\n    tracingChannel,\n    REDIS_DC_CHANNEL_COMMAND,\n    data => data.args.slice(1),\n    responseHook,\n  );\n  setupBatchChannel(tracingChannel, REDIS_DC_CHANNEL_BATCH, data =>\n    data.batchMode === 'PIPELINE' ? 'PIPELINE' : 'MULTI',\n  );\n  setupConnectChannel(tracingChannel, REDIS_DC_CHANNEL_CONNECT);\n  // ioredis: args already exclude the command name; no slicing needed. And\n  // ioredis has no separate batch channel — pipeline/MULTI metadata rides\n  // on the per-command payload via `batchMode`/`batchSize`.\n  setupCommandChannel<IORedisCommandData>(tracingChannel, IOREDIS_DC_CHANNEL_COMMAND, data => data.args, responseHook);\n  setupConnectChannel(tracingChannel, IOREDIS_DC_CHANNEL_CONNECT);\n}\n\nfunction setupCommandChannel<T extends RedisCommandData | IORedisCommandData>(\n  tracingChannel: RedisTracingChannelFactory,\n  channelName: string,\n  getCommandArgs: (data: T) => string[],\n  responseHook?: RedisDiagnosticChannelResponseHook,\n): void {\n  bindTracingChannelToSpan(\n    tracingChannel<T>(channelName),\n    data => {\n      // `args` is already sanitized by the publishing library (node-redis /\n      // ioredis call their own `sanitizeArgs` before publishing). Join with\n      // spaces to mirror the format the libraries themselves intend.\n      const args = getCommandArgs(data);\n      const statement = args.length ? `${data.command} ${args.join(' ')}` : data.command;\n      return startInactiveSpan({\n        name: `redis-${data.command}`,\n        attributes: {\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n          [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'db.redis',\n          [DB_SYSTEM_NAME]: DB_SYSTEM_NAME_VALUE_REDIS,\n          [DB_QUERY_TEXT]: statement,\n          ...(data.serverAddress != null ? { [SERVER_ADDRESS]: data.serverAddress } : {}),\n          ...(data.serverPort != null ? { [SERVER_PORT]: data.serverPort } : {}),\n        },\n      });\n    },\n    {\n      beforeSpanEnd(span, data) {\n        if ('error' in data) return;\n        runResponseHook(responseHook, span, data.command, getCommandArgs(data), data.result);\n      },\n    },\n  );\n}\n\nfunction setupBatchChannel(\n  tracingChannel: RedisTracingChannelFactory,\n  channelName: string,\n  getOperationName: (data: RedisBatchData) => string,\n): void {\n  bindTracingChannelToSpan(tracingChannel<RedisBatchData>(channelName), data => {\n    return startInactiveSpan({\n      name: getOperationName(data),\n      attributes: {\n        [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n        [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'db.redis',\n        [DB_SYSTEM_NAME]: DB_SYSTEM_NAME_VALUE_REDIS,\n        // should only include batch size greater than 1,\n        // or else it isn't properly considered a \"batch\"\n        ...(Number(data.batchSize) > 1 ? { [DB_OPERATION_BATCH_SIZE]: data.batchSize } : {}),\n        ...(data.serverAddress != null ? { [SERVER_ADDRESS]: data.serverAddress } : {}),\n        ...(data.serverPort != null ? { [SERVER_PORT]: data.serverPort } : {}),\n      },\n    });\n  });\n}\n\nfunction setupConnectChannel(tracingChannel: RedisTracingChannelFactory, channelName: string): void {\n  bindTracingChannelToSpan(tracingChannel<RedisConnectData>(channelName), data => {\n    return startInactiveSpan({\n      name: 'redis-connect',\n      attributes: {\n        [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n        [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'db.redis.connect',\n        [DB_SYSTEM_NAME]: DB_SYSTEM_NAME_VALUE_REDIS,\n        ...(data.serverAddress != null ? { [SERVER_ADDRESS]: data.serverAddress } : {}),\n        ...(data.serverPort != null ? { [SERVER_PORT]: data.serverPort } : {}),\n      },\n    });\n  });\n}\n\nfunction runResponseHook(\n  hook: RedisDiagnosticChannelResponseHook | undefined,\n  span: Span,\n  command: string,\n  args: string[],\n  result: unknown,\n): void {\n  if (!hook) return;\n  try {\n    hook(span, command, args, result);\n  } catch {\n    // never let user hooks break instrumentation\n  }\n}\n", "import { defineIntegration, type IntegrationFn, waitForTracingChannelBinding } from '@sentry/core';\nimport * as dc from 'node:diagnostics_channel';\nimport { type RedisDiagnosticChannelResponseHook, subscribeRedisDiagnosticChannels } from './redis-dc-subscriber';\n\n/** Options controlling the redis diagnostics-channel subscription. */\nexport interface RedisDiagnosticChannelsOptions {\n  /**\n   * Optional hook invoked once the redis command response arrives. Useful for attaching\n   * response-derived attributes (e.g. cache hit/miss, payload size).\n   */\n  responseHook?: RedisDiagnosticChannelResponseHook;\n}\n\nconst _redisIntegration = ((options: RedisDiagnosticChannelsOptions = {}) => {\n  return {\n    name: 'Redis',\n    setupOnce() {\n      // Bail on runtimes without `tracingChannel` (Node <= 18.18.0).\n      if (!dc.tracingChannel) {\n        return;\n      }\n\n      waitForTracingChannelBinding(() => {\n        subscribeRedisDiagnosticChannels(dc.tracingChannel, options.responseHook);\n      });\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Auto-instrument the [redis](https://www.npmjs.com/package/redis) and\n * [ioredis](https://www.npmjs.com/package/ioredis) libraries via their native\n * `node:diagnostics_channel` tracing channels (node-redis >= 5.12.0, ioredis >= 5.11.0).\n */\nexport const redisIntegration = defineIntegration(_redisIntegration);\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/instrumentation-redis-v0.62.0/packages/redis-common\n * - Upstream version: @opentelemetry/redis-common@0.38.2\n *\n * Single canonical copy, shared by the orchestrion ioredis subscriber here and\n * the node SDK's vendored redis/ioredis instrumentations (which re-export it via\n * `packages/node/src/integrations/tracing/redis/vendored/redis-common.ts`).\n */\n/* eslint-disable -- vendored @opentelemetry/redis-common */\n\n/**\n * List of regexes and the number of arguments that should be serialized for matching commands.\n * For example, HSET should serialize which key and field it's operating on, but not its value.\n * Setting the subset to -1 will serialize all arguments.\n * Commands without a match will have their first argument serialized.\n *\n * Refer to https://redis.io/commands/ for the full list.\n */\nconst serializationSubsets = [\n  {\n    regex: /^ECHO/i,\n    args: 0,\n  },\n  {\n    regex: /^(LPUSH|MSET|PFA|PUBLISH|RPUSH|SADD|SET|SPUBLISH|XADD|ZADD)/i,\n    args: 1,\n  },\n  {\n    regex: /^(HSET|HMSET|LSET|LINSERT)/i,\n    args: 2,\n  },\n  {\n    regex:\n      /^(ACL|BIT|B[LRZ]|CLIENT|CLUSTER|CONFIG|COMMAND|DECR|DEL|EVAL|EX|FUNCTION|GEO|GET|HINCR|HMGET|HSCAN|INCR|L[TRLM]|MEMORY|P[EFISTU]|RPOP|S[CDIMORSU]|XACK|X[CDGILPRT]|Z[CDILMPRS])/i,\n    args: -1,\n  },\n];\n\n/**\n * Given the redis command name and arguments, return a combination of the\n * command name + the allowed arguments according to `serializationSubsets`.\n */\nexport const defaultDbStatementSerializer = (\n  cmdName: string,\n  cmdArgs: Array<string | Buffer | number | unknown[]>,\n): string => {\n  if (Array.isArray(cmdArgs) && cmdArgs.length) {\n    const nArgsToSerialize = serializationSubsets.find(({ regex }) => regex.test(cmdName))?.args ?? 0;\n    const argsToSerialize: Array<string | Buffer | number | unknown[]> =\n      nArgsToSerialize >= 0 ? cmdArgs.slice(0, nArgsToSerialize) : cmdArgs.slice();\n    if (cmdArgs.length > argsToSerialize.length) {\n      argsToSerialize.push(`[${cmdArgs.length - nArgsToSerialize} other arguments]`);\n    }\n    return `${cmdName} ${argsToSerialize.join(' ')}`;\n  }\n  return cmdName;\n};\n", "/** Shared, state-free helpers for the Vercel AI (`ai`) channel subscribers, plus the streamed model-call tap. */\n\nimport { isObjectLike } from '@sentry/core';\n\n/** Narrow to a string, or `undefined` for anything else. */\nexport function asString(value: unknown): string | undefined {\n  return typeof value === 'string' ? value : undefined;\n}\n\n/** Narrow to a finite number, or `undefined` for anything else (including `NaN`). */\nexport function asNumber(value: unknown): number | undefined {\n  return typeof value === 'number' && !isNaN(value) ? value : undefined;\n}\n\n/** Add two optional numbers, treating a missing operand as `0` but returning `undefined` when both are absent. */\nexport function sum(a: number | undefined, b: number | undefined): number | undefined {\n  return a === undefined && b === undefined ? undefined : (a ?? 0) + (b ?? 0);\n}\n\n/*\n * Streaming support for the `ai:telemetry` tracing channel.\n *\n * For a streamed model call (`doStream`) the SDK resolves the `languageModelCall` channel promise as\n * soon as it hands back the *unconsumed* stream — so `result.stream` is a `ReadableStream` and the\n * final usage / finish reason / output only arrive later, as the stream is drained (they ride the\n * stream's own `finish`/`text-delta`/`tool-call` chunks, never the channel context). The SDK\n * deliberately leaves `result` undefined on the `streamText`/`step` contexts and exposes the stream\n * only on the model call, expecting consumers to tap it themselves.\n * @see https://github.com/vercel/ai/pull/15660 (discussion: \"tee off and aggregate ourselves\")\n *\n * We replace `result.stream` with a passthrough that forwards every chunk untouched (so the SDK's own\n * consumption is unaffected) while accumulating the data we need, then hand the aggregate back once the\n * stream settles so the model-call span can be enriched and ended out-of-band.\n */\n\n/** The subset of a streamed provider chunk we read. Unknown chunk types are forwarded and ignored. */\ninterface StreamChunk {\n  type?: unknown;\n  delta?: unknown;\n  // v4 text-delta chunks carry the text on `textDelta`; v5+ uses `delta`.\n  textDelta?: unknown;\n  id?: unknown;\n  modelId?: unknown;\n  toolCallId?: unknown;\n  toolName?: unknown;\n  input?: unknown;\n  args?: unknown;\n  finishReason?: unknown;\n  usage?: unknown;\n  providerMetadata?: unknown;\n  error?: unknown;\n}\n\n/** The aggregate handed back once a streamed model call finishes, in the shape `enrichSpanOnEnd` expects. */\nexport interface StreamedModelCallResult {\n  text?: string;\n  toolCalls: Array<Record<string, unknown>>;\n  usage?: unknown;\n  finishReason?: unknown;\n  responseId?: string;\n  responseModel?: string;\n  providerMetadata?: unknown;\n}\n\n/** A minimal structural check — the streamed model call exposes a web `ReadableStream` on `result.stream`. */\nexport function isReadableStream(value: unknown): value is ReadableStream<unknown> {\n  return (\n    isObjectLike(value) &&\n    typeof (value as { pipeThrough?: unknown }).pipeThrough === 'function' &&\n    typeof (value as { getReader?: unknown }).getReader === 'function'\n  );\n}\n\n/**\n * Wrap a streamed model call's `ReadableStream` so its chunks are observed as the SDK consumes them,\n * without altering what the SDK sees. Returns a replacement stream to swap onto `result.stream`.\n *\n * `onFinal` runs exactly once when the stream drains cleanly; `onError` runs exactly once if it errors\n * or is cancelled. Reading one source chunk per `pull` preserves the SDK's backpressure. The\n * `try/catch` around every read guarantees the owning span is always ended — a leaked open span on a\n * mid-stream failure would be worse than a slightly-less-enriched one.\n */\nexport function tapModelCallStream(\n  stream: ReadableStream<unknown>,\n  onFinal: (result: StreamedModelCallResult) => void,\n  onError: (error: unknown) => void,\n): ReadableStream<unknown> {\n  const reader = stream.getReader();\n  const state: StreamedModelCallResult = { toolCalls: [] };\n  let text = '';\n  let settled = false;\n\n  const finalize = (): void => {\n    if (settled) {\n      return;\n    }\n    settled = true;\n    if (text) {\n      state.text = text;\n    }\n    onFinal(state);\n  };\n\n  const fail = (error: unknown): void => {\n    if (settled) {\n      return;\n    }\n    settled = true;\n    onError(error);\n  };\n\n  return new ReadableStream<unknown>({\n    async pull(controller) {\n      try {\n        const { done, value } = await reader.read();\n        if (done) {\n          finalize();\n          controller.close();\n\n          return;\n        }\n        text += accumulateChunk(state, value) ?? '';\n        controller.enqueue(value);\n      } catch (error) {\n        fail(error);\n        controller.error(error);\n      }\n    },\n    cancel(reason) {\n      // Consumer stopped reading early (e.g. a `break` out of `for await`); close out the span with\n      // whatever we have rather than leave it open. A non-error reason is a deliberate stop, not a failure.\n      finalize();\n\n      return reader.cancel(reason);\n    },\n  });\n}\n\n/**\n * Fold a single streamed chunk into the running aggregate. Returns any text delta so the caller can\n * accumulate it (kept out of `state` until the end to avoid re-joining on every chunk).\n */\nfunction accumulateChunk(state: StreamedModelCallResult, chunk: unknown): string | undefined {\n  if (!isObjectLike(chunk)) {\n    return undefined;\n  }\n  const {\n    type,\n    delta,\n    textDelta,\n    id,\n    modelId,\n    toolCallId,\n    toolName,\n    input,\n    args,\n    finishReason,\n    usage,\n    providerMetadata,\n  } = chunk as StreamChunk;\n\n  switch (type) {\n    case 'text-delta': {\n      const textChunk = delta ?? textDelta;\n      return typeof textChunk === 'string' ? textChunk : undefined;\n    }\n    case 'tool-call':\n      state.toolCalls.push({ toolCallId, toolName, input: input ?? args });\n\n      return undefined;\n    case 'response-metadata':\n      if (typeof id === 'string') {\n        state.responseId = id;\n      }\n      if (typeof modelId === 'string') {\n        state.responseModel = modelId;\n      }\n\n      return undefined;\n    case 'finish':\n      state.finishReason = finishReason;\n      state.usage = usage;\n      if (providerMetadata !== undefined) {\n        state.providerMetadata = providerMetadata;\n      }\n\n      return undefined;\n    default:\n      return undefined;\n  }\n}\n", "/* eslint-disable max-lines */\n// `@sentry/conventions` marks several gen_ai attributes (e.g. `GEN_AI_SYSTEM`, `GEN_AI_TOOL_*`,\n// `GEN_AI_REQUEST_AVAILABLE_TOOLS`) as deprecated in favour of newer semconv names. We intentionally\n// keep emitting the current names so these spans match the OTel-based (v6) integration and what the\n// Sentry product consumes today; migrating to the new names is a separate, coordinated change.\n/* eslint-disable typescript-eslint/no-deprecated */\nimport {\n  GEN_AI_EMBEDDINGS_INPUT,\n  GEN_AI_FUNCTION_ID,\n  GEN_AI_INPUT_MESSAGES,\n  GEN_AI_OPERATION_NAME,\n  GEN_AI_OUTPUT_MESSAGES,\n  GEN_AI_REQUEST_AVAILABLE_TOOLS,\n  GEN_AI_REQUEST_MODEL,\n  GEN_AI_RESPONSE_FINISH_REASONS,\n  GEN_AI_RESPONSE_ID,\n  GEN_AI_RESPONSE_MODEL,\n  GEN_AI_RESPONSE_STREAMING,\n  GEN_AI_SYSTEM,\n  GEN_AI_TOOL_INPUT,\n  GEN_AI_TOOL_NAME,\n  GEN_AI_TOOL_OUTPUT,\n  GEN_AI_TOOL_TYPE,\n  GEN_AI_USAGE_INPUT_TOKENS,\n  GEN_AI_USAGE_OUTPUT_TOKENS,\n  GEN_AI_USAGE_TOTAL_TOKENS,\n} from '@sentry/conventions/attributes';\nimport { GEN_AI_EXECUTE_TOOL_SPAN_OP, GEN_AI_INVOKE_AGENT_SPAN_OP } from '@sentry/conventions/op';\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport {\n  _INTERNAL_skipAiProviderWrapping,\n  captureException,\n  GEN_AI_CONVERSATION_ID_ATTRIBUTE,\n  GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE,\n  GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE,\n  LAST_STEP_ONLY_USAGE_KEYS,\n  getClient,\n  getProviderMetadataAttributes,\n  getTruncatedJsonString,\n  isObjectLike,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  shouldEnableTruncation,\n  SPAN_STATUS_ERROR,\n  spanToJSON,\n  spanToTraceContext,\n  startInactiveSpan,\n  stringify,\n  withScope,\n} from '@sentry/core';\nimport type { TracingChannel } from 'node:diagnostics_channel';\nimport { bindTracingChannelToSpan } from '../tracing-channel';\nimport { asNumber, asString, isReadableStream, type StreamedModelCallResult, sum, tapModelCallStream } from './util';\n\n/**\n * The single tracing channel the `ai` package (>= 7) publishes all telemetry lifecycle events to\n * via `node:diagnostics_channel`. Events are discriminated by their `type` field.\n * @see https://github.com/vercel/ai/pull/15660\n */\nconst AI_SDK_TELEMETRY_TRACING_CHANNEL = 'ai:telemetry';\n\nconst ORIGIN = 'auto.vercelai.channel';\n\n// `@sentry/conventions` does not expose these yet, so we keep the literals here.\nconst GEN_AI_TOOL_CALL_ID_ATTRIBUTE = 'gen_ai.tool.call.id';\nconst GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE = 'gen_ai.tool.description';\nconst GEN_AI_EMBEDDINGS_OPERATION = 'embeddings';\nconst GEN_AI_RERANK_OPERATION = 'rerank';\n// The model-call op matches the Vercel AI OTel integration (`gen_ai.generate_content`) rather than\n// the generic `gen_ai.chat`, so v6 (OTel) and v7 (channel) produce the same spans.\nconst GEN_AI_GENERATE_CONTENT_OPERATION = 'generate_content';\n// TODO(v11): export the constant from server-utils and import it here instead.\nconst WORKERS_AI_INTEGRATION_NAME = 'WorkersAI';\n\n// Subset of the `vercel.ai.*` passthrough attributes the OTel integration emits that we reproduce.\nconst VERCEL_AI_OPERATION_ID_ATTRIBUTE = 'vercel.ai.operationId';\nconst VERCEL_AI_MODEL_PROVIDER_ATTRIBUTE = 'vercel.ai.model.provider';\nconst VERCEL_AI_SETTINGS_MAX_RETRIES_ATTRIBUTE = 'vercel.ai.settings.maxRetries';\n\n// Tracks the top-level operationId (and whether it streams) per `callId` so a model-call span can\n// name its `doGenerate`/`doStream` operation the same way the OTel integration does. `isStream` is\n// the authoritative event-type signal rather than a substring check on the (possibly custom)\n// operationId. Cleared when the top-level span ends.\nconst operationIdByCallId = new Map<string, { operationId: string; isStream: boolean }>();\n\n// Per-operation map of tool name → description, harvested from a model-call /\n// top-level event's `tools` (keyed by the shared `callId`). The AI SDK's\n// `executeTool` event doesn't carry the tool's description, so we backfill it\n// onto the tool span here — without relying on the OTel `vercelAiEventProcessor`\n// (which isn't registered in channel/orchestrion mode). Cleared with the\n// operation. Only populated when inputs are recorded, matching the OTel path\n// (which sources descriptions from the recorded `available_tools`).\nconst toolDescriptionsByCallId = new Map<string, Map<string, string>>();\n\n// A streamed `streamText` operation's own channel result is always `undefined` (the SDK exposes the\n// stream only on the model call), so its `invoke_agent` span can't be enriched from the channel. We\n// key the span by `callId` and enrich it as each streamed model call drains — the model calls flush\n// before the operation's own span ends. The running token sum lives on the span's own attributes.\nconst invokeAgentSpanByCallId = new Map<string, Span>();\n\n// Only top-level operations own the `callId` → operationId mapping; `step`/`languageModelCall`/\n// `executeTool` share the parent's `callId`, so they must not clear it.\nconst ROOT_OPERATION_TYPES = new Set<ChannelEventType>([\n  'generateText',\n  'streamText',\n  'generateObject',\n  'embed',\n  'embedMany',\n  'rerank',\n]);\n\n/** Drop the per-operation `callId` maps once the owning top-level operation settles (success or error). */\nexport function clearOperationId(data: VercelAiChannelMessage): void {\n  if (!ROOT_OPERATION_TYPES.has(data.type)) {\n    return;\n  }\n  const callId = asString(data.event.callId);\n  if (callId) {\n    clearOperationCallId(callId);\n  }\n}\n\n/**\n * Drop the per-operation `callId` maps for a single id. The v6 orchestrion adapter uses this to clear a\n * `streamText` operation only after its lazily-run model call settles — the operation's own span ends\n * synchronously (when `streamText` returns) but the model call runs later as the stream is consumed, and\n * it still needs the operation's `operationId`/`isStream` entry to name itself `ai.streamText.doStream`.\n */\nexport function clearOperationCallId(callId: string): void {\n  operationIdByCallId.delete(callId);\n  toolDescriptionsByCallId.delete(callId);\n  invokeAgentSpanByCallId.delete(callId);\n}\n\n/**\n * `providerMetadata` is last-step only; drop derived usage on spans that report an aggregate.\n * Matches `addProviderMetadataToAttributes`.\n */\nfunction dropLastStepOnlyUsage(providerAttributes: Record<string, number | string>, type: ChannelEventType): void {\n  if (!ROOT_OPERATION_TYPES.has(type)) {\n    return;\n  }\n  for (const key of LAST_STEP_ONLY_USAGE_KEYS) {\n    // oxlint-disable-next-line typescript/no-dynamic-delete\n    delete providerAttributes[key];\n  }\n}\n\n/** Record tool name → description from an event's `tools`, so tool spans can backfill the description. */\nfunction recordToolDescriptions(callId: string | undefined, tools: unknown): void {\n  if (!callId || !Array.isArray(tools)) {\n    return;\n  }\n  let descriptions = toolDescriptionsByCallId.get(callId);\n  for (const tool of tools) {\n    if (isObjectLike(tool) && typeof tool.name === 'string' && typeof tool.description === 'string') {\n      descriptions = descriptions ?? new Map();\n      if (!descriptions.has(tool.name)) {\n        descriptions.set(tool.name, tool.description);\n      }\n    }\n  }\n  if (descriptions) {\n    toolDescriptionsByCallId.set(callId, descriptions);\n  }\n}\n\n/**\n * Resolve a tool's description, preferring the per-operation map (populated from the model-call /\n * top-level event's `tools`, v7) and falling back to a `tools` collection on the event itself —\n * which may be an array of `{ name, description }` or a record keyed by tool name (v6).\n */\nfunction resolveToolDescription(callId: string | undefined, toolName: string, tools: unknown): string | undefined {\n  const fromMap = callId ? toolDescriptionsByCallId.get(callId)?.get(toolName) : undefined;\n  if (fromMap) {\n    return fromMap;\n  }\n  if (Array.isArray(tools)) {\n    const match = tools.find(tool => isObjectLike(tool) && tool.name === toolName);\n    return isObjectLike(match) ? asString(match.description) : undefined;\n  }\n  if (isObjectLike(tools)) {\n    const tool = tools[toolName];\n    return isObjectLike(tool) ? asString(tool.description) : undefined;\n  }\n  return undefined;\n}\n\n/** The lifecycle event types the `ai:telemetry` channel can carry. */\nexport type ChannelEventType =\n  | 'generateText'\n  | 'streamText'\n  | 'generateObject'\n  | 'step'\n  | 'languageModelCall'\n  | 'executeTool'\n  | 'embed'\n  | 'embedMany'\n  | 'rerank';\n\n/**\n * The context object the AI SDK passes through one tracing-channel call. It is the same object\n * identity across `start`/`end`/`asyncEnd`/`error`, and Node's `tracingChannel` attaches\n * `result`/`error` to it as the traced promise settles.\n */\nexport interface VercelAiChannelMessage {\n  type: ChannelEventType;\n  event: Record<string, unknown>;\n  result?: unknown;\n  error?: unknown;\n}\n\n/**\n * Platform-provided factory that returns a tracing channel for the given channel name. The factory\n * is responsible for, when `start` fires, calling `transformStart(data)` and storing the returned\n * span on `data._sentrySpan` so the subscriber's `asyncEnd`/`error` handlers can read it.\n *\n * Node passes `@sentry/opentelemetry/tracing-channel`, which uses `bindStore` to additionally make\n * the span the active OTel context for the duration of the traced operation. That is what makes\n * nested AI SDK operations (model calls, tool calls) become children of the enclosing span without\n * any manual parent bookkeeping here.\n */\nexport type VercelAiTracingChannelFactory = <T extends object>(name: string) => TracingChannel<T, T>;\n\n/** Integration-level recording options, pinned at subscribe time so we never look the integration up per event. */\nexport interface VercelAiChannelOptions {\n  recordInputs?: boolean;\n  recordOutputs?: boolean;\n  enableTruncation?: boolean;\n}\n\n/**\n * Subscribe Sentry span handlers to the `ai` SDK's native telemetry tracing channel (`ai:telemetry`,\n * available in `ai` >= 7) and emit fully-formed `gen_ai.*` spans directly — no OpenTelemetry span\n * post-processing involved.\n *\n * The integration passes its options in directly (rather than us looking the integration up on every\n * event); the global `dataCollection.genAI` default is still read from the client per event.\n *\n * Safe to always call: on `ai` versions that don't publish to the channel (e.g. < 7) nothing is\n * ever emitted and this is inert, so there is no double-instrumentation against the OTel-based\n * patcher. The integration's `setupOnce` guarantees this runs a single time.\n */\nexport function subscribeVercelAiTracingChannel(\n  tracingChannel: VercelAiTracingChannelFactory,\n  options: VercelAiChannelOptions = {},\n): void {\n  bindTracingChannelToSpan(\n    tracingChannel<VercelAiChannelMessage>(AI_SDK_TELEMETRY_TRACING_CHANNEL),\n    data => createSpanFromMessage(data, options),\n    {\n      // The helper ends the span; we enrich it from the settled result first (tokens, output messages,\n      // finish reasons, response model/id, provider metadata) and drop the per-operation `callId` maps.\n      beforeSpanEnd: (span, data) => {\n        enrichSpanOnEnd(span, data, options);\n        clearOperationId(data);\n      },\n      // A streamed model call resolves before its stream is drained, so we tap the stream, keep the\n      // span open, and end it (via `end`) once the final usage/finish/output chunks arrive.\n      deferSpanEnd: ({ data, end }) => deferStreamedModelCallEnd(data, options, end),\n    },\n  );\n}\n\n/**\n * When a `languageModelCall` resolves to a live `ReadableStream`, defer ending its span: swap in a\n * passthrough that forwards chunks to the SDK untouched while aggregating usage/finish/output, then\n * enrich and end the span once the stream settles. Returns `false` for anything that isn't a streamed\n * model call so the helper ends the span as usual.\n */\nfunction deferStreamedModelCallEnd(\n  data: VercelAiChannelMessage,\n  options: VercelAiChannelOptions,\n  end: (error?: unknown) => void,\n): boolean {\n  if (data.type !== 'languageModelCall' || !isObjectLike(data.result)) {\n    return false;\n  }\n  const result = data.result;\n  const stream = result.stream;\n  if (!isReadableStream(stream)) {\n    return false;\n  }\n\n  const callId = asString(data.event.callId);\n  const { recordOutputs } = getRecordingOptions(data.event, options);\n  result.stream = tapModelCallStream(\n    stream,\n    final => {\n      // Reshape the aggregate into the result `enrichSpanOnEnd` expects, then let `end` run it (it calls\n      // `beforeSpanEnd`). Enriching the model-call span and the parent from the same aggregate keeps\n      // streamed and non-streamed spans identical.\n      data.result = { ...result, ...streamedResultToChannelResult(final) };\n      end();\n      enrichInvokeAgentFromStream(callId, final, recordOutputs);\n    },\n    error => end(error),\n  );\n\n  return true;\n}\n\n/** Map the tapped stream aggregate onto the `languageModelCall` result shape `enrichSpanOnEnd` reads. */\nexport function streamedResultToChannelResult(final: StreamedModelCallResult): Record<string, unknown> {\n  const content: Array<Record<string, unknown>> = [];\n  if (final.text) {\n    content.push({ type: 'text', text: final.text });\n  }\n  for (const toolCall of final.toolCalls) {\n    content.push({ type: 'tool-call', ...toolCall });\n  }\n\n  return {\n    content,\n    ...(final.usage !== undefined ? { usage: final.usage } : {}),\n    ...(final.finishReason !== undefined ? { finishReason: final.finishReason } : {}),\n    ...(final.providerMetadata !== undefined ? { providerMetadata: final.providerMetadata } : {}),\n    ...(final.responseId || final.responseModel\n      ? {\n          response: {\n            ...(final.responseId ? { id: final.responseId } : {}),\n            ...(final.responseModel ? { modelId: final.responseModel } : {}),\n          },\n        }\n      : {}),\n  };\n}\n\n/**\n * Propagate a streamed model call's usage (summed across the operation's model calls) and output onto\n * the enclosing `invoke_agent` span, which has no channel result of its own. Runs before that span ends\n * because the operation's completion promise settles only after every model-call stream has drained.\n */\nfunction enrichInvokeAgentFromStream(\n  callId: string | undefined,\n  final: StreamedModelCallResult,\n  recordOutputs: boolean,\n): void {\n  const span = callId ? invokeAgentSpanByCallId.get(callId) : undefined;\n  if (!span) {\n    return;\n  }\n\n  const usage = isObjectLike(final.usage) ? final.usage : undefined;\n  if (usage) {\n    const input = tokenCount(usage.inputTokens) ?? tokenCount(usage.promptTokens) ?? tokenCount(usage.tokens);\n    const output = tokenCount(usage.outputTokens) ?? tokenCount(usage.completionTokens);\n    addTokensToSpan(span, GEN_AI_USAGE_INPUT_TOKENS, input);\n    addTokensToSpan(span, GEN_AI_USAGE_OUTPUT_TOKENS, output);\n    addTokensToSpan(span, GEN_AI_USAGE_TOTAL_TOKENS, tokenCount(usage.totalTokens) ?? sum(input, output));\n  }\n\n  if (recordOutputs) {\n    const parts = partsFromTextAndToolCalls(final.text, final.toolCalls);\n    const outputMessages = buildOutputMessages(parts, getFinishReason({ finishReason: final.finishReason }));\n    if (outputMessages) {\n      span.setAttribute(GEN_AI_OUTPUT_MESSAGES, outputMessages);\n    }\n  }\n}\n\n/** Add `value` into a span's numeric token attribute, using the span itself as the running sum. */\nfunction addTokensToSpan(span: Span, attribute: string, value: number | undefined): void {\n  if (value === undefined) {\n    return;\n  }\n  const current = spanToJSON(span).data[attribute];\n  span.setAttribute(attribute, (typeof current === 'number' ? current : 0) + value);\n}\n\n/**\n * Transform a channel `start` payload into the span that should be active for the operation. For\n * `step` we deliberately don't open a span (model calls and tool calls are siblings under the\n * invoke_agent span, matching the OTel-based output), so we reuse the active span and mark the\n * payload to skip ending it.\n */\nexport function createSpanFromMessage(\n  data: VercelAiChannelMessage,\n  channelOptions: VercelAiChannelOptions,\n): Span | undefined {\n  const { type, event } = data;\n\n  if (type === 'step' || !event || typeof event !== 'object') {\n    // Opt out: returning `undefined` leaves the enclosing `invoke_agent` span as the active context\n    // (model-call and tool-call events nest under it) without opening — or ending — a span of its own.\n    return undefined;\n  }\n\n  const { recordInputs, enableTruncation } = getRecordingOptions(event, channelOptions);\n  const provider = asString(event.provider);\n  const modelId = asString(event.modelId);\n  const callId = asString(event.callId);\n  const maxRetries = asNumber(event.maxRetries);\n\n  // Harvest tool descriptions from the operation/model-call `tools` so tool spans can backfill them.\n  // Gated on `recordInputs` to match the OTel path, which only records `available_tools` then.\n  if (recordInputs) {\n    recordToolDescriptions(callId, event.tools);\n  }\n\n  const baseAttributes: Record<string, string | number | boolean> = {\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n    ...(provider ? { [GEN_AI_SYSTEM]: provider, [VERCEL_AI_MODEL_PROVIDER_ATTRIBUTE]: provider } : {}),\n    ...(modelId ? { [GEN_AI_REQUEST_MODEL]: modelId } : {}),\n    ...(maxRetries !== undefined ? { [VERCEL_AI_SETTINGS_MAX_RETRIES_ATTRIBUTE]: maxRetries } : {}),\n  };\n\n  switch (type) {\n    case 'generateText':\n    case 'streamText':\n    case 'generateObject':\n      // `generateObject` builds the same `invoke_agent` span as `generateText` (non-streaming); its\n      // distinct `ai.generateObject` operationId rides on `event.operationId`. The JSON-schema attribute\n      // the OTel path derives from the SDK's Zod schema is not reconstructed on the channel path.\n      return buildInvokeAgentSpan(event, baseAttributes, recordInputs, enableTruncation, callId, type === 'streamText');\n    case 'languageModelCall':\n      _INTERNAL_skipAiProviderWrapping([WORKERS_AI_INTEGRATION_NAME]);\n\n      return buildModelCallSpan(event, baseAttributes, recordInputs, enableTruncation, callId, modelId);\n    case 'executeTool':\n      return buildToolSpan(event, recordInputs);\n    case 'embed':\n    case 'embedMany': {\n      // `embed` carries a single `value`; `embedMany` a `values` array — both map to the embeddings input.\n      const input = type === 'embedMany' ? event.values : event.value;\n      return startGenAiSpan(GEN_AI_EMBEDDINGS_OPERATION, modelId, {\n        ...baseAttributes,\n        ...(recordInputs && input !== undefined ? { [GEN_AI_EMBEDDINGS_INPUT]: stringify(input) } : {}),\n      });\n    }\n    case 'rerank':\n      return startGenAiSpan(GEN_AI_RERANK_OPERATION, modelId, baseAttributes);\n    default:\n      // Unknown event type: opt out rather than open a span we can't shape correctly.\n      return undefined;\n  }\n}\n\n/** Start a `gen_ai.<operation>` span named `<operation> <suffix>` (or just `<operation>` when no suffix). */\nfunction startGenAiSpan(operation: string, suffix: string | undefined, attributes: SpanAttributes): Span {\n  return startInactiveSpan({\n    name: suffix ? `${operation} ${suffix}` : operation,\n    op: `gen_ai.${operation}`,\n    attributes: { [GEN_AI_OPERATION_NAME]: operation, ...attributes },\n  });\n}\n\nfunction buildInvokeAgentSpan(\n  event: Record<string, unknown>,\n  baseAttributes: SpanAttributes,\n  recordInputs: boolean,\n  enableTruncation: boolean,\n  callId: string | undefined,\n  isStream: boolean,\n): Span {\n  const functionId = asString(event.functionId);\n  const operationId = asString(event.operationId) ?? (isStream ? 'ai.streamText' : 'ai.generateText');\n  if (callId) {\n    operationIdByCallId.set(callId, { operationId, isStream });\n  }\n  const span = startGenAiSpan(GEN_AI_INVOKE_AGENT_SPAN_OP, functionId, {\n    ...baseAttributes,\n    [VERCEL_AI_OPERATION_ID_ATTRIBUTE]: operationId,\n    [GEN_AI_RESPONSE_STREAMING]: isStream,\n    ...(functionId ? { [GEN_AI_FUNCTION_ID]: functionId } : {}),\n    ...(recordInputs ? buildInputMessageAttributes(event, enableTruncation) : {}),\n  });\n  if (isStream && callId) {\n    invokeAgentSpanByCallId.set(callId, span);\n  }\n\n  return span;\n}\n\nfunction buildModelCallSpan(\n  event: Record<string, unknown>,\n  baseAttributes: SpanAttributes,\n  recordInputs: boolean,\n  enableTruncation: boolean,\n  callId: string | undefined,\n  modelId: string | undefined,\n): Span {\n  const parent = callId ? operationIdByCallId.get(callId) : undefined;\n  const operationId = parent\n    ? `${parent.operationId}.${parent.isStream ? 'doStream' : 'doGenerate'}`\n    : 'ai.generateText.doGenerate';\n  return startGenAiSpan(GEN_AI_GENERATE_CONTENT_OPERATION, modelId, {\n    ...baseAttributes,\n    [VERCEL_AI_OPERATION_ID_ATTRIBUTE]: operationId,\n    ...(recordInputs ? buildInputMessageAttributes(event, enableTruncation) : {}),\n    ...(recordInputs && Array.isArray(event.tools) ? { [GEN_AI_REQUEST_AVAILABLE_TOOLS]: stringify(event.tools) } : {}),\n  });\n}\n\nfunction buildToolSpan(event: Record<string, unknown>, recordInputs: boolean): Span {\n  const toolCall = isObjectLike(event.toolCall) ? event.toolCall : {};\n  const toolName = asString(toolCall.toolName);\n  const toolCallId = asString(event.toolCallId) ?? asString(toolCall.toolCallId);\n  const toolInput = toolCall.input ?? toolCall.args;\n  // The `executeTool` event has no description; backfill it from the operation's recorded tools.\n  // Gated on `recordInputs` to match the OTel path (descriptions come from the recorded tools list).\n  const description =\n    recordInputs && toolName ? resolveToolDescription(asString(event.callId), toolName, event.tools) : undefined;\n  return startGenAiSpan(GEN_AI_EXECUTE_TOOL_SPAN_OP, toolName, {\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n    [GEN_AI_TOOL_TYPE]: 'function',\n    ...(toolName ? { [GEN_AI_TOOL_NAME]: toolName } : {}),\n    ...(toolCallId ? { [GEN_AI_TOOL_CALL_ID_ATTRIBUTE]: toolCallId } : {}),\n    ...(description ? { [GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE]: description } : {}),\n    ...(recordInputs && toolInput !== undefined ? { [GEN_AI_TOOL_INPUT]: stringify(toolInput) } : {}),\n  });\n}\n\n/**\n * Best-effort enrichment from the resolved value the AI SDK attaches to the channel context.\n * Everything here is guarded: when a field is missing or the shape differs across `ai` versions,\n * we simply don't set the attribute rather than emit a malformed span.\n */\nexport function enrichSpanOnEnd(\n  span: Span,\n  data: VercelAiChannelMessage,\n  channelOptions: VercelAiChannelOptions,\n): void {\n  const { type, result } = data;\n  if (!isObjectLike(result)) {\n    return;\n  }\n\n  const { recordOutputs } = getRecordingOptions(data.event, channelOptions);\n\n  if (type === 'executeTool') {\n    if (recordOutputs) {\n      span.setAttribute(GEN_AI_TOOL_OUTPUT, stringify(result.output ?? result));\n    }\n    // From V5 on, tool errors are not rejected (so the `error` channel verb never fires) — they\n    // surface as `tool-error` content on the resolved result. Mirror the OTel path by marking the\n    // span and capturing the error.\n    const output = isObjectLike(result.output) ? result.output : undefined;\n    if (output?.type === 'tool-error') {\n      captureToolError(span, data, output.error);\n    }\n    return;\n  }\n\n  // `languageModelCall` results report usage as `{ total }` objects; top-level/step results report\n  // flat numbers. `tokenCount` handles both. v4 names tokens `promptTokens`/`completionTokens`\n  // (v5+ uses `inputTokens`/`outputTokens`); the fallbacks are `undefined`-inert on v5+.\n  const usage = isObjectLike(result.usage) ? result.usage : undefined;\n  if (usage) {\n    const inputTokens = tokenCount(usage.inputTokens) ?? tokenCount(usage.promptTokens) ?? tokenCount(usage.tokens);\n    const outputTokens = tokenCount(usage.outputTokens) ?? tokenCount(usage.completionTokens);\n    const totalTokens = tokenCount(usage.totalTokens) ?? sum(inputTokens, outputTokens);\n    if (inputTokens !== undefined) {\n      span.setAttribute(GEN_AI_USAGE_INPUT_TOKENS, inputTokens);\n    }\n    if (outputTokens !== undefined) {\n      span.setAttribute(GEN_AI_USAGE_OUTPUT_TOKENS, outputTokens);\n    }\n    if (totalTokens !== undefined) {\n      span.setAttribute(GEN_AI_USAGE_TOTAL_TOKENS, totalTokens);\n    }\n  }\n\n  // Match the OTel integration: finish reasons live on the model-call (`generate_content`) span, not\n  // on the top-level `invoke_agent` span.\n  const finishReason = getFinishReason(result);\n  if (finishReason && type === 'languageModelCall') {\n    span.setAttribute(GEN_AI_RESPONSE_FINISH_REASONS, stringify([finishReason]));\n  }\n\n  const response = isObjectLike(result.response) ? result.response : undefined;\n  const responseId = asString(response?.id) ?? asString(result.responseId);\n  if (responseId) {\n    span.setAttribute(GEN_AI_RESPONSE_ID, responseId);\n  }\n  const responseModel = asString(response?.modelId) ?? asString(data.event.modelId);\n  if (responseModel) {\n    span.setAttribute(GEN_AI_RESPONSE_MODEL, responseModel);\n  }\n\n  // Provider-specific cache/reasoning/prediction token breakdowns and `gen_ai.conversation.id`.\n  // The channel exposes `providerMetadata` as an object (the OTel path parses it from a string);\n  // both share `getProviderMetadataAttributes` so the emitted shape is identical.\n  const providerMetadata = (result as { providerMetadata?: unknown }).providerMetadata;\n  const providerAttributes = getProviderMetadataAttributes(providerMetadata);\n  // Don't overwrite a conversation id already set on span start (e.g. by `conversationIdIntegration`\n  // from a user-set scope value); the provider-derived id is only a fallback. Matches the OTel path.\n  if (\n    GEN_AI_CONVERSATION_ID_ATTRIBUTE in providerAttributes &&\n    spanToJSON(span).data[GEN_AI_CONVERSATION_ID_ATTRIBUTE]\n  ) {\n    // oxlint-disable-next-line typescript/no-dynamic-delete\n    delete providerAttributes[GEN_AI_CONVERSATION_ID_ATTRIBUTE];\n  }\n  dropLastStepOnlyUsage(providerAttributes, type);\n  span.setAttributes(providerAttributes);\n\n  if (recordOutputs) {\n    // `languageModelCall` exposes the response as a `content` parts array; top-level results expose\n    // `text` + `toolCalls`. Both normalize into the OTel `gen_ai.output.messages` assistant message.\n    const parts =\n      type === 'languageModelCall' && Array.isArray(result.content)\n        ? partsFromContent(result.content)\n        : partsFromTextAndToolCalls(result.text, result.toolCalls);\n    const outputMessages = buildOutputMessages(parts, finishReason);\n    if (outputMessages) {\n      span.setAttribute(GEN_AI_OUTPUT_MESSAGES, outputMessages);\n    }\n  }\n}\n\n/** Maps a Vercel AI finish reason to the OTel `gen_ai.output.messages` form (`tool-calls` → `tool_call`). */\nfunction normalizeFinishReason(finishReason: string | undefined): string {\n  return finishReason === 'tool-calls' ? 'tool_call' : (finishReason ?? 'stop');\n}\n\n/** Reads the finish reason from a result — a string on top-level results, `{ unified }` on model calls. */\nfunction getFinishReason(result: Record<string, unknown>): string | undefined {\n  const finishReason = result.finishReason;\n  if (typeof finishReason === 'string') {\n    return finishReason;\n  }\n  return isObjectLike(finishReason) ? asString(finishReason.unified) : undefined;\n}\n\n/** Reads a token count that may be a plain number or a `{ total }` object (model-call usage). */\nfunction tokenCount(value: unknown): number | undefined {\n  return asNumber(value) ?? (isObjectLike(value) ? asNumber(value.total) : undefined);\n}\n\nfunction buildOutputMessages(\n  parts: Array<Record<string, unknown>>,\n  finishReason: string | undefined,\n): string | undefined {\n  if (!parts.length) {\n    return undefined;\n  }\n  return stringify([{ role: 'assistant', parts, finish_reason: normalizeFinishReason(finishReason) }]);\n}\n\nfunction toolCallPart(toolCall: Record<string, unknown>): Record<string, unknown> {\n  const args = toolCall.input ?? toolCall.args;\n  return {\n    type: 'tool_call',\n    id: asString(toolCall.toolCallId),\n    name: asString(toolCall.toolName),\n    arguments: typeof args === 'string' ? args : stringify(args ?? {}),\n  };\n}\n\nfunction partsFromContent(content: unknown[]): Array<Record<string, unknown>> {\n  const parts: Array<Record<string, unknown>> = [];\n  for (const item of content) {\n    if (!isObjectLike(item)) {\n      continue;\n    }\n    if (item.type === 'text' && typeof item.text === 'string') {\n      parts.push({ type: 'text', content: item.text });\n    } else if (item.type === 'tool-call') {\n      parts.push(toolCallPart(item));\n    }\n  }\n  return parts;\n}\n\nfunction partsFromTextAndToolCalls(text: unknown, toolCalls: unknown): Array<Record<string, unknown>> {\n  const parts: Array<Record<string, unknown>> = [];\n  if (typeof text === 'string' && text.length) {\n    parts.push({ type: 'text', content: text });\n  }\n  if (Array.isArray(toolCalls)) {\n    for (const toolCall of toolCalls) {\n      if (isObjectLike(toolCall)) {\n        parts.push(toolCallPart(toolCall));\n      }\n    }\n  }\n  return parts;\n}\n\nexport function captureToolError(span: Span, data: VercelAiChannelMessage, error: unknown): void {\n  span.setStatus({\n    code: SPAN_STATUS_ERROR,\n    message: error instanceof Error ? error.message : 'tool_error',\n  });\n\n  const toolCall = isObjectLike(data.event.toolCall) ? data.event.toolCall : {};\n  const toolName = asString(toolCall.toolName);\n  const toolCallId = asString(data.event.toolCallId) ?? asString(toolCall.toolCallId);\n\n  withScope(scope => {\n    scope.setContext('trace', spanToTraceContext(span));\n    if (toolName) {\n      scope.setTag('vercel.ai.tool.name', toolName);\n    }\n    if (toolCallId) {\n      scope.setTag('vercel.ai.tool.callId', toolCallId);\n    }\n    scope.setLevel('error');\n    captureException(\n      error instanceof Error ? error : new Error(typeof error === 'string' ? error : 'Tool execution failed'),\n      {\n        mechanism: { type: 'auto.vercelai.channel', handled: false },\n      },\n    );\n  });\n}\n\nfunction getRecordingOptions(\n  event: Record<string, unknown>,\n  channelOptions: VercelAiChannelOptions,\n): {\n  recordInputs: boolean;\n  recordOutputs: boolean;\n  enableTruncation: boolean;\n} {\n  const genAI = getClient()?.getDataCollectionOptions().genAI;\n\n  return {\n    recordInputs: resolveRecording(channelOptions.recordInputs, event.recordInputs, genAI?.inputs),\n    recordOutputs: resolveRecording(channelOptions.recordOutputs, event.recordOutputs, genAI?.outputs),\n    enableTruncation: shouldEnableTruncation(channelOptions.enableTruncation),\n  };\n}\n\n/**\n * Mirrors the OTel integration's `determineRecordingSettings` precedence: an integration-level option\n * wins, then the per-call `experimental_telemetry.recordInputs/recordOutputs` flag the AI SDK forwards\n * on the channel event, then the global `dataCollection.genAI` default.\n *\n * NOTE: the OTel integration also defaults recording to `true` for a call with\n * `experimental_telemetry: { isEnabled: true }`. The `ai:telemetry` channel does not expose `isEnabled`\n * (nor a resolved recording flag), so that per-call default cannot be reproduced here — v7 users who\n * want inputs/outputs recorded must enable `dataCollection.genAI` or set `recordInputs`/`recordOutputs`.\n */\nfunction resolveRecording(integrationOption: unknown, perCallOption: unknown, globalDefault: unknown): boolean {\n  if (typeof integrationOption === 'boolean') {\n    return integrationOption;\n  }\n  if (typeof perCallOption === 'boolean') {\n    return perCallOption;\n  }\n  return globalDefault === true;\n}\n\nfunction buildInputMessageAttributes(\n  event: Record<string, unknown>,\n  enableTruncation: boolean,\n): Record<string, string | number | undefined> {\n  const attributes: Record<string, string | number | undefined> = {};\n\n  // `ai` >= 7 forbids system messages in `messages`/`prompt` and exposes the system prompt as a\n  // separate `instructions` field. The OTel path lifts the system message out of the prompt into\n  // `gen_ai.system_instructions` as `[{ type: 'text', content }]`; mirror that shape here.\n  const instructions = asString(event.instructions);\n  if (instructions) {\n    attributes[GEN_AI_SYSTEM_INSTRUCTIONS_ATTRIBUTE] = stringify([{ type: 'text', content: instructions }]);\n  }\n\n  // The AI SDK start events extend `StandardizedPrompt`; messages live on `messages`, otherwise the\n  // simpler `prompt` field is used.\n  const messages = event.messages ?? event.prompt;\n  if (messages !== undefined) {\n    attributes[GEN_AI_INPUT_MESSAGES] = enableTruncation ? getTruncatedJsonString(messages) : stringify(messages);\n    // The original (pre-truncation) message count, so the product can show how many were dropped.\n    attributes[GEN_AI_INPUT_MESSAGES_ORIGINAL_LENGTH_ATTRIBUTE] = Array.isArray(messages) ? messages.length : 1;\n  }\n\n  return attributes;\n}\n", "import { defineIntegration, waitForTracingChannelBinding, type IntegrationFn } from '@sentry/core';\nimport { subscribeVercelAiTracingChannel } from './vercel-ai-dc-subscriber';\nimport * as dc from 'node:diagnostics_channel';\n\nexport interface VercelAiOptions {\n  /**\n   * Enable or disable input recording. Enabled if `dataCollection.genAI.inputs` (or the deprecated `sendDefaultPii` option) is `true`\n   * or if you set `isEnabled` to `true` in your ai SDK method telemetry settings.\n   * Integration-level options take precedence over global `dataCollection` config.\n   */\n  recordInputs?: boolean;\n\n  /**\n   * Enable or disable output recording. Enabled if `dataCollection.genAI.outputs` (or the deprecated `sendDefaultPii` option) is `true`\n   * or if you set `isEnabled` to `true` in your ai SDK method telemetry settings.\n   * Integration-level options take precedence over global `dataCollection` config.\n   */\n  recordOutputs?: boolean;\n\n  /**\n   * Enable or disable truncation of recorded input messages.\n   * Defaults to `true`.\n   */\n  enableTruncation?: boolean;\n}\n\nconst _vercelAiIntegration = ((options: VercelAiOptions = {}) => {\n  return {\n    name: 'VercelAI' as const,\n    setupOnce() {\n      // Bail if this is not available\n      if (!dc.tracingChannel) {\n        return;\n      }\n\n      // Subscribe to the `ai` SDK's native telemetry tracing channel (ai >= 7).\n      // This is a no-op on versions that don't publish to the channel, so it is always safe to call.\n      waitForTracingChannelBinding(() => {\n        subscribeVercelAiTracingChannel(dc.tracingChannel, options);\n      });\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Auto-instrument the `ai` SDK's native telemetry tracing channel (ai >= 7).\n */\nexport const vercelAiIntegration = defineIntegration(_vercelAiIntegration);\n", "/*\n * Copyright (c) 2024-present The Fastify team <https://github.com/fastify/fastify#team>\n * SPDX-License-Identifier: MIT\n *\n * NOTICE from the Sentry authors:\n * - Based on: https://github.com/fastify/otel/tree/bae80d6caef4287e7f01ff3c8dc753243706ea86 (@fastify/otel@0.18.1)\n * - Streamlined to the Sentry SDK's needs: dropped the `InstrumentationBase` wrapper, the unused\n *   request/lifecycle hooks, `ignorePaths`/`minimatch` support and the OpenTelemetry tracer/context\n *   APIs in favor of the Sentry span API.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-this-alias */\n/* eslint-disable max-lines */\n\nimport * as diagnosticsChannel from 'node:diagnostics_channel';\nimport { HTTP_REQUEST_METHOD, HTTP_RESPONSE_STATUS_CODE, HTTP_ROUTE, URL_PATH } from '@sentry/conventions/attributes';\nimport type { Span } from '@sentry/core';\nimport {\n  isObjectLike,\n  debug,\n  getActiveSpan,\n  getIsolationScope,\n  getRootSpan,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SPAN_STATUS_ERROR,\n  spanToJSON,\n  startInactiveSpan,\n  startSpan,\n  withActiveSpan,\n} from '@sentry/core';\nimport type { FastifyInstance, FastifyRequest } from './types';\nimport { DEBUG_BUILD } from '../../../debug-build';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-fastify';\nconst SUPPORTED_VERSIONS = '>=3.21.0 <6';\n\nconst ORIGIN = 'auto.http.otel.fastify';\nconst HOOK_OP = 'hook.fastify';\nconst REQUEST_HANDLER_OP = 'request_handler.fastify';\n\nconst FASTIFY_HOOKS = [\n  'onRequest',\n  'preParsing',\n  'preValidation',\n  'preHandler',\n  'preSerialization',\n  'onSend',\n  'onResponse',\n  'onError',\n];\nconst ATTRIBUTE_HOOK_NAME = 'hook.name' as const;\nconst ATTRIBUTE_FASTIFY_TYPE = 'fastify.type' as const;\nconst ATTRIBUTE_HOOK_CALLBACK_NAME = 'hook.callback.name' as const;\nconst ATTRIBUTE_FASTIFY_ROOT = 'fastify.root' as const;\n\nconst HOOK_TYPE_ROUTE = 'route-hook' as const;\nconst HOOK_TYPE_INSTANCE = 'hook' as const;\nconst HOOK_TYPE_HANDLER = 'request-handler' as const;\nconst ANONYMOUS_FUNCTION_NAME = 'anonymous';\n\nconst kRequestSpan = Symbol('sentry fastify request span');\nconst kAddHookOriginal = Symbol('sentry fastify addHook original');\nconst kSetNotFoundOriginal = Symbol('sentry fastify setNotFoundHandler original');\n\ntype AnyFn = (...args: any[]) => any;\n\n/**\n * Read the matched route URL off a request. Fastify >=4 exposes it on `request.routeOptions.url`,\n * while v3 only has the (since-removed-in-v5) `request.routerPath`.\n */\nfunction getRequestRouteUrl(request: any): string | undefined {\n  return request.routeOptions?.url ?? request.routerPath;\n}\n\n/**\n * Read the per-route config off a request. Fastify >=4 exposes it on `request.routeOptions.config`,\n * while v3 uses `request.routeConfig`. Used to honor the `{ config: { otel: false } }` opt-out.\n */\nfunction getRequestRouteConfig(request: any): { otel?: boolean } | undefined {\n  return request.routeOptions?.config ?? request.routeConfig;\n}\n\n/**\n * Detect whether one of a wrapped handler's arguments is the Fastify request. We can't rely on a\n * single property since the route metadata moved from `routerPath` (v3) to `routeOptions` (>=4),\n * so we accept either shape.\n */\nfunction isFastifyRequest(arg: any): boolean {\n  return isObjectLike(arg) && !!arg.method && !!arg.url && (!!arg.routeOptions || 'routerPath' in arg);\n}\n\n/**\n * The Fastify plugin that wires up the request/hook/handler spans. It is registered on every Fastify\n * instance via the `fastify.initialization` diagnostics channel.\n */\nfunction fastifyOtelPlugin(this: unknown, instance: any, _opts: unknown, done: () => void): void {\n  instance.decorate(kAddHookOriginal, instance.addHook);\n  instance.decorate(kSetNotFoundOriginal, instance.setNotFoundHandler);\n  instance.decorateRequest('opentelemetry', function opentelemetry(this: any) {\n    return { span: this[kRequestSpan] as Span | null };\n  });\n  instance.decorateRequest(kRequestSpan, null);\n\n  instance.addHook('onRoute', otelWireRoute);\n  instance.addHook('onRequest', startRequestSpanHook);\n  instance.addHook('onResponse', finalizeNotFoundSpanHook);\n\n  instance.addHook = addHookPatched;\n  instance.setNotFoundHandler = setNotFoundHandlerPatched;\n\n  done();\n}\n\nconst pluginSymbols = fastifyOtelPlugin as unknown as Record<symbol, unknown>;\npluginSymbols[Symbol.for('skip-override')] = true;\npluginSymbols[Symbol.for('fastify.display-name')] = PACKAGE_NAME;\npluginSymbols[Symbol.for('plugin-meta')] = {\n  fastify: SUPPORTED_VERSIONS,\n  name: PACKAGE_NAME,\n};\n\nfunction otelWireRoute(this: any, routeOptions: any): void {\n  if (routeOptions.config?.otel === false) {\n    return;\n  }\n\n  for (const hook of FASTIFY_HOOKS) {\n    const handlerLike = routeOptions[hook];\n\n    if (typeof handlerLike === 'function') {\n      routeOptions[hook] = handlerWrapper(\n        handlerLike,\n        hook,\n        routeHookAttributes(this.pluginName, hook, handlerLike, routeOptions.url),\n      );\n    } else if (Array.isArray(handlerLike)) {\n      routeOptions[hook] = handlerLike.map((handler: AnyFn) =>\n        handlerWrapper(handler, hook, routeHookAttributes(this.pluginName, hook, handler, routeOptions.url)),\n      );\n    }\n  }\n\n  routeOptions.onSend = appendRouteHook(routeOptions.onSend, finalizeResponseSpanHook);\n  routeOptions.onError = appendRouteHook(routeOptions.onError, recordErrorInSpanHook);\n\n  routeOptions.handler = handlerWrapper(routeOptions.handler, 'handler', {\n    [ATTRIBUTE_HOOK_NAME]: `${this.pluginName} - route-handler`,\n    [ATTRIBUTE_FASTIFY_TYPE]: HOOK_TYPE_HANDLER,\n    [HTTP_ROUTE]: routeOptions.url,\n    [ATTRIBUTE_HOOK_CALLBACK_NAME]:\n      routeOptions.handler.name.length > 0 ? routeOptions.handler.name : ANONYMOUS_FUNCTION_NAME,\n  });\n}\n\nfunction routeHookAttributes(pluginName: string, hook: string, handler: AnyFn, url: string): Record<string, string> {\n  return {\n    [ATTRIBUTE_HOOK_NAME]: `${pluginName} - route -> ${hook}`,\n    [ATTRIBUTE_FASTIFY_TYPE]: HOOK_TYPE_ROUTE,\n    [HTTP_ROUTE]: url,\n    [ATTRIBUTE_HOOK_CALLBACK_NAME]: handler.name?.length > 0 ? handler.name : ANONYMOUS_FUNCTION_NAME,\n  };\n}\n\nfunction appendRouteHook(existing: AnyFn | AnyFn[] | undefined, hook: AnyFn): AnyFn | AnyFn[] {\n  if (existing == null) {\n    return hook;\n  }\n  return Array.isArray(existing) ? [...existing, hook] : [existing, hook];\n}\n\nfunction startRequestSpanHook(this: any, request: any, _reply: any, hookDone: () => void): void {\n  if (getRequestRouteConfig(request)?.otel === false) {\n    return hookDone();\n  }\n\n  const attributes: Record<string, string> = {\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n    [ATTRIBUTE_FASTIFY_ROOT]: PACKAGE_NAME,\n    [HTTP_REQUEST_METHOD]: request.method,\n    [URL_PATH]: request.url,\n  };\n\n  const route = getRequestRouteUrl(request);\n  if (route != null) {\n    attributes[HTTP_ROUTE] = route;\n\n    // Update the route of the request on the root span, if it is a http.server span\n    const activeSpan = getActiveSpan();\n    const rootSpan = activeSpan && getRootSpan(activeSpan);\n    if (rootSpan && spanToJSON(rootSpan).data[SEMANTIC_ATTRIBUTE_SENTRY_OP] === 'http.server') {\n      rootSpan.setAttribute(HTTP_ROUTE, route);\n    }\n  }\n\n  const requestSpan = startInactiveSpan({ name: 'request', op: REQUEST_HANDLER_OP, attributes });\n  request[kRequestSpan] = requestSpan;\n\n  // Set the request span as the active span for the remainder of the request lifecycle, so that\n  // downstream hooks/handlers as well as errors captured via the error diagnostics channel are\n  // parented to it (otherwise they would attach to the root `http.server` span instead).\n  withActiveSpan(requestSpan, () => {\n    hookDone();\n  });\n}\n\nfunction finalizeNotFoundSpanHook(request: any, reply: any, hookDone: () => void): void {\n  const span = request[kRequestSpan] as Span | null;\n\n  if (span != null) {\n    span.setAttributes({ [HTTP_RESPONSE_STATUS_CODE]: reply.statusCode });\n    span.end();\n  }\n\n  request[kRequestSpan] = null;\n\n  hookDone();\n}\n\nfunction finalizeResponseSpanHook(\n  request: any,\n  reply: any,\n  payload: any,\n  hookDone: (err: null, payload: any) => void,\n): void {\n  const span = request[kRequestSpan] as Span | null;\n\n  if (span != null) {\n    if (reply.statusCode >= 500) {\n      span.setStatus({ code: SPAN_STATUS_ERROR });\n    }\n    span.setAttributes({ [HTTP_RESPONSE_STATUS_CODE]: reply.statusCode });\n    span.end();\n  }\n\n  request[kRequestSpan] = null;\n\n  hookDone(null, payload);\n}\n\nfunction recordErrorInSpanHook(request: any, _reply: any, error: any, hookDone: () => void): void {\n  const span = request[kRequestSpan] as Span | null;\n\n  if (span != null) {\n    span.setStatus({ code: SPAN_STATUS_ERROR, message: error.message });\n  }\n\n  hookDone();\n}\n\nfunction addHookPatched(this: any, name: string, hook: AnyFn): unknown {\n  const addHookOriginal = this[kAddHookOriginal];\n\n  if (FASTIFY_HOOKS.includes(name)) {\n    return addHookOriginal.call(\n      this,\n      name,\n      handlerWrapper(hook, name, {\n        [ATTRIBUTE_HOOK_NAME]: `${this.pluginName} - ${name}`,\n        [ATTRIBUTE_FASTIFY_TYPE]: HOOK_TYPE_INSTANCE,\n        [ATTRIBUTE_HOOK_CALLBACK_NAME]: hook.name?.length > 0 ? hook.name : ANONYMOUS_FUNCTION_NAME,\n      }),\n    );\n  }\n\n  return addHookOriginal.call(this, name, hook);\n}\n\nfunction setNotFoundHandlerPatched(this: any, hooks: any, handler?: any): void {\n  const setNotFoundHandlerOriginal = this[kSetNotFoundOriginal];\n\n  if (typeof hooks === 'function') {\n    setNotFoundHandlerOriginal.call(\n      this,\n      handlerWrapper(hooks, 'notFoundHandler', {\n        [ATTRIBUTE_HOOK_NAME]: `${this.pluginName} - not-found-handler`,\n        [ATTRIBUTE_FASTIFY_TYPE]: HOOK_TYPE_INSTANCE,\n        [ATTRIBUTE_HOOK_CALLBACK_NAME]: hooks.name?.length > 0 ? hooks.name : ANONYMOUS_FUNCTION_NAME,\n      }),\n    );\n    return;\n  }\n\n  if (hooks.preValidation != null) {\n    hooks.preValidation = handlerWrapper(hooks.preValidation, 'notFoundHandler - preValidation', {\n      [ATTRIBUTE_HOOK_NAME]: `${this.pluginName} - not-found-handler - preValidation`,\n      [ATTRIBUTE_FASTIFY_TYPE]: HOOK_TYPE_INSTANCE,\n      [ATTRIBUTE_HOOK_CALLBACK_NAME]:\n        hooks.preValidation.name?.length > 0 ? hooks.preValidation.name : ANONYMOUS_FUNCTION_NAME,\n    });\n  }\n\n  if (hooks.preHandler != null) {\n    hooks.preHandler = handlerWrapper(hooks.preHandler, 'notFoundHandler - preHandler', {\n      [ATTRIBUTE_HOOK_NAME]: `${this.pluginName} - not-found-handler - preHandler`,\n      [ATTRIBUTE_FASTIFY_TYPE]: HOOK_TYPE_INSTANCE,\n      [ATTRIBUTE_HOOK_CALLBACK_NAME]:\n        hooks.preHandler.name?.length > 0 ? hooks.preHandler.name : ANONYMOUS_FUNCTION_NAME,\n    });\n  }\n\n  // Fastify allows `setNotFoundHandler(opts)` without a handler, falling back to its built-in 404\n  // handler. Forward the (already-wrapped) hooks unchanged so that fallback still applies.\n  if (handler == null) {\n    setNotFoundHandlerOriginal.call(this, hooks);\n    return;\n  }\n\n  setNotFoundHandlerOriginal.call(\n    this,\n    hooks,\n    handlerWrapper(handler, 'notFoundHandler', {\n      [ATTRIBUTE_HOOK_NAME]: `${this.pluginName} - not-found-handler`,\n      [ATTRIBUTE_FASTIFY_TYPE]: HOOK_TYPE_INSTANCE,\n      [ATTRIBUTE_HOOK_CALLBACK_NAME]: handler.name?.length > 0 ? handler.name : ANONYMOUS_FUNCTION_NAME,\n    }),\n  );\n}\n\nfunction getRequestFromArgs(args: any[]): any | null {\n  for (const arg of args) {\n    if (isFastifyRequest(arg)) {\n      return arg;\n    }\n  }\n  return null;\n}\n\nfunction handlerWrapper(handler: AnyFn, hookName: string, spanAttributes: Record<string, string> = {}): AnyFn {\n  return function handlerWrapped(this: any, ...args: any[]) {\n    const request = getRequestFromArgs(args);\n\n    if (request === null || getRequestRouteConfig(request)?.otel === false) {\n      return handler.call(this, ...args);\n    }\n\n    const parentSpan = (request[kRequestSpan] as Span | null) ?? undefined;\n    const handlerName = handler.name?.length > 0 ? handler.name : (this.pluginName ?? ANONYMOUS_FUNCTION_NAME);\n\n    const hookType = spanAttributes[ATTRIBUTE_FASTIFY_TYPE];\n    const op =\n      hookType === HOOK_TYPE_INSTANCE ? HOOK_OP : hookType === HOOK_TYPE_HANDLER ? REQUEST_HANDLER_OP : undefined;\n\n    const name = op ? stripFastifyPrefix(spanAttributes[ATTRIBUTE_HOOK_NAME]) : `${hookName} - ${handlerName}`;\n\n    return startSpan(\n      {\n        name,\n        op,\n        attributes: {\n          ...spanAttributes,\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n        },\n        parentSpan,\n      },\n      () => handler.call(this, ...args),\n    );\n  };\n}\n\n/**\n * Strip the framework/plugin prefixes from a Fastify `hook.name` to derive a readable span name.\n * This is a bit of a hack and does not always work for all spans, but it's the best we can do without a proper API.\n */\nfunction stripFastifyPrefix(hookName = ''): string {\n  return hookName\n    .replace(/^fastify -> /, '')\n    .replace(/^@fastify\\/otel -> /, '')\n    .replace(/^@sentry\\/instrumentation-fastify -> /, '');\n}\n\nfunction instrumentOnRequest(fastify: FastifyInstance): void {\n  fastify.addHook('onRequest', async (request: FastifyRequest, _reply) => {\n    const routeName = getRequestRouteUrl(request);\n    const method = request.method || 'GET';\n\n    getIsolationScope().setTransactionName(`${method} ${routeName}`);\n  });\n}\n\nlet _isInstrumented = false;\n\n/**\n * Set up the Fastify (>= 3.21.0 < 6) instrumentation by subscribing to the `fastify.initialization`\n * diagnostics channel and registering the span-creating plugin on every Fastify instance.\n *\n * Idempotent and exposes an `id` so it can participate in the OpenTelemetry preload list.\n */\nexport const instrumentFastify = Object.assign(\n  function instrumentFastify(): void {\n    if (_isInstrumented) {\n      return;\n    }\n    _isInstrumented = true;\n\n    diagnosticsChannel.subscribe('fastify.initialization', message => {\n      const fastifyInstance = (message as { fastify?: FastifyInstance }).fastify;\n\n      fastifyInstance?.register(fastifyOtelPlugin).after(err => {\n        if (err) {\n          DEBUG_BUILD && debug.error('Failed to setup Fastify instrumentation', err);\n        } else if (fastifyInstance) {\n          instrumentOnRequest(fastifyInstance);\n        }\n      });\n    });\n  },\n  { id: 'Fastify.v5' },\n);\n", "import type { FastifyReply, FastifyRequest } from './types';\n\nexport const INTEGRATION_NAME = 'Fastify' as const;\n\n/**\n * Default function to determine if an error should be sent to Sentry\n *\n * 3xx and 4xx errors are not sent by default.\n */\nexport function defaultShouldHandleError(_error: Error, _request: FastifyRequest, reply: FastifyReply): boolean {\n  const statusCode = reply.statusCode;\n  // 3xx and 4xx errors are not sent by default.\n  return statusCode >= 500 || statusCode <= 299;\n}\n", "import type { FastifyIntegration, FastifyReply, FastifyRequest } from './types';\nimport * as diagnosticsChannel from 'node:diagnostics_channel';\nimport { DEBUG_BUILD } from '../../../debug-build';\nimport { getClient, debug, captureException } from '@sentry/core';\nimport { defaultShouldHandleError, INTEGRATION_NAME } from './utils';\n\nfunction getFastifyIntegration(): FastifyIntegration | undefined {\n  const client = getClient();\n  return client?.getIntegrationByName(INTEGRATION_NAME);\n}\n\n/**\n * Subscribe to the Fastify v5 error diagnostics channel.\n */\nexport function subscribeToFastifyErrorChannel(): void {\n  diagnosticsChannel.subscribe('tracing:fastify.request.handler:error', message => {\n    const { error, request, reply } = message as {\n      error: Error;\n      request: FastifyRequest;\n      reply: FastifyReply;\n    };\n\n    handleFastifyError.call(handleFastifyError, error, request, reply, 'diagnostics-channel');\n  });\n}\n\n/**\n * Handle a Fastify error, and possibly send it to Sentry.\n */\nexport function handleFastifyError(\n  this: {\n    diagnosticsChannelExists?: boolean;\n  },\n  error: Error,\n  request: FastifyRequest,\n  reply: FastifyReply,\n  handlerOrigin: 'diagnostics-channel' | 'onError-hook',\n): void {\n  const shouldHandleError = getFastifyIntegration()?.getShouldHandleError() || defaultShouldHandleError;\n  // Diagnostics channel runs before the onError hook, so we can use it to check if the handler was already registered\n  if (handlerOrigin === 'diagnostics-channel') {\n    this.diagnosticsChannelExists = true;\n  }\n\n  if (this.diagnosticsChannelExists && handlerOrigin === 'onError-hook') {\n    DEBUG_BUILD &&\n      debug.warn(\n        'Fastify error handler was already registered via diagnostics channel.',\n        'You can safely remove `setupFastifyErrorHandler` call and set `shouldHandleError` on the integration options.',\n      );\n\n    // If the diagnostics channel already exists, we don't need to handle the error again\n    return;\n  }\n\n  if (shouldHandleError(error, request, reply)) {\n    captureException(error, {\n      mechanism: {\n        handled: false,\n        type: 'auto.function.fastify',\n      },\n    });\n  }\n}\n", "import type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport type { FastifyIntegration, FastifyReply, FastifyRequest } from './types';\nimport { instrumentFastify as _instrumentFastify } from './instrumentation';\nimport { defaultShouldHandleError, INTEGRATION_NAME } from './utils';\nimport { subscribeToFastifyErrorChannel, handleFastifyError as _handleFastifyError } from './errors';\n\n/**\n * Options for the Fastify integration.\n *\n * `shouldHandleError` - Callback method deciding whether error should be captured and sent to Sentry\n * This is used on Fastify v5 where Sentry handles errors in the diagnostics channel.\n * Fastify v3 and v4 use `setupFastifyErrorHandler` instead.\n *\n * @example\n *\n * ```javascript\n * Sentry.init({\n *   integrations: [\n *     Sentry.fastifyIntegration({\n *       shouldHandleError(_error, _request, reply) {\n *         return reply.statusCode >= 500;\n *       },\n *     });\n *   },\n * });\n * ```\n *\n */\ninterface FastifyIntegrationOptions {\n  /**\n   * Callback method deciding whether error should be captured and sent to Sentry\n   * This is used on Fastify v5 where Sentry handles errors in the diagnostics channel.\n   * Fastify v3 and v4 use `setupFastifyErrorHandler` instead.\n   *\n   * @param error Captured Fastify error\n   * @param request Fastify request (or any object containing at least method, routeOptions.url, and routerPath)\n   * @param reply Fastify reply (or any object containing at least statusCode)\n   */\n  shouldHandleError: (error: Error, request: FastifyRequest, reply: FastifyReply) => boolean;\n}\n\nconst _fastifyIntegration = (({ shouldHandleError }: Partial<FastifyIntegrationOptions> = {}) => {\n  let _shouldHandleError: (error: Error, request: FastifyRequest, reply: FastifyReply) => boolean;\n\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      _shouldHandleError = shouldHandleError || defaultShouldHandleError;\n\n      subscribeToFastifyErrorChannel();\n      _instrumentFastify();\n    },\n    getShouldHandleError() {\n      return _shouldHandleError;\n    },\n    setShouldHandleError(shouldHandleError: (error: Error, request: FastifyRequest, reply: FastifyReply) => boolean) {\n      _shouldHandleError = shouldHandleError;\n    },\n  } satisfies FastifyIntegration;\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for [Fastify](https://fastify.dev/).\n * This integration supports Fastify v5 only.\n *\n * For more information, see the [fastify documentation](https://docs.sentry.io/platforms/javascript/guides/fastify/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *   integrations: [Sentry.fastifyIntegration()],\n * })\n * ```\n */\nexport const fastifyIntegration = defineIntegration(_fastifyIntegration);\n\n/**\n * @deprecated This export is deprecated and will not longer be exposed in the next major version.\n */\nexport const instrumentFastify = _instrumentFastify;\n\n/**\n * @deprecated This export is deprecated and will not longer be exposed in the next major version.\n */\nexport const handleFastifyError = _handleFastifyError;\n", "import type { Span, SpanAttributes } from '@sentry/core';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SPAN_KIND, startInactiveSpan } from '@sentry/core';\n\n// OTel \"OLD\" db/net semantic-conventions, reproduced from the vendored\n// `@opentelemetry/instrumentation-mongoose` span shape. Inlined as literals to\n// avoid importing the deprecated convention constants.\nconst ATTR_DB_MONGODB_COLLECTION = 'db.mongodb.collection';\nconst ATTR_DB_NAME = 'db.name';\nconst ATTR_DB_USER = 'db.user';\nconst ATTR_NET_PEER_NAME = 'net.peer.name';\nconst ATTR_NET_PEER_PORT = 'net.peer.port';\nconst ATTR_DB_OPERATION = 'db.operation';\nconst ATTR_DB_SYSTEM = 'db.system';\n\n/** The subset of mongoose's `Collection` that the legacy span shape reads. */\nexport interface MongooseLegacyCollection {\n  name?: string;\n  conn?: { name?: string; user?: string; host?: string; port?: number };\n}\n\nexport interface StartMongooseLegacySpanOptions {\n  collection: MongooseLegacyCollection | undefined;\n  modelName: string | undefined;\n  operation: string;\n  /** Span origin: distinguishes the OTel/IITM caller from orchestrion */\n  origin: string;\n  parentSpan?: Span;\n}\n\n/**\n * Start a mongoose client span with the legacy (pre-stable) db/net semantic\n * conventions.\n *\n * Shared by the vendored OTel/IITM instrumentation (`@sentry/node`) and the\n * orchestrion channel subscriber so the two emit an identical span shape,\n * differing only by `origin`.\n */\nexport function startMongooseLegacySpan({\n  collection,\n  modelName,\n  operation,\n  origin,\n  parentSpan,\n}: StartMongooseLegacySpanOptions): Span {\n  const attributes: SpanAttributes = {\n    [ATTR_DB_MONGODB_COLLECTION]: collection?.name,\n    [ATTR_DB_NAME]: collection?.conn?.name,\n    [ATTR_DB_USER]: collection?.conn?.user,\n    [ATTR_NET_PEER_NAME]: collection?.conn?.host,\n    [ATTR_NET_PEER_PORT]: collection?.conn?.port,\n    [ATTR_DB_OPERATION]: operation,\n    [ATTR_DB_SYSTEM]: 'mongoose',\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: origin,\n  };\n\n  return startInactiveSpan({\n    name: `mongoose.${modelName}.${operation}`,\n    // Set this explicitly, for platforms lacking `inferDbSpanData`\n    op: 'db',\n    kind: SPAN_KIND.CLIENT,\n    attributes,\n    parentSpan,\n  });\n}\n", "export { graphqlIntegration } from './graphql/index.js';\nexport { mongooseIntegration } from './mongoose/index.js';\nexport { getV3CommandOperation, getV3SpanAttributes, getV4SpanAttributes, startMongoSpan } from './mongodb/mongodb-span.js';\nexport { mysql2Integration } from './mysql2/index.js';\nexport { instrumentPrisma, prismaIntegration } from './prisma/index.js';\nexport { redisIntegration } from './redis/index.js';\nexport { defaultDbStatementSerializer } from './redis/redis-statement-serializer.js';\nexport { bindTracingChannelToSpan } from './tracing-channel.js';\nexport { vercelAiIntegration } from './vercel-ai/index.js';\nexport { fastifyIntegration, handleFastifyError, instrumentFastify } from './integrations/tracing-channel/fastify/index.js';\nexport { startMongooseLegacySpan } from './mongoose/mongoose-legacy-span.js';\n//# sourceMappingURL=index.js.map\n", "import type { Integration, IntegrationFn } from '@sentry/core';\nimport { defineIntegration, extendIntegration, getClient } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport type { FastifyInstance, FastifyMinimal, FastifyReply, FastifyRequest } from './types';\nimport { FastifyInstrumentationV3 } from './v3/instrumentation';\nimport {\n  fastifyIntegration as serverUtilsFastifyIntegration,\n  instrumentFastify,\n  handleFastifyError,\n} from '@sentry/server-utils';\n\ninterface FastifyIntegration extends Integration {\n  getShouldHandleError: () => (error: Error, request: FastifyRequest, reply: FastifyReply) => boolean;\n  // todo(v11): Remove this\n  setShouldHandleError: (\n    shouldHandleError: (error: Error, request: FastifyRequest, reply: FastifyReply) => boolean,\n  ) => void;\n}\n\n// oxlint-disable-next-line typescript/no-deprecated\nexport { instrumentFastify };\n\n/**\n * Options for the Fastify integration.\n *\n * `shouldHandleError` - Callback method deciding whether error should be captured and sent to Sentry\n *\n * @example\n *\n * ```javascript\n * Sentry.init({\n *   integrations: [\n *     Sentry.fastifyIntegration({\n *       shouldHandleError(_error, _request, reply) {\n *         return reply.statusCode >= 500;\n *       },\n *     });\n *   },\n * });\n * ```\n *\n */\ninterface FastifyIntegrationOptions {\n  /**\n   * Callback method deciding whether error should be captured and sent to Sentry\n   * This is used on Fastify v5 where Sentry handles errors in the diagnostics channel.\n   * Fastify v3 and v4 use `setupFastifyErrorHandler` instead.\n   *\n   * @param error Captured Fastify error\n   * @param request Fastify request (or any object containing at least method, routeOptions.url, and routerPath)\n   * @param reply Fastify reply (or any object containing at least statusCode)\n   *\n   * @example\n   *\n   * If using TypeScript, you can cast the request and reply to get full type safety.\n   *\n   * ```typescript\n   * import type { FastifyRequest, FastifyReply } from 'fastify';\n   *\n   * Sentry.fastifyIntegration({\n   *   shouldHandleError(error, minimalRequest, minimalReply) {\n   *     const request = minimalRequest as FastifyRequest;\n   *     const reply = minimalReply as FastifyReply;\n   *     return reply.statusCode >= 500;\n   *   },\n   * });\n   * ```\n   */\n  shouldHandleError: (error: Error, request: FastifyRequest, reply: FastifyReply) => boolean;\n}\n\ninterface FastifyHandlerOptions {\n  /**\n   * Callback method deciding whether error should be captured and sent to Sentry\n   *\n   * @param error Captured Fastify error\n   * @param request Fastify request (or any object containing at least method, routeOptions.url, and routerPath)\n   * @param reply Fastify reply (or any object containing at least statusCode)\n   *\n   * @deprecated Configure `shouldHandleError` on `fastifyIntegration()` rather than here, where it\n   * applies to every supported Fastify version. This option will be removed in v11.\n   *\n   * @example\n   *\n   * ```javascript\n   * Sentry.init({\n   *   integrations: [\n   *     Sentry.fastifyIntegration({\n   *       shouldHandleError(_error, _request, reply) {\n   *         return reply.statusCode >= 500;\n   *       },\n   *     }),\n   *   ],\n   * });\n   * ```\n   */\n  shouldHandleError: (error: Error, request: FastifyRequest, reply: FastifyReply) => boolean;\n}\n\nconst INTEGRATION_NAME = 'Fastify' as const;\n\nexport const instrumentFastifyV3 = generateInstrumentOnce(\n  `${INTEGRATION_NAME}.v3`,\n  () => new FastifyInstrumentationV3(),\n);\n\nfunction getFastifyIntegration(): FastifyIntegration | undefined {\n  const client = getClient();\n  if (!client) {\n    return undefined;\n  } else {\n    return client.getIntegrationByName(INTEGRATION_NAME);\n  }\n}\n\nconst _fastifyIntegration = ((options: Partial<FastifyIntegrationOptions>) => {\n  const parentIntegration = serverUtilsFastifyIntegration(options) as FastifyIntegration;\n\n  return extendIntegration(parentIntegration, {\n    setupOnce() {\n      instrumentFastifyV3();\n    },\n  });\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for [Fastify](https://fastify.dev/).\n *\n * If you also want to capture errors, you need to call `setupFastifyErrorHandler(app)` after you set up your Fastify server.\n *\n * For more information, see the [fastify documentation](https://docs.sentry.io/platforms/javascript/guides/fastify/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *   integrations: [Sentry.fastifyIntegration()],\n * })\n * ```\n */\nexport const fastifyIntegration = defineIntegration((options: Partial<FastifyIntegrationOptions> = {}) =>\n  _fastifyIntegration(options),\n);\n\n/**\n * Add an Fastify error handler to capture errors to Sentry.\n *\n * @param fastify The Fastify instance to which to add the error handler\n * @param options Configuration options for the handler\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n * const Fastify = require(\"fastify\");\n *\n * const app = Fastify();\n *\n * Sentry.setupFastifyErrorHandler(app);\n *\n * // Add your routes, etc.\n *\n * app.listen({ port: 3000 });\n * ```\n */\nexport function setupFastifyErrorHandler(fastify: FastifyMinimal, options?: Partial<FastifyHandlerOptions>): void {\n  // oxlint-disable-next-line typescript/no-deprecated\n  if (options?.shouldHandleError) {\n    // oxlint-disable-next-line typescript/no-deprecated\n    getFastifyIntegration()?.setShouldHandleError(options.shouldHandleError);\n  }\n\n  const plugin = Object.assign(\n    function (fastify: FastifyInstance, _options: unknown, done: () => void): void {\n      fastify.addHook('onError', async (request, reply, error) => {\n        // oxlint-disable-next-line typescript/no-deprecated\n        handleFastifyError.call(handleFastifyError, error, request, reply, 'onError-hook');\n      });\n      done();\n    },\n    {\n      [Symbol.for('skip-override')]: true,\n      [Symbol.for('fastify.display-name')]: 'sentry-fastify-error-handler',\n    },\n  );\n\n  fastify.register(plugin);\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * NOTICE from the Sentry authors:\n * - Vendored locally from @opentelemetry/instrumentation to work around a Bun\n *   --bytecode bug (https://github.com/getsentry/sentry-javascript/issues/21256).\n * - The upstream class imports `normalize` via an indirect platform/index\n *   re-export chain, which Bun's bytecode bundler renames and loses scope for.\n * - This copy imports `normalize` directly from 'path' to break that chain.\n */\n/* oxlint-disable */\n\nimport { normalize } from 'path';\nimport type { InstrumentationModuleFile } from '@opentelemetry/instrumentation';\n\nexport class InstrumentationNodeModuleFile implements InstrumentationModuleFile {\n  public name: string;\n  public supportedVersions: string[];\n  public patch: (moduleExports: any, moduleVersion?: string) => any;\n  public unpatch: (moduleExports?: any, moduleVersion?: string) => void;\n\n  constructor(\n    name: string,\n    supportedVersions: string[],\n    patch: (moduleExports: any, moduleVersion?: string) => any,\n    unpatch: (moduleExports?: any, moduleVersion?: string) => void,\n  ) {\n    this.name = normalize(name);\n    this.supportedVersions = supportedVersions;\n    this.patch = patch;\n    this.unpatch = unpatch;\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-graphql\n * - Upstream version: @opentelemetry/instrumentation-graphql@0.66.0\n */\n\nexport enum AllowedOperationTypes {\n  QUERY = 'query',\n  MUTATION = 'mutation',\n  SUBSCRIPTION = 'subscription',\n}\n\nexport enum TokenKind {\n  SOF = '<SOF>',\n  EOF = '<EOF>',\n  BANG = '!',\n  DOLLAR = '$',\n  AMP = '&',\n  PAREN_L = '(',\n  PAREN_R = ')',\n  SPREAD = '...',\n  COLON = ':',\n  EQUALS = '=',\n  AT = '@',\n  BRACKET_L = '[',\n  BRACKET_R = ']',\n  BRACE_L = '{',\n  PIPE = '|',\n  BRACE_R = '}',\n  NAME = 'Name',\n  INT = 'Int',\n  FLOAT = 'Float',\n  STRING = 'String',\n  BLOCK_STRING = 'BlockString',\n  COMMENT = 'Comment',\n}\n\nexport enum SpanNames {\n  EXECUTE = 'graphql.execute',\n  PARSE = 'graphql.parse',\n  RESOLVE = 'graphql.resolve',\n  VALIDATE = 'graphql.validate',\n  SCHEMA_VALIDATE = 'graphql.validateSchema',\n  SCHEMA_PARSE = 'graphql.parseSchema',\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-graphql\n * - Upstream version: @opentelemetry/instrumentation-graphql@0.66.0\n */\n\nexport enum AttributeNames {\n  SOURCE = 'graphql.source',\n  FIELD_NAME = 'graphql.field.name',\n  FIELD_PATH = 'graphql.field.path',\n  FIELD_TYPE = 'graphql.field.type',\n  PARENT_NAME = 'graphql.parent.name',\n  OPERATION_TYPE = 'graphql.operation.type',\n  OPERATION_NAME = 'graphql.operation.name',\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-graphql\n * - Upstream version: @opentelemetry/instrumentation-graphql@0.66.0\n */\n\nexport const OTEL_PATCHED_SYMBOL = Symbol.for('opentelemetry.patched');\n\nexport const OTEL_GRAPHQL_DATA_SYMBOL = Symbol.for('opentelemetry.graphql_data');\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-graphql\n * - Upstream version: @opentelemetry/instrumentation-graphql@0.66.0\n * - Types from `graphql` package inlined as simplified interfaces\n * - Minor TypeScript strictness adjustments\n */\n\nimport type { Span } from '@sentry/core';\nimport type {\n  DocumentNode,\n  ExecutionArgs,\n  ExecutionResult,\n  GraphQLError,\n  GraphQLFieldResolver,\n  GraphQLSchema,\n  GraphQLTypeResolver,\n  Maybe,\n  ParseOptions,\n  PromiseOrValue,\n  Source,\n  TypeInfo,\n  ValidationRule,\n} from './graphql-types';\nimport type { OTEL_GRAPHQL_DATA_SYMBOL, OTEL_PATCHED_SYMBOL } from './symbols';\n\nexport type { Maybe } from './graphql-types';\n\nexport const OPERATION_NOT_SUPPORTED = 'Operation$operationName$not' + ' supported';\n\nexport type executeFunctionWithObj = (args: ExecutionArgs) => PromiseOrValue<ExecutionResult>;\n\nexport type executeArgumentsArray = [\n  GraphQLSchema,\n  DocumentNode,\n  any,\n  any,\n  Maybe<{ [key: string]: any }>,\n  Maybe<string>,\n  Maybe<GraphQLFieldResolver<any, any>>,\n  Maybe<GraphQLTypeResolver<any, any>>,\n];\n\nexport type executeFunctionWithArgs = (\n  schema: GraphQLSchema,\n  document: DocumentNode,\n  rootValue?: any,\n  contextValue?: any,\n  variableValues?: Maybe<{ [key: string]: any }>,\n  operationName?: Maybe<string>,\n  fieldResolver?: Maybe<GraphQLFieldResolver<any, any>>,\n  typeResolver?: Maybe<GraphQLTypeResolver<any, any>>,\n) => PromiseOrValue<ExecutionResult>;\n\nexport interface OtelExecutionArgs {\n  schema: GraphQLSchema;\n  document: DocumentNode & ObjectWithGraphQLData;\n  rootValue?: any;\n  contextValue?: any & ObjectWithGraphQLData;\n  variableValues?: Maybe<{ [key: string]: any }>;\n  operationName?: Maybe<string>;\n  fieldResolver?: Maybe<GraphQLFieldResolver<any, any> & OtelPatched>;\n  typeResolver?: Maybe<GraphQLTypeResolver<any, any>>;\n}\n\nexport type executeType = executeFunctionWithObj | executeFunctionWithArgs;\n\nexport type parseType = (source: string | Source, options?: ParseOptions) => DocumentNode;\n\nexport type validateType = (\n  schema: GraphQLSchema,\n  documentAST: DocumentNode,\n  rules?: ReadonlyArray<ValidationRule>,\n  options?: { maxErrors?: number },\n  typeInfo?: TypeInfo,\n) => ReadonlyArray<GraphQLError>;\n\nexport interface GraphQLField {\n  span: Span;\n}\n\ninterface OtelGraphQLData {\n  source?: any;\n  span: Span;\n  fields: { [key: string]: GraphQLField };\n}\n\nexport interface ObjectWithGraphQLData {\n  [OTEL_GRAPHQL_DATA_SYMBOL]?: OtelGraphQLData;\n}\n\nexport interface OtelPatched {\n  [OTEL_PATCHED_SYMBOL]?: boolean;\n}\n\nexport interface GraphQLPath {\n  prev: GraphQLPath | undefined;\n  key: string | number;\n  /**\n   * optional as it didn't exist yet in ver 14\n   */\n  typename?: string | undefined;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-graphql\n * - Upstream version: @opentelemetry/instrumentation-graphql@0.66.0\n * - Types from `graphql` package inlined as simplified interfaces\n * - Minor TypeScript strictness adjustments\n * - Span lifecycle migrated from the OpenTelemetry tracer to the @sentry/core span API\n */\n\nimport type {\n  DocumentNode,\n  GraphQLFieldResolver,\n  GraphQLObjectType,\n  GraphQLOutputType,\n  GraphQLResolveInfo,\n  GraphQLType,\n  GraphQLUnionType,\n  Location,\n  Maybe,\n  Token,\n} from './graphql-types';\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport { getClient, isObjectLike, SPAN_STATUS_ERROR, startInactiveSpan, withActiveSpan } from '@sentry/core';\nimport { AllowedOperationTypes, SpanNames, TokenKind } from './enum';\nimport { AttributeNames } from './enums/AttributeNames';\nimport { OTEL_GRAPHQL_DATA_SYMBOL, OTEL_PATCHED_SYMBOL } from './symbols';\nimport type { GraphQLField, GraphQLPath, ObjectWithGraphQLData, OtelPatched } from './internal-types';\nimport type { GraphQLInstrumentationParsedConfig } from './types';\n\nconst OPERATION_VALUES = Object.values(AllowedOperationTypes);\n\n// https://github.com/graphql/graphql-js/blob/main/src/jsutils/isPromise.ts\nexport const isPromise = (value: any): value is Promise<unknown> => {\n  return typeof value?.then === 'function';\n};\n\nexport function addSpanSource(span: Span, loc?: Location, start?: number, end?: number): void {\n  if (getClient()?.getDataCollectionOptions().graphQL.document === true) {\n    const source = getSourceFromLocation(loc, start, end);\n    span.setAttribute(AttributeNames.SOURCE, source);\n  }\n}\n\nfunction createFieldIfNotExists(\n  contextValue: any,\n  info: GraphQLResolveInfo,\n  path: string[],\n): {\n  field: GraphQLField;\n  spanAdded: boolean;\n} {\n  let field = getField(contextValue, path);\n  if (field) {\n    return { field, spanAdded: false };\n  }\n\n  const parentSpan = getParentFieldSpan(contextValue, path);\n\n  field = {\n    span: createResolverSpan(contextValue, info, path, parentSpan),\n  };\n\n  addField(contextValue, path, field);\n\n  return { field, spanAdded: true };\n}\n\nfunction createResolverSpan(contextValue: any, info: GraphQLResolveInfo, path: string[], parentSpan?: Span): Span {\n  const attributes: SpanAttributes = {\n    [AttributeNames.FIELD_NAME]: info.fieldName,\n    [AttributeNames.FIELD_PATH]: path.join('.'),\n    [AttributeNames.FIELD_TYPE]: info.returnType.toString(),\n    [AttributeNames.PARENT_NAME]: info.parentType.name,\n  };\n\n  const span = startInactiveSpan({\n    name: `${SpanNames.RESOLVE} ${attributes[AttributeNames.FIELD_PATH]}`,\n    attributes,\n    parentSpan,\n  });\n\n  const document = contextValue[OTEL_GRAPHQL_DATA_SYMBOL].source;\n  const fieldNode = info.fieldNodes.find(fieldNode => fieldNode.kind === 'Field');\n\n  if (fieldNode) {\n    addSpanSource(span, document.loc, fieldNode.loc?.start, fieldNode.loc?.end);\n  }\n\n  return span;\n}\n\nexport function endSpan(span: Span, error?: Error): void {\n  if (error) {\n    span.setStatus({ code: SPAN_STATUS_ERROR, message: error.message });\n  }\n  span.end();\n}\n\nexport function getOperation(document: DocumentNode, operationName?: Maybe<string>): DefinitionNodeLike | undefined {\n  if (!document || !Array.isArray(document.definitions)) {\n    return undefined;\n  }\n\n  if (operationName) {\n    return document.definitions\n      .filter(definition => OPERATION_VALUES.indexOf(definition?.operation) !== -1)\n      .find(definition => operationName === definition?.name?.value);\n  } else {\n    return document.definitions.find(definition => OPERATION_VALUES.indexOf(definition?.operation) !== -1);\n  }\n}\n\ntype DefinitionNodeLike = DocumentNode['definitions'][number];\n\nfunction addField(contextValue: any, path: string[], field: GraphQLField) {\n  return (contextValue[OTEL_GRAPHQL_DATA_SYMBOL].fields[path.join('.')] = field);\n}\n\nfunction getField(contextValue: any, path: string[]): GraphQLField {\n  return contextValue[OTEL_GRAPHQL_DATA_SYMBOL].fields[path.join('.')];\n}\n\nfunction getParentFieldSpan(contextValue: any, path: string[]): Span {\n  for (let i = path.length - 1; i > 0; i--) {\n    const field = getField(contextValue, path.slice(0, i));\n\n    if (field) {\n      return field.span;\n    }\n  }\n\n  return getRootSpan(contextValue);\n}\n\nfunction getRootSpan(contextValue: any): Span {\n  return contextValue[OTEL_GRAPHQL_DATA_SYMBOL].span;\n}\n\nfunction pathToArray(path: GraphQLPath): string[] {\n  const flattened: string[] = [];\n  let curr: GraphQLPath | undefined = path;\n  while (curr) {\n    flattened.push(String(curr.key));\n    curr = curr.prev;\n  }\n  return flattened.reverse();\n}\n\nfunction repeatBreak(i: number): string {\n  return repeatChar('\\n', i);\n}\n\nfunction repeatSpace(i: number): string {\n  return repeatChar(' ', i);\n}\n\nfunction repeatChar(char: string, to: number): string {\n  let text = '';\n  for (let i = 0; i < to; i++) {\n    text += char;\n  }\n  return text;\n}\n\nconst KindsToBeRemoved: string[] = [TokenKind.FLOAT, TokenKind.STRING, TokenKind.INT, TokenKind.BLOCK_STRING];\n\nexport function getSourceFromLocation(loc?: Location, inputStart?: number, inputEnd?: number): string {\n  let source = '';\n\n  if (loc?.startToken) {\n    const start = typeof inputStart === 'number' ? inputStart : loc.start;\n    const end = typeof inputEnd === 'number' ? inputEnd : loc.end;\n\n    let next: Token | null = loc.startToken.next;\n    let previousLine: number | undefined = 1;\n    while (next) {\n      if (next.start < start) {\n        next = next.next;\n        previousLine = next?.line;\n        continue;\n      }\n      if (next.end > end) {\n        next = next.next;\n        previousLine = next?.line;\n        continue;\n      }\n      let value = next.value || next.kind;\n      let space = '';\n      if (KindsToBeRemoved.indexOf(next.kind) >= 0) {\n        value = '*';\n      }\n      if (next.kind === TokenKind.STRING) {\n        value = `\"${value}\"`;\n      }\n      if (next.kind === TokenKind.EOF) {\n        value = '';\n      }\n      if (next.line > previousLine!) {\n        source += repeatBreak(next.line - previousLine!);\n        previousLine = next.line;\n        space = repeatSpace(next.column - 1);\n      } else {\n        if (next.line === next.prev?.line) {\n          space = repeatSpace(next.start - (next.prev?.end || 0));\n        }\n      }\n      source += space + value;\n      if (next) {\n        next = next.next!;\n      }\n    }\n  }\n\n  return source;\n}\n\nexport function wrapFields(\n  type: Maybe<GraphQLObjectType & OtelPatched>,\n  getConfig: () => GraphQLInstrumentationParsedConfig,\n): void {\n  if (!type || (type as any)[OTEL_PATCHED_SYMBOL]) {\n    return;\n  }\n  const fields = type.getFields();\n\n  (type as any)[OTEL_PATCHED_SYMBOL] = true;\n\n  Object.keys(fields).forEach(key => {\n    const field = fields[key];\n\n    if (!field) {\n      return;\n    }\n\n    if (field.resolve) {\n      // The shared structural types narrow the resolver context to `ObjectWithGraphQLData`; cast back\n      // to the field's own resolver type (behavior is unchanged — this is a type-only adjustment).\n      field.resolve = wrapFieldResolver(getConfig, field.resolve) as GraphQLFieldResolver;\n    }\n\n    if (field.type) {\n      const unwrappedTypes = unwrapType(field.type);\n      for (const unwrappedType of unwrappedTypes) {\n        wrapFields(unwrappedType as any, getConfig);\n      }\n    }\n  });\n}\n\nfunction unwrapType(type: GraphQLOutputType): readonly GraphQLObjectType[] {\n  // unwrap wrapping types (non-nullable and list types)\n  if ('ofType' in type) {\n    // The structural index signature widens `ofType` to `unknown`, so narrow it back explicitly.\n    return unwrapType(type.ofType as GraphQLOutputType);\n  }\n\n  // unwrap union types\n  if (isGraphQLUnionType(type)) {\n    return type.getTypes();\n  }\n\n  // return object types\n  if (isGraphQLObjectType(type)) {\n    return [type];\n  }\n\n  return [];\n}\n\nfunction isGraphQLUnionType(type: GraphQLType): type is GraphQLUnionType {\n  return 'getTypes' in type && typeof type.getTypes === 'function';\n}\n\nfunction isGraphQLObjectType(type: GraphQLType): type is GraphQLObjectType {\n  return 'getFields' in type && typeof type.getFields === 'function';\n}\n\nconst handleResolveSpanError = (resolveSpan: Span, err: any, shouldEndSpan: boolean) => {\n  if (!shouldEndSpan) {\n    return;\n  }\n  resolveSpan.setStatus({\n    code: SPAN_STATUS_ERROR,\n    message: err.message,\n  });\n  resolveSpan.end();\n};\n\nconst handleResolveSpanSuccess = (resolveSpan: Span, shouldEndSpan: boolean) => {\n  if (!shouldEndSpan) {\n    return;\n  }\n  resolveSpan.end();\n};\n\nexport function wrapFieldResolver<TSource = any, TContext = any, TArgs = any>(\n  getConfig: () => GraphQLInstrumentationParsedConfig,\n  fieldResolver: Maybe<GraphQLFieldResolver<TSource, TContext, TArgs> & OtelPatched>,\n  isDefaultResolver = false,\n): GraphQLFieldResolver<TSource, TContext & ObjectWithGraphQLData, TArgs> & OtelPatched {\n  if ((wrappedFieldResolver as OtelPatched)[OTEL_PATCHED_SYMBOL] || typeof fieldResolver !== 'function') {\n    return fieldResolver!;\n  }\n\n  function wrappedFieldResolver(\n    this: GraphQLFieldResolver<TSource, TContext, TArgs>,\n    source: TSource,\n    args: TArgs,\n    contextValue: TContext & ObjectWithGraphQLData,\n    info: GraphQLResolveInfo,\n  ) {\n    if (!fieldResolver) {\n      return undefined;\n    }\n    const config = getConfig();\n\n    // follows what graphql is doing to decide if this is a trivial resolver\n    // for which we don't need to create a resolve span\n    if (\n      config.ignoreTrivialResolveSpans &&\n      isDefaultResolver &&\n      (isObjectLike(source) || typeof source === 'function')\n    ) {\n      const property = (source as any)[info.fieldName];\n      // a function execution is not trivial and should be recorder.\n      // property which is not a function is just a value and we don't want a \"resolve\" span for it\n      if (typeof property !== 'function') {\n        return fieldResolver.call(this, source, args, contextValue, info);\n      }\n    }\n\n    if (!contextValue[OTEL_GRAPHQL_DATA_SYMBOL]) {\n      return fieldResolver.call(this, source, args, contextValue, info);\n    }\n    const path = pathToArray(info?.path);\n\n    const { field, spanAdded } = createFieldIfNotExists(contextValue, info, path);\n    const span = field.span;\n    const shouldEndSpan = spanAdded;\n\n    return withActiveSpan(span, () => {\n      try {\n        const res = fieldResolver.call(this, source, args, contextValue, info);\n        if (isPromise(res)) {\n          return res.then(\n            (r: any) => {\n              handleResolveSpanSuccess(span, shouldEndSpan);\n              return r;\n            },\n            (err: Error) => {\n              handleResolveSpanError(span, err, shouldEndSpan);\n              throw err;\n            },\n          );\n        } else {\n          handleResolveSpanSuccess(span, shouldEndSpan);\n          return res;\n        }\n      } catch (err: any) {\n        handleResolveSpanError(span, err, shouldEndSpan);\n        throw err;\n      }\n    });\n  }\n\n  (wrappedFieldResolver as OtelPatched)[OTEL_PATCHED_SYMBOL] = true;\n\n  return wrappedFieldResolver;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-graphql\n * - Upstream version: @opentelemetry/instrumentation-graphql@0.66.0\n * - Types from `graphql` package inlined as simplified interfaces\n * - Minor TypeScript strictness adjustments\n * - Span lifecycle migrated from the OpenTelemetry tracer to the @sentry/core span API\n * - `auto.graphql.otel.graphql` origin baked into the execute span (previously set via a Sentry responseHook)\n * - The generic `responseHook` config was removed; its Sentry-specific logic (error status + root span renaming\n *   via `useOperationNameForRootSpan`) is now applied directly when the execution result is handled\n */\n\n/* oxlint-disable max-lines */\n\nimport {\n  isWrapped,\n  InstrumentationBase,\n  InstrumentationNodeModuleDefinition,\n  safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport { InstrumentationNodeModuleFile } from '../../InstrumentationNodeModuleFile';\nimport type {\n  DefinitionNode,\n  DocumentNode,\n  ExecutionArgs,\n  ExecutionResult,\n  GraphQLError,\n  GraphQLFieldResolver,\n  GraphQLSchema,\n  GraphQLTypeResolver,\n  OperationDefinitionNode,\n  ParseOptions,\n  PromiseOrValue,\n  Source,\n  TypeInfo,\n  ValidationRule,\n} from './graphql-types';\nimport type { Maybe } from './graphql-types';\nimport { SpanNames } from './enum';\nimport { AttributeNames } from './enums/AttributeNames';\nimport { OTEL_GRAPHQL_DATA_SYMBOL } from './symbols';\n\nimport {\n  type executeFunctionWithObj,\n  type executeArgumentsArray,\n  type executeType,\n  type parseType,\n  type validateType,\n  type OtelExecutionArgs,\n  type ObjectWithGraphQLData,\n  OPERATION_NOT_SUPPORTED,\n} from './internal-types';\nimport { addSpanSource, endSpan, getOperation, isPromise, wrapFieldResolver, wrapFields } from './utils';\n\nimport type { Span, SpanAttributeValue } from '@sentry/core';\nimport {\n  getRootSpan,\n  SDK_VERSION,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SPAN_STATUS_ERROR,\n  spanToJSON,\n  startInactiveSpan,\n  withActiveSpan,\n} from '@sentry/core';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_GRAPHQL_OPERATION } from '@sentry/opentelemetry';\nimport type { GraphQLInstrumentationConfig, GraphQLInstrumentationParsedConfig } from './types';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-graphql';\n\nconst ORIGIN = 'auto.graphql.otel.graphql';\n\nconst DEFAULT_CONFIG: GraphQLInstrumentationParsedConfig = {\n  ignoreResolveSpans: false,\n};\n\nconst supportedVersions = ['>=14.0.0 <17'];\n\nexport class GraphQLInstrumentation extends InstrumentationBase<GraphQLInstrumentationParsedConfig> {\n  constructor(config: GraphQLInstrumentationConfig = {}) {\n    super(PACKAGE_NAME, SDK_VERSION, { ...DEFAULT_CONFIG, ...config });\n  }\n\n  override setConfig(config: GraphQLInstrumentationConfig = {}) {\n    super.setConfig({ ...DEFAULT_CONFIG, ...config });\n  }\n\n  protected init() {\n    const module = new InstrumentationNodeModuleDefinition('graphql', supportedVersions);\n    module.files.push(this._addPatchingExecute());\n    module.files.push(this._addPatchingParser());\n    module.files.push(this._addPatchingValidate());\n\n    return module;\n  }\n\n  private _addPatchingExecute(): InstrumentationNodeModuleFile {\n    return new InstrumentationNodeModuleFile(\n      'graphql/execution/execute.js',\n      supportedVersions,\n      // cannot make it work with appropriate type as execute function has 2\n      //types and/cannot import function but only types\n      (moduleExports: any) => {\n        if (isWrapped(moduleExports.execute)) {\n          this._unwrap(moduleExports, 'execute');\n        }\n        this._wrap(moduleExports, 'execute', this._patchExecute(moduleExports.defaultFieldResolver));\n        return moduleExports;\n      },\n      moduleExports => {\n        if (moduleExports) {\n          this._unwrap(moduleExports, 'execute');\n        }\n      },\n    );\n  }\n\n  private _addPatchingParser(): InstrumentationNodeModuleFile {\n    return new InstrumentationNodeModuleFile(\n      'graphql/language/parser.js',\n      supportedVersions,\n      (moduleExports: { parse: parseType; [key: string]: any }) => {\n        if (isWrapped(moduleExports.parse)) {\n          this._unwrap(moduleExports, 'parse');\n        }\n        this._wrap(moduleExports, 'parse', this._patchParse());\n        return moduleExports;\n      },\n      (moduleExports: { parse: parseType; [key: string]: any }) => {\n        if (moduleExports) {\n          this._unwrap(moduleExports, 'parse');\n        }\n      },\n    );\n  }\n\n  private _addPatchingValidate(): InstrumentationNodeModuleFile {\n    return new InstrumentationNodeModuleFile(\n      'graphql/validation/validate.js',\n      supportedVersions,\n      moduleExports => {\n        if (isWrapped(moduleExports.validate)) {\n          this._unwrap(moduleExports, 'validate');\n        }\n        this._wrap(moduleExports, 'validate', this._patchValidate());\n        return moduleExports;\n      },\n      moduleExports => {\n        if (moduleExports) {\n          this._unwrap(moduleExports, 'validate');\n        }\n      },\n    );\n  }\n\n  private _patchExecute(defaultFieldResolved: GraphQLFieldResolver<any, any>): (original: executeType) => executeType {\n    const instrumentation = this;\n    return function execute(original) {\n      return function patchExecute(this: executeType): PromiseOrValue<ExecutionResult> {\n        let processedArgs: OtelExecutionArgs;\n\n        // case when apollo server is used for example\n        if (arguments.length >= 2) {\n          const args = arguments as unknown as executeArgumentsArray;\n          processedArgs = instrumentation._wrapExecuteArgs(\n            args[0],\n            args[1],\n            args[2],\n            args[3],\n            args[4],\n            args[5],\n            args[6],\n            args[7],\n            defaultFieldResolved,\n          );\n        } else {\n          const args = arguments[0] as ExecutionArgs;\n          processedArgs = instrumentation._wrapExecuteArgs(\n            args.schema,\n            args.document,\n            args.rootValue,\n            args.contextValue,\n            args.variableValues,\n            args.operationName,\n            args.fieldResolver,\n            args.typeResolver,\n            defaultFieldResolved,\n          );\n        }\n\n        const operation = getOperation(processedArgs.document, processedArgs.operationName);\n\n        const span = instrumentation._createExecuteSpan(operation, processedArgs);\n\n        processedArgs.contextValue[OTEL_GRAPHQL_DATA_SYMBOL] = {\n          source: processedArgs.document\n            ? processedArgs.document || (processedArgs.document as ObjectWithGraphQLData)[OTEL_GRAPHQL_DATA_SYMBOL]\n            : undefined,\n          span,\n          fields: {},\n        };\n\n        return withActiveSpan(span, () => {\n          return safeExecuteInTheMiddle<PromiseOrValue<ExecutionResult>>(\n            () => {\n              return (original as executeFunctionWithObj).apply(this, [processedArgs]);\n            },\n            (err, result) => {\n              instrumentation._handleExecutionResult(span, err, result);\n            },\n          );\n        });\n      };\n    };\n  }\n\n  private _handleExecutionResult(span: Span, err?: Error, result?: PromiseOrValue<ExecutionResult>) {\n    if (result === undefined || err) {\n      endSpan(span, err);\n      return;\n    }\n\n    if (isPromise(result)) {\n      result.then(\n        resultData => {\n          this._updateSpanFromResult(span, resultData);\n          endSpan(span);\n        },\n        error => {\n          endSpan(span, error);\n        },\n      );\n    } else {\n      this._updateSpanFromResult(span, result);\n      endSpan(span);\n    }\n  }\n\n  /**\n   * Applies Sentry-specific span mutations based on the GraphQL execution result:\n   * - Marks the execute span as errored if the result contains errors (and no status was set yet)\n   * - Optionally renames the containing root span to include the GraphQL operation name(s)\n   */\n  private _updateSpanFromResult(span: Span, result: ExecutionResult): void {\n    // We want to ensure spans are marked as errored if there are errors in the result\n    // We only do that if the span is not already marked with a status\n    if (result.errors?.length && !spanToJSON(span).status) {\n      span.setStatus({ code: SPAN_STATUS_ERROR });\n    }\n\n    if (!this.getConfig().useOperationNameForRootSpan) {\n      return;\n    }\n\n    const attributes = spanToJSON(span).data;\n\n    // If operation.name is not set, we fall back to use operation.type only\n    const operationType = attributes[AttributeNames.OPERATION_TYPE];\n    const operationName = attributes[AttributeNames.OPERATION_NAME];\n\n    if (!operationType) {\n      return;\n    }\n\n    const rootSpan = getRootSpan(span);\n    const rootSpanAttributes = spanToJSON(rootSpan).data;\n\n    const existingOperations = rootSpanAttributes[SEMANTIC_ATTRIBUTE_SENTRY_GRAPHQL_OPERATION] || [];\n\n    const newOperation = operationName ? `${operationType} ${operationName}` : `${operationType}`;\n\n    // We keep track of each operation on the root span\n    // This can either be a string, or an array of strings (if there are multiple operations)\n    if (Array.isArray(existingOperations)) {\n      (existingOperations as string[]).push(newOperation);\n      rootSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_GRAPHQL_OPERATION, existingOperations);\n    } else if (typeof existingOperations === 'string') {\n      rootSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_GRAPHQL_OPERATION, [existingOperations, newOperation]);\n    } else {\n      rootSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_GRAPHQL_OPERATION, newOperation);\n    }\n\n    if (!spanToJSON(rootSpan).data['original-description']) {\n      rootSpan.setAttribute('original-description', spanToJSON(rootSpan).description);\n    }\n    // Important for e.g. @sentry/aws-serverless because this would otherwise overwrite the name again\n    rootSpan.updateName(\n      `${spanToJSON(rootSpan).data['original-description']} (${getGraphqlOperationNamesFromAttribute(\n        existingOperations,\n      )})`,\n    );\n  }\n\n  private _patchParse(): (original: parseType) => parseType {\n    const instrumentation = this;\n    return function parse(original) {\n      return function patchParse(this: parseType, source: string | Source, options?: ParseOptions): DocumentNode {\n        return instrumentation._parse(this, original, source, options);\n      };\n    };\n  }\n\n  private _patchValidate(): (original: validateType) => validateType {\n    const instrumentation = this;\n    return function validate(original: validateType) {\n      return function patchValidate(\n        this: validateType,\n        schema: GraphQLSchema,\n        documentAST: DocumentNode,\n        rules?: ReadonlyArray<ValidationRule>,\n        options?: { maxErrors?: number },\n        typeInfo?: TypeInfo,\n      ): ReadonlyArray<GraphQLError> {\n        return instrumentation._validate(this, original, schema, documentAST, rules, typeInfo, options);\n      };\n    };\n  }\n\n  private _parse(obj: parseType, original: parseType, source: string | Source, options?: ParseOptions): DocumentNode {\n    const span = startInactiveSpan({ name: SpanNames.PARSE });\n\n    return withActiveSpan(span, () => {\n      return safeExecuteInTheMiddle<DocumentNode & ObjectWithGraphQLData>(\n        () => {\n          return original.call(obj, source, options);\n        },\n        (err, result) => {\n          if (result) {\n            const operation = getOperation(result);\n            if (!operation) {\n              span.updateName(SpanNames.SCHEMA_PARSE);\n            } else if (result.loc) {\n              addSpanSource(span, result.loc);\n            }\n          }\n          endSpan(span, err);\n        },\n      );\n    });\n  }\n\n  private _validate(\n    obj: validateType,\n    original: validateType,\n    schema: GraphQLSchema,\n    documentAST: DocumentNode,\n    rules?: ReadonlyArray<ValidationRule>,\n    typeInfo?: TypeInfo,\n    options?: { maxErrors?: number },\n  ): ReadonlyArray<GraphQLError> {\n    const span = startInactiveSpan({ name: SpanNames.VALIDATE });\n\n    return withActiveSpan(span, () => {\n      return safeExecuteInTheMiddle<ReadonlyArray<GraphQLError>>(\n        () => {\n          return original.call(obj, schema, documentAST, rules, options, typeInfo);\n        },\n        (err, _errors) => {\n          if (!documentAST.loc) {\n            span.updateName(SpanNames.SCHEMA_VALIDATE);\n          }\n          endSpan(span, err);\n        },\n      );\n    });\n  }\n\n  private _createExecuteSpan(operation: DefinitionNode | undefined, processedArgs: OtelExecutionArgs): Span {\n    const span = startInactiveSpan({\n      name: SpanNames.EXECUTE,\n      attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN },\n    });\n    if (operation) {\n      const { operation: operationType, name: nameNode } = operation as OperationDefinitionNode;\n\n      span.setAttribute(AttributeNames.OPERATION_TYPE, operationType);\n\n      const operationName = nameNode?.value;\n\n      // https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/instrumentation/graphql/\n      // > The span name MUST be of the format <graphql.operation.type> <graphql.operation.name> provided that graphql.operation.type and graphql.operation.name are available.\n      // > If graphql.operation.name is not available, the span SHOULD be named <graphql.operation.type>.\n      if (operationName) {\n        span.setAttribute(AttributeNames.OPERATION_NAME, operationName);\n        span.updateName(`${operationType} ${operationName}`);\n      } else {\n        span.updateName(operationType);\n      }\n    } else {\n      let operationName = ' ';\n      if (processedArgs.operationName) {\n        operationName = ` \"${processedArgs.operationName}\" `;\n      }\n      operationName = OPERATION_NOT_SUPPORTED.replace('$operationName$', operationName);\n      span.setAttribute(AttributeNames.OPERATION_NAME, operationName);\n    }\n\n    if (processedArgs.document?.loc) {\n      addSpanSource(span, processedArgs.document.loc);\n    }\n\n    return span;\n  }\n\n  private _wrapExecuteArgs(\n    schema: GraphQLSchema,\n    document: DocumentNode,\n    rootValue: any,\n    contextValue: any,\n    variableValues: Maybe<{ [key: string]: any }>,\n    operationName: Maybe<string>,\n    fieldResolver: Maybe<GraphQLFieldResolver<any, any>>,\n    typeResolver: Maybe<GraphQLTypeResolver<any, any>>,\n    defaultFieldResolved: GraphQLFieldResolver<any, any>,\n  ): OtelExecutionArgs {\n    if (!contextValue) {\n      // oxlint-disable-next-line no-param-reassign\n      contextValue = {};\n    }\n\n    if (contextValue[OTEL_GRAPHQL_DATA_SYMBOL] || this.getConfig().ignoreResolveSpans) {\n      return {\n        schema,\n        document,\n        rootValue,\n        contextValue,\n        variableValues,\n        operationName,\n        fieldResolver,\n        typeResolver,\n      };\n    }\n\n    const isUsingDefaultResolver = fieldResolver == null;\n    // follows graphql implementation here:\n    // https://github.com/graphql/graphql-js/blob/0b7daed9811731362c71900e12e5ea0d1ecc7f1f/src/execution/execute.ts#L494\n    const fieldResolverForExecute = fieldResolver ?? defaultFieldResolved;\n    // oxlint-disable-next-line no-param-reassign\n    fieldResolver = wrapFieldResolver(() => this.getConfig(), fieldResolverForExecute, isUsingDefaultResolver);\n\n    if (schema) {\n      wrapFields(schema.getQueryType() as any, () => this.getConfig());\n      wrapFields(schema.getMutationType() as any, () => this.getConfig());\n    }\n\n    return {\n      schema,\n      document,\n      rootValue,\n      contextValue,\n      variableValues,\n      operationName,\n      fieldResolver,\n      typeResolver,\n    };\n  }\n}\n\n// copy from packages/opentelemetry/utils\nfunction getGraphqlOperationNamesFromAttribute(attr: SpanAttributeValue): string {\n  if (Array.isArray(attr)) {\n    // oxlint-disable-next-line typescript/require-array-sort-compare\n    const sorted = attr.slice().sort();\n\n    // Up to 5 items, we just add all of them\n    if (sorted.length <= 5) {\n      return sorted.join(', ');\n    } else {\n      // Else, we add the first 5 and the diff of other operations\n      return `${sorted.slice(0, 5).join(', ')}, +${sorted.length - 5}`;\n    }\n  }\n\n  return `${attr}`;\n}\n", "import { GraphQLInstrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration, extendIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { graphqlIntegration as graphqlChannelIntegration } from '@sentry/server-utils';\n\ninterface GraphqlOptions {\n  /**\n   * Do not create spans for resolvers.\n   *\n   * Defaults to true.\n   */\n  ignoreResolveSpans?: boolean;\n\n  /**\n   * Don't create spans for the execution of the default resolver on object properties.\n   *\n   * When a resolver function is not defined on the schema for a field, graphql will\n   * use the default resolver which just looks for a property with that name on the object.\n   * If the property is not a function, it's not very interesting to trace.\n   * This option can reduce noise and number of spans created.\n   *\n   * Defaults to true.\n   */\n  ignoreTrivialResolveSpans?: boolean;\n\n  /**\n   * If this is enabled, a http.server root span containing this span will automatically be renamed to include the operation name.\n   * Set this to `false` if you do not want this behavior, and want to keep the default http.server span name.\n   *\n   * Defaults to true.\n   */\n  useOperationNameForRootSpan?: boolean;\n}\n\nconst INTEGRATION_NAME = 'Graphql' as const;\n\nexport const instrumentGraphql = generateInstrumentOnce(\n  INTEGRATION_NAME,\n  GraphQLInstrumentation,\n  (_options: GraphqlOptions) => getOptionsWithDefaults(_options),\n);\n\nconst _graphqlIntegration = ((options: GraphqlOptions = {}) => {\n  // The diagnostics_channel subscription (graphql >= 17) lives in server-utils so it is shared\n  // across server runtimes; we extend it here to also run the vendored OTel patcher for graphql < 17.\n  // Both paths read the same `ignoreResolveSpans` / `ignoreTrivialResolveSpans` options.\n  return extendIntegration(graphqlChannelIntegration(getOptionsWithDefaults(options)), {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      // We set defaults here, too, because otherwise we'd update the instrumentation config\n      // to the config without defaults, as `generateInstrumentOnce` automatically calls `setConfig(options)`\n      // when being called the second time\n      instrumentGraphql(getOptionsWithDefaults(options));\n    },\n  });\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [graphql](https://www.npmjs.com/package/graphql) library.\n *\n * For more information, see the [`graphqlIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/graphql/).\n *\n * @param {GraphqlOptions} options Configuration options for the GraphQL integration.\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *  integrations: [Sentry.graphqlIntegration()],\n * });\n */\nexport const graphqlIntegration = defineIntegration(_graphqlIntegration);\n\nfunction getOptionsWithDefaults(options?: GraphqlOptions): GraphqlOptions {\n  return {\n    ignoreResolveSpans: true,\n    ignoreTrivialResolveSpans: true,\n    useOperationNameForRootSpan: true,\n    ...options,\n  };\n}\n", "/*\n * Copyright The OpenTelemetry Authors, Aspecto\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-kafkajs\n * - Upstream version: @opentelemetry/instrumentation-kafkajs@0.27.0\n * - Metric semantic conventions dropped; `error.type` inlined from `@opentelemetry/semantic-conventions`\n */\n\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by this package.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n\n/**\n * The identifier of the partition messages are sent to or received from, unique within the `messaging.destination.name`.\n *\n * @example \"1\"\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_MESSAGING_DESTINATION_PARTITION_ID = 'messaging.destination.partition.id' as const;\n\n/**\n * 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.\n *\n * @example \"myKey\"\n *\n * @note If the key type is not string, it's string representation has to be supplied for the attribute. If the key has no unambiguous, canonical string form, don't include its value.\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_MESSAGING_KAFKA_MESSAGE_KEY = 'messaging.kafka.message.key' as const;\n\n/**\n * A boolean that is true if the message is a tombstone.\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE = 'messaging.kafka.message.tombstone' as const;\n\n/**\n * The offset of a record in the corresponding Kafka partition.\n *\n * @example 42\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const ATTR_MESSAGING_KAFKA_OFFSET = 'messaging.kafka.offset' as const;\n\n/**\n * Enum value \"process\" for attribute `messaging.operation.type`.\n */\nexport const MESSAGING_OPERATION_TYPE_VALUE_PROCESS = 'process' as const;\n\n/**\n * Enum value \"receive\" for attribute `messaging.operation.type`.\n */\nexport const MESSAGING_OPERATION_TYPE_VALUE_RECEIVE = 'receive' as const;\n\n/**\n * Enum value \"send\" for attribute `messaging.operation.type`.\n */\nexport const MESSAGING_OPERATION_TYPE_VALUE_SEND = 'send' as const;\n\n/**\n * Enum value \"kafka\" for attribute `messaging.system`.\n */\nexport const MESSAGING_SYSTEM_VALUE_KAFKA = 'kafka' as const;\n\n/**\n * Enum value \"_OTHER\" for attribute `error.type`. A fallback error value to be used when\n * the instrumentation doesn't define a custom value.\n */\nexport const ERROR_TYPE_VALUE_OTHER = '_OTHER' as const;\n", "/*\n * Copyright The OpenTelemetry Authors, Aspecto\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-kafkajs\n * - Upstream version: @opentelemetry/instrumentation-kafkajs@0.27.0\n * - Span creation extracted here and migrated to the @sentry/core API; origin folded into span creation\n */\n\nimport { TraceFlags } from '@opentelemetry/api';\nimport {\n  ERROR_TYPE,\n  MESSAGING_DESTINATION_NAME,\n  MESSAGING_OPERATION_NAME,\n  MESSAGING_OPERATION_TYPE,\n  MESSAGING_SYSTEM,\n} from '@sentry/conventions/attributes';\nimport type { Span, SpanAttributes, SpanLink } from '@sentry/core';\nimport {\n  getTraceData,\n  propagationContextFromHeaders,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SPAN_KIND,\n  SPAN_STATUS_ERROR,\n  startInactiveSpan,\n} from '@sentry/core';\nimport type { KafkaMessage, Message } from './kafkajs-types';\nimport {\n  ATTR_MESSAGING_DESTINATION_PARTITION_ID,\n  ATTR_MESSAGING_KAFKA_MESSAGE_KEY,\n  ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE,\n  ATTR_MESSAGING_KAFKA_OFFSET,\n  ERROR_TYPE_VALUE_OTHER,\n  MESSAGING_OPERATION_TYPE_VALUE_RECEIVE,\n  MESSAGING_OPERATION_TYPE_VALUE_SEND,\n  MESSAGING_SYSTEM_VALUE_KAFKA,\n} from './semconv';\n\nconst PRODUCER_ORIGIN = 'auto.kafkajs.otel.producer';\nconst CONSUMER_ORIGIN = 'auto.kafkajs.otel.consumer';\n\nexport interface ConsumerSpanOptions {\n  topic: string;\n  message: KafkaMessage | undefined;\n  operationType: string;\n  attributes: SpanAttributes;\n  links?: SpanLink[];\n}\n\n/**\n * Reads a header value off a kafkajs message as a string. kafkajs delivers headers as `Buffer`s (or\n * arrays of them), so we normalize to a string before handing them to Sentry's trace helpers.\n */\nexport function getHeaderAsString(headers: KafkaMessage['headers'], key: string): string | undefined {\n  const value = headers?.[key];\n  if (value == null) {\n    return undefined;\n  }\n  return Array.isArray(value) ? value[0]?.toString() : value.toString();\n}\n\n/**\n * Builds a span link to the producer span carried in the message headers, mirroring the upstream\n * behavior of linking each batch-processed message to its originating producer span.\n */\nexport function getLinksFromHeaders(headers: KafkaMessage['headers']): SpanLink[] | undefined {\n  const sentryTrace = getHeaderAsString(headers, 'sentry-trace');\n  if (!sentryTrace) {\n    return undefined;\n  }\n\n  const { traceId, parentSpanId, sampled } = propagationContextFromHeaders(\n    sentryTrace,\n    getHeaderAsString(headers, 'baggage'),\n  );\n  if (!parentSpanId) {\n    return undefined;\n  }\n\n  return [\n    {\n      context: {\n        traceId,\n        spanId: parentSpanId,\n        isRemote: true,\n        traceFlags: sampled ? TraceFlags.SAMPLED : TraceFlags.NONE,\n      },\n    },\n  ];\n}\n\n/** Starts an inactive consumer (process/receive) span carrying the kafkajs messaging attributes. */\nexport function startConsumerSpan({ topic, message, operationType, links, attributes }: ConsumerSpanOptions): Span {\n  const operationName =\n    operationType === MESSAGING_OPERATION_TYPE_VALUE_RECEIVE\n      ? 'poll' // for batch processing spans\n      : operationType; // for individual message processing spans\n\n  return startInactiveSpan({\n    name: `${operationName} ${topic}`,\n    kind: operationType === MESSAGING_OPERATION_TYPE_VALUE_RECEIVE ? SPAN_KIND.CLIENT : SPAN_KIND.CONSUMER,\n    links,\n    attributes: {\n      ...attributes,\n      [MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE_KAFKA,\n      [MESSAGING_DESTINATION_NAME]: topic,\n      [MESSAGING_OPERATION_TYPE]: operationType,\n      [MESSAGING_OPERATION_NAME]: operationName,\n      [ATTR_MESSAGING_KAFKA_MESSAGE_KEY]: message?.key ? String(message.key) : undefined,\n      [ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE]: message?.key && message.value === null ? true : undefined,\n      [ATTR_MESSAGING_KAFKA_OFFSET]: message?.offset,\n      // Mirror the upstream behavior of only tagging per-message processing spans (not the batch\n      // receiving span, which carries no message) with the auto origin.\n      ...(message ? { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: CONSUMER_ORIGIN } : {}),\n    },\n  });\n}\n\n/** Starts an inactive producer span and propagates its trace into the message headers. */\nexport function startProducerSpan(topic: string, message: Message): Span {\n  const span = startInactiveSpan({\n    name: `send ${topic}`,\n    kind: SPAN_KIND.PRODUCER,\n    attributes: {\n      [MESSAGING_SYSTEM]: MESSAGING_SYSTEM_VALUE_KAFKA,\n      [MESSAGING_DESTINATION_NAME]: topic,\n      [ATTR_MESSAGING_KAFKA_MESSAGE_KEY]: message.key ? String(message.key) : undefined,\n      [ATTR_MESSAGING_KAFKA_MESSAGE_TOMBSTONE]: message.key && message.value === null ? true : undefined,\n      [ATTR_MESSAGING_DESTINATION_PARTITION_ID]:\n        message.partition !== undefined ? String(message.partition) : undefined,\n      [MESSAGING_OPERATION_NAME]: 'send',\n      [MESSAGING_OPERATION_TYPE]: MESSAGING_OPERATION_TYPE_VALUE_SEND,\n      [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: PRODUCER_ORIGIN,\n    },\n  });\n\n  // Propagate the producer span's trace to consumers via the message headers.\n  message.headers = message.headers ?? {};\n  const traceData = getTraceData({ span });\n  if (traceData['sentry-trace']) {\n    message.headers['sentry-trace'] = traceData['sentry-trace'];\n  }\n  if (traceData.baggage) {\n    message.headers['baggage'] = traceData.baggage;\n  }\n\n  return span;\n}\n\n/**\n * Resolves once `sendPromise` settles, ending all `spans` and, on failure, marking them with the\n * error status and `error.type` before re-throwing.\n */\nexport function endSpansOnPromise<T>(spans: Span[], sendPromise: Promise<T>): Promise<T> {\n  return Promise.resolve(sendPromise)\n    .catch(reason => {\n      let errorMessage: string | undefined;\n      let errorType: string = ERROR_TYPE_VALUE_OTHER;\n      if (typeof reason === 'string' || reason === undefined) {\n        errorMessage = reason;\n      } else if (typeof reason === 'object' && Object.prototype.hasOwnProperty.call(reason, 'message')) {\n        errorMessage = reason.message;\n        errorType = reason.constructor.name;\n      }\n\n      spans.forEach(span => {\n        span.setAttribute(ERROR_TYPE, errorType);\n        span.setStatus({\n          code: SPAN_STATUS_ERROR,\n          message: errorMessage,\n        });\n      });\n\n      throw reason;\n    })\n    .finally(() => {\n      spans.forEach(span => span.end());\n    });\n}\n", "/*\n * Copyright The OpenTelemetry Authors, Aspecto\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-kafkajs\n * - Upstream version: @opentelemetry/instrumentation-kafkajs@0.27.0\n * - Some types vendored from kafkajs with simplifications\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n * - Cross-broker trace propagation uses Sentry's `getTraceData`/`continueTrace` instead of the OTel\n *   propagator, so the vendored `bufferTextMapGetter` propagator is gone\n * - Dropped the OTel metrics (no MeterProvider is wired up) and, with them, the `network.request`\n *   event listeners they relied on; origin is folded into span creation instead of `index.ts` hooks\n */\n\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport { MESSAGING_BATCH_MESSAGE_COUNT } from '@sentry/conventions/attributes';\nimport type { Span } from '@sentry/core';\nimport {\n  continueTrace,\n  SDK_VERSION,\n  SPAN_STATUS_ERROR,\n  SPAN_STATUS_OK,\n  startInactiveSpan,\n  startNewTrace,\n  withActiveSpan,\n} from '@sentry/core';\nimport type {\n  Consumer,\n  ConsumerRunConfig,\n  EachBatchHandler,\n  EachMessageHandler,\n  Kafka,\n  KafkaMessage,\n  Producer,\n  RecordMetadata,\n  Transaction,\n} from './kafkajs-types';\nimport {\n  ATTR_MESSAGING_DESTINATION_PARTITION_ID,\n  MESSAGING_OPERATION_TYPE_VALUE_PROCESS,\n  MESSAGING_OPERATION_TYPE_VALUE_RECEIVE,\n} from './semconv';\nimport {\n  endSpansOnPromise,\n  getHeaderAsString,\n  getLinksFromHeaders,\n  startConsumerSpan,\n  startProducerSpan,\n} from './utils';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-kafkajs';\n\nexport class KafkaJsInstrumentation extends InstrumentationBase<InstrumentationConfig> {\n  public constructor(config: InstrumentationConfig = {}) {\n    super(PACKAGE_NAME, SDK_VERSION, config);\n  }\n\n  protected init(): InstrumentationNodeModuleDefinition {\n    const unpatch = (moduleExports: any): void => {\n      if (isWrapped(moduleExports?.Kafka?.prototype.producer)) {\n        this._unwrap(moduleExports.Kafka.prototype, 'producer');\n      }\n      if (isWrapped(moduleExports?.Kafka?.prototype.consumer)) {\n        this._unwrap(moduleExports.Kafka.prototype, 'consumer');\n      }\n    };\n\n    const module = new InstrumentationNodeModuleDefinition(\n      'kafkajs',\n      ['>=0.3.0 <3'],\n      (moduleExports: any) => {\n        unpatch(moduleExports);\n        this._wrap(moduleExports?.Kafka?.prototype, 'producer', this._getProducerPatch());\n        this._wrap(moduleExports?.Kafka?.prototype, 'consumer', this._getConsumerPatch());\n\n        return moduleExports;\n      },\n      unpatch,\n    );\n    return module;\n  }\n\n  private _getConsumerPatch() {\n    const instrumentation = this;\n    return (original: Kafka['consumer']) => {\n      return function consumer(this: Kafka, ...args: Parameters<Kafka['consumer']>) {\n        const newConsumer: Consumer = original.apply(this, args);\n\n        // oxlint-disable-next-line typescript/unbound-method -- property check, the method is never called\n        if (isWrapped(newConsumer.run)) {\n          instrumentation._unwrap(newConsumer, 'run');\n        }\n\n        instrumentation._wrap(newConsumer, 'run', instrumentation._getConsumerRunPatch());\n\n        return newConsumer;\n      };\n    };\n  }\n\n  private _getProducerPatch() {\n    const instrumentation = this;\n    return (original: Kafka['producer']) => {\n      return function consumer(this: Kafka, ...args: Parameters<Kafka['producer']>) {\n        const newProducer: Producer = original.apply(this, args);\n\n        // oxlint-disable-next-line typescript/unbound-method -- property check, the method is never called\n        if (isWrapped(newProducer.sendBatch)) {\n          instrumentation._unwrap(newProducer, 'sendBatch');\n        }\n        instrumentation._wrap(newProducer, 'sendBatch', instrumentation._getSendBatchPatch());\n\n        // oxlint-disable-next-line typescript/unbound-method -- property check, the method is never called\n        if (isWrapped(newProducer.send)) {\n          instrumentation._unwrap(newProducer, 'send');\n        }\n        instrumentation._wrap(newProducer, 'send', instrumentation._getSendPatch());\n\n        // oxlint-disable-next-line typescript/unbound-method -- property check, the method is never called\n        if (isWrapped(newProducer.transaction)) {\n          instrumentation._unwrap(newProducer, 'transaction');\n        }\n        instrumentation._wrap(newProducer, 'transaction', instrumentation._getProducerTransactionPatch());\n\n        return newProducer;\n      };\n    };\n  }\n\n  private _getConsumerRunPatch() {\n    const instrumentation = this;\n    return (original: Consumer['run']) => {\n      return function run(this: Consumer, ...args: Parameters<Consumer['run']>): ReturnType<Consumer['run']> {\n        const config = args[0];\n        if (config?.eachMessage) {\n          if (isWrapped(config.eachMessage)) {\n            instrumentation._unwrap(config, 'eachMessage');\n          }\n          instrumentation._wrap(config, 'eachMessage', instrumentation._getConsumerEachMessagePatch());\n        }\n        if (config?.eachBatch) {\n          if (isWrapped(config.eachBatch)) {\n            instrumentation._unwrap(config, 'eachBatch');\n          }\n          instrumentation._wrap(config, 'eachBatch', instrumentation._getConsumerEachBatchPatch());\n        }\n        return original.call(this, config);\n      };\n    };\n  }\n\n  private _getConsumerEachMessagePatch() {\n    return (original: ConsumerRunConfig['eachMessage']) => {\n      return function eachMessage(this: unknown, ...args: Parameters<EachMessageHandler>): Promise<void> {\n        const payload = args[0];\n        const sentryTrace = getHeaderAsString(payload.message.headers, 'sentry-trace');\n        const baggage = getHeaderAsString(payload.message.headers, 'baggage');\n\n        // Continue the producer's trace so the consumer span is parented to the message's producer.\n        return continueTrace({ sentryTrace, baggage }, () => {\n          const span = startConsumerSpan({\n            topic: payload.topic,\n            message: payload.message,\n            operationType: MESSAGING_OPERATION_TYPE_VALUE_PROCESS,\n            attributes: {\n              [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.partition),\n            },\n          });\n\n          const eachMessagePromise = withActiveSpan(span, () => {\n            return original!.apply(this, args);\n          });\n          return endSpansOnPromise([span], eachMessagePromise);\n        });\n      };\n    };\n  }\n\n  private _getConsumerEachBatchPatch() {\n    return (original: ConsumerRunConfig['eachBatch']) => {\n      return function eachBatch(this: unknown, ...args: Parameters<EachBatchHandler>): Promise<void> {\n        const payload = args[0];\n        // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/messaging.md#topic-with-multiple-consumers\n        // A batch pull aggregates messages from many producers, so the receiving span is a fresh root\n        // trace and each processed message links back to its own producer span.\n        const receivingSpan = startNewTrace(() =>\n          startConsumerSpan({\n            topic: payload.batch.topic,\n            message: undefined,\n            operationType: MESSAGING_OPERATION_TYPE_VALUE_RECEIVE,\n            attributes: {\n              [MESSAGING_BATCH_MESSAGE_COUNT]: payload.batch.messages.length,\n              [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition),\n            },\n          }),\n        );\n\n        return withActiveSpan(receivingSpan, () => {\n          const spans: Span[] = [receivingSpan];\n          payload.batch.messages.forEach((message: KafkaMessage) => {\n            spans.push(\n              startConsumerSpan({\n                topic: payload.batch.topic,\n                message,\n                operationType: MESSAGING_OPERATION_TYPE_VALUE_PROCESS,\n                links: getLinksFromHeaders(message.headers),\n                attributes: {\n                  [ATTR_MESSAGING_DESTINATION_PARTITION_ID]: String(payload.batch.partition),\n                },\n              }),\n            );\n          });\n          const batchMessagePromise: Promise<void> = original!.apply(this, args);\n          return endSpansOnPromise(spans, batchMessagePromise);\n        });\n      };\n    };\n  }\n\n  private _getProducerTransactionPatch() {\n    const instrumentation = this;\n    return (original: Producer['transaction']) => {\n      return function transaction(\n        this: Producer,\n        ...args: Parameters<Producer['transaction']>\n      ): ReturnType<Producer['transaction']> {\n        const transactionSpan = startInactiveSpan({ name: 'transaction' });\n\n        const transactionPromise = original.apply(this, args);\n\n        transactionPromise\n          .then((transaction: Transaction) => {\n            // oxlint-disable-next-line typescript/unbound-method -- re-bound below via `.apply(this, args)`\n            const originalSend = transaction.send;\n            transaction.send = function send(this: Transaction, ...args) {\n              return withActiveSpan(transactionSpan, () => {\n                const patched = instrumentation._getSendPatch()(originalSend);\n                return patched.apply(this, args).catch((err: any) => {\n                  transactionSpan.setStatus({\n                    code: SPAN_STATUS_ERROR,\n                    message: err?.message,\n                  });\n                  throw err;\n                });\n              });\n            };\n\n            // oxlint-disable-next-line typescript/unbound-method -- re-bound below via `.apply(this, args)`\n            const originalSendBatch = transaction.sendBatch;\n            transaction.sendBatch = function sendBatch(this: Transaction, ...args) {\n              return withActiveSpan(transactionSpan, () => {\n                const patched = instrumentation._getSendBatchPatch()(originalSendBatch);\n                return patched.apply(this, args).catch((err: any) => {\n                  transactionSpan.setStatus({\n                    code: SPAN_STATUS_ERROR,\n                    message: err?.message,\n                  });\n                  throw err;\n                });\n              });\n            };\n\n            // oxlint-disable-next-line typescript/unbound-method -- re-bound below via `.apply(this, args)`\n            const originalCommit = transaction.commit;\n            transaction.commit = function commit(this: Transaction, ...args) {\n              const originCommitPromise = originalCommit.apply(this, args).then(() => {\n                transactionSpan.setStatus({ code: SPAN_STATUS_OK });\n              });\n              return endSpansOnPromise([transactionSpan], originCommitPromise);\n            };\n\n            // oxlint-disable-next-line typescript/unbound-method -- re-bound below via `.apply(this, args)`\n            const originalAbort = transaction.abort;\n            transaction.abort = function abort(this: Transaction, ...args) {\n              const originAbortPromise = originalAbort.apply(this, args);\n              return endSpansOnPromise([transactionSpan], originAbortPromise);\n            };\n          })\n          .catch((err: any) => {\n            transactionSpan.setStatus({\n              code: SPAN_STATUS_ERROR,\n              message: err?.message,\n            });\n            transactionSpan.end();\n          });\n\n        return transactionPromise;\n      };\n    };\n  }\n\n  private _getSendBatchPatch() {\n    return (original: Producer['sendBatch'] | Transaction['sendBatch']) => {\n      return function sendBatch(\n        this: Producer | Transaction,\n        ...args: Parameters<Producer['sendBatch']>\n      ): ReturnType<Producer['sendBatch']> {\n        const batch = args[0];\n        const messages = batch.topicMessages || [];\n\n        const spans: Span[] = [];\n\n        messages.forEach((topicMessage: any) => {\n          topicMessage.messages.forEach((message: any) => {\n            spans.push(startProducerSpan(topicMessage.topic, message));\n          });\n        });\n        const origSendResult: Promise<RecordMetadata[]> = original.apply(this, args);\n        return endSpansOnPromise(spans, origSendResult);\n      };\n    };\n  }\n\n  private _getSendPatch() {\n    return (original: Producer['send'] | Transaction['send']) => {\n      return function send(\n        this: Producer | Transaction,\n        ...args: Parameters<Producer['send']>\n      ): ReturnType<Producer['send']> {\n        const record = args[0];\n        const spans: Span[] = record.messages.map((message: any) => {\n          return startProducerSpan(record.topic, message);\n        });\n\n        const origSendResult: Promise<RecordMetadata[]> = original.apply(this, args);\n        return endSpansOnPromise(spans, origSendResult);\n      };\n    };\n  }\n}\n", "import { KafkaJsInstrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\n\nconst INTEGRATION_NAME = 'Kafka' as const;\n\nexport const instrumentKafka = generateInstrumentOnce(INTEGRATION_NAME, () => new KafkaJsInstrumentation());\n\nconst _kafkaIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      instrumentKafka();\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [kafkajs](https://www.npmjs.com/package/kafkajs) library.\n *\n * For more information, see the [`kafkaIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/kafka/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *  integrations: [Sentry.kafkaIntegration()],\n * });\n */\nexport const kafkaIntegration = defineIntegration(_kafkaIntegration);\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-lru-memoizer\n * - Upstream version: @opentelemetry/instrumentation-lru-memoizer@0.62.0\n */\n\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition } from '@opentelemetry/instrumentation';\nimport { getCurrentScope, SDK_VERSION, withScope } from '@sentry/core';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-lru-memoizer';\n\ntype Memoizer = (this: unknown, ...args: unknown[]) => unknown;\ntype LruMemoizerModule = ((this: unknown, ...args: unknown[]) => Memoizer) & { sync: unknown };\n\nexport class LruMemoizerInstrumentation extends InstrumentationBase {\n  constructor() {\n    super(PACKAGE_NAME, SDK_VERSION, {});\n  }\n\n  init(): InstrumentationNodeModuleDefinition[] {\n    return [\n      new InstrumentationNodeModuleDefinition(\n        'lru-memoizer',\n        ['>=1.3 <4'],\n        (moduleExports: LruMemoizerModule) => {\n          // moduleExports is a function which receives an options object,\n          // and returns a \"memoizer\" function upon invocation.\n          // We want to patch this \"memoizer's\" internal function\n          const asyncMemoizer = function (this: unknown, ...args: unknown[]): unknown {\n            // This following function is invoked every time the user wants to get a (possible) memoized value\n            // We replace it with another function in which we bind the current context to the last argument (callback)\n            const origMemoizer = moduleExports.apply(this, args) as Memoizer;\n            return function (this: unknown, ...memoizerArgs: unknown[]): unknown {\n              // last argument is the callback\n              const origCallback = memoizerArgs.pop();\n              const scope = getCurrentScope();\n              const callbackWithContext =\n                typeof origCallback === 'function'\n                  ? function (this: unknown, ...callbackArgs: unknown[]): unknown {\n                      return withScope(scope, () => (origCallback as Memoizer).apply(this, callbackArgs));\n                    }\n                  : origCallback;\n              return origMemoizer.apply(this, [...memoizerArgs, callbackWithContext]);\n            };\n          };\n\n          // sync function preserves context, but we still need to export it\n          // as the lru-memoizer package does\n          return Object.assign(asyncMemoizer, { sync: moduleExports.sync });\n        },\n        undefined, // no need to disable as this instrumentation does not create any spans\n      ),\n    ];\n  }\n}\n", "import { LruMemoizerInstrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\n\nconst INTEGRATION_NAME = 'LruMemoizer' as const;\n\nexport const instrumentLruMemoizer = generateInstrumentOnce(INTEGRATION_NAME, () => new LruMemoizerInstrumentation());\n\nconst _lruMemoizerIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      instrumentLruMemoizer();\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [lru-memoizer](https://www.npmjs.com/package/lru-memoizer) library.\n *\n * For more information, see the [`lruMemoizerIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/lrumemoizer/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *  integrations: [Sentry.lruMemoizerIntegration()],\n * });\n */\nexport const lruMemoizerIntegration = defineIntegration(_lruMemoizerIntegration);\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mongodb\n * - Upstream version: @opentelemetry/instrumentation-mongodb@0.71.0\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n * - The db/net attribute extraction, `db.statement` scrubbing and span\n *   builder are shared with the orchestrion mongodb integration in\n *   `@sentry/server-utils` so the two emit an identical span shape.\n *   Only the OTel-specific callback/context helpers below remain here.\n */\n\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport { getActiveSpan, SPAN_STATUS_ERROR, withActiveSpan } from '@sentry/core';\nimport {\n  getV3CommandOperation,\n  getV3SpanAttributes as sharedGetV3SpanAttributes,\n  getV4SpanAttributes as sharedGetV4SpanAttributes,\n  startMongoSpan,\n} from '@sentry/server-utils';\n\nconst ORIGIN = 'auto.db.otel.mongo';\n\nexport { getV3CommandOperation, startMongoSpan };\n\n/** Determine a span's attributes from the v4 connection context (OTel origin). */\nexport function getV4SpanAttributes(connectionCtx: any, ns: any, command?: any, operation?: string): SpanAttributes {\n  return sharedGetV4SpanAttributes(connectionCtx, ns, command, operation, ORIGIN);\n}\n\n/** Determine a span's attributes from the v3 topology (OTel origin). */\nexport function getV3SpanAttributes(ns: string, topology: any, command?: any, operation?: string): SpanAttributes {\n  return sharedGetV3SpanAttributes(ns, topology, command, operation, ORIGIN);\n}\n\n/**\n * Wraps the result handler so it ends the span (with error status on failure) and runs the\n * original callback re-activated under the parent span — mongodb loses the async context when\n * it invokes the callback on a later tick.\n */\nexport function patchEnd(span: Span | undefined, resultHandler: Function): Function {\n  const parentSpan = getActiveSpan();\n  let spanEnded = false;\n\n  return function patchedEnd(this: {}, ...args: unknown[]) {\n    if (!spanEnded) {\n      spanEnded = true;\n      const error = args[0];\n      if (span) {\n        if (error instanceof Error) {\n          span.setStatus({ code: SPAN_STATUS_ERROR, message: error.message });\n        }\n        span.end();\n      }\n    }\n\n    return withActiveSpan(parentSpan ?? null, () => resultHandler.apply(this, args));\n  };\n}\n\n// The instrumentation only creates spans when there is an active parent span, to avoid emitting\n// orphaned mongodb spans.\nexport function shouldSkipInstrumentation(): boolean {\n  return !getActiveSpan();\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mongodb\n * - Upstream version: @opentelemetry/instrumentation-mongodb@0.71.0\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\nimport { getActiveSpan, withActiveSpan } from '@sentry/core';\nimport type {\n  CursorState,\n  MongodbNamespace,\n  MongoInternalCommand,\n  MongoInternalTopology,\n  V4Connection,\n  V4ConnectionPool,\n  WireProtocolInternal,\n} from './internal-types';\nimport {\n  getV3CommandOperation,\n  getV3SpanAttributes,\n  getV4SpanAttributes,\n  patchEnd,\n  shouldSkipInstrumentation,\n  startMongoSpan,\n} from './utils';\n\n/** Creates spans for v3 common operations (insert/update/remove). */\nexport function getV3PatchOperation(operationName: 'insert' | 'update' | 'remove') {\n  return (original: WireProtocolInternal[typeof operationName]) => {\n    return function patchedServerCommand(\n      this: unknown,\n      server: MongoInternalTopology,\n      ns: string,\n      ops: unknown[],\n      options: unknown | Function,\n      callback?: Function,\n    ) {\n      const resultHandler = typeof options === 'function' ? options : callback;\n      if (shouldSkipInstrumentation() || typeof resultHandler !== 'function' || typeof ops !== 'object') {\n        if (typeof options === 'function') {\n          return original.call(this, server, ns, ops, options);\n        } else {\n          return original.call(this, server, ns, ops, options, callback);\n        }\n      }\n\n      const span = startMongoSpan(getV3SpanAttributes(ns, server, ops[0] as any, operationName));\n\n      const patchedCallback = patchEnd(span, resultHandler);\n      // handle when options is the callback to send the correct number of args\n      if (typeof options === 'function') {\n        return original.call(this, server, ns, ops, patchedCallback);\n      } else {\n        return original.call(this, server, ns, ops, options, patchedCallback);\n      }\n    };\n  };\n}\n\n/** Creates spans for the v3 command operation. */\nexport function getV3PatchCommand() {\n  return (original: WireProtocolInternal['command']) => {\n    return function patchedServerCommand(\n      this: unknown,\n      server: MongoInternalTopology,\n      ns: string,\n      cmd: MongoInternalCommand,\n      options: unknown | Function,\n      callback?: Function,\n    ) {\n      const resultHandler = typeof options === 'function' ? options : callback;\n\n      if (shouldSkipInstrumentation() || typeof resultHandler !== 'function' || typeof cmd !== 'object') {\n        if (typeof options === 'function') {\n          return original.call(this, server, ns, cmd, options);\n        } else {\n          return original.call(this, server, ns, cmd, options, callback);\n        }\n      }\n\n      const operationName = getV3CommandOperation(cmd as unknown as Record<string, unknown>);\n      const span = startMongoSpan(getV3SpanAttributes(ns, server, cmd, operationName));\n\n      const patchedCallback = patchEnd(span, resultHandler);\n      // handle when options is the callback to send the correct number of args\n      if (typeof options === 'function') {\n        return original.call(this, server, ns, cmd, patchedCallback);\n      } else {\n        return original.call(this, server, ns, cmd, options, patchedCallback);\n      }\n    };\n  };\n}\n\n/** Creates spans for the v4 (<6.4) callback-style command operation. */\nexport function getV4PatchCommandCallback() {\n  return (original: V4Connection['commandCallback']) => {\n    return function patchedV4ServerCommand(\n      this: any,\n      ns: MongodbNamespace,\n      cmd: any,\n      options: undefined | unknown,\n      callback: any,\n    ) {\n      const resultHandler = callback;\n      const commandType = Object.keys(cmd)[0];\n\n      if (typeof cmd !== 'object' || cmd.ismaster || cmd.hello) {\n        return original.call(this, ns, cmd, options, callback);\n      }\n\n      let span = undefined;\n      if (!shouldSkipInstrumentation()) {\n        span = startMongoSpan(getV4SpanAttributes(this, ns, cmd, commandType));\n      }\n      const patchedCallback = patchEnd(span, resultHandler);\n\n      return original.call(this, ns, cmd, options, patchedCallback);\n    };\n  };\n}\n\n/** Creates spans for the v4 (>=6.4) promise-style command operation. */\nexport function getV4PatchCommandPromise() {\n  return (original: V4Connection['commandPromise']) => {\n    return function patchedV4ServerCommand(this: any, ...args: Parameters<V4Connection['commandPromise']>) {\n      const [ns, cmd] = args;\n      const commandType = Object.keys(cmd)[0];\n      const resultHandler = () => undefined;\n\n      if (typeof cmd !== 'object' || cmd.ismaster || cmd.hello) {\n        return original.apply(this, args);\n      }\n\n      let span = undefined;\n      if (!shouldSkipInstrumentation()) {\n        span = startMongoSpan(getV4SpanAttributes(this, ns, cmd, commandType));\n      }\n\n      const patchedCallback = patchEnd(span, resultHandler);\n\n      const result = original.apply(this, args);\n      result.then(\n        (res: any) => patchedCallback(null, res),\n        (err: any) => patchedCallback(err),\n      );\n\n      return result;\n    };\n  };\n}\n\n/** Creates spans for the v3 find operation. */\nexport function getV3PatchFind() {\n  return (original: WireProtocolInternal['query']) => {\n    return function patchedServerCommand(\n      this: unknown,\n      server: MongoInternalTopology,\n      ns: string,\n      cmd: MongoInternalCommand,\n      cursorState: CursorState,\n      options: unknown | Function,\n      callback?: Function,\n    ) {\n      const resultHandler = typeof options === 'function' ? options : callback;\n\n      if (shouldSkipInstrumentation() || typeof resultHandler !== 'function' || typeof cmd !== 'object') {\n        if (typeof options === 'function') {\n          return original.call(this, server, ns, cmd, cursorState, options);\n        } else {\n          return original.call(this, server, ns, cmd, cursorState, options, callback);\n        }\n      }\n\n      const span = startMongoSpan(getV3SpanAttributes(ns, server, cmd, 'find'));\n\n      const patchedCallback = patchEnd(span, resultHandler);\n      // handle when options is the callback to send the correct number of args\n      if (typeof options === 'function') {\n        return original.call(this, server, ns, cmd, cursorState, patchedCallback);\n      } else {\n        return original.call(this, server, ns, cmd, cursorState, options, patchedCallback);\n      }\n    };\n  };\n}\n\n/** Creates spans for the v3 getMore (cursor) operation. */\nexport function getV3PatchCursor() {\n  return (original: WireProtocolInternal['getMore']) => {\n    return function patchedServerCommand(\n      this: unknown,\n      server: MongoInternalTopology,\n      ns: string,\n      cursorState: CursorState,\n      batchSize: number,\n      options: unknown | Function,\n      callback?: Function,\n    ) {\n      const resultHandler = typeof options === 'function' ? options : callback;\n\n      if (shouldSkipInstrumentation() || typeof resultHandler !== 'function') {\n        if (typeof options === 'function') {\n          return original.call(this, server, ns, cursorState, batchSize, options);\n        } else {\n          return original.call(this, server, ns, cursorState, batchSize, options, callback);\n        }\n      }\n\n      const span = startMongoSpan(getV3SpanAttributes(ns, server, cursorState.cmd, 'getMore'));\n\n      const patchedCallback = patchEnd(span, resultHandler);\n      // handle when options is the callback to send the correct number of args\n      if (typeof options === 'function') {\n        return original.call(this, server, ns, cursorState, batchSize, patchedCallback);\n      } else {\n        return original.call(this, server, ns, cursorState, batchSize, options, patchedCallback);\n      }\n    };\n  };\n}\n\n// This patch will become unnecessary once https://jira.mongodb.org/browse/NODE-5639 is done.\nexport function getV4ConnectionPoolCheckOut() {\n  return (original: V4ConnectionPool['checkOut']) => {\n    return function patchedCheckout(this: unknown, callback: (error: any, connection: any) => void) {\n      // The pool runs the callback in a detached context, so re-activate the span that was\n      // active when `checkOut` was called — otherwise the pooled operation finds no parent.\n      const parentSpan = getActiveSpan();\n      return original.call(this, function (this: unknown, ...args: [any, any]) {\n        return withActiveSpan(parentSpan ?? null, () => callback.apply(this, args));\n      });\n    };\n  };\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mongodb\n * - Upstream version: @opentelemetry/instrumentation-mongodb@0.71.0\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n * - Dropped the OTel connection-usage metrics (no Sentry MeterProvider consumes them) and the\n *   session/connect patches that existed only to feed them\n * - Dropped the env-gated stable-semconv dual emission; only the (default) old semantic\n *   conventions are emitted, matching the previous default span output\n */\n\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { SDK_VERSION } from '@sentry/core';\nimport { InstrumentationNodeModuleFile } from '../../InstrumentationNodeModuleFile';\nimport type { WireProtocolInternal } from './internal-types';\nimport * as patches from './patches';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-mongodb';\n\n/** mongodb instrumentation plugin */\nexport class MongoDBInstrumentation extends InstrumentationBase<InstrumentationConfig> {\n  public constructor(config: InstrumentationConfig = {}) {\n    super(PACKAGE_NAME, SDK_VERSION, config);\n  }\n\n  public init(): InstrumentationNodeModuleDefinition[] {\n    const { v3PatchConnection, v3UnpatchConnection } = this._getV3ConnectionPatches();\n\n    const { v4PatchConnectionCallback, v4PatchConnectionPromise, v4UnpatchConnection } = this._getV4ConnectionPatches();\n    const { v4PatchConnectionPool, v4UnpatchConnectionPool } = this._getV4ConnectionPoolPatches();\n\n    return [\n      new InstrumentationNodeModuleDefinition('mongodb', ['>=3.3.0 <4'], undefined, undefined, [\n        new InstrumentationNodeModuleFile(\n          'mongodb/lib/core/wireprotocol/index.js',\n          ['>=3.3.0 <4'],\n          v3PatchConnection,\n          v3UnpatchConnection,\n        ),\n      ]),\n      new InstrumentationNodeModuleDefinition('mongodb', ['>=4.0.0 <8'], undefined, undefined, [\n        new InstrumentationNodeModuleFile(\n          'mongodb/lib/cmap/connection.js',\n          ['>=4.0.0 <6.4'],\n          v4PatchConnectionCallback,\n          v4UnpatchConnection,\n        ),\n        new InstrumentationNodeModuleFile(\n          'mongodb/lib/cmap/connection.js',\n          ['>=6.4.0 <8'],\n          v4PatchConnectionPromise,\n          v4UnpatchConnection,\n        ),\n        new InstrumentationNodeModuleFile(\n          'mongodb/lib/cmap/connection_pool.js',\n          ['>=4.0.0 <6.4'],\n          v4PatchConnectionPool,\n          v4UnpatchConnectionPool,\n        ),\n      ]),\n    ];\n  }\n\n  private _getV3ConnectionPatches<T extends WireProtocolInternal>() {\n    return {\n      v3PatchConnection: (moduleExports: T) => {\n        // patch insert operation\n        if (isWrapped(moduleExports.insert)) {\n          this._unwrap(moduleExports, 'insert');\n        }\n        this._wrap(moduleExports, 'insert', patches.getV3PatchOperation('insert'));\n        // patch remove operation\n        if (isWrapped(moduleExports.remove)) {\n          this._unwrap(moduleExports, 'remove');\n        }\n        this._wrap(moduleExports, 'remove', patches.getV3PatchOperation('remove'));\n        // patch update operation\n        if (isWrapped(moduleExports.update)) {\n          this._unwrap(moduleExports, 'update');\n        }\n        this._wrap(moduleExports, 'update', patches.getV3PatchOperation('update'));\n        // patch other command\n        if (isWrapped(moduleExports.command)) {\n          this._unwrap(moduleExports, 'command');\n        }\n        this._wrap(moduleExports, 'command', patches.getV3PatchCommand());\n        // patch query\n        if (isWrapped(moduleExports.query)) {\n          this._unwrap(moduleExports, 'query');\n        }\n        this._wrap(moduleExports, 'query', patches.getV3PatchFind());\n        // patch get more operation on cursor\n        if (isWrapped(moduleExports.getMore)) {\n          this._unwrap(moduleExports, 'getMore');\n        }\n        this._wrap(moduleExports, 'getMore', patches.getV3PatchCursor());\n        return moduleExports;\n      },\n      v3UnpatchConnection: (moduleExports?: T) => {\n        if (moduleExports === undefined) return;\n        this._unwrap(moduleExports, 'insert');\n        this._unwrap(moduleExports, 'remove');\n        this._unwrap(moduleExports, 'update');\n        this._unwrap(moduleExports, 'command');\n        this._unwrap(moduleExports, 'query');\n        this._unwrap(moduleExports, 'getMore');\n      },\n    };\n  }\n\n  private _getV4ConnectionPoolPatches() {\n    return {\n      v4PatchConnectionPool: (moduleExports: any) => {\n        const poolPrototype = moduleExports.ConnectionPool.prototype;\n\n        if (isWrapped(poolPrototype.checkOut)) {\n          this._unwrap(poolPrototype, 'checkOut');\n        }\n\n        this._wrap(poolPrototype, 'checkOut', patches.getV4ConnectionPoolCheckOut());\n        return moduleExports;\n      },\n      v4UnpatchConnectionPool: (moduleExports?: any) => {\n        if (moduleExports === undefined) return;\n\n        this._unwrap(moduleExports.ConnectionPool.prototype, 'checkOut');\n      },\n    };\n  }\n\n  private _getV4ConnectionPatches() {\n    return {\n      v4PatchConnectionCallback: (moduleExports: any) => {\n        if (isWrapped(moduleExports.Connection.prototype.command)) {\n          this._unwrap(moduleExports.Connection.prototype, 'command');\n        }\n\n        this._wrap(moduleExports.Connection.prototype, 'command', patches.getV4PatchCommandCallback());\n        return moduleExports;\n      },\n      v4PatchConnectionPromise: (moduleExports: any) => {\n        if (isWrapped(moduleExports.Connection.prototype.command)) {\n          this._unwrap(moduleExports.Connection.prototype, 'command');\n        }\n\n        this._wrap(moduleExports.Connection.prototype, 'command', patches.getV4PatchCommandPromise());\n        return moduleExports;\n      },\n      v4UnpatchConnection: (moduleExports?: any) => {\n        if (moduleExports === undefined) return;\n        this._unwrap(moduleExports.Connection.prototype, 'command');\n      },\n    };\n  }\n}\n", "import { MongoDBInstrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\n\nconst INTEGRATION_NAME = 'Mongo' as const;\n\nexport const instrumentMongo = generateInstrumentOnce(INTEGRATION_NAME, () => new MongoDBInstrumentation());\n\nconst _mongoIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      instrumentMongo();\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [mongodb](https://www.npmjs.com/package/mongodb) library.\n *\n * For more information, see the [`mongoIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/mongo/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *  integrations: [Sentry.mongoIntegration()],\n * });\n * ```\n */\nexport const mongoIntegration = defineIntegration(_mongoIntegration);\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mongoose\n * - Upstream version: @opentelemetry/instrumentation-mongoose@0.64.0\n * - Types vendored from mongoose as simplified interfaces\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\nimport type { Span } from '@sentry/core';\nimport { SPAN_STATUS_ERROR } from '@sentry/core';\nimport type { MongooseError } from './mongoose-types';\n\nfunction setErrorStatus(span: Span, error: MongooseError): void {\n  span.setStatus({\n    code: SPAN_STATUS_ERROR,\n    message: `${error.message} ${error.code ? `\\nMongoose Error Code: ${error.code}` : ''}`,\n  });\n}\n\nexport function handlePromiseResponse(execResponse: any, span: Span): any {\n  if (!(execResponse instanceof Promise)) {\n    span.end();\n    return execResponse;\n  }\n\n  return execResponse\n    .catch((err: any) => {\n      setErrorStatus(span, err);\n      throw err;\n    })\n    .finally(() => span.end());\n}\n\nexport function handleCallbackResponse(\n  callback: Function,\n  exec: Function,\n  originalThis: any,\n  span: Span,\n  args: IArguments,\n) {\n  let callbackArgumentIndex = 0;\n  if (args.length === 2) {\n    callbackArgumentIndex = 1;\n  } else if (args.length === 3) {\n    callbackArgumentIndex = 2;\n  }\n\n  args[callbackArgumentIndex] = (err: Error, response: any): any => {\n    if (err) {\n      setErrorStatus(span, err);\n    }\n\n    span.end();\n    return callback(err, response);\n  };\n\n  return exec.apply(originalThis, args);\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mongoose\n * - Upstream version: @opentelemetry/instrumentation-mongoose@0.64.0\n * - Types vendored from mongoose as simplified interfaces\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\nimport {\n  type InstrumentationConfig,\n  InstrumentationBase,\n  type InstrumentationModuleDefinition,\n  InstrumentationNodeModuleDefinition,\n} from '@opentelemetry/instrumentation';\nimport type { Span } from '@sentry/core';\nimport { getActiveSpan, SDK_VERSION, withActiveSpan } from '@sentry/core';\nimport { startMongooseLegacySpan } from '@sentry/server-utils';\nimport type * as mongoose from './mongoose-types';\nimport { handleCallbackResponse, handlePromiseResponse } from './utils';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-mongoose';\nconst ORIGIN = 'auto.db.otel.mongoose';\n\ntype MongooseModuleExports = typeof mongoose;\n\n// The raw imported `mongoose` module: either the CJS object itself, or an ESM\n// namespace wrapper exposing the same shape under `.default`.\ntype MongooseModule = MongooseModuleExports & {\n  default?: MongooseModuleExports;\n  [Symbol.toStringTag]?: string;\n};\n\nconst contextCaptureFunctionsCommon = [\n  'deleteOne',\n  'deleteMany',\n  'find',\n  'findOne',\n  'estimatedDocumentCount',\n  'countDocuments',\n  'distinct',\n  'where',\n  '$where',\n  'findOneAndUpdate',\n  'findOneAndDelete',\n  'findOneAndReplace',\n];\n\nconst contextCaptureFunctions6 = ['remove', 'count', 'findOneAndRemove', ...contextCaptureFunctionsCommon];\nconst contextCaptureFunctions7 = ['count', 'findOneAndRemove', ...contextCaptureFunctionsCommon];\nconst contextCaptureFunctions8 = [...contextCaptureFunctionsCommon];\n\nfunction getContextCaptureFunctions(moduleVersion: string | undefined): string[] {\n  /* istanbul ignore next */\n  if (!moduleVersion) {\n    return contextCaptureFunctionsCommon;\n  } else if (moduleVersion.startsWith('6.') || moduleVersion.startsWith('5.')) {\n    return contextCaptureFunctions6;\n  } else if (moduleVersion.startsWith('7.')) {\n    return contextCaptureFunctions7;\n  } else {\n    return contextCaptureFunctions8;\n  }\n}\n\nfunction instrumentRemove(moduleVersion: string | undefined): boolean {\n  return (moduleVersion && (moduleVersion.startsWith('5.') || moduleVersion.startsWith('6.'))) || false;\n}\n\n/**\n * 8.21.0 changed Document.updateOne/deleteOne so that the Query is not fully built when Query.exec() is called.\n * @param moduleVersion\n */\nfunction needsDocumentMethodPatch(moduleVersion: string | undefined): boolean {\n  if (!moduleVersion || !moduleVersion.startsWith('8.')) {\n    return false;\n  }\n\n  const minor = parseInt(moduleVersion.split('.')[1]!, 10);\n  return minor >= 21;\n}\n\n// when mongoose functions are called, we store the original call context\n// and then set it as the parent for the spans created by Query/Aggregate exec()\n// calls. this bypass the unlinked spans issue on thenables await operations.\nexport const _STORED_PARENT_SPAN: unique symbol = Symbol('stored-parent-span');\n\n// Prevents double-instrumentation when doc.updateOne/deleteOne (Mongoose 8.21.0+)\n// creates a span and returns a Query that also calls exec()\nexport const _ALREADY_INSTRUMENTED: unique symbol = Symbol('already-instrumented');\n\nexport class MongooseInstrumentation extends InstrumentationBase<InstrumentationConfig> {\n  constructor(config: InstrumentationConfig = {}) {\n    super(PACKAGE_NAME, SDK_VERSION, config);\n  }\n\n  protected init(): InstrumentationModuleDefinition {\n    const module = new InstrumentationNodeModuleDefinition(\n      'mongoose',\n      // mongoose >= 9.7.0 publishes via diagnostics_channel and is instrumented by\n      // `subscribeMongooseDiagnosticChannels` instead, so this IITM patcher must not\n      // overlap it — otherwise every operation would emit two mongoose spans.\n      ['>=5.9.7 <9.7.0'],\n      this.patch.bind(this),\n      this.unpatch.bind(this),\n    );\n    return module;\n  }\n\n  private patch(module: MongooseModule, moduleVersion: string | undefined) {\n    const moduleExports: MongooseModuleExports =\n      module[Symbol.toStringTag] === 'Module' && module.default ? module.default : module;\n\n    this._wrap(moduleExports.Model.prototype, 'save', this.patchOnModelMethods('save'));\n    // mongoose applies this code on module require:\n    // Model.prototype.$save = Model.prototype.save;\n    // which captures the save function before it is patched.\n    // so we need to apply the same logic after instrumenting the save function.\n    moduleExports.Model.prototype.$save = moduleExports.Model.prototype.save;\n\n    if (instrumentRemove(moduleVersion)) {\n      this._wrap(moduleExports.Model.prototype, 'remove', this.patchOnModelMethods('remove'));\n    }\n\n    // Mongoose 8.21.0+ changed Document.updateOne()/deleteOne() so that the Query is not fully built when Query.exec() is called.\n    if (needsDocumentMethodPatch(moduleVersion)) {\n      this._wrap(moduleExports.Model.prototype, 'updateOne', this._patchDocumentUpdateMethods('updateOne'));\n      this._wrap(moduleExports.Model.prototype, 'deleteOne', this._patchDocumentUpdateMethods('deleteOne'));\n    }\n\n    this._wrap(moduleExports.Query.prototype, 'exec', this.patchQueryExec());\n    this._wrap(moduleExports.Aggregate.prototype, 'exec', this.patchAggregateExec());\n\n    const contextCaptureFunctions = getContextCaptureFunctions(moduleVersion);\n\n    contextCaptureFunctions.forEach((funcName: string) => {\n      this._wrap(moduleExports.Query.prototype, funcName as any, this.patchAndCaptureSpanContext(funcName));\n    });\n    this._wrap(moduleExports.Model, 'aggregate', this.patchModelAggregate());\n\n    this._wrap(moduleExports.Model, 'insertMany', this.patchModelStatic('insertMany'));\n    this._wrap(moduleExports.Model, 'bulkWrite', this.patchModelStatic('bulkWrite'));\n\n    return moduleExports;\n  }\n\n  private unpatch(module: MongooseModule, moduleVersion: string | undefined): void {\n    const moduleExports: MongooseModuleExports =\n      module[Symbol.toStringTag] === 'Module' && module.default ? module.default : module;\n\n    const contextCaptureFunctions = getContextCaptureFunctions(moduleVersion);\n\n    this._unwrap(moduleExports.Model.prototype, 'save');\n    // revert the patch for $save which we applied by aliasing it to patched `save`\n    moduleExports.Model.prototype.$save = moduleExports.Model.prototype.save;\n\n    if (instrumentRemove(moduleVersion)) {\n      this._unwrap(moduleExports.Model.prototype, 'remove');\n    }\n\n    if (needsDocumentMethodPatch(moduleVersion)) {\n      this._unwrap(moduleExports.Model.prototype, 'updateOne');\n      this._unwrap(moduleExports.Model.prototype, 'deleteOne');\n    }\n\n    this._unwrap(moduleExports.Query.prototype, 'exec');\n    this._unwrap(moduleExports.Aggregate.prototype, 'exec');\n\n    contextCaptureFunctions.forEach((funcName: string) => {\n      this._unwrap(moduleExports.Query.prototype, funcName as any);\n    });\n    this._unwrap(moduleExports.Model, 'aggregate');\n\n    this._unwrap(moduleExports.Model, 'insertMany');\n    this._unwrap(moduleExports.Model, 'bulkWrite');\n  }\n\n  private patchAggregateExec() {\n    const self = this;\n    return (originalAggregate: Function) => {\n      return function exec(this: any, callback?: Function) {\n        const parentSpan = this[_STORED_PARENT_SPAN];\n        const span = startMongooseLegacySpan({\n          collection: this._model.collection,\n          modelName: this._model?.modelName,\n          operation: 'aggregate',\n          origin: ORIGIN,\n          parentSpan,\n        });\n\n        return self._handleResponse(span, originalAggregate, this, arguments, callback);\n      };\n    };\n  }\n\n  private patchQueryExec() {\n    const self = this;\n    return (originalExec: Function) => {\n      return function exec(this: any, callback?: Function) {\n        // Skip if already instrumented by document instance method patch\n        if (this[_ALREADY_INSTRUMENTED]) {\n          return originalExec.apply(this, arguments);\n        }\n\n        const parentSpan = this[_STORED_PARENT_SPAN];\n        const span = startMongooseLegacySpan({\n          collection: this.mongooseCollection,\n          modelName: this.model.modelName,\n          operation: this.op,\n          origin: ORIGIN,\n          parentSpan,\n        });\n\n        return self._handleResponse(span, originalExec, this, arguments, callback);\n      };\n    };\n  }\n\n  private patchOnModelMethods(op: string) {\n    const self = this;\n    return (originalOnModelFunction: Function) => {\n      return function method(this: any, options?: any, callback?: Function) {\n        const span = startMongooseLegacySpan({\n          collection: this.constructor.collection,\n          modelName: this.constructor.modelName,\n          operation: op,\n          origin: ORIGIN,\n        });\n\n        if (options instanceof Function) {\n          // oxlint-disable-next-line no-param-reassign\n          callback = options;\n        }\n\n        return self._handleResponse(span, originalOnModelFunction, this, arguments, callback);\n      };\n    };\n  }\n\n  // Patch document instance methods (doc.updateOne/deleteOne) for Mongoose 8.21.0+.\n  private _patchDocumentUpdateMethods(op: string) {\n    const self = this;\n    return (originalMethod: Function) => {\n      return function method(this: any, update?: any, options?: any, callback?: Function) {\n        // determine actual callback since different argument patterns are allowed\n        let actualCallback: Function | undefined = callback;\n        if (typeof update === 'function') {\n          actualCallback = update;\n        } else if (typeof options === 'function') {\n          actualCallback = options;\n        }\n\n        const span = startMongooseLegacySpan({\n          collection: this.constructor.collection,\n          modelName: this.constructor.modelName,\n          operation: op,\n          origin: ORIGIN,\n        });\n\n        const result = self._handleResponse(span, originalMethod, this, arguments, actualCallback);\n\n        // Mark returned Query to prevent double-instrumentation when exec() is eventually called\n        if (result && typeof result === 'object') {\n          result[_ALREADY_INSTRUMENTED] = true;\n        }\n\n        return result;\n      };\n    };\n  }\n\n  private patchModelStatic(op: string) {\n    const self = this;\n    return (original: Function) => {\n      return function patchedStatic(this: any, docsOrOps: any, options?: any, callback?: Function) {\n        if (typeof options === 'function') {\n          // oxlint-disable-next-line no-param-reassign\n          callback = options;\n        }\n\n        const span = startMongooseLegacySpan({\n          collection: this.collection,\n          modelName: this.modelName,\n          operation: op,\n          origin: ORIGIN,\n        });\n\n        return self._handleResponse(span, original, this, arguments, callback);\n      };\n    };\n  }\n\n  // we want to capture the otel span on the object which is calling exec.\n  // in the special case of aggregate, we need have no function to path\n  // on the Aggregate object to capture the context on, so we patch\n  // the aggregate of Model, and set the context on the Aggregate object\n  private patchModelAggregate() {\n    return (original: Function) => {\n      return function captureSpanContext(this: any) {\n        const currentSpan = getActiveSpan();\n        const aggregate = original.apply(this, arguments);\n        if (aggregate) aggregate[_STORED_PARENT_SPAN] = currentSpan;\n        return aggregate;\n      };\n    };\n  }\n\n  private patchAndCaptureSpanContext(_funcName: string) {\n    return (original: Function) => {\n      return function captureSpanContext(this: any) {\n        this[_STORED_PARENT_SPAN] = getActiveSpan();\n        return original.apply(this, arguments);\n      };\n    };\n  }\n\n  private _handleResponse(span: Span, exec: Function, originalThis: any, args: IArguments, callback?: Function) {\n    // Activate the span while the underlying operation runs so that nested instrumentation\n    // (e.g. the mongodb driver spans) is parented to this span. `withActiveSpan` returns the\n    // callback's result untouched, so lazy mongoose Query thenables are handed back unexecuted.\n    return withActiveSpan(span, () => {\n      if (callback instanceof Function) {\n        return handleCallbackResponse(callback, exec, originalThis, span, args);\n      } else {\n        const response = exec.apply(originalThis, args);\n        return handlePromiseResponse(response, span);\n      }\n    });\n  }\n}\n", "import { MongooseInstrumentation } from './vendored/mongoose';\nimport type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration, extendIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { mongooseIntegration as mongooseChannelIntegration } from '@sentry/server-utils';\n\nconst INTEGRATION_NAME = 'Mongoose' as const;\n\nexport const instrumentMongoose = generateInstrumentOnce(INTEGRATION_NAME, () => new MongooseInstrumentation());\n\nconst _mongooseIntegration = (() => {\n  // The diagnostics_channel subscription (mongoose >= 9.7) lives in server-utils so it is shared\n  // across server runtimes; we extend it here to also run the IITM-based patcher for mongoose < 9.7.\n  return extendIntegration(mongooseChannelIntegration(), {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      instrumentMongoose();\n    },\n  });\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [mongoose](https://www.npmjs.com/package/mongoose) library.\n *\n * For more information, see the [`mongooseIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/mongoose/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *  integrations: [Sentry.mongooseIntegration()],\n * });\n * ```\n */\nexport const mongooseIntegration = defineIntegration(_mongooseIntegration);\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mysql\n * - Upstream version: @opentelemetry/instrumentation-mysql@0.64.0\n */\n\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by this package.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n\n/**\n * Deprecated, use `server.address`, `server.port` attributes instead.\n *\n * @example \"Server=(localdb)\\\\v11.0;Integrated Security=true;\"\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `server.address` and `server.port`.\n */\nexport const ATTR_DB_CONNECTION_STRING = 'db.connection_string' as const;\n\n/**\n * Enum value \"mysql\" for attribute `db.system`.\n *\n * MySQL\n *\n * @experimental This enum value is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const DB_SYSTEM_VALUE_MYSQL = 'mysql' as const;\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mysql\n * - Upstream version: @opentelemetry/instrumentation-mysql@0.64.0\n * - Types from the `mysql` package inlined as simplified interfaces\n */\n\nimport type { ConnectionConfig, PoolConfig, Query, QueryOptions } from './mysql-types';\n\nexport function getConfig(config: ConnectionConfig | PoolConfig | undefined) {\n  const resolved = (config as PoolConfig | undefined)?.connectionConfig || config || {};\n  const { host, port, database, user } = resolved;\n  return { host, port, database, user };\n}\n\nexport function getJDBCString(host: string | undefined, port: number | undefined, database: string | undefined) {\n  let jdbcString = `jdbc:mysql://${host || 'localhost'}`;\n\n  if (typeof port === 'number') {\n    jdbcString += `:${port}`;\n  }\n\n  if (typeof database === 'string') {\n    jdbcString += `/${database}`;\n  }\n\n  return jdbcString;\n}\n\n/**\n * @returns the database query being executed.\n */\nexport function getDbQueryText(query: string | Query | QueryOptions): string {\n  if (typeof query === 'string') {\n    return query;\n  } else {\n    return query.sql;\n  }\n}\n\n/**\n * The span name SHOULD be set to a low cardinality value\n * representing the statement executed on the database.\n *\n * TODO: revisit span name based on https://github.com/open-telemetry/semantic-conventions/blob/v1.33.0/docs/database/database-spans.md#name\n *\n * @returns SQL statement without variable arguments or SQL verb\n */\nexport function getSpanName(query: string | Query | QueryOptions): string {\n  const rawQuery = typeof query === 'object' ? query.sql : query;\n  // Extract the SQL verb\n  const firstSpace = rawQuery?.indexOf(' ');\n  if (typeof firstSpace === 'number' && firstSpace !== -1) {\n    return rawQuery?.substring(0, firstSpace);\n  }\n  return rawQuery;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mysql\n * - Upstream version: @opentelemetry/instrumentation-mysql@0.64.0\n * - Types from the `mysql` package inlined as simplified interfaces\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs, and the connection-pool\n *   metrics / `enhancedDatabaseReporting` option were removed (unused by the Sentry SDK)\n */\n\nimport type { Span } from '@opentelemetry/api';\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport type { Scope, SpanAttributes } from '@sentry/core';\nimport {\n  bindScopeToEmitter,\n  getCurrentScope,\n  SDK_VERSION,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SPAN_KIND,\n  SPAN_STATUS_ERROR,\n  startInactiveSpan,\n  withActiveSpan,\n  withScope,\n} from '@sentry/core';\nimport {\n  DB_NAME,\n  DB_STATEMENT,\n  DB_SYSTEM,\n  DB_USER,\n  NET_PEER_NAME,\n  NET_PEER_PORT,\n} from '@sentry/conventions/attributes';\nimport type * as mysqlTypes from './mysql-types';\nimport { ATTR_DB_CONNECTION_STRING, DB_SYSTEM_VALUE_MYSQL } from './semconv';\nimport { getConfig, getDbQueryText, getJDBCString, getSpanName } from './utils';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-mysql';\nconst ORIGIN = 'auto.db.otel.mysql';\n\ntype getConnectionCallbackType = (err: mysqlTypes.MysqlError, connection: mysqlTypes.PoolConnection) => void;\n\nexport class MySQLInstrumentation extends InstrumentationBase<InstrumentationConfig> {\n  public constructor(config: InstrumentationConfig = {}) {\n    super(PACKAGE_NAME, SDK_VERSION, config);\n  }\n\n  protected init() {\n    return [\n      new InstrumentationNodeModuleDefinition(\n        'mysql',\n        ['>=2.0.0 <3'],\n        (moduleExports: typeof mysqlTypes) => {\n          if (isWrapped(moduleExports.createConnection)) {\n            this._unwrap(moduleExports, 'createConnection');\n          }\n          // oxlint-disable-next-line typescript/no-explicit-any\n          this._wrap(moduleExports, 'createConnection', this._patchCreateConnection() as any);\n\n          if (isWrapped(moduleExports.createPool)) {\n            this._unwrap(moduleExports, 'createPool');\n          }\n          // oxlint-disable-next-line typescript/no-explicit-any\n          this._wrap(moduleExports, 'createPool', this._patchCreatePool() as any);\n\n          if (isWrapped(moduleExports.createPoolCluster)) {\n            this._unwrap(moduleExports, 'createPoolCluster');\n          }\n          // oxlint-disable-next-line typescript/no-explicit-any\n          this._wrap(moduleExports, 'createPoolCluster', this._patchCreatePoolCluster() as any);\n\n          return moduleExports;\n        },\n        (moduleExports: typeof mysqlTypes) => {\n          if (moduleExports === undefined) return;\n          this._unwrap(moduleExports, 'createConnection');\n          this._unwrap(moduleExports, 'createPool');\n          this._unwrap(moduleExports, 'createPoolCluster');\n        },\n      ),\n    ];\n  }\n\n  // global export function\n  private _patchCreateConnection() {\n    return (originalCreateConnection: Function) => {\n      // oxlint-disable-next-line typescript/no-this-alias\n      const thisPlugin = this;\n\n      return function createConnection(_connectionUri: string | mysqlTypes.ConnectionConfig) {\n        const originalResult = originalCreateConnection(...arguments);\n\n        // This is unwrapped on next call after unpatch\n        // oxlint-disable-next-line typescript/no-explicit-any\n        thisPlugin._wrap(originalResult, 'query', thisPlugin._patchQuery(originalResult) as any);\n\n        return originalResult;\n      };\n    };\n  }\n\n  // global export function\n  private _patchCreatePool() {\n    return (originalCreatePool: Function) => {\n      // oxlint-disable-next-line typescript/no-this-alias\n      const thisPlugin = this;\n      return function createPool(_config: string | mysqlTypes.PoolConfig) {\n        const pool = originalCreatePool(...arguments);\n\n        thisPlugin._wrap(pool, 'query', thisPlugin._patchQuery(pool));\n        thisPlugin._wrap(pool, 'getConnection', thisPlugin._patchGetConnection(pool));\n\n        return pool;\n      };\n    };\n  }\n\n  // global export function\n  private _patchCreatePoolCluster() {\n    return (originalCreatePoolCluster: Function) => {\n      // oxlint-disable-next-line typescript/no-this-alias\n      const thisPlugin = this;\n      return function createPool(_config: string | mysqlTypes.PoolConfig) {\n        const cluster = originalCreatePoolCluster(...arguments);\n\n        // This is unwrapped on next call after unpatch\n        thisPlugin._wrap(cluster, 'getConnection', thisPlugin._patchGetConnection(cluster));\n\n        return cluster;\n      };\n    };\n  }\n\n  // method on cluster or pool\n  private _patchGetConnection(pool: mysqlTypes.Pool | mysqlTypes.PoolCluster) {\n    return (originalGetConnection: Function) => {\n      // oxlint-disable-next-line typescript/no-this-alias\n      const thisPlugin = this;\n\n      return function getConnection(arg1?: unknown, arg2?: unknown, arg3?: unknown) {\n        // Unwrap if unpatch has been called\n        if (!thisPlugin['_enabled']) {\n          thisPlugin._unwrap(pool, 'getConnection');\n          return originalGetConnection.apply(pool, arguments);\n        }\n\n        if (arguments.length === 1 && typeof arg1 === 'function') {\n          const patchFn = thisPlugin._getConnectionCallbackPatchFn(arg1 as getConnectionCallbackType);\n          return originalGetConnection.call(pool, patchFn);\n        }\n        if (arguments.length === 2 && typeof arg2 === 'function') {\n          const patchFn = thisPlugin._getConnectionCallbackPatchFn(arg2 as getConnectionCallbackType);\n          return originalGetConnection.call(pool, arg1, patchFn);\n        }\n        if (arguments.length === 3 && typeof arg3 === 'function') {\n          const patchFn = thisPlugin._getConnectionCallbackPatchFn(arg3 as getConnectionCallbackType);\n          return originalGetConnection.call(pool, arg1, arg2, patchFn);\n        }\n\n        return originalGetConnection.apply(pool, arguments);\n      };\n    };\n  }\n\n  private _getConnectionCallbackPatchFn(cb: getConnectionCallbackType) {\n    // oxlint-disable-next-line typescript/no-this-alias\n    const thisPlugin = this;\n    const scope = getCurrentScope();\n    return function (this: unknown, err: mysqlTypes.MysqlError, connection: mysqlTypes.PoolConnection) {\n      if (connection) {\n        // this is the callback passed into a query\n        // no need to unwrap\n        if (!isWrapped(connection.query)) {\n          // oxlint-disable-next-line typescript/no-explicit-any\n          thisPlugin._wrap(connection, 'query', thisPlugin._patchQuery(connection) as any);\n        }\n      }\n      if (typeof cb === 'function') {\n        withScope(scope, () => cb.call(this, err, connection));\n      }\n    };\n  }\n\n  private _patchQuery(connection: mysqlTypes.Connection | mysqlTypes.Pool) {\n    return (originalQuery: Function) => {\n      // oxlint-disable-next-line typescript/no-this-alias\n      const thisPlugin = this;\n\n      return function query(\n        query: string | mysqlTypes.Query | mysqlTypes.QueryOptions,\n        _valuesOrCallback?: unknown[] | mysqlTypes.queryCallback,\n        _callback?: mysqlTypes.queryCallback,\n      ) {\n        if (!thisPlugin['_enabled']) {\n          thisPlugin._unwrap(connection, 'query');\n          return originalQuery.apply(connection, arguments);\n        }\n\n        const { host, port, database, user } = getConfig(connection.config);\n        const portNumber = parseInt(String(port), 10);\n        /* eslint-disable @sentry/no-deprecated-attributes */\n        const attributes: SpanAttributes = {\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n          [DB_SYSTEM]: DB_SYSTEM_VALUE_MYSQL,\n          [ATTR_DB_CONNECTION_STRING]: getJDBCString(host, port, database),\n          [DB_NAME]: database,\n          [DB_USER]: user,\n          [DB_STATEMENT]: getDbQueryText(query),\n          [NET_PEER_NAME]: host,\n        };\n\n        if (!isNaN(portNumber)) {\n          attributes[NET_PEER_PORT] = portNumber;\n        }\n        /* eslint-enable @sentry/no-deprecated-attributes */\n\n        const span = startInactiveSpan({\n          name: getSpanName(query),\n          kind: SPAN_KIND.CLIENT,\n          attributes,\n        });\n\n        const cbIndex = Array.from(arguments).findIndex(arg => typeof arg === 'function');\n\n        const scope = getCurrentScope();\n        if (cbIndex === -1) {\n          const streamableQuery: mysqlTypes.Query = withActiveSpan(span, () => {\n            return originalQuery.apply(connection, arguments);\n          });\n          bindScopeToEmitter(streamableQuery, scope);\n\n          return streamableQuery\n            .on('error', (err: unknown) => {\n              span.setStatus({\n                code: SPAN_STATUS_ERROR,\n                message: (err as mysqlTypes.MysqlError).message,\n              });\n            })\n            .on('end', () => {\n              span.end();\n            });\n        } else {\n          thisPlugin._wrap(arguments, cbIndex, thisPlugin._patchCallbackQuery(span, scope));\n\n          return withActiveSpan(span, () => {\n            return originalQuery.apply(connection, arguments);\n          });\n        }\n      };\n    };\n  }\n\n  private _patchCallbackQuery(span: Span, scope: Scope) {\n    return (originalCallback: Function) => {\n      return function (err: mysqlTypes.MysqlError | null, _results?: unknown, _fields?: mysqlTypes.FieldInfo[]) {\n        if (err) {\n          span.setStatus({\n            code: SPAN_STATUS_ERROR,\n            message: err.message,\n          });\n        }\n        span.end();\n        return withScope(scope, () => originalCallback(...arguments));\n      };\n    };\n  }\n}\n", "import { MySQLInstrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\n\nconst INTEGRATION_NAME = 'Mysql' as const;\n\nexport const instrumentMysql = generateInstrumentOnce(INTEGRATION_NAME, () => new MySQLInstrumentation({}));\n\nconst _mysqlIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      instrumentMysql();\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [mysql](https://www.npmjs.com/package/mysql) library.\n *\n * For more information, see the [`mysqlIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/mysql/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *  integrations: [Sentry.mysqlIntegration()],\n * });\n * ```\n */\nexport const mysqlIntegration = defineIntegration(_mysqlIntegration);\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mysql2\n * - Upstream version: @opentelemetry/instrumentation-mysql2@0.64.0\n */\n\nexport const ATTR_DB_CONNECTION_STRING = 'db.connection_string' as const;\nexport const DB_SYSTEM_VALUE_MYSQL = 'mysql' as const;\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mysql2\n * - Upstream version: @opentelemetry/instrumentation-mysql2@0.64.0\n * - Types from 'mysql2' inlined as simplified interfaces\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\nimport { DB_NAME, DB_USER, NET_PEER_NAME, NET_PEER_PORT } from '@sentry/conventions/attributes';\nimport type { SpanAttributes } from '@sentry/core';\nimport type { FormatFunction } from './mysql2-types';\nimport { ATTR_DB_CONNECTION_STRING } from './semconv';\n\ninterface QueryOptions {\n  sql: string;\n  values?: any | any[] | { [param: string]: any };\n}\n\ninterface Query {\n  sql: string;\n}\n\ninterface Config {\n  host?: string;\n  port?: number;\n  database?: string;\n  user?: string;\n  connectionConfig?: Config;\n}\n\nexport function getConnectionAttributes(config: Config): SpanAttributes {\n  const { host, port, database, user } = getConfig(config);\n\n  const attrs: SpanAttributes = {\n    [ATTR_DB_CONNECTION_STRING]: getJDBCString(host, port, database),\n    // oxlint-disable-next-line typescript/no-deprecated\n    [DB_NAME]: database,\n    [DB_USER]: user,\n    // oxlint-disable-next-line typescript/no-deprecated\n    [NET_PEER_NAME]: host,\n  };\n\n  const portNumber = parseInt(port, 10);\n  if (!isNaN(portNumber)) {\n    // oxlint-disable-next-line typescript/no-deprecated\n    attrs[NET_PEER_PORT] = portNumber;\n  }\n\n  return attrs;\n}\n\nfunction getConfig(config: any) {\n  const { host, port, database, user } = config?.connectionConfig || config || {};\n  return { host, port, database, user };\n}\n\nfunction getJDBCString(host: string | undefined, port: number | undefined, database: string | undefined) {\n  let jdbcString = `jdbc:mysql://${host || 'localhost'}`;\n\n  if (typeof port === 'number') {\n    jdbcString += `:${port}`;\n  }\n\n  if (typeof database === 'string') {\n    jdbcString += `/${database}`;\n  }\n\n  return jdbcString;\n}\n\nexport function getQueryText(query: string | Query | QueryOptions, format?: FormatFunction, values?: any[]): string {\n  const [querySql, queryValues] =\n    typeof query === 'string' ? [query, values] : [query.sql, hasValues(query) ? values || query.values : values];\n  try {\n    if (format && queryValues) {\n      return format(querySql, queryValues);\n    } else {\n      return querySql;\n    }\n  } catch {\n    return 'Could not determine the query due to an error in formatting';\n  }\n}\n\nfunction hasValues(obj: Query | QueryOptions): obj is QueryOptions {\n  return 'values' in obj;\n}\n\nexport function getSpanName(query: string | Query | QueryOptions): string {\n  const rawQuery = typeof query === 'object' ? query.sql : query;\n  const firstSpace = rawQuery?.indexOf(' ');\n  if (typeof firstSpace === 'number' && firstSpace !== -1) {\n    return rawQuery?.substring(0, firstSpace);\n  }\n  return rawQuery;\n}\n\nexport const once = (fn: Function) => {\n  let called = false;\n  return (...args: unknown[]) => {\n    if (called) return;\n    called = true;\n    return fn(...args);\n  };\n};\n\nexport function getConnectionPrototypeToInstrument(connection: any) {\n  const connectionPrototype = connection.prototype;\n  const basePrototype = Object.getPrototypeOf(connectionPrototype);\n\n  if (typeof basePrototype?.query === 'function' && typeof basePrototype?.execute === 'function') {\n    return basePrototype;\n  }\n\n  return connectionPrototype;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mysql2\n * - Upstream version: @opentelemetry/instrumentation-mysql2@0.64.0\n * - Types from 'mysql2' inlined as simplified interfaces\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport { DB_STATEMENT, DB_SYSTEM } from '@sentry/conventions/attributes';\nimport type { SpanAttributes } from '@sentry/core';\nimport {\n  SDK_VERSION,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SPAN_KIND,\n  SPAN_STATUS_ERROR,\n  startInactiveSpan,\n} from '@sentry/core';\nimport { InstrumentationNodeModuleFile } from '../../InstrumentationNodeModuleFile';\nimport type { Connection, FormatFunction, Query, QueryError, QueryOptions } from './mysql2-types';\nimport { DB_SYSTEM_VALUE_MYSQL } from './semconv';\nimport { getConnectionAttributes, getConnectionPrototypeToInstrument, getQueryText, getSpanName, once } from './utils';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-mysql2';\nconst ORIGIN = 'auto.db.otel.mysql2';\n\n// mysql2 >= 3.20.0 publishes via diagnostics_channel and is instrumented by\n// `subscribeMysql2DiagnosticChannels` instead, so this IITM patcher must not\n// overlap it — otherwise every query would emit two mysql2 spans.\nconst supportedVersions = ['>=1.4.2 <3.20.0'];\n\n// The raw imported `mysql2` module exposes the `format` helper used to render\n// parameterized queries. Typed shallowly since it is only read internally.\ntype MySQL2Module = { format?: FormatFunction; [key: string]: unknown };\n\nexport class MySQL2Instrumentation extends InstrumentationBase<InstrumentationConfig> {\n  public constructor(config: InstrumentationConfig = {}) {\n    super(PACKAGE_NAME, SDK_VERSION, config);\n  }\n\n  protected init(): InstrumentationNodeModuleDefinition[] {\n    let format: FormatFunction | undefined;\n    function setFormatFunction(moduleExports: MySQL2Module): void {\n      if (!format && moduleExports.format) {\n        format = moduleExports.format;\n      }\n    }\n    const patch = (ConnectionPrototype: Connection): void => {\n      if (isWrapped(ConnectionPrototype.query)) {\n        this._unwrap(ConnectionPrototype, 'query');\n      }\n      this._wrap(ConnectionPrototype, 'query', this._patchQuery(format) as any);\n      if (isWrapped(ConnectionPrototype.execute)) {\n        this._unwrap(ConnectionPrototype, 'execute');\n      }\n      this._wrap(ConnectionPrototype, 'execute', this._patchQuery(format) as any);\n    };\n    const unpatch = (ConnectionPrototype: Connection): void => {\n      this._unwrap(ConnectionPrototype, 'query');\n      this._unwrap(ConnectionPrototype, 'execute');\n    };\n    return [\n      new InstrumentationNodeModuleDefinition(\n        'mysql2',\n        supportedVersions,\n        (moduleExports: MySQL2Module) => {\n          setFormatFunction(moduleExports);\n          return moduleExports;\n        },\n        () => {},\n        [\n          new InstrumentationNodeModuleFile(\n            'mysql2/promise.js',\n            supportedVersions,\n            (moduleExports: MySQL2Module) => {\n              setFormatFunction(moduleExports);\n              return moduleExports;\n            },\n            () => {},\n          ),\n          new InstrumentationNodeModuleFile(\n            'mysql2/lib/connection.js',\n            supportedVersions,\n            (moduleExports: any) => {\n              const ConnectionPrototype: Connection = getConnectionPrototypeToInstrument(moduleExports);\n              patch(ConnectionPrototype);\n              return moduleExports;\n            },\n            (moduleExports: any) => {\n              if (moduleExports === undefined) return;\n              const ConnectionPrototype: Connection = getConnectionPrototypeToInstrument(moduleExports);\n              unpatch(ConnectionPrototype);\n            },\n          ),\n        ],\n      ),\n    ];\n  }\n\n  private _patchQuery(format: FormatFunction | undefined) {\n    const thisPlugin = this;\n    return (originalQuery: Function): Function => {\n      return function query(\n        this: Connection,\n        query: string | Query | QueryOptions,\n        _valuesOrCallback?: unknown[] | Function,\n        _callback?: Function,\n      ) {\n        let values;\n        if (Array.isArray(_valuesOrCallback)) {\n          values = _valuesOrCallback;\n        } else if (arguments[2]) {\n          values = [_valuesOrCallback];\n        }\n\n        const attributes: SpanAttributes = {\n          ...getConnectionAttributes(this.config),\n          // oxlint-disable-next-line typescript/no-deprecated\n          [DB_SYSTEM]: DB_SYSTEM_VALUE_MYSQL,\n          // oxlint-disable-next-line typescript/no-deprecated\n          [DB_STATEMENT]: getQueryText(query, format, values),\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n        };\n\n        const span = startInactiveSpan({\n          name: getSpanName(query),\n          kind: SPAN_KIND.CLIENT,\n          attributes,\n        });\n\n        const endSpan = once((err?: QueryError | null) => {\n          if (err) {\n            span.setStatus({ code: SPAN_STATUS_ERROR, message: err.message });\n          }\n          span.end();\n        });\n\n        if (arguments.length === 1) {\n          if (typeof (query as any).onResult === 'function') {\n            thisPlugin._wrap(query as any, 'onResult', thisPlugin._patchCallbackQuery(endSpan));\n          }\n\n          const streamableQuery: Query = originalQuery.apply(this, arguments);\n\n          streamableQuery\n            .once('error', (err: any) => {\n              endSpan(err);\n            })\n            .once('result', () => {\n              endSpan();\n            });\n\n          return streamableQuery;\n        }\n\n        if (typeof arguments[1] === 'function') {\n          thisPlugin._wrap(arguments, 1, thisPlugin._patchCallbackQuery(endSpan));\n        } else if (typeof arguments[2] === 'function') {\n          thisPlugin._wrap(arguments, 2, thisPlugin._patchCallbackQuery(endSpan));\n        }\n\n        return originalQuery.apply(this, arguments);\n      };\n    };\n  }\n\n  private _patchCallbackQuery(endSpan: (err?: QueryError | null) => void) {\n    return (originalCallback: Function) => {\n      return function (...args: [err: QueryError | null, ...rest: unknown[]]) {\n        endSpan(args[0]);\n        return originalCallback(...args);\n      };\n    };\n  }\n}\n", "import { MySQL2Instrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration, extendIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { mysql2Integration as mysql2ChannelIntegration } from '@sentry/server-utils';\n\nconst INTEGRATION_NAME = 'Mysql2' as const;\n\nexport const instrumentMysql2 = generateInstrumentOnce(INTEGRATION_NAME, () => new MySQL2Instrumentation());\n\nconst _mysql2Integration = (() => {\n  // The diagnostics_channel subscription (mysql2 >= 3.20.0) lives in server-utils so it is shared\n  // across server runtimes; we extend it here to also run the vendored OTel patcher for mysql2 < 3.20.0.\n  return extendIntegration(mysql2ChannelIntegration(), {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      instrumentMysql2();\n    },\n  });\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [mysql2](https://www.npmjs.com/package/mysql2) library.\n *\n * For more information, see the [`mysql2Integration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/mysql2/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *  integrations: [Sentry.mysqlIntegration()],\n * });\n * ```\n */\nexport const mysql2Integration = defineIntegration(_mysql2Integration);\n", "import type { Integration } from '@sentry/core';\n\n/**\n * The orchestrion-driven pieces, resolved lazily by the opt-in loader.\n *\n * IMPORTANT: this module (and everything `init()` imports) must NOT reference\n * the orchestrion code (`@sentry/server-utils/orchestrion/*`). The only\n * reference lives inside `experimentalUseDiagnosticsChannelInjection()` (a\n * separate module, reachable solely through that public export). That's the\n * tree-shaking boundary: if an app never calls the opt-in function, then a\n * bundler drops the entire orchestrion subtree, including its transitive\n * dependencies, while an app that does call it gets it bundled\n * normally.\n */\nexport interface DiagnosticsChannelInjection {\n  /** Channel-based integrations to register, replacing their OTel equivalents. */\n  integrations: Integration[] | readonly Integration[];\n  /** OTel integration names these replace; filtered out of the default set. */\n  replacedOtelIntegrationNames: string[];\n  /** Installs the module hooks that inject the diagnostics channels. */\n  register: () => void;\n  /** Warns (DEBUG only) about missing or doubled channel injection. */\n  detect: () => void;\n}\n\nlet loader: (() => DiagnosticsChannelInjection) | undefined;\nlet cached: DiagnosticsChannelInjection | undefined;\n\n/**\n * Set by `experimentalUseDiagnosticsChannelInjection()`. The loader\n * is the only thing that pulls in the orchestrion modules; see\n * {@link DiagnosticsChannelInjection) re tree-shaking concerns this addresses.\n *\n * @internal\n */\nexport function setDiagnosticsChannelInjectionLoader(load: () => DiagnosticsChannelInjection): void {\n  loader = load;\n}\n\n/** Whether `experimentalUseDiagnosticsChannelInjection()` was called. */\nexport function isDiagnosticsChannelInjectionEnabled(): boolean {\n  return !!loader;\n}\n\n/**\n * Resolve and memoize the orchestrion pieces. This is what actually loads\n * the orchestrion modules. Returns `undefined` if the app never opted in.\n * Callers gate this on span recording, so the modules load only when both\n * opted in and tracing is enabled.\n */\nexport function resolveDiagnosticsChannelInjection(): DiagnosticsChannelInjection | undefined {\n  if (!loader) {\n    return undefined;\n  }\n  return (cached ??= loader());\n}\n", "export type IORedisCommandArgs = Array<string | Buffer | number | unknown[]>;\n\nconst SINGLE_ARG_COMMANDS = ['get', 'set', 'setex'];\n\nexport const GET_COMMANDS = ['get', 'mget'];\nexport const SET_COMMANDS = ['set', 'setex'];\nexport const REMOVE_COMMANDS = ['del', 'unlink'];\n// todo: expire (no matching cache convention op yet)\n\n/** Checks if a given command is in the list of redis commands.\n *  Useful because commands can come in lowercase or uppercase (depending on the library). */\nexport function isInCommands(redisCommands: string[], command: string): boolean {\n  return redisCommands.includes(command.toLowerCase());\n}\n\n/** Determine cache operation based on redis statement */\nexport function getCacheOperation(command: string): 'cache.get' | 'cache.put' | 'cache.remove' | undefined {\n  if (isInCommands(GET_COMMANDS, command)) {\n    return 'cache.get';\n  } else if (isInCommands(SET_COMMANDS, command)) {\n    return 'cache.put';\n  } else if (isInCommands(REMOVE_COMMANDS, command)) {\n    return 'cache.remove';\n  } else {\n    return undefined;\n  }\n}\n\nfunction keyHasPrefix(key: string, prefixes: string[]): boolean {\n  return prefixes.some(prefix => key.startsWith(prefix));\n}\n\n/** Safely converts a redis key to a string (comma-separated if there are multiple keys) */\nexport function getCacheKeySafely(redisCommand: string, cmdArgs: IORedisCommandArgs): string[] | undefined {\n  try {\n    if (cmdArgs.length === 0) {\n      return undefined;\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const processArg = (arg: string | Buffer | number | any[]): string[] => {\n      if (typeof arg === 'string' || typeof arg === 'number' || Buffer.isBuffer(arg)) {\n        return [arg.toString()];\n      } else if (Array.isArray(arg)) {\n        return flatten(arg.map(arg => processArg(arg)));\n      } else {\n        return ['<unknown>'];\n      }\n    };\n\n    const firstArg = cmdArgs[0];\n    if (isInCommands(SINGLE_ARG_COMMANDS, redisCommand) && firstArg != null) {\n      return processArg(firstArg);\n    }\n\n    return flatten(cmdArgs.map(arg => processArg(arg)));\n  } catch {\n    return undefined;\n  }\n}\n\n/** Determines whether a redis operation should be considered as \"cache operation\" by checking if a key is prefixed.\n *  We only support certain commands (such as 'set', 'get', 'mget'). */\nexport function shouldConsiderForCache(redisCommand: string, keys: string[], prefixes: string[]): boolean {\n  if (!getCacheOperation(redisCommand)) {\n    return false;\n  }\n\n  for (const key of keys) {\n    if (keyHasPrefix(key, prefixes)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/** Calculates size based on the cache response value */\nexport function calculateCacheItemSize(response: unknown): number | undefined {\n  const getSize = (value: unknown): number | undefined => {\n    try {\n      if (Buffer.isBuffer(value)) return value.byteLength;\n      else if (typeof value === 'string') return value.length;\n      else if (typeof value === 'number') return value.toString().length;\n      else if (value === null || value === undefined) return 0;\n      return JSON.stringify(value).length;\n    } catch {\n      return undefined;\n    }\n  };\n\n  return Array.isArray(response)\n    ? response.reduce((acc: number | undefined, curr) => {\n        const size = getSize(curr);\n        return typeof size === 'number' ? (acc !== undefined ? acc + size : size) : acc;\n      }, 0)\n    : getSize(response);\n}\n\ntype NestedArray<T> = Array<NestedArray<T> | T>;\n\nfunction flatten<T>(input: NestedArray<T>): T[] {\n  const result: T[] = [];\n\n  const flattenHelper = (input: NestedArray<T>): void => {\n    input.forEach((el: T | NestedArray<T>) => {\n      if (Array.isArray(el)) {\n        flattenHelper(el);\n      } else {\n        result.push(el);\n      }\n    });\n  };\n\n  flattenHelper(input);\n  return result;\n}\n", "import type { Span } from '@sentry/core';\nimport {\n  SEMANTIC_ATTRIBUTE_CACHE_HIT,\n  SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE,\n  SEMANTIC_ATTRIBUTE_CACHE_KEY,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  spanToJSON,\n  truncate,\n} from '@sentry/core';\nimport type { IORedisCommandArgs } from '../../../utils/redisCache';\nimport {\n  calculateCacheItemSize,\n  GET_COMMANDS,\n  getCacheKeySafely,\n  getCacheOperation,\n  isInCommands,\n  REMOVE_COMMANDS,\n  shouldConsiderForCache,\n} from '../../../utils/redisCache';\nimport type { IORedisResponseCustomAttributeFunction } from './vendored/types';\n\n// This module deliberately does NOT import the vendored OTel `IORedisInstrumentation`/\n// `RedisInstrumentation`, so the orchestrion opt-in can pull `cacheResponseHook`\n// without dragging the OTel redis instrumentation into its module graph.\n\nexport interface RedisOptions {\n  /**\n   * Define cache prefixes for cache keys that should be captured as a cache span.\n   *\n   * Setting this to, for example, `['user:']` will capture cache keys that start with `user:`.\n   */\n  cachePrefixes?: string[];\n  /**\n   * Maximum length of the cache key added to the span description. If the key exceeds this length, it will be truncated.\n   *\n   * Passing `0` will use the full cache key without truncation.\n   *\n   * By default, the full cache key is used.\n   */\n  maxCacheKeyLength?: number;\n}\n\n/* Only exported for testing purposes */\nexport let _redisOptions: RedisOptions = {};\n\n/** Set the options consumed by {@link cacheResponseHook}. */\nexport function setRedisOptions(options: RedisOptions): void {\n  _redisOptions = options;\n}\n\n/* Only exported for testing purposes */\nexport const cacheResponseHook: IORedisResponseCustomAttributeFunction = (\n  span: Span,\n  redisCommand: string,\n  cmdArgs: IORedisCommandArgs,\n  response: unknown,\n) => {\n  const safeKey = getCacheKeySafely(redisCommand, cmdArgs);\n  const cacheOperation = getCacheOperation(redisCommand);\n\n  if (\n    !safeKey ||\n    !cacheOperation ||\n    !_redisOptions.cachePrefixes ||\n    !shouldConsiderForCache(redisCommand, safeKey, _redisOptions.cachePrefixes)\n  ) {\n    // not relevant for cache\n    return;\n  }\n\n  // otel/ioredis seems to be using the old standard, as there was a change to those params: https://github.com/open-telemetry/opentelemetry-specification/issues/3199\n  // We are using params based on the docs: https://opentelemetry.io/docs/specs/semconv/attributes-registry/network/\n  // Fall back to stable semconv attributes (server.address/server.port) when\n  // old-semconv ones are absent, eg OTEL_SEMCONV_STABILITY_OPT_IN=database\n  // set for node-redis v4/v5.\n  const spanData = spanToJSON(span).data;\n  const networkPeerAddress = spanData['net.peer.name'] ?? spanData['server.address'];\n  const networkPeerPort = spanData['net.peer.port'] ?? spanData['server.port'];\n  if (networkPeerPort && networkPeerAddress) {\n    span.setAttributes({ 'network.peer.address': networkPeerAddress, 'network.peer.port': networkPeerPort });\n  }\n\n  // A remove response is a delete-count, not a cached value, so its size is meaningless.\n  const cacheItemSize = isInCommands(REMOVE_COMMANDS, redisCommand) ? undefined : calculateCacheItemSize(response);\n\n  if (cacheItemSize) {\n    span.setAttribute(SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE, cacheItemSize);\n  }\n\n  if (isInCommands(GET_COMMANDS, redisCommand) && cacheItemSize !== undefined) {\n    span.setAttribute(SEMANTIC_ATTRIBUTE_CACHE_HIT, cacheItemSize > 0);\n  }\n\n  span.setAttributes({\n    [SEMANTIC_ATTRIBUTE_SENTRY_OP]: cacheOperation,\n    [SEMANTIC_ATTRIBUTE_CACHE_KEY]: safeKey,\n  });\n\n  // todo: change to string[] once EAP supports it\n  const spanDescription = safeKey.join(', ');\n\n  span.updateName(\n    _redisOptions.maxCacheKeyLength ? truncate(spanDescription, _redisOptions.maxCacheKeyLength) : spanDescription,\n  );\n};\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/instrumentation-redis-v0.62.0/packages/instrumentation-redis\n * - Upstream version: @opentelemetry/instrumentation-redis@0.62.0\n * - Minor TypeScript adjustments for this repository's compiler settings\n */\n/* eslint-disable -- vendored @opentelemetry/instrumentation-redis */\n\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by the vendored redis/ioredis instrumentations.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n\n// Deprecated constants kept for backwards compatibility with older semconv\nexport const ATTR_DB_CONNECTION_STRING = 'db.connection_string';\nexport const DB_SYSTEM_NAME_VALUE_REDIS = 'redis';\nexport const DB_SYSTEM_VALUE_REDIS = 'redis';\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/instrumentation-ioredis-v0.62.0/packages/instrumentation-ioredis\n * - Upstream version: @opentelemetry/instrumentation-ioredis@0.62.0\n * - Minor TypeScript adjustments for this repository's compiler settings\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport {\n  getActiveSpan,\n  SDK_VERSION,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SPAN_KIND,\n  SPAN_STATUS_ERROR,\n  startInactiveSpan,\n} from '@sentry/core';\nimport { DB_STATEMENT, DB_SYSTEM, NET_PEER_NAME, NET_PEER_PORT } from '@sentry/conventions/attributes';\nimport { defaultDbStatementSerializer } from '@sentry/server-utils';\nimport { ATTR_DB_CONNECTION_STRING, DB_SYSTEM_VALUE_REDIS } from './semconv';\nimport type { IORedisInstrumentationConfig } from './types';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-ioredis';\nconst ORIGIN = 'auto.db.otel.redis';\n\n// ioredis >= 5.11.0 publishes via diagnostics_channel, which Sentry subscribes\n// to separately, so this monkey-patching instrumentation only covers < 5.11.0.\nconst SUPPORTED_VERSIONS = ['>=2.0.0 <5.11.0'];\n\n// The raw imported `ioredis` module is either the CommonJS export or an ESM\n// namespace wrapping it on `.default`. Typed shallowly since it is only used\n// internally to reach the `Redis` prototype that holds the methods we patch.\ntype IORedisModule = {\n  default?: { prototype: RedisPrototype };\n  prototype: RedisPrototype;\n  [Symbol.toStringTag]?: string;\n};\n\ninterface RedisPrototype {\n  sendCommand: (...args: unknown[]) => unknown;\n  connect: (...args: unknown[]) => unknown;\n}\n\n// The `this` of the patched methods is a Redis client instance exposing its\n// connection options.\ninterface RedisClient {\n  options: { host?: string; port?: number };\n}\n\n// The in-flight command object ioredis passes to `sendCommand`. We swap its\n// `resolve`/`reject` so the span ends when the command settles.\ninterface RedisCommand {\n  name: string;\n  args: Array<string | Buffer>;\n  resolve: (result: unknown) => void;\n  reject: (err: Error) => void;\n}\n\nfunction endSpan(span: Span, err: Error | null | undefined): void {\n  if (err) {\n    span.setStatus({ code: SPAN_STATUS_ERROR, message: err.message });\n  }\n  span.end();\n}\n\nexport class IORedisInstrumentation extends InstrumentationBase<IORedisInstrumentationConfig> {\n  public constructor(config: IORedisInstrumentationConfig = {}) {\n    super(PACKAGE_NAME, SDK_VERSION, config);\n  }\n\n  protected init(): InstrumentationNodeModuleDefinition[] {\n    return [\n      new InstrumentationNodeModuleDefinition(\n        'ioredis',\n        SUPPORTED_VERSIONS,\n        (module: IORedisModule) => {\n          const moduleExports = module[Symbol.toStringTag] === 'Module' && module.default ? module.default : module;\n          if (isWrapped(moduleExports.prototype.sendCommand)) {\n            this._unwrap(moduleExports.prototype, 'sendCommand');\n          }\n          this._wrap(moduleExports.prototype, 'sendCommand', this._patchSendCommand());\n          if (isWrapped(moduleExports.prototype.connect)) {\n            this._unwrap(moduleExports.prototype, 'connect');\n          }\n          this._wrap(moduleExports.prototype, 'connect', this._patchConnection());\n          return module;\n        },\n        (module: IORedisModule | undefined) => {\n          if (module === undefined) return;\n          const moduleExports = module[Symbol.toStringTag] === 'Module' && module.default ? module.default : module;\n          this._unwrap(moduleExports.prototype, 'sendCommand');\n          this._unwrap(moduleExports.prototype, 'connect');\n        },\n      ),\n    ];\n  }\n\n  private _patchSendCommand() {\n    const instrumentation = this;\n    return (original: (...args: unknown[]) => unknown) => {\n      return function (this: RedisClient, ...args: unknown[]): unknown {\n        const cmd = args[0] as RedisCommand | undefined;\n        // ioredis only creates a span when there is an active parent span\n        // (the upstream `requireParentSpan` default, which Sentry never overrides).\n        if (args.length < 1 || typeof cmd !== 'object' || !getActiveSpan()) {\n          return original.apply(this, args);\n        }\n\n        const { host, port } = this.options;\n        const attributes: SpanAttributes = {\n          // oxlint-disable-next-line typescript/no-deprecated\n          [DB_SYSTEM]: DB_SYSTEM_VALUE_REDIS,\n          // oxlint-disable-next-line typescript/no-deprecated\n          [DB_STATEMENT]: defaultDbStatementSerializer(cmd.name, cmd.args),\n          [ATTR_DB_CONNECTION_STRING]: `redis://${host}:${port}`,\n          // oxlint-disable-next-line typescript/no-deprecated\n          [NET_PEER_NAME]: host,\n          // oxlint-disable-next-line typescript/no-deprecated\n          [NET_PEER_PORT]: port,\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n        };\n\n        const span = startInactiveSpan({ name: cmd.name, kind: SPAN_KIND.CLIENT, attributes });\n\n        try {\n          const result = original.apply(this, args);\n          const origResolve = cmd.resolve;\n          cmd.resolve = function (response: unknown): void {\n            instrumentation._callResponseHook(span, cmd, response);\n            endSpan(span, null);\n            origResolve(response);\n          };\n          const origReject = cmd.reject;\n          cmd.reject = function (err: Error): void {\n            endSpan(span, err);\n            origReject(err);\n          };\n          return result;\n        } catch (error) {\n          endSpan(span, error as Error);\n          throw error;\n        }\n      };\n    };\n  }\n\n  private _patchConnection() {\n    return (original: (...args: unknown[]) => unknown) => {\n      return function (this: RedisClient, ...args: unknown[]): unknown {\n        if (!getActiveSpan()) {\n          return original.apply(this, args);\n        }\n\n        const { host, port } = this.options;\n        const attributes: SpanAttributes = {\n          // oxlint-disable-next-line typescript/no-deprecated\n          [DB_SYSTEM]: DB_SYSTEM_VALUE_REDIS,\n          // oxlint-disable-next-line typescript/no-deprecated\n          [DB_STATEMENT]: 'connect',\n          [ATTR_DB_CONNECTION_STRING]: `redis://${host}:${port}`,\n          // oxlint-disable-next-line typescript/no-deprecated\n          [NET_PEER_NAME]: host,\n          // oxlint-disable-next-line typescript/no-deprecated\n          [NET_PEER_PORT]: port,\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n        };\n\n        const span = startInactiveSpan({ name: 'connect', kind: SPAN_KIND.CLIENT, attributes });\n\n        try {\n          const result = original.apply(this, args) as Promise<unknown> | undefined;\n          if (result instanceof Promise) {\n            return result.then(\n              (value: unknown) => {\n                endSpan(span, null);\n                return value;\n              },\n              (error: Error) => {\n                endSpan(span, error);\n                return Promise.reject(error);\n              },\n            );\n          }\n          endSpan(span, null);\n          return result;\n        } catch (error) {\n          endSpan(span, error as Error);\n          throw error;\n        }\n      };\n    };\n  }\n\n  private _callResponseHook(span: Span, cmd: RedisCommand, response: unknown): void {\n    const { responseHook } = this.getConfig();\n    if (!responseHook) {\n      return;\n    }\n    try {\n      responseHook(span, cmd.name, cmd.args, response);\n    } catch {\n      // ignore errors thrown from the user-provided response hook\n    }\n  }\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/instrumentation-redis-v0.62.0/packages/instrumentation-redis\n * - Upstream version: @opentelemetry/instrumentation-redis@0.62.0\n * - Minor TypeScript adjustments for this repository's compiler settings\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\nimport type { TracerProvider } from '@opentelemetry/api';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport {\n  debug,\n  getActiveSpan,\n  SDK_VERSION,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SPAN_KIND,\n  SPAN_STATUS_ERROR,\n  startInactiveSpan,\n  withActiveSpan,\n} from '@sentry/core';\nimport { DB_STATEMENT, DB_SYSTEM, NET_PEER_NAME, NET_PEER_PORT } from '@sentry/conventions/attributes';\nimport { defaultDbStatementSerializer } from '@sentry/server-utils';\nimport { DEBUG_BUILD } from '../../../../debug-build';\nimport { InstrumentationNodeModuleFile } from '../../InstrumentationNodeModuleFile';\nimport { ATTR_DB_CONNECTION_STRING, DB_SYSTEM_VALUE_REDIS } from './semconv';\nimport type { RedisInstrumentationConfig, RedisResponseCustomAttributeFunction } from './types';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-redis';\nconst ORIGIN = 'auto.db.otel.redis';\n\n// node-redis >= 5.12.0 publishes via diagnostics_channel, which Sentry subscribes\n// to separately, so this monkey-patching instrumentation only covers the older\n// `redis` (v2-v3), `@redis/client`/`@node-redis/client` (v1, i.e. node-redis v4)\n// and node-redis 5.0-5.11 releases.\n\n// ---- Internal types ----\n\ninterface RedisPluginClientTypes {\n  connection_options?: {\n    port?: string | number;\n    host?: string;\n  };\n  address?: string;\n}\n\ninterface RedisCommand {\n  command: string;\n  args: string[];\n  buffer_args: boolean;\n  callback: (err: Error | null, reply: unknown) => void;\n  call_on_write: boolean;\n}\n\ninterface MultiErrorReply extends Error {\n  replies: unknown[];\n  errorIndexes: Array<number>;\n}\n\ninterface OpenSpanInfo {\n  span: Span;\n  commandName: string;\n  commandArgs: Array<string | Buffer>;\n}\n\nconst OTEL_OPEN_SPANS = Symbol('opentelemetry.instrumentation.redis.open_spans');\nconst MULTI_COMMAND_OPTIONS = Symbol('opentelemetry.instrumentation.redis.multi_command_options');\n\n// ---- shared utils ----\n\nfunction endSpan(span: Span, err: Error | null | undefined): void {\n  if (err) {\n    span.setStatus({ code: SPAN_STATUS_ERROR, message: err.message });\n  }\n  span.end();\n}\n\nfunction runResponseHook(\n  responseHook: RedisResponseCustomAttributeFunction | undefined,\n  span: Span,\n  commandName: string,\n  commandArgs: Array<string | Buffer>,\n  response: unknown,\n): void {\n  if (!responseHook) {\n    return;\n  }\n  try {\n    responseHook(span, commandName, commandArgs, response);\n  } catch {\n    // never let a user-provided response hook break instrumentation\n  }\n}\n\n// ---- v4-v5 utils ----\n\nfunction removeCredentialsFromDBConnectionStringAttribute(url: string | undefined): string | undefined {\n  if (typeof url !== 'string' || !url) {\n    return undefined;\n  }\n  try {\n    const u = new URL(url);\n    u.searchParams.delete('user_pwd');\n    u.username = '';\n    u.password = '';\n    return u.href;\n  } catch (err) {\n    DEBUG_BUILD && debug.error('failed to sanitize redis connection url', err);\n  }\n  return undefined;\n}\n\nfunction getClientAttributes(options: any): SpanAttributes {\n  return {\n    // oxlint-disable-next-line typescript/no-deprecated\n    [DB_SYSTEM]: DB_SYSTEM_VALUE_REDIS,\n    // oxlint-disable-next-line typescript/no-deprecated\n    [NET_PEER_NAME]: options?.socket?.host,\n    // oxlint-disable-next-line typescript/no-deprecated\n    [NET_PEER_PORT]: options?.socket?.port,\n    [ATTR_DB_CONNECTION_STRING]: removeCredentialsFromDBConnectionStringAttribute(options?.url),\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n  };\n}\n\n// ---- RedisInstrumentationV2_V3 ----\n\nclass RedisInstrumentationV2_V3 extends InstrumentationBase<RedisInstrumentationConfig> {\n  static COMPONENT = 'redis';\n\n  constructor(config: RedisInstrumentationConfig = {}) {\n    super(PACKAGE_NAME, SDK_VERSION, config);\n  }\n\n  init() {\n    return [\n      new InstrumentationNodeModuleDefinition(\n        'redis',\n        ['>=2.6.0 <4'],\n        (moduleExports: any) => {\n          if (isWrapped(moduleExports.RedisClient.prototype['internal_send_command'])) {\n            this._unwrap(moduleExports.RedisClient.prototype, 'internal_send_command');\n          }\n          this._wrap(moduleExports.RedisClient.prototype, 'internal_send_command', this._getPatchInternalSendCommand());\n          return moduleExports;\n        },\n        (moduleExports: any) => {\n          if (moduleExports === undefined) return;\n          this._unwrap(moduleExports.RedisClient.prototype, 'internal_send_command');\n        },\n      ),\n    ];\n  }\n\n  private _getPatchInternalSendCommand() {\n    const instrumentation = this;\n    return function internal_send_command(original: Function) {\n      return function internal_send_command_trace(this: RedisPluginClientTypes, cmd: RedisCommand) {\n        if (arguments.length !== 1 || typeof cmd !== 'object') {\n          return original.apply(this, arguments);\n        }\n        const attributes: SpanAttributes = {\n          // oxlint-disable-next-line typescript/no-deprecated\n          [DB_SYSTEM]: DB_SYSTEM_VALUE_REDIS,\n          // oxlint-disable-next-line typescript/no-deprecated\n          [DB_STATEMENT]: defaultDbStatementSerializer(cmd.command, cmd.args),\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n        };\n        if (this.connection_options) {\n          // oxlint-disable-next-line typescript/no-deprecated\n          attributes[NET_PEER_NAME] = this.connection_options.host;\n          // oxlint-disable-next-line typescript/no-deprecated\n          attributes[NET_PEER_PORT] = this.connection_options.port;\n        }\n        if (this.address) {\n          attributes[ATTR_DB_CONNECTION_STRING] = `redis://${this.address}`;\n        }\n        const span = startInactiveSpan({\n          name: `${RedisInstrumentationV2_V3.COMPONENT}-${cmd.command}`,\n          kind: SPAN_KIND.CLIENT,\n          attributes,\n        });\n        const originalCallback = arguments[0].callback;\n        if (originalCallback) {\n          const parentSpan = getActiveSpan();\n          arguments[0].callback = function callback(this: any, err: Error | null, reply: unknown) {\n            runResponseHook(instrumentation.getConfig().responseHook, span, cmd.command, cmd.args, reply);\n            endSpan(span, err);\n            return withActiveSpan(parentSpan ?? null, () => originalCallback.apply(this, arguments));\n          };\n        }\n        try {\n          return original.apply(this, arguments);\n        } catch (rethrow) {\n          endSpan(span, rethrow as Error);\n          throw rethrow;\n        }\n      };\n    };\n  }\n}\n\n// ---- RedisInstrumentationV4_V5 ----\n\nclass RedisInstrumentationV4_V5 extends InstrumentationBase<RedisInstrumentationConfig> {\n  static COMPONENT = 'redis';\n\n  constructor(config: RedisInstrumentationConfig = {}) {\n    super(PACKAGE_NAME, SDK_VERSION, config);\n  }\n\n  init() {\n    return [\n      this._getInstrumentationNodeModuleDefinition('@redis/client'),\n      this._getInstrumentationNodeModuleDefinition('@node-redis/client'),\n    ];\n  }\n\n  private _getInstrumentationNodeModuleDefinition(basePackageName: string) {\n    const commanderModuleFile = new InstrumentationNodeModuleFile(\n      `${basePackageName}/dist/lib/commander.js`,\n      ['^1.0.0'],\n      (moduleExports: any, moduleVersion?: string) => {\n        const transformCommandArguments = moduleExports.transformCommandArguments;\n        if (!transformCommandArguments) {\n          DEBUG_BUILD && debug.error('internal instrumentation error, missing transformCommandArguments function');\n          return moduleExports;\n        }\n        const functionToPatch = moduleVersion?.startsWith('1.0.') ? 'extendWithCommands' : 'attachCommands';\n        if (isWrapped(moduleExports?.[functionToPatch])) {\n          this._unwrap(moduleExports, functionToPatch);\n        }\n        this._wrap(moduleExports, functionToPatch, this._getPatchExtendWithCommands(transformCommandArguments));\n        return moduleExports;\n      },\n      (moduleExports: any) => {\n        if (isWrapped(moduleExports?.extendWithCommands)) {\n          this._unwrap(moduleExports, 'extendWithCommands');\n        }\n        if (isWrapped(moduleExports?.attachCommands)) {\n          this._unwrap(moduleExports, 'attachCommands');\n        }\n      },\n    );\n\n    const multiCommanderModule = new InstrumentationNodeModuleFile(\n      `${basePackageName}/dist/lib/client/multi-command.js`,\n      ['^1.0.0', '>=5.0.0 <5.12.0'],\n      (moduleExports: any) => {\n        const redisClientMultiCommandPrototype = moduleExports?.default?.prototype;\n        if (isWrapped(redisClientMultiCommandPrototype?.exec)) {\n          this._unwrap(redisClientMultiCommandPrototype, 'exec');\n        }\n        this._wrap(redisClientMultiCommandPrototype, 'exec', this._getPatchMultiCommandsExec());\n        if (isWrapped(redisClientMultiCommandPrototype?.execAsPipeline)) {\n          this._unwrap(redisClientMultiCommandPrototype, 'execAsPipeline');\n        }\n        this._wrap(redisClientMultiCommandPrototype, 'execAsPipeline', this._getPatchMultiCommandsExec());\n        if (isWrapped(redisClientMultiCommandPrototype?.addCommand)) {\n          this._unwrap(redisClientMultiCommandPrototype, 'addCommand');\n        }\n        this._wrap(redisClientMultiCommandPrototype, 'addCommand', this._getPatchMultiCommandsAddCommand());\n        return moduleExports;\n      },\n      (moduleExports: any) => {\n        const redisClientMultiCommandPrototype = moduleExports?.default?.prototype;\n        if (isWrapped(redisClientMultiCommandPrototype?.exec)) {\n          this._unwrap(redisClientMultiCommandPrototype, 'exec');\n        }\n        if (isWrapped(redisClientMultiCommandPrototype?.execAsPipeline)) {\n          this._unwrap(redisClientMultiCommandPrototype, 'execAsPipeline');\n        }\n        if (isWrapped(redisClientMultiCommandPrototype?.addCommand)) {\n          this._unwrap(redisClientMultiCommandPrototype, 'addCommand');\n        }\n      },\n    );\n\n    const clientIndexModule = new InstrumentationNodeModuleFile(\n      `${basePackageName}/dist/lib/client/index.js`,\n      ['^1.0.0', '>=5.0.0 <5.12.0'],\n      (moduleExports: any) => {\n        const redisClientPrototype = moduleExports?.default?.prototype;\n        if (redisClientPrototype?.multi) {\n          if (isWrapped(redisClientPrototype?.multi)) {\n            this._unwrap(redisClientPrototype, 'multi');\n          }\n          this._wrap(redisClientPrototype, 'multi', this._getPatchRedisClientMulti());\n        }\n        if (redisClientPrototype?.MULTI) {\n          if (isWrapped(redisClientPrototype?.MULTI)) {\n            this._unwrap(redisClientPrototype, 'MULTI');\n          }\n          this._wrap(redisClientPrototype, 'MULTI', this._getPatchRedisClientMulti());\n        }\n        if (isWrapped(redisClientPrototype?.sendCommand)) {\n          this._unwrap(redisClientPrototype, 'sendCommand');\n        }\n        this._wrap(redisClientPrototype, 'sendCommand', this._getPatchRedisClientSendCommand());\n        if (isWrapped(redisClientPrototype?.connect)) {\n          this._unwrap(redisClientPrototype, 'connect');\n        }\n        this._wrap(redisClientPrototype, 'connect', this._getPatchedClientConnect());\n        return moduleExports;\n      },\n      (moduleExports: any) => {\n        const redisClientPrototype = moduleExports?.default?.prototype;\n        if (isWrapped(redisClientPrototype?.multi)) {\n          this._unwrap(redisClientPrototype, 'multi');\n        }\n        if (isWrapped(redisClientPrototype?.MULTI)) {\n          this._unwrap(redisClientPrototype, 'MULTI');\n        }\n        if (isWrapped(redisClientPrototype?.sendCommand)) {\n          this._unwrap(redisClientPrototype, 'sendCommand');\n        }\n        if (isWrapped(redisClientPrototype?.connect)) {\n          this._unwrap(redisClientPrototype, 'connect');\n        }\n      },\n    );\n\n    return new InstrumentationNodeModuleDefinition(\n      basePackageName,\n      ['^1.0.0', '>=5.0.0 <5.12.0'],\n      (moduleExports: any) => moduleExports,\n      () => {},\n      [commanderModuleFile, multiCommanderModule, clientIndexModule],\n    );\n  }\n\n  private _getPatchExtendWithCommands(transformCommandArguments: Function) {\n    const plugin = this;\n    return function extendWithCommandsPatchWrapper(original: Function) {\n      return function extendWithCommandsPatch(this: any, config: any) {\n        if (config?.BaseClass?.name !== 'RedisClient') {\n          return original.apply(this, arguments);\n        }\n        const origExecutor = config.executor;\n        config.executor = function (this: any, command: any, args: any) {\n          const redisCommandArguments = transformCommandArguments(command, args).args;\n          return plugin._traceClientCommand(origExecutor, this, arguments, redisCommandArguments);\n        };\n        return original.apply(this, arguments);\n      };\n    };\n  }\n\n  private _getPatchMultiCommandsExec() {\n    const plugin = this;\n    return function execPatchWrapper(original: Function) {\n      return function execPatch(this: any) {\n        const execRes = original.apply(this, arguments);\n        if (typeof execRes?.then !== 'function') {\n          DEBUG_BUILD && debug.error('non-promise result when patching exec/execAsPipeline');\n          return execRes;\n        }\n        return execRes\n          .then((redisRes: unknown[]) => {\n            const openSpans: OpenSpanInfo[] = this[OTEL_OPEN_SPANS];\n            plugin._endSpansWithRedisReplies(openSpans, redisRes);\n            return redisRes;\n          })\n          .catch((err: any) => {\n            const openSpans: OpenSpanInfo[] = this[OTEL_OPEN_SPANS];\n            if (!openSpans) {\n              DEBUG_BUILD && debug.error('cannot find open spans to end for multi/pipeline');\n            } else {\n              const replies =\n                err.constructor.name === 'MultiErrorReply'\n                  ? (err as MultiErrorReply).replies\n                  : new Array(openSpans.length).fill(err);\n              plugin._endSpansWithRedisReplies(openSpans, replies);\n            }\n            return Promise.reject(err);\n          });\n      };\n    };\n  }\n\n  private _getPatchMultiCommandsAddCommand() {\n    const plugin = this;\n    return function addCommandWrapper(original: Function) {\n      return function addCommandPatch(this: any, args: any) {\n        return plugin._traceClientCommand(original, this, arguments, args);\n      };\n    };\n  }\n\n  private _getPatchRedisClientMulti() {\n    return function multiPatchWrapper(original: Function) {\n      return function multiPatch(this: any) {\n        const multiRes: any = original.apply(this, arguments);\n        multiRes[MULTI_COMMAND_OPTIONS] = this.options;\n        return multiRes;\n      };\n    };\n  }\n\n  private _getPatchRedisClientSendCommand() {\n    const plugin = this;\n    return function sendCommandWrapper(original: Function) {\n      return function sendCommandPatch(this: any, args: any) {\n        return plugin._traceClientCommand(original, this, arguments, args);\n      };\n    };\n  }\n\n  private _getPatchedClientConnect() {\n    return function connectWrapper(original: Function) {\n      return function patchedConnect(this: any) {\n        const attributes = getClientAttributes(this.options);\n        const span = startInactiveSpan({\n          name: `${RedisInstrumentationV4_V5.COMPONENT}-connect`,\n          kind: SPAN_KIND.CLIENT,\n          attributes,\n        });\n        const res = withActiveSpan(span, () => original.apply(this));\n        return res.then(\n          (result: any) => {\n            span.end();\n            return result;\n          },\n          (error: Error) => {\n            endSpan(span, error);\n            return Promise.reject(error);\n          },\n        );\n      };\n    };\n  }\n\n  _traceClientCommand(\n    origFunction: Function,\n    origThis: any,\n    origArguments: IArguments,\n    redisCommandArguments: Array<string | Buffer>,\n  ): any {\n    const clientOptions = origThis.options || origThis[MULTI_COMMAND_OPTIONS];\n    const commandName = redisCommandArguments[0] as string;\n    const commandArgs = redisCommandArguments.slice(1);\n    const attributes = getClientAttributes(clientOptions);\n    const dbStatement = defaultDbStatementSerializer(commandName, commandArgs);\n    if (dbStatement != null) {\n      // oxlint-disable-next-line typescript/no-deprecated\n      attributes[DB_STATEMENT] = dbStatement;\n    }\n    const span = startInactiveSpan({\n      name: `${RedisInstrumentationV4_V5.COMPONENT}-${commandName}`,\n      kind: SPAN_KIND.CLIENT,\n      attributes,\n    });\n    const res = withActiveSpan(span, () => origFunction.apply(origThis, origArguments));\n    if (res instanceof Promise) {\n      res.then(\n        (redisRes: unknown) => {\n          this._endSpanWithResponse(span, commandName, commandArgs, redisRes, undefined);\n        },\n        (err: Error) => {\n          this._endSpanWithResponse(span, commandName, commandArgs, null, err);\n        },\n      );\n    } else {\n      const redisClientMultiCommand: any = res;\n      redisClientMultiCommand[OTEL_OPEN_SPANS] = redisClientMultiCommand[OTEL_OPEN_SPANS] || [];\n      redisClientMultiCommand[OTEL_OPEN_SPANS].push({\n        span,\n        commandName,\n        commandArgs,\n      });\n    }\n    return res;\n  }\n\n  _endSpansWithRedisReplies(openSpans: OpenSpanInfo[] | undefined, replies: unknown[]): void {\n    if (!openSpans) {\n      DEBUG_BUILD && debug.error('cannot find open spans to end for redis multi/pipeline');\n      return;\n    }\n    if (replies.length !== openSpans.length) {\n      DEBUG_BUILD && debug.error('number of multi command spans does not match response from redis');\n      return;\n    }\n    for (let i = 0; i < openSpans.length; i++) {\n      const { span, commandName, commandArgs } = openSpans[i]!;\n      const currCommandRes = replies[i];\n      const [res, err] = currCommandRes instanceof Error ? [null, currCommandRes] : [currCommandRes, undefined];\n      this._endSpanWithResponse(span, commandName, commandArgs, res, err);\n    }\n  }\n\n  _endSpanWithResponse(\n    span: Span,\n    commandName: string,\n    commandArgs: Array<string | Buffer>,\n    response: unknown,\n    error: Error | null | undefined,\n  ): void {\n    if (!error) {\n      runResponseHook(this.getConfig().responseHook, span, commandName, commandArgs, response);\n    }\n    endSpan(span, error);\n  }\n}\n\n// ---- RedisInstrumentation (wrapper) ----\n\nexport class RedisInstrumentation extends InstrumentationBase<RedisInstrumentationConfig> {\n  private instrumentationV2_V3: RedisInstrumentationV2_V3;\n  private instrumentationV4_V5: RedisInstrumentationV4_V5;\n  private initialized = false;\n\n  constructor(config: RedisInstrumentationConfig = {}) {\n    super(PACKAGE_NAME, SDK_VERSION, config);\n    this.instrumentationV2_V3 = new RedisInstrumentationV2_V3(this.getConfig());\n    this.instrumentationV4_V5 = new RedisInstrumentationV4_V5(this.getConfig());\n    this.initialized = true;\n  }\n\n  override setConfig(config: RedisInstrumentationConfig = {}): void {\n    super.setConfig(config);\n    if (!this.initialized) {\n      return;\n    }\n    this.instrumentationV2_V3.setConfig(config);\n    this.instrumentationV4_V5.setConfig(config);\n  }\n\n  init() {}\n\n  override getModuleDefinitions() {\n    return [...this.instrumentationV2_V3.getModuleDefinitions(), ...this.instrumentationV4_V5.getModuleDefinitions()];\n  }\n\n  override setTracerProvider(tracerProvider: TracerProvider): void {\n    super.setTracerProvider(tracerProvider);\n    if (!this.initialized) {\n      return;\n    }\n    this.instrumentationV2_V3.setTracerProvider(tracerProvider);\n    this.instrumentationV4_V5.setTracerProvider(tracerProvider);\n  }\n\n  override enable(): void {\n    super.enable();\n    if (!this.initialized) {\n      return;\n    }\n    this.instrumentationV2_V3.enable();\n    this.instrumentationV4_V5.enable();\n  }\n\n  override disable(): void {\n    super.disable();\n    if (!this.initialized) {\n      return;\n    }\n    this.instrumentationV2_V3.disable();\n    this.instrumentationV4_V5.disable();\n  }\n}\n", "import type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration, extendIntegration } from '@sentry/core';\nimport * as dc from 'node:diagnostics_channel';\nimport { redisIntegration as redisChannelIntegration } from '@sentry/server-utils';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { isDiagnosticsChannelInjectionEnabled } from '../../../sdk/diagnosticsChannelInjection';\nimport { cacheResponseHook, type RedisOptions, setRedisOptions } from './cache';\nimport { IORedisInstrumentation } from './vendored/ioredis-instrumentation';\nimport { RedisInstrumentation } from './vendored/redis-instrumentation';\n\n// `cacheResponseHook`/`_redisOptions` live in `./cache` (which has no OTel\n// instrumentation imports) so the orchestrion opt-in can pull the hook without\n// dragging the OTel redis instrumentation in. Re-exported here for tests.\nexport { _redisOptions, cacheResponseHook } from './cache';\n\nconst INTEGRATION_NAME = 'Redis' as const;\n\nconst instrumentIORedis = generateInstrumentOnce(`${INTEGRATION_NAME}.IORedis`, () => {\n  return new IORedisInstrumentation({\n    responseHook: cacheResponseHook,\n  });\n});\n\nconst instrumentRedisModule = generateInstrumentOnce(`${INTEGRATION_NAME}.Redis`, () => {\n  return new RedisInstrumentation({\n    responseHook: cacheResponseHook,\n  });\n});\n\n/**\n * To be able to preload all Redis OTel instrumentations with just one ID\n * (\"Redis\"), all the instrumentations are generated in this one function\n */\nexport const instrumentRedis = Object.assign(\n  (): void => {\n    // When diagnostics-channel injection is opted in, orchestrion fully owns the older\n    // ioredis (`<5.11.0`) and redis/node-redis (`<5.12.0`) ranges — commands, connect, and\n    // batches — so skip both OTel monkey-patches to avoid double instrumentation. On Node\n    // without `tracingChannel` (<18.19) orchestrion can't run, so keep the OTel patches there.\n    if (!isDiagnosticsChannelInjectionEnabled() || !dc.tracingChannel) {\n      instrumentIORedis();\n      instrumentRedisModule();\n    }\n\n    // todo: implement them gradually\n    // new LegacyRedisInstrumentation({}),\n  },\n  { id: INTEGRATION_NAME },\n);\n\nconst _redisIntegration = ((options: RedisOptions = {}) => {\n  // The diagnostics_channel subscription (node-redis >= 5.12.0, ioredis >= 5.11.0) lives in\n  // server-utils so it is shared across server runtimes; we extend it here to also run the vendored\n  // OTel patchers for older client versions. `cacheResponseHook` reads options set in the extension's\n  // `setupOnce` below, but it only runs at command time, by which point those options are set.\n  return extendIntegration(redisChannelIntegration({ responseHook: cacheResponseHook }), {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      setRedisOptions(options);\n      instrumentRedis();\n    },\n  });\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [redis](https://www.npmjs.com/package/redis) and\n * [ioredis](https://www.npmjs.com/package/ioredis) libraries.\n *\n * For more information, see the [`redisIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/redis/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *  integrations: [Sentry.redisIntegration()],\n * });\n * ```\n */\nexport const redisIntegration = defineIntegration(_redisIntegration);\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-pg\n * - Upstream version: @opentelemetry/instrumentation-pg@0.70.0\n */\n\n// Contains span names produced by instrumentation\nexport enum SpanNames {\n  QUERY_PREFIX = 'pg.query',\n  CONNECT = 'pg.connect',\n  POOL_CONNECT = 'pg-pool.connect',\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-pg\n * - Upstream version: @opentelemetry/instrumentation-pg@0.70.0\n */\n\n// Postgresql specific attributes not covered by semantic conventions\nexport enum AttributeNames {\n  PG_PLAN = 'db.postgresql.plan',\n  IDLE_TIMEOUT_MILLIS = 'db.postgresql.idle.timeout.millis',\n  MAX_CLIENT = 'db.postgresql.max.client',\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-pg\n * - Upstream version: @opentelemetry/instrumentation-pg@0.70.0\n * - Trimmed to the (old) semantic conventions the SDK actually emits\n */\n\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by this package.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n\n/**\n * Deprecated, use `server.address`, `server.port` attributes instead.\n *\n * @example \"Server=(localdb)\\\\v11.0;Integrated Security=true;\"\n *\n * @deprecated Replaced by `server.address` and `server.port`.\n */\nexport const ATTR_DB_CONNECTION_STRING = 'db.connection_string' as const;\n\n/**\n * Enum value \"postgresql\" for attribute `db.system`.\n */\nexport const DB_SYSTEM_VALUE_POSTGRESQL = 'postgresql' as const;\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-pg\n * - Upstream version: @opentelemetry/instrumentation-pg@0.70.0\n * - Types from `pg` package inlined as simplified interfaces\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport {\n  getActiveSpan,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SPAN_KIND,\n  SPAN_STATUS_ERROR,\n  startInactiveSpan,\n} from '@sentry/core';\nimport { AttributeNames } from './enums/AttributeNames';\nimport { SpanNames } from './enums/SpanNames';\nimport type {\n  PgClientExtended,\n  PgParsedConnectionParams,\n  PgPoolCallback,\n  PgPoolExtended,\n  PgPoolOptionsParams,\n  PostgresCallback,\n} from './internal-types';\nimport type { PgClient } from './pg-types';\nimport { ATTR_DB_CONNECTION_STRING, DB_SYSTEM_VALUE_POSTGRESQL } from './semconv';\nimport {\n  DB_NAME,\n  DB_STATEMENT,\n  DB_SYSTEM,\n  DB_USER,\n  NET_PEER_NAME,\n  NET_PEER_PORT,\n} from '@sentry/conventions/attributes';\n\n/* oxlint-disable typescript/no-deprecated */\n\nexport const ORIGIN = 'auto.db.otel.postgres';\n\n/**\n * Helper function to get a low cardinality span name from whatever info we have\n * about the query.\n *\n * This is tricky, because we don't have most of the information (table name,\n * operation name, etc) the spec recommends using to build a low-cardinality\n * value w/o parsing. So, we use db.name and assume that, if the query's a named\n * prepared statement, those `name` values will be low cardinality. If we don't\n * have a named prepared statement, we try to parse an operation (despite the\n * spec's warnings).\n *\n * @params dbName The name of the db against which this query is being issued,\n *   which could be missing if no db name was given at the time that the\n *   connection was established.\n * @params queryConfig Information we have about the query being issued, typed\n *   to reflect only the validation we've actually done on the args to\n *   `client.query()`. This will be undefined if `client.query()` was called\n *   with invalid arguments.\n */\nexport function getQuerySpanName(dbName: string | undefined, queryConfig?: { text: string; name?: unknown }): string {\n  // NB: when the query config is invalid, we omit the dbName too, so that\n  // someone (or some tool) reading the span name doesn't misinterpret the\n  // dbName as being a prepared statement or sql commit name.\n  if (!queryConfig) return SpanNames.QUERY_PREFIX;\n\n  // Either the name of a prepared statement; or an attempted parse\n  // of the SQL command, normalized to uppercase; or unknown.\n  const command =\n    typeof queryConfig.name === 'string' && queryConfig.name\n      ? queryConfig.name\n      : parseNormalizedOperationName(queryConfig.text);\n\n  return `${SpanNames.QUERY_PREFIX}:${command}${dbName ? ` ${dbName}` : ''}`;\n}\n\nexport function parseNormalizedOperationName(queryText: string): string {\n  // Trim the query text to handle leading/trailing whitespace\n  const trimmedQuery = queryText.trim();\n  const indexOfFirstSpace = trimmedQuery.indexOf(' ');\n  let sqlCommand = indexOfFirstSpace === -1 ? trimmedQuery : trimmedQuery.slice(0, indexOfFirstSpace);\n  sqlCommand = sqlCommand.toUpperCase();\n\n  // Handle query text being \"COMMIT;\", which has an extra semicolon before the space.\n  return sqlCommand.endsWith(';') ? sqlCommand.slice(0, -1) : sqlCommand;\n}\n\nexport function parseAndMaskConnectionString(connectionString: string): string {\n  try {\n    // Parse the connection string\n    const url = new URL(connectionString);\n\n    // Remove all auth information (username and password)\n    url.username = '';\n    url.password = '';\n\n    return url.toString();\n  } catch {\n    // If parsing fails, return a generic connection string\n    return 'postgresql://localhost:5432/';\n  }\n}\n\nexport function getConnectionString(params: PgParsedConnectionParams | PgPoolOptionsParams): string {\n  if ('connectionString' in params && params.connectionString) {\n    return parseAndMaskConnectionString(params.connectionString);\n  }\n  const host = params.host || 'localhost';\n  const port = params.port || 5432;\n  const database = params.database || '';\n  return `postgresql://${host}:${port}/${database}`;\n}\n\nfunction getPort(port: number | undefined): number | undefined {\n  // Port may be NaN as parseInt() is used on the value, passing null will result in NaN being parsed.\n  // https://github.com/brianc/node-postgres/blob/2a8efbee09a284be12748ed3962bc9b816965e36/packages/pg/lib/connection-parameters.js#L66\n  if (Number.isInteger(port)) {\n    return port;\n  }\n\n  // Unable to find the default used in pg code, so falling back to 'undefined'.\n  return undefined;\n}\n\nexport function getSemanticAttributesFromConnection(params: PgParsedConnectionParams): SpanAttributes {\n  return {\n    [DB_SYSTEM]: DB_SYSTEM_VALUE_POSTGRESQL,\n    [DB_NAME]: params.database,\n    [ATTR_DB_CONNECTION_STRING]: getConnectionString(params),\n    [DB_USER]: params.user,\n    [NET_PEER_NAME]: params.host, // required\n    [NET_PEER_PORT]: getPort(params.port),\n  };\n}\n\nexport function getSemanticAttributesFromPoolConnection(params: PgPoolOptionsParams): SpanAttributes {\n  let url: URL | undefined;\n  try {\n    url = params.connectionString ? new URL(params.connectionString) : undefined;\n  } catch {\n    url = undefined;\n  }\n\n  return {\n    [AttributeNames.IDLE_TIMEOUT_MILLIS]: params.idleTimeoutMillis,\n    [AttributeNames.MAX_CLIENT]: params.maxClient,\n    [DB_SYSTEM]: DB_SYSTEM_VALUE_POSTGRESQL,\n    [DB_NAME]: url?.pathname.slice(1) ?? params.database,\n    [ATTR_DB_CONNECTION_STRING]: getConnectionString(params),\n    [NET_PEER_NAME]: url?.hostname ?? params.host,\n    [NET_PEER_PORT]: Number(url?.port) || getPort(params.port),\n    [DB_USER]: url?.username ?? params.user,\n  };\n}\n\n/**\n * The SDK always requires a parent span (it sets `requireParentSpan: true`), so\n * we only instrument when there is an active span to parent the new span under.\n */\nexport function shouldSkipInstrumentation(): boolean {\n  return getActiveSpan() === undefined;\n}\n\n// Create an (inactive) span from our normalized queryConfig object,\n// or return a basic span if no queryConfig was given/could be created.\nexport function handleConfigQuery(\n  this: PgClientExtended,\n  queryConfig?: { text: string; values?: unknown; name?: unknown },\n): Span {\n  // Create child span.\n  const { connectionParameters } = this;\n  const dbName = connectionParameters.database;\n\n  const spanName = getQuerySpanName(dbName, queryConfig);\n  const span = startInactiveSpan({\n    name: spanName,\n    kind: SPAN_KIND.CLIENT,\n    attributes: {\n      ...getSemanticAttributesFromConnection(connectionParameters),\n      [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n    },\n  });\n\n  if (!queryConfig) {\n    return span;\n  }\n\n  // Set attributes\n  if (queryConfig.text) {\n    span.setAttribute(DB_STATEMENT, queryConfig.text);\n  }\n\n  // Set plan name attribute, if present\n  if (typeof queryConfig.name === 'string') {\n    span.setAttribute(AttributeNames.PG_PLAN, queryConfig.name);\n  }\n\n  return span;\n}\n\nexport function patchCallback(span: Span, cb: PostgresCallback): PostgresCallback {\n  return function patchedCallback(this: PgClientExtended, err: Error, res: object) {\n    if (err) {\n      span.setStatus({ code: SPAN_STATUS_ERROR, message: err.message });\n    }\n    span.end();\n    cb.call(this, err, res);\n  };\n}\n\nexport function patchCallbackPGPool(span: Span, cb: PgPoolCallback): PgPoolCallback {\n  return function patchedCallback(this: PgPoolExtended, err: Error, res: object, done: any) {\n    if (err) {\n      span.setStatus({ code: SPAN_STATUS_ERROR, message: err.message });\n    }\n    span.end();\n    cb.call(this, err, res, done);\n  };\n}\n\nexport function patchClientConnectCallback(span: Span, cb: (...args: unknown[]) => void): (...args: unknown[]) => void {\n  return function patchedClientConnectCallback(this: PgClient, ...args: unknown[]) {\n    const err = args[0];\n    if (err instanceof Error) {\n      span.setStatus({ code: SPAN_STATUS_ERROR, message: err.message });\n    }\n    span.end();\n    cb.apply(this, args);\n  };\n}\n\n/**\n * Attempt to get a message string from a thrown value, while being quite\n * defensive, to recognize the fact that, in JS, any kind of value (even\n * primitives) can be thrown.\n */\nexport function getErrorMessage(e: unknown): string | undefined {\n  return typeof e === 'object' && e !== null && 'message' in e\n    ? String((e as { message?: unknown }).message)\n    : undefined;\n}\n\nexport function isObjectWithTextString(it: unknown): it is ObjectWithText {\n  return typeof it === 'object' && typeof (it as null | { text?: unknown })?.text === 'string';\n}\n\nexport type ObjectWithText = {\n  text: string;\n  [k: string]: unknown;\n};\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-pg\n * - Upstream version: @opentelemetry/instrumentation-pg@0.70.0\n * - Types from `pg` and `pg-pool` packages inlined as simplified interfaces\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n * - Dropped the OTel metrics (no MeterProvider is wired up), the `SemconvStability`\n *   dual-emission, and config the SDK never passes (request/response hooks,\n *   enhancedDatabaseReporting, addSqlCommenterCommentToQueries)\n */\n\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport type { Span } from '@sentry/core';\nimport {\n  getActiveSpan,\n  SDK_VERSION,\n  SPAN_KIND,\n  SPAN_STATUS_ERROR,\n  startInactiveSpan,\n  withActiveSpan,\n} from '@sentry/core';\nimport { InstrumentationNodeModuleFile } from '../../InstrumentationNodeModuleFile';\nimport { SpanNames } from './enums/SpanNames';\nimport type {\n  PgClientConnect,\n  PgClientExtended,\n  PgPoolCallback,\n  PgPoolExtended,\n  PostgresCallback,\n} from './internal-types';\nimport type { PgInstrumentationConfig } from './types';\nimport * as utils from './utils';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-pg';\n\nfunction extractModuleExports(module: any): any {\n  return module[Symbol.toStringTag] === 'Module'\n    ? module.default // ESM\n    : module; // CommonJS\n}\n\n/**\n * Binds `callback` to `parentSpan`, so that the span is active again whenever the\n * (deferred) callback runs. This mirrors the upstream `context.bind(context.active(), callback)`:\n * `pg` invokes callbacks outside of the original async scope (e.g. for pooled connections), so we\n * re-establish the trace context to keep spans created inside the callback correctly parented.\n */\nfunction bindCallbackToSpan<T extends (...args: any[]) => any>(parentSpan: Span, callback: T): T {\n  return function (this: unknown, ...args: any[]): unknown {\n    return withActiveSpan(parentSpan, () => callback.apply(this, args));\n  } as T;\n}\n\nexport class PgInstrumentation extends InstrumentationBase<PgInstrumentationConfig> {\n  public constructor(config: PgInstrumentationConfig = {}) {\n    super(PACKAGE_NAME, SDK_VERSION, config);\n  }\n\n  protected init(): InstrumentationNodeModuleDefinition[] {\n    const SUPPORTED_PG_VERSIONS = ['>=8.0.3 <9'];\n    const SUPPORTED_PG_POOL_VERSIONS = ['>=2.0.0 <4'];\n\n    const modulePgNativeClient = new InstrumentationNodeModuleFile(\n      'pg/lib/native/client.js',\n      SUPPORTED_PG_VERSIONS,\n      this._patchPgClient.bind(this),\n      this._unpatchPgClient.bind(this),\n    );\n\n    const modulePgClient = new InstrumentationNodeModuleFile(\n      'pg/lib/client.js',\n      SUPPORTED_PG_VERSIONS,\n      this._patchPgClient.bind(this),\n      this._unpatchPgClient.bind(this),\n    );\n\n    const modulePG = new InstrumentationNodeModuleDefinition(\n      'pg',\n      SUPPORTED_PG_VERSIONS,\n      (module: any) => {\n        const moduleExports = extractModuleExports(module);\n\n        this._patchPgClient(moduleExports.Client);\n        return module;\n      },\n      (module: any) => {\n        const moduleExports = extractModuleExports(module);\n\n        this._unpatchPgClient(moduleExports.Client);\n        return module;\n      },\n      [modulePgClient, modulePgNativeClient],\n    );\n\n    const modulePGPool = new InstrumentationNodeModuleDefinition(\n      'pg-pool',\n      SUPPORTED_PG_POOL_VERSIONS,\n      (module: any) => {\n        const moduleExports = extractModuleExports(module);\n        if (isWrapped(moduleExports.prototype.connect)) {\n          this._unwrap(moduleExports.prototype, 'connect');\n        }\n        this._wrap(moduleExports.prototype, 'connect', this._getPoolConnectPatch());\n        return moduleExports;\n      },\n      (module: any) => {\n        const moduleExports = extractModuleExports(module);\n        if (isWrapped(moduleExports.prototype.connect)) {\n          this._unwrap(moduleExports.prototype, 'connect');\n        }\n      },\n    );\n\n    return [modulePG, modulePGPool];\n  }\n\n  private _patchPgClient(module: any): any {\n    if (!module) {\n      return;\n    }\n\n    const moduleExports = extractModuleExports(module);\n\n    if (isWrapped(moduleExports.prototype.query)) {\n      this._unwrap(moduleExports.prototype, 'query');\n    }\n\n    if (isWrapped(moduleExports.prototype.connect)) {\n      this._unwrap(moduleExports.prototype, 'connect');\n    }\n\n    this._wrap(moduleExports.prototype, 'query', this._getClientQueryPatch());\n\n    this._wrap(moduleExports.prototype, 'connect', this._getClientConnectPatch());\n\n    return module;\n  }\n\n  private _unpatchPgClient(module: any): any {\n    const moduleExports = extractModuleExports(module);\n\n    if (isWrapped(moduleExports.prototype.query)) {\n      this._unwrap(moduleExports.prototype, 'query');\n    }\n\n    if (isWrapped(moduleExports.prototype.connect)) {\n      this._unwrap(moduleExports.prototype, 'connect');\n    }\n\n    return module;\n  }\n\n  private _getClientConnectPatch() {\n    const plugin = this;\n    return (original: PgClientConnect) => {\n      return function connect(this: PgClientExtended, callback?: (...args: unknown[]) => void) {\n        if (utils.shouldSkipInstrumentation() || plugin.getConfig().ignoreConnectSpans) {\n          return original.call(this, callback);\n        }\n\n        const span = startInactiveSpan({\n          name: SpanNames.CONNECT,\n          kind: SPAN_KIND.CLIENT,\n          attributes: utils.getSemanticAttributesFromConnection(this),\n        });\n\n        let cb = callback;\n        if (cb) {\n          const parentSpan = getActiveSpan();\n          cb = utils.patchClientConnectCallback(span, cb);\n          if (parentSpan) {\n            cb = bindCallbackToSpan(parentSpan, cb);\n          }\n        }\n\n        const connectResult: unknown = withActiveSpan(span, () => {\n          return original.call(this, cb);\n        });\n\n        return handleConnectResult(span, connectResult);\n      };\n    };\n  }\n\n  private _getClientQueryPatch() {\n    return (original: (...args: any[]) => any) => {\n      this._diag.debug('Patching pg.Client.prototype.query');\n      return function query(this: PgClientExtended, ...args: unknown[]) {\n        if (utils.shouldSkipInstrumentation()) {\n          return original.apply(this, args as never);\n        }\n\n        // client.query(text, cb?), client.query(text, values, cb?), and\n        // client.query(configObj, cb?) are all valid signatures. We construct\n        // a queryConfig obj from all (valid) signatures to build the span in a\n        // unified way. We verify that we at least have query text, and code\n        // defensively when dealing with `queryConfig` after that (to handle all\n        // the other invalid cases, like a non-array for values being provided).\n        // The type casts here reflect only what we've actually validated.\n        const arg0 = args[0];\n        const firstArgIsString = typeof arg0 === 'string';\n        const firstArgIsQueryObjectWithText = utils.isObjectWithTextString(arg0);\n\n        const queryConfig = firstArgIsString\n          ? {\n              text: arg0,\n              values: Array.isArray(args[1]) ? args[1] : undefined,\n            }\n          : firstArgIsQueryObjectWithText\n            ? {\n                ...(arg0 as any),\n                name: arg0.name,\n                text: arg0.text,\n                values: (arg0 as any).values ?? (Array.isArray(args[1]) ? args[1] : undefined),\n              }\n            : undefined;\n\n        const span = utils.handleConfigQuery.call(this, queryConfig);\n\n        // Bind callback (if any) to parent span (if any)\n        if (args.length > 0) {\n          const parentSpan = getActiveSpan();\n          if (typeof args[args.length - 1] === 'function') {\n            // Patch ParameterQuery callback\n            args[args.length - 1] = utils.patchCallback(span, args[args.length - 1] as PostgresCallback);\n\n            // If a parent span exists, bind the callback\n            if (parentSpan) {\n              args[args.length - 1] = bindCallbackToSpan(parentSpan, args[args.length - 1] as PostgresCallback);\n            }\n          } else if (typeof queryConfig?.callback === 'function') {\n            // Patch ConfigQuery callback\n            let callback = utils.patchCallback(span, queryConfig.callback as PostgresCallback);\n\n            // If a parent span existed, bind the callback\n            if (parentSpan) {\n              callback = bindCallbackToSpan(parentSpan, callback);\n            }\n\n            (args[0] as { callback?: PostgresCallback }).callback = callback;\n          }\n        }\n\n        let result: unknown;\n        try {\n          result = original.apply(this, args as never);\n        } catch (e: unknown) {\n          span.setStatus({ code: SPAN_STATUS_ERROR, message: utils.getErrorMessage(e) });\n          span.end();\n          throw e;\n        }\n\n        // Bind promise to parent span and end the span\n        if (result instanceof Promise) {\n          return result\n            .then((result: unknown) => {\n              span.end();\n              return result;\n            })\n            .catch((error: unknown) => {\n              span.setStatus({ code: SPAN_STATUS_ERROR, message: utils.getErrorMessage(error) });\n              span.end();\n              return Promise.reject(error);\n            });\n        }\n\n        // else returns void\n        return result; // void\n      };\n    };\n  }\n\n  private _getPoolConnectPatch() {\n    const plugin = this;\n    return (originalConnect: (...args: any[]) => any) => {\n      return function connect(this: PgPoolExtended, callback?: PgPoolCallback) {\n        if (utils.shouldSkipInstrumentation() || plugin.getConfig().ignoreConnectSpans) {\n          return originalConnect.call(this, callback);\n        }\n\n        const span = startInactiveSpan({\n          name: SpanNames.POOL_CONNECT,\n          kind: SPAN_KIND.CLIENT,\n          attributes: utils.getSemanticAttributesFromPoolConnection(this.options),\n        });\n\n        let cb = callback;\n        if (cb) {\n          const parentSpan = getActiveSpan();\n          cb = utils.patchCallbackPGPool(span, cb);\n          // If a parent span exists, bind the callback\n          if (parentSpan) {\n            cb = bindCallbackToSpan(parentSpan, cb);\n          }\n        }\n\n        const connectResult: unknown = withActiveSpan(span, () => {\n          return originalConnect.call(this, cb);\n        });\n\n        return handleConnectResult(span, connectResult);\n      };\n    };\n  }\n}\n\nfunction handleConnectResult(span: Span, connectResult: unknown): unknown {\n  if (!(connectResult instanceof Promise)) {\n    return connectResult;\n  }\n\n  const connectResultPromise = connectResult as Promise<unknown>;\n  // The caller's continuation after `await client.connect()` keeps its trace context via the\n  // SDK's async context propagation, so we don't need to re-bind the returned promise.\n  return connectResultPromise\n    .then(result => {\n      span.end();\n      return result;\n    })\n    .catch((error: unknown) => {\n      span.setStatus({ code: SPAN_STATUS_ERROR, message: utils.getErrorMessage(error) });\n      span.end();\n      return Promise.reject(error);\n    });\n}\n", "import { PgInstrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\n\ninterface PostgresIntegrationOptions {\n  ignoreConnectSpans?: boolean;\n}\n\nconst INTEGRATION_NAME = 'Postgres' as const;\n\nexport const instrumentPostgres = generateInstrumentOnce(\n  INTEGRATION_NAME,\n  PgInstrumentation,\n  (options?: PostgresIntegrationOptions) => ({\n    ignoreConnectSpans: options?.ignoreConnectSpans ?? false,\n  }),\n);\n\nconst _postgresIntegration = ((options?: PostgresIntegrationOptions) => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      instrumentPostgres(options);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [pg](https://www.npmjs.com/package/pg) library.\n *\n * For more information, see the [`postgresIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/postgres/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *  integrations: [Sentry.postgresIntegration()],\n * });\n * ```\n */\nexport const postgresIntegration = defineIntegration(_postgresIntegration);\n", "// Instrumentation for https://github.com/porsager/postgres\n\nimport { context, trace } from '@opentelemetry/api';\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport {\n  InstrumentationBase,\n  InstrumentationNodeModuleDefinition,\n  safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport { InstrumentationNodeModuleFile } from './InstrumentationNodeModuleFile';\nimport { DB_OPERATION_NAME, DB_QUERY_TEXT, DB_SYSTEM_NAME, ERROR_TYPE } from '@sentry/conventions/attributes';\nimport type { IntegrationFn, Span } from '@sentry/core';\nimport {\n  debug,\n  defineIntegration,\n  instrumentPostgresJsSql,\n  replaceExports,\n  SDK_VERSION,\n  SPAN_STATUS_ERROR,\n  startSpanManual,\n} from '@sentry/core';\nimport { addOriginToSpan, generateInstrumentOnce } from '@sentry/node-core';\nimport { DEBUG_BUILD } from '../../debug-build';\n\nconst INTEGRATION_NAME = 'PostgresJs' as const;\nconst SUPPORTED_VERSIONS = ['>=3.0.0 <4'];\n// Not part of `@sentry/conventions`, so we keep it inline.\nconst ATTR_DB_RESPONSE_STATUS_CODE = 'db.response.status_code';\nconst SQL_OPERATION_REGEX = /^(SELECT|INSERT|UPDATE|DELETE|CREATE|DROP|ALTER)/i;\n\ntype PostgresConnectionContext = {\n  ATTR_DB_NAMESPACE?: string; // Database name\n  ATTR_SERVER_ADDRESS?: string; // Hostname or IP address of the database server\n  ATTR_SERVER_PORT?: string; // Port number of the database server\n};\n\n// Marker to track if a query was created from an instrumented sql instance\n// This prevents double-spanning when both wrapper and prototype patches are active\nconst QUERY_FROM_INSTRUMENTED_SQL = Symbol.for('sentry.query.from.instrumented.sql');\n\ntype PostgresJsInstrumentationConfig = InstrumentationConfig & {\n  /**\n   * Whether to require a parent span for the instrumentation.\n   * If set to true, the instrumentation will only create spans if there is a parent span\n   * available in the current scope.\n   * @default true\n   */\n  requireParentSpan?: boolean;\n  /**\n   * Hook to modify the span before it is started.\n   * This can be used to set additional attributes or modify the span in any way.\n   */\n  requestHook?: (span: Span, sanitizedSqlQuery: string, postgresConnectionContext?: PostgresConnectionContext) => void;\n};\n\nexport const instrumentPostgresJs = generateInstrumentOnce(\n  INTEGRATION_NAME,\n  (options?: PostgresJsInstrumentationConfig) =>\n    new PostgresJsInstrumentation({\n      requireParentSpan: options?.requireParentSpan ?? true,\n      requestHook: options?.requestHook,\n    }),\n);\n\n/**\n * Instrumentation for the [postgres](https://www.npmjs.com/package/postgres) library.\n * This instrumentation captures postgresjs queries and their attributes.\n *\n * Uses internal Sentry patching patterns to support both CommonJS and ESM environments.\n */\nexport class PostgresJsInstrumentation extends InstrumentationBase<PostgresJsInstrumentationConfig> {\n  public constructor(config: PostgresJsInstrumentationConfig) {\n    super('sentry-postgres-js', SDK_VERSION, config);\n  }\n\n  /**\n   * Initializes the instrumentation by patching the postgres module.\n   * Uses two complementary approaches:\n   * 1. Main function wrapper: instruments sql instances created AFTER instrumentation is set up (CJS + ESM)\n   * 2. Query.prototype patch: fallback for sql instances created BEFORE instrumentation (CJS only)\n   */\n  public init(): InstrumentationNodeModuleDefinition {\n    const module = new InstrumentationNodeModuleDefinition(\n      'postgres',\n      SUPPORTED_VERSIONS,\n      exports => {\n        try {\n          return this._patchPostgres(exports);\n        } catch (e) {\n          DEBUG_BUILD && debug.error('Failed to patch postgres module:', e);\n          return exports;\n        }\n      },\n      exports => exports,\n    );\n\n    // Add fallback Query.prototype patching for pre-existing sql instances (CJS only)\n    // This catches queries from sql instances created before Sentry was initialized\n    ['src', 'cf/src', 'cjs/src'].forEach(path => {\n      module.files.push(\n        new InstrumentationNodeModuleFile(\n          `postgres/${path}/query.js`,\n          SUPPORTED_VERSIONS,\n          this._patchQueryPrototype.bind(this),\n          this._unpatchQueryPrototype.bind(this),\n        ),\n      );\n    });\n\n    return module;\n  }\n\n  /**\n   * Patches the postgres module by wrapping the main export function.\n   * This intercepts the creation of sql instances and instruments them.\n   */\n  private _patchPostgres(exports: { [key: string]: unknown }): { [key: string]: unknown } {\n    // In CJS: exports is the function itself\n    // In ESM: exports.default is the function\n    const isFunction = typeof exports === 'function';\n    const Original = isFunction ? exports : exports.default;\n\n    if (typeof Original !== 'function') {\n      DEBUG_BUILD && debug.warn('postgres module does not export a function. Skipping instrumentation.');\n      return exports;\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const self = this;\n\n    const WrappedPostgres = function (this: unknown, ...args: unknown[]): unknown {\n      const sql = Reflect.construct(Original as (...args: unknown[]) => unknown, args);\n\n      // Validate that construction succeeded and returned a valid function object\n      if (!sql || typeof sql !== 'function') {\n        DEBUG_BUILD && debug.warn('postgres() did not return a valid instance');\n        return sql;\n      }\n\n      // Delegate to the portable instrumentation from @sentry/core\n      const config = self.getConfig();\n      return instrumentPostgresJsSql(sql, {\n        requireParentSpan: config.requireParentSpan,\n        requestHook: config.requestHook,\n      });\n    };\n\n    Object.setPrototypeOf(WrappedPostgres, Original);\n    Object.setPrototypeOf(WrappedPostgres.prototype, (Original as { prototype: object }).prototype);\n\n    for (const key of Object.getOwnPropertyNames(Original)) {\n      if (!['length', 'name', 'prototype'].includes(key)) {\n        const descriptor = Object.getOwnPropertyDescriptor(Original, key);\n        if (descriptor) {\n          Object.defineProperty(WrappedPostgres, key, descriptor);\n        }\n      }\n    }\n\n    // For CJS: the exports object IS the function, so return the wrapped function\n    // For ESM: replace the default export\n    if (isFunction) {\n      return WrappedPostgres as unknown as { [key: string]: unknown };\n    } else {\n      replaceExports(exports, 'default', WrappedPostgres);\n      return exports;\n    }\n  }\n\n  /**\n   * Determines whether a span should be created based on the current context.\n   * If `requireParentSpan` is set to true in the configuration, a span will\n   * only be created if there is a parent span available.\n   */\n  private _shouldCreateSpans(): boolean {\n    const config = this.getConfig();\n    const hasParentSpan = trace.getSpan(context.active()) !== undefined;\n    return hasParentSpan || !config.requireParentSpan;\n  }\n\n  /**\n   * Extracts DB operation name from SQL query and sets it on the span.\n   */\n  private _setOperationName(span: Span, sanitizedQuery: string | undefined, command?: string): void {\n    if (command) {\n      span.setAttribute(DB_OPERATION_NAME, command);\n      return;\n    }\n    // Fallback: extract operation from the SQL query\n    const operationMatch = sanitizedQuery?.match(SQL_OPERATION_REGEX);\n    if (operationMatch?.[1]) {\n      span.setAttribute(DB_OPERATION_NAME, operationMatch[1].toUpperCase());\n    }\n  }\n\n  /**\n   * Reconstructs the full SQL query from template strings with PostgreSQL placeholders.\n   *\n   * For sql`SELECT * FROM users WHERE id = ${123} AND name = ${'foo'}`:\n   *   strings = [\"SELECT * FROM users WHERE id = \", \" AND name = \", \"\"]\n   *   returns: \"SELECT * FROM users WHERE id = $1 AND name = $2\"\n   */\n  private _reconstructQuery(strings: string[] | undefined): string | undefined {\n    if (!strings?.length) {\n      return undefined;\n    }\n    if (strings.length === 1) {\n      return strings[0] || undefined;\n    }\n    // Join template parts with PostgreSQL placeholders ($1, $2, etc.)\n    return strings.reduce((acc, str, i) => (i === 0 ? str : `${acc}$${i}${str}`), '');\n  }\n\n  /**\n   * Sanitize SQL query as per the OTEL semantic conventions\n   * https://opentelemetry.io/docs/specs/semconv/database/database-spans/#sanitization-of-dbquerytext\n   *\n   * PostgreSQL $n placeholders are preserved per OTEL spec - they're parameterized queries,\n   * not sensitive literals. Only actual values (strings, numbers, booleans) are sanitized.\n   */\n  private _sanitizeSqlQuery(sqlQuery: string | undefined): string {\n    if (!sqlQuery) {\n      return 'Unknown SQL Query';\n    }\n\n    return (\n      sqlQuery\n        // Remove comments first (they may contain newlines and extra spaces)\n        .replace(/--.*$/gm, '') // Single line comments (multiline mode)\n        .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '') // Multi-line comments\n        .replace(/;\\s*$/, '') // Remove trailing semicolons\n        // Collapse whitespace to a single space (after removing comments)\n        .replace(/\\s+/g, ' ')\n        .trim() // Remove extra spaces and trim\n        // Sanitize hex/binary literals before string literals\n        .replace(/\\bX'[0-9A-Fa-f]*'/gi, '?') // Hex string literals\n        .replace(/\\bB'[01]*'/gi, '?') // Binary string literals\n        // Sanitize string literals (handles escaped quotes)\n        .replace(/'(?:[^']|'')*'/g, '?')\n        // Sanitize hex numbers\n        .replace(/\\b0x[0-9A-Fa-f]+/gi, '?')\n        // Sanitize boolean literals\n        .replace(/\\b(?:TRUE|FALSE)\\b/gi, '?')\n        // Sanitize numeric literals (preserve $n placeholders via negative lookbehind)\n        .replace(/-?\\b\\d+\\.?\\d*[eE][+-]?\\d+\\b/g, '?') // Scientific notation\n        .replace(/-?\\b\\d+\\.\\d+\\b/g, '?') // Decimals\n        .replace(/-?\\.\\d+\\b/g, '?') // Decimals starting with dot\n        .replace(/(?<!\\$)-?\\b\\d+\\b/g, '?') // Integers (NOT $n placeholders)\n        // Collapse IN clauses for cardinality (both ? and $n variants)\n        .replace(/\\bIN\\b\\s*\\(\\s*\\?(?:\\s*,\\s*\\?)*\\s*\\)/gi, 'IN (?)')\n        .replace(/\\bIN\\b\\s*\\(\\s*\\$\\d+(?:\\s*,\\s*\\$\\d+)*\\s*\\)/gi, 'IN ($?)')\n    );\n  }\n\n  /**\n   * Fallback patch for Query.prototype.handle to instrument queries from pre-existing sql instances.\n   * This catches queries from sql instances created BEFORE Sentry was initialized (CJS only).\n   *\n   * Note: Queries from pre-existing instances won't have connection context (database, host, port)\n   * because the sql instance wasn't created through our instrumented wrapper.\n   */\n  private _patchQueryPrototype(moduleExports: {\n    Query: {\n      prototype: {\n        handle: ((...args: unknown[]) => Promise<unknown>) & {\n          __sentry_original__?: (...args: unknown[]) => Promise<unknown>;\n        };\n      };\n    };\n  }): typeof moduleExports {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const self = this;\n    const originalHandle = moduleExports.Query.prototype.handle;\n\n    moduleExports.Query.prototype.handle = async function (\n      this: {\n        resolve: unknown;\n        reject: unknown;\n        strings?: string[];\n        executed?: boolean;\n      },\n      ...args: unknown[]\n    ): Promise<unknown> {\n      // Skip if this query came from an instrumented sql instance (already handled by wrapper),\n      // or if handle() was already called (postgres.js calls handle() from then/catch/finally —\n      // only the first call executes SQL, subsequent calls are no-ops).\n      if (this.executed || (this as Record<symbol, unknown>)[QUERY_FROM_INSTRUMENTED_SQL]) {\n        return originalHandle.apply(this, args);\n      }\n\n      // Skip if we shouldn't create spans\n      if (!self._shouldCreateSpans()) {\n        return originalHandle.apply(this, args);\n      }\n\n      const fullQuery = self._reconstructQuery(this.strings);\n      const sanitizedSqlQuery = self._sanitizeSqlQuery(fullQuery);\n\n      return startSpanManual(\n        {\n          name: sanitizedSqlQuery || 'postgresjs.query',\n          op: 'db',\n        },\n        (span: Span) => {\n          addOriginToSpan(span, 'auto.db.postgresjs');\n\n          span.setAttributes({\n            [DB_SYSTEM_NAME]: 'postgres',\n            [DB_QUERY_TEXT]: sanitizedSqlQuery,\n          });\n\n          // Note: No connection context available for pre-existing instances\n          // because the sql instance wasn't created through our instrumented wrapper\n\n          const config = self.getConfig();\n          const { requestHook } = config;\n          if (requestHook) {\n            safeExecuteInTheMiddle(\n              () => requestHook(span, sanitizedSqlQuery, undefined),\n              e => {\n                if (e) {\n                  span.setAttribute('sentry.hook.error', 'requestHook failed');\n                  DEBUG_BUILD && debug.error(`Error in requestHook for ${INTEGRATION_NAME} integration:`, e);\n                }\n              },\n              true,\n            );\n          }\n\n          // Wrap resolve to end span on success\n          const originalResolve = this.resolve;\n          this.resolve = new Proxy(originalResolve as (...args: unknown[]) => unknown, {\n            apply: (resolveTarget, resolveThisArg, resolveArgs: [{ command?: string }]) => {\n              try {\n                self._setOperationName(span, sanitizedSqlQuery, resolveArgs?.[0]?.command);\n                span.end();\n              } catch (e) {\n                DEBUG_BUILD && debug.error('Error ending span in resolve callback:', e);\n              }\n              return Reflect.apply(resolveTarget, resolveThisArg, resolveArgs);\n            },\n          });\n\n          // Wrap reject to end span on error\n          const originalReject = this.reject;\n          this.reject = new Proxy(originalReject as (...args: unknown[]) => unknown, {\n            apply: (rejectTarget, rejectThisArg, rejectArgs: { message?: string; code?: string; name?: string }[]) => {\n              try {\n                span.setStatus({\n                  code: SPAN_STATUS_ERROR,\n                  message: rejectArgs?.[0]?.message || 'unknown_error',\n                });\n                span.setAttribute(ATTR_DB_RESPONSE_STATUS_CODE, rejectArgs?.[0]?.code || 'unknown');\n                span.setAttribute(ERROR_TYPE, rejectArgs?.[0]?.name || 'unknown');\n                self._setOperationName(span, sanitizedSqlQuery);\n                span.end();\n              } catch (e) {\n                DEBUG_BUILD && debug.error('Error ending span in reject callback:', e);\n              }\n              return Reflect.apply(rejectTarget, rejectThisArg, rejectArgs);\n            },\n          });\n\n          try {\n            return originalHandle.apply(this, args);\n          } catch (e) {\n            span.setStatus({\n              code: SPAN_STATUS_ERROR,\n              message: e instanceof Error ? e.message : 'unknown_error',\n            });\n            span.end();\n            throw e;\n          }\n        },\n      );\n    };\n\n    // Store original for unpatch - must be set on the NEW patched function\n    moduleExports.Query.prototype.handle.__sentry_original__ = originalHandle;\n\n    return moduleExports;\n  }\n\n  /**\n   * Restores the original Query.prototype.handle method.\n   */\n  private _unpatchQueryPrototype(moduleExports: {\n    Query: {\n      prototype: {\n        handle: ((...args: unknown[]) => Promise<unknown>) & {\n          __sentry_original__?: (...args: unknown[]) => Promise<unknown>;\n        };\n      };\n    };\n  }): typeof moduleExports {\n    if (moduleExports.Query.prototype.handle.__sentry_original__) {\n      moduleExports.Query.prototype.handle = moduleExports.Query.prototype.handle.__sentry_original__;\n    }\n    return moduleExports;\n  }\n}\n\nconst _postgresJsIntegration = ((options?: PostgresJsInstrumentationConfig) => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      instrumentPostgresJs(options);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [postgres](https://www.npmjs.com/package/postgres) library.\n *\n * For more information, see the [`postgresIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/postgres/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *  integrations: [Sentry.postgresJsIntegration()],\n * });\n * ```\n */\n\nexport const postgresJsIntegration = defineIntegration(_postgresJsIntegration);\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-hapi\n * - Upstream version: @opentelemetry/instrumentation-hapi@0.64.0\n */\n/* eslint-disable */\n\nexport enum AttributeNames {\n  HAPI_TYPE = 'hapi.type',\n  PLUGIN_NAME = 'hapi.plugin.name',\n  EXT_TYPE = 'server.ext.type',\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-hapi\n * - Upstream version: @opentelemetry/instrumentation-hapi@0.64.0\n * - Types vendored from @hapi/hapi as simplified interfaces\n */\n/* eslint-disable */\n\nimport type * as Hapi from './hapi-types';\n\nexport const HapiComponentName = '@hapi/hapi';\n\n/**\n * This symbol is used to mark a Hapi route handler or server extension handler as\n * already patched, since its possible to use these handlers multiple times\n * i.e. when allowing multiple versions of one plugin, or when registering a plugin\n * multiple times on different servers.\n */\nexport const handlerPatched: unique symbol = Symbol('hapi-handler-patched');\n\nexport type HapiServerRouteInputMethod = (route: HapiServerRouteInput) => void;\n\nexport type HapiServerRouteInput = PatchableServerRoute | PatchableServerRoute[];\n\nexport type PatchableServerRoute = Hapi.ServerRoute<any> & {\n  [handlerPatched]?: boolean;\n};\n\nexport type HapiPluginObject<T> = Hapi.ServerRegisterPluginObject<T>;\n\nexport type HapiPluginInput<T> = HapiPluginObject<T> | Array<HapiPluginObject<T>>;\n\nexport type RegisterFunction<T> = (plugin: HapiPluginInput<T>, options?: Hapi.ServerRegisterOptions) => Promise<void>;\n\nexport type PatchableExtMethod = Hapi.Lifecycle.Method & {\n  [handlerPatched]?: boolean;\n};\n\nexport type ServerExtDirectInput = [\n  Hapi.ServerRequestExtType,\n  Hapi.Lifecycle.Method,\n  (Hapi.ServerExtOptions | undefined)?,\n];\n\nexport const HapiLayerType = {\n  ROUTER: 'router',\n  PLUGIN: 'plugin',\n  EXT: 'server.ext',\n};\n\nexport const HapiLifecycleMethodNames = new Set([\n  'onPreAuth',\n  'onCredentials',\n  'onPostAuth',\n  'onPreHandler',\n  'onPostHandler',\n  'onPreResponse',\n  'onRequest',\n]);\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-hapi\n * - Upstream version: @opentelemetry/instrumentation-hapi@0.64.0\n * - Types vendored from @hapi/hapi as simplified interfaces\n */\n\nimport type { Attributes } from '@opentelemetry/api';\nimport { HTTP_METHOD, HTTP_ROUTE } from '@sentry/conventions/attributes';\nimport type * as Hapi from './hapi-types';\nimport {\n  HapiLayerType,\n  HapiLifecycleMethodNames,\n  type HapiPluginObject,\n  type PatchableExtMethod,\n  type ServerExtDirectInput,\n} from './internal-types';\nimport { AttributeNames } from './enums/AttributeNames';\n\nexport function getPluginName<T>(plugin: Hapi.Plugin<T>): string {\n  if ((plugin as Hapi.PluginNameVersion).name) {\n    return (plugin as Hapi.PluginNameVersion).name;\n  } else {\n    return (plugin as Hapi.PluginPackage).pkg.name;\n  }\n}\n\nexport const isLifecycleExtType = (variableToCheck: unknown): variableToCheck is Hapi.ServerRequestExtType => {\n  return typeof variableToCheck === 'string' && HapiLifecycleMethodNames.has(variableToCheck);\n};\n\nexport const isLifecycleExtEventObj = (\n  variableToCheck: unknown,\n): variableToCheck is Hapi.ServerExtEventsRequestObject => {\n  const event = (variableToCheck as Hapi.ServerExtEventsRequestObject)?.type;\n  return event !== undefined && isLifecycleExtType(event);\n};\n\nexport const isDirectExtInput = (variableToCheck: unknown): variableToCheck is ServerExtDirectInput => {\n  return (\n    Array.isArray(variableToCheck) &&\n    variableToCheck.length <= 3 &&\n    isLifecycleExtType(variableToCheck[0]) &&\n    typeof variableToCheck[1] === 'function'\n  );\n};\n\nexport const isPatchableExtMethod = (\n  variableToCheck: PatchableExtMethod | PatchableExtMethod[],\n): variableToCheck is PatchableExtMethod => {\n  return !Array.isArray(variableToCheck);\n};\n\nexport const getRouteMetadata = (\n  route: Hapi.ServerRoute,\n  pluginName?: string,\n): {\n  attributes: Attributes;\n  name: string;\n} => {\n  const attributes: Attributes = {\n    [HTTP_ROUTE]: route.path,\n    // eslint-disable-next-line typescript/no-deprecated\n    [HTTP_METHOD]: route.method,\n  };\n\n  let name;\n  if (pluginName) {\n    attributes[AttributeNames.HAPI_TYPE] = HapiLayerType.PLUGIN;\n    attributes[AttributeNames.PLUGIN_NAME] = pluginName;\n    name = `${pluginName}: route - ${route.path}`;\n  } else {\n    attributes[AttributeNames.HAPI_TYPE] = HapiLayerType.ROUTER;\n    name = `route - ${route.path}`;\n  }\n\n  return { attributes, name };\n};\n\nexport const getExtMetadata = (\n  extPoint: Hapi.ServerRequestExtType,\n  pluginName?: string,\n  methodName?: string,\n): {\n  attributes: Attributes;\n  name: string;\n} => {\n  let baseName = `ext - ${extPoint}`;\n  if (methodName && methodName !== 'method') {\n    // method is the default name for the extension in the ServerExtEventsObject format.\n    baseName = `ext - ${extPoint} - ${methodName}`;\n  }\n  if (pluginName) {\n    return {\n      attributes: {\n        [AttributeNames.EXT_TYPE]: extPoint,\n        [AttributeNames.HAPI_TYPE]: HapiLayerType.EXT,\n        [AttributeNames.PLUGIN_NAME]: pluginName,\n      },\n      name: `${pluginName}: ${baseName}`,\n    };\n  }\n  return {\n    attributes: {\n      [AttributeNames.EXT_TYPE]: extPoint,\n      [AttributeNames.HAPI_TYPE]: HapiLayerType.EXT,\n    },\n    name: baseName,\n  };\n};\n\nexport const getPluginFromInput = <T>(pluginObj: HapiPluginObject<T>): Hapi.Plugin<T, void> => {\n  if ('plugin' in pluginObj) {\n    if ('plugin' in pluginObj.plugin) {\n      return pluginObj.plugin.plugin;\n    }\n    return pluginObj.plugin;\n  }\n  return pluginObj;\n};\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-hapi\n * - Upstream version: @opentelemetry/instrumentation-hapi@0.64.0\n * - Types vendored from @hapi/hapi as simplified interfaces\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n * - Span creation migrated to the @sentry/core API; op/origin folded into span creation\n */\n\nimport * as api from '@opentelemetry/api';\nimport { setHttpServerSpanRouteAttribute } from '../../../../utils/setHttpServerSpanRouteAttribute';\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\n\nimport type * as Hapi from './hapi-types';\nimport { SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, startSpan } from '@sentry/core';\nimport { AttributeNames } from './enums/AttributeNames';\nimport {\n  HapiComponentName,\n  handlerPatched,\n  type HapiServerRouteInput,\n  type PatchableServerRoute,\n  type HapiServerRouteInputMethod,\n  type HapiPluginInput,\n  type RegisterFunction,\n  type PatchableExtMethod,\n  type ServerExtDirectInput,\n} from './internal-types';\nimport {\n  getRouteMetadata,\n  getPluginName,\n  isLifecycleExtType,\n  isLifecycleExtEventObj,\n  getExtMetadata,\n  isDirectExtInput,\n  isPatchableExtMethod,\n  getPluginFromInput,\n} from './utils';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-hapi';\n\n/** Hapi instrumentation for OpenTelemetry */\nexport class HapiInstrumentation extends InstrumentationBase {\n  constructor(config: InstrumentationConfig = {}) {\n    super(PACKAGE_NAME, SDK_VERSION, config);\n  }\n\n  protected init() {\n    return new InstrumentationNodeModuleDefinition(\n      HapiComponentName,\n      ['>=17.0.0 <22'],\n      (module: any) => {\n        const moduleExports: typeof Hapi = module[Symbol.toStringTag] === 'Module' ? module.default : module;\n        if (!isWrapped(moduleExports.server)) {\n          this._wrap(moduleExports, 'server', this._getServerPatch.bind(this));\n        }\n\n        if (!isWrapped(moduleExports.Server)) {\n          this._wrap(moduleExports, 'Server', this._getServerPatch.bind(this));\n        }\n        return moduleExports;\n      },\n      (module: any) => {\n        const moduleExports: typeof Hapi = module[Symbol.toStringTag] === 'Module' ? module.default : module;\n        this._massUnwrap([moduleExports], ['server', 'Server']);\n      },\n    );\n  }\n\n  /**\n   * Patches the Hapi.server and Hapi.Server functions in order to instrument\n   * the server.route, server.ext, and server.register functions via calls to the\n   * @function _getServerRoutePatch, @function _getServerExtPatch, and\n   * @function _getServerRegisterPatch functions\n   * @param original - the original Hapi Server creation function\n   */\n  private _getServerPatch(original: (options?: Hapi.ServerOptions) => Hapi.Server) {\n    const instrumentation: HapiInstrumentation = this;\n    const self = this;\n    return function server(this: Hapi.Server, opts?: Hapi.ServerOptions) {\n      const newServer: Hapi.Server = original.apply(this, [opts]);\n\n      self._wrap(newServer, 'route', originalRouter => {\n        return instrumentation._getServerRoutePatch.bind(instrumentation)(originalRouter);\n      });\n\n      // Casting as any is necessary here due to multiple overloads on the Hapi.ext\n      // function, which requires supporting a variety of different parameters\n      // as extension inputs\n      self._wrap(newServer, 'ext', originalExtHandler => {\n        return instrumentation._getServerExtPatch.bind(instrumentation)(originalExtHandler as any);\n      });\n\n      // Casting as any is necessary here due to multiple overloads on the Hapi.Server.register\n      // function, which requires supporting a variety of different types of Plugin inputs\n      self._wrap(newServer, 'register', instrumentation._getServerRegisterPatch.bind(instrumentation));\n      return newServer;\n    };\n  }\n\n  /**\n   * Patches the plugin register function used by the Hapi Server. This function\n   * goes through each plugin that is being registered and adds instrumentation\n   * via a call to the @function _wrapRegisterHandler function.\n   * @param {RegisterFunction<T>} original - the original register function which\n   * registers each plugin on the server\n   */\n  private _getServerRegisterPatch<T>(original: RegisterFunction<T>): RegisterFunction<T> {\n    const instrumentation: HapiInstrumentation = this;\n    return function register(this: Hapi.Server, pluginInput: HapiPluginInput<T>, options?: Hapi.ServerRegisterOptions) {\n      if (Array.isArray(pluginInput)) {\n        for (const pluginObj of pluginInput) {\n          const plugin = getPluginFromInput(pluginObj);\n          instrumentation._wrapRegisterHandler(plugin);\n        }\n      } else {\n        const plugin = getPluginFromInput(pluginInput);\n        instrumentation._wrapRegisterHandler(plugin);\n      }\n      return original.apply(this, [pluginInput, options]);\n    };\n  }\n\n  /**\n   * Patches the Server.ext function which adds extension methods to the specified\n   * point along the request lifecycle. This function accepts the full range of\n   * accepted input into the standard Hapi `server.ext` function. For each extension,\n   * it adds instrumentation to the handler via a call to the @function _wrapExtMethods\n   * function.\n   * @param original - the original ext function which adds the extension method to the server\n   * @param {string} [pluginName] - if present, represents the name of the plugin responsible\n   * for adding this server extension. Else, signifies that the extension was added directly\n   */\n  private _getServerExtPatch(original: (...args: unknown[]) => unknown, pluginName?: string) {\n    const instrumentation: HapiInstrumentation = this;\n\n    return function ext(this: ThisParameterType<typeof original>, ...args: Parameters<typeof original>) {\n      if (Array.isArray(args[0])) {\n        const eventsList: Hapi.ServerExtEventsObject[] | Hapi.ServerExtEventsRequestObject[] = args[0];\n        for (let i = 0; i < eventsList.length; i++) {\n          const eventObj = eventsList[i]!;\n          if (isLifecycleExtType(eventObj.type)) {\n            const lifecycleEventObj = eventObj as Hapi.ServerExtEventsRequestObject;\n            const handler = instrumentation._wrapExtMethods(lifecycleEventObj.method, eventObj.type, pluginName);\n            lifecycleEventObj.method = handler;\n            eventsList[i] = lifecycleEventObj;\n          }\n        }\n        return original.apply(this, args);\n      } else if (isDirectExtInput(args)) {\n        const extInput: ServerExtDirectInput = args;\n        const method: PatchableExtMethod = extInput[1];\n        const handler = instrumentation._wrapExtMethods(method, extInput[0], pluginName);\n        return original.apply(this, [extInput[0], handler, extInput[2]]);\n      } else if (isLifecycleExtEventObj(args[0])) {\n        const lifecycleEventObj = args[0];\n        const handler = instrumentation._wrapExtMethods(lifecycleEventObj.method, lifecycleEventObj.type, pluginName);\n        lifecycleEventObj.method = handler;\n        return original.call(this, lifecycleEventObj);\n      }\n      return original.apply(this, args);\n    };\n  }\n\n  /**\n   * Patches the Server.route function. This function accepts either one or an array\n   * of Hapi.ServerRoute objects and adds instrumentation on each route via a call to\n   * the @function _wrapRouteHandler function.\n   * @param {HapiServerRouteInputMethod} original - the original route function which adds\n   * the route to the server\n   * @param {string} [pluginName] - if present, represents the name of the plugin responsible\n   * for adding this server route. Else, signifies that the route was added directly\n   */\n  private _getServerRoutePatch(original: HapiServerRouteInputMethod, pluginName?: string) {\n    const instrumentation: HapiInstrumentation = this;\n    return function route(this: Hapi.Server, route: HapiServerRouteInput): void {\n      if (Array.isArray(route)) {\n        for (let i = 0; i < route.length; i++) {\n          const newRoute = instrumentation._wrapRouteHandler.call(instrumentation, route[i]!, pluginName);\n          route[i] = newRoute;\n        }\n      } else {\n        // oxlint-disable-next-line no-param-reassign\n        route = instrumentation._wrapRouteHandler.call(instrumentation, route, pluginName);\n      }\n      return original.apply(this, [route]);\n    };\n  }\n\n  /**\n   * Wraps newly registered plugins to add instrumentation to the plugin's clone of\n   * the original server. Specifically, wraps the server.route and server.ext functions\n   * via calls to @function _getServerRoutePatch and @function _getServerExtPatch\n   * @param {Hapi.Plugin<T>} plugin - the new plugin which is being instrumented\n   */\n  private _wrapRegisterHandler<T>(plugin: Hapi.Plugin<T>): void {\n    const instrumentation: HapiInstrumentation = this;\n    const pluginName = getPluginName(plugin);\n    const oldRegister = plugin.register;\n    const self = this;\n    const newRegisterHandler = function (this: typeof plugin, server: Hapi.Server, options: T) {\n      self._wrap(server, 'route', original => {\n        return instrumentation._getServerRoutePatch.bind(instrumentation)(original, pluginName);\n      });\n\n      // Casting as any is necessary here due to multiple overloads on the Hapi.ext\n      // function, which requires supporting a variety of different parameters\n      // as extension inputs\n      self._wrap(server, 'ext', originalExtHandler => {\n        return instrumentation._getServerExtPatch.bind(instrumentation)(originalExtHandler as any, pluginName);\n      });\n      return oldRegister.call(this, server, options);\n    };\n    plugin.register = newRegisterHandler;\n  }\n\n  /**\n   * Wraps request extension methods to add instrumentation to each new extension handler.\n   * Patches each individual extension in order to create the\n   * span and propagate context. It does not create spans when there is no parent span.\n   * @param {PatchableExtMethod | PatchableExtMethod[]} method - the request extension\n   * handler which is being instrumented\n   * @param {Hapi.ServerRequestExtType} extPoint - the point in the Hapi request lifecycle\n   * which this extension targets\n   * @param {string} [pluginName] - if present, represents the name of the plugin responsible\n   * for adding this server route. Else, signifies that the route was added directly\n   */\n  private _wrapExtMethods<T extends PatchableExtMethod | PatchableExtMethod[]>(\n    method: T,\n    extPoint: Hapi.ServerRequestExtType,\n    pluginName?: string,\n  ): T {\n    const instrumentation: HapiInstrumentation = this;\n    if (method instanceof Array) {\n      for (let i = 0; i < method.length; i++) {\n        method[i] = instrumentation._wrapExtMethods(method[i]!, extPoint);\n      }\n      return method;\n    } else if (isPatchableExtMethod(method)) {\n      if (method[handlerPatched] === true) return method;\n      method[handlerPatched] = true;\n\n      const newHandler: PatchableExtMethod = function (this: any, ...params: Parameters<Hapi.Lifecycle.Method>) {\n        if (api.trace.getSpan(api.context.active()) === undefined) {\n          return method.apply(this, params);\n        }\n        const metadata = getExtMetadata(extPoint, pluginName, method.name);\n        return startSpan(\n          {\n            name: metadata.name,\n            op: `${metadata.attributes[AttributeNames.HAPI_TYPE]}.hapi`,\n            attributes: {\n              ...metadata.attributes,\n              [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.otel.hapi',\n            },\n          },\n          () => method.apply(undefined, params),\n        );\n      };\n      return newHandler as T;\n    }\n    return method;\n  }\n\n  /**\n   * Patches each individual route handler method in order to create the\n   * span and propagate context. It does not create spans when there is no parent span.\n   * @param {PatchableServerRoute} route - the route handler which is being instrumented\n   * @param {string} [pluginName] - if present, represents the name of the plugin responsible\n   * for adding this server route. Else, signifies that the route was added directly\n   */\n  private _wrapRouteHandler(route: PatchableServerRoute, pluginName?: string): PatchableServerRoute {\n    if (route[handlerPatched] === true) return route;\n    route[handlerPatched] = true;\n\n    const wrapHandler: (oldHandler: Hapi.Lifecycle.Method) => Hapi.Lifecycle.Method = oldHandler => {\n      return function (this: any, ...params: Parameters<Hapi.Lifecycle.Method>) {\n        if (api.trace.getSpan(api.context.active()) === undefined) {\n          return oldHandler.call(this, ...params);\n        }\n        setHttpServerSpanRouteAttribute(route.path);\n        const metadata = getRouteMetadata(route, pluginName);\n        return startSpan(\n          {\n            name: metadata.name,\n            op: `${metadata.attributes[AttributeNames.HAPI_TYPE]}.hapi`,\n            attributes: {\n              ...metadata.attributes,\n              [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.otel.hapi',\n            },\n          },\n          () => oldHandler.call(this, ...params),\n        );\n      };\n    };\n\n    if (typeof route.handler === 'function') {\n      route.handler = wrapHandler(route.handler as Hapi.Lifecycle.Method);\n    } else if (typeof route.options === 'function') {\n      const oldOptions = route.options;\n      route.options = function (server) {\n        const options = oldOptions(server);\n        if (typeof options.handler === 'function') {\n          options.handler = wrapHandler(options.handler as Hapi.Lifecycle.Method);\n        }\n        return options;\n      };\n    } else if (typeof route.options?.handler === 'function') {\n      route.options.handler = wrapHandler(route.options.handler as Hapi.Lifecycle.Method);\n    }\n    return route;\n  }\n}\n", "import { HapiInstrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport {\n  captureException,\n  debug,\n  defineIntegration,\n  getDefaultIsolationScope,\n  getIsolationScope,\n  SDK_VERSION,\n} from '@sentry/core';\nimport { ensureIsWrapped, generateInstrumentOnce } from '@sentry/node-core';\nimport { DEBUG_BUILD } from '../../../debug-build';\nimport type { Request, RequestEvent, Server } from './types';\n\nconst INTEGRATION_NAME = 'Hapi' as const;\n\nexport const instrumentHapi = generateInstrumentOnce(INTEGRATION_NAME, () => new HapiInstrumentation());\n\nconst _hapiIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      instrumentHapi();\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for [Hapi](https://hapi.dev/).\n *\n * If you also want to capture errors, you need to call `setupHapiErrorHandler(server)` after you set up your server.\n *\n * For more information, see the [hapi documentation](https://docs.sentry.io/platforms/javascript/guides/hapi/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *   integrations: [Sentry.hapiIntegration()],\n * })\n * ```\n */\nexport const hapiIntegration = defineIntegration(_hapiIntegration);\n\nfunction isErrorEvent(event: unknown): event is RequestEvent {\n  return !!(event && typeof event === 'object' && 'error' in event && event.error);\n}\n\nfunction sendErrorToSentry(errorData: object): void {\n  captureException(errorData, {\n    mechanism: {\n      type: 'auto.function.hapi',\n      handled: false,\n    },\n  });\n}\n\nexport const hapiErrorPlugin = {\n  name: 'SentryHapiErrorPlugin',\n  version: SDK_VERSION,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  register: async function (serverArg: Record<any, any>) {\n    const server = serverArg as unknown as Server;\n\n    server.events.on({ name: 'request', channels: ['error'] }, (request: Request, event: RequestEvent) => {\n      if (getIsolationScope() !== getDefaultIsolationScope()) {\n        const route = request.route;\n        if (route.path) {\n          getIsolationScope().setTransactionName(`${route.method.toUpperCase()} ${route.path}`);\n        }\n      } else {\n        DEBUG_BUILD &&\n          debug.warn('Isolation scope is still the default isolation scope - skipping setting transactionName');\n      }\n\n      if (isErrorEvent(event)) {\n        sendErrorToSentry(event.error);\n      }\n    });\n  },\n};\n\n/**\n * Add a Hapi plugin to capture errors to Sentry.\n *\n * @param server The Hapi server to attach the error handler to\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n * const Hapi = require('@hapi/hapi');\n *\n * const init = async () => {\n *   const server = Hapi.server();\n *\n *   // all your routes here\n *\n *   await Sentry.setupHapiErrorHandler(server);\n *\n *   await server.start();\n * };\n * ```\n */\nexport async function setupHapiErrorHandler(server: Server): Promise<void> {\n  await server.register(hapiErrorPlugin);\n  ensureIsWrapped(server.register, 'hapi');\n}\n", "export const AttributeNames = {\n  HONO_TYPE: 'hono.type',\n  HONO_NAME: 'hono.name',\n} as const;\n\nexport type AttributeNames = (typeof AttributeNames)[keyof typeof AttributeNames];\n\nexport const HonoTypes = {\n  MIDDLEWARE: 'middleware',\n  REQUEST_HANDLER: 'request_handler',\n} as const;\n\nexport type HonoTypes = (typeof HonoTypes)[keyof typeof HonoTypes];\n", "import type { Span } from '@opentelemetry/api';\nimport { context, SpanStatusCode, trace } from '@opentelemetry/api';\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition } from '@opentelemetry/instrumentation';\nimport { isThenable } from '@sentry/core';\nimport { AttributeNames, HonoTypes } from './constants';\nimport type {\n  Context,\n  Handler,\n  HandlerInterface,\n  Hono,\n  HonoInstance,\n  MiddlewareHandler,\n  MiddlewareHandlerInterface,\n  Next,\n  OnHandlerInterface,\n} from './types';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-hono';\nconst PACKAGE_VERSION = '0.0.1';\n\nexport interface HonoResponseHookFunction {\n  (span: Span): void;\n}\n\nexport interface HonoInstrumentationConfig extends InstrumentationConfig {\n  /** Function for adding custom span attributes from the response */\n  responseHook?: HonoResponseHookFunction;\n}\n\n/**\n * Hono instrumentation for OpenTelemetry\n */\nexport class HonoInstrumentation extends InstrumentationBase<HonoInstrumentationConfig> {\n  public constructor(config: HonoInstrumentationConfig = {}) {\n    super(PACKAGE_NAME, PACKAGE_VERSION, config);\n  }\n\n  /**\n   * Initialize the instrumentation.\n   */\n  public init(): InstrumentationNodeModuleDefinition[] {\n    return [\n      new InstrumentationNodeModuleDefinition('hono', ['>=4.0.0 <5'], moduleExports => this._patch(moduleExports)),\n    ];\n  }\n\n  /**\n   * Patches the module exports to instrument Hono.\n   */\n  private _patch(moduleExports: { Hono: Hono }): { Hono: Hono } {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const instrumentation = this;\n\n    class WrappedHono extends moduleExports.Hono {\n      public constructor(...args: unknown[]) {\n        super(...args);\n\n        instrumentation._wrap(this, 'get', instrumentation._patchHandler());\n        instrumentation._wrap(this, 'post', instrumentation._patchHandler());\n        instrumentation._wrap(this, 'put', instrumentation._patchHandler());\n        instrumentation._wrap(this, 'delete', instrumentation._patchHandler());\n        instrumentation._wrap(this, 'options', instrumentation._patchHandler());\n        instrumentation._wrap(this, 'patch', instrumentation._patchHandler());\n        instrumentation._wrap(this, 'all', instrumentation._patchHandler());\n        instrumentation._wrap(this, 'on', instrumentation._patchOnHandler());\n        instrumentation._wrap(this, 'use', instrumentation._patchMiddlewareHandler());\n      }\n    }\n\n    try {\n      moduleExports.Hono = WrappedHono;\n    } catch {\n      // This is a workaround for environments where direct assignment is not allowed.\n      return { ...moduleExports, Hono: WrappedHono };\n    }\n\n    return moduleExports;\n  }\n\n  /**\n   * Patches the route handler to instrument it.\n   */\n  private _patchHandler(): (original: HandlerInterface) => HandlerInterface {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const instrumentation = this;\n\n    return function (original: HandlerInterface) {\n      return function wrappedHandler(this: HonoInstance, ...args: unknown[]) {\n        if (typeof args[0] === 'string') {\n          const path = args[0];\n          if (args.length === 1) {\n            return original.apply(this, [path]);\n          }\n\n          const handlers = args.slice(1);\n          return original.apply(this, [\n            path,\n            ...handlers.map(handler => instrumentation._wrapHandler(handler as Handler | MiddlewareHandler)),\n          ]);\n        }\n\n        return original.apply(\n          this,\n          args.map(handler => instrumentation._wrapHandler(handler as Handler | MiddlewareHandler)),\n        );\n      };\n    };\n  }\n\n  /**\n   * Patches the 'on' handler to instrument it.\n   */\n  private _patchOnHandler(): (original: OnHandlerInterface) => OnHandlerInterface {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const instrumentation = this;\n\n    return function (original: OnHandlerInterface) {\n      return function wrappedHandler(this: HonoInstance, ...args: unknown[]) {\n        const handlers = args.slice(2);\n        return original.apply(this, [\n          ...args.slice(0, 2),\n          ...handlers.map(handler => instrumentation._wrapHandler(handler as Handler | MiddlewareHandler)),\n        ]);\n      };\n    };\n  }\n\n  /**\n   * Patches the middleware handler to instrument it.\n   */\n  private _patchMiddlewareHandler(): (original: MiddlewareHandlerInterface) => MiddlewareHandlerInterface {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const instrumentation = this;\n\n    return function (original: MiddlewareHandlerInterface) {\n      return function wrappedHandler(this: HonoInstance, ...args: unknown[]) {\n        if (typeof args[0] === 'string') {\n          const path = args[0];\n          if (args.length === 1) {\n            return original.apply(this, [path]);\n          }\n\n          const handlers = args.slice(1);\n          return original.apply(this, [\n            path,\n            ...handlers.map(handler => instrumentation._wrapHandler(handler as MiddlewareHandler)),\n          ]);\n        }\n\n        return original.apply(\n          this,\n          args.map(handler => instrumentation._wrapHandler(handler as MiddlewareHandler)),\n        );\n      };\n    };\n  }\n\n  /**\n   * Wraps a handler or middleware handler to apply instrumentation.\n   */\n  private _wrapHandler(handler: Handler | MiddlewareHandler): Handler | MiddlewareHandler {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const instrumentation = this;\n\n    return function (this: unknown, c: Context, next: Next) {\n      if (!instrumentation.isEnabled()) {\n        return handler.apply(this, [c, next]);\n      }\n\n      const path = c.req.path;\n      const span = instrumentation.tracer.startSpan(path);\n\n      return context.with(trace.setSpan(context.active(), span), () => {\n        return instrumentation._safeExecute(\n          () => {\n            const result = handler.apply(this, [c, next]);\n            if (isThenable(result)) {\n              return result.then(result => {\n                const type = instrumentation._determineHandlerType(result);\n                span.setAttributes({\n                  [AttributeNames.HONO_TYPE]: type,\n                  [AttributeNames.HONO_NAME]: type === HonoTypes.REQUEST_HANDLER ? path : handler.name || 'anonymous',\n                });\n                instrumentation.getConfig().responseHook?.(span);\n                return result;\n              });\n            } else {\n              const type = instrumentation._determineHandlerType(result);\n              span.setAttributes({\n                [AttributeNames.HONO_TYPE]: type,\n                [AttributeNames.HONO_NAME]: type === HonoTypes.REQUEST_HANDLER ? path : handler.name || 'anonymous',\n              });\n              instrumentation.getConfig().responseHook?.(span);\n              return result;\n            }\n          },\n          () => span.end(),\n          error => {\n            instrumentation._handleError(span, error);\n            span.end();\n          },\n        );\n      });\n    };\n  }\n\n  /**\n   * Safely executes a function and handles errors.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private _safeExecute(execute: () => any, onSuccess: () => void, onFailure: (error: unknown) => void): () => any {\n    try {\n      const result = execute();\n\n      if (isThenable(result)) {\n        result.then(\n          () => onSuccess(),\n          (error: unknown) => onFailure(error),\n        );\n      } else {\n        onSuccess();\n      }\n\n      return result;\n    } catch (error: unknown) {\n      onFailure(error);\n      throw error;\n    }\n  }\n\n  /**\n   * Determines the handler type based on the result.\n   * @param result\n   * @private\n   */\n  private _determineHandlerType(result: unknown): HonoTypes {\n    return result === undefined ? HonoTypes.MIDDLEWARE : HonoTypes.REQUEST_HANDLER;\n  }\n\n  /**\n   * Handles errors by setting the span status and recording the exception.\n   */\n  private _handleError(span: Span, error: unknown): void {\n    if (error instanceof Error) {\n      span.setStatus({\n        code: SpanStatusCode.ERROR,\n        message: error.message,\n      });\n      span.recordException(error);\n    }\n  }\n}\n", "import { HTTP_REQUEST_METHOD, HTTP_ROUTE } from '@sentry/conventions/attributes';\nimport type { IntegrationFn, Span } from '@sentry/core';\nimport {\n  captureException,\n  debug,\n  defineIntegration,\n  getDefaultIsolationScope,\n  getIsolationScope,\n  httpRequestToRequestData,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  spanToJSON,\n} from '@sentry/core';\nimport { ensureIsWrapped, generateInstrumentOnce } from '@sentry/node-core';\nimport { DEBUG_BUILD } from '../../../debug-build';\nimport { AttributeNames } from './constants';\nimport { HonoInstrumentation } from './instrumentation';\nimport type { Context, MiddlewareHandler, MiddlewareHandlerInterface, Next } from './types';\n\nconst INTEGRATION_NAME = 'Hono' as const;\n\nfunction addHonoSpanAttributes(span: Span): void {\n  const attributes = spanToJSON(span).data;\n  const type = attributes[AttributeNames.HONO_TYPE];\n  if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] || !type) {\n    return;\n  }\n\n  span.setAttributes({\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.otel.hono',\n    [SEMANTIC_ATTRIBUTE_SENTRY_OP]: `${type}.hono`,\n  });\n\n  const name = attributes[AttributeNames.HONO_NAME];\n  if (typeof name === 'string') {\n    span.updateName(name);\n  }\n\n  if (getIsolationScope() === getDefaultIsolationScope()) {\n    DEBUG_BUILD && debug.warn('Isolation scope is default isolation scope - skipping setting transactionName');\n    return;\n  }\n\n  const route = attributes[HTTP_ROUTE];\n  const method = attributes[HTTP_REQUEST_METHOD];\n  if (typeof route === 'string' && typeof method === 'string') {\n    getIsolationScope().setTransactionName(`${method} ${route}`);\n  }\n}\n\nexport const instrumentHono = generateInstrumentOnce(\n  INTEGRATION_NAME,\n  () =>\n    new HonoInstrumentation({\n      responseHook: span => {\n        addHonoSpanAttributes(span);\n      },\n    }),\n);\n\nconst _honoIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      instrumentHono();\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for [Hono](https://hono.dev/).\n *\n * If you also want to capture errors, you need to call `setupHonoErrorHandler(app)` after you set up your Hono server.\n *\n * For more information, see the [hono documentation](https://docs.sentry.io/platforms/javascript/guides/hono/).\n *\n * @deprecated Use the `@sentry/hono` package instead. The `sentry()` middleware from `@sentry/hono/node` handles\n * tracing and error capturing automatically without needing this integration or `setupHonoErrorHandler`.\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *   integrations: [Sentry.honoIntegration()],\n * })\n * ```\n */\nexport const honoIntegration = defineIntegration(_honoIntegration);\n\ninterface HonoHandlerOptions {\n  /**\n   * Callback method deciding whether error should be captured and sent to Sentry\n   * @param error Captured Hono error\n   */\n  shouldHandleError: (context: Context) => boolean;\n}\n\nfunction honoRequestHandler(): MiddlewareHandler {\n  return async function sentryRequestMiddleware(context: Context, next: Next): Promise<void> {\n    const normalizedRequest = httpRequestToRequestData(context.req);\n    getIsolationScope().setSDKProcessingMetadata({ normalizedRequest });\n    await next();\n  };\n}\n\nfunction defaultShouldHandleError(context: Context): boolean {\n  const statusCode = context.res.status;\n  return statusCode >= 500;\n}\n\nfunction honoErrorHandler(options?: Partial<HonoHandlerOptions>): MiddlewareHandler {\n  return async function sentryErrorMiddleware(context: Context, next: Next): Promise<void> {\n    await next();\n\n    const shouldHandleError = options?.shouldHandleError || defaultShouldHandleError;\n    if (shouldHandleError(context)) {\n      (context.res as { sentry?: string }).sentry = captureException(context.error, {\n        mechanism: {\n          type: 'auto.middleware.hono',\n          handled: false,\n        },\n      });\n    }\n  };\n}\n\n/**\n * Add a Hono error handler to capture errors to Sentry.\n *\n * @param app The Hono instances\n * @param options Configuration options for the handler\n *\n * @deprecated Use the `@sentry/hono` package instead. The `sentry()` middleware from `@sentry/hono/node` handles\n * error capturing automatically without needing this function or `honoIntegration`.\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n * const { Hono } = require(\"hono\");\n *\n * const app = new Hono();\n *\n * Sentry.setupHonoErrorHandler(app);\n *\n * // Add your routes, etc.\n * ```\n */\nexport function setupHonoErrorHandler(\n  app: { use: MiddlewareHandlerInterface },\n  options?: Partial<HonoHandlerOptions>,\n): void {\n  app.use(honoRequestHandler());\n  app.use(honoErrorHandler(options));\n  ensureIsWrapped(app.use, 'hono');\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-koa\n * - Upstream version: @opentelemetry/instrumentation-koa@0.66.0\n */\n\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\n\nexport enum KoaLayerType {\n  ROUTER = 'router',\n  MIDDLEWARE = 'middleware',\n}\n\n/**\n * Options available for the Koa Instrumentation (see [documentation](https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-Instrumentation-koa#koa-Instrumentation-options))\n */\nexport interface KoaInstrumentationConfig extends InstrumentationConfig {\n  /** Ignore specific layers based on their type */\n  ignoreLayersType?: KoaLayerType[];\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-koa\n * - Upstream version: @opentelemetry/instrumentation-koa@0.66.0\n */\n\nexport enum AttributeNames {\n  KOA_TYPE = 'koa.type',\n  KOA_NAME = 'koa.name',\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-koa\n * - Upstream version: @opentelemetry/instrumentation-koa@0.66.0\n */\n\nimport { KoaLayerType, type KoaInstrumentationConfig } from './types';\nimport type { KoaContext, KoaMiddleware } from './internal-types';\nimport { AttributeNames } from './enums/AttributeNames';\nimport type { Attributes } from '@opentelemetry/api';\nimport { CODE_FUNCTION_NAME, HTTP_ROUTE } from '@sentry/conventions/attributes';\n\nexport const getMiddlewareMetadata = (\n  context: KoaContext,\n  layer: KoaMiddleware,\n  isRouter: boolean,\n  layerPath?: string | RegExp,\n): {\n  attributes: Attributes;\n  name: string;\n} => {\n  if (isRouter) {\n    return {\n      attributes: {\n        [AttributeNames.KOA_NAME]: layerPath?.toString(), // TODO(v11): remove, replaced by http.route\n        [AttributeNames.KOA_TYPE]: KoaLayerType.ROUTER,\n        [HTTP_ROUTE]: layerPath?.toString(),\n      },\n      name: context._matchedRouteName || `router - ${layerPath}`,\n    };\n  } else {\n    return {\n      attributes: {\n        [AttributeNames.KOA_NAME]: layer.name ?? 'middleware', // TODO(v11): remove, replaced by code.function.name\n        [AttributeNames.KOA_TYPE]: KoaLayerType.MIDDLEWARE,\n        [CODE_FUNCTION_NAME]: layer.name ?? 'middleware',\n      },\n      name: `middleware - ${layer.name}`,\n    };\n  }\n};\n\n/**\n * Check whether the given request is ignored by configuration\n * @param [list] List of ignore patterns\n * @param [onException] callback for doing something when an exception has\n *     occurred\n */\nexport const isLayerIgnored = (type: KoaLayerType, config?: KoaInstrumentationConfig): boolean => {\n  return !!(Array.isArray(config?.ignoreLayersType) && config?.ignoreLayersType?.includes(type));\n};\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-koa\n * - Upstream version: @opentelemetry/instrumentation-koa@0.66.0\n * - Some types vendored from @types/koa, @types/koa-compose, and @types/koa__router with simplifications\n */\n\ninterface DefaultState {}\n\nexport type Next = () => Promise<unknown>;\n\ntype ParameterizedContext<_StateT = DefaultState, ContextT = {}, _ResponseBodyT = unknown> = {\n  [key: string]: unknown;\n} & ContextT;\n\ntype Middleware<StateT = DefaultState, ContextT = {}, ResponseBodyT = unknown> = (\n  context: ParameterizedContext<StateT, ContextT, ResponseBodyT>,\n  next: Next,\n) => unknown;\n\ninterface RouterParamContext<StateT = DefaultState, ContextT = {}> {\n  params: Record<string, string>;\n  router: Router<StateT, ContextT>;\n  _matchedRoute: string | RegExp | undefined;\n  _matchedRouteName: string | undefined;\n}\n\ninterface Layer {\n  path: string | RegExp;\n  stack: KoaMiddleware[];\n}\n\nexport interface Router<_StateT = DefaultState, _ContextT = {}> {\n  stack: Layer[];\n}\n\nexport type KoaContext = ParameterizedContext<DefaultState, RouterParamContext>;\nexport type KoaMiddleware = Middleware<DefaultState, KoaContext> & {\n  router?: Router;\n};\n\n/**\n * This symbol is used to mark a Koa layer as being already instrumented\n * since its possible to use a given layer multiple times (ex: middlewares)\n */\nexport const kLayerPatched: unique symbol = Symbol('koa-layer-patched');\n\nexport type KoaPatchedMiddleware = KoaMiddleware & {\n  [kLayerPatched]?: boolean;\n};\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-koa\n * - Upstream version: @opentelemetry/instrumentation-koa@0.66.0\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n * - Span creation migrated to the @sentry/core API; op/origin/name and transaction name folded into\n *   span creation (previously set via a Sentry requestHook)\n */\n\nimport * as api from '@opentelemetry/api';\nimport { isWrapped, InstrumentationBase, InstrumentationNodeModuleDefinition } from '@opentelemetry/instrumentation';\n\nimport { KoaLayerType, type KoaInstrumentationConfig } from './types';\nimport {\n  debug,\n  getDefaultIsolationScope,\n  getIsolationScope,\n  SDK_VERSION,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  startSpan,\n} from '@sentry/core';\nimport { HTTP_ROUTE } from '@sentry/conventions/attributes';\nimport { getMiddlewareMetadata, isLayerIgnored } from './utils';\nimport { setHttpServerSpanRouteAttribute } from '../../../../utils/setHttpServerSpanRouteAttribute';\nimport { DEBUG_BUILD } from '../../../../debug-build';\nimport { AttributeNames } from './enums/AttributeNames';\nimport {\n  kLayerPatched,\n  type Next,\n  type KoaContext,\n  type KoaMiddleware,\n  type KoaPatchedMiddleware,\n} from './internal-types';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-koa';\n\ninterface KoaModuleExports {\n  prototype: { use: KoaMiddleware };\n}\n\ntype KoaModule = KoaModuleExports & { [Symbol.toStringTag]?: string; default?: KoaModuleExports };\n\n/** Koa instrumentation for OpenTelemetry */\nexport class KoaInstrumentation extends InstrumentationBase<KoaInstrumentationConfig> {\n  constructor(config: KoaInstrumentationConfig = {}) {\n    super(PACKAGE_NAME, SDK_VERSION, config);\n  }\n\n  protected init() {\n    return new InstrumentationNodeModuleDefinition(\n      'koa',\n      ['>=2.0.0 <4'],\n      (module: KoaModule) => {\n        const moduleExports =\n          module[Symbol.toStringTag] === 'Module'\n            ? module.default // ESM\n            : module; // CommonJS\n        if (moduleExports == null) {\n          return moduleExports;\n        }\n        if (isWrapped(moduleExports.prototype.use)) {\n          this._unwrap(moduleExports.prototype, 'use');\n        }\n        this._wrap(moduleExports.prototype, 'use', this._getKoaUsePatch.bind(this));\n        return module;\n      },\n      (module: KoaModule) => {\n        const moduleExports =\n          module[Symbol.toStringTag] === 'Module'\n            ? module.default // ESM\n            : module; // CommonJS\n        if (moduleExports && isWrapped(moduleExports.prototype.use)) {\n          this._unwrap(moduleExports.prototype, 'use');\n        }\n      },\n    );\n  }\n\n  /**\n   * Patches the Koa.use function in order to instrument each original\n   * middleware layer which is introduced\n   * @param {KoaMiddleware} middleware - the original middleware function\n   */\n  private _getKoaUsePatch(original: (middleware: KoaMiddleware) => unknown) {\n    const patchRouterDispatch = this._patchRouterDispatch.bind(this);\n    const patchLayer = this._patchLayer.bind(this);\n    return function use(this: unknown, middlewareFunction: KoaMiddleware) {\n      const patchedFunction = middlewareFunction.router\n        ? patchRouterDispatch(middlewareFunction)\n        : patchLayer(middlewareFunction, false);\n      return original.apply(this, [patchedFunction]);\n    };\n  }\n\n  /**\n   * Patches the dispatch function used by @koa/router. This function\n   * goes through each routed middleware and adds instrumentation via a call\n   * to the @function _patchLayer function.\n   * @param {KoaMiddleware} dispatchLayer - the original dispatch function which dispatches\n   * routed middleware\n   */\n  private _patchRouterDispatch(dispatchLayer: KoaMiddleware): KoaMiddleware {\n    const router = dispatchLayer.router;\n\n    const routesStack = router?.stack ?? [];\n    for (const pathLayer of routesStack) {\n      const path = pathLayer.path;\n      const pathStack = pathLayer.stack;\n      for (let j = 0; j < pathStack.length; j++) {\n        const routedMiddleware: KoaMiddleware = pathStack[j]!;\n        pathStack[j] = this._patchLayer(routedMiddleware, true, path);\n      }\n    }\n\n    return dispatchLayer;\n  }\n\n  /**\n   * Patches each individual @param middlewareLayer function in order to create the\n   * span and propagate context. It does not create spans when there is no parent span.\n   * @param {KoaMiddleware} middlewareLayer - the original middleware function.\n   * @param {boolean} isRouter - tracks whether the original middleware function\n   * was dispatched by the router originally\n   * @param {string?} layerPath - if present, provides additional data from the\n   * router about the routed path which the middleware is attached to\n   */\n  private _patchLayer(\n    middlewareLayer: KoaPatchedMiddleware,\n    isRouter: boolean,\n    layerPath?: string | RegExp,\n  ): KoaMiddleware {\n    const layerType = isRouter ? KoaLayerType.ROUTER : KoaLayerType.MIDDLEWARE;\n    // Skip patching layer if its ignored in the config\n    if (middlewareLayer[kLayerPatched] === true || isLayerIgnored(layerType, this.getConfig())) return middlewareLayer;\n\n    if (\n      middlewareLayer.constructor.name === 'GeneratorFunction' ||\n      middlewareLayer.constructor.name === 'AsyncGeneratorFunction'\n    ) {\n      return middlewareLayer;\n    }\n\n    middlewareLayer[kLayerPatched] = true;\n\n    return (context: KoaContext, next: Next) => {\n      const parent = api.trace.getSpan(api.context.active());\n      if (parent === undefined) {\n        return middlewareLayer(context, next);\n      }\n      const metadata = getMiddlewareMetadata(context, middlewareLayer, isRouter, layerPath);\n\n      if (context._matchedRoute) {\n        setHttpServerSpanRouteAttribute(context._matchedRoute.toString());\n      }\n\n      const koaName = metadata.attributes[AttributeNames.KOA_NAME];\n      // Somehow, name is sometimes `''` for middleware spans\n      // See: https://github.com/open-telemetry/opentelemetry-js-contrib/issues/2220\n      const name = typeof koaName === 'string' ? koaName || '< unknown >' : metadata.name;\n\n      return startSpan(\n        {\n          name,\n          op: `${layerType}.koa`,\n          attributes: {\n            ...metadata.attributes,\n            [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.otel.koa',\n          },\n        },\n        () => {\n          const route = metadata.attributes[HTTP_ROUTE];\n          if (getIsolationScope() === getDefaultIsolationScope()) {\n            DEBUG_BUILD && debug.warn('Isolation scope is default isolation scope - skipping setting transactionName');\n          } else if (route) {\n            const method = (context.request as { method?: string } | undefined)?.method?.toUpperCase() || 'GET';\n            getIsolationScope().setTransactionName(`${method} ${route}`);\n          }\n          return middlewareLayer(context, next);\n        },\n      );\n    };\n  }\n}\n", "import type { KoaInstrumentationConfig, KoaLayerType } from './vendored/types';\nimport { KoaInstrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { captureException, defineIntegration } from '@sentry/core';\nimport { ensureIsWrapped, generateInstrumentOnce } from '@sentry/node-core';\n\ninterface KoaOptions {\n  /**\n   * Ignore layers of specified types\n   */\n  ignoreLayersType?: Array<'middleware' | 'router'>;\n}\n\nconst INTEGRATION_NAME = 'Koa' as const;\n\nexport const instrumentKoa = generateInstrumentOnce(\n  INTEGRATION_NAME,\n  KoaInstrumentation,\n  (options: KoaOptions = {}) => {\n    return {\n      ignoreLayersType: options.ignoreLayersType as KoaLayerType[],\n    } satisfies KoaInstrumentationConfig;\n  },\n);\n\nconst _koaIntegration = ((options: KoaOptions = {}) => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      instrumentKoa(options);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for [Koa](https://koajs.com/).\n *\n * If you also want to capture errors, you need to call `setupKoaErrorHandler(app)` after you set up your Koa server.\n *\n * For more information, see the [koa documentation](https://docs.sentry.io/platforms/javascript/guides/koa/).\n *\n * @param {KoaOptions} options Configuration options for the Koa integration.\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *   integrations: [Sentry.koaIntegration()],\n * })\n * ```\n *\n * @example\n * ```javascript\n * // To ignore middleware spans\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *   integrations: [\n *     Sentry.koaIntegration({\n *       ignoreLayersType: ['middleware']\n *     })\n *   ],\n * })\n * ```\n */\nexport const koaIntegration = defineIntegration(_koaIntegration);\n\n/**\n * Add an Koa error handler to capture errors to Sentry.\n *\n * The error handler must be before any other middleware and after all controllers.\n *\n * @param app The Express instances\n * @param options {ExpressHandlerOptions} Configuration options for the handler\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n * const Koa = require(\"koa\");\n *\n * const app = new Koa();\n *\n * Sentry.setupKoaErrorHandler(app);\n *\n * // Add your routes, etc.\n *\n * app.listen(3000);\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const setupKoaErrorHandler = (app: { use: (arg0: (ctx: any, next: any) => Promise<void>) => void }): void => {\n  app.use(async (ctx, next) => {\n    try {\n      await next();\n    } catch (error) {\n      captureException(error, {\n        mechanism: {\n          handled: false,\n          type: 'auto.middleware.koa',\n        },\n      });\n      throw error;\n    }\n  });\n\n  ensureIsWrapped(app.use, 'koa');\n};\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-connect\n * - Upstream version: @opentelemetry/instrumentation-connect@0.61.0\n */\n\nexport enum AttributeNames {\n  CONNECT_TYPE = 'connect.type',\n  CONNECT_NAME = 'connect.name',\n}\n\nexport enum ConnectTypes {\n  MIDDLEWARE = 'middleware',\n  REQUEST_HANDLER = 'request_handler',\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-connect\n * - Upstream version: @opentelemetry/instrumentation-connect@0.61.0\n * - Some types vendored from @types/connect\n */\n\nimport type * as http from 'http';\n\nexport type IncomingMessage = http.IncomingMessage & {\n  originalUrl?: http.IncomingMessage['url'] | undefined;\n};\n\nexport type NextFunction = (err?: unknown) => void;\n\nexport type SimpleHandleFunction = (req: IncomingMessage, res: http.ServerResponse) => void;\nexport type NextHandleFunction = (req: IncomingMessage, res: http.ServerResponse, next: NextFunction) => void;\nexport type ErrorHandleFunction = (\n  err: unknown,\n  req: IncomingMessage,\n  res: http.ServerResponse,\n  next: NextFunction,\n) => void;\nexport type HandleFunction = SimpleHandleFunction | NextHandleFunction | ErrorHandleFunction;\n\nexport interface Server extends NodeJS.EventEmitter {\n  (req: http.IncomingMessage, res: http.ServerResponse, next?: Function): void;\n\n  route: string;\n  stack: Array<{ route: string; handle: HandleFunction | http.Server }>;\n\n  use(fn: NextHandleFunction): Server;\n  use(fn: HandleFunction): Server;\n  use(route: string, fn: NextHandleFunction): Server;\n  use(route: string, fn: HandleFunction): Server;\n\n  handle(req: http.IncomingMessage, res: http.ServerResponse, next: Function): void;\n}\n\nexport const _LAYERS_STORE_PROPERTY: unique symbol = Symbol(\n  'opentelemetry.instrumentation-connect.request-route-stack',\n);\n\nexport type UseArgs1 = [HandleFunction];\nexport type UseArgs2 = [string, HandleFunction];\nexport type UseArgs = UseArgs1 | UseArgs2;\nexport type Use = (...args: UseArgs) => Server;\nexport type PatchedRequest = {\n  [_LAYERS_STORE_PROPERTY]: string[];\n} & IncomingMessage;\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-connect\n * - Upstream version: @opentelemetry/instrumentation-connect@0.61.0\n */\n\nimport { debug } from '@sentry/core';\nimport type { PatchedRequest } from './internal-types';\nimport { _LAYERS_STORE_PROPERTY } from './internal-types';\nimport { DEBUG_BUILD } from '../../../../debug-build';\n\nexport const addNewStackLayer = (request: PatchedRequest) => {\n  if (Array.isArray(request[_LAYERS_STORE_PROPERTY]) === false) {\n    Object.defineProperty(request, _LAYERS_STORE_PROPERTY, {\n      enumerable: false,\n      value: [],\n    });\n  }\n  request[_LAYERS_STORE_PROPERTY].push('/');\n\n  const stackLength = request[_LAYERS_STORE_PROPERTY].length;\n\n  return () => {\n    if (stackLength === request[_LAYERS_STORE_PROPERTY].length) {\n      request[_LAYERS_STORE_PROPERTY].pop();\n    } else {\n      DEBUG_BUILD && debug.warn('Connect: Trying to pop the stack multiple time');\n    }\n  };\n};\n\nexport const replaceCurrentStackRoute = (request: PatchedRequest, newRoute?: string) => {\n  if (newRoute) {\n    request[_LAYERS_STORE_PROPERTY].splice(-1, 1, newRoute);\n  }\n};\n\n// generate route from existing stack on request object.\n// splash between stack layer will be deduped\n// [\"/first/\", \"/second\", \"/third/\"] => /first/second/third/\nexport const generateRoute = (request: PatchedRequest) => {\n  return request[_LAYERS_STORE_PROPERTY].reduce((acc, sub) => acc.replace(/\\/+$/, '') + sub);\n};\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-connect\n * - Upstream version: @opentelemetry/instrumentation-connect@0.61.0\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n */\n\nimport type { ServerResponse } from 'http';\nimport { AttributeNames, ConnectTypes } from './enums/AttributeNames';\nimport type { HandleFunction, NextFunction, PatchedRequest, Server, Use, UseArgs, UseArgs2 } from './internal-types';\nimport type { Span } from '@sentry/core';\nimport {\n  isError,\n  SDK_VERSION,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SPAN_STATUS_ERROR,\n  startInactiveSpan,\n} from '@sentry/core';\nimport { setHttpServerSpanRouteAttribute } from '../../../../utils/setHttpServerSpanRouteAttribute';\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport { HTTP_ROUTE } from '@sentry/conventions/attributes';\nimport { replaceCurrentStackRoute, addNewStackLayer, generateRoute } from './utils';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-connect';\n\nconst ANONYMOUS_NAME = 'anonymous';\n\n/** Connect instrumentation for OpenTelemetry */\nexport class ConnectInstrumentation extends InstrumentationBase {\n  constructor(config: InstrumentationConfig = {}) {\n    super(PACKAGE_NAME, SDK_VERSION, config);\n  }\n\n  init() {\n    return [\n      new InstrumentationNodeModuleDefinition('connect', ['>=3.0.0 <4'], moduleExports => {\n        return this._patchConstructor(moduleExports);\n      }),\n    ];\n  }\n\n  private _patchApp(patchedApp: Server) {\n    // oxlint-disable-next-line typescript/unbound-method\n    if (!isWrapped(patchedApp.use)) {\n      this._wrap(patchedApp, 'use', this._patchUse.bind(this));\n    }\n    // oxlint-disable-next-line typescript/unbound-method\n    if (!isWrapped(patchedApp.handle)) {\n      this._wrap(patchedApp, 'handle', this._patchHandle.bind(this));\n    }\n  }\n\n  private _patchConstructor(original: () => Server): () => Server {\n    const patchApp = this._patchApp.bind(this);\n    return function (this: Server, ...args: unknown[]) {\n      const app = Reflect.apply(original, this, args) as Server;\n      patchApp(app);\n      return app;\n    };\n  }\n\n  public _patchNext(next: NextFunction, span: Span, finishSpan: () => void): NextFunction {\n    return function nextFunction(this: NextFunction, err?: unknown): void {\n      if (isError(err)) {\n        span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n      }\n      const result = next.apply(this, [err]);\n      finishSpan();\n      return result;\n    };\n  }\n\n  public _startSpan(routeName: string, middleWare: HandleFunction): Span {\n    const connectType = routeName ? ConnectTypes.REQUEST_HANDLER : ConnectTypes.MIDDLEWARE;\n    const connectName = routeName || middleWare.name || ANONYMOUS_NAME;\n    return startInactiveSpan({\n      name: connectName,\n      op: `${connectType}.connect`,\n      attributes: {\n        [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.otel.connect',\n        [HTTP_ROUTE]: routeName.length > 0 ? routeName : '/',\n        [AttributeNames.CONNECT_TYPE]: connectType,\n        [AttributeNames.CONNECT_NAME]: connectName,\n      },\n    });\n  }\n\n  public _patchMiddleware(routeName: string, middleWare: HandleFunction): HandleFunction {\n    const isEnabled = this.isEnabled.bind(this);\n    const startSpan: (routeName: string, middleWare: HandleFunction) => Span = this._startSpan.bind(this);\n    const patchNext = this._patchNext.bind(this);\n    const isErrorMiddleware = middleWare.length === 4;\n\n    function patchedMiddleware(this: Use): void {\n      if (!isEnabled()) {\n        return Reflect.apply(middleWare, this, arguments);\n      }\n      const [reqArgIdx, resArgIdx, nextArgIdx] = isErrorMiddleware ? [1, 2, 3] : [0, 1, 2];\n      const req = arguments[reqArgIdx] as PatchedRequest;\n      const res = arguments[resArgIdx] as ServerResponse;\n      const next = arguments[nextArgIdx] as NextFunction;\n\n      replaceCurrentStackRoute(req, routeName);\n\n      if (routeName) {\n        setHttpServerSpanRouteAttribute(generateRoute(req));\n      }\n\n      const span = startSpan(routeName, middleWare);\n      let spanFinished = false;\n\n      function finishSpan() {\n        if (!spanFinished) {\n          spanFinished = true;\n          span.end();\n        }\n        res.removeListener('close', finishSpan);\n      }\n\n      res.addListener('close', finishSpan);\n      arguments[nextArgIdx] = patchNext(next, span, finishSpan);\n\n      try {\n        return Reflect.apply(middleWare, this, arguments);\n      } catch (e) {\n        span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n        finishSpan();\n        throw e;\n      }\n    }\n\n    Object.defineProperty(patchedMiddleware, 'length', {\n      value: middleWare.length,\n      writable: false,\n      configurable: true,\n    });\n\n    return patchedMiddleware;\n  }\n\n  public _patchUse(original: Server['use']): Use {\n    const patchMiddleware = this._patchMiddleware.bind(this);\n    return function (this: Server, ...args: UseArgs): Server {\n      const middleWare = args[args.length - 1] as HandleFunction;\n      const routeName = (args[args.length - 2] || '') as string;\n\n      args[args.length - 1] = patchMiddleware(routeName, middleWare);\n\n      return original.apply(this, args as UseArgs2);\n    };\n  }\n\n  public _patchHandle(original: Server['handle']): Server['handle'] {\n    const patchOut = this._patchOut.bind(this);\n    return function (this: Server): ReturnType<Server['handle']> {\n      const [reqIdx, outIdx] = [0, 2];\n      const req = arguments[reqIdx] as PatchedRequest;\n      const out = arguments[outIdx];\n      const completeStack = addNewStackLayer(req);\n\n      if (typeof out === 'function') {\n        arguments[outIdx] = patchOut(out as NextFunction, completeStack);\n      }\n\n      return Reflect.apply(original, this, arguments);\n    };\n  }\n\n  public _patchOut(out: NextFunction, completeStack: () => void): NextFunction {\n    return function nextFunction(this: NextFunction, ...args: unknown[]): void {\n      completeStack();\n      return Reflect.apply(out, this, args);\n    };\n  }\n}\n", "import { ConnectInstrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { captureException, defineIntegration } from '@sentry/core';\nimport { ensureIsWrapped, generateInstrumentOnce } from '@sentry/node-core';\n\ntype ConnectApp = {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  use: (middleware: any) => void;\n};\n\nconst INTEGRATION_NAME = 'Connect' as const;\n\nexport const instrumentConnect = generateInstrumentOnce(INTEGRATION_NAME, () => new ConnectInstrumentation());\n\nconst _connectIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      instrumentConnect();\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for [Connect](https://github.com/senchalabs/connect/).\n *\n * If you also want to capture errors, you need to call `setupConnectErrorHandler(app)` after you initialize your connect app.\n *\n * For more information, see the [connect documentation](https://docs.sentry.io/platforms/javascript/guides/connect/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *   integrations: [Sentry.connectIntegration()],\n * })\n * ```\n */\nexport const connectIntegration = defineIntegration(_connectIntegration);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction connectErrorMiddleware(err: any, req: any, res: any, next: any): void {\n  captureException(err, {\n    mechanism: {\n      handled: false,\n      type: 'auto.middleware.connect',\n    },\n  });\n  next(err);\n}\n\n/**\n * Add a Connect middleware to capture errors to Sentry.\n *\n * @param app The Connect app to attach the error handler to\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n * const connect = require(\"connect\");\n *\n * const app = connect();\n *\n * Sentry.setupConnectErrorHandler(app);\n *\n * // Add you connect routes here\n *\n * app.listen(3000);\n * ```\n */\nexport const setupConnectErrorHandler = (app: ConnectApp): void => {\n  app.use(connectErrorMiddleware);\n  ensureIsWrapped(app.use, 'connect');\n};\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-tedious\n * - Upstream version: @opentelemetry/instrumentation-tedious@0.37.0\n */\n\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by this package.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n\n/**\n * Deprecated, use `db.collection.name` instead.\n *\n * @example \"mytable\"\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `db.collection.name`, but only if not extracting the value from `db.query.text`.\n */\nexport const ATTR_DB_SQL_TABLE = 'db.sql.table' as const;\n\n/**\n * Enum value \"mssql\" for attribute `db.system`.\n *\n * Microsoft SQL Server\n *\n * @experimental This enum value is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const DB_SYSTEM_VALUE_MSSQL = 'mssql' as const;\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-tedious\n * - Upstream version: @opentelemetry/instrumentation-tedious@0.37.0\n */\n/* eslint-disable */\n\n/**\n * The span name SHOULD be set to a low cardinality value\n * representing the statement executed on the database.\n *\n * @returns Operation executed on Tedious Connection. Does not map to SQL statement in any way.\n */\nexport function getSpanName(\n  operation: string,\n  db: string | undefined,\n  sql: string | undefined,\n  bulkLoadTable: string | undefined,\n): string {\n  if (operation === 'execBulkLoad' && bulkLoadTable && db) {\n    return `${operation} ${bulkLoadTable} ${db}`;\n  }\n  if (operation === 'callProcedure') {\n    // `sql` refers to procedure name with `callProcedure`\n    if (db) {\n      return `${operation} ${sql} ${db}`;\n    }\n    return `${operation} ${sql}`;\n  }\n  // do not use `sql` in general case because of high-cardinality\n  if (db) {\n    return `${operation} ${db}`;\n  }\n  return `${operation}`;\n}\n\nexport const once = (fn: Function) => {\n  let called = false;\n  return (...args: unknown[]) => {\n    if (called) return;\n    called = true;\n    return fn(...args);\n  };\n};\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-tedious\n * - Upstream version: @opentelemetry/instrumentation-tedious@0.37.0\n * - Minor TypeScript strictness adjustments\n * - Span creation migrated to the @sentry/core API; origin folded into span creation\n */\n\nimport { EventEmitter } from 'events';\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport {\n  DB_NAME,\n  DB_STATEMENT,\n  DB_SYSTEM,\n  DB_USER,\n  NET_PEER_NAME,\n  NET_PEER_PORT,\n} from '@sentry/conventions/attributes';\nimport { DB_SYSTEM_VALUE_MSSQL, ATTR_DB_SQL_TABLE } from './semconv';\nimport type * as tedious from './tedious-types';\nimport { getSpanName, once } from './utils';\nimport type { SpanAttributes } from '@sentry/core';\nimport {\n  SDK_VERSION,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SPAN_KIND,\n  SPAN_STATUS_ERROR,\n  startInactiveSpan,\n  withActiveSpan,\n} from '@sentry/core';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-tedious';\n\nconst CURRENT_DATABASE = Symbol('opentelemetry.instrumentation-tedious.current-database');\n\nconst PATCHED_METHODS = ['callProcedure', 'execSql', 'execSqlBatch', 'execBulkLoad', 'prepare', 'execute'];\n\ntype UnknownFunction = (...args: any[]) => any;\ntype ApproxConnection = EventEmitter & {\n  [CURRENT_DATABASE]: string;\n  config: any;\n};\ntype ApproxRequest = EventEmitter & {\n  sqlTextOrProcedure: string | undefined;\n  callback: any;\n  table: string | undefined;\n  parametersByName: any;\n};\n\nfunction setDatabase(this: ApproxConnection, databaseName: string) {\n  Object.defineProperty(this, CURRENT_DATABASE, {\n    value: databaseName,\n    writable: true,\n  });\n}\n\nexport class TediousInstrumentation extends InstrumentationBase<InstrumentationConfig> {\n  static readonly COMPONENT = 'tedious';\n\n  constructor(config: InstrumentationConfig = {}) {\n    super(PACKAGE_NAME, SDK_VERSION, config);\n  }\n\n  protected init() {\n    return [\n      new InstrumentationNodeModuleDefinition(\n        TediousInstrumentation.COMPONENT,\n        ['>=1.11.0 <20'],\n        (moduleExports: typeof tedious) => {\n          const ConnectionPrototype: any = moduleExports.Connection.prototype;\n          for (const method of PATCHED_METHODS) {\n            if (isWrapped(ConnectionPrototype[method])) {\n              this._unwrap(ConnectionPrototype, method);\n            }\n            this._wrap(ConnectionPrototype, method, this._patchQuery(method) as any);\n          }\n\n          if (isWrapped(ConnectionPrototype.connect)) {\n            this._unwrap(ConnectionPrototype, 'connect');\n          }\n          // oxlint-disable-next-line typescript/unbound-method\n          this._wrap(ConnectionPrototype, 'connect', this._patchConnect);\n\n          return moduleExports;\n        },\n        (moduleExports: typeof tedious) => {\n          if (moduleExports === undefined) return;\n          const ConnectionPrototype: any = moduleExports.Connection.prototype;\n          for (const method of PATCHED_METHODS) {\n            this._unwrap(ConnectionPrototype, method);\n          }\n          this._unwrap(ConnectionPrototype, 'connect');\n        },\n      ),\n    ];\n  }\n\n  private _patchConnect(original: UnknownFunction): UnknownFunction {\n    return function patchedConnect(this: ApproxConnection) {\n      setDatabase.call(this, this.config?.options?.database);\n\n      // remove the listener first in case it's already added\n      this.removeListener('databaseChange', setDatabase);\n      this.on('databaseChange', setDatabase);\n\n      this.once('end', () => {\n        this.removeListener('databaseChange', setDatabase);\n      });\n      return original.apply(this, arguments as unknown as any[]);\n    };\n  }\n\n  private _patchQuery(operation: string) {\n    return (originalMethod: UnknownFunction): UnknownFunction => {\n      const thisPlugin = this;\n\n      function patchedMethod(this: ApproxConnection, request: ApproxRequest) {\n        if (!(request instanceof EventEmitter)) {\n          thisPlugin._diag.warn(`Unexpected invocation of patched ${operation} method. Span not recorded`);\n          return originalMethod.apply(this, arguments as unknown as any[]);\n        }\n        let procCount = 0;\n        let statementCount = 0;\n        const incrementStatementCount = () => statementCount++;\n        const incrementProcCount = () => procCount++;\n        const databaseName = this[CURRENT_DATABASE];\n        const sql = (request => {\n          // Required for <11.0.9\n          if (request.sqlTextOrProcedure === 'sp_prepare' && request.parametersByName?.stmt?.value) {\n            return request.parametersByName.stmt.value;\n          }\n          return request.sqlTextOrProcedure;\n        })(request);\n\n        const attributes: SpanAttributes = {\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.otel.tedious',\n          // eslint-disable-next-line typescript/no-deprecated\n          [DB_SYSTEM]: DB_SYSTEM_VALUE_MSSQL,\n          // eslint-disable-next-line typescript/no-deprecated\n          [DB_NAME]: databaseName,\n          // >=4 uses `authentication` object; older versions just userName and password pair\n          // eslint-disable-next-line typescript/no-deprecated\n          [DB_USER]: this.config?.userName ?? this.config?.authentication?.options?.userName,\n          // eslint-disable-next-line typescript/no-deprecated\n          [DB_STATEMENT]: sql,\n          // eslint-disable-next-line typescript/no-deprecated\n          [ATTR_DB_SQL_TABLE]: request.table,\n          // eslint-disable-next-line typescript/no-deprecated\n          [NET_PEER_NAME]: this.config?.server,\n          // eslint-disable-next-line typescript/no-deprecated\n          [NET_PEER_PORT]: this.config?.options?.port,\n        };\n        const span = startInactiveSpan({\n          name: getSpanName(operation, databaseName, sql, request.table),\n          kind: SPAN_KIND.CLIENT,\n          attributes,\n        });\n\n        const endSpan = once((err?: any) => {\n          request.removeListener('done', incrementStatementCount);\n          request.removeListener('doneInProc', incrementStatementCount);\n          request.removeListener('doneProc', incrementProcCount);\n          request.removeListener('error', endSpan);\n          this.removeListener('end', endSpan);\n\n          span.setAttribute('tedious.procedure_count', procCount);\n          span.setAttribute('tedious.statement_count', statementCount);\n          if (err) {\n            span.setStatus({\n              code: SPAN_STATUS_ERROR,\n              message: err.message,\n            });\n            // TODO(3290): set `error.type` attribute?\n          }\n          span.end();\n        });\n\n        request.on('done', incrementStatementCount);\n        request.on('doneInProc', incrementStatementCount);\n        request.on('doneProc', incrementProcCount);\n        request.once('error', endSpan);\n        this.on('end', endSpan);\n\n        if (typeof request.callback === 'function') {\n          thisPlugin._wrap(request, 'callback', thisPlugin._patchCallbackQuery(endSpan));\n        } else {\n          thisPlugin._diag.error('Expected request.callback to be a function');\n        }\n\n        return withActiveSpan(span, () => originalMethod.apply(this, arguments as unknown as any[]));\n      }\n\n      Object.defineProperty(patchedMethod, 'length', {\n        value: originalMethod.length,\n        writable: false,\n      });\n\n      return patchedMethod;\n    };\n  }\n\n  private _patchCallbackQuery(endSpan: Function) {\n    return (originalCallback: Function) => {\n      return function (this: any, err: Error | undefined | null, _rowCount?: number, _rows?: any) {\n        endSpan(err);\n        return originalCallback.apply(this, arguments);\n      };\n    };\n  }\n}\n", "import { TediousInstrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\n\nconst INTEGRATION_NAME = 'Tedious' as const;\n\nexport const instrumentTedious = generateInstrumentOnce(INTEGRATION_NAME, () => new TediousInstrumentation({}));\n\nconst _tediousIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      instrumentTedious();\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [tedious](https://www.npmjs.com/package/tedious) library.\n *\n * For more information, see the [`tediousIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/tedious/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *  integrations: [Sentry.tediousIntegration()],\n * });\n * ```\n */\nexport const tediousIntegration = defineIntegration(_tediousIntegration);\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-generic-pool\n * - Upstream version: @opentelemetry/instrumentation-generic-pool@0.61.0\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n */\n\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport {\n  SDK_VERSION,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SPAN_STATUS_ERROR,\n  startSpan,\n  startSpanManual,\n} from '@sentry/core';\nimport type * as genericPool from './generic-pool-types';\n\nconst MODULE_NAME = 'generic-pool';\nconst PACKAGE_NAME = '@sentry/instrumentation-generic-pool';\n\ntype AcquireFn = (this: unknown, ...args: unknown[]) => unknown;\ninterface PoolConstructor {\n  prototype: { acquire: AcquireFn };\n}\ninterface GenericPoolModule {\n  Pool: PoolConstructor;\n}\n\nexport class GenericPoolInstrumentation extends InstrumentationBase {\n  // only used for v2 - v2.3)\n  private _isDisabled = false;\n\n  constructor(config: InstrumentationConfig = {}) {\n    super(PACKAGE_NAME, SDK_VERSION, config);\n  }\n\n  init() {\n    return [\n      new InstrumentationNodeModuleDefinition(\n        MODULE_NAME,\n        ['>=3.0.0 <4'],\n        (moduleExports: GenericPoolModule) => {\n          const Pool = moduleExports.Pool;\n          if (isWrapped(Pool.prototype.acquire)) {\n            this._unwrap(Pool.prototype, 'acquire');\n          }\n          this._wrap(Pool.prototype, 'acquire', this._acquirePatcher.bind(this));\n          return moduleExports;\n        },\n        (moduleExports: GenericPoolModule) => {\n          const Pool = moduleExports.Pool;\n          this._unwrap(Pool.prototype, 'acquire');\n          return moduleExports;\n        },\n      ),\n      new InstrumentationNodeModuleDefinition(\n        MODULE_NAME,\n        ['>=2.4.0 <3'],\n        (moduleExports: GenericPoolModule) => {\n          const Pool = moduleExports.Pool;\n          if (isWrapped(Pool.prototype.acquire)) {\n            this._unwrap(Pool.prototype, 'acquire');\n          }\n          this._wrap(Pool.prototype, 'acquire', this._acquireWithCallbacksPatcher.bind(this));\n          return moduleExports;\n        },\n        (moduleExports: GenericPoolModule) => {\n          const Pool = moduleExports.Pool;\n          this._unwrap(Pool.prototype, 'acquire');\n          return moduleExports;\n        },\n      ),\n      new InstrumentationNodeModuleDefinition(\n        MODULE_NAME,\n        ['>=2.0.0 <2.4'],\n        (moduleExports: GenericPoolModule) => {\n          this._isDisabled = false;\n          if (isWrapped(moduleExports.Pool)) {\n            this._unwrap(moduleExports, 'Pool');\n          }\n          this._wrap(moduleExports, 'Pool', this._poolWrapper.bind(this));\n          return moduleExports;\n        },\n        (moduleExports: GenericPoolModule) => {\n          // since the object is created on the fly every time, we need to use\n          // a boolean switch here to disable the instrumentation\n          this._isDisabled = true;\n          return moduleExports;\n        },\n      ),\n    ];\n  }\n\n  private _acquirePatcher(original: AcquireFn) {\n    return function wrapped_acquire(this: genericPool.Pool<unknown>, ...args: unknown[]) {\n      return startSpan(\n        {\n          name: 'generic-pool.acquire',\n          attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.otel.generic_pool' },\n        },\n        () => {\n          return original.call(this, ...args) as PromiseLike<unknown>;\n        },\n      );\n    };\n  }\n\n  private _poolWrapper(original: (this: unknown, ...args: unknown[]) => { acquire: AcquireFn }) {\n    const wrap = this._wrap.bind(this);\n    const acquireWithCallbacksPatcher = this._acquireWithCallbacksPatcher.bind(this);\n    return function wrapped_pool(this: unknown, ...args: unknown[]) {\n      const pool = original.apply(this, args);\n      wrap(pool, 'acquire', acquireWithCallbacksPatcher);\n      return pool;\n    };\n  }\n\n  private _acquireWithCallbacksPatcher(original: AcquireFn) {\n    const isDisabled = (): boolean => this._isDisabled;\n    return function wrapped_acquire(\n      this: genericPool.Pool<unknown>,\n      cb: (err: unknown, client: unknown) => unknown,\n      priority: number,\n    ) {\n      // only used for v2 - v2.3\n      if (isDisabled()) {\n        return original.call(this, cb, priority);\n      }\n\n      return startSpanManual(\n        {\n          name: 'generic-pool.acquire',\n          attributes: { [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.otel.generic_pool' },\n        },\n        span => {\n          original.call(\n            this,\n            (err: unknown, client: unknown) => {\n              if (err) {\n                span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n              }\n              span.end();\n              // Not checking whether cb is a function because\n              // the original code doesn't do that either.\n              // The callback's return value is unused by generic-pool, so we don't return it.\n              if (cb) {\n                cb(err, client);\n              }\n            },\n            priority,\n          );\n        },\n      );\n    };\n  }\n}\n", "import { GenericPoolInstrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\n\nconst INTEGRATION_NAME = 'GenericPool' as const;\n\nexport const instrumentGenericPool = generateInstrumentOnce(INTEGRATION_NAME, () => new GenericPoolInstrumentation({}));\n\nconst _genericPoolIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      instrumentGenericPool();\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [generic-pool](https://www.npmjs.com/package/generic-pool) library.\n *\n * For more information, see the [`genericPoolIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/genericpool/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *  integrations: [Sentry.genericPoolIntegration()],\n * });\n * ```\n */\nexport const genericPoolIntegration = defineIntegration(_genericPoolIntegration);\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-amqplib\n * - Upstream version: @opentelemetry/instrumentation-amqplib@0.65.0\n * - Some types vendored from @types/amqplib with simplifications\n * - Dropped the instrumentation config and all hooks; the SDK folds origin into span creation instead\n */\n\nexport enum EndOperation {\n  AutoAck = 'auto ack',\n  Ack = 'ack',\n  AckAll = 'ackAll',\n  Reject = 'reject',\n  Nack = 'nack',\n  NackAll = 'nackAll',\n  ChannelClosed = 'channel closed',\n  ChannelError = 'channel error',\n  InstrumentationTimeout = 'instrumentation timeout',\n}\n\n// The following types are vendored from `@types/amqplib@0.10.1` - commit SHA: 4205e03127692a40b4871709a7134fe4e2ed5510\n\n// Vendored from: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/4205e03127692a40b4871709a7134fe4e2ed5510/types/amqplib/properties.d.ts#L142\nexport interface Message {\n  content: Buffer;\n  fields: MessageFields;\n  properties: MessageProperties;\n}\n\nexport interface ConsumeMessage extends Message {\n  fields: ConsumeMessageFields;\n}\n\nexport interface CommonMessageFields {\n  deliveryTag: number;\n  redelivered: boolean;\n  exchange: string;\n  routingKey: string;\n}\n\nexport interface MessageFields extends CommonMessageFields {\n  messageCount?: number;\n  consumerTag?: string;\n}\n\nexport interface ConsumeMessageFields extends CommonMessageFields {\n  deliveryTag: number;\n}\n\nexport interface MessageProperties {\n  contentType: any | undefined;\n  contentEncoding: any | undefined;\n  headers: any;\n  deliveryMode: any | undefined;\n  priority: any | undefined;\n  correlationId: any | undefined;\n  replyTo: any | undefined;\n  expiration: any | undefined;\n  messageId: any | undefined;\n  timestamp: any | undefined;\n  type: any | undefined;\n  userId: any | undefined;\n  appId: any | undefined;\n  clusterId: any | undefined;\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-amqplib\n * - Upstream version: @opentelemetry/instrumentation-amqplib@0.65.0\n * - Merged the upstream `semconv.ts` and `semconv-obsolete.ts` into a single file containing only the\n *   constants this instrumentation emits. These mirror the (now legacy) messaging semantic conventions\n *   that the SDK has always emitted; the `@deprecated` annotations were dropped since these vendored\n *   copies are intentionally the chosen output and we don't want to flag every usage site.\n */\n\n/** A string identifying the kind of message consumption. */\nexport const ATTR_MESSAGING_OPERATION = 'messaging.operation' as const;\n\n/** The message destination name (the exchange for amqplib). */\nexport const ATTR_MESSAGING_DESTINATION = 'messaging.destination' as const;\n\n/** The kind of message destination. */\nexport const ATTR_MESSAGING_DESTINATION_KIND = 'messaging.destination_kind' as const;\n\n/** RabbitMQ message routing key. */\nexport const ATTR_MESSAGING_RABBITMQ_ROUTING_KEY = 'messaging.rabbitmq.routing_key' as const;\n\n/** The name of the transport protocol. */\nexport const ATTR_MESSAGING_PROTOCOL = 'messaging.protocol' as const;\n\n/** The version of the transport protocol. */\nexport const ATTR_MESSAGING_PROTOCOL_VERSION = 'messaging.protocol_version' as const;\n\n/** Connection string. */\nexport const ATTR_MESSAGING_URL = 'messaging.url' as const;\n\n/** A value used by the messaging system as an identifier for the message, represented as a string. */\nexport const OLD_ATTR_MESSAGING_MESSAGE_ID = 'messaging.message_id' as const;\n\n/** The conversation ID (a.k.a. correlation ID) identifying the conversation the message belongs to. */\nexport const ATTR_MESSAGING_CONVERSATION_ID = 'messaging.conversation_id' as const;\n\n/** Value for `messaging.destination_kind` when the destination is a topic. */\nexport const MESSAGING_DESTINATION_KIND_VALUE_TOPIC = 'topic' as const;\n\n/** Value for `messaging.operation` when the message is being processed by a consumer. */\nexport const MESSAGING_OPERATION_VALUE_PROCESS = 'process' as const;\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-amqplib\n * - Upstream version: @opentelemetry/instrumentation-amqplib@0.65.0\n * - Some types vendored from @types/amqplib with simplifications\n * - Span creation extracted here and migrated to the @sentry/core API; origin folded into span creation\n * - Cross-service trace propagation uses Sentry's `getTraceData` instead of the OTel propagator\n * - Dropped the env-gated stable-semconv dual emission; only the (default) old semantic conventions are emitted\n * - Replaced the OTel context-key confirm-channel marker with a synchronous flag on the channel instance\n */\n\nimport { SpanKind } from '@opentelemetry/api';\nimport type { Span, SpanAttributes } from '@sentry/core';\nimport { getTraceData, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, startInactiveSpan } from '@sentry/core';\nimport { MESSAGING_SYSTEM, NET_PEER_NAME, NET_PEER_PORT } from '@sentry/conventions/attributes';\nimport type { Channel, ConfirmChannel, Connection, Options } from './amqplib-types';\nimport {\n  ATTR_MESSAGING_CONVERSATION_ID,\n  ATTR_MESSAGING_DESTINATION,\n  ATTR_MESSAGING_DESTINATION_KIND,\n  ATTR_MESSAGING_OPERATION,\n  ATTR_MESSAGING_PROTOCOL,\n  ATTR_MESSAGING_PROTOCOL_VERSION,\n  ATTR_MESSAGING_RABBITMQ_ROUTING_KEY,\n  ATTR_MESSAGING_URL,\n  MESSAGING_DESTINATION_KIND_VALUE_TOPIC,\n  MESSAGING_OPERATION_VALUE_PROCESS,\n  OLD_ATTR_MESSAGING_MESSAGE_ID,\n} from './semconv';\nimport type { ConsumeMessage, Message } from './types';\n\nconst PUBLISHER_ORIGIN = 'auto.amqplib.otel.publisher';\nconst CONSUMER_ORIGIN = 'auto.amqplib.otel.consumer';\n\nexport const MESSAGE_STORED_SPAN: unique symbol = Symbol('opentelemetry.amqplib.message.stored-span');\nexport const CHANNEL_SPANS_NOT_ENDED: unique symbol = Symbol('opentelemetry.amqplib.channel.spans-not-ended');\nexport const CHANNEL_CONSUME_TIMEOUT_TIMER: unique symbol = Symbol(\n  'opentelemetry.amqplib.channel.consumer-timeout-timer',\n);\nexport const CONNECTION_ATTRIBUTES: unique symbol = Symbol('opentelemetry.amqplib.connection.attributes');\nexport const CHANNEL_IS_CONFIRM_PUBLISHING: unique symbol = Symbol('sentry.amqplib.channel.is-confirm-publishing');\n\nexport type InstrumentationConnection = Connection & {\n  [CONNECTION_ATTRIBUTES]?: SpanAttributes;\n};\nexport type InstrumentationPublishChannel = (Channel | ConfirmChannel) & {\n  connection: InstrumentationConnection;\n  [CHANNEL_IS_CONFIRM_PUBLISHING]?: boolean;\n};\nexport type InstrumentationConsumeChannel = Channel & {\n  connection: InstrumentationConnection;\n  [CHANNEL_SPANS_NOT_ENDED]?: {\n    msg: ConsumeMessage;\n    timeOfConsume: number;\n  }[];\n  [CHANNEL_CONSUME_TIMEOUT_TIMER]?: NodeJS.Timeout;\n};\nexport type InstrumentationMessage = Message & {\n  [MESSAGE_STORED_SPAN]?: Span;\n};\nexport type InstrumentationConsumeMessage = ConsumeMessage & {\n  [MESSAGE_STORED_SPAN]?: Span;\n};\n\nexport const normalizeExchange = (exchangeName: string): string => (exchangeName !== '' ? exchangeName : '<default>');\n\nconst censorPassword = (url: string): string => {\n  return url.replace(/:[^:@/]*@/, ':***@');\n};\n\nconst getPort = (portFromUrl: number | undefined, resolvedProtocol: string): number => {\n  // we are using the resolved protocol which is upper case\n  // this code mimics the behavior of amqplib which is used to set connection params\n  return portFromUrl || (resolvedProtocol === 'AMQP' ? 5672 : 5671);\n};\n\nconst getProtocol = (protocolFromUrl: string | undefined): string => {\n  const resolvedProtocol = protocolFromUrl || 'amqp';\n  // the substring removes the ':' part of the protocol ('amqp:' -> 'amqp')\n  const noEndingColon = resolvedProtocol.endsWith(':')\n    ? resolvedProtocol.substring(0, resolvedProtocol.length - 1)\n    : resolvedProtocol;\n  // upper case to match spec\n  return noEndingColon.toUpperCase();\n};\n\nconst getHostname = (hostnameFromUrl: string | undefined): string => {\n  // if user supplies empty hostname, it gets forwarded to 'net' package which defaults it to localhost.\n  // https://nodejs.org/docs/latest-v12.x/api/net.html#net_socket_connect_options_connectlistener\n  return hostnameFromUrl || 'localhost';\n};\n\nexport const getConnectionAttributesFromServer = (conn: Connection): SpanAttributes => {\n  const product = conn.serverProperties.product?.toLowerCase?.();\n  if (product) {\n    return {\n      [MESSAGING_SYSTEM]: product,\n    };\n  } else {\n    return {};\n  }\n};\n\nexport const getConnectionAttributesFromUrl = (url: string | Options.Connect): SpanAttributes => {\n  const attributes: SpanAttributes = {\n    [ATTR_MESSAGING_PROTOCOL_VERSION]: '0.9.1', // this is the only protocol supported by the instrumented library\n  };\n\n  const resolvedUrl = url || 'amqp://localhost';\n  if (typeof resolvedUrl === 'object') {\n    const connectOptions = resolvedUrl;\n\n    const protocol = getProtocol(connectOptions?.protocol);\n    attributes[ATTR_MESSAGING_PROTOCOL] = protocol;\n    // oxlint-disable-next-line typescript/no-deprecated\n    attributes[NET_PEER_NAME] = getHostname(connectOptions?.hostname);\n    // oxlint-disable-next-line typescript/no-deprecated\n    attributes[NET_PEER_PORT] = getPort(connectOptions.port, protocol);\n  } else {\n    const censoredUrl = censorPassword(resolvedUrl);\n    attributes[ATTR_MESSAGING_URL] = censoredUrl;\n    try {\n      const urlParts = new URL(censoredUrl);\n\n      const protocol = getProtocol(urlParts.protocol);\n      attributes[ATTR_MESSAGING_PROTOCOL] = protocol;\n      // oxlint-disable-next-line typescript/no-deprecated\n      attributes[NET_PEER_NAME] = getHostname(urlParts.hostname);\n      // oxlint-disable-next-line typescript/no-deprecated\n      attributes[NET_PEER_PORT] = getPort(urlParts.port ? parseInt(urlParts.port) : undefined, protocol);\n    } catch {\n      // best-effort: a malformed url simply yields fewer connection attributes\n    }\n  }\n  return attributes;\n};\n\n/** Reads a propagation header value off an amqplib message as a string. */\nexport function getHeaderAsString(headers: Record<string, unknown> | undefined, key: string): string | undefined {\n  const value = headers?.[key];\n  if (value == null) {\n    return undefined;\n  }\n  return Array.isArray(value) ? String(value[0]) : String(value);\n}\n\n/** Starts an inactive producer span and propagates its trace into the publish `options.headers`. */\nexport function startPublishSpan(\n  exchange: string,\n  routingKey: string,\n  channel: InstrumentationPublishChannel,\n  options?: Options.Publish,\n): { span: Span; modifiedOptions: Options.Publish } {\n  const normalizedExchange = normalizeExchange(exchange);\n\n  const span = startInactiveSpan({\n    name: `publish ${normalizedExchange}`,\n    kind: SpanKind.PRODUCER,\n    attributes: {\n      ...channel.connection[CONNECTION_ATTRIBUTES],\n      [ATTR_MESSAGING_DESTINATION]: exchange,\n      [ATTR_MESSAGING_DESTINATION_KIND]: MESSAGING_DESTINATION_KIND_VALUE_TOPIC,\n      [ATTR_MESSAGING_RABBITMQ_ROUTING_KEY]: routingKey,\n      [OLD_ATTR_MESSAGING_MESSAGE_ID]: options?.messageId,\n      [ATTR_MESSAGING_CONVERSATION_ID]: options?.correlationId,\n      [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: PUBLISHER_ORIGIN,\n    },\n  });\n\n  const modifiedOptions = options ?? {};\n  modifiedOptions.headers = modifiedOptions.headers ?? {};\n\n  const traceData = getTraceData({ span });\n  if (traceData['sentry-trace']) {\n    modifiedOptions.headers['sentry-trace'] = traceData['sentry-trace'];\n  }\n  if (traceData.baggage) {\n    modifiedOptions.headers['baggage'] = traceData.baggage;\n  }\n\n  return { span, modifiedOptions };\n}\n\n/** Starts an inactive consumer (process) span carrying the amqplib messaging attributes. */\nexport function startConsumeSpan(\n  queue: string,\n  msg: InstrumentationConsumeMessage,\n  channel: InstrumentationConsumeChannel,\n): Span {\n  return startInactiveSpan({\n    name: `${queue} process`,\n    kind: SpanKind.CONSUMER,\n    attributes: {\n      ...channel?.connection?.[CONNECTION_ATTRIBUTES],\n      [ATTR_MESSAGING_DESTINATION]: msg.fields?.exchange,\n      [ATTR_MESSAGING_DESTINATION_KIND]: MESSAGING_DESTINATION_KIND_VALUE_TOPIC,\n      [ATTR_MESSAGING_RABBITMQ_ROUTING_KEY]: msg.fields?.routingKey,\n      [ATTR_MESSAGING_OPERATION]: MESSAGING_OPERATION_VALUE_PROCESS,\n      [OLD_ATTR_MESSAGING_MESSAGE_ID]: msg?.properties.messageId,\n      [ATTR_MESSAGING_CONVERSATION_ID]: msg?.properties.correlationId,\n      [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: CONSUMER_ORIGIN,\n    },\n  });\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-amqplib\n * - Upstream version: @opentelemetry/instrumentation-amqplib@0.65.0\n * - The channel/connection patches were extracted from the instrumentation class into standalone factories\n *   and migrated to Sentry's span APIs; origin is folded into span creation instead of `index.ts` hooks\n * - Cross-service trace propagation uses Sentry's `getTraceData`/`continueTrace` instead of the OTel propagator\n * - Replaced the OTel context-key confirm-channel marker with a synchronous flag on the channel instance\n * - Dropped the instrumentation config and all hooks (publish/publishConfirm/consume/consumeEnd) and the\n *   `useLinksForConsume` path; the SDK never used them\n */\n\nimport { continueTrace, SPAN_STATUS_ERROR, timestampInSeconds, withActiveSpan } from '@sentry/core';\nimport type { Connection, Options, Replies } from './amqplib-types';\nimport { EndOperation, type ConsumeMessage, type Message } from './types';\nimport type {\n  InstrumentationConnection,\n  InstrumentationConsumeChannel,\n  InstrumentationConsumeMessage,\n  InstrumentationMessage,\n  InstrumentationPublishChannel,\n} from './utils';\nimport {\n  CHANNEL_CONSUME_TIMEOUT_TIMER,\n  CHANNEL_IS_CONFIRM_PUBLISHING,\n  CHANNEL_SPANS_NOT_ENDED,\n  CONNECTION_ATTRIBUTES,\n  getConnectionAttributesFromServer,\n  getConnectionAttributesFromUrl,\n  getHeaderAsString,\n  MESSAGE_STORED_SPAN,\n  startConsumeSpan,\n  startPublishSpan,\n} from './utils';\n\n// To prevent reference leaks from un-acked messages, their spans are closed after this timeout. The\n// upstream instrumentation exposed this as the `consumeTimeoutMs` option; the SDK always used the default.\nconst CONSUME_TIMEOUT_MS = 1000 * 60; // 1 minute\n\nfunction endConsumerSpan(\n  message: InstrumentationMessage,\n  isRejected: boolean | null,\n  operation: EndOperation,\n  requeue: boolean | undefined,\n): void {\n  const storedSpan = message[MESSAGE_STORED_SPAN];\n  if (!storedSpan) {\n    return;\n  }\n  if (isRejected !== false) {\n    storedSpan.setStatus({\n      code: SPAN_STATUS_ERROR,\n      message:\n        operation !== EndOperation.ChannelClosed && operation !== EndOperation.ChannelError\n          ? `${operation} called on message${\n              requeue === true ? ' with requeue' : requeue === false ? ' without requeue' : ''\n            }`\n          : operation,\n    });\n  }\n  storedSpan.end();\n  message[MESSAGE_STORED_SPAN] = undefined;\n}\n\nfunction endAllSpansOnChannel(\n  channel: InstrumentationConsumeChannel,\n  isRejected: boolean,\n  operation: EndOperation,\n  requeue: boolean | undefined,\n): void {\n  const spansNotEnded: { msg: Message }[] = channel[CHANNEL_SPANS_NOT_ENDED] ?? [];\n  spansNotEnded.forEach(msgDetails => {\n    endConsumerSpan(msgDetails.msg, isRejected, operation, requeue);\n  });\n  channel[CHANNEL_SPANS_NOT_ENDED] = [];\n}\n\nfunction checkConsumeTimeoutOnChannel(channel: InstrumentationConsumeChannel): void {\n  const currentTime = timestampInSeconds();\n  const spansNotEnded = channel[CHANNEL_SPANS_NOT_ENDED] ?? [];\n  let i: number;\n  for (i = 0; i < spansNotEnded.length; i++) {\n    const currMessage = spansNotEnded[i]!;\n    const timeFromConsumeMs = (currentTime - currMessage.timeOfConsume) * 1000;\n    if (timeFromConsumeMs < CONSUME_TIMEOUT_MS) {\n      break;\n    }\n    endConsumerSpan(currMessage.msg, null, EndOperation.InstrumentationTimeout, true);\n  }\n  spansNotEnded.splice(0, i);\n}\n\nexport function getConnectPatch(\n  original: (\n    url: string | Options.Connect,\n    socketOptions: any,\n    openCallback: (err: any, connection: Connection) => void,\n  ) => Connection,\n) {\n  return function patchedConnect(\n    this: unknown,\n    url: string | Options.Connect,\n    socketOptions: any,\n    openCallback: Function,\n  ): Connection {\n    return original.call(this, url, socketOptions, function (this: unknown, err: any, conn: InstrumentationConnection) {\n      if (err == null) {\n        const urlAttributes = getConnectionAttributesFromUrl(url);\n        const serverAttributes = getConnectionAttributesFromServer(conn);\n        conn[CONNECTION_ATTRIBUTES] = {\n          ...urlAttributes,\n          ...serverAttributes,\n        };\n      }\n      openCallback.apply(this, arguments);\n    });\n  };\n}\n\nexport function getChannelEmitPatch(original: Function) {\n  return function emit(this: InstrumentationConsumeChannel, eventName: string): void {\n    if (eventName === 'close') {\n      endAllSpansOnChannel(this, true, EndOperation.ChannelClosed, undefined);\n      const activeTimer = this[CHANNEL_CONSUME_TIMEOUT_TIMER];\n      if (activeTimer) {\n        clearInterval(activeTimer);\n      }\n      this[CHANNEL_CONSUME_TIMEOUT_TIMER] = undefined;\n    } else if (eventName === 'error') {\n      endAllSpansOnChannel(this, true, EndOperation.ChannelError, undefined);\n    }\n    return original.apply(this, arguments);\n  };\n}\n\nexport function getAckAllPatch(isRejected: boolean, endOperation: EndOperation) {\n  return (original: Function) =>\n    function ackAll(this: InstrumentationConsumeChannel, requeueOrEmpty?: boolean): void {\n      endAllSpansOnChannel(this, isRejected, endOperation, requeueOrEmpty);\n      return original.apply(this, arguments);\n    };\n}\n\nexport function getAckPatch(isRejected: boolean, endOperation: EndOperation) {\n  return (original: Function) =>\n    function ack(\n      this: InstrumentationConsumeChannel,\n      message: Message,\n      allUpToOrRequeue?: boolean,\n      requeue?: boolean,\n    ): void {\n      const channel = this;\n      // we use this patch in the reject function as well, but it has a different signature\n      const requeueResolved = endOperation === EndOperation.Reject ? allUpToOrRequeue : requeue;\n\n      const spansNotEnded: { msg: Message }[] = channel[CHANNEL_SPANS_NOT_ENDED] ?? [];\n      const msgIndex = spansNotEnded.findIndex(msgDetails => msgDetails.msg === message);\n      if (msgIndex < 0) {\n        // should not happen in the happy flow, but possible if the user calls ack twice with the same message\n        endConsumerSpan(message, isRejected, endOperation, requeueResolved);\n      } else if (endOperation !== EndOperation.Reject && allUpToOrRequeue) {\n        for (let i = 0; i <= msgIndex; i++) {\n          endConsumerSpan(spansNotEnded[i]!.msg, isRejected, endOperation, requeueResolved);\n        }\n        spansNotEnded.splice(0, msgIndex + 1);\n      } else {\n        endConsumerSpan(message, isRejected, endOperation, requeueResolved);\n        spansNotEnded.splice(msgIndex, 1);\n      }\n      return original.apply(this, arguments);\n    };\n}\n\nexport function getConsumePatch(original: Function) {\n  return function consume(\n    this: InstrumentationConsumeChannel,\n    queue: string,\n    onMessage: (msg: ConsumeMessage | null) => void,\n    options?: Options.Consume,\n  ): Promise<Replies.Consume> {\n    const channel = this;\n    if (!Object.prototype.hasOwnProperty.call(channel, CHANNEL_SPANS_NOT_ENDED)) {\n      const timer = setInterval(() => {\n        checkConsumeTimeoutOnChannel(channel);\n      }, CONSUME_TIMEOUT_MS);\n      timer.unref();\n      channel[CHANNEL_CONSUME_TIMEOUT_TIMER] = timer;\n      channel[CHANNEL_SPANS_NOT_ENDED] = [];\n    }\n\n    const patchedOnMessage = function (this: unknown, msg: InstrumentationConsumeMessage | null): void {\n      // msg is expected to be null for a consumer cancel notification\n      // https://www.rabbitmq.com/consumer-cancel.html\n      // in this case, we do not start a span, as this is not a real message.\n      if (!msg) {\n        return onMessage.call(this, msg);\n      }\n\n      const headers = msg.properties.headers ?? {};\n      const sentryTrace = getHeaderAsString(headers, 'sentry-trace');\n      const baggage = getHeaderAsString(headers, 'baggage');\n\n      // Continue the producer's trace so the consumer span is parented to the message's producer.\n      continueTrace({ sentryTrace, baggage }, () => {\n        const span = startConsumeSpan(queue, msg, channel);\n\n        if (!options?.noAck) {\n          // store the message on the channel so we can close the span on ackAll etc\n          channel[CHANNEL_SPANS_NOT_ENDED]!.push({ msg, timeOfConsume: timestampInSeconds() });\n          // store the span on the message so we can end it when the user calls 'ack' on it\n          msg[MESSAGE_STORED_SPAN] = span;\n        }\n        withActiveSpan(span, () => {\n          onMessage.call(this, msg);\n        });\n\n        if (options?.noAck) {\n          span.end();\n        }\n      });\n    };\n\n    // Copy `arguments` instead of mutating it: in CJS builds it's aliased to the named parameters,\n    // so `arguments[1] = ...` would also reassign `onMessage` to `patchedOnMessage`, making the wrapper\n    // call itself and recurse infinitely.\n    const callArgs = Array.prototype.slice.call(arguments);\n    callArgs[1] = patchedOnMessage;\n    return original.apply(this, callArgs);\n  };\n}\n\nexport function getConfirmedPublishPatch(original: Function) {\n  return function confirmedPublish(\n    this: InstrumentationPublishChannel,\n    exchange: string,\n    routingKey: string,\n    content: Buffer,\n    options?: Options.Publish,\n    callback?: (err: any, ok: Replies.Empty) => void,\n  ): boolean {\n    const channel = this;\n    const { span, modifiedOptions } = startPublishSpan(exchange, routingKey, channel, options);\n\n    const patchedOnConfirm = function (this: unknown, err: any, ok: Replies.Empty): void {\n      try {\n        withActiveSpan(span, () => {\n          callback?.call(this, err, ok);\n        });\n      } finally {\n        if (err) {\n          span.setStatus({ code: SPAN_STATUS_ERROR, message: \"message confirmation has been nack'ed\" });\n        }\n        span.end();\n      }\n    };\n\n    // The confirm channel publish stores the message and registers a broker-confirm callback; the span\n    // ends in that callback. The confirm publish internally delegates to the base channel publish, so we\n    // flag the channel to stop the base publish patch from creating a second span. The inner call is\n    // synchronous, so a flag on the instance is enough and avoids the OTel context machinery.\n    const argumentsCopy = [...arguments];\n    argumentsCopy[3] = modifiedOptions;\n    argumentsCopy[4] = patchedOnConfirm;\n    channel[CHANNEL_IS_CONFIRM_PUBLISHING] = true;\n    try {\n      return original.apply(this, argumentsCopy);\n    } finally {\n      channel[CHANNEL_IS_CONFIRM_PUBLISHING] = false;\n    }\n  };\n}\n\nexport function getPublishPatch(original: Function) {\n  return function publish(\n    this: InstrumentationPublishChannel,\n    exchange: string,\n    routingKey: string,\n    content: Buffer,\n    options?: Options.Publish,\n  ): boolean {\n    if (this[CHANNEL_IS_CONFIRM_PUBLISHING]) {\n      // already instrumented by the confirm-channel publish patch\n      return original.apply(this, arguments);\n    }\n    const channel = this;\n    const { span, modifiedOptions } = startPublishSpan(exchange, routingKey, channel, options);\n\n    // calling the normal channel publish function only stores the message in the queue; it does not send\n    // it and wait for an ack, so the span duration is expected to be very short.\n    const argumentsCopy = [...arguments];\n    argumentsCopy[3] = modifiedOptions;\n    const originalRes = original.apply(this, argumentsCopy);\n    span.end();\n    return originalRes;\n  };\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-amqplib\n * - Upstream version: @opentelemetry/instrumentation-amqplib@0.65.0\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs; the channel/connection\n *   patches live in `patches.ts` and span creation in `utils.ts`\n * - Dropped the instrumentation config and all hooks; origin is folded into span creation instead of\n *   `index.ts` hooks (see `patches.ts`/`utils.ts` for details)\n */\n\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport { SDK_VERSION } from '@sentry/core';\nimport { InstrumentationNodeModuleFile } from '../../InstrumentationNodeModuleFile';\nimport {\n  getAckAllPatch,\n  getAckPatch,\n  getChannelEmitPatch,\n  getConfirmedPublishPatch,\n  getConnectPatch,\n  getConsumePatch,\n  getPublishPatch,\n} from './patches';\nimport { EndOperation } from './types';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-amqplib';\nconst supportedVersions = ['>=0.5.5 <2'];\n\nexport class AmqplibInstrumentation extends InstrumentationBase<InstrumentationConfig> {\n  public constructor(config: InstrumentationConfig = {}) {\n    super(PACKAGE_NAME, SDK_VERSION, config);\n  }\n\n  protected init(): InstrumentationNodeModuleDefinition {\n    const channelModelModuleFile = new InstrumentationNodeModuleFile(\n      'amqplib/lib/channel_model.js',\n      supportedVersions,\n      this.patchChannelModel.bind(this),\n      this.unpatchChannelModel.bind(this),\n    );\n\n    const callbackModelModuleFile = new InstrumentationNodeModuleFile(\n      'amqplib/lib/callback_model.js',\n      supportedVersions,\n      this.patchChannelModel.bind(this),\n      this.unpatchChannelModel.bind(this),\n    );\n\n    const connectModuleFile = new InstrumentationNodeModuleFile(\n      'amqplib/lib/connect.js',\n      supportedVersions,\n      this.patchConnect.bind(this),\n      this.unpatchConnect.bind(this),\n    );\n\n    const module = new InstrumentationNodeModuleDefinition('amqplib', supportedVersions, undefined, undefined, [\n      channelModelModuleFile,\n      connectModuleFile,\n      callbackModelModuleFile,\n    ]);\n    return module;\n  }\n\n  private patchConnect(moduleExports: any): any {\n    const unpatchedExports = this.unpatchConnect(moduleExports);\n    if (!isWrapped(unpatchedExports.connect)) {\n      this._wrap(unpatchedExports, 'connect', getConnectPatch);\n    }\n    return unpatchedExports;\n  }\n\n  private unpatchConnect(moduleExports: any): any {\n    if (isWrapped(moduleExports.connect)) {\n      this._unwrap(moduleExports, 'connect');\n    }\n    return moduleExports;\n  }\n\n  private patchChannelModel(moduleExports: any): any {\n    if (!isWrapped(moduleExports.Channel.prototype.publish)) {\n      this._wrap(moduleExports.Channel.prototype, 'publish', getPublishPatch);\n    }\n    if (!isWrapped(moduleExports.Channel.prototype.consume)) {\n      this._wrap(moduleExports.Channel.prototype, 'consume', getConsumePatch);\n    }\n    if (!isWrapped(moduleExports.Channel.prototype.ack)) {\n      this._wrap(moduleExports.Channel.prototype, 'ack', getAckPatch(false, EndOperation.Ack));\n    }\n    if (!isWrapped(moduleExports.Channel.prototype.nack)) {\n      this._wrap(moduleExports.Channel.prototype, 'nack', getAckPatch(true, EndOperation.Nack));\n    }\n    if (!isWrapped(moduleExports.Channel.prototype.reject)) {\n      this._wrap(moduleExports.Channel.prototype, 'reject', getAckPatch(true, EndOperation.Reject));\n    }\n    if (!isWrapped(moduleExports.Channel.prototype.ackAll)) {\n      this._wrap(moduleExports.Channel.prototype, 'ackAll', getAckAllPatch(false, EndOperation.AckAll));\n    }\n    if (!isWrapped(moduleExports.Channel.prototype.nackAll)) {\n      this._wrap(moduleExports.Channel.prototype, 'nackAll', getAckAllPatch(true, EndOperation.NackAll));\n    }\n    if (!isWrapped(moduleExports.Channel.prototype.emit)) {\n      this._wrap(moduleExports.Channel.prototype, 'emit', getChannelEmitPatch);\n    }\n    if (!isWrapped(moduleExports.ConfirmChannel.prototype.publish)) {\n      this._wrap(moduleExports.ConfirmChannel.prototype, 'publish', getConfirmedPublishPatch);\n    }\n    return moduleExports;\n  }\n\n  private unpatchChannelModel(moduleExports: any): any {\n    if (isWrapped(moduleExports.Channel.prototype.publish)) {\n      this._unwrap(moduleExports.Channel.prototype, 'publish');\n    }\n    if (isWrapped(moduleExports.Channel.prototype.consume)) {\n      this._unwrap(moduleExports.Channel.prototype, 'consume');\n    }\n    if (isWrapped(moduleExports.Channel.prototype.ack)) {\n      this._unwrap(moduleExports.Channel.prototype, 'ack');\n    }\n    if (isWrapped(moduleExports.Channel.prototype.nack)) {\n      this._unwrap(moduleExports.Channel.prototype, 'nack');\n    }\n    if (isWrapped(moduleExports.Channel.prototype.reject)) {\n      this._unwrap(moduleExports.Channel.prototype, 'reject');\n    }\n    if (isWrapped(moduleExports.Channel.prototype.ackAll)) {\n      this._unwrap(moduleExports.Channel.prototype, 'ackAll');\n    }\n    if (isWrapped(moduleExports.Channel.prototype.nackAll)) {\n      this._unwrap(moduleExports.Channel.prototype, 'nackAll');\n    }\n    if (isWrapped(moduleExports.Channel.prototype.emit)) {\n      this._unwrap(moduleExports.Channel.prototype, 'emit');\n    }\n    if (isWrapped(moduleExports.ConfirmChannel.prototype.publish)) {\n      this._unwrap(moduleExports.ConfirmChannel.prototype, 'publish');\n    }\n    return moduleExports;\n  }\n}\n", "import type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { AmqplibInstrumentation } from './vendored/instrumentation';\n\nconst INTEGRATION_NAME = 'Amqplib' as const;\n\nexport const instrumentAmqplib = generateInstrumentOnce(INTEGRATION_NAME, () => new AmqplibInstrumentation());\n\nconst _amqplibIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      instrumentAmqplib();\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [amqplib](https://www.npmjs.com/package/amqplib) library.\n *\n * For more information, see the [`amqplibIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/amqplib/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *  integrations: [Sentry.amqplibIntegration()],\n * });\n * ```\n */\nexport const amqplibIntegration = defineIntegration(_amqplibIntegration);\n", "export const INTEGRATION_NAME = 'VercelAI' as const;\n", "import type { InstrumentationConfig, InstrumentationModuleDefinition } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition } from '@opentelemetry/instrumentation';\nimport {\n  _INTERNAL_cleanupToolCallSpanContext,\n  _INTERNAL_getSpanContextForToolCallId,\n  addNonEnumerableProperty,\n  captureException,\n  getActiveSpan,\n  getClient,\n  handleCallbackErrors,\n  SDK_VERSION,\n  withScope,\n} from '@sentry/core';\nimport { INTEGRATION_NAME } from './constants';\nimport type { TelemetrySettings, VercelAiIntegration } from './types';\n\nconst SUPPORTED_VERSIONS = ['>=3.0.0 <7'];\n\n// List of patched methods\n// From: https://sdk.vercel.ai/docs/ai-sdk-core/telemetry#collected-data\nconst INSTRUMENTED_METHODS = [\n  'generateText',\n  'streamText',\n  'generateObject',\n  'streamObject',\n  'embed',\n  'embedMany',\n  'rerank',\n] as const;\n\ninterface MethodFirstArg extends Record<string, unknown> {\n  experimental_telemetry?: TelemetrySettings;\n}\n\ntype MethodArgs = [MethodFirstArg, ...unknown[]];\n\ntype PatchedModuleExports = Record<(typeof INSTRUMENTED_METHODS)[number], (...args: MethodArgs) => unknown> &\n  Record<string, unknown>;\n\ninterface RecordingOptions {\n  recordInputs?: boolean;\n  recordOutputs?: boolean;\n}\n\ninterface ToolError {\n  type: 'tool-error' | 'tool-result' | 'tool-call';\n  toolCallId: string;\n  toolName: string;\n  input?: {\n    [key: string]: unknown;\n  };\n  error: Error;\n  dynamic?: boolean;\n}\n\nfunction isToolError(obj: unknown): obj is ToolError {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  const candidate = obj as Record<string, unknown>;\n  return (\n    'type' in candidate &&\n    'error' in candidate &&\n    'toolName' in candidate &&\n    'toolCallId' in candidate &&\n    candidate.type === 'tool-error' &&\n    candidate.error instanceof Error\n  );\n}\n\n/**\n * Process tool call results: capture tool errors and clean up span context mappings.\n *\n * Error checking runs first (needs span context for linking), then cleanup removes all entries.\n * Tool errors are not rejected in Vercel AI V5 — they appear as metadata in the result content.\n */\nexport function processToolCallResults(result: unknown): void {\n  if (typeof result !== 'object' || result === null || !('content' in result)) {\n    return;\n  }\n\n  // A streamed result derives `content` from a stream that hasn't settled, so reading it both\n  // starts draining the stream and hands back a promise we drop — which surfaces as an unhandled\n  // rejection once the stream fails. Streamed tool errors were never processed here anyway.\n  if (typeof (result as { consumeStream?: unknown }).consumeStream === 'function') {\n    return;\n  }\n\n  const resultObj = result as { content: Array<object> };\n  if (!Array.isArray(resultObj.content)) {\n    return;\n  }\n\n  captureToolErrors(resultObj.content);\n  cleanupToolCallSpanContexts(resultObj.content);\n}\n\nfunction captureToolErrors(content: Array<object>): void {\n  for (const item of content) {\n    if (!isToolError(item)) {\n      continue;\n    }\n\n    // Try to get the span context associated with this tool call ID\n    const spanContext = _INTERNAL_getSpanContextForToolCallId(item.toolCallId);\n\n    if (spanContext) {\n      // We have the span context, so link the error using span and trace IDs\n      withScope(scope => {\n        scope.setContext('trace', {\n          trace_id: spanContext.traceId,\n          span_id: spanContext.spanId,\n        });\n\n        scope.setTag('vercel.ai.tool.name', item.toolName);\n        scope.setTag('vercel.ai.tool.callId', item.toolCallId);\n        scope.setLevel('error');\n\n        captureException(item.error, {\n          mechanism: {\n            type: 'auto.vercelai.otel',\n            handled: false,\n          },\n        });\n      });\n    } else {\n      // Fallback: capture without span linking\n      withScope(scope => {\n        scope.setTag('vercel.ai.tool.name', item.toolName);\n        scope.setTag('vercel.ai.tool.callId', item.toolCallId);\n        scope.setLevel('error');\n\n        captureException(item.error, {\n          mechanism: {\n            type: 'auto.vercelai.otel',\n            handled: false,\n          },\n        });\n      });\n    }\n  }\n}\n\n/**\n * Remove span context entries for all completed tool calls in the content array.\n */\nexport function cleanupToolCallSpanContexts(content: Array<object>): void {\n  for (const item of content) {\n    if (\n      typeof item === 'object' &&\n      item !== null &&\n      'toolCallId' in item &&\n      typeof (item as Record<string, unknown>).toolCallId === 'string'\n    ) {\n      _INTERNAL_cleanupToolCallSpanContext((item as Record<string, unknown>).toolCallId as string);\n    }\n  }\n}\n\n/**\n * Determines whether to record inputs and outputs for Vercel AI telemetry based on the configuration hierarchy.\n *\n * The order of precedence is:\n * 1. The vercel ai integration options\n * 2. The experimental_telemetry options in the vercel ai method calls\n * 3. When telemetry is explicitly enabled (isEnabled: true), default to recording\n * 4. Otherwise, use the dataCollection.genAI settings from client options\n */\nexport function determineRecordingSettings(\n  integrationRecordingOptions: RecordingOptions | undefined,\n  methodTelemetryOptions: RecordingOptions,\n  telemetryExplicitlyEnabled: boolean | undefined,\n  defaultInputsEnabled: boolean,\n  defaultOutputsEnabled: boolean,\n): { recordInputs: boolean; recordOutputs: boolean } {\n  const recordInputs =\n    integrationRecordingOptions?.recordInputs !== undefined\n      ? integrationRecordingOptions.recordInputs\n      : methodTelemetryOptions.recordInputs !== undefined\n        ? methodTelemetryOptions.recordInputs\n        : telemetryExplicitlyEnabled === true\n          ? true // When telemetry is explicitly enabled, default to recording inputs\n          : defaultInputsEnabled;\n\n  const recordOutputs =\n    integrationRecordingOptions?.recordOutputs !== undefined\n      ? integrationRecordingOptions.recordOutputs\n      : methodTelemetryOptions.recordOutputs !== undefined\n        ? methodTelemetryOptions.recordOutputs\n        : telemetryExplicitlyEnabled === true\n          ? true // When telemetry is explicitly enabled, default to recording outputs\n          : defaultOutputsEnabled;\n\n  return { recordInputs, recordOutputs };\n}\n\n/**\n * This detects is added by the Sentry Vercel AI Integration to detect if the integration should\n * be enabled.\n *\n * It also patches the `ai` module to enable Vercel AI telemetry automatically for all methods.\n */\nexport class SentryVercelAiInstrumentation extends InstrumentationBase {\n  private _isPatched = false;\n  private _callbacks: (() => void)[] = [];\n\n  public constructor(config: InstrumentationConfig = {}) {\n    super('@sentry/instrumentation-vercel-ai', SDK_VERSION, config);\n  }\n\n  /**\n   * Initializes the instrumentation by defining the modules to be patched.\n   */\n  public init(): InstrumentationModuleDefinition {\n    const module = new InstrumentationNodeModuleDefinition('ai', SUPPORTED_VERSIONS, this._patch.bind(this));\n    return module;\n  }\n\n  /**\n   * Call the provided callback when the module is patched.\n   * If it has already been patched, the callback will be called immediately.\n   */\n  public callWhenPatched(callback: () => void): void {\n    if (this._isPatched) {\n      callback();\n    } else {\n      this._callbacks.push(callback);\n    }\n  }\n\n  /**\n   * Patches module exports to enable Vercel AI telemetry.\n   */\n  private _patch(moduleExports: PatchedModuleExports): unknown {\n    this._isPatched = true;\n\n    this._callbacks.forEach(callback => callback());\n    this._callbacks = [];\n\n    const generatePatch = <T extends (...args: MethodArgs) => unknown>(originalMethod: T): T => {\n      return new Proxy(originalMethod, {\n        apply: (target, thisArg, args: MethodArgs) => {\n          const existingExperimentalTelemetry = args[0].experimental_telemetry || {};\n          const isEnabled = existingExperimentalTelemetry.isEnabled;\n\n          const client = getClient();\n          const integration = client?.getIntegrationByName<VercelAiIntegration>(INTEGRATION_NAME);\n          const integrationOptions = integration?.options;\n          const genAI = integration ? client?.getDataCollectionOptions().genAI : undefined;\n\n          const { recordInputs, recordOutputs } = determineRecordingSettings(\n            integrationOptions,\n            existingExperimentalTelemetry,\n            isEnabled,\n            Boolean(genAI?.inputs),\n            Boolean(genAI?.outputs),\n          );\n\n          args[0].experimental_telemetry = {\n            ...existingExperimentalTelemetry,\n            isEnabled: isEnabled !== undefined ? isEnabled : true,\n            recordInputs,\n            recordOutputs,\n          };\n\n          return handleCallbackErrors(\n            () => Reflect.apply(target, thisArg, args),\n            error => {\n              // This error bubbles up to unhandledrejection handler (if not handled before),\n              // where we do not know the active span anymore\n              // So to circumvent this, we set the active span on the error object\n              // which is picked up by the unhandledrejection handler\n              if (error && typeof error === 'object') {\n                addNonEnumerableProperty(error, '_sentry_active_span', getActiveSpan());\n              }\n            },\n            () => {},\n            result => {\n              processToolCallResults(result);\n            },\n          );\n        },\n      });\n    };\n\n    // Is this an ESM module?\n    // https://tc39.es/ecma262/#sec-module-namespace-objects\n    if (Object.prototype.toString.call(moduleExports) === '[object Module]') {\n      // In ESM we take the usual route and just replace the exports we want to instrument\n      for (const method of INSTRUMENTED_METHODS) {\n        // Skip methods that don't exist in this version of the AI SDK (e.g., rerank was added in v6)\n        if (moduleExports[method] != null) {\n          moduleExports[method] = generatePatch(moduleExports[method]);\n        }\n      }\n\n      return moduleExports;\n    } else {\n      // In CJS we can't replace the exports in the original module because they\n      // don't have setters, so we create a new object with the same properties\n      const patchedModuleExports = INSTRUMENTED_METHODS.reduce((acc, curr) => {\n        // Skip methods that don't exist in this version of the AI SDK (e.g., rerank was added in v6)\n        if (moduleExports[curr] != null) {\n          acc[curr] = generatePatch(moduleExports[curr]);\n        }\n        return acc;\n      }, {} as PatchedModuleExports);\n\n      return { ...moduleExports, ...patchedModuleExports };\n    }\n  }\n}\n", "import type { Client, IntegrationFn } from '@sentry/core';\nimport { addVercelAiProcessors, defineIntegration, extendIntegration } from '@sentry/core';\nimport { generateInstrumentOnce, type modulesIntegration } from '@sentry/node-core';\nimport { vercelAiIntegration as serverUtilsVercelAiIntegration } from '@sentry/server-utils';\nimport { INTEGRATION_NAME } from './constants';\nimport { SentryVercelAiInstrumentation } from './instrumentation';\nimport type { VercelAiOptions } from './types';\n\nexport const instrumentVercelAi = generateInstrumentOnce(INTEGRATION_NAME, () => new SentryVercelAiInstrumentation({}));\n\n/**\n * Determines if the integration should be forced based on environment and package availability.\n * Returns true if the 'ai' package is available.\n */\nfunction shouldForceIntegration(client: Client): boolean {\n  const modules = client.getIntegrationByName<ReturnType<typeof modulesIntegration>>('Modules');\n  return !!modules?.getModules?.()?.ai;\n}\n\nconst _vercelAIIntegration = ((options: VercelAiOptions = {}) => {\n  let instrumentation: undefined | SentryVercelAiInstrumentation;\n\n  const parentIntegration = serverUtilsVercelAiIntegration(options);\n\n  return extendIntegration(parentIntegration, {\n    options,\n    setupOnce() {\n      instrumentation = instrumentVercelAi();\n    },\n    afterAllSetup(client) {\n      // Auto-detect if we should force the integration when running with 'ai' package available\n      // Note that this can only be detected if the 'Modules' integration is available, and running in CJS mode\n      const shouldForce = options.force ?? shouldForceIntegration(client);\n\n      if (shouldForce) {\n        addVercelAiProcessors(client);\n      } else {\n        instrumentation?.callWhenPatched(() => addVercelAiProcessors(client));\n      }\n    },\n  });\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [ai](https://www.npmjs.com/package/ai) library.\n *\n * For more information, see the [`ai` documentation](https://sdk.vercel.ai/docs/ai-sdk-core/telemetry).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n *  integrations: [Sentry.vercelAIIntegration()],\n * });\n * ```\n *\n * This integration adds tracing support to all `ai` function calls.\n * You need to opt-in to collecting spans for a specific call,\n * you can do so by setting `experimental_telemetry.isEnabled` to `true` in the first argument of the function call.\n *\n * ```javascript\n * const result = await generateText({\n *   model: openai('gpt-4-turbo'),\n *   experimental_telemetry: { isEnabled: true },\n * });\n * ```\n *\n * If you want to collect inputs and outputs for a specific call, you must specifically opt-in to each\n * function call by setting `experimental_telemetry.recordInputs` and `experimental_telemetry.recordOutputs`\n * to `true`.\n *\n * ```javascript\n * const result = await generateText({\n *  model: openai('gpt-4-turbo'),\n *  experimental_telemetry: { isEnabled: true, recordInputs: true, recordOutputs: true },\n * });\n */\nexport const vercelAIIntegration = defineIntegration(_vercelAIIntegration);\n", "import {\n  InstrumentationBase,\n  type InstrumentationConfig,\n  type InstrumentationModuleDefinition,\n  InstrumentationNodeModuleDefinition,\n} from '@opentelemetry/instrumentation';\nimport type { Integration, OpenAiClient, OpenAiOptions } from '@sentry/core';\nimport {\n  _INTERNAL_shouldSkipAiProviderWrapping,\n  instrumentOpenAiClient,\n  OPENAI_INTEGRATION_NAME,\n  SDK_VERSION,\n} from '@sentry/core';\n\nconst supportedVersions = ['>=4.0.0 <8'];\n\nexport interface OpenAiIntegration extends Integration {\n  options: OpenAiOptions;\n}\n\ntype OpenAiInstrumentationOptions = InstrumentationConfig & OpenAiOptions;\n\n/**\n * Represents the patched shape of the OpenAI module export.\n */\ninterface PatchedModuleExports {\n  [key: string]: unknown;\n  OpenAI: abstract new (...args: unknown[]) => OpenAiClient;\n  AzureOpenAI?: abstract new (...args: unknown[]) => OpenAiClient;\n}\n\n/**\n * Sentry OpenAI instrumentation using OpenTelemetry.\n */\nexport class SentryOpenAiInstrumentation extends InstrumentationBase<OpenAiInstrumentationOptions> {\n  public constructor(config: OpenAiInstrumentationOptions = {}) {\n    super('@sentry/instrumentation-openai', SDK_VERSION, config);\n  }\n\n  /**\n   * Initializes the instrumentation by defining the modules to be patched.\n   */\n  public init(): InstrumentationModuleDefinition {\n    const module = new InstrumentationNodeModuleDefinition('openai', supportedVersions, this._patch.bind(this));\n    return module;\n  }\n\n  /**\n   * Core patch logic applying instrumentation to the OpenAI and AzureOpenAI client constructors.\n   */\n  private _patch(exports: PatchedModuleExports): PatchedModuleExports | void {\n    let result = exports;\n    result = this._patchClient(result, 'OpenAI');\n    result = this._patchClient(result, 'AzureOpenAI');\n    return result;\n  }\n\n  /**\n   * Patch logic applying instrumentation to the specified client constructor.\n   */\n  private _patchClient(exports: PatchedModuleExports, exportKey: 'OpenAI' | 'AzureOpenAI'): PatchedModuleExports {\n    const Original = exports[exportKey];\n    if (!Original) {\n      return exports;\n    }\n\n    const config = this.getConfig();\n\n    const WrappedOpenAI = function (this: unknown, ...args: unknown[]) {\n      // Check if wrapping should be skipped (e.g., when LangChain is handling instrumentation)\n      if (_INTERNAL_shouldSkipAiProviderWrapping(OPENAI_INTEGRATION_NAME)) {\n        return Reflect.construct(Original, args) as OpenAiClient;\n      }\n\n      const instance = Reflect.construct(Original, args);\n\n      return instrumentOpenAiClient(instance as OpenAiClient, config);\n    } as unknown as abstract new (...args: unknown[]) => OpenAiClient;\n\n    // Preserve static and prototype chains\n    Object.setPrototypeOf(WrappedOpenAI, Original);\n    Object.setPrototypeOf(WrappedOpenAI.prototype, Original.prototype);\n\n    for (const key of Object.getOwnPropertyNames(Original)) {\n      if (!['length', 'name', 'prototype'].includes(key)) {\n        const descriptor = Object.getOwnPropertyDescriptor(Original, key);\n        if (descriptor) {\n          Object.defineProperty(WrappedOpenAI, key, descriptor);\n        }\n      }\n    }\n\n    // Constructor replacement - handle read-only properties\n    // The OpenAI property might have only a getter, so use defineProperty\n    try {\n      exports[exportKey] = WrappedOpenAI;\n    } catch {\n      // If direct assignment fails, override the property descriptor\n      Object.defineProperty(exports, exportKey, {\n        value: WrappedOpenAI,\n        writable: true,\n        configurable: true,\n        enumerable: true,\n      });\n    }\n\n    // Wrap the default export if it points to the original constructor\n    // Constructor replacement - handle read-only properties\n    // The OpenAI property might have only a getter, so use defineProperty\n    if (exports.default === Original) {\n      try {\n        exports.default = WrappedOpenAI;\n      } catch {\n        // If direct assignment fails, override the property descriptor\n        Object.defineProperty(exports, 'default', {\n          value: WrappedOpenAI,\n          writable: true,\n          configurable: true,\n          enumerable: true,\n        });\n      }\n    }\n    return exports;\n  }\n}\n", "import type { IntegrationFn, OpenAiOptions } from '@sentry/core';\nimport { defineIntegration, OPENAI_INTEGRATION_NAME } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { SentryOpenAiInstrumentation } from './instrumentation';\n\nexport const instrumentOpenAi = generateInstrumentOnce<OpenAiOptions>(\n  OPENAI_INTEGRATION_NAME,\n  options => new SentryOpenAiInstrumentation(options),\n);\n\nconst _openAiIntegration = ((options: OpenAiOptions = {}) => {\n  return {\n    name: OPENAI_INTEGRATION_NAME,\n    setupOnce() {\n      instrumentOpenAi(options);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the OpenAI SDK.\n *\n * This integration is enabled by default.\n *\n * When configured, this integration automatically instruments OpenAI SDK client instances\n * to capture telemetry data following OpenTelemetry Semantic Conventions for Generative AI.\n *\n * @example\n * ```javascript\n * import * as Sentry from '@sentry/node';\n *\n * Sentry.init({\n *   integrations: [Sentry.openAIIntegration()],\n * });\n * ```\n *\n * ## Options\n *\n * - `recordInputs`: Whether to record input messages/prompts (default: follows `dataCollection.genAI.inputs`, or the deprecated `sendDefaultPii` option)\n * - `recordOutputs`: Whether to record response text (default: follows `dataCollection.genAI.outputs`, or the deprecated `sendDefaultPii` option)\n *\n * ### Default Behavior\n *\n * By default, the integration will:\n * - Record inputs and outputs based on `dataCollection.genAI` in your Sentry client options\n *   (or the deprecated `sendDefaultPii` option, for backwards compatibility)\n * - Integration-level `recordInputs`/`recordOutputs` options take precedence over global config\n *\n * @example\n * ```javascript\n * // Always record inputs and outputs regardless of global dataCollection config\n * Sentry.init({\n *   integrations: [\n *     Sentry.openAIIntegration({\n *       recordInputs: true,\n *       recordOutputs: true\n *     })\n *   ],\n * });\n *\n * // Never record inputs/outputs regardless of global dataCollection config\n * Sentry.init({\n *   dataCollection: { genAI: { inputs: true, outputs: true } },\n *   integrations: [\n *     Sentry.openAIIntegration({\n *       recordInputs: false,\n *       recordOutputs: false\n *     })\n *   ],\n * });\n * ```\n *\n */\nexport const openAIIntegration = defineIntegration(_openAiIntegration);\n", "import {\n  InstrumentationBase,\n  type InstrumentationConfig,\n  type InstrumentationModuleDefinition,\n  InstrumentationNodeModuleDefinition,\n} from '@opentelemetry/instrumentation';\nimport type { AnthropicAiClient, AnthropicAiOptions } from '@sentry/core';\nimport {\n  _INTERNAL_shouldSkipAiProviderWrapping,\n  ANTHROPIC_AI_INTEGRATION_NAME,\n  instrumentAnthropicAiClient,\n  SDK_VERSION,\n} from '@sentry/core';\n\nconst supportedVersions = ['>=0.19.2 <1.0.0'];\n\ntype AnthropicAiInstrumentationOptions = InstrumentationConfig & AnthropicAiOptions;\n\n/**\n * Represents the patched shape of the Anthropic AI module export.\n */\ninterface PatchedModuleExports {\n  [key: string]: unknown;\n  Anthropic: abstract new (...args: unknown[]) => AnthropicAiClient;\n}\n\n/**\n * Sentry Anthropic AI instrumentation using OpenTelemetry.\n */\nexport class SentryAnthropicAiInstrumentation extends InstrumentationBase<AnthropicAiInstrumentationOptions> {\n  public constructor(config: AnthropicAiInstrumentationOptions = {}) {\n    super('@sentry/instrumentation-anthropic-ai', SDK_VERSION, config);\n  }\n\n  /**\n   * Initializes the instrumentation by defining the modules to be patched.\n   */\n  public init(): InstrumentationModuleDefinition {\n    const module = new InstrumentationNodeModuleDefinition(\n      '@anthropic-ai/sdk',\n      supportedVersions,\n      this._patch.bind(this),\n    );\n    return module;\n  }\n\n  /**\n   * Core patch logic applying instrumentation to the Anthropic AI client constructor.\n   */\n  private _patch(exports: PatchedModuleExports): PatchedModuleExports | void {\n    const Original = exports.Anthropic;\n\n    const config = this.getConfig();\n\n    const WrappedAnthropic = function (this: unknown, ...args: unknown[]) {\n      // Check if wrapping should be skipped (e.g., when LangChain is handling instrumentation)\n      if (_INTERNAL_shouldSkipAiProviderWrapping(ANTHROPIC_AI_INTEGRATION_NAME)) {\n        return Reflect.construct(Original, args) as AnthropicAiClient;\n      }\n\n      const instance = Reflect.construct(Original, args);\n\n      return instrumentAnthropicAiClient(instance as AnthropicAiClient, config);\n    } as unknown as abstract new (...args: unknown[]) => AnthropicAiClient;\n\n    // Preserve static and prototype chains\n    Object.setPrototypeOf(WrappedAnthropic, Original);\n    Object.setPrototypeOf(WrappedAnthropic.prototype, Original.prototype);\n\n    for (const key of Object.getOwnPropertyNames(Original)) {\n      if (!['length', 'name', 'prototype'].includes(key)) {\n        const descriptor = Object.getOwnPropertyDescriptor(Original, key);\n        if (descriptor) {\n          Object.defineProperty(WrappedAnthropic, key, descriptor);\n        }\n      }\n    }\n\n    // Constructor replacement - handle read-only properties\n    // The Anthropic property might have only a getter, so use defineProperty\n    try {\n      exports.Anthropic = WrappedAnthropic;\n    } catch {\n      // If direct assignment fails, override the property descriptor\n      Object.defineProperty(exports, 'Anthropic', {\n        value: WrappedAnthropic,\n        writable: true,\n        configurable: true,\n        enumerable: true,\n      });\n    }\n\n    // Wrap the default export if it points to the original constructor\n    // Constructor replacement - handle read-only properties\n    // The Anthropic property might have only a getter, so use defineProperty\n    if (exports.default === Original) {\n      try {\n        exports.default = WrappedAnthropic;\n      } catch {\n        // If direct assignment fails, override the property descriptor\n        Object.defineProperty(exports, 'default', {\n          value: WrappedAnthropic,\n          writable: true,\n          configurable: true,\n          enumerable: true,\n        });\n      }\n    }\n    return exports;\n  }\n}\n", "import type { AnthropicAiOptions, IntegrationFn } from '@sentry/core';\nimport { ANTHROPIC_AI_INTEGRATION_NAME, defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { SentryAnthropicAiInstrumentation } from './instrumentation';\n\nexport const instrumentAnthropicAi = generateInstrumentOnce<AnthropicAiOptions>(\n  ANTHROPIC_AI_INTEGRATION_NAME,\n  options => new SentryAnthropicAiInstrumentation(options),\n);\n\nconst _anthropicAIIntegration = ((options: AnthropicAiOptions = {}) => {\n  return {\n    name: ANTHROPIC_AI_INTEGRATION_NAME,\n    options,\n    setupOnce() {\n      instrumentAnthropicAi(options);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the Anthropic AI SDK.\n *\n * This integration is enabled by default.\n *\n * When configured, this integration automatically instruments Anthropic AI SDK client instances\n * to capture telemetry data following OpenTelemetry Semantic Conventions for Generative AI.\n *\n * @example\n * ```javascript\n * import * as Sentry from '@sentry/node';\n *\n * Sentry.init({\n *   integrations: [Sentry.anthropicAIIntegration()],\n * });\n * ```\n *\n * ## Options\n *\n * - `recordInputs`: Whether to record prompt messages (default: follows `dataCollection.genAI.inputs`, or the deprecated `sendDefaultPii` option)\n * - `recordOutputs`: Whether to record response text (default: follows `dataCollection.genAI.outputs`, or the deprecated `sendDefaultPii` option)\n *\n * ### Default Behavior\n *\n * By default, the integration will:\n * - Record inputs and outputs based on `dataCollection.genAI` in your Sentry client options\n *   (or the deprecated `sendDefaultPii` option, for backwards compatibility)\n * - Integration-level `recordInputs`/`recordOutputs` options take precedence over global config\n *\n * @example\n * ```javascript\n * // Always record inputs and outputs regardless of global dataCollection config\n * Sentry.init({\n *   integrations: [\n *     Sentry.anthropicAIIntegration({\n *       recordInputs: true,\n *       recordOutputs: true\n *     })\n *   ],\n * });\n *\n * // Never record inputs/outputs regardless of global dataCollection config\n * Sentry.init({\n *   dataCollection: { genAI: { inputs: true, outputs: true } },\n *   integrations: [\n *     Sentry.anthropicAIIntegration({\n *       recordInputs: false,\n *       recordOutputs: false\n *     })\n *   ],\n * });\n * ```\n *\n */\nexport const anthropicAIIntegration = defineIntegration(_anthropicAIIntegration);\n", "import type { InstrumentationConfig, InstrumentationModuleDefinition } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition } from '@opentelemetry/instrumentation';\nimport { InstrumentationNodeModuleFile } from '../InstrumentationNodeModuleFile';\nimport type { GoogleGenAIClient, GoogleGenAIOptions } from '@sentry/core';\nimport {\n  _INTERNAL_shouldSkipAiProviderWrapping,\n  GOOGLE_GENAI_INTEGRATION_NAME,\n  instrumentGoogleGenAIClient,\n  replaceExports,\n  SDK_VERSION,\n} from '@sentry/core';\n\nconst supportedVersions = ['>=0.10.0 <2'];\n\n/**\n * Represents the patched shape of the Google GenAI module export.\n */\ninterface PatchedModuleExports {\n  [key: string]: unknown;\n  GoogleGenAI?: unknown;\n}\n\ntype GoogleGenAIInstrumentationOptions = GoogleGenAIOptions & InstrumentationConfig;\n\n/**\n * Sentry Google GenAI instrumentation using OpenTelemetry.\n */\nexport class SentryGoogleGenAiInstrumentation extends InstrumentationBase<GoogleGenAIInstrumentationOptions> {\n  public constructor(config: GoogleGenAIInstrumentationOptions = {}) {\n    super('@sentry/instrumentation-google-genai', SDK_VERSION, config);\n  }\n\n  /**\n   * Initializes the instrumentation by defining the modules to be patched.\n   */\n  public init(): InstrumentationModuleDefinition {\n    const module = new InstrumentationNodeModuleDefinition(\n      '@google/genai',\n      supportedVersions,\n      exports => this._patch(exports),\n      exports => exports,\n      // In CJS, @google/genai re-exports from (dist/node/index.cjs) file.\n      // Patching only the root module sometimes misses the real implementation or\n      // gets overwritten when that file is loaded. We add a file-level patch so that\n      // _patch runs again on the concrete implementation\n      [\n        new InstrumentationNodeModuleFile(\n          '@google/genai/dist/node/index.cjs',\n          supportedVersions,\n          exports => this._patch(exports),\n          exports => exports,\n        ),\n      ],\n    );\n    return module;\n  }\n\n  /**\n   * Core patch logic applying instrumentation to the Google GenAI client constructor.\n   */\n  private _patch(exports: PatchedModuleExports): PatchedModuleExports | void {\n    const Original = exports.GoogleGenAI;\n    const config = this.getConfig();\n\n    if (typeof Original !== 'function') {\n      return exports;\n    }\n\n    const WrappedGoogleGenAI = function (this: unknown, ...args: unknown[]): GoogleGenAIClient {\n      // Check if wrapping should be skipped (e.g., when LangChain is handling instrumentation)\n      if (_INTERNAL_shouldSkipAiProviderWrapping(GOOGLE_GENAI_INTEGRATION_NAME)) {\n        return Reflect.construct(Original, args) as GoogleGenAIClient;\n      }\n\n      const instance = Reflect.construct(Original, args);\n\n      return instrumentGoogleGenAIClient(instance, config);\n    };\n\n    // Preserve static and prototype chains\n    Object.setPrototypeOf(WrappedGoogleGenAI, Original);\n    Object.setPrototypeOf(WrappedGoogleGenAI.prototype, Original.prototype);\n\n    for (const key of Object.getOwnPropertyNames(Original)) {\n      if (!['length', 'name', 'prototype'].includes(key)) {\n        const descriptor = Object.getOwnPropertyDescriptor(Original, key);\n        if (descriptor) {\n          Object.defineProperty(WrappedGoogleGenAI, key, descriptor);\n        }\n      }\n    }\n\n    // Replace google genai exports with the wrapped constructor\n    replaceExports(exports, 'GoogleGenAI', WrappedGoogleGenAI);\n\n    return exports;\n  }\n}\n", "import type { GoogleGenAIOptions, IntegrationFn } from '@sentry/core';\nimport { defineIntegration, GOOGLE_GENAI_INTEGRATION_NAME } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { SentryGoogleGenAiInstrumentation } from './instrumentation';\n\nexport const instrumentGoogleGenAI = generateInstrumentOnce<GoogleGenAIOptions>(\n  GOOGLE_GENAI_INTEGRATION_NAME,\n  options => new SentryGoogleGenAiInstrumentation(options),\n);\n\nconst _googleGenAIIntegration = ((options: GoogleGenAIOptions = {}) => {\n  return {\n    name: GOOGLE_GENAI_INTEGRATION_NAME,\n    setupOnce() {\n      instrumentGoogleGenAI(options);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the Google Generative AI SDK.\n *\n * This integration is enabled by default.\n *\n * When configured, this integration automatically instruments Google GenAI SDK client instances\n * to capture telemetry data following OpenTelemetry Semantic Conventions for Generative AI.\n *\n * @example\n * ```javascript\n * import * as Sentry from '@sentry/node';\n *\n * Sentry.init({\n *   integrations: [Sentry.googleGenAiIntegration()],\n * });\n * ```\n *\n * ## Options\n *\n * - `recordInputs`: Whether to record prompt messages (default: follows `dataCollection.genAI.inputs`)\n * - `recordOutputs`: Whether to record response text (default: follows `dataCollection.genAI.outputs`)\n *\n * ### Default Behavior\n *\n * By default, the integration will:\n * - Record inputs and outputs based on `dataCollection.genAI` in your Sentry client options\n *   (or the deprecated `sendDefaultPii` option, for backwards compatibility)\n * - Integration-level `recordInputs`/`recordOutputs` options take precedence over global config\n *\n * @example\n * ```javascript\n * // Always record inputs and outputs regardless of global dataCollection config\n * Sentry.init({\n *   integrations: [\n *     Sentry.googleGenAiIntegration({\n *       recordInputs: true,\n *       recordOutputs: true\n *     })\n *   ],\n * });\n *\n * // Never record inputs/outputs regardless of global dataCollection config\n * Sentry.init({\n *   dataCollection: { genAI: { inputs: true, outputs: true } },\n *   integrations: [\n *     Sentry.googleGenAiIntegration({\n *       recordInputs: false,\n *       recordOutputs: false\n *     })\n *   ],\n * });\n * ```\n *\n */\nexport const googleGenAIIntegration = defineIntegration(_googleGenAIIntegration);\n", "import {\n  InstrumentationBase,\n  type InstrumentationConfig,\n  type InstrumentationModuleDefinition,\n  InstrumentationNodeModuleDefinition,\n} from '@opentelemetry/instrumentation';\nimport { InstrumentationNodeModuleFile } from '../InstrumentationNodeModuleFile';\nimport type { LangChainOptions } from '@sentry/core';\nimport {\n  _INTERNAL_mergeLangChainCallbackHandler,\n  _INTERNAL_skipAiProviderWrapping,\n  ANTHROPIC_AI_INTEGRATION_NAME,\n  createLangChainCallbackHandler,\n  GOOGLE_GENAI_INTEGRATION_NAME,\n  instrumentLangChainEmbeddings,\n  OPENAI_INTEGRATION_NAME,\n  SDK_VERSION,\n} from '@sentry/core';\n\nconst supportedVersions = ['>=0.1.0 <2.0.0'];\n\ntype LangChainInstrumentationOptions = InstrumentationConfig & LangChainOptions;\n\n/**\n * Represents the patched shape of LangChain provider package exports\n */\ninterface PatchedLangChainExports {\n  [key: string]: unknown;\n}\n\n/**\n * Wraps Runnable methods (invoke, stream, batch) to inject Sentry callbacks at request time\n * Uses a Proxy to intercept method calls and augment the options.callbacks\n */\nfunction wrapRunnableMethod(\n  originalMethod: (...args: unknown[]) => unknown,\n  sentryHandler: unknown,\n  _methodName: string,\n): (...args: unknown[]) => unknown {\n  return new Proxy(originalMethod, {\n    apply(target, thisArg, args: unknown[]): unknown {\n      // LangChain Runnable method signatures:\n      // invoke(input, options?) - options contains callbacks\n      // stream(input, options?) - options contains callbacks\n      // batch(inputs, options?) - options contains callbacks\n\n      // Options is typically the second argument\n      const optionsIndex = 1;\n      let options = args[optionsIndex] as Record<string, unknown> | undefined;\n\n      // If options don't exist or aren't an object, create them\n      if (!options || typeof options !== 'object' || Array.isArray(options)) {\n        options = {};\n        args[optionsIndex] = options;\n      }\n\n      // Inject our callback handler into options.callbacks (request time callbacks)\n      options.callbacks = _INTERNAL_mergeLangChainCallbackHandler(options.callbacks, sentryHandler);\n\n      // Call original method with augmented options\n      return Reflect.apply(target, thisArg, args);\n    },\n  }) as (...args: unknown[]) => unknown;\n}\n\n/**\n * Sentry LangChain instrumentation using OpenTelemetry.\n */\nexport class SentryLangChainInstrumentation extends InstrumentationBase<LangChainInstrumentationOptions> {\n  public constructor(config: LangChainInstrumentationOptions = {}) {\n    super('@sentry/instrumentation-langchain', SDK_VERSION, config);\n  }\n\n  /**\n   * Initializes the instrumentation by defining the modules to be patched.\n   * We patch the BaseChatModel class methods to inject callbacks\n   *\n   * We hook into provider packages (@langchain/anthropic, @langchain/openai, etc.)\n   * because @langchain/core is often bundled and not loaded as a separate module\n   */\n  public init(): InstrumentationModuleDefinition | InstrumentationModuleDefinition[] {\n    const modules: InstrumentationModuleDefinition[] = [];\n\n    // Hook into common LangChain provider packages\n    const providerPackages = [\n      '@langchain/anthropic',\n      '@langchain/openai',\n      '@langchain/google-genai',\n      '@langchain/mistralai',\n      '@langchain/google-vertexai',\n      '@langchain/groq',\n    ];\n\n    for (const packageName of providerPackages) {\n      // In CJS, LangChain packages re-export from dist/index.cjs files.\n      // Patching only the root module sometimes misses the real implementation or\n      // gets overwritten when that file is loaded. We add a file-level patch so that\n      // _patch runs again on the concrete implementation\n      modules.push(\n        new InstrumentationNodeModuleDefinition(\n          packageName,\n          supportedVersions,\n          this._patch.bind(this),\n          exports => exports,\n          [\n            new InstrumentationNodeModuleFile(\n              `${packageName}/dist/index.cjs`,\n              supportedVersions,\n              this._patch.bind(this),\n              exports => exports,\n            ),\n          ],\n        ),\n      );\n    }\n\n    // Hook into main 'langchain' package to catch initChatModel (v1+)\n    modules.push(\n      new InstrumentationNodeModuleDefinition(\n        'langchain',\n        supportedVersions,\n        this._patch.bind(this),\n        exports => exports,\n        [\n          // To catch the CJS build that contains ConfigurableModel / initChatModel for v1\n          new InstrumentationNodeModuleFile(\n            'langchain/dist/chat_models/universal.cjs',\n            supportedVersions,\n            this._patch.bind(this),\n            exports => exports,\n          ),\n        ],\n      ),\n    );\n\n    return modules;\n  }\n\n  /**\n   * Core patch logic - patches chat model and embedding methods\n   * This is called when a LangChain provider package is loaded\n   */\n  private _patch(exports: PatchedLangChainExports): PatchedLangChainExports | void {\n    // Skip AI provider wrapping now that LangChain is actually being used\n    // This prevents duplicate spans from Anthropic/OpenAI/GoogleGenAI standalone integrations\n    _INTERNAL_skipAiProviderWrapping([\n      OPENAI_INTEGRATION_NAME,\n      ANTHROPIC_AI_INTEGRATION_NAME,\n      GOOGLE_GENAI_INTEGRATION_NAME,\n    ]);\n\n    const config = this.getConfig();\n\n    // Create a shared handler instance for chat model callbacks\n    const sentryHandler = createLangChainCallbackHandler(config);\n\n    // Patch Runnable methods to inject callbacks at request time\n    // This directly manipulates options.callbacks that LangChain uses\n    this._patchRunnableMethods(exports, sentryHandler);\n\n    // Patch embedding methods to create spans directly\n    // Embeddings don't use the callback system, so we wrap the methods themselves\n    this._patchEmbeddingsMethods(exports, config);\n\n    return exports;\n  }\n\n  /**\n   * Patches chat model methods (invoke, stream, batch) to inject Sentry callbacks\n   * Finds a chat model class from the provider package exports and patches its prototype methods\n   */\n  private _patchRunnableMethods(exports: PatchedLangChainExports, sentryHandler: unknown): void {\n    // Known chat model class names for each provider\n    const knownChatModelNames = [\n      'ChatAnthropic',\n      'ChatOpenAI',\n      'ChatGoogleGenerativeAI',\n      'ChatMistralAI',\n      'ChatVertexAI',\n      'ChatGroq',\n      'ConfigurableModel',\n    ];\n\n    const exportsToPatch = (exports.universal_exports ?? exports) as Record<string, unknown>;\n\n    const chatModelClass = Object.values(exportsToPatch).find(exp => {\n      return typeof exp === 'function' && knownChatModelNames.includes(exp.name);\n    }) as { prototype: unknown; name: string } | undefined;\n\n    if (!chatModelClass) {\n      return;\n    }\n\n    // Patch directly on chatModelClass.prototype\n    const targetProto = chatModelClass.prototype as Record<string, unknown>;\n\n    // Skip if already patched (both file-level and module-level hooks resolve to the same prototype)\n    if (targetProto.__sentry_patched__) {\n      return;\n    }\n    targetProto.__sentry_patched__ = true;\n\n    // Patch the methods (invoke, stream, batch)\n    // All chat model instances will inherit these patched methods\n    const methodsToPatch = ['invoke', 'stream', 'batch'] as const;\n\n    for (const methodName of methodsToPatch) {\n      const method = targetProto[methodName];\n      if (typeof method === 'function') {\n        targetProto[methodName] = wrapRunnableMethod(\n          method as (...args: unknown[]) => unknown,\n          sentryHandler,\n          methodName,\n        );\n      }\n    }\n  }\n\n  /**\n   * Patches embedding class methods (embedQuery, embedDocuments) to create Sentry spans.\n   *\n   * Unlike chat models which use LangChain's callback system, the Embeddings base class\n   * has no callback support. We wrap the methods directly on the prototype.\n   *\n   * Instruments any exported class whose prototype has both embedQuery and embedDocuments as functions.\n   */\n  private _patchEmbeddingsMethods(exports: PatchedLangChainExports, options: LangChainOptions): void {\n    const exportsToPatch = (exports.universal_exports ?? exports) as Record<string, unknown>;\n\n    for (const exp of Object.values(exportsToPatch)) {\n      if (typeof exp !== 'function' || !exp.prototype) {\n        continue;\n      }\n      const proto = exp.prototype as Record<string, unknown>;\n      if (typeof proto.embedQuery !== 'function' || typeof proto.embedDocuments !== 'function') {\n        continue;\n      }\n      if (proto.__sentry_patched__) {\n        continue;\n      }\n      proto.__sentry_patched__ = true;\n\n      instrumentLangChainEmbeddings(proto, options);\n    }\n  }\n}\n", "import type { IntegrationFn, LangChainOptions } from '@sentry/core';\nimport { defineIntegration, LANGCHAIN_INTEGRATION_NAME } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { SentryLangChainInstrumentation } from './instrumentation';\n\nexport const instrumentLangChain = generateInstrumentOnce<LangChainOptions>(\n  LANGCHAIN_INTEGRATION_NAME,\n  options => new SentryLangChainInstrumentation(options),\n);\n\nconst _langChainIntegration = ((options: LangChainOptions = {}) => {\n  return {\n    name: LANGCHAIN_INTEGRATION_NAME,\n    setupOnce() {\n      instrumentLangChain(options);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for LangChain.\n *\n * This integration is enabled by default.\n *\n * When configured, this integration automatically instruments LangChain runnable instances\n * to capture telemetry data by injecting Sentry callback handlers into all LangChain calls.\n *\n * **Important:** This integration automatically skips wrapping the OpenAI, Anthropic, and Google GenAI\n * providers to prevent duplicate spans when using LangChain with these AI providers.\n * LangChain handles the instrumentation for all underlying AI providers.\n *\n * @example\n * ```javascript\n * import * as Sentry from '@sentry/node';\n * import { ChatOpenAI } from '@langchain/openai';\n *\n * Sentry.init({\n *   integrations: [Sentry.langChainIntegration()],\n *   dataCollection: { genAI: { inputs: true, outputs: true } }, // Enable to record inputs/outputs\n * });\n *\n * // LangChain calls are automatically instrumented\n * const model = new ChatOpenAI();\n * await model.invoke(\"What is the capital of France?\");\n * ```\n *\n * ## Manual Callback Handler\n *\n * You can also manually add the Sentry callback handler alongside other callbacks:\n *\n * @example\n * ```javascript\n * import * as Sentry from '@sentry/node';\n * import { ChatOpenAI } from '@langchain/openai';\n *\n * const sentryHandler = Sentry.createLangChainCallbackHandler({\n *   recordInputs: true,\n *   recordOutputs: true\n * });\n *\n * const model = new ChatOpenAI();\n * await model.invoke(\n *   \"What is the capital of France?\",\n *   { callbacks: [sentryHandler, myOtherCallback] }\n * );\n * ```\n *\n * ## Options\n *\n * - `recordInputs`: Whether to record input messages/prompts (default: follows `dataCollection.genAI.inputs`, or the deprecated `sendDefaultPii` option)\n * - `recordOutputs`: Whether to record response text (default: follows `dataCollection.genAI.outputs`, or the deprecated `sendDefaultPii` option)\n *\n * ### Default Behavior\n *\n * By default, the integration will:\n * - Record inputs and outputs based on `dataCollection.genAI` in your Sentry client options\n *   (or the deprecated `sendDefaultPii` option, for backwards compatibility)\n * - Integration-level `recordInputs`/`recordOutputs` options take precedence over global config\n *\n * @example\n * ```javascript\n * // Always record inputs and outputs regardless of global dataCollection config\n * Sentry.init({\n *   integrations: [\n *     Sentry.langChainIntegration({\n *       recordInputs: true,\n *       recordOutputs: true\n *     })\n *   ],\n * });\n *\n * // Never record inputs/outputs regardless of global dataCollection config\n * Sentry.init({\n *   dataCollection: { genAI: { inputs: true, outputs: true } },\n *   integrations: [\n *     Sentry.langChainIntegration({\n *       recordInputs: false,\n *       recordOutputs: false\n *     })\n *   ],\n * });\n * ```\n *\n * ## Supported Events\n *\n * The integration captures the following LangChain lifecycle events:\n * - LLM/Chat Model: start, end, error (via callbacks)\n * - Chain: start, end, error (via callbacks)\n * - Tool: start, end, error (via callbacks)\n * - Embeddings: embedQuery, embedDocuments (via direct method wrapping)\n *\n */\nexport const langChainIntegration = defineIntegration(_langChainIntegration);\n", "import {\n  InstrumentationBase,\n  type InstrumentationConfig,\n  type InstrumentationModuleDefinition,\n  InstrumentationNodeModuleDefinition,\n} from '@opentelemetry/instrumentation';\nimport { InstrumentationNodeModuleFile } from '../InstrumentationNodeModuleFile';\nimport type { CompiledGraph, LangGraphOptions } from '@sentry/core';\nimport { getClient, instrumentCreateReactAgent, instrumentStateGraph, SDK_VERSION } from '@sentry/core';\n\nconst supportedVersions = ['>=0.0.0 <2.0.0'];\n\ntype LangGraphInstrumentationOptions = InstrumentationConfig & LangGraphOptions;\n\n/**\n * Represents the patched shape of the LangGraph module export.\n */\ninterface PatchedModuleExports {\n  [key: string]: unknown;\n  StateGraph?: abstract new (...args: unknown[]) => unknown;\n  createReactAgent?: (...args: unknown[]) => CompiledGraph;\n}\n\n/**\n * Sentry LangGraph instrumentation using OpenTelemetry.\n */\nexport class SentryLangGraphInstrumentation extends InstrumentationBase<LangGraphInstrumentationOptions> {\n  public constructor(config: LangGraphInstrumentationOptions = {}) {\n    super('@sentry/instrumentation-langgraph', SDK_VERSION, config);\n  }\n\n  /**\n   * Initializes the instrumentation by defining the modules to be patched.\n   */\n  public init(): InstrumentationModuleDefinition[] {\n    return [\n      new InstrumentationNodeModuleDefinition(\n        '@langchain/langgraph',\n        supportedVersions,\n        this._patch.bind(this),\n        exports => exports,\n        [\n          new InstrumentationNodeModuleFile(\n            /**\n             * In CJS, LangGraph packages re-export from dist/index.cjs files.\n             * Patching only the root module sometimes misses the real implementation or\n             * gets overwritten when that file is loaded. We add a file-level patch so that\n             * _patch runs again on the concrete implementation\n             */\n            '@langchain/langgraph/dist/index.cjs',\n            supportedVersions,\n            this._patch.bind(this),\n            exports => exports,\n          ),\n          new InstrumentationNodeModuleFile(\n            /**\n             * In CJS, the prebuilt submodule re-exports from dist/prebuilt/index.cjs.\n             * We add a file-level patch under the main module so that CJS require()\n             * of @langchain/langgraph/prebuilt gets patched.\n             */\n            '@langchain/langgraph/dist/prebuilt/index.cjs',\n            supportedVersions,\n            this._patch.bind(this),\n            exports => exports,\n          ),\n        ],\n      ),\n      new InstrumentationNodeModuleDefinition(\n        '@langchain/langgraph/prebuilt',\n        supportedVersions,\n        this._patch.bind(this),\n        exports => exports,\n        [\n          new InstrumentationNodeModuleFile(\n            /**\n             * In CJS, the prebuilt submodule re-exports from dist/prebuilt/index.cjs.\n             * We add file-level patches so _patch runs on the concrete implementation.\n             */\n            '@langchain/langgraph/dist/prebuilt/index.cjs',\n            supportedVersions,\n            this._patch.bind(this),\n            exports => exports,\n          ),\n        ],\n      ),\n    ];\n  }\n\n  /**\n   * Core patch logic applying instrumentation to the LangGraph module.\n   */\n  private _patch(exports: PatchedModuleExports): PatchedModuleExports | void {\n    const client = getClient();\n    const genAI = client?.getDataCollectionOptions().genAI;\n    const options = {\n      ...this.getConfig(),\n      recordInputs: this.getConfig().recordInputs ?? genAI?.inputs ?? false,\n      recordOutputs: this.getConfig().recordOutputs ?? genAI?.outputs ?? false,\n    };\n\n    // Patch StateGraph.compile to instrument both compile() and invoke()\n    if (exports.StateGraph && typeof exports.StateGraph === 'function') {\n      instrumentStateGraph(exports.StateGraph.prototype as { compile: (...args: unknown[]) => unknown }, options);\n    }\n\n    // Patch createReactAgent to instrument agent creation and invocation\n    if (exports.createReactAgent && typeof exports.createReactAgent === 'function') {\n      const originalCreateReactAgent = exports.createReactAgent;\n      Object.defineProperty(exports, 'createReactAgent', {\n        value: instrumentCreateReactAgent(originalCreateReactAgent as (...args: unknown[]) => CompiledGraph, options),\n        writable: true,\n        enumerable: true,\n        configurable: true,\n      });\n    }\n\n    return exports;\n  }\n}\n", "import type { IntegrationFn, LangGraphOptions } from '@sentry/core';\nimport { defineIntegration, LANGGRAPH_INTEGRATION_NAME } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { SentryLangGraphInstrumentation } from './instrumentation';\n\nexport const instrumentLangGraph = generateInstrumentOnce<LangGraphOptions>(\n  LANGGRAPH_INTEGRATION_NAME,\n  options => new SentryLangGraphInstrumentation(options),\n);\n\nconst _langGraphIntegration = ((options: LangGraphOptions = {}) => {\n  return {\n    name: LANGGRAPH_INTEGRATION_NAME,\n    setupOnce() {\n      instrumentLangGraph(options);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for LangGraph.\n *\n * This integration is enabled by default.\n *\n * When configured, this integration automatically instruments LangGraph StateGraph and compiled graph instances\n * to capture telemetry data following OpenTelemetry Semantic Conventions for Generative AI.\n *\n * @example\n * ```javascript\n * import * as Sentry from '@sentry/node';\n *\n * Sentry.init({\n *   integrations: [Sentry.langGraphIntegration()],\n * });\n * ```\n *\n * ## Options\n *\n * - `recordInputs`: Whether to record prompt messages (default: follows `dataCollection.genAI.inputs`, or the deprecated `sendDefaultPii` option)\n * - `recordOutputs`: Whether to record response text (default: follows `dataCollection.genAI.outputs`, or the deprecated `sendDefaultPii` option)\n *\n * ### Default Behavior\n *\n * By default, the integration will:\n * - Record inputs and outputs based on `dataCollection.genAI` in your Sentry client options\n *   (or the deprecated `sendDefaultPii` option, for backwards compatibility)\n * - Integration-level `recordInputs`/`recordOutputs` options take precedence over global config\n *\n * @example\n * ```javascript\n * // Always record inputs and outputs regardless of global dataCollection config\n * Sentry.init({\n *   integrations: [\n *     Sentry.langGraphIntegration({\n *       recordInputs: true,\n *       recordOutputs: true\n *     })\n *   ],\n * });\n *\n * // Never record inputs/outputs regardless of global dataCollection config\n * Sentry.init({\n *   dataCollection: { genAI: { inputs: true, outputs: true } },\n *   integrations: [\n *     Sentry.langGraphIntegration({\n *       recordInputs: false,\n *       recordOutputs: false\n *     })\n *   ],\n * });\n * ```\n *\n * ## Captured Operations\n *\n * The integration captures the following LangGraph operations:\n * - **Agent Creation** (`StateGraph.compile()`) - Creates a `gen_ai.create_agent` span\n * - **Agent Invocation** (`CompiledGraph.invoke()`) - Creates a `gen_ai.invoke_agent` span\n *\n * ## Captured Data\n *\n * When `recordInputs` and `recordOutputs` are enabled, the integration captures:\n * - Input messages from the graph state\n * - Output messages and LLM responses\n * - Tool calls made during agent execution\n * - Agent and graph names\n * - Available tools configured in the graph\n *\n */\nexport const langGraphIntegration = defineIntegration(_langGraphIntegration);\n", "import * as net from 'node:net';\nimport { InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport { InstrumentationNodeModuleFile } from '../../../InstrumentationNodeModuleFile';\nimport {\n  DB_COLLECTION_NAME,\n  DB_NAMESPACE,\n  DB_OPERATION_NAME,\n  DB_SYSTEM_NAME,\n  SERVER_ADDRESS,\n  SERVER_PORT,\n} from '@sentry/conventions/attributes';\nimport type { SpanAttributes } from '@sentry/core';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SPAN_KIND, startSpan } from '@sentry/core';\nimport type { FirebaseInstrumentation } from '../firebaseInstrumentation';\nimport type {\n  AddDocType,\n  CollectionReference,\n  DeleteDocType,\n  DocumentData,\n  DocumentReference,\n  FirebaseApp,\n  FirebaseOptions,\n  FirestoreSettings,\n  GetDocsType,\n  PartialWithFieldValue,\n  QuerySnapshot,\n  SetDocType,\n  SetOptions,\n  WithFieldValue,\n} from '../types';\n\n// Inline minimal types used from `shimmer` to avoid importing shimmer's types directly.\n// We only need the shape for `wrap` and `unwrap` used in this file.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ShimmerWrap = (target: any, name: string, wrapper: (...args: any[]) => any) => void;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ShimmerUnwrap = (target: any, name: string) => void;\n\n/**\n *\n * @param firestoreSupportedVersions - supported version of firebase/firestore\n * @param wrap - reference to native instrumentation wrap function\n * @param unwrap - reference to native instrumentation wrap function\n */\nexport function patchFirestore(\n  firestoreSupportedVersions: string[],\n  wrap: ShimmerWrap,\n  unwrap: ShimmerUnwrap,\n): InstrumentationNodeModuleDefinition {\n  const moduleFirestoreCJS = new InstrumentationNodeModuleDefinition(\n    '@firebase/firestore',\n    firestoreSupportedVersions,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    (moduleExports: any) => wrapMethods(moduleExports, wrap, unwrap),\n  );\n  const files: string[] = [\n    '@firebase/firestore/dist/lite/index.node.cjs.js',\n    '@firebase/firestore/dist/lite/index.node.mjs.js',\n    '@firebase/firestore/dist/lite/index.rn.esm2017.js',\n    '@firebase/firestore/dist/lite/index.cjs.js',\n  ];\n\n  for (const file of files) {\n    moduleFirestoreCJS.files.push(\n      new InstrumentationNodeModuleFile(\n        file,\n        firestoreSupportedVersions,\n        moduleExports => wrapMethods(moduleExports, wrap, unwrap),\n        moduleExports => unwrapMethods(moduleExports, unwrap),\n      ),\n    );\n  }\n\n  return moduleFirestoreCJS;\n}\n\nfunction wrapMethods(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  moduleExports: any,\n  wrap: ShimmerWrap,\n  unwrap: ShimmerUnwrap,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n  unwrapMethods(moduleExports, unwrap);\n\n  wrap(moduleExports, 'addDoc', patchAddDoc());\n  wrap(moduleExports, 'getDocs', patchGetDocs());\n  wrap(moduleExports, 'setDoc', patchSetDoc());\n  wrap(moduleExports, 'deleteDoc', patchDeleteDoc());\n\n  return moduleExports;\n}\n\nfunction unwrapMethods(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  moduleExports: any,\n  unwrap: ShimmerUnwrap,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n  for (const method of ['addDoc', 'getDocs', 'setDoc', 'deleteDoc']) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    if (isWrapped(moduleExports[method])) {\n      unwrap(moduleExports, method);\n    }\n  }\n  return moduleExports;\n}\n\nfunction patchAddDoc<AppModelType, DbModelType extends DocumentData>(): (\n  original: AddDocType<AppModelType, DbModelType>,\n) => (\n  this: FirebaseInstrumentation,\n  reference: CollectionReference<AppModelType, DbModelType>,\n  data: WithFieldValue<AppModelType>,\n) => Promise<DocumentReference<AppModelType, DbModelType>> {\n  return function addDoc(original: AddDocType<AppModelType, DbModelType>) {\n    return function (\n      reference: CollectionReference<AppModelType, DbModelType>,\n      data: WithFieldValue<AppModelType>,\n    ): Promise<DocumentReference<AppModelType, DbModelType>> {\n      return startFirestoreSpan('addDoc', reference, () => original(reference, data));\n    };\n  };\n}\n\nfunction patchDeleteDoc<AppModelType, DbModelType extends DocumentData>(): (\n  original: DeleteDocType<AppModelType, DbModelType>,\n) => (this: FirebaseInstrumentation, reference: DocumentReference<AppModelType, DbModelType>) => Promise<void> {\n  return function deleteDoc(original: DeleteDocType<AppModelType, DbModelType>) {\n    return function (reference: DocumentReference<AppModelType, DbModelType>): Promise<void> {\n      return startFirestoreSpan('deleteDoc', reference.parent || reference, () => original(reference));\n    };\n  };\n}\n\nfunction patchGetDocs<AppModelType, DbModelType extends DocumentData>(): (\n  original: GetDocsType<AppModelType, DbModelType>,\n) => (\n  this: FirebaseInstrumentation,\n  reference: CollectionReference<AppModelType, DbModelType>,\n) => Promise<QuerySnapshot<AppModelType, DbModelType>> {\n  return function getDocs(original: GetDocsType<AppModelType, DbModelType>) {\n    return function (\n      reference: CollectionReference<AppModelType, DbModelType>,\n    ): Promise<QuerySnapshot<AppModelType, DbModelType>> {\n      return startFirestoreSpan('getDocs', reference, () => original(reference));\n    };\n  };\n}\n\nfunction patchSetDoc<AppModelType, DbModelType extends DocumentData>(): (\n  original: SetDocType<AppModelType, DbModelType>,\n) => (\n  this: FirebaseInstrumentation,\n  reference: DocumentReference<AppModelType, DbModelType>,\n  data: WithFieldValue<AppModelType> & PartialWithFieldValue<AppModelType>,\n  options?: SetOptions,\n) => Promise<void> {\n  return function setDoc(original: SetDocType<AppModelType, DbModelType>) {\n    return function (\n      reference: DocumentReference<AppModelType, DbModelType>,\n      data: WithFieldValue<AppModelType> & PartialWithFieldValue<AppModelType>,\n      options?: SetOptions,\n    ): Promise<void> {\n      return startFirestoreSpan('setDoc', reference.parent || reference, () => {\n        return typeof options !== 'undefined' ? original(reference, data, options) : original(reference, data);\n      });\n    };\n  };\n}\n\nfunction startFirestoreSpan<AppModelType, DbModelType extends DocumentData, T>(\n  spanName: string,\n  reference: CollectionReference<AppModelType, DbModelType> | DocumentReference<AppModelType, DbModelType>,\n  callback: () => T,\n): T {\n  return startSpan(\n    {\n      name: `${spanName} ${reference.path}`,\n      op: 'db.query',\n      kind: SPAN_KIND.CLIENT,\n      attributes: {\n        [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.firebase.otel.firestore',\n        [DB_OPERATION_NAME]: spanName,\n        ...buildAttributes(reference),\n      },\n    },\n    callback,\n  );\n}\n\n/**\n * Gets the server address and port attributes from the Firestore settings.\n * It's best effort to extract the address and port from the settings, especially for IPv6.\n * @param settings - The Firestore settings containing host information.\n */\nexport function getPortAndAddress(settings: FirestoreSettings): {\n  address?: string;\n  port?: number;\n} {\n  let address: string | undefined;\n  let port: string | undefined;\n\n  if (typeof settings.host === 'string') {\n    if (settings.host.startsWith('[')) {\n      // IPv6 addresses can be enclosed in square brackets, e.g., [2001:db8::1]:8080\n      if (settings.host.endsWith(']')) {\n        // IPv6 with square brackets without port\n        address = settings.host.replace(/^\\[|\\]$/g, '');\n      } else if (settings.host.includes(']:')) {\n        // IPv6 with square brackets with port\n        const lastColonIndex = settings.host.lastIndexOf(':');\n        if (lastColonIndex !== -1) {\n          address = settings.host.slice(1, lastColonIndex).replace(/^\\[|\\]$/g, '');\n          port = settings.host.slice(lastColonIndex + 1);\n        }\n      }\n    } else {\n      // IPv4 or IPv6 without square brackets\n      // If it's an IPv6 address without square brackets, we assume it does not have a port.\n      if (net.isIPv6(settings.host)) {\n        address = settings.host;\n      }\n      // If it's an IPv4 address, we can extract the port if it exists.\n      else {\n        const lastColonIndex = settings.host.lastIndexOf(':');\n        if (lastColonIndex !== -1) {\n          address = settings.host.slice(0, lastColonIndex);\n          port = settings.host.slice(lastColonIndex + 1);\n        } else {\n          address = settings.host;\n        }\n      }\n    }\n  }\n  return {\n    address: address,\n    port: port ? parseInt(port, 10) : undefined,\n  };\n}\n\nfunction buildAttributes<AppModelType, DbModelType extends DocumentData>(\n  reference: CollectionReference<AppModelType, DbModelType> | DocumentReference<AppModelType, DbModelType>,\n): SpanAttributes {\n  const firestoreApp: FirebaseApp = reference.firestore.app;\n  const firestoreOptions: FirebaseOptions = firestoreApp.options;\n  const json: { settings?: FirestoreSettings } = reference.firestore.toJSON() || {};\n  const settings: FirestoreSettings = json.settings || {};\n\n  const attributes: SpanAttributes = {\n    [DB_COLLECTION_NAME]: reference.path,\n    [DB_NAMESPACE]: firestoreApp.name,\n    [DB_SYSTEM_NAME]: 'firebase.firestore',\n    'firebase.firestore.type': reference.type,\n    'firebase.firestore.options.projectId': firestoreOptions.projectId,\n    'firebase.firestore.options.appId': firestoreOptions.appId,\n    'firebase.firestore.options.messagingSenderId': firestoreOptions.messagingSenderId,\n    'firebase.firestore.options.storageBucket': firestoreOptions.storageBucket,\n  };\n\n  const { address, port } = getPortAndAddress(settings);\n\n  if (address) {\n    attributes[SERVER_ADDRESS] = address;\n  }\n  if (port) {\n    attributes[SERVER_PORT] = port;\n  }\n\n  return attributes;\n}\n", "import type { InstrumentationBase } from '@opentelemetry/instrumentation';\nimport { InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport { InstrumentationNodeModuleFile } from '../../../InstrumentationNodeModuleFile';\nimport type { SpanAttributes } from '@sentry/core';\nimport {\n  captureException,\n  flush,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SPAN_KIND,\n  SPAN_STATUS_ERROR,\n  startSpanManual,\n} from '@sentry/core';\nimport type { FirebaseInstrumentation } from '../firebaseInstrumentation';\nimport type { AvailableFirebaseFunctions, FirebaseFunctions, OverloadedParameters } from '../types';\n\n/**\n * Patches Firebase Functions v2 to add OpenTelemetry instrumentation\n * @param functionsSupportedVersions - supported versions of firebase-functions\n * @param wrap - reference to native instrumentation wrap function\n * @param unwrap - reference to native instrumentation unwrap function\n */\nexport function patchFunctions(\n  functionsSupportedVersions: string[],\n  wrap: InstrumentationBase['_wrap'],\n  unwrap: InstrumentationBase['_unwrap'],\n): InstrumentationNodeModuleDefinition {\n  const moduleFunctionsCJS = new InstrumentationNodeModuleDefinition('firebase-functions', functionsSupportedVersions);\n  const modulesToInstrument = [\n    { name: 'firebase-functions/lib/v2/providers/https.js', triggerType: 'function' },\n    { name: 'firebase-functions/lib/v2/providers/firestore.js', triggerType: 'firestore' },\n    { name: 'firebase-functions/lib/v2/providers/scheduler.js', triggerType: 'scheduler' },\n    { name: 'firebase-functions/lib/v2/storage.js', triggerType: 'storage' },\n  ] as const;\n\n  modulesToInstrument.forEach(({ name, triggerType }) => {\n    moduleFunctionsCJS.files.push(\n      new InstrumentationNodeModuleFile(\n        name,\n        functionsSupportedVersions,\n        moduleExports => wrapCommonFunctions(moduleExports, wrap, unwrap, triggerType),\n        moduleExports => unwrapCommonFunctions(moduleExports, unwrap),\n      ),\n    );\n  });\n\n  return moduleFunctionsCJS;\n}\n\n/**\n * Patches Cloud Functions for Firebase (v2) to add OpenTelemetry instrumentation\n *\n * @param triggerType - Type of trigger\n * @returns A function that patches the function\n */\nexport function patchV2Functions<T extends FirebaseFunctions = FirebaseFunctions>(\n  triggerType: string,\n): (original: T) => (...args: OverloadedParameters<T>) => ReturnType<T> {\n  return function v2FunctionsWrapper(original: T): (...args: OverloadedParameters<T>) => ReturnType<T> {\n    return function (this: FirebaseInstrumentation, ...args: OverloadedParameters<T>): ReturnType<T> {\n      const handler = typeof args[0] === 'function' ? args[0] : args[1];\n      const documentOrOptions = typeof args[0] === 'function' ? undefined : args[0];\n\n      if (!handler) {\n        return original.call(this, ...args);\n      }\n\n      const wrappedHandler = async function (this: unknown, ...handlerArgs: unknown[]): Promise<unknown> {\n        const functionName = process.env.FUNCTION_TARGET || process.env.K_SERVICE || 'unknown';\n\n        const attributes: SpanAttributes = {\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.firebase.otel.functions',\n          'faas.name': functionName,\n          'faas.trigger': triggerType,\n          'faas.provider': 'firebase',\n        };\n\n        if (process.env.GCLOUD_PROJECT) {\n          attributes['cloud.project_id'] = process.env.GCLOUD_PROJECT;\n        }\n\n        if (process.env.EVENTARC_CLOUD_EVENT_SOURCE) {\n          attributes['cloud.event_source'] = process.env.EVENTARC_CLOUD_EVENT_SOURCE;\n        }\n\n        // `startSpanManual` to keep the span active but while still allowing us to end it before flushing on error.\n        return startSpanManual(\n          {\n            name: `firebase.function.${triggerType}`,\n            op: 'http.request',\n            kind: SPAN_KIND.SERVER,\n            attributes,\n          },\n          async span => {\n            try {\n              const result = await handler.apply(this, handlerArgs);\n              span.end();\n              return result;\n            } catch (error) {\n              span.setStatus({ code: SPAN_STATUS_ERROR });\n              captureException(error, {\n                mechanism: {\n                  type: 'auto.firebase.otel.functions',\n                  handled: false,\n                },\n              });\n              span.end();\n              await flush(2000);\n              throw error;\n            }\n          },\n        );\n      };\n\n      if (documentOrOptions) {\n        return original.call(this, documentOrOptions, wrappedHandler);\n      } else {\n        return original.call(this, wrappedHandler);\n      }\n    };\n  };\n}\n\nfunction wrapCommonFunctions(\n  moduleExports: AvailableFirebaseFunctions,\n  wrap: InstrumentationBase['_wrap'],\n  unwrap: InstrumentationBase['_unwrap'],\n  triggerType: 'function' | 'firestore' | 'scheduler' | 'storage',\n): AvailableFirebaseFunctions {\n  unwrapCommonFunctions(moduleExports, unwrap);\n\n  switch (triggerType) {\n    case 'function':\n      wrap(moduleExports, 'onRequest', patchV2Functions('http.request'));\n      wrap(moduleExports, 'onCall', patchV2Functions('http.call'));\n      break;\n\n    case 'firestore':\n      wrap(moduleExports, 'onDocumentCreated', patchV2Functions('firestore.document.created'));\n      wrap(moduleExports, 'onDocumentUpdated', patchV2Functions('firestore.document.updated'));\n      wrap(moduleExports, 'onDocumentDeleted', patchV2Functions('firestore.document.deleted'));\n      wrap(moduleExports, 'onDocumentWritten', patchV2Functions('firestore.document.written'));\n      wrap(moduleExports, 'onDocumentCreatedWithAuthContext', patchV2Functions('firestore.document.created'));\n      wrap(moduleExports, 'onDocumentUpdatedWithAuthContext', patchV2Functions('firestore.document.updated'));\n      wrap(moduleExports, 'onDocumentDeletedWithAuthContext', patchV2Functions('firestore.document.deleted'));\n      wrap(moduleExports, 'onDocumentWrittenWithAuthContext', patchV2Functions('firestore.document.written'));\n      break;\n\n    case 'scheduler':\n      wrap(moduleExports, 'onSchedule', patchV2Functions('scheduler.scheduled'));\n      break;\n\n    case 'storage':\n      wrap(moduleExports, 'onObjectFinalized', patchV2Functions('storage.object.finalized'));\n      wrap(moduleExports, 'onObjectArchived', patchV2Functions('storage.object.archived'));\n      wrap(moduleExports, 'onObjectDeleted', patchV2Functions('storage.object.deleted'));\n      wrap(moduleExports, 'onObjectMetadataUpdated', patchV2Functions('storage.object.metadataUpdated'));\n      break;\n  }\n\n  return moduleExports;\n}\n\nfunction unwrapCommonFunctions(\n  moduleExports: AvailableFirebaseFunctions,\n  unwrap: InstrumentationBase['_unwrap'],\n): AvailableFirebaseFunctions {\n  const methods: (keyof AvailableFirebaseFunctions)[] = [\n    'onSchedule',\n    'onRequest',\n    'onCall',\n    'onObjectFinalized',\n    'onObjectArchived',\n    'onObjectDeleted',\n    'onObjectMetadataUpdated',\n    'onDocumentCreated',\n    'onDocumentUpdated',\n    'onDocumentDeleted',\n    'onDocumentWritten',\n    'onDocumentCreatedWithAuthContext',\n    'onDocumentUpdatedWithAuthContext',\n    'onDocumentDeletedWithAuthContext',\n    'onDocumentWrittenWithAuthContext',\n  ];\n\n  for (const method of methods) {\n    if (isWrapped(moduleExports[method])) {\n      unwrap(moduleExports, method);\n    }\n  }\n  return moduleExports;\n}\n", "import type { InstrumentationConfig, InstrumentationNodeModuleDefinition } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase } from '@opentelemetry/instrumentation';\nimport { SDK_VERSION } from '@sentry/core';\nimport { patchFirestore } from './patches/firestore';\nimport { patchFunctions } from './patches/functions';\n\nconst firestoreSupportedVersions = ['>=3.0.0 <5']; // firebase 9+\nconst functionsSupportedVersions = ['>=6.0.0 <7']; // firebase-functions v2\n\n/**\n * Instrumentation for Firebase services, specifically Firestore.\n */\nexport class FirebaseInstrumentation extends InstrumentationBase<InstrumentationConfig> {\n  public constructor(config: InstrumentationConfig = {}) {\n    super('@sentry/instrumentation-firebase', SDK_VERSION, config);\n  }\n\n  /**\n   *\n   * @protected\n   */\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  protected init(): InstrumentationNodeModuleDefinition | InstrumentationNodeModuleDefinition[] | void {\n    const modules: InstrumentationNodeModuleDefinition[] = [];\n\n    modules.push(patchFirestore(firestoreSupportedVersions, this._wrap, this._unwrap));\n    modules.push(patchFunctions(functionsSupportedVersions, this._wrap, this._unwrap));\n\n    return modules;\n  }\n}\n", "import type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { FirebaseInstrumentation } from './otel';\n\nconst INTEGRATION_NAME = 'Firebase' as const;\n\nexport const instrumentFirebase = generateInstrumentOnce(INTEGRATION_NAME, () => new FirebaseInstrumentation());\n\nconst _firebaseIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      instrumentFirebase();\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const firebaseIntegration = defineIntegration(_firebaseIntegration);\n", "import type { Integration } from '@sentry/core';\nimport { prismaIntegration } from '@sentry/server-utils';\nimport { instrumentSentryHttp } from '../http';\nimport { amqplibIntegration, instrumentAmqplib } from './amqplib';\nimport { anthropicAIIntegration, instrumentAnthropicAi } from './anthropic-ai';\nimport { connectIntegration, instrumentConnect } from './connect';\nimport { expressIntegration, instrumentExpress } from './express';\nimport { fastifyIntegration, instrumentFastifyV3 } from './fastify';\nimport { firebaseIntegration, instrumentFirebase } from './firebase';\nimport { genericPoolIntegration, instrumentGenericPool } from './genericPool';\nimport { googleGenAIIntegration, instrumentGoogleGenAI } from './google-genai';\nimport { graphqlIntegration, instrumentGraphql } from './graphql';\nimport { hapiIntegration, instrumentHapi } from './hapi';\nimport { honoIntegration, instrumentHono } from './hono';\nimport { instrumentKafka, kafkaIntegration } from './kafka';\nimport { instrumentKoa, koaIntegration } from './koa';\nimport { instrumentLangChain, langChainIntegration } from './langchain';\nimport { instrumentLangGraph, langGraphIntegration } from './langgraph';\nimport { instrumentLruMemoizer, lruMemoizerIntegration } from './lrumemoizer';\nimport { instrumentMongo, mongoIntegration } from './mongo';\nimport { instrumentMongoose, mongooseIntegration } from './mongoose';\nimport { instrumentMysql, mysqlIntegration } from './mysql';\nimport { instrumentMysql2, mysql2Integration } from './mysql2';\nimport { instrumentOpenAi, openAIIntegration } from './openai';\nimport { instrumentPostgres, postgresIntegration } from './postgres';\nimport { instrumentPostgresJs, postgresJsIntegration } from './postgresjs';\nimport { instrumentRedis, redisIntegration } from './redis';\nimport { instrumentTedious, tediousIntegration } from './tedious';\nimport { instrumentVercelAi, vercelAIIntegration } from './vercelai';\n\n/**\n * With OTEL, all performance integrations will be added, as OTEL only initializes them when the patched package is actually required.\n */\nexport function getAutoPerformanceIntegrations(): Integration[] {\n  return [\n    expressIntegration(),\n    fastifyIntegration(),\n    graphqlIntegration(),\n    // eslint-disable-next-line typescript/no-deprecated\n    honoIntegration(),\n    mongoIntegration(),\n    mongooseIntegration(),\n    mysqlIntegration(),\n    mysql2Integration(),\n    redisIntegration(),\n    postgresIntegration(),\n    prismaIntegration(),\n    hapiIntegration(),\n    koaIntegration(),\n    connectIntegration(),\n    tediousIntegration(),\n    genericPoolIntegration(),\n    kafkaIntegration(),\n    amqplibIntegration(),\n    lruMemoizerIntegration(),\n    // AI providers\n    // LangChain must come first to disable AI provider integrations before they instrument\n    langChainIntegration(),\n    langGraphIntegration(),\n    vercelAIIntegration(),\n    openAIIntegration(),\n    anthropicAIIntegration(),\n    googleGenAIIntegration(),\n    postgresJsIntegration(),\n    firebaseIntegration(),\n  ];\n}\n\n/**\n * Get a list of methods to instrument OTEL, when preload instrumentation.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getOpenTelemetryInstrumentationToPreload(): (((options?: any) => void) & { id: string })[] {\n  return [\n    instrumentSentryHttp,\n    instrumentExpress,\n    instrumentConnect,\n    instrumentFastifyV3,\n    instrumentHapi,\n    instrumentHono,\n    instrumentKafka,\n    instrumentKoa,\n    instrumentLruMemoizer,\n    instrumentMongo,\n    instrumentMongoose,\n    instrumentMysql,\n    instrumentMysql2,\n    instrumentPostgres,\n    instrumentHapi,\n    instrumentGraphql,\n    instrumentRedis,\n    instrumentTedious,\n    instrumentGenericPool,\n    instrumentAmqplib,\n    instrumentLangChain,\n    instrumentVercelAi,\n    instrumentOpenAi,\n    instrumentPostgresJs,\n    instrumentFirebase,\n    instrumentAnthropicAi,\n    instrumentGoogleGenAI,\n    instrumentLangGraph,\n  ];\n}\n", "import type { TracerProvider } from '@opentelemetry/api';\nimport { context, propagation, trace } from '@opentelemetry/api';\nimport type { SpanProcessor } from '@opentelemetry/sdk-trace-base';\nimport { BasicTracerProvider } from '@opentelemetry/sdk-trace-base';\nimport { debug as coreDebug, hasSpanStreamingEnabled } from '@sentry/core';\nimport {\n  initializeEsmLoader,\n  type NodeClient,\n  SentryContextManager,\n  setupOpenTelemetryLogger,\n} from '@sentry/node-core';\nimport {\n  applyOtelSpanData,\n  type AsyncLocalStorageLookup,\n  backfillStreamedSpanDataFromOtel,\n  getSentryResource,\n  type OpenTelemetryTracerProvider,\n  SentryPropagator,\n  SentrySampler,\n  SentrySpanProcessor,\n  SentryTracerProvider,\n  setIsSetup,\n} from '@sentry/opentelemetry';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { getOpenTelemetryInstrumentationToPreload } from '../integrations/tracing';\n\n// About 277h - this must fit into new Array(len)!\nconst MAX_MAX_SPAN_WAIT_DURATION = 1_000_000;\n\n// The global registry of @opentelemetry/api 1.x, shared across all copies of the package\nconst OTEL_API_GLOBAL_KEY = Symbol.for('opentelemetry.js.api.1');\n\n/**\n * Registers the given tracer provider as the global tracer provider, recreating the OpenTelemetry\n * API registry when it pre-exists with a different `@opentelemetry/api` version.\n *\n * Some host runtimes (e.g. Neon Functions) pre-create the registry with their own API version.\n * `registerGlobal` requires an exact version match, so every registration through the SDK's copy\n * of `@opentelemetry/api` is rejected and tracing is silently disabled\n * (https://github.com/getsentry/sentry-javascript/issues/22338). This case is identified by a\n * failed registration with an empty `trace` slot: `registerGlobal` checks the slot before the\n * version, so an empty slot means the version gate rejected us and recreating the registry\n * clobbers no other tracer provider. If the slot is occupied (another provider registered first,\n * e.g. a second `Sentry.init()` call), the registry is left untouched and registration fails.\n *\n * Slots Sentry does not claim itself (e.g. `diag`, `metrics`) are carried over into the recreated\n * registry: reads resolve via a semver-compatibility check rather than the exact-match write gate,\n * so they keep working for the copy that registered them. `propagation` and `context` are not\n * carried over because Sentry registers its own right after this.\n */\nfunction registerGlobalTracerProvider(provider: TracerProvider): boolean {\n  if (trace.setGlobalTracerProvider(provider)) {\n    return true;\n  }\n\n  // @opentelemetry/api stores the registry under a `Symbol.for` key that no public type\n  // describes, so `typeof globalThis` can only be narrowed to it by casting through `unknown`.\n  const otelGlobal = globalThis as unknown as Record<symbol, Record<string, unknown> | undefined>;\n  const registry = otelGlobal[OTEL_API_GLOBAL_KEY];\n  if (registry && !registry.trace) {\n    DEBUG_BUILD &&\n      coreDebug.warn(\n        'Replaced a pre-existing OpenTelemetry API registry that was created by a different @opentelemetry/api version and would have blocked tracing. If you want to manage OpenTelemetry yourself, set `skipOpenTelemetrySetup: true` in `Sentry.init()`.',\n      );\n    otelGlobal[OTEL_API_GLOBAL_KEY] = undefined;\n\n    if (!trace.setGlobalTracerProvider(provider)) {\n      return false;\n    }\n\n    // The cast is needed because TS still has the slot narrowed to `undefined` from the reset\n    // above and cannot know the registration call just recreated the registry.\n    const recreatedRegistry = otelGlobal[OTEL_API_GLOBAL_KEY] as Record<string, unknown> | undefined;\n    if (recreatedRegistry) {\n      const { propagation: _propagation, context: _context, ...carriedOverSlots } = registry;\n      otelGlobal[OTEL_API_GLOBAL_KEY] = { ...carriedOverSlots, ...recreatedRegistry };\n    }\n\n    return true;\n  }\n\n  return false;\n}\n\ninterface AdditionalOpenTelemetryOptions {\n  /** Additional SpanProcessor instances that should be used. */\n  spanProcessors?: SpanProcessor[];\n}\n\n/**\n * Initialize OpenTelemetry for Node.\n */\nexport function initOpenTelemetry(client: NodeClient, options: AdditionalOpenTelemetryOptions = {}): void {\n  if (client.getOptions().debug) {\n    setupOpenTelemetryLogger();\n  }\n\n  const [provider, asyncLocalStorageLookup] = setupOtel(client, options);\n  client.traceProvider = provider;\n  client.asyncLocalStorageLookup = asyncLocalStorageLookup;\n}\n\ninterface NodePreloadOptions {\n  debug?: boolean;\n  integrations?: string[];\n}\n\n/**\n * Preload OpenTelemetry for Node.\n * This can be used to preload instrumentation early, but set up Sentry later.\n * By preloading the OTEL instrumentation wrapping still happens early enough that everything works.\n */\nexport function preloadOpenTelemetry(options: NodePreloadOptions = {}): void {\n  const { debug } = options;\n\n  if (debug) {\n    coreDebug.enable();\n  }\n\n  initializeEsmLoader();\n\n  // These are all integrations that we need to pre-load to ensure they are set up before any other code runs\n  getPreloadMethods(options.integrations).forEach(fn => {\n    fn();\n\n    if (debug) {\n      coreDebug.log(`[Sentry] Preloaded ${fn.id} instrumentation`);\n    }\n  });\n}\n\nfunction getPreloadMethods(integrationNames?: string[]): ((() => void) & { id: string })[] {\n  const instruments = getOpenTelemetryInstrumentationToPreload();\n\n  if (!integrationNames) {\n    return instruments;\n  }\n\n  // We match exact matches of instrumentation, but also match prefixes, e.g. \"Fastify.v5\" will match \"Fastify\"\n  return instruments.filter(instrumentation => {\n    const id = instrumentation.id;\n    return integrationNames.some(integrationName => id === integrationName || id.startsWith(`${integrationName}.`));\n  });\n}\n\n/** Just exported for tests. */\nexport function setupOtel(\n  client: NodeClient,\n  options: AdditionalOpenTelemetryOptions = {},\n): [OpenTelemetryTracerProvider | undefined, AsyncLocalStorageLookup | undefined] {\n  // Sentry's minimal tracer provider is the default. We fall back to the full OpenTelemetry SDK\n  // `BasicTracerProvider` when the user explicitly opts in via `openTelemetryBasicTracerProvider`, or\n  // when they provide custom `openTelemetrySpanProcessors` — those require the SDK span pipeline\n  // that the minimal provider does not run.\n  const shouldUseBasicTracerProvider =\n    client.getOptions().openTelemetryBasicTracerProvider || !!options.spanProcessors?.length;\n\n  if (!shouldUseBasicTracerProvider) {\n    return setupSentryTracerProvider(client);\n  }\n\n  // Create and configure NodeTracerProvider\n  const provider = new BasicTracerProvider({\n    sampler: new SentrySampler(client),\n    resource: getSentryResource('node'),\n    forceFlushTimeoutMillis: 500,\n    spanProcessors: [\n      new SentrySpanProcessor({\n        timeout: _clampSpanProcessorTimeout(client.getOptions().maxSpanWaitDuration),\n        client,\n      }),\n      ...(options.spanProcessors || []),\n    ],\n  });\n\n  // Register as globals\n  registerGlobalTracerProvider(provider);\n  propagation.setGlobalPropagator(new SentryPropagator());\n\n  const ctxManager = new SentryContextManager();\n  context.setGlobalContextManager(ctxManager);\n\n  return [provider, ctxManager.getAsyncLocalStorageLookup()];\n}\n\nfunction setupSentryTracerProvider(\n  client: NodeClient,\n): [SentryTracerProvider | undefined, AsyncLocalStorageLookup | undefined] {\n  const provider = new SentryTracerProvider({ resource: getSentryResource('node') });\n\n  if (!registerGlobalTracerProvider(provider)) {\n    DEBUG_BUILD &&\n      coreDebug.warn(\n        'Could not register SentryTracerProvider because another OpenTelemetry tracer provider is already registered.',\n      );\n    return [undefined, undefined];\n  }\n\n  // Only mark the provider as set up once it is actually the registered global\n  // tracer provider, so setup validation doesn't skip required checks when\n  // registration failed.\n  setIsSetup('SentryTracerProvider');\n\n  propagation.setGlobalPropagator(new SentryPropagator());\n\n  const ctxManager = new SentryContextManager();\n  context.setGlobalContextManager(ctxManager);\n\n  client.on('spanEnd', span => {\n    applyOtelSpanData(span, { finalizeStatus: true });\n  });\n\n  if (hasSpanStreamingEnabled(client)) {\n    // Streamed spans skip the exporter, so per-span data inferred from OTel semantic conventions\n    // (notably `sentry.source` on child spans, which `applyOtelSpanData` only sets on segment roots)\n    // is backfilled here, reusing the exact inference the OTel SDK `SentrySpanProcessor` applies.\n    client.on('preprocessSpan', backfillStreamedSpanDataFromOtel);\n  }\n\n  client.on('preprocessEvent', event => {\n    if (event.type !== 'transaction') {\n      return;\n    }\n\n    event.contexts = {\n      ...event.contexts,\n      otel: {\n        resource: provider.resource?.attributes,\n        ...event.contexts?.otel,\n      },\n    };\n  });\n\n  return [provider, ctxManager.getAsyncLocalStorageLookup()];\n}\n\n/** Just exported for tests. */\nexport function _clampSpanProcessorTimeout(maxSpanWaitDuration: number | undefined): number | undefined {\n  if (maxSpanWaitDuration == null) {\n    return undefined;\n  }\n\n  // We guard for a max. value here, because we create an array with this length\n  // So if this value is too large, this would fail\n  if (maxSpanWaitDuration > MAX_MAX_SPAN_WAIT_DURATION) {\n    DEBUG_BUILD &&\n      coreDebug.warn(`\\`maxSpanWaitDuration\\` is too high, using the maximum value of ${MAX_MAX_SPAN_WAIT_DURATION}`);\n    return MAX_MAX_SPAN_WAIT_DURATION;\n  } else if (maxSpanWaitDuration <= 0 || Number.isNaN(maxSpanWaitDuration)) {\n    DEBUG_BUILD && coreDebug.warn('`maxSpanWaitDuration` must be a positive number, using default value instead.');\n    return undefined;\n  }\n\n  return maxSpanWaitDuration;\n}\n", "import type { Integration, Options } from '@sentry/core';\nimport { applySdkMetadata, hasSpansEnabled } from '@sentry/core';\nimport type { NodeClient } from '@sentry/node-core';\nimport {\n  getDefaultIntegrations as getNodeCoreDefaultIntegrations,\n  init as initNodeCore,\n  validateOpenTelemetrySetup,\n} from '@sentry/node-core';\nimport { httpIntegration } from '../integrations/http';\nimport { nativeNodeFetchIntegration } from '../integrations/node-fetch';\nimport { getAutoPerformanceIntegrations } from '../integrations/tracing';\nimport type { NodeOptions } from '../types';\nimport {\n  isDiagnosticsChannelInjectionEnabled,\n  resolveDiagnosticsChannelInjection,\n} from './diagnosticsChannelInjection';\nimport { initOpenTelemetry } from './initOtel';\n\n/**\n * Get default integrations, excluding performance.\n */\nexport function getDefaultIntegrationsWithoutPerformance(): Integration[] {\n  const nodeCoreIntegrations = getNodeCoreDefaultIntegrations();\n\n  // Filter out the node-core HTTP and NodeFetch integrations and replace them with Node SDK's composite versions\n  return nodeCoreIntegrations\n    .filter(integration => integration.name !== 'Http' && integration.name !== 'NodeFetch')\n    .concat(httpIntegration(), nativeNodeFetchIntegration());\n}\n\n/** Get the default integrations for the Node SDK. */\nexport function getDefaultIntegrations(options: Options): Integration[] {\n  return [\n    ...getDefaultIntegrationsWithoutPerformance(),\n    // We only add performance integrations if tracing is enabled\n    // Note that this means that without tracing enabled, e.g. `expressIntegration()` will not be added\n    // This means that generally request isolation will work (because that is done by httpIntegration)\n    // But `transactionName` will not be set automatically\n    ...(hasSpansEnabled(options) ? getAutoPerformanceIntegrations() : []),\n  ];\n}\n\n/**\n * When the app opted into diagnostics-channel injection (via\n * `experimentalUseDiagnosticsChannelInjection()`) AND span recording is enabled, drop the OTel\n * integrations that have a channel-based replacement and append the FULL channel-integration set,\n * so the two never both instrument the same library. Otherwise returns `integrations` unchanged.\n *\n * `_init` applies the same swap to `defaultIntegrations`, but SDKs that seed their integrations\n * through the user `integrations` option instead (e.g. the `@sentry/aws-serverless` Lambda layer\n * entry) never hit that path, so they call this directly from their own `getDefaultIntegrations`.\n *\n * Note the asymmetry: appended channel integrations are not limited to ones whose OTel counterpart\n * was in `integrations`. For `@sentry/node` that makes no difference (the incoming list carries the\n * whole OTel performance set), but a caller with a narrower list (e.g. `@sentry/aws-serverless`)\n * gains channel coverage for libraries it never shipped OTel integrations for. Channel integrations\n * produce nothing but spans, so this is gated on span recording. Exported so SDKs that build their\n * own default-integration set can apply the same logic instead of duplicating it.\n */\nexport function applyDiagnosticsChannelInjectionIntegrations(\n  integrations: Integration[],\n  options: Options,\n): Integration[] {\n  if (isDiagnosticsChannelInjectionEnabled() && hasSpansEnabled(options)) {\n    const diagnosticsChannelInjection = resolveDiagnosticsChannelInjection();\n    if (diagnosticsChannelInjection) {\n      const replaced = new Set(diagnosticsChannelInjection.replacedOtelIntegrationNames);\n      return [...integrations.filter(i => !replaced.has(i.name)), ...diagnosticsChannelInjection.integrations];\n    }\n  }\n  return integrations;\n}\n\n/**\n * Initialize Sentry for Node.\n */\nexport function init(options: NodeOptions | undefined = {}): NodeClient | undefined {\n  return _init(options, getDefaultIntegrations);\n}\n\n/**\n * Internal initialization function.\n */\nfunction _init(\n  options: NodeOptions | undefined = {},\n  getDefaultIntegrationsImpl: (options: Options) => Integration[],\n): NodeClient | undefined {\n  applySdkMetadata(options, 'node');\n\n  // EXPERIMENTAL: diagnostics-channel injection, opted into via\n  // `experimentalUseDiagnosticsChannelInjection()`. Gated on span recording to\n  // match the OTel integrations it replaces. With tracing off there are no\n  // channel subscribers, so injecting is pointless work.\n  const diagnosticsChannelInjection =\n    isDiagnosticsChannelInjectionEnabled() && hasSpansEnabled(options)\n      ? resolveDiagnosticsChannelInjection()\n      : undefined;\n\n  // Install the channel-injection hooks as early as possible, before the app\n  // imports its instrumented modules.\n  if (diagnosticsChannelInjection) {\n    diagnosticsChannelInjection.register();\n  }\n\n  // Only use Node SDK defaults if none provided.\n  let defaultIntegrations = options.defaultIntegrations ?? getDefaultIntegrationsImpl(options);\n\n  // When opted into diagnostics-channel injection, swap the channel-based\n  // integrations in place of their OTel equivalents so the two don't both\n  // instrument the same library. Done here (rather than in\n  // `getDefaultIntegrations`) so it also covers framework SDKs (e.g.\n  // `@sentry/nestjs`) that pass their own `defaultIntegrations` array.\n  //\n  // Only when there's a non-empty default set to swap:\n  // `defaultIntegrations: false` (not an array) and `[]` /\n  // `initWithoutDefaultIntegrations()` (explicitly no defaults) are left\n  // untouched, as appending channel integrations there would resurrect\n  // defaults the caller opted out of.\n  if (diagnosticsChannelInjection && Array.isArray(defaultIntegrations) && defaultIntegrations.length > 0) {\n    const replaced = new Set(diagnosticsChannelInjection.replacedOtelIntegrationNames);\n    defaultIntegrations = [\n      ...defaultIntegrations.filter(integration => !replaced.has(integration.name)),\n      ...diagnosticsChannelInjection.integrations,\n    ];\n  }\n\n  const client = initNodeCore({\n    ...options,\n    defaultIntegrations,\n  });\n\n  // Add Node SDK specific OpenTelemetry setup\n  if (client && !options.skipOpenTelemetrySetup) {\n    initOpenTelemetry(client, {\n      spanProcessors: options.openTelemetrySpanProcessors,\n    });\n    validateOpenTelemetrySetup();\n  }\n\n  // Warn about missing or doubled channel injection. Runs after the client\n  // is created so the debug logger is enabled and the warning is emitted.\n  if (diagnosticsChannelInjection) {\n    diagnosticsChannelInjection.detect();\n  }\n\n  return client;\n}\n\n/**\n * Initialize Sentry for Node, without any integrations added by default.\n */\nexport function initWithoutDefaultIntegrations(options: NodeOptions | undefined = {}): NodeClient | undefined {\n  return _init(options, () => []);\n}\n", "export { httpIntegration } from './integrations/http.js';\nexport { nativeNodeFetchIntegration } from './integrations/node-fetch.js';\nexport { fsIntegration } from './integrations/fs/index.js';\nexport { expressIntegration, setupExpressErrorHandler } from './integrations/tracing/express.js';\nexport { fastifyIntegration, setupFastifyErrorHandler } from './integrations/tracing/fastify/index.js';\nexport { graphqlIntegration } from './integrations/tracing/graphql/index.js';\nexport { kafkaIntegration } from './integrations/tracing/kafka/index.js';\nexport { lruMemoizerIntegration } from './integrations/tracing/lrumemoizer/index.js';\nexport { mongoIntegration } from './integrations/tracing/mongo/index.js';\nexport { mongooseIntegration } from './integrations/tracing/mongoose/index.js';\nexport { mysqlIntegration } from './integrations/tracing/mysql/index.js';\nexport { mysql2Integration } from './integrations/tracing/mysql2/index.js';\nexport { redisIntegration } from './integrations/tracing/redis/index.js';\nexport { postgresIntegration } from './integrations/tracing/postgres/index.js';\nexport { postgresJsIntegration } from './integrations/tracing/postgresjs.js';\nexport { prismaIntegration } from '@sentry/server-utils';\nexport { hapiIntegration, setupHapiErrorHandler } from './integrations/tracing/hapi/index.js';\nexport { honoIntegration, setupHonoErrorHandler } from './integrations/tracing/hono/index.js';\nexport { koaIntegration, setupKoaErrorHandler } from './integrations/tracing/koa/index.js';\nexport { connectIntegration, setupConnectErrorHandler } from './integrations/tracing/connect/index.js';\nexport { knexIntegration } from './integrations/tracing/knex/index.js';\nexport { tediousIntegration } from './integrations/tracing/tedious/index.js';\nexport { genericPoolIntegration } from './integrations/tracing/genericPool/index.js';\nexport { dataloaderIntegration } from './integrations/tracing/dataloader/index.js';\nexport { amqplibIntegration } from './integrations/tracing/amqplib/index.js';\nexport { vercelAIIntegration } from './integrations/tracing/vercelai/index.js';\nexport { openAIIntegration } from './integrations/tracing/openai/index.js';\nexport { anthropicAIIntegration } from './integrations/tracing/anthropic-ai/index.js';\nexport { googleGenAIIntegration } from './integrations/tracing/google-genai/index.js';\nexport { langChainIntegration } from './integrations/tracing/langchain/index.js';\nexport { langGraphIntegration } from './integrations/tracing/langgraph/index.js';\nexport { buildLaunchDarklyFlagUsedHandlerShim as buildLaunchDarklyFlagUsedHandler, launchDarklyIntegrationShim as launchDarklyIntegration } from './integrations/featureFlagShims/launchDarkly.js';\nexport { OpenFeatureIntegrationHookShim as OpenFeatureIntegrationHook, openFeatureIntegrationShim as openFeatureIntegration } from './integrations/featureFlagShims/openFeature.js';\nexport { statsigIntegrationShim as statsigIntegration } from './integrations/featureFlagShims/statsig.js';\nexport { unleashIntegrationShim as unleashIntegration } from './integrations/featureFlagShims/unleash.js';\nexport { growthbookIntegrationShim as growthbookIntegration } from './integrations/featureFlagShims/growthbook.js';\nexport { firebaseIntegration } from './integrations/tracing/firebase/firebase.js';\nexport { applyDiagnosticsChannelInjectionIntegrations, getDefaultIntegrations, getDefaultIntegrationsWithoutPerformance, init, initWithoutDefaultIntegrations } from './sdk/index.js';\nexport { diagnosticsChannelInjectionIntegrations, experimentalUseDiagnosticsChannelInjection } from './sdk/experimentalUseDiagnosticsChannelInjection.js';\nexport { isDiagnosticsChannelInjectionEnabled } from './sdk/diagnosticsChannelInjection.js';\nexport { initOpenTelemetry, preloadOpenTelemetry } from './sdk/initOtel.js';\nexport { getAutoPerformanceIntegrations } from './integrations/tracing/index.js';\nexport { setOpenTelemetryContextAsyncContextStrategy as setNodeAsyncContextStrategy } from '@sentry/opentelemetry';\nexport { SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, Scope, addBreadcrumb, addEventProcessor, addIntegration, bindScopeToEmitter, captureCheckIn, captureConsoleIntegration, captureEvent, captureException, captureFeedback, captureMessage, captureSession, close, consoleLoggingIntegration, continueTrace, createConsolaReporter, createLangChainCallbackHandler, createTransport, dedupeIntegration, endSession, eventFiltersIntegration, expressErrorHandler, extraErrorDataIntegration, featureFlagsIntegration, flush, functionToStringIntegration, getActiveSpan, getClient, getCurrentScope, getGlobalScope, getIsolationScope, getRootSpan, getSpanDescendants, getSpanStatusFromHttpCode, getTraceData, getTraceMetaTags, httpHeadersToSpanAttributes, inboundFiltersIntegration, instrumentAnthropicAiClient, instrumentGoogleGenAIClient, instrumentLangChainEmbeddings, instrumentLangGraph, instrumentOpenAiClient, instrumentStateGraph, instrumentStateGraphCompile, instrumentSupabaseClient, isEnabled, isInitialized, lastEventId, linkedErrorsIntegration, parameterize, profiler, requestDataIntegration, rewriteFramesIntegration, setAttribute, setAttributes, setContext, setConversationId, setCurrentClient, setExtra, setExtras, setHttpStatus, setMeasurement, setTag, setTags, setUser, spanStreamingIntegration, spanToBaggageHeader, spanToJSON, spanToTraceHeader, startInactiveSpan, startNewTrace, startSession, startSpan, startSpanManual, supabaseIntegration, suppressTracing, trpcMiddleware, updateSpanName, winterCGHeadersToDict, withActiveSpan, withIsolationScope, withMonitor, withScope, wrapMcpServerWithSentry, zodErrorsIntegration } from '@sentry/core';\nexport { NODE_VERSION, NodeClient, SentryContextManager, _INTERNAL_normalizeCollectionInterval, anrIntegration, childProcessIntegration, consoleIntegration, contextLinesIntegration, createGetModuleFromFilename, createSentryWinstonTransport, cron, defaultStackParser, disableAnrDetectionForCallback, generateInstrumentOnce, getSentryRelease, httpServerIntegration, httpServerSpansIntegration, localVariablesIntegration, logger, makeNodeTransport, metrics, modulesIntegration, nodeContextIntegration, nodeRuntimeMetricsIntegration, onUncaughtExceptionIntegration, onUnhandledRejectionIntegration, pinoIntegration, processSessionIntegration, spotlightIntegration, systemErrorIntegration, validateOpenTelemetrySetup, withStreamedSpan } from '@sentry/node-core';\n//# sourceMappingURL=index.js.map\n", "export var util;\n(function (util) {\n    util.assertEqual = (_) => { };\n    function assertIs(_arg) { }\n    util.assertIs = assertIs;\n    function assertNever(_x) {\n        throw new Error();\n    }\n    util.assertNever = assertNever;\n    util.arrayToEnum = (items) => {\n        const obj = {};\n        for (const item of items) {\n            obj[item] = item;\n        }\n        return obj;\n    };\n    util.getValidEnumValues = (obj) => {\n        const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n        const filtered = {};\n        for (const k of validKeys) {\n            filtered[k] = obj[k];\n        }\n        return util.objectValues(filtered);\n    };\n    util.objectValues = (obj) => {\n        return util.objectKeys(obj).map(function (e) {\n            return obj[e];\n        });\n    };\n    util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n        ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n        : (object) => {\n            const keys = [];\n            for (const key in object) {\n                if (Object.prototype.hasOwnProperty.call(object, key)) {\n                    keys.push(key);\n                }\n            }\n            return keys;\n        };\n    util.find = (arr, checker) => {\n        for (const item of arr) {\n            if (checker(item))\n                return item;\n        }\n        return undefined;\n    };\n    util.isInteger = typeof Number.isInteger === \"function\"\n        ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n        : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n    function joinValues(array, separator = \" | \") {\n        return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n    }\n    util.joinValues = joinValues;\n    util.jsonStringifyReplacer = (_, value) => {\n        if (typeof value === \"bigint\") {\n            return value.toString();\n        }\n        return value;\n    };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n    objectUtil.mergeShapes = (first, second) => {\n        return {\n            ...first,\n            ...second, // second overwrites first\n        };\n    };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n    \"string\",\n    \"nan\",\n    \"number\",\n    \"integer\",\n    \"float\",\n    \"boolean\",\n    \"date\",\n    \"bigint\",\n    \"symbol\",\n    \"function\",\n    \"undefined\",\n    \"null\",\n    \"array\",\n    \"object\",\n    \"unknown\",\n    \"promise\",\n    \"void\",\n    \"never\",\n    \"map\",\n    \"set\",\n]);\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return ZodParsedType.undefined;\n        case \"string\":\n            return ZodParsedType.string;\n        case \"number\":\n            return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n        case \"boolean\":\n            return ZodParsedType.boolean;\n        case \"function\":\n            return ZodParsedType.function;\n        case \"bigint\":\n            return ZodParsedType.bigint;\n        case \"symbol\":\n            return ZodParsedType.symbol;\n        case \"object\":\n            if (Array.isArray(data)) {\n                return ZodParsedType.array;\n            }\n            if (data === null) {\n                return ZodParsedType.null;\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return ZodParsedType.promise;\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return ZodParsedType.map;\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return ZodParsedType.set;\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return ZodParsedType.date;\n            }\n            return ZodParsedType.object;\n        default:\n            return ZodParsedType.unknown;\n    }\n};\n", "import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n    \"invalid_type\",\n    \"invalid_literal\",\n    \"custom\",\n    \"invalid_union\",\n    \"invalid_union_discriminator\",\n    \"invalid_enum_value\",\n    \"unrecognized_keys\",\n    \"invalid_arguments\",\n    \"invalid_return_type\",\n    \"invalid_date\",\n    \"invalid_string\",\n    \"too_small\",\n    \"too_big\",\n    \"invalid_intersection_types\",\n    \"not_multiple_of\",\n    \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n    const json = JSON.stringify(obj, null, 2);\n    return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n    get errors() {\n        return this.issues;\n    }\n    constructor(issues) {\n        super();\n        this.issues = [];\n        this.addIssue = (sub) => {\n            this.issues = [...this.issues, sub];\n        };\n        this.addIssues = (subs = []) => {\n            this.issues = [...this.issues, ...subs];\n        };\n        const actualProto = new.target.prototype;\n        if (Object.setPrototypeOf) {\n            // eslint-disable-next-line ban/ban\n            Object.setPrototypeOf(this, actualProto);\n        }\n        else {\n            this.__proto__ = actualProto;\n        }\n        this.name = \"ZodError\";\n        this.issues = issues;\n    }\n    format(_mapper) {\n        const mapper = _mapper ||\n            function (issue) {\n                return issue.message;\n            };\n        const fieldErrors = { _errors: [] };\n        const processError = (error) => {\n            for (const issue of error.issues) {\n                if (issue.code === \"invalid_union\") {\n                    issue.unionErrors.map(processError);\n                }\n                else if (issue.code === \"invalid_return_type\") {\n                    processError(issue.returnTypeError);\n                }\n                else if (issue.code === \"invalid_arguments\") {\n                    processError(issue.argumentsError);\n                }\n                else if (issue.path.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < issue.path.length) {\n                        const el = issue.path[i];\n                        const terminal = i === issue.path.length - 1;\n                        if (!terminal) {\n                            curr[el] = curr[el] || { _errors: [] };\n                            // if (typeof el === \"string\") {\n                            //   curr[el] = curr[el] || { _errors: [] };\n                            // } else if (typeof el === \"number\") {\n                            //   const errorArray: any = [];\n                            //   errorArray._errors = [];\n                            //   curr[el] = curr[el] || errorArray;\n                            // }\n                        }\n                        else {\n                            curr[el] = curr[el] || { _errors: [] };\n                            curr[el]._errors.push(mapper(issue));\n                        }\n                        curr = curr[el];\n                        i++;\n                    }\n                }\n            }\n        };\n        processError(this);\n        return fieldErrors;\n    }\n    static assert(value) {\n        if (!(value instanceof ZodError)) {\n            throw new Error(`Not a ZodError: ${value}`);\n        }\n    }\n    toString() {\n        return this.message;\n    }\n    get message() {\n        return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n    }\n    get isEmpty() {\n        return this.issues.length === 0;\n    }\n    flatten(mapper = (issue) => issue.message) {\n        const fieldErrors = {};\n        const formErrors = [];\n        for (const sub of this.issues) {\n            if (sub.path.length > 0) {\n                const firstEl = sub.path[0];\n                fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n                fieldErrors[firstEl].push(mapper(sub));\n            }\n            else {\n                formErrors.push(mapper(sub));\n            }\n        }\n        return { formErrors, fieldErrors };\n    }\n    get formErrors() {\n        return this.flatten();\n    }\n}\nZodError.create = (issues) => {\n    const error = new ZodError(issues);\n    return error;\n};\n", "import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n    let message;\n    switch (issue.code) {\n        case ZodIssueCode.invalid_type:\n            if (issue.received === ZodParsedType.undefined) {\n                message = \"Required\";\n            }\n            else {\n                message = `Expected ${issue.expected}, received ${issue.received}`;\n            }\n            break;\n        case ZodIssueCode.invalid_literal:\n            message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n            break;\n        case ZodIssueCode.unrecognized_keys:\n            message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n            break;\n        case ZodIssueCode.invalid_union:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_union_discriminator:\n            message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n            break;\n        case ZodIssueCode.invalid_enum_value:\n            message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n            break;\n        case ZodIssueCode.invalid_arguments:\n            message = `Invalid function arguments`;\n            break;\n        case ZodIssueCode.invalid_return_type:\n            message = `Invalid function return type`;\n            break;\n        case ZodIssueCode.invalid_date:\n            message = `Invalid date`;\n            break;\n        case ZodIssueCode.invalid_string:\n            if (typeof issue.validation === \"object\") {\n                if (\"includes\" in issue.validation) {\n                    message = `Invalid input: must include \"${issue.validation.includes}\"`;\n                    if (typeof issue.validation.position === \"number\") {\n                        message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n                    }\n                }\n                else if (\"startsWith\" in issue.validation) {\n                    message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n                }\n                else if (\"endsWith\" in issue.validation) {\n                    message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n                }\n                else {\n                    util.assertNever(issue.validation);\n                }\n            }\n            else if (issue.validation !== \"regex\") {\n                message = `Invalid ${issue.validation}`;\n            }\n            else {\n                message = \"Invalid\";\n            }\n            break;\n        case ZodIssueCode.too_small:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"bigint\")\n                message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.too_big:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"bigint\")\n                message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.custom:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_intersection_types:\n            message = `Intersection results could not be merged`;\n            break;\n        case ZodIssueCode.not_multiple_of:\n            message = `Number must be a multiple of ${issue.multipleOf}`;\n            break;\n        case ZodIssueCode.not_finite:\n            message = \"Number must be finite\";\n            break;\n        default:\n            message = _ctx.defaultError;\n            util.assertNever(issue);\n    }\n    return { message };\n};\nexport default errorMap;\n", "import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n    overrideErrorMap = map;\n}\nexport function getErrorMap() {\n    return overrideErrorMap;\n}\n", "import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n    const { data, path, errorMaps, issueData } = params;\n    const fullPath = [...path, ...(issueData.path || [])];\n    const fullIssue = {\n        ...issueData,\n        path: fullPath,\n    };\n    if (issueData.message !== undefined) {\n        return {\n            ...issueData,\n            path: fullPath,\n            message: issueData.message,\n        };\n    }\n    let errorMessage = \"\";\n    const maps = errorMaps\n        .filter((m) => !!m)\n        .slice()\n        .reverse();\n    for (const map of maps) {\n        errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n    }\n    return {\n        ...issueData,\n        path: fullPath,\n        message: errorMessage,\n    };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n    const overrideMap = getErrorMap();\n    const issue = makeIssue({\n        issueData: issueData,\n        data: ctx.data,\n        path: ctx.path,\n        errorMaps: [\n            ctx.common.contextualErrorMap, // contextual error map is first priority\n            ctx.schemaErrorMap, // then schema-bound map if available\n            overrideMap, // then global override map\n            overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n        ].filter((x) => !!x),\n    });\n    ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n    constructor() {\n        this.value = \"valid\";\n    }\n    dirty() {\n        if (this.value === \"valid\")\n            this.value = \"dirty\";\n    }\n    abort() {\n        if (this.value !== \"aborted\")\n            this.value = \"aborted\";\n    }\n    static mergeArray(status, results) {\n        const arrayValue = [];\n        for (const s of results) {\n            if (s.status === \"aborted\")\n                return INVALID;\n            if (s.status === \"dirty\")\n                status.dirty();\n            arrayValue.push(s.value);\n        }\n        return { status: status.value, value: arrayValue };\n    }\n    static async mergeObjectAsync(status, pairs) {\n        const syncPairs = [];\n        for (const pair of pairs) {\n            const key = await pair.key;\n            const value = await pair.value;\n            syncPairs.push({\n                key,\n                value,\n            });\n        }\n        return ParseStatus.mergeObjectSync(status, syncPairs);\n    }\n    static mergeObjectSync(status, pairs) {\n        const finalObject = {};\n        for (const pair of pairs) {\n            const { key, value } = pair;\n            if (key.status === \"aborted\")\n                return INVALID;\n            if (value.status === \"aborted\")\n                return INVALID;\n            if (key.status === \"dirty\")\n                status.dirty();\n            if (value.status === \"dirty\")\n                status.dirty();\n            if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n                finalObject[key.value] = value.value;\n            }\n        }\n        return { status: status.value, value: finalObject };\n    }\n}\nexport const INVALID = Object.freeze({\n    status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n", "export {};\n", "export var errorUtil;\n(function (errorUtil) {\n    errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n    // biome-ignore lint:\n    errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n", "import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n    constructor(parent, value, path, key) {\n        this._cachedPath = [];\n        this.parent = parent;\n        this.data = value;\n        this._path = path;\n        this._key = key;\n    }\n    get path() {\n        if (!this._cachedPath.length) {\n            if (Array.isArray(this._key)) {\n                this._cachedPath.push(...this._path, ...this._key);\n            }\n            else {\n                this._cachedPath.push(...this._path, this._key);\n            }\n        }\n        return this._cachedPath;\n    }\n}\nconst handleResult = (ctx, result) => {\n    if (isValid(result)) {\n        return { success: true, data: result.value };\n    }\n    else {\n        if (!ctx.common.issues.length) {\n            throw new Error(\"Validation failed but no issues detected.\");\n        }\n        return {\n            success: false,\n            get error() {\n                if (this._error)\n                    return this._error;\n                const error = new ZodError(ctx.common.issues);\n                this._error = error;\n                return this._error;\n            },\n        };\n    }\n};\nfunction processCreateParams(params) {\n    if (!params)\n        return {};\n    const { errorMap, invalid_type_error, required_error, description } = params;\n    if (errorMap && (invalid_type_error || required_error)) {\n        throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n    }\n    if (errorMap)\n        return { errorMap: errorMap, description };\n    const customMap = (iss, ctx) => {\n        const { message } = params;\n        if (iss.code === \"invalid_enum_value\") {\n            return { message: message ?? ctx.defaultError };\n        }\n        if (typeof ctx.data === \"undefined\") {\n            return { message: message ?? required_error ?? ctx.defaultError };\n        }\n        if (iss.code !== \"invalid_type\")\n            return { message: ctx.defaultError };\n        return { message: message ?? invalid_type_error ?? ctx.defaultError };\n    };\n    return { errorMap: customMap, description };\n}\nexport class ZodType {\n    get description() {\n        return this._def.description;\n    }\n    _getType(input) {\n        return getParsedType(input.data);\n    }\n    _getOrReturnCtx(input, ctx) {\n        return (ctx || {\n            common: input.parent.common,\n            data: input.data,\n            parsedType: getParsedType(input.data),\n            schemaErrorMap: this._def.errorMap,\n            path: input.path,\n            parent: input.parent,\n        });\n    }\n    _processInputParams(input) {\n        return {\n            status: new ParseStatus(),\n            ctx: {\n                common: input.parent.common,\n                data: input.data,\n                parsedType: getParsedType(input.data),\n                schemaErrorMap: this._def.errorMap,\n                path: input.path,\n                parent: input.parent,\n            },\n        };\n    }\n    _parseSync(input) {\n        const result = this._parse(input);\n        if (isAsync(result)) {\n            throw new Error(\"Synchronous parse encountered promise.\");\n        }\n        return result;\n    }\n    _parseAsync(input) {\n        const result = this._parse(input);\n        return Promise.resolve(result);\n    }\n    parse(data, params) {\n        const result = this.safeParse(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    safeParse(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: params?.async ?? false,\n                contextualErrorMap: params?.errorMap,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n        return handleResult(ctx, result);\n    }\n    \"~validate\"(data) {\n        const ctx = {\n            common: {\n                issues: [],\n                async: !!this[\"~standard\"].async,\n            },\n            path: [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        if (!this[\"~standard\"].async) {\n            try {\n                const result = this._parseSync({ data, path: [], parent: ctx });\n                return isValid(result)\n                    ? {\n                        value: result.value,\n                    }\n                    : {\n                        issues: ctx.common.issues,\n                    };\n            }\n            catch (err) {\n                if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n                    this[\"~standard\"].async = true;\n                }\n                ctx.common = {\n                    issues: [],\n                    async: true,\n                };\n            }\n        }\n        return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n            ? {\n                value: result.value,\n            }\n            : {\n                issues: ctx.common.issues,\n            });\n    }\n    async parseAsync(data, params) {\n        const result = await this.safeParseAsync(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    async safeParseAsync(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                contextualErrorMap: params?.errorMap,\n                async: true,\n            },\n            path: params?.path || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n        const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n        return handleResult(ctx, result);\n    }\n    refine(check, message) {\n        const getIssueProperties = (val) => {\n            if (typeof message === \"string\" || typeof message === \"undefined\") {\n                return { message };\n            }\n            else if (typeof message === \"function\") {\n                return message(val);\n            }\n            else {\n                return message;\n            }\n        };\n        return this._refinement((val, ctx) => {\n            const result = check(val);\n            const setError = () => ctx.addIssue({\n                code: ZodIssueCode.custom,\n                ...getIssueProperties(val),\n            });\n            if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n                return result.then((data) => {\n                    if (!data) {\n                        setError();\n                        return false;\n                    }\n                    else {\n                        return true;\n                    }\n                });\n            }\n            if (!result) {\n                setError();\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    refinement(check, refinementData) {\n        return this._refinement((val, ctx) => {\n            if (!check(val)) {\n                ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    _refinement(refinement) {\n        return new ZodEffects({\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"refinement\", refinement },\n        });\n    }\n    superRefine(refinement) {\n        return this._refinement(refinement);\n    }\n    constructor(def) {\n        /** Alias of safeParseAsync */\n        this.spa = this.safeParseAsync;\n        this._def = def;\n        this.parse = this.parse.bind(this);\n        this.safeParse = this.safeParse.bind(this);\n        this.parseAsync = this.parseAsync.bind(this);\n        this.safeParseAsync = this.safeParseAsync.bind(this);\n        this.spa = this.spa.bind(this);\n        this.refine = this.refine.bind(this);\n        this.refinement = this.refinement.bind(this);\n        this.superRefine = this.superRefine.bind(this);\n        this.optional = this.optional.bind(this);\n        this.nullable = this.nullable.bind(this);\n        this.nullish = this.nullish.bind(this);\n        this.array = this.array.bind(this);\n        this.promise = this.promise.bind(this);\n        this.or = this.or.bind(this);\n        this.and = this.and.bind(this);\n        this.transform = this.transform.bind(this);\n        this.brand = this.brand.bind(this);\n        this.default = this.default.bind(this);\n        this.catch = this.catch.bind(this);\n        this.describe = this.describe.bind(this);\n        this.pipe = this.pipe.bind(this);\n        this.readonly = this.readonly.bind(this);\n        this.isNullable = this.isNullable.bind(this);\n        this.isOptional = this.isOptional.bind(this);\n        this[\"~standard\"] = {\n            version: 1,\n            vendor: \"zod\",\n            validate: (data) => this[\"~validate\"](data),\n        };\n    }\n    optional() {\n        return ZodOptional.create(this, this._def);\n    }\n    nullable() {\n        return ZodNullable.create(this, this._def);\n    }\n    nullish() {\n        return this.nullable().optional();\n    }\n    array() {\n        return ZodArray.create(this);\n    }\n    promise() {\n        return ZodPromise.create(this, this._def);\n    }\n    or(option) {\n        return ZodUnion.create([this, option], this._def);\n    }\n    and(incoming) {\n        return ZodIntersection.create(this, incoming, this._def);\n    }\n    transform(transform) {\n        return new ZodEffects({\n            ...processCreateParams(this._def),\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"transform\", transform },\n        });\n    }\n    default(def) {\n        const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodDefault({\n            ...processCreateParams(this._def),\n            innerType: this,\n            defaultValue: defaultValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodDefault,\n        });\n    }\n    brand() {\n        return new ZodBranded({\n            typeName: ZodFirstPartyTypeKind.ZodBranded,\n            type: this,\n            ...processCreateParams(this._def),\n        });\n    }\n    catch(def) {\n        const catchValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodCatch({\n            ...processCreateParams(this._def),\n            innerType: this,\n            catchValue: catchValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodCatch,\n        });\n    }\n    describe(description) {\n        const This = this.constructor;\n        return new This({\n            ...this._def,\n            description,\n        });\n    }\n    pipe(target) {\n        return ZodPipeline.create(this, target);\n    }\n    readonly() {\n        return ZodReadonly.create(this);\n    }\n    isOptional() {\n        return this.safeParse(undefined).success;\n    }\n    isNullable() {\n        return this.safeParse(null).success;\n    }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n//   /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n//   /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n//   /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n//   /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n//   /^[a-z0-9.!#$%&\u2019*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n    let secondsRegexSource = `[0-5]\\\\d`;\n    if (args.precision) {\n        secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n    }\n    else if (args.precision == null) {\n        secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n    }\n    const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n    return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n    return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n    let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n    const opts = [];\n    opts.push(args.local ? `Z?` : `Z`);\n    if (args.offset)\n        opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n    regex = `${regex}(${opts.join(\"|\")})`;\n    return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nfunction isValidJWT(jwt, alg) {\n    if (!jwtRegex.test(jwt))\n        return false;\n    try {\n        const [header] = jwt.split(\".\");\n        if (!header)\n            return false;\n        // Convert base64url to base64\n        const base64 = header\n            .replace(/-/g, \"+\")\n            .replace(/_/g, \"/\")\n            .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n        const decoded = JSON.parse(atob(base64));\n        if (typeof decoded !== \"object\" || decoded === null)\n            return false;\n        if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n            return false;\n        if (!decoded.alg)\n            return false;\n        if (alg && decoded.alg !== alg)\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nfunction isValidCidr(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nexport class ZodString extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = String(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.string) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.string,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.length < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.length > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"length\") {\n                const tooBig = input.data.length > check.value;\n                const tooSmall = input.data.length < check.value;\n                if (tooBig || tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    if (tooBig) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_big,\n                            maximum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    else if (tooSmall) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_small,\n                            minimum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"email\") {\n                if (!emailRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"email\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"emoji\") {\n                if (!emojiRegex) {\n                    emojiRegex = new RegExp(_emojiRegex, \"u\");\n                }\n                if (!emojiRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"emoji\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"uuid\") {\n                if (!uuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"uuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"nanoid\") {\n                if (!nanoidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"nanoid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid\") {\n                if (!cuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid2\") {\n                if (!cuid2Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid2\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ulid\") {\n                if (!ulidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ulid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"url\") {\n                try {\n                    new URL(input.data);\n                }\n                catch {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"regex\") {\n                check.regex.lastIndex = 0;\n                const testResult = check.regex.test(input.data);\n                if (!testResult) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"regex\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"trim\") {\n                input.data = input.data.trim();\n            }\n            else if (check.kind === \"includes\") {\n                if (!input.data.includes(check.value, check.position)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { includes: check.value, position: check.position },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"toLowerCase\") {\n                input.data = input.data.toLowerCase();\n            }\n            else if (check.kind === \"toUpperCase\") {\n                input.data = input.data.toUpperCase();\n            }\n            else if (check.kind === \"startsWith\") {\n                if (!input.data.startsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { startsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"endsWith\") {\n                if (!input.data.endsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { endsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"datetime\") {\n                const regex = datetimeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"datetime\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"date\") {\n                const regex = dateRegex;\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"date\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"time\") {\n                const regex = timeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"time\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"duration\") {\n                if (!durationRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"duration\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ip\") {\n                if (!isValidIP(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ip\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"jwt\") {\n                if (!isValidJWT(input.data, check.alg)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"jwt\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cidr\") {\n                if (!isValidCidr(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cidr\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64\") {\n                if (!base64Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64url\") {\n                if (!base64urlRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _regex(regex, validation, message) {\n        return this.refinement((data) => regex.test(data), {\n            validation,\n            code: ZodIssueCode.invalid_string,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    _addCheck(check) {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    email(message) {\n        return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n    }\n    url(message) {\n        return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n    }\n    emoji(message) {\n        return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n    }\n    uuid(message) {\n        return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n    }\n    nanoid(message) {\n        return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n    }\n    cuid(message) {\n        return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n    }\n    cuid2(message) {\n        return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n    }\n    ulid(message) {\n        return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n    }\n    base64(message) {\n        return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n    }\n    base64url(message) {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return this._addCheck({\n            kind: \"base64url\",\n            ...errorUtil.errToObj(message),\n        });\n    }\n    jwt(options) {\n        return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n    }\n    ip(options) {\n        return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n    }\n    cidr(options) {\n        return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n    }\n    datetime(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"datetime\",\n                precision: null,\n                offset: false,\n                local: false,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"datetime\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            offset: options?.offset ?? false,\n            local: options?.local ?? false,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    date(message) {\n        return this._addCheck({ kind: \"date\", message });\n    }\n    time(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"time\",\n                precision: null,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"time\",\n            precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    duration(message) {\n        return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n    }\n    regex(regex, message) {\n        return this._addCheck({\n            kind: \"regex\",\n            regex: regex,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    includes(value, options) {\n        return this._addCheck({\n            kind: \"includes\",\n            value: value,\n            position: options?.position,\n            ...errorUtil.errToObj(options?.message),\n        });\n    }\n    startsWith(value, message) {\n        return this._addCheck({\n            kind: \"startsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    endsWith(value, message) {\n        return this._addCheck({\n            kind: \"endsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    min(minLength, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    max(maxLength, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    length(len, message) {\n        return this._addCheck({\n            kind: \"length\",\n            value: len,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    /**\n     * Equivalent to `.min(1)`\n     */\n    nonempty(message) {\n        return this.min(1, errorUtil.errToObj(message));\n    }\n    trim() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"trim\" }],\n        });\n    }\n    toLowerCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n        });\n    }\n    toUpperCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n        });\n    }\n    get isDatetime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n    }\n    get isDate() {\n        return !!this._def.checks.find((ch) => ch.kind === \"date\");\n    }\n    get isTime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"time\");\n    }\n    get isDuration() {\n        return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n    }\n    get isEmail() {\n        return !!this._def.checks.find((ch) => ch.kind === \"email\");\n    }\n    get isURL() {\n        return !!this._def.checks.find((ch) => ch.kind === \"url\");\n    }\n    get isEmoji() {\n        return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n    }\n    get isUUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n    }\n    get isNANOID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n    }\n    get isCUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n    }\n    get isCUID2() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n    }\n    get isULID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n    }\n    get isIP() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n    }\n    get isCIDR() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n    }\n    get isBase64() {\n        return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n    }\n    get isBase64url() {\n        // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n        return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n    }\n    get minLength() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxLength() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodString.create = (params) => {\n    return new ZodString({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodString,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n        this.step = this.multipleOf;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Number(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.number) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.number,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"int\") {\n                if (!util.isInteger(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_type,\n                        expected: \"integer\",\n                        received: \"float\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (floatSafeRemainder(input.data, check.value) !== 0) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"finite\") {\n                if (!Number.isFinite(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_finite,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    int(message) {\n        return this._addCheck({\n            kind: \"int\",\n            message: errorUtil.toString(message),\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value: value,\n            message: errorUtil.toString(message),\n        });\n    }\n    finite(message) {\n        return this._addCheck({\n            kind: \"finite\",\n            message: errorUtil.toString(message),\n        });\n    }\n    safe(message) {\n        return this._addCheck({\n            kind: \"min\",\n            inclusive: true,\n            value: Number.MIN_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        })._addCheck({\n            kind: \"max\",\n            inclusive: true,\n            value: Number.MAX_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n    get isInt() {\n        return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n    }\n    get isFinite() {\n        let max = null;\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n                return true;\n            }\n            else if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n            else if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return Number.isFinite(min) && Number.isFinite(max);\n    }\n}\nZodNumber.create = (params) => {\n    return new ZodNumber({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodNumber,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBigInt extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            try {\n                input.data = BigInt(input.data);\n            }\n            catch {\n                return this._getInvalidInput(input);\n            }\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.bigint) {\n            return this._getInvalidInput(input);\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        type: \"bigint\",\n                        minimum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        type: \"bigint\",\n                        maximum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (input.data % check.value !== BigInt(0)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _getInvalidInput(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.bigint,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodBigInt.create = (params) => {\n    return new ZodBigInt({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodBigInt,\n        coerce: params?.coerce ?? false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodBoolean extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Boolean(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.boolean) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.boolean,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodBoolean.create = (params) => {\n    return new ZodBoolean({\n        typeName: ZodFirstPartyTypeKind.ZodBoolean,\n        coerce: params?.coerce || false,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDate extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = new Date(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.date) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.date,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (Number.isNaN(input.data.getTime())) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_date,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.getTime() < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        minimum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.getTime() > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        maximum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return {\n            status: status.value,\n            value: new Date(input.data.getTime()),\n        };\n    }\n    _addCheck(check) {\n        return new ZodDate({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    min(minDate, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    max(maxDate, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    get minDate() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min != null ? new Date(min) : null;\n    }\n    get maxDate() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max != null ? new Date(max) : null;\n    }\n}\nZodDate.create = (params) => {\n    return new ZodDate({\n        checks: [],\n        coerce: params?.coerce || false,\n        typeName: ZodFirstPartyTypeKind.ZodDate,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSymbol extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.symbol) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.symbol,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodSymbol.create = (params) => {\n    return new ZodSymbol({\n        typeName: ZodFirstPartyTypeKind.ZodSymbol,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUndefined extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.undefined,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodUndefined.create = (params) => {\n    return new ZodUndefined({\n        typeName: ZodFirstPartyTypeKind.ZodUndefined,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNull extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.null) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.null,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodNull.create = (params) => {\n    return new ZodNull({\n        typeName: ZodFirstPartyTypeKind.ZodNull,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodAny extends ZodType {\n    constructor() {\n        super(...arguments);\n        // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n        this._any = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodAny.create = (params) => {\n    return new ZodAny({\n        typeName: ZodFirstPartyTypeKind.ZodAny,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnknown extends ZodType {\n    constructor() {\n        super(...arguments);\n        // required\n        this._unknown = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodUnknown.create = (params) => {\n    return new ZodUnknown({\n        typeName: ZodFirstPartyTypeKind.ZodUnknown,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNever extends ZodType {\n    _parse(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.never,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n}\nZodNever.create = (params) => {\n    return new ZodNever({\n        typeName: ZodFirstPartyTypeKind.ZodNever,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodVoid extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.void,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodVoid.create = (params) => {\n    return new ZodVoid({\n        typeName: ZodFirstPartyTypeKind.ZodVoid,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodArray extends ZodType {\n    _parse(input) {\n        const { ctx, status } = this._processInputParams(input);\n        const def = this._def;\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (def.exactLength !== null) {\n            const tooBig = ctx.data.length > def.exactLength.value;\n            const tooSmall = ctx.data.length < def.exactLength.value;\n            if (tooBig || tooSmall) {\n                addIssueToContext(ctx, {\n                    code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n                    minimum: (tooSmall ? def.exactLength.value : undefined),\n                    maximum: (tooBig ? def.exactLength.value : undefined),\n                    type: \"array\",\n                    inclusive: true,\n                    exact: true,\n                    message: def.exactLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.minLength !== null) {\n            if (ctx.data.length < def.minLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxLength !== null) {\n            if (ctx.data.length > def.maxLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.all([...ctx.data].map((item, i) => {\n                return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n            })).then((result) => {\n                return ParseStatus.mergeArray(status, result);\n            });\n        }\n        const result = [...ctx.data].map((item, i) => {\n            return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n        });\n        return ParseStatus.mergeArray(status, result);\n    }\n    get element() {\n        return this._def.type;\n    }\n    min(minLength, message) {\n        return new ZodArray({\n            ...this._def,\n            minLength: { value: minLength, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxLength, message) {\n        return new ZodArray({\n            ...this._def,\n            maxLength: { value: maxLength, message: errorUtil.toString(message) },\n        });\n    }\n    length(len, message) {\n        return new ZodArray({\n            ...this._def,\n            exactLength: { value: len, message: errorUtil.toString(message) },\n        });\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodArray.create = (schema, params) => {\n    return new ZodArray({\n        type: schema,\n        minLength: null,\n        maxLength: null,\n        exactLength: null,\n        typeName: ZodFirstPartyTypeKind.ZodArray,\n        ...processCreateParams(params),\n    });\n};\nfunction deepPartialify(schema) {\n    if (schema instanceof ZodObject) {\n        const newShape = {};\n        for (const key in schema.shape) {\n            const fieldSchema = schema.shape[key];\n            newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n        }\n        return new ZodObject({\n            ...schema._def,\n            shape: () => newShape,\n        });\n    }\n    else if (schema instanceof ZodArray) {\n        return new ZodArray({\n            ...schema._def,\n            type: deepPartialify(schema.element),\n        });\n    }\n    else if (schema instanceof ZodOptional) {\n        return ZodOptional.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodNullable) {\n        return ZodNullable.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodTuple) {\n        return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n    }\n    else {\n        return schema;\n    }\n}\nexport class ZodObject extends ZodType {\n    constructor() {\n        super(...arguments);\n        this._cached = null;\n        /**\n         * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n         * If you want to pass through unknown properties, use `.passthrough()` instead.\n         */\n        this.nonstrict = this.passthrough;\n        // extend<\n        //   Augmentation extends ZodRawShape,\n        //   NewOutput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_output\"]\n        //       : k extends keyof Output\n        //       ? Output[k]\n        //       : never;\n        //   }>,\n        //   NewInput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_input\"]\n        //       : k extends keyof Input\n        //       ? Input[k]\n        //       : never;\n        //   }>\n        // >(\n        //   augmentation: Augmentation\n        // ): ZodObject<\n        //   extendShape<T, Augmentation>,\n        //   UnknownKeys,\n        //   Catchall,\n        //   NewOutput,\n        //   NewInput\n        // > {\n        //   return new ZodObject({\n        //     ...this._def,\n        //     shape: () => ({\n        //       ...this._def.shape(),\n        //       ...augmentation,\n        //     }),\n        //   }) as any;\n        // }\n        /**\n         * @deprecated Use `.extend` instead\n         *  */\n        this.augment = this.extend;\n    }\n    _getCached() {\n        if (this._cached !== null)\n            return this._cached;\n        const shape = this._def.shape();\n        const keys = util.objectKeys(shape);\n        this._cached = { shape, keys };\n        return this._cached;\n    }\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.object) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const { status, ctx } = this._processInputParams(input);\n        const { shape, keys: shapeKeys } = this._getCached();\n        const extraKeys = [];\n        if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n            for (const key in ctx.data) {\n                if (!shapeKeys.includes(key)) {\n                    extraKeys.push(key);\n                }\n            }\n        }\n        const pairs = [];\n        for (const key of shapeKeys) {\n            const keyValidator = shape[key];\n            const value = ctx.data[key];\n            pairs.push({\n                key: { status: \"valid\", value: key },\n                value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (this._def.catchall instanceof ZodNever) {\n            const unknownKeys = this._def.unknownKeys;\n            if (unknownKeys === \"passthrough\") {\n                for (const key of extraKeys) {\n                    pairs.push({\n                        key: { status: \"valid\", value: key },\n                        value: { status: \"valid\", value: ctx.data[key] },\n                    });\n                }\n            }\n            else if (unknownKeys === \"strict\") {\n                if (extraKeys.length > 0) {\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.unrecognized_keys,\n                        keys: extraKeys,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (unknownKeys === \"strip\") {\n            }\n            else {\n                throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n            }\n        }\n        else {\n            // run catchall validation\n            const catchall = this._def.catchall;\n            for (const key of extraKeys) {\n                const value = ctx.data[key];\n                pairs.push({\n                    key: { status: \"valid\", value: key },\n                    value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n                    ),\n                    alwaysSet: key in ctx.data,\n                });\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.resolve()\n                .then(async () => {\n                const syncPairs = [];\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    syncPairs.push({\n                        key,\n                        value,\n                        alwaysSet: pair.alwaysSet,\n                    });\n                }\n                return syncPairs;\n            })\n                .then((syncPairs) => {\n                return ParseStatus.mergeObjectSync(status, syncPairs);\n            });\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get shape() {\n        return this._def.shape();\n    }\n    strict(message) {\n        errorUtil.errToObj;\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strict\",\n            ...(message !== undefined\n                ? {\n                    errorMap: (issue, ctx) => {\n                        const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n                        if (issue.code === \"unrecognized_keys\")\n                            return {\n                                message: errorUtil.errToObj(message).message ?? defaultError,\n                            };\n                        return {\n                            message: defaultError,\n                        };\n                    },\n                }\n                : {}),\n        });\n    }\n    strip() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strip\",\n        });\n    }\n    passthrough() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"passthrough\",\n        });\n    }\n    // const AugmentFactory =\n    //   <Def extends ZodObjectDef>(def: Def) =>\n    //   <Augmentation extends ZodRawShape>(\n    //     augmentation: Augmentation\n    //   ): ZodObject<\n    //     extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n    //     Def[\"unknownKeys\"],\n    //     Def[\"catchall\"]\n    //   > => {\n    //     return new ZodObject({\n    //       ...def,\n    //       shape: () => ({\n    //         ...def.shape(),\n    //         ...augmentation,\n    //       }),\n    //     }) as any;\n    //   };\n    extend(augmentation) {\n        return new ZodObject({\n            ...this._def,\n            shape: () => ({\n                ...this._def.shape(),\n                ...augmentation,\n            }),\n        });\n    }\n    /**\n     * Prior to zod@1.0.12 there was a bug in the\n     * inferred type of merged objects. Please\n     * upgrade if you are experiencing issues.\n     */\n    merge(merging) {\n        const merged = new ZodObject({\n            unknownKeys: merging._def.unknownKeys,\n            catchall: merging._def.catchall,\n            shape: () => ({\n                ...this._def.shape(),\n                ...merging._def.shape(),\n            }),\n            typeName: ZodFirstPartyTypeKind.ZodObject,\n        });\n        return merged;\n    }\n    // merge<\n    //   Incoming extends AnyZodObject,\n    //   Augmentation extends Incoming[\"shape\"],\n    //   NewOutput extends {\n    //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_output\"]\n    //       : k extends keyof Output\n    //       ? Output[k]\n    //       : never;\n    //   },\n    //   NewInput extends {\n    //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_input\"]\n    //       : k extends keyof Input\n    //       ? Input[k]\n    //       : never;\n    //   }\n    // >(\n    //   merging: Incoming\n    // ): ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"],\n    //   NewOutput,\n    //   NewInput\n    // > {\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    setKey(key, schema) {\n        return this.augment({ [key]: schema });\n    }\n    // merge<Incoming extends AnyZodObject>(\n    //   merging: Incoming\n    // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n    // ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"]\n    // > {\n    //   // const mergedShape = objectUtil.mergeShapes(\n    //   //   this._def.shape(),\n    //   //   merging._def.shape()\n    //   // );\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    catchall(index) {\n        return new ZodObject({\n            ...this._def,\n            catchall: index,\n        });\n    }\n    pick(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(mask)) {\n            if (mask[key] && this.shape[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    omit(mask) {\n        const shape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (!mask[key]) {\n                shape[key] = this.shape[key];\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    /**\n     * @deprecated\n     */\n    deepPartial() {\n        return deepPartialify(this);\n    }\n    partial(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            const fieldSchema = this.shape[key];\n            if (mask && !mask[key]) {\n                newShape[key] = fieldSchema;\n            }\n            else {\n                newShape[key] = fieldSchema.optional();\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    required(mask) {\n        const newShape = {};\n        for (const key of util.objectKeys(this.shape)) {\n            if (mask && !mask[key]) {\n                newShape[key] = this.shape[key];\n            }\n            else {\n                const fieldSchema = this.shape[key];\n                let newField = fieldSchema;\n                while (newField instanceof ZodOptional) {\n                    newField = newField._def.innerType;\n                }\n                newShape[key] = newField;\n            }\n        }\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    keyof() {\n        return createZodEnum(util.objectKeys(this.shape));\n    }\n}\nZodObject.create = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.strictCreate = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strict\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.lazycreate = (shape, params) => {\n    return new ZodObject({\n        shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const options = this._def.options;\n        function handleResults(results) {\n            // return first issue-free validation if it exists\n            for (const result of results) {\n                if (result.result.status === \"valid\") {\n                    return result.result;\n                }\n            }\n            for (const result of results) {\n                if (result.result.status === \"dirty\") {\n                    // add issues from dirty option\n                    ctx.common.issues.push(...result.ctx.common.issues);\n                    return result.result;\n                }\n            }\n            // return invalid\n            const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return Promise.all(options.map(async (option) => {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                return {\n                    result: await option._parseAsync({\n                        data: ctx.data,\n                        path: ctx.path,\n                        parent: childCtx,\n                    }),\n                    ctx: childCtx,\n                };\n            })).then(handleResults);\n        }\n        else {\n            let dirty = undefined;\n            const issues = [];\n            for (const option of options) {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                const result = option._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: childCtx,\n                });\n                if (result.status === \"valid\") {\n                    return result;\n                }\n                else if (result.status === \"dirty\" && !dirty) {\n                    dirty = { result, ctx: childCtx };\n                }\n                if (childCtx.common.issues.length) {\n                    issues.push(childCtx.common.issues);\n                }\n            }\n            if (dirty) {\n                ctx.common.issues.push(...dirty.ctx.common.issues);\n                return dirty.result;\n            }\n            const unionErrors = issues.map((issues) => new ZodError(issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n    }\n    get options() {\n        return this._def.options;\n    }\n}\nZodUnion.create = (types, params) => {\n    return new ZodUnion({\n        options: types,\n        typeName: ZodFirstPartyTypeKind.ZodUnion,\n        ...processCreateParams(params),\n    });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n//////////                                 //////////\n//////////      ZodDiscriminatedUnion      //////////\n//////////                                 //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n    if (type instanceof ZodLazy) {\n        return getDiscriminator(type.schema);\n    }\n    else if (type instanceof ZodEffects) {\n        return getDiscriminator(type.innerType());\n    }\n    else if (type instanceof ZodLiteral) {\n        return [type.value];\n    }\n    else if (type instanceof ZodEnum) {\n        return type.options;\n    }\n    else if (type instanceof ZodNativeEnum) {\n        // eslint-disable-next-line ban/ban\n        return util.objectValues(type.enum);\n    }\n    else if (type instanceof ZodDefault) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else if (type instanceof ZodUndefined) {\n        return [undefined];\n    }\n    else if (type instanceof ZodNull) {\n        return [null];\n    }\n    else if (type instanceof ZodOptional) {\n        return [undefined, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodNullable) {\n        return [null, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodBranded) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodReadonly) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodCatch) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else {\n        return [];\n    }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const discriminator = this.discriminator;\n        const discriminatorValue = ctx.data[discriminator];\n        const option = this.optionsMap.get(discriminatorValue);\n        if (!option) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union_discriminator,\n                options: Array.from(this.optionsMap.keys()),\n                path: [discriminator],\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return option._parseAsync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n        else {\n            return option._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n    }\n    get discriminator() {\n        return this._def.discriminator;\n    }\n    get options() {\n        return this._def.options;\n    }\n    get optionsMap() {\n        return this._def.optionsMap;\n    }\n    /**\n     * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n     * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n     * have a different value for each object in the union.\n     * @param discriminator the name of the discriminator property\n     * @param types an array of object schemas\n     * @param params\n     */\n    static create(discriminator, options, params) {\n        // Get all the valid discriminator values\n        const optionsMap = new Map();\n        // try {\n        for (const type of options) {\n            const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n            if (!discriminatorValues.length) {\n                throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n            }\n            for (const value of discriminatorValues) {\n                if (optionsMap.has(value)) {\n                    throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n                }\n                optionsMap.set(value, type);\n            }\n        }\n        return new ZodDiscriminatedUnion({\n            typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n            discriminator,\n            options,\n            optionsMap,\n            ...processCreateParams(params),\n        });\n    }\n}\nfunction mergeValues(a, b) {\n    const aType = getParsedType(a);\n    const bType = getParsedType(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n        const bKeys = util.objectKeys(b);\n        const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n        if (a.length !== b.length) {\n            return { valid: false };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    else {\n        return { valid: false };\n    }\n}\nexport class ZodIntersection extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const handleParsed = (parsedLeft, parsedRight) => {\n            if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n                return INVALID;\n            }\n            const merged = mergeValues(parsedLeft.value, parsedRight.value);\n            if (!merged.valid) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.invalid_intersection_types,\n                });\n                return INVALID;\n            }\n            if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n                status.dirty();\n            }\n            return { status: status.value, value: merged.data };\n        };\n        if (ctx.common.async) {\n            return Promise.all([\n                this._def.left._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n                this._def.right._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n            ]).then(([left, right]) => handleParsed(left, right));\n        }\n        else {\n            return handleParsed(this._def.left._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }), this._def.right._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }));\n        }\n    }\n}\nZodIntersection.create = (left, right, params) => {\n    return new ZodIntersection({\n        left: left,\n        right: right,\n        typeName: ZodFirstPartyTypeKind.ZodIntersection,\n        ...processCreateParams(params),\n    });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (ctx.data.length < this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_small,\n                minimum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            return INVALID;\n        }\n        const rest = this._def.rest;\n        if (!rest && ctx.data.length > this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_big,\n                maximum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            status.dirty();\n        }\n        const items = [...ctx.data]\n            .map((item, itemIndex) => {\n            const schema = this._def.items[itemIndex] || this._def.rest;\n            if (!schema)\n                return null;\n            return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n        })\n            .filter((x) => !!x); // filter nulls\n        if (ctx.common.async) {\n            return Promise.all(items).then((results) => {\n                return ParseStatus.mergeArray(status, results);\n            });\n        }\n        else {\n            return ParseStatus.mergeArray(status, items);\n        }\n    }\n    get items() {\n        return this._def.items;\n    }\n    rest(rest) {\n        return new ZodTuple({\n            ...this._def,\n            rest,\n        });\n    }\n}\nZodTuple.create = (schemas, params) => {\n    if (!Array.isArray(schemas)) {\n        throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n    }\n    return new ZodTuple({\n        items: schemas,\n        typeName: ZodFirstPartyTypeKind.ZodTuple,\n        rest: null,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodRecord extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const pairs = [];\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        for (const key in ctx.data) {\n            pairs.push({\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n                value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (ctx.common.async) {\n            return ParseStatus.mergeObjectAsync(status, pairs);\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get element() {\n        return this._def.valueType;\n    }\n    static create(first, second, third) {\n        if (second instanceof ZodType) {\n            return new ZodRecord({\n                keyType: first,\n                valueType: second,\n                typeName: ZodFirstPartyTypeKind.ZodRecord,\n                ...processCreateParams(third),\n            });\n        }\n        return new ZodRecord({\n            keyType: ZodString.create(),\n            valueType: first,\n            typeName: ZodFirstPartyTypeKind.ZodRecord,\n            ...processCreateParams(second),\n        });\n    }\n}\nexport class ZodMap extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.map) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.map,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n            return {\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n                value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n            };\n        });\n        if (ctx.common.async) {\n            const finalMap = new Map();\n            return Promise.resolve().then(async () => {\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    if (key.status === \"aborted\" || value.status === \"aborted\") {\n                        return INVALID;\n                    }\n                    if (key.status === \"dirty\" || value.status === \"dirty\") {\n                        status.dirty();\n                    }\n                    finalMap.set(key.value, value.value);\n                }\n                return { status: status.value, value: finalMap };\n            });\n        }\n        else {\n            const finalMap = new Map();\n            for (const pair of pairs) {\n                const key = pair.key;\n                const value = pair.value;\n                if (key.status === \"aborted\" || value.status === \"aborted\") {\n                    return INVALID;\n                }\n                if (key.status === \"dirty\" || value.status === \"dirty\") {\n                    status.dirty();\n                }\n                finalMap.set(key.value, value.value);\n            }\n            return { status: status.value, value: finalMap };\n        }\n    }\n}\nZodMap.create = (keyType, valueType, params) => {\n    return new ZodMap({\n        valueType,\n        keyType,\n        typeName: ZodFirstPartyTypeKind.ZodMap,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodSet extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.set) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.set,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const def = this._def;\n        if (def.minSize !== null) {\n            if (ctx.data.size < def.minSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minSize.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxSize !== null) {\n            if (ctx.data.size > def.maxSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxSize.message,\n                });\n                status.dirty();\n            }\n        }\n        const valueType = this._def.valueType;\n        function finalizeSet(elements) {\n            const parsedSet = new Set();\n            for (const element of elements) {\n                if (element.status === \"aborted\")\n                    return INVALID;\n                if (element.status === \"dirty\")\n                    status.dirty();\n                parsedSet.add(element.value);\n            }\n            return { status: status.value, value: parsedSet };\n        }\n        const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n        if (ctx.common.async) {\n            return Promise.all(elements).then((elements) => finalizeSet(elements));\n        }\n        else {\n            return finalizeSet(elements);\n        }\n    }\n    min(minSize, message) {\n        return new ZodSet({\n            ...this._def,\n            minSize: { value: minSize, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxSize, message) {\n        return new ZodSet({\n            ...this._def,\n            maxSize: { value: maxSize, message: errorUtil.toString(message) },\n        });\n    }\n    size(size, message) {\n        return this.min(size, message).max(size, message);\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodSet.create = (valueType, params) => {\n    return new ZodSet({\n        valueType,\n        minSize: null,\n        maxSize: null,\n        typeName: ZodFirstPartyTypeKind.ZodSet,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodFunction extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.validate = this.implement;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.function) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.function,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        function makeArgsIssue(args, error) {\n            return makeIssue({\n                data: args,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_arguments,\n                    argumentsError: error,\n                },\n            });\n        }\n        function makeReturnsIssue(returns, error) {\n            return makeIssue({\n                data: returns,\n                path: ctx.path,\n                errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_return_type,\n                    returnTypeError: error,\n                },\n            });\n        }\n        const params = { errorMap: ctx.common.contextualErrorMap };\n        const fn = ctx.data;\n        if (this._def.returns instanceof ZodPromise) {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(async function (...args) {\n                const error = new ZodError([]);\n                const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n                    error.addIssue(makeArgsIssue(args, e));\n                    throw error;\n                });\n                const result = await Reflect.apply(fn, this, parsedArgs);\n                const parsedReturns = await me._def.returns._def.type\n                    .parseAsync(result, params)\n                    .catch((e) => {\n                    error.addIssue(makeReturnsIssue(result, e));\n                    throw error;\n                });\n                return parsedReturns;\n            });\n        }\n        else {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(function (...args) {\n                const parsedArgs = me._def.args.safeParse(args, params);\n                if (!parsedArgs.success) {\n                    throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n                }\n                const result = Reflect.apply(fn, this, parsedArgs.data);\n                const parsedReturns = me._def.returns.safeParse(result, params);\n                if (!parsedReturns.success) {\n                    throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n                }\n                return parsedReturns.data;\n            });\n        }\n    }\n    parameters() {\n        return this._def.args;\n    }\n    returnType() {\n        return this._def.returns;\n    }\n    args(...items) {\n        return new ZodFunction({\n            ...this._def,\n            args: ZodTuple.create(items).rest(ZodUnknown.create()),\n        });\n    }\n    returns(returnType) {\n        return new ZodFunction({\n            ...this._def,\n            returns: returnType,\n        });\n    }\n    implement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    strictImplement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    static create(args, returns, params) {\n        return new ZodFunction({\n            args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n            returns: returns || ZodUnknown.create(),\n            typeName: ZodFirstPartyTypeKind.ZodFunction,\n            ...processCreateParams(params),\n        });\n    }\n}\nexport class ZodLazy extends ZodType {\n    get schema() {\n        return this._def.getter();\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const lazySchema = this._def.getter();\n        return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n    }\n}\nZodLazy.create = (getter, params) => {\n    return new ZodLazy({\n        getter: getter,\n        typeName: ZodFirstPartyTypeKind.ZodLazy,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodLiteral extends ZodType {\n    _parse(input) {\n        if (input.data !== this._def.value) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_literal,\n                expected: this._def.value,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n    get value() {\n        return this._def.value;\n    }\n}\nZodLiteral.create = (value, params) => {\n    return new ZodLiteral({\n        value: value,\n        typeName: ZodFirstPartyTypeKind.ZodLiteral,\n        ...processCreateParams(params),\n    });\n};\nfunction createZodEnum(values, params) {\n    return new ZodEnum({\n        values,\n        typeName: ZodFirstPartyTypeKind.ZodEnum,\n        ...processCreateParams(params),\n    });\n}\nexport class ZodEnum extends ZodType {\n    _parse(input) {\n        if (typeof input.data !== \"string\") {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(this._def.values);\n        }\n        if (!this._cache.has(input.data)) {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get options() {\n        return this._def.values;\n    }\n    get enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Values() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    extract(values, newDef = this._def) {\n        return ZodEnum.create(values, {\n            ...this._def,\n            ...newDef,\n        });\n    }\n    exclude(values, newDef = this._def) {\n        return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n            ...this._def,\n            ...newDef,\n        });\n    }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n    _parse(input) {\n        const nativeEnumValues = util.getValidEnumValues(this._def.values);\n        const ctx = this._getOrReturnCtx(input);\n        if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!this._cache) {\n            this._cache = new Set(util.getValidEnumValues(this._def.values));\n        }\n        if (!this._cache.has(input.data)) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get enum() {\n        return this._def.values;\n    }\n}\nZodNativeEnum.create = (values, params) => {\n    return new ZodNativeEnum({\n        values: values,\n        typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodPromise extends ZodType {\n    unwrap() {\n        return this._def.type;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.promise,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n        return OK(promisified.then((data) => {\n            return this._def.type.parseAsync(data, {\n                path: ctx.path,\n                errorMap: ctx.common.contextualErrorMap,\n            });\n        }));\n    }\n}\nZodPromise.create = (schema, params) => {\n    return new ZodPromise({\n        type: schema,\n        typeName: ZodFirstPartyTypeKind.ZodPromise,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodEffects extends ZodType {\n    innerType() {\n        return this._def.schema;\n    }\n    sourceType() {\n        return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n            ? this._def.schema.sourceType()\n            : this._def.schema;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const effect = this._def.effect || null;\n        const checkCtx = {\n            addIssue: (arg) => {\n                addIssueToContext(ctx, arg);\n                if (arg.fatal) {\n                    status.abort();\n                }\n                else {\n                    status.dirty();\n                }\n            },\n            get path() {\n                return ctx.path;\n            },\n        };\n        checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n        if (effect.type === \"preprocess\") {\n            const processed = effect.transform(ctx.data, checkCtx);\n            if (ctx.common.async) {\n                return Promise.resolve(processed).then(async (processed) => {\n                    if (status.value === \"aborted\")\n                        return INVALID;\n                    const result = await this._def.schema._parseAsync({\n                        data: processed,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                    if (result.status === \"aborted\")\n                        return INVALID;\n                    if (result.status === \"dirty\")\n                        return DIRTY(result.value);\n                    if (status.value === \"dirty\")\n                        return DIRTY(result.value);\n                    return result;\n                });\n            }\n            else {\n                if (status.value === \"aborted\")\n                    return INVALID;\n                const result = this._def.schema._parseSync({\n                    data: processed,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (result.status === \"aborted\")\n                    return INVALID;\n                if (result.status === \"dirty\")\n                    return DIRTY(result.value);\n                if (status.value === \"dirty\")\n                    return DIRTY(result.value);\n                return result;\n            }\n        }\n        if (effect.type === \"refinement\") {\n            const executeRefinement = (acc) => {\n                const result = effect.refinement(acc, checkCtx);\n                if (ctx.common.async) {\n                    return Promise.resolve(result);\n                }\n                if (result instanceof Promise) {\n                    throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n                }\n                return acc;\n            };\n            if (ctx.common.async === false) {\n                const inner = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inner.status === \"aborted\")\n                    return INVALID;\n                if (inner.status === \"dirty\")\n                    status.dirty();\n                // return value is ignored\n                executeRefinement(inner.value);\n                return { status: status.value, value: inner.value };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n                    if (inner.status === \"aborted\")\n                        return INVALID;\n                    if (inner.status === \"dirty\")\n                        status.dirty();\n                    return executeRefinement(inner.value).then(() => {\n                        return { status: status.value, value: inner.value };\n                    });\n                });\n            }\n        }\n        if (effect.type === \"transform\") {\n            if (ctx.common.async === false) {\n                const base = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (!isValid(base))\n                    return INVALID;\n                const result = effect.transform(base.value, checkCtx);\n                if (result instanceof Promise) {\n                    throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n                }\n                return { status: status.value, value: result };\n            }\n            else {\n                return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n                    if (!isValid(base))\n                        return INVALID;\n                    return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n                        status: status.value,\n                        value: result,\n                    }));\n                });\n            }\n        }\n        util.assertNever(effect);\n    }\n}\nZodEffects.create = (schema, effect, params) => {\n    return new ZodEffects({\n        schema,\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        effect,\n        ...processCreateParams(params),\n    });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n    return new ZodEffects({\n        schema,\n        effect: { type: \"preprocess\", transform: preprocess },\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        ...processCreateParams(params),\n    });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.undefined) {\n            return OK(undefined);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodOptional.create = (type, params) => {\n    return new ZodOptional({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodOptional,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNullable extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.null) {\n            return OK(null);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodNullable.create = (type, params) => {\n    return new ZodNullable({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodNullable,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodDefault extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        let data = ctx.data;\n        if (ctx.parsedType === ZodParsedType.undefined) {\n            data = this._def.defaultValue();\n        }\n        return this._def.innerType._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    removeDefault() {\n        return this._def.innerType;\n    }\n}\nZodDefault.create = (type, params) => {\n    return new ZodDefault({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodDefault,\n        defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodCatch extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        // newCtx is used to not collect issues from inner types in ctx\n        const newCtx = {\n            ...ctx,\n            common: {\n                ...ctx.common,\n                issues: [],\n            },\n        };\n        const result = this._def.innerType._parse({\n            data: newCtx.data,\n            path: newCtx.path,\n            parent: {\n                ...newCtx,\n            },\n        });\n        if (isAsync(result)) {\n            return result.then((result) => {\n                return {\n                    status: \"valid\",\n                    value: result.status === \"valid\"\n                        ? result.value\n                        : this._def.catchValue({\n                            get error() {\n                                return new ZodError(newCtx.common.issues);\n                            },\n                            input: newCtx.data,\n                        }),\n                };\n            });\n        }\n        else {\n            return {\n                status: \"valid\",\n                value: result.status === \"valid\"\n                    ? result.value\n                    : this._def.catchValue({\n                        get error() {\n                            return new ZodError(newCtx.common.issues);\n                        },\n                        input: newCtx.data,\n                    }),\n            };\n        }\n    }\n    removeCatch() {\n        return this._def.innerType;\n    }\n}\nZodCatch.create = (type, params) => {\n    return new ZodCatch({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodCatch,\n        catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n        ...processCreateParams(params),\n    });\n};\nexport class ZodNaN extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.nan) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.nan,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n}\nZodNaN.create = (params) => {\n    return new ZodNaN({\n        typeName: ZodFirstPartyTypeKind.ZodNaN,\n        ...processCreateParams(params),\n    });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const data = ctx.data;\n        return this._def.type._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    unwrap() {\n        return this._def.type;\n    }\n}\nexport class ZodPipeline extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.common.async) {\n            const handleAsync = async () => {\n                const inResult = await this._def.in._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inResult.status === \"aborted\")\n                    return INVALID;\n                if (inResult.status === \"dirty\") {\n                    status.dirty();\n                    return DIRTY(inResult.value);\n                }\n                else {\n                    return this._def.out._parseAsync({\n                        data: inResult.value,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                }\n            };\n            return handleAsync();\n        }\n        else {\n            const inResult = this._def.in._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n            if (inResult.status === \"aborted\")\n                return INVALID;\n            if (inResult.status === \"dirty\") {\n                status.dirty();\n                return {\n                    status: \"dirty\",\n                    value: inResult.value,\n                };\n            }\n            else {\n                return this._def.out._parseSync({\n                    data: inResult.value,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n            }\n        }\n    }\n    static create(a, b) {\n        return new ZodPipeline({\n            in: a,\n            out: b,\n            typeName: ZodFirstPartyTypeKind.ZodPipeline,\n        });\n    }\n}\nexport class ZodReadonly extends ZodType {\n    _parse(input) {\n        const result = this._def.innerType._parse(input);\n        const freeze = (data) => {\n            if (isValid(data)) {\n                data.value = Object.freeze(data.value);\n            }\n            return data;\n        };\n        return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodReadonly.create = (type, params) => {\n    return new ZodReadonly({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodReadonly,\n        ...processCreateParams(params),\n    });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n//////////                    //////////\n//////////      z.custom      //////////\n//////////                    //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n    const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n    const p2 = typeof p === \"string\" ? { message: p } : p;\n    return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n    if (check)\n        return ZodAny.create().superRefine((data, ctx) => {\n            const r = check(data);\n            if (r instanceof Promise) {\n                return r.then((r) => {\n                    if (!r) {\n                        const params = cleanParams(_params, data);\n                        const _fatal = params.fatal ?? fatal ?? true;\n                        ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n                    }\n                });\n            }\n            if (!r) {\n                const params = cleanParams(_params, data);\n                const _fatal = params.fatal ?? fatal ?? true;\n                ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n            }\n            return;\n        });\n    return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n    object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n    ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n    ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n    ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n    ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n    ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n    ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n    ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n    ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n    ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n    ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n    ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n    ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n    ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n    ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n    ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n    ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n    ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n    ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n    ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n    ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n    ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n    ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n    ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n    ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n    ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n    ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n    ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n    ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n    ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n    ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n    ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n    ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n    ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n    ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n    ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n    ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n    constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n    message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n    string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n    number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n    boolean: ((arg) => ZodBoolean.create({\n        ...arg,\n        coerce: true,\n    })),\n    bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n    date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n", "export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n", "import * as z from \"./v3/external.js\";\nexport * from \"./v3/external.js\";\nexport { z };\nexport default z;\n", "/// <reference types=\"node\"/>\n/*!\n * node-progress\n * Copyright(c) 2011 TJ Holowaychuk <tj@vision-media.ca>\n * MIT Licensed\n */\n\n/**\n * These are keys in the options object you can pass to the progress bar along with total as seen in the example above.\n */\nexport interface ProgressBarOptions {\n  /**\n   * Total number of ticks to complete.\n   */\n  total: number;\n\n  /**\n   * current completed index\n   */\n  curr?: number | undefined;\n\n  /**\n   * head character defaulting to complete character\n   */\n  head?: string | undefined;\n\n  /**\n   * The displayed width of the progress bar defaulting to total.\n   */\n  width?: number | undefined;\n\n  /**\n   * minimum time between updates in milliseconds defaulting to 16\n   */\n  renderThrottle?: number | undefined;\n\n  /**\n   * The output stream defaulting to stderr.\n   */\n  stream?: NodeJS.WritableStream | undefined;\n\n  /**\n   * Completion character defaulting to \"=\".\n   */\n  complete?: string | undefined;\n\n  /**\n   * Incomplete character defaulting to \"-\".\n   */\n  incomplete?: string | undefined;\n\n  /**\n   * Option to clear the bar on completion defaulting to false.\n   */\n  clear?: boolean | undefined;\n\n  /**\n   * Optional function to call when the progress bar completes.\n   */\n  callback?: Function | undefined;\n}\n\nexport interface ProgressBarInstance {\n  stream: NodeJS.WritableStream;\n  fmt: string;\n  curr: number;\n  total: number;\n  width: number;\n  clear: boolean;\n  chars: {\n    complete: string;\n    incomplete: string;\n    head: string;\n  };\n  renderThrottle: number;\n  lastRender: number;\n  callback: Function;\n  tokens: { [key: string]: any };\n  lastDraw: string;\n  complete: boolean;\n  start?: Date;\n\n  tick(tokens?: any): void;\n  tick(count?: number, tokens?: any): void;\n  render(tokens?: any, force?: boolean): void;\n  update(ratio: number, tokens?: any): void;\n  interrupt(message: string): void;\n  terminate(): void;\n}\n\ninterface ProgressBarConstructor {\n  new (format: string, total: number): ProgressBarInstance;\n  new (format: string, options: ProgressBarOptions): ProgressBarInstance;\n  prototype: ProgressBarInstance;\n}\n\n/**\n * Initialize a `ProgressBar` with the given `fmt` string and `options` or\n * `total`.\n *\n * Options:\n *\n *   - `curr` current completed index\n *   - `total` total number of ticks to complete\n *   - `width` the displayed width of the progress bar defaulting to total\n *   - `stream` the output stream defaulting to stderr\n *   - `head` head character defaulting to complete character\n *   - `complete` completion character defaulting to \"=\"\n *   - `incomplete` incomplete character defaulting to \"-\"\n *   - `renderThrottle` minimum time between updates in milliseconds defaulting to 16\n *   - `callback` optional function to call when the progress bar completes\n *   - `clear` will clear the progress bar upon termination\n *\n * Tokens:\n *\n *   - `:bar` the progress bar itself\n *   - `:current` current tick number\n *   - `:total` total ticks\n *   - `:elapsed` time elapsed in seconds\n *   - `:percent` completion percentage\n *   - `:eta` eta in seconds\n *   - `:rate` rate of ticks per second\n *\n * @param {string} fmt\n * @param {object|number} options or total\n * @api public\n */\nconst ProgressBar: ProgressBarConstructor = function (\n  this: ProgressBarInstance,\n  fmt: string,\n  options: ProgressBarOptions | number,\n) {\n  this.stream = (options as ProgressBarOptions).stream || process.stderr;\n\n  if (typeof options == \"number\") {\n    var total = options;\n    options = {} as ProgressBarOptions;\n    (options as ProgressBarOptions).total = total;\n  } else {\n    options = options || ({} as ProgressBarOptions);\n    if (\"string\" != typeof fmt) throw new Error(\"format required\");\n    if (\"number\" != typeof (options as ProgressBarOptions).total)\n      throw new Error(\"total required\");\n  }\n\n  this.fmt = fmt;\n  this.curr = (options as ProgressBarOptions).curr || 0;\n  this.total = (options as ProgressBarOptions).total;\n  this.width = (options as ProgressBarOptions).width || this.total;\n  this.clear = (options as ProgressBarOptions).clear || false;\n  this.chars = {\n    complete: (options as ProgressBarOptions).complete || \"=\",\n    incomplete: (options as ProgressBarOptions).incomplete || \"-\",\n    head:\n      (options as ProgressBarOptions).head ||\n      (options as ProgressBarOptions).complete ||\n      \"=\",\n  };\n  this.renderThrottle =\n    (options as ProgressBarOptions).renderThrottle !== 0\n      ? (options as ProgressBarOptions).renderThrottle || 16\n      : 0;\n  this.lastRender = -Infinity;\n  this.callback = (options as ProgressBarOptions).callback || function () {};\n  this.tokens = {};\n  this.lastDraw = \"\";\n  this.complete = false;\n} as any;\n\n/**\n * \"tick\" the progress bar with optional `len` and optional `tokens`.\n *\n * @param {number|object} len or tokens\n * @param {object} tokens\n * @api public\n */\nProgressBar.prototype.tick = function (\n  this: ProgressBarInstance,\n  len?: number | any,\n  tokens?: any,\n): void {\n  if (len !== 0) len = len || 1;\n\n  // swap tokens\n  if (\"object\" == typeof len) ((tokens = len), (len = 1));\n  if (tokens) this.tokens = tokens;\n\n  // start time for eta\n  if (0 == this.curr) this.start = new Date();\n\n  this.curr += len;\n\n  // try to render\n  this.render();\n\n  // progress complete\n  if (this.curr >= this.total) {\n    this.render(undefined, true);\n    this.complete = true;\n    this.terminate();\n    this.callback(this);\n    return;\n  }\n};\n\n/**\n * Method to render the progress bar with optional `tokens` to place in the\n * progress bar's `fmt` field.\n *\n * @param {object} tokens\n * @api public\n */\nProgressBar.prototype.render = function (\n  this: ProgressBarInstance,\n  tokens?: any,\n  force?: boolean,\n): void {\n  force = force !== undefined ? force : false;\n  if (tokens) this.tokens = tokens;\n\n  if (!(this.stream as any).isTTY) return;\n\n  var now = Date.now();\n  var delta = now - this.lastRender;\n  if (!force && delta < this.renderThrottle) {\n    return;\n  } else {\n    this.lastRender = now;\n  }\n\n  var ratio = this.curr / this.total;\n  ratio = Math.min(Math.max(ratio, 0), 1);\n\n  var percent = Math.floor(ratio * 100);\n  var incomplete: string, complete: string, completeLength: number;\n  var elapsed = this.start ? new Date().getTime() - this.start.getTime() : 0;\n  var eta = percent == 100 ? 0 : elapsed * (this.total / this.curr - 1);\n  var rate = this.curr / (elapsed / 1000);\n\n  /* populate the bar template with percentages and timestamps */\n  var str = this.fmt\n    .replace(\":current\", this.curr.toString())\n    .replace(\":total\", this.total.toString())\n    .replace(\":elapsed\", isNaN(elapsed) ? \"0.0\" : (elapsed / 1000).toFixed(1))\n    .replace(\n      \":eta\",\n      isNaN(eta) || !isFinite(eta) ? \"0.0\" : (eta / 1000).toFixed(1),\n    )\n    .replace(\":percent\", percent.toFixed(0) + \"%\")\n    .replace(\":rate\", Math.round(rate).toString());\n\n  /* compute the available space (non-zero) for the bar */\n  var availableSpace = Math.max(\n    0,\n    (this.stream as any).columns - str.replace(\":bar\", \"\").length,\n  );\n  if (availableSpace && process.platform === \"win32\") {\n    availableSpace = availableSpace - 1;\n  }\n\n  var width = Math.min(this.width, availableSpace);\n\n  /* TODO: the following assumes the user has one ':bar' token */\n  completeLength = Math.round(width * ratio);\n  complete = Array(Math.max(0, completeLength + 1)).join(this.chars.complete);\n  incomplete = Array(Math.max(0, width - completeLength + 1)).join(\n    this.chars.incomplete,\n  );\n\n  /* add head to the complete string */\n  if (completeLength > 0) complete = complete.slice(0, -1) + this.chars.head;\n\n  /* fill in the actual progress bar */\n  str = str.replace(\":bar\", complete + incomplete);\n\n  /* replace the extra tokens */\n  if (this.tokens)\n    for (var key in this.tokens) str = str.replace(\":\" + key, this.tokens[key]);\n\n  if (this.lastDraw !== str) {\n    (this.stream as any).cursorTo(0);\n    this.stream.write(str);\n    (this.stream as any).clearLine(1);\n    this.lastDraw = str;\n  }\n};\n\n/**\n * \"update\" the progress bar to represent an exact percentage.\n * The ratio (between 0 and 1) specified will be multiplied by `total` and\n * floored, representing the closest available \"tick.\" For example, if a\n * progress bar has a length of 3 and `update(0.5)` is called, the progress\n * will be set to 1.\n *\n * A ratio of 0.5 will attempt to set the progress to halfway.\n *\n * @param {number} ratio The ratio (between 0 and 1 inclusive) to set the\n *   overall completion to.\n * @api public\n */\nProgressBar.prototype.update = function (\n  this: ProgressBarInstance,\n  ratio: number,\n  tokens?: any,\n): void {\n  var goal = Math.floor(ratio * this.total);\n  var delta = goal - this.curr;\n\n  this.tick(delta, tokens);\n};\n\n/**\n * \"interrupt\" the progress bar and write a message above it.\n * @param {string} message The message to write.\n * @api public\n */\nProgressBar.prototype.interrupt = function (\n  this: ProgressBarInstance,\n  message: string,\n): void {\n  // clear the current line\n  (this.stream as any).clearLine();\n  // move the cursor to the start of the line\n  (this.stream as any).cursorTo(0);\n  // write the message text\n  this.stream.write(message);\n  // terminate the line after writing the message\n  this.stream.write(\"\\n\");\n  // re-display the progress bar with its lastDraw\n  this.stream.write(this.lastDraw);\n};\n\n/**\n * Terminates a progress bar.\n *\n * @api public\n */\nProgressBar.prototype.terminate = function (this: ProgressBarInstance): void {\n  if (this.clear) {\n    if ((this.stream as any).clearLine) {\n      (this.stream as any).clearLine();\n      (this.stream as any).cursorTo(0);\n    }\n  } else {\n    this.stream.write(\"\\n\");\n  }\n};\n\nexport default ProgressBar;\n", "const copyProperty = (to, from, property, ignoreNonConfigurable) => {\n\t// `Function#length` should reflect the parameters of `to` not `from` since we keep its body.\n\t// `Function#prototype` is non-writable and non-configurable so can never be modified.\n\tif (property === 'length' || property === 'prototype') {\n\t\treturn;\n\t}\n\n\t// `Function#arguments` and `Function#caller` should not be copied. They were reported to be present in `Reflect.ownKeys` for some devices in React Native (#41), so we explicitly ignore them here.\n\tif (property === 'arguments' || property === 'caller') {\n\t\treturn;\n\t}\n\n\tconst toDescriptor = Object.getOwnPropertyDescriptor(to, property);\n\tconst fromDescriptor = Object.getOwnPropertyDescriptor(from, property);\n\n\tif (!canCopyProperty(toDescriptor, fromDescriptor) && ignoreNonConfigurable) {\n\t\treturn;\n\t}\n\n\tObject.defineProperty(to, property, fromDescriptor);\n};\n\n// `Object.defineProperty()` throws if the property exists, is not configurable and either:\n// - one its descriptors is changed\n// - it is non-writable and its value is changed\nconst canCopyProperty = function (toDescriptor, fromDescriptor) {\n\treturn toDescriptor === undefined || toDescriptor.configurable || (\n\t\ttoDescriptor.writable === fromDescriptor.writable\n\t\t&& toDescriptor.enumerable === fromDescriptor.enumerable\n\t\t&& toDescriptor.configurable === fromDescriptor.configurable\n\t\t&& (toDescriptor.writable || toDescriptor.value === fromDescriptor.value)\n\t);\n};\n\nconst changePrototype = (to, from) => {\n\tconst fromPrototype = Object.getPrototypeOf(from);\n\tif (fromPrototype === Object.getPrototypeOf(to)) {\n\t\treturn;\n\t}\n\n\tObject.setPrototypeOf(to, fromPrototype);\n};\n\nconst wrappedToString = (withName, fromBody) => `/* Wrapped ${withName}*/\\n${fromBody}`;\n\nconst toStringDescriptor = Object.getOwnPropertyDescriptor(Function.prototype, 'toString');\nconst toStringName = Object.getOwnPropertyDescriptor(Function.prototype.toString, 'name');\n\n// We call `from.toString()` early (not lazily) to ensure `from` can be garbage collected.\n// We use `bind()` instead of a closure for the same reason.\n// Calling `from.toString()` early also allows caching it in case `to.toString()` is called several times.\nconst changeToString = (to, from, name) => {\n\tconst withName = name === '' ? '' : `with ${name.trim()}() `;\n\tconst newToString = wrappedToString.bind(null, withName, from.toString());\n\t// Ensure `to.toString.toString` is non-enumerable and has the same `same`\n\tObject.defineProperty(newToString, 'name', toStringName);\n\tconst {writable, enumerable, configurable} = toStringDescriptor; // We destructue to avoid a potential `get` descriptor.\n\tObject.defineProperty(to, 'toString', {value: newToString, writable, enumerable, configurable});\n};\n\nexport default function mimicFunction(to, from, {ignoreNonConfigurable = false} = {}) {\n\tconst {name} = to;\n\n\tfor (const property of Reflect.ownKeys(from)) {\n\t\tcopyProperty(to, from, property, ignoreNonConfigurable);\n\t}\n\n\tchangePrototype(to, from);\n\tchangeToString(to, from, name);\n\n\treturn to;\n}\n", "import mimicFunction from 'mimic-function';\n\nconst calledFunctions = new WeakMap();\n\nconst onetime = (function_, options = {}) => {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError('Expected a function');\n\t}\n\n\tlet returnValue;\n\tlet callCount = 0;\n\tconst functionName = function_.displayName || function_.name || '<anonymous>';\n\n\tconst onetime = function (...arguments_) {\n\t\tcalledFunctions.set(onetime, ++callCount);\n\n\t\tif (callCount === 1) {\n\t\t\treturnValue = function_.apply(this, arguments_);\n\t\t\tfunction_ = undefined;\n\t\t} else if (options.throw === true) {\n\t\t\tthrow new Error(`Function \\`${functionName}\\` can only be called once`);\n\t\t}\n\n\t\treturn returnValue;\n\t};\n\n\tmimicFunction(onetime, function_);\n\tcalledFunctions.set(onetime, callCount);\n\n\treturn onetime;\n};\n\nonetime.callCount = function_ => {\n\tif (!calledFunctions.has(function_)) {\n\t\tthrow new Error(`The given function \\`${function_.name}\\` is not wrapped by the \\`onetime\\` package`);\n\t}\n\n\treturn calledFunctions.get(function_);\n};\n\nexport default onetime;\n", "/**\n * This is not the set of all possible signals.\n *\n * It IS, however, the set of all signals that trigger\n * an exit on either Linux or BSD systems.  Linux is a\n * superset of the signal names supported on BSD, and\n * the unknown signals just fail to register, so we can\n * catch that easily enough.\n *\n * Windows signals are a different set, since there are\n * signals that terminate Windows processes, but don't\n * terminate (or don't even exist) on Posix systems.\n *\n * Don't bother with SIGKILL.  It's uncatchable, which\n * means that we can't fire any callbacks anyway.\n *\n * If a user does happen to register a handler on a non-\n * fatal signal like SIGWINCH or something, and then\n * exit, it'll end up firing `process.emit('exit')`, so\n * the handler will be fired anyway.\n *\n * SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n * artificially, inherently leave the process in a\n * state from which it is not safe to try and enter JS\n * listeners.\n */\nexport const signals: NodeJS.Signals[] = []\nsignals.push('SIGHUP', 'SIGINT', 'SIGTERM')\n\nif (process.platform !== 'win32') {\n  signals.push(\n    'SIGALRM',\n    'SIGABRT',\n    'SIGVTALRM',\n    'SIGXCPU',\n    'SIGXFSZ',\n    'SIGUSR2',\n    'SIGTRAP',\n    'SIGSYS',\n    'SIGQUIT',\n    'SIGIOT'\n    // should detect profiler and enable/disable accordingly.\n    // see #21\n    // 'SIGPROF'\n  )\n}\n\nif (process.platform === 'linux') {\n  signals.push('SIGIO', 'SIGPOLL', 'SIGPWR', 'SIGSTKFLT')\n}\n", "// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nimport { signals } from './signals.js'\nexport { signals }\n\n// just a loosened process type so we can do some evil things\ntype ProcessRE = NodeJS.Process & {\n  reallyExit: (code?: number | undefined | null) => any\n  emit: (ev: string, ...a: any[]) => any\n}\n\nconst processOk = (process: any): process is ProcessRE =>\n  !!process &&\n  typeof process === 'object' &&\n  typeof process.removeListener === 'function' &&\n  typeof process.emit === 'function' &&\n  typeof process.reallyExit === 'function' &&\n  typeof process.listeners === 'function' &&\n  typeof process.kill === 'function' &&\n  typeof process.pid === 'number' &&\n  typeof process.on === 'function'\n\nconst kExitEmitter = Symbol.for('signal-exit emitter')\nconst global: typeof globalThis & { [kExitEmitter]?: Emitter } = globalThis\nconst ObjectDefineProperty = Object.defineProperty.bind(Object)\n\n/**\n * A function that takes an exit code and signal as arguments\n *\n * In the case of signal exits *only*, a return value of true\n * will indicate that the signal is being handled, and we should\n * not synthetically exit with the signal we received. Regardless\n * of the handler return value, the handler is unloaded when an\n * otherwise fatal signal is received, so you get exactly 1 shot\n * at it, unless you add another onExit handler at that point.\n *\n * In the case of numeric code exits, we may already have committed\n * to exiting the process, for example via a fatal exception or\n * unhandled promise rejection, so it is impossible to stop safely.\n */\nexport type Handler = (\n  code: number | null | undefined,\n  signal: NodeJS.Signals | null\n) => true | void\ntype ExitEvent = 'afterExit' | 'exit'\ntype Emitted = { [k in ExitEvent]: boolean }\ntype Listeners = { [k in ExitEvent]: Handler[] }\n\n// teeny special purpose ee\nclass Emitter {\n  emitted: Emitted = {\n    afterExit: false,\n    exit: false,\n  }\n\n  listeners: Listeners = {\n    afterExit: [],\n    exit: [],\n  }\n\n  count: number = 0\n  id: number = Math.random()\n\n  constructor() {\n    if (global[kExitEmitter]) {\n      return global[kExitEmitter]\n    }\n    ObjectDefineProperty(global, kExitEmitter, {\n      value: this,\n      writable: false,\n      enumerable: false,\n      configurable: false,\n    })\n  }\n\n  on(ev: ExitEvent, fn: Handler) {\n    this.listeners[ev].push(fn)\n  }\n\n  removeListener(ev: ExitEvent, fn: Handler) {\n    const list = this.listeners[ev]\n    const i = list.indexOf(fn)\n    /* c8 ignore start */\n    if (i === -1) {\n      return\n    }\n    /* c8 ignore stop */\n    if (i === 0 && list.length === 1) {\n      list.length = 0\n    } else {\n      list.splice(i, 1)\n    }\n  }\n\n  emit(\n    ev: ExitEvent,\n    code: number | null | undefined,\n    signal: NodeJS.Signals | null\n  ): boolean {\n    if (this.emitted[ev]) {\n      return false\n    }\n    this.emitted[ev] = true\n    let ret: boolean = false\n    for (const fn of this.listeners[ev]) {\n      ret = fn(code, signal) === true || ret\n    }\n    if (ev === 'exit') {\n      ret = this.emit('afterExit', code, signal) || ret\n    }\n    return ret\n  }\n}\n\nabstract class SignalExitBase {\n  abstract onExit(cb: Handler, opts?: { alwaysLast?: boolean }): () => void\n  abstract load(): void\n  abstract unload(): void\n}\n\nconst signalExitWrap = <T extends SignalExitBase>(handler: T) => {\n  return {\n    onExit(cb: Handler, opts?: { alwaysLast?: boolean }) {\n      return handler.onExit(cb, opts)\n    },\n    load() {\n      return handler.load()\n    },\n    unload() {\n      return handler.unload()\n    },\n  }\n}\n\nclass SignalExitFallback extends SignalExitBase {\n  onExit() {\n    return () => {}\n  }\n  load() {}\n  unload() {}\n}\n\nclass SignalExit extends SignalExitBase {\n  // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n  // so use a supported signal instead\n  /* c8 ignore start */\n  #hupSig = process.platform === 'win32' ? 'SIGINT' : 'SIGHUP'\n  /* c8 ignore stop */\n  #emitter = new Emitter()\n  #process: ProcessRE\n  #originalProcessEmit: ProcessRE['emit']\n  #originalProcessReallyExit: ProcessRE['reallyExit']\n\n  #sigListeners: { [k in NodeJS.Signals]?: () => void } = {}\n  #loaded: boolean = false\n\n  constructor(process: ProcessRE) {\n    super()\n    this.#process = process\n    // { <signal>: <listener fn>, ... }\n    this.#sigListeners = {}\n    for (const sig of signals) {\n      this.#sigListeners[sig] = () => {\n        // If there are no other listeners, an exit is coming!\n        // Simplest way: remove us and then re-send the signal.\n        // We know that this will kill the process, so we can\n        // safely emit now.\n        const listeners = this.#process.listeners(sig)\n        let { count } = this.#emitter\n        // This is a workaround for the fact that signal-exit v3 and signal\n        // exit v4 are not aware of each other, and each will attempt to let\n        // the other handle it, so neither of them do. To correct this, we\n        // detect if we're the only handler *except* for previous versions\n        // of signal-exit, and increment by the count of listeners it has\n        // created.\n        /* c8 ignore start */\n        const p = process as unknown as {\n          __signal_exit_emitter__?: { count: number }\n        }\n        if (\n          typeof p.__signal_exit_emitter__ === 'object' &&\n          typeof p.__signal_exit_emitter__.count === 'number'\n        ) {\n          count += p.__signal_exit_emitter__.count\n        }\n        /* c8 ignore stop */\n        if (listeners.length === count) {\n          this.unload()\n          const ret = this.#emitter.emit('exit', null, sig)\n          /* c8 ignore start */\n          const s = sig === 'SIGHUP' ? this.#hupSig : sig\n          if (!ret) process.kill(process.pid, s)\n          /* c8 ignore stop */\n        }\n      }\n    }\n\n    this.#originalProcessReallyExit = process.reallyExit\n    this.#originalProcessEmit = process.emit\n  }\n\n  onExit(cb: Handler, opts?: { alwaysLast?: boolean }) {\n    /* c8 ignore start */\n    if (!processOk(this.#process)) {\n      return () => {}\n    }\n    /* c8 ignore stop */\n\n    if (this.#loaded === false) {\n      this.load()\n    }\n\n    const ev = opts?.alwaysLast ? 'afterExit' : 'exit'\n    this.#emitter.on(ev, cb)\n    return () => {\n      this.#emitter.removeListener(ev, cb)\n      if (\n        this.#emitter.listeners['exit'].length === 0 &&\n        this.#emitter.listeners['afterExit'].length === 0\n      ) {\n        this.unload()\n      }\n    }\n  }\n\n  load() {\n    if (this.#loaded) {\n      return\n    }\n    this.#loaded = true\n\n    // This is the number of onSignalExit's that are in play.\n    // It's important so that we can count the correct number of\n    // listeners on signals, and don't wait for the other one to\n    // handle it instead of us.\n    this.#emitter.count += 1\n\n    for (const sig of signals) {\n      try {\n        const fn = this.#sigListeners[sig]\n        if (fn) this.#process.on(sig, fn)\n      } catch (_) {}\n    }\n\n    this.#process.emit = (ev: string, ...a: any[]) => {\n      return this.#processEmit(ev, ...a)\n    }\n    this.#process.reallyExit = (code?: number | null | undefined) => {\n      return this.#processReallyExit(code)\n    }\n  }\n\n  unload() {\n    if (!this.#loaded) {\n      return\n    }\n    this.#loaded = false\n\n    signals.forEach(sig => {\n      const listener = this.#sigListeners[sig]\n      /* c8 ignore start */\n      if (!listener) {\n        throw new Error('Listener not defined for signal: ' + sig)\n      }\n      /* c8 ignore stop */\n      try {\n        this.#process.removeListener(sig, listener)\n        /* c8 ignore start */\n      } catch (_) {}\n      /* c8 ignore stop */\n    })\n    this.#process.emit = this.#originalProcessEmit\n    this.#process.reallyExit = this.#originalProcessReallyExit\n    this.#emitter.count -= 1\n  }\n\n  #processReallyExit(code?: number | null | undefined) {\n    /* c8 ignore start */\n    if (!processOk(this.#process)) {\n      return 0\n    }\n    this.#process.exitCode = code || 0\n    /* c8 ignore stop */\n\n    this.#emitter.emit('exit', this.#process.exitCode, null)\n    return this.#originalProcessReallyExit.call(\n      this.#process,\n      this.#process.exitCode\n    )\n  }\n\n  #processEmit(ev: string, ...args: any[]): any {\n    const og = this.#originalProcessEmit\n    if (ev === 'exit' && processOk(this.#process)) {\n      if (typeof args[0] === 'number') {\n        this.#process.exitCode = args[0]\n        /* c8 ignore start */\n      }\n      /* c8 ignore start */\n      const ret = og.call(this.#process, ev, ...args)\n      /* c8 ignore start */\n      this.#emitter.emit('exit', this.#process.exitCode, null)\n      /* c8 ignore stop */\n      return ret\n    } else {\n      return og.call(this.#process, ev, ...args)\n    }\n  }\n}\n\nconst process = globalThis.process\n// wrap so that we call the method on the actual handler, without\n// exporting it directly.\nexport const {\n  /**\n   * Called when the process is exiting, whether via signal, explicit\n   * exit, or running out of stuff to do.\n   *\n   * If the global process object is not suitable for instrumentation,\n   * then this will be a no-op.\n   *\n   * Returns a function that may be used to unload signal-exit.\n   */\n  onExit,\n\n  /**\n   * Load the listeners.  Likely you never need to call this, unless\n   * doing a rather deep integration with signal-exit functionality.\n   * Mostly exposed for the benefit of testing.\n   *\n   * @internal\n   */\n  load,\n\n  /**\n   * Unload the listeners.  Likely you never need to call this, unless\n   * doing a rather deep integration with signal-exit functionality.\n   * Mostly exposed for the benefit of testing.\n   *\n   * @internal\n   */\n  unload,\n} = signalExitWrap(\n  processOk(process) ? new SignalExit(process) : new SignalExitFallback()\n)\n", "import process from 'node:process';\nimport onetime from 'onetime';\nimport {onExit} from 'signal-exit';\n\nconst terminal = process.stderr.isTTY\n\t? process.stderr\n\t: (process.stdout.isTTY ? process.stdout : undefined);\n\nconst restoreCursor = terminal ? onetime(() => {\n\tonExit(() => {\n\t\tterminal.write('\\u001B[?25h');\n\t}, {alwaysLast: true});\n}) : () => {};\n\nexport default restoreCursor;\n", "import process from 'node:process';\nimport restoreCursor from 'restore-cursor';\n\nlet isHidden = false;\n\nconst cliCursor = {};\n\ncliCursor.show = (writableStream = process.stderr) => {\n\tif (!writableStream.isTTY) {\n\t\treturn;\n\t}\n\n\tisHidden = false;\n\twritableStream.write('\\u001B[?25h');\n};\n\ncliCursor.hide = (writableStream = process.stderr) => {\n\tif (!writableStream.isTTY) {\n\t\treturn;\n\t}\n\n\trestoreCursor();\n\tisHidden = true;\n\twritableStream.write('\\u001B[?25l');\n};\n\ncliCursor.toggle = (force, writableStream) => {\n\tif (force !== undefined) {\n\t\tisHidden = force;\n\t}\n\n\tif (isHidden) {\n\t\tcliCursor.show(writableStream);\n\t} else {\n\t\tcliCursor.hide(writableStream);\n\t}\n};\n\nexport default cliCursor;\n", "{\n\t\"dots\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u280B\",\n\t\t\t\"\u2819\",\n\t\t\t\"\u2839\",\n\t\t\t\"\u2838\",\n\t\t\t\"\u283C\",\n\t\t\t\"\u2834\",\n\t\t\t\"\u2826\",\n\t\t\t\"\u2827\",\n\t\t\t\"\u2807\",\n\t\t\t\"\u280F\"\n\t\t]\n\t},\n\t\"dots2\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u28FE\",\n\t\t\t\"\u28FD\",\n\t\t\t\"\u28FB\",\n\t\t\t\"\u28BF\",\n\t\t\t\"\u287F\",\n\t\t\t\"\u28DF\",\n\t\t\t\"\u28EF\",\n\t\t\t\"\u28F7\"\n\t\t]\n\t},\n\t\"dots3\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u280B\",\n\t\t\t\"\u2819\",\n\t\t\t\"\u281A\",\n\t\t\t\"\u281E\",\n\t\t\t\"\u2816\",\n\t\t\t\"\u2826\",\n\t\t\t\"\u2834\",\n\t\t\t\"\u2832\",\n\t\t\t\"\u2833\",\n\t\t\t\"\u2813\"\n\t\t]\n\t},\n\t\"dots4\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2804\",\n\t\t\t\"\u2806\",\n\t\t\t\"\u2807\",\n\t\t\t\"\u280B\",\n\t\t\t\"\u2819\",\n\t\t\t\"\u2838\",\n\t\t\t\"\u2830\",\n\t\t\t\"\u2820\",\n\t\t\t\"\u2830\",\n\t\t\t\"\u2838\",\n\t\t\t\"\u2819\",\n\t\t\t\"\u280B\",\n\t\t\t\"\u2807\",\n\t\t\t\"\u2806\"\n\t\t]\n\t},\n\t\"dots5\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u280B\",\n\t\t\t\"\u2819\",\n\t\t\t\"\u281A\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2832\",\n\t\t\t\"\u2834\",\n\t\t\t\"\u2826\",\n\t\t\t\"\u2816\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2813\",\n\t\t\t\"\u280B\"\n\t\t]\n\t},\n\t\"dots6\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2801\",\n\t\t\t\"\u2809\",\n\t\t\t\"\u2819\",\n\t\t\t\"\u281A\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2832\",\n\t\t\t\"\u2834\",\n\t\t\t\"\u2824\",\n\t\t\t\"\u2804\",\n\t\t\t\"\u2804\",\n\t\t\t\"\u2824\",\n\t\t\t\"\u2834\",\n\t\t\t\"\u2832\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u281A\",\n\t\t\t\"\u2819\",\n\t\t\t\"\u2809\",\n\t\t\t\"\u2801\"\n\t\t]\n\t},\n\t\"dots7\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2808\",\n\t\t\t\"\u2809\",\n\t\t\t\"\u280B\",\n\t\t\t\"\u2813\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2816\",\n\t\t\t\"\u2826\",\n\t\t\t\"\u2824\",\n\t\t\t\"\u2820\",\n\t\t\t\"\u2820\",\n\t\t\t\"\u2824\",\n\t\t\t\"\u2826\",\n\t\t\t\"\u2816\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2813\",\n\t\t\t\"\u280B\",\n\t\t\t\"\u2809\",\n\t\t\t\"\u2808\"\n\t\t]\n\t},\n\t\"dots8\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2801\",\n\t\t\t\"\u2801\",\n\t\t\t\"\u2809\",\n\t\t\t\"\u2819\",\n\t\t\t\"\u281A\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2832\",\n\t\t\t\"\u2834\",\n\t\t\t\"\u2824\",\n\t\t\t\"\u2804\",\n\t\t\t\"\u2804\",\n\t\t\t\"\u2824\",\n\t\t\t\"\u2820\",\n\t\t\t\"\u2820\",\n\t\t\t\"\u2824\",\n\t\t\t\"\u2826\",\n\t\t\t\"\u2816\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2813\",\n\t\t\t\"\u280B\",\n\t\t\t\"\u2809\",\n\t\t\t\"\u2808\",\n\t\t\t\"\u2808\"\n\t\t]\n\t},\n\t\"dots9\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u28B9\",\n\t\t\t\"\u28BA\",\n\t\t\t\"\u28BC\",\n\t\t\t\"\u28F8\",\n\t\t\t\"\u28C7\",\n\t\t\t\"\u2867\",\n\t\t\t\"\u2857\",\n\t\t\t\"\u284F\"\n\t\t]\n\t},\n\t\"dots10\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2884\",\n\t\t\t\"\u2882\",\n\t\t\t\"\u2881\",\n\t\t\t\"\u2841\",\n\t\t\t\"\u2848\",\n\t\t\t\"\u2850\",\n\t\t\t\"\u2860\"\n\t\t]\n\t},\n\t\"dots11\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u2801\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2804\",\n\t\t\t\"\u2840\",\n\t\t\t\"\u2880\",\n\t\t\t\"\u2820\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2808\"\n\t\t]\n\t},\n\t\"dots12\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2880\u2800\",\n\t\t\t\"\u2840\u2800\",\n\t\t\t\"\u2804\u2800\",\n\t\t\t\"\u2882\u2800\",\n\t\t\t\"\u2842\u2800\",\n\t\t\t\"\u2805\u2800\",\n\t\t\t\"\u2883\u2800\",\n\t\t\t\"\u2843\u2800\",\n\t\t\t\"\u280D\u2800\",\n\t\t\t\"\u288B\u2800\",\n\t\t\t\"\u284B\u2800\",\n\t\t\t\"\u280D\u2801\",\n\t\t\t\"\u288B\u2801\",\n\t\t\t\"\u284B\u2801\",\n\t\t\t\"\u280D\u2809\",\n\t\t\t\"\u280B\u2809\",\n\t\t\t\"\u280B\u2809\",\n\t\t\t\"\u2809\u2819\",\n\t\t\t\"\u2809\u2819\",\n\t\t\t\"\u2809\u2829\",\n\t\t\t\"\u2808\u2899\",\n\t\t\t\"\u2808\u2859\",\n\t\t\t\"\u2888\u2829\",\n\t\t\t\"\u2840\u2899\",\n\t\t\t\"\u2804\u2859\",\n\t\t\t\"\u2882\u2829\",\n\t\t\t\"\u2842\u2898\",\n\t\t\t\"\u2805\u2858\",\n\t\t\t\"\u2883\u2828\",\n\t\t\t\"\u2843\u2890\",\n\t\t\t\"\u280D\u2850\",\n\t\t\t\"\u288B\u2820\",\n\t\t\t\"\u284B\u2880\",\n\t\t\t\"\u280D\u2841\",\n\t\t\t\"\u288B\u2801\",\n\t\t\t\"\u284B\u2801\",\n\t\t\t\"\u280D\u2809\",\n\t\t\t\"\u280B\u2809\",\n\t\t\t\"\u280B\u2809\",\n\t\t\t\"\u2809\u2819\",\n\t\t\t\"\u2809\u2819\",\n\t\t\t\"\u2809\u2829\",\n\t\t\t\"\u2808\u2899\",\n\t\t\t\"\u2808\u2859\",\n\t\t\t\"\u2808\u2829\",\n\t\t\t\"\u2800\u2899\",\n\t\t\t\"\u2800\u2859\",\n\t\t\t\"\u2800\u2829\",\n\t\t\t\"\u2800\u2898\",\n\t\t\t\"\u2800\u2858\",\n\t\t\t\"\u2800\u2828\",\n\t\t\t\"\u2800\u2890\",\n\t\t\t\"\u2800\u2850\",\n\t\t\t\"\u2800\u2820\",\n\t\t\t\"\u2800\u2880\",\n\t\t\t\"\u2800\u2840\"\n\t\t]\n\t},\n\t\"dots13\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u28FC\",\n\t\t\t\"\u28F9\",\n\t\t\t\"\u28BB\",\n\t\t\t\"\u283F\",\n\t\t\t\"\u285F\",\n\t\t\t\"\u28CF\",\n\t\t\t\"\u28E7\",\n\t\t\t\"\u28F6\"\n\t\t]\n\t},\n\t\"dots14\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2809\u2809\",\n\t\t\t\"\u2808\u2819\",\n\t\t\t\"\u2800\u2839\",\n\t\t\t\"\u2800\u28B8\",\n\t\t\t\"\u2800\u28F0\",\n\t\t\t\"\u2880\u28E0\",\n\t\t\t\"\u28C0\u28C0\",\n\t\t\t\"\u28C4\u2840\",\n\t\t\t\"\u28C6\u2800\",\n\t\t\t\"\u2847\u2800\",\n\t\t\t\"\u280F\u2800\",\n\t\t\t\"\u280B\u2801\"\n\t\t]\n\t},\n\t\"dots8Bit\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2800\",\n\t\t\t\"\u2801\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2803\",\n\t\t\t\"\u2804\",\n\t\t\t\"\u2805\",\n\t\t\t\"\u2806\",\n\t\t\t\"\u2807\",\n\t\t\t\"\u2840\",\n\t\t\t\"\u2841\",\n\t\t\t\"\u2842\",\n\t\t\t\"\u2843\",\n\t\t\t\"\u2844\",\n\t\t\t\"\u2845\",\n\t\t\t\"\u2846\",\n\t\t\t\"\u2847\",\n\t\t\t\"\u2808\",\n\t\t\t\"\u2809\",\n\t\t\t\"\u280A\",\n\t\t\t\"\u280B\",\n\t\t\t\"\u280C\",\n\t\t\t\"\u280D\",\n\t\t\t\"\u280E\",\n\t\t\t\"\u280F\",\n\t\t\t\"\u2848\",\n\t\t\t\"\u2849\",\n\t\t\t\"\u284A\",\n\t\t\t\"\u284B\",\n\t\t\t\"\u284C\",\n\t\t\t\"\u284D\",\n\t\t\t\"\u284E\",\n\t\t\t\"\u284F\",\n\t\t\t\"\u2810\",\n\t\t\t\"\u2811\",\n\t\t\t\"\u2812\",\n\t\t\t\"\u2813\",\n\t\t\t\"\u2814\",\n\t\t\t\"\u2815\",\n\t\t\t\"\u2816\",\n\t\t\t\"\u2817\",\n\t\t\t\"\u2850\",\n\t\t\t\"\u2851\",\n\t\t\t\"\u2852\",\n\t\t\t\"\u2853\",\n\t\t\t\"\u2854\",\n\t\t\t\"\u2855\",\n\t\t\t\"\u2856\",\n\t\t\t\"\u2857\",\n\t\t\t\"\u2818\",\n\t\t\t\"\u2819\",\n\t\t\t\"\u281A\",\n\t\t\t\"\u281B\",\n\t\t\t\"\u281C\",\n\t\t\t\"\u281D\",\n\t\t\t\"\u281E\",\n\t\t\t\"\u281F\",\n\t\t\t\"\u2858\",\n\t\t\t\"\u2859\",\n\t\t\t\"\u285A\",\n\t\t\t\"\u285B\",\n\t\t\t\"\u285C\",\n\t\t\t\"\u285D\",\n\t\t\t\"\u285E\",\n\t\t\t\"\u285F\",\n\t\t\t\"\u2820\",\n\t\t\t\"\u2821\",\n\t\t\t\"\u2822\",\n\t\t\t\"\u2823\",\n\t\t\t\"\u2824\",\n\t\t\t\"\u2825\",\n\t\t\t\"\u2826\",\n\t\t\t\"\u2827\",\n\t\t\t\"\u2860\",\n\t\t\t\"\u2861\",\n\t\t\t\"\u2862\",\n\t\t\t\"\u2863\",\n\t\t\t\"\u2864\",\n\t\t\t\"\u2865\",\n\t\t\t\"\u2866\",\n\t\t\t\"\u2867\",\n\t\t\t\"\u2828\",\n\t\t\t\"\u2829\",\n\t\t\t\"\u282A\",\n\t\t\t\"\u282B\",\n\t\t\t\"\u282C\",\n\t\t\t\"\u282D\",\n\t\t\t\"\u282E\",\n\t\t\t\"\u282F\",\n\t\t\t\"\u2868\",\n\t\t\t\"\u2869\",\n\t\t\t\"\u286A\",\n\t\t\t\"\u286B\",\n\t\t\t\"\u286C\",\n\t\t\t\"\u286D\",\n\t\t\t\"\u286E\",\n\t\t\t\"\u286F\",\n\t\t\t\"\u2830\",\n\t\t\t\"\u2831\",\n\t\t\t\"\u2832\",\n\t\t\t\"\u2833\",\n\t\t\t\"\u2834\",\n\t\t\t\"\u2835\",\n\t\t\t\"\u2836\",\n\t\t\t\"\u2837\",\n\t\t\t\"\u2870\",\n\t\t\t\"\u2871\",\n\t\t\t\"\u2872\",\n\t\t\t\"\u2873\",\n\t\t\t\"\u2874\",\n\t\t\t\"\u2875\",\n\t\t\t\"\u2876\",\n\t\t\t\"\u2877\",\n\t\t\t\"\u2838\",\n\t\t\t\"\u2839\",\n\t\t\t\"\u283A\",\n\t\t\t\"\u283B\",\n\t\t\t\"\u283C\",\n\t\t\t\"\u283D\",\n\t\t\t\"\u283E\",\n\t\t\t\"\u283F\",\n\t\t\t\"\u2878\",\n\t\t\t\"\u2879\",\n\t\t\t\"\u287A\",\n\t\t\t\"\u287B\",\n\t\t\t\"\u287C\",\n\t\t\t\"\u287D\",\n\t\t\t\"\u287E\",\n\t\t\t\"\u287F\",\n\t\t\t\"\u2880\",\n\t\t\t\"\u2881\",\n\t\t\t\"\u2882\",\n\t\t\t\"\u2883\",\n\t\t\t\"\u2884\",\n\t\t\t\"\u2885\",\n\t\t\t\"\u2886\",\n\t\t\t\"\u2887\",\n\t\t\t\"\u28C0\",\n\t\t\t\"\u28C1\",\n\t\t\t\"\u28C2\",\n\t\t\t\"\u28C3\",\n\t\t\t\"\u28C4\",\n\t\t\t\"\u28C5\",\n\t\t\t\"\u28C6\",\n\t\t\t\"\u28C7\",\n\t\t\t\"\u2888\",\n\t\t\t\"\u2889\",\n\t\t\t\"\u288A\",\n\t\t\t\"\u288B\",\n\t\t\t\"\u288C\",\n\t\t\t\"\u288D\",\n\t\t\t\"\u288E\",\n\t\t\t\"\u288F\",\n\t\t\t\"\u28C8\",\n\t\t\t\"\u28C9\",\n\t\t\t\"\u28CA\",\n\t\t\t\"\u28CB\",\n\t\t\t\"\u28CC\",\n\t\t\t\"\u28CD\",\n\t\t\t\"\u28CE\",\n\t\t\t\"\u28CF\",\n\t\t\t\"\u2890\",\n\t\t\t\"\u2891\",\n\t\t\t\"\u2892\",\n\t\t\t\"\u2893\",\n\t\t\t\"\u2894\",\n\t\t\t\"\u2895\",\n\t\t\t\"\u2896\",\n\t\t\t\"\u2897\",\n\t\t\t\"\u28D0\",\n\t\t\t\"\u28D1\",\n\t\t\t\"\u28D2\",\n\t\t\t\"\u28D3\",\n\t\t\t\"\u28D4\",\n\t\t\t\"\u28D5\",\n\t\t\t\"\u28D6\",\n\t\t\t\"\u28D7\",\n\t\t\t\"\u2898\",\n\t\t\t\"\u2899\",\n\t\t\t\"\u289A\",\n\t\t\t\"\u289B\",\n\t\t\t\"\u289C\",\n\t\t\t\"\u289D\",\n\t\t\t\"\u289E\",\n\t\t\t\"\u289F\",\n\t\t\t\"\u28D8\",\n\t\t\t\"\u28D9\",\n\t\t\t\"\u28DA\",\n\t\t\t\"\u28DB\",\n\t\t\t\"\u28DC\",\n\t\t\t\"\u28DD\",\n\t\t\t\"\u28DE\",\n\t\t\t\"\u28DF\",\n\t\t\t\"\u28A0\",\n\t\t\t\"\u28A1\",\n\t\t\t\"\u28A2\",\n\t\t\t\"\u28A3\",\n\t\t\t\"\u28A4\",\n\t\t\t\"\u28A5\",\n\t\t\t\"\u28A6\",\n\t\t\t\"\u28A7\",\n\t\t\t\"\u28E0\",\n\t\t\t\"\u28E1\",\n\t\t\t\"\u28E2\",\n\t\t\t\"\u28E3\",\n\t\t\t\"\u28E4\",\n\t\t\t\"\u28E5\",\n\t\t\t\"\u28E6\",\n\t\t\t\"\u28E7\",\n\t\t\t\"\u28A8\",\n\t\t\t\"\u28A9\",\n\t\t\t\"\u28AA\",\n\t\t\t\"\u28AB\",\n\t\t\t\"\u28AC\",\n\t\t\t\"\u28AD\",\n\t\t\t\"\u28AE\",\n\t\t\t\"\u28AF\",\n\t\t\t\"\u28E8\",\n\t\t\t\"\u28E9\",\n\t\t\t\"\u28EA\",\n\t\t\t\"\u28EB\",\n\t\t\t\"\u28EC\",\n\t\t\t\"\u28ED\",\n\t\t\t\"\u28EE\",\n\t\t\t\"\u28EF\",\n\t\t\t\"\u28B0\",\n\t\t\t\"\u28B1\",\n\t\t\t\"\u28B2\",\n\t\t\t\"\u28B3\",\n\t\t\t\"\u28B4\",\n\t\t\t\"\u28B5\",\n\t\t\t\"\u28B6\",\n\t\t\t\"\u28B7\",\n\t\t\t\"\u28F0\",\n\t\t\t\"\u28F1\",\n\t\t\t\"\u28F2\",\n\t\t\t\"\u28F3\",\n\t\t\t\"\u28F4\",\n\t\t\t\"\u28F5\",\n\t\t\t\"\u28F6\",\n\t\t\t\"\u28F7\",\n\t\t\t\"\u28B8\",\n\t\t\t\"\u28B9\",\n\t\t\t\"\u28BA\",\n\t\t\t\"\u28BB\",\n\t\t\t\"\u28BC\",\n\t\t\t\"\u28BD\",\n\t\t\t\"\u28BE\",\n\t\t\t\"\u28BF\",\n\t\t\t\"\u28F8\",\n\t\t\t\"\u28F9\",\n\t\t\t\"\u28FA\",\n\t\t\t\"\u28FB\",\n\t\t\t\"\u28FC\",\n\t\t\t\"\u28FD\",\n\t\t\t\"\u28FE\",\n\t\t\t\"\u28FF\"\n\t\t]\n\t},\n\t\"dotsCircle\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u288E \",\n\t\t\t\"\u280E\u2801\",\n\t\t\t\"\u280A\u2811\",\n\t\t\t\"\u2808\u2831\",\n\t\t\t\" \u2871\",\n\t\t\t\"\u2880\u2870\",\n\t\t\t\"\u2884\u2860\",\n\t\t\t\"\u2886\u2840\"\n\t\t]\n\t},\n\t\"sand\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2801\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2804\",\n\t\t\t\"\u2840\",\n\t\t\t\"\u2848\",\n\t\t\t\"\u2850\",\n\t\t\t\"\u2860\",\n\t\t\t\"\u28C0\",\n\t\t\t\"\u28C1\",\n\t\t\t\"\u28C2\",\n\t\t\t\"\u28C4\",\n\t\t\t\"\u28CC\",\n\t\t\t\"\u28D4\",\n\t\t\t\"\u28E4\",\n\t\t\t\"\u28E5\",\n\t\t\t\"\u28E6\",\n\t\t\t\"\u28EE\",\n\t\t\t\"\u28F6\",\n\t\t\t\"\u28F7\",\n\t\t\t\"\u28FF\",\n\t\t\t\"\u287F\",\n\t\t\t\"\u283F\",\n\t\t\t\"\u289F\",\n\t\t\t\"\u281F\",\n\t\t\t\"\u285B\",\n\t\t\t\"\u281B\",\n\t\t\t\"\u282B\",\n\t\t\t\"\u288B\",\n\t\t\t\"\u280B\",\n\t\t\t\"\u280D\",\n\t\t\t\"\u2849\",\n\t\t\t\"\u2809\",\n\t\t\t\"\u2811\",\n\t\t\t\"\u2821\",\n\t\t\t\"\u2881\"\n\t\t]\n\t},\n\t\"line\": {\n\t\t\"interval\": 130,\n\t\t\"frames\": [\n\t\t\t\"-\",\n\t\t\t\"\\\\\",\n\t\t\t\"|\",\n\t\t\t\"/\"\n\t\t]\n\t},\n\t\"line2\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u2802\",\n\t\t\t\"-\",\n\t\t\t\"\u2013\",\n\t\t\t\"\u2014\",\n\t\t\t\"\u2013\",\n\t\t\t\"-\"\n\t\t]\n\t},\n\t\"rollingLine\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"/  \",\n\t\t\t\" - \",\n\t\t\t\" \\\\ \",\n\t\t\t\"  |\",\n\t\t\t\"  |\",\n\t\t\t\" \\\\ \",\n\t\t\t\" - \",\n\t\t\t\"/  \"\n\t\t]\n\t},\n\t\"pipe\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u2524\",\n\t\t\t\"\u2518\",\n\t\t\t\"\u2534\",\n\t\t\t\"\u2514\",\n\t\t\t\"\u251C\",\n\t\t\t\"\u250C\",\n\t\t\t\"\u252C\",\n\t\t\t\"\u2510\"\n\t\t]\n\t},\n\t\"simpleDots\": {\n\t\t\"interval\": 400,\n\t\t\"frames\": [\n\t\t\t\".  \",\n\t\t\t\".. \",\n\t\t\t\"...\",\n\t\t\t\"   \"\n\t\t]\n\t},\n\t\"simpleDotsScrolling\": {\n\t\t\"interval\": 200,\n\t\t\"frames\": [\n\t\t\t\".  \",\n\t\t\t\".. \",\n\t\t\t\"...\",\n\t\t\t\" ..\",\n\t\t\t\"  .\",\n\t\t\t\"   \"\n\t\t]\n\t},\n\t\"star\": {\n\t\t\"interval\": 70,\n\t\t\"frames\": [\n\t\t\t\"\u2736\",\n\t\t\t\"\u2738\",\n\t\t\t\"\u2739\",\n\t\t\t\"\u273A\",\n\t\t\t\"\u2739\",\n\t\t\t\"\u2737\"\n\t\t]\n\t},\n\t\"star2\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"+\",\n\t\t\t\"x\",\n\t\t\t\"*\"\n\t\t]\n\t},\n\t\"flip\": {\n\t\t\"interval\": 70,\n\t\t\"frames\": [\n\t\t\t\"_\",\n\t\t\t\"_\",\n\t\t\t\"_\",\n\t\t\t\"-\",\n\t\t\t\"`\",\n\t\t\t\"`\",\n\t\t\t\"'\",\n\t\t\t\"\u00B4\",\n\t\t\t\"-\",\n\t\t\t\"_\",\n\t\t\t\"_\",\n\t\t\t\"_\"\n\t\t]\n\t},\n\t\"hamburger\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u2631\",\n\t\t\t\"\u2632\",\n\t\t\t\"\u2634\"\n\t\t]\n\t},\n\t\"growVertical\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u2581\",\n\t\t\t\"\u2583\",\n\t\t\t\"\u2584\",\n\t\t\t\"\u2585\",\n\t\t\t\"\u2586\",\n\t\t\t\"\u2587\",\n\t\t\t\"\u2586\",\n\t\t\t\"\u2585\",\n\t\t\t\"\u2584\",\n\t\t\t\"\u2583\"\n\t\t]\n\t},\n\t\"growHorizontal\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u258F\",\n\t\t\t\"\u258E\",\n\t\t\t\"\u258D\",\n\t\t\t\"\u258C\",\n\t\t\t\"\u258B\",\n\t\t\t\"\u258A\",\n\t\t\t\"\u2589\",\n\t\t\t\"\u258A\",\n\t\t\t\"\u258B\",\n\t\t\t\"\u258C\",\n\t\t\t\"\u258D\",\n\t\t\t\"\u258E\"\n\t\t]\n\t},\n\t\"balloon\": {\n\t\t\"interval\": 140,\n\t\t\"frames\": [\n\t\t\t\" \",\n\t\t\t\".\",\n\t\t\t\"o\",\n\t\t\t\"O\",\n\t\t\t\"@\",\n\t\t\t\"*\",\n\t\t\t\" \"\n\t\t]\n\t},\n\t\"balloon2\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\".\",\n\t\t\t\"o\",\n\t\t\t\"O\",\n\t\t\t\"\u00B0\",\n\t\t\t\"O\",\n\t\t\t\"o\",\n\t\t\t\".\"\n\t\t]\n\t},\n\t\"noise\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u2593\",\n\t\t\t\"\u2592\",\n\t\t\t\"\u2591\"\n\t\t]\n\t},\n\t\"bounce\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u2801\",\n\t\t\t\"\u2802\",\n\t\t\t\"\u2804\",\n\t\t\t\"\u2802\"\n\t\t]\n\t},\n\t\"boxBounce\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u2596\",\n\t\t\t\"\u2598\",\n\t\t\t\"\u259D\",\n\t\t\t\"\u2597\"\n\t\t]\n\t},\n\t\"boxBounce2\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u258C\",\n\t\t\t\"\u2580\",\n\t\t\t\"\u2590\",\n\t\t\t\"\u2584\"\n\t\t]\n\t},\n\t\"triangle\": {\n\t\t\"interval\": 50,\n\t\t\"frames\": [\n\t\t\t\"\u25E2\",\n\t\t\t\"\u25E3\",\n\t\t\t\"\u25E4\",\n\t\t\t\"\u25E5\"\n\t\t]\n\t},\n\t\"binary\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"010010\",\n\t\t\t\"001100\",\n\t\t\t\"100101\",\n\t\t\t\"111010\",\n\t\t\t\"111101\",\n\t\t\t\"010111\",\n\t\t\t\"101011\",\n\t\t\t\"111000\",\n\t\t\t\"110011\",\n\t\t\t\"110101\"\n\t\t]\n\t},\n\t\"arc\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u25DC\",\n\t\t\t\"\u25E0\",\n\t\t\t\"\u25DD\",\n\t\t\t\"\u25DE\",\n\t\t\t\"\u25E1\",\n\t\t\t\"\u25DF\"\n\t\t]\n\t},\n\t\"circle\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u25E1\",\n\t\t\t\"\u2299\",\n\t\t\t\"\u25E0\"\n\t\t]\n\t},\n\t\"squareCorners\": {\n\t\t\"interval\": 180,\n\t\t\"frames\": [\n\t\t\t\"\u25F0\",\n\t\t\t\"\u25F3\",\n\t\t\t\"\u25F2\",\n\t\t\t\"\u25F1\"\n\t\t]\n\t},\n\t\"circleQuarters\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u25F4\",\n\t\t\t\"\u25F7\",\n\t\t\t\"\u25F6\",\n\t\t\t\"\u25F5\"\n\t\t]\n\t},\n\t\"circleHalves\": {\n\t\t\"interval\": 50,\n\t\t\"frames\": [\n\t\t\t\"\u25D0\",\n\t\t\t\"\u25D3\",\n\t\t\t\"\u25D1\",\n\t\t\t\"\u25D2\"\n\t\t]\n\t},\n\t\"squish\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u256B\",\n\t\t\t\"\u256A\"\n\t\t]\n\t},\n\t\"toggle\": {\n\t\t\"interval\": 250,\n\t\t\"frames\": [\n\t\t\t\"\u22B6\",\n\t\t\t\"\u22B7\"\n\t\t]\n\t},\n\t\"toggle2\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u25AB\",\n\t\t\t\"\u25AA\"\n\t\t]\n\t},\n\t\"toggle3\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u25A1\",\n\t\t\t\"\u25A0\"\n\t\t]\n\t},\n\t\"toggle4\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u25A0\",\n\t\t\t\"\u25A1\",\n\t\t\t\"\u25AA\",\n\t\t\t\"\u25AB\"\n\t\t]\n\t},\n\t\"toggle5\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u25AE\",\n\t\t\t\"\u25AF\"\n\t\t]\n\t},\n\t\"toggle6\": {\n\t\t\"interval\": 300,\n\t\t\"frames\": [\n\t\t\t\"\u101D\",\n\t\t\t\"\u1040\"\n\t\t]\n\t},\n\t\"toggle7\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u29BE\",\n\t\t\t\"\u29BF\"\n\t\t]\n\t},\n\t\"toggle8\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u25CD\",\n\t\t\t\"\u25CC\"\n\t\t]\n\t},\n\t\"toggle9\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u25C9\",\n\t\t\t\"\u25CE\"\n\t\t]\n\t},\n\t\"toggle10\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u3282\",\n\t\t\t\"\u3280\",\n\t\t\t\"\u3281\"\n\t\t]\n\t},\n\t\"toggle11\": {\n\t\t\"interval\": 50,\n\t\t\"frames\": [\n\t\t\t\"\u29C7\",\n\t\t\t\"\u29C6\"\n\t\t]\n\t},\n\t\"toggle12\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u2617\",\n\t\t\t\"\u2616\"\n\t\t]\n\t},\n\t\"toggle13\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"=\",\n\t\t\t\"*\",\n\t\t\t\"-\"\n\t\t]\n\t},\n\t\"arrow\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u2190\",\n\t\t\t\"\u2196\",\n\t\t\t\"\u2191\",\n\t\t\t\"\u2197\",\n\t\t\t\"\u2192\",\n\t\t\t\"\u2198\",\n\t\t\t\"\u2193\",\n\t\t\t\"\u2199\"\n\t\t]\n\t},\n\t\"arrow2\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2B06\uFE0F \",\n\t\t\t\"\u2197\uFE0F \",\n\t\t\t\"\u27A1\uFE0F \",\n\t\t\t\"\u2198\uFE0F \",\n\t\t\t\"\u2B07\uFE0F \",\n\t\t\t\"\u2199\uFE0F \",\n\t\t\t\"\u2B05\uFE0F \",\n\t\t\t\"\u2196\uFE0F \"\n\t\t]\n\t},\n\t\"arrow3\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u25B9\u25B9\u25B9\u25B9\u25B9\",\n\t\t\t\"\u25B8\u25B9\u25B9\u25B9\u25B9\",\n\t\t\t\"\u25B9\u25B8\u25B9\u25B9\u25B9\",\n\t\t\t\"\u25B9\u25B9\u25B8\u25B9\u25B9\",\n\t\t\t\"\u25B9\u25B9\u25B9\u25B8\u25B9\",\n\t\t\t\"\u25B9\u25B9\u25B9\u25B9\u25B8\"\n\t\t]\n\t},\n\t\"bouncingBar\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"[    ]\",\n\t\t\t\"[=   ]\",\n\t\t\t\"[==  ]\",\n\t\t\t\"[=== ]\",\n\t\t\t\"[====]\",\n\t\t\t\"[ ===]\",\n\t\t\t\"[  ==]\",\n\t\t\t\"[   =]\",\n\t\t\t\"[    ]\",\n\t\t\t\"[   =]\",\n\t\t\t\"[  ==]\",\n\t\t\t\"[ ===]\",\n\t\t\t\"[====]\",\n\t\t\t\"[=== ]\",\n\t\t\t\"[==  ]\",\n\t\t\t\"[=   ]\"\n\t\t]\n\t},\n\t\"bouncingBall\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"( \u25CF    )\",\n\t\t\t\"(  \u25CF   )\",\n\t\t\t\"(   \u25CF  )\",\n\t\t\t\"(    \u25CF )\",\n\t\t\t\"(     \u25CF)\",\n\t\t\t\"(    \u25CF )\",\n\t\t\t\"(   \u25CF  )\",\n\t\t\t\"(  \u25CF   )\",\n\t\t\t\"( \u25CF    )\",\n\t\t\t\"(\u25CF     )\"\n\t\t]\n\t},\n\t\"smiley\": {\n\t\t\"interval\": 200,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDE04 \",\n\t\t\t\"\uD83D\uDE1D \"\n\t\t]\n\t},\n\t\"monkey\": {\n\t\t\"interval\": 300,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDE48 \",\n\t\t\t\"\uD83D\uDE48 \",\n\t\t\t\"\uD83D\uDE49 \",\n\t\t\t\"\uD83D\uDE4A \"\n\t\t]\n\t},\n\t\"hearts\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDC9B \",\n\t\t\t\"\uD83D\uDC99 \",\n\t\t\t\"\uD83D\uDC9C \",\n\t\t\t\"\uD83D\uDC9A \",\n\t\t\t\"\uD83D\uDC97 \"\n\t\t]\n\t},\n\t\"clock\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDD5B \",\n\t\t\t\"\uD83D\uDD50 \",\n\t\t\t\"\uD83D\uDD51 \",\n\t\t\t\"\uD83D\uDD52 \",\n\t\t\t\"\uD83D\uDD53 \",\n\t\t\t\"\uD83D\uDD54 \",\n\t\t\t\"\uD83D\uDD55 \",\n\t\t\t\"\uD83D\uDD56 \",\n\t\t\t\"\uD83D\uDD57 \",\n\t\t\t\"\uD83D\uDD58 \",\n\t\t\t\"\uD83D\uDD59 \",\n\t\t\t\"\uD83D\uDD5A \"\n\t\t]\n\t},\n\t\"earth\": {\n\t\t\"interval\": 180,\n\t\t\"frames\": [\n\t\t\t\"\uD83C\uDF0D \",\n\t\t\t\"\uD83C\uDF0E \",\n\t\t\t\"\uD83C\uDF0F \"\n\t\t]\n\t},\n\t\"material\": {\n\t\t\"interval\": 17,\n\t\t\"frames\": [\n\t\t\t\"\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\",\n\t\t\t\"\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\",\n\t\t\t\"\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2588\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\",\n\t\t\t\"\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\u2581\"\n\t\t]\n\t},\n\t\"moon\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\uD83C\uDF11 \",\n\t\t\t\"\uD83C\uDF12 \",\n\t\t\t\"\uD83C\uDF13 \",\n\t\t\t\"\uD83C\uDF14 \",\n\t\t\t\"\uD83C\uDF15 \",\n\t\t\t\"\uD83C\uDF16 \",\n\t\t\t\"\uD83C\uDF17 \",\n\t\t\t\"\uD83C\uDF18 \"\n\t\t]\n\t},\n\t\"runner\": {\n\t\t\"interval\": 140,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDEB6 \",\n\t\t\t\"\uD83C\uDFC3 \"\n\t\t]\n\t},\n\t\"pong\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u2590\u2802       \u258C\",\n\t\t\t\"\u2590\u2808       \u258C\",\n\t\t\t\"\u2590 \u2802      \u258C\",\n\t\t\t\"\u2590 \u2820      \u258C\",\n\t\t\t\"\u2590  \u2840     \u258C\",\n\t\t\t\"\u2590  \u2820     \u258C\",\n\t\t\t\"\u2590   \u2802    \u258C\",\n\t\t\t\"\u2590   \u2808    \u258C\",\n\t\t\t\"\u2590    \u2802   \u258C\",\n\t\t\t\"\u2590    \u2820   \u258C\",\n\t\t\t\"\u2590     \u2840  \u258C\",\n\t\t\t\"\u2590     \u2820  \u258C\",\n\t\t\t\"\u2590      \u2802 \u258C\",\n\t\t\t\"\u2590      \u2808 \u258C\",\n\t\t\t\"\u2590       \u2802\u258C\",\n\t\t\t\"\u2590       \u2820\u258C\",\n\t\t\t\"\u2590       \u2840\u258C\",\n\t\t\t\"\u2590      \u2820 \u258C\",\n\t\t\t\"\u2590      \u2802 \u258C\",\n\t\t\t\"\u2590     \u2808  \u258C\",\n\t\t\t\"\u2590     \u2802  \u258C\",\n\t\t\t\"\u2590    \u2820   \u258C\",\n\t\t\t\"\u2590    \u2840   \u258C\",\n\t\t\t\"\u2590   \u2820    \u258C\",\n\t\t\t\"\u2590   \u2802    \u258C\",\n\t\t\t\"\u2590  \u2808     \u258C\",\n\t\t\t\"\u2590  \u2802     \u258C\",\n\t\t\t\"\u2590 \u2820      \u258C\",\n\t\t\t\"\u2590 \u2840      \u258C\",\n\t\t\t\"\u2590\u2820       \u258C\"\n\t\t]\n\t},\n\t\"shark\": {\n\t\t\"interval\": 120,\n\t\t\"frames\": [\n\t\t\t\"\u2590|\\\\____________\u258C\",\n\t\t\t\"\u2590_|\\\\___________\u258C\",\n\t\t\t\"\u2590__|\\\\__________\u258C\",\n\t\t\t\"\u2590___|\\\\_________\u258C\",\n\t\t\t\"\u2590____|\\\\________\u258C\",\n\t\t\t\"\u2590_____|\\\\_______\u258C\",\n\t\t\t\"\u2590______|\\\\______\u258C\",\n\t\t\t\"\u2590_______|\\\\_____\u258C\",\n\t\t\t\"\u2590________|\\\\____\u258C\",\n\t\t\t\"\u2590_________|\\\\___\u258C\",\n\t\t\t\"\u2590__________|\\\\__\u258C\",\n\t\t\t\"\u2590___________|\\\\_\u258C\",\n\t\t\t\"\u2590____________|\\\\\u258C\",\n\t\t\t\"\u2590____________/|\u258C\",\n\t\t\t\"\u2590___________/|_\u258C\",\n\t\t\t\"\u2590__________/|__\u258C\",\n\t\t\t\"\u2590_________/|___\u258C\",\n\t\t\t\"\u2590________/|____\u258C\",\n\t\t\t\"\u2590_______/|_____\u258C\",\n\t\t\t\"\u2590______/|______\u258C\",\n\t\t\t\"\u2590_____/|_______\u258C\",\n\t\t\t\"\u2590____/|________\u258C\",\n\t\t\t\"\u2590___/|_________\u258C\",\n\t\t\t\"\u2590__/|__________\u258C\",\n\t\t\t\"\u2590_/|___________\u258C\",\n\t\t\t\"\u2590/|____________\u258C\"\n\t\t]\n\t},\n\t\"dqpb\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"d\",\n\t\t\t\"q\",\n\t\t\t\"p\",\n\t\t\t\"b\"\n\t\t]\n\t},\n\t\"weather\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\u2600\uFE0F \",\n\t\t\t\"\u2600\uFE0F \",\n\t\t\t\"\u2600\uFE0F \",\n\t\t\t\"\uD83C\uDF24 \",\n\t\t\t\"\u26C5\uFE0F \",\n\t\t\t\"\uD83C\uDF25 \",\n\t\t\t\"\u2601\uFE0F \",\n\t\t\t\"\uD83C\uDF27 \",\n\t\t\t\"\uD83C\uDF28 \",\n\t\t\t\"\uD83C\uDF27 \",\n\t\t\t\"\uD83C\uDF28 \",\n\t\t\t\"\uD83C\uDF27 \",\n\t\t\t\"\uD83C\uDF28 \",\n\t\t\t\"\u26C8 \",\n\t\t\t\"\uD83C\uDF28 \",\n\t\t\t\"\uD83C\uDF27 \",\n\t\t\t\"\uD83C\uDF28 \",\n\t\t\t\"\u2601\uFE0F \",\n\t\t\t\"\uD83C\uDF25 \",\n\t\t\t\"\u26C5\uFE0F \",\n\t\t\t\"\uD83C\uDF24 \",\n\t\t\t\"\u2600\uFE0F \",\n\t\t\t\"\u2600\uFE0F \"\n\t\t]\n\t},\n\t\"christmas\": {\n\t\t\"interval\": 400,\n\t\t\"frames\": [\n\t\t\t\"\uD83C\uDF32\",\n\t\t\t\"\uD83C\uDF84\"\n\t\t]\n\t},\n\t\"grenade\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u060C  \",\n\t\t\t\"\u2032  \",\n\t\t\t\" \u00B4 \",\n\t\t\t\" \u203E \",\n\t\t\t\"  \u2E0C\",\n\t\t\t\"  \u2E0A\",\n\t\t\t\"  |\",\n\t\t\t\"  \u204E\",\n\t\t\t\"  \u2055\",\n\t\t\t\" \u0DF4 \",\n\t\t\t\"  \u2053\",\n\t\t\t\"   \",\n\t\t\t\"   \",\n\t\t\t\"   \"\n\t\t]\n\t},\n\t\"point\": {\n\t\t\"interval\": 125,\n\t\t\"frames\": [\n\t\t\t\"\u2219\u2219\u2219\",\n\t\t\t\"\u25CF\u2219\u2219\",\n\t\t\t\"\u2219\u25CF\u2219\",\n\t\t\t\"\u2219\u2219\u25CF\",\n\t\t\t\"\u2219\u2219\u2219\"\n\t\t]\n\t},\n\t\"layer\": {\n\t\t\"interval\": 150,\n\t\t\"frames\": [\n\t\t\t\"-\",\n\t\t\t\"=\",\n\t\t\t\"\u2261\"\n\t\t]\n\t},\n\t\"betaWave\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2\",\n\t\t\t\"\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2\u03B2\",\n\t\t\t\"\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2\u03B2\",\n\t\t\t\"\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2\u03B2\",\n\t\t\t\"\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2\u03B2\",\n\t\t\t\"\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1\u03B2\",\n\t\t\t\"\u03B2\u03B2\u03B2\u03B2\u03B2\u03B2\u03C1\"\n\t\t]\n\t},\n\t\"fingerDance\": {\n\t\t\"interval\": 160,\n\t\t\"frames\": [\n\t\t\t\"\uD83E\uDD18 \",\n\t\t\t\"\uD83E\uDD1F \",\n\t\t\t\"\uD83D\uDD96 \",\n\t\t\t\"\u270B \",\n\t\t\t\"\uD83E\uDD1A \",\n\t\t\t\"\uD83D\uDC46 \"\n\t\t]\n\t},\n\t\"fistBump\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\uD83E\uDD1C\\u3000\\u3000\\u3000\\u3000\uD83E\uDD1B \",\n\t\t\t\"\uD83E\uDD1C\\u3000\\u3000\\u3000\\u3000\uD83E\uDD1B \",\n\t\t\t\"\uD83E\uDD1C\\u3000\\u3000\\u3000\\u3000\uD83E\uDD1B \",\n\t\t\t\"\\u3000\uD83E\uDD1C\\u3000\\u3000\uD83E\uDD1B\\u3000 \",\n\t\t\t\"\\u3000\\u3000\uD83E\uDD1C\uD83E\uDD1B\\u3000\\u3000 \",\n\t\t\t\"\\u3000\uD83E\uDD1C\u2728\uD83E\uDD1B\\u3000\\u3000 \",\n\t\t\t\"\uD83E\uDD1C\\u3000\u2728\\u3000\uD83E\uDD1B\\u3000 \"\n\t\t]\n\t},\n\t\"soccerHeader\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\" \uD83E\uDDD1\u26BD\uFE0F       \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1  \u26BD\uFE0F      \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1   \u26BD\uFE0F     \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1    \u26BD\uFE0F    \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1     \u26BD\uFE0F   \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1      \u26BD\uFE0F  \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1       \u26BD\uFE0F\uD83E\uDDD1  \",\n\t\t\t\"\uD83E\uDDD1      \u26BD\uFE0F  \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1     \u26BD\uFE0F   \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1    \u26BD\uFE0F    \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1   \u26BD\uFE0F     \uD83E\uDDD1 \",\n\t\t\t\"\uD83E\uDDD1  \u26BD\uFE0F      \uD83E\uDDD1 \"\n\t\t]\n\t},\n\t\"mindblown\": {\n\t\t\"interval\": 160,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDE10 \",\n\t\t\t\"\uD83D\uDE10 \",\n\t\t\t\"\uD83D\uDE2E \",\n\t\t\t\"\uD83D\uDE2E \",\n\t\t\t\"\uD83D\uDE26 \",\n\t\t\t\"\uD83D\uDE26 \",\n\t\t\t\"\uD83D\uDE27 \",\n\t\t\t\"\uD83D\uDE27 \",\n\t\t\t\"\uD83E\uDD2F \",\n\t\t\t\"\uD83D\uDCA5 \",\n\t\t\t\"\u2728 \",\n\t\t\t\"\\u3000 \",\n\t\t\t\"\\u3000 \",\n\t\t\t\"\\u3000 \"\n\t\t]\n\t},\n\t\"speaker\": {\n\t\t\"interval\": 160,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDD08 \",\n\t\t\t\"\uD83D\uDD09 \",\n\t\t\t\"\uD83D\uDD0A \",\n\t\t\t\"\uD83D\uDD09 \"\n\t\t]\n\t},\n\t\"orangePulse\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDD38 \",\n\t\t\t\"\uD83D\uDD36 \",\n\t\t\t\"\uD83D\uDFE0 \",\n\t\t\t\"\uD83D\uDFE0 \",\n\t\t\t\"\uD83D\uDD36 \"\n\t\t]\n\t},\n\t\"bluePulse\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDD39 \",\n\t\t\t\"\uD83D\uDD37 \",\n\t\t\t\"\uD83D\uDD35 \",\n\t\t\t\"\uD83D\uDD35 \",\n\t\t\t\"\uD83D\uDD37 \"\n\t\t]\n\t},\n\t\"orangeBluePulse\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDD38 \",\n\t\t\t\"\uD83D\uDD36 \",\n\t\t\t\"\uD83D\uDFE0 \",\n\t\t\t\"\uD83D\uDFE0 \",\n\t\t\t\"\uD83D\uDD36 \",\n\t\t\t\"\uD83D\uDD39 \",\n\t\t\t\"\uD83D\uDD37 \",\n\t\t\t\"\uD83D\uDD35 \",\n\t\t\t\"\uD83D\uDD35 \",\n\t\t\t\"\uD83D\uDD37 \"\n\t\t]\n\t},\n\t\"timeTravel\": {\n\t\t\"interval\": 100,\n\t\t\"frames\": [\n\t\t\t\"\uD83D\uDD5B \",\n\t\t\t\"\uD83D\uDD5A \",\n\t\t\t\"\uD83D\uDD59 \",\n\t\t\t\"\uD83D\uDD58 \",\n\t\t\t\"\uD83D\uDD57 \",\n\t\t\t\"\uD83D\uDD56 \",\n\t\t\t\"\uD83D\uDD55 \",\n\t\t\t\"\uD83D\uDD54 \",\n\t\t\t\"\uD83D\uDD53 \",\n\t\t\t\"\uD83D\uDD52 \",\n\t\t\t\"\uD83D\uDD51 \",\n\t\t\t\"\uD83D\uDD50 \"\n\t\t]\n\t},\n\t\"aesthetic\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1\",\n\t\t\t\"\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\",\n\t\t\t\"\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1\u25B1\",\n\t\t\t\"\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1\u25B1\",\n\t\t\t\"\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1\u25B1\",\n\t\t\t\"\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B1\",\n\t\t\t\"\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\u25B0\",\n\t\t\t\"\u25B0\u25B1\u25B1\u25B1\u25B1\u25B1\u25B1\"\n\t\t]\n\t},\n\t\"dwarfFortress\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\" \u2588\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"\u263A\u2588\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"\u263A\u2588\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"\u263A\u2593\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"\u263A\u2593\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"\u263A\u2592\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"\u263A\u2592\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"\u263A\u2591\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"\u263A\u2591\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"\u263A \u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u263A\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u263A\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u263A\u2593\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u263A\u2593\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u263A\u2592\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u263A\u2592\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u263A\u2591\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u263A\u2591\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u263A \u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u263A\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u263A\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u263A\u2593\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u263A\u2593\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u263A\u2592\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u263A\u2592\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u263A\u2591\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u263A\u2591\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u263A \u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u263A\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u263A\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u263A\u2593\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u263A\u2593\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u263A\u2592\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u263A\u2592\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u263A\u2591\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u263A\u2591\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u263A \u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u263A\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u263A\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u263A\u2593\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u263A\u2593\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u263A\u2592\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u263A\u2592\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u263A\u2591\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u263A\u2591\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u263A \u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u263A\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u263A\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u263A\u2593\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u263A\u2593\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u263A\u2592\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u263A\u2592\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u263A\u2591\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u263A\u2591\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u263A \u00A3\u00A3\u00A3  \",\n\t\t\t\"      \u263A\u00A3\u00A3\u00A3  \",\n\t\t\t\"      \u263A\u00A3\u00A3\u00A3  \",\n\t\t\t\"      \u263A\u2593\u00A3\u00A3  \",\n\t\t\t\"      \u263A\u2593\u00A3\u00A3  \",\n\t\t\t\"      \u263A\u2592\u00A3\u00A3  \",\n\t\t\t\"      \u263A\u2592\u00A3\u00A3  \",\n\t\t\t\"      \u263A\u2591\u00A3\u00A3  \",\n\t\t\t\"      \u263A\u2591\u00A3\u00A3  \",\n\t\t\t\"      \u263A \u00A3\u00A3  \",\n\t\t\t\"       \u263A\u00A3\u00A3  \",\n\t\t\t\"       \u263A\u00A3\u00A3  \",\n\t\t\t\"       \u263A\u2593\u00A3  \",\n\t\t\t\"       \u263A\u2593\u00A3  \",\n\t\t\t\"       \u263A\u2592\u00A3  \",\n\t\t\t\"       \u263A\u2592\u00A3  \",\n\t\t\t\"       \u263A\u2591\u00A3  \",\n\t\t\t\"       \u263A\u2591\u00A3  \",\n\t\t\t\"       \u263A \u00A3  \",\n\t\t\t\"        \u263A\u00A3  \",\n\t\t\t\"        \u263A\u00A3  \",\n\t\t\t\"        \u263A\u2593  \",\n\t\t\t\"        \u263A\u2593  \",\n\t\t\t\"        \u263A\u2592  \",\n\t\t\t\"        \u263A\u2592  \",\n\t\t\t\"        \u263A\u2591  \",\n\t\t\t\"        \u263A\u2591  \",\n\t\t\t\"        \u263A   \",\n\t\t\t\"        \u263A  &\",\n\t\t\t\"        \u263A \u263C&\",\n\t\t\t\"       \u263A \u263C &\",\n\t\t\t\"       \u263A\u263C  &\",\n\t\t\t\"      \u263A\u263C  & \",\n\t\t\t\"      \u203C   & \",\n\t\t\t\"     \u263A   &  \",\n\t\t\t\"    \u203C    &  \",\n\t\t\t\"   \u263A    &   \",\n\t\t\t\"  \u203C     &   \",\n\t\t\t\" \u263A     &    \",\n\t\t\t\"\u203C      &    \",\n\t\t\t\"      &     \",\n\t\t\t\"      &     \",\n\t\t\t\"     &   \u2591  \",\n\t\t\t\"     &   \u2592  \",\n\t\t\t\"    &    \u2593  \",\n\t\t\t\"    &    \u00A3  \",\n\t\t\t\"   &    \u2591\u00A3  \",\n\t\t\t\"   &    \u2592\u00A3  \",\n\t\t\t\"  &     \u2593\u00A3  \",\n\t\t\t\"  &     \u00A3\u00A3  \",\n\t\t\t\" &     \u2591\u00A3\u00A3  \",\n\t\t\t\" &     \u2592\u00A3\u00A3  \",\n\t\t\t\"&      \u2593\u00A3\u00A3  \",\n\t\t\t\"&      \u00A3\u00A3\u00A3  \",\n\t\t\t\"      \u2591\u00A3\u00A3\u00A3  \",\n\t\t\t\"      \u2592\u00A3\u00A3\u00A3  \",\n\t\t\t\"      \u2593\u00A3\u00A3\u00A3  \",\n\t\t\t\"      \u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u2591\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u2592\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u2593\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"     \u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u2591\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u2592\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u2593\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"    \u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u2591\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u2592\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u2593\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"   \u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u2591\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u2592\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u2593\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\"  \u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u2591\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u2592\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u2593\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u2588\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \",\n\t\t\t\" \u2588\u2588\u2588\u2588\u2588\u2588\u00A3\u00A3\u00A3  \"\n\t\t]\n\t},\n\t\"fish\": {\n\t\t\"interval\": 80,\n\t\t\"frames\": [\n\t\t\t\"~~~~~~~~~~~~~~~~~~~~\",\n\t\t\t\"> ~~~~~~~~~~~~~~~~~~\",\n\t\t\t\"\u00BA> ~~~~~~~~~~~~~~~~~\",\n\t\t\t\"(\u00BA> ~~~~~~~~~~~~~~~~\",\n\t\t\t\"((\u00BA> ~~~~~~~~~~~~~~~\",\n\t\t\t\"<((\u00BA> ~~~~~~~~~~~~~~\",\n\t\t\t\"><((\u00BA> ~~~~~~~~~~~~~\",\n\t\t\t\" ><((\u00BA> ~~~~~~~~~~~~\",\n\t\t\t\"~ ><((\u00BA> ~~~~~~~~~~~\",\n\t\t\t\"~~ <>((\u00BA> ~~~~~~~~~~\",\n\t\t\t\"~~~ ><((\u00BA> ~~~~~~~~~\",\n\t\t\t\"~~~~ <>((\u00BA> ~~~~~~~~\",\n\t\t\t\"~~~~~ ><((\u00BA> ~~~~~~~\",\n\t\t\t\"~~~~~~ <>((\u00BA> ~~~~~~\",\n\t\t\t\"~~~~~~~ ><((\u00BA> ~~~~~\",\n\t\t\t\"~~~~~~~~ <>((\u00BA> ~~~~\",\n\t\t\t\"~~~~~~~~~ ><((\u00BA> ~~~\",\n\t\t\t\"~~~~~~~~~~ <>((\u00BA> ~~\",\n\t\t\t\"~~~~~~~~~~~ ><((\u00BA> ~\",\n\t\t\t\"~~~~~~~~~~~~ <>((\u00BA> \",\n\t\t\t\"~~~~~~~~~~~~~ ><((\u00BA>\",\n\t\t\t\"~~~~~~~~~~~~~~ <>((\u00BA\",\n\t\t\t\"~~~~~~~~~~~~~~~ ><((\",\n\t\t\t\"~~~~~~~~~~~~~~~~ <>(\",\n\t\t\t\"~~~~~~~~~~~~~~~~~ ><\",\n\t\t\t\"~~~~~~~~~~~~~~~~~~ <\",\n\t\t\t\"~~~~~~~~~~~~~~~~~~~~\"\n\t\t]\n \t}\n}\n", "import spinners from './spinners.json' with {type: 'json'};\n\nexport default spinners;\n\nconst spinnersList = Object.keys(spinners);\n\nexport function randomSpinner() {\n\tconst randomIndex = Math.floor(Math.random() * spinnersList.length);\n\tconst spinnerName = spinnersList[randomIndex];\n\treturn spinners[spinnerName];\n}\n", "import tty from 'node:tty';\n\n// eslint-disable-next-line no-warning-comments\n// TODO: Use a better method when it's added to Node.js (https://github.com/nodejs/node/pull/40240)\n// Lots of optionals here to support Deno.\nconst hasColors = tty?.WriteStream?.prototype?.hasColors?.() ?? false;\n\nconst format = (open, close) => {\n\tif (!hasColors) {\n\t\treturn input => input;\n\t}\n\n\tconst openCode = `\\u001B[${open}m`;\n\tconst closeCode = `\\u001B[${close}m`;\n\n\treturn input => {\n\t\tconst string = input + ''; // eslint-disable-line no-implicit-coercion -- This is faster.\n\t\tlet index = string.indexOf(closeCode);\n\n\t\tif (index === -1) {\n\t\t\t// Note: Intentionally not using string interpolation for performance reasons.\n\t\t\treturn openCode + string + closeCode;\n\t\t}\n\n\t\t// Handle nested colors.\n\n\t\t// We could have done this, but it's too slow (as of Node.js 22).\n\t\t// return openCode + string.replaceAll(closeCode, (close === 22 ? closeCode : '') + openCode) + closeCode;\n\n\t\tlet result = openCode;\n\t\tlet lastIndex = 0;\n\n\t\t// SGR 22 resets both bold (1) and dim (2). When we encounter a nested\n\t\t// close for styles that use 22, we need to re-open the outer style.\n\t\tconst reopenOnNestedClose = close === 22;\n\t\tconst replaceCode = (reopenOnNestedClose ? closeCode : '') + openCode;\n\n\t\twhile (index !== -1) {\n\t\t\tresult += string.slice(lastIndex, index) + replaceCode;\n\t\t\tlastIndex = index + closeCode.length;\n\t\t\tindex = string.indexOf(closeCode, lastIndex);\n\t\t}\n\n\t\tresult += string.slice(lastIndex) + closeCode;\n\n\t\treturn result;\n\t};\n};\n\nexport const reset = format(0, 0);\nexport const bold = format(1, 22);\nexport const dim = format(2, 22);\nexport const italic = format(3, 23);\nexport const underline = format(4, 24);\nexport const overline = format(53, 55);\nexport const inverse = format(7, 27);\nexport const hidden = format(8, 28);\nexport const strikethrough = format(9, 29);\n\nexport const black = format(30, 39);\nexport const red = format(31, 39);\nexport const green = format(32, 39);\nexport const yellow = format(33, 39);\nexport const blue = format(34, 39);\nexport const magenta = format(35, 39);\nexport const cyan = format(36, 39);\nexport const white = format(37, 39);\nexport const gray = format(90, 39);\n\nexport const bgBlack = format(40, 49);\nexport const bgRed = format(41, 49);\nexport const bgGreen = format(42, 49);\nexport const bgYellow = format(43, 49);\nexport const bgBlue = format(44, 49);\nexport const bgMagenta = format(45, 49);\nexport const bgCyan = format(46, 49);\nexport const bgWhite = format(47, 49);\nexport const bgGray = format(100, 49);\n\nexport const redBright = format(91, 39);\nexport const greenBright = format(92, 39);\nexport const yellowBright = format(93, 39);\nexport const blueBright = format(94, 39);\nexport const magentaBright = format(95, 39);\nexport const cyanBright = format(96, 39);\nexport const whiteBright = format(97, 39);\n\nexport const bgRedBright = format(101, 49);\nexport const bgGreenBright = format(102, 49);\nexport const bgYellowBright = format(103, 49);\nexport const bgBlueBright = format(104, 49);\nexport const bgMagentaBright = format(105, 49);\nexport const bgCyanBright = format(106, 49);\nexport const bgWhiteBright = format(107, 49);\n", "export * from './base.js';\nexport * as default from './base.js';\n", "import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tconst {env} = process;\n\tconst {TERM, TERM_PROGRAM} = env;\n\n\tif (process.platform !== 'win32') {\n\t\treturn TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| TERM_PROGRAM === 'vscode'\n\t\t|| TERM === 'xterm-256color'\n\t\t|| TERM === 'alacritty'\n\t\t|| TERM === 'rxvt-unicode'\n\t\t|| TERM === 'rxvt-unicode-256color'\n\t\t|| env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n", "import {\n\tblue,\n\tgreen,\n\tyellow,\n\tred,\n} from 'yoctocolors';\nimport isUnicodeSupported from 'is-unicode-supported';\n\nconst _isUnicodeSupported = isUnicodeSupported();\n\nexport const info = blue(_isUnicodeSupported ? '\u2139' : 'i');\nexport const success = green(_isUnicodeSupported ? '\u2714' : '\u221A');\nexport const warning = yellow(_isUnicodeSupported ? '\u26A0' : '\u203C');\nexport const error = red(_isUnicodeSupported ? '\u2716' : '\u00D7');\n", "export * as default from './symbols.js';\n", "export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\n\t// OSC sequences only: ESC ] ... ST (non-greedy until the first ST)\n\tconst osc = `(?:\\\\u001B\\\\][\\\\s\\\\S]*?${ST})`;\n\n\t// CSI and related: ESC/C1, optional intermediates, optional params (supports ; and :) then final byte\n\tconst csi = '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:\\\\d{1,4}(?:[;:]\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]';\n\n\tconst pattern = `${osc}|${csi}`;\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n", "import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n", "// Generated code.\n\nfunction isAmbiguous(x) {\n\treturn x === 0xA1\n\t\t|| x === 0xA4\n\t\t|| x === 0xA7\n\t\t|| x === 0xA8\n\t\t|| x === 0xAA\n\t\t|| x === 0xAD\n\t\t|| x === 0xAE\n\t\t|| x >= 0xB0 && x <= 0xB4\n\t\t|| x >= 0xB6 && x <= 0xBA\n\t\t|| x >= 0xBC && x <= 0xBF\n\t\t|| x === 0xC6\n\t\t|| x === 0xD0\n\t\t|| x === 0xD7\n\t\t|| x === 0xD8\n\t\t|| x >= 0xDE && x <= 0xE1\n\t\t|| x === 0xE6\n\t\t|| x >= 0xE8 && x <= 0xEA\n\t\t|| x === 0xEC\n\t\t|| x === 0xED\n\t\t|| x === 0xF0\n\t\t|| x === 0xF2\n\t\t|| x === 0xF3\n\t\t|| x >= 0xF7 && x <= 0xFA\n\t\t|| x === 0xFC\n\t\t|| x === 0xFE\n\t\t|| x === 0x101\n\t\t|| x === 0x111\n\t\t|| x === 0x113\n\t\t|| x === 0x11B\n\t\t|| x === 0x126\n\t\t|| x === 0x127\n\t\t|| x === 0x12B\n\t\t|| x >= 0x131 && x <= 0x133\n\t\t|| x === 0x138\n\t\t|| x >= 0x13F && x <= 0x142\n\t\t|| x === 0x144\n\t\t|| x >= 0x148 && x <= 0x14B\n\t\t|| x === 0x14D\n\t\t|| x === 0x152\n\t\t|| x === 0x153\n\t\t|| x === 0x166\n\t\t|| x === 0x167\n\t\t|| x === 0x16B\n\t\t|| x === 0x1CE\n\t\t|| x === 0x1D0\n\t\t|| x === 0x1D2\n\t\t|| x === 0x1D4\n\t\t|| x === 0x1D6\n\t\t|| x === 0x1D8\n\t\t|| x === 0x1DA\n\t\t|| x === 0x1DC\n\t\t|| x === 0x251\n\t\t|| x === 0x261\n\t\t|| x === 0x2C4\n\t\t|| x === 0x2C7\n\t\t|| x >= 0x2C9 && x <= 0x2CB\n\t\t|| x === 0x2CD\n\t\t|| x === 0x2D0\n\t\t|| x >= 0x2D8 && x <= 0x2DB\n\t\t|| x === 0x2DD\n\t\t|| x === 0x2DF\n\t\t|| x >= 0x300 && x <= 0x36F\n\t\t|| x >= 0x391 && x <= 0x3A1\n\t\t|| x >= 0x3A3 && x <= 0x3A9\n\t\t|| x >= 0x3B1 && x <= 0x3C1\n\t\t|| x >= 0x3C3 && x <= 0x3C9\n\t\t|| x === 0x401\n\t\t|| x >= 0x410 && x <= 0x44F\n\t\t|| x === 0x451\n\t\t|| x === 0x2010\n\t\t|| x >= 0x2013 && x <= 0x2016\n\t\t|| x === 0x2018\n\t\t|| x === 0x2019\n\t\t|| x === 0x201C\n\t\t|| x === 0x201D\n\t\t|| x >= 0x2020 && x <= 0x2022\n\t\t|| x >= 0x2024 && x <= 0x2027\n\t\t|| x === 0x2030\n\t\t|| x === 0x2032\n\t\t|| x === 0x2033\n\t\t|| x === 0x2035\n\t\t|| x === 0x203B\n\t\t|| x === 0x203E\n\t\t|| x === 0x2074\n\t\t|| x === 0x207F\n\t\t|| x >= 0x2081 && x <= 0x2084\n\t\t|| x === 0x20AC\n\t\t|| x === 0x2103\n\t\t|| x === 0x2105\n\t\t|| x === 0x2109\n\t\t|| x === 0x2113\n\t\t|| x === 0x2116\n\t\t|| x === 0x2121\n\t\t|| x === 0x2122\n\t\t|| x === 0x2126\n\t\t|| x === 0x212B\n\t\t|| x === 0x2153\n\t\t|| x === 0x2154\n\t\t|| x >= 0x215B && x <= 0x215E\n\t\t|| x >= 0x2160 && x <= 0x216B\n\t\t|| x >= 0x2170 && x <= 0x2179\n\t\t|| x === 0x2189\n\t\t|| x >= 0x2190 && x <= 0x2199\n\t\t|| x === 0x21B8\n\t\t|| x === 0x21B9\n\t\t|| x === 0x21D2\n\t\t|| x === 0x21D4\n\t\t|| x === 0x21E7\n\t\t|| x === 0x2200\n\t\t|| x === 0x2202\n\t\t|| x === 0x2203\n\t\t|| x === 0x2207\n\t\t|| x === 0x2208\n\t\t|| x === 0x220B\n\t\t|| x === 0x220F\n\t\t|| x === 0x2211\n\t\t|| x === 0x2215\n\t\t|| x === 0x221A\n\t\t|| x >= 0x221D && x <= 0x2220\n\t\t|| x === 0x2223\n\t\t|| x === 0x2225\n\t\t|| x >= 0x2227 && x <= 0x222C\n\t\t|| x === 0x222E\n\t\t|| x >= 0x2234 && x <= 0x2237\n\t\t|| x === 0x223C\n\t\t|| x === 0x223D\n\t\t|| x === 0x2248\n\t\t|| x === 0x224C\n\t\t|| x === 0x2252\n\t\t|| x === 0x2260\n\t\t|| x === 0x2261\n\t\t|| x >= 0x2264 && x <= 0x2267\n\t\t|| x === 0x226A\n\t\t|| x === 0x226B\n\t\t|| x === 0x226E\n\t\t|| x === 0x226F\n\t\t|| x === 0x2282\n\t\t|| x === 0x2283\n\t\t|| x === 0x2286\n\t\t|| x === 0x2287\n\t\t|| x === 0x2295\n\t\t|| x === 0x2299\n\t\t|| x === 0x22A5\n\t\t|| x === 0x22BF\n\t\t|| x === 0x2312\n\t\t|| x >= 0x2460 && x <= 0x24E9\n\t\t|| x >= 0x24EB && x <= 0x254B\n\t\t|| x >= 0x2550 && x <= 0x2573\n\t\t|| x >= 0x2580 && x <= 0x258F\n\t\t|| x >= 0x2592 && x <= 0x2595\n\t\t|| x === 0x25A0\n\t\t|| x === 0x25A1\n\t\t|| x >= 0x25A3 && x <= 0x25A9\n\t\t|| x === 0x25B2\n\t\t|| x === 0x25B3\n\t\t|| x === 0x25B6\n\t\t|| x === 0x25B7\n\t\t|| x === 0x25BC\n\t\t|| x === 0x25BD\n\t\t|| x === 0x25C0\n\t\t|| x === 0x25C1\n\t\t|| x >= 0x25C6 && x <= 0x25C8\n\t\t|| x === 0x25CB\n\t\t|| x >= 0x25CE && x <= 0x25D1\n\t\t|| x >= 0x25E2 && x <= 0x25E5\n\t\t|| x === 0x25EF\n\t\t|| x === 0x2605\n\t\t|| x === 0x2606\n\t\t|| x === 0x2609\n\t\t|| x === 0x260E\n\t\t|| x === 0x260F\n\t\t|| x === 0x261C\n\t\t|| x === 0x261E\n\t\t|| x === 0x2640\n\t\t|| x === 0x2642\n\t\t|| x === 0x2660\n\t\t|| x === 0x2661\n\t\t|| x >= 0x2663 && x <= 0x2665\n\t\t|| x >= 0x2667 && x <= 0x266A\n\t\t|| x === 0x266C\n\t\t|| x === 0x266D\n\t\t|| x === 0x266F\n\t\t|| x === 0x269E\n\t\t|| x === 0x269F\n\t\t|| x === 0x26BF\n\t\t|| x >= 0x26C6 && x <= 0x26CD\n\t\t|| x >= 0x26CF && x <= 0x26D3\n\t\t|| x >= 0x26D5 && x <= 0x26E1\n\t\t|| x === 0x26E3\n\t\t|| x === 0x26E8\n\t\t|| x === 0x26E9\n\t\t|| x >= 0x26EB && x <= 0x26F1\n\t\t|| x === 0x26F4\n\t\t|| x >= 0x26F6 && x <= 0x26F9\n\t\t|| x === 0x26FB\n\t\t|| x === 0x26FC\n\t\t|| x === 0x26FE\n\t\t|| x === 0x26FF\n\t\t|| x === 0x273D\n\t\t|| x >= 0x2776 && x <= 0x277F\n\t\t|| x >= 0x2B56 && x <= 0x2B59\n\t\t|| x >= 0x3248 && x <= 0x324F\n\t\t|| x >= 0xE000 && x <= 0xF8FF\n\t\t|| x >= 0xFE00 && x <= 0xFE0F\n\t\t|| x === 0xFFFD\n\t\t|| x >= 0x1F100 && x <= 0x1F10A\n\t\t|| x >= 0x1F110 && x <= 0x1F12D\n\t\t|| x >= 0x1F130 && x <= 0x1F169\n\t\t|| x >= 0x1F170 && x <= 0x1F18D\n\t\t|| x === 0x1F18F\n\t\t|| x === 0x1F190\n\t\t|| x >= 0x1F19B && x <= 0x1F1AC\n\t\t|| x >= 0xE0100 && x <= 0xE01EF\n\t\t|| x >= 0xF0000 && x <= 0xFFFFD\n\t\t|| x >= 0x100000 && x <= 0x10FFFD;\n}\n\nfunction isFullWidth(x) {\n\treturn x === 0x3000\n\t\t|| x >= 0xFF01 && x <= 0xFF60\n\t\t|| x >= 0xFFE0 && x <= 0xFFE6;\n}\n\nfunction isWide(x) {\n\treturn x >= 0x1100 && x <= 0x115F\n\t\t|| x === 0x231A\n\t\t|| x === 0x231B\n\t\t|| x === 0x2329\n\t\t|| x === 0x232A\n\t\t|| x >= 0x23E9 && x <= 0x23EC\n\t\t|| x === 0x23F0\n\t\t|| x === 0x23F3\n\t\t|| x === 0x25FD\n\t\t|| x === 0x25FE\n\t\t|| x === 0x2614\n\t\t|| x === 0x2615\n\t\t|| x >= 0x2630 && x <= 0x2637\n\t\t|| x >= 0x2648 && x <= 0x2653\n\t\t|| x === 0x267F\n\t\t|| x >= 0x268A && x <= 0x268F\n\t\t|| x === 0x2693\n\t\t|| x === 0x26A1\n\t\t|| x === 0x26AA\n\t\t|| x === 0x26AB\n\t\t|| x === 0x26BD\n\t\t|| x === 0x26BE\n\t\t|| x === 0x26C4\n\t\t|| x === 0x26C5\n\t\t|| x === 0x26CE\n\t\t|| x === 0x26D4\n\t\t|| x === 0x26EA\n\t\t|| x === 0x26F2\n\t\t|| x === 0x26F3\n\t\t|| x === 0x26F5\n\t\t|| x === 0x26FA\n\t\t|| x === 0x26FD\n\t\t|| x === 0x2705\n\t\t|| x === 0x270A\n\t\t|| x === 0x270B\n\t\t|| x === 0x2728\n\t\t|| x === 0x274C\n\t\t|| x === 0x274E\n\t\t|| x >= 0x2753 && x <= 0x2755\n\t\t|| x === 0x2757\n\t\t|| x >= 0x2795 && x <= 0x2797\n\t\t|| x === 0x27B0\n\t\t|| x === 0x27BF\n\t\t|| x === 0x2B1B\n\t\t|| x === 0x2B1C\n\t\t|| x === 0x2B50\n\t\t|| x === 0x2B55\n\t\t|| x >= 0x2E80 && x <= 0x2E99\n\t\t|| x >= 0x2E9B && x <= 0x2EF3\n\t\t|| x >= 0x2F00 && x <= 0x2FD5\n\t\t|| x >= 0x2FF0 && x <= 0x2FFF\n\t\t|| x >= 0x3001 && x <= 0x303E\n\t\t|| x >= 0x3041 && x <= 0x3096\n\t\t|| x >= 0x3099 && x <= 0x30FF\n\t\t|| x >= 0x3105 && x <= 0x312F\n\t\t|| x >= 0x3131 && x <= 0x318E\n\t\t|| x >= 0x3190 && x <= 0x31E5\n\t\t|| x >= 0x31EF && x <= 0x321E\n\t\t|| x >= 0x3220 && x <= 0x3247\n\t\t|| x >= 0x3250 && x <= 0xA48C\n\t\t|| x >= 0xA490 && x <= 0xA4C6\n\t\t|| x >= 0xA960 && x <= 0xA97C\n\t\t|| x >= 0xAC00 && x <= 0xD7A3\n\t\t|| x >= 0xF900 && x <= 0xFAFF\n\t\t|| x >= 0xFE10 && x <= 0xFE19\n\t\t|| x >= 0xFE30 && x <= 0xFE52\n\t\t|| x >= 0xFE54 && x <= 0xFE66\n\t\t|| x >= 0xFE68 && x <= 0xFE6B\n\t\t|| x >= 0x16FE0 && x <= 0x16FE4\n\t\t|| x >= 0x16FF0 && x <= 0x16FF6\n\t\t|| x >= 0x17000 && x <= 0x18CD5\n\t\t|| x >= 0x18CFF && x <= 0x18D1E\n\t\t|| x >= 0x18D80 && x <= 0x18DF2\n\t\t|| x >= 0x1AFF0 && x <= 0x1AFF3\n\t\t|| x >= 0x1AFF5 && x <= 0x1AFFB\n\t\t|| x === 0x1AFFD\n\t\t|| x === 0x1AFFE\n\t\t|| x >= 0x1B000 && x <= 0x1B122\n\t\t|| x === 0x1B132\n\t\t|| x >= 0x1B150 && x <= 0x1B152\n\t\t|| x === 0x1B155\n\t\t|| x >= 0x1B164 && x <= 0x1B167\n\t\t|| x >= 0x1B170 && x <= 0x1B2FB\n\t\t|| x >= 0x1D300 && x <= 0x1D356\n\t\t|| x >= 0x1D360 && x <= 0x1D376\n\t\t|| x === 0x1F004\n\t\t|| x === 0x1F0CF\n\t\t|| x === 0x1F18E\n\t\t|| x >= 0x1F191 && x <= 0x1F19A\n\t\t|| x >= 0x1F200 && x <= 0x1F202\n\t\t|| x >= 0x1F210 && x <= 0x1F23B\n\t\t|| x >= 0x1F240 && x <= 0x1F248\n\t\t|| x === 0x1F250\n\t\t|| x === 0x1F251\n\t\t|| x >= 0x1F260 && x <= 0x1F265\n\t\t|| x >= 0x1F300 && x <= 0x1F320\n\t\t|| x >= 0x1F32D && x <= 0x1F335\n\t\t|| x >= 0x1F337 && x <= 0x1F37C\n\t\t|| x >= 0x1F37E && x <= 0x1F393\n\t\t|| x >= 0x1F3A0 && x <= 0x1F3CA\n\t\t|| x >= 0x1F3CF && x <= 0x1F3D3\n\t\t|| x >= 0x1F3E0 && x <= 0x1F3F0\n\t\t|| x === 0x1F3F4\n\t\t|| x >= 0x1F3F8 && x <= 0x1F43E\n\t\t|| x === 0x1F440\n\t\t|| x >= 0x1F442 && x <= 0x1F4FC\n\t\t|| x >= 0x1F4FF && x <= 0x1F53D\n\t\t|| x >= 0x1F54B && x <= 0x1F54E\n\t\t|| x >= 0x1F550 && x <= 0x1F567\n\t\t|| x === 0x1F57A\n\t\t|| x === 0x1F595\n\t\t|| x === 0x1F596\n\t\t|| x === 0x1F5A4\n\t\t|| x >= 0x1F5FB && x <= 0x1F64F\n\t\t|| x >= 0x1F680 && x <= 0x1F6C5\n\t\t|| x === 0x1F6CC\n\t\t|| x >= 0x1F6D0 && x <= 0x1F6D2\n\t\t|| x >= 0x1F6D5 && x <= 0x1F6D8\n\t\t|| x >= 0x1F6DC && x <= 0x1F6DF\n\t\t|| x === 0x1F6EB\n\t\t|| x === 0x1F6EC\n\t\t|| x >= 0x1F6F4 && x <= 0x1F6FC\n\t\t|| x >= 0x1F7E0 && x <= 0x1F7EB\n\t\t|| x === 0x1F7F0\n\t\t|| x >= 0x1F90C && x <= 0x1F93A\n\t\t|| x >= 0x1F93C && x <= 0x1F945\n\t\t|| x >= 0x1F947 && x <= 0x1F9FF\n\t\t|| x >= 0x1FA70 && x <= 0x1FA7C\n\t\t|| x >= 0x1FA80 && x <= 0x1FA8A\n\t\t|| x >= 0x1FA8E && x <= 0x1FAC6\n\t\t|| x === 0x1FAC8\n\t\t|| x >= 0x1FACD && x <= 0x1FADC\n\t\t|| x >= 0x1FADF && x <= 0x1FAEA\n\t\t|| x >= 0x1FAEF && x <= 0x1FAF8\n\t\t|| x >= 0x20000 && x <= 0x2FFFD\n\t\t|| x >= 0x30000 && x <= 0x3FFFD;\n}\n\nfunction getCategory(x) {\n\tif (isAmbiguous(x)) return 'ambiguous';\n\n\tif (isFullWidth(x)) return 'fullwidth';\n\n\tif (\n\t\tx === 0x20A9\n\t\t|| x >= 0xFF61 && x <= 0xFFBE\n\t\t|| x >= 0xFFC2 && x <= 0xFFC7\n\t\t|| x >= 0xFFCA && x <= 0xFFCF\n\t\t|| x >= 0xFFD2 && x <= 0xFFD7\n\t\t|| x >= 0xFFDA && x <= 0xFFDC\n\t\t|| x >= 0xFFE8 && x <= 0xFFEE\n\t) {\n\t\treturn 'halfwidth';\n\t}\n\n\tif (\n\t\tx >= 0x20 && x <= 0x7E\n\t\t|| x === 0xA2\n\t\t|| x === 0xA3\n\t\t|| x === 0xA5\n\t\t|| x === 0xA6\n\t\t|| x === 0xAC\n\t\t|| x === 0xAF\n\t\t|| x >= 0x27E6 && x <= 0x27ED\n\t\t|| x === 0x2985\n\t\t|| x === 0x2986\n\t) {\n\t\treturn 'narrow';\n\t}\n\n\tif (isWide(x)) return 'wide';\n\n\treturn 'neutral';\n}\n\nexport {isAmbiguous, isFullWidth, isWide, getCategory};\n", "import {getCategory, isAmbiguous, isFullWidth, isWide} from './lookup.js';\n\nfunction validate(codePoint) {\n\tif (!Number.isSafeInteger(codePoint)) {\n\t\tthrow new TypeError(`Expected a code point, got \\`${typeof codePoint}\\`.`);\n\t}\n}\n\nexport function eastAsianWidthType(codePoint) {\n\tvalidate(codePoint);\n\n\treturn getCategory(codePoint);\n}\n\nexport function eastAsianWidth(codePoint, {ambiguousAsWide = false} = {}) {\n\tvalidate(codePoint);\n\n\tif (\n\t\tisFullWidth(codePoint)\n\t\t|| isWide(codePoint)\n\t\t|| (ambiguousAsWide && isAmbiguous(codePoint))\n\t) {\n\t\treturn 2;\n\t}\n\n\treturn 1;\n}\n\n// Private exports for https://github.com/sindresorhus/is-fullwidth-code-point\nexport {isFullWidth as _isFullWidth, isWide as _isWide} from './lookup.js';\n", "import stripAnsi from 'strip-ansi';\nimport {eastAsianWidth} from 'get-east-asian-width';\n\n/**\nLogic:\n- Segment graphemes to match how terminals render clusters.\n- Width rules:\n\t1. Skip non-printing clusters (Default_Ignorable, Control, pure Mark, lone Surrogates). Tabs are ignored by design.\n\t2. RGI emoji clusters (\\p{RGI_Emoji}) are double-width.\n\t3. Otherwise use East Asian Width of the cluster\u2019s first visible code point, and add widths for trailing Halfwidth/Fullwidth Forms within the same cluster (e.g., dakuten/handakuten/prolonged sound mark).\n*/\n\nconst segmenter = new Intl.Segmenter();\n\n// Whole-cluster zero-width\nconst zeroWidthClusterRegex = /^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Mark}|\\p{Surrogate})+$/v;\n\n// Pick the base scalar if the cluster starts with Prepend/Format/Marks\nconst leadingNonPrintingRegex = /^[\\p{Default_Ignorable_Code_Point}\\p{Control}\\p{Format}\\p{Mark}\\p{Surrogate}]+/v;\n\n// RGI emoji sequences\nconst rgiEmojiRegex = /^\\p{RGI_Emoji}$/v;\n\nfunction baseVisible(segment) {\n\treturn segment.replace(leadingNonPrintingRegex, '');\n}\n\nfunction isZeroWidthCluster(segment) {\n\treturn zeroWidthClusterRegex.test(segment);\n}\n\nfunction trailingHalfwidthWidth(segment, eastAsianWidthOptions) {\n\tlet extra = 0;\n\tif (segment.length > 1) {\n\t\tfor (const char of segment.slice(1)) {\n\t\t\tif (char >= '\\uFF00' && char <= '\\uFFEF') {\n\t\t\t\textra += eastAsianWidth(char.codePointAt(0), eastAsianWidthOptions);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn extra;\n}\n\nexport default function stringWidth(input, options = {}) {\n\tif (typeof input !== 'string' || input.length === 0) {\n\t\treturn 0;\n\t}\n\n\tconst {\n\t\tambiguousIsNarrow = true,\n\t\tcountAnsiEscapeCodes = false,\n\t} = options;\n\n\tlet string = input;\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tlet width = 0;\n\tconst eastAsianWidthOptions = {ambiguousAsWide: !ambiguousIsNarrow};\n\n\tfor (const {segment} of segmenter.segment(string)) {\n\t\t// Zero-width / non-printing clusters\n\t\tif (isZeroWidthCluster(segment)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Emoji width logic\n\t\tif (rgiEmojiRegex.test(segment)) {\n\t\t\twidth += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Everything else: EAW of the cluster\u2019s first visible scalar\n\t\tconst codePoint = baseVisible(segment).codePointAt(0);\n\t\twidth += eastAsianWidth(codePoint, eastAsianWidthOptions);\n\n\t\t// Add width for trailing Halfwidth and Fullwidth Forms (e.g., \uFF9E, \uFF9F, \uFF70)\n\t\twidth += trailingHalfwidthWidth(segment, eastAsianWidthOptions);\n\t}\n\n\treturn width;\n}\n", "export default function isInteractive({stream = process.stdout} = {}) {\n\treturn Boolean(\n\t\tstream && stream.isTTY &&\n\t\tprocess.env.TERM !== 'dumb' &&\n\t\t!('CI' in process.env)\n\t);\n}\n", "import process from 'node:process';\n\nconst ASCII_ETX_CODE = 0x03; // Ctrl+C emits this code\n\nclass StdinDiscarder {\n\t#activeCount = 0;\n\n\tstart() {\n\t\tthis.#activeCount++;\n\n\t\tif (this.#activeCount === 1) {\n\t\t\tthis.#realStart();\n\t\t}\n\t}\n\n\tstop() {\n\t\tif (this.#activeCount <= 0) {\n\t\t\tthrow new Error('`stop` called more times than `start`');\n\t\t}\n\n\t\tthis.#activeCount--;\n\n\t\tif (this.#activeCount === 0) {\n\t\t\tthis.#realStop();\n\t\t}\n\t}\n\n\t#realStart() {\n\t\t// No known way to make it work reliably on Windows.\n\t\tif (process.platform === 'win32' || !process.stdin.isTTY) {\n\t\t\treturn;\n\t\t}\n\n\t\tprocess.stdin.setRawMode(true);\n\t\tprocess.stdin.on('data', this.#handleInput);\n\t\tprocess.stdin.resume();\n\t}\n\n\t#realStop() {\n\t\tif (!process.stdin.isTTY) {\n\t\t\treturn;\n\t\t}\n\n\t\tprocess.stdin.off('data', this.#handleInput);\n\t\tprocess.stdin.pause();\n\t\tprocess.stdin.setRawMode(false);\n\t}\n\n\t#handleInput(chunk) {\n\t\t// Allow Ctrl+C to gracefully exit.\n\t\tif (chunk[0] === ASCII_ETX_CODE) {\n\t\t\tprocess.emit('SIGINT');\n\t\t}\n\t}\n}\n\nconst stdinDiscarder = new StdinDiscarder();\n\nexport default stdinDiscarder;\n", "import process from 'node:process';\nimport chalk from 'chalk';\nimport cliCursor from 'cli-cursor';\nimport cliSpinners from 'cli-spinners';\nimport logSymbols from 'log-symbols';\nimport stripAnsi from 'strip-ansi';\nimport stringWidth from 'string-width';\nimport isInteractive from 'is-interactive';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport stdinDiscarder from 'stdin-discarder';\n\nclass Ora {\n\t#linesToClear = 0;\n\t#isDiscardingStdin = false;\n\t#lineCount = 0;\n\t#frameIndex = -1;\n\t#lastSpinnerFrameTime = 0;\n\t#lastIndent = 0;\n\t#options;\n\t#spinner;\n\t#stream;\n\t#id;\n\t#initialInterval;\n\t#isEnabled;\n\t#isSilent;\n\t#indent;\n\t#text;\n\t#prefixText;\n\t#suffixText;\n\tcolor;\n\n\tconstructor(options) {\n\t\tif (typeof options === 'string') {\n\t\t\toptions = {\n\t\t\t\ttext: options,\n\t\t\t};\n\t\t}\n\n\t\tthis.#options = {\n\t\t\tcolor: 'cyan',\n\t\t\tstream: process.stderr,\n\t\t\tdiscardStdin: true,\n\t\t\thideCursor: true,\n\t\t\t...options,\n\t\t};\n\n\t\t// Public\n\t\tthis.color = this.#options.color;\n\n\t\t// It's important that these use the public setters.\n\t\tthis.spinner = this.#options.spinner;\n\n\t\tthis.#initialInterval = this.#options.interval;\n\t\tthis.#stream = this.#options.stream;\n\t\tthis.#isEnabled = typeof this.#options.isEnabled === 'boolean' ? this.#options.isEnabled : isInteractive({stream: this.#stream});\n\t\tthis.#isSilent = typeof this.#options.isSilent === 'boolean' ? this.#options.isSilent : false;\n\n\t\t// Set *after* `this.#stream`.\n\t\t// It's important that these use the public setters.\n\t\tthis.text = this.#options.text;\n\t\tthis.prefixText = this.#options.prefixText;\n\t\tthis.suffixText = this.#options.suffixText;\n\t\tthis.indent = this.#options.indent;\n\n\t\tif (process.env.NODE_ENV === 'test') {\n\t\t\tthis._stream = this.#stream;\n\t\t\tthis._isEnabled = this.#isEnabled;\n\n\t\t\tObject.defineProperty(this, '_linesToClear', {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#linesToClear;\n\t\t\t\t},\n\t\t\t\tset(newValue) {\n\t\t\t\t\tthis.#linesToClear = newValue;\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tObject.defineProperty(this, '_frameIndex', {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#frameIndex;\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tObject.defineProperty(this, '_lineCount', {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#lineCount;\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\tget indent() {\n\t\treturn this.#indent;\n\t}\n\n\tset indent(indent = 0) {\n\t\tif (!(indent >= 0 && Number.isInteger(indent))) {\n\t\t\tthrow new Error('The `indent` option must be an integer from 0 and up');\n\t\t}\n\n\t\tthis.#indent = indent;\n\t\tthis.#updateLineCount();\n\t}\n\n\tget interval() {\n\t\treturn this.#initialInterval ?? this.#spinner.interval ?? 100;\n\t}\n\n\tget spinner() {\n\t\treturn this.#spinner;\n\t}\n\n\tset spinner(spinner) {\n\t\tthis.#frameIndex = -1;\n\t\tthis.#initialInterval = undefined;\n\n\t\tif (typeof spinner === 'object') {\n\t\t\tif (!Array.isArray(spinner.frames) || spinner.frames.length === 0 || spinner.frames.some(frame => typeof frame !== 'string')) {\n\t\t\t\tthrow new Error('The given spinner must have a non-empty `frames` array of strings');\n\t\t\t}\n\n\t\t\tif (spinner.interval !== undefined && !(Number.isInteger(spinner.interval) && spinner.interval > 0)) {\n\t\t\t\tthrow new Error('`spinner.interval` must be a positive integer if provided');\n\t\t\t}\n\n\t\t\tthis.#spinner = spinner;\n\t\t} else if (!isUnicodeSupported()) {\n\t\t\tthis.#spinner = cliSpinners.line;\n\t\t} else if (spinner === undefined) {\n\t\t\t// Set default spinner\n\t\t\tthis.#spinner = cliSpinners.dots;\n\t\t} else if (spinner !== 'default' && cliSpinners[spinner]) {\n\t\t\tthis.#spinner = cliSpinners[spinner];\n\t\t} else {\n\t\t\tthrow new Error(`There is no built-in spinner named '${spinner}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`);\n\t\t}\n\t}\n\n\tget text() {\n\t\treturn this.#text;\n\t}\n\n\tset text(value = '') {\n\t\tthis.#text = value;\n\t\tthis.#updateLineCount();\n\t}\n\n\tget prefixText() {\n\t\treturn this.#prefixText;\n\t}\n\n\tset prefixText(value = '') {\n\t\tthis.#prefixText = value;\n\t\tthis.#updateLineCount();\n\t}\n\n\tget suffixText() {\n\t\treturn this.#suffixText;\n\t}\n\n\tset suffixText(value = '') {\n\t\tthis.#suffixText = value;\n\t\tthis.#updateLineCount();\n\t}\n\n\tget isSpinning() {\n\t\treturn this.#id !== undefined;\n\t}\n\n\t#formatAffix(value, separator, placeBefore = false) {\n\t\tconst resolved = typeof value === 'function' ? value() : value;\n\t\tif (typeof resolved === 'string' && resolved !== '') {\n\t\t\treturn placeBefore ? (separator + resolved) : (resolved + separator);\n\t\t}\n\n\t\treturn '';\n\t}\n\n\t#getFullPrefixText(prefixText = this.#prefixText, postfix = ' ') {\n\t\treturn this.#formatAffix(prefixText, postfix, false);\n\t}\n\n\t#getFullSuffixText(suffixText = this.#suffixText, prefix = ' ') {\n\t\treturn this.#formatAffix(suffixText, prefix, true);\n\t}\n\n\t#computeLineCountFrom(text, columns) {\n\t\tlet count = 0;\n\t\tfor (const line of stripAnsi(text).split('\\n')) {\n\t\t\tcount += Math.max(1, Math.ceil(stringWidth(line) / columns));\n\t\t}\n\n\t\treturn count;\n\t}\n\n\t#updateLineCount() {\n\t\tconst columns = this.#stream.columns ?? 80;\n\n\t\t// Simple side-effect free approximation (do not call functions)\n\t\tconst prefixText = typeof this.#prefixText === 'function' ? '' : this.#prefixText;\n\t\tconst suffixText = typeof this.#suffixText === 'function' ? '' : this.#suffixText;\n\t\tconst fullPrefixText = (typeof prefixText === 'string' && prefixText !== '') ? prefixText + ' ' : '';\n\t\tconst fullSuffixText = (typeof suffixText === 'string' && suffixText !== '') ? ' ' + suffixText : '';\n\t\tconst spinnerChar = '-';\n\t\tconst fullText = ' '.repeat(this.#indent) + fullPrefixText + spinnerChar + (typeof this.#text === 'string' ? ' ' + this.#text : '') + fullSuffixText;\n\n\t\tthis.#lineCount = this.#computeLineCountFrom(fullText, columns);\n\t}\n\n\tget isEnabled() {\n\t\treturn this.#isEnabled && !this.#isSilent;\n\t}\n\n\tset isEnabled(value) {\n\t\tif (typeof value !== 'boolean') {\n\t\t\tthrow new TypeError('The `isEnabled` option must be a boolean');\n\t\t}\n\n\t\tthis.#isEnabled = value;\n\t}\n\n\tget isSilent() {\n\t\treturn this.#isSilent;\n\t}\n\n\tset isSilent(value) {\n\t\tif (typeof value !== 'boolean') {\n\t\t\tthrow new TypeError('The `isSilent` option must be a boolean');\n\t\t}\n\n\t\tthis.#isSilent = value;\n\t}\n\n\tframe() {\n\t\t// Ensure we only update the spinner frame at the wanted interval,\n\t\t// even if the render method is called more often.\n\t\tconst now = Date.now();\n\t\tif (this.#frameIndex === -1 || now - this.#lastSpinnerFrameTime >= this.interval) {\n\t\t\tthis.#frameIndex = ++this.#frameIndex % this.#spinner.frames.length;\n\t\t\tthis.#lastSpinnerFrameTime = now;\n\t\t}\n\n\t\tconst {frames} = this.#spinner;\n\t\tlet frame = frames[this.#frameIndex];\n\n\t\tif (this.color) {\n\t\t\tframe = chalk[this.color](frame);\n\t\t}\n\n\t\tconst fullPrefixText = this.#getFullPrefixText(this.#prefixText, ' ');\n\t\tconst fullText = typeof this.text === 'string' ? ' ' + this.text : '';\n\t\tconst fullSuffixText = this.#getFullSuffixText(this.#suffixText, ' ');\n\n\t\treturn fullPrefixText + frame + fullText + fullSuffixText;\n\t}\n\n\tclear() {\n\t\tif (!this.#isEnabled || !this.#stream.isTTY) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.#stream.cursorTo(0);\n\n\t\tfor (let index = 0; index < this.#linesToClear; index++) {\n\t\t\tif (index > 0) {\n\t\t\t\tthis.#stream.moveCursor(0, -1);\n\t\t\t}\n\n\t\t\tthis.#stream.clearLine(1);\n\t\t}\n\n\t\tif (this.#indent || this.#lastIndent !== this.#indent) {\n\t\t\tthis.#stream.cursorTo(this.#indent);\n\t\t}\n\n\t\tthis.#lastIndent = this.#indent;\n\t\tthis.#linesToClear = 0;\n\n\t\treturn this;\n\t}\n\n\trender() {\n\t\tif (!this.#isEnabled || this.#isSilent) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.clear();\n\n\t\tlet frameContent = this.frame();\n\t\tconst columns = this.#stream.columns ?? 80;\n\t\tconst actualLineCount = this.#computeLineCountFrom(frameContent, columns);\n\n\t\t// If content would exceed viewport height, truncate it to prevent garbage\n\t\tconst consoleHeight = this.#stream.rows;\n\t\tif (consoleHeight && consoleHeight > 1 && actualLineCount > consoleHeight) {\n\t\t\tconst lines = frameContent.split('\\n');\n\t\t\tconst maxLines = consoleHeight - 1; // Reserve one line for truncation message\n\t\t\tframeContent = [...lines.slice(0, maxLines), '... (content truncated to fit terminal)'].join('\\n');\n\t\t}\n\n\t\tthis.#stream.write(frameContent);\n\t\tthis.#linesToClear = this.#computeLineCountFrom(frameContent, columns);\n\n\t\treturn this;\n\t}\n\n\tstart(text) {\n\t\tif (text) {\n\t\t\tthis.text = text;\n\t\t}\n\n\t\tif (this.#isSilent) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif (!this.#isEnabled) {\n\t\t\tconst line = ' '.repeat(this.#indent) + this.#getFullPrefixText(this.#prefixText, ' ') + (this.text ? `- ${this.text}` : '') + this.#getFullSuffixText(this.#suffixText, ' ');\n\n\t\t\tif (line.trim() !== '') {\n\t\t\t\tthis.#stream.write(line + '\\n');\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this.isSpinning) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this.#options.hideCursor) {\n\t\t\tcliCursor.hide(this.#stream);\n\t\t}\n\n\t\tif (this.#options.discardStdin && process.stdin.isTTY) {\n\t\t\tthis.#isDiscardingStdin = true;\n\t\t\tstdinDiscarder.start();\n\t\t}\n\n\t\tthis.render();\n\t\tthis.#id = setInterval(this.render.bind(this), this.interval);\n\n\t\treturn this;\n\t}\n\n\tstop() {\n\t\tclearInterval(this.#id);\n\t\tthis.#id = undefined;\n\t\tthis.#frameIndex = 0;\n\n\t\tif (this.#isEnabled) {\n\t\t\tthis.clear();\n\t\t\tif (this.#options.hideCursor) {\n\t\t\t\tcliCursor.show(this.#stream);\n\t\t\t}\n\t\t}\n\n\t\tif (this.#options.discardStdin && process.stdin.isTTY && this.#isDiscardingStdin) {\n\t\t\tstdinDiscarder.stop();\n\t\t\tthis.#isDiscardingStdin = false;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tsucceed(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.success, text});\n\t}\n\n\tfail(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.error, text});\n\t}\n\n\twarn(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.warning, text});\n\t}\n\n\tinfo(text) {\n\t\treturn this.stopAndPersist({symbol: logSymbols.info, text});\n\t}\n\n\tstopAndPersist(options = {}) {\n\t\tif (this.#isSilent) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst prefixText = options.prefixText ?? this.#prefixText;\n\t\tconst fullPrefixText = this.#getFullPrefixText(prefixText, ' ');\n\n\t\tconst symbolText = options.symbol ?? ' ';\n\n\t\tconst text = options.text ?? this.text;\n\t\tconst separatorText = symbolText ? ' ' : '';\n\t\tconst fullText = (typeof text === 'string') ? separatorText + text : '';\n\n\t\tconst suffixText = options.suffixText ?? this.#suffixText;\n\t\tconst fullSuffixText = this.#getFullSuffixText(suffixText, ' ');\n\n\t\tconst textToWrite = fullPrefixText + symbolText + fullText + fullSuffixText + '\\n';\n\n\t\tthis.stop();\n\t\tthis.#stream.write(textToWrite);\n\n\t\treturn this;\n\t}\n}\n\nexport default function ora(options) {\n\treturn new Ora(options);\n}\n\nexport async function oraPromise(action, options) {\n\tconst actionIsFunction = typeof action === 'function';\n\tconst actionIsPromise = typeof action.then === 'function';\n\n\tif (!actionIsFunction && !actionIsPromise) {\n\t\tthrow new TypeError('Parameter `action` must be a Function or a Promise');\n\t}\n\n\tconst {successText, failText} = typeof options === 'object'\n\t\t? options\n\t\t: {successText: undefined, failText: undefined};\n\n\tconst spinner = ora(options).start();\n\n\ttry {\n\t\tconst promise = actionIsFunction ? action(spinner) : action;\n\t\tconst result = await promise;\n\n\t\tspinner.succeed(successText === undefined\n\t\t\t? undefined\n\t\t\t: (typeof successText === 'string' ? successText : successText(result)));\n\n\t\treturn result;\n\t} catch (error) {\n\t\tspinner.fail(failText === undefined\n\t\t\t? undefined\n\t\t\t: (typeof failText === 'string' ? failText : failText(error)));\n\n\t\tthrow error;\n\t}\n}\n\nexport {default as spinners} from 'cli-spinners';\n", "import { format } from \"util\";\nimport { chalkStderr } from \"chalk\";\nimport ProgressBar, {\n  ProgressBarInstance,\n  ProgressBarOptions,\n} from \"../vendor/progress/index.js\";\nimport ora, { Ora } from \"ora\";\n\nlet spinner: Ora | null = null;\n\n// console.error before it started being red by default in Node v20\nfunction logToStderr(...args: unknown[]) {\n  process.stderr.write(`${format(...args)}\\n`);\n}\n\n// Handles clearing spinner so that it doesn't get messed up\nexport function logError(message: string) {\n  spinner?.clear();\n  logToStderr(message);\n}\n\n// Handles clearing spinner so that it doesn't get messed up\nexport function logWarning(...logged: any) {\n  spinner?.clear();\n  logToStderr(...logged);\n}\n\n// Handles clearing spinner so that it doesn't get messed up\nexport function logMessage(...logged: any) {\n  spinner?.clear();\n  logToStderr(...logged);\n}\n\n// For the rare case writing output to stdout. Status and error messages\n// (logMessage, logWarning, etc.) should be written to stderr.\nexport function logOutput(...logged: any) {\n  spinner?.clear();\n  // the one spot where we can console.log\n  // eslint-disable-next-line no-console\n  console.log(...logged);\n}\n\nexport function logVerbose(...logged: any) {\n  if (process.env.CONVEX_VERBOSE) {\n    logMessage(`[verbose] ${new Date().toISOString()}`, ...logged);\n  }\n}\n\n/**\n * Returns a ProgressBar instance, and also handles clearing the spinner if necessary.\n *\n * The caller is responsible for calling `progressBar.tick()` and terminating the `progressBar`\n * when it's done.\n */\nexport function startLogProgress(\n  format: string,\n  progressBarOptions: ProgressBarOptions,\n): ProgressBarInstance {\n  spinner?.clear();\n  return new ProgressBar(format, progressBarOptions);\n}\n\n// Start a spinner.\n// To change its message use changeSpinner.\n// To print warnings/errors while it's running use logError or logWarning.\n// To stop it due to an error use logFailure.\n// To stop it due to success use logFinishedStep.\nexport function showSpinner(message: string) {\n  spinner?.stop();\n  spinner = ora({\n    // Add newline to prevent clobbering when a message\n    // we can't pipe through `logMessage` et al gets printed\n    text: message + \"\\n\",\n    stream: process.stderr,\n    // hideCursor: true doesn't work with `tsx`.\n    // see https://github.com/tapjs/signal-exit/issues/49#issuecomment-1459408082\n    // See CX-6822 for an issue to bring back cursor hiding, probably by upgrading libraries.\n    hideCursor: process.env.CONVEX_RUNNING_LIVE_IN_MONOREPO ? false : true,\n  }).start();\n}\n\nexport function changeSpinner(message: string) {\n  if (spinner) {\n    // Add newline to prevent clobbering\n    spinner.text = message + \"\\n\";\n  } else {\n    logToStderr(message);\n  }\n}\n\nexport function failExistingSpinner() {\n  spinner?.fail();\n  spinner = null;\n}\n\nexport function logFailure(message: string) {\n  if (spinner) {\n    spinner.fail(message);\n    spinner = null;\n  } else {\n    logToStderr(`${chalkStderr.red(`\u2716`)} ${message}`);\n  }\n}\n\n// Stops and removes spinner if one is active\nexport function logFinishedStep(message: string) {\n  if (spinner) {\n    spinner.succeed(message);\n    spinner = null;\n  } else {\n    logToStderr(`${chalkStderr.green(`\u2714`)} ${message}`);\n  }\n}\n\nexport function stopSpinner() {\n  if (spinner) {\n    spinner.stop();\n    spinner = null;\n  }\n}\n\n// Only shows the spinner if the async `fn` takes longer than `delayMs`\nexport async function showSpinnerIfSlow(\n  message: string,\n  delayMs: number,\n  fn: () => Promise<any>,\n) {\n  const timeout = setTimeout(() => {\n    showSpinner(message);\n  }, delayMs);\n  await fn();\n  clearTimeout(timeout);\n}\n", "export type Pos = {\n  start: number;\n};\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nexport class Position {\n  line: number;\n  column: number;\n  index: number;\n\n  constructor(line: number, col: number, index: number) {\n    this.line = line;\n    this.column = col;\n    this.index = index;\n  }\n}\n\nexport class SourceLocation {\n  start: Position;\n  end: Position;\n  filename: string | undefined;\n  identifierName: string | undefined | null;\n\n  constructor(start: Position, end?: Position) {\n    this.start = start;\n    // (may start as null, but initialized later)\n    this.end = end!;\n  }\n}\n\n/**\n * creates a new position with a non-zero column offset from the given position.\n * This function should be only be used when we create AST node out of the token\n * boundaries, such as TemplateElement ends before tt.templateNonTail. This\n * function does not skip whitespaces.\n */\nexport function createPositionWithColumnOffset(\n  position: Position,\n  columnOffset: number,\n) {\n  const { line, column, index } = position;\n  return new Position(line, column + columnOffset, index + columnOffset);\n}\n", "import type { ParseErrorTemplates } from \"../parse-error.ts\";\n\nconst code = \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\";\n\nexport default {\n  ImportMetaOutsideModule: {\n    message: `import.meta may appear only with 'sourceType: \"module\"'`,\n    code,\n  },\n  ImportOutsideModule: {\n    message: `'import' and 'export' may appear only with 'sourceType: \"module\"'`,\n    code,\n  },\n} satisfies ParseErrorTemplates;\n", "const NodeDescriptions = {\n  ArrayPattern: \"array destructuring pattern\",\n  AssignmentExpression: \"assignment expression\",\n  AssignmentPattern: \"assignment expression\",\n  ArrowFunctionExpression: \"arrow function expression\",\n  ConditionalExpression: \"conditional expression\",\n  CatchClause: \"catch clause\",\n  ForOfStatement: \"for-of statement\",\n  ForInStatement: \"for-in statement\",\n  ForStatement: \"for-loop\",\n  FormalParameters: \"function parameter list\",\n  Identifier: \"identifier\",\n  ImportSpecifier: \"import specifier\",\n  ImportDefaultSpecifier: \"import default specifier\",\n  ImportNamespaceSpecifier: \"import namespace specifier\",\n  ObjectPattern: \"object destructuring pattern\",\n  ParenthesizedExpression: \"parenthesized expression\",\n  RestElement: \"rest element\",\n  UpdateExpression: {\n    true: \"prefix operation\",\n    false: \"postfix operation\",\n  },\n  VariableDeclarator: \"variable declaration\",\n  YieldExpression: \"yield expression\",\n};\n\ntype NodeTypesWithDescriptions = keyof Omit<\n  typeof NodeDescriptions,\n  \"UpdateExpression\"\n>;\n\ntype NodeWithDescription =\n  | {\n      type: \"UpdateExpression\";\n      prefix: boolean;\n    }\n  | {\n      type: NodeTypesWithDescriptions;\n    };\n\nconst toNodeDescription = (node: NodeWithDescription) =>\n  node.type === \"UpdateExpression\"\n    ? NodeDescriptions.UpdateExpression[`${node.prefix}`]\n    : NodeDescriptions[node.type];\n\nexport default toNodeDescription;\n", "import type { ParseErrorTemplates } from \"../parse-error.ts\";\nimport toNodeDescription from \"./to-node-description.ts\";\n\nexport type LValAncestor =\n  | { type: \"UpdateExpression\"; prefix: boolean }\n  | {\n      type:\n        | \"ArrayPattern\"\n        | \"AssignmentExpression\"\n        | \"CatchClause\"\n        | \"ForOfStatement\"\n        | \"FormalParameters\"\n        | \"ForInStatement\"\n        | \"ForStatement\"\n        | \"ImportSpecifier\"\n        | \"ImportNamespaceSpecifier\"\n        | \"ImportDefaultSpecifier\"\n        | \"ParenthesizedExpression\"\n        | \"ObjectPattern\"\n        | \"RestElement\"\n        | \"VariableDeclarator\";\n    };\n\nexport default {\n  AccessorIsGenerator: ({ kind }: { kind: \"get\" | \"set\" }) =>\n    `A ${kind}ter cannot be a generator.`,\n  ArgumentsInClass:\n    \"'arguments' is only allowed in functions and class methods.\",\n  AsyncFunctionInSingleStatementContext:\n    \"Async functions can only be declared at the top level or inside a block.\",\n  AwaitBindingIdentifier:\n    \"Can not use 'await' as identifier inside an async function.\",\n  AwaitBindingIdentifierInStaticBlock:\n    \"Can not use 'await' as identifier inside a static block.\",\n  AwaitExpressionFormalParameter:\n    \"'await' is not allowed in async function parameters.\",\n  AwaitUsingNotInAsyncContext:\n    \"'await using' is only allowed within async functions and at the top levels of modules.\",\n  AwaitNotInAsyncContext:\n    \"'await' is only allowed within async functions and at the top levels of modules.\",\n  BadGetterArity: \"A 'get' accessor must not have any formal parameters.\",\n  BadSetterArity: \"A 'set' accessor must have exactly one formal parameter.\",\n  BadSetterRestParameter:\n    \"A 'set' accessor function argument must not be a rest parameter.\",\n  ConstructorClassField: \"Classes may not have a field named 'constructor'.\",\n  ConstructorClassPrivateField:\n    \"Classes may not have a private field named '#constructor'.\",\n  ConstructorIsAccessor: \"Class constructor may not be an accessor.\",\n  ConstructorIsAsync: \"Constructor can't be an async function.\",\n  ConstructorIsGenerator: \"Constructor can't be a generator.\",\n  DeclarationMissingInitializer: ({\n    kind,\n  }: {\n    kind: \"await using\" | \"const\" | \"destructuring\" | \"using\";\n  }) => `Missing initializer in ${kind} declaration.`,\n  DecoratorArgumentsOutsideParentheses:\n    \"Decorator arguments must be moved inside parentheses: use '@(decorator(args))' instead of '@(decorator)(args)'.\",\n  DecoratorBeforeExport:\n    \"Decorators must be placed *before* the 'export' keyword. Remove the 'decoratorsBeforeExport: true' option to use the 'export @decorator class {}' syntax.\",\n  DecoratorsBeforeAfterExport:\n    \"Decorators can be placed *either* before or after the 'export' keyword, but not in both locations at the same time.\",\n  DecoratorConstructor:\n    \"Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?\",\n  DecoratorExportClass:\n    \"Decorators must be placed *after* the 'export' keyword. Remove the 'decoratorsBeforeExport: false' option to use the '@decorator export class {}' syntax.\",\n  DecoratorSemicolon: \"Decorators must not be followed by a semicolon.\",\n  DecoratorStaticBlock: \"Decorators can't be used with a static block.\",\n  DeferImportRequiresNamespace:\n    'Only `import defer * as x from \"./module\"` is valid.',\n  DeletePrivateField: \"Deleting a private field is not allowed.\",\n  DestructureNamedImport:\n    \"ES2015 named imports do not destructure. Use another statement for destructuring after the import.\",\n  DuplicateConstructor: \"Duplicate constructor in the same class.\",\n  DuplicateDefaultExport: \"Only one default export allowed per module.\",\n  DuplicateExport: ({ exportName }: { exportName: string }) =>\n    `\\`${exportName}\\` has already been exported. Exported identifiers must be unique.`,\n  DuplicateProto: \"Redefinition of __proto__ property.\",\n  DuplicateRegExpFlags: \"Duplicate regular expression flag.\",\n  ElementAfterRest: \"Rest element must be last element.\",\n  EscapedCharNotAnIdentifier: \"Invalid Unicode escape.\",\n  ExportBindingIsString: ({\n    localName,\n    exportName,\n  }: {\n    localName: string;\n    exportName: string;\n  }) =>\n    `A string literal cannot be used as an exported binding without \\`from\\`.\\n- Did you mean \\`export { '${localName}' as '${exportName}' } from 'some-module'\\`?`,\n  ExportDefaultFromAsIdentifier:\n    \"'from' is not allowed as an identifier after 'export default'.\",\n\n  ForInOfLoopInitializer: ({\n    type,\n  }: {\n    type: \"ForInStatement\" | \"ForOfStatement\";\n  }) =>\n    `'${\n      type === \"ForInStatement\" ? \"for-in\" : \"for-of\"\n    }' loop variable declaration may not have an initializer.`,\n  ForInUsing: \"For-in loop may not start with 'using' declaration.\",\n\n  ForOfAsync: \"The left-hand side of a for-of loop may not be 'async'.\",\n  ForOfLet: \"The left-hand side of a for-of loop may not start with 'let'.\",\n  GeneratorInSingleStatementContext:\n    \"Generators can only be declared at the top level or inside a block.\",\n\n  IllegalBreakContinue: ({\n    type,\n  }: {\n    type: \"BreakStatement\" | \"ContinueStatement\";\n  }) => `Unsyntactic ${type === \"BreakStatement\" ? \"break\" : \"continue\"}.`,\n\n  IllegalLanguageModeDirective:\n    \"Illegal 'use strict' directive in function with non-simple parameter list.\",\n  IllegalReturn: \"'return' outside of function.\",\n  ImportAttributesUseAssert:\n    \"The `assert` keyword in import attributes is deprecated and it has been replaced by the `with` keyword. You can enable the `deprecatedImportAssert` parser plugin to suppress this error.\",\n  ImportBindingIsString: ({ importName }: { importName: string }) =>\n    `A string literal cannot be used as an imported binding.\\n- Did you mean \\`import { \"${importName}\" as foo }\\`?`,\n  ImportCallArity: `\\`import()\\` requires exactly one or two arguments.`,\n  ImportCallNotNewExpression: \"Cannot use new with import(...).\",\n  ImportCallSpreadArgument: \"`...` is not allowed in `import()`.\",\n  ImportJSONBindingNotDefault:\n    \"A JSON module can only be imported with `default`.\",\n  ImportReflectionHasAssertion: \"`import module x` cannot have assertions.\",\n  ImportReflectionNotBinding:\n    'Only `import module x from \"./module\"` is valid.',\n  IncompatibleRegExpUVFlags:\n    \"The 'u' and 'v' regular expression flags cannot be enabled at the same time.\",\n  InvalidBigIntLiteral: \"Invalid BigIntLiteral.\",\n  InvalidCodePoint: \"Code point out of bounds.\",\n  InvalidCoverDiscardElement:\n    \"'void' must be followed by an expression when not used in a binding position.\",\n  InvalidCoverInitializedName: \"Invalid shorthand property initializer.\",\n  InvalidDecimal: \"Invalid decimal.\",\n  InvalidDigit: ({ radix }: { radix: number }) =>\n    `Expected number in radix ${radix}.`,\n  InvalidEscapeSequence: \"Bad character escape sequence.\",\n  InvalidEscapeSequenceTemplate: \"Invalid escape sequence in template.\",\n  InvalidEscapedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\n    `Escape sequence in keyword ${reservedWord}.`,\n  InvalidIdentifier: ({ identifierName }: { identifierName: string }) =>\n    `Invalid identifier ${identifierName}.`,\n  InvalidLhs: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n  InvalidLhsBinding: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Binding invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n  InvalidLhsOptionalChaining: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Invalid optional chaining in the left-hand side of ${toNodeDescription(\n      ancestor,\n    )}.`,\n  InvalidNumber: \"Invalid number.\",\n  InvalidOrMissingExponent:\n    \"Floating-point numbers require a valid exponent after the 'e'.\",\n  InvalidOrUnexpectedToken: ({ unexpected }: { unexpected: string }) =>\n    `Unexpected character '${unexpected}'.`,\n  InvalidParenthesizedAssignment: \"Invalid parenthesized assignment pattern.\",\n  InvalidPrivateFieldResolution: ({\n    identifierName,\n  }: {\n    identifierName: string;\n  }) => `Private name #${identifierName} is not defined.`,\n  InvalidPropertyBindingPattern: \"Binding member expression.\",\n  InvalidRecordProperty:\n    \"Only properties and spread elements are allowed in record definitions.\",\n  InvalidRestAssignmentPattern: \"Invalid rest operator's argument.\",\n  LabelRedeclaration: ({ labelName }: { labelName: string }) =>\n    `Label '${labelName}' is already declared.`,\n  LetInLexicalBinding: \"'let' is disallowed as a lexically bound name.\",\n  LineTerminatorBeforeArrow: \"No line break is allowed before '=>'.\",\n  MalformedRegExpFlags: \"Invalid regular expression flag.\",\n  MissingClassName: \"A class name is required.\",\n  MissingEqInAssignment:\n    \"Only '=' operator can be used for specifying default value.\",\n  MissingSemicolon: \"Missing semicolon.\",\n  MissingPlugin: ({ missingPlugin }: { missingPlugin: [string] }) =>\n    `This experimental syntax requires enabling the parser plugin: ${missingPlugin\n      .map(name => JSON.stringify(name))\n      .join(\", \")}.`,\n  // FIXME: Would be nice to make this \"missingPlugins\" instead.\n  // Also, seems like we can drop the \"(s)\" from the message and just make it \"s\".\n  MissingOneOfPlugins: ({ missingPlugin }: { missingPlugin: string[] }) =>\n    `This experimental syntax requires enabling one of the following parser plugin(s): ${missingPlugin\n      .map(name => JSON.stringify(name))\n      .join(\", \")}.`,\n  MissingUnicodeEscape: \"Expecting Unicode escape sequence \\\\uXXXX.\",\n  MixingCoalesceWithLogical:\n    \"Nullish coalescing operator(??) requires parens when mixing with logical operators.\",\n  ModuleAttributeDifferentFromType:\n    \"The only accepted module attribute is `type`.\",\n  ModuleAttributeInvalidValue:\n    \"Only string literals are allowed as module attribute values.\",\n  ModuleAttributesWithDuplicateKeys: ({ key }: { key: string }) =>\n    `Duplicate key \"${key}\" is not allowed in module attributes.`,\n  ModuleExportNameHasLoneSurrogate: ({\n    surrogateCharCode,\n  }: {\n    surrogateCharCode: number;\n  }) =>\n    `An export name cannot include a lone surrogate, found '\\\\u${surrogateCharCode.toString(\n      16,\n    )}'.`,\n  ModuleExportUndefined: ({ localName }: { localName: string }) =>\n    `Export '${localName}' is not defined.`,\n  MultipleDefaultsInSwitch: \"Multiple default clauses.\",\n  NewlineAfterThrow: \"Illegal newline after throw.\",\n  NoCatchOrFinally: \"Missing catch or finally clause.\",\n  NumberIdentifier: \"Identifier directly after number.\",\n  NumericSeparatorInEscapeSequence:\n    \"Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.\",\n  ObsoleteAwaitStar:\n    \"'await*' has been removed from the async functions proposal. Use Promise.all() instead.\",\n  OptionalChainingNoNew:\n    \"Constructors in/after an Optional Chain are not allowed.\",\n  OptionalChainingNoTemplate:\n    \"Tagged Template Literals are not allowed in optionalChain.\",\n  OverrideOnConstructor:\n    \"'override' modifier cannot appear on a constructor declaration.\",\n  ParamDupe: \"Argument name clash.\",\n  PatternHasAccessor: \"Object pattern can't contain getter or setter.\",\n  PatternHasMethod: \"Object pattern can't contain methods.\",\n  PrivateInExpectedIn: ({ identifierName }: { identifierName: string }) =>\n    `Private names are only allowed in property accesses (\\`obj.#${identifierName}\\`) or in \\`in\\` expressions (\\`#${identifierName} in obj\\`).`,\n  PrivateNameRedeclaration: ({ identifierName }: { identifierName: string }) =>\n    `Duplicate private name #${identifierName}.`,\n  RecordExpressionBarIncorrectEndSyntaxType:\n    \"Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  RecordExpressionBarIncorrectStartSyntaxType:\n    \"Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  RecordExpressionHashIncorrectStartSyntaxType:\n    \"Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n  RecordNoProto: \"'__proto__' is not allowed in Record expressions.\",\n  RestTrailingComma: \"Unexpected trailing comma after rest element.\",\n  SloppyFunction:\n    \"In non-strict mode code, functions can only be declared at top level or inside a block.\",\n  SloppyFunctionAnnexB:\n    \"In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.\",\n  SourcePhaseImportRequiresDefault:\n    'Only `import source x from \"./module\"` is valid.',\n  StaticPrototype: \"Classes may not have static property named prototype.\",\n  SuperNotAllowed:\n    \"`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?\",\n  SuperPrivateField: \"Private fields can't be accessed on super.\",\n  TrailingDecorator: \"Decorators must be attached to a class element.\",\n  TupleExpressionBarIncorrectEndSyntaxType:\n    \"Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  TupleExpressionBarIncorrectStartSyntaxType:\n    \"Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  TupleExpressionHashIncorrectStartSyntaxType:\n    \"Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n  UnexpectedArgumentPlaceholder: \"Unexpected argument placeholder.\",\n  UnexpectedAwaitAfterPipelineBody:\n    'Unexpected \"await\" after pipeline body; await must have parentheses in minimal proposal.',\n  UnexpectedDigitAfterHash: \"Unexpected digit after hash token.\",\n  UnexpectedImportExport:\n    \"'import' and 'export' may only appear at the top level.\",\n  UnexpectedKeyword: ({ keyword }: { keyword: string }) =>\n    `Unexpected keyword '${keyword}'.`,\n  UnexpectedLeadingDecorator:\n    \"Leading decorators must be attached to a class declaration.\",\n  UnexpectedLexicalDeclaration:\n    \"Lexical declaration cannot appear in a single-statement context.\",\n  UnexpectedNewTarget:\n    \"`new.target` can only be used in functions or class properties.\",\n  UnexpectedNumericSeparator:\n    \"A numeric separator is only allowed between two digits.\",\n  UnexpectedPrivateField: \"Unexpected private name.\",\n  UnexpectedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\n    `Unexpected reserved word '${reservedWord}'.`,\n  UnexpectedSuper: \"'super' is only allowed in object methods and classes.\",\n  UnexpectedToken: ({\n    expected,\n    unexpected,\n  }: {\n    expected?: string | null;\n    unexpected?: string | null;\n  }) =>\n    `Unexpected token${unexpected ? ` '${unexpected}'.` : \"\"}${\n      expected ? `, expected \"${expected}\"` : \"\"\n    }`,\n  UnexpectedTokenUnaryExponentiation:\n    \"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\",\n  UnexpectedUsingDeclaration:\n    \"Using declaration cannot appear in the top level when source type is `script` or in the bare case statement.\",\n  UnexpectedVoidPattern: \"Unexpected void binding.\",\n  UnsupportedBind: \"Binding should be performed on object property.\",\n  UnsupportedDecoratorExport:\n    \"A decorated export must export a class declaration.\",\n  UnsupportedDefaultExport:\n    \"Only expressions, functions or classes are allowed as the `default` export.\",\n  UnsupportedImport:\n    \"`import` can only be used in `import()` or `import.meta`.\",\n  UnsupportedMetaProperty: ({\n    target,\n    onlyValidPropertyName,\n  }: {\n    target: string;\n    onlyValidPropertyName: string;\n  }) =>\n    `The only valid meta property for ${target} is ${target}.${onlyValidPropertyName}.`,\n  UnsupportedParameterDecorator:\n    \"Decorators cannot be used to decorate parameters.\",\n  UnsupportedPropertyDecorator:\n    \"Decorators cannot be used to decorate object literal properties.\",\n  UnsupportedSuper:\n    \"'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).\",\n  UnterminatedComment: \"Unterminated comment.\",\n  UnterminatedRegExp: \"Unterminated regular expression.\",\n  UnterminatedString: \"Unterminated string constant.\",\n  UnterminatedTemplate: \"Unterminated template.\",\n  UsingDeclarationExport: \"Using declaration cannot be exported.\",\n  UsingDeclarationHasBindingPattern:\n    \"Using declaration cannot have destructuring patterns.\",\n  VarRedeclaration: ({ identifierName }: { identifierName: string }) =>\n    `Identifier '${identifierName}' has already been declared.`,\n  VoidPatternCatchClauseParam:\n    \"A void binding can not be the catch clause parameter. Use `try { ... } catch { ... }` if you want to discard the caught error.\",\n  VoidPatternInitializer: \"A void binding may not have an initializer.\",\n  YieldBindingIdentifier:\n    \"Can not use 'yield' as identifier inside a generator.\",\n  YieldInParameter: \"Yield expression is not allowed in formal parameters.\",\n  YieldNotInGeneratorFunction:\n    \"'yield' is only allowed within generator functions.\",\n  ZeroDigitNumericSeparator:\n    \"Numeric separator can not be used after leading 0.\",\n} satisfies ParseErrorTemplates;\n", "import type { ParseErrorTemplates } from \"../parse-error\";\n\nexport default {\n  StrictDelete: \"Deleting local variable in strict mode.\",\n\n  // `referenceName` is the StringValue[1] of an IdentifierReference[2], which\n  // is represented as just an `Identifier`[3] in the Babel AST.\n  // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\n  // 2. https://tc39.es/ecma262/#prod-IdentifierReference\n  // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\n  StrictEvalArguments: ({ referenceName }: { referenceName: string }) =>\n    `Assigning to '${referenceName}' in strict mode.`,\n\n  // `bindingName` is the StringValue[1] of a BindingIdentifier[2], which is\n  // represented as just an `Identifier`[3] in the Babel AST.\n  // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\n  // 2. https://tc39.es/ecma262/#prod-BindingIdentifier\n  // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\n  StrictEvalArgumentsBinding: ({ bindingName }: { bindingName: string }) =>\n    `Binding '${bindingName}' in strict mode.`,\n\n  StrictFunction:\n    \"In strict mode code, functions can only be declared at top level or inside a block.\",\n\n  StrictNumericEscape: \"The only valid numeric escape in strict mode is '\\\\0'.\",\n\n  StrictOctalLiteral: \"Legacy octal literals are not allowed in strict mode.\",\n\n  StrictWith: \"'with' in strict mode.\",\n} satisfies ParseErrorTemplates;\n", "import type { ParseErrorTemplates } from \"../parse-error.ts\";\n\nexport default {\n  ParseExpressionEmptyInput:\n    \"Unexpected parseExpression() input: The input is empty or contains only comments.\",\n  ParseExpressionExpectsEOF: ({ unexpected }: { unexpected: number }) =>\n    `Unexpected parseExpression() input: The input should contain exactly one expression, but the first expression is followed by the unexpected character \\`${String.fromCodePoint(unexpected)}\\`.`,\n} satisfies ParseErrorTemplates;\n", "import type { ParseErrorTemplates } from \"../parse-error.ts\";\nimport toNodeDescription from \"./to-node-description.ts\";\n\nexport const UnparenthesizedPipeBodyDescriptions = new Set([\n  \"ArrowFunctionExpression\",\n  \"AssignmentExpression\",\n  \"ConditionalExpression\",\n  \"YieldExpression\",\n] as const);\n\ntype GetSetMemberType<T extends Set<any>> =\n  T extends Set<infer M> ? M : unknown;\n\nexport type UnparenthesizedPipeBodyTypes = GetSetMemberType<\n  typeof UnparenthesizedPipeBodyDescriptions\n>;\n\nexport default {\n  // This error is only used by the smart-mix proposal\n  PipeBodyIsTighter:\n    \"Unexpected yield after pipeline body; any yield expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.\",\n  PipeTopicRequiresHackPipes: process.env.BABEL_8_BREAKING\n    ? 'Topic references are only supported when using the `\"proposal\": \"hack\"` version of the pipeline proposal.'\n    : 'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n  PipeTopicUnbound:\n    \"Topic reference is unbound; it must be inside a pipe body.\",\n  PipeTopicUnconfiguredToken: ({ token }: { token: string }) =>\n    `Invalid topic token ${token}. In order to use ${token} as a topic reference, the pipelineOperator plugin must be configured with { \"proposal\": \"hack\", \"topicToken\": \"${token}\" }.`,\n  PipeTopicUnused:\n    \"Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.\",\n  PipeUnparenthesizedBody: ({ type }: { type: UnparenthesizedPipeBodyTypes }) =>\n    `Hack-style pipe body cannot be an unparenthesized ${toNodeDescription({\n      type,\n    })}; please wrap it in parentheses.`,\n\n  ...(process.env.BABEL_8_BREAKING\n    ? {}\n    : {\n        // Messages whose codes start with “Pipeline” or “PrimaryTopic”\n        // are retained for backwards compatibility\n        // with the deprecated smart-mix pipe operator proposal plugin.\n        // They are subject to removal in a future major version.\n        PipelineBodyNoArrow:\n          'Unexpected arrow \"=>\" after pipeline body; arrow function in pipeline body must be parenthesized.',\n        PipelineBodySequenceExpression:\n          \"Pipeline body may not be a comma-separated sequence expression.\",\n        PipelineHeadSequenceExpression:\n          \"Pipeline head should not be a comma-separated sequence expression.\",\n        PipelineTopicUnused:\n          \"Pipeline is in topic style but does not use topic reference.\",\n        PrimaryTopicNotAllowed:\n          \"Topic reference was used in a lexical context without topic binding.\",\n        PrimaryTopicRequiresSmartPipeline:\n          'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n      }),\n} satisfies ParseErrorTemplates;\n", "import { Position } from \"./util/location.ts\";\n\ntype SyntaxPlugin =\n  | \"flow\"\n  | \"typescript\"\n  | \"jsx\"\n  | \"pipelineOperator\"\n  | \"placeholders\";\n\ntype ParseErrorCode =\n  | \"BABEL_PARSER_SYNTAX_ERROR\"\n  | \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\";\n\n// Babel uses \"normal\" SyntaxErrors for it's errors, but adds some extra\n// functionality. This functionality is defined in the\n// `ParseErrorSpecification` interface below. We may choose to change to someday\n// give our errors their own full-blown class, but until then this allow us to\n// keep all the desirable properties of SyntaxErrors (like their name in stack\n// traces, etc.), and also allows us to punt on any publicly facing\n// class-hierarchy decisions until Babel 8.\ninterface ParseErrorSpecification<ErrorDetails> {\n  // Look, these *could* be readonly, but then Flow complains when we initially\n  // set them. We could do a whole dance and make a special interface that's not\n  // readonly for when we create the error, then cast it to the readonly\n  // interface for public use, but the previous implementation didn't have them\n  // as readonly, so let's just not worry about it for now.\n  code: ParseErrorCode;\n  reasonCode: string;\n  syntaxPlugin?: SyntaxPlugin;\n  missingPlugin?: string | string[];\n  loc: Position;\n  details: ErrorDetails;\n\n  // We should consider removing this as it now just contains the same\n  // information as `loc.index`.\n  pos: number;\n}\n\nexport type ParseError<ErrorDetails> = SyntaxError &\n  ParseErrorSpecification<ErrorDetails>;\n\n// By `ParseErrorConstructor`, we mean something like the new-less style\n// `ErrorConstructor`[1], since `ParseError`'s are not themselves actually\n// separate classes from `SyntaxError`'s.\n//\n// 1. https://github.com/microsoft/TypeScript/blob/v4.5.5/lib/lib.es5.d.ts#L1027\nexport type ParseErrorConstructor<ErrorDetails> = (\n  loc: Position,\n  details: ErrorDetails,\n) => ParseError<ErrorDetails>;\n\ntype ToMessage<ErrorDetails> = (self: ErrorDetails) => string;\n\ntype ParseErrorCredentials<ErrorDetails> = {\n  code: string;\n  reasonCode: string;\n  syntaxPlugin?: SyntaxPlugin;\n  toMessage: ToMessage<ErrorDetails>;\n};\n\nfunction defineHidden(obj: object, key: string, value: unknown) {\n  Object.defineProperty(obj, key, {\n    enumerable: false,\n    configurable: true,\n    value,\n  });\n}\n\nfunction toParseErrorConstructor<ErrorDetails extends object>({\n  toMessage,\n  code,\n  reasonCode,\n  syntaxPlugin,\n}: ParseErrorCredentials<ErrorDetails>): ParseErrorConstructor<ErrorDetails> {\n  const hasMissingPlugin =\n    reasonCode === \"MissingPlugin\" || reasonCode === \"MissingOneOfPlugins\";\n\n  if (!process.env.BABEL_8_BREAKING) {\n    const oldReasonCodes: Record<string, string> = {\n      AccessorCannotDeclareThisParameter: \"AccesorCannotDeclareThisParameter\",\n      AccessorCannotHaveTypeParameters: \"AccesorCannotHaveTypeParameters\",\n      ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference:\n        \"ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference\",\n      SetAccessorCannotHaveOptionalParameter:\n        \"SetAccesorCannotHaveOptionalParameter\",\n      SetAccessorCannotHaveRestParameter: \"SetAccesorCannotHaveRestParameter\",\n      SetAccessorCannotHaveReturnType: \"SetAccesorCannotHaveReturnType\",\n    };\n    if (oldReasonCodes[reasonCode]) {\n      reasonCode = oldReasonCodes[reasonCode];\n    }\n  }\n\n  return function constructor(loc: Position, details: ErrorDetails) {\n    const error: ParseError<ErrorDetails> = new SyntaxError() as any;\n\n    error.code = code as ParseErrorCode;\n    error.reasonCode = reasonCode;\n    error.loc = loc;\n    error.pos = loc.index;\n\n    error.syntaxPlugin = syntaxPlugin;\n    if (hasMissingPlugin) {\n      error.missingPlugin = (details as any).missingPlugin;\n    }\n\n    type Overrides = {\n      loc?: Position;\n      details?: ErrorDetails;\n    };\n    defineHidden(error, \"clone\", function clone(overrides: Overrides = {}) {\n      const { line, column, index } = overrides.loc ?? loc;\n      return constructor(new Position(line, column, index), {\n        ...details,\n        ...overrides.details,\n      });\n    });\n\n    defineHidden(error, \"details\", details);\n\n    Object.defineProperty(error, \"message\", {\n      configurable: true,\n      get(this: ParseError<ErrorDetails>): string {\n        const message = `${toMessage(details)} (${loc.line}:${loc.column})`;\n        this.message = message;\n        return message;\n      },\n      set(value: string) {\n        Object.defineProperty(this, \"message\", { value, writable: true });\n      },\n    });\n\n    return error;\n  };\n}\n\ntype ParseErrorTemplate =\n  | string\n  | ToMessage<any>\n  | { message: string | ToMessage<any>; code?: ParseErrorCode };\n\nexport type ParseErrorTemplates = { [reasonCode: string]: ParseErrorTemplate };\n\n// This is the templated form of `ParseErrorEnum`.\n//\n// Note: We could factor out the return type calculation into something like\n// `ParseErrorConstructor<T extends ParseErrorTemplates>`, and then we could\n// reuse it in the non-templated form of `ParseErrorEnum`, but TypeScript\n// doesn't seem to drill down that far when showing you the computed type of\n// an object in an editor, so we'll leave it inlined for now.\nexport function ParseErrorEnum(a: TemplateStringsArray): <\n  T extends ParseErrorTemplates,\n>(\n  parseErrorTemplates: T,\n) => {\n  [K in keyof T]: ParseErrorConstructor<\n    T[K] extends { message: string | ToMessage<any> }\n      ? T[K][\"message\"] extends ToMessage<any>\n        ? Parameters<T[K][\"message\"]>[0]\n        : object\n      : T[K] extends ToMessage<any>\n        ? Parameters<T[K]>[0]\n        : object\n  >;\n};\n\nexport function ParseErrorEnum<T extends ParseErrorTemplates>(\n  parseErrorTemplates: T,\n  syntaxPlugin?: SyntaxPlugin,\n): {\n  [K in keyof T]: ParseErrorConstructor<\n    T[K] extends { message: string | ToMessage<any> }\n      ? T[K][\"message\"] extends ToMessage<any>\n        ? Parameters<T[K][\"message\"]>[0]\n        : object\n      : T[K] extends ToMessage<any>\n        ? Parameters<T[K]>[0]\n        : object\n  >;\n};\n\n// You call `ParseErrorEnum` with a mapping from `ReasonCode`'s to either:\n//\n// 1. a static error message,\n// 2. `toMessage` functions that define additional necessary `details` needed by\n//    the `ParseError`, or\n// 3. Objects that contain a `message` of one of the above and overridden `code`\n//    and/or `reasonCode`:\n//\n// ParseErrorEnum `optionalSyntaxPlugin` ({\n//   ErrorWithStaticMessage: \"message\",\n//   ErrorWithDynamicMessage: ({ type } : { type: string }) => `${type}`),\n//   ErrorWithOverriddenCodeAndOrReasonCode: {\n//     message: ({ type }: { type: string }) => `${type}`),\n//     code: \"AN_ERROR_CODE\",\n//     ...(BABEL_8_BREAKING ? { } : { reasonCode: \"CustomErrorReasonCode\" })\n//   }\n// });\n//\nexport function ParseErrorEnum(\n  argument: TemplateStringsArray | ParseErrorTemplates,\n  syntaxPlugin?: SyntaxPlugin,\n) {\n  // If the first parameter is an array, that means we were called with a tagged\n  // template literal. Extract the syntaxPlugin from this, and call again in\n  // the \"normalized\" form.\n  if (Array.isArray(argument)) {\n    return (parseErrorTemplates: ParseErrorTemplates) =>\n      ParseErrorEnum(parseErrorTemplates, argument[0]);\n  }\n\n  const ParseErrorConstructors = {} as Record<\n    string,\n    ParseErrorConstructor<unknown>\n  >;\n\n  for (const reasonCode of Object.keys(argument)) {\n    const template = (argument as ParseErrorTemplates)[reasonCode];\n    const { message, ...rest } =\n      typeof template === \"string\"\n        ? { message: () => template }\n        : typeof template === \"function\"\n          ? { message: template }\n          : template;\n    const toMessage = typeof message === \"string\" ? () => message : message;\n\n    ParseErrorConstructors[reasonCode] = toParseErrorConstructor({\n      code: \"BABEL_PARSER_SYNTAX_ERROR\",\n      reasonCode,\n      toMessage,\n      ...(syntaxPlugin ? { syntaxPlugin } : {}),\n      ...rest,\n    });\n  }\n\n  return ParseErrorConstructors;\n}\n\nimport ModuleErrors from \"./parse-error/module-errors.ts\";\nimport StandardErrors from \"./parse-error/standard-errors.ts\";\nimport StrictModeErrors from \"./parse-error/strict-mode-errors.ts\";\nimport ParseExpressionErrors from \"./parse-error/parse-expression-errors.ts\";\nimport PipelineOperatorErrors from \"./parse-error/pipeline-operator-errors.ts\";\n\nexport const Errors = {\n  ...ParseErrorEnum(ModuleErrors),\n  ...ParseErrorEnum(StandardErrors),\n  ...ParseErrorEnum(StrictModeErrors),\n  ...ParseErrorEnum(ParseExpressionErrors),\n  ...ParseErrorEnum`pipelineOperator`(PipelineOperatorErrors),\n};\n\nexport type { LValAncestor } from \"./parse-error/standard-errors.ts\";\n", "import type { Plugin } from \"./plugin-utils.ts\";\n\n// A second optional argument can be given to further configure\n// the parser process. These options are recognized:\n\nexport type SourceType = \"script\" | \"commonjs\" | \"module\" | \"unambiguous\";\n\nexport interface Options {\n  /**\n   * By default, import and export declarations can only appear at a program's top level.\n   * Setting this option to true allows them anywhere where a statement is allowed.\n   */\n  allowImportExportEverywhere?: boolean;\n\n  /**\n   * By default, await use is not allowed outside of an async function.\n   * Set this to true to accept such code.\n   */\n  allowAwaitOutsideFunction?: boolean;\n\n  /**\n   * By default, a return statement at the top level raises an error.\n   * Set this to true to accept such code.\n   */\n  allowReturnOutsideFunction?: boolean;\n\n  /**\n   * By default, new.target use is not allowed outside of a function or class.\n   * Set this to true to accept such code.\n   */\n  allowNewTargetOutsideFunction?: boolean;\n\n  /**\n   * By default, super calls are not allowed outside of a method.\n   * Set this to true to accept such code.\n   */\n  allowSuperOutsideMethod?: boolean;\n\n  /**\n   * By default, exported identifiers must refer to a declared variable.\n   * Set this to true to allow export statements to reference undeclared variables.\n   */\n  allowUndeclaredExports?: boolean;\n\n  /**\n   * By default, yield use is not allowed outside of a generator function.\n   * Set this to true to accept such code.\n   */\n\n  allowYieldOutsideFunction?: boolean;\n\n  /**\n   * By default, Babel parser JavaScript code according to Annex B syntax.\n   * Set this to `false` to disable such behavior.\n   */\n  annexB?: boolean;\n\n  /**\n   * By default, Babel attaches comments to adjacent AST nodes.\n   * When this option is set to false, comments are not attached.\n   * It can provide up to 30% performance improvement when the input code has many comments.\n   * @babel/eslint-parser will set it for you.\n   * It is not recommended to use attachComment: false with Babel transform,\n   * as doing so removes all the comments in output code, and renders annotations such as\n   * /* istanbul ignore next *\\/ nonfunctional.\n   */\n  attachComment?: boolean;\n\n  /**\n   * By default, Babel always throws an error when it finds some invalid code.\n   * When this option is set to true, it will store the parsing error and\n   * try to continue parsing the invalid input file.\n   */\n  errorRecovery?: boolean;\n\n  /**\n   * Indicate the mode the code should be parsed in.\n   * Can be one of \"script\", \"commonjs\", \"module\", or \"unambiguous\". Defaults to \"script\".\n   * \"unambiguous\" will make @babel/parser attempt to guess, based on the presence\n   * of ES6 import or export statements.\n   * Files with ES6 imports and exports are considered \"module\" and are otherwise \"script\".\n   *\n   * Use \"commonjs\" to parse code that is intended to be run in a CommonJS environment such as Node.js.\n   */\n  sourceType?: SourceType;\n\n  /**\n   * Correlate output AST nodes with their source filename.\n   * Useful when generating code and source maps from the ASTs of multiple input files.\n   */\n  sourceFilename?: string;\n\n  /**\n   * By default, all source indexes start from 0.\n   * You can provide a start index to alternatively start with.\n   * Useful for integration with other source tools.\n   */\n  startIndex?: number;\n\n  /**\n   * By default, the first line of code parsed is treated as line 1.\n   * You can provide a line number to alternatively start with.\n   * Useful for integration with other source tools.\n   */\n  startLine?: number;\n\n  /**\n   * By default, the parsed code is treated as if it starts from line 1, column 0.\n   * You can provide a column number to alternatively start with.\n   * Useful for integration with other source tools.\n   */\n  startColumn?: number;\n\n  /**\n   * Array containing the plugins that you want to enable.\n   */\n  plugins?: Plugin[];\n\n  /**\n   * Should the parser work in strict mode.\n   * Defaults to true if sourceType === 'module'. Otherwise, false.\n   */\n  strictMode?: boolean;\n\n  /**\n   * Adds a ranges property to each node: [node.start, node.end]\n   */\n  ranges?: boolean;\n\n  /**\n   * Adds all parsed tokens to a tokens property on the File node.\n   */\n  tokens?: boolean;\n\n  /**\n   * By default, the parser adds information about parentheses by setting\n   * `extra.parenthesized` to `true` as needed.\n   * When this option is `true` the parser creates `ParenthesizedExpression`\n   * AST nodes instead of using the `extra` property.\n   */\n  createParenthesizedExpressions?: boolean;\n\n  /**\n   * The default is false in Babel 7 and true in Babel 8\n   * Set this to true to parse it as an `ImportExpression` node.\n   * Otherwise `import(foo)` is parsed as `CallExpression(Import, [Identifier(foo)])`.\n   */\n  createImportExpressions?: boolean;\n}\n\nexport const enum OptionFlags {\n  AllowAwaitOutsideFunction = 1 << 0,\n  AllowReturnOutsideFunction = 1 << 1,\n  AllowNewTargetOutsideFunction = 1 << 2,\n  AllowImportExportEverywhere = 1 << 3,\n  AllowSuperOutsideMethod = 1 << 4,\n  AllowYieldOutsideFunction = 1 << 5,\n  AllowUndeclaredExports = 1 << 6,\n  Ranges = 1 << 7,\n  Tokens = 1 << 8,\n  CreateImportExpressions = 1 << 9,\n  CreateParenthesizedExpressions = 1 << 10,\n  ErrorRecovery = 1 << 11,\n  AttachComment = 1 << 12,\n  AnnexB = 1 << 13,\n}\n\ntype KeepOptionalKeys = \"sourceFilename\" | \"strictMode\";\nexport type OptionsWithDefaults = Omit<Required<Options>, KeepOptionalKeys> &\n  Pick<Options, KeepOptionalKeys>;\n\nfunction createDefaultOptions(): OptionsWithDefaults {\n  return {\n    // Source type (\"script\" or \"module\") for different semantics\n    sourceType: \"script\",\n    // Source filename.\n    sourceFilename: undefined,\n    // Index (0-based) from which to start counting source. Useful for\n    // integration with other tools.\n    startIndex: 0,\n    // Column (0-based) from which to start counting source. Useful for\n    // integration with other tools.\n    startColumn: 0,\n    // Line (1-based) from which to start counting source. Useful for\n    // integration with other tools.\n    startLine: 1,\n    // When enabled, await at the top level is not considered an\n    // error.\n    allowAwaitOutsideFunction: false,\n    // When enabled, a return at the top level is not considered an\n    // error.\n    allowReturnOutsideFunction: false,\n    // When enabled, new.target outside a function or class is not\n    // considered an error.\n    allowNewTargetOutsideFunction: false,\n    // When enabled, import/export statements are not constrained to\n    // appearing at the top of the program.\n    allowImportExportEverywhere: false,\n    // When enabled, super outside a method is not considered an error.\n    allowSuperOutsideMethod: false,\n    // When enabled, export statements can reference undeclared variables.\n    allowUndeclaredExports: false,\n    allowYieldOutsideFunction: false,\n    // An array of plugins to enable\n    plugins: [],\n    // TODO\n    strictMode: undefined,\n    // Nodes have their start and end characters offsets recorded in\n    // `start` and `end` properties (directly on the node, rather than\n    // the `loc` object, which holds line/column data. To also add a\n    // [semi-standardized][range] `range` property holding a `[start,\n    // end]` array with the same numbers, set the `ranges` option to\n    // `true`.\n    //\n    // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n    ranges: false,\n    // Adds all parsed tokens to a `tokens` property on the `File` node\n    tokens: false,\n    // Whether to create ImportExpression AST nodes (if false\n    // `import(foo)` will be parsed as CallExpression(Import, [Identifier(foo)])\n    createImportExpressions: process.env.BABEL_8_BREAKING ? true : false,\n    // Whether to create ParenthesizedExpression AST nodes (if false\n    // the parser sets extra.parenthesized on the expression nodes instead).\n    createParenthesizedExpressions: false,\n    // When enabled, errors are attached to the AST instead of being directly thrown.\n    // Some errors will still throw, because @babel/parser can't always recover.\n    errorRecovery: false,\n    // When enabled, comments will be attached to adjacent AST nodes as one of\n    // `leadingComments`, `trailingComments` and `innerComments`. The comment attachment\n    // is vital to preserve comments after transform. If you don't print AST back,\n    // consider set this option to `false` for performance\n    attachComment: true,\n    // When enabled, the parser will support Annex B syntax.\n    // https://tc39.es/ecma262/#sec-additional-ecmascript-features-for-web-browsers\n    annexB: true,\n  };\n}\n\n// Interpret and default an options object\n\nexport function getOptions(opts?: Options | null): OptionsWithDefaults {\n  // https://github.com/babel/babel/pull/16918\n  // `options` is accessed frequently, please make sure it is a fast object.\n  // `%ToFastProperties` can make it a fast object, but the performance is the same as the slow object.\n  const options: any = createDefaultOptions();\n\n  if (opts == null) {\n    return options;\n  }\n  if (opts.annexB != null && opts.annexB !== false) {\n    throw new Error(\"The `annexB` option can only be set to `false`.\");\n  }\n\n  for (const key of Object.keys(options) as (keyof Options)[]) {\n    if (opts[key] != null) options[key] = opts[key];\n  }\n\n  if (options.startLine === 1) {\n    if (opts.startIndex == null && options.startColumn > 0) {\n      options.startIndex = options.startColumn;\n    } else if (opts.startColumn == null && options.startIndex > 0) {\n      options.startColumn = options.startIndex;\n    }\n  } else if (opts.startColumn == null || opts.startIndex == null) {\n    if (opts.startIndex != null || process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"With a `startLine > 1` you must also specify `startIndex` and `startColumn`.\",\n      );\n    }\n  }\n\n  if (options.sourceType === \"commonjs\") {\n    if (opts.allowAwaitOutsideFunction != null) {\n      throw new Error(\n        \"The `allowAwaitOutsideFunction` option cannot be used with `sourceType: 'commonjs'`.\",\n      );\n    }\n    if (opts.allowReturnOutsideFunction != null) {\n      throw new Error(\n        \"`sourceType: 'commonjs'` implies `allowReturnOutsideFunction: true`, please remove the `allowReturnOutsideFunction` option or use `sourceType: 'script'`.\",\n      );\n    }\n    if (opts.allowNewTargetOutsideFunction != null) {\n      throw new Error(\n        \"`sourceType: 'commonjs'` implies `allowNewTargetOutsideFunction: true`, please remove the `allowNewTargetOutsideFunction` option or use `sourceType: 'script'`.\",\n      );\n    }\n  }\n\n  return options;\n}\n", "import type { TokenType } from \"../tokenizer/types.ts\";\nimport type Parser from \"../parser/index.ts\";\nimport type * as N from \"../types.ts\";\nimport type { Node as NodeType, NodeBase } from \"../types.ts\";\nimport type { Position } from \"../util/location.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { BindingFlag } from \"../util/scopeflags.ts\";\nimport { OptionFlags } from \"../options.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\nimport type { ParseResult, File } from \"../index.ts\";\n\nconst { defineProperty } = Object;\nconst toUnenumerable = (object: any, key: string) => {\n  if (object) {\n    defineProperty(object, key, { enumerable: false, value: object[key] });\n  }\n};\n\nfunction toESTreeLocation(node: any) {\n  toUnenumerable(node.loc.start, \"index\");\n  toUnenumerable(node.loc.end, \"index\");\n\n  return node;\n}\n\nexport default (superClass: typeof Parser) =>\n  class ESTreeParserMixin extends superClass implements Parser {\n    parse(): ParseResult<File> {\n      const file = toESTreeLocation(super.parse());\n\n      if (this.optionFlags & OptionFlags.Tokens) {\n        file.tokens = file.tokens.map(toESTreeLocation);\n      }\n\n      return file;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseRegExpLiteral({ pattern, flags }): N.EstreeRegExpLiteral {\n      let regex: RegExp | null = null;\n      try {\n        regex = new RegExp(pattern, flags);\n      } catch (_) {\n        // In environments that don't support these flags value will\n        // be null as the regex can't be represented natively.\n      }\n      const node = this.estreeParseLiteral<N.EstreeRegExpLiteral>(regex);\n      node.regex = { pattern, flags };\n\n      return node;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseBigIntLiteral(value: any): N.Node {\n      // https://github.com/estree/estree/blob/master/es2020.md#bigintliteral\n      let bigInt: bigint | null;\n      try {\n        bigInt = BigInt(value);\n      } catch {\n        bigInt = null;\n      }\n      const node = this.estreeParseLiteral<N.EstreeBigIntLiteral>(bigInt);\n      node.bigint = String(node.value || value);\n\n      return node;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseDecimalLiteral(value: any): N.Node {\n      // https://github.com/estree/estree/blob/master/experimental/decimal.md\n      // todo: use BigDecimal when node supports it.\n      const decimal: null = null;\n      const node = this.estreeParseLiteral(decimal);\n      node.decimal = String(node.value || value);\n\n      return node;\n    }\n\n    estreeParseLiteral<T extends N.EstreeLiteral>(value: any) {\n      // @ts-expect-error ESTree plugin changes node types\n      return this.parseLiteral<T>(value, \"Literal\");\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseStringLiteral(value: any): N.Node {\n      return this.estreeParseLiteral(value);\n    }\n\n    parseNumericLiteral(value: any): any {\n      return this.estreeParseLiteral(value);\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseNullLiteral(): N.Node {\n      return this.estreeParseLiteral(null);\n    }\n\n    parseBooleanLiteral(value: boolean): N.BooleanLiteral {\n      // @ts-expect-error ESTree plugin changes node types\n      return this.estreeParseLiteral(value);\n    }\n\n    // https://github.com/estree/estree/blob/master/es2020.md#chainexpression\n    estreeParseChainExpression(\n      node: N.Expression,\n      endLoc: Position,\n    ): N.EstreeChainExpression {\n      const chain = this.startNodeAtNode<N.EstreeChainExpression>(node);\n      chain.expression = node;\n      return this.finishNodeAt(chain, \"ChainExpression\", endLoc);\n    }\n\n    // Cast a Directive to an ExpressionStatement. Mutates the input Directive.\n    directiveToStmt(directive: N.Directive): N.ExpressionStatement {\n      const expression = directive.value as any as N.EstreeLiteral;\n      // @ts-expect-error delete non-optional properties\n      delete directive.value;\n\n      this.castNodeTo(expression, \"Literal\");\n      expression.raw = expression.extra!.raw;\n      expression.value = expression.extra!.expressionValue;\n\n      const stmt = this.castNodeTo(directive, \"ExpressionStatement\");\n      stmt.expression = expression;\n      stmt.directive = expression.extra!.rawValue;\n\n      delete expression.extra;\n\n      return stmt;\n    }\n\n    /**\n     * The TS-ESLint always define optional AST properties, here we provide the\n     * default value for such properties immediately after `finishNode` was invoked.\n     * This hook will be implemented by the typescript plugin.\n     *\n     * Note: This hook should be manually invoked when we change the `type` of a given AST\n     * node, to ensure that the optional properties are correctly filled.\n     * @param node The AST node finished by finishNode\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    fillOptionalPropertiesForTSESLint(node: NodeType) {}\n\n    cloneEstreeStringLiteral(node: N.EstreeLiteral): N.EstreeLiteral {\n      const { start, end, loc, range, raw, value } = node;\n      const cloned = Object.create(node.constructor.prototype);\n      cloned.type = \"Literal\";\n      cloned.start = start;\n      cloned.end = end;\n      cloned.loc = loc;\n      cloned.range = range;\n      cloned.raw = raw;\n      cloned.value = value;\n      return cloned;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: boolean): void {\n      super.initFunction(node, isAsync);\n      node.expression = false;\n    }\n\n    checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n      if (node != null && this.isObjectProperty(node)) {\n        // @ts-expect-error plugin typings\n        this.checkDeclaration((node as unknown as N.EstreeProperty).value);\n      } else {\n        super.checkDeclaration(node);\n      }\n    }\n\n    getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n      return (method as unknown as N.EstreeMethodDefinition).value.params;\n    }\n\n    isValidDirective(stmt: N.Statement): stmt is N.ExpressionStatement {\n      return (\n        stmt.type === \"ExpressionStatement\" &&\n        stmt.expression.type === \"Literal\" &&\n        typeof stmt.expression.value === \"string\" &&\n        !stmt.expression.extra?.parenthesized\n      );\n    }\n\n    parseBlockBody(\n      node: N.BlockStatementLike,\n      allowDirectives: boolean | undefined | null,\n      topLevel: boolean,\n      end: TokenType,\n      afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n    ): void {\n      super.parseBlockBody(\n        node,\n        allowDirectives,\n        topLevel,\n        end,\n        afterBlockParse,\n      );\n\n      const directiveStatements = node.directives.map(d =>\n        this.directiveToStmt(d),\n      );\n      // @ts-expect-error estree plugin typings\n      node.body = directiveStatements.concat(node.body);\n      // @ts-expect-error delete non-optional properties\n      delete node.directives;\n    }\n\n    parsePrivateName(): any {\n      const node = super.parsePrivateName();\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return node;\n        }\n      }\n      return this.convertPrivateNameToPrivateIdentifier(node);\n    }\n\n    convertPrivateNameToPrivateIdentifier(\n      node: N.PrivateName,\n    ): N.EstreePrivateIdentifier {\n      const name = super.getPrivateNameSV(node);\n      // @ts-expect-error delete non-optional properties\n      delete node.id;\n      // @ts-expect-error mutate AST types\n      node.name = name;\n      return this.castNodeTo(node, \"PrivateIdentifier\");\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    isPrivateName(node: N.Node): node is N.EstreePrivateIdentifier {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return super.isPrivateName(node);\n        }\n      }\n      return node.type === \"PrivateIdentifier\";\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    getPrivateNameSV(node: N.EstreePrivateIdentifier): string {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return super.getPrivateNameSV(node as unknown as N.PrivateName);\n        }\n      }\n      return node.name;\n    }\n\n    // @ts-expect-error plugin may override interfaces\n    parseLiteral<T extends N.Literal>(value: any, type: T[\"type\"]): T {\n      const node = super.parseLiteral<T>(value, type);\n      // @ts-expect-error mutating AST types\n      node.raw = node.extra.raw;\n      delete node.extra;\n\n      return node;\n    }\n\n    parseFunctionBody(\n      node: N.Function,\n      allowExpression?: boolean | null,\n      isMethod: boolean = false,\n    ): void {\n      super.parseFunctionBody(node, allowExpression, isMethod);\n      node.expression = node.body.type !== \"BlockStatement\";\n    }\n\n    // @ts-expect-error plugin may override interfaces\n    parseMethod<\n      T extends N.ClassPrivateMethod | N.ObjectMethod | N.ClassMethod,\n    >(\n      node: Undone<T>,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowDirectSuper: boolean,\n      type: T[\"type\"],\n      inClassScope: boolean = false,\n    ):\n      | N.EstreeProperty\n      | N.EstreeMethodDefinition\n      | N.EstreeTSAbstractMethodDefinition {\n      let funcNode = this.startNode<N.MethodLike>();\n      funcNode.kind = node.kind; // provide kind, so super method correctly sets state\n      funcNode = super.parseMethod(\n        funcNode,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowDirectSuper,\n        type,\n        inClassScope,\n      );\n      // @ts-expect-error delete non-optional properties\n      delete funcNode.kind;\n      const { typeParameters } = node;\n      if (typeParameters) {\n        delete node.typeParameters;\n        funcNode.typeParameters = typeParameters;\n        this.resetStartLocationFromNode(funcNode, typeParameters);\n      }\n      const valueNode = this.castNodeTo(\n        funcNode as N.MethodLike,\n        process.env.BABEL_8_BREAKING &&\n          this.hasPlugin(\"typescript\") &&\n          !funcNode.body\n          ? \"TSEmptyBodyFunctionExpression\"\n          : \"FunctionExpression\",\n      );\n      (\n        node as unknown as Undone<\n          | N.EstreeProperty\n          | N.EstreeMethodDefinition\n          | N.EstreeTSAbstractMethodDefinition\n        >\n      ).value = valueNode;\n      if (type === \"ClassPrivateMethod\") {\n        node.computed = false;\n      }\n      if (process.env.BABEL_8_BREAKING && this.hasPlugin(\"typescript\")) {\n        // @ts-expect-error todo(flow->ts) property not defined for all types in union\n        if (node.abstract) {\n          // @ts-expect-error remove abstract from TSAbstractMethodDefinition\n          delete node.abstract;\n          return this.finishNode(\n            // @ts-expect-error cast methods to estree types\n            node as Undone<N.EstreeTSAbstractMethodDefinition>,\n            \"TSAbstractMethodDefinition\",\n          );\n        }\n      }\n      if (type === \"ObjectMethod\") {\n        if ((node as any as N.ObjectMethod).kind === \"method\") {\n          (node as any as N.EstreeProperty).kind = \"init\";\n        }\n        (node as any as N.EstreeProperty).shorthand = false;\n        return this.finishNode(\n          // @ts-expect-error cast methods to estree types\n          node as Undone<N.EstreeProperty>,\n          \"Property\",\n        );\n      } else {\n        return this.finishNode(\n          // @ts-expect-error cast methods to estree types\n          node as Undone<N.EstreeMethodDefinition>,\n          \"MethodDefinition\",\n        );\n      }\n    }\n\n    nameIsConstructor(key: N.Expression | N.PrivateName): boolean {\n      if (key.type === \"Literal\") return key.value === \"constructor\";\n      return super.nameIsConstructor(key);\n    }\n\n    parseClassProperty(...args: [N.ClassProperty]): any {\n      const propertyNode = super.parseClassProperty(...args);\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return propertyNode as unknown as N.EstreePropertyDefinition;\n        }\n      }\n      if (\n        process.env.BABEL_8_BREAKING &&\n        propertyNode.abstract &&\n        this.hasPlugin(\"typescript\")\n      ) {\n        delete propertyNode.abstract;\n        this.castNodeTo(propertyNode, \"TSAbstractPropertyDefinition\");\n      } else {\n        this.castNodeTo(propertyNode, \"PropertyDefinition\");\n      }\n      return propertyNode;\n    }\n\n    parseClassPrivateProperty(...args: [N.ClassPrivateProperty]): any {\n      const propertyNode = super.parseClassPrivateProperty(...args);\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return propertyNode as unknown as N.EstreePropertyDefinition;\n        }\n      }\n      if (\n        process.env.BABEL_8_BREAKING &&\n        propertyNode.abstract &&\n        this.hasPlugin(\"typescript\")\n      ) {\n        this.castNodeTo(propertyNode, \"TSAbstractPropertyDefinition\");\n      } else {\n        this.castNodeTo(propertyNode, \"PropertyDefinition\");\n      }\n      propertyNode.computed = false;\n      return propertyNode;\n    }\n\n    parseClassAccessorProperty(\n      this: Parser,\n      node: N.ClassAccessorProperty,\n    ): any {\n      const accessorPropertyNode = super.parseClassAccessorProperty(node);\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return accessorPropertyNode;\n        }\n      }\n      if (accessorPropertyNode.abstract && this.hasPlugin(\"typescript\")) {\n        delete accessorPropertyNode.abstract;\n        this.castNodeTo(accessorPropertyNode, \"TSAbstractAccessorProperty\");\n      } else {\n        this.castNodeTo(accessorPropertyNode, \"AccessorProperty\");\n      }\n      return accessorPropertyNode;\n    }\n\n    parseObjectProperty(\n      prop: N.ObjectProperty,\n      startLoc: Position | undefined | null,\n      isPattern: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ObjectProperty | undefined | null {\n      const node: N.EstreeProperty = super.parseObjectProperty(\n        prop,\n        startLoc,\n        isPattern,\n        refExpressionErrors,\n      ) as any;\n\n      if (node) {\n        node.kind = \"init\";\n        this.castNodeTo(node, \"Property\");\n      }\n\n      return node as any;\n    }\n\n    finishObjectProperty(node: Undone<N.ObjectProperty>): N.ObjectProperty {\n      (node as unknown as Undone<N.EstreeProperty>).kind = \"init\";\n      return this.finishNode(\n        node as unknown as Undone<N.EstreeProperty>,\n        \"Property\",\n      ) as any;\n    }\n\n    isValidLVal(\n      type: string,\n      disallowCallExpression: boolean,\n      isUnparenthesizedInAssign: boolean,\n      binding: BindingFlag,\n    ) {\n      return type === \"Property\"\n        ? \"value\"\n        : super.isValidLVal(\n            type,\n            disallowCallExpression,\n            isUnparenthesizedInAssign,\n            binding,\n          );\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      if (node != null && this.isObjectProperty(node)) {\n        return this.isAssignable(node.value, isBinding);\n      }\n      return super.isAssignable(node, isBinding);\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\n      if (node != null && this.isObjectProperty(node)) {\n        const { key, value } = node;\n        if (this.isPrivateName(key)) {\n          this.classScope.usePrivateName(\n            this.getPrivateNameSV(key),\n            key.loc.start,\n          );\n        }\n        this.toAssignable(value, isLHS);\n      } else {\n        super.toAssignable(node, isLHS);\n      }\n    }\n\n    toAssignableObjectExpressionProp(\n      prop: N.Node,\n      isLast: boolean,\n      isLHS: boolean,\n    ) {\n      if (\n        prop.type === \"Property\" &&\n        (prop.kind === \"get\" || prop.kind === \"set\")\n      ) {\n        this.raise(Errors.PatternHasAccessor, prop.key);\n      } else if (prop.type === \"Property\" && prop.method) {\n        this.raise(Errors.PatternHasMethod, prop.key);\n      } else {\n        super.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n      }\n    }\n\n    finishCallExpression<T extends N.CallExpression | N.OptionalCallExpression>(\n      unfinished: Undone<T>,\n      optional: boolean,\n    ): T {\n      const node = super.finishCallExpression(unfinished, optional);\n\n      if (node.callee.type === \"Import\") {\n        this.castNodeTo(node, \"ImportExpression\");\n        (node as N.Node as N.EstreeImportExpression).source = node\n          .arguments[0] as N.Expression;\n        (node as N.Node as N.EstreeImportExpression).options =\n          (node.arguments[1] as N.Expression) ?? null;\n        if (!process.env.BABEL_8_BREAKING) {\n          // compatibility with previous ESTree AST\n          (node as N.Node as N.EstreeImportExpression).attributes =\n            (node.arguments[1] as N.Expression) ?? null;\n        }\n        // arguments isn't optional in the type definition\n        // @ts-expect-error delete non-optional properties\n        delete node.arguments;\n        // callee isn't optional in the type definition\n        // @ts-expect-error delete non-optional properties\n        delete node.callee;\n      } else if (node.type === \"OptionalCallExpression\") {\n        this.castNodeTo(node, \"CallExpression\");\n      } else {\n        node.optional = false;\n      }\n\n      return node;\n    }\n\n    toReferencedArguments(\n      node:\n        | N.CallExpression\n        | N.OptionalCallExpression\n        | N.EstreeImportExpression,\n      /* isParenthesizedExpr?: boolean, */\n    ) {\n      // ImportExpressions do not have an arguments array.\n      if (node.type === \"ImportExpression\") {\n        return;\n      }\n\n      super.toReferencedArguments(node);\n    }\n\n    parseExport(\n      unfinished: Undone<N.AnyExport>,\n      decorators: N.Decorator[] | null,\n    ) {\n      const exportStartLoc = this.state.lastTokStartLoc!;\n      const node = super.parseExport(unfinished, decorators);\n\n      switch (node.type) {\n        case \"ExportAllDeclaration\":\n          // @ts-expect-error mutating AST types\n          node.exported = null;\n          break;\n\n        case \"ExportNamedDeclaration\":\n          if (\n            node.specifiers.length === 1 &&\n            node.specifiers[0].type === \"ExportNamespaceSpecifier\"\n          ) {\n            this.castNodeTo(node, \"ExportAllDeclaration\");\n            // @ts-expect-error mutating AST types\n            node.exported = node.specifiers[0].exported;\n            // @ts-expect-error The ESTree AST shape differs from the Babel AST\n            delete node.specifiers;\n          }\n\n        // fallthrough\n        case \"ExportDefaultDeclaration\":\n          {\n            const { declaration } = node;\n            if (\n              declaration?.type === \"ClassDeclaration\" &&\n              // @ts-expect-error comparing undefined and number\n              declaration.decorators?.length > 0 &&\n              // decorator comes before export\n              declaration.start === node.start\n            ) {\n              this.resetStartLocation(\n                node,\n                // For compatibility with ESLint's keyword-spacing rule, which assumes that an\n                // export declaration must start with export.\n                // https://github.com/babel/babel/issues/15085\n                // Here we reset export declaration's start to be the start of the export token\n                exportStartLoc,\n              );\n            }\n          }\n\n          break;\n      }\n\n      return node;\n    }\n\n    stopParseSubscript(base: N.Expression, state: N.ParseSubscriptState) {\n      const node = super.stopParseSubscript(base, state);\n      if (state.optionalChainMember) {\n        return this.estreeParseChainExpression(node, base.loc.end);\n      }\n      return node;\n    }\n\n    parseMember(\n      base: N.Expression,\n      startLoc: Position,\n      state: N.ParseSubscriptState,\n      computed: boolean,\n      optional: boolean,\n    ) {\n      const node = super.parseMember(base, startLoc, state, computed, optional);\n      if (node.type === \"OptionalMemberExpression\") {\n        this.castNodeTo(node, \"MemberExpression\");\n      } else {\n        node.optional = false;\n      }\n      return node;\n    }\n\n    isOptionalMemberExpression(node: N.Node) {\n      if (node.type === \"ChainExpression\") {\n        return node.expression.type === \"MemberExpression\";\n      }\n      return super.isOptionalMemberExpression(node);\n    }\n\n    hasPropertyAsPrivateName(node: N.Node): boolean {\n      if (node.type === \"ChainExpression\") {\n        node = node.expression;\n      }\n      return super.hasPropertyAsPrivateName(node);\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    isObjectProperty(node: N.Node): node is N.EstreeProperty {\n      return node.type === \"Property\" && node.kind === \"init\" && !node.method;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    isObjectMethod(node: N.Node): node is N.EstreeProperty {\n      return (\n        node.type === \"Property\" &&\n        (node.method || node.kind === \"get\" || node.kind === \"set\")\n      );\n    }\n\n    /* ============================================================ *\n     * parser/node.ts                                               *\n     * ============================================================ */\n\n    castNodeTo<T extends N.Node[\"type\"]>(\n      node: N.Node,\n      type: T,\n    ): Extract<N.Node, { type: T }> {\n      const result = super.castNodeTo(node, type);\n      this.fillOptionalPropertiesForTSESLint(result);\n      return result;\n    }\n\n    cloneIdentifier<T extends N.Identifier | N.Placeholder>(node: T): T {\n      const cloned = super.cloneIdentifier(node);\n      this.fillOptionalPropertiesForTSESLint(cloned);\n      return cloned;\n    }\n\n    cloneStringLiteral<\n      T extends N.EstreeLiteral | N.StringLiteral | N.Placeholder,\n    >(node: T): T {\n      if (node.type === \"Literal\") {\n        return this.cloneEstreeStringLiteral(node) as T;\n      }\n      return super.cloneStringLiteral(node);\n    }\n\n    finishNodeAt<T extends NodeType>(\n      node: Undone<T>,\n      type: T[\"type\"],\n      endLoc: Position,\n    ): T {\n      return toESTreeLocation(super.finishNodeAt(node, type, endLoc));\n    }\n\n    // Override for TS-ESLint that does not allow optional AST properties\n    finishNode<T extends NodeType>(node: Undone<T>, type: T[\"type\"]): T {\n      const result = super.finishNode(node, type);\n      this.fillOptionalPropertiesForTSESLint(result);\n      return result;\n    }\n\n    resetStartLocation(node: N.Node, startLoc: Position) {\n      super.resetStartLocation(node, startLoc);\n      toESTreeLocation(node);\n    }\n\n    resetEndLocation(\n      node: NodeBase,\n      endLoc: Position = this.state.lastTokEndLoc!,\n    ): void {\n      super.resetEndLocation(node, endLoc);\n      toESTreeLocation(node);\n    }\n  };\n", "// The token context is used in JSX plugin to track\n// jsx tag / jsx text / normal JavaScript expression\n\nexport class TokContext {\n  constructor(token: string, preserveSpace?: boolean) {\n    this.token = token;\n    this.preserveSpace = !!preserveSpace;\n  }\n\n  token: string;\n  preserveSpace: boolean;\n}\n\nconst types: {\n  [key: string]: TokContext;\n} = {\n  brace: new TokContext(\"{\"), // normal JavaScript expression\n  j_oTag: new TokContext(\"<tag\"), // JSX opening tag\n  j_cTag: new TokContext(\"</tag\"), // JSX closing tag\n  j_expr: new TokContext(\"<tag>...</tag>\", true), // JSX expressions\n};\n\nif (!process.env.BABEL_8_BREAKING) {\n  types.template = new TokContext(\"`\", true);\n}\n\nexport { types };\n", "import { types as tc, type TokContext } from \"./context.ts\";\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between 1) binary\n// expression (<) and JSX Tag start (<name>); 2) object literal and JSX\n// texts. It is set on the `updateContext` function in the JSX plugin.\n\n// The `startsExpr` property is used to determine whether an expression\n// may be the “argument” subexpression of a `yield` expression or\n// `yield` statement. It is set on all token types that may be at the\n// start of a subexpression.\n\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nconst beforeExpr = true;\nconst startsExpr = true;\nconst isLoop = true;\nconst isAssign = true;\nconst prefix = true;\nconst postfix = true;\n\ntype TokenOptions = {\n  keyword?: string;\n  beforeExpr?: boolean;\n  startsExpr?: boolean;\n  rightAssociative?: boolean;\n  isLoop?: boolean;\n  isAssign?: boolean;\n  prefix?: boolean;\n  postfix?: boolean;\n  binop?: number | null;\n};\n\n// Internally the tokenizer stores token as a number\nexport type TokenType = number;\n\n// The `ExportedTokenType` is exported via `tokTypes` and accessible\n// when `tokens: true` is enabled. Unlike internal token type, it provides\n// metadata of the tokens.\nexport class ExportedTokenType {\n  label: string;\n  keyword: string | undefined | null;\n  beforeExpr: boolean;\n  startsExpr: boolean;\n  rightAssociative: boolean;\n  isLoop: boolean;\n  isAssign: boolean;\n  prefix: boolean;\n  postfix: boolean;\n  binop: number | undefined | null;\n  // todo(Babel 8): remove updateContext from exposed token layout\n  declare updateContext:\n    | ((context: Array<TokContext>) => void)\n    | undefined\n    | null;\n\n  constructor(label: string, conf: TokenOptions = {}) {\n    this.label = label;\n    this.keyword = conf.keyword;\n    this.beforeExpr = !!conf.beforeExpr;\n    this.startsExpr = !!conf.startsExpr;\n    this.rightAssociative = !!conf.rightAssociative;\n    this.isLoop = !!conf.isLoop;\n    this.isAssign = !!conf.isAssign;\n    this.prefix = !!conf.prefix;\n    this.postfix = !!conf.postfix;\n    this.binop = conf.binop != null ? conf.binop : null;\n    if (!process.env.BABEL_8_BREAKING) {\n      this.updateContext = null;\n    }\n  }\n}\n\n// A map from keyword/keyword-like string value to the token type\nexport const keywords = new Map<string, TokenType>();\n\nfunction createKeyword(name: string, options: TokenOptions = {}): TokenType {\n  options.keyword = name;\n  const token = createToken(name, options);\n  keywords.set(name, token);\n  return token;\n}\n\nfunction createBinop(name: string, binop: number) {\n  return createToken(name, { beforeExpr, binop });\n}\n\nlet tokenTypeCounter = -1;\nexport const tokenTypes: ExportedTokenType[] = [];\nconst tokenLabels: string[] = [];\nconst tokenBinops: number[] = [];\nconst tokenBeforeExprs: boolean[] = [];\nconst tokenStartsExprs: boolean[] = [];\nconst tokenPrefixes: boolean[] = [];\n\nfunction createToken(name: string, options: TokenOptions = {}): TokenType {\n  ++tokenTypeCounter;\n  tokenLabels.push(name);\n  tokenBinops.push(options.binop ?? -1);\n  tokenBeforeExprs.push(options.beforeExpr ?? false);\n  tokenStartsExprs.push(options.startsExpr ?? false);\n  tokenPrefixes.push(options.prefix ?? false);\n  tokenTypes.push(new ExportedTokenType(name, options));\n\n  return tokenTypeCounter;\n}\n\nfunction createKeywordLike(\n  name: string,\n  options: TokenOptions = {},\n): TokenType {\n  ++tokenTypeCounter;\n  keywords.set(name, tokenTypeCounter);\n  tokenLabels.push(name);\n  tokenBinops.push(options.binop ?? -1);\n  tokenBeforeExprs.push(options.beforeExpr ?? false);\n  tokenStartsExprs.push(options.startsExpr ?? false);\n  tokenPrefixes.push(options.prefix ?? false);\n  // In the exported token type, we set the label as \"name\" for backward compatibility with Babel 7\n  tokenTypes.push(new ExportedTokenType(\"name\", options));\n\n  return tokenTypeCounter;\n}\n\n// For performance the token type helpers depend on the following declarations order.\n// When adding new token types, please also check if the token helpers need update.\n\nexport type InternalTokenTypes = typeof tt;\n\nexport const tt = {\n  // Punctuation token types.\n  bracketL: createToken(\"[\", { beforeExpr, startsExpr }),\n  // TODO: Remove this in Babel 8\n  bracketHashL: createToken(\"#[\", { beforeExpr, startsExpr }),\n  // TODO: Remove this in Babel 8\n  bracketBarL: createToken(\"[|\", { beforeExpr, startsExpr }),\n  bracketR: createToken(\"]\"),\n  // TODO: Remove this in Babel 8\n  bracketBarR: createToken(\"|]\"),\n  braceL: createToken(\"{\", { beforeExpr, startsExpr }),\n  // TODO: Remove this in Babel 8\n  braceBarL: createToken(\"{|\", { beforeExpr, startsExpr }),\n  // TODO: Remove this in Babel 8\n  braceHashL: createToken(\"#{\", { beforeExpr, startsExpr }),\n  braceR: createToken(\"}\"),\n  braceBarR: createToken(\"|}\"),\n  parenL: createToken(\"(\", { beforeExpr, startsExpr }),\n  parenR: createToken(\")\"),\n  comma: createToken(\",\", { beforeExpr }),\n  semi: createToken(\";\", { beforeExpr }),\n  colon: createToken(\":\", { beforeExpr }),\n  doubleColon: createToken(\"::\", { beforeExpr }),\n  dot: createToken(\".\"),\n  question: createToken(\"?\", { beforeExpr }),\n  questionDot: createToken(\"?.\"),\n  arrow: createToken(\"=>\", { beforeExpr }),\n  template: createToken(\"template\"),\n  ellipsis: createToken(\"...\", { beforeExpr }),\n  backQuote: createToken(\"`\", { startsExpr }),\n  dollarBraceL: createToken(\"${\", { beforeExpr, startsExpr }),\n  // start: isTemplate\n  templateTail: createToken(\"...`\", { startsExpr }),\n  templateNonTail: createToken(\"...${\", { beforeExpr, startsExpr }),\n  // end: isTemplate\n  at: createToken(\"@\"),\n  hash: createToken(\"#\", { startsExpr }),\n\n  // Special hashbang token.\n  interpreterDirective: createToken(\"#!...\"),\n\n  // Operators. These carry several kinds of properties to help the\n  // parser use them properly (the presence of these properties is\n  // what categorizes them as operators).\n  //\n  // `binop`, when present, specifies that this operator is a binary\n  // operator, and will refer to its precedence.\n  //\n  // `prefix` and `postfix` mark the operator as a prefix or postfix\n  // unary operator.\n  //\n  // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n  // binary operators with a very low precedence, that should result\n  // in AssignmentExpression nodes.\n\n  // start: isAssign\n  eq: createToken(\"=\", { beforeExpr, isAssign }),\n  assign: createToken(\"_=\", { beforeExpr, isAssign }),\n  slashAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  // These are only needed to support % and ^ as a Hack-pipe topic token.\n  // When the proposal settles on a token, the others can be merged with\n  // tt.assign.\n  xorAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  moduloAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  // end: isAssign\n\n  incDec: createToken(\"++/--\", { prefix, postfix, startsExpr }),\n  bang: createToken(\"!\", { beforeExpr, prefix, startsExpr }),\n  tilde: createToken(\"~\", { beforeExpr, prefix, startsExpr }),\n\n  // More possible topic tokens.\n  // When the proposal settles on a token, at least one of these may be removed.\n  doubleCaret: createToken(\"^^\", { startsExpr }),\n  doubleAt: createToken(\"@@\", { startsExpr }),\n\n  // start: isBinop\n  pipeline: createBinop(\"|>\", 0),\n  nullishCoalescing: createBinop(\"??\", 1),\n  logicalOR: createBinop(\"||\", 1),\n  logicalAND: createBinop(\"&&\", 2),\n  bitwiseOR: createBinop(\"|\", 3),\n  bitwiseXOR: createBinop(\"^\", 4),\n  bitwiseAND: createBinop(\"&\", 5),\n  equality: createBinop(\"==/!=/===/!==\", 6),\n  lt: createBinop(\"</>/<=/>=\", 7),\n  gt: createBinop(\"</>/<=/>=\", 7),\n  relational: createBinop(\"</>/<=/>=\", 7),\n  bitShift: createBinop(\"<</>>/>>>\", 8),\n  bitShiftL: createBinop(\"<</>>/>>>\", 8),\n  bitShiftR: createBinop(\"<</>>/>>>\", 8),\n  plusMin: createToken(\"+/-\", { beforeExpr, binop: 9, prefix, startsExpr }),\n  // startsExpr: required by v8intrinsic plugin\n  modulo: createToken(\"%\", { binop: 10, startsExpr }),\n  // unset `beforeExpr` as it can be `function *`\n  star: createToken(\"*\", { binop: 10 }),\n  slash: createBinop(\"/\", 10),\n  exponent: createToken(\"**\", {\n    beforeExpr,\n    binop: 11,\n    rightAssociative: true,\n  }),\n\n  // Keywords\n  // Don't forget to update packages/babel-helper-validator-identifier/src/keyword.js\n  // when new keywords are added\n  // start: isLiteralPropertyName\n  // start: isKeyword\n  _in: createKeyword(\"in\", { beforeExpr, binop: 7 }),\n  _instanceof: createKeyword(\"instanceof\", { beforeExpr, binop: 7 }),\n  // end: isBinop\n  _break: createKeyword(\"break\"),\n  _case: createKeyword(\"case\", { beforeExpr }),\n  _catch: createKeyword(\"catch\"),\n  _continue: createKeyword(\"continue\"),\n  _debugger: createKeyword(\"debugger\"),\n  _default: createKeyword(\"default\", { beforeExpr }),\n  _else: createKeyword(\"else\", { beforeExpr }),\n  _finally: createKeyword(\"finally\"),\n  _function: createKeyword(\"function\", { startsExpr }),\n  _if: createKeyword(\"if\"),\n  _return: createKeyword(\"return\", { beforeExpr }),\n  _switch: createKeyword(\"switch\"),\n  _throw: createKeyword(\"throw\", { beforeExpr, prefix, startsExpr }),\n  _try: createKeyword(\"try\"),\n  _var: createKeyword(\"var\"),\n  _const: createKeyword(\"const\"),\n  _with: createKeyword(\"with\"),\n  _new: createKeyword(\"new\", { beforeExpr, startsExpr }),\n  _this: createKeyword(\"this\", { startsExpr }),\n  _super: createKeyword(\"super\", { startsExpr }),\n  _class: createKeyword(\"class\", { startsExpr }),\n  _extends: createKeyword(\"extends\", { beforeExpr }),\n  _export: createKeyword(\"export\"),\n  _import: createKeyword(\"import\", { startsExpr }),\n  _null: createKeyword(\"null\", { startsExpr }),\n  _true: createKeyword(\"true\", { startsExpr }),\n  _false: createKeyword(\"false\", { startsExpr }),\n  _typeof: createKeyword(\"typeof\", { beforeExpr, prefix, startsExpr }),\n  _void: createKeyword(\"void\", { beforeExpr, prefix, startsExpr }),\n  _delete: createKeyword(\"delete\", { beforeExpr, prefix, startsExpr }),\n  // start: isLoop\n  _do: createKeyword(\"do\", { isLoop, beforeExpr }),\n  _for: createKeyword(\"for\", { isLoop }),\n  _while: createKeyword(\"while\", { isLoop }),\n  // end: isLoop\n  // end: isKeyword\n\n  // Primary literals\n  // start: isIdentifier\n  _as: createKeywordLike(\"as\", { startsExpr }),\n  _assert: createKeywordLike(\"assert\", { startsExpr }),\n  _async: createKeywordLike(\"async\", { startsExpr }),\n  _await: createKeywordLike(\"await\", { startsExpr }),\n  _defer: createKeywordLike(\"defer\", { startsExpr }),\n  _from: createKeywordLike(\"from\", { startsExpr }),\n  _get: createKeywordLike(\"get\", { startsExpr }),\n  _let: createKeywordLike(\"let\", { startsExpr }),\n  _meta: createKeywordLike(\"meta\", { startsExpr }),\n  _of: createKeywordLike(\"of\", { startsExpr }),\n  _sent: createKeywordLike(\"sent\", { startsExpr }),\n  _set: createKeywordLike(\"set\", { startsExpr }),\n  _source: createKeywordLike(\"source\", { startsExpr }),\n  _static: createKeywordLike(\"static\", { startsExpr }),\n  _using: createKeywordLike(\"using\", { startsExpr }),\n  _yield: createKeywordLike(\"yield\", { startsExpr }),\n\n  // Flow and TypeScript Keywordlike\n  _asserts: createKeywordLike(\"asserts\", { startsExpr }),\n  _checks: createKeywordLike(\"checks\", { startsExpr }),\n  _exports: createKeywordLike(\"exports\", { startsExpr }),\n  _global: createKeywordLike(\"global\", { startsExpr }),\n  _implements: createKeywordLike(\"implements\", { startsExpr }),\n  _intrinsic: createKeywordLike(\"intrinsic\", { startsExpr }),\n  _infer: createKeywordLike(\"infer\", { startsExpr }),\n  _is: createKeywordLike(\"is\", { startsExpr }),\n  _mixins: createKeywordLike(\"mixins\", { startsExpr }),\n  _proto: createKeywordLike(\"proto\", { startsExpr }),\n  _require: createKeywordLike(\"require\", { startsExpr }),\n  _satisfies: createKeywordLike(\"satisfies\", { startsExpr }),\n  // start: isTSTypeOperator\n  _keyof: createKeywordLike(\"keyof\", { startsExpr }),\n  _readonly: createKeywordLike(\"readonly\", { startsExpr }),\n  _unique: createKeywordLike(\"unique\", { startsExpr }),\n  // end: isTSTypeOperator\n  // start: isTSDeclarationStart\n  _abstract: createKeywordLike(\"abstract\", { startsExpr }),\n  _declare: createKeywordLike(\"declare\", { startsExpr }),\n  _enum: createKeywordLike(\"enum\", { startsExpr }),\n  _module: createKeywordLike(\"module\", { startsExpr }),\n  _namespace: createKeywordLike(\"namespace\", { startsExpr }),\n  // start: isFlowInterfaceOrTypeOrOpaque\n  _interface: createKeywordLike(\"interface\", { startsExpr }),\n  _type: createKeywordLike(\"type\", { startsExpr }),\n  // end: isTSDeclarationStart\n  _opaque: createKeywordLike(\"opaque\", { startsExpr }),\n  // end: isFlowInterfaceOrTypeOrOpaque\n  name: createToken(\"name\", { startsExpr }),\n\n  // placeholder plugin\n  placeholder: createToken(\"%%\", { startsExpr }),\n  // end: isIdentifier\n\n  string: createToken(\"string\", { startsExpr }),\n  num: createToken(\"num\", { startsExpr }),\n  bigint: createToken(\"bigint\", { startsExpr }),\n  // TODO: Remove this in Babel 8\n  decimal: createToken(\"decimal\", { startsExpr }),\n  // end: isLiteralPropertyName\n  regexp: createToken(\"regexp\", { startsExpr }),\n  privateName: createToken(\"#name\", { startsExpr }),\n  eof: createToken(\"eof\"),\n\n  // jsx plugin\n  jsxName: createToken(\"jsxName\"),\n  jsxText: createToken(\"jsxText\", { beforeExpr }),\n  jsxTagStart: createToken(\"jsxTagStart\", { startsExpr }),\n  jsxTagEnd: createToken(\"jsxTagEnd\"),\n} as const;\n\nexport function tokenIsIdentifier(token: TokenType): boolean {\n  return token >= tt._as && token <= tt.placeholder;\n}\n\nexport function tokenKeywordOrIdentifierIsKeyword(token: TokenType): boolean {\n  // we can remove the token >= tt._in check when we\n  // know a token is either keyword or identifier\n  return token <= tt._while;\n}\n\nexport function tokenIsKeywordOrIdentifier(token: TokenType): boolean {\n  return token >= tt._in && token <= tt.placeholder;\n}\n\nexport function tokenIsLiteralPropertyName(token: TokenType): boolean {\n  return token >= tt._in && token <= tt.decimal;\n}\n\nexport function tokenComesBeforeExpression(token: TokenType): boolean {\n  return tokenBeforeExprs[token];\n}\n\nexport function tokenCanStartExpression(token: TokenType): boolean {\n  return tokenStartsExprs[token];\n}\n\nexport function tokenIsAssignment(token: TokenType): boolean {\n  return token >= tt.eq && token <= tt.moduloAssign;\n}\n\nexport function tokenIsFlowInterfaceOrTypeOrOpaque(token: TokenType): boolean {\n  return token >= tt._interface && token <= tt._opaque;\n}\n\nexport function tokenIsLoop(token: TokenType): boolean {\n  return token >= tt._do && token <= tt._while;\n}\n\nexport function tokenIsKeyword(token: TokenType): boolean {\n  return token >= tt._in && token <= tt._while;\n}\n\nexport function tokenIsOperator(token: TokenType): boolean {\n  return token >= tt.pipeline && token <= tt._instanceof;\n}\n\nexport function tokenIsPostfix(token: TokenType): boolean {\n  return token === tt.incDec;\n}\n\nexport function tokenIsPrefix(token: TokenType): boolean {\n  return tokenPrefixes[token];\n}\n\nexport function tokenIsTSTypeOperator(token: TokenType): boolean {\n  return token >= tt._keyof && token <= tt._unique;\n}\n\nexport function tokenIsTSDeclarationStart(token: TokenType): boolean {\n  return token >= tt._abstract && token <= tt._type;\n}\n\nexport function tokenLabelName(token: TokenType): string {\n  return tokenLabels[token];\n}\n\nexport function tokenOperatorPrecedence(token: TokenType): number {\n  return tokenBinops[token];\n}\n\nexport function tokenIsBinaryOperator(token: TokenType): boolean {\n  return tokenBinops[token] !== -1;\n}\n\nexport function tokenIsRightAssociative(token: TokenType): boolean {\n  return token === tt.exponent;\n}\n\nexport function tokenIsTemplate(token: TokenType): boolean {\n  return token >= tt.templateTail && token <= tt.templateNonTail;\n}\n\nexport function getExportedToken(token: TokenType): ExportedTokenType {\n  return tokenTypes[token];\n}\n\nexport function isTokenType(obj: any): boolean {\n  return typeof obj === \"number\";\n}\n\nif (!process.env.BABEL_8_BREAKING) {\n  tokenTypes[tt.braceR].updateContext = context => {\n    context.pop();\n  };\n\n  tokenTypes[tt.braceL].updateContext =\n    tokenTypes[tt.braceHashL].updateContext =\n    tokenTypes[tt.dollarBraceL].updateContext =\n      context => {\n        context.push(tc.brace);\n      };\n\n  tokenTypes[tt.backQuote].updateContext = context => {\n    if (context[context.length - 1] === tc.template) {\n      context.pop();\n    } else {\n      context.push(tc.template);\n    }\n  };\n\n  tokenTypes[tt.jsxTagStart].updateContext = context => {\n    context.push(tc.j_expr, tc.j_oTag);\n  };\n}\n", "// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\n// ## Character categories\n\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point between 0x80 and 0xffff.\n// Generated by `scripts/generate-identifier-regex.cjs`.\n\n/* prettier-ignore */\nlet nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088f\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5c\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdc-\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c8a\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7dc\\ua7f1-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n/* prettier-ignore */\nlet nonASCIIidentifierChars = \"\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0897-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1add\\u1ae0-\\u1aeb\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\u30fb\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\\uff65\";\n\nconst nonASCIIidentifierStart = new RegExp(\n  \"[\" + nonASCIIidentifierStartChars + \"]\",\n);\nconst nonASCIIidentifier = new RegExp(\n  \"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\",\n);\n\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\n\n// These are a run-length and offset-encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by `scripts/generate-identifier-regex.cjs`.\n/* prettier-ignore */\nconst astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,4,51,13,310,10,21,11,7,25,5,2,41,2,8,70,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,7,25,39,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,39,27,10,22,251,41,7,1,17,5,57,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,20,1,64,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,31,9,2,0,3,0,2,37,2,0,26,0,2,0,45,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,200,32,32,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,24,43,261,18,16,0,2,12,2,33,125,0,80,921,103,110,18,195,2637,96,16,1071,18,5,26,3994,6,582,6842,29,1763,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,433,44,212,63,33,24,3,24,45,74,6,0,67,12,65,1,2,0,15,4,10,7381,42,31,98,114,8702,3,2,6,2,1,2,290,16,0,30,2,3,0,15,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,1845,30,7,5,262,61,147,44,11,6,17,0,322,29,19,43,485,27,229,29,3,0,208,30,2,2,2,1,2,6,3,4,10,1,225,6,2,3,2,1,2,14,2,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42719,33,4381,3,5773,3,7472,16,621,2467,541,1507,4938,6,8489];\n/* prettier-ignore */\nconst astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,7,9,32,4,318,1,78,5,71,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,3,0,158,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,68,8,2,0,3,0,2,3,2,4,2,0,15,1,83,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,7,19,58,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,199,7,137,9,54,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,55,9,266,3,10,1,2,0,49,6,4,4,14,10,5350,0,7,14,11465,27,2343,9,87,9,39,4,60,6,26,9,535,9,470,0,2,54,8,3,82,0,12,1,19628,1,4178,9,519,45,3,22,543,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,101,0,161,6,10,9,357,0,62,13,499,13,245,1,2,9,233,0,3,0,8,1,6,0,475,6,110,6,6,9,4759,9,787719,239];\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code: number, set: readonly number[]): boolean {\n  let pos = 0x10000;\n  for (let i = 0, length = set.length; i < length; i += 2) {\n    pos += set[i];\n    if (pos > code) return false;\n\n    pos += set[i + 1];\n    if (pos >= code) return true;\n  }\n  return false;\n}\n\n// Test whether a given character code starts an identifier.\n\nexport function isIdentifierStart(code: number): boolean {\n  if (code < charCodes.uppercaseA) return code === charCodes.dollarSign;\n  if (code <= charCodes.uppercaseZ) return true;\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n  if (code <= charCodes.lowercaseZ) return true;\n  if (code <= 0xffff) {\n    return (\n      code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))\n    );\n  }\n  return isInAstralSet(code, astralIdentifierStartCodes);\n}\n\n// Test whether a given character is part of an identifier.\n\nexport function isIdentifierChar(code: number): boolean {\n  if (code < charCodes.digit0) return code === charCodes.dollarSign;\n  if (code < charCodes.colon) return true;\n  if (code < charCodes.uppercaseA) return false;\n  if (code <= charCodes.uppercaseZ) return true;\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n  if (code <= charCodes.lowercaseZ) return true;\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n  }\n  return (\n    isInAstralSet(code, astralIdentifierStartCodes) ||\n    isInAstralSet(code, astralIdentifierCodes)\n  );\n}\n\n// Test whether a given string is a valid identifier name\n\nexport function isIdentifierName(name: string): boolean {\n  let isFirst = true;\n  for (let i = 0; i < name.length; i++) {\n    // The implementation is based on\n    // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n    // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n    // since `name` is mostly ASCII, an inlined `charCodeAt` wins here\n    let cp = name.charCodeAt(i);\n    if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {\n      const trail = name.charCodeAt(++i);\n      if ((trail & 0xfc00) === 0xdc00) {\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n      }\n    }\n    if (isFirst) {\n      isFirst = false;\n      if (!isIdentifierStart(cp)) {\n        return false;\n      }\n    } else if (!isIdentifierChar(cp)) {\n      return false;\n    }\n  }\n  return !isFirst;\n}\n", "const reservedWords = {\n  keyword: [\n    \"break\",\n    \"case\",\n    \"catch\",\n    \"continue\",\n    \"debugger\",\n    \"default\",\n    \"do\",\n    \"else\",\n    \"finally\",\n    \"for\",\n    \"function\",\n    \"if\",\n    \"return\",\n    \"switch\",\n    \"throw\",\n    \"try\",\n    \"var\",\n    \"const\",\n    \"while\",\n    \"with\",\n    \"new\",\n    \"this\",\n    \"super\",\n    \"class\",\n    \"extends\",\n    \"export\",\n    \"import\",\n    \"null\",\n    \"true\",\n    \"false\",\n    \"in\",\n    \"instanceof\",\n    \"typeof\",\n    \"void\",\n    \"delete\",\n  ],\n  strict: [\n    \"implements\",\n    \"interface\",\n    \"let\",\n    \"package\",\n    \"private\",\n    \"protected\",\n    \"public\",\n    \"static\",\n    \"yield\",\n  ],\n  strictBind: [\"eval\", \"arguments\"],\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\n/**\n * Checks if word is a reserved word in non-strict mode\n */\nexport function isReservedWord(word: string, inModule: boolean): boolean {\n  return (inModule && word === \"await\") || word === \"enum\";\n}\n\n/**\n * Checks if word is a reserved word in non-binding strict mode\n *\n * Includes non-strict reserved words\n */\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\n  return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\n * a normal identifier.\n */\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\n  return reservedWordsStrictBindSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode\n *\n * Includes non-strict reserved words and non-binding strict reserved words\n */\nexport function isStrictBindReservedWord(\n  word: string,\n  inModule: boolean,\n): boolean {\n  return (\n    isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\n  );\n}\n\nexport function isKeyword(word: string): boolean {\n  return keywords.has(word);\n}\n", "import * as charCodes from \"charcodes\";\nimport { isIdentifierStart } from \"@babel/helper-validator-identifier\";\n\nexport {\n  isIdentifierStart,\n  isIdentifierChar,\n  isReservedWord,\n  isStrictBindOnlyReservedWord,\n  isStrictBindReservedWord,\n  isStrictReservedWord,\n  isKeyword,\n} from \"@babel/helper-validator-identifier\";\n\nexport const keywordRelationalOperator = /^in(stanceof)?$/;\n\n// Test whether a current state character code and next character code is @\n\nexport function isIteratorStart(\n  current: number,\n  next: number,\n  next2: number,\n): boolean {\n  return (\n    current === charCodes.atSign &&\n    next === charCodes.atSign &&\n    isIdentifierStart(next2)\n  );\n}\n\n// This is the comprehensive set of JavaScript reserved words\n// If a word is in this set, it could be a reserved word,\n// depending on sourceType/strictMode/binding info. In other words\n// if a word is not in this set, it is not a reserved word under\n// any circumstance.\nconst reservedWordLikeSet = new Set([\n  \"break\",\n  \"case\",\n  \"catch\",\n  \"continue\",\n  \"debugger\",\n  \"default\",\n  \"do\",\n  \"else\",\n  \"finally\",\n  \"for\",\n  \"function\",\n  \"if\",\n  \"return\",\n  \"switch\",\n  \"throw\",\n  \"try\",\n  \"var\",\n  \"const\",\n  \"while\",\n  \"with\",\n  \"new\",\n  \"this\",\n  \"super\",\n  \"class\",\n  \"extends\",\n  \"export\",\n  \"import\",\n  \"null\",\n  \"true\",\n  \"false\",\n  \"in\",\n  \"instanceof\",\n  \"typeof\",\n  \"void\",\n  \"delete\",\n  // strict\n  \"implements\",\n  \"interface\",\n  \"let\",\n  \"package\",\n  \"private\",\n  \"protected\",\n  \"public\",\n  \"static\",\n  \"yield\",\n  // strictBind\n  \"eval\",\n  \"arguments\",\n  // reservedWorkLike\n  \"enum\",\n  \"await\",\n]);\n\nexport function canBeReservedWord(word: string): boolean {\n  return reservedWordLikeSet.has(word);\n}\n", "import { ScopeFlag, BindingFlag } from \"./scopeflags.ts\";\nimport type { Position } from \"./location.ts\";\nimport type * as N from \"../types.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\n\nexport const enum NameType {\n  // var-declared names in the current lexical scope\n  Var = 1 << 0,\n  // lexically-declared names in the current lexical scope\n  Lexical = 1 << 1,\n  // lexically-declared FunctionDeclaration names in the current lexical scope\n  Function = 1 << 2,\n}\n\n// Start an AST node, attaching a start offset.\nexport class Scope {\n  flags: ScopeFlag = 0;\n  names: Map<string, NameType> = new Map();\n  firstLexicalName = \"\";\n\n  constructor(flags: ScopeFlag) {\n    this.flags = flags;\n  }\n}\n\n// The functions in this module keep track of declared variables in the\n// current scope in order to detect duplicate variable names.\nexport default class ScopeHandler<IScope extends Scope = Scope> {\n  parser: Tokenizer;\n  scopeStack: Array<IScope> = [];\n  inModule: boolean;\n  undefinedExports: Map<string, Position> = new Map();\n\n  constructor(parser: Tokenizer, inModule: boolean) {\n    this.parser = parser;\n    this.inModule = inModule;\n  }\n\n  get inTopLevel() {\n    return (this.currentScope().flags & ScopeFlag.PROGRAM) > 0;\n  }\n  get inFunction() {\n    return (this.currentVarScopeFlags() & ScopeFlag.FUNCTION_BASE) > 0;\n  }\n  get allowSuper() {\n    return (this.currentThisScopeFlags() & ScopeFlag.SUPER) > 0;\n  }\n  get allowDirectSuper() {\n    return (this.currentThisScopeFlags() & ScopeFlag.DIRECT_SUPER) > 0;\n  }\n  get allowNewTarget() {\n    return (this.currentThisScopeFlags() & ScopeFlag.NEW_TARGET) > 0;\n  }\n  get inClass() {\n    return (this.currentThisScopeFlags() & ScopeFlag.CLASS_BASE) > 0;\n  }\n  get inClassAndNotInNonArrowFunction() {\n    const flags = this.currentThisScopeFlags();\n    return (\n      (flags & ScopeFlag.CLASS_BASE) > 0 &&\n      (flags & ScopeFlag.FUNCTION_BASE) === 0\n    );\n  }\n  get inStaticBlock() {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (flags & ScopeFlag.STATIC_BLOCK) {\n        return true;\n      }\n      if (flags & (ScopeFlag.VAR | ScopeFlag.CLASS_BASE)) {\n        // function body, module body, class property initializers\n        return false;\n      }\n    }\n  }\n  get inNonArrowFunction() {\n    return (this.currentThisScopeFlags() & ScopeFlag.FUNCTION_BASE) > 0;\n  }\n  get inBareCaseStatement() {\n    return (this.currentScope().flags & ScopeFlag.SWITCH) > 0;\n  }\n  get treatFunctionsAsVar() {\n    return this.treatFunctionsAsVarInScope(this.currentScope());\n  }\n\n  createScope(flags: ScopeFlag): Scope {\n    return new Scope(flags);\n  }\n\n  enter(flags: ScopeFlag) {\n    /*:: +createScope: (flags:ScopeFlag) => IScope; */\n    // @ts-expect-error This method will be overwritten by subclasses\n    this.scopeStack.push(this.createScope(flags));\n  }\n\n  exit(): ScopeFlag {\n    const scope = this.scopeStack.pop()!;\n    return scope.flags;\n  }\n\n  // The spec says:\n  // > At the top level of a function, or script, function declarations are\n  // > treated like var declarations rather than like lexical declarations.\n  treatFunctionsAsVarInScope(scope: IScope): boolean {\n    return !!(\n      scope.flags & (ScopeFlag.FUNCTION_BASE | ScopeFlag.STATIC_BLOCK) ||\n      (!this.parser.inModule && scope.flags & ScopeFlag.PROGRAM)\n    );\n  }\n\n  declareName(name: string, bindingType: BindingFlag, loc: Position) {\n    let scope = this.currentScope();\n    if (\n      bindingType & BindingFlag.SCOPE_LEXICAL ||\n      bindingType & BindingFlag.SCOPE_FUNCTION\n    ) {\n      this.checkRedeclarationInScope(scope, name, bindingType, loc);\n\n      let type = scope.names.get(name) || 0;\n\n      if (bindingType & BindingFlag.SCOPE_FUNCTION) {\n        type = type | NameType.Function;\n      } else {\n        if (!scope.firstLexicalName) {\n          scope.firstLexicalName = name;\n        }\n        type = type | NameType.Lexical;\n      }\n\n      scope.names.set(name, type);\n\n      if (bindingType & BindingFlag.SCOPE_LEXICAL) {\n        this.maybeExportDefined(scope, name);\n      }\n    } else if (bindingType & BindingFlag.SCOPE_VAR) {\n      for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n        scope = this.scopeStack[i];\n        this.checkRedeclarationInScope(scope, name, bindingType, loc);\n        scope.names.set(name, (scope.names.get(name) || 0) | NameType.Var);\n        this.maybeExportDefined(scope, name);\n\n        if (scope.flags & ScopeFlag.VAR) break;\n      }\n    }\n    if (this.parser.inModule && scope.flags & ScopeFlag.PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  maybeExportDefined(scope: IScope, name: string) {\n    if (this.parser.inModule && scope.flags & ScopeFlag.PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  checkRedeclarationInScope(\n    scope: IScope,\n    name: string,\n    bindingType: BindingFlag,\n    loc: Position,\n  ) {\n    if (this.isRedeclaredInScope(scope, name, bindingType)) {\n      this.parser.raise(Errors.VarRedeclaration, loc, {\n        identifierName: name,\n      });\n    }\n  }\n\n  isRedeclaredInScope(\n    scope: IScope,\n    name: string,\n    bindingType: BindingFlag,\n  ): boolean {\n    if (!(bindingType & BindingFlag.KIND_VALUE)) return false;\n\n    if (bindingType & BindingFlag.SCOPE_LEXICAL) {\n      return scope.names.has(name);\n    }\n\n    const type = scope.names.get(name) || 0;\n\n    if (bindingType & BindingFlag.SCOPE_FUNCTION) {\n      return (\n        (type & NameType.Lexical) > 0 ||\n        (!this.treatFunctionsAsVarInScope(scope) && (type & NameType.Var) > 0)\n      );\n    }\n\n    return (\n      ((type & NameType.Lexical) > 0 &&\n        // Annex B.3.4\n        // https://tc39.es/ecma262/#sec-variablestatements-in-catch-blocks\n        !(\n          scope.flags & ScopeFlag.SIMPLE_CATCH &&\n          scope.firstLexicalName === name\n        )) ||\n      (!this.treatFunctionsAsVarInScope(scope) &&\n        (type & NameType.Function) > 0)\n    );\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    const { name } = id;\n    const topLevelScope = this.scopeStack[0];\n    if (!topLevelScope.names.has(name)) {\n      this.undefinedExports.set(name, id.loc.start);\n    }\n  }\n\n  currentScope(): IScope {\n    return this.scopeStack[this.scopeStack.length - 1];\n  }\n\n  currentVarScopeFlags(): ScopeFlag {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (flags & ScopeFlag.VAR) {\n        return flags;\n      }\n    }\n  }\n\n  // Could be useful for `arguments`, `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n  currentThisScopeFlags(): ScopeFlag {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (\n        flags & (ScopeFlag.VAR | ScopeFlag.CLASS_BASE) &&\n        !(flags & ScopeFlag.ARROW)\n      ) {\n        return flags;\n      }\n    }\n  }\n}\n", "import type { Position } from \"../../util/location.ts\";\nimport ScopeHandler, { NameType, Scope } from \"../../util/scope.ts\";\nimport { BindingFlag, type ScopeFlag } from \"../../util/scopeflags.ts\";\nimport type * as N from \"../../types.ts\";\n\n// Reference implementation: https://github.com/facebook/flow/blob/23aeb2a2ef6eb4241ce178fde5d8f17c5f747fb5/src/typing/env.ml#L536-L584\nclass FlowScope extends Scope {\n  // declare function foo(): type;\n  declareFunctions: Set<string> = new Set();\n}\n\nexport default class FlowScopeHandler extends ScopeHandler<FlowScope> {\n  createScope(flags: ScopeFlag): FlowScope {\n    return new FlowScope(flags);\n  }\n\n  declareName(name: string, bindingType: BindingFlag, loc: Position) {\n    const scope = this.currentScope();\n    if (bindingType & BindingFlag.FLAG_FLOW_DECLARE_FN) {\n      this.checkRedeclarationInScope(scope, name, bindingType, loc);\n      this.maybeExportDefined(scope, name);\n      scope.declareFunctions.add(name);\n      return;\n    }\n\n    super.declareName(name, bindingType, loc);\n  }\n\n  isRedeclaredInScope(\n    scope: FlowScope,\n    name: string,\n    bindingType: BindingFlag,\n  ): boolean {\n    if (super.isRedeclaredInScope(scope, name, bindingType)) return true;\n\n    if (\n      bindingType & BindingFlag.FLAG_FLOW_DECLARE_FN &&\n      !scope.declareFunctions.has(name)\n    ) {\n      const type = scope.names.get(name)!;\n      return (type & NameType.Function) > 0 || (type & NameType.Lexical) > 0;\n    }\n\n    return false;\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    if (!this.scopeStack[0].declareFunctions.has(id.name)) {\n      super.checkLocalExport(id);\n    }\n  }\n}\n", "/*:: declare var invariant; */\n\nimport type Parser from \"../../parser/index.ts\";\nimport {\n  tokenIsIdentifier,\n  tokenIsKeyword,\n  tokenIsKeywordOrIdentifier,\n  tokenIsLiteralPropertyName,\n  tokenLabelName,\n  tt,\n  type TokenType,\n  tokenIsFlowInterfaceOrTypeOrOpaque,\n} from \"../../tokenizer/types.ts\";\nimport type * as N from \"../../types.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport * as charCodes from \"charcodes\";\nimport { isIteratorStart } from \"../../util/identifier.ts\";\nimport FlowScopeHandler from \"./scope.ts\";\nimport { BindingFlag, ScopeFlag } from \"../../util/scopeflags.ts\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport type { ParseStatementFlag } from \"../../parser/statement.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport type { Undone } from \"../../parser/node.ts\";\nimport type { ClassWithMixin, IJSXParserMixin } from \"../jsx/index.ts\";\n\nconst reservedTypes = new Set([\n  \"_\",\n  \"any\",\n  \"bool\",\n  \"boolean\",\n  \"empty\",\n  \"extends\",\n  \"false\",\n  \"interface\",\n  \"mixed\",\n  \"null\",\n  \"number\",\n  \"static\",\n  \"string\",\n  \"true\",\n  \"typeof\",\n  \"void\",\n]);\n\n/* eslint sort-keys: \"error\" */\n// The Errors key follows https://github.com/facebook/flow/blob/master/src/parser/parse_error.ml unless it does not exist\nconst FlowErrors = ParseErrorEnum`flow`({\n  AmbiguousConditionalArrow:\n    \"Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.\",\n  AmbiguousDeclareModuleKind:\n    \"Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module.\",\n  // TODO: When we get proper string enums in typescript make this ReservedType.\n  // Not really worth it to do the whole $Values dance with reservedTypes set.\n  AssignReservedType: ({ reservedType }: { reservedType: string }) =>\n    `Cannot overwrite reserved type ${reservedType}.`,\n  DeclareClassElement:\n    \"The `declare` modifier can only appear on class fields.\",\n  DeclareClassFieldInitializer:\n    \"Initializers are not allowed in fields with the `declare` modifier.\",\n  DuplicateDeclareModuleExports:\n    \"Duplicate `declare module.exports` statement.\",\n  EnumBooleanMemberNotInitialized: ({\n    memberName,\n    enumName,\n  }: {\n    memberName: string;\n    enumName: string;\n  }) =>\n    `Boolean enum members need to be initialized. Use either \\`${memberName} = true,\\` or \\`${memberName} = false,\\` in enum \\`${enumName}\\`.`,\n  EnumDuplicateMemberName: ({\n    memberName,\n    enumName,\n  }: {\n    memberName: string;\n    enumName: string;\n  }) =>\n    `Enum member names need to be unique, but the name \\`${memberName}\\` has already been used before in enum \\`${enumName}\\`.`,\n  EnumInconsistentMemberValues: ({ enumName }: { enumName: string }) =>\n    `Enum \\`${enumName}\\` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.`,\n  EnumInvalidExplicitType: ({\n    invalidEnumType,\n    enumName,\n  }: {\n    invalidEnumType: string;\n    enumName: string;\n  }) =>\n    `Enum type \\`${invalidEnumType}\\` is not valid. Use one of \\`boolean\\`, \\`number\\`, \\`string\\`, or \\`symbol\\` in enum \\`${enumName}\\`.`,\n  EnumInvalidExplicitTypeUnknownSupplied: ({\n    enumName,\n  }: {\n    enumName: string;\n  }) =>\n    `Supplied enum type is not valid. Use one of \\`boolean\\`, \\`number\\`, \\`string\\`, or \\`symbol\\` in enum \\`${enumName}\\`.`,\n\n  // TODO: When moving to typescript, we should either have each of the\n  // following errors only accept the specific strings they want:\n  //\n  // ...PrimaryType: explicitType: \"string\" | \"number\" | \"boolean\"\n  // ...SymbolType: explicitType: \"symbol\"\n  // ...UnknownType: explicitType: null\n  //\n  // Or, alternatively, merge these three errors together into one\n  // `EnumInvalidMemberInitializer` error that can accept `EnumExplicitType`\n  // without alteration, and then just have its message change based on the\n  // explicitType.\n  EnumInvalidMemberInitializerPrimaryType: ({\n    enumName,\n    memberName,\n    explicitType,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `Enum \\`${enumName}\\` has type \\`${explicitType}\\`, so the initializer of \\`${memberName}\\` needs to be a ${explicitType} literal.`,\n  EnumInvalidMemberInitializerSymbolType: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `Symbol enum members cannot be initialized. Use \\`${memberName},\\` in enum \\`${enumName}\\`.`,\n  EnumInvalidMemberInitializerUnknownType: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `The enum member initializer for \\`${memberName}\\` needs to be a literal (either a boolean, number, or string) in enum \\`${enumName}\\`.`,\n  EnumInvalidMemberName: ({\n    enumName,\n    memberName,\n    suggestion,\n  }: {\n    enumName: string;\n    memberName: string;\n    suggestion: string;\n  }) =>\n    `Enum member names cannot start with lowercase 'a' through 'z'. Instead of using \\`${memberName}\\`, consider using \\`${suggestion}\\`, in enum \\`${enumName}\\`.`,\n  EnumNumberMemberNotInitialized: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n  }) =>\n    `Number enum members need to be initialized, e.g. \\`${memberName} = 1\\` in enum \\`${enumName}\\`.`,\n  EnumStringMemberInconsistentlyInitialized: ({\n    enumName,\n  }: {\n    enumName: string;\n  }) =>\n    `String enum members need to consistently either all use initializers, or use no initializers, in enum \\`${enumName}\\`.`,\n  GetterMayNotHaveThisParam: \"A getter cannot have a `this` parameter.\",\n  ImportReflectionHasImportType:\n    \"An `import module` declaration can not use `type` or `typeof` keyword.\",\n  ImportTypeShorthandOnlyInPureImport:\n    \"The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements.\",\n  InexactInsideExact:\n    \"Explicit inexact syntax cannot appear inside an explicit exact object type.\",\n  InexactInsideNonObject:\n    \"Explicit inexact syntax cannot appear in class or interface definitions.\",\n  InexactVariance: \"Explicit inexact syntax cannot have variance.\",\n  InvalidNonTypeImportInDeclareModule:\n    \"Imports within a `declare module` body must always be `import type` or `import typeof`.\",\n  MissingTypeParamDefault:\n    \"Type parameter declaration needs a default, since a preceding type parameter declaration has a default.\",\n  NestedDeclareModule:\n    \"`declare module` cannot be used inside another `declare module`.\",\n  NestedFlowComment: \"Cannot have a flow comment inside another flow comment.\",\n  PatternIsOptional: {\n    message:\n      \"A binding pattern parameter cannot be optional in an implementation signature.\",\n    // For consistency in TypeScript and Flow error codes\n    ...(!process.env.BABEL_8_BREAKING\n      ? { reasonCode: \"OptionalBindingPattern\" }\n      : {}),\n  },\n  SetterMayNotHaveThisParam: \"A setter cannot have a `this` parameter.\",\n  SpreadVariance: \"Spread properties cannot have variance.\",\n  ThisParamAnnotationRequired:\n    \"A type annotation is required for the `this` parameter.\",\n  ThisParamBannedInConstructor:\n    \"Constructors cannot have a `this` parameter; constructors don't bind `this` like other functions.\",\n  ThisParamMayNotBeOptional: \"The `this` parameter cannot be optional.\",\n  ThisParamMustBeFirst:\n    \"The `this` parameter must be the first function parameter.\",\n  ThisParamNoDefault: \"The `this` parameter may not have a default value.\",\n  TypeBeforeInitializer:\n    \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n  TypeCastInPattern:\n    \"The type cast expression is expected to be wrapped with parenthesis.\",\n  UnexpectedExplicitInexactInObject:\n    \"Explicit inexact syntax must appear at the end of an inexact object.\",\n  UnexpectedReservedType: ({ reservedType }: { reservedType: string }) =>\n    `Unexpected reserved type ${reservedType}.`,\n  UnexpectedReservedUnderscore:\n    \"`_` is only allowed as a type argument to call or new.\",\n  UnexpectedSpaceBetweenModuloChecks:\n    \"Spaces between `%` and `checks` are not allowed here.\",\n  UnexpectedSpreadType:\n    \"Spread operator cannot appear in class or interface definitions.\",\n  UnexpectedSubtractionOperand:\n    'Unexpected token, expected \"number\" or \"bigint\".',\n  UnexpectedTokenAfterTypeParameter:\n    \"Expected an arrow function after this type parameter declaration.\",\n  UnexpectedTypeParameterBeforeAsyncArrowFunction:\n    \"Type parameters must come after the async keyword, e.g. instead of `<T> async () => {}`, use `async <T>() => {}`.\",\n  UnsupportedDeclareExportKind: ({\n    unsupportedExportKind,\n    suggestion,\n  }: {\n    unsupportedExportKind: string;\n    suggestion: string;\n  }) =>\n    `\\`declare export ${unsupportedExportKind}\\` is not supported. Use \\`${suggestion}\\` instead.`,\n  UnsupportedStatementInDeclareModule:\n    \"Only declares and type imports are allowed inside declare module.\",\n  UnterminatedFlowComment: \"Unterminated flow-comment.\",\n});\n/* eslint-disable sort-keys */\n\nfunction isEsModuleType(bodyElement: N.Node): boolean {\n  return (\n    bodyElement.type === \"DeclareExportAllDeclaration\" ||\n    (bodyElement.type === \"DeclareExportDeclaration\" &&\n      (!bodyElement.declaration ||\n        (bodyElement.declaration.type !== \"TypeAlias\" &&\n          bodyElement.declaration.type !== \"InterfaceDeclaration\")))\n  );\n}\n\nfunction hasTypeImportKind(\n  node: Undone<N.ImportSpecifier | N.ImportDeclaration>,\n): boolean {\n  return node.importKind === \"type\" || node.importKind === \"typeof\";\n}\n\nconst exportSuggestions = {\n  const: \"declare export var\",\n  let: \"declare export var\",\n  type: \"export type\",\n  interface: \"export interface\",\n};\n\n// Like Array#filter, but returns a tuple [ acceptedElements, discardedElements ]\nfunction partition<T>(\n  list: T[],\n  test: (c: T, b: number, a: T[]) => boolean | undefined | null,\n): [T[], T[]] {\n  const list1: T[] = [];\n  const list2: T[] = [];\n  for (let i = 0; i < list.length; i++) {\n    (test(list[i], i, list) ? list1 : list2).push(list[i]);\n  }\n  return [list1, list2];\n}\n\nconst FLOW_PRAGMA_REGEX = /\\*?\\s*@((?:no)?flow)\\b/;\n\n// Flow enums types\ntype EnumExplicitType = null | \"boolean\" | \"number\" | \"string\" | \"symbol\";\n\ntype EnumContext = {\n  enumName: string;\n  explicitType: EnumExplicitType;\n  memberName: string;\n};\n\ntype EnumMemberInit =\n  | {\n      type: \"number\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"string\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"boolean\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"invalid\";\n      loc: Position;\n    }\n  | {\n      type: \"none\";\n      loc: Position;\n    };\n\nexport default (superClass: ClassWithMixin<typeof Parser, IJSXParserMixin>) =>\n  class FlowParserMixin extends superClass implements Parser {\n    // The value of the @flow/@noflow pragma. Initially undefined, transitions\n    // to \"@flow\" or \"@noflow\" if we see a pragma. Transitions to null if we are\n    // past the initial comment.\n    flowPragma: void | null | \"flow\" | \"noflow\" = undefined;\n\n    getScopeHandler(): new (...args: any) => FlowScopeHandler {\n      return FlowScopeHandler;\n    }\n\n    shouldParseTypes(): boolean {\n      return this.getPluginOption(\"flow\", \"all\") || this.flowPragma === \"flow\";\n    }\n\n    finishToken(type: TokenType, val: any): void {\n      if (\n        type !== tt.string &&\n        type !== tt.semi &&\n        type !== tt.interpreterDirective\n      ) {\n        if (this.flowPragma === undefined) {\n          this.flowPragma = null;\n        }\n      }\n      super.finishToken(type, val);\n    }\n\n    addComment(comment: N.Comment): void {\n      if (this.flowPragma === undefined) {\n        // Try to parse a flow pragma.\n        const matches = FLOW_PRAGMA_REGEX.exec(comment.value);\n        if (!matches) {\n          // do nothing\n        } else if (matches[1] === \"flow\") {\n          this.flowPragma = \"flow\";\n        } else if (matches[1] === \"noflow\") {\n          this.flowPragma = \"noflow\";\n        } else {\n          throw new Error(\"Unexpected flow pragma\");\n        }\n      }\n      super.addComment(comment);\n    }\n\n    flowParseTypeInitialiser(tok?: TokenType): N.FlowType {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      this.expect(tok || tt.colon);\n\n      const type = this.flowParseType();\n      this.state.inType = oldInType;\n      return type;\n    }\n\n    flowParsePredicate(): N.FlowPredicate {\n      const node = this.startNode<N.FlowPredicate>();\n      const moduloLoc = this.state.startLoc;\n      this.next(); // eat `%`\n      this.expectContextual(tt._checks);\n      // Force '%' and 'checks' to be adjacent\n      if (this.state.lastTokStartLoc!.index > moduloLoc.index + 1) {\n        this.raise(FlowErrors.UnexpectedSpaceBetweenModuloChecks, moduloLoc);\n      }\n      if (this.eat(tt.parenL)) {\n        node.value = super.parseExpression();\n        this.expect(tt.parenR);\n        return this.finishNode(node, \"DeclaredPredicate\");\n      } else {\n        return this.finishNode(node, \"InferredPredicate\");\n      }\n    }\n\n    flowParseTypeAndPredicateInitialiser(): [\n      N.FlowType | null,\n      N.FlowPredicate | null,\n    ] {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      this.expect(tt.colon);\n      let type = null;\n      let predicate = null;\n      if (this.match(tt.modulo)) {\n        this.state.inType = oldInType;\n        predicate = this.flowParsePredicate();\n      } else {\n        type = this.flowParseType();\n        this.state.inType = oldInType;\n        if (this.match(tt.modulo)) {\n          predicate = this.flowParsePredicate();\n        }\n      }\n      return [type, predicate];\n    }\n\n    flowParseDeclareClass(\n      node: Undone<N.FlowDeclareClass>,\n    ): N.FlowDeclareClass {\n      this.next();\n      this.flowParseInterfaceish(node, /*isClass*/ true);\n      return this.finishNode(node, \"DeclareClass\");\n    }\n\n    flowParseDeclareFunction(\n      node: Undone<N.FlowDeclareFunction>,\n    ): N.FlowDeclareFunction {\n      this.next();\n\n      const id = (node.id = this.parseIdentifier());\n\n      const typeNode = this.startNode<N.FlowFunctionTypeAnnotation>();\n      const typeContainer = this.startNode<N.TypeAnnotation>();\n\n      if (this.match(tt.lt)) {\n        typeNode.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        typeNode.typeParameters = null;\n      }\n\n      this.expect(tt.parenL);\n      const tmp = this.flowParseFunctionTypeParams();\n      typeNode.params = tmp.params;\n      typeNode.rest = tmp.rest;\n      typeNode.this = tmp._this;\n      this.expect(tt.parenR);\n\n      [typeNode.returnType, node.predicate] =\n        this.flowParseTypeAndPredicateInitialiser();\n\n      typeContainer.typeAnnotation = this.finishNode(\n        typeNode,\n        \"FunctionTypeAnnotation\",\n      );\n\n      id.typeAnnotation = this.finishNode(typeContainer, \"TypeAnnotation\");\n\n      this.resetEndLocation(id);\n      this.semicolon();\n\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_FLOW_DECLARE_FN,\n        node.id.loc.start,\n      );\n\n      return this.finishNode(node, \"DeclareFunction\");\n    }\n\n    flowParseDeclare(\n      node: Undone<N.FlowDeclare>,\n      insideModule?: boolean,\n    ): N.FlowDeclare {\n      if (this.match(tt._class)) {\n        return this.flowParseDeclareClass(node);\n      } else if (this.match(tt._function)) {\n        return this.flowParseDeclareFunction(node);\n      } else if (this.match(tt._var)) {\n        return this.flowParseDeclareVariable(node);\n      } else if (this.eatContextual(tt._module)) {\n        if (this.match(tt.dot)) {\n          return this.flowParseDeclareModuleExports(node);\n        } else {\n          if (insideModule) {\n            this.raise(\n              FlowErrors.NestedDeclareModule,\n              this.state.lastTokStartLoc!,\n            );\n          }\n          return this.flowParseDeclareModule(node);\n        }\n      } else if (this.isContextual(tt._type)) {\n        return this.flowParseDeclareTypeAlias(node);\n      } else if (this.isContextual(tt._opaque)) {\n        return this.flowParseDeclareOpaqueType(node);\n      } else if (this.isContextual(tt._interface)) {\n        return this.flowParseDeclareInterface(node);\n      } else if (this.match(tt._export)) {\n        return this.flowParseDeclareExportDeclaration(node, insideModule);\n      }\n      throw this.unexpected();\n    }\n\n    flowParseDeclareVariable(\n      node: Undone<N.FlowDeclareVariable>,\n    ): N.FlowDeclareVariable {\n      this.next();\n      node.id = this.flowParseTypeAnnotatableIdentifier(\n        /*allowPrimitiveOverride*/ true,\n      );\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_VAR,\n        node.id.loc.start,\n      );\n      this.semicolon();\n      return this.finishNode(node, \"DeclareVariable\");\n    }\n\n    flowParseDeclareModule(\n      node: Undone<N.FlowDeclareModule>,\n    ): N.FlowDeclareModule {\n      this.scope.enter(ScopeFlag.OTHER);\n\n      if (this.match(tt.string)) {\n        node.id = super.parseExprAtom();\n      } else {\n        node.id = this.parseIdentifier();\n      }\n\n      const bodyNode = (node.body = this.startNode<N.BlockStatement>());\n      const body: N.Statement[] = (bodyNode.body = []);\n      this.expect(tt.braceL);\n      while (!this.match(tt.braceR)) {\n        const bodyNode = this.startNode<N.ImportDeclaration>();\n\n        if (this.match(tt._import)) {\n          this.next();\n          if (!this.isContextual(tt._type) && !this.match(tt._typeof)) {\n            this.raise(\n              FlowErrors.InvalidNonTypeImportInDeclareModule,\n              this.state.lastTokStartLoc!,\n            );\n          }\n          body.push(super.parseImport(bodyNode));\n        } else {\n          this.expectContextual(\n            tt._declare,\n            FlowErrors.UnsupportedStatementInDeclareModule,\n          );\n          body.push(this.flowParseDeclare(bodyNode, true));\n        }\n      }\n\n      this.scope.exit();\n\n      this.expect(tt.braceR);\n\n      this.finishNode(bodyNode, \"BlockStatement\");\n\n      let kind: \"CommonJS\" | \"ES\" | null = null;\n      let hasModuleExport = false;\n      body.forEach(bodyElement => {\n        if (isEsModuleType(bodyElement)) {\n          if (kind === \"CommonJS\") {\n            this.raise(FlowErrors.AmbiguousDeclareModuleKind, bodyElement);\n          }\n          kind = \"ES\";\n        } else if (bodyElement.type === \"DeclareModuleExports\") {\n          if (hasModuleExport) {\n            this.raise(FlowErrors.DuplicateDeclareModuleExports, bodyElement);\n          }\n          if (kind === \"ES\") {\n            this.raise(FlowErrors.AmbiguousDeclareModuleKind, bodyElement);\n          }\n          kind = \"CommonJS\";\n          hasModuleExport = true;\n        }\n      });\n\n      node.kind = kind || \"CommonJS\";\n      return this.finishNode(node, \"DeclareModule\");\n    }\n\n    flowParseDeclareExportDeclaration(\n      node: Undone<N.FlowDeclareExportDeclaration>,\n      insideModule?: boolean | null,\n    ): N.FlowDeclareExportDeclaration {\n      this.expect(tt._export);\n\n      if (this.eat(tt._default)) {\n        if (this.match(tt._function) || this.match(tt._class)) {\n          // declare export default class ...\n          // declare export default function ...\n          node.declaration = this.flowParseDeclare(this.startNode());\n        } else {\n          // declare export default [type];\n          node.declaration = this.flowParseType();\n          this.semicolon();\n        }\n        node.default = true;\n\n        return this.finishNode(node, \"DeclareExportDeclaration\");\n      } else {\n        if (\n          this.match(tt._const) ||\n          this.isLet() ||\n          ((this.isContextual(tt._type) || this.isContextual(tt._interface)) &&\n            !insideModule)\n        ) {\n          const label = this.state.value as\n            | \"const\"\n            | \"let\"\n            | \"type\"\n            | \"interface\";\n          throw this.raise(\n            FlowErrors.UnsupportedDeclareExportKind,\n            this.state.startLoc,\n            {\n              unsupportedExportKind: label,\n              suggestion: exportSuggestions[label],\n            },\n          );\n        }\n\n        if (\n          this.match(tt._var) || // declare export var ...\n          this.match(tt._function) || // declare export function ...\n          this.match(tt._class) || // declare export class ...\n          this.isContextual(tt._opaque) // declare export opaque ..\n        ) {\n          node.declaration = this.flowParseDeclare(this.startNode());\n          node.default = false;\n\n          return this.finishNode(node, \"DeclareExportDeclaration\");\n        } else if (\n          this.match(tt.star) || // declare export * from ''\n          this.match(tt.braceL) || // declare export {} ...\n          this.isContextual(tt._interface) || // declare export interface ...\n          this.isContextual(tt._type) || // declare export type ...\n          this.isContextual(tt._opaque) // declare export opaque type ...\n        ) {\n          node = this.parseExport(\n            node as Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n            /* decorators */ null,\n          );\n          if (node.type === \"ExportNamedDeclaration\") {\n            node.default = false;\n            delete node.exportKind;\n            return this.castNodeTo(\n              node as N.ExportNamedDeclaration,\n              \"DeclareExportDeclaration\",\n            );\n          } else {\n            return this.castNodeTo(\n              node as N.ExportAllDeclaration,\n              \"DeclareExportAllDeclaration\",\n            );\n          }\n        }\n      }\n\n      throw this.unexpected();\n    }\n\n    flowParseDeclareModuleExports(\n      node: Undone<N.FlowDeclareModuleExports>,\n    ): N.FlowDeclareModuleExports {\n      this.next();\n      this.expectContextual(tt._exports);\n      node.typeAnnotation = this.flowParseTypeAnnotation();\n      this.semicolon();\n\n      return this.finishNode(node, \"DeclareModuleExports\");\n    }\n\n    flowParseDeclareTypeAlias(\n      node: Undone<N.FlowDeclareTypeAlias>,\n    ): N.FlowDeclareTypeAlias {\n      this.next();\n      const finished = this.flowParseTypeAlias(\n        node,\n      ) as unknown as N.FlowDeclareTypeAlias;\n      // Don't do finishNode as we don't want to process comments twice\n      this.castNodeTo(finished, \"DeclareTypeAlias\");\n      return finished;\n    }\n\n    flowParseDeclareOpaqueType(\n      node: Undone<N.FlowDeclareOpaqueType>,\n    ): N.FlowDeclareOpaqueType {\n      this.next();\n      const finished = this.flowParseOpaqueType(\n        node,\n        true,\n      ) as unknown as N.FlowDeclareOpaqueType;\n      // Don't do finishNode as we don't want to process comments twice\n      this.castNodeTo(finished, \"DeclareOpaqueType\");\n      return finished;\n    }\n\n    flowParseDeclareInterface(\n      node: Undone<N.FlowDeclareInterface>,\n    ): N.FlowDeclareInterface {\n      this.next();\n      this.flowParseInterfaceish(node, /* isClass */ false);\n      return this.finishNode(node, \"DeclareInterface\");\n    }\n\n    // Interfaces\n\n    flowParseInterfaceish(node: Undone<N.FlowDeclare>, isClass: boolean): void {\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ !isClass,\n        /* declaration */ true,\n      );\n\n      this.scope.declareName(\n        node.id.name,\n        isClass ? BindingFlag.TYPE_FUNCTION : BindingFlag.TYPE_LEXICAL,\n        node.id.loc.start,\n      );\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.extends = [];\n\n      if (this.eat(tt._extends)) {\n        do {\n          node.extends.push(this.flowParseInterfaceExtends());\n        } while (!isClass && this.eat(tt.comma));\n      }\n\n      if (isClass) {\n        node.implements = [];\n        node.mixins = [];\n\n        if (this.eatContextual(tt._mixins)) {\n          do {\n            node.mixins.push(this.flowParseInterfaceExtends());\n          } while (this.eat(tt.comma));\n        }\n\n        if (this.eatContextual(tt._implements)) {\n          do {\n            node.implements.push(this.flowParseInterfaceExtends());\n          } while (this.eat(tt.comma));\n        }\n      }\n\n      node.body = this.flowParseObjectType({\n        allowStatic: isClass,\n        allowExact: false,\n        allowSpread: false,\n        allowProto: isClass,\n        allowInexact: false,\n      });\n    }\n\n    flowParseInterfaceExtends(): N.FlowInterfaceExtends {\n      const node = this.startNode<N.FlowInterfaceExtends>();\n\n      node.id = this.flowParseQualifiedTypeIdentifier();\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\n      } else {\n        node.typeParameters = null;\n      }\n\n      return this.finishNode(node, \"InterfaceExtends\");\n    }\n\n    flowParseInterface(node: Undone<N.FlowInterface>): N.FlowInterface {\n      this.flowParseInterfaceish(node, /* isClass */ false);\n      return this.finishNode(node, \"InterfaceDeclaration\");\n    }\n\n    checkNotUnderscore(word: string) {\n      if (word === \"_\") {\n        this.raise(\n          FlowErrors.UnexpectedReservedUnderscore,\n          this.state.startLoc,\n        );\n      }\n    }\n\n    checkReservedType(word: string, startLoc: Position, declaration?: boolean) {\n      if (!reservedTypes.has(word)) return;\n\n      this.raise(\n        declaration\n          ? FlowErrors.AssignReservedType\n          : FlowErrors.UnexpectedReservedType,\n        startLoc,\n        {\n          reservedType: word,\n        },\n      );\n    }\n\n    flowParseRestrictedIdentifier(\n      liberal?: boolean,\n      declaration?: boolean,\n    ): N.Identifier {\n      this.checkReservedType(\n        this.state.value,\n        this.state.startLoc,\n        declaration,\n      );\n      return this.parseIdentifier(liberal);\n    }\n\n    // Type aliases\n\n    flowParseTypeAlias(node: Undone<N.FlowTypeAlias>): N.FlowTypeAlias {\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ false,\n        /* declaration */ true,\n      );\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_LEXICAL,\n        node.id.loc.start,\n      );\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.right = this.flowParseTypeInitialiser(tt.eq);\n      this.semicolon();\n\n      return this.finishNode(node, \"TypeAlias\");\n    }\n\n    flowParseOpaqueType(\n      node: Undone<N.FlowOpaqueType>,\n      declare: boolean,\n    ): N.FlowOpaqueType {\n      this.expectContextual(tt._type);\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ true,\n        /* declaration */ true,\n      );\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_LEXICAL,\n        node.id.loc.start,\n      );\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      // Parse the supertype\n      node.supertype = null;\n      if (this.match(tt.colon)) {\n        node.supertype = this.flowParseTypeInitialiser(tt.colon);\n      }\n\n      node.impltype = null;\n      if (!declare) {\n        node.impltype = this.flowParseTypeInitialiser(tt.eq);\n      }\n      this.semicolon();\n\n      return this.finishNode(node, \"OpaqueType\");\n    }\n\n    // Type annotations\n\n    flowParseTypeParameter(requireDefault: boolean = false): N.TypeParameter {\n      const nodeStartLoc = this.state.startLoc;\n\n      const node = this.startNode<N.TypeParameter>();\n\n      const variance = this.flowParseVariance();\n\n      const ident = this.flowParseTypeAnnotatableIdentifier();\n      node.name = ident.name;\n      // @ts-expect-error migrate to Babel types\n      node.variance = variance;\n      // @ts-expect-error migrate to Babel types\n      node.bound = ident.typeAnnotation;\n\n      if (this.match(tt.eq)) {\n        this.eat(tt.eq);\n        // @ts-expect-error migrate to Babel types\n        node.default = this.flowParseType();\n      } else {\n        if (requireDefault) {\n          this.raise(FlowErrors.MissingTypeParamDefault, nodeStartLoc);\n        }\n      }\n\n      return this.finishNode(node, \"TypeParameter\");\n    }\n\n    flowParseTypeParameterDeclaration(): N.TypeParameterDeclaration {\n      const oldInType = this.state.inType;\n      const node = this.startNode<N.TypeParameterDeclaration>();\n      node.params = [];\n\n      this.state.inType = true;\n\n      // istanbul ignore else: this condition is already checked at all call sites\n      if (this.match(tt.lt) || this.match(tt.jsxTagStart)) {\n        this.next();\n      } else {\n        this.unexpected();\n      }\n\n      let defaultRequired = false;\n\n      do {\n        const typeParameter = this.flowParseTypeParameter(defaultRequired);\n\n        node.params.push(typeParameter);\n\n        if (typeParameter.default) {\n          defaultRequired = true;\n        }\n\n        if (!this.match(tt.gt)) {\n          this.expect(tt.comma);\n        }\n      } while (!this.match(tt.gt));\n      this.expect(tt.gt);\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterDeclaration\");\n    }\n\n    // Parse in top level normal context if we are in a JSX context\n    flowInTopLevelContext<T>(cb: () => T): T {\n      if (this.curContext() !== tc.brace) {\n        const oldContext = this.state.context;\n        this.state.context = [oldContext[0]];\n        try {\n          return cb();\n        } finally {\n          this.state.context = oldContext;\n        }\n      } else {\n        return cb();\n      }\n    }\n\n    // Used when parsing type arguments from ES or JSX productions, where the first token\n    // has been created without state.inType. Thus we need to re-scan the lt token.\n    flowParseTypeParameterInstantiationInExpression():\n      | N.TypeParameterInstantiation\n      | undefined {\n      if (this.reScan_lt() !== tt.lt) return;\n      return this.flowParseTypeParameterInstantiation();\n    }\n\n    flowParseTypeParameterInstantiation(): N.TypeParameterInstantiation {\n      const node = this.startNode<N.TypeParameterInstantiation>();\n      const oldInType = this.state.inType;\n\n      this.state.inType = true;\n      node.params = [];\n      this.flowInTopLevelContext(() => {\n        this.expect(tt.lt);\n        const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n        this.state.noAnonFunctionType = false;\n        while (!this.match(tt.gt)) {\n          node.params.push(this.flowParseType());\n          if (!this.match(tt.gt)) {\n            this.expect(tt.comma);\n          }\n        }\n        this.state.noAnonFunctionType = oldNoAnonFunctionType;\n      });\n\n      this.state.inType = oldInType;\n      if (!this.state.inType && this.curContext() === tc.brace) {\n        // rescan `>` when we are no longer in type context and JSX parsing context\n        // since it was tokenized when `inType` is `true`.\n        this.reScan_lt_gt();\n      }\n      this.expect(tt.gt);\n\n      return this.finishNode(node, \"TypeParameterInstantiation\");\n    }\n\n    flowParseTypeParameterInstantiationCallOrNew(): N.TypeParameterInstantiation | null {\n      if (this.reScan_lt() !== tt.lt) return null;\n      const node = this.startNode<N.TypeParameterInstantiation>();\n      const oldInType = this.state.inType;\n      node.params = [];\n\n      this.state.inType = true;\n\n      this.expect(tt.lt);\n      while (!this.match(tt.gt)) {\n        node.params.push(this.flowParseTypeOrImplicitInstantiation());\n        if (!this.match(tt.gt)) {\n          this.expect(tt.comma);\n        }\n      }\n      this.expect(tt.gt);\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterInstantiation\");\n    }\n\n    flowParseInterfaceType(): N.FlowInterfaceType {\n      const node = this.startNode<N.FlowInterfaceType>();\n      this.expectContextual(tt._interface);\n\n      node.extends = [];\n      if (this.eat(tt._extends)) {\n        do {\n          node.extends.push(this.flowParseInterfaceExtends());\n        } while (this.eat(tt.comma));\n      }\n\n      node.body = this.flowParseObjectType({\n        allowStatic: false,\n        allowExact: false,\n        allowSpread: false,\n        allowProto: false,\n        allowInexact: false,\n      });\n\n      return this.finishNode(node, \"InterfaceTypeAnnotation\");\n    }\n\n    flowParseObjectPropertyKey(): N.Expression {\n      return this.match(tt.num) || this.match(tt.string)\n        ? super.parseExprAtom()\n        : this.parseIdentifier(true);\n    }\n\n    flowParseObjectTypeIndexer(\n      node: Undone<N.FlowObjectTypeIndexer>,\n      isStatic: boolean,\n      variance?: N.FlowVariance | null,\n    ): N.FlowObjectTypeIndexer {\n      node.static = isStatic;\n\n      // Note: bracketL has already been consumed\n      if (this.lookahead().type === tt.colon) {\n        node.id = this.flowParseObjectPropertyKey();\n        node.key = this.flowParseTypeInitialiser();\n      } else {\n        node.id = null;\n        node.key = this.flowParseType();\n      }\n      this.expect(tt.bracketR);\n      node.value = this.flowParseTypeInitialiser();\n      node.variance = variance;\n\n      return this.finishNode(node, \"ObjectTypeIndexer\");\n    }\n\n    flowParseObjectTypeInternalSlot(\n      node: Undone<N.FlowObjectTypeInternalSlot>,\n      isStatic: boolean,\n    ): N.FlowObjectTypeInternalSlot {\n      node.static = isStatic;\n      // Note: both bracketL have already been consumed\n      node.id = this.flowParseObjectPropertyKey();\n      this.expect(tt.bracketR);\n      this.expect(tt.bracketR);\n      if (this.match(tt.lt) || this.match(tt.parenL)) {\n        node.method = true;\n        node.optional = false;\n        node.value = this.flowParseObjectTypeMethodish(\n          this.startNodeAt(node.loc.start),\n        );\n      } else {\n        node.method = false;\n        if (this.eat(tt.question)) {\n          node.optional = true;\n        }\n        node.value = this.flowParseTypeInitialiser();\n      }\n      return this.finishNode(node, \"ObjectTypeInternalSlot\");\n    }\n\n    flowParseObjectTypeMethodish(\n      node: Undone<N.FlowFunctionTypeAnnotation>,\n    ): N.FlowFunctionTypeAnnotation {\n      node.params = [];\n      node.rest = null;\n      node.typeParameters = null;\n      node.this = null;\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      this.expect(tt.parenL);\n      if (this.match(tt._this)) {\n        node.this = this.flowParseFunctionTypeParam(/* first */ true);\n        // match Flow parser behavior\n        node.this.name = null;\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n        node.params.push(this.flowParseFunctionTypeParam(false));\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n\n      if (this.eat(tt.ellipsis)) {\n        node.rest = this.flowParseFunctionTypeParam(false);\n      }\n      this.expect(tt.parenR);\n      node.returnType = this.flowParseTypeInitialiser();\n\n      return this.finishNode(node, \"FunctionTypeAnnotation\");\n    }\n\n    flowParseObjectTypeCallProperty(\n      node: Undone<N.FlowObjectTypeCallProperty>,\n      isStatic: boolean,\n    ): N.FlowObjectTypeCallProperty {\n      const valueNode = this.startNode();\n      node.static = isStatic;\n      node.value = this.flowParseObjectTypeMethodish(valueNode);\n      return this.finishNode(node, \"ObjectTypeCallProperty\");\n    }\n\n    flowParseObjectType({\n      allowStatic,\n      allowExact,\n      allowSpread,\n      allowProto,\n      allowInexact,\n    }: {\n      allowStatic: boolean;\n      allowExact: boolean;\n      allowSpread: boolean;\n      allowProto: boolean;\n      allowInexact: boolean;\n    }): N.FlowObjectTypeAnnotation {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n\n      const nodeStart = this.startNode<N.FlowObjectTypeAnnotation>();\n\n      nodeStart.callProperties = [];\n      nodeStart.properties = [];\n      nodeStart.indexers = [];\n      nodeStart.internalSlots = [];\n\n      let endDelim;\n      let exact;\n      let inexact = false;\n      if (allowExact && this.match(tt.braceBarL)) {\n        this.expect(tt.braceBarL);\n        endDelim = tt.braceBarR;\n        exact = true;\n      } else {\n        this.expect(tt.braceL);\n        endDelim = tt.braceR;\n        exact = false;\n      }\n\n      nodeStart.exact = exact;\n\n      while (!this.match(endDelim)) {\n        let isStatic = false;\n        let protoStartLoc: Position | undefined | null = null;\n        let inexactStartLoc: Position | undefined | null = null;\n        const node = this.startNode();\n\n        if (allowProto && this.isContextual(tt._proto)) {\n          const lookahead = this.lookahead();\n\n          if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n            this.next();\n            protoStartLoc = this.state.startLoc;\n            allowStatic = false;\n          }\n        }\n\n        if (allowStatic && this.isContextual(tt._static)) {\n          const lookahead = this.lookahead();\n\n          // static is a valid identifier name\n          if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n            this.next();\n            isStatic = true;\n          }\n        }\n\n        const variance = this.flowParseVariance();\n\n        if (this.eat(tt.bracketL)) {\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (this.eat(tt.bracketL)) {\n            if (variance) {\n              this.unexpected(variance.loc.start);\n            }\n            nodeStart.internalSlots.push(\n              this.flowParseObjectTypeInternalSlot(node, isStatic),\n            );\n          } else {\n            nodeStart.indexers.push(\n              this.flowParseObjectTypeIndexer(node, isStatic, variance),\n            );\n          }\n        } else if (this.match(tt.parenL) || this.match(tt.lt)) {\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (variance) {\n            this.unexpected(variance.loc.start);\n          }\n          nodeStart.callProperties.push(\n            this.flowParseObjectTypeCallProperty(node, isStatic),\n          );\n        } else {\n          let kind = \"init\";\n\n          if (this.isContextual(tt._get) || this.isContextual(tt._set)) {\n            const lookahead = this.lookahead();\n            if (tokenIsLiteralPropertyName(lookahead.type)) {\n              kind = this.state.value;\n              this.next();\n            }\n          }\n\n          const propOrInexact = this.flowParseObjectTypeProperty(\n            node,\n            isStatic,\n            protoStartLoc,\n            variance,\n            kind,\n            allowSpread,\n            allowInexact ?? !exact,\n          );\n\n          if (propOrInexact === null) {\n            inexact = true;\n            inexactStartLoc = this.state.lastTokStartLoc;\n          } else {\n            nodeStart.properties.push(propOrInexact);\n          }\n        }\n\n        this.flowObjectTypeSemicolon();\n\n        if (\n          inexactStartLoc &&\n          !this.match(tt.braceR) &&\n          !this.match(tt.braceBarR)\n        ) {\n          this.raise(\n            FlowErrors.UnexpectedExplicitInexactInObject,\n            inexactStartLoc,\n          );\n        }\n      }\n\n      this.expect(endDelim);\n\n      /* The inexact flag should only be added on ObjectTypeAnnotations that\n       * are not the body of an interface, declare interface, or declare class.\n       * Since spreads are only allowed in object types, checking that is\n       * sufficient here.\n       */\n      if (allowSpread) {\n        nodeStart.inexact = inexact;\n      }\n\n      const out = this.finishNode(nodeStart, \"ObjectTypeAnnotation\");\n\n      this.state.inType = oldInType;\n\n      return out;\n    }\n\n    flowParseObjectTypeProperty(\n      node: Undone<N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty>,\n      isStatic: boolean,\n      protoStartLoc: Position | undefined | null,\n      variance: N.FlowVariance | undefined | null,\n      kind: string,\n      allowSpread: boolean,\n      allowInexact: boolean,\n    ): N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty | null {\n      if (this.eat(tt.ellipsis)) {\n        const isInexactToken =\n          this.match(tt.comma) ||\n          this.match(tt.semi) ||\n          this.match(tt.braceR) ||\n          this.match(tt.braceBarR);\n\n        if (isInexactToken) {\n          if (!allowSpread) {\n            this.raise(\n              FlowErrors.InexactInsideNonObject,\n              this.state.lastTokStartLoc!,\n            );\n          } else if (!allowInexact) {\n            this.raise(\n              FlowErrors.InexactInsideExact,\n              this.state.lastTokStartLoc!,\n            );\n          }\n          if (variance) {\n            this.raise(FlowErrors.InexactVariance, variance);\n          }\n\n          return null;\n        }\n\n        if (!allowSpread) {\n          this.raise(\n            FlowErrors.UnexpectedSpreadType,\n            this.state.lastTokStartLoc!,\n          );\n        }\n        if (protoStartLoc != null) {\n          this.unexpected(protoStartLoc);\n        }\n        if (variance) {\n          this.raise(FlowErrors.SpreadVariance, variance);\n        }\n\n        node.argument = this.flowParseType();\n        return this.finishNode(node, \"ObjectTypeSpreadProperty\");\n      } else {\n        node.key = this.flowParseObjectPropertyKey();\n        node.static = isStatic;\n        node.proto = protoStartLoc != null;\n        node.kind = kind;\n\n        let optional = false;\n        if (this.match(tt.lt) || this.match(tt.parenL)) {\n          // This is a method property\n          node.method = true;\n\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (variance) {\n            this.unexpected(variance.loc.start);\n          }\n\n          node.value = this.flowParseObjectTypeMethodish(\n            this.startNodeAt(node.loc.start),\n          );\n          if (kind === \"get\" || kind === \"set\") {\n            this.flowCheckGetterSetterParams(node);\n          }\n          /** Declared classes/interfaces do not allow spread */\n          if (\n            !allowSpread &&\n            node.key.name === \"constructor\" &&\n            node.value.this\n          ) {\n            this.raise(\n              FlowErrors.ThisParamBannedInConstructor,\n              node.value.this,\n            );\n          }\n        } else {\n          if (kind !== \"init\") this.unexpected();\n\n          node.method = false;\n\n          if (this.eat(tt.question)) {\n            optional = true;\n          }\n          node.value = this.flowParseTypeInitialiser();\n          node.variance = variance;\n        }\n\n        node.optional = optional;\n\n        return this.finishNode(node, \"ObjectTypeProperty\");\n      }\n    }\n\n    // This is similar to checkGetterSetterParams, but as\n    // @babel/parser uses non estree properties we cannot reuse it here\n    flowCheckGetterSetterParams(\n      property: Undone<\n        N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty\n      >,\n    ): void {\n      const paramCount = property.kind === \"get\" ? 0 : 1;\n      const length =\n        property.value.params.length + (property.value.rest ? 1 : 0);\n\n      if (property.value.this) {\n        this.raise(\n          property.kind === \"get\"\n            ? FlowErrors.GetterMayNotHaveThisParam\n            : FlowErrors.SetterMayNotHaveThisParam,\n          property.value.this,\n        );\n      }\n\n      if (length !== paramCount) {\n        this.raise(\n          property.kind === \"get\"\n            ? Errors.BadGetterArity\n            : Errors.BadSetterArity,\n          property,\n        );\n      }\n\n      if (property.kind === \"set\" && property.value.rest) {\n        this.raise(Errors.BadSetterRestParameter, property);\n      }\n    }\n\n    flowObjectTypeSemicolon(): void {\n      if (\n        !this.eat(tt.semi) &&\n        !this.eat(tt.comma) &&\n        !this.match(tt.braceR) &&\n        !this.match(tt.braceBarR)\n      ) {\n        this.unexpected();\n      }\n    }\n\n    flowParseQualifiedTypeIdentifier(\n      startLoc?: Position,\n      id?: N.Identifier,\n    ): N.FlowQualifiedTypeIdentifier | N.Identifier {\n      startLoc ??= this.state.startLoc;\n      let node: N.Identifier | N.FlowQualifiedTypeIdentifier =\n        id || this.flowParseRestrictedIdentifier(true);\n\n      while (this.eat(tt.dot)) {\n        const node2 = this.startNodeAt<N.FlowQualifiedTypeIdentifier>(startLoc);\n        node2.qualification = node;\n        node2.id = this.flowParseRestrictedIdentifier(true);\n        node = this.finishNode(node2, \"QualifiedTypeIdentifier\");\n      }\n\n      return node;\n    }\n\n    flowParseGenericType(\n      startLoc: Position,\n      id: N.Identifier,\n    ): N.FlowGenericTypeAnnotation {\n      const node = this.startNodeAt<N.FlowGenericTypeAnnotation>(startLoc);\n\n      node.typeParameters = null;\n      node.id = this.flowParseQualifiedTypeIdentifier(startLoc, id);\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\n      }\n\n      return this.finishNode(node, \"GenericTypeAnnotation\");\n    }\n\n    flowParseTypeofType(): N.FlowTypeofTypeAnnotation {\n      const node = this.startNode<N.FlowTypeofTypeAnnotation>();\n      this.expect(tt._typeof);\n      node.argument = this.flowParsePrimaryType();\n      return this.finishNode(node, \"TypeofTypeAnnotation\");\n    }\n\n    flowParseTupleType(): N.FlowTupleTypeAnnotation {\n      const node = this.startNode<N.FlowTupleTypeAnnotation>();\n      node.types = [];\n      this.expect(tt.bracketL);\n      // We allow trailing commas\n      while (this.state.pos < this.length && !this.match(tt.bracketR)) {\n        node.types.push(this.flowParseType());\n        if (this.match(tt.bracketR)) break;\n        this.expect(tt.comma);\n      }\n      this.expect(tt.bracketR);\n      return this.finishNode(node, \"TupleTypeAnnotation\");\n    }\n\n    flowParseFunctionTypeParam(first: boolean): N.FlowFunctionTypeParam {\n      let name = null;\n      let optional = false;\n      let typeAnnotation = null;\n      const node = this.startNode<N.FlowFunctionTypeParam>();\n      const lh = this.lookahead();\n      const isThis = this.state.type === tt._this;\n\n      if (lh.type === tt.colon || lh.type === tt.question) {\n        if (isThis && !first) {\n          this.raise(FlowErrors.ThisParamMustBeFirst, node);\n        }\n        name = this.parseIdentifier(isThis);\n        if (this.eat(tt.question)) {\n          optional = true;\n          if (isThis) {\n            this.raise(FlowErrors.ThisParamMayNotBeOptional, node);\n          }\n        }\n        typeAnnotation = this.flowParseTypeInitialiser();\n      } else {\n        typeAnnotation = this.flowParseType();\n      }\n      node.name = name;\n      node.optional = optional;\n      node.typeAnnotation = typeAnnotation;\n      return this.finishNode(node, \"FunctionTypeParam\");\n    }\n\n    reinterpretTypeAsFunctionTypeParam(\n      type: N.FlowType,\n    ): N.FlowFunctionTypeParam {\n      const node = this.startNodeAt<N.FlowFunctionTypeParam>(type.loc.start);\n      node.name = null;\n      node.optional = false;\n      node.typeAnnotation = type;\n      return this.finishNode(node, \"FunctionTypeParam\");\n    }\n\n    flowParseFunctionTypeParams(params: N.FlowFunctionTypeParam[] = []): {\n      params: N.FlowFunctionTypeParam[];\n      rest: N.FlowFunctionTypeParam | undefined | null;\n      _this: N.FlowFunctionTypeParam | undefined | null;\n    } {\n      let rest: N.FlowFunctionTypeParam | undefined | null = null;\n      let _this: N.FlowFunctionTypeParam | undefined | null = null;\n      if (this.match(tt._this)) {\n        _this = this.flowParseFunctionTypeParam(/* first */ true);\n        // match Flow parser behavior\n        _this.name = null;\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n        params.push(this.flowParseFunctionTypeParam(false));\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      if (this.eat(tt.ellipsis)) {\n        rest = this.flowParseFunctionTypeParam(false);\n      }\n      return { params, rest, _this };\n    }\n\n    flowIdentToTypeAnnotation(\n      startLoc: Position,\n      node: Undone<N.FlowType>,\n      id: N.Identifier,\n    ): N.FlowType {\n      switch (id.name) {\n        case \"any\":\n          return this.finishNode(node, \"AnyTypeAnnotation\");\n\n        case \"bool\":\n        case \"boolean\":\n          return this.finishNode(node, \"BooleanTypeAnnotation\");\n\n        case \"mixed\":\n          return this.finishNode(node, \"MixedTypeAnnotation\");\n\n        case \"empty\":\n          return this.finishNode(node, \"EmptyTypeAnnotation\");\n\n        case \"number\":\n          return this.finishNode(node, \"NumberTypeAnnotation\");\n\n        case \"string\":\n          return this.finishNode(node, \"StringTypeAnnotation\");\n\n        case \"symbol\":\n          return this.finishNode(node, \"SymbolTypeAnnotation\");\n\n        default:\n          this.checkNotUnderscore(id.name);\n          return this.flowParseGenericType(startLoc, id);\n      }\n    }\n\n    // The parsing of types roughly parallels the parsing of expressions, and\n    // primary types are kind of like primary expressions...they're the\n    // primitives with which other types are constructed.\n    flowParsePrimaryType(): N.FlowType {\n      const startLoc = this.state.startLoc;\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      let tmp;\n      let type;\n      let isGroupedType = false;\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n\n      switch (this.state.type) {\n        case tt.braceL:\n          return this.flowParseObjectType({\n            allowStatic: false,\n            allowExact: false,\n            allowSpread: true,\n            allowProto: false,\n            allowInexact: true,\n          });\n\n        case tt.braceBarL:\n          return this.flowParseObjectType({\n            allowStatic: false,\n            allowExact: true,\n            allowSpread: true,\n            allowProto: false,\n            allowInexact: false,\n          });\n\n        case tt.bracketL:\n          this.state.noAnonFunctionType = false;\n          type = this.flowParseTupleType();\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n          return type;\n\n        case tt.lt: {\n          const node = this.startNode<N.FlowFunctionTypeAnnotation>();\n          node.typeParameters = this.flowParseTypeParameterDeclaration();\n          this.expect(tt.parenL);\n          tmp = this.flowParseFunctionTypeParams();\n          node.params = tmp.params;\n          node.rest = tmp.rest;\n          node.this = tmp._this;\n          this.expect(tt.parenR);\n\n          this.expect(tt.arrow);\n\n          node.returnType = this.flowParseType();\n\n          return this.finishNode(node, \"FunctionTypeAnnotation\");\n        }\n\n        case tt.parenL: {\n          const node = this.startNode<N.FlowFunctionTypeAnnotation>();\n          this.next();\n\n          // Check to see if this is actually a grouped type\n          if (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n            if (tokenIsIdentifier(this.state.type) || this.match(tt._this)) {\n              const token = this.lookahead().type;\n              isGroupedType = token !== tt.question && token !== tt.colon;\n            } else {\n              isGroupedType = true;\n            }\n          }\n\n          if (isGroupedType) {\n            this.state.noAnonFunctionType = false;\n            type = this.flowParseType();\n            this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n            // A `,` or a `) =>` means this is an anonymous function type\n            if (\n              this.state.noAnonFunctionType ||\n              !(\n                this.match(tt.comma) ||\n                (this.match(tt.parenR) && this.lookahead().type === tt.arrow)\n              )\n            ) {\n              this.expect(tt.parenR);\n              return type;\n            } else {\n              // Eat a comma if there is one\n              this.eat(tt.comma);\n            }\n          }\n\n          if (type) {\n            tmp = this.flowParseFunctionTypeParams([\n              this.reinterpretTypeAsFunctionTypeParam(type),\n            ]);\n          } else {\n            tmp = this.flowParseFunctionTypeParams();\n          }\n\n          node.params = tmp.params;\n          node.rest = tmp.rest;\n          node.this = tmp._this;\n\n          this.expect(tt.parenR);\n\n          this.expect(tt.arrow);\n\n          node.returnType = this.flowParseType();\n\n          node.typeParameters = null;\n\n          return this.finishNode(node, \"FunctionTypeAnnotation\");\n        }\n\n        case tt.string:\n          return this.parseLiteral<N.StringLiteralTypeAnnotation>(\n            this.state.value,\n            \"StringLiteralTypeAnnotation\",\n          );\n\n        case tt._true:\n        case tt._false:\n          node.value = this.match(tt._true);\n          this.next();\n          return this.finishNode(\n            node as Undone<N.BooleanLiteralTypeAnnotation>,\n            \"BooleanLiteralTypeAnnotation\",\n          );\n\n        case tt.plusMin:\n          if (this.state.value === \"-\") {\n            this.next();\n            if (this.match(tt.num)) {\n              return this.parseLiteralAtNode<N.NumberLiteralTypeAnnotation>(\n                -this.state.value,\n                \"NumberLiteralTypeAnnotation\",\n                node,\n              );\n            }\n\n            if (this.match(tt.bigint)) {\n              return this.parseLiteralAtNode<N.BigIntLiteralTypeAnnotation>(\n                -this.state.value,\n                \"BigIntLiteralTypeAnnotation\",\n                node,\n              );\n            }\n\n            throw this.raise(\n              FlowErrors.UnexpectedSubtractionOperand,\n              this.state.startLoc,\n            );\n          }\n          throw this.unexpected();\n        case tt.num:\n          return this.parseLiteral(\n            this.state.value,\n            \"NumberLiteralTypeAnnotation\",\n          );\n\n        case tt.bigint:\n          return this.parseLiteral(\n            this.state.value,\n            \"BigIntLiteralTypeAnnotation\",\n          );\n\n        case tt._void:\n          this.next();\n          return this.finishNode(node, \"VoidTypeAnnotation\");\n\n        case tt._null:\n          this.next();\n          return this.finishNode(node, \"NullLiteralTypeAnnotation\");\n\n        case tt._this:\n          this.next();\n          return this.finishNode(node, \"ThisTypeAnnotation\");\n\n        case tt.star:\n          this.next();\n          return this.finishNode(node, \"ExistsTypeAnnotation\");\n\n        case tt._typeof:\n          return this.flowParseTypeofType();\n\n        default:\n          if (tokenIsKeyword(this.state.type)) {\n            const label = tokenLabelName(this.state.type);\n            this.next();\n            return super.createIdentifier(node as Undone<N.Identifier>, label);\n          } else if (tokenIsIdentifier(this.state.type)) {\n            if (this.isContextual(tt._interface)) {\n              return this.flowParseInterfaceType();\n            }\n\n            return this.flowIdentToTypeAnnotation(\n              startLoc,\n              node,\n              this.parseIdentifier(),\n            );\n          }\n      }\n\n      throw this.unexpected();\n    }\n\n    flowParsePostfixType(): N.FlowType {\n      const startLoc = this.state.startLoc;\n      let type = this.flowParsePrimaryType();\n      let seenOptionalIndexedAccess = false;\n      while (\n        (this.match(tt.bracketL) || this.match(tt.questionDot)) &&\n        !this.canInsertSemicolon()\n      ) {\n        const node = this.startNodeAt<N.FlowOtherTypeAnnotation>(startLoc);\n        const optional = this.eat(tt.questionDot);\n        seenOptionalIndexedAccess = seenOptionalIndexedAccess || optional;\n        this.expect(tt.bracketL);\n        if (!optional && this.match(tt.bracketR)) {\n          node.elementType = type;\n          this.next(); // eat `]`\n          type = this.finishNode(node, \"ArrayTypeAnnotation\");\n        } else {\n          node.objectType = type;\n          node.indexType = this.flowParseType();\n          this.expect(tt.bracketR);\n          if (seenOptionalIndexedAccess) {\n            node.optional = optional;\n            type = this.finishNode<N.FlowOptionalIndexedAccessType>(\n              // @ts-expect-error todo(flow->ts)\n              node,\n              \"OptionalIndexedAccessType\",\n            );\n          } else {\n            type = this.finishNode<N.FlowIndexedAccessType>(\n              // @ts-expect-error todo(flow->ts)\n              node,\n              \"IndexedAccessType\",\n            );\n          }\n        }\n      }\n      return type;\n    }\n\n    flowParsePrefixType(): N.FlowType {\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      if (this.eat(tt.question)) {\n        node.typeAnnotation = this.flowParsePrefixType();\n        return this.finishNode(node, \"NullableTypeAnnotation\");\n      } else {\n        return this.flowParsePostfixType();\n      }\n    }\n\n    flowParseAnonFunctionWithoutParens(): N.FlowType {\n      const param = this.flowParsePrefixType();\n      if (!this.state.noAnonFunctionType && this.eat(tt.arrow)) {\n        // TODO: This should be a type error. Passing in a SourceLocation, and it expects a Position.\n        const node = this.startNodeAt<N.FlowFunctionTypeAnnotation>(\n          param.loc.start,\n        );\n        node.params = [this.reinterpretTypeAsFunctionTypeParam(param)];\n        node.rest = null;\n        node.this = null;\n        node.returnType = this.flowParseType();\n        node.typeParameters = null;\n        return this.finishNode(node, \"FunctionTypeAnnotation\");\n      }\n      return param;\n    }\n\n    flowParseIntersectionType(): N.FlowType {\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      this.eat(tt.bitwiseAND);\n      const type = this.flowParseAnonFunctionWithoutParens();\n      node.types = [type];\n      while (this.eat(tt.bitwiseAND)) {\n        node.types.push(this.flowParseAnonFunctionWithoutParens());\n      }\n      return node.types.length === 1\n        ? type\n        : this.finishNode(node, \"IntersectionTypeAnnotation\");\n    }\n\n    flowParseUnionType(): N.FlowType {\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      this.eat(tt.bitwiseOR);\n      const type = this.flowParseIntersectionType();\n      node.types = [type];\n      while (this.eat(tt.bitwiseOR)) {\n        node.types.push(this.flowParseIntersectionType());\n      }\n      return node.types.length === 1\n        ? type\n        : this.finishNode(node, \"UnionTypeAnnotation\");\n    }\n\n    flowParseType(): N.FlowType {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      const type = this.flowParseUnionType();\n      this.state.inType = oldInType;\n      return type;\n    }\n\n    flowParseTypeOrImplicitInstantiation(): N.FlowType {\n      if (this.state.type === tt.name && this.state.value === \"_\") {\n        const startLoc = this.state.startLoc;\n        const node = this.parseIdentifier();\n        return this.flowParseGenericType(startLoc, node);\n      } else {\n        return this.flowParseType();\n      }\n    }\n\n    flowParseTypeAnnotation(): N.TypeAnnotation {\n      const node = this.startNode<N.TypeAnnotation>();\n      node.typeAnnotation = this.flowParseTypeInitialiser();\n      return this.finishNode(node, \"TypeAnnotation\");\n    }\n\n    flowParseTypeAnnotatableIdentifier(\n      allowPrimitiveOverride?: boolean,\n    ): N.Identifier {\n      const ident = allowPrimitiveOverride\n        ? this.parseIdentifier()\n        : this.flowParseRestrictedIdentifier();\n      if (this.match(tt.colon)) {\n        ident.typeAnnotation = this.flowParseTypeAnnotation();\n        this.resetEndLocation(ident);\n      }\n      return ident;\n    }\n\n    typeCastToParameter(node: N.TypeCastExpression): N.Expression {\n      (node.expression as N.Identifier).typeAnnotation = node.typeAnnotation;\n\n      this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);\n\n      return node.expression;\n    }\n\n    flowParseVariance(): N.FlowVariance | undefined | null {\n      let variance = null;\n      if (this.match(tt.plusMin)) {\n        variance = this.startNode<N.FlowVariance>();\n        if (this.state.value === \"+\") {\n          variance.kind = \"plus\";\n        } else {\n          variance.kind = \"minus\";\n        }\n        this.next();\n        return this.finishNode(variance, \"Variance\");\n      }\n      return variance;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    parseFunctionBody(\n      node: N.Function,\n      allowExpressionBody?: boolean | null,\n      isMethod: boolean = false,\n    ): void {\n      if (allowExpressionBody) {\n        this.forwardNoArrowParamsConversionAt(node, () =>\n          super.parseFunctionBody(node, true, isMethod),\n        );\n        return;\n      }\n\n      super.parseFunctionBody(node, false, isMethod);\n    }\n\n    parseFunctionBodyAndFinish<\n      T extends\n        | N.Function\n        | N.TSDeclareMethod\n        | N.TSDeclareFunction\n        | N.ClassPrivateMethod,\n    >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n      if (this.match(tt.colon)) {\n        const typeNode = this.startNode<N.TypeAnnotation>();\n\n        [\n          typeNode.typeAnnotation,\n          // @ts-expect-error predicate may not exist\n          node.predicate,\n        ] = this.flowParseTypeAndPredicateInitialiser() as [\n          N.FlowType,\n          N.FlowPredicate,\n        ];\n\n        node.returnType = typeNode.typeAnnotation\n          ? this.finishNode(typeNode, \"TypeAnnotation\")\n          : null;\n      }\n\n      return super.parseFunctionBodyAndFinish(node, type, isMethod);\n    }\n\n    // interfaces and enums\n    parseStatementLike(flags: ParseStatementFlag): N.Statement {\n      // strict mode handling of `interface` since it's a reserved word\n      if (this.state.strict && this.isContextual(tt._interface)) {\n        const lookahead = this.lookahead();\n        if (tokenIsKeywordOrIdentifier(lookahead.type)) {\n          const node = this.startNode<N.FlowInterface>();\n          this.next();\n          return this.flowParseInterface(node);\n        }\n      } else if (this.isContextual(tt._enum)) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      }\n      const stmt = super.parseStatementLike(flags);\n      // We will parse a flow pragma in any comment before the first statement.\n      if (this.flowPragma === undefined && !this.isValidDirective(stmt)) {\n        this.flowPragma = null;\n      }\n      return stmt;\n    }\n\n    // declares, interfaces and type aliases\n    parseExpressionStatement(\n      node: N.ExpressionStatement,\n      expr: N.Expression,\n      decorators: N.Decorator[] | null,\n    ): N.ExpressionStatement {\n      if (expr.type === \"Identifier\") {\n        if (expr.name === \"declare\") {\n          if (\n            this.match(tt._class) ||\n            tokenIsIdentifier(this.state.type) ||\n            this.match(tt._function) ||\n            this.match(tt._var) ||\n            this.match(tt._export)\n          ) {\n            // @ts-expect-error: refine typings\n            return this.flowParseDeclare(node);\n          }\n        } else if (tokenIsIdentifier(this.state.type)) {\n          if (expr.name === \"interface\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseInterface(node);\n          } else if (expr.name === \"type\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseTypeAlias(node);\n          } else if (expr.name === \"opaque\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseOpaqueType(node, false);\n          }\n        }\n      }\n\n      return super.parseExpressionStatement(node, expr, decorators);\n    }\n\n    // export type\n    shouldParseExportDeclaration(): boolean {\n      const { type } = this.state;\n      if (type === tt._enum || tokenIsFlowInterfaceOrTypeOrOpaque(type)) {\n        return !this.state.containsEsc;\n      }\n      return super.shouldParseExportDeclaration();\n    }\n\n    isExportDefaultSpecifier(): boolean {\n      const { type } = this.state;\n      if (type === tt._enum || tokenIsFlowInterfaceOrTypeOrOpaque(type)) {\n        return this.state.containsEsc;\n      }\n\n      return super.isExportDefaultSpecifier();\n    }\n\n    parseExportDefaultExpression() {\n      if (this.isContextual(tt._enum)) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      }\n      return super.parseExportDefaultExpression();\n    }\n\n    parseConditional(\n      expr: N.Expression,\n\n      startLoc: Position,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.Expression {\n      if (!this.match(tt.question)) return expr;\n\n      if (this.state.maybeInArrowParameters) {\n        const nextCh = this.lookaheadCharCode();\n        // These tokens cannot start an expression, so if one of them follows\n        // ? then we are probably in an arrow function parameters list and we\n        // don't parse the conditional expression.\n        if (\n          nextCh === charCodes.comma || // (a?, b) => c\n          nextCh === charCodes.equalsTo || // (a? = b) => c\n          nextCh === charCodes.colon || // (a?: b) => c\n          nextCh === charCodes.rightParenthesis // (a?) => c\n        ) {\n          /*:: invariant(refExpressionErrors != null) */\n          this.setOptionalParametersError(refExpressionErrors!);\n          return expr;\n        }\n      }\n\n      this.expect(tt.question);\n      const state = this.state.clone();\n      const originalNoArrowAt = this.state.noArrowAt;\n      const node = this.startNodeAt<N.ConditionalExpression>(startLoc);\n      let { consequent, failed } = this.tryParseConditionalConsequent();\n      let [valid, invalid] = this.getArrowLikeExpressions(consequent);\n\n      if (failed || invalid.length > 0) {\n        const noArrowAt = [...originalNoArrowAt];\n\n        if (invalid.length > 0) {\n          this.state = state;\n          this.state.noArrowAt = noArrowAt;\n\n          for (let i = 0; i < invalid.length; i++) {\n            noArrowAt.push(invalid[i].start);\n          }\n\n          ({ consequent, failed } = this.tryParseConditionalConsequent());\n          [valid, invalid] = this.getArrowLikeExpressions(consequent);\n        }\n\n        if (failed && valid.length > 1) {\n          // if there are two or more possible correct ways of parsing, throw an\n          // error.\n          // e.g.   Source: a ? (b): c => (d): e => f\n          //      Result 1: a ? b : (c => ((d): e => f))\n          //      Result 2: a ? ((b): c => d) : (e => f)\n          this.raise(FlowErrors.AmbiguousConditionalArrow, state.startLoc);\n        }\n\n        if (failed && valid.length === 1) {\n          this.state = state;\n          noArrowAt.push(valid[0].start);\n          this.state.noArrowAt = noArrowAt;\n          ({ consequent, failed } = this.tryParseConditionalConsequent());\n        }\n      }\n\n      this.getArrowLikeExpressions(consequent, true);\n\n      this.state.noArrowAt = originalNoArrowAt;\n      this.expect(tt.colon);\n\n      node.test = expr;\n      node.consequent = consequent;\n      node.alternate = this.forwardNoArrowParamsConversionAt(node, () =>\n        this.parseMaybeAssign(undefined, undefined),\n      );\n\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n\n    tryParseConditionalConsequent(): {\n      consequent: N.Expression;\n      failed: boolean;\n    } {\n      this.state.noArrowParamsConversionAt.push(this.state.start);\n\n      const consequent = this.parseMaybeAssignAllowIn();\n      const failed = !this.match(tt.colon);\n\n      this.state.noArrowParamsConversionAt.pop();\n\n      return { consequent, failed };\n    }\n\n    // Given an expression, walks through out its arrow functions whose body is\n    // an expression and through out conditional expressions. It returns every\n    // function which has been parsed with a return type but could have been\n    // parenthesized expressions.\n    // These functions are separated into two arrays: one containing the ones\n    // whose parameters can be converted to assignable lists, one containing the\n    // others.\n    getArrowLikeExpressions(\n      node: N.Expression,\n      disallowInvalid?: boolean,\n    ): [N.ArrowFunctionExpression[], N.ArrowFunctionExpression[]] {\n      const stack = [node];\n      const arrows: N.ArrowFunctionExpression[] = [];\n\n      while (stack.length !== 0) {\n        const node = stack.pop()!;\n        if (\n          node.type === \"ArrowFunctionExpression\" &&\n          node.body.type !== \"BlockStatement\"\n        ) {\n          if (node.typeParameters || !node.returnType) {\n            // This is an arrow expression without ambiguity, so check its parameters\n            this.finishArrowValidation(node);\n          } else {\n            arrows.push(node);\n          }\n          stack.push(node.body);\n        } else if (node.type === \"ConditionalExpression\") {\n          stack.push(node.consequent);\n          stack.push(node.alternate);\n        }\n      }\n\n      if (disallowInvalid) {\n        arrows.forEach(node => this.finishArrowValidation(node));\n        return [arrows, []];\n      }\n\n      return partition(arrows, node =>\n        node.params.every(param => this.isAssignable(param, true)),\n      );\n    }\n\n    finishArrowValidation(node: N.ArrowFunctionExpression) {\n      this.toAssignableList(\n        // node.params is Expression[] instead of $ReadOnlyArray<Pattern> because it\n        // has not been converted yet.\n        node.params as any as N.Expression[],\n        node.extra?.trailingCommaLoc,\n        /* isLHS */ false,\n      );\n      // Enter scope, as checkParams defines bindings\n      this.scope.enter(ScopeFlag.FUNCTION | ScopeFlag.ARROW);\n      // Use super's method to force the parameters to be checked\n      super.checkParams(node, false, true);\n      this.scope.exit();\n    }\n\n    forwardNoArrowParamsConversionAt<T>(\n      node: Undone<N.Node>,\n      parse: () => T,\n    ): T {\n      let result: T;\n      if (\n        this.state.noArrowParamsConversionAt.includes(\n          this.offsetToSourcePos(node.start),\n        )\n      ) {\n        this.state.noArrowParamsConversionAt.push(this.state.start);\n        result = parse();\n        this.state.noArrowParamsConversionAt.pop();\n      } else {\n        result = parse();\n      }\n\n      return result;\n    }\n\n    parseParenItem<T extends N.Expression | N.RestElement | N.SpreadElement>(\n      node: T,\n      startLoc: Position,\n    ): T | N.TypeCastExpression | N.TsTypeCastExpression {\n      const newNode = super.parseParenItem(node, startLoc);\n      if (this.eat(tt.question)) {\n        (newNode as N.Identifier).optional = true;\n        // Include questionmark in location of node\n        // Don't use this.finishNode() as otherwise we might process comments twice and\n        // include already consumed parens\n        this.resetEndLocation(node);\n      }\n\n      if (this.match(tt.colon)) {\n        const typeCastNode = this.startNodeAt<N.TypeCastExpression>(startLoc);\n        typeCastNode.expression = newNode as N.Expression;\n        typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();\n\n        return this.finishNode(typeCastNode, \"TypeCastExpression\");\n      }\n\n      return newNode;\n    }\n\n    assertModuleNodeAllowed(node: N.Node) {\n      if (\n        (node.type === \"ImportDeclaration\" &&\n          (node.importKind === \"type\" || node.importKind === \"typeof\")) ||\n        (node.type === \"ExportNamedDeclaration\" &&\n          node.exportKind === \"type\") ||\n        (node.type === \"ExportAllDeclaration\" && node.exportKind === \"type\")\n      ) {\n        // Allow Flowtype imports and exports in all conditions because\n        // Flow itself does not care about 'sourceType'.\n        return;\n      }\n\n      super.assertModuleNodeAllowed(node);\n    }\n\n    parseExportDeclaration(\n      node: N.ExportNamedDeclaration,\n    ): N.Declaration | undefined | null {\n      if (this.isContextual(tt._type)) {\n        node.exportKind = \"type\";\n\n        const declarationNode = this.startNode();\n        this.next();\n\n        if (this.match(tt.braceL)) {\n          // export type { foo, bar };\n          node.specifiers = this.parseExportSpecifiers(\n            /* isInTypeExport */ true,\n          );\n          super.parseExportFrom(node);\n          return null;\n        } else {\n          // export type Foo = Bar;\n          // @ts-expect-error: refine typings\n          return this.flowParseTypeAlias(declarationNode);\n        }\n      } else if (this.isContextual(tt._opaque)) {\n        node.exportKind = \"type\";\n\n        const declarationNode = this.startNode();\n        this.next();\n        // export opaque type Foo = Bar;\n        // @ts-expect-error: refine typings\n        return this.flowParseOpaqueType(declarationNode, false);\n      } else if (this.isContextual(tt._interface)) {\n        node.exportKind = \"type\";\n        const declarationNode = this.startNode();\n        this.next();\n        // @ts-expect-error: refine typings\n        return this.flowParseInterface(declarationNode);\n      } else if (this.isContextual(tt._enum)) {\n        node.exportKind = \"value\";\n        const declarationNode = this.startNode();\n        this.next();\n        // @ts-expect-error: refine typings\n        return this.flowParseEnumDeclaration(declarationNode);\n      } else {\n        return super.parseExportDeclaration(node);\n      }\n    }\n\n    eatExportStar(\n      node: Undone<N.Node>,\n    ): node is Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration> {\n      if (super.eatExportStar(node)) return true;\n\n      if (this.isContextual(tt._type) && this.lookahead().type === tt.star) {\n        (\n          node as Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>\n        ).exportKind = \"type\";\n        this.next();\n        this.next();\n        return true;\n      }\n\n      return false;\n    }\n\n    maybeParseExportNamespaceSpecifier(\n      node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n    ): node is Undone<N.ExportNamedDeclaration> {\n      const { startLoc } = this.state;\n      const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);\n      if (hasNamespace && node.exportKind === \"type\") {\n        this.unexpected(startLoc);\n      }\n      return hasNamespace;\n    }\n\n    parseClassId(\n      node: N.Class,\n      isStatement: boolean,\n      optionalId?: boolean | null,\n    ) {\n      super.parseClassId(node, isStatement, optionalId);\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n    }\n\n    parseClassMember(\n      classBody: N.ClassBody,\n      member: any,\n      state: N.ParseClassMemberState,\n    ): void {\n      const { startLoc } = this.state;\n      if (this.isContextual(tt._declare)) {\n        if (super.parseClassMemberFromModifier(classBody, member)) {\n          // 'declare' is a class element name\n          return;\n        }\n\n        member.declare = true;\n      }\n\n      super.parseClassMember(classBody, member, state);\n\n      if (member.declare) {\n        if (\n          member.type !== \"ClassProperty\" &&\n          member.type !== \"ClassPrivateProperty\" &&\n          member.type !== \"PropertyDefinition\" // Used by estree plugin\n        ) {\n          this.raise(FlowErrors.DeclareClassElement, startLoc);\n        } else if (member.value) {\n          this.raise(FlowErrors.DeclareClassFieldInitializer, member.value);\n        }\n      }\n    }\n\n    isIterator(word: string): boolean {\n      return word === \"iterator\" || word === \"asyncIterator\";\n    }\n\n    readIterator(): void {\n      const word = super.readWord1();\n      const fullWord = \"@@\" + word;\n\n      // Allow @@iterator and @@asyncIterator as a identifier only inside type\n      if (!this.isIterator(word) || !this.state.inType) {\n        this.raise(Errors.InvalidIdentifier, this.state.curPosition(), {\n          identifierName: fullWord,\n        });\n      }\n\n      this.finishToken(tt.name, fullWord);\n    }\n\n    // ensure that inside flow types, we bypass the jsx parser plugin\n    getTokenFromCode(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (code === charCodes.leftCurlyBrace && next === charCodes.verticalBar) {\n        this.finishOp(tt.braceBarL, 2);\n      } else if (\n        this.state.inType &&\n        (code === charCodes.greaterThan || code === charCodes.lessThan)\n      ) {\n        this.finishOp(code === charCodes.greaterThan ? tt.gt : tt.lt, 1);\n      } else if (this.state.inType && code === charCodes.questionMark) {\n        if (next === charCodes.dot) {\n          this.finishOp(tt.questionDot, 2);\n        } else {\n          // allow double nullable types in Flow: ??string\n          this.finishOp(tt.question, 1);\n        }\n      } else if (\n        isIteratorStart(code, next, this.input.charCodeAt(this.state.pos + 2))\n      ) {\n        this.state.pos += 2; // eat \"@@\"\n        this.readIterator();\n      } else {\n        super.getTokenFromCode(code);\n      }\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      if (node.type === \"TypeCastExpression\") {\n        return this.isAssignable(node.expression, isBinding);\n      } else {\n        return super.isAssignable(node, isBinding);\n      }\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\n      if (\n        !isLHS &&\n        node.type === \"AssignmentExpression\" &&\n        node.left.type === \"TypeCastExpression\"\n      ) {\n        node.left = this.typeCastToParameter(node.left) as N.Assignable;\n      }\n      super.toAssignable(node, isLHS);\n    }\n\n    // turn type casts that we found in function parameter head into type annotated params\n    toAssignableList(\n      exprList: N.Expression[],\n      trailingCommaLoc: Position | undefined | null,\n      isLHS: boolean,\n    ): void {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (expr?.type === \"TypeCastExpression\") {\n          exprList[i] = this.typeCastToParameter(expr);\n        }\n      }\n      super.toAssignableList(exprList, trailingCommaLoc, isLHS);\n    }\n\n    // this is a list of nodes, from something like a call expression, we need to filter the\n    // type casts that we've found that are illegal in this context\n    toReferencedList(\n      exprList:\n        | ReadonlyArray<N.Expression | N.SpreadElement | null>\n        | ReadonlyArray<N.Expression | N.RestElement>,\n      isParenthesizedExpr?: boolean,\n    ):\n      | ReadonlyArray<N.Expression | N.SpreadElement | null>\n      | ReadonlyArray<N.Expression | N.RestElement> {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (\n          expr &&\n          expr.type === \"TypeCastExpression\" &&\n          !expr.extra?.parenthesized &&\n          (exprList.length > 1 || !isParenthesizedExpr)\n        ) {\n          this.raise(FlowErrors.TypeCastInPattern, expr.typeAnnotation);\n        }\n      }\n\n      return exprList;\n    }\n\n    parseArrayLike(\n      close: TokenType,\n      isTuple: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ArrayExpression | N.TupleExpression {\n      const node = super.parseArrayLike(close, isTuple, refExpressionErrors);\n\n      // This could be an array pattern:\n      //   ([a: string, b: string]) => {}\n      // In this case, we don't have to call toReferencedList. We will\n      // call it, if needed, when we are sure that it is a parenthesized\n      // expression by calling toReferencedListDeep.\n      if (refExpressionErrors != null && !this.state.maybeInArrowParameters) {\n        this.toReferencedList(node.elements);\n      }\n\n      return node;\n    }\n\n    isValidLVal(\n      type: string,\n      disallowCallExpression: boolean,\n      isParenthesized: boolean,\n      binding: BindingFlag,\n    ) {\n      return (\n        type === \"TypeCastExpression\" ||\n        super.isValidLVal(\n          type,\n          disallowCallExpression,\n          isParenthesized,\n          binding,\n        )\n      );\n    }\n\n    // parse class property type annotations\n    parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n      if (this.match(tt.colon)) {\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(\n      node: N.ClassPrivateProperty,\n    ): N.ClassPrivateProperty {\n      if (this.match(tt.colon)) {\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n      return super.parseClassPrivateProperty(node);\n    }\n\n    // determine whether or not we're currently in the position where a class method would appear\n    isClassMethod(): boolean {\n      return this.match(tt.lt) || super.isClassMethod();\n    }\n\n    // determine whether or not we're currently in the position where a class property would appear\n    isClassProperty(): boolean {\n      return this.match(tt.colon) || super.isClassProperty();\n    }\n\n    isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n      return !this.match(tt.colon) && super.isNonstaticConstructor(method);\n    }\n\n    // parse type parameters for class methods\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      if ((method as any).variance) {\n        this.unexpected((method as any).variance.loc.start);\n      }\n      delete (method as any).variance;\n      if (this.match(tt.lt)) {\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      super.pushClassMethod(\n        classBody,\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n      );\n\n      if (method.params && isConstructor) {\n        const params = method.params;\n        if (params.length > 0 && this.isThisParam(params[0])) {\n          this.raise(FlowErrors.ThisParamBannedInConstructor, method);\n        }\n        // estree support\n      } else if (\n        // @ts-expect-error TS does not know about the fact that estree can replace ClassMethod with MethodDefinition\n        method.type === \"MethodDefinition\" &&\n        isConstructor &&\n        // @ts-expect-error estree\n        method.value.params\n      ) {\n        // @ts-expect-error estree\n        const params = method.value.params;\n        if (params.length > 0 && this.isThisParam(params[0])) {\n          this.raise(FlowErrors.ThisParamBannedInConstructor, method);\n        }\n      }\n    }\n\n    pushClassPrivateMethod(\n      classBody: N.ClassBody,\n      method: N.ClassPrivateMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n    ): void {\n      if ((method as any).variance) {\n        this.unexpected((method as any).variance.loc.start);\n      }\n      delete (method as any).variance;\n      if (this.match(tt.lt)) {\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n    }\n\n    // parse a the super class type parameters and implements\n    parseClassSuper(node: N.Class): void {\n      super.parseClassSuper(node);\n      if (\n        node.superClass &&\n        (this.match(tt.lt) ||\n          // handles `class extends C<<T>`\n          this.match(tt.bitShiftL))\n      ) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.superTypeArguments =\n            this.flowParseTypeParameterInstantiationInExpression();\n        } else {\n          node.superTypeParameters =\n            this.flowParseTypeParameterInstantiationInExpression();\n        }\n      }\n      if (this.isContextual(tt._implements)) {\n        this.next();\n        const implemented: N.FlowClassImplements[] = (node.implements = []);\n        do {\n          const node = this.startNode<N.FlowClassImplements>();\n          node.id = this.flowParseRestrictedIdentifier(/*liberal*/ true);\n          if (this.match(tt.lt)) {\n            node.typeParameters = this.flowParseTypeParameterInstantiation();\n          } else {\n            node.typeParameters = null;\n          }\n          implemented.push(this.finishNode(node, \"ClassImplements\"));\n        } while (this.eat(tt.comma));\n      }\n    }\n\n    checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\n      super.checkGetterSetterParams(method);\n      const params = this.getObjectOrClassMethodParams(method);\n      if (params.length > 0) {\n        const param = params[0];\n        if (this.isThisParam(param) && method.kind === \"get\") {\n          this.raise(FlowErrors.GetterMayNotHaveThisParam, param);\n        } else if (this.isThisParam(param)) {\n          this.raise(FlowErrors.SetterMayNotHaveThisParam, param);\n        }\n      }\n    }\n\n    parsePropertyNamePrefixOperator(\n      node: N.ObjectOrClassMember | N.ClassMember,\n    ): void {\n      node.variance = this.flowParseVariance();\n    }\n\n    // parse type parameters for object method shorthand\n    parseObjPropValue<T extends N.ObjectMember>(\n      prop: Undone<T>,\n      startLoc: Position | undefined | null,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): T {\n      if ((prop as any).variance) {\n        this.unexpected((prop as any).variance.loc.start);\n      }\n      delete (prop as any).variance;\n\n      let typeParameters;\n\n      // method shorthand\n      if (this.match(tt.lt) && !isAccessor) {\n        typeParameters = this.flowParseTypeParameterDeclaration();\n        if (!this.match(tt.parenL)) this.unexpected();\n      }\n\n      const result = super.parseObjPropValue(\n        prop,\n        startLoc,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n        refExpressionErrors,\n      );\n\n      // add typeParameters if we found them\n      if (typeParameters) {\n        // @ts-expect-error: refine typings\n        (result.value || result).typeParameters = typeParameters;\n      }\n      return result;\n    }\n\n    parseFunctionParamType(param: N.Pattern): N.Pattern {\n      if (this.eat(tt.question)) {\n        if (param.type !== \"Identifier\") {\n          this.raise(FlowErrors.PatternIsOptional, param);\n        }\n        if (this.isThisParam(param)) {\n          this.raise(FlowErrors.ThisParamMayNotBeOptional, param);\n        }\n\n        (param as any as N.Identifier).optional = true;\n      }\n      if (this.match(tt.colon)) {\n        param.typeAnnotation = this.flowParseTypeAnnotation();\n      } else if (this.isThisParam(param)) {\n        this.raise(FlowErrors.ThisParamAnnotationRequired, param);\n      }\n\n      if (this.match(tt.eq) && this.isThisParam(param)) {\n        this.raise(FlowErrors.ThisParamNoDefault, param);\n      }\n\n      this.resetEndLocation(param);\n      return param;\n    }\n\n    parseMaybeDefault<P extends N.Pattern>(\n      startLoc?: Position | null,\n      left?: P | null,\n    ): P | N.AssignmentPattern {\n      const node = super.parseMaybeDefault(startLoc, left);\n\n      if (\n        node.type === \"AssignmentPattern\" &&\n        node.typeAnnotation &&\n        node.right.start < node.typeAnnotation.start\n      ) {\n        this.raise(FlowErrors.TypeBeforeInitializer, node.typeAnnotation);\n      }\n\n      return node;\n    }\n\n    checkImportReflection(node: Undone<N.ImportDeclaration>) {\n      super.checkImportReflection(node);\n      if (node.module && node.importKind !== \"value\") {\n        this.raise(\n          FlowErrors.ImportReflectionHasImportType,\n          node.specifiers[0].loc.start,\n        );\n      }\n    }\n\n    parseImportSpecifierLocal<\n      T extends\n        | N.ImportSpecifier\n        | N.ImportDefaultSpecifier\n        | N.ImportNamespaceSpecifier,\n    >(node: N.ImportDeclaration, specifier: Undone<T>, type: T[\"type\"]): void {\n      specifier.local = hasTypeImportKind(node)\n        ? this.flowParseRestrictedIdentifier(\n            /* liberal */ true,\n            /* declaration */ true,\n          )\n        : this.parseIdentifier();\n\n      node.specifiers.push(this.finishImportSpecifier(specifier, type));\n    }\n\n    isPotentialImportPhase(isExport: boolean): boolean {\n      if (super.isPotentialImportPhase(isExport)) return true;\n      if (this.isContextual(tt._type)) {\n        if (!isExport) return true;\n        const ch = this.lookaheadCharCode();\n        return ch === charCodes.leftCurlyBrace || ch === charCodes.asterisk;\n      }\n      return !isExport && this.isContextual(tt._typeof);\n    }\n\n    applyImportPhase(\n      node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n      isExport: boolean,\n      phase: string | null,\n      loc?: Position,\n    ): void {\n      super.applyImportPhase(node, isExport, phase, loc);\n      if (isExport) {\n        if (!phase && this.match(tt._default)) {\n          // TODO: Align with our TS AST and always add .exportKind\n          return;\n        }\n        (node as N.ExportNamedDeclaration).exportKind =\n          phase === \"type\" ? phase : \"value\";\n      } else {\n        if (phase === \"type\" && this.match(tt.star)) this.unexpected();\n        (node as N.ImportDeclaration).importKind =\n          phase === \"type\" || phase === \"typeof\" ? phase : \"value\";\n      }\n    }\n\n    // parse import-type/typeof shorthand\n    parseImportSpecifier(\n      specifier: any,\n      importedIsString: boolean,\n      isInTypeOnlyImport: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      isMaybeTypeOnly: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType: BindingFlag | undefined,\n    ): N.ImportSpecifier {\n      const firstIdent = specifier.imported;\n\n      let specifierTypeKind = null;\n      if (firstIdent.type === \"Identifier\") {\n        if (firstIdent.name === \"type\") {\n          specifierTypeKind = \"type\";\n        } else if (firstIdent.name === \"typeof\") {\n          specifierTypeKind = \"typeof\";\n        }\n      }\n\n      let isBinding = false;\n      if (this.isContextual(tt._as) && !this.isLookaheadContextual(\"as\")) {\n        const as_ident = this.parseIdentifier(true);\n        if (\n          specifierTypeKind !== null &&\n          !tokenIsKeywordOrIdentifier(this.state.type)\n        ) {\n          // `import {type as ,` or `import {type as }`\n          specifier.imported = as_ident;\n          specifier.importKind = specifierTypeKind;\n          specifier.local = this.cloneIdentifier(as_ident);\n        } else {\n          // `import {type as foo`\n          specifier.imported = firstIdent;\n          specifier.importKind = null;\n          specifier.local = this.parseIdentifier();\n        }\n      } else {\n        if (\n          specifierTypeKind !== null &&\n          tokenIsKeywordOrIdentifier(this.state.type)\n        ) {\n          // `import {type foo`\n          specifier.imported = this.parseIdentifier(true);\n          specifier.importKind = specifierTypeKind;\n        } else {\n          if (importedIsString) {\n            /*:: invariant(firstIdent instanceof N.StringLiteral) */\n            throw this.raise(Errors.ImportBindingIsString, specifier, {\n              importName: firstIdent.value,\n            });\n          }\n          /*:: invariant(firstIdent instanceof N.Node) */\n          specifier.imported = firstIdent;\n          specifier.importKind = null;\n        }\n\n        if (this.eatContextual(tt._as)) {\n          specifier.local = this.parseIdentifier();\n        } else {\n          isBinding = true;\n          specifier.local = this.cloneIdentifier(specifier.imported);\n        }\n      }\n\n      const specifierIsTypeImport = hasTypeImportKind(specifier);\n\n      if (isInTypeOnlyImport && specifierIsTypeImport) {\n        this.raise(FlowErrors.ImportTypeShorthandOnlyInPureImport, specifier);\n      }\n\n      if (isInTypeOnlyImport || specifierIsTypeImport) {\n        this.checkReservedType(\n          specifier.local.name,\n          specifier.local.loc.start,\n          /* declaration */ true,\n        );\n      }\n\n      if (isBinding && !isInTypeOnlyImport && !specifierIsTypeImport) {\n        this.checkReservedWord(\n          specifier.local.name,\n          specifier.loc.start,\n          true,\n          true,\n        );\n      }\n\n      return this.finishImportSpecifier(specifier, \"ImportSpecifier\");\n    }\n\n    parseBindingAtom(): N.Pattern {\n      switch (this.state.type) {\n        case tt._this:\n          // \"this\" may be the name of a parameter, so allow it.\n          return this.parseIdentifier(/* liberal */ true);\n        default:\n          return super.parseBindingAtom();\n      }\n    }\n\n    // parse function type parameters - function foo<T>() {}\n    parseFunctionParams(\n      node: Undone<N.Function>,\n      isConstructor: boolean,\n    ): void {\n      // @ts-expect-error kind may not index node\n      const kind = node.kind;\n      if (kind !== \"get\" && kind !== \"set\" && this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n      super.parseFunctionParams(node, isConstructor);\n    }\n\n    // parse flow type annotations on variable declarator heads - let foo: string = bar\n    parseVarId(\n      decl: N.VariableDeclarator,\n      kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n    ): void {\n      super.parseVarId(decl, kind);\n      if (this.match(tt.colon)) {\n        decl.id.typeAnnotation = this.flowParseTypeAnnotation();\n        this.resetEndLocation(decl.id); // set end position to end of type\n      }\n    }\n\n    // parse the return type of an async arrow function - let foo = (async (): number => {});\n    parseAsyncArrowFromCallExpression(\n      node: N.ArrowFunctionExpression,\n      call: N.CallExpression,\n    ): N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n        this.state.noAnonFunctionType = true;\n        node.returnType = this.flowParseTypeAnnotation();\n        this.state.noAnonFunctionType = oldNoAnonFunctionType;\n      }\n\n      return super.parseAsyncArrowFromCallExpression(node, call);\n    }\n\n    // todo description\n    shouldParseAsyncArrow(): boolean {\n      return this.match(tt.colon) || super.shouldParseAsyncArrow();\n    }\n\n    // We need to support type parameter declarations for arrow functions. This\n    // is tricky. There are three situations we need to handle\n    //\n    // 1. This is either JSX or an arrow function. We'll try JSX first. If that\n    //    fails, we'll try an arrow function. If that fails, we'll throw the JSX\n    //    error.\n    // 2. This is an arrow function. We'll parse the type parameter declaration,\n    //    parse the rest, make sure the rest is an arrow function, and go from\n    //    there\n    // 3. This is neither. Just call the super method\n    parseMaybeAssign(\n      refExpressionErrors?: ExpressionErrors | null,\n      afterLeftParse?: Function,\n    ): N.Expression {\n      let state = null;\n\n      let jsx;\n\n      if (\n        this.hasPlugin(\"jsx\") &&\n        (this.match(tt.jsxTagStart) || this.match(tt.lt))\n      ) {\n        state = this.state.clone();\n\n        jsx = this.tryParse(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\n\n        /*:: invariant(!jsx.aborted) */\n        /*:: invariant(jsx.node != null) */\n        if (!jsx.error) return jsx.node!;\n\n        // Remove `tc.j_expr` and `tc.j_oTag` from context added\n        // by parsing `jsxTagStart` to stop the JSX plugin from\n        // messing with the tokens\n        const { context } = this.state;\n        const currentContext = context[context.length - 1];\n        if (currentContext === tc.j_oTag || currentContext === tc.j_expr) {\n          context.pop();\n        }\n      }\n\n      if (jsx?.error || this.match(tt.lt)) {\n        state = state || this.state.clone();\n\n        let typeParameters: N.TypeParameterDeclaration;\n\n        const arrow = this.tryParse((abort: () => never) => {\n          typeParameters = this.flowParseTypeParameterDeclaration();\n\n          const arrowExpression = this.forwardNoArrowParamsConversionAt(\n            typeParameters,\n            () => {\n              const result = super.parseMaybeAssign(\n                refExpressionErrors,\n                afterLeftParse,\n              );\n\n              this.resetStartLocationFromNode(result, typeParameters);\n\n              return result;\n            },\n          );\n\n          // <T>(() => {});\n          // <T>(() => {}: any);\n          if (arrowExpression.extra?.parenthesized) abort();\n\n          // The above can return a TypeCastExpression when the arrow\n          // expression is not wrapped in parens. See also `this.parseParenItem`.\n          // (<T>() => {}: any);\n          const expr = this.maybeUnwrapTypeCastExpression(arrowExpression);\n\n          if (expr.type !== \"ArrowFunctionExpression\") abort();\n\n          expr.typeParameters = typeParameters;\n          this.resetStartLocationFromNode(expr, typeParameters);\n\n          return arrowExpression;\n        }, state);\n\n        let arrowExpression:\n          | N.ArrowFunctionExpression\n          | N.TypeCastExpression\n          | undefined\n          | null = null;\n\n        if (\n          arrow.node &&\n          this.maybeUnwrapTypeCastExpression(arrow.node).type ===\n            \"ArrowFunctionExpression\"\n        ) {\n          if (!arrow.error && !arrow.aborted) {\n            // <T> async () => {}\n            // @ts-expect-error: refine tryParse typings\n            if (arrow.node.async) {\n              /*:: invariant(typeParameters) */\n              this.raise(\n                FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction,\n                typeParameters!,\n              );\n            }\n            return arrow.node;\n          }\n\n          // @ts-expect-error: refine typings\n          arrowExpression = arrow.node;\n        }\n\n        // If we are here, both JSX and Flow parsing attempts failed.\n        // Give the precedence to the JSX error, except if JSX had an\n        // unrecoverable error while Flow didn't.\n        // If the error is recoverable, we can only re-report it if there is\n        // a node we can return.\n\n        if (jsx?.node) {\n          /*:: invariant(jsx.failState) */\n          this.state = jsx.failState;\n          return jsx.node;\n        }\n\n        if (arrowExpression) {\n          /*:: invariant(arrow.failState) */\n          this.state = arrow.failState!;\n          return arrowExpression;\n        }\n\n        if (jsx?.thrown) throw jsx.error;\n        if (arrow.thrown) throw arrow.error;\n\n        /*:: invariant(typeParameters) */\n        throw this.raise(\n          FlowErrors.UnexpectedTokenAfterTypeParameter,\n          typeParameters!,\n        );\n      }\n\n      return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n    }\n\n    // handle return types for arrow functions\n    parseArrow(\n      node: Undone<N.ArrowFunctionExpression>,\n    ): Undone<N.ArrowFunctionExpression> | undefined | null {\n      if (this.match(tt.colon)) {\n        // @ts-expect-error todo(flow->ts)\n        const result = this.tryParse<N.TypeAnnotation>(() => {\n          const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n          this.state.noAnonFunctionType = true;\n\n          const typeNode = this.startNode<N.TypeAnnotation>();\n\n          [\n            typeNode.typeAnnotation,\n            // @ts-expect-error (destructuring not supported yet)\n            node.predicate,\n          ] = this.flowParseTypeAndPredicateInitialiser() as [\n            N.FlowType,\n            N.FlowPredicate,\n          ];\n\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n          if (this.canInsertSemicolon()) this.unexpected();\n          if (!this.match(tt.arrow)) this.unexpected();\n\n          return typeNode;\n        });\n\n        if (result.thrown) return null;\n        /*:: invariant(result.node) */\n\n        if (result.error) this.state = result.failState;\n\n        // assign after it is clear it is an arrow\n        // @ts-expect-error todo(flow->ts)\n        node.returnType = result.node.typeAnnotation\n          ? this.finishNode(result.node!, \"TypeAnnotation\")\n          : null;\n      }\n\n      return super.parseArrow(node);\n    }\n\n    shouldParseArrow(params: Array<N.Node>): boolean {\n      return this.match(tt.colon) || super.shouldParseArrow(params);\n    }\n\n    setArrowFunctionParameters(\n      node: Undone<N.ArrowFunctionExpression>,\n      params:\n        | Array<N.Expression | N.SpreadElement>\n        | Array<N.Expression | N.RestElement>,\n    ): void {\n      if (\n        this.state.noArrowParamsConversionAt.includes(\n          this.offsetToSourcePos(node.start),\n        )\n      ) {\n        node.params = params as N.ArrowFunctionExpression[\"params\"];\n      } else {\n        super.setArrowFunctionParameters(node, params);\n      }\n    }\n\n    checkParams(\n      node: N.Function,\n      allowDuplicates: boolean,\n      isArrowFunction?: boolean | null,\n      strictModeChanged: boolean = true,\n    ): void {\n      if (\n        isArrowFunction &&\n        this.state.noArrowParamsConversionAt.includes(\n          this.offsetToSourcePos(node.start),\n        )\n      ) {\n        return;\n      }\n\n      // ensure the `this` param is first, if it exists\n      for (let i = 0; i < node.params.length; i++) {\n        if (this.isThisParam(node.params[i]) && i > 0) {\n          this.raise(FlowErrors.ThisParamMustBeFirst, node.params[i]);\n        }\n      }\n\n      super.checkParams(\n        node,\n        allowDuplicates,\n        isArrowFunction,\n        strictModeChanged,\n      );\n    }\n\n    parseParenAndDistinguishExpression(canBeArrow: boolean): N.Expression {\n      return super.parseParenAndDistinguishExpression(\n        canBeArrow &&\n          !this.state.noArrowAt.includes(\n            this.sourceToOffsetPos(this.state.start),\n          ),\n      );\n    }\n\n    parseSubscripts(\n      base: N.Expression,\n      startLoc: Position,\n      noCalls?: boolean | null,\n    ): N.Expression {\n      if (\n        base.type === \"Identifier\" &&\n        base.name === \"async\" &&\n        this.state.noArrowAt.includes(startLoc.index)\n      ) {\n        this.next();\n\n        const node = this.startNodeAt<N.CallExpression>(startLoc);\n        node.callee = base;\n        node.arguments = super.parseCallExpressionArguments();\n        base = this.finishNode(node, \"CallExpression\");\n      } else if (\n        base.type === \"Identifier\" &&\n        base.name === \"async\" &&\n        this.match(tt.lt)\n      ) {\n        const state = this.state.clone();\n        const arrow = this.tryParse(\n          abort => this.parseAsyncArrowWithTypeParameters(startLoc) || abort(),\n          state,\n        );\n\n        /*:: invariant(arrow.node != null) */\n        // @ts-expect-error: refine tryParse typings\n        if (!arrow.error && !arrow.aborted) return arrow.node;\n\n        const result = this.tryParse(\n          () => super.parseSubscripts(base, startLoc, noCalls),\n          state,\n        );\n\n        if (result.node && !result.error) return result.node;\n\n        if (arrow.node) {\n          this.state = arrow.failState;\n          // @ts-expect-error: refine tryParse typings\n          return arrow.node;\n        }\n\n        if (result.node) {\n          this.state = result.failState!;\n          return result.node;\n        }\n\n        throw arrow.error || result.error!;\n      }\n\n      return super.parseSubscripts(base, startLoc, noCalls);\n    }\n\n    parseSubscript(\n      base: N.Expression,\n\n      startLoc: Position,\n      noCalls: boolean | undefined | null,\n      subscriptState: N.ParseSubscriptState,\n    ): N.Expression {\n      if (this.match(tt.questionDot) && this.isLookaheadToken_lt()) {\n        subscriptState.optionalChainMember = true;\n        if (noCalls) {\n          subscriptState.stop = true;\n          return base;\n        }\n        this.next();\n        const node = this.startNodeAt<N.OptionalCallExpression>(startLoc);\n        node.callee = base;\n        node.typeArguments =\n          this.flowParseTypeParameterInstantiationInExpression();\n        this.expect(tt.parenL);\n        node.arguments = this.parseCallExpressionArguments();\n        node.optional = true;\n        return this.finishCallExpression(node, /* optional */ true);\n      } else if (\n        !noCalls &&\n        this.shouldParseTypes() &&\n        (this.match(tt.lt) ||\n          // also handles `new C<<T>`\n          this.match(tt.bitShiftL))\n      ) {\n        const node = this.startNodeAt<\n          N.OptionalCallExpression | N.CallExpression\n        >(startLoc);\n        node.callee = base;\n\n        const result = this.tryParse(() => {\n          node.typeArguments =\n            this.flowParseTypeParameterInstantiationCallOrNew();\n          this.expect(tt.parenL);\n          node.arguments = super.parseCallExpressionArguments();\n          if (subscriptState.optionalChainMember) {\n            (node as Undone<N.OptionalCallExpression>).optional = false;\n          }\n          return this.finishCallExpression(\n            node,\n            subscriptState.optionalChainMember,\n          );\n        });\n\n        if (result.node) {\n          if (result.error) this.state = result.failState;\n          return result.node;\n        }\n      }\n\n      return super.parseSubscript(\n        base,\n\n        startLoc,\n        noCalls,\n        subscriptState,\n      );\n    }\n\n    parseNewCallee(node: N.NewExpression): void {\n      super.parseNewCallee(node);\n\n      let targs = null;\n      if (this.shouldParseTypes() && this.match(tt.lt)) {\n        targs = this.tryParse(() =>\n          this.flowParseTypeParameterInstantiationCallOrNew(),\n        ).node;\n      }\n      node.typeArguments = targs;\n    }\n\n    parseAsyncArrowWithTypeParameters(\n      startLoc: Position,\n    ): N.ArrowFunctionExpression | undefined | null {\n      const node = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n      this.parseFunctionParams(node, false);\n      if (!this.parseArrow(node)) return;\n      return super.parseArrowExpression(\n        node,\n        /* params */ undefined,\n        /* isAsync */ true,\n      );\n    }\n\n    readToken_mult_modulo(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (\n        code === charCodes.asterisk &&\n        next === charCodes.slash &&\n        this.state.hasFlowComment\n      ) {\n        this.state.hasFlowComment = false;\n        this.state.pos += 2;\n        this.nextToken();\n        return;\n      }\n\n      super.readToken_mult_modulo(code);\n    }\n\n    readToken_pipe_amp(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (\n        code === charCodes.verticalBar &&\n        next === charCodes.rightCurlyBrace\n      ) {\n        // '|}'\n        this.finishOp(tt.braceBarR, 2);\n        return;\n      }\n\n      super.readToken_pipe_amp(code);\n    }\n\n    parseTopLevel(file: N.File, program: N.Program): N.File {\n      const fileNode = super.parseTopLevel(file, program);\n      if (this.state.hasFlowComment) {\n        this.raise(\n          FlowErrors.UnterminatedFlowComment,\n          this.state.curPosition(),\n        );\n      }\n      return fileNode;\n    }\n\n    skipBlockComment(): N.CommentBlock | undefined {\n      if (this.hasPlugin(\"flowComments\") && this.skipFlowComment()) {\n        if (this.state.hasFlowComment) {\n          throw this.raise(FlowErrors.NestedFlowComment, this.state.startLoc);\n        }\n        this.hasFlowCommentCompletion();\n        const commentSkip = this.skipFlowComment();\n        if (commentSkip) {\n          this.state.pos += commentSkip;\n          this.state.hasFlowComment = true;\n        }\n        return;\n      }\n\n      return super.skipBlockComment(this.state.hasFlowComment ? \"*-/\" : \"*/\");\n    }\n\n    skipFlowComment(): number | false {\n      const { pos } = this.state;\n      let shiftToFirstNonWhiteSpace = 2;\n      while (\n        [charCodes.space, charCodes.tab].includes(\n          // @ts-expect-error testing whether a number is included\n          this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace),\n        )\n      ) {\n        shiftToFirstNonWhiteSpace++;\n      }\n\n      const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos);\n      const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1);\n\n      if (ch2 === charCodes.colon && ch3 === charCodes.colon) {\n        return shiftToFirstNonWhiteSpace + 2; // check for /*::\n      }\n      if (\n        this.input.slice(\n          shiftToFirstNonWhiteSpace + pos,\n          shiftToFirstNonWhiteSpace + pos + 12,\n        ) === \"flow-include\"\n      ) {\n        return shiftToFirstNonWhiteSpace + 12; // check for /*flow-include\n      }\n      if (ch2 === charCodes.colon && ch3 !== charCodes.colon) {\n        return shiftToFirstNonWhiteSpace; // check for /*:, advance up to :\n      }\n      return false;\n    }\n\n    hasFlowCommentCompletion(): void {\n      const end = this.input.indexOf(\"*/\", this.state.pos);\n      if (end === -1) {\n        throw this.raise(Errors.UnterminatedComment, this.state.curPosition());\n      }\n    }\n\n    // Flow enum parsing\n\n    flowEnumErrorBooleanMemberNotInitialized(\n      loc: Position,\n      {\n        enumName,\n        memberName,\n      }: {\n        enumName: string;\n        memberName: string;\n      },\n    ): void {\n      this.raise(FlowErrors.EnumBooleanMemberNotInitialized, loc, {\n        memberName,\n        enumName,\n      });\n    }\n\n    flowEnumErrorInvalidMemberInitializer(\n      loc: Position,\n      enumContext: EnumContext,\n    ) {\n      return this.raise(\n        !enumContext.explicitType\n          ? FlowErrors.EnumInvalidMemberInitializerUnknownType\n          : enumContext.explicitType === \"symbol\"\n            ? FlowErrors.EnumInvalidMemberInitializerSymbolType\n            : FlowErrors.EnumInvalidMemberInitializerPrimaryType,\n        loc,\n        enumContext,\n      );\n    }\n\n    flowEnumErrorNumberMemberNotInitialized(\n      loc: Position,\n      details: {\n        enumName: string;\n        memberName: string;\n      },\n    ): void {\n      this.raise(FlowErrors.EnumNumberMemberNotInitialized, loc, details);\n    }\n\n    flowEnumErrorStringMemberInconsistentlyInitialized(\n      node: N.Node,\n      details: {\n        enumName: string;\n      },\n    ): void {\n      this.raise(\n        FlowErrors.EnumStringMemberInconsistentlyInitialized,\n        node,\n        details,\n      );\n    }\n\n    flowEnumMemberInit(): EnumMemberInit {\n      const startLoc = this.state.startLoc;\n      const endOfInit = () => this.match(tt.comma) || this.match(tt.braceR);\n      switch (this.state.type) {\n        case tt.num: {\n          const literal = this.parseNumericLiteral(this.state.value);\n          if (endOfInit()) {\n            return { type: \"number\", loc: literal.loc.start, value: literal };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        case tt.string: {\n          const literal = this.parseStringLiteral(this.state.value);\n          if (endOfInit()) {\n            return { type: \"string\", loc: literal.loc.start, value: literal };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        case tt._true:\n        case tt._false: {\n          const literal = this.parseBooleanLiteral(this.match(tt._true));\n          if (endOfInit()) {\n            return {\n              type: \"boolean\",\n              loc: literal.loc.start,\n              value: literal,\n            };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        default:\n          return { type: \"invalid\", loc: startLoc };\n      }\n    }\n\n    flowEnumMemberRaw(): {\n      id: N.Identifier;\n      init: EnumMemberInit;\n    } {\n      const loc = this.state.startLoc;\n      const id = this.parseIdentifier(true);\n      const init = this.eat(tt.eq)\n        ? this.flowEnumMemberInit()\n        : { type: \"none\" as const, loc };\n      return { id, init };\n    }\n\n    flowEnumCheckExplicitTypeMismatch(\n      loc: Position,\n      context: EnumContext,\n      expectedType: EnumExplicitType,\n    ): void {\n      const { explicitType } = context;\n      if (explicitType === null) {\n        return;\n      }\n      if (explicitType !== expectedType) {\n        this.flowEnumErrorInvalidMemberInitializer(loc, context);\n      }\n    }\n\n    flowEnumMembers({\n      enumName,\n      explicitType,\n    }: {\n      enumName: string;\n      explicitType: EnumExplicitType;\n    }): {\n      members: {\n        booleanMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumBooleanMember\" }\n        >[];\n        numberMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumNumberMember\" }\n        >[];\n        stringMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumStringMember\" }\n        >[];\n        defaultedMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumDefaultedMember\" }\n        >[];\n      };\n      hasUnknownMembers: boolean;\n    } {\n      const seenNames = new Set();\n      const members = {\n        booleanMembers: [],\n        numberMembers: [],\n        stringMembers: [],\n        defaultedMembers: [],\n      };\n      let hasUnknownMembers = false;\n      while (!this.match(tt.braceR)) {\n        if (this.eat(tt.ellipsis)) {\n          hasUnknownMembers = true;\n          break;\n        }\n        const memberNode = this.startNode<N.FlowEnumMember>();\n        const { id, init } = this.flowEnumMemberRaw();\n        const memberName = id.name;\n        if (memberName === \"\") {\n          continue;\n        }\n        if (/^[a-z]/.test(memberName)) {\n          this.raise(FlowErrors.EnumInvalidMemberName, id, {\n            memberName,\n            suggestion: memberName[0].toUpperCase() + memberName.slice(1),\n            enumName,\n          });\n        }\n        if (seenNames.has(memberName)) {\n          this.raise(FlowErrors.EnumDuplicateMemberName, id, {\n            memberName,\n            enumName,\n          });\n        }\n        seenNames.add(memberName);\n        const context = { enumName, explicitType, memberName };\n        memberNode.id = id;\n        switch (init.type) {\n          case \"boolean\": {\n            this.flowEnumCheckExplicitTypeMismatch(\n              init.loc,\n              context,\n              \"boolean\",\n            );\n            memberNode.init = init.value;\n            members.booleanMembers.push(\n              // @ts-expect-error NodeAny not supported\n              this.finishNode(memberNode, \"EnumBooleanMember\"),\n            );\n            break;\n          }\n          case \"number\": {\n            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, \"number\");\n            memberNode.init = init.value;\n            members.numberMembers.push(\n              // @ts-expect-error NodeAny not supported\n              this.finishNode(memberNode, \"EnumNumberMember\"),\n            );\n            break;\n          }\n          case \"string\": {\n            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, \"string\");\n            memberNode.init = init.value;\n            members.stringMembers.push(\n              // @ts-expect-error NodeAny not supported\n              this.finishNode(memberNode, \"EnumStringMember\"),\n            );\n            break;\n          }\n          case \"invalid\": {\n            throw this.flowEnumErrorInvalidMemberInitializer(init.loc, context);\n          }\n          case \"none\": {\n            switch (explicitType) {\n              case \"boolean\":\n                this.flowEnumErrorBooleanMemberNotInitialized(\n                  init.loc,\n                  context,\n                );\n                break;\n              case \"number\":\n                this.flowEnumErrorNumberMemberNotInitialized(init.loc, context);\n                break;\n              default:\n                members.defaultedMembers.push(\n                  // @ts-expect-error NodeAny not supported\n                  this.finishNode(memberNode, \"EnumDefaultedMember\"),\n                );\n            }\n          }\n        }\n\n        if (!this.match(tt.braceR)) {\n          this.expect(tt.comma);\n        }\n      }\n      return { members, hasUnknownMembers };\n    }\n\n    flowEnumStringMembers(\n      initializedMembers: Array<N.Node>,\n      defaultedMembers: Array<N.Node>,\n      {\n        enumName,\n      }: {\n        enumName: string;\n      },\n    ): Array<N.Node> {\n      if (initializedMembers.length === 0) {\n        return defaultedMembers;\n      } else if (defaultedMembers.length === 0) {\n        return initializedMembers;\n      } else if (defaultedMembers.length > initializedMembers.length) {\n        for (const member of initializedMembers) {\n          this.flowEnumErrorStringMemberInconsistentlyInitialized(member, {\n            enumName,\n          });\n        }\n        return defaultedMembers;\n      } else {\n        for (const member of defaultedMembers) {\n          this.flowEnumErrorStringMemberInconsistentlyInitialized(member, {\n            enumName,\n          });\n        }\n        return initializedMembers;\n      }\n    }\n\n    flowEnumParseExplicitType({\n      enumName,\n    }: {\n      enumName: string;\n    }): EnumExplicitType {\n      if (!this.eatContextual(tt._of)) return null;\n\n      if (!tokenIsIdentifier(this.state.type)) {\n        throw this.raise(\n          FlowErrors.EnumInvalidExplicitTypeUnknownSupplied,\n          this.state.startLoc,\n          {\n            enumName,\n          },\n        );\n      }\n\n      const { value } = this.state;\n      this.next();\n\n      if (\n        value !== \"boolean\" &&\n        value !== \"number\" &&\n        value !== \"string\" &&\n        value !== \"symbol\"\n      ) {\n        this.raise(FlowErrors.EnumInvalidExplicitType, this.state.startLoc, {\n          enumName,\n          invalidEnumType: value,\n        });\n      }\n\n      return value;\n    }\n\n    flowEnumBody(node: Undone<N.FlowEnumBody>, id: N.Identifier): N.Node {\n      const enumName = id.name;\n      const nameLoc = id.loc.start;\n      const explicitType = this.flowEnumParseExplicitType({ enumName });\n      this.expect(tt.braceL);\n      const { members, hasUnknownMembers } = this.flowEnumMembers({\n        enumName,\n        explicitType,\n      });\n      node.hasUnknownMembers = hasUnknownMembers;\n\n      switch (explicitType) {\n        case \"boolean\":\n          node.explicitType = true;\n          node.members = members.booleanMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumBooleanBody\");\n        case \"number\":\n          node.explicitType = true;\n          node.members = members.numberMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumNumberBody\");\n        case \"string\":\n          node.explicitType = true;\n          node.members = this.flowEnumStringMembers(\n            members.stringMembers,\n            members.defaultedMembers,\n            { enumName },\n          );\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumStringBody\");\n        case \"symbol\":\n          node.members = members.defaultedMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumSymbolBody\");\n        default: {\n          // `explicitType` is `null`\n          const empty = () => {\n            node.members = [];\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumStringBody\");\n          };\n          node.explicitType = false;\n\n          const boolsLen = members.booleanMembers.length;\n          const numsLen = members.numberMembers.length;\n          const strsLen = members.stringMembers.length;\n          const defaultedLen = members.defaultedMembers.length;\n\n          if (!boolsLen && !numsLen && !strsLen && !defaultedLen) {\n            return empty();\n          } else if (!boolsLen && !numsLen) {\n            node.members = this.flowEnumStringMembers(\n              members.stringMembers,\n              members.defaultedMembers,\n              { enumName },\n            );\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumStringBody\");\n          } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorBooleanMemberNotInitialized(member.loc.start, {\n                enumName,\n                memberName: member.id.name,\n              });\n            }\n            node.members = members.booleanMembers;\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumBooleanBody\");\n          } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorNumberMemberNotInitialized(member.loc.start, {\n                enumName,\n                memberName: member.id.name,\n              });\n            }\n            node.members = members.numberMembers;\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumNumberBody\");\n          } else {\n            this.raise(FlowErrors.EnumInconsistentMemberValues, nameLoc, {\n              enumName,\n            });\n            return empty();\n          }\n        }\n      }\n    }\n\n    flowParseEnumDeclaration(\n      node: Undone<N.FlowEnumDeclaration>,\n    ): N.FlowEnumDeclaration {\n      const id = this.parseIdentifier();\n      node.id = id;\n      node.body = this.flowEnumBody(this.startNode(), id);\n      return this.finishNode(node, \"EnumDeclaration\");\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: N.JSXOpeningElement,\n    ): N.JSXOpeningElement {\n      if (this.shouldParseTypes()) {\n        if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n          node.typeArguments =\n            this.flowParseTypeParameterInstantiationInExpression();\n        }\n      }\n\n      return super.jsxParseOpeningElementAfterName(node);\n    }\n\n    // check if the next token is a tt.lt\n    isLookaheadToken_lt(): boolean {\n      const next = this.nextTokenStart();\n      if (this.input.charCodeAt(next) === charCodes.lessThan) {\n        const afterNext = this.input.charCodeAt(next + 1);\n        return (\n          afterNext !== charCodes.lessThan && afterNext !== charCodes.equalsTo\n        );\n      }\n      return false;\n    }\n\n    // used after we have finished parsing types\n    reScan_lt_gt() {\n      const { type } = this.state;\n      if (type === tt.lt) {\n        this.state.pos -= 1;\n        this.readToken_lt();\n      } else if (type === tt.gt) {\n        this.state.pos -= 1;\n        this.readToken_gt();\n      }\n    }\n\n    reScan_lt() {\n      const { type } = this.state;\n      if (type === tt.bitShiftL) {\n        this.state.pos -= 2;\n        this.finishOp(tt.lt, 1);\n        return tt.lt;\n      }\n      return type;\n    }\n\n    maybeUnwrapTypeCastExpression(node: N.Node) {\n      return node.type === \"TypeCastExpression\" ? node.expression : node;\n    }\n  };\n", "const entities: { [name: string]: string } = {\n  // @ts-expect-error __proto__ is not an actual property: https://github.com/microsoft/TypeScript/issues/38385\n  __proto__: null,\n  quot: \"\\u0022\",\n  amp: \"&\",\n  apos: \"\\u0027\",\n  lt: \"<\",\n  gt: \">\",\n  nbsp: \"\\u00A0\",\n  iexcl: \"\\u00A1\",\n  cent: \"\\u00A2\",\n  pound: \"\\u00A3\",\n  curren: \"\\u00A4\",\n  yen: \"\\u00A5\",\n  brvbar: \"\\u00A6\",\n  sect: \"\\u00A7\",\n  uml: \"\\u00A8\",\n  copy: \"\\u00A9\",\n  ordf: \"\\u00AA\",\n  laquo: \"\\u00AB\",\n  not: \"\\u00AC\",\n  shy: \"\\u00AD\",\n  reg: \"\\u00AE\",\n  macr: \"\\u00AF\",\n  deg: \"\\u00B0\",\n  plusmn: \"\\u00B1\",\n  sup2: \"\\u00B2\",\n  sup3: \"\\u00B3\",\n  acute: \"\\u00B4\",\n  micro: \"\\u00B5\",\n  para: \"\\u00B6\",\n  middot: \"\\u00B7\",\n  cedil: \"\\u00B8\",\n  sup1: \"\\u00B9\",\n  ordm: \"\\u00BA\",\n  raquo: \"\\u00BB\",\n  frac14: \"\\u00BC\",\n  frac12: \"\\u00BD\",\n  frac34: \"\\u00BE\",\n  iquest: \"\\u00BF\",\n  Agrave: \"\\u00C0\",\n  Aacute: \"\\u00C1\",\n  Acirc: \"\\u00C2\",\n  Atilde: \"\\u00C3\",\n  Auml: \"\\u00C4\",\n  Aring: \"\\u00C5\",\n  AElig: \"\\u00C6\",\n  Ccedil: \"\\u00C7\",\n  Egrave: \"\\u00C8\",\n  Eacute: \"\\u00C9\",\n  Ecirc: \"\\u00CA\",\n  Euml: \"\\u00CB\",\n  Igrave: \"\\u00CC\",\n  Iacute: \"\\u00CD\",\n  Icirc: \"\\u00CE\",\n  Iuml: \"\\u00CF\",\n  ETH: \"\\u00D0\",\n  Ntilde: \"\\u00D1\",\n  Ograve: \"\\u00D2\",\n  Oacute: \"\\u00D3\",\n  Ocirc: \"\\u00D4\",\n  Otilde: \"\\u00D5\",\n  Ouml: \"\\u00D6\",\n  times: \"\\u00D7\",\n  Oslash: \"\\u00D8\",\n  Ugrave: \"\\u00D9\",\n  Uacute: \"\\u00DA\",\n  Ucirc: \"\\u00DB\",\n  Uuml: \"\\u00DC\",\n  Yacute: \"\\u00DD\",\n  THORN: \"\\u00DE\",\n  szlig: \"\\u00DF\",\n  agrave: \"\\u00E0\",\n  aacute: \"\\u00E1\",\n  acirc: \"\\u00E2\",\n  atilde: \"\\u00E3\",\n  auml: \"\\u00E4\",\n  aring: \"\\u00E5\",\n  aelig: \"\\u00E6\",\n  ccedil: \"\\u00E7\",\n  egrave: \"\\u00E8\",\n  eacute: \"\\u00E9\",\n  ecirc: \"\\u00EA\",\n  euml: \"\\u00EB\",\n  igrave: \"\\u00EC\",\n  iacute: \"\\u00ED\",\n  icirc: \"\\u00EE\",\n  iuml: \"\\u00EF\",\n  eth: \"\\u00F0\",\n  ntilde: \"\\u00F1\",\n  ograve: \"\\u00F2\",\n  oacute: \"\\u00F3\",\n  ocirc: \"\\u00F4\",\n  otilde: \"\\u00F5\",\n  ouml: \"\\u00F6\",\n  divide: \"\\u00F7\",\n  oslash: \"\\u00F8\",\n  ugrave: \"\\u00F9\",\n  uacute: \"\\u00FA\",\n  ucirc: \"\\u00FB\",\n  uuml: \"\\u00FC\",\n  yacute: \"\\u00FD\",\n  thorn: \"\\u00FE\",\n  yuml: \"\\u00FF\",\n  OElig: \"\\u0152\",\n  oelig: \"\\u0153\",\n  Scaron: \"\\u0160\",\n  scaron: \"\\u0161\",\n  Yuml: \"\\u0178\",\n  fnof: \"\\u0192\",\n  circ: \"\\u02C6\",\n  tilde: \"\\u02DC\",\n  Alpha: \"\\u0391\",\n  Beta: \"\\u0392\",\n  Gamma: \"\\u0393\",\n  Delta: \"\\u0394\",\n  Epsilon: \"\\u0395\",\n  Zeta: \"\\u0396\",\n  Eta: \"\\u0397\",\n  Theta: \"\\u0398\",\n  Iota: \"\\u0399\",\n  Kappa: \"\\u039A\",\n  Lambda: \"\\u039B\",\n  Mu: \"\\u039C\",\n  Nu: \"\\u039D\",\n  Xi: \"\\u039E\",\n  Omicron: \"\\u039F\",\n  Pi: \"\\u03A0\",\n  Rho: \"\\u03A1\",\n  Sigma: \"\\u03A3\",\n  Tau: \"\\u03A4\",\n  Upsilon: \"\\u03A5\",\n  Phi: \"\\u03A6\",\n  Chi: \"\\u03A7\",\n  Psi: \"\\u03A8\",\n  Omega: \"\\u03A9\",\n  alpha: \"\\u03B1\",\n  beta: \"\\u03B2\",\n  gamma: \"\\u03B3\",\n  delta: \"\\u03B4\",\n  epsilon: \"\\u03B5\",\n  zeta: \"\\u03B6\",\n  eta: \"\\u03B7\",\n  theta: \"\\u03B8\",\n  iota: \"\\u03B9\",\n  kappa: \"\\u03BA\",\n  lambda: \"\\u03BB\",\n  mu: \"\\u03BC\",\n  nu: \"\\u03BD\",\n  xi: \"\\u03BE\",\n  omicron: \"\\u03BF\",\n  pi: \"\\u03C0\",\n  rho: \"\\u03C1\",\n  sigmaf: \"\\u03C2\",\n  sigma: \"\\u03C3\",\n  tau: \"\\u03C4\",\n  upsilon: \"\\u03C5\",\n  phi: \"\\u03C6\",\n  chi: \"\\u03C7\",\n  psi: \"\\u03C8\",\n  omega: \"\\u03C9\",\n  thetasym: \"\\u03D1\",\n  upsih: \"\\u03D2\",\n  piv: \"\\u03D6\",\n  ensp: \"\\u2002\",\n  emsp: \"\\u2003\",\n  thinsp: \"\\u2009\",\n  zwnj: \"\\u200C\",\n  zwj: \"\\u200D\",\n  lrm: \"\\u200E\",\n  rlm: \"\\u200F\",\n  ndash: \"\\u2013\",\n  mdash: \"\\u2014\",\n  lsquo: \"\\u2018\",\n  rsquo: \"\\u2019\",\n  sbquo: \"\\u201A\",\n  ldquo: \"\\u201C\",\n  rdquo: \"\\u201D\",\n  bdquo: \"\\u201E\",\n  dagger: \"\\u2020\",\n  Dagger: \"\\u2021\",\n  bull: \"\\u2022\",\n  hellip: \"\\u2026\",\n  permil: \"\\u2030\",\n  prime: \"\\u2032\",\n  Prime: \"\\u2033\",\n  lsaquo: \"\\u2039\",\n  rsaquo: \"\\u203A\",\n  oline: \"\\u203E\",\n  frasl: \"\\u2044\",\n  euro: \"\\u20AC\",\n  image: \"\\u2111\",\n  weierp: \"\\u2118\",\n  real: \"\\u211C\",\n  trade: \"\\u2122\",\n  alefsym: \"\\u2135\",\n  larr: \"\\u2190\",\n  uarr: \"\\u2191\",\n  rarr: \"\\u2192\",\n  darr: \"\\u2193\",\n  harr: \"\\u2194\",\n  crarr: \"\\u21B5\",\n  lArr: \"\\u21D0\",\n  uArr: \"\\u21D1\",\n  rArr: \"\\u21D2\",\n  dArr: \"\\u21D3\",\n  hArr: \"\\u21D4\",\n  forall: \"\\u2200\",\n  part: \"\\u2202\",\n  exist: \"\\u2203\",\n  empty: \"\\u2205\",\n  nabla: \"\\u2207\",\n  isin: \"\\u2208\",\n  notin: \"\\u2209\",\n  ni: \"\\u220B\",\n  prod: \"\\u220F\",\n  sum: \"\\u2211\",\n  minus: \"\\u2212\",\n  lowast: \"\\u2217\",\n  radic: \"\\u221A\",\n  prop: \"\\u221D\",\n  infin: \"\\u221E\",\n  ang: \"\\u2220\",\n  and: \"\\u2227\",\n  or: \"\\u2228\",\n  cap: \"\\u2229\",\n  cup: \"\\u222A\",\n  int: \"\\u222B\",\n  there4: \"\\u2234\",\n  sim: \"\\u223C\",\n  cong: \"\\u2245\",\n  asymp: \"\\u2248\",\n  ne: \"\\u2260\",\n  equiv: \"\\u2261\",\n  le: \"\\u2264\",\n  ge: \"\\u2265\",\n  sub: \"\\u2282\",\n  sup: \"\\u2283\",\n  nsub: \"\\u2284\",\n  sube: \"\\u2286\",\n  supe: \"\\u2287\",\n  oplus: \"\\u2295\",\n  otimes: \"\\u2297\",\n  perp: \"\\u22A5\",\n  sdot: \"\\u22C5\",\n  lceil: \"\\u2308\",\n  rceil: \"\\u2309\",\n  lfloor: \"\\u230A\",\n  rfloor: \"\\u230B\",\n  lang: \"\\u2329\",\n  rang: \"\\u232A\",\n  loz: \"\\u25CA\",\n  spades: \"\\u2660\",\n  clubs: \"\\u2663\",\n  hearts: \"\\u2665\",\n  diams: \"\\u2666\",\n} as const;\nexport default entities;\n", "import * as charCodes from \"charcodes\";\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\nexport const lineBreak = /\\r\\n|[\\r\\n\\u2028\\u2029]/;\nexport const lineBreakG = new RegExp(lineBreak.source, \"g\");\n\n// https://tc39.github.io/ecma262/#sec-line-terminators\nexport function isNewLine(code: number): boolean {\n  switch (code) {\n    case charCodes.lineFeed:\n    case charCodes.carriageReturn:\n    case charCodes.lineSeparator:\n    case charCodes.paragraphSeparator:\n      return true;\n\n    default:\n      return false;\n  }\n}\n\nexport function hasNewLine(input: string, start: number, end: number): boolean {\n  for (let i = start; i < end; i++) {\n    if (isNewLine(input.charCodeAt(i))) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport const skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nexport const skipWhiteSpaceInLine =\n  /(?:[^\\S\\n\\r\\u2028\\u2029]|\\/\\/.*|\\/\\*.*?\\*\\/)*/g;\n\n// https://tc39.github.io/ecma262/#sec-white-space\nexport function isWhitespace(code: number): boolean {\n  switch (code) {\n    case 0x0009: // CHARACTER TABULATION\n    case 0x000b: // LINE TABULATION\n    case 0x000c: // FORM FEED\n    case charCodes.space:\n    case charCodes.nonBreakingSpace:\n    case charCodes.oghamSpaceMark:\n    case 0x2000: // EN QUAD\n    case 0x2001: // EM QUAD\n    case 0x2002: // EN SPACE\n    case 0x2003: // EM SPACE\n    case 0x2004: // THREE-PER-EM SPACE\n    case 0x2005: // FOUR-PER-EM SPACE\n    case 0x2006: // SIX-PER-EM SPACE\n    case 0x2007: // FIGURE SPACE\n    case 0x2008: // PUNCTUATION SPACE\n    case 0x2009: // THIN SPACE\n    case 0x200a: // HAIR SPACE\n    case 0x202f: // NARROW NO-BREAK SPACE\n    case 0x205f: // MEDIUM MATHEMATICAL SPACE\n    case 0x3000: // IDEOGRAPHIC SPACE\n    case 0xfeff: // ZERO WIDTH NO-BREAK SPACE\n      return true;\n\n    default:\n      return false;\n  }\n}\n", "import * as charCodes from \"charcodes\";\n\nimport XHTMLEntities from \"./xhtml.ts\";\nimport type Parser from \"../../parser/index.ts\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport {\n  tokenComesBeforeExpression,\n  tokenIsKeyword,\n  tokenLabelName,\n  type TokenType,\n  tt,\n} from \"../../tokenizer/types.ts\";\nimport type { TokContext } from \"../../tokenizer/context.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport type * as N from \"../../types.ts\";\nimport { isIdentifierChar, isIdentifierStart } from \"../../util/identifier.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { isNewLine } from \"../../util/whitespace.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport type { Undone } from \"../../parser/node.ts\";\n\n/* eslint sort-keys: \"error\" */\nconst JsxErrors = ParseErrorEnum`jsx`({\n  AttributeIsEmpty:\n    \"JSX attributes must only be assigned a non-empty expression.\",\n  MissingClosingTagElement: ({ openingTagName }: { openingTagName: string }) =>\n    `Expected corresponding JSX closing tag for <${openingTagName}>.`,\n  MissingClosingTagFragment: \"Expected corresponding JSX closing tag for <>.\",\n  UnexpectedSequenceExpression:\n    \"Sequence expressions cannot be directly nested inside JSX. Did you mean to wrap it in parentheses (...)?\",\n  // FIXME: Unify with Errors.UnexpectedToken\n  UnexpectedToken: ({\n    unexpected,\n    HTMLEntity,\n  }: {\n    unexpected: string;\n    HTMLEntity: string;\n  }) =>\n    `Unexpected token \\`${unexpected}\\`. Did you mean \\`${HTMLEntity}\\` or \\`{'${unexpected}'}\\`?`,\n  UnsupportedJsxValue:\n    \"JSX value should be either an expression or a quoted JSX text.\",\n  UnterminatedJsxContent: \"Unterminated JSX contents.\",\n  UnwrappedAdjacentJSXElements:\n    \"Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...</>?\",\n});\n\n/* eslint-disable sort-keys */\n\nfunction isFragment(object?: N.JSXTag | null): object is N.JSXFragmentTag {\n  return object\n    ? object.type === \"JSXOpeningFragment\" ||\n        object.type === \"JSXClosingFragment\"\n    : false;\n}\n\n// Transforms JSX element name to string.\n\nfunction getQualifiedJSXName(\n  object: N.JSXIdentifier | N.JSXNamespacedName | N.JSXMemberExpression,\n): string {\n  if (object.type === \"JSXIdentifier\") {\n    return object.name;\n  }\n\n  if (object.type === \"JSXNamespacedName\") {\n    return object.namespace.name + \":\" + object.name.name;\n  }\n\n  if (object.type === \"JSXMemberExpression\") {\n    return (\n      getQualifiedJSXName(object.object) +\n      \".\" +\n      getQualifiedJSXName(object.property)\n    );\n  }\n\n  // istanbul ignore next\n  // @ts-expect-error - object is 'never'\n  throw new Error(\"Node had unexpected type: \" + object.type);\n}\n\nexport interface IJSXParserMixin {\n  jsxParseOpeningElementAfterName(\n    node: N.JSXOpeningElement,\n  ): N.JSXOpeningElement;\n}\n\nexport type ClassWithMixin<\n  T extends new (...args: any) => any,\n  M extends object,\n> = T extends new (...args: infer P) => infer I\n  ? new (...args: P) => I & M\n  : never;\n\nexport default (superClass: typeof Parser) =>\n  class JSXParserMixin extends superClass implements Parser, IJSXParserMixin {\n    // Reads inline JSX contents token.\n\n    jsxReadToken(): void {\n      let out = \"\";\n      let chunkStart = this.state.pos;\n      for (;;) {\n        if (this.state.pos >= this.length) {\n          throw this.raise(\n            JsxErrors.UnterminatedJsxContent,\n            this.state.startLoc,\n          );\n        }\n\n        const ch = this.input.charCodeAt(this.state.pos);\n\n        switch (ch) {\n          case charCodes.lessThan:\n          case charCodes.leftCurlyBrace:\n            if (this.state.pos === this.state.start) {\n              if (ch === charCodes.lessThan && this.state.canStartJSXElement) {\n                ++this.state.pos;\n                this.finishToken(tt.jsxTagStart);\n              } else {\n                super.getTokenFromCode(ch);\n              }\n              return;\n            }\n            out += this.input.slice(chunkStart, this.state.pos);\n            this.finishToken(tt.jsxText, out);\n            return;\n\n          case charCodes.ampersand:\n            out += this.input.slice(chunkStart, this.state.pos);\n            out += this.jsxReadEntity();\n            chunkStart = this.state.pos;\n            break;\n\n          case charCodes.greaterThan:\n          case charCodes.rightCurlyBrace:\n            if (process.env.BABEL_8_BREAKING) {\n              this.raise(JsxErrors.UnexpectedToken, this.state.curPosition(), {\n                unexpected: this.input[this.state.pos],\n                HTMLEntity:\n                  ch === charCodes.rightCurlyBrace ? \"&rbrace;\" : \"&gt;\",\n              });\n            }\n          /* falls through */\n\n          default:\n            if (isNewLine(ch)) {\n              out += this.input.slice(chunkStart, this.state.pos);\n              out += this.jsxReadNewLine(true);\n              chunkStart = this.state.pos;\n            } else {\n              ++this.state.pos;\n            }\n        }\n      }\n    }\n\n    jsxReadNewLine(normalizeCRLF: boolean): string {\n      const ch = this.input.charCodeAt(this.state.pos);\n      let out;\n      ++this.state.pos;\n      if (\n        ch === charCodes.carriageReturn &&\n        this.input.charCodeAt(this.state.pos) === charCodes.lineFeed\n      ) {\n        ++this.state.pos;\n        out = normalizeCRLF ? \"\\n\" : \"\\r\\n\";\n      } else {\n        out = String.fromCharCode(ch);\n      }\n      ++this.state.curLine;\n      this.state.lineStart = this.state.pos;\n\n      return out;\n    }\n\n    jsxReadString(quote: number): void {\n      let out = \"\";\n      let chunkStart = ++this.state.pos;\n      for (;;) {\n        if (this.state.pos >= this.length) {\n          throw this.raise(Errors.UnterminatedString, this.state.startLoc);\n        }\n\n        const ch = this.input.charCodeAt(this.state.pos);\n        if (ch === quote) break;\n        if (ch === charCodes.ampersand) {\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadEntity();\n          chunkStart = this.state.pos;\n        } else if (isNewLine(ch)) {\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadNewLine(false);\n          chunkStart = this.state.pos;\n        } else {\n          ++this.state.pos;\n        }\n      }\n      out += this.input.slice(chunkStart, this.state.pos++);\n      this.finishToken(tt.string, out);\n    }\n\n    jsxReadEntity(): string {\n      const startPos = ++this.state.pos;\n      if (this.codePointAtPos(this.state.pos) === charCodes.numberSign) {\n        ++this.state.pos;\n\n        let radix = 10;\n        if (this.codePointAtPos(this.state.pos) === charCodes.lowercaseX) {\n          radix = 16;\n          ++this.state.pos;\n        }\n\n        const codePoint = this.readInt(\n          radix,\n          /* len */ undefined,\n          /* forceLen */ false,\n          /* allowNumSeparator */ \"bail\",\n        );\n        if (\n          codePoint !== null &&\n          this.codePointAtPos(this.state.pos) === charCodes.semicolon\n        ) {\n          ++this.state.pos;\n          return String.fromCodePoint(codePoint);\n        }\n      } else {\n        let count = 0;\n        let semi = false;\n        while (\n          count++ < 10 &&\n          this.state.pos < this.length &&\n          !(semi = this.codePointAtPos(this.state.pos) === charCodes.semicolon)\n        ) {\n          ++this.state.pos;\n        }\n\n        if (semi) {\n          const desc = this.input.slice(startPos, this.state.pos);\n          const entity = XHTMLEntities[desc];\n          ++this.state.pos;\n\n          if (entity) {\n            return entity;\n          }\n        }\n      }\n\n      // Not a valid entity\n      this.state.pos = startPos;\n      return \"&\";\n    }\n\n    // Read a JSX identifier (valid tag or attribute name).\n    //\n    // Optimized version since JSX identifiers can\"t contain\n    // escape characters and so can be read as single slice.\n    // Also assumes that first character was already checked\n    // by isIdentifierStart in readToken.\n\n    jsxReadWord(): void {\n      let ch;\n      const start = this.state.pos;\n      do {\n        ch = this.input.charCodeAt(++this.state.pos);\n      } while (isIdentifierChar(ch) || ch === charCodes.dash);\n      this.finishToken(tt.jsxName, this.input.slice(start, this.state.pos));\n    }\n\n    // Parse next token as JSX identifier\n\n    jsxParseIdentifier(): N.JSXIdentifier {\n      const node = this.startNode<N.JSXIdentifier>();\n      if (this.match(tt.jsxName)) {\n        node.name = this.state.value;\n      } else if (tokenIsKeyword(this.state.type)) {\n        node.name = tokenLabelName(this.state.type);\n      } else {\n        this.unexpected();\n      }\n      this.next();\n      return this.finishNode(node, \"JSXIdentifier\");\n    }\n\n    // Parse namespaced identifier.\n\n    jsxParseNamespacedName(): N.JSXNamespacedName | N.JSXIdentifier {\n      const startLoc = this.state.startLoc;\n      const name = this.jsxParseIdentifier();\n      if (!this.eat(tt.colon)) return name;\n\n      const node = this.startNodeAt<N.JSXNamespacedName>(startLoc);\n      node.namespace = name;\n      node.name = this.jsxParseIdentifier();\n      return this.finishNode(node, \"JSXNamespacedName\");\n    }\n\n    // Parses element name in any form - namespaced, member\n    // or single identifier.\n\n    jsxParseElementName():\n      | N.JSXIdentifier\n      | N.JSXNamespacedName\n      | N.JSXMemberExpression {\n      const startLoc = this.state.startLoc;\n      let node: N.JSXIdentifier | N.JSXNamespacedName | N.JSXMemberExpression =\n        this.jsxParseNamespacedName();\n      if (node.type === \"JSXNamespacedName\") {\n        return node;\n      }\n      while (this.eat(tt.dot)) {\n        const newNode = this.startNodeAt<N.JSXMemberExpression>(startLoc);\n        newNode.object = node;\n        newNode.property = this.jsxParseIdentifier();\n        node = this.finishNode(newNode, \"JSXMemberExpression\");\n      }\n      return node;\n    }\n\n    // Parses any type of JSX attribute value.\n\n    jsxParseAttributeValue():\n      | N.JSXExpressionContainer\n      | N.JSXElement\n      | N.StringLiteral {\n      let node;\n      switch (this.state.type) {\n        case tt.braceL:\n          node = this.startNode();\n          this.setContext(tc.brace);\n          this.next();\n          node = this.jsxParseExpressionContainer(node, tc.j_oTag);\n          if (node.expression.type === \"JSXEmptyExpression\") {\n            this.raise(JsxErrors.AttributeIsEmpty, node);\n          }\n          return node;\n\n        case tt.jsxTagStart:\n        case tt.string:\n          return this.parseExprAtom() as N.JSXElement | N.StringLiteral;\n\n        default:\n          throw this.raise(JsxErrors.UnsupportedJsxValue, this.state.startLoc);\n      }\n    }\n\n    // JSXEmptyExpression is unique type since it doesn't actually parse anything,\n    // and so it should start at the end of last read token (left brace) and finish\n    // at the beginning of the next one (right brace).\n\n    jsxParseEmptyExpression(): N.JSXEmptyExpression {\n      const node = this.startNodeAt(this.state.lastTokEndLoc!);\n      return this.finishNodeAt(node, \"JSXEmptyExpression\", this.state.startLoc);\n    }\n\n    // Parse JSX spread child\n\n    jsxParseSpreadChild(node: Undone<N.JSXSpreadChild>): N.JSXSpreadChild {\n      this.next(); // ellipsis\n      node.expression = this.parseExpression();\n      this.setContext(tc.j_expr);\n      this.state.canStartJSXElement = true;\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"JSXSpreadChild\");\n    }\n\n    // Parses JSX expression enclosed into curly brackets.\n\n    jsxParseExpressionContainer(\n      node: Undone<N.JSXExpressionContainer>,\n      previousContext: TokContext,\n    ): N.JSXExpressionContainer {\n      if (this.match(tt.braceR)) {\n        node.expression = this.jsxParseEmptyExpression();\n      } else {\n        const expression = this.parseExpression();\n\n        if (process.env.BABEL_8_BREAKING) {\n          if (\n            expression.type === \"SequenceExpression\" &&\n            !expression.extra?.parenthesized\n          ) {\n            this.raise(\n              JsxErrors.UnexpectedSequenceExpression,\n              expression.expressions[1],\n            );\n          }\n        }\n\n        node.expression = expression;\n      }\n      this.setContext(previousContext);\n      this.state.canStartJSXElement = true;\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"JSXExpressionContainer\");\n    }\n\n    // Parses following JSX attribute name-value pair.\n\n    jsxParseAttribute(): N.JSXAttribute | N.JSXSpreadAttribute {\n      const node = this.startNode<N.JSXAttribute | N.JSXSpreadAttribute>();\n      if (this.match(tt.braceL)) {\n        this.setContext(tc.brace);\n        this.next();\n        this.expect(tt.ellipsis);\n        node.argument = this.parseMaybeAssignAllowIn();\n        this.setContext(tc.j_oTag);\n        this.state.canStartJSXElement = true;\n        this.expect(tt.braceR);\n        return this.finishNode(node, \"JSXSpreadAttribute\");\n      }\n      node.name = this.jsxParseNamespacedName();\n      node.value = this.eat(tt.eq) ? this.jsxParseAttributeValue() : null;\n      return this.finishNode(node, \"JSXAttribute\");\n    }\n\n    // Parses JSX opening tag starting after \"<\".\n\n    jsxParseOpeningElementAt(\n      startLoc: Position,\n    ): N.JSXOpeningElement | N.JSXOpeningFragment {\n      const node = this.startNodeAt<N.JSXOpeningElement | N.JSXOpeningFragment>(\n        startLoc,\n      );\n      if (this.eat(tt.jsxTagEnd)) {\n        return this.finishNode(node, \"JSXOpeningFragment\");\n      }\n      node.name = this.jsxParseElementName();\n      return this.jsxParseOpeningElementAfterName(\n        node as Undone<N.JSXOpeningElement>,\n      );\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: Undone<N.JSXOpeningElement>,\n    ): N.JSXOpeningElement {\n      const attributes: (N.JSXAttribute | N.JSXSpreadAttribute)[] = [];\n      while (!this.match(tt.slash) && !this.match(tt.jsxTagEnd)) {\n        attributes.push(this.jsxParseAttribute());\n      }\n      node.attributes = attributes;\n      node.selfClosing = this.eat(tt.slash);\n      this.expect(tt.jsxTagEnd);\n      return this.finishNode(node, \"JSXOpeningElement\");\n    }\n\n    // Parses JSX closing tag starting after \"</\".\n\n    jsxParseClosingElementAt(\n      startLoc: Position,\n    ): N.JSXClosingElement | N.JSXClosingFragment {\n      const node = this.startNodeAt<N.JSXClosingFragment | N.JSXClosingElement>(\n        startLoc,\n      );\n      if (this.eat(tt.jsxTagEnd)) {\n        return this.finishNode(node, \"JSXClosingFragment\");\n      }\n      node.name = this.jsxParseElementName();\n      this.expect(tt.jsxTagEnd);\n      return this.finishNode(node, \"JSXClosingElement\");\n    }\n\n    // Parses entire JSX element, including it\"s opening tag\n    // (starting after \"<\"), attributes, contents and closing tag.\n\n    jsxParseElementAt(startLoc: Position): N.JSXElement | N.JSXFragment {\n      const node = this.startNodeAt<N.JSXElement | N.JSXFragment>(startLoc);\n      const children = [];\n      const openingElement = this.jsxParseOpeningElementAt(startLoc);\n      let closingElement = null;\n\n      if (!openingElement.selfClosing) {\n        contents: for (;;) {\n          switch (this.state.type) {\n            case tt.jsxTagStart:\n              startLoc = this.state.startLoc;\n              this.next();\n              if (this.eat(tt.slash)) {\n                closingElement = this.jsxParseClosingElementAt(startLoc);\n                break contents;\n              }\n              children.push(this.jsxParseElementAt(startLoc));\n              break;\n\n            case tt.jsxText:\n              children.push(this.parseLiteral(this.state.value, \"JSXText\"));\n              break;\n\n            case tt.braceL: {\n              const node = this.startNode<\n                N.JSXSpreadChild | N.JSXExpressionContainer\n              >();\n              this.setContext(tc.brace);\n              this.next();\n              if (this.match(tt.ellipsis)) {\n                children.push(this.jsxParseSpreadChild(node));\n              } else {\n                children.push(\n                  this.jsxParseExpressionContainer(node, tc.j_expr),\n                );\n              }\n\n              break;\n            }\n            // istanbul ignore next - should never happen\n            default:\n              this.unexpected();\n          }\n        }\n\n        if (\n          isFragment(openingElement) &&\n          !isFragment(closingElement) &&\n          closingElement !== null\n        ) {\n          this.raise(JsxErrors.MissingClosingTagFragment, closingElement);\n        } else if (!isFragment(openingElement) && isFragment(closingElement)) {\n          this.raise(JsxErrors.MissingClosingTagElement, closingElement, {\n            openingTagName: getQualifiedJSXName(openingElement.name),\n          });\n        } else if (!isFragment(openingElement) && !isFragment(closingElement)) {\n          if (\n            getQualifiedJSXName(closingElement.name) !==\n            getQualifiedJSXName(openingElement.name)\n          ) {\n            this.raise(JsxErrors.MissingClosingTagElement, closingElement, {\n              openingTagName: getQualifiedJSXName(openingElement.name),\n            });\n          }\n        }\n      }\n\n      if (isFragment(openingElement)) {\n        node.openingFragment = openingElement;\n        node.closingFragment = closingElement;\n      } else {\n        node.openingElement = openingElement;\n        node.closingElement = closingElement;\n      }\n      node.children = children;\n      if (this.match(tt.lt)) {\n        throw this.raise(\n          JsxErrors.UnwrappedAdjacentJSXElements,\n          this.state.startLoc,\n        );\n      }\n\n      return isFragment(openingElement)\n        ? this.finishNode(node, \"JSXFragment\")\n        : this.finishNode(node, \"JSXElement\");\n    }\n\n    // Parses entire JSX element from current position.\n\n    jsxParseElement(): N.JSXElement | N.JSXFragment {\n      const startLoc = this.state.startLoc;\n      this.next();\n      return this.jsxParseElementAt(startLoc);\n    }\n\n    setContext(newContext: TokContext) {\n      const { context } = this.state;\n      context[context.length - 1] = newContext;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    parseExprAtom(refExpressionErrors?: ExpressionErrors | null): N.Expression {\n      if (this.match(tt.jsxTagStart)) {\n        return this.jsxParseElement();\n      } else if (\n        this.match(tt.lt) &&\n        this.input.charCodeAt(this.state.pos) !== charCodes.exclamationMark\n      ) {\n        // In case we encounter an lt token here it will always be the start of\n        // jsx as the lt sign is not allowed in places that expect an expression\n        this.replaceToken(tt.jsxTagStart);\n        return this.jsxParseElement();\n      } else {\n        return super.parseExprAtom(refExpressionErrors);\n      }\n    }\n\n    skipSpace() {\n      const curContext = this.curContext();\n      if (!curContext.preserveSpace) super.skipSpace();\n    }\n\n    getTokenFromCode(code: number): void {\n      const context = this.curContext();\n\n      if (context === tc.j_expr) {\n        this.jsxReadToken();\n        return;\n      }\n\n      if (context === tc.j_oTag || context === tc.j_cTag) {\n        if (isIdentifierStart(code)) {\n          this.jsxReadWord();\n          return;\n        }\n\n        if (code === charCodes.greaterThan) {\n          ++this.state.pos;\n          this.finishToken(tt.jsxTagEnd);\n          return;\n        }\n\n        if (\n          (code === charCodes.quotationMark || code === charCodes.apostrophe) &&\n          context === tc.j_oTag\n        ) {\n          this.jsxReadString(code);\n          return;\n        }\n      }\n\n      if (\n        code === charCodes.lessThan &&\n        this.state.canStartJSXElement &&\n        this.input.charCodeAt(this.state.pos + 1) !== charCodes.exclamationMark\n      ) {\n        ++this.state.pos;\n        this.finishToken(tt.jsxTagStart);\n        return;\n      }\n\n      super.getTokenFromCode(code);\n    }\n\n    updateContext(prevType: TokenType): void {\n      const { context, type } = this.state;\n      if (type === tt.slash && prevType === tt.jsxTagStart) {\n        // do not consider JSX expr -> JSX open tag -> ... anymore\n        // reconsider as closing tag context\n        context.splice(-2, 2, tc.j_cTag);\n        this.state.canStartJSXElement = false;\n      } else if (type === tt.jsxTagStart) {\n        // start opening tag context\n        context.push(tc.j_oTag);\n      } else if (type === tt.jsxTagEnd) {\n        const out = context[context.length - 1];\n        if ((out === tc.j_oTag && prevType === tt.slash) || out === tc.j_cTag) {\n          context.pop();\n          this.state.canStartJSXElement =\n            context[context.length - 1] === tc.j_expr;\n        } else {\n          this.setContext(tc.j_expr);\n          this.state.canStartJSXElement = true;\n        }\n      } else {\n        this.state.canStartJSXElement = tokenComesBeforeExpression(type);\n      }\n    }\n  };\n", "import type { Position } from \"../../util/location.ts\";\nimport ScopeHandler, { NameType, Scope } from \"../../util/scope.ts\";\nimport { BindingFlag, ScopeFlag } from \"../../util/scopeflags.ts\";\nimport type * as N from \"../../types.ts\";\nimport { Errors } from \"../../parse-error.ts\";\n\nconst enum TsNameType {\n  Types = 1 << 0,\n  // enums (which are also in .types)\n  Enums = 1 << 1,\n  // const enums (which are also in .enums and .types)\n  ConstEnums = 1 << 2,\n  // classes (which are also in .lexical) and interface (which are also in .types)\n  Classes = 1 << 3,\n  // namespaces and ambient functions (or classes) are too difficult to track,\n  // especially without type analysis.\n  // We need to track them anyway, to avoid \"X is not defined\" errors\n  // when exporting them.\n  ExportOnlyBindings = 1 << 4,\n}\n\nclass TypeScriptScope extends Scope {\n  tsNames: Map<string, TsNameType> = new Map();\n}\n\n// See https://github.com/babel/babel/pull/9766#discussion_r268920730 for an\n// explanation of how typescript handles scope.\n\nexport default class TypeScriptScopeHandler extends ScopeHandler<TypeScriptScope> {\n  importsStack: Set<string>[] = [];\n\n  createScope(flags: ScopeFlag): TypeScriptScope {\n    this.importsStack.push(new Set()); // Always keep the top-level scope for export checks.\n\n    return new TypeScriptScope(flags);\n  }\n\n  enter(flags: ScopeFlag): void {\n    if (flags === ScopeFlag.TS_MODULE) {\n      this.importsStack.push(new Set());\n    }\n\n    super.enter(flags);\n  }\n\n  exit() {\n    const flags = super.exit();\n\n    if (flags === ScopeFlag.TS_MODULE) {\n      this.importsStack.pop();\n    }\n\n    return flags;\n  }\n\n  hasImport(name: string, allowShadow?: boolean) {\n    const len = this.importsStack.length;\n    if (this.importsStack[len - 1].has(name)) {\n      return true;\n    }\n    if (!allowShadow && len > 1) {\n      for (let i = 0; i < len - 1; i++) {\n        if (this.importsStack[i].has(name)) return true;\n      }\n    }\n    return false;\n  }\n\n  declareName(name: string, bindingType: BindingFlag, loc: Position) {\n    if (bindingType & BindingFlag.FLAG_TS_IMPORT) {\n      if (this.hasImport(name, true)) {\n        this.parser.raise(Errors.VarRedeclaration, loc, {\n          identifierName: name,\n        });\n      }\n      this.importsStack[this.importsStack.length - 1].add(name);\n      return;\n    }\n\n    const scope = this.currentScope();\n    let type = scope.tsNames.get(name) || 0;\n\n    if (bindingType & BindingFlag.FLAG_TS_EXPORT_ONLY) {\n      this.maybeExportDefined(scope, name);\n      scope.tsNames.set(name, type | TsNameType.ExportOnlyBindings);\n      return;\n    }\n\n    super.declareName(name, bindingType, loc);\n\n    if (bindingType & BindingFlag.KIND_TYPE) {\n      if (!(bindingType & BindingFlag.KIND_VALUE)) {\n        // \"Value\" bindings have already been registered by the superclass.\n        this.checkRedeclarationInScope(scope, name, bindingType, loc);\n        this.maybeExportDefined(scope, name);\n      }\n      type = type | TsNameType.Types;\n    }\n    if (bindingType & BindingFlag.FLAG_TS_ENUM) {\n      type = type | TsNameType.Enums;\n    }\n    if (bindingType & BindingFlag.FLAG_TS_CONST_ENUM) {\n      type = type | TsNameType.ConstEnums;\n    }\n    if (bindingType & BindingFlag.FLAG_CLASS) {\n      type = type | TsNameType.Classes;\n    }\n    if (type) scope.tsNames.set(name, type);\n  }\n\n  isRedeclaredInScope(\n    scope: TypeScriptScope,\n    name: string,\n    bindingType: BindingFlag,\n  ): boolean {\n    const type = scope.tsNames.get(name)!;\n    if ((type & TsNameType.Enums) > 0) {\n      if (bindingType & BindingFlag.FLAG_TS_ENUM) {\n        // Enums can be merged with other enums if they are both\n        //  const or both non-const.\n        const isConst = !!(bindingType & BindingFlag.FLAG_TS_CONST_ENUM);\n        const wasConst = (type & TsNameType.ConstEnums) > 0;\n        return isConst !== wasConst;\n      }\n      return true;\n    }\n    if (\n      bindingType & BindingFlag.FLAG_CLASS &&\n      (type & TsNameType.Classes) > 0\n    ) {\n      if (scope.names.get(name)! & NameType.Lexical) {\n        // Classes can be merged with interfaces\n        return !!(bindingType & BindingFlag.KIND_VALUE);\n      } else {\n        // Interface can be merged with other classes or interfaces\n        return false;\n      }\n    }\n    if (bindingType & BindingFlag.KIND_TYPE && (type & TsNameType.Types) > 0) {\n      return true;\n    }\n\n    return super.isRedeclaredInScope(scope, name, bindingType);\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    const { name } = id;\n\n    if (this.hasImport(name)) return;\n\n    const len = this.scopeStack.length;\n    for (let i = len - 1; i >= 0; i--) {\n      const scope = this.scopeStack[i];\n      const type = scope.tsNames.get(name)!;\n      if (\n        (type & TsNameType.Types) > 0 ||\n        (type & TsNameType.ExportOnlyBindings) > 0\n      ) {\n        return;\n      }\n    }\n\n    super.checkLocalExport(id);\n  }\n}\n", "// ProductionParameterHandler is a stack fashioned production parameter tracker\n// https://tc39.es/ecma262/#sec-grammar-notation\n// The tracked parameters are defined above.\n//\n// Whenever [+Await]/[+Yield] appears in the right-hand sides of a production,\n// we must enter a new tracking stack. For example when parsing\n//\n// AsyncFunctionDeclaration [Yield, Await]:\n//   async [no LineTerminator here] function BindingIdentifier[?Yield, ?Await]\n//     ( FormalParameters[~Yield, +Await] ) { AsyncFunctionBody }\n//\n// we must follow such process:\n//\n// 1. parse async keyword\n// 2. parse function keyword\n// 3. parse bindingIdentifier <= inherit current parameters: [?Await]\n// 4. enter new stack with (PARAM_AWAIT)\n// 5. parse formal parameters <= must have [Await] parameter [+Await]\n// 6. parse function body\n// 7. exit current stack\n\nexport const enum ParamKind {\n  // Initial Parameter flags\n  PARAM = 0b0000,\n  // track [Yield] production parameter\n  PARAM_YIELD = 0b0001,\n  // track [Await] production parameter\n  PARAM_AWAIT = 0b0010,\n  // track [Return] production parameter\n  PARAM_RETURN = 0b0100,\n  // track [In] production parameter\n  PARAM_IN = 0b1000,\n}\n\n// todo(flow->ts) - check if more granular type can be used,\n//  type below is not good because things like PARAM_AWAIT|PARAM_YIELD are not included\n// export type ParamKind =\n//   | typeof PARAM\n//   | typeof PARAM_AWAIT\n//   | typeof PARAM_IN\n//   | typeof PARAM_RETURN\n//   | typeof PARAM_YIELD;\n\nexport default class ProductionParameterHandler {\n  stacks: Array<ParamKind> = [];\n  enter(flags: ParamKind) {\n    this.stacks.push(flags);\n  }\n\n  exit() {\n    this.stacks.pop();\n  }\n\n  currentFlags(): ParamKind {\n    return this.stacks[this.stacks.length - 1];\n  }\n\n  get hasAwait(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_AWAIT) > 0;\n  }\n\n  get hasYield(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_YIELD) > 0;\n  }\n\n  get hasReturn(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_RETURN) > 0;\n  }\n\n  get hasIn(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_IN) > 0;\n  }\n}\n\nexport function functionFlags(\n  isAsync: boolean,\n  isGenerator: boolean,\n): ParamKind {\n  return (\n    (isAsync ? ParamKind.PARAM_AWAIT : 0) |\n    (isGenerator ? ParamKind.PARAM_YIELD : 0)\n  );\n}\n", "import type { OptionFlags, Options } from \"../options.ts\";\nimport type State from \"../tokenizer/state.ts\";\nimport type { PluginsMap } from \"./index.ts\";\nimport type ScopeHandler from \"../util/scope.ts\";\nimport type ExpressionScopeHandler from \"../util/expression-scope.ts\";\nimport type ClassScopeHandler from \"../util/class-scope.ts\";\nimport type ProductionParameterHandler from \"../util/production-parameter.ts\";\nimport type {\n  ParserPluginWithOptions,\n  PluginConfig,\n  PluginOptions,\n} from \"../typings.ts\";\nimport type * as N from \"../types.ts\";\n\nexport default class BaseParser {\n  // Properties set by constructor in index.js\n  declare options: Options;\n  declare optionFlags: OptionFlags;\n  declare inModule: boolean;\n  declare scope: ScopeHandler<any>;\n  declare classScope: ClassScopeHandler;\n  declare prodParam: ProductionParameterHandler;\n  declare expressionScope: ExpressionScopeHandler;\n  declare plugins: PluginsMap;\n  declare filename: string | undefined | null;\n  declare startIndex: number;\n  // Names of exports store. `default` is stored as a name for both\n  // `export default foo;` and `export { foo as default };`.\n  declare exportedIdentifiers: Set<string>;\n  sawUnambiguousESM: boolean = false;\n  ambiguousScriptDifferentAst: boolean = false;\n\n  // Initialized by Tokenizer\n  declare state: State;\n  // input and length are not in state as they are constant and we do\n  // not want to ever copy them, which happens if state gets cloned\n  declare input: string;\n  declare length: number;\n  // Comment store for Program.comments\n  declare comments: Array<N.Comment>;\n\n  sourceToOffsetPos(sourcePos: number) {\n    return sourcePos + this.startIndex;\n  }\n\n  offsetToSourcePos(offsetPos: number) {\n    return offsetPos - this.startIndex;\n  }\n\n  // This method accepts either a string (plugin name) or an array pair\n  // (plugin name and options object). If an options object is given,\n  // then each value is non-recursively checked for identity with that\n  // plugin’s actual option value.\n  hasPlugin(pluginConfig: PluginConfig): boolean {\n    if (typeof pluginConfig === \"string\") {\n      return this.plugins.has(pluginConfig);\n    } else {\n      const [pluginName, pluginOptions] = pluginConfig;\n      if (!this.hasPlugin(pluginName)) {\n        return false;\n      }\n      const actualOptions = this.plugins.get(pluginName);\n      for (const key of Object.keys(\n        pluginOptions,\n      ) as (keyof typeof pluginOptions)[]) {\n        if (actualOptions?.[key] !== pluginOptions[key]) {\n          return false;\n        }\n      }\n      return true;\n    }\n  }\n\n  getPluginOption<\n    PluginName extends ParserPluginWithOptions[0],\n    OptionName extends keyof PluginOptions<PluginName>,\n  >(plugin: PluginName, name: OptionName) {\n    return (this.plugins.get(plugin) as null | PluginOptions<PluginName>)?.[\n      name\n    ];\n  }\n}\n", "/*:: declare var invariant; */\n\nimport BaseParser from \"./base.ts\";\nimport type { Comment, Node } from \"../types.ts\";\nimport * as charCodes from \"charcodes\";\nimport type { Undone } from \"./node.ts\";\n\n/**\n * A whitespace token containing comments\n */\nexport type CommentWhitespace = {\n  /**\n   * the start of the whitespace token.\n   */\n  start: number;\n  /**\n   * the end of the whitespace token.\n   */\n  end: number;\n  /**\n   * the containing comments\n   */\n  comments: Array<Comment>;\n  /**\n   * the immediately preceding AST node of the whitespace token\n   */\n  leadingNode: Node | null;\n  /**\n   * the immediately following AST node of the whitespace token\n   */\n  trailingNode: Node | null;\n  /**\n   * the innermost AST node containing the whitespace with minimal size (|end - start|)\n   */\n  containingNode: Node | null;\n};\n\n/**\n * Merge comments with node's trailingComments or assign comments to be\n * trailingComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nfunction setTrailingComments(node: Undone<Node>, comments: Array<Comment>) {\n  if (node.trailingComments === undefined) {\n    node.trailingComments = comments;\n  } else {\n    node.trailingComments.unshift(...comments);\n  }\n}\n\n/**\n * Merge comments with node's leadingComments or assign comments to be\n * leadingComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nfunction setLeadingComments(node: Undone<Node>, comments: Array<Comment>) {\n  if (node.leadingComments === undefined) {\n    node.leadingComments = comments;\n  } else {\n    node.leadingComments.unshift(...comments);\n  }\n}\n\n/**\n * Merge comments with node's innerComments or assign comments to be\n * innerComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nexport function setInnerComments(node: Undone<Node>, comments: Array<Comment>) {\n  if (node.innerComments === undefined) {\n    node.innerComments = comments;\n  } else {\n    node.innerComments.unshift(...comments);\n  }\n}\n\n/**\n * Given node and elements array, if elements has non-null element,\n * merge comments to its trailingComments, otherwise merge comments\n * to node's innerComments\n */\nfunction adjustInnerComments(\n  node: Undone<Node>,\n  elements: Array<Node | null>,\n  commentWS: CommentWhitespace,\n) {\n  let lastElement = null;\n  let i = elements.length;\n  while (lastElement === null && i > 0) {\n    lastElement = elements[--i];\n  }\n  if (lastElement === null || lastElement.start > commentWS.start) {\n    setInnerComments(node, commentWS.comments);\n  } else {\n    setTrailingComments(lastElement, commentWS.comments);\n  }\n}\n\nexport default class CommentsParser extends BaseParser {\n  addComment(comment: Comment): void {\n    if (this.filename) comment.loc.filename = this.filename;\n    const { commentsLen } = this.state;\n    if (this.comments.length !== commentsLen) {\n      this.comments.length = commentsLen;\n    }\n    this.comments.push(comment);\n    this.state.commentsLen++;\n  }\n\n  /**\n   * Given a newly created AST node _n_, attach _n_ to a comment whitespace _w_ if applicable\n   * {@see {@link CommentWhitespace}}\n   */\n  processComment(node: Node): void {\n    const { commentStack } = this.state;\n    const commentStackLength = commentStack.length;\n    if (commentStackLength === 0) return;\n    let i = commentStackLength - 1;\n    const lastCommentWS = commentStack[i];\n\n    if (lastCommentWS.start === node.end) {\n      lastCommentWS.leadingNode = node;\n      i--;\n    }\n\n    const { start: nodeStart } = node;\n    // invariant: for all 0 <= j <= i, let c = commentStack[j], c must satisfy c.end < node.end\n    for (; i >= 0; i--) {\n      const commentWS = commentStack[i];\n      const commentEnd = commentWS.end;\n      if (commentEnd > nodeStart) {\n        // by definition of commentWhiteSpace, this implies commentWS.start > nodeStart\n        // so node can be a containingNode candidate. At this time we can finalize the comment\n        // whitespace, because\n        // 1) its leadingNode or trailingNode, if exists, will not change\n        // 2) its containingNode have been assigned and will not change because it is the\n        //    innermost minimal-sized AST node\n        commentWS.containingNode = node;\n        this.finalizeComment(commentWS);\n        commentStack.splice(i, 1);\n      } else {\n        if (commentEnd === nodeStart) {\n          commentWS.trailingNode = node;\n        }\n        // stop the loop when commentEnd <= nodeStart\n        break;\n      }\n    }\n  }\n\n  /**\n   * Assign the comments of comment whitespaces to related AST nodes.\n   * Also adjust innerComments following trailing comma.\n   */\n  finalizeComment(commentWS: CommentWhitespace) {\n    const { comments } = commentWS;\n    if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) {\n      if (commentWS.leadingNode !== null) {\n        setTrailingComments(commentWS.leadingNode, comments);\n      }\n      if (commentWS.trailingNode !== null) {\n        setLeadingComments(commentWS.trailingNode, comments);\n      }\n    } else {\n      /*:: invariant(commentWS.containingNode !== null) */\n      const node = commentWS.containingNode!;\n      const commentStart = commentWS.start;\n      if (\n        this.input.charCodeAt(this.offsetToSourcePos(commentStart) - 1) ===\n        charCodes.comma\n      ) {\n        // If a commentWhitespace follows a comma and the containingNode allows\n        // list structures with trailing comma, merge it to the trailingComment\n        // of the last non-null list element\n        switch (node.type) {\n          case \"ObjectExpression\":\n          case \"ObjectPattern\":\n          case \"RecordExpression\":\n            adjustInnerComments(node, node.properties, commentWS);\n            break;\n          case \"CallExpression\":\n          case \"OptionalCallExpression\":\n            adjustInnerComments(node, node.arguments, commentWS);\n            break;\n          case \"ImportExpression\":\n            adjustInnerComments(\n              node,\n              [node.source, node.options ?? null],\n              commentWS,\n            );\n            break;\n          case \"FunctionDeclaration\":\n          case \"FunctionExpression\":\n          case \"ArrowFunctionExpression\":\n          case \"ObjectMethod\":\n          case \"ClassMethod\":\n          case \"ClassPrivateMethod\":\n            adjustInnerComments(node, node.params, commentWS);\n            break;\n          case \"ArrayExpression\":\n          case \"ArrayPattern\":\n          case \"TupleExpression\":\n            adjustInnerComments(node, node.elements, commentWS);\n            break;\n          case \"ExportNamedDeclaration\":\n          case \"ImportDeclaration\":\n            adjustInnerComments(node, node.specifiers, commentWS);\n            break;\n          case \"TSEnumDeclaration\":\n            if (!process.env.BABEL_8_BREAKING) {\n              adjustInnerComments(node, node.members!, commentWS);\n            } else {\n              setInnerComments(node, comments);\n            }\n            break;\n          case \"TSEnumBody\":\n            adjustInnerComments(node, node.members, commentWS);\n            break;\n          default: {\n            setInnerComments(node, comments);\n          }\n        }\n      } else {\n        setInnerComments(node, comments);\n      }\n    }\n  }\n\n  /**\n   * Drains remaining commentStack and applies finalizeComment\n   * to each comment whitespace. Used only in parseExpression\n   * where the top level AST node is _not_ Program\n   * {@see {@link CommentsParser#finalizeComment}}\n   */\n  finalizeRemainingComments() {\n    const { commentStack } = this.state;\n    for (let i = commentStack.length - 1; i >= 0; i--) {\n      this.finalizeComment(commentStack[i]);\n    }\n    this.state.commentStack = [];\n  }\n\n  /* eslint-disable no-irregular-whitespace */\n  /**\n   * Reset previous node trailing comments. Used in object / class\n   * property parsing. We parse `async`, `static`, `set` and `get`\n   * as an identifier but may reinterpret it into an async/static/accessor\n   * method later. In this case the identifier is not part of the AST and we\n   * should sync the knowledge to commentStacks\n   *\n   * For example, when parsing\n   * ```\n   * async /* 1 *​/ function f() {}\n   * ```\n   * the comment whitespace `/* 1 *​/` has leading node Identifier(async). When\n   * we see the function token, we create a Function node and mark `/* 1 *​/` as\n   * inner comments. So `/* 1 *​/` should be detached from the Identifier node.\n   *\n   * @param node the last finished AST node _before_ current token\n   */\n  /* eslint-enable no-irregular-whitespace */\n  resetPreviousNodeTrailingComments(node: Node) {\n    const { commentStack } = this.state;\n    const { length } = commentStack;\n    if (length === 0) return;\n    const commentWS = commentStack[length - 1];\n    if (commentWS.leadingNode === node) {\n      commentWS.leadingNode = null;\n    }\n  }\n\n  /**\n   * Attach a node to the comment whitespaces right before/after\n   * the given range.\n   *\n   * This is used to properly attach comments around parenthesized\n   * expressions as leading/trailing comments of the inner expression.\n   */\n  takeSurroundingComments(node: Node, start: number, end: number) {\n    const { commentStack } = this.state;\n    const commentStackLength = commentStack.length;\n    if (commentStackLength === 0) return;\n    let i = commentStackLength - 1;\n\n    for (; i >= 0; i--) {\n      const commentWS = commentStack[i];\n      const commentEnd = commentWS.end;\n      const commentStart = commentWS.start;\n\n      if (commentStart === end) {\n        commentWS.leadingNode = node;\n      } else if (commentEnd === start) {\n        commentWS.trailingNode = node;\n      } else if (commentEnd < start) {\n        break;\n      }\n    }\n  }\n}\n", "import type { OptionsWithDefaults } from \"../options.ts\";\nimport type { CommentWhitespace } from \"../parser/comments\";\nimport { Position } from \"../util/location.ts\";\n\nimport { types as ct, type TokContext } from \"./context.ts\";\nimport { tt, type TokenType } from \"./types.ts\";\nimport type { Errors } from \"../parse-error.ts\";\nimport type { ParseError } from \"../parse-error.ts\";\n\nexport type DeferredStrictError =\n  | typeof Errors.StrictNumericEscape\n  | typeof Errors.StrictOctalLiteral;\n\ntype TopicContextState = {\n  // When a topic binding has been currently established,\n  // then this is 1. Otherwise, it is 0. This is forwards compatible\n  // with a future plugin for multiple lexical topics.\n  maxNumOfResolvableTopics: number;\n  // When a topic binding has been currently established, and if that binding\n  // has been used as a topic reference `#`, then this is 0. Otherwise, it is\n  // `null`. This is forwards compatible with a future plugin for multiple\n  // lexical topics.\n  maxTopicIndex: null | 0;\n};\n\nexport const enum LoopLabelKind {\n  Loop = 1,\n  Switch = 2,\n}\n\ndeclare const bit: import(\"../../../../scripts/babel-plugin-bit-decorator/types.d.ts\").BitDecorator<State>;\n\nexport default class State {\n  @bit.storage flags: number = 0;\n\n  @bit accessor strict = false;\n\n  startIndex!: number;\n  curLine!: number;\n  lineStart!: number;\n\n  // And, if locations are used, the {line, column} object\n  // corresponding to those offsets\n  startLoc!: Position;\n  endLoc!: Position;\n\n  init({\n    strictMode,\n    sourceType,\n    startIndex,\n    startLine,\n    startColumn,\n  }: OptionsWithDefaults): void {\n    this.strict =\n      strictMode === false\n        ? false\n        : strictMode === true\n          ? true\n          : sourceType === \"module\";\n\n    this.startIndex = startIndex;\n    this.curLine = startLine;\n    this.lineStart = -startColumn;\n    this.startLoc = this.endLoc = new Position(\n      startLine,\n      startColumn,\n      startIndex,\n    );\n  }\n\n  errors: ParseError<any>[] = [];\n\n  // Used to signify the start of a potential arrow function\n  potentialArrowAt: number = -1;\n\n  // Used to signify the start of an expression which looks like a\n  // typed arrow function, but it isn't\n  // e.g. a ? (b) : c => d\n  //          ^\n  noArrowAt: number[] = [];\n\n  // Used to signify the start of an expression whose params, if it looks like\n  // an arrow function, shouldn't be converted to assignable nodes.\n  // This is used to defer the validation of typed arrow functions inside\n  // conditional expressions.\n  // e.g. a ? (b) : c => d\n  //          ^\n  noArrowParamsConversionAt: number[] = [];\n\n  // Flags to track\n  @bit accessor maybeInArrowParameters = false;\n  @bit accessor inType = false;\n  @bit accessor noAnonFunctionType = false;\n  @bit accessor hasFlowComment = false;\n  @bit accessor isAmbientContext = false;\n  @bit accessor inAbstractClass = false;\n  @bit accessor inDisallowConditionalTypesContext = false;\n\n  // For the Hack-style pipelines plugin\n  topicContext: TopicContextState = {\n    maxNumOfResolvableTopics: 0,\n    maxTopicIndex: null,\n  };\n\n  // For the F#-style pipelines plugin\n  @bit accessor soloAwait = false;\n  @bit accessor inFSharpPipelineDirectBody = false;\n\n  // Labels in scope.\n  labels: Array<{\n    kind: LoopLabelKind | null;\n    name?: string | null;\n    statementStart?: number;\n  }> = [];\n\n  commentsLen = 0;\n  // Comment attachment store\n  commentStack: Array<CommentWhitespace> = [];\n\n  // The current position of the tokenizer in the input.\n  pos: number = 0;\n\n  // Properties of the current token:\n  // Its type\n  type: TokenType = tt.eof;\n\n  // For tokens that include more information than their type, the value\n  value: any = null;\n\n  // Its start and end offset\n  start: number = 0;\n  end: number = 0;\n\n  // Position information for the previous token\n  // this is initialized when generating the second token.\n  lastTokEndLoc: Position | null = null;\n  // this is initialized when generating the second token.\n  lastTokStartLoc: Position | null = null;\n\n  // The context stack is used to track whether the apostrophe \"`\" starts\n  // or ends a string template\n  context: Array<TokContext> = [ct.brace];\n\n  // Used to track whether a JSX element is allowed to form\n  @bit accessor canStartJSXElement = true;\n\n  // Used to signal to callers of `readWord1` whether the word\n  // contained any escape sequences. This is needed because words with\n  // escape sequences must not be interpreted as keywords.\n  @bit accessor containsEsc = false;\n\n  // Used to track invalid escape sequences in template literals,\n  // that must be reported if the template is not tagged.\n  firstInvalidTemplateEscapePos: null | Position = null;\n\n  @bit accessor hasTopLevelAwait = false;\n\n  // This property is used to track the following errors\n  // - StrictNumericEscape\n  // - StrictOctalLiteral\n  //\n  // in a literal that occurs prior to/immediately after a \"use strict\" directive.\n\n  // todo(JLHwung): set strictErrors to null and avoid recording string errors\n  // after a non-directive is parsed\n  strictErrors: Map<number, [DeferredStrictError, Position]> = new Map();\n\n  // Tokens length in token store\n  tokensLength: number = 0;\n\n  /**\n   * When we add a new property, we must manually update the `clone` method\n   * @see State#clone\n   */\n\n  curPosition(): Position {\n    return new Position(\n      this.curLine,\n      this.pos - this.lineStart,\n      this.pos + this.startIndex,\n    );\n  }\n\n  clone(): State {\n    const state = new State();\n    state.flags = this.flags;\n    state.startIndex = this.startIndex;\n    state.curLine = this.curLine;\n    state.lineStart = this.lineStart;\n    state.startLoc = this.startLoc;\n    state.endLoc = this.endLoc;\n    state.errors = this.errors.slice();\n    state.potentialArrowAt = this.potentialArrowAt;\n    state.noArrowAt = this.noArrowAt.slice();\n    state.noArrowParamsConversionAt = this.noArrowParamsConversionAt.slice();\n    state.topicContext = this.topicContext;\n    state.labels = this.labels.slice();\n    state.commentsLen = this.commentsLen;\n    state.commentStack = this.commentStack.slice();\n    state.pos = this.pos;\n    state.type = this.type;\n    state.value = this.value;\n    state.start = this.start;\n    state.end = this.end;\n    state.lastTokEndLoc = this.lastTokEndLoc;\n    state.lastTokStartLoc = this.lastTokStartLoc;\n    state.context = this.context.slice();\n    state.firstInvalidTemplateEscapePos = this.firstInvalidTemplateEscapePos;\n    state.strictErrors = this.strictErrors;\n    state.tokensLength = this.tokensLength;\n\n    return state;\n  }\n}\n\nexport type LookaheadState = {\n  pos: number;\n  value: any;\n  type: TokenType;\n  start: number;\n  end: number;\n  context: TokContext[];\n  startLoc: Position;\n  lastTokEndLoc: Position | null;\n  curLine: number;\n  lineStart: number;\n  curPosition: State[\"curPosition\"];\n  /* Used only in readToken_mult_modulo */\n  inType: boolean;\n  // These boolean properties are not initialized in createLookaheadState()\n  // instead they will only be set by the tokenizer\n  containsEsc?: boolean;\n};\n", "// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\n// The following character codes are forbidden from being\n// an immediate sibling of NumericLiteralSeparator _\nconst forbiddenNumericSeparatorSiblings = {\n  decBinOct: new Set<number>([\n    charCodes.dot,\n    charCodes.uppercaseB,\n    charCodes.uppercaseE,\n    charCodes.uppercaseO,\n    charCodes.underscore, // multiple separators are not allowed\n    charCodes.lowercaseB,\n    charCodes.lowercaseE,\n    charCodes.lowercaseO,\n  ]),\n  hex: new Set<number>([\n    charCodes.dot,\n    charCodes.uppercaseX,\n    charCodes.underscore, // multiple separators are not allowed\n    charCodes.lowercaseX,\n  ]),\n};\n\nconst isAllowedNumericSeparatorSibling = {\n  // 0 - 1\n  bin: (ch: number) => ch === charCodes.digit0 || ch === charCodes.digit1,\n\n  // 0 - 7\n  oct: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit7,\n\n  // 0 - 9\n  dec: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit9,\n\n  // 0 - 9, A - F, a - f,\n  hex: (ch: number) =>\n    (ch >= charCodes.digit0 && ch <= charCodes.digit9) ||\n    (ch >= charCodes.uppercaseA && ch <= charCodes.uppercaseF) ||\n    (ch >= charCodes.lowercaseA && ch <= charCodes.lowercaseF),\n};\n\nexport type StringContentsErrorHandlers = EscapedCharErrorHandlers & {\n  unterminated(\n    initialPos: number,\n    initialLineStart: number,\n    initialCurLine: number,\n  ): void;\n};\n\nexport function readStringContents(\n  type: \"single\" | \"double\" | \"template\",\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  errors: StringContentsErrorHandlers,\n) {\n  const initialPos = pos;\n  const initialLineStart = lineStart;\n  const initialCurLine = curLine;\n\n  let out = \"\";\n  let firstInvalidLoc = null;\n  let chunkStart = pos;\n  const { length } = input;\n  for (;;) {\n    if (pos >= length) {\n      errors.unterminated(initialPos, initialLineStart, initialCurLine);\n      out += input.slice(chunkStart, pos);\n      break;\n    }\n    const ch = input.charCodeAt(pos);\n    if (isStringEnd(type, ch, input, pos)) {\n      out += input.slice(chunkStart, pos);\n      break;\n    }\n    if (ch === charCodes.backslash) {\n      out += input.slice(chunkStart, pos);\n      const res = readEscapedChar(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        type === \"template\",\n        errors,\n      );\n      if (res.ch === null && !firstInvalidLoc) {\n        firstInvalidLoc = { pos, lineStart, curLine };\n      } else {\n        out += res.ch;\n      }\n      ({ pos, lineStart, curLine } = res);\n      chunkStart = pos;\n    } else if (\n      ch === charCodes.lineSeparator ||\n      ch === charCodes.paragraphSeparator\n    ) {\n      ++pos;\n      ++curLine;\n      lineStart = pos;\n    } else if (ch === charCodes.lineFeed || ch === charCodes.carriageReturn) {\n      if (type === \"template\") {\n        out += input.slice(chunkStart, pos) + \"\\n\";\n        ++pos;\n        if (\n          ch === charCodes.carriageReturn &&\n          input.charCodeAt(pos) === charCodes.lineFeed\n        ) {\n          ++pos;\n        }\n        ++curLine;\n        chunkStart = lineStart = pos;\n      } else {\n        errors.unterminated(initialPos, initialLineStart, initialCurLine);\n      }\n    } else {\n      ++pos;\n    }\n  }\n  return process.env.BABEL_8_BREAKING\n    ? { pos, str: out, firstInvalidLoc, lineStart, curLine }\n    : {\n        pos,\n        str: out,\n        firstInvalidLoc,\n        lineStart,\n        curLine,\n        containsInvalid: !!firstInvalidLoc,\n      };\n}\n\nfunction isStringEnd(\n  type: \"single\" | \"double\" | \"template\",\n  ch: number,\n  input: string,\n  pos: number,\n) {\n  if (type === \"template\") {\n    return (\n      ch === charCodes.graveAccent ||\n      (ch === charCodes.dollarSign &&\n        input.charCodeAt(pos + 1) === charCodes.leftCurlyBrace)\n    );\n  }\n  return (\n    ch === (type === \"double\" ? charCodes.quotationMark : charCodes.apostrophe)\n  );\n}\n\ntype EscapedCharErrorHandlers = HexCharErrorHandlers &\n  CodePointErrorHandlers & {\n    strictNumericEscape(pos: number, lineStart: number, curLine: number): void;\n  };\n\nfunction readEscapedChar(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  inTemplate: boolean,\n  errors: EscapedCharErrorHandlers,\n) {\n  const throwOnInvalid = !inTemplate;\n  pos++; // skip '\\'\n\n  const res = (ch: string | null) => ({ pos, ch, lineStart, curLine });\n\n  const ch = input.charCodeAt(pos++);\n  switch (ch) {\n    case charCodes.lowercaseN:\n      return res(\"\\n\");\n    case charCodes.lowercaseR:\n      return res(\"\\r\");\n    case charCodes.lowercaseX: {\n      let code;\n      ({ code, pos } = readHexChar(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        2,\n        false,\n        throwOnInvalid,\n        errors,\n      ));\n      return res(code === null ? null : String.fromCharCode(code));\n    }\n    case charCodes.lowercaseU: {\n      let code;\n      ({ code, pos } = readCodePoint(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        throwOnInvalid,\n        errors,\n      ));\n      return res(code === null ? null : String.fromCodePoint(code));\n    }\n    case charCodes.lowercaseT:\n      return res(\"\\t\");\n    case charCodes.lowercaseB:\n      return res(\"\\b\");\n    case charCodes.lowercaseV:\n      return res(\"\\u000b\");\n    case charCodes.lowercaseF:\n      return res(\"\\f\");\n    case charCodes.carriageReturn:\n      if (input.charCodeAt(pos) === charCodes.lineFeed) {\n        ++pos;\n      }\n    // fall through\n    case charCodes.lineFeed:\n      lineStart = pos;\n      ++curLine;\n    // fall through\n    case charCodes.lineSeparator:\n    case charCodes.paragraphSeparator:\n      return res(\"\");\n    case charCodes.digit8:\n    case charCodes.digit9:\n      if (inTemplate) {\n        return res(null);\n      } else {\n        errors.strictNumericEscape(pos - 1, lineStart, curLine);\n      }\n    // fall through\n    default:\n      if (ch >= charCodes.digit0 && ch <= charCodes.digit7) {\n        const startPos = pos - 1;\n        const match = /^[0-7]+/.exec(input.slice(startPos, pos + 2));\n\n        let octalStr = match[0];\n\n        let octal = parseInt(octalStr, 8);\n        if (octal > 255) {\n          octalStr = octalStr.slice(0, -1);\n          octal = parseInt(octalStr, 8);\n        }\n        pos += octalStr.length - 1;\n        const next = input.charCodeAt(pos);\n        if (\n          octalStr !== \"0\" ||\n          next === charCodes.digit8 ||\n          next === charCodes.digit9\n        ) {\n          if (inTemplate) {\n            return res(null);\n          } else {\n            errors.strictNumericEscape(startPos, lineStart, curLine);\n          }\n        }\n\n        return res(String.fromCharCode(octal));\n      }\n\n      return res(String.fromCharCode(ch));\n  }\n}\n\ntype HexCharErrorHandlers = IntErrorHandlers & {\n  invalidEscapeSequence(pos: number, lineStart: number, curLine: number): void;\n};\n\n// Used to read character escape sequences ('\\x', '\\u').\nfunction readHexChar(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  len: number,\n  forceLen: boolean,\n  throwOnInvalid: boolean,\n  errors: HexCharErrorHandlers,\n) {\n  const initialPos = pos;\n  let n;\n  ({ n, pos } = readInt(\n    input,\n    pos,\n    lineStart,\n    curLine,\n    16,\n    len,\n    forceLen,\n    false,\n    errors,\n    /* bailOnError */ !throwOnInvalid,\n  ));\n  if (n === null) {\n    if (throwOnInvalid) {\n      errors.invalidEscapeSequence(initialPos, lineStart, curLine);\n    } else {\n      pos = initialPos - 1;\n    }\n  }\n  return { code: n, pos };\n}\n\nexport type IntErrorHandlers = {\n  numericSeparatorInEscapeSequence(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n  ): void;\n  unexpectedNumericSeparator(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n  ): void;\n  // It can return \"true\" to indicate that the error was handled\n  // and the int parsing should continue.\n  invalidDigit(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n    radix: number,\n  ): boolean;\n};\n\nexport function readInt(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  radix: number,\n  len: number | undefined,\n  forceLen: boolean,\n  allowNumSeparator: boolean | \"bail\",\n  errors: IntErrorHandlers,\n  bailOnError: boolean,\n) {\n  const start = pos;\n  const forbiddenSiblings =\n    radix === 16\n      ? forbiddenNumericSeparatorSiblings.hex\n      : forbiddenNumericSeparatorSiblings.decBinOct;\n  const isAllowedSibling =\n    radix === 16\n      ? isAllowedNumericSeparatorSibling.hex\n      : radix === 10\n        ? isAllowedNumericSeparatorSibling.dec\n        : radix === 8\n          ? isAllowedNumericSeparatorSibling.oct\n          : isAllowedNumericSeparatorSibling.bin;\n\n  let invalid = false;\n  let total = 0;\n\n  for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n    const code = input.charCodeAt(pos);\n    let val;\n\n    if (code === charCodes.underscore && allowNumSeparator !== \"bail\") {\n      const prev = input.charCodeAt(pos - 1);\n      const next = input.charCodeAt(pos + 1);\n\n      if (!allowNumSeparator) {\n        if (bailOnError) return { n: null, pos };\n        errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine);\n      } else if (\n        Number.isNaN(next) ||\n        !isAllowedSibling(next) ||\n        forbiddenSiblings.has(prev) ||\n        forbiddenSiblings.has(next)\n      ) {\n        if (bailOnError) return { n: null, pos };\n        errors.unexpectedNumericSeparator(pos, lineStart, curLine);\n      }\n\n      // Ignore this _ character\n      ++pos;\n      continue;\n    }\n\n    if (code >= charCodes.lowercaseA) {\n      val = code - charCodes.lowercaseA + charCodes.lineFeed;\n    } else if (code >= charCodes.uppercaseA) {\n      val = code - charCodes.uppercaseA + charCodes.lineFeed;\n    } else if (charCodes.isDigit(code)) {\n      val = code - charCodes.digit0; // 0-9\n    } else {\n      val = Infinity;\n    }\n    if (val >= radix) {\n      // If we found a digit which is too big, errors.invalidDigit can return true to avoid\n      // breaking the loop (this is used for error recovery).\n      if (val <= 9 && bailOnError) {\n        return { n: null, pos };\n      } else if (\n        val <= 9 &&\n        errors.invalidDigit(pos, lineStart, curLine, radix)\n      ) {\n        val = 0;\n      } else if (forceLen) {\n        val = 0;\n        invalid = true;\n      } else {\n        break;\n      }\n    }\n    ++pos;\n    total = total * radix + val;\n  }\n  if (pos === start || (len != null && pos - start !== len) || invalid) {\n    return { n: null, pos };\n  }\n\n  return { n: total, pos };\n}\n\nexport type CodePointErrorHandlers = HexCharErrorHandlers & {\n  invalidCodePoint(pos: number, lineStart: number, curLine: number): void;\n};\n\nexport function readCodePoint(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  throwOnInvalid: boolean,\n  errors: CodePointErrorHandlers,\n) {\n  const ch = input.charCodeAt(pos);\n  let code;\n\n  if (ch === charCodes.leftCurlyBrace) {\n    ++pos;\n    ({ code, pos } = readHexChar(\n      input,\n      pos,\n      lineStart,\n      curLine,\n      input.indexOf(\"}\", pos) - pos,\n      true,\n      throwOnInvalid,\n      errors,\n    ));\n    ++pos;\n    if (code !== null && code > 0x10ffff) {\n      if (throwOnInvalid) {\n        errors.invalidCodePoint(pos, lineStart, curLine);\n      } else {\n        return { code: null, pos };\n      }\n    }\n  } else {\n    ({ code, pos } = readHexChar(\n      input,\n      pos,\n      lineStart,\n      curLine,\n      4,\n      false,\n      throwOnInvalid,\n      errors,\n    ));\n  }\n  return { code, pos };\n}\n", "/*:: declare var invariant; */\n\nimport type { OptionsWithDefaults } from \"../options.ts\";\nimport { OptionFlags } from \"../options.ts\";\nimport {\n  Position,\n  SourceLocation,\n  createPositionWithColumnOffset,\n} from \"../util/location.ts\";\nimport CommentsParser, { type CommentWhitespace } from \"../parser/comments.ts\";\nimport type * as N from \"../types.ts\";\nimport * as charCodes from \"charcodes\";\nimport { isIdentifierStart, isIdentifierChar } from \"../util/identifier.ts\";\nimport {\n  tokenIsKeyword,\n  tokenLabelName,\n  tt,\n  keywords as keywordTypes,\n  type TokenType,\n} from \"./types.ts\";\nimport type { TokContext } from \"./context.ts\";\nimport {\n  Errors,\n  type ParseError,\n  type ParseErrorConstructor,\n} from \"../parse-error.ts\";\nimport {\n  lineBreakG,\n  isNewLine,\n  isWhitespace,\n  skipWhiteSpace,\n  skipWhiteSpaceInLine,\n} from \"../util/whitespace.ts\";\nimport State from \"./state.ts\";\nimport type { LookaheadState, DeferredStrictError } from \"./state.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { Node } from \"../types.ts\";\n\nimport {\n  readInt,\n  readCodePoint,\n  readStringContents,\n  type IntErrorHandlers,\n  type CodePointErrorHandlers,\n  type StringContentsErrorHandlers,\n} from \"@babel/helper-string-parser\";\n\nimport type { Plugin } from \"../typings.ts\";\n\nfunction buildPosition(pos: number, lineStart: number, curLine: number) {\n  return new Position(curLine, pos - lineStart, pos);\n}\n\nconst VALID_REGEX_FLAGS = new Set([\n  charCodes.lowercaseG,\n  charCodes.lowercaseM,\n  charCodes.lowercaseS,\n  charCodes.lowercaseI,\n  charCodes.lowercaseY,\n  charCodes.lowercaseU,\n  charCodes.lowercaseD,\n  charCodes.lowercaseV,\n]);\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nexport class Token {\n  constructor(state: State) {\n    const startIndex = state.startIndex || 0;\n    this.type = state.type;\n    this.value = state.value;\n    this.start = startIndex + state.start;\n    this.end = startIndex + state.end;\n    this.loc = new SourceLocation(state.startLoc, state.endLoc);\n  }\n\n  declare type: TokenType;\n  declare value: any;\n  declare start: number;\n  declare end: number;\n  declare loc: SourceLocation;\n}\n\n// ## Tokenizer\n\nexport default abstract class Tokenizer extends CommentsParser {\n  isLookahead: boolean;\n\n  // Token store.\n  tokens: Array<Token | N.Comment> = [];\n\n  constructor(options: OptionsWithDefaults, input: string) {\n    super();\n    this.state = new State();\n    this.state.init(options);\n    this.input = input;\n    this.length = input.length;\n    this.comments = [];\n    this.isLookahead = false;\n  }\n\n  pushToken(token: Token | N.Comment) {\n    // Pop out invalid tokens trapped by try-catch parsing.\n    // Those parsing branches are mainly created by typescript and flow plugins.\n    this.tokens.length = this.state.tokensLength;\n    this.tokens.push(token);\n    ++this.state.tokensLength;\n  }\n\n  // Move to the next token\n\n  next(): void {\n    this.checkKeywordEscapes();\n    if (this.optionFlags & OptionFlags.Tokens) {\n      this.pushToken(new Token(this.state));\n    }\n\n    this.state.lastTokEndLoc = this.state.endLoc;\n    this.state.lastTokStartLoc = this.state.startLoc;\n    this.nextToken();\n  }\n\n  eat(type: TokenType): boolean {\n    if (this.match(type)) {\n      this.next();\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  /**\n   * Whether current token matches given type\n   */\n  match(type: TokenType): boolean {\n    return this.state.type === type;\n  }\n\n  /**\n   * Create a LookaheadState from current parser state\n   */\n  createLookaheadState(state: State): LookaheadState {\n    return {\n      pos: state.pos,\n      value: null,\n      type: state.type,\n      start: state.start,\n      end: state.end,\n      context: [this.curContext()],\n      inType: state.inType,\n      startLoc: state.startLoc,\n      lastTokEndLoc: state.lastTokEndLoc,\n      curLine: state.curLine,\n      lineStart: state.lineStart,\n      curPosition: state.curPosition,\n    };\n  }\n\n  /**\n   * lookahead peeks the next token, skipping changes to token context and\n   * comment stack. For performance it returns a limited LookaheadState\n   * instead of full parser state.\n   *\n   * The { column, line } Loc info is not included in lookahead since such usage\n   * is rare. Although it may return other location properties e.g. `curLine` and\n   * `lineStart`, these properties are not listed in the LookaheadState interface\n   * and thus the returned value is _NOT_ reliable.\n   *\n   * The tokenizer should make best efforts to avoid using any parser state\n   * other than those defined in LookaheadState\n   */\n  lookahead(): LookaheadState {\n    const old = this.state;\n    // @ts-expect-error For performance we use a simplified tokenizer state structure\n    this.state = this.createLookaheadState(old);\n\n    this.isLookahead = true;\n    this.nextToken();\n    this.isLookahead = false;\n\n    const curr = this.state;\n    this.state = old;\n    return curr;\n  }\n\n  nextTokenStart(): number {\n    return this.nextTokenStartSince(this.state.pos);\n  }\n\n  nextTokenStartSince(pos: number): number {\n    skipWhiteSpace.lastIndex = pos;\n    return skipWhiteSpace.test(this.input) ? skipWhiteSpace.lastIndex : pos;\n  }\n\n  lookaheadCharCode(): number {\n    return this.lookaheadCharCodeSince(this.state.pos);\n  }\n\n  lookaheadCharCodeSince(pos: number): number {\n    return this.input.charCodeAt(this.nextTokenStartSince(pos));\n  }\n\n  /**\n   * Similar to nextToken, but it will stop at line break when it is seen before the next token\n   *\n   * @returns {number} position of the next token start or line break, whichever is seen first.\n   * @memberof Tokenizer\n   */\n  nextTokenInLineStart(): number {\n    return this.nextTokenInLineStartSince(this.state.pos);\n  }\n\n  nextTokenInLineStartSince(pos: number): number {\n    skipWhiteSpaceInLine.lastIndex = pos;\n    return skipWhiteSpaceInLine.test(this.input)\n      ? skipWhiteSpaceInLine.lastIndex\n      : pos;\n  }\n\n  /**\n   * Similar to lookaheadCharCode, but it will return the char code of line break if it is\n   * seen before the next token\n   *\n   * @returns {number} char code of the next token start or line break, whichever is seen first.\n   * @memberof Tokenizer\n   */\n  lookaheadInLineCharCode(): number {\n    return this.input.charCodeAt(this.nextTokenInLineStart());\n  }\n\n  codePointAtPos(pos: number): number {\n    // The implementation is based on\n    // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n    // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n    // since `input` is mostly ASCII, an inlined `charCodeAt` wins here\n    let cp = this.input.charCodeAt(pos);\n    if ((cp & 0xfc00) === 0xd800 && ++pos < this.input.length) {\n      const trail = this.input.charCodeAt(pos);\n      if ((trail & 0xfc00) === 0xdc00) {\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n      }\n    }\n    return cp;\n  }\n\n  // Toggle strict mode. Re-reads the next number or string to please\n  // pedantic tests (`\"use strict\"; 010;` should fail).\n\n  setStrict(strict: boolean): void {\n    this.state.strict = strict;\n    if (strict) {\n      // Throw an error for any string decimal escape found before/immediately\n      // after a \"use strict\" directive. Strict mode will be set at parse\n      // time for any literals that occur after the next node of the strict\n      // directive.\n      this.state.strictErrors.forEach(([toParseError, at]) =>\n        this.raise(toParseError, at),\n      );\n      this.state.strictErrors.clear();\n    }\n  }\n\n  curContext(): TokContext {\n    return this.state.context[this.state.context.length - 1];\n  }\n\n  // Read a single token, updating the parser object's token-related properties.\n  nextToken(): void {\n    this.skipSpace();\n    this.state.start = this.state.pos;\n    if (!this.isLookahead) this.state.startLoc = this.state.curPosition();\n    if (this.state.pos >= this.length) {\n      this.finishToken(tt.eof);\n      return;\n    }\n\n    this.getTokenFromCode(this.codePointAtPos(this.state.pos));\n  }\n\n  // Skips a block comment, whose end is marked by commentEnd.\n  // *-/ is used by the Flow plugin, when parsing block comments nested\n  // inside Flow comments.\n  skipBlockComment(commentEnd: \"*/\" | \"*-/\"): N.CommentBlock | undefined {\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    const start = this.state.pos;\n    const end = this.input.indexOf(commentEnd, start + 2);\n    if (end === -1) {\n      // We have to call this again here because startLoc may not be set...\n      // This seems to be for performance reasons:\n      // https://github.com/babel/babel/commit/acf2a10899f696a8aaf34df78bf9725b5ea7f2da\n      throw this.raise(Errors.UnterminatedComment, this.state.curPosition());\n    }\n\n    this.state.pos = end + commentEnd.length;\n    lineBreakG.lastIndex = start + 2;\n    while (lineBreakG.test(this.input) && lineBreakG.lastIndex <= end) {\n      ++this.state.curLine;\n      this.state.lineStart = lineBreakG.lastIndex;\n    }\n\n    // If we are doing a lookahead right now we need to advance the position (above code)\n    // but we do not want to push the comment to the state.\n    if (this.isLookahead) return;\n    /*:: invariant(startLoc) */\n\n    const comment: N.CommentBlock = {\n      type: \"CommentBlock\",\n      value: this.input.slice(start + 2, end),\n      start: this.sourceToOffsetPos(start),\n      end: this.sourceToOffsetPos(end + commentEnd.length),\n      // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n      loc: new SourceLocation(startLoc!, this.state.curPosition()),\n    };\n    if (this.optionFlags & OptionFlags.Tokens) this.pushToken(comment);\n    return comment;\n  }\n\n  skipLineComment(startSkip: number): N.CommentLine | undefined {\n    const start = this.state.pos;\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    let ch = this.input.charCodeAt((this.state.pos += startSkip));\n    if (this.state.pos < this.length) {\n      while (!isNewLine(ch) && ++this.state.pos < this.length) {\n        ch = this.input.charCodeAt(this.state.pos);\n      }\n    }\n\n    // If we are doing a lookahead right now we need to advance the position (above code)\n    // but we do not want to push the comment to the state.\n    if (this.isLookahead) return;\n\n    const end = this.state.pos;\n    const value = this.input.slice(start + startSkip, end);\n\n    const comment: N.CommentLine = {\n      type: \"CommentLine\",\n      value,\n      start: this.sourceToOffsetPos(start),\n      end: this.sourceToOffsetPos(end),\n      // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n      loc: new SourceLocation(startLoc!, this.state.curPosition()),\n    };\n    if (this.optionFlags & OptionFlags.Tokens) this.pushToken(comment);\n    return comment;\n  }\n\n  // Called at the start of the parse and after every token. Skips\n  // whitespace and comments, and.\n\n  skipSpace(): void {\n    const spaceStart = this.state.pos;\n    const comments: N.Comment[] | null =\n      this.optionFlags & OptionFlags.AttachComment ? [] : null;\n    loop: while (this.state.pos < this.length) {\n      const ch = this.input.charCodeAt(this.state.pos);\n      switch (ch) {\n        case charCodes.space:\n        case charCodes.nonBreakingSpace:\n        case charCodes.tab:\n          ++this.state.pos;\n          break;\n        case charCodes.carriageReturn:\n          if (\n            this.input.charCodeAt(this.state.pos + 1) === charCodes.lineFeed\n          ) {\n            ++this.state.pos;\n          }\n        // fall through\n        case charCodes.lineFeed:\n        case charCodes.lineSeparator:\n        case charCodes.paragraphSeparator:\n          ++this.state.pos;\n          ++this.state.curLine;\n          this.state.lineStart = this.state.pos;\n          break;\n\n        case charCodes.slash:\n          switch (this.input.charCodeAt(this.state.pos + 1)) {\n            case charCodes.asterisk: {\n              const comment = this.skipBlockComment(\"*/\");\n              if (comment !== undefined) {\n                this.addComment(comment);\n                comments?.push(comment);\n              }\n              break;\n            }\n\n            case charCodes.slash: {\n              const comment = this.skipLineComment(2);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                comments?.push(comment);\n              }\n              break;\n            }\n\n            default:\n              break loop;\n          }\n          break;\n\n        default:\n          if (isWhitespace(ch)) {\n            ++this.state.pos;\n          } else if (\n            ch === charCodes.dash &&\n            !this.inModule &&\n            this.optionFlags & OptionFlags.AnnexB\n          ) {\n            const pos = this.state.pos;\n            if (\n              this.input.charCodeAt(pos + 1) === charCodes.dash &&\n              this.input.charCodeAt(pos + 2) === charCodes.greaterThan &&\n              (spaceStart === 0 || this.state.lineStart > spaceStart)\n            ) {\n              // A `-->` line comment\n              const comment = this.skipLineComment(3);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                comments?.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else if (\n            ch === charCodes.lessThan &&\n            !this.inModule &&\n            this.optionFlags & OptionFlags.AnnexB\n          ) {\n            const pos = this.state.pos;\n            if (\n              this.input.charCodeAt(pos + 1) === charCodes.exclamationMark &&\n              this.input.charCodeAt(pos + 2) === charCodes.dash &&\n              this.input.charCodeAt(pos + 3) === charCodes.dash\n            ) {\n              // `<!--`, an XML-style comment that should be interpreted as a line comment\n              const comment = this.skipLineComment(4);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                comments?.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else {\n            break loop;\n          }\n      }\n    }\n\n    // @ts-expect-error comparing undefined and number\n    if (comments?.length > 0) {\n      const end = this.state.pos;\n      const commentWhitespace: CommentWhitespace = {\n        start: this.sourceToOffsetPos(spaceStart),\n        end: this.sourceToOffsetPos(end),\n        comments: comments!,\n        leadingNode: null,\n        trailingNode: null,\n        containingNode: null,\n      };\n      this.state.commentStack.push(commentWhitespace);\n    }\n  }\n\n  // Called at the end of every token. Sets `end`, `val`, and\n  // maintains `context` and `canStartJSXElement`, and skips the space after\n  // the token, so that the next one's `start` will point at the\n  // right position.\n\n  finishToken(type: TokenType, val?: any): void {\n    this.state.end = this.state.pos;\n    this.state.endLoc = this.state.curPosition();\n    const prevType = this.state.type;\n    this.state.type = type;\n    this.state.value = val;\n\n    if (!this.isLookahead) {\n      this.updateContext(prevType);\n    }\n  }\n\n  replaceToken(type: TokenType): void {\n    this.state.type = type;\n    // @ts-expect-error the prevType of updateContext is required\n    // only when the new type is tt.slash/tt.jsxTagEnd\n    this.updateContext();\n  }\n\n  // ### Token reading\n\n  // This is the function that is called to fetch the next token. It\n  // is somewhat obscure, because it works in character codes rather\n  // than characters, and because operator parsing has been inlined\n  // into it.\n  //\n  // All in the name of speed.\n\n  // number sign is \"#\"\n  readToken_numberSign(): void {\n    if (this.state.pos === 0 && this.readToken_interpreter()) {\n      return;\n    }\n\n    const nextPos = this.state.pos + 1;\n    const next = this.codePointAtPos(nextPos);\n    if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n      throw this.raise(\n        Errors.UnexpectedDigitAfterHash,\n        this.state.curPosition(),\n      );\n    }\n\n    if (\n      !process.env.BABEL_8_BREAKING &&\n      (next === charCodes.leftCurlyBrace ||\n        (next === charCodes.leftSquareBracket &&\n          this.hasPlugin(\"recordAndTuple\")))\n    ) {\n      // When we see `#{`, it is likely to be a hash record.\n      // However we don't yell at `#[` since users may intend to use \"computed private fields\",\n      // which is not allowed in the spec. Throwing expecting recordAndTuple is\n      // misleading\n      this.expectPlugin(\"recordAndTuple\");\n      if (\n        !process.env.BABEL_8_BREAKING &&\n        this.getPluginOption(\"recordAndTuple\", \"syntaxType\") === \"bar\"\n      ) {\n        throw this.raise(\n          next === charCodes.leftCurlyBrace\n            ? Errors.RecordExpressionHashIncorrectStartSyntaxType\n            : Errors.TupleExpressionHashIncorrectStartSyntaxType,\n          this.state.curPosition(),\n        );\n      }\n\n      this.state.pos += 2;\n      if (next === charCodes.leftCurlyBrace) {\n        // #{\n        this.finishToken(tt.braceHashL);\n      } else {\n        // #[\n        this.finishToken(tt.bracketHashL);\n      }\n    } else if (isIdentifierStart(next)) {\n      ++this.state.pos;\n      this.finishToken(tt.privateName, this.readWord1(next));\n    } else if (next === charCodes.backslash) {\n      ++this.state.pos;\n      this.finishToken(tt.privateName, this.readWord1());\n    } else {\n      this.finishOp(tt.hash, 1);\n    }\n  }\n\n  readToken_dot(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n      this.readNumber(true);\n      return;\n    }\n\n    if (\n      next === charCodes.dot &&\n      this.input.charCodeAt(this.state.pos + 2) === charCodes.dot\n    ) {\n      this.state.pos += 3;\n      this.finishToken(tt.ellipsis);\n    } else {\n      ++this.state.pos;\n      this.finishToken(tt.dot);\n    }\n  }\n\n  readToken_slash(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.slashAssign, 2);\n    } else {\n      this.finishOp(tt.slash, 1);\n    }\n  }\n\n  readToken_interpreter(): boolean {\n    if (this.state.pos !== 0 || this.length < 2) return false;\n\n    let ch = this.input.charCodeAt(this.state.pos + 1);\n    if (ch !== charCodes.exclamationMark) return false;\n\n    const start = this.state.pos;\n    this.state.pos += 1;\n\n    while (!isNewLine(ch) && ++this.state.pos < this.length) {\n      ch = this.input.charCodeAt(this.state.pos);\n    }\n\n    const value = this.input.slice(start + 2, this.state.pos);\n\n    this.finishToken(tt.interpreterDirective, value);\n\n    return true;\n  }\n\n  readToken_mult_modulo(code: number): void {\n    // '%' or '*'\n    let type = code === charCodes.asterisk ? tt.star : tt.modulo;\n    let width = 1;\n    let next = this.input.charCodeAt(this.state.pos + 1);\n\n    // Exponentiation operator '**'\n    if (code === charCodes.asterisk && next === charCodes.asterisk) {\n      width++;\n      next = this.input.charCodeAt(this.state.pos + 2);\n      type = tt.exponent;\n    }\n\n    // '%=' or '*='\n    if (next === charCodes.equalsTo && !this.state.inType) {\n      width++;\n      // `tt.moduloAssign` is only needed to support % as a Hack-pipe topic token.\n      // If the proposal ends up choosing a different token,\n      // it can be merged with tt.assign.\n      type = code === charCodes.percentSign ? tt.moduloAssign : tt.assign;\n    }\n\n    this.finishOp(type, width);\n  }\n\n  readToken_pipe_amp(code: number): void {\n    // '||' '&&' '||=' '&&='\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      if (this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, 3);\n      } else {\n        this.finishOp(\n          code === charCodes.verticalBar ? tt.logicalOR : tt.logicalAND,\n          2,\n        );\n      }\n      return;\n    }\n\n    if (code === charCodes.verticalBar) {\n      // '|>'\n      if (next === charCodes.greaterThan) {\n        this.finishOp(tt.pipeline, 2);\n        return;\n      }\n      // '|}'\n      if (\n        !process.env.BABEL_8_BREAKING &&\n        this.hasPlugin(\"recordAndTuple\") &&\n        next === charCodes.rightCurlyBrace\n      ) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(\n            Errors.RecordExpressionBarIncorrectEndSyntaxType,\n            this.state.curPosition(),\n          );\n        }\n        this.state.pos += 2;\n        this.finishToken(tt.braceBarR);\n        return;\n      }\n\n      // '|]'\n      if (\n        !process.env.BABEL_8_BREAKING &&\n        this.hasPlugin(\"recordAndTuple\") &&\n        next === charCodes.rightSquareBracket\n      ) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(\n            Errors.TupleExpressionBarIncorrectEndSyntaxType,\n            this.state.curPosition(),\n          );\n        }\n        this.state.pos += 2;\n        this.finishToken(tt.bracketBarR);\n        return;\n      }\n    }\n\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.assign, 2);\n      return;\n    }\n\n    this.finishOp(\n      code === charCodes.verticalBar ? tt.bitwiseOR : tt.bitwiseAND,\n      1,\n    );\n  }\n\n  readToken_caret(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    // '^='\n    if (next === charCodes.equalsTo && !this.state.inType) {\n      // `tt.xorAssign` is only needed to support ^ as a Hack-pipe topic token.\n      // If the proposal ends up choosing a different token,\n      // it can be merged with tt.assign.\n      this.finishOp(tt.xorAssign, 2);\n    }\n    // '^^'\n    else if (\n      next === charCodes.caret &&\n      // If the ^^ token is not enabled, we don't throw but parse two single ^s\n      // because it could be a ^ hack token followed by a ^ binary operator.\n      this.hasPlugin([\n        \"pipelineOperator\",\n        { proposal: \"hack\", topicToken: \"^^\" },\n      ])\n    ) {\n      this.finishOp(tt.doubleCaret, 2);\n\n      // `^^^` is forbidden and must be separated by a space.\n      const lookaheadCh = this.input.codePointAt(this.state.pos);\n      if (lookaheadCh === charCodes.caret) {\n        this.unexpected();\n      }\n    }\n    // '^'\n    else {\n      this.finishOp(tt.bitwiseXOR, 1);\n    }\n  }\n\n  readToken_atSign(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    // '@@'\n    if (\n      next === charCodes.atSign &&\n      this.hasPlugin([\n        \"pipelineOperator\",\n        { proposal: \"hack\", topicToken: \"@@\" },\n      ])\n    ) {\n      this.finishOp(tt.doubleAt, 2);\n    }\n    // '@'\n    else {\n      this.finishOp(tt.at, 1);\n    }\n  }\n\n  readToken_plus_min(code: number): void {\n    // '+-'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      this.finishOp(tt.incDec, 2);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.assign, 2);\n    } else {\n      this.finishOp(tt.plusMin, 1);\n    }\n  }\n\n  readToken_lt(): void {\n    // '<'\n    const { pos } = this.state;\n    const next = this.input.charCodeAt(pos + 1);\n\n    if (next === charCodes.lessThan) {\n      if (this.input.charCodeAt(pos + 2) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, 3);\n        return;\n      }\n      this.finishOp(tt.bitShiftL, 2);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      // <=\n      this.finishOp(tt.relational, 2);\n      return;\n    }\n\n    this.finishOp(tt.lt, 1);\n  }\n\n  readToken_gt(): void {\n    // '>'\n    const { pos } = this.state;\n    const next = this.input.charCodeAt(pos + 1);\n\n    if (next === charCodes.greaterThan) {\n      const size =\n        this.input.charCodeAt(pos + 2) === charCodes.greaterThan ? 3 : 2;\n      if (this.input.charCodeAt(pos + size) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, size + 1);\n        return;\n      }\n      this.finishOp(tt.bitShiftR, size);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      // <= | >=\n      this.finishOp(tt.relational, 2);\n      return;\n    }\n\n    this.finishOp(tt.gt, 1);\n  }\n\n  readToken_eq_excl(code: number): void {\n    // '=!'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === charCodes.equalsTo) {\n      this.finishOp(\n        tt.equality,\n        this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo\n          ? 3\n          : 2,\n      );\n      return;\n    }\n    if (code === charCodes.equalsTo && next === charCodes.greaterThan) {\n      // '=>'\n      this.state.pos += 2;\n      this.finishToken(tt.arrow);\n      return;\n    }\n    this.finishOp(code === charCodes.equalsTo ? tt.eq : tt.bang, 1);\n  }\n\n  readToken_question(): void {\n    // '?'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    const next2 = this.input.charCodeAt(this.state.pos + 2);\n    if (next === charCodes.questionMark) {\n      if (next2 === charCodes.equalsTo) {\n        // '??='\n        this.finishOp(tt.assign, 3);\n      } else {\n        // '??'\n        this.finishOp(tt.nullishCoalescing, 2);\n      }\n    } else if (\n      next === charCodes.dot &&\n      !(next2 >= charCodes.digit0 && next2 <= charCodes.digit9)\n    ) {\n      // '.' not followed by a number\n      this.state.pos += 2;\n      this.finishToken(tt.questionDot);\n    } else {\n      ++this.state.pos;\n      this.finishToken(tt.question);\n    }\n  }\n\n  getTokenFromCode(code: number): void {\n    switch (code) {\n      // The interpretation of a dot depends on whether it is followed\n      // by a digit or another two dots.\n\n      case charCodes.dot:\n        this.readToken_dot();\n        return;\n      // Punctuation tokens.\n      case charCodes.leftParenthesis:\n        ++this.state.pos;\n        this.finishToken(tt.parenL);\n        return;\n      case charCodes.rightParenthesis:\n        ++this.state.pos;\n        this.finishToken(tt.parenR);\n        return;\n      case charCodes.semicolon:\n        ++this.state.pos;\n        this.finishToken(tt.semi);\n        return;\n      case charCodes.comma:\n        ++this.state.pos;\n        this.finishToken(tt.comma);\n        return;\n      case charCodes.leftSquareBracket:\n        if (\n          !process.env.BABEL_8_BREAKING &&\n          this.hasPlugin(\"recordAndTuple\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\n        ) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(\n              Errors.TupleExpressionBarIncorrectStartSyntaxType,\n              this.state.curPosition(),\n            );\n          }\n\n          // [|\n          this.state.pos += 2;\n          this.finishToken(tt.bracketBarL);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.bracketL);\n        }\n        return;\n      case charCodes.rightSquareBracket:\n        ++this.state.pos;\n        this.finishToken(tt.bracketR);\n        return;\n      case charCodes.leftCurlyBrace:\n        if (\n          !process.env.BABEL_8_BREAKING &&\n          this.hasPlugin(\"recordAndTuple\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\n        ) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(\n              Errors.RecordExpressionBarIncorrectStartSyntaxType,\n              this.state.curPosition(),\n            );\n          }\n\n          // {|\n          this.state.pos += 2;\n          this.finishToken(tt.braceBarL);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.braceL);\n        }\n        return;\n      case charCodes.rightCurlyBrace:\n        ++this.state.pos;\n        this.finishToken(tt.braceR);\n        return;\n\n      case charCodes.colon:\n        if (\n          this.hasPlugin(\"functionBind\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.colon\n        ) {\n          this.finishOp(tt.doubleColon, 2);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.colon);\n        }\n        return;\n\n      case charCodes.questionMark:\n        this.readToken_question();\n        return;\n\n      case charCodes.graveAccent:\n        this.readTemplateToken();\n        return;\n\n      case charCodes.digit0: {\n        const next = this.input.charCodeAt(this.state.pos + 1);\n        // '0x', '0X' - hex number\n        if (next === charCodes.lowercaseX || next === charCodes.uppercaseX) {\n          this.readRadixNumber(16);\n          return;\n        }\n        // '0o', '0O' - octal number\n        if (next === charCodes.lowercaseO || next === charCodes.uppercaseO) {\n          this.readRadixNumber(8);\n          return;\n        }\n        // '0b', '0B' - binary number\n        if (next === charCodes.lowercaseB || next === charCodes.uppercaseB) {\n          this.readRadixNumber(2);\n          return;\n        }\n      }\n      // Anything else beginning with a digit is an integer, octal\n      // number, or float. (fall through)\n      case charCodes.digit1:\n      case charCodes.digit2:\n      case charCodes.digit3:\n      case charCodes.digit4:\n      case charCodes.digit5:\n      case charCodes.digit6:\n      case charCodes.digit7:\n      case charCodes.digit8:\n      case charCodes.digit9:\n        this.readNumber(false);\n        return;\n\n      // Quotes produce strings.\n      case charCodes.quotationMark:\n      case charCodes.apostrophe:\n        this.readString(code);\n        return;\n\n      // Operators are parsed inline in tiny state machines. '=' (charCodes.equalsTo) is\n      // often referred to. `finishOp` simply skips the amount of\n      // characters it is given as second argument, and returns a token\n      // of the type given by its first argument.\n\n      case charCodes.slash:\n        this.readToken_slash();\n        return;\n\n      case charCodes.percentSign:\n      case charCodes.asterisk:\n        this.readToken_mult_modulo(code);\n        return;\n\n      case charCodes.verticalBar:\n      case charCodes.ampersand:\n        this.readToken_pipe_amp(code);\n        return;\n\n      case charCodes.caret:\n        this.readToken_caret();\n        return;\n\n      case charCodes.plusSign:\n      case charCodes.dash:\n        this.readToken_plus_min(code);\n        return;\n\n      case charCodes.lessThan:\n        this.readToken_lt();\n        return;\n\n      case charCodes.greaterThan:\n        this.readToken_gt();\n        return;\n\n      case charCodes.equalsTo:\n      case charCodes.exclamationMark:\n        this.readToken_eq_excl(code);\n        return;\n\n      case charCodes.tilde:\n        this.finishOp(tt.tilde, 1);\n        return;\n\n      case charCodes.atSign:\n        this.readToken_atSign();\n        return;\n\n      case charCodes.numberSign:\n        this.readToken_numberSign();\n        return;\n\n      case charCodes.backslash:\n        this.readWord();\n        return;\n\n      default:\n        if (isIdentifierStart(code)) {\n          this.readWord(code);\n          return;\n        }\n    }\n\n    throw this.raise(\n      Errors.InvalidOrUnexpectedToken,\n      this.state.curPosition(),\n      {\n        unexpected: String.fromCodePoint(code),\n      },\n    );\n  }\n\n  finishOp(type: TokenType, size: number): void {\n    const str = this.input.slice(this.state.pos, this.state.pos + size);\n    this.state.pos += size;\n    this.finishToken(type, str);\n  }\n\n  readRegexp(): void {\n    const startLoc = this.state.startLoc;\n    const start = this.state.start + 1;\n    let escaped, inClass;\n    let { pos } = this.state;\n    for (; ; ++pos) {\n      if (pos >= this.length) {\n        // FIXME: explain\n        throw this.raise(\n          Errors.UnterminatedRegExp,\n          createPositionWithColumnOffset(startLoc, 1),\n        );\n      }\n      const ch = this.input.charCodeAt(pos);\n      if (isNewLine(ch)) {\n        throw this.raise(\n          Errors.UnterminatedRegExp,\n          createPositionWithColumnOffset(startLoc, 1),\n        );\n      }\n      if (escaped) {\n        escaped = false;\n      } else {\n        if (ch === charCodes.leftSquareBracket) {\n          inClass = true;\n        } else if (ch === charCodes.rightSquareBracket && inClass) {\n          inClass = false;\n        } else if (ch === charCodes.slash && !inClass) {\n          break;\n        }\n        escaped = ch === charCodes.backslash;\n      }\n    }\n    const content = this.input.slice(start, pos);\n    ++pos;\n\n    let mods = \"\";\n\n    const nextPos = () =>\n      // (pos + 1) + 1 - start\n      createPositionWithColumnOffset(startLoc, pos + 2 - start);\n\n    while (pos < this.length) {\n      const cp = this.codePointAtPos(pos);\n      // It doesn't matter if cp > 0xffff, the loop will either throw or break because we check on cp\n      const char = String.fromCharCode(cp);\n\n      // @ts-expect-error VALID_REGEX_FLAGS.has should accept expanded type: number\n      if (VALID_REGEX_FLAGS.has(cp)) {\n        if (cp === charCodes.lowercaseV) {\n          if (mods.includes(\"u\")) {\n            this.raise(Errors.IncompatibleRegExpUVFlags, nextPos());\n          }\n        } else if (cp === charCodes.lowercaseU) {\n          if (mods.includes(\"v\")) {\n            this.raise(Errors.IncompatibleRegExpUVFlags, nextPos());\n          }\n        }\n        if (mods.includes(char)) {\n          this.raise(Errors.DuplicateRegExpFlags, nextPos());\n        }\n      } else if (isIdentifierChar(cp) || cp === charCodes.backslash) {\n        this.raise(Errors.MalformedRegExpFlags, nextPos());\n      } else {\n        break;\n      }\n\n      ++pos;\n      mods += char;\n    }\n    this.state.pos = pos;\n\n    this.finishToken(tt.regexp, {\n      pattern: content,\n      flags: mods,\n    });\n  }\n\n  // Read an integer in the given radix. Return null if zero digits\n  // were read, the integer value otherwise. When `len` is given, this\n  // will return `null` unless the integer has exactly `len` digits.\n  // When `forceLen` is `true`, it means that we already know that in case\n  // of a malformed number we have to skip `len` characters anyway, instead\n  // of bailing out early. For example, in \"\\u{123Z}\" we want to read up to }\n  // anyway, while in \"\\u00Z\" we will stop at Z instead of consuming four\n  // characters (and thus the closing quote).\n\n  readInt(\n    radix: number,\n    len?: number,\n    forceLen: boolean = false,\n    allowNumSeparator: boolean | \"bail\" = true,\n  ): number | null {\n    const { n, pos } = readInt(\n      this.input,\n      this.state.pos,\n      this.state.lineStart,\n      this.state.curLine,\n      radix,\n      len,\n      forceLen,\n      allowNumSeparator,\n      this.errorHandlers_readInt,\n      /* bailOnError */ false,\n    );\n    this.state.pos = pos;\n    return n;\n  }\n\n  readRadixNumber(radix: number): void {\n    const start = this.state.pos;\n    const startLoc = this.state.curPosition();\n    let isBigInt = false;\n\n    this.state.pos += 2; // 0x\n    const val = this.readInt(radix);\n    if (val == null) {\n      this.raise(\n        Errors.InvalidDigit,\n        // Numeric literals can't have newlines, so this is safe to do.\n        createPositionWithColumnOffset(startLoc, 2),\n        {\n          radix,\n        },\n      );\n    }\n    const next = this.input.charCodeAt(this.state.pos);\n\n    if (next === charCodes.lowercaseN) {\n      ++this.state.pos;\n      isBigInt = true;\n    } else if (next === charCodes.lowercaseM) {\n      throw this.raise(Errors.InvalidDecimal, startLoc);\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(Errors.NumberIdentifier, this.state.curPosition());\n    }\n\n    if (isBigInt) {\n      const str = this.input.slice(start, this.state.pos).replace(/[_n]/g, \"\");\n      this.finishToken(tt.bigint, str);\n      return;\n    }\n\n    this.finishToken(tt.num, val);\n  }\n\n  // Read an integer, octal integer, or floating-point number.\n\n  readNumber(startsWithDot: boolean): void {\n    const start = this.state.pos;\n    const startLoc = this.state.curPosition();\n    let isFloat = false;\n    let isBigInt = false;\n    let hasExponent = false;\n    let isOctal = false;\n\n    if (!startsWithDot && this.readInt(10) === null) {\n      this.raise(Errors.InvalidNumber, this.state.curPosition());\n    }\n    const hasLeadingZero =\n      this.state.pos - start >= 2 &&\n      this.input.charCodeAt(start) === charCodes.digit0;\n\n    if (hasLeadingZero) {\n      const integer = this.input.slice(start, this.state.pos);\n      this.recordStrictModeErrors(Errors.StrictOctalLiteral, startLoc);\n      if (!this.state.strict) {\n        // disallow numeric separators in non octal decimals and legacy octal likes\n        const underscorePos = integer.indexOf(\"_\");\n        if (underscorePos > 0) {\n          // Numeric literals can't have newlines, so this is safe to do.\n          this.raise(\n            Errors.ZeroDigitNumericSeparator,\n            createPositionWithColumnOffset(startLoc, underscorePos),\n          );\n        }\n      }\n      isOctal = hasLeadingZero && !/[89]/.test(integer);\n    }\n\n    let next = this.input.charCodeAt(this.state.pos);\n    if (next === charCodes.dot && !isOctal) {\n      ++this.state.pos;\n      this.readInt(10);\n      isFloat = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if (\n      (next === charCodes.uppercaseE || next === charCodes.lowercaseE) &&\n      !isOctal\n    ) {\n      next = this.input.charCodeAt(++this.state.pos);\n      if (next === charCodes.plusSign || next === charCodes.dash) {\n        ++this.state.pos;\n      }\n      if (this.readInt(10) === null) {\n        this.raise(Errors.InvalidOrMissingExponent, startLoc);\n      }\n      isFloat = true;\n      hasExponent = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if (next === charCodes.lowercaseN) {\n      // disallow floats, legacy octal syntax and non octal decimals\n      // new style octal (\"0o\") is handled in this.readRadixNumber\n      if (isFloat || hasLeadingZero) {\n        this.raise(Errors.InvalidBigIntLiteral, startLoc);\n      }\n      ++this.state.pos;\n      isBigInt = true;\n    }\n\n    if (!process.env.BABEL_8_BREAKING && next === charCodes.lowercaseM) {\n      this.expectPlugin(\"decimal\", this.state.curPosition());\n      if (hasExponent || hasLeadingZero) {\n        this.raise(Errors.InvalidDecimal, startLoc);\n      }\n      ++this.state.pos;\n      // eslint-disable-next-line no-var\n      var isDecimal = true;\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(Errors.NumberIdentifier, this.state.curPosition());\n    }\n\n    // remove \"_\" for numeric literal separator, and trailing `m` or `n`\n    const str = this.input.slice(start, this.state.pos).replace(/[_mn]/g, \"\");\n\n    if (isBigInt) {\n      this.finishToken(tt.bigint, str);\n      return;\n    }\n\n    if (!process.env.BABEL_8_BREAKING && isDecimal!) {\n      this.finishToken(tt.decimal, str);\n      return;\n    }\n\n    const val = isOctal ? parseInt(str, 8) : parseFloat(str);\n    this.finishToken(tt.num, val);\n  }\n\n  // Read a string value, interpreting backslash-escapes.\n\n  readCodePoint(throwOnInvalid: boolean): number | null {\n    const { code, pos } = readCodePoint(\n      this.input,\n      this.state.pos,\n      this.state.lineStart,\n      this.state.curLine,\n      throwOnInvalid,\n      this.errorHandlers_readCodePoint,\n    );\n    this.state.pos = pos;\n    return code;\n  }\n\n  readString(quote: number): void {\n    const { str, pos, curLine, lineStart } = readStringContents(\n      quote === charCodes.quotationMark ? \"double\" : \"single\",\n      this.input,\n      this.state.pos + 1, // skip the quote\n      this.state.lineStart,\n      this.state.curLine,\n      this.errorHandlers_readStringContents_string,\n    );\n    this.state.pos = pos + 1; // skip the quote\n    this.state.lineStart = lineStart;\n    this.state.curLine = curLine;\n    this.finishToken(tt.string, str);\n  }\n\n  // Reads template continuation `}...`\n  readTemplateContinuation(): void {\n    if (!this.match(tt.braceR)) {\n      this.unexpected(null, tt.braceR);\n    }\n    // rewind pos to `}`\n    this.state.pos--;\n    this.readTemplateToken();\n  }\n\n  // Reads template string tokens.\n  readTemplateToken(): void {\n    const opening = this.input[this.state.pos];\n    const { str, firstInvalidLoc, pos, curLine, lineStart } =\n      readStringContents(\n        \"template\",\n        this.input,\n        this.state.pos + 1, // skip '`' or `}`\n        this.state.lineStart,\n        this.state.curLine,\n        this.errorHandlers_readStringContents_template,\n      );\n    this.state.pos = pos + 1; // skip '`' or `$`\n    this.state.lineStart = lineStart;\n    this.state.curLine = curLine;\n\n    if (firstInvalidLoc) {\n      this.state.firstInvalidTemplateEscapePos = new Position(\n        firstInvalidLoc.curLine,\n        firstInvalidLoc.pos - firstInvalidLoc.lineStart,\n        this.sourceToOffsetPos(firstInvalidLoc.pos),\n      );\n    }\n\n    if (this.input.codePointAt(pos) === charCodes.graveAccent) {\n      this.finishToken(\n        tt.templateTail,\n        firstInvalidLoc ? null : opening + str + \"`\",\n      );\n    } else {\n      this.state.pos++; // skip '{'\n      this.finishToken(\n        tt.templateNonTail,\n        firstInvalidLoc ? null : opening + str + \"${\",\n      );\n    }\n  }\n\n  recordStrictModeErrors(toParseError: DeferredStrictError, at: Position) {\n    const index = at.index;\n\n    if (this.state.strict && !this.state.strictErrors.has(index)) {\n      this.raise(toParseError, at);\n    } else {\n      this.state.strictErrors.set(index, [toParseError, at]);\n    }\n  }\n\n  // Read an identifier, and return it as a string. Sets `this.state.containsEsc`\n  // to whether the word contained a '\\u' escape.\n  //\n  // Incrementally adds only escaped chars, adding other chunks as-is\n  // as a micro-optimization.\n  //\n  // When `firstCode` is given, it assumes it is always an identifier start and\n  // will skip reading start position again\n\n  readWord1(firstCode?: number): string {\n    this.state.containsEsc = false;\n    let word = \"\";\n    const start = this.state.pos;\n    let chunkStart = this.state.pos;\n    if (firstCode !== undefined) {\n      this.state.pos += firstCode <= 0xffff ? 1 : 2;\n    }\n\n    while (this.state.pos < this.length) {\n      const ch = this.codePointAtPos(this.state.pos);\n      if (isIdentifierChar(ch)) {\n        this.state.pos += ch <= 0xffff ? 1 : 2;\n      } else if (ch === charCodes.backslash) {\n        this.state.containsEsc = true;\n\n        word += this.input.slice(chunkStart, this.state.pos);\n        const escStart = this.state.curPosition();\n        const identifierCheck =\n          this.state.pos === start ? isIdentifierStart : isIdentifierChar;\n\n        if (this.input.charCodeAt(++this.state.pos) !== charCodes.lowercaseU) {\n          this.raise(Errors.MissingUnicodeEscape, this.state.curPosition());\n          chunkStart = this.state.pos - 1;\n          continue;\n        }\n\n        ++this.state.pos;\n        const esc = this.readCodePoint(true);\n        if (esc !== null) {\n          if (!identifierCheck(esc)) {\n            this.raise(Errors.EscapedCharNotAnIdentifier, escStart);\n          }\n\n          word += String.fromCodePoint(esc);\n        }\n        chunkStart = this.state.pos;\n      } else {\n        break;\n      }\n    }\n    return word + this.input.slice(chunkStart, this.state.pos);\n  }\n\n  // Read an identifier or keyword token. Will check for reserved\n  // words when necessary.\n\n  readWord(firstCode?: number): void {\n    const word = this.readWord1(firstCode);\n    const type = keywordTypes.get(word);\n    if (type !== undefined) {\n      // We don't use word as state.value here because word is a dynamic string\n      // while token label is a shared constant string\n      this.finishToken(type, tokenLabelName(type));\n    } else {\n      this.finishToken(tt.name, word);\n    }\n  }\n\n  checkKeywordEscapes(): void {\n    const { type } = this.state;\n    if (tokenIsKeyword(type) && this.state.containsEsc) {\n      this.raise(Errors.InvalidEscapedReservedWord, this.state.startLoc, {\n        reservedWord: tokenLabelName(type),\n      });\n    }\n  }\n\n  /**\n   * Raise a `ParseError` given the appropriate properties. If passed a\n   * `Position` for the `at` property, raises the `ParseError` at that location.\n   * Otherwise, if passed a `Node`, raises the `ParseError` at the start\n   * location of that `Node`.\n   *\n   * If `errorRecovery` is `true`, the error is pushed to the errors array and\n   * returned. If `errorRecovery` is `false`, the error is instead thrown.\n   *\n   * The return type is marked as `never` for simplicity, as error recovery\n   * will create types in an invalid AST shape.\n   */\n  raise<ErrorDetails = object>(\n    toParseError: ParseErrorConstructor<ErrorDetails>,\n    at: Position | Undone<Node>,\n    details: ErrorDetails = {} as ErrorDetails,\n  ): ParseError<ErrorDetails> {\n    const loc = at instanceof Position ? at : at.loc.start;\n    const error = toParseError(loc, details);\n\n    if (!(this.optionFlags & OptionFlags.ErrorRecovery)) throw error;\n    if (!this.isLookahead) this.state.errors.push(error);\n\n    return error;\n  }\n\n  /**\n   * If `errorRecovery` is `false`, this method behaves identically to `raise`.\n   * If `errorRecovery` is `true`, this method will first see if there is\n   * already an error stored at the same `Position`, and replaces it with the\n   * one generated here.\n   */\n  raiseOverwrite<ErrorDetails>(\n    toParseError: ParseErrorConstructor<ErrorDetails>,\n    at: Position | Undone<Node>,\n    details: ErrorDetails = {} as ErrorDetails,\n  ): ParseError<ErrorDetails> | never {\n    const loc = at instanceof Position ? at : at.loc.start;\n    const pos = loc.index;\n    const errors = this.state.errors;\n\n    for (let i = errors.length - 1; i >= 0; i--) {\n      const error = errors[i];\n      if (error.loc.index === pos) {\n        return (errors[i] = toParseError(loc, details));\n      }\n      if (error.loc.index < pos) break;\n    }\n\n    return this.raise(toParseError, at, details);\n  }\n\n  // updateContext is used by the jsx plugin\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  updateContext(prevType: TokenType): void {}\n\n  // Raise an unexpected token error. Can take the expected token type.\n  unexpected(loc?: Position | null, type?: TokenType): any {\n    throw this.raise(\n      Errors.UnexpectedToken,\n      loc != null ? loc : this.state.startLoc,\n      {\n        expected: type ? tokenLabelName(type) : null,\n      },\n    );\n  }\n\n  expectPlugin(pluginName: Plugin, loc?: Position): true {\n    if (this.hasPlugin(pluginName)) {\n      return true;\n    }\n\n    throw this.raise(\n      Errors.MissingPlugin,\n      loc != null ? loc : this.state.startLoc,\n      {\n        missingPlugin: [pluginName],\n      },\n    );\n  }\n\n  expectOnePlugin(pluginNames: Plugin[]): any {\n    if (!pluginNames.some(name => this.hasPlugin(name))) {\n      throw this.raise(Errors.MissingOneOfPlugins, this.state.startLoc, {\n        missingPlugin: pluginNames,\n      });\n    }\n  }\n\n  errorBuilder(error: ParseErrorConstructor<object>) {\n    return (pos: number, lineStart: number, curLine: number) => {\n      this.raise(error, buildPosition(pos, lineStart, curLine));\n    };\n  }\n\n  errorHandlers_readInt: IntErrorHandlers = {\n    invalidDigit: (pos, lineStart, curLine, radix) => {\n      if (!(this.optionFlags & OptionFlags.ErrorRecovery)) return false;\n\n      this.raise(Errors.InvalidDigit, buildPosition(pos, lineStart, curLine), {\n        radix,\n      });\n      // Continue parsing the number as if there was no invalid digit.\n      return true;\n    },\n    numericSeparatorInEscapeSequence: this.errorBuilder(\n      Errors.NumericSeparatorInEscapeSequence,\n    ),\n    unexpectedNumericSeparator: this.errorBuilder(\n      Errors.UnexpectedNumericSeparator,\n    ),\n  };\n\n  errorHandlers_readCodePoint: CodePointErrorHandlers = {\n    ...this.errorHandlers_readInt,\n    invalidEscapeSequence: this.errorBuilder(Errors.InvalidEscapeSequence),\n    invalidCodePoint: this.errorBuilder(Errors.InvalidCodePoint),\n  };\n\n  errorHandlers_readStringContents_string: StringContentsErrorHandlers = {\n    ...this.errorHandlers_readCodePoint,\n    strictNumericEscape: (pos, lineStart, curLine) => {\n      this.recordStrictModeErrors(\n        Errors.StrictNumericEscape,\n        buildPosition(pos, lineStart, curLine),\n      );\n    },\n    unterminated: (pos, lineStart, curLine) => {\n      throw this.raise(\n        Errors.UnterminatedString, // Report the error at the string quote\n        buildPosition(pos - 1, lineStart, curLine),\n      );\n    },\n  };\n\n  errorHandlers_readStringContents_template: StringContentsErrorHandlers = {\n    ...this.errorHandlers_readCodePoint,\n    strictNumericEscape: this.errorBuilder(Errors.StrictNumericEscape),\n    unterminated: (pos, lineStart, curLine) => {\n      throw this.raise(\n        Errors.UnterminatedTemplate,\n        buildPosition(pos, lineStart, curLine),\n      );\n    },\n  };\n}\n", "import { ClassElementType } from \"./scopeflags.ts\";\nimport type { Position } from \"./location.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\n\nexport class ClassScope {\n  // A list of private named declared in the current class\n  privateNames: Set<string> = new Set();\n\n  // A list of private getters of setters without their counterpart\n  loneAccessors: Map<string, ClassElementType> = new Map();\n\n  // A list of private names used before being defined, mapping to\n  // their position.\n  undefinedPrivateNames: Map<string, Position> = new Map();\n}\n\nexport default class ClassScopeHandler {\n  parser: Tokenizer;\n  stack: Array<ClassScope> = [];\n  undefinedPrivateNames: Map<string, Position> = new Map();\n\n  constructor(parser: Tokenizer) {\n    this.parser = parser;\n  }\n\n  current(): ClassScope {\n    return this.stack[this.stack.length - 1];\n  }\n\n  enter() {\n    this.stack.push(new ClassScope());\n  }\n\n  exit() {\n    const oldClassScope = this.stack.pop()!;\n\n    // Migrate the usage of not yet defined private names to the outer\n    // class scope, or raise an error if we reached the top-level scope.\n\n    const current = this.current();\n\n    // Array.from is needed because this is compiled to an array-like for loop\n    for (const [name, loc] of Array.from(oldClassScope.undefinedPrivateNames)) {\n      if (current) {\n        if (!current.undefinedPrivateNames.has(name)) {\n          current.undefinedPrivateNames.set(name, loc);\n        }\n      } else {\n        this.parser.raise(Errors.InvalidPrivateFieldResolution, loc, {\n          identifierName: name,\n        });\n      }\n    }\n  }\n\n  declarePrivateName(\n    name: string,\n    elementType: ClassElementType,\n    loc: Position,\n  ) {\n    const { privateNames, loneAccessors, undefinedPrivateNames } =\n      this.current();\n    let redefined = privateNames.has(name);\n\n    if (elementType & ClassElementType.KIND_ACCESSOR) {\n      const accessor = redefined && loneAccessors.get(name);\n      if (accessor) {\n        const oldStatic = accessor & ClassElementType.FLAG_STATIC;\n        const newStatic = elementType & ClassElementType.FLAG_STATIC;\n\n        const oldKind = accessor & ClassElementType.KIND_ACCESSOR;\n        const newKind = elementType & ClassElementType.KIND_ACCESSOR;\n\n        // The private name can be duplicated only if it is used by\n        // two accessors with different kind (get and set), and if\n        // they have the same placement (static or not).\n        redefined = oldKind === newKind || oldStatic !== newStatic;\n\n        if (!redefined) loneAccessors.delete(name);\n      } else if (!redefined) {\n        loneAccessors.set(name, elementType);\n      }\n    }\n\n    if (redefined) {\n      this.parser.raise(Errors.PrivateNameRedeclaration, loc, {\n        identifierName: name,\n      });\n    }\n\n    privateNames.add(name);\n    undefinedPrivateNames.delete(name);\n  }\n\n  usePrivateName(name: string, loc: Position) {\n    let classScope;\n    for (classScope of this.stack) {\n      if (classScope.privateNames.has(name)) return;\n    }\n\n    if (classScope) {\n      classScope.undefinedPrivateNames.set(name, loc);\n    } else {\n      // top-level\n      this.parser.raise(Errors.InvalidPrivateFieldResolution, loc, {\n        identifierName: name,\n      });\n    }\n  }\n}\n", "import { Errors, type ParseErrorConstructor } from \"../parse-error.ts\";\nimport type { Position } from \"./location.ts\";\nimport type { Node } from \"../types.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\nimport type { Undone } from \"../parser/node.ts\";\n\n/**\n * @module util/expression-scope\n\nExpressionScope is used to track declaration errors in these ambiguous patterns:\n\n- CoverParenthesizedExpressionAndArrowParameterList\n  e.g. we don't know if `({ x })` is an parenthesized expression or an\n  arrow function parameters until we see an `=>` after `)`.\n\n- CoverCallExpressionAndAsyncArrowHead\n  e.g. we don't know if `async({ x })` is a call expression or an async arrow\n  function parameters until we see an `=>` after `)`\n\nThe following declaration errors (@see parser-errors/standard) will be recorded in\nsome expression scopes and thrown later when we know what the ambiguous pattern is\n\n- AwaitBindingIdentifier\n- AwaitExpressionFormalParameter\n- YieldInParameter\n- InvalidParenthesizedAssignment when parenthesized is an identifier\n\nThere are four different expression scope\n- Expression\n  A general scope that represents program / function body / static block. No errors\n  will be recorded nor thrown in this scope.\n\n- MaybeArrowParameterDeclaration\n  A scope that represents ambiguous arrow head e.g. `(x)`. Errors will be recorded\n  alongside parent scopes and thrown when `ExpressionScopeHandler#validateAsPattern`\n  is called.\n\n- MaybeAsyncArrowParameterDeclaration\n  A scope that represents ambiguous async arrow head e.g. `async(x)`. Errors will\n  be recorded alongside parent scopes and thrown when\n  `ExpressionScopeHandler#validateAsPattern` is called.\n\n- ParameterDeclaration\n  A scope that represents unambiguous function parameters `function(x)`. Errors\n  recorded in this scope will be thrown immediately. No errors will be recorded in\n  this scope.\n\n// @see {@link https://docs.google.com/document/d/1FAvEp9EUK-G8kHfDIEo_385Hs2SUBCYbJ5H-NnLvq8M | V8 Expression Scope design docs}\n */\n\nconst enum ExpressionScopeType {\n  kExpression = 0,\n  kMaybeArrowParameterDeclaration = 1,\n  kMaybeAsyncArrowParameterDeclaration = 2,\n  kParameterDeclaration = 3,\n}\n\nclass ExpressionScope {\n  declare type: ExpressionScopeType;\n\n  constructor(type: ExpressionScopeType = ExpressionScopeType.kExpression) {\n    this.type = type;\n  }\n\n  canBeArrowParameterDeclaration(): this is ArrowHeadParsingScope {\n    return (\n      this.type === ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration ||\n      this.type === ExpressionScopeType.kMaybeArrowParameterDeclaration\n    );\n  }\n\n  isCertainlyParameterDeclaration() {\n    return this.type === ExpressionScopeType.kParameterDeclaration;\n  }\n}\n\ntype ArrowHeadParsingParameterInitializerError =\n  | typeof Errors.AwaitExpressionFormalParameter\n  | typeof Errors.YieldInParameter;\ntype ArrowHeadParsingDeclarationError =\n  | ArrowHeadParsingParameterInitializerError\n  | typeof Errors.InvalidParenthesizedAssignment\n  | typeof Errors.AwaitBindingIdentifier;\n\nclass ArrowHeadParsingScope extends ExpressionScope {\n  declarationErrors: Map<number, [ParseErrorConstructor<object>, Position]> =\n    new Map();\n  constructor(\n    type:\n      | ExpressionScopeType.kMaybeArrowParameterDeclaration\n      | ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration,\n  ) {\n    super(type);\n  }\n  recordDeclarationError(\n    ParsingErrorClass: ParseErrorConstructor<object>,\n    at: Position,\n  ) {\n    const index = at.index;\n\n    this.declarationErrors.set(index, [ParsingErrorClass, at]);\n  }\n  clearDeclarationError(index: number) {\n    this.declarationErrors.delete(index);\n  }\n  iterateErrors(\n    iterator: (a: [ArrowHeadParsingDeclarationError, Position]) => void,\n  ) {\n    this.declarationErrors.forEach(iterator);\n  }\n}\n\nexport default class ExpressionScopeHandler {\n  parser: Tokenizer;\n  stack: Array<ExpressionScope> = [new ExpressionScope()];\n\n  constructor(parser: Tokenizer) {\n    this.parser = parser;\n  }\n  enter(scope: ExpressionScope) {\n    this.stack.push(scope);\n  }\n\n  exit() {\n    this.stack.pop();\n  }\n\n  /**\n   * Record likely parameter initializer errors\n   *\n   * When current scope is a ParameterDeclaration, the error will be thrown immediately,\n   * otherwise it will be recorded to any ancestry MaybeArrowParameterDeclaration and\n   * MaybeAsyncArrowParameterDeclaration scope until an Expression scope is seen.\n   */\n  recordParameterInitializerError(\n    toParseError: ArrowHeadParsingParameterInitializerError,\n    node: Undone<Node>,\n  ): void {\n    const origin = node.loc.start;\n    const { stack } = this;\n    let i = stack.length - 1;\n    let scope: ExpressionScope = stack[i];\n    while (!scope.isCertainlyParameterDeclaration()) {\n      if (scope.canBeArrowParameterDeclaration()) {\n        scope.recordDeclarationError(toParseError, origin);\n      } else {\n        /*:: invariant(scope.type == ExpressionScopeType.kExpression) */\n        // Type-Expression is the boundary where initializer error can populate to\n        return;\n      }\n      scope = stack[--i];\n    }\n    this.parser.raise(toParseError, origin);\n  }\n\n  /**\n   * Record errors that must be thrown if the current pattern ends up being an arrow\n   * function parameter. This is used to record parenthesized identifiers, and to record\n   * \"a as T\" and \"<T> a\" type assertions when parsing typescript.\n   *\n   * A parenthesized identifier (or type assertion) in LHS can be ambiguous because the assignment\n   * can be transformed to an assignable later, but not vice versa:\n   * For example, in `([(a) = []] = []) => {}`, we think `(a) = []` is an LHS in `[(a) = []]`,\n   * an LHS within `[(a) = []] = []`. However the LHS chain is then transformed by toAssignable,\n   * and we should throw assignment `(a)`, which is only valid in LHS. Hence we record the\n   * location of parenthesized `(a)` to current scope if it is one of MaybeArrowParameterDeclaration\n   * and MaybeAsyncArrowParameterDeclaration\n   *\n   * Unlike `recordParameterInitializerError`, we don't record to ancestry scope because we\n   * validate arrow head parsing scope before exit, and then the LHS will be unambiguous:\n   * For example, in `( x = ( [(a) = []] = [] ) ) => {}`, we should not record `(a)` in `( x = ... ) =>`\n   * arrow scope because when we finish parsing `( [(a) = []] = [] )`, it is an unambiguous assignment\n   * expression and can not be cast to pattern\n   */\n  recordArrowParameterBindingError(\n    error: ParseErrorConstructor<object>,\n    node: Node,\n  ): void {\n    const { stack } = this;\n    const scope: ExpressionScope = stack[stack.length - 1];\n    const origin = node.loc.start;\n    if (scope.isCertainlyParameterDeclaration()) {\n      this.parser.raise(error, origin);\n    } else if (scope.canBeArrowParameterDeclaration()) {\n      scope.recordDeclarationError(error, origin);\n    } else {\n      return;\n    }\n  }\n\n  /**\n   * Record likely async arrow parameter errors\n   *\n   * Errors will be recorded to any ancestry MaybeAsyncArrowParameterDeclaration\n   * scope until an Expression scope is seen.\n   */\n  recordAsyncArrowParametersError(at: Position): void {\n    const { stack } = this;\n    let i = stack.length - 1;\n    let scope: ExpressionScope = stack[i];\n    while (scope.canBeArrowParameterDeclaration()) {\n      if (\n        scope.type === ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration\n      ) {\n        scope.recordDeclarationError(Errors.AwaitBindingIdentifier, at);\n      }\n      scope = stack[--i];\n    }\n  }\n\n  validateAsPattern(): void {\n    const { stack } = this;\n    const currentScope = stack[stack.length - 1];\n    if (!currentScope.canBeArrowParameterDeclaration()) return;\n    currentScope.iterateErrors(([toParseError, loc]) => {\n      this.parser.raise(toParseError, loc);\n      // iterate from parent scope\n      let i = stack.length - 2;\n      let scope = stack[i];\n      while (scope.canBeArrowParameterDeclaration()) {\n        scope.clearDeclarationError(loc.index);\n        scope = stack[--i];\n      }\n    });\n  }\n}\n\nexport function newParameterDeclarationScope() {\n  return new ExpressionScope(ExpressionScopeType.kParameterDeclaration);\n}\n\nexport function newArrowHeadScope() {\n  return new ArrowHeadParsingScope(\n    ExpressionScopeType.kMaybeArrowParameterDeclaration,\n  );\n}\n\nexport function newAsyncArrowScope() {\n  return new ArrowHeadParsingScope(\n    ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration,\n  );\n}\n\nexport function newExpressionScope() {\n  return new ExpressionScope();\n}\n", "import type { Position } from \"../util/location.ts\";\nimport {\n  tokenIsLiteralPropertyName,\n  tt,\n  type TokenType,\n} from \"../tokenizer/types.ts\";\nimport Tokenizer from \"../tokenizer/index.ts\";\nimport type State from \"../tokenizer/state.ts\";\nimport type {\n  EstreePropertyDefinition,\n  Node,\n  ObjectMethod,\n  ObjectProperty,\n  PrivateName,\n} from \"../types.d.ts\";\nimport { hasNewLine } from \"../util/whitespace.ts\";\nimport { isIdentifierChar } from \"../util/identifier.ts\";\nimport ClassScopeHandler from \"../util/class-scope.ts\";\nimport ExpressionScopeHandler from \"../util/expression-scope.ts\";\nimport { ScopeFlag } from \"../util/scopeflags.ts\";\nimport ProductionParameterHandler, {\n  ParamKind,\n} from \"../util/production-parameter.ts\";\nimport {\n  Errors,\n  type ParseError,\n  type ParseErrorConstructor,\n} from \"../parse-error.ts\";\nimport type Parser from \"./index.ts\";\n\nimport type ScopeHandler from \"../util/scope.ts\";\nimport { OptionFlags } from \"../options.ts\";\n\ntype TryParse<Node, Error, Thrown, Aborted, FailState> = {\n  node: Node;\n  error: Error;\n  thrown: Thrown;\n  aborted: Aborted;\n  failState: FailState;\n};\n\n// ## Parser utilities\n\nexport default abstract class UtilParser extends Tokenizer {\n  // Forward-declaration: defined in parser/index.js\n  abstract getScopeHandler(): new (...args: any) => ScopeHandler;\n\n  addExtra(\n    node: Partial<Node>,\n    key: string,\n    value: any,\n    enumerable: boolean = true,\n  ): void {\n    if (!node) return;\n\n    let { extra } = node;\n    if (extra == null) {\n      extra = {};\n      node.extra = extra;\n    }\n\n    if (enumerable) {\n      extra[key] = value;\n    } else {\n      Object.defineProperty(extra, key, { enumerable, value });\n    }\n  }\n\n  // Tests whether parsed token is a contextual keyword.\n\n  isContextual(token: TokenType): boolean {\n    return this.state.type === token && !this.state.containsEsc;\n  }\n\n  isUnparsedContextual(nameStart: number, name: string): boolean {\n    if (this.input.startsWith(name, nameStart)) {\n      const nextCh = this.input.charCodeAt(nameStart + name.length);\n      return !(\n        isIdentifierChar(nextCh) ||\n        // check if `nextCh is between 0xd800 - 0xdbff,\n        // if `nextCh` is NaN, `NaN & 0xfc00` is 0, the function\n        // returns true\n        (nextCh & 0xfc00) === 0xd800\n      );\n    }\n    return false;\n  }\n\n  isLookaheadContextual(name: string): boolean {\n    const next = this.nextTokenStart();\n    return this.isUnparsedContextual(next, name);\n  }\n\n  // Consumes contextual keyword if possible.\n\n  eatContextual(token: TokenType): boolean {\n    if (this.isContextual(token)) {\n      this.next();\n      return true;\n    }\n    return false;\n  }\n\n  // Asserts that following token is given contextual keyword.\n\n  expectContextual(\n    token: TokenType,\n    toParseError?: ParseErrorConstructor<any>,\n  ): void {\n    if (!this.eatContextual(token)) {\n      if (toParseError != null) {\n        throw this.raise(toParseError, this.state.startLoc);\n      }\n      this.unexpected(null, token);\n    }\n  }\n\n  // Test whether a semicolon can be inserted at the current position.\n\n  canInsertSemicolon(): boolean {\n    return (\n      this.match(tt.eof) ||\n      this.match(tt.braceR) ||\n      this.hasPrecedingLineBreak()\n    );\n  }\n\n  hasPrecedingLineBreak(): boolean {\n    return hasNewLine(\n      this.input,\n      this.offsetToSourcePos(this.state.lastTokEndLoc!.index),\n      this.state.start,\n    );\n  }\n\n  hasFollowingLineBreak(): boolean {\n    return hasNewLine(this.input, this.state.end, this.nextTokenStart());\n  }\n\n  isLineTerminator(): boolean {\n    return this.eat(tt.semi) || this.canInsertSemicolon();\n  }\n\n  // Consume a semicolon, or, failing that, see if we are allowed to\n  // pretend that there is a semicolon at this position.\n\n  semicolon(allowAsi: boolean = true): void {\n    if (allowAsi ? this.isLineTerminator() : this.eat(tt.semi)) return;\n    this.raise(Errors.MissingSemicolon, this.state.lastTokEndLoc!);\n  }\n\n  // Expect a token of a given type. If found, consume it, otherwise,\n  // raise an unexpected token error at given pos.\n\n  expect(type: TokenType, loc?: Position | null): void {\n    if (!this.eat(type)) {\n      this.unexpected(loc, type);\n    }\n  }\n\n  // tryParse will clone parser state.\n  // It is expensive and should be used with cautions\n  tryParse<T extends Node | ReadonlyArray<Node> | null>(\n    fn: (abort: (node?: T) => never) => T,\n    oldState: State = this.state.clone(),\n  ):\n    | TryParse<T, null, false, false, null>\n    | TryParse<T | null, ParseError<any>, boolean, false, State>\n    | TryParse<T | null, null, false, true, State> {\n    const abortSignal: {\n      node: T | null;\n    } = { node: null };\n    try {\n      const node = fn((node = null as T) => {\n        abortSignal.node = node;\n        // eslint-disable-next-line @typescript-eslint/only-throw-error\n        throw abortSignal;\n      });\n      if (this.state.errors.length > oldState.errors.length) {\n        const failState = this.state;\n        this.state = oldState;\n        // tokensLength should be preserved during error recovery mode\n        // since the parser does not halt and will instead parse the\n        // remaining tokens\n        this.state.tokensLength = failState.tokensLength;\n        return {\n          node,\n          error: failState.errors[oldState.errors.length],\n          thrown: false,\n          aborted: false,\n          failState,\n        };\n      }\n\n      return {\n        node: node!,\n        error: null,\n        thrown: false,\n        aborted: false,\n        failState: null,\n      };\n    } catch (error) {\n      const failState = this.state;\n      this.state = oldState;\n      if (error instanceof SyntaxError) {\n        // @ts-expect-error casting general syntax error to parse error\n        return { node: null, error, thrown: true, aborted: false, failState };\n      }\n      if (error === abortSignal) {\n        return {\n          node: abortSignal.node,\n          error: null,\n          thrown: false,\n          aborted: true,\n          failState,\n        };\n      }\n\n      throw error;\n    }\n  }\n\n  checkExpressionErrors(\n    refExpressionErrors: ExpressionErrors | undefined | null,\n    andThrow: boolean,\n  ) {\n    if (!refExpressionErrors) return false;\n    const {\n      shorthandAssignLoc,\n      doubleProtoLoc,\n      privateKeyLoc,\n      optionalParametersLoc,\n      voidPatternLoc,\n    } = refExpressionErrors;\n\n    const hasErrors =\n      !!shorthandAssignLoc ||\n      !!doubleProtoLoc ||\n      !!optionalParametersLoc ||\n      !!privateKeyLoc ||\n      !!voidPatternLoc;\n\n    if (!andThrow) {\n      return hasErrors;\n    }\n\n    if (shorthandAssignLoc != null) {\n      this.raise(Errors.InvalidCoverInitializedName, shorthandAssignLoc);\n    }\n\n    if (doubleProtoLoc != null) {\n      this.raise(Errors.DuplicateProto, doubleProtoLoc);\n    }\n\n    if (privateKeyLoc != null) {\n      this.raise(Errors.UnexpectedPrivateField, privateKeyLoc);\n    }\n\n    if (optionalParametersLoc != null) {\n      this.unexpected(optionalParametersLoc);\n    }\n\n    if (voidPatternLoc != null) {\n      this.raise(Errors.InvalidCoverDiscardElement, voidPatternLoc);\n    }\n  }\n\n  /**\n   * Test if current token is a literal property name\n   * https://tc39.es/ecma262/#prod-LiteralPropertyName\n   * LiteralPropertyName:\n   *   IdentifierName\n   *   StringLiteral\n   *   NumericLiteral\n   *   BigIntLiteral\n   */\n  isLiteralPropertyName(): boolean {\n    return tokenIsLiteralPropertyName(this.state.type);\n  }\n\n  /**\n   * Test if given node is a PrivateName\n   * will be overridden in ESTree plugin\n   */\n  isPrivateName(node: Node): node is PrivateName {\n    return node.type === \"PrivateName\";\n  }\n\n  /**\n   * Return the string value of a given private name\n   * WITHOUT `#`\n   * @see {@link https://tc39.es/ecma262/#sec-static-semantics-stringvalue}\n   */\n  getPrivateNameSV(node: PrivateName): string {\n    return node.id.name;\n  }\n\n  /**\n   * Return whether the given node is a member/optional chain that\n   * contains a private name as its property\n   * It is overridden in ESTree plugin\n   */\n  hasPropertyAsPrivateName(node: Node): boolean {\n    return (\n      (node.type === \"MemberExpression\" ||\n        node.type === \"OptionalMemberExpression\") &&\n      this.isPrivateName(node.property)\n    );\n  }\n\n  isObjectProperty(\n    node: Node,\n  ): node is ObjectProperty | EstreePropertyDefinition {\n    return node.type === \"ObjectProperty\";\n  }\n\n  isObjectMethod(node: Node): node is ObjectMethod {\n    return node.type === \"ObjectMethod\";\n  }\n\n  initializeScopes(\n    this: Parser,\n    inModule: boolean = this.options.sourceType === \"module\",\n  ): () => void {\n    // Initialize state\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n\n    const oldExportedIdentifiers = this.exportedIdentifiers;\n    this.exportedIdentifiers = new Set();\n\n    // initialize scopes\n    const oldInModule = this.inModule;\n    this.inModule = inModule;\n\n    const oldScope = this.scope;\n    const ScopeHandler = this.getScopeHandler();\n    this.scope = new ScopeHandler(this, inModule);\n\n    const oldProdParam = this.prodParam;\n    this.prodParam = new ProductionParameterHandler();\n\n    const oldClassScope = this.classScope;\n    this.classScope = new ClassScopeHandler(this);\n\n    const oldExpressionScope = this.expressionScope;\n    this.expressionScope = new ExpressionScopeHandler(this);\n\n    return () => {\n      // Revert state\n      this.state.labels = oldLabels;\n      this.exportedIdentifiers = oldExportedIdentifiers;\n\n      // Revert scopes\n      this.inModule = oldInModule;\n      this.scope = oldScope;\n      this.prodParam = oldProdParam;\n      this.classScope = oldClassScope;\n      this.expressionScope = oldExpressionScope;\n    };\n  }\n\n  enterInitialScopes() {\n    let paramFlags = ParamKind.PARAM;\n    if (\n      this.inModule ||\n      this.optionFlags & OptionFlags.AllowAwaitOutsideFunction\n    ) {\n      paramFlags |= ParamKind.PARAM_AWAIT;\n    }\n    if (this.optionFlags & OptionFlags.AllowYieldOutsideFunction) {\n      paramFlags |= ParamKind.PARAM_YIELD;\n    }\n    // The inModule flag ensures that the module block within a CommonJS source\n    // will be treated as an ES module.\n    const isCommonJS = !this.inModule && this.options.sourceType === \"commonjs\";\n    if (\n      isCommonJS ||\n      this.optionFlags & OptionFlags.AllowReturnOutsideFunction\n    ) {\n      paramFlags |= ParamKind.PARAM_RETURN;\n    }\n    this.prodParam.enter(paramFlags);\n    let scopeFlags = isCommonJS ? ScopeFlag.FUNCTION : ScopeFlag.PROGRAM;\n    if (this.optionFlags & OptionFlags.AllowNewTargetOutsideFunction) {\n      scopeFlags |= ScopeFlag.NEW_TARGET;\n    }\n    if (process.env.BABEL_8_BREAKING) {\n      if (this.optionFlags & OptionFlags.AllowSuperOutsideMethod) {\n        scopeFlags |= ScopeFlag.SUPER | ScopeFlag.DIRECT_SUPER;\n      }\n    }\n    this.scope.enter(scopeFlags);\n  }\n\n  checkDestructuringPrivate(refExpressionErrors: ExpressionErrors) {\n    const { privateKeyLoc } = refExpressionErrors;\n    if (privateKeyLoc !== null) {\n      this.expectPlugin(\"destructuringPrivate\", privateKeyLoc);\n    }\n  }\n}\n\n/**\n * The ExpressionErrors is a context struct used to track ambiguous patterns\n * When we are sure the parsed pattern is a RHS, which means it is not a pattern,\n * we will throw on this position on invalid assign syntax, otherwise it will be reset to null\n *\n * Types of ExpressionErrors:\n *\n * - **shorthandAssignLoc**: track initializer `=` position\n * - **doubleProtoLoc**: track the duplicate `__proto__` key position\n * - **privateKeyLoc**: track private key `#p` position\n * - **optionalParametersLoc**: track the optional parameter (`?`).\n *   It's only used by typescript and flow plugins\n */\nexport class ExpressionErrors {\n  shorthandAssignLoc: Position | undefined | null = null;\n  doubleProtoLoc: Position | undefined | null = null;\n  privateKeyLoc: Position | undefined | null = null;\n  optionalParametersLoc: Position | undefined | null = null;\n  voidPatternLoc: Position | undefined | null = null;\n}\n", "import UtilParser from \"./util.ts\";\nimport { SourceLocation, type Position } from \"../util/location.ts\";\nimport type {\n  Comment,\n  Node as NodeType,\n  NodeBase,\n  EstreeLiteral,\n  Identifier,\n  Placeholder,\n  StringLiteral,\n} from \"../types.ts\";\nimport { OptionFlags } from \"../options.ts\";\n\n// Start an AST node, attaching a start offset.\n\nclass Node implements NodeBase {\n  constructor(parser: UtilParser, pos: number, loc: Position) {\n    this.start = pos;\n    this.end = 0;\n    this.loc = new SourceLocation(loc);\n    if (parser?.optionFlags & OptionFlags.Ranges) this.range = [pos, 0];\n    if (parser?.filename) this.loc.filename = parser.filename;\n  }\n\n  type: string = \"\";\n  declare start: number;\n  declare end: number;\n  declare loc: SourceLocation;\n  declare range: [number, number];\n  declare leadingComments: Array<Comment>;\n  declare trailingComments: Array<Comment>;\n  declare innerComments: Array<Comment>;\n  declare extra: {\n    [key: string]: any;\n  };\n}\nconst NodePrototype = Node.prototype;\n\nif (!process.env.BABEL_8_BREAKING) {\n  // @ts-expect-error __clone is not defined in Node prototype\n  NodePrototype.__clone = function (): Node {\n    const newNode = new Node(undefined!, this.start, this.loc.start);\n    const keys = Object.keys(this) as (keyof Node)[];\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      // Do not clone comments that are already attached to the node\n      if (\n        key !== \"leadingComments\" &&\n        key !== \"trailingComments\" &&\n        key !== \"innerComments\"\n      ) {\n        // @ts-expect-error cloning this to newNode\n        newNode[key] = this[key];\n      }\n    }\n\n    return newNode;\n  };\n}\n\nexport type Undone<T extends NodeType> = Omit<T, \"type\">;\n\nexport abstract class NodeUtils extends UtilParser {\n  startNode<T extends NodeType = never>(): Undone<T> {\n    const loc = this.state.startLoc;\n    return new Node(this, loc.index, loc) as unknown as Undone<T>;\n  }\n\n  startNodeAt<T extends NodeType = never>(loc: Position): Undone<T> {\n    return new Node(this, loc.index, loc) as unknown as Undone<T>;\n  }\n\n  /** Start a new node with a previous node's location. */\n  startNodeAtNode<T extends NodeType = never>(\n    type: Undone<NodeType>,\n  ): Undone<T> {\n    return this.startNodeAt(type.loc.start);\n  }\n\n  // Finish an AST node, adding `type` and `end` properties.\n\n  finishNode<T extends NodeType>(node: Undone<T>, type: T[\"type\"]): T {\n    return this.finishNodeAt(node, type, this.state.lastTokEndLoc!);\n  }\n\n  // Finish node at given position\n\n  finishNodeAt<T extends NodeType>(\n    node: Omit<T, \"type\">,\n    type: T[\"type\"],\n    endLoc: Position,\n  ): T {\n    if (process.env.NODE_ENV !== \"production\" && node.end > 0) {\n      throw new Error(\n        \"Do not call finishNode*() twice on the same node.\" +\n          \" Instead use resetEndLocation() or change type directly.\",\n      );\n    }\n    (node as T).type = type;\n    node.end = endLoc.index;\n    node.loc.end = endLoc;\n    if (this.optionFlags & OptionFlags.Ranges) node.range![1] = endLoc.index;\n    if (this.optionFlags & OptionFlags.AttachComment) {\n      this.processComment(node as T);\n    }\n    return node as T;\n  }\n\n  resetStartLocation(node: NodeBase, startLoc: Position): void {\n    node.start = startLoc.index;\n    node.loc.start = startLoc;\n    if (this.optionFlags & OptionFlags.Ranges) node.range![0] = startLoc.index;\n  }\n\n  resetEndLocation(\n    node: NodeBase,\n    endLoc: Position = this.state.lastTokEndLoc!,\n  ): void {\n    node.end = endLoc.index;\n    node.loc.end = endLoc;\n    if (this.optionFlags & OptionFlags.Ranges) node.range![1] = endLoc.index;\n  }\n\n  /**\n   * Reset the start location of node to the start location of locationNode\n   */\n  resetStartLocationFromNode(node: NodeBase, locationNode: NodeBase): void {\n    this.resetStartLocation(node, locationNode.loc.start);\n  }\n\n  castNodeTo<T extends NodeType[\"type\"]>(\n    node: NodeType,\n    type: T,\n  ): Extract<NodeType, { type: T }> {\n    node.type = type;\n    return node as Extract<NodeType, { type: T }>;\n  }\n\n  cloneIdentifier<T extends Identifier | Placeholder>(node: T): T {\n    // We don't need to clone `typeAnnotations` and `optional`: because\n    // cloneIdentifier is only used in object shorthand and named import/export.\n    // Neither of them allow type annotations after the identifier or optional identifier\n    const { type, start, end, loc, range, name } = node;\n    const cloned = Object.create(NodePrototype);\n    cloned.type = type;\n    cloned.start = start;\n    cloned.end = end;\n    cloned.loc = loc;\n    cloned.range = range;\n    cloned.name = name;\n    if (node.extra) cloned.extra = node.extra;\n    return cloned;\n  }\n\n  cloneStringLiteral<T extends StringLiteral | EstreeLiteral | Placeholder>(\n    node: T,\n  ): T {\n    const { type, start, end, loc, range, extra } = node;\n    const cloned = Object.create(NodePrototype);\n    cloned.type = type;\n    cloned.start = start;\n    cloned.end = end;\n    cloned.loc = loc;\n    cloned.range = range;\n    cloned.extra = extra;\n    cloned.value = (node as StringLiteral).value;\n    return cloned;\n  }\n}\n", "import * as charCodes from \"charcodes\";\nimport { tt, type TokenType } from \"../tokenizer/types.ts\";\nimport type {\n  AssignmentPattern,\n  TSParameterProperty,\n  Decorator,\n  Expression,\n  Identifier,\n  Node,\n  Pattern,\n  RestElement,\n  SpreadElement,\n  ObjectOrClassMember,\n  ClassMember,\n  ObjectMember,\n  TsNamedTypeElementBase,\n  PrivateName,\n  ObjectExpression,\n  ObjectPattern,\n  ArrayPattern,\n  AssignmentProperty,\n  Assignable,\n  VoidPattern,\n} from \"../types.ts\";\nimport type { Position } from \"../util/location.ts\";\nimport {\n  isStrictBindOnlyReservedWord,\n  isStrictBindReservedWord,\n} from \"../util/identifier.ts\";\nimport { NodeUtils, type Undone } from \"./node.ts\";\nimport { BindingFlag } from \"../util/scopeflags.ts\";\nimport type { ExpressionErrors } from \"./util.ts\";\nimport { Errors, type LValAncestor } from \"../parse-error.ts\";\nimport type Parser from \"./index.ts\";\nimport { OptionFlags } from \"../options.ts\";\n\nconst unwrapParenthesizedExpression = (node: Node): Node => {\n  return node.type === \"ParenthesizedExpression\"\n    ? unwrapParenthesizedExpression(node.expression)\n    : node;\n};\n\nexport const enum ParseBindingListFlags {\n  ALLOW_EMPTY = 1 << 0,\n  IS_FUNCTION_PARAMS = 1 << 1,\n  IS_CONSTRUCTOR_PARAMS = 1 << 2,\n}\n\nexport default abstract class LValParser extends NodeUtils {\n  // Forward-declaration: defined in expression.js\n  abstract parseIdentifier(liberal?: boolean): Identifier;\n  abstract parseMaybeAssign(\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ): Expression;\n\n  abstract parseMaybeAssignAllowIn(\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ): Expression;\n\n  abstract parseObjectLike<T extends ObjectPattern | ObjectExpression>(\n    close: TokenType,\n    isPattern: boolean,\n    isRecord?: boolean,\n    refExpressionErrors?: ExpressionErrors,\n  ): T;\n  abstract parseObjPropValue(\n    prop: any,\n    startLoc: Position | null,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): void;\n  abstract parsePropertyName(\n    prop: ObjectOrClassMember | ClassMember | TsNamedTypeElementBase,\n  ): void;\n  abstract parsePrivateName(): PrivateName;\n  // Forward-declaration: defined in statement.js\n  abstract parseDecorator(): Decorator;\n\n  /**\n   * Convert existing expression atom to assignable pattern\n   * if possible. Also checks invalid destructuring targets:\n   *\n   * - Parenthesized Destructuring patterns\n   * - RestElement is not the last element\n   * - Missing `=` in assignment pattern\n   *\n   * NOTE: There is a corresponding \"isAssignable\" method.\n   * When this one is updated, please check if also that one needs to be updated.\n   *\n   * @param node The expression atom\n   * @param isLHS Whether we are parsing a LeftHandSideExpression.\n   *              If isLHS is `true`, the following cases are allowed: `[(a)] = [0]`, `[(a.b)] = [0]`\n   *              If isLHS is `false`, we are in an arrow function parameters list.\n   */\n  toAssignable(node: Node, isLHS: boolean = false): asserts node is Assignable {\n    let parenthesized = undefined;\n    if (node.type === \"ParenthesizedExpression\" || node.extra?.parenthesized) {\n      parenthesized = unwrapParenthesizedExpression(node);\n      if (isLHS) {\n        // an LHS can be reinterpreted to a binding pattern but not vice versa.\n        // therefore a parenthesized identifier is ambiguous until we are sure it is an assignment expression\n        // i.e. `([(a) = []] = []) => {}`\n        // see also `recordArrowParameterBindingError` signature in packages/babel-parser/src/util/expression-scope.js\n        if (parenthesized.type === \"Identifier\") {\n          this.expressionScope.recordArrowParameterBindingError(\n            Errors.InvalidParenthesizedAssignment,\n            node,\n          );\n        } else if (\n          parenthesized.type !== \"CallExpression\" &&\n          parenthesized.type !== \"MemberExpression\" &&\n          !this.isOptionalMemberExpression(parenthesized)\n        ) {\n          // A parenthesized member expression can be in LHS but not in pattern.\n          // If the LHS is later interpreted as a pattern, `checkLVal` will throw for member expression binding\n          // i.e. `([(a.b) = []] = []) => {}`\n          this.raise(Errors.InvalidParenthesizedAssignment, node);\n        }\n      } else {\n        this.raise(Errors.InvalidParenthesizedAssignment, node);\n      }\n    }\n\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n      case \"VoidPattern\":\n        break;\n\n      case \"ObjectExpression\":\n        this.castNodeTo(node, \"ObjectPattern\");\n        for (\n          let i = 0, length = node.properties.length, last = length - 1;\n          i < length;\n          i++\n        ) {\n          const prop = node.properties[i];\n          const isLast = i === last;\n          this.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n\n          if (\n            isLast &&\n            (prop as Node).type === \"RestElement\" &&\n            node.extra?.trailingCommaLoc\n          ) {\n            this.raise(Errors.RestTrailingComma, node.extra.trailingCommaLoc);\n          }\n        }\n        break;\n\n      case \"ObjectProperty\": {\n        const { key, value } = node;\n        if (this.isPrivateName(key)) {\n          this.classScope.usePrivateName(\n            this.getPrivateNameSV(key),\n            key.loc.start,\n          );\n        }\n        this.toAssignable(value, isLHS);\n        break;\n      }\n\n      case \"SpreadElement\": {\n        throw new Error(\n          \"Internal @babel/parser error (this is a bug, please report it).\" +\n            \" SpreadElement should be converted by .toAssignable's caller.\",\n        );\n      }\n\n      case \"ArrayExpression\":\n        this.castNodeTo(node, \"ArrayPattern\");\n        this.toAssignableList(\n          node.elements,\n          node.extra?.trailingCommaLoc,\n          isLHS,\n        );\n        break;\n\n      case \"AssignmentExpression\":\n        if (node.operator !== \"=\") {\n          this.raise(Errors.MissingEqInAssignment, node.left.loc.end);\n        }\n\n        this.castNodeTo(node, \"AssignmentPattern\");\n        // @ts-expect-error delete non-optional properties\n        delete node.operator;\n        if (node.left.type === \"VoidPattern\") {\n          this.raise(Errors.VoidPatternInitializer, node.left);\n        }\n        this.toAssignable(node.left, isLHS);\n        break;\n\n      case \"ParenthesizedExpression\":\n        /*::invariant (parenthesized !== undefined) */\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n        this.toAssignable(parenthesized!, isLHS);\n        break;\n\n      default:\n      // We don't know how to deal with this node. It will\n      // be reported by a later call to checkLVal\n    }\n  }\n\n  toAssignableObjectExpressionProp(\n    prop: Node,\n    isLast: boolean,\n    isLHS: boolean,\n  ) {\n    if (prop.type === \"ObjectMethod\") {\n      this.raise(\n        prop.kind === \"get\" || prop.kind === \"set\"\n          ? Errors.PatternHasAccessor\n          : Errors.PatternHasMethod,\n        prop.key,\n      );\n    } else if (prop.type === \"SpreadElement\") {\n      this.castNodeTo(prop, \"RestElement\");\n      const arg = prop.argument;\n      this.checkToRestConversion(arg, /* allowPattern */ false);\n      this.toAssignable(arg, isLHS);\n\n      if (!isLast) {\n        this.raise(Errors.RestTrailingComma, prop);\n      }\n    } else {\n      this.toAssignable(prop, isLHS);\n    }\n  }\n\n  // Convert list of expression atoms to binding list.\n\n  toAssignableList(\n    exprList: (\n      | Expression\n      | SpreadElement\n      | RestElement\n      | VoidPattern\n      | AssignmentPattern\n      | null\n    )[],\n    trailingCommaLoc: Position | undefined | null,\n    isLHS: boolean,\n  ): void {\n    const end = exprList.length - 1;\n\n    for (let i = 0; i <= end; i++) {\n      const elt = exprList[i];\n      if (!elt) continue;\n\n      this.toAssignableListItem(\n        exprList as (\n          | Expression\n          | SpreadElement\n          | RestElement\n          | VoidPattern\n          | AssignmentPattern\n        )[],\n        i,\n        isLHS,\n      );\n\n      if (elt.type === \"RestElement\") {\n        if (i < end) {\n          this.raise(Errors.RestTrailingComma, elt);\n        } else if (trailingCommaLoc) {\n          this.raise(Errors.RestTrailingComma, trailingCommaLoc);\n        }\n      }\n    }\n  }\n\n  toAssignableListItem(\n    exprList: (\n      | Expression\n      | SpreadElement\n      | RestElement\n      | VoidPattern\n      | AssignmentPattern\n    )[],\n    index: number,\n    isLHS: boolean,\n  ): void {\n    const node = exprList[index];\n    if (node.type === \"SpreadElement\") {\n      this.castNodeTo(node, \"RestElement\");\n      const arg = node.argument;\n      this.checkToRestConversion(arg, /* allowPattern */ true);\n      this.toAssignable(arg, isLHS);\n    } else {\n      this.toAssignable(node, isLHS);\n    }\n  }\n\n  isAssignable(node: Node, isBinding?: boolean): boolean {\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n      case \"VoidPattern\":\n        return true;\n\n      case \"ObjectExpression\": {\n        const last = node.properties.length - 1;\n        return node.properties.every((prop, i) => {\n          return (\n            prop.type !== \"ObjectMethod\" &&\n            (i === last || prop.type !== \"SpreadElement\") &&\n            this.isAssignable(prop)\n          );\n        });\n      }\n\n      case \"ObjectProperty\":\n        return this.isAssignable(node.value);\n\n      case \"SpreadElement\":\n        return this.isAssignable(node.argument);\n\n      case \"ArrayExpression\":\n        return node.elements.every(\n          element => element === null || this.isAssignable(element),\n        );\n\n      case \"AssignmentExpression\":\n        return node.operator === \"=\";\n\n      case \"ParenthesizedExpression\":\n        return this.isAssignable(node.expression);\n\n      case \"MemberExpression\":\n      case \"OptionalMemberExpression\":\n        return !isBinding;\n\n      default:\n        return false;\n    }\n  }\n\n  // Convert list of expression atoms to a list of\n\n  toReferencedList(\n    exprList:\n      | ReadonlyArray<\n          Expression | SpreadElement | VoidPattern | AssignmentPattern | null\n        >\n      | ReadonlyArray<\n          Expression | RestElement | VoidPattern | AssignmentPattern | null\n        >,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    isParenthesizedExpr?: boolean,\n  ):\n    | ReadonlyArray<\n        Expression | SpreadElement | VoidPattern | AssignmentPattern | null\n      >\n    | ReadonlyArray<\n        Expression | RestElement | VoidPattern | AssignmentPattern | null\n      > {\n    return exprList;\n  }\n\n  toReferencedListDeep(\n    exprList:\n      | ReadonlyArray<\n          Expression | SpreadElement | VoidPattern | AssignmentPattern | null\n        >\n      | ReadonlyArray<\n          Expression | RestElement | VoidPattern | AssignmentPattern | null\n        >,\n    isParenthesizedExpr?: boolean,\n  ): void {\n    this.toReferencedList(exprList, isParenthesizedExpr);\n\n    for (const expr of exprList) {\n      if (expr?.type === \"ArrayExpression\") {\n        this.toReferencedListDeep(expr.elements);\n      }\n    }\n  }\n\n  // Parses spread element.\n\n  parseSpread(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): SpreadElement {\n    const node = this.startNode<SpreadElement>();\n    this.next();\n    node.argument = this.parseMaybeAssignAllowIn(\n      refExpressionErrors,\n      undefined,\n    );\n    return this.finishNode(node, \"SpreadElement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingRestElement\n  parseRestBinding(this: Parser): RestElement {\n    const node = this.startNode<RestElement>();\n    this.next(); // eat `...`\n    const argument = this.parseBindingAtom();\n    if (argument.type === \"VoidPattern\") {\n      this.raise(Errors.UnexpectedVoidPattern, argument);\n    }\n    node.argument = argument;\n    return this.finishNode(node, \"RestElement\");\n  }\n\n  // Parses lvalue (assignable) atom.\n  parseBindingAtom(this: Parser): Pattern {\n    // https://tc39.es/ecma262/#prod-BindingPattern\n    switch (this.state.type) {\n      case tt.bracketL: {\n        const node = this.startNode<ArrayPattern>();\n        this.next();\n        node.elements = this.parseBindingList(\n          tt.bracketR,\n          charCodes.rightSquareBracket,\n          ParseBindingListFlags.ALLOW_EMPTY,\n        );\n        return this.finishNode(node, \"ArrayPattern\");\n      }\n\n      case tt.braceL:\n        return this.parseObjectLike(tt.braceR, true);\n\n      case tt._void:\n        return this.parseVoidPattern(null);\n    }\n\n    // https://tc39.es/ecma262/#prod-BindingIdentifier\n    return this.parseIdentifier();\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingElementList\n  parseBindingList(\n    this: Parser,\n    close: TokenType,\n    closeCharCode: (typeof charCodes)[keyof typeof charCodes],\n    flags: ParseBindingListFlags.ALLOW_EMPTY,\n  ): Array<Pattern | null>;\n  parseBindingList(\n    this: Parser,\n    close: TokenType,\n    closeCharCode: (typeof charCodes)[keyof typeof charCodes],\n    flags: ParseBindingListFlags.IS_FUNCTION_PARAMS,\n  ): Array<Pattern | TSParameterProperty>;\n  parseBindingList(\n    this: Parser,\n    close: TokenType,\n    closeCharCode: (typeof charCodes)[keyof typeof charCodes],\n    flags: ParseBindingListFlags,\n  ): Array<Pattern | TSParameterProperty | null> {\n    const allowEmpty = flags & ParseBindingListFlags.ALLOW_EMPTY;\n\n    const elts: Array<Pattern | TSParameterProperty | null> = [];\n    let first = true;\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n      }\n      if (allowEmpty && this.match(tt.comma)) {\n        elts.push(null);\n      } else if (this.eat(close)) {\n        break;\n      } else if (this.match(tt.ellipsis)) {\n        let rest: Pattern = this.parseRestBinding();\n        if (\n          (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"flow\")) ||\n          flags & ParseBindingListFlags.IS_FUNCTION_PARAMS\n        ) {\n          rest = this.parseFunctionParamType(rest);\n        }\n        elts.push(rest);\n        if (!this.checkCommaAfterRest(closeCharCode)) {\n          this.expect(close);\n          break;\n        }\n      } else {\n        const decorators = [];\n        if (flags & ParseBindingListFlags.IS_FUNCTION_PARAMS) {\n          if (this.match(tt.at) && this.hasPlugin(\"decorators\")) {\n            this.raise(\n              Errors.UnsupportedParameterDecorator,\n              this.state.startLoc,\n            );\n          }\n          // invariant: hasPlugin(\"decorators-legacy\")\n          while (this.match(tt.at)) {\n            decorators.push(this.parseDecorator());\n          }\n        }\n        elts.push(this.parseBindingElement(flags, decorators));\n      }\n    }\n    return elts;\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingRestProperty\n  parseBindingRestProperty(\n    this: Parser,\n    prop: Undone<RestElement>,\n  ): RestElement {\n    this.next(); // eat '...'\n    if (this.hasPlugin(\"discardBinding\") && this.match(tt._void)) {\n      prop.argument = this.parseVoidPattern(null);\n      this.raise(Errors.UnexpectedVoidPattern, prop.argument);\n    } else {\n      // Don't use parseRestBinding() as we only allow Identifier here.\n      prop.argument = this.parseIdentifier();\n    }\n    this.checkCommaAfterRest(charCodes.rightCurlyBrace);\n    return this.finishNode(prop, \"RestElement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingProperty\n  parseBindingProperty(this: Parser): AssignmentProperty | RestElement {\n    const { type, startLoc } = this.state;\n    if (type === tt.ellipsis) {\n      return this.parseBindingRestProperty(this.startNode());\n    }\n\n    const prop = this.startNode<AssignmentProperty>();\n    if (type === tt.privateName) {\n      this.expectPlugin(\"destructuringPrivate\", startLoc);\n      this.classScope.usePrivateName(this.state.value, startLoc);\n      prop.key = this.parsePrivateName();\n    } else {\n      this.parsePropertyName(prop);\n    }\n    prop.method = false;\n    return this.parseObjPropValue(\n      prop,\n      startLoc,\n      false /* isGenerator */,\n      false /* isAsync */,\n      true /* isPattern */,\n      false /* isAccessor */,\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingElement\n  parseBindingElement(\n    this: Parser,\n    flags: ParseBindingListFlags,\n    decorators: Decorator[],\n  ): Pattern | TSParameterProperty {\n    const left = this.parseMaybeDefault();\n    if (\n      (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"flow\")) ||\n      flags & ParseBindingListFlags.IS_FUNCTION_PARAMS\n    ) {\n      this.parseFunctionParamType(left);\n    }\n    if (decorators.length) {\n      left.decorators = decorators;\n      this.resetStartLocationFromNode(left, decorators[0]);\n    }\n    const elt = this.parseMaybeDefault(left.loc.start, left);\n    return elt;\n  }\n\n  // Used by flow/typescript plugin to add type annotations to binding elements\n  parseFunctionParamType(param: Pattern): Pattern {\n    return param;\n  }\n\n  // Parses assignment pattern around given atom if possible.\n  // https://tc39.es/ecma262/#prod-BindingElement\n  parseMaybeDefault<P extends Pattern>(\n    this: Parser,\n    startLoc?: Position | null,\n    left?: P | null,\n  ): P | AssignmentPattern;\n  parseMaybeDefault(\n    this: Parser,\n    startLoc?: Position | null,\n    left?: Pattern | null,\n  ): Pattern {\n    startLoc ??= this.state.startLoc;\n    left = left ?? this.parseBindingAtom();\n    if (!this.eat(tt.eq)) return left;\n\n    const node = this.startNodeAt<AssignmentPattern>(startLoc);\n    if (left.type === \"VoidPattern\") {\n      this.raise(Errors.VoidPatternInitializer, left);\n    }\n    node.left = left;\n    node.right = this.parseMaybeAssignAllowIn();\n    return this.finishNode(node, \"AssignmentPattern\");\n  }\n  /**\n   * Return information use in determining whether a Node of a given type is an LVal,\n   * possibly given certain additional context information.\n   *\n   * Subclasser notes: This method has kind of a lot of mixed, but related,\n   * responsibilities. If we can definitively determine with the information\n   * provided that this either *is* or *isn't* a valid `LVal`, then the return\n   * value is easy: just return `true` or `false`. However, if it is a valid\n   * LVal *ancestor*, and thus its descendants must be subsequently visited to\n   * continue the \"investigation\", then this method should return the relevant\n   * child key as a `string`. In some special cases, you additionally want to\n   * convey that this node should be treated as if it were parenthesized. In\n   * that case, a tuple of [key: string, parenthesized: boolean] is returned.\n   * The `string`-only return option is actually just a shorthand for:\n   * `[key: string, parenthesized: false]`.\n   *\n   * @param type A Node `type` string\n   * @param disallowCallExpression Whether to disallow `CallExpression` as an LVal.\n   * @param isUnparenthesizedInAssign\n   *        Whether the node in question is unparenthesized and its parent\n   *        is either an assignment pattern or an assignment expression.\n   * @param binding\n   *        The binding operation that is being considered for this potential\n   *        LVal.\n   * @returns `true` or `false` if we can immediately determine whether the node\n   *          type in question can be treated as an `LVal`.\n   *          A `string` key to traverse if we must check this child.\n   *          A `[string, boolean]` tuple if we need to check this child and\n   *          treat is as parenthesized.\n   */\n  isValidLVal(\n    type: string,\n    disallowCallExpression: boolean,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    isUnparenthesizedInAssign: boolean,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    binding: BindingFlag,\n  ): string | boolean | [string, boolean] {\n    switch (type) {\n      case \"AssignmentPattern\":\n        return \"left\";\n      case \"RestElement\":\n        return \"argument\";\n      case \"ObjectProperty\":\n        return \"value\";\n      case \"ParenthesizedExpression\":\n        return \"expression\";\n      case \"ArrayPattern\":\n        return \"elements\";\n      case \"ObjectPattern\":\n        return \"properties\";\n      case \"VoidPattern\":\n        return true;\n      case \"CallExpression\":\n        if (\n          !disallowCallExpression &&\n          !this.state.strict &&\n          this.optionFlags & OptionFlags.AnnexB\n        ) {\n          return true;\n        }\n    }\n    return false;\n  }\n\n  // Overridden by the estree plugin\n  isOptionalMemberExpression(expression: Node): boolean {\n    return expression.type === \"OptionalMemberExpression\";\n  }\n\n  /**\n   * Verify that a target expression is an lval (something that can be assigned to).\n   *\n   * @param expression The expression in question to check.\n   * @param ancestor\n   *        The relevant ancestor to provide context information for the error\n   *        if the check fails.\n   * @param binding\n   *        The desired binding type. If the given expression is an identifier\n   *        and `binding` is not `BindingFlag.TYPE_NONE`, `checkLVal` will register binding\n   *        to the parser scope See also `src/util/scopeflags.js`\n   * @param checkClashes\n   *        An optional string set to check if an identifier name is included.\n   *        `checkLVal` will add checked identifier name to `checkClashes` It is\n   *        used in tracking duplicates in function parameter lists. If it is\n   *        false, `checkLVal` will skip duplicate checks\n   * @param strictModeChanged\n   *        Whether an identifier has been parsed in a sloppy context but should\n   *        be reinterpreted as strict-mode. e.g. `(arguments) => { \"use strict \"}`\n   * @param hasParenthesizedAncestor\n   *        This is only used internally during recursive calls, and you should\n   *        not have to set it yourself.\n   * @param disallowCallExpression Whether to disallow `CallExpression` as an LVal.\n   */\n\n  checkLVal(\n    expression:\n      | Expression\n      | ObjectMember\n      | RestElement\n      | Pattern\n      | TSParameterProperty,\n    ancestor: LValAncestor,\n    binding: BindingFlag = BindingFlag.TYPE_NONE,\n    checkClashes: Set<string> | false = false,\n    strictModeChanged: boolean = false,\n    hasParenthesizedAncestor: boolean = false,\n    disallowCallExpression: boolean = false,\n  ): void {\n    const type = expression.type;\n\n    // If we find here an ObjectMethod, it's because this was originally\n    // an ObjectExpression which has then been converted.\n    // toAssignable already reported this error with a nicer message.\n    if (this.isObjectMethod(expression)) return;\n\n    const isOptionalMemberExpression =\n      this.isOptionalMemberExpression(expression);\n\n    if (isOptionalMemberExpression || type === \"MemberExpression\") {\n      if (isOptionalMemberExpression) {\n        this.expectPlugin(\"optionalChainingAssign\", expression.loc.start);\n        if (ancestor.type !== \"AssignmentExpression\") {\n          this.raise(Errors.InvalidLhsOptionalChaining, expression, {\n            ancestor,\n          });\n        }\n      }\n\n      if (binding !== BindingFlag.TYPE_NONE) {\n        this.raise(Errors.InvalidPropertyBindingPattern, expression);\n      }\n      return;\n    }\n\n    if (type === \"Identifier\") {\n      this.checkIdentifier(expression, binding, strictModeChanged);\n\n      const { name } = expression;\n\n      if (checkClashes) {\n        if (checkClashes.has(name)) {\n          this.raise(Errors.ParamDupe, expression);\n        } else {\n          checkClashes.add(name);\n        }\n      }\n\n      return;\n    } else if (type === \"VoidPattern\" && ancestor.type === \"CatchClause\") {\n      this.raise(Errors.VoidPatternCatchClauseParam, expression);\n    }\n\n    const unwrappedExpression = unwrapParenthesizedExpression(expression);\n    disallowCallExpression ||=\n      unwrappedExpression.type === \"CallExpression\" &&\n      (unwrappedExpression.callee.type === \"Import\" ||\n        unwrappedExpression.callee.type === \"Super\");\n    const validity = this.isValidLVal(\n      type,\n      disallowCallExpression,\n      !(hasParenthesizedAncestor || expression.extra?.parenthesized) &&\n        ancestor.type === \"AssignmentExpression\",\n      binding,\n    );\n\n    if (validity === true) return;\n    if (validity === false) {\n      const ParseErrorClass =\n        binding === BindingFlag.TYPE_NONE\n          ? Errors.InvalidLhs\n          : Errors.InvalidLhsBinding;\n\n      this.raise(ParseErrorClass, expression, { ancestor });\n      return;\n    }\n\n    let key: string, isParenthesizedExpression: boolean;\n    if (typeof validity === \"string\") {\n      key = validity;\n      isParenthesizedExpression = type === \"ParenthesizedExpression\";\n    } else {\n      [key, isParenthesizedExpression] = validity;\n    }\n\n    const nextAncestor =\n      type === \"ArrayPattern\" || type === \"ObjectPattern\"\n        ? ({ type } as const)\n        : ancestor;\n\n    // @ts-expect-error key may not index expression.\n    const val = expression[key];\n    if (Array.isArray(val)) {\n      for (const child of val) {\n        if (child) {\n          this.checkLVal(\n            child,\n            nextAncestor,\n            binding,\n            checkClashes,\n            strictModeChanged,\n            isParenthesizedExpression,\n            true,\n          );\n        }\n      }\n    } else if (val) {\n      this.checkLVal(\n        val,\n        nextAncestor,\n        binding,\n        checkClashes,\n        strictModeChanged,\n        isParenthesizedExpression,\n        disallowCallExpression,\n      );\n    }\n  }\n\n  checkIdentifier(\n    at: Identifier,\n    bindingType: BindingFlag,\n    strictModeChanged: boolean = false,\n  ) {\n    if (\n      this.state.strict &&\n      (strictModeChanged\n        ? isStrictBindReservedWord(at.name, this.inModule)\n        : isStrictBindOnlyReservedWord(at.name))\n    ) {\n      if (bindingType === BindingFlag.TYPE_NONE) {\n        this.raise(Errors.StrictEvalArguments, at, { referenceName: at.name });\n      } else {\n        this.raise(Errors.StrictEvalArgumentsBinding, at, {\n          bindingName: at.name,\n        });\n      }\n    }\n\n    if (bindingType & BindingFlag.FLAG_NO_LET_IN_LEXICAL && at.name === \"let\") {\n      this.raise(Errors.LetInLexicalBinding, at);\n    }\n\n    if (!(bindingType & BindingFlag.TYPE_NONE)) {\n      this.declareNameFromIdentifier(at, bindingType);\n    }\n  }\n\n  declareNameFromIdentifier(identifier: Identifier, binding: BindingFlag) {\n    this.scope.declareName(identifier.name, binding, identifier.loc.start);\n  }\n\n  checkToRestConversion(node: Node, allowPattern: boolean): void {\n    switch (node.type) {\n      case \"ParenthesizedExpression\":\n        this.checkToRestConversion(node.expression, allowPattern);\n        break;\n      case \"Identifier\":\n      case \"MemberExpression\":\n        break;\n      case \"ArrayExpression\":\n      case \"ObjectExpression\":\n        if (allowPattern) break;\n      /* falls through */\n      default:\n        this.raise(Errors.InvalidRestAssignmentPattern, node);\n    }\n  }\n\n  checkCommaAfterRest(\n    close: (typeof charCodes)[keyof typeof charCodes],\n  ): boolean {\n    if (!this.match(tt.comma)) {\n      return false;\n    }\n\n    this.raise(\n      this.lookaheadCharCode() === close\n        ? Errors.RestTrailingComma\n        : Errors.ElementAfterRest,\n      this.state.startLoc,\n    );\n\n    return true;\n  }\n}\n", "import type State from \"../../tokenizer/state.ts\";\nimport {\n  tokenIsIdentifier,\n  tokenIsTSDeclarationStart,\n  tokenIsTSTypeOperator,\n  tokenOperatorPrecedence,\n  tokenIsKeywordOrIdentifier,\n  tt,\n  type TokenType,\n  tokenIsTemplate,\n  tokenCanStartExpression,\n} from \"../../tokenizer/types.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport type * as N from \"../../types.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { createPositionWithColumnOffset } from \"../../util/location.ts\";\nimport type Parser from \"../../parser/index.ts\";\nimport { ScopeFlag, BindingFlag } from \"../../util/scopeflags.ts\";\nimport TypeScriptScopeHandler from \"./scope.ts\";\nimport * as charCodes from \"charcodes\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport type { ParseStatementFlag } from \"../../parser/statement.ts\";\nimport { ParamKind } from \"../../util/production-parameter.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport type { Undone } from \"../../parser/node.ts\";\nimport type { ClassWithMixin, IJSXParserMixin } from \"../jsx/index.ts\";\nimport { ParseBindingListFlags } from \"../../parser/lval.ts\";\nimport { OptionFlags } from \"../../options.ts\";\nimport { isIdentifierChar, isIdentifierStart } from \"../../util/identifier.ts\";\n\nconst keywordAndTSRelationalOperator = /in(?:stanceof)?|as|satisfies/y;\n\ntype TsModifier =\n  | \"readonly\"\n  | \"abstract\"\n  | \"declare\"\n  | \"static\"\n  | \"override\"\n  | \"const\"\n  | N.Accessibility\n  | N.VarianceAnnotations;\n\nfunction nonNull<T>(x?: T | null): T {\n  if (x == null) {\n    throw new Error(`Unexpected ${x} value.`);\n  }\n  return x;\n}\n\nfunction assert(x: boolean): void {\n  if (!x) {\n    throw new Error(\"Assert fail\");\n  }\n}\n\ntype ParsingContext =\n  | \"EnumMembers\"\n  | \"HeritageClauseElement\"\n  | \"TupleElementTypes\"\n  | \"TypeMembers\"\n  | \"TypeParametersOrArguments\";\n\ntype ModifierBase = {\n  accessibility?: N.Accessibility;\n} & {\n  [key in TsModifier]?: boolean | undefined | null;\n};\n\n/* eslint sort-keys: \"error\" */\nconst TSErrors = ParseErrorEnum`typescript`({\n  AbstractMethodHasImplementation: ({ methodName }: { methodName: string }) =>\n    `Method '${methodName}' cannot have an implementation because it is marked abstract.`,\n  AbstractPropertyHasInitializer: ({\n    propertyName,\n  }: {\n    propertyName: string;\n  }) =>\n    `Property '${propertyName}' cannot have an initializer because it is marked abstract.`,\n  AccessorCannotBeOptional:\n    \"An 'accessor' property cannot be declared optional.\",\n  AccessorCannotDeclareThisParameter:\n    \"'get' and 'set' accessors cannot declare 'this' parameters.\",\n  AccessorCannotHaveTypeParameters: \"An accessor cannot have type parameters.\",\n  ClassMethodHasDeclare: \"Class methods cannot have the 'declare' modifier.\",\n  ClassMethodHasReadonly: \"Class methods cannot have the 'readonly' modifier.\",\n  ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference:\n    \"A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference.\",\n  ConstructorHasTypeParameters:\n    \"Type parameters cannot appear on a constructor declaration.\",\n  DeclareAccessor: ({ kind }: { kind: \"get\" | \"set\" }) =>\n    `'declare' is not allowed in ${kind}ters.`,\n  DeclareClassFieldHasInitializer:\n    \"Initializers are not allowed in ambient contexts.\",\n  DeclareFunctionHasImplementation:\n    \"An implementation cannot be declared in ambient contexts.\",\n  DuplicateAccessibilityModifier: ({\n    modifier,\n  }: {\n    modifier: N.Accessibility;\n  }) => `Accessibility modifier already seen: '${modifier}'.`,\n  DuplicateModifier: ({ modifier }: { modifier: TsModifier }) =>\n    `Duplicate modifier: '${modifier}'.`,\n  // `token` matches the terminology used by typescript:\n  // https://github.com/microsoft/TypeScript/blob/main/src/compiler/types.ts#L2915\n  EmptyHeritageClauseType: ({ token }: { token: \"extends\" | \"implements\" }) =>\n    `'${token}' list cannot be empty.`,\n  EmptyTypeArguments: \"Type argument list cannot be empty.\",\n  EmptyTypeParameters: \"Type parameter list cannot be empty.\",\n  ExpectedAmbientAfterExportDeclare:\n    \"'export declare' must be followed by an ambient declaration.\",\n  ImportAliasHasImportType: \"An import alias can not use 'import type'.\",\n  ImportReflectionHasImportType:\n    \"An `import module` declaration can not use `type` modifier\",\n  IncompatibleModifiers: ({\n    modifiers,\n  }: {\n    modifiers: [TsModifier, TsModifier];\n  }) =>\n    `'${modifiers[0]}' modifier cannot be used with '${modifiers[1]}' modifier.`,\n  IndexSignatureHasAbstract:\n    \"Index signatures cannot have the 'abstract' modifier.\",\n  IndexSignatureHasAccessibility: ({\n    modifier,\n  }: {\n    modifier: N.Accessibility;\n  }) =>\n    `Index signatures cannot have an accessibility modifier ('${modifier}').`,\n  IndexSignatureHasDeclare:\n    \"Index signatures cannot have the 'declare' modifier.\",\n  IndexSignatureHasOverride:\n    \"'override' modifier cannot appear on an index signature.\",\n  IndexSignatureHasStatic:\n    \"Index signatures cannot have the 'static' modifier.\",\n  InitializerNotAllowedInAmbientContext:\n    \"Initializers are not allowed in ambient contexts.\",\n  InvalidHeritageClauseType: ({ token }: { token: \"extends\" | \"implements\" }) =>\n    `'${token}' list can only include identifiers or qualified-names with optional type arguments.`,\n  InvalidModifierOnAwaitUsingDeclaration: (modifier: TsModifier) =>\n    `'${modifier}' modifier cannot appear on an await using declaration.`,\n  InvalidModifierOnTypeMember: ({ modifier }: { modifier: TsModifier }) =>\n    `'${modifier}' modifier cannot appear on a type member.`,\n  InvalidModifierOnTypeParameter: ({ modifier }: { modifier: TsModifier }) =>\n    `'${modifier}' modifier cannot appear on a type parameter.`,\n  InvalidModifierOnTypeParameterPositions: ({\n    modifier,\n  }: {\n    modifier: TsModifier;\n  }) =>\n    `'${modifier}' modifier can only appear on a type parameter of a class, interface or type alias.`,\n\n  InvalidModifierOnUsingDeclaration: (modifier: TsModifier) =>\n    `'${modifier}' modifier cannot appear on a using declaration.`,\n  InvalidModifiersOrder: ({\n    orderedModifiers,\n  }: {\n    orderedModifiers: [TsModifier, TsModifier];\n  }) =>\n    `'${orderedModifiers[0]}' modifier must precede '${orderedModifiers[1]}' modifier.`,\n  InvalidPropertyAccessAfterInstantiationExpression:\n    \"Invalid property access after an instantiation expression. \" +\n    \"You can either wrap the instantiation expression in parentheses, or delete the type arguments.\",\n  InvalidTupleMemberLabel:\n    \"Tuple members must be labeled with a simple identifier.\",\n  MissingInterfaceName:\n    \"'interface' declarations must be followed by an identifier.\",\n  NonAbstractClassHasAbstractMethod:\n    \"Abstract methods can only appear within an abstract class.\",\n  NonClassMethodPropertyHasAbstractModifier:\n    \"'abstract' modifier can only appear on a class, method, or property declaration.\",\n  OptionalTypeBeforeRequired:\n    \"A required element cannot follow an optional element.\",\n  OverrideNotInSubClass:\n    \"This member cannot have an 'override' modifier because its containing class does not extend another class.\",\n  PatternIsOptional:\n    \"A binding pattern parameter cannot be optional in an implementation signature.\",\n  PrivateElementHasAbstract:\n    \"Private elements cannot have the 'abstract' modifier.\",\n  PrivateElementHasAccessibility: ({\n    modifier,\n  }: {\n    modifier: N.Accessibility;\n  }) =>\n    `Private elements cannot have an accessibility modifier ('${modifier}').`,\n  ReadonlyForMethodSignature:\n    \"'readonly' modifier can only appear on a property declaration or index signature.\",\n  ReservedArrowTypeParam:\n    \"This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma, as in `<T,>() => ...`.\",\n  ReservedTypeAssertion:\n    \"This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead.\",\n  SetAccessorCannotHaveOptionalParameter:\n    \"A 'set' accessor cannot have an optional parameter.\",\n  SetAccessorCannotHaveRestParameter:\n    \"A 'set' accessor cannot have rest parameter.\",\n  SetAccessorCannotHaveReturnType:\n    \"A 'set' accessor cannot have a return type annotation.\",\n  SingleTypeParameterWithoutTrailingComma: ({\n    typeParameterName,\n  }: {\n    typeParameterName: string;\n  }) =>\n    `Single type parameter ${typeParameterName} should have a trailing comma. Example usage: <${typeParameterName},>.`,\n  StaticBlockCannotHaveModifier:\n    \"Static class blocks cannot have any modifier.\",\n  TupleOptionalAfterType:\n    \"A labeled tuple optional element must be declared using a question mark after the name and before the colon (`name?: type`), rather than after the type (`name: type?`).\",\n  TypeAnnotationAfterAssign:\n    \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n  TypeImportCannotSpecifyDefaultAndNamed:\n    \"A type-only import can specify a default import or named bindings, but not both.\",\n  TypeModifierIsUsedInTypeExports:\n    \"The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement.\",\n  TypeModifierIsUsedInTypeImports:\n    \"The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement.\",\n  UnexpectedParameterModifier:\n    \"A parameter property is only allowed in a constructor implementation.\",\n  UnexpectedReadonly:\n    \"'readonly' type modifier is only permitted on array and tuple literal types.\",\n  UnexpectedTypeAnnotation: \"Did not expect a type annotation here.\",\n  UnexpectedTypeCastInParameter: \"Unexpected type cast in parameter position.\",\n  UnsupportedImportTypeArgument:\n    \"Argument in a type import must be a string literal.\",\n  UnsupportedParameterPropertyKind:\n    \"A parameter property may not be declared using a binding pattern.\",\n  UnsupportedSignatureParameterKind: ({ type }: { type: string }) =>\n    `Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got ${type}.`,\n  UsingDeclarationInAmbientContext: (kind: \"using\" | \"await using\") =>\n    `'${kind}' declarations are not allowed in ambient contexts.`,\n});\n\n/* eslint-disable sort-keys */\n\n// Doesn't handle \"void\" or \"null\" because those are keywords, not identifiers.\n// It also doesn't handle \"intrinsic\", since usually it's not a keyword.\nfunction keywordTypeFromName(value: string): N.TsKeywordTypeType | undefined {\n  switch (value) {\n    case \"any\":\n      return \"TSAnyKeyword\";\n    case \"boolean\":\n      return \"TSBooleanKeyword\";\n    case \"bigint\":\n      return \"TSBigIntKeyword\";\n    case \"never\":\n      return \"TSNeverKeyword\";\n    case \"number\":\n      return \"TSNumberKeyword\";\n    case \"object\":\n      return \"TSObjectKeyword\";\n    case \"string\":\n      return \"TSStringKeyword\";\n    case \"symbol\":\n      return \"TSSymbolKeyword\";\n    case \"undefined\":\n      return \"TSUndefinedKeyword\";\n    case \"unknown\":\n      return \"TSUnknownKeyword\";\n    default:\n      return undefined;\n  }\n}\n\nfunction tsIsAccessModifier(modifier: string): modifier is N.Accessibility {\n  return (\n    modifier === \"private\" || modifier === \"public\" || modifier === \"protected\"\n  );\n}\n\nfunction tsIsVarianceAnnotations(\n  modifier: string,\n): modifier is N.VarianceAnnotations {\n  return modifier === \"in\" || modifier === \"out\";\n}\n\nfunction tsIsEntityName(\n  node: N.Expression,\n): node is N.MemberExpression | N.Identifier | N.TsInstantiationExpression {\n  if (node.extra?.parenthesized) {\n    return false;\n  }\n  switch (node.type) {\n    case \"Identifier\":\n      return true;\n    case \"MemberExpression\":\n      return !node.computed && tsIsEntityName(node.object);\n    case \"TSInstantiationExpression\":\n      return tsIsEntityName(node.expression);\n    default:\n      return false;\n  }\n}\n\nexport const enum tsParseEntityNameFlags {\n  NONE = 0b00,\n  ALLOW_RESERVED_WORDS = 0b01,\n  LEADING_THIS_AS_IDENTIFIER = 0b10,\n}\n\nexport default (superClass: ClassWithMixin<typeof Parser, IJSXParserMixin>) =>\n  class TypeScriptParserMixin extends superClass implements Parser {\n    getScopeHandler(): new (...args: any) => TypeScriptScopeHandler {\n      return TypeScriptScopeHandler;\n    }\n\n    tsIsIdentifier(): boolean {\n      // TODO: actually a bit more complex in TypeScript, but shouldn't matter.\n      // See https://github.com/Microsoft/TypeScript/issues/15008\n      return tokenIsIdentifier(this.state.type);\n    }\n\n    tsTokenCanFollowModifier() {\n      return (\n        this.match(tt.bracketL) ||\n        this.match(tt.braceL) ||\n        this.match(tt.star) ||\n        this.match(tt.ellipsis) ||\n        this.match(tt.privateName) ||\n        this.isLiteralPropertyName()\n      );\n    }\n\n    tsNextTokenOnSameLineAndCanFollowModifier() {\n      this.next();\n      if (this.hasPrecedingLineBreak()) {\n        return false;\n      }\n      return this.tsTokenCanFollowModifier();\n    }\n\n    tsNextTokenCanFollowModifier() {\n      // Note: TypeScript's implementation is much more complicated because\n      // more things are considered modifiers there.\n      // This implementation only handles modifiers not handled by @babel/parser itself. And \"static\".\n      if (this.match(tt._static)) {\n        this.next();\n        return this.tsTokenCanFollowModifier();\n      }\n      return this.tsNextTokenOnSameLineAndCanFollowModifier();\n    }\n\n    /** Parses a modifier matching one the given modifier names. */\n    tsParseModifier<T extends TsModifier>(\n      allowedModifiers: T[],\n      stopOnStartOfClassStaticBlock?: boolean,\n      hasSeenStaticModifier?: boolean | null,\n    ): T | undefined | null {\n      if (\n        !tokenIsIdentifier(this.state.type) &&\n        this.state.type !== tt._in &&\n        this.state.type !== tt._const\n      ) {\n        return undefined;\n      }\n\n      const modifier = this.state.value;\n      if (allowedModifiers.includes(modifier)) {\n        if (hasSeenStaticModifier && this.match(tt._static)) {\n          return undefined;\n        }\n        if (stopOnStartOfClassStaticBlock && this.tsIsStartOfStaticBlocks()) {\n          return undefined;\n        }\n        if (this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))) {\n          return modifier;\n        }\n      }\n      return undefined;\n    }\n\n    /** Parses a list of modifiers, in any order.\n     *  If you need a specific order, you must call this function multiple times:\n     *    this.tsParseModifiers({ modified: node, allowedModifiers: [\"public\"] });\n     *    this.tsParseModifiers({ modified: node, allowedModifiers: [\"abstract\", \"readonly\"] });\n     */\n    tsParseModifiers<N extends ModifierBase>(\n      {\n        allowedModifiers,\n        disallowedModifiers,\n        stopOnStartOfClassStaticBlock,\n        errorTemplate = TSErrors.InvalidModifierOnTypeMember,\n      }: {\n        allowedModifiers: readonly TsModifier[];\n        disallowedModifiers?: TsModifier[];\n        stopOnStartOfClassStaticBlock?: boolean;\n        errorTemplate?: typeof TSErrors.InvalidModifierOnTypeMember;\n      },\n      modified: N,\n    ): void {\n      const enforceOrder = (\n        loc: Position,\n        modifier: TsModifier,\n        before: TsModifier,\n        after: TsModifier,\n      ) => {\n        if (modifier === before && modified[after]) {\n          this.raise(TSErrors.InvalidModifiersOrder, loc, {\n            orderedModifiers: [before, after],\n          });\n        }\n      };\n      const incompatible = (\n        loc: Position,\n        modifier: TsModifier,\n        mod1: TsModifier,\n        mod2: TsModifier,\n      ) => {\n        if (\n          (modified[mod1] && modifier === mod2) ||\n          (modified[mod2] && modifier === mod1)\n        ) {\n          this.raise(TSErrors.IncompatibleModifiers, loc, {\n            modifiers: [mod1, mod2],\n          });\n        }\n      };\n\n      for (;;) {\n        const { startLoc } = this.state;\n        const modifier: TsModifier | undefined | null = this.tsParseModifier(\n          allowedModifiers.concat(disallowedModifiers ?? []),\n          stopOnStartOfClassStaticBlock,\n          modified.static,\n        );\n\n        if (!modifier) break;\n\n        if (tsIsAccessModifier(modifier)) {\n          if (modified.accessibility) {\n            this.raise(TSErrors.DuplicateAccessibilityModifier, startLoc, {\n              modifier,\n            });\n          } else {\n            enforceOrder(startLoc, modifier, modifier, \"override\");\n            enforceOrder(startLoc, modifier, modifier, \"static\");\n            enforceOrder(startLoc, modifier, modifier, \"readonly\");\n\n            modified.accessibility = modifier;\n          }\n        } else if (tsIsVarianceAnnotations(modifier)) {\n          if (modified[modifier]) {\n            this.raise(TSErrors.DuplicateModifier, startLoc, { modifier });\n          }\n          modified[modifier] = true;\n\n          enforceOrder(startLoc, modifier, \"in\", \"out\");\n        } else {\n          if (Object.hasOwn(modified, modifier)) {\n            this.raise(TSErrors.DuplicateModifier, startLoc, { modifier });\n          } else {\n            enforceOrder(startLoc, modifier, \"static\", \"readonly\");\n            enforceOrder(startLoc, modifier, \"static\", \"override\");\n            enforceOrder(startLoc, modifier, \"override\", \"readonly\");\n            enforceOrder(startLoc, modifier, \"abstract\", \"override\");\n\n            incompatible(startLoc, modifier, \"declare\", \"override\");\n            incompatible(startLoc, modifier, \"static\", \"abstract\");\n          }\n          modified[modifier] = true;\n        }\n\n        if (disallowedModifiers?.includes(modifier)) {\n          this.raise(errorTemplate, startLoc, {\n            modifier,\n          });\n        }\n      }\n    }\n\n    tsIsListTerminator(kind: ParsingContext): boolean {\n      switch (kind) {\n        case \"EnumMembers\":\n        case \"TypeMembers\":\n          return this.match(tt.braceR);\n        case \"HeritageClauseElement\":\n          return this.match(tt.braceL);\n        case \"TupleElementTypes\":\n          return this.match(tt.bracketR);\n        case \"TypeParametersOrArguments\":\n          return this.match(tt.gt);\n      }\n    }\n\n    tsParseList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n    ): T[] {\n      const result: T[] = [];\n      while (!this.tsIsListTerminator(kind)) {\n        // Skipping \"parseListElement\" from the TS source since that's just for error handling.\n        result.push(parseElement());\n      }\n      return result;\n    }\n\n    tsParseDelimitedList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] {\n      return nonNull(\n        this.tsParseDelimitedListWorker(\n          kind,\n          parseElement,\n          /* expectSuccess */ true,\n          refTrailingCommaPos,\n        ),\n      );\n    }\n\n    /**\n     * If !expectSuccess, returns undefined instead of failing to parse.\n     * If expectSuccess, parseElement should always return a defined value.\n     */\n    tsParseDelimitedListWorker<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T | undefined,\n      expectSuccess: boolean,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] | undefined {\n      const result: T[] = [];\n      let trailingCommaPos = -1;\n\n      for (;;) {\n        if (this.tsIsListTerminator(kind)) {\n          break;\n        }\n        trailingCommaPos = -1;\n\n        const element = parseElement();\n        if (element == null) {\n          return undefined;\n        }\n        result.push(element);\n\n        if (this.eat(tt.comma)) {\n          trailingCommaPos = this.state.lastTokStartLoc!.index;\n          continue;\n        }\n\n        if (this.tsIsListTerminator(kind)) {\n          break;\n        }\n\n        if (expectSuccess) {\n          // This will fail with an error about a missing comma\n          this.expect(tt.comma);\n        }\n        return undefined;\n      }\n\n      if (refTrailingCommaPos) {\n        refTrailingCommaPos.value = trailingCommaPos;\n      }\n\n      return result;\n    }\n\n    tsParseBracketedList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n      bracket: boolean,\n      skipFirstToken: boolean,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] {\n      if (!skipFirstToken) {\n        if (bracket) {\n          this.expect(tt.bracketL);\n        } else {\n          this.expect(tt.lt);\n        }\n      }\n\n      const result = this.tsParseDelimitedList(\n        kind,\n        parseElement,\n        refTrailingCommaPos,\n      );\n\n      if (bracket) {\n        this.expect(tt.bracketR);\n      } else {\n        this.expect(tt.gt);\n      }\n\n      return result;\n    }\n\n    tsParseImportType(): N.TsImportType {\n      const node = this.startNode<N.TsImportType>();\n      this.expect(tt._import);\n      this.expect(tt.parenL);\n      if (!this.match(tt.string)) {\n        this.raise(TSErrors.UnsupportedImportTypeArgument, this.state.startLoc);\n        if (process.env.BABEL_8_BREAKING) {\n          // Consume as an non-conditional type so that we can recover from this error\n          node.argument = this.tsParseNonConditionalType() as any;\n        } else {\n          node.argument = super.parseExprAtom() as any;\n        }\n      } else {\n        if (process.env.BABEL_8_BREAKING) {\n          node.argument = this.tsParseLiteralTypeNode();\n        } else {\n          // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n          node.argument = this.parseStringLiteral(this.state.value);\n        }\n      }\n      if (this.eat(tt.comma)) {\n        node.options = this.tsParseImportTypeOptions();\n      } else {\n        node.options = null;\n      }\n      this.expect(tt.parenR);\n\n      if (this.eat(tt.dot)) {\n        // In this instance, the entity name will actually itself be a\n        // qualifier, so allow it to be a reserved word as well.\n        node.qualifier = this.tsParseEntityName(\n          tsParseEntityNameFlags.ALLOW_RESERVED_WORDS |\n            tsParseEntityNameFlags.LEADING_THIS_AS_IDENTIFIER,\n        );\n      }\n      if (this.match(tt.lt)) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.typeArguments = this.tsParseTypeArguments();\n        } else {\n          node.typeParameters = this.tsParseTypeArguments();\n        }\n      }\n      return this.finishNode(node, \"TSImportType\");\n    }\n\n    tsParseImportTypeOptions(): N.ObjectExpression {\n      const node = this.startNode<N.ObjectExpression>();\n      this.expect(tt.braceL);\n      const withProperty = this.startNode<N.ObjectProperty>();\n      if (this.isContextual(tt._with)) {\n        withProperty.method = false;\n        withProperty.key = this.parseIdentifier(true);\n        withProperty.computed = false;\n        withProperty.shorthand = false;\n      } else {\n        this.unexpected(null, tt._with);\n      }\n      this.expect(tt.colon);\n      withProperty.value = this.tsParseImportTypeWithPropertyValue();\n      node.properties = [this.finishObjectProperty(withProperty)];\n      this.eat(tt.comma);\n      this.expect(tt.braceR);\n      return this.finishNode(node, \"ObjectExpression\");\n    }\n\n    tsParseImportTypeWithPropertyValue(): N.ObjectExpression {\n      const node = this.startNode<N.ObjectExpression>();\n      const properties = [];\n      this.expect(tt.braceL);\n      while (!this.match(tt.braceR)) {\n        const type = this.state.type;\n        if (tokenIsIdentifier(type) || type === tt.string) {\n          properties.push(super.parsePropertyDefinition(null));\n        } else {\n          this.unexpected();\n        }\n        this.eat(tt.comma);\n      }\n      node.properties = properties;\n      this.next(); // eat }\n      return this.finishNode(node, \"ObjectExpression\");\n    }\n\n    tsParseEntityName(flags: tsParseEntityNameFlags): N.TsEntityName {\n      let entity: N.TsEntityName;\n      if (\n        flags & tsParseEntityNameFlags.ALLOW_RESERVED_WORDS &&\n        this.match(tt._this)\n      ) {\n        if (flags & tsParseEntityNameFlags.LEADING_THIS_AS_IDENTIFIER) {\n          entity = this.parseIdentifier(true);\n        } else {\n          const node = this.startNode<N.ThisExpression>();\n          this.next();\n          entity = this.finishNode(node, \"ThisExpression\");\n        }\n      } else {\n        entity = this.parseIdentifier(\n          !!(flags & tsParseEntityNameFlags.ALLOW_RESERVED_WORDS),\n        );\n      }\n      while (this.eat(tt.dot)) {\n        const node: Undone<N.TsQualifiedName> =\n          this.startNodeAtNode<N.TsQualifiedName>(entity);\n        node.left = entity;\n        node.right = this.parseIdentifier(\n          !!(flags & tsParseEntityNameFlags.ALLOW_RESERVED_WORDS),\n        );\n        entity = this.finishNode(node, \"TSQualifiedName\");\n      }\n      return entity;\n    }\n\n    tsParseTypeReference(): N.TsTypeReference {\n      const node = this.startNode<N.TsTypeReference>();\n      node.typeName = this.tsParseEntityName(\n        tsParseEntityNameFlags.ALLOW_RESERVED_WORDS,\n      );\n      if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.typeArguments = this.tsParseTypeArguments();\n        } else {\n          node.typeParameters = this.tsParseTypeArguments();\n        }\n      }\n      return this.finishNode(node, \"TSTypeReference\");\n    }\n\n    tsParseThisTypePredicate(lhs: N.TsThisType): N.TsTypePredicate {\n      this.next();\n      const node = this.startNodeAtNode<N.TsTypePredicate>(lhs);\n      node.parameterName = lhs;\n      node.typeAnnotation = this.tsParseTypeAnnotation(/* eatColon */ false);\n      node.asserts = false;\n      return this.finishNode(node, \"TSTypePredicate\");\n    }\n\n    tsParseThisTypeNode(): N.TsThisType {\n      const node = this.startNode<N.TsThisType>();\n      this.next();\n      return this.finishNode(node, \"TSThisType\");\n    }\n\n    tsParseTypeQuery(): N.TsTypeQuery {\n      const node = this.startNode<N.TsTypeQuery>();\n      this.expect(tt._typeof);\n      if (this.match(tt._import)) {\n        node.exprName = this.tsParseImportType();\n      } else {\n        if (process.env.BABEL_8_BREAKING) {\n          node.exprName = this.tsParseEntityName(\n            tsParseEntityNameFlags.ALLOW_RESERVED_WORDS,\n          );\n        } else {\n          node.exprName = this.tsParseEntityName(\n            tsParseEntityNameFlags.ALLOW_RESERVED_WORDS |\n              tsParseEntityNameFlags.LEADING_THIS_AS_IDENTIFIER,\n          );\n        }\n      }\n      if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.typeArguments = this.tsParseTypeArguments();\n        } else {\n          node.typeParameters = this.tsParseTypeArguments();\n        }\n      }\n      return this.finishNode(node, \"TSTypeQuery\");\n    }\n\n    tsParseInOutModifiers = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"in\", \"out\"],\n      disallowedModifiers: [\n        \"const\",\n        \"public\",\n        \"private\",\n        \"protected\",\n        \"readonly\",\n        \"declare\",\n        \"abstract\",\n        \"override\",\n      ],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameter,\n    });\n\n    tsParseConstModifier = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"const\"],\n      // for better error recovery\n      disallowedModifiers: [\"in\", \"out\"],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions,\n    });\n\n    tsParseInOutConstModifiers = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"in\", \"out\", \"const\"],\n      disallowedModifiers: [\n        \"public\",\n        \"private\",\n        \"protected\",\n        \"readonly\",\n        \"declare\",\n        \"abstract\",\n        \"override\",\n      ],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameter,\n    });\n\n    tsParseTypeParameter(\n      parseModifiers: (node: Undone<N.TsTypeParameter>) => void,\n    ): N.TsTypeParameter {\n      const node = this.startNode<N.TsTypeParameter>();\n\n      parseModifiers(node);\n\n      node.name = this.tsParseTypeParameterName();\n      node.constraint = this.tsEatThenParseType(tt._extends);\n      node.default = this.tsEatThenParseType(tt.eq);\n      return this.finishNode(node, \"TSTypeParameter\");\n    }\n\n    tsTryParseTypeParameters(\n      parseModifiers: (node: N.TsTypeParameter) => void,\n    ): N.TsTypeParameterDeclaration | undefined | null {\n      if (this.match(tt.lt)) {\n        return this.tsParseTypeParameters(parseModifiers);\n      }\n    }\n\n    tsParseTypeParameters(parseModifiers: (node: N.TsTypeParameter) => void) {\n      const node = this.startNode<N.TsTypeParameterDeclaration>();\n\n      if (this.match(tt.lt) || this.match(tt.jsxTagStart)) {\n        this.next();\n      } else {\n        this.unexpected();\n      }\n\n      const refTrailingCommaPos = { value: -1 };\n\n      node.params = this.tsParseBracketedList(\n        \"TypeParametersOrArguments\",\n        this.tsParseTypeParameter.bind(this, parseModifiers),\n        /* bracket */ false,\n        /* skipFirstToken */ true,\n        refTrailingCommaPos,\n      );\n      if (node.params.length === 0) {\n        this.raise(TSErrors.EmptyTypeParameters, node);\n      }\n      if (refTrailingCommaPos.value !== -1) {\n        this.addExtra(node, \"trailingComma\", refTrailingCommaPos.value);\n      }\n      return this.finishNode(node, \"TSTypeParameterDeclaration\");\n    }\n\n    // Note: In TypeScript implementation we must provide `yieldContext` and `awaitContext`,\n    // but here it's always false, because this is only used for types.\n    tsFillSignature(\n      returnToken: TokenType,\n      signature: Undone<N.TsSignatureDeclaration>,\n    ): void {\n      // Arrow fns *must* have return token (`=>`). Normal functions can omit it.\n      const returnTokenRequired = returnToken === tt.arrow;\n\n      // https://github.com/babel/babel/issues/9231\n      const paramsKey = process.env.BABEL_8_BREAKING ? \"params\" : \"parameters\";\n      const returnTypeKey = process.env.BABEL_8_BREAKING\n        ? \"returnType\"\n        : \"typeAnnotation\";\n\n      signature.typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      this.expect(tt.parenL);\n      signature[paramsKey] = this.tsParseBindingListForSignature();\n      if (returnTokenRequired) {\n        signature[returnTypeKey] =\n          this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n      } else if (this.match(returnToken)) {\n        signature[returnTypeKey] =\n          this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n      }\n    }\n\n    tsParseBindingListForSignature(): Array<\n      | N.Identifier\n      | N.RestElement\n      | N.ObjectPattern\n      | N.ArrayPattern\n      | N.VoidPattern\n    > {\n      const list = super.parseBindingList(\n        tt.parenR,\n        charCodes.rightParenthesis,\n        ParseBindingListFlags.IS_FUNCTION_PARAMS,\n      );\n      for (const pattern of list) {\n        const { type } = pattern;\n        if (type === \"AssignmentPattern\" || type === \"TSParameterProperty\") {\n          this.raise(TSErrors.UnsupportedSignatureParameterKind, pattern, {\n            type,\n          });\n        }\n      }\n      return list as Exclude<\n        (typeof list)[0],\n        N.AssignmentPattern | N.TSParameterProperty\n      >[];\n    }\n\n    tsParseTypeMemberSemicolon(): void {\n      if (!this.eat(tt.comma) && !this.isLineTerminator()) {\n        this.expect(tt.semi);\n      }\n    }\n\n    tsParseSignatureMember(\n      kind: \"TSCallSignatureDeclaration\" | \"TSConstructSignatureDeclaration\",\n      node: Undone<\n        N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration\n      >,\n    ): N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration {\n      this.tsFillSignature(tt.colon, node);\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(node, kind);\n    }\n\n    tsIsUnambiguouslyIndexSignature() {\n      this.next(); // Skip '{'\n      if (tokenIsIdentifier(this.state.type)) {\n        this.next();\n        return this.match(tt.colon);\n      }\n      return false;\n    }\n\n    tsTryParseIndexSignature(\n      node: Undone<N.TsIndexSignature>,\n    ): N.TsIndexSignature | undefined {\n      if (\n        !(\n          this.match(tt.bracketL) &&\n          this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this))\n        )\n      ) {\n        return;\n      }\n\n      this.expect(tt.bracketL);\n      const id = this.parseIdentifier();\n      id.typeAnnotation = this.tsParseTypeAnnotation();\n      this.resetEndLocation(id); // set end position to end of type\n\n      this.expect(tt.bracketR);\n      node.parameters = [id];\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) node.typeAnnotation = type;\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(node, \"TSIndexSignature\");\n    }\n\n    tsParsePropertyOrMethodSignature(\n      node: Undone<N.TsPropertySignature | N.TsMethodSignature>,\n      readonly: boolean,\n    ): N.TsPropertySignature | N.TsMethodSignature {\n      if (this.eat(tt.question)) node.optional = true;\n\n      if (this.match(tt.parenL) || this.match(tt.lt)) {\n        if (readonly) {\n          this.raise(TSErrors.ReadonlyForMethodSignature, node);\n        }\n        const method = node as Undone<N.TsMethodSignature>;\n        if (method.kind && this.match(tt.lt)) {\n          this.raise(\n            TSErrors.AccessorCannotHaveTypeParameters,\n            this.state.curPosition(),\n          );\n        }\n        this.tsFillSignature(tt.colon, method);\n        this.tsParseTypeMemberSemicolon();\n        const paramsKey = process.env.BABEL_8_BREAKING\n          ? \"params\"\n          : \"parameters\";\n        const returnTypeKey = process.env.BABEL_8_BREAKING\n          ? \"returnType\"\n          : \"typeAnnotation\";\n        if (method.kind === \"get\") {\n          if (method[paramsKey].length > 0) {\n            this.raise(Errors.BadGetterArity, this.state.curPosition());\n            if (this.isThisParam(method[paramsKey][0])) {\n              this.raise(\n                TSErrors.AccessorCannotDeclareThisParameter,\n                this.state.curPosition(),\n              );\n            }\n          }\n        } else if (method.kind === \"set\") {\n          if (method[paramsKey].length !== 1) {\n            this.raise(Errors.BadSetterArity, this.state.curPosition());\n          } else {\n            const firstParameter = method[paramsKey][0];\n            if (this.isThisParam(firstParameter)) {\n              this.raise(\n                TSErrors.AccessorCannotDeclareThisParameter,\n                this.state.curPosition(),\n              );\n            }\n            if (\n              firstParameter.type === \"Identifier\" &&\n              firstParameter.optional\n            ) {\n              this.raise(\n                TSErrors.SetAccessorCannotHaveOptionalParameter,\n                this.state.curPosition(),\n              );\n            }\n            if (firstParameter.type === \"RestElement\") {\n              this.raise(\n                TSErrors.SetAccessorCannotHaveRestParameter,\n                this.state.curPosition(),\n              );\n            }\n          }\n          if (method[returnTypeKey]) {\n            this.raise(\n              TSErrors.SetAccessorCannotHaveReturnType,\n              method[returnTypeKey],\n            );\n          }\n        } else {\n          method.kind = \"method\";\n        }\n        return this.finishNode(method, \"TSMethodSignature\");\n      } else {\n        const property = node as Undone<N.TsPropertySignature>;\n        if (readonly) property.readonly = true;\n        const type = this.tsTryParseTypeAnnotation();\n        if (type) property.typeAnnotation = type;\n        this.tsParseTypeMemberSemicolon();\n        return this.finishNode(property, \"TSPropertySignature\");\n      }\n    }\n\n    tsParseTypeMember(): N.TsTypeElement {\n      const node: any = this.startNode();\n\n      if (this.match(tt.parenL) || this.match(tt.lt)) {\n        return this.tsParseSignatureMember(\"TSCallSignatureDeclaration\", node);\n      }\n\n      if (this.match(tt._new)) {\n        const id = this.startNode<N.Identifier>();\n        this.next();\n        if (this.match(tt.parenL) || this.match(tt.lt)) {\n          return this.tsParseSignatureMember(\n            \"TSConstructSignatureDeclaration\",\n            node,\n          );\n        } else {\n          node.key = this.createIdentifier(id, \"new\");\n          return this.tsParsePropertyOrMethodSignature(node, false);\n        }\n      }\n\n      this.tsParseModifiers(\n        {\n          allowedModifiers: [\"readonly\"],\n          disallowedModifiers: [\n            \"declare\",\n            \"abstract\",\n            \"private\",\n            \"protected\",\n            \"public\",\n            \"static\",\n            \"override\",\n          ],\n        },\n        node,\n      );\n\n      const idx = this.tsTryParseIndexSignature(node);\n      if (idx) {\n        return idx;\n      }\n\n      super.parsePropertyName(node);\n      if (\n        !node.computed &&\n        node.key.type === \"Identifier\" &&\n        (node.key.name === \"get\" || node.key.name === \"set\") &&\n        this.tsTokenCanFollowModifier()\n      ) {\n        node.kind = node.key.name;\n        super.parsePropertyName(node);\n        // Allow < here so that we can recover from get key<T> later\n        if (!this.match(tt.parenL) && !this.match(tt.lt)) {\n          this.unexpected(null, tt.parenL);\n        }\n      }\n      return this.tsParsePropertyOrMethodSignature(node, !!node.readonly);\n    }\n\n    tsParseTypeLiteral(): N.TsTypeLiteral {\n      const node = this.startNode<N.TsTypeLiteral>();\n      node.members = this.tsParseObjectTypeMembers();\n      return this.finishNode(node, \"TSTypeLiteral\");\n    }\n\n    tsParseObjectTypeMembers(): Array<N.TsTypeElement> {\n      this.expect(tt.braceL);\n      const members = this.tsParseList(\n        \"TypeMembers\",\n        this.tsParseTypeMember.bind(this),\n      );\n      this.expect(tt.braceR);\n      return members;\n    }\n\n    tsIsStartOfMappedType(): boolean {\n      this.next();\n      if (this.eat(tt.plusMin)) {\n        return this.isContextual(tt._readonly);\n      }\n      if (this.isContextual(tt._readonly)) {\n        this.next();\n      }\n      if (!this.match(tt.bracketL)) {\n        return false;\n      }\n      this.next();\n      if (!this.tsIsIdentifier()) {\n        return false;\n      }\n      this.next();\n      return this.match(tt._in);\n    }\n\n    tsParseMappedType(): N.TsMappedType {\n      const node = this.startNode<N.TsMappedType>();\n\n      this.expect(tt.braceL);\n\n      if (this.match(tt.plusMin)) {\n        node.readonly = this.state.value;\n        this.next();\n        this.expectContextual(tt._readonly);\n      } else if (this.eatContextual(tt._readonly)) {\n        node.readonly = true;\n      }\n\n      this.expect(tt.bracketL);\n      if (process.env.BABEL_8_BREAKING) {\n        node.key = this.tsParseTypeParameterName() as N.Identifier;\n        node.constraint = this.tsExpectThenParseType(tt._in);\n      } else {\n        const typeParameter = this.startNode<N.TsTypeParameter>();\n        typeParameter.name = this.tsParseTypeParameterName();\n        typeParameter.constraint = this.tsExpectThenParseType(tt._in);\n        // @ts-expect-error for Babel 7\n        node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n      }\n      node.nameType = this.eatContextual(tt._as) ? this.tsParseType() : null;\n\n      this.expect(tt.bracketR);\n\n      if (this.match(tt.plusMin)) {\n        node.optional = this.state.value;\n        this.next();\n        this.expect(tt.question);\n      } else if (this.eat(tt.question)) {\n        node.optional = true;\n      }\n\n      node.typeAnnotation = this.tsTryParseType();\n      this.semicolon();\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"TSMappedType\");\n    }\n\n    tsParseTupleType(): N.TsTupleType {\n      const node = this.startNode<N.TsTupleType>();\n      node.elementTypes = this.tsParseBracketedList(\n        \"TupleElementTypes\",\n        this.tsParseTupleElementType.bind(this),\n        /* bracket */ true,\n        /* skipFirstToken */ false,\n      );\n\n      // Validate the elementTypes to ensure that no mandatory elements\n      // follow optional elements\n      let seenOptionalElement = false;\n      node.elementTypes.forEach(elementNode => {\n        const { type } = elementNode;\n\n        if (\n          seenOptionalElement &&\n          type !== \"TSRestType\" &&\n          type !== \"TSOptionalType\" &&\n          !(type === \"TSNamedTupleMember\" && elementNode.optional)\n        ) {\n          this.raise(TSErrors.OptionalTypeBeforeRequired, elementNode);\n        }\n\n        seenOptionalElement ||=\n          (type === \"TSNamedTupleMember\" && elementNode.optional) ||\n          type === \"TSOptionalType\";\n      });\n\n      return this.finishNode(node, \"TSTupleType\");\n    }\n\n    tsParseTupleElementType(): N.TsNamedTupleMember | N.TsType {\n      // parses `...TsType[]`\n\n      const restStartLoc = this.state.startLoc;\n\n      const rest = this.eat(tt.ellipsis);\n      const { startLoc } = this.state;\n\n      let labeled: boolean;\n      let label: N.Identifier;\n      let optional: boolean;\n      let type: N.TsNamedTupleMember | N.TsType;\n\n      const isWord = tokenIsKeywordOrIdentifier(this.state.type);\n      const chAfterWord = isWord ? this.lookaheadCharCode() : null;\n      if (chAfterWord === charCodes.colon) {\n        labeled = true;\n        optional = false;\n        label = this.parseIdentifier(true);\n        this.expect(tt.colon);\n        type = this.tsParseType();\n      } else if (chAfterWord === charCodes.questionMark) {\n        optional = true;\n        const wordName = this.state.value;\n        const typeOrLabel = this.tsParseNonArrayType();\n\n        if (this.lookaheadCharCode() === charCodes.colon) {\n          labeled = true;\n          label = this.createIdentifier(\n            this.startNodeAt<N.Identifier>(startLoc),\n            wordName,\n          );\n          this.expect(tt.question);\n          this.expect(tt.colon);\n          type = this.tsParseType();\n        } else {\n          labeled = false;\n          type = typeOrLabel;\n          this.expect(tt.question);\n        }\n      } else {\n        type = this.tsParseType();\n        optional = this.eat(tt.question);\n        // In this case (labeled === true) could be only in invalid label.\n        // E.g. [x.y:type]\n        // An error is raised while processing node.\n        labeled = this.eat(tt.colon);\n      }\n\n      if (labeled) {\n        let labeledNode: Undone<N.TsNamedTupleMember>;\n        if (label!) {\n          labeledNode = this.startNodeAt<N.TsNamedTupleMember>(startLoc);\n          labeledNode.optional = optional;\n          labeledNode.label = label;\n          labeledNode.elementType = type;\n\n          if (this.eat(tt.question)) {\n            labeledNode.optional = true;\n            this.raise(\n              TSErrors.TupleOptionalAfterType,\n              this.state.lastTokStartLoc!,\n            );\n          }\n        } else {\n          labeledNode = this.startNodeAt<N.TsNamedTupleMember>(startLoc);\n          labeledNode.optional = optional;\n          this.raise(TSErrors.InvalidTupleMemberLabel, type);\n          // @ts-expect-error This produces an invalid AST, but at least we don't drop\n          // nodes representing the invalid source.\n          labeledNode.label = type;\n          labeledNode.elementType = this.tsParseType();\n        }\n        type = this.finishNode(labeledNode, \"TSNamedTupleMember\");\n      } else if (optional) {\n        const optionalTypeNode = this.startNodeAt<N.TsOptionalType>(startLoc);\n        optionalTypeNode.typeAnnotation = type;\n        type = this.finishNode(optionalTypeNode, \"TSOptionalType\");\n      }\n\n      if (rest) {\n        const restNode = this.startNodeAt<N.TsRestType>(restStartLoc);\n        restNode.typeAnnotation = type;\n        type = this.finishNode(restNode, \"TSRestType\");\n      }\n\n      return type;\n    }\n\n    tsParseParenthesizedType(): N.TsParenthesizedType {\n      const node = this.startNode<N.TsParenthesizedType>();\n      this.expect(tt.parenL);\n      node.typeAnnotation = this.tsParseType();\n      this.expect(tt.parenR);\n      return this.finishNode(node, \"TSParenthesizedType\");\n    }\n\n    tsParseFunctionOrConstructorType(\n      type: \"TSFunctionType\" | \"TSConstructorType\",\n      abstract?: boolean,\n    ): N.TsFunctionOrConstructorType {\n      const node = this.startNode<\n        N.TsFunctionOrConstructorType | N.TsConstructorType\n      >();\n      if (type === \"TSConstructorType\") {\n        (node as Undone<N.TsConstructorType>).abstract = !!abstract;\n        if (abstract) this.next();\n        this.next(); // eat `new`\n      }\n      this.tsInAllowConditionalTypesContext(() =>\n        this.tsFillSignature(tt.arrow, node),\n      );\n      return this.finishNode(node, type);\n    }\n\n    tsParseLiteralTypeNode(): N.TsLiteralType {\n      const node = this.startNode<N.TsLiteralType>();\n      switch (this.state.type) {\n        case tt.num:\n        case tt.bigint:\n        case tt.string:\n        case tt._true:\n        case tt._false:\n          // For compatibility to estree we cannot call parseLiteral directly here\n          // @ts-expect-error refine typings\n          node.literal = super.parseExprAtom();\n          break;\n        default:\n          this.unexpected();\n      }\n      return this.finishNode(node, \"TSLiteralType\");\n    }\n\n    tsParseTemplateLiteralType(): N.TsTemplateLiteralType | N.TsLiteralType {\n      if (process.env.BABEL_8_BREAKING) {\n        const startLoc = this.state.startLoc;\n        let curElt = this.parseTemplateElement(false);\n        const quasis = [curElt];\n        if (curElt.tail) {\n          const node = this.startNodeAt<N.TsLiteralType>(startLoc);\n          const literal = this.startNodeAt<N.TemplateLiteral>(startLoc);\n          literal.expressions = [];\n          literal.quasis = quasis;\n          node.literal = this.finishNode(literal, \"TemplateLiteral\");\n          return this.finishNode(node, \"TSLiteralType\");\n        } else {\n          const substitutions: N.TsType[] = [];\n          while (!curElt.tail) {\n            substitutions.push(this.tsParseType());\n            this.readTemplateContinuation();\n            quasis.push((curElt = this.parseTemplateElement(false)));\n          }\n          const node = this.startNodeAt<N.TsTemplateLiteralType>(startLoc);\n          node.types = substitutions;\n          node.quasis = quasis;\n          return this.finishNode(node, \"TSTemplateLiteralType\");\n        }\n      } else {\n        const node = this.startNode<N.TsLiteralType>();\n        node.literal = super.parseTemplate(false);\n        return this.finishNode(node, \"TSLiteralType\");\n      }\n    }\n\n    parseTemplateSubstitution(): N.TsType | N.Expression {\n      if (this.state.inType) return this.tsParseType();\n      return super.parseTemplateSubstitution();\n    }\n\n    tsParseThisTypeOrThisTypePredicate(): N.TsThisType | N.TsTypePredicate {\n      const thisKeyword = this.tsParseThisTypeNode();\n      if (this.isContextual(tt._is) && !this.hasPrecedingLineBreak()) {\n        return this.tsParseThisTypePredicate(thisKeyword);\n      } else {\n        return thisKeyword;\n      }\n    }\n\n    tsParseNonArrayType(): N.TsType {\n      switch (this.state.type) {\n        case tt.string:\n        case tt.num:\n        case tt.bigint:\n        case tt._true:\n        case tt._false:\n          return this.tsParseLiteralTypeNode();\n        case tt.plusMin:\n          if (this.state.value === \"-\") {\n            const node = this.startNode<N.TsLiteralType>();\n            const nextToken = this.lookahead();\n            if (nextToken.type !== tt.num && nextToken.type !== tt.bigint) {\n              this.unexpected();\n            }\n            node.literal = this.parseMaybeUnary() as N.UnaryExpression;\n            return this.finishNode(node, \"TSLiteralType\");\n          }\n          break;\n        case tt._this:\n          return this.tsParseThisTypeOrThisTypePredicate();\n        case tt._typeof:\n          return this.tsParseTypeQuery();\n        case tt._import:\n          return this.tsParseImportType();\n        case tt.braceL:\n          return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this))\n            ? this.tsParseMappedType()\n            : this.tsParseTypeLiteral();\n        case tt.bracketL:\n          return this.tsParseTupleType();\n        case tt.parenL:\n          if (process.env.BABEL_8_BREAKING) {\n            if (\n              !(this.optionFlags & OptionFlags.CreateParenthesizedExpressions)\n            ) {\n              const startLoc = this.state.startLoc;\n              this.next();\n              const type = this.tsParseType();\n              this.expect(tt.parenR);\n              this.addExtra(type, \"parenthesized\", true);\n              this.addExtra(type, \"parenStart\", startLoc.index);\n              return type;\n            }\n          }\n\n          return this.tsParseParenthesizedType();\n        case tt.templateNonTail:\n        case tt.templateTail:\n          return this.tsParseTemplateLiteralType();\n        default: {\n          const { type } = this.state;\n          if (\n            tokenIsIdentifier(type) ||\n            type === tt._void ||\n            type === tt._null\n          ) {\n            const nodeType =\n              type === tt._void\n                ? \"TSVoidKeyword\"\n                : type === tt._null\n                  ? \"TSNullKeyword\"\n                  : keywordTypeFromName(this.state.value);\n            if (\n              nodeType !== undefined &&\n              this.lookaheadCharCode() !== charCodes.dot\n            ) {\n              const node = this.startNode<N.TsKeywordType>();\n              this.next();\n              return this.finishNode(node, nodeType);\n            }\n            return this.tsParseTypeReference();\n          }\n        }\n      }\n\n      throw this.unexpected();\n    }\n\n    tsParseArrayTypeOrHigher(): N.TsType {\n      const { startLoc } = this.state;\n      let type = this.tsParseNonArrayType();\n      while (!this.hasPrecedingLineBreak() && this.eat(tt.bracketL)) {\n        if (this.match(tt.bracketR)) {\n          const node = this.startNodeAt<N.TsArrayType>(startLoc);\n          node.elementType = type;\n          this.expect(tt.bracketR);\n          type = this.finishNode(node, \"TSArrayType\");\n        } else {\n          const node = this.startNodeAt<N.TsIndexedAccessType>(startLoc);\n          node.objectType = type;\n          node.indexType = this.tsParseType();\n          this.expect(tt.bracketR);\n          type = this.finishNode(node, \"TSIndexedAccessType\");\n        }\n      }\n      return type;\n    }\n\n    tsParseTypeOperator(): N.TsTypeOperator {\n      const node = this.startNode<N.TsTypeOperator>();\n      const operator = this.state.value;\n      this.next(); // eat operator\n      node.operator = operator;\n      node.typeAnnotation = this.tsParseTypeOperatorOrHigher();\n\n      if (operator === \"readonly\") {\n        this.tsCheckTypeAnnotationForReadOnly(node);\n      }\n\n      return this.finishNode(node, \"TSTypeOperator\");\n    }\n\n    tsCheckTypeAnnotationForReadOnly(node: Undone<N.TsTypeOperator>) {\n      switch (node.typeAnnotation.type) {\n        case \"TSTupleType\":\n        case \"TSArrayType\":\n          return;\n        default:\n          this.raise(TSErrors.UnexpectedReadonly, node);\n      }\n    }\n\n    tsParseInferType(): N.TsInferType {\n      const node = this.startNode<N.TsInferType>();\n      this.expectContextual(tt._infer);\n      const typeParameter = this.startNode<N.TsTypeParameter>();\n      typeParameter.name = this.tsParseTypeParameterName();\n      typeParameter.constraint = this.tsTryParse(() =>\n        this.tsParseConstraintForInferType(),\n      );\n      node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n      return this.finishNode(node, \"TSInferType\");\n    }\n\n    tsParseConstraintForInferType() {\n      if (this.eat(tt._extends)) {\n        const constraint = this.tsInDisallowConditionalTypesContext(() =>\n          this.tsParseType(),\n        );\n        if (\n          this.state.inDisallowConditionalTypesContext ||\n          !this.match(tt.question)\n        ) {\n          return constraint;\n        }\n      }\n    }\n\n    tsParseTypeOperatorOrHigher(): N.TsType {\n      const isTypeOperator =\n        tokenIsTSTypeOperator(this.state.type) && !this.state.containsEsc;\n      return isTypeOperator\n        ? this.tsParseTypeOperator()\n        : this.isContextual(tt._infer)\n          ? this.tsParseInferType()\n          : this.tsInAllowConditionalTypesContext(() =>\n              this.tsParseArrayTypeOrHigher(),\n            );\n    }\n\n    tsParseUnionOrIntersectionType(\n      kind: \"TSUnionType\" | \"TSIntersectionType\",\n      parseConstituentType: () => N.TsType,\n      operator: TokenType,\n    ): N.TsType {\n      const node = this.startNode<N.TsUnionType | N.TsIntersectionType>();\n      const hasLeadingOperator = this.eat(operator);\n      const types = [];\n      do {\n        types.push(parseConstituentType());\n      } while (this.eat(operator));\n      if (types.length === 1 && !hasLeadingOperator) {\n        return types[0];\n      }\n      node.types = types;\n      return this.finishNode(node, kind);\n    }\n\n    tsParseIntersectionTypeOrHigher(): N.TsType {\n      return this.tsParseUnionOrIntersectionType(\n        \"TSIntersectionType\",\n        this.tsParseTypeOperatorOrHigher.bind(this),\n        tt.bitwiseAND,\n      );\n    }\n\n    tsParseUnionTypeOrHigher() {\n      return this.tsParseUnionOrIntersectionType(\n        \"TSUnionType\",\n        this.tsParseIntersectionTypeOrHigher.bind(this),\n        tt.bitwiseOR,\n      );\n    }\n\n    tsIsStartOfFunctionType() {\n      if (this.match(tt.lt)) {\n        return true;\n      }\n      return (\n        this.match(tt.parenL) &&\n        this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this))\n      );\n    }\n\n    tsSkipParameterStart(): boolean {\n      if (tokenIsIdentifier(this.state.type) || this.match(tt._this)) {\n        this.next();\n        return true;\n      }\n\n      if (this.match(tt.braceL)) {\n        // Return true if we can parse an object pattern without errors\n        const { errors } = this.state;\n        const previousErrorCount = errors.length;\n        try {\n          this.parseObjectLike(tt.braceR, true);\n          return errors.length === previousErrorCount;\n        } catch {\n          return false;\n        }\n      }\n\n      if (this.match(tt.bracketL)) {\n        this.next();\n        // Return true if we can parse an array pattern without errors\n        const { errors } = this.state;\n        const previousErrorCount = errors.length;\n        try {\n          super.parseBindingList(\n            tt.bracketR,\n            charCodes.rightSquareBracket,\n            ParseBindingListFlags.ALLOW_EMPTY,\n          );\n          return errors.length === previousErrorCount;\n        } catch {\n          return false;\n        }\n      }\n\n      return false;\n    }\n\n    tsIsUnambiguouslyStartOfFunctionType(): boolean {\n      this.next();\n      if (this.match(tt.parenR) || this.match(tt.ellipsis)) {\n        // ( )\n        // ( ...\n        return true;\n      }\n      if (this.tsSkipParameterStart()) {\n        if (\n          this.match(tt.colon) ||\n          this.match(tt.comma) ||\n          this.match(tt.question) ||\n          this.match(tt.eq)\n        ) {\n          // ( xxx :\n          // ( xxx ,\n          // ( xxx ?\n          // ( xxx =\n          return true;\n        }\n        if (this.match(tt.parenR)) {\n          this.next();\n          if (this.match(tt.arrow)) {\n            // ( xxx ) =>\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n\n    tsParseTypeOrTypePredicateAnnotation(\n      returnToken: TokenType,\n    ): N.TsTypeAnnotation {\n      return this.tsInType(() => {\n        const t = this.startNode<N.TsTypeAnnotation>();\n        this.expect(returnToken);\n\n        const node = this.startNode<N.TsTypePredicate>();\n\n        const asserts = !!this.tsTryParse(\n          this.tsParseTypePredicateAsserts.bind(this),\n        );\n\n        if (asserts && this.match(tt._this)) {\n          // When asserts is false, thisKeyword is handled by tsParseNonArrayType\n          // : asserts this is type\n          let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate();\n          // if it turns out to be a `TSThisType`, wrap it with `TSTypePredicate`\n          // : asserts this\n          if (thisTypePredicate.type === \"TSThisType\") {\n            node.parameterName = thisTypePredicate;\n            node.asserts = true;\n            (node as N.TsTypePredicate).typeAnnotation = null;\n            thisTypePredicate = this.finishNode(node, \"TSTypePredicate\");\n          } else {\n            this.resetStartLocationFromNode(thisTypePredicate, node);\n            thisTypePredicate.asserts = true;\n          }\n          t.typeAnnotation = thisTypePredicate;\n          return this.finishNode(t, \"TSTypeAnnotation\");\n        }\n\n        const typePredicateVariable =\n          this.tsIsIdentifier() &&\n          this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));\n\n        if (!typePredicateVariable) {\n          if (!asserts) {\n            // : type\n            return this.tsParseTypeAnnotation(/* eatColon */ false, t);\n          }\n\n          // : asserts foo\n          node.parameterName = this.parseIdentifier();\n          node.asserts = asserts;\n          (node as N.TsTypePredicate).typeAnnotation = null;\n          t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n          return this.finishNode(t, \"TSTypeAnnotation\");\n        }\n\n        // : asserts foo is type\n        const type = this.tsParseTypeAnnotation(/* eatColon */ false);\n        node.parameterName = typePredicateVariable;\n        node.typeAnnotation = type;\n        node.asserts = asserts;\n        t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n        return this.finishNode(t, \"TSTypeAnnotation\");\n      });\n    }\n\n    tsTryParseTypeOrTypePredicateAnnotation(): N.TsTypeAnnotation | undefined {\n      if (this.match(tt.colon)) {\n        return this.tsParseTypeOrTypePredicateAnnotation(tt.colon);\n      }\n    }\n\n    tsTryParseTypeAnnotation(): N.TsTypeAnnotation | undefined {\n      if (this.match(tt.colon)) {\n        return this.tsParseTypeAnnotation();\n      }\n    }\n\n    tsTryParseType(): N.TsType | undefined {\n      return this.tsEatThenParseType(tt.colon);\n    }\n\n    tsParseTypePredicatePrefix(): N.Identifier | undefined {\n      const id = this.parseIdentifier();\n      if (this.isContextual(tt._is) && !this.hasPrecedingLineBreak()) {\n        this.next();\n        return id;\n      }\n    }\n\n    tsParseTypePredicateAsserts(): boolean {\n      if (this.state.type !== tt._asserts) {\n        return false;\n      }\n      const containsEsc = this.state.containsEsc;\n      this.next();\n      if (!tokenIsIdentifier(this.state.type) && !this.match(tt._this)) {\n        return false;\n      }\n\n      if (containsEsc) {\n        this.raise(\n          Errors.InvalidEscapedReservedWord,\n          this.state.lastTokStartLoc!,\n          {\n            reservedWord: \"asserts\",\n          },\n        );\n      }\n\n      return true;\n    }\n\n    tsParseTypeAnnotation(\n      eatColon = true,\n      t: Undone<N.TsTypeAnnotation> = this.startNode<N.TsTypeAnnotation>(),\n    ): N.TsTypeAnnotation {\n      this.tsInType(() => {\n        if (eatColon) this.expect(tt.colon);\n        t.typeAnnotation = this.tsParseType();\n      });\n      return this.finishNode(t, \"TSTypeAnnotation\");\n    }\n\n    /** Be sure to be in a type context before calling this, using `tsInType`. */\n    tsParseType(): N.TsType {\n      // Need to set `state.inType` so that we don't parse JSX in a type context.\n      assert(this.state.inType);\n      const type = this.tsParseNonConditionalType();\n\n      if (\n        this.state.inDisallowConditionalTypesContext ||\n        this.hasPrecedingLineBreak() ||\n        !this.eat(tt._extends)\n      ) {\n        return type;\n      }\n      const node = this.startNodeAtNode<N.TsConditionalType>(type);\n      node.checkType = type;\n\n      node.extendsType = this.tsInDisallowConditionalTypesContext(() =>\n        this.tsParseNonConditionalType(),\n      );\n\n      this.expect(tt.question);\n      node.trueType = this.tsInAllowConditionalTypesContext(() =>\n        this.tsParseType(),\n      );\n\n      this.expect(tt.colon);\n      node.falseType = this.tsInAllowConditionalTypesContext(() =>\n        this.tsParseType(),\n      );\n\n      return this.finishNode(node, \"TSConditionalType\");\n    }\n\n    isAbstractConstructorSignature(): boolean {\n      return (\n        this.isContextual(tt._abstract) && this.isLookaheadContextual(\"new\")\n      );\n    }\n\n    tsParseNonConditionalType(): N.TsType {\n      if (this.tsIsStartOfFunctionType()) {\n        return this.tsParseFunctionOrConstructorType(\"TSFunctionType\");\n      }\n      if (this.match(tt._new)) {\n        // As in `new () => Date`\n        return this.tsParseFunctionOrConstructorType(\"TSConstructorType\");\n      } else if (this.isAbstractConstructorSignature()) {\n        // As in `abstract new () => Date`\n        return this.tsParseFunctionOrConstructorType(\n          \"TSConstructorType\",\n          /* abstract */ true,\n        );\n      }\n      return this.tsParseUnionTypeOrHigher();\n    }\n\n    tsParseTypeAssertion(): N.TsTypeAssertion {\n      if (this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")) {\n        this.raise(TSErrors.ReservedTypeAssertion, this.state.startLoc);\n      }\n\n      const node = this.startNode<N.TsTypeAssertion>();\n      node.typeAnnotation = this.tsInType(() => {\n        this.next(); // \"<\"\n        return this.match(tt._const)\n          ? this.tsParseTypeReference()\n          : this.tsParseType();\n      });\n      this.expect(tt.gt);\n      node.expression = this.parseMaybeUnary();\n      return this.finishNode(node, \"TSTypeAssertion\");\n    }\n\n    tsParseHeritageClause(token: \"extends\"): Array<N.TSInterfaceHeritage>;\n    tsParseHeritageClause(token: \"implements\"): Array<N.TSClassImplements>;\n    tsParseHeritageClause(\n      token: \"extends\" | \"implements\",\n    ): Array<N.TSClassImplements> | Array<N.TSInterfaceHeritage> {\n      const originalStartLoc = this.state.startLoc;\n\n      const delimitedList = this.tsParseDelimitedList(\n        \"HeritageClauseElement\",\n        () => {\n          if (process.env.BABEL_8_BREAKING) {\n            const expression = super.parseExprSubscripts();\n            if (!tsIsEntityName(expression)) {\n              this.raise(\n                TSErrors.InvalidHeritageClauseType,\n                expression.loc.start,\n                { token },\n              );\n            }\n            const nodeType =\n              token === \"extends\" ? \"TSInterfaceHeritage\" : \"TSClassImplements\";\n            if (expression.type === \"TSInstantiationExpression\") {\n              // @ts-expect-error cast TSInstantiationExpression to TSInterfaceHeritage/TSClassImplements\n              expression.type = nodeType;\n              return expression;\n            }\n            const node = this.startNodeAtNode<\n              N.TSInterfaceHeritage | N.TSClassImplements\n            >(expression);\n            node.expression = expression;\n            // The last element can not form a TSInstantiationExpression because of the bail condition in\n            // `parseSubscript`, in this case we have to parse type arguments again\n            if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n              node.typeArguments = this.tsParseTypeArgumentsInExpression();\n            }\n            return this.finishNode(node, nodeType);\n          } else {\n            const node = this.startNode<\n              N.TSInterfaceHeritage | N.TSClassImplements\n            >();\n            // @ts-expect-error Babel 7 vs Babel 8\n            node.expression = this.tsParseEntityName(\n              tsParseEntityNameFlags.ALLOW_RESERVED_WORDS |\n                tsParseEntityNameFlags.LEADING_THIS_AS_IDENTIFIER,\n            );\n            if (this.match(tt.lt)) {\n              // @ts-expect-error Babel 7 vs Babel 8\n              node.typeParameters = this.tsParseTypeArguments();\n            }\n\n            return this.finishNode(\n              node,\n              // @ts-expect-error Babel 7 vs Babel 8\n              \"TSExpressionWithTypeArguments\",\n            );\n          }\n        },\n      );\n\n      if (!delimitedList.length) {\n        this.raise(TSErrors.EmptyHeritageClauseType, originalStartLoc, {\n          token,\n        });\n      }\n\n      return delimitedList as\n        | Array<N.TSClassImplements>\n        | Array<N.TSInterfaceHeritage>;\n    }\n\n    tsParseInterfaceDeclaration(\n      node: Undone<N.TsInterfaceDeclaration>,\n      properties: {\n        declare?: true;\n      } = {},\n    ): N.TsInterfaceDeclaration | null {\n      if (this.hasFollowingLineBreak()) return null;\n      this.expectContextual(tt._interface);\n      if (properties.declare) node.declare = true;\n      if (tokenIsIdentifier(this.state.type)) {\n        node.id = this.parseIdentifier();\n        this.checkIdentifier(node.id, BindingFlag.TYPE_TS_INTERFACE);\n      } else {\n        node.id = null;\n        this.raise(TSErrors.MissingInterfaceName, this.state.startLoc);\n      }\n\n      node.typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseInOutConstModifiers,\n      );\n      if (this.eat(tt._extends)) {\n        node.extends = this.tsParseHeritageClause(\"extends\");\n      }\n      const body = this.startNode<N.TSInterfaceBody>();\n      body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this));\n      node.body = this.finishNode(body, \"TSInterfaceBody\");\n      return this.finishNode(node, \"TSInterfaceDeclaration\");\n    }\n\n    tsParseTypeAliasDeclaration(\n      node: Undone<N.TsTypeAliasDeclaration>,\n    ): N.TsTypeAliasDeclaration {\n      node.id = this.parseIdentifier();\n      this.checkIdentifier(node.id, BindingFlag.TYPE_TS_TYPE);\n\n      node.typeAnnotation = this.tsInType(() => {\n        node.typeParameters = this.tsTryParseTypeParameters(\n          this.tsParseInOutModifiers,\n        );\n\n        this.expect(tt.eq);\n\n        if (\n          this.isContextual(tt._intrinsic) &&\n          this.lookaheadCharCode() !== charCodes.dot\n        ) {\n          const node = this.startNode<N.TsKeywordType>();\n          this.next();\n          return this.finishNode(node, \"TSIntrinsicKeyword\");\n        }\n\n        return this.tsParseType();\n      });\n\n      this.semicolon();\n      return this.finishNode(node, \"TSTypeAliasDeclaration\");\n    }\n\n    // Parse in top level normal context if we are in a JSX context\n    tsInTopLevelContext<T>(cb: () => T): T {\n      if (this.curContext() !== tc.brace) {\n        const oldContext = this.state.context;\n        this.state.context = [oldContext[0]];\n        try {\n          return cb();\n        } finally {\n          this.state.context = oldContext;\n        }\n      } else {\n        return cb();\n      }\n    }\n\n    /**\n     * Runs `cb` in a type context.\n     * This should be called one token *before* the first type token,\n     * so that the call to `next()` is run in type context.\n     */\n    tsInType<T>(cb: () => T): T {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      try {\n        return cb();\n      } finally {\n        this.state.inType = oldInType;\n      }\n    }\n\n    tsInDisallowConditionalTypesContext<T>(cb: () => T): T {\n      const oldInDisallowConditionalTypesContext =\n        this.state.inDisallowConditionalTypesContext;\n      this.state.inDisallowConditionalTypesContext = true;\n      try {\n        return cb();\n      } finally {\n        this.state.inDisallowConditionalTypesContext =\n          oldInDisallowConditionalTypesContext;\n      }\n    }\n\n    tsInAllowConditionalTypesContext<T>(cb: () => T): T {\n      const oldInDisallowConditionalTypesContext =\n        this.state.inDisallowConditionalTypesContext;\n      this.state.inDisallowConditionalTypesContext = false;\n      try {\n        return cb();\n      } finally {\n        this.state.inDisallowConditionalTypesContext =\n          oldInDisallowConditionalTypesContext;\n      }\n    }\n\n    tsEatThenParseType(token: TokenType): N.TsType | undefined {\n      if (this.match(token)) {\n        return this.tsNextThenParseType();\n      }\n    }\n\n    tsExpectThenParseType(token: TokenType): N.TsType {\n      return this.tsInType(() => {\n        this.expect(token);\n        return this.tsParseType();\n      });\n    }\n\n    tsNextThenParseType(): N.TsType {\n      return this.tsInType(() => {\n        this.next();\n        return this.tsParseType();\n      });\n    }\n\n    tsParseEnumMember(): N.TsEnumMember {\n      const node = this.startNode<N.TsEnumMember>();\n      // Computed property names are grammar errors in an enum, so accept just string literal or identifier.\n      node.id = this.match(tt.string)\n        ? super.parseStringLiteral(this.state.value)\n        : this.parseIdentifier(/* liberal */ true);\n      if (this.eat(tt.eq)) {\n        node.initializer = super.parseMaybeAssignAllowIn();\n      }\n      return this.finishNode(node, \"TSEnumMember\");\n    }\n\n    tsParseEnumDeclaration(\n      node: Undone<N.TsEnumDeclaration>,\n      properties: {\n        const?: true;\n        declare?: true;\n      } = {},\n    ): N.TsEnumDeclaration {\n      if (properties.const) node.const = true;\n      if (properties.declare) node.declare = true;\n      this.expectContextual(tt._enum);\n      node.id = this.parseIdentifier();\n      this.checkIdentifier(\n        node.id,\n        node.const ? BindingFlag.TYPE_TS_CONST_ENUM : BindingFlag.TYPE_TS_ENUM,\n      );\n\n      if (process.env.BABEL_8_BREAKING) {\n        node.body = this.tsParseEnumBody();\n      } else {\n        this.expect(tt.braceL);\n        node.members = this.tsParseDelimitedList(\n          \"EnumMembers\",\n          this.tsParseEnumMember.bind(this),\n        );\n        this.expect(tt.braceR);\n      }\n      return this.finishNode(node, \"TSEnumDeclaration\");\n    }\n\n    tsParseEnumBody(): N.TsEnumBody {\n      const node = this.startNode<N.TsEnumBody>();\n      this.expect(tt.braceL);\n      node.members = this.tsParseDelimitedList(\n        \"EnumMembers\",\n        this.tsParseEnumMember.bind(this),\n      );\n      this.expect(tt.braceR);\n      return this.finishNode(node, \"TSEnumBody\");\n    }\n\n    tsParseModuleBlock(): N.TsModuleBlock {\n      const node = this.startNode<N.TsModuleBlock>();\n      this.scope.enter(ScopeFlag.OTHER);\n\n      this.expect(tt.braceL);\n      // Inside of a module block is considered \"top-level\", meaning it can have imports and exports.\n      super.parseBlockOrModuleBlockBody(\n        (node.body = []),\n        /* directives */ undefined,\n        /* topLevel */ true,\n        /* end */ tt.braceR,\n      );\n      this.scope.exit();\n      return this.finishNode(node, \"TSModuleBlock\");\n    }\n\n    tsParseModuleOrNamespaceDeclaration(\n      node: Undone<N.TsModuleDeclaration>,\n      nested: boolean = false,\n    ): N.TsModuleDeclaration {\n      node.id = process.env.BABEL_8_BREAKING\n        ? this.tsParseEntityName(tsParseEntityNameFlags.ALLOW_RESERVED_WORDS)\n        : this.parseIdentifier();\n\n      if (\n        process.env.BABEL_8_BREAKING ? node.id.type === \"Identifier\" : !nested\n      ) {\n        // @ts-expect-error checked above\n        this.checkIdentifier(node.id, BindingFlag.TYPE_TS_NAMESPACE);\n      }\n\n      if (!process.env.BABEL_8_BREAKING && this.eat(tt.dot)) {\n        const inner = this.startNode<N.TsModuleDeclaration>();\n        this.tsParseModuleOrNamespaceDeclaration(inner, true);\n        // @ts-expect-error Fixme: refine typings\n        node.body = inner;\n      } else {\n        this.scope.enter(ScopeFlag.TS_MODULE);\n        this.prodParam.enter(ParamKind.PARAM);\n        node.body = this.tsParseModuleBlock();\n        this.prodParam.exit();\n        this.scope.exit();\n      }\n      return this.finishNode(node, \"TSModuleDeclaration\");\n    }\n\n    tsParseAmbientExternalModuleDeclaration(\n      node: Undone<N.TsModuleDeclaration>,\n    ): N.TsModuleDeclaration {\n      if (this.isContextual(tt._global)) {\n        node.kind = \"global\";\n        if (!process.env.BABEL_8_BREAKING) {\n          node.global = true;\n        }\n        node.id = this.parseIdentifier();\n      } else if (this.match(tt.string)) {\n        node.kind = \"module\";\n        node.id = super.parseStringLiteral(this.state.value);\n      } else {\n        this.unexpected();\n      }\n      if (this.match(tt.braceL)) {\n        this.scope.enter(ScopeFlag.TS_MODULE);\n        this.prodParam.enter(ParamKind.PARAM);\n        node.body = this.tsParseModuleBlock();\n        this.prodParam.exit();\n        this.scope.exit();\n      } else {\n        this.semicolon();\n      }\n\n      return this.finishNode(node, \"TSModuleDeclaration\");\n    }\n\n    tsParseImportEqualsDeclaration(\n      node: Undone<N.TsImportEqualsDeclaration>,\n      maybeDefaultIdentifier?: N.Identifier | null,\n      isExport?: boolean,\n    ): N.TsImportEqualsDeclaration {\n      if (!process.env.BABEL_8_BREAKING) {\n        node.isExport = isExport || false;\n      }\n      node.id = maybeDefaultIdentifier || this.parseIdentifier();\n      this.checkIdentifier(node.id, BindingFlag.TYPE_TS_VALUE_IMPORT);\n      this.expect(tt.eq);\n      const moduleReference = this.tsParseModuleReference();\n      if (\n        node.importKind === \"type\" &&\n        moduleReference.type !== \"TSExternalModuleReference\"\n      ) {\n        this.raise(TSErrors.ImportAliasHasImportType, moduleReference);\n      }\n      node.moduleReference = moduleReference;\n      this.semicolon();\n      return this.finishNode(node, \"TSImportEqualsDeclaration\");\n    }\n\n    tsIsExternalModuleReference(): boolean {\n      return (\n        this.isContextual(tt._require) &&\n        this.lookaheadCharCode() === charCodes.leftParenthesis\n      );\n    }\n\n    tsParseModuleReference(): N.TsModuleReference {\n      return this.tsIsExternalModuleReference()\n        ? this.tsParseExternalModuleReference()\n        : this.tsParseEntityName(tsParseEntityNameFlags.NONE);\n    }\n\n    tsParseExternalModuleReference(): N.TsExternalModuleReference {\n      const node = this.startNode<N.TsExternalModuleReference>();\n      this.expectContextual(tt._require);\n      this.expect(tt.parenL);\n      if (!this.match(tt.string)) {\n        this.unexpected();\n      }\n      // For compatibility to estree we cannot call parseLiteral directly here\n      node.expression = super.parseExprAtom() as N.StringLiteral;\n      this.expect(tt.parenR);\n      this.sawUnambiguousESM = true;\n      return this.finishNode(node, \"TSExternalModuleReference\");\n    }\n\n    // Utilities\n\n    tsLookAhead<T>(f: () => T): T {\n      const state = this.state.clone();\n      const res = f();\n      this.state = state;\n      return res;\n    }\n\n    tsTryParseAndCatch<T extends N.NodeBase | undefined | null>(\n      f: () => T,\n    ): T | undefined | null {\n      const result = this.tryParse(\n        abort =>\n          // @ts-expect-error todo(flow->ts)\n          f() || abort(),\n      );\n\n      if (result.aborted || !result.node) return;\n      if (result.error) this.state = result.failState;\n      // @ts-expect-error refine typings\n      return result.node;\n    }\n\n    tsTryParse<T>(f: () => T | undefined | false): T | undefined {\n      const state = this.state.clone();\n      const result = f();\n      if (result !== undefined && result !== false) {\n        return result;\n      }\n      this.state = state;\n    }\n\n    tsTryParseDeclare(node: any) {\n      if (this.isLineTerminator()) {\n        return;\n      }\n      const startType = this.state.type;\n      return this.tsInAmbientContext(() => {\n        switch (startType) {\n          case tt._function:\n            node.declare = true;\n            return super.parseFunctionStatement(\n              node,\n              /* async */ false,\n              /* isHangingDeclaration */ false,\n            );\n          case tt._class:\n            // While this is also set by tsTryParseDeclare, we need to set it\n            // before parsing the class declaration to know how to register it in the scope.\n            node.declare = true;\n            return this.parseClass(\n              node as Undone<N.ClassDeclaration>,\n              /* isStatement */ true,\n              /* optionalId */ false,\n            );\n          case tt._enum:\n            return this.tsParseEnumDeclaration(node, { declare: true });\n          case tt._global:\n            return this.tsParseAmbientExternalModuleDeclaration(node);\n          case tt._let:\n            if (this.state.containsEsc) {\n              return;\n            }\n          // fallthrough\n          case tt._const:\n          case tt._var:\n            if (!this.match(tt._const) || !this.isLookaheadContextual(\"enum\")) {\n              node.declare = true;\n              return this.parseVarStatement(node, this.state.value, true);\n            }\n\n            // `const enum = 0;` not allowed because \"enum\" is a strict mode reserved word.\n            this.expect(tt._const);\n            return this.tsParseEnumDeclaration(node, {\n              const: true,\n              declare: true,\n            });\n          case tt._using:\n            if (this.isUsing()) {\n              this.raise(\n                TSErrors.InvalidModifierOnUsingDeclaration,\n                this.state.startLoc,\n                \"declare\",\n              );\n              node.declare = true;\n              return this.parseVarStatement(node, \"using\", true);\n            }\n            break;\n          case tt._await:\n            if (this.isAwaitUsing()) {\n              this.raise(\n                TSErrors.InvalidModifierOnAwaitUsingDeclaration,\n                this.state.startLoc,\n                \"declare\",\n              );\n              node.declare = true;\n              this.next(); // eat 'await'\n              return this.parseVarStatement(node, \"await using\", true);\n            }\n            break;\n          case tt._interface: {\n            const result = this.tsParseInterfaceDeclaration(node, {\n              declare: true,\n            });\n            if (result) return result;\n          }\n          // fallthrough\n          default:\n            if (tokenIsIdentifier(startType)) {\n              return this.tsParseDeclaration(\n                node,\n                this.state.type,\n                /* next */ true,\n                /* decorators */ null,\n              );\n            }\n        }\n      });\n    }\n\n    // Note: this won't be called unless the keyword is allowed in `shouldParseExportDeclaration`.\n    tsTryParseExportDeclaration(): N.Declaration | null | undefined {\n      return this.tsParseDeclaration(\n        this.startNode(),\n        this.state.type,\n        /* next */ true,\n        /* decorators */ null,\n      );\n    }\n\n    // Common to tsTryParseDeclare and tsTryParseExportDeclaration.\n    tsParseDeclaration(\n      node: any,\n      type: number,\n      next: boolean,\n      decorators: N.Decorator[] | null,\n    ):\n      | N.ClassDeclaration\n      | N.TsInterfaceDeclaration\n      | N.TsTypeAliasDeclaration\n      | N.TsModuleDeclaration\n      | null\n      | undefined {\n      // no declaration apart from enum can be followed by a line break.\n      switch (type) {\n        case tt._abstract:\n          if (\n            this.tsCheckLineTerminator(next) &&\n            (this.match(tt._class) || tokenIsIdentifier(this.state.type))\n          ) {\n            return this.tsParseAbstractDeclaration(node, decorators);\n          }\n          break;\n\n        case tt._module:\n          if (this.tsCheckLineTerminator(next)) {\n            if (this.match(tt.string)) {\n              return this.tsParseAmbientExternalModuleDeclaration(node);\n            } else if (tokenIsIdentifier(this.state.type)) {\n              node.kind = \"module\";\n              return this.tsParseModuleOrNamespaceDeclaration(node);\n            }\n          }\n          break;\n\n        case tt._namespace:\n          if (\n            this.tsCheckLineTerminator(next) &&\n            tokenIsIdentifier(this.state.type)\n          ) {\n            node.kind = \"namespace\";\n            return this.tsParseModuleOrNamespaceDeclaration(node);\n          }\n          break;\n\n        case tt._type:\n          if (\n            this.tsCheckLineTerminator(next) &&\n            tokenIsIdentifier(this.state.type)\n          ) {\n            return this.tsParseTypeAliasDeclaration(node);\n          }\n          break;\n      }\n    }\n\n    tsCheckLineTerminator(next: boolean) {\n      if (next) {\n        if (this.hasFollowingLineBreak()) return false;\n        this.next();\n        return true;\n      }\n      return !this.isLineTerminator();\n    }\n\n    tsTryParseGenericAsyncArrowFunction(\n      startLoc: Position,\n    ): N.ArrowFunctionExpression | undefined {\n      if (!this.match(tt.lt)) return;\n\n      const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n      this.state.maybeInArrowParameters = true;\n\n      const res: Undone<N.ArrowFunctionExpression> | undefined | null =\n        this.tsTryParseAndCatch(() => {\n          const node = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n          node.typeParameters = this.tsParseTypeParameters(\n            this.tsParseConstModifier,\n          );\n          // Don't use overloaded parseFunctionParams which would look for \"<\" again.\n          super.parseFunctionParams(node);\n          node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation();\n          this.expect(tt.arrow);\n          return node;\n        });\n\n      this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n      if (!res) return;\n\n      return super.parseArrowExpression(\n        res,\n        /* params are already set */ null,\n        /* async */ true,\n      );\n    }\n\n    // Used when parsing type arguments from ES or JSX productions, where the first token\n    // has been created without state.inType. Thus we need to re-scan the lt token.\n    tsParseTypeArgumentsInExpression():\n      | N.TsTypeParameterInstantiation\n      | undefined {\n      if (this.reScan_lt() !== tt.lt) return;\n      return this.tsParseTypeArguments();\n    }\n\n    tsParseTypeArguments(): N.TsTypeParameterInstantiation {\n      const node = this.startNode<N.TsTypeParameterInstantiation>();\n      node.params = this.tsInType(() =>\n        this.tsInTopLevelContext(() => {\n          this.expect(tt.lt);\n          return this.tsParseDelimitedList(\n            \"TypeParametersOrArguments\",\n            this.tsParseType.bind(this),\n          );\n        }),\n      );\n      if (node.params.length === 0) {\n        this.raise(TSErrors.EmptyTypeArguments, node);\n      } else if (!this.state.inType && this.curContext() === tc.brace) {\n        // rescan `>` when we are no longer in type context and JSX parsing context\n        // since it was tokenized when `inType` is `true`.\n        this.reScan_lt_gt();\n      }\n      this.expect(tt.gt);\n      return this.finishNode(node, \"TSTypeParameterInstantiation\");\n    }\n\n    tsIsDeclarationStart(): boolean {\n      return tokenIsTSDeclarationStart(this.state.type);\n    }\n\n    // ======================================================\n    // OVERRIDES\n    // ======================================================\n\n    isExportDefaultSpecifier(): boolean {\n      if (this.tsIsDeclarationStart()) return false;\n      return super.isExportDefaultSpecifier();\n    }\n\n    parseBindingElement(\n      flags: ParseBindingListFlags,\n      decorators: N.Decorator[],\n    ): N.Pattern | N.TSParameterProperty {\n      // Store original location to include decorators/modifiers in range\n      const startLoc = decorators.length\n        ? decorators[0].loc.start\n        : this.state.startLoc;\n\n      const modified: ModifierBase = {};\n      this.tsParseModifiers(\n        {\n          allowedModifiers: [\n            \"public\",\n            \"private\",\n            \"protected\",\n            \"override\",\n            \"readonly\",\n          ],\n        },\n        modified,\n      );\n      const accessibility = modified.accessibility;\n      const override = modified.override;\n      const readonly = modified.readonly;\n      if (\n        !(flags & ParseBindingListFlags.IS_CONSTRUCTOR_PARAMS) &&\n        (accessibility || readonly || override)\n      ) {\n        this.raise(TSErrors.UnexpectedParameterModifier, startLoc);\n      }\n\n      const left = this.parseMaybeDefault();\n      if (flags & ParseBindingListFlags.IS_FUNCTION_PARAMS) {\n        this.parseFunctionParamType(left);\n      }\n      const elt = this.parseMaybeDefault(left.loc.start, left);\n      if (accessibility || readonly || override) {\n        const pp = this.startNodeAt<N.TSParameterProperty>(startLoc);\n        if (decorators.length) {\n          pp.decorators = decorators;\n        }\n        if (accessibility) pp.accessibility = accessibility;\n        if (readonly) pp.readonly = readonly;\n        if (override) pp.override = override;\n        if (elt.type !== \"Identifier\" && elt.type !== \"AssignmentPattern\") {\n          this.raise(TSErrors.UnsupportedParameterPropertyKind, pp);\n        }\n        pp.parameter = elt as any as N.Identifier | N.AssignmentPattern;\n        return this.finishNode(pp, \"TSParameterProperty\");\n      }\n\n      if (decorators.length) {\n        left.decorators = decorators;\n      }\n\n      return elt;\n    }\n\n    isSimpleParameter(node: N.Pattern | N.TSParameterProperty): boolean {\n      return (\n        (node.type === \"TSParameterProperty\" &&\n          super.isSimpleParameter(node.parameter)) ||\n        super.isSimpleParameter(node)\n      );\n    }\n\n    tsDisallowOptionalPattern(node: Undone<N.Function>) {\n      for (const param of node.params) {\n        if (\n          param.type !== \"Identifier\" &&\n          (param as any).optional &&\n          !this.state.isAmbientContext\n        ) {\n          this.raise(TSErrors.PatternIsOptional, param);\n        }\n      }\n    }\n\n    setArrowFunctionParameters(\n      node: Undone<N.ArrowFunctionExpression>,\n      params: N.Expression[],\n      trailingCommaLoc?: Position | null,\n    ): void {\n      super.setArrowFunctionParameters(node, params, trailingCommaLoc);\n      this.tsDisallowOptionalPattern(node);\n    }\n\n    parseFunctionBodyAndFinish<\n      T extends\n        | N.Function\n        | N.TSDeclareMethod\n        | N.TSDeclareFunction\n        | N.ClassPrivateMethod,\n    >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n      if (this.match(tt.colon)) {\n        node.returnType = this.tsParseTypeOrTypePredicateAnnotation(tt.colon);\n      }\n\n      const bodilessType =\n        type === \"FunctionDeclaration\"\n          ? \"TSDeclareFunction\"\n          : type === \"ClassMethod\" || type === \"ClassPrivateMethod\"\n            ? \"TSDeclareMethod\"\n            : undefined;\n      if (bodilessType && !this.match(tt.braceL) && this.isLineTerminator()) {\n        return this.finishNode(node, bodilessType);\n      }\n      if (bodilessType === \"TSDeclareFunction\" && this.state.isAmbientContext) {\n        this.raise(TSErrors.DeclareFunctionHasImplementation, node);\n        if ((node as Undone<N.FunctionDeclaration>).declare) {\n          return super.parseFunctionBodyAndFinish(node, bodilessType, isMethod);\n        }\n      }\n      this.tsDisallowOptionalPattern(node);\n\n      return super.parseFunctionBodyAndFinish(node, type, isMethod);\n    }\n\n    registerFunctionStatementId(node: N.Function): void {\n      if (!node.body && node.id) {\n        // Function ids are validated after parsing their body.\n        // For bodiless function, we need to do it here.\n        this.checkIdentifier(node.id, BindingFlag.TYPE_TS_AMBIENT);\n      } else {\n        super.registerFunctionStatementId(node);\n      }\n    }\n\n    tsCheckForInvalidTypeCasts(\n      items: Array<N.Expression | N.SpreadElement | null>,\n    ) {\n      items.forEach(node => {\n        if (node?.type === \"TSTypeCastExpression\") {\n          this.raise(TSErrors.UnexpectedTypeAnnotation, node.typeAnnotation);\n        }\n      });\n    }\n\n    toReferencedList(\n      exprList: Array<N.Expression | null>,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      isInParens?: boolean,\n    ): Array<N.Expression | null> {\n      // Handles invalid scenarios like: `f(a:b)`, `(a:b);`, and `(a:b,c:d)`.\n      //\n      // Note that `f<T>(a:b)` goes through a different path and is handled\n      // in `parseSubscript` directly.\n      this.tsCheckForInvalidTypeCasts(exprList);\n      return exprList;\n    }\n\n    parseArrayLike(\n      close: TokenType,\n      isTuple: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ArrayExpression | N.TupleExpression {\n      const node = super.parseArrayLike(close, isTuple, refExpressionErrors);\n\n      if (node.type === \"ArrayExpression\") {\n        this.tsCheckForInvalidTypeCasts(node.elements);\n      }\n\n      return node;\n    }\n\n    parseSubscript(\n      base: N.Expression,\n\n      startLoc: Position,\n      noCalls: boolean | undefined | null,\n      state: N.ParseSubscriptState,\n    ): N.Expression {\n      if (!this.hasPrecedingLineBreak() && this.match(tt.bang)) {\n        // When ! is consumed as a postfix operator (non-null assertion),\n        // disallow JSX tag forming after. e.g. When parsing `p! < n.p!`\n        // `<n.p` can not be a start of JSX tag\n        this.state.canStartJSXElement = false;\n        this.next();\n\n        const nonNullExpression =\n          this.startNodeAt<N.TsNonNullExpression>(startLoc);\n        nonNullExpression.expression = base;\n        return this.finishNode(nonNullExpression, \"TSNonNullExpression\");\n      }\n\n      let isOptionalCall = false;\n      if (\n        this.match(tt.questionDot) &&\n        this.lookaheadCharCode() === charCodes.lessThan\n      ) {\n        if (noCalls) {\n          state.stop = true;\n          return base;\n        }\n        state.optionalChainMember = isOptionalCall = true;\n        this.next();\n      }\n\n      // handles 'f<<T>'\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        let missingParenErrorLoc;\n        // tsTryParseAndCatch is expensive, so avoid if not necessary.\n        // There are number of things we are going to \"maybe\" parse, like type arguments on\n        // tagged template expressions. If any of them fail, walk it back and continue.\n        const result = this.tsTryParseAndCatch(() => {\n          if (!noCalls && this.atPossibleAsyncArrow(base)) {\n            // Almost certainly this is a generic async function `async <T>() => ...\n            // But it might be a call with a type argument `async<T>();`\n            const asyncArrowFn =\n              this.tsTryParseGenericAsyncArrowFunction(startLoc);\n            if (asyncArrowFn) {\n              state.stop = true;\n              return asyncArrowFn;\n            }\n          }\n\n          const typeArguments = this.tsParseTypeArgumentsInExpression();\n          if (!typeArguments) return;\n\n          if (isOptionalCall && !this.match(tt.parenL)) {\n            missingParenErrorLoc = this.state.curPosition();\n            return;\n          }\n\n          if (tokenIsTemplate(this.state.type)) {\n            const result = super.parseTaggedTemplateExpression(\n              base,\n              startLoc,\n              state,\n            );\n            if (process.env.BABEL_8_BREAKING) {\n              result.typeArguments = typeArguments;\n            } else {\n              result.typeParameters = typeArguments;\n            }\n            return result;\n          }\n\n          if (!noCalls && this.eat(tt.parenL)) {\n            const node = this.startNodeAt<\n              N.CallExpression | N.OptionalCallExpression\n            >(startLoc);\n            node.callee = base;\n            node.arguments = this.parseCallExpressionArguments();\n\n            // Handles invalid case: `f<T>(a:b)`\n            this.tsCheckForInvalidTypeCasts(node.arguments);\n\n            if (process.env.BABEL_8_BREAKING) {\n              node.typeArguments = typeArguments;\n            } else {\n              node.typeParameters = typeArguments;\n            }\n\n            if (state.optionalChainMember) {\n              (node as Undone<N.OptionalCallExpression>).optional =\n                isOptionalCall;\n            }\n\n            return this.finishCallExpression(node, state.optionalChainMember);\n          }\n\n          const tokenType = this.state.type;\n          if (\n            // a<b>>c is not (a<b>)>c, but a<(b>>c)\n            tokenType === tt.gt ||\n            // a<b>>>c is not (a<b>)>>c, but a<(b>>>c)\n            tokenType === tt.bitShiftR ||\n            // a<b>c is (a<b)>c\n            (tokenType !== tt.parenL &&\n              tokenCanStartExpression(tokenType) &&\n              !this.hasPrecedingLineBreak())\n          ) {\n            // Bail out.\n            return;\n          }\n\n          const node = this.startNodeAt<N.TsInstantiationExpression>(startLoc);\n          node.expression = base;\n          if (process.env.BABEL_8_BREAKING) {\n            node.typeArguments = typeArguments;\n          } else {\n            node.typeParameters = typeArguments;\n          }\n          return this.finishNode(node, \"TSInstantiationExpression\");\n        });\n\n        if (missingParenErrorLoc) {\n          this.unexpected(missingParenErrorLoc, tt.parenL);\n        }\n\n        if (result) {\n          if (result.type === \"TSInstantiationExpression\") {\n            if (\n              this.match(tt.dot) ||\n              (this.match(tt.questionDot) &&\n                this.lookaheadCharCode() !== charCodes.leftParenthesis)\n            ) {\n              this.raise(\n                TSErrors.InvalidPropertyAccessAfterInstantiationExpression,\n                this.state.startLoc,\n              );\n            }\n            if (!this.match(tt.dot) && !this.match(tt.questionDot)) {\n              // If TSInstantiationExpression is not followed by . / ?.,\n              // it must be the end of a subscript chain. Note that `(` already forms\n              // call expression arguments\n              result.expression = super.stopParseSubscript(base, state);\n            }\n          }\n          return result;\n        }\n      }\n\n      return super.parseSubscript(base, startLoc, noCalls, state);\n    }\n\n    parseNewCallee(node: N.NewExpression): void {\n      super.parseNewCallee(node);\n\n      const { callee } = node;\n      if (\n        callee.type === \"TSInstantiationExpression\" &&\n        !callee.extra?.parenthesized\n      ) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.typeArguments = callee.typeArguments;\n        } else {\n          node.typeParameters = callee.typeParameters;\n        }\n        node.callee = callee.expression;\n      }\n    }\n\n    parseExprOp(\n      left: N.Expression,\n      leftStartLoc: Position,\n      minPrec: number,\n    ): N.Expression {\n      let isSatisfies: boolean;\n      if (\n        tokenOperatorPrecedence(tt._in) > minPrec &&\n        !this.hasPrecedingLineBreak() &&\n        (this.isContextual(tt._as) ||\n          (isSatisfies = this.isContextual(tt._satisfies)))\n      ) {\n        const node = this.startNodeAt<\n          N.TsAsExpression | N.TsSatisfiesExpression\n        >(leftStartLoc);\n        node.expression = left;\n        node.typeAnnotation = this.tsInType(() => {\n          this.next(); // \"as\" or \"satisfies\"\n          if (this.match(tt._const)) {\n            if (isSatisfies) {\n              this.raise(Errors.UnexpectedKeyword, this.state.startLoc, {\n                keyword: \"const\",\n              });\n            }\n            return this.tsParseTypeReference();\n          }\n\n          return this.tsParseType();\n        });\n        this.finishNode(\n          node,\n          isSatisfies! ? \"TSSatisfiesExpression\" : \"TSAsExpression\",\n        );\n        // rescan `<`, `>` because they were scanned when this.state.inType was true\n        this.reScan_lt_gt();\n        return this.parseExprOp(\n          // @ts-expect-error todo(flow->ts)\n          node,\n          leftStartLoc,\n          minPrec,\n        );\n      }\n\n      return super.parseExprOp(left, leftStartLoc, minPrec);\n    }\n\n    checkReservedWord(\n      word: string,\n      startLoc: Position,\n      checkKeywords: boolean,\n      isBinding: boolean,\n    ): void {\n      // Strict mode words may be allowed as in `declare namespace N { const static: number; }`.\n      // And we have a type checker anyway, so don't bother having the parser do it.\n      if (!this.state.isAmbientContext) {\n        super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\n      }\n    }\n\n    checkImportReflection(node: Undone<N.ImportDeclaration>) {\n      super.checkImportReflection(node);\n      if (node.module && node.importKind !== \"value\") {\n        this.raise(\n          TSErrors.ImportReflectionHasImportType,\n          node.specifiers[0].loc.start,\n        );\n      }\n    }\n\n    /*\n    Don't bother doing this check in TypeScript code because:\n    1. We may have a nested export statement with the same name:\n      export const x = 0;\n      export namespace N {\n        export const x = 1;\n      }\n    2. We have a type checker to warn us about this sort of thing.\n    */\n    checkDuplicateExports() {}\n\n    isPotentialImportPhase(isExport: boolean): boolean {\n      if (super.isPotentialImportPhase(isExport)) return true;\n      if (this.isContextual(tt._type)) {\n        const ch = this.lookaheadCharCode();\n        return isExport\n          ? ch === charCodes.leftCurlyBrace || ch === charCodes.asterisk\n          : ch !== charCodes.equalsTo;\n      }\n      return !isExport && this.isContextual(tt._typeof);\n    }\n\n    applyImportPhase(\n      node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n      isExport: boolean,\n      phase: string | null,\n      loc?: Position,\n    ): void {\n      super.applyImportPhase(node, isExport, phase, loc);\n      if (isExport) {\n        (node as N.ExportNamedDeclaration).exportKind =\n          phase === \"type\" ? \"type\" : \"value\";\n      } else {\n        (node as N.ImportDeclaration).importKind =\n          phase === \"type\" || phase === \"typeof\" ? phase : \"value\";\n      }\n    }\n\n    parseImport(\n      node: Undone<N.ImportDeclaration | N.TsImportEqualsDeclaration>,\n    ): N.AnyImport {\n      if (this.match(tt.string)) {\n        node.importKind = \"value\";\n        return super.parseImport(node as Undone<N.ImportDeclaration>);\n      }\n\n      let importNode;\n      if (\n        tokenIsIdentifier(this.state.type) &&\n        this.lookaheadCharCode() === charCodes.equalsTo\n      ) {\n        node.importKind = \"value\";\n        return this.tsParseImportEqualsDeclaration(\n          node as Undone<N.TsImportEqualsDeclaration>,\n        );\n      } else if (this.isContextual(tt._type)) {\n        const maybeDefaultIdentifier = this.parseMaybeImportPhase(\n          node as Undone<N.ImportDeclaration>,\n          /* isExport */ false,\n        );\n        if (this.lookaheadCharCode() === charCodes.equalsTo) {\n          return this.tsParseImportEqualsDeclaration(\n            node as Undone<N.TsImportEqualsDeclaration>,\n            maybeDefaultIdentifier,\n          );\n        } else {\n          importNode = super.parseImportSpecifiersAndAfter(\n            node as Undone<N.ImportDeclaration>,\n            maybeDefaultIdentifier,\n          );\n        }\n      } else {\n        importNode = super.parseImport(node as Undone<N.ImportDeclaration>);\n      }\n\n      // `import type` can only be used on imports with named imports or with a\n      // default import - but not both\n      if (\n        importNode.importKind === \"type\" &&\n        // @ts-expect-error refine typings\n        importNode.specifiers.length > 1 &&\n        // @ts-expect-error refine typings\n        importNode.specifiers[0].type === \"ImportDefaultSpecifier\"\n      ) {\n        this.raise(TSErrors.TypeImportCannotSpecifyDefaultAndNamed, importNode);\n      }\n\n      return importNode;\n    }\n\n    parseExport(\n      node: Undone<\n        | N.ExportDefaultDeclaration\n        | N.ExportAllDeclaration\n        | N.ExportNamedDeclaration\n      >,\n      decorators: N.Decorator[] | null,\n    ): N.AnyExport {\n      if (this.match(tt._import)) {\n        // `export import A = B;`\n        const nodeImportEquals = process.env.BABEL_8_BREAKING\n          ? this.startNode<N.TsImportEqualsDeclaration>()\n          : (node as Undone<N.TsImportEqualsDeclaration>);\n        this.next(); // eat `tt._import`\n        let maybeDefaultIdentifier: N.Identifier | null = null;\n        if (\n          this.isContextual(tt._type) &&\n          // We pass false here, because we are parsing an `import ... =`\n          this.isPotentialImportPhase(/* isExport */ false)\n        ) {\n          maybeDefaultIdentifier = this.parseMaybeImportPhase(\n            nodeImportEquals,\n            /* isExport */ false,\n          );\n        } else {\n          nodeImportEquals.importKind = \"value\";\n        }\n        const declaration = this.tsParseImportEqualsDeclaration(\n          nodeImportEquals,\n          maybeDefaultIdentifier,\n          /* isExport */ true,\n        );\n        if (process.env.BABEL_8_BREAKING) {\n          (node as Undone<N.ExportNamedDeclaration>).attributes = [];\n          (node as Undone<N.ExportNamedDeclaration>).declaration = declaration;\n          (node as Undone<N.ExportNamedDeclaration>).exportKind = \"value\";\n          (node as Undone<N.ExportNamedDeclaration>).source = null;\n          (node as Undone<N.ExportNamedDeclaration>).specifiers = [];\n          return this.finishNode(node, \"ExportNamedDeclaration\");\n        } else {\n          return declaration;\n        }\n      } else if (this.eat(tt.eq)) {\n        // `export = x;`\n        const assign = node as Undone<N.TsExportAssignment>;\n        assign.expression = super.parseExpression();\n        this.semicolon();\n        this.sawUnambiguousESM = true;\n        return this.finishNode(assign, \"TSExportAssignment\");\n      } else if (this.eatContextual(tt._as)) {\n        // `export as namespace A;`\n        const decl = node as Undone<N.TsNamespaceExportDeclaration>;\n        // See `parseNamespaceExportDeclaration` in TypeScript's own parser\n        this.expectContextual(tt._namespace);\n        decl.id = this.parseIdentifier();\n        this.semicolon();\n        return this.finishNode(decl, \"TSNamespaceExportDeclaration\");\n      } else {\n        return super.parseExport(\n          node as Undone<N.ExportAllDeclaration | N.ExportDefaultDeclaration>,\n          decorators,\n        );\n      }\n    }\n\n    isAbstractClass(): boolean {\n      return (\n        this.isContextual(tt._abstract) && this.isLookaheadContextual(\"class\")\n      );\n    }\n\n    parseExportDefaultExpression(): N.ExportDefaultDeclaration[\"declaration\"] {\n      if (this.isAbstractClass()) {\n        const cls = this.startNode<N.Class>();\n        this.next(); // Skip \"abstract\"\n        cls.abstract = true;\n        return this.parseClass(cls, true, true);\n      }\n\n      // export default interface allowed in:\n      // https://github.com/Microsoft/TypeScript/pull/16040\n      if (this.match(tt._interface)) {\n        const result = this.tsParseInterfaceDeclaration(\n          this.startNode<N.TsInterfaceDeclaration>(),\n        );\n        if (result) return result;\n      }\n\n      return super.parseExportDefaultExpression();\n    }\n\n    parseVarStatement(\n      node: N.VariableDeclaration,\n      kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n      allowMissingInitializer: boolean = false,\n    ) {\n      const { isAmbientContext } = this.state;\n      const declaration = super.parseVarStatement(\n        node,\n        kind,\n        allowMissingInitializer || isAmbientContext,\n      );\n\n      if (!isAmbientContext) return declaration;\n\n      // If node.declare is true, the error has already been raised in tsTryParseDeclare.\n      if (!node.declare && (kind === \"using\" || kind === \"await using\")) {\n        this.raiseOverwrite(\n          TSErrors.UsingDeclarationInAmbientContext,\n          node,\n          kind,\n        );\n        return declaration;\n      }\n\n      for (const { id, init } of declaration.declarations) {\n        // Empty initializer is the easy case that we want.\n        if (!init) continue;\n\n        // var and let aren't ever allowed initializers.\n        if (kind === \"var\" || kind === \"let\" || !!id.typeAnnotation) {\n          this.raise(TSErrors.InitializerNotAllowedInAmbientContext, init);\n        } else if (\n          !isValidAmbientConstInitializer(init, this.hasPlugin(\"estree\"))\n        ) {\n          this.raise(\n            TSErrors.ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference,\n            init,\n          );\n        }\n      }\n\n      return declaration;\n    }\n\n    parseStatementContent(\n      flags: ParseStatementFlag,\n      decorators: N.Decorator[] | null,\n    ): N.Statement {\n      if (!this.state.containsEsc) {\n        switch (this.state.type) {\n          case tt._const: {\n            if (this.isLookaheadContextual(\"enum\")) {\n              const node = this.startNode<N.TsEnumDeclaration>();\n              this.expect(tt._const); // eat 'const'\n              return this.tsParseEnumDeclaration(node, { const: true });\n            }\n            break;\n          }\n          case tt._abstract:\n          case tt._declare: {\n            if (\n              this.nextTokenIsIdentifierAndNotTSRelationalOperatorOnSameLine()\n            ) {\n              const token = this.state.type;\n              const node = this.startNode<N.ExpressionStatement>();\n              this.next(); // eat 'abstract' or 'declare'\n              const declaration =\n                token === tt._declare\n                  ? this.tsTryParseDeclare(node)\n                  : this.tsParseAbstractDeclaration(node, decorators);\n              if (declaration) {\n                if (token === tt._declare) {\n                  declaration.declare = true;\n                }\n                return declaration;\n              } else {\n                // The production is invalid. Construct AST for error recovery.\n                node.expression = this.createIdentifier(\n                  this.startNodeAt<N.Identifier>(node.loc.start),\n                  token === tt._declare ? \"declare\" : \"abstract\",\n                );\n                this.semicolon(false);\n                return this.finishNode(node, \"ExpressionStatement\");\n              }\n            }\n            break;\n          }\n          case tt._enum:\n            return this.tsParseEnumDeclaration(\n              this.startNode<N.TsEnumDeclaration>(),\n            );\n          case tt._global: {\n            const nextCh = this.lookaheadCharCode();\n            if (nextCh === charCodes.leftCurlyBrace) {\n              const node = this.startNode<N.TsModuleDeclaration>();\n              return this.tsParseAmbientExternalModuleDeclaration(node);\n            }\n            break;\n          }\n          case tt._interface: {\n            const result = this.tsParseInterfaceDeclaration(this.startNode());\n            if (result) return result;\n            break;\n          }\n          case tt._module: {\n            if (this.nextTokenIsIdentifierOrStringLiteralOnSameLine()) {\n              const node = this.startNode<N.TsModuleDeclaration>();\n              this.next(); // eat 'module'\n              return this.tsParseDeclaration(\n                node,\n                tt._module,\n                false,\n                decorators,\n              ) as N.TsModuleDeclaration;\n            }\n            break;\n          }\n          case tt._namespace: {\n            if (this.nextTokenIsIdentifierOnSameLine()) {\n              const node = this.startNode<N.TsModuleDeclaration>();\n              this.next(); // eat 'namespace'\n              return this.tsParseDeclaration(\n                node,\n                tt._namespace,\n                false,\n                decorators,\n              ) as N.TsModuleDeclaration;\n            }\n            break;\n          }\n          case tt._type: {\n            if (this.nextTokenIsIdentifierOnSameLine()) {\n              const node = this.startNode<N.TsTypeAliasDeclaration>();\n              this.next(); // eat 'type'\n              return this.tsParseTypeAliasDeclaration(node);\n            }\n            break;\n          }\n        }\n      }\n\n      return super.parseStatementContent(flags, decorators);\n    }\n\n    parseAccessModifier(): N.Accessibility | undefined | null {\n      return this.tsParseModifier([\"public\", \"protected\", \"private\"]);\n    }\n\n    tsHasSomeModifiers(member: any, modifiers: readonly TsModifier[]): boolean {\n      return modifiers.some(modifier => {\n        if (tsIsAccessModifier(modifier)) {\n          return member.accessibility === modifier;\n        }\n        return !!member[modifier];\n      });\n    }\n\n    tsIsStartOfStaticBlocks() {\n      return (\n        this.isContextual(tt._static) &&\n        this.lookaheadCharCode() === charCodes.leftCurlyBrace\n      );\n    }\n\n    parseClassMember(\n      classBody: N.ClassBody,\n      member: any,\n      state: N.ParseClassMemberState,\n    ): void {\n      const modifiers = [\n        \"declare\",\n        \"private\",\n        \"public\",\n        \"protected\",\n        \"override\",\n        \"abstract\",\n        \"readonly\",\n        \"static\",\n      ] as const;\n      this.tsParseModifiers(\n        {\n          allowedModifiers: modifiers,\n          disallowedModifiers: [\"in\", \"out\"],\n          stopOnStartOfClassStaticBlock: true,\n          errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions,\n        },\n        member,\n      );\n\n      const callParseClassMemberWithIsStatic = () => {\n        if (this.tsIsStartOfStaticBlocks()) {\n          this.next(); // eat \"static\"\n          this.next(); // eat \"{\"\n          if (this.tsHasSomeModifiers(member, modifiers)) {\n            this.raise(\n              TSErrors.StaticBlockCannotHaveModifier,\n              this.state.curPosition(),\n            );\n          }\n          super.parseClassStaticBlock(classBody, member as N.StaticBlock);\n        } else {\n          this.parseClassMemberWithIsStatic(\n            classBody,\n            member,\n            state,\n            !!member.static,\n          );\n        }\n      };\n      if (member.declare) {\n        this.tsInAmbientContext(callParseClassMemberWithIsStatic);\n      } else {\n        callParseClassMemberWithIsStatic();\n      }\n    }\n\n    parseClassMemberWithIsStatic(\n      classBody: N.ClassBody,\n      member: Undone<N.ClassMember | N.TsIndexSignature>,\n      state: N.ParseClassMemberState,\n      isStatic: boolean,\n    ): void {\n      const idx = this.tsTryParseIndexSignature(\n        member as Undone<N.TsIndexSignature>,\n      );\n      if (idx) {\n        classBody.body.push(idx);\n\n        if ((member as any).abstract) {\n          this.raise(TSErrors.IndexSignatureHasAbstract, member);\n        }\n        if ((member as any).accessibility) {\n          this.raise(TSErrors.IndexSignatureHasAccessibility, member, {\n            modifier: (member as any).accessibility,\n          });\n        }\n        if ((member as any).declare) {\n          this.raise(TSErrors.IndexSignatureHasDeclare, member);\n        }\n        if ((member as any).override) {\n          this.raise(TSErrors.IndexSignatureHasOverride, member);\n        }\n\n        return;\n      }\n\n      if (!this.state.inAbstractClass && (member as any).abstract) {\n        this.raise(TSErrors.NonAbstractClassHasAbstractMethod, member);\n      }\n\n      if ((member as any).override) {\n        if (!state.hadSuperClass) {\n          this.raise(TSErrors.OverrideNotInSubClass, member);\n        }\n      }\n\n      /*:: invariant(member.type !== \"TSIndexSignature\") */\n\n      super.parseClassMemberWithIsStatic(\n        classBody,\n        member as Undone<N.ClassMember>,\n        state,\n        isStatic,\n      );\n    }\n\n    parsePostMemberNameModifiers(\n      methodOrProp: N.ClassMethod | N.ClassProperty | N.ClassPrivateProperty,\n    ): void {\n      const optional = this.eat(tt.question);\n      if (optional) methodOrProp.optional = true;\n\n      if ((methodOrProp as any).readonly && this.match(tt.parenL)) {\n        this.raise(TSErrors.ClassMethodHasReadonly, methodOrProp);\n      }\n\n      if ((methodOrProp as any).declare && this.match(tt.parenL)) {\n        this.raise(TSErrors.ClassMethodHasDeclare, methodOrProp);\n      }\n    }\n\n    // export type\n    // Should be true for anything parsed by `tsTryParseExportDeclaration`.\n    shouldParseExportDeclaration(): boolean {\n      if (this.tsIsDeclarationStart()) return true;\n      return super.shouldParseExportDeclaration();\n    }\n\n    // An apparent conditional expression could actually be an optional parameter in an arrow function.\n    parseConditional(\n      expr: N.Expression,\n\n      startLoc: Position,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.Expression {\n      if (!this.match(tt.question)) return expr;\n\n      if (this.state.maybeInArrowParameters) {\n        const nextCh = this.lookaheadCharCode();\n        // These tokens cannot start an expression, so if one of them follows\n        // ? then we are probably in an arrow function parameters list and we\n        // don't parse the conditional expression.\n        if (\n          nextCh === charCodes.comma || // (a?, b) => c\n          nextCh === charCodes.equalsTo || // (a? = b) => c\n          nextCh === charCodes.colon || // (a?: b) => c\n          nextCh === charCodes.rightParenthesis // (a?) => c\n        ) {\n          /*:: invariant(refExpressionErrors != null) */\n          this.setOptionalParametersError(refExpressionErrors!);\n          return expr;\n        }\n      }\n\n      return super.parseConditional(expr, startLoc, refExpressionErrors);\n    }\n\n    // Note: These \"type casts\" are *not* valid TS expressions.\n    // But we parse them here and change them when completing the arrow function.\n    parseParenItem<T extends N.Expression | N.RestElement | N.SpreadElement>(\n      node: T,\n      startLoc: Position,\n    ): T | N.TsTypeCastExpression {\n      const newNode = super.parseParenItem(node, startLoc);\n      if (this.eat(tt.question)) {\n        (newNode as N.Identifier).optional = true;\n        // Include questionmark in location of node\n        // Don't use this.finishNode() as otherwise we might process comments twice and\n        // include already consumed parens\n        this.resetEndLocation(node);\n      }\n\n      if (this.match(tt.colon)) {\n        const typeCastNode = this.startNodeAt<N.TsTypeCastExpression>(startLoc);\n        typeCastNode.expression = node as N.Expression;\n        typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();\n\n        return this.finishNode(typeCastNode, \"TSTypeCastExpression\");\n      }\n\n      return node;\n    }\n\n    parseExportDeclaration(\n      node: N.ExportNamedDeclaration,\n    ): N.Declaration | undefined | null {\n      if (!this.state.isAmbientContext && this.isContextual(tt._declare)) {\n        return this.tsInAmbientContext(() => this.parseExportDeclaration(node));\n      }\n\n      // Store original location\n      const startLoc = this.state.startLoc;\n\n      const isDeclare = this.eatContextual(tt._declare);\n\n      if (\n        isDeclare &&\n        (this.isContextual(tt._declare) || !this.shouldParseExportDeclaration())\n      ) {\n        throw this.raise(\n          TSErrors.ExpectedAmbientAfterExportDeclare,\n          this.state.startLoc,\n        );\n      }\n\n      const isIdentifier = tokenIsIdentifier(this.state.type);\n      const declaration: N.Declaration | undefined | null =\n        (isIdentifier && this.tsTryParseExportDeclaration()) ||\n        super.parseExportDeclaration(node);\n\n      if (!declaration) return null;\n\n      if (\n        declaration.type === \"TSInterfaceDeclaration\" ||\n        declaration.type === \"TSTypeAliasDeclaration\" ||\n        isDeclare\n      ) {\n        node.exportKind = \"type\";\n      }\n\n      if (isDeclare && declaration.type !== \"TSImportEqualsDeclaration\") {\n        // Reset location to include `declare` in range\n        this.resetStartLocation(declaration, startLoc);\n\n        declaration.declare = true;\n      }\n\n      return declaration;\n    }\n\n    parseClassId(\n      node: N.Class,\n      isStatement: boolean,\n      optionalId?: boolean | null,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType?: BindingFlag,\n    ): void {\n      if ((!isStatement || optionalId) && this.isContextual(tt._implements)) {\n        return;\n      }\n\n      super.parseClassId(\n        node,\n        isStatement,\n        optionalId,\n        (node as any).declare\n          ? BindingFlag.TYPE_TS_AMBIENT\n          : BindingFlag.TYPE_CLASS,\n      );\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseInOutConstModifiers,\n      );\n      if (typeParameters) node.typeParameters = typeParameters;\n    }\n\n    parseClassPropertyAnnotation(\n      node: N.ClassProperty | N.ClassPrivateProperty | N.ClassAccessorProperty,\n    ): void {\n      if (!node.optional) {\n        if (this.eat(tt.bang)) {\n          node.definite = true;\n        } else if (this.eat(tt.question)) {\n          node.optional = true;\n        }\n      }\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) node.typeAnnotation = type;\n    }\n\n    parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n      this.parseClassPropertyAnnotation(node);\n\n      if (\n        this.state.isAmbientContext &&\n        !(node.readonly && !node.typeAnnotation) &&\n        this.match(tt.eq)\n      ) {\n        this.raise(\n          TSErrors.DeclareClassFieldHasInitializer,\n          this.state.startLoc,\n        );\n      }\n      if (node.abstract && this.match(tt.eq)) {\n        const { key } = node;\n        this.raise(\n          TSErrors.AbstractPropertyHasInitializer,\n          this.state.startLoc,\n          {\n            propertyName:\n              key.type === \"Identifier\" && !node.computed\n                ? key.name\n                : `[${this.input.slice(this.offsetToSourcePos(key.start), this.offsetToSourcePos(key.end))}]`,\n          },\n        );\n      }\n\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(\n      node: N.ClassPrivateProperty,\n    ): N.ClassPrivateProperty {\n      if (node.abstract) {\n        this.raise(TSErrors.PrivateElementHasAbstract, node);\n      }\n\n      if (node.accessibility) {\n        this.raise(TSErrors.PrivateElementHasAccessibility, node, {\n          modifier: node.accessibility,\n        });\n      }\n\n      this.parseClassPropertyAnnotation(node);\n      return super.parseClassPrivateProperty(node);\n    }\n\n    parseClassAccessorProperty(\n      node: N.ClassAccessorProperty,\n    ): N.ClassAccessorProperty {\n      this.parseClassPropertyAnnotation(node);\n      if (node.optional) {\n        this.raise(TSErrors.AccessorCannotBeOptional, node);\n      }\n      return super.parseClassAccessorProperty(node);\n    }\n\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters && isConstructor) {\n        this.raise(TSErrors.ConstructorHasTypeParameters, typeParameters);\n      }\n\n      const { declare = false, kind } = method;\n\n      if (declare && (kind === \"get\" || kind === \"set\")) {\n        this.raise(TSErrors.DeclareAccessor, method, { kind });\n      }\n      if (typeParameters) method.typeParameters = typeParameters;\n      super.pushClassMethod(\n        classBody,\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n      );\n    }\n\n    pushClassPrivateMethod(\n      classBody: N.ClassBody,\n      method: N.ClassPrivateMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n    ): void {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters) method.typeParameters = typeParameters;\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n    }\n\n    declareClassPrivateMethodInScope(\n      node: N.ClassPrivateMethod | N.TSDeclareMethod,\n      kind: number,\n    ) {\n      if (node.type === \"TSDeclareMethod\") return;\n      // This happens when using the \"estree\" plugin.\n      if (\n        (node as N.Node).type === \"MethodDefinition\" &&\n        (node as unknown as N.EstreeMethodDefinition).value.body == null\n      ) {\n        return;\n      }\n\n      super.declareClassPrivateMethodInScope(node, kind);\n    }\n\n    parseClassSuper(node: N.Class): void {\n      super.parseClassSuper(node);\n      // handle `extends f<<T>\n      if (node.superClass && (this.match(tt.lt) || this.match(tt.bitShiftL))) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.superTypeArguments = this.tsParseTypeArgumentsInExpression();\n        } else {\n          node.superTypeParameters = this.tsParseTypeArgumentsInExpression();\n        }\n      }\n      if (this.eatContextual(tt._implements)) {\n        node.implements = this.tsParseHeritageClause(\"implements\");\n      }\n    }\n\n    parseObjPropValue<T extends N.ObjectMember>(\n      prop: Undone<T>,\n      startLoc: Position | undefined | null,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): T {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters) prop.typeParameters = typeParameters;\n\n      return super.parseObjPropValue(\n        prop,\n\n        startLoc,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n        refExpressionErrors,\n      );\n    }\n\n    parseFunctionParams(node: N.Function, isConstructor: boolean): void {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters) node.typeParameters = typeParameters;\n      super.parseFunctionParams(node, isConstructor);\n    }\n\n    // `let x: number;`\n    parseVarId(\n      decl: N.VariableDeclarator,\n      kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n    ): void {\n      super.parseVarId(decl, kind);\n      if (\n        decl.id.type === \"Identifier\" &&\n        !this.hasPrecedingLineBreak() &&\n        this.eat(tt.bang)\n      ) {\n        decl.definite = true;\n      }\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) {\n        decl.id.typeAnnotation = type;\n        this.resetEndLocation(decl.id); // set end position to end of type\n      }\n    }\n\n    // parse the return type of an async arrow function - let foo = (async (): number => {});\n    parseAsyncArrowFromCallExpression(\n      node: N.ArrowFunctionExpression,\n      call: N.CallExpression,\n    ): N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        node.returnType = this.tsParseTypeAnnotation();\n      }\n      return super.parseAsyncArrowFromCallExpression(node, call);\n    }\n\n    parseMaybeAssign(\n      refExpressionErrors?: ExpressionErrors | null,\n      afterLeftParse?: Function,\n    ): N.Expression {\n      // Note: When the JSX plugin is on, type assertions (`<T> x`) aren't valid syntax.\n\n      let state: State | undefined | null;\n      let jsx;\n      let typeCast;\n\n      if (\n        this.hasPlugin(\"jsx\") &&\n        (this.match(tt.jsxTagStart) || this.match(tt.lt))\n      ) {\n        // Prefer to parse JSX if possible. But may be an arrow fn.\n        state = this.state.clone();\n\n        jsx = this.tryParse(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\n\n        /*:: invariant(!jsx.aborted) */\n        /*:: invariant(jsx.node != null) */\n        if (!jsx.error) return jsx.node!;\n\n        // Remove `tc.j_expr` or `tc.j_oTag` from context added\n        // by parsing `jsxTagStart` to stop the JSX plugin from\n        // messing with the tokens\n        const { context } = this.state;\n        const currentContext = context[context.length - 1];\n        if (currentContext === tc.j_oTag || currentContext === tc.j_expr) {\n          context.pop();\n        }\n      }\n\n      if (!jsx?.error && !this.match(tt.lt)) {\n        return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n      }\n\n      // Either way, we're looking at a '<': tt.jsxTagStart or relational.\n\n      // If the state was cloned in the JSX parsing branch above but there\n      // have been any error in the tryParse call, this.state is set to state\n      // so we still need to clone it.\n      if (!state || state === this.state) state = this.state.clone();\n\n      let typeParameters: N.TsTypeParameterDeclaration | undefined | null;\n      // We need to explicitly annotate 'abort' for microsoft/TypeScript#58170\n      const arrow = this.tryParse((abort: () => never) => {\n        // This is similar to TypeScript's `tryParseParenthesizedArrowFunctionExpression`.\n        typeParameters = this.tsParseTypeParameters(this.tsParseConstModifier);\n        const expr = super.parseMaybeAssign(\n          refExpressionErrors,\n          afterLeftParse,\n        );\n\n        if (\n          expr.type !== \"ArrowFunctionExpression\" ||\n          expr.extra?.parenthesized\n        ) {\n          abort();\n        }\n\n        // Correct TypeScript code should have at least 1 type parameter, but don't crash on bad code.\n        if (typeParameters?.params.length !== 0) {\n          this.resetStartLocationFromNode(expr, typeParameters);\n        }\n        expr.typeParameters = typeParameters;\n\n        if (process.env.BABEL_8_BREAKING) {\n          if (\n            this.hasPlugin(\"jsx\") &&\n            expr.typeParameters.params.length === 1 &&\n            !expr.typeParameters.extra?.trailingComma\n          ) {\n            // report error if single type parameter used without trailing comma.\n            const parameter = expr.typeParameters\n              .params[0] as N.TsTypeParameter;\n            if (!parameter.constraint) {\n              // A single type parameter must either have constraints\n              // or a trailing comma, otherwise it's ambiguous with JSX.\n              this.raise(\n                TSErrors.SingleTypeParameterWithoutTrailingComma,\n                createPositionWithColumnOffset(parameter.loc.end, 1),\n                {\n                  typeParameterName: process.env.BABEL_8_BREAKING\n                    ? (parameter.name as N.Identifier).name\n                    : (parameter.name as string),\n                },\n              );\n            }\n          }\n        }\n\n        return expr;\n      }, state);\n\n      /*:: invariant(arrow.node != null) */\n      if (!arrow.error && !arrow.aborted) {\n        // This error is reported outside of the this.tryParse call so that\n        // in case of <T>(x) => 2, we don't consider <T>(x) as a type assertion\n        // because of this error.\n        if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\n        return arrow.node;\n      }\n\n      if (!jsx) {\n        // Try parsing a type cast instead of an arrow function.\n        // This will never happen outside of JSX.\n        // (Because in JSX the '<' should be a jsxTagStart and not a relational.\n        assert(!this.hasPlugin(\"jsx\"));\n\n        // This will start with a type assertion (via parseMaybeUnary).\n        // But don't directly call `this.tsParseTypeAssertion` because we want to handle any binary after it.\n        typeCast = this.tryParse(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\n        /*:: invariant(!typeCast.aborted) */\n        /*:: invariant(typeCast.node != null) */\n        if (!typeCast.error) return typeCast.node!;\n      }\n\n      if (jsx?.node) {\n        /*:: invariant(jsx.failState) */\n        this.state = jsx.failState;\n        return jsx.node;\n      }\n\n      if (arrow.node) {\n        /*:: invariant(arrow.failState) */\n        this.state = arrow.failState;\n        if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\n        return arrow.node;\n      }\n\n      if (typeCast?.node) {\n        /*:: invariant(typeCast.failState) */\n        this.state = typeCast.failState;\n        return typeCast.node;\n      }\n\n      // eslint-disable-next-line @typescript-eslint/only-throw-error\n      throw jsx?.error || arrow.error || typeCast?.error;\n    }\n\n    reportReservedArrowTypeParam(node: any) {\n      if (\n        node.params.length === 1 &&\n        !node.params[0].constraint &&\n        !node.extra?.trailingComma &&\n        this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")\n      ) {\n        this.raise(TSErrors.ReservedArrowTypeParam, node);\n      }\n    }\n\n    // Handle type assertions\n    parseMaybeUnary(\n      refExpressionErrors?: ExpressionErrors | null,\n      sawUnary?: boolean,\n    ): N.Expression {\n      if (!this.hasPlugin(\"jsx\") && this.match(tt.lt)) {\n        return this.tsParseTypeAssertion();\n      }\n      return super.parseMaybeUnary(refExpressionErrors, sawUnary);\n    }\n\n    parseArrow(\n      node: Undone<N.ArrowFunctionExpression>,\n    ): Undone<N.ArrowFunctionExpression> | null | undefined {\n      if (this.match(tt.colon)) {\n        // This is different from how the TS parser does it.\n        // TS uses lookahead. The Babel Parser parses it as a parenthesized expression and converts.\n\n        const result = this.tryParse(abort => {\n          const returnType = this.tsParseTypeOrTypePredicateAnnotation(\n            tt.colon,\n          );\n          if (this.canInsertSemicolon() || !this.match(tt.arrow)) abort();\n          return returnType;\n        });\n\n        if (result.aborted) return;\n\n        if (!result.thrown) {\n          if (result.error) this.state = result.failState;\n          // @ts-expect-error refine typings\n          node.returnType = result.node;\n        }\n      }\n\n      return super.parseArrow(node);\n    }\n\n    // Allow type annotations inside of a parameter list.\n    parseFunctionParamType(param: N.Pattern) {\n      if (this.eat(tt.question)) {\n        (param as any as N.Identifier).optional = true;\n      }\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) param.typeAnnotation = type;\n      this.resetEndLocation(param);\n\n      return param;\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      switch (node.type) {\n        case \"TSTypeCastExpression\":\n          return this.isAssignable(node.expression, isBinding);\n        case \"TSParameterProperty\":\n          return true;\n        default:\n          return super.isAssignable(node, isBinding);\n      }\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\n      switch (node.type) {\n        case \"ParenthesizedExpression\":\n          this.toAssignableParenthesizedExpression(node, isLHS);\n          break;\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSNonNullExpression\":\n        case \"TSTypeAssertion\":\n          if (isLHS) {\n            this.expressionScope.recordArrowParameterBindingError(\n              TSErrors.UnexpectedTypeCastInParameter,\n              node,\n            );\n          } else {\n            this.raise(TSErrors.UnexpectedTypeCastInParameter, node);\n          }\n          this.toAssignable(node.expression, isLHS);\n          break;\n        case \"AssignmentExpression\":\n          if (!isLHS && node.left.type === \"TSTypeCastExpression\") {\n            node.left = this.typeCastToParameter(node.left) as N.Assignable;\n          }\n        /* fall through */\n        default:\n          super.toAssignable(node, isLHS);\n      }\n    }\n\n    toAssignableParenthesizedExpression(\n      node: N.ParenthesizedExpression,\n      isLHS: boolean,\n    ): void {\n      switch (node.expression.type) {\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSNonNullExpression\":\n        case \"TSTypeAssertion\":\n        case \"ParenthesizedExpression\":\n          this.toAssignable(node.expression, isLHS);\n          break;\n        default:\n          super.toAssignable(node, isLHS);\n      }\n    }\n\n    checkToRestConversion(node: N.Node, allowPattern: boolean): void {\n      switch (node.type) {\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSTypeAssertion\":\n        case \"TSNonNullExpression\":\n          this.checkToRestConversion(node.expression, false);\n          break;\n        default:\n          super.checkToRestConversion(node, allowPattern);\n      }\n    }\n\n    isValidLVal(\n      type:\n        | \"TSTypeCastExpression\"\n        | \"TSParameterProperty\"\n        | \"TSNonNullExpression\"\n        | \"TSInstantiationExpression\"\n        | \"TSAsExpression\"\n        | \"TSSatisfiesExpression\"\n        | \"TSTypeAssertion\",\n      disallowCallExpression: boolean,\n      isUnparenthesizedInAssign: boolean,\n      binding: BindingFlag,\n    ) {\n      switch (type) {\n        // Allow \"typecasts\" to appear on the left of assignment expressions,\n        // because it may be in an arrow function.\n        // e.g. `const f = (foo: number = 0) => foo;`\n        case \"TSTypeCastExpression\":\n          return true;\n        case \"TSParameterProperty\":\n          return \"parameter\";\n        case \"TSNonNullExpression\":\n          return \"expression\";\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSTypeAssertion\":\n          return (\n            (binding !== BindingFlag.TYPE_NONE || !isUnparenthesizedInAssign) &&\n            ([\"expression\", true] as [string, boolean])\n          );\n        default:\n          return super.isValidLVal(\n            type,\n            disallowCallExpression,\n            isUnparenthesizedInAssign,\n            binding,\n          );\n      }\n    }\n\n    parseBindingAtom(): N.Pattern {\n      if (this.state.type === tt._this) {\n        return this.parseIdentifier(/* liberal */ true);\n      }\n      return super.parseBindingAtom();\n    }\n\n    parseMaybeDecoratorArguments(\n      expr: N.Expression,\n      startLoc: Position,\n    ): N.Expression {\n      // handles `@f<<T>`\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        const typeArguments = this.tsParseTypeArgumentsInExpression();\n\n        if (this.match(tt.parenL)) {\n          const call = super.parseMaybeDecoratorArguments(\n            expr,\n            startLoc,\n          ) as N.CallExpression;\n          if (process.env.BABEL_8_BREAKING) {\n            call.typeArguments = typeArguments;\n          } else {\n            call.typeParameters = typeArguments;\n          }\n\n          return call;\n        }\n\n        this.unexpected(null, tt.parenL);\n      }\n\n      return super.parseMaybeDecoratorArguments(expr, startLoc);\n    }\n\n    checkCommaAfterRest(\n      close: (typeof charCodes)[keyof typeof charCodes],\n    ): boolean {\n      if (\n        this.state.isAmbientContext &&\n        this.match(tt.comma) &&\n        this.lookaheadCharCode() === close\n      ) {\n        this.next();\n        return false;\n      }\n      return super.checkCommaAfterRest(close);\n    }\n\n    // === === === === === === === === === === === === === === === ===\n    // Note: All below methods are duplicates of something in flow.js.\n    // Not sure what the best way to combine these is.\n    // === === === === === === === === === === === === === === === ===\n\n    isClassMethod(): boolean {\n      return this.match(tt.lt) || super.isClassMethod();\n    }\n\n    isClassProperty(): boolean {\n      return (\n        this.match(tt.bang) || this.match(tt.colon) || super.isClassProperty()\n      );\n    }\n\n    parseMaybeDefault<P extends N.Pattern>(\n      startLoc?: Position | null,\n      left?: P | null,\n    ): P | N.AssignmentPattern {\n      const node = super.parseMaybeDefault(startLoc, left);\n\n      if (\n        node.type === \"AssignmentPattern\" &&\n        node.typeAnnotation &&\n        node.right.start < node.typeAnnotation.start\n      ) {\n        this.raise(TSErrors.TypeAnnotationAfterAssign, node.typeAnnotation);\n      }\n\n      return node;\n    }\n\n    // ensure that inside types, we bypass the jsx parser plugin\n    getTokenFromCode(code: number): void {\n      if (this.state.inType) {\n        if (code === charCodes.greaterThan) {\n          this.finishOp(tt.gt, 1);\n          return;\n        }\n        if (code === charCodes.lessThan) {\n          this.finishOp(tt.lt, 1);\n          return;\n        }\n      }\n      super.getTokenFromCode(code);\n    }\n\n    // used after we have finished parsing types\n    reScan_lt_gt() {\n      const { type } = this.state;\n      if (type === tt.lt) {\n        this.state.pos -= 1;\n        this.readToken_lt();\n      } else if (type === tt.gt) {\n        this.state.pos -= 1;\n        this.readToken_gt();\n      }\n    }\n\n    reScan_lt() {\n      const { type } = this.state;\n      if (type === tt.bitShiftL) {\n        this.state.pos -= 2;\n        this.finishOp(tt.lt, 1);\n        return tt.lt;\n      }\n      return type;\n    }\n\n    toAssignableListItem(\n      exprList: (N.Expression | N.SpreadElement | N.RestElement)[],\n      index: number,\n      isLHS: boolean,\n    ): void {\n      const node = exprList[index];\n      if (node.type === \"TSTypeCastExpression\") {\n        exprList[index] = this.typeCastToParameter(node);\n      }\n      super.toAssignableListItem(exprList, index, isLHS);\n    }\n\n    typeCastToParameter(node: N.TsTypeCastExpression): N.Expression {\n      (node.expression as N.Identifier).typeAnnotation = node.typeAnnotation;\n\n      this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);\n\n      return node.expression;\n    }\n\n    shouldParseArrow(params: Array<N.Node>) {\n      if (this.match(tt.colon)) {\n        return params.every(expr => this.isAssignable(expr, true));\n      }\n      return super.shouldParseArrow(params);\n    }\n\n    shouldParseAsyncArrow(): boolean {\n      return this.match(tt.colon) || super.shouldParseAsyncArrow();\n    }\n\n    canHaveLeadingDecorator() {\n      // Avoid unnecessary lookahead in checking for abstract class unless needed!\n      return super.canHaveLeadingDecorator() || this.isAbstractClass();\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: N.JSXOpeningElement,\n    ): N.JSXOpeningElement {\n      // handles `<Component<<T>`\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        const typeArguments = this.tsTryParseAndCatch(() =>\n          this.tsParseTypeArgumentsInExpression(),\n        );\n        if (typeArguments) {\n          if (process.env.BABEL_8_BREAKING) {\n            node.typeArguments = typeArguments;\n          } else {\n            node.typeParameters = typeArguments;\n          }\n        }\n      }\n      return super.jsxParseOpeningElementAfterName(node);\n    }\n\n    getGetterSetterExpectedParamCount(\n      method: N.ObjectMethod | N.ClassMethod,\n    ): number {\n      const baseCount = super.getGetterSetterExpectedParamCount(method);\n      const params = this.getObjectOrClassMethodParams(method);\n      const firstParam = params[0];\n      const hasContextParam = firstParam && this.isThisParam(firstParam);\n\n      return hasContextParam ? baseCount + 1 : baseCount;\n    }\n\n    parseCatchClauseParam(): N.Pattern {\n      const param = super.parseCatchClauseParam();\n      const type = this.tsTryParseTypeAnnotation();\n\n      if (type) {\n        param.typeAnnotation = type;\n        this.resetEndLocation(param);\n      }\n\n      return param;\n    }\n\n    tsInAmbientContext<T>(cb: () => T): T {\n      const { isAmbientContext: oldIsAmbientContext, strict: oldStrict } =\n        this.state;\n      this.state.isAmbientContext = true;\n      this.state.strict = false;\n      try {\n        return cb();\n      } finally {\n        this.state.isAmbientContext = oldIsAmbientContext;\n        this.state.strict = oldStrict;\n      }\n    }\n\n    parseClass<T extends N.Class>(\n      node: Undone<T>,\n      isStatement: boolean,\n      optionalId?: boolean,\n    ): T {\n      const oldInAbstractClass = this.state.inAbstractClass;\n      this.state.inAbstractClass = !!(node as any).abstract;\n      try {\n        return super.parseClass(node, isStatement, optionalId);\n      } finally {\n        this.state.inAbstractClass = oldInAbstractClass;\n      }\n    }\n\n    tsParseAbstractDeclaration(\n      node: any,\n      decorators: N.Decorator[] | null,\n    ): N.ClassDeclaration | N.TsInterfaceDeclaration | null {\n      if (this.match(tt._class)) {\n        node.abstract = true;\n        return this.maybeTakeDecorators(\n          decorators,\n          this.parseClass<N.ClassDeclaration>(\n            node as N.ClassDeclaration,\n            /* isStatement */ true,\n            /* optionalId */ false,\n          ),\n        );\n      } else if (this.isContextual(tt._interface)) {\n        // for invalid abstract interface\n\n        // To avoid\n        //   abstract interface\n        //   Foo {}\n        if (!this.hasFollowingLineBreak()) {\n          node.abstract = true;\n          this.raise(TSErrors.NonClassMethodPropertyHasAbstractModifier, node);\n          return this.tsParseInterfaceDeclaration(\n            node as N.TsInterfaceDeclaration,\n          );\n        } else {\n          return null;\n        }\n      }\n      throw this.unexpected(null, tt._class);\n    }\n\n    parseMethod<\n      T extends N.ObjectMethod | N.ClassMethod | N.ClassPrivateMethod,\n    >(\n      node: Undone<T>,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowDirectSuper: boolean,\n      type: T[\"type\"],\n      inClassScope?: boolean,\n    ) {\n      const method = super.parseMethod<T>(\n        node,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowDirectSuper,\n        type,\n        inClassScope,\n      );\n      // @ts-expect-error todo(flow->ts) property not defined for all types in union\n      if (method.abstract || method.type === \"TSAbstractMethodDefinition\") {\n        const hasEstreePlugin = this.hasPlugin(\"estree\");\n        const methodFn = hasEstreePlugin\n          ? // @ts-expect-error estree typings\n            method.value\n          : method;\n        if (methodFn.body) {\n          const { key } = method;\n          this.raise(TSErrors.AbstractMethodHasImplementation, method, {\n            methodName:\n              key.type === \"Identifier\" && !method.computed\n                ? key.name\n                : `[${this.input.slice(this.offsetToSourcePos(key.start), this.offsetToSourcePos(key.end))}]`,\n          });\n        }\n      }\n      return method;\n    }\n\n    tsParseTypeParameterName(): N.Identifier | string {\n      const typeName: N.Identifier = this.parseIdentifier();\n      return process.env.BABEL_8_BREAKING ? typeName : typeName.name;\n    }\n\n    shouldParseAsAmbientContext(): boolean {\n      return !!this.getPluginOption(\"typescript\", \"dts\");\n    }\n\n    parse() {\n      if (this.shouldParseAsAmbientContext()) {\n        this.state.isAmbientContext = true;\n      }\n      return super.parse();\n    }\n\n    getExpression() {\n      if (this.shouldParseAsAmbientContext()) {\n        this.state.isAmbientContext = true;\n      }\n      return super.getExpression();\n    }\n\n    parseExportSpecifier(\n      node: Undone<N.ExportSpecifier>,\n      isString: boolean,\n      isInTypeExport: boolean,\n      isMaybeTypeOnly: boolean,\n    ) {\n      if (!isString && isMaybeTypeOnly) {\n        this.parseTypeOnlyImportExportSpecifier(\n          node,\n          /* isImport */ false,\n          isInTypeExport,\n        );\n        return this.finishNode<N.ExportSpecifier>(node, \"ExportSpecifier\");\n      }\n      node.exportKind = \"value\";\n      return super.parseExportSpecifier(\n        node,\n        isString,\n        isInTypeExport,\n        isMaybeTypeOnly,\n      );\n    }\n\n    parseImportSpecifier(\n      specifier: Undone<N.ImportSpecifier>,\n      importedIsString: boolean,\n      isInTypeOnlyImport: boolean,\n      isMaybeTypeOnly: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType: BindingFlag | undefined,\n    ): N.ImportSpecifier {\n      if (!importedIsString && isMaybeTypeOnly) {\n        this.parseTypeOnlyImportExportSpecifier(\n          specifier,\n          /* isImport */ true,\n          isInTypeOnlyImport,\n        );\n        return this.finishNode<N.ImportSpecifier>(specifier, \"ImportSpecifier\");\n      }\n      specifier.importKind = \"value\";\n      return super.parseImportSpecifier(\n        specifier,\n        importedIsString,\n        isInTypeOnlyImport,\n        isMaybeTypeOnly,\n        isInTypeOnlyImport\n          ? BindingFlag.TYPE_TS_TYPE_IMPORT\n          : BindingFlag.TYPE_TS_VALUE_IMPORT,\n      );\n    }\n\n    parseTypeOnlyImportExportSpecifier(\n      node: any,\n      isImport: boolean,\n      isInTypeOnlyImportExport: boolean,\n    ): void {\n      const leftOfAsKey = isImport ? \"imported\" : \"local\";\n      const rightOfAsKey = isImport ? \"local\" : \"exported\";\n\n      let leftOfAs = node[leftOfAsKey];\n      let rightOfAs;\n\n      let hasTypeSpecifier = false;\n      let canParseAsKeyword = true;\n\n      const loc = leftOfAs.loc.start;\n\n      // https://github.com/microsoft/TypeScript/blob/fc4f9d83d5939047aa6bb2a43965c6e9bbfbc35b/src/compiler/parser.ts#L7411-L7456\n      // import { type } from \"mod\";          - hasTypeSpecifier: false, leftOfAs: type\n      // import { type as } from \"mod\";       - hasTypeSpecifier: true,  leftOfAs: as\n      // import { type as as } from \"mod\";    - hasTypeSpecifier: false, leftOfAs: type, rightOfAs: as\n      // import { type as as as } from \"mod\"; - hasTypeSpecifier: true,  leftOfAs: as,   rightOfAs: as\n      if (this.isContextual(tt._as)) {\n        // { type as ...? }\n        const firstAs = this.parseIdentifier();\n        if (this.isContextual(tt._as)) {\n          // { type as as ...? }\n          const secondAs = this.parseIdentifier();\n          if (tokenIsKeywordOrIdentifier(this.state.type)) {\n            // { type as as something }\n            hasTypeSpecifier = true;\n            leftOfAs = firstAs;\n            rightOfAs = isImport\n              ? this.parseIdentifier()\n              : this.parseModuleExportName();\n            canParseAsKeyword = false;\n          } else {\n            // { type as as }\n            rightOfAs = secondAs;\n            canParseAsKeyword = false;\n          }\n        } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n          // { type as something }\n          canParseAsKeyword = false;\n          rightOfAs = isImport\n            ? this.parseIdentifier()\n            : this.parseModuleExportName();\n        } else {\n          // { type as }\n          hasTypeSpecifier = true;\n          leftOfAs = firstAs;\n        }\n      } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n        // { type something ...? }\n        hasTypeSpecifier = true;\n        if (isImport) {\n          leftOfAs = this.parseIdentifier(true);\n          if (!this.isContextual(tt._as)) {\n            this.checkReservedWord(\n              leftOfAs.name,\n              leftOfAs.loc.start,\n              true,\n              true,\n            );\n          }\n        } else {\n          leftOfAs = this.parseModuleExportName();\n        }\n      }\n      if (hasTypeSpecifier && isInTypeOnlyImportExport) {\n        this.raise(\n          isImport\n            ? TSErrors.TypeModifierIsUsedInTypeImports\n            : TSErrors.TypeModifierIsUsedInTypeExports,\n          loc,\n        );\n      }\n\n      node[leftOfAsKey] = leftOfAs;\n      node[rightOfAsKey] = rightOfAs;\n\n      const kindKey = isImport ? \"importKind\" : \"exportKind\";\n      node[kindKey] = hasTypeSpecifier ? \"type\" : \"value\";\n\n      if (canParseAsKeyword && this.eatContextual(tt._as)) {\n        node[rightOfAsKey] = isImport\n          ? this.parseIdentifier()\n          : this.parseModuleExportName();\n      }\n      if (!node[rightOfAsKey]) {\n        node[rightOfAsKey] = this.cloneIdentifier(node[leftOfAsKey]);\n      }\n      if (isImport) {\n        this.checkIdentifier(\n          node[rightOfAsKey],\n          hasTypeSpecifier\n            ? BindingFlag.TYPE_TS_TYPE_IMPORT\n            : BindingFlag.TYPE_TS_VALUE_IMPORT,\n        );\n      }\n    }\n\n    /**\n     * This hook is defined in the ESTree plugin.\n     * The TS-ESLint always define optional AST properties, here we provide the\n     * default value for such properties immediately after `finishNode` was invoked.\n     *\n     * @param node The AST node finished by finishNode\n     * @returns\n     */\n    fillOptionalPropertiesForTSESLint(node: N.Node): void {\n      switch (node.type) {\n        case \"ExpressionStatement\":\n          node.directive ??= undefined;\n          return;\n        case \"RestElement\":\n          node.value = undefined;\n        /* fallthrough */\n        case \"Identifier\":\n        case \"ArrayPattern\":\n        case \"AssignmentPattern\":\n        case \"ObjectPattern\":\n          node.decorators ??= [];\n          node.optional ??= false;\n          node.typeAnnotation ??= undefined;\n          return;\n        case \"TSParameterProperty\":\n          node.accessibility ??= undefined;\n          node.decorators ??= [];\n          node.override ??= false;\n          node.readonly ??= false;\n          node.static ??= false;\n          return;\n        case \"TSEmptyBodyFunctionExpression\":\n          node.body = null;\n        /* fallthrough */\n        case \"TSDeclareFunction\":\n        case \"FunctionDeclaration\":\n        case \"FunctionExpression\":\n        case \"ClassMethod\":\n        case \"ClassPrivateMethod\":\n          node.declare ??= false;\n          node.returnType ??= undefined;\n          node.typeParameters ??= undefined;\n          return;\n        case \"Property\":\n          node.optional ??= false;\n          return;\n        case \"TSMethodSignature\":\n        case \"TSPropertySignature\":\n          node.optional ??= false;\n        /* fallthrough */\n        case \"TSIndexSignature\":\n          node.accessibility ??= undefined;\n          node.readonly ??= false;\n          node.static ??= false;\n          return;\n        case \"TSAbstractPropertyDefinition\":\n        case \"PropertyDefinition\":\n        case \"TSAbstractAccessorProperty\":\n        case \"AccessorProperty\":\n          node.declare ??= false;\n          node.definite ??= false;\n          node.readonly ??= false;\n          node.typeAnnotation ??= undefined;\n        /* fallthrough */\n        case \"TSAbstractMethodDefinition\":\n        case \"MethodDefinition\":\n          node.accessibility ??= undefined;\n          node.decorators ??= [];\n          node.override ??= false;\n          node.optional ??= false;\n          return;\n        case \"ClassExpression\":\n          node.id ??= null;\n        /* fallthrough */\n        case \"ClassDeclaration\":\n          node.abstract ??= false;\n          node.declare ??= false;\n          node.decorators ??= [];\n          node.implements ??= [];\n          node.superTypeArguments ??= undefined;\n          node.typeParameters ??= undefined;\n          return;\n        case \"TSTypeAliasDeclaration\":\n        case \"VariableDeclaration\":\n          node.declare ??= false;\n          return;\n        case \"VariableDeclarator\":\n          node.definite ??= false;\n          return;\n        case \"TSEnumDeclaration\":\n          node.const ??= false;\n          node.declare ??= false;\n          return;\n        case \"TSEnumMember\":\n          node.computed ??= false;\n          return;\n        case \"TSImportType\":\n          node.qualifier ??= null;\n          node.options ??= null;\n          if (process.env.BABEL_8_BREAKING) {\n            node.typeArguments ??= null;\n          }\n          return;\n        case \"TSInterfaceDeclaration\":\n          node.declare ??= false;\n          node.extends ??= [];\n          return;\n        case \"TSMappedType\":\n          node.optional ??= false;\n          node.readonly ??= undefined;\n          return;\n        case \"TSModuleDeclaration\":\n          node.declare ??= false;\n          node.global ??= node.kind === \"global\";\n          return;\n        case \"TSTypeParameter\":\n          node.const ??= false;\n          node.in ??= false;\n          node.out ??= false;\n          return;\n      }\n    }\n\n    chStartsBindingIdentifierAndNotRelationalOperator(ch: number, pos: number) {\n      if (isIdentifierStart(ch)) {\n        keywordAndTSRelationalOperator.lastIndex = pos;\n        if (keywordAndTSRelationalOperator.test(this.input)) {\n          // We have seen as/in/instanceof/satisfies so far, now check if the identifier\n          // ends here\n          const endCh = this.codePointAtPos(\n            keywordAndTSRelationalOperator.lastIndex,\n          );\n          if (!isIdentifierChar(endCh) && endCh !== charCodes.backslash) {\n            return false;\n          }\n        }\n        return true;\n      } else if (ch === charCodes.backslash) {\n        return true;\n      } else {\n        return false;\n      }\n    }\n\n    nextTokenIsIdentifierAndNotTSRelationalOperatorOnSameLine(): boolean {\n      const next = this.nextTokenInLineStart();\n      const nextCh = this.codePointAtPos(next);\n      return this.chStartsBindingIdentifierAndNotRelationalOperator(\n        nextCh,\n        next,\n      );\n    }\n\n    nextTokenIsIdentifierOrStringLiteralOnSameLine(): boolean {\n      const next = this.nextTokenInLineStart();\n      const nextCh = this.codePointAtPos(next);\n      return (\n        this.chStartsBindingIdentifier(nextCh, next) ||\n        nextCh === charCodes.quotationMark ||\n        nextCh === charCodes.apostrophe\n      );\n    }\n  };\n\nfunction isPossiblyLiteralEnum(expression: N.Expression): boolean {\n  if (expression.type !== \"MemberExpression\") return false;\n\n  const { computed, property } = expression;\n\n  if (\n    computed &&\n    property.type !== \"StringLiteral\" &&\n    (property.type !== \"TemplateLiteral\" || property.expressions.length > 0)\n  ) {\n    return false;\n  }\n\n  return isUncomputedMemberExpressionChain(expression.object);\n}\n\n// If a const declaration has no type annotation and is initialized to\n// a string literal, numeric literal, or enum reference, then it is\n// allowed. In an ideal world, we'd check whether init was *actually* an\n// enum reference, but we allow anything that \"could be\" a literal enum\n// in `isPossiblyLiteralEnum` since we don't have all the information\n// that the typescript compiler has.\nfunction isValidAmbientConstInitializer(\n  expression: N.Expression,\n  estree: boolean,\n): boolean {\n  const { type } = expression;\n  if (expression.extra?.parenthesized) {\n    return false;\n  }\n  if (estree) {\n    if (type === \"Literal\") {\n      const { value } = expression;\n      if (typeof value === \"string\" || typeof value === \"boolean\") {\n        return true;\n      }\n    }\n  } else {\n    if (type === \"StringLiteral\" || type === \"BooleanLiteral\") {\n      return true;\n    }\n  }\n  if (isNumber(expression, estree) || isNegativeNumber(expression, estree)) {\n    return true;\n  }\n  if (type === \"TemplateLiteral\" && expression.expressions.length === 0) {\n    return true;\n  }\n  if (isPossiblyLiteralEnum(expression)) {\n    return true;\n  }\n  return false;\n}\n\nfunction isNumber(expression: N.Expression, estree: boolean): boolean {\n  if (estree) {\n    return (\n      expression.type === \"Literal\" &&\n      (typeof expression.value === \"number\" || \"bigint\" in expression)\n    );\n  }\n  return (\n    expression.type === \"NumericLiteral\" || expression.type === \"BigIntLiteral\"\n  );\n}\n\nfunction isNegativeNumber(expression: N.Expression, estree: boolean): boolean {\n  if (expression.type === \"UnaryExpression\") {\n    const { operator, argument } = expression;\n    if (operator === \"-\" && isNumber(argument, estree)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction isUncomputedMemberExpressionChain(expression: N.Expression): boolean {\n  if (expression.type === \"Identifier\") return true;\n  if (expression.type !== \"MemberExpression\" || expression.computed) {\n    return false;\n  }\n\n  return isUncomputedMemberExpressionChain(expression.object);\n}\n", "import * as charCodes from \"charcodes\";\n\nimport { tokenLabelName, tt } from \"../tokenizer/types.ts\";\nimport type Parser from \"../parser/index.ts\";\nimport type * as N from \"../types.ts\";\nimport { ParseErrorEnum } from \"../parse-error.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\nimport type { BindingFlag } from \"../util/scopeflags.ts\";\nimport type { Position } from \"../util/location.ts\";\n\ntype PossiblePlaceholders = {\n  Identifier: N.Identifier;\n  StringLiteral: N.StringLiteral;\n  Expression: N.Expression;\n  Statement: N.Statement;\n  Declaration: N.Declaration;\n  BlockStatement: N.BlockStatement;\n  ClassBody: N.ClassBody;\n  Pattern: N.Pattern;\n};\nexport type PlaceholderTypes = keyof PossiblePlaceholders;\n\ntype NodeOf<T extends keyof PossiblePlaceholders> = PossiblePlaceholders[T];\n// todo: when there  is proper union type for Node\n// type NodeOf<T extends PlaceholderTypes> = Extract<N.Node, { type: T }>;\n\n// todo: Placeholder<T> breaks everything, because its type is incompatible with\n// the substituted nodes.\ntype MaybePlaceholder<T extends PlaceholderTypes> = NodeOf<T>; // | Placeholder<T>\n\n/* eslint sort-keys: \"error\" */\nconst PlaceholderErrors = ParseErrorEnum`placeholders`({\n  ClassNameIsRequired: \"A class name is required.\",\n  UnexpectedSpace: \"Unexpected space in placeholder.\",\n});\n\nexport default (superClass: typeof Parser) =>\n  class PlaceholdersParserMixin extends superClass implements Parser {\n    parsePlaceholder<T extends PlaceholderTypes>(\n      expectedNode: T,\n    ): /*?N.Placeholder<T>*/ MaybePlaceholder<T> | undefined {\n      if (this.match(tt.placeholder)) {\n        const node = this.startNode<N.Placeholder<T>>();\n        this.next();\n        this.assertNoSpace();\n\n        // We can't use this.parseIdentifier because\n        // we don't want nested placeholders.\n        node.name = super.parseIdentifier(/* liberal */ true);\n\n        this.assertNoSpace();\n        this.expect(tt.placeholder);\n        return this.finishPlaceholder(node, expectedNode);\n      }\n    }\n\n    finishPlaceholder<T extends PlaceholderTypes>(\n      node: Undone<N.Placeholder> | Undone<NodeOf<PlaceholderTypes>>,\n      expectedNode: T,\n    ): /*N.Placeholder<T>*/ MaybePlaceholder<T> {\n      let placeholder = node as unknown as N.Placeholder<T>;\n\n      if (!placeholder.expectedNode || !placeholder.type) {\n        placeholder = this.finishNode(\n          placeholder,\n          \"Placeholder\",\n        ) as unknown as N.Placeholder<T>;\n      }\n\n      placeholder.expectedNode = expectedNode;\n      return placeholder as unknown as MaybePlaceholder<T>;\n    }\n\n    /* ============================================================ *\n     * tokenizer/index.ts                                           *\n     * ============================================================ */\n\n    getTokenFromCode(code: number) {\n      if (\n        code === charCodes.percentSign &&\n        this.input.charCodeAt(this.state.pos + 1) === charCodes.percentSign\n      ) {\n        this.finishOp(tt.placeholder, 2);\n      } else {\n        super.getTokenFromCode(code);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/expression.ts                                         *\n     * ============================================================ */\n\n    parseExprAtom(\n      refExpressionErrors?: ExpressionErrors | null,\n    ): MaybePlaceholder<\"Expression\"> {\n      return (\n        this.parsePlaceholder(\"Expression\") ||\n        super.parseExprAtom(refExpressionErrors)\n      );\n    }\n\n    parseIdentifier(liberal?: boolean): MaybePlaceholder<\"Identifier\"> {\n      // NOTE: This function only handles identifiers outside of\n      // expressions and binding patterns, since they are already\n      // handled by the parseExprAtom and parseBindingAtom functions.\n      // This is needed, for example, to parse \"class %%NAME%% {}\".\n      return (\n        this.parsePlaceholder(\"Identifier\") || super.parseIdentifier(liberal)\n      );\n    }\n\n    checkReservedWord(\n      word: string,\n      startLoc: Position,\n      checkKeywords: boolean,\n      isBinding: boolean,\n    ) {\n      // Sometimes we call #checkReservedWord(node.name), expecting\n      // that node is an Identifier. If it is a Placeholder, name\n      // will be undefined.\n      if (word !== undefined) {\n        super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/node.ts                                               *\n     * ============================================================ */\n\n    cloneIdentifier<T extends N.Identifier | N.Placeholder>(node: T): T {\n      const cloned = super.cloneIdentifier(node);\n      if (cloned.type === \"Placeholder\") {\n        cloned.expectedNode = (node as N.Placeholder).expectedNode;\n      }\n      return cloned;\n    }\n\n    cloneStringLiteral<\n      T extends N.EstreeLiteral | N.StringLiteral | N.Placeholder,\n    >(node: T): T {\n      if (node.type === \"Placeholder\") {\n        return this.cloneIdentifier(node) as T;\n      }\n      return super.cloneStringLiteral(node);\n    }\n\n    /* ============================================================ *\n     * parser/lval.ts                                               *\n     * ============================================================ */\n\n    parseBindingAtom(): MaybePlaceholder<\"Pattern\"> {\n      return this.parsePlaceholder(\"Pattern\") || super.parseBindingAtom();\n    }\n\n    isValidLVal(\n      type: string,\n      disallowCallExpression: boolean,\n      isParenthesized: boolean,\n      binding: BindingFlag,\n    ) {\n      return (\n        type === \"Placeholder\" ||\n        super.isValidLVal(\n          type,\n          disallowCallExpression,\n          isParenthesized,\n          binding,\n        )\n      );\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean): void {\n      if (\n        node &&\n        node.type === \"Placeholder\" &&\n        node.expectedNode === \"Expression\"\n      ) {\n        node.expectedNode = \"Pattern\";\n      } else {\n        super.toAssignable(node, isLHS);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/statement.ts                                          *\n     * ============================================================ */\n\n    chStartsBindingIdentifier(ch: number, pos: number): boolean {\n      if (super.chStartsBindingIdentifier(ch, pos)) {\n        return true;\n      }\n\n      // Accept \"let %%\" as the start of \"let %%placeholder%%\", as though the\n      // placeholder were an identifier.\n      const next = this.nextTokenStart();\n      if (\n        this.input.charCodeAt(next) === charCodes.percentSign &&\n        this.input.charCodeAt(next + 1) === charCodes.percentSign\n      ) {\n        return true;\n      }\n\n      return false;\n    }\n\n    verifyBreakContinue(\n      node: N.BreakStatement | N.ContinueStatement,\n      isBreak: boolean,\n    ) {\n      // @ts-expect-error: node.label could be Placeholder\n      if (node.label && node.label.type === \"Placeholder\") return;\n      super.verifyBreakContinue(node, isBreak);\n    }\n\n    // @ts-expect-error Plugin will override parser interface\n    parseExpressionStatement(\n      node: MaybePlaceholder<\"Statement\">,\n      expr: MaybePlaceholder<\"Expression\">,\n    ): MaybePlaceholder<\"Statement\"> {\n      // @ts-expect-error placeholder typings\n      if (expr.type !== \"Placeholder\" || expr.extra?.parenthesized) {\n        // @ts-expect-error placeholder typings\n        return super.parseExpressionStatement(node, expr);\n      }\n\n      if (this.match(tt.colon)) {\n        // @ts-expect-error placeholder typings\n        const stmt: N.LabeledStatement = node;\n        stmt.label = this.finishPlaceholder(expr, \"Identifier\");\n        this.next();\n        stmt.body = super.parseStatementOrSloppyAnnexBFunctionDeclaration();\n        return this.finishNode(stmt, \"LabeledStatement\");\n      }\n\n      this.semicolon();\n      const stmtPlaceholder = node as unknown as N.Placeholder<\"Statement\">;\n      stmtPlaceholder.name = (expr as N.Placeholder).name;\n      return this.finishPlaceholder(stmtPlaceholder, \"Statement\");\n    }\n\n    parseBlock(\n      allowDirectives?: boolean,\n      createNewLexicalScope?: boolean,\n      afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n    ): MaybePlaceholder<\"BlockStatement\"> {\n      return (\n        this.parsePlaceholder(\"BlockStatement\") ||\n        super.parseBlock(\n          allowDirectives,\n          createNewLexicalScope,\n          afterBlockParse,\n        )\n      );\n    }\n\n    parseFunctionId(\n      requireId?: boolean,\n    ): MaybePlaceholder<\"Identifier\"> | undefined | null {\n      return (\n        this.parsePlaceholder(\"Identifier\") || super.parseFunctionId(requireId)\n      );\n    }\n    // @ts-expect-error Plugin will override parser interface\n    parseClass<T extends N.Class>(\n      node: T,\n      isStatement: /* T === ClassDeclaration */ boolean,\n      optionalId?: boolean,\n    ): T {\n      const type = isStatement ? \"ClassDeclaration\" : \"ClassExpression\";\n\n      this.next();\n      const oldStrict = this.state.strict;\n\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (placeholder) {\n        if (\n          this.match(tt._extends) ||\n          this.match(tt.placeholder) ||\n          this.match(tt.braceL)\n        ) {\n          node.id = placeholder;\n        } else if (optionalId || !isStatement) {\n          node.id = null;\n          node.body = this.finishPlaceholder(placeholder, \"ClassBody\");\n          return this.finishNode(node, type);\n        } else {\n          throw this.raise(\n            PlaceholderErrors.ClassNameIsRequired,\n            this.state.startLoc,\n          );\n        }\n      } else {\n        this.parseClassId(node, isStatement, optionalId);\n      }\n\n      super.parseClassSuper(node);\n      node.body =\n        this.parsePlaceholder(\"ClassBody\") ||\n        super.parseClassBody(!!node.superClass, oldStrict);\n      return this.finishNode(node, type);\n    }\n\n    parseExport(\n      node: Undone<\n        | N.ExportDefaultDeclaration\n        | N.ExportAllDeclaration\n        | N.ExportNamedDeclaration\n      >,\n      decorators: N.Decorator[] | null,\n    ): N.AnyExport {\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (!placeholder) return super.parseExport(node, decorators);\n\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\n\n      if (!this.isContextual(tt._from) && !this.match(tt.comma)) {\n        // export %%DECL%%;\n        node2.specifiers = [];\n        node2.source = null;\n        node2.declaration = this.finishPlaceholder(placeholder, \"Declaration\");\n        return this.finishNode(node2, \"ExportNamedDeclaration\");\n      }\n\n      // export %%NAME%% from \"foo\";\n      this.expectPlugin(\"exportDefaultFrom\");\n      const specifier = this.startNode<N.ExportDefaultSpecifier>();\n      specifier.exported = placeholder;\n      node2.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n\n      return super.parseExport(node2, decorators);\n    }\n\n    isExportDefaultSpecifier(): boolean {\n      if (this.match(tt._default)) {\n        const next = this.nextTokenStart();\n        if (this.isUnparsedContextual(next, \"from\")) {\n          if (\n            this.input.startsWith(\n              tokenLabelName(tt.placeholder),\n              this.nextTokenStartSince(next + 4),\n            )\n          ) {\n            return true;\n          }\n        }\n      }\n      return super.isExportDefaultSpecifier();\n    }\n\n    maybeParseExportDefaultSpecifier(\n      node: Undone<\n        | N.ExportDefaultDeclaration\n        | N.ExportAllDeclaration\n        | N.ExportNamedDeclaration\n      >,\n      maybeDefaultIdentifier: N.Identifier | null,\n    ): node is Undone<N.ExportNamedDeclaration> {\n      if ((node as N.ExportNamedDeclaration).specifiers?.length) {\n        // \"export %%NAME%%\" has already been parsed by #parseExport.\n        return true;\n      }\n      return super.maybeParseExportDefaultSpecifier(\n        node,\n        maybeDefaultIdentifier,\n      );\n    }\n\n    checkExport(node: N.ExportNamedDeclaration): void {\n      const { specifiers } = node;\n      if (specifiers?.length) {\n        node.specifiers = specifiers.filter(\n          // @ts-expect-error placeholder typings\n          node => node.exported.type === \"Placeholder\",\n        );\n      }\n      super.checkExport(node);\n      node.specifiers = specifiers;\n    }\n\n    parseImport(\n      node: Undone<N.ImportDeclaration>,\n    ): N.ImportDeclaration | N.TsImportEqualsDeclaration {\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (!placeholder) return super.parseImport(node);\n\n      node.specifiers = [];\n\n      if (!this.isContextual(tt._from) && !this.match(tt.comma)) {\n        // import %%STRING%%;\n        node.source = this.finishPlaceholder(placeholder, \"StringLiteral\");\n        this.semicolon();\n        return this.finishNode(node, \"ImportDeclaration\");\n      }\n\n      // import %%DEFAULT%% ...\n      const specifier =\n        this.startNodeAtNode<N.ImportDefaultSpecifier>(placeholder);\n      specifier.local = placeholder;\n      node.specifiers.push(\n        this.finishNode(specifier, \"ImportDefaultSpecifier\"),\n      );\n\n      if (this.eat(tt.comma)) {\n        // import %%DEFAULT%%, * as ...\n        const hasStarImport = this.maybeParseStarImportSpecifier(node);\n\n        // import %%DEFAULT%%, { ...\n        if (!hasStarImport) this.parseNamedImportSpecifiers(node);\n      }\n\n      this.expectContextual(tt._from);\n      node.source = this.parseImportSource();\n      this.semicolon();\n      return this.finishNode(node, \"ImportDeclaration\");\n    }\n\n    parseImportSource(): MaybePlaceholder<\"StringLiteral\"> {\n      // import ... from %%STRING%%;\n\n      return (\n        this.parsePlaceholder(\"StringLiteral\") || super.parseImportSource()\n      );\n    }\n\n    // Throws if the current token and the prev one are separated by a space.\n    assertNoSpace(): void {\n      if (\n        this.state.start >\n        this.offsetToSourcePos(this.state.lastTokEndLoc!.index)\n      ) {\n        this.raise(\n          PlaceholderErrors.UnexpectedSpace,\n          this.state.lastTokEndLoc!,\n        );\n      }\n    }\n  };\n", "import type Parser from \"../parser/index.ts\";\nimport { tokenIsIdentifier, tt } from \"../tokenizer/types.ts\";\nimport type * as N from \"../types.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\n\nexport default (superClass: typeof Parser) =>\n  class V8IntrinsicMixin extends superClass implements Parser {\n    parseV8Intrinsic(): N.Expression | undefined {\n      if (this.match(tt.modulo)) {\n        const v8IntrinsicStartLoc = this.state.startLoc;\n        // let the `loc` of Identifier starts from `%`\n        const node = this.startNode<N.Identifier>();\n        this.next(); // eat '%'\n        if (tokenIsIdentifier(this.state.type)) {\n          const name = this.parseIdentifierName();\n          const identifier = this.createIdentifier(node, name);\n          this.castNodeTo(identifier, \"V8IntrinsicIdentifier\");\n          if (this.match(tt.parenL)) {\n            return identifier;\n          }\n        }\n        this.unexpected(v8IntrinsicStartLoc);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/expression.js                                         *\n     * ============================================================ */\n\n    parseExprAtom(refExpressionErrors?: ExpressionErrors | null): N.Expression {\n      return (\n        this.parseV8Intrinsic() || super.parseExprAtom(refExpressionErrors)\n      );\n    }\n  };\n", "import type Parser from \"./parser/index.ts\";\nimport type { PluginConfig } from \"./typings.ts\";\n\nexport type Plugin = PluginConfig;\n\nexport type MixinPlugin = (\n  superClass: new (...args: any) => Parser,\n) => new (...args: any) => Parser;\n\nconst PIPELINE_PROPOSALS = process.env.BABEL_8_BREAKING\n  ? [\"fsharp\", \"hack\"]\n  : [\"minimal\", \"fsharp\", \"hack\", \"smart\"];\nconst TOPIC_TOKENS = [\"^^\", \"@@\", \"^\", \"%\", \"#\"];\n\nexport function validatePlugins(pluginsMap: Map<string, any>) {\n  if (pluginsMap.has(\"decorators\")) {\n    if (pluginsMap.has(\"decorators-legacy\")) {\n      throw new Error(\n        \"Cannot use the decorators and decorators-legacy plugin together\",\n      );\n    }\n\n    const decoratorsBeforeExport =\n      pluginsMap.get(\"decorators\").decoratorsBeforeExport;\n    if (\n      decoratorsBeforeExport != null &&\n      typeof decoratorsBeforeExport !== \"boolean\"\n    ) {\n      throw new Error(\n        \"'decoratorsBeforeExport' must be a boolean, if specified.\",\n      );\n    }\n\n    const allowCallParenthesized =\n      pluginsMap.get(\"decorators\").allowCallParenthesized;\n    if (\n      allowCallParenthesized != null &&\n      typeof allowCallParenthesized !== \"boolean\"\n    ) {\n      throw new Error(\"'allowCallParenthesized' must be a boolean.\");\n    }\n  }\n\n  if (pluginsMap.has(\"flow\") && pluginsMap.has(\"typescript\")) {\n    throw new Error(\"Cannot combine flow and typescript plugins.\");\n  }\n\n  if (pluginsMap.has(\"placeholders\") && pluginsMap.has(\"v8intrinsic\")) {\n    throw new Error(\"Cannot combine placeholders and v8intrinsic plugins.\");\n  }\n\n  if (pluginsMap.has(\"pipelineOperator\")) {\n    const proposal = pluginsMap.get(\"pipelineOperator\").proposal;\n\n    if (!PIPELINE_PROPOSALS.includes(proposal)) {\n      const proposalList = PIPELINE_PROPOSALS.map(p => `\"${p}\"`).join(\", \");\n      throw new Error(\n        `\"pipelineOperator\" requires \"proposal\" option whose value must be one of: ${proposalList}.`,\n      );\n    }\n\n    if (proposal === \"hack\") {\n      if (pluginsMap.has(\"placeholders\")) {\n        throw new Error(\n          \"Cannot combine placeholders plugin and Hack-style pipes.\",\n        );\n      }\n\n      if (pluginsMap.has(\"v8intrinsic\")) {\n        throw new Error(\n          \"Cannot combine v8intrinsic plugin and Hack-style pipes.\",\n        );\n      }\n\n      const topicToken = pluginsMap.get(\"pipelineOperator\").topicToken;\n\n      if (!TOPIC_TOKENS.includes(topicToken)) {\n        const tokenList = TOPIC_TOKENS.map(t => `\"${t}\"`).join(\", \");\n\n        throw new Error(\n          `\"pipelineOperator\" in \"proposal\": \"hack\" mode also requires a \"topicToken\" option whose value must be one of: ${tokenList}.`,\n        );\n      }\n\n      if (!process.env.BABEL_8_BREAKING) {\n        if (\n          topicToken === \"#\" &&\n          pluginsMap.get(\"recordAndTuple\")?.syntaxType === \"hash\"\n        ) {\n          throw new Error(\n            `Plugin conflict between \\`[\"pipelineOperator\", { proposal: \"hack\", topicToken: \"#\" }]\\` and \\`${JSON.stringify([\"recordAndTuple\", pluginsMap.get(\"recordAndTuple\")])}\\`.`,\n          );\n        }\n      }\n    } else if (\n      !process.env.BABEL_8_BREAKING &&\n      proposal === \"smart\" &&\n      pluginsMap.get(\"recordAndTuple\")?.syntaxType === \"hash\"\n    ) {\n      throw new Error(\n        `Plugin conflict between \\`[\"pipelineOperator\", { proposal: \"smart\" }]\\` and \\`${JSON.stringify([\"recordAndTuple\", pluginsMap.get(\"recordAndTuple\")])}\\`.`,\n      );\n    }\n  }\n\n  if (pluginsMap.has(\"moduleAttributes\")) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"`moduleAttributes` has been removed in Babel 8, please migrate to import attributes instead.\",\n      );\n    } else {\n      if (\n        pluginsMap.has(\"deprecatedImportAssert\") ||\n        pluginsMap.has(\"importAssertions\")\n      ) {\n        throw new Error(\n          \"Cannot combine importAssertions, deprecatedImportAssert and moduleAttributes plugins.\",\n        );\n      }\n      const moduleAttributesVersionPluginOption =\n        pluginsMap.get(\"moduleAttributes\").version;\n      if (moduleAttributesVersionPluginOption !== \"may-2020\") {\n        throw new Error(\n          \"The 'moduleAttributes' plugin requires a 'version' option,\" +\n            \" representing the last proposal update. Currently, the\" +\n            \" only supported value is 'may-2020'.\",\n        );\n      }\n    }\n  }\n  if (pluginsMap.has(\"importAssertions\")) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"`importAssertions` has been removed in Babel 8, please use import attributes instead.\" +\n          \" To use the non-standard `assert` syntax you can enable the `deprecatedImportAssert` parser plugin.\",\n      );\n    } else if (pluginsMap.has(\"deprecatedImportAssert\")) {\n      throw new Error(\n        \"Cannot combine importAssertions and deprecatedImportAssert plugins.\",\n      );\n    }\n  }\n  if (\n    !pluginsMap.has(\"deprecatedImportAssert\") &&\n    pluginsMap.has(\"importAttributes\") &&\n    pluginsMap.get(\"importAttributes\").deprecatedAssertSyntax\n  ) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"The 'importAttributes' plugin has been removed in Babel 8. If you need to enable support \" +\n          \"for the deprecated `assert` syntax, you can enable the `deprecatedImportAssert` parser plugin.\",\n      );\n    } else {\n      pluginsMap.set(\"deprecatedImportAssert\", {});\n    }\n  }\n\n  if (pluginsMap.has(\"recordAndTuple\")) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"The 'recordAndTuple' plugin has been removed in Babel 8. Please remove it from your configuration.\",\n      );\n    } else {\n      const syntaxType = pluginsMap.get(\"recordAndTuple\").syntaxType;\n      if (syntaxType != null) {\n        const RECORD_AND_TUPLE_SYNTAX_TYPES = [\"hash\", \"bar\"];\n        if (!RECORD_AND_TUPLE_SYNTAX_TYPES.includes(syntaxType)) {\n          throw new Error(\n            \"The 'syntaxType' option of the 'recordAndTuple' plugin must be one of: \" +\n              RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(\", \"),\n          );\n        }\n      }\n    }\n  }\n\n  if (\n    pluginsMap.has(\"asyncDoExpressions\") &&\n    !pluginsMap.has(\"doExpressions\")\n  ) {\n    const error = new Error(\n      \"'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins.\",\n    );\n    // @ts-expect-error so @babel/core can provide better error message\n    error.missingPlugins = \"doExpressions\";\n    throw error;\n  }\n\n  if (\n    pluginsMap.has(\"optionalChainingAssign\") &&\n    pluginsMap.get(\"optionalChainingAssign\").version !== \"2023-07\"\n  ) {\n    throw new Error(\n      \"The 'optionalChainingAssign' plugin requires a 'version' option,\" +\n        \" representing the last proposal update. Currently, the\" +\n        \" only supported value is '2023-07'.\",\n    );\n  }\n\n  if (\n    pluginsMap.has(\"discardBinding\") &&\n    pluginsMap.get(\"discardBinding\").syntaxType !== \"void\"\n  ) {\n    throw new Error(\n      \"The 'discardBinding' plugin requires a 'syntaxType' option. Currently the only supported value is 'void'.\",\n    );\n  }\n\n  if (process.env.BABEL_8_BREAKING) {\n    if (pluginsMap.has(\"decimal\")) {\n      throw new Error(\n        \"The 'decimal' plugin has been removed in Babel 8. Please remove it from your configuration.\",\n      );\n    }\n    if (pluginsMap.has(\"importReflection\")) {\n      throw new Error(\n        \"The 'importReflection' plugin has been removed in Babel 8. Use 'sourcePhaseImports' instead, and \" +\n          \"replace 'import module' with 'import source' in your code.\",\n      );\n    }\n  }\n}\n\n// These plugins are defined using a mixin which extends the parser class.\n\nimport estree from \"./plugins/estree.ts\";\nimport flow from \"./plugins/flow/index.ts\";\nimport jsx from \"./plugins/jsx/index.ts\";\nimport typescript from \"./plugins/typescript/index.ts\";\nimport placeholders from \"./plugins/placeholders.ts\";\nimport v8intrinsic from \"./plugins/v8intrinsic.ts\";\n\n// NOTE: order is important. estree must come first; placeholders must come last.\nexport const mixinPlugins = {\n  estree,\n  jsx,\n  flow,\n  typescript,\n  v8intrinsic,\n  placeholders,\n};\n\nexport const mixinPluginNames = Object.keys(mixinPlugins) as ReadonlyArray<\n  \"estree\" | \"jsx\" | \"flow\" | \"typescript\" | \"v8intrinsic\" | \"placeholders\"\n>;\n", "// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\nimport {\n  tokenCanStartExpression,\n  tokenIsAssignment,\n  tokenIsIdentifier,\n  tokenIsKeywordOrIdentifier,\n  tokenIsOperator,\n  tokenIsPostfix,\n  tokenIsPrefix,\n  tokenIsRightAssociative,\n  tokenIsTemplate,\n  tokenKeywordOrIdentifierIsKeyword,\n  tokenLabelName,\n  tokenOperatorPrecedence,\n  tt,\n  type TokenType,\n} from \"../tokenizer/types.ts\";\nimport type * as N from \"../types.ts\";\nimport LValParser from \"./lval.ts\";\nimport {\n  isKeyword,\n  isReservedWord,\n  isStrictReservedWord,\n  isStrictBindReservedWord,\n  isIdentifierStart,\n  canBeReservedWord,\n} from \"../util/identifier.ts\";\nimport {\n  type Position,\n  createPositionWithColumnOffset,\n} from \"../util/location.ts\";\nimport * as charCodes from \"charcodes\";\nimport { ScopeFlag, BindingFlag } from \"../util/scopeflags.ts\";\nimport { ExpressionErrors } from \"./util.ts\";\nimport { ParamKind, functionFlags } from \"../util/production-parameter.ts\";\nimport {\n  newArrowHeadScope,\n  newAsyncArrowScope,\n  newExpressionScope,\n} from \"../util/expression-scope.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport {\n  UnparenthesizedPipeBodyDescriptions,\n  type UnparenthesizedPipeBodyTypes,\n} from \"../parse-error/pipeline-operator-errors.ts\";\nimport { setInnerComments } from \"./comments.ts\";\nimport type { Undone } from \"./node.ts\";\nimport type Parser from \"./index.ts\";\n\nimport { OptionFlags, type SourceType } from \"../options.ts\";\n\nexport default abstract class ExpressionParser extends LValParser {\n  // Forward-declaration: defined in statement.js\n  abstract parseBlock(\n    allowDirectives?: boolean,\n    createNewLexicalScope?: boolean,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): N.BlockStatement;\n  abstract parseClass(\n    node: N.Class,\n    isStatement: boolean,\n    optionalId?: boolean,\n  ): N.Class;\n  abstract parseDecorators(allowExport?: boolean): void;\n  abstract parseFunction<T extends N.NormalFunction>(\n    node: T,\n    statement?: number,\n    allowExpressionBody?: boolean,\n    isAsync?: boolean,\n  ): T;\n  abstract parseFunctionParams(node: N.Function, isConstructor?: boolean): void;\n  abstract parseBlockOrModuleBlockBody(\n    body: N.Statement[],\n    directives: N.Directive[] | null | undefined,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void;\n  abstract parseProgram(\n    program: N.Program,\n    end: TokenType,\n    sourceType?: SourceType,\n  ): N.Program;\n\n  // For object literal, check if property __proto__ has been used more than once.\n  // If the expression is a destructuring assignment, then __proto__ may appear\n  // multiple times. Otherwise, __proto__ is a duplicated key.\n\n  // For record expression, check if property __proto__ exists\n\n  checkProto(\n    prop: N.ObjectMember | N.SpreadElement,\n    isRecord: boolean | undefined | null,\n    sawProto: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): boolean {\n    if (\n      prop.type === \"SpreadElement\" ||\n      this.isObjectMethod(prop) ||\n      prop.computed ||\n      prop.shorthand\n    ) {\n      return sawProto;\n    }\n\n    const key = prop.key as\n      | N.Identifier\n      | N.StringLiteral\n      | N.NumericLiteral\n      | N.BigIntLiteral;\n    // It is either an Identifier or a String/NumericLiteral\n    const name = key.type === \"Identifier\" ? key.name : key.value;\n\n    if (name === \"__proto__\") {\n      if (isRecord) {\n        this.raise(Errors.RecordNoProto, key);\n        return true;\n      }\n      if (sawProto) {\n        if (refExpressionErrors) {\n          // Store the first redefinition's position, otherwise ignore because\n          // we are parsing ambiguous pattern\n          if (refExpressionErrors.doubleProtoLoc === null) {\n            refExpressionErrors.doubleProtoLoc = key.loc.start;\n          }\n        } else {\n          this.raise(Errors.DuplicateProto, key);\n        }\n      }\n\n      return true;\n    }\n\n    return sawProto;\n  }\n\n  shouldExitDescending(\n    expr: N.Expression | N.PrivateName,\n    potentialArrowAt: number,\n  ): expr is N.ArrowFunctionExpression {\n    return (\n      expr.type === \"ArrowFunctionExpression\" &&\n      this.offsetToSourcePos(expr.start) === potentialArrowAt\n    );\n  }\n\n  // Convenience method to parse an Expression only\n  getExpression(this: Parser): N.Expression & N.ParserOutput {\n    this.enterInitialScopes();\n    this.nextToken();\n    if (this.match(tt.eof)) {\n      throw this.raise(Errors.ParseExpressionEmptyInput, this.state.startLoc);\n    }\n    const expr = this.parseExpression() as N.Expression & N.ParserOutput;\n    if (!this.match(tt.eof)) {\n      throw this.raise(Errors.ParseExpressionExpectsEOF, this.state.startLoc, {\n        unexpected: this.input.codePointAt(this.state.start),\n      });\n    }\n    // Unlike parseTopLevel, we need to drain remaining commentStacks\n    // because the top level node is _not_ Program.\n    this.finalizeRemainingComments();\n    expr.comments = this.comments;\n    expr.errors = this.state.errors;\n    if (this.optionFlags & OptionFlags.Tokens) {\n      expr.tokens = this.tokens;\n    }\n    return expr;\n  }\n\n  // ### Expression parsing\n\n  // These nest, from the most general expression type at the top to\n  // 'atomic', nondivisible expression types at the bottom. Most of\n  // the functions will simply let the function (s) below them parse,\n  // and, *if* the syntactic construct they handle is present, wrap\n  // the AST node that the inner parser gave them in another node.\n\n  // Parse a full expression.\n  // - `disallowIn`\n  //   is used to forbid the `in` operator (in for loops initialization expressions)\n  //   When `disallowIn` is true, the production parameter [In] is not present.\n\n  // - `refExpressionErrors `\n  //   provides reference for storing '=' operator inside shorthand\n  //   property assignment in contexts where both object expression\n  //   and object pattern might appear (so it's possible to raise\n  //   delayed syntax error at correct position).\n\n  parseExpression(\n    this: Parser,\n    disallowIn?: boolean,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression {\n    if (disallowIn) {\n      return this.disallowInAnd(() =>\n        this.parseExpressionBase(refExpressionErrors),\n      );\n    }\n    return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors));\n  }\n\n  // https://tc39.es/ecma262/#prod-Expression\n  parseExpressionBase(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const expr = this.parseMaybeAssign(refExpressionErrors);\n    if (this.match(tt.comma)) {\n      const node = this.startNodeAt<N.SequenceExpression>(startLoc);\n      node.expressions = [expr];\n      while (this.eat(tt.comma)) {\n        node.expressions.push(this.parseMaybeAssign(refExpressionErrors));\n      }\n      this.toReferencedList(node.expressions);\n      return this.finishNode(node, \"SequenceExpression\");\n    }\n    return expr;\n  }\n\n  // Set [~In] parameter for assignment expression\n  parseMaybeAssignDisallowIn(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ) {\n    return this.disallowInAnd(() =>\n      this.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n    );\n  }\n\n  // Set [+In] parameter for assignment expression\n  parseMaybeAssignAllowIn(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ) {\n    return this.allowInAnd(() =>\n      this.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n    );\n  }\n\n  // This method is only used by\n  // the typescript and flow plugins.\n  setOptionalParametersError(refExpressionErrors: ExpressionErrors) {\n    refExpressionErrors.optionalParametersLoc = this.state.startLoc;\n  }\n\n  // Parse an assignment expression. This includes applications of\n  // operators like `+=`.\n  // https://tc39.es/ecma262/#prod-AssignmentExpression\n  parseMaybeAssign(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const isYield = this.isContextual(tt._yield);\n    if (isYield) {\n      if (this.prodParam.hasYield) {\n        this.next();\n        let left = this.parseYield(startLoc);\n        if (afterLeftParse) {\n          left = afterLeftParse.call(this, left, startLoc);\n        }\n        return left;\n      }\n    }\n\n    let ownExpressionErrors;\n    if (refExpressionErrors) {\n      ownExpressionErrors = false;\n    } else {\n      refExpressionErrors = new ExpressionErrors();\n      ownExpressionErrors = true;\n    }\n    const { type } = this.state;\n\n    if (type === tt.parenL || tokenIsIdentifier(type)) {\n      this.state.potentialArrowAt = this.state.start;\n    }\n\n    let left = this.parseMaybeConditional(refExpressionErrors);\n    if (afterLeftParse) {\n      left = afterLeftParse.call(this, left, startLoc);\n    }\n    if (tokenIsAssignment(this.state.type)) {\n      const node = this.startNodeAt<N.AssignmentExpression>(startLoc);\n      const operator = this.state.value as N.AssignmentOperator;\n      node.operator = operator;\n\n      if (this.match(tt.eq)) {\n        this.toAssignable(left, /* isLHS */ true);\n        node.left = left;\n\n        const startIndex = startLoc.index;\n        if (\n          refExpressionErrors.doubleProtoLoc != null &&\n          refExpressionErrors.doubleProtoLoc.index >= startIndex\n        ) {\n          refExpressionErrors.doubleProtoLoc = null; // reset because double __proto__ is valid in assignment expression\n        }\n        if (\n          refExpressionErrors.shorthandAssignLoc != null &&\n          refExpressionErrors.shorthandAssignLoc.index >= startIndex\n        ) {\n          refExpressionErrors.shorthandAssignLoc = null; // reset because shorthand default was used correctly\n        }\n        if (\n          refExpressionErrors.privateKeyLoc != null &&\n          refExpressionErrors.privateKeyLoc.index >= startIndex\n        ) {\n          this.checkDestructuringPrivate(refExpressionErrors);\n          refExpressionErrors.privateKeyLoc = null; // reset because `({ #x: x })` is an assignable pattern\n        }\n        if (\n          refExpressionErrors.voidPatternLoc != null &&\n          refExpressionErrors.voidPatternLoc.index >= startIndex\n        ) {\n          refExpressionErrors.voidPatternLoc = null;\n        }\n      } else {\n        node.left = left as unknown as N.Assignable; // checked a few lines further down\n      }\n\n      this.next();\n      node.right = this.parseMaybeAssign();\n      this.checkLVal(\n        left,\n        this.finishNode(node, \"AssignmentExpression\"),\n        undefined,\n        undefined,\n        undefined,\n        undefined,\n        operator === \"||=\" || operator === \"&&=\" || operator === \"??=\",\n      );\n      // @ts-expect-error todo(flow->ts) improve node types\n      return node;\n    } else if (ownExpressionErrors) {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n\n    if (isYield) {\n      const { type } = this.state;\n      const startsExpr = this.hasPlugin(\"v8intrinsic\")\n        ? tokenCanStartExpression(type)\n        : tokenCanStartExpression(type) && !this.match(tt.modulo);\n      if (startsExpr && !this.isAmbiguousPrefixOrIdentifier()) {\n        this.raiseOverwrite(Errors.YieldNotInGeneratorFunction, startLoc);\n        return this.parseYield(startLoc);\n      }\n    }\n\n    return left;\n  }\n\n  // Parse a ternary conditional (`?:`) operator.\n  // https://tc39.es/ecma262/#prod-ConditionalExpression\n\n  parseMaybeConditional(\n    this: Parser,\n    refExpressionErrors: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprOps(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseConditional(expr, startLoc, refExpressionErrors);\n  }\n\n  parseConditional(\n    this: Parser,\n    expr: N.Expression,\n    startLoc: Position,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    if (this.eat(tt.question)) {\n      const node = this.startNodeAt<N.ConditionalExpression>(startLoc);\n      node.test = expr;\n      node.consequent = this.parseMaybeAssignAllowIn();\n      this.expect(tt.colon);\n      node.alternate = this.parseMaybeAssign();\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n    return expr;\n  }\n\n  parseMaybeUnaryOrPrivate(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression | N.PrivateName {\n    return this.match(tt.privateName)\n      ? this.parsePrivateName()\n      : this.parseMaybeUnary(refExpressionErrors);\n  }\n\n  // Start the precedence parser.\n  // https://tc39.es/ecma262/#prod-ShortCircuitExpression\n\n  parseExprOps(\n    this: Parser,\n    refExpressionErrors: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseMaybeUnaryOrPrivate(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseExprOp(expr, startLoc, -1);\n  }\n\n  // Parse binary operators with the operator precedence parsing\n  // algorithm. `left` is the left-hand side of the operator.\n  // `minPrec` provides context that allows the function to stop and\n  // defer further parser to one of its callers when it encounters an\n  // operator that has a lower precedence than the set it is parsing.\n\n  parseExprOp(\n    this: Parser,\n    left: N.Expression | N.PrivateName,\n    leftStartLoc: Position,\n    minPrec: number,\n  ): N.Expression {\n    if (this.isPrivateName(left)) {\n      // https://tc39.es/ecma262/#prod-RelationalExpression\n      // RelationalExpression [In, Yield, Await]\n      //   [+In] PrivateIdentifier in ShiftExpression[?Yield, ?Await]\n\n      const value = this.getPrivateNameSV(left);\n\n      if (\n        minPrec >= tokenOperatorPrecedence(tt._in) ||\n        !this.prodParam.hasIn ||\n        !this.match(tt._in)\n      ) {\n        this.raise(Errors.PrivateInExpectedIn, left, {\n          identifierName: value,\n        });\n      }\n\n      this.classScope.usePrivateName(value, left.loc.start);\n    }\n\n    const op = this.state.type;\n    if (tokenIsOperator(op) && (this.prodParam.hasIn || !this.match(tt._in))) {\n      let prec = tokenOperatorPrecedence(op);\n      if (prec > minPrec) {\n        if (op === tt.pipeline) {\n          this.expectPlugin(\"pipelineOperator\");\n          if (this.state.inFSharpPipelineDirectBody) {\n            // PrivateName must be followed by `in`, but we have `|>`\n            return left as N.Expression;\n          }\n          this.checkPipelineAtInfixOperator(left as N.Expression, leftStartLoc);\n        }\n        const node = this.startNodeAt<N.LogicalExpression | N.BinaryExpression>(\n          leftStartLoc,\n        );\n        node.left = left;\n        node.operator = this.state.value;\n\n        const logical = op === tt.logicalOR || op === tt.logicalAND;\n        const coalesce = op === tt.nullishCoalescing;\n\n        if (coalesce) {\n          // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n          // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n          prec = tokenOperatorPrecedence(tt.logicalAND);\n        }\n\n        this.next();\n\n        if (\n          !process.env.BABEL_8_BREAKING &&\n          op === tt.pipeline &&\n          // @ts-expect-error: Only in Babel 7\n          this.hasPlugin([\"pipelineOperator\", { proposal: \"minimal\" }])\n        ) {\n          if (this.state.type === tt._await && this.prodParam.hasAwait) {\n            throw this.raise(\n              Errors.UnexpectedAwaitAfterPipelineBody,\n              this.state.startLoc,\n            );\n          }\n        }\n\n        node.right = this.parseExprOpRightExpr(op, prec);\n        const finishedNode = this.finishNode(\n          node,\n          logical || coalesce ? \"LogicalExpression\" : \"BinaryExpression\",\n        );\n        /* this check is for all ?? operators\n         * a ?? b && c for this example\n         * when op is coalesce and nextOp is logical (&&), throw at the pos of nextOp that it can not be mixed.\n         * Symmetrically it also throws when op is logical and nextOp is coalesce\n         */\n        const nextOp = this.state.type;\n        if (\n          (coalesce && (nextOp === tt.logicalOR || nextOp === tt.logicalAND)) ||\n          (logical && nextOp === tt.nullishCoalescing)\n        ) {\n          throw this.raise(\n            Errors.MixingCoalesceWithLogical,\n            this.state.startLoc,\n          );\n        }\n\n        return this.parseExprOp(finishedNode, leftStartLoc, minPrec);\n      }\n    }\n    // PrivateName is followed by `in` and handled by the previous if statement\n    return left as N.Expression;\n  }\n\n  // Helper function for `parseExprOp`. Parse the right-hand side of binary-\n  // operator expressions, then apply any operator-specific functions.\n\n  parseExprOpRightExpr(\n    this: Parser,\n    op: TokenType,\n    prec: number,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    switch (op) {\n      case tt.pipeline:\n        switch (this.getPluginOption(\"pipelineOperator\", \"proposal\")) {\n          case \"hack\":\n            return this.withTopicBindingContext(() => {\n              return this.parseHackPipeBody();\n            });\n\n          case \"fsharp\":\n            return this.withSoloAwaitPermittingContext(() => {\n              return this.parseFSharpPipelineBody(prec);\n            });\n        }\n\n        if (\n          !process.env.BABEL_8_BREAKING &&\n          // @ts-expect-error: Babel 7 only\n          this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"smart\"\n        ) {\n          return this.withTopicBindingContext(() => {\n            if (this.prodParam.hasYield && this.isContextual(tt._yield)) {\n              throw this.raise(Errors.PipeBodyIsTighter, this.state.startLoc);\n            }\n            return this.parseSmartPipelineBodyInStyle(\n              this.parseExprOpBaseRightExpr(op, prec),\n              startLoc,\n            );\n          });\n        }\n\n      // Falls through.\n      default:\n        return this.parseExprOpBaseRightExpr(op, prec);\n    }\n  }\n\n  // Helper function for `parseExprOpRightExpr`. Parse the right-hand side of\n  // binary-operator expressions without applying any operator-specific functions.\n\n  parseExprOpBaseRightExpr(\n    this: Parser,\n    op: TokenType,\n    prec: number,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n\n    return this.parseExprOp(\n      this.parseMaybeUnaryOrPrivate(),\n      startLoc,\n      tokenIsRightAssociative(op) ? prec - 1 : prec,\n    );\n  }\n\n  parseHackPipeBody(this: Parser): N.Expression {\n    const { startLoc } = this.state;\n    const body = this.parseMaybeAssign();\n    const requiredParentheses = UnparenthesizedPipeBodyDescriptions.has(\n      // @ts-expect-error TS2345: Argument of type 'string' is not assignable to parameter of type '\"ArrowFunctionExpression\" | \"YieldExpression\" | \"AssignmentExpression\" | \"ConditionalExpression\"'.\n      body.type,\n    );\n\n    // TODO: Check how to handle type casts in Flow and TS once they are supported\n    if (requiredParentheses && !body.extra?.parenthesized) {\n      this.raise(Errors.PipeUnparenthesizedBody, startLoc, {\n        type: body.type as UnparenthesizedPipeBodyTypes,\n      });\n    }\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\n      // A Hack pipe body must use the topic reference at least once.\n      this.raise(Errors.PipeTopicUnused, startLoc);\n    }\n\n    return body;\n  }\n\n  checkExponentialAfterUnary(\n    node: N.AwaitExpression | Undone<N.UnaryExpression>,\n  ) {\n    if (this.match(tt.exponent)) {\n      this.raise(Errors.UnexpectedTokenUnaryExponentiation, node.argument);\n    }\n  }\n\n  // Parse unary operators, both prefix and postfix.\n  // https://tc39.es/ecma262/#prod-UnaryExpression\n  parseMaybeUnary(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    sawUnary?: boolean,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const isAwait = this.isContextual(tt._await);\n\n    if (isAwait && this.recordAwaitIfAllowed()) {\n      this.next();\n      const expr = this.parseAwait(startLoc);\n      if (!sawUnary) this.checkExponentialAfterUnary(expr);\n      return expr;\n    }\n    const update = this.match(tt.incDec);\n    const node = this.startNode<N.UnaryExpression | N.UpdateExpression>();\n    if (tokenIsPrefix(this.state.type)) {\n      node.operator = this.state.value;\n      node.prefix = true;\n\n      if (this.match(tt._throw)) {\n        this.expectPlugin(\"throwExpressions\");\n      }\n      const isDelete = this.match(tt._delete);\n      this.next();\n\n      node.argument = this.parseMaybeUnary(null, true);\n\n      this.checkExpressionErrors(refExpressionErrors, true);\n\n      if (this.state.strict && isDelete) {\n        const arg = node.argument;\n\n        if (arg.type === \"Identifier\") {\n          this.raise(Errors.StrictDelete, node);\n        } else if (this.hasPropertyAsPrivateName(arg)) {\n          this.raise(Errors.DeletePrivateField, node);\n        }\n      }\n\n      if (!update) {\n        if (!sawUnary) {\n          this.checkExponentialAfterUnary(node as Undone<N.UnaryExpression>);\n        }\n        return this.finishNode(node, \"UnaryExpression\");\n      }\n    }\n\n    const expr = this.parseUpdate(\n      // @ts-expect-error using \"Undone\" node as \"done\"\n      node,\n      update,\n      refExpressionErrors,\n    );\n\n    if (isAwait) {\n      const { type } = this.state;\n      const startsExpr = this.hasPlugin(\"v8intrinsic\")\n        ? tokenCanStartExpression(type)\n        : tokenCanStartExpression(type) && !this.match(tt.modulo);\n      if (startsExpr && !this.isAmbiguousPrefixOrIdentifier()) {\n        this.raiseOverwrite(Errors.AwaitNotInAsyncContext, startLoc);\n        return this.parseAwait(startLoc);\n      }\n    }\n\n    return expr;\n  }\n\n  // https://tc39.es/ecma262/#prod-UpdateExpression\n  parseUpdate(\n    this: Parser,\n    node: N.Expression,\n    update: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    if (update) {\n      const updateExpressionNode = node as Undone<N.UpdateExpression>;\n      this.checkLVal(\n        updateExpressionNode.argument,\n        this.finishNode(updateExpressionNode, \"UpdateExpression\"),\n      );\n      return node;\n    }\n\n    const startLoc = this.state.startLoc;\n    let expr = this.parseExprSubscripts(refExpressionErrors);\n    if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;\n    while (tokenIsPostfix(this.state.type) && !this.canInsertSemicolon()) {\n      const node = this.startNodeAt<N.UpdateExpression>(startLoc);\n      node.operator = this.state.value;\n      node.prefix = false;\n      node.argument = expr;\n      this.next();\n      this.checkLVal(expr, (expr = this.finishNode(node, \"UpdateExpression\")));\n    }\n    return expr;\n  }\n\n  // Parse call, dot, and `[]`-subscript expressions.\n  // https://tc39.es/ecma262/#prod-LeftHandSideExpression\n  parseExprSubscripts(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprAtom(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseSubscripts(expr, startLoc);\n  }\n\n  parseSubscripts(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls?: boolean | null,\n  ): N.Expression {\n    const state = {\n      optionalChainMember: false,\n      maybeAsyncArrow: this.atPossibleAsyncArrow(base),\n      stop: false,\n    };\n    do {\n      base = this.parseSubscript(base, startLoc, noCalls, state);\n\n      // After parsing a subscript, this isn't \"async\" for sure.\n      state.maybeAsyncArrow = false;\n    } while (!state.stop);\n    return base;\n  }\n\n  /**\n   * @param state Set 'state.stop = true' to indicate that we should stop parsing subscripts.\n   *   state.optionalChainMember to indicate that the member is currently in OptionalChain\n   */\n  parseSubscript(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls: boolean | undefined | null,\n    state: N.ParseSubscriptState,\n  ): N.Expression {\n    const { type } = this.state;\n    if (!noCalls && type === tt.doubleColon) {\n      return this.parseBind(base, startLoc, noCalls, state);\n    } else if (tokenIsTemplate(type)) {\n      return this.parseTaggedTemplateExpression(base, startLoc, state);\n    }\n\n    let optional = false;\n\n    if (type === tt.questionDot) {\n      if (noCalls) {\n        this.raise(Errors.OptionalChainingNoNew, this.state.startLoc);\n        if (this.lookaheadCharCode() === charCodes.leftParenthesis) {\n          // stop at `?.` when parsing `new a?.()`\n          return this.stopParseSubscript(base, state);\n        }\n      }\n      state.optionalChainMember = optional = true;\n      this.next();\n    }\n\n    if (!noCalls && this.match(tt.parenL)) {\n      return this.parseCoverCallAndAsyncArrowHead(\n        base,\n        startLoc,\n        state,\n        optional,\n      );\n    } else {\n      const computed = this.eat(tt.bracketL);\n      if (computed || optional || this.eat(tt.dot)) {\n        return this.parseMember(base, startLoc, state, computed, optional);\n      } else {\n        return this.stopParseSubscript(base, state);\n      }\n    }\n  }\n\n  stopParseSubscript(\n    this: Parser,\n    base: N.Expression,\n    state: N.ParseSubscriptState,\n  ) {\n    state.stop = true;\n    return base;\n  }\n\n  // base[?Yield, ?Await] [ Expression[+In, ?Yield, ?Await] ]\n  // base[?Yield, ?Await] . IdentifierName\n  // base[?Yield, ?Await] . PrivateIdentifier\n  //   where `base` is one of CallExpression, MemberExpression and OptionalChain\n  parseMember(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n    computed: boolean,\n    optional: boolean,\n  ): N.OptionalMemberExpression | N.MemberExpression {\n    const node = this.startNodeAt<\n      N.OptionalMemberExpression | N.MemberExpression\n    >(startLoc);\n    node.object = base;\n    node.computed = computed;\n    if (computed) {\n      node.property = this.parseExpression();\n      this.expect(tt.bracketR);\n    } else if (this.match(tt.privateName)) {\n      if (base.type === \"Super\") {\n        this.raise(Errors.SuperPrivateField, startLoc);\n      }\n      this.classScope.usePrivateName(this.state.value, this.state.startLoc);\n      node.property = this.parsePrivateName();\n    } else {\n      node.property = this.parseIdentifier(true);\n    }\n\n    if (state.optionalChainMember) {\n      (node as Undone<N.OptionalMemberExpression>).optional = optional;\n      return this.finishNode(node, \"OptionalMemberExpression\");\n    } else {\n      return this.finishNode(node, \"MemberExpression\");\n    }\n  }\n\n  // https://github.com/tc39/proposal-bind-operator#syntax\n  parseBind(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls: boolean | undefined | null,\n    state: N.ParseSubscriptState,\n  ): N.Expression {\n    const node = this.startNodeAt<N.BindExpression>(startLoc);\n    node.object = base;\n    this.next(); // eat '::'\n    node.callee = this.parseNoCallExpr();\n    state.stop = true;\n    return this.parseSubscripts(\n      this.finishNode(node, \"BindExpression\"),\n      startLoc,\n      noCalls,\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-CoverCallExpressionAndAsyncArrowHead\n  // CoverCallExpressionAndAsyncArrowHead\n  // CallExpression[?Yield, ?Await] Arguments[?Yield, ?Await]\n  // OptionalChain[?Yield, ?Await] Arguments[?Yield, ?Await]\n  parseCoverCallAndAsyncArrowHead(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n    optional: boolean,\n  ): N.Expression {\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    let refExpressionErrors: ExpressionErrors | null = null;\n\n    this.state.maybeInArrowParameters = true;\n    this.next(); // eat `(`\n\n    const node = this.startNodeAt<N.CallExpression | N.OptionalCallExpression>(\n      startLoc,\n    );\n    node.callee = base;\n    const { maybeAsyncArrow, optionalChainMember } = state;\n\n    if (maybeAsyncArrow) {\n      this.expressionScope.enter(newAsyncArrowScope());\n      refExpressionErrors = new ExpressionErrors();\n    }\n\n    if (optionalChainMember) {\n      (node as Undone<N.OptionalCallExpression>).optional = optional;\n    }\n\n    if (optional) {\n      node.arguments = this.parseCallExpressionArguments();\n    } else {\n      node.arguments = this.parseCallExpressionArguments(\n        base.type !== \"Super\",\n        node,\n        refExpressionErrors,\n      );\n    }\n    let finishedNode:\n      | N.CallExpression\n      | N.OptionalCallExpression\n      | N.ArrowFunctionExpression = this.finishCallExpression(\n      node,\n      optionalChainMember,\n    );\n\n    if (maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {\n      /*:: invariant(refExpressionErrors != null) */\n      state.stop = true;\n      this.checkDestructuringPrivate(refExpressionErrors!);\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      finishedNode = this.parseAsyncArrowFromCallExpression(\n        this.startNodeAt<N.ArrowFunctionExpression>(startLoc),\n        finishedNode as N.CallExpression,\n      );\n    } else {\n      if (maybeAsyncArrow) {\n        this.checkExpressionErrors(refExpressionErrors, true);\n        this.expressionScope.exit();\n      }\n      this.toReferencedArguments(finishedNode);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n    return finishedNode;\n  }\n\n  toReferencedArguments(\n    node: N.CallExpression | N.OptionalCallExpression,\n    isParenthesizedExpr?: boolean,\n  ) {\n    this.toReferencedListDeep(node.arguments, isParenthesizedExpr);\n  }\n\n  // MemberExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\n  // CallExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\n  parseTaggedTemplateExpression(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n  ): N.TaggedTemplateExpression {\n    const node = this.startNodeAt<N.TaggedTemplateExpression>(startLoc);\n    node.tag = base;\n    node.quasi = this.parseTemplate(true);\n    if (state.optionalChainMember) {\n      this.raise(Errors.OptionalChainingNoTemplate, startLoc);\n    }\n    return this.finishNode(node, \"TaggedTemplateExpression\");\n  }\n\n  atPossibleAsyncArrow(base: N.Expression): boolean {\n    return (\n      base.type === \"Identifier\" &&\n      base.name === \"async\" &&\n      this.state.lastTokEndLoc!.index === base.end &&\n      !this.canInsertSemicolon() &&\n      // check there are no escape sequences, such as \\u{61}sync\n      base.end - base.start === 5 &&\n      this.offsetToSourcePos(base.start) === this.state.potentialArrowAt\n    );\n  }\n\n  finishCallExpression<T extends N.CallExpression | N.OptionalCallExpression>(\n    node: Undone<T>,\n    optional: boolean,\n  ): T {\n    if (node.callee.type === \"Import\") {\n      if (node.arguments.length === 0 || node.arguments.length > 2) {\n        this.raise(Errors.ImportCallArity, node);\n      } else {\n        for (const arg of node.arguments) {\n          if (arg.type === \"SpreadElement\") {\n            this.raise(Errors.ImportCallSpreadArgument, arg);\n          }\n        }\n      }\n    }\n    return this.finishNode(\n      node,\n      optional ? \"OptionalCallExpression\" : \"CallExpression\",\n    );\n  }\n\n  parseCallExpressionArguments(\n    this: Parser,\n    allowPlaceholder?: boolean,\n    nodeForExtra?: Undone<N.Node> | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): Array<N.Expression> {\n    const elts: N.Expression[] = [];\n    let first = true;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n\n    while (!this.eat(tt.parenR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(tt.parenR)) {\n          if (nodeForExtra) {\n            this.addTrailingCommaExtraToNode(nodeForExtra);\n          }\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(\n        this.parseExprListItem(\n          tt.parenR,\n          false,\n          refExpressionErrors,\n          allowPlaceholder,\n        ),\n      );\n    }\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    return elts;\n  }\n\n  shouldParseAsyncArrow(): boolean {\n    return this.match(tt.arrow) && !this.canInsertSemicolon();\n  }\n\n  parseAsyncArrowFromCallExpression(\n    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n    call: N.CallExpression,\n  ): N.ArrowFunctionExpression {\n    this.resetPreviousNodeTrailingComments(call);\n    this.expect(tt.arrow);\n    this.parseArrowExpression(\n      node,\n      call.arguments,\n      true,\n      call.extra?.trailingCommaLoc,\n    );\n    // mark inner comments of `async()` as inner comments of `async () =>`\n    if (call.innerComments) {\n      setInnerComments(node, call.innerComments);\n    }\n    // mark trailing comments of `async` to be inner comments\n    if (call.callee.trailingComments) {\n      setInnerComments(node, call.callee.trailingComments);\n    }\n    return node as N.ArrowFunctionExpression;\n  }\n\n  // Parse a no-call expression (like argument of `new` or `::` operators).\n  // https://tc39.es/ecma262/#prod-MemberExpression\n  parseNoCallExpr(this: Parser): N.Expression {\n    const startLoc = this.state.startLoc;\n    return this.parseSubscripts(this.parseExprAtom(), startLoc, true);\n  }\n\n  // Parse an atomic expression — either a single token that is an\n  // expression, an expression started by a keyword like `function` or\n  // `new`, or an expression wrapped in punctuation like `()`, `[]`,\n  // or `{}`.\n\n  // https://tc39.es/ecma262/#prod-PrimaryExpression\n  // https://tc39.es/ecma262/#prod-AsyncArrowFunction\n  // PrimaryExpression\n  // Super\n  // Import\n  // AsyncArrowFunction\n\n  parseExprAtom(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    let node;\n    let decorators: N.Decorator[] | null = null;\n\n    const { type } = this.state;\n    switch (type) {\n      case tt._super:\n        return this.parseSuper();\n\n      case tt._import:\n        node = this.startNode<N.MetaProperty | N.Import | N.ImportExpression>();\n        this.next();\n\n        if (this.match(tt.dot)) {\n          return this.parseImportMetaPropertyOrPhaseCall(\n            node as Undone<N.MetaProperty | N.ImportExpression>,\n          );\n        }\n\n        if (this.match(tt.parenL)) {\n          if (this.optionFlags & OptionFlags.CreateImportExpressions) {\n            return this.parseImportCall(node as Undone<N.ImportExpression>);\n          } else {\n            return this.finishNode(node, \"Import\");\n          }\n        } else {\n          this.raise(Errors.UnsupportedImport, this.state.lastTokStartLoc!);\n          return this.finishNode(node, \"Import\");\n        }\n\n      case tt._this:\n        node = this.startNode<N.ThisExpression>();\n        this.next();\n        return this.finishNode(node, \"ThisExpression\");\n\n      case tt._do: {\n        return this.parseDo(this.startNode(), false);\n      }\n\n      case tt.slash:\n      case tt.slashAssign: {\n        this.readRegexp();\n        return this.parseRegExpLiteral(this.state.value);\n      }\n\n      case tt.num:\n        return this.parseNumericLiteral(this.state.value);\n\n      case tt.bigint:\n        return this.parseBigIntLiteral(this.state.value);\n\n      case tt.string:\n        return this.parseStringLiteral(this.state.value);\n\n      case tt._null:\n        return this.parseNullLiteral();\n\n      case tt._true:\n        return this.parseBooleanLiteral(true);\n      case tt._false:\n        return this.parseBooleanLiteral(false);\n\n      case tt.parenL: {\n        const canBeArrow = this.state.potentialArrowAt === this.state.start;\n        return this.parseParenAndDistinguishExpression(canBeArrow);\n      }\n\n      case tt.bracketL: {\n        return this.parseArrayLike(\n          tt.bracketR,\n          /* isTuple */ false,\n          refExpressionErrors,\n        );\n      }\n      case tt.braceL: {\n        return this.parseObjectLike(\n          tt.braceR,\n          /* isPattern */ false,\n          /* isRecord */ false,\n          refExpressionErrors,\n        );\n      }\n      case tt._function:\n        return this.parseFunctionOrFunctionSent();\n\n      case tt.at:\n        decorators = this.parseDecorators();\n      // fall through\n      case tt._class:\n        return this.parseClass(\n          this.maybeTakeDecorators(\n            decorators,\n            this.startNode<N.ClassExpression>(),\n          ),\n          false,\n        );\n\n      case tt._new:\n        return this.parseNewOrNewTarget();\n\n      case tt.templateNonTail:\n      case tt.templateTail:\n        return this.parseTemplate(false);\n\n      // BindExpression[Yield]\n      //   :: MemberExpression[?Yield]\n      case tt.doubleColon: {\n        node = this.startNode<N.BindExpression>();\n        this.next();\n        node.object = null;\n        const callee = (node.callee = this.parseNoCallExpr());\n        if (callee.type === \"MemberExpression\") {\n          return this.finishNode(node, \"BindExpression\");\n        } else {\n          throw this.raise(Errors.UnsupportedBind, callee);\n        }\n      }\n\n      case tt.privateName: {\n        // Standalone private names are only allowed in \"#x in obj\"\n        // expressions, and they are directly handled by callers of\n        // parseExprOp. If we reach this, the input is always invalid.\n        // We can throw a better error message and recover, rather than\n        // just throwing \"Unexpected token\" (which is the default\n        // behavior of this big switch statement).\n        this.raise(Errors.PrivateInExpectedIn, this.state.startLoc, {\n          identifierName: this.state.value,\n        });\n        return this.parsePrivateName() as unknown as N.Expression;\n      }\n\n      case tt.moduloAssign: {\n        return this.parseTopicReferenceThenEqualsSign(tt.modulo, \"%\");\n      }\n\n      case tt.xorAssign: {\n        return this.parseTopicReferenceThenEqualsSign(tt.bitwiseXOR, \"^\");\n      }\n\n      case tt.doubleCaret:\n      case tt.doubleAt: {\n        return this.parseTopicReference(\"hack\");\n      }\n\n      case tt.bitwiseXOR:\n      case tt.modulo:\n      case tt.hash: {\n        const pipeProposal = this.getPluginOption(\n          \"pipelineOperator\",\n          \"proposal\",\n        );\n\n        if (pipeProposal) {\n          return this.parseTopicReference(pipeProposal);\n        }\n        throw this.unexpected();\n      }\n\n      case tt.lt: {\n        const lookaheadCh = this.input.codePointAt(this.nextTokenStart())!;\n        if (\n          isIdentifierStart(lookaheadCh) || // Element/Type Parameter <foo>\n          lookaheadCh === charCodes.greaterThan // Fragment <>\n        ) {\n          // None of these plugins is enabled, otherwise they would have\n          // handled `<` by themselves.\n          throw this.expectOnePlugin([\"jsx\", \"flow\", \"typescript\"]);\n        }\n        throw this.unexpected();\n      }\n\n      default:\n        if (!process.env.BABEL_8_BREAKING) {\n          if (type === tt.decimal) {\n            return this.parseDecimalLiteral(this.state.value);\n          } else if (type === tt.bracketBarL || type === tt.bracketHashL) {\n            return this.parseArrayLike(\n              this.state.type === tt.bracketBarL ? tt.bracketBarR : tt.bracketR,\n              /* isTuple */ true,\n            );\n          } else if (type === tt.braceBarL || type === tt.braceHashL) {\n            return this.parseObjectLike(\n              this.state.type === tt.braceBarL ? tt.braceBarR : tt.braceR,\n              /* isPattern */ false,\n              /* isRecord */ true,\n            );\n          }\n        }\n\n        if (tokenIsIdentifier(type)) {\n          if (\n            this.isContextual(tt._module) &&\n            this.lookaheadInLineCharCode() === charCodes.leftCurlyBrace\n          ) {\n            return this.parseModuleExpression();\n          }\n          const canBeArrow = this.state.potentialArrowAt === this.state.start;\n          const containsEsc = this.state.containsEsc;\n          const id = this.parseIdentifier();\n\n          if (\n            !containsEsc &&\n            id.name === \"async\" &&\n            !this.canInsertSemicolon()\n          ) {\n            const { type } = this.state;\n            if (type === tt._function) {\n              this.resetPreviousNodeTrailingComments(id);\n              this.next();\n              return this.parseAsyncFunctionExpression(\n                this.startNodeAtNode(id),\n              );\n            } else if (tokenIsIdentifier(type)) {\n              // If the next token begins with \"=\", commit to parsing an async\n              // arrow function. (Peeking ahead for \"=\" lets us avoid a more\n              // expensive full-token lookahead on this common path.)\n              if (this.lookaheadCharCode() === charCodes.equalsTo) {\n                // although `id` is not used in async arrow unary function,\n                // we don't need to reset `async`'s trailing comments because\n                // it will be attached to the upcoming async arrow binding identifier\n                return this.parseAsyncArrowUnaryFunction(\n                  this.startNodeAtNode(id),\n                );\n              } else {\n                // Otherwise, treat \"async\" as an identifier and let calling code\n                // deal with the current tt.name token.\n                return id;\n              }\n            } else if (type === tt._do) {\n              this.resetPreviousNodeTrailingComments(id);\n              return this.parseDo(this.startNodeAtNode(id), true);\n            }\n          }\n\n          if (\n            canBeArrow &&\n            this.match(tt.arrow) &&\n            !this.canInsertSemicolon()\n          ) {\n            this.next();\n            return this.parseArrowExpression(\n              this.startNodeAtNode(id),\n              [id],\n              false,\n            );\n          }\n\n          return id;\n        } else {\n          throw this.unexpected();\n        }\n    }\n  }\n\n  // This helper method should only be called\n  // when the parser has reached a potential Hack pipe topic token\n  // that is followed by an equals sign.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  // If we find ^= or %= in an expression position\n  // (i.e., the tt.moduloAssign or tt.xorAssign token types), and if the\n  // Hack-pipes proposal is active with ^ or % as its topicToken, then the ^ or\n  // % could be the topic token (e.g., in x |> ^==y or x |> ^===y), and so we\n  // reparse the current token as ^ or %.\n  // Otherwise, this throws an unexpected-token error.\n  parseTopicReferenceThenEqualsSign(\n    topicTokenType: TokenType,\n    topicTokenValue: string,\n  ): N.Expression {\n    const pipeProposal = this.getPluginOption(\"pipelineOperator\", \"proposal\");\n\n    if (pipeProposal) {\n      // Set the most-recent token to be a topic token\n      // given by the tokenType and tokenValue.\n      // Now the next readToken() call (in parseTopicReference)\n      // will consume that “topic token”.\n      this.state.type = topicTokenType;\n      this.state.value = topicTokenValue;\n      // Rewind the tokenizer to the end of the “topic token”, so that the\n      // following token starts at the equals sign after that topic token.\n      this.state.pos--;\n      this.state.end--;\n      // This is safe to do since the preceding character was either ^ or %, and\n      // thus not a newline.\n      this.state.endLoc = createPositionWithColumnOffset(this.state.endLoc, -1);\n      // Now actually consume the topic token.\n      return this.parseTopicReference(pipeProposal);\n    }\n    throw this.unexpected();\n  }\n\n  // This helper method should only be called\n  // when the proposal-pipeline-operator plugin is active,\n  // and when the parser has reached a potential Hack pipe topic token.\n  // Although a pipe-operator proposal is assumed to be active,\n  // its configuration might not match the current token’s type.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  parseTopicReference(pipeProposal: string): N.Expression {\n    const node = this.startNode<N.TopicReference>();\n    const startLoc = this.state.startLoc;\n    const tokenType = this.state.type;\n\n    // Consume the current token.\n    this.next();\n\n    // If the pipe-operator plugin’s configuration matches the current token’s type,\n    // then this will return `node`, will have been finished as a topic reference.\n    // Otherwise, this will throw a `PipeTopicUnconfiguredToken` error.\n    return this.finishTopicReference(node, startLoc, pipeProposal, tokenType);\n  }\n\n  // This helper method attempts to finish the given `node`\n  // into a topic-reference node for the given `pipeProposal`.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  //\n  // The method assumes that any topic token was consumed before it was called.\n  //\n  // If the `pipelineOperator` plugin is active,\n  // and if the given `tokenType` matches the plugin’s configuration,\n  // then this method will return the finished `node`.\n  //\n  // If the `pipelineOperator` plugin is active,\n  // but if the given `tokenType` does not match the plugin’s configuration,\n  // then this method will throw a `PipeTopicUnconfiguredToken` error.\n  finishTopicReference<\n    T extends N.PipelinePrimaryTopicReference | N.TopicReference,\n  >(\n    node: Undone<T>,\n    startLoc: Position,\n    pipeProposal: string,\n    tokenType: TokenType,\n  ): T {\n    if (\n      this.testTopicReferenceConfiguration(pipeProposal, startLoc, tokenType)\n    ) {\n      // The token matches the plugin’s configuration.\n      // The token is therefore a topic reference.\n\n      if (process.env.BABEL_8_BREAKING || pipeProposal === \"hack\") {\n        if (!this.topicReferenceIsAllowedInCurrentContext()) {\n          this.raise(Errors.PipeTopicUnbound, startLoc);\n        }\n\n        // Register the topic reference so that its pipe body knows\n        // that its topic was used at least once.\n        this.registerTopicReference();\n\n        return this.finishNode(node, \"TopicReference\");\n      } else {\n        // pipeProposal is \"smart\"\n\n        if (!this.topicReferenceIsAllowedInCurrentContext()) {\n          this.raise(Errors.PrimaryTopicNotAllowed!, startLoc);\n        }\n        this.registerTopicReference();\n        return this.finishNode(node, \"PipelinePrimaryTopicReference\");\n      }\n    } else {\n      // The token does not match the plugin’s configuration.\n      throw this.raise(Errors.PipeTopicUnconfiguredToken, startLoc, {\n        token: tokenLabelName(tokenType),\n      });\n    }\n  }\n\n  // This helper method tests whether the given token type\n  // matches the pipelineOperator parser plugin’s configuration.\n  // If the active pipe proposal is Hack style,\n  // and if the given token is the same as the plugin configuration’s `topicToken`,\n  // then this is a valid topic reference.\n  // If the active pipe proposal is smart mix,\n  // then the topic token must always be `#`.\n  // If the active pipe proposal is neither (e.g., \"minimal\"(Babel 7) or \"fsharp\"),\n  // then an error is thrown.\n  testTopicReferenceConfiguration(\n    pipeProposal: string,\n    startLoc: Position,\n    tokenType: TokenType,\n  ): boolean {\n    switch (pipeProposal) {\n      case \"hack\": {\n        return this.hasPlugin([\n          \"pipelineOperator\",\n          {\n            // @ts-expect-error token must have a label\n            topicToken: tokenLabelName(tokenType),\n          },\n        ]);\n      }\n      case \"smart\":\n        return tokenType === tt.hash;\n      default:\n        throw this.raise(Errors.PipeTopicRequiresHackPipes, startLoc);\n    }\n  }\n\n  // async [no LineTerminator here] AsyncArrowBindingIdentifier[?Yield] [no LineTerminator here] => AsyncConciseBody[?In]\n  parseAsyncArrowUnaryFunction(\n    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n  ): N.ArrowFunctionExpression {\n    // We don't need to push a new ParameterDeclarationScope here since we are sure\n    // 1) it is an async arrow, 2) no biding pattern is allowed in params\n    this.prodParam.enter(functionFlags(true, this.prodParam.hasYield));\n    const params = [this.parseIdentifier()];\n    this.prodParam.exit();\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(Errors.LineTerminatorBeforeArrow, this.state.curPosition());\n    }\n    this.expect(tt.arrow);\n    // let foo = async bar => {};\n    return this.parseArrowExpression(node, params, true);\n  }\n\n  // https://github.com/tc39/proposal-do-expressions\n  // https://github.com/tc39/proposal-async-do-expressions\n  parseDo(\n    this: Parser,\n    node: Undone<N.DoExpression>,\n    isAsync: boolean,\n  ): N.DoExpression {\n    this.expectPlugin(\"doExpressions\");\n    if (isAsync) {\n      this.expectPlugin(\"asyncDoExpressions\");\n    }\n    node.async = isAsync;\n    this.next(); // eat `do`\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    if (isAsync) {\n      // AsyncDoExpression :\n      // async [no LineTerminator here] do Block[~Yield, +Await, ~Return]\n      this.prodParam.enter(ParamKind.PARAM_AWAIT);\n      node.body = this.parseBlock();\n      this.prodParam.exit();\n    } else {\n      node.body = this.parseBlock();\n    }\n\n    this.state.labels = oldLabels;\n    return this.finishNode(node, \"DoExpression\");\n  }\n\n  // Parse the `super` keyword\n  parseSuper(): N.Super {\n    const node = this.startNode<N.Super>();\n    this.next(); // eat `super`\n    if (this.match(tt.parenL) && !this.scope.allowDirectSuper) {\n      if (process.env.BABEL_8_BREAKING) {\n        this.raise(Errors.SuperNotAllowed, node);\n      } else {\n        if (!(this.optionFlags & OptionFlags.AllowSuperOutsideMethod)) {\n          this.raise(Errors.SuperNotAllowed, node);\n        }\n      }\n    } else if (!this.scope.allowSuper) {\n      if (process.env.BABEL_8_BREAKING) {\n        this.raise(Errors.UnexpectedSuper, node);\n      } else {\n        if (!(this.optionFlags & OptionFlags.AllowSuperOutsideMethod)) {\n          this.raise(Errors.UnexpectedSuper, node);\n        }\n      }\n    }\n\n    if (\n      !this.match(tt.parenL) &&\n      !this.match(tt.bracketL) &&\n      !this.match(tt.dot)\n    ) {\n      this.raise(Errors.UnsupportedSuper, node);\n    }\n\n    return this.finishNode(node, \"Super\");\n  }\n\n  parsePrivateName(): N.PrivateName {\n    const node = this.startNode<N.PrivateName>();\n    const id = this.startNodeAt<N.Identifier>(\n      // The position is hardcoded because we merge `#` and name into a single\n      // tt.privateName token\n      createPositionWithColumnOffset(this.state.startLoc, 1),\n    );\n    const name = this.state.value;\n    this.next(); // eat #name;\n    node.id = this.createIdentifier(id, name);\n    return this.finishNode(node, \"PrivateName\");\n  }\n\n  parseFunctionOrFunctionSent(\n    this: Parser,\n  ): N.FunctionExpression | N.MetaProperty {\n    const node = this.startNode<N.FunctionExpression | N.MetaProperty>();\n\n    // We do not do parseIdentifier here because when parseFunctionOrFunctionSent\n    // is called we already know that the current token is a \"name\" with the value \"function\"\n    // This will improve perf a tiny little bit as we do not do validation but more importantly\n    // here is that parseIdentifier will remove an item from the expression stack\n    // if \"function\" or \"class\" is parsed as identifier (in objects e.g.), which should not happen here.\n    this.next(); // eat `function`\n\n    if (this.prodParam.hasYield && this.match(tt.dot)) {\n      const meta = this.createIdentifier(\n        this.startNodeAtNode<N.Identifier>(node),\n        \"function\",\n      );\n      this.next(); // eat `.`\n      // https://github.com/tc39/proposal-function.sent#syntax-1\n      if (this.match(tt._sent)) {\n        this.expectPlugin(\"functionSent\");\n      } else if (!this.hasPlugin(\"functionSent\")) {\n        // The code wasn't `function.sent` but just `function.`, so a simple error is less confusing.\n        this.unexpected();\n      }\n      return this.parseMetaProperty(\n        node as Undone<N.MetaProperty>,\n        meta,\n        \"sent\",\n      );\n    }\n    return this.parseFunction(node as Undone<N.FunctionExpression>);\n  }\n\n  parseMetaProperty(\n    node: Undone<N.MetaProperty>,\n    meta: N.Identifier,\n    propertyName: string,\n  ): N.MetaProperty {\n    node.meta = meta;\n\n    const containsEsc = this.state.containsEsc;\n\n    node.property = this.parseIdentifier(true);\n\n    if (node.property.name !== propertyName || containsEsc) {\n      this.raise(Errors.UnsupportedMetaProperty, node.property, {\n        target: meta.name,\n        onlyValidPropertyName: propertyName,\n      });\n    }\n\n    return this.finishNode(node, \"MetaProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportMeta\n  // https://tc39.es/proposal-source-phase-imports/\n  parseImportMetaPropertyOrPhaseCall(\n    this: Parser,\n    node: Undone<N.MetaProperty | N.ImportExpression>,\n  ): N.MetaProperty | N.ImportExpression {\n    this.next(); // eat `.`\n\n    if (this.isContextual(tt._source) || this.isContextual(tt._defer)) {\n      const isSource = this.isContextual(tt._source);\n\n      this.expectPlugin(\n        isSource ? \"sourcePhaseImports\" : \"deferredImportEvaluation\",\n      );\n      this.next();\n      (node as Undone<N.ImportExpression>).phase = isSource\n        ? \"source\"\n        : \"defer\";\n      return this.parseImportCall(node as Undone<N.ImportExpression>);\n    } else {\n      const id = this.createIdentifierAt(\n        this.startNodeAtNode<N.Identifier>(node),\n        \"import\",\n        this.state.lastTokStartLoc!,\n      );\n      if (this.isContextual(tt._meta)) {\n        if (!this.inModule) {\n          this.raise(Errors.ImportMetaOutsideModule, id);\n        }\n        this.sawUnambiguousESM = true;\n      }\n      return this.parseMetaProperty(node as Undone<N.MetaProperty>, id, \"meta\");\n    }\n  }\n\n  parseLiteralAtNode<T extends N.Node>(\n    value: any,\n    type: T[\"type\"],\n    node: any,\n  ): T {\n    this.addExtra(node, \"rawValue\", value);\n    this.addExtra(\n      node,\n      \"raw\",\n      this.input.slice(this.offsetToSourcePos(node.start), this.state.end),\n    );\n    node.value = value;\n    this.next();\n    return this.finishNode<T>(node, type);\n  }\n\n  parseLiteral<T extends N.Node>(value: any, type: T[\"type\"]): T {\n    const node = this.startNode();\n    return this.parseLiteralAtNode(value, type, node);\n  }\n\n  parseStringLiteral(value: any) {\n    return this.parseLiteral<N.StringLiteral>(value, \"StringLiteral\");\n  }\n\n  parseNumericLiteral(value: any) {\n    return this.parseLiteral<N.NumericLiteral>(value, \"NumericLiteral\");\n  }\n\n  parseBigIntLiteral(value: any) {\n    if (process.env.BABEL_8_BREAKING) {\n      let bigInt: bigint | null;\n      try {\n        bigInt = BigInt(value);\n      } catch {\n        // parser supports invalid bigints like `1.0n` or `1e1n` such that it\n        // can throw a recoverable error, but BigInt constructor does not\n        // support them.\n        bigInt = null;\n      }\n      const node = this.parseLiteral<N.BigIntLiteral>(bigInt, \"BigIntLiteral\");\n      return node;\n    } else {\n      return this.parseLiteral<N.BigIntLiteral>(value, \"BigIntLiteral\");\n    }\n  }\n\n  // TODO: Remove this in Babel 8\n  parseDecimalLiteral(value: any) {\n    return this.parseLiteral<N.DecimalLiteral>(value, \"DecimalLiteral\");\n  }\n\n  parseRegExpLiteral(value: {\n    value: any;\n    pattern: string;\n    flags: N.RegExpLiteral[\"flags\"];\n  }) {\n    const node = this.startNode<N.RegExpLiteral>();\n    this.addExtra(\n      node,\n      \"raw\",\n      this.input.slice(this.offsetToSourcePos(node.start), this.state.end),\n    );\n    node.pattern = value.pattern;\n    node.flags = value.flags;\n    this.next();\n    return this.finishNode(node, \"RegExpLiteral\");\n  }\n\n  parseBooleanLiteral(value: boolean) {\n    const node = this.startNode<N.BooleanLiteral>();\n    node.value = value;\n    this.next();\n    return this.finishNode(node, \"BooleanLiteral\");\n  }\n\n  parseNullLiteral() {\n    const node = this.startNode<N.NullLiteral>();\n    this.next();\n    return this.finishNode(node, \"NullLiteral\");\n  }\n\n  // https://tc39.es/ecma262/#prod-CoverParenthesizedExpressionAndArrowParameterList\n  parseParenAndDistinguishExpression(\n    this: Parser,\n    canBeArrow: boolean,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n\n    let val;\n    this.next(); // eat `(`\n    this.expressionScope.enter(newArrowHeadScope());\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.maybeInArrowParameters = true;\n    this.state.inFSharpPipelineDirectBody = false;\n\n    const innerStartLoc = this.state.startLoc;\n    const exprList: (\n      | N.Expression\n      | N.RestElement\n      | N.VoidPattern\n      | N.AssignmentPattern\n    )[] = [];\n    const refExpressionErrors = new ExpressionErrors();\n    let first = true;\n    let spreadStartLoc;\n    let optionalCommaStartLoc;\n\n    while (!this.match(tt.parenR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(\n          tt.comma,\n          refExpressionErrors.optionalParametersLoc === null\n            ? null\n            : refExpressionErrors.optionalParametersLoc,\n        );\n        if (this.match(tt.parenR)) {\n          optionalCommaStartLoc = this.state.startLoc;\n          break;\n        }\n      }\n\n      if (this.match(tt.ellipsis)) {\n        const spreadNodeStartLoc = this.state.startLoc;\n        spreadStartLoc = this.state.startLoc;\n        exprList.push(\n          this.parseParenItem(this.parseRestBinding(), spreadNodeStartLoc),\n        );\n\n        if (!this.checkCommaAfterRest(charCodes.rightParenthesis)) {\n          break;\n        }\n      } else {\n        exprList.push(\n          this.parseMaybeAssignAllowInOrVoidPattern(\n            tt.parenR,\n            refExpressionErrors,\n            this.parseParenItem,\n          ),\n        );\n      }\n    }\n\n    const innerEndLoc = this.state.lastTokEndLoc!;\n    this.expect(tt.parenR);\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    let arrowNode: Undone<N.ArrowFunctionExpression> | null | undefined =\n      this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n    if (\n      canBeArrow &&\n      this.shouldParseArrow(exprList) &&\n      (arrowNode = this.parseArrow(arrowNode))\n    ) {\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      this.parseArrowExpression(arrowNode, exprList, false);\n      // @ts-expect-error todo(flow->ts) improve node types\n      return arrowNode;\n    }\n    this.expressionScope.exit();\n\n    if (!exprList.length) {\n      this.unexpected(this.state.lastTokStartLoc);\n    }\n    if (optionalCommaStartLoc) this.unexpected(optionalCommaStartLoc);\n    if (spreadStartLoc) this.unexpected(spreadStartLoc);\n    this.checkExpressionErrors(refExpressionErrors, true);\n\n    this.toReferencedListDeep(exprList, /* isParenthesizedExpr */ true);\n    if (exprList.length > 1) {\n      val = this.startNodeAt<N.SequenceExpression>(innerStartLoc);\n      val.expressions = exprList as N.Expression[];\n      // finish node at current location so it can pick up comments after `)`\n      this.finishNode(val, \"SequenceExpression\");\n      this.resetEndLocation(val, innerEndLoc);\n    } else {\n      val = exprList[0];\n    }\n\n    return this.wrapParenthesis(\n      startLoc,\n      // @ts-expect-error todo(flow->ts)\n      val,\n    );\n  }\n\n  wrapParenthesis(startLoc: Position, expression: N.Expression): N.Expression {\n    if (!(this.optionFlags & OptionFlags.CreateParenthesizedExpressions)) {\n      this.addExtra(expression, \"parenthesized\", true);\n      this.addExtra(expression, \"parenStart\", startLoc.index);\n\n      this.takeSurroundingComments(\n        expression,\n        startLoc.index,\n        this.state.lastTokEndLoc!.index,\n      );\n\n      return expression;\n    }\n\n    const parenExpression =\n      this.startNodeAt<N.ParenthesizedExpression>(startLoc);\n    parenExpression.expression = expression;\n    return this.finishNode(parenExpression, \"ParenthesizedExpression\");\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars -- `params` is used in typescript plugin\n  shouldParseArrow(params: Array<N.Node>): boolean {\n    return !this.canInsertSemicolon();\n  }\n\n  parseArrow(\n    node: Undone<N.ArrowFunctionExpression>,\n  ): Undone<N.ArrowFunctionExpression> | undefined | null {\n    if (this.eat(tt.arrow)) {\n      return node;\n    }\n  }\n\n  parseParenItem<T extends N.Expression | N.RestElement | N.SpreadElement>(\n    node: T,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    startLoc: Position,\n  ): T | N.TypeCastExpression | N.TsTypeCastExpression {\n    return node;\n  }\n\n  parseNewOrNewTarget(this: Parser): N.NewExpression | N.MetaProperty {\n    const node = this.startNode<N.NewExpression | N.MetaProperty>();\n    this.next();\n    if (this.match(tt.dot)) {\n      // https://tc39.es/ecma262/#prod-NewTarget\n      const meta = this.createIdentifier(\n        this.startNodeAtNode<N.Identifier>(node),\n        \"new\",\n      );\n      this.next();\n      const metaProp = this.parseMetaProperty(\n        node as Undone<N.MetaProperty>,\n        meta,\n        \"target\",\n      );\n\n      if (!this.scope.allowNewTarget) {\n        this.raise(Errors.UnexpectedNewTarget, metaProp);\n      }\n\n      return metaProp;\n    }\n\n    return this.parseNew(node as Undone<N.NewExpression>);\n  }\n\n  // New's precedence is slightly tricky. It must allow its argument to\n  // be a `[]` or dot subscript expression, but not a call — at least,\n  // not without wrapping it in parentheses. Thus, it uses the noCalls\n  // argument to parseSubscripts to prevent it from consuming the\n  // argument list.\n  // https://tc39.es/ecma262/#prod-NewExpression\n  parseNew(this: Parser, node: Undone<N.NewExpression>): N.NewExpression {\n    this.parseNewCallee(node);\n\n    if (this.eat(tt.parenL)) {\n      const args = this.parseExprList(tt.parenR);\n      this.toReferencedList(args);\n      // (parseExprList should be all non-null in this case)\n      node.arguments = args as N.Expression[];\n    } else {\n      node.arguments = [];\n    }\n\n    return this.finishNode(node, \"NewExpression\");\n  }\n\n  parseNewCallee(this: Parser, node: Undone<N.NewExpression>): void {\n    const isImport = this.match(tt._import);\n    const callee = this.parseNoCallExpr();\n    node.callee = callee;\n    if (\n      isImport &&\n      (callee.type === \"Import\" || callee.type === \"ImportExpression\")\n    ) {\n      this.raise(Errors.ImportCallNotNewExpression, callee);\n    }\n  }\n\n  // Parse template expression.\n\n  parseTemplateElement(isTagged: boolean): N.TemplateElement {\n    const { start, startLoc, end, value } = this.state;\n    const elemStart = start + 1;\n    const elem = this.startNodeAt<N.TemplateElement>(\n      createPositionWithColumnOffset(startLoc, 1),\n    );\n    if (value === null) {\n      if (!isTagged) {\n        this.raise(\n          Errors.InvalidEscapeSequenceTemplate,\n          // FIXME: Adding 1 is probably wrong.\n          createPositionWithColumnOffset(\n            this.state.firstInvalidTemplateEscapePos!,\n            1,\n          ),\n        );\n      }\n    }\n\n    const isTail = this.match(tt.templateTail);\n    const endOffset = isTail ? -1 : -2;\n    const elemEnd = end + endOffset;\n    elem.value = {\n      raw: this.input.slice(elemStart, elemEnd).replace(/\\r\\n?/g, \"\\n\"),\n      cooked: value === null ? null : value.slice(1, endOffset),\n    };\n    elem.tail = isTail;\n    this.next();\n    const finishedNode = this.finishNode(elem, \"TemplateElement\");\n    this.resetEndLocation(\n      finishedNode,\n      createPositionWithColumnOffset(this.state.lastTokEndLoc!, endOffset),\n    );\n    return finishedNode;\n  }\n\n  // https://tc39.es/ecma262/#prod-TemplateLiteral\n  parseTemplate(this: Parser, isTagged: boolean): N.TemplateLiteral {\n    const node = this.startNode<N.TemplateLiteral>();\n    let curElt = this.parseTemplateElement(isTagged);\n    const quasis = [curElt];\n    const substitutions = [];\n    while (!curElt.tail) {\n      substitutions.push(this.parseTemplateSubstitution());\n      this.readTemplateContinuation();\n      quasis.push((curElt = this.parseTemplateElement(isTagged)));\n    }\n    // Type cast from (N.Expression[] | N.TsType[]). parseTemplateSubstitution\n    // returns consistent results.\n    node.expressions = substitutions as N.Expression[] | N.TsType[];\n    node.quasis = quasis;\n    return this.finishNode(node, \"TemplateLiteral\");\n  }\n\n  // This is overwritten by the TypeScript plugin to parse template types\n  parseTemplateSubstitution(this: Parser): N.Expression | N.TsType {\n    return this.parseExpression();\n  }\n\n  // Parse an object literal, binding pattern, or record.\n\n  parseObjectLike(\n    close: TokenType,\n    isPattern: true,\n    isRecord?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectPattern;\n  parseObjectLike(\n    close: TokenType,\n    isPattern: false,\n    isRecord?: false | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectExpression;\n  parseObjectLike(\n    close: TokenType,\n    isPattern: false,\n    isRecord?: true,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.RecordExpression;\n  parseObjectLike<T extends N.ObjectPattern | N.ObjectExpression>(\n    this: Parser,\n    close: TokenType,\n    isPattern: boolean,\n    isRecord?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): T {\n    if (isRecord) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    let sawProto = false;\n    let first = true;\n    const node = this.startNode<\n      N.ObjectExpression | N.ObjectPattern | N.RecordExpression\n    >();\n\n    node.properties = [];\n    this.next();\n\n    while (!this.match(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          this.addTrailingCommaExtraToNode(node);\n          break;\n        }\n      }\n\n      let prop;\n      if (isPattern) {\n        prop = this.parseBindingProperty();\n      } else {\n        prop = this.parsePropertyDefinition(refExpressionErrors);\n        sawProto = this.checkProto(\n          prop,\n          isRecord,\n          sawProto,\n          refExpressionErrors,\n        );\n      }\n\n      if (\n        isRecord &&\n        !this.isObjectProperty(prop) &&\n        prop.type !== \"SpreadElement\"\n      ) {\n        this.raise(Errors.InvalidRecordProperty, prop);\n      }\n\n      if (!process.env.BABEL_8_BREAKING) {\n        // @ts-expect-error shorthand may not index prop\n        if (prop.shorthand) {\n          this.addExtra(prop, \"shorthand\", true);\n        }\n      }\n\n      // @ts-expect-error Fixme: refine typings\n      node.properties.push(prop);\n    }\n\n    this.next();\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    let type = \"ObjectExpression\";\n    if (isPattern) {\n      type = \"ObjectPattern\";\n    } else if (isRecord) {\n      type = \"RecordExpression\";\n    }\n    // @ts-expect-error type is well defined\n    return this.finishNode(node, type);\n  }\n\n  addTrailingCommaExtraToNode(node: Undone<N.Node>): void {\n    this.addExtra(node, \"trailingComma\", this.state.lastTokStartLoc!.index);\n    this.addExtra(node, \"trailingCommaLoc\", this.state.lastTokStartLoc, false);\n  }\n\n  // Check grammar production:\n  //   IdentifierName *_opt PropertyName\n  // It is used in `parsePropertyDefinition` to detect AsyncMethod and Accessors\n  maybeAsyncOrAccessorProp(\n    prop: Undone<N.ObjectProperty>,\n  ): prop is typeof prop & { key: N.Identifier } {\n    return (\n      !prop.computed &&\n      prop.key.type === \"Identifier\" &&\n      (this.isLiteralPropertyName() ||\n        this.match(tt.bracketL) ||\n        this.match(tt.star))\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-PropertyDefinition\n  parsePropertyDefinition(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectMember | N.SpreadElement {\n    let decorators = [];\n    if (this.match(tt.at)) {\n      if (this.hasPlugin(\"decorators\")) {\n        this.raise(Errors.UnsupportedPropertyDecorator, this.state.startLoc);\n      }\n\n      // we needn't check if decorators (stage 0) plugin is enabled since it's checked by\n      // the call to this.parseDecorator\n      while (this.match(tt.at)) {\n        decorators.push(this.parseDecorator());\n      }\n    }\n\n    const prop = this.startNode<N.ObjectProperty>();\n    let isAsync = false;\n    let isAccessor = false;\n    let startLoc;\n\n    if (this.match(tt.ellipsis)) {\n      if (decorators.length) this.unexpected();\n      return this.parseSpread();\n    }\n\n    if (decorators.length) {\n      prop.decorators = decorators;\n      decorators = [];\n    }\n\n    prop.method = false;\n\n    if (refExpressionErrors) {\n      startLoc = this.state.startLoc;\n    }\n\n    let isGenerator = this.eat(tt.star);\n    this.parsePropertyNamePrefixOperator(prop);\n    const containsEsc = this.state.containsEsc;\n    this.parsePropertyName(prop, refExpressionErrors);\n\n    if (!isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) {\n      const { key } = prop;\n      const keyName = key.name;\n      // https://tc39.es/ecma262/#prod-AsyncMethod\n      // https://tc39.es/ecma262/#prod-AsyncGeneratorMethod\n      if (keyName === \"async\" && !this.hasPrecedingLineBreak()) {\n        isAsync = true;\n        this.resetPreviousNodeTrailingComments(key);\n        isGenerator = this.eat(tt.star);\n        this.parsePropertyName(prop);\n      }\n      // get PropertyName[?Yield, ?Await] () { FunctionBody[~Yield, ~Await] }\n      // set PropertyName[?Yield, ?Await] ( PropertySetParameterList ) { FunctionBody[~Yield, ~Await] }\n      if (keyName === \"get\" || keyName === \"set\") {\n        isAccessor = true;\n        this.resetPreviousNodeTrailingComments(key);\n        prop.kind = keyName;\n        if (this.match(tt.star)) {\n          isGenerator = true;\n          this.raise(Errors.AccessorIsGenerator, this.state.curPosition(), {\n            kind: keyName,\n          });\n          this.next();\n        }\n        this.parsePropertyName(prop);\n      }\n    }\n\n    return this.parseObjPropValue(\n      prop,\n      startLoc,\n      isGenerator,\n      isAsync,\n      false /* isPattern */,\n      isAccessor,\n      refExpressionErrors,\n    );\n  }\n\n  getGetterSetterExpectedParamCount(\n    method: N.ObjectMethod | N.ClassMethod,\n  ): number {\n    return method.kind === \"get\" ? 0 : 1;\n  }\n\n  // This exists so we can override within the ESTree plugin\n  getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n    return method.params;\n  }\n\n  // get methods aren't allowed to have any parameters\n  // set methods must have exactly 1 parameter which is not a rest parameter\n  checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\n    const paramCount = this.getGetterSetterExpectedParamCount(method);\n    const params = this.getObjectOrClassMethodParams(method);\n\n    if (params.length !== paramCount) {\n      this.raise(\n        method.kind === \"get\" ? Errors.BadGetterArity : Errors.BadSetterArity,\n        method,\n      );\n    }\n\n    if (\n      method.kind === \"set\" &&\n      params[params.length - 1]?.type === \"RestElement\"\n    ) {\n      this.raise(Errors.BadSetterRestParameter, method);\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-MethodDefinition\n  parseObjectMethod(\n    this: Parser,\n    prop: Undone<N.ObjectMethod>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n  ): N.ObjectMethod | undefined | null {\n    if (isAccessor) {\n      // isAccessor implies isAsync: false, isPattern: false, isGenerator: false\n      const finishedProp = this.parseMethod(\n        prop,\n        // This _should_ be false, but with error recovery, we allow it to be\n        // set for informational purposes\n        isGenerator,\n        /* isAsync */ false,\n        /* isConstructor */ false,\n        false,\n        \"ObjectMethod\",\n      );\n      this.checkGetterSetterParams(finishedProp);\n      return finishedProp;\n    }\n\n    if (isAsync || isGenerator || this.match(tt.parenL)) {\n      if (isPattern) this.unexpected();\n      prop.kind = \"method\";\n      prop.method = true;\n      return this.parseMethod(\n        prop,\n        isGenerator,\n        isAsync,\n        /* isConstructor */ false,\n        false,\n        \"ObjectMethod\",\n      );\n    }\n  }\n\n  // if `isPattern` is true, parse https://tc39.es/ecma262/#prod-BindingProperty\n  // else https://tc39.es/ecma262/#prod-PropertyDefinition\n  parseObjectProperty(\n    this: Parser,\n    prop: Undone<N.ObjectProperty>,\n    startLoc: Position | undefined | null,\n    isPattern: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectProperty | undefined | null {\n    prop.shorthand = false;\n\n    if (this.eat(tt.colon)) {\n      prop.value = isPattern\n        ? this.parseMaybeDefault(this.state.startLoc)\n        : this.parseMaybeAssignAllowInOrVoidPattern(\n            tt.braceR,\n            refExpressionErrors,\n          );\n\n      return this.finishObjectProperty(prop);\n    }\n\n    if (!prop.computed && prop.key.type === \"Identifier\") {\n      // PropertyDefinition:\n      //   IdentifierReference\n      //   CoverInitializedName\n      // Note: `{ eval } = {}` will be checked in `checkLVal` later.\n      this.checkReservedWord(prop.key.name, prop.key.loc.start, true, false);\n\n      if (isPattern) {\n        prop.value = this.parseMaybeDefault(\n          startLoc,\n          this.cloneIdentifier(prop.key),\n        );\n      } else if (this.match(tt.eq)) {\n        const shorthandAssignLoc = this.state.startLoc;\n        if (refExpressionErrors != null) {\n          if (refExpressionErrors.shorthandAssignLoc === null) {\n            refExpressionErrors.shorthandAssignLoc = shorthandAssignLoc;\n          }\n        } else {\n          this.raise(Errors.InvalidCoverInitializedName, shorthandAssignLoc);\n        }\n        prop.value = this.parseMaybeDefault(\n          startLoc,\n          this.cloneIdentifier(prop.key),\n        );\n      } else {\n        prop.value = this.cloneIdentifier(prop.key);\n      }\n      prop.shorthand = true;\n\n      return this.finishObjectProperty(prop);\n    }\n  }\n\n  finishObjectProperty(node: Undone<N.ObjectProperty>) {\n    return this.finishNode(node, \"ObjectProperty\");\n  }\n\n  parseObjPropValue<T extends N.ObjectMember>(\n    this: Parser,\n    prop: Undone<T>,\n    startLoc: Position | undefined | null,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): T {\n    const node = (this.parseObjectMethod(\n      prop as Undone<N.ObjectMethod>,\n      isGenerator,\n      isAsync,\n      isPattern,\n      isAccessor,\n    ) ||\n      this.parseObjectProperty(\n        prop as Undone<N.ObjectProperty>,\n        startLoc,\n        isPattern,\n        refExpressionErrors,\n      )) as T;\n\n    if (!node) this.unexpected();\n\n    return node;\n  }\n\n  // https://tc39.es/ecma262/#prod-PropertyName\n  // when refExpressionErrors presents, it will parse private name\n  // and record the position of the first private name\n  parsePropertyName(\n    this: Parser,\n    prop:\n      | Undone<N.ObjectOrClassMember | N.ClassMember>\n      | N.TsNamedTypeElementBase,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): void {\n    if (this.eat(tt.bracketL)) {\n      (prop as Undone<N.ObjectOrClassMember>).computed = true;\n      prop.key = this.parseMaybeAssignAllowIn();\n      this.expect(tt.bracketR);\n    } else {\n      // We check if it's valid for it to be a private name when we push it.\n      const { type, value } = this.state;\n      let key;\n      // most un-computed property names are identifiers\n      if (tokenIsKeywordOrIdentifier(type)) {\n        key = this.parseIdentifier(true);\n      } else {\n        switch (type) {\n          case tt.num:\n            key = this.parseNumericLiteral(value);\n            break;\n          case tt.string:\n            key = this.parseStringLiteral(value);\n            break;\n          case tt.bigint:\n            key = this.parseBigIntLiteral(value);\n            break;\n          case tt.privateName: {\n            // the class private key has been handled in parseClassElementName\n            const privateKeyLoc = this.state.startLoc;\n            if (refExpressionErrors != null) {\n              if (refExpressionErrors.privateKeyLoc === null) {\n                refExpressionErrors.privateKeyLoc = privateKeyLoc;\n              }\n            } else {\n              this.raise(Errors.UnexpectedPrivateField, privateKeyLoc);\n            }\n            key = this.parsePrivateName();\n            break;\n          }\n          default:\n            if (!process.env.BABEL_8_BREAKING && type === tt.decimal) {\n              key = this.parseDecimalLiteral(value);\n              break;\n            }\n\n            this.unexpected();\n        }\n      }\n      (prop as any).key = key;\n      if (type !== tt.privateName) {\n        // ClassPrivateProperty is never computed, so we don't assign in that case.\n        prop.computed = false;\n      }\n    }\n  }\n\n  // Initialize empty function node.\n\n  initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: boolean): void {\n    node.id = null;\n    node.generator = false;\n    node.async = isAsync;\n  }\n\n  // Parse object or class method.\n\n  parseMethod<T extends N.ObjectMethod | N.ClassMethod | N.ClassPrivateMethod>(\n    this: Parser,\n    node: Undone<T>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isConstructor: boolean,\n    allowDirectSuper: boolean,\n    type: T[\"type\"],\n    inClassScope: boolean = false,\n  ): T {\n    this.initFunction(node, isAsync);\n    node.generator = isGenerator;\n    this.scope.enter(\n      ScopeFlag.FUNCTION |\n        ScopeFlag.SUPER |\n        (inClassScope ? ScopeFlag.CLASS : 0) |\n        (allowDirectSuper ? ScopeFlag.DIRECT_SUPER : 0),\n    );\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n    this.parseFunctionParams(node, isConstructor);\n    const finishedNode = this.parseFunctionBodyAndFinish(node, type, true);\n    this.prodParam.exit();\n    this.scope.exit();\n\n    return finishedNode;\n  }\n\n  // parse an array literal or tuple literal\n  // https://tc39.es/ecma262/#prod-ArrayLiteral\n  // https://tc39.es/proposal-record-tuple/#prod-TupleLiteral\n  parseArrayLike(\n    this: Parser,\n    close: TokenType,\n    isTuple: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ArrayExpression | N.TupleExpression {\n    if (isTuple) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const node = this.startNode<N.ArrayExpression | N.TupleExpression>();\n    this.next();\n    node.elements = this.parseExprList(\n      close,\n      /* allowEmpty */ !isTuple,\n      refExpressionErrors,\n      node,\n    );\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return this.finishNode(\n      node,\n      isTuple ? \"TupleExpression\" : \"ArrayExpression\",\n    );\n  }\n\n  // Parse arrow function expression.\n  // If the parameters are provided, they will be converted to an\n  // assignable list.\n  parseArrowExpression(\n    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n    params:\n      | Array<\n          N.Expression | N.SpreadElement | N.VoidPattern | N.AssignmentPattern\n        >\n      | Array<\n          N.Expression | N.RestElement | N.VoidPattern | N.AssignmentPattern\n        >\n      | null\n      | undefined,\n    isAsync: boolean,\n    trailingCommaLoc?: Position | null,\n  ): N.ArrowFunctionExpression {\n    this.scope.enter(ScopeFlag.FUNCTION | ScopeFlag.ARROW);\n    let flags = functionFlags(isAsync, false);\n    // ConciseBody[In] :\n    //   [lookahead ≠ {] ExpressionBody[?In, ~Await]\n    //   { FunctionBody[~Yield, ~Await] }\n    if (!this.match(tt.braceL) && this.prodParam.hasIn) {\n      flags |= ParamKind.PARAM_IN;\n    }\n    this.prodParam.enter(flags);\n    this.initFunction(node, isAsync);\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n\n    if (params) {\n      this.state.maybeInArrowParameters = true;\n      this.setArrowFunctionParameters(node, params, trailingCommaLoc);\n    }\n    this.state.maybeInArrowParameters = false;\n    this.parseFunctionBody(node, true);\n\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n    return this.finishNode(node, \"ArrowFunctionExpression\");\n  }\n\n  setArrowFunctionParameters(\n    node: Undone<N.ArrowFunctionExpression>,\n    params:\n      | Array<\n          N.Expression | N.SpreadElement | N.VoidPattern | N.AssignmentPattern\n        >\n      | Array<\n          N.Expression | N.RestElement | N.VoidPattern | N.AssignmentPattern\n        >,\n    trailingCommaLoc?: Position | null,\n  ): void {\n    this.toAssignableList(params, trailingCommaLoc, false);\n    node.params = params as (N.Pattern | N.TSParameterProperty)[];\n  }\n\n  parseFunctionBodyAndFinish<\n    T extends\n      | N.Function\n      | N.TSDeclareMethod\n      | N.TSDeclareFunction\n      | N.ClassPrivateMethod,\n  >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n    // @ts-expect-error (node is not bodiless if we get here)\n    this.parseFunctionBody(node, false, isMethod);\n    return this.finishNode(node, type);\n  }\n\n  // Parse function body and check parameters.\n  parseFunctionBody(\n    this: Parser,\n    node: Undone<N.Function>,\n    allowExpression?: boolean | null,\n    isMethod: boolean = false,\n  ): void {\n    const isExpression = allowExpression && !this.match(tt.braceL);\n    this.expressionScope.enter(newExpressionScope());\n\n    if (isExpression) {\n      // https://tc39.es/ecma262/#prod-ExpressionBody\n      (node as Undone<N.ArrowFunctionExpression>).body =\n        this.parseMaybeAssign();\n      this.checkParams(node, false, allowExpression, false);\n    } else {\n      const oldStrict = this.state.strict;\n      // Start a new scope with regard to labels\n      // flag (restore them to their old value afterwards).\n      const oldLabels = this.state.labels;\n      this.state.labels = [];\n\n      // FunctionBody[Yield, Await]:\n      //   StatementList[?Yield, ?Await, +Return] opt\n      this.prodParam.enter(\n        this.prodParam.currentFlags() | ParamKind.PARAM_RETURN,\n      );\n      node.body = this.parseBlock(\n        true,\n        false,\n        // Strict mode function checks after we parse the statements in the function body.\n        (hasStrictModeDirective: boolean) => {\n          const nonSimple = !this.isSimpleParamList(node.params);\n\n          if (hasStrictModeDirective && nonSimple) {\n            // This logic is here to align the error location with the ESTree plugin.\n            this.raise(\n              Errors.IllegalLanguageModeDirective,\n              // @ts-expect-error kind may not index node\n              (node.kind === \"method\" || node.kind === \"constructor\") &&\n                // @ts-expect-error key may not index node\n                !!node.key\n                ? // @ts-expect-error node.key has been guarded\n                  node.key.loc.end\n                : node,\n            );\n          }\n\n          const strictModeChanged = !oldStrict && this.state.strict;\n\n          // Add the params to varDeclaredNames to ensure that an error is thrown\n          // if a let/const declaration in the function clashes with one of the params.\n          this.checkParams(\n            node,\n            !this.state.strict && !allowExpression && !isMethod && !nonSimple,\n            allowExpression,\n            strictModeChanged,\n          );\n\n          // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n          if (this.state.strict && node.id) {\n            this.checkIdentifier(\n              node.id,\n              BindingFlag.TYPE_OUTSIDE,\n              strictModeChanged,\n            );\n          }\n        },\n      );\n      this.prodParam.exit();\n      this.state.labels = oldLabels;\n    }\n    this.expressionScope.exit();\n  }\n\n  isSimpleParameter(node: N.Pattern | N.TSParameterProperty): boolean {\n    return node.type === \"Identifier\";\n  }\n\n  isSimpleParamList(\n    params: ReadonlyArray<N.Pattern | N.TSParameterProperty>,\n  ): boolean {\n    for (let i = 0, len = params.length; i < len; i++) {\n      if (!this.isSimpleParameter(params[i])) return false;\n    }\n    return true;\n  }\n\n  checkParams(\n    node: Undone<N.Function>,\n    allowDuplicates: boolean,\n    isArrowFunction?: boolean | null,\n    strictModeChanged: boolean = true,\n  ): void {\n    const checkClashes = !allowDuplicates && new Set<string>();\n    // We create a fake node with the \"ephemeral\" type `FormalParameters`[1]\n    // since we just store an array of parameters. Perhaps someday we can have\n    // something like class FormalParameters extends Array { ... }, which would\n    // also be helpful when traversing this node.\n    //\n    // 1. https://tc39.es/ecma262/#prod-FormalParameters\n    const formalParameters = { type: \"FormalParameters\" } as const;\n    for (const param of node.params) {\n      this.checkLVal(\n        param,\n        formalParameters,\n        BindingFlag.TYPE_VAR,\n        checkClashes,\n        strictModeChanged,\n      );\n    }\n  }\n\n  // Parses a comma-separated list of expressions, and returns them as\n  // an array. `close` is the token type that ends the list, and\n  // `allowEmpty` can be turned on to allow subsequent commas with\n  // nothing in between them to be parsed as `null` (which is needed\n  // for array literals).\n  // https://tc39.es/ecma262/#prod-ElementList\n  parseExprList(\n    this: Parser,\n    close: TokenType,\n    allowEmpty?: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n    nodeForExtra?: Undone<N.Node> | null,\n  ): (N.Expression | null)[] {\n    const elts: (N.Expression | null)[] = [];\n    let first = true;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          if (nodeForExtra) {\n            this.addTrailingCommaExtraToNode(nodeForExtra);\n          }\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(this.parseExprListItem(close, allowEmpty, refExpressionErrors));\n    }\n    return elts;\n  }\n\n  parseExprListItem(\n    this: Parser,\n    close: TokenType,\n    allowEmpty?: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression | null;\n  parseExprListItem(\n    this: Parser,\n    close: TokenType,\n    allowEmpty?: false,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression;\n  parseExprListItem(\n    this: Parser,\n    close: TokenType,\n    allowEmpty?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ):\n    | N.Expression\n    | N.SpreadElement\n    | N.ArgumentPlaceholder\n    | N.VoidPattern\n    | N.AssignmentPattern\n    | null {\n    let elt;\n    if (this.match(tt.comma)) {\n      if (!allowEmpty) {\n        this.raise(Errors.UnexpectedToken, this.state.curPosition(), {\n          unexpected: \",\",\n        });\n      }\n      elt = null;\n    } else if (this.match(tt.ellipsis)) {\n      const spreadNodeStartLoc = this.state.startLoc;\n\n      elt = this.parseParenItem(\n        this.parseSpread(refExpressionErrors),\n        spreadNodeStartLoc,\n      );\n    } else if (this.match(tt.question)) {\n      this.expectPlugin(\"partialApplication\");\n      if (!allowPlaceholder) {\n        this.raise(Errors.UnexpectedArgumentPlaceholder, this.state.startLoc);\n      }\n      const node = this.startNode<N.ArgumentPlaceholder>();\n      this.next();\n      elt = this.finishNode(node, \"ArgumentPlaceholder\");\n    } else {\n      elt = this.parseMaybeAssignAllowInOrVoidPattern(\n        close,\n        refExpressionErrors,\n        this.parseParenItem,\n      );\n    }\n    return elt;\n  }\n\n  // Parse the next token as an identifier. If `liberal` is true (used\n  // when parsing properties), it will also convert keywords into\n  // identifiers.\n  // This shouldn't be used to parse the keywords of meta properties, since they\n  // are not identifiers and cannot contain escape sequences.\n\n  parseIdentifier(liberal?: boolean): N.Identifier {\n    const node = this.startNode<N.Identifier>();\n    const name = this.parseIdentifierName(liberal);\n\n    return this.createIdentifier(node, name);\n  }\n\n  createIdentifier(node: Undone<N.Identifier>, name: string): N.Identifier {\n    node.name = name;\n    node.loc.identifierName = name;\n\n    return this.finishNode(node, \"Identifier\");\n  }\n\n  createIdentifierAt(\n    node: Undone<N.Identifier>,\n    name: string,\n    endLoc: Position,\n  ): N.Identifier {\n    node.name = name;\n    node.loc.identifierName = name;\n\n    return this.finishNodeAt(node, \"Identifier\", endLoc);\n  }\n\n  parseIdentifierName(liberal?: boolean): string {\n    let name: string;\n\n    const { startLoc, type } = this.state;\n\n    if (tokenIsKeywordOrIdentifier(type)) {\n      name = this.state.value;\n    } else {\n      this.unexpected();\n    }\n\n    const tokenIsKeyword = tokenKeywordOrIdentifierIsKeyword(type);\n\n    if (liberal) {\n      // If the current token is not used as a keyword, set its type to \"tt.name\".\n      // This will prevent this.next() from throwing about unexpected escapes.\n      if (tokenIsKeyword) {\n        this.replaceToken(tt.name);\n      }\n    } else {\n      this.checkReservedWord(name!, startLoc, tokenIsKeyword, false);\n    }\n\n    this.next();\n\n    return name!;\n  }\n\n  checkReservedWord(\n    word: string,\n    startLoc: Position,\n    checkKeywords: boolean,\n    isBinding: boolean,\n  ): void {\n    // Every JavaScript reserved word is 10 characters or less.\n    if (word.length > 10) {\n      return;\n    }\n    // Most identifiers are not reservedWord-like, they don't need special\n    // treatments afterward, which very likely ends up throwing errors\n    if (!canBeReservedWord(word)) {\n      return;\n    }\n\n    if (checkKeywords && isKeyword(word)) {\n      this.raise(Errors.UnexpectedKeyword, startLoc, {\n        keyword: word,\n      });\n      return;\n    }\n\n    const reservedTest = !this.state.strict\n      ? isReservedWord\n      : isBinding\n        ? isStrictBindReservedWord\n        : isStrictReservedWord;\n\n    if (reservedTest(word, this.inModule)) {\n      this.raise(Errors.UnexpectedReservedWord, startLoc, {\n        reservedWord: word,\n      });\n      return;\n    } else if (word === \"yield\") {\n      if (this.prodParam.hasYield) {\n        this.raise(Errors.YieldBindingIdentifier, startLoc);\n        return;\n      }\n    } else if (word === \"await\") {\n      if (this.prodParam.hasAwait) {\n        this.raise(Errors.AwaitBindingIdentifier, startLoc);\n        return;\n      }\n\n      if (this.scope.inStaticBlock) {\n        this.raise(Errors.AwaitBindingIdentifierInStaticBlock, startLoc);\n        return;\n      }\n\n      this.expressionScope.recordAsyncArrowParametersError(startLoc);\n    } else if (word === \"arguments\") {\n      if (this.scope.inClassAndNotInNonArrowFunction) {\n        this.raise(Errors.ArgumentsInClass, startLoc);\n        return;\n      }\n    }\n  }\n\n  // Returns whether `await` is allowed or not in this context, and if it is\n  // keeps track of it to determine whether a module uses top-level await.\n  recordAwaitIfAllowed(): boolean {\n    const isAwaitAllowed = this.prodParam.hasAwait;\n\n    if (isAwaitAllowed && !this.scope.inFunction) {\n      this.state.hasTopLevelAwait = true;\n    }\n\n    return isAwaitAllowed;\n  }\n\n  // Parses await expression inside async function.\n\n  parseAwait(this: Parser, startLoc: Position): N.AwaitExpression {\n    const node = this.startNodeAt<N.AwaitExpression>(startLoc);\n\n    this.expressionScope.recordParameterInitializerError(\n      Errors.AwaitExpressionFormalParameter,\n      node,\n    );\n\n    if (this.eat(tt.star)) {\n      this.raise(Errors.ObsoleteAwaitStar, node);\n    }\n\n    if (\n      !this.scope.inFunction &&\n      !(this.optionFlags & OptionFlags.AllowAwaitOutsideFunction)\n    ) {\n      if (this.isAmbiguousPrefixOrIdentifier()) {\n        this.ambiguousScriptDifferentAst = true;\n      } else {\n        this.sawUnambiguousESM = true;\n      }\n    }\n\n    if (!this.state.soloAwait) {\n      node.argument = this.parseMaybeUnary(null, true);\n    }\n\n    return this.finishNode(node, \"AwaitExpression\");\n  }\n\n  isAmbiguousPrefixOrIdentifier(): boolean {\n    if (this.hasPrecedingLineBreak()) return true;\n    const { type } = this.state;\n    return (\n      // All the following expressions are ambiguous:\n      //   await + 0, await - 0, await ( 0 ), await [ 0 ], await / 0 /u, await ``, await of []\n      type === tt.plusMin ||\n      type === tt.parenL ||\n      type === tt.bracketL ||\n      tokenIsTemplate(type) ||\n      (type === tt._of && !this.state.containsEsc) ||\n      // Sometimes the tokenizer generates tt.slash for regexps, and this is\n      // handler by parseExprAtom\n      type === tt.regexp ||\n      type === tt.slash ||\n      // This code could be parsed both as a modulo operator or as an intrinsic:\n      //   await %x(0)\n      (this.hasPlugin(\"v8intrinsic\") && type === tt.modulo)\n    );\n  }\n\n  // Parses yield expression inside generator.\n\n  parseYield(this: Parser, startLoc: Position): N.YieldExpression {\n    const node = this.startNodeAt<N.YieldExpression>(startLoc);\n\n    this.expressionScope.recordParameterInitializerError(\n      Errors.YieldInParameter,\n      node,\n    );\n\n    let delegating = false;\n    let argument: N.Expression | null = null;\n    if (!this.hasPrecedingLineBreak()) {\n      delegating = this.eat(tt.star);\n      switch (this.state.type) {\n        case tt.semi:\n        case tt.eof:\n        case tt.braceR:\n        case tt.parenR:\n        case tt.bracketR:\n        case tt.braceBarR:\n        case tt.colon:\n        case tt.comma:\n          // The above is the complete set of tokens that can\n          // follow an AssignmentExpression, and none of them\n          // can start an AssignmentExpression\n          if (!delegating) break;\n        /* fallthrough */\n        default:\n          argument = this.parseMaybeAssign();\n      }\n    }\n    node.delegate = delegating;\n    node.argument = argument;\n    return this.finishNode(node, \"YieldExpression\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportCall\n  parseImportCall(\n    this: Parser,\n    node: Undone<N.ImportExpression>,\n  ): N.ImportExpression {\n    this.next(); // eat tt.parenL\n    node.source = this.parseMaybeAssignAllowIn();\n    node.options = null;\n    if (this.eat(tt.comma)) {\n      if (!this.match(tt.parenR)) {\n        node.options = this.parseMaybeAssignAllowIn();\n        if (this.eat(tt.comma)) {\n          this.addTrailingCommaExtraToNode(node.options);\n          if (!this.match(tt.parenR)) {\n            // keep consuming arguments, to then throw ImportCallArity\n            // instead of \"expected )\"\n            do {\n              this.parseMaybeAssignAllowIn();\n            } while (this.eat(tt.comma) && !this.match(tt.parenR));\n\n            this.raise(Errors.ImportCallArity, node);\n          }\n        }\n      } else {\n        this.addTrailingCommaExtraToNode(node.source);\n      }\n    }\n    this.expect(tt.parenR);\n    return this.finishNode(node, \"ImportExpression\");\n  }\n\n  // Validates a pipeline (for any of the pipeline Babylon plugins) at the point\n  // of the infix operator `|>`.\n\n  checkPipelineAtInfixOperator(left: N.Expression, leftStartLoc: Position) {\n    // @ts-expect-error Remove this in Babel 8\n    if (this.hasPlugin([\"pipelineOperator\", { proposal: \"smart\" }])) {\n      if (left.type === \"SequenceExpression\") {\n        // Ensure that the pipeline head is not a comma-delimited\n        // sequence expression.\n        this.raise(Errors.PipelineHeadSequenceExpression!, leftStartLoc);\n      }\n    }\n  }\n\n  parseSmartPipelineBodyInStyle(childExpr: N.Expression, startLoc: Position) {\n    if (this.isSimpleReference(childExpr)) {\n      const bodyNode = this.startNodeAt<N.PipelineBareFunction>(startLoc);\n      bodyNode.callee = childExpr;\n      return this.finishNode(bodyNode, \"PipelineBareFunction\");\n    } else {\n      const bodyNode = this.startNodeAt<N.PipelineTopicExpression>(startLoc);\n      this.checkSmartPipeTopicBodyEarlyErrors(startLoc);\n      bodyNode.expression = childExpr;\n      return this.finishNode(bodyNode, \"PipelineTopicExpression\");\n    }\n  }\n\n  isSimpleReference(expression: N.Expression): boolean {\n    switch (expression.type) {\n      case \"MemberExpression\":\n        return (\n          !expression.computed && this.isSimpleReference(expression.object)\n        );\n      case \"Identifier\":\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  // This helper method is to be called immediately\n  // after a topic-style smart-mix pipe body is parsed.\n  // The `startLoc` is the starting position of the pipe body.\n\n  checkSmartPipeTopicBodyEarlyErrors(startLoc: Position): void {\n    // If the following token is invalidly `=>`, then throw a human-friendly error\n    // instead of something like 'Unexpected token, expected \";\"'.\n    // For example, `x => x |> y => #` (assuming `#` is the topic reference)\n    // groups into `x => (x |> y) => #`,\n    // and `(x |> y) => #` is an invalid arrow function.\n    // This is because smart-mix `|>` has tighter precedence than `=>`.\n    if (this.match(tt.arrow)) {\n      throw this.raise(Errors.PipelineBodyNoArrow!, this.state.startLoc);\n    }\n\n    // A topic-style smart-mix pipe body must use the topic reference at least once.\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\n      this.raise(Errors.PipelineTopicUnused!, startLoc);\n    }\n  }\n\n  // Enable topic references from outer contexts within Hack-style pipe bodies.\n  // The function modifies the parser's topic-context state to enable or disable\n  // the use of topic references.\n  // The function then calls a callback, then resets the parser\n  // to the old topic-context state that it had before the function was called.\n\n  withTopicBindingContext<T>(callback: () => T): T {\n    const outerContextTopicState = this.state.topicContext;\n    this.state.topicContext = {\n      // Enable the use of the primary topic reference.\n      maxNumOfResolvableTopics: 1,\n      // Hide the use of any topic references from outer contexts.\n      maxTopicIndex: null,\n    };\n\n    try {\n      return callback();\n    } finally {\n      this.state.topicContext = outerContextTopicState;\n    }\n  }\n\n  // This helper method is used only with the deprecated smart-mix pipe proposal.\n  // Disables topic references from outer contexts within syntax constructs\n  // such as the bodies of iteration statements.\n  // The function modifies the parser's topic-context state to enable or disable\n  // the use of topic references with the smartPipelines plugin. They then run a\n  // callback, then they reset the parser to the old topic-context state that it\n  // had before the function was called.\n\n  withSmartMixTopicForbiddingContext<T>(callback: () => T): T {\n    // TODO(Babel 8): Remove this method\n\n    if (\n      !process.env.BABEL_8_BREAKING &&\n      // @ts-expect-error Babel 7 only\n      this.hasPlugin([\"pipelineOperator\", { proposal: \"smart\" }])\n    ) {\n      // Reset the parser’s topic context only if the smart-mix pipe proposal is active.\n      const outerContextTopicState = this.state.topicContext;\n      this.state.topicContext = {\n        // Disable the use of the primary topic reference.\n        maxNumOfResolvableTopics: 0,\n        // Hide the use of any topic references from outer contexts.\n        maxTopicIndex: null,\n      };\n\n      try {\n        return callback();\n      } finally {\n        this.state.topicContext = outerContextTopicState;\n      }\n    } else {\n      // If the pipe proposal is \"minimal\"(Babel 7), \"fsharp\", or \"hack\",\n      // or if no pipe proposal is active,\n      // then the callback result is returned\n      // without touching any extra parser state.\n      return callback();\n    }\n  }\n\n  withSoloAwaitPermittingContext<T>(callback: () => T): T {\n    const outerContextSoloAwaitState = this.state.soloAwait;\n    this.state.soloAwait = true;\n\n    try {\n      return callback();\n    } finally {\n      this.state.soloAwait = outerContextSoloAwaitState;\n    }\n  }\n\n  allowInAnd<T>(callback: () => T): T {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToSet = ParamKind.PARAM_IN & ~flags;\n    if (prodParamToSet) {\n      this.prodParam.enter(flags | ParamKind.PARAM_IN);\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n    return callback();\n  }\n\n  disallowInAnd<T>(callback: () => T): T {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToClear = ParamKind.PARAM_IN & flags;\n    if (prodParamToClear) {\n      this.prodParam.enter(flags & ~ParamKind.PARAM_IN);\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n    return callback();\n  }\n\n  // Register the use of a topic reference within the current\n  // topic-binding context.\n  registerTopicReference(): void {\n    this.state.topicContext.maxTopicIndex = 0;\n  }\n\n  topicReferenceIsAllowedInCurrentContext(): boolean {\n    return this.state.topicContext.maxNumOfResolvableTopics >= 1;\n  }\n\n  topicReferenceWasUsedInCurrentContext(): boolean {\n    return (\n      this.state.topicContext.maxTopicIndex != null &&\n      this.state.topicContext.maxTopicIndex >= 0\n    );\n  }\n\n  parseFSharpPipelineBody(this: Parser, prec: number): N.Expression {\n    const startLoc = this.state.startLoc;\n\n    this.state.potentialArrowAt = this.state.start;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = true;\n\n    const ret = this.parseExprOp(\n      this.parseMaybeUnaryOrPrivate(),\n      startLoc,\n      prec,\n    );\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    return ret;\n  }\n\n  // https://github.com/tc39/proposal-js-module-blocks\n  parseModuleExpression(this: Parser): N.ModuleExpression {\n    this.expectPlugin(\"moduleBlocks\");\n    const node = this.startNode<N.ModuleExpression>();\n    this.next(); // eat \"module\"\n    if (!this.match(tt.braceL)) {\n      this.unexpected(null, tt.braceL);\n    }\n    // start program node immediately after `{`\n    const program = this.startNodeAt<N.Program>(this.state.endLoc);\n    this.next(); // eat `{`\n\n    const revertScopes = this.initializeScopes(/** inModule */ true);\n    this.enterInitialScopes();\n\n    try {\n      node.body = this.parseProgram(program, tt.braceR, \"module\");\n    } finally {\n      revertScopes();\n    }\n    return this.finishNode<N.ModuleExpression>(node, \"ModuleExpression\");\n  }\n\n  parseVoidPattern(\n    this: Parser,\n    refExpressionErrors: ExpressionErrors | null,\n  ): N.VoidPattern {\n    this.expectPlugin(\"discardBinding\");\n    const node = this.startNode<N.VoidPattern>();\n    if (refExpressionErrors != null) {\n      refExpressionErrors.voidPatternLoc = this.state.startLoc;\n    }\n    this.next();\n    return this.finishNode(node, \"VoidPattern\");\n  }\n\n  parseMaybeAssignAllowInOrVoidPattern(\n    this: Parser,\n    close: TokenType,\n    refExpressionErrors: ExpressionErrors | null | undefined,\n    afterLeftParse?: Function,\n  ) {\n    if (refExpressionErrors != null && this.match(tt._void)) {\n      const nextCode = this.lookaheadCharCode();\n      if (\n        nextCode === charCodes.comma ||\n        nextCode ===\n          (close === tt.bracketR\n            ? charCodes.rightSquareBracket\n            : close === tt.braceR\n              ? charCodes.rightCurlyBrace\n              : charCodes.rightParenthesis) ||\n        nextCode === charCodes.equalsTo\n      ) {\n        // `void = Initializer` is not allowed, here we parse the production as an assignment pattern\n        // so that we can recover from this error\n        return this.parseMaybeDefault(\n          this.state.startLoc,\n          this.parseVoidPattern(refExpressionErrors),\n        );\n      }\n    }\n    return this.parseMaybeAssignAllowIn(refExpressionErrors, afterLeftParse);\n  }\n\n  // Used in Flow plugin\n  parsePropertyNamePrefixOperator(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    prop: Undone<N.ObjectOrClassMember | N.ClassMember>,\n  ): void {}\n}\n", "import type * as N from \"../types.ts\";\nimport {\n  tokenIsIdentifier,\n  tokenIsKeywordOrIdentifier,\n  tokenIsLoop,\n  tokenIsTemplate,\n  tt,\n  type TokenType,\n  getExportedToken,\n} from \"../tokenizer/types.ts\";\nimport ExpressionParser from \"./expression.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport { isIdentifierChar, isIdentifierStart } from \"../util/identifier.ts\";\nimport * as charCodes from \"charcodes\";\nimport {\n  ScopeFlag,\n  ClassElementType,\n  BindingFlag,\n} from \"../util/scopeflags.ts\";\nimport { ExpressionErrors } from \"./util.ts\";\nimport { ParamKind, functionFlags } from \"../util/production-parameter.ts\";\nimport {\n  newExpressionScope,\n  newParameterDeclarationScope,\n} from \"../util/expression-scope.ts\";\nimport { OptionFlags, type SourceType } from \"../options.ts\";\nimport { Token } from \"../tokenizer/index.ts\";\nimport type { Position } from \"../util/location.ts\";\nimport { createPositionWithColumnOffset } from \"../util/location.ts\";\nimport type { Undone } from \"./node.ts\";\nimport type Parser from \"./index.ts\";\nimport { ParseBindingListFlags } from \"./lval.ts\";\nimport { LoopLabelKind } from \"../tokenizer/state.ts\";\n\nconst loopLabel = { kind: LoopLabelKind.Loop } as const,\n  switchLabel = { kind: LoopLabelKind.Switch } as const;\n\nexport const enum ParseFunctionFlag {\n  Expression = 0b0000,\n  Declaration = 0b0001,\n  HangingDeclaration = 0b0010,\n  NullableId = 0b0100,\n  Async = 0b1000,\n}\n\nexport const enum ParseStatementFlag {\n  StatementOnly = 0b0000,\n  AllowImportExport = 0b0001,\n  AllowDeclaration = 0b0010,\n  AllowFunctionDeclaration = 0b0100,\n  AllowLabeledFunction = 0b1000,\n}\n\nconst loneSurrogate = /[\\uD800-\\uDFFF]/u;\n\nconst keywordRelationalOperator = /in(?:stanceof)?/y;\n\n/**\n * Convert tokens for backward Babel 7 compat.\n * tt.privateName => tt.hash + tt.name\n * tt.templateTail => tt.backquote/tt.braceR + tt.template + tt.backquote\n * tt.templateNonTail => tt.backquote/tt.braceR + tt.template + tt.dollarBraceL\n * For performance reasons this routine mutates `tokens`, it is okay\n * here since we execute `parseTopLevel` once for every file.\n */\nfunction babel7CompatTokens(\n  tokens: (Token | N.Comment)[],\n  input: string,\n  startIndex: number,\n) {\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i];\n    const { type } = token;\n    if (typeof type === \"number\") {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (type === tt.privateName) {\n          const { loc, start, value, end } = token;\n          const hashEndPos = start + 1;\n          const hashEndLoc = createPositionWithColumnOffset(loc.start, 1);\n          tokens.splice(\n            i,\n            1,\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.hash),\n              value: \"#\",\n              start: start,\n              end: hashEndPos,\n              startLoc: loc.start,\n              endLoc: hashEndLoc,\n            }),\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.name),\n              value: value,\n              start: hashEndPos,\n              end: end,\n              startLoc: hashEndLoc,\n              endLoc: loc.end,\n            }),\n          );\n          i++;\n          continue;\n        }\n\n        if (tokenIsTemplate(type)) {\n          const { loc, start, value, end } = token;\n          const backquoteEnd = start + 1;\n          const backquoteEndLoc = createPositionWithColumnOffset(loc.start, 1);\n          let startToken;\n          if (input.charCodeAt(start - startIndex) === charCodes.graveAccent) {\n            startToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.backQuote),\n              value: \"`\",\n              start: start,\n              end: backquoteEnd,\n              startLoc: loc.start,\n              endLoc: backquoteEndLoc,\n            });\n          } else {\n            startToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.braceR),\n              value: \"}\",\n              start: start,\n              end: backquoteEnd,\n              startLoc: loc.start,\n              endLoc: backquoteEndLoc,\n            });\n          }\n          let templateValue,\n            templateElementEnd,\n            templateElementEndLoc,\n            endToken;\n          if (type === tt.templateTail) {\n            // ends with '`'\n            templateElementEnd = end - 1;\n            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -1);\n            templateValue = value === null ? null : value.slice(1, -1);\n            endToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.backQuote),\n              value: \"`\",\n              start: templateElementEnd,\n              end: end,\n              startLoc: templateElementEndLoc,\n              endLoc: loc.end,\n            });\n          } else {\n            // ends with `${`\n            templateElementEnd = end - 2;\n            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -2);\n            templateValue = value === null ? null : value.slice(1, -2);\n            endToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.dollarBraceL),\n              value: \"${\",\n              start: templateElementEnd,\n              end: end,\n              startLoc: templateElementEndLoc,\n              endLoc: loc.end,\n            });\n          }\n          tokens.splice(\n            i,\n            1,\n            startToken,\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.template),\n              value: templateValue,\n              start: backquoteEnd,\n              end: templateElementEnd,\n              startLoc: backquoteEndLoc,\n              endLoc: templateElementEndLoc,\n            }),\n            endToken,\n          );\n          i += 2;\n          continue;\n        }\n      }\n      // @ts-expect-error: we manipulate `token` for performance reasons\n      token.type = getExportedToken(type);\n    }\n  }\n  return tokens;\n}\nexport default abstract class StatementParser extends ExpressionParser {\n  // ### Statement parsing\n\n  // Parse a program. Initializes the parser, reads any number of\n  // statements, and wraps them in a Program node.  Optionally takes a\n  // `program` argument.  If present, the statements will be appended\n  // to its body instead of creating a new node.\n\n  parseTopLevel(\n    this: Parser,\n    file: Undone<N.File>,\n    program: Undone<N.Program>,\n  ): N.File {\n    file.program = this.parseProgram(\n      program,\n      tt.eof,\n      this.options.sourceType === \"module\" ? \"module\" : \"script\",\n    );\n    file.comments = this.comments;\n\n    if (this.optionFlags & OptionFlags.Tokens) {\n      file.tokens = babel7CompatTokens(\n        this.tokens,\n        this.input,\n        this.startIndex,\n      );\n    }\n\n    return this.finishNode(file, \"File\");\n  }\n\n  parseProgram(\n    this: Parser,\n    program: Undone<N.Program>,\n    end: TokenType,\n    sourceType: SourceType,\n  ): N.Program {\n    program.sourceType = sourceType;\n    program.interpreter = this.parseInterpreterDirective();\n    this.parseBlockBody(program, true, true, end);\n    if (this.inModule) {\n      if (\n        !(this.optionFlags & OptionFlags.AllowUndeclaredExports) &&\n        this.scope.undefinedExports.size > 0\n      ) {\n        for (const [localName, at] of Array.from(this.scope.undefinedExports)) {\n          this.raise(Errors.ModuleExportUndefined, at, { localName });\n        }\n      }\n      this.addExtra(program, \"topLevelAwait\", this.state.hasTopLevelAwait);\n    }\n    let finishedProgram: N.Program;\n    if (end === tt.eof) {\n      // finish at eof for top level program\n      finishedProgram = this.finishNode(program, \"Program\");\n    } else {\n      // finish immediately before the end token\n      finishedProgram = this.finishNodeAt(\n        program,\n        \"Program\",\n        createPositionWithColumnOffset(this.state.startLoc, -1),\n      );\n    }\n    return finishedProgram;\n  }\n\n  /**\n   * cast a Statement to a Directive. This method mutates input statement.\n   */\n  stmtToDirective(stmt: N.ExpressionStatement): N.Directive {\n    const directive = this.castNodeTo(stmt, \"Directive\");\n\n    const directiveLiteral = this.castNodeTo(\n      stmt.expression,\n      \"DirectiveLiteral\",\n    );\n    const expressionValue = directiveLiteral.value;\n    const raw = this.input.slice(\n      this.offsetToSourcePos(directiveLiteral.start),\n      this.offsetToSourcePos(directiveLiteral.end),\n    );\n    const val = (directiveLiteral.value = raw.slice(1, -1)); // remove quotes\n\n    this.addExtra(directiveLiteral, \"raw\", raw);\n    this.addExtra(directiveLiteral, \"rawValue\", val);\n    this.addExtra(directiveLiteral, \"expressionValue\", expressionValue);\n\n    directive.value = directiveLiteral;\n    // @ts-expect-error delete non-optional properties\n    delete stmt.expression;\n\n    return directive;\n  }\n\n  parseInterpreterDirective(): N.InterpreterDirective | null {\n    if (!this.match(tt.interpreterDirective)) {\n      return null;\n    }\n\n    const node = this.startNode<N.InterpreterDirective>();\n    node.value = this.state.value;\n    this.next();\n    return this.finishNode(node, \"InterpreterDirective\");\n  }\n\n  isLet(): boolean {\n    if (!this.isContextual(tt._let)) {\n      return false;\n    }\n    return this.hasFollowingBindingAtom();\n  }\n\n  isUsing(): boolean {\n    if (!this.isContextual(tt._using)) {\n      return false;\n    }\n    return this.nextTokenIsIdentifierOnSameLine();\n  }\n\n  isForUsing(): boolean {\n    if (!this.isContextual(tt._using)) {\n      return false;\n    }\n    const next = this.nextTokenInLineStart();\n    const nextCh = this.codePointAtPos(next);\n    if (this.isUnparsedContextual(next, \"of\")) {\n      const nextCharAfterOf = this.lookaheadCharCodeSince(next + 2);\n      // `for( using of` must start either a for-lhs-of statement\n      // or a for lexical declaration\n      if (\n        nextCharAfterOf !== charCodes.equalsTo &&\n        nextCharAfterOf !== charCodes.colon &&\n        // recover from `for(using of;...);`\n        nextCharAfterOf !== charCodes.semicolon\n      ) {\n        return false;\n      }\n    }\n    if (\n      this.chStartsBindingIdentifier(nextCh, next) ||\n      this.isUnparsedContextual(next, \"void\")\n    ) {\n      return true;\n    }\n    return false;\n  }\n\n  nextTokenIsIdentifierOnSameLine(): boolean {\n    const next = this.nextTokenInLineStart();\n    const nextCh = this.codePointAtPos(next);\n    return this.chStartsBindingIdentifier(nextCh, next);\n  }\n\n  isAwaitUsing(): boolean {\n    if (!this.isContextual(tt._await)) {\n      return false;\n    }\n    let next = this.nextTokenInLineStart();\n    if (this.isUnparsedContextual(next, \"using\")) {\n      next = this.nextTokenInLineStartSince(next + 5);\n      const nextCh = this.codePointAtPos(next);\n      if (this.chStartsBindingIdentifier(nextCh, next)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  chStartsBindingIdentifier(ch: number, pos: number) {\n    if (isIdentifierStart(ch)) {\n      keywordRelationalOperator.lastIndex = pos;\n      if (keywordRelationalOperator.test(this.input)) {\n        // We have seen `in` or `instanceof` so far, now check if the identifier\n        // ends here\n        const endCh = this.codePointAtPos(keywordRelationalOperator.lastIndex);\n        if (!isIdentifierChar(endCh) && endCh !== charCodes.backslash) {\n          return false;\n        }\n      }\n      return true;\n    } else if (ch === charCodes.backslash) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  chStartsBindingPattern(ch: number) {\n    return (\n      ch === charCodes.leftSquareBracket || ch === charCodes.leftCurlyBrace\n    );\n  }\n\n  /**\n   * Assuming we have seen a contextual `let` and declaration is allowed, check if it\n   * starts a variable declaration so that it should be interpreted as a keyword.\n   */\n  hasFollowingBindingAtom(): boolean {\n    const next = this.nextTokenStart();\n    const nextCh = this.codePointAtPos(next);\n    return (\n      this.chStartsBindingPattern(nextCh) ||\n      this.chStartsBindingIdentifier(nextCh, next)\n    );\n  }\n\n  /**\n   * Assuming we have seen a contextual `using` and declaration is allowed, check if it\n   * starts a variable declaration in the same line so that it should be interpreted as\n   * a keyword.\n   */\n  hasInLineFollowingBindingIdentifierOrBrace(): boolean {\n    const next = this.nextTokenInLineStart();\n    const nextCh = this.codePointAtPos(next);\n    return (\n      nextCh === charCodes.leftCurlyBrace ||\n      this.chStartsBindingIdentifier(nextCh, next)\n    );\n  }\n\n  allowsUsing(): boolean {\n    return (\n      (this.scope.inModule || !this.scope.inTopLevel) &&\n      !this.scope.inBareCaseStatement\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-ModuleItem\n  parseModuleItem(this: Parser) {\n    return this.parseStatementLike(\n      ParseStatementFlag.AllowImportExport |\n        ParseStatementFlag.AllowDeclaration |\n        ParseStatementFlag.AllowFunctionDeclaration |\n        // This function is actually also used to parse StatementItems,\n        // which with Annex B enabled allows labeled functions.\n        ParseStatementFlag.AllowLabeledFunction,\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-StatementListItem\n  parseStatementListItem(this: Parser) {\n    return this.parseStatementLike(\n      ParseStatementFlag.AllowDeclaration |\n        ParseStatementFlag.AllowFunctionDeclaration |\n        (!this.options.annexB || this.state.strict\n          ? 0\n          : ParseStatementFlag.AllowLabeledFunction),\n    );\n  }\n\n  parseStatementOrSloppyAnnexBFunctionDeclaration(\n    this: Parser,\n    allowLabeledFunction: boolean = false,\n  ) {\n    let flags: ParseStatementFlag = ParseStatementFlag.StatementOnly;\n    if (this.options.annexB && !this.state.strict) {\n      flags |= ParseStatementFlag.AllowFunctionDeclaration;\n      if (allowLabeledFunction) {\n        flags |= ParseStatementFlag.AllowLabeledFunction;\n      }\n    }\n    return this.parseStatementLike(flags);\n  }\n\n  // Parse a single statement.\n  //\n  // If expecting a statement and finding a slash operator, parse a\n  // regular expression literal. This is to handle cases like\n  // `if (foo) /blah/.exec(foo)`, where looking at the previous token\n  // does not help.\n  // https://tc39.es/ecma262/#prod-Statement\n  parseStatement(this: Parser) {\n    return this.parseStatementLike(ParseStatementFlag.StatementOnly);\n  }\n\n  // ImportDeclaration and ExportDeclaration are also handled here so we can throw recoverable errors\n  // when they are not at the top level\n  parseStatementLike(\n    this: Parser,\n    flags: ParseStatementFlag,\n  ):\n    | N.Statement\n    | N.Declaration\n    | N.ImportDeclaration\n    | N.ExportDefaultDeclaration\n    | N.ExportNamedDeclaration\n    | N.ExportAllDeclaration {\n    let decorators: N.Decorator[] | null = null;\n\n    if (this.match(tt.at)) {\n      decorators = this.parseDecorators(true);\n    }\n    return this.parseStatementContent(flags, decorators);\n  }\n\n  parseStatementContent(\n    this: Parser,\n    flags: ParseStatementFlag,\n    decorators?: N.Decorator[] | null,\n  ): N.Statement {\n    const startType = this.state.type;\n    const node = this.startNode();\n    const allowDeclaration = !!(flags & ParseStatementFlag.AllowDeclaration);\n    const allowFunctionDeclaration = !!(\n      flags & ParseStatementFlag.AllowFunctionDeclaration\n    );\n    const topLevel = flags & ParseStatementFlag.AllowImportExport;\n\n    // Most types of statements are recognized by the keyword they\n    // start with. Many are trivial to parse, some require a bit of\n    // complexity.\n\n    switch (startType) {\n      case tt._break:\n        return this.parseBreakContinueStatement(node, /* isBreak */ true);\n      case tt._continue:\n        return this.parseBreakContinueStatement(node, /* isBreak */ false);\n      case tt._debugger:\n        return this.parseDebuggerStatement(node as Undone<N.DebuggerStatement>);\n      case tt._do:\n        return this.parseDoWhileStatement(node as Undone<N.DoWhileStatement>);\n      case tt._for:\n        return this.parseForStatement(node as Undone<N.ForStatement>);\n      case tt._function:\n        if (this.lookaheadCharCode() === charCodes.dot) break;\n        if (!allowFunctionDeclaration) {\n          this.raise(\n            this.state.strict\n              ? Errors.StrictFunction\n              : this.options.annexB\n                ? Errors.SloppyFunctionAnnexB\n                : Errors.SloppyFunction,\n            this.state.startLoc,\n          );\n        }\n        return this.parseFunctionStatement(\n          node as Undone<N.FunctionDeclaration>,\n          false,\n          !allowDeclaration && allowFunctionDeclaration,\n        );\n      case tt._class:\n        if (!allowDeclaration) this.unexpected();\n        return this.parseClass(\n          this.maybeTakeDecorators(\n            decorators,\n            node as Undone<N.ClassDeclaration>,\n          ),\n          true,\n        );\n\n      case tt._if:\n        return this.parseIfStatement(node as Undone<N.IfStatement>);\n      case tt._return:\n        return this.parseReturnStatement(node as Undone<N.ReturnStatement>);\n      case tt._switch:\n        return this.parseSwitchStatement(node as Undone<N.SwitchStatement>);\n      case tt._throw:\n        return this.parseThrowStatement(node as Undone<N.ThrowStatement>);\n      case tt._try:\n        return this.parseTryStatement(node as Undone<N.TryStatement>);\n\n      case tt._await:\n        // [+Await] await [no LineTerminator here] using [no LineTerminator here] BindingList[+Using]\n        if (this.isAwaitUsing()) {\n          if (!this.allowsUsing()) {\n            this.raise(Errors.UnexpectedUsingDeclaration, node);\n          } else if (!allowDeclaration) {\n            this.raise(Errors.UnexpectedLexicalDeclaration, node);\n          } else if (!this.recordAwaitIfAllowed()) {\n            this.raise(Errors.AwaitUsingNotInAsyncContext, node);\n          }\n          this.next(); // eat 'await'\n          return this.parseVarStatement(\n            node as Undone<N.VariableDeclaration>,\n            \"await using\",\n          );\n        }\n        break;\n      case tt._using:\n        // using [no LineTerminator here] BindingList[+Using]\n        if (\n          this.state.containsEsc ||\n          !this.hasInLineFollowingBindingIdentifierOrBrace()\n        ) {\n          break;\n        }\n        if (!this.allowsUsing()) {\n          this.raise(Errors.UnexpectedUsingDeclaration, this.state.startLoc);\n        } else if (!allowDeclaration) {\n          this.raise(Errors.UnexpectedLexicalDeclaration, this.state.startLoc);\n        }\n        return this.parseVarStatement(\n          node as Undone<N.VariableDeclaration>,\n          \"using\",\n        );\n      case tt._let: {\n        if (this.state.containsEsc) {\n          break;\n        }\n        // `let [` is an explicit negative lookahead for\n        // ExpressionStatement, so special-case it first.\n        const next = this.nextTokenStart();\n        const nextCh = this.codePointAtPos(next);\n        if (nextCh !== charCodes.leftSquareBracket) {\n          if (!allowDeclaration && this.hasFollowingLineBreak()) break;\n          if (\n            !this.chStartsBindingIdentifier(nextCh, next) &&\n            nextCh !== charCodes.leftCurlyBrace\n          ) {\n            break;\n          }\n        }\n      }\n      // fall through\n      case tt._const: {\n        if (!allowDeclaration) {\n          this.raise(Errors.UnexpectedLexicalDeclaration, this.state.startLoc);\n        }\n      }\n      // fall through\n      case tt._var: {\n        const kind = this.state.value;\n        return this.parseVarStatement(\n          node as Undone<N.VariableDeclaration>,\n          kind,\n        );\n      }\n      case tt._while:\n        return this.parseWhileStatement(node as Undone<N.WhileStatement>);\n      case tt._with:\n        return this.parseWithStatement(node as Undone<N.WithStatement>);\n      case tt.braceL:\n        return this.parseBlock();\n      case tt.semi:\n        return this.parseEmptyStatement(node as Undone<N.EmptyStatement>);\n      case tt._import: {\n        const nextTokenCharCode = this.lookaheadCharCode();\n        if (\n          nextTokenCharCode === charCodes.leftParenthesis || // import()\n          nextTokenCharCode === charCodes.dot // import.meta\n        ) {\n          break;\n        }\n      }\n      // fall through\n      case tt._export: {\n        if (\n          !(this.optionFlags & OptionFlags.AllowImportExportEverywhere) &&\n          !topLevel\n        ) {\n          this.raise(Errors.UnexpectedImportExport, this.state.startLoc);\n        }\n\n        this.next(); // eat `import`/`export`\n\n        let result;\n        if (startType === tt._import) {\n          result = this.parseImport(node as Undone<N.ImportDeclaration>);\n        } else {\n          result = this.parseExport(\n            node as Undone<\n              | N.ExportAllDeclaration\n              | N.ExportDefaultDeclaration\n              | N.ExportNamedDeclaration\n            >,\n            decorators,\n          );\n        }\n\n        this.assertModuleNodeAllowed(result);\n\n        return result;\n      }\n\n      default: {\n        if (this.isAsyncFunction()) {\n          if (!allowDeclaration) {\n            this.raise(\n              Errors.AsyncFunctionInSingleStatementContext,\n              this.state.startLoc,\n            );\n          }\n          this.next(); // eat 'async'\n          return this.parseFunctionStatement(\n            node as Undone<N.FunctionDeclaration>,\n            true,\n            !allowDeclaration && allowFunctionDeclaration,\n          );\n        }\n      }\n    }\n\n    // If the statement does not start with a statement keyword or a\n    // brace, it's an ExpressionStatement or LabeledStatement. We\n    // simply start parsing an expression, and afterwards, if the\n    // next token is a colon and the expression was a simple\n    // Identifier node, we switch to interpreting it as a label.\n    const maybeName = this.state.value;\n    const expr = this.parseExpression();\n\n    if (\n      tokenIsIdentifier(startType) &&\n      expr.type === \"Identifier\" &&\n      this.eat(tt.colon)\n    ) {\n      return this.parseLabeledStatement(\n        node as Undone<N.LabeledStatement>,\n        maybeName,\n        expr,\n        flags,\n      );\n    } else {\n      return this.parseExpressionStatement(\n        node as Undone<N.ExpressionStatement>,\n        expr,\n        decorators,\n      );\n    }\n  }\n\n  assertModuleNodeAllowed(node: N.Node): void {\n    if (\n      !(this.optionFlags & OptionFlags.AllowImportExportEverywhere) &&\n      !this.inModule\n    ) {\n      this.raise(Errors.ImportOutsideModule, node);\n    }\n  }\n\n  decoratorsEnabledBeforeExport(): boolean {\n    if (this.hasPlugin(\"decorators-legacy\")) return true;\n    return (\n      this.hasPlugin(\"decorators\") &&\n      this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") !== false\n    );\n  }\n\n  // Attach the decorators to the given class.\n  // NOTE: This method changes the .start location of the class, and thus\n  // can affect comment attachment. Calling it before or after finalizing\n  // the class node (and thus finalizing its comments) changes how comments\n  // before the `class` keyword or before the final .start location of the\n  // class are attached.\n  maybeTakeDecorators<T extends Undone<N.Class>>(\n    maybeDecorators: N.Decorator[] | null | undefined,\n    classNode: T,\n    exportNode?: Undone<N.ExportDefaultDeclaration | N.ExportNamedDeclaration>,\n  ): T {\n    if (maybeDecorators) {\n      if (classNode.decorators?.length) {\n        // Note: decorators attachment is only attempred multiple times\n        // when the class is part of an export declaration.\n        if (\n          typeof this.getPluginOption(\n            \"decorators\",\n            \"decoratorsBeforeExport\",\n          ) !== \"boolean\"\n        ) {\n          // If `decoratorsBeforeExport` was set to `true` or `false`, we\n          // already threw an error about decorators not being in a valid\n          // position.\n          this.raise(\n            Errors.DecoratorsBeforeAfterExport,\n            classNode.decorators[0],\n          );\n        }\n        classNode.decorators.unshift(...maybeDecorators);\n      } else {\n        classNode.decorators = maybeDecorators;\n      }\n      this.resetStartLocationFromNode(classNode, maybeDecorators[0]);\n      if (exportNode) this.resetStartLocationFromNode(exportNode, classNode);\n    }\n    return classNode;\n  }\n\n  canHaveLeadingDecorator(): boolean {\n    return this.match(tt._class);\n  }\n\n  parseDecorators(this: Parser, allowExport?: boolean): N.Decorator[] {\n    const decorators = [];\n    do {\n      decorators.push(this.parseDecorator());\n    } while (this.match(tt.at));\n\n    if (this.match(tt._export)) {\n      if (!allowExport) {\n        this.unexpected();\n      }\n\n      if (!this.decoratorsEnabledBeforeExport()) {\n        this.raise(Errors.DecoratorExportClass, this.state.startLoc);\n      }\n    } else if (!this.canHaveLeadingDecorator()) {\n      throw this.raise(Errors.UnexpectedLeadingDecorator, this.state.startLoc);\n    }\n\n    return decorators;\n  }\n\n  parseDecorator(this: Parser): N.Decorator {\n    this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n\n    const node = this.startNode<N.Decorator>();\n    this.next();\n\n    if (this.hasPlugin(\"decorators\")) {\n      const startLoc = this.state.startLoc;\n      let expr: N.Expression;\n\n      if (this.match(tt.parenL)) {\n        const startLoc = this.state.startLoc;\n        this.next(); // eat '('\n        expr = this.parseExpression();\n        this.expect(tt.parenR);\n        expr = this.wrapParenthesis(startLoc, expr);\n\n        const paramsStartLoc = this.state.startLoc;\n        node.expression = this.parseMaybeDecoratorArguments(expr, startLoc);\n        if (\n          this.getPluginOption(\"decorators\", \"allowCallParenthesized\") ===\n            false &&\n          node.expression !== expr\n        ) {\n          this.raise(\n            Errors.DecoratorArgumentsOutsideParentheses,\n            paramsStartLoc,\n          );\n        }\n      } else {\n        expr = this.parseIdentifier(false);\n\n        while (this.eat(tt.dot)) {\n          const node = this.startNodeAt<N.MemberExpression>(startLoc);\n          node.object = expr;\n          if (this.match(tt.privateName)) {\n            this.classScope.usePrivateName(\n              this.state.value,\n              this.state.startLoc,\n            );\n            node.property = this.parsePrivateName();\n          } else {\n            node.property = this.parseIdentifier(true);\n          }\n          node.computed = false;\n          expr = this.finishNode(node, \"MemberExpression\");\n        }\n\n        node.expression = this.parseMaybeDecoratorArguments(expr, startLoc);\n      }\n    } else {\n      node.expression = this.parseExprSubscripts();\n    }\n    return this.finishNode(node, \"Decorator\");\n  }\n\n  parseMaybeDecoratorArguments(\n    this: Parser,\n    expr: N.Expression,\n    startLoc: Position,\n  ): N.Expression {\n    if (this.eat(tt.parenL)) {\n      const node = this.startNodeAt<N.CallExpression>(startLoc);\n      node.callee = expr;\n      node.arguments = this.parseCallExpressionArguments();\n      this.toReferencedList(node.arguments);\n      return this.finishNode(node, \"CallExpression\");\n    }\n\n    return expr;\n  }\n\n  parseBreakContinueStatement(\n    node: Undone<N.Node>,\n    isBreak: true,\n  ): N.BreakStatement;\n  parseBreakContinueStatement(\n    node: Undone<N.Node>,\n    isBreak: false,\n  ): N.ContinueStatement;\n  parseBreakContinueStatement(\n    node: Undone<N.BreakStatement | N.ContinueStatement>,\n    isBreak: boolean,\n  ): N.BreakStatement | N.ContinueStatement {\n    this.next();\n\n    if (this.isLineTerminator()) {\n      node.label = null;\n    } else {\n      node.label = this.parseIdentifier();\n      this.semicolon();\n    }\n\n    this.verifyBreakContinue(node, isBreak);\n\n    return this.finishNode(\n      node,\n      isBreak ? \"BreakStatement\" : \"ContinueStatement\",\n    );\n  }\n\n  verifyBreakContinue(\n    node: Undone<N.BreakStatement | N.ContinueStatement>,\n    isBreak: boolean,\n  ) {\n    let i;\n    for (i = 0; i < this.state.labels.length; ++i) {\n      const lab = this.state.labels[i];\n      if (node.label == null || lab.name === node.label.name) {\n        if (lab.kind != null && (isBreak || lab.kind === LoopLabelKind.Loop)) {\n          break;\n        }\n        if (node.label && isBreak) break;\n      }\n    }\n    if (i === this.state.labels.length) {\n      const type = isBreak ? \"BreakStatement\" : \"ContinueStatement\";\n      this.raise(Errors.IllegalBreakContinue, node, { type });\n    }\n  }\n\n  parseDebuggerStatement(\n    node: Undone<N.DebuggerStatement>,\n  ): N.DebuggerStatement {\n    this.next();\n    this.semicolon();\n    return this.finishNode(node, \"DebuggerStatement\");\n  }\n\n  parseHeaderExpression(this: Parser): N.Expression {\n    this.expect(tt.parenL);\n    const val = this.parseExpression();\n    this.expect(tt.parenR);\n    return val;\n  }\n\n  // https://tc39.es/ecma262/#prod-DoWhileStatement\n  parseDoWhileStatement(\n    this: Parser,\n    node: Undone<N.DoWhileStatement>,\n  ): N.DoWhileStatement {\n    this.next();\n    this.state.labels.push(loopLabel);\n\n    // Parse the loop body's body.\n    node.body =\n      // For the smartPipelines plugin: Disable topic references from outer\n      // contexts within the loop body. They are permitted in test expressions,\n      // outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the loop body's body.\n        this.parseStatement(),\n      );\n\n    this.state.labels.pop();\n\n    this.expect(tt._while);\n    node.test = this.parseHeaderExpression();\n    this.eat(tt.semi);\n    return this.finishNode(node, \"DoWhileStatement\");\n  }\n\n  // Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n  // loop is non-trivial. Basically, we have to parse the init `var`\n  // statement or expression, disallowing the `in` operator (see\n  // the second parameter to `parseExpression`), and then check\n  // whether the next token is `in` or `of`. When there is no init\n  // part (semicolon immediately after the opening parenthesis), it\n  // is a regular `for` loop.\n\n  parseForStatement(\n    this: Parser,\n    node: Undone<N.ForStatement | N.ForInOf>,\n  ): N.ForLike {\n    this.next();\n    this.state.labels.push(loopLabel);\n\n    let awaitAt = null;\n\n    if (this.isContextual(tt._await) && this.recordAwaitIfAllowed()) {\n      awaitAt = this.state.startLoc;\n      this.next();\n    }\n    this.scope.enter(ScopeFlag.OTHER);\n    this.expect(tt.parenL);\n\n    if (this.match(tt.semi)) {\n      if (awaitAt !== null) {\n        this.unexpected(awaitAt);\n      }\n      return this.parseFor(node as Undone<N.ForStatement>, null);\n    }\n\n    const startsWithLet = this.isContextual(tt._let);\n    {\n      const startsWithAwaitUsing = this.isAwaitUsing();\n      const starsWithUsingDeclaration =\n        startsWithAwaitUsing || this.isForUsing();\n      const isLetOrUsing =\n        (startsWithLet && this.hasFollowingBindingAtom()) ||\n        starsWithUsingDeclaration;\n\n      if (this.match(tt._var) || this.match(tt._const) || isLetOrUsing) {\n        const initNode = this.startNode<N.VariableDeclaration>();\n        let kind;\n        if (startsWithAwaitUsing) {\n          kind = \"await using\";\n          if (!this.recordAwaitIfAllowed()) {\n            this.raise(Errors.AwaitUsingNotInAsyncContext, this.state.startLoc);\n          }\n          this.next(); // eat 'await'\n        } else {\n          kind = this.state.value;\n        }\n        this.next();\n        this.parseVar(initNode, true, kind);\n        const init = this.finishNode(initNode, \"VariableDeclaration\");\n\n        const isForIn = this.match(tt._in);\n        if (isForIn && starsWithUsingDeclaration) {\n          this.raise(Errors.ForInUsing, init);\n        }\n        if (\n          (isForIn || this.isContextual(tt._of)) &&\n          init.declarations.length === 1\n        ) {\n          return this.parseForIn(node as Undone<N.ForInOf>, init, awaitAt);\n        }\n        if (awaitAt !== null) {\n          this.unexpected(awaitAt);\n        }\n        return this.parseFor(node as Undone<N.ForStatement>, init);\n      }\n    }\n\n    // Check whether the first token is possibly a contextual keyword, so that\n    // we can forbid `for (async of` if this turns out to be a for-of loop.\n    const startsWithAsync = this.isContextual(tt._async);\n\n    const refExpressionErrors = new ExpressionErrors();\n    const init = this.parseExpression(true, refExpressionErrors);\n    const isForOf = this.isContextual(tt._of);\n    if (isForOf) {\n      // Check for leading tokens that are forbidden in for-of loops:\n      if (startsWithLet) {\n        this.raise(Errors.ForOfLet, init);\n      }\n\n      if (\n        // `for await (async of []);` is allowed.\n        awaitAt === null &&\n        startsWithAsync &&\n        init.type === \"Identifier\"\n      ) {\n        // This catches the case where the `async` in `for (async of` was\n        // parsed as an identifier. If it was parsed as the start of an async\n        // arrow function (e.g. `for (async of => {} of []);`), the LVal check\n        // further down will raise a more appropriate error.\n        this.raise(Errors.ForOfAsync, init);\n      }\n    }\n    if (isForOf || this.match(tt._in)) {\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.toAssignable(init, /* isLHS */ true);\n      const type = isForOf ? \"ForOfStatement\" : \"ForInStatement\";\n      this.checkLVal(init, { type });\n      return this.parseForIn(\n        node as Undone<N.ForInStatement | N.ForOfStatement>,\n        // @ts-expect-error init has been transformed to an assignable\n        init,\n        awaitAt,\n      );\n    } else {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n    if (awaitAt !== null) {\n      this.unexpected(awaitAt);\n    }\n    return this.parseFor(node as Undone<N.ForStatement>, init);\n  }\n\n  // https://tc39.es/ecma262/#prod-HoistableDeclaration\n  parseFunctionStatement(\n    this: Parser,\n    node: Undone<N.FunctionDeclaration>,\n    isAsync: boolean,\n    isHangingDeclaration: boolean,\n  ): N.FunctionDeclaration {\n    this.next(); // eat 'function'\n    return this.parseFunction(\n      node,\n      ParseFunctionFlag.Declaration |\n        (isHangingDeclaration ? ParseFunctionFlag.HangingDeclaration : 0) |\n        (isAsync ? ParseFunctionFlag.Async : 0),\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-IfStatement\n  parseIfStatement(this: Parser, node: Undone<N.IfStatement>) {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    // Annex B.3.3\n    // https://tc39.es/ecma262/#sec-functiondeclarations-in-ifstatement-statement-clauses\n    node.consequent = this.parseStatementOrSloppyAnnexBFunctionDeclaration();\n    node.alternate = this.eat(tt._else)\n      ? this.parseStatementOrSloppyAnnexBFunctionDeclaration()\n      : null;\n    return this.finishNode(node, \"IfStatement\");\n  }\n\n  parseReturnStatement(this: Parser, node: Undone<N.ReturnStatement>) {\n    if (!this.prodParam.hasReturn) {\n      this.raise(Errors.IllegalReturn, this.state.startLoc);\n    }\n\n    this.next();\n\n    // In `return` (and `break`/`continue`), the keywords with\n    // optional arguments, we eagerly look for a semicolon or the\n    // possibility to insert one.\n\n    if (this.isLineTerminator()) {\n      node.argument = null;\n    } else {\n      node.argument = this.parseExpression();\n      this.semicolon();\n    }\n\n    return this.finishNode(node, \"ReturnStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-SwitchStatement\n  parseSwitchStatement(this: Parser, node: Undone<N.SwitchStatement>) {\n    this.next();\n    node.discriminant = this.parseHeaderExpression();\n    const cases: N.SwitchStatement[\"cases\"] = (node.cases = []);\n    this.expect(tt.braceL);\n    this.state.labels.push(switchLabel);\n    this.scope.enter(ScopeFlag.SWITCH);\n\n    // Statements under must be grouped (by label) in SwitchCase\n    // nodes. `cur` is used to keep the node that we are currently\n    // adding statements to.\n\n    let cur;\n    for (let sawDefault; !this.match(tt.braceR); ) {\n      if (this.match(tt._case) || this.match(tt._default)) {\n        const isCase = this.match(tt._case);\n        if (cur) this.finishNode(cur, \"SwitchCase\");\n        // @ts-expect-error Fixme\n        cases.push((cur = this.startNode<N.SwitchCase>()));\n        cur.consequent = [];\n        this.next();\n        if (isCase) {\n          cur.test = this.parseExpression();\n        } else {\n          if (sawDefault) {\n            this.raise(\n              Errors.MultipleDefaultsInSwitch,\n              this.state.lastTokStartLoc!,\n            );\n          }\n          sawDefault = true;\n          cur.test = null;\n        }\n        this.expect(tt.colon);\n      } else {\n        if (cur) {\n          cur.consequent.push(this.parseStatementListItem());\n        } else {\n          this.unexpected();\n        }\n      }\n    }\n    this.scope.exit();\n    if (cur) this.finishNode(cur, \"SwitchCase\");\n    this.next(); // Closing brace\n    this.state.labels.pop();\n    return this.finishNode(node, \"SwitchStatement\");\n  }\n\n  parseThrowStatement(this: Parser, node: Undone<N.ThrowStatement>) {\n    this.next();\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(Errors.NewlineAfterThrow, this.state.lastTokEndLoc!);\n    }\n    node.argument = this.parseExpression();\n    this.semicolon();\n    return this.finishNode(node, \"ThrowStatement\");\n  }\n\n  parseCatchClauseParam(this: Parser): N.Pattern {\n    const param = this.parseBindingAtom();\n\n    this.scope.enter(\n      this.options.annexB && param.type === \"Identifier\"\n        ? ScopeFlag.SIMPLE_CATCH\n        : ScopeFlag.OTHER,\n    );\n    this.checkLVal(\n      param,\n      { type: \"CatchClause\" },\n      BindingFlag.TYPE_CATCH_PARAM,\n    );\n\n    return param;\n  }\n\n  parseTryStatement(\n    this: Parser,\n    node: Undone<N.TryStatement>,\n  ): N.TryStatement {\n    this.next();\n\n    node.block = this.parseBlock();\n    node.handler = null;\n\n    if (this.match(tt._catch)) {\n      const clause = this.startNode<N.CatchClause>();\n      this.next();\n      if (this.match(tt.parenL)) {\n        this.expect(tt.parenL);\n        clause.param = this.parseCatchClauseParam();\n        this.expect(tt.parenR);\n      } else {\n        clause.param = null;\n        this.scope.enter(ScopeFlag.OTHER);\n      }\n\n      // Parse the catch clause's body.\n      clause.body =\n        // For the smartPipelines plugin: Disable topic references from outer\n        // contexts within the catch clause's body.\n        this.withSmartMixTopicForbiddingContext(() =>\n          // Parse the catch clause's body.\n          this.parseBlock(false, false),\n        );\n\n      this.scope.exit();\n      node.handler = this.finishNode(clause, \"CatchClause\");\n    }\n\n    node.finalizer = this.eat(tt._finally) ? this.parseBlock() : null;\n\n    if (!node.handler && !node.finalizer) {\n      this.raise(Errors.NoCatchOrFinally, node);\n    }\n\n    return this.finishNode(node, \"TryStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-VariableStatement\n  // https://tc39.es/ecma262/#prod-LexicalDeclaration\n  parseVarStatement(\n    this: Parser,\n    node: Undone<N.VariableDeclaration>,\n    kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n    allowMissingInitializer: boolean = false,\n  ): N.VariableDeclaration {\n    this.next();\n    this.parseVar(node, false, kind, allowMissingInitializer);\n    this.semicolon();\n    return this.finishNode(node, \"VariableDeclaration\");\n  }\n\n  // https://tc39.es/ecma262/#prod-WhileStatement\n  parseWhileStatement(\n    this: Parser,\n    node: Undone<N.WhileStatement>,\n  ): N.WhileStatement {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    this.state.labels.push(loopLabel);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the loop body.\n      // They are permitted in test expressions, outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse loop body.\n        this.parseStatement(),\n      );\n\n    this.state.labels.pop();\n\n    return this.finishNode(node, \"WhileStatement\");\n  }\n\n  parseWithStatement(\n    this: Parser,\n    node: Undone<N.WithStatement>,\n  ): N.WithStatement {\n    if (this.state.strict) {\n      this.raise(Errors.StrictWith, this.state.startLoc);\n    }\n    this.next();\n    node.object = this.parseHeaderExpression();\n\n    // Parse the statement body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the with statement's body.\n      // They are permitted in function default-parameter expressions, which are\n      // part of the outer context, outside of the with statement's body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the statement body.\n        this.parseStatement(),\n      );\n\n    return this.finishNode(node, \"WithStatement\");\n  }\n\n  parseEmptyStatement(node: Undone<N.EmptyStatement>): N.EmptyStatement {\n    this.next();\n    return this.finishNode(node, \"EmptyStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-LabelledStatement\n  parseLabeledStatement(\n    this: Parser,\n    node: Undone<N.LabeledStatement>,\n    maybeName: string,\n    expr: N.Identifier,\n    flags: ParseStatementFlag,\n  ): N.LabeledStatement {\n    for (const label of this.state.labels) {\n      if (label.name === maybeName) {\n        this.raise(Errors.LabelRedeclaration, expr, {\n          labelName: maybeName,\n        });\n      }\n    }\n\n    const kind = tokenIsLoop(this.state.type)\n      ? LoopLabelKind.Loop\n      : this.match(tt._switch)\n        ? LoopLabelKind.Switch\n        : null;\n    for (let i = this.state.labels.length - 1; i >= 0; i--) {\n      const label = this.state.labels[i];\n      if (label.statementStart === node.start) {\n        label.statementStart = this.sourceToOffsetPos(this.state.start);\n        label.kind = kind;\n      } else {\n        break;\n      }\n    }\n\n    this.state.labels.push({\n      name: maybeName,\n      kind: kind,\n      statementStart: this.sourceToOffsetPos(this.state.start),\n    });\n    // https://tc39.es/ecma262/#prod-LabelledItem\n    node.body =\n      flags & ParseStatementFlag.AllowLabeledFunction\n        ? this.parseStatementOrSloppyAnnexBFunctionDeclaration(true)\n        : this.parseStatement();\n\n    this.state.labels.pop();\n    node.label = expr;\n    return this.finishNode(node, \"LabeledStatement\");\n  }\n\n  parseExpressionStatement(\n    node: Undone<N.ExpressionStatement>,\n    expr: N.Expression,\n    /* eslint-disable-next-line @typescript-eslint/no-unused-vars -- used in TypeScript parser */\n    decorators: N.Decorator[] | null | undefined,\n  ) {\n    node.expression = expr;\n    this.semicolon();\n    return this.finishNode(node, \"ExpressionStatement\");\n  }\n\n  // Parse a semicolon-enclosed block of statements, handling `\"use\n  // strict\"` declarations when `allowDirectives` is true (used for\n  // function bodies).\n\n  parseBlock(\n    this: Parser,\n    allowDirectives: boolean = false,\n    createNewLexicalScope: boolean = true,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): N.BlockStatement {\n    const node = this.startNode<N.BlockStatement>();\n    if (allowDirectives) {\n      this.state.strictErrors.clear();\n    }\n    this.expect(tt.braceL);\n    if (createNewLexicalScope) {\n      this.scope.enter(ScopeFlag.OTHER);\n    }\n    this.parseBlockBody(\n      node,\n      allowDirectives,\n      false,\n      tt.braceR,\n      afterBlockParse,\n    );\n    if (createNewLexicalScope) {\n      this.scope.exit();\n    }\n    return this.finishNode(node, \"BlockStatement\");\n  }\n\n  isValidDirective(stmt: N.Statement): stmt is N.ExpressionStatement {\n    return (\n      stmt.type === \"ExpressionStatement\" &&\n      stmt.expression.type === \"StringLiteral\" &&\n      !stmt.expression.extra!.parenthesized\n    );\n  }\n\n  parseBlockBody(\n    this: Parser,\n    node: Undone<N.BlockStatementLike>,\n    allowDirectives: boolean | undefined | null,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void {\n    const body: N.BlockStatementLike[\"body\"] = (node.body = []);\n    const directives: N.BlockStatementLike[\"directives\"] = (node.directives =\n      []);\n    this.parseBlockOrModuleBlockBody(\n      body,\n      allowDirectives ? directives : undefined,\n      topLevel,\n      end,\n      afterBlockParse,\n    );\n  }\n\n  // Undefined directives means that directives are not allowed.\n  // https://tc39.es/ecma262/#prod-Block\n  // https://tc39.es/ecma262/#prod-ModuleBody\n  parseBlockOrModuleBlockBody(\n    this: Parser,\n    body: N.Statement[],\n    directives: N.Directive[] | undefined | null,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void {\n    const oldStrict = this.state.strict;\n    let hasStrictModeDirective = false;\n    let parsedNonDirective = false;\n\n    while (!this.match(end)) {\n      const stmt = topLevel\n        ? this.parseModuleItem()\n        : this.parseStatementListItem();\n\n      if (directives && !parsedNonDirective) {\n        if (this.isValidDirective(stmt)) {\n          const directive = this.stmtToDirective(stmt);\n          directives.push(directive);\n\n          if (\n            !hasStrictModeDirective &&\n            directive.value.value === \"use strict\"\n          ) {\n            hasStrictModeDirective = true;\n            this.setStrict(true);\n          }\n\n          continue;\n        }\n        parsedNonDirective = true;\n        // clear strict errors since the strict mode will not change within the block\n        this.state.strictErrors.clear();\n      }\n      body.push(stmt);\n    }\n\n    afterBlockParse?.call(this, hasStrictModeDirective);\n\n    if (!oldStrict) {\n      this.setStrict(false);\n    }\n\n    this.next();\n  }\n\n  // Parse a regular `for` loop. The disambiguation code in\n  // `parseStatement` will already have parsed the init statement or\n  // expression.\n\n  parseFor(\n    this: Parser,\n    node: Undone<N.ForStatement>,\n    init?: N.VariableDeclaration | N.Expression | null,\n  ): N.ForStatement {\n    node.init = init;\n    this.semicolon(/* allowAsi */ false);\n    node.test = this.match(tt.semi) ? null : this.parseExpression();\n    this.semicolon(/* allowAsi */ false);\n    node.update = this.match(tt.parenR) ? null : this.parseExpression();\n    this.expect(tt.parenR);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin: Disable topic references from outer\n      // contexts within the loop body. They are permitted in test expressions,\n      // outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the loop body.\n        this.parseStatement(),\n      );\n\n    this.scope.exit();\n    this.state.labels.pop();\n\n    return this.finishNode(node, \"ForStatement\");\n  }\n\n  // Parse a `for`/`in` and `for`/`of` loop, which are almost\n  // same from parser's perspective.\n\n  parseForIn(\n    this: Parser,\n    node: Undone<N.ForInOf>,\n    init: N.VariableDeclaration | N.AssignmentPattern,\n    awaitAt?: Position | null,\n  ): N.ForInOf {\n    const isForIn = this.match(tt._in);\n    this.next();\n\n    if (isForIn) {\n      if (awaitAt !== null) this.unexpected(awaitAt);\n    } else {\n      node.await = awaitAt !== null;\n    }\n\n    if (\n      init.type === \"VariableDeclaration\" &&\n      init.declarations[0].init != null &&\n      (!isForIn ||\n        !this.options.annexB ||\n        this.state.strict ||\n        init.kind !== \"var\" ||\n        init.declarations[0].id.type !== \"Identifier\")\n    ) {\n      this.raise(Errors.ForInOfLoopInitializer, init, {\n        type: isForIn ? \"ForInStatement\" : \"ForOfStatement\",\n      });\n    }\n\n    if (init.type === \"AssignmentPattern\") {\n      this.raise(Errors.InvalidLhs, init, {\n        ancestor: { type: \"ForStatement\" },\n      });\n    }\n\n    node.left = init;\n    node.right = isForIn\n      ? this.parseExpression()\n      : this.parseMaybeAssignAllowIn();\n    this.expect(tt.parenR);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the loop body.\n      // They are permitted in test expressions, outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse loop body.\n        this.parseStatement(),\n      );\n\n    this.scope.exit();\n    this.state.labels.pop();\n\n    return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\");\n  }\n\n  // Parse a list of variable declarations.\n\n  parseVar(\n    this: Parser,\n    node: Undone<N.VariableDeclaration>,\n    isFor: boolean,\n    kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n    allowMissingInitializer: boolean = false,\n  ): Undone<N.VariableDeclaration> {\n    const declarations: N.VariableDeclarator[] = (node.declarations = []);\n    node.kind = kind;\n    for (;;) {\n      const decl = this.startNode<N.VariableDeclarator>();\n      this.parseVarId(decl, kind);\n      decl.init = !this.eat(tt.eq)\n        ? null\n        : isFor\n          ? this.parseMaybeAssignDisallowIn()\n          : this.parseMaybeAssignAllowIn();\n\n      if (decl.init === null && !allowMissingInitializer) {\n        if (\n          decl.id.type !== \"Identifier\" &&\n          !(isFor && (this.match(tt._in) || this.isContextual(tt._of)))\n        ) {\n          this.raise(\n            Errors.DeclarationMissingInitializer,\n            this.state.lastTokEndLoc!,\n            {\n              kind: \"destructuring\",\n            },\n          );\n        } else if (\n          (kind === \"const\" || kind === \"using\" || kind === \"await using\") &&\n          !(this.match(tt._in) || this.isContextual(tt._of))\n        ) {\n          this.raise(\n            Errors.DeclarationMissingInitializer,\n            this.state.lastTokEndLoc!,\n            { kind },\n          );\n        }\n      }\n      declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n      if (!this.eat(tt.comma)) break;\n    }\n    return node;\n  }\n\n  parseVarId(\n    this: Parser,\n    decl: Undone<N.VariableDeclarator>,\n    kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n  ): void {\n    const id = this.parseBindingAtom();\n    if (kind === \"using\" || kind === \"await using\") {\n      if (id.type === \"ArrayPattern\" || id.type === \"ObjectPattern\") {\n        this.raise(Errors.UsingDeclarationHasBindingPattern, id.loc.start);\n      }\n    } else {\n      if (id.type === \"VoidPattern\") {\n        this.raise(Errors.UnexpectedVoidPattern, id.loc.start);\n      }\n    }\n    this.checkLVal(\n      id,\n      { type: \"VariableDeclarator\" },\n      kind === \"var\" ? BindingFlag.TYPE_VAR : BindingFlag.TYPE_LEXICAL,\n    );\n    decl.id = id;\n  }\n\n  // https://tc39.es/ecma262/#prod-AsyncFunctionExpression\n  parseAsyncFunctionExpression(\n    this: Parser,\n    node: Undone<N.FunctionExpression>,\n  ): N.FunctionExpression {\n    return this.parseFunction(node, ParseFunctionFlag.Async);\n  }\n\n  // Parse a function declaration or expression (depending on the\n  // ParseFunctionFlag.Declaration flag).\n\n  parseFunction<T extends N.NormalFunction>(\n    this: Parser,\n    node: Undone<T>,\n    flags: ParseFunctionFlag = ParseFunctionFlag.Expression,\n  ): T {\n    const hangingDeclaration = flags & ParseFunctionFlag.HangingDeclaration;\n    const isDeclaration = !!(flags & ParseFunctionFlag.Declaration);\n    const requireId = isDeclaration && !(flags & ParseFunctionFlag.NullableId);\n    const isAsync = !!(flags & ParseFunctionFlag.Async);\n\n    this.initFunction(node, isAsync);\n\n    if (this.match(tt.star)) {\n      if (hangingDeclaration) {\n        this.raise(\n          Errors.GeneratorInSingleStatementContext,\n          this.state.startLoc,\n        );\n      }\n      this.next(); // eat *\n      node.generator = true;\n    }\n\n    if (isDeclaration) {\n      node.id = this.parseFunctionId(requireId);\n    }\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    this.state.maybeInArrowParameters = false;\n    this.scope.enter(ScopeFlag.FUNCTION);\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n\n    if (!isDeclaration) {\n      node.id = this.parseFunctionId();\n    }\n\n    this.parseFunctionParams(node, /* isConstructor */ false);\n\n    // For the smartPipelines plugin: Disable topic references from outer\n    // contexts within the function body. They are permitted in function\n    // default-parameter expressions, outside of the function body.\n    this.withSmartMixTopicForbiddingContext(() => {\n      // Parse the function body.\n      this.parseFunctionBodyAndFinish(\n        node,\n        isDeclaration ? \"FunctionDeclaration\" : \"FunctionExpression\",\n      );\n    });\n\n    this.prodParam.exit();\n    this.scope.exit();\n\n    if (isDeclaration && !hangingDeclaration) {\n      // We need to register this _after_ parsing the function body\n      // because of TypeScript body-less function declarations,\n      // which shouldn't be added to the scope.\n      this.registerFunctionStatementId(node as T);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    return node as T;\n  }\n\n  parseFunctionId(requireId?: boolean): N.Identifier | undefined | null {\n    return requireId || tokenIsIdentifier(this.state.type)\n      ? this.parseIdentifier()\n      : null;\n  }\n\n  parseFunctionParams(\n    this: Parser,\n    node: Undone<N.Function>,\n    isConstructor?: boolean,\n  ): void {\n    this.expect(tt.parenL);\n    this.expressionScope.enter(newParameterDeclarationScope());\n    node.params = this.parseBindingList(\n      tt.parenR,\n      charCodes.rightParenthesis,\n      ParseBindingListFlags.IS_FUNCTION_PARAMS |\n        (isConstructor ? ParseBindingListFlags.IS_CONSTRUCTOR_PARAMS : 0),\n    ) as Array<N.Pattern>;\n\n    this.expressionScope.exit();\n  }\n\n  registerFunctionStatementId(node: N.Function): void {\n    if (!node.id) return;\n\n    // If it is a regular function declaration in sloppy mode, then it is\n    // subject to Annex B semantics (BindingFlag.TYPE_FUNCTION). Otherwise, the binding\n    // mode depends on properties of the current scope (see\n    // treatFunctionsAsVar).\n    this.scope.declareName(\n      node.id.name,\n      !this.options.annexB || this.state.strict || node.generator || node.async\n        ? this.scope.treatFunctionsAsVar\n          ? BindingFlag.TYPE_VAR\n          : BindingFlag.TYPE_LEXICAL\n        : BindingFlag.TYPE_FUNCTION,\n      node.id.loc.start,\n    );\n  }\n\n  // Parse a class declaration or literal (depending on the\n  // `isStatement` parameter).\n\n  parseClass<T extends N.Class>(\n    this: Parser,\n    node: Undone<T>,\n    isStatement: /* T === ClassDeclaration */ boolean,\n    optionalId?: boolean,\n  ): T {\n    this.next(); // 'class'\n\n    // A class definition is always strict mode code.\n    const oldStrict = this.state.strict;\n    this.state.strict = true;\n\n    this.parseClassId(node, isStatement, optionalId);\n    this.parseClassSuper(node);\n    // this.state.strict is restored in parseClassBody\n    node.body = this.parseClassBody(!!node.superClass, oldStrict);\n\n    return this.finishNode(\n      node,\n      isStatement ? \"ClassDeclaration\" : \"ClassExpression\",\n    );\n  }\n\n  isClassProperty(): boolean {\n    return this.match(tt.eq) || this.match(tt.semi) || this.match(tt.braceR);\n  }\n\n  isClassMethod(): boolean {\n    return this.match(tt.parenL);\n  }\n\n  nameIsConstructor(key: N.Expression | N.PrivateName): boolean {\n    return (\n      (key.type === \"Identifier\" && key.name === \"constructor\") ||\n      (key.type === \"StringLiteral\" && key.value === \"constructor\")\n    );\n  }\n\n  isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n    return (\n      !method.computed && !method.static && this.nameIsConstructor(method.key)\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassBody\n  parseClassBody(\n    this: Parser,\n    hadSuperClass: boolean,\n    oldStrict: boolean,\n  ): N.ClassBody {\n    this.classScope.enter();\n\n    const state: N.ParseClassMemberState = {\n      hadConstructor: false,\n      hadSuperClass,\n    };\n    let decorators: N.Decorator[] = [];\n    const classBody = this.startNode<N.ClassBody>();\n    classBody.body = [];\n\n    this.expect(tt.braceL);\n\n    // For the smartPipelines plugin: Disable topic references from outer\n    // contexts within the class body.\n    this.withSmartMixTopicForbiddingContext(() => {\n      // Parse the contents within the braces.\n      while (!this.match(tt.braceR)) {\n        if (this.eat(tt.semi)) {\n          if (decorators.length > 0) {\n            throw this.raise(\n              Errors.DecoratorSemicolon,\n              this.state.lastTokEndLoc!,\n            );\n          }\n          continue;\n        }\n\n        if (this.match(tt.at)) {\n          decorators.push(this.parseDecorator());\n          continue;\n        }\n\n        const member = this.startNode<N.ClassMember>();\n\n        // steal the decorators if there are any\n        if (decorators.length) {\n          // @ts-expect-error Fixme\n          member.decorators = decorators;\n          this.resetStartLocationFromNode(member, decorators[0]);\n          decorators = [];\n        }\n\n        this.parseClassMember(classBody, member, state);\n\n        if (\n          // @ts-expect-error Fixme\n          member.kind === \"constructor\" &&\n          // @ts-expect-error Fixme\n          member.decorators &&\n          // @ts-expect-error Fixme\n          member.decorators.length > 0\n        ) {\n          this.raise(Errors.DecoratorConstructor, member);\n        }\n      }\n    });\n\n    this.state.strict = oldStrict;\n\n    this.next(); // eat `}`\n\n    if (decorators.length) {\n      throw this.raise(Errors.TrailingDecorator, this.state.startLoc);\n    }\n\n    this.classScope.exit();\n\n    return this.finishNode(classBody, \"ClassBody\");\n  }\n\n  // returns true if the current identifier is a method/field name,\n  // false if it is a modifier\n  parseClassMemberFromModifier(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n  ): boolean {\n    const key = this.parseIdentifier(true); // eats the modifier\n\n    if (this.isClassMethod()) {\n      const method: N.ClassMethod = member as any;\n\n      // a method named like the modifier\n      method.kind = \"method\";\n      method.computed = false;\n      method.key = key;\n      method.static = false;\n      this.pushClassMethod(\n        classBody,\n        method,\n        false,\n        false,\n        /* isConstructor */ false,\n        false,\n      );\n      return true;\n    } else if (this.isClassProperty()) {\n      const prop: N.ClassProperty = member as any;\n\n      // a property named like the modifier\n      prop.computed = false;\n      prop.key = key;\n      prop.static = false;\n      classBody.body.push(this.parseClassProperty(prop));\n      return true;\n    }\n    this.resetPreviousNodeTrailingComments(key);\n    return false;\n  }\n\n  parseClassMember(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n    state: N.ParseClassMemberState,\n  ): void {\n    const isStatic = this.isContextual(tt._static);\n\n    if (isStatic) {\n      if (this.parseClassMemberFromModifier(classBody, member)) {\n        // a class element named 'static'\n        return;\n      }\n      if (this.eat(tt.braceL)) {\n        this.parseClassStaticBlock(classBody, member as any as N.StaticBlock);\n        return;\n      }\n    }\n\n    this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n  }\n\n  parseClassMemberWithIsStatic(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n    state: N.ParseClassMemberState,\n    isStatic: boolean,\n  ) {\n    const publicMethod = member as N.ClassMethod;\n    const privateMethod = member as N.ClassPrivateMethod;\n    const publicProp = member as N.ClassProperty;\n    const privateProp = member as N.ClassPrivateProperty;\n    const accessorProp = member as N.ClassAccessorProperty;\n\n    const method: typeof publicMethod | typeof privateMethod = publicMethod;\n    const publicMember: typeof publicMethod | typeof publicProp = publicMethod;\n\n    member.static = isStatic;\n    this.parsePropertyNamePrefixOperator(member);\n\n    if (this.eat(tt.star)) {\n      // a generator\n      method.kind = \"method\";\n      const isPrivateName = this.match(tt.privateName);\n      this.parseClassElementName(method);\n      this.parsePostMemberNameModifiers(method);\n\n      if (isPrivateName) {\n        // Private generator method\n        this.pushClassPrivateMethod(classBody, privateMethod, true, false);\n        return;\n      }\n\n      if (this.isNonstaticConstructor(publicMethod)) {\n        this.raise(Errors.ConstructorIsGenerator, publicMethod.key);\n      }\n\n      this.pushClassMethod(\n        classBody,\n        publicMethod,\n        true,\n        false,\n        /* isConstructor */ false,\n        false,\n      );\n\n      return;\n    }\n\n    const isContextual =\n      !this.state.containsEsc && tokenIsIdentifier(this.state.type);\n    const key = this.parseClassElementName(member);\n    const maybeContextualKw = isContextual ? (key as N.Identifier).name : null;\n    const isPrivate = this.isPrivateName(key);\n    const maybeQuestionTokenStartLoc = this.state.startLoc;\n\n    this.parsePostMemberNameModifiers(publicMember);\n\n    if (this.isClassMethod()) {\n      method.kind = \"method\";\n\n      if (isPrivate) {\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n        return;\n      }\n\n      // a normal method\n      const isConstructor = this.isNonstaticConstructor(publicMethod);\n      let allowsDirectSuper = false;\n      if (isConstructor) {\n        publicMethod.kind = \"constructor\";\n\n        // TypeScript allows multiple overloaded constructor declarations.\n        if (state.hadConstructor && !this.hasPlugin(\"typescript\")) {\n          this.raise(Errors.DuplicateConstructor, key);\n        }\n        if (isConstructor && this.hasPlugin(\"typescript\") && member.override) {\n          this.raise(Errors.OverrideOnConstructor, key);\n        }\n        state.hadConstructor = true;\n        allowsDirectSuper = state.hadSuperClass;\n      }\n\n      this.pushClassMethod(\n        classBody,\n        publicMethod,\n        false,\n        false,\n        isConstructor,\n        allowsDirectSuper,\n      );\n    } else if (this.isClassProperty()) {\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else if (maybeContextualKw === \"async\" && !this.isLineTerminator()) {\n      // an async method\n      this.resetPreviousNodeTrailingComments(key);\n      const isGenerator = this.eat(tt.star);\n\n      if (publicMember.optional) {\n        this.unexpected(maybeQuestionTokenStartLoc);\n      }\n\n      method.kind = \"method\";\n      // The so-called parsed name would have been \"async\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(method);\n      this.parsePostMemberNameModifiers(publicMember);\n\n      if (isPrivate) {\n        // private async method\n        this.pushClassPrivateMethod(\n          classBody,\n          privateMethod,\n          isGenerator,\n          true,\n        );\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(Errors.ConstructorIsAsync, publicMethod.key);\n        }\n\n        this.pushClassMethod(\n          classBody,\n          publicMethod,\n          isGenerator,\n          true,\n          /* isConstructor */ false,\n          false,\n        );\n      }\n    } else if (\n      (maybeContextualKw === \"get\" || maybeContextualKw === \"set\") &&\n      !(this.match(tt.star) && this.isLineTerminator())\n    ) {\n      // `get\\n*` is an uninitialized property named 'get' followed by a generator.\n      // a getter or setter\n      this.resetPreviousNodeTrailingComments(key);\n      method.kind = maybeContextualKw;\n      // The so-called parsed name would have been \"get/set\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(publicMethod);\n\n      if (isPrivate) {\n        // private getter/setter\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(Errors.ConstructorIsAccessor, publicMethod.key);\n        }\n        this.pushClassMethod(\n          classBody,\n          publicMethod,\n          false,\n          false,\n          /* isConstructor */ false,\n          false,\n        );\n      }\n\n      this.checkGetterSetterParams(publicMethod);\n    } else if (maybeContextualKw === \"accessor\" && !this.isLineTerminator()) {\n      this.expectPlugin(\"decoratorAutoAccessors\");\n      this.resetPreviousNodeTrailingComments(key);\n\n      // The so-called parsed name would have been \"accessor\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(publicProp);\n      this.pushClassAccessorProperty(classBody, accessorProp, isPrivate);\n    } else if (this.isLineTerminator()) {\n      // an uninitialized class property (due to ASI, since we don't otherwise recognize the next token)\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else {\n      this.unexpected();\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassElementName\n  parseClassElementName(\n    this: Parser,\n    member: Undone<N.ClassMember>,\n  ): N.Expression | N.Identifier | N.PrivateName {\n    const { type, value } = this.state;\n    if (\n      (type === tt.name || type === tt.string) &&\n      member.static &&\n      value === \"prototype\"\n    ) {\n      this.raise(Errors.StaticPrototype, this.state.startLoc);\n    }\n\n    if (type === tt.privateName) {\n      if (value === \"constructor\") {\n        this.raise(Errors.ConstructorClassPrivateField, this.state.startLoc);\n      }\n      const key = this.parsePrivateName();\n      member.key = key;\n      return key;\n    }\n\n    this.parsePropertyName(member);\n    return member.key;\n  }\n\n  parseClassStaticBlock(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<\n      N.StaticBlock & {\n        decorators?: Array<N.Decorator>;\n      }\n    >,\n  ) {\n    // Start a new lexical scope\n    this.scope.enter(\n      ScopeFlag.CLASS | ScopeFlag.STATIC_BLOCK | ScopeFlag.SUPER,\n    );\n    // Start a new scope with regard to loop labels\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    // ClassStaticBlockStatementList:\n    //   StatementList[~Yield, ~Await, ~Return] opt\n    this.prodParam.enter(ParamKind.PARAM);\n    const body: N.Statement[] = (member.body = []);\n    this.parseBlockOrModuleBlockBody(body, undefined, false, tt.braceR);\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.labels = oldLabels;\n    classBody.body.push(this.finishNode<N.StaticBlock>(member, \"StaticBlock\"));\n    if (member.decorators?.length) {\n      this.raise(Errors.DecoratorStaticBlock, member);\n    }\n  }\n\n  pushClassProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: N.ClassProperty,\n  ) {\n    if (!prop.computed && this.nameIsConstructor(prop.key)) {\n      // Non-computed field, which is either an identifier named \"constructor\"\n      // or a string literal named \"constructor\"\n      this.raise(Errors.ConstructorClassField, prop.key);\n    }\n\n    classBody.body.push(this.parseClassProperty(prop));\n  }\n\n  pushClassPrivateProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: Undone<N.ClassPrivateProperty>,\n  ) {\n    const node = this.parseClassPrivateProperty(prop);\n    classBody.body.push(node);\n\n    this.classScope.declarePrivateName(\n      this.getPrivateNameSV(node.key),\n      ClassElementType.OTHER,\n      node.key.loc.start,\n    );\n  }\n\n  pushClassAccessorProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: N.ClassAccessorProperty,\n    isPrivate: boolean,\n  ) {\n    if (!isPrivate && !prop.computed && this.nameIsConstructor(prop.key)) {\n      // Non-computed field, which is either an identifier named \"constructor\"\n      // or a string literal named \"constructor\"\n      this.raise(Errors.ConstructorClassField, prop.key);\n    }\n\n    const node = this.parseClassAccessorProperty(prop);\n    classBody.body.push(node);\n\n    if (isPrivate) {\n      this.classScope.declarePrivateName(\n        this.getPrivateNameSV(node.key as N.PrivateName),\n        ClassElementType.OTHER,\n        node.key.loc.start,\n      );\n    }\n  }\n\n  pushClassMethod(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    method: Undone<N.ClassMethod>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isConstructor: boolean,\n    allowsDirectSuper: boolean,\n  ): void {\n    classBody.body.push(\n      this.parseMethod(\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n        \"ClassMethod\",\n        true,\n      ),\n    );\n  }\n\n  pushClassPrivateMethod(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    method: Undone<N.ClassPrivateMethod>,\n    isGenerator: boolean,\n    isAsync: boolean,\n  ): void {\n    const node = this.parseMethod(\n      method,\n      isGenerator,\n      isAsync,\n      /* isConstructor */ false,\n      false,\n      \"ClassPrivateMethod\",\n      true,\n    );\n    classBody.body.push(node);\n\n    const kind =\n      node.kind === \"get\"\n        ? node.static\n          ? ClassElementType.STATIC_GETTER\n          : ClassElementType.INSTANCE_GETTER\n        : node.kind === \"set\"\n          ? node.static\n            ? ClassElementType.STATIC_SETTER\n            : ClassElementType.INSTANCE_SETTER\n          : ClassElementType.OTHER;\n    this.declareClassPrivateMethodInScope(node, kind);\n  }\n\n  declareClassPrivateMethodInScope(\n    node: Undone<N.ClassPrivateMethod | N.TSDeclareMethod>,\n    kind: number,\n  ) {\n    this.classScope.declarePrivateName(\n      this.getPrivateNameSV(node.key as N.PrivateName),\n      kind,\n      node.key.loc.start,\n    );\n  }\n\n  // Overridden in typescript.js\n  parsePostMemberNameModifiers(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    methodOrProp: Undone<N.ClassMethod | N.ClassProperty>,\n  ): void {}\n\n  // https://tc39.es/ecma262/#prod-FieldDefinition\n  parseClassPrivateProperty(\n    this: Parser,\n    node: Undone<N.ClassPrivateProperty>,\n  ): N.ClassPrivateProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassPrivateProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-FieldDefinition\n  parseClassProperty(this: Parser, node: N.ClassProperty): N.ClassProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassProperty\");\n  }\n\n  parseClassAccessorProperty(\n    this: Parser,\n    node: N.ClassAccessorProperty,\n  ): N.ClassAccessorProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassAccessorProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-Initializer\n  parseInitializer(\n    this: Parser,\n    node: Undone<\n      N.ClassProperty | N.ClassPrivateProperty | N.ClassAccessorProperty\n    >,\n  ): void {\n    this.scope.enter(ScopeFlag.CLASS | ScopeFlag.SUPER);\n    this.expressionScope.enter(newExpressionScope());\n    this.prodParam.enter(ParamKind.PARAM);\n    node.value = this.eat(tt.eq) ? this.parseMaybeAssignAllowIn() : null;\n    this.expressionScope.exit();\n    this.prodParam.exit();\n    this.scope.exit();\n  }\n\n  parseClassId(\n    node: Undone<N.Class>,\n    isStatement: boolean,\n    optionalId?: boolean | null,\n    bindingType: BindingFlag = BindingFlag.TYPE_CLASS,\n  ): void {\n    if (tokenIsIdentifier(this.state.type)) {\n      node.id = this.parseIdentifier();\n      if (isStatement) {\n        this.declareNameFromIdentifier(node.id, bindingType);\n      }\n    } else {\n      if (optionalId || !isStatement) {\n        node.id = null;\n      } else {\n        throw this.raise(Errors.MissingClassName, this.state.startLoc);\n      }\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassHeritage\n  parseClassSuper(this: Parser, node: Undone<N.Class>): void {\n    node.superClass = this.eat(tt._extends) ? this.parseExprSubscripts() : null;\n  }\n\n  // Parses module export declaration.\n  // https://tc39.es/ecma262/#prod-ExportDeclaration\n\n  parseExport(\n    this: Parser,\n    node: Undone<\n      | N.ExportDefaultDeclaration\n      | N.ExportAllDeclaration\n      | N.ExportNamedDeclaration\n    >,\n    decorators: N.Decorator[] | null | undefined,\n  ): N.AnyExport {\n    const maybeDefaultIdentifier = this.parseMaybeImportPhase(\n      node,\n      /* isExport */ true,\n    );\n    const hasDefault = this.maybeParseExportDefaultSpecifier(\n      node,\n      maybeDefaultIdentifier,\n    );\n    const parseAfterDefault = !hasDefault || this.eat(tt.comma);\n    const hasStar = parseAfterDefault && this.eatExportStar(node);\n    const hasNamespace =\n      hasStar && this.maybeParseExportNamespaceSpecifier(node);\n    const parseAfterNamespace =\n      parseAfterDefault && (!hasNamespace || this.eat(tt.comma));\n    const isFromRequired = hasDefault || hasStar;\n\n    if (hasStar && !hasNamespace) {\n      if (hasDefault) this.unexpected();\n      if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n      this.parseExportFrom(node, true);\n\n      this.sawUnambiguousESM = true;\n\n      return this.finishNode(node, \"ExportAllDeclaration\");\n    }\n\n    const hasSpecifiers = this.maybeParseExportNamedSpecifiers(node);\n\n    if (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers) {\n      this.unexpected(null, tt.braceL);\n    }\n\n    if (hasNamespace && parseAfterNamespace) {\n      this.unexpected(null, tt._from);\n    }\n\n    let hasDeclaration;\n    if (isFromRequired || hasSpecifiers) {\n      hasDeclaration = false;\n      if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n      this.parseExportFrom(\n        node as Undone<N.ExportNamedDeclaration>,\n        isFromRequired,\n      );\n    } else {\n      hasDeclaration = this.maybeParseExportDeclaration(\n        node as Undone<N.ExportNamedDeclaration>,\n      );\n    }\n\n    if (isFromRequired || hasSpecifiers || hasDeclaration) {\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\n      this.checkExport(node2, true, false, !!node2.source);\n      if (node2.declaration?.type === \"ClassDeclaration\") {\n        this.maybeTakeDecorators(decorators, node2.declaration, node2);\n      } else if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n      this.sawUnambiguousESM = true;\n      return this.finishNode(node2, \"ExportNamedDeclaration\");\n    }\n\n    if (this.eat(tt._default)) {\n      const node2 = node as Undone<N.ExportDefaultDeclaration>;\n      // export default ...\n      const decl = this.parseExportDefaultExpression();\n      node2.declaration = decl;\n\n      if (decl.type === \"ClassDeclaration\") {\n        this.maybeTakeDecorators(decorators, decl as N.ClassDeclaration, node2);\n      } else if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n\n      this.checkExport(node2, true, true);\n      this.sawUnambiguousESM = true;\n      return this.finishNode(node2, \"ExportDefaultDeclaration\");\n    }\n\n    throw this.unexpected(null, tt.braceL);\n  }\n\n  eatExportStar(\n    node: Undone<N.Node>,\n  ): node is Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration> {\n    return this.eat(tt.star);\n  }\n\n  maybeParseExportDefaultSpecifier(\n    node: Undone<\n      | N.ExportDefaultDeclaration\n      | N.ExportAllDeclaration\n      | N.ExportNamedDeclaration\n    >,\n    maybeDefaultIdentifier: N.Identifier | null,\n  ): node is Undone<N.ExportNamedDeclaration> {\n    if (maybeDefaultIdentifier || this.isExportDefaultSpecifier()) {\n      // export defaultObj ...\n      this.expectPlugin(\"exportDefaultFrom\", maybeDefaultIdentifier?.loc.start);\n      const id = maybeDefaultIdentifier || this.parseIdentifier(true);\n      const specifier = this.startNodeAtNode<N.ExportDefaultSpecifier>(id);\n      specifier.exported = id;\n      (node as Undone<N.ExportNamedDeclaration>).specifiers = [\n        this.finishNode(specifier, \"ExportDefaultSpecifier\"),\n      ];\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportNamespaceSpecifier(\n    node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n  ): node is Undone<N.ExportNamedDeclaration> {\n    if (this.isContextual(tt._as)) {\n      (node as Undone<N.ExportNamedDeclaration>).specifiers ??= [];\n\n      const specifier = this.startNodeAt<N.ExportNamespaceSpecifier>(\n        this.state.lastTokStartLoc!,\n      );\n\n      this.next();\n\n      specifier.exported = this.parseModuleExportName();\n      (node as Undone<N.ExportNamedDeclaration>).specifiers.push(\n        this.finishNode(specifier, \"ExportNamespaceSpecifier\"),\n      );\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportNamedSpecifiers(\n    node: Undone<N.Node>,\n  ): node is Undone<N.ExportNamedDeclaration> {\n    if (this.match(tt.braceL)) {\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\n\n      if (!node2.specifiers) node2.specifiers = [];\n      const isTypeExport = node2.exportKind === \"type\";\n      node2.specifiers.push(...this.parseExportSpecifiers(isTypeExport));\n      node2.source = null;\n      if (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"importAssertions\")) {\n        node2.assertions = [];\n      } else {\n        node2.attributes = [];\n      }\n      node2.declaration = null;\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportDeclaration(\n    this: Parser,\n    node: Undone<N.ExportNamedDeclaration>,\n  ): boolean {\n    if (this.shouldParseExportDeclaration()) {\n      node.specifiers = [];\n      node.source = null;\n      if (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"importAssertions\")) {\n        node.assertions = [];\n      } else {\n        node.attributes = [];\n      }\n      node.declaration = this.parseExportDeclaration(node);\n      return true;\n    }\n    return false;\n  }\n\n  isAsyncFunction(): boolean {\n    if (!this.isContextual(tt._async)) return false;\n    const next = this.nextTokenInLineStart();\n    return this.isUnparsedContextual(next, \"function\");\n  }\n\n  parseExportDefaultExpression(\n    this: Parser,\n  ): N.ExportDefaultDeclaration[\"declaration\"] {\n    const expr = this.startNode();\n\n    if (this.match(tt._function)) {\n      this.next();\n      return this.parseFunction(\n        expr as Undone<N.FunctionDeclaration>,\n        ParseFunctionFlag.Declaration | ParseFunctionFlag.NullableId,\n      );\n    } else if (this.isAsyncFunction()) {\n      this.next(); // eat 'async'\n      this.next(); // eat 'function'\n      return this.parseFunction(\n        expr as Undone<N.FunctionDeclaration>,\n        ParseFunctionFlag.Declaration |\n          ParseFunctionFlag.NullableId |\n          ParseFunctionFlag.Async,\n      );\n    }\n\n    if (this.match(tt._class)) {\n      return this.parseClass(expr as Undone<N.ClassExpression>, true, true);\n    }\n\n    if (this.match(tt.at)) {\n      if (\n        this.hasPlugin(\"decorators\") &&\n        this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") === true\n      ) {\n        this.raise(Errors.DecoratorBeforeExport, this.state.startLoc);\n      }\n      return this.parseClass(\n        this.maybeTakeDecorators(\n          this.parseDecorators(false),\n          this.startNode<N.ClassDeclaration>(),\n        ),\n        true,\n        true,\n      );\n    }\n\n    if (\n      this.match(tt._const) ||\n      this.match(tt._var) ||\n      this.isLet() ||\n      this.isUsing() ||\n      this.isAwaitUsing()\n    ) {\n      throw this.raise(Errors.UnsupportedDefaultExport, this.state.startLoc);\n    }\n\n    const res = this.parseMaybeAssignAllowIn();\n    this.semicolon();\n    return res;\n  }\n\n  // https://tc39.es/ecma262/#prod-ExportDeclaration\n  parseExportDeclaration(\n    this: Parser,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    node: Undone<N.ExportNamedDeclaration>,\n  ): N.Declaration | undefined | null {\n    if (this.match(tt._class)) {\n      const node = this.parseClass(\n        this.startNode<N.ClassDeclaration>(),\n        true,\n        false,\n      );\n      return node;\n    }\n    return this.parseStatementListItem() as N.Declaration;\n  }\n\n  isExportDefaultSpecifier(): boolean {\n    const { type } = this.state;\n    if (tokenIsIdentifier(type)) {\n      if ((type === tt._async && !this.state.containsEsc) || type === tt._let) {\n        return false;\n      }\n      if (\n        (type === tt._type || type === tt._interface) &&\n        !this.state.containsEsc\n      ) {\n        // If we see any variable name other than `from` after `type` keyword,\n        // we consider it as flow/typescript type exports\n        // note that this approach may fail on some pedantic cases\n        // export type from = number\n        const next = this.nextTokenStart();\n        const nextChar = this.input.charCodeAt(next);\n        if (\n          nextChar === charCodes.leftCurlyBrace ||\n          (this.chStartsBindingIdentifier(nextChar, next) &&\n            !this.input.startsWith(\"from\", next))\n        ) {\n          this.expectOnePlugin([\"flow\", \"typescript\"]);\n          return false;\n        }\n      }\n    } else if (!this.match(tt._default)) {\n      return false;\n    }\n\n    const next = this.nextTokenStart();\n    const hasFrom = this.isUnparsedContextual(next, \"from\");\n    if (\n      this.input.charCodeAt(next) === charCodes.comma ||\n      (tokenIsIdentifier(this.state.type) && hasFrom)\n    ) {\n      return true;\n    }\n    // lookahead again when `export default from` is seen\n    if (this.match(tt._default) && hasFrom) {\n      const nextAfterFrom = this.input.charCodeAt(\n        this.nextTokenStartSince(next + 4),\n      );\n      return (\n        nextAfterFrom === charCodes.quotationMark ||\n        nextAfterFrom === charCodes.apostrophe\n      );\n    }\n    return false;\n  }\n\n  parseExportFrom(\n    this: Parser,\n    node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n    expect?: boolean,\n  ): void {\n    if (this.eatContextual(tt._from)) {\n      node.source = this.parseImportSource();\n      this.checkExport(node);\n      this.maybeParseImportAttributes(node);\n      this.checkJSONModuleImport(node);\n    } else if (expect) {\n      this.unexpected();\n    }\n\n    this.semicolon();\n  }\n\n  shouldParseExportDeclaration(): boolean {\n    const { type } = this.state;\n    if (type === tt.at) {\n      this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n      if (this.hasPlugin(\"decorators\")) {\n        if (\n          this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") === true\n        ) {\n          this.raise(Errors.DecoratorBeforeExport, this.state.startLoc);\n        }\n\n        return true;\n      }\n    }\n\n    if (this.isUsing()) {\n      this.raise(Errors.UsingDeclarationExport, this.state.startLoc);\n      return true;\n    }\n\n    if (this.isAwaitUsing()) {\n      this.raise(Errors.UsingDeclarationExport, this.state.startLoc);\n      return true;\n    }\n\n    return (\n      type === tt._var ||\n      type === tt._const ||\n      type === tt._function ||\n      type === tt._class ||\n      this.isLet() ||\n      this.isAsyncFunction()\n    );\n  }\n\n  checkExport(\n    node: Undone<\n      | N.ExportNamedDeclaration\n      | N.ExportAllDeclaration\n      | N.ExportDefaultDeclaration\n    >,\n    checkNames?: boolean,\n    isDefault?: boolean,\n    isFrom?: boolean,\n  ): void {\n    if (checkNames) {\n      // Check for duplicate exports\n      if (isDefault) {\n        // Default exports\n        this.checkDuplicateExports(node, \"default\");\n        if (this.hasPlugin(\"exportDefaultFrom\")) {\n          const declaration = (node as any as N.ExportDefaultDeclaration)\n            .declaration;\n          if (\n            declaration.type === \"Identifier\" &&\n            declaration.name === \"from\" &&\n            declaration.end - declaration.start === 4 && // does not contain escape\n            !declaration.extra?.parenthesized\n          ) {\n            this.raise(Errors.ExportDefaultFromAsIdentifier, declaration);\n          }\n        }\n        // @ts-expect-error node.specifiers may not exist\n      } else if (node.specifiers?.length) {\n        // Named exports\n        // @ts-expect-error node.specifiers may not exist\n        for (const specifier of node.specifiers) {\n          const { exported } = specifier;\n          const exportName =\n            exported.type === \"Identifier\" ? exported.name : exported.value;\n          this.checkDuplicateExports(specifier, exportName);\n          if (!isFrom && specifier.local) {\n            const { local } = specifier;\n            if (local.type !== \"Identifier\") {\n              this.raise(Errors.ExportBindingIsString, specifier, {\n                localName: local.value,\n                exportName,\n              });\n            } else {\n              // check for keywords used as local names\n              this.checkReservedWord(local.name, local.loc.start, true, false);\n              // check if export is defined\n              this.scope.checkLocalExport(local);\n            }\n          }\n        }\n      } else if ((node as Undone<N.ExportNamedDeclaration>).declaration) {\n        const decl = (node as Undone<N.ExportNamedDeclaration>).declaration!;\n        // Exported declarations\n        if (\n          decl.type === \"FunctionDeclaration\" ||\n          decl.type === \"ClassDeclaration\"\n        ) {\n          const { id } = decl;\n          if (!id) throw new Error(\"Assertion failure\");\n\n          this.checkDuplicateExports(node, id.name);\n        } else if (decl.type === \"VariableDeclaration\") {\n          for (const declaration of decl.declarations) {\n            this.checkDeclaration(declaration.id);\n          }\n        }\n      }\n    }\n  }\n\n  checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n    if (node.type === \"Identifier\") {\n      this.checkDuplicateExports(node, node.name);\n    } else if (node.type === \"ObjectPattern\") {\n      for (const prop of node.properties) {\n        this.checkDeclaration(prop);\n      }\n    } else if (node.type === \"ArrayPattern\") {\n      for (const elem of node.elements) {\n        if (elem) {\n          this.checkDeclaration(elem);\n        }\n      }\n    } else if (node.type === \"ObjectProperty\") {\n      // @ts-expect-error migrate to Babel types\n      this.checkDeclaration(node.value);\n    } else if (node.type === \"RestElement\") {\n      this.checkDeclaration(node.argument);\n    } else if (node.type === \"AssignmentPattern\") {\n      this.checkDeclaration(node.left);\n    }\n  }\n\n  checkDuplicateExports(\n    node: Undone<\n      | N.Identifier\n      | N.StringLiteral\n      | N.ExportNamedDeclaration\n      | N.ExportSpecifier\n      | N.ExportDefaultSpecifier\n    >,\n    exportName: string,\n  ): void {\n    if (this.exportedIdentifiers.has(exportName)) {\n      if (exportName === \"default\") {\n        this.raise(Errors.DuplicateDefaultExport, node);\n      } else {\n        this.raise(Errors.DuplicateExport, node, { exportName });\n      }\n    }\n    this.exportedIdentifiers.add(exportName);\n  }\n\n  // Parses a comma-separated list of module exports.\n\n  parseExportSpecifiers(isInTypeExport: boolean): Array<N.ExportSpecifier> {\n    const nodes = [];\n    let first = true;\n\n    // export { x, y as z } [from '...']\n    this.expect(tt.braceL);\n\n    while (!this.eat(tt.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.eat(tt.braceR)) break;\n      }\n      const isMaybeTypeOnly = this.isContextual(tt._type);\n      const isString = this.match(tt.string);\n      const node = this.startNode<N.ExportSpecifier>();\n      node.local = this.parseModuleExportName() as N.Identifier;\n      nodes.push(\n        this.parseExportSpecifier(\n          node,\n          isString,\n          isInTypeExport,\n          isMaybeTypeOnly,\n        ),\n      );\n    }\n\n    return nodes;\n  }\n\n  parseExportSpecifier(\n    node: any,\n    isString: boolean,\n    /* eslint-disable @typescript-eslint/no-unused-vars -- used in TypeScript parser */\n    isInTypeExport: boolean,\n    isMaybeTypeOnly: boolean,\n    /* eslint-enable @typescript-eslint/no-unused-vars */\n  ): N.ExportSpecifier {\n    if (this.eatContextual(tt._as)) {\n      node.exported = this.parseModuleExportName();\n    } else if (isString) {\n      node.exported = this.cloneStringLiteral(node.local);\n    } else if (!node.exported) {\n      node.exported = this.cloneIdentifier(node.local);\n    }\n    return this.finishNode<N.ExportSpecifier>(node, \"ExportSpecifier\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ModuleExportName\n  parseModuleExportName(): N.StringLiteral | N.Identifier {\n    if (this.match(tt.string)) {\n      const result = this.parseStringLiteral(this.state.value);\n      const surrogate = loneSurrogate.exec(result.value);\n      if (surrogate) {\n        this.raise(Errors.ModuleExportNameHasLoneSurrogate, result, {\n          surrogateCharCode: surrogate[0].charCodeAt(0),\n        });\n      }\n      return result;\n    }\n    return this.parseIdentifier(true);\n  }\n\n  isJSONModuleImport(\n    node: Undone<\n      N.ExportAllDeclaration | N.ExportNamedDeclaration | N.ImportDeclaration\n    >,\n  ): boolean {\n    if (node.assertions != null) {\n      return node.assertions.some(({ key, value }) => {\n        return (\n          value.value === \"json\" &&\n          (key.type === \"Identifier\"\n            ? key.name === \"type\"\n            : key.value === \"type\")\n        );\n      });\n    }\n    return false;\n  }\n\n  checkImportReflection(node: Undone<N.ImportDeclaration>) {\n    const { specifiers } = node;\n    const singleBindingType =\n      specifiers.length === 1 ? specifiers[0].type : null;\n\n    if (node.phase === \"source\") {\n      if (singleBindingType !== \"ImportDefaultSpecifier\") {\n        this.raise(\n          Errors.SourcePhaseImportRequiresDefault,\n          specifiers[0].loc.start,\n        );\n      }\n    } else if (node.phase === \"defer\") {\n      if (singleBindingType !== \"ImportNamespaceSpecifier\") {\n        this.raise(\n          Errors.DeferImportRequiresNamespace,\n          specifiers[0].loc.start,\n        );\n      }\n    } else if (node.module) {\n      if (singleBindingType !== \"ImportDefaultSpecifier\") {\n        this.raise(Errors.ImportReflectionNotBinding, specifiers[0].loc.start);\n      }\n      // @ts-expect-error comparing undefined and number\n      if (node.assertions?.length > 0) {\n        this.raise(\n          Errors.ImportReflectionHasAssertion,\n          specifiers[0].loc.start,\n        );\n      }\n    }\n  }\n\n  checkJSONModuleImport(\n    node: Undone<\n      N.ExportAllDeclaration | N.ExportNamedDeclaration | N.ImportDeclaration\n    >,\n  ) {\n    // @ts-expect-error Fixme: node.type must be undefined because they are undone\n    if (this.isJSONModuleImport(node) && node.type !== \"ExportAllDeclaration\") {\n      // @ts-expect-error specifiers may not index node\n      const { specifiers } = node;\n      if (specifiers != null) {\n        // @ts-expect-error refine specifier types\n        const nonDefaultNamedSpecifier = specifiers.find(specifier => {\n          let imported;\n          if (specifier.type === \"ExportSpecifier\") {\n            imported = specifier.local;\n          } else if (specifier.type === \"ImportSpecifier\") {\n            imported = specifier.imported;\n          }\n          if (imported !== undefined) {\n            return imported.type === \"Identifier\"\n              ? imported.name !== \"default\"\n              : imported.value !== \"default\";\n          }\n        });\n        if (nonDefaultNamedSpecifier !== undefined) {\n          this.raise(\n            Errors.ImportJSONBindingNotDefault,\n            nonDefaultNamedSpecifier.loc.start,\n          );\n        }\n      }\n    }\n  }\n\n  isPotentialImportPhase(isExport: boolean): boolean {\n    if (isExport) return false;\n    return (\n      this.isContextual(tt._source) ||\n      this.isContextual(tt._defer) ||\n      (!process.env.BABEL_8_BREAKING && this.isContextual(tt._module))\n    );\n  }\n\n  applyImportPhase(\n    node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n    isExport: boolean,\n    phase: string | null,\n    loc?: Position,\n  ): void {\n    if (isExport) {\n      if (!process.env.IS_PUBLISH) {\n        if (\n          (!process.env.BABEL_8_BREAKING && phase === \"module\") ||\n          phase === \"source\"\n        ) {\n          throw new Error(\n            `Assertion failure: export declarations do not support the '${phase}' phase.`,\n          );\n        }\n      }\n      return;\n    }\n\n    if (!process.env.BABEL_8_BREAKING && phase === \"module\") {\n      this.expectPlugin(\"importReflection\", loc);\n      (node as N.ImportDeclaration).module = true;\n    } else if (this.hasPlugin(\"importReflection\")) {\n      (node as N.ImportDeclaration).module = false;\n    }\n\n    if (phase === \"source\") {\n      this.expectPlugin(\"sourcePhaseImports\", loc);\n      (node as N.ImportDeclaration).phase = \"source\";\n    } else if (phase === \"defer\") {\n      this.expectPlugin(\"deferredImportEvaluation\", loc);\n      (node as N.ImportDeclaration).phase = \"defer\";\n    } else if (this.hasPlugin(\"sourcePhaseImports\")) {\n      (node as N.ImportDeclaration).phase = null;\n    }\n  }\n\n  /*\n   * Parse `source` in `import source x from \"x\"`, disambiguating\n   * `import source from \"x\"` and `import source from from \"x\"`.\n   *\n   * This function might return an identifier representing the `source`\n   * if it eats `source` and then discovers that it was the default import\n   * binding and not the import reflection.\n   *\n   * This function is also used to parse `import type` and `import typeof`\n   * in the TS and Flow plugins, and for parsing `import defer`.\n   */\n  parseMaybeImportPhase(\n    node: Undone<N.ImportDeclaration | N.TsImportEqualsDeclaration>,\n    isExport: boolean,\n  ): N.Identifier | null {\n    if (!this.isPotentialImportPhase(isExport)) {\n      this.applyImportPhase(\n        node as Undone<N.ImportDeclaration>,\n        isExport,\n        null,\n      );\n      return null;\n    }\n\n    const phaseIdentifier = this.startNode<N.Identifier>();\n    const phaseIdentifierName = this.parseIdentifierName(true);\n\n    const { type } = this.state;\n    const isImportPhase = tokenIsKeywordOrIdentifier(type)\n      ? // OK: import <phase> x from \"foo\";\n        // OK: import <phase> from from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // NO: import <phase> from 'foo';\n        // With the module declarations proposals, we will need further disambiguation\n        // for `import module from from;`.\n        type !== tt._from || this.lookaheadCharCode() === charCodes.lowercaseF\n      : // OK: import <phase> { x } from \"foo\";\n        // OK: import <phase> x from \"foo\";\n        // OK: import <phase> * as T from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // OK: import <phase> \"foo\";\n        // The last one is invalid, we will continue parsing and throw\n        // an error later\n        type !== tt.comma;\n\n    if (isImportPhase) {\n      this.applyImportPhase(\n        node as Undone<N.ImportDeclaration>,\n        isExport,\n        phaseIdentifierName,\n        phaseIdentifier.loc.start,\n      );\n      return null;\n    } else {\n      this.applyImportPhase(\n        node as Undone<N.ImportDeclaration>,\n        isExport,\n        null,\n      );\n      // `<phase>` is a default binding, return it to the main import declaration parser\n      return this.createIdentifier(phaseIdentifier, phaseIdentifierName);\n    }\n  }\n\n  isPrecedingIdImportPhase(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    phase: string,\n  ) {\n    const { type } = this.state;\n    return tokenIsIdentifier(type)\n      ? // OK: import <phase> x from \"foo\";\n        // OK: import <phase> from from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // NO: import <phase> from 'foo';\n        // With the module declarations proposals, we will need further disambiguation\n        // for `import module from from;`.\n        type !== tt._from || this.lookaheadCharCode() === charCodes.lowercaseF\n      : // OK: import <phase> { x } from \"foo\";\n        // OK: import <phase> x from \"foo\";\n        // OK: import <phase> * as T from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // OK: import <phase> \"foo\";\n        // The last one is invalid, we will continue parsing and throw\n        // an error later\n        type !== tt.comma;\n  }\n\n  // Parses import declaration.\n  // https://tc39.es/ecma262/#prod-ImportDeclaration\n\n  parseImport(this: Parser, node: Undone<N.ImportDeclaration>): N.AnyImport {\n    if (this.match(tt.string)) {\n      // import '...'\n      return this.parseImportSourceAndAttributes(node);\n    }\n\n    return this.parseImportSpecifiersAndAfter(\n      node,\n      this.parseMaybeImportPhase(node, /* isExport */ false),\n    );\n  }\n\n  parseImportSpecifiersAndAfter(\n    this: Parser,\n    node: Undone<N.ImportDeclaration>,\n    maybeDefaultIdentifier: N.Identifier | null,\n  ): N.AnyImport {\n    node.specifiers = [];\n\n    // check if we have a default import like\n    // import React from \"react\";\n    const hasDefault = this.maybeParseDefaultImportSpecifier(\n      node,\n      maybeDefaultIdentifier,\n    );\n    /* we are checking if we do not have a default import, then it is obvious that we need named imports\n     * import { get } from \"axios\";\n     * but if we do have a default import\n     * we need to check if we have a comma after that and\n     * that is where this `|| this.eat` condition comes into play\n     */\n    const parseNext = !hasDefault || this.eat(tt.comma);\n    // if we do have to parse the next set of specifiers, we first check for star imports\n    // import React, * from \"react\";\n    const hasStar = parseNext && this.maybeParseStarImportSpecifier(node);\n    // now we check if we need to parse the next imports\n    // but only if they are not importing * (everything)\n    if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node);\n    this.expectContextual(tt._from);\n\n    return this.parseImportSourceAndAttributes(node);\n  }\n\n  parseImportSourceAndAttributes(\n    this: Parser,\n    node: Undone<N.ImportDeclaration>,\n  ): N.AnyImport {\n    node.specifiers ??= [];\n    node.source = this.parseImportSource();\n    this.maybeParseImportAttributes(node);\n    this.checkImportReflection(node);\n    this.checkJSONModuleImport(node);\n\n    this.semicolon();\n    this.sawUnambiguousESM = true;\n    return this.finishNode(node, \"ImportDeclaration\");\n  }\n\n  parseImportSource(this: Parser): N.StringLiteral {\n    if (!this.match(tt.string)) this.unexpected();\n    return this.parseExprAtom() as N.StringLiteral;\n  }\n\n  parseImportSpecifierLocal<\n    T extends\n      | N.ImportSpecifier\n      | N.ImportDefaultSpecifier\n      | N.ImportNamespaceSpecifier,\n  >(\n    node: Undone<N.ImportDeclaration>,\n    specifier: Undone<T>,\n    type: T[\"type\"],\n  ): void {\n    specifier.local = this.parseIdentifier();\n    node.specifiers.push(this.finishImportSpecifier(specifier, type));\n  }\n\n  finishImportSpecifier<\n    T extends\n      | N.ImportSpecifier\n      | N.ImportDefaultSpecifier\n      | N.ImportNamespaceSpecifier,\n  >(\n    specifier: Undone<T>,\n    type: T[\"type\"],\n    bindingType: BindingFlag = BindingFlag.TYPE_LEXICAL,\n  ) {\n    this.checkLVal(specifier.local, { type }, bindingType);\n    return this.finishNode(specifier, type);\n  }\n\n  /**\n   * parse assert entries\n   *\n   * @see {@link https://tc39.es/proposal-import-attributes/#prod-WithEntries WithEntries}\n   */\n  parseImportAttributes(): N.ImportAttribute[] {\n    this.expect(tt.braceL);\n\n    const attrs = [];\n    const attrNames = new Set();\n\n    do {\n      if (this.match(tt.braceR)) {\n        break;\n      }\n\n      const node = this.startNode<N.ImportAttribute>();\n\n      // parse AssertionKey : IdentifierName, StringLiteral\n      const keyName = this.state.value;\n      // check if we already have an entry for an attribute\n      // if a duplicate entry is found, throw an error\n      // for now this logic will come into play only when someone declares `type` twice\n      if (attrNames.has(keyName)) {\n        this.raise(\n          Errors.ModuleAttributesWithDuplicateKeys,\n          this.state.startLoc,\n          {\n            key: keyName,\n          },\n        );\n      }\n      attrNames.add(keyName);\n      if (this.match(tt.string)) {\n        node.key = this.parseStringLiteral(keyName);\n      } else {\n        node.key = this.parseIdentifier(true);\n      }\n      this.expect(tt.colon);\n\n      if (!this.match(tt.string)) {\n        throw this.raise(\n          Errors.ModuleAttributeInvalidValue,\n          this.state.startLoc,\n        );\n      }\n      node.value = this.parseStringLiteral(this.state.value);\n      attrs.push(this.finishNode(node, \"ImportAttribute\"));\n    } while (this.eat(tt.comma));\n\n    this.expect(tt.braceR);\n\n    return attrs;\n  }\n\n  /**\n   * parse module attributes\n   * @deprecated It will be removed in Babel 8\n   */\n  parseModuleAttributes() {\n    const attrs: N.ImportAttribute[] = [];\n    const attributes = new Set();\n    do {\n      const node = this.startNode<N.ImportAttribute>();\n      node.key = this.parseIdentifier(true);\n\n      if (node.key.name !== \"type\") {\n        this.raise(Errors.ModuleAttributeDifferentFromType, node.key);\n      }\n\n      if (attributes.has(node.key.name)) {\n        this.raise(Errors.ModuleAttributesWithDuplicateKeys, node.key, {\n          key: node.key.name,\n        });\n      }\n      attributes.add(node.key.name);\n      this.expect(tt.colon);\n      if (!this.match(tt.string)) {\n        throw this.raise(\n          Errors.ModuleAttributeInvalidValue,\n          this.state.startLoc,\n        );\n      }\n      node.value = this.parseStringLiteral(this.state.value);\n      attrs.push(this.finishNode(node, \"ImportAttribute\"));\n    } while (this.eat(tt.comma));\n\n    return attrs;\n  }\n\n  maybeParseImportAttributes(\n    node: Undone<\n      N.ImportDeclaration | N.ExportNamedDeclaration | N.ExportAllDeclaration\n    >,\n  ) {\n    let attributes: N.ImportAttribute[];\n    if (!process.env.BABEL_8_BREAKING) {\n      // eslint-disable-next-line no-var\n      var useWith = false;\n    }\n\n    // https://tc39.es/proposal-import-attributes/#prod-WithClause\n    if (this.match(tt._with)) {\n      if (\n        this.hasPrecedingLineBreak() &&\n        this.lookaheadCharCode() === charCodes.leftParenthesis\n      ) {\n        // This will be parsed as a with statement, and we will throw a\n        // better error about it not being supported in strict mode.\n        return;\n      }\n\n      this.next(); // eat `with`\n\n      if (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"moduleAttributes\")) {\n        attributes = this.parseModuleAttributes();\n        this.addExtra(node, \"deprecatedWithLegacySyntax\", true);\n      } else {\n        attributes = this.parseImportAttributes();\n      }\n      if (!process.env.BABEL_8_BREAKING) {\n        useWith = true;\n      }\n    } else if (this.isContextual(tt._assert) && !this.hasPrecedingLineBreak()) {\n      if (\n        !this.hasPlugin(\"deprecatedImportAssert\") &&\n        (process.env.BABEL_8_BREAKING || !this.hasPlugin(\"importAssertions\"))\n      ) {\n        this.raise(Errors.ImportAttributesUseAssert, this.state.startLoc);\n      }\n      if (process.env.BABEL_8_BREAKING || !this.hasPlugin(\"importAssertions\")) {\n        this.addExtra(node, \"deprecatedAssertSyntax\", true);\n      }\n      this.next(); // eat `assert`\n      attributes = this.parseImportAttributes();\n    } else {\n      attributes = [];\n    }\n\n    if (\n      !process.env.BABEL_8_BREAKING &&\n      !useWith! &&\n      this.hasPlugin(\"importAssertions\")\n    ) {\n      node.assertions = attributes;\n    } else {\n      node.attributes = attributes;\n    }\n  }\n\n  maybeParseDefaultImportSpecifier(\n    node: Undone<N.ImportDeclaration>,\n    maybeDefaultIdentifier: N.Identifier | null,\n  ): boolean {\n    // import defaultObj, { x, y as z } from '...'\n    if (maybeDefaultIdentifier) {\n      const specifier = this.startNodeAtNode<N.ImportDefaultSpecifier>(\n        maybeDefaultIdentifier,\n      );\n      specifier.local = maybeDefaultIdentifier;\n      node.specifiers.push(\n        this.finishImportSpecifier(specifier, \"ImportDefaultSpecifier\"),\n      );\n      return true;\n    } else if (\n      // We allow keywords, and parseImportSpecifierLocal will report a recoverable error\n      tokenIsKeywordOrIdentifier(this.state.type)\n    ) {\n      this.parseImportSpecifierLocal(\n        node,\n        this.startNode<N.ImportDefaultSpecifier>(),\n        \"ImportDefaultSpecifier\",\n      );\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseStarImportSpecifier(node: Undone<N.ImportDeclaration>): boolean {\n    if (this.match(tt.star)) {\n      const specifier = this.startNode<N.ImportNamespaceSpecifier>();\n      this.next();\n      this.expectContextual(tt._as);\n\n      this.parseImportSpecifierLocal(\n        node,\n        specifier,\n        \"ImportNamespaceSpecifier\",\n      );\n      return true;\n    }\n    return false;\n  }\n\n  parseNamedImportSpecifiers(node: Undone<N.ImportDeclaration>) {\n    let first = true;\n    this.expect(tt.braceL);\n    while (!this.eat(tt.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        // Detect an attempt to deep destructure\n        if (this.eat(tt.colon)) {\n          throw this.raise(Errors.DestructureNamedImport, this.state.startLoc);\n        }\n\n        this.expect(tt.comma);\n        if (this.eat(tt.braceR)) break;\n      }\n\n      const specifier = this.startNode<N.ImportSpecifier>();\n      const importedIsString = this.match(tt.string);\n      const isMaybeTypeOnly = this.isContextual(tt._type);\n      specifier.imported = this.parseModuleExportName();\n      const importSpecifier = this.parseImportSpecifier(\n        specifier,\n        importedIsString,\n        node.importKind === \"type\" || node.importKind === \"typeof\",\n        isMaybeTypeOnly,\n        undefined,\n      );\n      node.specifiers.push(importSpecifier);\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportSpecifier\n  parseImportSpecifier(\n    specifier: Undone<N.ImportSpecifier>,\n    importedIsString: boolean,\n    /* used in TypeScript and Flow parser */\n    isInTypeOnlyImport: boolean,\n    isMaybeTypeOnly: boolean,\n    bindingType: BindingFlag | undefined,\n  ): N.ImportSpecifier {\n    if (this.eatContextual(tt._as)) {\n      specifier.local = this.parseIdentifier();\n    } else {\n      const { imported } = specifier;\n      if (importedIsString) {\n        throw this.raise(Errors.ImportBindingIsString, specifier, {\n          importName: (imported as N.StringLiteral).value,\n        });\n      }\n      this.checkReservedWord(\n        (imported as N.Identifier).name,\n        specifier.loc.start,\n        true,\n        true,\n      );\n      if (!specifier.local) {\n        specifier.local = this.cloneIdentifier(imported as N.Identifier);\n      }\n    }\n    return this.finishImportSpecifier(\n      specifier,\n      \"ImportSpecifier\",\n      bindingType,\n    );\n  }\n\n  // This is used in flow and typescript plugin\n  // Determine whether a parameter is a this param\n  isThisParam(\n    param: N.Pattern | N.Identifier | N.TSParameterProperty,\n  ): boolean {\n    return param.type === \"Identifier\" && param.name === \"this\";\n  }\n}\n", "import type * as N from \"../types.ts\";\nimport { getOptions, OptionFlags } from \"../options.ts\";\nimport StatementParser from \"./statement.ts\";\nimport ScopeHandler from \"../util/scope.ts\";\nimport type { ParserOptions, ParseResult, File } from \"@babel/parser\";\n\nexport type PluginsMap = Map<\n  string,\n  {\n    [x: string]: any;\n  }\n>;\n\nexport default class Parser extends StatementParser {\n  constructor(\n    options: ParserOptions | undefined | null,\n    input: string,\n    pluginsMap: PluginsMap,\n  ) {\n    const normalizedOptions = getOptions(options);\n    super(normalizedOptions, input);\n\n    this.options = normalizedOptions;\n    this.initializeScopes();\n    this.plugins = pluginsMap;\n    this.filename = normalizedOptions.sourceFilename;\n    this.startIndex = normalizedOptions.startIndex;\n\n    let optionFlags = 0;\n    if (normalizedOptions.allowAwaitOutsideFunction) {\n      optionFlags |= OptionFlags.AllowAwaitOutsideFunction;\n    }\n    if (normalizedOptions.allowReturnOutsideFunction) {\n      optionFlags |= OptionFlags.AllowReturnOutsideFunction;\n    }\n    if (normalizedOptions.allowImportExportEverywhere) {\n      optionFlags |= OptionFlags.AllowImportExportEverywhere;\n    }\n    if (normalizedOptions.allowSuperOutsideMethod) {\n      optionFlags |= OptionFlags.AllowSuperOutsideMethod;\n    }\n    if (normalizedOptions.allowUndeclaredExports) {\n      optionFlags |= OptionFlags.AllowUndeclaredExports;\n    }\n    if (normalizedOptions.allowNewTargetOutsideFunction) {\n      optionFlags |= OptionFlags.AllowNewTargetOutsideFunction;\n    }\n    if (normalizedOptions.allowYieldOutsideFunction) {\n      optionFlags |= OptionFlags.AllowYieldOutsideFunction;\n    }\n    if (normalizedOptions.ranges) {\n      optionFlags |= OptionFlags.Ranges;\n    }\n    if (normalizedOptions.tokens) {\n      optionFlags |= OptionFlags.Tokens;\n    }\n    if (normalizedOptions.createImportExpressions) {\n      optionFlags |= OptionFlags.CreateImportExpressions;\n    }\n    if (normalizedOptions.createParenthesizedExpressions) {\n      optionFlags |= OptionFlags.CreateParenthesizedExpressions;\n    }\n    if (normalizedOptions.errorRecovery) {\n      optionFlags |= OptionFlags.ErrorRecovery;\n    }\n    if (normalizedOptions.attachComment) {\n      optionFlags |= OptionFlags.AttachComment;\n    }\n    if (normalizedOptions.annexB) {\n      optionFlags |= OptionFlags.AnnexB;\n    }\n\n    this.optionFlags = optionFlags;\n  }\n\n  // This can be overwritten, for example, by the TypeScript plugin.\n  getScopeHandler(): new (...args: any) => ScopeHandler {\n    return ScopeHandler;\n  }\n\n  parse(): ParseResult<File> {\n    this.enterInitialScopes();\n    const file = this.startNode<N.File>();\n    const program = this.startNode<N.Program>();\n    this.nextToken();\n    // @ts-expect-error define later\n    file.errors = null;\n    const result = this.parseTopLevel(file, program);\n    result.errors = this.state.errors;\n    result.comments.length = this.state.commentsLen;\n    return result as ParseResult<File>;\n  }\n}\n", "import type { Options } from \"./options.ts\";\nimport {\n  validatePlugins,\n  mixinPluginNames,\n  mixinPlugins,\n} from \"./plugin-utils.ts\";\nexport type {\n  PluginConfig as ParserPlugin,\n  DecoratorsPluginOptions,\n  FlowPluginOptions,\n  PipelineOperatorPluginOptions,\n  RecordAndTuplePluginOptions,\n  TypeScriptPluginOptions,\n} from \"./typings.ts\";\nimport Parser, { type PluginsMap } from \"./parser/index.ts\";\nimport type { ParseError as ParseErrorGeneric } from \"./parse-error.ts\";\n\nimport type { ExportedTokenType } from \"./tokenizer/types.ts\";\nimport {\n  getExportedToken,\n  tt as internalTokenTypes,\n  type InternalTokenTypes,\n} from \"./tokenizer/types.ts\";\nexport type { Token } from \"./tokenizer/index.ts\";\n\n// TODO: Rather than type-casting the internal AST definitions to the\n// @babel/types one, we should actually unify them.\nimport type { Expression, File } from \"@babel/types\";\nexport type { Expression, File };\n\nexport type ParserOptions = Partial<Options>;\n\nexport type ParseError = ParseErrorGeneric<object>;\nexport type ParseResult<Result extends File | Expression = File> = Result & {\n  comments: File[\"comments\"];\n  errors: null | ParseError[];\n  tokens?: File[\"tokens\"];\n};\n\n/**\n * Parse the provided code as an entire ECMAScript program.\n */\nexport function parse(\n  input: string,\n  options?: ParserOptions,\n): ParseResult<File> {\n  if (options?.sourceType === \"unambiguous\") {\n    options = {\n      ...options,\n    };\n    try {\n      options.sourceType = \"module\";\n      const parser = getParser(options, input);\n      const ast = parser.parse();\n\n      if (parser.sawUnambiguousESM) {\n        return ast;\n      }\n\n      if (parser.ambiguousScriptDifferentAst) {\n        // Top level await introduces code which can be both a valid script and\n        // a valid module, but which produces different ASTs:\n        //    await\n        //    0\n        // can be parsed either as an AwaitExpression, or as two ExpressionStatements.\n        try {\n          options.sourceType = \"script\";\n          return getParser(options, input).parse();\n        } catch {}\n      } else {\n        // This is both a valid module and a valid script, but\n        // we parse it as a script by default\n        ast.program.sourceType = \"script\";\n      }\n\n      return ast;\n    } catch (moduleError) {\n      try {\n        options.sourceType = \"script\";\n        return getParser(options, input).parse();\n      } catch {}\n\n      throw moduleError;\n    }\n  } else {\n    return getParser(options, input).parse();\n  }\n}\n\nexport function parseExpression(\n  input: string,\n  options?: ParserOptions,\n): ParseResult<Expression> {\n  const parser = getParser(options, input);\n  if (parser.options.strictMode) {\n    parser.state.strict = true;\n  }\n  return parser.getExpression() as ParseResult<Expression>;\n}\n\nfunction generateExportedTokenTypes(\n  internalTokenTypes: InternalTokenTypes,\n): Record<string, ExportedTokenType> {\n  const tokenTypes: Record<string, ExportedTokenType> = {};\n  for (const typeName of Object.keys(\n    internalTokenTypes,\n  ) as (keyof InternalTokenTypes)[]) {\n    tokenTypes[typeName] = getExportedToken(internalTokenTypes[typeName]);\n  }\n  return tokenTypes;\n}\n\nexport const tokTypes = generateExportedTokenTypes(internalTokenTypes);\n\nfunction getParser(\n  options: ParserOptions | undefined | null,\n  input: string,\n): Parser {\n  let cls = Parser;\n  const pluginsMap: PluginsMap = new Map();\n  if (options?.plugins) {\n    for (const plugin of options.plugins) {\n      let name, opts;\n      if (typeof plugin === \"string\") {\n        name = plugin;\n      } else {\n        [name, opts] = plugin;\n      }\n      if (!pluginsMap.has(name)) {\n        pluginsMap.set(name, opts || {});\n      }\n    }\n    validatePlugins(pluginsMap);\n    cls = getParserClass(pluginsMap);\n  }\n\n  return new cls(options, input, pluginsMap);\n}\n\nconst parserClassCache = new Map<string, new (...args: any) => Parser>();\n\n/** Get a Parser class with plugins applied. */\nfunction getParserClass(\n  pluginsMap: Map<string, any>,\n): new (...args: any) => Parser {\n  const pluginList = [];\n  for (const name of mixinPluginNames) {\n    if (pluginsMap.has(name)) {\n      pluginList.push(name);\n    }\n  }\n  const key = pluginList.join(\"|\");\n  let cls = parserClassCache.get(key)!;\n  if (!cls) {\n    cls = Parser;\n    for (const plugin of pluginList) {\n      // @ts-expect-error todo(flow->ts)\n      cls = mixinPlugins[plugin](cls);\n    }\n    parserClassCache.set(key, cls);\n  }\n  return cls;\n}\n", "// Disable our restriction on `throw` because these aren't developer-facing\n// error messages.\n/* eslint-disable no-restricted-imports */\n/* eslint-disable no-restricted-syntax */\nimport { chalkStderr } from \"chalk\";\nimport stdFs, { Dirent, Mode, ReadStream, Stats } from \"fs\";\nimport * as fsPromises from \"fs/promises\";\nimport os from \"os\";\nimport path from \"path\";\nimport crypto from \"crypto\";\nimport { Readable } from \"stream\";\n\nexport type NormalizedPath = string;\n\nconst tmpDirOverrideVar = \"CONVEX_TMPDIR\";\nfunction tmpDirPath() {\n  // Allow users to override the temporary directory path with an environment variable.\n  // This override needs to (1) be project-specific, since the user may have projects\n  // on different filesystems, but also (2) be device-specific and not checked in, since\n  // it's dependent on where the user has checked out their project. So, we don't want\n  // this state in the project-specific `convex.json`, which is shared across all\n  // devices, or in the top-level `~/.convex` directory, which is shared across all\n  // projects on the local machine.\n  //\n  // Therefore, just let advanced users configure this behavior with an environment\n  // variable that they're responsible for managing themselves for now.\n  const envTmpDir = process.env[tmpDirOverrideVar];\n  return envTmpDir ?? os.tmpdir();\n}\nconst tmpDirRoot = tmpDirPath();\n\nlet warned = false;\nfunction warnCrossFilesystem(dstPath: string) {\n  const dstDir = path.dirname(dstPath);\n  if (!warned) {\n    // It's hard for these to use `logMessage` without creating a circular dependency, so just log directly.\n    // eslint-disable-next-line no-console\n    console.warn(\n      chalkStderr.yellow(\n        `Temporary directory '${tmpDirRoot}' and project directory '${dstDir}' are on different filesystems.`,\n      ),\n    );\n    // eslint-disable-next-line no-console\n    console.warn(\n      chalkStderr.gray(\n        `  If you're running into errors with other tools watching the project directory, override the temporary directory location with the ${chalkStderr.bold(\n          tmpDirOverrideVar,\n        )} environment variable.`,\n      ),\n    );\n    // eslint-disable-next-line no-console\n    console.warn(\n      chalkStderr.gray(\n        `  Be sure to pick a temporary directory that's on the same filesystem as your project.`,\n      ),\n    );\n    warned = true;\n  }\n}\n\nexport interface Filesystem {\n  listDir(dirPath: string): Dirent[];\n\n  exists(path: string): boolean;\n  stat(path: string): Stats;\n  readUtf8File(path: string): string;\n  // createReadStream returns a stream for which [Symbol.asyncIterator]\n  // yields chunks of size highWaterMark (until the last one), or 64KB if\n  // highWaterMark isn't specified.\n  // https://nodejs.org/api/stream.html#readablesymbolasynciterator\n  createReadStream(\n    path: string,\n    options: { highWaterMark?: number },\n  ): ReadStream;\n  access(path: string): void;\n\n  writeUtf8File(path: string, contents: string, mode?: Mode): void;\n  mkdir(\n    dirPath: string,\n    options?: { allowExisting?: boolean; recursive?: boolean },\n  ): void;\n  rmdir(path: string): void;\n  unlink(path: string): void;\n  swapTmpFile(fromPath: TempPath, toPath: string): void;\n\n  registerPath(path: string, st: Stats | null): void;\n  invalidate(): void;\n}\n\nexport type TempPath = string & { __tempPath: \"tempPath\" };\n\nexport interface TempDir {\n  writeUtf8File(contents: string): TempPath;\n  writeFileStream(\n    path: TempPath,\n    stream: Readable,\n    onData?: (chunk: any) => void,\n  ): Promise<void>;\n  registerTempPath(st: Stats | null): TempPath;\n  path: TempPath;\n}\n\nexport async function withTmpDir(\n  callback: (tmpDir: TempDir) => Promise<void>,\n): Promise<void> {\n  // Create temporary directories inside `tmpDirRoot` of the form `convex-<random>`.\n  const tmpPath = stdFs.mkdtempSync(path.join(tmpDirRoot, \"convex\"));\n  const tmpDir = {\n    writeUtf8File(contents: string): TempPath {\n      const filePath = path.join(tmpPath, crypto.randomUUID());\n      nodeFs.writeUtf8File(filePath, contents);\n      return filePath as TempPath;\n    },\n    registerTempPath(st: Stats | null): TempPath {\n      const filePath = path.join(tmpPath, crypto.randomUUID());\n      nodeFs.registerPath(filePath, st);\n      return filePath as TempPath;\n    },\n    writeFileStream(\n      path: TempPath,\n      stream: Readable,\n      onData?: (chunk: any) => void,\n    ): Promise<void> {\n      return nodeFs.writeFileStream(path, stream, onData);\n    },\n    path: tmpPath as TempPath,\n  };\n  try {\n    await callback(tmpDir);\n  } finally {\n    stdFs.rmSync(tmpPath, { force: true, recursive: true });\n  }\n}\n\n// Use `nodeFs` when you just want to read and write to the local filesystem\n// and don't care about collecting the paths touched. One-off commands\n// should use the singleton `nodeFs`.\nexport class NodeFs implements Filesystem {\n  listDir(dirPath: string) {\n    return stdFs.readdirSync(dirPath, { withFileTypes: true });\n  }\n  exists(path: string) {\n    try {\n      stdFs.statSync(path);\n      return true;\n    } catch (e: any) {\n      if (e.code === \"ENOENT\") {\n        return false;\n      }\n      throw e;\n    }\n  }\n  stat(path: string) {\n    return stdFs.statSync(path);\n  }\n  readUtf8File(path: string) {\n    return stdFs.readFileSync(path, { encoding: \"utf-8\" });\n  }\n  createReadStream(\n    path: string,\n    options: { highWaterMark?: number },\n  ): ReadStream {\n    return stdFs.createReadStream(path, options);\n  }\n  // To avoid issues with filesystem events triggering for our own streamed file\n  // writes, writeFileStream is intentionally not on the Filesystem interface\n  // and not implemented by RecordingFs.\n  async writeFileStream(\n    path: string,\n    stream: Readable,\n    onData?: (chunk: any) => void,\n  ): Promise<void> {\n    // 'wx' means O_CREAT | O_EXCL | O_WRONLY\n    // 0o644 means owner has readwrite access, everyone else has read access.\n    const fileHandle = await fsPromises.open(path, \"wx\", 0o644);\n    try {\n      for await (const chunk of stream) {\n        // For some reason, adding `stream.on(\"data\", onData)` causes issues with\n        // the stream, but calling a callback here works.\n        if (onData) {\n          onData(chunk);\n        }\n        await fileHandle.write(chunk);\n      }\n    } finally {\n      await fileHandle.close();\n    }\n  }\n  access(path: string) {\n    return stdFs.accessSync(path);\n  }\n  writeUtf8File(path: string, contents: string, mode?: Mode) {\n    const fd = stdFs.openSync(path, \"w\", mode);\n    try {\n      stdFs.writeFileSync(fd, contents, { encoding: \"utf-8\" });\n      try {\n        stdFs.fsyncSync(fd);\n      } catch (e: any) {\n        // fsync(2) returns EINVAL on file descriptors that don't support\n        // synchronization, e.g. FIFOs/pipes. Some integrations (such as\n        // 1Password's Local Environment File) expose `.env.local` as a\n        // FIFO so secrets can be streamed on demand; the write itself\n        // succeeded, so treat the missing sync as best-effort.\n        if (e?.code !== \"EINVAL\") {\n          throw e;\n        }\n      }\n    } finally {\n      stdFs.closeSync(fd);\n    }\n  }\n  mkdir(\n    dirPath: string,\n    options?: { allowExisting?: boolean; recursive?: boolean },\n  ): void {\n    try {\n      stdFs.mkdirSync(dirPath, { recursive: options?.recursive });\n    } catch (e: any) {\n      if (options?.allowExisting && e.code === \"EEXIST\") {\n        return;\n      }\n      throw e;\n    }\n  }\n  rmdir(path: string) {\n    stdFs.rmdirSync(path);\n  }\n  unlink(path: string) {\n    return stdFs.unlinkSync(path);\n  }\n  swapTmpFile(fromPath: TempPath, toPath: string) {\n    try {\n      return stdFs.renameSync(fromPath, toPath);\n    } catch (e: any) {\n      // Fallback to copying the file if we're on different volumes.\n      if (e.code === \"EXDEV\") {\n        warnCrossFilesystem(toPath);\n        stdFs.copyFileSync(fromPath, toPath);\n        return;\n      }\n      throw e;\n    }\n  }\n  registerPath(_path: string, _st: Stats | null) {\n    // The node filesystem doesn't track reads, so we don't need to do anything here.\n  }\n  invalidate() {\n    // We don't track invalidations for the node filesystem either.\n  }\n}\nexport const nodeFs = new NodeFs();\n\n// Filesystem implementation that records all paths observed. This is useful\n// for implementing continuous watch commands that need to manage a filesystem\n// watcher and know when a command's inputs were invalidated.\nexport class RecordingFs implements Filesystem {\n  // Absolute path -> Set of observed child names\n  private observedDirectories: Map<string, Set<string>> = new Map();\n\n  // Absolute path -> observed stat (or null if observed nonexistent)\n  private observedFiles: Map<string, Stats | null> = new Map();\n\n  // Have we noticed that files have changed while recording?\n  private invalidated = false;\n\n  private traceEvents: boolean;\n\n  constructor(traceEvents: boolean) {\n    this.traceEvents = traceEvents;\n  }\n\n  listDir(dirPath: string): Dirent[] {\n    const absDirPath = path.resolve(dirPath);\n\n    // Register observing the directory itself.\n    const dirSt = nodeFs.stat(absDirPath);\n    this.registerNormalized(absDirPath, dirSt);\n\n    // List the directory and register observing all of its children.\n    const entries = nodeFs.listDir(dirPath);\n    for (const entry of entries) {\n      const childPath = path.join(absDirPath, entry.name);\n      const childSt = nodeFs.stat(childPath);\n      this.registerPath(childPath, childSt);\n    }\n\n    // Register observing the directory's children.\n    const observedNames = new Set(entries.map((e) => e.name));\n    const existingNames = this.observedDirectories.get(absDirPath);\n    if (existingNames) {\n      if (!setsEqual(observedNames, existingNames)) {\n        if (this.traceEvents) {\n          // eslint-disable-next-line no-console\n          console.log(\n            \"Invalidating due to directory children mismatch\",\n            observedNames,\n            existingNames,\n          );\n        }\n        this.invalidated = true;\n      }\n    }\n    this.observedDirectories.set(absDirPath, observedNames);\n\n    return entries;\n  }\n\n  exists(path: string): boolean {\n    try {\n      const st = nodeFs.stat(path);\n      this.registerPath(path, st);\n      return true;\n    } catch (err: any) {\n      if (err.code === \"ENOENT\") {\n        this.registerPath(path, null);\n        return false;\n      }\n      throw err;\n    }\n  }\n  stat(path: string): Stats {\n    try {\n      const st = nodeFs.stat(path);\n      this.registerPath(path, st);\n      return st;\n    } catch (err: any) {\n      if (err.code === \"ENOENT\") {\n        this.registerPath(path, null);\n      }\n      throw err;\n    }\n  }\n  readUtf8File(path: string): string {\n    try {\n      const st = nodeFs.stat(path);\n      this.registerPath(path, st);\n      return nodeFs.readUtf8File(path);\n    } catch (err: any) {\n      if (err.code === \"ENOENT\") {\n        this.registerPath(path, null);\n      }\n      throw err;\n    }\n  }\n  createReadStream(\n    path: string,\n    options: { highWaterMark?: number },\n  ): ReadStream {\n    try {\n      const st = nodeFs.stat(path);\n      this.registerPath(path, st);\n      return nodeFs.createReadStream(path, options);\n    } catch (err: any) {\n      if (err.code === \"ENOENT\") {\n        this.registerPath(path, null);\n      }\n      throw err;\n    }\n  }\n  access(path: string) {\n    try {\n      const st = nodeFs.stat(path);\n      this.registerPath(path, st);\n      return nodeFs.access(path);\n    } catch (err: any) {\n      if (err.code === \"ENOENT\") {\n        this.registerPath(path, null);\n      }\n      throw err;\n    }\n  }\n\n  writeUtf8File(filePath: string, contents: string, mode?: Mode) {\n    const absPath = path.resolve(filePath);\n\n    nodeFs.writeUtf8File(filePath, contents, mode);\n\n    this.updateOnWrite(absPath);\n  }\n\n  mkdir(\n    dirPath: string,\n    options?: { allowExisting?: boolean; recursive?: boolean },\n  ): void {\n    const absPath = path.resolve(dirPath);\n    try {\n      stdFs.mkdirSync(absPath, { recursive: options?.recursive });\n    } catch (e: any) {\n      if (options?.allowExisting && e.code === \"EEXIST\") {\n        const st = nodeFs.stat(absPath);\n        this.registerNormalized(absPath, st);\n        return;\n      }\n      throw e;\n    }\n    this.updateOnWrite(absPath);\n  }\n\n  rmdir(dirPath: string) {\n    const absPath = path.resolve(dirPath);\n    stdFs.rmdirSync(absPath);\n    this.updateOnDelete(absPath);\n  }\n  unlink(filePath: string) {\n    const absPath = path.resolve(filePath);\n    stdFs.unlinkSync(absPath);\n    this.updateOnDelete(absPath);\n  }\n  swapTmpFile(fromPath: TempPath, toPath: string) {\n    const absToPath = path.resolve(toPath);\n    nodeFs.swapTmpFile(fromPath, absToPath);\n    this.updateOnWrite(absToPath);\n  }\n\n  private updateOnWrite(absPath: string) {\n    // Stat the file or dir after writing and make it our expected observation. If we read the file after\n    // writing it and it doesn't match this stat (implying a subsequent write), we'll invalidate\n    // the current reader.\n    const newSt = nodeFs.stat(absPath);\n    // Skip invalidation checking since we don't want to conflict if we previously read this file.\n    this.observedFiles.set(absPath, newSt);\n\n    // If we observed the parent, add our newly created file.\n    const parentPath = path.resolve(path.dirname(absPath));\n    const observedParent = this.observedDirectories.get(parentPath);\n    if (observedParent !== undefined) {\n      observedParent.add(path.basename(absPath));\n    }\n  }\n  private updateOnDelete(absPath: string) {\n    // Expect this file to be gone.\n    this.observedFiles.set(absPath, null);\n\n    // Unlink it from our parent if observed.\n    const parentPath = path.resolve(path.dirname(absPath));\n    const observedParent = this.observedDirectories.get(parentPath);\n    if (observedParent !== undefined) {\n      observedParent.delete(path.basename(absPath));\n    }\n  }\n\n  registerPath(p: string, st: Stats | null) {\n    const absPath = path.resolve(p);\n    this.registerNormalized(absPath, st);\n  }\n\n  invalidate() {\n    this.invalidated = true;\n  }\n\n  registerNormalized(absPath: string, observed: Stats | null): void {\n    const existing = this.observedFiles.get(absPath);\n    if (existing !== undefined) {\n      const stMatch = stMatches(observed, existing);\n      if (!stMatch.matches) {\n        if (this.traceEvents) {\n          // eslint-disable-next-line no-console\n          console.log(\n            \"Invalidating due to st mismatch\",\n            absPath,\n            observed,\n            existing,\n            stMatch.reason,\n          );\n        }\n        this.invalidated = true;\n      }\n    }\n    this.observedFiles.set(absPath, observed);\n  }\n\n  finalize(): Observations | \"invalidated\" {\n    if (this.invalidated) {\n      return \"invalidated\";\n    }\n    return new Observations(this.observedDirectories, this.observedFiles);\n  }\n}\n\nexport type WatchEvent = {\n  name: \"add\" | \"addDir\" | \"change\" | \"unlink\" | \"unlinkDir\";\n  absPath: string;\n};\n\nexport class Observations {\n  directories: Map<string, Set<string>>;\n  files: Map<string, Stats | null>;\n\n  constructor(\n    directories: Map<string, Set<string>>,\n    files: Map<string, Stats | null>,\n  ) {\n    this.directories = directories;\n    this.files = files;\n  }\n\n  paths(): string[] {\n    const out = [];\n    for (const path of this.directories.keys()) {\n      out.push(path);\n    }\n    for (const path of this.files.keys()) {\n      out.push(path);\n    }\n    return out;\n  }\n\n  overlaps({\n    absPath,\n  }: WatchEvent): { overlaps: false } | { overlaps: true; reason: string } {\n    let currentSt: null | Stats;\n    try {\n      currentSt = nodeFs.stat(absPath);\n    } catch (e: any) {\n      if (e.code === \"ENOENT\") {\n        currentSt = null;\n      } else {\n        throw e;\n      }\n    }\n\n    // First, check to see if we observed `absPath` as a file.\n    const observedSt = this.files.get(absPath);\n    if (observedSt !== undefined) {\n      const stMatch = stMatches(observedSt, currentSt);\n      if (!stMatch.matches) {\n        const reason = `modified (${stMatch.reason})`;\n        return { overlaps: true, reason };\n      }\n    }\n\n    // Second, check if we listed the directory this file is in.\n    const parentPath = path.resolve(path.dirname(absPath));\n    const observedParent = this.directories.get(parentPath);\n    if (observedParent !== undefined) {\n      const filename = path.basename(absPath);\n\n      // If the file is gone now, but we observed it in its directory, then\n      // it was deleted.\n      if (currentSt === null && observedParent.has(filename)) {\n        return { overlaps: true, reason: \"deleted\" };\n      }\n\n      // If the file exists now, but we didn't see it when listing its directory,\n      // then it was added.\n      if (currentSt !== null && !observedParent.has(filename)) {\n        return { overlaps: true, reason: \"added\" };\n      }\n    }\n\n    return { overlaps: false };\n  }\n}\n\nfunction setsEqual<T>(a: Set<T>, b: Set<T>): boolean {\n  if (a.size !== b.size) {\n    return false;\n  }\n  for (const elem of a.keys()) {\n    if (!b.has(elem)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function stMatches(\n  a: Stats | null,\n  b: Stats | null,\n): { matches: true } | { matches: false; reason: string } {\n  if (a === null && b === null) {\n    return { matches: true };\n  }\n  if (a !== null && b !== null) {\n    if (a.dev !== b.dev) {\n      return { matches: false, reason: \"device boundary\" };\n    }\n    if (a.isFile() || b.isFile()) {\n      if (!a.isFile() || !b.isFile()) {\n        return { matches: false, reason: \"file type\" };\n      }\n      if (a.ino !== b.ino) {\n        return {\n          matches: false,\n          reason: `file inode (${a.ino} vs. ${b.ino})`,\n        };\n      }\n      if (a.size !== b.size) {\n        return {\n          matches: false,\n          reason: `file size (${a.size} vs. ${b.size})`,\n        };\n      }\n      if (a.mtimeMs !== b.mtimeMs) {\n        return {\n          matches: false,\n          reason: `file mtime (${a.mtimeMs} vs. ${b.mtimeMs})`,\n        };\n      }\n      return { matches: true };\n    }\n    if (a.isDirectory() || b.isDirectory()) {\n      if (!b.isDirectory() || !b.isDirectory()) {\n        return { matches: false, reason: \"dir file type\" };\n      }\n      if (a.ino !== b.ino) {\n        return {\n          matches: false,\n          reason: `dir inode (${a.ino} vs. ${b.ino})`,\n        };\n      }\n      return { matches: true };\n    }\n    // If we have something other than a file or directory, just compare inodes.\n    if (a.ino !== b.ino) {\n      return {\n        matches: false,\n        reason: `special inode (${a.ino} vs. ${b.ino})`,\n      };\n    }\n    return { matches: true };\n  }\n  return { matches: false, reason: \"deleted mismatch\" };\n}\n\n// Sort consistent with unix directory listings.\nexport function consistentPathSort(a: Dirent, b: Dirent) {\n  for (let i = 0; i < Math.min(a.name.length, b.name.length); i++) {\n    if (a.name.charCodeAt(i) !== b.name.charCodeAt(i)) {\n      return a.name.charCodeAt(i) - b.name.charCodeAt(i);\n    }\n  }\n  return a.name.length - b.name.length;\n}\n", "import { PluginBuild } from \"esbuild\";\nimport path from \"path\";\n// TODO wasm contents aren't watched\n// eslint-disable-next-line no-restricted-imports\nimport fs from \"fs\";\n\nexport const wasmPlugin = {\n  name: \"convex-wasm\",\n  setup(build: PluginBuild) {\n    // Resolve \".wasm\" files to a path with a namespace\n    build.onResolve({ filter: /\\.wasm$/ }, (args) => {\n      // If this is the import inside the stub module, import the\n      // binary itself. Put the path in the \"wasm-binary\" namespace\n      // to tell our binary load callback to load the binary file.\n      if (args.namespace === \"wasm-stub\") {\n        return {\n          path: args.path,\n          namespace: \"wasm-binary\",\n        };\n      }\n\n      // Otherwise, generate the JavaScript stub module for this\n      // \".wasm\" file. Put it in the \"wasm-stub\" namespace to tell\n      // our stub load callback to fill it with JavaScript.\n      //\n      // Resolve relative paths to absolute paths here since this\n      // resolve callback is given \"resolveDir\", the directory to\n      // resolve imports against.\n      if (args.resolveDir === \"\") {\n        return; // Ignore unresolvable paths\n      }\n      return {\n        path: path.isAbsolute(args.path)\n          ? args.path\n          : path.join(args.resolveDir, args.path),\n        namespace: \"wasm-stub\",\n      };\n    });\n\n    // Virtual modules in the \"wasm-stub\" namespace are filled with\n    // the JavaScript code for compiling the WebAssembly binary. The\n    // binary itself is imported from a second virtual module.\n    build.onLoad({ filter: /.*/, namespace: \"wasm-stub\" }, async (args) => ({\n      contents: `import wasm from ${JSON.stringify(args.path)}\n          export default new WebAssembly.Module(wasm)`,\n    }));\n\n    // Virtual modules in the \"wasm-binary\" namespace contain the\n    // actual bytes of the WebAssembly file. This uses esbuild's\n    // built-in \"binary\" loader instead of manually embedding the\n    // binary data inside JavaScript code ourselves.\n    build.onLoad({ filter: /.*/, namespace: \"wasm-binary\" }, async (args) => ({\n      contents: await fs.promises.readFile(args.path),\n      loader: \"binary\",\n    }));\n  },\n};\n", "import { Plugin } from \"esbuild\";\n\n// Stub `import \"server-only\"` to an empty module so user code that uses\n// Next.js's server-only can be bundled and analyzed correctly:\n// https://nextjs.org/docs/app/getting-started/server-and-client-components#preventing-environment-poisoning\nexport const serverOnlyPlugin: Plugin = {\n  name: \"convex-server-only\",\n  setup(build) {\n    build.onResolve({ filter: /^server-only$/ }, (args) => ({\n      path: args.path,\n      namespace: \"server-only-stub\",\n    }));\n    build.onLoad({ filter: /.*/, namespace: \"server-only-stub\" }, () => ({\n      contents: \"\",\n      loader: \"js\",\n    }));\n  },\n};\n", "/*\nHow it works:\n`this.#head` is an instance of `Node` which keeps track of its current value and nests another instance of `Node` that keeps the value that comes after it. When a value is provided to `.enqueue()`, the code needs to iterate through `this.#head`, going deeper and deeper to find the last value. However, iterating through every single item is slow. This problem is solved by saving a reference to the last value as `this.#tail` so that it can reference it to add a new value.\n*/\n\nclass Node {\n\tvalue;\n\tnext;\n\n\tconstructor(value) {\n\t\tthis.value = value;\n\t}\n}\n\nexport default class Queue {\n\t#head;\n\t#tail;\n\t#size;\n\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\n\tenqueue(value) {\n\t\tconst node = new Node(value);\n\n\t\tif (this.#head) {\n\t\t\tthis.#tail.next = node;\n\t\t\tthis.#tail = node;\n\t\t} else {\n\t\t\tthis.#head = node;\n\t\t\tthis.#tail = node;\n\t\t}\n\n\t\tthis.#size++;\n\t}\n\n\tdequeue() {\n\t\tconst current = this.#head;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#head = this.#head.next;\n\t\tthis.#size--;\n\n\t\t// Clean up tail reference when queue becomes empty\n\t\tif (!this.#head) {\n\t\t\tthis.#tail = undefined;\n\t\t}\n\n\t\treturn current.value;\n\t}\n\n\tpeek() {\n\t\tif (!this.#head) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.#head.value;\n\n\t\t// TODO: Node.js 18.\n\t\t// return this.#head?.value;\n\t}\n\n\tclear() {\n\t\tthis.#head = undefined;\n\t\tthis.#tail = undefined;\n\t\tthis.#size = 0;\n\t}\n\n\tget size() {\n\t\treturn this.#size;\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tlet current = this.#head;\n\n\t\twhile (current) {\n\t\t\tyield current.value;\n\t\t\tcurrent = current.next;\n\t\t}\n\t}\n\n\t* drain() {\n\t\twhile (this.#head) {\n\t\t\tyield this.dequeue();\n\t\t}\n\t}\n}\n", "import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tif (queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t}\n\t};\n\n\tconst run = async (fn, resolve, args) => {\n\t\tactiveCount++;\n\n\t\tconst result = (async () => fn(...args))();\n\n\t\tresolve(result);\n\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\tnext();\n\t};\n\n\tconst enqueue = (fn, resolve, args) => {\n\t\tqueue.enqueue(run.bind(undefined, fn, resolve, args));\n\n\t\t(async () => {\n\t\t\t// This function needs to wait until the next microtask before comparing\n\t\t\t// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously\n\t\t\t// when the run function is dequeued and called. The comparison in the if-statement\n\t\t\t// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.\n\t\t\tawait Promise.resolve();\n\n\t\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\t\tqueue.dequeue()();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (fn, ...args) => new Promise(resolve => {\n\t\tenqueue(fn, resolve, args);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue: () => {\n\t\t\t\tqueue.clear();\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n", "import pLimit from 'p-limit';\n\nclass EndError extends Error {\n\tconstructor(value) {\n\t\tsuper();\n\t\tthis.value = value;\n\t}\n}\n\n// The input can also be a promise, so we await it.\nconst testElement = async (element, tester) => tester(await element);\n\n// The input can also be a promise, so we `Promise.all()` them both.\nconst finder = async element => {\n\tconst values = await Promise.all(element);\n\tif (values[1] === true) {\n\t\tthrow new EndError(values[0]);\n\t}\n\n\treturn false;\n};\n\nexport default async function pLocate(\n\titerable,\n\ttester,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tpreserveOrder = true,\n\t} = {},\n) {\n\tconst limit = pLimit(concurrency);\n\n\t// Start all the promises concurrently with optional limit.\n\tconst items = [...iterable].map(element => [element, limit(testElement, element, tester)]);\n\n\t// Check the promises either serially or concurrently.\n\tconst checkLimit = pLimit(preserveOrder ? 1 : Number.POSITIVE_INFINITY);\n\n\ttry {\n\t\tawait Promise.all(items.map(element => checkLimit(finder, element)));\n\t} catch (error) {\n\t\tif (error instanceof EndError) {\n\t\t\treturn error.value;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n", "import process from 'node:process';\nimport path from 'node:path';\nimport fs, {promises as fsPromises} from 'node:fs';\nimport {fileURLToPath} from 'node:url';\nimport pLocate from 'p-locate';\n\nconst typeMappings = {\n\tdirectory: 'isDirectory',\n\tfile: 'isFile',\n};\n\nfunction checkType(type) {\n\tif (type === 'both' || Object.hasOwn(typeMappings, type)) {\n\t\treturn;\n\t}\n\n\tthrow new Error(`Invalid type specified: ${type}`);\n}\n\nconst matchType = (type, stat) => type === 'both' ? (stat.isFile() || stat.isDirectory()) : stat[typeMappings[type]]();\n\nconst toPath = urlOrPath => urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n\nexport async function locatePath(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t\tconcurrency,\n\t\tpreserveOrder,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fsPromises.stat : fsPromises.lstat;\n\n\treturn pLocate(paths, async path_ => {\n\t\ttry {\n\t\t\tconst stat = await statFunction(path.resolve(cwd, path_));\n\t\t\treturn matchType(type, stat);\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}, {concurrency, preserveOrder});\n}\n\nexport function locatePathSync(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fs.statSync : fs.lstatSync;\n\n\tfor (const path_ of paths) {\n\t\ttry {\n\t\t\tconst stat = statFunction(path.resolve(cwd, path_), {\n\t\t\t\tthrowIfNoEntry: false,\n\t\t\t});\n\n\t\t\tif (!stat) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (matchType(type, stat)) {\n\t\t\t\treturn path_;\n\t\t\t}\n\t\t} catch {}\n\t}\n}\n", "export async function delay({seconds, milliseconds} = {}) {\n\tlet duration;\n\tif (typeof seconds === 'number') {\n\t\tduration = seconds * 1000;\n\t} else if (typeof milliseconds === 'number') {\n\t\tduration = milliseconds;\n\t} else {\n\t\tthrow new TypeError('Expected an object with either `seconds` or `milliseconds`.');\n\t}\n\n\treturn new Promise(resolve => {\n\t\tsetTimeout(resolve, duration);\n\t});\n}\n", "import {promisify} from 'node:util';\nimport {execFile as execFileCallback, execFileSync as execFileSyncOriginal} from 'node:child_process';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\n\nconst execFileOriginal = promisify(execFileCallback);\n\nexport function toPath(urlOrPath) {\n\treturn urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n}\n\nexport function rootDirectory(pathInput) {\n\treturn path.parse(toPath(pathInput)).root;\n}\n\nexport function traversePathUp(startPath) {\n\treturn {\n\t\t* [Symbol.iterator]() {\n\t\t\tlet currentPath = path.resolve(toPath(startPath));\n\t\t\tlet previousPath;\n\n\t\t\twhile (previousPath !== currentPath) {\n\t\t\t\tyield currentPath;\n\t\t\t\tpreviousPath = currentPath;\n\t\t\t\tcurrentPath = path.resolve(currentPath, '..');\n\t\t\t}\n\t\t},\n\t};\n}\n\nconst TEN_MEGABYTES_IN_BYTES = 10 * 1024 * 1024;\n\nexport async function execFile(file, arguments_, options = {}) {\n\treturn execFileOriginal(file, arguments_, {\n\t\tmaxBuffer: TEN_MEGABYTES_IN_BYTES,\n\t\t...options,\n\t});\n}\n\nexport function execFileSync(file, arguments_ = [], options = {}) {\n\treturn execFileSyncOriginal(file, arguments_, {\n\t\tmaxBuffer: TEN_MEGABYTES_IN_BYTES,\n\t\tencoding: 'utf8',\n\t\tstdio: 'pipe',\n\t\t...options,\n\t});\n}\n\nexport * from './default.js';\n", "import path from 'node:path';\nimport fs from 'node:fs';\nimport {locatePath, locatePathSync} from 'locate-path';\nimport {toPath} from 'unicorn-magic';\n\nexport const findUpStop = Symbol('findUpStop');\n\nexport async function findUpMultiple(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt) ?? root);\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = async locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePath(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = await name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePath([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\twhile (true) {\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tconst foundPath = await runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport function findUpMultipleSync(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt) ?? root);\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePathSync(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePathSync([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\twhile (true) {\n\t\tconst foundPath = runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport async function findUp(name, options = {}) {\n\tconst matches = await findUpMultiple(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nexport function findUpSync(name, options = {}) {\n\tconst matches = findUpMultipleSync(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nasync function findDownDepthFirst(directory, paths, maxDepth, locateOptions, currentDepth = 0) {\n\tconst found = await locatePath(paths, {cwd: directory, ...locateOptions});\n\tif (found) {\n\t\treturn path.resolve(directory, found);\n\t}\n\n\tif (currentDepth >= maxDepth) {\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst entries = await fs.promises.readdir(directory, {withFileTypes: true});\n\t\tfor (const entry of entries) {\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\tconst result = await findDownDepthFirst(\n\t\t\t\t\tpath.join(directory, entry.name),\n\t\t\t\t\tpaths,\n\t\t\t\t\tmaxDepth,\n\t\t\t\t\tlocateOptions,\n\t\t\t\t\tcurrentDepth + 1,\n\t\t\t\t);\n\t\t\t\tif (result) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch {}\n\n\treturn undefined;\n}\n\nfunction findDownDepthFirstSync(directory, paths, maxDepth, locateOptions, currentDepth = 0) {\n\tconst found = locatePathSync(paths, {cwd: directory, ...locateOptions});\n\tif (found) {\n\t\treturn path.resolve(directory, found);\n\t}\n\n\tif (currentDepth >= maxDepth) {\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst entries = fs.readdirSync(directory, {withFileTypes: true});\n\t\tfor (const entry of entries) {\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tconst result = findDownDepthFirstSync(\n\t\t\t\t\tpath.join(directory, entry.name),\n\t\t\t\t\tpaths,\n\t\t\t\t\tmaxDepth,\n\t\t\t\t\tlocateOptions,\n\t\t\t\t\tcurrentDepth + 1,\n\t\t\t\t);\n\t\t\t\tif (result) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch {}\n\n\treturn undefined;\n}\n\nfunction prepareFindDownOptions(name, options) {\n\tconst startDirectory = path.resolve(toPath(options.cwd) ?? '');\n\tconst maxDepth = Math.max(0, options.depth ?? 1);\n\tconst paths = [name].flat();\n\tconst {type = 'file', allowSymlinks = true, strategy = 'breadth'} = options;\n\tconst locateOptions = {type, allowSymlinks};\n\treturn {\n\t\tstartDirectory,\n\t\tmaxDepth,\n\t\tpaths,\n\t\tlocateOptions,\n\t\tstrategy,\n\t};\n}\n\nasync function findDownBreadthFirst(startDirectory, paths, maxDepth, locateOptions) {\n\tconst queue = [{directory: startDirectory, depth: 0}];\n\n\twhile (queue.length > 0) {\n\t\tconst {directory, depth} = queue.shift();\n\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tconst found = await locatePath(paths, {cwd: directory, ...locateOptions});\n\t\tif (found) {\n\t\t\treturn path.resolve(directory, found);\n\t\t}\n\n\t\tif (depth >= maxDepth) {\n\t\t\tcontinue;\n\t\t}\n\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\tconst entries = await fs.promises.readdir(directory, {withFileTypes: true});\n\t\t\tfor (const entry of entries) {\n\t\t\t\tif (entry.isDirectory()) {\n\t\t\t\t\tqueue.push({directory: path.join(directory, entry.name), depth: depth + 1});\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {}\n\t}\n\n\treturn undefined;\n}\n\nfunction findDownBreadthFirstSync(startDirectory, paths, maxDepth, locateOptions) {\n\tconst queue = [{directory: startDirectory, depth: 0}];\n\n\twhile (queue.length > 0) {\n\t\tconst {directory, depth} = queue.shift();\n\n\t\tconst found = locatePathSync(paths, {cwd: directory, ...locateOptions});\n\t\tif (found) {\n\t\t\treturn path.resolve(directory, found);\n\t\t}\n\n\t\tif (depth >= maxDepth) {\n\t\t\tcontinue;\n\t\t}\n\n\t\ttry {\n\t\t\tconst entries = fs.readdirSync(directory, {withFileTypes: true});\n\t\t\tfor (const entry of entries) {\n\t\t\t\tif (entry.isDirectory()) {\n\t\t\t\t\tqueue.push({directory: path.join(directory, entry.name), depth: depth + 1});\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {}\n\t}\n\n\treturn undefined;\n}\n\nexport async function findDown(name, options = {}) {\n\tconst {startDirectory, maxDepth, paths, locateOptions, strategy} = prepareFindDownOptions(name, options);\n\n\treturn strategy === 'depth'\n\t\t? findDownDepthFirst(startDirectory, paths, maxDepth, locateOptions)\n\t\t: findDownBreadthFirst(startDirectory, paths, maxDepth, locateOptions);\n}\n\nexport function findDownSync(name, options = {}) {\n\tconst {startDirectory, maxDepth, paths, locateOptions, strategy} = prepareFindDownOptions(name, options);\n\n\treturn strategy === 'depth'\n\t\t? findDownDepthFirstSync(startDirectory, paths, maxDepth, locateOptions)\n\t\t: findDownBreadthFirstSync(startDirectory, paths, maxDepth, locateOptions);\n}\n\n", "/**\n * CommanderError class\n */\nclass CommanderError extends Error {\n  /**\n   * Constructs the CommanderError class\n   * @param {number} exitCode suggested exit code which could be used with process.exit\n   * @param {string} code an id string representing the error\n   * @param {string} message human-readable description of the error\n   */\n  constructor(exitCode, code, message) {\n    super(message);\n    // properly capture stack trace in Node.js\n    Error.captureStackTrace(this, this.constructor);\n    this.name = this.constructor.name;\n    this.code = code;\n    this.exitCode = exitCode;\n    this.nestedError = undefined;\n  }\n}\n\n/**\n * InvalidArgumentError class\n */\nclass InvalidArgumentError extends CommanderError {\n  /**\n   * Constructs the InvalidArgumentError class\n   * @param {string} [message] explanation of why argument is invalid\n   */\n  constructor(message) {\n    super(1, 'commander.invalidArgument', message);\n    // properly capture stack trace in Node.js\n    Error.captureStackTrace(this, this.constructor);\n    this.name = this.constructor.name;\n  }\n}\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\n", "const { InvalidArgumentError } = require('./error.js');\n\nclass Argument {\n  /**\n   * Initialize a new command argument with the given name and description.\n   * The default is that the argument is required, and you can explicitly\n   * indicate this with <> around the name. Put [] around the name for an optional argument.\n   *\n   * @param {string} name\n   * @param {string} [description]\n   */\n\n  constructor(name, description) {\n    this.description = description || '';\n    this.variadic = false;\n    this.parseArg = undefined;\n    this.defaultValue = undefined;\n    this.defaultValueDescription = undefined;\n    this.argChoices = undefined;\n\n    switch (name[0]) {\n      case '<': // e.g. <required>\n        this.required = true;\n        this._name = name.slice(1, -1);\n        break;\n      case '[': // e.g. [optional]\n        this.required = false;\n        this._name = name.slice(1, -1);\n        break;\n      default:\n        this.required = true;\n        this._name = name;\n        break;\n    }\n\n    if (this._name.endsWith('...')) {\n      this.variadic = true;\n      this._name = this._name.slice(0, -3);\n    }\n  }\n\n  /**\n   * Return argument name.\n   *\n   * @return {string}\n   */\n\n  name() {\n    return this._name;\n  }\n\n  /**\n   * @package\n   */\n\n  _collectValue(value, previous) {\n    if (previous === this.defaultValue || !Array.isArray(previous)) {\n      return [value];\n    }\n\n    previous.push(value);\n    return previous;\n  }\n\n  /**\n   * Set the default value, and optionally supply the description to be displayed in the help.\n   *\n   * @param {*} value\n   * @param {string} [description]\n   * @return {Argument}\n   */\n\n  default(value, description) {\n    this.defaultValue = value;\n    this.defaultValueDescription = description;\n    return this;\n  }\n\n  /**\n   * Set the custom handler for processing CLI command arguments into argument values.\n   *\n   * @param {Function} [fn]\n   * @return {Argument}\n   */\n\n  argParser(fn) {\n    this.parseArg = fn;\n    return this;\n  }\n\n  /**\n   * Only allow argument value to be one of choices.\n   *\n   * @param {string[]} values\n   * @return {Argument}\n   */\n\n  choices(values) {\n    this.argChoices = values.slice();\n    this.parseArg = (arg, previous) => {\n      if (!this.argChoices.includes(arg)) {\n        throw new InvalidArgumentError(\n          `Allowed choices are ${this.argChoices.join(', ')}.`,\n        );\n      }\n      if (this.variadic) {\n        return this._collectValue(arg, previous);\n      }\n      return arg;\n    };\n    return this;\n  }\n\n  /**\n   * Make argument required.\n   *\n   * @returns {Argument}\n   */\n  argRequired() {\n    this.required = true;\n    return this;\n  }\n\n  /**\n   * Make argument optional.\n   *\n   * @returns {Argument}\n   */\n  argOptional() {\n    this.required = false;\n    return this;\n  }\n}\n\n/**\n * Takes an argument and returns its human readable equivalent for help usage.\n *\n * @param {Argument} arg\n * @return {string}\n * @private\n */\n\nfunction humanReadableArgName(arg) {\n  const nameOutput = arg.name() + (arg.variadic === true ? '...' : '');\n\n  return arg.required ? '<' + nameOutput + '>' : '[' + nameOutput + ']';\n}\n\nexports.Argument = Argument;\nexports.humanReadableArgName = humanReadableArgName;\n", "const { humanReadableArgName } = require('./argument.js');\n\n/**\n * TypeScript import types for JSDoc, used by Visual Studio Code IntelliSense and `npm run typescript-checkJS`\n * https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#import-types\n * @typedef { import(\"./argument.js\").Argument } Argument\n * @typedef { import(\"./command.js\").Command } Command\n * @typedef { import(\"./option.js\").Option } Option\n */\n\n// Although this is a class, methods are static in style to allow override using subclass or just functions.\nclass Help {\n  constructor() {\n    this.helpWidth = undefined;\n    this.minWidthToWrap = 40;\n    this.sortSubcommands = false;\n    this.sortOptions = false;\n    this.showGlobalOptions = false;\n  }\n\n  /**\n   * prepareContext is called by Commander after applying overrides from `Command.configureHelp()`\n   * and just before calling `formatHelp()`.\n   *\n   * Commander just uses the helpWidth and the rest is provided for optional use by more complex subclasses.\n   *\n   * @param {{ error?: boolean, helpWidth?: number, outputHasColors?: boolean }} contextOptions\n   */\n  prepareContext(contextOptions) {\n    this.helpWidth = this.helpWidth ?? contextOptions.helpWidth ?? 80;\n  }\n\n  /**\n   * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.\n   *\n   * @param {Command} cmd\n   * @returns {Command[]}\n   */\n\n  visibleCommands(cmd) {\n    const visibleCommands = cmd.commands.filter((cmd) => !cmd._hidden);\n    const helpCommand = cmd._getHelpCommand();\n    if (helpCommand && !helpCommand._hidden) {\n      visibleCommands.push(helpCommand);\n    }\n    if (this.sortSubcommands) {\n      visibleCommands.sort((a, b) => {\n        // @ts-ignore: because overloaded return type\n        return a.name().localeCompare(b.name());\n      });\n    }\n    return visibleCommands;\n  }\n\n  /**\n   * Compare options for sort.\n   *\n   * @param {Option} a\n   * @param {Option} b\n   * @returns {number}\n   */\n  compareOptions(a, b) {\n    const getSortKey = (option) => {\n      // WYSIWYG for order displayed in help. Short used for comparison if present. No special handling for negated.\n      return option.short\n        ? option.short.replace(/^-/, '')\n        : option.long.replace(/^--/, '');\n    };\n    return getSortKey(a).localeCompare(getSortKey(b));\n  }\n\n  /**\n   * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.\n   *\n   * @param {Command} cmd\n   * @returns {Option[]}\n   */\n\n  visibleOptions(cmd) {\n    const visibleOptions = cmd.options.filter((option) => !option.hidden);\n    // Built-in help option.\n    const helpOption = cmd._getHelpOption();\n    if (helpOption && !helpOption.hidden) {\n      // Automatically hide conflicting flags. Bit dubious but a historical behaviour that is convenient for single-command programs.\n      const removeShort = helpOption.short && cmd._findOption(helpOption.short);\n      const removeLong = helpOption.long && cmd._findOption(helpOption.long);\n      if (!removeShort && !removeLong) {\n        visibleOptions.push(helpOption); // no changes needed\n      } else if (helpOption.long && !removeLong) {\n        visibleOptions.push(\n          cmd.createOption(helpOption.long, helpOption.description),\n        );\n      } else if (helpOption.short && !removeShort) {\n        visibleOptions.push(\n          cmd.createOption(helpOption.short, helpOption.description),\n        );\n      }\n    }\n    if (this.sortOptions) {\n      visibleOptions.sort(this.compareOptions);\n    }\n    return visibleOptions;\n  }\n\n  /**\n   * Get an array of the visible global options. (Not including help.)\n   *\n   * @param {Command} cmd\n   * @returns {Option[]}\n   */\n\n  visibleGlobalOptions(cmd) {\n    if (!this.showGlobalOptions) return [];\n\n    const globalOptions = [];\n    for (\n      let ancestorCmd = cmd.parent;\n      ancestorCmd;\n      ancestorCmd = ancestorCmd.parent\n    ) {\n      const visibleOptions = ancestorCmd.options.filter(\n        (option) => !option.hidden,\n      );\n      globalOptions.push(...visibleOptions);\n    }\n    if (this.sortOptions) {\n      globalOptions.sort(this.compareOptions);\n    }\n    return globalOptions;\n  }\n\n  /**\n   * Get an array of the arguments if any have a description.\n   *\n   * @param {Command} cmd\n   * @returns {Argument[]}\n   */\n\n  visibleArguments(cmd) {\n    // Side effect! Apply the legacy descriptions before the arguments are displayed.\n    if (cmd._argsDescription) {\n      cmd.registeredArguments.forEach((argument) => {\n        argument.description =\n          argument.description || cmd._argsDescription[argument.name()] || '';\n      });\n    }\n\n    // If there are any arguments with a description then return all the arguments.\n    if (cmd.registeredArguments.find((argument) => argument.description)) {\n      return cmd.registeredArguments;\n    }\n    return [];\n  }\n\n  /**\n   * Get the command term to show in the list of subcommands.\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  subcommandTerm(cmd) {\n    // Legacy. Ignores custom usage string, and nested commands.\n    const args = cmd.registeredArguments\n      .map((arg) => humanReadableArgName(arg))\n      .join(' ');\n    return (\n      cmd._name +\n      (cmd._aliases[0] ? '|' + cmd._aliases[0] : '') +\n      (cmd.options.length ? ' [options]' : '') + // simplistic check for non-help option\n      (args ? ' ' + args : '')\n    );\n  }\n\n  /**\n   * Get the option term to show in the list of options.\n   *\n   * @param {Option} option\n   * @returns {string}\n   */\n\n  optionTerm(option) {\n    return option.flags;\n  }\n\n  /**\n   * Get the argument term to show in the list of arguments.\n   *\n   * @param {Argument} argument\n   * @returns {string}\n   */\n\n  argumentTerm(argument) {\n    return argument.name();\n  }\n\n  /**\n   * Get the longest command term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestSubcommandTermLength(cmd, helper) {\n    return helper.visibleCommands(cmd).reduce((max, command) => {\n      return Math.max(\n        max,\n        this.displayWidth(\n          helper.styleSubcommandTerm(helper.subcommandTerm(command)),\n        ),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the longest option term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestOptionTermLength(cmd, helper) {\n    return helper.visibleOptions(cmd).reduce((max, option) => {\n      return Math.max(\n        max,\n        this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option))),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the longest global option term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestGlobalOptionTermLength(cmd, helper) {\n    return helper.visibleGlobalOptions(cmd).reduce((max, option) => {\n      return Math.max(\n        max,\n        this.displayWidth(helper.styleOptionTerm(helper.optionTerm(option))),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the longest argument term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  longestArgumentTermLength(cmd, helper) {\n    return helper.visibleArguments(cmd).reduce((max, argument) => {\n      return Math.max(\n        max,\n        this.displayWidth(\n          helper.styleArgumentTerm(helper.argumentTerm(argument)),\n        ),\n      );\n    }, 0);\n  }\n\n  /**\n   * Get the command usage to be displayed at the top of the built-in help.\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  commandUsage(cmd) {\n    // Usage\n    let cmdName = cmd._name;\n    if (cmd._aliases[0]) {\n      cmdName = cmdName + '|' + cmd._aliases[0];\n    }\n    let ancestorCmdNames = '';\n    for (\n      let ancestorCmd = cmd.parent;\n      ancestorCmd;\n      ancestorCmd = ancestorCmd.parent\n    ) {\n      ancestorCmdNames = ancestorCmd.name() + ' ' + ancestorCmdNames;\n    }\n    return ancestorCmdNames + cmdName + ' ' + cmd.usage();\n  }\n\n  /**\n   * Get the description for the command.\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  commandDescription(cmd) {\n    // @ts-ignore: because overloaded return type\n    return cmd.description();\n  }\n\n  /**\n   * Get the subcommand summary to show in the list of subcommands.\n   * (Fallback to description for backwards compatibility.)\n   *\n   * @param {Command} cmd\n   * @returns {string}\n   */\n\n  subcommandDescription(cmd) {\n    // @ts-ignore: because overloaded return type\n    return cmd.summary() || cmd.description();\n  }\n\n  /**\n   * Get the option description to show in the list of options.\n   *\n   * @param {Option} option\n   * @return {string}\n   */\n\n  optionDescription(option) {\n    const extraInfo = [];\n\n    if (option.argChoices) {\n      extraInfo.push(\n        // use stringify to match the display of the default value\n        `choices: ${option.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`,\n      );\n    }\n    if (option.defaultValue !== undefined) {\n      // default for boolean and negated more for programmer than end user,\n      // but show true/false for boolean option as may be for hand-rolled env or config processing.\n      const showDefault =\n        option.required ||\n        option.optional ||\n        (option.isBoolean() && typeof option.defaultValue === 'boolean');\n      if (showDefault) {\n        extraInfo.push(\n          `default: ${option.defaultValueDescription || JSON.stringify(option.defaultValue)}`,\n        );\n      }\n    }\n    // preset for boolean and negated are more for programmer than end user\n    if (option.presetArg !== undefined && option.optional) {\n      extraInfo.push(`preset: ${JSON.stringify(option.presetArg)}`);\n    }\n    if (option.envVar !== undefined) {\n      extraInfo.push(`env: ${option.envVar}`);\n    }\n    if (extraInfo.length > 0) {\n      const extraDescription = `(${extraInfo.join(', ')})`;\n      if (option.description) {\n        return `${option.description} ${extraDescription}`;\n      }\n      return extraDescription;\n    }\n\n    return option.description;\n  }\n\n  /**\n   * Get the argument description to show in the list of arguments.\n   *\n   * @param {Argument} argument\n   * @return {string}\n   */\n\n  argumentDescription(argument) {\n    const extraInfo = [];\n    if (argument.argChoices) {\n      extraInfo.push(\n        // use stringify to match the display of the default value\n        `choices: ${argument.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`,\n      );\n    }\n    if (argument.defaultValue !== undefined) {\n      extraInfo.push(\n        `default: ${argument.defaultValueDescription || JSON.stringify(argument.defaultValue)}`,\n      );\n    }\n    if (extraInfo.length > 0) {\n      const extraDescription = `(${extraInfo.join(', ')})`;\n      if (argument.description) {\n        return `${argument.description} ${extraDescription}`;\n      }\n      return extraDescription;\n    }\n    return argument.description;\n  }\n\n  /**\n   * Format a list of items, given a heading and an array of formatted items.\n   *\n   * @param {string} heading\n   * @param {string[]} items\n   * @param {Help} helper\n   * @returns string[]\n   */\n  formatItemList(heading, items, helper) {\n    if (items.length === 0) return [];\n\n    return [helper.styleTitle(heading), ...items, ''];\n  }\n\n  /**\n   * Group items by their help group heading.\n   *\n   * @param {Command[] | Option[]} unsortedItems\n   * @param {Command[] | Option[]} visibleItems\n   * @param {Function} getGroup\n   * @returns {Map<string, Command[] | Option[]>}\n   */\n  groupItems(unsortedItems, visibleItems, getGroup) {\n    const result = new Map();\n    // Add groups in order of appearance in unsortedItems.\n    unsortedItems.forEach((item) => {\n      const group = getGroup(item);\n      if (!result.has(group)) result.set(group, []);\n    });\n    // Add items in order of appearance in visibleItems.\n    visibleItems.forEach((item) => {\n      const group = getGroup(item);\n      if (!result.has(group)) {\n        result.set(group, []);\n      }\n      result.get(group).push(item);\n    });\n    return result;\n  }\n\n  /**\n   * Generate the built-in help text.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {string}\n   */\n\n  formatHelp(cmd, helper) {\n    const termWidth = helper.padWidth(cmd, helper);\n    const helpWidth = helper.helpWidth ?? 80; // in case prepareContext() was not called\n\n    function callFormatItem(term, description) {\n      return helper.formatItem(term, termWidth, description, helper);\n    }\n\n    // Usage\n    let output = [\n      `${helper.styleTitle('Usage:')} ${helper.styleUsage(helper.commandUsage(cmd))}`,\n      '',\n    ];\n\n    // Description\n    const commandDescription = helper.commandDescription(cmd);\n    if (commandDescription.length > 0) {\n      output = output.concat([\n        helper.boxWrap(\n          helper.styleCommandDescription(commandDescription),\n          helpWidth,\n        ),\n        '',\n      ]);\n    }\n\n    // Arguments\n    const argumentList = helper.visibleArguments(cmd).map((argument) => {\n      return callFormatItem(\n        helper.styleArgumentTerm(helper.argumentTerm(argument)),\n        helper.styleArgumentDescription(helper.argumentDescription(argument)),\n      );\n    });\n    output = output.concat(\n      this.formatItemList('Arguments:', argumentList, helper),\n    );\n\n    // Options\n    const optionGroups = this.groupItems(\n      cmd.options,\n      helper.visibleOptions(cmd),\n      (option) => option.helpGroupHeading ?? 'Options:',\n    );\n    optionGroups.forEach((options, group) => {\n      const optionList = options.map((option) => {\n        return callFormatItem(\n          helper.styleOptionTerm(helper.optionTerm(option)),\n          helper.styleOptionDescription(helper.optionDescription(option)),\n        );\n      });\n      output = output.concat(this.formatItemList(group, optionList, helper));\n    });\n\n    if (helper.showGlobalOptions) {\n      const globalOptionList = helper\n        .visibleGlobalOptions(cmd)\n        .map((option) => {\n          return callFormatItem(\n            helper.styleOptionTerm(helper.optionTerm(option)),\n            helper.styleOptionDescription(helper.optionDescription(option)),\n          );\n        });\n      output = output.concat(\n        this.formatItemList('Global Options:', globalOptionList, helper),\n      );\n    }\n\n    // Commands\n    const commandGroups = this.groupItems(\n      cmd.commands,\n      helper.visibleCommands(cmd),\n      (sub) => sub.helpGroup() || 'Commands:',\n    );\n    commandGroups.forEach((commands, group) => {\n      const commandList = commands.map((sub) => {\n        return callFormatItem(\n          helper.styleSubcommandTerm(helper.subcommandTerm(sub)),\n          helper.styleSubcommandDescription(helper.subcommandDescription(sub)),\n        );\n      });\n      output = output.concat(this.formatItemList(group, commandList, helper));\n    });\n\n    return output.join('\\n');\n  }\n\n  /**\n   * Return display width of string, ignoring ANSI escape sequences. Used in padding and wrapping calculations.\n   *\n   * @param {string} str\n   * @returns {number}\n   */\n  displayWidth(str) {\n    return stripColor(str).length;\n  }\n\n  /**\n   * Style the title for displaying in the help. Called with 'Usage:', 'Options:', etc.\n   *\n   * @param {string} str\n   * @returns {string}\n   */\n  styleTitle(str) {\n    return str;\n  }\n\n  styleUsage(str) {\n    // Usage has lots of parts the user might like to color separately! Assume default usage string which is formed like:\n    //    command subcommand [options] [command] <foo> [bar]\n    return str\n      .split(' ')\n      .map((word) => {\n        if (word === '[options]') return this.styleOptionText(word);\n        if (word === '[command]') return this.styleSubcommandText(word);\n        if (word[0] === '[' || word[0] === '<')\n          return this.styleArgumentText(word);\n        return this.styleCommandText(word); // Restrict to initial words?\n      })\n      .join(' ');\n  }\n  styleCommandDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleOptionDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleSubcommandDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleArgumentDescription(str) {\n    return this.styleDescriptionText(str);\n  }\n  styleDescriptionText(str) {\n    return str;\n  }\n  styleOptionTerm(str) {\n    return this.styleOptionText(str);\n  }\n  styleSubcommandTerm(str) {\n    // This is very like usage with lots of parts! Assume default string which is formed like:\n    //    subcommand [options] <foo> [bar]\n    return str\n      .split(' ')\n      .map((word) => {\n        if (word === '[options]') return this.styleOptionText(word);\n        if (word[0] === '[' || word[0] === '<')\n          return this.styleArgumentText(word);\n        return this.styleSubcommandText(word); // Restrict to initial words?\n      })\n      .join(' ');\n  }\n  styleArgumentTerm(str) {\n    return this.styleArgumentText(str);\n  }\n  styleOptionText(str) {\n    return str;\n  }\n  styleArgumentText(str) {\n    return str;\n  }\n  styleSubcommandText(str) {\n    return str;\n  }\n  styleCommandText(str) {\n    return str;\n  }\n\n  /**\n   * Calculate the pad width from the maximum term length.\n   *\n   * @param {Command} cmd\n   * @param {Help} helper\n   * @returns {number}\n   */\n\n  padWidth(cmd, helper) {\n    return Math.max(\n      helper.longestOptionTermLength(cmd, helper),\n      helper.longestGlobalOptionTermLength(cmd, helper),\n      helper.longestSubcommandTermLength(cmd, helper),\n      helper.longestArgumentTermLength(cmd, helper),\n    );\n  }\n\n  /**\n   * Detect manually wrapped and indented strings by checking for line break followed by whitespace.\n   *\n   * @param {string} str\n   * @returns {boolean}\n   */\n  preformatted(str) {\n    return /\\n[^\\S\\r\\n]/.test(str);\n  }\n\n  /**\n   * Format the \"item\", which consists of a term and description. Pad the term and wrap the description, indenting the following lines.\n   *\n   * So \"TTT\", 5, \"DDD DDDD DD DDD\" might be formatted for this.helpWidth=17 like so:\n   *   TTT  DDD DDDD\n   *        DD DDD\n   *\n   * @param {string} term\n   * @param {number} termWidth\n   * @param {string} description\n   * @param {Help} helper\n   * @returns {string}\n   */\n  formatItem(term, termWidth, description, helper) {\n    const itemIndent = 2;\n    const itemIndentStr = ' '.repeat(itemIndent);\n    if (!description) return itemIndentStr + term;\n\n    // Pad the term out to a consistent width, so descriptions are aligned.\n    const paddedTerm = term.padEnd(\n      termWidth + term.length - helper.displayWidth(term),\n    );\n\n    // Format the description.\n    const spacerWidth = 2; // between term and description\n    const helpWidth = this.helpWidth ?? 80; // in case prepareContext() was not called\n    const remainingWidth = helpWidth - termWidth - spacerWidth - itemIndent;\n    let formattedDescription;\n    if (\n      remainingWidth < this.minWidthToWrap ||\n      helper.preformatted(description)\n    ) {\n      formattedDescription = description;\n    } else {\n      const wrappedDescription = helper.boxWrap(description, remainingWidth);\n      formattedDescription = wrappedDescription.replace(\n        /\\n/g,\n        '\\n' + ' '.repeat(termWidth + spacerWidth),\n      );\n    }\n\n    // Construct and overall indent.\n    return (\n      itemIndentStr +\n      paddedTerm +\n      ' '.repeat(spacerWidth) +\n      formattedDescription.replace(/\\n/g, `\\n${itemIndentStr}`)\n    );\n  }\n\n  /**\n   * Wrap a string at whitespace, preserving existing line breaks.\n   * Wrapping is skipped if the width is less than `minWidthToWrap`.\n   *\n   * @param {string} str\n   * @param {number} width\n   * @returns {string}\n   */\n  boxWrap(str, width) {\n    if (width < this.minWidthToWrap) return str;\n\n    const rawLines = str.split(/\\r\\n|\\n/);\n    // split up text by whitespace\n    const chunkPattern = /[\\s]*[^\\s]+/g;\n    const wrappedLines = [];\n    rawLines.forEach((line) => {\n      const chunks = line.match(chunkPattern);\n      if (chunks === null) {\n        wrappedLines.push('');\n        return;\n      }\n\n      let sumChunks = [chunks.shift()];\n      let sumWidth = this.displayWidth(sumChunks[0]);\n      chunks.forEach((chunk) => {\n        const visibleWidth = this.displayWidth(chunk);\n        // Accumulate chunks while they fit into width.\n        if (sumWidth + visibleWidth <= width) {\n          sumChunks.push(chunk);\n          sumWidth += visibleWidth;\n          return;\n        }\n        wrappedLines.push(sumChunks.join(''));\n\n        const nextChunk = chunk.trimStart(); // trim space at line break\n        sumChunks = [nextChunk];\n        sumWidth = this.displayWidth(nextChunk);\n      });\n      wrappedLines.push(sumChunks.join(''));\n    });\n\n    return wrappedLines.join('\\n');\n  }\n}\n\n/**\n * Strip style ANSI escape sequences from the string. In particular, SGR (Select Graphic Rendition) codes.\n *\n * @param {string} str\n * @returns {string}\n * @package\n */\n\nfunction stripColor(str) {\n  // eslint-disable-next-line no-control-regex\n  const sgrPattern = /\\x1b\\[\\d*(;\\d*)*m/g;\n  return str.replace(sgrPattern, '');\n}\n\nexports.Help = Help;\nexports.stripColor = stripColor;\n", "const { InvalidArgumentError } = require('./error.js');\n\nclass Option {\n  /**\n   * Initialize a new `Option` with the given `flags` and `description`.\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   */\n\n  constructor(flags, description) {\n    this.flags = flags;\n    this.description = description || '';\n\n    this.required = flags.includes('<'); // A value must be supplied when the option is specified.\n    this.optional = flags.includes('['); // A value is optional when the option is specified.\n    // variadic test ignores <value,...> et al which might be used to describe custom splitting of single argument\n    this.variadic = /\\w\\.\\.\\.[>\\]]$/.test(flags); // The option can take multiple values.\n    this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line.\n    const optionFlags = splitOptionFlags(flags);\n    this.short = optionFlags.shortFlag; // May be a short flag, undefined, or even a long flag (if option has two long flags).\n    this.long = optionFlags.longFlag;\n    this.negate = false;\n    if (this.long) {\n      this.negate = this.long.startsWith('--no-');\n    }\n    this.defaultValue = undefined;\n    this.defaultValueDescription = undefined;\n    this.presetArg = undefined;\n    this.envVar = undefined;\n    this.parseArg = undefined;\n    this.hidden = false;\n    this.argChoices = undefined;\n    this.conflictsWith = [];\n    this.implied = undefined;\n    this.helpGroupHeading = undefined; // soft initialised when option added to command\n  }\n\n  /**\n   * Set the default value, and optionally supply the description to be displayed in the help.\n   *\n   * @param {*} value\n   * @param {string} [description]\n   * @return {Option}\n   */\n\n  default(value, description) {\n    this.defaultValue = value;\n    this.defaultValueDescription = description;\n    return this;\n  }\n\n  /**\n   * Preset to use when option used without option-argument, especially optional but also boolean and negated.\n   * The custom processing (parseArg) is called.\n   *\n   * @example\n   * new Option('--color').default('GREYSCALE').preset('RGB');\n   * new Option('--donate [amount]').preset('20').argParser(parseFloat);\n   *\n   * @param {*} arg\n   * @return {Option}\n   */\n\n  preset(arg) {\n    this.presetArg = arg;\n    return this;\n  }\n\n  /**\n   * Add option name(s) that conflict with this option.\n   * An error will be displayed if conflicting options are found during parsing.\n   *\n   * @example\n   * new Option('--rgb').conflicts('cmyk');\n   * new Option('--js').conflicts(['ts', 'jsx']);\n   *\n   * @param {(string | string[])} names\n   * @return {Option}\n   */\n\n  conflicts(names) {\n    this.conflictsWith = this.conflictsWith.concat(names);\n    return this;\n  }\n\n  /**\n   * Specify implied option values for when this option is set and the implied options are not.\n   *\n   * The custom processing (parseArg) is not called on the implied values.\n   *\n   * @example\n   * program\n   *   .addOption(new Option('--log', 'write logging information to file'))\n   *   .addOption(new Option('--trace', 'log extra details').implies({ log: 'trace.txt' }));\n   *\n   * @param {object} impliedOptionValues\n   * @return {Option}\n   */\n  implies(impliedOptionValues) {\n    let newImplied = impliedOptionValues;\n    if (typeof impliedOptionValues === 'string') {\n      // string is not documented, but easy mistake and we can do what user probably intended.\n      newImplied = { [impliedOptionValues]: true };\n    }\n    this.implied = Object.assign(this.implied || {}, newImplied);\n    return this;\n  }\n\n  /**\n   * Set environment variable to check for option value.\n   *\n   * An environment variable is only used if when processed the current option value is\n   * undefined, or the source of the current value is 'default' or 'config' or 'env'.\n   *\n   * @param {string} name\n   * @return {Option}\n   */\n\n  env(name) {\n    this.envVar = name;\n    return this;\n  }\n\n  /**\n   * Set the custom handler for processing CLI option arguments into option values.\n   *\n   * @param {Function} [fn]\n   * @return {Option}\n   */\n\n  argParser(fn) {\n    this.parseArg = fn;\n    return this;\n  }\n\n  /**\n   * Whether the option is mandatory and must have a value after parsing.\n   *\n   * @param {boolean} [mandatory=true]\n   * @return {Option}\n   */\n\n  makeOptionMandatory(mandatory = true) {\n    this.mandatory = !!mandatory;\n    return this;\n  }\n\n  /**\n   * Hide option in help.\n   *\n   * @param {boolean} [hide=true]\n   * @return {Option}\n   */\n\n  hideHelp(hide = true) {\n    this.hidden = !!hide;\n    return this;\n  }\n\n  /**\n   * @package\n   */\n\n  _collectValue(value, previous) {\n    if (previous === this.defaultValue || !Array.isArray(previous)) {\n      return [value];\n    }\n\n    previous.push(value);\n    return previous;\n  }\n\n  /**\n   * Only allow option value to be one of choices.\n   *\n   * @param {string[]} values\n   * @return {Option}\n   */\n\n  choices(values) {\n    this.argChoices = values.slice();\n    this.parseArg = (arg, previous) => {\n      if (!this.argChoices.includes(arg)) {\n        throw new InvalidArgumentError(\n          `Allowed choices are ${this.argChoices.join(', ')}.`,\n        );\n      }\n      if (this.variadic) {\n        return this._collectValue(arg, previous);\n      }\n      return arg;\n    };\n    return this;\n  }\n\n  /**\n   * Return option name.\n   *\n   * @return {string}\n   */\n\n  name() {\n    if (this.long) {\n      return this.long.replace(/^--/, '');\n    }\n    return this.short.replace(/^-/, '');\n  }\n\n  /**\n   * Return option name, in a camelcase format that can be used\n   * as an object attribute key.\n   *\n   * @return {string}\n   */\n\n  attributeName() {\n    if (this.negate) {\n      return camelcase(this.name().replace(/^no-/, ''));\n    }\n    return camelcase(this.name());\n  }\n\n  /**\n   * Set the help group heading.\n   *\n   * @param {string} heading\n   * @return {Option}\n   */\n  helpGroup(heading) {\n    this.helpGroupHeading = heading;\n    return this;\n  }\n\n  /**\n   * Check if `arg` matches the short or long flag.\n   *\n   * @param {string} arg\n   * @return {boolean}\n   * @package\n   */\n\n  is(arg) {\n    return this.short === arg || this.long === arg;\n  }\n\n  /**\n   * Return whether a boolean option.\n   *\n   * Options are one of boolean, negated, required argument, or optional argument.\n   *\n   * @return {boolean}\n   * @package\n   */\n\n  isBoolean() {\n    return !this.required && !this.optional && !this.negate;\n  }\n}\n\n/**\n * This class is to make it easier to work with dual options, without changing the existing\n * implementation. We support separate dual options for separate positive and negative options,\n * like `--build` and `--no-build`, which share a single option value. This works nicely for some\n * use cases, but is tricky for others where we want separate behaviours despite\n * the single shared option value.\n */\nclass DualOptions {\n  /**\n   * @param {Option[]} options\n   */\n  constructor(options) {\n    this.positiveOptions = new Map();\n    this.negativeOptions = new Map();\n    this.dualOptions = new Set();\n    options.forEach((option) => {\n      if (option.negate) {\n        this.negativeOptions.set(option.attributeName(), option);\n      } else {\n        this.positiveOptions.set(option.attributeName(), option);\n      }\n    });\n    this.negativeOptions.forEach((value, key) => {\n      if (this.positiveOptions.has(key)) {\n        this.dualOptions.add(key);\n      }\n    });\n  }\n\n  /**\n   * Did the value come from the option, and not from possible matching dual option?\n   *\n   * @param {*} value\n   * @param {Option} option\n   * @returns {boolean}\n   */\n  valueFromOption(value, option) {\n    const optionKey = option.attributeName();\n    if (!this.dualOptions.has(optionKey)) return true;\n\n    // Use the value to deduce if (probably) came from the option.\n    const preset = this.negativeOptions.get(optionKey).presetArg;\n    const negativeValue = preset !== undefined ? preset : false;\n    return option.negate === (negativeValue === value);\n  }\n}\n\n/**\n * Convert string from kebab-case to camelCase.\n *\n * @param {string} str\n * @return {string}\n * @private\n */\n\nfunction camelcase(str) {\n  return str.split('-').reduce((str, word) => {\n    return str + word[0].toUpperCase() + word.slice(1);\n  });\n}\n\n/**\n * Split the short and long flag out of something like '-m,--mixed <value>'\n *\n * @private\n */\n\nfunction splitOptionFlags(flags) {\n  let shortFlag;\n  let longFlag;\n  // short flag, single dash and single character\n  const shortFlagExp = /^-[^-]$/;\n  // long flag, double dash and at least one character\n  const longFlagExp = /^--[^-]/;\n\n  const flagParts = flags.split(/[ |,]+/).concat('guard');\n  // Normal is short and/or long.\n  if (shortFlagExp.test(flagParts[0])) shortFlag = flagParts.shift();\n  if (longFlagExp.test(flagParts[0])) longFlag = flagParts.shift();\n  // Long then short. Rarely used but fine.\n  if (!shortFlag && shortFlagExp.test(flagParts[0]))\n    shortFlag = flagParts.shift();\n  // Allow two long flags, like '--ws, --workspace'\n  // This is the supported way to have a shortish option flag.\n  if (!shortFlag && longFlagExp.test(flagParts[0])) {\n    shortFlag = longFlag;\n    longFlag = flagParts.shift();\n  }\n\n  // Check for unprocessed flag. Fail noisily rather than silently ignore.\n  if (flagParts[0].startsWith('-')) {\n    const unsupportedFlag = flagParts[0];\n    const baseError = `option creation failed due to '${unsupportedFlag}' in option flags '${flags}'`;\n    if (/^-[^-][^-]/.test(unsupportedFlag))\n      throw new Error(\n        `${baseError}\n- a short flag is a single dash and a single character\n  - either use a single dash and a single character (for a short flag)\n  - or use a double dash for a long option (and can have two, like '--ws, --workspace')`,\n      );\n    if (shortFlagExp.test(unsupportedFlag))\n      throw new Error(`${baseError}\n- too many short flags`);\n    if (longFlagExp.test(unsupportedFlag))\n      throw new Error(`${baseError}\n- too many long flags`);\n\n    throw new Error(`${baseError}\n- unrecognised flag format`);\n  }\n  if (shortFlag === undefined && longFlag === undefined)\n    throw new Error(\n      `option creation failed due to no flags found in '${flags}'.`,\n    );\n\n  return { shortFlag, longFlag };\n}\n\nexports.Option = Option;\nexports.DualOptions = DualOptions;\n", "const maxDistance = 3;\n\nfunction editDistance(a, b) {\n  // https://en.wikipedia.org/wiki/Damerau\u2013Levenshtein_distance\n  // Calculating optimal string alignment distance, no substring is edited more than once.\n  // (Simple implementation.)\n\n  // Quick early exit, return worst case.\n  if (Math.abs(a.length - b.length) > maxDistance)\n    return Math.max(a.length, b.length);\n\n  // distance between prefix substrings of a and b\n  const d = [];\n\n  // pure deletions turn a into empty string\n  for (let i = 0; i <= a.length; i++) {\n    d[i] = [i];\n  }\n  // pure insertions turn empty string into b\n  for (let j = 0; j <= b.length; j++) {\n    d[0][j] = j;\n  }\n\n  // fill matrix\n  for (let j = 1; j <= b.length; j++) {\n    for (let i = 1; i <= a.length; i++) {\n      let cost = 1;\n      if (a[i - 1] === b[j - 1]) {\n        cost = 0;\n      } else {\n        cost = 1;\n      }\n      d[i][j] = Math.min(\n        d[i - 1][j] + 1, // deletion\n        d[i][j - 1] + 1, // insertion\n        d[i - 1][j - 1] + cost, // substitution\n      );\n      // transposition\n      if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {\n        d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + 1);\n      }\n    }\n  }\n\n  return d[a.length][b.length];\n}\n\n/**\n * Find close matches, restricted to same number of edits.\n *\n * @param {string} word\n * @param {string[]} candidates\n * @returns {string}\n */\n\nfunction suggestSimilar(word, candidates) {\n  if (!candidates || candidates.length === 0) return '';\n  // remove possible duplicates\n  candidates = Array.from(new Set(candidates));\n\n  const searchingOptions = word.startsWith('--');\n  if (searchingOptions) {\n    word = word.slice(2);\n    candidates = candidates.map((candidate) => candidate.slice(2));\n  }\n\n  let similar = [];\n  let bestDistance = maxDistance;\n  const minSimilarity = 0.4;\n  candidates.forEach((candidate) => {\n    if (candidate.length <= 1) return; // no one character guesses\n\n    const distance = editDistance(word, candidate);\n    const length = Math.max(word.length, candidate.length);\n    const similarity = (length - distance) / length;\n    if (similarity > minSimilarity) {\n      if (distance < bestDistance) {\n        // better edit distance, throw away previous worse matches\n        bestDistance = distance;\n        similar = [candidate];\n      } else if (distance === bestDistance) {\n        similar.push(candidate);\n      }\n    }\n  });\n\n  similar.sort((a, b) => a.localeCompare(b));\n  if (searchingOptions) {\n    similar = similar.map((candidate) => `--${candidate}`);\n  }\n\n  if (similar.length > 1) {\n    return `\\n(Did you mean one of ${similar.join(', ')}?)`;\n  }\n  if (similar.length === 1) {\n    return `\\n(Did you mean ${similar[0]}?)`;\n  }\n  return '';\n}\n\nexports.suggestSimilar = suggestSimilar;\n", "const EventEmitter = require('node:events').EventEmitter;\nconst childProcess = require('node:child_process');\nconst path = require('node:path');\nconst fs = require('node:fs');\nconst process = require('node:process');\n\nconst { Argument, humanReadableArgName } = require('./argument.js');\nconst { CommanderError } = require('./error.js');\nconst { Help, stripColor } = require('./help.js');\nconst { Option, DualOptions } = require('./option.js');\nconst { suggestSimilar } = require('./suggestSimilar');\n\nclass Command extends EventEmitter {\n  /**\n   * Initialize a new `Command`.\n   *\n   * @param {string} [name]\n   */\n\n  constructor(name) {\n    super();\n    /** @type {Command[]} */\n    this.commands = [];\n    /** @type {Option[]} */\n    this.options = [];\n    this.parent = null;\n    this._allowUnknownOption = false;\n    this._allowExcessArguments = false;\n    /** @type {Argument[]} */\n    this.registeredArguments = [];\n    this._args = this.registeredArguments; // deprecated old name\n    /** @type {string[]} */\n    this.args = []; // cli args with options removed\n    this.rawArgs = [];\n    this.processedArgs = []; // like .args but after custom processing and collecting variadic\n    this._scriptPath = null;\n    this._name = name || '';\n    this._optionValues = {};\n    this._optionValueSources = {}; // default, env, cli etc\n    this._storeOptionsAsProperties = false;\n    this._actionHandler = null;\n    this._executableHandler = false;\n    this._executableFile = null; // custom name for executable\n    this._executableDir = null; // custom search directory for subcommands\n    this._defaultCommandName = null;\n    this._exitCallback = null;\n    this._aliases = [];\n    this._combineFlagAndOptionalValue = true;\n    this._description = '';\n    this._summary = '';\n    this._argsDescription = undefined; // legacy\n    this._enablePositionalOptions = false;\n    this._passThroughOptions = false;\n    this._lifeCycleHooks = {}; // a hash of arrays\n    /** @type {(boolean | string)} */\n    this._showHelpAfterError = false;\n    this._showSuggestionAfterError = true;\n    this._savedState = null; // used in save/restoreStateBeforeParse\n\n    // see configureOutput() for docs\n    this._outputConfiguration = {\n      writeOut: (str) => process.stdout.write(str),\n      writeErr: (str) => process.stderr.write(str),\n      outputError: (str, write) => write(str),\n      getOutHelpWidth: () =>\n        process.stdout.isTTY ? process.stdout.columns : undefined,\n      getErrHelpWidth: () =>\n        process.stderr.isTTY ? process.stderr.columns : undefined,\n      getOutHasColors: () =>\n        useColor() ?? (process.stdout.isTTY && process.stdout.hasColors?.()),\n      getErrHasColors: () =>\n        useColor() ?? (process.stderr.isTTY && process.stderr.hasColors?.()),\n      stripColor: (str) => stripColor(str),\n    };\n\n    this._hidden = false;\n    /** @type {(Option | null | undefined)} */\n    this._helpOption = undefined; // Lazy created on demand. May be null if help option is disabled.\n    this._addImplicitHelpCommand = undefined; // undecided whether true or false yet, not inherited\n    /** @type {Command} */\n    this._helpCommand = undefined; // lazy initialised, inherited\n    this._helpConfiguration = {};\n    /** @type {string | undefined} */\n    this._helpGroupHeading = undefined; // soft initialised when added to parent\n    /** @type {string | undefined} */\n    this._defaultCommandGroup = undefined;\n    /** @type {string | undefined} */\n    this._defaultOptionGroup = undefined;\n  }\n\n  /**\n   * Copy settings that are useful to have in common across root command and subcommands.\n   *\n   * (Used internally when adding a command using `.command()` so subcommands inherit parent settings.)\n   *\n   * @param {Command} sourceCommand\n   * @return {Command} `this` command for chaining\n   */\n  copyInheritedSettings(sourceCommand) {\n    this._outputConfiguration = sourceCommand._outputConfiguration;\n    this._helpOption = sourceCommand._helpOption;\n    this._helpCommand = sourceCommand._helpCommand;\n    this._helpConfiguration = sourceCommand._helpConfiguration;\n    this._exitCallback = sourceCommand._exitCallback;\n    this._storeOptionsAsProperties = sourceCommand._storeOptionsAsProperties;\n    this._combineFlagAndOptionalValue =\n      sourceCommand._combineFlagAndOptionalValue;\n    this._allowExcessArguments = sourceCommand._allowExcessArguments;\n    this._enablePositionalOptions = sourceCommand._enablePositionalOptions;\n    this._showHelpAfterError = sourceCommand._showHelpAfterError;\n    this._showSuggestionAfterError = sourceCommand._showSuggestionAfterError;\n\n    return this;\n  }\n\n  /**\n   * @returns {Command[]}\n   * @private\n   */\n\n  _getCommandAndAncestors() {\n    const result = [];\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    for (let command = this; command; command = command.parent) {\n      result.push(command);\n    }\n    return result;\n  }\n\n  /**\n   * Define a command.\n   *\n   * There are two styles of command: pay attention to where to put the description.\n   *\n   * @example\n   * // Command implemented using action handler (description is supplied separately to `.command`)\n   * program\n   *   .command('clone <source> [destination]')\n   *   .description('clone a repository into a newly created directory')\n   *   .action((source, destination) => {\n   *     console.log('clone command called');\n   *   });\n   *\n   * // Command implemented using separate executable file (description is second parameter to `.command`)\n   * program\n   *   .command('start <service>', 'start named service')\n   *   .command('stop [service]', 'stop named service, or all if no name supplied');\n   *\n   * @param {string} nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`\n   * @param {(object | string)} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable)\n   * @param {object} [execOpts] - configuration options (for executable)\n   * @return {Command} returns new command for action handler, or `this` for executable command\n   */\n\n  command(nameAndArgs, actionOptsOrExecDesc, execOpts) {\n    let desc = actionOptsOrExecDesc;\n    let opts = execOpts;\n    if (typeof desc === 'object' && desc !== null) {\n      opts = desc;\n      desc = null;\n    }\n    opts = opts || {};\n    const [, name, args] = nameAndArgs.match(/([^ ]+) *(.*)/);\n\n    const cmd = this.createCommand(name);\n    if (desc) {\n      cmd.description(desc);\n      cmd._executableHandler = true;\n    }\n    if (opts.isDefault) this._defaultCommandName = cmd._name;\n    cmd._hidden = !!(opts.noHelp || opts.hidden); // noHelp is deprecated old name for hidden\n    cmd._executableFile = opts.executableFile || null; // Custom name for executable file, set missing to null to match constructor\n    if (args) cmd.arguments(args);\n    this._registerCommand(cmd);\n    cmd.parent = this;\n    cmd.copyInheritedSettings(this);\n\n    if (desc) return this;\n    return cmd;\n  }\n\n  /**\n   * Factory routine to create a new unattached command.\n   *\n   * See .command() for creating an attached subcommand, which uses this routine to\n   * create the command. You can override createCommand to customise subcommands.\n   *\n   * @param {string} [name]\n   * @return {Command} new command\n   */\n\n  createCommand(name) {\n    return new Command(name);\n  }\n\n  /**\n   * You can customise the help with a subclass of Help by overriding createHelp,\n   * or by overriding Help properties using configureHelp().\n   *\n   * @return {Help}\n   */\n\n  createHelp() {\n    return Object.assign(new Help(), this.configureHelp());\n  }\n\n  /**\n   * You can customise the help by overriding Help properties using configureHelp(),\n   * or with a subclass of Help by overriding createHelp().\n   *\n   * @param {object} [configuration] - configuration options\n   * @return {(Command | object)} `this` command for chaining, or stored configuration\n   */\n\n  configureHelp(configuration) {\n    if (configuration === undefined) return this._helpConfiguration;\n\n    this._helpConfiguration = configuration;\n    return this;\n  }\n\n  /**\n   * The default output goes to stdout and stderr. You can customise this for special\n   * applications. You can also customise the display of errors by overriding outputError.\n   *\n   * The configuration properties are all functions:\n   *\n   *     // change how output being written, defaults to stdout and stderr\n   *     writeOut(str)\n   *     writeErr(str)\n   *     // change how output being written for errors, defaults to writeErr\n   *     outputError(str, write) // used for displaying errors and not used for displaying help\n   *     // specify width for wrapping help\n   *     getOutHelpWidth()\n   *     getErrHelpWidth()\n   *     // color support, currently only used with Help\n   *     getOutHasColors()\n   *     getErrHasColors()\n   *     stripColor() // used to remove ANSI escape codes if output does not have colors\n   *\n   * @param {object} [configuration] - configuration options\n   * @return {(Command | object)} `this` command for chaining, or stored configuration\n   */\n\n  configureOutput(configuration) {\n    if (configuration === undefined) return this._outputConfiguration;\n\n    this._outputConfiguration = {\n      ...this._outputConfiguration,\n      ...configuration,\n    };\n    return this;\n  }\n\n  /**\n   * Display the help or a custom message after an error occurs.\n   *\n   * @param {(boolean|string)} [displayHelp]\n   * @return {Command} `this` command for chaining\n   */\n  showHelpAfterError(displayHelp = true) {\n    if (typeof displayHelp !== 'string') displayHelp = !!displayHelp;\n    this._showHelpAfterError = displayHelp;\n    return this;\n  }\n\n  /**\n   * Display suggestion of similar commands for unknown commands, or options for unknown options.\n   *\n   * @param {boolean} [displaySuggestion]\n   * @return {Command} `this` command for chaining\n   */\n  showSuggestionAfterError(displaySuggestion = true) {\n    this._showSuggestionAfterError = !!displaySuggestion;\n    return this;\n  }\n\n  /**\n   * Add a prepared subcommand.\n   *\n   * See .command() for creating an attached subcommand which inherits settings from its parent.\n   *\n   * @param {Command} cmd - new subcommand\n   * @param {object} [opts] - configuration options\n   * @return {Command} `this` command for chaining\n   */\n\n  addCommand(cmd, opts) {\n    if (!cmd._name) {\n      throw new Error(`Command passed to .addCommand() must have a name\n- specify the name in Command constructor or using .name()`);\n    }\n\n    opts = opts || {};\n    if (opts.isDefault) this._defaultCommandName = cmd._name;\n    if (opts.noHelp || opts.hidden) cmd._hidden = true; // modifying passed command due to existing implementation\n\n    this._registerCommand(cmd);\n    cmd.parent = this;\n    cmd._checkForBrokenPassThrough();\n\n    return this;\n  }\n\n  /**\n   * Factory routine to create a new unattached argument.\n   *\n   * See .argument() for creating an attached argument, which uses this routine to\n   * create the argument. You can override createArgument to return a custom argument.\n   *\n   * @param {string} name\n   * @param {string} [description]\n   * @return {Argument} new argument\n   */\n\n  createArgument(name, description) {\n    return new Argument(name, description);\n  }\n\n  /**\n   * Define argument syntax for command.\n   *\n   * The default is that the argument is required, and you can explicitly\n   * indicate this with <> around the name. Put [] around the name for an optional argument.\n   *\n   * @example\n   * program.argument('<input-file>');\n   * program.argument('[output-file]');\n   *\n   * @param {string} name\n   * @param {string} [description]\n   * @param {(Function|*)} [parseArg] - custom argument processing function or default value\n   * @param {*} [defaultValue]\n   * @return {Command} `this` command for chaining\n   */\n  argument(name, description, parseArg, defaultValue) {\n    const argument = this.createArgument(name, description);\n    if (typeof parseArg === 'function') {\n      argument.default(defaultValue).argParser(parseArg);\n    } else {\n      argument.default(parseArg);\n    }\n    this.addArgument(argument);\n    return this;\n  }\n\n  /**\n   * Define argument syntax for command, adding multiple at once (without descriptions).\n   *\n   * See also .argument().\n   *\n   * @example\n   * program.arguments('<cmd> [env]');\n   *\n   * @param {string} names\n   * @return {Command} `this` command for chaining\n   */\n\n  arguments(names) {\n    names\n      .trim()\n      .split(/ +/)\n      .forEach((detail) => {\n        this.argument(detail);\n      });\n    return this;\n  }\n\n  /**\n   * Define argument syntax for command, adding a prepared argument.\n   *\n   * @param {Argument} argument\n   * @return {Command} `this` command for chaining\n   */\n  addArgument(argument) {\n    const previousArgument = this.registeredArguments.slice(-1)[0];\n    if (previousArgument?.variadic) {\n      throw new Error(\n        `only the last argument can be variadic '${previousArgument.name()}'`,\n      );\n    }\n    if (\n      argument.required &&\n      argument.defaultValue !== undefined &&\n      argument.parseArg === undefined\n    ) {\n      throw new Error(\n        `a default value for a required argument is never used: '${argument.name()}'`,\n      );\n    }\n    this.registeredArguments.push(argument);\n    return this;\n  }\n\n  /**\n   * Customise or override default help command. By default a help command is automatically added if your command has subcommands.\n   *\n   * @example\n   *    program.helpCommand('help [cmd]');\n   *    program.helpCommand('help [cmd]', 'show help');\n   *    program.helpCommand(false); // suppress default help command\n   *    program.helpCommand(true); // add help command even if no subcommands\n   *\n   * @param {string|boolean} enableOrNameAndArgs - enable with custom name and/or arguments, or boolean to override whether added\n   * @param {string} [description] - custom description\n   * @return {Command} `this` command for chaining\n   */\n\n  helpCommand(enableOrNameAndArgs, description) {\n    if (typeof enableOrNameAndArgs === 'boolean') {\n      this._addImplicitHelpCommand = enableOrNameAndArgs;\n      if (enableOrNameAndArgs && this._defaultCommandGroup) {\n        // make the command to store the group\n        this._initCommandGroup(this._getHelpCommand());\n      }\n      return this;\n    }\n\n    const nameAndArgs = enableOrNameAndArgs ?? 'help [command]';\n    const [, helpName, helpArgs] = nameAndArgs.match(/([^ ]+) *(.*)/);\n    const helpDescription = description ?? 'display help for command';\n\n    const helpCommand = this.createCommand(helpName);\n    helpCommand.helpOption(false);\n    if (helpArgs) helpCommand.arguments(helpArgs);\n    if (helpDescription) helpCommand.description(helpDescription);\n\n    this._addImplicitHelpCommand = true;\n    this._helpCommand = helpCommand;\n    // init group unless lazy create\n    if (enableOrNameAndArgs || description) this._initCommandGroup(helpCommand);\n\n    return this;\n  }\n\n  /**\n   * Add prepared custom help command.\n   *\n   * @param {(Command|string|boolean)} helpCommand - custom help command, or deprecated enableOrNameAndArgs as for `.helpCommand()`\n   * @param {string} [deprecatedDescription] - deprecated custom description used with custom name only\n   * @return {Command} `this` command for chaining\n   */\n  addHelpCommand(helpCommand, deprecatedDescription) {\n    // If not passed an object, call through to helpCommand for backwards compatibility,\n    // as addHelpCommand was originally used like helpCommand is now.\n    if (typeof helpCommand !== 'object') {\n      this.helpCommand(helpCommand, deprecatedDescription);\n      return this;\n    }\n\n    this._addImplicitHelpCommand = true;\n    this._helpCommand = helpCommand;\n    this._initCommandGroup(helpCommand);\n    return this;\n  }\n\n  /**\n   * Lazy create help command.\n   *\n   * @return {(Command|null)}\n   * @package\n   */\n  _getHelpCommand() {\n    const hasImplicitHelpCommand =\n      this._addImplicitHelpCommand ??\n      (this.commands.length &&\n        !this._actionHandler &&\n        !this._findCommand('help'));\n\n    if (hasImplicitHelpCommand) {\n      if (this._helpCommand === undefined) {\n        this.helpCommand(undefined, undefined); // use default name and description\n      }\n      return this._helpCommand;\n    }\n    return null;\n  }\n\n  /**\n   * Add hook for life cycle event.\n   *\n   * @param {string} event\n   * @param {Function} listener\n   * @return {Command} `this` command for chaining\n   */\n\n  hook(event, listener) {\n    const allowedValues = ['preSubcommand', 'preAction', 'postAction'];\n    if (!allowedValues.includes(event)) {\n      throw new Error(`Unexpected value for event passed to hook : '${event}'.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n    }\n    if (this._lifeCycleHooks[event]) {\n      this._lifeCycleHooks[event].push(listener);\n    } else {\n      this._lifeCycleHooks[event] = [listener];\n    }\n    return this;\n  }\n\n  /**\n   * Register callback to use as replacement for calling process.exit.\n   *\n   * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing\n   * @return {Command} `this` command for chaining\n   */\n\n  exitOverride(fn) {\n    if (fn) {\n      this._exitCallback = fn;\n    } else {\n      this._exitCallback = (err) => {\n        if (err.code !== 'commander.executeSubCommandAsync') {\n          throw err;\n        } else {\n          // Async callback from spawn events, not useful to throw.\n        }\n      };\n    }\n    return this;\n  }\n\n  /**\n   * Call process.exit, and _exitCallback if defined.\n   *\n   * @param {number} exitCode exit code for using with process.exit\n   * @param {string} code an id string representing the error\n   * @param {string} message human-readable description of the error\n   * @return never\n   * @private\n   */\n\n  _exit(exitCode, code, message) {\n    if (this._exitCallback) {\n      this._exitCallback(new CommanderError(exitCode, code, message));\n      // Expecting this line is not reached.\n    }\n    process.exit(exitCode);\n  }\n\n  /**\n   * Register callback `fn` for the command.\n   *\n   * @example\n   * program\n   *   .command('serve')\n   *   .description('start service')\n   *   .action(function() {\n   *      // do work here\n   *   });\n   *\n   * @param {Function} fn\n   * @return {Command} `this` command for chaining\n   */\n\n  action(fn) {\n    const listener = (args) => {\n      // The .action callback takes an extra parameter which is the command or options.\n      const expectedArgsCount = this.registeredArguments.length;\n      const actionArgs = args.slice(0, expectedArgsCount);\n      if (this._storeOptionsAsProperties) {\n        actionArgs[expectedArgsCount] = this; // backwards compatible \"options\"\n      } else {\n        actionArgs[expectedArgsCount] = this.opts();\n      }\n      actionArgs.push(this);\n\n      return fn.apply(this, actionArgs);\n    };\n    this._actionHandler = listener;\n    return this;\n  }\n\n  /**\n   * Factory routine to create a new unattached option.\n   *\n   * See .option() for creating an attached option, which uses this routine to\n   * create the option. You can override createOption to return a custom option.\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   * @return {Option} new option\n   */\n\n  createOption(flags, description) {\n    return new Option(flags, description);\n  }\n\n  /**\n   * Wrap parseArgs to catch 'commander.invalidArgument'.\n   *\n   * @param {(Option | Argument)} target\n   * @param {string} value\n   * @param {*} previous\n   * @param {string} invalidArgumentMessage\n   * @private\n   */\n\n  _callParseArg(target, value, previous, invalidArgumentMessage) {\n    try {\n      return target.parseArg(value, previous);\n    } catch (err) {\n      if (err.code === 'commander.invalidArgument') {\n        const message = `${invalidArgumentMessage} ${err.message}`;\n        this.error(message, { exitCode: err.exitCode, code: err.code });\n      }\n      throw err;\n    }\n  }\n\n  /**\n   * Check for option flag conflicts.\n   * Register option if no conflicts found, or throw on conflict.\n   *\n   * @param {Option} option\n   * @private\n   */\n\n  _registerOption(option) {\n    const matchingOption =\n      (option.short && this._findOption(option.short)) ||\n      (option.long && this._findOption(option.long));\n    if (matchingOption) {\n      const matchingFlag =\n        option.long && this._findOption(option.long)\n          ? option.long\n          : option.short;\n      throw new Error(`Cannot add option '${option.flags}'${this._name && ` to command '${this._name}'`} due to conflicting flag '${matchingFlag}'\n-  already used by option '${matchingOption.flags}'`);\n    }\n\n    this._initOptionGroup(option);\n    this.options.push(option);\n  }\n\n  /**\n   * Check for command name and alias conflicts with existing commands.\n   * Register command if no conflicts found, or throw on conflict.\n   *\n   * @param {Command} command\n   * @private\n   */\n\n  _registerCommand(command) {\n    const knownBy = (cmd) => {\n      return [cmd.name()].concat(cmd.aliases());\n    };\n\n    const alreadyUsed = knownBy(command).find((name) =>\n      this._findCommand(name),\n    );\n    if (alreadyUsed) {\n      const existingCmd = knownBy(this._findCommand(alreadyUsed)).join('|');\n      const newCmd = knownBy(command).join('|');\n      throw new Error(\n        `cannot add command '${newCmd}' as already have command '${existingCmd}'`,\n      );\n    }\n\n    this._initCommandGroup(command);\n    this.commands.push(command);\n  }\n\n  /**\n   * Add an option.\n   *\n   * @param {Option} option\n   * @return {Command} `this` command for chaining\n   */\n  addOption(option) {\n    this._registerOption(option);\n\n    const oname = option.name();\n    const name = option.attributeName();\n\n    // store default value\n    if (option.negate) {\n      // --no-foo is special and defaults foo to true, unless a --foo option is already defined\n      const positiveLongFlag = option.long.replace(/^--no-/, '--');\n      if (!this._findOption(positiveLongFlag)) {\n        this.setOptionValueWithSource(\n          name,\n          option.defaultValue === undefined ? true : option.defaultValue,\n          'default',\n        );\n      }\n    } else if (option.defaultValue !== undefined) {\n      this.setOptionValueWithSource(name, option.defaultValue, 'default');\n    }\n\n    // handler for cli and env supplied values\n    const handleOptionValue = (val, invalidValueMessage, valueSource) => {\n      // val is null for optional option used without an optional-argument.\n      // val is undefined for boolean and negated option.\n      if (val == null && option.presetArg !== undefined) {\n        val = option.presetArg;\n      }\n\n      // custom processing\n      const oldValue = this.getOptionValue(name);\n      if (val !== null && option.parseArg) {\n        val = this._callParseArg(option, val, oldValue, invalidValueMessage);\n      } else if (val !== null && option.variadic) {\n        val = option._collectValue(val, oldValue);\n      }\n\n      // Fill-in appropriate missing values. Long winded but easy to follow.\n      if (val == null) {\n        if (option.negate) {\n          val = false;\n        } else if (option.isBoolean() || option.optional) {\n          val = true;\n        } else {\n          val = ''; // not normal, parseArg might have failed or be a mock function for testing\n        }\n      }\n      this.setOptionValueWithSource(name, val, valueSource);\n    };\n\n    this.on('option:' + oname, (val) => {\n      const invalidValueMessage = `error: option '${option.flags}' argument '${val}' is invalid.`;\n      handleOptionValue(val, invalidValueMessage, 'cli');\n    });\n\n    if (option.envVar) {\n      this.on('optionEnv:' + oname, (val) => {\n        const invalidValueMessage = `error: option '${option.flags}' value '${val}' from env '${option.envVar}' is invalid.`;\n        handleOptionValue(val, invalidValueMessage, 'env');\n      });\n    }\n\n    return this;\n  }\n\n  /**\n   * Internal implementation shared by .option() and .requiredOption()\n   *\n   * @return {Command} `this` command for chaining\n   * @private\n   */\n  _optionEx(config, flags, description, fn, defaultValue) {\n    if (typeof flags === 'object' && flags instanceof Option) {\n      throw new Error(\n        'To add an Option object use addOption() instead of option() or requiredOption()',\n      );\n    }\n    const option = this.createOption(flags, description);\n    option.makeOptionMandatory(!!config.mandatory);\n    if (typeof fn === 'function') {\n      option.default(defaultValue).argParser(fn);\n    } else if (fn instanceof RegExp) {\n      // deprecated\n      const regex = fn;\n      fn = (val, def) => {\n        const m = regex.exec(val);\n        return m ? m[0] : def;\n      };\n      option.default(defaultValue).argParser(fn);\n    } else {\n      option.default(fn);\n    }\n\n    return this.addOption(option);\n  }\n\n  /**\n   * Define option with `flags`, `description`, and optional argument parsing function or `defaultValue` or both.\n   *\n   * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space. A required\n   * option-argument is indicated by `<>` and an optional option-argument by `[]`.\n   *\n   * See the README for more details, and see also addOption() and requiredOption().\n   *\n   * @example\n   * program\n   *     .option('-p, --pepper', 'add pepper')\n   *     .option('--pt, --pizza-type <TYPE>', 'type of pizza') // required option-argument\n   *     .option('-c, --cheese [CHEESE]', 'add extra cheese', 'mozzarella') // optional option-argument with default\n   *     .option('-t, --tip <VALUE>', 'add tip to purchase cost', parseFloat) // custom parse function\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   * @param {(Function|*)} [parseArg] - custom option processing function or default value\n   * @param {*} [defaultValue]\n   * @return {Command} `this` command for chaining\n   */\n\n  option(flags, description, parseArg, defaultValue) {\n    return this._optionEx({}, flags, description, parseArg, defaultValue);\n  }\n\n  /**\n   * Add a required option which must have a value after parsing. This usually means\n   * the option must be specified on the command line. (Otherwise the same as .option().)\n   *\n   * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space.\n   *\n   * @param {string} flags\n   * @param {string} [description]\n   * @param {(Function|*)} [parseArg] - custom option processing function or default value\n   * @param {*} [defaultValue]\n   * @return {Command} `this` command for chaining\n   */\n\n  requiredOption(flags, description, parseArg, defaultValue) {\n    return this._optionEx(\n      { mandatory: true },\n      flags,\n      description,\n      parseArg,\n      defaultValue,\n    );\n  }\n\n  /**\n   * Alter parsing of short flags with optional values.\n   *\n   * @example\n   * // for `.option('-f,--flag [value]'):\n   * program.combineFlagAndOptionalValue(true);  // `-f80` is treated like `--flag=80`, this is the default behaviour\n   * program.combineFlagAndOptionalValue(false) // `-fb` is treated like `-f -b`\n   *\n   * @param {boolean} [combine] - if `true` or omitted, an optional value can be specified directly after the flag.\n   * @return {Command} `this` command for chaining\n   */\n  combineFlagAndOptionalValue(combine = true) {\n    this._combineFlagAndOptionalValue = !!combine;\n    return this;\n  }\n\n  /**\n   * Allow unknown options on the command line.\n   *\n   * @param {boolean} [allowUnknown] - if `true` or omitted, no error will be thrown for unknown options.\n   * @return {Command} `this` command for chaining\n   */\n  allowUnknownOption(allowUnknown = true) {\n    this._allowUnknownOption = !!allowUnknown;\n    return this;\n  }\n\n  /**\n   * Allow excess command-arguments on the command line. Pass false to make excess arguments an error.\n   *\n   * @param {boolean} [allowExcess] - if `true` or omitted, no error will be thrown for excess arguments.\n   * @return {Command} `this` command for chaining\n   */\n  allowExcessArguments(allowExcess = true) {\n    this._allowExcessArguments = !!allowExcess;\n    return this;\n  }\n\n  /**\n   * Enable positional options. Positional means global options are specified before subcommands which lets\n   * subcommands reuse the same option names, and also enables subcommands to turn on passThroughOptions.\n   * The default behaviour is non-positional and global options may appear anywhere on the command line.\n   *\n   * @param {boolean} [positional]\n   * @return {Command} `this` command for chaining\n   */\n  enablePositionalOptions(positional = true) {\n    this._enablePositionalOptions = !!positional;\n    return this;\n  }\n\n  /**\n   * Pass through options that come after command-arguments rather than treat them as command-options,\n   * so actual command-options come before command-arguments. Turning this on for a subcommand requires\n   * positional options to have been enabled on the program (parent commands).\n   * The default behaviour is non-positional and options may appear before or after command-arguments.\n   *\n   * @param {boolean} [passThrough] for unknown options.\n   * @return {Command} `this` command for chaining\n   */\n  passThroughOptions(passThrough = true) {\n    this._passThroughOptions = !!passThrough;\n    this._checkForBrokenPassThrough();\n    return this;\n  }\n\n  /**\n   * @private\n   */\n\n  _checkForBrokenPassThrough() {\n    if (\n      this.parent &&\n      this._passThroughOptions &&\n      !this.parent._enablePositionalOptions\n    ) {\n      throw new Error(\n        `passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`,\n      );\n    }\n  }\n\n  /**\n   * Whether to store option values as properties on command object,\n   * or store separately (specify false). In both cases the option values can be accessed using .opts().\n   *\n   * @param {boolean} [storeAsProperties=true]\n   * @return {Command} `this` command for chaining\n   */\n\n  storeOptionsAsProperties(storeAsProperties = true) {\n    if (this.options.length) {\n      throw new Error('call .storeOptionsAsProperties() before adding options');\n    }\n    if (Object.keys(this._optionValues).length) {\n      throw new Error(\n        'call .storeOptionsAsProperties() before setting option values',\n      );\n    }\n    this._storeOptionsAsProperties = !!storeAsProperties;\n    return this;\n  }\n\n  /**\n   * Retrieve option value.\n   *\n   * @param {string} key\n   * @return {object} value\n   */\n\n  getOptionValue(key) {\n    if (this._storeOptionsAsProperties) {\n      return this[key];\n    }\n    return this._optionValues[key];\n  }\n\n  /**\n   * Store option value.\n   *\n   * @param {string} key\n   * @param {object} value\n   * @return {Command} `this` command for chaining\n   */\n\n  setOptionValue(key, value) {\n    return this.setOptionValueWithSource(key, value, undefined);\n  }\n\n  /**\n   * Store option value and where the value came from.\n   *\n   * @param {string} key\n   * @param {object} value\n   * @param {string} source - expected values are default/config/env/cli/implied\n   * @return {Command} `this` command for chaining\n   */\n\n  setOptionValueWithSource(key, value, source) {\n    if (this._storeOptionsAsProperties) {\n      this[key] = value;\n    } else {\n      this._optionValues[key] = value;\n    }\n    this._optionValueSources[key] = source;\n    return this;\n  }\n\n  /**\n   * Get source of option value.\n   * Expected values are default | config | env | cli | implied\n   *\n   * @param {string} key\n   * @return {string}\n   */\n\n  getOptionValueSource(key) {\n    return this._optionValueSources[key];\n  }\n\n  /**\n   * Get source of option value. See also .optsWithGlobals().\n   * Expected values are default | config | env | cli | implied\n   *\n   * @param {string} key\n   * @return {string}\n   */\n\n  getOptionValueSourceWithGlobals(key) {\n    // global overwrites local, like optsWithGlobals\n    let source;\n    this._getCommandAndAncestors().forEach((cmd) => {\n      if (cmd.getOptionValueSource(key) !== undefined) {\n        source = cmd.getOptionValueSource(key);\n      }\n    });\n    return source;\n  }\n\n  /**\n   * Get user arguments from implied or explicit arguments.\n   * Side-effects: set _scriptPath if args included script. Used for default program name, and subcommand searches.\n   *\n   * @private\n   */\n\n  _prepareUserArgs(argv, parseOptions) {\n    if (argv !== undefined && !Array.isArray(argv)) {\n      throw new Error('first parameter to parse must be array or undefined');\n    }\n    parseOptions = parseOptions || {};\n\n    // auto-detect argument conventions if nothing supplied\n    if (argv === undefined && parseOptions.from === undefined) {\n      if (process.versions?.electron) {\n        parseOptions.from = 'electron';\n      }\n      // check node specific options for scenarios where user CLI args follow executable without scriptname\n      const execArgv = process.execArgv ?? [];\n      if (\n        execArgv.includes('-e') ||\n        execArgv.includes('--eval') ||\n        execArgv.includes('-p') ||\n        execArgv.includes('--print')\n      ) {\n        parseOptions.from = 'eval'; // internal usage, not documented\n      }\n    }\n\n    // default to using process.argv\n    if (argv === undefined) {\n      argv = process.argv;\n    }\n    this.rawArgs = argv.slice();\n\n    // extract the user args and scriptPath\n    let userArgs;\n    switch (parseOptions.from) {\n      case undefined:\n      case 'node':\n        this._scriptPath = argv[1];\n        userArgs = argv.slice(2);\n        break;\n      case 'electron':\n        // @ts-ignore: because defaultApp is an unknown property\n        if (process.defaultApp) {\n          this._scriptPath = argv[1];\n          userArgs = argv.slice(2);\n        } else {\n          userArgs = argv.slice(1);\n        }\n        break;\n      case 'user':\n        userArgs = argv.slice(0);\n        break;\n      case 'eval':\n        userArgs = argv.slice(1);\n        break;\n      default:\n        throw new Error(\n          `unexpected parse option { from: '${parseOptions.from}' }`,\n        );\n    }\n\n    // Find default name for program from arguments.\n    if (!this._name && this._scriptPath)\n      this.nameFromFilename(this._scriptPath);\n    this._name = this._name || 'program';\n\n    return userArgs;\n  }\n\n  /**\n   * Parse `argv`, setting options and invoking commands when defined.\n   *\n   * Use parseAsync instead of parse if any of your action handlers are async.\n   *\n   * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n   *\n   * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n   * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n   * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n   * - `'user'`: just user arguments\n   *\n   * @example\n   * program.parse(); // parse process.argv and auto-detect electron and special node flags\n   * program.parse(process.argv); // assume argv[0] is app and argv[1] is script\n   * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n   *\n   * @param {string[]} [argv] - optional, defaults to process.argv\n   * @param {object} [parseOptions] - optionally specify style of options with from: node/user/electron\n   * @param {string} [parseOptions.from] - where the args are from: 'node', 'user', 'electron'\n   * @return {Command} `this` command for chaining\n   */\n\n  parse(argv, parseOptions) {\n    this._prepareForParse();\n    const userArgs = this._prepareUserArgs(argv, parseOptions);\n    this._parseCommand([], userArgs);\n\n    return this;\n  }\n\n  /**\n   * Parse `argv`, setting options and invoking commands when defined.\n   *\n   * Call with no parameters to parse `process.argv`. Detects Electron and special node options like `node --eval`. Easy mode!\n   *\n   * Or call with an array of strings to parse, and optionally where the user arguments start by specifying where the arguments are `from`:\n   * - `'node'`: default, `argv[0]` is the application and `argv[1]` is the script being run, with user arguments after that\n   * - `'electron'`: `argv[0]` is the application and `argv[1]` varies depending on whether the electron application is packaged\n   * - `'user'`: just user arguments\n   *\n   * @example\n   * await program.parseAsync(); // parse process.argv and auto-detect electron and special node flags\n   * await program.parseAsync(process.argv); // assume argv[0] is app and argv[1] is script\n   * await program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n   *\n   * @param {string[]} [argv]\n   * @param {object} [parseOptions]\n   * @param {string} parseOptions.from - where the args are from: 'node', 'user', 'electron'\n   * @return {Promise}\n   */\n\n  async parseAsync(argv, parseOptions) {\n    this._prepareForParse();\n    const userArgs = this._prepareUserArgs(argv, parseOptions);\n    await this._parseCommand([], userArgs);\n\n    return this;\n  }\n\n  _prepareForParse() {\n    if (this._savedState === null) {\n      this.saveStateBeforeParse();\n    } else {\n      this.restoreStateBeforeParse();\n    }\n  }\n\n  /**\n   * Called the first time parse is called to save state and allow a restore before subsequent calls to parse.\n   * Not usually called directly, but available for subclasses to save their custom state.\n   *\n   * This is called in a lazy way. Only commands used in parsing chain will have state saved.\n   */\n  saveStateBeforeParse() {\n    this._savedState = {\n      // name is stable if supplied by author, but may be unspecified for root command and deduced during parsing\n      _name: this._name,\n      // option values before parse have default values (including false for negated options)\n      // shallow clones\n      _optionValues: { ...this._optionValues },\n      _optionValueSources: { ...this._optionValueSources },\n    };\n  }\n\n  /**\n   * Restore state before parse for calls after the first.\n   * Not usually called directly, but available for subclasses to save their custom state.\n   *\n   * This is called in a lazy way. Only commands used in parsing chain will have state restored.\n   */\n  restoreStateBeforeParse() {\n    if (this._storeOptionsAsProperties)\n      throw new Error(`Can not call parse again when storeOptionsAsProperties is true.\n- either make a new Command for each call to parse, or stop storing options as properties`);\n\n    // clear state from _prepareUserArgs\n    this._name = this._savedState._name;\n    this._scriptPath = null;\n    this.rawArgs = [];\n    // clear state from setOptionValueWithSource\n    this._optionValues = { ...this._savedState._optionValues };\n    this._optionValueSources = { ...this._savedState._optionValueSources };\n    // clear state from _parseCommand\n    this.args = [];\n    // clear state from _processArguments\n    this.processedArgs = [];\n  }\n\n  /**\n   * Throw if expected executable is missing. Add lots of help for author.\n   *\n   * @param {string} executableFile\n   * @param {string} executableDir\n   * @param {string} subcommandName\n   */\n  _checkForMissingExecutable(executableFile, executableDir, subcommandName) {\n    if (fs.existsSync(executableFile)) return;\n\n    const executableDirMessage = executableDir\n      ? `searched for local subcommand relative to directory '${executableDir}'`\n      : 'no directory for search for local subcommand, use .executableDir() to supply a custom directory';\n    const executableMissing = `'${executableFile}' does not exist\n - if '${subcommandName}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead\n - if the default executable name is not suitable, use the executableFile option to supply a custom name or path\n - ${executableDirMessage}`;\n    throw new Error(executableMissing);\n  }\n\n  /**\n   * Execute a sub-command executable.\n   *\n   * @private\n   */\n\n  _executeSubCommand(subcommand, args) {\n    args = args.slice();\n    let launchWithNode = false; // Use node for source targets so do not need to get permissions correct, and on Windows.\n    const sourceExt = ['.js', '.ts', '.tsx', '.mjs', '.cjs'];\n\n    function findFile(baseDir, baseName) {\n      // Look for specified file\n      const localBin = path.resolve(baseDir, baseName);\n      if (fs.existsSync(localBin)) return localBin;\n\n      // Stop looking if candidate already has an expected extension.\n      if (sourceExt.includes(path.extname(baseName))) return undefined;\n\n      // Try all the extensions.\n      const foundExt = sourceExt.find((ext) =>\n        fs.existsSync(`${localBin}${ext}`),\n      );\n      if (foundExt) return `${localBin}${foundExt}`;\n\n      return undefined;\n    }\n\n    // Not checking for help first. Unlikely to have mandatory and executable, and can't robustly test for help flags in external command.\n    this._checkForMissingMandatoryOptions();\n    this._checkForConflictingOptions();\n\n    // executableFile and executableDir might be full path, or just a name\n    let executableFile =\n      subcommand._executableFile || `${this._name}-${subcommand._name}`;\n    let executableDir = this._executableDir || '';\n    if (this._scriptPath) {\n      let resolvedScriptPath; // resolve possible symlink for installed npm binary\n      try {\n        resolvedScriptPath = fs.realpathSync(this._scriptPath);\n      } catch {\n        resolvedScriptPath = this._scriptPath;\n      }\n      executableDir = path.resolve(\n        path.dirname(resolvedScriptPath),\n        executableDir,\n      );\n    }\n\n    // Look for a local file in preference to a command in PATH.\n    if (executableDir) {\n      let localFile = findFile(executableDir, executableFile);\n\n      // Legacy search using prefix of script name instead of command name\n      if (!localFile && !subcommand._executableFile && this._scriptPath) {\n        const legacyName = path.basename(\n          this._scriptPath,\n          path.extname(this._scriptPath),\n        );\n        if (legacyName !== this._name) {\n          localFile = findFile(\n            executableDir,\n            `${legacyName}-${subcommand._name}`,\n          );\n        }\n      }\n      executableFile = localFile || executableFile;\n    }\n\n    launchWithNode = sourceExt.includes(path.extname(executableFile));\n\n    let proc;\n    if (process.platform !== 'win32') {\n      if (launchWithNode) {\n        args.unshift(executableFile);\n        // add executable arguments to spawn\n        args = incrementNodeInspectorPort(process.execArgv).concat(args);\n\n        proc = childProcess.spawn(process.argv[0], args, { stdio: 'inherit' });\n      } else {\n        proc = childProcess.spawn(executableFile, args, { stdio: 'inherit' });\n      }\n    } else {\n      this._checkForMissingExecutable(\n        executableFile,\n        executableDir,\n        subcommand._name,\n      );\n      args.unshift(executableFile);\n      // add executable arguments to spawn\n      args = incrementNodeInspectorPort(process.execArgv).concat(args);\n      proc = childProcess.spawn(process.execPath, args, { stdio: 'inherit' });\n    }\n\n    if (!proc.killed) {\n      // testing mainly to avoid leak warnings during unit tests with mocked spawn\n      const signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];\n      signals.forEach((signal) => {\n        process.on(signal, () => {\n          if (proc.killed === false && proc.exitCode === null) {\n            // @ts-ignore because signals not typed to known strings\n            proc.kill(signal);\n          }\n        });\n      });\n    }\n\n    // By default terminate process when spawned process terminates.\n    const exitCallback = this._exitCallback;\n    proc.on('close', (code) => {\n      code = code ?? 1; // code is null if spawned process terminated due to a signal\n      if (!exitCallback) {\n        process.exit(code);\n      } else {\n        exitCallback(\n          new CommanderError(\n            code,\n            'commander.executeSubCommandAsync',\n            '(close)',\n          ),\n        );\n      }\n    });\n    proc.on('error', (err) => {\n      // @ts-ignore: because err.code is an unknown property\n      if (err.code === 'ENOENT') {\n        this._checkForMissingExecutable(\n          executableFile,\n          executableDir,\n          subcommand._name,\n        );\n        // @ts-ignore: because err.code is an unknown property\n      } else if (err.code === 'EACCES') {\n        throw new Error(`'${executableFile}' not executable`);\n      }\n      if (!exitCallback) {\n        process.exit(1);\n      } else {\n        const wrappedError = new CommanderError(\n          1,\n          'commander.executeSubCommandAsync',\n          '(error)',\n        );\n        wrappedError.nestedError = err;\n        exitCallback(wrappedError);\n      }\n    });\n\n    // Store the reference to the child process\n    this.runningCommand = proc;\n  }\n\n  /**\n   * @private\n   */\n\n  _dispatchSubcommand(commandName, operands, unknown) {\n    const subCommand = this._findCommand(commandName);\n    if (!subCommand) this.help({ error: true });\n\n    subCommand._prepareForParse();\n    let promiseChain;\n    promiseChain = this._chainOrCallSubCommandHook(\n      promiseChain,\n      subCommand,\n      'preSubcommand',\n    );\n    promiseChain = this._chainOrCall(promiseChain, () => {\n      if (subCommand._executableHandler) {\n        this._executeSubCommand(subCommand, operands.concat(unknown));\n      } else {\n        return subCommand._parseCommand(operands, unknown);\n      }\n    });\n    return promiseChain;\n  }\n\n  /**\n   * Invoke help directly if possible, or dispatch if necessary.\n   * e.g. help foo\n   *\n   * @private\n   */\n\n  _dispatchHelpCommand(subcommandName) {\n    if (!subcommandName) {\n      this.help();\n    }\n    const subCommand = this._findCommand(subcommandName);\n    if (subCommand && !subCommand._executableHandler) {\n      subCommand.help();\n    }\n\n    // Fallback to parsing the help flag to invoke the help.\n    return this._dispatchSubcommand(\n      subcommandName,\n      [],\n      [this._getHelpOption()?.long ?? this._getHelpOption()?.short ?? '--help'],\n    );\n  }\n\n  /**\n   * Check this.args against expected this.registeredArguments.\n   *\n   * @private\n   */\n\n  _checkNumberOfArguments() {\n    // too few\n    this.registeredArguments.forEach((arg, i) => {\n      if (arg.required && this.args[i] == null) {\n        this.missingArgument(arg.name());\n      }\n    });\n    // too many\n    if (\n      this.registeredArguments.length > 0 &&\n      this.registeredArguments[this.registeredArguments.length - 1].variadic\n    ) {\n      return;\n    }\n    if (this.args.length > this.registeredArguments.length) {\n      this._excessArguments(this.args);\n    }\n  }\n\n  /**\n   * Process this.args using this.registeredArguments and save as this.processedArgs!\n   *\n   * @private\n   */\n\n  _processArguments() {\n    const myParseArg = (argument, value, previous) => {\n      // Extra processing for nice error message on parsing failure.\n      let parsedValue = value;\n      if (value !== null && argument.parseArg) {\n        const invalidValueMessage = `error: command-argument value '${value}' is invalid for argument '${argument.name()}'.`;\n        parsedValue = this._callParseArg(\n          argument,\n          value,\n          previous,\n          invalidValueMessage,\n        );\n      }\n      return parsedValue;\n    };\n\n    this._checkNumberOfArguments();\n\n    const processedArgs = [];\n    this.registeredArguments.forEach((declaredArg, index) => {\n      let value = declaredArg.defaultValue;\n      if (declaredArg.variadic) {\n        // Collect together remaining arguments for passing together as an array.\n        if (index < this.args.length) {\n          value = this.args.slice(index);\n          if (declaredArg.parseArg) {\n            value = value.reduce((processed, v) => {\n              return myParseArg(declaredArg, v, processed);\n            }, declaredArg.defaultValue);\n          }\n        } else if (value === undefined) {\n          value = [];\n        }\n      } else if (index < this.args.length) {\n        value = this.args[index];\n        if (declaredArg.parseArg) {\n          value = myParseArg(declaredArg, value, declaredArg.defaultValue);\n        }\n      }\n      processedArgs[index] = value;\n    });\n    this.processedArgs = processedArgs;\n  }\n\n  /**\n   * Once we have a promise we chain, but call synchronously until then.\n   *\n   * @param {(Promise|undefined)} promise\n   * @param {Function} fn\n   * @return {(Promise|undefined)}\n   * @private\n   */\n\n  _chainOrCall(promise, fn) {\n    // thenable\n    if (promise?.then && typeof promise.then === 'function') {\n      // already have a promise, chain callback\n      return promise.then(() => fn());\n    }\n    // callback might return a promise\n    return fn();\n  }\n\n  /**\n   *\n   * @param {(Promise|undefined)} promise\n   * @param {string} event\n   * @return {(Promise|undefined)}\n   * @private\n   */\n\n  _chainOrCallHooks(promise, event) {\n    let result = promise;\n    const hooks = [];\n    this._getCommandAndAncestors()\n      .reverse()\n      .filter((cmd) => cmd._lifeCycleHooks[event] !== undefined)\n      .forEach((hookedCommand) => {\n        hookedCommand._lifeCycleHooks[event].forEach((callback) => {\n          hooks.push({ hookedCommand, callback });\n        });\n      });\n    if (event === 'postAction') {\n      hooks.reverse();\n    }\n\n    hooks.forEach((hookDetail) => {\n      result = this._chainOrCall(result, () => {\n        return hookDetail.callback(hookDetail.hookedCommand, this);\n      });\n    });\n    return result;\n  }\n\n  /**\n   *\n   * @param {(Promise|undefined)} promise\n   * @param {Command} subCommand\n   * @param {string} event\n   * @return {(Promise|undefined)}\n   * @private\n   */\n\n  _chainOrCallSubCommandHook(promise, subCommand, event) {\n    let result = promise;\n    if (this._lifeCycleHooks[event] !== undefined) {\n      this._lifeCycleHooks[event].forEach((hook) => {\n        result = this._chainOrCall(result, () => {\n          return hook(this, subCommand);\n        });\n      });\n    }\n    return result;\n  }\n\n  /**\n   * Process arguments in context of this command.\n   * Returns action result, in case it is a promise.\n   *\n   * @private\n   */\n\n  _parseCommand(operands, unknown) {\n    const parsed = this.parseOptions(unknown);\n    this._parseOptionsEnv(); // after cli, so parseArg not called on both cli and env\n    this._parseOptionsImplied();\n    operands = operands.concat(parsed.operands);\n    unknown = parsed.unknown;\n    this.args = operands.concat(unknown);\n\n    if (operands && this._findCommand(operands[0])) {\n      return this._dispatchSubcommand(operands[0], operands.slice(1), unknown);\n    }\n    if (\n      this._getHelpCommand() &&\n      operands[0] === this._getHelpCommand().name()\n    ) {\n      return this._dispatchHelpCommand(operands[1]);\n    }\n    if (this._defaultCommandName) {\n      this._outputHelpIfRequested(unknown); // Run the help for default command from parent rather than passing to default command\n      return this._dispatchSubcommand(\n        this._defaultCommandName,\n        operands,\n        unknown,\n      );\n    }\n    if (\n      this.commands.length &&\n      this.args.length === 0 &&\n      !this._actionHandler &&\n      !this._defaultCommandName\n    ) {\n      // probably missing subcommand and no handler, user needs help (and exit)\n      this.help({ error: true });\n    }\n\n    this._outputHelpIfRequested(parsed.unknown);\n    this._checkForMissingMandatoryOptions();\n    this._checkForConflictingOptions();\n\n    // We do not always call this check to avoid masking a \"better\" error, like unknown command.\n    const checkForUnknownOptions = () => {\n      if (parsed.unknown.length > 0) {\n        this.unknownOption(parsed.unknown[0]);\n      }\n    };\n\n    const commandEvent = `command:${this.name()}`;\n    if (this._actionHandler) {\n      checkForUnknownOptions();\n      this._processArguments();\n\n      let promiseChain;\n      promiseChain = this._chainOrCallHooks(promiseChain, 'preAction');\n      promiseChain = this._chainOrCall(promiseChain, () =>\n        this._actionHandler(this.processedArgs),\n      );\n      if (this.parent) {\n        promiseChain = this._chainOrCall(promiseChain, () => {\n          this.parent.emit(commandEvent, operands, unknown); // legacy\n        });\n      }\n      promiseChain = this._chainOrCallHooks(promiseChain, 'postAction');\n      return promiseChain;\n    }\n    if (this.parent?.listenerCount(commandEvent)) {\n      checkForUnknownOptions();\n      this._processArguments();\n      this.parent.emit(commandEvent, operands, unknown); // legacy\n    } else if (operands.length) {\n      if (this._findCommand('*')) {\n        // legacy default command\n        return this._dispatchSubcommand('*', operands, unknown);\n      }\n      if (this.listenerCount('command:*')) {\n        // skip option check, emit event for possible misspelling suggestion\n        this.emit('command:*', operands, unknown);\n      } else if (this.commands.length) {\n        this.unknownCommand();\n      } else {\n        checkForUnknownOptions();\n        this._processArguments();\n      }\n    } else if (this.commands.length) {\n      checkForUnknownOptions();\n      // This command has subcommands and nothing hooked up at this level, so display help (and exit).\n      this.help({ error: true });\n    } else {\n      checkForUnknownOptions();\n      this._processArguments();\n      // fall through for caller to handle after calling .parse()\n    }\n  }\n\n  /**\n   * Find matching command.\n   *\n   * @private\n   * @return {Command | undefined}\n   */\n  _findCommand(name) {\n    if (!name) return undefined;\n    return this.commands.find(\n      (cmd) => cmd._name === name || cmd._aliases.includes(name),\n    );\n  }\n\n  /**\n   * Return an option matching `arg` if any.\n   *\n   * @param {string} arg\n   * @return {Option}\n   * @package\n   */\n\n  _findOption(arg) {\n    return this.options.find((option) => option.is(arg));\n  }\n\n  /**\n   * Display an error message if a mandatory option does not have a value.\n   * Called after checking for help flags in leaf subcommand.\n   *\n   * @private\n   */\n\n  _checkForMissingMandatoryOptions() {\n    // Walk up hierarchy so can call in subcommand after checking for displaying help.\n    this._getCommandAndAncestors().forEach((cmd) => {\n      cmd.options.forEach((anOption) => {\n        if (\n          anOption.mandatory &&\n          cmd.getOptionValue(anOption.attributeName()) === undefined\n        ) {\n          cmd.missingMandatoryOptionValue(anOption);\n        }\n      });\n    });\n  }\n\n  /**\n   * Display an error message if conflicting options are used together in this.\n   *\n   * @private\n   */\n  _checkForConflictingLocalOptions() {\n    const definedNonDefaultOptions = this.options.filter((option) => {\n      const optionKey = option.attributeName();\n      if (this.getOptionValue(optionKey) === undefined) {\n        return false;\n      }\n      return this.getOptionValueSource(optionKey) !== 'default';\n    });\n\n    const optionsWithConflicting = definedNonDefaultOptions.filter(\n      (option) => option.conflictsWith.length > 0,\n    );\n\n    optionsWithConflicting.forEach((option) => {\n      const conflictingAndDefined = definedNonDefaultOptions.find((defined) =>\n        option.conflictsWith.includes(defined.attributeName()),\n      );\n      if (conflictingAndDefined) {\n        this._conflictingOption(option, conflictingAndDefined);\n      }\n    });\n  }\n\n  /**\n   * Display an error message if conflicting options are used together.\n   * Called after checking for help flags in leaf subcommand.\n   *\n   * @private\n   */\n  _checkForConflictingOptions() {\n    // Walk up hierarchy so can call in subcommand after checking for displaying help.\n    this._getCommandAndAncestors().forEach((cmd) => {\n      cmd._checkForConflictingLocalOptions();\n    });\n  }\n\n  /**\n   * Parse options from `argv` removing known options,\n   * and return argv split into operands and unknown arguments.\n   *\n   * Side effects: modifies command by storing options. Does not reset state if called again.\n   *\n   * Examples:\n   *\n   *     argv => operands, unknown\n   *     --known kkk op => [op], []\n   *     op --known kkk => [op], []\n   *     sub --unknown uuu op => [sub], [--unknown uuu op]\n   *     sub -- --unknown uuu op => [sub --unknown uuu op], []\n   *\n   * @param {string[]} args\n   * @return {{operands: string[], unknown: string[]}}\n   */\n\n  parseOptions(args) {\n    const operands = []; // operands, not options or values\n    const unknown = []; // first unknown option and remaining unknown args\n    let dest = operands;\n\n    function maybeOption(arg) {\n      return arg.length > 1 && arg[0] === '-';\n    }\n\n    const negativeNumberArg = (arg) => {\n      // return false if not a negative number\n      if (!/^-(\\d+|\\d*\\.\\d+)(e[+-]?\\d+)?$/.test(arg)) return false;\n      // negative number is ok unless digit used as an option in command hierarchy\n      return !this._getCommandAndAncestors().some((cmd) =>\n        cmd.options\n          .map((opt) => opt.short)\n          .some((short) => /^-\\d$/.test(short)),\n      );\n    };\n\n    // parse options\n    let activeVariadicOption = null;\n    let activeGroup = null; // working through group of short options, like -abc\n    let i = 0;\n    while (i < args.length || activeGroup) {\n      const arg = activeGroup ?? args[i++];\n      activeGroup = null;\n\n      // literal\n      if (arg === '--') {\n        if (dest === unknown) dest.push(arg);\n        dest.push(...args.slice(i));\n        break;\n      }\n\n      if (\n        activeVariadicOption &&\n        (!maybeOption(arg) || negativeNumberArg(arg))\n      ) {\n        this.emit(`option:${activeVariadicOption.name()}`, arg);\n        continue;\n      }\n      activeVariadicOption = null;\n\n      if (maybeOption(arg)) {\n        const option = this._findOption(arg);\n        // recognised option, call listener to assign value with possible custom processing\n        if (option) {\n          if (option.required) {\n            const value = args[i++];\n            if (value === undefined) this.optionMissingArgument(option);\n            this.emit(`option:${option.name()}`, value);\n          } else if (option.optional) {\n            let value = null;\n            // historical behaviour is optional value is following arg unless an option\n            if (\n              i < args.length &&\n              (!maybeOption(args[i]) || negativeNumberArg(args[i]))\n            ) {\n              value = args[i++];\n            }\n            this.emit(`option:${option.name()}`, value);\n          } else {\n            // boolean flag\n            this.emit(`option:${option.name()}`);\n          }\n          activeVariadicOption = option.variadic ? option : null;\n          continue;\n        }\n      }\n\n      // Look for combo options following single dash, eat first one if known.\n      if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') {\n        const option = this._findOption(`-${arg[1]}`);\n        if (option) {\n          if (\n            option.required ||\n            (option.optional && this._combineFlagAndOptionalValue)\n          ) {\n            // option with value following in same argument\n            this.emit(`option:${option.name()}`, arg.slice(2));\n          } else {\n            // boolean option\n            this.emit(`option:${option.name()}`);\n            // remove the processed option and keep processing group\n            activeGroup = `-${arg.slice(2)}`;\n          }\n          continue;\n        }\n      }\n\n      // Look for known long flag with value, like --foo=bar\n      if (/^--[^=]+=/.test(arg)) {\n        const index = arg.indexOf('=');\n        const option = this._findOption(arg.slice(0, index));\n        if (option && (option.required || option.optional)) {\n          this.emit(`option:${option.name()}`, arg.slice(index + 1));\n          continue;\n        }\n      }\n\n      // Not a recognised option by this command.\n      // Might be a command-argument, or subcommand option, or unknown option, or help command or option.\n\n      // An unknown option means further arguments also classified as unknown so can be reprocessed by subcommands.\n      // A negative number in a leaf command is not an unknown option.\n      if (\n        dest === operands &&\n        maybeOption(arg) &&\n        !(this.commands.length === 0 && negativeNumberArg(arg))\n      ) {\n        dest = unknown;\n      }\n\n      // If using positionalOptions, stop processing our options at subcommand.\n      if (\n        (this._enablePositionalOptions || this._passThroughOptions) &&\n        operands.length === 0 &&\n        unknown.length === 0\n      ) {\n        if (this._findCommand(arg)) {\n          operands.push(arg);\n          unknown.push(...args.slice(i));\n          break;\n        } else if (\n          this._getHelpCommand() &&\n          arg === this._getHelpCommand().name()\n        ) {\n          operands.push(arg, ...args.slice(i));\n          break;\n        } else if (this._defaultCommandName) {\n          unknown.push(arg, ...args.slice(i));\n          break;\n        }\n      }\n\n      // If using passThroughOptions, stop processing options at first command-argument.\n      if (this._passThroughOptions) {\n        dest.push(arg, ...args.slice(i));\n        break;\n      }\n\n      // add arg\n      dest.push(arg);\n    }\n\n    return { operands, unknown };\n  }\n\n  /**\n   * Return an object containing local option values as key-value pairs.\n   *\n   * @return {object}\n   */\n  opts() {\n    if (this._storeOptionsAsProperties) {\n      // Preserve original behaviour so backwards compatible when still using properties\n      const result = {};\n      const len = this.options.length;\n\n      for (let i = 0; i < len; i++) {\n        const key = this.options[i].attributeName();\n        result[key] =\n          key === this._versionOptionName ? this._version : this[key];\n      }\n      return result;\n    }\n\n    return this._optionValues;\n  }\n\n  /**\n   * Return an object containing merged local and global option values as key-value pairs.\n   *\n   * @return {object}\n   */\n  optsWithGlobals() {\n    // globals overwrite locals\n    return this._getCommandAndAncestors().reduce(\n      (combinedOptions, cmd) => Object.assign(combinedOptions, cmd.opts()),\n      {},\n    );\n  }\n\n  /**\n   * Display error message and exit (or call exitOverride).\n   *\n   * @param {string} message\n   * @param {object} [errorOptions]\n   * @param {string} [errorOptions.code] - an id string representing the error\n   * @param {number} [errorOptions.exitCode] - used with process.exit\n   */\n  error(message, errorOptions) {\n    // output handling\n    this._outputConfiguration.outputError(\n      `${message}\\n`,\n      this._outputConfiguration.writeErr,\n    );\n    if (typeof this._showHelpAfterError === 'string') {\n      this._outputConfiguration.writeErr(`${this._showHelpAfterError}\\n`);\n    } else if (this._showHelpAfterError) {\n      this._outputConfiguration.writeErr('\\n');\n      this.outputHelp({ error: true });\n    }\n\n    // exit handling\n    const config = errorOptions || {};\n    const exitCode = config.exitCode || 1;\n    const code = config.code || 'commander.error';\n    this._exit(exitCode, code, message);\n  }\n\n  /**\n   * Apply any option related environment variables, if option does\n   * not have a value from cli or client code.\n   *\n   * @private\n   */\n  _parseOptionsEnv() {\n    this.options.forEach((option) => {\n      if (option.envVar && option.envVar in process.env) {\n        const optionKey = option.attributeName();\n        // Priority check. Do not overwrite cli or options from unknown source (client-code).\n        if (\n          this.getOptionValue(optionKey) === undefined ||\n          ['default', 'config', 'env'].includes(\n            this.getOptionValueSource(optionKey),\n          )\n        ) {\n          if (option.required || option.optional) {\n            // option can take a value\n            // keep very simple, optional always takes value\n            this.emit(`optionEnv:${option.name()}`, process.env[option.envVar]);\n          } else {\n            // boolean\n            // keep very simple, only care that envVar defined and not the value\n            this.emit(`optionEnv:${option.name()}`);\n          }\n        }\n      }\n    });\n  }\n\n  /**\n   * Apply any implied option values, if option is undefined or default value.\n   *\n   * @private\n   */\n  _parseOptionsImplied() {\n    const dualHelper = new DualOptions(this.options);\n    const hasCustomOptionValue = (optionKey) => {\n      return (\n        this.getOptionValue(optionKey) !== undefined &&\n        !['default', 'implied'].includes(this.getOptionValueSource(optionKey))\n      );\n    };\n    this.options\n      .filter(\n        (option) =>\n          option.implied !== undefined &&\n          hasCustomOptionValue(option.attributeName()) &&\n          dualHelper.valueFromOption(\n            this.getOptionValue(option.attributeName()),\n            option,\n          ),\n      )\n      .forEach((option) => {\n        Object.keys(option.implied)\n          .filter((impliedKey) => !hasCustomOptionValue(impliedKey))\n          .forEach((impliedKey) => {\n            this.setOptionValueWithSource(\n              impliedKey,\n              option.implied[impliedKey],\n              'implied',\n            );\n          });\n      });\n  }\n\n  /**\n   * Argument `name` is missing.\n   *\n   * @param {string} name\n   * @private\n   */\n\n  missingArgument(name) {\n    const message = `error: missing required argument '${name}'`;\n    this.error(message, { code: 'commander.missingArgument' });\n  }\n\n  /**\n   * `Option` is missing an argument.\n   *\n   * @param {Option} option\n   * @private\n   */\n\n  optionMissingArgument(option) {\n    const message = `error: option '${option.flags}' argument missing`;\n    this.error(message, { code: 'commander.optionMissingArgument' });\n  }\n\n  /**\n   * `Option` does not have a value, and is a mandatory option.\n   *\n   * @param {Option} option\n   * @private\n   */\n\n  missingMandatoryOptionValue(option) {\n    const message = `error: required option '${option.flags}' not specified`;\n    this.error(message, { code: 'commander.missingMandatoryOptionValue' });\n  }\n\n  /**\n   * `Option` conflicts with another option.\n   *\n   * @param {Option} option\n   * @param {Option} conflictingOption\n   * @private\n   */\n  _conflictingOption(option, conflictingOption) {\n    // The calling code does not know whether a negated option is the source of the\n    // value, so do some work to take an educated guess.\n    const findBestOptionFromValue = (option) => {\n      const optionKey = option.attributeName();\n      const optionValue = this.getOptionValue(optionKey);\n      const negativeOption = this.options.find(\n        (target) => target.negate && optionKey === target.attributeName(),\n      );\n      const positiveOption = this.options.find(\n        (target) => !target.negate && optionKey === target.attributeName(),\n      );\n      if (\n        negativeOption &&\n        ((negativeOption.presetArg === undefined && optionValue === false) ||\n          (negativeOption.presetArg !== undefined &&\n            optionValue === negativeOption.presetArg))\n      ) {\n        return negativeOption;\n      }\n      return positiveOption || option;\n    };\n\n    const getErrorMessage = (option) => {\n      const bestOption = findBestOptionFromValue(option);\n      const optionKey = bestOption.attributeName();\n      const source = this.getOptionValueSource(optionKey);\n      if (source === 'env') {\n        return `environment variable '${bestOption.envVar}'`;\n      }\n      return `option '${bestOption.flags}'`;\n    };\n\n    const message = `error: ${getErrorMessage(option)} cannot be used with ${getErrorMessage(conflictingOption)}`;\n    this.error(message, { code: 'commander.conflictingOption' });\n  }\n\n  /**\n   * Unknown option `flag`.\n   *\n   * @param {string} flag\n   * @private\n   */\n\n  unknownOption(flag) {\n    if (this._allowUnknownOption) return;\n    let suggestion = '';\n\n    if (flag.startsWith('--') && this._showSuggestionAfterError) {\n      // Looping to pick up the global options too\n      let candidateFlags = [];\n      // eslint-disable-next-line @typescript-eslint/no-this-alias\n      let command = this;\n      do {\n        const moreFlags = command\n          .createHelp()\n          .visibleOptions(command)\n          .filter((option) => option.long)\n          .map((option) => option.long);\n        candidateFlags = candidateFlags.concat(moreFlags);\n        command = command.parent;\n      } while (command && !command._enablePositionalOptions);\n      suggestion = suggestSimilar(flag, candidateFlags);\n    }\n\n    const message = `error: unknown option '${flag}'${suggestion}`;\n    this.error(message, { code: 'commander.unknownOption' });\n  }\n\n  /**\n   * Excess arguments, more than expected.\n   *\n   * @param {string[]} receivedArgs\n   * @private\n   */\n\n  _excessArguments(receivedArgs) {\n    if (this._allowExcessArguments) return;\n\n    const expected = this.registeredArguments.length;\n    const s = expected === 1 ? '' : 's';\n    const forSubcommand = this.parent ? ` for '${this.name()}'` : '';\n    const message = `error: too many arguments${forSubcommand}. Expected ${expected} argument${s} but got ${receivedArgs.length}.`;\n    this.error(message, { code: 'commander.excessArguments' });\n  }\n\n  /**\n   * Unknown command.\n   *\n   * @private\n   */\n\n  unknownCommand() {\n    const unknownName = this.args[0];\n    let suggestion = '';\n\n    if (this._showSuggestionAfterError) {\n      const candidateNames = [];\n      this.createHelp()\n        .visibleCommands(this)\n        .forEach((command) => {\n          candidateNames.push(command.name());\n          // just visible alias\n          if (command.alias()) candidateNames.push(command.alias());\n        });\n      suggestion = suggestSimilar(unknownName, candidateNames);\n    }\n\n    const message = `error: unknown command '${unknownName}'${suggestion}`;\n    this.error(message, { code: 'commander.unknownCommand' });\n  }\n\n  /**\n   * Get or set the program version.\n   *\n   * This method auto-registers the \"-V, --version\" option which will print the version number.\n   *\n   * You can optionally supply the flags and description to override the defaults.\n   *\n   * @param {string} [str]\n   * @param {string} [flags]\n   * @param {string} [description]\n   * @return {(this | string | undefined)} `this` command for chaining, or version string if no arguments\n   */\n\n  version(str, flags, description) {\n    if (str === undefined) return this._version;\n    this._version = str;\n    flags = flags || '-V, --version';\n    description = description || 'output the version number';\n    const versionOption = this.createOption(flags, description);\n    this._versionOptionName = versionOption.attributeName();\n    this._registerOption(versionOption);\n\n    this.on('option:' + versionOption.name(), () => {\n      this._outputConfiguration.writeOut(`${str}\\n`);\n      this._exit(0, 'commander.version', str);\n    });\n    return this;\n  }\n\n  /**\n   * Set the description.\n   *\n   * @param {string} [str]\n   * @param {object} [argsDescription]\n   * @return {(string|Command)}\n   */\n  description(str, argsDescription) {\n    if (str === undefined && argsDescription === undefined)\n      return this._description;\n    this._description = str;\n    if (argsDescription) {\n      this._argsDescription = argsDescription;\n    }\n    return this;\n  }\n\n  /**\n   * Set the summary. Used when listed as subcommand of parent.\n   *\n   * @param {string} [str]\n   * @return {(string|Command)}\n   */\n  summary(str) {\n    if (str === undefined) return this._summary;\n    this._summary = str;\n    return this;\n  }\n\n  /**\n   * Set an alias for the command.\n   *\n   * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help.\n   *\n   * @param {string} [alias]\n   * @return {(string|Command)}\n   */\n\n  alias(alias) {\n    if (alias === undefined) return this._aliases[0]; // just return first, for backwards compatibility\n\n    /** @type {Command} */\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    let command = this;\n    if (\n      this.commands.length !== 0 &&\n      this.commands[this.commands.length - 1]._executableHandler\n    ) {\n      // assume adding alias for last added executable subcommand, rather than this\n      command = this.commands[this.commands.length - 1];\n    }\n\n    if (alias === command._name)\n      throw new Error(\"Command alias can't be the same as its name\");\n    const matchingCommand = this.parent?._findCommand(alias);\n    if (matchingCommand) {\n      // c.f. _registerCommand\n      const existingCmd = [matchingCommand.name()]\n        .concat(matchingCommand.aliases())\n        .join('|');\n      throw new Error(\n        `cannot add alias '${alias}' to command '${this.name()}' as already have command '${existingCmd}'`,\n      );\n    }\n\n    command._aliases.push(alias);\n    return this;\n  }\n\n  /**\n   * Set aliases for the command.\n   *\n   * Only the first alias is shown in the auto-generated help.\n   *\n   * @param {string[]} [aliases]\n   * @return {(string[]|Command)}\n   */\n\n  aliases(aliases) {\n    // Getter for the array of aliases is the main reason for having aliases() in addition to alias().\n    if (aliases === undefined) return this._aliases;\n\n    aliases.forEach((alias) => this.alias(alias));\n    return this;\n  }\n\n  /**\n   * Set / get the command usage `str`.\n   *\n   * @param {string} [str]\n   * @return {(string|Command)}\n   */\n\n  usage(str) {\n    if (str === undefined) {\n      if (this._usage) return this._usage;\n\n      const args = this.registeredArguments.map((arg) => {\n        return humanReadableArgName(arg);\n      });\n      return []\n        .concat(\n          this.options.length || this._helpOption !== null ? '[options]' : [],\n          this.commands.length ? '[command]' : [],\n          this.registeredArguments.length ? args : [],\n        )\n        .join(' ');\n    }\n\n    this._usage = str;\n    return this;\n  }\n\n  /**\n   * Get or set the name of the command.\n   *\n   * @param {string} [str]\n   * @return {(string|Command)}\n   */\n\n  name(str) {\n    if (str === undefined) return this._name;\n    this._name = str;\n    return this;\n  }\n\n  /**\n   * Set/get the help group heading for this subcommand in parent command's help.\n   *\n   * @param {string} [heading]\n   * @return {Command | string}\n   */\n\n  helpGroup(heading) {\n    if (heading === undefined) return this._helpGroupHeading ?? '';\n    this._helpGroupHeading = heading;\n    return this;\n  }\n\n  /**\n   * Set/get the default help group heading for subcommands added to this command.\n   * (This does not override a group set directly on the subcommand using .helpGroup().)\n   *\n   * @example\n   * program.commandsGroup('Development Commands:);\n   * program.command('watch')...\n   * program.command('lint')...\n   * ...\n   *\n   * @param {string} [heading]\n   * @returns {Command | string}\n   */\n  commandsGroup(heading) {\n    if (heading === undefined) return this._defaultCommandGroup ?? '';\n    this._defaultCommandGroup = heading;\n    return this;\n  }\n\n  /**\n   * Set/get the default help group heading for options added to this command.\n   * (This does not override a group set directly on the option using .helpGroup().)\n   *\n   * @example\n   * program\n   *   .optionsGroup('Development Options:')\n   *   .option('-d, --debug', 'output extra debugging')\n   *   .option('-p, --profile', 'output profiling information')\n   *\n   * @param {string} [heading]\n   * @returns {Command | string}\n   */\n  optionsGroup(heading) {\n    if (heading === undefined) return this._defaultOptionGroup ?? '';\n    this._defaultOptionGroup = heading;\n    return this;\n  }\n\n  /**\n   * @param {Option} option\n   * @private\n   */\n  _initOptionGroup(option) {\n    if (this._defaultOptionGroup && !option.helpGroupHeading)\n      option.helpGroup(this._defaultOptionGroup);\n  }\n\n  /**\n   * @param {Command} cmd\n   * @private\n   */\n  _initCommandGroup(cmd) {\n    if (this._defaultCommandGroup && !cmd.helpGroup())\n      cmd.helpGroup(this._defaultCommandGroup);\n  }\n\n  /**\n   * Set the name of the command from script filename, such as process.argv[1],\n   * or require.main.filename, or __filename.\n   *\n   * (Used internally and public although not documented in README.)\n   *\n   * @example\n   * program.nameFromFilename(require.main.filename);\n   *\n   * @param {string} filename\n   * @return {Command}\n   */\n\n  nameFromFilename(filename) {\n    this._name = path.basename(filename, path.extname(filename));\n\n    return this;\n  }\n\n  /**\n   * Get or set the directory for searching for executable subcommands of this command.\n   *\n   * @example\n   * program.executableDir(__dirname);\n   * // or\n   * program.executableDir('subcommands');\n   *\n   * @param {string} [path]\n   * @return {(string|null|Command)}\n   */\n\n  executableDir(path) {\n    if (path === undefined) return this._executableDir;\n    this._executableDir = path;\n    return this;\n  }\n\n  /**\n   * Return program help documentation.\n   *\n   * @param {{ error: boolean }} [contextOptions] - pass {error:true} to wrap for stderr instead of stdout\n   * @return {string}\n   */\n\n  helpInformation(contextOptions) {\n    const helper = this.createHelp();\n    const context = this._getOutputContext(contextOptions);\n    helper.prepareContext({\n      error: context.error,\n      helpWidth: context.helpWidth,\n      outputHasColors: context.hasColors,\n    });\n    const text = helper.formatHelp(this, helper);\n    if (context.hasColors) return text;\n    return this._outputConfiguration.stripColor(text);\n  }\n\n  /**\n   * @typedef HelpContext\n   * @type {object}\n   * @property {boolean} error\n   * @property {number} helpWidth\n   * @property {boolean} hasColors\n   * @property {function} write - includes stripColor if needed\n   *\n   * @returns {HelpContext}\n   * @private\n   */\n\n  _getOutputContext(contextOptions) {\n    contextOptions = contextOptions || {};\n    const error = !!contextOptions.error;\n    let baseWrite;\n    let hasColors;\n    let helpWidth;\n    if (error) {\n      baseWrite = (str) => this._outputConfiguration.writeErr(str);\n      hasColors = this._outputConfiguration.getErrHasColors();\n      helpWidth = this._outputConfiguration.getErrHelpWidth();\n    } else {\n      baseWrite = (str) => this._outputConfiguration.writeOut(str);\n      hasColors = this._outputConfiguration.getOutHasColors();\n      helpWidth = this._outputConfiguration.getOutHelpWidth();\n    }\n    const write = (str) => {\n      if (!hasColors) str = this._outputConfiguration.stripColor(str);\n      return baseWrite(str);\n    };\n    return { error, write, hasColors, helpWidth };\n  }\n\n  /**\n   * Output help information for this command.\n   *\n   * Outputs built-in help, and custom text added using `.addHelpText()`.\n   *\n   * @param {{ error: boolean } | Function} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n   */\n\n  outputHelp(contextOptions) {\n    let deprecatedCallback;\n    if (typeof contextOptions === 'function') {\n      deprecatedCallback = contextOptions;\n      contextOptions = undefined;\n    }\n\n    const outputContext = this._getOutputContext(contextOptions);\n    /** @type {HelpTextEventContext} */\n    const eventContext = {\n      error: outputContext.error,\n      write: outputContext.write,\n      command: this,\n    };\n\n    this._getCommandAndAncestors()\n      .reverse()\n      .forEach((command) => command.emit('beforeAllHelp', eventContext));\n    this.emit('beforeHelp', eventContext);\n\n    let helpInformation = this.helpInformation({ error: outputContext.error });\n    if (deprecatedCallback) {\n      helpInformation = deprecatedCallback(helpInformation);\n      if (\n        typeof helpInformation !== 'string' &&\n        !Buffer.isBuffer(helpInformation)\n      ) {\n        throw new Error('outputHelp callback must return a string or a Buffer');\n      }\n    }\n    outputContext.write(helpInformation);\n\n    if (this._getHelpOption()?.long) {\n      this.emit(this._getHelpOption().long); // deprecated\n    }\n    this.emit('afterHelp', eventContext);\n    this._getCommandAndAncestors().forEach((command) =>\n      command.emit('afterAllHelp', eventContext),\n    );\n  }\n\n  /**\n   * You can pass in flags and a description to customise the built-in help option.\n   * Pass in false to disable the built-in help option.\n   *\n   * @example\n   * program.helpOption('-?, --help' 'show help'); // customise\n   * program.helpOption(false); // disable\n   *\n   * @param {(string | boolean)} flags\n   * @param {string} [description]\n   * @return {Command} `this` command for chaining\n   */\n\n  helpOption(flags, description) {\n    // Support enabling/disabling built-in help option.\n    if (typeof flags === 'boolean') {\n      if (flags) {\n        if (this._helpOption === null) this._helpOption = undefined; // reenable\n        if (this._defaultOptionGroup) {\n          // make the option to store the group\n          this._initOptionGroup(this._getHelpOption());\n        }\n      } else {\n        this._helpOption = null; // disable\n      }\n      return this;\n    }\n\n    // Customise flags and description.\n    this._helpOption = this.createOption(\n      flags ?? '-h, --help',\n      description ?? 'display help for command',\n    );\n    // init group unless lazy create\n    if (flags || description) this._initOptionGroup(this._helpOption);\n\n    return this;\n  }\n\n  /**\n   * Lazy create help option.\n   * Returns null if has been disabled with .helpOption(false).\n   *\n   * @returns {(Option | null)} the help option\n   * @package\n   */\n  _getHelpOption() {\n    // Lazy create help option on demand.\n    if (this._helpOption === undefined) {\n      this.helpOption(undefined, undefined);\n    }\n    return this._helpOption;\n  }\n\n  /**\n   * Supply your own option to use for the built-in help option.\n   * This is an alternative to using helpOption() to customise the flags and description etc.\n   *\n   * @param {Option} option\n   * @return {Command} `this` command for chaining\n   */\n  addHelpOption(option) {\n    this._helpOption = option;\n    this._initOptionGroup(option);\n    return this;\n  }\n\n  /**\n   * Output help information and exit.\n   *\n   * Outputs built-in help, and custom text added using `.addHelpText()`.\n   *\n   * @param {{ error: boolean }} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n   */\n\n  help(contextOptions) {\n    this.outputHelp(contextOptions);\n    let exitCode = Number(process.exitCode ?? 0); // process.exitCode does allow a string or an integer, but we prefer just a number\n    if (\n      exitCode === 0 &&\n      contextOptions &&\n      typeof contextOptions !== 'function' &&\n      contextOptions.error\n    ) {\n      exitCode = 1;\n    }\n    // message: do not have all displayed text available so only passing placeholder.\n    this._exit(exitCode, 'commander.help', '(outputHelp)');\n  }\n\n  /**\n   * // Do a little typing to coordinate emit and listener for the help text events.\n   * @typedef HelpTextEventContext\n   * @type {object}\n   * @property {boolean} error\n   * @property {Command} command\n   * @property {function} write\n   */\n\n  /**\n   * Add additional text to be displayed with the built-in help.\n   *\n   * Position is 'before' or 'after' to affect just this command,\n   * and 'beforeAll' or 'afterAll' to affect this command and all its subcommands.\n   *\n   * @param {string} position - before or after built-in help\n   * @param {(string | Function)} text - string to add, or a function returning a string\n   * @return {Command} `this` command for chaining\n   */\n\n  addHelpText(position, text) {\n    const allowedValues = ['beforeAll', 'before', 'after', 'afterAll'];\n    if (!allowedValues.includes(position)) {\n      throw new Error(`Unexpected value for position to addHelpText.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n    }\n\n    const helpEvent = `${position}Help`;\n    this.on(helpEvent, (/** @type {HelpTextEventContext} */ context) => {\n      let helpStr;\n      if (typeof text === 'function') {\n        helpStr = text({ error: context.error, command: context.command });\n      } else {\n        helpStr = text;\n      }\n      // Ignore falsy value when nothing to output.\n      if (helpStr) {\n        context.write(`${helpStr}\\n`);\n      }\n    });\n    return this;\n  }\n\n  /**\n   * Output help information if help flags specified\n   *\n   * @param {Array} args - array of options to search for help flags\n   * @private\n   */\n\n  _outputHelpIfRequested(args) {\n    const helpOption = this._getHelpOption();\n    const helpRequested = helpOption && args.find((arg) => helpOption.is(arg));\n    if (helpRequested) {\n      this.outputHelp();\n      // (Do not have all displayed text available so only passing placeholder.)\n      this._exit(0, 'commander.helpDisplayed', '(outputHelp)');\n    }\n  }\n}\n\n/**\n * Scan arguments and increment port number for inspect calls (to avoid conflicts when spawning new command).\n *\n * @param {string[]} args - array of arguments from node.execArgv\n * @returns {string[]}\n * @private\n */\n\nfunction incrementNodeInspectorPort(args) {\n  // Testing for these options:\n  //  --inspect[=[host:]port]\n  //  --inspect-brk[=[host:]port]\n  //  --inspect-port=[host:]port\n  return args.map((arg) => {\n    if (!arg.startsWith('--inspect')) {\n      return arg;\n    }\n    let debugOption;\n    let debugHost = '127.0.0.1';\n    let debugPort = '9229';\n    let match;\n    if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) {\n      // e.g. --inspect\n      debugOption = match[1];\n    } else if (\n      (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null\n    ) {\n      debugOption = match[1];\n      if (/^\\d+$/.test(match[3])) {\n        // e.g. --inspect=1234\n        debugPort = match[3];\n      } else {\n        // e.g. --inspect=localhost\n        debugHost = match[3];\n      }\n    } else if (\n      (match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\\d+)$/)) !== null\n    ) {\n      // e.g. --inspect=localhost:1234\n      debugOption = match[1];\n      debugHost = match[3];\n      debugPort = match[4];\n    }\n\n    if (debugOption && debugPort !== '0') {\n      return `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`;\n    }\n    return arg;\n  });\n}\n\n/**\n * @returns {boolean | undefined}\n * @package\n */\nfunction useColor() {\n  // Test for common conventions.\n  // NB: the observed behaviour is in combination with how author adds color! For example:\n  //   - we do not test NODE_DISABLE_COLORS, but util:styletext does\n  //   - we do test NO_COLOR, but Chalk does not\n  //\n  // References:\n  // https://no-color.org\n  // https://bixense.com/clicolors/\n  // https://github.com/nodejs/node/blob/0a00217a5f67ef4a22384cfc80eb6dd9a917fdc1/lib/internal/tty.js#L109\n  // https://github.com/chalk/supports-color/blob/c214314a14bcb174b12b3014b2b0a8de375029ae/index.js#L33\n  // (https://force-color.org recent web page from 2023, does not match major javascript implementations)\n\n  if (\n    process.env.NO_COLOR ||\n    process.env.FORCE_COLOR === '0' ||\n    process.env.FORCE_COLOR === 'false'\n  )\n    return false;\n  if (process.env.FORCE_COLOR || process.env.CLICOLOR_FORCE !== undefined)\n    return true;\n  return undefined;\n}\n\nexports.Command = Command;\nexports.useColor = useColor; // exporting for tests\n", "const { Argument } = require('./lib/argument.js');\nconst { Command } = require('./lib/command.js');\nconst { CommanderError, InvalidArgumentError } = require('./lib/error.js');\nconst { Help } = require('./lib/help.js');\nconst { Option } = require('./lib/option.js');\n\nexports.program = new Command();\n\nexports.createCommand = (name) => new Command(name);\nexports.createOption = (flags, description) => new Option(flags, description);\nexports.createArgument = (name, description) => new Argument(name, description);\n\n/**\n * Expose classes\n */\n\nexports.Command = Command;\nexports.Option = Option;\nexports.Argument = Argument;\nexports.Help = Help;\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\nexports.InvalidOptionArgumentError = InvalidArgumentError; // Deprecated\n", "import commander from './index.js';\n\n// wrapper to provide named exports for ESM.\nexport const {\n  program,\n  createCommand,\n  createArgument,\n  createOption,\n  CommanderError,\n  InvalidArgumentError,\n  InvalidOptionArgumentError, // deprecated old name\n  Command,\n  Argument,\n  Option,\n  Help,\n} = commander;\n", "'use strict';\n\nmodule.exports = function (fetch, defaults) {\n  defaults = defaults || {};\n  if (typeof fetch !== 'function') {\n    throw new ArgumentError('fetch must be a function');\n  }\n\n  if (typeof defaults !== 'object') {\n    throw new ArgumentError('defaults must be an object');\n  }\n\n  if (defaults.retries !== undefined && !isPositiveInteger(defaults.retries)) {\n    throw new ArgumentError('retries must be a positive integer');\n  }\n\n  if (defaults.retryDelay !== undefined && !isPositiveInteger(defaults.retryDelay) && typeof defaults.retryDelay !== 'function') {\n    throw new ArgumentError('retryDelay must be a positive integer or a function returning a positive integer');\n  }\n\n  if (defaults.retryOn !== undefined && !Array.isArray(defaults.retryOn) && typeof defaults.retryOn !== 'function') {\n    throw new ArgumentError('retryOn property expects an array or function');\n  }\n\n  var baseDefaults = {\n    retries: 3,\n    retryDelay: 1000,\n    retryOn: [],\n  };\n\n  defaults = Object.assign(baseDefaults, defaults);\n\n  return function fetchRetry(input, init) {\n    var retries = defaults.retries;\n    var retryDelay = defaults.retryDelay;\n    var retryOn = defaults.retryOn;\n\n    if (init && init.retries !== undefined) {\n      if (isPositiveInteger(init.retries)) {\n        retries = init.retries;\n      } else {\n        throw new ArgumentError('retries must be a positive integer');\n      }\n    }\n\n    if (init && init.retryDelay !== undefined) {\n      if (isPositiveInteger(init.retryDelay) || (typeof init.retryDelay === 'function')) {\n        retryDelay = init.retryDelay;\n      } else {\n        throw new ArgumentError('retryDelay must be a positive integer or a function returning a positive integer');\n      }\n    }\n\n    if (init && init.retryOn) {\n      if (Array.isArray(init.retryOn) || (typeof init.retryOn === 'function')) {\n        retryOn = init.retryOn;\n      } else {\n        throw new ArgumentError('retryOn property expects an array or function');\n      }\n    }\n\n    // eslint-disable-next-line no-undef\n    return new Promise(function (resolve, reject) {\n      var wrappedFetch = function (attempt) {\n        // As of node 18, this is no longer needed since node comes with native support for fetch:\n        /* istanbul ignore next */\n        var _input =\n          typeof Request !== 'undefined' && input instanceof Request\n            ? input.clone()\n            : input;\n        fetch(_input, init)\n          .then(function (response) {\n            if (Array.isArray(retryOn) && retryOn.indexOf(response.status) === -1) {\n              resolve(response);\n            } else if (typeof retryOn === 'function') {\n              try {\n                // eslint-disable-next-line no-undef\n                return Promise.resolve(retryOn(attempt, null, response))\n                  .then(function (retryOnResponse) {\n                    if(retryOnResponse) {\n                      retry(attempt, null, response);\n                    } else {\n                      resolve(response);\n                    }\n                  }).catch(reject);\n              } catch (error) {\n                reject(error);\n              }\n            } else {\n              if (attempt < retries) {\n                retry(attempt, null, response);\n              } else {\n                resolve(response);\n              }\n            }\n          })\n          .catch(function (error) {\n            if (typeof retryOn === 'function') {\n              try {\n                // eslint-disable-next-line no-undef\n                Promise.resolve(retryOn(attempt, error, null))\n                  .then(function (retryOnResponse) {\n                    if(retryOnResponse) {\n                      retry(attempt, error, null);\n                    } else {\n                      reject(error);\n                    }\n                  })\n                  .catch(function(error) {\n                    reject(error);\n                  });\n              } catch(error) {\n                reject(error);\n              }\n            } else if (attempt < retries) {\n              retry(attempt, error, null);\n            } else {\n              reject(error);\n            }\n          });\n      };\n\n      function retry(attempt, error, response) {\n        var delay = (typeof retryDelay === 'function') ?\n          retryDelay(attempt, error, response) : retryDelay;\n        setTimeout(function () {\n          wrappedFetch(++attempt);\n        }, delay);\n      }\n\n      wrappedFetch(0);\n    });\n  };\n};\n\nfunction isPositiveInteger(value) {\n  return Number.isInteger(value) && value >= 0;\n}\n\nfunction ArgumentError(message) {\n  this.name = 'ArgumentError';\n  this.message = message;\n}\n", "export const version = \"1.49.0\";\n", "import { version as versionInner } from \"../index.js\";\n\nexport const version = process.env.CONVEX_VERSION_OVERRIDE || versionInner;\n", "export const isUpKey = (key, keybindings = []) => \n// The up key\nkey.name === 'up' ||\n    // Vim keybinding: hjkl keys map to left/down/up/right\n    (keybindings.includes('vim') && key.name === 'k') ||\n    // Emacs keybinding: Ctrl+P means \"previous\" in Emacs navigation conventions\n    (keybindings.includes('emacs') && key.ctrl && key.name === 'p');\nexport const isDownKey = (key, keybindings = []) => \n// The down key\nkey.name === 'down' ||\n    // Vim keybinding: hjkl keys map to left/down/up/right\n    (keybindings.includes('vim') && key.name === 'j') ||\n    // Emacs keybinding: Ctrl+N means \"next\" in Emacs navigation conventions\n    (keybindings.includes('emacs') && key.ctrl && key.name === 'n');\nexport const isSpaceKey = (key) => key.name === 'space';\nexport const isBackspaceKey = (key) => key.name === 'backspace';\nexport const isTabKey = (key) => key.name === 'tab';\nexport const isNumberKey = (key) => '1234567890'.includes(key.name);\nexport const isEnterKey = (key) => key.name === 'enter' || key.name === 'return';\nexport const isShiftKey = (key) => key.shift;\n", "export class AbortPromptError extends Error {\n    name = 'AbortPromptError';\n    message = 'Prompt was aborted';\n    constructor(options) {\n        super();\n        this.cause = options?.cause;\n    }\n}\nexport class CancelPromptError extends Error {\n    name = 'CancelPromptError';\n    message = 'Prompt was canceled';\n}\nexport class ExitPromptError extends Error {\n    name = 'ExitPromptError';\n}\nexport class HookError extends Error {\n    name = 'HookError';\n}\nexport class ValidationError extends Error {\n    name = 'ValidationError';\n}\n", "/* eslint @typescript-eslint/no-explicit-any: [\"off\"] */\nimport { AsyncLocalStorage, AsyncResource } from 'node:async_hooks';\nimport { HookError, ValidationError } from \"./errors.js\";\nconst hookStorage = new AsyncLocalStorage();\nfunction createStore(rl) {\n    const store = {\n        rl,\n        hooks: [],\n        hooksCleanup: [],\n        hooksEffect: [],\n        index: 0,\n        handleChange() { },\n    };\n    return store;\n}\n// Run callback in with the hook engine setup.\nexport function withHooks(rl, cb) {\n    const store = createStore(rl);\n    return hookStorage.run(store, () => {\n        function cycle(render) {\n            store.handleChange = () => {\n                store.index = 0;\n                render();\n            };\n            store.handleChange();\n        }\n        return cb(cycle);\n    });\n}\n// Safe getStore utility that'll return the store or throw if undefined.\nfunction getStore() {\n    const store = hookStorage.getStore();\n    if (!store) {\n        throw new HookError('[Inquirer] Hook functions can only be called from within a prompt');\n    }\n    return store;\n}\nexport function readline() {\n    return getStore().rl;\n}\n// Merge state updates happening within the callback function to avoid multiple renders.\nexport function withUpdates(fn) {\n    const wrapped = (...args) => {\n        const store = getStore();\n        let shouldUpdate = false;\n        const oldHandleChange = store.handleChange;\n        store.handleChange = () => {\n            shouldUpdate = true;\n        };\n        const returnValue = fn(...args);\n        if (shouldUpdate) {\n            oldHandleChange();\n        }\n        store.handleChange = oldHandleChange;\n        return returnValue;\n    };\n    return AsyncResource.bind(wrapped);\n}\nexport function withPointer(cb) {\n    const store = getStore();\n    const { index } = store;\n    const pointer = {\n        get() {\n            return store.hooks[index];\n        },\n        set(value) {\n            store.hooks[index] = value;\n        },\n        initialized: index in store.hooks,\n    };\n    const returnValue = cb(pointer);\n    store.index++;\n    return returnValue;\n}\nexport function handleChange() {\n    getStore().handleChange();\n}\nexport const effectScheduler = {\n    queue(cb) {\n        const store = getStore();\n        const { index } = store;\n        store.hooksEffect.push(() => {\n            store.hooksCleanup[index]?.();\n            const cleanFn = cb(readline());\n            if (cleanFn != null && typeof cleanFn !== 'function') {\n                throw new ValidationError('useEffect return value must be a cleanup function or nothing.');\n            }\n            store.hooksCleanup[index] = cleanFn;\n        });\n    },\n    run() {\n        const store = getStore();\n        withUpdates(() => {\n            store.hooksEffect.forEach((effect) => {\n                effect();\n            });\n            // Warning: Clean the hooks before exiting the `withUpdates` block.\n            // Failure to do so means an updates would hit the same effects again.\n            store.hooksEffect.length = 0;\n        })();\n    },\n    clearAll() {\n        const store = getStore();\n        store.hooksCleanup.forEach((cleanFn) => {\n            cleanFn?.();\n        });\n        store.hooksEffect.length = 0;\n        store.hooksCleanup.length = 0;\n    },\n};\n", "import { AsyncResource } from 'node:async_hooks';\nimport { withPointer, handleChange } from \"./hook-engine.js\";\nexport function useState(defaultValue) {\n    return withPointer((pointer) => {\n        const setState = AsyncResource.bind(function setState(newValue) {\n            // Noop if the value is still the same.\n            if (pointer.get() !== newValue) {\n                pointer.set(newValue);\n                // Trigger re-render\n                handleChange();\n            }\n        });\n        if (pointer.initialized) {\n            return [pointer.get(), setState];\n        }\n        const value = typeof defaultValue === 'function' ? defaultValue() : defaultValue;\n        pointer.set(value);\n        return [value, setState];\n    });\n}\n", "import { withPointer, effectScheduler } from \"./hook-engine.js\";\nexport function useEffect(cb, depArray) {\n    withPointer((pointer) => {\n        const oldDeps = pointer.get();\n        const hasChanged = !Array.isArray(oldDeps) || depArray.some((dep, i) => !Object.is(dep, oldDeps[i]));\n        if (hasChanged) {\n            effectScheduler.queue(cb);\n        }\n        pointer.set(depArray);\n    });\n}\n", "// process.env dot-notation access prints:\n// Property 'TERM' comes from an index signature, so it must be accessed with ['TERM'].ts(4111)\n/* eslint dot-notation: [\"off\"] */\nimport process from 'node:process';\n// Ported from is-unicode-supported\nfunction isUnicodeSupported() {\n    if (process.platform !== 'win32') {\n        return process.env['TERM'] !== 'linux'; // Linux console (kernel)\n    }\n    return (Boolean(process.env['WT_SESSION']) || // Windows Terminal\n        Boolean(process.env['TERMINUS_SUBLIME']) || // Terminus (<0.2.27)\n        process.env['ConEmuTask'] === '{cmd::Cmder}' || // ConEmu and cmder\n        process.env['TERM_PROGRAM'] === 'Terminus-Sublime' ||\n        process.env['TERM_PROGRAM'] === 'vscode' ||\n        process.env['TERM'] === 'xterm-256color' ||\n        process.env['TERM'] === 'alacritty' ||\n        process.env['TERMINAL_EMULATOR'] === 'JetBrains-JediTerm');\n}\n// Ported from figures\nconst common = {\n    circleQuestionMark: '(?)',\n    questionMarkPrefix: '(?)',\n    square: '\u2588',\n    squareDarkShade: '\u2593',\n    squareMediumShade: '\u2592',\n    squareLightShade: '\u2591',\n    squareTop: '\u2580',\n    squareBottom: '\u2584',\n    squareLeft: '\u258C',\n    squareRight: '\u2590',\n    squareCenter: '\u25A0',\n    bullet: '\u25CF',\n    dot: '\u2024',\n    ellipsis: '\u2026',\n    pointerSmall: '\u203A',\n    triangleUp: '\u25B2',\n    triangleUpSmall: '\u25B4',\n    triangleDown: '\u25BC',\n    triangleDownSmall: '\u25BE',\n    triangleLeftSmall: '\u25C2',\n    triangleRightSmall: '\u25B8',\n    home: '\u2302',\n    heart: '\u2665',\n    musicNote: '\u266A',\n    musicNoteBeamed: '\u266B',\n    arrowUp: '\u2191',\n    arrowDown: '\u2193',\n    arrowLeft: '\u2190',\n    arrowRight: '\u2192',\n    arrowLeftRight: '\u2194',\n    arrowUpDown: '\u2195',\n    almostEqual: '\u2248',\n    notEqual: '\u2260',\n    lessOrEqual: '\u2264',\n    greaterOrEqual: '\u2265',\n    identical: '\u2261',\n    infinity: '\u221E',\n    subscriptZero: '\u2080',\n    subscriptOne: '\u2081',\n    subscriptTwo: '\u2082',\n    subscriptThree: '\u2083',\n    subscriptFour: '\u2084',\n    subscriptFive: '\u2085',\n    subscriptSix: '\u2086',\n    subscriptSeven: '\u2087',\n    subscriptEight: '\u2088',\n    subscriptNine: '\u2089',\n    oneHalf: '\u00BD',\n    oneThird: '\u2153',\n    oneQuarter: '\u00BC',\n    oneFifth: '\u2155',\n    oneSixth: '\u2159',\n    oneEighth: '\u215B',\n    twoThirds: '\u2154',\n    twoFifths: '\u2156',\n    threeQuarters: '\u00BE',\n    threeFifths: '\u2157',\n    threeEighths: '\u215C',\n    fourFifths: '\u2158',\n    fiveSixths: '\u215A',\n    fiveEighths: '\u215D',\n    sevenEighths: '\u215E',\n    line: '\u2500',\n    lineBold: '\u2501',\n    lineDouble: '\u2550',\n    lineDashed0: '\u2504',\n    lineDashed1: '\u2505',\n    lineDashed2: '\u2508',\n    lineDashed3: '\u2509',\n    lineDashed4: '\u254C',\n    lineDashed5: '\u254D',\n    lineDashed6: '\u2574',\n    lineDashed7: '\u2576',\n    lineDashed8: '\u2578',\n    lineDashed9: '\u257A',\n    lineDashed10: '\u257C',\n    lineDashed11: '\u257E',\n    lineDashed12: '\u2212',\n    lineDashed13: '\u2013',\n    lineDashed14: '\u2010',\n    lineDashed15: '\u2043',\n    lineVertical: '\u2502',\n    lineVerticalBold: '\u2503',\n    lineVerticalDouble: '\u2551',\n    lineVerticalDashed0: '\u2506',\n    lineVerticalDashed1: '\u2507',\n    lineVerticalDashed2: '\u250A',\n    lineVerticalDashed3: '\u250B',\n    lineVerticalDashed4: '\u254E',\n    lineVerticalDashed5: '\u254F',\n    lineVerticalDashed6: '\u2575',\n    lineVerticalDashed7: '\u2577',\n    lineVerticalDashed8: '\u2579',\n    lineVerticalDashed9: '\u257B',\n    lineVerticalDashed10: '\u257D',\n    lineVerticalDashed11: '\u257F',\n    lineDownLeft: '\u2510',\n    lineDownLeftArc: '\u256E',\n    lineDownBoldLeftBold: '\u2513',\n    lineDownBoldLeft: '\u2512',\n    lineDownLeftBold: '\u2511',\n    lineDownDoubleLeftDouble: '\u2557',\n    lineDownDoubleLeft: '\u2556',\n    lineDownLeftDouble: '\u2555',\n    lineDownRight: '\u250C',\n    lineDownRightArc: '\u256D',\n    lineDownBoldRightBold: '\u250F',\n    lineDownBoldRight: '\u250E',\n    lineDownRightBold: '\u250D',\n    lineDownDoubleRightDouble: '\u2554',\n    lineDownDoubleRight: '\u2553',\n    lineDownRightDouble: '\u2552',\n    lineUpLeft: '\u2518',\n    lineUpLeftArc: '\u256F',\n    lineUpBoldLeftBold: '\u251B',\n    lineUpBoldLeft: '\u251A',\n    lineUpLeftBold: '\u2519',\n    lineUpDoubleLeftDouble: '\u255D',\n    lineUpDoubleLeft: '\u255C',\n    lineUpLeftDouble: '\u255B',\n    lineUpRight: '\u2514',\n    lineUpRightArc: '\u2570',\n    lineUpBoldRightBold: '\u2517',\n    lineUpBoldRight: '\u2516',\n    lineUpRightBold: '\u2515',\n    lineUpDoubleRightDouble: '\u255A',\n    lineUpDoubleRight: '\u2559',\n    lineUpRightDouble: '\u2558',\n    lineUpDownLeft: '\u2524',\n    lineUpBoldDownBoldLeftBold: '\u252B',\n    lineUpBoldDownBoldLeft: '\u2528',\n    lineUpDownLeftBold: '\u2525',\n    lineUpBoldDownLeftBold: '\u2529',\n    lineUpDownBoldLeftBold: '\u252A',\n    lineUpDownBoldLeft: '\u2527',\n    lineUpBoldDownLeft: '\u2526',\n    lineUpDoubleDownDoubleLeftDouble: '\u2563',\n    lineUpDoubleDownDoubleLeft: '\u2562',\n    lineUpDownLeftDouble: '\u2561',\n    lineUpDownRight: '\u251C',\n    lineUpBoldDownBoldRightBold: '\u2523',\n    lineUpBoldDownBoldRight: '\u2520',\n    lineUpDownRightBold: '\u251D',\n    lineUpBoldDownRightBold: '\u2521',\n    lineUpDownBoldRightBold: '\u2522',\n    lineUpDownBoldRight: '\u251F',\n    lineUpBoldDownRight: '\u251E',\n    lineUpDoubleDownDoubleRightDouble: '\u2560',\n    lineUpDoubleDownDoubleRight: '\u255F',\n    lineUpDownRightDouble: '\u255E',\n    lineDownLeftRight: '\u252C',\n    lineDownBoldLeftBoldRightBold: '\u2533',\n    lineDownLeftBoldRightBold: '\u252F',\n    lineDownBoldLeftRight: '\u2530',\n    lineDownBoldLeftBoldRight: '\u2531',\n    lineDownBoldLeftRightBold: '\u2532',\n    lineDownLeftRightBold: '\u252E',\n    lineDownLeftBoldRight: '\u252D',\n    lineDownDoubleLeftDoubleRightDouble: '\u2566',\n    lineDownDoubleLeftRight: '\u2565',\n    lineDownLeftDoubleRightDouble: '\u2564',\n    lineUpLeftRight: '\u2534',\n    lineUpBoldLeftBoldRightBold: '\u253B',\n    lineUpLeftBoldRightBold: '\u2537',\n    lineUpBoldLeftRight: '\u2538',\n    lineUpBoldLeftBoldRight: '\u2539',\n    lineUpBoldLeftRightBold: '\u253A',\n    lineUpLeftRightBold: '\u2536',\n    lineUpLeftBoldRight: '\u2535',\n    lineUpDoubleLeftDoubleRightDouble: '\u2569',\n    lineUpDoubleLeftRight: '\u2568',\n    lineUpLeftDoubleRightDouble: '\u2567',\n    lineUpDownLeftRight: '\u253C',\n    lineUpBoldDownBoldLeftBoldRightBold: '\u254B',\n    lineUpDownBoldLeftBoldRightBold: '\u2548',\n    lineUpBoldDownLeftBoldRightBold: '\u2547',\n    lineUpBoldDownBoldLeftRightBold: '\u254A',\n    lineUpBoldDownBoldLeftBoldRight: '\u2549',\n    lineUpBoldDownLeftRight: '\u2540',\n    lineUpDownBoldLeftRight: '\u2541',\n    lineUpDownLeftBoldRight: '\u253D',\n    lineUpDownLeftRightBold: '\u253E',\n    lineUpBoldDownBoldLeftRight: '\u2542',\n    lineUpDownLeftBoldRightBold: '\u253F',\n    lineUpBoldDownLeftBoldRight: '\u2543',\n    lineUpBoldDownLeftRightBold: '\u2544',\n    lineUpDownBoldLeftBoldRight: '\u2545',\n    lineUpDownBoldLeftRightBold: '\u2546',\n    lineUpDoubleDownDoubleLeftDoubleRightDouble: '\u256C',\n    lineUpDoubleDownDoubleLeftRight: '\u256B',\n    lineUpDownLeftDoubleRightDouble: '\u256A',\n    lineCross: '\u2573',\n    lineBackslash: '\u2572',\n    lineSlash: '\u2571',\n};\nconst specialMainSymbols = {\n    tick: '\u2714',\n    info: '\u2139',\n    warning: '\u26A0',\n    cross: '\u2718',\n    squareSmall: '\u25FB',\n    squareSmallFilled: '\u25FC',\n    circle: '\u25EF',\n    circleFilled: '\u25C9',\n    circleDotted: '\u25CC',\n    circleDouble: '\u25CE',\n    circleCircle: '\u24DE',\n    circleCross: '\u24E7',\n    circlePipe: '\u24BE',\n    radioOn: '\u25C9',\n    radioOff: '\u25EF',\n    checkboxOn: '\u2612',\n    checkboxOff: '\u2610',\n    checkboxCircleOn: '\u24E7',\n    checkboxCircleOff: '\u24BE',\n    pointer: '\u276F',\n    triangleUpOutline: '\u25B3',\n    triangleLeft: '\u25C0',\n    triangleRight: '\u25B6',\n    lozenge: '\u25C6',\n    lozengeOutline: '\u25C7',\n    hamburger: '\u2630',\n    smiley: '\u32E1',\n    mustache: '\u0DF4',\n    star: '\u2605',\n    play: '\u25B6',\n    nodejs: '\u2B22',\n    oneSeventh: '\u2150',\n    oneNinth: '\u2151',\n    oneTenth: '\u2152',\n};\nconst specialFallbackSymbols = {\n    tick: '\u221A',\n    info: 'i',\n    warning: '\u203C',\n    cross: '\u00D7',\n    squareSmall: '\u25A1',\n    squareSmallFilled: '\u25A0',\n    circle: '( )',\n    circleFilled: '(*)',\n    circleDotted: '( )',\n    circleDouble: '( )',\n    circleCircle: '(\u25CB)',\n    circleCross: '(\u00D7)',\n    circlePipe: '(\u2502)',\n    radioOn: '(*)',\n    radioOff: '( )',\n    checkboxOn: '[\u00D7]',\n    checkboxOff: '[ ]',\n    checkboxCircleOn: '(\u00D7)',\n    checkboxCircleOff: '( )',\n    pointer: '>',\n    triangleUpOutline: '\u2206',\n    triangleLeft: '\u25C4',\n    triangleRight: '\u25BA',\n    lozenge: '\u2666',\n    lozengeOutline: '\u25CA',\n    hamburger: '\u2261',\n    smiley: '\u263A',\n    mustache: '\u250C\u2500\u2510',\n    star: '\u2736',\n    play: '\u25BA',\n    nodejs: '\u2666',\n    oneSeventh: '1/7',\n    oneNinth: '1/9',\n    oneTenth: '1/10',\n};\nexport const mainSymbols = {\n    ...common,\n    ...specialMainSymbols,\n};\nexport const fallbackSymbols = {\n    ...common,\n    ...specialFallbackSymbols,\n};\nconst shouldUseMain = isUnicodeSupported();\nconst figures = shouldUseMain\n    ? mainSymbols\n    : fallbackSymbols;\nexport default figures;\nconst replacements = Object.entries(specialMainSymbols);\n// On terminals which do not support Unicode symbols, substitute them to other symbols\nexport const replaceSymbols = (string, { useFallback = !shouldUseMain } = {}) => {\n    if (useFallback) {\n        for (const [key, mainSymbol] of replacements) {\n            const fallbackSymbol = fallbackSymbols[key];\n            if (!fallbackSymbol) {\n                throw new Error(`Unable to find fallback for ${key}`);\n            }\n            string = string.replaceAll(mainSymbol, fallbackSymbol);\n        }\n    }\n    return string;\n};\n", "import { styleText } from 'node:util';\nimport figures from '@inquirer/figures';\nexport const defaultTheme = {\n    prefix: {\n        idle: styleText('blue', '?'),\n        done: styleText('green', figures.tick),\n    },\n    spinner: {\n        interval: 80,\n        frames: ['\u280B', '\u2819', '\u2839', '\u2838', '\u283C', '\u2834', '\u2826', '\u2827', '\u2807', '\u280F'].map((frame) => styleText('yellow', frame)),\n    },\n    style: {\n        answer: (text) => styleText('cyan', text),\n        message: (text) => styleText('bold', text),\n        error: (text) => styleText('red', `> ${text}`),\n        defaultAnswer: (text) => styleText('dim', `(${text})`),\n        help: (text) => styleText('dim', text),\n        highlight: (text) => styleText('cyan', text),\n        key: (text) => styleText('cyan', styleText('bold', `<${text}>`)),\n    },\n};\n", "import { defaultTheme } from \"./theme.js\";\nfunction isPlainObject(value) {\n    if (typeof value !== 'object' || value === null)\n        return false;\n    let proto = value;\n    while (Object.getPrototypeOf(proto) !== null) {\n        proto = Object.getPrototypeOf(proto);\n    }\n    return Object.getPrototypeOf(value) === proto;\n}\nfunction deepMerge(...objects) {\n    const output = {};\n    for (const obj of objects) {\n        for (const [key, value] of Object.entries(obj)) {\n            const prevValue = output[key];\n            output[key] =\n                isPlainObject(prevValue) && isPlainObject(value)\n                    ? deepMerge(prevValue, value)\n                    : value;\n        }\n    }\n    return output;\n}\nexport function makeTheme(...themes) {\n    const themesToMerge = [\n        defaultTheme,\n        ...themes.filter((theme) => theme != null),\n    ];\n    return deepMerge(...themesToMerge);\n}\n", "import { useState } from \"./use-state.js\";\nimport { useEffect } from \"./use-effect.js\";\nimport { makeTheme } from \"./make-theme.js\";\nexport function usePrefix({ status = 'idle', theme, }) {\n    const [showLoader, setShowLoader] = useState(false);\n    const [tick, setTick] = useState(0);\n    const { prefix, spinner } = makeTheme(theme);\n    useEffect(() => {\n        if (status === 'loading') {\n            let tickInterval;\n            let inc = -1;\n            // Delay displaying spinner by 300ms, to avoid flickering\n            const delayTimeout = setTimeout(() => {\n                setShowLoader(true);\n                tickInterval = setInterval(() => {\n                    inc = inc + 1;\n                    setTick(inc % spinner.frames.length);\n                }, spinner.interval);\n            }, 300);\n            return () => {\n                clearTimeout(delayTimeout);\n                clearInterval(tickInterval);\n            };\n        }\n        else {\n            setShowLoader(false);\n        }\n    }, [status]);\n    if (showLoader) {\n        return spinner.frames[tick];\n    }\n    // There's a delay before we show the loader. So we want to ignore `loading` here, and pass idle instead.\n    const iconName = status === 'loading' ? 'idle' : status;\n    return typeof prefix === 'string' ? prefix : (prefix[iconName] ?? prefix['idle']);\n}\n", "import { withPointer } from \"./hook-engine.js\";\nexport function useMemo(fn, dependencies) {\n    return withPointer((pointer) => {\n        const prev = pointer.get();\n        if (!prev ||\n            prev.dependencies.length !== dependencies.length ||\n            prev.dependencies.some((dep, i) => dep !== dependencies[i])) {\n            const value = fn();\n            pointer.set({ value, dependencies });\n            return value;\n        }\n        return prev.value;\n    });\n}\n", "import { useState } from \"./use-state.js\";\nexport function useRef(val) {\n    return useState({ current: val })[0];\n}\n", "import { useRef } from \"./use-ref.js\";\nimport { useEffect } from \"./use-effect.js\";\nimport { withUpdates } from \"./hook-engine.js\";\nexport function useKeypress(userHandler) {\n    const signal = useRef(userHandler);\n    signal.current = userHandler;\n    useEffect((rl) => {\n        let ignore = false;\n        const handler = withUpdates((_input, event) => {\n            if (ignore)\n                return;\n            void signal.current(event, rl);\n        });\n        rl.input.on('keypress', handler);\n        return () => {\n            ignore = true;\n            rl.input.removeListener('keypress', handler);\n        };\n    }, []);\n}\n", "'use strict';\n\nmodule.exports = cliWidth;\n\nfunction normalizeOpts(options) {\n  const defaultOpts = {\n    defaultWidth: 0,\n    output: process.stdout,\n    tty: require('tty'),\n  };\n\n  if (!options) {\n    return defaultOpts;\n  }\n\n  Object.keys(defaultOpts).forEach(function (key) {\n    if (!options[key]) {\n      options[key] = defaultOpts[key];\n    }\n  });\n\n  return options;\n}\n\nfunction cliWidth(options) {\n  const opts = normalizeOpts(options);\n\n  if (opts.output.getWindowSize) {\n    return opts.output.getWindowSize()[0] || opts.defaultWidth;\n  }\n\n  if (opts.tty.getWindowSize) {\n    return opts.tty.getWindowSize()[1] || opts.defaultWidth;\n  }\n\n  if (opts.output.columns) {\n    return opts.output.columns;\n  }\n\n  if (process.env.CLI_WIDTH) {\n    const width = parseInt(process.env.CLI_WIDTH, 10);\n\n    if (!isNaN(width) && width !== 0) {\n      return width;\n    }\n  }\n\n  return opts.defaultWidth;\n}\n", "module.exports = () => {\n\t// https://mths.be/emoji\n\treturn /[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26D3\\uFE0F?(?:\\u200D\\uD83D\\uDCA5)?|\\u26F9(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF43\\uDF45-\\uDF4A\\uDF4C-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDF44(?:\\u200D\\uD83D\\uDFEB)?|\\uDF4B(?:\\u200D\\uD83D\\uDFE9)?|\\uDFC3(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E-\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4\\uDEB5](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE41\\uDE43\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED8\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC08(?:\\u200D\\u2B1B)?|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC26(?:\\u200D(?:\\u2B1B|\\uD83D\\uDD25))?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDD75(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?|\\uDE42(?:\\u200D[\\u2194\\u2195]\\uFE0F?)?|\\uDEB6(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3C-\\uDD3E\\uDDB8\\uDDB9\\uDDCD\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE8A\\uDE8E-\\uDEC2\\uDEC6\\uDEC8\\uDECD-\\uDEDC\\uDEDF-\\uDEEA\\uDEEF]|\\uDDCE(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1|\\uDDD1\\u200D\\uD83E\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?|\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;\n};\n", "import stripAnsi from 'strip-ansi';\nimport {eastAsianWidth} from 'get-east-asian-width';\nimport emojiRegex from 'emoji-regex';\n\nconst segmenter = new Intl.Segmenter();\n\nconst defaultIgnorableCodePointRegex = /^\\p{Default_Ignorable_Code_Point}$/u;\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tconst {\n\t\tambiguousIsNarrow = true,\n\t\tcountAnsiEscapeCodes = false,\n\t} = options;\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tlet width = 0;\n\tconst eastAsianWidthOptions = {ambiguousAsWide: !ambiguousIsNarrow};\n\n\tfor (const {segment: character} of segmenter.segment(string)) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore zero-width characters\n\t\tif (\n\t\t\t(codePoint >= 0x20_0B && codePoint <= 0x20_0F) // Zero-width space, non-joiner, joiner, left-to-right mark, right-to-left mark\n\t\t\t|| codePoint === 0xFE_FF // Zero-width no-break space\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (\n\t\t\t(codePoint >= 0x3_00 && codePoint <= 0x3_6F) // Combining diacritical marks\n\t\t\t|| (codePoint >= 0x1A_B0 && codePoint <= 0x1A_FF) // Combining diacritical marks extended\n\t\t\t|| (codePoint >= 0x1D_C0 && codePoint <= 0x1D_FF) // Combining diacritical marks supplement\n\t\t\t|| (codePoint >= 0x20_D0 && codePoint <= 0x20_FF) // Combining diacritical marks for symbols\n\t\t\t|| (codePoint >= 0xFE_20 && codePoint <= 0xFE_2F) // Combining half marks\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore surrogate pairs\n\t\tif (codePoint >= 0xD8_00 && codePoint <= 0xDF_FF) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore variation selectors\n\t\tif (codePoint >= 0xFE_00 && codePoint <= 0xFE_0F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// This covers some of the above cases, but we still keep them for performance reasons.\n\t\tif (defaultIgnorableCodePointRegex.test(character)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// TODO: Use `/\\p{RGI_Emoji}/v` when targeting Node.js 20.\n\t\tif (emojiRegex().test(character)) {\n\t\t\twidth += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\twidth += eastAsianWidth(codePoint, eastAsianWidthOptions);\n\t}\n\n\treturn width;\n}\n", "const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n", "import stringWidth from 'string-width';\nimport stripAnsi from 'strip-ansi';\nimport ansiStyles from 'ansi-styles';\n\nconst ESCAPES = new Set([\n\t'\\u001B',\n\t'\\u009B',\n]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = '\\u0007';\nconst ANSI_CSI = '[';\nconst ANSI_OSC = ']';\nconst ANSI_SGR_TERMINATOR = 'm';\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = url => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${url}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = string => string.split(' ').map(character => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows, word, columns) => {\n\tconst characters = [...word];\n\n\tlet isInsideEscape = false;\n\tlet isInsideLinkEscape = false;\n\tlet visible = stringWidth(stripAnsi(rows.at(-1)));\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tconst characterLength = stringWidth(character);\n\n\t\tif (visible + characterLength <= columns) {\n\t\t\trows[rows.length - 1] += character;\n\t\t} else {\n\t\t\trows.push(character);\n\t\t\tvisible = 0;\n\t\t}\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tisInsideEscape = true;\n\n\t\t\tconst ansiEscapeLinkCandidate = characters.slice(index + 1, index + 1 + ANSI_ESCAPE_LINK.length).join('');\n\t\t\tisInsideLinkEscape = ansiEscapeLinkCandidate === ANSI_ESCAPE_LINK;\n\t\t}\n\n\t\tif (isInsideEscape) {\n\t\t\tif (isInsideLinkEscape) {\n\t\t\t\tif (character === ANSI_ESCAPE_BELL) {\n\t\t\t\t\tisInsideEscape = false;\n\t\t\t\t\tisInsideLinkEscape = false;\n\t\t\t\t}\n\t\t\t} else if (character === ANSI_SGR_TERMINATOR) {\n\t\t\t\tisInsideEscape = false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisible += characterLength;\n\n\t\tif (visible === columns && index < characters.length - 1) {\n\t\t\trows.push('');\n\t\t\tvisible = 0;\n\t\t}\n\t}\n\n\t// It's possible that the last row we copy over is only\n\t// ansi escape characters, handle this edge-case\n\tif (!visible && rows.at(-1).length > 0 && rows.length > 1) {\n\t\trows[rows.length - 2] += rows.pop();\n\t}\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = string => {\n\tconst words = string.split(' ');\n\tlet last = words.length;\n\n\twhile (last > 0) {\n\t\tif (stringWidth(words[last - 1]) > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlast--;\n\t}\n\n\tif (last === words.length) {\n\t\treturn string;\n\t}\n\n\treturn words.slice(0, last).join(' ') + words.slice(last).join('');\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode.\n//\n// 'hard' will never allow a string to take up more than columns characters.\n//\n// 'soft' allows long words to expand past the column length.\nconst exec = (string, columns, options = {}) => {\n\tif (options.trim !== false && string.trim() === '') {\n\t\treturn '';\n\t}\n\n\tlet returnValue = '';\n\tlet escapeCode;\n\tlet escapeUrl;\n\n\tconst lengths = wordLengths(string);\n\tlet rows = [''];\n\n\tfor (const [index, word] of string.split(' ').entries()) {\n\t\tif (options.trim !== false) {\n\t\t\trows[rows.length - 1] = rows.at(-1).trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows.at(-1));\n\n\t\tif (index !== 0) {\n\t\t\tif (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {\n\t\t\t\t// If we start with a new word but the current row length equals the length of the columns, add a new row\n\t\t\t\trows.push('');\n\t\t\t\trowLength = 0;\n\t\t\t}\n\n\t\t\tif (rowLength > 0 || options.trim === false) {\n\t\t\t\trows[rows.length - 1] += ' ';\n\t\t\t\trowLength++;\n\t\t\t}\n\t\t}\n\n\t\t// In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n\t\tif (options.hard && lengths[index] > columns) {\n\t\t\tconst remainingColumns = (columns - rowLength);\n\t\t\tconst breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n\t\t\tconst breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n\t\t\tif (breaksStartingNextLine < breaksStartingThisLine) {\n\t\t\t\trows.push('');\n\t\t\t}\n\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {\n\t\t\tif (options.wordWrap === false && rowLength < columns) {\n\t\t\t\twrapWord(rows, word, columns);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trows.push('');\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && options.wordWrap === false) {\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\trows[rows.length - 1] += word;\n\t}\n\n\tif (options.trim !== false) {\n\t\trows = rows.map(row => stringVisibleTrimSpacesRight(row));\n\t}\n\n\tconst preString = rows.join('\\n');\n\tconst pre = [...preString];\n\n\t// We need to keep a separate index as `String#slice()` works on Unicode code units, while `pre` is an array of codepoints.\n\tlet preStringIndex = 0;\n\n\tfor (const [index, character] of pre.entries()) {\n\t\treturnValue += character;\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tconst {groups} = new RegExp(`(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`).exec(preString.slice(preStringIndex)) || {groups: {}};\n\t\t\tif (groups.code !== undefined) {\n\t\t\t\tconst code = Number.parseFloat(groups.code);\n\t\t\t\tescapeCode = code === END_CODE ? undefined : code;\n\t\t\t} else if (groups.uri !== undefined) {\n\t\t\t\tescapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n\t\t\t}\n\t\t}\n\n\t\tconst code = ansiStyles.codes.get(Number(escapeCode));\n\n\t\tif (pre[index + 1] === '\\n') {\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink('');\n\t\t\t}\n\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(code);\n\t\t\t}\n\t\t} else if (character === '\\n') {\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(escapeCode);\n\t\t\t}\n\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink(escapeUrl);\n\t\t\t}\n\t\t}\n\n\t\tpreStringIndex += character.length;\n\t}\n\n\treturn returnValue;\n};\n\n// For each newline, invoke the method separately\nexport default function wrapAnsi(string, columns, options) {\n\treturn String(string)\n\t\t.normalize()\n\t\t.replaceAll('\\r\\n', '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n", "import cliWidth from 'cli-width';\nimport wrapAnsi from 'wrap-ansi';\nimport { readline } from \"./hook-engine.js\";\n/**\n * Force line returns at specific width. This function is ANSI code friendly and it'll\n * ignore invisible codes during width calculation.\n * @param {string} content\n * @param {number} width\n * @return {string}\n */\nexport function breakLines(content, width) {\n    return content\n        .split('\\n')\n        .flatMap((line) => wrapAnsi(line, width, { trim: false, hard: true })\n        .split('\\n')\n        .map((str) => str.trimEnd()))\n        .join('\\n');\n}\n/**\n * Returns the width of the active readline, or 80 as default value.\n * @returns {number}\n */\nexport function readlineWidth() {\n    return cliWidth({ defaultWidth: 80, output: readline().output });\n}\n", "import { useRef } from \"../use-ref.js\";\nimport { readlineWidth, breakLines } from \"../utils.js\";\nfunction usePointerPosition({ active, renderedItems, pageSize, loop, }) {\n    const state = useRef({\n        lastPointer: active,\n        lastActive: undefined,\n    });\n    const { lastPointer, lastActive } = state.current;\n    const middle = Math.floor(pageSize / 2);\n    const renderedLength = renderedItems.reduce((acc, item) => acc + item.length, 0);\n    const defaultPointerPosition = renderedItems\n        .slice(0, active)\n        .reduce((acc, item) => acc + item.length, 0);\n    let pointer = defaultPointerPosition;\n    if (renderedLength > pageSize) {\n        if (loop) {\n            /**\n             * Creates the next position for the pointer considering an infinitely\n             * looping list of items to be rendered on the page.\n             *\n             * The goal is to progressively move the cursor to the middle position as the user move down, and then keep\n             * the cursor there. When the user move up, maintain the cursor position.\n             */\n            // By default, keep the cursor position as-is.\n            pointer = lastPointer;\n            if (\n            // First render, skip this logic.\n            lastActive != null &&\n                // Only move the pointer down when the user moves down.\n                lastActive < active &&\n                // Check user didn't move up across page boundary.\n                active - lastActive < pageSize) {\n                pointer = Math.min(\n                // Furthest allowed position for the pointer is the middle of the list\n                middle, Math.abs(active - lastActive) === 1\n                    ? Math.min(\n                    // Move the pointer at most the height of the last active item.\n                    lastPointer + (renderedItems[lastActive]?.length ?? 0), \n                    // If the user moved by one item, move the pointer to the natural position of the active item as\n                    // long as it doesn't move the cursor up.\n                    Math.max(defaultPointerPosition, lastPointer))\n                    : // Otherwise, move the pointer down by the difference between the active and last active item.\n                        lastPointer + active - lastActive);\n            }\n        }\n        else {\n            /**\n             * Creates the next position for the pointer considering a finite list of\n             * items to be rendered on a page.\n             *\n             * The goal is to keep the pointer in the middle of the page whenever possible, until\n             * we reach the bounds of the list (top or bottom). In which case, the cursor moves progressively\n             * to the bottom or top of the list.\n             */\n            const spaceUnderActive = renderedItems\n                .slice(active)\n                .reduce((acc, item) => acc + item.length, 0);\n            pointer =\n                spaceUnderActive < pageSize - middle\n                    ? // If the active item is near the end of the list, progressively move the cursor towards the end.\n                        pageSize - spaceUnderActive\n                    : // Otherwise, progressively move the pointer to the middle of the list.\n                        Math.min(defaultPointerPosition, middle);\n        }\n    }\n    // Save state for the next render\n    state.current.lastPointer = pointer;\n    state.current.lastActive = active;\n    return pointer;\n}\nexport function usePagination({ items, active, renderItem, pageSize, loop = true, }) {\n    const width = readlineWidth();\n    const bound = (num) => ((num % items.length) + items.length) % items.length;\n    const renderedItems = items.map((item, index) => {\n        if (item == null)\n            return [];\n        return breakLines(renderItem({ item, index, isActive: index === active }), width).split('\\n');\n    });\n    const renderedLength = renderedItems.reduce((acc, item) => acc + item.length, 0);\n    const renderItemAtIndex = (index) => renderedItems[index] ?? [];\n    const pointer = usePointerPosition({ active, renderedItems, pageSize, loop });\n    // Render the active item to decide the position.\n    // If the active item fits under the pointer, we render it there.\n    // Otherwise, we need to render it to fit at the bottom of the page; moving the pointer up.\n    const activeItem = renderItemAtIndex(active).slice(0, pageSize);\n    const activeItemPosition = pointer + activeItem.length <= pageSize ? pointer : pageSize - activeItem.length;\n    // Create an array of lines for the page, and add the lines of the active item into the page\n    const pageBuffer = Array.from({ length: pageSize });\n    pageBuffer.splice(activeItemPosition, activeItem.length, ...activeItem);\n    // Store to prevent rendering the same item twice\n    const itemVisited = new Set([active]);\n    // Fill the page under the active item\n    let bufferPointer = activeItemPosition + activeItem.length;\n    let itemPointer = bound(active + 1);\n    while (bufferPointer < pageSize &&\n        !itemVisited.has(itemPointer) &&\n        (loop && renderedLength > pageSize ? itemPointer !== active : itemPointer > active)) {\n        const lines = renderItemAtIndex(itemPointer);\n        const linesToAdd = lines.slice(0, pageSize - bufferPointer);\n        pageBuffer.splice(bufferPointer, linesToAdd.length, ...linesToAdd);\n        // Move pointers for next iteration\n        itemVisited.add(itemPointer);\n        bufferPointer += linesToAdd.length;\n        itemPointer = bound(itemPointer + 1);\n    }\n    // Fill the page over the active item\n    bufferPointer = activeItemPosition - 1;\n    itemPointer = bound(active - 1);\n    while (bufferPointer >= 0 &&\n        !itemVisited.has(itemPointer) &&\n        (loop && renderedLength > pageSize ? itemPointer !== active : itemPointer < active)) {\n        const lines = renderItemAtIndex(itemPointer);\n        const linesToAdd = lines.slice(Math.max(0, lines.length - bufferPointer - 1));\n        pageBuffer.splice(bufferPointer - linesToAdd.length + 1, linesToAdd.length, ...linesToAdd);\n        // Move pointers for next iteration\n        itemVisited.add(itemPointer);\n        bufferPointer -= linesToAdd.length;\n        itemPointer = bound(itemPointer - 1);\n    }\n    return pageBuffer.filter((line) => typeof line === 'string').join('\\n');\n}\n", "const Stream = require('stream')\n\nclass MuteStream extends Stream {\n  #isTTY = null\n\n  constructor (opts = {}) {\n    super(opts)\n    this.writable = this.readable = true\n    this.muted = false\n    this.on('pipe', this._onpipe)\n    this.replace = opts.replace\n\n    // For readline-type situations\n    // This much at the start of a line being redrawn after a ctrl char\n    // is seen (such as backspace) won't be redrawn as the replacement\n    this._prompt = opts.prompt || null\n    this._hadControl = false\n  }\n\n  #destSrc (key, def) {\n    if (this._dest) {\n      return this._dest[key]\n    }\n    if (this._src) {\n      return this._src[key]\n    }\n    return def\n  }\n\n  #proxy (method, ...args) {\n    if (typeof this._dest?.[method] === 'function') {\n      this._dest[method](...args)\n    }\n    if (typeof this._src?.[method] === 'function') {\n      this._src[method](...args)\n    }\n  }\n\n  get isTTY () {\n    if (this.#isTTY !== null) {\n      return this.#isTTY\n    }\n    return this.#destSrc('isTTY', false)\n  }\n\n  // basically just get replace the getter/setter with a regular value\n  set isTTY (val) {\n    this.#isTTY = val\n  }\n\n  get rows () {\n    return this.#destSrc('rows')\n  }\n\n  get columns () {\n    return this.#destSrc('columns')\n  }\n\n  mute () {\n    this.muted = true\n  }\n\n  unmute () {\n    this.muted = false\n  }\n\n  _onpipe (src) {\n    this._src = src\n  }\n\n  pipe (dest, options) {\n    this._dest = dest\n    return super.pipe(dest, options)\n  }\n\n  pause () {\n    if (this._src) {\n      return this._src.pause()\n    }\n  }\n\n  resume () {\n    if (this._src) {\n      return this._src.resume()\n    }\n  }\n\n  write (c) {\n    if (this.muted) {\n      if (!this.replace) {\n        return true\n      }\n      // eslint-disable-next-line no-control-regex\n      if (c.match(/^\\u001b/)) {\n        if (c.indexOf(this._prompt) === 0) {\n          c = c.slice(this._prompt.length)\n          c = c.replace(/./g, this.replace)\n          c = this._prompt + c\n        }\n        this._hadControl = true\n        return this.emit('data', c)\n      } else {\n        if (this._prompt && this._hadControl &&\n          c.indexOf(this._prompt) === 0) {\n          this._hadControl = false\n          this.emit('data', this._prompt)\n          c = c.slice(this._prompt.length)\n        }\n        c = c.toString().replace(/./g, this.replace)\n      }\n    }\n    this.emit('data', c)\n  }\n\n  end (c) {\n    if (this.muted) {\n      if (c && this.replace) {\n        c = c.toString().replace(/./g, this.replace)\n      } else {\n        c = null\n      }\n    }\n    if (c) {\n      this.emit('data', c)\n    }\n    this.emit('end')\n  }\n\n  destroy (...args) {\n    return this.#proxy('destroy', ...args)\n  }\n\n  destroySoon (...args) {\n    return this.#proxy('destroySoon', ...args)\n  }\n\n  close (...args) {\n    return this.#proxy('close', ...args)\n  }\n}\n\nmodule.exports = MuteStream\n", "const ESC = '\\u001B[';\n/** Move cursor to first column */\nexport const cursorLeft = ESC + 'G';\n/** Hide the cursor */\nexport const cursorHide = ESC + '?25l';\n/** Show the cursor */\nexport const cursorShow = ESC + '?25h';\n/** Move cursor up by count rows */\nexport const cursorUp = (rows = 1) => (rows > 0 ? `${ESC}${rows}A` : '');\n/** Move cursor down by count rows */\nexport const cursorDown = (rows = 1) => rows > 0 ? `${ESC}${rows}B` : '';\n/** Move cursor to position (x, y) */\nexport const cursorTo = (x, y) => {\n    if (typeof y === 'number' && !Number.isNaN(y)) {\n        return `${ESC}${y + 1};${x + 1}H`;\n    }\n    return `${ESC}${x + 1}G`;\n};\nconst eraseLine = ESC + '2K';\n/** Erase the specified number of lines above the cursor */\nexport const eraseLines = (lines) => lines > 0 ? (eraseLine + cursorUp(1)).repeat(lines - 1) + eraseLine + cursorLeft : '';\n", "import { stripVTControlCharacters } from 'node:util';\nimport { breakLines, readlineWidth } from \"./utils.js\";\nimport { cursorDown, cursorUp, cursorTo, cursorShow, eraseLines } from '@inquirer/ansi';\nconst height = (content) => content.split('\\n').length;\nconst lastLine = (content) => content.split('\\n').pop() ?? '';\nexport default class ScreenManager {\n    // These variables are keeping information to allow correct prompt re-rendering\n    height = 0;\n    extraLinesUnderPrompt = 0;\n    cursorPos;\n    rl;\n    constructor(rl) {\n        this.rl = rl;\n        this.cursorPos = rl.getCursorPos();\n    }\n    write(content) {\n        this.rl.output.unmute();\n        this.rl.output.write(content);\n        this.rl.output.mute();\n    }\n    render(content, bottomContent = '') {\n        // Write message to screen and setPrompt to control backspace\n        const promptLine = lastLine(content);\n        const rawPromptLine = stripVTControlCharacters(promptLine);\n        // Remove the rl.line from our prompt. We can't rely on the content of\n        // rl.line (mainly because of the password prompt), so just rely on it's\n        // length.\n        let prompt = rawPromptLine;\n        if (this.rl.line.length > 0) {\n            prompt = prompt.slice(0, -this.rl.line.length);\n        }\n        this.rl.setPrompt(prompt);\n        // SetPrompt will change cursor position, now we can get correct value\n        this.cursorPos = this.rl.getCursorPos();\n        const width = readlineWidth();\n        content = breakLines(content, width);\n        bottomContent = breakLines(bottomContent, width);\n        // Manually insert an extra line if we're at the end of the line.\n        // This prevent the cursor from appearing at the beginning of the\n        // current line.\n        if (rawPromptLine.length % width === 0) {\n            content += '\\n';\n        }\n        let output = content + (bottomContent ? '\\n' + bottomContent : '');\n        /**\n         * Re-adjust the cursor at the correct position.\n         */\n        // We need to consider parts of the prompt under the cursor as part of the bottom\n        // content in order to correctly cleanup and re-render.\n        const promptLineUpDiff = Math.floor(rawPromptLine.length / width) - this.cursorPos.rows;\n        const bottomContentHeight = promptLineUpDiff + (bottomContent ? height(bottomContent) : 0);\n        // Return cursor to the input position (on top of the bottomContent)\n        if (bottomContentHeight > 0)\n            output += cursorUp(bottomContentHeight);\n        // Return cursor to the initial left offset.\n        output += cursorTo(this.cursorPos.cols);\n        /**\n         * Render and store state for future re-rendering\n         */\n        this.write(cursorDown(this.extraLinesUnderPrompt) + eraseLines(this.height) + output);\n        this.extraLinesUnderPrompt = bottomContentHeight;\n        this.height = height(output);\n    }\n    checkCursorPos() {\n        const cursorPos = this.rl.getCursorPos();\n        if (cursorPos.cols !== this.cursorPos.cols) {\n            this.write(cursorTo(cursorPos.cols));\n            this.cursorPos = cursorPos;\n        }\n    }\n    done({ clearContent }) {\n        this.rl.setPrompt('');\n        let output = cursorDown(this.extraLinesUnderPrompt);\n        output += clearContent ? eraseLines(this.height) : '\\n';\n        output += cursorShow;\n        this.write(output);\n        this.rl.close();\n    }\n}\n", "// TODO: Remove this class once Node 22 becomes the minimum supported version.\nexport class PromisePolyfill extends Promise {\n    // Available starting from Node 22\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers\n    static withResolver() {\n        let resolve;\n        let reject;\n        const promise = new Promise((res, rej) => {\n            resolve = res;\n            reject = rej;\n        });\n        return { promise, resolve: resolve, reject: reject };\n    }\n}\n", "import * as readline from 'node:readline';\nimport { AsyncResource } from 'node:async_hooks';\nimport MuteStream from 'mute-stream';\nimport { onExit as onSignalExit } from 'signal-exit';\nimport ScreenManager from \"./screen-manager.js\";\nimport { PromisePolyfill } from \"./promise-polyfill.js\";\nimport { withHooks, effectScheduler } from \"./hook-engine.js\";\nimport { AbortPromptError, CancelPromptError, ExitPromptError } from \"./errors.js\";\nfunction getCallSites() {\n    // eslint-disable-next-line @typescript-eslint/unbound-method\n    const _prepareStackTrace = Error.prepareStackTrace;\n    let result = [];\n    try {\n        Error.prepareStackTrace = (_, callSites) => {\n            const callSitesWithoutCurrent = callSites.slice(1);\n            result = callSitesWithoutCurrent;\n            return callSitesWithoutCurrent;\n        };\n        // oxlint-disable-next-line no-unused-expressions\n        new Error().stack;\n    }\n    catch {\n        // An error will occur if the Node flag --frozen-intrinsics is used.\n        // https://nodejs.org/api/cli.html#--frozen-intrinsics\n        return result;\n    }\n    Error.prepareStackTrace = _prepareStackTrace;\n    return result;\n}\nexport function createPrompt(view) {\n    const callSites = getCallSites();\n    const prompt = (config, context = {}) => {\n        // Default `input` to stdin\n        const { input = process.stdin, signal } = context;\n        const cleanups = new Set();\n        // Add mute capabilities to the output\n        const output = new MuteStream();\n        output.pipe(context.output ?? process.stdout);\n        const rl = readline.createInterface({\n            terminal: true,\n            input,\n            output,\n        });\n        const screen = new ScreenManager(rl);\n        const { promise, resolve, reject } = PromisePolyfill.withResolver();\n        const cancel = () => reject(new CancelPromptError());\n        if (signal) {\n            const abort = () => reject(new AbortPromptError({ cause: signal.reason }));\n            if (signal.aborted) {\n                abort();\n                return Object.assign(promise, { cancel });\n            }\n            signal.addEventListener('abort', abort);\n            cleanups.add(() => signal.removeEventListener('abort', abort));\n        }\n        cleanups.add(onSignalExit((code, signal) => {\n            reject(new ExitPromptError(`User force closed the prompt with ${code} ${signal}`));\n        }));\n        // SIGINT must be explicitly handled by the prompt so the ExitPromptError can be handled.\n        // Otherwise, the prompt will stop and in some scenarios never resolve.\n        // Ref issue #1741\n        const sigint = () => reject(new ExitPromptError(`User force closed the prompt with SIGINT`));\n        rl.on('SIGINT', sigint);\n        cleanups.add(() => rl.removeListener('SIGINT', sigint));\n        // Re-renders only happen when the state change; but the readline cursor could change position\n        // and that also requires a re-render (and a manual one because we mute the streams).\n        // We set the listener after the initial workLoop to avoid a double render if render triggered\n        // by a state change sets the cursor to the right position.\n        const checkCursorPos = () => screen.checkCursorPos();\n        rl.input.on('keypress', checkCursorPos);\n        cleanups.add(() => rl.input.removeListener('keypress', checkCursorPos));\n        return withHooks(rl, (cycle) => {\n            // The close event triggers immediately when the user press ctrl+c. SignalExit on the other hand\n            // triggers after the process is done (which happens after timeouts are done triggering.)\n            // We triggers the hooks cleanup phase on rl `close` so active timeouts can be cleared.\n            const hooksCleanup = AsyncResource.bind(() => effectScheduler.clearAll());\n            rl.on('close', hooksCleanup);\n            cleanups.add(() => rl.removeListener('close', hooksCleanup));\n            cycle(() => {\n                try {\n                    const nextView = view(config, (value) => {\n                        setImmediate(() => resolve(value));\n                    });\n                    // Typescript won't allow this, but not all users rely on typescript.\n                    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n                    if (nextView === undefined) {\n                        const callerFilename = callSites[1]?.getFileName();\n                        throw new Error(`Prompt functions must return a string.\\n    at ${callerFilename}`);\n                    }\n                    const [content, bottomContent] = typeof nextView === 'string' ? [nextView] : nextView;\n                    screen.render(content, bottomContent);\n                    effectScheduler.run();\n                }\n                catch (error) {\n                    reject(error);\n                }\n            });\n            return Object.assign(promise\n                .then((answer) => {\n                effectScheduler.clearAll();\n                return answer;\n            }, (error) => {\n                effectScheduler.clearAll();\n                throw error;\n            })\n                // Wait for the promise to settle, then cleanup.\n                .finally(() => {\n                cleanups.forEach((cleanup) => cleanup());\n                screen.done({ clearContent: Boolean(context.clearPromptOnDone) });\n                output.end();\n            })\n                // Once cleanup is done, let the expose promise resolve/reject to the internal one.\n                .then(() => promise), { cancel });\n        });\n    };\n    return prompt;\n}\n", "import { styleText } from 'node:util';\nimport figures from '@inquirer/figures';\n/**\n * Separator object\n * Used to space/separate choices group\n */\nexport class Separator {\n    separator = styleText('dim', Array.from({ length: 15 }).join(figures.line));\n    type = 'separator';\n    constructor(separator) {\n        if (separator) {\n            this.separator = separator;\n        }\n    }\n    static isSeparator(choice) {\n        return Boolean(choice &&\n            typeof choice === 'object' &&\n            'type' in choice &&\n            choice.type === 'separator');\n    }\n}\n", "export { isUpKey, isDownKey, isSpaceKey, isBackspaceKey, isTabKey, isNumberKey, isEnterKey, isShiftKey, } from \"./lib/key.js\";\nexport * from \"./lib/errors.js\";\nexport { usePrefix } from \"./lib/use-prefix.js\";\nexport { useState } from \"./lib/use-state.js\";\nexport { useEffect } from \"./lib/use-effect.js\";\nexport { useMemo } from \"./lib/use-memo.js\";\nexport { useRef } from \"./lib/use-ref.js\";\nexport { useKeypress } from \"./lib/use-keypress.js\";\nexport { makeTheme } from \"./lib/make-theme.js\";\nexport { usePagination } from \"./lib/pagination/use-pagination.js\";\nexport { createPrompt } from \"./lib/create-prompt.js\";\nexport { Separator } from \"./lib/Separator.js\";\n", "import { createPrompt, useState, useKeypress, useEffect, usePrefix, isBackspaceKey, isEnterKey, isTabKey, makeTheme, } from '@inquirer/core';\nconst inputTheme = {\n    validationFailureMode: 'keep',\n};\nexport default createPrompt((config, done) => {\n    const { prefill = 'tab' } = config;\n    const theme = makeTheme(inputTheme, config.theme);\n    const [status, setStatus] = useState('idle');\n    const [defaultValue = '', setDefaultValue] = useState(config.default);\n    const [errorMsg, setError] = useState();\n    const [value, setValue] = useState('');\n    const prefix = usePrefix({ status, theme });\n    async function validate(value) {\n        const { required, pattern, patternError = 'Invalid input' } = config;\n        if (required && !value) {\n            return 'You must provide a value';\n        }\n        if (pattern && !pattern.test(value)) {\n            return patternError;\n        }\n        if (typeof config.validate === 'function') {\n            return (await config.validate(value)) || 'You must provide a valid value';\n        }\n        return true;\n    }\n    useKeypress(async (key, rl) => {\n        // Ignore keypress while our prompt is doing other processing.\n        if (status !== 'idle') {\n            return;\n        }\n        if (isEnterKey(key)) {\n            const answer = value || defaultValue;\n            setStatus('loading');\n            const isValid = await validate(answer);\n            if (isValid === true) {\n                setValue(answer);\n                setStatus('done');\n                done(answer);\n            }\n            else {\n                if (theme.validationFailureMode === 'clear') {\n                    setValue('');\n                }\n                else {\n                    // Reset the readline line value to the previous value. On line event, the value\n                    // get cleared, forcing the user to re-enter the value instead of fixing it.\n                    rl.write(value);\n                }\n                setError(isValid);\n                setStatus('idle');\n            }\n        }\n        else if (isBackspaceKey(key) && !value) {\n            setDefaultValue(undefined);\n        }\n        else if (isTabKey(key) && !value) {\n            setDefaultValue(undefined);\n            rl.clearLine(0); // Remove the tab character.\n            rl.write(defaultValue);\n            setValue(defaultValue);\n        }\n        else {\n            setValue(rl.line);\n            setError(undefined);\n        }\n    });\n    // If prefill is set to 'editable' cut out the default value and paste into current state and the user's cli buffer\n    // They can edit the value immediately instead of needing to press 'tab'\n    useEffect((rl) => {\n        if (prefill === 'editable' && defaultValue) {\n            rl.write(defaultValue);\n            setValue(defaultValue);\n        }\n    }, []);\n    const message = theme.style.message(config.message, status);\n    let formattedValue = value;\n    if (typeof config.transformer === 'function') {\n        formattedValue = config.transformer(value, { isFinal: status === 'done' });\n    }\n    else if (status === 'done') {\n        formattedValue = theme.style.answer(value);\n    }\n    let defaultStr;\n    if (defaultValue && status !== 'done' && !value) {\n        defaultStr = theme.style.defaultAnswer(defaultValue);\n    }\n    let error = '';\n    if (errorMsg) {\n        error = theme.style.error(errorMsg);\n    }\n    return [\n        [prefix, message, defaultStr, formattedValue]\n            .filter((v) => v !== undefined)\n            .join(' '),\n        error,\n    ];\n});\n", "import { createPrompt, useState, useKeypress, usePrefix, usePagination, useRef, useMemo, useEffect, isBackspaceKey, isEnterKey, isUpKey, isDownKey, isNumberKey, Separator, ValidationError, makeTheme, } from '@inquirer/core';\nimport { cursorHide } from '@inquirer/ansi';\nimport { styleText } from 'node:util';\nimport figures from '@inquirer/figures';\nconst selectTheme = {\n    icon: { cursor: figures.pointer },\n    style: {\n        disabled: (text) => styleText('dim', `- ${text}`),\n        description: (text) => styleText('cyan', text),\n        keysHelpTip: (keys) => keys\n            .map(([key, action]) => `${styleText('bold', key)} ${styleText('dim', action)}`)\n            .join(styleText('dim', ' \u2022 ')),\n    },\n    indexMode: 'hidden',\n    keybindings: [],\n};\nfunction isSelectable(item) {\n    return !Separator.isSeparator(item) && !item.disabled;\n}\nfunction normalizeChoices(choices) {\n    return choices.map((choice) => {\n        if (Separator.isSeparator(choice))\n            return choice;\n        if (typeof choice !== 'object' || choice === null || !('value' in choice)) {\n            // It's a raw value (string, number, etc.)\n            const name = String(choice);\n            return {\n                value: choice,\n                name,\n                short: name,\n                disabled: false,\n            };\n        }\n        const name = choice.name ?? String(choice.value);\n        const normalizedChoice = {\n            value: choice.value,\n            name,\n            short: choice.short ?? name,\n            disabled: choice.disabled ?? false,\n        };\n        if (choice.description) {\n            normalizedChoice.description = choice.description;\n        }\n        return normalizedChoice;\n    });\n}\nexport default createPrompt((config, done) => {\n    const { loop = true, pageSize = 7 } = config;\n    const theme = makeTheme(selectTheme, config.theme);\n    const { keybindings } = theme;\n    const [status, setStatus] = useState('idle');\n    const prefix = usePrefix({ status, theme });\n    const searchTimeoutRef = useRef();\n    // Vim keybindings (j/k) conflict with typing those letters in search,\n    // so search must be disabled when vim bindings are enabled\n    const searchEnabled = !keybindings.includes('vim');\n    const items = useMemo(() => normalizeChoices(config.choices), [config.choices]);\n    const bounds = useMemo(() => {\n        const first = items.findIndex(isSelectable);\n        const last = items.findLastIndex(isSelectable);\n        if (first === -1) {\n            throw new ValidationError('[select prompt] No selectable choices. All choices are disabled.');\n        }\n        return { first, last };\n    }, [items]);\n    const defaultItemIndex = useMemo(() => {\n        if (!('default' in config))\n            return -1;\n        return items.findIndex((item) => isSelectable(item) && item.value === config.default);\n    }, [config.default, items]);\n    const [active, setActive] = useState(defaultItemIndex === -1 ? bounds.first : defaultItemIndex);\n    // Safe to assume the cursor position always point to a Choice.\n    const selectedChoice = items[active];\n    useKeypress((key, rl) => {\n        clearTimeout(searchTimeoutRef.current);\n        if (isEnterKey(key)) {\n            setStatus('done');\n            done(selectedChoice.value);\n        }\n        else if (isUpKey(key, keybindings) || isDownKey(key, keybindings)) {\n            rl.clearLine(0);\n            if (loop ||\n                (isUpKey(key, keybindings) && active !== bounds.first) ||\n                (isDownKey(key, keybindings) && active !== bounds.last)) {\n                const offset = isUpKey(key, keybindings) ? -1 : 1;\n                let next = active;\n                do {\n                    next = (next + offset + items.length) % items.length;\n                } while (!isSelectable(items[next]));\n                setActive(next);\n            }\n        }\n        else if (isNumberKey(key) && !Number.isNaN(Number(rl.line))) {\n            const selectedIndex = Number(rl.line) - 1;\n            // Find the nth item (ignoring separators)\n            let selectableIndex = -1;\n            const position = items.findIndex((item) => {\n                if (Separator.isSeparator(item))\n                    return false;\n                selectableIndex++;\n                return selectableIndex === selectedIndex;\n            });\n            const item = items[position];\n            if (item != null && isSelectable(item)) {\n                setActive(position);\n            }\n            searchTimeoutRef.current = setTimeout(() => {\n                rl.clearLine(0);\n            }, 700);\n        }\n        else if (isBackspaceKey(key)) {\n            rl.clearLine(0);\n        }\n        else if (searchEnabled) {\n            const searchTerm = rl.line.toLowerCase();\n            const matchIndex = items.findIndex((item) => {\n                if (Separator.isSeparator(item) || !isSelectable(item))\n                    return false;\n                return item.name.toLowerCase().startsWith(searchTerm);\n            });\n            if (matchIndex !== -1) {\n                setActive(matchIndex);\n            }\n            searchTimeoutRef.current = setTimeout(() => {\n                rl.clearLine(0);\n            }, 700);\n        }\n    });\n    useEffect(() => () => {\n        clearTimeout(searchTimeoutRef.current);\n    }, []);\n    const message = theme.style.message(config.message, status);\n    const helpLine = theme.style.keysHelpTip([\n        ['\u2191\u2193', 'navigate'],\n        ['\u23CE', 'select'],\n    ]);\n    let separatorCount = 0;\n    const page = usePagination({\n        items,\n        active,\n        renderItem({ item, isActive, index }) {\n            if (Separator.isSeparator(item)) {\n                separatorCount++;\n                return ` ${item.separator}`;\n            }\n            const indexLabel = theme.indexMode === 'number' ? `${index + 1 - separatorCount}. ` : '';\n            if (item.disabled) {\n                const disabledLabel = typeof item.disabled === 'string' ? item.disabled : '(disabled)';\n                return theme.style.disabled(`${indexLabel}${item.name} ${disabledLabel}`);\n            }\n            const color = isActive ? theme.style.highlight : (x) => x;\n            const cursor = isActive ? theme.icon.cursor : ` `;\n            return color(`${cursor} ${indexLabel}${item.name}`);\n        },\n        pageSize,\n        loop,\n    });\n    if (status === 'done') {\n        return [prefix, message, theme.style.answer(selectedChoice.short)]\n            .filter(Boolean)\n            .join(' ');\n    }\n    const { description } = selectedChoice;\n    const lines = [\n        [prefix, message].filter(Boolean).join(' '),\n        page,\n        ' ',\n        description ? theme.style.description(description) : '',\n        helpLine,\n    ]\n        .filter(Boolean)\n        .join('\\n')\n        .trimEnd();\n    return `${lines}${cursorHide}`;\n});\nexport { Separator } from '@inquirer/core';\n", "import { createPrompt, useState, useKeypress, usePrefix, usePagination, useEffect, useMemo, useRef, isDownKey, isEnterKey, isTabKey, isUpKey, Separator, makeTheme, } from '@inquirer/core';\nimport { styleText } from 'node:util';\nimport figures from '@inquirer/figures';\nconst searchTheme = {\n    icon: { cursor: figures.pointer },\n    style: {\n        disabled: (text) => styleText('dim', `- ${text}`),\n        searchTerm: (text) => styleText('cyan', text),\n        description: (text) => styleText('cyan', text),\n        keysHelpTip: (keys) => keys\n            .map(([key, action]) => `${styleText('bold', key)} ${styleText('dim', action)}`)\n            .join(styleText('dim', ' \u2022 ')),\n    },\n};\nfunction isSelectable(item) {\n    return !Separator.isSeparator(item) && !item.disabled;\n}\nfunction normalizeChoices(choices) {\n    return choices.map((choice) => {\n        if (Separator.isSeparator(choice))\n            return choice;\n        if (typeof choice === 'string') {\n            return {\n                value: choice,\n                name: choice,\n                short: choice,\n                disabled: false,\n            };\n        }\n        const name = choice.name ?? String(choice.value);\n        const normalizedChoice = {\n            value: choice.value,\n            name,\n            short: choice.short ?? name,\n            disabled: choice.disabled ?? false,\n        };\n        if (choice.description) {\n            normalizedChoice.description = choice.description;\n        }\n        return normalizedChoice;\n    });\n}\nexport default createPrompt((config, done) => {\n    const { pageSize = 7, validate = () => true } = config;\n    const theme = makeTheme(searchTheme, config.theme);\n    const [status, setStatus] = useState('loading');\n    const [searchTerm, setSearchTerm] = useState('');\n    const [searchResults, setSearchResults] = useState([]);\n    const [searchError, setSearchError] = useState();\n    const defaultApplied = useRef(false);\n    const prefix = usePrefix({ status, theme });\n    const bounds = useMemo(() => {\n        const first = searchResults.findIndex(isSelectable);\n        const last = searchResults.findLastIndex(isSelectable);\n        return { first, last };\n    }, [searchResults]);\n    const [active = bounds.first, setActive] = useState();\n    useEffect(() => {\n        const controller = new AbortController();\n        setStatus('loading');\n        setSearchError(undefined);\n        const fetchResults = async () => {\n            try {\n                const results = await config.source(searchTerm || undefined, {\n                    signal: controller.signal,\n                });\n                if (!controller.signal.aborted) {\n                    const normalized = normalizeChoices(results);\n                    let initialActive;\n                    if (!defaultApplied.current && 'default' in config) {\n                        const defaultIndex = normalized.findIndex((item) => isSelectable(item) && item.value === config.default);\n                        initialActive = defaultIndex === -1 ? undefined : defaultIndex;\n                        defaultApplied.current = true;\n                    }\n                    setActive(initialActive);\n                    setSearchError(undefined);\n                    setSearchResults(normalized);\n                    setStatus('idle');\n                }\n            }\n            catch (error) {\n                if (!controller.signal.aborted && error instanceof Error) {\n                    setSearchError(error.message);\n                }\n            }\n        };\n        void fetchResults();\n        return () => {\n            controller.abort();\n        };\n    }, [searchTerm]);\n    // Safe to assume the cursor position never points to a Separator.\n    const selectedChoice = searchResults[active];\n    useKeypress(async (key, rl) => {\n        if (isEnterKey(key)) {\n            if (selectedChoice) {\n                setStatus('loading');\n                const isValid = await validate(selectedChoice.value);\n                setStatus('idle');\n                if (isValid === true) {\n                    setStatus('done');\n                    done(selectedChoice.value);\n                }\n                else if (selectedChoice.name === searchTerm) {\n                    setSearchError(isValid || 'You must provide a valid value');\n                }\n                else {\n                    // Reset line with new search term\n                    rl.write(selectedChoice.name);\n                    setSearchTerm(selectedChoice.name);\n                }\n            }\n            else {\n                // Reset the readline line value to the previous value. On line event, the value\n                // get cleared, forcing the user to re-enter the value instead of fixing it.\n                rl.write(searchTerm);\n            }\n        }\n        else if (isTabKey(key) && selectedChoice) {\n            rl.clearLine(0); // Remove the tab character.\n            rl.write(selectedChoice.name);\n            setSearchTerm(selectedChoice.name);\n        }\n        else if (status !== 'loading' && (isUpKey(key) || isDownKey(key))) {\n            rl.clearLine(0);\n            if ((isUpKey(key) && active !== bounds.first) ||\n                (isDownKey(key) && active !== bounds.last)) {\n                const offset = isUpKey(key) ? -1 : 1;\n                let next = active;\n                do {\n                    next = (next + offset + searchResults.length) % searchResults.length;\n                } while (!isSelectable(searchResults[next]));\n                setActive(next);\n            }\n        }\n        else {\n            setSearchTerm(rl.line);\n        }\n    });\n    const message = theme.style.message(config.message, status);\n    const helpLine = theme.style.keysHelpTip([\n        ['\u2191\u2193', 'navigate'],\n        ['\u23CE', 'select'],\n    ]);\n    const page = usePagination({\n        items: searchResults,\n        active,\n        renderItem({ item, isActive }) {\n            if (Separator.isSeparator(item)) {\n                return ` ${item.separator}`;\n            }\n            if (item.disabled) {\n                const disabledLabel = typeof item.disabled === 'string' ? item.disabled : '(disabled)';\n                return theme.style.disabled(`${item.name} ${disabledLabel}`);\n            }\n            const color = isActive ? theme.style.highlight : (x) => x;\n            const cursor = isActive ? theme.icon.cursor : ` `;\n            return color(`${cursor} ${item.name}`);\n        },\n        pageSize,\n        loop: false,\n    });\n    let error;\n    if (searchError) {\n        error = theme.style.error(searchError);\n    }\n    else if (searchResults.length === 0 && searchTerm !== '' && status === 'idle') {\n        error = theme.style.error('No results found');\n    }\n    let searchStr;\n    if (status === 'done' && selectedChoice) {\n        return [prefix, message, theme.style.answer(selectedChoice.short)]\n            .filter(Boolean)\n            .join(' ')\n            .trimEnd();\n    }\n    else {\n        searchStr = theme.style.searchTerm(searchTerm);\n    }\n    const description = selectedChoice?.description;\n    const header = [prefix, message, searchStr].filter(Boolean).join(' ').trimEnd();\n    const body = [\n        error ?? page,\n        ' ',\n        description ? theme.style.description(description) : '',\n        helpLine,\n    ]\n        .filter(Boolean)\n        .join('\\n')\n        .trimEnd();\n    return [header, body];\n});\nexport { Separator } from '@inquirer/core';\n", "import { createPrompt, useState, useKeypress, isEnterKey, isTabKey, usePrefix, makeTheme, } from '@inquirer/core';\nfunction getBooleanValue(value, defaultValue) {\n    let answer = defaultValue !== false;\n    if (/^(y|yes)/i.test(value))\n        answer = true;\n    else if (/^(n|no)/i.test(value))\n        answer = false;\n    return answer;\n}\nfunction boolToString(value) {\n    return value ? 'Yes' : 'No';\n}\nexport default createPrompt((config, done) => {\n    const { transformer = boolToString } = config;\n    const [status, setStatus] = useState('idle');\n    const [value, setValue] = useState('');\n    const theme = makeTheme(config.theme);\n    const prefix = usePrefix({ status, theme });\n    useKeypress((key, rl) => {\n        if (status !== 'idle')\n            return;\n        if (isEnterKey(key)) {\n            const answer = getBooleanValue(value, config.default);\n            setValue(transformer(answer));\n            setStatus('done');\n            done(answer);\n        }\n        else if (isTabKey(key)) {\n            const answer = boolToString(!getBooleanValue(value, config.default));\n            rl.clearLine(0); // Remove the tab character.\n            rl.write(answer);\n            setValue(answer);\n        }\n        else {\n            setValue(rl.line);\n        }\n    });\n    let formattedValue = value;\n    let defaultValue = '';\n    if (status === 'done') {\n        formattedValue = theme.style.answer(value);\n    }\n    else {\n        defaultValue = ` ${theme.style.defaultAnswer(config.default === false ? 'y/N' : 'Y/n')}`;\n    }\n    const message = theme.style.message(config.message, status);\n    return `${prefix} ${message}${defaultValue} ${formattedValue}`;\n});\n", "import input from \"@inquirer/input\";\nimport select from \"@inquirer/select\";\nimport search from \"@inquirer/search\";\nimport confirm from \"@inquirer/confirm\";\nimport { Context } from \"../../../bundler/context.js\";\nimport { logOutput } from \"../../../bundler/log.js\";\n\n/**\n * Handle ExitPromptError thrown by @inquirer/* packages when the user\n * presses Ctrl+C. Instead of printing an ugly stack trace, exit cleanly.\n * For unexpected errors, use ctx.crash to report to Sentry.\n */\nfunction handlePromptError(ctx: Context) {\n  return async (error: unknown): Promise<never> => {\n    if (error instanceof Error && error.name === \"ExitPromptError\") {\n      // User pressed Ctrl+C \u2014 exit silently with code 130 (standard for SIGINT)\n      process.exit(130);\n    }\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Unexpected prompt error: ${String(error)}`,\n      errForSentry: error instanceof Error ? error : undefined,\n    });\n  };\n}\n\nexport const promptString = async (\n  ctx: Context,\n  options: {\n    message: string;\n    default?: string;\n    validate?: (value: string) => boolean | string | Promise<string | boolean>;\n  },\n): Promise<string> => {\n  if (process.stdin.isTTY) {\n    return input({\n      message: options.message,\n      ...(options.default !== undefined ? { default: options.default } : {}),\n      ...(options.validate !== undefined ? { validate: options.validate } : {}),\n    }).catch(handlePromptError(ctx));\n  } else {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Cannot prompt for input in non-interactive terminals. (${options.message})`,\n    });\n  }\n};\n\nexport const promptSecret = async (\n  ctx: Context,\n  options: {\n    message: string;\n  },\n): Promise<string> => {\n  if (process.stdin.isTTY) {\n    return input({\n      message: options.message,\n      transformer: (val, { isFinal }) =>\n        isFinal ? \"*\".repeat(val.length) : val,\n    }).catch(handlePromptError(ctx));\n  } else {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Cannot prompt for input in non-interactive terminals. (${options.message})`,\n    });\n  }\n};\n\nexport const promptOptions = async <V>(\n  ctx: Context,\n  options: {\n    message: string;\n    choices: Array<{ name: string; value: V }>;\n    default?: V;\n    prefix?: string;\n    suffix?: string;\n  },\n): Promise<V> => {\n  if (process.stdin.isTTY) {\n    return select<V>({\n      message: options.message + (options.suffix ?? \"\"),\n      choices: options.choices,\n      ...(options.default !== undefined ? { default: options.default } : {}),\n      ...(options.prefix !== undefined\n        ? { theme: { prefix: options.prefix } }\n        : {}),\n    }).catch(handlePromptError(ctx));\n  } else {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Cannot prompt for input in non-interactive terminals. (${options.message})`,\n    });\n  }\n};\n\nexport const promptSearch = async <V>(\n  ctx: Context,\n  options: {\n    message: string;\n    choices: Array<{ name: string; value: V }>;\n    default?: V;\n  },\n): Promise<V> => {\n  if (process.stdin.isTTY) {\n    return search<V>({\n      message: options.message,\n      ...(options.default !== undefined ? { default: options.default } : {}),\n      source: (input: string | undefined) => {\n        if (!input) return options.choices;\n        const term = input.toLowerCase();\n        return options.choices.filter((c) =>\n          c.name.toLowerCase().includes(term),\n        );\n      },\n    }).catch(handlePromptError(ctx));\n  } else {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Cannot prompt for input in non-interactive terminals. (${options.message})`,\n    });\n  }\n};\n\nexport const promptYesNo = async (\n  ctx: Context,\n  options: {\n    message: string;\n    default?: boolean;\n    prefix?: string;\n    nonInteractiveError?: string;\n  },\n): Promise<boolean> => {\n  if (process.stdin.isTTY) {\n    return confirm({\n      message: options.message,\n      ...(options.default !== undefined ? { default: options.default } : {}),\n      ...(options.prefix !== undefined\n        ? { theme: { prefix: options.prefix } }\n        : {}),\n    }).catch(handlePromptError(ctx));\n  } else {\n    logOutput(options.message);\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        options.nonInteractiveError ??\n        `Cannot prompt for input in non-interactive terminals. (${options.message})`,\n    });\n  }\n};\n", "import { Context } from \"../../../bundler/context.js\";\nimport { bigBrainAPI } from \"../utils/utils.js\";\n\nexport async function bigBrainStart(\n  ctx: Context,\n  data: {\n    // cloud port\n    port: number;\n    projectSlug: string;\n    teamSlug: string;\n    instanceName: string | null;\n  },\n): Promise<{\n  deploymentName: string;\n  /** @deprecated */\n  adminKey: string;\n  projectId: number;\n}> {\n  return bigBrainAPI({\n    ctx,\n    method: \"POST\",\n    path: \"local_deployment/start\",\n    data,\n  });\n}\n\nexport async function bigBrainPause(\n  ctx: Context,\n  data: {\n    projectSlug: string;\n    teamSlug: string;\n  },\n): Promise<void> {\n  return bigBrainAPI({\n    ctx,\n    method: \"POST\",\n    path: \"local_deployment/pause\",\n    data,\n  });\n}\n\nexport async function bigBrainRecordActivity(\n  ctx: Context,\n  data: {\n    instanceName: string;\n    adminKey: string;\n  },\n) {\n  return bigBrainAPI({\n    ctx,\n    method: \"POST\",\n    path: \"local_deployment/record_activity\",\n    data,\n  });\n}\n\nexport async function bigBrainEnableFeatureMetadata(\n  ctx: Context,\n): Promise<{ totalProjects: { kind: \"none\" | \"one\" | \"multiple\" } }> {\n  return bigBrainAPI({\n    ctx,\n    method: \"POST\",\n    path: \"local_deployment/enable_feature_metadata\",\n    data: {},\n  });\n}\n\n/** Whether a project already has a cloud dev deployment for this user. */\nexport async function projectHasExistingCloudDev(\n  ctx: Context,\n  {\n    projectSlug,\n    teamSlug,\n  }: {\n    projectSlug: string;\n    teamSlug: string;\n  },\n) {\n  const response = await bigBrainAPI<\n    | {\n        kind: \"Exists\";\n      }\n    | {\n        kind: \"DoesNotExist\";\n      }\n  >({\n    ctx,\n    method: \"POST\",\n    path: \"deployment/existing_dev\",\n    data: { projectSlug, teamSlug },\n  });\n  if (response.kind === \"Exists\") {\n    return true;\n  } else if (response.kind === \"DoesNotExist\") {\n    return false;\n  }\n  return await ctx.crash({\n    exitCode: 1,\n    errorType: \"fatal\",\n    printedMessage: `Unexpected /api/deployment/existing_dev response: ${JSON.stringify(response, null, 2)}`,\n  });\n}\n", "// settings & const\nconst PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\nconst supportsRequestInitExt = () => {\n  return (\n    typeof process === \"object\" &&\n    Number.parseInt(process?.versions?.node?.substring(0, 2)) >= 18 &&\n    process.versions.undici\n  );\n};\n\n/**\n * Returns a cheap, non-cryptographically-secure random ID\n * Courtesy of @imranbarbhuiya (https://github.com/imranbarbhuiya)\n */\nexport function randomID() {\n  return Math.random().toString(36).slice(2, 11);\n}\n\n/**\n * Create an openapi-fetch client.\n * @type {import(\"./index.js\").default}\n */\nexport default function createClient(clientOptions) {\n  let {\n    baseUrl = \"\",\n    Request: CustomRequest = globalThis.Request,\n    fetch: baseFetch = globalThis.fetch,\n    querySerializer: globalQuerySerializer,\n    bodySerializer: globalBodySerializer,\n    pathSerializer: globalPathSerializer,\n    headers: baseHeaders,\n    requestInitExt = undefined,\n    ...baseOptions\n  } = { ...clientOptions };\n  requestInitExt = supportsRequestInitExt() ? requestInitExt : undefined;\n  baseUrl = removeTrailingSlash(baseUrl);\n  const globalMiddlewares = [];\n\n  /**\n   * Per-request fetch (keeps settings created in createClient()\n   * @param {T} url\n   * @param {import('./index.js').FetchOptions<T>} fetchOptions\n   */\n  async function coreFetch(schemaPath, fetchOptions) {\n    const {\n      baseUrl: localBaseUrl,\n      fetch = baseFetch,\n      Request = CustomRequest,\n      headers,\n      params = {},\n      parseAs = \"json\",\n      querySerializer: requestQuerySerializer,\n      bodySerializer = globalBodySerializer ?? defaultBodySerializer,\n      pathSerializer: requestPathSerializer,\n      body,\n      middleware: requestMiddlewares = [],\n      ...init\n    } = fetchOptions || {};\n    let finalBaseUrl = baseUrl;\n    if (localBaseUrl) {\n      finalBaseUrl = removeTrailingSlash(localBaseUrl) ?? baseUrl;\n    }\n\n    let querySerializer =\n      typeof globalQuerySerializer === \"function\"\n        ? globalQuerySerializer\n        : createQuerySerializer(globalQuerySerializer);\n    if (requestQuerySerializer) {\n      querySerializer =\n        typeof requestQuerySerializer === \"function\"\n          ? requestQuerySerializer\n          : createQuerySerializer({\n              ...(typeof globalQuerySerializer === \"object\" ? globalQuerySerializer : {}),\n              ...requestQuerySerializer,\n            });\n    }\n\n    const pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;\n\n    const serializedBody =\n      body === undefined\n        ? undefined\n        : bodySerializer(\n            body,\n            // Note: we declare mergeHeaders() both here and below because it’s a bit of a chicken-or-egg situation:\n            // bodySerializer() needs all headers so we aren’t dropping ones set by the user, however,\n            // the result of this ALSO sets the lowest-priority content-type header. So we re-merge below,\n            // setting the content-type at the very beginning to be overwritten.\n            // Lastly, based on the way headers work, it’s not a simple “present-or-not” check becauase null intentionally un-sets headers.\n            mergeHeaders(baseHeaders, headers, params.header),\n          );\n    const finalHeaders = mergeHeaders(\n      // with no body, we should not to set Content-Type\n      serializedBody === undefined ||\n        // if serialized body is FormData; browser will correctly set Content-Type & boundary expression\n        serializedBody instanceof FormData\n        ? {}\n        : {\n            \"Content-Type\": \"application/json\",\n          },\n      baseHeaders,\n      headers,\n      params.header,\n    );\n\n    // Client level middleware take priority over request-level middleware\n    const finalMiddlewares = [...globalMiddlewares, ...requestMiddlewares];\n\n    const requestInit = {\n      redirect: \"follow\",\n      ...baseOptions,\n      ...init,\n      body: serializedBody,\n      headers: finalHeaders,\n    };\n\n    let id;\n    let options;\n    let request = new Request(\n      createFinalURL(schemaPath, { baseUrl: finalBaseUrl, params, querySerializer, pathSerializer }),\n      requestInit,\n    );\n    let response;\n\n    /** Add custom parameters to Request object */\n    for (const key in init) {\n      if (!(key in request)) {\n        request[key] = init[key];\n      }\n    }\n\n    if (finalMiddlewares.length) {\n      id = randomID();\n\n      // middleware (request)\n      options = Object.freeze({\n        baseUrl: finalBaseUrl,\n        fetch,\n        parseAs,\n        querySerializer,\n        bodySerializer,\n        pathSerializer,\n      });\n      for (const m of finalMiddlewares) {\n        if (m && typeof m === \"object\" && typeof m.onRequest === \"function\") {\n          const result = await m.onRequest({\n            request,\n            schemaPath,\n            params,\n            options,\n            id,\n          });\n          if (result) {\n            if (result instanceof Request) {\n              request = result;\n            } else if (result instanceof Response) {\n              response = result;\n              break;\n            } else {\n              throw new Error(\"onRequest: must return new Request() or Response() when modifying the request\");\n            }\n          }\n        }\n      }\n    }\n\n    if (!response) {\n      // fetch!\n      try {\n        response = await fetch(request, requestInitExt);\n      } catch (error) {\n        let errorAfterMiddleware = error;\n        // middleware (error)\n        // execute in reverse-array order (first priority gets last transform)\n        if (finalMiddlewares.length) {\n          for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n            const m = finalMiddlewares[i];\n            if (m && typeof m === \"object\" && typeof m.onError === \"function\") {\n              const result = await m.onError({\n                request,\n                error: errorAfterMiddleware,\n                schemaPath,\n                params,\n                options,\n                id,\n              });\n              if (result) {\n                // if error is handled by returning a response, skip remaining middleware\n                if (result instanceof Response) {\n                  errorAfterMiddleware = undefined;\n                  response = result;\n                  break;\n                }\n\n                if (result instanceof Error) {\n                  errorAfterMiddleware = result;\n                  continue;\n                }\n\n                throw new Error(\"onError: must return new Response() or instance of Error\");\n              }\n            }\n          }\n        }\n\n        // rethrow error if not handled by middleware\n        if (errorAfterMiddleware) {\n          throw errorAfterMiddleware;\n        }\n      }\n\n      // middleware (response)\n      // execute in reverse-array order (first priority gets last transform)\n      if (finalMiddlewares.length) {\n        for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n          const m = finalMiddlewares[i];\n          if (m && typeof m === \"object\" && typeof m.onResponse === \"function\") {\n            const result = await m.onResponse({\n              request,\n              response,\n              schemaPath,\n              params,\n              options,\n              id,\n            });\n            if (result) {\n              if (!(result instanceof Response)) {\n                throw new Error(\"onResponse: must return new Response() when modifying the response\");\n              }\n              response = result;\n            }\n          }\n        }\n      }\n    }\n\n    const contentLength = response.headers.get(\"Content-Length\");\n    // handle empty content\n    if (\n      response.status === 204 ||\n      request.method === \"HEAD\" ||\n      (contentLength === \"0\" && !response.headers.get(\"Transfer-Encoding\")?.includes(\"chunked\"))\n    ) {\n      return response.ok ? { data: undefined, response } : { error: undefined, response };\n    }\n\n    // parse response (falling back to .text() when necessary)\n    if (response.ok) {\n      const getResponseData = async () => {\n        // if \"stream\", skip parsing entirely\n        if (parseAs === \"stream\") {\n          return response.body;\n        }\n\n        if (parseAs === \"json\" && !contentLength) {\n          // use text() when no content-length is provided to avoid errors parsing empty bodies (200 with no content)\n          const raw = await response.text();\n          return raw ? JSON.parse(raw) : undefined;\n        }\n\n        return await response[parseAs]();\n      };\n      return { data: await getResponseData(), response };\n    }\n\n    // handle errors\n    let error = await response.text();\n    try {\n      error = JSON.parse(error); // attempt to parse as JSON\n    } catch {\n      // noop\n    }\n    return { error, response };\n  }\n\n  return {\n    request(method, url, init) {\n      return coreFetch(url, { ...init, method: method.toUpperCase() });\n    },\n    /** Call a GET endpoint */\n    GET(url, init) {\n      return coreFetch(url, { ...init, method: \"GET\" });\n    },\n    /** Call a PUT endpoint */\n    PUT(url, init) {\n      return coreFetch(url, { ...init, method: \"PUT\" });\n    },\n    /** Call a POST endpoint */\n    POST(url, init) {\n      return coreFetch(url, { ...init, method: \"POST\" });\n    },\n    /** Call a DELETE endpoint */\n    DELETE(url, init) {\n      return coreFetch(url, { ...init, method: \"DELETE\" });\n    },\n    /** Call a OPTIONS endpoint */\n    OPTIONS(url, init) {\n      return coreFetch(url, { ...init, method: \"OPTIONS\" });\n    },\n    /** Call a HEAD endpoint */\n    HEAD(url, init) {\n      return coreFetch(url, { ...init, method: \"HEAD\" });\n    },\n    /** Call a PATCH endpoint */\n    PATCH(url, init) {\n      return coreFetch(url, { ...init, method: \"PATCH\" });\n    },\n    /** Call a TRACE endpoint */\n    TRACE(url, init) {\n      return coreFetch(url, { ...init, method: \"TRACE\" });\n    },\n    /** Register middleware */\n    use(...middleware) {\n      for (const m of middleware) {\n        if (!m) {\n          continue;\n        }\n        if (typeof m !== \"object\" || !(\"onRequest\" in m || \"onResponse\" in m || \"onError\" in m)) {\n          throw new Error(\"Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`\");\n        }\n        globalMiddlewares.push(m);\n      }\n    },\n    /** Unregister middleware */\n    eject(...middleware) {\n      for (const m of middleware) {\n        const i = globalMiddlewares.indexOf(m);\n        if (i !== -1) {\n          globalMiddlewares.splice(i, 1);\n        }\n      }\n    },\n  };\n}\n\nclass PathCallForwarder {\n  constructor(client, url) {\n    this.client = client;\n    this.url = url;\n  }\n\n  GET = (init) => {\n    return this.client.GET(this.url, init);\n  };\n  PUT = (init) => {\n    return this.client.PUT(this.url, init);\n  };\n  POST = (init) => {\n    return this.client.POST(this.url, init);\n  };\n  DELETE = (init) => {\n    return this.client.DELETE(this.url, init);\n  };\n  OPTIONS = (init) => {\n    return this.client.OPTIONS(this.url, init);\n  };\n  HEAD = (init) => {\n    return this.client.HEAD(this.url, init);\n  };\n  PATCH = (init) => {\n    return this.client.PATCH(this.url, init);\n  };\n  TRACE = (init) => {\n    return this.client.TRACE(this.url, init);\n  };\n}\n\nclass PathClientProxyHandler {\n  constructor() {\n    this.client = null;\n  }\n\n  // Assume the property is an URL.\n  get(coreClient, url) {\n    const forwarder = new PathCallForwarder(coreClient, url);\n    this.client[url] = forwarder;\n    return forwarder;\n  }\n}\n\n/**\n * Wrap openapi-fetch client to support a path based API.\n * @type {import(\"./index.js\").wrapAsPathBasedClient}\n */\nexport function wrapAsPathBasedClient(coreClient) {\n  const handler = new PathClientProxyHandler();\n  const proxy = new Proxy(coreClient, handler);\n\n  // Put the proxy on the prototype chain of the actual client.\n  // This means if we do not have a memoized PathCallForwarder,\n  // we fall back to the proxy to synthesize it.\n  // However, the proxy itself is not on the hot-path (if we fetch the same\n  // endpoint multiple times, only the first call will hit the proxy).\n  function Client() {}\n  Client.prototype = proxy;\n\n  const client = new Client();\n\n  // Feed the client back to the proxy handler so it can store the generated\n  // PathCallForwarder.\n  handler.client = client;\n\n  return client;\n}\n\n/**\n * Convenience method to an openapi-fetch path based client.\n * Strictly equivalent to `wrapAsPathBasedClient(createClient(...))`.\n * @type {import(\"./index.js\").createPathBasedClient}\n */\nexport function createPathBasedClient(clientOptions) {\n  return wrapAsPathBasedClient(createClient(clientOptions));\n}\n\n// utils\n\n/**\n * Serialize primitive param values\n * @type {import(\"./index.js\").serializePrimitiveParam}\n */\nexport function serializePrimitiveParam(name, value, options) {\n  if (value === undefined || value === null) {\n    return \"\";\n  }\n  if (typeof value === \"object\") {\n    throw new Error(\n      \"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\",\n    );\n  }\n  return `${name}=${options?.allowReserved === true ? value : encodeURIComponent(value)}`;\n}\n\n/**\n * Serialize object param (shallow only)\n * @type {import(\"./index.js\").serializeObjectParam}\n */\nexport function serializeObjectParam(name, value, options) {\n  if (!value || typeof value !== \"object\") {\n    return \"\";\n  }\n  const values = [];\n  const joiner =\n    {\n      simple: \",\",\n      label: \".\",\n      matrix: \";\",\n    }[options.style] || \"&\";\n\n  // explode: false\n  if (options.style !== \"deepObject\" && options.explode === false) {\n    for (const k in value) {\n      values.push(k, options.allowReserved === true ? value[k] : encodeURIComponent(value[k]));\n    }\n    const final = values.join(\",\"); // note: values are always joined by comma in explode: false (but joiner can prefix)\n    switch (options.style) {\n      case \"form\": {\n        return `${name}=${final}`;\n      }\n      case \"label\": {\n        return `.${final}`;\n      }\n      case \"matrix\": {\n        return `;${name}=${final}`;\n      }\n      default: {\n        return final;\n      }\n    }\n  }\n\n  // explode: true\n  for (const k in value) {\n    const finalName = options.style === \"deepObject\" ? `${name}[${k}]` : k;\n    values.push(serializePrimitiveParam(finalName, value[k], options));\n  }\n  const final = values.join(joiner);\n  return options.style === \"label\" || options.style === \"matrix\" ? `${joiner}${final}` : final;\n}\n\n/**\n * Serialize array param (shallow only)\n * @type {import(\"./index.js\").serializeArrayParam}\n */\nexport function serializeArrayParam(name, value, options) {\n  if (!Array.isArray(value)) {\n    return \"\";\n  }\n\n  // explode: false\n  if (options.explode === false) {\n    const joiner = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\"; // note: for arrays, joiners vary wildly based on style + explode behavior\n    const final = (options.allowReserved === true ? value : value.map((v) => encodeURIComponent(v))).join(joiner);\n    switch (options.style) {\n      case \"simple\": {\n        return final;\n      }\n      case \"label\": {\n        return `.${final}`;\n      }\n      case \"matrix\": {\n        return `;${name}=${final}`;\n      }\n      // case \"spaceDelimited\":\n      // case \"pipeDelimited\":\n      default: {\n        return `${name}=${final}`;\n      }\n    }\n  }\n\n  // explode: true\n  const joiner = { simple: \",\", label: \".\", matrix: \";\" }[options.style] || \"&\";\n  const values = [];\n  for (const v of value) {\n    if (options.style === \"simple\" || options.style === \"label\") {\n      values.push(options.allowReserved === true ? v : encodeURIComponent(v));\n    } else {\n      values.push(serializePrimitiveParam(name, v, options));\n    }\n  }\n  return options.style === \"label\" || options.style === \"matrix\"\n    ? `${joiner}${values.join(joiner)}`\n    : values.join(joiner);\n}\n\n/**\n * Serialize query params to string\n * @type {import(\"./index.js\").createQuerySerializer}\n */\nexport function createQuerySerializer(options) {\n  return function querySerializer(queryParams) {\n    const search = [];\n    if (queryParams && typeof queryParams === \"object\") {\n      for (const name in queryParams) {\n        const value = queryParams[name];\n        if (value === undefined || value === null) {\n          continue;\n        }\n        if (Array.isArray(value)) {\n          if (value.length === 0) {\n            continue;\n          }\n          search.push(\n            serializeArrayParam(name, value, {\n              style: \"form\",\n              explode: true,\n              ...options?.array,\n              allowReserved: options?.allowReserved || false,\n            }),\n          );\n          continue;\n        }\n        if (typeof value === \"object\") {\n          search.push(\n            serializeObjectParam(name, value, {\n              style: \"deepObject\",\n              explode: true,\n              ...options?.object,\n              allowReserved: options?.allowReserved || false,\n            }),\n          );\n          continue;\n        }\n        search.push(serializePrimitiveParam(name, value, options));\n      }\n    }\n    return search.join(\"&\");\n  };\n}\n\n/**\n * Handle different OpenAPI 3.x serialization styles\n * @type {import(\"./index.js\").defaultPathSerializer}\n * @see https://swagger.io/docs/specification/serialization/#path\n */\nexport function defaultPathSerializer(pathname, pathParams) {\n  let nextURL = pathname;\n  for (const match of pathname.match(PATH_PARAM_RE) ?? []) {\n    let name = match.substring(1, match.length - 1);\n    let explode = false;\n    let style = \"simple\";\n    if (name.endsWith(\"*\")) {\n      explode = true;\n      name = name.substring(0, name.length - 1);\n    }\n    if (name.startsWith(\".\")) {\n      style = \"label\";\n      name = name.substring(1);\n    } else if (name.startsWith(\";\")) {\n      style = \"matrix\";\n      name = name.substring(1);\n    }\n    if (!pathParams || pathParams[name] === undefined || pathParams[name] === null) {\n      continue;\n    }\n    const value = pathParams[name];\n    if (Array.isArray(value)) {\n      nextURL = nextURL.replace(match, serializeArrayParam(name, value, { style, explode }));\n      continue;\n    }\n    if (typeof value === \"object\") {\n      nextURL = nextURL.replace(match, serializeObjectParam(name, value, { style, explode }));\n      continue;\n    }\n    if (style === \"matrix\") {\n      nextURL = nextURL.replace(match, `;${serializePrimitiveParam(name, value)}`);\n      continue;\n    }\n    nextURL = nextURL.replace(match, style === \"label\" ? `.${encodeURIComponent(value)}` : encodeURIComponent(value));\n  }\n  return nextURL;\n}\n\n/**\n * Serialize body object to string\n * @type {import(\"./index.js\").defaultBodySerializer}\n */\nexport function defaultBodySerializer(body, headers) {\n  if (body instanceof FormData) {\n    return body;\n  }\n  if (headers) {\n    const contentType =\n      headers.get instanceof Function\n        ? (headers.get(\"Content-Type\") ?? headers.get(\"content-type\"))\n        : (headers[\"Content-Type\"] ?? headers[\"content-type\"]);\n    if (contentType === \"application/x-www-form-urlencoded\") {\n      return new URLSearchParams(body).toString();\n    }\n  }\n  return JSON.stringify(body);\n}\n\n/**\n * Construct URL string from baseUrl and handle path and query params\n * @type {import(\"./index.js\").createFinalURL}\n */\nexport function createFinalURL(pathname, options) {\n  let finalURL = `${options.baseUrl}${pathname}`;\n  if (options.params?.path) {\n    finalURL = options.pathSerializer(finalURL, options.params.path);\n  }\n  let search = options.querySerializer(options.params.query ?? {});\n  if (search.startsWith(\"?\")) {\n    search = search.substring(1);\n  }\n  if (search) {\n    finalURL += `?${search}`;\n  }\n  return finalURL;\n}\n\n/**\n * Merge headers a and b, with b taking priority\n * @type {import(\"./index.js\").mergeHeaders}\n */\nexport function mergeHeaders(...allHeaders) {\n  const finalHeaders = new Headers();\n  for (const h of allHeaders) {\n    if (!h || typeof h !== \"object\") {\n      continue;\n    }\n    const iterator = h instanceof Headers ? h.entries() : Object.entries(h);\n    for (const [k, v] of iterator) {\n      if (v === null) {\n        finalHeaders.delete(k);\n      } else if (Array.isArray(v)) {\n        for (const v2 of v) {\n          finalHeaders.append(k, v2);\n        }\n      } else if (v !== undefined) {\n        finalHeaders.set(k, v);\n      }\n    }\n  }\n  return finalHeaders;\n}\n\n/**\n * Remove trailing slash from url\n * @type {import(\"./index.js\").removeTrailingSlash}\n */\nexport function removeTrailingSlash(url) {\n  if (url.endsWith(\"/\")) {\n    return url.substring(0, url.length - 1);\n  }\n  return url;\n}\n", "import { Context } from \"../../bundler/context.js\";\nimport { logOutput } from \"../../bundler/log.js\";\nimport path from \"path\";\nimport { NodeFs } from \"../../bundler/fs.js\";\n\nexport function recursivelyDelete(\n  ctx: Context,\n  deletePath: string,\n  opts?: { force?: boolean; dryRun?: boolean },\n) {\n  const dryRun = !!opts?.dryRun;\n  let st;\n  try {\n    st = ctx.fs.stat(deletePath);\n  } catch (err: any) {\n    if (err.code === \"ENOENT\" && opts?.force) {\n      return;\n    }\n    // eslint-disable-next-line no-restricted-syntax\n    throw err;\n  }\n  if (st.isDirectory()) {\n    for (const entry of ctx.fs.listDir(deletePath)) {\n      recursivelyDelete(ctx, path.join(deletePath, entry.name), opts);\n    }\n    if (dryRun) {\n      logOutput(`Command would delete directory: ${deletePath}`);\n      return;\n    }\n    try {\n      ctx.fs.rmdir(deletePath);\n    } catch (err: any) {\n      if (err.code !== \"ENOENT\") {\n        // eslint-disable-next-line no-restricted-syntax\n        throw err;\n      }\n    }\n  } else {\n    if (dryRun) {\n      logOutput(`Command would delete file: ${deletePath}`);\n      return;\n    }\n    try {\n      ctx.fs.unlink(deletePath);\n    } catch (err: any) {\n      if (err.code !== \"ENOENT\") {\n        // eslint-disable-next-line no-restricted-syntax\n        throw err;\n      }\n    }\n  }\n}\n\nexport async function recursivelyCopy(\n  ctx: Context,\n  nodeFs: NodeFs,\n  src: string,\n  dest: string,\n) {\n  const st = nodeFs.stat(src);\n  if (st.isDirectory()) {\n    nodeFs.mkdir(dest, { recursive: true });\n    for (const entry of nodeFs.listDir(src)) {\n      await recursivelyCopy(\n        ctx,\n        nodeFs,\n        path.join(src, entry.name),\n        path.join(dest, entry.name),\n      );\n    }\n  } else {\n    // Don't use writeUtf8File to allow copying arbitrary files\n    await nodeFs.writeFileStream(dest, nodeFs.createReadStream(src, {}));\n  }\n}\n", "/*\n~/.cache/convex\n  binaries\n    0.0.1\n      convex-local-backend[.exe] // convex-local-backend.exe on windows\n    0.0.2\n      convex-local-backend[.exe]\n  dashboard\n    config.json // `GlobalDashboardConfig`\n    out\n    // if present, output files from building the self-hosted dashboard which can\n    // be served using `npx serve`\n    index.html\n\n\nDeployment state storage locations:\n\nNew default (project-local): .convex/local/default/\n  - Used for both \"local\" (linked to Convex project) and \"anonymous\" deployments\n  - One deployment per project/worktree/clone\n  - This allows worktrees/clones to have isolated storage without conflicts\n\nLegacy (home directory) - used for backward compatibility if data already exists:\n  - For \"local\" deployments: ~/.convex/convex-backend-state/local-{team}-{project}/\n  - For \"anonymous\" deployments: ~/.convex/anonymous-convex-backend-state/{anonymous-deployment-name}/\n\nFor anonymous deployments, the locally running dashboard's `{ port }`\nis stored as `dashboard.json` next to that deployment's `config.json` (see\n`ProjectDashboardConfig`), wherever the deployment lives.\n\n\n~/.convex\n  convex-backend-state\n    local-my_team-chess\n      config.json // contains `LocalDeploymentConfig`\n      convex_local_storage\n      convex_local_backend.sqlite3\n    local-my_team-whisper\n      config.json\n      convex_local_storage\n      convex_local_backend.sqlite3\n  anonymous-convex-backend-state\n    config.json // contains { uuid: <uuid> }, used to identify the anonymous user\n    anonymous-chess\n      config.json\n      convex_local_storage\n      convex_local_backend.sqlite3\n*/\n\nimport path from \"path\";\nimport { cacheDir, rootDirectory } from \"../utils/utils.js\";\nimport { Context } from \"../../../bundler/context.js\";\nimport { logVerbose } from \"../../../bundler/log.js\";\nimport { recursivelyDelete } from \"../fsUtils.js\";\nimport crypto from \"crypto\";\n\n/**\n * Ensure the `.convex/.gitignore` file exists with the right content.\n * This prevents local deployment state from being committed to git.\n */\nexport function ensureDotConvexGitignore(\n  ctx: Context,\n  projectDir?: string,\n): void {\n  const baseDir = projectDir ?? process.cwd();\n  const dotConvexDir = path.join(baseDir, \".convex\");\n  const gitignorePath = path.join(dotConvexDir, \".gitignore\");\n\n  // Only create if .convex directory exists but .gitignore doesn't\n  if (ctx.fs.exists(dotConvexDir) && !ctx.fs.exists(gitignorePath)) {\n    ctx.fs.writeUtf8File(gitignorePath, \"/*\\n\");\n    logVerbose(`Created .convex/.gitignore to ignore local/`);\n  }\n}\n\n// Naming is hard, but \"local\" refers to deployments linked to a Convex project\n// and \"anonymous\" refers to deployments that are not linked to a Convex project\n// (but in both cases they are running locally).\nexport type LocalDeploymentKind = \"local\" | \"anonymous\";\n\nexport function rootDeploymentStateDir(kind: LocalDeploymentKind) {\n  return path.join(\n    rootDirectory(),\n    kind === \"local\"\n      ? \"convex-backend-state\"\n      : \"anonymous-convex-backend-state\",\n  );\n}\n\n/**\n * Get the project-local state directory for a deployment.\n * Always returns `.convex/local/default/` - one deployment per project.\n */\nexport function projectLocalStateDir(projectDir?: string): string {\n  const baseDir = projectDir ?? process.cwd();\n  return path.join(baseDir, \".convex\", \"local\", \"default\");\n}\n\n/**\n * Get the legacy home directory state path for a deployment.\n */\nexport function legacyDeploymentStateDir(\n  deploymentKind: LocalDeploymentKind,\n  deploymentName: string,\n): string {\n  return path.join(rootDeploymentStateDir(deploymentKind), deploymentName);\n}\n\n/**\n * Get the state directory for a deployment.\n *\n * Priority order:\n * 1. Project-local directory if it has data (config.json exists)\n * 2. Legacy home directory if it exists (backward compatibility)\n * 3. Project-local directory for new deployments\n *\n * This ensures that when project-local storage is in use, it takes precedence\n * over any legacy directories that might exist with the same deployment name.\n */\nexport function deploymentStateDir(\n  ctx: Context,\n  deploymentKind: LocalDeploymentKind,\n  deploymentName: string,\n  projectDir?: string,\n): string {\n  // Check if project-local has data - if so, use it\n  // This takes precedence over legacy to support switching deployment types\n  // within the same project directory\n  const localDir = projectLocalStateDir(projectDir);\n  const localConfigFile = path.join(localDir, \"config.json\");\n  if (ctx.fs.exists(localConfigFile)) {\n    logVerbose(\n      `Using project-local state for deployment ${deploymentName}: ${localDir}`,\n    );\n    return localDir;\n  }\n\n  // Check if legacy data exists in home directory\n  const legacyDir = legacyDeploymentStateDir(deploymentKind, deploymentName);\n  if (ctx.fs.exists(legacyDir) && ctx.fs.stat(legacyDir).isDirectory()) {\n    logVerbose(\n      `Using legacy home directory state for deployment ${deploymentName}: ${legacyDir}`,\n    );\n    return legacyDir;\n  }\n\n  // Default to project-local for new deployments\n  logVerbose(\n    `Using project-local state for new deployment ${deploymentName}: ${localDir}`,\n  );\n  return localDir;\n}\n\n/**\n * Get the state directory for a deployment without checking for legacy data.\n * This always returns the project-local path.\n */\nexport function deploymentStateDirUnchecked(projectDir?: string): string {\n  return projectLocalStateDir(projectDir);\n}\n\nexport type LocalDeploymentConfig = {\n  ports: {\n    cloud: number;\n    site: number;\n  };\n  backendVersion: string;\n  adminKey: string;\n  // If not present, use the default instance secret for local backends\n  instanceSecret?: string;\n  // The deployment name (e.g., \"local-my_team-my_project\" or \"anonymous-chess\")\n  // This is stored in the config for project-local storage where the directory\n  // name is always \"default\" rather than the deployment name.\n  deploymentName?: string;\n  // Numeric id of the cloud project this local deployment is registered under.\n  // Used to detect when the cloud project has changed since the last time it\n  // was used (e.g. through `npx convex deployment select`).\n  cloudProjectId: number | undefined;\n};\n\n/**\n * Load deployment config from a specific directory.\n * This is used when we already know the directory path.\n */\nexport function loadDeploymentConfigFromDir(\n  ctx: Context,\n  dir: string,\n): LocalDeploymentConfig | null {\n  const configFile = path.join(dir, \"config.json\");\n  if (!ctx.fs.exists(configFile)) {\n    return null;\n  }\n  const content = ctx.fs.readUtf8File(configFile);\n  try {\n    return JSON.parse(content);\n  } catch (e) {\n    logVerbose(\n      `Failed to parse local deployment config at ${dir}: ${e as any}`,\n    );\n    return null;\n  }\n}\n\n/**\n * Load the project-local deployment config.\n * This returns the config from `.convex/local/default/` if it exists.\n * Returns both the config and the deployment name stored in it.\n */\nexport function loadProjectLocalConfig(\n  ctx: Context,\n  projectDir?: string,\n): { deploymentName: string; config: LocalDeploymentConfig } | null {\n  const localDir = projectLocalStateDir(projectDir);\n  const config = loadDeploymentConfigFromDir(ctx, localDir);\n  if (config !== null && config.deploymentName) {\n    logVerbose(\n      `Found project-local deployment config for ${config.deploymentName}`,\n    );\n    return { deploymentName: config.deploymentName, config };\n  }\n  return null;\n}\n\n/**\n * Load deployment config for a deployment.\n *\n * Priority order (matching deploymentStateDir):\n * 1. Project-local directory if it has a matching config\n * 2. Legacy home directory\n */\nexport function loadDeploymentConfig(\n  ctx: Context,\n  deploymentKind: LocalDeploymentKind,\n  deploymentName: string,\n  projectDir?: string,\n): LocalDeploymentConfig | null {\n  // Check project-local location first - matches deploymentStateDir priority\n  const localDir = projectLocalStateDir(projectDir);\n  const localConfig = loadDeploymentConfigFromDir(ctx, localDir);\n  if (localConfig !== null) {\n    // Only use if config matches the requested deployment name\n    // (project-local can hold different deployments at different times)\n    if (\n      !localConfig.deploymentName ||\n      localConfig.deploymentName === deploymentName\n    ) {\n      logVerbose(\n        `Found deployment config in project-local location for ${deploymentName}`,\n      );\n      return localConfig;\n    }\n    logVerbose(\n      `Project-local config is for ${localConfig.deploymentName}, not ${deploymentName}`,\n    );\n  }\n\n  // Check legacy location\n  const legacyDir = legacyDeploymentStateDir(deploymentKind, deploymentName);\n  const legacyConfig = loadDeploymentConfigFromDir(ctx, legacyDir);\n  if (legacyConfig !== null) {\n    logVerbose(\n      `Found deployment config in legacy location for ${deploymentName}`,\n    );\n    return legacyConfig;\n  }\n\n  return null;\n}\n\n/**\n * Save deployment config.\n *\n * If data already exists in the legacy home directory, continue using that\n * location. Otherwise, use the project-local directory. The deployment name\n * is always stored in the config for project-local storage.\n */\nexport function saveDeploymentConfig(\n  ctx: Context,\n  deploymentKind: LocalDeploymentKind,\n  deploymentName: string,\n  config: LocalDeploymentConfig,\n  projectDir?: string,\n) {\n  const dir = deploymentStateDir(\n    ctx,\n    deploymentKind,\n    deploymentName,\n    projectDir,\n  );\n  const configFile = path.join(dir, \"config.json\");\n  if (!ctx.fs.exists(dir)) {\n    ctx.fs.mkdir(dir, { recursive: true });\n  }\n  // Ensure .gitignore exists to prevent local state from being committed\n  ensureDotConvexGitignore(ctx, projectDir);\n  // Always include the deployment name in the config for project-local storage\n  const configWithName = { ...config, deploymentName };\n  ctx.fs.writeUtf8File(configFile, JSON.stringify(configWithName));\n}\n\nexport function binariesDir() {\n  return path.join(cacheDir(), \"binaries\");\n}\n\nexport function dashboardZip() {\n  return path.join(dashboardDir(), \"dashboard.zip\");\n}\n\nexport function versionedBinaryDir(version: string) {\n  return path.join(binariesDir(), version);\n}\n\nexport function executablePath(version: string) {\n  return path.join(versionedBinaryDir(version), executableName());\n}\n\nexport function executableName() {\n  const ext = process.platform === \"win32\" ? \".exe\" : \"\";\n  return `convex-local-backend${ext}`;\n}\n\nexport function dashboardDir() {\n  return path.join(cacheDir(), \"dashboard\");\n}\n\nexport async function resetDashboardDir(ctx: Context) {\n  const dir = dashboardDir();\n  if (ctx.fs.exists(dir)) {\n    await recursivelyDelete(ctx, dir);\n  }\n  ctx.fs.mkdir(dir, { recursive: true });\n}\n\nexport function dashboardOutDir() {\n  return path.join(dashboardDir(), \"out\");\n}\n\n/**\n * Global dashboard config in ~/.cache/convex/dashboard/config.json.\n */\nexport type GlobalDashboardConfig = {\n  version: string;\n\n  // Previous versions of the Convex CLI would also store\n  // fields here for ports. They are now in ProjectDashboardConfig.\n};\n\nexport function loadGlobalDashboardConfig(\n  ctx: Context,\n): GlobalDashboardConfig | null {\n  const configFile = path.join(dashboardDir(), \"config.json\");\n  if (!ctx.fs.exists(configFile)) {\n    return null;\n  }\n  const content = ctx.fs.readUtf8File(configFile);\n  try {\n    return JSON.parse(content);\n  } catch (e) {\n    logVerbose(`Failed to parse dashboard config: ${e as any}`);\n    return null;\n  }\n}\n\nexport function saveGlobalDashboardConfig(\n  ctx: Context,\n  config: GlobalDashboardConfig,\n) {\n  const configFile = path.join(dashboardDir(), \"config.json\");\n  if (!ctx.fs.exists(dashboardDir())) {\n    ctx.fs.mkdir(dashboardDir(), { recursive: true });\n  }\n  ctx.fs.writeUtf8File(configFile, JSON.stringify(config));\n}\n\n/**\n * Project-scoped dashboard config (for anonymous dev) in\n * project/.convex/local/default/dashboard.json\n * (or legacyDeploymentStateDir/dashboard.json)\n */\nexport type ProjectDashboardConfig = {\n  port: number;\n};\n\nfunction dashboardConfigPath(ctx: Context, deploymentName: string) {\n  return path.join(\n    deploymentStateDir(ctx, \"anonymous\", deploymentName),\n    \"dashboard.json\",\n  );\n}\n\nexport function loadProjectDashboardConfig(\n  ctx: Context,\n  deploymentName: string,\n): ProjectDashboardConfig | null {\n  const configFile = dashboardConfigPath(ctx, deploymentName);\n  if (!ctx.fs.exists(configFile)) {\n    return null;\n  }\n  const content = ctx.fs.readUtf8File(configFile);\n  try {\n    return JSON.parse(content);\n  } catch (e) {\n    logVerbose(`Failed to parse project dashboard config: ${e as any}`);\n    return null;\n  }\n}\n\nexport function saveProjectDashboardConfig(\n  ctx: Context,\n  deploymentName: string,\n  config: ProjectDashboardConfig,\n) {\n  const configPath = dashboardConfigPath(ctx, deploymentName);\n  const directoryPath = path.dirname(configPath);\n  if (!ctx.fs.exists(directoryPath)) {\n    ctx.fs.mkdir(directoryPath, { recursive: true });\n  }\n  ctx.fs.writeUtf8File(configPath, JSON.stringify(config));\n}\n\nexport function loadUuidForAnonymousUser(ctx: Context) {\n  const configFile = path.join(\n    rootDeploymentStateDir(\"anonymous\"),\n    \"config.json\",\n  );\n  if (!ctx.fs.exists(configFile)) {\n    return null;\n  }\n  const content = ctx.fs.readUtf8File(configFile);\n  try {\n    const config = JSON.parse(content);\n    return config.uuid ?? null;\n  } catch (e) {\n    logVerbose(`Failed to parse uuid for anonymous user: ${e as any}`);\n    return null;\n  }\n}\n\nexport function ensureUuidForAnonymousUser(ctx: Context) {\n  const uuid = loadUuidForAnonymousUser(ctx);\n  if (uuid) {\n    return uuid;\n  }\n  const newUuid = crypto.randomUUID();\n  const anonymousDir = rootDeploymentStateDir(\"anonymous\");\n  if (!ctx.fs.exists(anonymousDir)) {\n    ctx.fs.mkdir(anonymousDir, { recursive: true });\n  }\n  ctx.fs.writeUtf8File(\n    path.join(anonymousDir, \"config.json\"),\n    JSON.stringify({ uuid: newUuid }),\n  );\n  return newUuid;\n}\n", "import os from 'node:os';\nimport fs from 'node:fs/promises';\nimport childProcess from 'node:child_process';\n\nconst DEFAULT_RESOLV_FILE = '/etc/resolv.conf';\n\n// osx start line 'en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500'\n// linux start line 'eth0      Link encap:Ethernet  HWaddr 00:16:3E:00:0A:29  '\nconst MAC_OSX_START_LINE = /^(\\w+)\\:\\s+flags=/;\nconst MAC_LINUX_START_LINE = /^(\\w+)\\s{2,}link encap:\\w+/i;\n\n// ether 78:ca:39:b0:e6:7d\n// HWaddr 00:16:3E:00:0A:29\nexport const MAC_RE = /(?:ether|HWaddr)\\s+((?:[a-z0-9]{2}\\:){5}[a-z0-9]{2})/i;\n\n// osx: inet 192.168.2.104 netmask 0xffffff00 broadcast 192.168.2.255\n// linux: inet addr:10.125.5.202  Bcast:10.125.15.255  Mask:255.255.240.0\nexport const MAC_IP_RE = /inet\\s(?:addr\\:)?(\\d+\\.\\d+\\.\\d+\\.\\d+)/;\n\nexport interface Address {\n  ip?: string;\n  ipv6?: string;\n  mac?: string;\n}\n\nexport type AddressCallback = (err: Error | null, addr: Address) => void;\nexport type MacCallback = (err?: Error | null, addr?: string | null) => void;\nexport type DnsCallback = (err?: Error | null, servers?: string[]) => void;\n\nfunction getDefaultInterfaceName() {\n  let val: string | undefined = 'eth';\n  const platform = os.platform();\n  if (platform === 'darwin') {\n    val = 'en';\n  } else if (platform === 'win32') {\n    val = undefined;\n  }\n  return val;\n}\n\nfunction getIfconfigCMD() {\n  if (os.platform() === 'win32') {\n    return 'ipconfig/all';\n  }\n  return '/sbin/ifconfig';\n}\n\n// typeof os.networkInterfaces family is a number (v18.0.0)\n// types: 'IPv4' | 'IPv6' => 4 | 6\n// @see https://github.com/nodejs/node/issues/42861\nfunction matchName(actualFamily: string | number, expectedFamily: string | number) {\n  if (expectedFamily === 'IPv4') {\n    return actualFamily === 'IPv4' || actualFamily === 4;\n  }\n  if (expectedFamily === 'IPv6') {\n    return actualFamily === 'IPv6' || actualFamily === 6;\n  }\n  return actualFamily === expectedFamily;\n}\n\nfunction findAddressFromInterface(items: os.NetworkInterfaceInfo[], expectedFamily: string | number,\n  ignoreLoAddress = false) {\n  let firstMatchItem;\n  for (const item of items) {\n    if (matchName(item.family, expectedFamily)) {\n      if (ignoreLoAddress && item.address.startsWith('127.')) {\n        continue;\n      }\n      if (expectedFamily === 'IPv6') {\n        // find the scopeid = 0 item\n        if (item.scopeid === 0) return item;\n        if (!firstMatchItem) {\n          firstMatchItem = item;\n        }\n      } else {\n        return item;\n      }\n    }\n  }\n  return firstMatchItem;\n}\n\nexport function getInterfaceAddress(family?: string, name?: string) {\n  const interfaces = os.networkInterfaces();\n  const noName = !name;\n  name = name || getDefaultInterfaceName();\n  family = family || 'IPv4';\n  if (name) {\n    for (let i = -1; i < 8; i++) {\n      const interfaceName = name + (i >= 0 ? i : ''); // support 'lo' and 'lo0'\n      const items = interfaces[interfaceName];\n      if (items) {\n        const item = findAddressFromInterface(items, family);\n        if (item) {\n          return item;\n        }\n      }\n    }\n  }\n\n  if (noName) {\n    // filter all loopback or local addresses\n    for (const k in interfaces) {\n      const items = interfaces[k];\n      if (items) {\n        // all 127 addresses are local and should be ignored\n        const item = findAddressFromInterface(items, family, true);\n        if (item) {\n          return item;\n        }\n      }\n    }\n  }\n  return;\n}\n\n/**\n * Get current machine IPv4\n *\n * interfaceName: interface name, default is 'eth' on linux, 'en' on mac os.\n */\nexport function ip(interfaceName?: string) {\n  const item = getInterfaceAddress('IPv4', interfaceName);\n  return item?.address;\n}\n\n/**\n * Get current machine IPv6\n *\n * interfaceName: interface name, default is 'eth' on linux, 'en' on mac os.\n */\nexport function ipv6(interfaceName?: string) {\n  const item = getInterfaceAddress('IPv6', interfaceName);\n  return item?.address;\n}\n\nfunction getMAC(content: string, interfaceName: string, matchIP: string) {\n  const lines = content.split('\\n');\n  for (let i = 0; i < lines.length; i++) {\n    let line = lines[i].trimEnd();\n    const m = MAC_OSX_START_LINE.exec(line) || MAC_LINUX_START_LINE.exec(line);\n    if (!m) {\n      continue;\n    }\n\n    // check interface name\n    const name = m[1];\n    if (name.indexOf(interfaceName) !== 0) {\n      continue;\n    }\n\n    let ip: string | null = null;\n    let mac: string | null = null;\n    let match = MAC_RE.exec(line);\n    if (match) {\n      mac = match[1];\n    }\n\n    i++;\n    // eslint-disable-next-line no-constant-condition\n    while (true) {\n      line = lines[i];\n      if (!line || MAC_OSX_START_LINE.exec(line) || MAC_LINUX_START_LINE.exec(line)) {\n        i--;\n        break; // hit next interface, handle next interface\n      }\n      if (!mac) {\n        match = MAC_RE.exec(line);\n        if (match) {\n          mac = match[1];\n        }\n      }\n\n      if (!ip) {\n        match = MAC_IP_RE.exec(line);\n        if (match) {\n          ip = match[1];\n        }\n      }\n\n      i++;\n    }\n\n    if (ip === matchIP) {\n      return mac;\n    }\n  }\n  return null;\n}\n\n/**\n * Get current machine MAC address\n *\n * interfaceName: name, default is 'eth' on linux, 'en' on mac os.\n */\nexport function mac(callback: MacCallback): void;\nexport function mac(interfaceName: string, callback: MacCallback): void;\nexport function mac(interfaceNameOrCallback: string | MacCallback, callback?: MacCallback) {\n  let interfaceName: string | undefined;\n  if (typeof interfaceNameOrCallback === 'function') {\n    callback = interfaceNameOrCallback;\n  } else {\n    interfaceName = interfaceNameOrCallback;\n  }\n  interfaceName = interfaceName || getDefaultInterfaceName();\n  const item = getInterfaceAddress('IPv4', interfaceName);\n  if (!item) {\n    return callback!();\n  }\n\n  // https://github.com/nodejs/node/issues/13581\n  // bug in node 7.x and <= 8.4.0\n  if (!process.env.CI && (item.mac === 'ff:00:00:00:00:00' || item.mac === '00:00:00:00:00:00')) {\n    // wrong address, ignore it\n    item.mac = '';\n  }\n\n  if (item.mac) {\n    return callback!(null, item.mac);\n  }\n\n  childProcess.exec(getIfconfigCMD(), { timeout: 5000 }, (err, stdout) => {\n    if (err || !stdout) {\n      return callback!(err);\n    }\n\n    if (!interfaceName) {\n      return callback!();\n    }\n    const mac = getMAC(stdout || '', interfaceName, item.address);\n    callback!(null, mac);\n  });\n}\n\n// nameserver 172.24.102.254\nconst DNS_SERVER_RE = /^nameserver\\s+(\\d+\\.\\d+\\.\\d+\\.\\d+)$/i;\n\n/**\n * Get DNS servers.\n *\n * filepath: resolv config file path. default is '/etc/resolv.conf'.\n */\nexport function dns(callback: DnsCallback): void;\nexport function dns(filepath: string, callback: DnsCallback): void;\nexport function dns(filepathOrCallback: string | DnsCallback, callback?: DnsCallback) {\n  let filepath: string | undefined;\n  if (typeof filepathOrCallback === 'function') {\n    callback = filepathOrCallback;\n  } else {\n    filepath = filepathOrCallback;\n  }\n  filepath = filepath || DEFAULT_RESOLV_FILE;\n  fs.readFile(filepath, 'utf8')\n    .then(content => {\n      const servers: string[] = [];\n      content = content || '';\n      const lines = content.split('\\n');\n      for (const line of lines) {\n        const m = DNS_SERVER_RE.exec(line.trim());\n        if (m) {\n          servers.push(m[1]);\n        }\n      }\n      callback!(null, servers);\n    })\n    .catch(err => {\n      callback!(err);\n    });\n}\n\n/**\n * Get all addresses.\n *\n * interfaceName: interface name, default is 'eth' on linux, 'en' on mac os.\n */\nexport function address(callback: AddressCallback): void;\nexport function address(interfaceName: string, callback: AddressCallback): void;\nexport function address(interfaceNameOrCallback: string | AddressCallback, callback?: AddressCallback) {\n  let interfaceName: string | undefined;\n  if (typeof interfaceNameOrCallback === 'function') {\n    callback = interfaceNameOrCallback;\n  } else {\n    interfaceName = interfaceNameOrCallback;\n  }\n\n  const addr: Address = {\n    ip: ip(interfaceName),\n    ipv6: ipv6(interfaceName),\n    mac: undefined,\n  };\n  mac(interfaceName || '', (err?: Error | null, mac?: string | null) => {\n    if (mac) {\n      addr.mac = mac;\n    }\n    callback!(err || null, addr);\n  });\n}\n", "import { address } from './address.js';\n\nexport * from './address.js';\nexport default address;\n", "import { createServer, AddressInfo } from 'node:net';\nimport { debuglog } from 'node:util';\nimport { ip } from 'address';\n\nconst debug = debuglog('detect-port');\n\nexport type DetectPortCallback = (err: Error | null, port?: number) => void;\n\nexport interface PortConfig {\n  port?: number | string;\n  hostname?: string | undefined;\n  callback?: DetectPortCallback;\n}\n\nexport class IPAddressNotAvailableError extends Error {\n  constructor(options?: ErrorOptions) {\n    super('The IP address is not available on this machine', options);\n    this.name = this.constructor.name;\n    Error.captureStackTrace(this, this.constructor);\n  }\n}\n\nexport function detectPort(port?: number | PortConfig | string): Promise<number>;\nexport function detectPort(callback: DetectPortCallback): void;\nexport function detectPort(port: number | PortConfig | string | undefined, callback: DetectPortCallback): void;\nexport function detectPort(port?: number | string | PortConfig | DetectPortCallback, callback?: DetectPortCallback) {\n  let hostname: string | undefined = '';\n\n  if (port && typeof port === 'object') {\n    hostname = port.hostname;\n    callback = port.callback;\n    port = port.port;\n  } else {\n    if (typeof port === 'function') {\n      callback = port;\n      port = void 0;\n    }\n  }\n\n  port = parseInt(port as unknown as string) || 0;\n  let maxPort = port + 10;\n  if (maxPort > 65535) {\n    maxPort = 65535;\n  }\n  debug('detect free port between [%s, %s)', port, maxPort);\n  if (typeof callback === 'function') {\n    return tryListen(port, maxPort, hostname)\n      .then(port => callback(null, port))\n      .catch(callback);\n  }\n  // promise\n  return tryListen(port as number, maxPort, hostname);\n}\n\nasync function handleError(port: number, maxPort: number, hostname?: string) {\n  if (port >= maxPort) {\n    debug('port: %s >= maxPort: %s, give up and use random port', port, maxPort);\n    port = 0;\n    maxPort = 0;\n  }\n  return await tryListen(port, maxPort, hostname);\n}\n\nasync function tryListen(port: number, maxPort: number, hostname?: string): Promise<number> {\n  // use user hostname\n  if (hostname) {\n    try {\n      return await listen(port, hostname);\n    } catch (err: any) {\n      if (err.code === 'EADDRNOTAVAIL') {\n        throw new IPAddressNotAvailableError({ cause: err });\n      }\n      return await handleError(++port, maxPort, hostname);\n    }\n  }\n\n  // 1. check null / undefined\n  try {\n    await listen(port);\n  } catch (err) {\n    // ignore random listening\n    if (port === 0) {\n      throw err;\n    }\n    return await handleError(++port, maxPort, hostname);\n  }\n\n  // 2. check 0.0.0.0\n  try {\n    await listen(port, '0.0.0.0');\n  } catch (err) {\n    return await handleError(++port, maxPort, hostname);\n  }\n\n  // 3. check 127.0.0.1\n  try {\n    await listen(port, '127.0.0.1');\n  } catch (err) {\n    return await handleError(++port, maxPort, hostname);\n  }\n\n  // 4. check localhost\n  try {\n    await listen(port, 'localhost');\n  } catch (err: any) {\n    // if localhost refer to the ip that is not unknown on the machine, you will see the error EADDRNOTAVAIL\n    // https://stackoverflow.com/questions/10809740/listen-eaddrnotavail-error-in-node-js\n    if (err.code !== 'EADDRNOTAVAIL') {\n      return await handleError(++port, maxPort, hostname);\n    }\n  }\n\n  // 5. check current ip\n  try {\n    return await listen(port, ip());\n  } catch (err) {\n    return await handleError(++port, maxPort, hostname);\n  }\n}\n\nfunction listen(port: number, hostname?: string) {\n  const server = createServer();\n\n  return new Promise<number>((resolve, reject) => {\n    server.once('error', err => {\n      debug('listen %s:%s error: %s', hostname, port, err);\n      server.close();\n\n      if ((err as any).code === 'ENOTFOUND') {\n        debug('ignore dns ENOTFOUND error, get free %s:%s', hostname, port);\n        return resolve(port);\n      }\n\n      return reject(err);\n    });\n\n    debug('try listen %d on %s', port, hostname);\n    server.listen(port, hostname, () => {\n      port = (server.address() as AddressInfo).port;\n      debug('get free %s:%s', hostname, port);\n      server.close();\n      return resolve(port);\n    });\n  });\n}\n", "import { debuglog } from 'node:util';\nimport { detectPort } from './detect-port.js';\n\nconst debug = debuglog('detect-port:wait-port');\n\nfunction sleep(ms: number) {\n  return new Promise(resolve => {\n    setTimeout(resolve, ms);\n  });\n}\n\nexport class WaitPortRetryError extends Error {\n  retries: number;\n  count: number;\n\n  constructor(message: string, retries: number, count: number, options?: ErrorOptions) {\n    super(message, options);\n    this.name = this.constructor.name;\n    this.retries = retries;\n    this.count = count;\n    Error.captureStackTrace(this, this.constructor);\n  }\n}\n\nexport interface WaitPortOptions {\n  retryInterval?: number;\n  retries?: number;\n}\n\nexport async function waitPort(port: number, options: WaitPortOptions = {}) {\n  const { retryInterval = 1000, retries = Infinity } = options;\n  let count = 1;\n\n  async function loop() {\n    debug('wait port %d, retries %d, count %d', port, retries, count);\n    if (count > retries) {\n      const err = new WaitPortRetryError('retries exceeded', retries, count);\n      throw err;\n    }\n    count++;\n    const freePort = await detectPort(port);\n    if (freePort === port) {\n      await sleep(retryInterval);\n      return loop();\n    }\n    return true;\n  }\n\n  return await loop();\n}\n", "import { detectPort } from './detect-port.js';\n\nexport default detectPort;\n\nexport * from './detect-port.js';\n// keep alias detectPort to detect\nexport const detect = detectPort;\n\nexport * from './wait-port.js';\n", "import { Context } from \"../../../bundler/context.js\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport { detect } from \"detect-port\";\nimport { chalkStderr } from \"chalk\";\n\nexport async function choosePorts(\n  ctx: Context,\n  {\n    count,\n    requestedPorts,\n    suggestedPorts,\n    startPort,\n  }: {\n    count: number;\n    /** Ports that must mandatorily be used when provided. */\n    requestedPorts?: Array<number | null>;\n    /** Ports that will be tried preferentially when provided, but are not required. */\n    suggestedPorts?: Array<number | null>;\n    startPort: number;\n  },\n): Promise<Array<number>> {\n  const ports: Array<number> = [];\n  for (let i = 0; i < count; i++) {\n    const requestedPort = requestedPorts?.[i];\n    if (requestedPort !== null) {\n      const port = await detect(requestedPort);\n      if (port !== requestedPort) {\n        return ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Requested port ${requestedPort} is not available`,\n        });\n      }\n      ports.push(port);\n    } else {\n      const suggestedPort = suggestedPorts?.[ports.length] ?? null;\n      if (suggestedPort !== null) {\n        const port = await detect(suggestedPort);\n        if (port === suggestedPort) {\n          ports.push(suggestedPort);\n          continue;\n        }\n      }\n\n      const portToTry =\n        ports.length > 0 ? ports[ports.length - 1] + 1 : startPort;\n      const port = await detect(portToTry);\n      ports.push(port);\n    }\n  }\n  return ports;\n}\n\nexport async function chooseLocalBackendPorts(\n  ctx: Context,\n  options?: {\n    suggestedPorts?:\n      | { cloud?: number | undefined; site?: number | undefined }\n      | undefined;\n    requestedPorts?:\n      | { cloud?: number | undefined; site?: number | undefined }\n      | undefined;\n  },\n): Promise<{ cloudPort: number; sitePort: number }> {\n  const { suggestedPorts, requestedPorts } = options ?? {};\n\n  const [cloudPort, sitePort] = await choosePorts(ctx, {\n    count: 2,\n    startPort: 3210,\n    requestedPorts: [\n      requestedPorts?.cloud ?? null,\n      requestedPorts?.site ?? null,\n    ],\n    suggestedPorts: [\n      suggestedPorts?.cloud ?? null,\n      suggestedPorts?.site ?? null,\n    ],\n  });\n  return { cloudPort, sitePort };\n}\n\nexport function printLocalDeploymentWelcomeMessage() {\n  logMessage(\n    chalkStderr.cyan(\"You're trying out the beta local deployment feature!\"),\n  );\n  logMessage(\n    chalkStderr.cyan(\n      \"To learn more, read the docs: https://docs.convex.dev/cli/local-deployments\",\n    ),\n  );\n}\n\nexport const LOCAL_BACKEND_INSTANCE_SECRET =\n  \"4361726e697461732c206c69746572616c6c79206d65616e696e6720226c6974\";\n\n// Backend releases are tagged `precompiled-YYYY-MM-DD-<commit>`, so the dates\n// sort lexicographically.\nexport function releaseDate(version: string): string | null {\n  return /^precompiled-(\\d{4}-\\d{2}-\\d{2})-/.exec(version)?.[1] ?? null;\n}\n\nexport function isValidBackendVersion(version: string): boolean {\n  return /^precompiled-\\d{4}-\\d{2}-\\d{2}-[\\w.-]+$/.test(version);\n}\n", "import http from \"node:http\";\nimport { Context } from \"../../../bundler/context.js\";\nimport { logVerbose } from \"../../../bundler/log.js\";\n\n// The below is adapted from https://github.com/vercel/serve/blob/main/source/utilities/server.ts\n// MIT License -- https://github.com/vercel/serve/blob/main/license.md\n// Copyright (c) 2023 Vercel, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// This has been pared down to only support running locally. It removed options\n// we're not using, and added Convex-CLI specific cleanup handling.\nexport const startServer = async (\n  ctx: Context,\n  port: number,\n  handler: (\n    request: http.IncomingMessage,\n    response: http.ServerResponse,\n  ) => Promise<void>,\n  options: {\n    cors?: boolean;\n  },\n): Promise<{ cleanupHandle: string }> => {\n  // Define the request handler for the server.\n  const serverHandler = (request: any, response: any): void => {\n    // We can't return a promise in a HTTP request handler, so we run our code\n    // inside an async function instead.\n    const run = async () => {\n      if (options.cors) {\n        response.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n        response.setHeader(\"Access-Control-Allow-Headers\", \"*\");\n        response.setHeader(\"Access-Control-Allow-Credentials\", \"true\");\n        response.setHeader(\"Access-Control-Allow-Private-Network\", \"true\");\n      }\n      // TODO -- consider adding support for compression\n      // if (!args['--no-compression'])\n      //   await compress(request as ExpressRequest, response as ExpressResponse);\n\n      await handler(request, response);\n    };\n\n    // Then we run the async function, and log any errors.\n    // TODO: consider adding a `onError` callback in case we want different error\n    // handling.\n    run().catch((error: Error) => {\n      logVerbose(\n        `Failed to serve: ${error.stack?.toString() ?? error.message}`,\n      );\n    });\n  };\n\n  const server = http.createServer(serverHandler);\n  const cleanupHandle = ctx.registerCleanup(async () => {\n    logVerbose(`Stopping server on port ${port}`);\n    await server.close();\n  });\n\n  // Listen for any error that occurs while serving, and throw an error\n  // if any errors are received.\n  server.on(\"error\", (error) => {\n    logVerbose(`Failed to serve: ${error.stack?.toString() ?? error.message}`);\n  });\n\n  // Finally, start the server -- this promise resolves once the server has started.\n  await new Promise((resolve, _reject) => {\n    server.listen(port, `127.0.0.1`, () => resolve(`http://127.0.0.1:${port}`));\n  });\n  return { cleanupHandle };\n};\n", "module.exports = {\n    /* The local file header */\n    LOCHDR           : 30, // LOC header size\n    LOCSIG           : 0x04034b50, // \"PK\\003\\004\"\n    LOCVER           : 4,\t// version needed to extract\n    LOCFLG           : 6, // general purpose bit flag\n    LOCHOW           : 8, // compression method\n    LOCTIM           : 10, // modification time (2 bytes time, 2 bytes date)\n    LOCCRC           : 14, // uncompressed file crc-32 value\n    LOCSIZ           : 18, // compressed size\n    LOCLEN           : 22, // uncompressed size\n    LOCNAM           : 26, // filename length\n    LOCEXT           : 28, // extra field length\n\n    /* The Data descriptor */\n    EXTSIG           : 0x08074b50, // \"PK\\007\\008\"\n    EXTHDR           : 16, // EXT header size\n    EXTCRC           : 4, // uncompressed file crc-32 value\n    EXTSIZ           : 8, // compressed size\n    EXTLEN           : 12, // uncompressed size\n\n    /* The central directory file header */\n    CENHDR           : 46, // CEN header size\n    CENSIG           : 0x02014b50, // \"PK\\001\\002\"\n    CENVEM           : 4, // version made by\n    CENVER           : 6, // version needed to extract\n    CENFLG           : 8, // encrypt, decrypt flags\n    CENHOW           : 10, // compression method\n    CENTIM           : 12, // modification time (2 bytes time, 2 bytes date)\n    CENCRC           : 16, // uncompressed file crc-32 value\n    CENSIZ           : 20, // compressed size\n    CENLEN           : 24, // uncompressed size\n    CENNAM           : 28, // filename length\n    CENEXT           : 30, // extra field length\n    CENCOM           : 32, // file comment length\n    CENDSK           : 34, // volume number start\n    CENATT           : 36, // internal file attributes\n    CENATX           : 38, // external file attributes (host system dependent)\n    CENOFF           : 42, // LOC header offset\n\n    /* The entries in the end of central directory */\n    ENDHDR           : 22, // END header size\n    ENDSIG           : 0x06054b50, // \"PK\\005\\006\"\n    ENDSUB           : 8, // number of entries on this disk\n    ENDTOT           : 10, // total number of entries\n    ENDSIZ           : 12, // central directory size in bytes\n    ENDOFF           : 16, // offset of first CEN header\n    ENDCOM           : 20, // zip file comment length\n\n    END64HDR         : 20, // zip64 END header size\n    END64SIG         : 0x07064b50, // zip64 Locator signature, \"PK\\006\\007\"\n    END64START       : 4, // number of the disk with the start of the zip64\n    END64OFF         : 8, // relative offset of the zip64 end of central directory\n    END64NUMDISKS    : 16, // total number of disks\n\n    ZIP64SIG         : 0x06064b50, // zip64 signature, \"PK\\006\\006\"\n    ZIP64HDR         : 56, // zip64 record minimum size\n    ZIP64LEAD        : 12, // leading bytes at the start of the record, not counted by the value stored in ZIP64SIZE\n    ZIP64SIZE        : 4, // zip64 size of the central directory record\n    ZIP64VEM         : 12, // zip64 version made by\n    ZIP64VER         : 14, // zip64 version needed to extract\n    ZIP64DSK         : 16, // zip64 number of this disk\n    ZIP64DSKDIR      : 20, // number of the disk with the start of the record directory\n    ZIP64SUB         : 24, // number of entries on this disk\n    ZIP64TOT         : 32, // total number of entries\n    ZIP64SIZB        : 40, // zip64 central directory size in bytes\n    ZIP64OFF         : 48, // offset of start of central directory with respect to the starting disk number\n    ZIP64EXTRA       : 56, // extensible data sector\n\n    /* Compression methods */\n    STORED           : 0, // no compression\n    SHRUNK           : 1, // shrunk\n    REDUCED1         : 2, // reduced with compression factor 1\n    REDUCED2         : 3, // reduced with compression factor 2\n    REDUCED3         : 4, // reduced with compression factor 3\n    REDUCED4         : 5, // reduced with compression factor 4\n    IMPLODED         : 6, // imploded\n    // 7 reserved for Tokenizing compression algorithm\n    DEFLATED         : 8, // deflated\n    ENHANCED_DEFLATED: 9, // enhanced deflated\n    PKWARE           : 10,// PKWare DCL imploded\n    // 11 reserved by PKWARE\n    BZIP2            : 12, //  compressed using BZIP2\n    // 13 reserved by PKWARE\n    LZMA             : 14, // LZMA\n    // 15-17 reserved by PKWARE\n    IBM_TERSE        : 18, // compressed using IBM TERSE\n    IBM_LZ77         : 19, // IBM LZ77 z\n    AES_ENCRYPT      : 99, // WinZIP AES encryption method\n\n    /* General purpose bit flag */\n    // values can obtained with expression 2**bitnr\n    FLG_ENC          : 1,    // Bit 0: encrypted file\n    FLG_COMP1        : 2,    // Bit 1, compression option\n    FLG_COMP2        : 4,    // Bit 2, compression option\n    FLG_DESC         : 8,    // Bit 3, data descriptor\n    FLG_ENH          : 16,   // Bit 4, enhanced deflating\n    FLG_PATCH        : 32,   // Bit 5, indicates that the file is compressed patched data.\n    FLG_STR          : 64,   // Bit 6, strong encryption (patented)\n                             // Bits 7-10: Currently unused.\n    FLG_EFS          : 2048, // Bit 11: Language encoding flag (EFS)\n                             // Bit 12: Reserved by PKWARE for enhanced compression.\n                             // Bit 13: encrypted the Central Directory (patented).\n                             // Bits 14-15: Reserved by PKWARE.\n    FLG_MSK          : 4096, // mask header values\n\n    /* Load type */\n    FILE             : 2,\n    BUFFER           : 1,\n    NONE             : 0,\n\n    /* 4.5 Extensible data fields */\n    EF_ID            : 0,\n    EF_SIZE          : 2,\n\n    /* Header IDs */\n    ID_ZIP64         : 0x0001,\n    ID_AVINFO        : 0x0007,\n    ID_PFS           : 0x0008,\n    ID_OS2           : 0x0009,\n    ID_NTFS          : 0x000a,\n    ID_OPENVMS       : 0x000c,\n    ID_UNIX          : 0x000d,\n    ID_FORK          : 0x000e,\n    ID_PATCH         : 0x000f,\n    ID_X509_PKCS7    : 0x0014,\n    ID_X509_CERTID_F : 0x0015,\n    ID_X509_CERTID_C : 0x0016,\n    ID_STRONGENC     : 0x0017,\n    ID_RECORD_MGT    : 0x0018,\n    ID_X509_PKCS7_RL : 0x0019,\n    ID_IBM1          : 0x0065,\n    ID_IBM2          : 0x0066,\n    ID_POSZIP        : 0x4690,\n\n    EF_ZIP64_OR_32   : 0xffffffff,\n    EF_ZIP64_OR_16   : 0xffff,\n    EF_ZIP64_SUNCOMP : 0,\n    EF_ZIP64_SCOMP   : 8,\n    EF_ZIP64_RHO     : 16,\n    EF_ZIP64_DSN     : 24\n};\n", "const errors = {\n    /* Header error messages */\n    INVALID_LOC: \"Invalid LOC header (bad signature)\",\n    INVALID_CEN: \"Invalid CEN header (bad signature)\",\n    INVALID_END: \"Invalid END header (bad signature)\",\n\n    /* Descriptor */\n    DESCRIPTOR_NOT_EXIST: \"No descriptor present\",\n    DESCRIPTOR_UNKNOWN: \"Unknown descriptor format\",\n    DESCRIPTOR_FAULTY: \"Descriptor data is malformed\",\n\n    /* ZipEntry error messages*/\n    NO_DATA: \"Nothing to decompress\",\n    BAD_CRC: \"CRC32 checksum failed {0}\",\n    MAX_OUTPUT_EXCEEDED: \"Decompressed data exceeds the declared uncompressed size\",\n    FILE_IN_THE_WAY: \"There is a file in the way: {0}\",\n    UNKNOWN_METHOD: \"Invalid/unsupported compression method\",\n\n    /* Inflater error messages */\n    AVAIL_DATA: \"inflate::Available inflate data did not terminate\",\n    INVALID_DISTANCE: \"inflate::Invalid literal/length or distance code in fixed or dynamic block\",\n    TO_MANY_CODES: \"inflate::Dynamic block code description: too many length or distance codes\",\n    INVALID_REPEAT_LEN: \"inflate::Dynamic block code description: repeat more than specified lengths\",\n    INVALID_REPEAT_FIRST: \"inflate::Dynamic block code description: repeat lengths with no first length\",\n    INCOMPLETE_CODES: \"inflate::Dynamic block code description: code lengths codes incomplete\",\n    INVALID_DYN_DISTANCE: \"inflate::Dynamic block code description: invalid distance code lengths\",\n    INVALID_CODES_LEN: \"inflate::Dynamic block code description: invalid literal/length code lengths\",\n    INVALID_STORE_BLOCK: \"inflate::Stored block length did not match one's complement\",\n    INVALID_BLOCK_TYPE: \"inflate::Invalid block type (type == 3)\",\n\n    /* ADM-ZIP error messages */\n    CANT_EXTRACT_FILE: \"Could not extract the file\",\n    CANT_OVERRIDE: \"Target file already exists\",\n    DISK_ENTRY_TOO_LARGE: \"Number of disk entries is too large\",\n    NO_ZIP: \"No zip file was loaded\",\n    NO_ENTRY: \"Entry doesn't exist\",\n    DUPLICATE_ENTRY: \"Duplicate entry name {0}\",\n    DIRECTORY_CONTENT_ERROR: \"A directory cannot have content\",\n    FILE_NOT_FOUND: 'File not found: \"{0}\"',\n    NOT_IMPLEMENTED: \"Not implemented\",\n    INVALID_FILENAME: \"Invalid filename\",\n    INVALID_FORMAT: \"Invalid or unsupported zip format. No END header found\",\n    ZIP64_VALUE_TOO_LARGE: \"Zip64 value exceeds the maximum safe integer\",\n    INVALID_PASS_PARAM: \"Incompatible password parameter\",\n    WRONG_PASSWORD: \"Wrong Password\",\n\n    /* ADM-ZIP */\n    COMMENT_TOO_LONG: \"Comment is too long\", // Comment can be max 65535 bytes long (NOTE: some non-US characters may take more space)\n    EXTRA_FIELD_PARSE_ERROR: \"Extra field parsing error\"\n};\n\n// template\nfunction E(message) {\n    return function (...args) {\n        if (args.length) { // Allow {0} .. {9} arguments in error message, based on argument number\n            message = message.replace(/\\{(\\d)\\}/g, (_, n) => args[n] || '');\n        }\n\n        return new Error('ADM-ZIP: ' + message);\n    };\n}\n\n// Init errors with template\nfor (const msg of Object.keys(errors)) {\n    exports[msg] = E(errors[msg]);\n}\n", "const fsystem = require(\"fs\");\nconst pth = require(\"path\");\nconst Constants = require(\"./constants\");\nconst Errors = require(\"./errors\");\nconst isWin = typeof process === \"object\" && \"win32\" === process.platform;\n\nconst is_Obj = (obj) => typeof obj === \"object\" && obj !== null;\n\n// generate CRC32 lookup table\nconst crcTable = new Uint32Array(256).map((t, c) => {\n    for (let k = 0; k < 8; k++) {\n        if ((c & 1) !== 0) {\n            c = 0xedb88320 ^ (c >>> 1);\n        } else {\n            c >>>= 1;\n        }\n    }\n    return c >>> 0;\n});\n\n// UTILS functions\n\nfunction Utils(opts) {\n    this.sep = pth.sep;\n    this.fs = fsystem;\n\n    if (is_Obj(opts)) {\n        // custom filesystem\n        if (is_Obj(opts.fs) && typeof opts.fs.statSync === \"function\") {\n            this.fs = opts.fs;\n        }\n    }\n}\n\nmodule.exports = Utils;\n\n// INSTANTIABLE functions\n\nUtils.prototype.makeDir = function (/*String*/ folder) {\n    const self = this;\n\n    // Sync - make directories tree\n    function mkdirSync(/*String*/ fpath) {\n        let resolvedPath = fpath.split(self.sep)[0];\n        fpath.split(self.sep).forEach(function (name) {\n            if (!name || name.substr(-1, 1) === \":\") return;\n            resolvedPath += self.sep + name;\n            var stat;\n            try {\n                stat = self.fs.statSync(resolvedPath);\n            } catch (e) {\n                if (e.message && e.message.startsWith('ENOENT')) {\n                    self.fs.mkdirSync(resolvedPath);\n                } else {\n                    throw e;\n                }\n            }\n            if (stat && stat.isFile()) throw Errors.FILE_IN_THE_WAY(`\"${resolvedPath}\"`);\n        });\n    }\n\n    mkdirSync(folder);\n};\n\nUtils.prototype.writeFileTo = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr) {\n    const self = this;\n    if (self.fs.existsSync(path)) {\n        if (!overwrite) return false; // cannot overwrite\n\n        var stat = self.fs.statSync(path);\n        if (stat.isDirectory()) {\n            return false;\n        }\n    }\n    var folder = pth.dirname(path);\n    if (!self.fs.existsSync(folder)) {\n        self.makeDir(folder);\n    }\n\n    var fd;\n    try {\n        fd = self.fs.openSync(path, \"w\", 0o666); // 0666\n    } catch (e) {\n        self.fs.chmodSync(path, 0o666);\n        fd = self.fs.openSync(path, \"w\", 0o666);\n    }\n    if (fd) {\n        try {\n            self.fs.writeSync(fd, content, 0, content.length, 0);\n        } finally {\n            self.fs.closeSync(fd);\n        }\n    }\n    self.fs.chmodSync(path, attr || 0o666);\n    return true;\n};\n\nUtils.prototype.writeFileToAsync = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr, /*Function*/ callback) {\n    if (typeof attr === \"function\") {\n        callback = attr;\n        attr = undefined;\n    }\n\n    const self = this;\n\n    self.fs.exists(path, function (exist) {\n        if (exist && !overwrite) return callback(false);\n\n        self.fs.stat(path, function (err, stat) {\n            if (exist && stat && stat.isDirectory()) {\n                return callback(false);\n            }\n\n            var folder = pth.dirname(path);\n            self.fs.exists(folder, function (exists) {\n                if (!exists) {\n                    // makeDir is synchronous and can throw (e.g. EACCES); report failure\n                    // rather than letting it escape this callback as an uncaught exception\n                    try {\n                        self.makeDir(folder);\n                    } catch (e) {\n                        return callback(false);\n                    }\n                }\n\n                // write the content to an open descriptor, then apply the attributes\n                const writeToFd = function (fd) {\n                    self.fs.write(fd, content, 0, content.length, 0, function (writeErr) {\n                        self.fs.close(fd, function () {\n                            // surface write failures instead of silently reporting success (issue #402)\n                            if (writeErr) return callback(false);\n                            self.fs.chmod(path, attr || 0o666, function () {\n                                callback(true);\n                            });\n                        });\n                    });\n                };\n\n                self.fs.open(path, \"w\", 0o666, function (err, fd) {\n                    if (err) {\n                        // the target may exist but be read-only: make it writable and retry once\n                        self.fs.chmod(path, 0o666, function () {\n                            self.fs.open(path, \"w\", 0o666, function (retryErr, fd) {\n                                // Previously the retry error was ignored and an undefined fd was\n                                // passed to fs.write, throwing an uncaught ERR_INVALID_ARG_TYPE that\n                                // crashed the process (issues #470, #459, #402). Report failure instead.\n                                if (retryErr || !fd) return callback(false);\n                                writeToFd(fd);\n                            });\n                        });\n                    } else if (fd) {\n                        writeToFd(fd);\n                    } else {\n                        callback(false);\n                    }\n                });\n            });\n        });\n    });\n};\n\n// Guard extraction against writing through a symlink that already exists inside\n// the target directory. sanitize() only proves the textual path stays under the\n// root; it cannot see that a component on disk is a symlink pointing elsewhere,\n// so open()/mkdir() would follow it and write outside the root. Walk every path\n// component strictly below root and reject any that is a symlink. Components at\n// or above root are the caller's own choice and are left untouched, so a root\n// that itself lives under a symlink (e.g. /tmp on macOS) still extracts.\nUtils.prototype.assertPathSafe = function (/*String*/ root, /*String*/ target) {\n    const self = this;\n    if (typeof self.fs.lstatSync !== \"function\") return;\n\n    const resolvedRoot = pth.resolve(root);\n    const resolvedTarget = pth.resolve(target);\n    if (resolvedTarget === resolvedRoot) return;\n\n    const rel = pth.relative(resolvedRoot, resolvedTarget);\n    // Not under root: sanitize() is responsible for that case; nothing to walk.\n    if (!rel || rel === \"..\" || rel.startsWith(\"..\" + pth.sep) || pth.isAbsolute(rel)) return;\n\n    let cur = resolvedRoot;\n    for (const part of rel.split(pth.sep)) {\n        if (!part || part === \".\") continue;\n        cur = pth.join(cur, part);\n        let stat;\n        try {\n            stat = self.fs.lstatSync(cur);\n        } catch (e) {\n            break; // component does not exist yet: nothing below it can be a symlink\n        }\n        if (stat.isSymbolicLink()) throw Errors.FILE_IN_THE_WAY(`\"${cur}\"`);\n    }\n};\n\nUtils.prototype.findFiles = function (/*String*/ path) {\n    const self = this;\n    const canLstat = typeof self.fs.lstatSync === \"function\";\n    const rootReal = self.fs.realpathSync(path);\n\n    // A symlink whose target lies outside the folder being archived must not be\n    // followed: statSync would dereference it and copy the target's contents into\n    // the archive, disclosing files outside the root (GHSA-wx42-xcp7-pgr4). Allow\n    // symlinks that resolve to a location inside the root, reject any that escape.\n    function escapesRoot(/*String*/ p) {\n        if (!canLstat) return false;\n        if (!self.fs.lstatSync(p).isSymbolicLink()) return false;\n        let real;\n        try {\n            real = self.fs.realpathSync(p);\n        } catch (e) {\n            return true; // dangling or unresolvable symlink: do not follow\n        }\n        return !(real === rootReal || real.startsWith(rootReal + pth.sep));\n    }\n\n    function findSync(/*String*/ dir, /*RegExp*/ pattern, /*Boolean*/ recursive, /*Set*/ visited) {\n        if (typeof pattern === \"boolean\") {\n            recursive = pattern;\n            pattern = undefined;\n        }\n        let files = [];\n        self.fs.readdirSync(dir).forEach(function (file) {\n            const path = pth.join(dir, file);\n\n            if (escapesRoot(path)) return;\n\n            const stat = self.fs.statSync(path);\n\n            if (!pattern || pattern.test(path)) {\n                files.push(pth.normalize(path) + (stat.isDirectory() ? self.sep : \"\"));\n            }\n\n            if (stat.isDirectory() && recursive) {\n                // Descend by resolved real path and skip directories we have already\n                // visited. This stops a symlink that points back to an ancestor from\n                // recursing forever until the path fails with ELOOP / ENAMETOOLONG\n                // (issue #541).\n                const realDir = self.fs.realpathSync(path);\n                if (!visited.has(realDir)) {\n                    visited.add(realDir);\n                    files = files.concat(findSync(path, pattern, recursive, visited));\n                }\n            }\n        });\n        return files;\n    }\n\n    return findSync(path, undefined, true, new Set([rootReal]));\n};\n\n/**\n * Callback for showing if everything was done.\n *\n * @callback filelistCallback\n * @param {Error} err - Error object\n * @param {string[]} list - was request fully completed\n */\n\n/**\n *\n * @param {string} dir\n * @param {filelistCallback} cb\n */\nUtils.prototype.findFilesAsync = function (dir, cb) {\n    const self = this;\n    const results = [];\n    let finished = false;\n    const finish = function (err) {\n        if (finished) return;\n        finished = true;\n        cb(err, err ? undefined : results);\n    };\n\n    const canLstat = typeof self.fs.lstat === \"function\";\n    let rootReal = null;\n\n    // Reject a symlink whose target escapes the root being archived, so its\n    // contents are not dereferenced and copied into the archive\n    // (GHSA-wx42-xcp7-pgr4). A symlink resolving to a location inside the root is\n    // allowed; a dangling or escaping one is skipped. Calls back (err, escapes).\n    const escapesRoot = function (file, cb) {\n        if (!canLstat) return cb(null, false);\n        self.fs.lstat(file, function (err, lst) {\n            if (err) return cb(err);\n            if (!lst || !lst.isSymbolicLink()) return cb(null, false);\n            self.fs.realpath(file, function (err, real) {\n                if (err) return cb(null, true); // dangling: do not follow\n                cb(null, !(real === rootReal || real.startsWith(rootReal + pth.sep)));\n            });\n        });\n    };\n\n    // Descend by resolved real path and skip directories already visited, so a\n    // symlink pointing back to an ancestor cannot recurse forever (issue #541).\n    const walk = function (dir, visited, done) {\n        self.fs.readdir(dir, function (err, list) {\n            if (err) return done(err);\n            let pending = list.length;\n            if (!pending) return done();\n            list.forEach(function (name) {\n                const file = pth.join(dir, name);\n                escapesRoot(file, function (err, escapes) {\n                    if (err) return done(err);\n                    if (escapes) {\n                        if (!--pending) done();\n                        return;\n                    }\n                    self.fs.stat(file, function (err, stat) {\n                        if (err) return done(err);\n                        if (!stat) {\n                            if (!--pending) done();\n                            return;\n                        }\n                        results.push(pth.normalize(file) + (stat.isDirectory() ? self.sep : \"\"));\n                        if (!stat.isDirectory()) {\n                            if (!--pending) done();\n                            return;\n                        }\n                        self.fs.realpath(file, function (err, realDir) {\n                            if (err) return done(err);\n                            if (visited.has(realDir)) {\n                                if (!--pending) done();\n                                return;\n                            }\n                            visited.add(realDir);\n                            walk(file, visited, function (err) {\n                                if (err) return done(err);\n                                if (!--pending) done();\n                            });\n                        });\n                    });\n                });\n            });\n        });\n    };\n\n    self.fs.realpath(dir, function (err, realDir) {\n        if (err) return finish(err);\n        rootReal = realDir;\n        walk(dir, new Set([realDir]), finish);\n    });\n};\n\nUtils.prototype.getAttributes = function () {};\n\nUtils.prototype.setAttributes = function () {};\n\n// STATIC functions\n\n// crc32 single update (it is part of crc32)\nUtils.crc32update = function (crc, byte) {\n    return crcTable[(crc ^ byte) & 0xff] ^ (crc >>> 8);\n};\n\nUtils.crc32 = function (buf) {\n    if (typeof buf === \"string\") {\n        buf = Buffer.from(buf, \"utf8\");\n    }\n\n    let len = buf.length;\n    let crc = ~0;\n    for (let off = 0; off < len; ) crc = Utils.crc32update(crc, buf[off++]);\n    // xor and cast as uint32 number\n    return ~crc >>> 0;\n};\n\nUtils.methodToString = function (/*Number*/ method) {\n    switch (method) {\n        case Constants.STORED:\n            return \"STORED (\" + method + \")\";\n        case Constants.DEFLATED:\n            return \"DEFLATED (\" + method + \")\";\n        default:\n            return \"UNSUPPORTED (\" + method + \")\";\n    }\n};\n\n/**\n * removes \"..\" style path elements\n * @param {string} path - fixable path\n * @returns string - fixed filepath\n */\nUtils.canonical = function (/*string*/ path) {\n    if (!path) return \"\";\n    // trick normalize think path is absolute\n    const safeSuffix = pth.posix.normalize(\"/\" + path.split(\"\\\\\").join(\"/\"));\n    return pth.join(\".\", safeSuffix);\n};\n\n/**\n * fix file names in achive\n * @param {string} path - fixable path\n * @returns string - fixed filepath\n */\n\nUtils.zipnamefix = function (path) {\n    if (!path) return \"\";\n    // trick normalize think path is absolute\n    const safeSuffix = pth.posix.normalize(\"/\" + path.split(\"\\\\\").join(\"/\"));\n    return pth.posix.join(\".\", safeSuffix);\n};\n\n/**\n *\n * @param {Array} arr\n * @param {function} callback\n * @returns\n */\nUtils.findLast = function (arr, callback) {\n    if (!Array.isArray(arr)) throw new TypeError(\"arr is not array\");\n\n    const len = arr.length >>> 0;\n    for (let i = len - 1; i >= 0; i--) {\n        if (callback(arr[i], i, arr)) {\n            return arr[i];\n        }\n    }\n    return void 0;\n};\n\n// make absolute paths taking prefix as root folder\nUtils.sanitize = function (/*string*/ prefix, /*string*/ name) {\n    prefix = pth.resolve(pth.normalize(prefix));\n    var parts = name.split(\"/\");\n    for (var i = 0, l = parts.length; i < l; i++) {\n        var path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));\n        if (path === prefix || path.startsWith(prefix + pth.sep)) {\n            return path;\n        }\n    }\n    return pth.normalize(pth.join(prefix, pth.basename(name)));\n};\n\n// converts buffer, Uint8Array, string types to buffer\nUtils.toBuffer = function toBuffer(/*buffer, Uint8Array, string*/ input, /* function */ encoder) {\n    if (Buffer.isBuffer(input)) {\n        return input;\n    } else if (input instanceof Uint8Array) {\n        return Buffer.from(input);\n    } else {\n        // expect string all other values are invalid and return empty buffer\n        return typeof input === \"string\" ? encoder(input) : Buffer.alloc(0);\n    }\n};\n\nUtils.readBigUInt64LE = function (/*Buffer*/ buffer, /*int*/ index) {\n    const lo = buffer.readUInt32LE(index);\n    const hi = buffer.readUInt32LE(index + 4);\n    const value = hi * 0x100000000 + lo;\n    // The result is a JS number, so values above 2^53 - 1 cannot be represented\n    // exactly. These are zip64 sizes/offsets/counts used as buffer indices; a\n    // silently rounded value would misparse the archive. Reject instead.\n    if (value > Number.MAX_SAFE_INTEGER) {\n        throw Errors.ZIP64_VALUE_TOO_LARGE();\n    }\n    return value;\n};\n\nUtils.writeBigUInt64LE = function (/*Buffer*/ buffer, /*Number*/ value, /*int*/ index) {\n    const lo = value >>> 0;\n    const hi = Math.floor(value / 0x100000000) >>> 0;\n    buffer.writeUInt32LE(lo, index);\n    buffer.writeUInt32LE(hi, index + 4);\n};\n\nUtils.fromDOS2Date = function (val) {\n    return new Date(((val >> 25) & 0x7f) + 1980, Math.max(((val >> 21) & 0x0f) - 1, 0), Math.max((val >> 16) & 0x1f, 1), (val >> 11) & 0x1f, (val >> 5) & 0x3f, (val & 0x1f) << 1);\n};\n\nUtils.fromDate2DOS = function (val) {\n    let date = 0;\n    let time = 0;\n    if (val.getFullYear() > 1979) {\n        date = (((val.getFullYear() - 1980) & 0x7f) << 9) | ((val.getMonth() + 1) << 5) | val.getDate();\n        time = (val.getHours() << 11) | (val.getMinutes() << 5) | (val.getSeconds() >> 1);\n    }\n    return (date << 16) | time;\n};\n\nUtils.isWin = isWin; // Do we have windows system\nUtils.crcTable = crcTable;\n", "const pth = require(\"path\");\n\nmodule.exports = function (/*String*/ path, /*Utils object*/ { fs }) {\n    var _path = path || \"\",\n        _obj = newAttr(),\n        _stat = null;\n\n    function newAttr() {\n        return {\n            directory: false,\n            readonly: false,\n            hidden: false,\n            executable: false,\n            mtime: 0,\n            atime: 0\n        };\n    }\n\n    if (_path && fs.existsSync(_path)) {\n        _stat = fs.statSync(_path);\n        _obj.directory = _stat.isDirectory();\n        _obj.mtime = _stat.mtime;\n        _obj.atime = _stat.atime;\n        _obj.executable = (0o111 & _stat.mode) !== 0; // file is executable who ever har right not just owner\n        _obj.readonly = (0o200 & _stat.mode) === 0; // readonly if owner has no write right\n        _obj.hidden = pth.basename(_path)[0] === \".\";\n    } else {\n        console.warn(\"Invalid path: \" + _path);\n    }\n\n    return {\n        get directory() {\n            return _obj.directory;\n        },\n\n        get readOnly() {\n            return _obj.readonly;\n        },\n\n        get hidden() {\n            return _obj.hidden;\n        },\n\n        get mtime() {\n            return _obj.mtime;\n        },\n\n        get atime() {\n            return _obj.atime;\n        },\n\n        get executable() {\n            return _obj.executable;\n        },\n\n        decodeAttributes: function () {},\n\n        encodeAttributes: function () {},\n\n        toJSON: function () {\n            return {\n                path: _path,\n                isDirectory: _obj.directory,\n                isReadOnly: _obj.readonly,\n                isHidden: _obj.hidden,\n                isExecutable: _obj.executable,\n                mTime: _obj.mtime,\n                aTime: _obj.atime\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n", "module.exports = {\n    efs: true,\n    encode: (data) => Buffer.from(data, \"utf8\"),\n    decode: (data) => data.toString(\"utf8\")\n};\n", "module.exports = require(\"./utils\");\nmodule.exports.Constants = require(\"./constants\");\nmodule.exports.Errors = require(\"./errors\");\nmodule.exports.FileAttr = require(\"./fattr\");\nmodule.exports.decoder = require(\"./decoder\");\n", "var Utils = require(\"../util\"),\n    Constants = Utils.Constants;\n\n/* The central directory file header */\nmodule.exports = function () {\n    var _verMade = 20, // v2.0\n        _version = 10, // v1.0\n        _flags = 0,\n        _method = 0,\n        _time = 0,\n        _crc = 0,\n        _compressedSize = 0,\n        _size = 0,\n        _fnameLen = 0,\n        _extraLen = 0,\n        _comLen = 0,\n        _diskStart = 0,\n        _inattr = 0,\n        _attr = 0,\n        _offset = 0;\n\n    _verMade |= Utils.isWin ? 0x0a00 : 0x0300;\n\n    // Set EFS flag since filename and comment fields are all by default encoded using UTF-8.\n    // Without it file names may be corrupted for other apps when file names use unicode chars\n    _flags |= Constants.FLG_EFS;\n\n    const _localHeader = {\n        extraLen: 0\n    };\n\n    // casting\n    const uint32 = (val) => Math.max(0, val) >>> 0;\n    const uint16 = (val) => Math.max(0, val) & 0xffff;\n    const uint8 = (val) => Math.max(0, val) & 0xff;\n\n    _time = Utils.fromDate2DOS(new Date());\n\n    return {\n        get made() {\n            return _verMade;\n        },\n        set made(val) {\n            _verMade = val;\n        },\n\n        get version() {\n            return _version;\n        },\n        set version(val) {\n            _version = val;\n        },\n\n        get flags() {\n            return _flags;\n        },\n        set flags(val) {\n            _flags = val;\n        },\n\n        get flags_efs() {\n            return (_flags & Constants.FLG_EFS) > 0;\n        },\n        set flags_efs(val) {\n            if (val) {\n                _flags |= Constants.FLG_EFS;\n            } else {\n                _flags &= ~Constants.FLG_EFS;\n            }\n        },\n\n        get flags_desc() {\n            return (_flags & Constants.FLG_DESC) > 0;\n        },\n        set flags_desc(val) {\n            if (val) {\n                _flags |= Constants.FLG_DESC;\n            } else {\n                _flags &= ~Constants.FLG_DESC;\n            }\n        },\n\n        get method() {\n            return _method;\n        },\n        set method(val) {\n            switch (val) {\n                case Constants.STORED:\n                    this.version = 10;\n                    break;\n                case Constants.DEFLATED:\n                default:\n                    this.version = 20;\n            }\n            _method = val;\n        },\n\n        get time() {\n            return Utils.fromDOS2Date(this.timeval);\n        },\n        set time(val) {\n            val = new Date(val);\n            this.timeval = Utils.fromDate2DOS(val);\n        },\n\n        get timeval() {\n            return _time;\n        },\n        set timeval(val) {\n            _time = uint32(val);\n        },\n\n        get timeHighByte() {\n            return uint8(_time >>> 8);\n        },\n        get crc() {\n            return _crc;\n        },\n        set crc(val) {\n            _crc = uint32(val);\n        },\n\n        get compressedSize() {\n            return _compressedSize;\n        },\n        set compressedSize(val) {\n            _compressedSize = uint32(val);\n        },\n\n        get size() {\n            return _size;\n        },\n        set size(val) {\n            _size = uint32(val);\n        },\n\n        get fileNameLength() {\n            return _fnameLen;\n        },\n        set fileNameLength(val) {\n            _fnameLen = val;\n        },\n\n        get extraLength() {\n            return _extraLen;\n        },\n        set extraLength(val) {\n            _extraLen = val;\n        },\n\n        get extraLocalLength() {\n            return _localHeader.extraLen;\n        },\n        set extraLocalLength(val) {\n            _localHeader.extraLen = val;\n        },\n\n        get commentLength() {\n            return _comLen;\n        },\n        set commentLength(val) {\n            _comLen = val;\n        },\n\n        get diskNumStart() {\n            return _diskStart;\n        },\n        set diskNumStart(val) {\n            _diskStart = uint32(val);\n        },\n\n        get inAttr() {\n            return _inattr;\n        },\n        set inAttr(val) {\n            _inattr = uint32(val);\n        },\n\n        get attr() {\n            return _attr;\n        },\n        set attr(val) {\n            _attr = uint32(val);\n        },\n\n        // get Unix file permissions\n        get fileAttr() {\n            // Mask to the 9 rwxrwxrwx bits only. The setuid (0o4000), setgid\n            // (0o2000) and sticky (0o1000) bits are attacker-controlled archive\n            // metadata; preserving them on extraction (keepOriginalPermission)\n            // lets a crafted zip plant a setuid-root binary when extracting as\n            // root, a local privilege escalation (GHSA-679w-jf3m-wh39).\n            return ((_attr || 0) >> 16) & 0o777;\n        },\n\n        get offset() {\n            return _offset;\n        },\n        set offset(val) {\n            _offset = uint32(val);\n        },\n\n        get encrypted() {\n            return (_flags & Constants.FLG_ENC) === Constants.FLG_ENC;\n        },\n\n        get centralHeaderSize() {\n            return Constants.CENHDR + _fnameLen + _extraLen + _comLen;\n        },\n\n        get realDataOffset() {\n            return _offset + Constants.LOCHDR + _localHeader.fnameLen + _localHeader.extraLen;\n        },\n\n        get localHeader() {\n            return _localHeader;\n        },\n\n        loadLocalHeaderFromBinary: function (/*Buffer*/ input) {\n            // The LOC offset comes from the central directory and is attacker\n            // controlled. Reject one that would read past the end of the buffer,\n            // otherwise readUInt32LE below throws a raw RangeError instead of a\n            // clean INVALID_LOC (and escapes the async error path).\n            if (_offset < 0 || _offset + Constants.LOCHDR > input.length) {\n                throw Utils.Errors.INVALID_LOC();\n            }\n            var data = input.slice(_offset, _offset + Constants.LOCHDR);\n            // 30 bytes and should start with \"PK\\003\\004\"\n            if (data.readUInt32LE(0) !== Constants.LOCSIG) {\n                throw Utils.Errors.INVALID_LOC();\n            }\n\n            // version needed to extract\n            _localHeader.version = data.readUInt16LE(Constants.LOCVER);\n            // general purpose bit flag\n            _localHeader.flags = data.readUInt16LE(Constants.LOCFLG);\n            // desc flag\n            _localHeader.flags_desc = (_localHeader.flags & Constants.FLG_DESC) > 0;\n            // compression method\n            _localHeader.method = data.readUInt16LE(Constants.LOCHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            _localHeader.time = data.readUInt32LE(Constants.LOCTIM);\n            // uncompressed file crc-32 valu\n            _localHeader.crc = data.readUInt32LE(Constants.LOCCRC);\n            // compressed size\n            _localHeader.compressedSize = data.readUInt32LE(Constants.LOCSIZ);\n            // uncompressed size\n            _localHeader.size = data.readUInt32LE(Constants.LOCLEN);\n            // filename length\n            _localHeader.fnameLen = data.readUInt16LE(Constants.LOCNAM);\n            // extra field length\n            _localHeader.extraLen = data.readUInt16LE(Constants.LOCEXT);\n\n            // read extra data\n            const extraStart = _offset + Constants.LOCHDR + _localHeader.fnameLen;\n            const extraEnd = extraStart + _localHeader.extraLen;\n            return input.slice(extraStart, extraEnd);\n        },\n\n        loadFromBinary: function (/*Buffer*/ data) {\n            // data should be 46 bytes and start with \"PK 01 02\"\n            if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {\n                throw Utils.Errors.INVALID_CEN();\n            }\n            // version made by\n            _verMade = data.readUInt16LE(Constants.CENVEM);\n            // version needed to extract\n            _version = data.readUInt16LE(Constants.CENVER);\n            // encrypt, decrypt flags\n            _flags = data.readUInt16LE(Constants.CENFLG);\n            // compression method\n            _method = data.readUInt16LE(Constants.CENHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            _time = data.readUInt32LE(Constants.CENTIM);\n            // uncompressed file crc-32 value\n            _crc = data.readUInt32LE(Constants.CENCRC);\n            // compressed size\n            _compressedSize = data.readUInt32LE(Constants.CENSIZ);\n            // uncompressed size\n            _size = data.readUInt32LE(Constants.CENLEN);\n            // filename length\n            _fnameLen = data.readUInt16LE(Constants.CENNAM);\n            // extra field length\n            _extraLen = data.readUInt16LE(Constants.CENEXT);\n            // file comment length\n            _comLen = data.readUInt16LE(Constants.CENCOM);\n            // volume number start\n            _diskStart = data.readUInt16LE(Constants.CENDSK);\n            // internal file attributes\n            _inattr = data.readUInt16LE(Constants.CENATT);\n            // external file attributes\n            _attr = data.readUInt32LE(Constants.CENATX);\n            // LOC header offset\n            _offset = data.readUInt32LE(Constants.CENOFF);\n        },\n\n        localHeaderToBinary: function () {\n            // LOC header size (30 bytes)\n            var data = Buffer.alloc(Constants.LOCHDR);\n            // \"PK\\003\\004\"\n            data.writeUInt32LE(Constants.LOCSIG, 0);\n            // version needed to extract\n            data.writeUInt16LE(_version, Constants.LOCVER);\n            // general purpose bit flag\n            // clear bit 3 (data descriptor): we always write the real crc-32\n            // and sizes into this local header, so no trailing descriptor is\n            // emitted. Leaving the flag set would make the output unreadable\n            // (see issue #555).\n            data.writeUInt16LE(_flags & ~Constants.FLG_DESC, Constants.LOCFLG);\n            // compression method\n            data.writeUInt16LE(_method, Constants.LOCHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            data.writeUInt32LE(_time, Constants.LOCTIM);\n            // uncompressed file crc-32 value\n            data.writeUInt32LE(_crc, Constants.LOCCRC);\n            // compressed size\n            data.writeUInt32LE(_compressedSize, Constants.LOCSIZ);\n            // uncompressed size\n            data.writeUInt32LE(_size, Constants.LOCLEN);\n            // filename length\n            data.writeUInt16LE(_fnameLen, Constants.LOCNAM);\n            // extra field length\n            data.writeUInt16LE(_localHeader.extraLen, Constants.LOCEXT);\n            return data;\n        },\n\n        centralHeaderToBinary: function () {\n            // CEN header size (46 bytes)\n            var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen);\n            // \"PK\\001\\002\"\n            data.writeUInt32LE(Constants.CENSIG, 0);\n            // version made by\n            data.writeUInt16LE(_verMade, Constants.CENVEM);\n            // version needed to extract\n            data.writeUInt16LE(_version, Constants.CENVER);\n            // encrypt, decrypt flags\n            // clear bit 3 (data descriptor) to match the local header we emit\n            // (real crc/sizes are written, no descriptor follows the data) \u2014 issue #555\n            data.writeUInt16LE(_flags & ~Constants.FLG_DESC, Constants.CENFLG);\n            // compression method\n            data.writeUInt16LE(_method, Constants.CENHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            data.writeUInt32LE(_time, Constants.CENTIM);\n            // uncompressed file crc-32 value\n            data.writeUInt32LE(_crc, Constants.CENCRC);\n            // compressed size\n            data.writeUInt32LE(_compressedSize, Constants.CENSIZ);\n            // uncompressed size\n            data.writeUInt32LE(_size, Constants.CENLEN);\n            // filename length\n            data.writeUInt16LE(_fnameLen, Constants.CENNAM);\n            // extra field length\n            data.writeUInt16LE(_extraLen, Constants.CENEXT);\n            // file comment length\n            data.writeUInt16LE(_comLen, Constants.CENCOM);\n            // volume number start\n            data.writeUInt16LE(_diskStart, Constants.CENDSK);\n            // internal file attributes\n            data.writeUInt16LE(_inattr, Constants.CENATT);\n            // external file attributes\n            data.writeUInt32LE(_attr, Constants.CENATX);\n            // LOC header offset\n            data.writeUInt32LE(_offset, Constants.CENOFF);\n            return data;\n        },\n\n        toJSON: function () {\n            const bytes = function (nr) {\n                return nr + \" bytes\";\n            };\n\n            return {\n                made: _verMade,\n                version: _version,\n                flags: _flags,\n                method: Utils.methodToString(_method),\n                time: this.time,\n                crc: \"0x\" + _crc.toString(16).toUpperCase(),\n                compressedSize: bytes(_compressedSize),\n                size: bytes(_size),\n                fileNameLength: bytes(_fnameLen),\n                extraLength: bytes(_extraLen),\n                commentLength: bytes(_comLen),\n                diskNumStart: _diskStart,\n                inAttr: _inattr,\n                attr: _attr,\n                offset: _offset,\n                centralHeaderSize: bytes(Constants.CENHDR + _fnameLen + _extraLen + _comLen)\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n", "var Utils = require(\"../util\"),\n    Constants = Utils.Constants;\n\n/* The entries in the end of central directory */\nmodule.exports = function () {\n    var _volumeEntries = 0,\n        _totalEntries = 0,\n        _size = 0,\n        _offset = 0,\n        _commentLength = 0;\n\n    const needsZip64 = () => _volumeEntries > Constants.EF_ZIP64_OR_16 || _totalEntries > Constants.EF_ZIP64_OR_16 || _size > Constants.EF_ZIP64_OR_32 || _offset > Constants.EF_ZIP64_OR_32;\n\n    return {\n        get diskEntries() {\n            return _volumeEntries;\n        },\n        set diskEntries(/*Number*/ val) {\n            _volumeEntries = _totalEntries = val;\n        },\n\n        get totalEntries() {\n            return _totalEntries;\n        },\n        set totalEntries(/*Number*/ val) {\n            _totalEntries = _volumeEntries = val;\n        },\n\n        get size() {\n            return _size;\n        },\n        set size(/*Number*/ val) {\n            _size = val;\n        },\n\n        get offset() {\n            return _offset;\n        },\n        set offset(/*Number*/ val) {\n            _offset = val;\n        },\n\n        get commentLength() {\n            return _commentLength;\n        },\n        set commentLength(/*Number*/ val) {\n            _commentLength = val;\n        },\n\n        get mainHeaderSize() {\n            return (needsZip64() ? Constants.ZIP64HDR + Constants.END64HDR : 0) + Constants.ENDHDR + _commentLength;\n        },\n\n        loadFromBinary: function (/*Buffer*/ data) {\n            // data should be 22 bytes and start with \"PK 05 06\"\n            // or be 56+ bytes and start with \"PK 06 06\" for Zip64\n            if (\n                (data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) &&\n                (data.length < Constants.ZIP64HDR || data.readUInt32LE(0) !== Constants.ZIP64SIG)\n            ) {\n                throw Utils.Errors.INVALID_END();\n            }\n\n            if (data.readUInt32LE(0) === Constants.ENDSIG) {\n                // number of entries on this volume\n                _volumeEntries = data.readUInt16LE(Constants.ENDSUB);\n                // total number of entries\n                _totalEntries = data.readUInt16LE(Constants.ENDTOT);\n                // central directory size in bytes\n                _size = data.readUInt32LE(Constants.ENDSIZ);\n                // offset of first CEN header\n                _offset = data.readUInt32LE(Constants.ENDOFF);\n                // zip file comment length\n                _commentLength = data.readUInt16LE(Constants.ENDCOM);\n            } else {\n                // number of entries on this volume\n                _volumeEntries = Utils.readBigUInt64LE(data, Constants.ZIP64SUB);\n                // total number of entries\n                _totalEntries = Utils.readBigUInt64LE(data, Constants.ZIP64TOT);\n                // central directory size in bytes\n                _size = Utils.readBigUInt64LE(data, Constants.ZIP64SIZB);\n                // offset of first CEN header\n                _offset = Utils.readBigUInt64LE(data, Constants.ZIP64OFF);\n\n                _commentLength = 0;\n            }\n        },\n\n        toBinary: function () {\n            if (!needsZip64()) {\n                var b = Buffer.alloc(Constants.ENDHDR + _commentLength);\n                // \"PK 05 06\" signature\n                b.writeUInt32LE(Constants.ENDSIG, 0);\n                b.writeUInt32LE(0, 4);\n                // number of entries on this volume\n                b.writeUInt16LE(_volumeEntries, Constants.ENDSUB);\n                // total number of entries\n                b.writeUInt16LE(_totalEntries, Constants.ENDTOT);\n                // central directory size in bytes\n                b.writeUInt32LE(_size, Constants.ENDSIZ);\n                // offset of first CEN header\n                b.writeUInt32LE(_offset, Constants.ENDOFF);\n                // zip file comment length\n                b.writeUInt16LE(_commentLength, Constants.ENDCOM);\n                // fill comment memory with spaces so no garbage is left there\n                b.fill(\" \", Constants.ENDHDR);\n\n                return b;\n            }\n\n            var b = Buffer.alloc(this.mainHeaderSize);\n            let offset = 0;\n\n            // Zip64 end of central directory record.\n            b.writeUInt32LE(Constants.ZIP64SIG, offset);\n            Utils.writeBigUInt64LE(b, Constants.ZIP64HDR - Constants.ZIP64LEAD, offset + Constants.ZIP64SIZE);\n            b.writeUInt16LE(45, offset + Constants.ZIP64VEM);\n            b.writeUInt16LE(45, offset + Constants.ZIP64VER);\n            b.writeUInt32LE(0, offset + Constants.ZIP64DSK);\n            b.writeUInt32LE(0, offset + Constants.ZIP64DSKDIR);\n            Utils.writeBigUInt64LE(b, _volumeEntries, offset + Constants.ZIP64SUB);\n            Utils.writeBigUInt64LE(b, _totalEntries, offset + Constants.ZIP64TOT);\n            Utils.writeBigUInt64LE(b, _size, offset + Constants.ZIP64SIZB);\n            Utils.writeBigUInt64LE(b, _offset, offset + Constants.ZIP64OFF);\n\n            const zip64EndOffset = _offset + _size;\n            offset += Constants.ZIP64HDR;\n\n            // Zip64 end of central directory locator.\n            b.writeUInt32LE(Constants.END64SIG, offset);\n            b.writeUInt32LE(0, offset + Constants.END64START);\n            Utils.writeBigUInt64LE(b, zip64EndOffset, offset + Constants.END64OFF);\n            b.writeUInt32LE(1, offset + Constants.END64NUMDISKS);\n            offset += Constants.END64HDR;\n\n            // \"PK 05 06\" signature\n            b.writeUInt32LE(Constants.ENDSIG, offset);\n            b.writeUInt32LE(0, offset + 4);\n            // number of entries on this volume\n            b.writeUInt16LE(Math.min(_volumeEntries, Constants.EF_ZIP64_OR_16), offset + Constants.ENDSUB);\n            // total number of entries\n            b.writeUInt16LE(Math.min(_totalEntries, Constants.EF_ZIP64_OR_16), offset + Constants.ENDTOT);\n            // central directory size in bytes\n            b.writeUInt32LE(Math.min(_size, Constants.EF_ZIP64_OR_32), offset + Constants.ENDSIZ);\n            // offset of first CEN header\n            b.writeUInt32LE(Math.min(_offset, Constants.EF_ZIP64_OR_32), offset + Constants.ENDOFF);\n            // zip file comment length\n            b.writeUInt16LE(_commentLength, offset + Constants.ENDCOM);\n            // fill comment memory with spaces so no garbage is left there\n            b.fill(\" \", offset + Constants.ENDHDR);\n\n            return b;\n        },\n\n        toJSON: function () {\n            // creates 0x0000 style output\n            const offset = function (nr, len) {\n                let offs = nr.toString(16).toUpperCase();\n                while (offs.length < len) offs = \"0\" + offs;\n                return \"0x\" + offs;\n            };\n\n            return {\n                diskEntries: _volumeEntries,\n                totalEntries: _totalEntries,\n                size: _size + \" bytes\",\n                offset: offset(_offset, 4),\n                commentLength: _commentLength\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n// Misspelled\n", "exports.EntryHeader = require(\"./entryHeader\");\nexports.MainHeader = require(\"./mainHeader\");\n", "module.exports = function (/*Buffer*/ inbuf) {\n    var zlib = require(\"zlib\");\n\n    var opts = { chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024 };\n\n    return {\n        deflate: function () {\n            return zlib.deflateRawSync(inbuf, opts);\n        },\n\n        deflateAsync: function (/*Function*/ callback) {\n            var tmp = zlib.createDeflateRaw(opts),\n                parts = [],\n                total = 0;\n            tmp.on(\"data\", function (data) {\n                parts.push(data);\n                total += data.length;\n            });\n            tmp.on(\"end\", function () {\n                var buf = Buffer.alloc(total),\n                    written = 0;\n                buf.fill(0);\n                for (var i = 0; i < parts.length; i++) {\n                    var part = parts[i];\n                    part.copy(buf, written);\n                    written += part.length;\n                }\n                callback && callback(buf);\n            });\n            tmp.end(inbuf);\n        }\n    };\n};\n", "const version = +(process?.versions?.node ?? \"\").split(\".\")[0] || 0;\nconst Errors = require(\"../util/errors\");\n\nmodule.exports = function (/*Buffer*/ inbuf, /*number*/ expectedLength) {\n    var zlib = require(\"zlib\");\n    // Cap decompression output at the entry's declared uncompressed size to bound\n    // decompression bombs (CVE-2026-39244). A declared size of 0 must not disable\n    // the cap: a genuinely empty entry inflates to 0 bytes, so a 1-byte floor\n    // still lets it through while stopping a bomb that lies about its size\n    // (GHSA-rcw4-f5rp-g42v). zlib requires maxOutputLength >= 1.\n    const maxOutputLength = expectedLength > 0 ? expectedLength : 1;\n    const option = version >= 15 ? { maxOutputLength } : {};\n\n    return {\n        inflate: function () {\n            return zlib.inflateRawSync(inbuf, option);\n        },\n\n        inflateAsync: function (/*Function*/ callback) {\n            var tmp = zlib.createInflateRaw(option),\n                parts = [],\n                total = 0,\n                done = false;\n            const fail = function (err) {\n                if (done) return;\n                done = true;\n                tmp.destroy();\n                callback && callback(Buffer.alloc(0), err);\n            };\n            // Route stream errors (e.g. Z_DATA_ERROR on malformed input) through the\n            // callback. Without an \"error\" listener zlib re-throws the event as an\n            // uncaught exception on a later tick, crashing the host process instead\n            // of failing the call (GHSA-8238-w5pm-2374).\n            tmp.on(\"error\", function (err) {\n                fail(err);\n            });\n            tmp.on(\"data\", function (data) {\n                if (done) return;\n                total += data.length;\n                // The streaming API ignores maxOutputLength, so enforce the cap by\n                // hand; otherwise the async path decompresses without limit while the\n                // sync path is capped (GHSA-v429-h5qx-84wm, GHSA-c6fg-446q-cg94).\n                if (total > maxOutputLength) {\n                    return fail(Errors.MAX_OUTPUT_EXCEEDED());\n                }\n                parts.push(data);\n            });\n            tmp.on(\"end\", function () {\n                if (done) return;\n                done = true;\n                var buf = Buffer.alloc(total),\n                    written = 0;\n                buf.fill(0);\n                for (var i = 0; i < parts.length; i++) {\n                    var part = parts[i];\n                    part.copy(buf, written);\n                    written += part.length;\n                }\n                callback && callback(buf);\n            });\n            tmp.end(inbuf);\n        }\n    };\n};\n", "\"use strict\";\n\n// node crypt, we use it for generate salt\n// eslint-disable-next-line node/no-unsupported-features/node-builtins\nconst { randomFillSync } = require(\"crypto\");\nconst Errors = require(\"../util/errors\");\n\n// generate CRC32 lookup table\nconst crctable = new Uint32Array(256).map((t, crc) => {\n    for (let j = 0; j < 8; j++) {\n        if (0 !== (crc & 1)) {\n            crc = (crc >>> 1) ^ 0xedb88320;\n        } else {\n            crc >>>= 1;\n        }\n    }\n    return crc >>> 0;\n});\n\n// C-style uInt32 Multiply (discards higher bits, when JS multiply discards lower bits)\nconst uMul = (a, b) => Math.imul(a, b) >>> 0;\n\n// crc32 byte single update (actually same function is part of utils.crc32 function :) )\nconst crc32update = (pCrc32, bval) => {\n    return crctable[(pCrc32 ^ bval) & 0xff] ^ (pCrc32 >>> 8);\n};\n\n// function for generating salt for encrytion header\nconst genSalt = () => {\n    if (\"function\" === typeof randomFillSync) {\n        return randomFillSync(Buffer.alloc(12));\n    } else {\n        // fallback if function is not defined\n        return genSalt.node();\n    }\n};\n\n// salt generation with node random function (mainly as fallback)\ngenSalt.node = () => {\n    const salt = Buffer.alloc(12);\n    const len = salt.length;\n    for (let i = 0; i < len; i++) salt[i] = (Math.random() * 256) & 0xff;\n    return salt;\n};\n\n// general config\nconst config = {\n    genSalt\n};\n\n// Class Initkeys handles same basic ops with keys\nfunction Initkeys(pw) {\n    const pass = Buffer.isBuffer(pw) ? pw : Buffer.from(pw);\n    this.keys = new Uint32Array([0x12345678, 0x23456789, 0x34567890]);\n    for (let i = 0; i < pass.length; i++) {\n        this.updateKeys(pass[i]);\n    }\n}\n\nInitkeys.prototype.updateKeys = function (byteValue) {\n    const keys = this.keys;\n    keys[0] = crc32update(keys[0], byteValue);\n    keys[1] += keys[0] & 0xff;\n    keys[1] = uMul(keys[1], 134775813) + 1;\n    keys[2] = crc32update(keys[2], keys[1] >>> 24);\n    return byteValue;\n};\n\nInitkeys.prototype.next = function () {\n    const k = (this.keys[2] | 2) >>> 0; // key\n    return (uMul(k, k ^ 1) >> 8) & 0xff; // decode\n};\n\nfunction make_decrypter(/*Buffer*/ pwd) {\n    // 1. Stage initialize key\n    const keys = new Initkeys(pwd);\n\n    // return decrypter function\n    return function (/*Buffer*/ data) {\n        // result - we create new Buffer for results\n        const result = Buffer.alloc(data.length);\n        let pos = 0;\n        // process input data\n        for (let c of data) {\n            //c ^= keys.next();\n            //result[pos++] = c; // decode & Save Value\n            result[pos++] = keys.updateKeys(c ^ keys.next()); // update keys with decoded byte\n        }\n        return result;\n    };\n}\n\nfunction make_encrypter(/*Buffer*/ pwd) {\n    // 1. Stage initialize key\n    const keys = new Initkeys(pwd);\n\n    // return encrypting function, result and pos is here so we dont have to merge buffers later\n    return function (/*Buffer*/ data, /*Buffer*/ result, /* Number */ pos = 0) {\n        // result - we create new Buffer for results\n        if (!result) result = Buffer.alloc(data.length);\n        // process input data\n        for (let c of data) {\n            const k = keys.next(); // save key byte\n            result[pos++] = c ^ k; // save val\n            keys.updateKeys(c); // update keys with decoded byte\n        }\n        return result;\n    };\n}\n\nfunction decrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd) {\n    if (!data || !Buffer.isBuffer(data) || data.length < 12) {\n        return Buffer.alloc(0);\n    }\n\n    // 1. We Initialize and generate decrypting function\n    const decrypter = make_decrypter(pwd);\n\n    // 2. decrypt salt what is always 12 bytes and is a part of file content\n    const salt = decrypter(data.slice(0, 12));\n\n    // if bit 3 (0x08) of the general-purpose flags field is set, check salt[11] with the high byte of the header time\n    // 2 byte data block (as per Info-Zip spec), otherwise check with the high byte of the header entry\n    const verifyByte = (header.flags & 0x8) === 0x8 ? header.timeHighByte : header.crc >>> 24;\n\n    //3. does password meet expectations\n    if (salt[11] !== verifyByte) {\n        throw Errors.WRONG_PASSWORD();\n    }\n\n    // 4. decode content\n    return decrypter(data.slice(12));\n}\n\n// lets add way to populate salt, NOT RECOMMENDED for production but maybe useful for testing general functionality\nfunction _salter(data) {\n    if (Buffer.isBuffer(data) && data.length >= 12) {\n        // be aware - currently salting buffer data is modified\n        config.genSalt = function () {\n            return data.slice(0, 12);\n        };\n    } else if (data === \"node\") {\n        // test salt generation with node random function\n        config.genSalt = genSalt.node;\n    } else {\n        // if value is not acceptable config gets reset.\n        config.genSalt = genSalt;\n    }\n}\n\nfunction encrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd, /*Boolean*/ oldlike = false) {\n    // 1. test data if data is not Buffer we make buffer from it\n    if (data == null) data = Buffer.alloc(0);\n    // if data is not buffer be make buffer from it\n    if (!Buffer.isBuffer(data)) data = Buffer.from(data.toString());\n\n    // 2. We Initialize and generate encrypting function\n    const encrypter = make_encrypter(pwd);\n\n    // 3. generate salt (12-bytes of random data)\n    const salt = config.genSalt();\n    salt[11] = (header.crc >>> 24) & 0xff;\n\n    // old implementations (before PKZip 2.04g) used two byte check\n    if (oldlike) salt[10] = (header.crc >>> 16) & 0xff;\n\n    // 4. create output\n    const result = Buffer.alloc(data.length + 12);\n    encrypter(salt, result);\n\n    // finally encode content\n    return encrypter(data, result, 12);\n}\n\nmodule.exports = { decrypt, encrypt, _salter };\n", "exports.Deflater = require(\"./deflater\");\nexports.Inflater = require(\"./inflater\");\nexports.ZipCrypto = require(\"./zipcrypto\");\n", "var Utils = require(\"./util\"),\n    Headers = require(\"./headers\"),\n    Constants = Utils.Constants,\n    Methods = require(\"./methods\");\n\nmodule.exports = function (/** object */ options, /*Buffer*/ input) {\n    var _centralHeader = new Headers.EntryHeader(),\n        _entryName = Buffer.alloc(0),\n        _comment = Buffer.alloc(0),\n        _isDirectory = false,\n        uncompressedData = null,\n        _extra = Buffer.alloc(0),\n        _extralocal = Buffer.alloc(0),\n        _efs = true;\n\n    // assign options\n    const opts = options;\n\n    const decoder = typeof opts.decoder === \"object\" ? opts.decoder : Utils.decoder;\n    _efs = decoder.hasOwnProperty(\"efs\") ? decoder.efs : false;\n\n    function getCompressedDataFromZip() {\n        //if (!input || !Buffer.isBuffer(input)) {\n        if (!input || !(input instanceof Uint8Array)) {\n            return Buffer.alloc(0);\n        }\n        _extralocal = _centralHeader.loadLocalHeaderFromBinary(input);\n        const dataOffset = _centralHeader.realDataOffset;\n        const dataEnd = dataOffset + _centralHeader.compressedSize;\n        // The offsets and sizes come from attacker-controlled headers. Require the\n        // declared compressed extent to be fully present rather than letting slice()\n        // silently clamp to a short buffer (which only surfaces later as a CRC\n        // failure). Fail loudly with a header error instead (GHSA-wwrv-q5gf-5843).\n        if (dataOffset < 0 || dataEnd < dataOffset || dataEnd > input.length) {\n            throw Utils.Errors.INVALID_LOC();\n        }\n        return input.slice(dataOffset, dataEnd);\n    }\n\n    function crc32OK(data) {\n        // When bit 3 (0x08) of the general-purpose flags is set, the crc-32 and\n        // sizes were unknown when the local file header was written, so that\n        // header carries placeholder zeros and the real values are repeated in a\n        // data descriptor after the compressed data. adm-zip always parses the\n        // central directory, whose header holds the authoritative crc-32 and\n        // sizes, so we validate the payload against that value.\n        //\n        // Earlier versions instead located and parsed the trailing descriptor and\n        // threw when it was absent or in an unexpected shape. Many valid archives\n        // set the descriptor flag but write the real crc/sizes into the local and\n        // central headers without emitting a descriptor (or write one we did not\n        // recognise), so that strict handling rejected readable zips\n        // (issues #533, #548, #554). Trusting the central-directory crc keeps the\n        // integrity check while accepting those archives.\n        const expectedCrc = _centralHeader.flags_desc || _centralHeader.localHeader.flags_desc ? _centralHeader.crc : _centralHeader.localHeader.crc;\n\n        return Utils.crc32(data) === expectedCrc;\n    }\n\n    function decompress(/*Boolean*/ async, /*Function*/ callback, /*String, Buffer*/ pass) {\n        if (typeof callback === \"undefined\" && typeof async === \"string\") {\n            pass = async;\n            async = void 0;\n        }\n        if (_isDirectory) {\n            if (async && callback) {\n                callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR()); //si added error.\n            }\n            return Buffer.alloc(0);\n        }\n\n        var compressedData;\n        try {\n            compressedData = getCompressedDataFromZip();\n\n            if (compressedData.length === 0) {\n                // File is empty, nothing to decompress.\n                if (async && callback) callback(compressedData);\n                return compressedData;\n            }\n\n            if (_centralHeader.encrypted) {\n                if (\"string\" !== typeof pass && !Buffer.isBuffer(pass)) {\n                    throw Utils.Errors.INVALID_PASS_PARAM();\n                }\n                compressedData = Methods.ZipCrypto.decrypt(compressedData, _centralHeader, pass);\n            }\n        } catch (err) {\n            // These synchronous parse/setup steps run before any callback fires.\n            // In async mode a malformed local header (e.g. a bad LOC offset) would\n            // otherwise throw out of getDataAsync and bypass the callback error\n            // channel, crashing the caller. Route it through the callback instead.\n            if (async && callback) {\n                callback(Buffer.alloc(0), err);\n                return Buffer.alloc(0);\n            }\n            throw err;\n        }\n\n        var data;\n\n        switch (_centralHeader.method) {\n            case Utils.Constants.STORED:\n                // STORED entries are not compressed, so the uncompressed output is\n                // exactly the bytes present in the archive. Allocate from the real\n                // data length rather than the attacker-declared central-directory\n                // size, otherwise a tiny archive can declare a huge size and force a\n                // multi-gigabyte allocation before any validation (CVE-2026-39244).\n                data = Buffer.alloc(compressedData.length);\n                compressedData.copy(data);\n                if (!crc32OK(data)) {\n                    if (async && callback) callback(data, Utils.Errors.BAD_CRC()); //si added error\n                    throw Utils.Errors.BAD_CRC();\n                } else {\n                    //si added otherwise did not seem to return data.\n                    if (async && callback) callback(data);\n                    return data;\n                }\n            case Utils.Constants.DEFLATED:\n                // Do not pre-allocate the declared uncompressed size. The inflater\n                // grows its output buffer as zlib emits data and caps the total at\n                // the declared size (maxOutputLength), so a bogus size can no longer\n                // trigger an eager allocation before the data is read (CVE-2026-39244).\n                var inflater = new Methods.Inflater(compressedData, _centralHeader.size);\n                if (!async) {\n                    data = inflater.inflate();\n                    if (!crc32OK(data)) {\n                        throw Utils.Errors.BAD_CRC(`\"${decoder.decode(_entryName)}\"`);\n                    }\n                    return data;\n                } else {\n                    inflater.inflateAsync(function (result, err) {\n                        if (!callback) return;\n                        if (err) {\n                            // surface inflater/stream failures instead of validating\n                            // the empty placeholder buffer against the CRC\n                            callback(Buffer.alloc(0), err);\n                        } else if (!crc32OK(result)) {\n                            callback(result, Utils.Errors.BAD_CRC()); //si added error\n                        } else {\n                            callback(result);\n                        }\n                    });\n                }\n                break;\n            default:\n                if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD());\n                throw Utils.Errors.UNKNOWN_METHOD();\n        }\n    }\n\n    function compress(/*Boolean*/ async, /*Function*/ callback) {\n        if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {\n            // no data set or the data wasn't changed to require recompression\n            if (async && callback) callback(getCompressedDataFromZip());\n            return getCompressedDataFromZip();\n        }\n\n        if (uncompressedData.length && !_isDirectory) {\n            var compressedData;\n            // Local file header\n            switch (_centralHeader.method) {\n                case Utils.Constants.STORED:\n                    _centralHeader.compressedSize = _centralHeader.size;\n\n                    compressedData = Buffer.alloc(uncompressedData.length);\n                    uncompressedData.copy(compressedData);\n\n                    if (async && callback) callback(compressedData);\n                    return compressedData;\n                default:\n                case Utils.Constants.DEFLATED:\n                    var deflater = new Methods.Deflater(uncompressedData);\n                    if (!async) {\n                        var deflated = deflater.deflate();\n                        _centralHeader.compressedSize = deflated.length;\n                        return deflated;\n                    } else {\n                        deflater.deflateAsync(function (data) {\n                            compressedData = Buffer.alloc(data.length);\n                            _centralHeader.compressedSize = data.length;\n                            data.copy(compressedData);\n                            callback && callback(compressedData);\n                        });\n                    }\n                    deflater = null;\n                    break;\n            }\n        } else if (async && callback) {\n            callback(Buffer.alloc(0));\n        } else {\n            return Buffer.alloc(0);\n        }\n    }\n\n    function readUInt64LE(buffer, offset) {\n        return Utils.readBigUInt64LE(buffer, offset);\n    }\n\n    function parseExtra(data) {\n        try {\n            var offset = 0;\n            var signature, size, part;\n            while (offset + 4 < data.length) {\n                signature = data.readUInt16LE(offset);\n                offset += 2;\n                size = data.readUInt16LE(offset);\n                offset += 2;\n                part = data.slice(offset, offset + size);\n                offset += size;\n                if (Constants.ID_ZIP64 === signature) {\n                    parseZip64ExtendedInformation(part);\n                }\n            }\n        } catch (error) {\n            throw Utils.Errors.EXTRA_FIELD_PARSE_ERROR();\n        }\n    }\n\n    //Override header field values with values from the ZIP64 extra field\n    function parseZip64ExtendedInformation(data) {\n        var size, compressedSize, offset, diskNumStart;\n\n        if (data.length >= Constants.EF_ZIP64_SCOMP) {\n            size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);\n            if (_centralHeader.size === Constants.EF_ZIP64_OR_32) {\n                _centralHeader.size = size;\n            }\n        }\n        if (data.length >= Constants.EF_ZIP64_RHO) {\n            compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);\n            if (_centralHeader.compressedSize === Constants.EF_ZIP64_OR_32) {\n                _centralHeader.compressedSize = compressedSize;\n            }\n        }\n        if (data.length >= Constants.EF_ZIP64_DSN) {\n            offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);\n            if (_centralHeader.offset === Constants.EF_ZIP64_OR_32) {\n                _centralHeader.offset = offset;\n            }\n        }\n        if (data.length >= Constants.EF_ZIP64_DSN + 4) {\n            diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);\n            if (_centralHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {\n                _centralHeader.diskNumStart = diskNumStart;\n            }\n        }\n    }\n\n    return {\n        get entryName() {\n            return decoder.decode(_entryName);\n        },\n        get rawEntryName() {\n            return _entryName;\n        },\n        set entryName(val) {\n            _entryName = Utils.toBuffer(val, decoder.encode);\n            var lastChar = _entryName[_entryName.length - 1];\n            _isDirectory = lastChar === 47 || lastChar === 92;\n            _centralHeader.fileNameLength = _entryName.length;\n        },\n\n        get efs() {\n            if (typeof _efs === \"function\") {\n                return _efs(this.entryName);\n            } else {\n                return _efs;\n            }\n        },\n\n        get extra() {\n            return _extra;\n        },\n        set extra(val) {\n            _extra = val;\n            _centralHeader.extraLength = val.length;\n            parseExtra(val);\n        },\n\n        get comment() {\n            return decoder.decode(_comment);\n        },\n        set comment(val) {\n            _comment = Utils.toBuffer(val, decoder.encode);\n            _centralHeader.commentLength = _comment.length;\n            if (_comment.length > 0xffff) throw Utils.Errors.COMMENT_TOO_LONG();\n        },\n\n        get name() {\n            const n = decoder.decode(_entryName);\n            // For directories the name is the last path segment; drop the trailing\n            // separator first so \"a/b/c/\" yields \"c\" and not \"\" (issue #466).\n            return _isDirectory\n                ? n\n                      .replace(/[/\\\\]$/, \"\")\n                      .split(\"/\")\n                      .pop()\n                : n.split(\"/\").pop();\n        },\n        get isDirectory() {\n            return _isDirectory;\n        },\n\n        getCompressedData: function () {\n            return compress(false, null);\n        },\n\n        getCompressedDataAsync: function (/*Function*/ callback) {\n            compress(true, callback);\n        },\n\n        setData: function (value) {\n            uncompressedData = Utils.toBuffer(value, Utils.decoder.encode);\n            if (!_isDirectory && uncompressedData.length) {\n                _centralHeader.size = uncompressedData.length;\n                _centralHeader.method = Utils.Constants.DEFLATED;\n                _centralHeader.crc = Utils.crc32(value);\n                _centralHeader.changed = true;\n            } else {\n                // folders and blank files should be stored\n                _centralHeader.method = Utils.Constants.STORED;\n            }\n        },\n\n        getData: function (pass) {\n            if (_centralHeader.changed) {\n                return uncompressedData;\n            } else {\n                return decompress(false, null, pass);\n            }\n        },\n\n        getDataAsync: function (/*Function*/ callback, pass) {\n            if (_centralHeader.changed) {\n                callback(uncompressedData);\n            } else {\n                decompress(true, callback, pass);\n            }\n        },\n\n        set attr(attr) {\n            _centralHeader.attr = attr;\n        },\n        get attr() {\n            return _centralHeader.attr;\n        },\n\n        set header(/*Buffer*/ data) {\n            _centralHeader.loadFromBinary(data);\n        },\n\n        get header() {\n            return _centralHeader;\n        },\n\n        packCentralHeader: function () {\n            _centralHeader.flags_efs = this.efs;\n            _centralHeader.extraLength = _extra.length;\n            // 1. create header (buffer)\n            var header = _centralHeader.centralHeaderToBinary();\n            var addpos = Utils.Constants.CENHDR;\n            // 2. add file name\n            _entryName.copy(header, addpos);\n            addpos += _entryName.length;\n            // 3. add extra data\n            _extra.copy(header, addpos);\n            addpos += _centralHeader.extraLength;\n            // 4. add file comment\n            _comment.copy(header, addpos);\n            return header;\n        },\n\n        packLocalHeader: function () {\n            let addpos = 0;\n            _centralHeader.flags_efs = this.efs;\n            _centralHeader.extraLocalLength = _extralocal.length;\n            // 1. construct local header Buffer\n            const localHeaderBuf = _centralHeader.localHeaderToBinary();\n            // 2. localHeader - crate header buffer\n            const localHeader = Buffer.alloc(localHeaderBuf.length + _entryName.length + _centralHeader.extraLocalLength);\n            // 2.1 add localheader\n            localHeaderBuf.copy(localHeader, addpos);\n            addpos += localHeaderBuf.length;\n            // 2.2 add file name\n            _entryName.copy(localHeader, addpos);\n            addpos += _entryName.length;\n            // 2.3 add extra field\n            _extralocal.copy(localHeader, addpos);\n            addpos += _extralocal.length;\n\n            return localHeader;\n        },\n\n        toJSON: function () {\n            const bytes = function (nr) {\n                return \"<\" + ((nr && nr.length + \" bytes buffer\") || \"null\") + \">\";\n            };\n\n            return {\n                entryName: this.entryName,\n                name: this.name,\n                comment: this.comment,\n                isDirectory: this.isDirectory,\n                header: _centralHeader.toJSON(),\n                compressedData: bytes(input),\n                data: bytes(uncompressedData)\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n", "const ZipEntry = require(\"./zipEntry\");\nconst Headers = require(\"./headers\");\nconst Utils = require(\"./util\");\n\nmodule.exports = function (/*Buffer|null*/ inBuffer, /** object */ options) {\n    var entryList = [],\n        // prototype-less: entry names come from untrusted input, so keys like\n        // \"__proto__\" or \"constructor\" must be plain data, not touch the prototype\n        // chain (which otherwise crashes addFile and hides such entries)\n        entryTable = Object.create(null),\n        _comment = Buffer.alloc(0),\n        mainHeader = new Headers.MainHeader(),\n        loadedEntries = false;\n    var password = null;\n    const temporary = new Set();\n\n    // assign options\n    const opts = options;\n\n    const { noSort, decoder } = opts;\n\n    if (inBuffer) {\n        // is a memory buffer\n        readMainHeader(opts.readEntries);\n    } else {\n        // none. is a new file\n        loadedEntries = true;\n    }\n\n    function makeTemporaryFolders() {\n        const foldersList = new Set();\n\n        // Make list of all folders in file\n        for (const elem of Object.keys(entryTable)) {\n            const elements = elem.split(\"/\");\n            elements.pop(); // filename\n            if (!elements.length) continue; // no folders\n            for (let i = 0; i < elements.length; i++) {\n                const sub = elements.slice(0, i + 1).join(\"/\") + \"/\";\n                foldersList.add(sub);\n            }\n        }\n\n        // create missing folders as temporary\n        for (const elem of foldersList) {\n            if (!(elem in entryTable)) {\n                const tempfolder = new ZipEntry(opts);\n                tempfolder.entryName = elem;\n                tempfolder.attr = 0x10;\n                tempfolder.temporary = true;\n                entryList.push(tempfolder);\n                entryTable[tempfolder.entryName] = tempfolder;\n                temporary.add(tempfolder);\n            }\n        }\n    }\n\n    function readEntries() {\n        loadedEntries = true;\n        entryTable = Object.create(null);\n        if (mainHeader.diskEntries > (inBuffer.length - mainHeader.offset) / Utils.Constants.CENHDR) {\n            throw Utils.Errors.DISK_ENTRY_TOO_LARGE();\n        }\n        entryList = new Array(mainHeader.diskEntries); // total number of entries\n        var index = mainHeader.offset; // offset of first CEN header\n        for (var i = 0; i < entryList.length; i++) {\n            var tmp = index,\n                entry = new ZipEntry(opts, inBuffer);\n            entry.header = inBuffer.slice(tmp, (tmp += Utils.Constants.CENHDR));\n\n            entry.entryName = inBuffer.slice(tmp, (tmp += entry.header.fileNameLength));\n\n            if (entry.header.extraLength) {\n                entry.extra = inBuffer.slice(tmp, (tmp += entry.header.extraLength));\n            }\n\n            if (entry.header.commentLength) entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);\n\n            index += entry.header.centralHeaderSize;\n\n            // Reject archives that declare the same entry name twice. adm-zip keeps\n            // every entry in entryList but only the last in entryTable, so getEntry()\n            // (table) and extractAllTo() (list) could resolve one name to different\n            // content: an app that validates entry bytes via getEntry() before\n            // extracting could approve one file while a different one lands on disk\n            // (GHSA-p634-w6r4-rjp2). Fail closed on the ambiguity.\n            if (entry.entryName in entryTable) {\n                throw Utils.Errors.DUPLICATE_ENTRY(`\"${entry.entryName}\"`);\n            }\n\n            entryList[i] = entry;\n            entryTable[entry.entryName] = entry;\n        }\n        temporary.clear();\n        makeTemporaryFolders();\n    }\n\n    function readMainHeader(/*Boolean*/ readNow) {\n        var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size\n            max = Math.max(0, i - 0xffff), // 0xFFFF is the max zip file comment length\n            n = max,\n            endStart = inBuffer.length,\n            endOffset = -1, // Start offset of the END header\n            commentEnd = 0;\n\n        // option to search header form entire file\n        const trailingSpace = typeof opts.trailingSpace === \"boolean\" ? opts.trailingSpace : false;\n        if (trailingSpace) max = 0;\n\n        for (i; i >= n; i--) {\n            if (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P'\n            if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) {\n                // \"PK\\005\\006\"\n                endOffset = i;\n                commentEnd = i;\n                endStart = i + Utils.Constants.ENDHDR;\n                // We already found a regular signature, let's look just a bit further to check if there's any zip64 signature\n                n = i - Utils.Constants.END64HDR;\n                continue;\n            }\n\n            if (inBuffer.readUInt32LE(i) === Utils.Constants.END64SIG) {\n                // Found a zip64 signature, let's continue reading the whole zip64 record\n                n = max;\n                continue;\n            }\n\n            if (inBuffer.readUInt32LE(i) === Utils.Constants.ZIP64SIG) {\n                // Found the zip64 record, let's determine it's size\n                endOffset = i;\n                endStart = i + Utils.readBigUInt64LE(inBuffer, i + Utils.Constants.ZIP64SIZE) + Utils.Constants.ZIP64LEAD;\n                break;\n            }\n        }\n\n        if (endOffset == -1) throw Utils.Errors.INVALID_FORMAT();\n\n        mainHeader.loadFromBinary(inBuffer.slice(endOffset, endStart));\n        if (mainHeader.commentLength) {\n            _comment = inBuffer.slice(commentEnd + Utils.Constants.ENDHDR);\n        }\n        if (readNow) readEntries();\n    }\n\n    function sortEntries() {\n        if (entryList.length > 1 && !noSort) {\n            // Decode + lowercase each name once rather than on every comparison:\n            // the entryName getter re-decodes the underlying buffer on each access,\n            // so the previous inline comparator did O(n log n) redundant decoding.\n            // Ordering is unchanged (same localeCompare on the same keys).\n            entryList = entryList\n                .map((entry) => ({ entry, key: entry.entryName.toLowerCase() }))\n                .sort((a, b) => a.key.localeCompare(b.key))\n                .map((pair) => pair.entry);\n        }\n    }\n\n    return {\n        /**\n         * Returns an array of ZipEntry objects existent in the current opened archive\n         * @return Array\n         */\n        get entries() {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            return entryList.filter((e) => !temporary.has(e));\n        },\n\n        /**\n         * Archive comment\n         * @return {String}\n         */\n        get comment() {\n            return decoder.decode(_comment);\n        },\n        set comment(val) {\n            _comment = Utils.toBuffer(val, decoder.encode);\n            mainHeader.commentLength = _comment.length;\n        },\n\n        getEntryCount: function () {\n            if (!loadedEntries) {\n                return mainHeader.diskEntries;\n            }\n\n            return entryList.length;\n        },\n\n        forEach: function (callback) {\n            this.entries.forEach(callback);\n        },\n\n        /**\n         * Returns a reference to the entry with the given name or null if entry is inexistent\n         *\n         * @param entryName\n         * @return ZipEntry\n         */\n        getEntry: function (/*String*/ entryName) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            return entryTable[entryName] || null;\n        },\n\n        /**\n         * Adds the given entry to the entry list\n         *\n         * @param entry\n         */\n        setEntry: function (/*ZipEntry*/ entry) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            entryList.push(entry);\n            entryTable[entry.entryName] = entry;\n            mainHeader.totalEntries = entryList.length;\n        },\n\n        /**\n         * Removes the file with the given name from the entry list.\n         *\n         * If the entry is a directory, then all nested files and directories will be removed\n         * @param entryName\n         * @returns {void}\n         */\n        deleteFile: function (/*String*/ entryName, withsubfolders = true) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            const entry = entryTable[entryName];\n            const list = this.getEntryChildren(entry, withsubfolders).map((child) => child.entryName);\n\n            list.forEach(this.deleteEntry);\n        },\n\n        /**\n         * Removes the entry with the given name from the entry list.\n         *\n         * @param {string} entryName\n         * @returns {void}\n         */\n        deleteEntry: function (/*String*/ entryName) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            const entry = entryTable[entryName];\n            const index = entryList.indexOf(entry);\n            if (index >= 0) {\n                entryList.splice(index, 1);\n                delete entryTable[entryName];\n                mainHeader.totalEntries = entryList.length;\n            }\n        },\n\n        /**\n         *  Iterates and returns all nested files and directories of the given entry\n         *\n         * @param entry\n         * @return Array\n         */\n        getEntryChildren: function (/*ZipEntry*/ entry, subfolders = true) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            if (typeof entry === \"object\") {\n                if (entry.isDirectory && subfolders) {\n                    const list = [];\n                    const name = entry.entryName;\n\n                    for (const zipEntry of entryList) {\n                        if (zipEntry.entryName.startsWith(name)) {\n                            list.push(zipEntry);\n                        }\n                    }\n                    return list;\n                } else {\n                    return [entry];\n                }\n            }\n            return [];\n        },\n\n        /**\n         *  How many child elements entry has\n         *\n         * @param {ZipEntry} entry\n         * @return {integer}\n         */\n        getChildCount: function (entry) {\n            if (entry && entry.isDirectory) {\n                const list = this.getEntryChildren(entry);\n                return list.includes(entry) ? list.length - 1 : list.length;\n            }\n            return 0;\n        },\n\n        /**\n         * Returns the zip file\n         *\n         * @return Buffer\n         */\n        compressToBuffer: function () {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            sortEntries();\n\n            const dataBlock = [];\n            const headerBlocks = [];\n            let totalSize = 0;\n            let dindex = 0;\n\n            mainHeader.size = 0;\n            mainHeader.offset = 0;\n            let totalEntries = 0;\n\n            for (const entry of this.entries) {\n                // compress data and set local and entry header accordingly. Reason why is called first\n                const compressedData = entry.getCompressedData();\n                entry.header.offset = dindex;\n\n                // 1. construct local header\n                const localHeader = entry.packLocalHeader();\n\n                // 2. offsets\n                const dataLength = localHeader.length + compressedData.length;\n                dindex += dataLength;\n\n                // 3. store values in sequence\n                dataBlock.push(localHeader);\n                dataBlock.push(compressedData);\n\n                // 4. construct central header\n                const centralHeader = entry.packCentralHeader();\n                headerBlocks.push(centralHeader);\n                // 5. update main header\n                mainHeader.size += centralHeader.length;\n                totalSize += dataLength + centralHeader.length;\n                totalEntries++;\n            }\n\n            totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n            // point to end of data and beginning of central directory first record\n            mainHeader.offset = dindex;\n            mainHeader.totalEntries = totalEntries;\n\n            dindex = 0;\n            const outBuffer = Buffer.alloc(totalSize);\n            // write data blocks\n            for (const content of dataBlock) {\n                content.copy(outBuffer, dindex);\n                dindex += content.length;\n            }\n\n            // write central directory entries\n            for (const content of headerBlocks) {\n                content.copy(outBuffer, dindex);\n                dindex += content.length;\n            }\n\n            // write main header\n            const mh = mainHeader.toBinary();\n            if (_comment) {\n                _comment.copy(mh, mh.length - _comment.length); // add zip file comment\n            }\n            mh.copy(outBuffer, dindex);\n\n            // Since we update entry and main header offsets,\n            // they are no longer valid and we have to reset content\n            // (Issue 64)\n\n            inBuffer = outBuffer;\n            loadedEntries = false;\n\n            return outBuffer;\n        },\n\n        toAsyncBuffer: function (/*Function*/ onSuccess, /*Function*/ onFail, /*Function*/ onItemStart, /*Function*/ onItemEnd) {\n            try {\n                if (!loadedEntries) {\n                    readEntries();\n                }\n                sortEntries();\n\n                const dataBlock = [];\n                const centralHeaders = [];\n                let totalSize = 0;\n                let dindex = 0;\n                let totalEntries = 0;\n\n                mainHeader.size = 0;\n                mainHeader.offset = 0;\n\n                const compress2Buffer = function (entryLists) {\n                    if (entryLists.length > 0) {\n                        const entry = entryLists.shift();\n                        const name = entry.entryName + entry.extra.toString();\n                        if (onItemStart) onItemStart(name);\n                        entry.getCompressedDataAsync(function (compressedData) {\n                            if (onItemEnd) onItemEnd(name);\n                            entry.header.offset = dindex;\n\n                            // 1. construct local header\n                            const localHeader = entry.packLocalHeader();\n\n                            // 2. offsets\n                            const dataLength = localHeader.length + compressedData.length;\n                            dindex += dataLength;\n\n                            // 3. store values in sequence\n                            dataBlock.push(localHeader);\n                            dataBlock.push(compressedData);\n\n                            // central header\n                            const centalHeader = entry.packCentralHeader();\n                            centralHeaders.push(centalHeader);\n                            mainHeader.size += centalHeader.length;\n                            totalSize += dataLength + centalHeader.length;\n                            totalEntries++;\n\n                            compress2Buffer(entryLists);\n                        });\n                    } else {\n                        totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n                        // point to end of data and beginning of central directory first record\n                        mainHeader.offset = dindex;\n                        mainHeader.totalEntries = totalEntries;\n\n                        dindex = 0;\n                        const outBuffer = Buffer.alloc(totalSize);\n                        dataBlock.forEach(function (content) {\n                            content.copy(outBuffer, dindex); // write data blocks\n                            dindex += content.length;\n                        });\n                        centralHeaders.forEach(function (content) {\n                            content.copy(outBuffer, dindex); // write central directory entries\n                            dindex += content.length;\n                        });\n\n                        const mh = mainHeader.toBinary();\n                        if (_comment) {\n                            _comment.copy(mh, mh.length - _comment.length); // add zip file comment\n                        }\n\n                        mh.copy(outBuffer, dindex); // write main header\n\n                        // Since we update entry and main header offsets, they are no\n                        // longer valid and we have to reset content using our new buffer\n                        // (Issue 64)\n\n                        inBuffer = outBuffer;\n                        loadedEntries = false;\n\n                        onSuccess(outBuffer);\n                    }\n                };\n\n                compress2Buffer(Array.from(this.entries));\n            } catch (e) {\n                onFail(e);\n            }\n        }\n    };\n};\n", "const Utils = require(\"./util\");\nconst pth = require(\"path\");\nconst ZipEntry = require(\"./zipEntry\");\nconst ZipFile = require(\"./zipFile\");\n\nconst get_Bool = (...val) => Utils.findLast(val, (c) => typeof c === \"boolean\");\nconst get_Str = (...val) => Utils.findLast(val, (c) => typeof c === \"string\");\nconst get_Fun = (...val) => Utils.findLast(val, (c) => typeof c === \"function\");\n\nconst defaultOptions = {\n    // option \"noSort\" : if true it disables files sorting\n    noSort: false,\n    // read entries during load (initial loading may be slower)\n    readEntries: false,\n    // default method is none\n    method: Utils.Constants.NONE,\n    // file system\n    fs: null\n};\n\nmodule.exports = function (/**String*/ input, /** object */ options) {\n    let inBuffer = null;\n\n    // create object based default options, allowing them to be overwritten\n    const opts = Object.assign(Object.create(null), defaultOptions);\n\n    // test input variable\n    if (input && \"object\" === typeof input) {\n        // if value is not buffer we accept it to be object with options\n        if (!(input instanceof Uint8Array)) {\n            Object.assign(opts, input);\n            input = opts.input ? opts.input : undefined;\n            if (opts.input) delete opts.input;\n        }\n\n        // if input is buffer\n        if (Buffer.isBuffer(input)) {\n            inBuffer = input;\n            opts.method = Utils.Constants.BUFFER;\n            input = undefined;\n        }\n    }\n\n    // assign options\n    Object.assign(opts, options);\n\n    // instanciate utils filesystem\n    const filetools = new Utils(opts);\n\n    // Restore the archived permissions on extracted directories. This has to run\n    // after a directory's contents are written: applying a restrictive mode\n    // (e.g. 0o500) up front would stop us writing the files it contains. Applying\n    // the deepest paths first keeps parent directories traversable while their\n    // children are updated (issue #530).\n    const applyDirAttributes = (dirEntries) => {\n        dirEntries\n            .filter((d) => d.attr)\n            .sort((a, b) => b.path.length - a.path.length)\n            .forEach((d) => filetools.fs.chmodSync(d.path, d.attr));\n    };\n\n    if (typeof opts.decoder !== \"object\" || typeof opts.decoder.encode !== \"function\" || typeof opts.decoder.decode !== \"function\") {\n        opts.decoder = Utils.decoder;\n    }\n\n    // if input is file name we retrieve its content\n    if (input && \"string\" === typeof input) {\n        // load zip file\n        if (filetools.fs.existsSync(input)) {\n            opts.method = Utils.Constants.FILE;\n            opts.filename = input;\n            inBuffer = filetools.fs.readFileSync(input);\n        } else {\n            throw Utils.Errors.INVALID_FILENAME();\n        }\n    }\n\n    // create variable\n    const _zip = new ZipFile(inBuffer, opts);\n\n    const { canonical, sanitize, zipnamefix } = Utils;\n\n    function getEntry(/**Object*/ entry) {\n        if (entry && _zip) {\n            var item;\n            // If entry was given as a file name\n            if (typeof entry === \"string\") item = _zip.getEntry(pth.posix.normalize(entry));\n            // if entry was given as a ZipEntry object\n            if (typeof entry === \"object\" && typeof entry.entryName !== \"undefined\" && typeof entry.header !== \"undefined\") item = _zip.getEntry(entry.entryName);\n\n            if (item) {\n                return item;\n            }\n        }\n        return null;\n    }\n\n    function fixPath(zipPath) {\n        const { join, normalize, sep } = pth.posix;\n        // convert windows file separators and normalize\n        return join(pth.isAbsolute(zipPath) ? \"/\": '.',  normalize(sep + zipPath.split(\"\\\\\").join(sep) + sep));\n    }\n\n    function filenameFilter(filterfn) {\n        if (filterfn instanceof RegExp) {\n            // if filter is RegExp wrap it\n            return (function (rx) {\n                return function (filename) {\n                    return rx.test(filename);\n                };\n            })(filterfn);\n        } else if (\"function\" !== typeof filterfn) {\n            // if filter is not function we will replace it\n            return () => true;\n        }\n        return filterfn;\n    }\n\n    // keep last character on folders\n    const relativePath = (local, entry) => {\n        let lastChar = entry.slice(-1);\n        lastChar = lastChar === filetools.sep ? filetools.sep : \"\";\n        return pth.relative(local, entry) + lastChar;\n    };\n\n    return {\n        /**\n         * Extracts the given entry from the archive and returns the content as a Buffer object\n         * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry\n         * @param {Buffer|string} [pass] - password\n         * @return Buffer or Null in case of error\n         */\n        readFile: function (entry, pass) {\n            var item = getEntry(entry);\n            return (item && item.getData(pass)) || null;\n        },\n\n        /**\n         * Returns how many child elements has on entry (directories) on files it is always 0\n         * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry\n         * @returns {integer}\n         */\n        childCount: function (entry) {\n            const item = getEntry(entry);\n            if (item) {\n                return _zip.getChildCount(item);\n            }\n        },\n\n        /**\n         * Asynchronous readFile\n         * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry\n         * @param {callback} callback\n         *\n         * @return Buffer or Null in case of error\n         */\n        readFileAsync: function (entry, callback) {\n            var item = getEntry(entry);\n            if (item) {\n                item.getDataAsync(callback);\n            } else {\n                callback(null, \"getEntry failed for:\" + entry);\n            }\n        },\n\n        /**\n         * Extracts the given entry from the archive and returns the content as plain text in the given encoding\n         * @param {ZipEntry|string} entry - ZipEntry object or String with the full path of the entry\n         * @param {string} encoding - Optional. If no encoding is specified utf8 is used\n         *\n         * @return String\n         */\n        readAsText: function (entry, encoding) {\n            var item = getEntry(entry);\n            if (item) {\n                var data = item.getData();\n                if (data && data.length) {\n                    return data.toString(encoding || \"utf8\");\n                }\n            }\n            return \"\";\n        },\n\n        /**\n         * Asynchronous readAsText\n         * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry\n         * @param {callback} callback\n         * @param {string} [encoding] - Optional. If no encoding is specified utf8 is used\n         *\n         * @return String\n         */\n        readAsTextAsync: function (entry, callback, encoding) {\n            var item = getEntry(entry);\n            if (item) {\n                item.getDataAsync(function (data, err) {\n                    if (err) {\n                        callback(data, err);\n                        return;\n                    }\n\n                    if (data && data.length) {\n                        callback(data.toString(encoding || \"utf8\"));\n                    } else {\n                        callback(\"\");\n                    }\n                });\n            } else {\n                callback(\"\");\n            }\n        },\n\n        /**\n         * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory\n         *\n         * @param {ZipEntry|string} entry\n         * @param {boolean} withsubfolders\n         * @returns {void}\n         */\n        deleteFile: function (entry, withsubfolders = true) {\n            // @TODO: test deleteFile\n            var item = getEntry(entry);\n            if (item) {\n                _zip.deleteFile(item.entryName, withsubfolders);\n            }\n        },\n\n        /**\n         * Remove the entry from the file or directory without affecting any nested entries\n         *\n         * @param {ZipEntry|string} entry\n         * @returns {void}\n         */\n        deleteEntry: function (entry) {\n            // @TODO: test deleteEntry\n            var item = getEntry(entry);\n            if (item) {\n                _zip.deleteEntry(item.entryName);\n            }\n        },\n\n        /**\n         * Adds a comment to the zip. The zip must be rewritten after adding the comment.\n         *\n         * @param {string} comment\n         */\n        addZipComment: function (comment) {\n            // @TODO: test addZipComment\n            _zip.comment = comment;\n        },\n\n        /**\n         * Returns the zip comment\n         *\n         * @return String\n         */\n        getZipComment: function () {\n            return _zip.comment || \"\";\n        },\n\n        /**\n         * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment\n         * The comment cannot exceed 65535 characters in length\n         *\n         * @param {ZipEntry} entry\n         * @param {string} comment\n         */\n        addZipEntryComment: function (entry, comment) {\n            var item = getEntry(entry);\n            if (item) {\n                item.comment = comment;\n            }\n        },\n\n        /**\n         * Returns the comment of the specified entry\n         *\n         * @param {ZipEntry} entry\n         * @return String\n         */\n        getZipEntryComment: function (entry) {\n            var item = getEntry(entry);\n            if (item) {\n                return item.comment || \"\";\n            }\n            return \"\";\n        },\n\n        /**\n         * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content\n         *\n         * @param {ZipEntry} entry\n         * @param {Buffer} content\n         */\n        updateFile: function (entry, content) {\n            var item = getEntry(entry);\n            if (item) {\n                item.setData(content);\n            }\n        },\n\n        /**\n         * Adds a file from the disk to the archive\n         *\n         * @param {string} localPath File to add to zip\n         * @param {string} [zipPath] Optional path inside the zip\n         * @param {string} [zipName] Optional name for the file\n         * @param {string} [comment] Optional file comment\n         */\n        addLocalFile: function (localPath, zipPath, zipName, comment) {\n            if (filetools.fs.existsSync(localPath)) {\n                // fix ZipPath\n                zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n                // p - local file name\n                const p = pth.win32.basename(pth.win32.normalize(localPath));\n\n                // add file name into zippath\n                zipPath += zipName ? zipName : p;\n\n                // read file attributes\n                const _attr = filetools.fs.statSync(localPath);\n\n                // get file content\n                const data = _attr.isFile() ? filetools.fs.readFileSync(localPath) : Buffer.alloc(0);\n\n                // if folder\n                if (_attr.isDirectory()) zipPath += filetools.sep;\n\n                // add file into zip file\n                this.addFile(zipPath, data, comment, _attr);\n            } else {\n                throw Utils.Errors.FILE_NOT_FOUND(localPath);\n            }\n        },\n\n        /**\n         * Callback for showing if everything was done.\n         *\n         * @callback doneCallback\n         * @param {Error} err - Error object\n         * @param {boolean} done - was request fully completed\n         */\n\n        /**\n         * Adds a file from the disk to the archive\n         *\n         * @param {(object|string)} options - options object, if it is string it us used as localPath.\n         * @param {string} options.localPath - Local path to the file.\n         * @param {string} [options.comment] - Optional file comment.\n         * @param {string} [options.zipPath] - Optional path inside the zip\n         * @param {string} [options.zipName] - Optional name for the file\n         * @param {doneCallback} callback - The callback that handles the response.\n         */\n        addLocalFileAsync: function (options, callback) {\n            options = typeof options === \"object\" ? options : { localPath: options };\n            const localPath = pth.resolve(options.localPath);\n            const { comment } = options;\n            let { zipPath, zipName } = options;\n            const self = this;\n\n            filetools.fs.stat(localPath, function (err, stats) {\n                if (err) return callback(err, false);\n                // fix ZipPath\n                zipPath = zipPath ? fixPath(zipPath) : \"\";\n                // p - local file name\n                const p = pth.win32.basename(pth.win32.normalize(localPath));\n                // add file name into zippath\n                zipPath += zipName ? zipName : p;\n\n                if (stats.isFile()) {\n                    filetools.fs.readFile(localPath, function (err, data) {\n                        if (err) return callback(err, false);\n                        self.addFile(zipPath, data, comment, stats);\n                        return setImmediate(callback, undefined, true);\n                    });\n                } else if (stats.isDirectory()) {\n                    zipPath += filetools.sep;\n                    self.addFile(zipPath, Buffer.alloc(0), comment, stats);\n                    return setImmediate(callback, undefined, true);\n                }\n            });\n        },\n\n        /**\n         * Adds a local directory and all its nested files and directories to the archive\n         *\n         * @param {string} localPath - local path to the folder\n         * @param {string} [zipPath] - optional path inside zip\n         * @param {(RegExp|function)} [filter] - optional RegExp or Function if files match will be included.\n         */\n        addLocalFolder: function (localPath, zipPath, filter) {\n            // Prepare filter\n            filter = filenameFilter(filter);\n\n            // fix ZipPath\n            zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n            // normalize the path first\n            localPath = pth.normalize(localPath);\n\n            if (filetools.fs.existsSync(localPath)) {\n                const items = filetools.findFiles(localPath);\n                const self = this;\n\n                if (items.length) {\n                    for (const filepath of items) {\n                        const p = pth.join(zipPath, relativePath(localPath, filepath));\n                        if (filter(p)) {\n                            self.addLocalFile(filepath, pth.dirname(p));\n                        }\n                    }\n                }\n            } else {\n                throw Utils.Errors.FILE_NOT_FOUND(localPath);\n            }\n        },\n\n        /**\n         * Asynchronous addLocalFolder\n         * @param {string} localPath\n         * @param {callback} callback\n         * @param {string} [zipPath] optional path inside zip\n         * @param {RegExp|function} [filter] optional RegExp or Function if files match will\n         *               be included.\n         */\n        addLocalFolderAsync: function (localPath, callback, zipPath, filter) {\n            // Prepare filter\n            filter = filenameFilter(filter);\n\n            // fix ZipPath\n            zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n            // normalize the path first\n            localPath = pth.normalize(localPath);\n\n            var self = this;\n            filetools.fs.open(localPath, \"r\", function (err) {\n                if (err && err.code === \"ENOENT\") {\n                    callback(undefined, Utils.Errors.FILE_NOT_FOUND(localPath));\n                } else if (err) {\n                    callback(undefined, err);\n                } else {\n                    var items = filetools.findFiles(localPath);\n                    var i = -1;\n\n                    var next = function () {\n                        i += 1;\n                        if (i < items.length) {\n                            var filepath = items[i];\n                            var p = relativePath(localPath, filepath).split(\"\\\\\").join(\"/\"); //windows fix\n                            p = p\n                                .normalize(\"NFD\")\n                                .replace(/[\\u0300-\\u036f]/g, \"\")\n                                .replace(/[^\\x20-\\x7E]/g, \"\"); // accent fix\n                            if (filter(p)) {\n                                filetools.fs.stat(filepath, function (er0, stats) {\n                                    if (er0) callback(undefined, er0);\n                                    if (stats.isFile()) {\n                                        filetools.fs.readFile(filepath, function (er1, data) {\n                                            if (er1) {\n                                                callback(undefined, er1);\n                                            } else {\n                                                self.addFile(zipPath + p, data, \"\", stats);\n                                                next();\n                                            }\n                                        });\n                                    } else {\n                                        self.addFile(zipPath + p + \"/\", Buffer.alloc(0), \"\", stats);\n                                        next();\n                                    }\n                                });\n                            } else {\n                                process.nextTick(() => {\n                                    next();\n                                });\n                            }\n                        } else {\n                            callback(true, undefined);\n                        }\n                    };\n\n                    next();\n                }\n            });\n        },\n\n        /**\n         * Adds a local directory and all its nested files and directories to the archive\n         *\n         * @param {object | string} options - options object, if it is string it us used as localPath.\n         * @param {string} options.localPath - Local path to the folder.\n         * @param {string} [options.zipPath] - optional path inside zip.\n         * @param {RegExp|function} [options.filter] - optional RegExp or Function if files match will be included.\n         * @param {function|string} [options.namefix] - optional function to help fix filename\n         * @param {doneCallback} callback - The callback that handles the response.\n         *\n         */\n        addLocalFolderAsync2: function (options, callback) {\n            const self = this;\n            options = typeof options === \"object\" ? options : { localPath: options };\n            // Resolve the local filesystem path with the platform resolver. Do NOT\n            // run it through fixPath: that normalizes ZIP-internal paths to POSIX\n            // and prepends \"/\", which turns a Windows path like C:\\dir into\n            // \\C:\\dir, so readdir finds nothing and the archive comes out empty.\n            const localPath = pth.resolve(options.localPath);\n            let { zipPath, filter, namefix } = options;\n\n            if (filter instanceof RegExp) {\n                filter = (function (rx) {\n                    return function (filename) {\n                        return rx.test(filename);\n                    };\n                })(filter);\n            } else if (\"function\" !== typeof filter) {\n                filter = function () {\n                    return true;\n                };\n            }\n\n            // fix ZipPath\n            zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n            // Check Namefix function\n            if (namefix === \"latin1\") {\n                namefix = (str) =>\n                    str\n                        .normalize(\"NFD\")\n                        .replace(/[\\u0300-\\u036f]/g, \"\")\n                        .replace(/[^\\x20-\\x7E]/g, \"\"); // accent fix (latin1 characers only)\n            }\n\n            if (typeof namefix !== \"function\") namefix = (str) => str;\n\n            // internal, create relative path + fix the name\n            const relPathFix = (entry) => pth.join(zipPath, namefix(relativePath(localPath, entry)));\n            const fileNameFix = (entry) => pth.win32.basename(pth.win32.normalize(namefix(entry)));\n\n            filetools.fs.open(localPath, \"r\", function (err) {\n                if (err && err.code === \"ENOENT\") {\n                    // callback is (err, done); errors belong in the first argument,\n                    // otherwise addLocalFolderPromise treats the error as \"done\" and\n                    // resolves instead of rejecting.\n                    callback(Utils.Errors.FILE_NOT_FOUND(localPath), false);\n                } else if (err) {\n                    callback(err, false);\n                } else {\n                    filetools.findFilesAsync(localPath, function (err, fileEntries) {\n                        if (err) return callback(err, false);\n                        fileEntries = fileEntries.filter((dir) => filter(relPathFix(dir)));\n                        // Nothing to add (empty folder or everything filtered out) is a\n                        // success, not an error. Report done and stop, otherwise the\n                        // reduce below runs and the callback fires a second time -- and\n                        // signalling done=false left addLocalFolderPromise hanging.\n                        if (!fileEntries.length) return callback(undefined, true);\n\n                        setImmediate(\n                            fileEntries.reverse().reduce(function (next, entry) {\n                                return function (err, done) {\n                                    if (err || done === false) return setImmediate(next, err, false);\n\n                                    self.addLocalFileAsync(\n                                        {\n                                            localPath: entry,\n                                            zipPath: pth.dirname(relPathFix(entry)),\n                                            zipName: fileNameFix(entry)\n                                        },\n                                        next\n                                    );\n                                };\n                            }, callback)\n                        );\n                    });\n                }\n            });\n        },\n\n        /**\n         * Adds a local directory and all its nested files and directories to the archive\n         *\n         * @param {string} localPath - path where files will be extracted\n         * @param {object} props - optional properties\n         * @param {string} [props.zipPath] - optional path inside zip\n         * @param {RegExp|function} [props.filter] - optional RegExp or Function if files match will be included.\n         * @param {function|string} [props.namefix] - optional function to help fix filename\n         */\n        addLocalFolderPromise: function (localPath, props) {\n            return new Promise((resolve, reject) => {\n                this.addLocalFolderAsync2(Object.assign({ localPath }, props), (err, done) => {\n                    if (err) return reject(err);\n                    if (done) resolve(this);\n                });\n            });\n        },\n\n        /**\n         * Allows you to create a entry (file or directory) in the zip file.\n         * If you want to create a directory the entryName must end in / and a null buffer should be provided.\n         * Comment and attributes are optional\n         *\n         * @param {string} entryName\n         * @param {Buffer | string} content - file content as buffer or utf8 coded string\n         * @param {string} [comment] - file comment\n         * @param {number | object} [attr] - number as unix file permissions, object as filesystem Stats object\n         */\n        addFile: function (entryName, content, comment, attr) {\n            entryName = zipnamefix(entryName);\n            let entry = getEntry(entryName);\n            const update = entry != null;\n\n            // prepare new entry\n            if (!update) {\n                entry = new ZipEntry(opts);\n                entry.entryName = entryName;\n            }\n            entry.comment = comment || \"\";\n\n            const isStat = \"object\" === typeof attr && attr instanceof filetools.fs.Stats;\n\n            // last modification time from file stats\n            if (isStat) {\n                entry.header.time = attr.mtime;\n            }\n\n            // Set file attribute\n            var fileattr = entry.isDirectory ? 0x10 : 0; // (MS-DOS directory flag)\n\n            // extended attributes field for Unix\n            // set file type either S_IFDIR / S_IFREG\n            let unix = entry.isDirectory ? 0x4000 : 0x8000;\n\n            if (isStat) {\n                // File attributes from file stats\n                unix |= 0xfff & attr.mode;\n            } else if (\"number\" === typeof attr) {\n                // attr from given attr values\n                unix |= 0xfff & attr;\n            } else {\n                // Default values:\n                unix |= entry.isDirectory ? 0o755 : 0o644; // permissions (drwxr-xr-x) or (-r-wr--r--)\n            }\n\n            fileattr = (fileattr | (unix << 16)) >>> 0; // add attributes\n\n            entry.attr = fileattr;\n\n            entry.setData(content);\n            if (!update) _zip.setEntry(entry);\n\n            return entry;\n        },\n\n        /**\n         * Returns an array of ZipEntry objects representing the files and folders inside the archive\n         *\n         * @param {string} [password]\n         * @returns Array\n         */\n        getEntries: function (password) {\n            _zip.password = password;\n            return _zip ? _zip.entries : [];\n        },\n\n        /**\n         * Returns a ZipEntry object representing the file or folder specified by ``name``.\n         *\n         * @param {string} name\n         * @return ZipEntry\n         */\n        getEntry: function (/**String*/ name) {\n            return getEntry(name);\n        },\n\n        getEntryCount: function () {\n            return _zip.getEntryCount();\n        },\n\n        forEach: function (callback) {\n            return _zip.forEach(callback);\n        },\n\n        /**\n         * Extracts the given entry to the given targetPath\n         * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted\n         *\n         * @param {string|ZipEntry} entry - ZipEntry object or String with the full path of the entry\n         * @param {string} targetPath - Target folder where to write the file\n         * @param {boolean} [maintainEntryPath=true] - If maintainEntryPath is true and the entry is inside a folder, the entry folder will be created in targetPath as well. Default is TRUE\n         * @param {boolean} [overwrite=false] - If the file already exists at the target path, the file will be overwriten if this is true.\n         * @param {boolean} [keepOriginalPermission=false] - The file will be set as the permission from the entry if this is true.\n         * @param {string} [outFileName] - String If set will override the filename of the extracted file (Only works if the entry is a file)\n         *\n         * @return Boolean\n         */\n        extractEntryTo: function (entry, targetPath, maintainEntryPath, overwrite, keepOriginalPermission, outFileName) {\n            overwrite = get_Bool(false, overwrite);\n            keepOriginalPermission = get_Bool(false, keepOriginalPermission);\n            maintainEntryPath = get_Bool(true, maintainEntryPath);\n            outFileName = get_Str(keepOriginalPermission, outFileName);\n\n            var item = getEntry(entry);\n            if (!item) {\n                throw Utils.Errors.NO_ENTRY();\n            }\n\n            var entryName = canonical(item.entryName);\n\n            var target = sanitize(targetPath, outFileName && !item.isDirectory ? canonical(outFileName) : maintainEntryPath ? entryName : pth.basename(entryName));\n\n            if (item.isDirectory) {\n                var children = _zip.getEntryChildren(item);\n                children.forEach(function (child) {\n                    if (child.isDirectory) return;\n                    var content = child.getData();\n                    if (!content) {\n                        throw Utils.Errors.CANT_EXTRACT_FILE();\n                    }\n                    // When not maintaining the full entry path, keep each child's path\n                    // relative to the extracted directory (drop the directory's own\n                    // prefix) instead of flattening every file to its basename, which\n                    // collapsed subdirectories together (issue #306).\n                    var name = canonical(maintainEntryPath ? child.entryName : child.entryName.substring(item.entryName.length));\n                    var childName = sanitize(targetPath, name);\n                    // reject writing through a pre-existing symlink inside the target\n                    filetools.assertPathSafe(targetPath, childName);\n                    // The reverse operation for attr depend on method addFile()\n                    const fileAttr = keepOriginalPermission ? child.header.fileAttr : undefined;\n                    filetools.writeFileTo(childName, content, overwrite, fileAttr);\n                });\n                return true;\n            }\n\n            var content = item.getData(_zip.password);\n            if (!content) throw Utils.Errors.CANT_EXTRACT_FILE();\n\n            // reject writing through a pre-existing symlink inside the target\n            filetools.assertPathSafe(targetPath, target);\n\n            if (filetools.fs.existsSync(target) && !overwrite) {\n                throw Utils.Errors.CANT_OVERRIDE();\n            }\n            // The reverse operation for attr depend on method addFile()\n            const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n            filetools.writeFileTo(target, content, overwrite, fileAttr);\n\n            return true;\n        },\n\n        /**\n         * Test the archive\n         * @param {string} [pass]\n         */\n        test: function (pass) {\n            if (!_zip) {\n                return false;\n            }\n\n            for (var entry of _zip.entries) {\n                try {\n                    if (entry.isDirectory) {\n                        continue;\n                    }\n                    // was `_zip.entries[entry]` (indexing the array with an entry\n                    // object -> undefined -> threw -> test() always returned false)\n                    var content = entry.getData(pass);\n                    if (!content) {\n                        return false;\n                    }\n                } catch (err) {\n                    return false;\n                }\n            }\n            return true;\n        },\n\n        /**\n         * Extracts the entire archive to the given location\n         *\n         * @param {string} targetPath Target location\n         * @param {boolean} [overwrite=false] If the file already exists at the target path, the file will be overwriten if this is true.\n         *                  Default is FALSE\n         * @param {boolean} [keepOriginalPermission=false] The file will be set as the permission from the entry if this is true.\n         *                  Default is FALSE\n         * @param {string|Buffer} [pass] password\n         */\n        extractAllTo: function (targetPath, overwrite, keepOriginalPermission, pass) {\n            keepOriginalPermission = get_Bool(false, keepOriginalPermission);\n            pass = get_Str(keepOriginalPermission, pass);\n            overwrite = get_Bool(false, overwrite);\n            if (!_zip) throw Utils.Errors.NO_ZIP();\n\n            const dirEntries = [];\n            _zip.entries.forEach(function (entry) {\n                var entryName = sanitize(targetPath, canonical(entry.entryName));\n                // reject writing through a pre-existing symlink inside the target\n                filetools.assertPathSafe(targetPath, entryName);\n                if (entry.isDirectory) {\n                    filetools.makeDir(entryName);\n                    // defer restoring the directory permission until its files are written\n                    if (keepOriginalPermission) dirEntries.push({ path: entryName, attr: entry.header.fileAttr });\n                    return;\n                }\n                var content = entry.getData(pass);\n                if (!content) {\n                    throw Utils.Errors.CANT_EXTRACT_FILE();\n                }\n                // The reverse operation for attr depend on method addFile()\n                const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n                filetools.writeFileTo(entryName, content, overwrite, fileAttr);\n                try {\n                    // best-effort: an invalid date in the archive or a filesystem that\n                    // rejects utimes must not fail extraction of already-written content (issue #379)\n                    filetools.fs.utimesSync(entryName, entry.header.time, entry.header.time);\n                } catch (err) {\n                    /* ignore timestamp failures */\n                }\n            });\n\n            applyDirAttributes(dirEntries);\n        },\n\n        /**\n         * Asynchronous extractAllTo\n         *\n         * @param {string} targetPath Target location\n         * @param {boolean} [overwrite=false] If the file already exists at the target path, the file will be overwriten if this is true.\n         *                  Default is FALSE\n         * @param {boolean} [keepOriginalPermission=false] The file will be set as the permission from the entry if this is true.\n         *                  Default is FALSE\n         * @param {function} callback The callback will be executed when all entries are extracted successfully or any error is thrown.\n         */\n        extractAllToAsync: function (targetPath, overwrite, keepOriginalPermission, callback) {\n            callback = get_Fun(overwrite, keepOriginalPermission, callback);\n            keepOriginalPermission = get_Bool(false, keepOriginalPermission);\n            overwrite = get_Bool(false, overwrite);\n            if (!callback) {\n                return new Promise((resolve, reject) => {\n                    this.extractAllToAsync(targetPath, overwrite, keepOriginalPermission, function (err) {\n                        if (err) {\n                            reject(err);\n                        } else {\n                            resolve(this);\n                        }\n                    });\n                });\n            }\n            if (!_zip) {\n                callback(Utils.Errors.NO_ZIP());\n                return;\n            }\n\n            targetPath = pth.resolve(targetPath);\n            // convert entryName to\n            const getPath = (entry) => sanitize(targetPath, pth.normalize(canonical(entry.entryName)));\n            const getError = (msg, file) => new Error(msg + ': \"' + file + '\"');\n\n            // separate directories from files\n            const dirEntries = [];\n            const fileEntries = [];\n            _zip.entries.forEach((e) => {\n                if (e.isDirectory) {\n                    dirEntries.push(e);\n                } else {\n                    fileEntries.push(e);\n                }\n            });\n\n            // Create directory entries first synchronously\n            // this prevents race condition and assures folders are there before writing files\n            const deferredDirAttr = [];\n            for (const entry of dirEntries) {\n                const dirPath = getPath(entry);\n                // The reverse operation for attr depend on method addFile()\n                const dirAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n                try {\n                    // reject writing through a pre-existing symlink inside the target\n                    filetools.assertPathSafe(targetPath, dirPath);\n                    filetools.makeDir(dirPath);\n                } catch (er) {\n                    callback(getError(\"Unable to create folder\", dirPath));\n                    continue;\n                }\n                // defer restoring the directory permission until its files are written:\n                // a restrictive mode applied now would block writing them\n                if (dirAttr) deferredDirAttr.push({ path: dirPath, attr: dirAttr });\n                try {\n                    // in unix timestamp will change if files are later added to folder, but still.\n                    // best-effort: a utimes failure must not abort extraction (issue #379)\n                    filetools.fs.utimesSync(dirPath, entry.header.time, entry.header.time);\n                } catch (er) {\n                    /* ignore timestamp failures */\n                }\n            }\n\n            // restore directory permissions once every file has been extracted\n            const done = (err) => {\n                if (!err) {\n                    try {\n                        applyDirAttributes(deferredDirAttr);\n                    } catch (er) {\n                        return callback(getError(\"Unable to set folder permissions\", er.path || \"\"));\n                    }\n                }\n                callback(err);\n            };\n\n            fileEntries.reverse().reduce(function (next, entry) {\n                return function (err) {\n                    if (err) {\n                        next(err);\n                    } else {\n                        const entryName = pth.normalize(canonical(entry.entryName));\n                        const filePath = sanitize(targetPath, entryName);\n                        try {\n                            // reject writing through a pre-existing symlink inside the target\n                            filetools.assertPathSafe(targetPath, filePath);\n                        } catch (er) {\n                            return next(er);\n                        }\n                        entry.getDataAsync(function (content, err_1) {\n                            if (err_1) {\n                                next(err_1);\n                            } else if (!content) {\n                                next(Utils.Errors.CANT_EXTRACT_FILE());\n                            } else {\n                                // The reverse operation for attr depend on method addFile()\n                                const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n                                filetools.writeFileToAsync(filePath, content, overwrite, fileAttr, function (succ) {\n                                    if (!succ) {\n                                        return next(getError(\"Unable to write file\", filePath));\n                                    }\n                                    filetools.fs.utimes(filePath, entry.header.time, entry.header.time, function () {\n                                        // best-effort: a utimes failure must not abort extraction\n                                        // of already-written content (issue #379)\n                                        next();\n                                    });\n                                });\n                            }\n                        });\n                    }\n                };\n            }, done)();\n        },\n\n        /**\n         * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip\n         *\n         * @param {string} targetFileName\n         * @param {function} callback\n         */\n        writeZip: function (targetFileName, callback) {\n            if (arguments.length === 1) {\n                if (typeof targetFileName === \"function\") {\n                    callback = targetFileName;\n                    targetFileName = \"\";\n                }\n            }\n\n            if (!targetFileName && opts.filename) {\n                targetFileName = opts.filename;\n            }\n            if (!targetFileName) return;\n\n            var zipData = _zip.compressToBuffer();\n            if (zipData) {\n                var ok = filetools.writeFileTo(targetFileName, zipData, true);\n                if (typeof callback === \"function\") callback(!ok ? new Error(\"failed\") : null, \"\");\n            }\n        },\n\n        /**\n         *\n         * @param {string} targetFileName\n         * @param {object} [props]\n         * @param {boolean} [props.overwrite=true] If the file already exists at the target path, the file will be overwriten if this is true.\n         * @param {boolean} [props.perm] The file will be set as the permission from the entry if this is true.\n\n         * @returns {Promise<void>}\n         */\n        writeZipPromise: function (/**String*/ targetFileName, /* object */ props) {\n            const { overwrite, perm } = Object.assign({ overwrite: true }, props);\n\n            return new Promise((resolve, reject) => {\n                // find file name\n                if (!targetFileName && opts.filename) targetFileName = opts.filename;\n                if (!targetFileName) reject(\"ADM-ZIP: ZIP File Name Missing\");\n\n                this.toBufferPromise().then((zipData) => {\n                    const ret = (done) => (done ? resolve(done) : reject(\"ADM-ZIP: Wasn't able to write zip file\"));\n                    filetools.writeFileToAsync(targetFileName, zipData, overwrite, perm, ret);\n                }, reject);\n            });\n        },\n\n        /**\n         * @returns {Promise<Buffer>} A promise to the Buffer.\n         */\n        toBufferPromise: function () {\n            return new Promise((resolve, reject) => {\n                _zip.toAsyncBuffer(resolve, reject);\n            });\n        },\n\n        /**\n         * Returns the content of the entire zip file as a Buffer object\n         *\n         * @prop {function} [onSuccess]\n         * @prop {function} [onFail]\n         * @prop {function} [onItemStart]\n         * @prop {function} [onItemEnd]\n         * @returns {Buffer}\n         */\n        toBuffer: function (onSuccess, onFail, onItemStart, onItemEnd) {\n            if (typeof onSuccess === \"function\") {\n                _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);\n                return null;\n            }\n            return _zip.compressToBuffer();\n        }\n    };\n};\n", "import { logFailure, logMessage } from \"../../../bundler/log.js\";\n\nexport class LocalDeploymentError extends Error {}\n\nexport function printLocalDeploymentOnError() {\n  // Note: Not printing the error message here since it should already be printed by\n  // ctx.crash.\n  logFailure(`Hit an error while running local deployment.`);\n  logMessage(\n    \"Your error has been reported to our team, and we'll be working on it.\",\n  );\n}\n", "import { version as npmVersion } from \"../../version.js\";\nimport AdmZip from \"adm-zip\";\nimport { Context } from \"../../../bundler/context.js\";\nimport {\n  logFinishedStep,\n  startLogProgress,\n  logVerbose,\n  logMessage,\n  logError,\n  logWarning,\n} from \"../../../bundler/log.js\";\nimport {\n  dashboardZip,\n  executablePath,\n  versionedBinaryDir,\n  dashboardOutDir,\n  resetDashboardDir,\n  loadGlobalDashboardConfig,\n  saveGlobalDashboardConfig,\n  executableName,\n} from \"./filePaths.js\";\nimport child_process from \"child_process\";\nimport { promisify } from \"util\";\nimport { Readable } from \"stream\";\nimport { TempPath, nodeFs, withTmpDir } from \"../../../bundler/fs.js\";\nimport { recursivelyDelete, recursivelyCopy } from \"../fsUtils.js\";\nimport { LocalDeploymentError } from \"./errors.js\";\nimport type { ProgressBarInstance } from \"../../../vendor/progress/index.js\";\nimport path from \"path\";\nimport { isValidBackendVersion } from \"./utils.js\";\n\nasync function makeExecutable(p: string) {\n  switch (process.platform) {\n    case \"darwin\":\n    case \"linux\": {\n      await promisify(child_process.exec)(`chmod +x ${p}`);\n    }\n  }\n}\n\nexport async function ensureBackendBinaryDownloaded(\n  ctx: Context,\n  version:\n    | { kind: \"latest\"; allowedVersion?: string | undefined }\n    | { kind: \"version\"; version: string },\n): Promise<{ binaryPath: string; version: string }> {\n  if (version.kind === \"version\") {\n    return _ensureBackendBinaryDownloaded(ctx, version.version);\n  }\n  if (version.allowedVersion) {\n    const latestVersionWithBinary = await findLatestVersionWithBinary(\n      ctx,\n      false,\n    );\n    if (latestVersionWithBinary === null) {\n      logWarning(\n        `Failed to get latest version from GitHub, using downloaded version ${version.allowedVersion}`,\n      );\n      return _ensureBackendBinaryDownloaded(ctx, version.allowedVersion);\n    }\n    return _ensureBackendBinaryDownloaded(ctx, latestVersionWithBinary);\n  }\n  const latestVersionWithBinary = await findLatestVersionWithBinary(ctx, true);\n  return _ensureBackendBinaryDownloaded(ctx, latestVersionWithBinary);\n}\n\nasync function _ensureBackendBinaryDownloaded(\n  ctx: Context,\n  version: string,\n): Promise<{ binaryPath: string; version: string }> {\n  await assertValidBackendVersion(ctx, version);\n  logVerbose(`Ensuring backend binary downloaded for version ${version}`);\n  const existingDownload = await checkForExistingDownload(ctx, version);\n  if (existingDownload !== null) {\n    logVerbose(`Using existing download at ${existingDownload}`);\n    return {\n      binaryPath: existingDownload,\n      version,\n    };\n  }\n  const binaryPath = await downloadBackendBinary(ctx, version);\n  return { version, binaryPath };\n}\n\nasync function assertValidBackendVersion(ctx: Context, version: string) {\n  if (!isValidBackendVersion(version)) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"Invalid local backend version\",\n      errForSentry: new LocalDeploymentError(\n        `Invalid local backend version: ${JSON.stringify(version)}`,\n      ),\n    });\n  }\n}\n\nlet cachedLatestVersion: string | null = null;\n\n/**\n * Finds the latest version of the Convex local backend through\n * version.convex.dev, caching the resolved version for the lifetime of the\n * process so repeated lookups hit the network at most once.\n *\n * Wraps {@link _findLatestVersionWithBinary}. Only successful (non-null)\n * results are cached, so a failed `requireSuccess: false` lookup can be retried\n * by a later call.\n */\nexport async function findLatestVersionWithBinary<\n  RequireSuccess extends boolean,\n>(\n  ctx: Context,\n  requireSuccess: RequireSuccess,\n): Promise<RequireSuccess extends true ? string : string | null> {\n  if (cachedLatestVersion !== null) {\n    return cachedLatestVersion;\n  }\n  const result = await _findLatestVersionWithBinary(ctx, requireSuccess);\n  if (result !== null) {\n    cachedLatestVersion = result;\n  }\n  return result;\n}\n\n/**\n * Finds the latest version of the Convex local backend\n * through version.convex.dev\n */\nexport async function _findLatestVersionWithBinary<\n  RequireSuccess extends boolean,\n>(\n  ctx: Context,\n  requireSuccess: RequireSuccess,\n): Promise<RequireSuccess extends true ? string : string | null> {\n  // These shouldn't crash when there's a perfectly good binary already available.\n  async function maybeCrash(\n    ...args: Parameters<typeof ctx.crash>\n  ): Promise<RequireSuccess extends true ? never : null> {\n    if (requireSuccess) {\n      return await ctx.crash(...args);\n    }\n    if (args[0].printedMessage) {\n      logError(args[0].printedMessage);\n    } else {\n      logError(\"Error fetching latest version\");\n    }\n    return null as RequireSuccess extends true ? never : null;\n  }\n\n  logVerbose(\"Fetching latest backend version from version API\");\n\n  try {\n    const response = await fetch(\n      \"https://version.convex.dev/v1/local_backend_version\",\n      {\n        headers: { \"Convex-Client\": `npm-cli-${npmVersion}` },\n      },\n    );\n\n    if (!response.ok) {\n      const text = await response.text();\n      return await maybeCrash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `version.convex.dev returned ${response.status}: ${text}`,\n        errForSentry: new LocalDeploymentError(\n          `version.convex.dev returned ${response.status}: ${text}`,\n        ),\n      });\n    }\n\n    const data = (await response.json()) as { version: string };\n    if (!data.version) {\n      return await maybeCrash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: \"Invalid response missing version field\",\n        errForSentry: new LocalDeploymentError(\n          \"Invalid response missing version field\",\n        ),\n      });\n    }\n\n    logVerbose(`Latest backend version is ${data.version}`);\n    return data.version;\n  } catch (e) {\n    return maybeCrash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"Failed to fetch latest backend version\",\n      errForSentry: new LocalDeploymentError(e?.toString()),\n    });\n  }\n}\n\n/**\n *\n * @param ctx\n * @param version\n * @returns The binary path if it exists, or null\n */\nasync function checkForExistingDownload(\n  ctx: Context,\n  version: string,\n): Promise<string | null> {\n  const destDir = versionedBinaryDir(version);\n  if (!ctx.fs.exists(destDir)) {\n    return null;\n  }\n  const p = executablePath(version);\n  if (!ctx.fs.exists(p)) {\n    // This directory isn't what we expected. Remove it.\n    recursivelyDelete(ctx, destDir, { force: true });\n    return null;\n  }\n  await makeExecutable(p);\n  return p;\n}\n\nasync function downloadBackendBinary(\n  ctx: Context,\n  version: string,\n): Promise<string> {\n  const downloadPath = getDownloadPath();\n  // Note: We validate earlier that there's a binary for this platform at the specified version,\n  // so in practice, we should never hit errors here.\n  if (downloadPath === null) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Unsupported platform ${process.platform} and architecture ${process.arch} for local deployment.`,\n    });\n  }\n  await downloadZipFile(ctx, {\n    version,\n    filename: downloadPath,\n    nameForLogging: \"Convex backend binary\",\n    onDownloadComplete: async (ctx, unzippedPath) => {\n      const name = executableName();\n      const tempExecPath = path.join(unzippedPath, name);\n      await makeExecutable(tempExecPath);\n      logVerbose(\"Marked as executable\");\n      ctx.fs.mkdir(versionedBinaryDir(version), { recursive: true });\n      ctx.fs.swapTmpFile(tempExecPath as TempPath, executablePath(version));\n    },\n  });\n  return executablePath(version);\n}\n\n/**\n * Get the artifact name, composed of the target convex-local-backend and\n * the Rust \"target triple\" appropriate for the current machine.\n **/\nfunction getDownloadPath() {\n  switch (process.platform) {\n    case \"darwin\":\n      if (process.arch === \"arm64\") {\n        return \"convex-local-backend-aarch64-apple-darwin.zip\";\n      } else if (process.arch === \"x64\") {\n        return \"convex-local-backend-x86_64-apple-darwin.zip\";\n      }\n      break;\n    case \"linux\":\n      if (process.arch === \"arm64\") {\n        return \"convex-local-backend-aarch64-unknown-linux-gnu.zip\";\n      } else if (process.arch === \"x64\") {\n        return \"convex-local-backend-x86_64-unknown-linux-gnu.zip\";\n      }\n      break;\n    case \"win32\":\n      return \"convex-local-backend-x86_64-pc-windows-msvc.zip\";\n  }\n  return null;\n}\n\nfunction getGithubDownloadUrl(version: string, filename: string) {\n  return `https://github.com/convex/convex-backend/releases/download/${version}/${filename}`;\n}\n\nasync function downloadZipFile(\n  ctx: Context,\n  args: {\n    version: string;\n    filename: string;\n    nameForLogging: string;\n    onDownloadComplete: (ctx: Context, unzippedPath: TempPath) => Promise<void>;\n  },\n) {\n  const { version, filename, nameForLogging } = args;\n  const url = getGithubDownloadUrl(version, filename);\n  const response = await fetch(url);\n  const contentLength = parseInt(\n    response.headers.get(\"content-length\") ?? \"\",\n    10,\n  );\n  let progressBar: ProgressBarInstance | null = null;\n  if (!isNaN(contentLength) && contentLength !== 0 && process.stdout.isTTY) {\n    progressBar = startLogProgress(\n      `Downloading ${nameForLogging} [:bar] :percent :etas`,\n      {\n        width: 40,\n        total: contentLength,\n        clear: true,\n      },\n    );\n  } else {\n    logMessage(`Downloading ${nameForLogging}`);\n  }\n  if (response.status !== 200) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `File not found at ${url}.`,\n    });\n  }\n  await withTmpDir(async (tmpDir) => {\n    logVerbose(`Created tmp dir ${tmpDir.path}`);\n    // Create a file in the tmp dir\n    const zipLocation = tmpDir.registerTempPath(null);\n    const readable = Readable.fromWeb(response.body! as any);\n    await tmpDir.writeFileStream(zipLocation, readable, (chunk: any) => {\n      if (progressBar !== null) {\n        progressBar.tick(chunk.length);\n      }\n    });\n    if (progressBar) {\n      progressBar.terminate();\n      logFinishedStep(`Downloaded ${nameForLogging}`);\n    }\n    logVerbose(\"Downloaded zip file\");\n\n    const zip = new AdmZip(zipLocation);\n    await withTmpDir(async (versionDir) => {\n      logVerbose(`Created tmp dir ${versionDir.path}`);\n      zip.extractAllTo(versionDir.path, true);\n      logVerbose(\"Extracted from zip file\");\n      await args.onDownloadComplete(ctx, versionDir.path);\n    });\n  });\n  return executablePath(version);\n}\n\nexport async function ensureDashboardDownloaded(ctx: Context, version: string) {\n  await assertValidBackendVersion(ctx, version);\n  const config = loadGlobalDashboardConfig(ctx);\n  if (config !== null && config.version === version) {\n    return;\n  }\n  await resetDashboardDir(ctx);\n  await _ensureDashboardDownloaded(ctx, version);\n  // Record which version is now in `dashboardOutDir()`\n  // so we can skip the download next time.\n  saveGlobalDashboardConfig(ctx, { version });\n}\nasync function _ensureDashboardDownloaded(ctx: Context, version: string) {\n  const zipLocation = dashboardZip();\n  if (ctx.fs.exists(zipLocation)) {\n    ctx.fs.unlink(zipLocation);\n  }\n  const outDir = dashboardOutDir();\n  await downloadZipFile(ctx, {\n    version,\n    filename: \"dashboard.zip\",\n    nameForLogging: \"Convex dashboard\",\n    onDownloadComplete: async (ctx, unzippedPath) => {\n      await recursivelyCopy(ctx, nodeFs, unzippedPath, outDir);\n      logVerbose(\"Copied into out dir\");\n    },\n  });\n  return outDir;\n}\n", "import { Context } from \"../../../bundler/context.js\";\nimport { logVerbose, logMessage } from \"../../../bundler/log.js\";\nimport {\n  LocalDeploymentKind,\n  deploymentStateDir,\n  loadDeploymentConfig,\n  loadUuidForAnonymousUser,\n} from \"./filePaths.js\";\nimport { ensureBackendBinaryDownloaded } from \"./download.js\";\nimport path from \"path\";\nimport child_process from \"child_process\";\nimport detect from \"detect-port\";\nimport { LOCAL_BACKEND_SENTRY_DSN } from \"../utils/sentry.js\";\nimport { createHash } from \"crypto\";\nimport { LocalDeploymentError } from \"./errors.js\";\nimport { LOCAL_BACKEND_INSTANCE_SECRET, releaseDate } from \"./utils.js\";\nimport { DeploymentType, DetailedDeploymentCredentials } from \"../api.js\";\nimport { productionProvisionHost, provisionHost } from \"../config.js\";\n\nconst DEFAULT_STARTUP_TIMEOUT_SECS = 30;\nconst FIRST_CONTROL_PLANE_AUTH_BACKEND_VERSION =\n  \"precompiled-2026-09-15-4e9b83a\";\n\nexport function _backendSupportsControlPlaneAuth(version: string): boolean {\n  if (version === FIRST_CONTROL_PLANE_AUTH_BACKEND_VERSION) {\n    return true;\n  }\n  const backendDate = releaseDate(version);\n  const firstSupportedDate = releaseDate(\n    FIRST_CONTROL_PLANE_AUTH_BACKEND_VERSION,\n  );\n  return (\n    backendDate !== null &&\n    firstSupportedDate !== null &&\n    backendDate > firstSupportedDate\n  );\n}\n\nasync function parseStartupTimeoutSecs(ctx: Context): Promise<number> {\n  const raw = process.env.CONVEX_LOCAL_BACKEND_STARTUP_TIMEOUT_SECS;\n  if (raw === undefined) {\n    return DEFAULT_STARTUP_TIMEOUT_SECS;\n  }\n  const parsed = Number(raw);\n  if (!Number.isFinite(parsed) || parsed <= 0) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Invalid CONVEX_LOCAL_BACKEND_STARTUP_TIMEOUT_SECS=${JSON.stringify(raw)}: expected a positive number.`,\n    });\n  }\n  return parsed;\n}\n\nexport async function runLocalBackend(\n  ctx: Context,\n  args: {\n    ports: {\n      cloud: number;\n      site: number;\n    };\n    deploymentKind: LocalDeploymentKind;\n    deploymentName: string;\n    binaryPath: string;\n    backendVersion: string;\n    instanceSecret: string;\n    isLatestVersion: boolean;\n  },\n): Promise<{\n  cleanupHandle: string;\n}> {\n  const { ports } = args;\n  const deploymentDir = deploymentStateDir(\n    ctx,\n    args.deploymentKind,\n    args.deploymentName,\n  );\n  ctx.fs.mkdir(deploymentDir, { recursive: true });\n  const deploymentNameSha = createHash(\"sha256\")\n    .update(args.deploymentName)\n    .digest(\"hex\");\n  const commandArgs = [\n    \"--port\",\n    ports.cloud.toString(),\n    \"--site-proxy-port\",\n    ports.site.toString(),\n    \"--sentry-identifier\",\n    deploymentNameSha,\n    \"--instance-name\",\n    args.deploymentName,\n    \"--instance-secret\",\n    args.instanceSecret,\n    \"--local-storage\",\n    path.join(deploymentDir, \"convex_local_storage\"),\n    \"--beacon-tag\",\n    selfHostedEventTag(args.deploymentKind),\n    path.join(deploymentDir, \"convex_local_backend.sqlite3\"),\n  ];\n  if (args.isLatestVersion) {\n    // CLI args that were added in later versions of backend go here instead of above\n    // since the CLI may run older versions of backend (e.g. when upgrading).\n    if (args.deploymentKind === \"anonymous\") {\n      const uuid = loadUuidForAnonymousUser(ctx);\n      if (uuid !== null) {\n        commandArgs.push(\n          \"--beacon-fields\",\n          JSON.stringify({\n            override_uuid: uuid,\n          }),\n        );\n      }\n    }\n  }\n\n  // Check that binary works by running with --help\n  try {\n    const result = child_process.spawnSync(args.binaryPath, [\n      ...commandArgs,\n      \"--help\",\n    ]);\n    if (result.status === 3221225781) {\n      const message =\n        \"Local backend exited because shared libraries are missing. These may include libraries installed via 'Microsoft Visual C++ Redistributable for Visual Studio.'\";\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: message,\n        errForSentry: new LocalDeploymentError(\n          \"Local backend exited with code 3221225781\",\n        ),\n      });\n    } else if (result.status !== 0) {\n      const message = `Failed to run backend binary, exit code ${result.status}, error: ${result.stderr === null ? \"null\" : result.stderr.toString()}`;\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: message,\n        errForSentry: new LocalDeploymentError(message),\n      });\n    }\n  } catch (e) {\n    const message = `Failed to run backend binary: ${(e as any).toString()}`;\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: message,\n      errForSentry: new LocalDeploymentError(message),\n    });\n  }\n  const supportsControlPlane = _backendSupportsControlPlaneAuth(\n    args.backendVersion,\n  );\n  if (supportsControlPlane && provisionHost !== productionProvisionHost) {\n    commandArgs.push(\"--control-plane-url\", provisionHost);\n  }\n  const auth = ctx.bigBrainAuth();\n  if (\n    supportsControlPlane &&\n    args.deploymentKind === \"local\" &&\n    auth?.kind === \"accessToken\"\n  ) {\n    commandArgs.push(\"--control-plane-access-token\", auth.accessToken);\n  }\n  const displayArgs = commandArgs.map((arg, index) =>\n    index > 0 &&\n    [\"--instance-secret\", \"--control-plane-access-token\"].includes(\n      commandArgs[index - 1],\n    )\n      ? \"[REDACTED]\"\n      : arg,\n  );\n  const commandStr = `${args.binaryPath} ${displayArgs.join(\" \")}`;\n  logVerbose(`Starting local backend: \\`${commandStr}\\``);\n  const p = child_process\n    .spawn(args.binaryPath, commandArgs, {\n      stdio: \"ignore\",\n      env: {\n        ...process.env,\n        SENTRY_DSN: LOCAL_BACKEND_SENTRY_DSN,\n      },\n    })\n    .on(\"exit\", (code) => {\n      const why = code === null ? \"from signal\" : `with code ${code}`;\n      logVerbose(`Local backend exited ${why}, full command \\`${commandStr}\\``);\n    });\n  const cleanupHandle = ctx.registerCleanup(async () => {\n    logVerbose(`Stopping local backend on port ${ports.cloud}`);\n    p.kill(\"SIGTERM\");\n  });\n\n  await ensureBackendRunning(ctx, {\n    cloudPort: ports.cloud,\n    deploymentName: args.deploymentName,\n    maxTimeSecs: await parseStartupTimeoutSecs(ctx),\n  });\n\n  return {\n    cleanupHandle,\n  };\n}\n\n/** Crash if correct local backend is not currently listening on the expected port. */\nexport async function assertLocalBackendRunning(\n  ctx: Context,\n  args: {\n    url: string;\n    deploymentName: string;\n  },\n): Promise<void> {\n  logVerbose(`Checking local backend at ${args.url} is running`);\n  const result = await fetchLocalBackendStatus(args);\n  switch (result.kind) {\n    case \"running\":\n      return;\n    case \"different\":\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `A different local backend ${result.name} is running at ${args.url}`,\n      });\n    case \"error\":\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Error response code received from local backend ${result.resp.status} ${result.resp.statusText}`,\n      });\n    case \"not-running\":\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Local backend isn't running. (it's not listening at ${args.url})\\nRun \\`npx convex dev\\` in another terminal first.`,\n      });\n  }\n}\n\n/** Wait for up to maxTimeSecs for the correct local backend to be running on the expected port. */\nexport async function ensureBackendRunning(\n  ctx: Context,\n  args: {\n    cloudPort: number;\n    deploymentName: string;\n    maxTimeSecs: number;\n  },\n): Promise<void> {\n  logVerbose(`Ensuring backend running on port ${args.cloudPort} is running`);\n  const deploymentUrl = localDeploymentUrl(args.cloudPort);\n  let timeElapsedSecs = 0;\n  let hasShownWaiting = false;\n  while (timeElapsedSecs <= args.maxTimeSecs) {\n    if (!hasShownWaiting && timeElapsedSecs > 2) {\n      logMessage(\"waiting for local backend to start...\");\n      hasShownWaiting = true;\n    }\n    try {\n      const resp = await fetch(`${deploymentUrl}/instance_name`);\n      if (resp.status === 200) {\n        const text = await resp.text();\n        if (text !== args.deploymentName) {\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage: `A different local backend ${text} is running on selected port ${args.cloudPort}`,\n          });\n        } else {\n          // The backend is running!\n          return;\n        }\n      } else {\n        await new Promise((resolve) => setTimeout(resolve, 500));\n        timeElapsedSecs += 0.5;\n      }\n    } catch {\n      await new Promise((resolve) => setTimeout(resolve, 500));\n      timeElapsedSecs += 0.5;\n    }\n  }\n  const base = `Local backend did not start on port ${args.cloudPort} within ${args.maxTimeSecs} seconds.`;\n  const message =\n    args.maxTimeSecs >= DEFAULT_STARTUP_TIMEOUT_SECS\n      ? `${base} If your local database is large, increase the timeout by setting CONVEX_LOCAL_BACKEND_STARTUP_TIMEOUT_SECS (e.g. CONVEX_LOCAL_BACKEND_STARTUP_TIMEOUT_SECS=120).`\n      : base;\n  return await ctx.crash({\n    exitCode: 1,\n    errorType: \"fatal\",\n    printedMessage: message,\n    errForSentry: new LocalDeploymentError(message),\n  });\n}\n\nexport async function ensureBackendStopped(\n  ctx: Context,\n  args: {\n    ports: {\n      cloud: number;\n      site?: number;\n    };\n    maxTimeSecs: number;\n    deploymentName: string;\n    // Whether to allow a deployment with a different name to run on this port\n    allowOtherDeployments: boolean;\n  },\n) {\n  logVerbose(`Ensuring backend running on port ${args.ports.cloud} is stopped`);\n  let timeElapsedSecs = 0;\n  while (timeElapsedSecs < args.maxTimeSecs) {\n    const cloudPort = await detect(args.ports.cloud);\n    const sitePort =\n      args.ports.site === undefined ? undefined : await detect(args.ports.site);\n    // Both ports are free\n    if (cloudPort === args.ports.cloud && sitePort === args.ports.site) {\n      return;\n    }\n    try {\n      const instanceNameResp = await fetch(\n        `${localDeploymentUrl(args.ports.cloud)}/instance_name`,\n      );\n      if (instanceNameResp.ok) {\n        const instanceName = await instanceNameResp.text();\n        if (instanceName !== args.deploymentName) {\n          if (args.allowOtherDeployments) {\n            return;\n          }\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage: `A different local backend ${instanceName} is running on selected port ${args.ports.cloud}`,\n          });\n        }\n      }\n    } catch (error: any) {\n      logVerbose(`Error checking if backend is running: ${error.message}`);\n      // Backend is probably not running\n      continue;\n    }\n    await new Promise((resolve) => setTimeout(resolve, 500));\n    timeElapsedSecs += 0.5;\n  }\n  return ctx.crash({\n    exitCode: 1,\n    errorType: \"fatal\",\n    printedMessage: `A local backend is still running on port ${args.ports.cloud}. Please stop it and run this command again.`,\n  });\n}\n\nexport function localDeploymentUrl(cloudPort: number): string {\n  return `http://127.0.0.1:${cloudPort}`;\n}\n\nexport function selfHostedEventTag(\n  deploymentKind: LocalDeploymentKind,\n): string {\n  return deploymentKind === \"local\" ? \"cli-local-dev\" : \"cli-anonymous-dev\";\n}\n\ntype LocalBackendStatus =\n  | { kind: \"running\" }\n  | { kind: \"error\"; resp: Response }\n  | { kind: \"different\"; name: string }\n  | { kind: \"not-running\" };\n\nexport async function fetchLocalBackendStatus(args: {\n  url: string;\n  deploymentName: string;\n}): Promise<LocalBackendStatus> {\n  logVerbose(`Checking local backend at ${args.url} is running`);\n  try {\n    const resp = await fetch(`${args.url}/instance_name`);\n    if (resp.status === 200) {\n      const text = await resp.text();\n      if (text !== args.deploymentName) {\n        return { kind: \"different\", name: text };\n      } else {\n        return { kind: \"running\" };\n      }\n    } else {\n      return { kind: \"error\", resp };\n    }\n  } catch {\n    return { kind: \"not-running\" };\n  }\n}\n\n/** Returns true if the correct local backend is listening. */\nexport async function isLocalBackendRunning(\n  url: string,\n  deploymentName: string,\n): Promise<boolean> {\n  return (\n    \"running\" === (await fetchLocalBackendStatus({ url, deploymentName })).kind\n  );\n}\n\nexport function shouldUseLocalDeployment(deploymentType: DeploymentType) {\n  return deploymentType === \"local\" || deploymentType === \"anonymous\";\n}\n\ninterface WithRunningBackendArgs {\n  ctx: Context;\n  deployment: {\n    deploymentUrl: string;\n    deploymentFields: DetailedDeploymentCredentials[\"deploymentFields\"];\n  };\n  action: () => Promise<void>;\n}\n\n/**\n * If the deployment is a local deployment and not already running, start it\n * for the duration of the action, then stop it.\n */\nexport async function withRunningBackend({\n  ctx,\n  deployment,\n  action,\n}: WithRunningBackendArgs) {\n  let cleanup: (() => Promise<void>) | null = null;\n\n  if (\n    deployment.deploymentFields &&\n    shouldUseLocalDeployment(deployment.deploymentFields.deploymentType)\n  ) {\n    const isRunning = await isLocalBackendRunning(\n      deployment.deploymentUrl,\n      deployment.deploymentFields.deploymentName,\n    );\n    if (!isRunning) {\n      ({ cleanup } = await startEphemeralLocalBackend(ctx, {\n        deploymentType: deployment.deploymentFields.deploymentType,\n        deploymentName: deployment.deploymentFields.deploymentName,\n      }));\n    }\n  }\n\n  try {\n    await action();\n  } finally {\n    await cleanup?.();\n  }\n}\n\n/**\n * Start a local backend for a one-off command using saved deployment config.\n * Returns a cleanup function that stops the backend.\n */\nasync function startEphemeralLocalBackend(\n  ctx: Context,\n  args: {\n    deploymentType: string;\n    deploymentName: string;\n  },\n): Promise<{ cleanup: () => Promise<void> }> {\n  const deploymentKind: LocalDeploymentKind =\n    args.deploymentType === \"anonymous\" ? \"anonymous\" : \"local\";\n\n  const config = loadDeploymentConfig(ctx, deploymentKind, args.deploymentName);\n  if (config === null) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Local backend isn't running and no saved configuration found.\\nRun \\`npx convex dev\\` first.`,\n    });\n  }\n\n  const { binaryPath } = await ensureBackendBinaryDownloaded(ctx, {\n    kind: \"version\",\n    version: config.backendVersion,\n  });\n\n  const instanceSecret = config.instanceSecret ?? LOCAL_BACKEND_INSTANCE_SECRET;\n\n  const { cleanupHandle } = await runLocalBackend(ctx, {\n    binaryPath,\n    backendVersion: config.backendVersion,\n    ports: config.ports,\n    deploymentKind,\n    deploymentName: args.deploymentName,\n    instanceSecret,\n    isLatestVersion: true,\n  });\n\n  return {\n    cleanup: async () => {\n      const fn = ctx.removeCleanup(cleanupHandle);\n      if (fn) {\n        await fn(0);\n      }\n    },\n  };\n}\n", "/* ! The MIT License (MIT) Copyright (c) 2014 Scott Corgan */\n\n// This is adopted from https://github.com/scottcorgan/glob-slash/\n\nconst path = require('path');\nconst normalize = value => path.posix.normalize(path.posix.join('/', value));\n\nmodule.exports = value => (value.charAt(0) === '!' ? `!${normalize(value.substr(1))}` : normalize(value));\nmodule.exports.normalize = normalize;\n", "module.exports = function (xs, fn) {\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        var x = fn(xs[i], i);\n        if (isArray(x)) res.push.apply(res, x);\n        else res.push(x);\n    }\n    return res;\n};\n\nvar isArray = Array.isArray || function (xs) {\n    return Object.prototype.toString.call(xs) === '[object Array]';\n};\n", "'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n  if (a instanceof RegExp) a = maybeMatch(a, str);\n  if (b instanceof RegExp) b = maybeMatch(b, str);\n\n  var r = range(a, b, str);\n\n  return r && {\n    start: r[0],\n    end: r[1],\n    pre: str.slice(0, r[0]),\n    body: str.slice(r[0] + a.length, r[1]),\n    post: str.slice(r[1] + b.length)\n  };\n}\n\nfunction maybeMatch(reg, str) {\n  var m = str.match(reg);\n  return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n  var begs, beg, left, right, result;\n  var ai = str.indexOf(a);\n  var bi = str.indexOf(b, ai + 1);\n  var i = ai;\n\n  if (ai >= 0 && bi > 0) {\n    if(a===b) {\n      return [ai, bi];\n    }\n    begs = [];\n    left = str.length;\n\n    while (i >= 0 && !result) {\n      if (i == ai) {\n        begs.push(i);\n        ai = str.indexOf(a, i + 1);\n      } else if (begs.length == 1) {\n        result = [ begs.pop(), bi ];\n      } else {\n        beg = begs.pop();\n        if (beg < left) {\n          left = beg;\n          right = bi;\n        }\n\n        bi = str.indexOf(b, i + 1);\n      }\n\n      i = ai < bi && ai >= 0 ? ai : bi;\n    }\n\n    if (begs.length) {\n      result = [ left, right ];\n    }\n  }\n\n  return result;\n}\n", "var concatMap = require('concat-map');\nvar balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nvar EXPANSION_MAX = 100000\n\n// `EXPANSION_MAX` caps the *number* of expansions, but not their length. An\n// input like `'{a,b}'.repeat(1500)` stays under that count - its output is\n// truncated to 100k results - while making every result ~1500 characters\n// long. The result set, and the intermediate arrays built while combining\n// brace sets, then grow large enough to exhaust memory and crash the process\n// (CVE-2026-14257). `EXPANSION_MAX_LENGTH` bounds the total number of\n// characters the accumulator may hold at any point, so memory stays flat no\n// matter how many brace groups are chained. The limit sits well above any\n// realistic expansion (100k results hitting `EXPANSION_MAX` measure ~1M\n// characters) so legitimate input is unaffected.\nvar EXPANSION_MAX_LENGTH = 4000000\n\n// `expand` recurses once per level of brace *nesting* - both when expanding a\n// set's comma members and when re-wrapping a set whose body is a single part.\n// The CVE-2026-14257 fix made the *tail* iterative (recursion on `m.post`, one\n// level per chained group), which left nesting depth unbounded: about 3,100\n// levels of `{{{...a,b...}}}` - only ~6KB of input - exhausted the native stack\n// and crashed the process. `EXPANSION_MAX_DEPTH` bounds how deep the parser\n// will follow nesting. It sits far above any realistic pattern and well below\n// the depth at which the stack runs out.\nvar EXPANSION_MAX_DEPTH = 1000\n\n// Bash keeps a quirk where a brace group followed by a comma set still expands\n// (`{a},b}`). The parser implements it by rewriting the string and restarting\n// the scan, absorbing one `}` per pass. `n` trailing braces therefore cost `n`\n// full passes over a string that itself grows by one `escClose` sentinel each\n// time - quadratic in `n`, with a ~26x constant from the sentinel's length.\n// 128KB of `'{a}' + '}'.repeat(n) + ',z}'` blocked the event loop for 27\n// seconds to produce two results. `EXPANSION_MAX_REWRITES` bounds how many\n// times the scan may restart. Real `{a},b}` input needs a handful.\nvar EXPANSION_MAX_REWRITES = 1000\n\nfunction numeric(str) {\n  return parseInt(str, 10) == str\n    ? parseInt(str, 10)\n    : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n  return str.split('\\\\\\\\').join(escSlash)\n            .split('\\\\{').join(escOpen)\n            .split('\\\\}').join(escClose)\n            .split('\\\\,').join(escComma)\n            .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n  return str.split(escSlash).join('\\\\')\n            .split(escOpen).join('{')\n            .split(escClose).join('}')\n            .split(escComma).join(',')\n            .split(escPeriod).join('.');\n}\n\n\n// Like `target.push(...items)` but doesn't overflow the stack\nfunction pushAll(target, items) {\n  for (var i = 0; i < items.length; i++) {\n    target.push(items[i]);\n  }\n}\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n  var parts = [];\n\n  // Walk the brace groups iteratively. Recursing on `post` once per group let a\n  // chain of them exhaust the stack - the parsing-side counterpart to\n  // the `expand` overflow fixed for CVE-2026-14257, and not something `max` or\n  // `maxLength` can bound, since it happens before expansion.\n  //\n  // The part the next chunk continues\n  var carry = '';\n\n  for (;;) {\n    var m = balanced('{', '}', str);\n\n    if (!m) {\n      var tail = str.split(',');\n      tail[0] = carry + tail[0];\n      pushAll(parts, tail);\n      return parts;\n    }\n\n    var pre = m.pre;\n    var body = m.body;\n    var post = m.post;\n    var p = pre.split(',');\n\n    p[0] = carry + p[0];\n    p[p.length-1] += '{' + body + '}';\n\n    if (!post.length) {\n      pushAll(parts, p);\n      return parts;\n    }\n\n    carry = p.pop();\n    pushAll(parts, p);\n    str = post;\n  }\n}\n\nfunction expandTop(str, options) {\n  if (!str)\n    return [];\n\n  options = options || {};\n  var max = options.max == null ? EXPANSION_MAX : options.max;\n  var maxLength = options.maxLength == null ? EXPANSION_MAX_LENGTH : options.maxLength;\n  var maxDepth = options.maxDepth == null ? EXPANSION_MAX_DEPTH : options.maxDepth;\n  var maxRewrites = options.maxRewrites == null ? EXPANSION_MAX_REWRITES : options.maxRewrites;\n\n  // I don't know why Bash 4.3 does this, but it does.\n  // Anything starting with {} will have the first two bytes preserved\n  // but *only* at the top level, so {},a}b will not expand to anything,\n  // but a{},b}c will be expanded to [a}c,abc].\n  // One could argue that this is a bug in Bash, but since the goal of\n  // this module is to match Bash's rules, we escape a leading {}\n  if (str.substr(0, 2) === '{}') {\n    str = '\\\\{\\\\}' + str.substr(2);\n  }\n\n  return expand(escapeBraces(str), max, maxLength, maxDepth, 0, maxRewrites, true).map(unescapeBraces);\n}\n\nfunction identity(e) {\n  return e;\n}\n\nfunction embrace(str) {\n  return '{' + str + '}';\n}\nfunction isPadded(el) {\n  return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n  return i <= y;\n}\nfunction gte(i, y) {\n  return i >= y;\n}\n\n// Build `{ acc[a] + pre + values[v] }` for every combination, capping the\n// number of results at `max` and the total number of characters at `maxLength`.\n// This is the one place output grows, so bounding it here keeps the single\n// accumulator - and therefore memory - flat regardless of how many brace groups\n// are combined (CVE-2026-14257).\n//\n// `base[a]` is the length of the part of `acc[a]` that predates the current\n// empty-drop baseline (see `expand`). The matching baselines for the results\n// are appended to `outBase`, which the caller carries forward alongside them.\nfunction combine(\n  acc,\n  base,\n  pre,\n  values,\n  max,\n  maxLength,\n  dropEmpties,\n  outBase\n) {\n  var out = []\n  var length = 0\n  for (var a = 0; a < acc.length; a++) {\n    for (var v = 0; v < values.length; v++) {\n      if (out.length >= max) return out\n      var expansion = acc[a] + pre + values[v]\n      // Bash drops empty results at the top level. Skip them before they count\n      // against `max`, so `max` bounds the number of *kept* results. \"Empty\"\n      // means \"adds nothing past the baseline\", not \"empty overall\".\n      if (dropEmpties && expansion.length === base[a]) continue\n      if (length + expansion.length > maxLength) return out\n      out.push(expansion)\n      outBase.push(base[a])\n      length += expansion.length\n    }\n  }\n  return out\n}\n\n// The expansion values of a single numeric (`1..5`) or alphabetic (`a..e..2`)\n// sequence body.\nfunction expandSequence(\n  body,\n  isAlphaSequence,\n  max,\n  maxLength\n) {\n  var n = body.split(/\\.\\./)\n  var N = []\n  // A sequence body always splits into two or three parts, but the compiler\n  // can't know that.\n  /* c8 ignore start */\n  if (n[0] === undefined || n[1] === undefined) {\n    return N\n  }\n  /* c8 ignore stop */\n  var x = numeric(n[0])\n  var y = numeric(n[1])\n  var width = Math.max(n[0].length, n[1].length)\n  var incr =\n    n.length === 3 && n[2] !== undefined ?\n      Math.max(Math.abs(numeric(n[2])), 1)\n    : 1\n  var test = lte\n  var reverse = y < x\n  if (reverse) {\n    incr *= -1\n    test = gte\n  }\n  var pad = n.some(isPadded)\n\n  var length = 0\n  for (var i = x; test(i, y) && N.length < max; i += incr) {\n    var c\n    if (isAlphaSequence) {\n      c = String.fromCharCode(i)\n      if (c === '\\\\') {\n        c = ''\n      }\n    } else {\n      c = String(i)\n      if (pad) {\n        var need = width - c.length\n        if (need > 0) {\n          var z = new Array(need + 1).join('0')\n          if (i < 0) {\n            c = '-' + z + c.slice(1)\n          } else {\n            c = z + c\n          }\n        }\n      }\n    }\n    if (length + c.length > maxLength) break\n    N.push(c)\n    length += c.length\n  }\n  return N\n}\n\nfunction expand(\n  str,\n  max,\n  maxLength,\n  maxDepth,\n  depth,\n  maxRewrites,\n  isTop\n) {\n  // Too deeply nested to keep following: treat the rest as literal, the same\n  // way a group that cannot expand is already handled. Truncating rather than\n  // throwing keeps expansion total, matching `max` and `maxLength`.\n  if (depth > maxDepth) {\n    return [str];\n  }\n\n  // Consume the string's top-level brace groups left to right, threading a\n  // running set of combined prefixes (`acc`). Expanding the tail iteratively -\n  // rather than recursing on `m.post` once per group - keeps the native stack\n  // depth constant, so deeply chained input (`'{a,b}'.repeat(3000)`) can no\n  // longer overflow the stack, and leaves a single accumulator whose size\n  // `maxLength` bounds directly (CVE-2026-14257).\n  var acc = ['']\n\n  // Bash drops empty results, but only when the *first* group of the run is a\n  // comma set - a sequence like `{a..\\}` may legitimately yield ''. The drop\n  // is on the final strings, so it is applied to whichever `combine` produces\n  // them (the one with no brace set left in the tail).\n  //\n  // The old implementation recursed on `m.post`, so the drop tested only the\n  // expansion of the current call's substring. The `{a},b}` rewrite below turns\n  // `isTop` back on part-way through a string, starting a fresh such run, so\n  // the drop must ignore whatever `acc` already holds from earlier groups.\n  // `accBase[a]` records how much of `acc[a]` predates the current run;\n  // `combine` treats an expansion as empty when it adds nothing past that.\n  var accBase = [0]\n  // How many times the `{a},b}` rewrite below has restarted the scan. Each pass\n  // re-reads the whole string, so leaving this unbounded is quadratic.\n  var rewrites = 0\n  var dropEmpties = false\n  var firstGroup = true\n  var nextBase\n\n  for (;;) {\n    var m = balanced('{', '}', str);\n\n    // No brace set left: the rest of the string is literal.\n    if (!m) {\n      return combine(acc, accBase, str, [''], max, maxLength, dropEmpties, [])\n    }\n\n    // no need to expand pre, since it is guaranteed to be free of brace-sets\n    var pre = m.pre;\n\n    // For compatibility reasons, `${` is not eligible for brace expansion, and\n    // on the 1.x line it suppresses expansion of the rest of the string too:\n    // the whole remainder is literal. The 2.x and 5.x lines instead keep\n    // expanding the tail, which is what bash does, but changing that here would\n    // be a breaking change for 1.x consumers. Routed through `combine` so the\n    // result is still bounded by `max` and `maxLength`.\n    if (/\\$$/.test(pre)) {\n      return combine(acc, accBase, str, [''], max, maxLength, dropEmpties, [])\n    }\n\n    var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n    var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n    var isSequence = isNumericSequence || isAlphaSequence;\n    var isOptions = m.body.indexOf(',') >= 0;\n    if (!isSequence && !isOptions) {\n      // {a},b}\n      if (rewrites < maxRewrites && m.post.match(/,(?!,).*\\}/)) {\n        rewrites++;\n        str = m.pre + '{' + m.body + escClose + m.post;\n        // The rewritten string is expanded as if it were a fresh top-level one,\n        // so start a new empty-drop run: anchor the baseline at what `acc`\n        // holds now, and let the next expanding group decide whether to drop.\n        isTop = true\n        firstGroup = true\n        dropEmpties = false\n        accBase = []\n        for (var b = 0; b < acc.length; b++) {\n          accBase.push(acc[b].length)\n        }\n        continue\n      }\n      // Nothing here expands, so the whole remaining string is literal.\n      return combine(\n        acc,\n        accBase,\n        pre + '{' + m.body + '}' + m.post,\n        [''],\n        max,\n        maxLength,\n        dropEmpties,\n        []\n      )\n    }\n\n    if (firstGroup) {\n      dropEmpties = isTop && !isSequence\n      firstGroup = false\n    }\n\n    var values;\n    if (isSequence) {\n      values = expandSequence(m.body, isAlphaSequence, max, maxLength);\n    } else {\n      var n = parseCommaParts(m.body);\n      if (n.length === 1 && n[0] !== undefined) {\n        // x{{a,b}}y ==> x{a}y x{b}y\n        n = expand(n[0], max, maxLength, maxDepth, depth + 1, maxRewrites, false).map(embrace);\n        //XXX is this necessary? Can't seem to hit it in tests.\n        /* c8 ignore start */\n        if (n.length === 1) {\n          nextBase = []\n          acc = combine(\n            acc,\n            accBase,\n            pre + n[0],\n            [''],\n            max,\n            maxLength,\n            dropEmpties && !m.post.length,\n            nextBase\n          )\n          accBase = nextBase\n          if (!m.post.length) break\n          str = m.post\n          continue\n        }\n        /* c8 ignore stop */\n      }\n\n      // Values that `combine` is going to drop as empty produce no result, so\n      // they must not count against `max` - otherwise `{a,,b}` with `max: 2`\n      // would stop at `['a', '']` and yield one result instead of two. Skipping\n      // them outright keeps `values` bounded while leaving `max` a bound on\n      // *kept* results. A value is dropped when it adds nothing past the\n      // baseline, which is what `combine` tests.\n      var dropsEmpties = dropEmpties && !m.post.length && !pre\n      for (var d = 0; dropsEmpties && d < acc.length; d++) {\n        if (acc[d].length !== accBase[d]) {\n          dropsEmpties = false\n        }\n      }\n\n      values = []\n      var valuesLength = 0\n      outer: for (var j = 0; j < n.length; j++) {\n        var expanded = expand(n[j], max, maxLength, maxDepth, depth + 1, maxRewrites, false)\n        for (var k = 0; k < expanded.length; k++) {\n          var v = expanded[k]\n          if (dropsEmpties && !v) continue\n          if (values.length >= max || valuesLength + v.length > maxLength) {\n            break outer\n          }\n          values.push(v)\n          valuesLength += v.length\n        }\n      }\n    }\n\n    nextBase = []\n    acc = combine(\n      acc,\n      accBase,\n      pre,\n      values,\n      max,\n      maxLength,\n      dropEmpties && !m.post.length,\n      nextBase\n    )\n    accBase = nextBase\n    if (!m.post.length) break\n    str = m.post\n  }\n\n  return acc\n}\n", "module.exports = minimatch\nminimatch.Minimatch = Minimatch\n\nvar path = (function () { try { return require('path') } catch (e) {}}()) || {\n  sep: '/'\n}\nminimatch.sep = path.sep\n\nvar GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}\nvar expand = require('brace-expansion')\n\nvar plTypes = {\n  '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n  '?': { open: '(?:', close: ')?' },\n  '+': { open: '(?:', close: ')+' },\n  '*': { open: '(?:', close: ')*' },\n  '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nvar qmark = '[^/]'\n\n// * => any number of characters\nvar star = qmark + '*?'\n\n// ** when dots are allowed.  Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nvar twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nvar twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// characters that need to be escaped in RegExp.\nvar reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// \"abc\" -> { a:true, b:true, c:true }\nfunction charSet (s) {\n  return s.split('').reduce(function (set, c) {\n    set[c] = true\n    return set\n  }, {})\n}\n\n// normalizes slashes.\nvar slashSplit = /\\/+/\n\nminimatch.filter = filter\nfunction filter (pattern, options) {\n  options = options || {}\n  return function (p, i, list) {\n    return minimatch(p, pattern, options)\n  }\n}\n\nfunction ext (a, b) {\n  b = b || {}\n  var t = {}\n  Object.keys(a).forEach(function (k) {\n    t[k] = a[k]\n  })\n  Object.keys(b).forEach(function (k) {\n    t[k] = b[k]\n  })\n  return t\n}\n\nminimatch.defaults = function (def) {\n  if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n    return minimatch\n  }\n\n  var orig = minimatch\n\n  var m = function minimatch (p, pattern, options) {\n    return orig(p, pattern, ext(def, options))\n  }\n\n  m.Minimatch = function Minimatch (pattern, options) {\n    return new orig.Minimatch(pattern, ext(def, options))\n  }\n  m.Minimatch.defaults = function defaults (options) {\n    return orig.defaults(ext(def, options)).Minimatch\n  }\n\n  m.filter = function filter (pattern, options) {\n    return orig.filter(pattern, ext(def, options))\n  }\n\n  m.defaults = function defaults (options) {\n    return orig.defaults(ext(def, options))\n  }\n\n  m.makeRe = function makeRe (pattern, options) {\n    return orig.makeRe(pattern, ext(def, options))\n  }\n\n  m.braceExpand = function braceExpand (pattern, options) {\n    return orig.braceExpand(pattern, ext(def, options))\n  }\n\n  m.match = function (list, pattern, options) {\n    return orig.match(list, pattern, ext(def, options))\n  }\n\n  return m\n}\n\nMinimatch.defaults = function (def) {\n  return minimatch.defaults(def).Minimatch\n}\n\nfunction minimatch (p, pattern, options) {\n  assertValidPattern(pattern)\n\n  if (!options) options = {}\n\n  // shortcut: comments match nothing.\n  if (!options.nocomment && pattern.charAt(0) === '#') {\n    return false\n  }\n\n  return new Minimatch(pattern, options).match(p)\n}\n\nfunction Minimatch (pattern, options) {\n  if (!(this instanceof Minimatch)) {\n    return new Minimatch(pattern, options)\n  }\n\n  assertValidPattern(pattern)\n\n  if (!options) options = {}\n\n  pattern = pattern.trim()\n\n  // windows support: need to use /, not \\\n  if (!options.allowWindowsEscape && path.sep !== '/') {\n    pattern = pattern.split(path.sep).join('/')\n  }\n\n  this.options = options\n  this.maxGlobstarRecursion = options.maxGlobstarRecursion !== undefined\n    ? options.maxGlobstarRecursion : 200\n  this.set = []\n  this.pattern = pattern\n  this.regexp = null\n  this.negate = false\n  this.comment = false\n  this.empty = false\n  this.partial = !!options.partial\n\n  // make the set of regexps etc.\n  this.make()\n}\n\nMinimatch.prototype.debug = function () {}\n\nMinimatch.prototype.make = make\nfunction make () {\n  var pattern = this.pattern\n  var options = this.options\n\n  // empty patterns and comments match nothing.\n  if (!options.nocomment && pattern.charAt(0) === '#') {\n    this.comment = true\n    return\n  }\n  if (!pattern) {\n    this.empty = true\n    return\n  }\n\n  // step 1: figure out negation, etc.\n  this.parseNegate()\n\n  // step 2: expand braces\n  var set = this.globSet = this.braceExpand()\n\n  if (options.debug) this.debug = function debug() { console.error.apply(console, arguments) }\n\n  this.debug(this.pattern, set)\n\n  // step 3: now we have a set, so turn each one into a series of path-portion\n  // matching patterns.\n  // These will be regexps, except in the case of \"**\", which is\n  // set to the GLOBSTAR object for globstar behavior,\n  // and will not contain any / characters\n  set = this.globParts = set.map(function (s) {\n    return s.split(slashSplit)\n  })\n\n  this.debug(this.pattern, set)\n\n  // glob --> regexps\n  set = set.map(function (s, si, set) {\n    return s.map(this.parse, this)\n  }, this)\n\n  this.debug(this.pattern, set)\n\n  // filter out everything that didn't compile properly.\n  set = set.filter(function (s) {\n    return s.indexOf(false) === -1\n  })\n\n  this.debug(this.pattern, set)\n\n  this.set = set\n}\n\nMinimatch.prototype.parseNegate = parseNegate\nfunction parseNegate () {\n  var pattern = this.pattern\n  var negate = false\n  var options = this.options\n  var negateOffset = 0\n\n  if (options.nonegate) return\n\n  for (var i = 0, l = pattern.length\n    ; i < l && pattern.charAt(i) === '!'\n    ; i++) {\n    negate = !negate\n    negateOffset++\n  }\n\n  if (negateOffset) this.pattern = pattern.substr(negateOffset)\n  this.negate = negate\n}\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = function (pattern, options) {\n  return braceExpand(pattern, options)\n}\n\nMinimatch.prototype.braceExpand = braceExpand\n\nfunction braceExpand (pattern, options) {\n  if (!options) {\n    if (this instanceof Minimatch) {\n      options = this.options\n    } else {\n      options = {}\n    }\n  }\n\n  pattern = typeof pattern === 'undefined'\n    ? this.pattern : pattern\n\n  assertValidPattern(pattern)\n\n  // Thanks to Yeting Li <https://github.com/yetingli> for\n  // improving this regexp to avoid a ReDOS vulnerability.\n  if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n    // shortcut. no need to expand.\n    return [pattern]\n  }\n\n  return expand(pattern)\n}\n\nvar MAX_PATTERN_LENGTH = 1024 * 64\nvar assertValidPattern = function (pattern) {\n  if (typeof pattern !== 'string') {\n    throw new TypeError('invalid pattern')\n  }\n\n  if (pattern.length > MAX_PATTERN_LENGTH) {\n    throw new TypeError('pattern is too long')\n  }\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion.  Otherwise, any series\n// of * is equivalent to a single *.  Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nMinimatch.prototype.parse = parse\nvar SUBPARSE = {}\nfunction parse (pattern, isSub) {\n  assertValidPattern(pattern)\n\n  var options = this.options\n\n  // shortcuts\n  if (pattern === '**') {\n    if (!options.noglobstar)\n      return GLOBSTAR\n    else\n      pattern = '*'\n  }\n  if (pattern === '') return ''\n\n  var re = ''\n  var hasMagic = !!options.nocase\n  var escaping = false\n  // ? => one single character\n  var patternListStack = []\n  var negativeLists = []\n  var stateChar\n  var inClass = false\n  var reClassStart = -1\n  var classStart = -1\n  // . and .. never match anything that doesn't start with .,\n  // even when options.dot is set.\n  var patternStart = pattern.charAt(0) === '.' ? '' // anything\n  // not (start or / followed by . or .. followed by / or end)\n  : options.dot ? '(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))'\n  : '(?!\\\\.)'\n  var self = this\n\n  function clearStateChar () {\n    if (stateChar) {\n      // we had some state-tracking character\n      // that wasn't consumed by this pass.\n      switch (stateChar) {\n        case '*':\n          re += star\n          hasMagic = true\n        break\n        case '?':\n          re += qmark\n          hasMagic = true\n        break\n        default:\n          re += '\\\\' + stateChar\n        break\n      }\n      self.debug('clearStateChar %j %j', stateChar, re)\n      stateChar = false\n    }\n  }\n\n  for (var i = 0, len = pattern.length, c\n    ; (i < len) && (c = pattern.charAt(i))\n    ; i++) {\n    this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n    // skip over any that are escaped.\n    if (escaping && reSpecials[c]) {\n      re += '\\\\' + c\n      escaping = false\n      continue\n    }\n\n    switch (c) {\n      /* istanbul ignore next */\n      case '/': {\n        // completely not allowed, even escaped.\n        // Should already be path-split by now.\n        return false\n      }\n\n      case '\\\\':\n        clearStateChar()\n        escaping = true\n      continue\n\n      // the various stateChar values\n      // for the \"extglob\" stuff.\n      case '?':\n      case '*':\n      case '+':\n      case '@':\n      case '!':\n        this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n        // all of those are literals inside a class, except that\n        // the glob [!a] means [^a] in regexp\n        if (inClass) {\n          this.debug('  in class')\n          if (c === '!' && i === classStart + 1) c = '^'\n          re += c\n          continue\n        }\n\n        // coalesce consecutive non-globstar * characters\n        if (c === '*' && stateChar === '*') continue\n\n        // if we already have a stateChar, then it means\n        // that there was something like ** or +? in there.\n        // Handle the stateChar, then proceed with this one.\n        self.debug('call clearStateChar %j', stateChar)\n        clearStateChar()\n        stateChar = c\n        // if extglob is disabled, then +(asdf|foo) isn't a thing.\n        // just clear the statechar *now*, rather than even diving into\n        // the patternList stuff.\n        if (options.noext) clearStateChar()\n      continue\n\n      case '(':\n        if (inClass) {\n          re += '('\n          continue\n        }\n\n        if (!stateChar) {\n          re += '\\\\('\n          continue\n        }\n\n        patternListStack.push({\n          type: stateChar,\n          start: i - 1,\n          reStart: re.length,\n          open: plTypes[stateChar].open,\n          close: plTypes[stateChar].close\n        })\n        // negation is (?:(?!js)[^/]*)\n        re += stateChar === '!' ? '(?:(?!(?:' : '(?:'\n        this.debug('plType %j %j', stateChar, re)\n        stateChar = false\n      continue\n\n      case ')':\n        if (inClass || !patternListStack.length) {\n          re += '\\\\)'\n          continue\n        }\n\n        clearStateChar()\n        hasMagic = true\n        var pl = patternListStack.pop()\n        // negation is (?:(?!js)[^/]*)\n        // The others are (?:<pattern>)<type>\n        re += pl.close\n        if (pl.type === '!') {\n          negativeLists.push(pl)\n        }\n        pl.reEnd = re.length\n      continue\n\n      case '|':\n        if (inClass || !patternListStack.length || escaping) {\n          re += '\\\\|'\n          escaping = false\n          continue\n        }\n\n        clearStateChar()\n        re += '|'\n      continue\n\n      // these are mostly the same in regexp and glob\n      case '[':\n        // swallow any state-tracking char before the [\n        clearStateChar()\n\n        if (inClass) {\n          re += '\\\\' + c\n          continue\n        }\n\n        inClass = true\n        classStart = i\n        reClassStart = re.length\n        re += c\n      continue\n\n      case ']':\n        //  a right bracket shall lose its special\n        //  meaning and represent itself in\n        //  a bracket expression if it occurs\n        //  first in the list.  -- POSIX.2 2.8.3.2\n        if (i === classStart + 1 || !inClass) {\n          re += '\\\\' + c\n          escaping = false\n          continue\n        }\n\n        // handle the case where we left a class open.\n        // \"[z-a]\" is valid, equivalent to \"\\[z-a\\]\"\n        // split where the last [ was, make sure we don't have\n        // an invalid re. if so, re-walk the contents of the\n        // would-be class to re-translate any characters that\n        // were passed through as-is\n        // TODO: It would probably be faster to determine this\n        // without a try/catch and a new RegExp, but it's tricky\n        // to do safely.  For now, this is safe and works.\n        var cs = pattern.substring(classStart + 1, i)\n        try {\n          RegExp('[' + cs + ']')\n        } catch (er) {\n          // not a valid class!\n          var sp = this.parse(cs, SUBPARSE)\n          re = re.substr(0, reClassStart) + '\\\\[' + sp[0] + '\\\\]'\n          hasMagic = hasMagic || sp[1]\n          inClass = false\n          continue\n        }\n\n        // finish up the class.\n        hasMagic = true\n        inClass = false\n        re += c\n      continue\n\n      default:\n        // swallow any state char that wasn't consumed\n        clearStateChar()\n\n        if (escaping) {\n          // no need\n          escaping = false\n        } else if (reSpecials[c]\n          && !(c === '^' && inClass)) {\n          re += '\\\\'\n        }\n\n        re += c\n\n    } // switch\n  } // for\n\n  // handle the case where we left a class open.\n  // \"[abc\" is valid, equivalent to \"\\[abc\"\n  if (inClass) {\n    // split where the last [ was, and escape it\n    // this is a huge pita.  We now have to re-walk\n    // the contents of the would-be class to re-translate\n    // any characters that were passed through as-is\n    cs = pattern.substr(classStart + 1)\n    sp = this.parse(cs, SUBPARSE)\n    re = re.substr(0, reClassStart) + '\\\\[' + sp[0]\n    hasMagic = hasMagic || sp[1]\n  }\n\n  // handle the case where we had a +( thing at the *end*\n  // of the pattern.\n  // each pattern list stack adds 3 chars, and we need to go through\n  // and escape any | chars that were passed through as-is for the regexp.\n  // Go through and escape them, taking care not to double-escape any\n  // | chars that were already escaped.\n  for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n    var tail = re.slice(pl.reStart + pl.open.length)\n    this.debug('setting tail', re, pl)\n    // maybe some even number of \\, then maybe 1 \\, followed by a |\n    tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, function (_, $1, $2) {\n      if (!$2) {\n        // the | isn't already escaped, so escape it.\n        $2 = '\\\\'\n      }\n\n      // need to escape all those slashes *again*, without escaping the\n      // one that we need for escaping the | character.  As it works out,\n      // escaping an even number of slashes can be done by simply repeating\n      // it exactly after itself.  That's why this trick works.\n      //\n      // I am sorry that you have to see this.\n      return $1 + $1 + $2 + '|'\n    })\n\n    this.debug('tail=%j\\n   %s', tail, tail, pl, re)\n    var t = pl.type === '*' ? star\n      : pl.type === '?' ? qmark\n      : '\\\\' + pl.type\n\n    hasMagic = true\n    re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n  }\n\n  // handle trailing things that only matter at the very end.\n  clearStateChar()\n  if (escaping) {\n    // trailing \\\\\n    re += '\\\\\\\\'\n  }\n\n  // only need to apply the nodot start if the re starts with\n  // something that could conceivably capture a dot\n  var addPatternStart = false\n  switch (re.charAt(0)) {\n    case '[': case '.': case '(': addPatternStart = true\n  }\n\n  // Hack to work around lack of negative lookbehind in JS\n  // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n  // like 'a.xyz.yz' doesn't match.  So, the first negative\n  // lookahead, has to look ALL the way ahead, to the end of\n  // the pattern.\n  for (var n = negativeLists.length - 1; n > -1; n--) {\n    var nl = negativeLists[n]\n\n    var nlBefore = re.slice(0, nl.reStart)\n    var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n    var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)\n    var nlAfter = re.slice(nl.reEnd)\n\n    nlLast += nlAfter\n\n    // Handle nested stuff like *(*.js|!(*.json)), where open parens\n    // mean that we should *not* include the ) in the bit that is considered\n    // \"after\" the negated section.\n    var openParensBefore = nlBefore.split('(').length - 1\n    var cleanAfter = nlAfter\n    for (i = 0; i < openParensBefore; i++) {\n      cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n    }\n    nlAfter = cleanAfter\n\n    var dollar = ''\n    if (nlAfter === '' && isSub !== SUBPARSE) {\n      dollar = '$'\n    }\n    var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast\n    re = newRe\n  }\n\n  // if the re is not \"\" at this point, then we need to make sure\n  // it doesn't match against an empty path part.\n  // Otherwise a/* will match a/, which it should not.\n  if (re !== '' && hasMagic) {\n    re = '(?=.)' + re\n  }\n\n  if (addPatternStart) {\n    re = patternStart + re\n  }\n\n  // parsing just a piece of a larger pattern.\n  if (isSub === SUBPARSE) {\n    return [re, hasMagic]\n  }\n\n  // skip the regexp for non-magical patterns\n  // unescape anything in it, though, so that it'll be\n  // an exact match against a file etc.\n  if (!hasMagic) {\n    return globUnescape(pattern)\n  }\n\n  var flags = options.nocase ? 'i' : ''\n  try {\n    var regExp = new RegExp('^' + re + '$', flags)\n  } catch (er) /* istanbul ignore next - should be impossible */ {\n    // If it was an invalid regular expression, then it can't match\n    // anything.  This trick looks for a character after the end of\n    // the string, which is of course impossible, except in multi-line\n    // mode, but it's not a /m regex.\n    return new RegExp('$.')\n  }\n\n  regExp._glob = pattern\n  regExp._src = re\n\n  return regExp\n}\n\nminimatch.makeRe = function (pattern, options) {\n  return new Minimatch(pattern, options || {}).makeRe()\n}\n\nMinimatch.prototype.makeRe = makeRe\nfunction makeRe () {\n  if (this.regexp || this.regexp === false) return this.regexp\n\n  // at this point, this.set is a 2d array of partial\n  // pattern strings, or \"**\".\n  //\n  // It's better to use .match().  This function shouldn't\n  // be used, really, but it's pretty convenient sometimes,\n  // when you just want to work with a regex.\n  var set = this.set\n\n  if (!set.length) {\n    this.regexp = false\n    return this.regexp\n  }\n  var options = this.options\n\n  var twoStar = options.noglobstar ? star\n    : options.dot ? twoStarDot\n    : twoStarNoDot\n  var flags = options.nocase ? 'i' : ''\n\n  var re = set.map(function (pattern) {\n    return pattern.map(function (p) {\n      return (p === GLOBSTAR) ? twoStar\n      : (typeof p === 'string') ? regExpEscape(p)\n      : p._src\n    }).join('\\\\\\/')\n  }).join('|')\n\n  // must match entire pattern\n  // ending in a * or ** will make it less strict.\n  re = '^(?:' + re + ')$'\n\n  // can match anything, as long as it's not this.\n  if (this.negate) re = '^(?!' + re + ').*$'\n\n  try {\n    this.regexp = new RegExp(re, flags)\n  } catch (ex) /* istanbul ignore next - should be impossible */ {\n    this.regexp = false\n  }\n  return this.regexp\n}\n\nminimatch.match = function (list, pattern, options) {\n  options = options || {}\n  var mm = new Minimatch(pattern, options)\n  list = list.filter(function (f) {\n    return mm.match(f)\n  })\n  if (mm.options.nonull && !list.length) {\n    list.push(pattern)\n  }\n  return list\n}\n\nMinimatch.prototype.match = function match (f, partial) {\n  if (typeof partial === 'undefined') partial = this.partial\n  this.debug('match', f, this.pattern)\n  // short-circuit in the case of busted things.\n  // comments, etc.\n  if (this.comment) return false\n  if (this.empty) return f === ''\n\n  if (f === '/' && partial) return true\n\n  var options = this.options\n\n  // windows: need to use /, not \\\n  if (path.sep !== '/') {\n    f = f.split(path.sep).join('/')\n  }\n\n  // treat the test path as a set of pathparts.\n  f = f.split(slashSplit)\n  this.debug(this.pattern, 'split', f)\n\n  // just ONE of the pattern sets in this.set needs to match\n  // in order for it to be valid.  If negating, then just one\n  // match means that we have failed.\n  // Either way, return on the first hit.\n\n  var set = this.set\n  this.debug(this.pattern, 'set', set)\n\n  // Find the basename of the path by looking for the last non-empty segment\n  var filename\n  var i\n  for (i = f.length - 1; i >= 0; i--) {\n    filename = f[i]\n    if (filename) break\n  }\n\n  for (i = 0; i < set.length; i++) {\n    var pattern = set[i]\n    var file = f\n    if (options.matchBase && pattern.length === 1) {\n      file = [filename]\n    }\n    var hit = this.matchOne(file, pattern, partial)\n    if (hit) {\n      if (options.flipNegate) return true\n      return !this.negate\n    }\n  }\n\n  // didn't get any hits.  this is success if it's a negative\n  // pattern, failure otherwise.\n  if (options.flipNegate) return false\n  return this.negate\n}\n\n// set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\nMinimatch.prototype.matchOne = function (file, pattern, partial) {\n  if (pattern.indexOf(GLOBSTAR) !== -1) {\n    return this._matchGlobstar(file, pattern, partial, 0, 0)\n  }\n  return this._matchOne(file, pattern, partial, 0, 0)\n}\n\nMinimatch.prototype._matchGlobstar = function (file, pattern, partial, fileIndex, patternIndex) {\n  var i\n\n  // find first globstar from patternIndex\n  var firstgs = -1\n  for (i = patternIndex; i < pattern.length; i++) {\n    if (pattern[i] === GLOBSTAR) { firstgs = i; break }\n  }\n\n  // find last globstar\n  var lastgs = -1\n  for (i = pattern.length - 1; i >= 0; i--) {\n    if (pattern[i] === GLOBSTAR) { lastgs = i; break }\n  }\n\n  var head = pattern.slice(patternIndex, firstgs)\n  var body = partial ? pattern.slice(firstgs + 1) : pattern.slice(firstgs + 1, lastgs)\n  var tail = partial ? [] : pattern.slice(lastgs + 1)\n\n  // check the head\n  if (head.length) {\n    var fileHead = file.slice(fileIndex, fileIndex + head.length)\n    if (!this._matchOne(fileHead, head, partial, 0, 0)) {\n      return false\n    }\n    fileIndex += head.length\n  }\n\n  // check the tail\n  var fileTailMatch = 0\n  if (tail.length) {\n    if (tail.length + fileIndex > file.length) return false\n\n    var tailStart = file.length - tail.length\n    if (this._matchOne(file, tail, partial, tailStart, 0)) {\n      fileTailMatch = tail.length\n    } else {\n      // affordance for stuff like a/**/* matching a/b/\n      if (file[file.length - 1] !== '' ||\n          fileIndex + tail.length === file.length) {\n        return false\n      }\n      tailStart--\n      if (!this._matchOne(file, tail, partial, tailStart, 0)) {\n        return false\n      }\n      fileTailMatch = tail.length + 1\n    }\n  }\n\n  // if body is empty (single ** between head and tail)\n  if (!body.length) {\n    var sawSome = !!fileTailMatch\n    for (i = fileIndex; i < file.length - fileTailMatch; i++) {\n      var f = String(file[i])\n      sawSome = true\n      if (f === '.' || f === '..' ||\n          (!this.options.dot && f.charAt(0) === '.')) {\n        return false\n      }\n    }\n    return partial || sawSome\n  }\n\n  // split body into segments at each GLOBSTAR\n  var bodySegments = [[[], 0]]\n  var currentBody = bodySegments[0]\n  var nonGsParts = 0\n  var nonGsPartsSums = [0]\n  for (var bi = 0; bi < body.length; bi++) {\n    var b = body[bi]\n    if (b === GLOBSTAR) {\n      nonGsPartsSums.push(nonGsParts)\n      currentBody = [[], 0]\n      bodySegments.push(currentBody)\n    } else {\n      currentBody[0].push(b)\n      nonGsParts++\n    }\n  }\n\n  var idx = bodySegments.length - 1\n  var fileLength = file.length - fileTailMatch\n  for (var si = 0; si < bodySegments.length; si++) {\n    bodySegments[si][1] = fileLength -\n      (nonGsPartsSums[idx--] + bodySegments[si][0].length)\n  }\n\n  return !!this._matchGlobStarBodySections(\n    file, bodySegments, fileIndex, 0, partial, 0, !!fileTailMatch\n  )\n}\n\n// return false for \"nope, not matching\"\n// return null for \"not matching, cannot keep trying\"\nMinimatch.prototype._matchGlobStarBodySections = function (\n  file, bodySegments, fileIndex, bodyIndex, partial, globStarDepth, sawTail\n) {\n  var bs = bodySegments[bodyIndex]\n  if (!bs) {\n    // just make sure there are no bad dots\n    for (var i = fileIndex; i < file.length; i++) {\n      sawTail = true\n      var f = file[i]\n      if (f === '.' || f === '..' ||\n          (!this.options.dot && f.charAt(0) === '.')) {\n        return false\n      }\n    }\n    return sawTail\n  }\n\n  var body = bs[0]\n  var after = bs[1]\n  while (fileIndex <= after) {\n    var m = this._matchOne(\n      file.slice(0, fileIndex + body.length),\n      body,\n      partial,\n      fileIndex,\n      0\n    )\n    // if limit exceeded, no match. intentional false negative,\n    // acceptable break in correctness for security.\n    if (m && globStarDepth < this.maxGlobstarRecursion) {\n      var sub = this._matchGlobStarBodySections(\n        file, bodySegments,\n        fileIndex + body.length, bodyIndex + 1,\n        partial, globStarDepth + 1, sawTail\n      )\n      if (sub !== false) {\n        return sub\n      }\n    }\n    var f = file[fileIndex]\n    if (f === '.' || f === '..' ||\n        (!this.options.dot && f.charAt(0) === '.')) {\n      return false\n    }\n    fileIndex++\n  }\n  return partial || null\n}\n\nMinimatch.prototype._matchOne = function (file, pattern, partial, fileIndex, patternIndex) {\n  var fi, pi, fl, pl\n  for (\n    fi = fileIndex, pi = patternIndex, fl = file.length, pl = pattern.length\n    ; (fi < fl) && (pi < pl)\n    ; fi++, pi++\n  ) {\n    this.debug('matchOne loop')\n    var p = pattern[pi]\n    var f = file[fi]\n\n    this.debug(pattern, p, f)\n\n    // should be impossible.\n    // some invalid regexp stuff in the set.\n    /* istanbul ignore if */\n    if (p === false || p === GLOBSTAR) return false\n\n    // something other than **\n    // non-magic patterns just have to match exactly\n    // patterns with magic have been turned into regexps.\n    var hit\n    if (typeof p === 'string') {\n      hit = f === p\n      this.debug('string match', p, f, hit)\n    } else {\n      hit = f.match(p)\n      this.debug('pattern match', p, f, hit)\n    }\n\n    if (!hit) return false\n  }\n\n  // now either we fell off the end of the pattern, or we're done.\n  if (fi === fl && pi === pl) {\n    // ran out of pattern and filename at the same time.\n    // an exact hit!\n    return true\n  } else if (fi === fl) {\n    // ran out of file, but still had pattern left.\n    // this is ok if we're doing the match as part of\n    // a glob fs traversal.\n    return partial\n  } else /* istanbul ignore else */ if (pi === pl) {\n    // ran out of pattern, still have file left.\n    // this is only acceptable if we're on the very last\n    // empty segment of a file with a trailing slash.\n    // a/* should match a/b/\n    return (fi === fl - 1) && (file[fi] === '')\n  }\n\n  // should be unreachable.\n  /* istanbul ignore next */\n  throw new Error('wtf?')\n}\n\n// replace stuff like \\* with *\nfunction globUnescape (s) {\n  return s.replace(/\\\\(.)/g, '$1')\n}\n\nfunction regExpEscape (s) {\n  return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n", "/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.match = match\nmodule.exports.regexpToFunction = regexpToFunction\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * Default configs.\n */\nvar DEFAULT_DELIMITER = '/'\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n  // Match escaped characters that would otherwise appear in future matches.\n  // This allows the user to escape special characters that won't transform.\n  '(\\\\\\\\.)',\n  // Match Express-style parameters and un-named parameters with a prefix\n  // and optional suffixes. Matches appear as:\n  //\n  // \":test(\\\\d+)?\" => [\"test\", \"\\d+\", undefined, \"?\"]\n  // \"(\\\\d+)\"  => [undefined, undefined, \"\\d+\", undefined]\n  '(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param  {string}  str\n * @param  {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n  var tokens = []\n  var key = 0\n  var index = 0\n  var path = ''\n  var defaultDelimiter = (options && options.delimiter) || DEFAULT_DELIMITER\n  var whitelist = (options && options.whitelist) || undefined\n  var pathEscaped = false\n  var res\n\n  while ((res = PATH_REGEXP.exec(str)) !== null) {\n    var m = res[0]\n    var escaped = res[1]\n    var offset = res.index\n    path += str.slice(index, offset)\n    index = offset + m.length\n\n    // Ignore already escaped sequences.\n    if (escaped) {\n      path += escaped[1]\n      pathEscaped = true\n      continue\n    }\n\n    var prev = ''\n    var name = res[2]\n    var capture = res[3]\n    var group = res[4]\n    var modifier = res[5]\n\n    if (!pathEscaped && path.length) {\n      var k = path.length - 1\n      var c = path[k]\n      var matches = whitelist ? whitelist.indexOf(c) > -1 : true\n\n      if (matches) {\n        prev = c\n        path = path.slice(0, k)\n      }\n    }\n\n    // Push the current path onto the tokens.\n    if (path) {\n      tokens.push(path)\n      path = ''\n      pathEscaped = false\n    }\n\n    var repeat = modifier === '+' || modifier === '*'\n    var optional = modifier === '?' || modifier === '*'\n    var pattern = capture || group\n    var delimiter = prev || defaultDelimiter\n    var prevText = prev || (typeof tokens[tokens.length - 1] === 'string' ? tokens[tokens.length - 1] : '')\n\n    tokens.push({\n      name: name || key++,\n      prefix: prev,\n      delimiter: delimiter,\n      optional: optional,\n      repeat: repeat,\n      pattern: pattern\n        ? escapeGroup(pattern)\n        : restrictBacktrack(delimiter, defaultDelimiter, prevText)\n    })\n  }\n\n  // Push any remaining characters.\n  if (path || index < str.length) {\n    tokens.push(path + str.substr(index))\n  }\n\n  return tokens\n}\n\nfunction restrictBacktrack (delimiter, defaultDelimiter, prevText) {\n  var charGroup = '[^' + escapeString(delimiter === defaultDelimiter ? delimiter : (delimiter + defaultDelimiter)) + ']'\n\n  if (!prevText || prevText.indexOf(delimiter) > -1 || prevText.indexOf(defaultDelimiter) > -1) {\n    return charGroup + '+?'\n  }\n\n  return escapeString(prevText) + '|(?:(?!' + escapeString(prevText) + ')' + charGroup + ')+?'\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param  {string}             str\n * @param  {Object=}            options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n  return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nfunction match (str, options) {\n  var keys = []\n  var re = pathToRegexp(str, keys, options)\n  return regexpToFunction(re, keys)\n}\n\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nfunction regexpToFunction (re, keys) {\n  return function (pathname, options) {\n    var m = re.exec(pathname)\n    if (!m) return false\n\n    var path = m[0]\n    var index = m.index\n    var params = {}\n    var decode = (options && options.decode) || decodeURIComponent\n\n    for (var i = 1; i < m.length; i++) {\n      if (m[i] === undefined) continue\n\n      var key = keys[i - 1]\n\n      if (key.repeat) {\n        params[key.name] = m[i].split(key.delimiter).map(function (value) {\n          return decode(value, key)\n        })\n      } else {\n        params[key.name] = decode(m[i], key)\n      }\n    }\n\n    return { path: path, index: index, params: params }\n  }\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n  // Compile all the tokens into regexps.\n  var matches = new Array(tokens.length)\n\n  // Compile all the patterns before compilation.\n  for (var i = 0; i < tokens.length; i++) {\n    if (typeof tokens[i] === 'object') {\n      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n    }\n  }\n\n  return function (data, options) {\n    var path = ''\n    var encode = (options && options.encode) || encodeURIComponent\n    var validate = options ? options.validate !== false : true\n\n    for (var i = 0; i < tokens.length; i++) {\n      var token = tokens[i]\n\n      if (typeof token === 'string') {\n        path += token\n        continue\n      }\n\n      var value = data ? data[token.name] : undefined\n      var segment\n\n      if (Array.isArray(value)) {\n        if (!token.repeat) {\n          throw new TypeError('Expected \"' + token.name + '\" to not repeat, but got array')\n        }\n\n        if (value.length === 0) {\n          if (token.optional) continue\n\n          throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n        }\n\n        for (var j = 0; j < value.length; j++) {\n          segment = encode(value[j], token)\n\n          if (validate && !matches[i].test(segment)) {\n            throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\"')\n          }\n\n          path += (j === 0 ? token.prefix : token.delimiter) + segment\n        }\n\n        continue\n      }\n\n      if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n        segment = encode(String(value), token)\n\n        if (validate && !matches[i].test(segment)) {\n          throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but got \"' + segment + '\"')\n        }\n\n        path += token.prefix + segment\n        continue\n      }\n\n      if (token.optional) continue\n\n      throw new TypeError('Expected \"' + token.name + '\" to be ' + (token.repeat ? 'an array' : 'a string'))\n    }\n\n    return path\n  }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param  {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n  return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param  {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n  return group.replace(/([=!:$/()])/g, '\\\\$1')\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param  {Object} options\n * @return {string}\n */\nfunction flags (options) {\n  return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param  {!RegExp} path\n * @param  {Array=}  keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n  if (!keys) return path\n\n  // Use a negative lookahead to match only capturing groups.\n  var groups = path.source.match(/\\((?!\\?)/g)\n\n  if (groups) {\n    for (var i = 0; i < groups.length; i++) {\n      keys.push({\n        name: i,\n        prefix: null,\n        delimiter: null,\n        optional: false,\n        repeat: false,\n        pattern: null\n      })\n    }\n  }\n\n  return path\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param  {!Array}  path\n * @param  {Array=}  keys\n * @param  {Object=} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n  var parts = []\n\n  for (var i = 0; i < path.length; i++) {\n    parts.push(pathToRegexp(path[i], keys, options).source)\n  }\n\n  return new RegExp('(?:' + parts.join('|') + ')', flags(options))\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param  {string}  path\n * @param  {Array=}  keys\n * @param  {Object=} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n  return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param  {!Array}  tokens\n * @param  {Array=}  keys\n * @param  {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n  options = options || {}\n\n  var strict = options.strict\n  var start = options.start !== false\n  var end = options.end !== false\n  var delimiter = options.delimiter || DEFAULT_DELIMITER\n  var endsWith = [].concat(options.endsWith || []).map(escapeString).concat('$').join('|')\n  var route = start ? '^' : ''\n\n  // Iterate over the tokens and create our regexp string.\n  for (var i = 0; i < tokens.length; i++) {\n    var token = tokens[i]\n\n    if (typeof token === 'string') {\n      route += escapeString(token)\n    } else {\n      var capture = token.repeat\n        ? '(?:' + token.pattern + ')(?:' + escapeString(token.delimiter) + '(?:' + token.pattern + '))*'\n        : token.pattern\n\n      if (keys) keys.push(token)\n\n      if (token.optional) {\n        if (!token.prefix) {\n          route += '(' + capture + ')?'\n        } else {\n          route += '(?:' + escapeString(token.prefix) + '(' + capture + '))?'\n        }\n      } else {\n        route += escapeString(token.prefix) + '(' + capture + ')'\n      }\n    }\n  }\n\n  if (end) {\n    if (!strict) route += '(?:' + escapeString(delimiter) + ')?'\n\n    route += endsWith === '$' ? '$' : '(?=' + endsWith + ')'\n  } else {\n    var endToken = tokens[tokens.length - 1]\n    var isEndDelimited = typeof endToken === 'string'\n      ? endToken[endToken.length - 1] === delimiter\n      : endToken === undefined\n\n    if (!strict) route += '(?:' + escapeString(delimiter) + '(?=' + endsWith + '))?'\n    if (!isEndDelimited) route += '(?=' + escapeString(delimiter) + '|' + endsWith + ')'\n  }\n\n  return new RegExp(route, flags(options))\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param  {(string|RegExp|Array)} path\n * @param  {Array=}                keys\n * @param  {Object=}               options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n  if (path instanceof RegExp) {\n    return regexpToRegexp(path, keys)\n  }\n\n  if (Array.isArray(path)) {\n    return arrayToRegexp(/** @type {!Array} */ (path), keys, options)\n  }\n\n  return stringToRegexp(/** @type {string} */ (path), keys, options)\n}\n", "{\n  \"application/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/3gpdash-qoe-report+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/3gpp-ims+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/a2l\": {\n    \"source\": \"iana\"\n  },\n  \"application/activemessage\": {\n    \"source\": \"iana\"\n  },\n  \"application/alto-costmap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-costmapfilter+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-directory+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointcost+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointcostparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointprop+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointpropparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-error+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-networkmap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-networkmapfilter+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/aml\": {\n    \"source\": \"iana\"\n  },\n  \"application/andrew-inset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez\"]\n  },\n  \"application/applefile\": {\n    \"source\": \"iana\"\n  },\n  \"application/applixware\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aw\"]\n  },\n  \"application/atf\": {\n    \"source\": \"iana\"\n  },\n  \"application/atfx\": {\n    \"source\": \"iana\"\n  },\n  \"application/atom+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atom\"]\n  },\n  \"application/atomcat+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atomcat\"]\n  },\n  \"application/atomdeleted+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/atomicmail\": {\n    \"source\": \"iana\"\n  },\n  \"application/atomsvc+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atomsvc\"]\n  },\n  \"application/atxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/auth-policy+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/bacnet-xdd+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/batch-smtp\": {\n    \"source\": \"iana\"\n  },\n  \"application/bdoc\": {\n    \"compressible\": false,\n    \"extensions\": [\"bdoc\"]\n  },\n  \"application/beep+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/calendar+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/calendar+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/call-completion\": {\n    \"source\": \"iana\"\n  },\n  \"application/cals-1840\": {\n    \"source\": \"iana\"\n  },\n  \"application/cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/cccex\": {\n    \"source\": \"iana\"\n  },\n  \"application/ccmp+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/ccxml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ccxml\"]\n  },\n  \"application/cdfx+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/cdmi-capability\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmia\"]\n  },\n  \"application/cdmi-container\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmic\"]\n  },\n  \"application/cdmi-domain\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmid\"]\n  },\n  \"application/cdmi-object\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmio\"]\n  },\n  \"application/cdmi-queue\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmiq\"]\n  },\n  \"application/cdni\": {\n    \"source\": \"iana\"\n  },\n  \"application/cea\": {\n    \"source\": \"iana\"\n  },\n  \"application/cea-2018+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/cellml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/cfw\": {\n    \"source\": \"iana\"\n  },\n  \"application/clue_info+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/cms\": {\n    \"source\": \"iana\"\n  },\n  \"application/cnrp+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/coap-group+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/coap-payload\": {\n    \"source\": \"iana\"\n  },\n  \"application/commonground\": {\n    \"source\": \"iana\"\n  },\n  \"application/conference-info+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose-key\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose-key-set\": {\n    \"source\": \"iana\"\n  },\n  \"application/cpl+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/csrattrs\": {\n    \"source\": \"iana\"\n  },\n  \"application/csta+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/cstadata+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/csvm+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cu-seeme\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cu\"]\n  },\n  \"application/cybercash\": {\n    \"source\": \"iana\"\n  },\n  \"application/dart\": {\n    \"compressible\": true\n  },\n  \"application/dash+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpd\"]\n  },\n  \"application/dashdelta\": {\n    \"source\": \"iana\"\n  },\n  \"application/davmount+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"davmount\"]\n  },\n  \"application/dca-rft\": {\n    \"source\": \"iana\"\n  },\n  \"application/dcd\": {\n    \"source\": \"iana\"\n  },\n  \"application/dec-dx\": {\n    \"source\": \"iana\"\n  },\n  \"application/dialog-info+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/dicom\": {\n    \"source\": \"iana\"\n  },\n  \"application/dicom+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dicom+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/dii\": {\n    \"source\": \"iana\"\n  },\n  \"application/dit\": {\n    \"source\": \"iana\"\n  },\n  \"application/dns\": {\n    \"source\": \"iana\"\n  },\n  \"application/docbook+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dbk\"]\n  },\n  \"application/dskpp+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/dssc+der\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dssc\"]\n  },\n  \"application/dssc+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xdssc\"]\n  },\n  \"application/dvcs\": {\n    \"source\": \"iana\"\n  },\n  \"application/ecmascript\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ecma\"]\n  },\n  \"application/edi-consent\": {\n    \"source\": \"iana\"\n  },\n  \"application/edi-x12\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/edifact\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/efi\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.comment+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.control+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.deviceinfo+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.ecall.msd\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.providerinfo+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.serviceinfo+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.subscriberinfo+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.veds+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/emma+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"emma\"]\n  },\n  \"application/emotionml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"application/epp+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/epub+zip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"epub\"]\n  },\n  \"application/eshop\": {\n    \"source\": \"iana\"\n  },\n  \"application/exi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exi\"]\n  },\n  \"application/fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"application/fastsoap\": {\n    \"source\": \"iana\"\n  },\n  \"application/fdt+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/fhir+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/fido.trusted-apps+json\": {\n    \"compressible\": true\n  },\n  \"application/fits\": {\n    \"source\": \"iana\"\n  },\n  \"application/font-sfnt\": {\n    \"source\": \"iana\"\n  },\n  \"application/font-tdpfr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pfr\"]\n  },\n  \"application/font-woff\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"woff\"]\n  },\n  \"application/framework-attributes+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/geo+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"geojson\"]\n  },\n  \"application/geo+json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/geoxacml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/gml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gml\"]\n  },\n  \"application/gpx+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gpx\"]\n  },\n  \"application/gxf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gxf\"]\n  },\n  \"application/gzip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"gz\"]\n  },\n  \"application/h224\": {\n    \"source\": \"iana\"\n  },\n  \"application/held+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/hjson\": {\n    \"extensions\": [\"hjson\"]\n  },\n  \"application/http\": {\n    \"source\": \"iana\"\n  },\n  \"application/hyperstudio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stk\"]\n  },\n  \"application/ibe-key-request+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/ibe-pkg-reply+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/ibe-pp-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/iges\": {\n    \"source\": \"iana\"\n  },\n  \"application/im-iscomposing+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/index\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.cmd\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.obj\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.response\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.vnd\": {\n    \"source\": \"iana\"\n  },\n  \"application/inkml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ink\",\"inkml\"]\n  },\n  \"application/iotp\": {\n    \"source\": \"iana\"\n  },\n  \"application/ipfix\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ipfix\"]\n  },\n  \"application/ipp\": {\n    \"source\": \"iana\"\n  },\n  \"application/isup\": {\n    \"source\": \"iana\"\n  },\n  \"application/its+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/java-archive\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"jar\",\"war\",\"ear\"]\n  },\n  \"application/java-serialized-object\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"ser\"]\n  },\n  \"application/java-vm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"class\"]\n  },\n  \"application/javascript\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"js\",\"mjs\"]\n  },\n  \"application/jf2feed+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jose\": {\n    \"source\": \"iana\"\n  },\n  \"application/jose+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jrd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"json\",\"map\"]\n  },\n  \"application/json-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/json5\": {\n    \"extensions\": [\"json5\"]\n  },\n  \"application/jsonml+json\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"jsonml\"]\n  },\n  \"application/jwk+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jwk-set+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/kpml-request+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/kpml-response+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/ld+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"jsonld\"]\n  },\n  \"application/lgr+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/link-format\": {\n    \"source\": \"iana\"\n  },\n  \"application/load-control+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/lost+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lostxml\"]\n  },\n  \"application/lostsync+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/lxf\": {\n    \"source\": \"iana\"\n  },\n  \"application/mac-binhex40\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hqx\"]\n  },\n  \"application/mac-compactpro\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cpt\"]\n  },\n  \"application/macwriteii\": {\n    \"source\": \"iana\"\n  },\n  \"application/mads+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mads\"]\n  },\n  \"application/manifest+json\": {\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"webmanifest\"]\n  },\n  \"application/marc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mrc\"]\n  },\n  \"application/marcxml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mrcx\"]\n  },\n  \"application/mathematica\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ma\",\"nb\",\"mb\"]\n  },\n  \"application/mathml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mathml\"]\n  },\n  \"application/mathml-content+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mathml-presentation+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-associated-procedure-description+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-deregister+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-envelope+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-msk+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-msk-response+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-protection-description+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-reception-report+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-register+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-register-response+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-schedule+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbms-user-service-description+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mbox\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mbox\"]\n  },\n  \"application/media-policy-dataset+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/media_control+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mediaservercontrol+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mscml\"]\n  },\n  \"application/merge-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/metalink+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"metalink\"]\n  },\n  \"application/metalink4+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"meta4\"]\n  },\n  \"application/mets+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mets\"]\n  },\n  \"application/mf4\": {\n    \"source\": \"iana\"\n  },\n  \"application/mikey\": {\n    \"source\": \"iana\"\n  },\n  \"application/mmt-usd+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mods+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mods\"]\n  },\n  \"application/moss-keys\": {\n    \"source\": \"iana\"\n  },\n  \"application/moss-signature\": {\n    \"source\": \"iana\"\n  },\n  \"application/mosskey-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/mosskey-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/mp21\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m21\",\"mp21\"]\n  },\n  \"application/mp4\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mp4s\",\"m4p\"]\n  },\n  \"application/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"application/mpeg4-iod\": {\n    \"source\": \"iana\"\n  },\n  \"application/mpeg4-iod-xmt\": {\n    \"source\": \"iana\"\n  },\n  \"application/mrb-consumer+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/mrb-publish+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/msc-ivr+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/msc-mixer+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/msword\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"doc\",\"dot\"]\n  },\n  \"application/mud+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mxf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxf\"]\n  },\n  \"application/n-quads\": {\n    \"source\": \"iana\"\n  },\n  \"application/n-triples\": {\n    \"source\": \"iana\"\n  },\n  \"application/nasdata\": {\n    \"source\": \"iana\"\n  },\n  \"application/news-checkgroups\": {\n    \"source\": \"iana\"\n  },\n  \"application/news-groupinfo\": {\n    \"source\": \"iana\"\n  },\n  \"application/news-transmission\": {\n    \"source\": \"iana\"\n  },\n  \"application/nlsml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/node\": {\n    \"source\": \"iana\"\n  },\n  \"application/nss\": {\n    \"source\": \"iana\"\n  },\n  \"application/ocsp-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/ocsp-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/octet-stream\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n  },\n  \"application/oda\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oda\"]\n  },\n  \"application/odx\": {\n    \"source\": \"iana\"\n  },\n  \"application/oebps-package+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"opf\"]\n  },\n  \"application/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ogx\"]\n  },\n  \"application/omdoc+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"omdoc\"]\n  },\n  \"application/onenote\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n  },\n  \"application/oxps\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oxps\"]\n  },\n  \"application/p2p-overlay+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/passport\": {\n    \"source\": \"iana\"\n  },\n  \"application/patch-ops-error+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xer\"]\n  },\n  \"application/pdf\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pdf\"]\n  },\n  \"application/pdx\": {\n    \"source\": \"iana\"\n  },\n  \"application/pgp-encrypted\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pgp\"]\n  },\n  \"application/pgp-keys\": {\n    \"source\": \"iana\"\n  },\n  \"application/pgp-signature\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"asc\",\"sig\"]\n  },\n  \"application/pics-rules\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"prf\"]\n  },\n  \"application/pidf+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/pidf-diff+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkcs10\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p10\"]\n  },\n  \"application/pkcs12\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkcs7-mime\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p7m\",\"p7c\"]\n  },\n  \"application/pkcs7-signature\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p7s\"]\n  },\n  \"application/pkcs8\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p8\"]\n  },\n  \"application/pkcs8-encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkix-attr-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ac\"]\n  },\n  \"application/pkix-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cer\"]\n  },\n  \"application/pkix-crl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"crl\"]\n  },\n  \"application/pkix-pkipath\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pkipath\"]\n  },\n  \"application/pkixcmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pki\"]\n  },\n  \"application/pls+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pls\"]\n  },\n  \"application/poc-settings+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/postscript\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ai\",\"eps\",\"ps\"]\n  },\n  \"application/ppsp-tracker+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/problem+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/problem+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/provenance+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.alvestrand.titrax-sheet\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.cww\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cww\"]\n  },\n  \"application/prs.hpub+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.nprend\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.plucker\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.rdf-xml-crypt\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.xsf+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/pskc+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pskcxml\"]\n  },\n  \"application/qsig\": {\n    \"source\": \"iana\"\n  },\n  \"application/raml+yaml\": {\n    \"compressible\": true,\n    \"extensions\": [\"raml\"]\n  },\n  \"application/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/rdap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/rdf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rdf\"]\n  },\n  \"application/reginfo+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rif\"]\n  },\n  \"application/relax-ng-compact-syntax\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rnc\"]\n  },\n  \"application/remote-printing\": {\n    \"source\": \"iana\"\n  },\n  \"application/reputon+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/resource-lists+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rl\"]\n  },\n  \"application/resource-lists-diff+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rld\"]\n  },\n  \"application/rfc+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/riscos\": {\n    \"source\": \"iana\"\n  },\n  \"application/rlmi+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/rls-services+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rs\"]\n  },\n  \"application/route-apd+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/route-s-tsid+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/route-usd+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/rpki-ghostbusters\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gbr\"]\n  },\n  \"application/rpki-manifest\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mft\"]\n  },\n  \"application/rpki-publication\": {\n    \"source\": \"iana\"\n  },\n  \"application/rpki-roa\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"roa\"]\n  },\n  \"application/rpki-updown\": {\n    \"source\": \"iana\"\n  },\n  \"application/rsd+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rsd\"]\n  },\n  \"application/rss+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"rss\"]\n  },\n  \"application/rtf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtf\"]\n  },\n  \"application/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"application/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"application/samlassertion+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/samlmetadata+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/sbml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sbml\"]\n  },\n  \"application/scaip+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/scim+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/scvp-cv-request\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scq\"]\n  },\n  \"application/scvp-cv-response\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scs\"]\n  },\n  \"application/scvp-vp-request\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spq\"]\n  },\n  \"application/scvp-vp-response\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spp\"]\n  },\n  \"application/sdp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sdp\"]\n  },\n  \"application/sep+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/sep-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/session-info\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-payment\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-payment-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"setpay\"]\n  },\n  \"application/set-registration\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-registration-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"setreg\"]\n  },\n  \"application/sgml\": {\n    \"source\": \"iana\"\n  },\n  \"application/sgml-open-catalog\": {\n    \"source\": \"iana\"\n  },\n  \"application/shf+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"shf\"]\n  },\n  \"application/sieve\": {\n    \"source\": \"iana\"\n  },\n  \"application/simple-filter+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/simple-message-summary\": {\n    \"source\": \"iana\"\n  },\n  \"application/simplesymbolcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/slate\": {\n    \"source\": \"iana\"\n  },\n  \"application/smil\": {\n    \"source\": \"iana\"\n  },\n  \"application/smil+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"smi\",\"smil\"]\n  },\n  \"application/smpte336m\": {\n    \"source\": \"iana\"\n  },\n  \"application/soap+fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"application/soap+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sparql-query\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rq\"]\n  },\n  \"application/sparql-results+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"srx\"]\n  },\n  \"application/spirits-event+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/sql\": {\n    \"source\": \"iana\"\n  },\n  \"application/srgs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gram\"]\n  },\n  \"application/srgs+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"grxml\"]\n  },\n  \"application/sru+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sru\"]\n  },\n  \"application/ssdl+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ssdl\"]\n  },\n  \"application/ssml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ssml\"]\n  },\n  \"application/tamp-apex-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-apex-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-community-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-community-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-error\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-sequence-adjust\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-sequence-adjust-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-status-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-status-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tar\": {\n    \"compressible\": true\n  },\n  \"application/tei+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tei\",\"teicorpus\"]\n  },\n  \"application/thraud+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tfi\"]\n  },\n  \"application/timestamp-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/timestamp-reply\": {\n    \"source\": \"iana\"\n  },\n  \"application/timestamped-data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tsd\"]\n  },\n  \"application/tnauthlist\": {\n    \"source\": \"iana\"\n  },\n  \"application/trig\": {\n    \"source\": \"iana\"\n  },\n  \"application/ttml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/tve-trigger\": {\n    \"source\": \"iana\"\n  },\n  \"application/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/urc-grpsheet+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/urc-ressheet+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/urc-targetdesc+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/urc-uisocketdesc+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vcard+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vcard+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vemmi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vividence.scriptfile\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.1000minds.decision-model+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp-prose+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp-prose-pc3ch+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp-v2x-local-service-information\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.access-transfer-events+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.bsf+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.gmop+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcptt-info+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcptt-location-info+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcptt-signed+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mid-call+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.pic-bw-large\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plb\"]\n  },\n  \"application/vnd.3gpp.pic-bw-small\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"psb\"]\n  },\n  \"application/vnd.3gpp.pic-bw-var\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pvb\"]\n  },\n  \"application/vnd.3gpp.sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.sms+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.srvcc-ext+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.srvcc-info+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.state-and-event-info+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.ussd+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp2.sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp2.tcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tcap\"]\n  },\n  \"application/vnd.3lightssoftware.imagescal\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3m.post-it-notes\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pwn\"]\n  },\n  \"application/vnd.accpac.simply.aso\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"aso\"]\n  },\n  \"application/vnd.accpac.simply.imp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"imp\"]\n  },\n  \"application/vnd.acucobol\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"acu\"]\n  },\n  \"application/vnd.acucorp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atc\",\"acutc\"]\n  },\n  \"application/vnd.adobe.air-application-installer-package+zip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"air\"]\n  },\n  \"application/vnd.adobe.flash.movie\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.adobe.formscentral.fcdt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fcdt\"]\n  },\n  \"application/vnd.adobe.fxp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fxp\",\"fxpl\"]\n  },\n  \"application/vnd.adobe.partial-upload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.adobe.xdp+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xdp\"]\n  },\n  \"application/vnd.adobe.xfdf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xfdf\"]\n  },\n  \"application/vnd.aether.imp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ah-barcode\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ahead.space\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ahead\"]\n  },\n  \"application/vnd.airzip.filesecure.azf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azf\"]\n  },\n  \"application/vnd.airzip.filesecure.azs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azs\"]\n  },\n  \"application/vnd.amadeus+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.amazon.ebook\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"azw\"]\n  },\n  \"application/vnd.amazon.mobi8-ebook\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.americandynamics.acc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"acc\"]\n  },\n  \"application/vnd.amiga.ami\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ami\"]\n  },\n  \"application/vnd.amundsen.maze+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.android.package-archive\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"apk\"]\n  },\n  \"application/vnd.anki\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.anser-web-certificate-issue-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cii\"]\n  },\n  \"application/vnd.anser-web-funds-transfer-initiation\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fti\"]\n  },\n  \"application/vnd.antix.game-component\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atx\"]\n  },\n  \"application/vnd.apache.thrift.binary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.compact\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.json\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.api+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.apothekende.reservation+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.apple.installer+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpkg\"]\n  },\n  \"application/vnd.apple.mpegurl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m3u8\"]\n  },\n  \"application/vnd.apple.pkpass\": {\n    \"compressible\": false,\n    \"extensions\": [\"pkpass\"]\n  },\n  \"application/vnd.arastra.swi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.aristanetworks.swi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"swi\"]\n  },\n  \"application/vnd.artsquare\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.astraea-software.iota\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"iota\"]\n  },\n  \"application/vnd.audiograph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"aep\"]\n  },\n  \"application/vnd.autopackage\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.avalon+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.avistar+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.balsamiq.bmml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.balsamiq.bmpr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.msg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.msg+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.bekitzur-stech+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.bint.med-content\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.biopax.rdf+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.blink-idb-value-wrapper\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.blueice.multipass\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpm\"]\n  },\n  \"application/vnd.bluetooth.ep.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bluetooth.le.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bmi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bmi\"]\n  },\n  \"application/vnd.businessobjects\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rep\"]\n  },\n  \"application/vnd.cab-jscript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.canon-cpdl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.canon-lips\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.capasystems-pg+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cendio.thinlinc.clientconf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.century-systems.tcp_stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.chemdraw+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdxml\"]\n  },\n  \"application/vnd.chess-pgn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.chipnuts.karaoke-mmd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmd\"]\n  },\n  \"application/vnd.cinderella\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdy\"]\n  },\n  \"application/vnd.cirpack.isdn-ext\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.citationstyles.style+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.claymore\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cla\"]\n  },\n  \"application/vnd.cloanto.rp9\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rp9\"]\n  },\n  \"application/vnd.clonk.c4group\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n  },\n  \"application/vnd.cluetrust.cartomobile-config\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c11amc\"]\n  },\n  \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c11amz\"]\n  },\n  \"application/vnd.coffeescript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.document\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.document-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.presentation\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.presentation-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.spreadsheet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collection+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.collection.doc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.collection.next+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.comicbook+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.comicbook-rar\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.commerce-battelle\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.commonspace\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"csp\"]\n  },\n  \"application/vnd.contact.cmsg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdbcmsg\"]\n  },\n  \"application/vnd.coreos.ignition+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cosmocaller\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cmc\"]\n  },\n  \"application/vnd.crick.clicker\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkx\"]\n  },\n  \"application/vnd.crick.clicker.keyboard\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkk\"]\n  },\n  \"application/vnd.crick.clicker.palette\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkp\"]\n  },\n  \"application/vnd.crick.clicker.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkt\"]\n  },\n  \"application/vnd.crick.clicker.wordbank\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkw\"]\n  },\n  \"application/vnd.criticaltools.wbs+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wbs\"]\n  },\n  \"application/vnd.ctc-posml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pml\"]\n  },\n  \"application/vnd.ctct.ws+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-pdf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-postscript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-ppd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppd\"]\n  },\n  \"application/vnd.cups-raster\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-raw\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.curl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.curl.car\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"car\"]\n  },\n  \"application/vnd.curl.pcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcurl\"]\n  },\n  \"application/vnd.cyan.dean.root+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cybank\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.d2l.coursepackage1p0+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dart\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dart\"]\n  },\n  \"application/vnd.data-vision.rdz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rdz\"]\n  },\n  \"application/vnd.datapackage+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dataresource+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.debian.binary-package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dece.data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n  },\n  \"application/vnd.dece.ttml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvt\",\"uvvt\"]\n  },\n  \"application/vnd.dece.unspecified\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvx\",\"uvvx\"]\n  },\n  \"application/vnd.dece.zip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvz\",\"uvvz\"]\n  },\n  \"application/vnd.denovo.fcselayout-link\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fe_launch\"]\n  },\n  \"application/vnd.desmume-movie\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.desmume.movie\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dm.delegation+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dna\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dna\"]\n  },\n  \"application/vnd.document+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dolby.mlp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mlp\"]\n  },\n  \"application/vnd.dolby.mobile.1\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dolby.mobile.2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.doremir.scorecloud-binary-document\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dpgraph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dpg\"]\n  },\n  \"application/vnd.dreamfactory\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dfac\"]\n  },\n  \"application/vnd.drive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ds-keypoint\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"kpxx\"]\n  },\n  \"application/vnd.dtg.local\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dtg.local.flash\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dtg.local.html\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ait\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ait\"]\n  },\n  \"application/vnd.dvb.dvbj\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.esgcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcdftnotifaccess\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgaccess\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgaccess2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgpdd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcroaming\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.iptv.alfec-base\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.iptv.alfec-enhancement\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-aggregate-root+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-container+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-generic+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-ia-msglist+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-init+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.pfr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.service\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"svc\"]\n  },\n  \"application/vnd.dxr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dynageo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"geo\"]\n  },\n  \"application/vnd.dzr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.easykaraoke.cdgdownload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecdis-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecip.rlp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.chart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mag\"]\n  },\n  \"application/vnd.ecowin.filerequest\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.fileupdate\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.series\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.seriesrequest\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.seriesupdate\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.efi.img\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.efi.iso\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.emclient.accessrequest+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.enliven\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nml\"]\n  },\n  \"application/vnd.enphase.envoy\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eprints.data+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.epson.esf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"esf\"]\n  },\n  \"application/vnd.epson.msf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msf\"]\n  },\n  \"application/vnd.epson.quickanime\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qam\"]\n  },\n  \"application/vnd.epson.salt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"slt\"]\n  },\n  \"application/vnd.epson.ssf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ssf\"]\n  },\n  \"application/vnd.ericsson.quickcall\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.espass-espass+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eszigno3+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"es3\",\"et3\"]\n  },\n  \"application/vnd.etsi.aoc+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.asic-e+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.asic-s+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.cug+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.iptvcommand+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.iptvdiscovery+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.iptvprofile+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.iptvsad-bc+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.iptvsad-cod+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.iptvsad-npvr+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.iptvservice+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.iptvsync+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.iptvueprofile+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.mcid+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.mheg5\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.pstn+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.sci+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.simservs+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.timestamp-token\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.tsl+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.tsl.der\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eudora.data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.profile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.settings\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.theme\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ezpix-album\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez2\"]\n  },\n  \"application/vnd.ezpix-package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez3\"]\n  },\n  \"application/vnd.f-secure.mobile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fastcopy-disk-image\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fdf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fdf\"]\n  },\n  \"application/vnd.fdsn.mseed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mseed\"]\n  },\n  \"application/vnd.fdsn.seed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"seed\",\"dataless\"]\n  },\n  \"application/vnd.ffsns\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.filmit.zfc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fints\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.firemonkeys.cloudcell\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.flographit\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gph\"]\n  },\n  \"application/vnd.fluxtime.clip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ftc\"]\n  },\n  \"application/vnd.font-fontforge-sfd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.framemaker\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n  },\n  \"application/vnd.frogans.fnc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fnc\"]\n  },\n  \"application/vnd.frogans.ltf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ltf\"]\n  },\n  \"application/vnd.fsc.weblaunch\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fsc\"]\n  },\n  \"application/vnd.fujitsu.oasys\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oas\"]\n  },\n  \"application/vnd.fujitsu.oasys2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oa2\"]\n  },\n  \"application/vnd.fujitsu.oasys3\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oa3\"]\n  },\n  \"application/vnd.fujitsu.oasysgp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fg5\"]\n  },\n  \"application/vnd.fujitsu.oasysprs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bh2\"]\n  },\n  \"application/vnd.fujixerox.art-ex\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.art4\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.ddd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ddd\"]\n  },\n  \"application/vnd.fujixerox.docuworks\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xdw\"]\n  },\n  \"application/vnd.fujixerox.docuworks.binder\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xbd\"]\n  },\n  \"application/vnd.fujixerox.docuworks.container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.hbpl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fut-misnet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fuzzysheet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fzs\"]\n  },\n  \"application/vnd.genomatix.tuxedo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"txd\"]\n  },\n  \"application/vnd.geo+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geocube+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.geogebra.file\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ggb\"]\n  },\n  \"application/vnd.geogebra.tool\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ggt\"]\n  },\n  \"application/vnd.geometry-explorer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gex\",\"gre\"]\n  },\n  \"application/vnd.geonext\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gxt\"]\n  },\n  \"application/vnd.geoplan\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g2w\"]\n  },\n  \"application/vnd.geospace\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g3w\"]\n  },\n  \"application/vnd.gerber\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.globalplatform.card-content-mgt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.globalplatform.card-content-mgt-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.gmx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gmx\"]\n  },\n  \"application/vnd.google-apps.document\": {\n    \"compressible\": false,\n    \"extensions\": [\"gdoc\"]\n  },\n  \"application/vnd.google-apps.presentation\": {\n    \"compressible\": false,\n    \"extensions\": [\"gslides\"]\n  },\n  \"application/vnd.google-apps.spreadsheet\": {\n    \"compressible\": false,\n    \"extensions\": [\"gsheet\"]\n  },\n  \"application/vnd.google-earth.kml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"kml\"]\n  },\n  \"application/vnd.google-earth.kmz\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"kmz\"]\n  },\n  \"application/vnd.gov.sk.e-form+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.gov.sk.e-form+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.grafeq\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gqf\",\"gqs\"]\n  },\n  \"application/vnd.gridmp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.groove-account\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gac\"]\n  },\n  \"application/vnd.groove-help\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ghf\"]\n  },\n  \"application/vnd.groove-identity-message\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gim\"]\n  },\n  \"application/vnd.groove-injector\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"grv\"]\n  },\n  \"application/vnd.groove-tool-message\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gtm\"]\n  },\n  \"application/vnd.groove-tool-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tpl\"]\n  },\n  \"application/vnd.groove-vcard\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vcg\"]\n  },\n  \"application/vnd.hal+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hal+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hal\"]\n  },\n  \"application/vnd.handheld-entertainment+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"zmm\"]\n  },\n  \"application/vnd.hbci\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hbci\"]\n  },\n  \"application/vnd.hc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hcl-bireports\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.hdt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.heroku+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hhe.lesson-player\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"les\"]\n  },\n  \"application/vnd.hp-hpgl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hpgl\"]\n  },\n  \"application/vnd.hp-hpid\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hpid\"]\n  },\n  \"application/vnd.hp-hps\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hps\"]\n  },\n  \"application/vnd.hp-jlyt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jlt\"]\n  },\n  \"application/vnd.hp-pcl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcl\"]\n  },\n  \"application/vnd.hp-pclxl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pclxl\"]\n  },\n  \"application/vnd.httphone\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.hydrostatix.sof-data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sfd-hdstx\"]\n  },\n  \"application/vnd.hyper-item+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hyperdrive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hzn-3d-crossword\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.afplinedata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.electronic-media\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.minipay\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpy\"]\n  },\n  \"application/vnd.ibm.modcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n  },\n  \"application/vnd.ibm.rights-management\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"irm\"]\n  },\n  \"application/vnd.ibm.secure-container\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sc\"]\n  },\n  \"application/vnd.iccprofile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"icc\",\"icm\"]\n  },\n  \"application/vnd.ieee.1905\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.igloader\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igl\"]\n  },\n  \"application/vnd.imagemeter.folder+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.imagemeter.image+zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.immervision-ivp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ivp\"]\n  },\n  \"application/vnd.immervision-ivu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ivu\"]\n  },\n  \"application/vnd.ims.imsccv1p1\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.imsccv1p2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.imsccv1p3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.lis.v2.result+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolproxy+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolsettings+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.informedcontrol.rms+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.informix-visionary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.infotech.project\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.infotech.project+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.innopath.wamp.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.insors.igm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igm\"]\n  },\n  \"application/vnd.intercon.formnet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xpw\",\"xpx\"]\n  },\n  \"application/vnd.intergeo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"i2g\"]\n  },\n  \"application/vnd.intertrust.digibox\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.intertrust.nncp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.intu.qbo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qbo\"]\n  },\n  \"application/vnd.intu.qfx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qfx\"]\n  },\n  \"application/vnd.iptc.g2.catalogitem+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.iptc.g2.conceptitem+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.iptc.g2.newsitem+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.iptc.g2.newsmessage+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.iptc.g2.packageitem+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.iptc.g2.planningitem+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ipunplugged.rcprofile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rcprofile\"]\n  },\n  \"application/vnd.irepository.package+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"irp\"]\n  },\n  \"application/vnd.is-xpr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xpr\"]\n  },\n  \"application/vnd.isac.fcs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fcs\"]\n  },\n  \"application/vnd.jam\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jam\"]\n  },\n  \"application/vnd.japannet-directory-service\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-jpnstore-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-payment-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-registration\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-registration-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-setstore-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-verification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-verification-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.jcp.javame.midlet-rms\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rms\"]\n  },\n  \"application/vnd.jisp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jisp\"]\n  },\n  \"application/vnd.joost.joda-archive\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"joda\"]\n  },\n  \"application/vnd.jsk.isdn-ngn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.kahootz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktz\",\"ktr\"]\n  },\n  \"application/vnd.kde.karbon\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"karbon\"]\n  },\n  \"application/vnd.kde.kchart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"chrt\"]\n  },\n  \"application/vnd.kde.kformula\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kfo\"]\n  },\n  \"application/vnd.kde.kivio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flw\"]\n  },\n  \"application/vnd.kde.kontour\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kon\"]\n  },\n  \"application/vnd.kde.kpresenter\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kpr\",\"kpt\"]\n  },\n  \"application/vnd.kde.kspread\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ksp\"]\n  },\n  \"application/vnd.kde.kword\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kwd\",\"kwt\"]\n  },\n  \"application/vnd.kenameaapp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"htke\"]\n  },\n  \"application/vnd.kidspiration\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kia\"]\n  },\n  \"application/vnd.kinar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kne\",\"knp\"]\n  },\n  \"application/vnd.koan\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n  },\n  \"application/vnd.kodak-descriptor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sse\"]\n  },\n  \"application/vnd.las.las+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.las.las+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lasxml\"]\n  },\n  \"application/vnd.liberty-request+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.llamagraphics.life-balance.desktop\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lbd\"]\n  },\n  \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lbe\"]\n  },\n  \"application/vnd.lotus-1-2-3\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"123\"]\n  },\n  \"application/vnd.lotus-approach\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"apr\"]\n  },\n  \"application/vnd.lotus-freelance\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pre\"]\n  },\n  \"application/vnd.lotus-notes\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nsf\"]\n  },\n  \"application/vnd.lotus-organizer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"org\"]\n  },\n  \"application/vnd.lotus-screencam\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scm\"]\n  },\n  \"application/vnd.lotus-wordpro\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lwp\"]\n  },\n  \"application/vnd.macports.portpkg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"portpkg\"]\n  },\n  \"application/vnd.mapbox-vector-tile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.marlin.drm.actiontoken+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.marlin.drm.conftoken+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.marlin.drm.license+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.marlin.drm.mdcf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mason+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.maxmind.maxmind-db\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mcd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mcd\"]\n  },\n  \"application/vnd.medcalcdata\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mc1\"]\n  },\n  \"application/vnd.mediastation.cdkey\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdkey\"]\n  },\n  \"application/vnd.meridian-slingshot\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mfer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mwf\"]\n  },\n  \"application/vnd.mfmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mfm\"]\n  },\n  \"application/vnd.micro+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.micrografx.flo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flo\"]\n  },\n  \"application/vnd.micrografx.igx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igx\"]\n  },\n  \"application/vnd.microsoft.portable-executable\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.microsoft.windows.thumbnail-cache\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.miele+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.mif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mif\"]\n  },\n  \"application/vnd.minisoft-hp3000-save\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mobius.daf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"daf\"]\n  },\n  \"application/vnd.mobius.dis\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dis\"]\n  },\n  \"application/vnd.mobius.mbk\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mbk\"]\n  },\n  \"application/vnd.mobius.mqy\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mqy\"]\n  },\n  \"application/vnd.mobius.msl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msl\"]\n  },\n  \"application/vnd.mobius.plc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plc\"]\n  },\n  \"application/vnd.mobius.txf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"txf\"]\n  },\n  \"application/vnd.mophun.application\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpn\"]\n  },\n  \"application/vnd.mophun.certificate\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpc\"]\n  },\n  \"application/vnd.motorola.flexsuite\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.adsi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.fis\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.gotap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.kmr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.ttc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.wem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.iprm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mozilla.xul+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xul\"]\n  },\n  \"application/vnd.ms-3mfdocument\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-artgalry\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cil\"]\n  },\n  \"application/vnd.ms-asf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-cab-compressed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cab\"]\n  },\n  \"application/vnd.ms-color.iccprofile\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-excel\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n  },\n  \"application/vnd.ms-excel.addin.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlam\"]\n  },\n  \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlsb\"]\n  },\n  \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlsm\"]\n  },\n  \"application/vnd.ms-excel.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xltm\"]\n  },\n  \"application/vnd.ms-fontobject\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"eot\"]\n  },\n  \"application/vnd.ms-htmlhelp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"chm\"]\n  },\n  \"application/vnd.ms-ims\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ims\"]\n  },\n  \"application/vnd.ms-lrm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lrm\"]\n  },\n  \"application/vnd.ms-office.activex+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-officetheme\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"thmx\"]\n  },\n  \"application/vnd.ms-opentype\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-outlook\": {\n    \"compressible\": false,\n    \"extensions\": [\"msg\"]\n  },\n  \"application/vnd.ms-package.obfuscated-opentype\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-pki.seccat\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cat\"]\n  },\n  \"application/vnd.ms-pki.stl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stl\"]\n  },\n  \"application/vnd.ms-playready.initiator+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-powerpoint\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n  },\n  \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppam\"]\n  },\n  \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pptm\"]\n  },\n  \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sldm\"]\n  },\n  \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppsm\"]\n  },\n  \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"potm\"]\n  },\n  \"application/vnd.ms-printdevicecapabilities+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-printing.printticket+xml\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-printschematicket+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-project\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpp\",\"mpt\"]\n  },\n  \"application/vnd.ms-tnef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.devicepairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.nwprinting.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.printerpairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.wsd.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.lic-resp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.meter-resp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-word.document.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"docm\"]\n  },\n  \"application/vnd.ms-word.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dotm\"]\n  },\n  \"application/vnd.ms-works\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n  },\n  \"application/vnd.ms-wpl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wpl\"]\n  },\n  \"application/vnd.ms-xpsdocument\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xps\"]\n  },\n  \"application/vnd.msa-disk-image\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mseq\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mseq\"]\n  },\n  \"application/vnd.msign\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.multiad.creator\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.multiad.creator.cif\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.music-niff\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.musician\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mus\"]\n  },\n  \"application/vnd.muvee.style\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msty\"]\n  },\n  \"application/vnd.mynfc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"taglet\"]\n  },\n  \"application/vnd.ncd.control\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ncd.reference\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nearst.inv+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nervana\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.netfpx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.neurolanguage.nlu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nlu\"]\n  },\n  \"application/vnd.nintendo.nitro.rom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nintendo.snes.rom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nitf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ntf\",\"nitf\"]\n  },\n  \"application/vnd.noblenet-directory\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nnd\"]\n  },\n  \"application/vnd.noblenet-sealer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nns\"]\n  },\n  \"application/vnd.noblenet-web\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nnw\"]\n  },\n  \"application/vnd.nokia.catalogs\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.conml+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.conml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.iptv.config+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.isds-radio-presets\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmark+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmark+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmarkcollection+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.n-gage.ac+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.n-gage.data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ngdat\"]\n  },\n  \"application/vnd.nokia.n-gage.symbian.install\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"n-gage\"]\n  },\n  \"application/vnd.nokia.ncd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.pcd+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.pcd+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.radio-preset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rpst\"]\n  },\n  \"application/vnd.nokia.radio-presets\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rpss\"]\n  },\n  \"application/vnd.novadigm.edm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"edm\"]\n  },\n  \"application/vnd.novadigm.edx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"edx\"]\n  },\n  \"application/vnd.novadigm.ext\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ext\"]\n  },\n  \"application/vnd.ntt-local.content-share\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.file-transfer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.ogw_remote-access\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.sip-ta_remote\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oasis.opendocument.chart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odc\"]\n  },\n  \"application/vnd.oasis.opendocument.chart-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otc\"]\n  },\n  \"application/vnd.oasis.opendocument.database\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odb\"]\n  },\n  \"application/vnd.oasis.opendocument.formula\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odf\"]\n  },\n  \"application/vnd.oasis.opendocument.formula-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odft\"]\n  },\n  \"application/vnd.oasis.opendocument.graphics\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odg\"]\n  },\n  \"application/vnd.oasis.opendocument.graphics-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otg\"]\n  },\n  \"application/vnd.oasis.opendocument.image\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odi\"]\n  },\n  \"application/vnd.oasis.opendocument.image-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oti\"]\n  },\n  \"application/vnd.oasis.opendocument.presentation\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odp\"]\n  },\n  \"application/vnd.oasis.opendocument.presentation-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otp\"]\n  },\n  \"application/vnd.oasis.opendocument.spreadsheet\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ods\"]\n  },\n  \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ots\"]\n  },\n  \"application/vnd.oasis.opendocument.text\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odt\"]\n  },\n  \"application/vnd.oasis.opendocument.text-master\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odm\"]\n  },\n  \"application/vnd.oasis.opendocument.text-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ott\"]\n  },\n  \"application/vnd.oasis.opendocument.text-web\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oth\"]\n  },\n  \"application/vnd.obn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ocf+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oftn.l10n+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.contentaccessdownload+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.contentaccessstreaming+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.cspg-hexbinary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.dae.svg+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.dae.xhtml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.pae.gem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.spdiscovery+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.spdlist+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.ueprofile+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.userprofile+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.olpc-sugar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xo\"]\n  },\n  \"application/vnd.oma-scws-config\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma-scws-http-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma-scws-http-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.drm-trigger+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.imd+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.ltkm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.notification+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.provisioningtrigger\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgboot\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgdd+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgdu\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.simple-symbol-container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sprov+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.stkm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.cab-address-book+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.cab-feature-handler+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.cab-pcc+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.cab-subs-invite+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.cab-user-prefs+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dcd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dcdc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dd2+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dd2\"]\n  },\n  \"application/vnd.oma.drm.risd+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.group-usage-list+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.lwm2m+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.lwm2m+tlv\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.pal+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.poc.final-report+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.poc.groups+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.push\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.scidm.messages+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.xcap-directory+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.omads-email+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.omads-file+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.omads-folder+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.omaloc-supl-init\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepager\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertamp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertamx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertat\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertatp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertatx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openblox.game+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openblox.game-binary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openeye.oeb\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openofficeorg.extension\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"oxt\"]\n  },\n  \"application/vnd.openstreetmap.data+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pptx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sldx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppsx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"potx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xlsx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xltx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"docx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dotx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-package.core-properties+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-package.relationships+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oracle.resource+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.orange.indata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osa.netdeploy\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osgeo.mapguide.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mgp\"]\n  },\n  \"application/vnd.osgi.bundle\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osgi.dp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dp\"]\n  },\n  \"application/vnd.osgi.subsystem\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"esa\"]\n  },\n  \"application/vnd.otps.ct-kip+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oxli.countgraph\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pagerduty+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.palm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n  },\n  \"application/vnd.panoply\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.paos+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.paos.xml\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.patentdive\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pawaafile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"paw\"]\n  },\n  \"application/vnd.pcos\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pg.format\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"str\"]\n  },\n  \"application/vnd.pg.osasli\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ei6\"]\n  },\n  \"application/vnd.piaccess.application-licence\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.picsel\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"efif\"]\n  },\n  \"application/vnd.pmi.widget\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wg\"]\n  },\n  \"application/vnd.poc.group-advertisement+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pocketlearn\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plf\"]\n  },\n  \"application/vnd.powerbuilder6\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pbd\"]\n  },\n  \"application/vnd.powerbuilder6-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder7\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder7-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder75\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder75-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.preminet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.previewsystems.box\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"box\"]\n  },\n  \"application/vnd.proteus.magazine\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mgz\"]\n  },\n  \"application/vnd.publishare-delta-tree\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qps\"]\n  },\n  \"application/vnd.pvi.ptid1\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ptid\"]\n  },\n  \"application/vnd.pwg-multiplexed\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pwg-xhtml-print+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.qualcomm.brew-app-res\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.quarantainenet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.quark.quarkxpress\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n  },\n  \"application/vnd.quobject-quoxdocument\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.moml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-audit+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-audit-conf+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-audit-conn+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-audit-dialog+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-audit-stream+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-conf+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-dialog+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-dialog-base+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-dialog-group+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-dialog-speech+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.msml-dialog-transform+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rainstor.data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rapid\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rar\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.realvnc.bed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bed\"]\n  },\n  \"application/vnd.recordare.musicxml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxl\"]\n  },\n  \"application/vnd.recordare.musicxml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"musicxml\"]\n  },\n  \"application/vnd.renlearn.rlprint\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.restful+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.rig.cryptonote\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cryptonote\"]\n  },\n  \"application/vnd.rim.cod\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cod\"]\n  },\n  \"application/vnd.rn-realmedia\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rm\"]\n  },\n  \"application/vnd.rn-realmedia-vbr\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rmvb\"]\n  },\n  \"application/vnd.route66.link66+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"link66\"]\n  },\n  \"application/vnd.rs-274x\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ruckus.download\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.s3sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sailingtracker.track\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"st\"]\n  },\n  \"application/vnd.sbm.cid\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sbm.mid2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.scribus\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.3df\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.csf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.doc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.eml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.mht\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.net\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.ppt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.tiff\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.xls\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealedmedia.softseal.html\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealedmedia.softseal.pdf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.seemail\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"see\"]\n  },\n  \"application/vnd.sema\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sema\"]\n  },\n  \"application/vnd.semd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"semd\"]\n  },\n  \"application/vnd.semf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"semf\"]\n  },\n  \"application/vnd.shana.informed.formdata\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ifm\"]\n  },\n  \"application/vnd.shana.informed.formtemplate\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"itp\"]\n  },\n  \"application/vnd.shana.informed.interchange\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"iif\"]\n  },\n  \"application/vnd.shana.informed.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ipk\"]\n  },\n  \"application/vnd.sigrok.session\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.simtech-mindmapper\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"twd\",\"twds\"]\n  },\n  \"application/vnd.siren+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.smaf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmf\"]\n  },\n  \"application/vnd.smart.notebook\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.smart.teacher\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"teacher\"]\n  },\n  \"application/vnd.software602.filler.form+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.software602.filler.form-xml-zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.solent.sdkm+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sdkm\",\"sdkd\"]\n  },\n  \"application/vnd.spotfire.dxp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dxp\"]\n  },\n  \"application/vnd.spotfire.sfs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sfs\"]\n  },\n  \"application/vnd.sqlite3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-cod\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-dtf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-ntf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.stardivision.calc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdc\"]\n  },\n  \"application/vnd.stardivision.draw\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sda\"]\n  },\n  \"application/vnd.stardivision.impress\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdd\"]\n  },\n  \"application/vnd.stardivision.math\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"smf\"]\n  },\n  \"application/vnd.stardivision.writer\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdw\",\"vor\"]\n  },\n  \"application/vnd.stardivision.writer-global\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sgl\"]\n  },\n  \"application/vnd.stepmania.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"smzip\"]\n  },\n  \"application/vnd.stepmania.stepchart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sm\"]\n  },\n  \"application/vnd.street-stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sun.wadl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wadl\"]\n  },\n  \"application/vnd.sun.xml.calc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxc\"]\n  },\n  \"application/vnd.sun.xml.calc.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stc\"]\n  },\n  \"application/vnd.sun.xml.draw\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxd\"]\n  },\n  \"application/vnd.sun.xml.draw.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"std\"]\n  },\n  \"application/vnd.sun.xml.impress\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxi\"]\n  },\n  \"application/vnd.sun.xml.impress.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sti\"]\n  },\n  \"application/vnd.sun.xml.math\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxm\"]\n  },\n  \"application/vnd.sun.xml.writer\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxw\"]\n  },\n  \"application/vnd.sun.xml.writer.global\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxg\"]\n  },\n  \"application/vnd.sun.xml.writer.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stw\"]\n  },\n  \"application/vnd.sus-calendar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sus\",\"susp\"]\n  },\n  \"application/vnd.svd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"svd\"]\n  },\n  \"application/vnd.swiftview-ics\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.symbian.install\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sis\",\"sisx\"]\n  },\n  \"application/vnd.syncml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xsm\"]\n  },\n  \"application/vnd.syncml.dm+wbxml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bdm\"]\n  },\n  \"application/vnd.syncml.dm+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xdm\"]\n  },\n  \"application/vnd.syncml.dm.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmddf+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmddf+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmtnds+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmtnds+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.ds.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tableschema+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tao.intent-module-archive\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tao\"]\n  },\n  \"application/vnd.tcpdump.pcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n  },\n  \"application/vnd.tmd.mediaflex.api+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tmobile-livetv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tmo\"]\n  },\n  \"application/vnd.tri.onesource\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.trid.tpt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tpt\"]\n  },\n  \"application/vnd.triscape.mxs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxs\"]\n  },\n  \"application/vnd.trueapp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tra\"]\n  },\n  \"application/vnd.truedoc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ubisoft.webplayer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ufdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ufd\",\"ufdl\"]\n  },\n  \"application/vnd.uiq.theme\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"utz\"]\n  },\n  \"application/vnd.umajin\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"umj\"]\n  },\n  \"application/vnd.unity\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"unityweb\"]\n  },\n  \"application/vnd.uoml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uoml\"]\n  },\n  \"application/vnd.uplanet.alert\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.alert-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.bearer-choice\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.bearer-choice-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.cacheop\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.cacheop-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.channel\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.channel-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.list\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.list-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.listcmd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.listcmd-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.signal\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uri-map\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.valve.source.material\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vcx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vcx\"]\n  },\n  \"application/vnd.vd-study\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vectorworks\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vel+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.verimatrix.vcas\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vidsoft.vidconference\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.visio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n  },\n  \"application/vnd.visionary\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vis\"]\n  },\n  \"application/vnd.vividence.scriptfile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vsf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vsf\"]\n  },\n  \"application/vnd.wap.sic\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wap.slc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wap.wbxml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wbxml\"]\n  },\n  \"application/vnd.wap.wmlc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmlc\"]\n  },\n  \"application/vnd.wap.wmlscriptc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmlsc\"]\n  },\n  \"application/vnd.webturbo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wtb\"]\n  },\n  \"application/vnd.wfa.p2p\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wfa.wsc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.windows.devicepairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wmc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wmf.bootstrap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.mathematica\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.mathematica.package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.player\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nbp\"]\n  },\n  \"application/vnd.wordperfect\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wpd\"]\n  },\n  \"application/vnd.wqd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wqd\"]\n  },\n  \"application/vnd.wrq-hp3000-labelled\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wt.stf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stf\"]\n  },\n  \"application/vnd.wv.csp+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wv.csp+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wv.ssp+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xacml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xara\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xar\"]\n  },\n  \"application/vnd.xfdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xfdl\"]\n  },\n  \"application/vnd.xfdl.webform\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmi+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.cpkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.dpkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.plan\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.ppkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.xlim\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.hv-dic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvd\"]\n  },\n  \"application/vnd.yamaha.hv-script\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvs\"]\n  },\n  \"application/vnd.yamaha.hv-voice\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvp\"]\n  },\n  \"application/vnd.yamaha.openscoreformat\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"osf\"]\n  },\n  \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"osfpvg\"]\n  },\n  \"application/vnd.yamaha.remote-setup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.smaf-audio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"saf\"]\n  },\n  \"application/vnd.yamaha.smaf-phrase\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spf\"]\n  },\n  \"application/vnd.yamaha.through-ngn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.tunnel-udpencap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yaoweme\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yellowriver-custom-menu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cmp\"]\n  },\n  \"application/vnd.youtube.yt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.zul\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"zir\",\"zirz\"]\n  },\n  \"application/vnd.zzazz.deck+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"zaz\"]\n  },\n  \"application/voicexml+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vxml\"]\n  },\n  \"application/voucher-cms+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vq-rtcpxr\": {\n    \"source\": \"iana\"\n  },\n  \"application/wasm\": {\n    \"compressible\": true,\n    \"extensions\": [\"wasm\"]\n  },\n  \"application/watcherinfo+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/webpush-options+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/whoispp-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/whoispp-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/widget\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wgt\"]\n  },\n  \"application/winhlp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"hlp\"]\n  },\n  \"application/wita\": {\n    \"source\": \"iana\"\n  },\n  \"application/wordperfect5.1\": {\n    \"source\": \"iana\"\n  },\n  \"application/wsdl+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wsdl\"]\n  },\n  \"application/wspolicy+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wspolicy\"]\n  },\n  \"application/x-7z-compressed\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"7z\"]\n  },\n  \"application/x-abiword\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"abw\"]\n  },\n  \"application/x-ace-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ace\"]\n  },\n  \"application/x-amf\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-apple-diskimage\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dmg\"]\n  },\n  \"application/x-arj\": {\n    \"compressible\": false,\n    \"extensions\": [\"arj\"]\n  },\n  \"application/x-authorware-bin\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n  },\n  \"application/x-authorware-map\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aam\"]\n  },\n  \"application/x-authorware-seg\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aas\"]\n  },\n  \"application/x-bcpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"bcpio\"]\n  },\n  \"application/x-bdoc\": {\n    \"compressible\": false,\n    \"extensions\": [\"bdoc\"]\n  },\n  \"application/x-bittorrent\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"torrent\"]\n  },\n  \"application/x-blorb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"blb\",\"blorb\"]\n  },\n  \"application/x-bzip\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"bz\"]\n  },\n  \"application/x-bzip2\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"bz2\",\"boz\"]\n  },\n  \"application/x-cbr\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n  },\n  \"application/x-cdlink\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcd\"]\n  },\n  \"application/x-cfs-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cfs\"]\n  },\n  \"application/x-chat\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"chat\"]\n  },\n  \"application/x-chess-pgn\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pgn\"]\n  },\n  \"application/x-chrome-extension\": {\n    \"extensions\": [\"crx\"]\n  },\n  \"application/x-cocoa\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"cco\"]\n  },\n  \"application/x-compress\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-conference\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nsc\"]\n  },\n  \"application/x-cpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cpio\"]\n  },\n  \"application/x-csh\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"csh\"]\n  },\n  \"application/x-deb\": {\n    \"compressible\": false\n  },\n  \"application/x-debian-package\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"deb\",\"udeb\"]\n  },\n  \"application/x-dgc-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dgc\"]\n  },\n  \"application/x-director\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n  },\n  \"application/x-doom\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wad\"]\n  },\n  \"application/x-dtbncx+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ncx\"]\n  },\n  \"application/x-dtbook+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dtb\"]\n  },\n  \"application/x-dtbresource+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"res\"]\n  },\n  \"application/x-dvi\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"dvi\"]\n  },\n  \"application/x-envoy\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"evy\"]\n  },\n  \"application/x-eva\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"eva\"]\n  },\n  \"application/x-font-bdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"bdf\"]\n  },\n  \"application/x-font-dos\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-framemaker\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-ghostscript\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gsf\"]\n  },\n  \"application/x-font-libgrx\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-linux-psf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"psf\"]\n  },\n  \"application/x-font-pcf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcf\"]\n  },\n  \"application/x-font-snf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"snf\"]\n  },\n  \"application/x-font-speedo\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-sunos-news\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-type1\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n  },\n  \"application/x-font-vfont\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-freearc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"arc\"]\n  },\n  \"application/x-futuresplash\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"spl\"]\n  },\n  \"application/x-gca-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gca\"]\n  },\n  \"application/x-glulx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ulx\"]\n  },\n  \"application/x-gnumeric\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gnumeric\"]\n  },\n  \"application/x-gramps-xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gramps\"]\n  },\n  \"application/x-gtar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gtar\"]\n  },\n  \"application/x-gzip\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-hdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"hdf\"]\n  },\n  \"application/x-httpd-php\": {\n    \"compressible\": true,\n    \"extensions\": [\"php\"]\n  },\n  \"application/x-install-instructions\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"install\"]\n  },\n  \"application/x-iso9660-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"iso\"]\n  },\n  \"application/x-java-archive-diff\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"jardiff\"]\n  },\n  \"application/x-java-jnlp-file\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"jnlp\"]\n  },\n  \"application/x-javascript\": {\n    \"compressible\": true\n  },\n  \"application/x-latex\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"latex\"]\n  },\n  \"application/x-lua-bytecode\": {\n    \"extensions\": [\"luac\"]\n  },\n  \"application/x-lzh-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"lzh\",\"lha\"]\n  },\n  \"application/x-makeself\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"run\"]\n  },\n  \"application/x-mie\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mie\"]\n  },\n  \"application/x-mobipocket-ebook\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"prc\",\"mobi\"]\n  },\n  \"application/x-mpegurl\": {\n    \"compressible\": false\n  },\n  \"application/x-ms-application\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"application\"]\n  },\n  \"application/x-ms-shortcut\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"lnk\"]\n  },\n  \"application/x-ms-wmd\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmd\"]\n  },\n  \"application/x-ms-wmz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmz\"]\n  },\n  \"application/x-ms-xbap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xbap\"]\n  },\n  \"application/x-msaccess\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mdb\"]\n  },\n  \"application/x-msbinder\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"obd\"]\n  },\n  \"application/x-mscardfile\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"crd\"]\n  },\n  \"application/x-msclip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"clp\"]\n  },\n  \"application/x-msdos-program\": {\n    \"extensions\": [\"exe\"]\n  },\n  \"application/x-msdownload\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n  },\n  \"application/x-msmediaview\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n  },\n  \"application/x-msmetafile\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n  },\n  \"application/x-msmoney\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mny\"]\n  },\n  \"application/x-mspublisher\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pub\"]\n  },\n  \"application/x-msschedule\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"scd\"]\n  },\n  \"application/x-msterminal\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"trm\"]\n  },\n  \"application/x-mswrite\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wri\"]\n  },\n  \"application/x-netcdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nc\",\"cdf\"]\n  },\n  \"application/x-ns-proxy-autoconfig\": {\n    \"compressible\": true,\n    \"extensions\": [\"pac\"]\n  },\n  \"application/x-nzb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nzb\"]\n  },\n  \"application/x-perl\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"pl\",\"pm\"]\n  },\n  \"application/x-pilot\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"prc\",\"pdb\"]\n  },\n  \"application/x-pkcs12\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"p12\",\"pfx\"]\n  },\n  \"application/x-pkcs7-certificates\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p7b\",\"spc\"]\n  },\n  \"application/x-pkcs7-certreqresp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p7r\"]\n  },\n  \"application/x-rar-compressed\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"rar\"]\n  },\n  \"application/x-redhat-package-manager\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"rpm\"]\n  },\n  \"application/x-research-info-systems\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ris\"]\n  },\n  \"application/x-sea\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"sea\"]\n  },\n  \"application/x-sh\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"sh\"]\n  },\n  \"application/x-shar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"shar\"]\n  },\n  \"application/x-shockwave-flash\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"swf\"]\n  },\n  \"application/x-silverlight-app\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xap\"]\n  },\n  \"application/x-sql\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sql\"]\n  },\n  \"application/x-stuffit\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"sit\"]\n  },\n  \"application/x-stuffitx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sitx\"]\n  },\n  \"application/x-subrip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"srt\"]\n  },\n  \"application/x-sv4cpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sv4cpio\"]\n  },\n  \"application/x-sv4crc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sv4crc\"]\n  },\n  \"application/x-t3vm-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"t3\"]\n  },\n  \"application/x-tads\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gam\"]\n  },\n  \"application/x-tar\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"tar\"]\n  },\n  \"application/x-tcl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tcl\",\"tk\"]\n  },\n  \"application/x-tex\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tex\"]\n  },\n  \"application/x-tex-tfm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tfm\"]\n  },\n  \"application/x-texinfo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"texinfo\",\"texi\"]\n  },\n  \"application/x-tgif\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"obj\"]\n  },\n  \"application/x-ustar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ustar\"]\n  },\n  \"application/x-virtualbox-hdd\": {\n    \"compressible\": true,\n    \"extensions\": [\"hdd\"]\n  },\n  \"application/x-virtualbox-ova\": {\n    \"compressible\": true,\n    \"extensions\": [\"ova\"]\n  },\n  \"application/x-virtualbox-ovf\": {\n    \"compressible\": true,\n    \"extensions\": [\"ovf\"]\n  },\n  \"application/x-virtualbox-vbox\": {\n    \"compressible\": true,\n    \"extensions\": [\"vbox\"]\n  },\n  \"application/x-virtualbox-vbox-extpack\": {\n    \"compressible\": false,\n    \"extensions\": [\"vbox-extpack\"]\n  },\n  \"application/x-virtualbox-vdi\": {\n    \"compressible\": true,\n    \"extensions\": [\"vdi\"]\n  },\n  \"application/x-virtualbox-vhd\": {\n    \"compressible\": true,\n    \"extensions\": [\"vhd\"]\n  },\n  \"application/x-virtualbox-vmdk\": {\n    \"compressible\": true,\n    \"extensions\": [\"vmdk\"]\n  },\n  \"application/x-wais-source\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"src\"]\n  },\n  \"application/x-web-app-manifest+json\": {\n    \"compressible\": true,\n    \"extensions\": [\"webapp\"]\n  },\n  \"application/x-www-form-urlencoded\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/x-x509-ca-cert\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"der\",\"crt\",\"pem\"]\n  },\n  \"application/x-xfig\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fig\"]\n  },\n  \"application/x-xliff+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xlf\"]\n  },\n  \"application/x-xpinstall\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"xpi\"]\n  },\n  \"application/x-xz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xz\"]\n  },\n  \"application/x-zmachine\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n  },\n  \"application/x400-bp\": {\n    \"source\": \"iana\"\n  },\n  \"application/xacml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xaml+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xaml\"]\n  },\n  \"application/xcap-att+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xcap-caps+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xcap-diff+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xdf\"]\n  },\n  \"application/xcap-el+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xcap-error+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xcap-ns+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xcon-conference-info+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xcon-conference-info-diff+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xenc+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xenc\"]\n  },\n  \"application/xhtml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xhtml\",\"xht\"]\n  },\n  \"application/xhtml-voice+xml\": {\n    \"source\": \"apache\"\n  },\n  \"application/xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n  },\n  \"application/xml-dtd\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dtd\"]\n  },\n  \"application/xml-external-parsed-entity\": {\n    \"source\": \"iana\"\n  },\n  \"application/xml-patch+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xmpp+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/xop+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xop\"]\n  },\n  \"application/xproc+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xpl\"]\n  },\n  \"application/xslt+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xslt\"]\n  },\n  \"application/xspf+xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xspf\"]\n  },\n  \"application/xv+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n  },\n  \"application/yang\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"yang\"]\n  },\n  \"application/yang-data+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-data+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/yang-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-patch+xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/yin+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"yin\"]\n  },\n  \"application/zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"zip\"]\n  },\n  \"application/zlib\": {\n    \"source\": \"iana\"\n  },\n  \"audio/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/32kadpcm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/3gpp\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"3gpp\"]\n  },\n  \"audio/3gpp2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/adpcm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"adp\"]\n  },\n  \"audio/amr\": {\n    \"source\": \"iana\"\n  },\n  \"audio/amr-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/amr-wb+\": {\n    \"source\": \"iana\"\n  },\n  \"audio/aptx\": {\n    \"source\": \"iana\"\n  },\n  \"audio/asc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac-advanced-lossless\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac-x\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/basic\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"au\",\"snd\"]\n  },\n  \"audio/bv16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/bv32\": {\n    \"source\": \"iana\"\n  },\n  \"audio/clearmode\": {\n    \"source\": \"iana\"\n  },\n  \"audio/cn\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dat12\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dls\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es201108\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202050\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202211\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202212\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dv\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dvi4\": {\n    \"source\": \"iana\"\n  },\n  \"audio/eac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc-qcp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evs\": {\n    \"source\": \"iana\"\n  },\n  \"audio/fwdred\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g711-0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g719\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g722\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g7221\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g723\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-24\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-32\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-40\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g728\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g7291\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729d\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729e\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm-efr\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm-hr-08\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ilbc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ip-mr_v2.5\": {\n    \"source\": \"iana\"\n  },\n  \"audio/isac\": {\n    \"source\": \"apache\"\n  },\n  \"audio/l16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/l20\": {\n    \"source\": \"iana\"\n  },\n  \"audio/l24\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"audio/l8\": {\n    \"source\": \"iana\"\n  },\n  \"audio/lpc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp1200\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp2400\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp600\": {\n    \"source\": \"iana\"\n  },\n  \"audio/midi\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n  },\n  \"audio/mobile-xmf\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mp3\": {\n    \"compressible\": false,\n    \"extensions\": [\"mp3\"]\n  },\n  \"audio/mp4\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"m4a\",\"mp4a\"]\n  },\n  \"audio/mp4a-latm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpa\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpa-robust\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n  },\n  \"audio/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"audio/musepack\": {\n    \"source\": \"apache\"\n  },\n  \"audio/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"oga\",\"ogg\",\"spx\"]\n  },\n  \"audio/opus\": {\n    \"source\": \"iana\"\n  },\n  \"audio/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcma\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcma-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcmu\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcmu-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/prs.sid\": {\n    \"source\": \"iana\"\n  },\n  \"audio/qcelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/red\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtp-midi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"audio/s3m\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"s3m\"]\n  },\n  \"audio/silk\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sil\"]\n  },\n  \"audio/smv\": {\n    \"source\": \"iana\"\n  },\n  \"audio/smv-qcp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/smv0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/sp-midi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/speex\": {\n    \"source\": \"iana\"\n  },\n  \"audio/t140c\": {\n    \"source\": \"iana\"\n  },\n  \"audio/t38\": {\n    \"source\": \"iana\"\n  },\n  \"audio/telephone-event\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tone\": {\n    \"source\": \"iana\"\n  },\n  \"audio/uemclip\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vdvi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vmr-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.3gpp.iufp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.4sb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.audiokoz\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.celp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cisco.nse\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cmles.radio-events\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cns.anp1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cns.inf1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dece.audio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uva\",\"uvva\"]\n  },\n  \"audio/vnd.digital-winds\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"eol\"]\n  },\n  \"audio/vnd.dlna.adts\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.heaac.1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.heaac.2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.mlp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.mps\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2x\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2z\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pulse.1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dra\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dra\"]\n  },\n  \"audio/vnd.dts\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dts\"]\n  },\n  \"audio/vnd.dts.hd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dtshd\"]\n  },\n  \"audio/vnd.dvb.file\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.everad.plj\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.hns.audio\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.lucent.voice\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lvp\"]\n  },\n  \"audio/vnd.ms-playready.media.pya\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pya\"]\n  },\n  \"audio/vnd.nokia.mobile-xmf\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.nortel.vbk\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.nuera.ecelp4800\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp4800\"]\n  },\n  \"audio/vnd.nuera.ecelp7470\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp7470\"]\n  },\n  \"audio/vnd.nuera.ecelp9600\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp9600\"]\n  },\n  \"audio/vnd.octel.sbc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.presonus.multitrack\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.qcelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.rhetorex.32kadpcm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.rip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rip\"]\n  },\n  \"audio/vnd.rn-realaudio\": {\n    \"compressible\": false\n  },\n  \"audio/vnd.sealedmedia.softseal.mpeg\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.vmx.cvsd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.wave\": {\n    \"compressible\": false\n  },\n  \"audio/vorbis\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"audio/vorbis-config\": {\n    \"source\": \"iana\"\n  },\n  \"audio/wav\": {\n    \"compressible\": false,\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/wave\": {\n    \"compressible\": false,\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/webm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"weba\"]\n  },\n  \"audio/x-aac\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"aac\"]\n  },\n  \"audio/x-aiff\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n  },\n  \"audio/x-caf\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"caf\"]\n  },\n  \"audio/x-flac\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"flac\"]\n  },\n  \"audio/x-m4a\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"m4a\"]\n  },\n  \"audio/x-matroska\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mka\"]\n  },\n  \"audio/x-mpegurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"m3u\"]\n  },\n  \"audio/x-ms-wax\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wax\"]\n  },\n  \"audio/x-ms-wma\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wma\"]\n  },\n  \"audio/x-pn-realaudio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ram\",\"ra\"]\n  },\n  \"audio/x-pn-realaudio-plugin\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rmp\"]\n  },\n  \"audio/x-realaudio\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"ra\"]\n  },\n  \"audio/x-tta\": {\n    \"source\": \"apache\"\n  },\n  \"audio/x-wav\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/xm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xm\"]\n  },\n  \"chemical/x-cdx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cdx\"]\n  },\n  \"chemical/x-cif\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cif\"]\n  },\n  \"chemical/x-cmdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cmdf\"]\n  },\n  \"chemical/x-cml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cml\"]\n  },\n  \"chemical/x-csml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"csml\"]\n  },\n  \"chemical/x-pdb\": {\n    \"source\": \"apache\"\n  },\n  \"chemical/x-xyz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xyz\"]\n  },\n  \"font/collection\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ttc\"]\n  },\n  \"font/otf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"otf\"]\n  },\n  \"font/sfnt\": {\n    \"source\": \"iana\"\n  },\n  \"font/ttf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ttf\"]\n  },\n  \"font/woff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"woff\"]\n  },\n  \"font/woff2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"woff2\"]\n  },\n  \"image/aces\": {\n    \"source\": \"iana\"\n  },\n  \"image/apng\": {\n    \"compressible\": false,\n    \"extensions\": [\"apng\"]\n  },\n  \"image/bmp\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"bmp\"]\n  },\n  \"image/cgm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cgm\"]\n  },\n  \"image/dicom-rle\": {\n    \"source\": \"iana\"\n  },\n  \"image/emf\": {\n    \"source\": \"iana\"\n  },\n  \"image/fits\": {\n    \"source\": \"iana\"\n  },\n  \"image/g3fax\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g3\"]\n  },\n  \"image/gif\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"gif\"]\n  },\n  \"image/ief\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ief\"]\n  },\n  \"image/jls\": {\n    \"source\": \"iana\"\n  },\n  \"image/jp2\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jp2\",\"jpg2\"]\n  },\n  \"image/jpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n  },\n  \"image/jpm\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpm\"]\n  },\n  \"image/jpx\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpx\",\"jpf\"]\n  },\n  \"image/ktx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktx\"]\n  },\n  \"image/naplps\": {\n    \"source\": \"iana\"\n  },\n  \"image/pjpeg\": {\n    \"compressible\": false\n  },\n  \"image/png\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"png\"]\n  },\n  \"image/prs.btif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"btif\"]\n  },\n  \"image/prs.pti\": {\n    \"source\": \"iana\"\n  },\n  \"image/pwg-raster\": {\n    \"source\": \"iana\"\n  },\n  \"image/sgi\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sgi\"]\n  },\n  \"image/svg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"svg\",\"svgz\"]\n  },\n  \"image/t38\": {\n    \"source\": \"iana\"\n  },\n  \"image/tiff\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"tiff\",\"tif\"]\n  },\n  \"image/tiff-fx\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.adobe.photoshop\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"psd\"]\n  },\n  \"image/vnd.airzip.accelerator.azv\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.cns.inf2\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.dece.graphic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n  },\n  \"image/vnd.djvu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"djvu\",\"djv\"]\n  },\n  \"image/vnd.dvb.subtitle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sub\"]\n  },\n  \"image/vnd.dwg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dwg\"]\n  },\n  \"image/vnd.dxf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dxf\"]\n  },\n  \"image/vnd.fastbidsheet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fbs\"]\n  },\n  \"image/vnd.fpx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fpx\"]\n  },\n  \"image/vnd.fst\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fst\"]\n  },\n  \"image/vnd.fujixerox.edmics-mmr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmr\"]\n  },\n  \"image/vnd.fujixerox.edmics-rlc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rlc\"]\n  },\n  \"image/vnd.globalgraphics.pgb\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.microsoft.icon\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.mix\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.mozilla.apng\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.ms-modi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mdi\"]\n  },\n  \"image/vnd.ms-photo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wdp\"]\n  },\n  \"image/vnd.net-fpx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"npx\"]\n  },\n  \"image/vnd.radiance\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealed.png\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealedmedia.softseal.gif\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealedmedia.softseal.jpg\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.svf\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.tencent.tap\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.valve.source.texture\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.wap.wbmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wbmp\"]\n  },\n  \"image/vnd.xiff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xif\"]\n  },\n  \"image/vnd.zbrush.pcx\": {\n    \"source\": \"iana\"\n  },\n  \"image/webp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"webp\"]\n  },\n  \"image/wmf\": {\n    \"source\": \"iana\"\n  },\n  \"image/x-3ds\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"3ds\"]\n  },\n  \"image/x-cmu-raster\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ras\"]\n  },\n  \"image/x-cmx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cmx\"]\n  },\n  \"image/x-freehand\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n  },\n  \"image/x-icon\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ico\"]\n  },\n  \"image/x-jng\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"jng\"]\n  },\n  \"image/x-mrsid-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sid\"]\n  },\n  \"image/x-ms-bmp\": {\n    \"source\": \"nginx\",\n    \"compressible\": true,\n    \"extensions\": [\"bmp\"]\n  },\n  \"image/x-pcx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcx\"]\n  },\n  \"image/x-pict\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pic\",\"pct\"]\n  },\n  \"image/x-portable-anymap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pnm\"]\n  },\n  \"image/x-portable-bitmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pbm\"]\n  },\n  \"image/x-portable-graymap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pgm\"]\n  },\n  \"image/x-portable-pixmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ppm\"]\n  },\n  \"image/x-rgb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rgb\"]\n  },\n  \"image/x-tga\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tga\"]\n  },\n  \"image/x-xbitmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xbm\"]\n  },\n  \"image/x-xcf\": {\n    \"compressible\": false\n  },\n  \"image/x-xpixmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xpm\"]\n  },\n  \"image/x-xwindowdump\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xwd\"]\n  },\n  \"message/cpim\": {\n    \"source\": \"iana\"\n  },\n  \"message/delivery-status\": {\n    \"source\": \"iana\"\n  },\n  \"message/disposition-notification\": {\n    \"source\": \"iana\",\n    \"extensions\": [\n      \"disposition-notification\"\n    ]\n  },\n  \"message/external-body\": {\n    \"source\": \"iana\"\n  },\n  \"message/feedback-report\": {\n    \"source\": \"iana\"\n  },\n  \"message/global\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8msg\"]\n  },\n  \"message/global-delivery-status\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8dsn\"]\n  },\n  \"message/global-disposition-notification\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8mdn\"]\n  },\n  \"message/global-headers\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8hdr\"]\n  },\n  \"message/http\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"message/imdn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"message/news\": {\n    \"source\": \"iana\"\n  },\n  \"message/partial\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"message/rfc822\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"eml\",\"mime\"]\n  },\n  \"message/s-http\": {\n    \"source\": \"iana\"\n  },\n  \"message/sip\": {\n    \"source\": \"iana\"\n  },\n  \"message/sipfrag\": {\n    \"source\": \"iana\"\n  },\n  \"message/tracking-status\": {\n    \"source\": \"iana\"\n  },\n  \"message/vnd.si.simp\": {\n    \"source\": \"iana\"\n  },\n  \"message/vnd.wfa.wsc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wsc\"]\n  },\n  \"model/3mf\": {\n    \"source\": \"iana\"\n  },\n  \"model/gltf+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"gltf\"]\n  },\n  \"model/gltf-binary\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"glb\"]\n  },\n  \"model/iges\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"igs\",\"iges\"]\n  },\n  \"model/mesh\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n  },\n  \"model/vnd.collada+xml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dae\"]\n  },\n  \"model/vnd.dwf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dwf\"]\n  },\n  \"model/vnd.flatland.3dml\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.gdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gdl\"]\n  },\n  \"model/vnd.gs-gdl\": {\n    \"source\": \"apache\"\n  },\n  \"model/vnd.gs.gdl\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.gtw\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gtw\"]\n  },\n  \"model/vnd.moml+xml\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.mts\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mts\"]\n  },\n  \"model/vnd.opengex\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.parasolid.transmit.binary\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.parasolid.transmit.text\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.rosette.annotated-data-model\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.valve.source.compiled-map\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.vtu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vtu\"]\n  },\n  \"model/vrml\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"wrl\",\"vrml\"]\n  },\n  \"model/x3d+binary\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"x3db\",\"x3dbz\"]\n  },\n  \"model/x3d+fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"model/x3d+vrml\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"x3dv\",\"x3dvz\"]\n  },\n  \"model/x3d+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"x3d\",\"x3dz\"]\n  },\n  \"model/x3d-vrml\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/alternative\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/appledouble\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/byteranges\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/digest\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/encrypted\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/form-data\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/header-set\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/mixed\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/multilingual\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/parallel\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/related\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/report\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/signed\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/vnd.bint.med-plus\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/voice-message\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/x-mixed-replace\": {\n    \"source\": \"iana\"\n  },\n  \"text/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/cache-manifest\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"appcache\",\"manifest\"]\n  },\n  \"text/calendar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ics\",\"ifb\"]\n  },\n  \"text/calender\": {\n    \"compressible\": true\n  },\n  \"text/cmd\": {\n    \"compressible\": true\n  },\n  \"text/coffeescript\": {\n    \"extensions\": [\"coffee\",\"litcoffee\"]\n  },\n  \"text/css\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"css\"]\n  },\n  \"text/csv\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"csv\"]\n  },\n  \"text/csv-schema\": {\n    \"source\": \"iana\"\n  },\n  \"text/directory\": {\n    \"source\": \"iana\"\n  },\n  \"text/dns\": {\n    \"source\": \"iana\"\n  },\n  \"text/ecmascript\": {\n    \"source\": \"iana\"\n  },\n  \"text/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"text/enriched\": {\n    \"source\": \"iana\"\n  },\n  \"text/fwdred\": {\n    \"source\": \"iana\"\n  },\n  \"text/grammar-ref-list\": {\n    \"source\": \"iana\"\n  },\n  \"text/html\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"html\",\"htm\",\"shtml\"]\n  },\n  \"text/jade\": {\n    \"extensions\": [\"jade\"]\n  },\n  \"text/javascript\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"text/jcr-cnd\": {\n    \"source\": \"iana\"\n  },\n  \"text/jsx\": {\n    \"compressible\": true,\n    \"extensions\": [\"jsx\"]\n  },\n  \"text/less\": {\n    \"extensions\": [\"less\"]\n  },\n  \"text/markdown\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"markdown\",\"md\"]\n  },\n  \"text/mathml\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"mml\"]\n  },\n  \"text/mizar\": {\n    \"source\": \"iana\"\n  },\n  \"text/n3\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"n3\"]\n  },\n  \"text/parameters\": {\n    \"source\": \"iana\"\n  },\n  \"text/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/plain\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n  },\n  \"text/provenance-notation\": {\n    \"source\": \"iana\"\n  },\n  \"text/prs.fallenstein.rst\": {\n    \"source\": \"iana\"\n  },\n  \"text/prs.lines.tag\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dsc\"]\n  },\n  \"text/prs.prop.logic\": {\n    \"source\": \"iana\"\n  },\n  \"text/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/red\": {\n    \"source\": \"iana\"\n  },\n  \"text/rfc822-headers\": {\n    \"source\": \"iana\"\n  },\n  \"text/richtext\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtx\"]\n  },\n  \"text/rtf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtf\"]\n  },\n  \"text/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"text/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"text/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"text/sgml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sgml\",\"sgm\"]\n  },\n  \"text/shex\": {\n    \"extensions\": [\"shex\"]\n  },\n  \"text/slim\": {\n    \"extensions\": [\"slim\",\"slm\"]\n  },\n  \"text/strings\": {\n    \"source\": \"iana\"\n  },\n  \"text/stylus\": {\n    \"extensions\": [\"stylus\",\"styl\"]\n  },\n  \"text/t140\": {\n    \"source\": \"iana\"\n  },\n  \"text/tab-separated-values\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tsv\"]\n  },\n  \"text/troff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n  },\n  \"text/turtle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ttl\"]\n  },\n  \"text/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/uri-list\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uri\",\"uris\",\"urls\"]\n  },\n  \"text/vcard\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"vcard\"]\n  },\n  \"text/vnd.a\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.abc\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.ascii-art\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.curl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"curl\"]\n  },\n  \"text/vnd.curl.dcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dcurl\"]\n  },\n  \"text/vnd.curl.mcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mcurl\"]\n  },\n  \"text/vnd.curl.scurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"scurl\"]\n  },\n  \"text/vnd.debian.copyright\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.dmclientscript\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.dvb.subtitle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sub\"]\n  },\n  \"text/vnd.esmertec.theme-descriptor\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.fly\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fly\"]\n  },\n  \"text/vnd.fmi.flexstor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flx\"]\n  },\n  \"text/vnd.graphviz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gv\"]\n  },\n  \"text/vnd.in3d.3dml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3dml\"]\n  },\n  \"text/vnd.in3d.spot\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spot\"]\n  },\n  \"text/vnd.iptc.newsml\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.iptc.nitf\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.latex-z\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.motorola.reflex\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.ms-mediapackage\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.net2phone.commcenter.command\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.radisys.msml-basic-layout\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.si.uricatalogue\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.sun.j2me.app-descriptor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jad\"]\n  },\n  \"text/vnd.trolltech.linguist\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.si\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.sl\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.wml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wml\"]\n  },\n  \"text/vnd.wap.wmlscript\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmls\"]\n  },\n  \"text/vtt\": {\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"vtt\"]\n  },\n  \"text/x-asm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"s\",\"asm\"]\n  },\n  \"text/x-c\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n  },\n  \"text/x-component\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"htc\"]\n  },\n  \"text/x-fortran\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n  },\n  \"text/x-gwt-rpc\": {\n    \"compressible\": true\n  },\n  \"text/x-handlebars-template\": {\n    \"extensions\": [\"hbs\"]\n  },\n  \"text/x-java-source\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"java\"]\n  },\n  \"text/x-jquery-tmpl\": {\n    \"compressible\": true\n  },\n  \"text/x-lua\": {\n    \"extensions\": [\"lua\"]\n  },\n  \"text/x-markdown\": {\n    \"compressible\": true,\n    \"extensions\": [\"mkd\"]\n  },\n  \"text/x-nfo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nfo\"]\n  },\n  \"text/x-opml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"opml\"]\n  },\n  \"text/x-org\": {\n    \"compressible\": true,\n    \"extensions\": [\"org\"]\n  },\n  \"text/x-pascal\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p\",\"pas\"]\n  },\n  \"text/x-processing\": {\n    \"compressible\": true,\n    \"extensions\": [\"pde\"]\n  },\n  \"text/x-sass\": {\n    \"extensions\": [\"sass\"]\n  },\n  \"text/x-scss\": {\n    \"extensions\": [\"scss\"]\n  },\n  \"text/x-setext\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"etx\"]\n  },\n  \"text/x-sfv\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sfv\"]\n  },\n  \"text/x-suse-ymp\": {\n    \"compressible\": true,\n    \"extensions\": [\"ymp\"]\n  },\n  \"text/x-uuencode\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"uu\"]\n  },\n  \"text/x-vcalendar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcs\"]\n  },\n  \"text/x-vcard\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcf\"]\n  },\n  \"text/xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xml\"]\n  },\n  \"text/xml-external-parsed-entity\": {\n    \"source\": \"iana\"\n  },\n  \"text/yaml\": {\n    \"extensions\": [\"yaml\",\"yml\"]\n  },\n  \"video/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/3gpp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3gp\",\"3gpp\"]\n  },\n  \"video/3gpp-tt\": {\n    \"source\": \"iana\"\n  },\n  \"video/3gpp2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3g2\"]\n  },\n  \"video/bmpeg\": {\n    \"source\": \"iana\"\n  },\n  \"video/bt656\": {\n    \"source\": \"iana\"\n  },\n  \"video/celb\": {\n    \"source\": \"iana\"\n  },\n  \"video/dv\": {\n    \"source\": \"iana\"\n  },\n  \"video/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"video/h261\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h261\"]\n  },\n  \"video/h263\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h263\"]\n  },\n  \"video/h263-1998\": {\n    \"source\": \"iana\"\n  },\n  \"video/h263-2000\": {\n    \"source\": \"iana\"\n  },\n  \"video/h264\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h264\"]\n  },\n  \"video/h264-rcdo\": {\n    \"source\": \"iana\"\n  },\n  \"video/h264-svc\": {\n    \"source\": \"iana\"\n  },\n  \"video/h265\": {\n    \"source\": \"iana\"\n  },\n  \"video/iso.segment\": {\n    \"source\": \"iana\"\n  },\n  \"video/jpeg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jpgv\"]\n  },\n  \"video/jpeg2000\": {\n    \"source\": \"iana\"\n  },\n  \"video/jpm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"jpm\",\"jpgm\"]\n  },\n  \"video/mj2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mj2\",\"mjp2\"]\n  },\n  \"video/mp1s\": {\n    \"source\": \"iana\"\n  },\n  \"video/mp2p\": {\n    \"source\": \"iana\"\n  },\n  \"video/mp2t\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ts\"]\n  },\n  \"video/mp4\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n  },\n  \"video/mp4v-es\": {\n    \"source\": \"iana\"\n  },\n  \"video/mpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n  },\n  \"video/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"video/mpv\": {\n    \"source\": \"iana\"\n  },\n  \"video/nv\": {\n    \"source\": \"iana\"\n  },\n  \"video/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ogv\"]\n  },\n  \"video/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/pointer\": {\n    \"source\": \"iana\"\n  },\n  \"video/quicktime\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"qt\",\"mov\"]\n  },\n  \"video/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/raw\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"video/smpte291\": {\n    \"source\": \"iana\"\n  },\n  \"video/smpte292m\": {\n    \"source\": \"iana\"\n  },\n  \"video/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/vc1\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.cctv\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dece.hd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvh\",\"uvvh\"]\n  },\n  \"video/vnd.dece.mobile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvm\",\"uvvm\"]\n  },\n  \"video/vnd.dece.mp4\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dece.pd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvp\",\"uvvp\"]\n  },\n  \"video/vnd.dece.sd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvs\",\"uvvs\"]\n  },\n  \"video/vnd.dece.video\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvv\",\"uvvv\"]\n  },\n  \"video/vnd.directv.mpeg\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.directv.mpeg-tts\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dlna.mpeg-tts\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dvb.file\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dvb\"]\n  },\n  \"video/vnd.fvt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fvt\"]\n  },\n  \"video/vnd.hns.video\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.1dparityfec-1010\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.1dparityfec-2005\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.2dparityfec-1010\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.2dparityfec-2005\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.ttsavc\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.ttsmpeg2\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.motorola.video\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.motorola.videop\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.mpegurl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxu\",\"m4u\"]\n  },\n  \"video/vnd.ms-playready.media.pyv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pyv\"]\n  },\n  \"video/vnd.nokia.interleaved-multimedia\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.nokia.mp4vr\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.nokia.videovoip\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.objectvideo\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.radgamettools.bink\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.radgamettools.smacker\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.mpeg1\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.mpeg4\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.swf\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealedmedia.softseal.mov\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.uvvu.mp4\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvu\",\"uvvu\"]\n  },\n  \"video/vnd.vivo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"viv\"]\n  },\n  \"video/vp8\": {\n    \"source\": \"iana\"\n  },\n  \"video/webm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"webm\"]\n  },\n  \"video/x-f4v\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"f4v\"]\n  },\n  \"video/x-fli\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fli\"]\n  },\n  \"video/x-flv\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"flv\"]\n  },\n  \"video/x-m4v\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"m4v\"]\n  },\n  \"video/x-matroska\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n  },\n  \"video/x-mng\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mng\"]\n  },\n  \"video/x-ms-asf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"asf\",\"asx\"]\n  },\n  \"video/x-ms-vob\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vob\"]\n  },\n  \"video/x-ms-wm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wm\"]\n  },\n  \"video/x-ms-wmv\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"wmv\"]\n  },\n  \"video/x-ms-wmx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmx\"]\n  },\n  \"video/x-ms-wvx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wvx\"]\n  },\n  \"video/x-msvideo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"avi\"]\n  },\n  \"video/x-sgi-movie\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"movie\"]\n  },\n  \"video/x-smv\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"smv\"]\n  },\n  \"x-conference/x-cooltalk\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ice\"]\n  },\n  \"x-shader/x-fragment\": {\n    \"compressible\": true\n  },\n  \"x-shader/x-vertex\": {\n    \"compressible\": true\n  }\n}\n", "/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n", "/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n  var mime = match && db[match[1].toLowerCase()]\n\n  if (mime && mime.charset) {\n    return mime.charset\n  }\n\n  // default text/* to utf-8\n  if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n    return 'UTF-8'\n  }\n\n  return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n  // TODO: should this even be in this module?\n  if (!str || typeof str !== 'string') {\n    return false\n  }\n\n  var mime = str.indexOf('/') === -1\n    ? exports.lookup(str)\n    : str\n\n  if (!mime) {\n    return false\n  }\n\n  // TODO: use content-type or other module\n  if (mime.indexOf('charset') === -1) {\n    var charset = exports.charset(mime)\n    if (charset) mime += '; charset=' + charset.toLowerCase()\n  }\n\n  return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n  // get extensions\n  var exts = match && exports.extensions[match[1].toLowerCase()]\n\n  if (!exts || !exts.length) {\n    return false\n  }\n\n  return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n  if (!path || typeof path !== 'string') {\n    return false\n  }\n\n  // get the extension (\"ext\" or \".ext\" or full path)\n  var extension = extname('x.' + path)\n    .toLowerCase()\n    .substr(1)\n\n  if (!extension) {\n    return false\n  }\n\n  return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n  // source preference (least -> most)\n  var preference = ['nginx', 'apache', undefined, 'iana']\n\n  Object.keys(db).forEach(function forEachMimeType (type) {\n    var mime = db[type]\n    var exts = mime.extensions\n\n    if (!exts || !exts.length) {\n      return\n    }\n\n    // mime -> extensions\n    extensions[type] = exts\n\n    // extension -> mime\n    for (var i = 0; i < exts.length; i++) {\n      var extension = exts[i]\n\n      if (types[extension]) {\n        var from = preference.indexOf(db[types[extension]].source)\n        var to = preference.indexOf(mime.source)\n\n        if (types[extension] !== 'application/octet-stream' &&\n          (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n          // skip the remapping\n          continue\n        }\n      }\n\n      // set the extension -> mime\n      types[extension] = type\n    }\n  })\n}\n", "/*!\n * bytes\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015 Jed Watson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = bytes;\nmodule.exports.format = format;\nmodule.exports.parse = parse;\n\n/**\n * Module variables.\n * @private\n */\n\nvar formatThousandsRegExp = /\\B(?=(\\d{3})+(?!\\d))/g;\n\nvar formatDecimalsRegExp = /(?:\\.0*|(\\.[^0]+)0+)$/;\n\nvar map = {\n  b:  1,\n  kb: 1 << 10,\n  mb: 1 << 20,\n  gb: 1 << 30,\n  tb: ((1 << 30) * 1024)\n};\n\nvar parseRegExp = /^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb)$/i;\n\n/**\n * Convert the given value in bytes into a string or parse to string to an integer in bytes.\n *\n * @param {string|number} value\n * @param {{\n *  case: [string],\n *  decimalPlaces: [number]\n *  fixedDecimals: [boolean]\n *  thousandsSeparator: [string]\n *  unitSeparator: [string]\n *  }} [options] bytes options.\n *\n * @returns {string|number|null}\n */\n\nfunction bytes(value, options) {\n  if (typeof value === 'string') {\n    return parse(value);\n  }\n\n  if (typeof value === 'number') {\n    return format(value, options);\n  }\n\n  return null;\n}\n\n/**\n * Format the given value in bytes into a string.\n *\n * If the value is negative, it is kept as such. If it is a float,\n * it is rounded.\n *\n * @param {number} value\n * @param {object} [options]\n * @param {number} [options.decimalPlaces=2]\n * @param {number} [options.fixedDecimals=false]\n * @param {string} [options.thousandsSeparator=]\n * @param {string} [options.unit=]\n * @param {string} [options.unitSeparator=]\n *\n * @returns {string|null}\n * @public\n */\n\nfunction format(value, options) {\n  if (!Number.isFinite(value)) {\n    return null;\n  }\n\n  var mag = Math.abs(value);\n  var thousandsSeparator = (options && options.thousandsSeparator) || '';\n  var unitSeparator = (options && options.unitSeparator) || '';\n  var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;\n  var fixedDecimals = Boolean(options && options.fixedDecimals);\n  var unit = (options && options.unit) || '';\n\n  if (!unit || !map[unit.toLowerCase()]) {\n    if (mag >= map.tb) {\n      unit = 'TB';\n    } else if (mag >= map.gb) {\n      unit = 'GB';\n    } else if (mag >= map.mb) {\n      unit = 'MB';\n    } else if (mag >= map.kb) {\n      unit = 'KB';\n    } else {\n      unit = 'B';\n    }\n  }\n\n  var val = value / map[unit.toLowerCase()];\n  var str = val.toFixed(decimalPlaces);\n\n  if (!fixedDecimals) {\n    str = str.replace(formatDecimalsRegExp, '$1');\n  }\n\n  if (thousandsSeparator) {\n    str = str.replace(formatThousandsRegExp, thousandsSeparator);\n  }\n\n  return str + unitSeparator + unit;\n}\n\n/**\n * Parse the string value into an integer in bytes.\n *\n * If no unit is given, it is assumed the value is in bytes.\n *\n * @param {number|string} val\n *\n * @returns {number|null}\n * @public\n */\n\nfunction parse(val) {\n  if (typeof val === 'number' && !isNaN(val)) {\n    return val;\n  }\n\n  if (typeof val !== 'string') {\n    return null;\n  }\n\n  // Test if the string passed is valid\n  var results = parseRegExp.exec(val);\n  var floatValue;\n  var unit = 'b';\n\n  if (!results) {\n    // Nothing could be extracted from the given string\n    floatValue = parseInt(val, 10);\n    unit = 'b'\n  } else {\n    // Retrieve the value and the unit\n    floatValue = parseFloat(results[1]);\n    unit = results[4].toLowerCase();\n  }\n\n  return Math.floor(map[unit] * floatValue);\n}\n", "/*!\n * content-disposition\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n */\n\nmodule.exports = contentDisposition\nmodule.exports.parse = parse\n\n/**\n * Module dependencies.\n */\n\nvar basename = require('path').basename\n\n/**\n * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including \"%\")\n */\n\nvar ENCODE_URL_ATTR_CHAR_REGEXP = /[\\x00-\\x20\"'()*,/:;<=>?@[\\\\\\]{}\\x7f]/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match percent encoding escape.\n */\n\nvar HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/\nvar HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g\n\n/**\n * RegExp to match non-latin1 characters.\n */\n\nvar NON_LATIN1_REGEXP = /[^\\x20-\\x7e\\xa0-\\xff]/g\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR        = <any US-ASCII character (octets 0 - 127)>\n */\n\nvar QESC_REGEXP = /\\\\([\\u0000-\\u007f])/g\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n */\n\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp for various RFC 2616 grammar\n *\n * parameter     = token \"=\" ( token | quoted-string )\n * token         = 1*<any CHAR except CTLs or separators>\n * separators    = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n *               | \",\" | \";\" | \":\" | \"\\\" | <\">\n *               | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n *               | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext        = <any TEXT except <\">>\n * quoted-pair   = \"\\\" CHAR\n * CHAR          = <any US-ASCII character (octets 0 - 127)>\n * TEXT          = <any OCTET except CTLs, but including LWS>\n * LWS           = [CRLF] 1*( SP | HT )\n * CRLF          = CR LF\n * CR            = <US-ASCII CR, carriage return (13)>\n * LF            = <US-ASCII LF, linefeed (10)>\n * SP            = <US-ASCII SP, space (32)>\n * HT            = <US-ASCII HT, horizontal-tab (9)>\n * CTL           = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET         = <any 8-bit sequence of data>\n */\n\nvar PARAM_REGEXP = /;[\\x09\\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*=[\\x09\\x20]*(\"(?:[\\x20!\\x23-\\x5b\\x5d-\\x7e\\x80-\\xff]|\\\\[\\x20-\\x7e])*\"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*/g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\x20-\\x7e\\x80-\\xff]+$/\nvar TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/\n\n/**\n * RegExp for various RFC 5987 grammar\n *\n * ext-value     = charset  \"'\" [ language ] \"'\" value-chars\n * charset       = \"UTF-8\" / \"ISO-8859-1\" / mime-charset\n * mime-charset  = 1*mime-charsetc\n * mime-charsetc = ALPHA / DIGIT\n *               / \"!\" / \"#\" / \"$\" / \"%\" / \"&\"\n *               / \"+\" / \"-\" / \"^\" / \"_\" / \"`\"\n *               / \"{\" / \"}\" / \"~\"\n * language      = ( 2*3ALPHA [ extlang ] )\n *               / 4ALPHA\n *               / 5*8ALPHA\n * extlang       = *3( \"-\" 3ALPHA )\n * value-chars   = *( pct-encoded / attr-char )\n * pct-encoded   = \"%\" HEXDIG HEXDIG\n * attr-char     = ALPHA / DIGIT\n *               / \"!\" / \"#\" / \"$\" / \"&\" / \"+\" / \"-\" / \".\"\n *               / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n */\n\nvar EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/\n\n/**\n * RegExp for various RFC 6266 grammar\n *\n * disposition-type = \"inline\" | \"attachment\" | disp-ext-type\n * disp-ext-type    = token\n * disposition-parm = filename-parm | disp-ext-parm\n * filename-parm    = \"filename\" \"=\" value\n *                  | \"filename*\" \"=\" ext-value\n * disp-ext-parm    = token \"=\" value\n *                  | ext-token \"=\" ext-value\n * ext-token        = <the characters in token, followed by \"*\">\n */\n\nvar DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*(?:$|;)/ // eslint-disable-line no-control-regex\n\n/**\n * Create an attachment Content-Disposition header.\n *\n * @param {string} [filename]\n * @param {object} [options]\n * @param {string} [options.type=attachment]\n * @param {string|boolean} [options.fallback=true]\n * @return {string}\n * @api public\n */\n\nfunction contentDisposition (filename, options) {\n  var opts = options || {}\n\n  // get type\n  var type = opts.type || 'attachment'\n\n  // get parameters\n  var params = createparams(filename, opts.fallback)\n\n  // format into string\n  return format(new ContentDisposition(type, params))\n}\n\n/**\n * Create parameters object from filename and fallback.\n *\n * @param {string} [filename]\n * @param {string|boolean} [fallback=true]\n * @return {object}\n * @api private\n */\n\nfunction createparams (filename, fallback) {\n  if (filename === undefined) {\n    return\n  }\n\n  var params = {}\n\n  if (typeof filename !== 'string') {\n    throw new TypeError('filename must be a string')\n  }\n\n  // fallback defaults to true\n  if (fallback === undefined) {\n    fallback = true\n  }\n\n  if (typeof fallback !== 'string' && typeof fallback !== 'boolean') {\n    throw new TypeError('fallback must be a string or boolean')\n  }\n\n  if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) {\n    throw new TypeError('fallback must be ISO-8859-1 string')\n  }\n\n  // restrict to file base name\n  var name = basename(filename)\n\n  // determine if name is suitable for quoted string\n  var isQuotedString = TEXT_REGEXP.test(name)\n\n  // generate fallback name\n  var fallbackName = typeof fallback !== 'string'\n    ? fallback && getlatin1(name)\n    : basename(fallback)\n  var hasFallback = typeof fallbackName === 'string' && fallbackName !== name\n\n  // set extended filename parameter\n  if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {\n    params['filename*'] = name\n  }\n\n  // set filename parameter\n  if (isQuotedString || hasFallback) {\n    params.filename = hasFallback\n      ? fallbackName\n      : name\n  }\n\n  return params\n}\n\n/**\n * Format object to Content-Disposition header.\n *\n * @param {object} obj\n * @param {string} obj.type\n * @param {object} [obj.parameters]\n * @return {string}\n * @api private\n */\n\nfunction format (obj) {\n  var parameters = obj.parameters\n  var type = obj.type\n\n  if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  // start with normalized type\n  var string = String(type).toLowerCase()\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param\n    var params = Object.keys(parameters).sort()\n\n    for (var i = 0; i < params.length; i++) {\n      param = params[i]\n\n      var val = param.substr(-1) === '*'\n        ? ustring(parameters[param])\n        : qstring(parameters[param])\n\n      string += '; ' + param + '=' + val\n    }\n  }\n\n  return string\n}\n\n/**\n * Decode a RFC 6987 field value (gracefully).\n *\n * @param {string} str\n * @return {string}\n * @api private\n */\n\nfunction decodefield (str) {\n  var match = EXT_VALUE_REGEXP.exec(str)\n\n  if (!match) {\n    throw new TypeError('invalid extended field value')\n  }\n\n  var charset = match[1].toLowerCase()\n  var encoded = match[2]\n  var value\n\n  // to binary string\n  var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode)\n\n  switch (charset) {\n    case 'iso-8859-1':\n      value = getlatin1(binary)\n      break\n    case 'utf-8':\n      value = new Buffer(binary, 'binary').toString('utf8')\n      break\n    default:\n      throw new TypeError('unsupported charset in extended field')\n  }\n\n  return value\n}\n\n/**\n * Get ISO-8859-1 version of string.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction getlatin1 (val) {\n  // simple Unicode -> ISO-8859-1 transformation\n  return String(val).replace(NON_LATIN1_REGEXP, '?')\n}\n\n/**\n * Parse Content-Disposition header string.\n *\n * @param {string} string\n * @return {object}\n * @api private\n */\n\nfunction parse (string) {\n  if (!string || typeof string !== 'string') {\n    throw new TypeError('argument string is required')\n  }\n\n  var match = DISPOSITION_TYPE_REGEXP.exec(string)\n\n  if (!match) {\n    throw new TypeError('invalid type format')\n  }\n\n  // normalize type\n  var index = match[0].length\n  var type = match[1].toLowerCase()\n\n  var key\n  var names = []\n  var params = {}\n  var value\n\n  // calculate index to start at\n  index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';'\n    ? index - 1\n    : index\n\n  // match parameters\n  while ((match = PARAM_REGEXP.exec(string))) {\n    if (match.index !== index) {\n      throw new TypeError('invalid parameter format')\n    }\n\n    index += match[0].length\n    key = match[1].toLowerCase()\n    value = match[2]\n\n    if (names.indexOf(key) !== -1) {\n      throw new TypeError('invalid duplicate parameter')\n    }\n\n    names.push(key)\n\n    if (key.indexOf('*') + 1 === key.length) {\n      // decode extended value\n      key = key.slice(0, -1)\n      value = decodefield(value)\n\n      // overwrite existing value\n      params[key] = value\n      continue\n    }\n\n    if (typeof params[key] === 'string') {\n      continue\n    }\n\n    if (value[0] === '\"') {\n      // remove quotes and escapes\n      value = value\n        .substr(1, value.length - 2)\n        .replace(QESC_REGEXP, '$1')\n    }\n\n    params[key] = value\n  }\n\n  if (index !== -1 && index !== string.length) {\n    throw new TypeError('invalid parameter format')\n  }\n\n  return new ContentDisposition(type, params)\n}\n\n/**\n * Percent decode a single character.\n *\n * @param {string} str\n * @param {string} hex\n * @return {string}\n * @api private\n */\n\nfunction pdecode (str, hex) {\n  return String.fromCharCode(parseInt(hex, 16))\n}\n\n/**\n * Percent encode a single character.\n *\n * @param {string} char\n * @return {string}\n * @api private\n */\n\nfunction pencode (char) {\n  var hex = String(char)\n    .charCodeAt(0)\n    .toString(16)\n    .toUpperCase()\n  return hex.length === 1\n    ? '%0' + hex\n    : '%' + hex\n}\n\n/**\n * Quote a string for HTTP.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction qstring (val) {\n  var str = String(val)\n\n  return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Encode a Unicode string for HTTP (RFC 5987).\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction ustring (val) {\n  var str = String(val)\n\n  // percent encode as UTF-8\n  var encoded = encodeURIComponent(str)\n    .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode)\n\n  return 'UTF-8\\'\\'' + encoded\n}\n\n/**\n * Class for parsed Content-Disposition header for v8 optimization\n */\n\nfunction ContentDisposition (type, parameters) {\n  this.type = type\n  this.parameters = parameters\n}\n", "\"use strict\";\n\nvar path = require(\"path\");\n\nmodule.exports = function (thePath, potentialParent) {\n    // For inside-directory checking, we want to allow trailing slashes, so normalize.\n    thePath = stripTrailingSep(thePath);\n    potentialParent = stripTrailingSep(potentialParent);\n\n    // Node treats only Windows as case-insensitive in its path module; we follow those conventions.\n    if (process.platform === \"win32\") {\n        thePath = thePath.toLowerCase();\n        potentialParent = potentialParent.toLowerCase();\n    }\n\n    return thePath.lastIndexOf(potentialParent, 0) === 0 &&\n\t\t(\n\t\t\tthePath[potentialParent.length] === path.sep ||\n\t\t\tthePath[potentialParent.length] === undefined\n\t\t);\n};\n\nfunction stripTrailingSep(thePath) {\n    if (thePath[thePath.length - 1] === path.sep) {\n        return thePath.slice(0, -1);\n    }\n    return thePath;\n}\n", "/*!\n * range-parser\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = rangeParser\n\n/**\n * Parse \"Range\" header `str` relative to the given file `size`.\n *\n * @param {Number} size\n * @param {String} str\n * @param {Object} [options]\n * @return {Array}\n * @public\n */\n\nfunction rangeParser (size, str, options) {\n  var index = str.indexOf('=')\n\n  if (index === -1) {\n    return -2\n  }\n\n  // split the range string\n  var arr = str.slice(index + 1).split(',')\n  var ranges = []\n\n  // add ranges type\n  ranges.type = str.slice(0, index)\n\n  // parse all ranges\n  for (var i = 0; i < arr.length; i++) {\n    var range = arr[i].split('-')\n    var start = parseInt(range[0], 10)\n    var end = parseInt(range[1], 10)\n\n    // -nnn\n    if (isNaN(start)) {\n      start = size - end\n      end = size - 1\n    // nnn-\n    } else if (isNaN(end)) {\n      end = size - 1\n    }\n\n    // limit last-byte-pos to current length\n    if (end > size - 1) {\n      end = size - 1\n    }\n\n    // invalid or unsatisifiable\n    if (isNaN(start) || isNaN(end) || start > end || start < 0) {\n      continue\n    }\n\n    // add range\n    ranges.push({\n      start: start,\n      end: end\n    })\n  }\n\n  if (ranges.length < 1) {\n    // unsatisifiable\n    return -1\n  }\n\n  return options && options.combine\n    ? combineRanges(ranges)\n    : ranges\n}\n\n/**\n * Combine overlapping & adjacent ranges.\n * @private\n */\n\nfunction combineRanges (ranges) {\n  var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart)\n\n  for (var j = 0, i = 1; i < ordered.length; i++) {\n    var range = ordered[i]\n    var current = ordered[j]\n\n    if (range.start > current.end + 1) {\n      // next range\n      ordered[++j] = range\n    } else if (range.end > current.end) {\n      // extend range\n      current.end = range.end\n      current.index = Math.min(current.index, range.index)\n    }\n  }\n\n  // trim ordered array\n  ordered.length = j + 1\n\n  // generate combined range\n  var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex)\n\n  // copy ranges type\n  combined.type = ranges.type\n\n  return combined\n}\n\n/**\n * Map function to add index value to ranges.\n * @private\n */\n\nfunction mapWithIndex (range, index) {\n  return {\n    start: range.start,\n    end: range.end,\n    index: index\n  }\n}\n\n/**\n * Map function to remove index value from ranges.\n * @private\n */\n\nfunction mapWithoutIndex (range) {\n  return {\n    start: range.start,\n    end: range.end\n  }\n}\n\n/**\n * Sort function to sort ranges by index.\n * @private\n */\n\nfunction sortByRangeIndex (a, b) {\n  return a.index - b.index\n}\n\n/**\n * Sort function to sort ranges by start position.\n * @private\n */\n\nfunction sortByRangeStart (a, b) {\n  return a.start - b.start\n}\n", "(function(){function directory(it\n) {\nvar encodeHTML = typeof _encodeHTML !== 'undefined' ? _encodeHTML : (function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&#38;\", \"<\": \"&#60;\", \">\": \"&#62;\", '\"': \"&#34;\", \"'\": \"&#39;\", \"/\": \"&#47;\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());var out='<!DOCTYPE html><html lang=\"en\"> <head> <meta charset=\"utf-8\"> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"> <title>Files within '+encodeHTML(it.directory)+'</title> <style>body { margin: 0; padding: 30px; background: #fff; font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif; -webkit-font-smoothing: antialiased;}main { max-width: 920px;}header { display: flex; justify-content: space-between; flex-wrap: wrap;}h1 { font-size: 18px; font-weight: 500; margin-top: 0; color: #000;}header h1 a { font-size: 18px; font-weight: 500; margin-top: 0; color: #000;}h1 i { font-style: normal;}ul { margin: 0 0 0 -2px; padding: 20px 0 0 0;}ul li { list-style: none; font-size: 14px; display: flex; justify-content: space-between;}a { text-decoration: none;}ul a { color: #000; padding: 10px 5px; margin: 0 -5px; white-space: nowrap; overflow: hidden; display: block; width: 100%; text-overflow: ellipsis;}header a { color: #0076FF; font-size: 11px; font-weight: 400; display: inline-block; line-height: 20px;}svg { height: 13px; vertical-align: text-bottom;}ul a::before { display: inline-block; vertical-align: middle; margin-right: 10px; width: 24px; text-align: center; line-height: 12px;}ul a.file::before { content: url(\"data:image/svg+xml;utf8,<svg width=\\'15\\' height=\\'19\\' fill=\\'none\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M10 8C8.34 8 7 6.66 7 5V1H3c-1.1 0-2 .9-2 2v13c0 1.1.9 2 2 2h9c1.1 0 2-.9 2-2V8h-4zM8 5c0 1.1.9 2 2 2h3.59L8 1.41V5zM3 0h5l7 7v9c0 1.66-1.34 3-3 3H3c-1.66 0-3-1.34-3-3V3c0-1.66 1.34-3 3-3z\\' fill=\\'black\\'/></svg>\");}ul a:hover { text-decoration: underline;}ul a.folder::before { content: url(\"data:image/svg+xml;utf8,<svg width=\\'20\\' height=\\'16\\' fill=\\'none\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M18.784 3.87a1.565 1.565 0 0 0-.565-.356V2.426c0-.648-.523-1.171-1.15-1.171H8.996L7.908.25A.89.89 0 0 0 7.302 0H2.094C1.445 0 .944.523.944 1.171v2.3c-.21.085-.398.21-.565.356a1.348 1.348 0 0 0-.377 1.004l.398 9.83C.42 15.393 1.048 16 1.8 16h15.583c.753 0 1.36-.586 1.4-1.339l.398-9.83c.021-.313-.125-.69-.397-.962zM1.843 3.41V1.191c0-.146.104-.272.25-.272H7.26l1.234 1.088c.083.042.167.104.293.104h8.282c.125 0 .25.126.25.272V3.41H1.844zm15.54 11.712H1.78a.47.47 0 0 1-.481-.46l-.397-9.83c0-.147.041-.252.125-.356a.504.504 0 0 1 .377-.147H17.78c.125 0 .272.063.377.147.083.083.125.209.125.334l-.418 9.83c-.021.272-.23.482-.481.482z\\' fill=\\'black\\'/></svg>\");}ul a.lambda::before { content: url(\"data:image/svg+xml; utf8,<svg width=\\'15\\' height=\\'19\\' fill=\\'none\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M3.5 14.4354H5.31622L7.30541 9.81311H7.43514L8.65315 13.0797C9.05676 14.1643 9.55405 14.5 10.7 14.5C11.0171 14.5 11.291 14.4677 11.5 14.4032V13.1572C11.3847 13.1766 11.2622 13.2024 11.1541 13.2024C10.6351 13.2024 10.3829 13.0281 10.1595 12.4664L8.02613 7.07586C7.21171 5.01646 6.54865 4.5 5.11441 4.5C4.83333 4.5 4.62432 4.53228 4.37207 4.59038V5.83635C4.56667 5.81052 4.66036 5.79761 4.77568 5.79761C5.64775 5.79761 5.9 6.0042 6.4045 7.19852L6.64234 7.77954L3.5 14.4354Z\\' fill=\\'black\\'/><rect x=\\'0.5\\' y=\\'0.5\\' width=\\'14\\' height=\\'18\\' rx=\\'2.5\\' stroke=\\'black\\'/></svg>\");}ul a.file.gif::before,ul a.file.jpg::before,ul a.file.png::before,ul a.file.svg::before { content: url(\"data:image/svg+xml;utf8,<svg width=\\'16\\' height=\\'16\\' viewBox=\\'0 0 80 80\\' xmlns=\\'http://www.w3.org/2000/svg\\' fill=\\'none\\' stroke=\\'black\\' stroke-width=\\'5\\' stroke-linecap=\\'round\\' stroke-linejoin=\\'round\\'><rect x=\\'6\\' y=\\'6\\' width=\\'68\\' height=\\'68\\' rx=\\'5\\' ry=\\'5\\'/><circle cx=\\'24\\' cy=\\'24\\' r=\\'8\\'/><path d=\\'M73 49L59 34 37 52m16 20L27 42 7 58\\'/></svg>\");}::selection { background-color: #79FFE1; color: #000;}::-moz-selection { background-color: #79FFE1; color: #000;}@media (min-width: 768px) { ul {display: flex;flex-wrap: wrap; } ul li {width: 230px;padding-right: 20px; }}@media (min-width: 992px) { body {padding: 45px; } h1, header h1 a {font-size: 15px; } ul li {font-size: 13px;box-sizing: border-box;justify-content: flex-start; }}</style> </head> <body> <main> <header> <h1> <i>Index of&nbsp;</i> ';var arr1=it.paths;if(arr1){var value,index=-1,l1=arr1.length-1;while(index<l1){value=arr1[index+=1];out+=' <a href=\"/'+encodeHTML(value.url)+'\">'+encodeHTML(value.name)+'</a> ';} } out+=' </h1> </header> <ul id=\"files\"> ';var arr2=it.files;if(arr2){var value,index=-1,l2=arr2.length-1;while(index<l2){value=arr2[index+=1];out+=' <li> <a href=\"'+encodeHTML(value.relative)+'\" title=\"'+encodeHTML(value.title)+'\" class=\"'+encodeHTML(value.type)+' '+encodeHTML(value.ext)+'\">'+encodeHTML(value.base)+'</a> </li> ';} } out+=' </ul></main> </body></html>';return out;\n}var itself=directory, _encodeHTML=(function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&#38;\", \"<\": \"&#60;\", \">\": \"&#62;\", '\"': \"&#34;\", \"'\": \"&#39;\", \"/\": \"&#47;\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());if(typeof module!=='undefined' && module.exports) module.exports=itself;else if(typeof define==='function')define(function(){return itself;});else {window.render=window.render||{};window.render['directory']=itself;}}());", "(function(){function error(it\n) {\nvar out='<!DOCTYPE html><head> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\"/> <style> body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif; cursor: default; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: flex; flex-direction: column; } main, aside, section { display: flex; justify-content: center; align-items: center; flex-direction: column; } main { height: 100%; } aside { background: #000; flex-shrink: 1; padding: 30px 20px; } aside p { margin: 0; color: #999999; font-size: 14px; line-height: 24px; } aside a { color: #fff; text-decoration: none; } section span { font-size: 24px; font-weight: 500; display: block; border-bottom: 1px solid #EAEAEA; text-align: center; padding-bottom: 20px; width: 100px; } section p { font-size: 14px; font-weight: 400; } section span + p { margin: 20px 0 0 0; } @media (min-width: 768px) { section { height: 40px; flex-direction: row; } section span, section p { height: 100%; line-height: 40px; } section span { border-bottom: 0; border-right: 1px solid #EAEAEA; padding: 0 20px 0 0; width: auto; } section span + p { margin: 0; padding-left: 20px; } aside { padding: 50px 0; } aside p { max-width: 520px; text-align: center; } } </style></head><body> <main> <section> <span>'+(it.statusCode)+'</span> <p>'+(it.message)+'</p> </section> </main></body>';return out;\n}var itself=error, _encodeHTML=(function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&#38;\", \"<\": \"&#60;\", \">\": \"&#62;\", '\"': \"&#34;\", \"'\": \"&#39;\", \"/\": \"&#47;\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());if(typeof module!=='undefined' && module.exports) module.exports=itself;else if(typeof define==='function')define(function(){return itself;});else {window.render=window.render||{};window.render['error']=itself;}}());", "// Native\nconst {promisify} = require('util');\nconst path = require('path');\nconst {createHash} = require('crypto');\nconst {realpath, lstat, createReadStream, readdir} = require('fs');\n\n// Packages\nconst url = require('url');\nconst slasher = require('./glob-slash');\nconst minimatch = require('minimatch');\nconst pathToRegExp = require('path-to-regexp');\nconst mime = require('mime-types');\nconst bytes = require('bytes');\nconst contentDisposition = require('content-disposition');\nconst isPathInside = require('path-is-inside');\nconst parseRange = require('range-parser');\n\n// Other\nconst directoryTemplate = require('./directory');\nconst errorTemplate = require('./error');\n\nconst etags = new Map();\n\nconst calculateSha = (handlers, absolutePath) =>\n\tnew Promise((resolve, reject) => {\n\t\tconst hash = createHash('sha1');\n\t\thash.update(path.extname(absolutePath));\n\t\thash.update('-');\n\t\tconst rs = handlers.createReadStream(absolutePath);\n\t\trs.on('error', reject);\n\t\trs.on('data', buf => hash.update(buf));\n\t\trs.on('end', () => {\n\t\t\tconst sha = hash.digest('hex');\n\t\t\tresolve(sha);\n\t\t});\n\t});\n\nconst sourceMatches = (source, requestPath, allowSegments) => {\n\tconst keys = [];\n\tconst slashed = slasher(source);\n\tconst resolvedPath = path.posix.resolve(requestPath);\n\n\tlet results = null;\n\n\tif (allowSegments) {\n\t\tconst normalized = slashed.replace('*', '(.*)');\n\t\tconst expression = pathToRegExp(normalized, keys);\n\n\t\tresults = expression.exec(resolvedPath);\n\n\t\tif (!results) {\n\t\t\t// clear keys so that they are not used\n\t\t\t// later with empty results. this may\n\t\t\t// happen if minimatch returns true\n\t\t\tkeys.length = 0;\n\t\t}\n\t}\n\n\tif (results || minimatch(resolvedPath, slashed)) {\n\t\treturn {\n\t\t\tkeys,\n\t\t\tresults\n\t\t};\n\t}\n\n\treturn null;\n};\n\nconst toTarget = (source, destination, previousPath) => {\n\tconst matches = sourceMatches(source, previousPath, true);\n\n\tif (!matches) {\n\t\treturn null;\n\t}\n\n\tconst {keys, results} = matches;\n\n\tconst props = {};\n\tconst {protocol} = url.parse(destination);\n\tconst normalizedDest = protocol ? destination : slasher(destination);\n\tconst toPath = pathToRegExp.compile(normalizedDest);\n\n\tfor (let index = 0; index < keys.length; index++) {\n\t\tconst {name} = keys[index];\n\t\tprops[name] = results[index + 1];\n\t}\n\n\treturn toPath(props);\n};\n\nconst applyRewrites = (requestPath, rewrites = [], repetitive) => {\n\t// We need to copy the array, since we're going to modify it.\n\tconst rewritesCopy = rewrites.slice();\n\n\t// If the method was called again, the path was already rewritten\n\t// so we need to make sure to return it.\n\tconst fallback = repetitive ? requestPath : null;\n\n\tif (rewritesCopy.length === 0) {\n\t\treturn fallback;\n\t}\n\n\tfor (let index = 0; index < rewritesCopy.length; index++) {\n\t\tconst {source, destination} = rewrites[index];\n\t\tconst target = toTarget(source, destination, requestPath);\n\n\t\tif (target) {\n\t\t\t// Remove rules that were already applied\n\t\t\trewritesCopy.splice(index, 1);\n\n\t\t\t// Check if there are remaining ones to be applied\n\t\t\treturn applyRewrites(slasher(target), rewritesCopy, true);\n\t\t}\n\t}\n\n\treturn fallback;\n};\n\nconst ensureSlashStart = target => (target.startsWith('/') ? target : `/${target}`);\n\nconst shouldRedirect = (decodedPath, {redirects = [], trailingSlash}, cleanUrl) => {\n\tconst slashing = typeof trailingSlash === 'boolean';\n\tconst defaultType = 301;\n\tconst matchHTML = /(\\.html|\\/index)$/g;\n\n\tif (redirects.length === 0 && !slashing && !cleanUrl) {\n\t\treturn null;\n\t}\n\n\t// By stripping the HTML parts from the decoded\n\t// path *before* handling the trailing slash, we make\n\t// sure that only *one* redirect occurs if both\n\t// config options are used.\n\tif (cleanUrl && matchHTML.test(decodedPath)) {\n\t\tdecodedPath = decodedPath.replace(matchHTML, '');\n\t\tif (decodedPath.indexOf('//') > -1) {\n\t\t\tdecodedPath = decodedPath.replace(/\\/+/g, '/');\n\t\t}\n\t\treturn {\n\t\t\ttarget: ensureSlashStart(decodedPath),\n\t\t\tstatusCode: defaultType\n\t\t};\n\t}\n\n\tif (slashing) {\n\t\tconst {ext, name} = path.parse(decodedPath);\n\t\tconst isTrailed = decodedPath.endsWith('/');\n\t\tconst isDotfile = name.startsWith('.');\n\n\t\tlet target = null;\n\n\t\tif (!trailingSlash && isTrailed) {\n\t\t\ttarget = decodedPath.slice(0, -1);\n\t\t} else if (trailingSlash && !isTrailed && !ext && !isDotfile) {\n\t\t\ttarget = `${decodedPath}/`;\n\t\t}\n\n\t\tif (decodedPath.indexOf('//') > -1) {\n\t\t\ttarget = decodedPath.replace(/\\/+/g, '/');\n\t\t}\n\n\t\tif (target) {\n\t\t\treturn {\n\t\t\t\ttarget: ensureSlashStart(target),\n\t\t\t\tstatusCode: defaultType\n\t\t\t};\n\t\t}\n\t}\n\n\t// This is currently the fastest way to\n\t// iterate over an array\n\tfor (let index = 0; index < redirects.length; index++) {\n\t\tconst {source, destination, type} = redirects[index];\n\t\tconst target = toTarget(source, destination, decodedPath);\n\n\t\tif (target) {\n\t\t\treturn {\n\t\t\t\ttarget,\n\t\t\t\tstatusCode: type || defaultType\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n};\n\nconst appendHeaders = (target, source) => {\n\tfor (let index = 0; index < source.length; index++) {\n\t\tconst {key, value} = source[index];\n\t\ttarget[key] = value;\n\t}\n};\n\nconst getHeaders = async (handlers, config, current, absolutePath, stats) => {\n\tconst {headers: customHeaders = [], etag = false} = config;\n\tconst related = {};\n\tconst {base} = path.parse(absolutePath);\n\tconst relativePath = path.relative(current, absolutePath);\n\n\tif (customHeaders.length > 0) {\n\t\t// By iterating over all headers and never stopping, developers\n\t\t// can specify multiple header sources in the config that\n\t\t// might match a single path.\n\t\tfor (let index = 0; index < customHeaders.length; index++) {\n\t\t\tconst {source, headers} = customHeaders[index];\n\n\t\t\tif (sourceMatches(source, slasher(relativePath))) {\n\t\t\t\tappendHeaders(related, headers);\n\t\t\t}\n\t\t}\n\t}\n\n\tlet defaultHeaders = {};\n\n\tif (stats) {\n\t\tdefaultHeaders = {\n\t\t\t'Content-Length': stats.size,\n\t\t\t// Default to \"inline\", which always tries to render in the browser,\n\t\t\t// if that's not working, it will save the file. But to be clear: This\n\t\t\t// only happens if it cannot find a appropiate value.\n\t\t\t'Content-Disposition': contentDisposition(base, {\n\t\t\t\ttype: 'inline'\n\t\t\t}),\n\t\t\t'Accept-Ranges': 'bytes'\n\t\t};\n\n\t\tif (etag) {\n\t\t\tlet [mtime, sha] = etags.get(absolutePath) || [];\n\t\t\tif (Number(mtime) !== Number(stats.mtime)) {\n\t\t\t\tsha = await calculateSha(handlers, absolutePath);\n\t\t\t\tetags.set(absolutePath, [stats.mtime, sha]);\n\t\t\t}\n\t\t\tdefaultHeaders['ETag'] = `\"${sha}\"`;\n\t\t} else {\n\t\t\tdefaultHeaders['Last-Modified'] = stats.mtime.toUTCString();\n\t\t}\n\n\t\tconst contentType = mime.contentType(base);\n\n\t\tif (contentType) {\n\t\t\tdefaultHeaders['Content-Type'] = contentType;\n\t\t}\n\t}\n\n\tconst headers = Object.assign(defaultHeaders, related);\n\n\tfor (const key in headers) {\n\t\tif (headers.hasOwnProperty(key) && headers[key] === null) {\n\t\t\tdelete headers[key];\n\t\t}\n\t}\n\n\treturn headers;\n};\n\nconst applicable = (decodedPath, configEntry) => {\n\tif (typeof configEntry === 'boolean') {\n\t\treturn configEntry;\n\t}\n\n\tif (Array.isArray(configEntry)) {\n\t\tfor (let index = 0; index < configEntry.length; index++) {\n\t\t\tconst source = configEntry[index];\n\n\t\t\tif (sourceMatches(source, decodedPath)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\nconst getPossiblePaths = (relativePath, extension) => [\n\tpath.join(relativePath, `index${extension}`),\n\trelativePath.endsWith('/') ? relativePath.replace(/\\/$/g, extension) : (relativePath + extension)\n].filter(item => path.basename(item) !== extension);\n\nconst findRelated = async (current, relativePath, rewrittenPath, originalStat) => {\n\tconst possible = rewrittenPath ? [rewrittenPath] : getPossiblePaths(relativePath, '.html');\n\n\tlet stats = null;\n\n\tfor (let index = 0; index < possible.length; index++) {\n\t\tconst related = possible[index];\n\t\tconst absolutePath = path.join(current, related);\n\n\t\ttry {\n\t\t\tstats = await originalStat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\n\t\tif (stats) {\n\t\t\treturn {\n\t\t\t\tstats,\n\t\t\t\tabsolutePath\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n};\n\nconst canBeListed = (excluded, file) => {\n\tconst slashed = slasher(file);\n\tlet whether = true;\n\n\tfor (let mark = 0; mark < excluded.length; mark++) {\n\t\tconst source = excluded[mark];\n\n\t\tif (sourceMatches(source, slashed)) {\n\t\t\twhether = false;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn whether;\n};\n\nconst renderDirectory = async (current, acceptsJSON, handlers, methods, config, paths) => {\n\tconst {directoryListing, trailingSlash, unlisted = [], renderSingle} = config;\n\tconst slashSuffix = typeof trailingSlash === 'boolean' ? (trailingSlash ? '/' : '') : '/';\n\tconst {relativePath, absolutePath} = paths;\n\n\tconst excluded = [\n\t\t'.DS_Store',\n\t\t'.git',\n\t\t...unlisted\n\t];\n\n\tif (!applicable(relativePath, directoryListing) && !renderSingle) {\n\t\treturn {};\n\t}\n\n\tlet files = await handlers.readdir(absolutePath);\n\n\tconst canRenderSingle = renderSingle && (files.length === 1);\n\n\tfor (let index = 0; index < files.length; index++) {\n\t\tconst file = files[index];\n\n\t\tconst filePath = path.resolve(absolutePath, file);\n\t\tconst details = path.parse(filePath);\n\n\t\t// It's important to indicate that the `stat` call was\n\t\t// spawned by the directory listing, as Now is\n\t\t// simulating those calls and needs to special-case this.\n\t\tlet stats = null;\n\n\t\tif (methods.lstat) {\n\t\t\tstats = await handlers.lstat(filePath, true);\n\t\t} else {\n\t\t\tstats = await handlers.lstat(filePath);\n\t\t}\n\n\t\tdetails.relative = path.join(relativePath, details.base);\n\n\t\tif (stats.isDirectory()) {\n\t\t\tdetails.base += slashSuffix;\n\t\t\tdetails.relative += slashSuffix;\n\t\t\tdetails.type = 'folder';\n\t\t} else {\n\t\t\tif (canRenderSingle) {\n\t\t\t\treturn {\n\t\t\t\t\tsingleFile: true,\n\t\t\t\t\tabsolutePath: filePath,\n\t\t\t\t\tstats\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tdetails.ext = details.ext.split('.')[1] || 'txt';\n\t\t\tdetails.type = 'file';\n\n\t\t\tdetails.size = bytes(stats.size, {\n\t\t\t\tunitSeparator: ' ',\n\t\t\t\tdecimalPlaces: 0\n\t\t\t});\n\t\t}\n\n\t\tdetails.title = details.base;\n\n\t\tif (canBeListed(excluded, file)) {\n\t\t\tfiles[index] = details;\n\t\t} else {\n\t\t\tdelete files[index];\n\t\t}\n\t}\n\n\tconst toRoot = path.relative(current, absolutePath);\n\tconst directory = path.join(path.basename(current), toRoot, slashSuffix);\n\tconst pathParts = directory.split(path.sep).filter(Boolean);\n\n\t// Sort to list directories first, then sort alphabetically\n\tfiles = files.sort((a, b) => {\n\t\tconst aIsDir = a.type === 'directory';\n\t\tconst bIsDir = b.type === 'directory';\n\n\t\t/* istanbul ignore next */\n\t\tif (aIsDir && !bIsDir) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif ((bIsDir && !aIsDir) || (a.base > b.base)) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t/* istanbul ignore next */\n\t\tif (a.base < b.base) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t/* istanbul ignore next */\n\t\treturn 0;\n\t}).filter(Boolean);\n\n\t// Add parent directory to the head of the sorted files array\n\tif (toRoot.length > 0) {\n\t\tconst directoryPath = [...pathParts].slice(1);\n\t\tconst relative = path.join('/', ...directoryPath, '..', slashSuffix);\n\n\t\tfiles.unshift({\n\t\t\ttype: 'directory',\n\t\t\tbase: '..',\n\t\t\trelative,\n\t\t\ttitle: relative,\n\t\t\text: ''\n\t\t});\n\t}\n\n\tconst subPaths = [];\n\n\tfor (let index = 0; index < pathParts.length; index++) {\n\t\tconst parents = [];\n\t\tconst isLast = index === (pathParts.length - 1);\n\n\t\tlet before = 0;\n\n\t\twhile (before <= index) {\n\t\t\tparents.push(pathParts[before]);\n\t\t\tbefore++;\n\t\t}\n\n\t\tparents.shift();\n\n\t\tsubPaths.push({\n\t\t\tname: pathParts[index] + (isLast ? slashSuffix : '/'),\n\t\t\turl: index === 0 ? '' : parents.join('/') + slashSuffix\n\t\t});\n\t}\n\n\tconst spec = {\n\t\tfiles,\n\t\tdirectory,\n\t\tpaths: subPaths\n\t};\n\n\tconst output = acceptsJSON ? JSON.stringify(spec) : directoryTemplate(spec);\n\n\treturn {directory: output};\n};\n\nconst sendError = async (absolutePath, response, acceptsJSON, current, handlers, config, spec) => {\n\tconst {err: original, message, code, statusCode} = spec;\n\n\t/* istanbul ignore next */\n\tif (original && process.env.NODE_ENV !== 'test') {\n\t\tconsole.error(original);\n\t}\n\n\tresponse.statusCode = statusCode;\n\n\tif (acceptsJSON) {\n\t\tresponse.setHeader('Content-Type', 'application/json; charset=utf-8');\n\n\t\tresponse.end(JSON.stringify({\n\t\t\terror: {\n\t\t\t\tcode,\n\t\t\t\tmessage\n\t\t\t}\n\t\t}));\n\n\t\treturn;\n\t}\n\n\tlet stats = null;\n\n\tconst errorPage = path.join(current, `${statusCode}.html`);\n\n\ttry {\n\t\tstats = await handlers.lstat(errorPage);\n\t} catch (err) {\n\t\tif (err.code !== 'ENOENT') {\n\t\t\tconsole.error(err);\n\t\t}\n\t}\n\n\tif (stats) {\n\t\tlet stream = null;\n\n\t\ttry {\n\t\t\tstream = await handlers.createReadStream(errorPage);\n\n\t\t\tconst headers = await getHeaders(handlers, config, current, errorPage, stats);\n\n\t\t\tresponse.writeHead(statusCode, headers);\n\t\t\tstream.pipe(response);\n\n\t\t\treturn;\n\t\t} catch (err) {\n\t\t\tconsole.error(err);\n\t\t}\n\t}\n\n\tconst headers = await getHeaders(handlers, config, current, absolutePath, null);\n\theaders['Content-Type'] = 'text/html; charset=utf-8';\n\n\tresponse.writeHead(statusCode, headers);\n\tresponse.end(errorTemplate({statusCode, message}));\n};\n\nconst internalError = async (...args) => {\n\tconst lastIndex = args.length - 1;\n\tconst err = args[lastIndex];\n\n\targs[lastIndex] = {\n\t\tstatusCode: 500,\n\t\tcode: 'internal_server_error',\n\t\tmessage: 'A server error has occurred',\n\t\terr\n\t};\n\n\treturn sendError(...args);\n};\n\nconst getHandlers = methods => Object.assign({\n\tlstat: promisify(lstat),\n\trealpath: promisify(realpath),\n\tcreateReadStream,\n\treaddir: promisify(readdir),\n\tsendError\n}, methods);\n\nmodule.exports = async (request, response, config = {}, methods = {}) => {\n\tconst cwd = process.cwd();\n\tconst current = config.public ? path.resolve(cwd, config.public) : cwd;\n\tconst handlers = getHandlers(methods);\n\n\tlet relativePath = null;\n\tlet acceptsJSON = null;\n\n\tif (request.headers.accept) {\n\t\tacceptsJSON = request.headers.accept.includes('application/json');\n\t}\n\n\ttry {\n\t\trelativePath = decodeURIComponent(url.parse(request.url).pathname);\n\t} catch (err) {\n\t\treturn sendError('/', response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 400,\n\t\t\tcode: 'bad_request',\n\t\t\tmessage: 'Bad Request'\n\t\t});\n\t}\n\n\tlet absolutePath = path.join(current, relativePath);\n\n\t// Prevent path traversal vulnerabilities. We could do this\n\t// by ourselves, but using the package covers all the edge cases.\n\tif (!isPathInside(absolutePath, current)) {\n\t\treturn sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 400,\n\t\t\tcode: 'bad_request',\n\t\t\tmessage: 'Bad Request'\n\t\t});\n\t}\n\n\tconst cleanUrl = applicable(relativePath, config.cleanUrls);\n\tconst redirect = shouldRedirect(relativePath, config, cleanUrl);\n\n\tif (redirect) {\n\t\tresponse.writeHead(redirect.statusCode, {\n\t\t\tLocation: encodeURI(redirect.target)\n\t\t});\n\n\t\tresponse.end();\n\t\treturn;\n\t}\n\n\tlet stats = null;\n\n\t// It's extremely important that we're doing multiple stat calls. This one\n\t// right here could technically be removed, but then the program\n\t// would be slower. Because for directories, we always want to see if a related file\n\t// exists and then (after that), fetch the directory itself if no\n\t// related file was found. However (for files, of which most have extensions), we should\n\t// always stat right away.\n\t//\n\t// When simulating a file system without directory indexes, calculating whether a\n\t// directory exists requires loading all the file paths and then checking if\n\t// one of them includes the path of the directory. As that's a very\n\t// performance-expensive thing to do, we need to ensure it's not happening if not really necessary.\n\n\tif (path.extname(relativePath) !== '') {\n\t\ttry {\n\t\t\tstats = await handlers.lstat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst rewrittenPath = applyRewrites(relativePath, config.rewrites);\n\n\tif (!stats && (cleanUrl || rewrittenPath)) {\n\t\ttry {\n\t\t\tconst related = await findRelated(current, relativePath, rewrittenPath, handlers.lstat);\n\n\t\t\tif (related) {\n\t\t\t\t({stats, absolutePath} = related);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!stats) {\n\t\ttry {\n\t\t\tstats = await handlers.lstat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (stats && stats.isDirectory()) {\n\t\tlet directory = null;\n\t\tlet singleFile = null;\n\n\t\ttry {\n\t\t\tconst related = await renderDirectory(current, acceptsJSON, handlers, methods, config, {\n\t\t\t\trelativePath,\n\t\t\t\tabsolutePath\n\t\t\t});\n\n\t\t\tif (related.singleFile) {\n\t\t\t\t({stats, absolutePath, singleFile} = related);\n\t\t\t} else {\n\t\t\t\t({directory} = related);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\n\t\tif (directory) {\n\t\t\tconst contentType = acceptsJSON ? 'application/json; charset=utf-8' : 'text/html; charset=utf-8';\n\n\t\t\tresponse.statusCode = 200;\n\t\t\tresponse.setHeader('Content-Type', contentType);\n\t\t\tresponse.end(directory);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (!singleFile) {\n\t\t\t// The directory listing is disabled, so we want to\n\t\t\t// render a 404 error.\n\t\t\tstats = null;\n\t\t}\n\t}\n\n\tconst isSymLink = stats && stats.isSymbolicLink();\n\n\t// There are two scenarios in which we want to reply with\n\t// a 404 error: Either the path does not exist, or it is a\n\t// symlink while the `symlinks` option is disabled (which it is by default).\n\tif (!stats || (!config.symlinks && isSymLink)) {\n\t\t// allow for custom 404 handling\n\t\treturn handlers.sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 404,\n\t\t\tcode: 'not_found',\n\t\t\tmessage: 'The requested path could not be found'\n\t\t});\n\t}\n\n\t// If we figured out that the target is a symlink, we need to\n\t// resolve the symlink and run a new `stat` call just for the\n\t// target of that symlink.\n\tif (isSymLink) {\n\t\ttry {\n\t\t\tabsolutePath = await handlers.realpath(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT') {\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\t// The requested symlink is invalid\n\t\t\treturn handlers.sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\t\tstatusCode: 404,\n\t\t\t\tcode: 'not_found',\n\t\t\t\tmessage: 'The requested path could not be found'\n\t\t\t});\n\t\t}\n\t\tstats = await handlers.lstat(absolutePath);\n\t}\n\n\tconst streamOpts = {};\n\n\t// TODO ? if-range\n\tif (request.headers.range && stats.size) {\n\t\tconst range = parseRange(stats.size, request.headers.range);\n\n\t\tif (typeof range === 'object' && range.type === 'bytes') {\n\t\t\tconst {start, end} = range[0];\n\n\t\t\tstreamOpts.start = start;\n\t\t\tstreamOpts.end = end;\n\n\t\t\tresponse.statusCode = 206;\n\t\t} else {\n\t\t\tresponse.statusCode = 416;\n\t\t\tresponse.setHeader('Content-Range', `bytes */${stats.size}`);\n\t\t}\n\t}\n\n\t// TODO ? multiple ranges\n\n\tlet stream = null;\n\n\ttry {\n\t\tstream = await handlers.createReadStream(absolutePath, streamOpts);\n\t} catch (err) {\n\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t}\n\n\tconst headers = await getHeaders(handlers, config, current, absolutePath, stats);\n\n\t// eslint-disable-next-line no-undefined\n\tif (streamOpts.start !== undefined && streamOpts.end !== undefined) {\n\t\theaders['Content-Range'] = `bytes ${streamOpts.start}-${streamOpts.end}/${stats.size}`;\n\t\theaders['Content-Length'] = streamOpts.end - streamOpts.start + 1;\n\t}\n\n\t// We need to check for `headers.ETag` being truthy first, otherwise it will\n\t// match `undefined` being equal to `undefined`, which is true.\n\t//\n\t// Checking for `undefined` and `null` is also important, because `Range` can be `0`.\n\t//\n\t// eslint-disable-next-line no-eq-null\n\tif (request.headers.range == null && headers.ETag && headers.ETag === request.headers['if-none-match']) {\n\t\tresponse.statusCode = 304;\n\t\tresponse.end();\n\n\t\treturn;\n\t}\n\n\tresponse.writeHead(response.statusCode || 200, headers);\n\tstream.pipe(response);\n};\n", "import { Context } from \"../../../bundler/context.js\";\nimport {\n  dashboardOutDir,\n  loadProjectDashboardConfig,\n  loadUuidForAnonymousUser,\n  saveProjectDashboardConfig,\n} from \"./filePaths.js\";\nimport { choosePorts } from \"./utils.js\";\nimport { startServer } from \"./serve.js\";\nimport { localDeploymentUrl, selfHostedEventTag } from \"./run.js\";\nimport serveHandler from \"serve-handler\";\nimport {\n  ensureBackendBinaryDownloaded,\n  ensureDashboardDownloaded,\n} from \"./download.js\";\nimport { bigBrainAPIMaybeThrows } from \"../utils/utils.js\";\n\nexport const DEFAULT_LOCAL_DASHBOARD_PORT = 6790;\n\n/**\n * This runs the `dashboard-self-hosted` app locally.\n * It's currently just used for the `anonymous` flow, while everything else\n * uses `dashboard.convex.dev`, and some of the code below is written\n * assuming this is only used for `anonymous`.\n */\nexport async function handleDashboard(\n  ctx: Context,\n  deployment: { name: string; cloudPort: number; adminKey: string },\n  options: {\n    /** The backend version to use if the user overrides the default version with the --local-backend-version flag */\n    backendVersion: string | undefined;\n  },\n) {\n  // We call `ensureBackendBinaryDownloaded` here to get the version,\n  // but `handleAnonymousDeployment` has already downloaded it.\n  const { version } = await ensureBackendBinaryDownloaded(\n    ctx,\n    options.backendVersion === undefined\n      ? { kind: \"latest\" }\n      : { kind: \"version\", version: options.backendVersion },\n  );\n  const anonymousId = loadUuidForAnonymousUser(ctx) ?? undefined;\n  await ensureDashboardDownloaded(ctx, version);\n  const [dashboardPort] = await choosePorts(ctx, {\n    count: 1,\n    startPort: DEFAULT_LOCAL_DASHBOARD_PORT,\n    requestedPorts: [null, null],\n  });\n  saveProjectDashboardConfig(ctx, deployment.name, {\n    port: dashboardPort,\n  });\n\n  let hasReportedSelfHostedEvent = false;\n\n  const serverOptions = { cors: false } as const;\n  const { cleanupHandle } = await startServer(\n    ctx,\n    dashboardPort,\n    async (request, response) => {\n      if (!isLoopbackHost(request.headers.host, dashboardPort)) {\n        response.statusCode = 403;\n        response.end();\n        return;\n      }\n\n      const pathname = new URL(\n        request.url ?? \"/\",\n        // We only want to extract the pathname so the base doesn\u2019t matter\n        \"http://localhost\",\n      ).pathname;\n\n      if (pathname === \"/api/current_deployment\") {\n        serverOptions satisfies { cors: false };\n        response.setHeader(\"Content-Type\", \"application/json\");\n        response.end(\n          JSON.stringify({\n            name: deployment.name,\n            url: localDeploymentUrl(deployment.cloudPort),\n            adminKey: deployment.adminKey,\n          }),\n        );\n        return;\n      }\n\n      if (!hasReportedSelfHostedEvent) {\n        hasReportedSelfHostedEvent = true;\n        void reportSelfHostedEvent(ctx, {\n          anonymousId,\n          eventName: \"self_host_dashboard_connected\",\n          tag: selfHostedEventTag(\"anonymous\"),\n        });\n      }\n      await serveHandler(request, response, {\n        public: dashboardOutDir(),\n      });\n    },\n    serverOptions,\n  );\n  return {\n    dashboardPort,\n    cleanupHandle,\n  };\n}\n\n/**\n * The dashboard is only meant to be opened at the URL the CLI prints, so\n * requests addressed to any other hostname are not served, even if that\n * hostname resolves to 127.0.0.1.\n */\nexport function isLoopbackHost(host: string | undefined, port: number) {\n  const normalizedHost = host?.toLowerCase();\n  return (\n    normalizedHost === `127.0.0.1:${port}` ||\n    normalizedHost === `localhost:${port}`\n  );\n}\n\nasync function reportSelfHostedEvent(\n  ctx: Context,\n  {\n    anonymousId,\n    eventName,\n    eventFields,\n    tag,\n  }: {\n    anonymousId: string | undefined;\n    eventName: string;\n    eventFields?: Record<string, unknown>;\n    tag: string | undefined;\n  },\n) {\n  try {\n    await bigBrainAPIMaybeThrows({\n      ctx,\n      method: \"POST\",\n      path: \"self_hosted_event\",\n      data: {\n        selfHostedUuid: anonymousId,\n        eventName,\n        eventFields,\n        tag,\n      },\n    });\n  } catch {\n    // ignore\n  }\n}\n\nexport function dashboardUrl(ctx: Context, deploymentName: string) {\n  const dashboardConfig = loadProjectDashboardConfig(ctx, deploymentName);\n  if (dashboardConfig === null) {\n    return null;\n  }\n\n  return `http://127.0.0.1:${dashboardConfig.port}/`;\n}\n", "import { Context } from \"../../bundler/context.js\";\nimport { DeploymentType } from \"./api.js\";\nimport { dashboardUrl as localDashboardUrl } from \"./localDeployment/dashboard.js\";\n\nexport const DASHBOARD_HOST = process.env.CONVEX_PROVISION_HOST\n  ? \"http://localhost:6789\"\n  : \"https://dashboard.convex.dev\";\n\nexport async function getDashboardUrl(\n  ctx: Context,\n  {\n    deploymentName,\n    deploymentType,\n  }: {\n    deploymentName: string;\n    deploymentType: DeploymentType;\n  },\n): Promise<string | null> {\n  switch (deploymentType) {\n    case \"anonymous\": {\n      return localDashboardUrl(ctx, deploymentName);\n    }\n    case \"local\":\n    case \"dev\":\n    case \"prod\":\n    case \"preview\":\n    case \"custom\":\n      return deploymentDashboardUrlPage(deploymentName, \"\");\n    default: {\n      deploymentType satisfies never;\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Unknown deployment type: ${deploymentType as any}`,\n      });\n    }\n  }\n}\n\n// FIXME: this doesn't work correctly in local-dev/self-hosted, where the\n// dashboard isn't at DASHBOARD_HOST and deployments aren't addressed by `/d/`.\nexport function deploymentDashboardUrlPage(\n  configuredDeployment: string | null,\n  page: string,\n): string {\n  const deploymentFrag = configuredDeployment\n    ? `/d/${configuredDeployment}`\n    : \"\";\n  return `${DASHBOARD_HOST}${deploymentFrag}${page}`;\n}\n\nexport function deploymentDashboardUrl(\n  team: string,\n  project: string,\n  deploymentName: string,\n) {\n  return `${projectDashboardUrl(team, project)}/${deploymentName}`;\n}\n\nexport function projectDashboardUrl(team: string, project: string) {\n  return `${teamDashboardUrl(team)}/${project}`;\n}\n\nexport function teamDashboardUrl(team: string) {\n  return `${DASHBOARD_HOST}/t/${team}`;\n}\n", "import { paths as PlatformDeploymentPaths } from \"@convex-dev/platform/deploymentApi\";\nimport { paths as PlatformManagementPaths } from \"@convex-dev/platform/managementApi\";\nimport { chalkStderr } from \"chalk\";\nimport os from \"os\";\nimport path from \"path\";\n\nimport { ProjectConfig } from \"../config.js\";\n\nimport { spawn } from \"child_process\";\nimport { InvalidArgumentError } from \"commander\";\nimport fetchRetryFactory, { RequestInitRetryParams } from \"fetch-retry\";\nimport { Context, ErrorType } from \"../../../bundler/context.js\";\nimport {\n  failExistingSpinner,\n  logError,\n  logMessage,\n  logWarning,\n} from \"../../../bundler/log.js\";\nimport { version } from \"../../version.js\";\nimport type { CloudDeploymentType, Project } from \"../api.js\";\nimport { promptOptions, promptSearch, promptYesNo } from \"./prompts.js\";\nimport {\n  bigBrainEnableFeatureMetadata,\n  projectHasExistingCloudDev,\n} from \"../localDeployment/bigBrain.js\";\nimport type {\n  paths as CliManagementPaths,\n  RegionName,\n  TeamResponse,\n} from \"../../generatedApi.js\";\nimport createClient from \"openapi-fetch\";\n\nconst retryingFetch = fetchRetryFactory(fetch);\n\nexport const productionProvisionHost = \"https://api.convex.dev\";\nexport const provisionHost =\n  process.env.CONVEX_PROVISION_HOST || productionProvisionHost;\nexport const BIG_BRAIN_URL = `${provisionHost}/api/`;\nconst PLATFORM_MANAGEMENT_API_URL = `${provisionHost}/v1/`;\nexport const ENV_VAR_FILE_PATH = \".env.local\";\nexport const CONVEX_DEPLOY_KEY_ENV_VAR_NAME = \"CONVEX_DEPLOY_KEY\";\n// Alias for CONVEX_DEPLOY_KEY. Accepted anywhere CONVEX_DEPLOY_KEY is.\nexport const CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME = \"CONVEX_DEPLOYMENT_TOKEN\";\nexport const CONVEX_DEPLOYMENT_ENV_VAR_NAME = \"CONVEX_DEPLOYMENT\";\nexport const CONVEX_SELF_HOSTED_URL_VAR_NAME = \"CONVEX_SELF_HOSTED_URL\";\nexport const CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME =\n  \"CONVEX_SELF_HOSTED_ADMIN_KEY\";\nconst MAX_RETRIES = 6;\n// After 3 retries, log a progress message that we're retrying the request\nconst RETRY_LOG_THRESHOLD = 3;\n\n/**\n * Processes the CONVEX_DEPLOY_KEY value to handle special sentinel values.\n *\n * - If the value is `<ignore_deploy_key>`, treats it as if the env var isn't set (returns undefined)\n * - If the value matches `<missing_deploy_key:$STRING>`, crashes with the message in $STRING\n * - Otherwise returns the value as-is\n *\n * @param ctx Context for crashing if needed\n * @param deployKey The raw deploy key value from environment or config\n * @returns The processed deploy key value or undefined\n */\nexport async function processDeployKeyValue(\n  ctx: Context,\n  deployKey: string | undefined,\n): Promise<string | undefined> {\n  if (deployKey === undefined) {\n    return undefined;\n  }\n\n  // Check for <ignore_deploy_key> sentinel\n  if (deployKey === \"<ignore_deploy_key>\") {\n    return undefined;\n  }\n\n  // Check for <missing_deploy_key:$STRING> sentinel\n  const missingKeyPattern = /^<missing_deploy_key:(.+)>$/;\n  const match = deployKey.match(missingKeyPattern);\n  if (match) {\n    const errorMessage = match[1];\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: errorMessage,\n    });\n  }\n\n  return deployKey;\n}\n\n/**\n * Reads the deploy key from environment variables, accepting either\n * CONVEX_DEPLOY_KEY or its alias CONVEX_DEPLOYMENT_TOKEN. CONVEX_DEPLOY_KEY\n * takes precedence when both are set.\n */\nexport function readDeployKeyFromEnv(\n  getEnv: (name: string) => string | undefined | null,\n): string | undefined {\n  const fromDeployKey = getEnv(CONVEX_DEPLOY_KEY_ENV_VAR_NAME);\n  const fromToken = getEnv(CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME);\n  return fromDeployKey || fromToken || undefined;\n}\n\n// The prefix the backend's `require_operation` checks use when an identity\n// lacks a permission. The full message names the missing permission, e.g.\n// `You do not have permission to perform this operation (deployment:data:view).`\nconst PERMISSION_DENIED_MESSAGE_PREFIX =\n  \"You do not have permission to perform this operation\";\n\nfunction deployKeyPermissionAdvice(): string | null {\n  // Name whichever env var is actually set. `CONVEX_DEPLOY_KEY` takes\n  // precedence over `CONVEX_DEPLOYMENT_TOKEN` when both are present.\n  const envVarName = process.env[CONVEX_DEPLOY_KEY_ENV_VAR_NAME]\n    ? CONVEX_DEPLOY_KEY_ENV_VAR_NAME\n    : process.env[CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME]\n      ? CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME\n      : null;\n  if (envVarName === null) {\n    return null;\n  }\n  return `This is determined by the permissions granted to ${envVarName}.`;\n}\n\n/**\n * Detects a server-side authorization failure (a `require_operation` error,\n * surfaced both as an HTTP 403 and as an error from a system UDF query) and\n * produces a clean, single-line message naming the missing permission. When a\n * deploy key is in use, appends advice for configuring its permissions.\n *\n * Returns `null` if `errorMessage` is not a permission error, so callers can\n * fall back to their normal error handling.\n */\nexport function permissionDeniedErrorMessage(\n  errorMessage: string,\n): string | null {\n  const index = errorMessage.indexOf(PERMISSION_DENIED_MESSAGE_PREFIX);\n  if (index === -1) {\n    return null;\n  }\n  // Drop any wrapping context (e.g. the `[CONVEX Q(...)]` prefix) and stack\n  // trace, keeping just the permission sentence.\n  let msg = errorMessage.slice(index).split(\"\\n\")[0].trim();\n  const advice = deployKeyPermissionAdvice();\n  if (advice) {\n    msg = `${msg}\\n${advice}`;\n  }\n  return msg;\n}\n\nexport function parsePositiveInteger(value: string) {\n  const parsedValue = parseInteger(value);\n  if (parsedValue <= 0) {\n    // eslint-disable-next-line no-restricted-syntax\n    throw new InvalidArgumentError(\"Not a positive number.\");\n  }\n  return parsedValue;\n}\n\nexport function parseInteger(value: string) {\n  const parsedValue = +value;\n  if (isNaN(parsedValue)) {\n    // eslint-disable-next-line no-restricted-syntax\n    throw new InvalidArgumentError(\"Not a number.\");\n  }\n  return parsedValue;\n}\n\nexport type ErrorData = {\n  code: string;\n  message: string;\n};\n\n/**\n * Error thrown on non-2XX reponse codes to make most `fetch()` error handling\n * follow a single code path.\n */\nexport class ThrowingFetchError extends Error {\n  response: Response;\n  serverErrorData?: ErrorData;\n\n  constructor(\n    msg: string,\n    {\n      code,\n      message,\n      response,\n    }: { cause?: Error; code?: string; message?: string; response: Response },\n  ) {\n    if (code !== undefined && message !== undefined) {\n      super(`${msg}: ${code}: ${message}`);\n      this.serverErrorData = { code, message };\n    } else {\n      super(msg);\n    }\n\n    Object.setPrototypeOf(this, ThrowingFetchError.prototype);\n\n    this.response = response;\n  }\n\n  public static async fromResponse(\n    response: Response,\n    msg?: string,\n  ): Promise<ThrowingFetchError> {\n    msg = `${msg ? `${msg} ` : \"\"}${response.status} ${response.statusText}`;\n    let code, message;\n    try {\n      ({ code, message } = await response.json());\n    } catch {\n      // Do nothing because the non-2XX response code is the primary error here.\n    }\n    return new ThrowingFetchError(msg, { code, message, response });\n  }\n\n  async handle(ctx: Context): Promise<never> {\n    let error_type: ErrorType = \"transient\";\n    await checkFetchErrorForDeprecation(ctx, this.response);\n\n    let msg = this.message;\n\n    if (this.response.status === 400) {\n      error_type = \"invalid filesystem or env vars\";\n    } else if (this.response.status === 401) {\n      error_type = \"fatal\";\n      msg = `${msg}\\nAuthenticate with \\`npx convex dev\\``;\n    } else if (this.response.status === 403) {\n      error_type = \"fatal\";\n      // Surface the missing permission cleanly (e.g. the server includes the\n      // required action like `deployment:data:view`) instead of the noisy\n      // \"Error fetching ...\" wrapper.\n      msg = this.serverErrorData?.message ?? msg;\n      const advice = deployKeyPermissionAdvice();\n      if (advice) {\n        msg = `${msg}\\n${advice}`;\n      }\n    } else if (this.response.status === 404) {\n      error_type = \"fatal\";\n      msg = `${msg}: ${this.response.url}`;\n    }\n\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: error_type,\n      errForSentry: this,\n      printedMessage: chalkStderr.red(msg.trim()),\n    });\n  }\n}\n\n/**\n * Thin wrapper around `fetch()` which throws a FetchDataError on non-2XX\n * responses which includes error code and message from the response JSON.\n * (Axios-style)\n *\n * It also accepts retry options from fetch-retry.\n */\nexport async function throwingFetch(\n  resource: RequestInfo | URL,\n  options: (RequestInit & RequestInitRetryParams<typeof fetch>) | undefined,\n): Promise<Response> {\n  const response = await retryingFetch(resource, options);\n  if (!response.ok) {\n    // This error must always be handled manually.\n    // eslint-disable-next-line no-restricted-syntax\n    throw await ThrowingFetchError.fromResponse(\n      response,\n      `Error fetching ${options?.method ? options.method + \" \" : \"\"} ${\n        typeof resource === \"string\"\n          ? resource\n          : \"url\" in resource\n            ? resource.url\n            : resource.toString()\n      }`,\n    );\n  }\n  return response;\n}\n\n/**\n * Handle an error a fetch error or non-2xx response.\n */\nexport async function logAndHandleFetchError(\n  ctx: Context,\n  err: unknown,\n): Promise<never> {\n  // Fail the spinner so the stderr lines appear\n  failExistingSpinner();\n\n  if (err instanceof ThrowingFetchError) {\n    return await err.handle(ctx);\n  } else {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      errForSentry: err,\n      printedMessage: chalkStderr.red(err),\n    });\n  }\n}\n\nfunction logDeprecationWarning(ctx: Context, deprecationMessage: string) {\n  if (ctx.deprecationMessagePrinted) {\n    return;\n  }\n  ctx.deprecationMessagePrinted = true;\n  logWarning(chalkStderr.yellow(deprecationMessage));\n}\n\nasync function checkFetchErrorForDeprecation(ctx: Context, resp: Response) {\n  const headers = resp.headers;\n  if (headers) {\n    const deprecationState = headers.get(\"x-convex-deprecation-state\");\n    const deprecationMessage = headers.get(\"x-convex-deprecation-message\");\n    switch (deprecationState) {\n      case null:\n        break;\n      case \"Deprecated\":\n        // This version is deprecated. Print a warning and crash.\n\n        // Gotcha:\n        // 1. Don't use `logDeprecationWarning` because we should always print\n        // why this we crashed (even if we printed a warning earlier).\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: chalkStderr.red(deprecationMessage),\n        });\n      default:\n        // The error included a deprecation warning. Print, but handle the\n        // error normally (it was for another reason).\n        logDeprecationWarning(\n          ctx,\n          deprecationMessage || \"(no deprecation message included)\",\n        );\n        break;\n    }\n  }\n}\n\n/// Call this method after a successful API response to conditionally print the\n/// \"please upgrade\" message.\nexport function deprecationCheckWarning(ctx: Context, resp: Response) {\n  const headers = resp.headers;\n  if (headers) {\n    const deprecationState = headers.get(\"x-convex-deprecation-state\");\n    const deprecationMessage = headers.get(\"x-convex-deprecation-message\");\n    switch (deprecationState) {\n      case null:\n        break;\n      case \"Deprecated\":\n        // This should never happen because such states are errors, not warnings.\n        // eslint-disable-next-line no-restricted-syntax\n        throw new Error(\n          \"Called deprecationCheckWarning on a fatal error. This is a bug.\",\n        );\n      default:\n        logDeprecationWarning(\n          ctx,\n          deprecationMessage || \"(no deprecation message included)\",\n        );\n        break;\n    }\n  }\n}\n\nexport async function hasTeam(ctx: Context, teamSlug: string) {\n  const teams = (await typedBigBrainClient(ctx).GET(\"/teams\")).data!;\n  return teams.some((team) => team.slug === teamSlug);\n}\n\nexport async function validateOrSelectTeam(\n  ctx: Context,\n  teamSlug: string | undefined,\n  promptMessage: string,\n): Promise<{ team: TeamResponse; chosen: boolean }> {\n  const teams = (await typedBigBrainClient(ctx).GET(\"/teams\")).data!;\n  if (teams.length === 0) {\n    await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      errForSentry: \"No teams found\",\n      printedMessage: chalkStderr.red(\"Error: No teams found\"),\n    });\n  }\n  if (!teamSlug) {\n    // Prompt the user to select if they belong to more than one team.\n    switch (teams.length) {\n      case 1:\n        return { team: teams[0], chosen: false };\n      default: {\n        const teamSlug = await promptSearch(ctx, {\n          message: promptMessage,\n          choices: teams.map((team) => ({\n            name: `${team.name} (${team.slug})`,\n            value: team.slug,\n          })),\n        });\n        const team = teams.find((team) => team.slug === teamSlug);\n        if (!team) {\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage: `Error: Failed to select team`,\n          });\n        }\n        return { team, chosen: true };\n      }\n    }\n  } else {\n    // Validate the chosen team.\n    const team = teams.find((team) => team.slug === teamSlug);\n    if (!team) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Error: Team ${teamSlug} not found, fix the --team option or remove it`,\n      });\n    }\n    return { team, chosen: false };\n  }\n}\n\nexport async function selectDevDeploymentType(\n  ctx: Context,\n  {\n    chosenConfiguration,\n    newOrExisting,\n    teamSlug,\n    projectSlug,\n    userHasChosenSomethingInteractively,\n    // from `--configure --dev-deployment local|cloud`\n    devDeploymentFromFlag,\n  }:\n    | {\n        chosenConfiguration: \"new\" | \"existing\" | \"ask\" | null;\n        newOrExisting: \"existing\";\n        teamSlug: string;\n        projectSlug: string;\n        userHasChosenSomethingInteractively: boolean;\n        devDeploymentFromFlag: \"cloud\" | \"local\" | undefined;\n      }\n    | {\n        chosenConfiguration: \"new\" | \"existing\" | \"ask\" | null;\n        newOrExisting: \"new\";\n        teamSlug: string;\n        // For new projects we don't know the project slug yet.\n        projectSlug: undefined;\n        userHasChosenSomethingInteractively: boolean;\n        devDeploymentFromFlag: \"cloud\" | \"local\" | undefined;\n      },\n): Promise<{ devDeployment: \"cloud\" | \"local\" }> {\n  if (devDeploymentFromFlag) return { devDeployment: devDeploymentFromFlag };\n\n  if (newOrExisting === \"existing\" && chosenConfiguration === null) {\n    // Don't suggest local dev if developer already has a cloud deployment.\n    if (await projectHasExistingCloudDev(ctx, { projectSlug, teamSlug })) {\n      // TODO Expand rollout to offer local dev in this case. ENG-8307\n      return { devDeployment: \"cloud\" };\n    }\n  }\n\n  // To avoid breaking previously non-interactive flows, don't prompt if enough\n  // flags were specified for configure not to already have needed input.\n  if (chosenConfiguration !== \"ask\" && !userHasChosenSomethingInteractively) {\n    return { devDeployment: \"cloud\" };\n  }\n\n  // For creating a first project (no projects exist) or joining a first project\n  // (one project exists), always use cloud since it's a smoother experience.\n  const isFirstProject =\n    (await bigBrainEnableFeatureMetadata(ctx)).totalProjects.kind !==\n    \"multiple\";\n  if (isFirstProject) {\n    return { devDeployment: \"cloud\" };\n  }\n\n  // For now default is always cloud.\n  const devDeployment: \"cloud\" | \"local\" = await promptOptions(ctx, {\n    message:\n      \"Use cloud or local dev deployment? For more see https://docs.convex.dev/cli/local-deployments\",\n    default: \"cloud\",\n    choices: [\n      { name: \"cloud deployment\", value: \"cloud\" },\n      { name: \"local deployment (BETA)\", value: \"local\" },\n    ],\n  });\n  return { devDeployment };\n}\n\nexport async function logNoDefaultRegionMessage(teamSlug: string) {\n  const { teamDashboardUrl } = await import(\"../dashboard.js\");\n  const noDefaultRegionMessage = chalkStderr.gray(\n    `Tip: you can configure a default region for your team at ${chalkStderr.underline(`${teamDashboardUrl(teamSlug)}/settings`)}`,\n  );\n  logMessage(noDefaultRegionMessage);\n}\n\nexport async function selectRegionOrUseDefault(\n  ctx: Context,\n  selectedTeam: TeamResponse,\n  deploymentType: CloudDeploymentType,\n) {\n  if (!process.stdin.isTTY) {\n    // Use the team default in non-interactive terminals\n    if (!selectedTeam.defaultRegion) {\n      await logNoDefaultRegionMessage(selectedTeam.slug);\n    }\n    return selectedTeam.defaultRegion ?? null;\n  }\n  const selectedRegionName =\n    selectedTeam.defaultRegion ??\n    (await selectRegion(ctx, selectedTeam.id, deploymentType));\n  if (!selectedTeam.defaultRegion) {\n    // Log after the user chooses a region\n    await logNoDefaultRegionMessage(selectedTeam.slug);\n  }\n  return selectedRegionName;\n}\n\n// Mirrors the order of `REGION_PRESENTATION` in\n// `npm-packages/dashboard/src/lib/regions.ts`, so both region pickers list\n// regions in the same order.\nconst REGION_ORDER: string[] = [\n  \"aws-us-east-1\",\n  \"aws-eu-west-1\",\n  \"aws-ca-central-1\",\n  \"aws-ap-southeast-2\",\n];\n\n// Regions missing from `REGION_ORDER` (e.g. newly launched ones) go last, in\n// server order, since `Array.prototype.sort` is stable.\nfunction regionSortIndex(regionName: string): number {\n  const index = REGION_ORDER.indexOf(regionName);\n  return index === -1 ? REGION_ORDER.length : index;\n}\n\nexport async function selectRegion(\n  ctx: Context,\n  teamId: number,\n  deploymentType: CloudDeploymentType,\n): Promise<RegionName> {\n  const regionsResponse = (\n    await typedPlatformClient(ctx).GET(\n      \"/teams/{team_id}/list_deployment_regions\",\n      {\n        params: {\n          path: { team_id: `${teamId}` },\n        },\n      },\n    )\n  ).data!;\n  const choices = regionsResponse.items\n    .filter((item) => Boolean(item.available))\n    .map((item) => ({\n      name: item.displayName,\n      value: item.name,\n    }))\n    .sort((a, b) => regionSortIndex(a.value) - regionSortIndex(b.value));\n  return await promptOptions(ctx, {\n    message: `Where should this ${deploymentType} deployment run?`,\n    suffix: `\\n${chalkStderr.gray(\n      \"See https://www.convex.dev/pricing for pricing\",\n    )}`,\n    choices,\n  });\n}\n\nexport async function hasProject(\n  ctx: Context,\n  teamSlug: string,\n  projectSlug: string,\n) {\n  try {\n    await typedPlatformClient(ctx, { throw: true }).GET(\n      \"/teams/{team_id_or_slug}/projects/{project_slug}\",\n      {\n        params: {\n          path: {\n            team_id_or_slug: teamSlug,\n            project_slug: projectSlug,\n          },\n        },\n      },\n    );\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport async function hasProjects(ctx: Context) {\n  return !!(await bigBrainAPI({ ctx, method: \"GET\", path: `has_projects` }));\n}\n\nexport async function validateOrSelectProject(\n  ctx: Context,\n  projectSlug: string | undefined,\n  teamId: number,\n  singleProjectPrompt: string,\n  multiProjectPrompt: string,\n): Promise<string | null> {\n  const projects: Project[] = [];\n  const client = typedPlatformClient(ctx);\n  let cursor: string | undefined;\n  do {\n    const { items, pagination } = (\n      await client.GET(\"/teams/{team_id}/projects\", {\n        params: {\n          path: { team_id: teamId },\n          query: cursor === undefined ? {} : { cursor },\n        },\n      })\n    ).data!;\n    projects.push(...items);\n    cursor = pagination.hasMore\n      ? (pagination.nextCursor ?? undefined)\n      : undefined;\n  } while (cursor !== undefined);\n  if (projects.length === 0) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `No existing projects! Run this command again and choose \"create a new project.\"`,\n    });\n  }\n  if (!projectSlug) {\n    // Prompt the user to select project.\n    switch (projects.length) {\n      case 1: {\n        const project = projects[0];\n        const confirmed = await promptYesNo(ctx, {\n          message: `${singleProjectPrompt} ${project.name} (${project.slug})?`,\n        });\n\n        if (!confirmed) {\n          return null;\n        }\n        return projects[0].slug;\n      }\n      default:\n        return await promptSearch(ctx, {\n          message: multiProjectPrompt,\n          choices: projects.map((project: Project) => ({\n            name: `${project.name} (${project.slug})`,\n            value: project.slug,\n          })),\n        });\n    }\n  } else {\n    // Validate the chosen project.\n    if (!projects.find((project) => project.slug === projectSlug)) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Error: Project ${projectSlug} not found, fix the --project option or remove it`,\n      });\n    }\n    return projectSlug;\n  }\n}\n\n/**\n * @param ctx\n * @returns a Record of dependency name to dependency version for dependencies\n * and devDependencies\n */\nexport async function loadPackageJson(\n  ctx: Context,\n  includePeerDeps = false,\n): Promise<Record<string, string>> {\n  let packageJson;\n  try {\n    packageJson = ctx.fs.readUtf8File(\"package.json\");\n  } catch (err) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `Unable to read your package.json: ${\n        err as any\n      }. Make sure you're running this command from the root directory of a Convex app that contains the package.json`,\n    });\n  }\n  let obj;\n  try {\n    obj = JSON.parse(packageJson);\n  } catch (err) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      errForSentry: err,\n      printedMessage: `Unable to parse package.json: ${err as any}`,\n    });\n  }\n  if (typeof obj !== \"object\") {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: \"Expected to parse an object from package.json\",\n    });\n  }\n  const packages = {\n    ...(includePeerDeps ? (obj.peerDependencies ?? {}) : {}),\n    ...(obj.dependencies ?? {}),\n    ...(obj.devDependencies ?? {}),\n  };\n  return packages;\n}\n\nexport async function ensureHasConvexDependency(ctx: Context, cmd: string) {\n  const packages = await loadPackageJson(ctx, true);\n  const hasConvexDependency = \"convex\" in packages;\n  if (!hasConvexDependency) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `In order to ${cmd}, add \\`convex\\` to your package.json dependencies.`,\n    });\n  }\n}\n\n/** Return a new array with elements of the passed in array sorted by a key lambda */\nexport const sorted = <T>(arr: T[], key: (el: T) => any): T[] => {\n  const newArr = [...arr];\n  const cmp = (a: T, b: T) => {\n    if (key(a) < key(b)) return -1;\n    if (key(a) > key(b)) return 1;\n    return 0;\n  };\n  return newArr.sort(cmp);\n};\n\nexport function functionsDir(\n  configPath: string,\n  projectConfig: ProjectConfig,\n): string {\n  return path.join(path.dirname(configPath), projectConfig.functions);\n}\n\nfunction convexName() {\n  // Use a different directory for config files generated for tests\n  if (process.env.CONVEX_PROVISION_HOST) {\n    const port = process.env.CONVEX_PROVISION_HOST.split(\":\")[2];\n    if (port === undefined || port === \"8050\") {\n      return `convex-test`;\n    } else {\n      return `convex-test-${port}`;\n    }\n  }\n  return \"convex\";\n}\n\nexport function rootDirectory(): string {\n  return path.join(os.homedir(), `.${convexName()}`);\n}\n\nexport function cacheDir() {\n  const name = convexName();\n  const platform = process.platform;\n  if (platform === \"win32\") {\n    // On Windows, `LOCALAPPDATA` is usually set, but fall back to\n    // `USERPROFILE` if not, and fall back to homedir if all else fails.\n    if (process.env.LOCALAPPDATA) {\n      return path.join(process.env.LOCALAPPDATA, name);\n    }\n    if (process.env.USERPROFILE) {\n      return path.join(process.env.USERPROFILE, \"AppData\", \"Local\", name);\n    }\n    return path.join(os.homedir(), \"AppData\", \"Local\", name);\n  }\n  return path.join(os.homedir(), \".cache\", name);\n}\n\n/**\n * Fetch with appropriate headers for the Convex Management API.\n *\n * This fetch() also has retries and throws if the response is not ok.\n */\nexport function bigBrainFetch(ctx: Context): typeof fetch {\n  const authHeader = ctx.bigBrainAuth()?.header;\n  const bigBrainHeaders: Record<string, string> = authHeader\n    ? {\n        Authorization: authHeader,\n        \"Convex-Client\": `npm-cli-${version}`,\n      }\n    : {\n        \"Convex-Client\": `npm-cli-${version}`,\n      };\n  return (resource: RequestInfo | URL, options: RequestInit | undefined) => {\n    const { headers: optionsHeaders, ...rest } = options || {};\n    // Use the options headers if they exist. Otherwise, use the request headers\n    const headers = {\n      ...bigBrainHeaders,\n      ...(optionsHeaders ??\n        (resource instanceof Request\n          ? Object.fromEntries(resource.headers.entries())\n          : {})),\n    };\n    const opts = {\n      retries: MAX_RETRIES,\n      retryDelay,\n      headers,\n      ...rest,\n    };\n\n    return throwingFetch(resource, opts);\n  };\n}\n\nexport async function bigBrainAPI<T = any>({\n  ctx,\n  method,\n  path,\n  data,\n}: {\n  ctx: Context;\n  method: \"GET\" | \"POST\" | \"HEAD\";\n  path: string;\n  data?: any;\n}): Promise<T> {\n  const dataString =\n    data === undefined\n      ? undefined\n      : typeof data === \"string\"\n        ? data\n        : JSON.stringify(data);\n  try {\n    return await bigBrainAPIMaybeThrows({\n      ctx,\n      method,\n      path,\n      data: dataString,\n    });\n  } catch (err: unknown) {\n    return await logAndHandleFetchError(ctx, err);\n  }\n}\n\n/**\n * Typed API client with a fetch() implemention that includes retries and crashes on errors.\n * It is always safe to call `.data!` on the response: any error would throw or crash.\n *\n * Pass { throw: true } to throw ThrowingFetchErrors instead of exiting the process.\n */\nfunction typedApiClientFactory<T>(\n  baseUrl: string,\n  fetchBuilder: (ctx: Context) => typeof fetch,\n) {\n  return (ctx: Context, options: { throw?: boolean } = {}) => {\n    type Paths = T extends CliManagementPaths\n      ? CliManagementPaths\n      : T extends PlatformManagementPaths\n        ? PlatformManagementPaths\n        : T extends PlatformDeploymentPaths\n          ? PlatformDeploymentPaths\n          : never;\n    const client = createClient<Paths>({\n      baseUrl,\n      fetch: fetchBuilder(ctx),\n    });\n\n    // Wrap the client with error handling - go back to proxy since middleware doesn't catch parsing errors\n    return new Proxy(client, {\n      get(target, prop) {\n        const originalMethod = target[prop as keyof typeof target];\n\n        if (\n          prop === \"GET\" ||\n          prop === \"POST\" ||\n          prop === \"HEAD\" ||\n          prop === \"OPTIONS\" ||\n          prop === \"PUT\" ||\n          prop === \"DELETE\" ||\n          prop === \"PATCH\" ||\n          prop === \"TRACE\"\n        ) {\n          return async (...args: any[]) => {\n            try {\n              return await (originalMethod as Function).apply(target, args);\n            } catch (err: unknown) {\n              if (options.throw) {\n                // eslint-disable-next-line no-restricted-syntax\n                throw err;\n              }\n              return await logAndHandleFetchError(ctx, err);\n            }\n          };\n        }\n\n        return originalMethod;\n      },\n    });\n  };\n}\n\nexport const typedBigBrainClient = typedApiClientFactory<CliManagementPaths>(\n  BIG_BRAIN_URL,\n  bigBrainFetch,\n);\nexport const typedPlatformClient =\n  typedApiClientFactory<PlatformManagementPaths>(\n    PLATFORM_MANAGEMENT_API_URL,\n    bigBrainFetch,\n  );\n\nexport function typedDeploymentClient(\n  ctx: Context,\n  args: { deploymentUrl: string; adminKey: string },\n  options: { throw?: boolean } = {},\n) {\n  return typedApiClientFactory<PlatformDeploymentPaths>(\n    `${args.deploymentUrl}/api/v1`,\n    (ctx) =>\n      deploymentFetch(ctx, {\n        deploymentUrl: args.deploymentUrl,\n        adminKey: args.adminKey,\n      }),\n  )(ctx, options);\n}\n\nexport async function bigBrainAPIMaybeThrows({\n  ctx,\n  method,\n  path,\n  data,\n}: {\n  ctx: Context;\n  method: \"GET\" | \"POST\" | \"HEAD\";\n  path: string;\n  data?: any;\n}): Promise<any> {\n  const fetch = bigBrainFetch(ctx);\n  const dataString =\n    data === undefined\n      ? method === \"POST\"\n        ? JSON.stringify({})\n        : undefined\n      : typeof data === \"string\"\n        ? data\n        : JSON.stringify(data);\n  const res = await fetch(new URL(path, BIG_BRAIN_URL), {\n    method,\n    ...(dataString ? { body: dataString } : {}),\n    headers:\n      method === \"POST\"\n        ? {\n            \"Content-Type\": \"application/json\",\n          }\n        : {},\n  });\n  deprecationCheckWarning(ctx, res);\n  if (res.status === 200) {\n    return await res.json();\n  }\n}\n\n/**\n * Polls an arbitrary function until a condition is met.\n *\n * @param fetch Function performing a fetch, returning resulting data.\n * @param condition This function will terminate polling when it returns `true`.\n * @param waitMs How long to wait in between fetches.\n * @returns The resulting data from `fetch`.\n */\nexport const poll = async function <Result>(\n  fetch: () => Promise<Result>,\n  condition: (data: Result) => boolean,\n  waitMs = 1000,\n) {\n  let result = await fetch();\n  while (!condition(result)) {\n    await wait(waitMs);\n    result = await fetch();\n  }\n  return result;\n};\n\nconst wait = function (waitMs: number) {\n  return new Promise((resolve) => {\n    setTimeout(resolve, waitMs);\n  });\n};\n\nexport function waitForever() {\n  // This never resolves\n  return new Promise((_) => {\n    // ignore\n  });\n}\n\n// Returns a promise and a function that resolves the promise.\nexport function waitUntilCalled(): [Promise<unknown>, () => void] {\n  let onCalled: (v: unknown) => void;\n  const waitPromise = new Promise((resolve) => (onCalled = resolve));\n  return [waitPromise, () => onCalled(null)];\n}\n\nconst BYTE_UNITS = [\"bytes\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\"];\n\n/**\n * Format a byte count into a human-friendly string, rounded to one decimal\n * place (dropped when it would be \".0\"), e.g. \"4.1 MiB\" or \"128 MiB\".\n */\nexport function formatSize(n: number): string {\n  let value = n;\n  let unitIndex = 0;\n  while (value >= 1024 && unitIndex < BYTE_UNITS.length - 1) {\n    value /= 1024;\n    unitIndex++;\n  }\n  // Rounding to one decimal place can itself reach the next unit's\n  // boundary (e.g. 1023.999 KiB -> \"1024.0 KiB\" instead of \"1.0 MiB\").\n  const roundedValue = Number(value.toFixed(1));\n  if (roundedValue >= 1024 && unitIndex < BYTE_UNITS.length - 1) {\n    value /= 1024;\n    unitIndex++;\n  }\n  const formatted = value.toFixed(1).replace(/\\.0$/, \"\");\n  return `${formatted} ${BYTE_UNITS[unitIndex]}`;\n}\n\n/**\n * Read an integer override from the environment, falling back to\n * `defaultValue` when the variable is unset. The whole value must be a\n * base-10 integer: `parseInt` would read a typo like `100_000` or `100k` as\n * 100 and silently move the threshold, so anything else is rejected with a\n * warning instead.\n */\nexport function integerFromEnv(envVar: string, defaultValue: number): number {\n  const envValue = process.env[envVar];\n  if (envValue === undefined) {\n    return defaultValue;\n  }\n  if (!/^[+-]?\\d+$/.test(envValue.trim())) {\n    logWarning(\n      `Ignoring ${envVar}=${JSON.stringify(envValue)}: expected an integer, using ${defaultValue}`,\n    );\n    return defaultValue;\n  }\n  return Number(envValue);\n}\n\nexport function formatDuration(ms: number): string {\n  const twoDigits = (n: number, unit: string) =>\n    `${n.toLocaleString(\"en-US\", { maximumFractionDigits: 2 })}${unit}`;\n\n  if (ms < 1e-3) {\n    return twoDigits(ms * 1e9, \"ns\");\n  }\n  if (ms < 1) {\n    return twoDigits(ms * 1e3, \"\u00B5s\");\n  }\n  if (ms < 1e3) {\n    return twoDigits(ms, \"ms\");\n  }\n  const s = ms / 1e3;\n  if (s < 60) {\n    return twoDigits(ms / 1e3, \"s\");\n  }\n  return twoDigits(s / 60, \"m\");\n}\n\nexport function getCurrentTimeString() {\n  const now = new Date();\n  const hours = String(now.getHours()).padStart(2, \"0\");\n  const minutes = String(now.getMinutes()).padStart(2, \"0\");\n  const seconds = String(now.getSeconds()).padStart(2, \"0\");\n  return `${hours}:${minutes}:${seconds}`;\n}\n\n// We don't allow running commands in project subdirectories yet,\n// but we can provide better errors if we look around.\nexport async function findParentConfigs(ctx: Context): Promise<{\n  parentPackageJson: string;\n  parentConvexJson?: string | undefined;\n}> {\n  const parentPackageJson = findUp(ctx, \"package.json\");\n  if (!parentPackageJson) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage:\n        \"No package.json found. To create a new project using Convex, see https://docs.convex.dev/home#quickstarts\",\n    });\n  }\n  const candidateConvexJson =\n    parentPackageJson &&\n    path.join(path.dirname(parentPackageJson), \"convex.json\");\n  const parentConvexJson =\n    candidateConvexJson && ctx.fs.exists(candidateConvexJson)\n      ? candidateConvexJson\n      : undefined;\n  return {\n    parentPackageJson,\n    parentConvexJson,\n  };\n}\n\n/**\n * Finds a file in the current working directory or a parent.\n *\n * @returns The absolute path of the first file found or undefined.\n */\nfunction findUp(ctx: Context, filename: string): string | undefined {\n  let curDir = path.resolve(\".\");\n  let parentDir = curDir;\n  do {\n    const candidate = path.join(curDir, filename);\n    if (ctx.fs.exists(candidate)) {\n      return candidate;\n    }\n    curDir = parentDir;\n    parentDir = path.dirname(curDir);\n  } while (parentDir !== curDir);\n  return;\n}\n\n/**\n * Returns whether there's an existing project config. Throws\n * if this is not a valid directory for a project config.\n */\nexport async function isInExistingProject(ctx: Context) {\n  const { parentPackageJson, parentConvexJson } = await findParentConfigs(ctx);\n  if (parentPackageJson !== path.resolve(\"package.json\")) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: \"Run this command from the root directory of a project.\",\n    });\n  }\n  return !!parentConvexJson;\n}\n\n// `spawnAsync` is the async version of Node's `spawnSync` (and `spawn`).\n//\n// By default, this returns the produced `stdout` and `stderror` and\n// an error if one was encountered (to mirror `spawnSync`).\n//\n// If `stdio` is set to `\"inherit\"`, pipes `stdout` and `stderror` (\n// pausing the spinner if one is running) and rejects the promise\n// on errors (to mirror `execFileSync`).\nexport function spawnAsync(\n  ctx: Context,\n  command: string,\n  args: ReadonlyArray<string>,\n): Promise<{\n  stdout: string;\n  stderr: string;\n  status: null | number;\n  error?: Error | undefined;\n}>;\nexport function spawnAsync(\n  ctx: Context,\n  command: string,\n  args: ReadonlyArray<string>,\n  options: { stdio: \"inherit\"; shell?: boolean },\n): Promise<void>;\nexport function spawnAsync(\n  _ctx: Context,\n  command: string,\n  args: ReadonlyArray<string>,\n  options?: { stdio: \"inherit\"; shell?: boolean },\n) {\n  return new Promise((resolve, reject) => {\n    const child = spawn(command, args, { shell: options?.shell });\n    let stdout = \"\";\n    let stderr = \"\";\n\n    const pipeOutput = options?.stdio === \"inherit\";\n\n    if (pipeOutput) {\n      child.stdout.on(\"data\", (text) =>\n        logMessage(text.toString(\"utf-8\").trimEnd()),\n      );\n      child.stderr.on(\"data\", (text) =>\n        logError(text.toString(\"utf-8\").trimEnd()),\n      );\n    } else {\n      child.stdout.on(\"data\", (data) => {\n        stdout += data.toString(\"utf-8\");\n      });\n\n      child.stderr.on(\"data\", (data) => {\n        stderr += data.toString(\"utf-8\");\n      });\n    }\n\n    const completionListener = (code: number | null) => {\n      child.removeListener(\"error\", errorListener);\n      const result = pipeOutput\n        ? { status: code }\n        : { stdout, stderr, status: code };\n      if (code !== 0) {\n        const argumentString =\n          args && args.length > 0 ? ` ${args.join(\" \")}` : \"\";\n        const error = new Error(\n          `\\`${command}${argumentString}\\` exited with non-zero code: ${code}`,\n        );\n        if (pipeOutput) {\n          reject({ ...result, error });\n        } else {\n          resolve({ ...result, error });\n        }\n      } else {\n        resolve(result);\n      }\n    };\n\n    const errorListener = (error: Error) => {\n      child.removeListener(\"exit\", completionListener);\n      child.removeListener(\"close\", completionListener);\n      if (pipeOutput) {\n        reject({ error, status: null });\n      } else {\n        resolve({ error, status: null });\n      }\n    };\n\n    if (pipeOutput) {\n      child.once(\"exit\", completionListener);\n    } else {\n      child.once(\"close\", completionListener);\n    }\n    child.once(\"error\", errorListener);\n  });\n}\n\nconst IDEMPOTENT_METHODS = [\"GET\", \"HEAD\", \"PUT\", \"DELETE\", \"OPTIONS\", \"TRACE\"];\n\n// immediate, 1s delay, 2s delay, 4s delay, etc.\nexport function retryDelay(\n  attempt: number,\n  _error: Error | null,\n  _response: Response | null,\n): number {\n  const delay = attempt === 0 ? 1 : 2 ** (attempt - 1) * 1000;\n  const randomSum = delay * 0.2 * Math.random();\n  return delay + randomSum;\n}\n\nfunction deploymentFetchRetryOn(\n  onError?: (err: any, attempt: number) => void,\n  method?: string,\n  maxRetries: number = MAX_RETRIES,\n  shouldRetryOverride?: (\n    error: Error | null,\n    response: Response | null,\n  ) => boolean,\n) {\n  const defaultShouldRetry = function (\n    _attempt: number,\n    error: Error | null,\n    response: Response | null,\n  ): { kind: \"retry\"; error: any } | { kind: \"stop\" } {\n    // Retry on network errors.\n    if (error !== null) {\n      // TODO filter out all SSL errors\n      // https://github.com/nodejs/node/blob/8a41d9b636be86350cd32847c3f89d327c4f6ff7/src/crypto/crypto_common.cc#L218-L245\n      return { kind: \"retry\", error: error };\n    }\n    // Retry on 404s since these can sometimes happen with newly created\n    // deployments for POSTs.\n    if (response?.status === 404) {\n      return {\n        kind: \"retry\",\n        error: `Received response with status ${response.status}`,\n      };\n    }\n\n    // Whatever the error code it doesn't hurt to retry idempotent requests.\n    if (\n      response &&\n      !response.ok &&\n      method &&\n      IDEMPOTENT_METHODS.includes(method.toUpperCase())\n    ) {\n      // ...but it's a bit annoying to wait for things we know won't succced\n      if (\n        [\n          400, // Bad Request\n          401, // Unauthorized\n          402, // PaymentRequired\n          403, // Forbidden\n          405, // Method Not Allowed\n          406, // Not Acceptable\n          412, // Precondition Failed\n          413, // Payload Too Large\n          414, // URI Too Long\n          415, // Unsupported Media Type\n          416, // Range Not Satisfiable\n        ].includes(response.status)\n      ) {\n        return {\n          kind: \"stop\",\n        };\n      }\n      return {\n        kind: \"retry\",\n        error: `Received response with status ${response.status}`,\n      };\n    }\n\n    return { kind: \"stop\" };\n  };\n\n  const shouldRetry = shouldRetryOverride\n    ? function (\n        _attempt: number,\n        error: Error | null,\n        response: Response | null,\n      ): { kind: \"retry\"; error: any } | { kind: \"stop\" } {\n        return shouldRetryOverride(error, response)\n          ? {\n              kind: \"retry\",\n              error:\n                error ?? `Received response with status ${response?.status}`,\n            }\n          : { kind: \"stop\" };\n      }\n    : defaultShouldRetry;\n  return function (\n    attempt: number,\n    error: Error | null,\n    response: Response | null,\n  ) {\n    const result = shouldRetry(attempt, error, response);\n    if (result.kind === \"retry\") {\n      onError?.(result.error, attempt);\n    }\n    if (attempt >= maxRetries) {\n      // Stop retrying if we've exhausted all retries, but do this after we've\n      // called `onError` so that the caller can still log the error.\n      return false;\n    }\n    return result.kind === \"retry\";\n  };\n}\n\n/**\n * Unlike `deploymentFetch`, this does not add on any headers, so the caller\n * must supply any headers.\n */\nexport function bareDeploymentFetch(\n  _ctx: Context,\n  options: {\n    deploymentUrl: string;\n    onError?: (err: any) => void;\n  },\n): typeof throwingFetch {\n  const { deploymentUrl, onError } = options;\n  const onErrorWithAttempt = (err: any, attempt: number) => {\n    onError?.(err);\n    if (attempt >= RETRY_LOG_THRESHOLD) {\n      logMessage(\n        chalkStderr.gray(\n          `Retrying request (attempt ${attempt}/${MAX_RETRIES})...`,\n        ),\n      );\n    }\n  };\n  return (resource: RequestInfo | URL, options: RequestInit | undefined) => {\n    const url =\n      resource instanceof URL\n        ? resource.pathname\n        : typeof resource === \"string\"\n          ? new URL(resource, deploymentUrl)\n          : new URL(resource.url, deploymentUrl);\n    const func = throwingFetch(url, {\n      retryDelay,\n      retryOn: deploymentFetchRetryOn(onErrorWithAttempt, options?.method),\n      ...options,\n    });\n    return func;\n  };\n}\n\n/**\n * This returns a `fetch` function that will fetch against `deploymentUrl`.\n *\n * It will also set the `Authorization` header, `Content-Type` header, and\n * the `Convex-Client` header if they are not set in the `fetch`.\n */\nexport function deploymentFetch(\n  _ctx: Context,\n  options: {\n    deploymentUrl: string;\n    adminKey: string;\n    onError?: (err: any) => void;\n    // Defaults to MAX_RETRIES. Lower this for best-effort requests (e.g.\n    // advisory checks) where a slow retry loop against an unsupported or\n    // unhealthy endpoint shouldn't hold up the surrounding command.\n    maxRetries?: number | undefined;\n    // Replaces the default retry policy (which is tuned for pushes: network\n    // errors, 404s on fresh deployments, retries of idempotent methods).\n    // Return true to retry the request. Backoff and retry logging are\n    // shared either way.\n    shouldRetry?: (error: Error | null, response: Response | null) => boolean;\n  },\n): typeof fetch {\n  const {\n    deploymentUrl,\n    adminKey,\n    onError,\n    maxRetries = MAX_RETRIES,\n    shouldRetry,\n  } = options;\n  const onErrorWithAttempt = (err: any, attempt: number) => {\n    onError?.(err);\n    if (attempt >= RETRY_LOG_THRESHOLD) {\n      logMessage(\n        chalkStderr.gray(\n          `Retrying request (attempt ${attempt}/${maxRetries})...`,\n        ),\n      );\n    }\n  };\n  return (resource: RequestInfo | URL, options: RequestInit | undefined) => {\n    const url =\n      resource instanceof URL\n        ? resource.pathname\n        : typeof resource === \"string\"\n          ? new URL(resource, deploymentUrl)\n          : new URL(resource.url, deploymentUrl);\n\n    const headers = new Headers(options?.headers || {});\n    if (!headers.has(\"Authorization\")) {\n      headers.set(\"Authorization\", `Convex ${adminKey}`);\n    }\n    if (!headers.has(\"Content-Type\")) {\n      headers.set(\"Content-Type\", \"application/json\");\n    }\n    if (!headers.has(\"Convex-Client\")) {\n      headers.set(\"Convex-Client\", `npm-cli-${version}`);\n    }\n    const func = throwingFetch(url, {\n      retryDelay,\n      retryOn: deploymentFetchRetryOn(\n        onErrorWithAttempt,\n        options?.method,\n        maxRetries,\n        shouldRetry,\n      ),\n      ...options,\n      headers,\n    });\n    return func;\n  };\n}\n\n/**\n * Whether this is likely to be a WebContainer,\n * WebContainers can't complete the WorkOS  login but where that login flow\n * fails has changed with the environment.\n */\nexport function isWebContainer(): boolean {\n  // Dynamic require as used here doesn't work with tsx\n  if (process.env.CONVEX_RUNNING_LIVE_IN_MONOREPO) {\n    return false;\n  }\n  const dynamicRequire = require;\n  if (process.versions.webcontainer === undefined) {\n    return false;\n  }\n  let blitzInternalEnv: unknown;\n  try {\n    blitzInternalEnv = dynamicRequire(\"@blitz/internal/env\");\n    // totally fine for this require to fail\n    // eslint-disable-next-line no-empty\n  } catch {}\n  return blitzInternalEnv !== null && blitzInternalEnv !== undefined;\n}\n\n// For (rare) special behaviors based on package.json details.\nexport async function currentPackageHomepage(\n  ctx: Context,\n): Promise<string | null> {\n  const { parentPackageJson: packageJsonPath } = await findParentConfigs(ctx);\n  let packageJson: any;\n  try {\n    const packageJsonString = ctx.fs.readUtf8File(packageJsonPath);\n    packageJson = JSON.parse(packageJsonString);\n  } catch (error: any) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `Couldn't parse \"${packageJsonPath}\". Make sure it's a valid JSON. Error: ${error}`,\n    });\n  }\n  const name = packageJson[\"homepage\"];\n  if (typeof name !== \"string\") {\n    // wrong type or missing\n    return null;\n  }\n  return name;\n}\n", "import { PluginBuild } from \"esbuild\";\nimport type { Plugin } from \"esbuild\";\nimport { Context } from \"./context.js\";\nimport path from \"path\";\n\nimport { findUp } from \"find-up\";\nimport { findParentConfigs } from \"../cli/lib/utils/utils.js\";\n\n/**\n * Mimics Node.js node_modules resolution. Ideally we would be able to\n * reuse the logic in esbuild but calling build.resolve() from onResolve()\n * results in infinite recursion. See https://esbuild.github.io/plugins/#resolve\n */\nasync function resolveNodeModule(\n  ctx: Context,\n  moduleDir: string,\n  resolveDir: string,\n): Promise<string | null> {\n  let nodeModulesPath: string | undefined;\n\n  while (\n    (nodeModulesPath = await findUp(\"node_modules\", {\n      type: \"directory\",\n      cwd: resolveDir,\n    }))\n  ) {\n    const maybePath = path.join(nodeModulesPath, moduleDir);\n    if (ctx.fs.exists(maybePath)) {\n      return maybePath;\n    }\n    resolveDir = path.dirname(path.dirname(nodeModulesPath));\n  }\n\n  return null;\n}\n\nfunction getModule(importPath: string): { name: string; dirName: string } {\n  // In case of scoped package\n  if (importPath.startsWith(\"@\")) {\n    const split = importPath.split(\"/\");\n    return {\n      name: `${split[0]}/${split[1]}`,\n      dirName: path.join(split[0], split[1]),\n    };\n  } else {\n    const moduleName = importPath.split(\"/\")[0];\n    return {\n      name: moduleName,\n      dirName: moduleName,\n    };\n  }\n}\n\nexport type ExternalPackage = {\n  path: string;\n};\n\n// Inspired by https://www.npmjs.com/package/esbuild-node-externals.\nexport function createExternalPlugin(\n  ctx: Context,\n  externalPackages: Map<string, ExternalPackage>,\n): {\n  plugin: Plugin;\n  externalModuleNames: Set<string>;\n  bundledModuleNames: Set<string>;\n} {\n  const externalModuleNames = new Set<string>();\n  const bundledModuleNames = new Set<string>();\n  return {\n    plugin: {\n      name: \"convex-node-externals\",\n      setup(build: PluginBuild) {\n        // On every module resolved, we check if the module name should be an external\n        build.onResolve({ namespace: \"file\", filter: /.*/ }, async (args) => {\n          if (args.path.startsWith(\".\")) {\n            // Relative import.\n            return null;\n          }\n\n          const module = getModule(args.path);\n          const externalPackage = externalPackages.get(module.name);\n          if (externalPackage) {\n            const resolved = await resolveNodeModule(\n              ctx,\n              module.dirName,\n              args.resolveDir,\n            );\n            if (resolved && externalPackage.path === resolved) {\n              // Mark as external.\n              externalModuleNames.add(module.name);\n              return { path: args.path, external: true };\n            }\n          }\n\n          bundledModuleNames.add(module.name);\n          return null;\n        });\n      },\n    },\n    externalModuleNames: externalModuleNames,\n    bundledModuleNames: bundledModuleNames,\n  };\n}\n\n// Returns the versions of the packages referenced by the package.json.\nexport async function computeExternalPackages(\n  ctx: Context,\n  externalPackagesAllowList: string[],\n): Promise<Map<string, ExternalPackage>> {\n  if (externalPackagesAllowList.length === 0) {\n    // No external packages in the allow list.\n    return new Map<string, ExternalPackage>();\n  }\n\n  const { parentPackageJson: packageJsonPath } = await findParentConfigs(ctx);\n  const externalPackages = new Map<string, ExternalPackage>();\n  let packageJson: any;\n  try {\n    const packageJsonString = ctx.fs.readUtf8File(packageJsonPath);\n    packageJson = JSON.parse(packageJsonString);\n  } catch (error: any) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `Couldn't parse \"${packageJsonPath}\". Make sure it's a valid JSON. Error: ${error}`,\n    });\n  }\n\n  for (const key of [\n    \"dependencies\",\n    \"devDependencies\",\n    \"peerDependencies\",\n    \"optionalDependencies\",\n  ]) {\n    for (const [packageName, packageJsonVersion] of Object.entries(\n      packageJson[key] ?? {},\n    )) {\n      if (externalPackages.has(packageName)) {\n        // Package version and path already found.\n        continue;\n      }\n\n      if (typeof packageJsonVersion !== \"string\") {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"invalid filesystem data\",\n          printedMessage: `Invalid \"${packageJsonPath}\". \"${key}.${packageName}\" version has type ${typeof packageJsonVersion}.`,\n        });\n      }\n\n      if (\n        !shouldMarkExternal(\n          packageName,\n          packageJsonVersion,\n          externalPackagesAllowList,\n        )\n      ) {\n        // Package should be bundled.\n        continue;\n      }\n\n      // Check if the package path is referenced.\n      const packagePath = path.join(\n        path.dirname(packageJsonPath),\n        \"node_modules\",\n        getModule(packageName).dirName,\n      );\n      if (ctx.fs.exists(packagePath)) {\n        externalPackages.set(packageName, {\n          path: packagePath,\n        });\n      }\n    }\n  }\n\n  return externalPackages;\n}\n\nexport function shouldMarkExternal(\n  packageName: string,\n  packageJsonVersion: string,\n  externalPackagesAllowList: string[],\n): boolean {\n  // Always bundle convex.\n  if (packageName === \"convex\") {\n    return false;\n  }\n\n  if (\n    packageJsonVersion.startsWith(\"file:\") ||\n    packageJsonVersion.startsWith(\"git+file://\")\n  ) {\n    // Bundle instead of marking as external.\n    return false;\n  }\n  if (\n    packageJsonVersion.startsWith(\"http://\") ||\n    packageJsonVersion.startsWith(\"https://\") ||\n    packageJsonVersion.startsWith(\"git://\") ||\n    packageJsonVersion.startsWith(\"git+ssh://\") ||\n    packageJsonVersion.startsWith(\"git+http://\") ||\n    packageJsonVersion.startsWith(\"git+https://\")\n  ) {\n    // Installing those might or might not work. There are some corner cases\n    // like http://127.0.0.1/. Lets bundle for time being.\n    return false;\n  }\n\n  return (\n    externalPackagesAllowList.includes(packageName) ||\n    externalPackagesAllowList.includes(\"*\")\n  );\n}\n\nexport async function findExactVersionAndDependencies(\n  ctx: Context,\n  moduleName: string,\n  modulePath: string,\n): Promise<{\n  version: string;\n  peerAndOptionalDependencies: Set<string>;\n}> {\n  const modulePackageJsonPath = path.join(modulePath, \"package.json\");\n  let modulePackageJson: any;\n  try {\n    const packageJsonString = ctx.fs.readUtf8File(modulePackageJsonPath);\n    modulePackageJson = JSON.parse(packageJsonString);\n  } catch {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `Missing \"${modulePackageJsonPath}\", which is required for\n      installing external package \"${moduleName}\" configured in convex.json.`,\n    });\n  }\n  if (modulePackageJson[\"version\"] === undefined) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `\"${modulePackageJsonPath}\" misses a 'version' field. which is required for\n      installing external package \"${moduleName}\" configured in convex.json.`,\n    });\n  }\n\n  const peerAndOptionalDependencies = new Set<string>();\n  for (const key of [\"peerDependencies\", \"optionalDependencies\"]) {\n    for (const [packageName, packageJsonVersion] of Object.entries(\n      modulePackageJson[key] ?? {},\n    )) {\n      if (typeof packageJsonVersion !== \"string\") {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"invalid filesystem data\",\n          printedMessage: `Invalid \"${modulePackageJsonPath}\". \"${key}.${packageName}\" version has type ${typeof packageJsonVersion}.`,\n        });\n      }\n      peerAndOptionalDependencies.add(packageName);\n    }\n  }\n\n  return {\n    version: modulePackageJson[\"version\"],\n    peerAndOptionalDependencies: peerAndOptionalDependencies,\n  };\n}\n", "/**\n * Normally esbuild can output a metafile containing the dependency\n * graph. However if bundling fails (say no dependency can be found)\n * then no metafile is produced.\n *\n * This plugin produces a similar dependency graph even in incomplete\n * bundling runs that are aborted early due to an error.\n *\n * It is WAY SLOWER!\n *\n * This enables a bundler error to be annotated with an import trace\n * describing why that file was imported.\n */\nimport * as esbuild from \"esbuild\";\nimport * as path from \"path\";\n\n// Interface for the tracer object returned by the plugin\ninterface ImportTracer {\n  /**\n   * Traces all import chains from a specific entry point to the specified file.\n   * @param entryPoint The entry point to start the trace from.\n   * @param filename The file to trace import chains to.\n   * @returns An array of import chains, each chain being an array of file paths.\n   */\n  traceImportChains(entryPoint: string, filename: string): string[][];\n\n  /**\n   * Returns a copy of the entire dependency graph.\n   * @returns A map where keys are importers and values are sets of imported files.\n   */\n  getDependencyGraph(): Map<string, Set<string>>;\n}\n\n// Interface for the combined plugin and tracer\ninterface ImportTracerPlugin {\n  plugin: esbuild.Plugin;\n  tracer: ImportTracer;\n}\n\n/**\n * Creates an esbuild plugin that tracks import dependencies.\n * The plugin builds a dependency graph during bundling without\n * reimplementing module resolution logic.\n *\n * @returns An object containing the plugin and a tracer for analyzing import chains.\n */\nfunction createImportTracerPlugin(): ImportTracerPlugin {\n  // Dependency graph: Map<importer, Set<imported>>\n  const dependencyGraph = new Map<string, Set<string>>();\n  // Set of entry points\n  const entryPoints = new Set<string>();\n  // Set of imports currently being processed to avoid infinite recursion\n  const processingImports = new Set<string>();\n\n  const plugin: esbuild.Plugin = {\n    name: \"import-tracer\",\n    setup(build) {\n      // Reset state on new build\n      build.onStart(() => {\n        dependencyGraph.clear();\n        entryPoints.clear();\n        processingImports.clear();\n      });\n\n      // Capture entry points\n      build.onResolve({ filter: /.*/ }, (args) => {\n        if (args.kind === \"entry-point\") {\n          entryPoints.add(args.path);\n        }\n        return null; // Continue with normal resolution\n      });\n\n      // Track resolved imports\n      build.onResolve({ filter: /.*/ }, async (args) => {\n        if (\n          args.importer &&\n          (args.kind === \"import-statement\" ||\n            args.kind === \"require-call\" ||\n            args.kind === \"dynamic-import\" ||\n            args.kind === \"require-resolve\")\n        ) {\n          const importKey = `${args.importer}:${args.path}`;\n\n          // Avoid infinite recursion\n          if (processingImports.has(importKey)) {\n            return null;\n          }\n\n          try {\n            processingImports.add(importKey);\n\n            //console.log(\"-------------> \", args.path);\n            // Use esbuild's resolution logic - this lets us avoid\n            // reimplementing module resolution ourselves\n            const result = await build.resolve(args.path, {\n              // Does it work to pretendit's always an import???\n              kind: \"import-statement\",\n              resolveDir: args.resolveDir,\n            });\n\n            if (result.errors.length === 0) {\n              // Record the dependency relationship\n              if (!dependencyGraph.has(args.importer)) {\n                dependencyGraph.set(args.importer, new Set());\n              }\n              dependencyGraph.get(args.importer)!.add(result.path);\n            }\n          } finally {\n            processingImports.delete(importKey);\n          }\n        }\n\n        return null; // Let esbuild continue with normal resolution\n      });\n    },\n  };\n\n  const tracer: ImportTracer = {\n    traceImportChains(entryPoint: string, filename: string): string[][] {\n      const resolvedEntryPoint = path.resolve(entryPoint);\n\n      // Find shortest path using BFS\n      const findShortestPath = (\n        start: string,\n        target: string,\n      ): string[] | null => {\n        const queue: { node: string; path: string[] }[] = [\n          { node: start, path: [start] },\n        ];\n        const visited = new Set<string>([start]);\n\n        while (queue.length > 0) {\n          const { node, path } = queue.shift()!;\n\n          if (node === target) {\n            return path;\n          }\n\n          const imports = dependencyGraph.get(node) || new Set();\n          for (const imp of imports) {\n            if (!visited.has(imp)) {\n              visited.add(imp);\n              queue.push({ node: imp, path: [...path, imp] });\n            }\n          }\n        }\n\n        return null;\n      };\n\n      const result = findShortestPath(resolvedEntryPoint, filename);\n      return result ? [result] : [];\n    },\n\n    getDependencyGraph(): Map<string, Set<string>> {\n      // Return a deep copy of the dependency graph\n      const copy = new Map<string, Set<string>>();\n      for (const [key, value] of dependencyGraph.entries()) {\n        copy.set(key, new Set(value));\n      }\n      return copy;\n    },\n  };\n\n  return { plugin, tracer };\n}\n\nexport default createImportTracerPlugin;\n", "import path from \"path\";\nimport esbuild, { BuildFailure, LogLevel, Plugin } from \"esbuild\";\nimport { Context } from \"./context.js\";\nimport {\n  logError,\n  changeSpinner,\n  logFailure,\n  logVerbose,\n  logMessage,\n} from \"./log.js\";\nimport { wasmPlugin } from \"./wasm.js\";\nimport { serverOnlyPlugin } from \"./serverOnly.js\";\nimport dependencyTrackerPlugin from \"./depgraph.js\";\n\nexport async function innerEsbuild({\n  entryPoints,\n  platform,\n  dir,\n  extraConditions,\n  generateSourceMaps,\n  plugins,\n  chunksFolder,\n  logLevel,\n  includeSourcesContent = false,\n  splitting = true,\n}: {\n  entryPoints: string[];\n  platform: esbuild.Platform;\n  dir: string;\n  extraConditions: string[];\n  generateSourceMaps: boolean;\n  plugins: Plugin[];\n  chunksFolder: string;\n  logLevel?: LogLevel;\n  includeSourcesContent?: boolean;\n  splitting?: boolean | undefined;\n}) {\n  const nodeShimsPlugin: esbuild.Plugin = {\n    name: \"convex-async-hooks-shim\",\n    setup(build) {\n      // \"use node\" actions have real async_hooks; only shim for the isolate runtime.\n      if (platform !== \"browser\") return;\n\n      const asyncHooksFilter = /^(node:)?async_hooks$/;\n      build.onResolve({ filter: asyncHooksFilter }, (args) => ({\n        path: args.path,\n        namespace: \"async-hooks-shim\",\n      }));\n      build.onLoad({ filter: /.*/, namespace: \"async-hooks-shim\" }, () => ({\n        contents: `\n            export const AsyncLocalStorage = globalThis.AsyncLocalStorage;\n            export const AsyncResource = globalThis.AsyncResource;\n            export default { AsyncLocalStorage, AsyncResource };\n          `,\n        loader: \"js\",\n      }));\n    },\n  };\n\n  const result = await esbuild.build({\n    entryPoints,\n    bundle: true,\n    platform: platform,\n    format: \"esm\",\n    target: \"esnext\",\n    jsx: \"automatic\",\n    outdir: \"out\",\n    outbase: dir,\n    conditions: [\"convex\", \"module\", ...extraConditions],\n    plugins: [nodeShimsPlugin, ...plugins],\n    write: false,\n    sourcemap: generateSourceMaps,\n    sourcesContent: includeSourcesContent,\n    splitting,\n    chunkNames: path.join(chunksFolder, \"[hash]\"),\n    treeShaking: true,\n    minifySyntax: true,\n    minifyIdentifiers: true,\n    // Enabling minifyWhitespace breaks sourcemaps on convex backends.\n    // The sourcemaps produced are valid on https://evanw.github.io/source-map-visualization\n    // but something we're doing (perhaps involving https://github.com/getsentry/rust-sourcemap)\n    // makes everything map to the same line.\n    minifyWhitespace: false, // false is the default, just showing for clarify.\n    keepNames: true,\n    define: {\n      \"process.env.NODE_ENV\": '\"production\"',\n    },\n    metafile: true,\n    logLevel: logLevel || \"warning\",\n  });\n  return result;\n}\n\nexport function isEsbuildBuildError(e: any): e is BuildFailure {\n  return (\n    \"errors\" in e &&\n    \"warnings\" in e &&\n    Array.isArray(e.errors) &&\n    Array.isArray(e.warnings)\n  );\n}\n\n/**\n * Bundle non-\"use node\" entry points one at a time to track down the first file with an error\n * is being imported.\n */\nexport async function debugIsolateBundlesSerially(\n  ctx: Context,\n  {\n    entryPoints,\n    extraConditions,\n    dir,\n  }: {\n    entryPoints: string[];\n    extraConditions: string[];\n    dir: string;\n  },\n): Promise<void> {\n  logMessage(\n    `Bundling convex entry points one at a time to track down things that can't be bundled for the Convex JS runtime.`,\n  );\n  let i = 1;\n  for (const entryPoint of entryPoints) {\n    changeSpinner(\n      `bundling entry point ${entryPoint} (${i++}/${entryPoints.length})...`,\n    );\n\n    const { plugin, tracer } = dependencyTrackerPlugin();\n    try {\n      await innerEsbuild({\n        entryPoints: [entryPoint],\n        platform: \"browser\",\n        generateSourceMaps: true,\n        chunksFolder: \"_deps\",\n        extraConditions,\n        dir,\n        plugins: [serverOnlyPlugin, plugin, wasmPlugin],\n        logLevel: \"silent\",\n      });\n    } catch (error) {\n      if (!isEsbuildBuildError(error) || !error.errors[0]) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"invalid filesystem data\",\n          printedMessage: null,\n        });\n      }\n\n      const buildError = error.errors[0];\n      const errorFile = buildError.location?.file;\n      if (!errorFile) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"invalid filesystem data\",\n          printedMessage: null,\n        });\n      }\n\n      const importedPath = buildError.text.match(/\"([^\"]+)\"/)?.[1];\n      if (!importedPath) continue;\n\n      const full = path.resolve(errorFile);\n      logError(\"\");\n      logError(\n        `Bundling ${entryPoint} resulted in ${error.errors.length} esbuild errors.`,\n      );\n      logError(`One of the bundling errors occurred while bundling ${full}:\\n`);\n      logError(\n        esbuild\n          .formatMessagesSync([buildError], {\n            kind: \"error\",\n            color: true,\n          })\n          .join(\"\\n\"),\n      );\n      logError(\"It would help to avoid importing this file.\");\n      const chains = tracer.traceImportChains(entryPoint, full);\n      const chain: string[] = chains[0];\n      chain.reverse();\n\n      logError(``);\n      if (chain.length > 0) {\n        const problematicFileRelative = formatFilePath(dir, chain[0]);\n\n        if (chain.length === 1) {\n          logError(`  ${problematicFileRelative}`);\n        } else {\n          logError(`  ${problematicFileRelative} is imported by`);\n\n          for (let i = 1; i < chain.length - 1; i++) {\n            const fileRelative = formatFilePath(dir, chain[i]);\n            logError(`  ${fileRelative}, which is imported by`);\n          }\n\n          const entryPointFile = chain[chain.length - 1];\n          const entryPointRelative = formatFilePath(dir, entryPointFile);\n\n          logError(`  ${entryPointRelative}, which doesn't use \"use node\"\\n`);\n          logError(\n            `  For registered action functions to use Node.js APIs in any code they run they must be defined\\n` +\n              `  in a file with 'use node' at the top. See https://docs.convex.dev/functions/runtimes#nodejs-runtime\\n`,\n          );\n        }\n      }\n\n      logFailure(\"Bundling failed\");\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem data\",\n        printedMessage: \"Bundling failed.\",\n      });\n    }\n    logVerbose(`${entryPoint} bundled`);\n  }\n}\n\n// Helper function to format file paths consistently\nfunction formatFilePath(baseDir: string, filePath: string): string {\n  // If it's already a relative path like \"./shared\", just return it\n  if (!path.isAbsolute(filePath)) {\n    // For relative paths, ensure they start with \"convex/\"\n    if (!filePath.startsWith(\"convex/\")) {\n      // If it's a path like \"./subdir/file.ts\" or \"subdir/file.ts\"\n      const cleanPath = filePath.replace(/^\\.\\//, \"\");\n      return `convex/${cleanPath}`;\n    }\n    return filePath;\n  }\n\n  // Get the path relative to the base directory\n  const relativePath = path.relative(baseDir, filePath);\n\n  // Remove any leading \"./\" that path.relative might add\n  const cleanPath = relativePath.replace(/^\\.\\//, \"\");\n\n  // Check if this is a path within the convex directory\n  const isConvexPath =\n    cleanPath.startsWith(\"convex/\") ||\n    cleanPath.includes(\"/convex/\") ||\n    path.dirname(cleanPath) === \"convex\";\n\n  if (isConvexPath) {\n    // If it already starts with convex/, return it as is\n    if (cleanPath.startsWith(\"convex/\")) {\n      return cleanPath;\n    }\n\n    // For files in the convex directory\n    if (path.dirname(cleanPath) === \"convex\") {\n      const filename = path.basename(cleanPath);\n      return `convex/${filename}`;\n    }\n\n    // For files in subdirectories of convex\n    const convexIndex = cleanPath.indexOf(\"convex/\");\n    if (convexIndex >= 0) {\n      return cleanPath.substring(convexIndex);\n    }\n  }\n\n  // For any other path, assume it's in the convex directory\n  // This handles cases where the file is in a subdirectory of convex\n  // but the path doesn't include \"convex/\" explicitly\n  return `convex/${cleanPath}`;\n}\n", "import path from \"path\";\nimport { chalkStderr } from \"chalk\";\nimport esbuild from \"esbuild\";\nimport { parse as parseAST } from \"@babel/parser\";\nimport { Identifier, ImportSpecifier } from \"@babel/types\";\nimport * as Sentry from \"@sentry/node\";\nimport { Filesystem, consistentPathSort } from \"./fs.js\";\nimport { Context } from \"./context.js\";\nimport { logVerbose, logWarning } from \"./log.js\";\nimport { wasmPlugin } from \"./wasm.js\";\nimport { serverOnlyPlugin } from \"./serverOnly.js\";\nimport {\n  ExternalPackage,\n  computeExternalPackages,\n  createExternalPlugin,\n  findExactVersionAndDependencies,\n} from \"./external.js\";\nimport { innerEsbuild, isEsbuildBuildError } from \"./debugBundle.js\";\nexport { nodeFs, RecordingFs } from \"./fs.js\";\nexport type { Filesystem } from \"./fs.js\";\n\nexport const actionsDir = \"actions\";\n\n// Returns a generator of { isDir, path, depth } for all paths\n// within dirPath in some topological order (not including\n// dirPath itself).\nexport function* walkDir(\n  fs: Filesystem,\n  dirPath: string,\n  shouldSkipDir?: (dirPath: string) => boolean,\n  depth?: number,\n): Generator<{ isDir: boolean; path: string; depth: number }, void, void> {\n  depth = depth ?? 0;\n  for (const dirEntry of fs.listDir(dirPath).sort(consistentPathSort)) {\n    const childPath = path.join(dirPath, dirEntry.name);\n    if (dirEntry.isDirectory()) {\n      if (shouldSkipDir && shouldSkipDir(childPath)) {\n        continue;\n      }\n      yield { isDir: true, path: childPath, depth };\n      yield* walkDir(fs, childPath, shouldSkipDir, depth + 1);\n    } else if (dirEntry.isFile()) {\n      yield { isDir: false, path: childPath, depth };\n    }\n  }\n}\n\n// Convex specific module environment.\ntype ModuleEnvironment = \"node\" | \"isolate\";\n\nexport interface Bundle {\n  path: string;\n  source: string;\n  sourceMap?: string | undefined;\n  environment: ModuleEnvironment;\n}\n\nexport interface BundleHash {\n  path: string;\n  hash: string;\n  environment: ModuleEnvironment;\n}\n\ntype EsBuildResult = esbuild.BuildResult & {\n  outputFiles: esbuild.OutputFile[];\n  // Set of referenced external modules.\n  externalModuleNames: Set<string>;\n  // Set of bundled modules.\n  bundledModuleNames: Set<string>;\n};\n\nasync function doEsbuild({\n  ctx,\n  dir,\n  entryPoints,\n  generateSourceMaps,\n  platform,\n  chunksFolder,\n  externalPackages,\n  extraConditions,\n  includeSourcesContent,\n  splitting,\n}: {\n  ctx: Context;\n  dir: string;\n  entryPoints: string[];\n  generateSourceMaps: boolean;\n  platform: esbuild.Platform;\n  chunksFolder: string;\n  externalPackages: Map<string, ExternalPackage>;\n  extraConditions: string[];\n  includeSourcesContent: boolean;\n  splitting?: boolean | undefined;\n}): Promise<EsBuildResult> {\n  const external = createExternalPlugin(ctx, externalPackages);\n  try {\n    const result = await innerEsbuild({\n      entryPoints,\n      platform,\n      generateSourceMaps,\n      chunksFolder,\n      extraConditions,\n      dir,\n      // serverOnlyPlugin runs first so `server-only` is always stubbed,\n      // even if it appears in the external packages list.\n      // wasmPlugin runs last so it doesn't run on external modules.\n      plugins: [serverOnlyPlugin, external.plugin, wasmPlugin],\n      includeSourcesContent,\n      splitting,\n    });\n\n    for (const [relPath, input] of Object.entries(result.metafile!.inputs)) {\n      // TODO: esbuild outputs paths prefixed with \"(disabled)\"\" when bundling our internal\n      // udf-runtime package. The files do actually exist locally, though.\n      if (\n        relPath.indexOf(\"(disabled):\") !== -1 ||\n        relPath.startsWith(\"wasm-binary:\") ||\n        relPath.startsWith(\"wasm-stub:\") ||\n        relPath.startsWith(\"server-only-stub:\") ||\n        relPath.startsWith(\"async-hooks-shim:\")\n      ) {\n        continue;\n      }\n      const absPath = path.resolve(relPath);\n      const st = ctx.fs.stat(absPath);\n      if (st.size !== input.bytes) {\n        logWarning(\n          `Bundled file ${absPath} changed right after esbuild invocation`,\n        );\n        // Consider this a transient error so we'll try again and hopefully\n        // no files change right after esbuild next time.\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"transient\",\n          printedMessage: null,\n        });\n      }\n      ctx.fs.registerPath(absPath, st);\n    }\n    return {\n      ...result,\n      externalModuleNames: external.externalModuleNames,\n      bundledModuleNames: external.bundledModuleNames,\n    };\n  } catch (e: unknown) {\n    // esbuild sometimes throws a build error instead of returning a result\n    // containing an array of errors. Syntax errors are one of these cases.\n    let recommendUseNode = false;\n    if (isEsbuildBuildError(e)) {\n      for (const error of e.errors) {\n        if (error.location) {\n          const absPath = path.resolve(error.location.file);\n          const st = ctx.fs.stat(absPath);\n          ctx.fs.registerPath(absPath, st);\n        }\n        if (\n          platform !== \"node\" &&\n          !recommendUseNode &&\n          error.notes.some((note) =>\n            note.text.includes(\"Are you trying to bundle for node?\"),\n          )\n        ) {\n          recommendUseNode = true;\n        }\n      }\n    }\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      // We don't print any error because esbuild already printed\n      // all the relevant information.\n      printedMessage: recommendUseNode\n        ? `\\nIt looks like you are using Node APIs from a file without the \"use node\" directive.\\n` +\n          `Split out actions using Node.js APIs like this into a new file only containing actions that uses \"use node\" ` +\n          `so these actions will run in a Node.js environment.\\n` +\n          `For more information see https://docs.convex.dev/functions/runtimes#nodejs-runtime\\n`\n        : null,\n    });\n  }\n}\n\nexport async function bundle({\n  ctx,\n  dir,\n  entryPoints,\n  generateSourceMaps,\n  platform,\n  chunksFolder = \"_deps\",\n  externalPackagesAllowList = [],\n  extraConditions = [],\n  includeSourcesContent = false,\n  splitting,\n}: {\n  ctx: Context;\n  dir: string;\n  entryPoints: string[];\n  generateSourceMaps: boolean;\n  platform: esbuild.Platform;\n  chunksFolder?: string;\n  externalPackagesAllowList?: string[];\n  extraConditions?: string[];\n  includeSourcesContent?: boolean;\n  splitting?: boolean;\n}): Promise<{\n  modules: Bundle[];\n  externalDependencies: Map<string, string>;\n  bundledModuleNames: Set<string>;\n  metafile: esbuild.Metafile | null;\n}> {\n  const availableExternalPackages = await computeExternalPackages(\n    ctx,\n    externalPackagesAllowList,\n  );\n  const result = await doEsbuild({\n    ctx,\n    dir,\n    entryPoints,\n    generateSourceMaps,\n    platform,\n    chunksFolder,\n    externalPackages: availableExternalPackages,\n    extraConditions,\n    includeSourcesContent,\n    splitting,\n  });\n  // Some ESBuild errors won't show up here, instead crashing in doEsbuild().\n  if (result.errors.length) {\n    const errorMessage = result.errors\n      .map((e) => `esbuild error: ${e.text}`)\n      .join(\"\\n\");\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: errorMessage,\n    });\n  }\n  for (const warning of result.warnings) {\n    logWarning(chalkStderr.yellow(`esbuild warning: ${warning.text}`));\n  }\n  const sourceMaps = new Map();\n  const modules: Bundle[] = [];\n  const environment = platform === \"node\" ? \"node\" : \"isolate\";\n  for (const outputFile of result.outputFiles) {\n    const relPath = path.relative(path.normalize(\"out\"), outputFile.path);\n    if (path.extname(relPath) === \".map\") {\n      sourceMaps.set(relPath, outputFile.text);\n      continue;\n    }\n    const posixRelPath = relPath.split(path.sep).join(path.posix.sep);\n    modules.push({ path: posixRelPath, source: outputFile.text, environment });\n  }\n  for (const module of modules) {\n    const sourceMapPath = module.path + \".map\";\n    const sourceMap = sourceMaps.get(sourceMapPath);\n    if (sourceMap) {\n      module.sourceMap = sourceMap;\n    }\n  }\n\n  return {\n    modules,\n    externalDependencies: await externalPackageVersions(\n      ctx,\n      availableExternalPackages,\n      result.externalModuleNames,\n    ),\n    bundledModuleNames: result.bundledModuleNames,\n    metafile: result.metafile ?? null,\n  };\n}\n\n// We could return the full list of availableExternalPackages, but this would be\n// installing more packages that we need. Instead, we collect all external\n// dependencies we found during bundling the /convex function, as well as their\n// respective peer and optional dependencies.\nasync function externalPackageVersions(\n  ctx: Context,\n  availableExternalPackages: Map<string, ExternalPackage>,\n  referencedPackages: Set<string>,\n): Promise<Map<string, string>> {\n  const versions = new Map<string, string>();\n  const referencedPackagesQueue = Array.from(referencedPackages.keys());\n\n  for (let i = 0; i < referencedPackagesQueue.length; i++) {\n    const moduleName = referencedPackagesQueue[i];\n    // This assertion is safe because referencedPackages can only contain\n    // packages in availableExternalPackages.\n    const modulePath = availableExternalPackages.get(moduleName)!.path;\n    // Since we don't support lock files and different install commands yet, we\n    // pick up the exact version installed on the local filesystem.\n    const { version, peerAndOptionalDependencies } =\n      await findExactVersionAndDependencies(ctx, moduleName, modulePath);\n    versions.set(moduleName, version);\n\n    for (const dependency of peerAndOptionalDependencies) {\n      if (\n        availableExternalPackages.has(dependency) &&\n        !referencedPackages.has(dependency)\n      ) {\n        referencedPackagesQueue.push(dependency);\n        referencedPackages.add(dependency);\n      }\n    }\n  }\n\n  return versions;\n}\n\nexport async function bundleSchema(\n  ctx: Context,\n  dir: string,\n  extraConditions: string[],\n) {\n  let target = path.resolve(dir, \"schema.ts\");\n  if (!ctx.fs.exists(target)) {\n    target = path.resolve(dir, \"schema.js\");\n  }\n  const result = await bundle({\n    ctx,\n    dir,\n    entryPoints: [target],\n    generateSourceMaps: true,\n    platform: \"browser\",\n    extraConditions,\n  });\n  return { modules: result.modules, metafile: result.metafile };\n}\n\nexport async function bundleAuthConfig(\n  ctx: Context,\n  dir: string,\n): Promise<{ modules: Bundle[]; metafile: esbuild.Metafile | null }> {\n  const authConfigPath = path.resolve(dir, \"auth.config.js\");\n  const authConfigTsPath = path.resolve(dir, \"auth.config.ts\");\n  if (ctx.fs.exists(authConfigPath) && ctx.fs.exists(authConfigTsPath)) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `Found both ${authConfigPath} and ${authConfigTsPath}, choose one.`,\n    });\n  }\n  const chosenPath = ctx.fs.exists(authConfigTsPath)\n    ? authConfigTsPath\n    : authConfigPath;\n  if (!ctx.fs.exists(chosenPath)) {\n    logVerbose(\n      chalkStderr.yellow(\n        `Found no auth config file at ${authConfigTsPath} or ${authConfigPath} so there are no configured auth providers`,\n      ),\n    );\n    return { modules: [], metafile: null };\n  }\n  logVerbose(chalkStderr.yellow(`Bundling auth config found at ${chosenPath}`));\n  const result = await bundle({\n    ctx,\n    dir,\n    entryPoints: [chosenPath],\n    generateSourceMaps: true,\n    platform: \"browser\",\n    // The auth config must be one module\n    splitting: false,\n  });\n  return { modules: result.modules, metafile: result.metafile };\n}\n\nexport async function doesImportConvexHttpRouter(source: string) {\n  try {\n    const ast = parseAST(source, {\n      sourceType: \"module\",\n      plugins: [\"typescript\"],\n    });\n    return ast.program.body.some((node) => {\n      if (node.type !== \"ImportDeclaration\") return false;\n      return node.specifiers.some((s) => {\n        const specifier = s as ImportSpecifier;\n        const imported = specifier.imported as Identifier;\n        return imported.name === \"httpRouter\";\n      });\n    });\n  } catch {\n    return (\n      source.match(\n        /import\\s*\\{\\s*httpRouter.*\\}\\s*from\\s*\"\\s*convex\\/server\\s*\"/,\n      ) !== null\n    );\n  }\n}\n\nconst ENTRY_POINT_EXTENSIONS = [\n  // ESBuild js loader\n  \".js\",\n  \".mjs\",\n  \".cjs\",\n  // ESBuild ts loader\n  \".ts\",\n  \".tsx\",\n  \".mts\",\n  \".cts\",\n  // ESBuild jsx loader\n  \".jsx\",\n  // ESBuild supports css, text, json, and more but these file types are not\n  // allowed to define entry points.\n];\n\nexport async function entryPoints(\n  ctx: Context,\n  dir: string,\n): Promise<string[]> {\n  const entryPoints = [];\n\n  // Don't deploy directories in convex/ that define components\n  // as this leads to double-deploying.\n  const looksLikeNestedComponent = (dirPath: string): boolean => {\n    const config = path.join(dirPath, \"convex.config.ts\");\n    const isComponentDefinition = ctx.fs.exists(config);\n    if (isComponentDefinition) {\n      logVerbose(chalkStderr.yellow(`Skipping component directory ${dirPath}`));\n    }\n    return isComponentDefinition;\n  };\n\n  for (const { isDir, path: fpath, depth } of walkDir(\n    ctx.fs,\n    dir,\n    looksLikeNestedComponent,\n  )) {\n    if (isDir) {\n      continue;\n    }\n    const relPath = path.relative(dir, fpath);\n    const parsedPath = path.parse(fpath);\n    const base = parsedPath.base;\n    const extension = parsedPath.ext.toLowerCase();\n\n    if (relPath.startsWith(\"_deps\" + path.sep)) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem data\",\n        printedMessage: `The path \"${fpath}\" is within the \"_deps\" directory, which is reserved for dependencies. Please move your code to another directory.`,\n      });\n    }\n\n    if (depth === 0 && base.toLowerCase().startsWith(\"https.\")) {\n      const source = ctx.fs.readUtf8File(fpath);\n      if (await doesImportConvexHttpRouter(source))\n        logWarning(\n          chalkStderr.yellow(\n            `Found ${fpath}. HTTP action routes will not be imported from this file. Did you mean to include http${extension}?`,\n          ),\n        );\n      Sentry.captureMessage(\n        `User code top level directory contains file ${base} which imports httpRouter.`,\n        \"warning\",\n      );\n    }\n\n    // This should match isEntryPoint in the convex eslint plugin.\n    if (!ENTRY_POINT_EXTENSIONS.some((ext) => relPath.endsWith(ext))) {\n      logVerbose(chalkStderr.yellow(`Skipping non-JS file ${fpath}`));\n    } else if (relPath.startsWith(\"_generated\" + path.sep)) {\n      logVerbose(chalkStderr.yellow(`Skipping ${fpath}`));\n    } else if (base.startsWith(\".\")) {\n      logVerbose(chalkStderr.yellow(`Skipping dotfile ${fpath}`));\n    } else if (base.startsWith(\"#\")) {\n      logVerbose(chalkStderr.yellow(`Skipping likely emacs tempfile ${fpath}`));\n    } else if (base === \"schema.ts\" || base === \"schema.js\") {\n      logVerbose(chalkStderr.yellow(`Skipping ${fpath}`));\n    } else if ((base.match(/\\./g) || []).length > 1) {\n      // `auth.config.ts` and `convex.config.ts` are important not to bundle.\n      // `*.test.ts` `*.spec.ts` are common in developer code.\n      logVerbose(\n        chalkStderr.yellow(`Skipping ${fpath} that contains multiple dots`),\n      );\n    } else if (relPath.includes(\" \")) {\n      logVerbose(\n        chalkStderr.yellow(`Skipping ${relPath} because it contains a space`),\n      );\n    } else {\n      logVerbose(chalkStderr.green(`Preparing ${fpath}`));\n      entryPoints.push(fpath);\n    }\n  }\n\n  // If using TypeScript, require that at least one line starts with `export` or `import`,\n  // a TypeScript requirement. This prevents confusing type errors from empty .ts files.\n  const nonEmptyEntryPoints = entryPoints.filter((fpath) => {\n    // This check only makes sense for TypeScript files\n    if (!fpath.endsWith(\".ts\") && !fpath.endsWith(\".tsx\")) {\n      return true;\n    }\n    const contents = ctx.fs.readUtf8File(fpath);\n    if (/^\\s{0,100}(import|export)/m.test(contents)) {\n      return true;\n    }\n    logVerbose(\n      chalkStderr.yellow(\n        `Skipping ${fpath} because it has no export or import to make it a valid TypeScript module`,\n      ),\n    );\n  });\n\n  return nonEmptyEntryPoints;\n}\n\n// A fallback regex in case we fail to parse the AST.\nexport const useNodeDirectiveRegex = /^\\s*(\"|')use node(\"|');?\\s*$/;\n\nfunction hasUseNodeDirective(ctx: Context, fpath: string): boolean {\n  // Do a quick check for the exact string. If it doesn't exist, don't\n  // bother parsing.\n  const source = ctx.fs.readUtf8File(fpath);\n  if (source.indexOf(\"use node\") === -1) {\n    return false;\n  }\n\n  // We parse the AST here to extract the \"use node\" declaration. This is more\n  // robust than doing a regex. We only use regex as a fallback.\n  try {\n    const ast = parseAST(source, {\n      // parse in strict mode and allow module declarations\n      sourceType: \"module\",\n\n      // esbuild supports jsx and typescript by default. Allow the same plugins\n      // here too.\n      plugins: [\"jsx\", \"typescript\"],\n    });\n    return ast.program.directives\n      .map((d) => d.value.value)\n      .includes(\"use node\");\n  } catch (error: any) {\n    // Given that we have failed to parse, we are most likely going to fail in\n    // the esbuild step, which seem to return better formatted error messages.\n    // We don't throw here and fallback to regex.\n    let lineMatches = false;\n    for (const line of source.split(\"\\n\")) {\n      if (line.match(useNodeDirectiveRegex)) {\n        lineMatches = true;\n        break;\n      }\n    }\n\n    // Log that we failed to parse in verbose node if we need this for debugging.\n    logVerbose(\n      `Failed to parse ${fpath}. Use node is set to ${lineMatches} based on regex. Parse error: ${error.toString()}.`,\n    );\n\n    return lineMatches;\n  }\n}\n\nexport function mustBeIsolate(relPath: string): boolean {\n  // Check if the path without extension matches any of the static paths.\n  return [\"http\", \"crons\", \"schema\", \"auth.config\"].includes(\n    relPath.replace(/\\.[^/.]+$/, \"\"),\n  );\n}\n\nasync function determineEnvironment(\n  ctx: Context,\n  dir: string,\n  fpath: string,\n): Promise<ModuleEnvironment> {\n  const relPath = path.relative(dir, fpath);\n\n  const useNodeDirectiveFound = hasUseNodeDirective(ctx, fpath);\n  if (useNodeDirectiveFound) {\n    if (mustBeIsolate(relPath)) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem data\",\n        printedMessage: `\"use node\" directive is not allowed for ${relPath}.`,\n      });\n    }\n    return \"node\";\n  }\n\n  const actionsPrefix = actionsDir + path.sep;\n  if (relPath.startsWith(actionsPrefix)) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `${relPath} is in /actions subfolder but has no \"use node\"; directive. You can now define actions in any folder and indicate they should run in node by adding \"use node\" directive. /actions is a deprecated way to choose Node.js environment, and we require \"use node\" for all files within that folder to avoid unexpected errors during the migration. See https://docs.convex.dev/functions/actions for more details`,\n    });\n  }\n\n  return \"isolate\";\n}\n\nexport async function entryPointsByEnvironment(ctx: Context, dir: string) {\n  const isolate = [];\n  const node = [];\n  for (const entryPoint of await entryPoints(ctx, dir)) {\n    const environment = await determineEnvironment(ctx, dir, entryPoint);\n    if (environment === \"node\") {\n      node.push(entryPoint);\n    } else {\n      isolate.push(entryPoint);\n    }\n  }\n\n  return { isolate, node };\n}\n", "{\n  \"name\": \"dotenv\",\n  \"version\": \"16.6.1\",\n  \"description\": \"Loads environment variables from .env file\",\n  \"main\": \"lib/main.js\",\n  \"types\": \"lib/main.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./lib/main.d.ts\",\n      \"require\": \"./lib/main.js\",\n      \"default\": \"./lib/main.js\"\n    },\n    \"./config\": \"./config.js\",\n    \"./config.js\": \"./config.js\",\n    \"./lib/env-options\": \"./lib/env-options.js\",\n    \"./lib/env-options.js\": \"./lib/env-options.js\",\n    \"./lib/cli-options\": \"./lib/cli-options.js\",\n    \"./lib/cli-options.js\": \"./lib/cli-options.js\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"dts-check\": \"tsc --project tests/types/tsconfig.json\",\n    \"lint\": \"standard\",\n    \"pretest\": \"npm run lint && npm run dts-check\",\n    \"test\": \"tap run --allow-empty-coverage --disable-coverage --timeout=60000\",\n    \"test:coverage\": \"tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov\",\n    \"prerelease\": \"npm test\",\n    \"release\": \"standard-version\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/motdotla/dotenv.git\"\n  },\n  \"homepage\": \"https://github.com/motdotla/dotenv#readme\",\n  \"funding\": \"https://dotenvx.com\",\n  \"keywords\": [\n    \"dotenv\",\n    \"env\",\n    \".env\",\n    \"environment\",\n    \"variables\",\n    \"config\",\n    \"settings\"\n  ],\n  \"readmeFilename\": \"README.md\",\n  \"license\": \"BSD-2-Clause\",\n  \"devDependencies\": {\n    \"@types/node\": \"^18.11.3\",\n    \"decache\": \"^4.6.2\",\n    \"sinon\": \"^14.0.1\",\n    \"standard\": \"^17.0.0\",\n    \"standard-version\": \"^9.5.0\",\n    \"tap\": \"^19.2.0\",\n    \"typescript\": \"^4.8.4\"\n  },\n  \"engines\": {\n    \"node\": \">=12\"\n  },\n  \"browser\": {\n    \"fs\": false\n  }\n}\n", "const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n  const obj = {}\n\n  // Convert buffer to string\n  let lines = src.toString()\n\n  // Convert line breaks to same format\n  lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n  let match\n  while ((match = LINE.exec(lines)) != null) {\n    const key = match[1]\n\n    // Default undefined or null to empty string\n    let value = (match[2] || '')\n\n    // Remove whitespace\n    value = value.trim()\n\n    // Check if double quoted\n    const maybeQuote = value[0]\n\n    // Remove surrounding quotes\n    value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n    // Expand newlines if double quoted\n    if (maybeQuote === '\"') {\n      value = value.replace(/\\\\n/g, '\\n')\n      value = value.replace(/\\\\r/g, '\\r')\n    }\n\n    // Add to object\n    obj[key] = value\n  }\n\n  return obj\n}\n\nfunction _parseVault (options) {\n  options = options || {}\n\n  const vaultPath = _vaultPath(options)\n  options.path = vaultPath // parse .env.vault\n  const result = DotenvModule.configDotenv(options)\n  if (!result.parsed) {\n    const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n    err.code = 'MISSING_DATA'\n    throw err\n  }\n\n  // handle scenario for comma separated keys - for use with key rotation\n  // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n  const keys = _dotenvKey(options).split(',')\n  const length = keys.length\n\n  let decrypted\n  for (let i = 0; i < length; i++) {\n    try {\n      // Get full key\n      const key = keys[i].trim()\n\n      // Get instructions for decrypt\n      const attrs = _instructions(result, key)\n\n      // Decrypt\n      decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n      break\n    } catch (error) {\n      // last key\n      if (i + 1 >= length) {\n        throw error\n      }\n      // try next key\n    }\n  }\n\n  // Parse decrypted .env string\n  return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n  console.log(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n  console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _log (message) {\n  console.log(`[dotenv@${version}] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n  // prioritize developer directly setting options.DOTENV_KEY\n  if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n    return options.DOTENV_KEY\n  }\n\n  // secondary infra already contains a DOTENV_KEY environment variable\n  if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n    return process.env.DOTENV_KEY\n  }\n\n  // fallback to empty string\n  return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n  // Parse DOTENV_KEY. Format is a URI\n  let uri\n  try {\n    uri = new URL(dotenvKey)\n  } catch (error) {\n    if (error.code === 'ERR_INVALID_URL') {\n      const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n      err.code = 'INVALID_DOTENV_KEY'\n      throw err\n    }\n\n    throw error\n  }\n\n  // Get decrypt key\n  const key = uri.password\n  if (!key) {\n    const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n    err.code = 'INVALID_DOTENV_KEY'\n    throw err\n  }\n\n  // Get environment\n  const environment = uri.searchParams.get('environment')\n  if (!environment) {\n    const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n    err.code = 'INVALID_DOTENV_KEY'\n    throw err\n  }\n\n  // Get ciphertext payload\n  const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n  const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n  if (!ciphertext) {\n    const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n    err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n    throw err\n  }\n\n  return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n  let possibleVaultPath = null\n\n  if (options && options.path && options.path.length > 0) {\n    if (Array.isArray(options.path)) {\n      for (const filepath of options.path) {\n        if (fs.existsSync(filepath)) {\n          possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n        }\n      }\n    } else {\n      possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n    }\n  } else {\n    possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n  }\n\n  if (fs.existsSync(possibleVaultPath)) {\n    return possibleVaultPath\n  }\n\n  return null\n}\n\nfunction _resolveHome (envPath) {\n  return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n  const debug = Boolean(options && options.debug)\n  const quiet = options && 'quiet' in options ? options.quiet : true\n\n  if (debug || !quiet) {\n    _log('Loading env from encrypted .env.vault')\n  }\n\n  const parsed = DotenvModule._parseVault(options)\n\n  let processEnv = process.env\n  if (options && options.processEnv != null) {\n    processEnv = options.processEnv\n  }\n\n  DotenvModule.populate(processEnv, parsed, options)\n\n  return { parsed }\n}\n\nfunction configDotenv (options) {\n  const dotenvPath = path.resolve(process.cwd(), '.env')\n  let encoding = 'utf8'\n  const debug = Boolean(options && options.debug)\n  const quiet = options && 'quiet' in options ? options.quiet : true\n\n  if (options && options.encoding) {\n    encoding = options.encoding\n  } else {\n    if (debug) {\n      _debug('No encoding is specified. UTF-8 is used by default')\n    }\n  }\n\n  let optionPaths = [dotenvPath] // default, look for .env\n  if (options && options.path) {\n    if (!Array.isArray(options.path)) {\n      optionPaths = [_resolveHome(options.path)]\n    } else {\n      optionPaths = [] // reset default\n      for (const filepath of options.path) {\n        optionPaths.push(_resolveHome(filepath))\n      }\n    }\n  }\n\n  // Build the parsed data in a temporary object (because we need to return it).  Once we have the final\n  // parsed data, we will combine it with process.env (or options.processEnv if provided).\n  let lastError\n  const parsedAll = {}\n  for (const path of optionPaths) {\n    try {\n      // Specifying an encoding returns a string instead of a buffer\n      const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n      DotenvModule.populate(parsedAll, parsed, options)\n    } catch (e) {\n      if (debug) {\n        _debug(`Failed to load ${path} ${e.message}`)\n      }\n      lastError = e\n    }\n  }\n\n  let processEnv = process.env\n  if (options && options.processEnv != null) {\n    processEnv = options.processEnv\n  }\n\n  DotenvModule.populate(processEnv, parsedAll, options)\n\n  if (debug || !quiet) {\n    const keysCount = Object.keys(parsedAll).length\n    const shortPaths = []\n    for (const filePath of optionPaths) {\n      try {\n        const relative = path.relative(process.cwd(), filePath)\n        shortPaths.push(relative)\n      } catch (e) {\n        if (debug) {\n          _debug(`Failed to load ${filePath} ${e.message}`)\n        }\n        lastError = e\n      }\n    }\n\n    _log(`injecting env (${keysCount}) from ${shortPaths.join(',')}`)\n  }\n\n  if (lastError) {\n    return { parsed: parsedAll, error: lastError }\n  } else {\n    return { parsed: parsedAll }\n  }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n  // fallback to original dotenv if DOTENV_KEY is not set\n  if (_dotenvKey(options).length === 0) {\n    return DotenvModule.configDotenv(options)\n  }\n\n  const vaultPath = _vaultPath(options)\n\n  // dotenvKey exists but .env.vault file does not exist\n  if (!vaultPath) {\n    _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n    return DotenvModule.configDotenv(options)\n  }\n\n  return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n  const key = Buffer.from(keyStr.slice(-64), 'hex')\n  let ciphertext = Buffer.from(encrypted, 'base64')\n\n  const nonce = ciphertext.subarray(0, 12)\n  const authTag = ciphertext.subarray(-16)\n  ciphertext = ciphertext.subarray(12, -16)\n\n  try {\n    const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n    aesgcm.setAuthTag(authTag)\n    return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n  } catch (error) {\n    const isRange = error instanceof RangeError\n    const invalidKeyLength = error.message === 'Invalid key length'\n    const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n    if (isRange || invalidKeyLength) {\n      const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n      err.code = 'INVALID_DOTENV_KEY'\n      throw err\n    } else if (decryptionFailed) {\n      const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n      err.code = 'DECRYPTION_FAILED'\n      throw err\n    } else {\n      throw error\n    }\n  }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n  const debug = Boolean(options && options.debug)\n  const override = Boolean(options && options.override)\n\n  if (typeof parsed !== 'object') {\n    const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n    err.code = 'OBJECT_REQUIRED'\n    throw err\n  }\n\n  // Set process.env\n  for (const key of Object.keys(parsed)) {\n    if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n      if (override === true) {\n        processEnv[key] = parsed[key]\n      }\n\n      if (debug) {\n        if (override === true) {\n          _debug(`\"${key}\" is already defined and WAS overwritten`)\n        } else {\n          _debug(`\"${key}\" is already defined and was NOT overwritten`)\n        }\n      }\n    } else {\n      processEnv[key] = parsed[key]\n    }\n  }\n}\n\nconst DotenvModule = {\n  configDotenv,\n  _configVault,\n  _parseVault,\n  config,\n  decrypt,\n  parse,\n  populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n", "/**\n * Help the developer store the CONVEX_URL environment variable.\n */\nimport { chalkStderr } from \"chalk\";\nimport * as dotenv from \"dotenv\";\n\nimport { Context } from \"../../bundler/context.js\";\nimport { logWarning } from \"../../bundler/log.js\";\nimport { loadPackageJson } from \"./utils/utils.js\";\n\nconst _FRAMEWORKS = [\n  \"create-react-app\",\n  \"Next.js\",\n  \"Vite\",\n  \"Remix\",\n  \"SvelteKit\",\n  \"Expo\",\n  \"TanStackStart\",\n] as const;\ntype Framework = (typeof _FRAMEWORKS)[number];\n\n/**\n * A configuration for writing the actual (framework specific) `CONVEX_URL`\n * and `CONVEX_SITE_URL` environment variables to a \".env\" type file.\n *\n * May be `null` if there was an error determining any of the field values.\n */\ntype EnvFileUrlConfig = {\n  /** The name of the file - typically `.env.local` */\n  envFile: string;\n  /**\n   * The framework specific `CONVEX_URL`\n   *\n   * If `null`, ignore and don't update that environment variable.\n   */\n  convexUrlEnvVar: string | null;\n  /**\n   * The framework specific `CONVEX_SITE_URL`\n   *\n   * If `null`, ignore and don't update that environment variable.\n   */\n  siteUrlEnvVar: string | null;\n  /** Existing content loaded from the `envFile`, if it exists */\n  existingFileContent: string | null;\n} | null;\n\nexport async function writeUrlsToEnvFile(\n  ctx: Context,\n  options: {\n    convexUrl: string;\n    siteUrl?: string | null | undefined;\n  },\n): Promise<EnvFileUrlConfig> {\n  const envFileConfig = await loadEnvFileUrlConfig(ctx, options);\n\n  if (envFileConfig === null) {\n    return null;\n  }\n\n  const { envFile, convexUrlEnvVar, siteUrlEnvVar, existingFileContent } =\n    envFileConfig;\n  let updatedFileContent: string | null = null;\n  if (convexUrlEnvVar) {\n    updatedFileContent = changedEnvVarFile({\n      existingFileContent,\n      envVarName: convexUrlEnvVar,\n      envVarValue: options.convexUrl,\n      commentAfterValue: null,\n      commentOnPreviousLine: null,\n    })!;\n  }\n  if (siteUrlEnvVar && options.siteUrl) {\n    updatedFileContent = changedEnvVarFile({\n      existingFileContent: updatedFileContent ?? existingFileContent,\n      envVarName: siteUrlEnvVar,\n      envVarValue: options.siteUrl,\n      commentAfterValue: null,\n      commentOnPreviousLine: null,\n    })!;\n  }\n  if (updatedFileContent) {\n    ctx.fs.writeUtf8File(envFile, updatedFileContent);\n  }\n\n  return envFileConfig;\n}\n\nexport function changedEnvVarFile({\n  existingFileContent,\n  envVarName,\n  envVarValue,\n  commentAfterValue,\n  commentOnPreviousLine,\n}: {\n  existingFileContent: string | null;\n  envVarName: string;\n  envVarValue: string;\n  commentAfterValue: string | null;\n  commentOnPreviousLine: string | null;\n}): string | null {\n  const varAssignment = `${envVarName}=${envVarValue}${\n    commentAfterValue === null ? \"\" : ` # ${commentAfterValue}`\n  }`;\n  const commentOnPreviousLineWithLineBreak =\n    commentOnPreviousLine === null ? \"\" : `${commentOnPreviousLine}\\n`;\n  if (existingFileContent === null) {\n    return `${commentOnPreviousLineWithLineBreak}${varAssignment}\\n`;\n  }\n  const config = dotenv.parse(existingFileContent);\n  const existing = config[envVarName];\n  if (existing === envVarValue) {\n    return null;\n  }\n  if (existing !== undefined) {\n    return existingFileContent.replace(\n      getEnvVarRegex(envVarName),\n      `${varAssignment}`,\n    );\n  } else {\n    const doubleLineBreak = existingFileContent.endsWith(\"\\n\") ? \"\\n\" : \"\\n\\n\";\n    return (\n      existingFileContent +\n      doubleLineBreak +\n      commentOnPreviousLineWithLineBreak +\n      varAssignment +\n      \"\\n\"\n    );\n  }\n}\n\nexport function getEnvVarRegex(envVarName: string) {\n  return new RegExp(`^${envVarName}.*$`, \"m\");\n}\n\nexport async function suggestedEnvVarNames(ctx: Context): Promise<{\n  detectedFramework?: Framework;\n  convexUrlEnvVar: ConvexUrlEnvVar;\n  convexSiteEnvVar: ConvexSiteUrlEnvVar;\n  frontendDevUrl?: string;\n  publicPrefix?: string;\n}> {\n  // no package.json, that's fine, just guess\n  if (!ctx.fs.exists(\"package.json\")) {\n    return {\n      convexUrlEnvVar: \"CONVEX_URL\",\n      convexSiteEnvVar: \"CONVEX_SITE_URL\",\n    };\n  }\n\n  const packages = await loadPackageJson(ctx);\n\n  // Is it create-react-app?\n  const isCreateReactApp = \"react-scripts\" in packages;\n  if (isCreateReactApp) {\n    return {\n      detectedFramework: \"create-react-app\",\n      convexUrlEnvVar: \"REACT_APP_CONVEX_URL\",\n      convexSiteEnvVar: \"REACT_APP_CONVEX_SITE_URL\",\n      frontendDevUrl: \"http://localhost:3000\",\n      publicPrefix: \"REACT_APP_\",\n    };\n  }\n\n  const isNextJs = \"next\" in packages;\n  if (isNextJs) {\n    return {\n      detectedFramework: \"Next.js\",\n      convexUrlEnvVar: \"NEXT_PUBLIC_CONVEX_URL\",\n      convexSiteEnvVar: \"NEXT_PUBLIC_CONVEX_SITE_URL\",\n      frontendDevUrl: \"http://localhost:3000\",\n      publicPrefix: \"NEXT_PUBLIC_\",\n    };\n  }\n\n  const isExpo = \"expo\" in packages;\n  if (isExpo) {\n    return {\n      detectedFramework: \"Expo\",\n      convexUrlEnvVar: \"EXPO_PUBLIC_CONVEX_URL\",\n      convexSiteEnvVar: \"EXPO_PUBLIC_CONVEX_SITE_URL\",\n      publicPrefix: \"EXPO_PUBLIC_\",\n    };\n  }\n\n  const isSvelteKit = \"@sveltejs/kit\" in packages;\n  if (isSvelteKit) {\n    return {\n      detectedFramework: \"SvelteKit\",\n      convexUrlEnvVar: \"PUBLIC_CONVEX_URL\",\n      convexSiteEnvVar: \"PUBLIC_CONVEX_SITE_URL\",\n      frontendDevUrl: \"http://localhost:5173\",\n      publicPrefix: \"PUBLIC_\",\n    };\n  }\n\n  // TanStackStart currently supports VITE_FOO for browser-side envvars.\n  const isTanStackStart =\n    \"@tanstack/start\" in packages || \"@tanstack/react-start\" in packages;\n\n  if (isTanStackStart) {\n    return {\n      detectedFramework: \"TanStackStart\",\n      convexUrlEnvVar: \"VITE_CONVEX_URL\",\n      convexSiteEnvVar: \"VITE_CONVEX_SITE_URL\",\n      frontendDevUrl: \"http://localhost:3000\",\n      publicPrefix: \"VITE_\",\n    };\n  }\n\n  // Vite is a dependency of a lot of things; vite appearing in dependencies is not a strong indicator.\n  const isVite = \"vite\" in packages;\n\n  if (isVite) {\n    return {\n      detectedFramework: \"Vite\",\n      convexUrlEnvVar: \"VITE_CONVEX_URL\",\n      convexSiteEnvVar: \"VITE_CONVEX_SITE_URL\",\n      frontendDevUrl: \"http://localhost:5173\",\n      publicPrefix: \"VITE_\",\n    };\n  }\n\n  // We detect Remix after Vite because when using Remix as a plugin of Vite\n  // (Remix Vite), we want to use Vite-style environment variables.\n  const isRemix = \"@remix-run/dev\" in packages;\n  if (isRemix) {\n    return {\n      detectedFramework: \"Remix\",\n      convexUrlEnvVar: \"CONVEX_URL\",\n      convexSiteEnvVar: \"CONVEX_SITE_URL\",\n      frontendDevUrl: \"http://localhost:3000\",\n    };\n  }\n\n  return {\n    convexUrlEnvVar: \"CONVEX_URL\",\n    convexSiteEnvVar: \"CONVEX_SITE_URL\",\n  };\n}\n\nasync function loadEnvFileUrlConfig(\n  ctx: Context,\n  options: {\n    convexUrl: string;\n    siteUrl?: string | null | undefined;\n  },\n): Promise<EnvFileUrlConfig> {\n  const { detectedFramework, convexUrlEnvVar, convexSiteEnvVar } =\n    await suggestedEnvVarNames(ctx);\n\n  const { envFile, existing } = suggestedDevEnvFile(ctx, detectedFramework);\n\n  if (!existing) {\n    return {\n      envFile,\n      convexUrlEnvVar,\n      siteUrlEnvVar: convexSiteEnvVar,\n      existingFileContent: null,\n    };\n  }\n\n  const existingFileContent = ctx.fs.readUtf8File(envFile);\n  const config = dotenv.parse(existingFileContent);\n\n  const resolvedConvexUrlEnvVar = resolveEnvVarName(\n    convexUrlEnvVar,\n    options.convexUrl,\n    envFile,\n    config,\n    EXPECTED_CONVEX_URL_NAMES,\n  );\n  const resolvedSiteUrlEnvVar = resolveEnvVarName(\n    convexSiteEnvVar,\n    options.siteUrl ?? \"\",\n    envFile,\n    config,\n    EXPECTED_SITE_URL_NAMES,\n  );\n  if (\n    resolvedConvexUrlEnvVar.kind === \"invalid\" ||\n    resolvedSiteUrlEnvVar.kind === \"invalid\"\n  ) {\n    return null;\n  }\n  return {\n    envFile,\n    convexUrlEnvVar: resolvedConvexUrlEnvVar.envVarName,\n    siteUrlEnvVar: resolvedSiteUrlEnvVar.envVarName,\n    existingFileContent,\n  };\n}\n\nfunction resolveEnvVarName(\n  envVarName: string,\n  envVarValue: string,\n  envFile: string,\n  config: dotenv.DotenvParseOutput,\n  expectedNames: Set<string>,\n):\n  | {\n      kind: \"invalid\";\n    }\n  | {\n      kind: \"valid\";\n      envVarName: string | null;\n    } {\n  const matching = Object.keys(config).filter((key) => expectedNames.has(key));\n  if (matching.length > 1) {\n    logWarning(\n      chalkStderr.yellow(\n        `Found multiple ${envVarName} environment variables in ${envFile} so cannot update automatically.`,\n      ),\n    );\n    return { kind: \"invalid\" };\n  }\n  if (matching.length === 1) {\n    const [existingEnvVarName, oldValue] = [matching[0], config[matching[0]]];\n    if (oldValue === envVarValue) {\n      // Set envVarName to null to indicate that it shouldn't be updated.\n      return { kind: \"valid\", envVarName: null };\n    }\n    if (\n      oldValue !== \"\" &&\n      Object.values(config).filter((v) => v === oldValue).length !== 1\n    ) {\n      logWarning(\n        chalkStderr.yellow(\n          `Can't safely modify ${envFile} for ${envVarName}, please edit manually.`,\n        ),\n      );\n      return { kind: \"invalid\" };\n    }\n    return { kind: \"valid\", envVarName: existingEnvVarName };\n  }\n  return { kind: \"valid\", envVarName };\n}\n\nfunction suggestedDevEnvFile(\n  ctx: Context,\n  framework?: Framework,\n): {\n  existing: boolean;\n  envFile: string;\n} {\n  // If a .env.local file exists, that's unequivocally the right file\n  if (ctx.fs.exists(\".env.local\")) {\n    return {\n      existing: true,\n      envFile: \".env.local\",\n    };\n  }\n\n  // Remix is on team \"don't commit the .env file,\" so .env is for dev.\n  if (framework === \"Remix\") {\n    return {\n      existing: ctx.fs.exists(\".env\"),\n      envFile: \".env\",\n    };\n  }\n\n  // The most dev-looking env file that exists, or .env.local\n  return {\n    existing: ctx.fs.exists(\".env.local\"),\n    envFile: \".env.local\",\n  };\n}\n\nexport const EXPECTED_CONVEX_URL_NAMES = new Set([\n  \"CONVEX_URL\" as const,\n  \"PUBLIC_CONVEX_URL\" as const,\n  \"NEXT_PUBLIC_CONVEX_URL\" as const,\n  \"VITE_CONVEX_URL\" as const,\n  \"REACT_APP_CONVEX_URL\" as const,\n  \"EXPO_PUBLIC_CONVEX_URL\" as const,\n]);\ntype ConvexUrlEnvVar =\n  typeof EXPECTED_CONVEX_URL_NAMES extends Set<infer T> ? T : never;\n\nexport const EXPECTED_SITE_URL_NAMES = new Set([\n  \"CONVEX_SITE_URL\" as const,\n  \"PUBLIC_CONVEX_SITE_URL\" as const,\n  \"NEXT_PUBLIC_CONVEX_SITE_URL\" as const,\n  \"VITE_CONVEX_SITE_URL\" as const,\n  \"REACT_APP_CONVEX_SITE_URL\" as const,\n  \"EXPO_PUBLIC_CONVEX_SITE_URL\" as const,\n]);\ntype ConvexSiteUrlEnvVar =\n  typeof EXPECTED_SITE_URL_NAMES extends Set<infer T> ? T : never;\n\n// Crash or warn on\n// CONVEX_DEPLOY_KEY=project:me:new-project|eyABCD0= npx convex\n// which parses as\n// CONVEX_DEPLOY_KEY=project:me:new-project | eyABCD0='' npx convex\n// when what was intended was\n// CONVEX_DEPLOY_KEY=project:me:new-project|eyABCD0= npx convex\n// This only fails so catastrophically when the key ends with `=`.\nexport async function detectSuspiciousEnvironmentVariables(\n  ctx: Context,\n  ignoreSuspiciousEnvVars = false,\n) {\n  for (const [key, value] of Object.entries(process.env)) {\n    if (value === \"\" && key.startsWith(\"ey\")) {\n      try {\n        // add a \"=\" to the end and try to base64 decode (expected format of Convex keys)\n        const decoded = JSON.parse(\n          Buffer.from(key + \"=\", \"base64\").toString(\"utf8\"),\n        );\n        // Only parseable v2 tokens to be sure this is a Convex token before complaining.\n        if (!(\"v2\" in decoded)) {\n          continue;\n        }\n      } catch {\n        continue;\n      }\n\n      if (ignoreSuspiciousEnvVars) {\n        logWarning(\n          `ignoring suspicious environment variable ${key}, did you mean to use quotes like CONVEX_DEPLOY_KEY='...'?`,\n        );\n      } else {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Quotes are required around environment variable values by your shell: CONVEX_DEPLOY_KEY='project:name:project|${key.slice(0, 4)}...${key.slice(key.length - 4)}=' npx convex dev`,\n        });\n      }\n    }\n  }\n}\n\nexport function getBuildEnvironment(): string | false {\n  return process.env.VERCEL\n    ? \"Vercel\"\n    : process.env.NETLIFY\n      ? \"Netlify\"\n      : process.env.CF_PAGES || process.env.WORKERS_CI\n        ? \"Cloudflare\"\n        : false;\n}\n\nexport function getDefaultDeployMessage(): string | null {\n  const platforms: Array<{\n    name: string;\n    detect: () => boolean;\n    commitShaVar: string;\n  }> = [\n    {\n      name: \"GitHub Actions\",\n      detect: () => !!process.env.GITHUB_ACTIONS,\n      commitShaVar: \"GITHUB_SHA\",\n    },\n    {\n      name: \"Vercel\",\n      detect: () => !!process.env.VERCEL,\n      commitShaVar: \"VERCEL_GIT_COMMIT_SHA\",\n    },\n    {\n      name: \"Netlify\",\n      detect: () => !!process.env.NETLIFY,\n      commitShaVar: \"COMMIT_REF\",\n    },\n    {\n      name: \"Cloudflare Pages\",\n      detect: () => !!process.env.CF_PAGES,\n      commitShaVar: \"CF_PAGES_COMMIT_SHA\",\n    },\n    {\n      name: \"Cloudflare Workers\",\n      detect: () => !!process.env.WORKERS_CI,\n      commitShaVar: \"WORKERS_CI_COMMIT_SHA\",\n    },\n    {\n      name: \"Render\",\n      detect: () => !!process.env.RENDER,\n      commitShaVar: \"RENDER_GIT_COMMIT\",\n    },\n    {\n      name: \"Railway\",\n      detect: () => !!process.env.RAILWAY_ENVIRONMENT,\n      commitShaVar: \"RAILWAY_GIT_COMMIT_SHA\",\n    },\n    {\n      name: \"GitLab CI\",\n      detect: () => !!process.env.GITLAB_CI,\n      commitShaVar: \"CI_COMMIT_SHA\",\n    },\n    {\n      name: \"CircleCI\",\n      detect: () => !!process.env.CIRCLECI,\n      commitShaVar: \"CIRCLE_SHA1\",\n    },\n    {\n      name: \"Google Cloud Build\",\n      detect: () =>\n        !!process.env.BUILD_ID &&\n        !!process.env.PROJECT_ID &&\n        !!process.env.PROJECT_NUMBER &&\n        !!process.env.LOCATION,\n      commitShaVar: \"SHORT_SHA\",\n    },\n    {\n      name: \"Heroku\",\n      detect: () => !!process.env.HEROKU_APP_NAME || !!process.env.DYNO,\n      commitShaVar: \"HEROKU_BUILD_COMMIT\",\n    },\n  ];\n\n  const platform = platforms.find((p) => p.detect());\n  if (!platform) {\n    return null;\n  }\n\n  const commitSha = process.env[platform.commitShaVar];\n  if (!commitSha) {\n    return `Deployed from ${platform.name}`;\n  }\n\n  const shortSha = commitSha.slice(0, 7);\n  return `Deployed from ${platform.name} \u2022 ${shortSha}`;\n}\n\nexport function gitBranchFromEnvironment(): string | null {\n  if (process.env.VERCEL) {\n    // https://vercel.com/docs/projects/environment-variables/system-environment-variables\n    return process.env.VERCEL_GIT_COMMIT_REF ?? null;\n  }\n  if (process.env.NETLIFY) {\n    // https://docs.netlify.com/configure-builds/environment-variables/\n    return process.env.HEAD ?? null;\n  }\n  if (process.env.CF_PAGES || process.env.WORKERS_CI) {\n    // https://developers.cloudflare.com/pages/configuration/build-configuration/#environment-variables\n    // https://developers.cloudflare.com/workers/ci-cd/builds/configuration/#environment-variables\n    return process.env.CF_PAGES_BRANCH ?? process.env.WORKERS_CI_BRANCH ?? null;\n  }\n\n  if (process.env.CI) {\n    // https://docs.github.com/en/actions/learn-github-actions/variables\n    // https://docs.gitlab.com/ee/ci/variables/predefined_variables.html\n    return (\n      process.env.GITHUB_HEAD_REF ?? process.env.CI_COMMIT_REF_NAME ?? null\n    );\n  }\n\n  return null;\n}\n\nexport function isNonProdBuildEnvironment(): boolean {\n  if (process.env.VERCEL) {\n    // https://vercel.com/docs/projects/environment-variables/system-environment-variables\n    return process.env.VERCEL_ENV !== \"production\";\n  }\n  if (process.env.NETLIFY) {\n    // https://docs.netlify.com/configure-builds/environment-variables/\n    return process.env.CONTEXT !== \"production\";\n  }\n  if (process.env.CF_PAGES || process.env.WORKERS_CI) {\n    // https://developers.cloudflare.com/pages/configuration/build-configuration/#environment-variables\n    // https://developers.cloudflare.com/workers/ci-cd/builds/configuration/#environment-variables\n    // Branch !== \"main\" is the closest heuristic; Cloudflare Pages\n    // does not expose a dedicated production/preview flag.\n    const branch = process.env.CF_PAGES_BRANCH ?? process.env.WORKERS_CI_BRANCH;\n    return branch !== \"main\";\n  }\n  return false;\n}\n", "import * as dotenv from \"dotenv\";\nimport { Context } from \"../../bundler/context.js\";\nimport { changedEnvVarFile, getEnvVarRegex } from \"./envvars.js\";\nimport {\n  CONVEX_DEPLOY_KEY_ENV_VAR_NAME,\n  CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n  ENV_VAR_FILE_PATH,\n} from \"./utils/utils.js\";\nimport { DeploymentType } from \"./api.js\";\n\n// Given a deployment string like \"dev:tall-forest-1234\"\n// returns only the slug \"tall-forest-1234\".\n// If there's no prefix returns the original string.\nexport function stripDeploymentTypePrefix(deployment: string) {\n  return deployment.split(\":\").at(-1)!;\n}\n\n// Handling legacy CONVEX_DEPLOYMENT without type prefix as well\nexport function getDeploymentTypeFromConfiguredDeployment(raw: string) {\n  const typeRaw = raw.split(\":\")[0];\n  const type =\n    typeRaw === \"prod\" ||\n    typeRaw === \"dev\" ||\n    typeRaw === \"preview\" ||\n    typeRaw === \"local\"\n      ? typeRaw\n      : null;\n  return type;\n}\n\nexport function isAnonymousDeployment(deploymentName: string) {\n  return deploymentName.startsWith(\"anonymous-\");\n}\n\nexport function removeAnonymousPrefix(deploymentName: string) {\n  if (isAnonymousDeployment(deploymentName)) {\n    return deploymentName.slice(\"anonymous-\".length);\n  }\n  return deploymentName;\n}\n\nexport async function writeDeploymentEnvVar(\n  ctx: Context,\n  deploymentType: DeploymentType,\n  deployment: {\n    team: string | null;\n    project: string | null;\n    deploymentName: string;\n  },\n  existingValue: string | null,\n): Promise<{ wroteToGitIgnore: boolean; changedDeploymentEnvVar: boolean }> {\n  const existingFile = ctx.fs.exists(ENV_VAR_FILE_PATH)\n    ? ctx.fs.readUtf8File(ENV_VAR_FILE_PATH)\n    : null;\n  const changedFile = changesToEnvVarFile(\n    existingFile,\n    deploymentType,\n    deployment,\n  );\n  const deploymentEnvVarValue =\n    deploymentType + \":\" + deployment.deploymentName;\n  // The `existingValue` that reaches this function is at least sometimes is missing its prefix.\n  // Until this is cleaned up consider either of these values not a change.\n  // Otherwise we spam the init instructions (Welcome to Convex etc.) on every run of `npx convex dev`.\n  const changedDeploymentEnvVar =\n    !!changedFile &&\n    existingValue !== deployment.deploymentName &&\n    existingValue !== deploymentEnvVarValue;\n\n  if (changedFile !== null) {\n    ctx.fs.writeUtf8File(ENV_VAR_FILE_PATH, changedFile);\n    // Only do this if we're not reinitializing an existing setup\n    return {\n      wroteToGitIgnore: await gitIgnoreEnvVarFile(ctx),\n      changedDeploymentEnvVar,\n    };\n  }\n  return {\n    wroteToGitIgnore: false,\n    changedDeploymentEnvVar,\n  };\n}\n\n// Only used in the internal --url flow\nexport async function eraseDeploymentEnvVar(ctx: Context): Promise<boolean> {\n  const existingFile = ctx.fs.exists(ENV_VAR_FILE_PATH)\n    ? ctx.fs.readUtf8File(ENV_VAR_FILE_PATH)\n    : null;\n  if (existingFile === null) {\n    return false;\n  }\n  const config = dotenv.parse(existingFile);\n  const existing = config[CONVEX_DEPLOYMENT_ENV_VAR_NAME];\n  if (existing === undefined) {\n    return false;\n  }\n  const changedFile = existingFile.replace(\n    getEnvVarRegex(CONVEX_DEPLOYMENT_ENV_VAR_NAME),\n    \"\",\n  );\n  ctx.fs.writeUtf8File(ENV_VAR_FILE_PATH, changedFile);\n  return true;\n}\n\nasync function gitIgnoreEnvVarFile(ctx: Context): Promise<boolean> {\n  const gitIgnorePath = \".gitignore\";\n  const gitIgnoreContents = ctx.fs.exists(gitIgnorePath)\n    ? ctx.fs.readUtf8File(gitIgnorePath)\n    : \"\";\n  const changedGitIgnore = changesToGitIgnore(gitIgnoreContents);\n  if (changedGitIgnore !== null) {\n    ctx.fs.writeUtf8File(gitIgnorePath, changedGitIgnore);\n    return true;\n  }\n  return false;\n}\n\n// exported for tests\nexport function changesToEnvVarFile(\n  existingFile: string | null,\n  deploymentType: DeploymentType,\n  {\n    team,\n    project,\n    deploymentName,\n  }: { team: string | null; project: string | null; deploymentName: string },\n): string | null {\n  const deploymentValue = deploymentType + \":\" + deploymentName;\n  const commentOnPreviousLine = \"# Deployment used by `npx convex dev`\";\n  const commentAfterValue =\n    team !== null && project !== null\n      ? `team: ${team}, project: ${project}`\n      : null;\n  return changedEnvVarFile({\n    existingFileContent: existingFile,\n    envVarName: CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n    envVarValue: deploymentValue,\n    commentAfterValue,\n    commentOnPreviousLine,\n  });\n}\n\n// exported for tests\nexport function changesToGitIgnore(existingFile: string | null): string | null {\n  if (existingFile === null) {\n    return `${ENV_VAR_FILE_PATH}\\n`;\n  }\n  const gitIgnoreLines = existingFile.split(\"\\n\");\n  const envVarFileIgnored = gitIgnoreLines.some((line) => {\n    if (line.startsWith(\"#\")) return false;\n    if (line.startsWith(\"!\")) return false;\n\n    // .gitignore ignores trailing whitespace, and also we need to remove\n    // the trailing `\\r` from Windows-style newline since we split on `\\n`.\n    const trimmedLine = line.trimEnd();\n\n    const envIgnorePatterns = [\n      /^\\.env\\.local$/,\n      /^\\.env\\.\\*$/,\n      /^\\.env\\*$/,\n      /^.*\\.local$/,\n      /^\\.env\\*\\.local$/,\n    ];\n\n    return envIgnorePatterns.some((pattern) => pattern.test(trimmedLine));\n  });\n  if (!envVarFileIgnored) {\n    return `${existingFile}\\n${ENV_VAR_FILE_PATH}\\n`;\n  } else {\n    return null;\n  }\n}\n\nexport async function deploymentNameFromAdminKeyOrCrash(\n  ctx: Context,\n  adminKey: string,\n) {\n  const deploymentName = deploymentNameFromAdminKey(adminKey);\n  if (deploymentName === null) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Please set ${CONVEX_DEPLOY_KEY_ENV_VAR_NAME} to a new key which you can find on your Convex dashboard.`,\n    });\n  }\n  return deploymentName;\n}\n\nfunction deploymentNameFromAdminKey(adminKey: string) {\n  const parts = adminKey.split(\"|\");\n  if (parts.length === 1) {\n    return null;\n  }\n  if (isPreviewDeployKey(adminKey)) {\n    // Preview deploy keys do not contain a deployment name.\n    return null;\n  }\n  return stripDeploymentTypePrefix(parts[0]);\n}\n\n// Needed to differentiate a preview deploy key\n// from a concrete preview deployment's deploy key.\n// preview deploy key: `preview:team:project|key`\n// preview deployment's deploy key: `preview:deploymentName|key`\nexport function isPreviewDeployKey(adminKey: string) {\n  const parts = adminKey.split(\"|\");\n  if (parts.length === 1) {\n    return false;\n  }\n  const [prefix] = parts;\n  const prefixParts = prefix.split(\":\");\n  return prefixParts[0] === \"preview\" && prefixParts.length === 3;\n}\n\nexport function isProjectKey(adminKey: string) {\n  return /^project:.*\\|/.test(adminKey);\n}\n\n// \"dev deploy keys\" and \"prod deploy keys\" are deployment keys.\n// On the client these are also known as admin keys.\nexport function isDeploymentKey(adminKey: string) {\n  return /^(dev|prod):.*\\|/.test(adminKey);\n}\n\n// For current keys returns prod|dev|preview,\n// for legacy keys returns \"prod\".\n// Examples:\n//  \"prod:deploymentName|key\" -> \"prod\"\n//  \"preview:deploymentName|key\" -> \"preview\"\n//  \"dev:deploymentName|key\" -> \"dev\"\n//  \"custom:deploymentName|key\" -> \"custom\"\n//  \"key\" -> \"prod\"\nexport function deploymentTypeFromAdminKey(adminKey: string) {\n  const parts = adminKey.split(\":\");\n  if (parts.length === 1) {\n    return \"prod\";\n  }\n  return parts.at(0)! as DeploymentType;\n}\n\nexport async function getTeamAndProjectFromPreviewAdminKey(\n  ctx: Context,\n  adminKey: string,\n) {\n  const parts = adminKey.split(\"|\")[0].split(\":\");\n  if (parts.length !== 3) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"Malformed preview CONVEX_DEPLOY_KEY, get a new key from Project Settings.\",\n    });\n  }\n  const [_preview, teamSlug, projectSlug] = parts;\n  return { teamSlug, projectSlug };\n}\n\nexport type CleanupDeploymentFunc = () => Promise<void>;\nexport type DeploymentDetails = {\n  deploymentName: string;\n  deploymentUrl: string;\n  adminKey: string;\n  reference: string | null;\n  isDefault: boolean;\n};\n", "import { chalkStderr } from \"chalk\";\nimport path from \"path\";\n// eslint-disable-next-line no-restricted-imports\nimport { promises as nodeFs } from \"fs\";\nimport { z } from \"zod\";\nimport { Context } from \"../../bundler/context.js\";\nimport { TypescriptCompiler } from \"./typecheck.js\";\nimport {\n  changeSpinner,\n  logError,\n  logFailure,\n  logFinishedStep,\n  logMessage,\n  logWarning,\n  showSpinner,\n} from \"../../bundler/log.js\";\nimport {\n  Bundle,\n  BundleHash,\n  bundle,\n  bundleAuthConfig,\n  entryPointsByEnvironment,\n} from \"../../bundler/index.js\";\nimport { version } from \"../version.js\";\nimport { deploymentDashboardUrlPage } from \"./dashboard.js\";\nimport {\n  functionsDir,\n  ErrorData,\n  loadPackageJson,\n  deploymentFetch,\n  deprecationCheckWarning,\n  logAndHandleFetchError,\n  ThrowingFetchError,\n  currentPackageHomepage,\n} from \"./utils/utils.js\";\nimport { recursivelyDelete } from \"./fsUtils.js\";\nimport { NodeDependency } from \"./deployApi/modules.js\";\nimport { ComponentDefinitionPath } from \"./components/definition/directoryStructure.js\";\nimport {\n  LocalDeploymentError,\n  printLocalDeploymentOnError,\n} from \"./localDeployment/errors.js\";\nimport { debugIsolateBundlesSerially } from \"../../bundler/debugBundle.js\";\nimport { DeploymentType } from \"./api.js\";\nimport { isAnonymousDeployment } from \"./deployment.js\";\nexport { productionProvisionHost, provisionHost } from \"./utils/utils.js\";\n\n/** Type representing WorkOS AuthKit integration configuration. */\nexport interface AuthKitConfigureSettings {\n  redirectUris?: string[];\n  appHomepageUrl?: string;\n  corsOrigins?: string[];\n}\n\nexport interface AuthKitEnvironmentConfig {\n  environmentType?: \"development\" | \"staging\" | \"production\";\n  configure?: false | AuthKitConfigureSettings;\n  localEnvVars?: false | Record<string, string>;\n}\n\nexport interface AuthKitConfig {\n  dev?: AuthKitEnvironmentConfig;\n  preview?: AuthKitEnvironmentConfig;\n  prod?: AuthKitEnvironmentConfig;\n}\n/**\n * convex.json file parsing notes\n *\n * - Unknown fields at the top level and in node and codegen are preserved\n *   so that older CLI versions can deploy new projects (this functionality\n *   will be removed in the future).\n * - convex.json does not allow comments, but this could change in the future.\n *   Previously it contained automatically set values like productionUrl\n *   but it's more like a config file now.\n */\n\n/** Type representing Convex project configuration. */\nexport interface ProjectConfig {\n  // \u26A0\uFE0F When updating this, please also update the file used by IDEs for autocompletion and validation:\n  // -> npm-packages/convex/schemas/convex.schema.json\n\n  functions: string;\n  node: {\n    externalPackages: string[];\n    // nodeVersion has no default value, its presence/absence is meaningful\n    nodeVersion?: string | undefined;\n  };\n  generateCommonJSApi: boolean;\n\n  codegen: {\n    staticApi: boolean;\n    staticDataModel: boolean;\n    legacyComponentApi?: boolean;\n    fileType?: \"ts\" | \"js/dts\";\n  };\n\n  bundler?: {\n    includeSourcesContent?: boolean;\n  };\n\n  typescriptCompiler?: TypescriptCompiler;\n\n  // WorkOS AuthKit integration configuration\n  authKit?: AuthKitConfig | undefined;\n\n  // Convex AI files user preferences.\n  aiFiles?: {\n    // When false, disables all AI files prompts and staleness messages.\n    enabled?: boolean;\n    // @deprecated use `enabled` instead.\n    disableStalenessMessage?: boolean;\n    // Configuration for agent skills installed by Convex.\n    skills?: {\n      // List of agents to install skills for (e.g. 'claude-code', 'codex', 'cursor').\n      // Defaults to ['claude-code', 'codex'].\n      agents?: string[];\n    };\n  };\n}\n\nexport interface Config {\n  projectConfig: ProjectConfig;\n  modules: Bundle[];\n  nodeDependencies: NodeDependency[];\n  schemaId?: string;\n  udfServerVersion?: string;\n  nodeVersion?: string | undefined;\n}\n\nexport interface ConfigWithModuleHashes {\n  projectConfig: ProjectConfig;\n  moduleHashes: BundleHash[];\n  nodeDependencies: NodeDependency[];\n  schemaId?: string;\n  udfServerVersion?: string;\n}\n\nconst DEFAULT_FUNCTIONS_PATH = \"convex/\";\n\n/** Whether .ts file extensions should be used for generated code (default is false). */\nexport function usesTypeScriptCodegen(projectConfig: ProjectConfig): boolean {\n  return projectConfig.codegen.fileType === \"ts\";\n}\n\n/** Whether the new component API import style should be used */\nexport function usesComponentApiImports(projectConfig: ProjectConfig): boolean {\n  return projectConfig.codegen.legacyComponentApi !== true;\n}\n\n/**\n * Get the authKit configuration from convex.json.\n */\nexport async function getAuthKitConfig(\n  ctx: Context,\n  projectConfig: ProjectConfig,\n): Promise<AuthKitConfig | undefined> {\n  // If there's an explicit authKit config, use it\n  if (\"authKit\" in projectConfig) {\n    return projectConfig.authKit;\n  }\n\n  // TODO remove this after a few versions\n  // Migration help: is this one of the hardcoded templates that has special\n  // behavior without a convex.json? Encourage them to upgrade the template.\n  const homepage = await currentPackageHomepage(ctx);\n  const isOldWorkOSTemplate = !!(\n    homepage &&\n    [\n      \"https://github.com/workos/template-convex-nextjs-authkit/#readme\",\n      \"https://github.com/workos/template-convex-react-vite-authkit/#readme\",\n      \"https://github.com:workos/template-convex-react-vite-authkit/#readme\",\n      \"https://github.com/workos/template-convex-tanstack-start-authkit/#readme\",\n    ].includes(homepage)\n  );\n\n  if (isOldWorkOSTemplate) {\n    logWarning(\n      \"The template this project is based on has been updated to work with this version of Convex.\",\n    );\n    logWarning(\n      \"Please copy the convex.json from the latest template version or add an 'authKit' section.\",\n    );\n    logMessage(\"Learn more at https://docs.convex.dev/auth/authkit\");\n  }\n}\n\nexport async function getAuthKitEnvironmentConfig(\n  ctx: Context,\n  projectConfig: ProjectConfig,\n  deploymentType: \"dev\" | \"preview\" | \"prod\",\n): Promise<AuthKitEnvironmentConfig | undefined> {\n  const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n  return authKitConfig?.[deploymentType];\n}\n\n/** Error parsing ProjectConfig representation. */\nclass ParseError extends Error {}\n\n// WorkOS AuthKit configuration schemas\nconst AuthKitConfigureSchema = z.union([\n  z.literal(false),\n  z.object({\n    redirectUris: z.array(z.string()).optional(),\n    appHomepageUrl: z.string().optional(),\n    corsOrigins: z.array(z.string()).optional(),\n  }),\n]);\n\nconst AuthKitLocalEnvVarsSchema = z.union([\n  z.literal(false),\n  z.record(z.string()),\n]);\n\nconst AuthKitEnvironmentConfigSchema = z.object({\n  environmentType: z.enum([\"development\", \"staging\", \"production\"]).optional(),\n  configure: AuthKitConfigureSchema.optional(),\n  localEnvVars: AuthKitLocalEnvVarsSchema.optional(),\n});\n\nconst AuthKitConfigSchema = z\n  .object({\n    dev: AuthKitEnvironmentConfigSchema.optional(),\n    preview: AuthKitEnvironmentConfigSchema.optional(),\n    prod: AuthKitEnvironmentConfigSchema.optional(),\n  })\n  .refine(\n    (data) => {\n      // Validation: environmentType only allowed in prod\n      const devEnvType = data.dev?.environmentType;\n      const previewEnvType = data.preview?.environmentType;\n      if (devEnvType || previewEnvType) {\n        return false;\n      }\n      return true;\n    },\n    {\n      message: \"authKit.environmentType is only allowed in the prod section\",\n      path: [\"environmentType\"],\n    },\n  )\n  .refine(\n    (data) => {\n      // Validation: localEnvVars only allowed for dev\n      // Check preview doesn't have localEnvVars\n      if (\n        data.preview?.localEnvVars !== undefined &&\n        data.preview?.localEnvVars !== false\n      ) {\n        return false;\n      }\n      // Check prod doesn't have localEnvVars\n      if (\n        data.prod?.localEnvVars !== undefined &&\n        data.prod?.localEnvVars !== false\n      ) {\n        return false;\n      }\n      return true;\n    },\n    {\n      message:\n        \"authKit.localEnvVars is only supported for dev deployments. Preview and prod deployments must configure environment variables directly in the deployment platform.\",\n      path: [\"localEnvVars\"],\n    },\n  );\n// Separate Node and Codegen schemas so we can parse these loose or strict\nconst NodeSchema = z.object({\n  externalPackages: z\n    .array(z.string())\n    .default([])\n    .describe(\n      \"list of npm packages to install at deploy time instead of bundling. Packages with binaries should be added here.\",\n    ),\n  nodeVersion: z\n    .string()\n    .optional()\n    .describe(\"The Node.js version to use for Node.js functions\"),\n});\n\nconst CodegenSchema = z.object({\n  staticApi: z\n    .boolean()\n    .default(false)\n    .describe(\n      \"Use Convex function argument validators and return value validators to generate a typed API object\",\n    ),\n  staticDataModel: z.boolean().default(false),\n  // These optional fields have no defaults - their presence/absence is meaningful\n  legacyComponentApi: z.boolean().optional(),\n  fileType: z.enum([\"ts\", \"js/dts\"]).optional(),\n});\n\nconst BundlerSchema = z.object({\n  includeSourcesContent: z\n    .boolean()\n    .default(false)\n    .describe(\n      \"Whether to include original source code in source maps. Set to false to reduce bundle size.\",\n    ),\n});\n\nconst AiFilesSchema = z.object({\n  enabled: z.boolean().optional(),\n  disableStalenessMessage: z.boolean().optional(),\n  skills: z\n    .object({\n      agents: z.array(z.string()).optional(),\n    })\n    .optional(),\n});\n\nconst refineToObject = <T extends z.ZodTypeAny>(schema: T) =>\n  schema.refine((val) => val !== null && !Array.isArray(val), {\n    message: \"Expected `convex.json` to contain an object\",\n  });\n\n// Factory function to create schema with strict or passthrough behavior\nconst createProjectConfigSchema = (strict: boolean) => {\n  const nodeSchema = strict ? NodeSchema.strict() : NodeSchema.passthrough();\n  const codegenSchema = strict\n    ? CodegenSchema.strict()\n    : CodegenSchema.passthrough();\n  const bundlerSchema = strict\n    ? BundlerSchema.strict()\n    : BundlerSchema.passthrough();\n\n  const baseObject = z.object({\n    functions: z\n      .string()\n      .default(DEFAULT_FUNCTIONS_PATH)\n      .describe(\"Relative file path to the convex directory\"),\n    node: nodeSchema.default({ externalPackages: [] }),\n    codegen: codegenSchema.default({\n      staticApi: false,\n      staticDataModel: false,\n    }),\n    bundler: bundlerSchema.default({ includeSourcesContent: false }).optional(),\n    generateCommonJSApi: z.boolean().default(false),\n    typescriptCompiler: z\n      .enum([\"tsc\", \"tsgo\"])\n      .optional()\n      .describe(\n        \"TypeScript compiler to use for typechecking (`@typescript/native-preview` must be installed to use `tsgo`)\",\n      ),\n\n    // Optional $schema field for JSON schema validation in editors\n    $schema: z.string().optional(),\n    // WorkOS AuthKit integration configuration\n    authKit: AuthKitConfigSchema.optional(),\n    aiFiles: AiFilesSchema.optional(),\n\n    // Deprecated fields that have been deprecated for years, only here so we\n    // know it's safe to delete them.\n    project: z.string().optional(),\n    team: z.string().optional(),\n    prodUrl: z.string().optional(),\n  });\n\n  // Apply strict or passthrough BEFORE refine\n  const withStrictness = strict\n    ? baseObject.strict()\n    : baseObject.passthrough();\n\n  // Now apply the refinement\n  return withStrictness.refine(\n    (data) => {\n      // Validate that generateCommonJSApi is not true when using TypeScript codegen\n      if (data.generateCommonJSApi && data.codegen.fileType === \"ts\") {\n        return false;\n      }\n      return true;\n    },\n    {\n      message:\n        'Cannot use `generateCommonJSApi: true` with `codegen.fileType: \"ts\"`. ' +\n        \"CommonJS modules require JavaScript generation. \" +\n        'Either set `codegen.fileType: \"js/dts\"` or remove `generateCommonJSApi`.',\n      path: [\"generateCommonJSApi\"],\n    },\n  );\n};\n\n// Parse allowing extra fields (for forward compatibility)\nconst ProjectConfigSchema = refineToObject(createProjectConfigSchema(false));\n\n// Strict schema warn about extra keys\nconst ProjectConfigSchemaStrict = refineToObject(\n  createProjectConfigSchema(true),\n);\n\nconst warnedUnknownKeys = new Set<string>();\nexport function resetUnknownKeyWarnings() {\n  warnedUnknownKeys.clear();\n}\n\n/** Parse object to ProjectConfig. */\nexport async function parseProjectConfig(\n  ctx: Context,\n  obj: any,\n): Promise<ProjectConfig> {\n  if (typeof obj !== \"object\" || obj === null || Array.isArray(obj)) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: \"Expected `convex.json` to contain an object\",\n    });\n  }\n\n  try {\n    // Try strict parse first to detect unknown keys\n    return ProjectConfigSchemaStrict.parse(obj);\n  } catch (error) {\n    if (error instanceof z.ZodError) {\n      // Check if all issues are unrecognized_keys issues\n      const unknownKeyIssues = error.issues.filter(\n        (issue) => issue.code === \"unrecognized_keys\",\n      );\n\n      if (\n        unknownKeyIssues.length > 0 &&\n        unknownKeyIssues.length === error.issues.length\n      ) {\n        // All errors are just unknown keys - warn about them\n        for (const issue of unknownKeyIssues) {\n          if (issue.code === \"unrecognized_keys\") {\n            const pathPrefix =\n              issue.path.length > 0 ? issue.path.join(\".\") + \".\" : \"\";\n            const unknownKeys = issue.keys as string[];\n            const newUnknownKeys = unknownKeys.filter(\n              (key) => !warnedUnknownKeys.has(pathPrefix + key),\n            );\n\n            if (newUnknownKeys.length > 0) {\n              const fullPath =\n                issue.path.length > 0\n                  ? `\\`${issue.path.join(\".\")}\\``\n                  : \"`convex.json`\";\n              logMessage(\n                chalkStderr.yellow(\n                  `Warning: Unknown ${newUnknownKeys.length === 1 ? \"property\" : \"properties\"} in ${fullPath}: ${newUnknownKeys.map((k) => `\\`${k}\\``).join(\", \")}`,\n                ),\n              );\n              logMessage(\n                chalkStderr.gray(\n                  \"  These properties will be preserved but are not recognized by this version of Convex.\",\n                ),\n              );\n\n              // Track that we've warned about these keys\n              newUnknownKeys.forEach((key) =>\n                warnedUnknownKeys.add(pathPrefix + key),\n              );\n            }\n          }\n        }\n        // Re-parse with passthrough schema to preserve unknown keys\n        return ProjectConfigSchema.parse(obj);\n      }\n\n      // Handle validation errors we won't ignore\n      if (error instanceof z.ZodError) {\n        const issue = error.issues[0];\n        const pathStr = issue.path.join(\".\");\n        const message = pathStr\n          ? `\\`${pathStr}\\` in \\`convex.json\\`: ${issue.message}`\n          : `\\`convex.json\\`: ${issue.message}`;\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"invalid filesystem data\",\n          printedMessage: message,\n        });\n      }\n    }\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: (error as any).toString(),\n    });\n  }\n}\n\n// Parse a deployment config returned by the backend, picking out\n// the fields we care about.\nfunction parseBackendConfig(obj: any): {\n  functions: string;\n  nodeVersion?: string;\n} {\n  function throwParseError(message: string) {\n    // Unexpected error\n    // eslint-disable-next-line no-restricted-syntax\n    throw new ParseError(message);\n  }\n  if (typeof obj !== \"object\") {\n    throwParseError(\"Expected an object\");\n  }\n  const { functions, nodeVersion } = obj;\n  if (typeof functions !== \"string\") {\n    throwParseError(\"Expected functions to be a string\");\n  }\n\n  if (typeof nodeVersion !== \"undefined\" && typeof nodeVersion !== \"string\") {\n    throwParseError(\"Expected nodeVersion to be a string\");\n  }\n\n  return {\n    functions,\n    ...((nodeVersion ?? null) !== null ? { nodeVersion: nodeVersion } : {}),\n  };\n}\n\nexport function configName(): string {\n  return \"convex.json\";\n}\n\nexport async function configFilepath(ctx: Context): Promise<string> {\n  const configFn = configName();\n  // We used to allow src/convex.json, but no longer (as of 10/7/2022).\n  // Leave an error message around to help people out. We can remove this\n  // error message after a couple months.\n  const preferredLocation = configFn;\n  const wrongLocation = path.join(\"src\", configFn);\n\n  // Allow either location, but not both.\n  const preferredLocationExists = ctx.fs.exists(preferredLocation);\n  const wrongLocationExists = ctx.fs.exists(wrongLocation);\n  if (preferredLocationExists && wrongLocationExists) {\n    const message = `${chalkStderr.red(`Error: both ${preferredLocation} and ${wrongLocation} files exist!`)}\\nConsolidate these and remove ${wrongLocation}.`;\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: message,\n    });\n  }\n  if (!preferredLocationExists && wrongLocationExists) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `Error: Please move ${wrongLocation} to the root of your project`,\n    });\n  }\n\n  return preferredLocation;\n}\n\nexport async function getFunctionsDirectoryPath(ctx: Context): Promise<string> {\n  const { projectConfig, configPath } = await readProjectConfig(ctx);\n  return functionsDir(configPath, projectConfig);\n}\n\n/** Read configuration from a local `convex.json` file. */\nexport async function readProjectConfig(ctx: Context): Promise<{\n  projectConfig: ProjectConfig;\n  configPath: string;\n}> {\n  if (!ctx.fs.exists(\"convex.json\")) {\n    // create-react-app bans imports from outside of src, so we can just\n    // put the functions directory inside of src/ to work around this issue.\n    const packages = await loadPackageJson(ctx);\n    const isCreateReactApp = \"react-scripts\" in packages;\n    return {\n      projectConfig: {\n        functions: isCreateReactApp\n          ? `src/${DEFAULT_FUNCTIONS_PATH}`\n          : DEFAULT_FUNCTIONS_PATH,\n        node: {\n          externalPackages: [],\n        },\n        generateCommonJSApi: false,\n        codegen: {\n          staticApi: false,\n          staticDataModel: false,\n        },\n        aiFiles: {},\n      },\n      configPath: configName(),\n    };\n  }\n  let projectConfig;\n  const configPath = await configFilepath(ctx);\n  try {\n    projectConfig = await parseProjectConfig(\n      ctx,\n      JSON.parse(ctx.fs.readUtf8File(configPath)),\n    );\n  } catch (err) {\n    if (err instanceof ParseError || err instanceof SyntaxError) {\n      logError(chalkStderr.red(`Error: Parsing \"${configPath}\" failed`));\n      logMessage(chalkStderr.gray(err.toString()));\n    } else {\n      logFailure(\n        `Error: Unable to read project config file \"${configPath}\"\\n` +\n          \"  Are you running this command from the root directory of a Convex project? If so, run `npx convex dev` first.\",\n      );\n      if (err instanceof Error) {\n        logError(chalkStderr.red(err.message));\n      }\n    }\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      errForSentry: err,\n      // TODO -- move the logging above in here\n      printedMessage: null,\n    });\n  }\n  return {\n    projectConfig,\n    configPath,\n  };\n}\n\n/**\n * Given a {@link ProjectConfig}, add in the bundled modules to produce the\n * complete config.\n */\nexport async function configFromProjectConfig(\n  ctx: Context,\n  projectConfig: ProjectConfig,\n  configPath: string,\n  verbose: boolean,\n): Promise<{\n  config: Config;\n  bundledModuleInfos: BundledModuleInfo[];\n}> {\n  const baseDir = functionsDir(configPath, projectConfig);\n  // We bundle Node.js and Convex JS runtime functions entry points separately\n  // since they execute on different platforms.\n  const entryPoints = await entryPointsByEnvironment(ctx, baseDir);\n  // es-build prints errors to console which would clobber our spinner.\n  if (verbose) {\n    showSpinner(\"Bundling modules for Convex's runtime...\");\n  }\n  const convexResult = await bundle({\n    ctx,\n    dir: baseDir,\n    entryPoints: entryPoints.isolate,\n    generateSourceMaps: true,\n    platform: \"browser\",\n  });\n  if (verbose) {\n    logMessage(\n      \"Convex's runtime modules: \",\n      convexResult.modules.map((m) => m.path),\n    );\n  }\n\n  // Bundle node modules.\n  if (verbose && entryPoints.node.length !== 0) {\n    showSpinner(\"Bundling modules for Node.js runtime...\");\n  }\n  const nodeResult = await bundle({\n    ctx,\n    dir: baseDir,\n    entryPoints: entryPoints.node,\n    generateSourceMaps: true,\n    platform: \"node\",\n    chunksFolder: path.join(\"_deps\", \"node\"),\n    externalPackagesAllowList: projectConfig.node.externalPackages,\n  });\n  if (verbose && entryPoints.node.length !== 0) {\n    logMessage(\n      \"Node.js runtime modules: \",\n      nodeResult.modules.map((m) => m.path),\n    );\n    if (projectConfig.node.externalPackages.length > 0) {\n      logMessage(\n        \"Node.js runtime external dependencies (to be installed on the server): \",\n        [...nodeResult.externalDependencies.entries()].map(\n          (a) => `${a[0]}: ${a[1]}`,\n        ),\n      );\n    }\n  }\n  const modules = convexResult.modules;\n  modules.push(...nodeResult.modules);\n  modules.push(...(await bundleAuthConfig(ctx, baseDir)).modules);\n\n  const nodeDependencies: NodeDependency[] = [];\n  for (const [moduleName, moduleVersion] of nodeResult.externalDependencies) {\n    nodeDependencies.push({ name: moduleName, version: moduleVersion });\n  }\n\n  const bundledModuleInfos: BundledModuleInfo[] = Array.from(\n    convexResult.bundledModuleNames.keys(),\n  ).map((moduleName) => {\n    return {\n      name: moduleName,\n      platform: \"convex\",\n    };\n  });\n  bundledModuleInfos.push(\n    ...Array.from(nodeResult.bundledModuleNames.keys()).map(\n      (moduleName): BundledModuleInfo => {\n        return {\n          name: moduleName,\n          platform: \"node\",\n        };\n      },\n    ),\n  );\n\n  return {\n    config: {\n      projectConfig: projectConfig,\n      modules: modules,\n      nodeDependencies: nodeDependencies,\n      // We're just using the version this CLI is running with for now.\n      // This could be different than the version of `convex` the app runs with\n      // if the CLI is installed globally.\n      udfServerVersion: version,\n      nodeVersion: projectConfig.node.nodeVersion,\n    },\n    bundledModuleInfos,\n  };\n}\n\n/**\n * Bundle modules one by one for good bundler errors.\n */\nexport async function debugIsolateEndpointBundles(\n  ctx: Context,\n  projectConfig: ProjectConfig,\n  configPath: string,\n): Promise<void> {\n  const baseDir = functionsDir(configPath, projectConfig);\n  const entryPoints = await entryPointsByEnvironment(ctx, baseDir);\n  if (entryPoints.isolate.length === 0) {\n    logFinishedStep(\"No non-'use node' modules found.\");\n  }\n  await debugIsolateBundlesSerially(ctx, {\n    entryPoints: entryPoints.isolate,\n    extraConditions: [],\n    dir: baseDir,\n  });\n}\n\n/**\n * Read the config from `convex.json` and bundle all the modules.\n */\nexport async function readConfig(\n  ctx: Context,\n  verbose: boolean,\n): Promise<{\n  config: Config;\n  configPath: string;\n  bundledModuleInfos: BundledModuleInfo[];\n}> {\n  const { projectConfig, configPath } = await readProjectConfig(ctx);\n  const { config, bundledModuleInfos } = await configFromProjectConfig(\n    ctx,\n    projectConfig,\n    configPath,\n    verbose,\n  );\n  return { config, configPath, bundledModuleInfos };\n}\n\n/**\n * Ensure the functions directory exists.\n *\n * Note: convex.json is treated as user-owned and is not modified by the CLI.\n * Use writeAiFilesConfig() to explicitly patch the aiFiles section.\n */\nexport async function ensureConvexFunctionsDir(\n  ctx: Context,\n  projectConfig: ProjectConfig,\n) {\n  const configPath = await configFilepath(ctx);\n  ctx.fs.mkdir(functionsDir(configPath, projectConfig), {\n    allowExisting: true,\n  });\n}\n\nexport function removedExistingConfig(\n  ctx: Context,\n  configPath: string,\n  options: { allowExistingConfig?: boolean },\n) {\n  if (!options.allowExistingConfig) {\n    return false;\n  }\n  recursivelyDelete(ctx, configPath);\n  logFinishedStep(`Removed existing ${configPath}`);\n  return true;\n}\n\n/** Pull configuration for the root app component from the given remote origin. */\nexport async function pullConfig(\n  ctx: Context,\n  project: string | undefined,\n  team: string | undefined,\n  origin: string,\n  adminKey: string,\n): Promise<ConfigWithModuleHashes> {\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl: origin,\n    adminKey,\n  });\n\n  changeSpinner(\"Downloading current deployment state...\");\n  try {\n    const res = await fetch(\"/api/get_config_hashes\", {\n      method: \"POST\",\n      body: JSON.stringify({ version, adminKey }),\n    });\n    deprecationCheckWarning(ctx, res);\n    const data = await res.json();\n    const backendConfig = parseBackendConfig(data.config);\n    const projectConfig = {\n      ...backendConfig,\n      node: {\n        // This field is not stored in the backend, which is ok since it is also\n        // not used to diff configs.\n        externalPackages: [],\n        nodeVersion: data.nodeVersion,\n      },\n      // This field is not stored in the backend, it only affects the client.\n      generateCommonJSApi: false,\n      // This field is also not stored in the backend, it only affects the client.\n      codegen: {\n        staticApi: false,\n        staticDataModel: false,\n      },\n      project,\n      team,\n      prodUrl: origin,\n    };\n    return {\n      projectConfig,\n      moduleHashes: data.moduleHashes,\n      // TODO(presley): Add this to diffConfig().\n      nodeDependencies: data.nodeDependencies,\n      udfServerVersion: data.udfServerVersion,\n    };\n  } catch (err: unknown) {\n    logFailure(`Error: Unable to pull deployment config from ${origin}`);\n    return await logAndHandleFetchError(ctx, err);\n  }\n}\n\ninterface BundledModuleInfo {\n  name: string;\n  platform: \"node\" | \"convex\";\n}\n\n/**\n * A component definition spec contains enough information to create bundles\n * of code that must be analyzed in order to construct a ComponentDefinition.\n *\n * Most paths are relative to the directory of the definitionPath.\n */\nexport type ComponentDefinitionSpec = {\n  /** This path is relative to the app (root component) directory. */\n  definitionPath: ComponentDefinitionPath;\n\n  /** Dependencies are paths to the directory of the dependency component definition from the app (root component) directory */\n  dependencies: ComponentDefinitionPath[];\n\n  // All other paths are relative to the directory of the definitionPath above.\n  definition: Bundle;\n  schema: Bundle;\n  functions: Bundle[];\n};\n\nexport type AppDefinitionSpec = Omit<\n  ComponentDefinitionSpec,\n  \"definitionPath\"\n> & {\n  // Only app (root) component specs contain an auth bundle.\n  auth: Bundle | null;\n};\n\nexport type ComponentDefinitionSpecWithoutImpls = Omit<\n  ComponentDefinitionSpec,\n  \"schema\" | \"functions\"\n>;\nexport type AppDefinitionSpecWithoutImpls = Omit<\n  AppDefinitionSpec,\n  \"schema\" | \"functions\" | \"auth\"\n>;\n\n/** Generate a human-readable diff between the two configs. */\nexport function diffConfig(\n  oldConfig: ConfigWithModuleHashes,\n  newConfig: Config,\n): { diffString: string } {\n  let diff = \"\";\n\n  let versionMessage = \"\";\n  const matches = oldConfig.udfServerVersion === newConfig.udfServerVersion;\n  if (oldConfig.udfServerVersion && (!newConfig.udfServerVersion || !matches)) {\n    versionMessage += `[-] ${oldConfig.udfServerVersion}\\n`;\n  }\n  if (newConfig.udfServerVersion && (!oldConfig.udfServerVersion || !matches)) {\n    versionMessage += `[+] ${newConfig.udfServerVersion}\\n`;\n  }\n  if (versionMessage) {\n    diff += \"Change the server's function version:\\n\";\n    diff += versionMessage;\n  }\n\n  if (oldConfig.projectConfig.node.nodeVersion !== newConfig.nodeVersion) {\n    diff += \"Change the server's version for Node.js actions:\\n\";\n    if (oldConfig.projectConfig.node.nodeVersion) {\n      diff += `[-] ${oldConfig.projectConfig.node.nodeVersion}\\n`;\n    }\n    if (newConfig.nodeVersion) {\n      diff += `[+] ${newConfig.nodeVersion}\\n`;\n    }\n  }\n\n  return { diffString: diff };\n}\n\nexport function setEnvVarsInstructions(\n  names: string[],\n  deploymentName: string | null,\n  deploymentType: DeploymentType | undefined,\n  deploymentUrl: string | undefined,\n): string {\n  // Name cloud deployments explicitly: without a flag `env set` targets the\n  // project's default dev deployment, which may not be where this push went\n  // (e.g. `npx convex dev --deployment <other dev deployment>`). Local and\n  // anonymous deployments are always the default target.\n  let deploymentFlag = \"\";\n  if (\n    deploymentName !== null &&\n    deploymentType !== \"local\" &&\n    deploymentType !== \"anonymous\"\n  ) {\n    deploymentFlag = ` --deployment ${deploymentName}`;\n  } else if (deploymentType === \"prod\") {\n    deploymentFlag = \" --prod\";\n  } else if (deploymentName === null && deploymentUrl !== undefined) {\n    // Pushes via `--url`/`--admin-key` or self-hosted env vars have no\n    // deployment name. The admin key stays a placeholder to keep it out of\n    // terminal output.\n    deploymentFlag = ` --url ${deploymentUrl} --admin-key <admin key>`;\n  }\n  const commands = (names.length > 0 ? names : [\"<NAME>\"]).map(\n    (name) =>\n      `    ${chalkStderr.bold(`npx convex env set${deploymentFlag} ${name} <value>`)}`,\n  );\n  let instructions = `Set ${names.length > 1 ? \"them\" : \"it\"} with:\\n\\n${commands.join(\"\\n\")}\\n`;\n  // Anonymous deployments are only reachable from the local dashboard, which\n  // `deploymentDashboardUrlPage` can't address.\n  if (deploymentName !== null && !isAnonymousDeployment(deploymentName)) {\n    const variableQuery = names.length === 1 ? `?var=${names[0]}` : \"\";\n    const dashboardUrl = deploymentDashboardUrlPage(\n      deploymentName,\n      `/settings/environment-variables${variableQuery}`,\n    );\n    instructions += `\\nor in the dashboard:\\n\\n    ${chalkStderr.bold(dashboardUrl)}\\n`;\n  }\n  return instructions;\n}\n\n/** Handle an error from\n * legacy push path:\n * - /api/push_config\n * modern push paths:\n * - /api/deploy2/evaluate_push\n * - /api/deploy2/start_push\n * - /api/deploy2/finish_push\n *\n * finish_push errors are different from start_push errors and in theory could\n * be handled differently, but starting over works for all of them.\n */\nexport async function handlePushConfigError(\n  ctx: Context,\n  error: unknown,\n  defaultMessage: string,\n  deploymentName: string | null,\n  deployment:\n    | {\n        deploymentUrl: string;\n        adminKey: string;\n        deploymentNotice: string;\n      }\n    | undefined,\n  deploymentType: DeploymentType | undefined,\n): Promise<never> {\n  const data: ErrorData | undefined =\n    error instanceof ThrowingFetchError ? error.serverErrorData : undefined;\n  if (data?.code === \"AuthConfigMissingEnvironmentVariable\") {\n    const errorMessage = data.message || \"(no error message given)\";\n    const [, variableName] =\n      errorMessage.match(/Environment variable (\\S+)/i) ?? [];\n\n    // DEPRECATED: This error path provisioning is being phased out in favor of\n    // pre-flight provisioning that happens before the client bundle build.\n    // We keep minimal logic here for backwards compatibility with older templates\n    // that may still rely on this path.\n    if (variableName === \"WORKOS_CLIENT_ID\" && deploymentName && deployment) {\n      // For backwards compatibility with templates that haven't been updated,\n      // we'll still show a helpful error message directing users to configure WorkOS.\n      // But we no longer do automatic provisioning here since it happens too late\n      // (after the client bundle has already been built with missing env vars).\n      logWarning(\n        \"WORKOS_CLIENT_ID is not set; you can set it manually on the deployment or for hosted Convex deployments, use auto-provisioning.\",\n      );\n      logMessage(\n        \"Learn more at https://docs.convex.dev/auth/authkit/auto-provision\",\n      );\n      logMessage(\"\");\n    }\n\n    const envVarMessage =\n      `Environment variable ${chalkStderr.bold(\n        variableName,\n      )} is used in auth config file but ` + `its value was not set.`;\n    await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem or env vars\",\n      errForSentry: error,\n      printedMessage:\n        envVarMessage +\n        \"\\n\" +\n        setEnvVarsInstructions(\n          variableName !== undefined ? [variableName] : [],\n          deploymentName,\n          deploymentType,\n          deployment?.deploymentUrl,\n        ),\n    });\n  }\n\n  if (data?.code === \"MissingEnvironmentVariables\") {\n    const errorMessage = data.message || \"(no error message given)\";\n    const [, namesList] = errorMessage.match(/are not set: ([^.]+)\\./) ?? [];\n    const names = namesList?.split(\", \") ?? [];\n    const envVarMessage =\n      names.length === 0\n        ? errorMessage\n        : names.length === 1\n          ? `Environment variable ${chalkStderr.bold(names[0])} is ` +\n            `declared as required in convex.config.ts but its value was not set.`\n          : `Environment variables ${names\n              .map((name) => chalkStderr.bold(name))\n              .join(\", \")} are declared as required in convex.config.ts ` +\n            `but their values were not set.`;\n    await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem or env vars\",\n      errForSentry: error,\n      printedMessage:\n        envVarMessage +\n        \"\\n\" +\n        setEnvVarsInstructions(\n          names,\n          deploymentName,\n          deploymentType,\n          deployment?.deploymentUrl,\n        ),\n    });\n  }\n\n  if (data?.code === \"RaceDetected\") {\n    // Environment variables or schema changed during push. This is a transient\n    // error that should be retried immediately with exponential backoff.\n    const message =\n      data.message || \"Schema or environment variables changed during push\";\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      errForSentry: error,\n      printedMessage: chalkStderr.yellow(message),\n    });\n  }\n\n  if (data?.code === \"InternalServerError\") {\n    if (deploymentName?.startsWith(\"local-\")) {\n      printLocalDeploymentOnError();\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        errForSentry: new LocalDeploymentError(\n          \"InternalServerError while pushing to local deployment\",\n        ),\n        printedMessage: defaultMessage,\n      });\n    }\n  }\n\n  logFailure(defaultMessage);\n  return await logAndHandleFetchError(ctx, error);\n}\n\nexport type AiFilesProjectConfig = NonNullable<ProjectConfig[\"aiFiles\"]>;\n\nfunction tryParseJson(raw: string): unknown {\n  try {\n    return JSON.parse(raw);\n  } catch {\n    return {};\n  }\n}\n\nfunction toRecord(val: unknown): Record<string, unknown> {\n  if (val !== null && typeof val === \"object\" && !Array.isArray(val))\n    return val as Record<string, unknown>;\n  return {};\n}\n\n/**\n * Write the `aiFiles` section of `convex.json`, preserving all other keys.\n * Writes the given object as-is with no merging or default logic.\n * If `aiFiles` is undefined, the key is removed from the file.\n */\nexport async function writeAiFilesConfig({\n  projectDir,\n  aiFiles,\n}: {\n  projectDir: string;\n  aiFiles: AiFilesProjectConfig | undefined;\n}): Promise<void> {\n  const filePath = path.join(projectDir, \"convex.json\");\n  const raw = await nodeFs.readFile(filePath, \"utf8\").catch(() => null);\n  const base = toRecord(raw !== null ? tryParseJson(raw) : {});\n\n  const { $schema, aiFiles: _existing, ...rest } = base;\n\n  const hasContent = aiFiles !== undefined && Object.keys(aiFiles).length > 0;\n\n  const next: Record<string, unknown> = {\n    $schema: $schema ?? \"node_modules/convex/schemas/convex.schema.json\",\n    ...rest,\n    ...(hasContent ? { aiFiles } : {}),\n  };\n\n  await nodeFs.writeFile(\n    filePath,\n    JSON.stringify(next, null, 2) + \"\\n\",\n    \"utf8\",\n  );\n}\n", "import { productionProvisionHost, provisionHost } from \"../config.js\";\nimport * as Sentry from \"@sentry/node\";\nimport { version } from \"../../../index.js\";\nimport { stripVTControlCharacters } from \"util\";\n\nexport const SENTRY_DSN =\n  \"https://f9fa0306e3d540079cf40ce8c2ad9644@o1192621.ingest.sentry.io/6390839\";\n\nexport const LOCAL_BACKEND_SENTRY_DSN =\n  \"https://1c77542933b4002e48934a351c84dd38@o1192621.ingest.us.sentry.io/4511826465587200\";\n\nexport function initSentry() {\n  if (\n    (!process.env.CI || process.env.VERCEL === \"1\") &&\n    provisionHost === productionProvisionHost\n  ) {\n    Sentry.init({\n      dsn: SENTRY_DSN,\n      release: \"cli@\" + version,\n      tracesSampleRate: 0.2,\n      beforeBreadcrumb: (breadcrumb) => {\n        // Strip ANSI color codes from log lines that are sent as breadcrumbs.\n        if (breadcrumb.message) {\n          breadcrumb.message = stripVTControlCharacters(breadcrumb.message);\n        }\n        return breadcrumb;\n      },\n    });\n  }\n}\n", "'use strict'\n\nmodule.exports = {\n  kClose: Symbol('close'),\n  kDestroy: Symbol('destroy'),\n  kDispatch: Symbol('dispatch'),\n  kUrl: Symbol('url'),\n  kWriting: Symbol('writing'),\n  kResuming: Symbol('resuming'),\n  kQueue: Symbol('queue'),\n  kConnect: Symbol('connect'),\n  kConnecting: Symbol('connecting'),\n  kKeepAliveDefaultTimeout: Symbol('default keep alive timeout'),\n  kKeepAliveMaxTimeout: Symbol('max keep alive timeout'),\n  kKeepAliveTimeoutThreshold: Symbol('keep alive timeout threshold'),\n  kKeepAliveTimeoutValue: Symbol('keep alive timeout'),\n  kKeepAlive: Symbol('keep alive'),\n  kHeadersTimeout: Symbol('headers timeout'),\n  kBodyTimeout: Symbol('body timeout'),\n  kServerName: Symbol('server name'),\n  kLocalAddress: Symbol('local address'),\n  kHost: Symbol('host'),\n  kNoRef: Symbol('no ref'),\n  kBodyUsed: Symbol('used'),\n  kBody: Symbol('abstracted request body'),\n  kRunning: Symbol('running'),\n  kBlocking: Symbol('blocking'),\n  kPending: Symbol('pending'),\n  kSize: Symbol('size'),\n  kBusy: Symbol('busy'),\n  kQueued: Symbol('queued'),\n  kFree: Symbol('free'),\n  kConnected: Symbol('connected'),\n  kClosed: Symbol('closed'),\n  kNeedDrain: Symbol('need drain'),\n  kReset: Symbol('reset'),\n  kDestroyed: Symbol.for('nodejs.stream.destroyed'),\n  kResume: Symbol('resume'),\n  kOnError: Symbol('on error'),\n  kMaxHeadersSize: Symbol('max headers size'),\n  kRunningIdx: Symbol('running index'),\n  kPendingIdx: Symbol('pending index'),\n  kError: Symbol('error'),\n  kClients: Symbol('clients'),\n  kClient: Symbol('client'),\n  kParser: Symbol('parser'),\n  kOnDestroyed: Symbol('destroy callbacks'),\n  kPipelining: Symbol('pipelining'),\n  kSocket: Symbol('socket'),\n  kHostHeader: Symbol('host header'),\n  kConnector: Symbol('connector'),\n  kStrictContentLength: Symbol('strict content length'),\n  kMaxRedirections: Symbol('maxRedirections'),\n  kMaxRequests: Symbol('maxRequestsPerClient'),\n  kProxy: Symbol('proxy agent options'),\n  kCounter: Symbol('socket request counter'),\n  kMaxResponseSize: Symbol('max response size'),\n  kHTTP2Session: Symbol('http2Session'),\n  kHTTP2SessionState: Symbol('http2Session state'),\n  kRetryHandlerDefaultRetry: Symbol('retry agent default retry'),\n  kConstruct: Symbol('constructable'),\n  kListeners: Symbol('listeners'),\n  kHTTPContext: Symbol('http context'),\n  kMaxConcurrentStreams: Symbol('max concurrent streams'),\n  kHTTP2InitialWindowSize: Symbol('http2 initial window size'),\n  kHTTP2ConnectionWindowSize: Symbol('http2 connection window size'),\n  kEnableConnectProtocol: Symbol('http2session connect protocol'),\n  kRemoteSettings: Symbol('http2session remote settings'),\n  kHTTP2Stream: Symbol('http2session client stream'),\n  kPingInterval: Symbol('ping interval'),\n  kNoProxyAgent: Symbol('no proxy agent'),\n  kHttpProxyAgent: Symbol('http proxy agent'),\n  kHttpsProxyAgent: Symbol('https proxy agent'),\n  kSocks5ProxyAgent: Symbol('socks5 proxy agent')\n}\n", "'use strict'\n\n/**\n * This module offers an optimized timer implementation designed for scenarios\n * where high precision is not critical.\n *\n * The timer achieves faster performance by using a low-resolution approach,\n * with an accuracy target of within 500ms. This makes it particularly useful\n * for timers with delays of 1 second or more, where exact timing is less\n * crucial.\n *\n * It's important to note that Node.js timers are inherently imprecise, as\n * delays can occur due to the event loop being blocked by other operations.\n * Consequently, timers may trigger later than their scheduled time.\n */\n\n/**\n * The fastNow variable contains the internal fast timer clock value.\n *\n * @type {number}\n */\nlet fastNow = 0\n\n/**\n * RESOLUTION_MS represents the target resolution time in milliseconds.\n *\n * @type {number}\n * @default 1000\n */\nconst RESOLUTION_MS = 1e3\n\n/**\n * TICK_MS defines the desired interval in milliseconds between each tick.\n * The target value is set to half the resolution time, minus 1 ms, to account\n * for potential event loop overhead.\n *\n * @type {number}\n * @default 499\n */\nconst TICK_MS = (RESOLUTION_MS >> 1) - 1\n\n/**\n * fastNowTimeout is a Node.js timer used to manage and process\n * the FastTimers stored in the `fastTimers` array.\n *\n * @type {NodeJS.Timeout}\n */\nlet fastNowTimeout\n\n/**\n * The kFastTimer symbol is used to identify FastTimer instances.\n *\n * @type {Symbol}\n */\nconst kFastTimer = Symbol('kFastTimer')\n\n/**\n * The fastTimers array contains all active FastTimers.\n *\n * @type {FastTimer[]}\n */\nconst fastTimers = []\n\n/**\n * These constants represent the various states of a FastTimer.\n */\n\n/**\n * The `NOT_IN_LIST` constant indicates that the FastTimer is not included\n * in the `fastTimers` array. Timers with this status will not be processed\n * during the next tick by the `onTick` function.\n *\n * A FastTimer can be re-added to the `fastTimers` array by invoking the\n * `refresh` method on the FastTimer instance.\n *\n * @type {-2}\n */\nconst NOT_IN_LIST = -2\n\n/**\n * The `TO_BE_CLEARED` constant indicates that the FastTimer is scheduled\n * for removal from the `fastTimers` array. A FastTimer in this state will\n * be removed in the next tick by the `onTick` function and will no longer\n * be processed.\n *\n * This status is also set when the `clear` method is called on the FastTimer instance.\n *\n * @type {-1}\n */\nconst TO_BE_CLEARED = -1\n\n/**\n * The `PENDING` constant signifies that the FastTimer is awaiting processing\n * in the next tick by the `onTick` function. Timers with this status will have\n * their `_idleStart` value set and their status updated to `ACTIVE` in the next tick.\n *\n * @type {0}\n */\nconst PENDING = 0\n\n/**\n * The `ACTIVE` constant indicates that the FastTimer is active and waiting\n * for its timer to expire. During the next tick, the `onTick` function will\n * check if the timer has expired, and if so, it will execute the associated callback.\n *\n * @type {1}\n */\nconst ACTIVE = 1\n\n/**\n * The onTick function processes the fastTimers array.\n *\n * @returns {void}\n */\nfunction onTick () {\n  /**\n   * Increment the fastNow value by the TICK_MS value, despite the actual time\n   * that has passed since the last tick. This approach ensures independence\n   * from the system clock and delays caused by a blocked event loop.\n   *\n   * @type {number}\n   */\n  fastNow += TICK_MS\n\n  /**\n   * The `idx` variable is used to iterate over the `fastTimers` array.\n   * Expired timers are removed by replacing them with the last element in the array.\n   * Consequently, `idx` is only incremented when the current element is not removed.\n   *\n   * @type {number}\n   */\n  let idx = 0\n\n  /**\n   * The len variable will contain the length of the fastTimers array\n   * and will be decremented when a FastTimer should be removed from the\n   * fastTimers array.\n   *\n   * @type {number}\n   */\n  let len = fastTimers.length\n\n  while (idx < len) {\n    /**\n     * @type {FastTimer}\n     */\n    const timer = fastTimers[idx]\n\n    // If the timer is in the ACTIVE state and the timer has expired, it will\n    // be processed in the next tick.\n    if (timer._state === PENDING) {\n      // Set the _idleStart value to the fastNow value minus the TICK_MS value\n      // to account for the time the timer was in the PENDING state.\n      timer._idleStart = fastNow - TICK_MS\n      timer._state = ACTIVE\n    } else if (\n      timer._state === ACTIVE &&\n      fastNow >= timer._idleStart + timer._idleTimeout\n    ) {\n      timer._state = TO_BE_CLEARED\n      timer._idleStart = -1\n      timer._onTimeout(timer._timerArg)\n    }\n\n    if (timer._state === TO_BE_CLEARED) {\n      timer._state = NOT_IN_LIST\n\n      // Move the last element to the current index and decrement len if it is\n      // not the only element in the array.\n      if (--len !== 0) {\n        fastTimers[idx] = fastTimers[len]\n      }\n    } else {\n      ++idx\n    }\n  }\n\n  // Set the length of the fastTimers array to the new length and thus\n  // removing the excess FastTimers elements from the array.\n  fastTimers.length = len\n\n  // If there are still active FastTimers in the array, refresh the Timer.\n  // If there are no active FastTimers, the timer will be refreshed again\n  // when a new FastTimer is instantiated.\n  if (fastTimers.length !== 0) {\n    refreshTimeout()\n  }\n}\n\nfunction refreshTimeout () {\n  // If the fastNowTimeout is already set and the Timer has the refresh()-\n  // method available, call it to refresh the timer.\n  // Some timer objects returned by setTimeout may not have a .refresh()\n  // method (e.g. mocked timers in tests).\n  if (fastNowTimeout?.refresh) {\n    fastNowTimeout.refresh()\n    // fastNowTimeout is not instantiated yet or refresh is not availabe,\n    // create a new Timer.\n  } else {\n    clearTimeout(fastNowTimeout)\n    fastNowTimeout = setTimeout(onTick, TICK_MS)\n    // If the Timer has an unref method, call it to allow the process to exit,\n    // if there are no other active handles. When using fake timers or mocked\n    // environments (like Jest), .unref() may not be defined,\n    fastNowTimeout?.unref()\n  }\n}\n\n/**\n * The `FastTimer` class is a data structure designed to store and manage\n * timer information.\n */\nclass FastTimer {\n  [kFastTimer] = true\n\n  /**\n   * The state of the timer, which can be one of the following:\n   * - NOT_IN_LIST (-2)\n   * - TO_BE_CLEARED (-1)\n   * - PENDING (0)\n   * - ACTIVE (1)\n   *\n   * @type {-2|-1|0|1}\n   * @private\n   */\n  _state = NOT_IN_LIST\n\n  /**\n   * The number of milliseconds to wait before calling the callback.\n   *\n   * @type {number}\n   * @private\n   */\n  _idleTimeout = -1\n\n  /**\n   * The time in milliseconds when the timer was started. This value is used to\n   * calculate when the timer should expire.\n   *\n   * @type {number}\n   * @default -1\n   * @private\n   */\n  _idleStart = -1\n\n  /**\n   * The function to be executed when the timer expires.\n   * @type {Function}\n   * @private\n   */\n  _onTimeout\n\n  /**\n   * The argument to be passed to the callback when the timer expires.\n   *\n   * @type {*}\n   * @private\n   */\n  _timerArg\n\n  /**\n   * @constructor\n   * @param {Function} callback A function to be executed after the timer\n   * expires.\n   * @param {number} delay The time, in milliseconds that the timer should wait\n   * before the specified function or code is executed.\n   * @param {*} arg\n   */\n  constructor (callback, delay, arg) {\n    this._onTimeout = callback\n    this._idleTimeout = delay\n    this._timerArg = arg\n\n    this.refresh()\n  }\n\n  /**\n   * Sets the timer's start time to the current time, and reschedules the timer\n   * to call its callback at the previously specified duration adjusted to the\n   * current time.\n   * Using this on a timer that has already called its callback will reactivate\n   * the timer.\n   *\n   * @returns {void}\n   */\n  refresh () {\n    // In the special case that the timer is not in the list of active timers,\n    // add it back to the array to be processed in the next tick by the onTick\n    // function.\n    if (this._state === NOT_IN_LIST) {\n      fastTimers.push(this)\n    }\n\n    // If the timer is the only active timer, refresh the fastNowTimeout for\n    // better resolution.\n    if (!fastNowTimeout || fastTimers.length === 1) {\n      refreshTimeout()\n    }\n\n    // Setting the state to PENDING will cause the timer to be reset in the\n    // next tick by the onTick function.\n    this._state = PENDING\n  }\n\n  /**\n   * The `clear` method cancels the timer, preventing it from executing.\n   *\n   * @returns {void}\n   * @private\n   */\n  clear () {\n    // Set the state to TO_BE_CLEARED to mark the timer for removal in the next\n    // tick by the onTick function.\n    this._state = TO_BE_CLEARED\n\n    // Reset the _idleStart value to -1 to indicate that the timer is no longer\n    // active.\n    this._idleStart = -1\n  }\n}\n\n/**\n * This module exports a setTimeout and clearTimeout function that can be\n * used as a drop-in replacement for the native functions.\n */\nmodule.exports = {\n  /**\n   * The setTimeout() method sets a timer which executes a function once the\n   * timer expires.\n   * @param {Function} callback A function to be executed after the timer\n   * expires.\n   * @param {number} delay The time, in milliseconds that the timer should\n   * wait before the specified function or code is executed.\n   * @param {*} [arg] An optional argument to be passed to the callback function\n   * when the timer expires.\n   * @returns {NodeJS.Timeout|FastTimer}\n   */\n  setTimeout (callback, delay, arg) {\n    // If the delay is less than or equal to the RESOLUTION_MS value return a\n    // native Node.js Timer instance.\n    return delay <= RESOLUTION_MS\n      ? setTimeout(callback, delay, arg)\n      : new FastTimer(callback, delay, arg)\n  },\n  /**\n   * The clearTimeout method cancels an instantiated Timer previously created\n   * by calling setTimeout.\n   *\n   * @param {NodeJS.Timeout|FastTimer} timeout\n   */\n  clearTimeout (timeout) {\n    // If the timeout is a FastTimer, call its own clear method.\n    if (timeout[kFastTimer]) {\n      /**\n       * @type {FastTimer}\n       */\n      timeout.clear()\n      // Otherwise it is an instance of a native NodeJS.Timeout, so call the\n      // Node.js native clearTimeout function.\n    } else {\n      clearTimeout(timeout)\n    }\n  },\n  /**\n   * The setFastTimeout() method sets a fastTimer which executes a function once\n   * the timer expires.\n   * @param {Function} callback A function to be executed after the timer\n   * expires.\n   * @param {number} delay The time, in milliseconds that the timer should\n   * wait before the specified function or code is executed.\n   * @param {*} [arg] An optional argument to be passed to the callback function\n   * when the timer expires.\n   * @returns {FastTimer}\n   */\n  setFastTimeout (callback, delay, arg) {\n    return new FastTimer(callback, delay, arg)\n  },\n  /**\n   * The clearTimeout method cancels an instantiated FastTimer previously\n   * created by calling setFastTimeout.\n   *\n   * @param {FastTimer} timeout\n   */\n  clearFastTimeout (timeout) {\n    timeout.clear()\n  },\n  /**\n   * The now method returns the value of the internal fast timer clock.\n   *\n   * @returns {number}\n   */\n  now () {\n    return fastNow\n  },\n  /**\n   * Trigger the onTick function to process the fastTimers array.\n   * Exported for testing purposes only.\n   * Marking as deprecated to discourage any use outside of testing.\n   * @deprecated\n   * @param {number} [delay=0] The delay in milliseconds to add to the now value.\n   */\n  tick (delay = 0) {\n    fastNow += delay - RESOLUTION_MS + 1\n    onTick()\n    onTick()\n  },\n  /**\n   * Reset FastTimers.\n   * Exported for testing purposes only.\n   * Marking as deprecated to discourage any use outside of testing.\n   * @deprecated\n   */\n  reset () {\n    fastNow = 0\n    fastTimers.length = 0\n    clearTimeout(fastNowTimeout)\n    fastNowTimeout = null\n  },\n  /**\n   * Exporting for testing purposes only.\n   * Marking as deprecated to discourage any use outside of testing.\n   * @deprecated\n   */\n  kFastTimer\n}\n", "'use strict'\n\nconst kUndiciError = Symbol.for('undici.error.UND_ERR')\nclass UndiciError extends Error {\n  constructor (message, options) {\n    super(message, options)\n    this.name = 'UndiciError'\n    this.code = 'UND_ERR'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kUndiciError] === true\n  }\n\n  get [kUndiciError] () {\n    return true\n  }\n}\n\nconst kConnectTimeoutError = Symbol.for('undici.error.UND_ERR_CONNECT_TIMEOUT')\nclass ConnectTimeoutError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ConnectTimeoutError'\n    this.message = message || 'Connect Timeout Error'\n    this.code = 'UND_ERR_CONNECT_TIMEOUT'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kConnectTimeoutError] === true\n  }\n\n  get [kConnectTimeoutError] () {\n    return true\n  }\n}\n\nconst kHeadersTimeoutError = Symbol.for('undici.error.UND_ERR_HEADERS_TIMEOUT')\nclass HeadersTimeoutError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'HeadersTimeoutError'\n    this.message = message || 'Headers Timeout Error'\n    this.code = 'UND_ERR_HEADERS_TIMEOUT'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kHeadersTimeoutError] === true\n  }\n\n  get [kHeadersTimeoutError] () {\n    return true\n  }\n}\n\nconst kHeadersOverflowError = Symbol.for('undici.error.UND_ERR_HEADERS_OVERFLOW')\nclass HeadersOverflowError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'HeadersOverflowError'\n    this.message = message || 'Headers Overflow Error'\n    this.code = 'UND_ERR_HEADERS_OVERFLOW'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kHeadersOverflowError] === true\n  }\n\n  get [kHeadersOverflowError] () {\n    return true\n  }\n}\n\nconst kBodyTimeoutError = Symbol.for('undici.error.UND_ERR_BODY_TIMEOUT')\nclass BodyTimeoutError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'BodyTimeoutError'\n    this.message = message || 'Body Timeout Error'\n    this.code = 'UND_ERR_BODY_TIMEOUT'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kBodyTimeoutError] === true\n  }\n\n  get [kBodyTimeoutError] () {\n    return true\n  }\n}\n\nconst kInvalidArgumentError = Symbol.for('undici.error.UND_ERR_INVALID_ARG')\nclass InvalidArgumentError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'InvalidArgumentError'\n    this.message = message || 'Invalid Argument Error'\n    this.code = 'UND_ERR_INVALID_ARG'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kInvalidArgumentError] === true\n  }\n\n  get [kInvalidArgumentError] () {\n    return true\n  }\n}\n\nconst kInvalidReturnValueError = Symbol.for('undici.error.UND_ERR_INVALID_RETURN_VALUE')\nclass InvalidReturnValueError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'InvalidReturnValueError'\n    this.message = message || 'Invalid Return Value Error'\n    this.code = 'UND_ERR_INVALID_RETURN_VALUE'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kInvalidReturnValueError] === true\n  }\n\n  get [kInvalidReturnValueError] () {\n    return true\n  }\n}\n\nconst kAbortError = Symbol.for('undici.error.UND_ERR_ABORT')\nclass AbortError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'AbortError'\n    this.message = message || 'The operation was aborted'\n    this.code = 'UND_ERR_ABORT'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kAbortError] === true\n  }\n\n  get [kAbortError] () {\n    return true\n  }\n}\n\nconst kRequestAbortedError = Symbol.for('undici.error.UND_ERR_ABORTED')\nclass RequestAbortedError extends AbortError {\n  constructor (message) {\n    super(message)\n    this.name = 'AbortError'\n    this.message = message || 'Request aborted'\n    this.code = 'UND_ERR_ABORTED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kRequestAbortedError] === true\n  }\n\n  get [kRequestAbortedError] () {\n    return true\n  }\n}\n\nconst kInformationalError = Symbol.for('undici.error.UND_ERR_INFO')\nclass InformationalError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'InformationalError'\n    this.message = message || 'Request information'\n    this.code = 'UND_ERR_INFO'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kInformationalError] === true\n  }\n\n  get [kInformationalError] () {\n    return true\n  }\n}\n\nconst kRequestContentLengthMismatchError = Symbol.for('undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH')\nclass RequestContentLengthMismatchError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'RequestContentLengthMismatchError'\n    this.message = message || 'Request body length does not match content-length header'\n    this.code = 'UND_ERR_REQ_CONTENT_LENGTH_MISMATCH'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kRequestContentLengthMismatchError] === true\n  }\n\n  get [kRequestContentLengthMismatchError] () {\n    return true\n  }\n}\n\nconst kResponseContentLengthMismatchError = Symbol.for('undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH')\nclass ResponseContentLengthMismatchError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ResponseContentLengthMismatchError'\n    this.message = message || 'Response body length does not match content-length header'\n    this.code = 'UND_ERR_RES_CONTENT_LENGTH_MISMATCH'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kResponseContentLengthMismatchError] === true\n  }\n\n  get [kResponseContentLengthMismatchError] () {\n    return true\n  }\n}\n\nconst kClientDestroyedError = Symbol.for('undici.error.UND_ERR_DESTROYED')\nclass ClientDestroyedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ClientDestroyedError'\n    this.message = message || 'The client is destroyed'\n    this.code = 'UND_ERR_DESTROYED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kClientDestroyedError] === true\n  }\n\n  get [kClientDestroyedError] () {\n    return true\n  }\n}\n\nconst kClientClosedError = Symbol.for('undici.error.UND_ERR_CLOSED')\nclass ClientClosedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ClientClosedError'\n    this.message = message || 'The client is closed'\n    this.code = 'UND_ERR_CLOSED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kClientClosedError] === true\n  }\n\n  get [kClientClosedError] () {\n    return true\n  }\n}\n\nconst kSocketError = Symbol.for('undici.error.UND_ERR_SOCKET')\nclass SocketError extends UndiciError {\n  constructor (message, socket) {\n    super(message)\n    this.name = 'SocketError'\n    this.message = message || 'Socket error'\n    this.code = 'UND_ERR_SOCKET'\n    this.socket = socket\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kSocketError] === true\n  }\n\n  get [kSocketError] () {\n    return true\n  }\n}\n\nconst kNotSupportedError = Symbol.for('undici.error.UND_ERR_NOT_SUPPORTED')\nclass NotSupportedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'NotSupportedError'\n    this.message = message || 'Not supported error'\n    this.code = 'UND_ERR_NOT_SUPPORTED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kNotSupportedError] === true\n  }\n\n  get [kNotSupportedError] () {\n    return true\n  }\n}\n\nconst kBalancedPoolMissingUpstreamError = Symbol.for('undici.error.UND_ERR_BPL_MISSING_UPSTREAM')\nclass BalancedPoolMissingUpstreamError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'MissingUpstreamError'\n    this.message = message || 'No upstream has been added to the BalancedPool'\n    this.code = 'UND_ERR_BPL_MISSING_UPSTREAM'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kBalancedPoolMissingUpstreamError] === true\n  }\n\n  get [kBalancedPoolMissingUpstreamError] () {\n    return true\n  }\n}\n\nconst kHTTPParserError = Symbol.for('undici.error.UND_ERR_HTTP_PARSER')\nclass HTTPParserError extends Error {\n  constructor (message, code, data) {\n    super(message)\n    this.name = 'HTTPParserError'\n    this.code = code ? `HPE_${code}` : undefined\n    this.data = data ? data.toString() : undefined\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kHTTPParserError] === true\n  }\n\n  get [kHTTPParserError] () {\n    return true\n  }\n}\n\nconst kResponseExceededMaxSizeError = Symbol.for('undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE')\nclass ResponseExceededMaxSizeError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'ResponseExceededMaxSizeError'\n    this.message = message || 'Response content exceeded max size'\n    this.code = 'UND_ERR_RES_EXCEEDED_MAX_SIZE'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kResponseExceededMaxSizeError] === true\n  }\n\n  get [kResponseExceededMaxSizeError] () {\n    return true\n  }\n}\n\nconst kRequestRetryError = Symbol.for('undici.error.UND_ERR_REQ_RETRY')\nclass RequestRetryError extends UndiciError {\n  constructor (message, code, { headers, data }) {\n    super(message)\n    this.name = 'RequestRetryError'\n    this.message = message || 'Request retry error'\n    this.code = 'UND_ERR_REQ_RETRY'\n    this.statusCode = code\n    this.data = data\n    this.headers = headers\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kRequestRetryError] === true\n  }\n\n  get [kRequestRetryError] () {\n    return true\n  }\n}\n\nconst kResponseError = Symbol.for('undici.error.UND_ERR_RESPONSE')\nclass ResponseError extends UndiciError {\n  constructor (message, code, { headers, body }) {\n    super(message)\n    this.name = 'ResponseError'\n    this.message = message || 'Response error'\n    this.code = 'UND_ERR_RESPONSE'\n    this.statusCode = code\n    this.body = body\n    this.headers = headers\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kResponseError] === true\n  }\n\n  get [kResponseError] () {\n    return true\n  }\n}\n\nconst kSecureProxyConnectionError = Symbol.for('undici.error.UND_ERR_PRX_TLS')\nclass SecureProxyConnectionError extends UndiciError {\n  constructor (cause, message, options = {}) {\n    super(message, { cause, ...options })\n    this.name = 'SecureProxyConnectionError'\n    this.message = message || 'Secure Proxy Connection failed'\n    this.code = 'UND_ERR_PRX_TLS'\n    this.cause = cause\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kSecureProxyConnectionError] === true\n  }\n\n  get [kSecureProxyConnectionError] () {\n    return true\n  }\n}\n\nconst kMaxOriginsReachedError = Symbol.for('undici.error.UND_ERR_MAX_ORIGINS_REACHED')\nclass MaxOriginsReachedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'MaxOriginsReachedError'\n    this.message = message || 'Maximum allowed origins reached'\n    this.code = 'UND_ERR_MAX_ORIGINS_REACHED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kMaxOriginsReachedError] === true\n  }\n\n  get [kMaxOriginsReachedError] () {\n    return true\n  }\n}\n\nclass Socks5ProxyError extends UndiciError {\n  constructor (message, code) {\n    super(message)\n    this.name = 'Socks5ProxyError'\n    this.message = message || 'SOCKS5 proxy error'\n    this.code = code || 'UND_ERR_SOCKS5'\n  }\n}\n\nconst kMessageSizeExceededError = Symbol.for('undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED')\nclass MessageSizeExceededError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'MessageSizeExceededError'\n    this.message = message || 'Max decompressed message size exceeded'\n    this.code = 'UND_ERR_WS_MESSAGE_SIZE_EXCEEDED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kMessageSizeExceededError] === true\n  }\n\n  get [kMessageSizeExceededError] () {\n    return true\n  }\n}\n\nmodule.exports = {\n  AbortError,\n  HTTPParserError,\n  UndiciError,\n  HeadersTimeoutError,\n  HeadersOverflowError,\n  BodyTimeoutError,\n  RequestContentLengthMismatchError,\n  ConnectTimeoutError,\n  InvalidArgumentError,\n  InvalidReturnValueError,\n  RequestAbortedError,\n  ClientDestroyedError,\n  ClientClosedError,\n  InformationalError,\n  SocketError,\n  NotSupportedError,\n  ResponseContentLengthMismatchError,\n  BalancedPoolMissingUpstreamError,\n  ResponseExceededMaxSizeError,\n  RequestRetryError,\n  ResponseError,\n  SecureProxyConnectionError,\n  MaxOriginsReachedError,\n  Socks5ProxyError,\n  MessageSizeExceededError\n}\n", "'use strict'\n\n/**\n * @see https://developer.mozilla.org/docs/Web/HTTP/Headers\n */\nconst wellknownHeaderNames = /** @type {const} */ ([\n  'Accept',\n  'Accept-Encoding',\n  'Accept-Language',\n  'Accept-Ranges',\n  'Access-Control-Allow-Credentials',\n  'Access-Control-Allow-Headers',\n  'Access-Control-Allow-Methods',\n  'Access-Control-Allow-Origin',\n  'Access-Control-Expose-Headers',\n  'Access-Control-Max-Age',\n  'Access-Control-Request-Headers',\n  'Access-Control-Request-Method',\n  'Age',\n  'Allow',\n  'Alt-Svc',\n  'Alt-Used',\n  'Authorization',\n  'Cache-Control',\n  'Clear-Site-Data',\n  'Connection',\n  'Content-Disposition',\n  'Content-Encoding',\n  'Content-Language',\n  'Content-Length',\n  'Content-Location',\n  'Content-Range',\n  'Content-Security-Policy',\n  'Content-Security-Policy-Report-Only',\n  'Content-Type',\n  'Cookie',\n  'Cross-Origin-Embedder-Policy',\n  'Cross-Origin-Opener-Policy',\n  'Cross-Origin-Resource-Policy',\n  'Date',\n  'Device-Memory',\n  'Downlink',\n  'ECT',\n  'ETag',\n  'Expect',\n  'Expect-CT',\n  'Expires',\n  'Forwarded',\n  'From',\n  'Host',\n  'If-Match',\n  'If-Modified-Since',\n  'If-None-Match',\n  'If-Range',\n  'If-Unmodified-Since',\n  'Keep-Alive',\n  'Last-Modified',\n  'Link',\n  'Location',\n  'Max-Forwards',\n  'Origin',\n  'Permissions-Policy',\n  'Pragma',\n  'Proxy-Authenticate',\n  'Proxy-Authorization',\n  'RTT',\n  'Range',\n  'Referer',\n  'Referrer-Policy',\n  'Refresh',\n  'Retry-After',\n  'Sec-WebSocket-Accept',\n  'Sec-WebSocket-Extensions',\n  'Sec-WebSocket-Key',\n  'Sec-WebSocket-Protocol',\n  'Sec-WebSocket-Version',\n  'Server',\n  'Server-Timing',\n  'Service-Worker-Allowed',\n  'Service-Worker-Navigation-Preload',\n  'Set-Cookie',\n  'SourceMap',\n  'Strict-Transport-Security',\n  'Supports-Loading-Mode',\n  'TE',\n  'Timing-Allow-Origin',\n  'Trailer',\n  'Transfer-Encoding',\n  'Upgrade',\n  'Upgrade-Insecure-Requests',\n  'User-Agent',\n  'Vary',\n  'Via',\n  'WWW-Authenticate',\n  'X-Content-Type-Options',\n  'X-DNS-Prefetch-Control',\n  'X-Frame-Options',\n  'X-Permitted-Cross-Domain-Policies',\n  'X-Powered-By',\n  'X-Requested-With',\n  'X-XSS-Protection'\n])\n\n/** @type {Record<typeof wellknownHeaderNames[number]|Lowercase<typeof wellknownHeaderNames[number]>, string>} */\nconst headerNameLowerCasedRecord = {}\n\n// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`.\nObject.setPrototypeOf(headerNameLowerCasedRecord, null)\n\n/**\n * @type {Record<Lowercase<typeof wellknownHeaderNames[number]>, Buffer>}\n */\nconst wellknownHeaderNameBuffers = {}\n\n// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`.\nObject.setPrototypeOf(wellknownHeaderNameBuffers, null)\n\n/**\n * @param {string} header Lowercased header\n * @returns {Buffer}\n */\nfunction getHeaderNameAsBuffer (header) {\n  let buffer = wellknownHeaderNameBuffers[header]\n\n  if (buffer === undefined) {\n    buffer = Buffer.from(header)\n  }\n\n  return buffer\n}\n\nfor (let i = 0; i < wellknownHeaderNames.length; ++i) {\n  const key = wellknownHeaderNames[i]\n  const lowerCasedKey = key.toLowerCase()\n  headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] =\n    lowerCasedKey\n}\n\nmodule.exports = {\n  wellknownHeaderNames,\n  headerNameLowerCasedRecord,\n  getHeaderNameAsBuffer\n}\n", "'use strict'\n\nconst {\n  wellknownHeaderNames,\n  headerNameLowerCasedRecord\n} = require('./constants')\n\nclass TstNode {\n  /** @type {any} */\n  value = null\n  /** @type {null | TstNode} */\n  left = null\n  /** @type {null | TstNode} */\n  middle = null\n  /** @type {null | TstNode} */\n  right = null\n  /** @type {number} */\n  code\n  /**\n   * @param {string} key\n   * @param {any} value\n   * @param {number} index\n   */\n  constructor (key, value, index) {\n    if (index === undefined || index >= key.length) {\n      throw new TypeError('Unreachable')\n    }\n    const code = this.code = key.charCodeAt(index)\n    // check code is ascii string\n    if (code > 0x7F) {\n      throw new TypeError('key must be ascii string')\n    }\n    if (key.length !== ++index) {\n      this.middle = new TstNode(key, value, index)\n    } else {\n      this.value = value\n    }\n  }\n\n  /**\n   * @param {string} key\n   * @param {any} value\n   * @returns {void}\n   */\n  add (key, value) {\n    const length = key.length\n    if (length === 0) {\n      throw new TypeError('Unreachable')\n    }\n    let index = 0\n    /**\n     * @type {TstNode}\n     */\n    let node = this\n    while (true) {\n      const code = key.charCodeAt(index)\n      // check code is ascii string\n      if (code > 0x7F) {\n        throw new TypeError('key must be ascii string')\n      }\n      if (node.code === code) {\n        if (length === ++index) {\n          node.value = value\n          break\n        } else if (node.middle !== null) {\n          node = node.middle\n        } else {\n          node.middle = new TstNode(key, value, index)\n          break\n        }\n      } else if (node.code < code) {\n        if (node.left !== null) {\n          node = node.left\n        } else {\n          node.left = new TstNode(key, value, index)\n          break\n        }\n      } else if (node.right !== null) {\n        node = node.right\n      } else {\n        node.right = new TstNode(key, value, index)\n        break\n      }\n    }\n  }\n\n  /**\n   * @param {Uint8Array} key\n   * @returns {TstNode | null}\n   */\n  search (key) {\n    const keylength = key.length\n    let index = 0\n    /**\n     * @type {TstNode|null}\n     */\n    let node = this\n    while (node !== null && index < keylength) {\n      let code = key[index]\n      // A-Z\n      // First check if it is bigger than 0x5a.\n      // Lowercase letters have higher char codes than uppercase ones.\n      // Also we assume that headers will mostly contain lowercase characters.\n      if (code <= 0x5a && code >= 0x41) {\n        // Lowercase for uppercase.\n        code |= 32\n      }\n      while (node !== null) {\n        if (code === node.code) {\n          if (keylength === ++index) {\n            // Returns Node since it is the last key.\n            return node\n          }\n          node = node.middle\n          break\n        }\n        node = node.code < code ? node.left : node.right\n      }\n    }\n    return null\n  }\n}\n\nclass TernarySearchTree {\n  /** @type {TstNode | null} */\n  node = null\n\n  /**\n   * @param {string} key\n   * @param {any} value\n   * @returns {void}\n   * */\n  insert (key, value) {\n    if (this.node === null) {\n      this.node = new TstNode(key, value, 0)\n    } else {\n      this.node.add(key, value)\n    }\n  }\n\n  /**\n   * @param {Uint8Array} key\n   * @returns {any}\n   */\n  lookup (key) {\n    return this.node?.search(key)?.value ?? null\n  }\n}\n\nconst tree = new TernarySearchTree()\n\nfor (let i = 0; i < wellknownHeaderNames.length; ++i) {\n  const key = headerNameLowerCasedRecord[wellknownHeaderNames[i]]\n  tree.insert(key, key)\n}\n\nmodule.exports = {\n  TernarySearchTree,\n  tree\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { kDestroyed, kBodyUsed, kListeners, kBody } = require('./symbols')\nconst { IncomingMessage } = require('node:http')\nconst stream = require('node:stream')\nconst net = require('node:net')\nconst { stringify } = require('node:querystring')\nconst { EventEmitter: EE } = require('node:events')\nconst timers = require('../util/timers')\nconst { InvalidArgumentError, ConnectTimeoutError } = require('./errors')\nconst { headerNameLowerCasedRecord } = require('./constants')\nconst { tree } = require('./tree')\n\nconst [nodeMajor, nodeMinor] = process.versions.node.split('.', 2).map(v => Number(v))\n\nclass BodyAsyncIterable {\n  constructor (body) {\n    this[kBody] = body\n    this[kBodyUsed] = false\n  }\n\n  async * [Symbol.asyncIterator] () {\n    assert(!this[kBodyUsed], 'disturbed')\n    this[kBodyUsed] = true\n    yield * this[kBody]\n  }\n}\n\nfunction noop () {}\n\n/**\n * @param {*} body\n * @returns {*}\n */\nfunction wrapRequestBody (body) {\n  if (isStream(body)) {\n    // TODO (fix): Provide some way for the user to cache the file to e.g. /tmp\n    // so that it can be dispatched again?\n    // TODO (fix): Do we need 100-expect support to provide a way to do this properly?\n    if (bodyLength(body) === 0) {\n      body\n        .on('data', function () {\n          assert(false)\n        })\n    }\n\n    if (typeof body.readableDidRead !== 'boolean') {\n      body[kBodyUsed] = false\n      EE.prototype.on.call(body, 'data', function () {\n        this[kBodyUsed] = true\n      })\n    }\n\n    return body\n  } else if (body && typeof body.pipeTo === 'function') {\n    // TODO (fix): We can't access ReadableStream internal state\n    // to determine whether or not it has been disturbed. This is just\n    // a workaround.\n    return new BodyAsyncIterable(body)\n  } else if (body && isFormDataLike(body)) {\n    return body\n  } else if (\n    body &&\n    typeof body !== 'string' &&\n    !ArrayBuffer.isView(body) &&\n    isIterable(body)\n  ) {\n    // TODO: Should we allow re-using iterable if !this.opts.idempotent\n    // or through some other flag?\n    return new BodyAsyncIterable(body)\n  } else {\n    return body\n  }\n}\n\n/**\n * @param {*} obj\n * @returns {obj is import('node:stream').Stream}\n */\nfunction isStream (obj) {\n  return obj && typeof obj === 'object' && typeof obj.pipe === 'function' && typeof obj.on === 'function'\n}\n\n/**\n * @param {*} object\n * @returns {object is Blob}\n * based on https://github.com/node-fetch/fetch-blob/blob/8ab587d34080de94140b54f07168451e7d0b655e/index.js#L229-L241 (MIT License)\n */\nfunction isBlobLike (object) {\n  if (object === null) {\n    return false\n  } else if (object instanceof Blob) {\n    return true\n  } else if (typeof object !== 'object') {\n    return false\n  } else {\n    const sTag = object[Symbol.toStringTag]\n\n    return (sTag === 'Blob' || sTag === 'File') && (\n      ('stream' in object && typeof object.stream === 'function') ||\n      ('arrayBuffer' in object && typeof object.arrayBuffer === 'function')\n    )\n  }\n}\n\n/**\n * @param {string} url The path to check for query strings or fragments.\n * @returns {boolean} Returns true if the path contains a query string or fragment.\n */\nfunction pathHasQueryOrFragment (url) {\n  return (\n    url.includes('?') ||\n    url.includes('#')\n  )\n}\n\n/**\n * @param {string} url The URL to add the query params to\n * @param {import('node:querystring').ParsedUrlQueryInput} queryParams The object to serialize into a URL query string\n * @returns {string} The URL with the query params added\n */\nfunction serializePathWithQuery (url, queryParams) {\n  if (pathHasQueryOrFragment(url)) {\n    throw new Error('Query params cannot be passed when url already contains \"?\" or \"#\".')\n  }\n\n  const stringified = stringify(queryParams)\n\n  if (stringified) {\n    url += '?' + stringified\n  }\n\n  return url\n}\n\n/**\n * @param {number|string|undefined} port\n * @returns {boolean}\n */\nfunction isValidPort (port) {\n  const value = parseInt(port, 10)\n  return (\n    value === Number(port) &&\n    value >= 0 &&\n    value <= 65535\n  )\n}\n\n/**\n * Check if the value is a valid http or https prefixed string.\n *\n * @param {string} value\n * @returns {boolean}\n */\nfunction isHttpOrHttpsPrefixed (value) {\n  return (\n    value != null &&\n    value[0] === 'h' &&\n    value[1] === 't' &&\n    value[2] === 't' &&\n    value[3] === 'p' &&\n    (\n      value[4] === ':' ||\n      (\n        value[4] === 's' &&\n        value[5] === ':'\n      )\n    )\n  )\n}\n\n/**\n * @param {string|URL|Record<string,string>} url\n * @returns {URL}\n */\nfunction parseURL (url) {\n  if (typeof url === 'string') {\n    /**\n     * @type {URL}\n     */\n    url = new URL(url)\n\n    if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) {\n      throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.')\n    }\n\n    return url\n  }\n\n  if (!url || typeof url !== 'object') {\n    throw new InvalidArgumentError('Invalid URL: The URL argument must be a non-null object.')\n  }\n\n  if (!(url instanceof URL)) {\n    if (url.port != null && url.port !== '' && isValidPort(url.port) === false) {\n      throw new InvalidArgumentError('Invalid URL: port must be a valid integer or a string representation of an integer.')\n    }\n\n    if (url.path != null && typeof url.path !== 'string') {\n      throw new InvalidArgumentError('Invalid URL path: the path must be a string or null/undefined.')\n    }\n\n    if (url.pathname != null && typeof url.pathname !== 'string') {\n      throw new InvalidArgumentError('Invalid URL pathname: the pathname must be a string or null/undefined.')\n    }\n\n    if (url.hostname != null && typeof url.hostname !== 'string') {\n      throw new InvalidArgumentError('Invalid URL hostname: the hostname must be a string or null/undefined.')\n    }\n\n    if (url.origin != null && typeof url.origin !== 'string') {\n      throw new InvalidArgumentError('Invalid URL origin: the origin must be a string or null/undefined.')\n    }\n\n    if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) {\n      throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.')\n    }\n\n    const port = url.port != null\n      ? url.port\n      : (url.protocol === 'https:' ? 443 : 80)\n    let origin = url.origin != null\n      ? url.origin\n      : `${url.protocol || ''}//${url.hostname || ''}:${port}`\n    let path = url.path != null\n      ? url.path\n      : `${url.pathname || ''}${url.search || ''}`\n\n    if (origin[origin.length - 1] === '/') {\n      origin = origin.slice(0, origin.length - 1)\n    }\n\n    if (path && path[0] !== '/') {\n      path = `/${path}`\n    }\n    // new URL(path, origin) is unsafe when `path` contains an absolute URL\n    // From https://developer.mozilla.org/en-US/docs/Web/API/URL/URL:\n    // If first parameter is a relative URL, second param is required, and will be used as the base URL.\n    // If first parameter is an absolute URL, a given second param will be ignored.\n    return new URL(`${origin}${path}`)\n  }\n\n  if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) {\n    throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.')\n  }\n\n  return url\n}\n\n/**\n * @param {string|URL|Record<string, string>} url\n * @returns {URL}\n */\nfunction parseOrigin (url) {\n  url = parseURL(url)\n\n  if (url.pathname !== '/' || url.search || url.hash) {\n    throw new InvalidArgumentError('invalid url')\n  }\n\n  return url\n}\n\n/**\n * @param {string} host\n * @returns {string}\n */\nfunction getHostname (host) {\n  if (host[0] === '[') {\n    const idx = host.indexOf(']')\n\n    assert(idx !== -1)\n    return host.substring(1, idx)\n  }\n\n  const idx = host.indexOf(':')\n  if (idx === -1) return host\n\n  return host.substring(0, idx)\n}\n\n/**\n * IP addresses are not valid server names per RFC6066\n * Currently, the only server names supported are DNS hostnames\n * @param {string|null} host\n * @returns {string|null}\n */\nfunction getServerName (host) {\n  if (!host) {\n    return null\n  }\n\n  assert(typeof host === 'string')\n\n  const servername = getHostname(host)\n  if (net.isIP(servername)) {\n    return ''\n  }\n\n  return servername\n}\n\n/**\n * @function\n * @template T\n * @param {T} obj\n * @returns {T}\n */\nfunction deepClone (obj) {\n  return JSON.parse(JSON.stringify(obj))\n}\n\n/**\n * @param {*} obj\n * @returns {obj is AsyncIterable}\n */\nfunction isAsyncIterable (obj) {\n  return !!(obj != null && typeof obj[Symbol.asyncIterator] === 'function')\n}\n\n/**\n * @param {*} obj\n * @returns {obj is Iterable}\n */\nfunction isIterable (obj) {\n  return !!(obj != null && (typeof obj[Symbol.iterator] === 'function' || typeof obj[Symbol.asyncIterator] === 'function'))\n}\n\n/**\n * Checks whether an object has a safe Symbol.iterator \u2014 i.e. one that is\n * either own or inherited from a non-Object.prototype chain.  This prevents\n * prototype-pollution attacks from injecting a fake iterator on\n * Object.prototype.\n * @param {object} obj\n * @returns {boolean}\n */\nfunction hasSafeIterator (obj) {\n  const prototype = Object.getPrototypeOf(obj)\n  const ownIterator = Object.prototype.hasOwnProperty.call(obj, Symbol.iterator)\n  return ownIterator || (prototype != null && prototype !== Object.prototype && typeof obj[Symbol.iterator] === 'function')\n}\n\n/**\n * @param {Blob|Buffer|import ('stream').Stream} body\n * @returns {number|null}\n */\nfunction bodyLength (body) {\n  if (body == null) {\n    return 0\n  } else if (isStream(body)) {\n    const state = body._readableState\n    return state && state.objectMode === false && state.ended === true && Number.isFinite(state.length)\n      ? state.length\n      : null\n  } else if (isBlobLike(body)) {\n    return body.size != null ? body.size : null\n  } else if (isBuffer(body)) {\n    return body.byteLength\n  }\n\n  return null\n}\n\n/**\n * @param {import ('stream').Stream} body\n * @returns {boolean}\n */\nfunction isDestroyed (body) {\n  return body && !!(body.destroyed || body[kDestroyed] || (stream.isDestroyed?.(body)))\n}\n\n/**\n * @param {import ('stream').Stream} stream\n * @param {Error} [err]\n * @returns {void}\n */\nfunction destroy (stream, err) {\n  if (stream == null || !isStream(stream) || isDestroyed(stream)) {\n    return\n  }\n\n  if (typeof stream.destroy === 'function') {\n    if (Object.getPrototypeOf(stream).constructor === IncomingMessage) {\n      // See: https://github.com/nodejs/node/pull/38505/files\n      stream.socket = null\n    }\n\n    stream.destroy(err)\n  } else if (err) {\n    queueMicrotask(() => {\n      stream.emit('error', err)\n    })\n  }\n\n  if (stream.destroyed !== true) {\n    stream[kDestroyed] = true\n  }\n}\n\nconst KEEPALIVE_TIMEOUT_EXPR = /timeout=(\\d+)/\n/**\n * @param {string} val\n * @returns {number | null}\n */\nfunction parseKeepAliveTimeout (val) {\n  const m = val.match(KEEPALIVE_TIMEOUT_EXPR)\n  return m ? parseInt(m[1], 10) * 1000 : null\n}\n\n/**\n * Retrieves a header name and returns its lowercase value.\n * @param {string | Buffer} value Header name\n * @returns {string}\n */\nfunction headerNameToString (value) {\n  return typeof value === 'string'\n    ? headerNameLowerCasedRecord[value] ?? value.toLowerCase()\n    : tree.lookup(value) ?? value.toString('latin1').toLowerCase()\n}\n\n/**\n * Receive the buffer as a string and return its lowercase value.\n * @param {Buffer} value Header name\n * @returns {string}\n */\nfunction bufferToLowerCasedHeaderName (value) {\n  return tree.lookup(value) ?? value.toString('latin1').toLowerCase()\n}\n\n/**\n * @param {(Buffer | string)[]} headers\n * @param {Record<string, string | string[]>} [obj]\n * @returns {Record<string, string | string[]>}\n */\nfunction parseHeaders (headers, obj) {\n  if (obj === undefined) obj = {}\n\n  for (let i = 0; i < headers.length; i += 2) {\n    const key = headerNameToString(headers[i])\n    let val = obj[key]\n\n    if (val !== undefined) {\n      if (!Object.hasOwn(obj, key)) {\n        const headersValue = typeof headers[i + 1] === 'string'\n          ? headers[i + 1]\n          : Array.isArray(headers[i + 1])\n            ? headers[i + 1].map(x => x.toString('latin1'))\n            : headers[i + 1].toString('latin1')\n\n        if (key === '__proto__') {\n          Object.defineProperty(obj, key, {\n            value: headersValue,\n            enumerable: true,\n            configurable: true,\n            writable: true\n          })\n        } else {\n          obj[key] = headersValue\n        }\n      } else {\n        if (typeof val === 'string') {\n          val = [val]\n          obj[key] = val\n        }\n        val.push(headers[i + 1].toString('latin1'))\n      }\n    } else {\n      const headersValue = typeof headers[i + 1] === 'string'\n        ? headers[i + 1]\n        : Array.isArray(headers[i + 1])\n          ? headers[i + 1].map(x => x.toString('latin1'))\n          : headers[i + 1].toString('latin1')\n\n      obj[key] = headersValue\n    }\n  }\n\n  return obj\n}\n\n/**\n * @param {Buffer[]} headers\n * @returns {string[]}\n */\nfunction parseRawHeaders (headers) {\n  const headersLength = headers.length\n  /**\n   * @type {string[]}\n   */\n  const ret = new Array(headersLength)\n\n  let key\n  let val\n\n  for (let n = 0; n < headersLength; n += 2) {\n    key = headers[n]\n    val = headers[n + 1]\n\n    typeof key !== 'string' && (key = key.toString())\n    typeof val !== 'string' && (val = val.toString('latin1'))\n\n    ret[n] = key\n    ret[n + 1] = val\n  }\n\n  return ret\n}\n\n/**\n * @param {string[]} headers\n * @param {Buffer[]} headers\n */\nfunction encodeRawHeaders (headers) {\n  if (!Array.isArray(headers)) {\n    throw new TypeError('expected headers to be an array')\n  }\n  return headers.map(x => Buffer.from(x))\n}\n\n/**\n * @param {*} buffer\n * @returns {buffer is Buffer}\n */\nfunction isBuffer (buffer) {\n  // See, https://github.com/mcollina/undici/pull/319\n  return buffer instanceof Uint8Array || Buffer.isBuffer(buffer)\n}\n\n/**\n * Asserts that the handler object is a request handler.\n *\n * @param {object} handler\n * @param {string} method\n * @param {string} [upgrade]\n * @returns {asserts handler is import('../api/api-request').RequestHandler}\n */\nfunction assertRequestHandler (handler, method, upgrade) {\n  if (!handler || typeof handler !== 'object') {\n    throw new InvalidArgumentError('handler must be an object')\n  }\n\n  if (typeof handler.onRequestStart === 'function') {\n    // TODO (fix): More checks...\n    return\n  }\n\n  if (typeof handler.onConnect !== 'function') {\n    throw new InvalidArgumentError('invalid onConnect method')\n  }\n\n  if (typeof handler.onError !== 'function') {\n    throw new InvalidArgumentError('invalid onError method')\n  }\n\n  if (typeof handler.onBodySent !== 'function' && handler.onBodySent !== undefined) {\n    throw new InvalidArgumentError('invalid onBodySent method')\n  }\n\n  if (upgrade || method === 'CONNECT') {\n    if (typeof handler.onUpgrade !== 'function') {\n      throw new InvalidArgumentError('invalid onUpgrade method')\n    }\n  } else {\n    if (typeof handler.onHeaders !== 'function') {\n      throw new InvalidArgumentError('invalid onHeaders method')\n    }\n\n    if (typeof handler.onData !== 'function') {\n      throw new InvalidArgumentError('invalid onData method')\n    }\n\n    if (typeof handler.onComplete !== 'function') {\n      throw new InvalidArgumentError('invalid onComplete method')\n    }\n  }\n}\n\n/**\n * A body is disturbed if it has been read from and it cannot be re-used without\n * losing state or data.\n * @param {import('node:stream').Readable} body\n * @returns {boolean}\n */\nfunction isDisturbed (body) {\n  // TODO (fix): Why is body[kBodyUsed] needed?\n  return !!(body && (stream.isDisturbed(body) || body[kBodyUsed]))\n}\n\n/**\n * @typedef {object} SocketInfo\n * @property {string} [localAddress]\n * @property {number} [localPort]\n * @property {string} [remoteAddress]\n * @property {number} [remotePort]\n * @property {string} [remoteFamily]\n * @property {number} [timeout]\n * @property {number} bytesWritten\n * @property {number} bytesRead\n */\n\n/**\n * @param {import('net').Socket} socket\n * @returns {SocketInfo}\n */\nfunction getSocketInfo (socket) {\n  return {\n    localAddress: socket.localAddress,\n    localPort: socket.localPort,\n    remoteAddress: socket.remoteAddress,\n    remotePort: socket.remotePort,\n    remoteFamily: socket.remoteFamily,\n    timeout: socket.timeout,\n    bytesWritten: socket.bytesWritten,\n    bytesRead: socket.bytesRead\n  }\n}\n\n/**\n * @param {Iterable} iterable\n * @returns {ReadableStream}\n */\nfunction ReadableStreamFrom (iterable) {\n  // We cannot use ReadableStream.from here because it does not return a byte stream.\n\n  let iterator\n  return new ReadableStream(\n    {\n      start () {\n        iterator = iterable[Symbol.asyncIterator]()\n      },\n      pull (controller) {\n        return iterator.next().then(({ done, value }) => {\n          if (done) {\n            return queueMicrotask(() => {\n              controller.close()\n              controller.byobRequest?.respond(0)\n            })\n          } else {\n            const buf = Buffer.isBuffer(value) ? value : Buffer.from(value)\n            if (buf.byteLength) {\n              return controller.enqueue(new Uint8Array(buf))\n            } else {\n              return this.pull(controller)\n            }\n          }\n        })\n      },\n      cancel () {\n        return iterator.return()\n      },\n      type: 'bytes'\n    }\n  )\n}\n\n/**\n * The object should be a FormData instance and contains all the required\n * methods.\n * @param {*} object\n * @returns {object is FormData}\n */\nfunction isFormDataLike (object) {\n  return (\n    object &&\n    typeof object === 'object' &&\n    typeof object.append === 'function' &&\n    typeof object.delete === 'function' &&\n    typeof object.get === 'function' &&\n    typeof object.getAll === 'function' &&\n    typeof object.has === 'function' &&\n    typeof object.set === 'function' &&\n    object[Symbol.toStringTag] === 'FormData'\n  )\n}\n\nfunction addAbortListener (signal, listener) {\n  if ('addEventListener' in signal) {\n    signal.addEventListener('abort', listener, { once: true })\n    return () => signal.removeEventListener('abort', listener)\n  }\n  signal.once('abort', listener)\n  return () => signal.removeListener('abort', listener)\n}\n\nconst validTokenChars = new Uint8Array([\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0-15\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16-31\n  0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32-47 (!\"#$%&'()*+,-./)\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48-63 (0-9:;<=>?)\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64-79 (@A-O)\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80-95 (P-Z[\\]^_)\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96-111 (`a-o)\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, // 112-127 (p-z{|}~)\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 128-143\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 144-159\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 160-175\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 176-191\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 192-207\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 208-223\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 224-239\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0  // 240-255\n])\n\n/**\n * @see https://tools.ietf.org/html/rfc7230#section-3.2.6\n * @param {number} c\n * @returns {boolean}\n */\nfunction isTokenCharCode (c) {\n  return (validTokenChars[c] === 1)\n}\n\nconst tokenRegExp = /^[\\^_`a-zA-Z\\-0-9!#$%&'*+.|~]+$/\n\n/**\n * @param {string} characters\n * @returns {boolean}\n */\nfunction isValidHTTPToken (characters) {\n  if (characters.length >= 12) return tokenRegExp.test(characters)\n  if (characters.length === 0) return false\n\n  for (let i = 0; i < characters.length; i++) {\n    if (validTokenChars[characters.charCodeAt(i)] !== 1) {\n      return false\n    }\n  }\n  return true\n}\n\n// headerCharRegex have been lifted from\n// https://github.com/nodejs/node/blob/main/lib/_http_common.js\n\n/**\n * Matches if val contains an invalid field-vchar\n *  field-value    = *( field-content / obs-fold )\n *  field-content  = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n *  field-vchar    = VCHAR / obs-text\n */\nconst headerCharRegex = /[^\\t\\x20-\\x7e\\x80-\\xff]/\n\n/**\n * @param {string} characters\n * @returns {boolean}\n */\nfunction isValidHeaderValue (characters) {\n  return !headerCharRegex.test(characters)\n}\n\nconst rangeHeaderRegex = /^bytes (\\d+)-(\\d+)\\/(\\d+)?$/\n\n/**\n * @typedef {object} RangeHeader\n * @property {number} start\n * @property {number | null} end\n * @property {number | null} size\n */\n\n/**\n * Parse accordingly to RFC 9110\n * @see https://www.rfc-editor.org/rfc/rfc9110#field.content-range\n * @param {string} [range]\n * @returns {RangeHeader|null}\n */\nfunction parseRangeHeader (range) {\n  if (range == null || range === '') return { start: 0, end: null, size: null }\n\n  const m = range ? range.match(rangeHeaderRegex) : null\n  return m\n    ? {\n        start: parseInt(m[1]),\n        end: m[2] ? parseInt(m[2]) : null,\n        size: m[3] ? parseInt(m[3]) : null\n      }\n    : null\n}\n\n/**\n * @template {import(\"events\").EventEmitter} T\n * @param {T} obj\n * @param {string} name\n * @param {(...args: any[]) => void} listener\n * @returns {T}\n */\nfunction addListener (obj, name, listener) {\n  const listeners = (obj[kListeners] ??= [])\n  listeners.push([name, listener])\n  obj.on(name, listener)\n  return obj\n}\n\n/**\n * @template {import(\"events\").EventEmitter} T\n * @param {T} obj\n * @returns {T}\n */\nfunction removeAllListeners (obj) {\n  if (obj[kListeners] != null) {\n    for (const [name, listener] of obj[kListeners]) {\n      obj.removeListener(name, listener)\n    }\n    obj[kListeners] = null\n  }\n  return obj\n}\n\n/**\n * @param {import ('../dispatcher/client')} client\n * @param {import ('../core/request')} request\n * @param {Error} err\n */\nfunction errorRequest (client, request, err) {\n  try {\n    request.onError(err)\n    assert(request.aborted)\n  } catch (err) {\n    client.emit('error', err)\n  }\n}\n\n/**\n * @param {WeakRef<net.Socket>} socketWeakRef\n * @param {object} opts\n * @param {number} opts.timeout\n * @param {string} opts.hostname\n * @param {number} opts.port\n * @returns {() => void}\n */\nconst setupConnectTimeout = process.platform === 'win32'\n  ? (socketWeakRef, opts) => {\n      if (!opts.timeout) {\n        return noop\n      }\n\n      let s1 = null\n      let s2 = null\n      const fastTimer = timers.setFastTimeout(() => {\n      // setImmediate is added to make sure that we prioritize socket error events over timeouts\n        s1 = setImmediate(() => {\n        // Windows needs an extra setImmediate probably due to implementation differences in the socket logic\n          s2 = setImmediate(() => onConnectTimeout(socketWeakRef.deref(), opts))\n        })\n      }, opts.timeout)\n      return () => {\n        timers.clearFastTimeout(fastTimer)\n        clearImmediate(s1)\n        clearImmediate(s2)\n      }\n    }\n  : (socketWeakRef, opts) => {\n      if (!opts.timeout) {\n        return noop\n      }\n\n      let s1 = null\n      const fastTimer = timers.setFastTimeout(() => {\n      // setImmediate is added to make sure that we prioritize socket error events over timeouts\n        s1 = setImmediate(() => {\n          onConnectTimeout(socketWeakRef.deref(), opts)\n        })\n      }, opts.timeout)\n      return () => {\n        timers.clearFastTimeout(fastTimer)\n        clearImmediate(s1)\n      }\n    }\n\n/**\n * @param {net.Socket} socket\n * @param {object} opts\n * @param {number} opts.timeout\n * @param {string} opts.hostname\n * @param {number} opts.port\n */\nfunction onConnectTimeout (socket, opts) {\n  // The socket could be already garbage collected\n  if (socket == null) {\n    return\n  }\n\n  let message = 'Connect Timeout Error'\n  if (Array.isArray(socket.autoSelectFamilyAttemptedAddresses)) {\n    message += ` (attempted addresses: ${socket.autoSelectFamilyAttemptedAddresses.join(', ')},`\n  } else {\n    message += ` (attempted address: ${opts.hostname}:${opts.port},`\n  }\n\n  message += ` timeout: ${opts.timeout}ms)`\n\n  destroy(socket, new ConnectTimeoutError(message))\n}\n\n/**\n * @param {string} urlString\n * @returns {string}\n */\nfunction getProtocolFromUrlString (urlString) {\n  if (\n    urlString[0] === 'h' &&\n    urlString[1] === 't' &&\n    urlString[2] === 't' &&\n    urlString[3] === 'p'\n  ) {\n    switch (urlString[4]) {\n      case ':':\n        return 'http:'\n      case 's':\n        if (urlString[5] === ':') {\n          return 'https:'\n        }\n    }\n  }\n  // fallback if none of the usual suspects\n  return urlString.slice(0, urlString.indexOf(':') + 1)\n}\n\nconst kEnumerableProperty = Object.create(null)\nkEnumerableProperty.enumerable = true\n\nconst normalizedMethodRecordsBase = {\n  delete: 'DELETE',\n  DELETE: 'DELETE',\n  get: 'GET',\n  GET: 'GET',\n  head: 'HEAD',\n  HEAD: 'HEAD',\n  options: 'OPTIONS',\n  OPTIONS: 'OPTIONS',\n  post: 'POST',\n  POST: 'POST',\n  put: 'PUT',\n  PUT: 'PUT'\n}\n\nconst normalizedMethodRecords = {\n  ...normalizedMethodRecordsBase,\n  patch: 'patch',\n  PATCH: 'PATCH'\n}\n\n// Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`.\nObject.setPrototypeOf(normalizedMethodRecordsBase, null)\nObject.setPrototypeOf(normalizedMethodRecords, null)\n\nmodule.exports = {\n  kEnumerableProperty,\n  isDisturbed,\n  isBlobLike,\n  parseOrigin,\n  parseURL,\n  getServerName,\n  isStream,\n  isIterable,\n  hasSafeIterator,\n  isAsyncIterable,\n  isDestroyed,\n  headerNameToString,\n  bufferToLowerCasedHeaderName,\n  addListener,\n  removeAllListeners,\n  errorRequest,\n  parseRawHeaders,\n  encodeRawHeaders,\n  parseHeaders,\n  parseKeepAliveTimeout,\n  destroy,\n  bodyLength,\n  deepClone,\n  ReadableStreamFrom,\n  isBuffer,\n  assertRequestHandler,\n  getSocketInfo,\n  isFormDataLike,\n  pathHasQueryOrFragment,\n  serializePathWithQuery,\n  addAbortListener,\n  isValidHTTPToken,\n  isValidHeaderValue,\n  isTokenCharCode,\n  parseRangeHeader,\n  normalizedMethodRecordsBase,\n  normalizedMethodRecords,\n  isValidPort,\n  isHttpOrHttpsPrefixed,\n  nodeMajor,\n  nodeMinor,\n  safeHTTPMethods: Object.freeze(['GET', 'HEAD', 'OPTIONS', 'TRACE']),\n  wrapRequestBody,\n  setupConnectTimeout,\n  getProtocolFromUrlString\n}\n", "'use strict'\n\nconst {\n  kConnected,\n  kPending,\n  kRunning,\n  kSize,\n  kFree,\n  kQueued\n} = require('../core/symbols')\n\nclass ClientStats {\n  constructor (client) {\n    this.connected = client[kConnected]\n    this.pending = client[kPending]\n    this.running = client[kRunning]\n    this.size = client[kSize]\n  }\n}\n\nclass PoolStats {\n  constructor (pool) {\n    this.connected = pool[kConnected]\n    this.free = pool[kFree]\n    this.pending = pool[kPending]\n    this.queued = pool[kQueued]\n    this.running = pool[kRunning]\n    this.size = pool[kSize]\n  }\n}\n\nmodule.exports = { ClientStats, PoolStats }\n", "'use strict'\n\nconst diagnosticsChannel = require('node:diagnostics_channel')\nconst util = require('node:util')\n\nconst undiciDebugLog = util.debuglog('undici')\nconst fetchDebuglog = util.debuglog('fetch')\nconst websocketDebuglog = util.debuglog('websocket')\n\nconst channels = {\n  // Client\n  beforeConnect: diagnosticsChannel.channel('undici:client:beforeConnect'),\n  connected: diagnosticsChannel.channel('undici:client:connected'),\n  connectError: diagnosticsChannel.channel('undici:client:connectError'),\n  sendHeaders: diagnosticsChannel.channel('undici:client:sendHeaders'),\n  // Request\n  create: diagnosticsChannel.channel('undici:request:create'),\n  bodySent: diagnosticsChannel.channel('undici:request:bodySent'),\n  bodyChunkSent: diagnosticsChannel.channel('undici:request:bodyChunkSent'),\n  bodyChunkReceived: diagnosticsChannel.channel('undici:request:bodyChunkReceived'),\n  headers: diagnosticsChannel.channel('undici:request:headers'),\n  trailers: diagnosticsChannel.channel('undici:request:trailers'),\n  error: diagnosticsChannel.channel('undici:request:error'),\n  // WebSocket\n  open: diagnosticsChannel.channel('undici:websocket:open'),\n  close: diagnosticsChannel.channel('undici:websocket:close'),\n  socketError: diagnosticsChannel.channel('undici:websocket:socket_error'),\n  ping: diagnosticsChannel.channel('undici:websocket:ping'),\n  pong: diagnosticsChannel.channel('undici:websocket:pong'),\n  // ProxyAgent\n  proxyConnected: diagnosticsChannel.channel('undici:proxy:connected')\n}\n\nlet isTrackingClientEvents = false\n\nfunction trackClientEvents (debugLog = undiciDebugLog) {\n  if (isTrackingClientEvents) {\n    return\n  }\n\n  // Check if any of the channels already have subscribers to prevent duplicate subscriptions\n  // This can happen when both Node.js built-in undici and undici as a dependency are present\n  if (channels.beforeConnect.hasSubscribers || channels.connected.hasSubscribers ||\n      channels.connectError.hasSubscribers || channels.sendHeaders.hasSubscribers) {\n    isTrackingClientEvents = true\n    return\n  }\n\n  isTrackingClientEvents = true\n\n  diagnosticsChannel.subscribe('undici:client:beforeConnect',\n    evt => {\n      const {\n        connectParams: { version, protocol, port, host }\n      } = evt\n      debugLog(\n        'connecting to %s%s using %s%s',\n        host,\n        port ? `:${port}` : '',\n        protocol,\n        version\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:client:connected',\n    evt => {\n      const {\n        connectParams: { version, protocol, port, host }\n      } = evt\n      debugLog(\n        'connected to %s%s using %s%s',\n        host,\n        port ? `:${port}` : '',\n        protocol,\n        version\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:client:connectError',\n    evt => {\n      const {\n        connectParams: { version, protocol, port, host },\n        error\n      } = evt\n      debugLog(\n        'connection to %s%s using %s%s errored - %s',\n        host,\n        port ? `:${port}` : '',\n        protocol,\n        version,\n        error.message\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:client:sendHeaders',\n    evt => {\n      const {\n        request: { method, path, origin }\n      } = evt\n      debugLog('sending request to %s %s%s', method, origin, path)\n    })\n}\n\nlet isTrackingRequestEvents = false\n\nfunction trackRequestEvents (debugLog = undiciDebugLog) {\n  if (isTrackingRequestEvents) {\n    return\n  }\n\n  // Check if any of the channels already have subscribers to prevent duplicate subscriptions\n  // This can happen when both Node.js built-in undici and undici as a dependency are present\n  if (channels.headers.hasSubscribers || channels.trailers.hasSubscribers ||\n      channels.error.hasSubscribers) {\n    isTrackingRequestEvents = true\n    return\n  }\n\n  isTrackingRequestEvents = true\n\n  diagnosticsChannel.subscribe('undici:request:headers',\n    evt => {\n      const {\n        request: { method, path, origin },\n        response: { statusCode }\n      } = evt\n      debugLog(\n        'received response to %s %s%s - HTTP %d',\n        method,\n        origin,\n        path,\n        statusCode\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:request:trailers',\n    evt => {\n      const {\n        request: { method, path, origin }\n      } = evt\n      debugLog('trailers received from %s %s%s', method, origin, path)\n    })\n\n  diagnosticsChannel.subscribe('undici:request:error',\n    evt => {\n      const {\n        request: { method, path, origin },\n        error\n      } = evt\n      debugLog(\n        'request to %s %s%s errored - %s',\n        method,\n        origin,\n        path,\n        error.message\n      )\n    })\n}\n\nlet isTrackingWebSocketEvents = false\n\nfunction trackWebSocketEvents (debugLog = websocketDebuglog) {\n  if (isTrackingWebSocketEvents) {\n    return\n  }\n\n  // Check if any of the channels already have subscribers to prevent duplicate subscriptions\n  // This can happen when both Node.js built-in undici and undici as a dependency are present\n  if (channels.open.hasSubscribers || channels.close.hasSubscribers ||\n      channels.socketError.hasSubscribers || channels.ping.hasSubscribers ||\n      channels.pong.hasSubscribers) {\n    isTrackingWebSocketEvents = true\n    return\n  }\n\n  isTrackingWebSocketEvents = true\n\n  diagnosticsChannel.subscribe('undici:websocket:open',\n    evt => {\n      if (evt.address != null) {\n        const { address, port } = evt.address\n        debugLog('connection opened %s%s', address, port ? `:${port}` : '')\n      } else {\n        debugLog('connection opened')\n      }\n    })\n\n  diagnosticsChannel.subscribe('undici:websocket:close',\n    evt => {\n      const { websocket, code, reason } = evt\n      debugLog(\n        'closed connection to %s - %s %s',\n        websocket.url,\n        code,\n        reason\n      )\n    })\n\n  diagnosticsChannel.subscribe('undici:websocket:socket_error',\n    err => {\n      debugLog('connection errored - %s', err.message)\n    })\n\n  diagnosticsChannel.subscribe('undici:websocket:ping',\n    evt => {\n      debugLog('ping received')\n    })\n\n  diagnosticsChannel.subscribe('undici:websocket:pong',\n    evt => {\n      debugLog('pong received')\n    })\n}\n\nif (undiciDebugLog.enabled || fetchDebuglog.enabled) {\n  trackClientEvents(fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog)\n  trackRequestEvents(fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog)\n}\n\nif (websocketDebuglog.enabled) {\n  trackClientEvents(undiciDebugLog.enabled ? undiciDebugLog : websocketDebuglog)\n  trackWebSocketEvents(websocketDebuglog)\n}\n\nmodule.exports = {\n  channels\n}\n", "'use strict'\n\nconst {\n  InvalidArgumentError,\n  NotSupportedError\n} = require('./errors')\nconst assert = require('node:assert')\nconst {\n  isValidHTTPToken,\n  isValidHeaderValue,\n  isStream,\n  destroy,\n  isBuffer,\n  isFormDataLike,\n  isIterable,\n  hasSafeIterator,\n  isBlobLike,\n  serializePathWithQuery,\n  assertRequestHandler,\n  getServerName,\n  normalizedMethodRecords,\n  getProtocolFromUrlString\n} = require('./util')\nconst { channels } = require('./diagnostics.js')\nconst { headerNameLowerCasedRecord } = require('./constants')\n\n// Verifies that a given path is valid does not contain control chars \\x00 to \\x20\nconst invalidPathRegex = /[^\\u0021-\\u00ff]/\n\nfunction isValidContentLengthHeaderValue (val) {\n  if (typeof val !== 'string' || val.length === 0) {\n    return false\n  }\n\n  for (let i = 0; i < val.length; i++) {\n    const charCode = val.charCodeAt(i)\n    if (charCode < 48 || charCode > 57) {\n      return false\n    }\n  }\n\n  return true\n}\n\nconst kHandler = Symbol('handler')\n\nclass Request {\n  constructor (origin, {\n    path,\n    method,\n    body,\n    headers,\n    query,\n    idempotent,\n    blocking,\n    upgrade,\n    headersTimeout,\n    bodyTimeout,\n    reset,\n    expectContinue,\n    servername,\n    throwOnError,\n    maxRedirections,\n    typeOfService\n  }, handler) {\n    if (typeof path !== 'string') {\n      throw new InvalidArgumentError('path must be a string')\n    } else if (\n      path[0] !== '/' &&\n      !(path.startsWith('http://') || path.startsWith('https://')) &&\n      method !== 'CONNECT'\n    ) {\n      throw new InvalidArgumentError('path must be an absolute URL or start with a slash')\n    } else if (invalidPathRegex.test(path)) {\n      throw new InvalidArgumentError('invalid request path')\n    }\n\n    if (typeof method !== 'string') {\n      throw new InvalidArgumentError('method must be a string')\n    } else if (normalizedMethodRecords[method] === undefined && !isValidHTTPToken(method)) {\n      throw new InvalidArgumentError('invalid request method')\n    }\n\n    if (upgrade && typeof upgrade !== 'string') {\n      throw new InvalidArgumentError('upgrade must be a string')\n    }\n\n    if (upgrade && !isValidHeaderValue(upgrade)) {\n      throw new InvalidArgumentError('invalid upgrade header')\n    }\n\n    if (headersTimeout != null && (!Number.isFinite(headersTimeout) || headersTimeout < 0)) {\n      throw new InvalidArgumentError('invalid headersTimeout')\n    }\n\n    if (bodyTimeout != null && (!Number.isFinite(bodyTimeout) || bodyTimeout < 0)) {\n      throw new InvalidArgumentError('invalid bodyTimeout')\n    }\n\n    if (reset != null && typeof reset !== 'boolean') {\n      throw new InvalidArgumentError('invalid reset')\n    }\n\n    if (expectContinue != null && typeof expectContinue !== 'boolean') {\n      throw new InvalidArgumentError('invalid expectContinue')\n    }\n\n    if (throwOnError != null) {\n      throw new InvalidArgumentError('invalid throwOnError')\n    }\n\n    if (maxRedirections != null && maxRedirections !== 0) {\n      throw new InvalidArgumentError('maxRedirections is not supported, use the redirect interceptor')\n    }\n\n    if (typeOfService != null && (!Number.isInteger(typeOfService) || typeOfService < 0 || typeOfService > 255)) {\n      throw new InvalidArgumentError('typeOfService must be an integer between 0 and 255')\n    }\n\n    this.headersTimeout = headersTimeout\n\n    this.bodyTimeout = bodyTimeout\n\n    this.method = method\n\n    this.typeOfService = typeOfService ?? 0\n\n    this.abort = null\n\n    if (body == null) {\n      this.body = null\n    } else if (isStream(body)) {\n      this.body = body\n\n      const rState = this.body._readableState\n      if (!rState || !rState.autoDestroy) {\n        this.endHandler = function autoDestroy () {\n          destroy(this)\n        }\n        this.body.on('end', this.endHandler)\n      }\n\n      this.errorHandler = err => {\n        if (this.abort) {\n          this.abort(err)\n        } else {\n          this.error = err\n        }\n      }\n      this.body.on('error', this.errorHandler)\n    } else if (isBuffer(body)) {\n      this.body = body.byteLength ? body : null\n    } else if (ArrayBuffer.isView(body)) {\n      this.body = body.buffer.byteLength ? Buffer.from(body.buffer, body.byteOffset, body.byteLength) : null\n    } else if (body instanceof ArrayBuffer) {\n      this.body = body.byteLength ? Buffer.from(body) : null\n    } else if (typeof body === 'string') {\n      this.body = body.length ? Buffer.from(body) : null\n    } else if (isFormDataLike(body) || isIterable(body) || isBlobLike(body)) {\n      this.body = body\n    } else {\n      throw new InvalidArgumentError('body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable')\n    }\n\n    this.completed = false\n    this.aborted = false\n\n    this.upgrade = upgrade || null\n\n    this.path = query ? serializePathWithQuery(path, query) : path\n\n    // TODO: shall we maybe standardize it to an URL object?\n    this.origin = origin\n\n    this.protocol = getProtocolFromUrlString(origin)\n\n    this.idempotent = idempotent == null\n      ? method === 'HEAD' || method === 'GET'\n      : idempotent\n\n    this.blocking = blocking ?? this.method !== 'HEAD'\n\n    this.reset = reset == null ? null : reset\n\n    this.host = null\n\n    this.contentLength = null\n\n    this.contentType = null\n\n    this.headers = []\n\n    // Only for H2\n    this.expectContinue = expectContinue != null ? expectContinue : false\n\n    if (Array.isArray(headers)) {\n      if (headers.length % 2 !== 0) {\n        throw new InvalidArgumentError('headers array must be even')\n      }\n      for (let i = 0; i < headers.length; i += 2) {\n        processHeader(this, headers[i], headers[i + 1])\n      }\n    } else if (headers && typeof headers === 'object') {\n      if (hasSafeIterator(headers)) {\n        for (const header of headers) {\n          if (!Array.isArray(header) || header.length !== 2) {\n            throw new InvalidArgumentError('headers must be in key-value pair format')\n          }\n          processHeader(this, header[0], header[1])\n        }\n      } else {\n        const keys = Object.keys(headers)\n        for (let i = 0; i < keys.length; ++i) {\n          processHeader(this, keys[i], headers[keys[i]])\n        }\n      }\n    } else if (headers != null) {\n      throw new InvalidArgumentError('headers must be an object or an array')\n    }\n\n    assertRequestHandler(handler, method, upgrade)\n\n    this.servername = servername || getServerName(this.host) || null\n\n    this[kHandler] = handler\n\n    if (channels.create.hasSubscribers) {\n      channels.create.publish({ request: this })\n    }\n  }\n\n  onBodySent (chunk) {\n    if (channels.bodyChunkSent.hasSubscribers) {\n      channels.bodyChunkSent.publish({ request: this, chunk })\n    }\n    if (this[kHandler].onBodySent) {\n      try {\n        return this[kHandler].onBodySent(chunk)\n      } catch (err) {\n        this.abort(err)\n      }\n    }\n  }\n\n  onRequestSent () {\n    if (channels.bodySent.hasSubscribers) {\n      channels.bodySent.publish({ request: this })\n    }\n\n    if (this[kHandler].onRequestSent) {\n      try {\n        return this[kHandler].onRequestSent()\n      } catch (err) {\n        this.abort(err)\n      }\n    }\n  }\n\n  onConnect (abort) {\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    if (this.error) {\n      abort(this.error)\n    } else {\n      this.abort = abort\n      return this[kHandler].onConnect(abort)\n    }\n  }\n\n  onResponseStarted () {\n    return this[kHandler].onResponseStarted?.()\n  }\n\n  onHeaders (statusCode, headers, resume, statusText) {\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    if (channels.headers.hasSubscribers) {\n      channels.headers.publish({ request: this, response: { statusCode, headers, statusText } })\n    }\n\n    try {\n      return this[kHandler].onHeaders(statusCode, headers, resume, statusText)\n    } catch (err) {\n      this.abort(err)\n    }\n  }\n\n  onData (chunk) {\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    if (channels.bodyChunkReceived.hasSubscribers) {\n      channels.bodyChunkReceived.publish({ request: this, chunk })\n    }\n    try {\n      return this[kHandler].onData(chunk)\n    } catch (err) {\n      this.abort(err)\n      return false\n    }\n  }\n\n  onUpgrade (statusCode, headers, socket) {\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    return this[kHandler].onUpgrade(statusCode, headers, socket)\n  }\n\n  onComplete (trailers) {\n    this.onFinally()\n\n    assert(!this.aborted)\n    assert(!this.completed)\n\n    this.completed = true\n    if (channels.trailers.hasSubscribers) {\n      channels.trailers.publish({ request: this, trailers })\n    }\n\n    try {\n      return this[kHandler].onComplete(trailers)\n    } catch (err) {\n      // TODO (fix): This might be a bad idea?\n      this.onError(err)\n    }\n  }\n\n  onError (error) {\n    this.onFinally()\n\n    if (channels.error.hasSubscribers) {\n      channels.error.publish({ request: this, error })\n    }\n\n    if (this.aborted) {\n      return\n    }\n    this.aborted = true\n\n    return this[kHandler].onError(error)\n  }\n\n  onFinally () {\n    if (this.errorHandler) {\n      this.body.off('error', this.errorHandler)\n      this.errorHandler = null\n    }\n\n    if (this.endHandler) {\n      this.body.off('end', this.endHandler)\n      this.endHandler = null\n    }\n  }\n\n  addHeader (key, value) {\n    processHeader(this, key, value)\n    return this\n  }\n}\n\nfunction processHeader (request, key, val) {\n  if (val && (typeof val === 'object' && !Array.isArray(val))) {\n    throw new InvalidArgumentError(`invalid ${key} header`)\n  } else if (val === undefined) {\n    return\n  }\n\n  let headerName = headerNameLowerCasedRecord[key]\n\n  if (headerName === undefined) {\n    headerName = key.toLowerCase()\n    if (headerNameLowerCasedRecord[headerName] === undefined && !isValidHTTPToken(headerName)) {\n      throw new InvalidArgumentError('invalid header key')\n    }\n  }\n\n  if (Array.isArray(val)) {\n    const arr = []\n    for (let i = 0; i < val.length; i++) {\n      if (typeof val[i] === 'string') {\n        if (!isValidHeaderValue(val[i])) {\n          throw new InvalidArgumentError(`invalid ${key} header`)\n        }\n        arr.push(val[i])\n      } else if (val[i] === null) {\n        arr.push('')\n      } else if (typeof val[i] === 'object') {\n        throw new InvalidArgumentError(`invalid ${key} header`)\n      } else {\n        // Coerce primitives (and reject unsafe coercions such as functions\n        // with a crafted toString/Symbol.toPrimitive).\n        const str = `${val[i]}`\n        if (!isValidHeaderValue(str)) {\n          throw new InvalidArgumentError(`invalid ${key} header`)\n        }\n        arr.push(str)\n      }\n    }\n    val = arr\n  } else if (typeof val === 'string') {\n    if (!isValidHeaderValue(val)) {\n      throw new InvalidArgumentError(`invalid ${key} header`)\n    }\n  } else if (val === null) {\n    val = ''\n  } else {\n    // Coerce primitives (and reject unsafe coercions such as functions\n    // with a crafted toString/Symbol.toPrimitive).\n    val = `${val}`\n    if (!isValidHeaderValue(val)) {\n      throw new InvalidArgumentError(`invalid ${key} header`)\n    }\n  }\n\n  if (headerName === 'host') {\n    if (request.host !== null) {\n      throw new InvalidArgumentError('duplicate host header')\n    }\n    if (typeof val !== 'string') {\n      throw new InvalidArgumentError('invalid host header')\n    }\n    // Consumed by Client\n    request.host = val\n  } else if (headerName === 'content-length') {\n    if (request.contentLength !== null) {\n      throw new InvalidArgumentError('duplicate content-length header')\n    }\n    if (!isValidContentLengthHeaderValue(val)) {\n      throw new InvalidArgumentError('invalid content-length header')\n    }\n    request.contentLength = parseInt(val, 10)\n  } else if (request.contentType === null && headerName === 'content-type') {\n    request.contentType = val\n    request.headers.push(key, val)\n  } else if (headerName === 'transfer-encoding' || headerName === 'keep-alive' || headerName === 'upgrade') {\n    throw new InvalidArgumentError(`invalid ${headerName} header`)\n  } else if (headerName === 'connection') {\n    // Per RFC 7230 Section 6.1, Connection header can contain\n    // a comma-separated list of connection option tokens (header names)\n    const value = typeof val === 'string' ? val : null\n    if (value === null) {\n      throw new InvalidArgumentError('invalid connection header')\n    }\n\n    for (const token of value.toLowerCase().split(',')) {\n      const trimmed = token.trim()\n      if (!isValidHTTPToken(trimmed)) {\n        throw new InvalidArgumentError('invalid connection header')\n      }\n      if (trimmed === 'close') {\n        request.reset = true\n      }\n    }\n  } else if (headerName === 'expect') {\n    throw new NotSupportedError('expect header not supported')\n  } else {\n    request.headers.push(key, val)\n  }\n}\n\nmodule.exports = Request\n", "'use strict'\n\nconst { InvalidArgumentError } = require('../core/errors')\n\nmodule.exports = class WrapHandler {\n  #handler\n\n  constructor (handler) {\n    this.#handler = handler\n  }\n\n  static wrap (handler) {\n    // TODO (fix): More checks...\n    return handler.onRequestStart ? handler : new WrapHandler(handler)\n  }\n\n  // Unwrap Interface\n\n  onConnect (abort, context) {\n    return this.#handler.onConnect?.(abort, context)\n  }\n\n  onResponseStarted () {\n    return this.#handler.onResponseStarted?.()\n  }\n\n  onHeaders (statusCode, rawHeaders, resume, statusMessage) {\n    return this.#handler.onHeaders?.(statusCode, rawHeaders, resume, statusMessage)\n  }\n\n  onUpgrade (statusCode, rawHeaders, socket) {\n    return this.#handler.onUpgrade?.(statusCode, rawHeaders, socket)\n  }\n\n  onData (data) {\n    return this.#handler.onData?.(data)\n  }\n\n  onComplete (trailers) {\n    return this.#handler.onComplete?.(trailers)\n  }\n\n  onError (err) {\n    if (!this.#handler.onError) {\n      throw err\n    }\n\n    return this.#handler.onError?.(err)\n  }\n\n  // Wrap Interface\n\n  onRequestStart (controller, context) {\n    this.#handler.onConnect?.((reason) => controller.abort(reason), context)\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    const rawHeaders = []\n    for (const [key, val] of Object.entries(headers)) {\n      rawHeaders.push(Buffer.from(key, 'latin1'), toRawHeaderValue(val))\n    }\n\n    this.#handler.onUpgrade?.(statusCode, rawHeaders, socket)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    const rawHeaders = []\n    for (const [key, val] of Object.entries(headers)) {\n      rawHeaders.push(Buffer.from(key, 'latin1'), toRawHeaderValue(val))\n    }\n\n    if (this.#handler.onHeaders?.(statusCode, rawHeaders, () => controller.resume(), statusMessage) === false) {\n      controller.pause()\n    }\n  }\n\n  onResponseData (controller, data) {\n    if (this.#handler.onData?.(data) === false) {\n      controller.pause()\n    }\n  }\n\n  onResponseEnd (controller, trailers) {\n    const rawTrailers = []\n    for (const [key, val] of Object.entries(trailers)) {\n      rawTrailers.push(Buffer.from(key, 'latin1'), toRawHeaderValue(val))\n    }\n\n    this.#handler.onComplete?.(rawTrailers)\n  }\n\n  onResponseError (controller, err) {\n    if (!this.#handler.onError) {\n      throw new InvalidArgumentError('invalid onError method')\n    }\n\n    this.#handler.onError?.(err)\n  }\n}\n\nfunction toRawHeaderValue (value) {\n  return Array.isArray(value)\n    ? value.map((item) => Buffer.from(item, 'latin1'))\n    : Buffer.from(value, 'latin1')\n}\n", "'use strict'\nconst EventEmitter = require('node:events')\nconst WrapHandler = require('../handler/wrap-handler')\n\nconst wrapInterceptor = (dispatch) => (opts, handler) => dispatch(opts, WrapHandler.wrap(handler))\n\nclass Dispatcher extends EventEmitter {\n  dispatch () {\n    throw new Error('not implemented')\n  }\n\n  close () {\n    throw new Error('not implemented')\n  }\n\n  destroy () {\n    throw new Error('not implemented')\n  }\n\n  compose (...args) {\n    // So we handle [interceptor1, interceptor2] or interceptor1, interceptor2, ...\n    const interceptors = Array.isArray(args[0]) ? args[0] : args\n    let dispatch = this.dispatch.bind(this)\n\n    for (const interceptor of interceptors) {\n      if (interceptor == null) {\n        continue\n      }\n\n      if (typeof interceptor !== 'function') {\n        throw new TypeError(`invalid interceptor, expected function received ${typeof interceptor}`)\n      }\n\n      dispatch = interceptor(dispatch)\n      dispatch = wrapInterceptor(dispatch)\n\n      if (dispatch == null || typeof dispatch !== 'function' || dispatch.length !== 2) {\n        throw new TypeError('invalid interceptor')\n      }\n    }\n\n    return new Proxy(this, {\n      get: (target, key) => key === 'dispatch' ? dispatch : target[key]\n    })\n  }\n}\n\nmodule.exports = Dispatcher\n", "'use strict'\n\nconst { parseHeaders } = require('../core/util')\nconst { InvalidArgumentError } = require('../core/errors')\n\nconst kResume = Symbol('resume')\n\nclass UnwrapController {\n  #paused = false\n  #reason = null\n  #aborted = false\n  #abort\n\n  [kResume] = null\n\n  rawHeaders = null\n  rawTrailers = null\n\n  constructor (abort) {\n    this.#abort = abort\n  }\n\n  pause () {\n    this.#paused = true\n  }\n\n  resume () {\n    if (this.#paused) {\n      this.#paused = false\n      this[kResume]?.()\n    }\n  }\n\n  abort (reason) {\n    if (!this.#aborted) {\n      this.#aborted = true\n      this.#reason = reason\n      this.#abort(reason)\n    }\n  }\n\n  get aborted () {\n    return this.#aborted\n  }\n\n  get reason () {\n    return this.#reason\n  }\n\n  get paused () {\n    return this.#paused\n  }\n}\n\nmodule.exports = class UnwrapHandler {\n  #handler\n  #controller\n\n  constructor (handler) {\n    this.#handler = handler\n  }\n\n  static unwrap (handler) {\n    // TODO (fix): More checks...\n    return !handler.onRequestStart ? handler : new UnwrapHandler(handler)\n  }\n\n  onConnect (abort, context) {\n    this.#controller = new UnwrapController(abort)\n    this.#handler.onRequestStart?.(this.#controller, context)\n  }\n\n  onResponseStarted () {\n    return this.#handler.onResponseStarted?.()\n  }\n\n  onUpgrade (statusCode, rawHeaders, socket) {\n    this.#controller.rawHeaders = rawHeaders\n    this.#handler.onRequestUpgrade?.(this.#controller, statusCode, parseHeaders(rawHeaders), socket)\n  }\n\n  onHeaders (statusCode, rawHeaders, resume, statusMessage) {\n    this.#controller[kResume] = resume\n    this.#controller.rawHeaders = rawHeaders\n    this.#handler.onResponseStart?.(this.#controller, statusCode, parseHeaders(rawHeaders), statusMessage)\n    return !this.#controller.paused\n  }\n\n  onData (data) {\n    this.#handler.onResponseData?.(this.#controller, data)\n    return !this.#controller.paused\n  }\n\n  onComplete (rawTrailers) {\n    this.#controller.rawTrailers = rawTrailers\n    this.#handler.onResponseEnd?.(this.#controller, parseHeaders(rawTrailers))\n  }\n\n  onError (err) {\n    if (!this.#handler.onResponseError) {\n      throw new InvalidArgumentError('invalid onError method')\n    }\n\n    this.#handler.onResponseError?.(this.#controller, err)\n  }\n}\n", "'use strict'\n\nconst Dispatcher = require('./dispatcher')\nconst UnwrapHandler = require('../handler/unwrap-handler')\nconst {\n  ClientDestroyedError,\n  ClientClosedError,\n  InvalidArgumentError\n} = require('../core/errors')\nconst { kDestroy, kClose, kClosed, kDestroyed, kDispatch } = require('../core/symbols')\n\nconst kOnDestroyed = Symbol('onDestroyed')\nconst kOnClosed = Symbol('onClosed')\nconst kWebSocketOptions = Symbol('webSocketOptions')\n\nclass DispatcherBase extends Dispatcher {\n  /** @type {boolean} */\n  [kDestroyed] = false;\n\n  /** @type {Array<Function|null} */\n  [kOnDestroyed] = null;\n\n  /** @type {boolean} */\n  [kClosed] = false;\n\n  /** @type {Array<Function>|null} */\n  [kOnClosed] = null\n\n  /**\n   * @param {import('../../types/dispatcher').DispatcherOptions} [opts]\n   */\n  constructor (opts) {\n    super()\n    this[kWebSocketOptions] = opts?.webSocket ?? {}\n  }\n\n  /**\n   * @returns {import('../../types/dispatcher').WebSocketOptions}\n   */\n  get webSocketOptions () {\n    return {\n      maxFragments: this[kWebSocketOptions].maxFragments ?? 131072,\n      maxPayloadSize: this[kWebSocketOptions].maxPayloadSize ?? 128 * 1024 * 1024 // 128 MB default\n    }\n  }\n\n  /** @returns {boolean} */\n  get destroyed () {\n    return this[kDestroyed]\n  }\n\n  /** @returns {boolean} */\n  get closed () {\n    return this[kClosed]\n  }\n\n  close (callback) {\n    if (callback === undefined) {\n      return new Promise((resolve, reject) => {\n        this.close((err, data) => {\n          return err ? reject(err) : resolve(data)\n        })\n      })\n    }\n\n    if (typeof callback !== 'function') {\n      throw new InvalidArgumentError('invalid callback')\n    }\n\n    if (this[kDestroyed]) {\n      const err = new ClientDestroyedError()\n      queueMicrotask(() => callback(err, null))\n      return\n    }\n\n    if (this[kClosed]) {\n      if (this[kOnClosed]) {\n        this[kOnClosed].push(callback)\n      } else {\n        queueMicrotask(() => callback(null, null))\n      }\n      return\n    }\n\n    this[kClosed] = true\n    this[kOnClosed] ??= []\n    this[kOnClosed].push(callback)\n\n    const onClosed = () => {\n      const callbacks = this[kOnClosed]\n      this[kOnClosed] = null\n      for (let i = 0; i < callbacks.length; i++) {\n        callbacks[i](null, null)\n      }\n    }\n\n    // Should not error.\n    this[kClose]()\n      .then(() => this.destroy())\n      .then(() => queueMicrotask(onClosed))\n  }\n\n  destroy (err, callback) {\n    if (typeof err === 'function') {\n      callback = err\n      err = null\n    }\n\n    if (callback === undefined) {\n      return new Promise((resolve, reject) => {\n        this.destroy(err, (err, data) => {\n          return err ? reject(err) : resolve(data)\n        })\n      })\n    }\n\n    if (typeof callback !== 'function') {\n      throw new InvalidArgumentError('invalid callback')\n    }\n\n    if (this[kDestroyed]) {\n      if (this[kOnDestroyed]) {\n        this[kOnDestroyed].push(callback)\n      } else {\n        queueMicrotask(() => callback(null, null))\n      }\n      return\n    }\n\n    if (!err) {\n      err = new ClientDestroyedError()\n    }\n\n    this[kDestroyed] = true\n    this[kOnDestroyed] ??= []\n    this[kOnDestroyed].push(callback)\n\n    const onDestroyed = () => {\n      const callbacks = this[kOnDestroyed]\n      this[kOnDestroyed] = null\n      for (let i = 0; i < callbacks.length; i++) {\n        callbacks[i](null, null)\n      }\n    }\n\n    // Should not error.\n    this[kDestroy](err)\n      .then(() => queueMicrotask(onDestroyed))\n  }\n\n  dispatch (opts, handler) {\n    if (!handler || typeof handler !== 'object') {\n      throw new InvalidArgumentError('handler must be an object')\n    }\n\n    handler = UnwrapHandler.unwrap(handler)\n\n    try {\n      if (!opts || typeof opts !== 'object') {\n        throw new InvalidArgumentError('opts must be an object.')\n      }\n\n      if (this[kDestroyed] || this[kOnDestroyed]) {\n        throw new ClientDestroyedError()\n      }\n\n      if (this[kClosed]) {\n        throw new ClientClosedError()\n      }\n\n      return this[kDispatch](opts, handler)\n    } catch (err) {\n      if (typeof handler.onError !== 'function') {\n        throw err\n      }\n\n      handler.onError(err)\n\n      return false\n    }\n  }\n}\n\nmodule.exports = DispatcherBase\n", "'use strict'\n\nconst net = require('node:net')\nconst assert = require('node:assert')\nconst util = require('./util')\nconst { InvalidArgumentError } = require('./errors')\n\nlet tls // include tls conditionally since it is not always available\n\n// TODO: session re-use does not wait for the first\n// connection to resolve the session and might therefore\n// resolve the same servername multiple times even when\n// re-use is enabled.\n\nconst SessionCache = class WeakSessionCache {\n  constructor (maxCachedSessions) {\n    this._maxCachedSessions = maxCachedSessions\n    this._sessionCache = new Map()\n    this._sessionRegistry = new FinalizationRegistry((key) => {\n      if (this._sessionCache.size < this._maxCachedSessions) {\n        return\n      }\n\n      const ref = this._sessionCache.get(key)\n      if (ref !== undefined && ref.deref() === undefined) {\n        this._sessionCache.delete(key)\n      }\n    })\n  }\n\n  get (sessionKey) {\n    const ref = this._sessionCache.get(sessionKey)\n    return ref ? ref.deref() : null\n  }\n\n  set (sessionKey, session) {\n    if (this._maxCachedSessions === 0) {\n      return\n    }\n\n    if (this._sessionCache.has(sessionKey)) {\n      this._sessionCache.delete(sessionKey)\n    } else if (this._sessionCache.size >= this._maxCachedSessions) {\n      for (const [key, ref] of this._sessionCache) {\n        if (ref.deref() === undefined) {\n          this._sessionCache.delete(key)\n          return\n        }\n      }\n\n      const oldest = this._sessionCache.keys().next()\n      if (!oldest.done) {\n        this._sessionCache.delete(oldest.value)\n      }\n    }\n\n    this._sessionCache.set(sessionKey, new WeakRef(session))\n    this._sessionRegistry.register(session, sessionKey)\n  }\n}\n\nfunction buildConnector ({ allowH2, useH2c, maxCachedSessions, socketPath, timeout, session: customSession, ...opts }) {\n  if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) {\n    throw new InvalidArgumentError('maxCachedSessions must be a positive integer or zero')\n  }\n\n  const options = { path: socketPath, ...opts }\n  const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions)\n  timeout = timeout == null ? 10e3 : timeout\n  allowH2 = allowH2 != null ? allowH2 : false\n  return function connect ({ hostname, host, protocol, port, servername, localAddress, httpSocket }, callback) {\n    let socket\n    if (protocol === 'https:') {\n      if (!tls) {\n        tls = require('node:tls')\n      }\n      servername = servername || options.servername || util.getServerName(host) || null\n\n      const sessionKey = servername || hostname\n      assert(sessionKey)\n\n      const session = customSession || sessionCache.get(sessionKey) || null\n\n      port = port || 443\n\n      socket = tls.connect({\n        highWaterMark: 16384, // TLS in node can't have bigger HWM anyway...\n        ...options,\n        servername,\n        session,\n        localAddress,\n        ALPNProtocols: allowH2 ? ['http/1.1', 'h2'] : ['http/1.1'],\n        socket: httpSocket, // upgrade socket connection\n        port,\n        host: hostname\n      })\n\n      socket\n        .on('session', function (session) {\n          // TODO (fix): Can a session become invalid once established? Don't think so?\n          sessionCache.set(sessionKey, session)\n        })\n    } else {\n      assert(!httpSocket, 'httpSocket can only be sent on TLS update')\n\n      port = port || 80\n\n      socket = net.connect({\n        highWaterMark: 64 * 1024, // Same as nodejs fs streams.\n        ...options,\n        localAddress,\n        port,\n        host: hostname\n      })\n      if (useH2c === true) {\n        socket.alpnProtocol = 'h2'\n      }\n    }\n\n    // Set TCP keep alive options on the socket here instead of in connect() for the case of assigning the socket\n    if (options.keepAlive == null || options.keepAlive) {\n      const keepAliveInitialDelay = options.keepAliveInitialDelay === undefined ? 60e3 : options.keepAliveInitialDelay\n      socket.setKeepAlive(true, keepAliveInitialDelay)\n    }\n\n    const clearConnectTimeout = util.setupConnectTimeout(new WeakRef(socket), { timeout, hostname, port })\n\n    socket\n      .setNoDelay(true)\n      .once(protocol === 'https:' ? 'secureConnect' : 'connect', function () {\n        queueMicrotask(clearConnectTimeout)\n\n        if (callback) {\n          const cb = callback\n          callback = null\n          cb(null, this)\n        }\n      })\n      .on('error', function (err) {\n        queueMicrotask(clearConnectTimeout)\n\n        if (callback) {\n          const cb = callback\n          callback = null\n          cb(err)\n        }\n      })\n\n    return socket\n  }\n}\n\nmodule.exports = buildConnector\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.enumToMap = enumToMap;\nfunction enumToMap(obj, filter = [], exceptions = []) {\n    const emptyFilter = (filter?.length ?? 0) === 0;\n    const emptyExceptions = (exceptions?.length ?? 0) === 0;\n    return Object.fromEntries(Object.entries(obj).filter(([, value]) => {\n        return (typeof value === 'number' &&\n            (emptyFilter || filter.includes(value)) &&\n            (emptyExceptions || !exceptions.includes(value)));\n    }));\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SPECIAL_HEADERS = exports.MINOR = exports.MAJOR = exports.HTAB_SP_VCHAR_OBS_TEXT = exports.QUOTED_STRING = exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS = exports.TOKEN = exports.HEX = exports.URL_CHAR = exports.USERINFO_CHARS = exports.MARK = exports.ALPHANUM = exports.NUM = exports.HEX_MAP = exports.NUM_MAP = exports.ALPHA = exports.STATUSES_HTTP = exports.H_METHOD_MAP = exports.METHOD_MAP = exports.METHODS_RTSP = exports.METHODS_ICE = exports.METHODS_HTTP = exports.HEADER_STATE = exports.FINISH = exports.STATUSES = exports.METHODS = exports.LENIENT_FLAGS = exports.FLAGS = exports.TYPE = exports.ERROR = void 0;\nconst utils_1 = require(\"./utils\");\n// Emums\nexports.ERROR = {\n    OK: 0,\n    INTERNAL: 1,\n    STRICT: 2,\n    CR_EXPECTED: 25,\n    LF_EXPECTED: 3,\n    UNEXPECTED_CONTENT_LENGTH: 4,\n    UNEXPECTED_SPACE: 30,\n    CLOSED_CONNECTION: 5,\n    INVALID_METHOD: 6,\n    INVALID_URL: 7,\n    INVALID_CONSTANT: 8,\n    INVALID_VERSION: 9,\n    INVALID_HEADER_TOKEN: 10,\n    INVALID_CONTENT_LENGTH: 11,\n    INVALID_CHUNK_SIZE: 12,\n    INVALID_STATUS: 13,\n    INVALID_EOF_STATE: 14,\n    INVALID_TRANSFER_ENCODING: 15,\n    CB_MESSAGE_BEGIN: 16,\n    CB_HEADERS_COMPLETE: 17,\n    CB_MESSAGE_COMPLETE: 18,\n    CB_CHUNK_HEADER: 19,\n    CB_CHUNK_COMPLETE: 20,\n    PAUSED: 21,\n    PAUSED_UPGRADE: 22,\n    PAUSED_H2_UPGRADE: 23,\n    USER: 24,\n    CB_URL_COMPLETE: 26,\n    CB_STATUS_COMPLETE: 27,\n    CB_METHOD_COMPLETE: 32,\n    CB_VERSION_COMPLETE: 33,\n    CB_HEADER_FIELD_COMPLETE: 28,\n    CB_HEADER_VALUE_COMPLETE: 29,\n    CB_CHUNK_EXTENSION_NAME_COMPLETE: 34,\n    CB_CHUNK_EXTENSION_VALUE_COMPLETE: 35,\n    CB_RESET: 31,\n    CB_PROTOCOL_COMPLETE: 38,\n};\nexports.TYPE = {\n    BOTH: 0, // default\n    REQUEST: 1,\n    RESPONSE: 2,\n};\nexports.FLAGS = {\n    CONNECTION_KEEP_ALIVE: 1 << 0,\n    CONNECTION_CLOSE: 1 << 1,\n    CONNECTION_UPGRADE: 1 << 2,\n    CHUNKED: 1 << 3,\n    UPGRADE: 1 << 4,\n    CONTENT_LENGTH: 1 << 5,\n    SKIPBODY: 1 << 6,\n    TRAILING: 1 << 7,\n    // 1 << 8 is unused\n    TRANSFER_ENCODING: 1 << 9,\n};\nexports.LENIENT_FLAGS = {\n    HEADERS: 1 << 0,\n    CHUNKED_LENGTH: 1 << 1,\n    KEEP_ALIVE: 1 << 2,\n    TRANSFER_ENCODING: 1 << 3,\n    VERSION: 1 << 4,\n    DATA_AFTER_CLOSE: 1 << 5,\n    OPTIONAL_LF_AFTER_CR: 1 << 6,\n    OPTIONAL_CRLF_AFTER_CHUNK: 1 << 7,\n    OPTIONAL_CR_BEFORE_LF: 1 << 8,\n    SPACES_AFTER_CHUNK_SIZE: 1 << 9,\n};\nexports.METHODS = {\n    'DELETE': 0,\n    'GET': 1,\n    'HEAD': 2,\n    'POST': 3,\n    'PUT': 4,\n    /* pathological */\n    'CONNECT': 5,\n    'OPTIONS': 6,\n    'TRACE': 7,\n    /* WebDAV */\n    'COPY': 8,\n    'LOCK': 9,\n    'MKCOL': 10,\n    'MOVE': 11,\n    'PROPFIND': 12,\n    'PROPPATCH': 13,\n    'SEARCH': 14,\n    'UNLOCK': 15,\n    'BIND': 16,\n    'REBIND': 17,\n    'UNBIND': 18,\n    'ACL': 19,\n    /* subversion */\n    'REPORT': 20,\n    'MKACTIVITY': 21,\n    'CHECKOUT': 22,\n    'MERGE': 23,\n    /* upnp */\n    'M-SEARCH': 24,\n    'NOTIFY': 25,\n    'SUBSCRIBE': 26,\n    'UNSUBSCRIBE': 27,\n    /* RFC-5789 */\n    'PATCH': 28,\n    'PURGE': 29,\n    /* CalDAV */\n    'MKCALENDAR': 30,\n    /* RFC-2068, section 19.6.1.2 */\n    'LINK': 31,\n    'UNLINK': 32,\n    /* icecast */\n    'SOURCE': 33,\n    /* RFC-7540, section 11.6 */\n    'PRI': 34,\n    /* RFC-2326 RTSP */\n    'DESCRIBE': 35,\n    'ANNOUNCE': 36,\n    'SETUP': 37,\n    'PLAY': 38,\n    'PAUSE': 39,\n    'TEARDOWN': 40,\n    'GET_PARAMETER': 41,\n    'SET_PARAMETER': 42,\n    'REDIRECT': 43,\n    'RECORD': 44,\n    /* RAOP */\n    'FLUSH': 45,\n    /* DRAFT https://www.ietf.org/archive/id/draft-ietf-httpbis-safe-method-w-body-02.html */\n    'QUERY': 46,\n};\nexports.STATUSES = {\n    CONTINUE: 100,\n    SWITCHING_PROTOCOLS: 101,\n    PROCESSING: 102,\n    EARLY_HINTS: 103,\n    RESPONSE_IS_STALE: 110, // Unofficial\n    REVALIDATION_FAILED: 111, // Unofficial\n    DISCONNECTED_OPERATION: 112, // Unofficial\n    HEURISTIC_EXPIRATION: 113, // Unofficial\n    MISCELLANEOUS_WARNING: 199, // Unofficial\n    OK: 200,\n    CREATED: 201,\n    ACCEPTED: 202,\n    NON_AUTHORITATIVE_INFORMATION: 203,\n    NO_CONTENT: 204,\n    RESET_CONTENT: 205,\n    PARTIAL_CONTENT: 206,\n    MULTI_STATUS: 207,\n    ALREADY_REPORTED: 208,\n    TRANSFORMATION_APPLIED: 214, // Unofficial\n    IM_USED: 226,\n    MISCELLANEOUS_PERSISTENT_WARNING: 299, // Unofficial\n    MULTIPLE_CHOICES: 300,\n    MOVED_PERMANENTLY: 301,\n    FOUND: 302,\n    SEE_OTHER: 303,\n    NOT_MODIFIED: 304,\n    USE_PROXY: 305,\n    SWITCH_PROXY: 306, // No longer used\n    TEMPORARY_REDIRECT: 307,\n    PERMANENT_REDIRECT: 308,\n    BAD_REQUEST: 400,\n    UNAUTHORIZED: 401,\n    PAYMENT_REQUIRED: 402,\n    FORBIDDEN: 403,\n    NOT_FOUND: 404,\n    METHOD_NOT_ALLOWED: 405,\n    NOT_ACCEPTABLE: 406,\n    PROXY_AUTHENTICATION_REQUIRED: 407,\n    REQUEST_TIMEOUT: 408,\n    CONFLICT: 409,\n    GONE: 410,\n    LENGTH_REQUIRED: 411,\n    PRECONDITION_FAILED: 412,\n    PAYLOAD_TOO_LARGE: 413,\n    URI_TOO_LONG: 414,\n    UNSUPPORTED_MEDIA_TYPE: 415,\n    RANGE_NOT_SATISFIABLE: 416,\n    EXPECTATION_FAILED: 417,\n    IM_A_TEAPOT: 418,\n    PAGE_EXPIRED: 419, // Unofficial\n    ENHANCE_YOUR_CALM: 420, // Unofficial\n    MISDIRECTED_REQUEST: 421,\n    UNPROCESSABLE_ENTITY: 422,\n    LOCKED: 423,\n    FAILED_DEPENDENCY: 424,\n    TOO_EARLY: 425,\n    UPGRADE_REQUIRED: 426,\n    PRECONDITION_REQUIRED: 428,\n    TOO_MANY_REQUESTS: 429,\n    REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL: 430, // Unofficial\n    REQUEST_HEADER_FIELDS_TOO_LARGE: 431,\n    LOGIN_TIMEOUT: 440, // Unofficial\n    NO_RESPONSE: 444, // Unofficial\n    RETRY_WITH: 449, // Unofficial\n    BLOCKED_BY_PARENTAL_CONTROL: 450, // Unofficial\n    UNAVAILABLE_FOR_LEGAL_REASONS: 451,\n    CLIENT_CLOSED_LOAD_BALANCED_REQUEST: 460, // Unofficial\n    INVALID_X_FORWARDED_FOR: 463, // Unofficial\n    REQUEST_HEADER_TOO_LARGE: 494, // Unofficial\n    SSL_CERTIFICATE_ERROR: 495, // Unofficial\n    SSL_CERTIFICATE_REQUIRED: 496, // Unofficial\n    HTTP_REQUEST_SENT_TO_HTTPS_PORT: 497, // Unofficial\n    INVALID_TOKEN: 498, // Unofficial\n    CLIENT_CLOSED_REQUEST: 499, // Unofficial\n    INTERNAL_SERVER_ERROR: 500,\n    NOT_IMPLEMENTED: 501,\n    BAD_GATEWAY: 502,\n    SERVICE_UNAVAILABLE: 503,\n    GATEWAY_TIMEOUT: 504,\n    HTTP_VERSION_NOT_SUPPORTED: 505,\n    VARIANT_ALSO_NEGOTIATES: 506,\n    INSUFFICIENT_STORAGE: 507,\n    LOOP_DETECTED: 508,\n    BANDWIDTH_LIMIT_EXCEEDED: 509,\n    NOT_EXTENDED: 510,\n    NETWORK_AUTHENTICATION_REQUIRED: 511,\n    WEB_SERVER_UNKNOWN_ERROR: 520, // Unofficial\n    WEB_SERVER_IS_DOWN: 521, // Unofficial\n    CONNECTION_TIMEOUT: 522, // Unofficial\n    ORIGIN_IS_UNREACHABLE: 523, // Unofficial\n    TIMEOUT_OCCURED: 524, // Unofficial\n    SSL_HANDSHAKE_FAILED: 525, // Unofficial\n    INVALID_SSL_CERTIFICATE: 526, // Unofficial\n    RAILGUN_ERROR: 527, // Unofficial\n    SITE_IS_OVERLOADED: 529, // Unofficial\n    SITE_IS_FROZEN: 530, // Unofficial\n    IDENTITY_PROVIDER_AUTHENTICATION_ERROR: 561, // Unofficial\n    NETWORK_READ_TIMEOUT: 598, // Unofficial\n    NETWORK_CONNECT_TIMEOUT: 599, // Unofficial\n};\nexports.FINISH = {\n    SAFE: 0,\n    SAFE_WITH_CB: 1,\n    UNSAFE: 2,\n};\nexports.HEADER_STATE = {\n    GENERAL: 0,\n    CONNECTION: 1,\n    CONTENT_LENGTH: 2,\n    TRANSFER_ENCODING: 3,\n    UPGRADE: 4,\n    CONNECTION_KEEP_ALIVE: 5,\n    CONNECTION_CLOSE: 6,\n    CONNECTION_UPGRADE: 7,\n    TRANSFER_ENCODING_CHUNKED: 8,\n};\n// C headers\nexports.METHODS_HTTP = [\n    exports.METHODS.DELETE,\n    exports.METHODS.GET,\n    exports.METHODS.HEAD,\n    exports.METHODS.POST,\n    exports.METHODS.PUT,\n    exports.METHODS.CONNECT,\n    exports.METHODS.OPTIONS,\n    exports.METHODS.TRACE,\n    exports.METHODS.COPY,\n    exports.METHODS.LOCK,\n    exports.METHODS.MKCOL,\n    exports.METHODS.MOVE,\n    exports.METHODS.PROPFIND,\n    exports.METHODS.PROPPATCH,\n    exports.METHODS.SEARCH,\n    exports.METHODS.UNLOCK,\n    exports.METHODS.BIND,\n    exports.METHODS.REBIND,\n    exports.METHODS.UNBIND,\n    exports.METHODS.ACL,\n    exports.METHODS.REPORT,\n    exports.METHODS.MKACTIVITY,\n    exports.METHODS.CHECKOUT,\n    exports.METHODS.MERGE,\n    exports.METHODS['M-SEARCH'],\n    exports.METHODS.NOTIFY,\n    exports.METHODS.SUBSCRIBE,\n    exports.METHODS.UNSUBSCRIBE,\n    exports.METHODS.PATCH,\n    exports.METHODS.PURGE,\n    exports.METHODS.MKCALENDAR,\n    exports.METHODS.LINK,\n    exports.METHODS.UNLINK,\n    exports.METHODS.PRI,\n    // TODO(indutny): should we allow it with HTTP?\n    exports.METHODS.SOURCE,\n    exports.METHODS.QUERY,\n];\nexports.METHODS_ICE = [\n    exports.METHODS.SOURCE,\n];\nexports.METHODS_RTSP = [\n    exports.METHODS.OPTIONS,\n    exports.METHODS.DESCRIBE,\n    exports.METHODS.ANNOUNCE,\n    exports.METHODS.SETUP,\n    exports.METHODS.PLAY,\n    exports.METHODS.PAUSE,\n    exports.METHODS.TEARDOWN,\n    exports.METHODS.GET_PARAMETER,\n    exports.METHODS.SET_PARAMETER,\n    exports.METHODS.REDIRECT,\n    exports.METHODS.RECORD,\n    exports.METHODS.FLUSH,\n    // For AirPlay\n    exports.METHODS.GET,\n    exports.METHODS.POST,\n];\nexports.METHOD_MAP = (0, utils_1.enumToMap)(exports.METHODS);\nexports.H_METHOD_MAP = Object.fromEntries(Object.entries(exports.METHODS).filter(([k]) => k.startsWith('H')));\nexports.STATUSES_HTTP = [\n    exports.STATUSES.CONTINUE,\n    exports.STATUSES.SWITCHING_PROTOCOLS,\n    exports.STATUSES.PROCESSING,\n    exports.STATUSES.EARLY_HINTS,\n    exports.STATUSES.RESPONSE_IS_STALE,\n    exports.STATUSES.REVALIDATION_FAILED,\n    exports.STATUSES.DISCONNECTED_OPERATION,\n    exports.STATUSES.HEURISTIC_EXPIRATION,\n    exports.STATUSES.MISCELLANEOUS_WARNING,\n    exports.STATUSES.OK,\n    exports.STATUSES.CREATED,\n    exports.STATUSES.ACCEPTED,\n    exports.STATUSES.NON_AUTHORITATIVE_INFORMATION,\n    exports.STATUSES.NO_CONTENT,\n    exports.STATUSES.RESET_CONTENT,\n    exports.STATUSES.PARTIAL_CONTENT,\n    exports.STATUSES.MULTI_STATUS,\n    exports.STATUSES.ALREADY_REPORTED,\n    exports.STATUSES.TRANSFORMATION_APPLIED,\n    exports.STATUSES.IM_USED,\n    exports.STATUSES.MISCELLANEOUS_PERSISTENT_WARNING,\n    exports.STATUSES.MULTIPLE_CHOICES,\n    exports.STATUSES.MOVED_PERMANENTLY,\n    exports.STATUSES.FOUND,\n    exports.STATUSES.SEE_OTHER,\n    exports.STATUSES.NOT_MODIFIED,\n    exports.STATUSES.USE_PROXY,\n    exports.STATUSES.SWITCH_PROXY,\n    exports.STATUSES.TEMPORARY_REDIRECT,\n    exports.STATUSES.PERMANENT_REDIRECT,\n    exports.STATUSES.BAD_REQUEST,\n    exports.STATUSES.UNAUTHORIZED,\n    exports.STATUSES.PAYMENT_REQUIRED,\n    exports.STATUSES.FORBIDDEN,\n    exports.STATUSES.NOT_FOUND,\n    exports.STATUSES.METHOD_NOT_ALLOWED,\n    exports.STATUSES.NOT_ACCEPTABLE,\n    exports.STATUSES.PROXY_AUTHENTICATION_REQUIRED,\n    exports.STATUSES.REQUEST_TIMEOUT,\n    exports.STATUSES.CONFLICT,\n    exports.STATUSES.GONE,\n    exports.STATUSES.LENGTH_REQUIRED,\n    exports.STATUSES.PRECONDITION_FAILED,\n    exports.STATUSES.PAYLOAD_TOO_LARGE,\n    exports.STATUSES.URI_TOO_LONG,\n    exports.STATUSES.UNSUPPORTED_MEDIA_TYPE,\n    exports.STATUSES.RANGE_NOT_SATISFIABLE,\n    exports.STATUSES.EXPECTATION_FAILED,\n    exports.STATUSES.IM_A_TEAPOT,\n    exports.STATUSES.PAGE_EXPIRED,\n    exports.STATUSES.ENHANCE_YOUR_CALM,\n    exports.STATUSES.MISDIRECTED_REQUEST,\n    exports.STATUSES.UNPROCESSABLE_ENTITY,\n    exports.STATUSES.LOCKED,\n    exports.STATUSES.FAILED_DEPENDENCY,\n    exports.STATUSES.TOO_EARLY,\n    exports.STATUSES.UPGRADE_REQUIRED,\n    exports.STATUSES.PRECONDITION_REQUIRED,\n    exports.STATUSES.TOO_MANY_REQUESTS,\n    exports.STATUSES.REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL,\n    exports.STATUSES.REQUEST_HEADER_FIELDS_TOO_LARGE,\n    exports.STATUSES.LOGIN_TIMEOUT,\n    exports.STATUSES.NO_RESPONSE,\n    exports.STATUSES.RETRY_WITH,\n    exports.STATUSES.BLOCKED_BY_PARENTAL_CONTROL,\n    exports.STATUSES.UNAVAILABLE_FOR_LEGAL_REASONS,\n    exports.STATUSES.CLIENT_CLOSED_LOAD_BALANCED_REQUEST,\n    exports.STATUSES.INVALID_X_FORWARDED_FOR,\n    exports.STATUSES.REQUEST_HEADER_TOO_LARGE,\n    exports.STATUSES.SSL_CERTIFICATE_ERROR,\n    exports.STATUSES.SSL_CERTIFICATE_REQUIRED,\n    exports.STATUSES.HTTP_REQUEST_SENT_TO_HTTPS_PORT,\n    exports.STATUSES.INVALID_TOKEN,\n    exports.STATUSES.CLIENT_CLOSED_REQUEST,\n    exports.STATUSES.INTERNAL_SERVER_ERROR,\n    exports.STATUSES.NOT_IMPLEMENTED,\n    exports.STATUSES.BAD_GATEWAY,\n    exports.STATUSES.SERVICE_UNAVAILABLE,\n    exports.STATUSES.GATEWAY_TIMEOUT,\n    exports.STATUSES.HTTP_VERSION_NOT_SUPPORTED,\n    exports.STATUSES.VARIANT_ALSO_NEGOTIATES,\n    exports.STATUSES.INSUFFICIENT_STORAGE,\n    exports.STATUSES.LOOP_DETECTED,\n    exports.STATUSES.BANDWIDTH_LIMIT_EXCEEDED,\n    exports.STATUSES.NOT_EXTENDED,\n    exports.STATUSES.NETWORK_AUTHENTICATION_REQUIRED,\n    exports.STATUSES.WEB_SERVER_UNKNOWN_ERROR,\n    exports.STATUSES.WEB_SERVER_IS_DOWN,\n    exports.STATUSES.CONNECTION_TIMEOUT,\n    exports.STATUSES.ORIGIN_IS_UNREACHABLE,\n    exports.STATUSES.TIMEOUT_OCCURED,\n    exports.STATUSES.SSL_HANDSHAKE_FAILED,\n    exports.STATUSES.INVALID_SSL_CERTIFICATE,\n    exports.STATUSES.RAILGUN_ERROR,\n    exports.STATUSES.SITE_IS_OVERLOADED,\n    exports.STATUSES.SITE_IS_FROZEN,\n    exports.STATUSES.IDENTITY_PROVIDER_AUTHENTICATION_ERROR,\n    exports.STATUSES.NETWORK_READ_TIMEOUT,\n    exports.STATUSES.NETWORK_CONNECT_TIMEOUT,\n];\nexports.ALPHA = [];\nfor (let i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(0); i++) {\n    // Upper case\n    exports.ALPHA.push(String.fromCharCode(i));\n    // Lower case\n    exports.ALPHA.push(String.fromCharCode(i + 0x20));\n}\nexports.NUM_MAP = {\n    0: 0, 1: 1, 2: 2, 3: 3, 4: 4,\n    5: 5, 6: 6, 7: 7, 8: 8, 9: 9,\n};\nexports.HEX_MAP = {\n    0: 0, 1: 1, 2: 2, 3: 3, 4: 4,\n    5: 5, 6: 6, 7: 7, 8: 8, 9: 9,\n    A: 0XA, B: 0XB, C: 0XC, D: 0XD, E: 0XE, F: 0XF,\n    a: 0xa, b: 0xb, c: 0xc, d: 0xd, e: 0xe, f: 0xf,\n};\nexports.NUM = [\n    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n];\nexports.ALPHANUM = exports.ALPHA.concat(exports.NUM);\nexports.MARK = ['-', '_', '.', '!', '~', '*', '\\'', '(', ')'];\nexports.USERINFO_CHARS = exports.ALPHANUM\n    .concat(exports.MARK)\n    .concat(['%', ';', ':', '&', '=', '+', '$', ',']);\n// TODO(indutny): use RFC\nexports.URL_CHAR = [\n    '!', '\"', '$', '%', '&', '\\'',\n    '(', ')', '*', '+', ',', '-', '.', '/',\n    ':', ';', '<', '=', '>',\n    '@', '[', '\\\\', ']', '^', '_',\n    '`',\n    '{', '|', '}', '~',\n].concat(exports.ALPHANUM);\nexports.HEX = exports.NUM.concat(['a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F']);\n/* Tokens as defined by rfc 2616. Also lowercases them.\n *        token       = 1*<any CHAR except CTLs or separators>\n *     separators     = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n *                    | \",\" | \";\" | \":\" | \"\\\" | <\">\n *                    | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n *                    | \"{\" | \"}\" | SP | HT\n */\nexports.TOKEN = [\n    '!', '#', '$', '%', '&', '\\'',\n    '*', '+', '-', '.',\n    '^', '_', '`',\n    '|', '~',\n].concat(exports.ALPHANUM);\n/*\n * Verify that a char is a valid visible (printable) US-ASCII\n * character or %x80-FF\n */\nexports.HEADER_CHARS = ['\\t'];\nfor (let i = 32; i <= 255; i++) {\n    if (i !== 127) {\n        exports.HEADER_CHARS.push(i);\n    }\n}\n// ',' = \\x44\nexports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS.filter((c) => c !== 44);\nexports.QUOTED_STRING = ['\\t', ' '];\nfor (let i = 0x21; i <= 0xff; i++) {\n    if (i !== 0x22 && i !== 0x5c) { // All characters in ASCII except \\ and \"\n        exports.QUOTED_STRING.push(i);\n    }\n}\nexports.HTAB_SP_VCHAR_OBS_TEXT = ['\\t', ' '];\n// VCHAR: https://tools.ietf.org/html/rfc5234#appendix-B.1\nfor (let i = 0x21; i <= 0x7E; i++) {\n    exports.HTAB_SP_VCHAR_OBS_TEXT.push(i);\n}\n// OBS_TEXT: https://datatracker.ietf.org/doc/html/rfc9110#name-collected-abnf\nfor (let i = 0x80; i <= 0xff; i++) {\n    exports.HTAB_SP_VCHAR_OBS_TEXT.push(i);\n}\nexports.MAJOR = exports.NUM_MAP;\nexports.MINOR = exports.MAJOR;\nexports.SPECIAL_HEADERS = {\n    'connection': exports.HEADER_STATE.CONNECTION,\n    'content-length': exports.HEADER_STATE.CONTENT_LENGTH,\n    'proxy-connection': exports.HEADER_STATE.CONNECTION,\n    'transfer-encoding': exports.HEADER_STATE.TRANSFER_ENCODING,\n    'upgrade': exports.HEADER_STATE.UPGRADE,\n};\nexports.default = {\n    ERROR: exports.ERROR,\n    TYPE: exports.TYPE,\n    FLAGS: exports.FLAGS,\n    LENIENT_FLAGS: exports.LENIENT_FLAGS,\n    METHODS: exports.METHODS,\n    STATUSES: exports.STATUSES,\n    FINISH: exports.FINISH,\n    HEADER_STATE: exports.HEADER_STATE,\n    ALPHA: exports.ALPHA,\n    NUM_MAP: exports.NUM_MAP,\n    HEX_MAP: exports.HEX_MAP,\n    NUM: exports.NUM,\n    ALPHANUM: exports.ALPHANUM,\n    MARK: exports.MARK,\n    USERINFO_CHARS: exports.USERINFO_CHARS,\n    URL_CHAR: exports.URL_CHAR,\n    HEX: exports.HEX,\n    TOKEN: exports.TOKEN,\n    HEADER_CHARS: exports.HEADER_CHARS,\n    CONNECTION_TOKEN_CHARS: exports.CONNECTION_TOKEN_CHARS,\n    QUOTED_STRING: exports.QUOTED_STRING,\n    HTAB_SP_VCHAR_OBS_TEXT: exports.HTAB_SP_VCHAR_OBS_TEXT,\n    MAJOR: exports.MAJOR,\n    MINOR: exports.MINOR,\n    SPECIAL_HEADERS: exports.SPECIAL_HEADERS,\n    METHODS_HTTP: exports.METHODS_HTTP,\n    METHODS_ICE: exports.METHODS_ICE,\n    METHODS_RTSP: exports.METHODS_RTSP,\n    METHOD_MAP: exports.METHOD_MAP,\n    H_METHOD_MAP: exports.H_METHOD_MAP,\n    STATUSES_HTTP: exports.STATUSES_HTTP,\n};\n", "'use strict'\n\nconst { Buffer } = require('node:buffer')\n\nconst wasmBase64 = 'AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRw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AXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgL5YUCAgd/A34gASACaiEEAkAgACIDKAIMIgANACADKAIEBEAgAyABNgIECyMAQRBrIgkkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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C0HjAQwHC0HXAQwGC0HYAQwFC0HZAQwEC0HaAQwDC0HbAQwCC0HdAQwBC0HcAQshAgNAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJ/AkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAg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ogKiAqICogKiAqICogKiAqICogKiAqICogIAogILIAQgAUEBaiIBRw0AC0HJACECDOwCCyABQQFqIQEgA0Evai0AAEEBcQ2lAiADQQA2AhwgAyABNgIUIANBlxA2AhAgA0EKNgIMQQAhAgzrAgsgASAERwRAA0AgAS0AAEEgRw0VIAQgAUEBaiIBRw0AC0H4ACECDOsCC0H4ACECDOoCCyADQQI6ACgMOAtBACECIANBADYCHCADQb8LNgIQIANBAjYCDCADIAFBAWo2AhQM6AILQQAhAgzOAgtBDSECDM0CC0ETIQIMzAILQRUhAgzLAgtBFiECDMoCC0EYIQIMyQILQRkhAgzIAgtBGiECDMcCC0EbIQIMxgILQRwhAgzFAgtBHSECDMQCC0EeIQIMwwILQR8hAgzCAgtBICECDMECC0EiIQIMwAILQSMhAgy/AgtBJSECDL4CC0HlACECDL0CCyADQT02AhwgAyABNgIUIAMgADYCDEEAIQIM1QILIANBGzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDNQCCyADQSA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzTAgsgA0ETNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0gILIANBCzYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNECCyADQRA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzQAgsgA0EgNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzwILIANBCzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM4CCyADQQw2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzNAgtBACECIANBADYCHCADIAE2AhQgA0HdDjYCECADQRI2AgwMzAILAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB/QEhAgzMAgsCQAJAIAMtADZBAUcNAEEAIQACQCADKAI4IgJFDQAgAigCYCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUcNASADQfwBNgIcIAMgATYCFCADQdwZNgIQIANBFTYCDEEAIQIMzQILQdwBIQIMswILIANBADYCHCADIAE2AhQgA0H5CzYCECADQR82AgxBACECDMsCCwJAAkAgAy0AKEEBaw4CBAEAC0HbASECDLICC0HUASECDLECCyADQQI6ADFBACEAAkAgAygCOCICRQ0AIAIoAgAiAkUNACADIAIRAAAhAAsgAEUEQEHdASECDLECCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQbQMNgIQIANBEDYCDEEAIQIMygILIANB+wE2AhwgAyABNgIUIANBgRo2AhAgA0EVNgIMQQAhAgzJAgsgASAERgRAQfoBIQIMyQILIAEtAABByABGDQEgA0EBOgAoC0HAASECDK4CC0HaASECDK0CCyABIARHBEAgA0EMNgIIIAMgATYCBEHZASECDK0CC0H5ASECDMUCCyABIARGBEBB+AEhAgzFAgsgAS0AAEHIAEcNBCABQQFqIQFB2AEhAgyrAgsgASAERgRAQfcBIQIMxAILAkACQCABLQAAQcUAaw4QAAUFBQUFBQUFBQUFBQUFAQULIAFBAWohAUHWASECDKsCCyABQQFqIQFB1wEhAgyqAgtB9gEhAiABIARGDcICIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbrVAGotAABHDQMgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMMCCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIARQRAQeMBIQIMqgILIANB9QE2AhwgAyABNgIUIAMgADYCDEEAIQIMwgILQfQBIQIgASAERg3BAiADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEG41QBqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzCAgsgA0GBBDsBKCADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIADQMMAgsgA0EANgIAC0EAIQIgA0EANgIcIAMgATYCFCADQeUfNgIQIANBCDYCDAy/AgtB1QEhAgylAgsgA0HzATYCHCADIAE2AhQgAyAANgIMQQAhAgy9AgtBACEAAkAgAygCOCICRQ0AIAIoAkAiAkUNACADIAIRAAAhAAsgAEUNbiAAQRVHBEAgA0EANgIcIAMgATYCFCADQYIPNgIQIANBIDYCDEEAIQIMvQILIANBjwE2AhwgAyABNgIUIANB7Bs2AhAgA0EVNgIMQQAhAgy8AgsgASAERwRAIANBDTYCCCADIAE2AgRB0wEhAgyjAgtB8gEhAgy7AgsgASAERgRAQfEBIQIMuwILAkACQAJAIAEtAABByABrDgsAAQgICAgICAgIAggLIAFBAWohAUHQASECDKMCCyABQQFqIQFB0QEhAgyiAgsgAUEBaiEBQdIBIQIMoQILQfABIQIgASAERg25AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBtdUAai0AAEcNBCAAQQJGDQMgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuQILQe8BIQIgASAERg24AiADKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABBs9UAai0AAEcNAyAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuAILQe4BIQIgASAERg23AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMtwILIAMoAgQhACADQgA3AwAgAyAAIAVBAWoiARArIgBFDQIgA0HsATYCHCADIAE2AhQgAyAANgIMQQAhAgy2AgsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNnAIgA0HtATYCHCADIAE2AhQgAyAANgIMQQAhAgy0AgtBzwEhAgyaAgtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDLQCC0HOASECDJoCCyADQesBNgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMsgILIAEgBEYEQEHrASECDLICCyABLQAAQS9GBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GyODYCECADQQg2AgxBACECDLECC0HNASECDJcCCyABIARHBEAgA0EONgIIIAMgATYCBEHMASECDJcCC0HqASECDK8CCyABIARGBEBB6QEhAgyvAgsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFBywEhAgyWAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZcCIANB6AE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAEgBEYEQEHnASECDK4CCwJAIAEtAABBLkYEQCABQQFqIQEMAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5gE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILQcoBIQIMlAILIAEgBEYEQEHlASECDK0CC0EAIQBBASEFQQEhB0EAIQICQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQCABLQAAQTBrDgoKCQABAgMEBQYICwtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshAkEAIQVBACEHDAILQQkhAkEBIQBBACEFQQAhBwwBC0EAIQVBASECCyADIAI6ACsgAUEBaiEBAkACQCADLQAuQRBxDQACQAJAAkAgAy0AKg4DAQACBAsgB0UNAwwCCyAADQEMAgsgBUUNAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDQIgA0HiATYCHCADIAE2AhQgAyAANgIMQQAhAgyvAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZoCIANB4wE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ2YAiADQeQBNgIcIAMgATYCFCADIAA2AgwMrQILQckBIQIMkwILQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANBpA02AhAgA0EhNgIMQQAhAgytAgtByAEhAgyTAgsgA0HhATYCHCADIAE2AhQgA0HQGjYCECADQRU2AgxBACECDKsCCyABIARGBEBB4QEhAgyrAgsCQCABLQAAQSBGBEAgA0EAOwE0IAFBAWohAQwBCyADQQA2AhwgAyABNgIUIANBmRE2AhAgA0EJNgIMQQAhAgyrAgtBxwEhAgyRAgsgASAERgRAQeABIQIMqgILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyrAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqgILQcYBIQIMkAILIAEgBEYEQEHfASECDKkCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqgILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKkCC0HFASECDI8CCyABIARGBEBB3gEhAgyoAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKkCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyoAgtBxAEhAgyOAgsgASAERgRAQd0BIQIMpwILAkACQAJAAkAgAS0AAEEKaw4XAgMDAAMDAwMDAwMDAwMDAwMDAwMDAwEDCyABQQFqDAULIAFBAWohAUHDASECDI8CCyABQQFqIQEgA0Evai0AAEEBcQ0IIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKcCCyADQQA2AhwgAyABNgIUIANBjQs2AhAgA0ENNgIMQQAhAgymAgsgASAERwRAIANBDzYCCCADIAE2AgRBASECDI0CC0HcASECDKUCCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtB2wEhAgymAgsgAygCBCEAIANBADYCBCADIAAgARAtIgBFBEAgAUEBaiEBDAQLIANB2gE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMpQILIAMoAgQhACADQQA2AgQgAyAAIAEQLSIADQEgAUEBagshAUHBASECDIoCCyADQdkBNgIcIAMgADYCDCADIAFBAWo2AhRBACECDKICC0HCASECDIgCCyADQS9qLQAAQQFxDQEgA0EANgIcIAMgATYCFCADQeQcNgIQIANBGTYCDEEAIQIMoAILIAEgBEYEQEHZASEC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IAFBAWohAUGeASECDOQBCyABQQFqIQFBnwEhAgzjAQtBtwEhAiABIARGDfsBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQezUAGotAABHDSggAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPwBCyADQQA2AgAgBkEBaiEBQQ0MKAtBtgEhAiABIARGDfoBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDScgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPsBCyADQQA2AgAgBkEBaiEBQQwMJwtBtQEhAiABIARGDfkBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQerUAGotAABHDSYgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPoBCyADQQA2AgAgBkEBaiEBQQMMJgtBtAEhAiABIARGDfgBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQejUAGotAABHDSUgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPkBCyADQQA2AgAgBkEBaiEBQSYMJQsgASAERgRAQbMBIQIM+AELAkACQCABLQAAQdQAaw4CAAEnCyABQQFqIQFBmQEhAgzfAQsgAUEBaiEBQZoBIQIM3gELQbIBIQIgASAERg32ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHm1ABqLQAARw0jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz3AQsgA0EANgIAIAZBAWohAUEnDCMLQbEBIQIgASAERg31ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHk1ABqLQAARw0iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz2AQsgA0EANgIAIAZBAWohAUEcDCILQbABIQIgASAERg30ASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHe1ABqLQAARw0hIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz1AQsgA0EANgIAIAZBAWohAUEGDCELQa8BIQIgASAERg3zASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHZ1ABqLQAARw0gIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz0AQsgA0EANgIAIAZBAWohAUEZDCALIAEgBEYEQEGuASECDPMBCwJAAkACQAJAIAEtAABBLWsOIwAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJAEkJCQkJAIkJCQDJAsgAUEBaiEBQY4BIQIM3AELIAFBAWohAUGPASECDNsBCyABQQFqIQFBlAEhAgzaAQsgAUEBaiEBQZUBIQIM2QELQa0BIQIgASAERg3xASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHX1ABqLQAARw0eIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzyAQsgA0EANgIAIAZBAWohAUELDB4LIAEgBEYEQEGsASECDPEBCwJAAkAgAS0AAEHBAGsOAwAgASALIAFBAWohAUGQASECDNgBCyABQQFqIQFBkwEhAgzXAQsgASAERgRAQasBIQIM8AELAkACQCABLQAAQcEAaw4PAB8fHx8fHx8fHx8fHx8BHwsgAUEBaiEBQZEBIQIM1wELIAFBAWohAUGSASECDNYBCyABIARGBEBBqgEhAgzvAQsgAS0AAEHMAEcNHCABQQFqIQFBCgwbC0GpASECIAEgBEYN7QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABB0dQAai0AAEcNGiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7gELIANBADYCACAGQQFqIQFBHgwaC0GoASECIAEgBEYN7AEgAygCACIAIAQgAWtqIQUgASAAa0EGaiEGAkADQCABLQAAIABBytQAai0AAEcNGSAAQQZGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7QELIANBADYCACAGQQFqIQFBFQwZC0GnASECIAEgBEYN6wEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBx9QAai0AAEcNGCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7AELIANBADYCACAGQQFqIQFBFwwYC0GmASECIAEgBEYN6gEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBwdQAai0AAEcNFyAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6wELIANBADYCACAGQQFqIQFBGAwXCyABIARGBEBBpQEhAgzqAQsCQAJAIAEtAABByQBrDgcAGRkZGRkBGQsgAUEBaiEBQYsBIQIM0QELIAFBAWohAUGMASECDNABC0GkASECIAEgBEYN6AEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBptUAai0AAEcNFSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6QELIANBADYCACAGQQFqIQFBCQwVC0GjASECIAEgBEYN5wEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBpNUAai0AAEcNFCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6AELIANBADYCACAGQQFqIQFBHwwUC0GiASECIAEgBEYN5gEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBvtQAai0AAEcNEyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5wELIANBADYCACAGQQFqIQFBAgwTC0GhASECIAEgBEYN5QEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGA0AgAS0AACAAQbzUAGotAABHDREgAEEBRg0CIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADOUBCyABIARGBEBBoAEhAgzlAQtBASABLQAAQd8ARw0RGiABQQFqIQFBhwEhAgzLAQsgA0EANgIAIAZBAWohAUGIASECDMoBC0GfASECIAEgBEYN4gEgAygCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABBhNUAai0AAEcNDyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4wELIANBADYCACAGQQFqIQFBKQwPC0GeASECIAEgBEYN4QEgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBuNQAai0AAEcNDiAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4gELIANBADYCACAGQQFqIQFBLQwOCyABIARGBEBBnQEhAgzhAQsgAS0AAEHFAEcNDiABQQFqIQFBhAEhAgzHAQsgASAERgRAQZwBIQIM4AELAkACQCABLQAAQcwAaw4IAA8PDw8PDwEPCyABQQFqIQFBggEhAgzHAQsgAUEBaiEBQYMBIQIMxgELQZsBIQIgASAERg3eASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEGz1ABqLQAARw0LIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzfAQsgA0EANgIAIAZBAWohAUEjDAsLQZoBIQIgASAERg3dASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGw1ABqLQAARw0KIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzeAQsgA0EANgIAIAZBAWohAUEADAoLIAEgBEYEQEGZASECDN0BCwJAAkAgAS0AAEHIAGsOCAAMDAwMDAwBDAsgAUEBaiEBQf0AIQIMxAELIAFBAWohAUGAASECDMMBCyABIARGBEBBmAEhAgzcAQsCQAJAIAEtAABBzgBrDgMACwELCyABQQFqIQFB/gAhAgzDAQsgAUEBaiEBQf8AIQIMwgELIAEgBEYEQEGXASECDNsBCyABLQAAQdkARw0IIAFBAWohAUEIDAcLQZYBIQIgASAERg3ZASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEGs1ABqLQAARw0GIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzaAQsgA0EANgIAIAZBAWohAUEFDAYLQZUBIQIgASAERg3YASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGm1ABqLQAARw0FIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzZAQsgA0EANgIAIAZBAWohAUEWDAULQZQBIQIgASAERg3XASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGh1QBqLQAARw0EIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzYAQsgA0EANgIAIAZBAWohAUEQDAQLIAEgBEYEQEGTASECDNcBCwJAAkAgAS0AAEHDAGsODAAGBgYGBgYGBgYGAQYLIAFBAWohAUH5ACECDL4BCyABQQFqIQFB+gAhAgy9AQtBkgEhAiABIARGDdUBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQaDUAGotAABHDQIgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNYBCyADQQA2AgAgBkEBaiEBQSQMAgsgA0EANgIADAILIAEgBEYEQEGRASECDNQBCyABLQAAQcwARw0BIAFBAWohAUETCzoAKSADKAIEIQAgA0EANgIEIAMgACABEC4iAA0CDAELQQAhAiADQQA2AhwgAyABNgIUIANB/h82AhAgA0EGNgIMDNEBC0H4ACECDLcBCyADQZABNgIcIAMgATYCFCADIAA2AgxBACECDM8BC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUYNASADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgzOAQtB9wAhAgy0AQsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDMwBCyABIARGBEBBjwEhAgzMAQsCQCABLQAAQSBGBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GbHzYCECADQQY2AgxBACECDMwBC0ECIQIMsgELA0AgAS0AAEEgRw0CIAQgAUEBaiIBRw0AC0GOASECDMoBCyABIARGBEBBjQEhAgzKAQsCQCABLQAAQQlrDgRKAABKAAtB9QAhAgywAQsgAy0AKUEFRgRAQfYAIQIMsAELQfQAIQIMrwELIAEgBEYEQEGMASECDMgBCyADQRA2AgggAyABNgIEDAoLIAEgBEYEQEGLASECDMcBCwJAIAEtAABBCWsOBEcAAEcAC0HzACECDK0BCyABIARHBEAgA0EQNgIIIAMgATYCBEHxACECDK0BC0GKASECDMUBCwJAIAEgBEcEQANAIAEtAABBoNAAai0AACIAQQNHBEACQCAAQQFrDgJJAAQLQfAAIQIMrwELIAQgAUEBaiIBRw0AC0GIASEC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BCABQQFqIgFHDQALQfsAIQIMpwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMpgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMpQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMpAELIANBADYCHCADIAE2AhQgA0G8CjYCECADQQc2AgxBACECDKMBC0HPACECDIkBC0HRACECDIgBC0HnACECDIcBCyABIARGBEBB+gAhAgygAQsCQCABLQAAQQlrDgQgAAAgAAsgAUEBaiEBQeYAIQIMhgELIAEgBEYEQEH5ACECDJ8BCwJAIAEtAABBCWsOBB8AAB8AC0EAIQACQCADKAI4IgJFDQAgAigCOCICRQ0AIAMgAhEAACEACyAARQRAQeIBIQIMhgELIABBFUcEQCADQQA2AhwgAyABNgIUIANByQ02AhAgA0EaNgIMQQAhAgyfAQsgA0H4ADYCHCADIAE2AhQgA0HqGjYCECADQRU2AgxBACECDJ4BCyABIARHBEAgA0ENNgIIIAMgATYCBEHkACECDIUBC0H3ACECDJ0BCyABIARGBEBB9gAhAgydAQsCQAJAAkAgAS0AAEHIAGsOCwABCwsLCwsLCwsCCwsgAUEBaiEBQd0AIQIMhQELIAFBAWohAUHgACECDIQBCyABQQFqIQFB4wAhAgyDAQtB9QAhAiABIARGDZsBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbXVAGotAABHDQggAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJwBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIABEAgA0H0ADYCHCADIAE2AhQgAyAANgIMQQAhAgycAQtB4gAhAgyCAQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJwBC0HhACECDIIBCyADQfMANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMmgELIAMtACkiAEEja0ELSQ0JAkAgAEEGSw0AQQEgAHRBygBxRQ0ADAoLQQAhAiADQQA2AhwgAyABNgIUIANB7Qk2AhAgA0EINgIMDJkBC0HyACECIAEgBEYNmAEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBs9UAai0AAEcNBSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMmQELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgAEQCADQfEANgIcIAMgATYCFCADIAA2AgxBACECDJkBC0HfACECDH8LQQAhAAJAIAMoAjgiAkUNACACKAI0IgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANB6g02AhAgA0EmNgIMQQAhAgyZAQtB3gAhAgx/CyADQfAANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMlwELIAMtAClBIUYNBiADQQA2AhwgAyABNgIUIANBkQo2AhAgA0EINgIMQQAhAgyWAQtB7wAhAiABIARGDZUBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbDVAGotAABHDQIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJYBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIARQ0CIANB7QA2AhwgAyABNgIUIAMgADYCDEEAIQIMlQELIANBADYCAAsgAygCBCEAIANBADYCBCADIAAgARArIgBFDYABIANB7gA2AhwgAyABNgIUIAMgADYCDEEAIQIMkwELQdwAIQIMeQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJMBC0HbACECDHkLIANB7AA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyRAQsgAy0AKSIAQSNJDQAgAEEuRg0AIANBADYCHCADIAE2AhQgA0HJCTYCECADQQg2AgxBACECDJABC0HaACECDHYLIAEgBEYEQEHrACECDI8BCwJAIAEtAABBL0YEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDEEAIQIMjwELQdkAIQIMdQsgASAERwRAIANBDjYCCCADIAE2AgRB2AAhAgx1C0HqACECDI0BCyABIARGBEBB6QAhAgyNAQsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFB1wAhAgx0CyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeiADQegANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyABIARGBEBB5wAhAgyMAQsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ17IANB5gA2AhwgAyABNgIUIAMgADYCDEEAIQIMjAELQdYAIQIMcgsgASAERgRAQeUAIQIMiwELQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNAiADQeIANgIcIAMgATYCFCADIAA2AgxBACECDI0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNfSADQeMANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeyADQeQANgIcIAMgATYCFCADIAA2AgwMiwELQdQAIQIMcQsgAy0AKUEiRg2GAUHTACECDHALQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALIABFBEBB1QAhAgxwCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQaQNNgIQIANBITYCDEEAIQIMiQELIANB4QA2AhwgAyABNgIUIANB0Bo2AhAgA0EVNgIMQQAhAgyIAQsgASAERgRAQeAAIQIMiAELAkACQAJAAkACQCABLQAAQQprDgQBBAQABAsgAUEBaiEBDAELIAFBAWohASADQS9qLQAAQQFxRQ0BC0HSACECDHALIANBADYCHCADIAE2AhQgA0G2ETYCECADQQk2AgxBACECDIgBCyADQQA2AhwgAyABNgIUIANBthE2AhAgA0EJNgIMQQAhAgyHAQsgASAERgRAQd8AIQIMhwELIAEtAABBCkYEQCABQQFqIQEMCQsgAy0ALkHAAHENCCADQQA2AhwgAyABNgIUIANBthE2AhAgA0ECNgIMQQAhAgyGAQsgASAERgRAQd0AIQIMhgELIAEtAAAiAkENRgRAIAFBAWohAUHQACECDG0LIAEhACACQQlrDgQFAQEFAQsgBCABIgBGBEBB3AAhAgyFAQsgAC0AAEEKRw0AIABBAWoMAgtBACECIANBADYCHCADIAA2AhQgA0HKLTYCECADQQc2AgwMgwELIAEgBEYEQEHbACECDIMBCwJAIAEtAABBCWsOBAMAAAMACyABQQFqCyEBQc4AIQIMaAsgASAERgRAQdoAIQIMgQELIAEtAABBCWsOBAABAQABC0EAIQIgA0EANgIcIANBmhI2AhAgA0EHNgIMIAMgAUEBajYCFAx/CyADQYASOwEqQQAhAAJAIAMoAjgiAkUNACACKAI4IgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB2QA2AhwgAyABNgIUIANB6ho2AhAgA0EVNgIMQQAhAgx+C0HNACECDGQLIANBADYCHCADIAE2AhQgA0HJDTYCECADQRo2AgxBACECDHwLIAEgBEYEQEHZACECDHwLIAEtAABBIEcNPSABQQFqIQEgAy0ALkEBcQ09IANBADYCHCADIAE2AhQgA0HCHDYCECADQR42AgxBACECDHsLIAEgBEYEQEHYACECDHsLAkACQAJAAkACQCABLQAAIgBBCmsOBAIDAwABCyABQQFqIQFBLCECDGULIABBOkcNASADQQA2AhwgAyABNgIUIANB5xE2AhAgA0EKNgIMQQAhAgx9CyABQQFqIQEgA0Evai0AAEEBcUUNcyADLQAyQYABcUUEQCADQTJqIQIgAxA1QQAhAAJAIAMoAjgiBkUNACAGKAIoIgZFDQAgAyAGEQAAIQALAkACQCAADhZNTEsBAQEBAQEBAQEBAQEBAQEBAQEAAQsgA0EpNgIcIAMgATYCFCADQawZNgIQIANBFTYCDEEAIQIMfgsg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c3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3Byb3RvY29sX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fcHJvdG9jb2wARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBVbmV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fcHJvdG9jb2xfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX1BST1RPQ09MX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8sIFJUU1AvIG9yIElDRS8A5xUAAK8VAACkEgAAkhoAACYWAACeFAAA2xkAAHkVAAB+EgAA/hQAADYVAAALFgAA2BYAAPMSAABCGAAArBYAABIVAAAUFwAA7xcAAEgUAABxFwAAshoAAGsZAAB+GQAANRQAAIIaAABEFwAA/RYAAB4YAACHFwAAqhkAAJMSAAAHGAAALBcAAMoXAACkFwAA5xUAAOcVAABYFwAAOxgAAKASAAAtHAAAwxEAAEgRAADeEgAAQhMAAKQZAAD9EAAA9xUAAKUVAADvFgAA+BkAAEoWAABWFgAA9RUAAAoaAAAIGgAAARoAAKsVAABCEgAA1xAAAEwRAAAFGQAAVBYAAB4RAADKGQAAyBkAAE4WAAD/GAAAcRQAAPAVAADuFQAAlBkAAPwVAAC/GQAAmxkAAHwUAABDEQAAcBgAAJUUAAAnFAAAGRQAANUSAADUGQAARBYAAPcQAEG5OwsBAQBB0DsL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBuj0LBAEAAAIAQdE9C14DBAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAUAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEG6PwsEAQAAAgBB0T8LXgMAAwMDAwMAAAMDAAMDAAMDAwMDAwMDAwMABAAFAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwADAAMAQbDBAAsNbG9zZWVlcC1hbGl2ZQBBycEACwEBAEHgwQAL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBycMACwEBAEHgwwAL5wEBAQEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAWNodW5rZWQAQfHFAAteAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBB0McACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQYDIAAsgcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQpTTQ0KDQoAQanIAAsFAQIAAQMAQcDIAAtfBAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanKAAsFAQIAAQMAQcDKAAtfBAUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanMAAsEAQAAAQBBwcwAC14CAgACAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAEGpzgALBQECAAEDAEHAzgALXwQFAAAFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUABQAHCAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAUABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAAAAFAEGp0AALBQEBAAEBAEHA0AALAQEAQdrQAAtBAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQanSAAsFAQEAAQEAQcDSAAsBAQBBytIACwYCAAAAAAIAQeHSAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBoNQAC50BTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRVVFUllPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFVFRQQ0VUU1BBRFRQLw=='\n\nlet wasmBuffer\n\nObject.defineProperty(module, 'exports', {\n  get: () => {\n    return wasmBuffer\n      ? wasmBuffer\n      : (wasmBuffer = Buffer.from(wasmBase64, 'base64'))\n  }\n})\n", "'use strict'\n\nconst { Buffer } = require('node:buffer')\n\nconst wasmBase64 = 'AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRwX3NldF9sZW5pZW50X2hlYWRlcnMAISFsbGh0dHBfc2V0X2xlbmllbnRfY2h1bmtlZF9sZW5ndGgAIh1sbGh0dHBfc2V0X2xlbmllbnRfa2VlcF9hbGl2ZQAjJGxsaHR0cF9zZXRfbGVuaWVudF90cmFuc2Zlcl9lbmNvZGluZwAkGmxsaHR0cF9zZXRfbGVuaWVudF92ZXJzaW9uACUjbGxodHRwX3NldF9sZW5pZW50X2RhdGFfYWZ0ZXJfY2xvc2UAJidsbGh0dHBfc2V0X2xlbmllbnRfb3B0aW9uYWxfbGZfYWZ0ZXJfY3IAJyxsbGh0dHBfc2V0X2xlbmllbnRfb3B0aW9uYWxfY3JsZl9hZnRlcl9jaHVuawAoKGxsaHR0cF9zZXRfbGVuaWVudF9vcHRpb25hbF9jcl9iZWZvcmVfbGYAKSpsbGh0dHBfc2V0X2xlbmllbnRfc3BhY2VzX2FmdGVyX2NodW5rX3NpemUAKhhsbGh0dHBfbWVzc2FnZV9uZWVkc19lb2YANgkYAQBBAQsSAQIDBAUKBgcyNDMuKy8tLDAxCuzaAjQWAEHA1QAoAgAEQAALQcDVAEEBNgIACxQAIAAQOCAAIAI2AjggACABOgAoCxQAIAAgAC8BNCAALQAwIAAQNxAACx4BAX9BwAAQOiIBEDggAUGACDYCOCABIAA6ACggAQuPDAEHfwJAIABFDQAgAEEIayIBIABBBGsoAgAiAEF4cSIEaiEFAkAgAEEBcQ0AIABBA3FFDQEgASABKAIAIgBrIgFB1NUAKAIASQ0BIAAgBGohBAJAAkBB2NUAKAIAIAFHBEAgAEH/AU0EQCAAQQN2IQMgASgCCCIAIAEoAgwiAkYEQEHE1QBBxNUAKAIAQX4gA3dxNgIADAULIAIgADYCCCAAIAI2AgwMBAsgASgCGCEGIAEgASgCDCIARwRAIAAgASgCCCICNgIIIAIgADYCDAwDCyABQRRqIgMoAgAiAkUEQCABKAIQIgJFDQIgAUEQaiEDCwNAIAMhByACIgBBFGoiAygCACICDQAgAEEQaiEDIAAoAhAiAg0ACyAHQQA2AgAMAgsgBSgCBCIAQQNxQQNHDQIgBSAAQX5xNgIEQczVACAENgIAIAUgBDYCACABIARBAXI2AgQMAwtBACEACyAGRQ0AAkAgASgCHCICQQJ0QfTXAGoiAygCACABRgRAIAMgADYCACAADQFByNUAQcjVACgCAEF+IAJ3cTYCAAwCCyAGQRBBFCAGKAIQIAFGG2ogADYCACAARQ0BCyAAIAY2AhggASgCECICBEAgACACNgIQIAIgADYCGAsgAUEUaigCACICRQ0AIABBFGogAjYCACACIAA2AhgLIAEgBU8NACAFKAIEIgBBAXFFDQACQAJAAkACQCAAQQJxRQRAQdzVACgCACAFRgRAQdzVACABNgIAQdDVAEHQ1QAoAgAgBGoiADYCACABIABBAXI2AgQgAUHY1QAoAgBHDQZBzNUAQQA2AgBB2NUAQQA2AgAMBgtB2NUAKAIAIAVGBEBB2NUAIAE2AgBBzNUAQczVACgCACAEaiIANgIAIAEgAEEBcjYCBCAAIAFqIAA2AgAMBgsgAEF4cSAEaiEEIABB/wFNBEAgAEEDdiEDIAUoAggiACAFKAIMIgJGBEBBxNUAQcTVACgCAEF+IAN3cTYCAAwFCyACIAA2AgggACACNgIMDAQLIAUoAhghBiAFIAUoAgwiAEcEQEHU1QAoAgAaIAAgBSgCCCICNgIIIAIgADYCDAwDCyAFQRRqIgMoAgAiAkUEQCAFKAIQIgJFDQIgBUEQaiEDCwNAIAMhByACIgBBFGoiAygCACICDQAgAEEQaiEDIAAoAhAiAg0ACyAHQQA2AgAMAgsgBSAAQX5xNgIEIAEgBGogBDYCACABIARBAXI2AgQMAwtBACEACyAGRQ0AAkAgBSgCHCICQQJ0QfTXAGoiAygCACAFRgRAIAMgADYCACAADQFByNUAQcjVACgCAEF+IAJ3cTYCAAwCCyAGQRBBFCAGKAIQIAVGG2ogADYCACAARQ0BCyAAIAY2AhggBSgCECICBEAgACACNgIQIAIgADYCGAsgBUEUaigCACICRQ0AIABBFGogAjYCACACIAA2AhgLIAEgBGogBDYCACABIARBAXI2AgQgAUHY1QAoAgBHDQBBzNUAIAQ2AgAMAQsgBEH/AU0EQCAEQXhxQezVAGohAAJ/QcTVACgCACICQQEgBEEDdnQiA3FFBEBBxNUAIAIgA3I2AgAgAAwBCyAAKAIICyICIAE2AgwgACABNgIIIAEgADYCDCABIAI2AggMAQtBHyECIARB////B00EQCAEQSYgBEEIdmciAGt2QQFxIABBAXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgLhocCAwd/A34BeyABIAJqIQQCQCAAIgMoAgwiAA0AIAMoAgQEQCADIAE2AgQLIwBBEGsiCSQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADKAIcIgJBAmsO/AEB+QECAwQFBgcICQoLDA0ODxAREvgBE/cBFBX2ARYX9QEYGRobHB0eHyD9AfsBIfQBIiMkJSYnKCkqK/MBLC0uLzAxMvIB8QEzNPAB7wE1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk/6AVBRUlPuAe0BVOwBVesBVldYWVrqAVtcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAekB6AHPAecB0AHmAdEB0gHTAdQB5QHVAdYB1wHYAdkB2gHbAdwB3QHeAd8B4AHhAeIB4wEA/AELQQAM4wELQQ4M4gELQQ0M4QELQQ8M4AELQRAM3wELQRMM3gELQRQM3QELQRUM3AELQRYM2wELQRcM2gELQRgM2QELQRkM2AELQRoM1wELQRsM1gELQRwM1QELQR0M1AELQR4M0wELQR8M0gELQSAM0QELQSEM0AELQQgMzwELQSIMzgELQSQMzQELQSMMzAELQQcMywELQSUMygELQSYMyQELQScMyAELQSgMxwELQRIMxgELQREMxQELQSkMxAELQSoMwwELQSsMwgELQSwMwQELQd4BDMABC0EuDL8BC0EvDL4BC0EwDL0BC0ExDLwBC0EyDLsBC0EzDLoBC0E0DLkBC0HfAQy4AQtBNQy3AQtBOQy2AQtBDAy1AQtBNgy0AQtBNwyzAQtBOAyyAQtBPgyxAQtBOgywAQtB4AEMrwELQQsMrgELQT8MrQELQTsMrAELQQoMqwELQTwMqgELQT0MqQELQeEBDKgBC0HBAAynAQtBwAAMpgELQcIADKUBC0EJDKQBC0EtDKMBC0HDAAyiAQtBxAAMoQELQcUADKABC0HGAAyfAQtBxwAMngELQcgADJ0BC0HJAAycAQtBygAMmwELQcsADJoBC0HMAAyZAQtBzQAMmAELQc4ADJcBC0HPAAyWAQtB0AAMlQELQdEADJQBC0HSAAyTAQtB0wAMkgELQdUADJEBC0HUAAyQAQtB1gAMjwELQdcADI4BC0HYAAyNAQtB2QAMjAELQdoADIsBC0HbAAyKAQtB3AAMiQELQd0ADIgBC0HeAAyHAQtB3wAMhgELQeAADIUBC0HhAAyEAQtB4gAMgwELQeMADIIBC0HkAAyBAQtB5QAMgAELQeIBDH8LQeYADH4LQecADH0LQQYMfAtB6AAMewtBBQx6C0HpAAx5C0EEDHgLQeoADHcLQesADHYLQewADHULQe0ADHQLQQMMcwtB7gAMcgtB7wAMcQtB8AAMcAtB8gAMbwtB8QAMbgtB8wAMbQtB9AAMbAtB9QAMawtB9gAMagtBAgxpC0H3AAxoC0H4AAxnC0H5AAxmC0H6AAxlC0H7AAxkC0H8AAxjC0H9AAxiC0H+AAxhC0H/AAxgC0GAAQxfC0GBAQxeC0GCAQxdC0GDAQxcC0GEAQxbC0GFAQxaC0GGAQxZC0GHAQxYC0GIAQxXC0GJAQxWC0GKAQxVC0GLAQxUC0GMAQxTC0GNAQxSC0GOAQxRC0GPAQxQC0GQAQxPC0GRAQxOC0GSAQxNC0GTAQxMC0GUAQxLC0GVAQxKC0GWAQxJC0GXAQxIC0GYAQxHC0GZAQxGC0GaAQxFC0GbAQxEC0GcAQxDC0GdAQxCC0GeAQxBC0GfAQxAC0GgAQw/C0GhAQw+C0GiAQw9C0GjAQw8C0GkAQw7C0GlAQw6C0GmAQw5C0GnAQw4C0GoAQw3C0GpAQw2C0GqAQw1C0GrAQw0C0GsAQwzC0GtAQwyC0GuAQwxC0GvAQwwC0GwAQwvC0GxAQwuC0GyAQwtC0GzAQwsC0G0AQwrC0G1AQwqC0G2AQwpC0G3AQwoC0G4AQwnC0G5AQwmC0G6AQwlC0G7AQwkC0G8AQwjC0G9AQwiC0G+AQwhC0G/AQwgC0HAAQwfC0HBAQweC0HCAQwdC0EBDBwLQcMBDBsLQcQBDBoLQcUBDBkLQcYBDBgLQccBDBcLQcgBDBYLQckBDBULQcoBDBQLQcsBDBMLQcwBDBILQc0BDBELQc4BDBALQc8BDA8LQdABDA4LQdEBDA0LQdIBDAwLQdMBDAsLQdQBDAoLQdUBDAkLQdYBDAgLQeMBDAcLQdcBDAYLQdgBDAULQdkBDAQLQdoBDAMLQdsBDAILQd0BDAELQdwBCyECA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAn8CQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAwJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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A0EXNgIcIAMgADYCDCADIAFBAWo2AhQM+AILIABBFUYNI0EAIQIgA0EANgIcIAMgATYCFCADQdYMNgIQIANBIzYCDAz3AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQwdCyADQRk2AhwgAyAANgIMIAMgAUEBajYCFAz2AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQzvAgsgA0EaNgIcIAMgADYCDCADIAFBAWo2AhQM9QILIABBFUYNH0EAIQIgA0EANgIcIAMgATYCFCADQdAPNgIQIANBIjYCDAz0AgsgAygCBCEAIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDBsLIANBHDYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgzzAgsgAygCBCEAIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDOsCCyADQR02AhwgAyAANgIMIAMgAUEBajYCFEEAIQIM8gILIABBO0cNASABQQFqIQELQSYhAgzXAgtBACECIANBADYCHCADIAE2AhQgA0GfFTYCECADQQw2AgwM7wILIAEgBEcEQANAIAEtAABBIEcNhAIgBCABQQFqIgFHDQALQSwhAgzvAgtBLCECDO4CCyABIARGBEBBNCECDO4CCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtBNCECDO8CCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUNnwIgA0EyNgIcIAMgATYCFCADIAA2AgxBACECDO4CCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUEQCABQQFqIQEMnwILIANBMjYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgztAgsgASAERwRAAkADQCABLQAAQTBrIgBB/wFxQQpPBEBBOiECDNcCCyADKQMgIgtCmbPmzJmz5swZVg0BIAMgC0IKfiIKNwMgIAogAK1C/wGDIgtCf4VWDQEgAyAKIAt8NwMgIAQgAUEBaiIBRw0AC0HAACECDO4CCyADKAIEIQAgA0EANgIEIAMgACABQQFqIgEQMSIADRcM4gILQcAAIQIM7AILIAEgBEYEQEHJACECDOwCCwJAA0ACQCABLQAAQQlrDhgAAqICogKpAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAgCiAgsgBCABQQFqIgFHDQALQckAIQIM7AILIAFBAWohASADQS9qLQAAQQFxDaUCIANBADYCHCADIAE2AhQgA0GXEDYCECADQQo2AgxBACECDOsCCyABIARHBEADQCABLQAAQSBHDRUgBCABQQFqIgFHDQALQfgAIQIM6wILQfgAIQIM6gILIANBAjoAKAw4C0EAIQIgA0EANgIcIANBvws2AhAgA0ECNgIMIAMgAUEBajYCFAzoAgtBACECDM4CC0ENIQIMzQILQRMhAgzMAgtBFSECDMsCC0EWIQIMygILQRghAgzJAgtBGSECDMgCC0EaIQIMxwILQRshAgzGAgtBHCECDMUCC0EdIQIMxAILQR4hAgzDAgtBHyECDMICC0EgIQIMwQILQSIhAgzAAgtBIyECDL8CC0ElIQIMvgILQeUAIQIMvQILIANBPTYCHCADIAE2AhQgAyAANgIMQQAhAgzVAgsgA0EbNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIM1AILIANBIDYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNMCCyADQRM2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzSAgsgA0ELNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0QILIANBEDYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNACCyADQSA2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzPAgsgA0ELNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzgILIANBDDYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM0CC0EAIQIgA0EANgIcIAMgATYCFCADQd0ONgIQIANBEjYCDAzMAgsCQANAAkAgAS0AAEEKaw4EAAICAAILIAQgAUEBaiIBRw0AC0H9ASECDMwCCwJAAkAgAy0ANkEBRw0AQQAhAAJAIAMoAjgiAkUNACACKAJgIgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB/AE2AhwgAyABNgIUIANB3Bk2AhAgA0EVNgIMQQAhAgzNAgtB3AEhAgyzAgsgA0EANgIcIAMgATYCFCADQfkLNgIQIANBHzYCDEEAIQIMywILAkACQCADLQAoQQFrDgIEAQALQdsBIQIMsgILQdQBIQIMsQILIANBAjoAMUEAIQACQCADKAI4IgJFDQAgAigCACICRQ0AIAMgAhEAACEACyAARQRAQd0BIQIMsQILIABBFUcEQCADQQA2AhwgAyABNgIUIANBtAw2AhAgA0EQNgIMQQAhAgzKAgsgA0H7ATYCHCADIAE2AhQgA0GBGjYCECADQRU2AgxBACECDMkCCyABIARGBEBB+gEhAgzJAgsgAS0AAEHIAEYNASADQQE6ACgLQcABIQIMrgILQdoBIQIMrQILIAEgBEcEQCADQQw2AgggAyABNgIEQdkBIQIMrQILQfkBIQIMxQILIAEgBEYEQEH4ASECDMUCCyABLQAAQcgARw0EIAFBAWohAUHYASECDKsCCyABIARGBEBB9wEhAgzEAgsCQAJAIAEtAABBxQBrDhAABQUFBQUFBQUFBQUFBQUBBQsgAUEBaiEBQdYBIQIMqwILIAFBAWohAUHXASECDKoCC0H2ASECIAEgBEYNwgIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABButUAai0AAEcNAyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMwwILIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAuIgBFBEBB4wEhAgyqAgsgA0H1ATYCHCADIAE2AhQgAyAANgIMQQAhAgzCAgtB9AEhAiABIARGDcECIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjVAGotAABHDQIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMICCyADQYEEOwEoIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAuIgANAwwCCyADQQA2AgALQQAhAiADQQA2AhwgAyABNgIUIANB5R82AhAgA0EINgIMDL8CC0HVASECDKUCCyADQfMBNgIcIAMgATYCFCADIAA2AgxBACECDL0CC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ1uIABBFUcEQCADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgy9AgsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDLwCCyABIARHBEAgA0ENNgIIIAMgATYCBEHTASECDKMCC0HyASECDLsCCyABIARGBEBB8QEhAgy7AgsCQAJAAkAgAS0AAEHIAGsOCwABCAgICAgICAgCCAsgAUEBaiEBQdABIQIMowILIAFBAWohAUHRASECDKICCyABQQFqIQFB0gEhAgyhAgtB8AEhAiABIARGDbkCIAMoAgAiACAEIAFraiEGIAEgAGtBAmohBQNAIAEtAAAgAEG11QBqLQAARw0EIABBAkYNAyAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy5AgtB7wEhAiABIARGDbgCIAMoAgAiACAEIAFraiEGIAEgAGtBAWohBQNAIAEtAAAgAEGz1QBqLQAARw0DIABBAUYNAiAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy4AgtB7gEhAiABIARGDbcCIAMoAgAiACAEIAFraiEGIAEgAGtBAmohBQNAIAEtAAAgAEGw1QBqLQAARw0CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy3AgsgAygCBCEAIANCADcDACADIAAgBUEBaiIBECsiAEUNAiADQewBNgIcIAMgATYCFCADIAA2AgxBACECDLYCCyADQQA2AgALIAMoAgQhACADQQA2AgQgAyAAIAEQKyIARQ2cAiADQe0BNgIcIAMgATYCFCADIAA2AgxBACECDLQCC0HPASECDJoCC0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMtAILQc4BIQIMmgILIANB6wE2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyyAgsgASAERgRAQesBIQIMsgILIAEtAABBL0YEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDEEAIQIMsQILQc0BIQIMlwILIAEgBEcEQCADQQ42AgggAyABNgIEQcwBIQIMlwILQeoBIQIMrwILIAEgBEYEQEHpASECDK8CCyABLQAAQTBrIgBB/wFxQQpJBEAgAyAAOgAqIAFBAWohAUHLASECDJYCCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNlwIgA0HoATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgsgASAERgRAQecBIQIMrgILAkAgAS0AAEEuRgRAIAFBAWohAQwBCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNmAIgA0HmATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgtBygEhAgyUAgsgASAERgRAQeUBIQIMrQILQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNAiADQeIBNgIcIAMgATYCFCADIAA2AgxBACECDK8CCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNmgIgA0HjATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5AE2AhwgAyABNgIUIAMgADYCDAytAgtByQEhAgyTAgtBACEAAkAgAygCOCICRQ0AIAIoAkQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0GkDTYCECADQSE2AgxBACECDK0CC0HIASECDJMCCyADQeEBNgIcIAMgATYCFCADQdAaNgIQIANBFTYCDEEAIQIMqwILIAEgBEYEQEHhASECDKsCCwJAIAEtAABBIEYEQCADQQA7ATQgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GZETYCECADQQk2AgxBACECDKsCC0HHASECDJECCyABIARGBEBB4AEhAgyqAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKsCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyqAgtBxgEhAgyQAgsgASAERgRAQd8BIQIMqQILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyqAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqQILQcUBIQIMjwILIAEgBEYEQEHeASECDKgCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqQILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKgCC0HEASECDI4CCyABIARGBEBB3QEhAgynAgsCQAJAAkACQCABLQAAQQprDhcCAwMAAwMDAwMDAwMDAwMDAwMDAwMDAQMLIAFBAWoMBQsgAUEBaiEBQcMBIQIMjwILIAFBAWohASADQS9qLQAAQQFxDQggA0EANgIcIAMgATYCFCADQY0LNgIQIANBDTYCDEEAIQIMpwILIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKYCCyABIARHBEAgA0EPNgIIIAMgATYCBEEBIQIMjQILQdwBIQIMpQILAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0HbASECDKYCCyADKAIEIQAgA0EANgIEIAMgACABEC0iAEUEQCABQQFqIQEMBAsgA0HaATYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgylAgsgAygCBCEAIANBADYCBCADIAAgARAtIgANASABQQFqCyEBQcEBIQIMigILIANB2QE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMogILQcIBIQIMiAILIANBL2otAABBAXENASADQQA2AhwgAyABNgIUIANB5Bw2AhAgA0EZNgIMQQAhAgygAgsgASAERgRAQdkB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CyADIAU2AgAMkAILIANBADYCACAGQQFqIQFBGgw8C0HKASECIAEgBEYNjgIgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBjdUAai0AAEcNOyAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMjwILIANBADYCACAGQQFqIQFBIQw7CyABIARGBEBByQEhAgyOAgsCQAJAIAEtAABBwQBrDhQAPT09PT09PT09PT09PT09PT09AT0LIAFBAWohAUGtASECDPUBCyABQQFqIQFBsAEhAgz0AQsgASAERgRAQcgBIQIMjQILAkACQCABLQAAQdUAaw4LADw8PDw8PDw8PAE8CyABQQFqIQFBrgEhAgz0AQsgAUEBaiEBQa8BIQIM8wELQccBIQIgASAERg2LAiADKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEGE1QBqLQAARw04IABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyMAgsgA0EANgIAIAZBAWohAUEqDDgLIAEgBEYEQEHGASECDIsCCyABLQAAQdAARw04IAFBAWohAUElDDcLQcUBIQIgASAERg2JAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGB1QBqLQAARw02IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyKAgsgA0EANgIAIAZBAWohAUEODDYLIAEgBEYEQEHEASECDIkCCyABLQAAQcUARw02IAFBAWohAUGrASECDO8BCyABIARGBEBBwwEhAgyIAgsCQAJAAkACQCABLQAAQcIAaw4PAAECOTk5OTk5OTk5OTkDOQsgAUEBaiEBQacBIQIM8QELIAFBAWohAUGoASECDPABCyABQQFqIQFBqQEhAgzvAQsgAUEBaiEBQaoBIQIM7gELQcIBIQIgASAERg2GAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEH+1ABqLQAARw0zIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyHAgsgA0EANgIAIAZBAWohAUEUDDMLQcEBIQIgASAERg2FAiADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANA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BTYCAAzsAQsgA0EANgIAIAZBAWohAUEXDBgLQaYBIQIgASAERg3qASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHB1ABqLQAARw0XIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzrAQsgA0EANgIAIAZBAWohAUEYDBcLIAEgBEYEQEGlASECDOoBCwJAAkAgAS0AAEHJAGsOBwAZGRkZGQEZCyABQQFqIQFBiwEhAgzRAQsgAUEBaiEBQYwBIQIM0AELQaQBIQIgASAERg3oASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGm1QBqLQAARw0VIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzpAQsgA0EANgIAIAZBAWohAUEJDBULQaMBIQIgASAERg3nASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGk1QBqLQAARw0UIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzoAQsgA0EANgIAIAZBAWohAUEfDBQLQaIBIQIgASAERg3mASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEG+1ABqLQAARw0TIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAznAQsgA0EANgIAIAZBAWohAUECDBMLQaEBIQIgASAERg3lASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYDQCABLQAAIABBvNQAai0AAEcNESAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5QELIAEgBEYEQEGgASECDOUBC0EBIAEtAABB3wBHDREaIAFBAWohAUGHASECDMsBCyADQQA2AgAgBkEBaiEBQYgBIQIMygELQZ8BIQIgASAERg3iASADKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEGE1QBqLQAARw0PIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzjAQsgA0EANgIAIAZBAWohAUEpDA8LQZ4BIQIgASAERg3hASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEG41ABqLQAARw0OIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAziAQsgA0EANgIAIAZBAWohAUEtDA4LIAEgBEYEQEGdASECDOEBCyABLQAAQcUARw0OIAFBAWohAUGEASECDMcBCyABIARGBEBBnAEhAgzgAQsCQAJAIAEtAABBzABrDggADw8PDw8PAQ8LIAFBAWohAUGCASECDMcBCyABQQFqIQFBgwEhAgzGAQtBmwEhAiABIARGDd4BIAMoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQbPUAGotAABHDQsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADN8BCyADQQA2AgAgBkEBaiEBQSMMCwtBmgEhAiABIARGDd0BIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbDUAGotAABHDQogAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADN4BCyADQQA2AgAgBkEBaiEBQQAMCgsgASAERgRAQZkBIQIM3QELAkACQCABLQAAQcgAaw4IAAwMDAwMDAEMCyABQQFqIQFB/QAhAgzEAQsgAUEBaiEBQYABIQIMwwELIAEgBEYEQEGYASECDNwBCwJAAkAgAS0AAEHOAGsOAwALAQsLIAFBAWohAUH+ACECDMMBCyABQQFqIQFB/wAhAgzCAQsgASAERgRAQZcBIQIM2wELIAEtAABB2QBHDQggAUEBaiEBQQgMBwtBlgEhAiABIARGDdkBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQazUAGotAABHDQYgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNoBCyADQQA2AgAgBkEBaiEBQQUMBgtBlQEhAiABIARGDdgBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQabUAGotAABHDQUgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNkBCyADQQA2AgAgBkEBaiEBQRYMBQtBlAEhAiABIARGDdcBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDQQgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNgBCyADQQA2AgAgBkEBaiEBQRAMBAsgASAERgRAQZMBIQIM1wELAkACQCABLQAAQcMAaw4MAAYGBgYGBgYGBgYBBgsgAUEBaiEBQfkAIQIMvgELIAFBAWohAUH6ACECDL0BC0GSASECIAEgBEYN1QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBoNQAai0AAEcNAiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM1gELIANBADYCACAGQQFqIQFBJAwCCyADQQA2AgAMAgsgASAERgRAQZEBIQIM1AELIAEtAABBzABHDQEgAUEBaiEBQRMLOgApIAMoAgQhACADQQA2AgQgAyAAIAEQLiIADQIMAQtBACECIANBADYCHCADIAE2AhQgA0H+HzYCECADQQY2AgwM0QELQfgAIQIMtwELIANBkAE2AhwgAyABNgIUIAMgADYCDEEAIQIMzwELQQAhAAJAIAMoAjgiAkUNACACKAJAIgJFDQAgAyACEQAAIQALIABFDQAgAEEVRg0BIANBADYCHCADIAE2AhQgA0GCDzYCECADQSA2AgxBACECDM4BC0H3ACECDLQBCyADQY8BNgIcIAMgATYCFCADQewbNgIQIANBFTYCDEEAIQIMzAELIAEgBEYEQEGPASECDMwBCwJAIAEtAABBIEYEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQZsfNgIQIANBBjYCDEEAIQIMzAELQQIhAgyyAQsDQCABLQAAQSBHDQIgBCABQQFqIgFHDQALQY4BIQIMygELIAEgBEYEQEGNASECDMoBCwJAIAEtAABBCWsOBEoAAEoAC0H1ACECDLABCyADLQApQQVGBEBB9gAhAgywAQtB9AAhAgyvAQsgASAERgRAQYwBIQIMyAELIANBEDYCCCADIAE2AgQMCgsgASAERgRAQYsBIQIMxwELAkAgAS0AAEEJaw4ERwAARwALQfMAIQIMrQELIAEgBEcEQCADQRA2AgggAyABNgIEQfEAIQIMrQELQYoBIQIMxQELAkAgASAERwRAA0AgAS0AAEGg0ABqLQAAIgBBA0cEQAJAIABBAWsOAkkABAtB8AAhAgyvAQsgBCABQQFqIgFHDQALQYgBIQIMxgELQYgBIQIMxQELIANBADYCHCADIAE2AhQgA0HbIDYCECADQQc2AgxBACECDMQBCyABIARGBEBBiQEhAgzEAQsCQAJAAkAgAS0AAEGg0gBqLQAAQQFrDgNGAgABC0HyACECDKwBCyADQQA2AhwgAyABNgIUIANBtBI2AhAgA0EHNgIMQQAhAgzEAQtB6gAhAgyqAQsgASAERwRAIAFBAWohAUHvACECDKoBC0GHASECDMIBCyAEIAEiAEYEQEGGASECDMIBCyAALQAAIgFBL0YEQCAAQQFqIQFB7gAhAgypAQsgAUEJayICQRdLDQEgACEBQQEgAnRBm4CABHENQQwBCyAEIAEiAEYEQEGFASECDMEBCyAALQAAQS9HDQAgAEEBaiEBDAMLQQAhAiADQQA2AhwgAyAANgIUIANB2yA2AhAgA0EHNgIMDL8BCwJAAkACQAJAAkADQCABLQAAQaDOAGotAAAiAEEFRwRAAkACQCAAQQFrDghHBQYHCAAEAQgLQesAIQIMrQELIAFBAWohAUHtACECDKwBCyAEIAFBAWoiAUcNAAtBhAEhAgzDAQsgAUEBagwUCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQdsANgIcIAMgATYCFCADIAA2AgxBACECDMEBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDMABCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQfoANgIcIAMgATYCFCADIAA2AgxBACECDL8BCyADQQA2AhwgAyABNgIUIANB+Q82AhAgA0EHNgIMQQAhAgy+AQsgASAERgRAQYMBIQIMvgELAkAgAS0AAEGgzgBqLQAAQQFrDgg+BAUGAAgCAwcLIAFBAWohAQtBAyECDKMBCyABQQFqDA0LQQAhAiADQQA2AhwgA0HREjYCECADQQc2AgwgAyABQQFqNgIUDLoBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQdsANgIcIAMgATYCFCADIAA2AgxBACECDLkBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDLgBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQfoANgIcIAMgATYCFCADIAA2AgxBACECDLcBCyADQQA2AhwgAyABNgIUIANB+Q82AhAgA0EHNgIMQQAhAgy2AQtB7AAhAgycAQsgASAERgRAQYIBIQIMtQELIAFBAWoMAgsgASAERgRAQYEBIQIMtAELIAFBAWoMAQsgASAERg0BIAFBAWoLIQFBBCECDJgBC0GAASECDLABCwNAIAEtAABBoMwAai0AACIAQQJHBEAgAEEBRwRAQekAIQIMmQELDDELIAQgAUEBaiIBRw0AC0H/ACECDK8BCyABIARGBEBB/gAhAgyvAQsCQCABLQAAQQlrDjcvAwYvBAYGBgYGBgYGBgYGBgYGBgYGBgUGBgIGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYABgsgAUEBagshAUEFIQIMlAELIAFBAWoMBgsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgyrAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgyqAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgypAQsgA0EANgIcIAMgATYCFCADQY0UNgIQIANBBzYCDEEAIQIMqAELAkACQAJAAkADQCABLQAAQaDKAGotAAAiAEEFRwRAAkAgAEEBaw4GLgMEBQYABgtB6AAhAgyUAQsgBCABQQFqIgFHDQALQf0AIQIMqwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMqgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMqQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMqAELIANBADYCHCADIAE2AhQgA0HkCDYCECADQQc2AgxBACECDKcBCyABIARGDQEgAUEBagshAUEGIQIMjAELQfwAIQIMpAELAkACQAJAAkADQCABLQAAQaDIAGotAAAiAEEFRwRAIABBAWsOBCkCAwQFCyAEIAFBAWoiAUcNAAtB+wAhAgynAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgymAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgylAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgykAQsgA0EANgIcIAMgATYCFCADQbwKNgIQIANBBzYCDEEAIQIMowELQc8AIQIMiQELQdEAIQIMiAELQecAIQIMhwELIAEgBEYEQEH6ACECDKABCwJAIAEtAABBCWsOBCAAACAACyABQQFqIQFB5gAhAgyGAQsgASAERgRAQfkAIQIMnwELAkAgAS0AAEEJaw4EHwAAHwALQQAhAAJAIAMoAjgiAkUNACACKAI4IgJFDQAgAyACEQAAIQALIABFBEBB4gEhAgyGAQsgAEEVRwRAIANBADYCHCADIAE2AhQgA0HJDTYCECADQRo2AgxBACECDJ8BCyADQfgANgIcIAMgATYCFCADQeoaNgIQIANBFTYCDEEAIQIMngELIAEgBEcEQCADQQ02AgggAyABNgIEQeQAIQIMhQELQfcAIQIMnQELIAEgBEYEQEH2ACECDJ0BCwJAAkACQCABLQAAQcgAaw4LAAELCwsLCwsLCwILCyABQQFqIQFB3QAhAgyFAQsgAUEBaiEBQeAAIQIMhAELIAFBAWohAUHjACECDIMBC0H1ACECIAEgBEYNmwEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBtdUAai0AAEcNCCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMnAELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgAEQCADQfQANgIcIAMgATYCFCADIAA2AgxBACECDJwBC0HiACECDIIBC0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMnAELQeEAIQIMggELIANB8wA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyaAQsgAy0AKSIAQSNrQQtJDQkCQCAAQQZLDQBBASAAdEHKAHFFDQAMCgtBACECIANBADYCHCADIAE2AhQgA0HtCTYCECADQQg2AgwMmQELQfIAIQIgASAERg2YASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGz1QBqLQAARw0FIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyZAQsgAygCBCEAIANCADcDACADIAAgBkEBaiIBECsiAARAIANB8QA2AhwgAyABNgIUIAMgADYCDEEAIQIMmQELQd8AIQIMfwtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJkBC0HeACECDH8LIANB8AA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyXAQsgAy0AKUEhRg0GIANBADYCHCADIAE2AhQgA0GRCjYCECADQQg2AgxBACECDJYBC0HvACECIAEgBEYNlQEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMlgELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgBFDQIgA0HtADYCHCADIAE2AhQgAyAANgIMQQAhAgyVAQsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNgAEgA0HuADYCHCADIAE2AhQgAyAANgIMQQAhAgyTAQtB3AAhAgx5C0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMkwELQdsAIQIMeQsgA0HsADYCHCADIAE2AhQgA0GAGzYCECADQRU2AgxBACECDJEBCyADLQApIgBBI0kNACAAQS5GDQAgA0EANgIcIAMgATYCFCADQckJNgIQIANBCDYCDEEAIQIMkAELQdoAIQIMdgsgASAERgRAQesAIQIMjwELAkAgAS0AAEEvRgRAIAFBAWohAQwBCyAD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ciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3Byb3RvY29sX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fcHJvdG9jb2wARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBVbmV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fcHJvdG9jb2xfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX1BST1RPQ09MX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8sIFJUU1AvIG9yIElDRS8A5xUAAK8VAACkEgAAkhoAACYWAACeFAAA2xkAAHkVAAB+EgAA/hQAADYVAAALFgAA2BYAAPMSAABCGAAArBYAABIVAAAUFwAA7xcAAEgUAABxFwAAshoAAGsZAAB+GQAANRQAAIIaAABEFwAA/RYAAB4YAACHFwAAqhkAAJMSAAAHGAAALBcAAMoXAACkFwAA5xUAAOcVAABYFwAAOxgAAKASAAAtHAAAwxEAAEgRAADeEgAAQhMAAKQZAAD9EAAA9xUAAKUVAADvFgAA+BkAAEoWAABWFgAA9RUAAAoaAAAIGgAAARoAAKsVAABCEgAA1xAAAEwRAAAFGQAAVBYAAB4RAADKGQAAyBkAAE4WAAD/GAAAcRQAAPAVAADuFQAAlBkAAPwVAAC/GQAAmxkAAHwUAABDEQAAcBgAAJUUAAAnFAAAGRQAANUSAADUGQAARBYAAPcQAEG5OwsBAQBB0DsL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBuj0LBAEAAAIAQdE9C14DBAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAUAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEG6PwsEAQAAAgBB0T8LXgMAAwMDAwMAAAMDAAMDAAMDAwMDAwMDAwMABAAFAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwADAAMAQbDBAAsNbG9zZWVlcC1hbGl2ZQBBycEACwEBAEHgwQAL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBycMACwEBAEHgwwAL5wEBAQEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAWNodW5rZWQAQfHFAAteAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBB0McACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQYDIAAsgcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQpTTQ0KDQoAQanIAAsFAQIAAQMAQcDIAAtfBAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanKAAsFAQIAAQMAQcDKAAtfBAUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanMAAsEAQAAAQBBwcwAC14CAgACAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAEGpzgALBQECAAEDAEHAzgALXwQFAAAFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUABQAHCAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAUABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAAAAFAEGp0AALBQEBAAEBAEHA0AALAQEAQdrQAAtBAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQanSAAsFAQEAAQEAQcDSAAsBAQBBytIACwYCAAAAAAIAQeHSAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBoNQAC50BTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRVVFUllPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFVFRQQ0VUU1BBRFRQLw=='\n\nlet wasmBuffer\n\nObject.defineProperty(module, 'exports', {\n  get: () => {\n    return wasmBuffer\n      ? wasmBuffer\n      : (wasmBuffer = Buffer.from(wasmBase64, 'base64'))\n  }\n})\n", "'use strict'\n\nconst corsSafeListedMethods = /** @type {const} */ (['GET', 'HEAD', 'POST'])\nconst corsSafeListedMethodsSet = new Set(corsSafeListedMethods)\n\nconst nullBodyStatus = /** @type {const} */ ([101, 204, 205, 304])\n\nconst redirectStatus = /** @type {const} */ ([301, 302, 303, 307, 308])\nconst redirectStatusSet = new Set(redirectStatus)\n\n/**\n * @see https://fetch.spec.whatwg.org/#block-bad-port\n */\nconst badPorts = /** @type {const} */ ([\n  '1', '7', '9', '11', '13', '15', '17', '19', '20', '21', '22', '23', '25', '37', '42', '43', '53', '69', '77', '79',\n  '87', '95', '101', '102', '103', '104', '109', '110', '111', '113', '115', '117', '119', '123', '135', '137',\n  '139', '143', '161', '179', '389', '427', '465', '512', '513', '514', '515', '526', '530', '531', '532',\n  '540', '548', '554', '556', '563', '587', '601', '636', '989', '990', '993', '995', '1719', '1720', '1723',\n  '2049', '3659', '4045', '4190', '5060', '5061', '6000', '6566', '6665', '6666', '6667', '6668', '6669', '6679',\n  '6697', '10080'\n])\nconst badPortsSet = new Set(badPorts)\n\n/**\n * @see https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-header\n */\nconst referrerPolicyTokens = /** @type {const} */ ([\n  'no-referrer',\n  'no-referrer-when-downgrade',\n  'same-origin',\n  'origin',\n  'strict-origin',\n  'origin-when-cross-origin',\n  'strict-origin-when-cross-origin',\n  'unsafe-url'\n])\n\n/**\n * @see https://w3c.github.io/webappsec-referrer-policy/#referrer-policies\n */\nconst referrerPolicy = /** @type {const} */ ([\n  '',\n  ...referrerPolicyTokens\n])\nconst referrerPolicyTokensSet = new Set(referrerPolicyTokens)\n\nconst requestRedirect = /** @type {const} */ (['follow', 'manual', 'error'])\n\nconst safeMethods = /** @type {const} */ (['GET', 'HEAD', 'OPTIONS', 'TRACE'])\nconst safeMethodsSet = new Set(safeMethods)\n\nconst requestMode = /** @type {const} */ (['navigate', 'same-origin', 'no-cors', 'cors'])\n\nconst requestCredentials = /** @type {const} */ (['omit', 'same-origin', 'include'])\n\nconst requestCache = /** @type {const} */ ([\n  'default',\n  'no-store',\n  'reload',\n  'no-cache',\n  'force-cache',\n  'only-if-cached'\n])\n\n/**\n * @see https://fetch.spec.whatwg.org/#request-body-header-name\n */\nconst requestBodyHeader = /** @type {const} */ ([\n  'content-encoding',\n  'content-language',\n  'content-location',\n  'content-type',\n  // See https://github.com/nodejs/undici/issues/2021\n  // 'Content-Length' is a forbidden header name, which is typically\n  // removed in the Headers implementation. However, undici doesn't\n  // filter out headers, so we add it here.\n  'content-length'\n])\n\n/**\n * @see https://fetch.spec.whatwg.org/#enumdef-requestduplex\n */\nconst requestDuplex = /** @type {const} */ ([\n  'half'\n])\n\n/**\n * @see http://fetch.spec.whatwg.org/#forbidden-method\n */\nconst forbiddenMethods = /** @type {const} */ (['CONNECT', 'TRACE', 'TRACK'])\nconst forbiddenMethodsSet = new Set(forbiddenMethods)\n\nconst subresource = /** @type {const} */ ([\n  'audio',\n  'audioworklet',\n  'font',\n  'image',\n  'manifest',\n  'paintworklet',\n  'script',\n  'style',\n  'track',\n  'video',\n  'xslt',\n  ''\n])\nconst subresourceSet = new Set(subresource)\n\nmodule.exports = {\n  subresource,\n  forbiddenMethods,\n  requestBodyHeader,\n  referrerPolicy,\n  requestRedirect,\n  requestMode,\n  requestCredentials,\n  requestCache,\n  redirectStatus,\n  corsSafeListedMethods,\n  nullBodyStatus,\n  safeMethods,\n  badPorts,\n  requestDuplex,\n  subresourceSet,\n  badPortsSet,\n  redirectStatusSet,\n  corsSafeListedMethodsSet,\n  safeMethodsSet,\n  forbiddenMethodsSet,\n  referrerPolicyTokens: referrerPolicyTokensSet\n}\n", "'use strict'\n\n// In case of breaking changes, increase the version\n// number to avoid conflicts.\nconst globalOrigin = Symbol.for('undici.globalOrigin.1')\n\nfunction getGlobalOrigin () {\n  return globalThis[globalOrigin]\n}\n\nfunction setGlobalOrigin (newOrigin) {\n  if (newOrigin === undefined) {\n    Object.defineProperty(globalThis, globalOrigin, {\n      value: undefined,\n      writable: true,\n      enumerable: false,\n      configurable: false\n    })\n\n    return\n  }\n\n  const parsedURL = new URL(newOrigin)\n\n  if (parsedURL.protocol !== 'http:' && parsedURL.protocol !== 'https:') {\n    throw new TypeError(`Only http & https urls are allowed, received ${parsedURL.protocol}`)\n  }\n\n  Object.defineProperty(globalThis, globalOrigin, {\n    value: parsedURL,\n    writable: true,\n    enumerable: false,\n    configurable: false\n  })\n}\n\nmodule.exports = {\n  getGlobalOrigin,\n  setGlobalOrigin\n}\n", "'use strict'\n\nconst textDecoder = new TextDecoder()\n\n/**\n * @see https://encoding.spec.whatwg.org/#utf-8-decode\n * @param {Uint8Array} buffer\n */\nfunction utf8DecodeBytes (buffer) {\n  if (buffer.length === 0) {\n    return ''\n  }\n\n  // 1. Let buffer be the result of peeking three bytes from\n  //    ioQueue, converted to a byte sequence.\n\n  // 2. If buffer is 0xEF 0xBB 0xBF, then read three\n  //    bytes from ioQueue. (Do nothing with those bytes.)\n  if (buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) {\n    buffer = buffer.subarray(3)\n  }\n\n  // 3. Process a queue with an instance of UTF-8\u2019s\n  //    decoder, ioQueue, output, and \"replacement\".\n  const output = textDecoder.decode(buffer)\n\n  // 4. Return output.\n  return output\n}\n\nmodule.exports = {\n  utf8DecodeBytes\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { utf8DecodeBytes } = require('../../encoding')\n\n/**\n * @param {(char: string) => boolean} condition\n * @param {string} input\n * @param {{ position: number }} position\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#collect-a-sequence-of-code-points\n */\nfunction collectASequenceOfCodePoints (condition, input, position) {\n  // 1. Let result be the empty string.\n  let result = ''\n\n  // 2. While position doesn\u2019t point past the end of input and the\n  // code point at position within input meets the condition condition:\n  while (position.position < input.length && condition(input[position.position])) {\n    // 1. Append that code point to the end of result.\n    result += input[position.position]\n\n    // 2. Advance position by 1.\n    position.position++\n  }\n\n  // 3. Return result.\n  return result\n}\n\n/**\n * A faster collectASequenceOfCodePoints that only works when comparing a single character.\n * @param {string} char\n * @param {string} input\n * @param {{ position: number }} position\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#collect-a-sequence-of-code-points\n */\nfunction collectASequenceOfCodePointsFast (char, input, position) {\n  const idx = input.indexOf(char, position.position)\n  const start = position.position\n\n  if (idx === -1) {\n    position.position = input.length\n    return input.slice(start)\n  }\n\n  position.position = idx\n  return input.slice(start, position.position)\n}\n\nconst ASCII_WHITESPACE_REPLACE_REGEX = /[\\u0009\\u000A\\u000C\\u000D\\u0020]/g // eslint-disable-line no-control-regex\n\n/**\n * @param {string} data\n * @returns {Uint8Array | 'failure'}\n *\n * @see https://infra.spec.whatwg.org/#forgiving-base64-decode\n */\nfunction forgivingBase64 (data) {\n  // 1. Remove all ASCII whitespace from data.\n  data = data.replace(ASCII_WHITESPACE_REPLACE_REGEX, '')\n\n  let dataLength = data.length\n  // 2. If data\u2019s code point length divides by 4 leaving\n  // no remainder, then:\n  if (dataLength % 4 === 0) {\n    // 1. If data ends with one or two U+003D (=) code points,\n    // then remove them from data.\n    if (data.charCodeAt(dataLength - 1) === 0x003D) {\n      --dataLength\n      if (data.charCodeAt(dataLength - 1) === 0x003D) {\n        --dataLength\n      }\n    }\n  }\n\n  // 3. If data\u2019s code point length divides by 4 leaving\n  // a remainder of 1, then return failure.\n  if (dataLength % 4 === 1) {\n    return 'failure'\n  }\n\n  // 4. If data contains a code point that is not one of\n  //  U+002B (+)\n  //  U+002F (/)\n  //  ASCII alphanumeric\n  // then return failure.\n  if (/[^+/0-9A-Za-z]/.test(data.length === dataLength ? data : data.substring(0, dataLength))) {\n    return 'failure'\n  }\n\n  const buffer = Buffer.from(data, 'base64')\n  return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n}\n\n/**\n * @param {number} char\n * @returns {boolean}\n *\n * @see https://infra.spec.whatwg.org/#ascii-whitespace\n */\nfunction isASCIIWhitespace (char) {\n  return (\n    char === 0x09 || // \\t\n    char === 0x0a || // \\n\n    char === 0x0c || // \\f\n    char === 0x0d || // \\r\n    char === 0x20    // space\n  )\n}\n\n/**\n * @param {Uint8Array} input\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#isomorphic-decode\n */\nfunction isomorphicDecode (input) {\n  // 1. To isomorphic decode a byte sequence input, return a string whose code point\n  //    length is equal to input\u2019s length and whose code points have the same values\n  //    as the values of input\u2019s bytes, in the same order.\n  const length = input.length\n  if ((2 << 15) - 1 > length) {\n    return String.fromCharCode.apply(null, input)\n  }\n  let result = ''\n  let i = 0\n  let addition = (2 << 15) - 1\n  while (i < length) {\n    if (i + addition > length) {\n      addition = length - i\n    }\n    result += String.fromCharCode.apply(null, input.subarray(i, i += addition))\n  }\n  return result\n}\n\nconst invalidIsomorphicEncodeValueRegex = /[^\\x00-\\xFF]/ // eslint-disable-line no-control-regex\n\n/**\n * @param {string} input\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#isomorphic-encode\n */\nfunction isomorphicEncode (input) {\n  // 1. Assert: input contains no code points greater than U+00FF.\n  assert(!invalidIsomorphicEncodeValueRegex.test(input))\n\n  // 2. Return a byte sequence whose length is equal to input\u2019s code\n  //    point length and whose bytes have the same values as the\n  //    values of input\u2019s code points, in the same order\n  return input\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#parse-json-bytes-to-a-javascript-value\n * @param {Uint8Array} bytes\n */\nfunction parseJSONFromBytes (bytes) {\n  return JSON.parse(utf8DecodeBytes(bytes))\n}\n\n/**\n * @param {string} str\n * @param {boolean} [leading=true]\n * @param {boolean} [trailing=true]\n * @returns {string}\n *\n * @see https://infra.spec.whatwg.org/#strip-leading-and-trailing-ascii-whitespace\n */\nfunction removeASCIIWhitespace (str, leading = true, trailing = true) {\n  return removeChars(str, leading, trailing, isASCIIWhitespace)\n}\n\n/**\n * @param {string} str\n * @param {boolean} leading\n * @param {boolean} trailing\n * @param {(charCode: number) => boolean} predicate\n * @returns {string}\n */\nfunction removeChars (str, leading, trailing, predicate) {\n  let lead = 0\n  let trail = str.length - 1\n\n  if (leading) {\n    while (lead < str.length && predicate(str.charCodeAt(lead))) lead++\n  }\n\n  if (trailing) {\n    while (trail > 0 && predicate(str.charCodeAt(trail))) trail--\n  }\n\n  return lead === 0 && trail === str.length - 1 ? str : str.slice(lead, trail + 1)\n}\n\n// https://infra.spec.whatwg.org/#serialize-a-javascript-value-to-a-json-string\nfunction serializeJavascriptValueToJSONString (value) {\n  // 1. Let result be ? Call(%JSON.stringify%, undefined, \u00AB value \u00BB).\n  const result = JSON.stringify(value)\n\n  // 2. If result is undefined, then throw a TypeError.\n  if (result === undefined) {\n    throw new TypeError('Value is not JSON serializable')\n  }\n\n  // 3. Assert: result is a string.\n  assert(typeof result === 'string')\n\n  // 4. Return result.\n  return result\n}\n\nmodule.exports = {\n  collectASequenceOfCodePoints,\n  collectASequenceOfCodePointsFast,\n  forgivingBase64,\n  isASCIIWhitespace,\n  isomorphicDecode,\n  isomorphicEncode,\n  parseJSONFromBytes,\n  removeASCIIWhitespace,\n  removeChars,\n  serializeJavascriptValueToJSONString\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { forgivingBase64, collectASequenceOfCodePoints, collectASequenceOfCodePointsFast, isomorphicDecode, removeASCIIWhitespace, removeChars } = require('../infra')\n\nconst encoder = new TextEncoder()\n\n/**\n * @see https://mimesniff.spec.whatwg.org/#http-token-code-point\n */\nconst HTTP_TOKEN_CODEPOINTS = /^[-!#$%&'*+.^_|~A-Za-z0-9]+$/u\nconst HTTP_WHITESPACE_REGEX = /[\\u000A\\u000D\\u0009\\u0020]/u // eslint-disable-line\n\n/**\n * @see https://mimesniff.spec.whatwg.org/#http-quoted-string-token-code-point\n */\nconst HTTP_QUOTED_STRING_TOKENS = /^[\\u0009\\u0020-\\u007E\\u0080-\\u00FF]+$/u // eslint-disable-line\n\n// https://fetch.spec.whatwg.org/#data-url-processor\n/** @param {URL} dataURL */\nfunction dataURLProcessor (dataURL) {\n  // 1. Assert: dataURL\u2019s scheme is \"data\".\n  assert(dataURL.protocol === 'data:')\n\n  // 2. Let input be the result of running the URL\n  // serializer on dataURL with exclude fragment\n  // set to true.\n  let input = URLSerializer(dataURL, true)\n\n  // 3. Remove the leading \"data:\" string from input.\n  input = input.slice(5)\n\n  // 4. Let position point at the start of input.\n  const position = { position: 0 }\n\n  // 5. Let mimeType be the result of collecting a\n  // sequence of code points that are not equal\n  // to U+002C (,), given position.\n  let mimeType = collectASequenceOfCodePointsFast(\n    ',',\n    input,\n    position\n  )\n\n  // 6. Strip leading and trailing ASCII whitespace\n  // from mimeType.\n  // Undici implementation note: we need to store the\n  // length because if the mimetype has spaces removed,\n  // the wrong amount will be sliced from the input in\n  // step #9\n  const mimeTypeLength = mimeType.length\n  mimeType = removeASCIIWhitespace(mimeType, true, true)\n\n  // 7. If position is past the end of input, then\n  // return failure\n  if (position.position >= input.length) {\n    return 'failure'\n  }\n\n  // 8. Advance position by 1.\n  position.position++\n\n  // 9. Let encodedBody be the remainder of input.\n  const encodedBody = input.slice(mimeTypeLength + 1)\n\n  // 10. Let body be the percent-decoding of encodedBody.\n  let body = stringPercentDecode(encodedBody)\n\n  // 11. If mimeType ends with U+003B (;), followed by\n  // zero or more U+0020 SPACE, followed by an ASCII\n  // case-insensitive match for \"base64\", then:\n  if (/;(?:\\u0020*)base64$/ui.test(mimeType)) {\n    // 1. Let stringBody be the isomorphic decode of body.\n    const stringBody = isomorphicDecode(body)\n\n    // 2. Set body to the forgiving-base64 decode of\n    // stringBody.\n    body = forgivingBase64(stringBody)\n\n    // 3. If body is failure, then return failure.\n    if (body === 'failure') {\n      return 'failure'\n    }\n\n    // 4. Remove the last 6 code points from mimeType.\n    mimeType = mimeType.slice(0, -6)\n\n    // 5. Remove trailing U+0020 SPACE code points from mimeType,\n    // if any.\n    mimeType = mimeType.replace(/(\\u0020+)$/u, '')\n\n    // 6. Remove the last U+003B (;) code point from mimeType.\n    mimeType = mimeType.slice(0, -1)\n  }\n\n  // 12. If mimeType starts with U+003B (;), then prepend\n  // \"text/plain\" to mimeType.\n  if (mimeType.startsWith(';')) {\n    mimeType = 'text/plain' + mimeType\n  }\n\n  // 13. Let mimeTypeRecord be the result of parsing\n  // mimeType.\n  let mimeTypeRecord = parseMIMEType(mimeType)\n\n  // 14. If mimeTypeRecord is failure, then set\n  // mimeTypeRecord to text/plain;charset=US-ASCII.\n  if (mimeTypeRecord === 'failure') {\n    mimeTypeRecord = parseMIMEType('text/plain;charset=US-ASCII')\n  }\n\n  // 15. Return a new data: URL struct whose MIME\n  // type is mimeTypeRecord and body is body.\n  // https://fetch.spec.whatwg.org/#data-url-struct\n  return { mimeType: mimeTypeRecord, body }\n}\n\n// https://url.spec.whatwg.org/#concept-url-serializer\n/**\n * @param {URL} url\n * @param {boolean} excludeFragment\n */\nfunction URLSerializer (url, excludeFragment = false) {\n  if (!excludeFragment) {\n    return url.href\n  }\n\n  const href = url.href\n  const hashLength = url.hash.length\n\n  const serialized = hashLength === 0 ? href : href.substring(0, href.length - hashLength)\n\n  if (!hashLength && href.endsWith('#')) {\n    return serialized.slice(0, -1)\n  }\n\n  return serialized\n}\n\n// https://url.spec.whatwg.org/#string-percent-decode\n/** @param {string} input */\nfunction stringPercentDecode (input) {\n  // 1. Let bytes be the UTF-8 encoding of input.\n  const bytes = encoder.encode(input)\n\n  // 2. Return the percent-decoding of bytes.\n  return percentDecode(bytes)\n}\n\n/**\n * @param {number} byte\n */\nfunction isHexCharByte (byte) {\n  // 0-9 A-F a-f\n  return (byte >= 0x30 && byte <= 0x39) || (byte >= 0x41 && byte <= 0x46) || (byte >= 0x61 && byte <= 0x66)\n}\n\n/**\n * @param {number} byte\n */\nfunction hexByteToNumber (byte) {\n  return (\n    // 0-9\n    byte >= 0x30 && byte <= 0x39\n      ? (byte - 48)\n    // Convert to uppercase\n    // ((byte & 0xDF) - 65) + 10\n      : ((byte & 0xDF) - 55)\n  )\n}\n\n// https://url.spec.whatwg.org/#percent-decode\n/** @param {Uint8Array} input */\nfunction percentDecode (input) {\n  const length = input.length\n  // 1. Let output be an empty byte sequence.\n  /** @type {Uint8Array} */\n  const output = new Uint8Array(length)\n  let j = 0\n  let i = 0\n  // 2. For each byte byte in input:\n  while (i < length) {\n    const byte = input[i]\n\n    // 1. If byte is not 0x25 (%), then append byte to output.\n    if (byte !== 0x25) {\n      output[j++] = byte\n\n    // 2. Otherwise, if byte is 0x25 (%) and the next two bytes\n    // after byte in input are not in the ranges\n    // 0x30 (0) to 0x39 (9), 0x41 (A) to 0x46 (F),\n    // and 0x61 (a) to 0x66 (f), all inclusive, append byte\n    // to output.\n    } else if (\n      byte === 0x25 &&\n      !(isHexCharByte(input[i + 1]) && isHexCharByte(input[i + 2]))\n    ) {\n      output[j++] = 0x25\n\n    // 3. Otherwise:\n    } else {\n      // 1. Let bytePoint be the two bytes after byte in input,\n      // decoded, and then interpreted as hexadecimal number.\n      // 2. Append a byte whose value is bytePoint to output.\n      output[j++] = (hexByteToNumber(input[i + 1]) << 4) | hexByteToNumber(input[i + 2])\n\n      // 3. Skip the next two bytes in input.\n      i += 2\n    }\n    ++i\n  }\n\n  // 3. Return output.\n  return length === j ? output : output.subarray(0, j)\n}\n\n// https://mimesniff.spec.whatwg.org/#parse-a-mime-type\n/** @param {string} input */\nfunction parseMIMEType (input) {\n  // 1. Remove any leading and trailing HTTP whitespace\n  // from input.\n  input = removeHTTPWhitespace(input, true, true)\n\n  // 2. Let position be a position variable for input,\n  // initially pointing at the start of input.\n  const position = { position: 0 }\n\n  // 3. Let type be the result of collecting a sequence\n  // of code points that are not U+002F (/) from\n  // input, given position.\n  const type = collectASequenceOfCodePointsFast(\n    '/',\n    input,\n    position\n  )\n\n  // 4. If type is the empty string or does not solely\n  // contain HTTP token code points, then return failure.\n  // https://mimesniff.spec.whatwg.org/#http-token-code-point\n  if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) {\n    return 'failure'\n  }\n\n  // 5. If position is past the end of input, then return\n  // failure\n  if (position.position >= input.length) {\n    return 'failure'\n  }\n\n  // 6. Advance position by 1. (This skips past U+002F (/).)\n  position.position++\n\n  // 7. Let subtype be the result of collecting a sequence of\n  // code points that are not U+003B (;) from input, given\n  // position.\n  let subtype = collectASequenceOfCodePointsFast(\n    ';',\n    input,\n    position\n  )\n\n  // 8. Remove any trailing HTTP whitespace from subtype.\n  subtype = removeHTTPWhitespace(subtype, false, true)\n\n  // 9. If subtype is the empty string or does not solely\n  // contain HTTP token code points, then return failure.\n  if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) {\n    return 'failure'\n  }\n\n  const typeLowercase = type.toLowerCase()\n  const subtypeLowercase = subtype.toLowerCase()\n\n  // 10. Let mimeType be a new MIME type record whose type\n  // is type, in ASCII lowercase, and subtype is subtype,\n  // in ASCII lowercase.\n  // https://mimesniff.spec.whatwg.org/#mime-type\n  const mimeType = {\n    type: typeLowercase,\n    subtype: subtypeLowercase,\n    /** @type {Map<string, string>} */\n    parameters: new Map(),\n    // https://mimesniff.spec.whatwg.org/#mime-type-essence\n    essence: `${typeLowercase}/${subtypeLowercase}`\n  }\n\n  // 11. While position is not past the end of input:\n  while (position.position < input.length) {\n    // 1. Advance position by 1. (This skips past U+003B (;).)\n    position.position++\n\n    // 2. Collect a sequence of code points that are HTTP\n    // whitespace from input given position.\n    collectASequenceOfCodePoints(\n      // https://fetch.spec.whatwg.org/#http-whitespace\n      char => HTTP_WHITESPACE_REGEX.test(char),\n      input,\n      position\n    )\n\n    // 3. Let parameterName be the result of collecting a\n    // sequence of code points that are not U+003B (;)\n    // or U+003D (=) from input, given position.\n    let parameterName = collectASequenceOfCodePoints(\n      (char) => char !== ';' && char !== '=',\n      input,\n      position\n    )\n\n    // 4. Set parameterName to parameterName, in ASCII\n    // lowercase.\n    parameterName = parameterName.toLowerCase()\n\n    // 5. If position is not past the end of input, then:\n    if (position.position < input.length) {\n      // 1. If the code point at position within input is\n      // U+003B (;), then continue.\n      if (input[position.position] === ';') {\n        continue\n      }\n\n      // 2. Advance position by 1. (This skips past U+003D (=).)\n      position.position++\n    }\n\n    // 6. If position is past the end of input, then break.\n    if (position.position >= input.length) {\n      break\n    }\n\n    // 7. Let parameterValue be null.\n    let parameterValue = null\n\n    // 8. If the code point at position within input is\n    // U+0022 (\"), then:\n    if (input[position.position] === '\"') {\n      // 1. Set parameterValue to the result of collecting\n      // an HTTP quoted string from input, given position\n      // and the extract-value flag.\n      parameterValue = collectAnHTTPQuotedString(input, position, true)\n\n      // 2. Collect a sequence of code points that are not\n      // U+003B (;) from input, given position.\n      collectASequenceOfCodePointsFast(\n        ';',\n        input,\n        position\n      )\n\n    // 9. Otherwise:\n    } else {\n      // 1. Set parameterValue to the result of collecting\n      // a sequence of code points that are not U+003B (;)\n      // from input, given position.\n      parameterValue = collectASequenceOfCodePointsFast(\n        ';',\n        input,\n        position\n      )\n\n      // 2. Remove any trailing HTTP whitespace from parameterValue.\n      parameterValue = removeHTTPWhitespace(parameterValue, false, true)\n\n      // 3. If parameterValue is the empty string, then continue.\n      if (parameterValue.length === 0) {\n        continue\n      }\n    }\n\n    // 10. If all of the following are true\n    // - parameterName is not the empty string\n    // - parameterName solely contains HTTP token code points\n    // - parameterValue solely contains HTTP quoted-string token code points\n    // - mimeType\u2019s parameters[parameterName] does not exist\n    // then set mimeType\u2019s parameters[parameterName] to parameterValue.\n    if (\n      parameterName.length !== 0 &&\n      HTTP_TOKEN_CODEPOINTS.test(parameterName) &&\n      (parameterValue.length === 0 || HTTP_QUOTED_STRING_TOKENS.test(parameterValue)) &&\n      !mimeType.parameters.has(parameterName)\n    ) {\n      mimeType.parameters.set(parameterName, parameterValue)\n    }\n  }\n\n  // 12. Return mimeType.\n  return mimeType\n}\n\n// https://fetch.spec.whatwg.org/#collect-an-http-quoted-string\n// tests: https://fetch.spec.whatwg.org/#example-http-quoted-string\n/**\n * @param {string} input\n * @param {{ position: number }} position\n * @param {boolean} [extractValue=false]\n */\nfunction collectAnHTTPQuotedString (input, position, extractValue = false) {\n  // 1. Let positionStart be position.\n  const positionStart = position.position\n\n  // 2. Let value be the empty string.\n  let value = ''\n\n  // 3. Assert: the code point at position within input\n  // is U+0022 (\").\n  assert(input[position.position] === '\"')\n\n  // 4. Advance position by 1.\n  position.position++\n\n  // 5. While true:\n  while (true) {\n    // 1. Append the result of collecting a sequence of code points\n    // that are not U+0022 (\") or U+005C (\\) from input, given\n    // position, to value.\n    value += collectASequenceOfCodePoints(\n      (char) => char !== '\"' && char !== '\\\\',\n      input,\n      position\n    )\n\n    // 2. If position is past the end of input, then break.\n    if (position.position >= input.length) {\n      break\n    }\n\n    // 3. Let quoteOrBackslash be the code point at position within\n    // input.\n    const quoteOrBackslash = input[position.position]\n\n    // 4. Advance position by 1.\n    position.position++\n\n    // 5. If quoteOrBackslash is U+005C (\\), then:\n    if (quoteOrBackslash === '\\\\') {\n      // 1. If position is past the end of input, then append\n      // U+005C (\\) to value and break.\n      if (position.position >= input.length) {\n        value += '\\\\'\n        break\n      }\n\n      // 2. Append the code point at position within input to value.\n      value += input[position.position]\n\n      // 3. Advance position by 1.\n      position.position++\n\n    // 6. Otherwise:\n    } else {\n      // 1. Assert: quoteOrBackslash is U+0022 (\").\n      assert(quoteOrBackslash === '\"')\n\n      // 2. Break.\n      break\n    }\n  }\n\n  // 6. If the extract-value flag is set, then return value.\n  if (extractValue) {\n    return value\n  }\n\n  // 7. Return the code points from positionStart to position,\n  // inclusive, within input.\n  return input.slice(positionStart, position.position)\n}\n\n/**\n * @see https://mimesniff.spec.whatwg.org/#serialize-a-mime-type\n */\nfunction serializeAMimeType (mimeType) {\n  assert(mimeType !== 'failure')\n  const { parameters, essence } = mimeType\n\n  // 1. Let serialization be the concatenation of mimeType\u2019s\n  //    type, U+002F (/), and mimeType\u2019s subtype.\n  let serialization = essence\n\n  // 2. For each name \u2192 value of mimeType\u2019s parameters:\n  for (let [name, value] of parameters.entries()) {\n    // 1. Append U+003B (;) to serialization.\n    serialization += ';'\n\n    // 2. Append name to serialization.\n    serialization += name\n\n    // 3. Append U+003D (=) to serialization.\n    serialization += '='\n\n    // 4. If value does not solely contain HTTP token code\n    //    points or value is the empty string, then:\n    if (!HTTP_TOKEN_CODEPOINTS.test(value)) {\n      // 1. Precede each occurrence of U+0022 (\") or\n      //    U+005C (\\) in value with U+005C (\\).\n      value = value.replace(/[\\\\\"]/ug, '\\\\$&')\n\n      // 2. Prepend U+0022 (\") to value.\n      value = '\"' + value\n\n      // 3. Append U+0022 (\") to value.\n      value += '\"'\n    }\n\n    // 5. Append value to serialization.\n    serialization += value\n  }\n\n  // 3. Return serialization.\n  return serialization\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#http-whitespace\n * @param {number} char\n */\nfunction isHTTPWhiteSpace (char) {\n  // \"\\r\\n\\t \"\n  return char === 0x00d || char === 0x00a || char === 0x009 || char === 0x020\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#http-whitespace\n * @param {string} str\n * @param {boolean} [leading=true]\n * @param {boolean} [trailing=true]\n */\nfunction removeHTTPWhitespace (str, leading = true, trailing = true) {\n  return removeChars(str, leading, trailing, isHTTPWhiteSpace)\n}\n\n/**\n * @see https://mimesniff.spec.whatwg.org/#minimize-a-supported-mime-type\n * @param {Exclude<ReturnType<typeof parseMIMEType>, 'failure'>} mimeType\n */\nfunction minimizeSupportedMimeType (mimeType) {\n  switch (mimeType.essence) {\n    case 'application/ecmascript':\n    case 'application/javascript':\n    case 'application/x-ecmascript':\n    case 'application/x-javascript':\n    case 'text/ecmascript':\n    case 'text/javascript':\n    case 'text/javascript1.0':\n    case 'text/javascript1.1':\n    case 'text/javascript1.2':\n    case 'text/javascript1.3':\n    case 'text/javascript1.4':\n    case 'text/javascript1.5':\n    case 'text/jscript':\n    case 'text/livescript':\n    case 'text/x-ecmascript':\n    case 'text/x-javascript':\n      // 1. If mimeType is a JavaScript MIME type, then return \"text/javascript\".\n      return 'text/javascript'\n    case 'application/json':\n    case 'text/json':\n      // 2. If mimeType is a JSON MIME type, then return \"application/json\".\n      return 'application/json'\n    case 'image/svg+xml':\n      // 3. If mimeType\u2019s essence is \"image/svg+xml\", then return \"image/svg+xml\".\n      return 'image/svg+xml'\n    case 'text/xml':\n    case 'application/xml':\n      // 4. If mimeType is an XML MIME type, then return \"application/xml\".\n      return 'application/xml'\n  }\n\n  // 2. If mimeType is a JSON MIME type, then return \"application/json\".\n  if (mimeType.subtype.endsWith('+json')) {\n    return 'application/json'\n  }\n\n  // 4. If mimeType is an XML MIME type, then return \"application/xml\".\n  if (mimeType.subtype.endsWith('+xml')) {\n    return 'application/xml'\n  }\n\n  // 5. If mimeType is supported by the user agent, then return mimeType\u2019s essence.\n  // Technically, node doesn't support any mimetypes.\n\n  // 6. Return the empty string.\n  return ''\n}\n\nmodule.exports = {\n  dataURLProcessor,\n  URLSerializer,\n  stringPercentDecode,\n  parseMIMEType,\n  collectAnHTTPQuotedString,\n  serializeAMimeType,\n  removeHTTPWhitespace,\n  minimizeSupportedMimeType,\n  HTTP_TOKEN_CODEPOINTS\n}\n", "'use strict'\n\n/** @typedef {`node:${string}`} NodeModuleName */\n\n/** @type {Record<NodeModuleName, () => any>} */\nconst lazyLoaders = {\n  __proto__: null,\n  'node:crypto': () => require('node:crypto'),\n  'node:sqlite': () => require('node:sqlite'),\n  'node:worker_threads': () => require('node:worker_threads'),\n  'node:zlib': () => require('node:zlib')\n}\n\n/**\n * @param {NodeModuleName} moduleName\n * @returns {boolean}\n */\nfunction detectRuntimeFeatureByNodeModule (moduleName) {\n  try {\n    lazyLoaders[moduleName]()\n    return true\n  } catch (err) {\n    if (err.code !== 'ERR_UNKNOWN_BUILTIN_MODULE' && err.code !== 'ERR_NO_CRYPTO') {\n      throw err\n    }\n    return false\n  }\n}\n\n/**\n * @param {NodeModuleName} moduleName\n * @param {string} property\n * @returns {boolean}\n */\nfunction detectRuntimeFeatureByExportedProperty (moduleName, property) {\n  const module = lazyLoaders[moduleName]()\n  return typeof module[property] !== 'undefined'\n}\n\nconst runtimeFeaturesByExportedProperty = /** @type {const} */ (['markAsUncloneable', 'zstd'])\n\n/** @type {Record<RuntimeFeatureByExportedProperty, [NodeModuleName, string]>} */\nconst exportedPropertyLookup = {\n  markAsUncloneable: ['node:worker_threads', 'markAsUncloneable'],\n  zstd: ['node:zlib', 'createZstdDecompress']\n}\n\n/** @typedef {typeof runtimeFeaturesByExportedProperty[number]} RuntimeFeatureByExportedProperty */\n\nconst runtimeFeaturesAsNodeModule = /** @type {const} */ (['crypto', 'sqlite'])\n/** @typedef {typeof runtimeFeaturesAsNodeModule[number]} RuntimeFeatureByNodeModule */\n\nconst features = /** @type {const} */ ([\n  ...runtimeFeaturesAsNodeModule,\n  ...runtimeFeaturesByExportedProperty\n])\n\n/** @typedef {typeof features[number]} Feature */\n\n/**\n * @param {Feature} feature\n * @returns {boolean}\n */\nfunction detectRuntimeFeature (feature) {\n  if (runtimeFeaturesAsNodeModule.includes(/** @type {RuntimeFeatureByNodeModule} */ (feature))) {\n    return detectRuntimeFeatureByNodeModule(`node:${feature}`)\n  } else if (runtimeFeaturesByExportedProperty.includes(/** @type {RuntimeFeatureByExportedProperty} */ (feature))) {\n    const [moduleName, property] = exportedPropertyLookup[feature]\n    return detectRuntimeFeatureByExportedProperty(moduleName, property)\n  }\n  throw new TypeError(`unknown feature: ${feature}`)\n}\n\n/**\n * @class\n * @name RuntimeFeatures\n */\nclass RuntimeFeatures {\n  /** @type {Map<Feature, boolean>} */\n  #map = new Map()\n\n  /**\n   * Clears all cached feature detections.\n   */\n  clear () {\n    this.#map.clear()\n  }\n\n  /**\n   * @param {Feature} feature\n   * @returns {boolean}\n   */\n  has (feature) {\n    return (\n      this.#map.get(feature) ?? this.#detectRuntimeFeature(feature)\n    )\n  }\n\n  /**\n   * @param {Feature} feature\n   * @param {boolean} value\n   */\n  set (feature, value) {\n    if (features.includes(feature) === false) {\n      throw new TypeError(`unknown feature: ${feature}`)\n    }\n    this.#map.set(feature, value)\n  }\n\n  /**\n   * @param {Feature} feature\n   * @returns {boolean}\n   */\n  #detectRuntimeFeature (feature) {\n    const result = detectRuntimeFeature(feature)\n    this.#map.set(feature, result)\n    return result\n  }\n}\n\nconst instance = new RuntimeFeatures()\n\nmodule.exports.runtimeFeatures = instance\nmodule.exports.default = instance\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { types, inspect } = require('node:util')\nconst { runtimeFeatures } = require('../../util/runtime-features')\n\nconst UNDEFINED = 1\nconst BOOLEAN = 2\nconst STRING = 3\nconst SYMBOL = 4\nconst NUMBER = 5\nconst BIGINT = 6\nconst NULL = 7\nconst OBJECT = 8 // function and object\n\nconst FunctionPrototypeSymbolHasInstance = Function.call.bind(Function.prototype[Symbol.hasInstance])\n\n/** @type {import('../../../types/webidl').Webidl} */\nconst webidl = {\n  converters: {},\n  util: {},\n  errors: {},\n  is: {}\n}\n\n/**\n * @description Instantiate an error.\n *\n * @param {Object} opts\n * @param {string} opts.header\n * @param {string} opts.message\n * @returns {TypeError}\n */\nwebidl.errors.exception = function (message) {\n  return new TypeError(`${message.header}: ${message.message}`)\n}\n\n/**\n * @description Instantiate an error when conversion from one type to another has failed.\n *\n * @param {Object} opts\n * @param {string} opts.prefix\n * @param {string} opts.argument\n * @param {string[]} opts.types\n * @returns {TypeError}\n */\nwebidl.errors.conversionFailed = function (opts) {\n  const plural = opts.types.length === 1 ? '' : ' one of'\n  const message =\n    `${opts.argument} could not be converted to` +\n    `${plural}: ${opts.types.join(', ')}.`\n\n  return webidl.errors.exception({\n    header: opts.prefix,\n    message\n  })\n}\n\n/**\n * @description Instantiate an error when an invalid argument is provided\n *\n * @param {Object} context\n * @param {string} context.prefix\n * @param {string} context.value\n * @param {string} context.type\n * @returns {TypeError}\n */\nwebidl.errors.invalidArgument = function (context) {\n  return webidl.errors.exception({\n    header: context.prefix,\n    message: `\"${context.value}\" is an invalid ${context.type}.`\n  })\n}\n\n// https://webidl.spec.whatwg.org/#implements\nwebidl.brandCheck = function (V, I) {\n  if (!FunctionPrototypeSymbolHasInstance(I, V)) {\n    const err = new TypeError('Illegal invocation')\n    err.code = 'ERR_INVALID_THIS' // node compat.\n    throw err\n  }\n}\n\nwebidl.brandCheckMultiple = function (List) {\n  const prototypes = List.map((c) => webidl.util.MakeTypeAssertion(c))\n\n  return (V) => {\n    if (prototypes.every(typeCheck => !typeCheck(V))) {\n      const err = new TypeError('Illegal invocation')\n      err.code = 'ERR_INVALID_THIS' // node compat.\n      throw err\n    }\n  }\n}\n\nwebidl.argumentLengthCheck = function ({ length }, min, ctx) {\n  if (length < min) {\n    throw webidl.errors.exception({\n      message: `${min} argument${min !== 1 ? 's' : ''} required, ` +\n               `but${length ? ' only' : ''} ${length} found.`,\n      header: ctx\n    })\n  }\n}\n\nwebidl.illegalConstructor = function () {\n  throw webidl.errors.exception({\n    header: 'TypeError',\n    message: 'Illegal constructor'\n  })\n}\n\nwebidl.util.MakeTypeAssertion = function (I) {\n  return (O) => FunctionPrototypeSymbolHasInstance(I, O)\n}\n\n// https://tc39.es/ecma262/#sec-ecmascript-data-types-and-values\nwebidl.util.Type = function (V) {\n  switch (typeof V) {\n    case 'undefined': return UNDEFINED\n    case 'boolean': return BOOLEAN\n    case 'string': return STRING\n    case 'symbol': return SYMBOL\n    case 'number': return NUMBER\n    case 'bigint': return BIGINT\n    case 'function':\n    case 'object': {\n      if (V === null) {\n        return NULL\n      }\n\n      return OBJECT\n    }\n  }\n}\n\nwebidl.util.Types = {\n  UNDEFINED,\n  BOOLEAN,\n  STRING,\n  SYMBOL,\n  NUMBER,\n  BIGINT,\n  NULL,\n  OBJECT\n}\n\nwebidl.util.TypeValueToString = function (o) {\n  switch (webidl.util.Type(o)) {\n    case UNDEFINED: return 'Undefined'\n    case BOOLEAN: return 'Boolean'\n    case STRING: return 'String'\n    case SYMBOL: return 'Symbol'\n    case NUMBER: return 'Number'\n    case BIGINT: return 'BigInt'\n    case NULL: return 'Null'\n    case OBJECT: return 'Object'\n  }\n}\n\nwebidl.util.markAsUncloneable = runtimeFeatures.has('markAsUncloneable')\n  ? require('node:worker_threads').markAsUncloneable\n  : () => {}\n\n// https://webidl.spec.whatwg.org/#abstract-opdef-converttoint\nwebidl.util.ConvertToInt = function (V, bitLength, signedness, flags) {\n  let upperBound\n  let lowerBound\n\n  // 1. If bitLength is 64, then:\n  if (bitLength === 64) {\n    // 1. Let upperBound be 2^53 \u2212 1.\n    upperBound = Math.pow(2, 53) - 1\n\n    // 2. If signedness is \"unsigned\", then let lowerBound be 0.\n    if (signedness === 'unsigned') {\n      lowerBound = 0\n    } else {\n      // 3. Otherwise let lowerBound be \u22122^53 + 1.\n      lowerBound = Math.pow(-2, 53) + 1\n    }\n  } else if (signedness === 'unsigned') {\n    // 2. Otherwise, if signedness is \"unsigned\", then:\n\n    // 1. Let lowerBound be 0.\n    lowerBound = 0\n\n    // 2. Let upperBound be 2^bitLength \u2212 1.\n    upperBound = Math.pow(2, bitLength) - 1\n  } else {\n    // 3. Otherwise:\n\n    // 1. Let lowerBound be -2^(bitLength \u2212 1).\n    lowerBound = -Math.pow(2, bitLength - 1)\n\n    // 2. Let upperBound be 2^(bitLength \u2212 1) \u2212 1.\n    upperBound = Math.pow(2, bitLength - 1) - 1\n  }\n\n  // 4. Let x be ? ToNumber(V).\n  let x = Number(V)\n\n  // 5. If x is \u22120, then set x to +0.\n  if (x === 0) {\n    x = 0\n  }\n\n  // 6. If the conversion is to an IDL type associated\n  //    with the [EnforceRange] extended attribute, then:\n  if (webidl.util.HasFlag(flags, webidl.attributes.EnforceRange)) {\n    // 1. If x is NaN, +\u221E, or \u2212\u221E, then throw a TypeError.\n    if (\n      Number.isNaN(x) ||\n      x === Number.POSITIVE_INFINITY ||\n      x === Number.NEGATIVE_INFINITY\n    ) {\n      throw webidl.errors.exception({\n        header: 'Integer conversion',\n        message: `Could not convert ${webidl.util.Stringify(V)} to an integer.`\n      })\n    }\n\n    // 2. Set x to IntegerPart(x).\n    x = webidl.util.IntegerPart(x)\n\n    // 3. If x < lowerBound or x > upperBound, then\n    //    throw a TypeError.\n    if (x < lowerBound || x > upperBound) {\n      throw webidl.errors.exception({\n        header: 'Integer conversion',\n        message: `Value must be between ${lowerBound}-${upperBound}, got ${x}.`\n      })\n    }\n\n    // 4. Return x.\n    return x\n  }\n\n  // 7. If x is not NaN and the conversion is to an IDL\n  //    type associated with the [Clamp] extended\n  //    attribute, then:\n  if (!Number.isNaN(x) && webidl.util.HasFlag(flags, webidl.attributes.Clamp)) {\n    // 1. Set x to min(max(x, lowerBound), upperBound).\n    x = Math.min(Math.max(x, lowerBound), upperBound)\n\n    // 2. Round x to the nearest integer, choosing the\n    //    even integer if it lies halfway between two,\n    //    and choosing +0 rather than \u22120.\n    if (Math.floor(x) % 2 === 0) {\n      x = Math.floor(x)\n    } else {\n      x = Math.ceil(x)\n    }\n\n    // 3. Return x.\n    return x\n  }\n\n  // 8. If x is NaN, +0, +\u221E, or \u2212\u221E, then return +0.\n  if (\n    Number.isNaN(x) ||\n    (x === 0 && Object.is(0, x)) ||\n    x === Number.POSITIVE_INFINITY ||\n    x === Number.NEGATIVE_INFINITY\n  ) {\n    return 0\n  }\n\n  // 9. Set x to IntegerPart(x).\n  x = webidl.util.IntegerPart(x)\n\n  // 10. Set x to x modulo 2^bitLength.\n  x = x % Math.pow(2, bitLength)\n\n  // 11. If signedness is \"signed\" and x \u2265 2^(bitLength \u2212 1),\n  //    then return x \u2212 2^bitLength.\n  if (signedness === 'signed' && x >= Math.pow(2, bitLength - 1)) {\n    return x - Math.pow(2, bitLength)\n  }\n\n  // 12. Otherwise, return x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#abstract-opdef-integerpart\nwebidl.util.IntegerPart = function (n) {\n  // 1. Let r be floor(abs(n)).\n  const r = Math.floor(Math.abs(n))\n\n  // 2. If n < 0, then return -1 \u00D7 r.\n  if (n < 0) {\n    return -1 * r\n  }\n\n  // 3. Otherwise, return r.\n  return r\n}\n\nwebidl.util.Stringify = function (V) {\n  const type = webidl.util.Type(V)\n\n  switch (type) {\n    case SYMBOL:\n      return `Symbol(${V.description})`\n    case OBJECT:\n      return inspect(V)\n    case STRING:\n      return `\"${V}\"`\n    case BIGINT:\n      return `${V}n`\n    default:\n      return `${V}`\n  }\n}\n\nwebidl.util.IsResizableArrayBuffer = function (V) {\n  if (types.isArrayBuffer(V)) {\n    return V.resizable\n  }\n\n  if (types.isSharedArrayBuffer(V)) {\n    return V.growable\n  }\n\n  throw webidl.errors.exception({\n    header: 'IsResizableArrayBuffer',\n    message: `\"${webidl.util.Stringify(V)}\" is not an array buffer.`\n  })\n}\n\nwebidl.util.HasFlag = function (flags, attributes) {\n  return typeof flags === 'number' && (flags & attributes) === attributes\n}\n\n// https://webidl.spec.whatwg.org/#es-sequence\nwebidl.sequenceConverter = function (converter) {\n  return (V, prefix, argument, Iterable) => {\n    // 1. If Type(V) is not Object, throw a TypeError.\n    if (webidl.util.Type(V) !== OBJECT) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `${argument} (${webidl.util.Stringify(V)}) is not iterable.`\n      })\n    }\n\n    // 2. Let method be ? GetMethod(V, @@iterator).\n    /** @type {Generator} */\n    const method = typeof Iterable === 'function' ? Iterable() : V?.[Symbol.iterator]?.()\n    const seq = []\n    let index = 0\n\n    // 3. If method is undefined, throw a TypeError.\n    if (\n      method === undefined ||\n      typeof method.next !== 'function'\n    ) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `${argument} is not iterable.`\n      })\n    }\n\n    // https://webidl.spec.whatwg.org/#create-sequence-from-iterable\n    while (true) {\n      const { done, value } = method.next()\n\n      if (done) {\n        break\n      }\n\n      seq.push(converter(value, prefix, `${argument}[${index++}]`))\n    }\n\n    return seq\n  }\n}\n\n// https://webidl.spec.whatwg.org/#es-to-record\nwebidl.recordConverter = function (keyConverter, valueConverter) {\n  return (O, prefix, argument) => {\n    // 1. If Type(O) is not Object, throw a TypeError.\n    if (webidl.util.Type(O) !== OBJECT) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `${argument} (\"${webidl.util.TypeValueToString(O)}\") is not an Object.`\n      })\n    }\n\n    // 2. Let result be a new empty instance of record<K, V>.\n    const result = {}\n\n    if (!types.isProxy(O)) {\n      // 1. Let desc be ? O.[[GetOwnProperty]](key).\n      const keys = [...Object.getOwnPropertyNames(O), ...Object.getOwnPropertySymbols(O)]\n\n      for (const key of keys) {\n        const keyName = webidl.util.Stringify(key)\n\n        // 1. Let typedKey be key converted to an IDL value of type K.\n        const typedKey = keyConverter(key, prefix, `Key ${keyName} in ${argument}`)\n\n        // 2. Let value be ? Get(O, key).\n        // 3. Let typedValue be value converted to an IDL value of type V.\n        const typedValue = valueConverter(O[key], prefix, `${argument}[${keyName}]`)\n\n        // 4. Set result[typedKey] to typedValue.\n        result[typedKey] = typedValue\n      }\n\n      // 5. Return result.\n      return result\n    }\n\n    // 3. Let keys be ? O.[[OwnPropertyKeys]]().\n    const keys = Reflect.ownKeys(O)\n\n    // 4. For each key of keys.\n    for (const key of keys) {\n      // 1. Let desc be ? O.[[GetOwnProperty]](key).\n      const desc = Reflect.getOwnPropertyDescriptor(O, key)\n\n      // 2. If desc is not undefined and desc.[[Enumerable]] is true:\n      if (desc?.enumerable) {\n        // 1. Let typedKey be key converted to an IDL value of type K.\n        const typedKey = keyConverter(key, prefix, argument)\n\n        // 2. Let value be ? Get(O, key).\n        // 3. Let typedValue be value converted to an IDL value of type V.\n        const typedValue = valueConverter(O[key], prefix, argument)\n\n        // 4. Set result[typedKey] to typedValue.\n        result[typedKey] = typedValue\n      }\n    }\n\n    // 5. Return result.\n    return result\n  }\n}\n\nwebidl.interfaceConverter = function (TypeCheck, name) {\n  return (V, prefix, argument) => {\n    if (!TypeCheck(V)) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `Expected ${argument} (\"${webidl.util.Stringify(V)}\") to be an instance of ${name}.`\n      })\n    }\n\n    return V\n  }\n}\n\nwebidl.dictionaryConverter = function (converters) {\n  // \"For each dictionary member member declared on dictionary, in lexicographical order:\"\n  converters.sort((a, b) => (a.key > b.key) - (a.key < b.key))\n\n  return (dictionary, prefix, argument) => {\n    const dict = {}\n\n    if (dictionary != null && webidl.util.Type(dictionary) !== OBJECT) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: `Expected ${dictionary} to be one of: Null, Undefined, Object.`\n      })\n    }\n\n    for (const options of converters) {\n      const { key, defaultValue, required, converter } = options\n\n      if (required === true) {\n        if (dictionary == null || !Object.hasOwn(dictionary, key)) {\n          throw webidl.errors.exception({\n            header: prefix,\n            message: `Missing required key \"${key}\".`\n          })\n        }\n      }\n\n      let value = dictionary?.[key]\n      const hasDefault = defaultValue !== undefined\n\n      // Only use defaultValue if value is undefined and\n      // a defaultValue options was provided.\n      if (hasDefault && value === undefined) {\n        value = defaultValue()\n      }\n\n      // A key can be optional and have no default value.\n      // When this happens, do not perform a conversion,\n      // and do not assign the key a value.\n      if (required || hasDefault || value !== undefined) {\n        value = converter(value, prefix, `${argument}.${key}`)\n\n        if (\n          options.allowedValues &&\n          !options.allowedValues.includes(value)\n        ) {\n          throw webidl.errors.exception({\n            header: prefix,\n            message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(', ')}.`\n          })\n        }\n\n        dict[key] = value\n      }\n    }\n\n    return dict\n  }\n}\n\nwebidl.nullableConverter = function (converter) {\n  return (V, prefix, argument) => {\n    if (V === null) {\n      return V\n    }\n\n    return converter(V, prefix, argument)\n  }\n}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nwebidl.is.USVString = function (value) {\n  return (\n    typeof value === 'string' &&\n    value.isWellFormed()\n  )\n}\n\nwebidl.is.ReadableStream = webidl.util.MakeTypeAssertion(ReadableStream)\nwebidl.is.Blob = webidl.util.MakeTypeAssertion(Blob)\nwebidl.is.URLSearchParams = webidl.util.MakeTypeAssertion(URLSearchParams)\nwebidl.is.File = webidl.util.MakeTypeAssertion(File)\nwebidl.is.URL = webidl.util.MakeTypeAssertion(URL)\nwebidl.is.AbortSignal = webidl.util.MakeTypeAssertion(AbortSignal)\nwebidl.is.MessagePort = webidl.util.MakeTypeAssertion(MessagePort)\n\nwebidl.is.BufferSource = function (V) {\n  return types.isArrayBuffer(V) || (\n    ArrayBuffer.isView(V) &&\n    types.isArrayBuffer(V.buffer)\n  )\n}\n\n// https://webidl.spec.whatwg.org/#dfn-get-buffer-source-copy\nwebidl.util.getCopyOfBytesHeldByBufferSource = function (bufferSource) {\n  // 1. Let jsBufferSource be the result of converting bufferSource to a JavaScript value.\n  const jsBufferSource = bufferSource\n\n  // 2. Let jsArrayBuffer be jsBufferSource.\n  let jsArrayBuffer = jsBufferSource\n\n  // 3. Let offset be 0.\n  let offset = 0\n\n  // 4. Let length be 0.\n  let length = 0\n\n  // 5. If jsBufferSource has a [[ViewedArrayBuffer]] internal slot, then:\n  if (types.isTypedArray(jsBufferSource) || types.isDataView(jsBufferSource)) {\n    // 5.1. Set jsArrayBuffer to jsBufferSource.[[ViewedArrayBuffer]].\n    jsArrayBuffer = jsBufferSource.buffer\n\n    // 5.2. Set offset to jsBufferSource.[[ByteOffset]].\n    offset = jsBufferSource.byteOffset\n\n    // 5.3. Set length to jsBufferSource.[[ByteLength]].\n    length = jsBufferSource.byteLength\n  } else {\n    // 6. Otherwise:\n\n    // 6.1. Assert: jsBufferSource is an ArrayBuffer or SharedArrayBuffer object.\n    assert(types.isAnyArrayBuffer(jsBufferSource))\n\n    // 6.2. Set length to jsBufferSource.[[ArrayBufferByteLength]].\n    length = jsBufferSource.byteLength\n  }\n\n  // 7. If IsDetachedBuffer(jsArrayBuffer) is true, then return the empty byte sequence.\n  if (jsArrayBuffer.detached) {\n    return new Uint8Array(0)\n  }\n\n  // 8. Let bytes be a new byte sequence of length equal to length.\n  const bytes = new Uint8Array(length)\n\n  // 9. For i in the range offset to offset + length \u2212 1, inclusive,\n  //    set bytes[i \u2212 offset] to GetValueFromBuffer(jsArrayBuffer, i, Uint8, true, Unordered).\n  const view = new Uint8Array(jsArrayBuffer, offset, length)\n  bytes.set(view)\n\n  // 10. Return bytes.\n  return bytes\n}\n\n// https://webidl.spec.whatwg.org/#es-DOMString\nwebidl.converters.DOMString = function (V, prefix, argument, flags) {\n  // 1. If V is null and the conversion is to an IDL type\n  //    associated with the [LegacyNullToEmptyString]\n  //    extended attribute, then return the DOMString value\n  //    that represents the empty string.\n  if (V === null && webidl.util.HasFlag(flags, webidl.attributes.LegacyNullToEmptyString)) {\n    return ''\n  }\n\n  // 2. Let x be ? ToString(V).\n  if (typeof V === 'symbol') {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} is a symbol, which cannot be converted to a DOMString.`\n    })\n  }\n\n  // 3. Return the IDL DOMString value that represents the\n  //    same sequence of code units as the one the\n  //    ECMAScript String value x represents.\n  return String(V)\n}\n\n// https://webidl.spec.whatwg.org/#es-ByteString\nwebidl.converters.ByteString = function (V, prefix, argument) {\n  // 1. Let x be ? ToString(V).\n  if (typeof V === 'symbol') {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} is a symbol, which cannot be converted to a ByteString.`\n    })\n  }\n\n  const x = String(V)\n\n  // 2. If the value of any element of x is greater than\n  //    255, then throw a TypeError.\n  for (let index = 0; index < x.length; index++) {\n    if (x.charCodeAt(index) > 255) {\n      throw new TypeError(\n        'Cannot convert argument to a ByteString because the character at ' +\n        `index ${index} has a value of ${x.charCodeAt(index)} which is greater than 255.`\n      )\n    }\n  }\n\n  // 3. Return an IDL ByteString value whose length is the\n  //    length of x, and where the value of each element is\n  //    the value of the corresponding element of x.\n  return x\n}\n\n/**\n * @param {unknown} value\n * @returns {string}\n * @see https://webidl.spec.whatwg.org/#es-USVString\n */\nwebidl.converters.USVString = function (value) {\n  // TODO: rewrite this so we can control the errors thrown\n  if (typeof value === 'string') {\n    return value.toWellFormed()\n  }\n  return `${value}`.toWellFormed()\n}\n\n// https://webidl.spec.whatwg.org/#es-boolean\nwebidl.converters.boolean = function (V) {\n  // 1. Let x be the result of computing ToBoolean(V).\n  // https://262.ecma-international.org/10.0/index.html#table-10\n  const x = Boolean(V)\n\n  // 2. Return the IDL boolean value that is the one that represents\n  //    the same truth value as the ECMAScript Boolean value x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#es-any\nwebidl.converters.any = function (V) {\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#es-long-long\nwebidl.converters['long long'] = function (V, prefix, argument) {\n  // 1. Let x be ? ConvertToInt(V, 64, \"signed\").\n  const x = webidl.util.ConvertToInt(V, 64, 'signed', 0, prefix, argument)\n\n  // 2. Return the IDL long long value that represents\n  //    the same numeric value as x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#es-unsigned-long-long\nwebidl.converters['unsigned long long'] = function (V, prefix, argument) {\n  // 1. Let x be ? ConvertToInt(V, 64, \"unsigned\").\n  const x = webidl.util.ConvertToInt(V, 64, 'unsigned', 0, prefix, argument)\n\n  // 2. Return the IDL unsigned long long value that\n  //    represents the same numeric value as x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#es-unsigned-long\nwebidl.converters['unsigned long'] = function (V, prefix, argument) {\n  // 1. Let x be ? ConvertToInt(V, 32, \"unsigned\").\n  const x = webidl.util.ConvertToInt(V, 32, 'unsigned', 0, prefix, argument)\n\n  // 2. Return the IDL unsigned long value that\n  //    represents the same numeric value as x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#es-unsigned-short\nwebidl.converters['unsigned short'] = function (V, prefix, argument, flags) {\n  // 1. Let x be ? ConvertToInt(V, 16, \"unsigned\").\n  const x = webidl.util.ConvertToInt(V, 16, 'unsigned', flags, prefix, argument)\n\n  // 2. Return the IDL unsigned short value that represents\n  //    the same numeric value as x.\n  return x\n}\n\n// https://webidl.spec.whatwg.org/#idl-ArrayBuffer\nwebidl.converters.ArrayBuffer = function (V, prefix, argument, flags) {\n  // 1. If V is not an Object, or V does not have an\n  //    [[ArrayBufferData]] internal slot, then throw a\n  //    TypeError.\n  // 2. If IsSharedArrayBuffer(V) is true, then throw a\n  //    TypeError.\n  // see: https://tc39.es/ecma262/#sec-properties-of-the-arraybuffer-instances\n  if (\n    webidl.util.Type(V) !== OBJECT ||\n    !types.isArrayBuffer(V)\n  ) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: ['ArrayBuffer']\n    })\n  }\n\n  // 3. If the conversion is not to an IDL type associated\n  //    with the [AllowResizable] extended attribute, and\n  //    IsResizableArrayBuffer(V) is true, then throw a\n  //    TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a resizable ArrayBuffer.`\n    })\n  }\n\n  // 4. Return the IDL ArrayBuffer value that is a\n  //    reference to the same object as V.\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#idl-SharedArrayBuffer\nwebidl.converters.SharedArrayBuffer = function (V, prefix, argument, flags) {\n  // 1. If V is not an Object, or V does not have an\n  //    [[ArrayBufferData]] internal slot, then throw a\n  //    TypeError.\n  // 2. If IsSharedArrayBuffer(V) is false, then throw a\n  //    TypeError.\n  // see: https://tc39.es/ecma262/#sec-properties-of-the-sharedarraybuffer-instances\n  if (\n    webidl.util.Type(V) !== OBJECT ||\n    !types.isSharedArrayBuffer(V)\n  ) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: ['SharedArrayBuffer']\n    })\n  }\n\n  // 3. If the conversion is not to an IDL type associated\n  //    with the [AllowResizable] extended attribute, and\n  //    IsResizableArrayBuffer(V) is true, then throw a\n  //    TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a resizable SharedArrayBuffer.`\n    })\n  }\n\n  // 4. Return the IDL SharedArrayBuffer value that is a\n  //    reference to the same object as V.\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#dfn-typed-array-type\nwebidl.converters.TypedArray = function (V, T, prefix, argument, flags) {\n  // 1. Let T be the IDL type V is being converted to.\n\n  // 2. If Type(V) is not Object, or V does not have a\n  //    [[TypedArrayName]] internal slot with a value\n  //    equal to T\u2019s name, then throw a TypeError.\n  if (\n    webidl.util.Type(V) !== OBJECT ||\n    !types.isTypedArray(V) ||\n    V.constructor.name !== T.name\n  ) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: [T.name]\n    })\n  }\n\n  // 3. If the conversion is not to an IDL type associated\n  //    with the [AllowShared] extended attribute, and\n  //    IsSharedArrayBuffer(V.[[ViewedArrayBuffer]]) is\n  //    true, then throw a TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowShared) && types.isSharedArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a shared array buffer.`\n    })\n  }\n\n  // 4. If the conversion is not to an IDL type associated\n  //    with the [AllowResizable] extended attribute, and\n  //    IsResizableArrayBuffer(V.[[ViewedArrayBuffer]]) is\n  //    true, then throw a TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a resizable array buffer.`\n    })\n  }\n\n  // 5. Return the IDL value of type T that is a reference\n  //    to the same object as V.\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#idl-DataView\nwebidl.converters.DataView = function (V, prefix, argument, flags) {\n  // 1. If Type(V) is not Object, or V does not have a\n  //    [[DataView]] internal slot, then throw a TypeError.\n  if (webidl.util.Type(V) !== OBJECT || !types.isDataView(V)) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: ['DataView']\n    })\n  }\n\n  // 2. If the conversion is not to an IDL type associated\n  //    with the [AllowShared] extended attribute, and\n  //    IsSharedArrayBuffer(V.[[ViewedArrayBuffer]]) is true,\n  //    then throw a TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowShared) && types.isSharedArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a shared array buffer.`\n    })\n  }\n\n  // 3. If the conversion is not to an IDL type associated\n  //    with the [AllowResizable] extended attribute, and\n  //    IsResizableArrayBuffer(V.[[ViewedArrayBuffer]]) is\n  //    true, then throw a TypeError.\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a resizable array buffer.`\n    })\n  }\n\n  // 4. Return the IDL DataView value that is a reference\n  //    to the same object as V.\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#ArrayBufferView\nwebidl.converters.ArrayBufferView = function (V, prefix, argument, flags) {\n  if (\n    webidl.util.Type(V) !== OBJECT ||\n    !types.isArrayBufferView(V)\n  ) {\n    throw webidl.errors.conversionFailed({\n      prefix,\n      argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n      types: ['ArrayBufferView']\n    })\n  }\n\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowShared) && types.isSharedArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a shared array buffer.`\n    })\n  }\n\n  if (!webidl.util.HasFlag(flags, webidl.attributes.AllowResizable) && webidl.util.IsResizableArrayBuffer(V.buffer)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a view on a resizable array buffer.`\n    })\n  }\n\n  return V\n}\n\n// https://webidl.spec.whatwg.org/#BufferSource\nwebidl.converters.BufferSource = function (V, prefix, argument, flags) {\n  if (types.isArrayBuffer(V)) {\n    return webidl.converters.ArrayBuffer(V, prefix, argument, flags)\n  }\n\n  if (types.isArrayBufferView(V)) {\n    flags &= ~webidl.attributes.AllowShared\n\n    return webidl.converters.ArrayBufferView(V, prefix, argument, flags)\n  }\n\n  // Make this explicit for easier debugging\n  if (types.isSharedArrayBuffer(V)) {\n    throw webidl.errors.exception({\n      header: prefix,\n      message: `${argument} cannot be a SharedArrayBuffer.`\n    })\n  }\n\n  throw webidl.errors.conversionFailed({\n    prefix,\n    argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n    types: ['ArrayBuffer', 'ArrayBufferView']\n  })\n}\n\n// https://webidl.spec.whatwg.org/#AllowSharedBufferSource\nwebidl.converters.AllowSharedBufferSource = function (V, prefix, argument, flags) {\n  if (types.isArrayBuffer(V)) {\n    return webidl.converters.ArrayBuffer(V, prefix, argument, flags)\n  }\n\n  if (types.isSharedArrayBuffer(V)) {\n    return webidl.converters.SharedArrayBuffer(V, prefix, argument, flags)\n  }\n\n  if (types.isArrayBufferView(V)) {\n    flags |= webidl.attributes.AllowShared\n    return webidl.converters.ArrayBufferView(V, prefix, argument, flags)\n  }\n\n  throw webidl.errors.conversionFailed({\n    prefix,\n    argument: `${argument} (\"${webidl.util.Stringify(V)}\")`,\n    types: ['ArrayBuffer', 'SharedArrayBuffer', 'ArrayBufferView']\n  })\n}\n\nwebidl.converters['sequence<ByteString>'] = webidl.sequenceConverter(\n  webidl.converters.ByteString\n)\n\nwebidl.converters['sequence<sequence<ByteString>>'] = webidl.sequenceConverter(\n  webidl.converters['sequence<ByteString>']\n)\n\nwebidl.converters['record<ByteString, ByteString>'] = webidl.recordConverter(\n  webidl.converters.ByteString,\n  webidl.converters.ByteString\n)\n\nwebidl.converters.Blob = webidl.interfaceConverter(webidl.is.Blob, 'Blob')\n\nwebidl.converters.AbortSignal = webidl.interfaceConverter(\n  webidl.is.AbortSignal,\n  'AbortSignal'\n)\n\n/**\n * [LegacyTreatNonObjectAsNull]\n * callback EventHandlerNonNull = any (Event event);\n * typedef EventHandlerNonNull? EventHandler;\n * @param {*} V\n */\nwebidl.converters.EventHandlerNonNull = function (V) {\n  if (webidl.util.Type(V) !== OBJECT) {\n    return null\n  }\n\n  // [I]f the value is not an object, it will be converted to null, and if the value is not callable,\n  // it will be converted to a callback function value that does nothing when called.\n  if (typeof V === 'function') {\n    return V\n  }\n\n  return () => {}\n}\n\nwebidl.attributes = {\n  Clamp: 1 << 0,\n  EnforceRange: 1 << 1,\n  AllowShared: 1 << 2,\n  AllowResizable: 1 << 3,\n  LegacyNullToEmptyString: 1 << 4\n}\n\nmodule.exports = {\n  webidl\n}\n", "'use strict'\n\nconst { Transform } = require('node:stream')\nconst zlib = require('node:zlib')\nconst { redirectStatusSet, referrerPolicyTokens, badPortsSet } = require('./constants')\nconst { getGlobalOrigin } = require('./global')\nconst { collectAnHTTPQuotedString, parseMIMEType } = require('./data-url')\nconst { performance } = require('node:perf_hooks')\nconst { ReadableStreamFrom, isValidHTTPToken, normalizedMethodRecordsBase } = require('../../core/util')\nconst assert = require('node:assert')\nconst { isUint8Array } = require('node:util/types')\nconst { webidl } = require('../webidl')\nconst { isomorphicEncode, collectASequenceOfCodePoints, removeChars } = require('../infra')\n\nfunction responseURL (response) {\n  // https://fetch.spec.whatwg.org/#responses\n  // A response has an associated URL. It is a pointer to the last URL\n  // in response\u2019s URL list and null if response\u2019s URL list is empty.\n  const urlList = response.urlList\n  const length = urlList.length\n  return length === 0 ? null : urlList[length - 1].toString()\n}\n\n// https://fetch.spec.whatwg.org/#concept-response-location-url\nfunction responseLocationURL (response, requestFragment) {\n  // 1. If response\u2019s status is not a redirect status, then return null.\n  if (!redirectStatusSet.has(response.status)) {\n    return null\n  }\n\n  // 2. Let location be the result of extracting header list values given\n  // `Location` and response\u2019s header list.\n  let location = response.headersList.get('location', true)\n\n  // 3. If location is a header value, then set location to the result of\n  //    parsing location with response\u2019s URL.\n  if (location !== null && isValidHeaderValue(location)) {\n    if (!isValidEncodedURL(location)) {\n      // Some websites respond location header in UTF-8 form without encoding them as ASCII\n      // and major browsers redirect them to correctly UTF-8 encoded addresses.\n      // Here, we handle that behavior in the same way.\n      location = normalizeBinaryStringToUtf8(location)\n    }\n    location = new URL(location, responseURL(response))\n  }\n\n  // 4. If location is a URL whose fragment is null, then set location\u2019s\n  // fragment to requestFragment.\n  if (location && !location.hash) {\n    location.hash = requestFragment\n  }\n\n  // 5. Return location.\n  return location\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc1738#section-2.2\n * @param {string} url\n * @returns {boolean}\n */\nfunction isValidEncodedURL (url) {\n  for (let i = 0; i < url.length; ++i) {\n    const code = url.charCodeAt(i)\n\n    if (\n      code > 0x7E || // Non-US-ASCII + DEL\n      code < 0x20 // Control characters NUL - US\n    ) {\n      return false\n    }\n  }\n  return true\n}\n\n/**\n * If string contains non-ASCII characters, assumes it's UTF-8 encoded and decodes it.\n * Since UTF-8 is a superset of ASCII, this will work for ASCII strings as well.\n * @param {string} value\n * @returns {string}\n */\nfunction normalizeBinaryStringToUtf8 (value) {\n  return Buffer.from(value, 'binary').toString('utf8')\n}\n\n/** @returns {URL} */\nfunction requestCurrentURL (request) {\n  return request.urlList[request.urlList.length - 1]\n}\n\nfunction requestBadPort (request) {\n  // 1. Let url be request\u2019s current URL.\n  const url = requestCurrentURL(request)\n\n  // 2. If url\u2019s scheme is an HTTP(S) scheme and url\u2019s port is a bad port,\n  // then return blocked.\n  if (urlIsHttpHttpsScheme(url) && badPortsSet.has(url.port)) {\n    return 'blocked'\n  }\n\n  // 3. Return allowed.\n  return 'allowed'\n}\n\nfunction isErrorLike (object) {\n  return object instanceof Error || (\n    object?.constructor?.name === 'Error' ||\n    object?.constructor?.name === 'DOMException'\n  )\n}\n\n// Check whether |statusText| is a ByteString and\n// matches the Reason-Phrase token production.\n// RFC 2616: https://tools.ietf.org/html/rfc2616\n// RFC 7230: https://tools.ietf.org/html/rfc7230\n// \"reason-phrase = *( HTAB / SP / VCHAR / obs-text )\"\n// https://github.com/chromium/chromium/blob/94.0.4604.1/third_party/blink/renderer/core/fetch/response.cc#L116\nfunction isValidReasonPhrase (statusText) {\n  for (let i = 0; i < statusText.length; ++i) {\n    const c = statusText.charCodeAt(i)\n    if (\n      !(\n        (\n          c === 0x09 || // HTAB\n          (c >= 0x20 && c <= 0x7e) || // SP / VCHAR\n          (c >= 0x80 && c <= 0xff)\n        ) // obs-text\n      )\n    ) {\n      return false\n    }\n  }\n  return true\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#header-name\n * @param {string} potentialValue\n */\nconst isValidHeaderName = isValidHTTPToken\n\n/**\n * @see https://fetch.spec.whatwg.org/#header-value\n * @param {string} potentialValue\n */\nfunction isValidHeaderValue (potentialValue) {\n  // - Has no leading or trailing HTTP tab or space bytes.\n  // - Contains no 0x00 (NUL) or HTTP newline bytes.\n  return (\n    potentialValue[0] === '\\t' ||\n    potentialValue[0] === ' ' ||\n    potentialValue[potentialValue.length - 1] === '\\t' ||\n    potentialValue[potentialValue.length - 1] === ' ' ||\n    potentialValue.includes('\\n') ||\n    potentialValue.includes('\\r') ||\n    potentialValue.includes('\\0')\n  ) === false\n}\n\n/**\n * Parse a referrer policy from a Referrer-Policy header\n * @see https://w3c.github.io/webappsec-referrer-policy/#parse-referrer-policy-from-header\n */\nfunction parseReferrerPolicy (actualResponse) {\n  // 1. Let policy-tokens be the result of extracting header list values given `Referrer-Policy` and response\u2019s header list.\n  const policyHeader = (actualResponse.headersList.get('referrer-policy', true) ?? '').split(',')\n\n  // 2. Let policy be the empty string.\n  let policy = ''\n\n  // 3. For each token in policy-tokens, if token is a referrer policy and token is not the empty string, then set policy to token.\n\n  // Note: As the referrer-policy can contain multiple policies\n  // separated by comma, we need to loop through all of them\n  // and pick the first valid one.\n  // Ref: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy#specify_a_fallback_policy\n  if (policyHeader.length) {\n    // The right-most policy takes precedence.\n    // The left-most policy is the fallback.\n    for (let i = policyHeader.length; i !== 0; i--) {\n      const token = policyHeader[i - 1].trim()\n      if (referrerPolicyTokens.has(token)) {\n        policy = token\n        break\n      }\n    }\n  }\n\n  // 4. Return policy.\n  return policy\n}\n\n/**\n * Given a request request and a response actualResponse, this algorithm\n * updates request\u2019s referrer policy according to the Referrer-Policy\n * header (if any) in actualResponse.\n * @see https://w3c.github.io/webappsec-referrer-policy/#set-requests-referrer-policy-on-redirect\n * @param {import('./request').Request} request\n * @param {import('./response').Response} actualResponse\n */\nfunction setRequestReferrerPolicyOnRedirect (request, actualResponse) {\n  // 1. Let policy be the result of executing \u00A7 8.1 Parse a referrer policy\n  // from a Referrer-Policy header on actualResponse.\n  const policy = parseReferrerPolicy(actualResponse)\n\n  // 2. If policy is not the empty string, then set request\u2019s referrer policy to policy.\n  if (policy !== '') {\n    request.referrerPolicy = policy\n  }\n}\n\n// https://fetch.spec.whatwg.org/#cross-origin-resource-policy-check\nfunction crossOriginResourcePolicyCheck () {\n  // TODO\n  return 'allowed'\n}\n\n// https://fetch.spec.whatwg.org/#concept-cors-check\nfunction corsCheck () {\n  // TODO\n  return 'success'\n}\n\n// https://fetch.spec.whatwg.org/#concept-tao-check\nfunction TAOCheck () {\n  // TODO\n  return 'success'\n}\n\nfunction appendFetchMetadata (httpRequest) {\n  //  https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-dest-header\n  //  TODO\n\n  //  https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-mode-header\n\n  //  1. Assert: r\u2019s url is a potentially trustworthy URL.\n  //  TODO\n\n  //  2. Let header be a Structured Header whose value is a token.\n  let header = null\n\n  //  3. Set header\u2019s value to r\u2019s mode.\n  header = httpRequest.mode\n\n  //  4. Set a structured field value `Sec-Fetch-Mode`/header in r\u2019s header list.\n  httpRequest.headersList.set('sec-fetch-mode', header, true)\n\n  //  https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-site-header\n  //  TODO\n\n  //  https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-user-header\n  //  TODO\n}\n\n// https://fetch.spec.whatwg.org/#append-a-request-origin-header\nfunction appendRequestOriginHeader (request) {\n  // 1. Let serializedOrigin be the result of byte-serializing a request origin\n  //    with request.\n  // TODO: implement \"byte-serializing a request origin\"\n  let serializedOrigin = request.origin\n\n  // - \"'client' is changed to an origin during fetching.\"\n  //   This doesn't happen in undici (in most cases) because undici, by default,\n  //   has no concept of origin.\n  // - request.origin can also be set to request.client.origin (client being\n  //   an environment settings object), which is undefined without using\n  //   setGlobalOrigin.\n  if (serializedOrigin === 'client' || serializedOrigin === undefined) {\n    return\n  }\n\n  // 2. If request\u2019s response tainting is \"cors\" or request\u2019s mode is \"websocket\",\n  //    then append (`Origin`, serializedOrigin) to request\u2019s header list.\n  // 3. Otherwise, if request\u2019s method is neither `GET` nor `HEAD`, then:\n  if (request.responseTainting === 'cors' || request.mode === 'websocket') {\n    request.headersList.append('origin', serializedOrigin, true)\n  } else if (request.method !== 'GET' && request.method !== 'HEAD') {\n    // 1. Switch on request\u2019s referrer policy:\n    switch (request.referrerPolicy) {\n      case 'no-referrer':\n        // Set serializedOrigin to `null`.\n        serializedOrigin = null\n        break\n      case 'no-referrer-when-downgrade':\n      case 'strict-origin':\n      case 'strict-origin-when-cross-origin':\n        // If request\u2019s origin is a tuple origin, its scheme is \"https\", and\n        // request\u2019s current URL\u2019s scheme is not \"https\", then set\n        // serializedOrigin to `null`.\n        if (request.origin && urlHasHttpsScheme(request.origin) && !urlHasHttpsScheme(requestCurrentURL(request))) {\n          serializedOrigin = null\n        }\n        break\n      case 'same-origin':\n        // If request\u2019s origin is not same origin with request\u2019s current URL\u2019s\n        // origin, then set serializedOrigin to `null`.\n        if (!sameOrigin(request, requestCurrentURL(request))) {\n          serializedOrigin = null\n        }\n        break\n      default:\n        // Do nothing.\n    }\n\n    // 2. Append (`Origin`, serializedOrigin) to request\u2019s header list.\n    request.headersList.append('origin', serializedOrigin, true)\n  }\n}\n\n// https://w3c.github.io/hr-time/#dfn-coarsen-time\nfunction coarsenTime (timestamp, crossOriginIsolatedCapability) {\n  // TODO\n  return timestamp\n}\n\n// https://fetch.spec.whatwg.org/#clamp-and-coarsen-connection-timing-info\nfunction clampAndCoarsenConnectionTimingInfo (connectionTimingInfo, defaultStartTime, crossOriginIsolatedCapability) {\n  if (!connectionTimingInfo?.startTime || connectionTimingInfo.startTime < defaultStartTime) {\n    return {\n      domainLookupStartTime: defaultStartTime,\n      domainLookupEndTime: defaultStartTime,\n      connectionStartTime: defaultStartTime,\n      connectionEndTime: defaultStartTime,\n      secureConnectionStartTime: defaultStartTime,\n      ALPNNegotiatedProtocol: connectionTimingInfo?.ALPNNegotiatedProtocol\n    }\n  }\n\n  return {\n    domainLookupStartTime: coarsenTime(connectionTimingInfo.domainLookupStartTime, crossOriginIsolatedCapability),\n    domainLookupEndTime: coarsenTime(connectionTimingInfo.domainLookupEndTime, crossOriginIsolatedCapability),\n    connectionStartTime: coarsenTime(connectionTimingInfo.connectionStartTime, crossOriginIsolatedCapability),\n    connectionEndTime: coarsenTime(connectionTimingInfo.connectionEndTime, crossOriginIsolatedCapability),\n    secureConnectionStartTime: coarsenTime(connectionTimingInfo.secureConnectionStartTime, crossOriginIsolatedCapability),\n    ALPNNegotiatedProtocol: connectionTimingInfo.ALPNNegotiatedProtocol\n  }\n}\n\n// https://w3c.github.io/hr-time/#dfn-coarsened-shared-current-time\nfunction coarsenedSharedCurrentTime (crossOriginIsolatedCapability) {\n  return coarsenTime(performance.now(), crossOriginIsolatedCapability)\n}\n\n// https://fetch.spec.whatwg.org/#create-an-opaque-timing-info\nfunction createOpaqueTimingInfo (timingInfo) {\n  return {\n    startTime: timingInfo.startTime ?? 0,\n    redirectStartTime: 0,\n    redirectEndTime: 0,\n    postRedirectStartTime: timingInfo.startTime ?? 0,\n    finalServiceWorkerStartTime: 0,\n    finalNetworkResponseStartTime: 0,\n    finalNetworkRequestStartTime: 0,\n    endTime: 0,\n    encodedBodySize: 0,\n    decodedBodySize: 0,\n    finalConnectionTimingInfo: null\n  }\n}\n\n// https://html.spec.whatwg.org/multipage/origin.html#policy-container\nfunction makePolicyContainer () {\n  // Note: the fetch spec doesn't make use of embedder policy or CSP list\n  return {\n    referrerPolicy: 'strict-origin-when-cross-origin'\n  }\n}\n\n// https://html.spec.whatwg.org/multipage/origin.html#clone-a-policy-container\nfunction clonePolicyContainer (policyContainer) {\n  return {\n    referrerPolicy: policyContainer.referrerPolicy\n  }\n}\n\n/**\n * Determine request\u2019s Referrer\n *\n * @see https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer\n */\nfunction determineRequestsReferrer (request) {\n  // Given a request request, we can determine the correct referrer information\n  // to send by examining its referrer policy as detailed in the following\n  // steps, which return either no referrer or a URL:\n\n  // 1. Let policy be request's referrer policy.\n  const policy = request.referrerPolicy\n\n  // Note: policy cannot (shouldn't) be null or an empty string.\n  assert(policy)\n\n  // 2. Let environment be request\u2019s client.\n\n  let referrerSource = null\n\n  // 3. Switch on request\u2019s referrer:\n\n  // \"client\"\n  if (request.referrer === 'client') {\n    // Note: node isn't a browser and doesn't implement document/iframes,\n    // so we bypass this step and replace it with our own.\n\n    const globalOrigin = getGlobalOrigin()\n\n    if (!globalOrigin || globalOrigin.origin === 'null') {\n      return 'no-referrer'\n    }\n\n    // Note: we need to clone it as it's mutated\n    referrerSource = new URL(globalOrigin)\n  // a URL\n  } else if (webidl.is.URL(request.referrer)) {\n    // Let referrerSource be request\u2019s referrer.\n    referrerSource = request.referrer\n  }\n\n  // 4. Let request\u2019s referrerURL be the result of stripping referrerSource for\n  //    use as a referrer.\n  let referrerURL = stripURLForReferrer(referrerSource)\n\n  // 5. Let referrerOrigin be the result of stripping referrerSource for use as\n  //    a referrer, with the origin-only flag set to true.\n  const referrerOrigin = stripURLForReferrer(referrerSource, true)\n\n  // 6. If the result of serializing referrerURL is a string whose length is\n  //    greater than 4096, set referrerURL to referrerOrigin.\n  if (referrerURL.toString().length > 4096) {\n    referrerURL = referrerOrigin\n  }\n\n  // 7. The user agent MAY alter referrerURL or referrerOrigin at this point\n  // to enforce arbitrary policy considerations in the interests of minimizing\n  // data leakage. For example, the user agent could strip the URL down to an\n  // origin, modify its host, replace it with an empty string, etc.\n\n  // 8. Execute the switch statements corresponding to the value of policy:\n  switch (policy) {\n    case 'no-referrer':\n      // Return no referrer\n      return 'no-referrer'\n    case 'origin':\n      // Return referrerOrigin\n      if (referrerOrigin != null) {\n        return referrerOrigin\n      }\n      return stripURLForReferrer(referrerSource, true)\n    case 'unsafe-url':\n      // Return referrerURL.\n      return referrerURL\n    case 'strict-origin': {\n      const currentURL = requestCurrentURL(request)\n\n      // 1. If referrerURL is a potentially trustworthy URL and request\u2019s\n      //    current URL is not a potentially trustworthy URL, then return no\n      //    referrer.\n      if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {\n        return 'no-referrer'\n      }\n      // 2. Return referrerOrigin\n      return referrerOrigin\n    }\n    case 'strict-origin-when-cross-origin': {\n      const currentURL = requestCurrentURL(request)\n\n      // 1. If the origin of referrerURL and the origin of request\u2019s current\n      //    URL are the same, then return referrerURL.\n      if (sameOrigin(referrerURL, currentURL)) {\n        return referrerURL\n      }\n\n      // 2. If referrerURL is a potentially trustworthy URL and request\u2019s\n      //    current URL is not a potentially trustworthy URL, then return no\n      //    referrer.\n      if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {\n        return 'no-referrer'\n      }\n\n      // 3. Return referrerOrigin.\n      return referrerOrigin\n    }\n    case 'same-origin':\n      // 1. If the origin of referrerURL and the origin of request\u2019s current\n      // URL are the same, then return referrerURL.\n      if (sameOrigin(request, referrerURL)) {\n        return referrerURL\n      }\n      // 2. Return no referrer.\n      return 'no-referrer'\n    case 'origin-when-cross-origin':\n      // 1. If the origin of referrerURL and the origin of request\u2019s current\n      // URL are the same, then return referrerURL.\n      if (sameOrigin(request, referrerURL)) {\n        return referrerURL\n      }\n      // 2. Return referrerOrigin.\n      return referrerOrigin\n    case 'no-referrer-when-downgrade': {\n      const currentURL = requestCurrentURL(request)\n\n      // 1. If referrerURL is a potentially trustworthy URL and request\u2019s\n      //    current URL is not a potentially trustworthy URL, then return no\n      //    referrer.\n      if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {\n        return 'no-referrer'\n      }\n      // 2. Return referrerURL.\n      return referrerURL\n    }\n  }\n}\n\n/**\n * Certain portions of URLs must not be included when sending a URL as the\n * value of a `Referer` header: a URLs fragment, username, and password\n * components must be stripped from the URL before it\u2019s sent out. This\n * algorithm accepts a origin-only flag, which defaults to false. If set to\n * true, the algorithm will additionally remove the URL\u2019s path and query\n * components, leaving only the scheme, host, and port.\n *\n * @see https://w3c.github.io/webappsec-referrer-policy/#strip-url\n * @param {URL} url\n * @param {boolean} [originOnly=false]\n */\nfunction stripURLForReferrer (url, originOnly = false) {\n  // 1. Assert: url is a URL.\n  assert(webidl.is.URL(url))\n\n  // Note: Create a new URL instance to avoid mutating the original URL.\n  url = new URL(url)\n\n  // 2. If url\u2019s scheme is a local scheme, then return no referrer.\n  if (urlIsLocal(url)) {\n    return 'no-referrer'\n  }\n\n  // 3. Set url\u2019s username to the empty string.\n  url.username = ''\n\n  // 4. Set url\u2019s password to the empty string.\n  url.password = ''\n\n  // 5. Set url\u2019s fragment to null.\n  url.hash = ''\n\n  // 6. If the origin-only flag is true, then:\n  if (originOnly === true) {\n    // 1. Set url\u2019s path to \u00AB the empty string \u00BB.\n    url.pathname = ''\n\n    // 2. Set url\u2019s query to null.\n    url.search = ''\n  }\n\n  // 7. Return url.\n  return url\n}\n\nconst isPotentialleTrustworthyIPv4 = RegExp.prototype.test\n  .bind(/^127\\.(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)\\.){2}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)$/)\n\nconst isPotentiallyTrustworthyIPv6 = RegExp.prototype.test\n  .bind(/^(?:(?:0{1,4}:){7}|(?:0{1,4}:){1,6}:|::)0{0,3}1$/)\n\n/**\n * Check if host matches one of the CIDR notations 127.0.0.0/8 or ::1/128.\n *\n * @param {string} origin\n * @returns {boolean}\n */\nfunction isOriginIPPotentiallyTrustworthy (origin) {\n  // IPv6\n  if (origin.includes(':')) {\n    // Remove brackets from IPv6 addresses\n    if (origin[0] === '[' && origin[origin.length - 1] === ']') {\n      origin = origin.slice(1, -1)\n    }\n    return isPotentiallyTrustworthyIPv6(origin)\n  }\n\n  // IPv4\n  return isPotentialleTrustworthyIPv4(origin)\n}\n\n/**\n * A potentially trustworthy origin is one which a user agent can generally\n * trust as delivering data securely.\n *\n * Return value `true` means `Potentially Trustworthy`.\n * Return value `false` means `Not Trustworthy`.\n *\n * @see https://w3c.github.io/webappsec-secure-contexts/#is-origin-trustworthy\n * @param {string} origin\n * @returns {boolean}\n */\nfunction isOriginPotentiallyTrustworthy (origin) {\n  // 1. If origin is an opaque origin, return \"Not Trustworthy\".\n  if (origin == null || origin === 'null') {\n    return false\n  }\n\n  // 2. Assert: origin is a tuple origin.\n  origin = new URL(origin)\n\n  // 3. If origin\u2019s scheme is either \"https\" or \"wss\",\n  //    return \"Potentially Trustworthy\".\n  if (origin.protocol === 'https:' || origin.protocol === 'wss:') {\n    return true\n  }\n\n  // 4. If origin\u2019s host matches one of the CIDR notations 127.0.0.0/8 or\n  // ::1/128 [RFC4632], return \"Potentially Trustworthy\".\n  if (isOriginIPPotentiallyTrustworthy(origin.hostname)) {\n    return true\n  }\n\n  // 5. If the user agent conforms to the name resolution rules in\n  //    [let-localhost-be-localhost] and one of the following is true:\n\n  //    origin\u2019s host is \"localhost\" or \"localhost.\"\n  if (origin.hostname === 'localhost' || origin.hostname === 'localhost.') {\n    return true\n  }\n\n  //    origin\u2019s host ends with \".localhost\" or \".localhost.\"\n  if (origin.hostname.endsWith('.localhost') || origin.hostname.endsWith('.localhost.')) {\n    return true\n  }\n\n  // 6. If origin\u2019s scheme is \"file\", return \"Potentially Trustworthy\".\n  if (origin.protocol === 'file:') {\n    return true\n  }\n\n  // 7. If origin\u2019s scheme component is one which the user agent considers to\n  // be authenticated, return \"Potentially Trustworthy\".\n\n  // 8. If origin has been configured as a trustworthy origin, return\n  //    \"Potentially Trustworthy\".\n\n  // 9. Return \"Not Trustworthy\".\n  return false\n}\n\n/**\n * A potentially trustworthy URL is one which either inherits context from its\n * creator (about:blank, about:srcdoc, data) or one whose origin is a\n * potentially trustworthy origin.\n *\n * Return value `true` means `Potentially Trustworthy`.\n * Return value `false` means `Not Trustworthy`.\n *\n * @see https://www.w3.org/TR/secure-contexts/#is-url-trustworthy\n * @param {URL} url\n * @returns {boolean}\n */\nfunction isURLPotentiallyTrustworthy (url) {\n  // Given a URL record (url), the following algorithm returns \"Potentially\n  // Trustworthy\" or \"Not Trustworthy\" as appropriate:\n  if (!webidl.is.URL(url)) {\n    return false\n  }\n\n  // 1. If url is \"about:blank\" or \"about:srcdoc\",\n  //    return \"Potentially Trustworthy\".\n  if (url.href === 'about:blank' || url.href === 'about:srcdoc') {\n    return true\n  }\n\n  // 2. If url\u2019s scheme is \"data\", return \"Potentially Trustworthy\".\n  if (url.protocol === 'data:') return true\n\n  // Note: The origin of blob: URLs is the origin of the context in which they\n  // were created. Therefore, blobs created in a trustworthy origin will\n  // themselves be potentially trustworthy.\n  if (url.protocol === 'blob:') return true\n\n  // 3. Return the result of executing \u00A7 3.1 Is origin potentially trustworthy?\n  // on url\u2019s origin.\n  return isOriginPotentiallyTrustworthy(url.origin)\n}\n\n// https://w3c.github.io/webappsec-upgrade-insecure-requests/#upgrade-request\nfunction tryUpgradeRequestToAPotentiallyTrustworthyURL (request) {\n  // TODO\n}\n\n/**\n * @link {https://html.spec.whatwg.org/multipage/origin.html#same-origin}\n * @param {URL} A\n * @param {URL} B\n */\nfunction sameOrigin (A, B) {\n  // 1. If A and B are the same opaque origin, then return true.\n  if (A.origin === B.origin && A.origin === 'null') {\n    return true\n  }\n\n  // 2. If A and B are both tuple origins and their schemes,\n  //    hosts, and port are identical, then return true.\n  if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) {\n    return true\n  }\n\n  // 3. Return false.\n  return false\n}\n\nfunction isAborted (fetchParams) {\n  return fetchParams.controller.state === 'aborted'\n}\n\nfunction isCancelled (fetchParams) {\n  return fetchParams.controller.state === 'aborted' ||\n    fetchParams.controller.state === 'terminated'\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-method-normalize\n * @param {string} method\n */\nfunction normalizeMethod (method) {\n  return normalizedMethodRecordsBase[method.toLowerCase()] ?? method\n}\n\n// https://tc39.es/ecma262/#sec-%25iteratorprototype%25-object\nconst esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))\n\n/**\n * @see https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object\n * @param {string} name name of the instance\n * @param {((target: any) => any)} kInternalIterator\n * @param {string | number} [keyIndex]\n * @param {string | number} [valueIndex]\n */\nfunction createIterator (name, kInternalIterator, keyIndex = 0, valueIndex = 1) {\n  class FastIterableIterator {\n    /** @type {any} */\n    #target\n    /** @type {'key' | 'value' | 'key+value'} */\n    #kind\n    /** @type {number} */\n    #index\n\n    /**\n     * @see https://webidl.spec.whatwg.org/#dfn-default-iterator-object\n     * @param {unknown} target\n     * @param {'key' | 'value' | 'key+value'} kind\n     */\n    constructor (target, kind) {\n      this.#target = target\n      this.#kind = kind\n      this.#index = 0\n    }\n\n    next () {\n      // 1. Let interface be the interface for which the iterator prototype object exists.\n      // 2. Let thisValue be the this value.\n      // 3. Let object be ? ToObject(thisValue).\n      // 4. If object is a platform object, then perform a security\n      //    check, passing:\n      // 5. If object is not a default iterator object for interface,\n      //    then throw a TypeError.\n      if (typeof this !== 'object' || this === null || !(#target in this)) {\n        throw new TypeError(\n          `'next' called on an object that does not implement interface ${name} Iterator.`\n        )\n      }\n\n      // 6. Let index be object\u2019s index.\n      // 7. Let kind be object\u2019s kind.\n      // 8. Let values be object\u2019s target's value pairs to iterate over.\n      const index = this.#index\n      const values = kInternalIterator(this.#target)\n\n      // 9. Let len be the length of values.\n      const len = values.length\n\n      // 10. If index is greater than or equal to len, then return\n      //     CreateIterResultObject(undefined, true).\n      if (index >= len) {\n        return {\n          value: undefined,\n          done: true\n        }\n      }\n\n      // 11. Let pair be the entry in values at index index.\n      const { [keyIndex]: key, [valueIndex]: value } = values[index]\n\n      // 12. Set object\u2019s index to index + 1.\n      this.#index = index + 1\n\n      // 13. Return the iterator result for pair and kind.\n\n      // https://webidl.spec.whatwg.org/#iterator-result\n\n      // 1. Let result be a value determined by the value of kind:\n      let result\n      switch (this.#kind) {\n        case 'key':\n          // 1. Let idlKey be pair\u2019s key.\n          // 2. Let key be the result of converting idlKey to an\n          //    ECMAScript value.\n          // 3. result is key.\n          result = key\n          break\n        case 'value':\n          // 1. Let idlValue be pair\u2019s value.\n          // 2. Let value be the result of converting idlValue to\n          //    an ECMAScript value.\n          // 3. result is value.\n          result = value\n          break\n        case 'key+value':\n          // 1. Let idlKey be pair\u2019s key.\n          // 2. Let idlValue be pair\u2019s value.\n          // 3. Let key be the result of converting idlKey to an\n          //    ECMAScript value.\n          // 4. Let value be the result of converting idlValue to\n          //    an ECMAScript value.\n          // 5. Let array be ! ArrayCreate(2).\n          // 6. Call ! CreateDataProperty(array, \"0\", key).\n          // 7. Call ! CreateDataProperty(array, \"1\", value).\n          // 8. result is array.\n          result = [key, value]\n          break\n      }\n\n      // 2. Return CreateIterResultObject(result, false).\n      return {\n        value: result,\n        done: false\n      }\n    }\n  }\n\n  // https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object\n  // @ts-ignore\n  delete FastIterableIterator.prototype.constructor\n\n  Object.setPrototypeOf(FastIterableIterator.prototype, esIteratorPrototype)\n\n  Object.defineProperties(FastIterableIterator.prototype, {\n    [Symbol.toStringTag]: {\n      writable: false,\n      enumerable: false,\n      configurable: true,\n      value: `${name} Iterator`\n    },\n    next: { writable: true, enumerable: true, configurable: true }\n  })\n\n  /**\n   * @param {unknown} target\n   * @param {'key' | 'value' | 'key+value'} kind\n   * @returns {IterableIterator<any>}\n   */\n  return function (target, kind) {\n    return new FastIterableIterator(target, kind)\n  }\n}\n\n/**\n * @see https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object\n * @param {string} name name of the instance\n * @param {any} object class\n * @param {(target: any) => any} kInternalIterator\n * @param {string | number} [keyIndex]\n * @param {string | number} [valueIndex]\n */\nfunction iteratorMixin (name, object, kInternalIterator, keyIndex = 0, valueIndex = 1) {\n  const makeIterator = createIterator(name, kInternalIterator, keyIndex, valueIndex)\n\n  const properties = {\n    keys: {\n      writable: true,\n      enumerable: true,\n      configurable: true,\n      value: function keys () {\n        webidl.brandCheck(this, object)\n        return makeIterator(this, 'key')\n      }\n    },\n    values: {\n      writable: true,\n      enumerable: true,\n      configurable: true,\n      value: function values () {\n        webidl.brandCheck(this, object)\n        return makeIterator(this, 'value')\n      }\n    },\n    entries: {\n      writable: true,\n      enumerable: true,\n      configurable: true,\n      value: function entries () {\n        webidl.brandCheck(this, object)\n        return makeIterator(this, 'key+value')\n      }\n    },\n    forEach: {\n      writable: true,\n      enumerable: true,\n      configurable: true,\n      value: function forEach (callbackfn, thisArg = globalThis) {\n        webidl.brandCheck(this, object)\n        webidl.argumentLengthCheck(arguments, 1, `${name}.forEach`)\n        if (typeof callbackfn !== 'function') {\n          throw new TypeError(\n            `Failed to execute 'forEach' on '${name}': parameter 1 is not of type 'Function'.`\n          )\n        }\n        for (const { 0: key, 1: value } of makeIterator(this, 'key+value')) {\n          callbackfn.call(thisArg, value, key, this)\n        }\n      }\n    }\n  }\n\n  return Object.defineProperties(object.prototype, {\n    ...properties,\n    [Symbol.iterator]: {\n      writable: true,\n      enumerable: false,\n      configurable: true,\n      value: properties.entries.value\n    }\n  })\n}\n\n/**\n * @param {import('./body').ExtractBodyResult} body\n * @param {(bytes: Uint8Array) => void} processBody\n * @param {(error: Error) => void} processBodyError\n * @returns {void}\n *\n * @see https://fetch.spec.whatwg.org/#body-fully-read\n */\nfunction fullyReadBody (body, processBody, processBodyError) {\n  // 1. If taskDestination is null, then set taskDestination to\n  //    the result of starting a new parallel queue.\n\n  // 2. Let successSteps given a byte sequence bytes be to queue a\n  //    fetch task to run processBody given bytes, with taskDestination.\n  const successSteps = processBody\n\n  // 3. Let errorSteps be to queue a fetch task to run processBodyError,\n  //    with taskDestination.\n  const errorSteps = processBodyError\n\n  try {\n  // 4. Let reader be the result of getting a reader for body\u2019s stream.\n  //    If that threw an exception, then run errorSteps with that\n  //    exception and return.\n    const reader = body.stream.getReader()\n\n    // 5. Read all bytes from reader, given successSteps and errorSteps.\n    readAllBytes(reader, successSteps, errorSteps)\n  } catch (e) {\n    errorSteps(e)\n  }\n}\n\n/**\n * @param {ReadableStreamController<Uint8Array>} controller\n */\nfunction readableStreamClose (controller) {\n  try {\n    controller.close()\n    controller.byobRequest?.respond(0)\n  } catch (err) {\n    // TODO: add comment explaining why this error occurs.\n    if (!err.message.includes('Controller is already closed') && !err.message.includes('ReadableStream is already closed')) {\n      throw err\n    }\n  }\n}\n\n/**\n * @see https://streams.spec.whatwg.org/#readablestreamdefaultreader-read-all-bytes\n * @see https://streams.spec.whatwg.org/#read-loop\n * @param {ReadableStream<Uint8Array<ArrayBuffer>>} reader\n * @param {(bytes: Uint8Array) => void} successSteps\n * @param {(error: Error) => void} failureSteps\n * @returns {Promise<void>}\n */\nasync function readAllBytes (reader, successSteps, failureSteps) {\n  try {\n    const bytes = []\n    let byteLength = 0\n\n    do {\n      const { done, value: chunk } = await reader.read()\n\n      if (done) {\n        // 1. Call successSteps with bytes.\n        successSteps(Buffer.concat(bytes, byteLength))\n        return\n      }\n\n      // 1. If chunk is not a Uint8Array object, call failureSteps\n      //    with a TypeError and abort these steps.\n      if (!isUint8Array(chunk)) {\n        failureSteps(new TypeError('Received non-Uint8Array chunk'))\n        return\n      }\n\n      // 2. Append the bytes represented by chunk to bytes.\n      bytes.push(chunk)\n      byteLength += chunk.length\n\n    // 3. Read-loop given reader, bytes, successSteps, and failureSteps.\n    } while (true)\n  } catch (e) {\n    // 1. Call failureSteps with e.\n    failureSteps(e)\n  }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#is-local\n * @param {URL} url\n * @returns {boolean}\n */\nfunction urlIsLocal (url) {\n  assert('protocol' in url) // ensure it's a url object\n\n  const protocol = url.protocol\n\n  // A URL is local if its scheme is a local scheme.\n  // A local scheme is \"about\", \"blob\", or \"data\".\n  return protocol === 'about:' || protocol === 'blob:' || protocol === 'data:'\n}\n\n/**\n * @param {string|URL} url\n * @returns {boolean}\n */\nfunction urlHasHttpsScheme (url) {\n  return (\n    (\n      typeof url === 'string' &&\n      url[5] === ':' &&\n      url[0] === 'h' &&\n      url[1] === 't' &&\n      url[2] === 't' &&\n      url[3] === 'p' &&\n      url[4] === 's'\n    ) ||\n    url.protocol === 'https:'\n  )\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#http-scheme\n * @param {URL} url\n */\nfunction urlIsHttpHttpsScheme (url) {\n  assert('protocol' in url) // ensure it's a url object\n\n  const protocol = url.protocol\n\n  return protocol === 'http:' || protocol === 'https:'\n}\n\n/**\n * @typedef {Object} RangeHeaderValue\n * @property {number|null} rangeStartValue\n * @property {number|null} rangeEndValue\n */\n\n/**\n * @see https://fetch.spec.whatwg.org/#simple-range-header-value\n * @param {string} value\n * @param {boolean} allowWhitespace\n * @return {RangeHeaderValue|'failure'}\n */\nfunction simpleRangeHeaderValue (value, allowWhitespace) {\n  // 1. Let data be the isomorphic decoding of value.\n  // Note: isomorphic decoding takes a sequence of bytes (ie. a Uint8Array) and turns it into a string,\n  // nothing more. We obviously don't need to do that if value is a string already.\n  const data = value\n\n  // 2. If data does not start with \"bytes\", then return failure.\n  if (!data.startsWith('bytes')) {\n    return 'failure'\n  }\n\n  // 3. Let position be a position variable for data, initially pointing at the 5th code point of data.\n  const position = { position: 5 }\n\n  // 4. If allowWhitespace is true, collect a sequence of code points that are HTTP tab or space,\n  //    from data given position.\n  if (allowWhitespace) {\n    collectASequenceOfCodePoints(\n      (char) => char === '\\t' || char === ' ',\n      data,\n      position\n    )\n  }\n\n  // 5. If the code point at position within data is not U+003D (=), then return failure.\n  if (data.charCodeAt(position.position) !== 0x3D) {\n    return 'failure'\n  }\n\n  // 6. Advance position by 1.\n  position.position++\n\n  // 7. If allowWhitespace is true, collect a sequence of code points that are HTTP tab or space, from\n  //    data given position.\n  if (allowWhitespace) {\n    collectASequenceOfCodePoints(\n      (char) => char === '\\t' || char === ' ',\n      data,\n      position\n    )\n  }\n\n  // 8. Let rangeStart be the result of collecting a sequence of code points that are ASCII digits,\n  //    from data given position.\n  const rangeStart = collectASequenceOfCodePoints(\n    (char) => {\n      const code = char.charCodeAt(0)\n\n      return code >= 0x30 && code <= 0x39\n    },\n    data,\n    position\n  )\n\n  // 9. Let rangeStartValue be rangeStart, interpreted as decimal number, if rangeStart is not the\n  //    empty string; otherwise null.\n  const rangeStartValue = rangeStart.length ? Number(rangeStart) : null\n\n  // 10. If allowWhitespace is true, collect a sequence of code points that are HTTP tab or space,\n  //     from data given position.\n  if (allowWhitespace) {\n    collectASequenceOfCodePoints(\n      (char) => char === '\\t' || char === ' ',\n      data,\n      position\n    )\n  }\n\n  // 11. If the code point at position within data is not U+002D (-), then return failure.\n  if (data.charCodeAt(position.position) !== 0x2D) {\n    return 'failure'\n  }\n\n  // 12. Advance position by 1.\n  position.position++\n\n  // 13. If allowWhitespace is true, collect a sequence of code points that are HTTP tab\n  //     or space, from data given position.\n  // Note from Khafra: its the same step as in #8 again lol\n  if (allowWhitespace) {\n    collectASequenceOfCodePoints(\n      (char) => char === '\\t' || char === ' ',\n      data,\n      position\n    )\n  }\n\n  // 14. Let rangeEnd be the result of collecting a sequence of code points that are\n  //     ASCII digits, from data given position.\n  // Note from Khafra: you wouldn't guess it, but this is also the same step as #8\n  const rangeEnd = collectASequenceOfCodePoints(\n    (char) => {\n      const code = char.charCodeAt(0)\n\n      return code >= 0x30 && code <= 0x39\n    },\n    data,\n    position\n  )\n\n  // 15. Let rangeEndValue be rangeEnd, interpreted as decimal number, if rangeEnd\n  //     is not the empty string; otherwise null.\n  // Note from Khafra: THE SAME STEP, AGAIN!!!\n  // Note: why interpret as a decimal if we only collect ascii digits?\n  const rangeEndValue = rangeEnd.length ? Number(rangeEnd) : null\n\n  // 16. If position is not past the end of data, then return failure.\n  if (position.position < data.length) {\n    return 'failure'\n  }\n\n  // 17. If rangeEndValue and rangeStartValue are null, then return failure.\n  if (rangeEndValue === null && rangeStartValue === null) {\n    return 'failure'\n  }\n\n  // 18. If rangeStartValue and rangeEndValue are numbers, and rangeStartValue is\n  //     greater than rangeEndValue, then return failure.\n  // Note: ... when can they not be numbers?\n  if (rangeStartValue > rangeEndValue) {\n    return 'failure'\n  }\n\n  // 19. Return (rangeStartValue, rangeEndValue).\n  return { rangeStartValue, rangeEndValue }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#build-a-content-range\n * @param {number} rangeStart\n * @param {number} rangeEnd\n * @param {number} fullLength\n */\nfunction buildContentRange (rangeStart, rangeEnd, fullLength) {\n  // 1. Let contentRange be `bytes `.\n  let contentRange = 'bytes '\n\n  // 2. Append rangeStart, serialized and isomorphic encoded, to contentRange.\n  contentRange += isomorphicEncode(`${rangeStart}`)\n\n  // 3. Append 0x2D (-) to contentRange.\n  contentRange += '-'\n\n  // 4. Append rangeEnd, serialized and isomorphic encoded to contentRange.\n  contentRange += isomorphicEncode(`${rangeEnd}`)\n\n  // 5. Append 0x2F (/) to contentRange.\n  contentRange += '/'\n\n  // 6. Append fullLength, serialized and isomorphic encoded to contentRange.\n  contentRange += isomorphicEncode(`${fullLength}`)\n\n  // 7. Return contentRange.\n  return contentRange\n}\n\n// A Stream, which pipes the response to zlib.createInflate() or\n// zlib.createInflateRaw() depending on the first byte of the Buffer.\n// If the lower byte of the first byte is 0x08, then the stream is\n// interpreted as a zlib stream, otherwise it's interpreted as a\n// raw deflate stream.\nclass InflateStream extends Transform {\n  #zlibOptions\n\n  /** @param {zlib.ZlibOptions} [zlibOptions] */\n  constructor (zlibOptions) {\n    super()\n    this.#zlibOptions = zlibOptions\n  }\n\n  _transform (chunk, encoding, callback) {\n    if (!this._inflateStream) {\n      if (chunk.length === 0) {\n        callback()\n        return\n      }\n      this._inflateStream = (chunk[0] & 0x0F) === 0x08\n        ? zlib.createInflate(this.#zlibOptions)\n        : zlib.createInflateRaw(this.#zlibOptions)\n\n      this._inflateStream.on('data', this.push.bind(this))\n      this._inflateStream.on('end', () => this.push(null))\n      this._inflateStream.on('error', (err) => this.destroy(err))\n    }\n\n    this._inflateStream.write(chunk, encoding, callback)\n  }\n\n  _final (callback) {\n    if (this._inflateStream) {\n      this._inflateStream.end()\n      this._inflateStream = null\n    }\n    callback()\n  }\n}\n\n/**\n * @param {zlib.ZlibOptions} [zlibOptions]\n * @returns {InflateStream}\n */\nfunction createInflate (zlibOptions) {\n  return new InflateStream(zlibOptions)\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-header-extract-mime-type\n * @param {import('./headers').HeadersList} headers\n */\nfunction extractMimeType (headers) {\n  // 1. Let charset be null.\n  let charset = null\n\n  // 2. Let essence be null.\n  let essence = null\n\n  // 3. Let mimeType be null.\n  let mimeType = null\n\n  // 4. Let values be the result of getting, decoding, and splitting `Content-Type` from headers.\n  const values = getDecodeSplit('content-type', headers)\n\n  // 5. If values is null, then return failure.\n  if (values === null) {\n    return 'failure'\n  }\n\n  // 6. For each value of values:\n  for (const value of values) {\n    // 6.1. Let temporaryMimeType be the result of parsing value.\n    const temporaryMimeType = parseMIMEType(value)\n\n    // 6.2. If temporaryMimeType is failure or its essence is \"*/*\", then continue.\n    if (temporaryMimeType === 'failure' || temporaryMimeType.essence === '*/*') {\n      continue\n    }\n\n    // 6.3. Set mimeType to temporaryMimeType.\n    mimeType = temporaryMimeType\n\n    // 6.4. If mimeType\u2019s essence is not essence, then:\n    if (mimeType.essence !== essence) {\n      // 6.4.1. Set charset to null.\n      charset = null\n\n      // 6.4.2. If mimeType\u2019s parameters[\"charset\"] exists, then set charset to\n      //        mimeType\u2019s parameters[\"charset\"].\n      if (mimeType.parameters.has('charset')) {\n        charset = mimeType.parameters.get('charset')\n      }\n\n      // 6.4.3. Set essence to mimeType\u2019s essence.\n      essence = mimeType.essence\n    } else if (!mimeType.parameters.has('charset') && charset !== null) {\n      // 6.5. Otherwise, if mimeType\u2019s parameters[\"charset\"] does not exist, and\n      //      charset is non-null, set mimeType\u2019s parameters[\"charset\"] to charset.\n      mimeType.parameters.set('charset', charset)\n    }\n  }\n\n  // 7. If mimeType is null, then return failure.\n  if (mimeType == null) {\n    return 'failure'\n  }\n\n  // 8. Return mimeType.\n  return mimeType\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#header-value-get-decode-and-split\n * @param {string|null} value\n */\nfunction gettingDecodingSplitting (value) {\n  // 1. Let input be the result of isomorphic decoding value.\n  const input = value\n\n  // 2. Let position be a position variable for input, initially pointing at the start of input.\n  const position = { position: 0 }\n\n  // 3. Let values be a list of strings, initially empty.\n  const values = []\n\n  // 4. Let temporaryValue be the empty string.\n  let temporaryValue = ''\n\n  // 5. While position is not past the end of input:\n  while (position.position < input.length) {\n    // 5.1. Append the result of collecting a sequence of code points that are not U+0022 (\")\n    //      or U+002C (,) from input, given position, to temporaryValue.\n    temporaryValue += collectASequenceOfCodePoints(\n      (char) => char !== '\"' && char !== ',',\n      input,\n      position\n    )\n\n    // 5.2. If position is not past the end of input, then:\n    if (position.position < input.length) {\n      // 5.2.1. If the code point at position within input is U+0022 (\"), then:\n      if (input.charCodeAt(position.position) === 0x22) {\n        // 5.2.1.1. Append the result of collecting an HTTP quoted string from input, given position, to temporaryValue.\n        temporaryValue += collectAnHTTPQuotedString(\n          input,\n          position\n        )\n\n        // 5.2.1.2. If position is not past the end of input, then continue.\n        if (position.position < input.length) {\n          continue\n        }\n      } else {\n        // 5.2.2. Otherwise:\n\n        // 5.2.2.1. Assert: the code point at position within input is U+002C (,).\n        assert(input.charCodeAt(position.position) === 0x2C)\n\n        // 5.2.2.2. Advance position by 1.\n        position.position++\n      }\n    }\n\n    // 5.3. Remove all HTTP tab or space from the start and end of temporaryValue.\n    temporaryValue = removeChars(temporaryValue, true, true, (char) => char === 0x9 || char === 0x20)\n\n    // 5.4. Append temporaryValue to values.\n    values.push(temporaryValue)\n\n    // 5.6. Set temporaryValue to the empty string.\n    temporaryValue = ''\n  }\n\n  // 6. Return values.\n  return values\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-header-list-get-decode-split\n * @param {string} name lowercase header name\n * @param {import('./headers').HeadersList} list\n */\nfunction getDecodeSplit (name, list) {\n  // 1. Let value be the result of getting name from list.\n  const value = list.get(name, true)\n\n  // 2. If value is null, then return null.\n  if (value === null) {\n    return null\n  }\n\n  // 3. Return the result of getting, decoding, and splitting value.\n  return gettingDecodingSplitting(value)\n}\n\nfunction hasAuthenticationEntry (request) {\n  return false\n}\n\n/**\n * @see https://url.spec.whatwg.org/#include-credentials\n * @param {URL} url\n */\nfunction includesCredentials (url) {\n  // A URL includes credentials if its username or password is not the empty string.\n  return !!(url.username || url.password)\n}\n\n/**\n * @see https://html.spec.whatwg.org/multipage/document-sequences.html#traversable-navigable\n * @param {object|string} navigable\n */\nfunction isTraversableNavigable (navigable) {\n  // Returns true only if we have an actual traversable navigable object\n  // that can prompt the user for credentials. In Node.js, this will always\n  // be false since there's no Window object or navigable.\n  return navigable != null && navigable !== 'client' && navigable !== 'no-traversable'\n}\n\nclass EnvironmentSettingsObjectBase {\n  get baseUrl () {\n    return getGlobalOrigin()\n  }\n\n  get origin () {\n    return this.baseUrl?.origin\n  }\n\n  policyContainer = makePolicyContainer()\n}\n\nclass EnvironmentSettingsObject {\n  settingsObject = new EnvironmentSettingsObjectBase()\n}\n\nconst environmentSettingsObject = new EnvironmentSettingsObject()\n\nmodule.exports = {\n  isAborted,\n  isCancelled,\n  isValidEncodedURL,\n  ReadableStreamFrom,\n  tryUpgradeRequestToAPotentiallyTrustworthyURL,\n  clampAndCoarsenConnectionTimingInfo,\n  coarsenedSharedCurrentTime,\n  determineRequestsReferrer,\n  makePolicyContainer,\n  clonePolicyContainer,\n  appendFetchMetadata,\n  appendRequestOriginHeader,\n  TAOCheck,\n  corsCheck,\n  crossOriginResourcePolicyCheck,\n  createOpaqueTimingInfo,\n  setRequestReferrerPolicyOnRedirect,\n  isValidHTTPToken,\n  requestBadPort,\n  requestCurrentURL,\n  responseURL,\n  responseLocationURL,\n  isURLPotentiallyTrustworthy,\n  isValidReasonPhrase,\n  sameOrigin,\n  normalizeMethod,\n  iteratorMixin,\n  createIterator,\n  isValidHeaderName,\n  isValidHeaderValue,\n  isErrorLike,\n  fullyReadBody,\n  readableStreamClose,\n  urlIsLocal,\n  urlHasHttpsScheme,\n  urlIsHttpHttpsScheme,\n  readAllBytes,\n  simpleRangeHeaderValue,\n  buildContentRange,\n  createInflate,\n  extractMimeType,\n  getDecodeSplit,\n  environmentSettingsObject,\n  isOriginIPPotentiallyTrustworthy,\n  hasAuthenticationEntry,\n  includesCredentials,\n  isTraversableNavigable\n}\n", "'use strict'\n\nconst { iteratorMixin } = require('./util')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { webidl } = require('../webidl')\nconst nodeUtil = require('node:util')\n\n// https://xhr.spec.whatwg.org/#formdata\nclass FormData {\n  #state = []\n\n  constructor (form = undefined) {\n    webidl.util.markAsUncloneable(this)\n\n    if (form !== undefined) {\n      throw webidl.errors.conversionFailed({\n        prefix: 'FormData constructor',\n        argument: 'Argument 1',\n        types: ['undefined']\n      })\n    }\n  }\n\n  append (name, value, filename = undefined) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.append'\n    webidl.argumentLengthCheck(arguments, 2, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    if (arguments.length === 3 || webidl.is.Blob(value)) {\n      value = webidl.converters.Blob(value, prefix, 'value')\n\n      if (filename !== undefined) {\n        filename = webidl.converters.USVString(filename)\n      }\n    } else {\n      value = webidl.converters.USVString(value)\n    }\n\n    // 1. Let value be value if given; otherwise blobValue.\n\n    // 2. Let entry be the result of creating an entry with\n    // name, value, and filename if given.\n    const entry = makeEntry(name, value, filename)\n\n    // 3. Append entry to this\u2019s entry list.\n    this.#state.push(entry)\n  }\n\n  delete (name) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.delete'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    // The delete(name) method steps are to remove all entries whose name\n    // is name from this\u2019s entry list.\n    this.#state = this.#state.filter(entry => entry.name !== name)\n  }\n\n  get (name) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.get'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    // 1. If there is no entry whose name is name in this\u2019s entry list,\n    // then return null.\n    const idx = this.#state.findIndex((entry) => entry.name === name)\n    if (idx === -1) {\n      return null\n    }\n\n    // 2. Return the value of the first entry whose name is name from\n    // this\u2019s entry list.\n    return this.#state[idx].value\n  }\n\n  getAll (name) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.getAll'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    // 1. If there is no entry whose name is name in this\u2019s entry list,\n    // then return the empty list.\n    // 2. Return the values of all entries whose name is name, in order,\n    // from this\u2019s entry list.\n    return this.#state\n      .filter((entry) => entry.name === name)\n      .map((entry) => entry.value)\n  }\n\n  has (name) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.has'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    // The has(name) method steps are to return true if there is an entry\n    // whose name is name in this\u2019s entry list; otherwise false.\n    return this.#state.findIndex((entry) => entry.name === name) !== -1\n  }\n\n  set (name, value, filename = undefined) {\n    webidl.brandCheck(this, FormData)\n\n    const prefix = 'FormData.set'\n    webidl.argumentLengthCheck(arguments, 2, prefix)\n\n    name = webidl.converters.USVString(name)\n\n    if (arguments.length === 3 || webidl.is.Blob(value)) {\n      value = webidl.converters.Blob(value, prefix, 'value')\n\n      if (filename !== undefined) {\n        filename = webidl.converters.USVString(filename)\n      }\n    } else {\n      value = webidl.converters.USVString(value)\n    }\n\n    // The set(name, value) and set(name, blobValue, filename) method steps\n    // are:\n\n    // 1. Let value be value if given; otherwise blobValue.\n\n    // 2. Let entry be the result of creating an entry with name, value, and\n    // filename if given.\n    const entry = makeEntry(name, value, filename)\n\n    // 3. If there are entries in this\u2019s entry list whose name is name, then\n    // replace the first such entry with entry and remove the others.\n    const idx = this.#state.findIndex((entry) => entry.name === name)\n    if (idx !== -1) {\n      this.#state = [\n        ...this.#state.slice(0, idx),\n        entry,\n        ...this.#state.slice(idx + 1).filter((entry) => entry.name !== name)\n      ]\n    } else {\n      // 4. Otherwise, append entry to this\u2019s entry list.\n      this.#state.push(entry)\n    }\n  }\n\n  [nodeUtil.inspect.custom] (depth, options) {\n    const state = this.#state.reduce((a, b) => {\n      if (a[b.name]) {\n        if (Array.isArray(a[b.name])) {\n          a[b.name].push(b.value)\n        } else {\n          a[b.name] = [a[b.name], b.value]\n        }\n      } else {\n        a[b.name] = b.value\n      }\n\n      return a\n    }, { __proto__: null })\n\n    options.depth ??= depth\n    options.colors ??= true\n\n    const output = nodeUtil.formatWithOptions(options, state)\n\n    // remove [Object null prototype]\n    return `FormData ${output.slice(output.indexOf(']') + 2)}`\n  }\n\n  /**\n   * @param {FormData} formData\n   */\n  static getFormDataState (formData) {\n    return formData.#state\n  }\n\n  /**\n   * @param {FormData} formData\n   * @param {any[]} newState\n   */\n  static setFormDataState (formData, newState) {\n    formData.#state = newState\n  }\n}\n\nconst { getFormDataState, setFormDataState } = FormData\nReflect.deleteProperty(FormData, 'getFormDataState')\nReflect.deleteProperty(FormData, 'setFormDataState')\n\niteratorMixin('FormData', FormData, getFormDataState, 'name', 'value')\n\nObject.defineProperties(FormData.prototype, {\n  append: kEnumerableProperty,\n  delete: kEnumerableProperty,\n  get: kEnumerableProperty,\n  getAll: kEnumerableProperty,\n  has: kEnumerableProperty,\n  set: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'FormData',\n    configurable: true\n  }\n})\n\n/**\n * @see https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#create-an-entry\n * @param {string} name\n * @param {string|Blob} value\n * @param {?string} filename\n * @returns\n */\nfunction makeEntry (name, value, filename) {\n  // 1. Set name to the result of converting name into a scalar value string.\n  // Note: This operation was done by the webidl converter USVString.\n\n  // 2. If value is a string, then set value to the result of converting\n  //    value into a scalar value string.\n  if (typeof value === 'string') {\n    // Note: This operation was done by the webidl converter USVString.\n  } else {\n    // 3. Otherwise:\n\n    // 1. If value is not a File object, then set value to a new File object,\n    //    representing the same bytes, whose name attribute value is \"blob\"\n    if (!webidl.is.File(value)) {\n      value = new File([value], 'blob', { type: value.type })\n    }\n\n    // 2. If filename is given, then set value to a new File object,\n    //    representing the same bytes, whose name attribute is filename.\n    if (filename !== undefined) {\n      /** @type {FilePropertyBag} */\n      const options = {\n        type: value.type,\n        lastModified: value.lastModified\n      }\n\n      value = new File([value], filename, options)\n    }\n  }\n\n  // 4. Return an entry whose name is name and whose value is value.\n  return { name, value }\n}\n\nwebidl.is.FormData = webidl.util.MakeTypeAssertion(FormData)\n\nmodule.exports = { FormData, makeEntry, setFormDataState }\n", "'use strict'\n\nconst { bufferToLowerCasedHeaderName } = require('../../core/util')\nconst { HTTP_TOKEN_CODEPOINTS } = require('./data-url')\nconst { makeEntry } = require('./formdata')\nconst { webidl } = require('../webidl')\nconst assert = require('node:assert')\nconst { isomorphicDecode } = require('../infra')\n\nconst dd = Buffer.from('--')\nconst decoder = new TextDecoder()\nconst decoderIgnoreBOM = new TextDecoder('utf-8', { ignoreBOM: true })\n\n/**\n * @param {string} chars\n */\nfunction isAsciiString (chars) {\n  for (let i = 0; i < chars.length; ++i) {\n    if ((chars.charCodeAt(i) & ~0x7F) !== 0) {\n      return false\n    }\n  }\n  return true\n}\n\n/**\n * @see https://andreubotella.github.io/multipart-form-data/#multipart-form-data-boundary\n * @param {string} boundary\n */\nfunction validateBoundary (boundary) {\n  const length = boundary.length\n\n  // - its length is greater or equal to 27 and lesser or equal to 70, and\n  if (length < 27 || length > 70) {\n    return false\n  }\n\n  // - it is composed by bytes in the ranges 0x30 to 0x39, 0x41 to 0x5A, or\n  //   0x61 to 0x7A, inclusive (ASCII alphanumeric), or which are 0x27 ('),\n  //   0x2D (-) or 0x5F (_).\n  for (let i = 0; i < length; ++i) {\n    const cp = boundary.charCodeAt(i)\n\n    if (!(\n      (cp >= 0x30 && cp <= 0x39) ||\n      (cp >= 0x41 && cp <= 0x5a) ||\n      (cp >= 0x61 && cp <= 0x7a) ||\n      cp === 0x27 ||\n      cp === 0x2d ||\n      cp === 0x5f\n    )) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @see https://andreubotella.github.io/multipart-form-data/#multipart-form-data-parser\n * @param {Buffer} input\n * @param {ReturnType<import('./data-url')['parseMIMEType']>} mimeType\n */\nfunction multipartFormDataParser (input, mimeType) {\n  // 1. Assert: mimeType\u2019s essence is \"multipart/form-data\".\n  assert(mimeType !== 'failure' && mimeType.essence === 'multipart/form-data')\n\n  const boundaryString = mimeType.parameters.get('boundary')\n\n  // 2. If mimeType\u2019s parameters[\"boundary\"] does not exist, return failure.\n  //    Otherwise, let boundary be the result of UTF-8 decoding mimeType\u2019s\n  //    parameters[\"boundary\"].\n  if (boundaryString === undefined) {\n    throw parsingError('missing boundary in content-type header')\n  }\n\n  const boundary = Buffer.from(`--${boundaryString}`, 'utf8')\n\n  // 3. Let entry list be an empty entry list.\n  const entryList = []\n\n  // 4. Let position be a pointer to a byte in input, initially pointing at\n  //    the first byte.\n  const position = { position: 0 }\n\n  // Note: Per RFC 2046 Section 5.1.1, we must ignore anything before the\n  // first boundary delimiter line (preamble). Search for the first boundary.\n  const firstBoundaryIndex = input.indexOf(boundary)\n\n  if (firstBoundaryIndex === -1) {\n    throw parsingError('no boundary found in multipart body')\n  }\n\n  // Start parsing from the first boundary, ignoring any preamble\n  position.position = firstBoundaryIndex\n\n  // 5. While true:\n  while (true) {\n    // 5.1. If position points to a sequence of bytes starting with 0x2D 0x2D\n    //      (`--`) followed by boundary, advance position by 2 + the length of\n    //      boundary. Otherwise, return failure.\n    // Note: boundary is padded with 2 dashes already, no need to add 2.\n    if (input.subarray(position.position, position.position + boundary.length).equals(boundary)) {\n      position.position += boundary.length\n    } else {\n      throw parsingError('expected a value starting with -- and the boundary')\n    }\n\n    // 5.2. If position points to the sequence of bytes 0x2D 0x2D 0x0D 0x0A\n    //      (`--` followed by CR LF) followed by the end of input, return entry list.\n    // Note: Per RFC 2046 Section 5.1.1, we must ignore anything after the\n    // final boundary delimiter (epilogue). Check for -- or --CRLF and return\n    // regardless of what follows.\n    if (bufferStartsWith(input, dd, position)) {\n      // Found closing boundary delimiter (--), ignore any epilogue\n      return entryList\n    }\n\n    // 5.3. If position does not point to a sequence of bytes starting with 0x0D\n    //      0x0A (CR LF), return failure.\n    if (input[position.position] !== 0x0d || input[position.position + 1] !== 0x0a) {\n      throw parsingError('expected CRLF')\n    }\n\n    // 5.4. Advance position by 2. (This skips past the newline.)\n    position.position += 2\n\n    // 5.5. Let name, filename and contentType be the result of parsing\n    //      multipart/form-data headers on input and position, if the result\n    //      is not failure. Otherwise, return failure.\n    const result = parseMultipartFormDataHeaders(input, position)\n\n    let { name, filename, contentType, encoding } = result\n\n    // 5.6. Advance position by 2. (This skips past the empty line that marks\n    //      the end of the headers.)\n    position.position += 2\n\n    // 5.7. Let body be the empty byte sequence.\n    let body\n\n    // 5.8. Body loop: While position is not past the end of input:\n    // TODO: the steps here are completely wrong\n    {\n      const boundaryIndex = input.indexOf(boundary.subarray(2), position.position)\n\n      if (boundaryIndex === -1) {\n        throw parsingError('expected boundary after body')\n      }\n\n      body = input.subarray(position.position, boundaryIndex - 4)\n\n      position.position += body.length\n\n      // Note: position must be advanced by the body's length before being\n      // decoded, otherwise the parsing will fail.\n      if (encoding === 'base64') {\n        body = Buffer.from(body.toString(), 'base64')\n      }\n    }\n\n    // 5.9. If position does not point to a sequence of bytes starting with\n    //      0x0D 0x0A (CR LF), return failure. Otherwise, advance position by 2.\n    if (input[position.position] !== 0x0d || input[position.position + 1] !== 0x0a) {\n      throw parsingError('expected CRLF')\n    } else {\n      position.position += 2\n    }\n\n    // 5.10. If filename is not null:\n    let value\n\n    if (filename !== null) {\n      // 5.10.1. If contentType is null, set contentType to \"text/plain\".\n      contentType ??= 'text/plain'\n\n      // 5.10.2. If contentType is not an ASCII string, set contentType to the empty string.\n\n      // Note: `buffer.isAscii` can be used at zero-cost, but converting a string to a buffer is a high overhead.\n      // Content-Type is a relatively small string, so it is faster to use `String#charCodeAt`.\n      if (!isAsciiString(contentType)) {\n        contentType = ''\n      }\n\n      // 5.10.3. Let value be a new File object with name filename, type contentType, and body body.\n      value = new File([body], filename, { type: contentType })\n    } else {\n      // 5.11. Otherwise:\n\n      // 5.11.1. Let value be the UTF-8 decoding without BOM of body.\n      value = decoderIgnoreBOM.decode(Buffer.from(body))\n    }\n\n    // 5.12. Assert: name is a scalar value string and value is either a scalar value string or a File object.\n    assert(webidl.is.USVString(name))\n    assert((typeof value === 'string' && webidl.is.USVString(value)) || webidl.is.File(value))\n\n    // 5.13. Create an entry with name and value, and append it to entry list.\n    entryList.push(makeEntry(name, value, filename))\n  }\n}\n\n/**\n * Parses content-disposition attributes (e.g., name=\"value\" or filename*=utf-8''encoded)\n * @param {Buffer} input\n * @param {{ position: number }} position\n * @returns {{ name: string, value: string, extended: boolean } | null}\n */\nfunction parseContentDispositionAttribute (input, position) {\n  // Skip leading semicolon and whitespace\n  if (input[position.position] === 0x3b /* ; */) {\n    position.position++\n  }\n\n  // Skip whitespace\n  collectASequenceOfBytes(\n    (char) => char === 0x20 || char === 0x09,\n    input,\n    position\n  )\n\n  // Collect attribute name (token characters)\n  const attributeName = collectASequenceOfBytes(\n    (char) => isToken(char) && char !== 0x3d && char !== 0x2a, // not = or *\n    input,\n    position\n  )\n\n  if (attributeName.length === 0) {\n    return null\n  }\n\n  const attrNameStr = attributeName.toString('ascii').toLowerCase()\n\n  // Check for extended notation (attribute*)\n  const isExtended = input[position.position] === 0x2a /* * */\n  if (isExtended) {\n    position.position++ // skip *\n  }\n\n  // Expect = sign\n  if (input[position.position] !== 0x3d /* = */) {\n    return null\n  }\n  position.position++ // skip =\n\n  // Skip whitespace\n  collectASequenceOfBytes(\n    (char) => char === 0x20 || char === 0x09,\n    input,\n    position\n  )\n\n  let value\n\n  if (isExtended) {\n    // Extended attribute format: charset'language'encoded-value\n    const headerValue = collectASequenceOfBytes(\n      (char) => char !== 0x20 && char !== 0x0d && char !== 0x0a && char !== 0x3b, // not space, CRLF, or ;\n      input,\n      position\n    )\n\n    // Check for utf-8'' prefix (case insensitive)\n    if (\n      (headerValue[0] !== 0x75 && headerValue[0] !== 0x55) || // u or U\n      (headerValue[1] !== 0x74 && headerValue[1] !== 0x54) || // t or T\n      (headerValue[2] !== 0x66 && headerValue[2] !== 0x46) || // f or F\n      headerValue[3] !== 0x2d || // -\n      headerValue[4] !== 0x38 // 8\n    ) {\n      throw parsingError('unknown encoding, expected utf-8\\'\\'')\n    }\n\n    // Skip utf-8'' and decode the rest\n    value = decodeURIComponent(decoder.decode(headerValue.subarray(7)))\n  } else if (input[position.position] === 0x22 /* \" */) {\n    // Quoted string\n    position.position++ // skip opening quote\n\n    const quotedValue = collectASequenceOfBytes(\n      (char) => char !== 0x0a && char !== 0x0d && char !== 0x22, // not LF, CR, or \"\n      input,\n      position\n    )\n\n    if (input[position.position] !== 0x22) {\n      throw parsingError('Closing quote not found')\n    }\n    position.position++ // skip closing quote\n\n    value = decoder.decode(quotedValue)\n      .replace(/%0A/ig, '\\n')\n      .replace(/%0D/ig, '\\r')\n      .replace(/%22/g, '\"')\n  } else {\n    // Token value (no quotes)\n    const tokenValue = collectASequenceOfBytes(\n      (char) => isToken(char) && char !== 0x3b, // not ;\n      input,\n      position\n    )\n\n    value = decoder.decode(tokenValue)\n  }\n\n  return { name: attrNameStr, value, extended: isExtended }\n}\n\n/**\n * @see https://andreubotella.github.io/multipart-form-data/#parse-multipart-form-data-headers\n * @param {Buffer} input\n * @param {{ position: number }} position\n */\nfunction parseMultipartFormDataHeaders (input, position) {\n  // 1. Let name, filename and contentType be null.\n  let name = null\n  let filename = null\n  let contentType = null\n  let encoding = null\n\n  // 2. While true:\n  while (true) {\n    // 2.1. If position points to a sequence of bytes starting with 0x0D 0x0A (CR LF):\n    if (input[position.position] === 0x0d && input[position.position + 1] === 0x0a) {\n      // 2.1.1. If name is null, return failure.\n      if (name === null) {\n        throw parsingError('header name is null')\n      }\n\n      // 2.1.2. Return name, filename and contentType.\n      return { name, filename, contentType, encoding }\n    }\n\n    // 2.2. Let header name be the result of collecting a sequence of bytes that are\n    //      not 0x0A (LF), 0x0D (CR) or 0x3A (:), given position.\n    let headerName = collectASequenceOfBytes(\n      (char) => char !== 0x0a && char !== 0x0d && char !== 0x3a,\n      input,\n      position\n    )\n\n    // 2.3. Remove any HTTP tab or space bytes from the start or end of header name.\n    headerName = removeChars(headerName, true, true, (char) => char === 0x9 || char === 0x20)\n\n    // 2.4. If header name does not match the field-name token production, return failure.\n    if (!HTTP_TOKEN_CODEPOINTS.test(headerName.toString())) {\n      throw parsingError('header name does not match the field-name token production')\n    }\n\n    // 2.5. If the byte at position is not 0x3A (:), return failure.\n    if (input[position.position] !== 0x3a) {\n      throw parsingError('expected :')\n    }\n\n    // 2.6. Advance position by 1.\n    position.position++\n\n    // 2.7. Collect a sequence of bytes that are HTTP tab or space bytes given position.\n    //      (Do nothing with those bytes.)\n    collectASequenceOfBytes(\n      (char) => char === 0x20 || char === 0x09,\n      input,\n      position\n    )\n\n    // 2.8. Byte-lowercase header name and switch on the result:\n    switch (bufferToLowerCasedHeaderName(headerName)) {\n      case 'content-disposition': {\n        name = filename = null\n        // Track whether filename was set from the extended (RFC 5987) form so\n        // a subsequent legacy `filename` attribute does not override it.\n        let filenameIsExtended = false\n\n        // Collect the disposition type (should be \"form-data\")\n        const dispositionType = collectASequenceOfBytes(\n          (char) => isToken(char),\n          input,\n          position\n        )\n\n        if (dispositionType.toString('ascii').toLowerCase() !== 'form-data') {\n          throw parsingError('expected form-data for content-disposition header')\n        }\n\n        // Parse attributes recursively until CRLF\n        while (\n          position.position < input.length &&\n          (input[position.position] !== 0x0d ||\n          input[position.position + 1] !== 0x0a)\n        ) {\n          const attribute = parseContentDispositionAttribute(input, position)\n\n          if (!attribute) {\n            break\n          }\n\n          if (attribute.name === 'name') {\n            name = attribute.value\n          } else if (attribute.name === 'filename') {\n            // Per RFC 5987 \u00A74.1, when both legacy and extended forms of the\n            // same parameter are present, the extended (filename*) form takes\n            // precedence regardless of the order they appear in.\n            if (attribute.extended) {\n              filename = attribute.value\n              filenameIsExtended = true\n            } else if (!filenameIsExtended) {\n              filename = attribute.value\n            }\n          }\n        }\n\n        if (name === null) {\n          throw parsingError('name attribute is required in content-disposition header')\n        }\n\n        break\n      }\n      case 'content-type': {\n        // 1. Let header value be the result of collecting a sequence of bytes that are\n        //    not 0x0A (LF) or 0x0D (CR), given position.\n        let headerValue = collectASequenceOfBytes(\n          (char) => char !== 0x0a && char !== 0x0d,\n          input,\n          position\n        )\n\n        // 2. Remove any HTTP tab or space bytes from the end of header value.\n        headerValue = removeChars(headerValue, false, true, (char) => char === 0x9 || char === 0x20)\n\n        // 3. Set contentType to the isomorphic decoding of header value.\n        contentType = isomorphicDecode(headerValue)\n\n        break\n      }\n      case 'content-transfer-encoding': {\n        let headerValue = collectASequenceOfBytes(\n          (char) => char !== 0x0a && char !== 0x0d,\n          input,\n          position\n        )\n\n        headerValue = removeChars(headerValue, false, true, (char) => char === 0x9 || char === 0x20)\n\n        encoding = isomorphicDecode(headerValue)\n\n        break\n      }\n      default: {\n        // Collect a sequence of bytes that are not 0x0A (LF) or 0x0D (CR), given position.\n        // (Do nothing with those bytes.)\n        collectASequenceOfBytes(\n          (char) => char !== 0x0a && char !== 0x0d,\n          input,\n          position\n        )\n      }\n    }\n\n    // 2.9. If position does not point to a sequence of bytes starting with 0x0D 0x0A\n    //      (CR LF), return failure. Otherwise, advance position by 2 (past the newline).\n    if (input[position.position] !== 0x0d || input[position.position + 1] !== 0x0a) {\n      throw parsingError('expected CRLF')\n    } else {\n      position.position += 2\n    }\n  }\n}\n\n/**\n * @param {(char: number) => boolean} condition\n * @param {Buffer} input\n * @param {{ position: number }} position\n */\nfunction collectASequenceOfBytes (condition, input, position) {\n  let start = position.position\n\n  while (start < input.length && condition(input[start])) {\n    ++start\n  }\n\n  return input.subarray(position.position, (position.position = start))\n}\n\n/**\n * @param {Buffer} buf\n * @param {boolean} leading\n * @param {boolean} trailing\n * @param {(charCode: number) => boolean} predicate\n * @returns {Buffer}\n */\nfunction removeChars (buf, leading, trailing, predicate) {\n  let lead = 0\n  let trail = buf.length - 1\n\n  if (leading) {\n    while (lead < buf.length && predicate(buf[lead])) lead++\n  }\n\n  if (trailing) {\n    while (trail > 0 && predicate(buf[trail])) trail--\n  }\n\n  return lead === 0 && trail === buf.length - 1 ? buf : buf.subarray(lead, trail + 1)\n}\n\n/**\n * Checks if {@param buffer} starts with {@param start}\n * @param {Buffer} buffer\n * @param {Buffer} start\n * @param {{ position: number }} position\n */\nfunction bufferStartsWith (buffer, start, position) {\n  if (buffer.length < start.length) {\n    return false\n  }\n\n  for (let i = 0; i < start.length; i++) {\n    if (start[i] !== buffer[position.position + i]) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction parsingError (cause) {\n  return new TypeError('Failed to parse body as FormData.', { cause: new TypeError(cause) })\n}\n\n/**\n * CTL            = <any US-ASCII control character\n *                  (octets 0 - 31) and DEL (127)>\n * @param {number} char\n */\nfunction isCTL (char) {\n  return char <= 0x1f || char === 0x7f\n}\n\n/**\n * tspecials :=  \"(\" / \")\" / \"<\" / \">\" / \"@\" /\n *                \",\" / \";\" / \":\" / \"\\\" / <\">\n *                \"/\" / \"[\" / \"]\" / \"?\" / \"=\"\n *                ; Must be in quoted-string,\n *                ; to use within parameter values\n * @param {number} char\n */\nfunction isTSpecial (char) {\n  return (\n    char === 0x28 || // (\n    char === 0x29 || // )\n    char === 0x3c || // <\n    char === 0x3e || // >\n    char === 0x40 || // @\n    char === 0x2c || // ,\n    char === 0x3b || // ;\n    char === 0x3a || // :\n    char === 0x5c || // \\\n    char === 0x22 || // \"\n    char === 0x2f || // /\n    char === 0x5b || // [\n    char === 0x5d || // ]\n    char === 0x3f || // ?\n    char === 0x3d    // +\n  )\n}\n\n/**\n * token := 1*<any (US-ASCII) CHAR except SPACE, CTLs,\n *          or tspecials>\n * @param {number} char\n */\nfunction isToken (char) {\n  return (\n    char <= 0x7f &&  // ascii\n    char !== 0x20 && // space\n    char !== 0x09 &&\n    !isCTL(char) &&\n    !isTSpecial(char)\n  )\n}\n\nmodule.exports = {\n  multipartFormDataParser,\n  validateBoundary\n}\n", "'use strict'\n\n/**\n * @template {*} T\n * @typedef {Object} DeferredPromise\n * @property {Promise<T>} promise\n * @property {(value?: T) => void} resolve\n * @property {(reason?: any) => void} reject\n */\n\n/**\n * @template {*} T\n * @returns {DeferredPromise<T>} An object containing a promise and its resolve/reject methods.\n */\nfunction createDeferredPromise () {\n  let res\n  let rej\n  const promise = new Promise((resolve, reject) => {\n    res = resolve\n    rej = reject\n  })\n\n  return { promise, resolve: res, reject: rej }\n}\n\nmodule.exports = {\n  createDeferredPromise\n}\n", "'use strict'\n\nconst util = require('../../core/util')\nconst {\n  ReadableStreamFrom,\n  readableStreamClose,\n  fullyReadBody,\n  extractMimeType\n} = require('./util')\nconst { FormData, setFormDataState } = require('./formdata')\nconst { webidl } = require('../webidl')\nconst assert = require('node:assert')\nconst { isErrored, isDisturbed } = require('node:stream')\nconst { isUint8Array } = require('node:util/types')\nconst { serializeAMimeType } = require('./data-url')\nconst { multipartFormDataParser } = require('./formdata-parser')\nconst { createDeferredPromise } = require('../../util/promise')\nconst { parseJSONFromBytes } = require('../infra')\nconst { utf8DecodeBytes } = require('../../encoding')\nconst { runtimeFeatures } = require('../../util/runtime-features.js')\n\nconst random = runtimeFeatures.has('crypto')\n  ? require('node:crypto').randomInt\n  : (max) => Math.floor(Math.random() * max)\n\nconst textEncoder = new TextEncoder()\nfunction noop () {}\n\nconst streamRegistry = new FinalizationRegistry((weakRef) => {\n  const stream = weakRef.deref()\n  if (stream && !stream.locked && !isDisturbed(stream) && !isErrored(stream)) {\n    stream.cancel('Response object has been garbage collected').catch(noop)\n  }\n})\n\n/**\n * Extract a body with type from a byte sequence or BodyInit object\n *\n * @param {import('../../../types').BodyInit} object - The BodyInit object to extract from\n * @param {boolean} [keepalive=false] - If true, indicates that the body\n * @returns {[{stream: ReadableStream, source: any, length: number | null}, string | null]} - Returns a tuple containing the body and its type\n *\n * @see https://fetch.spec.whatwg.org/#concept-bodyinit-extract\n */\nfunction extractBody (object, keepalive = false) {\n  // 1. Let stream be null.\n  let stream = null\n  let controller = null\n\n  // 2. If object is a ReadableStream object, then set stream to object.\n  if (webidl.is.ReadableStream(object)) {\n    stream = object\n  } else if (webidl.is.Blob(object)) {\n    // 3. Otherwise, if object is a Blob object, set stream to the\n    //    result of running object\u2019s get stream.\n    stream = object.stream()\n  } else {\n    // 4. Otherwise, set stream to a new ReadableStream object, and set\n    //    up stream with byte reading support.\n    stream = new ReadableStream({\n      pull () {},\n      start (c) {\n        controller = c\n      },\n      cancel () {},\n      type: 'bytes'\n    })\n  }\n\n  // 5. Assert: stream is a ReadableStream object.\n  assert(webidl.is.ReadableStream(stream))\n\n  // 6. Let action be null.\n  let action = null\n\n  // 7. Let source be null.\n  let source = null\n\n  // 8. Let length be null.\n  let length = null\n\n  // 9. Let type be null.\n  let type = null\n\n  // 10. Switch on object:\n  if (typeof object === 'string') {\n    // Set source to the UTF-8 encoding of object.\n    // Note: setting source to a Uint8Array here breaks some mocking assumptions.\n    source = object\n\n    // Set type to `text/plain;charset=UTF-8`.\n    type = 'text/plain;charset=UTF-8'\n  } else if (webidl.is.URLSearchParams(object)) {\n    // URLSearchParams\n\n    // spec says to run application/x-www-form-urlencoded on body.list\n    // this is implemented in Node.js as apart of an URLSearchParams instance toString method\n    // See: https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/lib/internal/url.js#L490\n    // and https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/lib/internal/url.js#L1100\n\n    // Set source to the result of running the application/x-www-form-urlencoded serializer with object\u2019s list.\n    source = object.toString()\n\n    // Set type to `application/x-www-form-urlencoded;charset=UTF-8`.\n    type = 'application/x-www-form-urlencoded;charset=UTF-8'\n  } else if (webidl.is.BufferSource(object)) {\n    // Set source to a copy of the bytes held by object.\n    source = webidl.util.getCopyOfBytesHeldByBufferSource(object)\n  } else if (webidl.is.FormData(object)) {\n    const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, '0')}`\n    const prefix = `--${boundary}\\r\\nContent-Disposition: form-data`\n\n    /*! formdata-polyfill. MIT License. Jimmy W\u00E4rting <https://jimmy.warting.se/opensource> */\n    const formdataEscape = (str) =>\n      str.replace(/\\n/g, '%0A').replace(/\\r/g, '%0D').replace(/\"/g, '%22')\n    const normalizeLinefeeds = (value) => value.replace(/\\r?\\n|\\r/g, '\\r\\n')\n\n    // Set action to this step: run the multipart/form-data\n    // encoding algorithm, with object\u2019s entry list and UTF-8.\n    // - This ensures that the body is immutable and can't be changed afterwords\n    // - That the content-length is calculated in advance.\n    // - And that all parts are pre-encoded and ready to be sent.\n\n    const blobParts = []\n    const rn = new Uint8Array([13, 10]) // '\\r\\n'\n    length = 0\n    let hasUnknownSizeValue = false\n\n    for (const [name, value] of object) {\n      if (typeof value === 'string') {\n        const chunk = textEncoder.encode(prefix +\n          `; name=\"${formdataEscape(normalizeLinefeeds(name))}\"` +\n          `\\r\\n\\r\\n${normalizeLinefeeds(value)}\\r\\n`)\n        blobParts.push(chunk)\n        length += chunk.byteLength\n      } else {\n        const chunk = textEncoder.encode(`${prefix}; name=\"${formdataEscape(normalizeLinefeeds(name))}\"` +\n          (value.name ? `; filename=\"${formdataEscape(value.name)}\"` : '') + '\\r\\n' +\n          `Content-Type: ${\n            value.type || 'application/octet-stream'\n          }\\r\\n\\r\\n`)\n        blobParts.push(chunk, value, rn)\n        if (typeof value.size === 'number') {\n          length += chunk.byteLength + value.size + rn.byteLength\n        } else {\n          hasUnknownSizeValue = true\n        }\n      }\n    }\n\n    // CRLF is appended to the body to function with legacy servers and match other implementations.\n    // https://github.com/curl/curl/blob/3434c6b46e682452973972e8313613dfa58cd690/lib/mime.c#L1029-L1030\n    // https://github.com/form-data/form-data/issues/63\n    const chunk = textEncoder.encode(`--${boundary}--\\r\\n`)\n    blobParts.push(chunk)\n    length += chunk.byteLength\n    if (hasUnknownSizeValue) {\n      length = null\n    }\n\n    // Set source to object.\n    source = object\n\n    action = async function * () {\n      for (const part of blobParts) {\n        if (part.stream) {\n          yield * part.stream()\n        } else {\n          yield part\n        }\n      }\n    }\n\n    // Set type to `multipart/form-data; boundary=`,\n    // followed by the multipart/form-data boundary string generated\n    // by the multipart/form-data encoding algorithm.\n    type = `multipart/form-data; boundary=${boundary}`\n  } else if (webidl.is.Blob(object)) {\n    // Blob\n\n    // Set source to object.\n    source = object\n\n    // Set length to object\u2019s size.\n    length = object.size\n\n    // If object\u2019s type attribute is not the empty byte sequence, set\n    // type to its value.\n    if (object.type) {\n      type = object.type\n    }\n  } else if (typeof object[Symbol.asyncIterator] === 'function') {\n    // If keepalive is true, then throw a TypeError.\n    if (keepalive) {\n      throw new TypeError('keepalive')\n    }\n\n    // If object is disturbed or locked, then throw a TypeError.\n    if (util.isDisturbed(object) || object.locked) {\n      throw new TypeError(\n        'Response body object should not be disturbed or locked'\n      )\n    }\n\n    stream =\n      webidl.is.ReadableStream(object) ? object : ReadableStreamFrom(object)\n  }\n\n  // 11. If source is a byte sequence, then set action to a\n  // step that returns source and length to source\u2019s length.\n  if (typeof source === 'string' || isUint8Array(source)) {\n    action = () => {\n      length = typeof source === 'string' ? Buffer.byteLength(source) : source.length\n      return source\n    }\n  }\n\n  // 12. If action is non-null, then run these steps in parallel:\n  if (action != null) {\n    ;(async () => {\n      // 1. Run action.\n      const result = action()\n\n      // 2. Whenever one or more bytes are available and stream is not errored,\n      //    enqueue the result of creating a Uint8Array from the available bytes into stream.\n      const iterator = result?.[Symbol.asyncIterator]?.()\n      if (iterator) {\n        for await (const bytes of iterator) {\n          if (isErrored(stream)) break\n          if (bytes.length) {\n            controller.enqueue(new Uint8Array(bytes))\n          }\n        }\n      } else if (result?.length && !isErrored(stream)) {\n        controller.enqueue(typeof result === 'string' ? textEncoder.encode(result) : new Uint8Array(result))\n      }\n\n      // 3. When running action is done, close stream.\n      queueMicrotask(() => readableStreamClose(controller))\n    })()\n  }\n\n  // 13. Let body be a body whose stream is stream, source is source,\n  // and length is length.\n  const body = { stream, source, length }\n\n  // 14. Return (body, type).\n  return [body, type]\n}\n\n/**\n * @typedef {object} ExtractBodyResult\n * @property {ReadableStream<Uint8Array<ArrayBuffer>>} stream - The ReadableStream containing the body data\n * @property {any} source - The original source of the body data\n * @property {number | null} length - The length of the body data, or null\n */\n\n/**\n * Safely extract a body with type from a byte sequence or BodyInit object.\n *\n * @param {import('../../../types').BodyInit} object - The BodyInit object to extract from\n * @param {boolean} [keepalive=false] - If true, indicates that the body\n * @returns {[ExtractBodyResult, string | null]} - Returns a tuple containing the body and its type\n *\n * @see https://fetch.spec.whatwg.org/#bodyinit-safely-extract\n */\nfunction safelyExtractBody (object, keepalive = false) {\n  // To safely extract a body and a `Content-Type` value from\n  // a byte sequence or BodyInit object object, run these steps:\n\n  // 1. If object is a ReadableStream object, then:\n  if (webidl.is.ReadableStream(object)) {\n    // Assert: object is neither disturbed nor locked.\n    assert(!util.isDisturbed(object), 'The body has already been consumed.')\n    assert(!object.locked, 'The stream is locked.')\n  }\n\n  // 2. Return the results of extracting object.\n  return extractBody(object, keepalive)\n}\n\nfunction cloneBody (body) {\n  // To clone a body body, run these steps:\n\n  // https://fetch.spec.whatwg.org/#concept-body-clone\n\n  // 1. Let \u00AB out1, out2 \u00BB be the result of teeing body\u2019s stream.\n  const { 0: out1, 1: out2 } = body.stream.tee()\n\n  // 2. Set body\u2019s stream to out1.\n  body.stream = out1\n\n  // 3. Return a body whose stream is out2 and other members are copied from body.\n  return {\n    stream: out2,\n    length: body.length,\n    source: body.source\n  }\n}\n\nfunction bodyMixinMethods (instance, getInternalState) {\n  const methods = {\n    blob () {\n      // The blob() method steps are to return the result of\n      // running consume body with this and the following step\n      // given a byte sequence bytes: return a Blob whose\n      // contents are bytes and whose type attribute is this\u2019s\n      // MIME type.\n      return consumeBody(this, (bytes) => {\n        let mimeType = bodyMimeType(getInternalState(this))\n\n        if (mimeType === null) {\n          mimeType = ''\n        } else if (mimeType) {\n          mimeType = serializeAMimeType(mimeType)\n        }\n\n        // Return a Blob whose contents are bytes and type attribute\n        // is mimeType.\n        return new Blob([bytes], { type: mimeType })\n      }, instance, getInternalState)\n    },\n\n    arrayBuffer () {\n      // The arrayBuffer() method steps are to return the result\n      // of running consume body with this and the following step\n      // given a byte sequence bytes: return a new ArrayBuffer\n      // whose contents are bytes.\n      return consumeBody(this, (bytes) => {\n        return new Uint8Array(bytes).buffer\n      }, instance, getInternalState)\n    },\n\n    text () {\n      // The text() method steps are to return the result of running\n      // consume body with this and UTF-8 decode.\n      return consumeBody(this, utf8DecodeBytes, instance, getInternalState)\n    },\n\n    json () {\n      // The json() method steps are to return the result of running\n      // consume body with this and parse JSON from bytes.\n      return consumeBody(this, parseJSONFromBytes, instance, getInternalState)\n    },\n\n    formData () {\n      // The formData() method steps are to return the result of running\n      // consume body with this and the following step given a byte sequence bytes:\n      return consumeBody(this, (value) => {\n        // 1. Let mimeType be the result of get the MIME type with this.\n        const mimeType = bodyMimeType(getInternalState(this))\n\n        // 2. If mimeType is non-null, then switch on mimeType\u2019s essence and run\n        //    the corresponding steps:\n        if (mimeType !== null) {\n          switch (mimeType.essence) {\n            case 'multipart/form-data': {\n              // 1. ... [long step]\n              // 2. If that fails for some reason, then throw a TypeError.\n              const parsed = multipartFormDataParser(value, mimeType)\n\n              // 3. Return a new FormData object, appending each entry,\n              //    resulting from the parsing operation, to its entry list.\n              const fd = new FormData()\n              setFormDataState(fd, parsed)\n\n              return fd\n            }\n            case 'application/x-www-form-urlencoded': {\n              // 1. Let entries be the result of parsing bytes.\n              const entries = new URLSearchParams(value.toString())\n\n              // 2. If entries is failure, then throw a TypeError.\n\n              // 3. Return a new FormData object whose entry list is entries.\n              const fd = new FormData()\n\n              for (const [name, value] of entries) {\n                fd.append(name, value)\n              }\n\n              return fd\n            }\n          }\n        }\n\n        // 3. Throw a TypeError.\n        throw new TypeError(\n          'Content-Type was not one of \"multipart/form-data\" or \"application/x-www-form-urlencoded\".'\n        )\n      }, instance, getInternalState)\n    },\n\n    bytes () {\n      // The bytes() method steps are to return the result of running consume body\n      // with this and the following step given a byte sequence bytes: return the\n      // result of creating a Uint8Array from bytes in this\u2019s relevant realm.\n      return consumeBody(this, (bytes) => {\n        return new Uint8Array(bytes)\n      }, instance, getInternalState)\n    }\n  }\n\n  return methods\n}\n\nfunction mixinBody (prototype, getInternalState) {\n  Object.assign(prototype.prototype, bodyMixinMethods(prototype, getInternalState))\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-body-consume-body\n * @param {any} object internal state\n * @param {(value: unknown) => unknown} convertBytesToJSValue\n * @param {any} instance\n * @param {(target: any) => any} getInternalState\n */\nfunction consumeBody (object, convertBytesToJSValue, instance, getInternalState) {\n  try {\n    webidl.brandCheck(object, instance)\n  } catch (e) {\n    return Promise.reject(e)\n  }\n\n  object = getInternalState(object)\n\n  // 1. If object is unusable, then return a promise rejected\n  //    with a TypeError.\n  if (bodyUnusable(object)) {\n    return Promise.reject(new TypeError('Body is unusable: Body has already been read'))\n  }\n\n  // 2. Let promise be a new promise.\n  const promise = createDeferredPromise()\n\n  // 3. Let errorSteps given error be to reject promise with error.\n  const errorSteps = promise.reject\n\n  // 4. Let successSteps given a byte sequence data be to resolve\n  //    promise with the result of running convertBytesToJSValue\n  //    with data. If that threw an exception, then run errorSteps\n  //    with that exception.\n  const successSteps = (data) => {\n    try {\n      promise.resolve(convertBytesToJSValue(data))\n    } catch (e) {\n      errorSteps(e)\n    }\n  }\n\n  // 5. If object\u2019s body is null, then run successSteps with an\n  //    empty byte sequence.\n  if (object.body == null) {\n    successSteps(Buffer.allocUnsafe(0))\n    return promise.promise\n  }\n\n  // 6. Otherwise, fully read object\u2019s body given successSteps,\n  //    errorSteps, and object\u2019s relevant global object.\n  fullyReadBody(object.body, successSteps, errorSteps)\n\n  // 7. Return promise.\n  return promise.promise\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#body-unusable\n * @param {any} object internal state\n */\nfunction bodyUnusable (object) {\n  const body = object.body\n\n  // An object including the Body interface mixin is\n  // said to be unusable if its body is non-null and\n  // its body\u2019s stream is disturbed or locked.\n  return body != null && (body.stream.locked || util.isDisturbed(body.stream))\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-body-mime-type\n * @param {any} requestOrResponse internal state\n */\nfunction bodyMimeType (requestOrResponse) {\n  // 1. Let headers be null.\n  // 2. If requestOrResponse is a Request object, then set headers to requestOrResponse\u2019s request\u2019s header list.\n  // 3. Otherwise, set headers to requestOrResponse\u2019s response\u2019s header list.\n  /** @type {import('./headers').HeadersList} */\n  const headers = requestOrResponse.headersList\n\n  // 4. Let mimeType be the result of extracting a MIME type from headers.\n  const mimeType = extractMimeType(headers)\n\n  // 5. If mimeType is failure, then return null.\n  if (mimeType === 'failure') {\n    return null\n  }\n\n  // 6. Return mimeType.\n  return mimeType\n}\n\nmodule.exports = {\n  extractBody,\n  safelyExtractBody,\n  cloneBody,\n  mixinBody,\n  streamRegistry,\n  bodyUnusable\n}\n", "'use strict'\n\n/* global WebAssembly */\n\nconst assert = require('node:assert')\nconst util = require('../core/util.js')\nconst { channels } = require('../core/diagnostics.js')\nconst timers = require('../util/timers.js')\nconst {\n  RequestContentLengthMismatchError,\n  ResponseContentLengthMismatchError,\n  RequestAbortedError,\n  InvalidArgumentError,\n  HeadersTimeoutError,\n  HeadersOverflowError,\n  SocketError,\n  InformationalError,\n  BodyTimeoutError,\n  HTTPParserError,\n  ResponseExceededMaxSizeError\n} = require('../core/errors.js')\nconst {\n  kUrl,\n  kReset,\n  kClient,\n  kParser,\n  kBlocking,\n  kRunning,\n  kPending,\n  kSize,\n  kWriting,\n  kQueue,\n  kNoRef,\n  kKeepAliveDefaultTimeout,\n  kHostHeader,\n  kPendingIdx,\n  kRunningIdx,\n  kError,\n  kPipelining,\n  kSocket,\n  kKeepAliveTimeoutValue,\n  kMaxHeadersSize,\n  kKeepAliveMaxTimeout,\n  kKeepAliveTimeoutThreshold,\n  kHeadersTimeout,\n  kBodyTimeout,\n  kStrictContentLength,\n  kMaxRequests,\n  kCounter,\n  kMaxResponseSize,\n  kOnError,\n  kResume,\n  kHTTPContext,\n  kClosed\n} = require('../core/symbols.js')\n\nconst constants = require('../llhttp/constants.js')\nconst EMPTY_BUF = Buffer.alloc(0)\nconst FastBuffer = Buffer[Symbol.species]\nconst removeAllListeners = util.removeAllListeners\nconst kIdleSocketValidation = Symbol('kIdleSocketValidation')\nconst kIdleSocketValidationTimeout = Symbol('kIdleSocketValidationTimeout')\nconst kSocketUsed = Symbol('kSocketUsed')\n\nlet extractBody\n\nfunction lazyllhttp () {\n  const llhttpWasmData = process.env.JEST_WORKER_ID ? require('../llhttp/llhttp-wasm.js') : undefined\n\n  let mod\n\n  // We disable wasm SIMD on ppc64 as it seems to be broken on Power 9 architectures.\n  let useWasmSIMD = process.arch !== 'ppc64'\n  // The Env Variable UNDICI_NO_WASM_SIMD allows explicitly overriding the default behavior\n  if (process.env.UNDICI_NO_WASM_SIMD === '1') {\n    useWasmSIMD = false\n  } else if (process.env.UNDICI_NO_WASM_SIMD === '0') {\n    useWasmSIMD = true\n  }\n\n  if (useWasmSIMD) {\n    try {\n      mod = new WebAssembly.Module(require('../llhttp/llhttp_simd-wasm.js'))\n    } catch {\n    }\n  }\n\n  if (!mod) {\n    // We could check if the error was caused by the simd option not\n    // being enabled, but the occurring of this other error\n    // * https://github.com/emscripten-core/emscripten/issues/11495\n    // got me to remove that check to avoid breaking Node 12.\n    mod = new WebAssembly.Module(llhttpWasmData || require('../llhttp/llhttp-wasm.js'))\n  }\n\n  return new WebAssembly.Instance(mod, {\n    env: {\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_url: (p, at, len) => {\n        return 0\n      },\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_status: (p, at, len) => {\n        assert(currentParser.ptr === p)\n        const start = at - currentBufferPtr + currentBufferRef.byteOffset\n        return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len))\n      },\n      /**\n       * @param {number} p\n       * @returns {number}\n       */\n      wasm_on_message_begin: (p) => {\n        assert(currentParser.ptr === p)\n        return currentParser.onMessageBegin()\n      },\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_header_field: (p, at, len) => {\n        assert(currentParser.ptr === p)\n        const start = at - currentBufferPtr + currentBufferRef.byteOffset\n        return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len))\n      },\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_header_value: (p, at, len) => {\n        assert(currentParser.ptr === p)\n        const start = at - currentBufferPtr + currentBufferRef.byteOffset\n        return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len))\n      },\n      /**\n       * @param {number} p\n       * @param {number} statusCode\n       * @param {0|1} upgrade\n       * @param {0|1} shouldKeepAlive\n       * @returns {number}\n       */\n      wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => {\n        assert(currentParser.ptr === p)\n        return currentParser.onHeadersComplete(statusCode, upgrade === 1, shouldKeepAlive === 1)\n      },\n      /**\n       * @param {number} p\n       * @param {number} at\n       * @param {number} len\n       * @returns {number}\n       */\n      wasm_on_body: (p, at, len) => {\n        assert(currentParser.ptr === p)\n        const start = at - currentBufferPtr + currentBufferRef.byteOffset\n        return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len))\n      },\n      /**\n       * @param {number} p\n       * @returns {number}\n       */\n      wasm_on_message_complete: (p) => {\n        assert(currentParser.ptr === p)\n        return currentParser.onMessageComplete()\n      }\n\n    }\n  })\n}\n\nlet llhttpInstance = null\n\n/**\n * @type {Parser|null}\n */\nlet currentParser = null\nlet currentBufferRef = null\n/**\n * @type {number}\n */\nlet currentBufferSize = 0\nlet currentBufferPtr = null\n\nconst USE_NATIVE_TIMER = 0\nconst USE_FAST_TIMER = 1\n\n// Use fast timers for headers and body to take eventual event loop\n// latency into account.\nconst TIMEOUT_HEADERS = 2 | USE_FAST_TIMER\nconst TIMEOUT_BODY = 4 | USE_FAST_TIMER\n\n// Use native timers to ignore event loop latency for keep-alive\n// handling.\nconst TIMEOUT_KEEP_ALIVE = 8 | USE_NATIVE_TIMER\n\nclass Parser {\n  /**\n     * @param {import('./client.js')} client\n     * @param {import('net').Socket} socket\n     * @param {*} llhttp\n     */\n  constructor (client, socket, { exports }) {\n    this.llhttp = exports\n    this.ptr = this.llhttp.llhttp_alloc(constants.TYPE.RESPONSE)\n    this.client = client\n    /**\n     * @type {import('net').Socket}\n     */\n    this.socket = socket\n    this.timeout = null\n    this.timeoutWeakRef = new WeakRef(this)\n    this.timeoutValue = null\n    this.timeoutType = null\n    this.statusCode = 0\n    this.statusText = ''\n    this.upgrade = false\n    this.headers = []\n    this.headersSize = 0\n    this.headersMaxSize = client[kMaxHeadersSize]\n    this.shouldKeepAlive = false\n    this.paused = false\n    this.resume = this.resume.bind(this)\n\n    this.bytesRead = 0\n\n    this.keepAlive = ''\n    this.contentLength = ''\n    this.connection = ''\n    this.maxResponseSize = client[kMaxResponseSize]\n  }\n\n  setTimeout (delay, type) {\n    // If the existing timer and the new timer are of different timer type\n    // (fast or native) or have different delay, we need to clear the existing\n    // timer and set a new one.\n    if (\n      delay !== this.timeoutValue ||\n      (type & USE_FAST_TIMER) ^ (this.timeoutType & USE_FAST_TIMER)\n    ) {\n      // If a timeout is already set, clear it with clearTimeout of the fast\n      // timer implementation, as it can clear fast and native timers.\n      if (this.timeout) {\n        timers.clearTimeout(this.timeout)\n        this.timeout = null\n      }\n\n      if (delay) {\n        if (type & USE_FAST_TIMER) {\n          this.timeout = timers.setFastTimeout(onParserTimeout, delay, this.timeoutWeakRef)\n        } else {\n          this.timeout = setTimeout(onParserTimeout, delay, this.timeoutWeakRef)\n          this.timeout?.unref()\n        }\n      }\n\n      this.timeoutValue = delay\n    } else if (this.timeout) {\n      if (this.timeout.refresh) {\n        this.timeout.refresh()\n      }\n    }\n\n    this.timeoutType = type\n  }\n\n  resume () {\n    if (this.socket.destroyed || !this.paused) {\n      return\n    }\n\n    assert(this.ptr != null)\n    assert(currentParser === null)\n\n    this.llhttp.llhttp_resume(this.ptr)\n\n    assert(this.timeoutType === TIMEOUT_BODY)\n    if (this.timeout) {\n      if (this.timeout.refresh) {\n        this.timeout.refresh()\n      }\n    }\n\n    this.paused = false\n    this.execute(this.socket.read() || EMPTY_BUF) // Flush parser.\n    this.readMore()\n  }\n\n  readMore () {\n    while (!this.paused && this.ptr) {\n      const chunk = this.socket.read()\n      if (chunk === null) {\n        break\n      }\n      this.execute(chunk)\n    }\n  }\n\n  /**\n   * @param {Buffer} chunk\n   */\n  execute (chunk) {\n    assert(currentParser === null)\n    assert(this.ptr != null)\n    assert(!this.paused)\n\n    const { socket, llhttp } = this\n\n    // Allocate a new buffer if the current buffer is too small.\n    if (chunk.length > currentBufferSize) {\n      if (currentBufferPtr) {\n        llhttp.free(currentBufferPtr)\n      }\n      // Allocate a buffer that is a multiple of 4096 bytes.\n      currentBufferSize = Math.ceil(chunk.length / 4096) * 4096\n      currentBufferPtr = llhttp.malloc(currentBufferSize)\n    }\n\n    new Uint8Array(llhttp.memory.buffer, currentBufferPtr, currentBufferSize).set(chunk)\n\n    // Call `execute` on the wasm parser.\n    // We pass the `llhttp_parser` pointer address, the pointer address of buffer view data,\n    // and finally the length of bytes to parse.\n    // The return value is an error code or `constants.ERROR.OK`.\n    try {\n      let ret\n\n      try {\n        currentBufferRef = chunk\n        currentParser = this\n        ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, chunk.length)\n      } finally {\n        currentParser = null\n        currentBufferRef = null\n      }\n\n      if (ret !== constants.ERROR.OK) {\n        const data = chunk.subarray(llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr)\n\n        if (ret === constants.ERROR.PAUSED_UPGRADE) {\n          this.onUpgrade(data)\n        } else if (ret === constants.ERROR.PAUSED) {\n          this.paused = true\n          socket.unshift(data)\n        } else {\n          throw this.createError(ret, data)\n        }\n      }\n    } catch (err) {\n      util.destroy(socket, err)\n    }\n  }\n\n  finish () {\n    assert(currentParser === null)\n    assert(this.ptr != null)\n    assert(!this.paused)\n\n    const { llhttp } = this\n\n    let ret\n\n    try {\n      currentParser = this\n      ret = llhttp.llhttp_finish(this.ptr)\n    } finally {\n      currentParser = null\n    }\n\n    if (ret === constants.ERROR.OK) {\n      return null\n    }\n\n    if (ret === constants.ERROR.PAUSED || ret === constants.ERROR.PAUSED_UPGRADE) {\n      this.paused = true\n      return null\n    }\n\n    return this.createError(ret, EMPTY_BUF)\n  }\n\n  createError (ret, data) {\n    const { llhttp, contentLength, bytesRead } = this\n\n    if (contentLength && bytesRead !== parseInt(contentLength, 10)) {\n      return new ResponseContentLengthMismatchError()\n    }\n\n    const ptr = llhttp.llhttp_get_error_reason(this.ptr)\n    let message = ''\n    if (ptr) {\n      const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0)\n      message =\n        'Response does not match the HTTP/1.1 protocol (' +\n        Buffer.from(llhttp.memory.buffer, ptr, len).toString() +\n        ')'\n    }\n\n    return new HTTPParserError(message, constants.ERROR[ret], data)\n  }\n\n  destroy () {\n    assert(currentParser === null)\n    assert(this.ptr != null)\n\n    this.llhttp.llhttp_free(this.ptr)\n    this.ptr = null\n\n    this.timeout && timers.clearTimeout(this.timeout)\n    this.timeout = null\n    this.timeoutValue = null\n    this.timeoutType = null\n\n    this.paused = false\n  }\n\n  /**\n   * @param {Buffer} buf\n   * @returns {0}\n   */\n  onStatus (buf) {\n    this.statusText = buf.toString()\n    return 0\n  }\n\n  /**\n   * @returns {0|-1}\n   */\n  onMessageBegin () {\n    const { socket, client } = this\n\n    if (socket.destroyed) {\n      return -1\n    }\n\n    if (client[kRunning] === 0) {\n      util.destroy(socket, new SocketError('bad response', util.getSocketInfo(socket)))\n      return -1\n    }\n\n    const request = client[kQueue][client[kRunningIdx]]\n    if (!request) {\n      return -1\n    }\n    request.onResponseStarted()\n\n    return 0\n  }\n\n  /**\n   * @param {Buffer} buf\n   * @returns {number}\n   */\n  onHeaderField (buf) {\n    const len = this.headers.length\n\n    if ((len & 1) === 0) {\n      this.headers.push(buf)\n    } else {\n      this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf])\n    }\n\n    this.trackHeader(buf.length)\n\n    return 0\n  }\n\n  /**\n   * @param {Buffer} buf\n   * @returns {number}\n   */\n  onHeaderValue (buf) {\n    let len = this.headers.length\n\n    if ((len & 1) === 1) {\n      this.headers.push(buf)\n      len += 1\n    } else {\n      this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf])\n    }\n\n    const key = this.headers[len - 2]\n    if (key.length === 10) {\n      const headerName = util.bufferToLowerCasedHeaderName(key)\n      if (headerName === 'keep-alive') {\n        this.keepAlive += buf.toString()\n      } else if (headerName === 'connection') {\n        this.connection += buf.toString()\n      }\n    } else if (key.length === 14 && util.bufferToLowerCasedHeaderName(key) === 'content-length') {\n      this.contentLength += buf.toString()\n    }\n\n    this.trackHeader(buf.length)\n\n    return 0\n  }\n\n  /**\n   * @param {number} len\n   */\n  trackHeader (len) {\n    this.headersSize += len\n    if (this.headersSize >= this.headersMaxSize) {\n      util.destroy(this.socket, new HeadersOverflowError())\n    }\n  }\n\n  /**\n   * @param {Buffer} head\n   */\n  onUpgrade (head) {\n    const { upgrade, client, socket, headers, statusCode } = this\n\n    assert(upgrade)\n    assert(client[kSocket] === socket)\n    assert(!socket.destroyed)\n    assert(!this.paused)\n    assert((headers.length & 1) === 0)\n\n    const request = client[kQueue][client[kRunningIdx]]\n    assert(request)\n    assert(request.upgrade || request.method === 'CONNECT')\n\n    this.statusCode = 0\n    this.statusText = ''\n    this.shouldKeepAlive = false\n\n    this.headers = []\n    this.headersSize = 0\n\n    socket.unshift(head)\n\n    socket[kParser].destroy()\n    socket[kParser] = null\n\n    socket[kClient] = null\n    socket[kError] = null\n\n    removeAllListeners(socket)\n\n    client[kSocket] = null\n    client[kHTTPContext] = null // TODO (fix): This is hacky...\n    client[kQueue][client[kRunningIdx]++] = null\n    client.emit('disconnect', client[kUrl], [client], new InformationalError('upgrade'))\n\n    try {\n      request.onUpgrade(statusCode, headers, socket)\n    } catch (err) {\n      util.destroy(socket, err)\n    }\n\n    client[kResume]()\n  }\n\n  /**\n   * @param {number} statusCode\n   * @param {boolean} upgrade\n   * @param {boolean} shouldKeepAlive\n   * @returns {number}\n   */\n  onHeadersComplete (statusCode, upgrade, shouldKeepAlive) {\n    const { client, socket, headers, statusText } = this\n\n    if (socket.destroyed) {\n      return -1\n    }\n\n    if (client[kRunning] === 0) {\n      util.destroy(socket, new SocketError('bad response', util.getSocketInfo(socket)))\n      return -1\n    }\n\n    const request = client[kQueue][client[kRunningIdx]]\n\n    if (!request) {\n      return -1\n    }\n\n    assert(!this.upgrade)\n    assert(this.statusCode < 200)\n\n    if (statusCode === 100) {\n      util.destroy(socket, new SocketError('bad response', util.getSocketInfo(socket)))\n      return -1\n    }\n\n    /* this can only happen if server is misbehaving */\n    if (upgrade && !request.upgrade) {\n      util.destroy(socket, new SocketError('bad upgrade', util.getSocketInfo(socket)))\n      return -1\n    }\n\n    assert(this.timeoutType === TIMEOUT_HEADERS)\n\n    this.statusCode = statusCode\n    this.shouldKeepAlive = (\n      shouldKeepAlive ||\n      // Override llhttp value which does not allow keepAlive for HEAD.\n      (request.method === 'HEAD' && !socket[kReset] && this.connection.toLowerCase() === 'keep-alive')\n    )\n\n    if (this.statusCode >= 200) {\n      const bodyTimeout = request.bodyTimeout != null\n        ? request.bodyTimeout\n        : client[kBodyTimeout]\n      this.setTimeout(bodyTimeout, TIMEOUT_BODY)\n    } else if (this.timeout) {\n      if (this.timeout.refresh) {\n        this.timeout.refresh()\n      }\n    }\n\n    if (request.method === 'CONNECT') {\n      assert(client[kRunning] === 1)\n      this.upgrade = true\n      return 2\n    }\n\n    if (upgrade) {\n      assert(client[kRunning] === 1)\n      this.upgrade = true\n      return 2\n    }\n\n    assert((this.headers.length & 1) === 0)\n    this.headers = []\n    this.headersSize = 0\n\n    if (this.shouldKeepAlive && client[kPipelining]) {\n      const keepAliveTimeout = this.keepAlive ? util.parseKeepAliveTimeout(this.keepAlive) : null\n\n      if (keepAliveTimeout != null) {\n        const timeout = Math.min(\n          keepAliveTimeout - client[kKeepAliveTimeoutThreshold],\n          client[kKeepAliveMaxTimeout]\n        )\n        if (timeout <= 0) {\n          socket[kReset] = true\n        } else {\n          client[kKeepAliveTimeoutValue] = timeout\n        }\n      } else {\n        client[kKeepAliveTimeoutValue] = client[kKeepAliveDefaultTimeout]\n      }\n    } else {\n      // Stop more requests from being dispatched.\n      socket[kReset] = true\n    }\n\n    const pause = request.onHeaders(statusCode, headers, this.resume, statusText) === false\n\n    if (request.aborted) {\n      return -1\n    }\n\n    if (request.method === 'HEAD') {\n      return 1\n    }\n\n    if (statusCode < 200) {\n      return 1\n    }\n\n    if (socket[kBlocking]) {\n      socket[kBlocking] = false\n      client[kResume]()\n    }\n\n    return pause ? constants.ERROR.PAUSED : 0\n  }\n\n  /**\n   * @param {Buffer} buf\n   * @returns {number}\n   */\n  onBody (buf) {\n    const { client, socket, statusCode, maxResponseSize } = this\n\n    if (socket.destroyed) {\n      return -1\n    }\n\n    const request = client[kQueue][client[kRunningIdx]]\n    assert(request)\n\n    assert(this.timeoutType === TIMEOUT_BODY)\n    if (this.timeout) {\n      if (this.timeout.refresh) {\n        this.timeout.refresh()\n      }\n    }\n\n    assert(statusCode >= 200)\n\n    if (maxResponseSize > -1 && this.bytesRead + buf.length > maxResponseSize) {\n      util.destroy(socket, new ResponseExceededMaxSizeError())\n      return -1\n    }\n\n    this.bytesRead += buf.length\n\n    if (request.onData(buf) === false) {\n      return constants.ERROR.PAUSED\n    }\n\n    return 0\n  }\n\n  /**\n   * @returns {number}\n   */\n  onMessageComplete () {\n    const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this\n\n    if (socket.destroyed && (!statusCode || shouldKeepAlive)) {\n      return -1\n    }\n\n    if (upgrade) {\n      return 0\n    }\n\n    assert(statusCode >= 100)\n    assert((this.headers.length & 1) === 0)\n\n    const request = client[kQueue][client[kRunningIdx]]\n    assert(request)\n\n    this.statusCode = 0\n    this.statusText = ''\n    this.bytesRead = 0\n    this.contentLength = ''\n    this.keepAlive = ''\n    this.connection = ''\n\n    this.headers = []\n    this.headersSize = 0\n\n    if (statusCode < 200) {\n      return 0\n    }\n\n    if (request.method !== 'HEAD' && contentLength && bytesRead !== parseInt(contentLength, 10)) {\n      util.destroy(socket, new ResponseContentLengthMismatchError())\n      return -1\n    }\n\n    request.onComplete(headers)\n\n    client[kQueue][client[kRunningIdx]++] = null\n    socket[kSocketUsed] = client[kPending] === 0\n\n    if (socket[kWriting]) {\n      assert(client[kRunning] === 0)\n      // Response completed before request.\n      util.destroy(socket, new InformationalError('reset'))\n      return constants.ERROR.PAUSED\n    } else if (!shouldKeepAlive) {\n      util.destroy(socket, new InformationalError('reset'))\n      return constants.ERROR.PAUSED\n    } else if (socket[kReset] && client[kRunning] === 0) {\n      // Destroy socket once all requests have completed.\n      // The request at the tail of the pipeline is the one\n      // that requested reset and no further requests should\n      // have been queued since then.\n      util.destroy(socket, new InformationalError('reset'))\n      return constants.ERROR.PAUSED\n    } else if (client[kPipelining] == null || client[kPipelining] === 1) {\n      // We must wait a full event loop cycle to reuse this socket to make sure\n      // that non-spec compliant servers are not closing the connection even if they\n      // said they won't.\n      setImmediate(client[kResume])\n    } else {\n      client[kResume]()\n    }\n\n    return 0\n  }\n}\n\nfunction onParserTimeout (parserWeakRef) {\n  const parser = parserWeakRef.deref()\n  if (!parser) {\n    return\n  }\n\n  const { socket, timeoutType, client, paused } = parser\n\n  if (timeoutType === TIMEOUT_HEADERS) {\n    if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) {\n      assert(!paused, 'cannot be paused while waiting for headers')\n      util.destroy(socket, new HeadersTimeoutError())\n    }\n  } else if (timeoutType === TIMEOUT_BODY) {\n    if (!paused) {\n      util.destroy(socket, new BodyTimeoutError())\n    }\n  } else if (timeoutType === TIMEOUT_KEEP_ALIVE) {\n    assert(client[kRunning] === 0 && client[kKeepAliveTimeoutValue])\n    util.destroy(socket, new InformationalError('socket idle timeout'))\n  }\n}\n\n/**\n * @param {import ('./client.js')} client\n * @param {import('net').Socket} socket\n * @returns\n */\nfunction connectH1 (client, socket) {\n  client[kSocket] = socket\n\n  if (!llhttpInstance) {\n    llhttpInstance = lazyllhttp()\n  }\n\n  if (socket.errored) {\n    throw socket.errored\n  }\n\n  if (socket.destroyed) {\n    throw new SocketError('destroyed')\n  }\n\n  socket[kNoRef] = false\n  socket[kWriting] = false\n  socket[kReset] = false\n  socket[kBlocking] = false\n  socket[kIdleSocketValidation] = 0\n  socket[kIdleSocketValidationTimeout] = null\n  socket[kSocketUsed] = false\n  socket[kParser] = new Parser(client, socket, llhttpInstance)\n\n  util.addListener(socket, 'error', onHttpSocketError)\n  util.addListener(socket, 'readable', onHttpSocketReadable)\n  util.addListener(socket, 'end', onHttpSocketEnd)\n  util.addListener(socket, 'close', onHttpSocketClose)\n\n  socket[kClosed] = false\n  socket.on('close', onSocketClose)\n\n  return {\n    version: 'h1',\n    defaultPipelining: 1,\n    write (request) {\n      return writeH1(client, request)\n    },\n    resume () {\n      resumeH1(client)\n    },\n    /**\n     * @param {Error|undefined} err\n     * @param {() => void} callback\n     */\n    destroy (err, callback) {\n      if (socket[kClosed]) {\n        queueMicrotask(callback)\n      } else {\n        socket.on('close', callback)\n        socket.destroy(err)\n      }\n    },\n    /**\n     * @returns {boolean}\n     */\n    get destroyed () {\n      return socket.destroyed\n    },\n    /**\n     * @param {import('../core/request.js')} request\n     * @returns {boolean}\n     */\n    busy (request) {\n      if (socket[kWriting] || socket[kReset] || socket[kBlocking] || socket[kIdleSocketValidation] === 1) {\n        return true\n      }\n\n      if (request) {\n        if (client[kRunning] > 0 && !request.idempotent) {\n          // Non-idempotent request cannot be retried.\n          // Ensure that no other requests are inflight and\n          // could cause failure.\n          return true\n        }\n\n        if (client[kRunning] > 0 && (request.upgrade || request.method === 'CONNECT')) {\n          // Don't dispatch an upgrade until all preceding requests have completed.\n          // A misbehaving server might upgrade the connection before all pipelined\n          // request has completed.\n          return true\n        }\n\n        if (client[kRunning] > 0 && util.bodyLength(request.body) !== 0 &&\n          (util.isStream(request.body) || util.isAsyncIterable(request.body) || util.isFormDataLike(request.body))) {\n          // Request with stream or iterator body can error while other requests\n          // are inflight and indirectly error those as well.\n          // Ensure this doesn't happen by waiting for inflight\n          // to complete before dispatching.\n\n          // Request with stream or iterator body cannot be retried.\n          // Ensure that no other requests are inflight and\n          // could cause failure.\n          return true\n        }\n      }\n\n      return false\n    }\n  }\n}\n\nfunction onHttpSocketError (err) {\n  assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')\n\n  const parser = this[kParser]\n\n  // On Mac OS, we get an ECONNRESET even if there is a full body to be forwarded\n  // to the user.\n  if (err.code === 'ECONNRESET' && parser.statusCode && !parser.shouldKeepAlive) {\n    const parserErr = parser.finish()\n    if (parserErr) {\n      this[kError] = parserErr\n      this[kClient][kOnError](parserErr)\n    }\n    return\n  }\n\n  this[kError] = err\n\n  this[kClient][kOnError](err)\n}\n\nfunction onHttpSocketReadable () {\n  this[kParser]?.readMore()\n}\n\nfunction onHttpSocketEnd () {\n  const parser = this[kParser]\n\n  if (parser.statusCode && !parser.shouldKeepAlive) {\n    const parserErr = parser.finish()\n    if (parserErr) {\n      util.destroy(this, parserErr)\n    }\n    return\n  }\n\n  util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this)))\n}\n\nfunction onHttpSocketClose () {\n  const parser = this[kParser]\n\n  clearIdleSocketValidation(this)\n\n  if (parser) {\n    if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) {\n      this[kError] = parser.finish() || this[kError]\n    }\n\n    this[kParser].destroy()\n    this[kParser] = null\n  }\n\n  const err = this[kError] || new SocketError('closed', util.getSocketInfo(this))\n\n  const client = this[kClient]\n\n  client[kSocket] = null\n  client[kHTTPContext] = null // TODO (fix): This is hacky...\n\n  if (client.destroyed) {\n    assert(client[kPending] === 0)\n\n    // Fail entire queue.\n    const requests = client[kQueue].splice(client[kRunningIdx])\n    for (let i = 0; i < requests.length; i++) {\n      const request = requests[i]\n      util.errorRequest(client, request, err)\n    }\n  } else if (client[kRunning] > 0 && err.code !== 'UND_ERR_INFO') {\n    // Fail head of pipeline.\n    const request = client[kQueue][client[kRunningIdx]]\n    client[kQueue][client[kRunningIdx]++] = null\n\n    util.errorRequest(client, request, err)\n  }\n\n  client[kPendingIdx] = client[kRunningIdx]\n\n  assert(client[kRunning] === 0)\n\n  client.emit('disconnect', client[kUrl], [client], err)\n\n  client[kResume]()\n}\n\nfunction onSocketClose () {\n  this[kClosed] = true\n}\n\nfunction clearIdleSocketValidation (socket) {\n  if (socket[kIdleSocketValidationTimeout]) {\n    clearImmediate(socket[kIdleSocketValidationTimeout])\n    socket[kIdleSocketValidationTimeout] = null\n  }\n\n  socket[kIdleSocketValidation] = 0\n}\n\nfunction scheduleIdleSocketValidation (client, socket) {\n  socket[kIdleSocketValidation] = 1\n  // Yield to the check phase (after poll) so unsolicited bytes / FIN / RST\n  // already pending on this idle keep-alive socket are processed before the\n  // next request is written (GHSA-35p6-xmwp-9g52).\n  //\n  // setTimeout(0) pays Node's ~1ms timer floor on every sequential reuse\n  // (#5493). setImmediate avoids that, but an *unref'd* Immediate lets poll\n  // block for ~500ms when the event loop is otherwise idle (#5600 / #5606).\n  // A ref'd Immediate both keeps the pending request alive and makes poll\n  // return immediately \u2014 the hybrid those issues asked for.\n  socket[kIdleSocketValidationTimeout] = setImmediate(() => {\n    socket[kIdleSocketValidationTimeout] = null\n    socket[kIdleSocketValidation] = 2\n\n    if (client[kSocket] === socket && !socket.destroyed) {\n      client[kResume]()\n    }\n  })\n}\n\n/**\n * @param {import('./client.js')} client\n */\nfunction resumeH1 (client) {\n  const socket = client[kSocket]\n\n  if (socket && !socket.destroyed) {\n    if (client[kSize] === 0) {\n      if (!socket[kNoRef] && socket.unref) {\n        socket.unref()\n        socket[kNoRef] = true\n      }\n    } else if (socket[kNoRef] && socket.ref) {\n      socket.ref()\n      socket[kNoRef] = false\n    }\n\n    if (client[kRunning] === 0 && client[kPending] > 0 && socket[kSocketUsed]) {\n      if (socket[kIdleSocketValidation] === 0) {\n        scheduleIdleSocketValidation(client, socket)\n        socket[kParser].readMore()\n        if (socket.destroyed) {\n          return\n        }\n        return\n      }\n\n      if (socket[kIdleSocketValidation] === 1) {\n        socket[kParser].readMore()\n        if (socket.destroyed) {\n          return\n        }\n        return\n      }\n    }\n\n    if (client[kRunning] === 0) {\n      socket[kParser].readMore()\n      if (socket.destroyed) {\n        return\n      }\n    }\n\n    if (client[kSize] === 0) {\n      if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) {\n        socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE)\n      }\n    } else if (client[kRunning] > 0 && socket[kParser].statusCode < 200) {\n      if (socket[kParser].timeoutType !== TIMEOUT_HEADERS) {\n        const request = client[kQueue][client[kRunningIdx]]\n        const headersTimeout = request.headersTimeout != null\n          ? request.headersTimeout\n          : client[kHeadersTimeout]\n        socket[kParser].setTimeout(headersTimeout, TIMEOUT_HEADERS)\n      }\n    }\n  }\n}\n\n// https://www.rfc-editor.org/rfc/rfc7230#section-3.3.2\nfunction shouldSendContentLength (method) {\n  return method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS' && method !== 'TRACE' && method !== 'CONNECT'\n}\n\n/**\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @returns\n */\nfunction writeH1 (client, request) {\n  const { method, path, host, upgrade, blocking, reset } = request\n\n  let { body, headers, contentLength } = request\n\n  // https://tools.ietf.org/html/rfc7231#section-4.3.1\n  // https://tools.ietf.org/html/rfc7231#section-4.3.2\n  // https://tools.ietf.org/html/rfc7231#section-4.3.5\n\n  // Sending a payload body on a request that does not\n  // expect it can cause undefined behavior on some\n  // servers and corrupt connection state. Do not\n  // re-use the connection for further requests.\n\n  const expectsPayload = (\n    method === 'PUT' ||\n    method === 'POST' ||\n    method === 'PATCH' ||\n    method === 'QUERY' ||\n    method === 'PROPFIND' ||\n    method === 'PROPPATCH'\n  )\n\n  if (util.isFormDataLike(body)) {\n    if (!extractBody) {\n      extractBody = require('../web/fetch/body.js').extractBody\n    }\n\n    const [bodyStream, contentType] = extractBody(body)\n    if (request.contentType == null) {\n      headers.push('content-type', contentType)\n    }\n    body = bodyStream.stream\n    contentLength = bodyStream.length\n  } else if (util.isBlobLike(body) && request.contentType == null) {\n    const contentType = body.type\n    if (contentType) {\n      const contentTypeValue = `${contentType}`\n      if (!util.isValidHeaderValue(contentTypeValue)) {\n        util.errorRequest(client, request, new InvalidArgumentError('invalid content-type header'))\n        return false\n      }\n      headers.push('content-type', contentTypeValue)\n    }\n  }\n\n  if (body && typeof body.read === 'function') {\n    // Try to read EOF in order to get length.\n    body.read(0)\n  }\n\n  const bodyLength = util.bodyLength(body)\n\n  contentLength = bodyLength ?? contentLength\n\n  if (contentLength === null) {\n    contentLength = request.contentLength\n  }\n\n  if (contentLength === 0 && !expectsPayload) {\n    // https://tools.ietf.org/html/rfc7230#section-3.3.2\n    // A user agent SHOULD NOT send a Content-Length header field when\n    // the request message does not contain a payload body and the method\n    // semantics do not anticipate such a body.\n\n    contentLength = null\n  }\n\n  // https://github.com/nodejs/undici/issues/2046\n  // A user agent may send a Content-Length header with 0 value, this should be allowed.\n  if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength !== null && request.contentLength !== contentLength) {\n    if (client[kStrictContentLength]) {\n      util.errorRequest(client, request, new RequestContentLengthMismatchError())\n      return false\n    }\n\n    process.emitWarning(new RequestContentLengthMismatchError())\n  }\n\n  const socket = client[kSocket]\n  clearIdleSocketValidation(socket)\n\n  /**\n   * @param {Error} [err]\n   * @returns {void}\n   */\n  const abort = (err) => {\n    if (request.aborted || request.completed) {\n      return\n    }\n\n    util.errorRequest(client, request, err || new RequestAbortedError())\n\n    util.destroy(body)\n    util.destroy(socket, new InformationalError('aborted'))\n  }\n\n  try {\n    request.onConnect(abort)\n  } catch (err) {\n    util.errorRequest(client, request, err)\n  }\n\n  if (request.aborted) {\n    return false\n  }\n\n  if (method === 'HEAD') {\n    // https://github.com/mcollina/undici/issues/258\n    // Close after a HEAD request to interop with misbehaving servers\n    // that may send a body in the response.\n\n    socket[kReset] = true\n  }\n\n  if (upgrade || method === 'CONNECT') {\n    // On CONNECT or upgrade, block pipeline from dispatching further\n    // requests on this connection.\n\n    socket[kReset] = true\n  }\n\n  if (reset != null) {\n    socket[kReset] = reset\n  }\n\n  if (client[kMaxRequests] && socket[kCounter]++ >= client[kMaxRequests]) {\n    socket[kReset] = true\n  }\n\n  if (blocking) {\n    socket[kBlocking] = true\n  }\n\n  if (socket.setTypeOfService) {\n    socket.setTypeOfService(request.typeOfService)\n  }\n\n  let header = `${method} ${path} HTTP/1.1\\r\\n`\n\n  if (typeof host === 'string') {\n    header += `host: ${host}\\r\\n`\n  } else {\n    header += client[kHostHeader]\n  }\n\n  if (upgrade) {\n    header += `connection: upgrade\\r\\nupgrade: ${upgrade}\\r\\n`\n  } else if (client[kPipelining] && !socket[kReset]) {\n    header += 'connection: keep-alive\\r\\n'\n  } else {\n    header += 'connection: close\\r\\n'\n  }\n\n  if (Array.isArray(headers)) {\n    for (let n = 0; n < headers.length; n += 2) {\n      const key = headers[n + 0]\n      const val = headers[n + 1]\n\n      if (Array.isArray(val)) {\n        for (let i = 0; i < val.length; i++) {\n          header += `${key}: ${val[i]}\\r\\n`\n        }\n      } else {\n        header += `${key}: ${val}\\r\\n`\n      }\n    }\n  }\n\n  if (channels.sendHeaders.hasSubscribers) {\n    channels.sendHeaders.publish({ request, headers: header, socket })\n  }\n\n  if (!body || bodyLength === 0) {\n    writeBuffer(abort, null, client, request, socket, contentLength, header, expectsPayload)\n  } else if (util.isBuffer(body)) {\n    writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload)\n  } else if (util.isBlobLike(body)) {\n    if (typeof body.stream === 'function') {\n      writeIterable(abort, body.stream(), client, request, socket, contentLength, header, expectsPayload)\n    } else {\n      writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload)\n    }\n  } else if (util.isStream(body)) {\n    writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload)\n  } else if (util.isIterable(body)) {\n    writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload)\n  } else {\n    assert(false)\n  }\n\n  return true\n}\n\n/**\n * @param {AbortCallback} abort\n * @param {import('stream').Stream} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n */\nfunction writeStream (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n  assert(contentLength !== 0 || client[kRunning] === 0, 'stream body cannot be pipelined')\n\n  let finished = false\n\n  const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header })\n\n  /**\n   * @param {Buffer} chunk\n   * @returns {void}\n   */\n  const onData = function (chunk) {\n    if (finished) {\n      return\n    }\n\n    try {\n      if (!writer.write(chunk) && this.pause) {\n        this.pause()\n      }\n    } catch (err) {\n      util.destroy(this, err)\n    }\n  }\n\n  /**\n   * @returns {void}\n   */\n  const onDrain = function () {\n    if (finished) {\n      return\n    }\n\n    if (body.resume) {\n      body.resume()\n    }\n  }\n\n  /**\n   * @returns {void}\n   */\n  const onClose = function () {\n    // 'close' might be emitted *before* 'error' for\n    // broken streams. Wait a tick to avoid this case.\n    queueMicrotask(() => {\n      // It's only safe to remove 'error' listener after\n      // 'close'.\n      body.removeListener('error', onFinished)\n    })\n\n    if (!finished) {\n      const err = new RequestAbortedError()\n      queueMicrotask(() => onFinished(err))\n    }\n  }\n\n  /**\n   * @param {Error} [err]\n   * @returns\n   */\n  const onFinished = function (err) {\n    if (finished) {\n      return\n    }\n\n    finished = true\n\n    assert(socket.destroyed || (socket[kWriting] && client[kRunning] <= 1))\n\n    socket\n      .off('drain', onDrain)\n      .off('error', onFinished)\n\n    body\n      .removeListener('data', onData)\n      .removeListener('end', onFinished)\n      .removeListener('close', onClose)\n\n    if (!err) {\n      try {\n        writer.end()\n      } catch (er) {\n        err = er\n      }\n    }\n\n    writer.destroy(err)\n\n    if (err && (err.code !== 'UND_ERR_INFO' || err.message !== 'reset')) {\n      util.destroy(body, err)\n    } else {\n      util.destroy(body)\n    }\n  }\n\n  body\n    .on('data', onData)\n    .on('end', onFinished)\n    .on('error', onFinished)\n    .on('close', onClose)\n\n  if (body.resume) {\n    body.resume()\n  }\n\n  socket\n    .on('drain', onDrain)\n    .on('error', onFinished)\n\n  if (body.errorEmitted ?? body.errored) {\n    setImmediate(onFinished, body.errored)\n  } else if (body.endEmitted ?? body.readableEnded) {\n    setImmediate(onFinished, null)\n  }\n\n  if (body.closeEmitted ?? body.closed) {\n    setImmediate(onClose)\n  }\n}\n\n/**\n * @typedef AbortCallback\n * @type {Function}\n * @param {Error} [err]\n * @returns {void}\n */\n\n/**\n * @param {AbortCallback} abort\n * @param {Uint8Array|null} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n * @returns {void}\n */\nfunction writeBuffer (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n  try {\n    if (!body) {\n      if (contentLength === 0) {\n        socket.write(`${header}content-length: 0\\r\\n\\r\\n`, 'latin1')\n      } else {\n        assert(contentLength === null, 'no body must not have content length')\n        socket.write(`${header}\\r\\n`, 'latin1')\n      }\n    } else if (util.isBuffer(body)) {\n      assert(contentLength === body.byteLength, 'buffer body must have content length')\n\n      socket.cork()\n      socket.write(`${header}content-length: ${contentLength}\\r\\n\\r\\n`, 'latin1')\n      socket.write(body)\n      socket.uncork()\n      request.onBodySent(body)\n\n      if (!expectsPayload && request.reset !== false) {\n        socket[kReset] = true\n      }\n    }\n    request.onRequestSent()\n\n    client[kResume]()\n  } catch (err) {\n    abort(err)\n  }\n}\n\n/**\n * @param {AbortCallback} abort\n * @param {Blob} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n * @returns {Promise<void>}\n */\nasync function writeBlob (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n  assert(contentLength === body.size, 'blob body must have content length')\n\n  try {\n    if (contentLength != null && contentLength !== body.size) {\n      throw new RequestContentLengthMismatchError()\n    }\n\n    const buffer = Buffer.from(await body.arrayBuffer())\n\n    socket.cork()\n    socket.write(`${header}content-length: ${contentLength}\\r\\n\\r\\n`, 'latin1')\n    socket.write(buffer)\n    socket.uncork()\n\n    request.onBodySent(buffer)\n    request.onRequestSent()\n\n    if (!expectsPayload && request.reset !== false) {\n      socket[kReset] = true\n    }\n\n    client[kResume]()\n  } catch (err) {\n    abort(err)\n  }\n}\n\n/**\n * @param {AbortCallback} abort\n * @param {Iterable} body\n * @param {import('./client.js')} client\n * @param {import('../core/request.js')} request\n * @param {import('net').Socket} socket\n * @param {number} contentLength\n * @param {string} header\n * @param {boolean} expectsPayload\n * @returns {Promise<void>}\n */\nasync function writeIterable (abort, body, client, request, socket, contentLength, header, expectsPayload) {\n  assert(contentLength !== 0 || client[kRunning] === 0, 'iterator body cannot be pipelined')\n\n  let callback = null\n  function onDrain () {\n    if (callback) {\n      const cb = callback\n      callback = null\n      cb()\n    }\n  }\n\n  const waitForDrain = () => new Promise((resolve, reject) => {\n    assert(callback === null)\n\n    if (socket[kError]) {\n      reject(socket[kError])\n    } else {\n      callback = resolve\n    }\n  })\n\n  socket\n    .on('close', onDrain)\n    .on('drain', onDrain)\n\n  const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header })\n  try {\n    // It's up to the user to somehow abort the async iterable.\n    for await (const chunk of body) {\n      if (socket[kError]) {\n        throw socket[kError]\n      }\n\n      if (!writer.write(chunk)) {\n        await waitForDrain()\n      }\n    }\n\n    writer.end()\n  } catch (err) {\n    writer.destroy(err)\n  } finally {\n    socket\n      .off('close', onDrain)\n      .off('drain', onDrain)\n  }\n}\n\nclass AsyncWriter {\n  /**\n   *\n   * @param {object} arg\n   * @param {AbortCallback} arg.abort\n   * @param {import('net').Socket} arg.socket\n   * @param {import('../core/request.js')} arg.request\n   * @param {number} arg.contentLength\n   * @param {import('./client.js')} arg.client\n   * @param {boolean} arg.expectsPayload\n   * @param {string} arg.header\n   */\n  constructor ({ abort, socket, request, contentLength, client, expectsPayload, header }) {\n    this.socket = socket\n    this.request = request\n    this.contentLength = contentLength\n    this.client = client\n    this.bytesWritten = 0\n    this.expectsPayload = expectsPayload\n    this.header = header\n    this.abort = abort\n\n    socket[kWriting] = true\n  }\n\n  /**\n   * @param {Buffer} chunk\n   * @returns\n   */\n  write (chunk) {\n    const { socket, request, contentLength, client, bytesWritten, expectsPayload, header } = this\n\n    if (socket[kError]) {\n      throw socket[kError]\n    }\n\n    if (socket.destroyed) {\n      return false\n    }\n\n    const len = Buffer.byteLength(chunk)\n    if (!len) {\n      return true\n    }\n\n    // We should defer writing chunks.\n    if (contentLength !== null && bytesWritten + len > contentLength) {\n      if (client[kStrictContentLength]) {\n        throw new RequestContentLengthMismatchError()\n      }\n\n      process.emitWarning(new RequestContentLengthMismatchError())\n    }\n\n    socket.cork()\n\n    if (bytesWritten === 0) {\n      if (!expectsPayload && request.reset !== false) {\n        socket[kReset] = true\n      }\n\n      if (contentLength === null) {\n        socket.write(`${header}transfer-encoding: chunked\\r\\n`, 'latin1')\n      } else {\n        socket.write(`${header}content-length: ${contentLength}\\r\\n\\r\\n`, 'latin1')\n      }\n    }\n\n    if (contentLength === null) {\n      socket.write(`\\r\\n${len.toString(16)}\\r\\n`, 'latin1')\n    }\n\n    this.bytesWritten += len\n\n    const ret = socket.write(chunk)\n\n    socket.uncork()\n\n    request.onBodySent(chunk)\n\n    if (!ret) {\n      if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {\n        if (socket[kParser].timeout.refresh) {\n          socket[kParser].timeout.refresh()\n        }\n      }\n    }\n\n    return ret\n  }\n\n  /**\n   * @returns {void}\n   */\n  end () {\n    const { socket, contentLength, client, bytesWritten, expectsPayload, header, request } = this\n    request.onRequestSent()\n\n    socket[kWriting] = false\n\n    if (socket[kError]) {\n      throw socket[kError]\n    }\n\n    if (socket.destroyed) {\n      return\n    }\n\n    if (bytesWritten === 0) {\n      if (expectsPayload) {\n        // https://tools.ietf.org/html/rfc7230#section-3.3.2\n        // A user agent SHOULD send a Content-Length in a request message when\n        // no Transfer-Encoding is sent and the request method defines a meaning\n        // for an enclosed payload body.\n\n        socket.write(`${header}content-length: 0\\r\\n\\r\\n`, 'latin1')\n      } else {\n        socket.write(`${header}\\r\\n`, 'latin1')\n      }\n    } else if (contentLength === null) {\n      socket.write('\\r\\n0\\r\\n\\r\\n', 'latin1')\n    }\n\n    if (contentLength !== null && bytesWritten !== contentLength) {\n      if (client[kStrictContentLength]) {\n        throw new RequestContentLengthMismatchError()\n      } else {\n        process.emitWarning(new RequestContentLengthMismatchError())\n      }\n    }\n\n    if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {\n      if (socket[kParser].timeout.refresh) {\n        socket[kParser].timeout.refresh()\n      }\n    }\n\n    client[kResume]()\n  }\n\n  /**\n   * @param {Error} [err]\n   * @returns {void}\n   */\n  destroy (err) {\n    const { socket, client, abort } = this\n\n    socket[kWriting] = false\n\n    if (err) {\n      assert(client[kRunning] <= 1, 'pipeline should only contain this request')\n      abort(err)\n    }\n  }\n}\n\nmodule.exports = connectH1\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { pipeline } = require('node:stream')\nconst util = require('../core/util.js')\nconst {\n  RequestContentLengthMismatchError,\n  RequestAbortedError,\n  SocketError,\n  InformationalError,\n  InvalidArgumentError,\n  HeadersTimeoutError,\n  BodyTimeoutError\n} = require('../core/errors.js')\nconst {\n  kUrl,\n  kReset,\n  kClient,\n  kRunning,\n  kPending,\n  kQueue,\n  kPendingIdx,\n  kRunningIdx,\n  kError,\n  kSocket,\n  kStrictContentLength,\n  kOnError,\n  kMaxConcurrentStreams,\n  kPingInterval,\n  kHTTP2Session,\n  kHTTP2InitialWindowSize,\n  kHTTP2ConnectionWindowSize,\n  kResume,\n  kSize,\n  kHTTPContext,\n  kClosed,\n  kBodyTimeout,\n  kHeadersTimeout,\n  kEnableConnectProtocol,\n  kRemoteSettings,\n  kHTTP2Stream,\n  kHTTP2SessionState\n} = require('../core/symbols.js')\nconst { channels } = require('../core/diagnostics.js')\n\nconst kOpenStreams = Symbol('open streams')\n\nlet extractBody\n\n/** @type {import('http2')} */\nlet http2\ntry {\n  http2 = require('node:http2')\n} catch {\n  // @ts-ignore\n  http2 = { constants: {} }\n}\n\nconst {\n  constants: {\n    HTTP2_HEADER_AUTHORITY,\n    HTTP2_HEADER_METHOD,\n    HTTP2_HEADER_PATH,\n    HTTP2_HEADER_SCHEME,\n    HTTP2_HEADER_CONTENT_LENGTH,\n    HTTP2_HEADER_EXPECT,\n    HTTP2_HEADER_STATUS,\n    HTTP2_HEADER_PROTOCOL,\n    NGHTTP2_REFUSED_STREAM,\n    NGHTTP2_CANCEL\n  }\n} = http2\n\nfunction parseH2Headers (headers) {\n  const result = []\n\n  for (const [name, value] of Object.entries(headers)) {\n    // h2 may concat the header value by array\n    // e.g. Set-Cookie\n    if (Array.isArray(value)) {\n      for (const subvalue of value) {\n        // we need to provide each header value of header name\n        // because the headers handler expect name-value pair\n        result.push(Buffer.from(name), Buffer.from(subvalue))\n      }\n    } else {\n      result.push(Buffer.from(name), Buffer.from(value))\n    }\n  }\n\n  return result\n}\n\nfunction connectH2 (client, socket) {\n  client[kSocket] = socket\n\n  const http2InitialWindowSize = client[kHTTP2InitialWindowSize]\n  const http2ConnectionWindowSize = client[kHTTP2ConnectionWindowSize]\n\n  const session = http2.connect(client[kUrl], {\n    createConnection: () => socket,\n    peerMaxConcurrentStreams: client[kMaxConcurrentStreams],\n    settings: {\n      // TODO(metcoder95): add support for PUSH\n      enablePush: false,\n      ...(http2InitialWindowSize != null ? { initialWindowSize: http2InitialWindowSize } : null)\n    }\n  })\n\n  client[kSocket] = socket\n  session[kOpenStreams] = 0\n  session[kClient] = client\n  session[kSocket] = socket\n  session[kHTTP2SessionState] = {\n    ping: {\n      interval: client[kPingInterval] === 0 ? null : setInterval(onHttp2SendPing, client[kPingInterval], session).unref()\n    }\n  }\n  // We set it to true by default in a best-effort; however once connected to an H2 server\n  // we will check if extended CONNECT protocol is supported or not\n  // and set this value accordingly.\n  session[kEnableConnectProtocol] = false\n  // States whether or not we have received the remote settings from the server\n  session[kRemoteSettings] = false\n\n  // Apply connection-level flow control once connected (if supported).\n  if (http2ConnectionWindowSize) {\n    util.addListener(session, 'connect', applyConnectionWindowSize.bind(session, http2ConnectionWindowSize))\n  }\n\n  util.addListener(session, 'error', onHttp2SessionError)\n  util.addListener(session, 'frameError', onHttp2FrameError)\n  util.addListener(session, 'end', onHttp2SessionEnd)\n  util.addListener(session, 'goaway', onHttp2SessionGoAway)\n  util.addListener(session, 'close', onHttp2SessionClose)\n  util.addListener(session, 'remoteSettings', onHttp2RemoteSettings)\n  // TODO (@metcoder95): implement SETTINGS support\n  // util.addListener(session, 'localSettings', onHttp2RemoteSettings)\n\n  session.unref()\n\n  client[kHTTP2Session] = session\n  socket[kHTTP2Session] = session\n\n  util.addListener(socket, 'error', onHttp2SocketError)\n  util.addListener(socket, 'end', onHttp2SocketEnd)\n  util.addListener(socket, 'close', onHttp2SocketClose)\n\n  socket[kClosed] = false\n  socket.on('close', onSocketClose)\n\n  return {\n    version: 'h2',\n    defaultPipelining: Infinity,\n    /**\n     * @param {import('../core/request.js')} request\n     * @returns {boolean}\n    */\n    write (request) {\n      return writeH2(client, request)\n    },\n    /**\n     * @returns {void}\n     */\n    resume () {\n      resumeH2(client)\n    },\n    /**\n     * @param {Error | null} err\n     * @param {() => void} callback\n     */\n    destroy (err, callback) {\n      if (socket[kClosed]) {\n        queueMicrotask(callback)\n      } else {\n        socket.destroy(err).on('close', callback)\n      }\n    },\n    /**\n     * @type {boolean}\n     */\n    get destroyed () {\n      return socket.destroyed\n    },\n    /**\n     * @param {import('../core/request.js')} request\n     * @returns {boolean}\n    */\n    busy (request) {\n      if (request != null) {\n        if (client[kRunning] > 0) {\n          // We are already processing requests\n\n          // Non-idempotent request cannot be retried.\n          // Ensure that no other requests are inflight and\n          // could cause failure.\n          if (request.idempotent === false) return true\n          // Don't dispatch an upgrade until all preceding requests have completed.\n          // Possibly, we do not have remote settings confirmed yet.\n          if ((request.upgrade === 'websocket' || request.method === 'CONNECT') && session[kRemoteSettings] === false) return true\n          // Request with stream or iterator body can error while other requests\n          // are inflight and indirectly error those as well.\n          // Ensure this doesn't happen by waiting for inflight\n          // to complete before dispatching.\n\n          // Request with stream or iterator body cannot be retried.\n          // Ensure that no other requests are inflight and\n          // could cause failure.\n          if (util.bodyLength(request.body) !== 0 &&\n            (util.isStream(request.body) || util.isAsyncIterable(request.body) || util.isFormDataLike(request.body))) return true\n        } else {\n          return (request.upgrade === 'websocket' || request.method === 'CONNECT') && session[kRemoteSettings] === false\n        }\n      }\n\n      return false\n    }\n  }\n}\n\nfunction resumeH2 (client) {\n  const socket = client[kSocket]\n\n  if (socket?.destroyed === false) {\n    // Only let the process exit when there is genuinely nothing outstanding.\n    // Unreffing because the peer advertised MAX_CONCURRENT_STREAMS = 0 left\n    // queued requests with nothing holding the event loop open, so the process\n    // could exit with status 0 while an awaited request never settled.\n    if (client[kSize] === 0) {\n      socket.unref()\n      client[kHTTP2Session].unref()\n    } else {\n      socket.ref()\n      client[kHTTP2Session].ref()\n    }\n  }\n}\n\nfunction applyConnectionWindowSize (connectionWindowSize) {\n  try {\n    if (typeof this.setLocalWindowSize === 'function') {\n      this.setLocalWindowSize(connectionWindowSize)\n    }\n  } catch {\n    // Best-effort only.\n  }\n}\n\nfunction onHttp2RemoteSettings (settings) {\n  // Fallbacks are a safe bet, remote setting will always override\n  this[kClient][kMaxConcurrentStreams] = settings.maxConcurrentStreams ?? this[kClient][kMaxConcurrentStreams]\n  /**\n   * From RFC-8441\n   * A sender MUST NOT send a SETTINGS_ENABLE_CONNECT_PROTOCOL parameter\n   * with the value of 0 after previously sending a value of 1.\n   */\n  // Note: Cannot be tested in Node, it does not supports disabling the extended CONNECT protocol once enabled\n  if (this[kRemoteSettings] === true && this[kEnableConnectProtocol] === true && settings.enableConnectProtocol === false) {\n    const err = new InformationalError('HTTP/2: Server disabled extended CONNECT protocol against RFC-8441')\n    this[kSocket][kError] = err\n    this[kClient][kOnError](err)\n    return\n  }\n\n  this[kEnableConnectProtocol] = settings.enableConnectProtocol ?? this[kEnableConnectProtocol]\n  this[kRemoteSettings] = true\n  this[kClient][kResume]()\n}\n\nfunction onHttp2SendPing (session) {\n  const state = session[kHTTP2SessionState]\n  if ((session.closed || session.destroyed) && state.ping.interval != null) {\n    clearInterval(state.ping.interval)\n    state.ping.interval = null\n    return\n  }\n\n  // If no ping sent, do nothing\n  session.ping(onPing.bind(session))\n\n  function onPing (err, duration) {\n    const client = this[kClient]\n    const socket = this[kClient]\n\n    if (err != null) {\n      const error = new InformationalError(`HTTP/2: \"PING\" errored - type ${err.message}`)\n      socket[kError] = error\n      client[kOnError](error)\n    } else {\n      client.emit('ping', duration)\n    }\n  }\n}\n\nfunction onHttp2SessionError (err) {\n  assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')\n\n  this[kSocket][kError] = err\n  this[kClient][kOnError](err)\n}\n\nfunction onHttp2FrameError (type, code, id) {\n  if (id === 0) {\n    const err = new InformationalError(`HTTP/2: \"frameError\" received - type ${type}, code ${code}`)\n    this[kSocket][kError] = err\n    this[kClient][kOnError](err)\n  }\n}\n\nfunction onHttp2SessionEnd () {\n  const err = new SocketError('other side closed', util.getSocketInfo(this[kSocket]))\n  this.destroy(err)\n  util.destroy(this[kSocket], err)\n}\n\n/**\n * This is the root cause of #3011\n * We need to handle GOAWAY frames properly, and trigger the session close\n * along with the socket right away\n *\n * @this {import('http2').ClientHttp2Session}\n * @param {number} errorCode\n */\n// Backport of #5410 and #5569. HTTP/2 multiplexes, so requests complete out of\n// order; advancing kRunningIdx blindly retired whichever request happened to\n// sit at the head instead of the one that actually finished, which both lost\n// requests and left phantom running slots behind.\nfunction completeRequest (client, request, resetPendingIdx = false) {\n  const queue = client[kQueue]\n  const runningIdx = client[kRunningIdx]\n\n  // In-order completion: clear the request and advance without splicing.\n  // The client's resume loop compacts cleared slots once the index grows.\n  if (runningIdx < client[kPendingIdx] && queue[runningIdx] === request) {\n    queue[runningIdx] = null\n    client[kRunningIdx] = runningIdx + 1\n    return\n  }\n\n  const index = queue.indexOf(request, runningIdx)\n\n  if (index === -1 || index >= client[kPendingIdx]) {\n    return\n  }\n\n  queue.splice(index, 1)\n  client[kPendingIdx]--\n\n  if (resetPendingIdx && client[kPendingIdx] < client[kRunningIdx]) {\n    client[kPendingIdx] = client[kRunningIdx]\n  }\n}\n\nfunction onHttp2SessionGoAway (errorCode) {\n  // TODO(mcollina): Verify if GOAWAY implements the spec correctly:\n  // https://datatracker.ietf.org/doc/html/rfc7540#section-6.8\n  // Specifically, we do not verify the \"valid\" stream id.\n\n  const err = this[kError] || new SocketError(`HTTP/2: \"GOAWAY\" frame received with code ${errorCode}`, util.getSocketInfo(this[kSocket]))\n  const client = this[kClient]\n\n  client[kSocket] = null\n  client[kHTTPContext] = null\n\n  // this is an HTTP2 session\n  this.close()\n  this[kHTTP2Session] = null\n\n  util.destroy(this[kSocket], err)\n\n  // Fail head of pipeline.\n  if (client[kRunningIdx] < client[kQueue].length) {\n    const request = client[kQueue][client[kRunningIdx]]\n    client[kQueue][client[kRunningIdx]++] = null\n    if (request != null) {\n      util.errorRequest(client, request, err)\n    }\n    client[kPendingIdx] = client[kRunningIdx]\n  }\n\n  assert(client[kRunning] === 0)\n\n  client.emit('disconnect', client[kUrl], [client], err)\n  client.emit('connectionError', client[kUrl], [client], err)\n\n  client[kResume]()\n}\n\nfunction onHttp2SessionClose () {\n  const { [kClient]: client, [kHTTP2SessionState]: state } = this\n  const { [kSocket]: socket } = client\n\n  const err = this[kSocket][kError] || this[kError] || new SocketError('closed', util.getSocketInfo(socket))\n\n  client[kSocket] = null\n  client[kHTTPContext] = null\n\n  if (state.ping.interval != null) {\n    clearInterval(state.ping.interval)\n    state.ping.interval = null\n  }\n\n  if (client.destroyed) {\n    assert(client[kPending] === 0)\n\n    // Fail entire queue.\n    const requests = client[kQueue].splice(client[kRunningIdx])\n    for (let i = 0; i < requests.length; i++) {\n      const request = requests[i]\n      if (request != null) {\n        util.errorRequest(client, request, err)\n      }\n    }\n  }\n}\n\nfunction onHttp2SocketClose () {\n  const err = this[kError] || new SocketError('closed', util.getSocketInfo(this))\n\n  const client = this[kHTTP2Session][kClient]\n\n  client[kSocket] = null\n  client[kHTTPContext] = null\n\n  if (this[kHTTP2Session] !== null) {\n    this[kHTTP2Session].destroy(err)\n  }\n\n  client[kPendingIdx] = client[kRunningIdx]\n\n  assert(client[kRunning] === 0)\n\n  client.emit('disconnect', client[kUrl], [client], err)\n\n  client[kResume]()\n}\n\nfunction onHttp2SocketError (err) {\n  assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')\n\n  this[kError] = err\n\n  this[kClient][kOnError](err)\n}\n\nfunction onHttp2SocketEnd () {\n  util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this)))\n}\n\nfunction onSocketClose () {\n  this[kClosed] = true\n}\n\n// https://www.rfc-editor.org/rfc/rfc7230#section-3.3.2\nfunction shouldSendContentLength (method) {\n  return method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS' && method !== 'TRACE' && method !== 'CONNECT'\n}\n\nfunction writeH2 (client, request) {\n  // Time to the response headers, then time between body chunks. Using\n  // bodyTimeout for both made headersTimeout a no-op over HTTP/2.\n  const headersTimeout = request.headersTimeout ?? client[kHeadersTimeout]\n  const bodyTimeout = request.bodyTimeout ?? client[kBodyTimeout]\n  const session = client[kHTTP2Session]\n  const { method, path, host, upgrade, expectContinue, signal, protocol, headers: reqHeaders } = request\n  let { body } = request\n\n  if (upgrade != null && upgrade !== 'websocket') {\n    util.errorRequest(client, request, new InvalidArgumentError(`Custom upgrade \"${upgrade}\" not supported over HTTP/2`))\n    return false\n  }\n\n  const headers = {}\n  for (let n = 0; n < reqHeaders.length; n += 2) {\n    const key = reqHeaders[n + 0]\n    const val = reqHeaders[n + 1]\n\n    if (key === 'cookie') {\n      if (headers[key] != null) {\n        headers[key] = Array.isArray(headers[key]) ? (headers[key].push(val), headers[key]) : [headers[key], val]\n      } else {\n        headers[key] = val\n      }\n\n      continue\n    }\n\n    if (Array.isArray(val)) {\n      for (let i = 0; i < val.length; i++) {\n        if (headers[key]) {\n          headers[key] += `, ${val[i]}`\n        } else {\n          headers[key] = val[i]\n        }\n      }\n    } else if (headers[key]) {\n      headers[key] += `, ${val}`\n    } else {\n      headers[key] = val\n    }\n  }\n\n  /** @type {import('node:http2').ClientHttp2Stream} */\n  let stream = null\n\n  const { hostname, port } = client[kUrl]\n\n  headers[HTTP2_HEADER_AUTHORITY] = host || `${hostname}${port ? `:${port}` : ''}`\n  headers[HTTP2_HEADER_METHOD] = method\n\n  const abort = (err) => {\n    if (request.aborted || request.completed) {\n      return\n    }\n\n    err = err || new RequestAbortedError()\n\n    util.errorRequest(client, request, err)\n\n    if (stream != null) {\n      // Some chunks might still come after abort,\n      // let's ignore them\n      stream.removeAllListeners('data')\n\n      // On Abort, we close the stream to send RST_STREAM frame\n      stream.close()\n\n      // We move the running index to the next request\n      client[kOnError](err)\n      completeRequest(client, request)\n      client[kResume]()\n    }\n\n    // We do not destroy the socket as we can continue using the session\n    // the stream gets destroyed and the session remains to create new streams\n    util.destroy(body, err)\n  }\n\n  try {\n    // We are already connected, streams are pending.\n    // We can call on connect, and wait for abort\n    request.onConnect(abort)\n  } catch (err) {\n    util.errorRequest(client, request, err)\n  }\n\n  if (request.aborted) {\n    return false\n  }\n\n  if (upgrade || method === 'CONNECT') {\n    session.ref()\n\n    if (upgrade === 'websocket') {\n      // We cannot upgrade to websocket if extended CONNECT protocol is not supported\n      if (session[kEnableConnectProtocol] === false) {\n        util.errorRequest(client, request, new InformationalError('HTTP/2: Extended CONNECT protocol not supported by server'))\n        session.unref()\n        return false\n      }\n\n      // We force the method to CONNECT\n      // as per RFC-8441\n      // https://datatracker.ietf.org/doc/html/rfc8441#section-4\n      headers[HTTP2_HEADER_METHOD] = 'CONNECT'\n      headers[HTTP2_HEADER_PROTOCOL] = 'websocket'\n      // :path and :scheme headers must be omitted when sending CONNECT but set if extended-CONNECT\n      headers[HTTP2_HEADER_PATH] = path\n\n      if (protocol === 'ws:' || protocol === 'wss:') {\n        headers[HTTP2_HEADER_SCHEME] = protocol === 'ws:' ? 'http' : 'https'\n      } else {\n        headers[HTTP2_HEADER_SCHEME] = protocol === 'http:' ? 'http' : 'https'\n      }\n\n      stream = session.request(headers, { endStream: false, signal })\n      stream[kHTTP2Stream] = true\n\n      stream.once('response', (headers, _flags) => {\n        const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers\n\n        request.onUpgrade(statusCode, parseH2Headers(realHeaders), stream)\n\n        ++session[kOpenStreams]\n        completeRequest(client, request)\n      })\n\n      stream.on('error', () => {\n        if (stream.rstCode === NGHTTP2_REFUSED_STREAM || stream.rstCode === NGHTTP2_CANCEL) {\n          // NGHTTP2_REFUSED_STREAM (7) or NGHTTP2_CANCEL (8)\n          // We do not treat those as errors as the server might\n          // not support websockets and refuse the stream\n          abort(new InformationalError(`HTTP/2: \"stream error\" received - code ${stream.rstCode}`))\n        }\n      })\n\n      stream.once('close', () => {\n        session[kOpenStreams] -= 1\n        if (session[kOpenStreams] === 0) session.unref()\n      })\n\n      stream.setTimeout(headersTimeout)\n      return true\n    }\n\n    // TODO: consolidate once we support CONNECT properly\n    // NOTE: We are already connected, streams are pending, first request\n    // will create a new stream. We trigger a request to create the stream and wait until\n    // `ready` event is triggered\n    // We disabled endStream to allow the user to write to the stream\n    stream = session.request(headers, { endStream: false, signal })\n    stream[kHTTP2Stream] = true\n    stream.on('response', headers => {\n      const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers\n\n      request.onUpgrade(statusCode, parseH2Headers(realHeaders), stream)\n      ++session[kOpenStreams]\n      completeRequest(client, request)\n    })\n    stream.on('error', abort)\n    stream.once('close', () => {\n      session[kOpenStreams] -= 1\n      if (session[kOpenStreams] === 0) session.unref()\n    })\n    stream.setTimeout(headersTimeout)\n\n    return true\n  }\n\n  // https://tools.ietf.org/html/rfc7540#section-8.3\n  // :path and :scheme headers must be omitted when sending CONNECT\n  headers[HTTP2_HEADER_PATH] = path\n  headers[HTTP2_HEADER_SCHEME] = protocol === 'http:' ? 'http' : 'https'\n\n  // https://tools.ietf.org/html/rfc7231#section-4.3.1\n  // https://tools.ietf.org/html/rfc7231#section-4.3.2\n  // https://tools.ietf.org/html/rfc7231#section-4.3.5\n\n  // Sending a payload body on a request that does not\n  // expect it can cause undefined behavior on some\n  // servers and corrupt connection state. Do not\n  // re-use the connection for further requests.\n\n  const expectsPayload = (\n    method === 'PUT' ||\n    method === 'POST' ||\n    method === 'PATCH'\n  )\n\n  if (body && typeof body.read === 'function') {\n    // Try to read EOF in order to get length.\n    body.read(0)\n  }\n\n  let contentLength = util.bodyLength(body)\n\n  if (util.isFormDataLike(body)) {\n    extractBody ??= require('../web/fetch/body.js').extractBody\n\n    const [bodyStream, contentType] = extractBody(body)\n    headers['content-type'] = contentType\n\n    body = bodyStream.stream\n    contentLength = bodyStream.length\n  }\n\n  if (contentLength == null) {\n    contentLength = request.contentLength\n  }\n\n  if (!expectsPayload) {\n    // https://tools.ietf.org/html/rfc7230#section-3.3.2\n    // A user agent SHOULD NOT send a Content-Length header field when\n    // the request message does not contain a payload body and the method\n    // semantics do not anticipate such a body.\n    // And for methods that don't expect a payload, omit Content-Length.\n    contentLength = null\n  }\n\n  // https://github.com/nodejs/undici/issues/2046\n  // A user agent may send a Content-Length header with 0 value, this should be allowed.\n  if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength != null && request.contentLength !== contentLength) {\n    if (client[kStrictContentLength]) {\n      util.errorRequest(client, request, new RequestContentLengthMismatchError())\n      return false\n    }\n\n    process.emitWarning(new RequestContentLengthMismatchError())\n  }\n\n  if (contentLength != null) {\n    assert(body || contentLength === 0, 'no body must not have content length')\n    headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}`\n  }\n\n  session.ref()\n\n  if (channels.sendHeaders.hasSubscribers) {\n    let header = ''\n    for (const key in headers) {\n      header += `${key}: ${headers[key]}\\r\\n`\n    }\n    channels.sendHeaders.publish({ request, headers: header, socket: session[kSocket] })\n  }\n\n  // TODO(metcoder95): add support for sending trailers\n  const shouldEndStream = method === 'GET' || method === 'HEAD' || body === null\n  if (expectContinue) {\n    headers[HTTP2_HEADER_EXPECT] = '100-continue'\n    stream = session.request(headers, { endStream: shouldEndStream, signal })\n    stream[kHTTP2Stream] = true\n\n    stream.once('continue', writeBodyH2)\n  } else {\n    stream = session.request(headers, {\n      endStream: shouldEndStream,\n      signal\n    })\n    stream[kHTTP2Stream] = true\n\n    writeBodyH2()\n  }\n\n  // Increment counter as we have new streams open\n  ++session[kOpenStreams]\n  stream.setTimeout(headersTimeout)\n\n  // Track whether we received a response (headers)\n  let responseReceived = false\n\n  stream.once('response', headers => {\n    const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers\n    request.onResponseStarted()\n    responseReceived = true\n    stream.setTimeout(bodyTimeout)\n\n    // Due to the stream nature, it is possible we face a race condition\n    // where the stream has been assigned, but the request has been aborted\n    // the request remains in-flight and headers hasn't been received yet\n    // for those scenarios, best effort is to destroy the stream immediately\n    // as there's no value to keep it open.\n    if (request.aborted) {\n      stream.removeAllListeners('data')\n      return\n    }\n\n    if (request.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream.resume.bind(stream), '') === false) {\n      stream.pause()\n    }\n\n    stream.on('data', (chunk) => {\n      if (request.aborted || request.completed) {\n        return\n      }\n\n      if (request.onData(chunk) === false) {\n        stream.pause()\n      }\n    })\n  })\n\n  stream.once('end', () => {\n    stream.removeAllListeners('data')\n    // If we received a response, this is a normal completion\n    if (responseReceived) {\n      if (!request.aborted && !request.completed) {\n        request.onComplete({})\n      }\n\n      completeRequest(client, request)\n      client[kResume]()\n    } else {\n      // Stream ended without receiving a response - this is an error\n      // (e.g., server destroyed the stream before sending headers)\n      abort(new InformationalError('HTTP/2: stream half-closed (remote)'))\n      completeRequest(client, request, true)\n      client[kResume]()\n    }\n  })\n\n  stream.once('close', () => {\n    stream.removeAllListeners('data')\n    session[kOpenStreams] -= 1\n    if (session[kOpenStreams] === 0) {\n      session.unref()\n    }\n\n    // A stream can close without ever emitting 'end' or 'error': a peer's\n    // RST_STREAM(CANCEL) received before the response is reported by Node as a\n    // bare 'close', and destroying the stream unenrolls its timeout, so no\n    // 'timeout' follows either. Nothing else would ever settle this request.\n    if (!request.aborted && !request.completed) {\n      abort(new InformationalError('HTTP/2: stream closed before the response was complete'))\n    }\n  })\n\n  stream.once('error', function (err) {\n    stream.removeAllListeners('data')\n    abort(err)\n  })\n\n  stream.once('frameError', (type, code) => {\n    stream.removeAllListeners('data')\n    abort(new InformationalError(`HTTP/2: \"frameError\" received - type ${type}, code ${code}`))\n  })\n\n  stream.on('aborted', () => {\n    stream.removeAllListeners('data')\n  })\n\n  stream.on('timeout', () => {\n    const err = responseReceived\n      ? new BodyTimeoutError(`HTTP/2: \"body timeout after ${bodyTimeout}\"`)\n      : new HeadersTimeoutError(`HTTP/2: \"headers timeout after ${headersTimeout}\"`)\n    stream.removeAllListeners('data')\n    session[kOpenStreams] -= 1\n\n    if (session[kOpenStreams] === 0) {\n      session.unref()\n    }\n\n    abort(err)\n  })\n\n  stream.once('trailers', trailers => {\n    if (request.aborted || request.completed) {\n      return\n    }\n\n    stream.removeAllListeners('data')\n    request.onComplete(trailers)\n  })\n\n  return true\n\n  function writeBodyH2 () {\n    if (!body || contentLength === 0) {\n      writeBuffer(\n        abort,\n        stream,\n        null,\n        client,\n        request,\n        client[kSocket],\n        contentLength,\n        expectsPayload\n      )\n    } else if (util.isBuffer(body)) {\n      writeBuffer(\n        abort,\n        stream,\n        body,\n        client,\n        request,\n        client[kSocket],\n        contentLength,\n        expectsPayload\n      )\n    } else if (util.isBlobLike(body)) {\n      if (typeof body.stream === 'function') {\n        writeIterable(\n          abort,\n          stream,\n          body.stream(),\n          client,\n          request,\n          client[kSocket],\n          contentLength,\n          expectsPayload\n        )\n      } else {\n        writeBlob(\n          abort,\n          stream,\n          body,\n          client,\n          request,\n          client[kSocket],\n          contentLength,\n          expectsPayload\n        )\n      }\n    } else if (util.isStream(body)) {\n      writeStream(\n        abort,\n        client[kSocket],\n        expectsPayload,\n        stream,\n        body,\n        client,\n        request,\n        contentLength\n      )\n    } else if (util.isIterable(body)) {\n      writeIterable(\n        abort,\n        stream,\n        body,\n        client,\n        request,\n        client[kSocket],\n        contentLength,\n        expectsPayload\n      )\n    } else {\n      assert(false)\n    }\n  }\n}\n\nfunction writeBuffer (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {\n  try {\n    if (body != null && util.isBuffer(body)) {\n      assert(contentLength === body.byteLength, 'buffer body must have content length')\n      h2stream.cork()\n      h2stream.write(body)\n      h2stream.uncork()\n      h2stream.end()\n\n      request.onBodySent(body)\n    }\n\n    if (!expectsPayload) {\n      socket[kReset] = true\n    }\n\n    request.onRequestSent()\n    client[kResume]()\n  } catch (error) {\n    abort(error)\n  }\n}\n\nfunction writeStream (abort, socket, expectsPayload, h2stream, body, client, request, contentLength) {\n  assert(contentLength !== 0 || client[kRunning] === 0, 'stream body cannot be pipelined')\n\n  // For HTTP/2, is enough to pipe the stream\n  const pipe = pipeline(\n    body,\n    h2stream,\n    (err) => {\n      if (err) {\n        util.destroy(pipe, err)\n        abort(err)\n      } else {\n        util.removeAllListeners(pipe)\n        request.onRequestSent()\n\n        if (!expectsPayload) {\n          socket[kReset] = true\n        }\n\n        client[kResume]()\n      }\n    }\n  )\n\n  util.addListener(pipe, 'data', onPipeData)\n\n  function onPipeData (chunk) {\n    request.onBodySent(chunk)\n  }\n}\n\nasync function writeBlob (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {\n  assert(contentLength === body.size, 'blob body must have content length')\n\n  try {\n    if (contentLength != null && contentLength !== body.size) {\n      throw new RequestContentLengthMismatchError()\n    }\n\n    const buffer = Buffer.from(await body.arrayBuffer())\n\n    h2stream.cork()\n    h2stream.write(buffer)\n    h2stream.uncork()\n    h2stream.end()\n\n    request.onBodySent(buffer)\n    request.onRequestSent()\n\n    if (!expectsPayload) {\n      socket[kReset] = true\n    }\n\n    client[kResume]()\n  } catch (err) {\n    abort(err)\n  }\n}\n\nasync function writeIterable (abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {\n  assert(contentLength !== 0 || client[kRunning] === 0, 'iterator body cannot be pipelined')\n\n  let callback = null\n  function onDrain () {\n    if (callback) {\n      const cb = callback\n      callback = null\n      cb()\n    }\n  }\n\n  const waitForDrain = () => new Promise((resolve, reject) => {\n    assert(callback === null)\n\n    if (socket[kError]) {\n      reject(socket[kError])\n    } else {\n      callback = resolve\n    }\n  })\n\n  h2stream\n    .on('close', onDrain)\n    .on('drain', onDrain)\n\n  try {\n    // It's up to the user to somehow abort the async iterable.\n    for await (const chunk of body) {\n      if (socket[kError]) {\n        throw socket[kError]\n      }\n\n      const res = h2stream.write(chunk)\n      request.onBodySent(chunk)\n      if (!res) {\n        await waitForDrain()\n      }\n    }\n\n    h2stream.end()\n\n    request.onRequestSent()\n\n    if (!expectsPayload) {\n      socket[kReset] = true\n    }\n\n    client[kResume]()\n  } catch (err) {\n    abort(err)\n  } finally {\n    h2stream\n      .off('close', onDrain)\n      .off('drain', onDrain)\n  }\n}\n\nmodule.exports = connectH2\n", "'use strict'\n\nconst assert = require('node:assert')\nconst net = require('node:net')\nconst http = require('node:http')\nconst util = require('../core/util.js')\nconst { ClientStats } = require('../util/stats.js')\nconst { channels } = require('../core/diagnostics.js')\nconst Request = require('../core/request.js')\nconst DispatcherBase = require('./dispatcher-base')\nconst {\n  InvalidArgumentError,\n  InformationalError,\n  ClientDestroyedError\n} = require('../core/errors.js')\nconst buildConnector = require('../core/connect.js')\nconst {\n  kUrl,\n  kServerName,\n  kClient,\n  kBusy,\n  kConnect,\n  kResuming,\n  kRunning,\n  kPending,\n  kSize,\n  kQueue,\n  kConnected,\n  kConnecting,\n  kNeedDrain,\n  kKeepAliveDefaultTimeout,\n  kHostHeader,\n  kPendingIdx,\n  kRunningIdx,\n  kError,\n  kPipelining,\n  kKeepAliveTimeoutValue,\n  kMaxHeadersSize,\n  kKeepAliveMaxTimeout,\n  kKeepAliveTimeoutThreshold,\n  kHeadersTimeout,\n  kBodyTimeout,\n  kStrictContentLength,\n  kConnector,\n  kMaxRequests,\n  kCounter,\n  kClose,\n  kDestroy,\n  kDispatch,\n  kLocalAddress,\n  kMaxResponseSize,\n  kOnError,\n  kHTTPContext,\n  kMaxConcurrentStreams,\n  kHTTP2InitialWindowSize,\n  kHTTP2ConnectionWindowSize,\n  kResume,\n  kPingInterval\n} = require('../core/symbols.js')\nconst connectH1 = require('./client-h1.js')\nconst connectH2 = require('./client-h2.js')\n\nconst kClosedResolve = Symbol('kClosedResolve')\n\nconst getDefaultNodeMaxHeaderSize = http &&\n  http.maxHeaderSize &&\n  Number.isInteger(http.maxHeaderSize) &&\n  http.maxHeaderSize > 0\n  ? () => http.maxHeaderSize\n  : () => { throw new InvalidArgumentError('http module not available or http.maxHeaderSize invalid') }\n\nconst noop = () => { }\n\nfunction getPipelining (client) {\n  return client[kPipelining] ?? client[kHTTPContext]?.defaultPipelining ?? 1\n}\n\n/**\n * @type {import('../../types/client.js').default}\n */\nclass Client extends DispatcherBase {\n  /**\n   *\n   * @param {string|URL} url\n   * @param {import('../../types/client.js').Client.Options} options\n   */\n  constructor (url, {\n    maxHeaderSize,\n    headersTimeout,\n    socketTimeout,\n    requestTimeout,\n    connectTimeout,\n    bodyTimeout,\n    idleTimeout,\n    keepAlive,\n    keepAliveTimeout,\n    maxKeepAliveTimeout,\n    keepAliveMaxTimeout,\n    keepAliveTimeoutThreshold,\n    socketPath,\n    pipelining,\n    tls,\n    strictContentLength,\n    maxCachedSessions,\n    connect,\n    maxRequestsPerClient,\n    localAddress,\n    maxResponseSize,\n    autoSelectFamily,\n    autoSelectFamilyAttemptTimeout,\n    // h2\n    maxConcurrentStreams,\n    allowH2,\n    useH2c,\n    initialWindowSize,\n    connectionWindowSize,\n    pingInterval,\n    webSocket\n  } = {}) {\n    if (keepAlive !== undefined) {\n      throw new InvalidArgumentError('unsupported keepAlive, use pipelining=0 instead')\n    }\n\n    if (socketTimeout !== undefined) {\n      throw new InvalidArgumentError('unsupported socketTimeout, use headersTimeout & bodyTimeout instead')\n    }\n\n    if (requestTimeout !== undefined) {\n      throw new InvalidArgumentError('unsupported requestTimeout, use headersTimeout & bodyTimeout instead')\n    }\n\n    if (idleTimeout !== undefined) {\n      throw new InvalidArgumentError('unsupported idleTimeout, use keepAliveTimeout instead')\n    }\n\n    if (maxKeepAliveTimeout !== undefined) {\n      throw new InvalidArgumentError('unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead')\n    }\n\n    if (maxHeaderSize != null) {\n      if (!Number.isInteger(maxHeaderSize) || maxHeaderSize < 1) {\n        throw new InvalidArgumentError('invalid maxHeaderSize')\n      }\n    } else {\n      // If maxHeaderSize is not provided, use the default value from the http module\n      // or if that is not available, throw an error.\n      maxHeaderSize = getDefaultNodeMaxHeaderSize()\n    }\n\n    if (socketPath != null && typeof socketPath !== 'string') {\n      throw new InvalidArgumentError('invalid socketPath')\n    }\n\n    if (connectTimeout != null && (!Number.isFinite(connectTimeout) || connectTimeout < 0)) {\n      throw new InvalidArgumentError('invalid connectTimeout')\n    }\n\n    if (keepAliveTimeout != null && (!Number.isFinite(keepAliveTimeout) || keepAliveTimeout <= 0)) {\n      throw new InvalidArgumentError('invalid keepAliveTimeout')\n    }\n\n    if (keepAliveMaxTimeout != null && (!Number.isFinite(keepAliveMaxTimeout) || keepAliveMaxTimeout <= 0)) {\n      throw new InvalidArgumentError('invalid keepAliveMaxTimeout')\n    }\n\n    if (keepAliveTimeoutThreshold != null && !Number.isFinite(keepAliveTimeoutThreshold)) {\n      throw new InvalidArgumentError('invalid keepAliveTimeoutThreshold')\n    }\n\n    if (headersTimeout != null && (!Number.isInteger(headersTimeout) || headersTimeout < 0)) {\n      throw new InvalidArgumentError('headersTimeout must be a positive integer or zero')\n    }\n\n    if (bodyTimeout != null && (!Number.isInteger(bodyTimeout) || bodyTimeout < 0)) {\n      throw new InvalidArgumentError('bodyTimeout must be a positive integer or zero')\n    }\n\n    if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {\n      throw new InvalidArgumentError('connect must be a function or an object')\n    }\n\n    if (maxRequestsPerClient != null && (!Number.isInteger(maxRequestsPerClient) || maxRequestsPerClient < 0)) {\n      throw new InvalidArgumentError('maxRequestsPerClient must be a positive number')\n    }\n\n    if (localAddress != null && (typeof localAddress !== 'string' || net.isIP(localAddress) === 0)) {\n      throw new InvalidArgumentError('localAddress must be valid string IP address')\n    }\n\n    if (maxResponseSize != null && (!Number.isInteger(maxResponseSize) || maxResponseSize < -1)) {\n      throw new InvalidArgumentError('maxResponseSize must be a positive number')\n    }\n\n    if (\n      autoSelectFamilyAttemptTimeout != null &&\n      (!Number.isInteger(autoSelectFamilyAttemptTimeout) || autoSelectFamilyAttemptTimeout < -1)\n    ) {\n      throw new InvalidArgumentError('autoSelectFamilyAttemptTimeout must be a positive number')\n    }\n\n    // h2\n    if (allowH2 != null && typeof allowH2 !== 'boolean') {\n      throw new InvalidArgumentError('allowH2 must be a valid boolean value')\n    }\n\n    if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== 'number' || maxConcurrentStreams < 1)) {\n      throw new InvalidArgumentError('maxConcurrentStreams must be a positive integer, greater than 0')\n    }\n\n    if (useH2c != null && typeof useH2c !== 'boolean') {\n      throw new InvalidArgumentError('useH2c must be a valid boolean value')\n    }\n\n    if (initialWindowSize != null && (!Number.isInteger(initialWindowSize) || initialWindowSize < 1)) {\n      throw new InvalidArgumentError('initialWindowSize must be a positive integer, greater than 0')\n    }\n\n    if (connectionWindowSize != null && (!Number.isInteger(connectionWindowSize) || connectionWindowSize < 1)) {\n      throw new InvalidArgumentError('connectionWindowSize must be a positive integer, greater than 0')\n    }\n\n    if (pingInterval != null && (typeof pingInterval !== 'number' || !Number.isInteger(pingInterval) || pingInterval < 0)) {\n      throw new InvalidArgumentError('pingInterval must be a positive integer, greater or equal to 0')\n    }\n\n    super({ webSocket })\n\n    if (typeof connect !== 'function') {\n      connect = buildConnector({\n        ...tls,\n        maxCachedSessions,\n        allowH2,\n        useH2c,\n        socketPath,\n        timeout: connectTimeout,\n        ...(typeof autoSelectFamily === 'boolean' ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),\n        ...connect\n      })\n    } else {\n      const customConnect = connect\n      connect = (opts, callback) => customConnect({\n        ...opts,\n        ...(socketPath != null ? { socketPath } : null),\n        ...(allowH2 != null ? { allowH2 } : null)\n      }, callback)\n    }\n\n    this[kUrl] = util.parseOrigin(url)\n    this[kConnector] = connect\n    this[kPipelining] = pipelining != null ? pipelining : 1\n    this[kMaxHeadersSize] = maxHeaderSize\n    this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout\n    this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 600e3 : keepAliveMaxTimeout\n    this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 2e3 : keepAliveTimeoutThreshold\n    this[kKeepAliveTimeoutValue] = this[kKeepAliveDefaultTimeout]\n    this[kServerName] = null\n    this[kLocalAddress] = localAddress != null ? localAddress : null\n    this[kResuming] = 0 // 0, idle, 1, scheduled, 2 resuming\n    this[kNeedDrain] = 0 // 0, idle, 1, scheduled, 2 resuming\n    this[kHostHeader] = `host: ${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ''}\\r\\n`\n    this[kBodyTimeout] = bodyTimeout != null ? bodyTimeout : 300e3\n    this[kHeadersTimeout] = headersTimeout != null ? headersTimeout : 300e3\n    this[kStrictContentLength] = strictContentLength == null ? true : strictContentLength\n    this[kMaxRequests] = maxRequestsPerClient\n    this[kClosedResolve] = null\n    this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1\n    this[kHTTPContext] = null\n    // h2\n    this[kMaxConcurrentStreams] = maxConcurrentStreams != null ? maxConcurrentStreams : 100 // Max peerConcurrentStreams for a Node h2 server\n    // HTTP/2 window sizes are set to higher defaults than Node.js core for better performance:\n    // - initialWindowSize: 262144 (256KB) vs Node.js default 65535 (64KB - 1)\n    //   Allows more data to be sent before requiring acknowledgment, improving throughput\n    //   especially on high-latency networks. This matches common production HTTP/2 servers.\n    // - connectionWindowSize: 524288 (512KB) vs Node.js default (none set)\n    //   Provides better flow control for the entire connection across multiple streams.\n    this[kHTTP2InitialWindowSize] = initialWindowSize != null ? initialWindowSize : 262144\n    this[kHTTP2ConnectionWindowSize] = connectionWindowSize != null ? connectionWindowSize : 524288\n    this[kPingInterval] = pingInterval != null ? pingInterval : 60e3 // Default ping interval for h2 - 1 minute\n\n    // kQueue is built up of 3 sections separated by\n    // the kRunningIdx and kPendingIdx indices.\n    // |   complete   |   running   |   pending   |\n    //                ^ kRunningIdx ^ kPendingIdx ^ kQueue.length\n    // kRunningIdx points to the first running element.\n    // kPendingIdx points to the first pending element.\n    // This implements a fast queue with an amortized\n    // time of O(1).\n\n    this[kQueue] = []\n    this[kRunningIdx] = 0\n    this[kPendingIdx] = 0\n\n    this[kResume] = (sync) => resume(this, sync)\n    this[kOnError] = (err) => onError(this, err)\n  }\n\n  get pipelining () {\n    return this[kPipelining]\n  }\n\n  set pipelining (value) {\n    this[kPipelining] = value\n    this[kResume](true)\n  }\n\n  get stats () {\n    return new ClientStats(this)\n  }\n\n  get [kPending] () {\n    return this[kQueue].length - this[kPendingIdx]\n  }\n\n  get [kRunning] () {\n    return this[kPendingIdx] - this[kRunningIdx]\n  }\n\n  get [kSize] () {\n    return this[kQueue].length - this[kRunningIdx]\n  }\n\n  get [kConnected] () {\n    return !!this[kHTTPContext] && !this[kConnecting] && !this[kHTTPContext].destroyed\n  }\n\n  get [kBusy] () {\n    return Boolean(\n      this[kHTTPContext]?.busy(null) ||\n      (this[kSize] >= (getPipelining(this) || 1)) ||\n      this[kPending] > 0\n    )\n  }\n\n  [kConnect] (cb) {\n    connect(this)\n    this.once('connect', cb)\n  }\n\n  [kDispatch] (opts, handler) {\n    const request = new Request(this[kUrl].origin, opts, handler)\n\n    this[kQueue].push(request)\n    if (this[kResuming]) {\n      // Do nothing.\n    } else if (util.bodyLength(request.body) == null && util.isIterable(request.body)) {\n      // Wait a tick in case stream/iterator is ended in the same tick.\n      this[kResuming] = 1\n      queueMicrotask(() => resume(this))\n    } else {\n      this[kResume](true)\n    }\n\n    if (this[kResuming] && this[kNeedDrain] !== 2 && this[kBusy]) {\n      this[kNeedDrain] = 2\n    }\n\n    return this[kNeedDrain] < 2\n  }\n\n  [kClose] () {\n    // TODO: for H2 we need to gracefully flush the remaining enqueued\n    // request and close each stream.\n    return new Promise((resolve) => {\n      if (this[kSize]) {\n        this[kClosedResolve] = resolve\n      } else {\n        resolve(null)\n      }\n    })\n  }\n\n  [kDestroy] (err) {\n    return new Promise((resolve) => {\n      const requests = this[kQueue].splice(this[kPendingIdx])\n      for (let i = 0; i < requests.length; i++) {\n        const request = requests[i]\n        if (request != null) {\n          util.errorRequest(this, request, err)\n        }\n      }\n\n      const callback = () => {\n        if (this[kClosedResolve]) {\n          // TODO (fix): Should we error here with ClientDestroyedError?\n          this[kClosedResolve]()\n          this[kClosedResolve] = null\n        }\n        resolve(null)\n      }\n\n      if (this[kHTTPContext]) {\n        this[kHTTPContext].destroy(err, callback)\n        this[kHTTPContext] = null\n      } else {\n        queueMicrotask(callback)\n      }\n\n      this[kResume]()\n    })\n  }\n}\n\nfunction onError (client, err) {\n  if (\n    client[kRunning] === 0 &&\n    err.code !== 'UND_ERR_INFO' &&\n    err.code !== 'UND_ERR_SOCKET'\n  ) {\n    // Error is not caused by running request and not a recoverable\n    // socket error.\n\n    assert(client[kPendingIdx] === client[kRunningIdx])\n\n    const requests = client[kQueue].splice(client[kRunningIdx])\n\n    for (let i = 0; i < requests.length; i++) {\n      const request = requests[i]\n      if (request != null) {\n        util.errorRequest(client, request, err)\n      }\n    }\n    assert(client[kSize] === 0)\n  }\n}\n\n/**\n * @param {Client} client\n * @returns {void}\n */\nfunction connect (client) {\n  assert(!client[kConnecting])\n  assert(!client[kHTTPContext])\n\n  let { host, hostname, protocol, port } = client[kUrl]\n\n  // Resolve ipv6\n  if (hostname[0] === '[') {\n    const idx = hostname.indexOf(']')\n\n    assert(idx !== -1)\n    const ip = hostname.substring(1, idx)\n\n    assert(net.isIPv6(ip))\n    hostname = ip\n  }\n\n  client[kConnecting] = true\n\n  if (channels.beforeConnect.hasSubscribers) {\n    channels.beforeConnect.publish({\n      connectParams: {\n        host,\n        hostname,\n        protocol,\n        port,\n        version: client[kHTTPContext]?.version,\n        servername: client[kServerName],\n        localAddress: client[kLocalAddress]\n      },\n      connector: client[kConnector]\n    })\n  }\n\n  try {\n    client[kConnector]({\n      host,\n      hostname,\n      protocol,\n      port,\n      servername: client[kServerName],\n      localAddress: client[kLocalAddress]\n    }, (err, socket) => {\n      if (err) {\n        handleConnectError(client, err, { host, hostname, protocol, port })\n        client[kResume]()\n        return\n      }\n\n      if (client.destroyed) {\n        util.destroy(socket.on('error', noop), new ClientDestroyedError())\n        client[kResume]()\n        return\n      }\n\n      assert(socket)\n\n      try {\n        client[kHTTPContext] = socket.alpnProtocol === 'h2'\n          ? connectH2(client, socket)\n          : connectH1(client, socket)\n      } catch (err) {\n        socket.destroy().on('error', noop)\n        handleConnectError(client, err, { host, hostname, protocol, port })\n        client[kResume]()\n        return\n      }\n\n      client[kConnecting] = false\n\n      socket[kCounter] = 0\n      socket[kMaxRequests] = client[kMaxRequests]\n      socket[kClient] = client\n      socket[kError] = null\n\n      if (channels.connected.hasSubscribers) {\n        channels.connected.publish({\n          connectParams: {\n            host,\n            hostname,\n            protocol,\n            port,\n            version: client[kHTTPContext]?.version,\n            servername: client[kServerName],\n            localAddress: client[kLocalAddress]\n          },\n          connector: client[kConnector],\n          socket\n        })\n      }\n\n      client.emit('connect', client[kUrl], [client])\n      client[kResume]()\n    })\n  } catch (err) {\n    handleConnectError(client, err, { host, hostname, protocol, port })\n    client[kResume]()\n  }\n}\n\nfunction handleConnectError (client, err, { host, hostname, protocol, port }) {\n  if (client.destroyed) {\n    return\n  }\n\n  client[kConnecting] = false\n\n  if (channels.connectError.hasSubscribers) {\n    channels.connectError.publish({\n      connectParams: {\n        host,\n        hostname,\n        protocol,\n        port,\n        version: client[kHTTPContext]?.version,\n        servername: client[kServerName],\n        localAddress: client[kLocalAddress]\n      },\n      connector: client[kConnector],\n      error: err\n    })\n  }\n\n  if (err.code === 'ERR_TLS_CERT_ALTNAME_INVALID') {\n    assert(client[kRunning] === 0)\n    while (client[kPending] > 0 && client[kQueue][client[kPendingIdx]].servername === client[kServerName]) {\n      const request = client[kQueue][client[kPendingIdx]++]\n      util.errorRequest(client, request, err)\n    }\n  } else {\n    onError(client, err)\n  }\n\n  client.emit('connectionError', client[kUrl], [client], err)\n}\n\nfunction emitDrain (client) {\n  client[kNeedDrain] = 0\n  client.emit('drain', client[kUrl], [client])\n}\n\nfunction resume (client, sync) {\n  if (client[kResuming] === 2) {\n    return\n  }\n\n  client[kResuming] = 2\n\n  _resume(client, sync)\n  client[kResuming] = 0\n\n  if (client[kRunningIdx] > 256) {\n    client[kQueue].splice(0, client[kRunningIdx])\n    client[kPendingIdx] -= client[kRunningIdx]\n    client[kRunningIdx] = 0\n  }\n}\n\nfunction _resume (client, sync) {\n  while (true) {\n    if (client.destroyed) {\n      assert(client[kPending] === 0)\n      return\n    }\n\n    if (client[kClosedResolve] && !client[kSize]) {\n      client[kClosedResolve]()\n      client[kClosedResolve] = null\n      return\n    }\n\n    if (client[kHTTPContext]) {\n      client[kHTTPContext].resume()\n    }\n\n    if (client[kBusy]) {\n      client[kNeedDrain] = 2\n    } else if (client[kNeedDrain] === 2) {\n      if (sync) {\n        client[kNeedDrain] = 1\n        queueMicrotask(() => emitDrain(client))\n      } else {\n        emitDrain(client)\n      }\n      continue\n    }\n\n    if (client[kPending] === 0) {\n      return\n    }\n\n    if (client[kRunning] >= (getPipelining(client) || 1)) {\n      return\n    }\n\n    const request = client[kQueue][client[kPendingIdx]]\n\n    if (request === null) {\n      return\n    }\n\n    if (client[kUrl].protocol === 'https:' && client[kServerName] !== request.servername) {\n      if (client[kRunning] > 0) {\n        return\n      }\n\n      client[kServerName] = request.servername\n      client[kHTTPContext]?.destroy(new InformationalError('servername changed'), () => {\n        client[kHTTPContext] = null\n        resume(client)\n      })\n    }\n\n    if (client[kConnecting]) {\n      return\n    }\n\n    if (!client[kHTTPContext]) {\n      connect(client)\n      return\n    }\n\n    if (client[kHTTPContext].destroyed) {\n      return\n    }\n\n    if (client[kHTTPContext].busy(request)) {\n      return\n    }\n\n    if (!request.aborted && client[kHTTPContext].write(request)) {\n      client[kPendingIdx]++\n    } else {\n      client[kQueue].splice(client[kPendingIdx], 1)\n    }\n  }\n}\n\nmodule.exports = Client\n", "'use strict'\n\n// Extracted from node/lib/internal/fixed_queue.js\n\n// Currently optimal queue size, tested on V8 6.0 - 6.6. Must be power of two.\nconst kSize = 2048\nconst kMask = kSize - 1\n\n// The FixedQueue is implemented as a singly-linked list of fixed-size\n// circular buffers. It looks something like this:\n//\n//  head                                                       tail\n//    |                                                          |\n//    v                                                          v\n// +-----------+ <-----\\       +-----------+ <------\\         +-----------+\n// |  [null]   |        \\----- |   next    |         \\------- |   next    |\n// +-----------+               +-----------+                  +-----------+\n// |   item    | <-- bottom    |   item    | <-- bottom       | undefined |\n// |   item    |               |   item    |                  | undefined |\n// |   item    |               |   item    |                  | undefined |\n// |   item    |               |   item    |                  | undefined |\n// |   item    |               |   item    |       bottom --> |   item    |\n// |   item    |               |   item    |                  |   item    |\n// |    ...    |               |    ...    |                  |    ...    |\n// |   item    |               |   item    |                  |   item    |\n// |   item    |               |   item    |                  |   item    |\n// | undefined | <-- top       |   item    |                  |   item    |\n// | undefined |               |   item    |                  |   item    |\n// | undefined |               | undefined | <-- top  top --> | undefined |\n// +-----------+               +-----------+                  +-----------+\n//\n// Or, if there is only one circular buffer, it looks something\n// like either of these:\n//\n//  head   tail                                 head   tail\n//    |     |                                     |     |\n//    v     v                                     v     v\n// +-----------+                               +-----------+\n// |  [null]   |                               |  [null]   |\n// +-----------+                               +-----------+\n// | undefined |                               |   item    |\n// | undefined |                               |   item    |\n// |   item    | <-- bottom            top --> | undefined |\n// |   item    |                               | undefined |\n// | undefined | <-- top            bottom --> |   item    |\n// | undefined |                               |   item    |\n// +-----------+                               +-----------+\n//\n// Adding a value means moving `top` forward by one, removing means\n// moving `bottom` forward by one. After reaching the end, the queue\n// wraps around.\n//\n// When `top === bottom` the current queue is empty and when\n// `top + 1 === bottom` it's full. This wastes a single space of storage\n// but allows much quicker checks.\n\n/**\n * @type {FixedCircularBuffer}\n * @template T\n */\nclass FixedCircularBuffer {\n  /** @type {number} */\n  bottom = 0\n  /** @type {number} */\n  top = 0\n  /** @type {Array<T|undefined>} */\n  list = new Array(kSize).fill(undefined)\n  /** @type {T|null} */\n  next = null\n\n  /** @returns {boolean} */\n  isEmpty () {\n    return this.top === this.bottom\n  }\n\n  /** @returns {boolean} */\n  isFull () {\n    return ((this.top + 1) & kMask) === this.bottom\n  }\n\n  /**\n   * @param {T} data\n   * @returns {void}\n   */\n  push (data) {\n    this.list[this.top] = data\n    this.top = (this.top + 1) & kMask\n  }\n\n  /** @returns {T|null} */\n  shift () {\n    const nextItem = this.list[this.bottom]\n    if (nextItem === undefined) { return null }\n    this.list[this.bottom] = undefined\n    this.bottom = (this.bottom + 1) & kMask\n    return nextItem\n  }\n}\n\n/**\n * @template T\n */\nmodule.exports = class FixedQueue {\n  constructor () {\n    /** @type {FixedCircularBuffer<T>} */\n    this.head = this.tail = new FixedCircularBuffer()\n  }\n\n  /** @returns {boolean} */\n  isEmpty () {\n    return this.head.isEmpty()\n  }\n\n  /** @param {T} data */\n  push (data) {\n    if (this.head.isFull()) {\n      // Head is full: Creates a new queue, sets the old queue's `.next` to it,\n      // and sets it as the new main queue.\n      this.head = this.head.next = new FixedCircularBuffer()\n    }\n    this.head.push(data)\n  }\n\n  /** @returns {T|null} */\n  shift () {\n    const tail = this.tail\n    const next = tail.shift()\n    if (tail.isEmpty() && tail.next !== null) {\n      // If there is another queue, it forms the new tail.\n      this.tail = tail.next\n      tail.next = null\n    }\n    return next\n  }\n}\n", "'use strict'\n\nconst { PoolStats } = require('../util/stats.js')\nconst DispatcherBase = require('./dispatcher-base')\nconst FixedQueue = require('./fixed-queue')\nconst { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require('../core/symbols')\n\nconst kClients = Symbol('clients')\nconst kNeedDrain = Symbol('needDrain')\nconst kQueue = Symbol('queue')\nconst kClosedResolve = Symbol('closed resolve')\nconst kOnDrain = Symbol('onDrain')\nconst kOnConnect = Symbol('onConnect')\nconst kOnDisconnect = Symbol('onDisconnect')\nconst kOnConnectionError = Symbol('onConnectionError')\nconst kGetDispatcher = Symbol('get dispatcher')\nconst kAddClient = Symbol('add client')\nconst kRemoveClient = Symbol('remove client')\n\nclass PoolBase extends DispatcherBase {\n  [kQueue] = new FixedQueue();\n\n  [kQueued] = 0;\n\n  [kClients] = [];\n\n  [kNeedDrain] = false;\n\n  [kOnDrain] (client, origin, targets) {\n    const queue = this[kQueue]\n\n    let needDrain = false\n\n    while (!needDrain) {\n      const item = queue.shift()\n      if (!item) {\n        break\n      }\n      this[kQueued]--\n      needDrain = !client.dispatch(item.opts, item.handler)\n    }\n\n    client[kNeedDrain] = needDrain\n\n    if (!needDrain && this[kNeedDrain]) {\n      this[kNeedDrain] = false\n      this.emit('drain', origin, [this, ...targets])\n    }\n\n    if (this[kClosedResolve] && queue.isEmpty()) {\n      const closeAll = []\n      for (let i = 0; i < this[kClients].length; i++) {\n        const client = this[kClients][i]\n        if (!client.destroyed) {\n          closeAll.push(client.close())\n        }\n      }\n      return Promise.all(closeAll)\n        .then(this[kClosedResolve])\n    }\n  }\n\n  [kOnConnect] = (origin, targets) => {\n    this.emit('connect', origin, [this, ...targets])\n  };\n\n  [kOnDisconnect] = (origin, targets, err) => {\n    this.emit('disconnect', origin, [this, ...targets], err)\n  };\n\n  [kOnConnectionError] = (origin, targets, err) => {\n    this.emit('connectionError', origin, [this, ...targets], err)\n  }\n\n  get [kBusy] () {\n    return this[kNeedDrain]\n  }\n\n  get [kConnected] () {\n    let ret = 0\n    for (const { [kConnected]: connected } of this[kClients]) {\n      ret += connected\n    }\n    return ret\n  }\n\n  get [kFree] () {\n    let ret = 0\n    for (const { [kConnected]: connected, [kNeedDrain]: needDrain } of this[kClients]) {\n      ret += connected && !needDrain\n    }\n    return ret\n  }\n\n  get [kPending] () {\n    let ret = this[kQueued]\n    for (const { [kPending]: pending } of this[kClients]) {\n      ret += pending\n    }\n    return ret\n  }\n\n  get [kRunning] () {\n    let ret = 0\n    for (const { [kRunning]: running } of this[kClients]) {\n      ret += running\n    }\n    return ret\n  }\n\n  get [kSize] () {\n    let ret = this[kQueued]\n    for (const { [kSize]: size } of this[kClients]) {\n      ret += size\n    }\n    return ret\n  }\n\n  get stats () {\n    return new PoolStats(this)\n  }\n\n  [kClose] () {\n    if (this[kQueue].isEmpty()) {\n      const closeAll = []\n      for (let i = 0; i < this[kClients].length; i++) {\n        const client = this[kClients][i]\n        if (!client.destroyed) {\n          closeAll.push(client.close())\n        }\n      }\n      return Promise.all(closeAll)\n    } else {\n      return new Promise((resolve) => {\n        this[kClosedResolve] = resolve\n      })\n    }\n  }\n\n  [kDestroy] (err) {\n    while (true) {\n      const item = this[kQueue].shift()\n      if (!item) {\n        break\n      }\n      item.handler.onError(err)\n    }\n\n    const destroyAll = new Array(this[kClients].length)\n    for (let i = 0; i < this[kClients].length; i++) {\n      destroyAll[i] = this[kClients][i].destroy(err)\n    }\n    return Promise.all(destroyAll)\n  }\n\n  [kDispatch] (opts, handler) {\n    const dispatcher = this[kGetDispatcher]()\n\n    if (!dispatcher) {\n      this[kNeedDrain] = true\n      this[kQueue].push({ opts, handler })\n      this[kQueued]++\n    } else if (!dispatcher.dispatch(opts, handler)) {\n      dispatcher[kNeedDrain] = true\n      this[kNeedDrain] = !this[kGetDispatcher]()\n    }\n\n    return !this[kNeedDrain]\n  }\n\n  [kAddClient] (client) {\n    client\n      .on('drain', this[kOnDrain].bind(this, client))\n      .on('connect', this[kOnConnect])\n      .on('disconnect', this[kOnDisconnect])\n      .on('connectionError', this[kOnConnectionError])\n\n    this[kClients].push(client)\n\n    if (this[kNeedDrain]) {\n      queueMicrotask(() => {\n        if (this[kNeedDrain]) {\n          this[kOnDrain](client, client[kUrl], [client, this])\n        }\n      })\n    }\n\n    return this\n  }\n\n  [kRemoveClient] (client) {\n    client.close(() => {\n      const idx = this[kClients].indexOf(client)\n      if (idx !== -1) {\n        this[kClients].splice(idx, 1)\n      }\n    })\n\n    this[kNeedDrain] = this[kClients].some(dispatcher => (\n      !dispatcher[kNeedDrain] &&\n      dispatcher.closed !== true &&\n      dispatcher.destroyed !== true\n    ))\n  }\n}\n\nmodule.exports = {\n  PoolBase,\n  kClients,\n  kNeedDrain,\n  kAddClient,\n  kRemoveClient,\n  kGetDispatcher\n}\n", "'use strict'\n\nconst {\n  PoolBase,\n  kClients,\n  kNeedDrain,\n  kAddClient,\n  kGetDispatcher,\n  kRemoveClient\n} = require('./pool-base')\nconst Client = require('./client')\nconst {\n  InvalidArgumentError\n} = require('../core/errors')\nconst util = require('../core/util')\nconst { kUrl } = require('../core/symbols')\nconst buildConnector = require('../core/connect')\n\nconst kOptions = Symbol('options')\nconst kConnections = Symbol('connections')\nconst kFactory = Symbol('factory')\n\nfunction defaultFactory (origin, opts) {\n  return new Client(origin, opts)\n}\n\nclass Pool extends PoolBase {\n  constructor (origin, {\n    connections,\n    factory = defaultFactory,\n    connect,\n    connectTimeout,\n    tls,\n    maxCachedSessions,\n    socketPath,\n    autoSelectFamily,\n    autoSelectFamilyAttemptTimeout,\n    allowH2,\n    clientTtl,\n    ...options\n  } = {}) {\n    if (connections != null && (!Number.isFinite(connections) || connections < 0)) {\n      throw new InvalidArgumentError('invalid connections')\n    }\n\n    if (typeof factory !== 'function') {\n      throw new InvalidArgumentError('factory must be a function.')\n    }\n\n    if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {\n      throw new InvalidArgumentError('connect must be a function or an object')\n    }\n\n    if (typeof connect !== 'function') {\n      connect = buildConnector({\n        ...tls,\n        maxCachedSessions,\n        allowH2,\n        socketPath,\n        timeout: connectTimeout,\n        ...(typeof autoSelectFamily === 'boolean' ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),\n        ...connect\n      })\n    }\n\n    super(options)\n\n    this[kConnections] = connections || null\n    this[kUrl] = util.parseOrigin(origin)\n    this[kOptions] = { ...util.deepClone(options), connect, allowH2, clientTtl, socketPath }\n    this[kOptions].interceptors = options.interceptors\n      ? { ...options.interceptors }\n      : undefined\n    this[kFactory] = factory\n\n    this.on('connect', (origin, targets) => {\n      if (clientTtl != null && clientTtl > 0) {\n        for (const target of targets) {\n          Object.assign(target, { ttl: Date.now() })\n        }\n      }\n    })\n\n    this.on('connectionError', (origin, targets, error) => {\n      // If a connection error occurs, we remove the client from the pool,\n      // and emit a connectionError event. They will not be re-used.\n      // Fixes https://github.com/nodejs/undici/issues/3895\n      for (const target of targets) {\n        // Do not use kRemoveClient here, as it will close the client,\n        // but the client cannot be closed in this state.\n        const idx = this[kClients].indexOf(target)\n        if (idx !== -1) {\n          this[kClients].splice(idx, 1)\n        }\n      }\n    })\n  }\n\n  [kGetDispatcher] () {\n    const clientTtlOption = this[kOptions].clientTtl\n    for (const client of this[kClients]) {\n      // check ttl of client and if it's stale, remove it from the pool\n      if (clientTtlOption != null && clientTtlOption > 0 && client.ttl && ((Date.now() - client.ttl) > clientTtlOption)) {\n        this[kRemoveClient](client)\n      } else if (!client[kNeedDrain]) {\n        return client\n      }\n    }\n\n    if (!this[kConnections] || this[kClients].length < this[kConnections]) {\n      const dispatcher = this[kFactory](this[kUrl], this[kOptions])\n      this[kAddClient](dispatcher)\n      return dispatcher\n    }\n  }\n}\n\nmodule.exports = Pool\n", "'use strict'\n\nconst {\n  BalancedPoolMissingUpstreamError,\n  InvalidArgumentError\n} = require('../core/errors')\nconst {\n  PoolBase,\n  kClients,\n  kNeedDrain,\n  kAddClient,\n  kRemoveClient,\n  kGetDispatcher\n} = require('./pool-base')\nconst Pool = require('./pool')\nconst { kUrl } = require('../core/symbols')\nconst util = require('../core/util')\nconst kFactory = Symbol('factory')\n\nconst kOptions = Symbol('options')\nconst kGreatestCommonDivisor = Symbol('kGreatestCommonDivisor')\nconst kCurrentWeight = Symbol('kCurrentWeight')\nconst kIndex = Symbol('kIndex')\nconst kWeight = Symbol('kWeight')\nconst kMaxWeightPerServer = Symbol('kMaxWeightPerServer')\nconst kErrorPenalty = Symbol('kErrorPenalty')\n\n/**\n * Calculate the greatest common divisor of two numbers by\n * using the Euclidean algorithm.\n *\n * @param {number} a\n * @param {number} b\n * @returns {number}\n */\nfunction getGreatestCommonDivisor (a, b) {\n  if (a === 0) return b\n\n  while (b !== 0) {\n    const t = b\n    b = a % b\n    a = t\n  }\n  return a\n}\n\nfunction defaultFactory (origin, opts) {\n  return new Pool(origin, opts)\n}\n\nclass BalancedPool extends PoolBase {\n  constructor (upstreams = [], { factory = defaultFactory, connect, tls, ...opts } = {}) {\n    if (typeof factory !== 'function') {\n      throw new InvalidArgumentError('factory must be a function.')\n    }\n\n    super(opts)\n\n    if (connect && typeof connect !== 'function') connect = { ...connect }\n    if (tls && typeof tls !== 'function') tls = { ...tls }\n    this[kOptions] = { ...util.deepClone(opts), connect, tls }\n    this[kOptions].interceptors = opts.interceptors\n      ? { ...opts.interceptors }\n      : undefined\n    this[kIndex] = -1\n    this[kCurrentWeight] = 0\n\n    this[kMaxWeightPerServer] = this[kOptions].maxWeightPerServer || 100\n    this[kErrorPenalty] = this[kOptions].errorPenalty || 15\n\n    if (!Array.isArray(upstreams)) {\n      upstreams = [upstreams]\n    }\n\n    this[kFactory] = factory\n\n    for (const upstream of upstreams) {\n      this.addUpstream(upstream)\n    }\n    this._updateBalancedPoolStats()\n  }\n\n  addUpstream (upstream) {\n    const upstreamOrigin = util.parseOrigin(upstream).origin\n\n    if (this[kClients].find((pool) => (\n      pool[kUrl].origin === upstreamOrigin &&\n      pool.closed !== true &&\n      pool.destroyed !== true\n    ))) {\n      return this\n    }\n    const pool = this[kFactory](upstreamOrigin, this[kOptions])\n\n    this[kAddClient](pool)\n    pool.on('connect', () => {\n      pool[kWeight] = Math.min(this[kMaxWeightPerServer], pool[kWeight] + this[kErrorPenalty])\n    })\n\n    pool.on('connectionError', () => {\n      pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty])\n      this._updateBalancedPoolStats()\n    })\n\n    pool.on('disconnect', (...args) => {\n      const err = args[2]\n      if (err && err.code === 'UND_ERR_SOCKET') {\n        // decrease the weight of the pool.\n        pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty])\n        this._updateBalancedPoolStats()\n      }\n    })\n\n    for (const client of this[kClients]) {\n      client[kWeight] = this[kMaxWeightPerServer]\n    }\n\n    this._updateBalancedPoolStats()\n\n    return this\n  }\n\n  _updateBalancedPoolStats () {\n    let result = 0\n    for (let i = 0; i < this[kClients].length; i++) {\n      result = getGreatestCommonDivisor(this[kClients][i][kWeight], result)\n    }\n\n    this[kGreatestCommonDivisor] = result\n  }\n\n  removeUpstream (upstream) {\n    const upstreamOrigin = util.parseOrigin(upstream).origin\n\n    const pool = this[kClients].find((pool) => (\n      pool[kUrl].origin === upstreamOrigin &&\n      pool.closed !== true &&\n      pool.destroyed !== true\n    ))\n\n    if (pool) {\n      this[kRemoveClient](pool)\n    }\n\n    return this\n  }\n\n  getUpstream (upstream) {\n    const upstreamOrigin = util.parseOrigin(upstream).origin\n\n    return this[kClients].find((pool) => (\n      pool[kUrl].origin === upstreamOrigin &&\n      pool.closed !== true &&\n      pool.destroyed !== true\n    ))\n  }\n\n  get upstreams () {\n    return this[kClients]\n      .filter(dispatcher => dispatcher.closed !== true && dispatcher.destroyed !== true)\n      .map((p) => p[kUrl].origin)\n  }\n\n  [kGetDispatcher] () {\n    // We validate that pools is greater than 0,\n    // otherwise we would have to wait until an upstream\n    // is added, which might never happen.\n    if (this[kClients].length === 0) {\n      throw new BalancedPoolMissingUpstreamError()\n    }\n\n    const dispatcher = this[kClients].find(dispatcher => (\n      !dispatcher[kNeedDrain] &&\n      dispatcher.closed !== true &&\n      dispatcher.destroyed !== true\n    ))\n\n    if (!dispatcher) {\n      return\n    }\n\n    const allClientsBusy = this[kClients].map(pool => pool[kNeedDrain]).reduce((a, b) => a && b, true)\n\n    if (allClientsBusy) {\n      return\n    }\n\n    let counter = 0\n\n    let maxWeightIndex = this[kClients].findIndex(pool => !pool[kNeedDrain])\n\n    while (counter++ < this[kClients].length) {\n      this[kIndex] = (this[kIndex] + 1) % this[kClients].length\n      const pool = this[kClients][this[kIndex]]\n\n      // find pool index with the largest weight\n      if (pool[kWeight] > this[kClients][maxWeightIndex][kWeight] && !pool[kNeedDrain]) {\n        maxWeightIndex = this[kIndex]\n      }\n\n      // decrease the current weight every `this[kClients].length`.\n      if (this[kIndex] === 0) {\n        // Set the current weight to the next lower weight.\n        this[kCurrentWeight] = this[kCurrentWeight] - this[kGreatestCommonDivisor]\n\n        if (this[kCurrentWeight] <= 0) {\n          this[kCurrentWeight] = this[kMaxWeightPerServer]\n        }\n      }\n      if (pool[kWeight] >= this[kCurrentWeight] && (!pool[kNeedDrain])) {\n        return pool\n      }\n    }\n\n    this[kCurrentWeight] = this[kClients][maxWeightIndex][kWeight]\n    this[kIndex] = maxWeightIndex\n    return this[kClients][maxWeightIndex]\n  }\n}\n\nmodule.exports = BalancedPool\n", "'use strict'\n\nconst {\n  PoolBase,\n  kClients,\n  kNeedDrain,\n  kAddClient,\n  kGetDispatcher,\n  kRemoveClient\n} = require('./pool-base')\nconst Client = require('./client')\nconst {\n  InvalidArgumentError\n} = require('../core/errors')\nconst util = require('../core/util')\nconst { kUrl } = require('../core/symbols')\nconst buildConnector = require('../core/connect')\n\nconst kOptions = Symbol('options')\nconst kConnections = Symbol('connections')\nconst kFactory = Symbol('factory')\nconst kIndex = Symbol('index')\n\nfunction defaultFactory (origin, opts) {\n  return new Client(origin, opts)\n}\n\nclass RoundRobinPool extends PoolBase {\n  constructor (origin, {\n    connections,\n    factory = defaultFactory,\n    connect,\n    connectTimeout,\n    tls,\n    maxCachedSessions,\n    socketPath,\n    autoSelectFamily,\n    autoSelectFamilyAttemptTimeout,\n    allowH2,\n    clientTtl,\n    ...options\n  } = {}) {\n    if (connections != null && (!Number.isFinite(connections) || connections < 0)) {\n      throw new InvalidArgumentError('invalid connections')\n    }\n\n    if (typeof factory !== 'function') {\n      throw new InvalidArgumentError('factory must be a function.')\n    }\n\n    if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {\n      throw new InvalidArgumentError('connect must be a function or an object')\n    }\n\n    if (typeof connect !== 'function') {\n      connect = buildConnector({\n        ...tls,\n        maxCachedSessions,\n        allowH2,\n        socketPath,\n        timeout: connectTimeout,\n        ...(typeof autoSelectFamily === 'boolean' ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),\n        ...connect\n      })\n    }\n\n    super()\n\n    this[kConnections] = connections || null\n    this[kUrl] = util.parseOrigin(origin)\n    this[kOptions] = { ...util.deepClone(options), connect, allowH2, clientTtl, socketPath }\n    this[kOptions].interceptors = options.interceptors\n      ? { ...options.interceptors }\n      : undefined\n    this[kFactory] = factory\n    this[kIndex] = -1\n\n    this.on('connect', (origin, targets) => {\n      if (clientTtl != null && clientTtl > 0) {\n        for (const target of targets) {\n          Object.assign(target, { ttl: Date.now() })\n        }\n      }\n    })\n\n    this.on('connectionError', (origin, targets, error) => {\n      for (const target of targets) {\n        const idx = this[kClients].indexOf(target)\n        if (idx !== -1) {\n          this[kClients].splice(idx, 1)\n        }\n      }\n    })\n  }\n\n  [kGetDispatcher] () {\n    const clientTtlOption = this[kOptions].clientTtl\n    const clientsLength = this[kClients].length\n\n    // If we have no clients yet, create one\n    if (clientsLength === 0) {\n      const dispatcher = this[kFactory](this[kUrl], this[kOptions])\n      this[kAddClient](dispatcher)\n      return dispatcher\n    }\n\n    // Round-robin through existing clients\n    let checked = 0\n    while (checked < clientsLength) {\n      this[kIndex] = (this[kIndex] + 1) % clientsLength\n      const client = this[kClients][this[kIndex]]\n\n      // Check if client is stale (TTL expired)\n      if (clientTtlOption != null && clientTtlOption > 0 && client.ttl && ((Date.now() - client.ttl) > clientTtlOption)) {\n        this[kRemoveClient](client)\n        checked++\n        continue\n      }\n\n      // Return client if it's not draining\n      if (!client[kNeedDrain]) {\n        return client\n      }\n\n      checked++\n    }\n\n    // All clients are busy, create a new one if we haven't reached the limit\n    if (!this[kConnections] || clientsLength < this[kConnections]) {\n      const dispatcher = this[kFactory](this[kUrl], this[kOptions])\n      this[kAddClient](dispatcher)\n      return dispatcher\n    }\n  }\n}\n\nmodule.exports = RoundRobinPool\n", "'use strict'\n\nconst { InvalidArgumentError, MaxOriginsReachedError } = require('../core/errors')\nconst { kClients, kRunning, kClose, kDestroy, kDispatch, kUrl } = require('../core/symbols')\nconst DispatcherBase = require('./dispatcher-base')\nconst Pool = require('./pool')\nconst Client = require('./client')\nconst util = require('../core/util')\n\nconst kOnConnect = Symbol('onConnect')\nconst kOnDisconnect = Symbol('onDisconnect')\nconst kOnConnectionError = Symbol('onConnectionError')\nconst kOnDrain = Symbol('onDrain')\nconst kFactory = Symbol('factory')\nconst kOptions = Symbol('options')\nconst kOrigins = Symbol('origins')\n\nfunction defaultFactory (origin, opts) {\n  return opts && opts.connections === 1\n    ? new Client(origin, opts)\n    : new Pool(origin, opts)\n}\n\nclass Agent extends DispatcherBase {\n  constructor ({ factory = defaultFactory, maxOrigins = Infinity, connect, ...options } = {}) {\n    if (typeof factory !== 'function') {\n      throw new InvalidArgumentError('factory must be a function.')\n    }\n\n    if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') {\n      throw new InvalidArgumentError('connect must be a function or an object')\n    }\n\n    if (typeof maxOrigins !== 'number' || Number.isNaN(maxOrigins) || maxOrigins <= 0) {\n      throw new InvalidArgumentError('maxOrigins must be a number greater than 0')\n    }\n\n    super(options)\n\n    if (connect && typeof connect !== 'function') {\n      connect = { ...connect }\n    }\n\n    this[kOptions] = { ...util.deepClone(options), maxOrigins, connect }\n    this[kFactory] = factory\n    this[kClients] = new Map()\n    this[kOrigins] = new Set()\n\n    this[kOnDrain] = (origin, targets) => {\n      this.emit('drain', origin, [this, ...targets])\n    }\n\n    this[kOnConnect] = (origin, targets) => {\n      this.emit('connect', origin, [this, ...targets])\n    }\n\n    this[kOnDisconnect] = (origin, targets, err) => {\n      this.emit('disconnect', origin, [this, ...targets], err)\n    }\n\n    this[kOnConnectionError] = (origin, targets, err) => {\n      this.emit('connectionError', origin, [this, ...targets], err)\n    }\n  }\n\n  get [kRunning] () {\n    let ret = 0\n    for (const { dispatcher } of this[kClients].values()) {\n      ret += dispatcher[kRunning]\n    }\n    return ret\n  }\n\n  [kDispatch] (opts, handler) {\n    let key\n    if (opts.origin && (typeof opts.origin === 'string' || opts.origin instanceof URL)) {\n      key = String(opts.origin)\n    } else {\n      throw new InvalidArgumentError('opts.origin must be a non-empty string or URL.')\n    }\n\n    if (this[kOrigins].size >= this[kOptions].maxOrigins && !this[kOrigins].has(key)) {\n      throw new MaxOriginsReachedError()\n    }\n\n    const result = this[kClients].get(key)\n    let dispatcher = result && result.dispatcher\n    if (!dispatcher) {\n      const closeClientIfUnused = (connected) => {\n        const result = this[kClients].get(key)\n        if (result) {\n          if (connected) result.count -= 1\n          if (result.count <= 0) {\n            this[kClients].delete(key)\n            if (!result.dispatcher.destroyed) {\n              result.dispatcher.close()\n            }\n          }\n          this[kOrigins].delete(key)\n        }\n      }\n      dispatcher = this[kFactory](opts.origin, this[kOptions])\n        .on('drain', this[kOnDrain])\n        .on('connect', (origin, targets) => {\n          const result = this[kClients].get(key)\n          if (result) {\n            result.count += 1\n          }\n          this[kOnConnect](origin, targets)\n        })\n        .on('disconnect', (origin, targets, err) => {\n          closeClientIfUnused(true)\n          this[kOnDisconnect](origin, targets, err)\n        })\n        .on('connectionError', (origin, targets, err) => {\n          closeClientIfUnused(false)\n          this[kOnConnectionError](origin, targets, err)\n        })\n\n      this[kClients].set(key, { count: 0, dispatcher })\n      this[kOrigins].add(key)\n    }\n\n    return dispatcher.dispatch(opts, handler)\n  }\n\n  [kClose] () {\n    const closePromises = []\n    for (const { dispatcher } of this[kClients].values()) {\n      closePromises.push(dispatcher.close())\n    }\n    this[kClients].clear()\n\n    return Promise.all(closePromises)\n  }\n\n  [kDestroy] (err) {\n    const destroyPromises = []\n    for (const { dispatcher } of this[kClients].values()) {\n      destroyPromises.push(dispatcher.destroy(err))\n    }\n    this[kClients].clear()\n\n    return Promise.all(destroyPromises)\n  }\n\n  get stats () {\n    const allClientStats = {}\n    for (const { dispatcher } of this[kClients].values()) {\n      if (dispatcher.stats) {\n        allClientStats[dispatcher[kUrl].origin] = dispatcher.stats\n      }\n    }\n    return allClientStats\n  }\n}\n\nmodule.exports = Agent\n", "'use strict'\n\nconst { Buffer } = require('node:buffer')\nconst net = require('node:net')\nconst { InvalidArgumentError } = require('./errors')\n\n/**\n * Parse an address and determine its type\n * @param {string} address - The address to parse\n * @returns {{type: number, buffer: Buffer}} Address type and buffer\n */\nfunction parseAddress (address) {\n  // Check if it's an IPv4 address\n  if (net.isIPv4(address)) {\n    const parts = address.split('.').map(Number)\n    return {\n      type: 0x01, // IPv4\n      buffer: Buffer.from(parts)\n    }\n  }\n\n  // Check if it's an IPv6 address\n  if (net.isIPv6(address)) {\n    return {\n      type: 0x04, // IPv6\n      buffer: parseIPv6(address)\n    }\n  }\n\n  // Otherwise, treat as domain name\n  const domainBuffer = Buffer.from(address, 'utf8')\n  if (domainBuffer.length > 255) {\n    throw new InvalidArgumentError('Domain name too long (max 255 bytes)')\n  }\n\n  return {\n    type: 0x03, // Domain\n    buffer: Buffer.concat([Buffer.from([domainBuffer.length]), domainBuffer])\n  }\n}\n\n/**\n * Parse IPv6 address to buffer\n * @param {string} address - IPv6 address string\n * @returns {Buffer} 16-byte buffer\n */\nfunction parseIPv6 (address) {\n  const buffer = Buffer.alloc(16)\n  let normalizedAddress = address\n\n  // Expand an embedded IPv4 tail into the last two IPv6 groups.\n  if (address.includes('.')) {\n    const lastColonIndex = address.lastIndexOf(':')\n    const ipv4Part = address.slice(lastColonIndex + 1)\n\n    if (net.isIPv4(ipv4Part)) {\n      const octets = ipv4Part.split('.').map(Number)\n      const high = ((octets[0] << 8) | octets[1]).toString(16)\n      const low = ((octets[2] << 8) | octets[3]).toString(16)\n      normalizedAddress = `${address.slice(0, lastColonIndex)}:${high}:${low}`\n    }\n  }\n\n  // Handle compressed notation (::)\n  const doubleColonIndex = normalizedAddress.indexOf('::')\n  if (doubleColonIndex !== -1) {\n    const before = normalizedAddress.slice(0, doubleColonIndex)\n    const after = normalizedAddress.slice(doubleColonIndex + 2)\n    const beforeParts = before === '' ? [] : before.split(':')\n    const afterParts = after === '' ? [] : after.split(':')\n\n    let bufferIndex = 0\n    for (const part of beforeParts) {\n      buffer.writeUInt16BE(parseInt(part, 16), bufferIndex)\n      bufferIndex += 2\n    }\n    bufferIndex = 16 - afterParts.length * 2\n    for (const part of afterParts) {\n      buffer.writeUInt16BE(parseInt(part, 16), bufferIndex)\n      bufferIndex += 2\n    }\n  } else {\n    const parts = normalizedAddress.split(':')\n    for (let i = 0; i < parts.length; i++) {\n      buffer.writeUInt16BE(parseInt(parts[i], 16), i * 2)\n    }\n  }\n\n  return buffer\n}\n\n/**\n * Build a SOCKS5 address buffer\n * @param {number} type - Address type (1=IPv4, 3=Domain, 4=IPv6)\n * @param {Buffer} addressBuffer - The address data\n * @param {number} port - Port number\n * @returns {Buffer} Complete address buffer including type, address, and port\n */\nfunction buildAddressBuffer (type, addressBuffer, port) {\n  const portBuffer = Buffer.allocUnsafe(2)\n  portBuffer.writeUInt16BE(port, 0)\n\n  return Buffer.concat([\n    Buffer.from([type]),\n    addressBuffer,\n    portBuffer\n  ])\n}\n\n/**\n * Parse address from SOCKS5 response\n * @param {Buffer} buffer - Buffer containing the address\n * @param {number} offset - Starting offset in buffer\n * @returns {{address: string, port: number, bytesRead: number}}\n */\nfunction parseResponseAddress (buffer, offset = 0) {\n  if (buffer.length < offset + 1) {\n    throw new InvalidArgumentError('Buffer too small to contain address type')\n  }\n\n  const addressType = buffer[offset]\n  let address\n  let currentOffset = offset + 1\n\n  switch (addressType) {\n    case 0x01: { // IPv4\n      if (buffer.length < currentOffset + 6) {\n        throw new InvalidArgumentError('Buffer too small for IPv4 address')\n      }\n      address = Array.from(buffer.subarray(currentOffset, currentOffset + 4)).join('.')\n      currentOffset += 4\n      break\n    }\n\n    case 0x03: { // Domain\n      if (buffer.length < currentOffset + 1) {\n        throw new InvalidArgumentError('Buffer too small for domain length')\n      }\n      const domainLength = buffer[currentOffset]\n      currentOffset += 1\n\n      if (buffer.length < currentOffset + domainLength + 2) {\n        throw new InvalidArgumentError('Buffer too small for domain address')\n      }\n      address = buffer.subarray(currentOffset, currentOffset + domainLength).toString('utf8')\n      currentOffset += domainLength\n      break\n    }\n\n    case 0x04: { // IPv6\n      if (buffer.length < currentOffset + 18) {\n        throw new InvalidArgumentError('Buffer too small for IPv6 address')\n      }\n      // Convert buffer to IPv6 string\n      const parts = []\n      for (let i = 0; i < 8; i++) {\n        const value = buffer.readUInt16BE(currentOffset + i * 2)\n        parts.push(value.toString(16))\n      }\n      address = parts.join(':')\n      currentOffset += 16\n      break\n    }\n\n    default:\n      throw new InvalidArgumentError(`Invalid address type: ${addressType}`)\n  }\n\n  // Parse port\n  if (buffer.length < currentOffset + 2) {\n    throw new InvalidArgumentError('Buffer too small for port')\n  }\n  const port = buffer.readUInt16BE(currentOffset)\n  currentOffset += 2\n\n  return {\n    address,\n    port,\n    bytesRead: currentOffset - offset\n  }\n}\n\n/**\n * Create error for SOCKS5 reply code\n * @param {number} replyCode - SOCKS5 reply code\n * @returns {Error} Appropriate error object\n */\nfunction createReplyError (replyCode) {\n  const messages = {\n    0x01: 'General SOCKS server failure',\n    0x02: 'Connection not allowed by ruleset',\n    0x03: 'Network unreachable',\n    0x04: 'Host unreachable',\n    0x05: 'Connection refused',\n    0x06: 'TTL expired',\n    0x07: 'Command not supported',\n    0x08: 'Address type not supported'\n  }\n\n  const message = messages[replyCode] || `Unknown SOCKS5 error code: ${replyCode}`\n  const error = new Error(message)\n  error.code = `SOCKS5_${replyCode}`\n  return error\n}\n\nmodule.exports = {\n  parseAddress,\n  parseIPv6,\n  buildAddressBuffer,\n  parseResponseAddress,\n  createReplyError\n}\n", "'use strict'\n\nconst { EventEmitter } = require('node:events')\nconst { Buffer } = require('node:buffer')\nconst { InvalidArgumentError, Socks5ProxyError } = require('./errors')\nconst { debuglog } = require('node:util')\nconst { parseAddress } = require('./socks5-utils')\n\nconst debug = debuglog('undici:socks5')\nconst EMPTY_BUFFER = Buffer.alloc(0)\n\n// SOCKS5 constants\nconst SOCKS_VERSION = 0x05\n\n// Authentication methods\nconst AUTH_METHODS = {\n  NO_AUTH: 0x00,\n  GSSAPI: 0x01,\n  USERNAME_PASSWORD: 0x02,\n  NO_ACCEPTABLE: 0xFF\n}\n\n// SOCKS5 commands\nconst COMMANDS = {\n  CONNECT: 0x01,\n  BIND: 0x02,\n  UDP_ASSOCIATE: 0x03\n}\n\n// Address types\nconst ADDRESS_TYPES = {\n  IPV4: 0x01,\n  DOMAIN: 0x03,\n  IPV6: 0x04\n}\n\n// Reply codes\nconst REPLY_CODES = {\n  SUCCEEDED: 0x00,\n  GENERAL_FAILURE: 0x01,\n  CONNECTION_NOT_ALLOWED: 0x02,\n  NETWORK_UNREACHABLE: 0x03,\n  HOST_UNREACHABLE: 0x04,\n  CONNECTION_REFUSED: 0x05,\n  TTL_EXPIRED: 0x06,\n  COMMAND_NOT_SUPPORTED: 0x07,\n  ADDRESS_TYPE_NOT_SUPPORTED: 0x08\n}\n\n// State machine states\nconst STATES = {\n  INITIAL: 'initial',\n  HANDSHAKING: 'handshaking',\n  AUTHENTICATING: 'authenticating',\n  AUTHENTICATED: 'authenticated',\n  CONNECTING: 'connecting',\n  CONNECTED: 'connected',\n  ERROR: 'error',\n  CLOSED: 'closed'\n}\n\n/**\n * SOCKS5 client implementation\n * Handles SOCKS5 protocol negotiation and connection establishment\n */\nclass Socks5Client extends EventEmitter {\n  constructor (socket, options = {}) {\n    super()\n\n    if (!socket) {\n      throw new InvalidArgumentError('socket is required')\n    }\n\n    this.socket = socket\n    this.options = options\n    this.state = STATES.INITIAL\n    this.buffer = EMPTY_BUFFER\n    this.onSocketData = this.onData.bind(this)\n    this.onSocketError = this.onError.bind(this)\n    this.onSocketClose = this.onClose.bind(this)\n\n    // Authentication settings\n    this.authMethods = []\n    if (options.username && options.password) {\n      this.authMethods.push(AUTH_METHODS.USERNAME_PASSWORD)\n    }\n    this.authMethods.push(AUTH_METHODS.NO_AUTH)\n\n    // Socket event handlers\n    this.socket.on('data', this.onSocketData)\n    this.socket.on('error', this.onSocketError)\n    this.socket.on('close', this.onSocketClose)\n  }\n\n  /**\n   * Handle incoming data from the socket\n   */\n  onData (data) {\n    debug('received data', data.length, 'bytes in state', this.state)\n    this.buffer = Buffer.concat([this.buffer, data])\n\n    try {\n      switch (this.state) {\n        case STATES.HANDSHAKING:\n          this.handleHandshakeResponse()\n          break\n        case STATES.AUTHENTICATING:\n          this.handleAuthResponse()\n          break\n        case STATES.CONNECTING:\n          this.handleConnectResponse()\n          break\n      }\n    } catch (err) {\n      this.onError(err)\n    }\n  }\n\n  /**\n   * Handle socket errors\n   */\n  onError (err) {\n    debug('socket error', err)\n    this.state = STATES.ERROR\n    this.emit('error', err)\n    this.destroy()\n  }\n\n  /**\n   * Handle socket close\n   */\n  onClose () {\n    debug('socket closed')\n    this.state = STATES.CLOSED\n    this.emit('close')\n  }\n\n  /**\n   * Destroy the client and underlying socket\n   */\n  destroy () {\n    if (this.socket && !this.socket.destroyed) {\n      this.socket.destroy()\n    }\n  }\n\n  markAuthenticated () {\n    this.state = STATES.AUTHENTICATED\n    this.emit('authenticated')\n  }\n\n  /**\n   * Start the SOCKS5 handshake\n   */\n  handshake () {\n    if (this.state !== STATES.INITIAL) {\n      throw new InvalidArgumentError('Handshake already started')\n    }\n\n    debug('starting handshake with', this.authMethods.length, 'auth methods')\n    this.state = STATES.HANDSHAKING\n\n    // Build handshake request\n    // +----+----------+----------+\n    // |VER | NMETHODS | METHODS  |\n    // +----+----------+----------+\n    // | 1  |    1     | 1 to 255 |\n    // +----+----------+----------+\n    const request = Buffer.alloc(2 + this.authMethods.length)\n    request[0] = SOCKS_VERSION\n    request[1] = this.authMethods.length\n    this.authMethods.forEach((method, i) => {\n      request[2 + i] = method\n    })\n\n    this.socket.write(request)\n  }\n\n  /**\n   * Handle handshake response from server\n   */\n  handleHandshakeResponse () {\n    if (this.buffer.length < 2) {\n      return // Not enough data yet\n    }\n\n    const version = this.buffer[0]\n    const method = this.buffer[1]\n\n    if (version !== SOCKS_VERSION) {\n      throw new Socks5ProxyError(`Invalid SOCKS version: ${version}`, 'UND_ERR_SOCKS5_VERSION')\n    }\n\n    if (method === AUTH_METHODS.NO_ACCEPTABLE) {\n      throw new Socks5ProxyError('No acceptable authentication method', 'UND_ERR_SOCKS5_AUTH_REJECTED')\n    }\n\n    this.buffer = this.buffer.subarray(2)\n    debug('server selected auth method', method)\n\n    if (method === AUTH_METHODS.NO_AUTH) {\n      this.markAuthenticated()\n    } else if (method === AUTH_METHODS.USERNAME_PASSWORD) {\n      this.state = STATES.AUTHENTICATING\n      this.sendAuthRequest()\n    } else {\n      throw new Socks5ProxyError(`Unsupported authentication method: ${method}`, 'UND_ERR_SOCKS5_AUTH_METHOD')\n    }\n  }\n\n  /**\n   * Send username/password authentication request\n   */\n  sendAuthRequest () {\n    const { username, password } = this.options\n\n    if (!username || !password) {\n      throw new InvalidArgumentError('Username and password required for authentication')\n    }\n\n    debug('sending username/password auth')\n\n    // Username/Password authentication request (RFC 1929)\n    // +----+------+----------+------+----------+\n    // |VER | ULEN |  UNAME   | PLEN |  PASSWD  |\n    // +----+------+----------+------+----------+\n    // | 1  |  1   | 1 to 255 |  1   | 1 to 255 |\n    // +----+------+----------+------+----------+\n    const usernameBuffer = Buffer.from(username)\n    const passwordBuffer = Buffer.from(password)\n\n    if (usernameBuffer.length > 255 || passwordBuffer.length > 255) {\n      throw new InvalidArgumentError('Username or password too long')\n    }\n\n    const request = Buffer.alloc(3 + usernameBuffer.length + passwordBuffer.length)\n    request[0] = 0x01 // Sub-negotiation version\n    request[1] = usernameBuffer.length\n    usernameBuffer.copy(request, 2)\n    request[2 + usernameBuffer.length] = passwordBuffer.length\n    passwordBuffer.copy(request, 3 + usernameBuffer.length)\n\n    this.socket.write(request)\n  }\n\n  /**\n   * Handle authentication response\n   */\n  handleAuthResponse () {\n    if (this.buffer.length < 2) {\n      return // Not enough data yet\n    }\n\n    const version = this.buffer[0]\n    const status = this.buffer[1]\n\n    if (version !== 0x01) {\n      throw new Socks5ProxyError(`Invalid auth sub-negotiation version: ${version}`, 'UND_ERR_SOCKS5_AUTH_VERSION')\n    }\n\n    if (status !== 0x00) {\n      throw new Socks5ProxyError('Authentication failed', 'UND_ERR_SOCKS5_AUTH_FAILED')\n    }\n\n    this.buffer = this.buffer.subarray(2)\n    debug('authentication successful')\n    this.markAuthenticated()\n  }\n\n  /**\n   * Send CONNECT command\n   * @param {string} address - Target address (IP or domain)\n   * @param {number} port - Target port\n   */\n  connect (address, port) {\n    if (this.state === STATES.CONNECTING || this.state === STATES.CONNECTED) {\n      throw new InvalidArgumentError('Connection already in progress')\n    }\n\n    if (this.state !== STATES.AUTHENTICATED) {\n      throw new InvalidArgumentError('Client must be authenticated before CONNECT')\n    }\n\n    debug('connecting to', address, port)\n    this.state = STATES.CONNECTING\n\n    const request = this.buildConnectRequest(COMMANDS.CONNECT, address, port)\n    this.socket.write(request)\n  }\n\n  /**\n   * Build a SOCKS5 request\n   */\n  buildConnectRequest (command, address, port) {\n    // Parse address to determine type and buffer\n    const { type: addressType, buffer: addressBuffer } = parseAddress(address)\n\n    // Build request\n    // +----+-----+-------+------+----------+----------+\n    // |VER | CMD |  RSV  | ATYP | DST.ADDR | DST.PORT |\n    // +----+-----+-------+------+----------+----------+\n    // | 1  |  1  | X'00' |  1   | Variable |    2     |\n    // +----+-----+-------+------+----------+----------+\n    const request = Buffer.alloc(4 + addressBuffer.length + 2)\n    request[0] = SOCKS_VERSION\n    request[1] = command\n    request[2] = 0x00 // Reserved\n    request[3] = addressType\n    addressBuffer.copy(request, 4)\n    request.writeUInt16BE(port, 4 + addressBuffer.length)\n\n    return request\n  }\n\n  /**\n   * Handle CONNECT response\n   */\n  handleConnectResponse () {\n    if (this.buffer.length < 4) {\n      return // Not enough data for header\n    }\n\n    const version = this.buffer[0]\n    const reply = this.buffer[1]\n    const addressType = this.buffer[3]\n\n    if (version !== SOCKS_VERSION) {\n      throw new Socks5ProxyError(`Invalid SOCKS version in reply: ${version}`, 'UND_ERR_SOCKS5_REPLY_VERSION')\n    }\n\n    // Calculate the expected response length\n    let responseLength = 4 // VER + REP + RSV + ATYP\n    if (addressType === ADDRESS_TYPES.IPV4) {\n      responseLength += 4 + 2 // IPv4 + port\n    } else if (addressType === ADDRESS_TYPES.DOMAIN) {\n      if (this.buffer.length < 5) {\n        return // Need domain length byte\n      }\n      responseLength += 1 + this.buffer[4] + 2 // length byte + domain + port\n    } else if (addressType === ADDRESS_TYPES.IPV6) {\n      responseLength += 16 + 2 // IPv6 + port\n    } else {\n      throw new Socks5ProxyError(`Invalid address type in reply: ${addressType}`, 'UND_ERR_SOCKS5_ADDR_TYPE')\n    }\n\n    if (this.buffer.length < responseLength) {\n      return // Not enough data for full response\n    }\n\n    if (reply !== REPLY_CODES.SUCCEEDED) {\n      const errorMessage = this.getReplyErrorMessage(reply)\n      throw new Socks5ProxyError(`SOCKS5 connection failed: ${errorMessage}`, `UND_ERR_SOCKS5_REPLY_${reply}`)\n    }\n\n    // Parse bound address and port\n    let boundAddress\n    let offset = 4\n\n    if (addressType === ADDRESS_TYPES.IPV4) {\n      boundAddress = Array.from(this.buffer.subarray(offset, offset + 4)).join('.')\n      offset += 4\n    } else if (addressType === ADDRESS_TYPES.DOMAIN) {\n      const domainLength = this.buffer[offset]\n      offset += 1\n      boundAddress = this.buffer.subarray(offset, offset + domainLength).toString()\n      offset += domainLength\n    } else if (addressType === ADDRESS_TYPES.IPV6) {\n      // Parse IPv6 address from 16-byte buffer\n      const parts = []\n      for (let i = 0; i < 8; i++) {\n        const value = this.buffer.readUInt16BE(offset + i * 2)\n        parts.push(value.toString(16))\n      }\n      boundAddress = parts.join(':')\n      offset += 16\n    }\n\n    const boundPort = this.buffer.readUInt16BE(offset)\n\n    this.buffer = EMPTY_BUFFER\n    this.state = STATES.CONNECTED\n    this.socket.removeListener('data', this.onSocketData)\n\n    debug('connected, bound address:', boundAddress, 'port:', boundPort)\n    this.emit('connected', { address: boundAddress, port: boundPort })\n  }\n\n  /**\n   * Get human-readable error message for reply code\n   */\n  getReplyErrorMessage (reply) {\n    switch (reply) {\n      case REPLY_CODES.GENERAL_FAILURE:\n        return 'General SOCKS server failure'\n      case REPLY_CODES.CONNECTION_NOT_ALLOWED:\n        return 'Connection not allowed by ruleset'\n      case REPLY_CODES.NETWORK_UNREACHABLE:\n        return 'Network unreachable'\n      case REPLY_CODES.HOST_UNREACHABLE:\n        return 'Host unreachable'\n      case REPLY_CODES.CONNECTION_REFUSED:\n        return 'Connection refused'\n      case REPLY_CODES.TTL_EXPIRED:\n        return 'TTL expired'\n      case REPLY_CODES.COMMAND_NOT_SUPPORTED:\n        return 'Command not supported'\n      case REPLY_CODES.ADDRESS_TYPE_NOT_SUPPORTED:\n        return 'Address type not supported'\n      default:\n        return `Unknown error code: ${reply}`\n    }\n  }\n}\n\nmodule.exports = {\n  Socks5Client,\n  AUTH_METHODS,\n  COMMANDS,\n  ADDRESS_TYPES,\n  REPLY_CODES,\n  STATES\n}\n", "'use strict'\n\nconst { URL } = require('node:url')\n\nlet tls // include tls conditionally since it is not always available\nconst DispatcherBase = require('./dispatcher-base')\nconst { InvalidArgumentError } = require('../core/errors')\nconst { Socks5Client, STATES } = require('../core/socks5-client')\nconst { kDispatch, kClose, kDestroy } = require('../core/symbols')\nconst Pool = require('./pool')\nconst buildConnector = require('../core/connect')\nconst { debuglog } = require('node:util')\n\nconst debug = debuglog('undici:socks5-proxy')\n\nconst kProxyUrl = Symbol('proxy url')\nconst kProxyHeaders = Symbol('proxy headers')\nconst kProxyAuth = Symbol('proxy auth')\nconst kProxyProtocol = Symbol('proxy protocol')\nconst kPools = Symbol('pools')\nconst kConnector = Symbol('connector')\nconst kRequestTls = Symbol('request tls settings')\n\n// Static flag to ensure warning is only emitted once per process\nlet experimentalWarningEmitted = false\n\n/**\n * SOCKS5 proxy agent for dispatching requests through a SOCKS5 proxy\n */\nclass Socks5ProxyAgent extends DispatcherBase {\n  constructor (proxyUrl, options = {}) {\n    super()\n\n    // Emit experimental warning only once\n    if (!experimentalWarningEmitted) {\n      process.emitWarning(\n        'SOCKS5 proxy support is experimental and subject to change',\n        'ExperimentalWarning'\n      )\n      experimentalWarningEmitted = true\n    }\n\n    if (!proxyUrl) {\n      throw new InvalidArgumentError('Proxy URL is mandatory')\n    }\n\n    // Parse proxy URL\n    const url = typeof proxyUrl === 'string' ? new URL(proxyUrl) : proxyUrl\n\n    if (url.protocol !== 'socks5:' && url.protocol !== 'socks:') {\n      throw new InvalidArgumentError('Proxy URL must use socks5:// or socks:// protocol')\n    }\n\n    this[kProxyUrl] = url\n    this[kProxyHeaders] = options.headers || {}\n    this[kProxyProtocol] = options.proxyTls ? 'https:' : 'http:'\n    this[kRequestTls] = options.requestTls\n\n    // Extract auth from URL or options\n    this[kProxyAuth] = {\n      username: options.username || (url.username ? decodeURIComponent(url.username) : null),\n      password: options.password || (url.password ? decodeURIComponent(url.password) : null)\n    }\n\n    // Create connector for proxy connection\n    this[kConnector] = options.connect || buildConnector({\n      ...options.proxyTls,\n      servername: options.proxyTls?.servername || url.hostname\n    })\n\n    // Pools for the actual HTTP connections (with SOCKS5 tunnel connect function), keyed by origin\n    this[kPools] = new Map()\n  }\n\n  /**\n   * Create a SOCKS5 connection to the proxy\n   */\n  async createSocks5Connection (targetHost, targetPort) {\n    const proxyHost = this[kProxyUrl].hostname\n    const proxyPort = parseInt(this[kProxyUrl].port) || 1080\n\n    debug('creating SOCKS5 connection to', proxyHost, proxyPort)\n\n    // Connect to the SOCKS5 proxy\n    const socket = await new Promise((resolve, reject) => {\n      this[kConnector]({\n        hostname: proxyHost,\n        host: proxyHost,\n        port: proxyPort,\n        protocol: this[kProxyProtocol]\n      }, (err, socket) => {\n        if (err) {\n          reject(err)\n        } else {\n          resolve(socket)\n        }\n      })\n    })\n\n    // Create SOCKS5 client\n    const socks5Client = new Socks5Client(socket, this[kProxyAuth])\n\n    // Handle SOCKS5 errors\n    socks5Client.on('error', (err) => {\n      debug('SOCKS5 error:', err)\n      socket.destroy()\n    })\n\n    // Perform SOCKS5 handshake\n    await socks5Client.handshake()\n\n    // Wait for authentication (if required)\n    await new Promise((resolve, reject) => {\n      const timeout = setTimeout(() => {\n        reject(new Error('SOCKS5 authentication timeout'))\n      }, 5000)\n\n      const onAuthenticated = () => {\n        clearTimeout(timeout)\n        socks5Client.removeListener('error', onError)\n        resolve()\n      }\n\n      const onError = (err) => {\n        clearTimeout(timeout)\n        socks5Client.removeListener('authenticated', onAuthenticated)\n        reject(err)\n      }\n\n      // Check if already authenticated (for NO_AUTH method)\n      if (socks5Client.state === STATES.AUTHENTICATED) {\n        clearTimeout(timeout)\n        resolve()\n      } else {\n        socks5Client.once('authenticated', onAuthenticated)\n        socks5Client.once('error', onError)\n      }\n    })\n\n    // Send CONNECT command\n    await socks5Client.connect(targetHost, targetPort)\n\n    // Wait for connection\n    await new Promise((resolve, reject) => {\n      const timeout = setTimeout(() => {\n        reject(new Error('SOCKS5 connection timeout'))\n      }, 5000)\n\n      const onConnected = (info) => {\n        debug('SOCKS5 tunnel established to', targetHost, targetPort, 'via', info)\n        clearTimeout(timeout)\n        socks5Client.removeListener('error', onError)\n        resolve()\n      }\n\n      const onError = (err) => {\n        clearTimeout(timeout)\n        socks5Client.removeListener('connected', onConnected)\n        reject(err)\n      }\n\n      socks5Client.once('connected', onConnected)\n      socks5Client.once('error', onError)\n    })\n\n    return socket\n  }\n\n  /**\n   * Dispatch a request through the SOCKS5 proxy\n   */\n  [kDispatch] (opts, handler) {\n    const { origin } = opts\n\n    debug('dispatching request to', origin, 'via SOCKS5')\n\n    try {\n      const originKey = String(origin)\n      let pool = this[kPools].get(originKey)\n      // Create a Pool per origin so requests are not routed to the wrong host\n      if (!pool || pool.destroyed || pool.closed) {\n        pool = new Pool(origin, {\n          pipelining: opts.pipelining,\n          connections: opts.connections,\n          connect: async (connectOpts, callback) => {\n            try {\n              const url = new URL(origin)\n              const targetHost = url.hostname\n              const targetPort = parseInt(url.port) || (url.protocol === 'https:' ? 443 : 80)\n\n              debug('establishing SOCKS5 connection to', targetHost, targetPort)\n\n              // Create SOCKS5 tunnel\n              const socket = await this.createSocks5Connection(targetHost, targetPort)\n\n              // Handle TLS if needed\n              let finalSocket = socket\n              if (url.protocol === 'https:') {\n                if (!tls) {\n                  tls = require('node:tls')\n                }\n                debug('upgrading to TLS')\n                finalSocket = tls.connect({\n                  ...this[kRequestTls],\n                  socket,\n                  servername: this[kRequestTls]?.servername || targetHost\n                })\n\n                await new Promise((resolve, reject) => {\n                  finalSocket.once('secureConnect', resolve)\n                  finalSocket.once('error', reject)\n                })\n              }\n\n              callback(null, finalSocket)\n            } catch (err) {\n              debug('SOCKS5 connection error:', err)\n              callback(err)\n            }\n          }\n        })\n        this[kPools].set(originKey, pool)\n      }\n\n      // Dispatch the request through the per-origin pool\n      return pool[kDispatch](opts, handler)\n    } catch (err) {\n      debug('dispatch error:', err)\n      if (typeof handler.onResponseError === 'function') {\n        handler.onResponseError(null, err)\n        return false\n      } else if (typeof handler.onError === 'function') {\n        handler.onError(err)\n        return false\n      } else {\n        throw err\n      }\n    }\n  }\n\n  async [kClose] () {\n    const closePromises = []\n    for (const pool of this[kPools].values()) {\n      closePromises.push(pool.close())\n    }\n    this[kPools].clear()\n    await Promise.all(closePromises)\n  }\n\n  async [kDestroy] (err) {\n    const destroyPromises = []\n    for (const pool of this[kPools].values()) {\n      destroyPromises.push(pool.destroy(err))\n    }\n    this[kPools].clear()\n    await Promise.all(destroyPromises)\n  }\n}\n\nmodule.exports = Socks5ProxyAgent\n", "'use strict'\n\nconst { kProxy, kClose, kDestroy, kDispatch } = require('../core/symbols')\nconst Agent = require('./agent')\nconst Pool = require('./pool')\nconst DispatcherBase = require('./dispatcher-base')\nconst { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError } = require('../core/errors')\nconst buildConnector = require('../core/connect')\nconst Client = require('./client')\nconst { channels } = require('../core/diagnostics')\nconst Socks5ProxyAgent = require('./socks5-proxy-agent')\n\nconst kAgent = Symbol('proxy agent')\nconst kClient = Symbol('proxy client')\nconst kProxyHeaders = Symbol('proxy headers')\nconst kRequestTls = Symbol('request tls settings')\nconst kProxyTls = Symbol('proxy tls settings')\nconst kConnectEndpoint = Symbol('connect endpoint function')\nconst kTunnelProxy = Symbol('tunnel proxy')\n\nfunction defaultProtocolPort (protocol) {\n  return protocol === 'https:' ? 443 : 80\n}\n\nfunction defaultFactory (origin, opts) {\n  return new Pool(origin, opts)\n}\n\nconst noop = () => {}\n\nfunction defaultAgentFactory (origin, opts) {\n  if (opts.connections === 1) {\n    return new Client(origin, opts)\n  }\n  return new Pool(origin, opts)\n}\n\nclass Http1ProxyWrapper extends DispatcherBase {\n  #client\n\n  constructor (proxyUrl, { headers = {}, connect, factory }) {\n    if (!proxyUrl) {\n      throw new InvalidArgumentError('Proxy URL is mandatory')\n    }\n\n    super()\n\n    this[kProxyHeaders] = headers\n    if (factory) {\n      this.#client = factory(proxyUrl, { connect })\n    } else {\n      this.#client = new Client(proxyUrl, { connect })\n    }\n  }\n\n  [kDispatch] (opts, handler) {\n    const onHeaders = handler.onHeaders\n    handler.onHeaders = function (statusCode, data, resume) {\n      if (statusCode === 407) {\n        if (typeof handler.onError === 'function') {\n          handler.onError(new InvalidArgumentError('Proxy Authentication Required (407)'))\n        }\n        return\n      }\n      if (onHeaders) onHeaders.call(this, statusCode, data, resume)\n    }\n\n    // Rewrite request as an HTTP1 Proxy request, without tunneling.\n    const {\n      origin,\n      path = '/',\n      headers = {}\n    } = opts\n\n    opts.path = origin + path\n\n    if (!('host' in headers) && !('Host' in headers)) {\n      const { host } = new URL(origin)\n      headers.host = host\n    }\n    opts.headers = { ...this[kProxyHeaders], ...headers }\n\n    return this.#client[kDispatch](opts, handler)\n  }\n\n  [kClose] () {\n    return this.#client.close()\n  }\n\n  [kDestroy] (err) {\n    return this.#client.destroy(err)\n  }\n}\n\nclass ProxyAgent extends DispatcherBase {\n  constructor (opts) {\n    if (!opts || (typeof opts === 'object' && !(opts instanceof URL) && !opts.uri)) {\n      throw new InvalidArgumentError('Proxy uri is mandatory')\n    }\n\n    const { clientFactory = defaultFactory } = opts\n    if (typeof clientFactory !== 'function') {\n      throw new InvalidArgumentError('Proxy opts.clientFactory must be a function.')\n    }\n\n    const { proxyTunnel = true } = opts\n\n    super()\n\n    const url = this.#getUrl(opts)\n    const { href, origin, port, protocol, username, password, hostname: proxyHostname } = url\n\n    this[kProxy] = { uri: href, protocol }\n    this[kRequestTls] = opts.requestTls\n    this[kProxyTls] = opts.proxyTls\n    this[kProxyHeaders] = opts.headers || {}\n    this[kTunnelProxy] = proxyTunnel\n\n    if (opts.auth && opts.token) {\n      throw new InvalidArgumentError('opts.auth cannot be used in combination with opts.token')\n    } else if (opts.auth) {\n      /* @deprecated in favour of opts.token */\n      this[kProxyHeaders]['proxy-authorization'] = `Basic ${opts.auth}`\n    } else if (opts.token) {\n      this[kProxyHeaders]['proxy-authorization'] = opts.token\n    } else if (username && password) {\n      this[kProxyHeaders]['proxy-authorization'] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:${decodeURIComponent(password)}`).toString('base64')}`\n    }\n\n    const connect = buildConnector({ ...opts.proxyTls })\n    this[kConnectEndpoint] = buildConnector({ ...opts.requestTls })\n\n    const agentFactory = opts.factory || defaultAgentFactory\n    const factory = (origin, options) => {\n      const { protocol } = new URL(origin)\n\n      // Handle SOCKS5 proxy\n      if (this[kProxy].protocol === 'socks5:' || this[kProxy].protocol === 'socks:') {\n        return new Socks5ProxyAgent(this[kProxy].uri, {\n          headers: this[kProxyHeaders],\n          connect,\n          factory: agentFactory,\n          username: opts.username || username,\n          password: opts.password || password,\n          proxyTls: opts.proxyTls,\n          requestTls: opts.requestTls\n        })\n      }\n\n      if (!this[kTunnelProxy] && protocol === 'http:' && this[kProxy].protocol === 'http:') {\n        return new Http1ProxyWrapper(this[kProxy].uri, {\n          headers: this[kProxyHeaders],\n          connect,\n          factory: agentFactory\n        })\n      }\n      return agentFactory(origin, options)\n    }\n\n    // For SOCKS5 proxies, we don't need a client to the proxy itself\n    // The SOCKS5 connection is handled within Socks5ProxyAgent\n    if (protocol === 'socks5:' || protocol === 'socks:') {\n      this[kClient] = null\n    } else {\n      this[kClient] = clientFactory(url, { connect })\n    }\n\n    this[kAgent] = new Agent({\n      ...opts,\n      factory,\n      connect: async (opts, callback) => {\n        // SOCKS5 proxies handle their own connections via Socks5ProxyAgent,\n        // so this connect function should never be called for them.\n        if (!this[kClient]) {\n          callback(new InvalidArgumentError('Cannot establish tunnel connection without a proxy client'))\n          return\n        }\n\n        let requestedPath = opts.host\n        if (!opts.port) {\n          requestedPath += `:${defaultProtocolPort(opts.protocol)}`\n        }\n        try {\n          const connectParams = {\n            origin,\n            port,\n            path: requestedPath,\n            signal: opts.signal,\n            headers: {\n              ...this[kProxyHeaders],\n              host: opts.host,\n              ...(opts.connections == null || opts.connections > 0 ? { 'proxy-connection': 'keep-alive' } : {})\n            },\n            servername: this[kProxyTls]?.servername || proxyHostname\n          }\n          const { socket, statusCode } = await this[kClient].connect(connectParams)\n          if (statusCode !== 200) {\n            socket.on('error', noop).destroy()\n            callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`))\n            return\n          }\n\n          if (channels.proxyConnected.hasSubscribers) {\n            channels.proxyConnected.publish({\n              socket,\n              connectParams\n            })\n          }\n\n          if (opts.protocol !== 'https:') {\n            callback(null, socket)\n            return\n          }\n          let servername\n          if (this[kRequestTls]) {\n            servername = this[kRequestTls].servername\n          } else {\n            servername = opts.servername\n          }\n          this[kConnectEndpoint]({ ...opts, servername, httpSocket: socket }, callback)\n        } catch (err) {\n          if (err.code === 'ERR_TLS_CERT_ALTNAME_INVALID') {\n            // Throw a custom error to avoid loop in client.js#connect\n            callback(new SecureProxyConnectionError(err))\n          } else {\n            callback(err)\n          }\n        }\n      }\n    })\n  }\n\n  dispatch (opts, handler) {\n    const headers = buildHeaders(opts.headers)\n    throwIfProxyAuthIsSent(headers)\n\n    if (headers && !('host' in headers) && !('Host' in headers)) {\n      const { host } = new URL(opts.origin)\n      headers.host = host\n    }\n\n    return this[kAgent].dispatch(\n      {\n        ...opts,\n        headers\n      },\n      handler\n    )\n  }\n\n  /**\n   * @param {import('../../types/proxy-agent').ProxyAgent.Options | string | URL} opts\n   * @returns {URL}\n   */\n  #getUrl (opts) {\n    if (typeof opts === 'string') {\n      return new URL(opts)\n    } else if (opts instanceof URL) {\n      return opts\n    } else {\n      return new URL(opts.uri)\n    }\n  }\n\n  [kClose] () {\n    const promises = [this[kAgent].close()]\n    if (this[kClient]) {\n      promises.push(this[kClient].close())\n    }\n    return Promise.all(promises)\n  }\n\n  [kDestroy] () {\n    const promises = [this[kAgent].destroy()]\n    if (this[kClient]) {\n      promises.push(this[kClient].destroy())\n    }\n    return Promise.all(promises)\n  }\n}\n\n/**\n * @param {string[] | Record<string, string>} headers\n * @returns {Record<string, string>}\n */\nfunction buildHeaders (headers) {\n  // When using undici.fetch, the headers list is stored\n  // as an array.\n  if (Array.isArray(headers)) {\n    /** @type {Record<string, string>} */\n    const headersPair = {}\n\n    for (let i = 0; i < headers.length; i += 2) {\n      headersPair[headers[i]] = headers[i + 1]\n    }\n\n    return headersPair\n  }\n\n  return headers\n}\n\n/**\n * @param {Record<string, string>} headers\n *\n * Previous versions of ProxyAgent suggests the Proxy-Authorization in request headers\n * Nevertheless, it was changed and to avoid a security vulnerability by end users\n * this check was created.\n * It should be removed in the next major version for performance reasons\n */\nfunction throwIfProxyAuthIsSent (headers) {\n  const existProxyAuth = headers && Object.keys(headers)\n    .find((key) => key.toLowerCase() === 'proxy-authorization')\n  if (existProxyAuth) {\n    throw new InvalidArgumentError('Proxy-Authorization should be sent in ProxyAgent constructor')\n  }\n}\n\nmodule.exports = ProxyAgent\n", "'use strict'\n\nconst DispatcherBase = require('./dispatcher-base')\nconst { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require('../core/symbols')\nconst ProxyAgent = require('./proxy-agent')\nconst Agent = require('./agent')\n\nconst DEFAULT_PORTS = {\n  'http:': 80,\n  'https:': 443\n}\n\nclass EnvHttpProxyAgent extends DispatcherBase {\n  #noProxyValue = null\n  #noProxyEntries = null\n  #opts = null\n\n  constructor (opts = {}) {\n    super()\n    this.#opts = opts\n\n    const { httpProxy, httpsProxy, noProxy, ...agentOpts } = opts\n\n    this[kNoProxyAgent] = new Agent(agentOpts)\n\n    const HTTP_PROXY = httpProxy ?? process.env.http_proxy ?? process.env.HTTP_PROXY\n    if (HTTP_PROXY) {\n      this[kHttpProxyAgent] = new ProxyAgent({ ...agentOpts, uri: HTTP_PROXY })\n    } else {\n      this[kHttpProxyAgent] = this[kNoProxyAgent]\n    }\n\n    const HTTPS_PROXY = httpsProxy ?? process.env.https_proxy ?? process.env.HTTPS_PROXY\n    if (HTTPS_PROXY) {\n      this[kHttpsProxyAgent] = new ProxyAgent({ ...agentOpts, uri: HTTPS_PROXY })\n    } else {\n      this[kHttpsProxyAgent] = this[kHttpProxyAgent]\n    }\n\n    this.#parseNoProxy()\n  }\n\n  [kDispatch] (opts, handler) {\n    const url = new URL(opts.origin)\n    const agent = this.#getProxyAgentForUrl(url)\n    return agent.dispatch(opts, handler)\n  }\n\n  [kClose] () {\n    return Promise.all([\n      this[kNoProxyAgent].close(),\n      !this[kHttpProxyAgent][kClosed] && this[kHttpProxyAgent].close(),\n      !this[kHttpsProxyAgent][kClosed] && this[kHttpsProxyAgent].close()\n    ])\n  }\n\n  [kDestroy] (err) {\n    return Promise.all([\n      this[kNoProxyAgent].destroy(err),\n      !this[kHttpProxyAgent][kDestroyed] && this[kHttpProxyAgent].destroy(err),\n      !this[kHttpsProxyAgent][kDestroyed] && this[kHttpsProxyAgent].destroy(err)\n    ])\n  }\n\n  #getProxyAgentForUrl (url) {\n    let { protocol, host: hostname, port } = url\n\n    // Stripping ports in this way instead of using parsedUrl.hostname to make\n    // sure that the brackets around IPv6 addresses are kept.\n    hostname = hostname.replace(/:\\d*$/, '').toLowerCase()\n    port = Number.parseInt(port, 10) || DEFAULT_PORTS[protocol] || 0\n    if (!this.#shouldProxy(hostname, port)) {\n      return this[kNoProxyAgent]\n    }\n    if (protocol === 'https:') {\n      return this[kHttpsProxyAgent]\n    }\n    return this[kHttpProxyAgent]\n  }\n\n  #shouldProxy (hostname, port) {\n    if (this.#noProxyChanged) {\n      this.#parseNoProxy()\n    }\n\n    if (this.#noProxyEntries.length === 0) {\n      return true // Always proxy if NO_PROXY is not set or empty.\n    }\n    if (this.#noProxyValue === '*') {\n      return false // Never proxy if wildcard is set.\n    }\n\n    for (let i = 0; i < this.#noProxyEntries.length; i++) {\n      const entry = this.#noProxyEntries[i]\n      if (entry.port && entry.port !== port) {\n        continue // Skip if ports don't match.\n      }\n      // Don't proxy if the hostname is equal with the no_proxy host.\n      if (hostname === entry.hostname) {\n        return false\n      }\n      // Don't proxy if the hostname is the subdomain of the no_proxy host.\n      // Reference - https://github.com/denoland/deno/blob/6fbce91e40cc07fc6da74068e5cc56fdd40f7b4c/ext/fetch/proxy.rs#L485\n      if (hostname.slice(-(entry.hostname.length + 1)) === `.${entry.hostname}`) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  #parseNoProxy () {\n    const noProxyValue = this.#opts.noProxy ?? this.#noProxyEnv\n    const noProxySplit = noProxyValue.split(/[,\\s]/)\n    const noProxyEntries = []\n\n    for (let i = 0; i < noProxySplit.length; i++) {\n      const entry = noProxySplit[i]\n      if (!entry) {\n        continue\n      }\n      const parsed = entry.match(/^(.+):(\\d+)$/)\n      noProxyEntries.push({\n        // strip leading dot or asterisk with dot\n        hostname: (parsed ? parsed[1] : entry).replace(/^\\*?\\./, '').toLowerCase(),\n        port: parsed ? Number.parseInt(parsed[2], 10) : 0\n      })\n    }\n\n    this.#noProxyValue = noProxyValue\n    this.#noProxyEntries = noProxyEntries\n  }\n\n  get #noProxyChanged () {\n    if (this.#opts.noProxy !== undefined) {\n      return false\n    }\n    return this.#noProxyValue !== this.#noProxyEnv\n  }\n\n  get #noProxyEnv () {\n    return process.env.no_proxy ?? process.env.NO_PROXY ?? ''\n  }\n}\n\nmodule.exports = EnvHttpProxyAgent\n", "'use strict'\nconst assert = require('node:assert')\n\nconst { kRetryHandlerDefaultRetry } = require('../core/symbols')\nconst { RequestRetryError } = require('../core/errors')\nconst WrapHandler = require('./wrap-handler')\nconst {\n  isDisturbed,\n  parseRangeHeader,\n  wrapRequestBody\n} = require('../core/util')\n\nfunction calculateRetryAfterHeader (retryAfter) {\n  const retryTime = new Date(retryAfter).getTime()\n  return isNaN(retryTime) ? 0 : retryTime - Date.now()\n}\n\nfunction validatePartialResponseContentLength (headers, range, statusCode, retryCount) {\n  const contentLength = headers['content-length']\n  if (contentLength == null) {\n    return\n  }\n\n  if (!Number.isFinite(range.start) || !Number.isFinite(range.end)) {\n    return\n  }\n\n  const length = Number(contentLength)\n  const expectedLength = range.end - range.start + 1\n  if (!Number.isFinite(length) || length !== expectedLength) {\n    throw new RequestRetryError('Content-Length mismatch', statusCode, {\n      headers,\n      data: { count: retryCount }\n    })\n  }\n}\n\nclass RetryHandler {\n  constructor (opts, { dispatch, handler }) {\n    const { retryOptions, ...dispatchOpts } = opts\n    const {\n      // Retry scoped\n      retry: retryFn,\n      maxRetries,\n      maxTimeout,\n      minTimeout,\n      timeoutFactor,\n      // Response scoped\n      methods,\n      errorCodes,\n      retryAfter,\n      statusCodes,\n      throwOnError\n    } = retryOptions ?? {}\n\n    this.error = null\n    this.dispatch = dispatch\n    this.handler = WrapHandler.wrap(handler)\n    this.opts = { ...dispatchOpts, body: wrapRequestBody(opts.body) }\n    this.retryOpts = {\n      throwOnError: throwOnError ?? true,\n      retry: retryFn ?? RetryHandler[kRetryHandlerDefaultRetry],\n      retryAfter: retryAfter ?? true,\n      maxTimeout: maxTimeout ?? 30 * 1000, // 30s,\n      minTimeout: minTimeout ?? 500, // .5s\n      timeoutFactor: timeoutFactor ?? 2,\n      maxRetries: maxRetries ?? 5,\n      // What errors we should retry\n      methods: methods ?? ['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE', 'TRACE'],\n      // Indicates which errors to retry\n      statusCodes: statusCodes ?? [500, 502, 503, 504, 429],\n      // List of errors to retry\n      errorCodes: errorCodes ?? [\n        'ECONNRESET',\n        'ECONNREFUSED',\n        'ENOTFOUND',\n        'ENETDOWN',\n        'ENETUNREACH',\n        'EHOSTDOWN',\n        'EHOSTUNREACH',\n        'EPIPE',\n        'UND_ERR_SOCKET'\n      ]\n    }\n\n    this.retryCount = 0\n    this.retryCountCheckpoint = 0\n    this.headersSent = false\n    this.start = 0\n    this.end = null\n    this.etag = null\n  }\n\n  onResponseStartWithRetry (controller, statusCode, headers, statusMessage, err) {\n    if (this.retryOpts.throwOnError) {\n      // Preserve old behavior for status codes that are not eligible for retry\n      if (this.retryOpts.statusCodes.includes(statusCode) === false) {\n        if (this.headersSent) {\n          // The downstream handler already received the response from an\n          // earlier attempt. Forwarding this response would replace the\n          // downstream body and leave the original body pending forever.\n          this.handler.onResponseError?.(controller, err)\n        } else {\n          this.headersSent = true\n          this.checkpointResponseEnd(headers)\n          this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n        }\n      } else {\n        this.error = err\n      }\n\n      return\n    }\n\n    if (isDisturbed(this.opts.body)) {\n      this.headersSent = true\n      this.checkpointResponseEnd(headers)\n      this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n      return\n    }\n\n    function shouldRetry (passedErr) {\n      if (passedErr) {\n        if (this.headersSent) {\n          // The downstream handler already received the response from an\n          // earlier attempt. Forwarding this response would replace the\n          // downstream body and leave the original body pending forever.\n          this.handler.onResponseError?.(controller, passedErr)\n        } else {\n          this.headersSent = true\n          this.checkpointResponseEnd(headers)\n          this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n        }\n        controller.resume()\n        return\n      }\n\n      this.error = err\n      controller.resume()\n    }\n\n    controller.pause()\n    this.retryOpts.retry(\n      err,\n      {\n        state: { counter: this.retryCount },\n        opts: { retryOptions: this.retryOpts, ...this.opts }\n      },\n      shouldRetry.bind(this)\n    )\n  }\n\n  checkpointResponseEnd (headers) {\n    if (this.end == null && this.opts.method !== 'HEAD') {\n      const contentLength = headers['content-length']\n      this.end = contentLength != null ? Number(contentLength) - 1 : null\n\n      assert(\n        this.end == null || Number.isFinite(this.end),\n        'invalid content-length'\n      )\n\n      this.resume = this.end != null\n    }\n  }\n\n  onRequestStart (controller, context) {\n    if (!this.headersSent) {\n      this.handler.onRequestStart?.(controller, context)\n    }\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  static [kRetryHandlerDefaultRetry] (err, { state, opts }, cb) {\n    const { statusCode, code, headers } = err\n    const { method, retryOptions } = opts\n    const {\n      maxRetries,\n      minTimeout,\n      maxTimeout,\n      timeoutFactor,\n      statusCodes,\n      errorCodes,\n      methods\n    } = retryOptions\n    const { counter } = state\n\n    // Any code that is not a Undici's originated and allowed to retry\n    if (code && code !== 'UND_ERR_REQ_RETRY' && !errorCodes.includes(code)) {\n      cb(err)\n      return\n    }\n\n    // If a set of method are provided and the current method is not in the list\n    if (Array.isArray(methods) && !methods.includes(method)) {\n      cb(err)\n      return\n    }\n\n    // If a set of status code are provided and the current status code is not in the list\n    if (\n      statusCode != null &&\n      Array.isArray(statusCodes) &&\n      !statusCodes.includes(statusCode)\n    ) {\n      cb(err)\n      return\n    }\n\n    // If we reached the max number of retries\n    if (counter > maxRetries) {\n      cb(err)\n      return\n    }\n\n    let retryAfterHeader = headers?.['retry-after']\n    if (retryAfterHeader) {\n      retryAfterHeader = Number(retryAfterHeader)\n      retryAfterHeader = Number.isNaN(retryAfterHeader)\n        ? calculateRetryAfterHeader(headers['retry-after'])\n        : retryAfterHeader * 1e3 // Retry-After is in seconds\n    }\n\n    const retryTimeout =\n      retryAfterHeader > 0\n        ? Math.min(retryAfterHeader, maxTimeout)\n        : Math.min(minTimeout * timeoutFactor ** (counter - 1), maxTimeout)\n\n    setTimeout(() => cb(null), retryTimeout)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    this.error = null\n    this.retryCount += 1\n\n    if (statusCode >= 300) {\n      const err = new RequestRetryError('Request failed', statusCode, {\n        headers,\n        data: {\n          count: this.retryCount\n        }\n      })\n\n      this.onResponseStartWithRetry(controller, statusCode, headers, statusMessage, err)\n      return\n    }\n\n    // Checkpoint for resume from where we left it\n    if (this.headersSent) {\n      // Only Partial Content 206 supposed to provide Content-Range,\n      // any other status code that partially consumed the payload\n      // should not be retried because it would result in downstream\n      // wrongly concatenate multiple responses.\n      if (statusCode !== 206 && (this.start > 0 || statusCode !== 200)) {\n        throw new RequestRetryError('server does not support the range header and the payload was partially consumed', statusCode, {\n          headers,\n          data: { count: this.retryCount }\n        })\n      }\n\n      const contentRange = parseRangeHeader(headers['content-range'])\n      // If no content range\n      if (!contentRange) {\n        // We always throw here as we want to indicate that we entred unexpected path\n        throw new RequestRetryError('Content-Range mismatch', statusCode, {\n          headers,\n          data: { count: this.retryCount }\n        })\n      }\n\n      // Let's start with a weak etag check\n      if (this.etag != null && this.etag !== headers.etag) {\n        // We always throw here as we want to indicate that we entred unexpected path\n        throw new RequestRetryError('ETag mismatch', statusCode, {\n          headers,\n          data: { count: this.retryCount }\n        })\n      }\n\n      validatePartialResponseContentLength(headers, contentRange, statusCode, this.retryCount)\n\n      const { start, size, end = size ? size - 1 : null } = contentRange\n\n      if (this.start !== start || (this.end != null && this.end !== end)) {\n        throw new RequestRetryError('Content-Range mismatch', statusCode, {\n          headers,\n          data: { count: this.retryCount }\n        })\n      }\n\n      return\n    }\n\n    if (this.end == null) {\n      if (statusCode === 206) {\n        // First time we receive 206\n        const range = parseRangeHeader(headers['content-range'])\n\n        if (range == null) {\n          this.headersSent = true\n          this.handler.onResponseStart?.(\n            controller,\n            statusCode,\n            headers,\n            statusMessage\n          )\n          return\n        }\n\n        validatePartialResponseContentLength(headers, range, statusCode, this.retryCount)\n\n        const { start, size, end = size ? size - 1 : null } = range\n        assert(\n          start != null && Number.isFinite(start),\n          'content-range mismatch'\n        )\n        assert(end != null && Number.isFinite(end), 'invalid content-length')\n\n        this.start = start\n        this.end = end\n      }\n\n      // We make our best to checkpoint the body for further range headers\n      if (this.end == null) {\n        const contentLength = headers['content-length']\n        this.end = contentLength != null ? Number(contentLength) - 1 : null\n      }\n\n      assert(Number.isFinite(this.start))\n      assert(\n        this.end == null || Number.isFinite(this.end),\n        'invalid content-length'\n      )\n\n      this.resume = true\n      this.etag = headers.etag != null ? headers.etag : null\n\n      // Weak etags are not useful for comparison nor cache\n      // for instance not safe to assume if the response is byte-per-byte\n      // equal\n      if (\n        this.etag != null &&\n        this.etag[0] === 'W' &&\n        this.etag[1] === '/'\n      ) {\n        this.etag = null\n      }\n\n      this.headersSent = true\n      this.handler.onResponseStart?.(\n        controller,\n        statusCode,\n        headers,\n        statusMessage\n      )\n    } else {\n      throw new RequestRetryError('Request failed', statusCode, {\n        headers,\n        data: { count: this.retryCount }\n      })\n    }\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.error) {\n      return\n    }\n\n    this.start += chunk.length\n\n    this.handler.onResponseData?.(controller, chunk)\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.error && this.retryOpts.throwOnError) {\n      throw this.error\n    }\n\n    if (!this.error) {\n      this.retryCount = 0\n      return this.handler.onResponseEnd?.(controller, trailers)\n    }\n\n    this.retry(controller)\n  }\n\n  retry (controller) {\n    if (this.start !== 0) {\n      const headers = { range: `bytes=${this.start}-${this.end ?? ''}` }\n\n      // Weak etag check - weak etags will make comparison algorithms never match\n      if (this.etag != null) {\n        headers['if-match'] = this.etag\n      }\n\n      this.opts = {\n        ...this.opts,\n        headers: {\n          ...this.opts.headers,\n          ...headers\n        }\n      }\n    }\n\n    try {\n      this.retryCountCheckpoint = this.retryCount\n      this.dispatch(this.opts, this)\n    } catch (err) {\n      this.handler.onResponseError?.(controller, err)\n    }\n  }\n\n  onResponseError (controller, err) {\n    if (controller?.aborted || isDisturbed(this.opts.body) || (this.headersSent && !this.resume)) {\n      this.handler.onResponseError?.(controller, err)\n      return\n    }\n\n    function shouldRetry (returnedErr) {\n      if (!returnedErr) {\n        this.retry(controller)\n        return\n      }\n\n      this.handler?.onResponseError?.(controller, returnedErr)\n    }\n\n    // We reconcile in case of a mix between network errors\n    // and server error response\n    if (this.retryCount - this.retryCountCheckpoint > 0) {\n      // We count the difference between the last checkpoint and the current retry count\n      this.retryCount =\n        this.retryCountCheckpoint +\n        (this.retryCount - this.retryCountCheckpoint)\n    } else {\n      this.retryCount += 1\n    }\n\n    this.retryOpts.retry(\n      err,\n      {\n        state: { counter: this.retryCount },\n        opts: { retryOptions: this.retryOpts, ...this.opts }\n      },\n      shouldRetry.bind(this)\n    )\n  }\n}\n\nmodule.exports = RetryHandler\n", "'use strict'\n\nconst Dispatcher = require('./dispatcher')\nconst RetryHandler = require('../handler/retry-handler')\n\nclass RetryAgent extends Dispatcher {\n  #agent = null\n  #options = null\n  constructor (agent, options = {}) {\n    super(options)\n    this.#agent = agent\n    this.#options = options\n  }\n\n  dispatch (opts, handler) {\n    const retry = new RetryHandler({\n      ...opts,\n      retryOptions: this.#options\n    }, {\n      dispatch: this.#agent.dispatch.bind(this.#agent),\n      handler\n    })\n    return this.#agent.dispatch(opts, retry)\n  }\n\n  close () {\n    return this.#agent.close()\n  }\n\n  destroy () {\n    return this.#agent.destroy()\n  }\n}\n\nmodule.exports = RetryAgent\n", "'use strict'\n\nconst { InvalidArgumentError } = require('../core/errors')\nconst Client = require('./client')\n\nclass H2CClient extends Client {\n  constructor (origin, clientOpts) {\n    if (typeof origin === 'string') {\n      origin = new URL(origin)\n    }\n\n    if (origin.protocol !== 'http:') {\n      throw new InvalidArgumentError(\n        'h2c-client: Only h2c protocol is supported'\n      )\n    }\n\n    const { maxConcurrentStreams, pipelining, ...opts } =\n            clientOpts ?? {}\n    let defaultMaxConcurrentStreams = 100\n    let defaultPipelining = 100\n\n    if (\n      maxConcurrentStreams != null &&\n            Number.isInteger(maxConcurrentStreams) &&\n            maxConcurrentStreams > 0\n    ) {\n      defaultMaxConcurrentStreams = maxConcurrentStreams\n    }\n\n    if (pipelining != null && Number.isInteger(pipelining) && pipelining > 0) {\n      defaultPipelining = pipelining\n    }\n\n    if (defaultPipelining > defaultMaxConcurrentStreams) {\n      throw new InvalidArgumentError(\n        'h2c-client: pipelining cannot be greater than maxConcurrentStreams'\n      )\n    }\n\n    super(origin, {\n      ...opts,\n      maxConcurrentStreams: defaultMaxConcurrentStreams,\n      pipelining: defaultPipelining,\n      allowH2: true,\n      useH2c: true\n    })\n  }\n}\n\nmodule.exports = H2CClient\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { Readable } = require('node:stream')\nconst { RequestAbortedError, NotSupportedError, InvalidArgumentError, AbortError } = require('../core/errors')\nconst util = require('../core/util')\nconst { ReadableStreamFrom } = require('../core/util')\n\nconst kConsume = Symbol('kConsume')\nconst kReading = Symbol('kReading')\nconst kBody = Symbol('kBody')\nconst kAbort = Symbol('kAbort')\nconst kContentType = Symbol('kContentType')\nconst kContentLength = Symbol('kContentLength')\nconst kUsed = Symbol('kUsed')\nconst kBytesRead = Symbol('kBytesRead')\n\nconst noop = () => {}\n\n/**\n * @class\n * @extends {Readable}\n * @see https://fetch.spec.whatwg.org/#body\n */\nclass BodyReadable extends Readable {\n  /**\n   * @param {object} opts\n   * @param {(this: Readable, size: number) => void} opts.resume\n   * @param {() => (void | null)} opts.abort\n   * @param {string} [opts.contentType = '']\n   * @param {number} [opts.contentLength]\n   * @param {number} [opts.highWaterMark = 64 * 1024]\n   */\n  constructor ({\n    resume,\n    abort,\n    contentType = '',\n    contentLength,\n    highWaterMark = 64 * 1024 // Same as nodejs fs streams.\n  }) {\n    super({\n      autoDestroy: true,\n      read: resume,\n      highWaterMark\n    })\n\n    this._readableState.dataEmitted = false\n\n    this[kAbort] = abort\n\n    /** @type {Consume | null} */\n    this[kConsume] = null\n\n    /** @type {number} */\n    this[kBytesRead] = 0\n\n    /** @type {ReadableStream|null} */\n    this[kBody] = null\n\n    /** @type {boolean} */\n    this[kUsed] = false\n\n    /** @type {string} */\n    this[kContentType] = contentType\n\n    /** @type {number|null} */\n    this[kContentLength] = Number.isFinite(contentLength) ? contentLength : null\n\n    /**\n     * Is stream being consumed through Readable API?\n     * This is an optimization so that we avoid checking\n     * for 'data' and 'readable' listeners in the hot path\n     * inside push().\n     *\n     * @type {boolean}\n     */\n    this[kReading] = false\n  }\n\n  /**\n   * @param {Error|null} err\n   * @param {(error:(Error|null)) => void} callback\n   * @returns {void}\n   */\n  _destroy (err, callback) {\n    if (!err && !this._readableState.endEmitted) {\n      err = new RequestAbortedError()\n    }\n\n    if (err) {\n      this[kAbort]()\n    }\n\n    // Workaround for Node \"bug\". If the stream is destroyed in same\n    // tick as it is created, then a user who is waiting for a\n    // promise (i.e micro tick) for installing an 'error' listener will\n    // never get a chance and will always encounter an unhandled exception.\n    if (!this[kUsed]) {\n      setImmediate(callback, err)\n    } else {\n      callback(err)\n    }\n  }\n\n  /**\n   * @param {string|symbol} event\n   * @param {(...args: any[]) => void} listener\n   * @returns {this}\n   */\n  on (event, listener) {\n    if (event === 'data' || event === 'readable') {\n      this[kReading] = true\n      this[kUsed] = true\n    }\n    return super.on(event, listener)\n  }\n\n  /**\n   * @param {string|symbol} event\n   * @param {(...args: any[]) => void} listener\n   * @returns {this}\n   */\n  addListener (event, listener) {\n    return this.on(event, listener)\n  }\n\n  /**\n   * @param {string|symbol} event\n   * @param {(...args: any[]) => void} listener\n   * @returns {this}\n   */\n  off (event, listener) {\n    const ret = super.off(event, listener)\n    if (event === 'data' || event === 'readable') {\n      this[kReading] = (\n        this.listenerCount('data') > 0 ||\n        this.listenerCount('readable') > 0\n      )\n    }\n    return ret\n  }\n\n  /**\n   * @param {string|symbol} event\n   * @param {(...args: any[]) => void} listener\n   * @returns {this}\n   */\n  removeListener (event, listener) {\n    return this.off(event, listener)\n  }\n\n  /**\n   * @param {Buffer|null} chunk\n   * @returns {boolean}\n   */\n  push (chunk) {\n    if (chunk) {\n      this[kBytesRead] += chunk.length\n      if (this[kConsume]) {\n        consumePush(this[kConsume], chunk)\n        return this[kReading] ? super.push(chunk) : true\n      }\n    }\n\n    return super.push(chunk)\n  }\n\n  /**\n   * Consumes and returns the body as a string.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-text\n   * @returns {Promise<string>}\n   */\n  text () {\n    return consume(this, 'text')\n  }\n\n  /**\n   * Consumes and returns the body as a JavaScript Object.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-json\n   * @returns {Promise<unknown>}\n   */\n  json () {\n    return consume(this, 'json')\n  }\n\n  /**\n   * Consumes and returns the body as a Blob\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-blob\n   * @returns {Promise<Blob>}\n   */\n  blob () {\n    return consume(this, 'blob')\n  }\n\n  /**\n   * Consumes and returns the body as an Uint8Array.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-bytes\n   * @returns {Promise<Uint8Array>}\n   */\n  bytes () {\n    return consume(this, 'bytes')\n  }\n\n  /**\n   * Consumes and returns the body as an ArrayBuffer.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-arraybuffer\n   * @returns {Promise<ArrayBuffer>}\n   */\n  arrayBuffer () {\n    return consume(this, 'arrayBuffer')\n  }\n\n  /**\n   * Not implemented\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-formdata\n   * @throws {NotSupportedError}\n   */\n  async formData () {\n    // TODO: Implement.\n    throw new NotSupportedError()\n  }\n\n  /**\n   * Returns true if the body is not null and the body has been consumed.\n   * Otherwise, returns false.\n   *\n   * @see https://fetch.spec.whatwg.org/#dom-body-bodyused\n   * @readonly\n   * @returns {boolean}\n   */\n  get bodyUsed () {\n    return util.isDisturbed(this)\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#dom-body-body\n   * @readonly\n   * @returns {ReadableStream}\n   */\n  get body () {\n    if (!this[kBody]) {\n      this[kBody] = ReadableStreamFrom(this)\n      if (this[kConsume]) {\n        // TODO: Is this the best way to force a lock?\n        this[kBody].getReader() // Ensure stream is locked.\n        assert(this[kBody].locked)\n      }\n    }\n    return this[kBody]\n  }\n\n  /**\n   * Dumps the response body by reading `limit` number of bytes.\n   * @param {object} opts\n   * @param {number} [opts.limit = 131072] Number of bytes to read.\n   * @param {AbortSignal} [opts.signal] An AbortSignal to cancel the dump.\n   * @returns {Promise<null>}\n   */\n  dump (opts) {\n    const signal = opts?.signal\n\n    if (signal != null && (typeof signal !== 'object' || !('aborted' in signal))) {\n      return Promise.reject(new InvalidArgumentError('signal must be an AbortSignal'))\n    }\n\n    const limit = opts?.limit && Number.isFinite(opts.limit)\n      ? opts.limit\n      : 128 * 1024\n\n    if (signal?.aborted) {\n      return Promise.reject(signal.reason ?? new AbortError())\n    }\n\n    if (this._readableState.closeEmitted) {\n      return Promise.resolve(null)\n    }\n\n    return new Promise((resolve, reject) => {\n      if (\n        (this[kContentLength] && (this[kContentLength] > limit)) ||\n        this[kBytesRead] > limit\n      ) {\n        this.destroy(new AbortError())\n      }\n\n      if (signal) {\n        const onAbort = () => {\n          this.destroy(signal.reason ?? new AbortError())\n        }\n        signal.addEventListener('abort', onAbort)\n        this\n          .on('close', function () {\n            signal.removeEventListener('abort', onAbort)\n            if (signal.aborted) {\n              reject(signal.reason ?? new AbortError())\n            } else {\n              resolve(null)\n            }\n          })\n      } else {\n        this.on('close', resolve)\n      }\n\n      this\n        .on('error', noop)\n        .on('data', () => {\n          if (this[kBytesRead] > limit) {\n            this.destroy()\n          }\n        })\n        .resume()\n    })\n  }\n\n  /**\n   * @param {BufferEncoding} encoding\n   * @returns {this}\n   */\n  setEncoding (encoding) {\n    if (Buffer.isEncoding(encoding)) {\n      this._readableState.encoding = encoding\n    }\n    return this\n  }\n}\n\n/**\n * @see https://streams.spec.whatwg.org/#readablestream-locked\n * @param {BodyReadable} bodyReadable\n * @returns {boolean}\n */\nfunction isLocked (bodyReadable) {\n  // Consume is an implicit lock.\n  return bodyReadable[kBody]?.locked === true || bodyReadable[kConsume] !== null\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#body-unusable\n * @param {BodyReadable} bodyReadable\n * @returns {boolean}\n */\nfunction isUnusable (bodyReadable) {\n  return util.isDisturbed(bodyReadable) || isLocked(bodyReadable)\n}\n\n/**\n * @typedef {'text' | 'json' | 'blob' | 'bytes' | 'arrayBuffer'} ConsumeType\n */\n\n/**\n * @template {ConsumeType} T\n * @typedef {T extends 'text' ? string :\n *           T extends 'json' ? unknown :\n *           T extends 'blob' ? Blob :\n *           T extends 'arrayBuffer' ? ArrayBuffer :\n *           T extends 'bytes' ? Uint8Array :\n *           never\n * } ConsumeReturnType\n */\n/**\n * @typedef {object} Consume\n * @property {ConsumeType} type\n * @property {BodyReadable} stream\n * @property {((value?: any) => void)} resolve\n * @property {((err: Error) => void)} reject\n * @property {number} length\n * @property {Buffer[]} body\n */\n\n/**\n * @template {ConsumeType} T\n * @param {BodyReadable} stream\n * @param {T} type\n * @returns {Promise<ConsumeReturnType<T>>}\n */\nfunction consume (stream, type) {\n  assert(!stream[kConsume])\n\n  return new Promise((resolve, reject) => {\n    if (isUnusable(stream)) {\n      const rState = stream._readableState\n      if (rState.destroyed && rState.closeEmitted === false) {\n        stream\n          .on('error', reject)\n          .on('close', () => {\n            reject(new TypeError('unusable'))\n          })\n      } else {\n        reject(rState.errored ?? new TypeError('unusable'))\n      }\n    } else {\n      queueMicrotask(() => {\n        stream[kConsume] = {\n          type,\n          stream,\n          resolve,\n          reject,\n          length: 0,\n          body: []\n        }\n\n        stream\n          .on('error', function (err) {\n            consumeFinish(this[kConsume], err)\n          })\n          .on('close', function () {\n            if (this[kConsume].body !== null) {\n              consumeFinish(this[kConsume], new RequestAbortedError())\n            }\n          })\n\n        consumeStart(stream[kConsume])\n      })\n    }\n  })\n}\n\n/**\n * @param {Consume} consume\n * @returns {void}\n */\nfunction consumeStart (consume) {\n  if (consume.body === null) {\n    return\n  }\n\n  const { _readableState: state } = consume.stream\n\n  if (state.bufferIndex) {\n    const start = state.bufferIndex\n    const end = state.buffer.length\n    for (let n = start; n < end; n++) {\n      consumePush(consume, state.buffer[n])\n    }\n  } else {\n    for (const chunk of state.buffer) {\n      consumePush(consume, chunk)\n    }\n  }\n\n  if (state.endEmitted) {\n    consumeEnd(this[kConsume], this._readableState.encoding)\n  } else {\n    consume.stream.on('end', function () {\n      consumeEnd(this[kConsume], this._readableState.encoding)\n    })\n  }\n\n  consume.stream.resume()\n\n  while (consume.stream.read() != null) {\n    // Loop\n  }\n}\n\n/**\n * @param {Buffer[]} chunks\n * @param {number} length\n * @param {BufferEncoding} [encoding='utf8']\n * @returns {string}\n */\nfunction chunksDecode (chunks, length, encoding) {\n  if (chunks.length === 0 || length === 0) {\n    return ''\n  }\n  const buffer = chunks.length === 1 ? chunks[0] : Buffer.concat(chunks, length)\n  const bufferLength = buffer.length\n\n  // Skip BOM.\n  const start =\n    bufferLength > 2 &&\n    buffer[0] === 0xef &&\n    buffer[1] === 0xbb &&\n    buffer[2] === 0xbf\n      ? 3\n      : 0\n  if (!encoding || encoding === 'utf8' || encoding === 'utf-8') {\n    return buffer.utf8Slice(start, bufferLength)\n  } else {\n    return buffer.subarray(start, bufferLength).toString(encoding)\n  }\n}\n\n/**\n * @param {Buffer[]} chunks\n * @param {number} length\n * @returns {Uint8Array}\n */\nfunction chunksConcat (chunks, length) {\n  if (chunks.length === 0 || length === 0) {\n    return new Uint8Array(0)\n  }\n  if (chunks.length === 1) {\n    // fast-path\n    return new Uint8Array(chunks[0])\n  }\n  const buffer = new Uint8Array(Buffer.allocUnsafeSlow(length).buffer)\n\n  let offset = 0\n  for (let i = 0; i < chunks.length; ++i) {\n    const chunk = chunks[i]\n    buffer.set(chunk, offset)\n    offset += chunk.length\n  }\n\n  return buffer\n}\n\n/**\n * @param {Consume} consume\n * @param {BufferEncoding} encoding\n * @returns {void}\n */\nfunction consumeEnd (consume, encoding) {\n  const { type, body, resolve, stream, length } = consume\n\n  try {\n    if (type === 'text') {\n      resolve(chunksDecode(body, length, encoding))\n    } else if (type === 'json') {\n      resolve(JSON.parse(chunksDecode(body, length, encoding)))\n    } else if (type === 'arrayBuffer') {\n      resolve(chunksConcat(body, length).buffer)\n    } else if (type === 'blob') {\n      resolve(new Blob(body, { type: stream[kContentType] }))\n    } else if (type === 'bytes') {\n      resolve(chunksConcat(body, length))\n    }\n\n    consumeFinish(consume)\n  } catch (err) {\n    stream.destroy(err)\n  }\n}\n\n/**\n * @param {Consume} consume\n * @param {Buffer} chunk\n * @returns {void}\n */\nfunction consumePush (consume, chunk) {\n  consume.length += chunk.length\n  consume.body.push(chunk)\n}\n\n/**\n * @param {Consume} consume\n * @param {Error} [err]\n * @returns {void}\n */\nfunction consumeFinish (consume, err) {\n  if (consume.body === null) {\n    return\n  }\n\n  if (err) {\n    consume.reject(err)\n  } else {\n    consume.resolve()\n  }\n\n  // Reset the consume object to allow for garbage collection.\n  consume.type = null\n  consume.stream = null\n  consume.resolve = null\n  consume.reject = null\n  consume.length = 0\n  consume.body = null\n}\n\nmodule.exports = {\n  Readable: BodyReadable,\n  chunksDecode\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { AsyncResource } = require('node:async_hooks')\nconst { Readable } = require('./readable')\nconst { InvalidArgumentError, RequestAbortedError } = require('../core/errors')\nconst util = require('../core/util')\n\nfunction noop () {}\n\nclass RequestHandler extends AsyncResource {\n  constructor (opts, callback) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    const { signal, method, opaque, body, onInfo, responseHeaders, highWaterMark } = opts\n\n    try {\n      if (typeof callback !== 'function') {\n        throw new InvalidArgumentError('invalid callback')\n      }\n\n      if (highWaterMark != null && (!Number.isFinite(highWaterMark) || highWaterMark < 0)) {\n        throw new InvalidArgumentError('invalid highWaterMark')\n      }\n\n      if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n        throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n      }\n\n      if (method === 'CONNECT') {\n        throw new InvalidArgumentError('invalid method')\n      }\n\n      if (onInfo && typeof onInfo !== 'function') {\n        throw new InvalidArgumentError('invalid onInfo callback')\n      }\n\n      super('UNDICI_REQUEST')\n    } catch (err) {\n      if (util.isStream(body)) {\n        util.destroy(body.on('error', noop), err)\n      }\n      throw err\n    }\n\n    this.method = method\n    this.responseHeaders = responseHeaders || null\n    this.opaque = opaque || null\n    this.callback = callback\n    this.res = null\n    this.abort = null\n    this.body = body\n    this.trailers = {}\n    this.context = null\n    this.onInfo = onInfo || null\n    this.highWaterMark = highWaterMark\n    this.reason = null\n    this.removeAbortListener = null\n\n    if (signal?.aborted) {\n      this.reason = signal.reason ?? new RequestAbortedError()\n    } else if (signal) {\n      this.removeAbortListener = util.addAbortListener(signal, () => {\n        this.reason = signal.reason ?? new RequestAbortedError()\n        if (this.res) {\n          util.destroy(this.res.on('error', noop), this.reason)\n        } else if (this.abort) {\n          this.abort(this.reason)\n        }\n      })\n    }\n  }\n\n  onConnect (abort, context) {\n    if (this.reason) {\n      abort(this.reason)\n      return\n    }\n\n    assert(this.callback)\n\n    this.abort = abort\n    this.context = context\n  }\n\n  onHeaders (statusCode, rawHeaders, resume, statusMessage) {\n    const { callback, opaque, abort, context, responseHeaders, highWaterMark } = this\n\n    const headers = responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n\n    if (statusCode < 200) {\n      if (this.onInfo) {\n        this.onInfo({ statusCode, headers })\n      }\n      return\n    }\n\n    const parsedHeaders = responseHeaders === 'raw' ? util.parseHeaders(rawHeaders) : headers\n    const contentType = parsedHeaders['content-type']\n    const contentLength = parsedHeaders['content-length']\n    const res = new Readable({\n      resume,\n      abort,\n      contentType,\n      contentLength: this.method !== 'HEAD' && contentLength\n        ? Number(contentLength)\n        : null,\n      highWaterMark\n    })\n\n    if (this.removeAbortListener) {\n      res.on('close', this.removeAbortListener)\n      this.removeAbortListener = null\n    }\n\n    this.callback = null\n    this.res = res\n    if (callback !== null) {\n      try {\n        this.runInAsyncScope(callback, null, null, {\n          statusCode,\n          statusText: statusMessage,\n          headers,\n          trailers: this.trailers,\n          opaque,\n          body: res,\n          context\n        })\n      } catch (err) {\n        // If the callback throws synchronously, we need to handle it\n        // Remove reference to res to allow res being garbage collected\n        this.res = null\n\n        // Destroy the response stream\n        util.destroy(res.on('error', noop), err)\n\n        // Use queueMicrotask to re-throw the error so it reaches uncaughtException\n        queueMicrotask(() => {\n          throw err\n        })\n      }\n    }\n  }\n\n  onData (chunk) {\n    return this.res.push(chunk)\n  }\n\n  onComplete (trailers) {\n    util.parseHeaders(trailers, this.trailers)\n    this.res.push(null)\n  }\n\n  onError (err) {\n    const { res, callback, body, opaque } = this\n\n    if (callback) {\n      // TODO: Does this need queueMicrotask?\n      this.callback = null\n      queueMicrotask(() => {\n        this.runInAsyncScope(callback, null, err, { opaque })\n      })\n    }\n\n    if (res) {\n      this.res = null\n      // Ensure all queued handlers are invoked before destroying res.\n      queueMicrotask(() => {\n        util.destroy(res.on('error', noop), err)\n      })\n    }\n\n    if (body) {\n      this.body = null\n\n      if (util.isStream(body)) {\n        body.on('error', noop)\n        util.destroy(body, err)\n      }\n    }\n\n    if (this.removeAbortListener) {\n      this.removeAbortListener()\n      this.removeAbortListener = null\n    }\n  }\n}\n\nfunction request (opts, callback) {\n  if (callback === undefined) {\n    return new Promise((resolve, reject) => {\n      request.call(this, opts, (err, data) => {\n        return err ? reject(err) : resolve(data)\n      })\n    })\n  }\n\n  try {\n    const handler = new RequestHandler(opts, callback)\n\n    this.dispatch(opts, handler)\n  } catch (err) {\n    if (typeof callback !== 'function') {\n      throw err\n    }\n    const opaque = opts?.opaque\n    queueMicrotask(() => callback(err, { opaque }))\n  }\n}\n\nmodule.exports = request\nmodule.exports.RequestHandler = RequestHandler\n", "'use strict'\n\nconst { addAbortListener } = require('../core/util')\nconst { RequestAbortedError } = require('../core/errors')\n\nconst kListener = Symbol('kListener')\nconst kSignal = Symbol('kSignal')\n\nfunction abort (self) {\n  if (self.abort) {\n    self.abort(self[kSignal]?.reason)\n  } else {\n    self.reason = self[kSignal]?.reason ?? new RequestAbortedError()\n  }\n  removeSignal(self)\n}\n\nfunction addSignal (self, signal) {\n  self.reason = null\n\n  self[kSignal] = null\n  self[kListener] = null\n\n  if (!signal) {\n    return\n  }\n\n  if (signal.aborted) {\n    abort(self)\n    return\n  }\n\n  self[kSignal] = signal\n  self[kListener] = () => {\n    abort(self)\n  }\n\n  addAbortListener(self[kSignal], self[kListener])\n}\n\nfunction removeSignal (self) {\n  if (!self[kSignal]) {\n    return\n  }\n\n  if ('removeEventListener' in self[kSignal]) {\n    self[kSignal].removeEventListener('abort', self[kListener])\n  } else {\n    self[kSignal].removeListener('abort', self[kListener])\n  }\n\n  self[kSignal] = null\n  self[kListener] = null\n}\n\nmodule.exports = {\n  addSignal,\n  removeSignal\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { finished } = require('node:stream')\nconst { AsyncResource } = require('node:async_hooks')\nconst { InvalidArgumentError, InvalidReturnValueError } = require('../core/errors')\nconst util = require('../core/util')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nfunction noop () {}\n\nclass StreamHandler extends AsyncResource {\n  constructor (opts, factory, callback) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    const { signal, method, opaque, body, onInfo, responseHeaders } = opts\n\n    try {\n      if (typeof callback !== 'function') {\n        throw new InvalidArgumentError('invalid callback')\n      }\n\n      if (typeof factory !== 'function') {\n        throw new InvalidArgumentError('invalid factory')\n      }\n\n      if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n        throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n      }\n\n      if (method === 'CONNECT') {\n        throw new InvalidArgumentError('invalid method')\n      }\n\n      if (onInfo && typeof onInfo !== 'function') {\n        throw new InvalidArgumentError('invalid onInfo callback')\n      }\n\n      super('UNDICI_STREAM')\n    } catch (err) {\n      if (util.isStream(body)) {\n        util.destroy(body.on('error', noop), err)\n      }\n      throw err\n    }\n\n    this.responseHeaders = responseHeaders || null\n    this.opaque = opaque || null\n    this.factory = factory\n    this.callback = callback\n    this.res = null\n    this.abort = null\n    this.context = null\n    this.trailers = null\n    this.body = body\n    this.onInfo = onInfo || null\n\n    if (util.isStream(body)) {\n      body.on('error', (err) => {\n        this.onError(err)\n      })\n    }\n\n    addSignal(this, signal)\n  }\n\n  onConnect (abort, context) {\n    if (this.reason) {\n      abort(this.reason)\n      return\n    }\n\n    assert(this.callback)\n\n    this.abort = abort\n    this.context = context\n  }\n\n  onHeaders (statusCode, rawHeaders, resume, statusMessage) {\n    const { factory, opaque, context, responseHeaders } = this\n\n    const headers = responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n\n    if (statusCode < 200) {\n      if (this.onInfo) {\n        this.onInfo({ statusCode, headers })\n      }\n      return\n    }\n\n    this.factory = null\n\n    if (factory === null) {\n      return\n    }\n\n    const res = this.runInAsyncScope(factory, null, {\n      statusCode,\n      headers,\n      opaque,\n      context\n    })\n\n    if (\n      !res ||\n      typeof res.write !== 'function' ||\n      typeof res.end !== 'function' ||\n      typeof res.on !== 'function'\n    ) {\n      throw new InvalidReturnValueError('expected Writable')\n    }\n\n    // TODO: Avoid finished. It registers an unnecessary amount of listeners.\n    finished(res, { readable: false }, (err) => {\n      const { callback, res, opaque, trailers, abort } = this\n\n      this.res = null\n      if (err || !res?.readable) {\n        util.destroy(res, err)\n      }\n\n      this.callback = null\n      this.runInAsyncScope(callback, null, err || null, { opaque, trailers })\n\n      if (err) {\n        abort()\n      }\n    })\n\n    res.on('drain', resume)\n\n    this.res = res\n\n    const needDrain = res.writableNeedDrain !== undefined\n      ? res.writableNeedDrain\n      : res._writableState?.needDrain\n\n    return needDrain !== true\n  }\n\n  onData (chunk) {\n    const { res } = this\n\n    return res ? res.write(chunk) : true\n  }\n\n  onComplete (trailers) {\n    const { res } = this\n\n    removeSignal(this)\n\n    if (!res) {\n      return\n    }\n\n    this.trailers = util.parseHeaders(trailers)\n\n    res.end()\n  }\n\n  onError (err) {\n    const { res, callback, opaque, body } = this\n\n    removeSignal(this)\n\n    this.factory = null\n\n    if (res) {\n      this.res = null\n      util.destroy(res, err)\n    } else if (callback) {\n      this.callback = null\n      queueMicrotask(() => {\n        this.runInAsyncScope(callback, null, err, { opaque })\n      })\n    }\n\n    if (body) {\n      this.body = null\n      util.destroy(body, err)\n    }\n  }\n}\n\nfunction stream (opts, factory, callback) {\n  if (callback === undefined) {\n    return new Promise((resolve, reject) => {\n      stream.call(this, opts, factory, (err, data) => {\n        return err ? reject(err) : resolve(data)\n      })\n    })\n  }\n\n  try {\n    const handler = new StreamHandler(opts, factory, callback)\n\n    this.dispatch(opts, handler)\n  } catch (err) {\n    if (typeof callback !== 'function') {\n      throw err\n    }\n    const opaque = opts?.opaque\n    queueMicrotask(() => callback(err, { opaque }))\n  }\n}\n\nmodule.exports = stream\n", "'use strict'\n\nconst {\n  Readable,\n  Duplex,\n  PassThrough\n} = require('node:stream')\nconst assert = require('node:assert')\nconst { AsyncResource } = require('node:async_hooks')\nconst {\n  InvalidArgumentError,\n  InvalidReturnValueError,\n  RequestAbortedError\n} = require('../core/errors')\nconst util = require('../core/util')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nfunction noop () {}\n\nconst kResume = Symbol('resume')\n\nclass PipelineRequest extends Readable {\n  constructor () {\n    super({ autoDestroy: true })\n\n    this[kResume] = null\n  }\n\n  _read () {\n    const { [kResume]: resume } = this\n\n    if (resume) {\n      this[kResume] = null\n      resume()\n    }\n  }\n\n  _destroy (err, callback) {\n    this._read()\n\n    callback(err)\n  }\n}\n\nclass PipelineResponse extends Readable {\n  constructor (resume) {\n    super({ autoDestroy: true })\n    this[kResume] = resume\n  }\n\n  _read () {\n    this[kResume]()\n  }\n\n  _destroy (err, callback) {\n    if (!err && !this._readableState.endEmitted) {\n      err = new RequestAbortedError()\n    }\n\n    callback(err)\n  }\n}\n\nclass PipelineHandler extends AsyncResource {\n  constructor (opts, handler) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    if (typeof handler !== 'function') {\n      throw new InvalidArgumentError('invalid handler')\n    }\n\n    const { signal, method, opaque, onInfo, responseHeaders } = opts\n\n    if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n      throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n    }\n\n    if (method === 'CONNECT') {\n      throw new InvalidArgumentError('invalid method')\n    }\n\n    if (onInfo && typeof onInfo !== 'function') {\n      throw new InvalidArgumentError('invalid onInfo callback')\n    }\n\n    super('UNDICI_PIPELINE')\n\n    this.opaque = opaque || null\n    this.responseHeaders = responseHeaders || null\n    this.handler = handler\n    this.abort = null\n    this.context = null\n    this.onInfo = onInfo || null\n\n    this.req = new PipelineRequest().on('error', noop)\n\n    this.ret = new Duplex({\n      readableObjectMode: opts.objectMode,\n      autoDestroy: true,\n      read: () => {\n        const { body } = this\n\n        if (body?.resume) {\n          body.resume()\n        }\n      },\n      write: (chunk, encoding, callback) => {\n        const { req } = this\n\n        if (req.push(chunk, encoding) || req._readableState.destroyed) {\n          callback()\n        } else {\n          req[kResume] = callback\n        }\n      },\n      destroy: (err, callback) => {\n        const { body, req, res, ret, abort } = this\n\n        if (!err && !ret._readableState.endEmitted) {\n          err = new RequestAbortedError()\n        }\n\n        if (abort && err) {\n          abort()\n        }\n\n        util.destroy(body, err)\n        util.destroy(req, err)\n        util.destroy(res, err)\n\n        removeSignal(this)\n\n        callback(err)\n      }\n    }).on('prefinish', () => {\n      const { req } = this\n\n      // Node < 15 does not call _final in same tick.\n      req.push(null)\n    })\n\n    this.res = null\n\n    addSignal(this, signal)\n  }\n\n  onConnect (abort, context) {\n    const { res } = this\n\n    if (this.reason) {\n      abort(this.reason)\n      return\n    }\n\n    assert(!res, 'pipeline cannot be retried')\n\n    this.abort = abort\n    this.context = context\n  }\n\n  onHeaders (statusCode, rawHeaders, resume) {\n    const { opaque, handler, context } = this\n\n    if (statusCode < 200) {\n      if (this.onInfo) {\n        const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n        this.onInfo({ statusCode, headers })\n      }\n      return\n    }\n\n    this.res = new PipelineResponse(resume)\n\n    let body\n    try {\n      this.handler = null\n      const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n      body = this.runInAsyncScope(handler, null, {\n        statusCode,\n        headers,\n        opaque,\n        body: this.res,\n        context\n      })\n    } catch (err) {\n      this.res.on('error', noop)\n      throw err\n    }\n\n    if (!body || typeof body.on !== 'function') {\n      throw new InvalidReturnValueError('expected Readable')\n    }\n\n    body\n      .on('data', (chunk) => {\n        const { ret, body } = this\n\n        if (!ret.push(chunk) && body.pause) {\n          body.pause()\n        }\n      })\n      .on('error', (err) => {\n        const { ret } = this\n\n        util.destroy(ret, err)\n      })\n      .on('end', () => {\n        const { ret } = this\n\n        ret.push(null)\n      })\n      .on('close', () => {\n        const { ret } = this\n\n        if (!ret._readableState.ended) {\n          util.destroy(ret, new RequestAbortedError())\n        }\n      })\n\n    this.body = body\n  }\n\n  onData (chunk) {\n    const { res } = this\n    return res.push(chunk)\n  }\n\n  onComplete (trailers) {\n    const { res } = this\n    res.push(null)\n  }\n\n  onError (err) {\n    const { ret } = this\n    this.handler = null\n    util.destroy(ret, err)\n  }\n}\n\nfunction pipeline (opts, handler) {\n  try {\n    const pipelineHandler = new PipelineHandler(opts, handler)\n    this.dispatch({ ...opts, body: pipelineHandler.req }, pipelineHandler)\n    return pipelineHandler.ret\n  } catch (err) {\n    return new PassThrough().destroy(err)\n  }\n}\n\nmodule.exports = pipeline\n", "'use strict'\n\nconst { InvalidArgumentError, SocketError } = require('../core/errors')\nconst { AsyncResource } = require('node:async_hooks')\nconst assert = require('node:assert')\nconst util = require('../core/util')\nconst { kHTTP2Stream } = require('../core/symbols')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nclass UpgradeHandler extends AsyncResource {\n  constructor (opts, callback) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    if (typeof callback !== 'function') {\n      throw new InvalidArgumentError('invalid callback')\n    }\n\n    const { signal, opaque, responseHeaders } = opts\n\n    if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n      throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n    }\n\n    super('UNDICI_UPGRADE')\n\n    this.responseHeaders = responseHeaders || null\n    this.opaque = opaque || null\n    this.callback = callback\n    this.abort = null\n    this.context = null\n\n    addSignal(this, signal)\n  }\n\n  onConnect (abort, context) {\n    if (this.reason) {\n      abort(this.reason)\n      return\n    }\n\n    assert(this.callback)\n\n    this.abort = abort\n    this.context = null\n  }\n\n  onHeaders () {\n    throw new SocketError('bad upgrade', null)\n  }\n\n  onUpgrade (statusCode, rawHeaders, socket) {\n    assert(socket[kHTTP2Stream] === true ? statusCode === 200 : statusCode === 101)\n\n    const { callback, opaque, context } = this\n\n    removeSignal(this)\n\n    this.callback = null\n    const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n    this.runInAsyncScope(callback, null, null, {\n      headers,\n      socket,\n      opaque,\n      context\n    })\n  }\n\n  onError (err) {\n    const { callback, opaque } = this\n\n    removeSignal(this)\n\n    if (callback) {\n      this.callback = null\n      queueMicrotask(() => {\n        this.runInAsyncScope(callback, null, err, { opaque })\n      })\n    }\n  }\n}\n\nfunction upgrade (opts, callback) {\n  if (callback === undefined) {\n    return new Promise((resolve, reject) => {\n      upgrade.call(this, opts, (err, data) => {\n        return err ? reject(err) : resolve(data)\n      })\n    })\n  }\n\n  try {\n    const upgradeHandler = new UpgradeHandler(opts, callback)\n    const upgradeOpts = {\n      ...opts,\n      method: opts.method || 'GET',\n      upgrade: opts.protocol || 'Websocket'\n    }\n\n    this.dispatch(upgradeOpts, upgradeHandler)\n  } catch (err) {\n    if (typeof callback !== 'function') {\n      throw err\n    }\n    const opaque = opts?.opaque\n    queueMicrotask(() => callback(err, { opaque }))\n  }\n}\n\nmodule.exports = upgrade\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { AsyncResource } = require('node:async_hooks')\nconst { InvalidArgumentError, SocketError } = require('../core/errors')\nconst util = require('../core/util')\nconst { addSignal, removeSignal } = require('./abort-signal')\n\nclass ConnectHandler extends AsyncResource {\n  constructor (opts, callback) {\n    if (!opts || typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    if (typeof callback !== 'function') {\n      throw new InvalidArgumentError('invalid callback')\n    }\n\n    const { signal, opaque, responseHeaders } = opts\n\n    if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') {\n      throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget')\n    }\n\n    super('UNDICI_CONNECT')\n\n    this.opaque = opaque || null\n    this.responseHeaders = responseHeaders || null\n    this.callback = callback\n    this.abort = null\n\n    addSignal(this, signal)\n  }\n\n  onConnect (abort, context) {\n    if (this.reason) {\n      abort(this.reason)\n      return\n    }\n\n    assert(this.callback)\n\n    this.abort = abort\n    this.context = context\n  }\n\n  onHeaders () {\n    throw new SocketError('bad connect', null)\n  }\n\n  onUpgrade (statusCode, rawHeaders, socket) {\n    const { callback, opaque, context } = this\n\n    removeSignal(this)\n\n    this.callback = null\n\n    let headers = rawHeaders\n    // Indicates is an HTTP2Session\n    if (headers != null) {\n      headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders)\n    }\n\n    this.runInAsyncScope(callback, null, null, {\n      statusCode,\n      headers,\n      socket,\n      opaque,\n      context\n    })\n  }\n\n  onError (err) {\n    const { callback, opaque } = this\n\n    removeSignal(this)\n\n    if (callback) {\n      this.callback = null\n      queueMicrotask(() => {\n        this.runInAsyncScope(callback, null, err, { opaque })\n      })\n    }\n  }\n}\n\nfunction connect (opts, callback) {\n  if (callback === undefined) {\n    return new Promise((resolve, reject) => {\n      connect.call(this, opts, (err, data) => {\n        return err ? reject(err) : resolve(data)\n      })\n    })\n  }\n\n  try {\n    const connectHandler = new ConnectHandler(opts, callback)\n    const connectOptions = { ...opts, method: 'CONNECT' }\n\n    this.dispatch(connectOptions, connectHandler)\n  } catch (err) {\n    if (typeof callback !== 'function') {\n      throw err\n    }\n    const opaque = opts?.opaque\n    queueMicrotask(() => callback(err, { opaque }))\n  }\n}\n\nmodule.exports = connect\n", "'use strict'\n\nmodule.exports.request = require('./api-request')\nmodule.exports.stream = require('./api-stream')\nmodule.exports.pipeline = require('./api-pipeline')\nmodule.exports.upgrade = require('./api-upgrade')\nmodule.exports.connect = require('./api-connect')\n", "'use strict'\n\nconst { UndiciError } = require('../core/errors')\n\nconst kMockNotMatchedError = Symbol.for('undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED')\n\n/**\n * The request does not match any registered mock dispatches.\n */\nclass MockNotMatchedError extends UndiciError {\n  constructor (message) {\n    super(message)\n    this.name = 'MockNotMatchedError'\n    this.message = message || 'The request does not match any registered mock dispatches'\n    this.code = 'UND_MOCK_ERR_MOCK_NOT_MATCHED'\n  }\n\n  static [Symbol.hasInstance] (instance) {\n    return instance && instance[kMockNotMatchedError] === true\n  }\n\n  get [kMockNotMatchedError] () {\n    return true\n  }\n}\n\nmodule.exports = {\n  MockNotMatchedError\n}\n", "'use strict'\n\nmodule.exports = {\n  kAgent: Symbol('agent'),\n  kOptions: Symbol('options'),\n  kFactory: Symbol('factory'),\n  kDispatches: Symbol('dispatches'),\n  kDispatchKey: Symbol('dispatch key'),\n  kDefaultHeaders: Symbol('default headers'),\n  kDefaultTrailers: Symbol('default trailers'),\n  kContentLength: Symbol('content length'),\n  kMockAgent: Symbol('mock agent'),\n  kMockAgentSet: Symbol('mock agent set'),\n  kMockAgentGet: Symbol('mock agent get'),\n  kMockDispatch: Symbol('mock dispatch'),\n  kClose: Symbol('close'),\n  kOriginalClose: Symbol('original agent close'),\n  kOriginalDispatch: Symbol('original dispatch'),\n  kOrigin: Symbol('origin'),\n  kIsMockActive: Symbol('is mock active'),\n  kNetConnect: Symbol('net connect'),\n  kGetNetConnect: Symbol('get net connect'),\n  kConnected: Symbol('connected'),\n  kIgnoreTrailingSlash: Symbol('ignore trailing slash'),\n  kMockAgentMockCallHistoryInstance: Symbol('mock agent mock call history name'),\n  kMockAgentRegisterCallHistory: Symbol('mock agent register mock call history'),\n  kMockAgentAddCallHistoryLog: Symbol('mock agent add call history log'),\n  kMockAgentIsCallHistoryEnabled: Symbol('mock agent is call history enabled'),\n  kMockAgentAcceptsNonStandardSearchParameters: Symbol('mock agent accepts non standard search parameters'),\n  kMockCallHistoryAddLog: Symbol('mock call history add log'),\n  kTotalDispatchCount: Symbol('total dispatch count')\n}\n", "'use strict'\n\nconst { MockNotMatchedError } = require('./mock-errors')\nconst {\n  kDispatches,\n  kMockAgent,\n  kOriginalDispatch,\n  kOrigin,\n  kGetNetConnect,\n  kTotalDispatchCount\n} = require('./mock-symbols')\nconst { serializePathWithQuery } = require('../core/util')\nconst { STATUS_CODES } = require('node:http')\nconst {\n  types: {\n    isPromise\n  }\n} = require('node:util')\nconst { InvalidArgumentError } = require('../core/errors')\n\nfunction matchValue (match, value) {\n  if (typeof match === 'string') {\n    return match === value\n  }\n  if (match instanceof RegExp) {\n    return match.test(value)\n  }\n  if (typeof match === 'function') {\n    return match(value) === true\n  }\n  return false\n}\n\nfunction lowerCaseEntries (headers) {\n  return Object.fromEntries(\n    Object.entries(headers).map(([headerName, headerValue]) => {\n      return [headerName.toLocaleLowerCase(), headerValue]\n    })\n  )\n}\n\n/**\n * @param {import('../../index').Headers|string[]|Record<string, string>} headers\n * @param {string} key\n */\nfunction getHeaderByName (headers, key) {\n  if (Array.isArray(headers)) {\n    for (let i = 0; i < headers.length; i += 2) {\n      if (headers[i].toLocaleLowerCase() === key.toLocaleLowerCase()) {\n        return headers[i + 1]\n      }\n    }\n\n    return undefined\n  } else if (typeof headers.get === 'function') {\n    return headers.get(key)\n  } else {\n    return lowerCaseEntries(headers)[key.toLocaleLowerCase()]\n  }\n}\n\n/** @param {string[]} headers */\nfunction buildHeadersFromArray (headers) { // fetch HeadersList\n  const clone = headers.slice()\n  const entries = []\n  for (let index = 0; index < clone.length; index += 2) {\n    entries.push([clone[index], clone[index + 1]])\n  }\n  return Object.fromEntries(entries)\n}\n\nfunction matchHeaders (mockDispatch, headers) {\n  if (typeof mockDispatch.headers === 'function') {\n    if (Array.isArray(headers)) { // fetch HeadersList\n      headers = buildHeadersFromArray(headers)\n    }\n    return mockDispatch.headers(headers ? lowerCaseEntries(headers) : {})\n  }\n  if (typeof mockDispatch.headers === 'undefined') {\n    return true\n  }\n  if (typeof headers !== 'object' || typeof mockDispatch.headers !== 'object') {\n    return false\n  }\n\n  for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch.headers)) {\n    const headerValue = getHeaderByName(headers, matchHeaderName)\n\n    if (!matchValue(matchHeaderValue, headerValue)) {\n      return false\n    }\n  }\n  return true\n}\n\nfunction normalizeSearchParams (query) {\n  if (typeof query !== 'string') {\n    return query\n  }\n\n  const originalQp = new URLSearchParams(query)\n  const normalizedQp = new URLSearchParams()\n\n  for (let [key, value] of originalQp.entries()) {\n    key = key.replace('[]', '')\n\n    const valueRepresentsString = /^(['\"]).*\\1$/.test(value)\n    if (valueRepresentsString) {\n      normalizedQp.append(key, value)\n      continue\n    }\n\n    if (value.includes(',')) {\n      const values = value.split(',')\n      for (const v of values) {\n        normalizedQp.append(key, v)\n      }\n      continue\n    }\n\n    normalizedQp.append(key, value)\n  }\n\n  return normalizedQp\n}\n\nfunction safeUrl (path) {\n  if (typeof path !== 'string') {\n    return path\n  }\n  const pathSegments = path.split('?', 3)\n  if (pathSegments.length !== 2) {\n    return path\n  }\n\n  const qp = new URLSearchParams(pathSegments.pop())\n  qp.sort()\n  return [...pathSegments, qp.toString()].join('?')\n}\n\nfunction matchKey (mockDispatch, { path, method, body, headers }) {\n  const pathMatch = matchValue(mockDispatch.path, path)\n  const methodMatch = matchValue(mockDispatch.method, method)\n  const bodyMatch = typeof mockDispatch.body !== 'undefined' ? matchValue(mockDispatch.body, body) : true\n  const headersMatch = matchHeaders(mockDispatch, headers)\n  return pathMatch && methodMatch && bodyMatch && headersMatch\n}\n\nfunction getResponseData (data) {\n  if (Buffer.isBuffer(data)) {\n    return data\n  } else if (data instanceof Uint8Array) {\n    return data\n  } else if (data instanceof ArrayBuffer) {\n    return data\n  } else if (typeof data === 'object') {\n    return JSON.stringify(data)\n  } else if (data) {\n    return data.toString()\n  } else {\n    return ''\n  }\n}\n\nfunction getMockDispatch (mockDispatches, key) {\n  const basePath = key.query ? serializePathWithQuery(key.path, key.query) : key.path\n  const resolvedPath = typeof basePath === 'string' ? safeUrl(basePath) : basePath\n\n  const resolvedPathWithoutTrailingSlash = removeTrailingSlash(resolvedPath)\n\n  // Match path\n  let matchedMockDispatches = mockDispatches\n    .filter(({ consumed }) => !consumed)\n    .filter(({ path, ignoreTrailingSlash }) => {\n      return ignoreTrailingSlash\n        ? matchValue(removeTrailingSlash(safeUrl(path)), resolvedPathWithoutTrailingSlash)\n        : matchValue(safeUrl(path), resolvedPath)\n    })\n  if (matchedMockDispatches.length === 0) {\n    throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`)\n  }\n\n  // Match method\n  matchedMockDispatches = matchedMockDispatches.filter(({ method }) => matchValue(method, key.method))\n  if (matchedMockDispatches.length === 0) {\n    throw new MockNotMatchedError(`Mock dispatch not matched for method '${key.method}' on path '${resolvedPath}'`)\n  }\n\n  // Match body\n  matchedMockDispatches = matchedMockDispatches.filter(({ body }) => typeof body !== 'undefined' ? matchValue(body, key.body) : true)\n  if (matchedMockDispatches.length === 0) {\n    throw new MockNotMatchedError(`Mock dispatch not matched for body '${key.body}' on path '${resolvedPath}'`)\n  }\n\n  // Match headers\n  matchedMockDispatches = matchedMockDispatches.filter((mockDispatch) => matchHeaders(mockDispatch, key.headers))\n  if (matchedMockDispatches.length === 0) {\n    const headers = typeof key.headers === 'object' ? JSON.stringify(key.headers) : key.headers\n    throw new MockNotMatchedError(`Mock dispatch not matched for headers '${headers}' on path '${resolvedPath}'`)\n  }\n\n  return matchedMockDispatches[0]\n}\n\nfunction addMockDispatch (mockDispatches, key, data, opts) {\n  const baseData = { timesInvoked: 0, times: 1, persist: false, consumed: false, ...opts }\n  const replyData = typeof data === 'function' ? { callback: data } : { ...data }\n  const newMockDispatch = { ...baseData, ...key, pending: true, data: { error: null, ...replyData } }\n  mockDispatches.push(newMockDispatch)\n  // Track total number of intercepts ever registered for better error messages\n  mockDispatches[kTotalDispatchCount] = (mockDispatches[kTotalDispatchCount] || 0) + 1\n  return newMockDispatch\n}\n\nfunction deleteMockDispatch (mockDispatches, key) {\n  const index = mockDispatches.findIndex(dispatch => {\n    if (!dispatch.consumed) {\n      return false\n    }\n    return matchKey(dispatch, key)\n  })\n  if (index !== -1) {\n    mockDispatches.splice(index, 1)\n  }\n}\n\n/**\n * @param {string} path Path to remove trailing slash from\n */\nfunction removeTrailingSlash (path) {\n  while (path.endsWith('/')) {\n    path = path.slice(0, -1)\n  }\n\n  if (path.length === 0) {\n    path = '/'\n  }\n\n  return path\n}\n\nfunction buildKey (opts) {\n  const { path, method, body, headers, query } = opts\n\n  return {\n    path,\n    method,\n    body,\n    headers,\n    query\n  }\n}\n\nfunction generateKeyValues (data) {\n  const keys = Object.keys(data)\n  const result = []\n  for (let i = 0; i < keys.length; ++i) {\n    const key = keys[i]\n    const value = data[key]\n    const name = Buffer.from(`${key}`)\n    if (Array.isArray(value)) {\n      for (let j = 0; j < value.length; ++j) {\n        result.push(name, Buffer.from(`${value[j]}`))\n      }\n    } else {\n      result.push(name, Buffer.from(`${value}`))\n    }\n  }\n  return result\n}\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Status\n * @param {number} statusCode\n */\nfunction getStatusText (statusCode) {\n  return STATUS_CODES[statusCode] || 'unknown'\n}\n\nasync function getResponse (body) {\n  const buffers = []\n  for await (const data of body) {\n    buffers.push(data)\n  }\n  return Buffer.concat(buffers).toString('utf8')\n}\n\n/**\n * Mock dispatch function used to simulate undici dispatches\n */\nfunction mockDispatch (opts, handler) {\n  // Get mock dispatch from built key\n  const key = buildKey(opts)\n  const mockDispatch = getMockDispatch(this[kDispatches], key)\n\n  mockDispatch.timesInvoked++\n\n  // Here's where we resolve a callback if a callback is present for the dispatch data.\n  if (mockDispatch.data.callback) {\n    mockDispatch.data = { ...mockDispatch.data, ...mockDispatch.data.callback(opts) }\n  }\n\n  // Parse mockDispatch data\n  const { data: { statusCode, data, headers, trailers, error }, delay, persist } = mockDispatch\n  const { timesInvoked, times } = mockDispatch\n\n  // If it's used up and not persistent, mark as consumed\n  mockDispatch.consumed = !persist && timesInvoked >= times\n  mockDispatch.pending = timesInvoked < times\n\n  // If specified, trigger dispatch error\n  if (error !== null) {\n    deleteMockDispatch(this[kDispatches], key)\n    handler.onError(error)\n    return true\n  }\n\n  // Track whether the request has been aborted\n  let aborted = false\n  let timer = null\n\n  function abort (err) {\n    if (aborted) {\n      return\n    }\n    aborted = true\n\n    // Clear the pending delayed response if any\n    if (timer !== null) {\n      clearTimeout(timer)\n      timer = null\n    }\n\n    // Notify the handler of the abort\n    handler.onError(err)\n  }\n\n  // Call onConnect to allow the handler to register the abort callback\n  handler.onConnect?.(abort, null)\n\n  // Handle the request with a delay if necessary\n  if (typeof delay === 'number' && delay > 0) {\n    timer = setTimeout(() => {\n      timer = null\n      handleReply(this[kDispatches])\n    }, delay)\n  } else {\n    handleReply(this[kDispatches])\n  }\n\n  function handleReply (mockDispatches, _data = data) {\n    // Don't send response if the request was aborted\n    if (aborted) {\n      return\n    }\n\n    // fetch's HeadersList is a 1D string array\n    const optsHeaders = Array.isArray(opts.headers)\n      ? buildHeadersFromArray(opts.headers)\n      : opts.headers\n    const body = typeof _data === 'function'\n      ? _data({ ...opts, headers: optsHeaders })\n      : _data\n\n    // util.types.isPromise is likely needed for jest.\n    if (isPromise(body)) {\n      // If handleReply is asynchronous, throwing an error\n      // in the callback will reject the promise, rather than\n      // synchronously throw the error, which breaks some tests.\n      // Rather, we wait for the callback to resolve if it is a\n      // promise, and then re-run handleReply with the new body.\n      return body.then((newData) => handleReply(mockDispatches, newData))\n    }\n\n    // Check again if aborted after async body resolution\n    if (aborted) {\n      return\n    }\n\n    const responseData = getResponseData(body)\n    const responseHeaders = generateKeyValues(headers)\n    const responseTrailers = generateKeyValues(trailers)\n\n    handler.onHeaders?.(statusCode, responseHeaders, resume, getStatusText(statusCode))\n    handler.onData?.(Buffer.from(responseData))\n    handler.onComplete?.(responseTrailers)\n    deleteMockDispatch(mockDispatches, key)\n  }\n\n  function resume () {}\n\n  return true\n}\n\nfunction buildMockDispatch () {\n  const agent = this[kMockAgent]\n  const origin = this[kOrigin]\n  const originalDispatch = this[kOriginalDispatch]\n\n  return function dispatch (opts, handler) {\n    if (agent.isMockActive) {\n      try {\n        mockDispatch.call(this, opts, handler)\n      } catch (error) {\n        if (error.code === 'UND_MOCK_ERR_MOCK_NOT_MATCHED') {\n          const netConnect = agent[kGetNetConnect]()\n          const totalInterceptsCount = this[kDispatches][kTotalDispatchCount] || this[kDispatches].length\n          const pendingInterceptsCount = this[kDispatches].filter(({ consumed }) => !consumed).length\n          const interceptsMessage = `, ${pendingInterceptsCount} interceptor(s) remaining out of ${totalInterceptsCount} defined`\n          if (netConnect === false) {\n            throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect disabled)${interceptsMessage}`)\n          }\n          if (checkNetConnect(netConnect, origin)) {\n            originalDispatch.call(this, opts, handler)\n          } else {\n            throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect is not enabled for this origin)${interceptsMessage}`)\n          }\n        } else {\n          throw error\n        }\n      }\n    } else {\n      originalDispatch.call(this, opts, handler)\n    }\n  }\n}\n\nfunction checkNetConnect (netConnect, origin) {\n  const url = new URL(origin)\n  if (netConnect === true) {\n    return true\n  } else if (Array.isArray(netConnect) && netConnect.some((matcher) => matchValue(matcher, url.host))) {\n    return true\n  }\n  return false\n}\n\nfunction normalizeOrigin (origin) {\n  if (typeof origin !== 'string' && !(origin instanceof URL)) {\n    return origin\n  }\n\n  if (origin instanceof URL) {\n    return origin.origin\n  }\n\n  return origin.toLowerCase()\n}\n\nfunction buildAndValidateMockOptions (opts) {\n  const { agent, ...mockOptions } = opts\n\n  if ('enableCallHistory' in mockOptions && typeof mockOptions.enableCallHistory !== 'boolean') {\n    throw new InvalidArgumentError('options.enableCallHistory must to be a boolean')\n  }\n\n  if ('acceptNonStandardSearchParameters' in mockOptions && typeof mockOptions.acceptNonStandardSearchParameters !== 'boolean') {\n    throw new InvalidArgumentError('options.acceptNonStandardSearchParameters must to be a boolean')\n  }\n\n  if ('ignoreTrailingSlash' in mockOptions && typeof mockOptions.ignoreTrailingSlash !== 'boolean') {\n    throw new InvalidArgumentError('options.ignoreTrailingSlash must to be a boolean')\n  }\n\n  return mockOptions\n}\n\nmodule.exports = {\n  getResponseData,\n  getMockDispatch,\n  addMockDispatch,\n  deleteMockDispatch,\n  buildKey,\n  generateKeyValues,\n  matchValue,\n  getResponse,\n  getStatusText,\n  mockDispatch,\n  buildMockDispatch,\n  checkNetConnect,\n  buildAndValidateMockOptions,\n  getHeaderByName,\n  buildHeadersFromArray,\n  normalizeSearchParams,\n  normalizeOrigin\n}\n", "'use strict'\n\nconst { getResponseData, buildKey, addMockDispatch } = require('./mock-utils')\nconst {\n  kDispatches,\n  kDispatchKey,\n  kDefaultHeaders,\n  kDefaultTrailers,\n  kContentLength,\n  kMockDispatch,\n  kIgnoreTrailingSlash\n} = require('./mock-symbols')\nconst { InvalidArgumentError } = require('../core/errors')\nconst { serializePathWithQuery } = require('../core/util')\n\n/**\n * Defines the scope API for an interceptor reply\n */\nclass MockScope {\n  constructor (mockDispatch) {\n    this[kMockDispatch] = mockDispatch\n  }\n\n  /**\n   * Delay a reply by a set amount in ms.\n   */\n  delay (waitInMs) {\n    if (typeof waitInMs !== 'number' || !Number.isInteger(waitInMs) || waitInMs <= 0) {\n      throw new InvalidArgumentError('waitInMs must be a valid integer > 0')\n    }\n\n    this[kMockDispatch].delay = waitInMs\n    return this\n  }\n\n  /**\n   * For a defined reply, never mark as consumed.\n   */\n  persist () {\n    this[kMockDispatch].persist = true\n    return this\n  }\n\n  /**\n   * Allow one to define a reply for a set amount of matching requests.\n   */\n  times (repeatTimes) {\n    if (typeof repeatTimes !== 'number' || !Number.isInteger(repeatTimes) || repeatTimes <= 0) {\n      throw new InvalidArgumentError('repeatTimes must be a valid integer > 0')\n    }\n\n    this[kMockDispatch].times = repeatTimes\n    return this\n  }\n}\n\n/**\n * Defines an interceptor for a Mock\n */\nclass MockInterceptor {\n  constructor (opts, mockDispatches) {\n    if (typeof opts !== 'object') {\n      throw new InvalidArgumentError('opts must be an object')\n    }\n    if (typeof opts.path === 'undefined') {\n      throw new InvalidArgumentError('opts.path must be defined')\n    }\n    if (typeof opts.method === 'undefined') {\n      opts.method = 'GET'\n    }\n    // See https://github.com/nodejs/undici/issues/1245\n    // As per RFC 3986, clients are not supposed to send URI\n    // fragments to servers when they retrieve a document,\n    if (typeof opts.path === 'string') {\n      if (opts.query) {\n        opts.path = serializePathWithQuery(opts.path, opts.query)\n      } else {\n        // Matches https://github.com/nodejs/undici/blob/main/lib/web/fetch/index.js#L1811\n        const parsedURL = new URL(opts.path, 'data://')\n        opts.path = parsedURL.pathname + parsedURL.search\n      }\n    }\n    if (typeof opts.method === 'string') {\n      opts.method = opts.method.toUpperCase()\n    }\n\n    this[kDispatchKey] = buildKey(opts)\n    this[kDispatches] = mockDispatches\n    this[kIgnoreTrailingSlash] = opts.ignoreTrailingSlash ?? false\n    this[kDefaultHeaders] = {}\n    this[kDefaultTrailers] = {}\n    this[kContentLength] = false\n  }\n\n  createMockScopeDispatchData ({ statusCode, data, responseOptions }) {\n    const responseData = getResponseData(data)\n    const contentLength = this[kContentLength] ? { 'content-length': responseData.length } : {}\n    const headers = { ...this[kDefaultHeaders], ...contentLength, ...responseOptions.headers }\n    const trailers = { ...this[kDefaultTrailers], ...responseOptions.trailers }\n\n    return { statusCode, data, headers, trailers }\n  }\n\n  validateReplyParameters (replyParameters) {\n    if (typeof replyParameters.statusCode === 'undefined') {\n      throw new InvalidArgumentError('statusCode must be defined')\n    }\n    if (typeof replyParameters.responseOptions !== 'object' || replyParameters.responseOptions === null) {\n      throw new InvalidArgumentError('responseOptions must be an object')\n    }\n  }\n\n  /**\n   * Mock an undici request with a defined reply.\n   */\n  reply (replyOptionsCallbackOrStatusCode) {\n    // Values of reply aren't available right now as they\n    // can only be available when the reply callback is invoked.\n    if (typeof replyOptionsCallbackOrStatusCode === 'function') {\n      // We'll first wrap the provided callback in another function,\n      // this function will properly resolve the data from the callback\n      // when invoked.\n      const wrappedDefaultsCallback = (opts) => {\n        // Our reply options callback contains the parameter for statusCode, data and options.\n        const resolvedData = replyOptionsCallbackOrStatusCode(opts)\n\n        // Check if it is in the right format\n        if (typeof resolvedData !== 'object' || resolvedData === null) {\n          throw new InvalidArgumentError('reply options callback must return an object')\n        }\n\n        const replyParameters = { data: '', responseOptions: {}, ...resolvedData }\n        this.validateReplyParameters(replyParameters)\n        // Since the values can be obtained immediately we return them\n        // from this higher order function that will be resolved later.\n        return {\n          ...this.createMockScopeDispatchData(replyParameters)\n        }\n      }\n\n      // Add usual dispatch data, but this time set the data parameter to function that will eventually provide data.\n      const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback, { ignoreTrailingSlash: this[kIgnoreTrailingSlash] })\n      return new MockScope(newMockDispatch)\n    }\n\n    // We can have either one or three parameters, if we get here,\n    // we should have 1-3 parameters. So we spread the arguments of\n    // this function to obtain the parameters, since replyData will always\n    // just be the statusCode.\n    const replyParameters = {\n      statusCode: replyOptionsCallbackOrStatusCode,\n      data: arguments[1] === undefined ? '' : arguments[1],\n      responseOptions: arguments[2] === undefined ? {} : arguments[2]\n    }\n    this.validateReplyParameters(replyParameters)\n\n    // Send in-already provided data like usual\n    const dispatchData = this.createMockScopeDispatchData(replyParameters)\n    const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], dispatchData, { ignoreTrailingSlash: this[kIgnoreTrailingSlash] })\n    return new MockScope(newMockDispatch)\n  }\n\n  /**\n   * Mock an undici request with a defined error.\n   */\n  replyWithError (error) {\n    if (typeof error === 'undefined') {\n      throw new InvalidArgumentError('error must be defined')\n    }\n\n    const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], { error }, { ignoreTrailingSlash: this[kIgnoreTrailingSlash] })\n    return new MockScope(newMockDispatch)\n  }\n\n  /**\n   * Set default reply headers on the interceptor for subsequent replies\n   */\n  defaultReplyHeaders (headers) {\n    if (typeof headers === 'undefined') {\n      throw new InvalidArgumentError('headers must be defined')\n    }\n\n    this[kDefaultHeaders] = headers\n    return this\n  }\n\n  /**\n   * Set default reply trailers on the interceptor for subsequent replies\n   */\n  defaultReplyTrailers (trailers) {\n    if (typeof trailers === 'undefined') {\n      throw new InvalidArgumentError('trailers must be defined')\n    }\n\n    this[kDefaultTrailers] = trailers\n    return this\n  }\n\n  /**\n   * Set reply content length header for replies on the interceptor\n   */\n  replyContentLength () {\n    this[kContentLength] = true\n    return this\n  }\n}\n\nmodule.exports.MockInterceptor = MockInterceptor\nmodule.exports.MockScope = MockScope\n", "'use strict'\n\nconst { promisify } = require('node:util')\nconst Client = require('../dispatcher/client')\nconst { buildMockDispatch } = require('./mock-utils')\nconst {\n  kDispatches,\n  kMockAgent,\n  kClose,\n  kOriginalClose,\n  kOrigin,\n  kOriginalDispatch,\n  kConnected,\n  kIgnoreTrailingSlash\n} = require('./mock-symbols')\nconst { MockInterceptor } = require('./mock-interceptor')\nconst Symbols = require('../core/symbols')\nconst { InvalidArgumentError } = require('../core/errors')\n\n/**\n * MockClient provides an API that extends the Client to influence the mockDispatches.\n */\nclass MockClient extends Client {\n  constructor (origin, opts) {\n    if (!opts || !opts.agent || typeof opts.agent.dispatch !== 'function') {\n      throw new InvalidArgumentError('Argument opts.agent must implement Agent')\n    }\n\n    super(origin, opts)\n\n    this[kMockAgent] = opts.agent\n    this[kOrigin] = origin\n    this[kIgnoreTrailingSlash] = opts.ignoreTrailingSlash ?? false\n    this[kDispatches] = []\n    this[kConnected] = 1\n    this[kOriginalDispatch] = this.dispatch\n    this[kOriginalClose] = this.close.bind(this)\n\n    this.dispatch = buildMockDispatch.call(this)\n    this.close = this[kClose]\n  }\n\n  get [Symbols.kConnected] () {\n    return this[kConnected]\n  }\n\n  /**\n   * Sets up the base interceptor for mocking replies from undici.\n   */\n  intercept (opts) {\n    return new MockInterceptor(\n      opts && { ignoreTrailingSlash: this[kIgnoreTrailingSlash], ...opts },\n      this[kDispatches]\n    )\n  }\n\n  cleanMocks () {\n    this[kDispatches] = []\n  }\n\n  async [kClose] () {\n    await promisify(this[kOriginalClose])()\n    this[kConnected] = 0\n    this[kMockAgent][Symbols.kClients].delete(this[kOrigin])\n  }\n}\n\nmodule.exports = MockClient\n", "'use strict'\n\nconst { kMockCallHistoryAddLog } = require('./mock-symbols')\nconst { InvalidArgumentError } = require('../core/errors')\n\nfunction handleFilterCallsWithOptions (criteria, options, handler, store, allLogs) {\n  switch (options.operator) {\n    case 'OR':\n      store.push(...handler(criteria, allLogs))\n\n      return store\n    case 'AND':\n      return handler(criteria, store)\n    default:\n      // guard -- should never happens because buildAndValidateFilterCallsOptions is called before\n      throw new InvalidArgumentError('options.operator must to be a case insensitive string equal to \\'OR\\' or \\'AND\\'')\n  }\n}\n\nfunction buildAndValidateFilterCallsOptions (options = {}) {\n  const finalOptions = {}\n\n  if ('operator' in options) {\n    if (typeof options.operator !== 'string' || (options.operator.toUpperCase() !== 'OR' && options.operator.toUpperCase() !== 'AND')) {\n      throw new InvalidArgumentError('options.operator must to be a case insensitive string equal to \\'OR\\' or \\'AND\\'')\n    }\n\n    return {\n      ...finalOptions,\n      operator: options.operator.toUpperCase()\n    }\n  }\n\n  return finalOptions\n}\n\nfunction makeFilterCalls (parameterName) {\n  return (parameterValue, logs) => {\n    if (typeof parameterValue === 'string' || parameterValue == null) {\n      return logs.filter((log) => {\n        return log[parameterName] === parameterValue\n      })\n    }\n    if (parameterValue instanceof RegExp) {\n      return logs.filter((log) => {\n        return parameterValue.test(log[parameterName])\n      })\n    }\n\n    throw new InvalidArgumentError(`${parameterName} parameter should be one of string, regexp, undefined or null`)\n  }\n}\nfunction computeUrlWithMaybeSearchParameters (requestInit) {\n  // path can contains query url parameters\n  // or query can contains query url parameters\n  try {\n    const url = new URL(requestInit.path, requestInit.origin)\n\n    // requestInit.path contains query url parameters\n    // requestInit.query is then undefined\n    if (url.search.length !== 0) {\n      return url\n    }\n\n    // requestInit.query can be populated here\n    url.search = new URLSearchParams(requestInit.query).toString()\n\n    return url\n  } catch (error) {\n    throw new InvalidArgumentError('An error occurred when computing MockCallHistoryLog.url', { cause: error })\n  }\n}\n\nclass MockCallHistoryLog {\n  constructor (requestInit = {}) {\n    this.body = requestInit.body\n    this.headers = requestInit.headers\n    this.method = requestInit.method\n\n    const url = computeUrlWithMaybeSearchParameters(requestInit)\n\n    this.fullUrl = url.toString()\n    this.origin = url.origin\n    this.path = url.pathname\n    this.searchParams = Object.fromEntries(url.searchParams)\n    this.protocol = url.protocol\n    this.host = url.host\n    this.port = url.port\n    this.hash = url.hash\n  }\n\n  toMap () {\n    return new Map([\n      ['protocol', this.protocol],\n      ['host', this.host],\n      ['port', this.port],\n      ['origin', this.origin],\n      ['path', this.path],\n      ['hash', this.hash],\n      ['searchParams', this.searchParams],\n      ['fullUrl', this.fullUrl],\n      ['method', this.method],\n      ['body', this.body],\n      ['headers', this.headers]]\n    )\n  }\n\n  toString () {\n    const options = { betweenKeyValueSeparator: '->', betweenPairSeparator: '|' }\n    let result = ''\n\n    this.toMap().forEach((value, key) => {\n      if (typeof value === 'string' || value === undefined || value === null) {\n        result = `${result}${key}${options.betweenKeyValueSeparator}${value}${options.betweenPairSeparator}`\n      }\n      if ((typeof value === 'object' && value !== null) || Array.isArray(value)) {\n        result = `${result}${key}${options.betweenKeyValueSeparator}${JSON.stringify(value)}${options.betweenPairSeparator}`\n      }\n      // maybe miss something for non Record / Array headers and searchParams here\n    })\n\n    // delete last betweenPairSeparator\n    return result.slice(0, -1)\n  }\n}\n\nclass MockCallHistory {\n  logs = []\n\n  calls () {\n    return this.logs\n  }\n\n  firstCall () {\n    return this.logs.at(0)\n  }\n\n  lastCall () {\n    return this.logs.at(-1)\n  }\n\n  nthCall (number) {\n    if (typeof number !== 'number') {\n      throw new InvalidArgumentError('nthCall must be called with a number')\n    }\n    if (!Number.isInteger(number)) {\n      throw new InvalidArgumentError('nthCall must be called with an integer')\n    }\n    if (Math.sign(number) !== 1) {\n      throw new InvalidArgumentError('nthCall must be called with a positive value. use firstCall or lastCall instead')\n    }\n\n    // non zero based index. this is more human readable\n    return this.logs.at(number - 1)\n  }\n\n  filterCalls (criteria, options) {\n    // perf\n    if (this.logs.length === 0) {\n      return this.logs\n    }\n    if (typeof criteria === 'function') {\n      return this.logs.filter(criteria)\n    }\n    if (criteria instanceof RegExp) {\n      return this.logs.filter((log) => {\n        return criteria.test(log.toString())\n      })\n    }\n    if (typeof criteria === 'object' && criteria !== null) {\n      // no criteria - returning all logs\n      if (Object.keys(criteria).length === 0) {\n        return this.logs\n      }\n\n      const finalOptions = { operator: 'OR', ...buildAndValidateFilterCallsOptions(options) }\n\n      let maybeDuplicatedLogsFiltered = finalOptions.operator === 'AND' ? this.logs : []\n      if ('protocol' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.protocol, finalOptions, this.filterCallsByProtocol, maybeDuplicatedLogsFiltered, this.logs)\n      }\n      if ('host' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.host, finalOptions, this.filterCallsByHost, maybeDuplicatedLogsFiltered, this.logs)\n      }\n      if ('port' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.port, finalOptions, this.filterCallsByPort, maybeDuplicatedLogsFiltered, this.logs)\n      }\n      if ('origin' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.origin, finalOptions, this.filterCallsByOrigin, maybeDuplicatedLogsFiltered, this.logs)\n      }\n      if ('path' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.path, finalOptions, this.filterCallsByPath, maybeDuplicatedLogsFiltered, this.logs)\n      }\n      if ('hash' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.hash, finalOptions, this.filterCallsByHash, maybeDuplicatedLogsFiltered, this.logs)\n      }\n      if ('fullUrl' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.fullUrl, finalOptions, this.filterCallsByFullUrl, maybeDuplicatedLogsFiltered, this.logs)\n      }\n      if ('method' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.method, finalOptions, this.filterCallsByMethod, maybeDuplicatedLogsFiltered, this.logs)\n      }\n\n      const uniqLogsFiltered = [...new Set(maybeDuplicatedLogsFiltered)]\n\n      return uniqLogsFiltered\n    }\n\n    throw new InvalidArgumentError('criteria parameter should be one of function, regexp, or object')\n  }\n\n  filterCallsByProtocol = makeFilterCalls.call(this, 'protocol')\n\n  filterCallsByHost = makeFilterCalls.call(this, 'host')\n\n  filterCallsByPort = makeFilterCalls.call(this, 'port')\n\n  filterCallsByOrigin = makeFilterCalls.call(this, 'origin')\n\n  filterCallsByPath = makeFilterCalls.call(this, 'path')\n\n  filterCallsByHash = makeFilterCalls.call(this, 'hash')\n\n  filterCallsByFullUrl = makeFilterCalls.call(this, 'fullUrl')\n\n  filterCallsByMethod = makeFilterCalls.call(this, 'method')\n\n  clear () {\n    this.logs = []\n  }\n\n  [kMockCallHistoryAddLog] (requestInit) {\n    const log = new MockCallHistoryLog(requestInit)\n\n    this.logs.push(log)\n\n    return log\n  }\n\n  * [Symbol.iterator] () {\n    for (const log of this.calls()) {\n      yield log\n    }\n  }\n}\n\nmodule.exports.MockCallHistory = MockCallHistory\nmodule.exports.MockCallHistoryLog = MockCallHistoryLog\n", "'use strict'\n\nconst { promisify } = require('node:util')\nconst Pool = require('../dispatcher/pool')\nconst { buildMockDispatch } = require('./mock-utils')\nconst {\n  kDispatches,\n  kMockAgent,\n  kClose,\n  kOriginalClose,\n  kOrigin,\n  kOriginalDispatch,\n  kConnected,\n  kIgnoreTrailingSlash\n} = require('./mock-symbols')\nconst { MockInterceptor } = require('./mock-interceptor')\nconst Symbols = require('../core/symbols')\nconst { InvalidArgumentError } = require('../core/errors')\n\n/**\n * MockPool provides an API that extends the Pool to influence the mockDispatches.\n */\nclass MockPool extends Pool {\n  constructor (origin, opts) {\n    if (!opts || !opts.agent || typeof opts.agent.dispatch !== 'function') {\n      throw new InvalidArgumentError('Argument opts.agent must implement Agent')\n    }\n\n    super(origin, opts)\n\n    this[kMockAgent] = opts.agent\n    this[kOrigin] = origin\n    this[kIgnoreTrailingSlash] = opts.ignoreTrailingSlash ?? false\n    this[kDispatches] = []\n    this[kConnected] = 1\n    this[kOriginalDispatch] = this.dispatch\n    this[kOriginalClose] = this.close.bind(this)\n\n    this.dispatch = buildMockDispatch.call(this)\n    this.close = this[kClose]\n  }\n\n  get [Symbols.kConnected] () {\n    return this[kConnected]\n  }\n\n  /**\n   * Sets up the base interceptor for mocking replies from undici.\n   */\n  intercept (opts) {\n    return new MockInterceptor(\n      opts && { ignoreTrailingSlash: this[kIgnoreTrailingSlash], ...opts },\n      this[kDispatches]\n    )\n  }\n\n  cleanMocks () {\n    this[kDispatches] = []\n  }\n\n  async [kClose] () {\n    await promisify(this[kOriginalClose])()\n    this[kConnected] = 0\n    this[kMockAgent][Symbols.kClients].delete(this[kOrigin])\n  }\n}\n\nmodule.exports = MockPool\n", "'use strict'\n\nconst { Transform } = require('node:stream')\nconst { Console } = require('node:console')\n\nconst PERSISTENT = process.versions.icu ? '\u2705' : 'Y '\nconst NOT_PERSISTENT = process.versions.icu ? '\u274C' : 'N '\n\n/**\n * Gets the output of `console.table(\u2026)` as a string.\n */\nmodule.exports = class PendingInterceptorsFormatter {\n  constructor ({ disableColors } = {}) {\n    this.transform = new Transform({\n      transform (chunk, _enc, cb) {\n        cb(null, chunk)\n      }\n    })\n\n    this.logger = new Console({\n      stdout: this.transform,\n      inspectOptions: {\n        colors: !disableColors && !process.env.CI\n      }\n    })\n  }\n\n  format (pendingInterceptors) {\n    const withPrettyHeaders = pendingInterceptors.map(\n      ({ method, path, data: { statusCode }, persist, times, timesInvoked, origin }) => ({\n        Method: method,\n        Origin: origin,\n        Path: path,\n        'Status code': statusCode,\n        Persistent: persist ? PERSISTENT : NOT_PERSISTENT,\n        Invocations: timesInvoked,\n        Remaining: persist ? Infinity : times - timesInvoked\n      }))\n\n    this.logger.table(withPrettyHeaders)\n    return this.transform.read().toString()\n  }\n}\n", "'use strict'\n\nconst { kClients } = require('../core/symbols')\nconst Agent = require('../dispatcher/agent')\nconst {\n  kAgent,\n  kMockAgentSet,\n  kMockAgentGet,\n  kDispatches,\n  kIsMockActive,\n  kNetConnect,\n  kGetNetConnect,\n  kOptions,\n  kFactory,\n  kMockAgentRegisterCallHistory,\n  kMockAgentIsCallHistoryEnabled,\n  kMockAgentAddCallHistoryLog,\n  kMockAgentMockCallHistoryInstance,\n  kMockAgentAcceptsNonStandardSearchParameters,\n  kMockCallHistoryAddLog,\n  kIgnoreTrailingSlash\n} = require('./mock-symbols')\nconst MockClient = require('./mock-client')\nconst MockPool = require('./mock-pool')\nconst { matchValue, normalizeSearchParams, buildAndValidateMockOptions, normalizeOrigin } = require('./mock-utils')\nconst { InvalidArgumentError, UndiciError } = require('../core/errors')\nconst Dispatcher = require('../dispatcher/dispatcher')\nconst PendingInterceptorsFormatter = require('./pending-interceptors-formatter')\nconst { MockCallHistory } = require('./mock-call-history')\n\nclass MockAgent extends Dispatcher {\n  constructor (opts = {}) {\n    super(opts)\n\n    const mockOptions = buildAndValidateMockOptions(opts)\n\n    this[kNetConnect] = true\n    this[kIsMockActive] = true\n    this[kMockAgentIsCallHistoryEnabled] = mockOptions.enableCallHistory ?? false\n    this[kMockAgentAcceptsNonStandardSearchParameters] = mockOptions.acceptNonStandardSearchParameters ?? false\n    this[kIgnoreTrailingSlash] = mockOptions.ignoreTrailingSlash ?? false\n\n    // Instantiate Agent and encapsulate\n    if (opts?.agent && typeof opts.agent.dispatch !== 'function') {\n      throw new InvalidArgumentError('Argument opts.agent must implement Agent')\n    }\n    const agent = opts?.agent ? opts.agent : new Agent(opts)\n    this[kAgent] = agent\n\n    this[kClients] = agent[kClients]\n    this[kOptions] = mockOptions\n\n    if (this[kMockAgentIsCallHistoryEnabled]) {\n      this[kMockAgentRegisterCallHistory]()\n    }\n  }\n\n  get (origin) {\n    // Normalize origin to handle URL objects and case-insensitive hostnames\n    const normalizedOrigin = normalizeOrigin(origin)\n    const originKey = this[kIgnoreTrailingSlash] ? normalizedOrigin.replace(/\\/$/, '') : normalizedOrigin\n\n    let dispatcher = this[kMockAgentGet](originKey)\n\n    if (!dispatcher) {\n      dispatcher = this[kFactory](originKey)\n      this[kMockAgentSet](originKey, dispatcher)\n    }\n    return dispatcher\n  }\n\n  dispatch (opts, handler) {\n    opts.origin = normalizeOrigin(opts.origin)\n\n    // Call MockAgent.get to perform additional setup before dispatching as normal\n    this.get(opts.origin)\n\n    this[kMockAgentAddCallHistoryLog](opts)\n\n    const acceptNonStandardSearchParameters = this[kMockAgentAcceptsNonStandardSearchParameters]\n\n    const dispatchOpts = { ...opts }\n\n    if (acceptNonStandardSearchParameters && dispatchOpts.path) {\n      const [path, searchParams] = dispatchOpts.path.split('?')\n      const normalizedSearchParams = normalizeSearchParams(searchParams, acceptNonStandardSearchParameters)\n      dispatchOpts.path = `${path}?${normalizedSearchParams}`\n    }\n\n    return this[kAgent].dispatch(dispatchOpts, handler)\n  }\n\n  async close () {\n    this.clearCallHistory()\n    await this[kAgent].close()\n    this[kClients].clear()\n  }\n\n  deactivate () {\n    this[kIsMockActive] = false\n  }\n\n  activate () {\n    this[kIsMockActive] = true\n  }\n\n  enableNetConnect (matcher) {\n    if (typeof matcher === 'string' || typeof matcher === 'function' || matcher instanceof RegExp) {\n      if (Array.isArray(this[kNetConnect])) {\n        this[kNetConnect].push(matcher)\n      } else {\n        this[kNetConnect] = [matcher]\n      }\n    } else if (typeof matcher === 'undefined') {\n      this[kNetConnect] = true\n    } else {\n      throw new InvalidArgumentError('Unsupported matcher. Must be one of String|Function|RegExp.')\n    }\n  }\n\n  disableNetConnect () {\n    this[kNetConnect] = false\n  }\n\n  enableCallHistory () {\n    this[kMockAgentIsCallHistoryEnabled] = true\n\n    return this\n  }\n\n  disableCallHistory () {\n    this[kMockAgentIsCallHistoryEnabled] = false\n\n    return this\n  }\n\n  getCallHistory () {\n    return this[kMockAgentMockCallHistoryInstance]\n  }\n\n  clearCallHistory () {\n    if (this[kMockAgentMockCallHistoryInstance] !== undefined) {\n      this[kMockAgentMockCallHistoryInstance].clear()\n    }\n  }\n\n  // This is required to bypass issues caused by using global symbols - see:\n  // https://github.com/nodejs/undici/issues/1447\n  get isMockActive () {\n    return this[kIsMockActive]\n  }\n\n  [kMockAgentRegisterCallHistory] () {\n    if (this[kMockAgentMockCallHistoryInstance] === undefined) {\n      this[kMockAgentMockCallHistoryInstance] = new MockCallHistory()\n    }\n  }\n\n  [kMockAgentAddCallHistoryLog] (opts) {\n    if (this[kMockAgentIsCallHistoryEnabled]) {\n      // additional setup when enableCallHistory class method is used after mockAgent instantiation\n      this[kMockAgentRegisterCallHistory]()\n\n      // add call history log on every call (intercepted or not)\n      this[kMockAgentMockCallHistoryInstance][kMockCallHistoryAddLog](opts)\n    }\n  }\n\n  [kMockAgentSet] (origin, dispatcher) {\n    this[kClients].set(origin, { count: 0, dispatcher })\n  }\n\n  [kFactory] (origin) {\n    const mockOptions = Object.assign({ agent: this }, this[kOptions])\n    return this[kOptions] && this[kOptions].connections === 1\n      ? new MockClient(origin, mockOptions)\n      : new MockPool(origin, mockOptions)\n  }\n\n  [kMockAgentGet] (origin) {\n    // First check if we can immediately find it\n    const result = this[kClients].get(origin)\n    if (result?.dispatcher) {\n      return result.dispatcher\n    }\n\n    // If the origin is not a string create a dummy parent pool and return to user\n    if (typeof origin !== 'string') {\n      const dispatcher = this[kFactory]('http://localhost:9999')\n      this[kMockAgentSet](origin, dispatcher)\n      return dispatcher\n    }\n\n    // If we match, create a pool and assign the same dispatches\n    for (const [keyMatcher, result] of Array.from(this[kClients])) {\n      if (result && typeof keyMatcher !== 'string' && matchValue(keyMatcher, origin)) {\n        const dispatcher = this[kFactory](origin)\n        this[kMockAgentSet](origin, dispatcher)\n        dispatcher[kDispatches] = result.dispatcher[kDispatches]\n        return dispatcher\n      }\n    }\n  }\n\n  [kGetNetConnect] () {\n    return this[kNetConnect]\n  }\n\n  pendingInterceptors () {\n    const mockAgentClients = this[kClients]\n\n    return Array.from(mockAgentClients.entries())\n      .flatMap(([origin, result]) => result.dispatcher[kDispatches].map(dispatch => ({ ...dispatch, origin })))\n      .filter(({ pending }) => pending)\n  }\n\n  assertNoPendingInterceptors ({ pendingInterceptorsFormatter = new PendingInterceptorsFormatter() } = {}) {\n    const pending = this.pendingInterceptors()\n\n    if (pending.length === 0) {\n      return\n    }\n\n    throw new UndiciError(\n      pending.length === 1\n        ? `1 interceptor is pending:\\n\\n${pendingInterceptorsFormatter.format(pending)}`.trim()\n        : `${pending.length} interceptors are pending:\\n\\n${pendingInterceptorsFormatter.format(pending)}`.trim()\n    )\n  }\n}\n\nmodule.exports = MockAgent\n", "'use strict'\n\nconst { InvalidArgumentError } = require('../core/errors')\nconst { runtimeFeatures } = require('../util/runtime-features.js')\n\n/**\n * @typedef {Object} HeaderFilters\n * @property {Set<string>} ignore - Set of headers to ignore for matching\n * @property {Set<string>} exclude - Set of headers to exclude from matching\n * @property {Set<string>} match - Set of headers to match (empty means match\n */\n\n/**\n * Creates cached header sets for performance\n *\n * @param {import('./snapshot-recorder').SnapshotRecorderMatchOptions} matchOptions - Matching options for headers\n * @returns {HeaderFilters} - Cached sets for ignore, exclude, and match headers\n */\nfunction createHeaderFilters (matchOptions = {}) {\n  const { ignoreHeaders = [], excludeHeaders = [], matchHeaders = [], caseSensitive = false } = matchOptions\n\n  return {\n    ignore: new Set(ignoreHeaders.map(header => caseSensitive ? header : header.toLowerCase())),\n    exclude: new Set(excludeHeaders.map(header => caseSensitive ? header : header.toLowerCase())),\n    match: new Set(matchHeaders.map(header => caseSensitive ? header : header.toLowerCase()))\n  }\n}\n\nconst crypto = runtimeFeatures.has('crypto')\n  ? require('node:crypto')\n  : null\n\n/**\n * @callback HashIdFunction\n * @param {string} value - The value to hash\n * @returns {string} - The base64url encoded hash of the value\n */\n\n/**\n * Generates a hash for a given value\n * @type {HashIdFunction}\n */\nconst hashId = crypto?.hash\n  ? (value) => crypto.hash('sha256', value, 'base64url')\n  : (value) => Buffer.from(value).toString('base64url')\n\n/**\n * @typedef {(url: string) => boolean} IsUrlExcluded Checks if a URL matches any of the exclude patterns\n */\n\n/** @typedef {{[key: Lowercase<string>]: string}} NormalizedHeaders */\n/** @typedef {Array<string>} UndiciHeaders */\n/** @typedef {Record<string, string|string[]>} Headers */\n\n/**\n * @param {*} headers\n * @returns {headers is UndiciHeaders}\n */\nfunction isUndiciHeaders (headers) {\n  return Array.isArray(headers) && (headers.length & 1) === 0\n}\n\n/**\n * Factory function to create a URL exclusion checker\n * @param {Array<string| RegExp>} [excludePatterns=[]] - Array of patterns to exclude\n * @returns {IsUrlExcluded} - A function that checks if a URL matches any of the exclude patterns\n */\nfunction isUrlExcludedFactory (excludePatterns = []) {\n  if (excludePatterns.length === 0) {\n    return () => false\n  }\n\n  return function isUrlExcluded (url) {\n    let urlLowerCased\n\n    for (const pattern of excludePatterns) {\n      if (typeof pattern === 'string') {\n        if (!urlLowerCased) {\n          // Convert URL to lowercase only once\n          urlLowerCased = url.toLowerCase()\n        }\n        // Simple string match (case-insensitive)\n        if (urlLowerCased.includes(pattern.toLowerCase())) {\n          return true\n        }\n      } else if (pattern instanceof RegExp) {\n        // Regex pattern match\n        if (pattern.test(url)) {\n          return true\n        }\n      }\n    }\n\n    return false\n  }\n}\n\n/**\n * Normalizes headers for consistent comparison\n *\n * @param {Object|UndiciHeaders} headers - Headers to normalize\n * @returns {NormalizedHeaders} - Normalized headers as a lowercase object\n */\nfunction normalizeHeaders (headers) {\n  /** @type {NormalizedHeaders} */\n  const normalizedHeaders = {}\n\n  if (!headers) return normalizedHeaders\n\n  // Handle array format (undici internal format: [name, value, name, value, ...])\n  if (isUndiciHeaders(headers)) {\n    for (let i = 0; i < headers.length; i += 2) {\n      const key = headers[i]\n      const value = headers[i + 1]\n      if (key && value !== undefined) {\n        // Convert Buffers to strings if needed\n        const keyStr = Buffer.isBuffer(key) ? key.toString() : key\n        const valueStr = Buffer.isBuffer(value) ? value.toString() : value\n        normalizedHeaders[keyStr.toLowerCase()] = valueStr\n      }\n    }\n    return normalizedHeaders\n  }\n\n  // Handle object format\n  if (headers && typeof headers === 'object') {\n    for (const [key, value] of Object.entries(headers)) {\n      if (key && typeof key === 'string') {\n        normalizedHeaders[key.toLowerCase()] = Array.isArray(value) ? value.join(', ') : String(value)\n      }\n    }\n  }\n\n  return normalizedHeaders\n}\n\nconst validSnapshotModes = /** @type {const} */ (['record', 'playback', 'update'])\n\n/** @typedef {typeof validSnapshotModes[number]} SnapshotMode */\n\n/**\n * @param {*} mode - The snapshot mode to validate\n * @returns {asserts mode is SnapshotMode}\n */\nfunction validateSnapshotMode (mode) {\n  if (!validSnapshotModes.includes(mode)) {\n    throw new InvalidArgumentError(`Invalid snapshot mode: ${mode}. Must be one of: ${validSnapshotModes.join(', ')}`)\n  }\n}\n\nmodule.exports = {\n  createHeaderFilters,\n  hashId,\n  isUndiciHeaders,\n  normalizeHeaders,\n  isUrlExcludedFactory,\n  validateSnapshotMode\n}\n", "'use strict'\n\nconst { writeFile, readFile, mkdir } = require('node:fs/promises')\nconst { dirname, resolve } = require('node:path')\nconst { setTimeout, clearTimeout } = require('node:timers')\nconst { InvalidArgumentError, UndiciError } = require('../core/errors')\nconst { hashId, isUrlExcludedFactory, normalizeHeaders, createHeaderFilters } = require('./snapshot-utils')\n\n/**\n * @typedef {Object} SnapshotRequestOptions\n * @property {string} method - HTTP method (e.g. 'GET', 'POST', etc.)\n * @property {string} path - Request path\n * @property {string} origin - Request origin (base URL)\n * @property {import('./snapshot-utils').Headers|import('./snapshot-utils').UndiciHeaders} headers - Request headers\n * @property {import('./snapshot-utils').NormalizedHeaders} _normalizedHeaders - Request headers as a lowercase object\n * @property {string|Buffer} [body] - Request body (optional)\n */\n\n/**\n * @typedef {Object} SnapshotEntryRequest\n * @property {string} method - HTTP method (e.g. 'GET', 'POST', etc.)\n * @property {string} url - Full URL of the request\n * @property {import('./snapshot-utils').NormalizedHeaders} headers - Normalized headers as a lowercase object\n * @property {string|Buffer} [body] - Request body (optional)\n */\n\n/**\n * @typedef {Object} SnapshotEntryResponse\n * @property {number} statusCode - HTTP status code of the response\n * @property {import('./snapshot-utils').NormalizedHeaders} headers - Normalized response headers as a lowercase object\n * @property {string} body - Response body as a base64url encoded string\n * @property {Object} [trailers] - Optional response trailers\n */\n\n/**\n * @typedef {Object} SnapshotEntry\n * @property {SnapshotEntryRequest} request - The request object\n * @property {Array<SnapshotEntryResponse>} responses - Array of response objects\n * @property {number} callCount - Number of times this snapshot has been called\n * @property {string} timestamp - ISO timestamp of when the snapshot was created\n */\n\n/**\n * @typedef {Object} SnapshotRecorderMatchOptions\n * @property {Array<string>} [matchHeaders=[]] - Headers to match (empty array means match all headers)\n * @property {Array<string>} [ignoreHeaders=[]] - Headers to ignore for matching\n * @property {Array<string>} [excludeHeaders=[]] - Headers to exclude from matching\n * @property {boolean} [matchBody=true] - Whether to match request body\n * @property {boolean} [matchQuery=true] - Whether to match query properties\n * @property {boolean} [caseSensitive=false] - Whether header matching is case-sensitive\n */\n\n/**\n * @typedef {Object} SnapshotRecorderOptions\n * @property {string} [snapshotPath] - Path to save/load snapshots\n * @property {import('./snapshot-utils').SnapshotMode} [mode='record'] - Mode: 'record' or 'playback'\n * @property {number} [maxSnapshots=Infinity] - Maximum number of snapshots to keep\n * @property {boolean} [autoFlush=false] - Whether to automatically flush snapshots to disk\n * @property {number} [flushInterval=30000] - Auto-flush interval in milliseconds (default: 30 seconds)\n * @property {Array<string|RegExp>} [excludeUrls=[]] - URLs to exclude from recording\n * @property {function} [shouldRecord=null] - Function to filter requests for recording\n * @property {function} [shouldPlayback=null] - Function to filter requests\n */\n\n/**\n * @typedef {Object} SnapshotFormattedRequest\n * @property {string} method - HTTP method (e.g. 'GET', 'POST', etc.)\n * @property {string} url - Full URL of the request (with query parameters if matchQuery is true)\n * @property {import('./snapshot-utils').NormalizedHeaders} headers - Normalized headers as a lowercase object\n * @property {string} body - Request body (optional, only if matchBody is true)\n */\n\n/**\n * @typedef {Object} SnapshotInfo\n * @property {string} hash - Hash key for the snapshot\n * @property {SnapshotEntryRequest} request - The request object\n * @property {number} responseCount - Number of responses recorded for this request\n * @property {number} callCount - Number of times this snapshot has been called\n * @property {string} timestamp - ISO timestamp of when the snapshot was created\n */\n\n/**\n * Formats a request for consistent snapshot storage\n * Caches normalized headers to avoid repeated processing\n *\n * @param {SnapshotRequestOptions} opts - Request options\n * @param {import('./snapshot-utils').HeaderFilters} headerFilters - Cached header sets for performance\n * @param {SnapshotRecorderMatchOptions} [matchOptions] - Matching options for headers and body\n * @returns {SnapshotFormattedRequest} - Formatted request object\n */\nfunction formatRequestKey (opts, headerFilters, matchOptions = {}) {\n  const url = new URL(opts.path, opts.origin)\n\n  // Cache normalized headers if not already done\n  const normalized = opts._normalizedHeaders || normalizeHeaders(opts.headers)\n  if (!opts._normalizedHeaders) {\n    opts._normalizedHeaders = normalized\n  }\n\n  return {\n    method: opts.method || 'GET',\n    url: matchOptions.matchQuery !== false ? url.toString() : `${url.origin}${url.pathname}`,\n    headers: filterHeadersForMatching(normalized, headerFilters, matchOptions),\n    body: matchOptions.matchBody !== false && opts.body ? String(opts.body) : ''\n  }\n}\n\n/**\n * Filters headers based on matching configuration\n *\n * @param {import('./snapshot-utils').Headers} headers - Headers to filter\n * @param {import('./snapshot-utils').HeaderFilters} headerFilters - Cached sets for ignore, exclude, and match headers\n * @param {SnapshotRecorderMatchOptions} [matchOptions] - Matching options for headers\n */\nfunction filterHeadersForMatching (headers, headerFilters, matchOptions = {}) {\n  if (!headers || typeof headers !== 'object') return {}\n\n  const {\n    caseSensitive = false\n  } = matchOptions\n\n  const filtered = {}\n  const { ignore, exclude, match } = headerFilters\n\n  for (const [key, value] of Object.entries(headers)) {\n    const headerKey = caseSensitive ? key : key.toLowerCase()\n\n    // Skip if in exclude list (for security)\n    if (exclude.has(headerKey)) continue\n\n    // Skip if in ignore list (for matching)\n    if (ignore.has(headerKey)) continue\n\n    // If matchHeaders is specified, only include those headers\n    if (match.size !== 0) {\n      if (!match.has(headerKey)) continue\n    }\n\n    filtered[headerKey] = value\n  }\n\n  return filtered\n}\n\n/**\n * Filters headers for storage (only excludes sensitive headers)\n *\n * @param {import('./snapshot-utils').Headers} headers - Headers to filter\n * @param {import('./snapshot-utils').HeaderFilters} headerFilters - Cached sets for ignore, exclude, and match headers\n * @param {SnapshotRecorderMatchOptions} [matchOptions] - Matching options for headers\n */\nfunction filterHeadersForStorage (headers, headerFilters, matchOptions = {}) {\n  if (!headers || typeof headers !== 'object') return {}\n\n  const {\n    caseSensitive = false\n  } = matchOptions\n\n  const filtered = {}\n  const { exclude: excludeSet } = headerFilters\n\n  for (const [key, value] of Object.entries(headers)) {\n    const headerKey = caseSensitive ? key : key.toLowerCase()\n\n    // Skip if in exclude list (for security)\n    if (excludeSet.has(headerKey)) continue\n\n    filtered[headerKey] = value\n  }\n\n  return filtered\n}\n\n/**\n * Creates a hash key for request matching\n * Properly orders headers to avoid conflicts and uses crypto hashing when available\n *\n * @param {SnapshotFormattedRequest} formattedRequest - Request object\n * @returns {string} - Base64url encoded hash of the request\n */\nfunction createRequestHash (formattedRequest) {\n  const parts = [\n    formattedRequest.method,\n    formattedRequest.url\n  ]\n\n  // Process headers in a deterministic way to avoid conflicts\n  if (formattedRequest.headers && typeof formattedRequest.headers === 'object') {\n    const headerKeys = Object.keys(formattedRequest.headers).sort()\n    for (const key of headerKeys) {\n      const values = Array.isArray(formattedRequest.headers[key])\n        ? formattedRequest.headers[key]\n        : [formattedRequest.headers[key]]\n\n      // Add header name\n      parts.push(key)\n\n      // Add all values for this header, sorted for consistency\n      for (const value of values.sort()) {\n        parts.push(String(value))\n      }\n    }\n  }\n\n  // Add body\n  parts.push(formattedRequest.body)\n\n  const content = parts.join('|')\n\n  return hashId(content)\n}\n\nclass SnapshotRecorder {\n  /** @type {NodeJS.Timeout | null} */\n  #flushTimeout\n\n  /** @type {import('./snapshot-utils').IsUrlExcluded} */\n  #isUrlExcluded\n\n  /** @type {Map<string, SnapshotEntry>} */\n  #snapshots = new Map()\n\n  /** @type {string|undefined} */\n  #snapshotPath\n\n  /** @type {number} */\n  #maxSnapshots = Infinity\n\n  /** @type {boolean} */\n  #autoFlush = false\n\n  /** @type {import('./snapshot-utils').HeaderFilters} */\n  #headerFilters\n\n  /**\n   * Creates a new SnapshotRecorder instance\n   * @param {SnapshotRecorderOptions&SnapshotRecorderMatchOptions} [options={}] - Configuration options for the recorder\n   */\n  constructor (options = {}) {\n    this.#snapshotPath = options.snapshotPath\n    this.#maxSnapshots = options.maxSnapshots || Infinity\n    this.#autoFlush = options.autoFlush || false\n    this.flushInterval = options.flushInterval || 30000 // 30 seconds default\n    this._flushTimer = null\n\n    // Matching configuration\n    /** @type {Required<SnapshotRecorderMatchOptions>} */\n    this.matchOptions = {\n      matchHeaders: options.matchHeaders || [], // empty means match all headers\n      ignoreHeaders: options.ignoreHeaders || [],\n      excludeHeaders: options.excludeHeaders || [],\n      matchBody: options.matchBody !== false, // default: true\n      matchQuery: options.matchQuery !== false, // default: true\n      caseSensitive: options.caseSensitive || false\n    }\n\n    // Cache processed header sets to avoid recreating them on every request\n    this.#headerFilters = createHeaderFilters(this.matchOptions)\n\n    // Request filtering callbacks\n    this.shouldRecord = options.shouldRecord || (() => true) // function(requestOpts) -> boolean\n    this.shouldPlayback = options.shouldPlayback || (() => true) // function(requestOpts) -> boolean\n\n    // URL pattern filtering\n    this.#isUrlExcluded = isUrlExcludedFactory(options.excludeUrls) // Array of regex patterns or strings\n\n    // Start auto-flush timer if enabled\n    if (this.#autoFlush && this.#snapshotPath) {\n      this.#startAutoFlush()\n    }\n  }\n\n  /**\n   * Records a request-response interaction\n   * @param {SnapshotRequestOptions} requestOpts - Request options\n   * @param {SnapshotEntryResponse} response - Response data to record\n   * @return {Promise<void>} - Resolves when the recording is complete\n   */\n  async record (requestOpts, response) {\n    // Check if recording should be filtered out\n    if (!this.shouldRecord(requestOpts)) {\n      return // Skip recording\n    }\n\n    // Check URL exclusion patterns\n    if (this.isUrlExcluded(requestOpts)) {\n      return // Skip recording\n    }\n\n    const request = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions)\n    const hash = createRequestHash(request)\n\n    // Extract response data - always store body as base64\n    const normalizedHeaders = normalizeHeaders(response.headers)\n\n    /** @type {SnapshotEntryResponse} */\n    const responseData = {\n      statusCode: response.statusCode,\n      headers: filterHeadersForStorage(normalizedHeaders, this.#headerFilters, this.matchOptions),\n      body: Buffer.isBuffer(response.body)\n        ? response.body.toString('base64')\n        : Buffer.from(String(response.body || '')).toString('base64'),\n      trailers: response.trailers\n    }\n\n    // Remove oldest snapshot if we exceed maxSnapshots limit\n    if (this.#snapshots.size >= this.#maxSnapshots && !this.#snapshots.has(hash)) {\n      const oldestKey = this.#snapshots.keys().next().value\n      this.#snapshots.delete(oldestKey)\n    }\n\n    // Support sequential responses - if snapshot exists, add to responses array\n    const existingSnapshot = this.#snapshots.get(hash)\n    if (existingSnapshot && existingSnapshot.responses) {\n      existingSnapshot.responses.push(responseData)\n      existingSnapshot.timestamp = new Date().toISOString()\n    } else {\n      this.#snapshots.set(hash, {\n        request,\n        responses: [responseData], // Always store as array for consistency\n        callCount: 0,\n        timestamp: new Date().toISOString()\n      })\n    }\n\n    // Auto-flush if enabled\n    if (this.#autoFlush && this.#snapshotPath) {\n      this.#scheduleFlush()\n    }\n  }\n\n  /**\n   * Checks if a URL should be excluded from recording/playback\n   * @param {SnapshotRequestOptions} requestOpts - Request options to check\n   * @returns {boolean} - True if URL is excluded\n   */\n  isUrlExcluded (requestOpts) {\n    const url = new URL(requestOpts.path, requestOpts.origin).toString()\n    return this.#isUrlExcluded(url)\n  }\n\n  /**\n   * Finds a matching snapshot for the given request\n   * Returns the appropriate response based on call count for sequential responses\n   *\n   * @param {SnapshotRequestOptions} requestOpts - Request options to match\n   * @returns {SnapshotEntry&Record<'response', SnapshotEntryResponse>|undefined} - Matching snapshot response or undefined if not found\n   */\n  findSnapshot (requestOpts) {\n    // Check if playback should be filtered out\n    if (!this.shouldPlayback(requestOpts)) {\n      return undefined // Skip playback\n    }\n\n    // Check URL exclusion patterns\n    if (this.isUrlExcluded(requestOpts)) {\n      return undefined // Skip playback\n    }\n\n    const request = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions)\n    const hash = createRequestHash(request)\n    const snapshot = this.#snapshots.get(hash)\n\n    if (!snapshot) return undefined\n\n    // Handle sequential responses\n    const currentCallCount = snapshot.callCount || 0\n    const responseIndex = Math.min(currentCallCount, snapshot.responses.length - 1)\n    snapshot.callCount = currentCallCount + 1\n\n    return {\n      ...snapshot,\n      response: snapshot.responses[responseIndex]\n    }\n  }\n\n  /**\n   * Loads snapshots from file\n   * @param {string} [filePath] - Optional file path to load snapshots from\n   * @return {Promise<void>} - Resolves when snapshots are loaded\n   */\n  async loadSnapshots (filePath) {\n    const path = filePath || this.#snapshotPath\n    if (!path) {\n      throw new InvalidArgumentError('Snapshot path is required')\n    }\n\n    try {\n      const data = await readFile(resolve(path), 'utf8')\n      const parsed = JSON.parse(data)\n\n      // Convert array format back to Map\n      if (Array.isArray(parsed)) {\n        this.#snapshots.clear()\n        for (const { hash, snapshot } of parsed) {\n          this.#snapshots.set(hash, snapshot)\n        }\n      } else {\n        // Legacy object format\n        this.#snapshots = new Map(Object.entries(parsed))\n      }\n    } catch (error) {\n      if (error.code === 'ENOENT') {\n        // File doesn't exist yet - that's ok for recording mode\n        this.#snapshots.clear()\n      } else {\n        throw new UndiciError(`Failed to load snapshots from ${path}`, { cause: error })\n      }\n    }\n  }\n\n  /**\n   * Saves snapshots to file\n   *\n   * @param {string} [filePath] - Optional file path to save snapshots\n   * @returns {Promise<void>} - Resolves when snapshots are saved\n   */\n  async saveSnapshots (filePath) {\n    const path = filePath || this.#snapshotPath\n    if (!path) {\n      throw new InvalidArgumentError('Snapshot path is required')\n    }\n\n    const resolvedPath = resolve(path)\n\n    // Ensure directory exists\n    await mkdir(dirname(resolvedPath), { recursive: true })\n\n    // Convert Map to serializable format\n    const data = Array.from(this.#snapshots.entries()).map(([hash, snapshot]) => ({\n      hash,\n      snapshot\n    }))\n\n    await writeFile(resolvedPath, JSON.stringify(data, null, 2), { flush: true })\n  }\n\n  /**\n   * Clears all recorded snapshots\n   * @returns {void}\n   */\n  clear () {\n    this.#snapshots.clear()\n  }\n\n  /**\n   * Gets all recorded snapshots\n   * @return {Array<SnapshotEntry>} - Array of all recorded snapshots\n   */\n  getSnapshots () {\n    return Array.from(this.#snapshots.values())\n  }\n\n  /**\n   * Gets snapshot count\n   * @return {number} - Number of recorded snapshots\n   */\n  size () {\n    return this.#snapshots.size\n  }\n\n  /**\n   * Resets call counts for all snapshots (useful for test cleanup)\n   * @returns {void}\n   */\n  resetCallCounts () {\n    for (const snapshot of this.#snapshots.values()) {\n      snapshot.callCount = 0\n    }\n  }\n\n  /**\n   * Deletes a specific snapshot by request options\n   * @param {SnapshotRequestOptions} requestOpts - Request options to match\n   * @returns {boolean} - True if snapshot was deleted, false if not found\n   */\n  deleteSnapshot (requestOpts) {\n    const request = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions)\n    const hash = createRequestHash(request)\n    return this.#snapshots.delete(hash)\n  }\n\n  /**\n   * Gets information about a specific snapshot\n   * @param {SnapshotRequestOptions} requestOpts - Request options to match\n   * @returns {SnapshotInfo|null} - Snapshot information or null if not found\n   */\n  getSnapshotInfo (requestOpts) {\n    const request = formatRequestKey(requestOpts, this.#headerFilters, this.matchOptions)\n    const hash = createRequestHash(request)\n    const snapshot = this.#snapshots.get(hash)\n\n    if (!snapshot) return null\n\n    return {\n      hash,\n      request: snapshot.request,\n      responseCount: snapshot.responses ? snapshot.responses.length : (snapshot.response ? 1 : 0), // .response for legacy snapshots\n      callCount: snapshot.callCount || 0,\n      timestamp: snapshot.timestamp\n    }\n  }\n\n  /**\n   * Replaces all snapshots with new data (full replacement)\n   * @param {Array<{hash: string; snapshot: SnapshotEntry}>|Record<string, SnapshotEntry>} snapshotData - New snapshot data to replace existing ones\n   * @returns {void}\n   */\n  replaceSnapshots (snapshotData) {\n    this.#snapshots.clear()\n\n    if (Array.isArray(snapshotData)) {\n      for (const { hash, snapshot } of snapshotData) {\n        this.#snapshots.set(hash, snapshot)\n      }\n    } else if (snapshotData && typeof snapshotData === 'object') {\n      // Legacy object format\n      this.#snapshots = new Map(Object.entries(snapshotData))\n    }\n  }\n\n  /**\n   * Starts the auto-flush timer\n   * @returns {void}\n   */\n  #startAutoFlush () {\n    return this.#scheduleFlush()\n  }\n\n  /**\n   * Stops the auto-flush timer\n   * @returns {void}\n   */\n  #stopAutoFlush () {\n    if (this.#flushTimeout) {\n      clearTimeout(this.#flushTimeout)\n      // Ensure any pending flush is completed\n      this.saveSnapshots().catch(() => {\n      // Ignore flush errors\n      })\n      this.#flushTimeout = null\n    }\n  }\n\n  /**\n   * Schedules a flush (debounced to avoid excessive writes)\n   */\n  #scheduleFlush () {\n    this.#flushTimeout = setTimeout(() => {\n      this.saveSnapshots().catch(() => {\n        // Ignore flush errors\n      })\n      if (this.#autoFlush) {\n        this.#flushTimeout?.refresh()\n      } else {\n        this.#flushTimeout = null\n      }\n    }, 1000) // 1 second debounce\n  }\n\n  /**\n   * Cleanup method to stop timers\n   * @returns {void}\n   */\n  destroy () {\n    this.#stopAutoFlush()\n    if (this.#flushTimeout) {\n      clearTimeout(this.#flushTimeout)\n      this.#flushTimeout = null\n    }\n  }\n\n  /**\n   * Async close method that saves all recordings and performs cleanup\n   * @returns {Promise<void>}\n   */\n  async close () {\n    // Save any pending recordings if we have a snapshot path\n    if (this.#snapshotPath && this.#snapshots.size !== 0) {\n      await this.saveSnapshots()\n    }\n\n    // Perform cleanup\n    this.destroy()\n  }\n}\n\nmodule.exports = { SnapshotRecorder, formatRequestKey, createRequestHash, filterHeadersForMatching, filterHeadersForStorage, createHeaderFilters }\n", "'use strict'\n\nconst Agent = require('../dispatcher/agent')\nconst MockAgent = require('./mock-agent')\nconst { SnapshotRecorder } = require('./snapshot-recorder')\nconst WrapHandler = require('../handler/wrap-handler')\nconst { InvalidArgumentError, UndiciError } = require('../core/errors')\nconst { validateSnapshotMode } = require('./snapshot-utils')\n\nconst kSnapshotRecorder = Symbol('kSnapshotRecorder')\nconst kSnapshotMode = Symbol('kSnapshotMode')\nconst kSnapshotPath = Symbol('kSnapshotPath')\nconst kSnapshotLoaded = Symbol('kSnapshotLoaded')\nconst kRealAgent = Symbol('kRealAgent')\n\n// Static flag to ensure warning is only emitted once per process\nlet warningEmitted = false\n\nclass SnapshotAgent extends MockAgent {\n  constructor (opts = {}) {\n    // Emit experimental warning only once\n    if (!warningEmitted) {\n      process.emitWarning(\n        'SnapshotAgent is experimental and subject to change',\n        'ExperimentalWarning'\n      )\n      warningEmitted = true\n    }\n\n    const {\n      mode = 'record',\n      snapshotPath = null,\n      ...mockAgentOpts\n    } = opts\n\n    super(mockAgentOpts)\n\n    validateSnapshotMode(mode)\n\n    // Validate snapshotPath is provided when required\n    if ((mode === 'playback' || mode === 'update') && !snapshotPath) {\n      throw new InvalidArgumentError(`snapshotPath is required when mode is '${mode}'`)\n    }\n\n    this[kSnapshotMode] = mode\n    this[kSnapshotPath] = snapshotPath\n\n    this[kSnapshotRecorder] = new SnapshotRecorder({\n      snapshotPath: this[kSnapshotPath],\n      mode: this[kSnapshotMode],\n      maxSnapshots: opts.maxSnapshots,\n      autoFlush: opts.autoFlush,\n      flushInterval: opts.flushInterval,\n      matchHeaders: opts.matchHeaders,\n      ignoreHeaders: opts.ignoreHeaders,\n      excludeHeaders: opts.excludeHeaders,\n      matchBody: opts.matchBody,\n      matchQuery: opts.matchQuery,\n      caseSensitive: opts.caseSensitive,\n      shouldRecord: opts.shouldRecord,\n      shouldPlayback: opts.shouldPlayback,\n      excludeUrls: opts.excludeUrls\n    })\n    this[kSnapshotLoaded] = false\n\n    // For recording/update mode, we need a real agent to make actual requests\n    // For playback mode, we need a real agent if there are excluded URLs\n    if (this[kSnapshotMode] === 'record' || this[kSnapshotMode] === 'update' ||\n        (this[kSnapshotMode] === 'playback' && opts.excludeUrls && opts.excludeUrls.length > 0)) {\n      this[kRealAgent] = new Agent(opts)\n    }\n\n    // Auto-load snapshots in playback/update mode\n    if ((this[kSnapshotMode] === 'playback' || this[kSnapshotMode] === 'update') && this[kSnapshotPath]) {\n      this.loadSnapshots().catch(() => {\n        // Ignore load errors - file might not exist yet\n      })\n    }\n  }\n\n  dispatch (opts, handler) {\n    handler = WrapHandler.wrap(handler)\n    const mode = this[kSnapshotMode]\n\n    // Check if URL should be excluded (pass through without mocking/recording)\n    if (this[kSnapshotRecorder].isUrlExcluded(opts)) {\n      // Real agent is guaranteed by constructor when excludeUrls is configured\n      return this[kRealAgent].dispatch(opts, handler)\n    }\n\n    if (mode === 'playback' || mode === 'update') {\n      // Ensure snapshots are loaded\n      if (!this[kSnapshotLoaded]) {\n        // Need to load asynchronously, delegate to async version\n        return this.#asyncDispatch(opts, handler)\n      }\n\n      // Try to find existing snapshot (synchronous)\n      const snapshot = this[kSnapshotRecorder].findSnapshot(opts)\n\n      if (snapshot) {\n        // Use recorded response (synchronous)\n        return this.#replaySnapshot(snapshot, handler)\n      } else if (mode === 'update') {\n        // Make real request and record it (async required)\n        return this.#recordAndReplay(opts, handler)\n      } else {\n        // Playback mode but no snapshot found\n        const error = new UndiciError(`No snapshot found for ${opts.method || 'GET'} ${opts.path}`)\n        if (handler.onError) {\n          handler.onError(error)\n          return\n        }\n        throw error\n      }\n    } else if (mode === 'record') {\n      // Record mode - make real request and save response (async required)\n      return this.#recordAndReplay(opts, handler)\n    }\n  }\n\n  /**\n   * Async version of dispatch for when we need to load snapshots first\n   */\n  async #asyncDispatch (opts, handler) {\n    await this.loadSnapshots()\n    return this.dispatch(opts, handler)\n  }\n\n  /**\n   * Records a real request and replays the response\n   */\n  #recordAndReplay (opts, handler) {\n    const responseData = {\n      statusCode: null,\n      headers: {},\n      trailers: {},\n      body: []\n    }\n\n    const self = this // Capture 'this' context for use within nested handler callbacks\n\n    const recordingHandler = {\n      onRequestStart (controller, context) {\n        return handler.onRequestStart(controller, { ...context, history: this.history })\n      },\n\n      onRequestUpgrade (controller, statusCode, headers, socket) {\n        return handler.onRequestUpgrade(controller, statusCode, headers, socket)\n      },\n\n      onResponseStart (controller, statusCode, headers, statusMessage) {\n        responseData.statusCode = statusCode\n        responseData.headers = headers\n        return handler.onResponseStart(controller, statusCode, headers, statusMessage)\n      },\n\n      onResponseData (controller, chunk) {\n        responseData.body.push(chunk)\n        return handler.onResponseData(controller, chunk)\n      },\n\n      onResponseEnd (controller, trailers) {\n        responseData.trailers = trailers\n\n        // Record the interaction using captured 'self' context (fire and forget)\n        const responseBody = Buffer.concat(responseData.body)\n        self[kSnapshotRecorder].record(opts, {\n          statusCode: responseData.statusCode,\n          headers: responseData.headers,\n          body: responseBody,\n          trailers: responseData.trailers\n        })\n          .then(() => handler.onResponseEnd(controller, trailers))\n          .catch((error) => handler.onResponseError(controller, error))\n      }\n    }\n\n    // Use composed agent if available (includes interceptors), otherwise use real agent\n    const agent = this[kRealAgent]\n    return agent.dispatch(opts, recordingHandler)\n  }\n\n  /**\n   * Replays a recorded response\n   *\n   * @param {Object} snapshot - The recorded snapshot to replay.\n   * @param {Object} handler - The handler to call with the response data.\n   * @returns {void}\n   */\n  #replaySnapshot (snapshot, handler) {\n    try {\n      const { response } = snapshot\n\n      const controller = {\n        pause () { },\n        resume () { },\n        abort (reason) {\n          this.aborted = true\n          this.reason = reason\n        },\n\n        aborted: false,\n        paused: false\n      }\n\n      handler.onRequestStart(controller)\n\n      handler.onResponseStart(controller, response.statusCode, response.headers)\n\n      // Body is always stored as base64 string\n      const body = Buffer.from(response.body, 'base64')\n      handler.onResponseData(controller, body)\n\n      handler.onResponseEnd(controller, response.trailers)\n    } catch (error) {\n      handler.onError?.(error)\n    }\n  }\n\n  /**\n   * Loads snapshots from file\n   *\n   * @param {string} [filePath] - Optional file path to load snapshots from.\n   * @returns {Promise<void>} - Resolves when snapshots are loaded.\n   */\n  async loadSnapshots (filePath) {\n    await this[kSnapshotRecorder].loadSnapshots(filePath || this[kSnapshotPath])\n    this[kSnapshotLoaded] = true\n\n    // In playback mode, set up MockAgent interceptors for all snapshots\n    if (this[kSnapshotMode] === 'playback') {\n      this.#setupMockInterceptors()\n    }\n  }\n\n  /**\n   * Saves snapshots to file\n   *\n   * @param {string} [filePath] - Optional file path to save snapshots to.\n   * @returns {Promise<void>} - Resolves when snapshots are saved.\n   */\n  async saveSnapshots (filePath) {\n    return this[kSnapshotRecorder].saveSnapshots(filePath || this[kSnapshotPath])\n  }\n\n  /**\n   * Sets up MockAgent interceptors based on recorded snapshots.\n   *\n   * This method creates MockAgent interceptors for each recorded snapshot,\n   * allowing the SnapshotAgent to fall back to MockAgent's standard intercept\n   * mechanism in playback mode. Each interceptor is configured to persist\n   * (remain active for multiple requests) and responds with the recorded\n   * response data.\n   *\n   * Called automatically when loading snapshots in playback mode.\n   *\n   * @returns {void}\n   */\n  #setupMockInterceptors () {\n    for (const snapshot of this[kSnapshotRecorder].getSnapshots()) {\n      const { request, responses, response } = snapshot\n      const url = new URL(request.url)\n\n      const mockPool = this.get(url.origin)\n\n      // Handle both new format (responses array) and legacy format (response object)\n      const responseData = responses ? responses[0] : response\n      if (!responseData) continue\n\n      mockPool.intercept({\n        path: url.pathname + url.search,\n        method: request.method,\n        headers: request.headers,\n        body: request.body\n      }).reply(responseData.statusCode, responseData.body, {\n        headers: responseData.headers,\n        trailers: responseData.trailers\n      }).persist()\n    }\n  }\n\n  /**\n   * Gets the snapshot recorder\n   * @return {SnapshotRecorder} - The snapshot recorder instance\n   */\n  getRecorder () {\n    return this[kSnapshotRecorder]\n  }\n\n  /**\n   * Gets the current mode\n   * @return {import('./snapshot-utils').SnapshotMode} - The current snapshot mode\n   */\n  getMode () {\n    return this[kSnapshotMode]\n  }\n\n  /**\n   * Clears all snapshots\n   * @returns {void}\n   */\n  clearSnapshots () {\n    this[kSnapshotRecorder].clear()\n  }\n\n  /**\n   * Resets call counts for all snapshots (useful for test cleanup)\n   * @returns {void}\n   */\n  resetCallCounts () {\n    this[kSnapshotRecorder].resetCallCounts()\n  }\n\n  /**\n   * Deletes a specific snapshot by request options\n   * @param {import('./snapshot-recorder').SnapshotRequestOptions} requestOpts - Request options to identify the snapshot\n   * @return {Promise<boolean>} - Returns true if the snapshot was deleted, false if not found\n   */\n  deleteSnapshot (requestOpts) {\n    return this[kSnapshotRecorder].deleteSnapshot(requestOpts)\n  }\n\n  /**\n   * Gets information about a specific snapshot\n   * @returns {import('./snapshot-recorder').SnapshotInfo|null} - Snapshot information or null if not found\n   */\n  getSnapshotInfo (requestOpts) {\n    return this[kSnapshotRecorder].getSnapshotInfo(requestOpts)\n  }\n\n  /**\n   * Replaces all snapshots with new data (full replacement)\n   * @param {Array<{hash: string; snapshot: import('./snapshot-recorder').SnapshotEntryshotEntry}>|Record<string, import('./snapshot-recorder').SnapshotEntry>} snapshotData - New snapshot data to replace existing snapshots\n   * @returns {void}\n   */\n  replaceSnapshots (snapshotData) {\n    this[kSnapshotRecorder].replaceSnapshots(snapshotData)\n  }\n\n  /**\n   * Closes the agent, saving snapshots and cleaning up resources.\n   *\n   * @returns {Promise<void>}\n   */\n  async close () {\n    await this[kSnapshotRecorder].close()\n    await this[kRealAgent]?.close()\n    await super.close()\n  }\n}\n\nmodule.exports = SnapshotAgent\n", "'use strict'\n\n// We include a version number for the Dispatcher API. In case of breaking changes,\n// this version number must be increased to avoid conflicts.\nconst globalDispatcher = Symbol.for('undici.globalDispatcher.2')\nconst legacyGlobalDispatcher = Symbol.for('undici.globalDispatcher.1')\nconst { InvalidArgumentError } = require('./core/errors')\nconst Agent = require('./dispatcher/agent')\n\nif (getGlobalDispatcher() === undefined) {\n  setGlobalDispatcher(new Agent())\n}\n\nfunction setGlobalDispatcher (agent) {\n  if (!agent || typeof agent.dispatch !== 'function') {\n    throw new InvalidArgumentError('Argument agent must implement Agent')\n  }\n\n  Object.defineProperty(globalThis, globalDispatcher, {\n    value: agent,\n    writable: true,\n    enumerable: false,\n    configurable: false\n  })\n\n  Object.defineProperty(globalThis, legacyGlobalDispatcher, {\n    value: agent,\n    writable: true,\n    enumerable: false,\n    configurable: false\n  })\n}\n\nfunction getGlobalDispatcher () {\n  return globalThis[legacyGlobalDispatcher]\n}\n\n// These are the globals that can be installed by undici.install().\n// Not exported by index.js to avoid use outside of this module.\nconst installedExports = /** @type {const} */ (\n  [\n    'fetch',\n    'Headers',\n    'Response',\n    'Request',\n    'FormData',\n    'WebSocket',\n    'CloseEvent',\n    'ErrorEvent',\n    'MessageEvent',\n    'EventSource'\n  ]\n)\n\nmodule.exports = {\n  setGlobalDispatcher,\n  getGlobalDispatcher,\n  installedExports\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst WrapHandler = require('./wrap-handler')\n\n/**\n * @deprecated\n */\nmodule.exports = class DecoratorHandler {\n  #handler\n  #onCompleteCalled = false\n  #onErrorCalled = false\n  #onResponseStartCalled = false\n\n  constructor (handler) {\n    if (typeof handler !== 'object' || handler === null) {\n      throw new TypeError('handler must be an object')\n    }\n    this.#handler = WrapHandler.wrap(handler)\n  }\n\n  onRequestStart (...args) {\n    this.#handler.onRequestStart?.(...args)\n  }\n\n  onRequestUpgrade (...args) {\n    assert(!this.#onCompleteCalled)\n    assert(!this.#onErrorCalled)\n\n    return this.#handler.onRequestUpgrade?.(...args)\n  }\n\n  onResponseStart (...args) {\n    assert(!this.#onCompleteCalled)\n    assert(!this.#onErrorCalled)\n    assert(!this.#onResponseStartCalled)\n\n    this.#onResponseStartCalled = true\n\n    return this.#handler.onResponseStart?.(...args)\n  }\n\n  onResponseData (...args) {\n    assert(!this.#onCompleteCalled)\n    assert(!this.#onErrorCalled)\n\n    return this.#handler.onResponseData?.(...args)\n  }\n\n  onResponseEnd (...args) {\n    assert(!this.#onCompleteCalled)\n    assert(!this.#onErrorCalled)\n\n    this.#onCompleteCalled = true\n    return this.#handler.onResponseEnd?.(...args)\n  }\n\n  onResponseError (...args) {\n    this.#onErrorCalled = true\n    return this.#handler.onResponseError?.(...args)\n  }\n\n  /**\n   * @deprecated\n   */\n  onBodySent () {}\n}\n", "'use strict'\n\nconst util = require('../core/util')\nconst { kBodyUsed } = require('../core/symbols')\nconst assert = require('node:assert')\nconst { InvalidArgumentError } = require('../core/errors')\nconst EE = require('node:events')\n\nconst redirectableStatusCodes = [300, 301, 302, 303, 307, 308]\n\nconst kBody = Symbol('body')\n\nconst noop = () => {}\n\nclass BodyAsyncIterable {\n  constructor (body) {\n    this[kBody] = body\n    this[kBodyUsed] = false\n  }\n\n  async * [Symbol.asyncIterator] () {\n    assert(!this[kBodyUsed], 'disturbed')\n    this[kBodyUsed] = true\n    yield * this[kBody]\n  }\n}\n\nclass RedirectHandler {\n  static buildDispatch (dispatcher, maxRedirections) {\n    if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {\n      throw new InvalidArgumentError('maxRedirections must be a positive number')\n    }\n\n    const dispatch = dispatcher.dispatch.bind(dispatcher)\n    return (opts, originalHandler) => dispatch(opts, new RedirectHandler(dispatch, maxRedirections, opts, originalHandler))\n  }\n\n  constructor (dispatch, maxRedirections, opts, handler) {\n    if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {\n      throw new InvalidArgumentError('maxRedirections must be a positive number')\n    }\n\n    this.dispatch = dispatch\n    this.location = null\n    const { maxRedirections: _, ...cleanOpts } = opts\n    this.opts = cleanOpts // opts must be a copy, exclude maxRedirections\n    this.maxRedirections = maxRedirections\n    this.handler = handler\n    this.history = []\n\n    if (util.isStream(this.opts.body)) {\n      // TODO (fix): Provide some way for the user to cache the file to e.g. /tmp\n      // so that it can be dispatched again?\n      // TODO (fix): Do we need 100-expect support to provide a way to do this properly?\n      if (util.bodyLength(this.opts.body) === 0) {\n        this.opts.body\n          .on('data', function () {\n            assert(false)\n          })\n      }\n\n      if (typeof this.opts.body.readableDidRead !== 'boolean') {\n        this.opts.body[kBodyUsed] = false\n        EE.prototype.on.call(this.opts.body, 'data', function () {\n          this[kBodyUsed] = true\n        })\n      }\n    } else if (this.opts.body && typeof this.opts.body.pipeTo === 'function') {\n      // TODO (fix): We can't access ReadableStream internal state\n      // to determine whether or not it has been disturbed. This is just\n      // a workaround.\n      this.opts.body = new BodyAsyncIterable(this.opts.body)\n    } else if (\n      this.opts.body &&\n      typeof this.opts.body !== 'string' &&\n      !ArrayBuffer.isView(this.opts.body) &&\n      util.isIterable(this.opts.body) &&\n      !util.isFormDataLike(this.opts.body)\n    ) {\n      // TODO: Should we allow re-using iterable if !this.opts.idempotent\n      // or through some other flag?\n      this.opts.body = new BodyAsyncIterable(this.opts.body)\n    }\n  }\n\n  onRequestStart (controller, context) {\n    this.handler.onRequestStart?.(controller, { ...context, history: this.history })\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    if (this.opts.throwOnMaxRedirect && this.history.length >= this.maxRedirections) {\n      throw new Error('max redirects')\n    }\n\n    // https://tools.ietf.org/html/rfc7231#section-6.4.2\n    // https://fetch.spec.whatwg.org/#http-redirect-fetch\n    // In case of HTTP 301 or 302 with POST, change the method to GET\n    if ((statusCode === 301 || statusCode === 302) && this.opts.method === 'POST') {\n      this.opts.method = 'GET'\n      if (util.isStream(this.opts.body)) {\n        util.destroy(this.opts.body.on('error', noop))\n      }\n      this.opts.body = null\n    }\n\n    // https://tools.ietf.org/html/rfc7231#section-6.4.4\n    // In case of HTTP 303, always replace method to be either HEAD or GET\n    if (statusCode === 303 && this.opts.method !== 'HEAD') {\n      this.opts.method = 'GET'\n      if (util.isStream(this.opts.body)) {\n        util.destroy(this.opts.body.on('error', noop))\n      }\n      this.opts.body = null\n    }\n\n    this.location = this.history.length >= this.maxRedirections || util.isDisturbed(this.opts.body) || redirectableStatusCodes.indexOf(statusCode) === -1\n      ? null\n      : headers.location\n\n    if (this.opts.origin) {\n      this.history.push(new URL(this.opts.path, this.opts.origin))\n    }\n\n    if (!this.location) {\n      this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n      return\n    }\n\n    const { origin, pathname, search } = util.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin)))\n    const path = search ? `${pathname}${search}` : pathname\n\n    // Check for redirect loops by seeing if we've already visited this URL in our history\n    // This catches the case where Client/Pool try to handle cross-origin redirects but fail\n    // and keep redirecting to the same URL in an infinite loop\n    const redirectUrlString = `${origin}${path}`\n    for (const historyUrl of this.history) {\n      if (historyUrl.toString() === redirectUrlString) {\n        throw new InvalidArgumentError(`Redirect loop detected. Cannot redirect to ${origin}. This typically happens when using a Client or Pool with cross-origin redirects. Use an Agent for cross-origin redirects.`)\n      }\n    }\n\n    // Remove headers referring to the original URL.\n    // By default it is Host only, unless it's a 303 (see below), which removes also all Content-* headers.\n    // https://tools.ietf.org/html/rfc7231#section-6.4\n    this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin)\n    this.opts.path = path\n    this.opts.origin = origin\n    this.opts.query = null\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.location) {\n      /*\n        https://tools.ietf.org/html/rfc7231#section-6.4\n\n        TLDR: undici always ignores 3xx response bodies.\n\n        Redirection is used to serve the requested resource from another URL, so it assumes that\n        no body is generated (and thus can be ignored). Even though generating a body is not prohibited.\n\n        For status 301, 302, 303, 307 and 308 (the latter from RFC 7238), the specs mention that the body usually\n        (which means it's optional and not mandated) contain just an hyperlink to the value of\n        the Location response header, so the body can be ignored safely.\n\n        For status 300, which is \"Multiple Choices\", the spec mentions both generating a Location\n        response header AND a response body with the other possible location to follow.\n        Since the spec explicitly chooses not to specify a format for such body and leave it to\n        servers and browsers implementors, we ignore the body as there is no specified way to eventually parse it.\n      */\n    } else {\n      this.handler.onResponseData?.(controller, chunk)\n    }\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.location) {\n      /*\n        https://tools.ietf.org/html/rfc7231#section-6.4\n\n        TLDR: undici always ignores 3xx response trailers as they are not expected in case of redirections\n        and neither are useful if present.\n\n        See comment on onData method above for more detailed information.\n      */\n      this.dispatch(this.opts, this)\n    } else {\n      this.handler.onResponseEnd(controller, trailers)\n    }\n  }\n\n  onResponseError (controller, error) {\n    this.handler.onResponseError?.(controller, error)\n  }\n}\n\n// https://tools.ietf.org/html/rfc7231#section-6.4.4\nfunction shouldRemoveHeader (header, removeContent, unknownOrigin) {\n  if (header.length === 4) {\n    return util.headerNameToString(header) === 'host'\n  }\n  if (removeContent && util.headerNameToString(header).startsWith('content-')) {\n    return true\n  }\n  if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) {\n    const name = util.headerNameToString(header)\n    return name === 'authorization' || name === 'cookie' || name === 'proxy-authorization'\n  }\n  return false\n}\n\n// https://tools.ietf.org/html/rfc7231#section-6.4\nfunction cleanRequestHeaders (headers, removeContent, unknownOrigin) {\n  const ret = []\n  if (Array.isArray(headers)) {\n    for (let i = 0; i < headers.length; i += 2) {\n      if (!shouldRemoveHeader(headers[i], removeContent, unknownOrigin)) {\n        ret.push(headers[i], headers[i + 1])\n      }\n    }\n  } else if (headers && typeof headers === 'object') {\n    const entries = util.hasSafeIterator(headers) ? headers : Object.entries(headers)\n\n    for (const [key, value] of entries) {\n      if (!shouldRemoveHeader(key, removeContent, unknownOrigin)) {\n        ret.push(key, value)\n      }\n    }\n  } else {\n    assert(headers == null, 'headers must be an object or an array')\n  }\n  return ret\n}\n\nmodule.exports = RedirectHandler\n", "'use strict'\n\nconst RedirectHandler = require('../handler/redirect-handler')\n\nfunction createRedirectInterceptor ({ maxRedirections: defaultMaxRedirections } = {}) {\n  return (dispatch) => {\n    return function Intercept (opts, handler) {\n      const { maxRedirections = defaultMaxRedirections, ...rest } = opts\n\n      if (maxRedirections == null || maxRedirections === 0) {\n        return dispatch(opts, handler)\n      }\n\n      const dispatchOpts = { ...rest } // Stop sub dispatcher from also redirecting.\n      const redirectHandler = new RedirectHandler(dispatch, maxRedirections, dispatchOpts, handler)\n      return dispatch(dispatchOpts, redirectHandler)\n    }\n  }\n}\n\nmodule.exports = createRedirectInterceptor\n", "'use strict'\n\n// const { parseHeaders } = require('../core/util')\nconst DecoratorHandler = require('../handler/decorator-handler')\nconst { ResponseError } = require('../core/errors')\n\nclass ResponseErrorHandler extends DecoratorHandler {\n  #statusCode\n  #contentType\n  #decoder\n  #headers\n  #body\n\n  constructor (_opts, { handler }) {\n    super(handler)\n  }\n\n  #checkContentType (contentType) {\n    return (this.#contentType ?? '').indexOf(contentType) === 0\n  }\n\n  onRequestStart (controller, context) {\n    this.#statusCode = 0\n    this.#contentType = null\n    this.#decoder = null\n    this.#headers = null\n    this.#body = ''\n\n    return super.onRequestStart(controller, context)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    this.#statusCode = statusCode\n    this.#headers = headers\n    this.#contentType = headers['content-type']\n\n    if (this.#statusCode < 400) {\n      return super.onResponseStart(controller, statusCode, headers, statusMessage)\n    }\n\n    if (this.#checkContentType('application/json') || this.#checkContentType('text/plain')) {\n      this.#decoder = new TextDecoder('utf-8')\n    }\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.#statusCode < 400) {\n      return super.onResponseData(controller, chunk)\n    }\n\n    this.#body += this.#decoder?.decode(chunk, { stream: true }) ?? ''\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.#statusCode >= 400) {\n      this.#body += this.#decoder?.decode(undefined, { stream: false }) ?? ''\n\n      if (this.#checkContentType('application/json')) {\n        try {\n          this.#body = JSON.parse(this.#body)\n        } catch {\n          // Do nothing...\n        }\n      }\n\n      let err\n      const stackTraceLimit = Error.stackTraceLimit\n      Error.stackTraceLimit = 0\n      try {\n        err = new ResponseError('Response Error', this.#statusCode, {\n          body: this.#body,\n          headers: this.#headers\n        })\n      } finally {\n        Error.stackTraceLimit = stackTraceLimit\n      }\n\n      super.onResponseError(controller, err)\n    } else {\n      super.onResponseEnd(controller, trailers)\n    }\n  }\n\n  onResponseError (controller, err) {\n    super.onResponseError(controller, err)\n  }\n}\n\nmodule.exports = () => {\n  return (dispatch) => {\n    return function Intercept (opts, handler) {\n      return dispatch(opts, new ResponseErrorHandler(opts, { handler }))\n    }\n  }\n}\n", "'use strict'\nconst RetryHandler = require('../handler/retry-handler')\n\nmodule.exports = globalOpts => {\n  return dispatch => {\n    return function retryInterceptor (opts, handler) {\n      return dispatch(\n        opts,\n        new RetryHandler(\n          { ...opts, retryOptions: { ...globalOpts, ...opts.retryOptions } },\n          {\n            handler,\n            dispatch\n          }\n        )\n      )\n    }\n  }\n}\n", "'use strict'\n\nconst { InvalidArgumentError, RequestAbortedError } = require('../core/errors')\nconst DecoratorHandler = require('../handler/decorator-handler')\n\nclass DumpHandler extends DecoratorHandler {\n  #maxSize = 1024 * 1024\n  #dumped = false\n  #size = 0\n  aborted = false\n  reason = false\n\n  constructor ({ maxSize, signal }, handler) {\n    if (maxSize != null && (!Number.isFinite(maxSize) || maxSize < 1)) {\n      throw new InvalidArgumentError('maxSize must be a number greater than 0')\n    }\n\n    super(handler)\n\n    this.#maxSize = maxSize ?? this.#maxSize\n    // this.#handler = handler\n  }\n\n  #abort (reason) {\n    this.aborted = true\n    this.reason = reason\n  }\n\n  onRequestStart (controller, context) {\n    controller.abort = this.#abort.bind(this)\n\n    return super.onRequestStart(controller, context)\n  }\n\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    const contentLength = headers['content-length']\n\n    if (contentLength != null && contentLength > this.#maxSize) {\n      throw new RequestAbortedError(\n        `Response size (${contentLength}) larger than maxSize (${\n          this.#maxSize\n        })`\n      )\n    }\n\n    if (this.aborted === true) {\n      return true\n    }\n\n    return super.onResponseStart(controller, statusCode, headers, statusMessage)\n  }\n\n  onResponseError (controller, err) {\n    super.onResponseError(controller, this.aborted === true ? this.reason : err)\n  }\n\n  onResponseData (controller, chunk) {\n    this.#size = this.#size + chunk.length\n\n    if (this.#size > this.#maxSize) {\n      throw new RequestAbortedError(\n        `Response size (${this.#size}) larger than maxSize (${this.#maxSize})`\n      )\n    }\n\n    if (this.#size === this.#maxSize) {\n      this.#dumped = true\n    }\n\n    return true\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.aborted === true) {\n      super.onResponseError(controller, this.reason)\n      return\n    }\n\n    super.onResponseEnd(controller, this.#dumped ? {} : trailers)\n  }\n}\n\nfunction createDumpInterceptor (\n  { maxSize: defaultMaxSize } = {\n    maxSize: 1024 * 1024\n  }\n) {\n  return dispatch => {\n    return function Intercept (opts, handler) {\n      const { dumpMaxSize = defaultMaxSize } = opts\n\n      const dumpHandler = new DumpHandler({ maxSize: dumpMaxSize, signal: opts.signal }, handler)\n\n      return dispatch(opts, dumpHandler)\n    }\n  }\n}\n\nmodule.exports = createDumpInterceptor\n", "'use strict'\nconst { isIP } = require('node:net')\nconst { lookup } = require('node:dns')\nconst DecoratorHandler = require('../handler/decorator-handler')\nconst { InvalidArgumentError, InformationalError } = require('../core/errors')\nconst maxInt = Math.pow(2, 31) - 1\n\nfunction hasSafeIterator (headers) {\n  const prototype = Object.getPrototypeOf(headers)\n  const ownIterator = Object.prototype.hasOwnProperty.call(headers, Symbol.iterator)\n  return ownIterator || (prototype != null && prototype !== Object.prototype && typeof headers[Symbol.iterator] === 'function')\n}\n\nfunction isHostHeader (key) {\n  return typeof key === 'string' && key.toLowerCase() === 'host'\n}\n\nfunction normalizeHeaders (headers) {\n  if (headers == null) {\n    return null\n  }\n\n  if (Array.isArray(headers)) {\n    if (headers.length === 0 || !Array.isArray(headers[0])) {\n      return headers\n    }\n\n    const normalized = []\n    for (const header of headers) {\n      if (Array.isArray(header) && header.length === 2) {\n        normalized.push(header[0], header[1])\n      } else {\n        normalized.push(header)\n      }\n    }\n\n    return normalized\n  }\n\n  if (typeof headers === 'object' && hasSafeIterator(headers)) {\n    const normalized = []\n    for (const header of headers) {\n      if (Array.isArray(header) && header.length === 2) {\n        normalized.push(header[0], header[1])\n      } else {\n        normalized.push(header)\n      }\n    }\n\n    return normalized\n  }\n\n  return headers\n}\n\nfunction hasHostHeader (headers) {\n  if (headers == null) {\n    return false\n  }\n\n  if (Array.isArray(headers)) {\n    if (headers.length === 0) {\n      return false\n    }\n\n    for (let i = 0; i < headers.length; i += 2) {\n      if (isHostHeader(headers[i])) {\n        return true\n      }\n    }\n\n    return false\n  }\n\n  if (typeof headers === 'object') {\n    for (const key in headers) {\n      if (isHostHeader(key)) {\n        return true\n      }\n    }\n  }\n\n  return false\n}\n\nfunction withHostHeader (host, headers) {\n  const normalizedHeaders = normalizeHeaders(headers)\n\n  if (hasHostHeader(normalizedHeaders)) {\n    return normalizedHeaders\n  }\n\n  if (Array.isArray(normalizedHeaders)) {\n    return ['host', host, ...normalizedHeaders]\n  }\n\n  if (normalizedHeaders && typeof normalizedHeaders === 'object') {\n    return {\n      host,\n      ...normalizedHeaders\n    }\n  }\n\n  return { host }\n}\n\nclass DNSStorage {\n  #maxItems = 0\n  #records = new Map()\n\n  constructor (opts) {\n    this.#maxItems = opts.maxItems\n  }\n\n  get size () {\n    return this.#records.size\n  }\n\n  get (hostname) {\n    return this.#records.get(hostname) ?? null\n  }\n\n  set (hostname, records) {\n    this.#records.set(hostname, records)\n  }\n\n  delete (hostname) {\n    this.#records.delete(hostname)\n  }\n\n  // Delegate to storage decide can we do more lookups or not\n  full () {\n    return this.size >= this.#maxItems\n  }\n}\n\nclass DNSInstance {\n  #maxTTL = 0\n  #maxItems = 0\n  dualStack = true\n  affinity = null\n  lookup = null\n  pick = null\n  storage = null\n\n  constructor (opts) {\n    this.#maxTTL = opts.maxTTL\n    this.#maxItems = opts.maxItems\n    this.dualStack = opts.dualStack\n    this.affinity = opts.affinity\n    this.lookup = opts.lookup ?? this.#defaultLookup\n    this.pick = opts.pick ?? this.#defaultPick\n    this.storage = opts.storage ?? new DNSStorage(opts)\n  }\n\n  runLookup (origin, opts, cb) {\n    const ips = this.storage.get(origin.hostname)\n\n    // If full, we just return the origin\n    if (ips == null && this.storage.full()) {\n      cb(null, origin)\n      return\n    }\n\n    const newOpts = {\n      affinity: this.affinity,\n      dualStack: this.dualStack,\n      lookup: this.lookup,\n      pick: this.pick,\n      ...opts.dns,\n      maxTTL: this.#maxTTL,\n      maxItems: this.#maxItems\n    }\n\n    // If no IPs we lookup\n    if (ips == null) {\n      this.lookup(origin, newOpts, (err, addresses) => {\n        if (err || addresses == null || addresses.length === 0) {\n          cb(err ?? new InformationalError('No DNS entries found'))\n          return\n        }\n\n        this.setRecords(origin, addresses)\n        const records = this.storage.get(origin.hostname)\n\n        const ip = this.pick(\n          origin,\n          records,\n          newOpts.affinity\n        )\n\n        let port\n        if (typeof ip.port === 'number') {\n          port = `:${ip.port}`\n        } else if (origin.port !== '') {\n          port = `:${origin.port}`\n        } else {\n          port = ''\n        }\n\n        cb(\n          null,\n          new URL(`${origin.protocol}//${\n            ip.family === 6 ? `[${ip.address}]` : ip.address\n          }${port}`)\n        )\n      })\n    } else {\n      // If there's IPs we pick\n      const ip = this.pick(\n        origin,\n        ips,\n        newOpts.affinity\n      )\n\n      // If no IPs we lookup - deleting old records\n      if (ip == null) {\n        this.storage.delete(origin.hostname)\n        this.runLookup(origin, opts, cb)\n        return\n      }\n\n      let port\n      if (typeof ip.port === 'number') {\n        port = `:${ip.port}`\n      } else if (origin.port !== '') {\n        port = `:${origin.port}`\n      } else {\n        port = ''\n      }\n\n      cb(\n        null,\n        new URL(`${origin.protocol}//${\n          ip.family === 6 ? `[${ip.address}]` : ip.address\n        }${port}`)\n      )\n    }\n  }\n\n  #defaultLookup (origin, opts, cb) {\n    lookup(\n      origin.hostname,\n      {\n        all: true,\n        family: this.dualStack === false ? this.affinity : 0,\n        order: 'ipv4first'\n      },\n      (err, addresses) => {\n        if (err) {\n          return cb(err)\n        }\n\n        const results = new Map()\n\n        for (const addr of addresses) {\n          // On linux we found duplicates, we attempt to remove them with\n          // the latest record\n          results.set(`${addr.address}:${addr.family}`, addr)\n        }\n\n        cb(null, results.values())\n      }\n    )\n  }\n\n  #defaultPick (origin, hostnameRecords, affinity) {\n    let ip = null\n    const { records, offset } = hostnameRecords\n\n    let family\n    if (this.dualStack) {\n      if (affinity == null) {\n        // Balance between ip families\n        if (offset == null || offset === maxInt) {\n          hostnameRecords.offset = 0\n          affinity = 4\n        } else {\n          hostnameRecords.offset++\n          affinity = (hostnameRecords.offset & 1) === 1 ? 6 : 4\n        }\n      }\n\n      if (records[affinity] != null && records[affinity].ips.length > 0) {\n        family = records[affinity]\n      } else {\n        family = records[affinity === 4 ? 6 : 4]\n      }\n    } else {\n      family = records[affinity]\n    }\n\n    // If no IPs we return null\n    if (family == null || family.ips.length === 0) {\n      return ip\n    }\n\n    if (family.offset == null || family.offset === maxInt) {\n      family.offset = 0\n    } else {\n      family.offset++\n    }\n\n    const position = family.offset % family.ips.length\n    ip = family.ips[position] ?? null\n\n    if (ip == null) {\n      return ip\n    }\n\n    if (Date.now() - ip.timestamp > ip.ttl) { // record TTL is already in ms\n      // We delete expired records\n      // It is possible that they have different TTL, so we manage them individually\n      family.ips.splice(position, 1)\n      return this.pick(origin, hostnameRecords, affinity)\n    }\n\n    return ip\n  }\n\n  pickFamily (origin, ipFamily) {\n    const records = this.storage.get(origin.hostname)?.records\n    if (!records) {\n      return null\n    }\n\n    const family = records[ipFamily]\n    if (!family) {\n      return null\n    }\n\n    if (family.offset == null || family.offset === maxInt) {\n      family.offset = 0\n    } else {\n      family.offset++\n    }\n\n    const position = family.offset % family.ips.length\n    const ip = family.ips[position] ?? null\n    if (ip == null) {\n      return ip\n    }\n\n    if (Date.now() - ip.timestamp > ip.ttl) { // record TTL is already in ms\n      // We delete expired records\n      // It is possible that they have different TTL, so we manage them individually\n      family.ips.splice(position, 1)\n    }\n\n    return ip\n  }\n\n  setRecords (origin, addresses) {\n    const timestamp = Date.now()\n    const records = { records: { 4: null, 6: null } }\n    let minTTL = this.#maxTTL\n    for (const record of addresses) {\n      record.timestamp = timestamp\n      if (typeof record.ttl === 'number') {\n        // The record TTL is expected to be in ms\n        record.ttl = Math.min(record.ttl, this.#maxTTL)\n        minTTL = Math.min(minTTL, record.ttl)\n      } else {\n        record.ttl = this.#maxTTL\n      }\n\n      const familyRecords = records.records[record.family] ?? { ips: [] }\n\n      familyRecords.ips.push(record)\n      records.records[record.family] = familyRecords\n    }\n\n    // We provide a default TTL if external storage will be used without TTL per record-level support\n    this.storage.set(origin.hostname, records, { ttl: minTTL })\n  }\n\n  deleteRecords (origin) {\n    this.storage.delete(origin.hostname)\n  }\n\n  getHandler (meta, opts) {\n    return new DNSDispatchHandler(this, meta, opts)\n  }\n}\n\nclass DNSDispatchHandler extends DecoratorHandler {\n  #state = null\n  #opts = null\n  #dispatch = null\n  #origin = null\n  #controller = null\n  #newOrigin = null\n  #firstTry = true\n\n  constructor (state, { origin, handler, dispatch, newOrigin }, opts) {\n    super(handler)\n    this.#origin = origin\n    this.#newOrigin = newOrigin\n    this.#opts = { ...opts }\n    this.#state = state\n    this.#dispatch = dispatch\n  }\n\n  onResponseError (controller, err) {\n    switch (err.code) {\n      case 'ETIMEDOUT':\n      case 'ECONNREFUSED': {\n        if (this.#state.dualStack) {\n          if (!this.#firstTry) {\n            super.onResponseError(controller, err)\n            return\n          }\n          this.#firstTry = false\n\n          // Pick an ip address from the other family\n          const otherFamily = this.#newOrigin.hostname[0] === '[' ? 4 : 6\n          const ip = this.#state.pickFamily(this.#origin, otherFamily)\n          if (ip == null) {\n            super.onResponseError(controller, err)\n            return\n          }\n\n          let port\n          if (typeof ip.port === 'number') {\n            port = `:${ip.port}`\n          } else if (this.#origin.port !== '') {\n            port = `:${this.#origin.port}`\n          } else {\n            port = ''\n          }\n\n          const dispatchOpts = {\n            ...this.#opts,\n            origin: `${this.#origin.protocol}//${\n              ip.family === 6 ? `[${ip.address}]` : ip.address\n            }${port}`,\n            headers: withHostHeader(this.#origin.host, this.#opts.headers)\n          }\n          this.#dispatch(dispatchOpts, this)\n          return\n        }\n\n        // if dual-stack disabled, we error out\n        super.onResponseError(controller, err)\n        break\n      }\n      case 'ENOTFOUND':\n        this.#state.deleteRecords(this.#origin)\n        super.onResponseError(controller, err)\n        break\n      default:\n        super.onResponseError(controller, err)\n        break\n    }\n  }\n}\n\nmodule.exports = interceptorOpts => {\n  if (\n    interceptorOpts?.maxTTL != null &&\n    (typeof interceptorOpts?.maxTTL !== 'number' || interceptorOpts?.maxTTL < 0)\n  ) {\n    throw new InvalidArgumentError('Invalid maxTTL. Must be a positive number')\n  }\n\n  if (\n    interceptorOpts?.maxItems != null &&\n    (typeof interceptorOpts?.maxItems !== 'number' ||\n      interceptorOpts?.maxItems < 1)\n  ) {\n    throw new InvalidArgumentError(\n      'Invalid maxItems. Must be a positive number and greater than zero'\n    )\n  }\n\n  if (\n    interceptorOpts?.affinity != null &&\n    interceptorOpts?.affinity !== 4 &&\n    interceptorOpts?.affinity !== 6\n  ) {\n    throw new InvalidArgumentError('Invalid affinity. Must be either 4 or 6')\n  }\n\n  if (\n    interceptorOpts?.dualStack != null &&\n    typeof interceptorOpts?.dualStack !== 'boolean'\n  ) {\n    throw new InvalidArgumentError('Invalid dualStack. Must be a boolean')\n  }\n\n  if (\n    interceptorOpts?.lookup != null &&\n    typeof interceptorOpts?.lookup !== 'function'\n  ) {\n    throw new InvalidArgumentError('Invalid lookup. Must be a function')\n  }\n\n  if (\n    interceptorOpts?.pick != null &&\n    typeof interceptorOpts?.pick !== 'function'\n  ) {\n    throw new InvalidArgumentError('Invalid pick. Must be a function')\n  }\n\n  if (\n    interceptorOpts?.storage != null &&\n    (typeof interceptorOpts?.storage?.get !== 'function' ||\n      typeof interceptorOpts?.storage?.set !== 'function' ||\n      typeof interceptorOpts?.storage?.full !== 'function' ||\n      typeof interceptorOpts?.storage?.delete !== 'function'\n    )\n  ) {\n    throw new InvalidArgumentError('Invalid storage. Must be a object with methods: { get, set, full, delete }')\n  }\n\n  const dualStack = interceptorOpts?.dualStack ?? true\n  let affinity\n  if (dualStack) {\n    affinity = interceptorOpts?.affinity ?? null\n  } else {\n    affinity = interceptorOpts?.affinity ?? 4\n  }\n\n  const opts = {\n    maxTTL: interceptorOpts?.maxTTL ?? 10e3, // Expressed in ms\n    lookup: interceptorOpts?.lookup ?? null,\n    pick: interceptorOpts?.pick ?? null,\n    dualStack,\n    affinity,\n    maxItems: interceptorOpts?.maxItems ?? Infinity,\n    storage: interceptorOpts?.storage\n  }\n\n  const instance = new DNSInstance(opts)\n\n  return dispatch => {\n    return function dnsInterceptor (origDispatchOpts, handler) {\n      const origin =\n        origDispatchOpts.origin.constructor === URL\n          ? origDispatchOpts.origin\n          : new URL(origDispatchOpts.origin)\n\n      if (isIP(origin.hostname) !== 0) {\n        return dispatch(origDispatchOpts, handler)\n      }\n\n      instance.runLookup(origin, origDispatchOpts, (err, newOrigin) => {\n        if (err) {\n          return handler.onResponseError(null, err)\n        }\n\n        const dispatchOpts = {\n          ...origDispatchOpts,\n          servername: origin.hostname, // For SNI on TLS\n          origin: newOrigin.origin,\n          headers: withHostHeader(origin.host, origDispatchOpts.headers)\n        }\n\n        dispatch(\n          dispatchOpts,\n          instance.getHandler(\n            { origin, dispatch, handler, newOrigin },\n            origDispatchOpts\n          )\n        )\n      })\n\n      return true\n    }\n  }\n}\n", "'use strict'\n\nconst {\n  safeHTTPMethods,\n  pathHasQueryOrFragment,\n  hasSafeIterator,\n  isValidHTTPToken\n} = require('../core/util')\n\nconst { serializePathWithQuery } = require('../core/util')\n\nconst MAX_DELTA_SECONDS = 2147483647\nconst RESTRICTIVE_DIRECTIVE_NAMES = ['no-store', 'private', 'no-cache']\nconst kInvalidCacheControlDirectives = Symbol('invalid cache-control directives')\n\nfunction trimOWS (value) {\n  return value.replace(/^[\\t ]+|[\\t ]+$/g, '')\n}\n\nfunction arrayIncludes (array, value) {\n  for (let i = 0; i < array.length; i++) {\n    if (array[i] === value) {\n      return true\n    }\n  }\n\n  return false\n}\n\nfunction trimOWSStart (value) {\n  return value.replace(/^[\\t ]+/, '')\n}\n\nfunction trimOWSEnd (value) {\n  return value.replace(/[\\t ]+$/, '')\n}\n\nfunction findUnescapedQuote (value, start) {\n  let escaped = false\n  for (let i = start; i < value.length; i++) {\n    if (escaped) {\n      escaped = false\n    } else if (value[i] === '\\\\') {\n      escaped = true\n    } else if (value[i] === '\"') {\n      return i\n    }\n  }\n\n  return -1\n}\n\nfunction splitCacheControlHeaderValue (value) {\n  const directives = []\n  let start = 0\n  let quoteStart = -1\n  let inQuote = false\n  let escaped = false\n\n  for (let i = 0; i < value.length; i++) {\n    if (inQuote) {\n      if (escaped) {\n        escaped = false\n      } else if (value[i] === '\\\\') {\n        escaped = true\n      } else if (value[i] === '\"') {\n        inQuote = false\n        quoteStart = -1\n      }\n    } else if (value[i] === '\"') {\n      inQuote = true\n      quoteStart = i\n    } else if (value[i] === ',') {\n      directives.push({ value: value.substring(start, i), fromMalformedQuote: false })\n      start = i + 1\n    }\n  }\n\n  if (!inQuote) {\n    directives.push({ value: value.substring(start), fromMalformedQuote: false })\n    return directives\n  }\n\n  const tail = value.substring(start)\n  const quoteOffset = quoteStart - start\n  let tailStart = 0\n  for (let i = 0; i < tail.length; i++) {\n    if (tail[i] === ',') {\n      directives.push({\n        value: tail.substring(tailStart, i),\n        fromMalformedQuote: tailStart > quoteOffset\n      })\n      tailStart = i + 1\n    }\n  }\n\n  directives.push({\n    value: tail.substring(tailStart),\n    fromMalformedQuote: tailStart > quoteOffset\n  })\n  return directives\n}\n\nfunction markInvalidCacheControlDirective (directives, key) {\n  let invalidDirectives = directives[kInvalidCacheControlDirectives]\n\n  if (invalidDirectives === undefined) {\n    invalidDirectives = new Set()\n    Object.defineProperty(directives, kInvalidCacheControlDirectives, {\n      value: invalidDirectives\n    })\n  }\n\n  invalidDirectives.add(key)\n}\n\nfunction hasInvalidCacheControlDirective (directives, key) {\n  return directives[kInvalidCacheControlDirectives]?.has(key) === true\n}\n\nfunction getMalformedRestrictiveDirectiveName (key) {\n  for (const directiveName of RESTRICTIVE_DIRECTIVE_NAMES) {\n    if (\n      key.startsWith(directiveName) &&\n      key.length > directiveName.length &&\n      !isValidHTTPToken(key[directiveName.length])\n    ) {\n      return directiveName\n    }\n  }\n\n  let tokenOnlyKey = ''\n  let hasInvalidTokenChar = false\n  for (let i = 0; i < key.length; i++) {\n    if (isValidHTTPToken(key[i])) {\n      tokenOnlyKey += key[i]\n    } else {\n      hasInvalidTokenChar = true\n    }\n  }\n\n  if (hasInvalidTokenChar && arrayIncludes(RESTRICTIVE_DIRECTIVE_NAMES, tokenOnlyKey)) {\n    return tokenOnlyKey\n  }\n}\n\n/**\n * @param {import('../../types/dispatcher.d.ts').default.DispatchOptions} opts\n */\nfunction makeCacheKey (opts) {\n  if (!opts.origin) {\n    throw new Error('opts.origin is undefined')\n  }\n\n  let fullPath = opts.path || '/'\n\n  if (opts.query && !pathHasQueryOrFragment(fullPath)) {\n    fullPath = serializePathWithQuery(fullPath, opts.query)\n  }\n\n  return {\n    origin: opts.origin.toString(),\n    method: opts.method,\n    path: fullPath,\n    headers: opts.headers\n  }\n}\n\nfunction appendHeader (headers, key, val) {\n  const headerName = key.toLowerCase()\n  const current = headers[headerName]\n  const values = Array.isArray(val) ? val : [val]\n\n  if (current === undefined) {\n    headers[headerName] = Array.isArray(val) ? val.slice() : val\n  } else if (Array.isArray(current)) {\n    current.push(...values)\n  } else {\n    headers[headerName] = [current, ...values]\n  }\n}\n\n/**\n * @param {Record<string, string[] | string>}\n * @returns {Record<string, string[] | string>}\n */\nfunction normalizeHeaders (opts) {\n  let headers\n  if (opts.headers == null) {\n    headers = {}\n  } else if (typeof opts.headers === 'object') {\n    headers = {}\n\n    if (hasSafeIterator(opts.headers)) {\n      for (const x of opts.headers) {\n        if (!Array.isArray(x)) {\n          throw new Error('opts.headers is not a valid header map')\n        }\n        const [key, val] = x\n        if (typeof key !== 'string' || typeof val !== 'string') {\n          throw new Error('opts.headers is not a valid header map')\n        }\n        appendHeader(headers, key, val)\n      }\n    } else {\n      for (const key of Object.keys(opts.headers)) {\n        appendHeader(headers, key, opts.headers[key])\n      }\n    }\n  } else {\n    throw new Error('opts.headers is not an object')\n  }\n\n  return headers\n}\n\n/**\n * @param {any} key\n */\nfunction assertCacheKey (key) {\n  if (typeof key !== 'object') {\n    throw new TypeError(`expected key to be object, got ${typeof key}`)\n  }\n\n  for (const property of ['origin', 'method', 'path']) {\n    if (typeof key[property] !== 'string') {\n      throw new TypeError(`expected key.${property} to be string, got ${typeof key[property]}`)\n    }\n  }\n\n  if (key.headers !== undefined && typeof key.headers !== 'object') {\n    throw new TypeError(`expected headers to be object, got ${typeof key}`)\n  }\n}\n\n/**\n * @param {any} value\n */\nfunction assertCacheValue (value) {\n  if (typeof value !== 'object') {\n    throw new TypeError(`expected value to be object, got ${typeof value}`)\n  }\n\n  for (const property of ['statusCode', 'cachedAt', 'staleAt', 'deleteAt']) {\n    if (typeof value[property] !== 'number') {\n      throw new TypeError(`expected value.${property} to be number, got ${typeof value[property]}`)\n    }\n  }\n\n  if (typeof value.statusMessage !== 'string') {\n    throw new TypeError(`expected value.statusMessage to be string, got ${typeof value.statusMessage}`)\n  }\n\n  if (value.headers != null && typeof value.headers !== 'object') {\n    throw new TypeError(`expected value.rawHeaders to be object, got ${typeof value.headers}`)\n  }\n\n  if (value.vary !== undefined && typeof value.vary !== 'object') {\n    throw new TypeError(`expected value.vary to be object, got ${typeof value.vary}`)\n  }\n\n  if (value.etag !== undefined && typeof value.etag !== 'string') {\n    throw new TypeError(`expected value.etag to be string, got ${typeof value.etag}`)\n  }\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc9111.html#name-cache-control\n * @see https://www.iana.org/assignments/http-cache-directives/http-cache-directives.xhtml\n\n * @param {string | string[]} header\n * @returns {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives}\n */\nfunction parseCacheControlHeader (header) {\n  /**\n   * @type {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives}\n   */\n  const output = {}\n  const invalidNumericDirectives = new Set()\n  const invalidNoArgumentDirectives = new Set()\n\n  const directives = splitCacheControlHeaderValue(Array.isArray(header) ? header.join(',') : header)\n\n  for (let i = 0; i < directives.length; i++) {\n    const directiveRecord = directives[i]\n    const directive = directiveRecord.value.toLowerCase()\n    const fromMalformedQuote = directiveRecord.fromMalformedQuote\n    const keyValueDelimiter = directive.indexOf('=')\n\n    let key\n    let value\n    let keyHasTrailingWhitespace = false\n    let valueHasLeadingWhitespace = false\n    if (keyValueDelimiter !== -1) {\n      const rawKey = directive.substring(0, keyValueDelimiter)\n      const rawValue = directive.substring(keyValueDelimiter + 1)\n\n      keyHasTrailingWhitespace = trimOWSEnd(rawKey) !== rawKey\n      valueHasLeadingWhitespace = trimOWSStart(rawValue) !== rawValue\n      key = trimOWS(rawKey)\n      value = trimOWSStart(rawValue)\n    } else {\n      key = trimOWS(directive)\n    }\n\n    const malformedRestrictiveDirectiveName = getMalformedRestrictiveDirectiveName(key)\n    if (malformedRestrictiveDirectiveName !== undefined) {\n      output[malformedRestrictiveDirectiveName] = true\n      continue\n    }\n\n    switch (key) {\n      case 'min-fresh':\n      case 'max-stale':\n      case 'max-age':\n      case 's-maxage':\n      case 'stale-while-revalidate':\n      case 'stale-if-error': {\n        if (fromMalformedQuote || invalidNumericDirectives.has(key)) {\n          continue\n        }\n\n        if (value === undefined || keyHasTrailingWhitespace || valueHasLeadingWhitespace) {\n          delete output[key]\n          invalidNumericDirectives.add(key)\n          markInvalidCacheControlDirective(output, key)\n          continue\n        }\n\n        if (\n          value.length >= 2 &&\n          value[0] === '\"' &&\n          value[value.length - 1] === '\"'\n        ) {\n          value = value.substring(1, value.length - 1)\n        }\n\n        if (!/^[0-9]+$/.test(value)) {\n          delete output[key]\n          invalidNumericDirectives.add(key)\n          markInvalidCacheControlDirective(output, key)\n          continue\n        }\n\n        const parsedValue = Math.min(parseInt(value, 10), MAX_DELTA_SECONDS)\n\n        if (key === 'min-fresh') {\n          if (!(key in output) || output[key] < parsedValue) {\n            output[key] = parsedValue\n          }\n        } else if (!(key in output) || output[key] > parsedValue) {\n          output[key] = parsedValue\n        }\n\n        break\n      }\n      case 'private':\n      case 'no-cache': {\n        if (fromMalformedQuote) {\n          output[key] = true\n          break\n        }\n\n        if (value !== undefined && value.length === 0) {\n          output[key] = true\n          break\n        }\n\n        if (value) {\n          // The private and no-cache directives can be unqualified (aka just\n          //  `private` or `no-cache`) or qualified (w/ a value). When they're\n          //  qualified, it's a list of headers like `no-cache=header1`,\n          //  `no-cache=\"header1\"`, or `no-cache=\"header1, header2\"`\n          // If we're given multiple headers, the comma messes us up since\n          //  we split the full header by commas. So, let's loop through the\n          //  remaining parts in front of us until we find one that contains a\n          //  closing quote. We can then skip the consumed quoted-list fragments and\n          //  continue parsing like normal.\n          // https://www.rfc-editor.org/rfc/rfc9111.html#name-no-cache-2\n          if (value[0] === '\"') {\n            // Something like `no-cache=\"some-header\"` OR `no-cache=\"some-header, another-header\"`.\n            value = trimOWSEnd(value)\n\n            let fieldList = ''\n            let lastQuotedPart = i\n            let foundEndingQuote = false\n            const closingQuote = findUnescapedQuote(value, 1)\n\n            if (closingQuote !== -1) {\n              fieldList = value.substring(1, closingQuote)\n              foundEndingQuote = true\n            } else {\n              // Something like `no-cache=\"some-header, another-header\"`\n              //  This can still be something invalid, e.g. `no-cache=\"some-header, ...`\n              const fieldListParts = [value.substring(1)]\n\n              for (let j = i + 1; j < directives.length; j++) {\n                const nextPart = trimOWS(directives[j].value)\n                const closingQuote = findUnescapedQuote(nextPart, 0)\n\n                lastQuotedPart = j\n\n                if (closingQuote !== -1) {\n                  fieldListParts.push(nextPart.substring(0, closingQuote))\n                  foundEndingQuote = true\n                  break\n                }\n\n                fieldListParts.push(nextPart)\n              }\n\n              fieldList = fieldListParts.join(',')\n            }\n\n            if (!foundEndingQuote) {\n              output[key] = true\n              break\n            }\n\n            i = lastQuotedPart\n\n            const headers = fieldList.split(',')\n            let validFieldNames = true\n            for (let j = 0; j < headers.length; j++) {\n              headers[j] = trimOWS(headers[j])\n              if (!isValidHTTPToken(headers[j])) {\n                validFieldNames = false\n              }\n            }\n\n            if (!validFieldNames) {\n              output[key] = true\n            } else if (output[key] !== true) {\n              if (key in output) {\n                output[key] = output[key].concat(headers)\n              } else {\n                output[key] = headers\n              }\n            }\n          } else {\n            // Something like `no-cache=some-header`\n            const fieldName = trimOWS(value)\n\n            if (!isValidHTTPToken(fieldName)) {\n              output[key] = true\n            } else if (output[key] !== true) {\n              if (key in output) {\n                output[key] = output[key].concat(fieldName)\n              } else {\n                output[key] = [fieldName]\n              }\n            }\n          }\n\n          break\n        }\n      }\n      // eslint-disable-next-line no-fallthrough\n      case 'public':\n      case 'must-revalidate':\n      case 'proxy-revalidate':\n      case 'immutable':\n      case 'no-transform':\n      case 'must-understand':\n      case 'only-if-cached':\n        if (fromMalformedQuote || invalidNoArgumentDirectives.has(key)) {\n          continue\n        }\n\n        if (value !== undefined) {\n          // These are qualified (something like `public=...`) when they aren't\n          //  allowed to be, skip all instances of the malformed directive.\n          delete output[key]\n          invalidNoArgumentDirectives.add(key)\n          continue\n        }\n\n        output[key] = true\n        break\n      case 'no-store':\n        output[key] = true\n        break\n      default:\n        // Ignore unknown directives as per https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.3-1\n        continue\n    }\n  }\n\n  return output\n}\n\n/**\n * @param {string | string[]} varyHeader Vary header from the server\n * @returns {string[]}\n */\nfunction splitVaryHeader (varyHeader) {\n  const values = Array.isArray(varyHeader) ? varyHeader : [varyHeader]\n  const output = []\n\n  for (let i = 0; i < values.length; i++) {\n    const parts = values[i].split(',')\n    for (let j = 0; j < parts.length; j++) {\n      output.push(parts[j])\n    }\n  }\n\n  return output\n}\n\n/**\n * @param {string | string[]} varyHeader Vary header from the server\n * @returns {boolean}\n */\nfunction hasVaryStar (varyHeader) {\n  const values = splitVaryHeader(varyHeader)\n  for (let i = 0; i < values.length; i++) {\n    if (trimOWS(values[i]).indexOf('*') !== -1) {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * @param {string | string[]} varyHeader Vary header from the server\n * @param {Record<string, string | string[]>} headers Request headers\n * @returns {Record<string, string | string[] | null> | undefined}\n */\nfunction parseVaryHeader (varyHeader, headers) {\n  if (hasVaryStar(varyHeader)) {\n    return headers\n  }\n\n  const output = /** @type {Record<string, string | string[] | null>} */ ({})\n\n  const varyingHeaders = splitVaryHeader(varyHeader)\n\n  for (const header of varyingHeaders) {\n    const trimmedHeader = trimOWS(header).toLowerCase()\n\n    if (trimmedHeader.length === 0) {\n      continue\n    }\n\n    if (!isValidHTTPToken(trimmedHeader)) {\n      return undefined\n    }\n\n    const headerValue = headers[trimmedHeader]\n    output[trimmedHeader] = Array.isArray(headerValue) ? headerValue.slice() : headerValue ?? null\n  }\n\n  return output\n}\n\n/**\n * @param {string | string[]} varyHeader Vary header from the server\n * @returns {boolean}\n */\nfunction isInvalidOrWildcardVaryHeader (varyHeader) {\n  return hasVaryStar(varyHeader) || parseVaryHeader(varyHeader, {}) === undefined\n}\n\n/**\n * Note: this deviates from the spec a little. Empty etags (\"\", W/\"\") are valid,\n *  however, including them in cached resposnes serves little to no purpose.\n *\n * @see https://www.rfc-editor.org/rfc/rfc9110.html#name-etag\n *\n * @param {string} etag\n * @returns {boolean}\n */\nfunction isEtagUsable (etag) {\n  if (etag.length <= 2) {\n    // Shortest an etag can be is two chars (just \"\"). This is where we deviate\n    //  from the spec requiring a min of 3 chars however\n    return false\n  }\n\n  if (etag[0] === '\"' && etag[etag.length - 1] === '\"') {\n    // ETag: \"\"asd123\"\" or ETag: \"W/\"asd123\"\", kinda undefined behavior in the\n    //  spec. Some servers will accept these while others don't.\n    // ETag: \"asd123\"\n    return !(etag[1] === '\"' || etag.startsWith('\"W/'))\n  }\n\n  if (etag.startsWith('W/\"') && etag[etag.length - 1] === '\"') {\n    // ETag: W/\"\", also where we deviate from the spec & require a min of 3\n    //  chars\n    // ETag: for W/\"\", W/\"asd123\"\n    return etag.length !== 4\n  }\n\n  // Anything else\n  return false\n}\n\n/**\n * @param {unknown} store\n * @returns {asserts store is import('../../types/cache-interceptor.d.ts').default.CacheStore}\n */\nfunction assertCacheStore (store, name = 'CacheStore') {\n  if (typeof store !== 'object' || store === null) {\n    throw new TypeError(`expected type of ${name} to be a CacheStore, got ${store === null ? 'null' : typeof store}`)\n  }\n\n  for (const fn of ['get', 'createWriteStream', 'delete']) {\n    if (typeof store[fn] !== 'function') {\n      throw new TypeError(`${name} needs to have a \\`${fn}()\\` function`)\n    }\n  }\n}\n/**\n * @param {unknown} methods\n * @returns {asserts methods is import('../../types/cache-interceptor.d.ts').default.CacheMethods[]}\n */\nfunction assertCacheMethods (methods, name = 'CacheMethods') {\n  if (!Array.isArray(methods)) {\n    throw new TypeError(`expected type of ${name} needs to be an array, got ${methods === null ? 'null' : typeof methods}`)\n  }\n\n  if (methods.length === 0) {\n    throw new TypeError(`${name} needs to have at least one method`)\n  }\n\n  for (const method of methods) {\n    if (!arrayIncludes(safeHTTPMethods, method)) {\n      throw new TypeError(`element of ${name}-array needs to be one of following values: ${safeHTTPMethods.join(', ')}, got ${method}`)\n    }\n  }\n}\n\n/**\n * Creates a string key for request deduplication purposes.\n * This key is used to identify in-flight requests that can be shared.\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n * @param {Set<string>} [excludeHeaders] Set of lowercase header names to exclude from the key\n * @returns {string}\n */\nfunction makeDeduplicationKey (cacheKey, excludeHeaders) {\n  // Use JSON.stringify to produce a collision-resistant key.\n  // Previous format used `:` and `=` delimiters without escaping, which\n  // allowed different header sets to produce identical keys (e.g.\n  // {a:\"x:b=y\"} vs {a:\"x\", b:\"y\"}). See: https://github.com/nodejs/undici/issues/5012\n  const headers = {}\n\n  if (cacheKey.headers) {\n    const sortedHeaders = Object.keys(cacheKey.headers).sort()\n    for (const header of sortedHeaders) {\n      // Skip excluded headers\n      if (excludeHeaders?.has(header.toLowerCase())) {\n        continue\n      }\n      headers[header] = cacheKey.headers[header]\n    }\n  }\n\n  return JSON.stringify([cacheKey.origin, cacheKey.method, cacheKey.path, headers])\n}\n\nmodule.exports = {\n  makeCacheKey,\n  normalizeHeaders,\n  assertCacheKey,\n  assertCacheValue,\n  parseCacheControlHeader,\n  hasInvalidCacheControlDirective,\n  parseVaryHeader,\n  hasVaryStar,\n  isInvalidOrWildcardVaryHeader,\n  isEtagUsable,\n  assertCacheMethods,\n  assertCacheStore,\n  makeDeduplicationKey\n}\n", "'use strict'\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc9110.html#name-date-time-formats\n *\n * @param {string} date\n * @returns {Date | undefined}\n */\nfunction parseHttpDate (date) {\n  // Sun, 06 Nov 1994 08:49:37 GMT    ; IMF-fixdate\n  // Sun Nov  6 08:49:37 1994         ; ANSI C's asctime() format\n  // Sunday, 06-Nov-94 08:49:37 GMT   ; obsolete RFC 850 format\n\n  switch (date[3]) {\n    case ',': return parseImfDate(date)\n    case ' ': return parseAscTimeDate(date)\n    default: return parseRfc850Date(date)\n  }\n}\n\nfunction makeDate (year, monthIdx, day, hour, minute, second, weekday) {\n  const result = new Date(Date.UTC(year, monthIdx, day, hour, minute, second))\n\n  // Date.UTC treats years 0-99 as 1900-1999. Reset the full year so component\n  // checks below validate the HTTP date as written.\n  if (year >= 0 && year <= 99) {\n    result.setUTCFullYear(year)\n  }\n\n  return result.getUTCFullYear() === year &&\n    result.getUTCMonth() === monthIdx &&\n    result.getUTCDate() === day &&\n    result.getUTCHours() === hour &&\n    result.getUTCMinutes() === minute &&\n    result.getUTCSeconds() === second &&\n    result.getUTCDay() === weekday\n    ? result\n    : undefined\n}\n\n/**\n * @see https://httpwg.org/specs/rfc9110.html#preferred.date.format\n *\n * @param {string} date\n * @returns {Date | undefined}\n */\nfunction parseImfDate (date) {\n  if (\n    date.length !== 29 ||\n    date[4] !== ' ' ||\n    date[7] !== ' ' ||\n    date[11] !== ' ' ||\n    date[16] !== ' ' ||\n    date[19] !== ':' ||\n    date[22] !== ':' ||\n    date[25] !== ' ' ||\n    date[26] !== 'G' ||\n    date[27] !== 'M' ||\n    date[28] !== 'T'\n  ) {\n    return undefined\n  }\n\n  let weekday = -1\n  if (date[0] === 'S' && date[1] === 'u' && date[2] === 'n') { // Sunday\n    weekday = 0\n  } else if (date[0] === 'M' && date[1] === 'o' && date[2] === 'n') { // Monday\n    weekday = 1\n  } else if (date[0] === 'T' && date[1] === 'u' && date[2] === 'e') { // Tuesday\n    weekday = 2\n  } else if (date[0] === 'W' && date[1] === 'e' && date[2] === 'd') { // Wednesday\n    weekday = 3\n  } else if (date[0] === 'T' && date[1] === 'h' && date[2] === 'u') { // Thursday\n    weekday = 4\n  } else if (date[0] === 'F' && date[1] === 'r' && date[2] === 'i') { // Friday\n    weekday = 5\n  } else if (date[0] === 'S' && date[1] === 'a' && date[2] === 't') { // Saturday\n    weekday = 6\n  } else {\n    return undefined // Not a valid day of the week\n  }\n\n  let day = 0\n  if (date[5] === '0') {\n    // Single digit day, e.g. \"Sun Nov 6 08:49:37 1994\"\n    const code = date.charCodeAt(6)\n    if (code < 49 || code > 57) {\n      return undefined // Not a digit\n    }\n    day = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(5)\n    if (code1 < 49 || code1 > 51) {\n      return undefined // Not a digit between 1 and 3\n    }\n    const code2 = date.charCodeAt(6)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    day = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let monthIdx = -1\n  if (\n    (date[8] === 'J' && date[9] === 'a' && date[10] === 'n')\n  ) {\n    monthIdx = 0 // Jan\n  } else if (\n    (date[8] === 'F' && date[9] === 'e' && date[10] === 'b')\n  ) {\n    monthIdx = 1 // Feb\n  } else if (\n    (date[8] === 'M' && date[9] === 'a')\n  ) {\n    if (date[10] === 'r') {\n      monthIdx = 2 // Mar\n    } else if (date[10] === 'y') {\n      monthIdx = 4 // May\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[8] === 'J')\n  ) {\n    if (date[9] === 'a' && date[10] === 'n') {\n      monthIdx = 0 // Jan\n    } else if (date[9] === 'u') {\n      if (date[10] === 'n') {\n        monthIdx = 5 // Jun\n      } else if (date[10] === 'l') {\n        monthIdx = 6 // Jul\n      } else {\n        return undefined // Invalid month\n      }\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[8] === 'A')\n  ) {\n    if (date[9] === 'p' && date[10] === 'r') {\n      monthIdx = 3 // Apr\n    } else if (date[9] === 'u' && date[10] === 'g') {\n      monthIdx = 7 // Aug\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[8] === 'S' && date[9] === 'e' && date[10] === 'p')\n  ) {\n    monthIdx = 8 // Sep\n  } else if (\n    (date[8] === 'O' && date[9] === 'c' && date[10] === 't')\n  ) {\n    monthIdx = 9 // Oct\n  } else if (\n    (date[8] === 'N' && date[9] === 'o' && date[10] === 'v')\n  ) {\n    monthIdx = 10 // Nov\n  } else if (\n    (date[8] === 'D' && date[9] === 'e' && date[10] === 'c')\n  ) {\n    monthIdx = 11 // Dec\n  } else {\n    // Not a valid month\n    return undefined\n  }\n\n  const yearDigit1 = date.charCodeAt(12)\n  if (yearDigit1 < 48 || yearDigit1 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit2 = date.charCodeAt(13)\n  if (yearDigit2 < 48 || yearDigit2 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit3 = date.charCodeAt(14)\n  if (yearDigit3 < 48 || yearDigit3 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit4 = date.charCodeAt(15)\n  if (yearDigit4 < 48 || yearDigit4 > 57) {\n    return undefined // Not a digit\n  }\n  const year = (yearDigit1 - 48) * 1000 + (yearDigit2 - 48) * 100 + (yearDigit3 - 48) * 10 + (yearDigit4 - 48)\n\n  let hour = 0\n  if (date[17] === '0') {\n    const code = date.charCodeAt(18)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    hour = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(17)\n    if (code1 < 48 || code1 > 50) {\n      return undefined // Not a digit between 0 and 2\n    }\n    const code2 = date.charCodeAt(18)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    if (code1 === 50 && code2 > 51) {\n      return undefined // Hour cannot be greater than 23\n    }\n    hour = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let minute = 0\n  if (date[20] === '0') {\n    const code = date.charCodeAt(21)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    minute = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(20)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(21)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    minute = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let second = 0\n  if (date[23] === '0') {\n    const code = date.charCodeAt(24)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    second = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(23)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(24)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    second = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  return makeDate(year, monthIdx, day, hour, minute, second, weekday)\n}\n\n/**\n * @see https://httpwg.org/specs/rfc9110.html#obsolete.date.formats\n *\n * @param {string} date\n * @returns {Date | undefined}\n */\nfunction parseAscTimeDate (date) {\n  // This is assumed to be in UTC\n\n  if (\n    date.length !== 24 ||\n    date[7] !== ' ' ||\n    date[10] !== ' ' ||\n    date[19] !== ' '\n  ) {\n    return undefined\n  }\n\n  let weekday = -1\n  if (date[0] === 'S' && date[1] === 'u' && date[2] === 'n') { // Sunday\n    weekday = 0\n  } else if (date[0] === 'M' && date[1] === 'o' && date[2] === 'n') { // Monday\n    weekday = 1\n  } else if (date[0] === 'T' && date[1] === 'u' && date[2] === 'e') { // Tuesday\n    weekday = 2\n  } else if (date[0] === 'W' && date[1] === 'e' && date[2] === 'd') { // Wednesday\n    weekday = 3\n  } else if (date[0] === 'T' && date[1] === 'h' && date[2] === 'u') { // Thursday\n    weekday = 4\n  } else if (date[0] === 'F' && date[1] === 'r' && date[2] === 'i') { // Friday\n    weekday = 5\n  } else if (date[0] === 'S' && date[1] === 'a' && date[2] === 't') { // Saturday\n    weekday = 6\n  } else {\n    return undefined // Not a valid day of the week\n  }\n\n  let monthIdx = -1\n  if (\n    (date[4] === 'J' && date[5] === 'a' && date[6] === 'n')\n  ) {\n    monthIdx = 0 // Jan\n  } else if (\n    (date[4] === 'F' && date[5] === 'e' && date[6] === 'b')\n  ) {\n    monthIdx = 1 // Feb\n  } else if (\n    (date[4] === 'M' && date[5] === 'a')\n  ) {\n    if (date[6] === 'r') {\n      monthIdx = 2 // Mar\n    } else if (date[6] === 'y') {\n      monthIdx = 4 // May\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[4] === 'J')\n  ) {\n    if (date[5] === 'a' && date[6] === 'n') {\n      monthIdx = 0 // Jan\n    } else if (date[5] === 'u') {\n      if (date[6] === 'n') {\n        monthIdx = 5 // Jun\n      } else if (date[6] === 'l') {\n        monthIdx = 6 // Jul\n      } else {\n        return undefined // Invalid month\n      }\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[4] === 'A')\n  ) {\n    if (date[5] === 'p' && date[6] === 'r') {\n      monthIdx = 3 // Apr\n    } else if (date[5] === 'u' && date[6] === 'g') {\n      monthIdx = 7 // Aug\n    } else {\n      return undefined // Invalid month\n    }\n  } else if (\n    (date[4] === 'S' && date[5] === 'e' && date[6] === 'p')\n  ) {\n    monthIdx = 8 // Sep\n  } else if (\n    (date[4] === 'O' && date[5] === 'c' && date[6] === 't')\n  ) {\n    monthIdx = 9 // Oct\n  } else if (\n    (date[4] === 'N' && date[5] === 'o' && date[6] === 'v')\n  ) {\n    monthIdx = 10 // Nov\n  } else if (\n    (date[4] === 'D' && date[5] === 'e' && date[6] === 'c')\n  ) {\n    monthIdx = 11 // Dec\n  } else {\n    // Not a valid month\n    return undefined\n  }\n\n  let day = 0\n  if (date[8] === ' ') {\n    // Single digit day, e.g. \"Sun Nov 6 08:49:37 1994\"\n    const code = date.charCodeAt(9)\n    if (code < 49 || code > 57) {\n      return undefined // Not a digit\n    }\n    day = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(8)\n    if (code1 < 49 || code1 > 51) {\n      return undefined // Not a digit between 1 and 3\n    }\n    const code2 = date.charCodeAt(9)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    day = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let hour = 0\n  if (date[11] === '0') {\n    const code = date.charCodeAt(12)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    hour = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(11)\n    if (code1 < 48 || code1 > 50) {\n      return undefined // Not a digit between 0 and 2\n    }\n    const code2 = date.charCodeAt(12)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    if (code1 === 50 && code2 > 51) {\n      return undefined // Hour cannot be greater than 23\n    }\n    hour = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let minute = 0\n  if (date[14] === '0') {\n    const code = date.charCodeAt(15)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    minute = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(14)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(15)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    minute = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let second = 0\n  if (date[17] === '0') {\n    const code = date.charCodeAt(18)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    second = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(17)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(18)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    second = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  const yearDigit1 = date.charCodeAt(20)\n  if (yearDigit1 < 48 || yearDigit1 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit2 = date.charCodeAt(21)\n  if (yearDigit2 < 48 || yearDigit2 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit3 = date.charCodeAt(22)\n  if (yearDigit3 < 48 || yearDigit3 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit4 = date.charCodeAt(23)\n  if (yearDigit4 < 48 || yearDigit4 > 57) {\n    return undefined // Not a digit\n  }\n  const year = (yearDigit1 - 48) * 1000 + (yearDigit2 - 48) * 100 + (yearDigit3 - 48) * 10 + (yearDigit4 - 48)\n\n  return makeDate(year, monthIdx, day, hour, minute, second, weekday)\n}\n\n/**\n * @see https://httpwg.org/specs/rfc9110.html#obsolete.date.formats\n *\n * @param {string} date\n * @returns {Date | undefined}\n */\nfunction parseRfc850Date (date) {\n  let commaIndex = -1\n\n  let weekday = -1\n  if (date[0] === 'S') {\n    if (date[1] === 'u' && date[2] === 'n' && date[3] === 'd' && date[4] === 'a' && date[5] === 'y') {\n      weekday = 0 // Sunday\n      commaIndex = 6\n    } else if (date[1] === 'a' && date[2] === 't' && date[3] === 'u' && date[4] === 'r' && date[5] === 'd' && date[6] === 'a' && date[7] === 'y') {\n      weekday = 6 // Saturday\n      commaIndex = 8\n    }\n  } else if (date[0] === 'M' && date[1] === 'o' && date[2] === 'n' && date[3] === 'd' && date[4] === 'a' && date[5] === 'y') {\n    weekday = 1 // Monday\n    commaIndex = 6\n  } else if (date[0] === 'T') {\n    if (date[1] === 'u' && date[2] === 'e' && date[3] === 's' && date[4] === 'd' && date[5] === 'a' && date[6] === 'y') {\n      weekday = 2 // Tuesday\n      commaIndex = 7\n    } else if (date[1] === 'h' && date[2] === 'u' && date[3] === 'r' && date[4] === 's' && date[5] === 'd' && date[6] === 'a' && date[7] === 'y') {\n      weekday = 4 // Thursday\n      commaIndex = 8\n    }\n  } else if (date[0] === 'W' && date[1] === 'e' && date[2] === 'd' && date[3] === 'n' && date[4] === 'e' && date[5] === 's' && date[6] === 'd' && date[7] === 'a' && date[8] === 'y') {\n    weekday = 3 // Wednesday\n    commaIndex = 9\n  } else if (date[0] === 'F' && date[1] === 'r' && date[2] === 'i' && date[3] === 'd' && date[4] === 'a' && date[5] === 'y') {\n    weekday = 5 // Friday\n    commaIndex = 6\n  } else {\n    // Not a valid day name\n    return undefined\n  }\n\n  if (\n    date[commaIndex] !== ',' ||\n    (date.length - commaIndex - 1) !== 23 ||\n    date[commaIndex + 1] !== ' ' ||\n    date[commaIndex + 4] !== '-' ||\n    date[commaIndex + 8] !== '-' ||\n    date[commaIndex + 11] !== ' ' ||\n    date[commaIndex + 14] !== ':' ||\n    date[commaIndex + 17] !== ':' ||\n    date[commaIndex + 20] !== ' ' ||\n    date[commaIndex + 21] !== 'G' ||\n    date[commaIndex + 22] !== 'M' ||\n    date[commaIndex + 23] !== 'T'\n  ) {\n    return undefined\n  }\n\n  let day = 0\n  if (date[commaIndex + 2] === '0') {\n    // Single digit day, e.g. \"Sun Nov 6 08:49:37 1994\"\n    const code = date.charCodeAt(commaIndex + 3)\n    if (code < 49 || code > 57) {\n      return undefined // Not a digit\n    }\n    day = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(commaIndex + 2)\n    if (code1 < 49 || code1 > 51) {\n      return undefined // Not a digit between 1 and 3\n    }\n    const code2 = date.charCodeAt(commaIndex + 3)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    day = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let monthIdx = -1\n  if (\n    (date[commaIndex + 5] === 'J' && date[commaIndex + 6] === 'a' && date[commaIndex + 7] === 'n')\n  ) {\n    monthIdx = 0 // Jan\n  } else if (\n    (date[commaIndex + 5] === 'F' && date[commaIndex + 6] === 'e' && date[commaIndex + 7] === 'b')\n  ) {\n    monthIdx = 1 // Feb\n  } else if (\n    (date[commaIndex + 5] === 'M' && date[commaIndex + 6] === 'a' && date[commaIndex + 7] === 'r')\n  ) {\n    monthIdx = 2 // Mar\n  } else if (\n    (date[commaIndex + 5] === 'A' && date[commaIndex + 6] === 'p' && date[commaIndex + 7] === 'r')\n  ) {\n    monthIdx = 3 // Apr\n  } else if (\n    (date[commaIndex + 5] === 'M' && date[commaIndex + 6] === 'a' && date[commaIndex + 7] === 'y')\n  ) {\n    monthIdx = 4 // May\n  } else if (\n    (date[commaIndex + 5] === 'J' && date[commaIndex + 6] === 'u' && date[commaIndex + 7] === 'n')\n  ) {\n    monthIdx = 5 // Jun\n  } else if (\n    (date[commaIndex + 5] === 'J' && date[commaIndex + 6] === 'u' && date[commaIndex + 7] === 'l')\n  ) {\n    monthIdx = 6 // Jul\n  } else if (\n    (date[commaIndex + 5] === 'A' && date[commaIndex + 6] === 'u' && date[commaIndex + 7] === 'g')\n  ) {\n    monthIdx = 7 // Aug\n  } else if (\n    (date[commaIndex + 5] === 'S' && date[commaIndex + 6] === 'e' && date[commaIndex + 7] === 'p')\n  ) {\n    monthIdx = 8 // Sep\n  } else if (\n    (date[commaIndex + 5] === 'O' && date[commaIndex + 6] === 'c' && date[commaIndex + 7] === 't')\n  ) {\n    monthIdx = 9 // Oct\n  } else if (\n    (date[commaIndex + 5] === 'N' && date[commaIndex + 6] === 'o' && date[commaIndex + 7] === 'v')\n  ) {\n    monthIdx = 10 // Nov\n  } else if (\n    (date[commaIndex + 5] === 'D' && date[commaIndex + 6] === 'e' && date[commaIndex + 7] === 'c')\n  ) {\n    monthIdx = 11 // Dec\n  } else {\n    // Not a valid month\n    return undefined\n  }\n\n  const yearDigit1 = date.charCodeAt(commaIndex + 9)\n  if (yearDigit1 < 48 || yearDigit1 > 57) {\n    return undefined // Not a digit\n  }\n  const yearDigit2 = date.charCodeAt(commaIndex + 10)\n  if (yearDigit2 < 48 || yearDigit2 > 57) {\n    return undefined // Not a digit\n  }\n\n  let year = (yearDigit1 - 48) * 10 + (yearDigit2 - 48) // Convert ASCII codes to number\n\n  // RFC 6265 states that the year is in the range 1970-2069.\n  // @see https://datatracker.ietf.org/doc/html/rfc6265#section-5.1.1\n  //\n  // 3. If the year-value is greater than or equal to 70 and less than or\n  //    equal to 99, increment the year-value by 1900.\n  // 4. If the year-value is greater than or equal to 0 and less than or\n  //    equal to 69, increment the year-value by 2000.\n  year += year < 70 ? 2000 : 1900\n\n  let hour = 0\n  if (date[commaIndex + 12] === '0') {\n    const code = date.charCodeAt(commaIndex + 13)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    hour = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(commaIndex + 12)\n    if (code1 < 48 || code1 > 50) {\n      return undefined // Not a digit between 0 and 2\n    }\n    const code2 = date.charCodeAt(commaIndex + 13)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    if (code1 === 50 && code2 > 51) {\n      return undefined // Hour cannot be greater than 23\n    }\n    hour = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let minute = 0\n  if (date[commaIndex + 15] === '0') {\n    const code = date.charCodeAt(commaIndex + 16)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    minute = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(commaIndex + 15)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(commaIndex + 16)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    minute = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  let second = 0\n  if (date[commaIndex + 18] === '0') {\n    const code = date.charCodeAt(commaIndex + 19)\n    if (code < 48 || code > 57) {\n      return undefined // Not a digit\n    }\n    second = code - 48 // Convert ASCII code to number\n  } else {\n    const code1 = date.charCodeAt(commaIndex + 18)\n    if (code1 < 48 || code1 > 53) {\n      return undefined // Not a digit between 0 and 5\n    }\n    const code2 = date.charCodeAt(commaIndex + 19)\n    if (code2 < 48 || code2 > 57) {\n      return undefined // Not a digit\n    }\n    second = (code1 - 48) * 10 + (code2 - 48) // Convert ASCII codes to number\n  }\n\n  return makeDate(year, monthIdx, day, hour, minute, second, weekday)\n}\n\nmodule.exports = {\n  parseHttpDate\n}\n", "'use strict'\n\nconst util = require('../core/util')\nconst {\n  parseCacheControlHeader,\n  hasInvalidCacheControlDirective,\n  parseVaryHeader,\n  hasVaryStar,\n  isInvalidOrWildcardVaryHeader,\n  isEtagUsable\n} = require('../util/cache')\nconst { parseHttpDate } = require('../util/date.js')\n\nfunction noop () {}\n\n// Status codes that we can use some heuristics on to cache\nconst HEURISTICALLY_CACHEABLE_STATUS_CODES = [\n  200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414, 501\n]\n\n// Status codes which semantic is not handled by the cache\n// https://datatracker.ietf.org/doc/html/rfc9111#section-3\n// This list should not grow beyond 206 unless the RFC is updated\n// by a newer one including more. Please introduce another list if\n// implementing caching of responses with the 'must-understand' directive.\nconst NOT_UNDERSTOOD_STATUS_CODES = [\n  206\n]\n\nconst MAX_RESPONSE_AGE = 2147483647000\n\nfunction trimOWS (value) {\n  return value.replace(/^[\\t ]+|[\\t ]+$/g, '')\n}\n\nfunction arrayIncludes (array, value) {\n  for (let i = 0; i < array.length; i++) {\n    if (array[i] === value) {\n      return true\n    }\n  }\n\n  return false\n}\n\nfunction appendConnectionHeaderTokens (headersToRemove, connectionHeader) {\n  const values = Array.isArray(connectionHeader) ? connectionHeader : [connectionHeader]\n\n  for (let i = 0; i < values.length; i++) {\n    const tokens = values[i].split(',')\n    for (let j = 0; j < tokens.length; j++) {\n      headersToRemove.push(trimOWS(tokens[j]).toLowerCase())\n    }\n  }\n}\n\nfunction getSameOriginPath (cacheKey, location) {\n  if (typeof location !== 'string') {\n    return undefined\n  }\n\n  let originUrl\n  let requestUrl\n  let locationUrl\n  try {\n    originUrl = new URL(cacheKey.origin)\n    requestUrl = new URL(cacheKey.path, originUrl)\n    locationUrl = new URL(location, requestUrl)\n  } catch {\n    return undefined\n  }\n\n  if (locationUrl.origin !== originUrl.origin) {\n    return undefined\n  }\n\n  return locationUrl.pathname + locationUrl.search\n}\n\nfunction deleteCachedUri (store, cacheKey, path) {\n  deleteCachedValue(store, {\n    ...cacheKey,\n    path\n  })\n\n  for (let i = 0; i < util.safeHTTPMethods.length; i++) {\n    const method = util.safeHTTPMethods[i]\n    if (method !== cacheKey.method) {\n      deleteCachedValue(store, {\n        ...cacheKey,\n        method,\n        path\n      })\n    }\n  }\n}\n\nfunction deleteLocationTargets (store, cacheKey, headerValue) {\n  if (headerValue === undefined) {\n    return\n  }\n\n  const values = Array.isArray(headerValue) ? headerValue : [headerValue]\n  for (let i = 0; i < values.length; i++) {\n    const path = getSameOriginPath(cacheKey, values[i])\n    if (path !== undefined) {\n      deleteCachedUri(store, cacheKey, path)\n    }\n  }\n}\n\nfunction invalidateUnsafeRequest (store, cacheKey, resHeaders) {\n  deleteCachedUri(store, cacheKey, cacheKey.path)\n  deleteLocationTargets(store, cacheKey, resHeaders.location)\n  deleteLocationTargets(store, cacheKey, resHeaders['content-location'])\n}\n\n/**\n * @typedef {import('../../types/dispatcher.d.ts').default.DispatchHandler} DispatchHandler\n *\n * @implements {DispatchHandler}\n */\nclass CacheHandler {\n  /**\n   * @type {import('../../types/cache-interceptor.d.ts').default.CacheKey}\n   */\n  #cacheKey\n\n  /**\n   * @type {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions['type']}\n   */\n  #cacheType\n\n  /**\n   * @type {number | undefined}\n   */\n  #cacheByDefault\n\n  /**\n   * @type {import('../../types/cache-interceptor.d.ts').default.CacheStore}\n   */\n  #store\n\n  /**\n   * @type {import('../../types/dispatcher.d.ts').default.DispatchHandler}\n   */\n  #handler\n\n  /**\n   * @type {import('node:stream').Writable | undefined}\n   */\n  #writeStream\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions} opts\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n   */\n  constructor ({ store, type, cacheByDefault }, cacheKey, handler) {\n    this.#store = store\n    this.#cacheType = type\n    this.#cacheByDefault = cacheByDefault\n    this.#cacheKey = cacheKey\n    this.#handler = handler\n  }\n\n  onRequestStart (controller, context) {\n    this.#writeStream?.destroy()\n    this.#writeStream = undefined\n    this.#handler.onRequestStart?.(controller, context)\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.#handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {number} statusCode\n   * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n   * @param {string} statusMessage\n   */\n  onResponseStart (\n    controller,\n    statusCode,\n    resHeaders,\n    statusMessage\n  ) {\n    const downstreamOnHeaders = () =>\n      this.#handler.onResponseStart?.(\n        controller,\n        statusCode,\n        resHeaders,\n        statusMessage\n      )\n    const handler = this\n\n    if (\n      !arrayIncludes(util.safeHTTPMethods, this.#cacheKey.method) &&\n      statusCode >= 200 &&\n      statusCode <= 399\n    ) {\n      // Successful response to an unsafe method, delete it from cache\n      //  https://www.rfc-editor.org/rfc/rfc9111.html#name-invalidating-stored-response\n      invalidateUnsafeRequest(this.#store, this.#cacheKey, resHeaders)\n      return downstreamOnHeaders()\n    }\n\n    const cacheControlHeader = resHeaders['cache-control']\n    const cacheControlDirectives = cacheControlHeader ? parseCacheControlHeader(cacheControlHeader) : {}\n\n    if (revalidationResponseDisallowsCachedReuse(this.#cacheType, resHeaders, cacheControlDirectives)) {\n      deleteCachedValue(this.#store, this.#cacheKey)\n      return downstreamOnHeaders()\n    }\n\n    const heuristicallyCacheable = resHeaders['last-modified'] && arrayIncludes(HEURISTICALLY_CACHEABLE_STATUS_CODES, statusCode)\n    if (\n      !cacheControlHeader &&\n      !resHeaders['expires'] &&\n      !heuristicallyCacheable &&\n      !this.#cacheByDefault\n    ) {\n      if (statusCode === 304 && resHeaders.vary && isInvalidOrWildcardVaryHeader(resHeaders.vary)) {\n        deleteCachedValue(this.#store, this.#cacheKey)\n      }\n\n      // Don't have anything to tell us this response is cachable and we're not\n      //  caching by default\n      return downstreamOnHeaders()\n    }\n\n    if (!canCacheResponse(this.#cacheType, this.#cacheKey.method, statusCode, resHeaders, cacheControlDirectives, this.#cacheKey.headers)) {\n      if (statusCode === 304 && (cacheControlHeader || revalidationResponseDisallowsCachedReuse(this.#cacheType, resHeaders, cacheControlDirectives))) {\n        deleteCachedValue(this.#store, this.#cacheKey)\n      }\n\n      return downstreamOnHeaders()\n    }\n\n    const now = Date.now()\n    const resAge = Object.hasOwn(resHeaders, 'age') ? getAge(resHeaders.age) : undefined\n    if (resAge !== undefined && resAge >= MAX_RESPONSE_AGE) {\n      // Response considered stale\n      deleteCachedValueIfNotModified(statusCode, this.#store, this.#cacheKey)\n      return downstreamOnHeaders()\n    }\n\n    const resDate = Object.hasOwn(resHeaders, 'date') ? getDate(resHeaders.date) : undefined\n    if (resDate === null) {\n      deleteCachedValueIfNotModified(statusCode, this.#store, this.#cacheKey)\n      return downstreamOnHeaders()\n    }\n\n    const apparentAge = resDate ? Math.max(0, now - resDate.getTime()) : 0\n    const currentAge = Math.max(apparentAge, resAge ?? 0)\n\n    const staleAt =\n      determineStaleAt(this.#cacheType, now, resAge, resHeaders, resDate, cacheControlDirectives) ??\n      this.#cacheByDefault\n    if (staleAt === undefined || currentAge >= staleAt) {\n      if (cacheControlHeader || staleAt !== undefined) {\n        deleteCachedValueIfNotModified(statusCode, this.#store, this.#cacheKey)\n      }\n\n      return downstreamOnHeaders()\n    }\n\n    const baseTime = now - currentAge\n    const absoluteStaleAt = staleAt + baseTime\n    if (now >= absoluteStaleAt) {\n      // Response is already stale\n      deleteCachedValueIfNotModified(statusCode, this.#store, this.#cacheKey)\n      return downstreamOnHeaders()\n    }\n\n    let varyDirectives\n    if (this.#cacheKey.headers && resHeaders.vary) {\n      varyDirectives = parseVaryHeader(resHeaders.vary, this.#cacheKey.headers)\n      if (!varyDirectives) {\n        // Parse error\n        return downstreamOnHeaders()\n      }\n    }\n\n    const cachedAt = baseTime\n    const deleteAt = determineDeleteAt(baseTime, now, cacheControlDirectives, absoluteStaleAt)\n    const strippedHeaders = stripNecessaryHeaders(resHeaders, cacheControlDirectives)\n\n    /**\n     * @type {import('../../types/cache-interceptor.d.ts').default.CacheValue}\n     */\n    const value = {\n      statusCode,\n      statusMessage,\n      headers: strippedHeaders,\n      vary: varyDirectives,\n      cacheControlDirectives,\n      cachedAt,\n      staleAt: absoluteStaleAt,\n      deleteAt\n    }\n\n    // Not modified, re-use the cached value\n    // https://www.rfc-editor.org/rfc/rfc9111.html#name-handling-304-not-modified\n    if (statusCode === 304) {\n      const handle304 = (cachedValue) => {\n        if (!cachedValue) {\n          // Do not create a new cache entry, as a 304 won't have a body - so cannot be cached.\n          return downstreamOnHeaders()\n        }\n\n        // Re-use the cached value: statuscode, statusmessage, headers and body\n        value.statusCode = cachedValue.statusCode\n        value.statusMessage = cachedValue.statusMessage\n        value.etag = cachedValue.etag\n        value.vary = varyDirectives ?? cachedValue.vary\n        value.headers = { ...cachedValue.headers, ...strippedHeaders }\n\n        downstreamOnHeaders()\n\n        this.#writeStream = this.#store.createWriteStream(this.#cacheKey, value)\n\n        if (!this.#writeStream || !cachedValue?.body) {\n          return\n        }\n\n        if (typeof cachedValue.body.values === 'function') {\n          const bodyIterator = cachedValue.body.values()\n\n          const streamCachedBody = () => {\n            for (const chunk of bodyIterator) {\n              const full = this.#writeStream.write(chunk) === false\n              this.#handler.onResponseData?.(controller, chunk)\n              // when stream is full stop writing until we get a 'drain' event\n              if (full) {\n                break\n              }\n            }\n          }\n\n          this.#writeStream\n            .on('error', function () {\n              handler.#writeStream = undefined\n              handler.#store.delete(handler.#cacheKey)\n            })\n            .on('drain', () => {\n              streamCachedBody()\n            })\n            .on('close', function () {\n              if (handler.#writeStream === this) {\n                handler.#writeStream = undefined\n              }\n            })\n\n          streamCachedBody()\n        } else if (typeof cachedValue.body.on === 'function') {\n          // Readable stream body (e.g. from async/remote cache stores)\n          cachedValue.body\n            .on('data', (chunk) => {\n              this.#writeStream.write(chunk)\n              this.#handler.onResponseData?.(controller, chunk)\n            })\n            .on('end', () => {\n              this.#writeStream.end()\n            })\n            .on('error', () => {\n              this.#writeStream = undefined\n              this.#store.delete(this.#cacheKey)\n            })\n\n          this.#writeStream\n            .on('error', function () {\n              handler.#writeStream = undefined\n              handler.#store.delete(handler.#cacheKey)\n            })\n            .on('close', function () {\n              if (handler.#writeStream === this) {\n                handler.#writeStream = undefined\n              }\n            })\n        }\n      }\n\n      /**\n       * @type {import('../../types/cache-interceptor.d.ts').default.CacheValue}\n       */\n      const result = this.#store.get(this.#cacheKey)\n      if (result && typeof result.then === 'function') {\n        result.then(handle304)\n      } else {\n        handle304(result)\n      }\n    } else {\n      if (typeof resHeaders.etag === 'string' && isEtagUsable(resHeaders.etag)) {\n        value.etag = resHeaders.etag\n      }\n\n      this.#writeStream = this.#store.createWriteStream(this.#cacheKey, value)\n\n      if (!this.#writeStream) {\n        return downstreamOnHeaders()\n      }\n\n      this.#writeStream\n        .on('drain', () => controller.resume())\n        .on('error', function () {\n          // TODO (fix): Make error somehow observable?\n          handler.#writeStream = undefined\n\n          // Delete the value in case the cache store is holding onto state from\n          //  the call to createWriteStream\n          handler.#store.delete(handler.#cacheKey)\n        })\n        .on('close', function () {\n          if (handler.#writeStream === this) {\n            handler.#writeStream = undefined\n          }\n\n          // TODO (fix): Should we resume even if was paused downstream?\n          controller.resume()\n        })\n\n      downstreamOnHeaders()\n    }\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.#writeStream?.write(chunk) === false) {\n      controller.pause()\n    }\n\n    this.#handler.onResponseData?.(controller, chunk)\n  }\n\n  onResponseEnd (controller, trailers) {\n    this.#writeStream?.end()\n    this.#handler.onResponseEnd?.(controller, trailers)\n  }\n\n  onResponseError (controller, err) {\n    this.#writeStream?.destroy(err)\n    this.#writeStream = undefined\n    this.#handler.onResponseError?.(controller, err)\n  }\n}\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheStore} store\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n */\nfunction deleteCachedValue (store, cacheKey) {\n  try {\n    store.delete(cacheKey)?.catch?.(noop)\n  } catch {\n    // Fail silently\n  }\n}\n\nfunction deleteCachedValueIfNotModified (statusCode, store, cacheKey) {\n  if (statusCode === 304) {\n    deleteCachedValue(store, cacheKey)\n  }\n}\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions['type']} cacheType\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n * @returns {boolean}\n */\nfunction revalidationResponseDisallowsCachedReuse (cacheType, resHeaders, cacheControlDirectives) {\n  return cacheControlDirectives['no-store'] === true ||\n    (cacheType === 'shared' && (\n      cacheControlDirectives.private === true ||\n      Object.hasOwn(resHeaders, 'set-cookie')\n    )) ||\n    (resHeaders.vary ? isInvalidOrWildcardVaryHeader(resHeaders.vary) : false)\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc9111.html#name-storing-responses-to-authen\n *\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions['type']} cacheType\n * @param {string} method\n * @param {number} statusCode\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} [reqHeaders]\n */\nfunction canCacheResponse (cacheType, method, statusCode, resHeaders, cacheControlDirectives, reqHeaders) {\n  if (!arrayIncludes(util.safeHTTPMethods, method)) {\n    return false\n  }\n  // Status code must be final and understood.\n  if (statusCode < 200 || arrayIncludes(NOT_UNDERSTOOD_STATUS_CODES, statusCode)) {\n    return false\n  }\n  // Responses with neither status codes that are heuristically cacheable, nor \"explicit enough\" caching\n  // directives, are not cacheable. \"Explicit enough\": see https://www.rfc-editor.org/rfc/rfc9111.html#section-3\n  if (!arrayIncludes(HEURISTICALLY_CACHEABLE_STATUS_CODES, statusCode) && !resHeaders['expires'] &&\n    !cacheControlDirectives.public &&\n    cacheControlDirectives['max-age'] === undefined &&\n    // RFC 9111: a private response directive, if the cache is not shared\n    !(cacheControlDirectives.private && cacheType === 'private') &&\n    !(cacheControlDirectives['s-maxage'] !== undefined && cacheType === 'shared')\n  ) {\n    return false\n  }\n\n  if (cacheControlDirectives['no-store']) {\n    return false\n  }\n\n  if (cacheType === 'shared' && (\n    cacheControlDirectives.private === true ||\n    Object.hasOwn(resHeaders, 'set-cookie')\n  )) {\n    return false\n  }\n\n  // https://www.rfc-editor.org/rfc/rfc9111.html#section-4.1-5\n  if (resHeaders.vary && hasVaryStar(resHeaders.vary)) {\n    return false\n  }\n\n  // https://www.rfc-editor.org/rfc/rfc9111.html#name-storing-responses-to-authen\n  if (reqHeaders != null && Object.hasOwn(reqHeaders, 'authorization')) {\n    if (\n      !cacheControlDirectives.public &&\n      !cacheControlDirectives['s-maxage'] &&\n      !cacheControlDirectives['must-revalidate']\n    ) {\n      return false\n    }\n\n    if (typeof reqHeaders.authorization !== 'string') {\n      return false\n    }\n\n    if (\n      Array.isArray(cacheControlDirectives['no-cache']) &&\n      arrayIncludes(cacheControlDirectives['no-cache'], 'authorization')\n    ) {\n      return false\n    }\n\n    if (\n      Array.isArray(cacheControlDirectives['private']) &&\n      arrayIncludes(cacheControlDirectives['private'], 'authorization')\n    ) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @param {string | string[]} dateHeader\n * @returns {Date | null | undefined}\n */\nfunction getDate (dateHeader) {\n  let dateValue = dateHeader\n  if (Array.isArray(dateValue)) {\n    if (dateValue.length !== 1) {\n      return null\n    }\n\n    dateValue = dateValue[0]\n  }\n\n  if (typeof dateValue !== 'string') {\n    return null\n  }\n\n  return parseHttpDate(dateValue)\n}\n\n/**\n * @param {string | string[]} ageHeader\n * @returns {number | undefined}\n */\nfunction getAge (ageHeader) {\n  let ageValue = ageHeader\n  if (Array.isArray(ageValue)) {\n    if (ageValue.length !== 1) {\n      return MAX_RESPONSE_AGE\n    }\n\n    ageValue = ageValue[0]\n  }\n\n  if (typeof ageValue !== 'string' || !/^[\\t ]*[0-9]+[\\t ]*$/.test(ageValue)) {\n    return MAX_RESPONSE_AGE\n  }\n\n  const age = BigInt(ageValue.replace(/^[\\t ]+|[\\t ]+$/g, ''))\n  if (age >= BigInt(MAX_RESPONSE_AGE / 1000)) {\n    return MAX_RESPONSE_AGE\n  }\n\n  return Number(age) * 1000\n}\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions['type']} cacheType\n * @param {number} now\n * @param {number | undefined} age\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n * @param {Date | undefined} responseDate\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n *\n * @returns {number | undefined} time that the value is stale at in seconds or undefined if it shouldn't be cached\n */\nfunction determineStaleAt (cacheType, now, age, resHeaders, responseDate, cacheControlDirectives) {\n  if (cacheType === 'shared') {\n    // Prioritize s-maxage since we're a shared cache\n    //  s-maxage > max-age > Expire\n    //  https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.2.10-3\n    if (hasInvalidCacheControlDirective(cacheControlDirectives, 's-maxage')) {\n      return 0\n    }\n\n    const sMaxAge = cacheControlDirectives['s-maxage']\n    if (sMaxAge !== undefined) {\n      return sMaxAge * 1000\n    }\n  }\n\n  if (hasInvalidCacheControlDirective(cacheControlDirectives, 'max-age')) {\n    return 0\n  }\n\n  const maxAge = cacheControlDirectives['max-age']\n  if (maxAge !== undefined) {\n    return maxAge * 1000\n  }\n\n  if (Object.hasOwn(resHeaders, 'expires')) {\n    // https://www.rfc-editor.org/rfc/rfc9111.html#section-5.3\n    if (typeof resHeaders.expires !== 'string') {\n      return 0\n    }\n\n    const expiresDate = parseHttpDate(resHeaders.expires)\n    if (!expiresDate) {\n      return 0\n    }\n\n    if (now >= expiresDate.getTime()) {\n      return 0\n    }\n\n    if (responseDate) {\n      if (responseDate >= expiresDate) {\n        return 0\n      }\n\n      const freshnessLifetime = expiresDate.getTime() - responseDate.getTime()\n      if (age !== undefined && age >= freshnessLifetime) {\n        return 0\n      }\n\n      return freshnessLifetime\n    }\n\n    return expiresDate.getTime() - now\n  }\n\n  if (typeof resHeaders['last-modified'] === 'string') {\n    // https://www.rfc-editor.org/rfc/rfc9111.html#name-calculating-heuristic-fresh\n    const lastModified = parseHttpDate(resHeaders['last-modified'])\n    if (lastModified) {\n      if (lastModified.getTime() >= now) {\n        return undefined\n      }\n\n      const responseAge = now - lastModified.getTime()\n\n      return responseAge * 0.1\n    }\n  }\n\n  if (cacheControlDirectives.immutable) {\n    // https://www.rfc-editor.org/rfc/rfc8246.html#section-2.2\n    return 31536000000\n  }\n\n  return undefined\n}\n\n/**\n * @param {number} baseTime\n * @param {number} cachedAt\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n * @param {number} staleAt\n */\nfunction determineDeleteAt (baseTime, cachedAt, cacheControlDirectives, staleAt) {\n  let staleWhileRevalidate = -Infinity\n  let staleIfError = -Infinity\n  let immutable = -Infinity\n\n  if (cacheControlDirectives['stale-while-revalidate']) {\n    staleWhileRevalidate = staleAt + (cacheControlDirectives['stale-while-revalidate'] * 1000)\n  }\n\n  if (cacheControlDirectives['stale-if-error']) {\n    staleIfError = staleAt + (cacheControlDirectives['stale-if-error'] * 1000)\n  }\n\n  if (cacheControlDirectives.immutable && staleWhileRevalidate === -Infinity && staleIfError === -Infinity) {\n    immutable = cachedAt + 31536000000\n  }\n\n  // When no stale directives or immutable flag, add a revalidation buffer\n  // equal to the freshness lifetime so the entry survives past staleAt long\n  // enough to be revalidated instead of silently disappearing.\n  //\n  // Response Date headers only have second precision, so baseTime can trail the\n  // actual cache insertion time by up to ~1s. Pad the buffer by that bounded\n  // skew so short-lived entries do not disappear exactly when they should be\n  // revalidated.\n  if (staleWhileRevalidate === -Infinity && staleIfError === -Infinity && immutable === -Infinity) {\n    const freshnessLifetime = staleAt - baseTime\n    const datePrecisionPadding = Math.min(Math.max(cachedAt - baseTime, 0), 1000)\n    return staleAt + freshnessLifetime + datePrecisionPadding\n  }\n\n  return Math.max(staleAt, staleWhileRevalidate, staleIfError, immutable)\n}\n\n/**\n * Strips headers required to be removed in cached responses\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n * @returns {Record<string, string | string []>}\n */\nfunction stripNecessaryHeaders (resHeaders, cacheControlDirectives) {\n  const headersToRemove = [\n    'connection',\n    'proxy-authenticate',\n    'proxy-authentication-info',\n    'proxy-authorization',\n    'proxy-connection',\n    'te',\n    'transfer-encoding',\n    'upgrade',\n    // We'll add age back when serving it\n    'age'\n  ]\n\n  if (resHeaders['connection']) {\n    appendConnectionHeaderTokens(headersToRemove, resHeaders['connection'])\n  }\n\n  if (Array.isArray(cacheControlDirectives['no-cache'])) {\n    headersToRemove.push(...cacheControlDirectives['no-cache'])\n  }\n\n  if (Array.isArray(cacheControlDirectives['private'])) {\n    headersToRemove.push(...cacheControlDirectives['private'])\n  }\n\n  let strippedHeaders\n  for (const headerName of headersToRemove) {\n    if (Object.hasOwn(resHeaders, headerName)) {\n      strippedHeaders ??= { ...resHeaders }\n      delete strippedHeaders[headerName]\n    }\n  }\n\n  return strippedHeaders ?? resHeaders\n}\n\nmodule.exports = CacheHandler\n", "'use strict'\n\nconst { Writable } = require('node:stream')\nconst { EventEmitter } = require('node:events')\nconst { assertCacheKey, assertCacheValue } = require('../util/cache.js')\n\n/**\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheKey} CacheKey\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheValue} CacheValue\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheStore} CacheStore\n * @typedef {import('../../types/cache-interceptor.d.ts').default.GetResult} GetResult\n */\n\n/**\n * @implements {CacheStore}\n * @extends {EventEmitter}\n */\nclass MemoryCacheStore extends EventEmitter {\n  #maxCount = 1024\n  #maxSize = 104857600 // 100MB\n  #maxEntrySize = 5242880 // 5MB\n\n  #size = 0\n  #count = 0\n  #entries = new Map()\n  #hasEmittedMaxSizeEvent = false\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.MemoryCacheStoreOpts | undefined} [opts]\n   */\n  constructor (opts) {\n    super()\n    if (opts) {\n      if (typeof opts !== 'object') {\n        throw new TypeError('MemoryCacheStore options must be an object')\n      }\n\n      if (opts.maxCount !== undefined) {\n        if (\n          typeof opts.maxCount !== 'number' ||\n          !Number.isInteger(opts.maxCount) ||\n          opts.maxCount < 0\n        ) {\n          throw new TypeError('MemoryCacheStore options.maxCount must be a non-negative integer')\n        }\n        this.#maxCount = opts.maxCount\n      }\n\n      if (opts.maxSize !== undefined) {\n        if (\n          typeof opts.maxSize !== 'number' ||\n          !Number.isInteger(opts.maxSize) ||\n          opts.maxSize < 0\n        ) {\n          throw new TypeError('MemoryCacheStore options.maxSize must be a non-negative integer')\n        }\n        this.#maxSize = opts.maxSize\n      }\n\n      if (opts.maxEntrySize !== undefined) {\n        if (\n          typeof opts.maxEntrySize !== 'number' ||\n          !Number.isInteger(opts.maxEntrySize) ||\n          opts.maxEntrySize < 0\n        ) {\n          throw new TypeError('MemoryCacheStore options.maxEntrySize must be a non-negative integer')\n        }\n        this.#maxEntrySize = opts.maxEntrySize\n      }\n    }\n  }\n\n  /**\n   * Get the current size of the cache in bytes\n   * @returns {number} The current size of the cache in bytes\n   */\n  get size () {\n    return this.#size\n  }\n\n  /**\n   * Check if the cache is full (either max size or max count reached)\n   * @returns {boolean} True if the cache is full, false otherwise\n   */\n  isFull () {\n    return this.#size >= this.#maxSize || this.#count >= this.#maxCount\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} req\n   * @returns {import('../../types/cache-interceptor.d.ts').default.GetResult | undefined}\n   */\n  get (key) {\n    assertCacheKey(key)\n\n    const topLevelKey = `${key.origin}:${key.path}`\n\n    const now = Date.now()\n    const entries = this.#entries.get(topLevelKey)\n\n    const entry = entries ? findEntry(key, entries, now) : null\n\n    return entry == null\n      ? undefined\n      : {\n          statusMessage: entry.statusMessage,\n          statusCode: entry.statusCode,\n          headers: entry.headers,\n          body: entry.body,\n          vary: entry.vary ? entry.vary : undefined,\n          etag: entry.etag,\n          cacheControlDirectives: entry.cacheControlDirectives,\n          cachedAt: entry.cachedAt,\n          staleAt: entry.staleAt,\n          deleteAt: entry.deleteAt\n        }\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheValue} val\n   * @returns {Writable | undefined}\n   */\n  createWriteStream (key, val) {\n    assertCacheKey(key)\n    assertCacheValue(val)\n\n    const topLevelKey = `${key.origin}:${key.path}`\n\n    const store = this\n    const entry = { ...key, ...val, body: [], size: 0 }\n\n    return new Writable({\n      write (chunk, encoding, callback) {\n        if (typeof chunk === 'string') {\n          chunk = Buffer.from(chunk, encoding)\n        }\n\n        entry.size += chunk.byteLength\n\n        if (entry.size >= store.#maxEntrySize) {\n          this.destroy()\n        } else {\n          entry.body.push(chunk)\n        }\n\n        callback(null)\n      },\n      final (callback) {\n        let entries = store.#entries.get(topLevelKey)\n        if (!entries) {\n          entries = []\n          store.#entries.set(topLevelKey, entries)\n        }\n        const previousEntry = findEntry(key, entries, Date.now())\n        if (previousEntry) {\n          const index = entries.indexOf(previousEntry)\n          entries.splice(index, 1, entry)\n          store.#size -= previousEntry.size\n        } else {\n          entries.push(entry)\n          store.#count += 1\n        }\n\n        store.#size += entry.size\n\n        // Check if cache is full and emit event if needed\n        if (store.#size > store.#maxSize || store.#count > store.#maxCount) {\n          // Emit maxSizeExceeded event if we haven't already\n          if (!store.#hasEmittedMaxSizeEvent) {\n            store.emit('maxSizeExceeded', {\n              size: store.#size,\n              maxSize: store.#maxSize,\n              count: store.#count,\n              maxCount: store.#maxCount\n            })\n            store.#hasEmittedMaxSizeEvent = true\n          }\n\n          // Perform eviction\n          for (const [key, entries] of store.#entries) {\n            for (const entry of entries.splice(0, entries.length / 2)) {\n              store.#size -= entry.size\n              store.#count -= 1\n            }\n            if (entries.length === 0) {\n              store.#entries.delete(key)\n            }\n          }\n\n          // Reset the event flag after eviction\n          if (store.#size < store.#maxSize && store.#count < store.#maxCount) {\n            store.#hasEmittedMaxSizeEvent = false\n          }\n        }\n\n        callback(null)\n      }\n    })\n  }\n\n  /**\n   * @param {CacheKey} key\n   */\n  delete (key) {\n    if (typeof key !== 'object') {\n      throw new TypeError(`expected key to be object, got ${typeof key}`)\n    }\n\n    const topLevelKey = `${key.origin}:${key.path}`\n\n    for (const entry of this.#entries.get(topLevelKey) ?? []) {\n      this.#size -= entry.size\n      this.#count -= 1\n    }\n    this.#entries.delete(topLevelKey)\n  }\n}\n\nfunction findEntry (key, entries, now) {\n  for (let i = 0; i < entries.length; i++) {\n    const entry = entries[i]\n    if (\n      entry.deleteAt > now &&\n      entry.method === key.method &&\n      varyMatches(key, entry)\n    ) {\n      return entry\n    }\n  }\n}\n\nfunction varyMatches (key, entry) {\n  if (entry.vary == null) {\n    return true\n  }\n\n  for (const headerName in entry.vary) {\n    if (Object.hasOwn(entry.vary, headerName) && !headerValueEquals(key.headers?.[headerName], entry.vary[headerName])) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @param {string|string[]|null|undefined} lhs\n * @param {string|string[]|null|undefined} rhs\n * @returns {boolean}\n */\nfunction headerValueEquals (lhs, rhs) {\n  if (lhs == null && rhs == null) {\n    return true\n  }\n\n  if ((lhs == null && rhs != null) ||\n      (lhs != null && rhs == null)) {\n    return false\n  }\n\n  if (Array.isArray(lhs) && Array.isArray(rhs)) {\n    if (lhs.length !== rhs.length) {\n      return false\n    }\n\n    for (let i = 0; i < lhs.length; i++) {\n      if (lhs[i] !== rhs[i]) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  return lhs === rhs\n}\n\nmodule.exports = MemoryCacheStore\n", "'use strict'\n\nconst assert = require('node:assert')\n\n/**\n * This takes care of revalidation requests we send to the origin. If we get\n *  a response indicating that what we have is cached (via a HTTP 304), we can\n *  continue using the cached value. Otherwise, we'll receive the new response\n *  here, which we then just pass on to the next handler (most likely a\n *  CacheHandler). Note that this assumes the proper headers were already\n *  included in the request to tell the origin that we want to revalidate the\n *  response (i.e. if-modified-since or if-none-match).\n *\n * @see https://www.rfc-editor.org/rfc/rfc9111.html#name-validation\n *\n * @implements {import('../../types/dispatcher.d.ts').default.DispatchHandler}\n */\nclass CacheRevalidationHandler {\n  #successful = false\n\n  /**\n   * @type {((success: boolean, context?: any, statusCode?: number, headers?: import('../../types/header.d.ts').IncomingHttpHeaders) => void) | null}\n   */\n  #callback\n\n  /**\n   * @type {(import('../../types/dispatcher.d.ts').default.DispatchHandler)}\n   */\n  #handler\n\n  #context\n\n  /**\n   * @type {boolean}\n   */\n  #allowErrorStatusCodes\n\n  /**\n   * @param {(success: boolean, context?: any, statusCode?: number, headers?: import('../../types/header.d.ts').IncomingHttpHeaders) => void} callback Function to call if the cached value is valid\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchHandlers} handler\n   * @param {boolean} allowErrorStatusCodes\n   */\n  constructor (callback, handler, allowErrorStatusCodes) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function')\n    }\n\n    this.#callback = callback\n    this.#handler = handler\n    this.#allowErrorStatusCodes = allowErrorStatusCodes\n  }\n\n  onRequestStart (_, context) {\n    this.#successful = false\n    this.#context = context\n  }\n\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.#handler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  onResponseStart (\n    controller,\n    statusCode,\n    headers,\n    statusMessage\n  ) {\n    assert(this.#callback != null)\n\n    // https://www.rfc-editor.org/rfc/rfc9111.html#name-handling-a-validation-respo\n    // https://datatracker.ietf.org/doc/html/rfc5861#section-4\n    this.#successful = statusCode === 304 ||\n      (this.#allowErrorStatusCodes && statusCode >= 500 && statusCode <= 504)\n    this.#callback(this.#successful, this.#context, statusCode, headers)\n    this.#callback = null\n\n    if (this.#successful) {\n      return true\n    }\n\n    this.#handler.onRequestStart?.(controller, this.#context)\n    this.#handler.onResponseStart?.(\n      controller,\n      statusCode,\n      headers,\n      statusMessage\n    )\n  }\n\n  onResponseData (controller, chunk) {\n    if (this.#successful) {\n      return\n    }\n\n    return this.#handler.onResponseData?.(controller, chunk)\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.#successful) {\n      return\n    }\n\n    this.#handler.onResponseEnd?.(controller, trailers)\n  }\n\n  onResponseError (controller, err) {\n    if (this.#successful) {\n      return\n    }\n\n    if (this.#callback) {\n      this.#callback(false)\n      this.#callback = null\n    }\n\n    if (typeof this.#handler.onResponseError === 'function') {\n      this.#handler.onResponseError(controller, err)\n    } else {\n      throw err\n    }\n  }\n}\n\nmodule.exports = CacheRevalidationHandler\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { Readable } = require('node:stream')\nconst util = require('../core/util')\nconst CacheHandler = require('../handler/cache-handler')\nconst MemoryCacheStore = require('../cache/memory-cache-store')\nconst CacheRevalidationHandler = require('../handler/cache-revalidation-handler')\nconst { assertCacheStore, assertCacheMethods, makeCacheKey, normalizeHeaders, parseCacheControlHeader, isInvalidOrWildcardVaryHeader } = require('../util/cache.js')\nconst { AbortError } = require('../core/errors.js')\nconst { parseHttpDate } = require('../util/date.js')\n\n/**\n * @param {(string | RegExp)[] | undefined} origins\n * @param {string} name\n */\nfunction assertCacheOrigins (origins, name) {\n  if (origins === undefined) return\n  if (!Array.isArray(origins)) {\n    throw new TypeError(`expected ${name} to be an array or undefined, got ${typeof origins}`)\n  }\n  for (let i = 0; i < origins.length; i++) {\n    const origin = origins[i]\n    if (typeof origin !== 'string' && !(origin instanceof RegExp)) {\n      throw new TypeError(`expected ${name}[${i}] to be a string or RegExp, got ${typeof origin}`)\n    }\n  }\n}\n\nconst nop = () => {}\n\nfunction trimOWS (value) {\n  return value.replace(/^[\\t ]+|[\\t ]+$/g, '')\n}\n\nfunction arrayIncludes (array, value) {\n  for (let i = 0; i < array.length; i++) {\n    if (array[i] === value) {\n      return true\n    }\n  }\n\n  return false\n}\n\nfunction hasPragmaNoCache (headers) {\n  const pragma = headers?.pragma\n  if (!pragma) {\n    return false\n  }\n\n  const values = Array.isArray(pragma) ? pragma : [pragma]\n  for (let i = 0; i < values.length; i++) {\n    const value = values[i]\n    if (typeof value !== 'string') {\n      continue\n    }\n\n    const directives = value.split(',')\n    for (let j = 0; j < directives.length; j++) {\n      if (trimOWS(directives[j]).toLowerCase() === 'no-cache') {\n        return true\n      }\n    }\n  }\n\n  return false\n}\n\n/**\n * @typedef {(options: import('../../types/dispatcher.d.ts').default.DispatchOptions, handler: import('../../types/dispatcher.d.ts').default.DispatchHandler) => void} DispatchFn\n */\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} cacheControlDirectives\n * @param {import('../../types/dispatcher.d.ts').default.RequestOptions} opts\n * @returns {boolean}\n */\nfunction needsRevalidation (result, cacheControlDirectives, { headers = {} }) {\n  // Always revalidate requests with the no-cache request directive.\n  if (cacheControlDirectives?.['no-cache']) {\n    return true\n  }\n\n  // Always revalidate requests with unqualified no-cache response directive.\n  if (result.cacheControlDirectives?.['no-cache'] && !Array.isArray(result.cacheControlDirectives['no-cache'])) {\n    return true\n  }\n\n  // Always revalidate requests with conditional headers.\n  if (headers['if-modified-since'] || headers['if-none-match']) {\n    return true\n  }\n\n  return false\n}\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions['type']} cacheType\n * @returns {boolean}\n */\nfunction staleResponseRequiresRevalidation (result, cacheType) {\n  return result.cacheControlDirectives?.['must-revalidate'] === true ||\n    (cacheType === 'shared' && (\n      result.cacheControlDirectives?.['proxy-revalidate'] === true ||\n      // https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.2.10\n      // s-maxage implies proxy-revalidate for shared caches.\n      result.cacheControlDirectives?.['s-maxage'] !== undefined\n    ))\n}\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions['type']} cacheType\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} headers\n * @returns {boolean}\n */\nfunction revalidationResponseDisallowsCachedReuse (cacheType, headers) {\n  if (\n    (headers.vary && isInvalidOrWildcardVaryHeader(headers.vary)) ||\n    (cacheType === 'shared' && Object.hasOwn(headers, 'set-cookie'))\n  ) {\n    return true\n  }\n\n  const cacheControl = headers['cache-control']\n  if (!cacheControl) {\n    return false\n  }\n\n  const cacheControlDirectives = parseCacheControlHeader(cacheControl)\n  return cacheControlDirectives['no-store'] === true ||\n    (cacheType === 'shared' && cacheControlDirectives.private === true)\n}\n\nfunction revalidationResponseUpdatesCacheControl (headers) {\n  return headers['cache-control'] !== undefined\n}\n\nfunction deleteCachedValue (store, cacheKey) {\n  try {\n    store.delete(cacheKey)?.catch?.(nop)\n  } catch {\n    // Fail silently\n  }\n}\n\nfunction getUsableLastModified (headers) {\n  const lastModified = headers?.['last-modified']\n  if (typeof lastModified === 'string' && parseHttpDate(lastModified)) {\n    return lastModified\n  }\n}\n\nfunction makeRevalidationHeaders (opts, result) {\n  const headers = {\n    ...opts.headers,\n    'if-modified-since': getUsableLastModified(result.headers) ?? new Date(result.cachedAt).toUTCString()\n  }\n\n  if (result.etag) {\n    headers['if-none-match'] = result.etag\n  }\n\n  if (result.vary) {\n    for (const key in result.vary) {\n      if (result.vary[key] != null) {\n        headers[key] = result.vary[key]\n      }\n    }\n  }\n\n  return headers\n}\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} cacheControlDirectives\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions['type']} cacheType\n * @returns {boolean}\n */\nfunction isStale (result, cacheControlDirectives, cacheType) {\n  const now = Date.now()\n  if (now > result.staleAt) {\n    // Response is stale\n    if (!staleResponseRequiresRevalidation(result, cacheType) && cacheControlDirectives?.['max-stale']) {\n      // There's a threshold where we can serve stale responses, let's see if\n      //  we're in it\n      // https://www.rfc-editor.org/rfc/rfc9111.html#name-max-stale\n      const gracePeriod = result.staleAt + (cacheControlDirectives['max-stale'] * 1000)\n      return now > gracePeriod\n    }\n\n    return true\n  }\n\n  if (cacheControlDirectives?.['min-fresh']) {\n    // https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.1.3\n\n    // At this point, staleAt is always > now\n    const timeLeftTillStale = result.staleAt - now\n    const threshold = cacheControlDirectives['min-fresh'] * 1000\n\n    return timeLeftTillStale <= threshold\n  }\n\n  return false\n}\n\n/**\n * Check if we're within the stale-while-revalidate window for a stale response\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions['type']} cacheType\n * @returns {boolean}\n */\nfunction withinStaleWhileRevalidateWindow (result, cacheType) {\n  const staleWhileRevalidate = result.cacheControlDirectives?.['stale-while-revalidate']\n  if (!staleWhileRevalidate || staleResponseRequiresRevalidation(result, cacheType)) {\n    return false\n  }\n\n  const now = Date.now()\n  const staleWhileRevalidateExpiry = result.staleAt + (staleWhileRevalidate * 1000)\n  return now <= staleWhileRevalidateExpiry\n}\n\n/**\n * @param {DispatchFn} dispatch\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions} globalOpts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n * @param {import('../../types/dispatcher.d.ts').default.RequestOptions} opts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} reqCacheControl\n */\nfunction handleUncachedResponse (\n  dispatch,\n  globalOpts,\n  cacheKey,\n  handler,\n  opts,\n  reqCacheControl\n) {\n  if (reqCacheControl?.['only-if-cached']) {\n    let aborted = false\n    try {\n      if (typeof handler.onConnect === 'function') {\n        handler.onConnect(() => {\n          aborted = true\n        })\n\n        if (aborted) {\n          return\n        }\n      }\n\n      if (typeof handler.onHeaders === 'function') {\n        handler.onHeaders(504, [], nop, 'Gateway Timeout')\n        if (aborted) {\n          return\n        }\n      }\n\n      if (typeof handler.onComplete === 'function') {\n        handler.onComplete([])\n      }\n    } catch (err) {\n      if (typeof handler.onError === 'function') {\n        handler.onError(err)\n      }\n    }\n\n    return true\n  }\n\n  return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler))\n}\n\n/**\n * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n * @param {import('../../types/dispatcher.d.ts').default.RequestOptions} opts\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult} result\n * @param {number} age\n * @param {any} context\n * @param {boolean} isStale\n */\nfunction sendCachedValue (handler, opts, result, age, context, isStale) {\n  // TODO (perf): Readable.from path can be optimized...\n  const stream = util.isStream(result.body)\n    ? result.body\n    : Readable.from(result.body ?? [])\n\n  assert(!stream.destroyed, 'stream should not be destroyed')\n  assert(!stream.readableDidRead, 'stream should not be readableDidRead')\n\n  const controller = {\n    resume () {\n      stream.resume()\n    },\n    pause () {\n      stream.pause()\n    },\n    get paused () {\n      return stream.isPaused()\n    },\n    get aborted () {\n      return stream.destroyed\n    },\n    get reason () {\n      return stream.errored\n    },\n    abort (reason) {\n      stream.destroy(reason ?? new AbortError())\n    }\n  }\n\n  stream\n    .on('error', function (err) {\n      if (!this.readableEnded) {\n        if (typeof handler.onResponseError === 'function') {\n          handler.onResponseError(controller, err)\n        } else {\n          throw err\n        }\n      }\n    })\n    .on('close', function () {\n      if (!this.errored) {\n        handler.onResponseEnd?.(controller, {})\n      }\n    })\n\n  handler.onRequestStart?.(controller, context)\n\n  if (stream.destroyed) {\n    return\n  }\n\n  // Add the age header\n  // https://www.rfc-editor.org/rfc/rfc9111.html#name-age\n  const headers = { ...result.headers, age: String(age) }\n\n  if (isStale) {\n    // Add warning header\n    //  https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Warning\n    headers.warning = '110 - \"response is stale\"'\n  }\n\n  handler.onResponseStart?.(controller, result.statusCode, headers, result.statusMessage)\n\n  if (opts.method === 'HEAD') {\n    stream.destroy()\n  } else {\n    stream.on('data', function (chunk) {\n      handler.onResponseData?.(controller, chunk)\n    })\n  }\n}\n\n/**\n * @param {DispatchFn} dispatch\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions} globalOpts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey\n * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler\n * @param {import('../../types/dispatcher.d.ts').default.RequestOptions} opts\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives | undefined} reqCacheControl\n * @param {import('../../types/cache-interceptor.d.ts').default.GetResult | undefined} result\n */\nfunction handleResult (\n  dispatch,\n  globalOpts,\n  cacheKey,\n  handler,\n  opts,\n  reqCacheControl,\n  result\n) {\n  if (!result) {\n    return handleUncachedResponse(dispatch, globalOpts, cacheKey, handler, opts, reqCacheControl)\n  }\n\n  // Shared stores may outlive the Undici version that wrote them. Do not\n  // re-serve a Set-Cookie header from an existing shared-cache entry.\n  if (globalOpts.type === 'shared' && Object.hasOwn(result.headers, 'set-cookie')) {\n    if (util.isStream(result.body)) {\n      result.body.on('error', nop).destroy()\n    }\n\n    deleteCachedValue(globalOpts.store, cacheKey)\n    return handleUncachedResponse(dispatch, globalOpts, cacheKey, handler, opts, reqCacheControl)\n  }\n\n  const now = Date.now()\n  if (now > result.deleteAt) {\n    // Response is expired, cache store shouldn't have given this to us\n    return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler))\n  }\n\n  const age = Math.round((now - result.cachedAt) / 1000)\n  const requestMaxAgeExpired = reqCacheControl?.['max-age'] !== undefined && age >= reqCacheControl['max-age']\n\n  const stale = requestMaxAgeExpired || isStale(result, reqCacheControl, globalOpts.type)\n  const revalidate = requestMaxAgeExpired || needsRevalidation(result, reqCacheControl, opts)\n\n  // Check if the response is stale\n  if (stale || revalidate) {\n    if (util.isStream(opts.body) && util.bodyLength(opts.body) !== 0) {\n      // If body is a stream we can't revalidate...\n      // TODO (fix): This could be less strict...\n      return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler))\n    }\n\n    // RFC 5861: If we're within stale-while-revalidate window, serve stale immediately\n    // and revalidate in background, unless immediate revalidation is necessary\n    if (!revalidate && withinStaleWhileRevalidateWindow(result, globalOpts.type)) {\n      // Serve stale response immediately\n      sendCachedValue(handler, opts, result, age, null, true)\n\n      // Start background revalidation (fire-and-forget)\n      queueMicrotask(() => {\n        const headers = makeRevalidationHeaders(opts, result)\n\n        // Background revalidation - update cache if we get new data\n        dispatch(\n          {\n            ...opts,\n            headers\n          },\n          new CacheHandler(globalOpts, cacheKey, {\n            // Silent handler that just updates the cache\n            onRequestStart () {},\n            onRequestUpgrade () {},\n            onResponseStart () {},\n            onResponseData () {},\n            onResponseEnd () {},\n            onResponseError () {}\n          })\n        )\n      })\n\n      return true\n    }\n\n    let withinStaleIfErrorThreshold = false\n    if (!staleResponseRequiresRevalidation(result, globalOpts.type)) {\n      const staleIfErrorExpiry = result.cacheControlDirectives['stale-if-error'] ?? reqCacheControl?.['stale-if-error']\n      if (staleIfErrorExpiry) {\n        withinStaleIfErrorThreshold = now < (result.staleAt + (staleIfErrorExpiry * 1000))\n      }\n    }\n\n    const headers = makeRevalidationHeaders(opts, result)\n\n    // We need to revalidate the response\n    return dispatch(\n      {\n        ...opts,\n        headers\n      },\n      new CacheRevalidationHandler(\n        (success, context, statusCode, headers) => {\n          if (success) {\n            if (statusCode === 304) {\n              if (revalidationResponseDisallowsCachedReuse(globalOpts.type, headers)) {\n                if (util.isStream(result.body)) {\n                  result.body.on('error', nop).destroy()\n                }\n\n                deleteCachedValue(globalOpts.store, cacheKey)\n                return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler))\n              }\n\n              if (revalidationResponseUpdatesCacheControl(headers)) {\n                deleteCachedValue(globalOpts.store, cacheKey)\n              }\n            }\n\n            // TODO: successful revalidation should be considered fresh (not give stale warning).\n            sendCachedValue(handler, opts, result, age, context, stale)\n          } else if (util.isStream(result.body)) {\n            result.body.on('error', nop).destroy()\n          }\n        },\n        new CacheHandler(globalOpts, cacheKey, handler),\n        withinStaleIfErrorThreshold\n      )\n    )\n  }\n\n  // Dump request body.\n  if (util.isStream(opts.body)) {\n    opts.body.on('error', nop).destroy()\n  }\n\n  sendCachedValue(handler, opts, result, age, null, false)\n}\n\n/**\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions} [opts]\n * @returns {import('../../types/dispatcher.d.ts').default.DispatcherComposeInterceptor}\n */\nmodule.exports = (opts = {}) => {\n  const {\n    store = new MemoryCacheStore(),\n    methods = ['GET'],\n    cacheByDefault = undefined,\n    type = 'shared',\n    origins = undefined\n  } = opts\n\n  if (typeof opts !== 'object' || opts === null) {\n    throw new TypeError(`expected type of opts to be an Object, got ${opts === null ? 'null' : typeof opts}`)\n  }\n\n  assertCacheStore(store, 'opts.store')\n  assertCacheMethods(methods, 'opts.methods')\n  assertCacheOrigins(origins, 'opts.origins')\n\n  if (typeof cacheByDefault !== 'undefined' && typeof cacheByDefault !== 'number') {\n    throw new TypeError(`expected opts.cacheByDefault to be number or undefined, got ${typeof cacheByDefault}`)\n  }\n\n  if (typeof type !== 'undefined' && type !== 'shared' && type !== 'private') {\n    throw new TypeError(`expected opts.type to be shared, private, or undefined, got ${typeof type}`)\n  }\n\n  const globalOpts = {\n    store,\n    methods,\n    cacheByDefault,\n    type\n  }\n\n  const safeMethodsToNotCache = []\n  for (let i = 0; i < util.safeHTTPMethods.length; i++) {\n    const method = util.safeHTTPMethods[i]\n    if (!arrayIncludes(methods, method)) {\n      safeMethodsToNotCache.push(method)\n    }\n  }\n\n  return dispatch => {\n    return (opts, handler) => {\n      if (!opts.origin || arrayIncludes(safeMethodsToNotCache, opts.method)) {\n        // Not a method we want to cache or we don't have the origin, skip\n        return dispatch(opts, handler)\n      }\n\n      // Check if origin is in whitelist\n      if (origins !== undefined) {\n        const requestOrigin = opts.origin.toString().toLowerCase()\n        let isAllowed = false\n\n        for (let i = 0; i < origins.length; i++) {\n          const allowed = origins[i]\n          if (typeof allowed === 'string') {\n            if (allowed.toLowerCase() === requestOrigin) {\n              isAllowed = true\n              break\n            }\n          } else if (allowed.test(requestOrigin)) {\n            isAllowed = true\n            break\n          }\n        }\n\n        if (!isAllowed) {\n          return dispatch(opts, handler)\n        }\n      }\n\n      opts = {\n        ...opts,\n        headers: normalizeHeaders(opts)\n      }\n\n      const reqCacheControl = opts.headers?.['cache-control']\n        ? parseCacheControlHeader(opts.headers['cache-control'])\n        : hasPragmaNoCache(opts.headers)\n          ? { 'no-cache': true }\n          : undefined\n\n      if (reqCacheControl?.['no-store']) {\n        return dispatch(opts, handler)\n      }\n\n      /**\n       * @type {import('../../types/cache-interceptor.d.ts').default.CacheKey}\n       */\n      const cacheKey = makeCacheKey(opts)\n\n      if (!arrayIncludes(util.safeHTTPMethods, opts.method)) {\n        return dispatch(opts, new CacheHandler(globalOpts, cacheKey, handler))\n      }\n\n      const result = store.get(cacheKey)\n\n      if (result && typeof result.then === 'function') {\n        return result\n          .then(result => handleResult(dispatch,\n            globalOpts,\n            cacheKey,\n            handler,\n            opts,\n            reqCacheControl,\n            result\n          ))\n      } else {\n        return handleResult(\n          dispatch,\n          globalOpts,\n          cacheKey,\n          handler,\n          opts,\n          reqCacheControl,\n          result\n        )\n      }\n    }\n  }\n}\n", "'use strict'\n\nconst { createInflate, createGunzip, createBrotliDecompress, createZstdDecompress } = require('node:zlib')\nconst { pipeline, Transform: TransformStream } = require('node:stream')\nconst { InvalidArgumentError, ResponseExceededMaxSizeError } = require('../core/errors')\nconst DecoratorHandler = require('../handler/decorator-handler')\nconst { runtimeFeatures } = require('../util/runtime-features')\n\n/** @typedef {import('node:stream').Transform} Transform */\n/** @typedef {import('node:stream').Transform} Controller */\n/** @typedef {Transform&import('node:zlib').Zlib} DecompressorStream */\n\n/** @type {Record<string, () => DecompressorStream>} */\nconst supportedEncodings = {\n  gzip: createGunzip,\n  'x-gzip': createGunzip,\n  br: createBrotliDecompress,\n  deflate: createInflate,\n  compress: createInflate,\n  'x-compress': createInflate,\n  ...(runtimeFeatures.has('zstd') ? { zstd: createZstdDecompress } : {})\n}\n\nconst defaultSkipStatusCodes = /** @type {const} */ ([204, 304])\nconst defaultMaxSize = 64 * 1024 * 1024\n\n/**\n * Limits the output of one stage in a decompression chain.\n * @param {number} maxSize - Maximum output size in bytes\n * @returns {Transform}\n */\nfunction createMaxSizeLimiter (maxSize) {\n  let size = 0\n\n  return new TransformStream({\n    transform (chunk, _encoding, callback) {\n      const decompressedSize = size + chunk.length\n      if (decompressedSize > maxSize) {\n        callback(new ResponseExceededMaxSizeError(\n          `Decompressed response size (${decompressedSize}) exceeded maxSize (${maxSize})`\n        ))\n        return\n      }\n\n      size = decompressedSize\n      callback(null, chunk)\n    }\n  })\n}\n\nlet warningEmitted = /** @type {boolean} */ (false)\n\n/**\n * @typedef {Object} DecompressHandlerOptions\n * @property {number[]|Readonly<number[]>} [skipStatusCodes=[204, 304]] - List of status codes to skip decompression for\n * @property {boolean} [skipErrorResponses] - Whether to skip decompression for error responses (status codes >= 400)\n * @property {number} [maxSize=67108864] - Maximum decompressed response size in bytes\n */\n\nclass DecompressHandler extends DecoratorHandler {\n  /** @type {Transform[]} */\n  #decompressors = []\n  /** @type {Record<string, string | string[]> | undefined} */\n  #trailers\n  /** @type {Readonly<number[]>} */\n  #skipStatusCodes\n  /** @type {boolean} */\n  #skipErrorResponses\n  /** @type {number} */\n  #maxSize\n  /** @type {number} */\n  #decompressedSize = 0\n  /** @type {boolean} */\n  #terminated = false\n  /** @type {boolean} */\n  #inputEnded = false\n\n  constructor (handler, { skipStatusCodes = defaultSkipStatusCodes, skipErrorResponses = true, maxSize = defaultMaxSize } = {}) {\n    if (!Number.isSafeInteger(maxSize) || maxSize < 1) {\n      throw new InvalidArgumentError('maxSize must be a positive integer')\n    }\n\n    super(handler)\n    this.#skipStatusCodes = skipStatusCodes\n    this.#skipErrorResponses = skipErrorResponses\n    this.#maxSize = maxSize\n  }\n\n  /**\n   * Determines if decompression should be skipped based on encoding and status code\n   * @param {string} contentEncoding - Content-Encoding header value\n   * @param {number} statusCode - HTTP status code of the response\n   * @returns {boolean} - True if decompression should be skipped\n   */\n  #shouldSkipDecompression (contentEncoding, statusCode) {\n    if (!contentEncoding || statusCode < 200) return true\n    if (this.#skipStatusCodes.includes(statusCode)) return true\n    if (this.#skipErrorResponses && statusCode >= 400) return true\n    return false\n  }\n\n  /**\n   * Creates a chain of decompressors for multiple content encodings\n   *\n   * @param {string} encodings - Comma-separated list of content encodings\n   * @returns {Array<Transform>} - Array of decompressor and limiting streams\n   * @throws {Error} - If the number of content-encodings exceeds the maximum allowed\n   */\n  #createDecompressionChain (encodings) {\n    const parts = encodings.split(',')\n\n    // Limit the number of content-encodings to prevent resource exhaustion.\n    // CVE fix similar to urllib3 (GHSA-gm62-xv2j-4w53) and curl (CVE-2022-32206).\n    const maxContentEncodings = 5\n    if (parts.length > maxContentEncodings) {\n      throw new Error(`too many content-encodings in response: ${parts.length}, maximum allowed is ${maxContentEncodings}`)\n    }\n\n    /** @type {DecompressorStream[]} */\n    const decompressors = []\n\n    for (let i = parts.length - 1; i >= 0; i--) {\n      const encoding = parts[i].trim()\n      if (!encoding) continue\n\n      if (!supportedEncodings[encoding]) {\n        decompressors.length = 0 // Clear if unsupported encoding\n        return decompressors // Unsupported encoding\n      }\n\n      decompressors.push(supportedEncodings[encoding]())\n    }\n\n    if (decompressors.length < 2) {\n      return decompressors\n    }\n\n    /** @type {Transform[]} */\n    const streams = []\n    for (let i = 0; i < decompressors.length; i++) {\n      streams.push(decompressors[i])\n      if (i < decompressors.length - 1) {\n        streams.push(createMaxSizeLimiter(this.#maxSize))\n      }\n    }\n\n    return streams\n  }\n\n  /**\n   * Stops decompression and reports an error.\n   * @param {Controller} controller - The controller to coordinate with\n   * @param {Error} error - The decompression error\n   * @returns {void}\n   */\n  #fail (controller, error) {\n    if (this.#terminated) {\n      return\n    }\n\n    if (this.#inputEnded) {\n      // The request is already marked complete once the compressed input ends,\n      // so controller.abort() can no longer propagate decoder flush errors.\n      this.onResponseError(controller, error)\n    } else {\n      controller.abort(error)\n    }\n  }\n\n  /**\n   * Sets up event handlers for a decompressor stream using readable events\n   * @param {DecompressorStream} decompressor - The decompressor stream\n   * @param {Controller} controller - The controller to coordinate with\n   * @returns {void}\n   */\n  #setupDecompressorEvents (decompressor, controller) {\n    decompressor.on('readable', () => {\n      if (this.#terminated) {\n        return\n      }\n\n      let chunk\n      while ((chunk = decompressor.read()) !== null) {\n        const decompressedSize = this.#decompressedSize + chunk.length\n        if (decompressedSize > this.#maxSize) {\n          this.#fail(controller, new ResponseExceededMaxSizeError(\n            `Decompressed response size (${decompressedSize}) exceeded maxSize (${this.#maxSize})`\n          ))\n          return\n        }\n\n        this.#decompressedSize = decompressedSize\n        const result = super.onResponseData(controller, chunk)\n        if (result === false) {\n          break\n        }\n      }\n    })\n\n    decompressor.on('error', (error) => {\n      this.#fail(controller, error)\n    })\n  }\n\n  /**\n   * Sets up event handling for a single decompressor\n   * @param {Controller} controller - The controller to handle events\n   * @returns {void}\n   */\n  #setupSingleDecompressor (controller) {\n    const decompressor = this.#decompressors[0]\n    this.#setupDecompressorEvents(decompressor, controller)\n\n    decompressor.on('end', () => {\n      if (this.#terminated) {\n        return\n      }\n\n      this.#terminated = true\n      this.#cleanupDecompressors()\n      super.onResponseEnd(controller, this.#trailers)\n    })\n  }\n\n  /**\n   * Sets up event handling for multiple chained decompressors using pipeline\n   * @param {Controller} controller - The controller to handle events\n   * @returns {void}\n   */\n  #setupMultipleDecompressors (controller) {\n    const lastDecompressor = this.#decompressors[this.#decompressors.length - 1]\n    this.#setupDecompressorEvents(lastDecompressor, controller)\n\n    pipeline(this.#decompressors, (err) => {\n      if (this.#terminated) {\n        return\n      }\n\n      if (err) {\n        this.#fail(controller, err)\n        return\n      }\n\n      this.#terminated = true\n      this.#cleanupDecompressors()\n      super.onResponseEnd(controller, this.#trailers)\n    })\n  }\n\n  /**\n   * Cleans up decompressor references to prevent memory leaks\n   * @returns {void}\n   */\n  #cleanupDecompressors () {\n    this.#decompressors.length = 0\n  }\n\n  /**\n   * @param {Controller} controller\n   * @param {number} statusCode\n   * @param {Record<string, string | string[] | undefined>} headers\n   * @param {string} statusMessage\n   * @returns {void}\n   */\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    const contentEncoding = headers['content-encoding']\n\n    // If content encoding is not supported or status code is in skip list\n    if (this.#shouldSkipDecompression(contentEncoding, statusCode)) {\n      return super.onResponseStart(controller, statusCode, headers, statusMessage)\n    }\n\n    const decompressors = this.#createDecompressionChain(contentEncoding.toLowerCase())\n\n    if (decompressors.length === 0) {\n      this.#cleanupDecompressors()\n      return super.onResponseStart(controller, statusCode, headers, statusMessage)\n    }\n\n    this.#decompressors = decompressors\n\n    // Remove compression headers since we're decompressing\n    const { 'content-encoding': _, 'content-length': __, ...newHeaders } = headers\n\n    if (controller?.rawHeaders) {\n      const rawHeaders = controller.rawHeaders\n\n      if (Array.isArray(rawHeaders)) {\n        const filteredHeaders = []\n        for (let i = 0; i < rawHeaders.length; i += 2) {\n          const headerName = rawHeaders[i]\n          const name = Buffer.isBuffer(headerName) ? headerName.toString('latin1') : `${headerName}`\n          const lowerName = name.toLowerCase()\n\n          if (lowerName === 'content-encoding' || lowerName === 'content-length') {\n            continue\n          }\n\n          filteredHeaders.push(rawHeaders[i], rawHeaders[i + 1])\n        }\n        rawHeaders.splice(0, rawHeaders.length, ...filteredHeaders)\n      } else if (typeof rawHeaders === 'object') {\n        for (const name of Object.keys(rawHeaders)) {\n          const lowerName = name.toLowerCase()\n          if (lowerName === 'content-encoding' || lowerName === 'content-length') {\n            delete rawHeaders[name]\n          }\n        }\n      }\n    }\n\n    if (this.#decompressors.length === 1) {\n      this.#setupSingleDecompressor(controller)\n    } else {\n      this.#setupMultipleDecompressors(controller)\n    }\n\n    return super.onResponseStart(controller, statusCode, newHeaders, statusMessage)\n  }\n\n  /**\n   * @param {Controller} controller\n   * @param {Buffer} chunk\n   * @returns {void}\n   */\n  onResponseData (controller, chunk) {\n    if (this.#decompressors.length > 0) {\n      this.#decompressors[0].write(chunk)\n      return\n    }\n    super.onResponseData(controller, chunk)\n  }\n\n  /**\n   * @param {Controller} controller\n   * @param {Record<string, string | string[]> | undefined} trailers\n   * @returns {void}\n   */\n  onResponseEnd (controller, trailers) {\n    if (this.#decompressors.length > 0) {\n      this.#inputEnded = true\n      this.#trailers = trailers\n      this.#decompressors[0].end()\n      return\n    }\n    super.onResponseEnd(controller, trailers)\n  }\n\n  /**\n   * @param {Controller} controller\n   * @param {Error} err\n   * @returns {void}\n   */\n  onResponseError (controller, err) {\n    if (this.#terminated) {\n      return\n    }\n\n    this.#terminated = true\n    for (const decompressor of this.#decompressors) {\n      decompressor.destroy()\n    }\n    this.#cleanupDecompressors()\n    super.onResponseError(controller, err)\n  }\n}\n\n/**\n * Creates a decompression interceptor for HTTP responses\n * @param {DecompressHandlerOptions} [options] - Options for the interceptor\n * @returns {Function} - Interceptor function\n */\nfunction createDecompressInterceptor (options = {}) {\n  // Emit experimental warning only once\n  if (!warningEmitted) {\n    process.emitWarning(\n      'DecompressInterceptor is experimental and subject to change',\n      'ExperimentalWarning'\n    )\n    warningEmitted = true\n  }\n\n  return (dispatch) => {\n    return (opts, handler) => {\n      const decompressHandler = new DecompressHandler(handler, options)\n      return dispatch(opts, decompressHandler)\n    }\n  }\n}\n\nmodule.exports = createDecompressInterceptor\n", "'use strict'\n\nconst { RequestAbortedError } = require('../core/errors')\n\n/**\n * @typedef {import('../../types/dispatcher.d.ts').default.DispatchHandler} DispatchHandler\n */\n\nconst DEFAULT_MAX_BUFFER_SIZE = 5 * 1024 * 1024\n\n/**\n * @typedef {Object} WaitingHandler\n * @property {DispatchHandler} handler\n * @property {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n * @property {Buffer[]} bufferedChunks\n * @property {number} bufferedBytes\n * @property {object | null} pendingTrailers\n * @property {boolean} done\n */\n\n/**\n * Handler that forwards response events to multiple waiting handlers.\n * Used for request deduplication.\n *\n * @implements {DispatchHandler}\n */\nclass DeduplicationHandler {\n  /**\n   * @type {DispatchHandler}\n   */\n  #primaryHandler\n\n  /**\n   * @type {WaitingHandler[]}\n   */\n  #waitingHandlers = []\n\n  /**\n   * @type {number}\n   */\n  #maxBufferSize = DEFAULT_MAX_BUFFER_SIZE\n\n  /**\n   * @type {number}\n   */\n  #statusCode = 0\n\n  /**\n   * @type {Record<string, string | string[]>}\n   */\n  #headers = {}\n\n  /**\n   * @type {string}\n   */\n  #statusMessage = ''\n\n  /**\n   * @type {boolean}\n   */\n  #aborted = false\n\n  /**\n   * @type {boolean}\n   */\n  #responseStarted = false\n\n  /**\n   * @type {boolean}\n   */\n  #responseDataStarted = false\n\n  /**\n   * @type {boolean}\n   */\n  #completed = false\n\n  /**\n   * @type {import('../../types/dispatcher.d.ts').default.DispatchController | null}\n   */\n  #controller = null\n\n  /**\n   * @type {(() => void) | null}\n   */\n  #onComplete = null\n\n  /**\n   * @param {DispatchHandler} primaryHandler The primary handler\n   * @param {() => void} onComplete Callback when request completes\n   * @param {number} [maxBufferSize] Maximum paused buffer size per waiting handler\n   */\n  constructor (primaryHandler, onComplete, maxBufferSize = DEFAULT_MAX_BUFFER_SIZE) {\n    this.#primaryHandler = primaryHandler\n    this.#onComplete = onComplete\n    this.#maxBufferSize = maxBufferSize\n  }\n\n  /**\n   * Add a waiting handler that will receive response events.\n   * Returns false if deduplication can no longer safely attach this handler.\n   *\n   * @param {DispatchHandler} handler\n   * @returns {boolean}\n   */\n  addWaitingHandler (handler) {\n    if (this.#completed || this.#responseDataStarted) {\n      return false\n    }\n\n    const waitingHandler = this.#createWaitingHandler(handler)\n    const waitingController = waitingHandler.controller\n\n    try {\n      handler.onRequestStart?.(waitingController, null)\n\n      if (waitingController.aborted) {\n        waitingHandler.done = true\n        return true\n      }\n\n      if (this.#responseStarted) {\n        handler.onResponseStart?.(\n          waitingController,\n          this.#statusCode,\n          this.#headers,\n          this.#statusMessage\n        )\n      }\n    } catch {\n      // Ignore errors from waiting handlers\n      waitingHandler.done = true\n      return true\n    }\n\n    if (!waitingController.aborted) {\n      this.#waitingHandlers.push(waitingHandler)\n    }\n\n    return true\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {any} context\n   */\n  onRequestStart (controller, context) {\n    this.#controller = controller\n    this.#primaryHandler.onRequestStart?.(controller, context)\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {number} statusCode\n   * @param {import('../../types/header.d.ts').IncomingHttpHeaders} headers\n   * @param {Socket} socket\n   */\n  onRequestUpgrade (controller, statusCode, headers, socket) {\n    this.#primaryHandler.onRequestUpgrade?.(controller, statusCode, headers, socket)\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {number} statusCode\n   * @param {Record<string, string | string[]>} headers\n   * @param {string} statusMessage\n   */\n  onResponseStart (controller, statusCode, headers, statusMessage) {\n    this.#responseStarted = true\n    this.#statusCode = statusCode\n    this.#headers = headers\n    this.#statusMessage = statusMessage\n\n    this.#primaryHandler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n\n    for (const waitingHandler of this.#waitingHandlers) {\n      const { handler, controller: waitingController } = waitingHandler\n\n      if (waitingHandler.done || waitingController.aborted) {\n        waitingHandler.done = true\n        continue\n      }\n\n      try {\n        handler.onResponseStart?.(\n          waitingController,\n          statusCode,\n          headers,\n          statusMessage\n        )\n      } catch {\n        // Ignore errors from waiting handlers\n      }\n\n      if (waitingController.aborted) {\n        waitingHandler.done = true\n      }\n    }\n\n    this.#pruneDoneWaitingHandlers()\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {Buffer} chunk\n   */\n  onResponseData (controller, chunk) {\n    if (this.#aborted || this.#completed) {\n      return\n    }\n\n    this.#responseDataStarted = true\n\n    this.#primaryHandler.onResponseData?.(controller, chunk)\n\n    for (const waitingHandler of this.#waitingHandlers) {\n      const { handler, controller: waitingController } = waitingHandler\n\n      if (waitingHandler.done || waitingController.aborted) {\n        waitingHandler.done = true\n        continue\n      }\n\n      if (waitingController.paused) {\n        this.#bufferWaitingChunk(waitingHandler, chunk)\n        continue\n      }\n\n      try {\n        handler.onResponseData?.(waitingController, chunk)\n      } catch {\n        // Ignore errors from waiting handlers\n      }\n\n      if (waitingController.aborted) {\n        waitingHandler.done = true\n        waitingHandler.bufferedChunks = []\n        waitingHandler.bufferedBytes = 0\n      }\n    }\n\n    this.#pruneDoneWaitingHandlers()\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {object} trailers\n   */\n  onResponseEnd (controller, trailers) {\n    if (this.#aborted || this.#completed) {\n      return\n    }\n\n    this.#completed = true\n    this.#primaryHandler.onResponseEnd?.(controller, trailers)\n\n    for (const waitingHandler of this.#waitingHandlers) {\n      if (waitingHandler.done || waitingHandler.controller.aborted) {\n        waitingHandler.done = true\n        continue\n      }\n\n      this.#flushWaitingHandler(waitingHandler)\n\n      if (waitingHandler.done || waitingHandler.controller.aborted) {\n        waitingHandler.done = true\n        continue\n      }\n\n      if (waitingHandler.controller.paused && waitingHandler.bufferedChunks.length > 0) {\n        waitingHandler.pendingTrailers = trailers\n        continue\n      }\n\n      try {\n        waitingHandler.handler.onResponseEnd?.(waitingHandler.controller, trailers)\n      } catch {\n        // Ignore errors from waiting handlers\n      }\n\n      waitingHandler.done = true\n    }\n\n    this.#pruneDoneWaitingHandlers()\n    this.#onComplete?.()\n  }\n\n  /**\n   * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller\n   * @param {Error} err\n   */\n  onResponseError (controller, err) {\n    if (this.#completed) {\n      return\n    }\n\n    this.#aborted = true\n    this.#completed = true\n\n    this.#primaryHandler.onResponseError?.(controller, err)\n\n    for (const waitingHandler of this.#waitingHandlers) {\n      this.#errorWaitingHandler(waitingHandler, err)\n    }\n\n    this.#waitingHandlers = []\n    this.#onComplete?.()\n  }\n\n  /**\n   * @param {DispatchHandler} handler\n   * @returns {WaitingHandler}\n   */\n  #createWaitingHandler (handler) {\n    /** @type {WaitingHandler} */\n    const waitingHandler = {\n      handler,\n      controller: null,\n      bufferedChunks: [],\n      bufferedBytes: 0,\n      pendingTrailers: null,\n      done: false\n    }\n\n    const state = {\n      aborted: false,\n      paused: false,\n      reason: null\n    }\n\n    waitingHandler.controller = {\n      resume: () => {\n        if (state.aborted) {\n          return\n        }\n\n        state.paused = false\n        this.#flushWaitingHandler(waitingHandler)\n\n        if (\n          this.#completed &&\n          waitingHandler.pendingTrailers &&\n          waitingHandler.bufferedChunks.length === 0 &&\n          !state.paused &&\n          !state.aborted\n        ) {\n          try {\n            waitingHandler.handler.onResponseEnd?.(waitingHandler.controller, waitingHandler.pendingTrailers)\n          } catch {\n            // Ignore errors from waiting handlers\n          }\n\n          waitingHandler.pendingTrailers = null\n          waitingHandler.done = true\n        }\n\n        this.#pruneDoneWaitingHandlers()\n      },\n      pause: () => {\n        if (!state.aborted) {\n          state.paused = true\n        }\n      },\n      get paused () { return state.paused },\n      get aborted () { return state.aborted },\n      get reason () { return state.reason },\n      abort: (reason) => {\n        state.aborted = true\n        state.reason = reason ?? null\n        waitingHandler.done = true\n        waitingHandler.pendingTrailers = null\n        waitingHandler.bufferedChunks = []\n        waitingHandler.bufferedBytes = 0\n      }\n    }\n\n    return waitingHandler\n  }\n\n  /**\n   * @param {WaitingHandler} waitingHandler\n   * @param {Buffer} chunk\n   */\n  #bufferWaitingChunk (waitingHandler, chunk) {\n    if (waitingHandler.done || waitingHandler.controller.aborted) {\n      waitingHandler.done = true\n      waitingHandler.bufferedChunks = []\n      waitingHandler.bufferedBytes = 0\n      return\n    }\n\n    const bufferedChunk = Buffer.from(chunk)\n    waitingHandler.bufferedChunks.push(bufferedChunk)\n    waitingHandler.bufferedBytes += bufferedChunk.length\n\n    if (waitingHandler.bufferedBytes > this.#maxBufferSize) {\n      const err = new RequestAbortedError(`Deduplicated waiting handler exceeded maxBufferSize (${this.#maxBufferSize} bytes) while paused`)\n      this.#errorWaitingHandler(waitingHandler, err)\n    }\n  }\n\n  /**\n   * @param {WaitingHandler} waitingHandler\n   */\n  #flushWaitingHandler (waitingHandler) {\n    const { handler, controller } = waitingHandler\n\n    while (\n      !waitingHandler.done &&\n      !controller.aborted &&\n      !controller.paused &&\n      waitingHandler.bufferedChunks.length > 0\n    ) {\n      const bufferedChunk = waitingHandler.bufferedChunks.shift()\n      waitingHandler.bufferedBytes -= bufferedChunk.length\n\n      try {\n        handler.onResponseData?.(controller, bufferedChunk)\n      } catch {\n        // Ignore errors from waiting handlers\n      }\n\n      if (controller.aborted) {\n        waitingHandler.done = true\n        waitingHandler.pendingTrailers = null\n        waitingHandler.bufferedChunks = []\n        waitingHandler.bufferedBytes = 0\n        break\n      }\n    }\n  }\n\n  /**\n   * @param {WaitingHandler} waitingHandler\n   * @param {Error} err\n   */\n  #errorWaitingHandler (waitingHandler, err) {\n    if (waitingHandler.done) {\n      return\n    }\n\n    waitingHandler.done = true\n    waitingHandler.pendingTrailers = null\n    waitingHandler.bufferedChunks = []\n    waitingHandler.bufferedBytes = 0\n\n    try {\n      waitingHandler.controller.abort(err)\n      waitingHandler.handler.onResponseError?.(waitingHandler.controller, err)\n    } catch {\n      // Ignore errors from waiting handlers\n    }\n  }\n\n  #pruneDoneWaitingHandlers () {\n    this.#waitingHandlers = this.#waitingHandlers.filter(waitingHandler => waitingHandler.done === false)\n  }\n}\n\nmodule.exports = DeduplicationHandler\n", "'use strict'\n\nconst diagnosticsChannel = require('node:diagnostics_channel')\nconst util = require('../core/util')\nconst DeduplicationHandler = require('../handler/deduplication-handler')\nconst { normalizeHeaders, makeCacheKey, makeDeduplicationKey } = require('../util/cache.js')\n\nconst pendingRequestsChannel = diagnosticsChannel.channel('undici:request:pending-requests')\n\n/**\n * @param {import('../../types/interceptors.d.ts').default.DeduplicateInterceptorOpts} [opts]\n * @returns {import('../../types/dispatcher.d.ts').default.DispatcherComposeInterceptor}\n */\nmodule.exports = (opts = {}) => {\n  const {\n    methods = ['GET'],\n    skipHeaderNames = [],\n    excludeHeaderNames = [],\n    maxBufferSize = 5 * 1024 * 1024\n  } = opts\n\n  if (typeof opts !== 'object' || opts === null) {\n    throw new TypeError(`expected type of opts to be an Object, got ${opts === null ? 'null' : typeof opts}`)\n  }\n\n  if (!Array.isArray(methods)) {\n    throw new TypeError(`expected opts.methods to be an array, got ${typeof methods}`)\n  }\n\n  for (const method of methods) {\n    if (!util.safeHTTPMethods.includes(method)) {\n      throw new TypeError(`expected opts.methods to only contain safe HTTP methods, got ${method}`)\n    }\n  }\n\n  if (!Array.isArray(skipHeaderNames)) {\n    throw new TypeError(`expected opts.skipHeaderNames to be an array, got ${typeof skipHeaderNames}`)\n  }\n\n  if (!Array.isArray(excludeHeaderNames)) {\n    throw new TypeError(`expected opts.excludeHeaderNames to be an array, got ${typeof excludeHeaderNames}`)\n  }\n\n  if (!Number.isFinite(maxBufferSize) || maxBufferSize <= 0) {\n    throw new TypeError(`expected opts.maxBufferSize to be a positive finite number, got ${maxBufferSize}`)\n  }\n\n  // Convert to lowercase Set for case-insensitive header matching\n  const skipHeaderNamesSet = new Set(skipHeaderNames.map(name => name.toLowerCase()))\n\n  // Convert to lowercase Set for case-insensitive header exclusion from deduplication key\n  const excludeHeaderNamesSet = new Set(excludeHeaderNames.map(name => name.toLowerCase()))\n\n  /**\n   * Map of pending requests for deduplication\n   * @type {Map<string, DeduplicationHandler>}\n   */\n  const pendingRequests = new Map()\n\n  return dispatch => {\n    return (opts, handler) => {\n      if (!opts.origin || methods.includes(opts.method) === false) {\n        return dispatch(opts, handler)\n      }\n\n      opts = {\n        ...opts,\n        headers: normalizeHeaders(opts)\n      }\n\n      // Skip deduplication if request contains any of the specified headers\n      if (skipHeaderNamesSet.size > 0) {\n        for (const headerName of Object.keys(opts.headers)) {\n          if (skipHeaderNamesSet.has(headerName.toLowerCase())) {\n            return dispatch(opts, handler)\n          }\n        }\n      }\n\n      const cacheKey = makeCacheKey(opts)\n      const dedupeKey = makeDeduplicationKey(cacheKey, excludeHeaderNamesSet)\n\n      // Check if there's already a pending request for this key\n      const pendingHandler = pendingRequests.get(dedupeKey)\n      if (pendingHandler) {\n        // Add this handler to the waiting list when safe.\n        // If body streaming has already started, this request must be sent independently.\n        if (pendingHandler.addWaitingHandler(handler)) {\n          return true\n        }\n\n        return dispatch(opts, handler)\n      }\n\n      // Create a new deduplication handler\n      const deduplicationHandler = new DeduplicationHandler(\n        handler,\n        () => {\n          // Clean up when request completes\n          pendingRequests.delete(dedupeKey)\n          if (pendingRequestsChannel.hasSubscribers) {\n            pendingRequestsChannel.publish({ size: pendingRequests.size, key: dedupeKey, type: 'removed' })\n          }\n        },\n        maxBufferSize\n      )\n\n      // Register the pending request\n      pendingRequests.set(dedupeKey, deduplicationHandler)\n      if (pendingRequestsChannel.hasSubscribers) {\n        pendingRequestsChannel.publish({ size: pendingRequests.size, key: dedupeKey, type: 'added' })\n      }\n\n      return dispatch(opts, deduplicationHandler)\n    }\n  }\n}\n", "'use strict'\n\nconst { Writable } = require('node:stream')\nconst { assertCacheKey, assertCacheValue } = require('../util/cache.js')\n\nlet DatabaseSync\n\nconst VERSION = 3\n\n// 2gb\nconst MAX_ENTRY_SIZE = 2 * 1000 * 1000 * 1000\n\n/**\n * @typedef {import('../../types/cache-interceptor.d.ts').default.CacheStore} CacheStore\n * @implements {CacheStore}\n *\n * @typedef {{\n *  id: Readonly<number>,\n *  body?: Uint8Array\n *  statusCode: number\n *  statusMessage: string\n *  headers?: string\n *  vary?: string\n *  etag?: string\n *  cacheControlDirectives?: string\n *  cachedAt: number\n *  staleAt: number\n *  deleteAt: number\n * }} SqliteStoreValue\n */\nmodule.exports = class SqliteCacheStore {\n  #maxEntrySize = MAX_ENTRY_SIZE\n  #maxCount = Infinity\n\n  /**\n   * @type {import('node:sqlite').DatabaseSync}\n   */\n  #db\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #getValuesQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #updateValueQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #insertValueQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #deleteExpiredValuesQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #deleteByUrlQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync}\n   */\n  #countEntriesQuery\n\n  /**\n   * @type {import('node:sqlite').StatementSync | null}\n   */\n  #deleteOldValuesQuery\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.SqliteCacheStoreOpts | undefined} opts\n   */\n  constructor (opts) {\n    if (opts) {\n      if (typeof opts !== 'object') {\n        throw new TypeError('SqliteCacheStore options must be an object')\n      }\n\n      if (opts.maxEntrySize !== undefined) {\n        if (\n          typeof opts.maxEntrySize !== 'number' ||\n          !Number.isInteger(opts.maxEntrySize) ||\n          opts.maxEntrySize < 0\n        ) {\n          throw new TypeError('SqliteCacheStore options.maxEntrySize must be a non-negative integer')\n        }\n\n        if (opts.maxEntrySize > MAX_ENTRY_SIZE) {\n          throw new TypeError('SqliteCacheStore options.maxEntrySize must be less than 2gb')\n        }\n\n        this.#maxEntrySize = opts.maxEntrySize\n      }\n\n      if (opts.maxCount !== undefined) {\n        if (\n          typeof opts.maxCount !== 'number' ||\n          !Number.isInteger(opts.maxCount) ||\n          opts.maxCount < 0\n        ) {\n          throw new TypeError('SqliteCacheStore options.maxCount must be a non-negative integer')\n        }\n        this.#maxCount = opts.maxCount\n      }\n    }\n\n    if (!DatabaseSync) {\n      DatabaseSync = require('node:sqlite').DatabaseSync\n    }\n    this.#db = new DatabaseSync(opts?.location ?? ':memory:')\n\n    this.#db.exec(`\n      PRAGMA journal_mode = WAL;\n      PRAGMA synchronous = NORMAL;\n      PRAGMA temp_store = memory;\n      PRAGMA optimize;\n\n      CREATE TABLE IF NOT EXISTS cacheInterceptorV${VERSION} (\n        -- Data specific to us\n        id INTEGER PRIMARY KEY AUTOINCREMENT,\n        url TEXT NOT NULL,\n        method TEXT NOT NULL,\n\n        -- Data returned to the interceptor\n        body BUF NULL,\n        deleteAt INTEGER NOT NULL,\n        statusCode INTEGER NOT NULL,\n        statusMessage TEXT NOT NULL,\n        headers TEXT NULL,\n        cacheControlDirectives TEXT NULL,\n        etag TEXT NULL,\n        vary TEXT NULL,\n        cachedAt INTEGER NOT NULL,\n        staleAt INTEGER NOT NULL\n      );\n\n      CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION}_getValuesQuery ON cacheInterceptorV${VERSION}(url, method, deleteAt);\n      CREATE INDEX IF NOT EXISTS idx_cacheInterceptorV${VERSION}_deleteByUrlQuery ON cacheInterceptorV${VERSION}(deleteAt);\n    `)\n\n    this.#getValuesQuery = this.#db.prepare(`\n      SELECT\n        id,\n        body,\n        deleteAt,\n        statusCode,\n        statusMessage,\n        headers,\n        etag,\n        cacheControlDirectives,\n        vary,\n        cachedAt,\n        staleAt\n      FROM cacheInterceptorV${VERSION}\n      WHERE\n        url = ?\n        AND method = ?\n      ORDER BY\n        deleteAt ASC\n    `)\n\n    this.#updateValueQuery = this.#db.prepare(`\n      UPDATE cacheInterceptorV${VERSION} SET\n        body = ?,\n        deleteAt = ?,\n        statusCode = ?,\n        statusMessage = ?,\n        headers = ?,\n        etag = ?,\n        cacheControlDirectives = ?,\n        cachedAt = ?,\n        staleAt = ?\n      WHERE\n        id = ?\n    `)\n\n    this.#insertValueQuery = this.#db.prepare(`\n      INSERT INTO cacheInterceptorV${VERSION} (\n        url,\n        method,\n        body,\n        deleteAt,\n        statusCode,\n        statusMessage,\n        headers,\n        etag,\n        cacheControlDirectives,\n        vary,\n        cachedAt,\n        staleAt\n      ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n    `)\n\n    this.#deleteByUrlQuery = this.#db.prepare(\n      `DELETE FROM cacheInterceptorV${VERSION} WHERE url = ?`\n    )\n\n    this.#countEntriesQuery = this.#db.prepare(\n      `SELECT COUNT(*) AS total FROM cacheInterceptorV${VERSION}`\n    )\n\n    this.#deleteExpiredValuesQuery = this.#db.prepare(\n      `DELETE FROM cacheInterceptorV${VERSION} WHERE deleteAt <= ?`\n    )\n\n    this.#deleteOldValuesQuery = this.#maxCount === Infinity\n      ? null\n      : this.#db.prepare(`\n        DELETE FROM cacheInterceptorV${VERSION}\n        WHERE id IN (\n          SELECT\n            id\n          FROM cacheInterceptorV${VERSION}\n          ORDER BY cachedAt ASC\n          LIMIT ?\n        )\n      `)\n  }\n\n  close () {\n    this.#db.close()\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @returns {(import('../../types/cache-interceptor.d.ts').default.GetResult & { body?: Buffer }) | undefined}\n   */\n  get (key) {\n    assertCacheKey(key)\n\n    const value = this.#findValue(key)\n    return value\n      ? {\n          body: value.body ? Buffer.from(value.body.buffer, value.body.byteOffset, value.body.byteLength) : undefined,\n          statusCode: value.statusCode,\n          statusMessage: value.statusMessage,\n          headers: value.headers ? JSON.parse(value.headers) : undefined,\n          etag: value.etag ? value.etag : undefined,\n          vary: value.vary ? JSON.parse(value.vary) : undefined,\n          cacheControlDirectives: value.cacheControlDirectives\n            ? JSON.parse(value.cacheControlDirectives)\n            : undefined,\n          cachedAt: value.cachedAt,\n          staleAt: value.staleAt,\n          deleteAt: value.deleteAt\n        }\n      : undefined\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheValue & { body: null | Buffer | Array<Buffer>}} value\n   */\n  set (key, value) {\n    assertCacheKey(key)\n\n    const url = this.#makeValueUrl(key)\n    const body = Array.isArray(value.body) ? Buffer.concat(value.body) : value.body\n    const size = body?.byteLength\n\n    if (size && size > this.#maxEntrySize) {\n      return\n    }\n\n    const existingValue = this.#findValue(key, true)\n    if (existingValue) {\n      // Updating an existing response, let's overwrite it\n      this.#updateValueQuery.run(\n        body,\n        value.deleteAt,\n        value.statusCode,\n        value.statusMessage,\n        value.headers ? JSON.stringify(value.headers) : null,\n        value.etag ? value.etag : null,\n        value.cacheControlDirectives ? JSON.stringify(value.cacheControlDirectives) : null,\n        value.cachedAt,\n        value.staleAt,\n        existingValue.id\n      )\n    } else {\n      // New response, let's insert it\n      this.#insertValueQuery.run(\n        url,\n        key.method,\n        body,\n        value.deleteAt,\n        value.statusCode,\n        value.statusMessage,\n        value.headers ? JSON.stringify(value.headers) : null,\n        value.etag ? value.etag : null,\n        value.cacheControlDirectives ? JSON.stringify(value.cacheControlDirectives) : null,\n        value.vary ? JSON.stringify(value.vary) : null,\n        value.cachedAt,\n        value.staleAt\n      )\n      this.#prune()\n    }\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheValue} value\n   * @returns {Writable | undefined}\n   */\n  createWriteStream (key, value) {\n    assertCacheKey(key)\n    assertCacheValue(value)\n\n    let size = 0\n    /**\n     * @type {Buffer[] | null}\n     */\n    const body = []\n    const store = this\n\n    return new Writable({\n      decodeStrings: true,\n      write (chunk, encoding, callback) {\n        size += chunk.byteLength\n\n        if (size < store.#maxEntrySize) {\n          body.push(chunk)\n        } else {\n          this.destroy()\n        }\n\n        callback()\n      },\n      final (callback) {\n        store.set(key, { ...value, body })\n        callback()\n      }\n    })\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   */\n  delete (key) {\n    if (typeof key !== 'object') {\n      throw new TypeError(`expected key to be object, got ${typeof key}`)\n    }\n\n    this.#deleteByUrlQuery.run(this.#makeValueUrl(key))\n  }\n\n  #prune () {\n    if (Number.isFinite(this.#maxCount) && this.size <= this.#maxCount) {\n      return 0\n    }\n\n    {\n      const removed = this.#deleteExpiredValuesQuery.run(Date.now()).changes\n      if (removed) {\n        return removed\n      }\n    }\n\n    {\n      const removed = this.#deleteOldValuesQuery?.run(Math.max(Math.floor(this.#maxCount * 0.1), 1)).changes\n      if (removed) {\n        return removed\n      }\n    }\n\n    return 0\n  }\n\n  /**\n   * Counts the number of rows in the cache\n   * @returns {Number}\n   */\n  get size () {\n    const { total } = this.#countEntriesQuery.get()\n    return total\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @returns {string}\n   */\n  #makeValueUrl (key) {\n    return `${key.origin}/${key.path}`\n  }\n\n  /**\n   * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} key\n   * @param {boolean} [canBeExpired=false]\n   * @returns {SqliteStoreValue | undefined}\n   */\n  #findValue (key, canBeExpired = false) {\n    const url = this.#makeValueUrl(key)\n    const { headers, method } = key\n\n    /**\n     * @type {SqliteStoreValue[]}\n     */\n    const values = this.#getValuesQuery.all(url, method)\n\n    if (values.length === 0) {\n      return undefined\n    }\n\n    const now = Date.now()\n    for (const value of values) {\n      if (now >= value.deleteAt && !canBeExpired) {\n        continue\n      }\n\n      let matches = true\n\n      if (value.vary) {\n        const vary = JSON.parse(value.vary)\n\n        for (const header in vary) {\n          if (!headerValueEquals(headers[header], vary[header])) {\n            matches = false\n            break\n          }\n        }\n      }\n\n      if (matches) {\n        return value\n      }\n    }\n\n    return undefined\n  }\n}\n\n/**\n * @param {string|string[]|null|undefined} lhs\n * @param {string|string[]|null|undefined} rhs\n * @returns {boolean}\n */\nfunction headerValueEquals (lhs, rhs) {\n  if (lhs == null && rhs == null) {\n    return true\n  }\n\n  if ((lhs == null && rhs != null) ||\n      (lhs != null && rhs == null)) {\n    return false\n  }\n\n  if (Array.isArray(lhs) && Array.isArray(rhs)) {\n    if (lhs.length !== rhs.length) {\n      return false\n    }\n\n    for (let i = 0; i < lhs.length; i++) {\n      if (lhs[i] !== rhs[i]) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  return lhs === rhs\n}\n", "// https://github.com/Ethan-Arrowood/undici-fetch\n\n'use strict'\n\nconst { kConstruct } = require('../../core/symbols')\nconst { kEnumerableProperty } = require('../../core/util')\nconst {\n  iteratorMixin,\n  isValidHeaderName,\n  isValidHeaderValue\n} = require('./util')\nconst { webidl } = require('../webidl')\nconst assert = require('node:assert')\nconst util = require('node:util')\n\n/**\n * @param {number} code\n * @returns {code is (0x0a | 0x0d | 0x09 | 0x20)}\n */\nfunction isHTTPWhiteSpaceCharCode (code) {\n  return code === 0x0a || code === 0x0d || code === 0x09 || code === 0x20\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-header-value-normalize\n * @param {string} potentialValue\n * @returns {string}\n */\nfunction headerValueNormalize (potentialValue) {\n  //  To normalize a byte sequence potentialValue, remove\n  //  any leading and trailing HTTP whitespace bytes from\n  //  potentialValue.\n  let i = 0; let j = potentialValue.length\n\n  while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(j - 1))) --j\n  while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(i))) ++i\n\n  return i === 0 && j === potentialValue.length ? potentialValue : potentialValue.substring(i, j)\n}\n\n/**\n * @param {Headers} headers\n * @param {Array|Object} object\n */\nfunction fill (headers, object) {\n  // To fill a Headers object headers with a given object object, run these steps:\n\n  // 1. If object is a sequence, then for each header in object:\n  // Note: webidl conversion to array has already been done.\n  if (Array.isArray(object)) {\n    for (let i = 0; i < object.length; ++i) {\n      const header = object[i]\n      // 1. If header does not contain exactly two items, then throw a TypeError.\n      if (header.length !== 2) {\n        throw webidl.errors.exception({\n          header: 'Headers constructor',\n          message: `expected name/value pair to be length 2, found ${header.length}.`\n        })\n      }\n\n      // 2. Append (header\u2019s first item, header\u2019s second item) to headers.\n      appendHeader(headers, header[0], header[1])\n    }\n  } else if (typeof object === 'object' && object !== null) {\n    // Note: null should throw\n\n    // 2. Otherwise, object is a record, then for each key \u2192 value in object,\n    //    append (key, value) to headers\n    const keys = Object.keys(object)\n    for (let i = 0; i < keys.length; ++i) {\n      appendHeader(headers, keys[i], object[keys[i]])\n    }\n  } else {\n    throw webidl.errors.conversionFailed({\n      prefix: 'Headers constructor',\n      argument: 'Argument 1',\n      types: ['sequence<sequence<ByteString>>', 'record<ByteString, ByteString>']\n    })\n  }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#concept-headers-append\n * @param {Headers} headers\n * @param {string} name\n * @param {string} value\n */\nfunction appendHeader (headers, name, value) {\n  // 1. Normalize value.\n  value = headerValueNormalize(value)\n\n  // 2. If name is not a header name or value is not a\n  //    header value, then throw a TypeError.\n  if (!isValidHeaderName(name)) {\n    throw webidl.errors.invalidArgument({\n      prefix: 'Headers.append',\n      value: name,\n      type: 'header name'\n    })\n  } else if (!isValidHeaderValue(value)) {\n    throw webidl.errors.invalidArgument({\n      prefix: 'Headers.append',\n      value,\n      type: 'header value'\n    })\n  }\n\n  // 3. If headers\u2019s guard is \"immutable\", then throw a TypeError.\n  // 4. Otherwise, if headers\u2019s guard is \"request\" and name is a\n  //    forbidden header name, return.\n  // 5. Otherwise, if headers\u2019s guard is \"request-no-cors\":\n  //    TODO\n  // Note: undici does not implement forbidden header names\n  if (getHeadersGuard(headers) === 'immutable') {\n    throw new TypeError('immutable')\n  }\n\n  // 6. Otherwise, if headers\u2019s guard is \"response\" and name is a\n  //    forbidden response-header name, return.\n\n  // 7. Append (name, value) to headers\u2019s header list.\n  return getHeadersList(headers).append(name, value, false)\n\n  // 8. If headers\u2019s guard is \"request-no-cors\", then remove\n  //    privileged no-CORS request headers from headers\n}\n\n// https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n/**\n * @param {Headers} target\n */\nfunction headersListSortAndCombine (target) {\n  const headersList = getHeadersList(target)\n\n  if (!headersList) {\n    return []\n  }\n\n  if (headersList.sortedMap) {\n    return headersList.sortedMap\n  }\n\n  // 1. Let headers be an empty list of headers with the key being the name\n  //    and value the value.\n  const headers = []\n\n  // 2. Let names be the result of convert header names to a sorted-lowercase\n  //    set with all the names of the headers in list.\n  const names = headersList.toSortedArray()\n\n  const cookies = headersList.cookies\n\n  // fast-path\n  if (cookies === null || cookies.length === 1) {\n    // Note: The non-null assertion of value has already been done by `HeadersList#toSortedArray`\n    return (headersList.sortedMap = names)\n  }\n\n  // 3. For each name of names:\n  for (let i = 0; i < names.length; ++i) {\n    const { 0: name, 1: value } = names[i]\n    // 1. If name is `set-cookie`, then:\n    if (name === 'set-cookie') {\n      // 1. Let values be a list of all values of headers in list whose name\n      //    is a byte-case-insensitive match for name, in order.\n\n      // 2. For each value of values:\n      // 1. Append (name, value) to headers.\n      for (let j = 0; j < cookies.length; ++j) {\n        headers.push([name, cookies[j]])\n      }\n    } else {\n      // 2. Otherwise:\n\n      // 1. Let value be the result of getting name from list.\n\n      // 2. Assert: value is non-null.\n      // Note: This operation was done by `HeadersList#toSortedArray`.\n\n      // 3. Append (name, value) to headers.\n      headers.push([name, value])\n    }\n  }\n\n  // 4. Return headers.\n  return (headersList.sortedMap = headers)\n}\n\nfunction compareHeaderName (a, b) {\n  return a[0] < b[0] ? -1 : 1\n}\n\nclass HeadersList {\n  /** @type {[string, string][]|null} */\n  cookies = null\n\n  sortedMap\n  headersMap\n\n  constructor (init) {\n    if (init instanceof HeadersList) {\n      this.headersMap = new Map(init.headersMap)\n      this.sortedMap = init.sortedMap\n      this.cookies = init.cookies === null ? null : [...init.cookies]\n    } else {\n      this.headersMap = new Map(init)\n      this.sortedMap = null\n    }\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#header-list-contains\n   * @param {string} name\n   * @param {boolean} isLowerCase\n   */\n  contains (name, isLowerCase) {\n    // A header list list contains a header name name if list\n    // contains a header whose name is a byte-case-insensitive\n    // match for name.\n\n    return this.headersMap.has(isLowerCase ? name : name.toLowerCase())\n  }\n\n  clear () {\n    this.headersMap.clear()\n    this.sortedMap = null\n    this.cookies = null\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#concept-header-list-append\n   * @param {string} name\n   * @param {string} value\n   * @param {boolean} isLowerCase\n   */\n  append (name, value, isLowerCase) {\n    this.sortedMap = null\n\n    // 1. If list contains name, then set name to the first such\n    //    header\u2019s name.\n    const lowercaseName = isLowerCase ? name : name.toLowerCase()\n    const exists = this.headersMap.get(lowercaseName)\n\n    // 2. Append (name, value) to list.\n    if (exists) {\n      const delimiter = lowercaseName === 'cookie' ? '; ' : ', '\n      this.headersMap.set(lowercaseName, {\n        name: exists.name,\n        value: `${exists.value}${delimiter}${value}`\n      })\n    } else {\n      this.headersMap.set(lowercaseName, { name, value })\n    }\n\n    if (lowercaseName === 'set-cookie') {\n      (this.cookies ??= []).push(value)\n    }\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#concept-header-list-set\n   * @param {string} name\n   * @param {string} value\n   * @param {boolean} isLowerCase\n   */\n  set (name, value, isLowerCase) {\n    this.sortedMap = null\n    const lowercaseName = isLowerCase ? name : name.toLowerCase()\n\n    if (lowercaseName === 'set-cookie') {\n      this.cookies = [value]\n    }\n\n    // 1. If list contains name, then set the value of\n    //    the first such header to value and remove the\n    //    others.\n    // 2. Otherwise, append header (name, value) to list.\n    this.headersMap.set(lowercaseName, { name, value })\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#concept-header-list-delete\n   * @param {string} name\n   * @param {boolean} isLowerCase\n   */\n  delete (name, isLowerCase) {\n    this.sortedMap = null\n    if (!isLowerCase) name = name.toLowerCase()\n\n    if (name === 'set-cookie') {\n      this.cookies = null\n    }\n\n    this.headersMap.delete(name)\n  }\n\n  /**\n   * @see https://fetch.spec.whatwg.org/#concept-header-list-get\n   * @param {string} name\n   * @param {boolean} isLowerCase\n   * @returns {string | null}\n   */\n  get (name, isLowerCase) {\n    // 1. If list does not contain name, then return null.\n    // 2. Return the values of all headers in list whose name\n    //    is a byte-case-insensitive match for name,\n    //    separated from each other by 0x2C 0x20, in order.\n    return this.headersMap.get(isLowerCase ? name : name.toLowerCase())?.value ?? null\n  }\n\n  * [Symbol.iterator] () {\n    // use the lowercased name\n    for (const { 0: name, 1: { value } } of this.headersMap) {\n      yield [name, value]\n    }\n  }\n\n  get entries () {\n    const headers = {}\n\n    if (this.headersMap.size !== 0) {\n      for (const { name, value } of this.headersMap.values()) {\n        headers[name] = value\n      }\n    }\n\n    return headers\n  }\n\n  rawValues () {\n    return this.headersMap.values()\n  }\n\n  get entriesList () {\n    const headers = []\n\n    if (this.headersMap.size !== 0) {\n      for (const { 0: lowerName, 1: { name, value } } of this.headersMap) {\n        if (lowerName === 'set-cookie') {\n          for (const cookie of this.cookies) {\n            headers.push([name, cookie])\n          }\n        } else {\n          headers.push([name, value])\n        }\n      }\n    }\n\n    return headers\n  }\n\n  // https://fetch.spec.whatwg.org/#convert-header-names-to-a-sorted-lowercase-set\n  toSortedArray () {\n    const size = this.headersMap.size\n    const array = new Array(size)\n    // In most cases, you will use the fast-path.\n    // fast-path: Use binary insertion sort for small arrays.\n    if (size <= 32) {\n      if (size === 0) {\n        // If empty, it is an empty array. To avoid the first index assignment.\n        return array\n      }\n      // Improve performance by unrolling loop and avoiding double-loop.\n      // Double-loop-less version of the binary insertion sort.\n      const iterator = this.headersMap[Symbol.iterator]()\n      const firstValue = iterator.next().value\n      // set [name, value] to first index.\n      array[0] = [firstValue[0], firstValue[1].value]\n      // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n      // 3.2.2. Assert: value is non-null.\n      assert(firstValue[1].value !== null)\n      for (\n        let i = 1, j = 0, right = 0, left = 0, pivot = 0, x, value;\n        i < size;\n        ++i\n      ) {\n        // get next value\n        value = iterator.next().value\n        // set [name, value] to current index.\n        x = array[i] = [value[0], value[1].value]\n        // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n        // 3.2.2. Assert: value is non-null.\n        assert(x[1] !== null)\n        left = 0\n        right = i\n        // binary search\n        while (left < right) {\n          // middle index\n          pivot = left + ((right - left) >> 1)\n          // compare header name\n          if (array[pivot][0] <= x[0]) {\n            left = pivot + 1\n          } else {\n            right = pivot\n          }\n        }\n        if (i !== pivot) {\n          j = i\n          while (j > left) {\n            array[j] = array[--j]\n          }\n          array[left] = x\n        }\n      }\n      /* c8 ignore next 4 */\n      if (!iterator.next().done) {\n        // This is for debugging and will never be called.\n        throw new TypeError('Unreachable')\n      }\n      return array\n    } else {\n      // This case would be a rare occurrence.\n      // slow-path: fallback\n      let i = 0\n      for (const { 0: name, 1: { value } } of this.headersMap) {\n        array[i++] = [name, value]\n        // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n        // 3.2.2. Assert: value is non-null.\n        assert(value !== null)\n      }\n      return array.sort(compareHeaderName)\n    }\n  }\n}\n\n// https://fetch.spec.whatwg.org/#headers-class\nclass Headers {\n  #guard\n  /**\n   * @type {HeadersList}\n   */\n  #headersList\n\n  /**\n   * @param {HeadersInit|Symbol} [init]\n   * @returns\n   */\n  constructor (init = undefined) {\n    webidl.util.markAsUncloneable(this)\n\n    if (init === kConstruct) {\n      return\n    }\n\n    this.#headersList = new HeadersList()\n\n    // The new Headers(init) constructor steps are:\n\n    // 1. Set this\u2019s guard to \"none\".\n    this.#guard = 'none'\n\n    // 2. If init is given, then fill this with init.\n    if (init !== undefined) {\n      init = webidl.converters.HeadersInit(init, 'Headers constructor', 'init')\n      fill(this, init)\n    }\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-append\n  append (name, value) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 2, 'Headers.append')\n\n    const prefix = 'Headers.append'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n    value = webidl.converters.ByteString(value, prefix, 'value')\n\n    return appendHeader(this, name, value)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-delete\n  delete (name) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 1, 'Headers.delete')\n\n    const prefix = 'Headers.delete'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n\n    // 1. If name is not a header name, then throw a TypeError.\n    if (!isValidHeaderName(name)) {\n      throw webidl.errors.invalidArgument({\n        prefix: 'Headers.delete',\n        value: name,\n        type: 'header name'\n      })\n    }\n\n    // 2. If this\u2019s guard is \"immutable\", then throw a TypeError.\n    // 3. Otherwise, if this\u2019s guard is \"request\" and name is a\n    //    forbidden header name, return.\n    // 4. Otherwise, if this\u2019s guard is \"request-no-cors\", name\n    //    is not a no-CORS-safelisted request-header name, and\n    //    name is not a privileged no-CORS request-header name,\n    //    return.\n    // 5. Otherwise, if this\u2019s guard is \"response\" and name is\n    //    a forbidden response-header name, return.\n    // Note: undici does not implement forbidden header names\n    if (this.#guard === 'immutable') {\n      throw new TypeError('immutable')\n    }\n\n    // 6. If this\u2019s header list does not contain name, then\n    //    return.\n    if (!this.#headersList.contains(name, false)) {\n      return\n    }\n\n    // 7. Delete name from this\u2019s header list.\n    // 8. If this\u2019s guard is \"request-no-cors\", then remove\n    //    privileged no-CORS request headers from this.\n    this.#headersList.delete(name, false)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-get\n  get (name) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 1, 'Headers.get')\n\n    const prefix = 'Headers.get'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n\n    // 1. If name is not a header name, then throw a TypeError.\n    if (!isValidHeaderName(name)) {\n      throw webidl.errors.invalidArgument({\n        prefix,\n        value: name,\n        type: 'header name'\n      })\n    }\n\n    // 2. Return the result of getting name from this\u2019s header\n    //    list.\n    return this.#headersList.get(name, false)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-has\n  has (name) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 1, 'Headers.has')\n\n    const prefix = 'Headers.has'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n\n    // 1. If name is not a header name, then throw a TypeError.\n    if (!isValidHeaderName(name)) {\n      throw webidl.errors.invalidArgument({\n        prefix,\n        value: name,\n        type: 'header name'\n      })\n    }\n\n    // 2. Return true if this\u2019s header list contains name;\n    //    otherwise false.\n    return this.#headersList.contains(name, false)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-set\n  set (name, value) {\n    webidl.brandCheck(this, Headers)\n\n    webidl.argumentLengthCheck(arguments, 2, 'Headers.set')\n\n    const prefix = 'Headers.set'\n    name = webidl.converters.ByteString(name, prefix, 'name')\n    value = webidl.converters.ByteString(value, prefix, 'value')\n\n    // 1. Normalize value.\n    value = headerValueNormalize(value)\n\n    // 2. If name is not a header name or value is not a\n    //    header value, then throw a TypeError.\n    if (!isValidHeaderName(name)) {\n      throw webidl.errors.invalidArgument({\n        prefix,\n        value: name,\n        type: 'header name'\n      })\n    } else if (!isValidHeaderValue(value)) {\n      throw webidl.errors.invalidArgument({\n        prefix,\n        value,\n        type: 'header value'\n      })\n    }\n\n    // 3. If this\u2019s guard is \"immutable\", then throw a TypeError.\n    // 4. Otherwise, if this\u2019s guard is \"request\" and name is a\n    //    forbidden header name, return.\n    // 5. Otherwise, if this\u2019s guard is \"request-no-cors\" and\n    //    name/value is not a no-CORS-safelisted request-header,\n    //    return.\n    // 6. Otherwise, if this\u2019s guard is \"response\" and name is a\n    //    forbidden response-header name, return.\n    // Note: undici does not implement forbidden header names\n    if (this.#guard === 'immutable') {\n      throw new TypeError('immutable')\n    }\n\n    // 7. Set (name, value) in this\u2019s header list.\n    // 8. If this\u2019s guard is \"request-no-cors\", then remove\n    //    privileged no-CORS request headers from this\n    this.#headersList.set(name, value, false)\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-headers-getsetcookie\n  getSetCookie () {\n    webidl.brandCheck(this, Headers)\n\n    // 1. If this\u2019s header list does not contain `Set-Cookie`, then return \u00AB \u00BB.\n    // 2. Return the values of all headers in this\u2019s header list whose name is\n    //    a byte-case-insensitive match for `Set-Cookie`, in order.\n\n    const list = this.#headersList.cookies\n\n    if (list) {\n      return [...list]\n    }\n\n    return []\n  }\n\n  [util.inspect.custom] (depth, options) {\n    options.depth ??= depth\n\n    return `Headers ${util.formatWithOptions(options, this.#headersList.entries)}`\n  }\n\n  static getHeadersGuard (o) {\n    return o.#guard\n  }\n\n  static setHeadersGuard (o, guard) {\n    o.#guard = guard\n  }\n\n  /**\n   * @param {Headers} o\n   */\n  static getHeadersList (o) {\n    return o.#headersList\n  }\n\n  /**\n   * @param {Headers} target\n   * @param {HeadersList} list\n   */\n  static setHeadersList (target, list) {\n    target.#headersList = list\n  }\n}\n\nconst { getHeadersGuard, setHeadersGuard, getHeadersList, setHeadersList } = Headers\nReflect.deleteProperty(Headers, 'getHeadersGuard')\nReflect.deleteProperty(Headers, 'setHeadersGuard')\nReflect.deleteProperty(Headers, 'getHeadersList')\nReflect.deleteProperty(Headers, 'setHeadersList')\n\niteratorMixin('Headers', Headers, headersListSortAndCombine, 0, 1)\n\nObject.defineProperties(Headers.prototype, {\n  append: kEnumerableProperty,\n  delete: kEnumerableProperty,\n  get: kEnumerableProperty,\n  has: kEnumerableProperty,\n  set: kEnumerableProperty,\n  getSetCookie: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'Headers',\n    configurable: true\n  },\n  [util.inspect.custom]: {\n    enumerable: false\n  }\n})\n\nwebidl.converters.HeadersInit = function (V, prefix, argument) {\n  if (webidl.util.Type(V) === webidl.util.Types.OBJECT) {\n    const iterator = Reflect.get(V, Symbol.iterator)\n\n    // A work-around to ensure we send the properly-cased Headers when V is a Headers object.\n    // Read https://github.com/nodejs/undici/pull/3159#issuecomment-2075537226 before touching, please.\n    if (!util.types.isProxy(V) && iterator === Headers.prototype.entries) { // Headers object\n      try {\n        return getHeadersList(V).entriesList\n      } catch {\n        // fall-through\n      }\n    }\n\n    if (typeof iterator === 'function') {\n      return webidl.converters['sequence<sequence<ByteString>>'](V, prefix, argument, iterator.bind(V))\n    }\n\n    return webidl.converters['record<ByteString, ByteString>'](V, prefix, argument)\n  }\n\n  throw webidl.errors.conversionFailed({\n    prefix: 'Headers constructor',\n    argument: 'Argument 1',\n    types: ['sequence<sequence<ByteString>>', 'record<ByteString, ByteString>']\n  })\n}\n\nmodule.exports = {\n  fill,\n  // for test.\n  compareHeaderName,\n  Headers,\n  HeadersList,\n  getHeadersGuard,\n  setHeadersGuard,\n  setHeadersList,\n  getHeadersList\n}\n", "'use strict'\n\nconst { Headers, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require('./headers')\nconst { extractBody, cloneBody, mixinBody, streamRegistry, bodyUnusable } = require('./body')\nconst util = require('../../core/util')\nconst nodeUtil = require('node:util')\nconst { kEnumerableProperty } = util\nconst {\n  isValidReasonPhrase,\n  isCancelled,\n  isAborted,\n  isErrorLike,\n  environmentSettingsObject: relevantRealm\n} = require('./util')\nconst {\n  redirectStatusSet,\n  nullBodyStatus\n} = require('./constants')\nconst { webidl } = require('../webidl')\nconst { URLSerializer } = require('./data-url')\nconst { kConstruct } = require('../../core/symbols')\nconst assert = require('node:assert')\nconst { isomorphicEncode, serializeJavascriptValueToJSONString } = require('../infra')\n\nconst textEncoder = new TextEncoder('utf-8')\n\n// https://fetch.spec.whatwg.org/#response-class\nclass Response {\n  /** @type {Headers} */\n  #headers\n\n  #state\n\n  // Creates network error Response.\n  static error () {\n    // The static error() method steps are to return the result of creating a\n    // Response object, given a new network error, \"immutable\", and this\u2019s\n    // relevant Realm.\n    const responseObject = fromInnerResponse(makeNetworkError(), 'immutable')\n\n    return responseObject\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-response-json\n  static json (data, init = undefined) {\n    webidl.argumentLengthCheck(arguments, 1, 'Response.json')\n\n    if (init !== null) {\n      init = webidl.converters.ResponseInit(init)\n    }\n\n    // 1. Let bytes the result of running serialize a JavaScript value to JSON bytes on data.\n    const bytes = textEncoder.encode(\n      serializeJavascriptValueToJSONString(data)\n    )\n\n    // 2. Let body be the result of extracting bytes.\n    const body = extractBody(bytes)\n\n    // 3. Let responseObject be the result of creating a Response object, given a new response,\n    //    \"response\", and this\u2019s relevant Realm.\n    const responseObject = fromInnerResponse(makeResponse({}), 'response')\n\n    // 4. Perform initialize a response given responseObject, init, and (body, \"application/json\").\n    initializeResponse(responseObject, init, { body: body[0], type: 'application/json' })\n\n    // 5. Return responseObject.\n    return responseObject\n  }\n\n  // Creates a redirect Response that redirects to url with status status.\n  static redirect (url, status = 302) {\n    webidl.argumentLengthCheck(arguments, 1, 'Response.redirect')\n\n    url = webidl.converters.USVString(url)\n    status = webidl.converters['unsigned short'](status)\n\n    // 1. Let parsedURL be the result of parsing url with current settings\n    // object\u2019s API base URL.\n    // 2. If parsedURL is failure, then throw a TypeError.\n    // TODO: base-URL?\n    let parsedURL\n    try {\n      parsedURL = new URL(url, relevantRealm.settingsObject.baseUrl)\n    } catch (err) {\n      throw new TypeError(`Failed to parse URL from ${url}`, { cause: err })\n    }\n\n    // 3. If status is not a redirect status, then throw a RangeError.\n    if (!redirectStatusSet.has(status)) {\n      throw new RangeError(`Invalid status code ${status}`)\n    }\n\n    // 4. Let responseObject be the result of creating a Response object,\n    // given a new response, \"immutable\", and this\u2019s relevant Realm.\n    const responseObject = fromInnerResponse(makeResponse({}), 'immutable')\n\n    // 5. Set responseObject\u2019s response\u2019s status to status.\n    responseObject.#state.status = status\n\n    // 6. Let value be parsedURL, serialized and isomorphic encoded.\n    const value = isomorphicEncode(URLSerializer(parsedURL))\n\n    // 7. Append `Location`/value to responseObject\u2019s response\u2019s header list.\n    responseObject.#state.headersList.append('location', value, true)\n\n    // 8. Return responseObject.\n    return responseObject\n  }\n\n  // https://fetch.spec.whatwg.org/#dom-response\n  constructor (body = null, init = undefined) {\n    webidl.util.markAsUncloneable(this)\n\n    if (body === kConstruct) {\n      return\n    }\n\n    if (body !== null) {\n      body = webidl.converters.BodyInit(body, 'Response', 'body')\n    }\n\n    init = webidl.converters.ResponseInit(init)\n\n    // 1. Set this\u2019s response to a new response.\n    this.#state = makeResponse({})\n\n    // 2. Set this\u2019s headers to a new Headers object with this\u2019s relevant\n    // Realm, whose header list is this\u2019s response\u2019s header list and guard\n    // is \"response\".\n    this.#headers = new Headers(kConstruct)\n    setHeadersGuard(this.#headers, 'response')\n    setHeadersList(this.#headers, this.#state.headersList)\n\n    // 3. Let bodyWithType be null.\n    let bodyWithType = null\n\n    // 4. If body is non-null, then set bodyWithType to the result of extracting body.\n    if (body != null) {\n      const [extractedBody, type] = extractBody(body)\n      bodyWithType = { body: extractedBody, type }\n    }\n\n    // 5. Perform initialize a response given this, init, and bodyWithType.\n    initializeResponse(this, init, bodyWithType)\n  }\n\n  // Returns response\u2019s type, e.g., \"cors\".\n  get type () {\n    webidl.brandCheck(this, Response)\n\n    // The type getter steps are to return this\u2019s response\u2019s type.\n    return this.#state.type\n  }\n\n  // Returns response\u2019s URL, if it has one; otherwise the empty string.\n  get url () {\n    webidl.brandCheck(this, Response)\n\n    const urlList = this.#state.urlList\n\n    // The url getter steps are to return the empty string if this\u2019s\n    // response\u2019s URL is null; otherwise this\u2019s response\u2019s URL,\n    // serialized with exclude fragment set to true.\n    const url = urlList[urlList.length - 1] ?? null\n\n    if (url === null) {\n      return ''\n    }\n\n    return URLSerializer(url, true)\n  }\n\n  // Returns whether response was obtained through a redirect.\n  get redirected () {\n    webidl.brandCheck(this, Response)\n\n    // The redirected getter steps are to return true if this\u2019s response\u2019s URL\n    // list has more than one item; otherwise false.\n    return this.#state.urlList.length > 1\n  }\n\n  // Returns response\u2019s status.\n  get status () {\n    webidl.brandCheck(this, Response)\n\n    // The status getter steps are to return this\u2019s response\u2019s status.\n    return this.#state.status\n  }\n\n  // Returns whether response\u2019s status is an ok status.\n  get ok () {\n    webidl.brandCheck(this, Response)\n\n    // The ok getter steps are to return true if this\u2019s response\u2019s status is an\n    // ok status; otherwise false.\n    return this.#state.status >= 200 && this.#state.status <= 299\n  }\n\n  // Returns response\u2019s status message.\n  get statusText () {\n    webidl.brandCheck(this, Response)\n\n    // The statusText getter steps are to return this\u2019s response\u2019s status\n    // message.\n    return this.#state.statusText\n  }\n\n  // Returns response\u2019s headers as Headers.\n  get headers () {\n    webidl.brandCheck(this, Response)\n\n    // The headers getter steps are to return this\u2019s headers.\n    return this.#headers\n  }\n\n  get body () {\n    webidl.brandCheck(this, Response)\n\n    return this.#state.body ? this.#state.body.stream : null\n  }\n\n  get bodyUsed () {\n    webidl.brandCheck(this, Response)\n\n    return !!this.#state.body && util.isDisturbed(this.#state.body.stream)\n  }\n\n  // Returns a clone of response.\n  clone () {\n    webidl.brandCheck(this, Response)\n\n    // 1. If this is unusable, then throw a TypeError.\n    if (bodyUnusable(this.#state)) {\n      throw webidl.errors.exception({\n        header: 'Response.clone',\n        message: 'Body has already been consumed.'\n      })\n    }\n\n    // 2. Let clonedResponse be the result of cloning this\u2019s response.\n    const clonedResponse = cloneResponse(this.#state)\n\n    // Note: To re-register because of a new stream.\n    // Don't set finalizers other than for fetch responses.\n    if (this.#state.urlList.length !== 0 && this.#state.body?.stream) {\n      streamRegistry.register(this, new WeakRef(this.#state.body.stream))\n    }\n\n    // 3. Return the result of creating a Response object, given\n    // clonedResponse, this\u2019s headers\u2019s guard, and this\u2019s relevant Realm.\n    return fromInnerResponse(clonedResponse, getHeadersGuard(this.#headers))\n  }\n\n  [nodeUtil.inspect.custom] (depth, options) {\n    if (options.depth === null) {\n      options.depth = 2\n    }\n\n    options.colors ??= true\n\n    const properties = {\n      status: this.status,\n      statusText: this.statusText,\n      headers: this.headers,\n      body: this.body,\n      bodyUsed: this.bodyUsed,\n      ok: this.ok,\n      redirected: this.redirected,\n      type: this.type,\n      url: this.url\n    }\n\n    return `Response ${nodeUtil.formatWithOptions(options, properties)}`\n  }\n\n  /**\n   * @param {Response} response\n   */\n  static getResponseHeaders (response) {\n    return response.#headers\n  }\n\n  /**\n   * @param {Response} response\n   * @param {Headers} newHeaders\n   */\n  static setResponseHeaders (response, newHeaders) {\n    response.#headers = newHeaders\n  }\n\n  /**\n   * @param {Response} response\n   */\n  static getResponseState (response) {\n    return response.#state\n  }\n\n  /**\n   * @param {Response} response\n   * @param {any} newState\n   */\n  static setResponseState (response, newState) {\n    response.#state = newState\n  }\n}\n\nconst { getResponseHeaders, setResponseHeaders, getResponseState, setResponseState } = Response\nReflect.deleteProperty(Response, 'getResponseHeaders')\nReflect.deleteProperty(Response, 'setResponseHeaders')\nReflect.deleteProperty(Response, 'getResponseState')\nReflect.deleteProperty(Response, 'setResponseState')\n\nmixinBody(Response, getResponseState)\n\nObject.defineProperties(Response.prototype, {\n  type: kEnumerableProperty,\n  url: kEnumerableProperty,\n  status: kEnumerableProperty,\n  ok: kEnumerableProperty,\n  redirected: kEnumerableProperty,\n  statusText: kEnumerableProperty,\n  headers: kEnumerableProperty,\n  clone: kEnumerableProperty,\n  body: kEnumerableProperty,\n  bodyUsed: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'Response',\n    configurable: true\n  }\n})\n\nObject.defineProperties(Response, {\n  json: kEnumerableProperty,\n  redirect: kEnumerableProperty,\n  error: kEnumerableProperty\n})\n\n// https://fetch.spec.whatwg.org/#concept-response-clone\nfunction cloneResponse (response) {\n  // To clone a response response, run these steps:\n\n  // 1. If response is a filtered response, then return a new identical\n  // filtered response whose internal response is a clone of response\u2019s\n  // internal response.\n  if (response.internalResponse) {\n    return filterResponse(\n      cloneResponse(response.internalResponse),\n      response.type\n    )\n  }\n\n  // 2. Let newResponse be a copy of response, except for its body.\n  const newResponse = makeResponse({ ...response, body: null })\n\n  // 3. If response\u2019s body is non-null, then set newResponse\u2019s body to the\n  // result of cloning response\u2019s body.\n  if (response.body != null) {\n    newResponse.body = cloneBody(response.body)\n  }\n\n  // 4. Return newResponse.\n  return newResponse\n}\n\nfunction makeResponse (init) {\n  return {\n    aborted: false,\n    rangeRequested: false,\n    timingAllowPassed: false,\n    requestIncludesCredentials: false,\n    type: 'default',\n    status: 200,\n    timingInfo: null,\n    cacheState: '',\n    statusText: '',\n    ...init,\n    headersList: init?.headersList\n      ? new HeadersList(init?.headersList)\n      : new HeadersList(),\n    urlList: init?.urlList ? [...init.urlList] : []\n  }\n}\n\nfunction makeNetworkError (reason) {\n  const isError = isErrorLike(reason)\n  return makeResponse({\n    type: 'error',\n    status: 0,\n    error: isError\n      ? reason\n      : new Error(reason ? String(reason) : reason),\n    aborted: reason && reason.name === 'AbortError'\n  })\n}\n\n// @see https://fetch.spec.whatwg.org/#concept-network-error\nfunction isNetworkError (response) {\n  return (\n    // A network error is a response whose type is \"error\",\n    response.type === 'error' &&\n    // status is 0\n    response.status === 0\n  )\n}\n\nfunction makeFilteredResponse (response, state) {\n  state = {\n    internalResponse: response,\n    ...state\n  }\n\n  return new Proxy(response, {\n    get (target, p) {\n      return p in state ? state[p] : target[p]\n    },\n    set (target, p, value) {\n      assert(!(p in state))\n      target[p] = value\n      return true\n    }\n  })\n}\n\n// https://fetch.spec.whatwg.org/#concept-filtered-response\nfunction filterResponse (response, type) {\n  // Set response to the following filtered response with response as its\n  // internal response, depending on request\u2019s response tainting:\n  if (type === 'basic') {\n    // A basic filtered response is a filtered response whose type is \"basic\"\n    // and header list excludes any headers in internal response\u2019s header list\n    // whose name is a forbidden response-header name.\n\n    // Note: undici does not implement forbidden response-header names\n    return makeFilteredResponse(response, {\n      type: 'basic',\n      headersList: response.headersList\n    })\n  } else if (type === 'cors') {\n    // A CORS filtered response is a filtered response whose type is \"cors\"\n    // and header list excludes any headers in internal response\u2019s header\n    // list whose name is not a CORS-safelisted response-header name, given\n    // internal response\u2019s CORS-exposed header-name list.\n\n    // Note: undici does not implement CORS-safelisted response-header names\n    return makeFilteredResponse(response, {\n      type: 'cors',\n      headersList: response.headersList\n    })\n  } else if (type === 'opaque') {\n    // An opaque filtered response is a filtered response whose type is\n    // \"opaque\", URL list is the empty list, status is 0, status message\n    // is the empty byte sequence, header list is empty, and body is null.\n\n    return makeFilteredResponse(response, {\n      type: 'opaque',\n      urlList: [],\n      status: 0,\n      statusText: '',\n      body: null\n    })\n  } else if (type === 'opaqueredirect') {\n    // An opaque-redirect filtered response is a filtered response whose type\n    // is \"opaqueredirect\", status is 0, status message is the empty byte\n    // sequence, header list is empty, and body is null.\n\n    return makeFilteredResponse(response, {\n      type: 'opaqueredirect',\n      status: 0,\n      statusText: '',\n      headersList: [],\n      body: null\n    })\n  } else {\n    assert(false)\n  }\n}\n\n// https://fetch.spec.whatwg.org/#appropriate-network-error\nfunction makeAppropriateNetworkError (fetchParams, err = null) {\n  // 1. Assert: fetchParams is canceled.\n  assert(isCancelled(fetchParams))\n\n  // 2. Return an aborted network error if fetchParams is aborted;\n  // otherwise return a network error.\n  return isAborted(fetchParams)\n    ? makeNetworkError(Object.assign(new DOMException('The operation was aborted.', 'AbortError'), { cause: err }))\n    : makeNetworkError(Object.assign(new DOMException('Request was cancelled.'), { cause: err }))\n}\n\n// https://whatpr.org/fetch/1392.html#initialize-a-response\nfunction initializeResponse (response, init, body) {\n  // 1. If init[\"status\"] is not in the range 200 to 599, inclusive, then\n  //    throw a RangeError.\n  if (init.status !== null && (init.status < 200 || init.status > 599)) {\n    throw new RangeError('init[\"status\"] must be in the range of 200 to 599, inclusive.')\n  }\n\n  // 2. If init[\"statusText\"] does not match the reason-phrase token production,\n  //    then throw a TypeError.\n  if ('statusText' in init && init.statusText != null) {\n    // See, https://datatracker.ietf.org/doc/html/rfc7230#section-3.1.2:\n    //   reason-phrase  = *( HTAB / SP / VCHAR / obs-text )\n    if (!isValidReasonPhrase(String(init.statusText))) {\n      throw new TypeError('Invalid statusText')\n    }\n  }\n\n  // 3. Set response\u2019s response\u2019s status to init[\"status\"].\n  if ('status' in init && init.status != null) {\n    getResponseState(response).status = init.status\n  }\n\n  // 4. Set response\u2019s response\u2019s status message to init[\"statusText\"].\n  if ('statusText' in init && init.statusText != null) {\n    getResponseState(response).statusText = init.statusText\n  }\n\n  // 5. If init[\"headers\"] exists, then fill response\u2019s headers with init[\"headers\"].\n  if ('headers' in init && init.headers != null) {\n    fill(getResponseHeaders(response), init.headers)\n  }\n\n  // 6. If body was given, then:\n  if (body) {\n    // 1. If response's status is a null body status, then throw a TypeError.\n    if (nullBodyStatus.includes(response.status)) {\n      throw webidl.errors.exception({\n        header: 'Response constructor',\n        message: `Invalid response status code ${response.status}`\n      })\n    }\n\n    // 2. Set response's body to body's body.\n    getResponseState(response).body = body.body\n\n    // 3. If body's type is non-null and response's header list does not contain\n    //    `Content-Type`, then append (`Content-Type`, body's type) to response's header list.\n    if (body.type != null && !getResponseState(response).headersList.contains('content-type', true)) {\n      getResponseState(response).headersList.append('content-type', body.type, true)\n    }\n  }\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#response-create\n * @param {any} innerResponse\n * @param {'request' | 'immutable' | 'request-no-cors' | 'response' | 'none'} guard\n * @returns {Response}\n */\nfunction fromInnerResponse (innerResponse, guard) {\n  const response = new Response(kConstruct)\n  setResponseState(response, innerResponse)\n  const headers = new Headers(kConstruct)\n  setResponseHeaders(response, headers)\n  setHeadersList(headers, innerResponse.headersList)\n  setHeadersGuard(headers, guard)\n\n  // Note: If innerResponse's urlList contains a URL, it is a fetch response.\n  if (innerResponse.urlList.length !== 0 && innerResponse.body?.stream) {\n    // If the target (response) is reclaimed, the cleanup callback may be called at some point with\n    // the held value provided for it (innerResponse.body.stream). The held value can be any value:\n    // a primitive or an object, even undefined. If the held value is an object, the registry keeps\n    // a strong reference to it (so it can pass it to the cleanup callback later). Reworded from\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry\n    streamRegistry.register(response, new WeakRef(innerResponse.body.stream))\n  }\n\n  return response\n}\n\n// https://fetch.spec.whatwg.org/#typedefdef-xmlhttprequestbodyinit\nwebidl.converters.XMLHttpRequestBodyInit = function (V, prefix, name) {\n  if (typeof V === 'string') {\n    return webidl.converters.USVString(V, prefix, name)\n  }\n\n  if (webidl.is.Blob(V)) {\n    return V\n  }\n\n  if (webidl.is.BufferSource(V)) {\n    return V\n  }\n\n  if (webidl.is.FormData(V)) {\n    return V\n  }\n\n  if (webidl.is.URLSearchParams(V)) {\n    return V\n  }\n\n  return webidl.converters.DOMString(V, prefix, name)\n}\n\n// https://fetch.spec.whatwg.org/#bodyinit\nwebidl.converters.BodyInit = function (V, prefix, argument) {\n  if (webidl.is.ReadableStream(V)) {\n    return V\n  }\n\n  // Note: the spec doesn't include async iterables,\n  // this is an undici extension.\n  if (V?.[Symbol.asyncIterator]) {\n    return V\n  }\n\n  return webidl.converters.XMLHttpRequestBodyInit(V, prefix, argument)\n}\n\nwebidl.converters.ResponseInit = webidl.dictionaryConverter([\n  {\n    key: 'status',\n    converter: webidl.converters['unsigned short'],\n    defaultValue: () => 200\n  },\n  {\n    key: 'statusText',\n    converter: webidl.converters.ByteString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'headers',\n    converter: webidl.converters.HeadersInit\n  }\n])\n\nwebidl.is.Response = webidl.util.MakeTypeAssertion(Response)\n\nmodule.exports = {\n  isNetworkError,\n  makeNetworkError,\n  makeResponse,\n  makeAppropriateNetworkError,\n  filterResponse,\n  Response,\n  cloneResponse,\n  fromInnerResponse,\n  getResponseState\n}\n", "/* globals AbortController */\n\n'use strict'\n\nconst { extractBody, mixinBody, cloneBody, bodyUnusable } = require('./body')\nconst { Headers, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require('./headers')\nconst util = require('../../core/util')\nconst nodeUtil = require('node:util')\nconst {\n  isValidHTTPToken,\n  sameOrigin,\n  environmentSettingsObject\n} = require('./util')\nconst {\n  forbiddenMethodsSet,\n  corsSafeListedMethodsSet,\n  referrerPolicy,\n  requestRedirect,\n  requestMode,\n  requestCredentials,\n  requestCache,\n  requestDuplex\n} = require('./constants')\nconst { kEnumerableProperty, normalizedMethodRecordsBase, normalizedMethodRecords } = util\nconst { webidl } = require('../webidl')\nconst { URLSerializer } = require('./data-url')\nconst { kConstruct } = require('../../core/symbols')\nconst assert = require('node:assert')\nconst { getMaxListeners, setMaxListeners, defaultMaxListeners } = require('node:events')\n\nconst kAbortController = Symbol('abortController')\n\nconst requestFinalizer = new FinalizationRegistry(({ signal, abort }) => {\n  signal.removeEventListener('abort', abort)\n})\n\nconst dependentControllerMap = new WeakMap()\n\nlet abortSignalHasEventHandlerLeakWarning\n\ntry {\n  abortSignalHasEventHandlerLeakWarning = getMaxListeners(new AbortController().signal) > 0\n} catch {\n  abortSignalHasEventHandlerLeakWarning = false\n}\n\nfunction buildAbort (acRef) {\n  return abort\n\n  function abort () {\n    const ac = acRef.deref()\n    if (ac !== undefined) {\n      // Currently, there is a problem with FinalizationRegistry.\n      // https://github.com/nodejs/node/issues/49344\n      // https://github.com/nodejs/node/issues/47748\n      // In the case of abort, the first step is to unregister from it.\n      // If the controller can refer to it, it is still registered.\n      // It will be removed in the future.\n      requestFinalizer.unregister(abort)\n\n      // Unsubscribe a listener.\n      // FinalizationRegistry will no longer be called, so this must be done.\n      this.removeEventListener('abort', abort)\n\n      ac.abort(this.reason)\n\n      const controllerList = dependentControllerMap.get(ac.signal)\n\n      if (controllerList !== undefined) {\n        if (controllerList.size !== 0) {\n          for (const ref of controllerList) {\n            const ctrl = ref.deref()\n            if (ctrl !== undefined) {\n              ctrl.abort(this.reason)\n            }\n          }\n          controllerList.clear()\n        }\n        dependentControllerMap.delete(ac.signal)\n      }\n    }\n  }\n}\n\nlet patchMethodWarning = false\n\n// https://fetch.spec.whatwg.org/#request-class\nclass Request {\n  /** @type {AbortSignal} */\n  #signal\n\n  /** @type {import('../../dispatcher/dispatcher')} */\n  #dispatcher\n\n  /** @type {Headers} */\n  #headers\n\n  #state\n\n  // https://fetch.spec.whatwg.org/#dom-request\n  constructor (input, init = undefined) {\n    webidl.util.markAsUncloneable(this)\n\n    if (input === kConstruct) {\n      return\n    }\n\n    const prefix = 'Request constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    input = webidl.converters.RequestInfo(input)\n    init = webidl.converters.RequestInit(init)\n\n    // 1. Let request be null.\n    let request = null\n\n    // 2. Let fallbackMode be null.\n    let fallbackMode = null\n\n    // 3. Let baseURL be this\u2019s relevant settings object\u2019s API base URL.\n    const baseUrl = environmentSettingsObject.settingsObject.baseUrl\n\n    // 4. Let signal be null.\n    let signal = null\n\n    // 5. If input is a string, then:\n    if (typeof input === 'string') {\n      this.#dispatcher = init.dispatcher\n\n      // 1. Let parsedURL be the result of parsing input with baseURL.\n      // 2. If parsedURL is failure, then throw a TypeError.\n      let parsedURL\n      try {\n        parsedURL = new URL(input, baseUrl)\n      } catch (err) {\n        throw new TypeError('Failed to parse URL from ' + input, { cause: err })\n      }\n\n      // 3. If parsedURL includes credentials, then throw a TypeError.\n      if (parsedURL.username || parsedURL.password) {\n        throw new TypeError(\n          'Request cannot be constructed from a URL that includes credentials: ' +\n            input\n        )\n      }\n\n      // 4. Set request to a new request whose URL is parsedURL.\n      request = makeRequest({ urlList: [parsedURL] })\n\n      // 5. Set fallbackMode to \"cors\".\n      fallbackMode = 'cors'\n    } else {\n      // 6. Otherwise:\n\n      // 7. Assert: input is a Request object.\n      assert(webidl.is.Request(input))\n\n      // 8. Set request to input\u2019s request.\n      request = input.#state\n\n      // 9. Set signal to input\u2019s signal.\n      signal = input.#signal\n\n      this.#dispatcher = init.dispatcher || input.#dispatcher\n    }\n\n    // 7. Let origin be this\u2019s relevant settings object\u2019s origin.\n    const origin = environmentSettingsObject.settingsObject.origin\n\n    // 8. Let window be \"client\".\n    let window = 'client'\n\n    // 9. If request\u2019s window is an environment settings object and its origin\n    // is same origin with origin, then set window to request\u2019s window.\n    if (\n      request.window?.constructor?.name === 'EnvironmentSettingsObject' &&\n      sameOrigin(request.window, origin)\n    ) {\n      window = request.window\n    }\n\n    // 10. If init[\"window\"] exists and is non-null, then throw a TypeError.\n    if (init.window != null) {\n      throw new TypeError(`'window' option '${window}' must be null`)\n    }\n\n    // 11. If init[\"window\"] exists, then set window to \"no-window\".\n    if ('window' in init) {\n      window = 'no-window'\n    }\n\n    // 12. Set request to a new request with the following properties:\n    request = makeRequest({\n      // URL request\u2019s URL.\n      // undici implementation note: this is set as the first item in request's urlList in makeRequest\n      // method request\u2019s method.\n      method: request.method,\n      // header list A copy of request\u2019s header list.\n      // undici implementation note: headersList is cloned in makeRequest\n      headersList: request.headersList,\n      // unsafe-request flag Set.\n      unsafeRequest: request.unsafeRequest,\n      // client This\u2019s relevant settings object.\n      client: environmentSettingsObject.settingsObject,\n      // window window.\n      window,\n      // priority request\u2019s priority.\n      priority: request.priority,\n      // origin request\u2019s origin. The propagation of the origin is only significant for navigation requests\n      // being handled by a service worker. In this scenario a request can have an origin that is different\n      // from the current client.\n      origin: request.origin,\n      // referrer request\u2019s referrer.\n      referrer: request.referrer,\n      // referrer policy request\u2019s referrer policy.\n      referrerPolicy: request.referrerPolicy,\n      // mode request\u2019s mode.\n      mode: request.mode,\n      // credentials mode request\u2019s credentials mode.\n      credentials: request.credentials,\n      // cache mode request\u2019s cache mode.\n      cache: request.cache,\n      // redirect mode request\u2019s redirect mode.\n      redirect: request.redirect,\n      // integrity metadata request\u2019s integrity metadata.\n      integrity: request.integrity,\n      // keepalive request\u2019s keepalive.\n      keepalive: request.keepalive,\n      // reload-navigation flag request\u2019s reload-navigation flag.\n      reloadNavigation: request.reloadNavigation,\n      // history-navigation flag request\u2019s history-navigation flag.\n      historyNavigation: request.historyNavigation,\n      // URL list A clone of request\u2019s URL list.\n      urlList: [...request.urlList]\n    })\n\n    const initHasKey = Object.keys(init).length !== 0\n\n    // 13. If init is not empty, then:\n    if (initHasKey) {\n      // 1. If request\u2019s mode is \"navigate\", then set it to \"same-origin\".\n      if (request.mode === 'navigate') {\n        request.mode = 'same-origin'\n      }\n\n      // 2. Unset request\u2019s reload-navigation flag.\n      request.reloadNavigation = false\n\n      // 3. Unset request\u2019s history-navigation flag.\n      request.historyNavigation = false\n\n      // 4. Set request\u2019s origin to \"client\".\n      request.origin = 'client'\n\n      // 5. Set request\u2019s referrer to \"client\"\n      request.referrer = 'client'\n\n      // 6. Set request\u2019s referrer policy to the empty string.\n      request.referrerPolicy = ''\n\n      // 7. Set request\u2019s URL to request\u2019s current URL.\n      request.url = request.urlList[request.urlList.length - 1]\n\n      // 8. Set request\u2019s URL list to \u00AB request\u2019s URL \u00BB.\n      request.urlList = [request.url]\n    }\n\n    // 14. If init[\"referrer\"] exists, then:\n    if (init.referrer !== undefined) {\n      // 1. Let referrer be init[\"referrer\"].\n      const referrer = init.referrer\n\n      // 2. If referrer is the empty string, then set request\u2019s referrer to \"no-referrer\".\n      if (referrer === '') {\n        request.referrer = 'no-referrer'\n      } else {\n        // 1. Let parsedReferrer be the result of parsing referrer with\n        // baseURL.\n        // 2. If parsedReferrer is failure, then throw a TypeError.\n        let parsedReferrer\n        try {\n          parsedReferrer = new URL(referrer, baseUrl)\n        } catch (err) {\n          throw new TypeError(`Referrer \"${referrer}\" is not a valid URL.`, { cause: err })\n        }\n\n        // 3. If one of the following is true\n        // - parsedReferrer\u2019s scheme is \"about\" and path is the string \"client\"\n        // - parsedReferrer\u2019s origin is not same origin with origin\n        // then set request\u2019s referrer to \"client\".\n        if (\n          (parsedReferrer.protocol === 'about:' && parsedReferrer.hostname === 'client') ||\n          (origin && !sameOrigin(parsedReferrer, environmentSettingsObject.settingsObject.baseUrl))\n        ) {\n          request.referrer = 'client'\n        } else {\n          // 4. Otherwise, set request\u2019s referrer to parsedReferrer.\n          request.referrer = parsedReferrer\n        }\n      }\n    }\n\n    // 15. If init[\"referrerPolicy\"] exists, then set request\u2019s referrer policy\n    // to it.\n    if (init.referrerPolicy !== undefined) {\n      request.referrerPolicy = init.referrerPolicy\n    }\n\n    // 16. Let mode be init[\"mode\"] if it exists, and fallbackMode otherwise.\n    let mode\n    if (init.mode !== undefined) {\n      mode = init.mode\n    } else {\n      mode = fallbackMode\n    }\n\n    // 17. If mode is \"navigate\", then throw a TypeError.\n    if (mode === 'navigate') {\n      throw webidl.errors.exception({\n        header: 'Request constructor',\n        message: 'invalid request mode navigate.'\n      })\n    }\n\n    // 18. If mode is non-null, set request\u2019s mode to mode.\n    if (mode != null) {\n      request.mode = mode\n    }\n\n    // 19. If init[\"credentials\"] exists, then set request\u2019s credentials mode\n    // to it.\n    if (init.credentials !== undefined) {\n      request.credentials = init.credentials\n    }\n\n    // 18. If init[\"cache\"] exists, then set request\u2019s cache mode to it.\n    if (init.cache !== undefined) {\n      request.cache = init.cache\n    }\n\n    // 21. If request\u2019s cache mode is \"only-if-cached\" and request\u2019s mode is\n    // not \"same-origin\", then throw a TypeError.\n    if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') {\n      throw new TypeError(\n        \"'only-if-cached' can be set only with 'same-origin' mode\"\n      )\n    }\n\n    // 22. If init[\"redirect\"] exists, then set request\u2019s redirect mode to it.\n    if (init.redirect !== undefined) {\n      request.redirect = init.redirect\n    }\n\n    // 23. If init[\"integrity\"] exists, then set request\u2019s integrity metadata to it.\n    if (init.integrity != null) {\n      request.integrity = String(init.integrity)\n    }\n\n    // 24. If init[\"keepalive\"] exists, then set request\u2019s keepalive to it.\n    if (init.keepalive !== undefined) {\n      request.keepalive = Boolean(init.keepalive)\n    }\n\n    // 25. If init[\"method\"] exists, then:\n    if (init.method !== undefined) {\n      // 1. Let method be init[\"method\"].\n      let method = init.method\n\n      const mayBeNormalized = normalizedMethodRecords[method]\n\n      if (mayBeNormalized !== undefined) {\n        // Note: Bypass validation DELETE, GET, HEAD, OPTIONS, POST, PUT, PATCH and these lowercase ones\n        request.method = mayBeNormalized\n      } else {\n        // 2. If method is not a method or method is a forbidden method, then\n        // throw a TypeError.\n        if (!isValidHTTPToken(method)) {\n          throw new TypeError(`'${method}' is not a valid HTTP method.`)\n        }\n\n        const upperCase = method.toUpperCase()\n\n        if (forbiddenMethodsSet.has(upperCase)) {\n          throw new TypeError(`'${method}' HTTP method is unsupported.`)\n        }\n\n        // 3. Normalize method.\n        // https://fetch.spec.whatwg.org/#concept-method-normalize\n        // Note: must be in uppercase\n        method = normalizedMethodRecordsBase[upperCase] ?? method\n\n        // 4. Set request\u2019s method to method.\n        request.method = method\n      }\n\n      if (!patchMethodWarning && request.method === 'patch') {\n        process.emitWarning('Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.', {\n          code: 'UNDICI-FETCH-patch'\n        })\n\n        patchMethodWarning = true\n      }\n    }\n\n    // 26. If init[\"signal\"] exists, then set signal to it.\n    if (init.signal !== undefined) {\n      signal = init.signal\n    }\n\n    // 27. Set this\u2019s request to request.\n    this.#state = request\n\n    // 28. Set this\u2019s signal to a new AbortSignal object with this\u2019s relevant\n    // Realm.\n    // TODO: could this be simplified with AbortSignal.any\n    // (https://dom.spec.whatwg.org/#dom-abortsignal-any)\n    const ac = new AbortController()\n    this.#signal = ac.signal\n\n    // 29. If signal is not null, then make this\u2019s signal follow signal.\n    if (signal != null) {\n      if (signal.aborted) {\n        ac.abort(signal.reason)\n      } else {\n        // Keep a strong ref to ac while request object\n        // is alive. This is needed to prevent AbortController\n        // from being prematurely garbage collected.\n        // See, https://github.com/nodejs/undici/issues/1926.\n        this[kAbortController] = ac\n\n        const acRef = new WeakRef(ac)\n        const abort = buildAbort(acRef)\n\n        // If the max amount of listeners is equal to the default, increase it\n        if (abortSignalHasEventHandlerLeakWarning && getMaxListeners(signal) === defaultMaxListeners) {\n          setMaxListeners(1500, signal)\n        }\n\n        util.addAbortListener(signal, abort)\n        // The third argument must be a registry key to be unregistered.\n        // Without it, you cannot unregister.\n        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry\n        // abort is used as the unregister key. (because it is unique)\n        requestFinalizer.register(ac, { signal, abort }, abort)\n      }\n    }\n\n    // 30. Set this\u2019s headers to a new Headers object with this\u2019s relevant\n    // Realm, whose header list is request\u2019s header list and guard is\n    // \"request\".\n    this.#headers = new Headers(kConstruct)\n    setHeadersList(this.#headers, request.headersList)\n    setHeadersGuard(this.#headers, 'request')\n\n    // 31. If this\u2019s request\u2019s mode is \"no-cors\", then:\n    if (mode === 'no-cors') {\n      // 1. If this\u2019s request\u2019s method is not a CORS-safelisted method,\n      // then throw a TypeError.\n      if (!corsSafeListedMethodsSet.has(request.method)) {\n        throw new TypeError(\n          `'${request.method} is unsupported in no-cors mode.`\n        )\n      }\n\n      // 2. Set this\u2019s headers\u2019s guard to \"request-no-cors\".\n      setHeadersGuard(this.#headers, 'request-no-cors')\n    }\n\n    // 32. If init is not empty, then:\n    if (initHasKey) {\n      /** @type {HeadersList} */\n      const headersList = getHeadersList(this.#headers)\n      // 1. Let headers be a copy of this\u2019s headers and its associated header\n      // list.\n      // 2. If init[\"headers\"] exists, then set headers to init[\"headers\"].\n      const headers = init.headers !== undefined ? init.headers : new HeadersList(headersList)\n\n      // 3. Empty this\u2019s headers\u2019s header list.\n      headersList.clear()\n\n      // 4. If headers is a Headers object, then for each header in its header\n      // list, append header\u2019s name/header\u2019s value to this\u2019s headers.\n      if (headers instanceof HeadersList) {\n        for (const { name, value } of headers.rawValues()) {\n          headersList.append(name, value, false)\n        }\n        // Note: Copy the `set-cookie` meta-data.\n        headersList.cookies = headers.cookies\n      } else {\n        // 5. Otherwise, fill this\u2019s headers with headers.\n        fillHeaders(this.#headers, headers)\n      }\n    }\n\n    // 33. Let inputBody be input\u2019s request\u2019s body if input is a Request\n    // object; otherwise null.\n    const inputBody = webidl.is.Request(input) ? input.#state.body : null\n\n    // 34. If either init[\"body\"] exists and is non-null or inputBody is\n    // non-null, and request\u2019s method is `GET` or `HEAD`, then throw a\n    // TypeError.\n    if (\n      (init.body != null || inputBody != null) &&\n      (request.method === 'GET' || request.method === 'HEAD')\n    ) {\n      throw new TypeError('Request with GET/HEAD method cannot have body.')\n    }\n\n    // 35. Let initBody be null.\n    let initBody = null\n\n    // 36. If init[\"body\"] exists and is non-null, then:\n    if (init.body != null) {\n      // 1. Let Content-Type be null.\n      // 2. Set initBody and Content-Type to the result of extracting\n      // init[\"body\"], with keepalive set to request\u2019s keepalive.\n      const [extractedBody, contentType] = extractBody(\n        init.body,\n        request.keepalive\n      )\n      initBody = extractedBody\n\n      // 3, If Content-Type is non-null and this\u2019s headers\u2019s header list does\n      // not contain `Content-Type`, then append `Content-Type`/Content-Type to\n      // this\u2019s headers.\n      if (contentType && !getHeadersList(this.#headers).contains('content-type', true)) {\n        this.#headers.append('content-type', contentType, true)\n      }\n    }\n\n    // 37. Let inputOrInitBody be initBody if it is non-null; otherwise\n    // inputBody.\n    const inputOrInitBody = initBody ?? inputBody\n\n    // 38. If inputOrInitBody is non-null and inputOrInitBody\u2019s source is\n    // null, then:\n    if (inputOrInitBody != null && inputOrInitBody.source == null) {\n      // 1. If initBody is non-null and init[\"duplex\"] does not exist,\n      //    then throw a TypeError.\n      if (initBody != null && init.duplex == null) {\n        throw new TypeError('RequestInit: duplex option is required when sending a body.')\n      }\n\n      // 2. If this\u2019s request\u2019s mode is neither \"same-origin\" nor \"cors\",\n      // then throw a TypeError.\n      if (request.mode !== 'same-origin' && request.mode !== 'cors') {\n        throw new TypeError(\n          'If request is made from ReadableStream, mode should be \"same-origin\" or \"cors\"'\n        )\n      }\n\n      // 3. Set this\u2019s request\u2019s use-CORS-preflight flag.\n      request.useCORSPreflightFlag = true\n    }\n\n    // 39. Let finalBody be inputOrInitBody.\n    let finalBody = inputOrInitBody\n\n    // 40. If initBody is null and inputBody is non-null, then:\n    if (initBody == null && inputBody != null) {\n      // 1. If input is unusable, then throw a TypeError.\n      if (bodyUnusable(input.#state)) {\n        throw new TypeError(\n          'Cannot construct a Request with a Request object that has already been used.'\n        )\n      }\n\n      // 2. Set finalBody to the result of creating a proxy for inputBody.\n      // https://streams.spec.whatwg.org/#readablestream-create-a-proxy\n      const identityTransform = new TransformStream()\n      inputBody.stream.pipeThrough(identityTransform)\n      finalBody = {\n        source: inputBody.source,\n        length: inputBody.length,\n        stream: identityTransform.readable\n      }\n    }\n\n    // 41. Set this\u2019s request\u2019s body to finalBody.\n    this.#state.body = finalBody\n  }\n\n  // Returns request\u2019s HTTP method, which is \"GET\" by default.\n  get method () {\n    webidl.brandCheck(this, Request)\n\n    // The method getter steps are to return this\u2019s request\u2019s method.\n    return this.#state.method\n  }\n\n  // Returns the URL of request as a string.\n  get url () {\n    webidl.brandCheck(this, Request)\n\n    // The url getter steps are to return this\u2019s request\u2019s URL, serialized.\n    return URLSerializer(this.#state.url)\n  }\n\n  // Returns a Headers object consisting of the headers associated with request.\n  // Note that headers added in the network layer by the user agent will not\n  // be accounted for in this object, e.g., the \"Host\" header.\n  get headers () {\n    webidl.brandCheck(this, Request)\n\n    // The headers getter steps are to return this\u2019s headers.\n    return this.#headers\n  }\n\n  // Returns the kind of resource requested by request, e.g., \"document\"\n  // or \"script\".\n  get destination () {\n    webidl.brandCheck(this, Request)\n\n    // The destination getter are to return this\u2019s request\u2019s destination.\n    return this.#state.destination\n  }\n\n  // Returns the referrer of request. Its value can be a same-origin URL if\n  // explicitly set in init, the empty string to indicate no referrer, and\n  // \"about:client\" when defaulting to the global\u2019s default. This is used\n  // during fetching to determine the value of the `Referer` header of the\n  // request being made.\n  get referrer () {\n    webidl.brandCheck(this, Request)\n\n    // 1. If this\u2019s request\u2019s referrer is \"no-referrer\", then return the\n    // empty string.\n    if (this.#state.referrer === 'no-referrer') {\n      return ''\n    }\n\n    // 2. If this\u2019s request\u2019s referrer is \"client\", then return\n    // \"about:client\".\n    if (this.#state.referrer === 'client') {\n      return 'about:client'\n    }\n\n    // Return this\u2019s request\u2019s referrer, serialized.\n    return this.#state.referrer.toString()\n  }\n\n  // Returns the referrer policy associated with request.\n  // This is used during fetching to compute the value of the request\u2019s\n  // referrer.\n  get referrerPolicy () {\n    webidl.brandCheck(this, Request)\n\n    // The referrerPolicy getter steps are to return this\u2019s request\u2019s referrer policy.\n    return this.#state.referrerPolicy\n  }\n\n  // Returns the mode associated with request, which is a string indicating\n  // whether the request will use CORS, or will be restricted to same-origin\n  // URLs.\n  get mode () {\n    webidl.brandCheck(this, Request)\n\n    // The mode getter steps are to return this\u2019s request\u2019s mode.\n    return this.#state.mode\n  }\n\n  // Returns the credentials mode associated with request,\n  // which is a string indicating whether credentials will be sent with the\n  // request always, never, or only when sent to a same-origin URL.\n  get credentials () {\n    webidl.brandCheck(this, Request)\n\n    // The credentials getter steps are to return this\u2019s request\u2019s credentials mode.\n    return this.#state.credentials\n  }\n\n  // Returns the cache mode associated with request,\n  // which is a string indicating how the request will\n  // interact with the browser\u2019s cache when fetching.\n  get cache () {\n    webidl.brandCheck(this, Request)\n\n    // The cache getter steps are to return this\u2019s request\u2019s cache mode.\n    return this.#state.cache\n  }\n\n  // Returns the redirect mode associated with request,\n  // which is a string indicating how redirects for the\n  // request will be handled during fetching. A request\n  // will follow redirects by default.\n  get redirect () {\n    webidl.brandCheck(this, Request)\n\n    // The redirect getter steps are to return this\u2019s request\u2019s redirect mode.\n    return this.#state.redirect\n  }\n\n  // Returns request\u2019s subresource integrity metadata, which is a\n  // cryptographic hash of the resource being fetched. Its value\n  // consists of multiple hashes separated by whitespace. [SRI]\n  get integrity () {\n    webidl.brandCheck(this, Request)\n\n    // The integrity getter steps are to return this\u2019s request\u2019s integrity\n    // metadata.\n    return this.#state.integrity\n  }\n\n  // Returns a boolean indicating whether or not request can outlive the\n  // global in which it was created.\n  get keepalive () {\n    webidl.brandCheck(this, Request)\n\n    // The keepalive getter steps are to return this\u2019s request\u2019s keepalive.\n    return this.#state.keepalive\n  }\n\n  // Returns a boolean indicating whether or not request is for a reload\n  // navigation.\n  get isReloadNavigation () {\n    webidl.brandCheck(this, Request)\n\n    // The isReloadNavigation getter steps are to return true if this\u2019s\n    // request\u2019s reload-navigation flag is set; otherwise false.\n    return this.#state.reloadNavigation\n  }\n\n  // Returns a boolean indicating whether or not request is for a history\n  // navigation (a.k.a. back-forward navigation).\n  get isHistoryNavigation () {\n    webidl.brandCheck(this, Request)\n\n    // The isHistoryNavigation getter steps are to return true if this\u2019s request\u2019s\n    // history-navigation flag is set; otherwise false.\n    return this.#state.historyNavigation\n  }\n\n  // Returns the signal associated with request, which is an AbortSignal\n  // object indicating whether or not request has been aborted, and its\n  // abort event handler.\n  get signal () {\n    webidl.brandCheck(this, Request)\n\n    // The signal getter steps are to return this\u2019s signal.\n    return this.#signal\n  }\n\n  get body () {\n    webidl.brandCheck(this, Request)\n\n    return this.#state.body ? this.#state.body.stream : null\n  }\n\n  get bodyUsed () {\n    webidl.brandCheck(this, Request)\n\n    return !!this.#state.body && util.isDisturbed(this.#state.body.stream)\n  }\n\n  get duplex () {\n    webidl.brandCheck(this, Request)\n\n    return 'half'\n  }\n\n  // Returns a clone of request.\n  clone () {\n    webidl.brandCheck(this, Request)\n\n    // 1. If this is unusable, then throw a TypeError.\n    if (bodyUnusable(this.#state)) {\n      throw new TypeError('unusable')\n    }\n\n    // 2. Let clonedRequest be the result of cloning this\u2019s request.\n    const clonedRequest = cloneRequest(this.#state)\n\n    // 3. Let clonedRequestObject be the result of creating a Request object,\n    // given clonedRequest, this\u2019s headers\u2019s guard, and this\u2019s relevant Realm.\n    // 4. Make clonedRequestObject\u2019s signal follow this\u2019s signal.\n    const ac = new AbortController()\n    if (this.signal.aborted) {\n      ac.abort(this.signal.reason)\n    } else {\n      let list = dependentControllerMap.get(this.signal)\n      if (list === undefined) {\n        list = new Set()\n        dependentControllerMap.set(this.signal, list)\n      }\n      const acRef = new WeakRef(ac)\n      list.add(acRef)\n      util.addAbortListener(\n        ac.signal,\n        buildAbort(acRef)\n      )\n    }\n\n    // 4. Return clonedRequestObject.\n    return fromInnerRequest(clonedRequest, this.#dispatcher, ac.signal, getHeadersGuard(this.#headers))\n  }\n\n  [nodeUtil.inspect.custom] (depth, options) {\n    if (options.depth === null) {\n      options.depth = 2\n    }\n\n    options.colors ??= true\n\n    const properties = {\n      method: this.method,\n      url: this.url,\n      headers: this.headers,\n      destination: this.destination,\n      referrer: this.referrer,\n      referrerPolicy: this.referrerPolicy,\n      mode: this.mode,\n      credentials: this.credentials,\n      cache: this.cache,\n      redirect: this.redirect,\n      integrity: this.integrity,\n      keepalive: this.keepalive,\n      isReloadNavigation: this.isReloadNavigation,\n      isHistoryNavigation: this.isHistoryNavigation,\n      signal: this.signal\n    }\n\n    return `Request ${nodeUtil.formatWithOptions(options, properties)}`\n  }\n\n  /**\n   * @param {Request} request\n   * @param {AbortSignal} newSignal\n   */\n  static setRequestSignal (request, newSignal) {\n    request.#signal = newSignal\n    return request\n  }\n\n  /**\n   * @param {Request} request\n   */\n  static getRequestDispatcher (request) {\n    return request.#dispatcher\n  }\n\n  /**\n   * @param {Request} request\n   * @param {import('../../dispatcher/dispatcher')} newDispatcher\n   */\n  static setRequestDispatcher (request, newDispatcher) {\n    request.#dispatcher = newDispatcher\n  }\n\n  /**\n   * @param {Request} request\n   * @param {Headers} newHeaders\n   */\n  static setRequestHeaders (request, newHeaders) {\n    request.#headers = newHeaders\n  }\n\n  /**\n   * @param {Request} request\n   */\n  static getRequestState (request) {\n    return request.#state\n  }\n\n  /**\n   * @param {Request} request\n   * @param {any} newState\n   */\n  static setRequestState (request, newState) {\n    request.#state = newState\n  }\n}\n\nconst { setRequestSignal, getRequestDispatcher, setRequestDispatcher, setRequestHeaders, getRequestState, setRequestState } = Request\nReflect.deleteProperty(Request, 'setRequestSignal')\nReflect.deleteProperty(Request, 'getRequestDispatcher')\nReflect.deleteProperty(Request, 'setRequestDispatcher')\nReflect.deleteProperty(Request, 'setRequestHeaders')\nReflect.deleteProperty(Request, 'getRequestState')\nReflect.deleteProperty(Request, 'setRequestState')\n\nmixinBody(Request, getRequestState)\n\n// https://fetch.spec.whatwg.org/#requests\nfunction makeRequest (init) {\n  return {\n    method: init.method ?? 'GET',\n    localURLsOnly: init.localURLsOnly ?? false,\n    unsafeRequest: init.unsafeRequest ?? false,\n    body: init.body ?? null,\n    client: init.client ?? null,\n    reservedClient: init.reservedClient ?? null,\n    replacesClientId: init.replacesClientId ?? '',\n    window: init.window ?? 'client',\n    keepalive: init.keepalive ?? false,\n    serviceWorkers: init.serviceWorkers ?? 'all',\n    initiator: init.initiator ?? '',\n    destination: init.destination ?? '',\n    priority: init.priority ?? null,\n    origin: init.origin ?? 'client',\n    policyContainer: init.policyContainer ?? 'client',\n    referrer: init.referrer ?? 'client',\n    referrerPolicy: init.referrerPolicy ?? '',\n    mode: init.mode ?? 'no-cors',\n    useCORSPreflightFlag: init.useCORSPreflightFlag ?? false,\n    credentials: init.credentials ?? 'same-origin',\n    useCredentials: init.useCredentials ?? false,\n    cache: init.cache ?? 'default',\n    redirect: init.redirect ?? 'follow',\n    integrity: init.integrity ?? '',\n    cryptoGraphicsNonceMetadata: init.cryptoGraphicsNonceMetadata ?? '',\n    parserMetadata: init.parserMetadata ?? '',\n    reloadNavigation: init.reloadNavigation ?? false,\n    historyNavigation: init.historyNavigation ?? false,\n    userActivation: init.userActivation ?? false,\n    taintedOrigin: init.taintedOrigin ?? false,\n    redirectCount: init.redirectCount ?? 0,\n    responseTainting: init.responseTainting ?? 'basic',\n    preventNoCacheCacheControlHeaderModification: init.preventNoCacheCacheControlHeaderModification ?? false,\n    done: init.done ?? false,\n    timingAllowFailed: init.timingAllowFailed ?? false,\n    useURLCredentials: init.useURLCredentials ?? undefined,\n    traversableForUserPrompts: init.traversableForUserPrompts ?? 'client',\n    urlList: init.urlList,\n    url: init.urlList[0],\n    headersList: init.headersList\n      ? new HeadersList(init.headersList)\n      : new HeadersList()\n  }\n}\n\n// https://fetch.spec.whatwg.org/#concept-request-clone\nfunction cloneRequest (request) {\n  // To clone a request request, run these steps:\n\n  // 1. Let newRequest be a copy of request, except for its body.\n  const newRequest = makeRequest({ ...request, body: null })\n\n  // 2. If request\u2019s body is non-null, set newRequest\u2019s body to the\n  // result of cloning request\u2019s body.\n  if (request.body != null) {\n    newRequest.body = cloneBody(request.body)\n  }\n\n  // 3. Return newRequest.\n  return newRequest\n}\n\n/**\n * @see https://fetch.spec.whatwg.org/#request-create\n * @param {any} innerRequest\n * @param {import('../../dispatcher/agent')} dispatcher\n * @param {AbortSignal} signal\n * @param {'request' | 'immutable' | 'request-no-cors' | 'response' | 'none'} guard\n * @returns {Request}\n */\nfunction fromInnerRequest (innerRequest, dispatcher, signal, guard) {\n  const request = new Request(kConstruct)\n  setRequestState(request, innerRequest)\n  setRequestDispatcher(request, dispatcher)\n  setRequestSignal(request, signal)\n  const headers = new Headers(kConstruct)\n  setRequestHeaders(request, headers)\n  setHeadersList(headers, innerRequest.headersList)\n  setHeadersGuard(headers, guard)\n  return request\n}\n\nObject.defineProperties(Request.prototype, {\n  method: kEnumerableProperty,\n  url: kEnumerableProperty,\n  headers: kEnumerableProperty,\n  redirect: kEnumerableProperty,\n  clone: kEnumerableProperty,\n  signal: kEnumerableProperty,\n  duplex: kEnumerableProperty,\n  destination: kEnumerableProperty,\n  body: kEnumerableProperty,\n  bodyUsed: kEnumerableProperty,\n  isHistoryNavigation: kEnumerableProperty,\n  isReloadNavigation: kEnumerableProperty,\n  keepalive: kEnumerableProperty,\n  integrity: kEnumerableProperty,\n  cache: kEnumerableProperty,\n  credentials: kEnumerableProperty,\n  attribute: kEnumerableProperty,\n  referrerPolicy: kEnumerableProperty,\n  referrer: kEnumerableProperty,\n  mode: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'Request',\n    configurable: true\n  }\n})\n\nwebidl.is.Request = webidl.util.MakeTypeAssertion(Request)\n\n/**\n * @param {*} V\n * @returns {import('../../../types/fetch').Request|string}\n *\n * @see https://fetch.spec.whatwg.org/#requestinfo\n */\nwebidl.converters.RequestInfo = function (V) {\n  if (typeof V === 'string') {\n    return webidl.converters.USVString(V)\n  }\n\n  if (webidl.is.Request(V)) {\n    return V\n  }\n\n  return webidl.converters.USVString(V)\n}\n\n/**\n * @param {*} V\n * @returns {import('../../../types/fetch').RequestInit}\n * @see https://fetch.spec.whatwg.org/#requestinit\n */\nwebidl.converters.RequestInit = webidl.dictionaryConverter([\n  {\n    key: 'method',\n    converter: webidl.converters.ByteString\n  },\n  {\n    key: 'headers',\n    converter: webidl.converters.HeadersInit\n  },\n  {\n    key: 'body',\n    converter: webidl.nullableConverter(\n      webidl.converters.BodyInit\n    )\n  },\n  {\n    key: 'referrer',\n    converter: webidl.converters.USVString\n  },\n  {\n    key: 'referrerPolicy',\n    converter: webidl.converters.DOMString,\n    // https://w3c.github.io/webappsec-referrer-policy/#referrer-policy\n    allowedValues: referrerPolicy\n  },\n  {\n    key: 'mode',\n    converter: webidl.converters.DOMString,\n    // https://fetch.spec.whatwg.org/#concept-request-mode\n    allowedValues: requestMode\n  },\n  {\n    key: 'credentials',\n    converter: webidl.converters.DOMString,\n    // https://fetch.spec.whatwg.org/#requestcredentials\n    allowedValues: requestCredentials\n  },\n  {\n    key: 'cache',\n    converter: webidl.converters.DOMString,\n    // https://fetch.spec.whatwg.org/#requestcache\n    allowedValues: requestCache\n  },\n  {\n    key: 'redirect',\n    converter: webidl.converters.DOMString,\n    // https://fetch.spec.whatwg.org/#requestredirect\n    allowedValues: requestRedirect\n  },\n  {\n    key: 'integrity',\n    converter: webidl.converters.DOMString\n  },\n  {\n    key: 'keepalive',\n    converter: webidl.converters.boolean\n  },\n  {\n    key: 'signal',\n    converter: webidl.nullableConverter(\n      (signal) => webidl.converters.AbortSignal(\n        signal,\n        'RequestInit',\n        'signal'\n      )\n    )\n  },\n  {\n    key: 'window',\n    converter: webidl.converters.any\n  },\n  {\n    key: 'duplex',\n    converter: webidl.converters.DOMString,\n    allowedValues: requestDuplex\n  },\n  {\n    key: 'dispatcher', // undici specific option\n    converter: webidl.converters.any\n  },\n  {\n    key: 'priority',\n    converter: webidl.converters.DOMString,\n    allowedValues: ['high', 'low', 'auto'],\n    defaultValue: () => 'auto'\n  }\n])\n\nmodule.exports = {\n  Request,\n  makeRequest,\n  fromInnerRequest,\n  cloneRequest,\n  getRequestDispatcher,\n  getRequestState\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { runtimeFeatures } = require('../../util/runtime-features.js')\n\n/**\n * @typedef {object} Metadata\n * @property {SRIHashAlgorithm} alg - The algorithm used for the hash.\n * @property {string} val - The base64-encoded hash value.\n */\n\n/**\n * @typedef {Metadata[]} MetadataList\n */\n\n/**\n * @typedef {('sha256' | 'sha384' | 'sha512')} SRIHashAlgorithm\n */\n\n/**\n * @type {Map<SRIHashAlgorithm, number>}\n *\n * The valid SRI hash algorithm token set is the ordered set \u00AB \"sha256\",\n * \"sha384\", \"sha512\" \u00BB (corresponding to SHA-256, SHA-384, and SHA-512\n * respectively). The ordering of this set is meaningful, with stronger\n * algorithms appearing later in the set.\n *\n * @see https://w3c.github.io/webappsec-subresource-integrity/#valid-sri-hash-algorithm-token-set\n */\nconst validSRIHashAlgorithmTokenSet = new Map([['sha256', 0], ['sha384', 1], ['sha512', 2]])\n\n// https://nodejs.org/api/crypto.html#determining-if-crypto-support-is-unavailable\n/** @type {import('node:crypto')} */\nlet crypto\n\nif (runtimeFeatures.has('crypto')) {\n  crypto = require('node:crypto')\n  const cryptoHashes = crypto.getHashes()\n\n  // If no hashes are available, we cannot support SRI.\n  if (cryptoHashes.length === 0) {\n    validSRIHashAlgorithmTokenSet.clear()\n  }\n\n  for (const algorithm of validSRIHashAlgorithmTokenSet.keys()) {\n    // If the algorithm is not supported, remove it from the list.\n    if (cryptoHashes.includes(algorithm) === false) {\n      validSRIHashAlgorithmTokenSet.delete(algorithm)\n    }\n  }\n} else {\n  // If crypto is not available, we cannot support SRI.\n  validSRIHashAlgorithmTokenSet.clear()\n}\n\n/**\n * @typedef GetSRIHashAlgorithmIndex\n * @type {(algorithm: SRIHashAlgorithm) => number}\n * @param {SRIHashAlgorithm} algorithm\n * @returns {number} The index of the algorithm in the valid SRI hash algorithm\n * token set.\n */\n\nconst getSRIHashAlgorithmIndex = /** @type {GetSRIHashAlgorithmIndex} */ (Map.prototype.get.bind(\n  validSRIHashAlgorithmTokenSet))\n\n/**\n * @typedef IsValidSRIHashAlgorithm\n * @type {(algorithm: string) => algorithm is SRIHashAlgorithm}\n * @param {*} algorithm\n * @returns {algorithm is SRIHashAlgorithm}\n */\n\nconst isValidSRIHashAlgorithm = /** @type {IsValidSRIHashAlgorithm} */ (\n  Map.prototype.has.bind(validSRIHashAlgorithmTokenSet)\n)\n\n/**\n * @param {Uint8Array} bytes\n * @param {string} metadataList\n * @returns {boolean}\n *\n * @see https://w3c.github.io/webappsec-subresource-integrity/#does-response-match-metadatalist\n */\nconst bytesMatch = runtimeFeatures.has('crypto') === false || validSRIHashAlgorithmTokenSet.size === 0\n  // If node is not built with OpenSSL support, we cannot check\n  // a request's integrity, so allow it by default (the spec will\n  // allow requests if an invalid hash is given, as precedence).\n  ? () => true\n  : (bytes, metadataList) => {\n    // 1. Let parsedMetadata be the result of parsing metadataList.\n      const parsedMetadata = parseMetadata(metadataList)\n\n      // 2. If parsedMetadata is empty set, return true.\n      if (parsedMetadata.length === 0) {\n        return true\n      }\n\n      // 3. Let metadata be the result of getting the strongest\n      //    metadata from parsedMetadata.\n      const metadata = getStrongestMetadata(parsedMetadata)\n\n      // 4. For each item in metadata:\n      for (const item of metadata) {\n      // 1. Let algorithm be the item[\"alg\"].\n        const algorithm = item.alg\n\n        // 2. Let expectedValue be the item[\"val\"].\n        const expectedValue = item.val\n\n        // See https://github.com/web-platform-tests/wpt/commit/e4c5cc7a5e48093220528dfdd1c4012dc3837a0e\n        // \"be liberal with padding\". This is annoying, and it's not even in the spec.\n\n        // 3. Let actualValue be the result of applying algorithm to bytes .\n        const actualValue = applyAlgorithmToBytes(algorithm, bytes)\n\n        // 4. If actualValue is a case-sensitive match for expectedValue,\n        //    return true.\n        if (caseSensitiveMatch(actualValue, expectedValue)) {\n          return true\n        }\n      }\n\n      // 5. Return false.\n      return false\n    }\n\n/**\n * @param {MetadataList} metadataList\n * @returns {MetadataList} The strongest hash algorithm from the metadata list.\n */\nfunction getStrongestMetadata (metadataList) {\n  // 1. Let result be the empty set and strongest be the empty string.\n  const result = []\n  /** @type {Metadata|null} */\n  let strongest = null\n\n  // 2. For each item in set:\n  for (const item of metadataList) {\n    // 1. Assert: item[\"alg\"] is a valid SRI hash algorithm token.\n    assert(isValidSRIHashAlgorithm(item.alg), 'Invalid SRI hash algorithm token')\n\n    // 2. If result is the empty set, then:\n    if (result.length === 0) {\n      // 1. Append item to result.\n      result.push(item)\n\n      // 2. Set strongest to item.\n      strongest = item\n\n      // 3. Continue.\n      continue\n    }\n\n    // 3. Let currentAlgorithm be strongest[\"alg\"], and currentAlgorithmIndex be\n    // the index of currentAlgorithm in the valid SRI hash algorithm token set.\n    const currentAlgorithm = /** @type {Metadata} */ (strongest).alg\n    const currentAlgorithmIndex = getSRIHashAlgorithmIndex(currentAlgorithm)\n\n    // 4. Let newAlgorithm be the item[\"alg\"], and newAlgorithmIndex be the\n    // index of newAlgorithm in the valid SRI hash algorithm token set.\n    const newAlgorithm = item.alg\n    const newAlgorithmIndex = getSRIHashAlgorithmIndex(newAlgorithm)\n\n    // 5. If newAlgorithmIndex is less than currentAlgorithmIndex, then continue.\n    if (newAlgorithmIndex < currentAlgorithmIndex) {\n      continue\n\n    // 6. Otherwise, if newAlgorithmIndex is greater than\n    // currentAlgorithmIndex:\n    } else if (newAlgorithmIndex > currentAlgorithmIndex) {\n      // 1. Set strongest to item.\n      strongest = item\n\n      // 2. Set result to \u00AB item \u00BB.\n      result[0] = item\n      result.length = 1\n\n    // 7. Otherwise, newAlgorithmIndex and currentAlgorithmIndex are the same\n    // value. Append item to result.\n    } else {\n      result.push(item)\n    }\n  }\n\n  // 3. Return result.\n  return result\n}\n\n/**\n * @param {string} metadata\n * @returns {MetadataList}\n *\n * @see https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata\n */\nfunction parseMetadata (metadata) {\n  // 1. Let result be the empty set.\n  /** @type {MetadataList} */\n  const result = []\n\n  // 2. For each item returned by splitting metadata on spaces:\n  for (const item of metadata.split(' ')) {\n    // 1. Let expression-and-options be the result of splitting item on U+003F (?).\n    const expressionAndOptions = item.split('?', 1)\n\n    // 2. Let algorithm-expression be expression-and-options[0].\n    const algorithmExpression = expressionAndOptions[0]\n\n    // 3. Let base64-value be the empty string.\n    let base64Value = ''\n\n    // 4. Let algorithm-and-value be the result of splitting algorithm-expression on U+002D (-).\n    const algorithmAndValue = [algorithmExpression.slice(0, 6), algorithmExpression.slice(7)]\n\n    // 5. Let algorithm be algorithm-and-value[0].\n    const algorithm = algorithmAndValue[0]\n\n    // 6. If algorithm is not a valid SRI hash algorithm token, then continue.\n    if (!isValidSRIHashAlgorithm(algorithm)) {\n      continue\n    }\n\n    // 7. If algorithm-and-value[1] exists, set base64-value to\n    // algorithm-and-value[1].\n    if (algorithmAndValue[1]) {\n      base64Value = algorithmAndValue[1]\n    }\n\n    // 8. Let metadata be the ordered map\n    // \u00AB[\"alg\" \u2192 algorithm, \"val\" \u2192 base64-value]\u00BB.\n    const metadata = {\n      alg: algorithm,\n      val: base64Value\n    }\n\n    // 9. Append metadata to result.\n    result.push(metadata)\n  }\n\n  // 3. Return result.\n  return result\n}\n\n/**\n * Applies the specified hash algorithm to the given bytes\n *\n * @typedef {(algorithm: SRIHashAlgorithm, bytes: Uint8Array) => string} ApplyAlgorithmToBytes\n * @param {SRIHashAlgorithm} algorithm\n * @param {Uint8Array} bytes\n * @returns {string}\n */\nconst applyAlgorithmToBytes = (algorithm, bytes) => {\n  return crypto.hash(algorithm, bytes, 'base64')\n}\n\n/**\n * Compares two base64 strings, allowing for base64url\n * in the second string.\n *\n * @param {string} actualValue base64 encoded string\n * @param {string} expectedValue base64 or base64url encoded string\n * @returns {boolean}\n */\nfunction caseSensitiveMatch (actualValue, expectedValue) {\n  // Ignore padding characters from the end of the strings by\n  // decreasing the length by 1 or 2 if the last characters are `=`.\n  let actualValueLength = actualValue.length\n  if (actualValueLength !== 0 && actualValue[actualValueLength - 1] === '=') {\n    actualValueLength -= 1\n  }\n  if (actualValueLength !== 0 && actualValue[actualValueLength - 1] === '=') {\n    actualValueLength -= 1\n  }\n  let expectedValueLength = expectedValue.length\n  if (expectedValueLength !== 0 && expectedValue[expectedValueLength - 1] === '=') {\n    expectedValueLength -= 1\n  }\n  if (expectedValueLength !== 0 && expectedValue[expectedValueLength - 1] === '=') {\n    expectedValueLength -= 1\n  }\n\n  if (actualValueLength !== expectedValueLength) {\n    return false\n  }\n\n  for (let i = 0; i < actualValueLength; ++i) {\n    if (\n      actualValue[i] === expectedValue[i] ||\n      (actualValue[i] === '+' && expectedValue[i] === '-') ||\n      (actualValue[i] === '/' && expectedValue[i] === '_')\n    ) {\n      continue\n    }\n    return false\n  }\n\n  return true\n}\n\nmodule.exports = {\n  applyAlgorithmToBytes,\n  bytesMatch,\n  caseSensitiveMatch,\n  isValidSRIHashAlgorithm,\n  getStrongestMetadata,\n  parseMetadata\n}\n", "// https://github.com/Ethan-Arrowood/undici-fetch\n\n'use strict'\n\nconst {\n  makeNetworkError,\n  makeAppropriateNetworkError,\n  filterResponse,\n  makeResponse,\n  fromInnerResponse,\n  getResponseState\n} = require('./response')\nconst { HeadersList } = require('./headers')\nconst { Request, cloneRequest, getRequestDispatcher, getRequestState } = require('./request')\nconst zlib = require('node:zlib')\nconst {\n  makePolicyContainer,\n  clonePolicyContainer,\n  requestBadPort,\n  TAOCheck,\n  appendRequestOriginHeader,\n  responseLocationURL,\n  requestCurrentURL,\n  setRequestReferrerPolicyOnRedirect,\n  tryUpgradeRequestToAPotentiallyTrustworthyURL,\n  createOpaqueTimingInfo,\n  appendFetchMetadata,\n  corsCheck,\n  crossOriginResourcePolicyCheck,\n  determineRequestsReferrer,\n  coarsenedSharedCurrentTime,\n  sameOrigin,\n  isCancelled,\n  isAborted,\n  isErrorLike,\n  fullyReadBody,\n  readableStreamClose,\n  urlIsLocal,\n  urlIsHttpHttpsScheme,\n  urlHasHttpsScheme,\n  clampAndCoarsenConnectionTimingInfo,\n  simpleRangeHeaderValue,\n  buildContentRange,\n  createInflate,\n  extractMimeType,\n  hasAuthenticationEntry,\n  includesCredentials,\n  isTraversableNavigable\n} = require('./util')\nconst assert = require('node:assert')\nconst { safelyExtractBody, extractBody } = require('./body')\nconst {\n  redirectStatusSet,\n  nullBodyStatus,\n  safeMethodsSet,\n  requestBodyHeader,\n  subresourceSet\n} = require('./constants')\nconst EE = require('node:events')\nconst { Readable, pipeline, finished, isErrored, isReadable } = require('node:stream')\nconst { addAbortListener, bufferToLowerCasedHeaderName } = require('../../core/util')\nconst { dataURLProcessor, serializeAMimeType, minimizeSupportedMimeType } = require('./data-url')\nconst { getGlobalDispatcher } = require('../../global')\nconst { webidl } = require('../webidl')\nconst { STATUS_CODES } = require('node:http')\nconst { bytesMatch } = require('../subresource-integrity/subresource-integrity')\nconst { createDeferredPromise } = require('../../util/promise')\nconst { isomorphicEncode } = require('../infra')\nconst { runtimeFeatures } = require('../../util/runtime-features')\n\n// Node.js v23.8.0+ and v22.15.0+ supports Zstandard\nconst hasZstd = runtimeFeatures.has('zstd')\n\nconst GET_OR_HEAD = ['GET', 'HEAD']\n\nconst defaultUserAgent = typeof __UNDICI_IS_NODE__ !== 'undefined' || typeof esbuildDetection !== 'undefined'\n  ? 'node'\n  : 'undici'\n\n/** @type {import('buffer').resolveObjectURL} */\nlet resolveObjectURL\n\nclass Fetch extends EE {\n  constructor (dispatcher) {\n    super()\n\n    this.dispatcher = dispatcher\n    this.connection = null\n    this.dump = false\n    this.state = 'ongoing'\n  }\n\n  terminate (reason) {\n    if (this.state !== 'ongoing') {\n      return\n    }\n\n    this.state = 'terminated'\n    this.connection?.destroy(reason)\n    this.emit('terminated', reason)\n  }\n\n  // https://fetch.spec.whatwg.org/#fetch-controller-abort\n  abort (error) {\n    if (this.state !== 'ongoing') {\n      return\n    }\n\n    // 1. Set controller\u2019s state to \"aborted\".\n    this.state = 'aborted'\n\n    // 2. Let fallbackError be an \"AbortError\" DOMException.\n    // 3. Set error to fallbackError if it is not given.\n    if (!error) {\n      error = new DOMException('The operation was aborted.', 'AbortError')\n    }\n\n    // 4. Let serializedError be StructuredSerialize(error).\n    //    If that threw an exception, catch it, and let\n    //    serializedError be StructuredSerialize(fallbackError).\n\n    // 5. Set controller\u2019s serialized abort reason to serializedError.\n    this.serializedAbortReason = error\n\n    this.connection?.destroy(error)\n    this.emit('terminated', error)\n  }\n}\n\nfunction handleFetchDone (response) {\n  finalizeAndReportTiming(response, 'fetch')\n}\n\n// https://fetch.spec.whatwg.org/#fetch-method\nfunction fetch (input, init = undefined) {\n  webidl.argumentLengthCheck(arguments, 1, 'globalThis.fetch')\n\n  // 1. Let p be a new promise.\n  let p = createDeferredPromise()\n\n  // 2. Let requestObject be the result of invoking the initial value of\n  // Request as constructor with input and init as arguments. If this throws\n  // an exception, reject p with it and return p.\n  let requestObject\n\n  try {\n    requestObject = new Request(input, init)\n  } catch (e) {\n    p.reject(e)\n    return p.promise\n  }\n\n  // 3. Let request be requestObject\u2019s request.\n  const request = getRequestState(requestObject)\n\n  // 4. If requestObject\u2019s signal\u2019s aborted flag is set, then:\n  if (requestObject.signal.aborted) {\n    // 1. Abort the fetch() call with p, request, null, and\n    //    requestObject\u2019s signal\u2019s abort reason.\n    abortFetch(p, request, null, requestObject.signal.reason, null)\n\n    // 2. Return p.\n    return p.promise\n  }\n\n  // 5. Let globalObject be request\u2019s client\u2019s global object.\n  const globalObject = request.client.globalObject\n\n  // 6. If globalObject is a ServiceWorkerGlobalScope object, then set\n  // request\u2019s service-workers mode to \"none\".\n  if (globalObject?.constructor?.name === 'ServiceWorkerGlobalScope') {\n    request.serviceWorkers = 'none'\n  }\n\n  // 7. Let responseObject be null.\n  let responseObject = null\n\n  // 8. Let relevantRealm be this\u2019s relevant Realm.\n\n  // 9. Let locallyAborted be false.\n  let locallyAborted = false\n\n  // 10. Let controller be null.\n  let controller = null\n\n  // 11. Add the following abort steps to requestObject\u2019s signal:\n  addAbortListener(\n    requestObject.signal,\n    () => {\n      // 1. Set locallyAborted to true.\n      locallyAborted = true\n\n      // 2. Assert: controller is non-null.\n      assert(controller != null)\n\n      // 3. Abort controller with requestObject\u2019s signal\u2019s abort reason.\n      controller.abort(requestObject.signal.reason)\n\n      const realResponse = responseObject?.deref()\n\n      // 4. Abort the fetch() call with p, request, responseObject,\n      //    and requestObject\u2019s signal\u2019s abort reason.\n      abortFetch(p, request, realResponse, requestObject.signal.reason, controller.controller)\n    }\n  )\n\n  // 12. Let handleFetchDone given response response be to finalize and\n  // report timing with response, globalObject, and \"fetch\".\n  // see function handleFetchDone\n\n  // 13. Set controller to the result of calling fetch given request,\n  // with processResponseEndOfBody set to handleFetchDone, and processResponse\n  // given response being these substeps:\n\n  const processResponse = (response) => {\n    // 1. If locallyAborted is true, terminate these substeps.\n    if (locallyAborted) {\n      return\n    }\n\n    // 2. If response\u2019s aborted flag is set, then:\n    if (response.aborted) {\n      // 1. Let deserializedError be the result of deserialize a serialized\n      //    abort reason given controller\u2019s serialized abort reason and\n      //    relevantRealm.\n\n      // 2. Abort the fetch() call with p, request, responseObject, and\n      //    deserializedError.\n\n      abortFetch(p, request, responseObject, controller.serializedAbortReason, controller.controller)\n      return\n    }\n\n    // 3. If response is a network error, then reject p with a TypeError\n    // and terminate these substeps.\n    if (response.type === 'error') {\n      p.reject(new TypeError('fetch failed', { cause: response.error }))\n      return\n    }\n\n    // 4. Set responseObject to the result of creating a Response object,\n    // given response, \"immutable\", and relevantRealm.\n    responseObject = new WeakRef(fromInnerResponse(response, 'immutable'))\n\n    // 5. Resolve p with responseObject.\n    p.resolve(responseObject.deref())\n    p = null\n  }\n\n  controller = fetching({\n    request,\n    processResponseEndOfBody: handleFetchDone,\n    processResponse,\n    dispatcher: getRequestDispatcher(requestObject), // undici\n    // Keep requestObject alive to prevent its AbortController from being GC'd\n    // See https://github.com/nodejs/undici/issues/4627\n    requestObject\n  })\n\n  // 14. Return p.\n  return p.promise\n}\n\n// https://fetch.spec.whatwg.org/#finalize-and-report-timing\nfunction finalizeAndReportTiming (response, initiatorType = 'other') {\n  // 1. If response is an aborted network error, then return.\n  if (response.type === 'error' && response.aborted) {\n    return\n  }\n\n  // 2. If response\u2019s URL list is null or empty, then return.\n  if (!response.urlList?.length) {\n    return\n  }\n\n  // 3. Let originalURL be response\u2019s URL list[0].\n  const originalURL = response.urlList[0]\n\n  // 4. Let timingInfo be response\u2019s timing info.\n  let timingInfo = response.timingInfo\n\n  // 5. Let cacheState be response\u2019s cache state.\n  let cacheState = response.cacheState\n\n  // 6. If originalURL\u2019s scheme is not an HTTP(S) scheme, then return.\n  if (!urlIsHttpHttpsScheme(originalURL)) {\n    return\n  }\n\n  // 7. If timingInfo is null, then return.\n  if (timingInfo === null) {\n    return\n  }\n\n  // 8. If response\u2019s timing allow passed flag is not set, then:\n  if (!response.timingAllowPassed) {\n    //  1. Set timingInfo to a the result of creating an opaque timing info for timingInfo.\n    timingInfo = createOpaqueTimingInfo({\n      startTime: timingInfo.startTime\n    })\n\n    //  2. Set cacheState to the empty string.\n    cacheState = ''\n  }\n\n  // 9. Set timingInfo\u2019s end time to the coarsened shared current time\n  // given global\u2019s relevant settings object\u2019s cross-origin isolated\n  // capability.\n  // TODO: given global\u2019s relevant settings object\u2019s cross-origin isolated\n  // capability?\n  timingInfo.endTime = coarsenedSharedCurrentTime()\n\n  // 10. Set response\u2019s timing info to timingInfo.\n  response.timingInfo = timingInfo\n\n  // 11. Mark resource timing for timingInfo, originalURL, initiatorType,\n  // global, and cacheState.\n  markResourceTiming(\n    timingInfo,\n    originalURL.href,\n    initiatorType,\n    globalThis,\n    cacheState,\n    '', // bodyType\n    response.status\n  )\n}\n\n// https://w3c.github.io/resource-timing/#dfn-mark-resource-timing\nconst markResourceTiming = performance.markResourceTiming\n\n// https://fetch.spec.whatwg.org/#abort-fetch\nfunction abortFetch (p, request, responseObject, error, controller /* undici-specific */) {\n  // 1. Reject promise with error.\n  if (p) {\n    // We might have already resolved the promise at this stage\n    p.reject(error)\n  }\n\n  // 2. If request\u2019s body is not null and is readable, then cancel request\u2019s\n  // body with error.\n  if (request.body?.stream != null && isReadable(request.body.stream)) {\n    request.body.stream.cancel(error).catch((err) => {\n      if (err.code === 'ERR_INVALID_STATE') {\n        // Node bug?\n        return\n      }\n      throw err\n    })\n  }\n\n  // 3. If responseObject is null, then return.\n  if (responseObject == null) {\n    return\n  }\n\n  // 4. Let response be responseObject\u2019s response.\n  const response = getResponseState(responseObject)\n\n  // 5. If response\u2019s body is not null and is readable, then error response\u2019s\n  // body with error.\n  if (response.body?.stream != null && isReadable(response.body.stream)) {\n    controller.error(error)\n  }\n}\n\n// https://fetch.spec.whatwg.org/#fetching\nfunction fetching ({\n  request,\n  processRequestBodyChunkLength,\n  processRequestEndOfBody,\n  processResponse,\n  processResponseEndOfBody,\n  processResponseConsumeBody,\n  useParallelQueue = false,\n  dispatcher = getGlobalDispatcher(), // undici\n  requestObject = null // Keep alive to prevent AbortController GC, see #4627\n}) {\n  // Ensure that the dispatcher is set accordingly\n  assert(dispatcher)\n\n  // 1. Let taskDestination be null.\n  let taskDestination = null\n\n  // 2. Let crossOriginIsolatedCapability be false.\n  let crossOriginIsolatedCapability = false\n\n  // 3. If request\u2019s client is non-null, then:\n  if (request.client != null) {\n    // 1. Set taskDestination to request\u2019s client\u2019s global object.\n    taskDestination = request.client.globalObject\n\n    // 2. Set crossOriginIsolatedCapability to request\u2019s client\u2019s cross-origin\n    // isolated capability.\n    crossOriginIsolatedCapability =\n      request.client.crossOriginIsolatedCapability\n  }\n\n  // 4. If useParallelQueue is true, then set taskDestination to the result of\n  // starting a new parallel queue.\n  // TODO\n\n  // 5. Let timingInfo be a new fetch timing info whose start time and\n  // post-redirect start time are the coarsened shared current time given\n  // crossOriginIsolatedCapability.\n  const currentTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability)\n  const timingInfo = createOpaqueTimingInfo({\n    startTime: currentTime\n  })\n\n  // 6. Let fetchParams be a new fetch params whose\n  // request is request,\n  // timing info is timingInfo,\n  // process request body chunk length is processRequestBodyChunkLength,\n  // process request end-of-body is processRequestEndOfBody,\n  // process response is processResponse,\n  // process response consume body is processResponseConsumeBody,\n  // process response end-of-body is processResponseEndOfBody,\n  // task destination is taskDestination,\n  // and cross-origin isolated capability is crossOriginIsolatedCapability.\n  const fetchParams = {\n    controller: new Fetch(dispatcher),\n    request,\n    timingInfo,\n    processRequestBodyChunkLength,\n    processRequestEndOfBody,\n    processResponse,\n    processResponseConsumeBody,\n    processResponseEndOfBody,\n    taskDestination,\n    crossOriginIsolatedCapability,\n    // Keep requestObject alive to prevent its AbortController from being GC'd\n    requestObject\n  }\n\n  // 7. If request\u2019s body is a byte sequence, then set request\u2019s body to\n  //    request\u2019s body as a body.\n  // NOTE: Since fetching is only called from fetch, body should already be\n  // extracted.\n  assert(!request.body || request.body.stream)\n\n  // 8. If request\u2019s window is \"client\", then set request\u2019s window to request\u2019s\n  // client, if request\u2019s client\u2019s global object is a Window object; otherwise\n  // \"no-window\".\n  if (request.window === 'client') {\n    // TODO: What if request.client is null?\n    request.window =\n      request.client?.globalObject?.constructor?.name === 'Window'\n        ? request.client\n        : 'no-window'\n  }\n\n  // 9. If request\u2019s origin is \"client\", then set request\u2019s origin to request\u2019s\n  // client\u2019s origin.\n  if (request.origin === 'client') {\n    request.origin = request.client.origin\n  }\n\n  // 10. If all of the following conditions are true:\n  // TODO\n\n  // 11. If request\u2019s policy container is \"client\", then:\n  if (request.policyContainer === 'client') {\n    // 1. If request\u2019s client is non-null, then set request\u2019s policy\n    // container to a clone of request\u2019s client\u2019s policy container. [HTML]\n    if (request.client != null) {\n      request.policyContainer = clonePolicyContainer(\n        request.client.policyContainer\n      )\n    } else {\n      // 2. Otherwise, set request\u2019s policy container to a new policy\n      // container.\n      request.policyContainer = makePolicyContainer()\n    }\n  }\n\n  // 12. If request\u2019s header list does not contain `Accept`, then:\n  if (!request.headersList.contains('accept', true)) {\n    // 1. Let value be `*/*`.\n    const value = '*/*'\n\n    // 2. A user agent should set value to the first matching statement, if\n    // any, switching on request\u2019s destination:\n    // \"document\"\n    // \"frame\"\n    // \"iframe\"\n    // `text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8`\n    // \"image\"\n    // `image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5`\n    // \"style\"\n    // `text/css,*/*;q=0.1`\n    // TODO\n\n    // 3. Append `Accept`/value to request\u2019s header list.\n    request.headersList.append('accept', value, true)\n  }\n\n  // 13. If request\u2019s header list does not contain `Accept-Language`, then\n  // user agents should append `Accept-Language`/an appropriate value to\n  // request\u2019s header list.\n  if (!request.headersList.contains('accept-language', true)) {\n    request.headersList.append('accept-language', '*', true)\n  }\n\n  // 14. If request\u2019s priority is null, then use request\u2019s initiator and\n  // destination appropriately in setting request\u2019s priority to a\n  // user-agent-defined object.\n  if (request.priority === null) {\n    // TODO\n  }\n\n  // 15. If request is a subresource request, then:\n  if (subresourceSet.has(request.destination)) {\n    // TODO\n  }\n\n  // 16. Run main fetch given fetchParams.\n  mainFetch(fetchParams, false)\n\n  // 17. Return fetchParam's controller\n  return fetchParams.controller\n}\n\n// https://fetch.spec.whatwg.org/#concept-main-fetch\nasync function mainFetch (fetchParams, recursive) {\n  try {\n    // 1. Let request be fetchParams\u2019s request.\n    const request = fetchParams.request\n\n    // 2. Let response be null.\n    let response = null\n\n    // 3. If request\u2019s local-URLs-only flag is set and request\u2019s current URL is\n    // not local, then set response to a network error.\n    if (request.localURLsOnly && !urlIsLocal(requestCurrentURL(request))) {\n      response = makeNetworkError('local URLs only')\n    }\n\n    // 4. Run report Content Security Policy violations for request.\n    // TODO\n\n    // 5. Upgrade request to a potentially trustworthy URL, if appropriate.\n    tryUpgradeRequestToAPotentiallyTrustworthyURL(request)\n\n    // 6. If should request be blocked due to a bad port, should fetching request\n    // be blocked as mixed content, or should request be blocked by Content\n    // Security Policy returns blocked, then set response to a network error.\n    if (requestBadPort(request) === 'blocked') {\n      response = makeNetworkError('bad port')\n    }\n    // TODO: should fetching request be blocked as mixed content?\n    // TODO: should request be blocked by Content Security Policy?\n\n    // 7. If request\u2019s referrer policy is the empty string, then set request\u2019s\n    // referrer policy to request\u2019s policy container\u2019s referrer policy.\n    if (request.referrerPolicy === '') {\n      request.referrerPolicy = request.policyContainer.referrerPolicy\n    }\n\n    // 8. If request\u2019s referrer is not \"no-referrer\", then set request\u2019s\n    // referrer to the result of invoking determine request\u2019s referrer.\n    if (request.referrer !== 'no-referrer') {\n      request.referrer = determineRequestsReferrer(request)\n    }\n\n    // 9. Set request\u2019s current URL\u2019s scheme to \"https\" if all of the following\n    // conditions are true:\n    // - request\u2019s current URL\u2019s scheme is \"http\"\n    // - request\u2019s current URL\u2019s host is a domain\n    // - Matching request\u2019s current URL\u2019s host per Known HSTS Host Domain Name\n    //   Matching results in either a superdomain match with an asserted\n    //   includeSubDomains directive or a congruent match (with or without an\n    //   asserted includeSubDomains directive). [HSTS]\n    // TODO\n\n    // 10. If recursive is false, then run the remaining steps in parallel.\n    // TODO\n\n    // 11. If response is null, then set response to the result of running\n    // the steps corresponding to the first matching statement:\n    if (response === null) {\n      const currentURL = requestCurrentURL(request)\n      if (\n        // - request\u2019s current URL\u2019s origin is same origin with request\u2019s origin,\n        //   and request\u2019s response tainting is \"basic\"\n        (sameOrigin(currentURL, request.url) && request.responseTainting === 'basic') ||\n        // request\u2019s current URL\u2019s scheme is \"data\"\n        (currentURL.protocol === 'data:') ||\n        // - request\u2019s mode is \"navigate\" or \"websocket\"\n        (request.mode === 'navigate' || request.mode === 'websocket')\n      ) {\n        // 1. Set request\u2019s response tainting to \"basic\".\n        request.responseTainting = 'basic'\n\n        // 2. Return the result of running scheme fetch given fetchParams.\n        response = await schemeFetch(fetchParams)\n\n      // request\u2019s mode is \"same-origin\"\n      } else if (request.mode === 'same-origin') {\n        // 1. Return a network error.\n        response = makeNetworkError('request mode cannot be \"same-origin\"')\n\n      // request\u2019s mode is \"no-cors\"\n      } else if (request.mode === 'no-cors') {\n        // 1. If request\u2019s redirect mode is not \"follow\", then return a network\n        // error.\n        if (request.redirect !== 'follow') {\n          response = makeNetworkError(\n            'redirect mode cannot be \"follow\" for \"no-cors\" request'\n          )\n        } else {\n          // 2. Set request\u2019s response tainting to \"opaque\".\n          request.responseTainting = 'opaque'\n\n          // 3. Return the result of running scheme fetch given fetchParams.\n          response = await schemeFetch(fetchParams)\n        }\n      // request\u2019s current URL\u2019s scheme is not an HTTP(S) scheme\n      } else if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) {\n        // Return a network error.\n        response = makeNetworkError('URL scheme must be a HTTP(S) scheme')\n\n        // - request\u2019s use-CORS-preflight flag is set\n        // - request\u2019s unsafe-request flag is set and either request\u2019s method is\n        //   not a CORS-safelisted method or CORS-unsafe request-header names with\n        //   request\u2019s header list is not empty\n        //    1. Set request\u2019s response tainting to \"cors\".\n        //    2. Let corsWithPreflightResponse be the result of running HTTP fetch\n        //    given fetchParams and true.\n        //    3. If corsWithPreflightResponse is a network error, then clear cache\n        //    entries using request.\n        //    4. Return corsWithPreflightResponse.\n        // TODO\n\n      // Otherwise\n      } else {\n        //    1. Set request\u2019s response tainting to \"cors\".\n        request.responseTainting = 'cors'\n\n        //    2. Return the result of running HTTP fetch given fetchParams.\n        response = await httpFetch(fetchParams)\n      }\n    }\n\n    // 12. If recursive is true, then return response.\n    if (recursive) {\n      return response\n    }\n\n    // 13. If response is not a network error and response is not a filtered\n    // response, then:\n    if (response.status !== 0 && !response.internalResponse) {\n      // If request\u2019s response tainting is \"cors\", then:\n      if (request.responseTainting === 'cors') {\n        // 1. Let headerNames be the result of extracting header list values\n        // given `Access-Control-Expose-Headers` and response\u2019s header list.\n        // TODO\n        // 2. If request\u2019s credentials mode is not \"include\" and headerNames\n        // contains `*`, then set response\u2019s CORS-exposed header-name list to\n        // all unique header names in response\u2019s header list.\n        // TODO\n        // 3. Otherwise, if headerNames is not null or failure, then set\n        // response\u2019s CORS-exposed header-name list to headerNames.\n        // TODO\n      }\n\n      // Set response to the following filtered response with response as its\n      // internal response, depending on request\u2019s response tainting:\n      if (request.responseTainting === 'basic') {\n        response = filterResponse(response, 'basic')\n      } else if (request.responseTainting === 'cors') {\n        response = filterResponse(response, 'cors')\n      } else if (request.responseTainting === 'opaque') {\n        response = filterResponse(response, 'opaque')\n      } else {\n        assert(false)\n      }\n    }\n\n    // 14. Let internalResponse be response, if response is a network error,\n    // and response\u2019s internal response otherwise.\n    let internalResponse =\n      response.status === 0 ? response : response.internalResponse\n\n    // 15. If internalResponse\u2019s URL list is empty, then set it to a clone of\n    // request\u2019s URL list.\n    if (internalResponse.urlList.length === 0) {\n      internalResponse.urlList.push(...request.urlList)\n    }\n\n    // 16. If request\u2019s timing allow failed flag is unset, then set\n    // internalResponse\u2019s timing allow passed flag.\n    if (!request.timingAllowFailed) {\n      response.timingAllowPassed = true\n    }\n\n    // 17. If response is not a network error and any of the following returns\n    // blocked\n    // - should internalResponse to request be blocked as mixed content\n    // - should internalResponse to request be blocked by Content Security Policy\n    // - should internalResponse to request be blocked due to its MIME type\n    // - should internalResponse to request be blocked due to nosniff\n    // TODO\n\n    // 18. If response\u2019s type is \"opaque\", internalResponse\u2019s status is 206,\n    // internalResponse\u2019s range-requested flag is set, and request\u2019s header\n    // list does not contain `Range`, then set response and internalResponse\n    // to a network error.\n    if (\n      response.type === 'opaque' &&\n      internalResponse.status === 206 &&\n      internalResponse.rangeRequested &&\n      !request.headers.contains('range', true)\n    ) {\n      response = internalResponse = makeNetworkError()\n    }\n\n    // 19. If response is not a network error and either request\u2019s method is\n    // `HEAD` or `CONNECT`, or internalResponse\u2019s status is a null body status,\n    // set internalResponse\u2019s body to null and disregard any enqueuing toward\n    // it (if any).\n    if (\n      response.status !== 0 &&\n      (request.method === 'HEAD' ||\n        request.method === 'CONNECT' ||\n        nullBodyStatus.includes(internalResponse.status))\n    ) {\n      internalResponse.body = null\n      fetchParams.controller.dump = true\n    }\n\n    // 20. If request\u2019s integrity metadata is not the empty string, then:\n    if (request.integrity) {\n      // 1. Let processBodyError be this step: run fetch finale given fetchParams\n      // and a network error.\n      const processBodyError = (reason) =>\n        fetchFinale(fetchParams, makeNetworkError(reason))\n\n      // 2. If request\u2019s response tainting is \"opaque\", or response\u2019s body is null,\n      // then run processBodyError and abort these steps.\n      if (request.responseTainting === 'opaque' || response.body == null) {\n        processBodyError(response.error)\n        return\n      }\n\n      // 3. Let processBody given bytes be these steps:\n      const processBody = (bytes) => {\n        // 1. If bytes do not match request\u2019s integrity metadata,\n        // then run processBodyError and abort these steps. [SRI]\n        if (!bytesMatch(bytes, request.integrity)) {\n          processBodyError('integrity mismatch')\n          return\n        }\n\n        // 2. Set response\u2019s body to bytes as a body.\n        response.body = safelyExtractBody(bytes)[0]\n\n        // 3. Run fetch finale given fetchParams and response.\n        fetchFinale(fetchParams, response)\n      }\n\n      // 4. Fully read response\u2019s body given processBody and processBodyError.\n      fullyReadBody(response.body, processBody, processBodyError)\n    } else {\n      // 21. Otherwise, run fetch finale given fetchParams and response.\n      fetchFinale(fetchParams, response)\n    }\n  } catch (err) {\n    fetchParams.controller.terminate(err)\n  }\n}\n\n// https://fetch.spec.whatwg.org/#concept-scheme-fetch\n// given a fetch params fetchParams\nfunction schemeFetch (fetchParams) {\n  // Note: since the connection is destroyed on redirect, which sets fetchParams to a\n  // cancelled state, we do not want this condition to trigger *unless* there have been\n  // no redirects. See https://github.com/nodejs/undici/issues/1776\n  // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams.\n  if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) {\n    return Promise.resolve(makeAppropriateNetworkError(fetchParams))\n  }\n\n  // 2. Let request be fetchParams\u2019s request.\n  const { request } = fetchParams\n\n  const { protocol: scheme } = requestCurrentURL(request)\n\n  // 3. Switch on request\u2019s current URL\u2019s scheme and run the associated steps:\n  switch (scheme) {\n    case 'about:': {\n      // If request\u2019s current URL\u2019s path is the string \"blank\", then return a new response\n      // whose status message is `OK`, header list is \u00AB (`Content-Type`, `text/html;charset=utf-8`) \u00BB,\n      // and body is the empty byte sequence as a body.\n\n      // Otherwise, return a network error.\n      return Promise.resolve(makeNetworkError('about scheme is not supported'))\n    }\n    case 'blob:': {\n      if (!resolveObjectURL) {\n        resolveObjectURL = require('node:buffer').resolveObjectURL\n      }\n\n      // 1. Let blobURLEntry be request\u2019s current URL\u2019s blob URL entry.\n      const blobURLEntry = requestCurrentURL(request)\n\n      // https://github.com/web-platform-tests/wpt/blob/7b0ebaccc62b566a1965396e5be7bb2bc06f841f/FileAPI/url/resources/fetch-tests.js#L52-L56\n      // Buffer.resolveObjectURL does not ignore URL queries.\n      if (blobURLEntry.search.length !== 0) {\n        return Promise.resolve(makeNetworkError('NetworkError when attempting to fetch resource.'))\n      }\n\n      const blob = resolveObjectURL(blobURLEntry.toString())\n\n      // 2. If request\u2019s method is not `GET`, blobURLEntry is null, or blobURLEntry\u2019s\n      //    object is not a Blob object, then return a network error.\n      if (request.method !== 'GET' || !webidl.is.Blob(blob)) {\n        return Promise.resolve(makeNetworkError('invalid method'))\n      }\n\n      // 3. Let blob be blobURLEntry\u2019s object.\n      // Note: done above\n\n      // 4. Let response be a new response.\n      const response = makeResponse()\n\n      // 5. Let fullLength be blob\u2019s size.\n      const fullLength = blob.size\n\n      // 6. Let serializedFullLength be fullLength, serialized and isomorphic encoded.\n      const serializedFullLength = isomorphicEncode(`${fullLength}`)\n\n      // 7. Let type be blob\u2019s type.\n      const type = blob.type\n\n      // 8. If request\u2019s header list does not contain `Range`:\n      // 9. Otherwise:\n      if (!request.headersList.contains('range', true)) {\n        // 1. Let bodyWithType be the result of safely extracting blob.\n        // Note: in the FileAPI a blob \"object\" is a Blob *or* a MediaSource.\n        // In node, this can only ever be a Blob. Therefore we can safely\n        // use extractBody directly.\n        const bodyWithType = extractBody(blob)\n\n        // 2. Set response\u2019s status message to `OK`.\n        response.statusText = 'OK'\n\n        // 3. Set response\u2019s body to bodyWithType\u2019s body.\n        response.body = bodyWithType[0]\n\n        // 4. Set response\u2019s header list to \u00AB (`Content-Length`, serializedFullLength), (`Content-Type`, type) \u00BB.\n        response.headersList.set('content-length', serializedFullLength, true)\n        response.headersList.set('content-type', type, true)\n      } else {\n        // 1. Set response\u2019s range-requested flag.\n        response.rangeRequested = true\n\n        // 2. Let rangeHeader be the result of getting `Range` from request\u2019s header list.\n        const rangeHeader = request.headersList.get('range', true)\n\n        // 3. Let rangeValue be the result of parsing a single range header value given rangeHeader and true.\n        const rangeValue = simpleRangeHeaderValue(rangeHeader, true)\n\n        // 4. If rangeValue is failure, then return a network error.\n        if (rangeValue === 'failure') {\n          return Promise.resolve(makeNetworkError('failed to fetch the data URL'))\n        }\n\n        // 5. Let (rangeStart, rangeEnd) be rangeValue.\n        let { rangeStartValue: rangeStart, rangeEndValue: rangeEnd } = rangeValue\n\n        // 6. If rangeStart is null:\n        // 7. Otherwise:\n        if (rangeStart === null) {\n          // 1. Set rangeStart to fullLength \u2212 rangeEnd.\n          rangeStart = fullLength - rangeEnd\n\n          // 2. Set rangeEnd to rangeStart + rangeEnd \u2212 1.\n          rangeEnd = rangeStart + rangeEnd - 1\n        } else {\n          // 1. If rangeStart is greater than or equal to fullLength, then return a network error.\n          if (rangeStart >= fullLength) {\n            return Promise.resolve(makeNetworkError('Range start is greater than the blob\\'s size.'))\n          }\n\n          // 2. If rangeEnd is null or rangeEnd is greater than or equal to fullLength, then set\n          //    rangeEnd to fullLength \u2212 1.\n          if (rangeEnd === null || rangeEnd >= fullLength) {\n            rangeEnd = fullLength - 1\n          }\n        }\n\n        // 8. Let slicedBlob be the result of invoking slice blob given blob, rangeStart,\n        //    rangeEnd + 1, and type.\n        const slicedBlob = blob.slice(rangeStart, rangeEnd + 1, type)\n\n        // 9. Let slicedBodyWithType be the result of safely extracting slicedBlob.\n        // Note: same reason as mentioned above as to why we use extractBody\n        const slicedBodyWithType = extractBody(slicedBlob)\n\n        // 10. Set response\u2019s body to slicedBodyWithType\u2019s body.\n        response.body = slicedBodyWithType[0]\n\n        // 11. Let serializedSlicedLength be slicedBlob\u2019s size, serialized and isomorphic encoded.\n        const serializedSlicedLength = isomorphicEncode(`${slicedBlob.size}`)\n\n        // 12. Let contentRange be the result of invoking build a content range given rangeStart,\n        //     rangeEnd, and fullLength.\n        const contentRange = buildContentRange(rangeStart, rangeEnd, fullLength)\n\n        // 13. Set response\u2019s status to 206.\n        response.status = 206\n\n        // 14. Set response\u2019s status message to `Partial Content`.\n        response.statusText = 'Partial Content'\n\n        // 15. Set response\u2019s header list to \u00AB (`Content-Length`, serializedSlicedLength),\n        //     (`Content-Type`, type), (`Content-Range`, contentRange) \u00BB.\n        response.headersList.set('content-length', serializedSlicedLength, true)\n        response.headersList.set('content-type', type, true)\n        response.headersList.set('content-range', contentRange, true)\n      }\n\n      // 10. Return response.\n      return Promise.resolve(response)\n    }\n    case 'data:': {\n      // 1. Let dataURLStruct be the result of running the\n      //    data: URL processor on request\u2019s current URL.\n      const currentURL = requestCurrentURL(request)\n      const dataURLStruct = dataURLProcessor(currentURL)\n\n      // 2. If dataURLStruct is failure, then return a\n      //    network error.\n      if (dataURLStruct === 'failure') {\n        return Promise.resolve(makeNetworkError('failed to fetch the data URL'))\n      }\n\n      // 3. Let mimeType be dataURLStruct\u2019s MIME type, serialized.\n      const mimeType = serializeAMimeType(dataURLStruct.mimeType)\n\n      // 4. Return a response whose status message is `OK`,\n      //    header list is \u00AB (`Content-Type`, mimeType) \u00BB,\n      //    and body is dataURLStruct\u2019s body as a body.\n      return Promise.resolve(makeResponse({\n        statusText: 'OK',\n        headersList: [\n          ['content-type', { name: 'Content-Type', value: mimeType }]\n        ],\n        body: safelyExtractBody(dataURLStruct.body)[0]\n      }))\n    }\n    case 'file:': {\n      // For now, unfortunate as it is, file URLs are left as an exercise for the reader.\n      // When in doubt, return a network error.\n      return Promise.resolve(makeNetworkError('not implemented... yet...'))\n    }\n    case 'http:':\n    case 'https:': {\n      // Return the result of running HTTP fetch given fetchParams.\n\n      return httpFetch(fetchParams)\n        .catch((err) => makeNetworkError(err))\n    }\n    default: {\n      return Promise.resolve(makeNetworkError('unknown scheme'))\n    }\n  }\n}\n\n// https://fetch.spec.whatwg.org/#finalize-response\nfunction finalizeResponse (fetchParams, response) {\n  // 1. Set fetchParams\u2019s request\u2019s done flag.\n  fetchParams.request.done = true\n\n  // 2, If fetchParams\u2019s process response done is not null, then queue a fetch\n  // task to run fetchParams\u2019s process response done given response, with\n  // fetchParams\u2019s task destination.\n  if (fetchParams.processResponseDone != null) {\n    queueMicrotask(() => fetchParams.processResponseDone(response))\n  }\n}\n\n// https://fetch.spec.whatwg.org/#fetch-finale\nfunction fetchFinale (fetchParams, response) {\n  // 1. Let timingInfo be fetchParams\u2019s timing info.\n  let timingInfo = fetchParams.timingInfo\n\n  // 2. If response is not a network error and fetchParams\u2019s request\u2019s client is a secure context,\n  //    then set timingInfo\u2019s server-timing headers to the result of getting, decoding, and splitting\n  //    `Server-Timing` from response\u2019s internal response\u2019s header list.\n  // TODO\n\n  // 3. Let processResponseEndOfBody be the following steps:\n  const processResponseEndOfBody = () => {\n    // 1. Let unsafeEndTime be the unsafe shared current time.\n    const unsafeEndTime = Date.now() // ?\n\n    // 2. If fetchParams\u2019s request\u2019s destination is \"document\", then set fetchParams\u2019s controller\u2019s\n    //    full timing info to fetchParams\u2019s timing info.\n    if (fetchParams.request.destination === 'document') {\n      fetchParams.controller.fullTimingInfo = timingInfo\n    }\n\n    // 3. Set fetchParams\u2019s controller\u2019s report timing steps to the following steps given a global object global:\n    fetchParams.controller.reportTimingSteps = () => {\n      // 1. If fetchParams\u2019s request\u2019s URL\u2019s scheme is not an HTTP(S) scheme, then return.\n      if (!urlIsHttpHttpsScheme(fetchParams.request.url)) {\n        return\n      }\n\n      // 2. Set timingInfo\u2019s end time to the relative high resolution time given unsafeEndTime and global.\n      timingInfo.endTime = unsafeEndTime\n\n      // 3. Let cacheState be response\u2019s cache state.\n      let cacheState = response.cacheState\n\n      // 4. Let bodyInfo be response\u2019s body info.\n      const bodyInfo = response.bodyInfo\n\n      // 5. If response\u2019s timing allow passed flag is not set, then set timingInfo to the result of creating an\n      //    opaque timing info for timingInfo and set cacheState to the empty string.\n      if (!response.timingAllowPassed) {\n        timingInfo = createOpaqueTimingInfo(timingInfo)\n\n        cacheState = ''\n      }\n\n      // 6. Let responseStatus be 0.\n      let responseStatus = 0\n\n      // 7. If fetchParams\u2019s request\u2019s mode is not \"navigate\" or response\u2019s has-cross-origin-redirects is false:\n      if (fetchParams.request.mode !== 'navigate' || !response.hasCrossOriginRedirects) {\n        // 1. Set responseStatus to response\u2019s status.\n        responseStatus = response.status\n\n        // 2. Let mimeType be the result of extracting a MIME type from response\u2019s header list.\n        const mimeType = extractMimeType(response.headersList)\n\n        // 3. If mimeType is not failure, then set bodyInfo\u2019s content type to the result of minimizing a supported MIME type given mimeType.\n        if (mimeType !== 'failure') {\n          bodyInfo.contentType = minimizeSupportedMimeType(mimeType)\n        }\n      }\n\n      // 8. If fetchParams\u2019s request\u2019s initiator type is non-null, then mark resource timing given timingInfo,\n      //    fetchParams\u2019s request\u2019s URL, fetchParams\u2019s request\u2019s initiator type, global, cacheState, bodyInfo,\n      //    and responseStatus.\n      if (fetchParams.request.initiatorType != null) {\n        markResourceTiming(timingInfo, fetchParams.request.url.href, fetchParams.request.initiatorType, globalThis, cacheState, bodyInfo, responseStatus)\n      }\n    }\n\n    // 4. Let processResponseEndOfBodyTask be the following steps:\n    const processResponseEndOfBodyTask = () => {\n      // 1. Set fetchParams\u2019s request\u2019s done flag.\n      fetchParams.request.done = true\n\n      // 2. If fetchParams\u2019s process response end-of-body is non-null, then run fetchParams\u2019s process\n      //    response end-of-body given response.\n      if (fetchParams.processResponseEndOfBody != null) {\n        queueMicrotask(() => fetchParams.processResponseEndOfBody(response))\n      }\n\n      // 3. If fetchParams\u2019s request\u2019s initiator type is non-null and fetchParams\u2019s request\u2019s client\u2019s\n      //    global object is fetchParams\u2019s task destination, then run fetchParams\u2019s controller\u2019s report\n      //    timing steps given fetchParams\u2019s request\u2019s client\u2019s global object.\n      if (fetchParams.request.initiatorType != null) {\n        fetchParams.controller.reportTimingSteps()\n      }\n    }\n\n    // 5. Queue a fetch task to run processResponseEndOfBodyTask with fetchParams\u2019s task destination\n    queueMicrotask(() => processResponseEndOfBodyTask())\n  }\n\n  // 4. If fetchParams\u2019s process response is non-null, then queue a fetch task to run fetchParams\u2019s\n  //    process response given response, with fetchParams\u2019s task destination.\n  if (fetchParams.processResponse != null) {\n    queueMicrotask(() => {\n      fetchParams.processResponse(response)\n      fetchParams.processResponse = null\n    })\n  }\n\n  // 5. Let internalResponse be response, if response is a network error; otherwise response\u2019s internal response.\n  const internalResponse = response.type === 'error' ? response : (response.internalResponse ?? response)\n\n  // 6. If internalResponse\u2019s body is null, then run processResponseEndOfBody.\n  // 7. Otherwise:\n  if (internalResponse.body == null) {\n    processResponseEndOfBody()\n  } else {\n    // mcollina: all the following steps of the specs are skipped.\n    // The internal transform stream is not needed.\n    // See https://github.com/nodejs/undici/pull/3093#issuecomment-2050198541\n\n    // 1. Let transformStream be a new TransformStream.\n    // 2. Let identityTransformAlgorithm be an algorithm which, given chunk, enqueues chunk in transformStream.\n    // 3. Set up transformStream with transformAlgorithm set to identityTransformAlgorithm and flushAlgorithm\n    //    set to processResponseEndOfBody.\n    // 4. Set internalResponse\u2019s body\u2019s stream to the result of internalResponse\u2019s body\u2019s stream piped through transformStream.\n\n    finished(internalResponse.body.stream, () => {\n      processResponseEndOfBody()\n    })\n  }\n}\n\n// https://fetch.spec.whatwg.org/#http-fetch\nasync function httpFetch (fetchParams) {\n  // 1. Let request be fetchParams\u2019s request.\n  const request = fetchParams.request\n\n  // 2. Let response be null.\n  let response = null\n\n  // 3. Let actualResponse be null.\n  let actualResponse = null\n\n  // 4. Let timingInfo be fetchParams\u2019s timing info.\n  const timingInfo = fetchParams.timingInfo\n\n  // 5. If request\u2019s service-workers mode is \"all\", then:\n  if (request.serviceWorkers === 'all') {\n    // TODO\n  }\n\n  // 6. If response is null, then:\n  if (response === null) {\n    // 1. If makeCORSPreflight is true and one of these conditions is true:\n    // TODO\n\n    // 2. If request\u2019s redirect mode is \"follow\", then set request\u2019s\n    // service-workers mode to \"none\".\n    if (request.redirect === 'follow') {\n      request.serviceWorkers = 'none'\n    }\n\n    // 3. Set response and actualResponse to the result of running\n    // HTTP-network-or-cache fetch given fetchParams.\n    actualResponse = response = await httpNetworkOrCacheFetch(fetchParams)\n\n    // 4. If request\u2019s response tainting is \"cors\" and a CORS check\n    // for request and response returns failure, then return a network error.\n    if (\n      request.responseTainting === 'cors' &&\n      corsCheck(request, response) === 'failure'\n    ) {\n      return makeNetworkError('cors failure')\n    }\n\n    // 5. If the TAO check for request and response returns failure, then set\n    // request\u2019s timing allow failed flag.\n    if (TAOCheck(request, response) === 'failure') {\n      request.timingAllowFailed = true\n    }\n  }\n\n  // 7. If either request\u2019s response tainting or response\u2019s type\n  // is \"opaque\", and the cross-origin resource policy check with\n  // request\u2019s origin, request\u2019s client, request\u2019s destination,\n  // and actualResponse returns blocked, then return a network error.\n  if (\n    (request.responseTainting === 'opaque' || response.type === 'opaque') &&\n    crossOriginResourcePolicyCheck(\n      request.origin,\n      request.client,\n      request.destination,\n      actualResponse\n    ) === 'blocked'\n  ) {\n    return makeNetworkError('blocked')\n  }\n\n  // 8. If actualResponse\u2019s status is a redirect status, then:\n  if (redirectStatusSet.has(actualResponse.status)) {\n    // 1. If actualResponse\u2019s status is not 303, request\u2019s body is not null,\n    // and the connection uses HTTP/2, then user agents may, and are even\n    // encouraged to, transmit an RST_STREAM frame.\n    // See, https://github.com/whatwg/fetch/issues/1288\n    if (request.redirect !== 'manual') {\n      fetchParams.controller.connection.destroy(undefined, false)\n    }\n\n    // 2. Switch on request\u2019s redirect mode:\n    if (request.redirect === 'error') {\n      // Set response to a network error.\n      response = makeNetworkError('unexpected redirect')\n    } else if (request.redirect === 'manual') {\n      // Set response to an opaque-redirect filtered response whose internal\n      // response is actualResponse.\n      // NOTE(spec): On the web this would return an `opaqueredirect` response,\n      // but that doesn't make sense server side.\n      // See https://github.com/nodejs/undici/issues/1193.\n      response = actualResponse\n    } else if (request.redirect === 'follow') {\n      // Set response to the result of running HTTP-redirect fetch given\n      // fetchParams and response.\n      response = await httpRedirectFetch(fetchParams, response)\n    } else {\n      assert(false)\n    }\n  }\n\n  // 9. Set response\u2019s timing info to timingInfo.\n  response.timingInfo = timingInfo\n\n  // 10. Return response.\n  return response\n}\n\n// https://fetch.spec.whatwg.org/#http-redirect-fetch\nfunction httpRedirectFetch (fetchParams, response) {\n  // 1. Let request be fetchParams\u2019s request.\n  const request = fetchParams.request\n\n  // 2. Let actualResponse be response, if response is not a filtered response,\n  // and response\u2019s internal response otherwise.\n  const actualResponse = response.internalResponse\n    ? response.internalResponse\n    : response\n\n  // 3. Let locationURL be actualResponse\u2019s location URL given request\u2019s current\n  // URL\u2019s fragment.\n  let locationURL\n\n  try {\n    locationURL = responseLocationURL(\n      actualResponse,\n      requestCurrentURL(request).hash\n    )\n\n    // 4. If locationURL is null, then return response.\n    if (locationURL == null) {\n      return response\n    }\n  } catch (err) {\n    // 5. If locationURL is failure, then return a network error.\n    return Promise.resolve(makeNetworkError(err))\n  }\n\n  // 6. If locationURL\u2019s scheme is not an HTTP(S) scheme, then return a network\n  // error.\n  if (!urlIsHttpHttpsScheme(locationURL)) {\n    return Promise.resolve(makeNetworkError('URL scheme must be a HTTP(S) scheme'))\n  }\n\n  // 7. If request\u2019s redirect count is 20, then return a network error.\n  if (request.redirectCount === 20) {\n    return Promise.resolve(makeNetworkError('redirect count exceeded'))\n  }\n\n  // 8. Increase request\u2019s redirect count by 1.\n  request.redirectCount += 1\n\n  // 9. If request\u2019s mode is \"cors\", locationURL includes credentials, and\n  // request\u2019s origin is not same origin with locationURL\u2019s origin, then return\n  //  a network error.\n  if (\n    request.mode === 'cors' &&\n    (locationURL.username || locationURL.password) &&\n    !sameOrigin(request, locationURL)\n  ) {\n    return Promise.resolve(makeNetworkError('cross origin not allowed for request mode \"cors\"'))\n  }\n\n  // 10. If request\u2019s response tainting is \"cors\" and locationURL includes\n  // credentials, then return a network error.\n  if (\n    request.responseTainting === 'cors' &&\n    (locationURL.username || locationURL.password)\n  ) {\n    return Promise.resolve(makeNetworkError(\n      'URL cannot contain credentials for request mode \"cors\"'\n    ))\n  }\n\n  // 11. If actualResponse\u2019s status is not 303, request\u2019s body is non-null,\n  // and request\u2019s body\u2019s source is null, then return a network error.\n  if (\n    actualResponse.status !== 303 &&\n    request.body != null &&\n    request.body.source == null\n  ) {\n    return Promise.resolve(makeNetworkError())\n  }\n\n  // 12. If one of the following is true\n  // - actualResponse\u2019s status is 301 or 302 and request\u2019s method is `POST`\n  // - actualResponse\u2019s status is 303 and request\u2019s method is not `GET` or `HEAD`\n  if (\n    ([301, 302].includes(actualResponse.status) && request.method === 'POST') ||\n    (actualResponse.status === 303 &&\n      !GET_OR_HEAD.includes(request.method))\n  ) {\n    // then:\n    // 1. Set request\u2019s method to `GET` and request\u2019s body to null.\n    request.method = 'GET'\n    request.body = null\n\n    // 2. For each headerName of request-body-header name, delete headerName from\n    // request\u2019s header list.\n    for (const headerName of requestBodyHeader) {\n      request.headersList.delete(headerName)\n    }\n  }\n\n  // 13. If request\u2019s current URL\u2019s origin is not same origin with locationURL\u2019s\n  //     origin, then for each headerName of CORS non-wildcard request-header name,\n  //     delete headerName from request\u2019s header list.\n  if (!sameOrigin(requestCurrentURL(request), locationURL)) {\n    // https://fetch.spec.whatwg.org/#cors-non-wildcard-request-header-name\n    request.headersList.delete('authorization', true)\n\n    // https://fetch.spec.whatwg.org/#authentication-entries\n    request.headersList.delete('proxy-authorization', true)\n\n    // \"Cookie\" and \"Host\" are forbidden request-headers, which undici doesn't implement.\n    request.headersList.delete('cookie', true)\n    request.headersList.delete('host', true)\n  }\n\n  // 14. If request's body is non-null, then set request's body to the first return\n  // value of safely extracting request's body's source.\n  if (request.body != null) {\n    assert(request.body.source != null)\n    request.body = safelyExtractBody(request.body.source)[0]\n  }\n\n  // 15. Let timingInfo be fetchParams\u2019s timing info.\n  const timingInfo = fetchParams.timingInfo\n\n  // 16. Set timingInfo\u2019s redirect end time and post-redirect start time to the\n  // coarsened shared current time given fetchParams\u2019s cross-origin isolated\n  // capability.\n  timingInfo.redirectEndTime = timingInfo.postRedirectStartTime =\n    coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)\n\n  // 17. If timingInfo\u2019s redirect start time is 0, then set timingInfo\u2019s\n  //  redirect start time to timingInfo\u2019s start time.\n  if (timingInfo.redirectStartTime === 0) {\n    timingInfo.redirectStartTime = timingInfo.startTime\n  }\n\n  // 18. Append locationURL to request\u2019s URL list.\n  request.urlList.push(locationURL)\n\n  // 19. Invoke set request\u2019s referrer policy on redirect on request and\n  // actualResponse.\n  setRequestReferrerPolicyOnRedirect(request, actualResponse)\n\n  // 20. Return the result of running main fetch given fetchParams and true.\n  return mainFetch(fetchParams, true)\n}\n\n// https://fetch.spec.whatwg.org/#http-network-or-cache-fetch\nasync function httpNetworkOrCacheFetch (\n  fetchParams,\n  isAuthenticationFetch = false,\n  isNewConnectionFetch = false\n) {\n  // 1. Let request be fetchParams\u2019s request.\n  const request = fetchParams.request\n\n  // 2. Let httpFetchParams be null.\n  let httpFetchParams = null\n\n  // 3. Let httpRequest be null.\n  let httpRequest = null\n\n  // 4. Let response be null.\n  let response = null\n\n  // 5. Let storedResponse be null.\n  // TODO: cache\n\n  // 6. Let httpCache be null.\n  const httpCache = null\n\n  // 7. Let the revalidatingFlag be unset.\n  const revalidatingFlag = false\n\n  // 8. Run these steps, but abort when the ongoing fetch is terminated:\n\n  //    1. If request\u2019s window is \"no-window\" and request\u2019s redirect mode is\n  //    \"error\", then set httpFetchParams to fetchParams and httpRequest to\n  //    request.\n  if (request.window === 'no-window' && request.redirect === 'error') {\n    httpFetchParams = fetchParams\n    httpRequest = request\n  } else {\n    // Otherwise:\n\n    // 1. Set httpRequest to a clone of request.\n    httpRequest = cloneRequest(request)\n\n    // 2. Set httpFetchParams to a copy of fetchParams.\n    httpFetchParams = { ...fetchParams }\n\n    // 3. Set httpFetchParams\u2019s request to httpRequest.\n    httpFetchParams.request = httpRequest\n  }\n\n  //    3. Let includeCredentials be true if one of\n  const includeCredentials =\n    request.credentials === 'include' ||\n    (request.credentials === 'same-origin' &&\n      request.responseTainting === 'basic')\n\n  //    4. Let contentLength be httpRequest\u2019s body\u2019s length, if httpRequest\u2019s\n  //    body is non-null; otherwise null.\n  const contentLength = httpRequest.body ? httpRequest.body.length : null\n\n  //    5. Let contentLengthHeaderValue be null.\n  let contentLengthHeaderValue = null\n\n  //    6. If httpRequest\u2019s body is null and httpRequest\u2019s method is `POST` or\n  //    `PUT`, then set contentLengthHeaderValue to `0`.\n  if (\n    httpRequest.body == null &&\n    ['POST', 'PUT'].includes(httpRequest.method)\n  ) {\n    contentLengthHeaderValue = '0'\n  }\n\n  //    7. If contentLength is non-null, then set contentLengthHeaderValue to\n  //    contentLength, serialized and isomorphic encoded.\n  if (contentLength != null) {\n    contentLengthHeaderValue = isomorphicEncode(`${contentLength}`)\n  }\n\n  //    8. If contentLengthHeaderValue is non-null, then append\n  //    `Content-Length`/contentLengthHeaderValue to httpRequest\u2019s header\n  //    list.\n  if (\n    contentLengthHeaderValue != null &&\n    !httpRequest.headersList.contains('content-length', true)\n  ) {\n    httpRequest.headersList.append('content-length', contentLengthHeaderValue, true)\n  }\n\n  //    9. If contentLengthHeaderValue is non-null, then append (`Content-Length`,\n  //    contentLengthHeaderValue) to httpRequest\u2019s header list.\n\n  //    10. If contentLength is non-null and httpRequest\u2019s keepalive is true,\n  //    then:\n  if (contentLength != null && httpRequest.keepalive) {\n    // NOTE: keepalive is a noop outside of browser context.\n  }\n\n  //    11. If httpRequest\u2019s referrer is a URL, then append\n  //    `Referer`/httpRequest\u2019s referrer, serialized and isomorphic encoded,\n  //     to httpRequest\u2019s header list.\n  if (webidl.is.URL(httpRequest.referrer)) {\n    httpRequest.headersList.append('referer', isomorphicEncode(httpRequest.referrer.href), true)\n  }\n\n  //    12. Append a request `Origin` header for httpRequest.\n  appendRequestOriginHeader(httpRequest)\n\n  //    13. Append the Fetch metadata headers for httpRequest. [FETCH-METADATA]\n  appendFetchMetadata(httpRequest)\n\n  //    14. If httpRequest\u2019s header list does not contain `User-Agent`, then\n  //    user agents should append `User-Agent`/default `User-Agent` value to\n  //    httpRequest\u2019s header list.\n  if (!httpRequest.headersList.contains('user-agent', true)) {\n    httpRequest.headersList.append('user-agent', defaultUserAgent, true)\n  }\n\n  //    15. If httpRequest\u2019s cache mode is \"default\" and httpRequest\u2019s header\n  //    list contains `If-Modified-Since`, `If-None-Match`,\n  //    `If-Unmodified-Since`, `If-Match`, or `If-Range`, then set\n  //    httpRequest\u2019s cache mode to \"no-store\".\n  if (\n    httpRequest.cache === 'default' &&\n    (httpRequest.headersList.contains('if-modified-since', true) ||\n      httpRequest.headersList.contains('if-none-match', true) ||\n      httpRequest.headersList.contains('if-unmodified-since', true) ||\n      httpRequest.headersList.contains('if-match', true) ||\n      httpRequest.headersList.contains('if-range', true))\n  ) {\n    httpRequest.cache = 'no-store'\n  }\n\n  //    16. If httpRequest\u2019s cache mode is \"no-cache\", httpRequest\u2019s prevent\n  //    no-cache cache-control header modification flag is unset, and\n  //    httpRequest\u2019s header list does not contain `Cache-Control`, then append\n  //    `Cache-Control`/`max-age=0` to httpRequest\u2019s header list.\n  if (\n    httpRequest.cache === 'no-cache' &&\n    !httpRequest.preventNoCacheCacheControlHeaderModification &&\n    !httpRequest.headersList.contains('cache-control', true)\n  ) {\n    httpRequest.headersList.append('cache-control', 'max-age=0', true)\n  }\n\n  //    17. If httpRequest\u2019s cache mode is \"no-store\" or \"reload\", then:\n  if (httpRequest.cache === 'no-store' || httpRequest.cache === 'reload') {\n    // 1. If httpRequest\u2019s header list does not contain `Pragma`, then append\n    // `Pragma`/`no-cache` to httpRequest\u2019s header list.\n    if (!httpRequest.headersList.contains('pragma', true)) {\n      httpRequest.headersList.append('pragma', 'no-cache', true)\n    }\n\n    // 2. If httpRequest\u2019s header list does not contain `Cache-Control`,\n    // then append `Cache-Control`/`no-cache` to httpRequest\u2019s header list.\n    if (!httpRequest.headersList.contains('cache-control', true)) {\n      httpRequest.headersList.append('cache-control', 'no-cache', true)\n    }\n  }\n\n  //    18. If httpRequest\u2019s header list contains `Range`, then append\n  //    `Accept-Encoding`/`identity` to httpRequest\u2019s header list.\n  if (httpRequest.headersList.contains('range', true)) {\n    httpRequest.headersList.append('accept-encoding', 'identity', true)\n  }\n\n  //    19. Modify httpRequest\u2019s header list per HTTP. Do not append a given\n  //    header if httpRequest\u2019s header list contains that header\u2019s name.\n  //    TODO: https://github.com/whatwg/fetch/issues/1285#issuecomment-896560129\n  if (!httpRequest.headersList.contains('accept-encoding', true)) {\n    if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) {\n      httpRequest.headersList.append('accept-encoding', 'br, gzip, deflate', true)\n    } else {\n      httpRequest.headersList.append('accept-encoding', 'gzip, deflate', true)\n    }\n  }\n\n  httpRequest.headersList.delete('host', true)\n\n  //    21. If includeCredentials is true, then:\n  if (includeCredentials) {\n    // 1. If the user agent is not configured to block cookies for httpRequest\n    // (see section 7 of [COOKIES]), then:\n    // TODO: credentials\n\n    // 2. If httpRequest\u2019s header list does not contain `Authorization`, then:\n    if (!httpRequest.headersList.contains('authorization', true)) {\n      // 1. Let authorizationValue be null.\n      let authorizationValue = null\n\n      // 2. If there\u2019s an authentication entry for httpRequest and either\n      //    httpRequest\u2019s use-URL-credentials flag is unset or httpRequest\u2019s\n      //    current URL does not include credentials, then set\n      //    authorizationValue to authentication entry.\n      if (hasAuthenticationEntry(httpRequest) && (\n        httpRequest.useURLCredentials === undefined || !includesCredentials(requestCurrentURL(httpRequest))\n      )) {\n        // TODO\n      } else if (includesCredentials(requestCurrentURL(httpRequest)) && isAuthenticationFetch) {\n        // 3. Otherwise, if httpRequest\u2019s current URL does include credentials\n        //    and isAuthenticationFetch is true, set authorizationValue to\n        //    httpRequest\u2019s current URL, converted to an `Authorization` value\n        const { username, password } = requestCurrentURL(httpRequest)\n        authorizationValue = `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}`\n      }\n\n      // 4. If authorizationValue is non-null, then append (`Authorization`,\n      //    authorizationValue) to httpRequest\u2019s header list.\n      if (authorizationValue !== null) {\n        httpRequest.headersList.append('Authorization', authorizationValue, false)\n      }\n    }\n  }\n\n  //    21. If there\u2019s a proxy-authentication entry, use it as appropriate.\n  //    TODO: proxy-authentication\n\n  //    22. Set httpCache to the result of determining the HTTP cache\n  //    partition, given httpRequest.\n  //    TODO: cache\n\n  //    23. If httpCache is null, then set httpRequest\u2019s cache mode to\n  //    \"no-store\".\n  if (httpCache == null) {\n    httpRequest.cache = 'no-store'\n  }\n\n  //    24. If httpRequest\u2019s cache mode is neither \"no-store\" nor \"reload\",\n  //    then:\n  if (httpRequest.cache !== 'no-store' && httpRequest.cache !== 'reload') {\n    // TODO: cache\n  }\n\n  // 9. If aborted, then return the appropriate network error for fetchParams.\n  // TODO\n\n  // 10. If response is null, then:\n  if (response == null) {\n    // 1. If httpRequest\u2019s cache mode is \"only-if-cached\", then return a\n    // network error.\n    if (httpRequest.cache === 'only-if-cached') {\n      return makeNetworkError('only if cached')\n    }\n\n    // 2. Let forwardResponse be the result of running HTTP-network fetch\n    // given httpFetchParams, includeCredentials, and isNewConnectionFetch.\n    const forwardResponse = await httpNetworkFetch(\n      httpFetchParams,\n      includeCredentials,\n      isNewConnectionFetch\n    )\n\n    // 3. If httpRequest\u2019s method is unsafe and forwardResponse\u2019s status is\n    // in the range 200 to 399, inclusive, invalidate appropriate stored\n    // responses in httpCache, as per the \"Invalidation\" chapter of HTTP\n    // Caching, and set storedResponse to null. [HTTP-CACHING]\n    if (\n      !safeMethodsSet.has(httpRequest.method) &&\n      forwardResponse.status >= 200 &&\n      forwardResponse.status <= 399\n    ) {\n      // TODO: cache\n    }\n\n    // 4. If the revalidatingFlag is set and forwardResponse\u2019s status is 304,\n    // then:\n    if (revalidatingFlag && forwardResponse.status === 304) {\n      // TODO: cache\n    }\n\n    // 5. If response is null, then:\n    if (response == null) {\n      // 1. Set response to forwardResponse.\n      response = forwardResponse\n\n      // 2. Store httpRequest and forwardResponse in httpCache, as per the\n      // \"Storing Responses in Caches\" chapter of HTTP Caching. [HTTP-CACHING]\n      // TODO: cache\n    }\n  }\n\n  // 11. Set response\u2019s URL list to a clone of httpRequest\u2019s URL list.\n  response.urlList = [...httpRequest.urlList]\n\n  // 12. If httpRequest\u2019s header list contains `Range`, then set response\u2019s\n  // range-requested flag.\n  if (httpRequest.headersList.contains('range', true)) {\n    response.rangeRequested = true\n  }\n\n  // 13. Set response\u2019s request-includes-credentials to includeCredentials.\n  response.requestIncludesCredentials = includeCredentials\n\n  // 14. If response\u2019s status is 401, httpRequest\u2019s response tainting is not \"cors\",\n  //     includeCredentials is true, and request\u2019s traversable for user prompts is\n  //     a traversable navigable:\n  //\n  //     In Node.js there is no traversable navigable to prompt the user, but we\n  //     still need to handle URL-embedded credentials so authentication retries\n  //     for WebSocket handshakes continue to work.\n  if (response.status === 401 && httpRequest.responseTainting !== 'cors' && includeCredentials && (\n    request.useURLCredentials !== undefined ||\n    isTraversableNavigable(request.traversableForUserPrompts)\n  )) {\n    // 2. If request\u2019s body is non-null, then:\n    if (request.body != null) {\n      // 1. If request\u2019s body\u2019s source is null, then return a network error.\n      if (request.body.source == null) {\n        // Note: In Node.js, this code path should not be reached because\n        // isTraversableNavigable() returns false for non-navigable contexts.\n        // However, we handle it gracefully by returning the response instead of\n        // a network error, as we won't actually retry the request.\n        // This aligns with the Fetch spec discussion in whatwg/fetch#1132,\n        // which allows implementations flexibility when credentials can't be obtained.\n        return response\n      }\n\n      // 2. Set request\u2019s body to the body of the result of safely extracting\n      //    request\u2019s body\u2019s source.\n      request.body = safelyExtractBody(request.body.source)[0]\n    }\n\n    // 3. If request\u2019s use-URL-credentials flag is unset or isAuthenticationFetch is\n    //    true, then:\n    if (request.useURLCredentials === undefined || isAuthenticationFetch) {\n      // 1. If fetchParams is canceled, then return the appropriate network error\n      //    for fetchParams.\n      if (isCancelled(fetchParams)) {\n        return makeAppropriateNetworkError(fetchParams)\n      }\n\n      // 2. Let username and password be the result of prompting the end user for a\n      //    username and password, respectively, in request\u2019s traversable for user prompts.\n      // TODO\n\n      // 3. Set the username given request\u2019s current URL and username.\n      // requestCurrentURL(request).username = TODO\n\n      // 4. Set the password given request\u2019s current URL and password.\n      // requestCurrentURL(request).password = TODO\n\n      // In browsers, the user will be prompted to enter a username/password before the request\n      // is re-sent. To prevent an infinite 401 loop, return the response for now.\n      // https://github.com/nodejs/undici/pull/4756\n      return response\n    }\n\n    // 4. Set response to the result of running HTTP-network-or-cache fetch given\n    //    fetchParams and true.\n    fetchParams.controller.connection.destroy()\n\n    response = await httpNetworkOrCacheFetch(fetchParams, true)\n  }\n\n  // 15. If response\u2019s status is 407, then:\n  if (response.status === 407) {\n    // 1. If request\u2019s window is \"no-window\", then return a network error.\n    if (request.window === 'no-window') {\n      return makeNetworkError()\n    }\n\n    // 2. ???\n\n    // 3. If fetchParams is canceled, then return the appropriate network error for fetchParams.\n    if (isCancelled(fetchParams)) {\n      return makeAppropriateNetworkError(fetchParams)\n    }\n\n    // 4. Prompt the end user as appropriate in request\u2019s window and store\n    // the result as a proxy-authentication entry. [HTTP-AUTH]\n    // TODO: Invoke some kind of callback?\n\n    // 5. Set response to the result of running HTTP-network-or-cache fetch given\n    // fetchParams.\n    // TODO\n    return makeNetworkError('proxy authentication required')\n  }\n\n  // 16. If all of the following are true\n  if (\n    // response\u2019s status is 421\n    response.status === 421 &&\n    // isNewConnectionFetch is false\n    !isNewConnectionFetch &&\n    // request\u2019s body is null, or request\u2019s body is non-null and request\u2019s body\u2019s source is non-null\n    (request.body == null || request.body.source != null)\n  ) {\n    // then:\n\n    // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams.\n    if (isCancelled(fetchParams)) {\n      return makeAppropriateNetworkError(fetchParams)\n    }\n\n    // 2. Set response to the result of running HTTP-network-or-cache\n    // fetch given fetchParams, isAuthenticationFetch, and true.\n\n    // TODO (spec): The spec doesn't specify this but we need to cancel\n    // the active response before we can start a new one.\n    // https://github.com/whatwg/fetch/issues/1293\n    fetchParams.controller.connection.destroy()\n\n    response = await httpNetworkOrCacheFetch(\n      fetchParams,\n      isAuthenticationFetch,\n      true\n    )\n  }\n\n  // 17. If isAuthenticationFetch is true, then create an authentication entry\n  if (isAuthenticationFetch) {\n    // TODO\n  }\n\n  // 18. Return response.\n  return response\n}\n\n// https://fetch.spec.whatwg.org/#http-network-fetch\nasync function httpNetworkFetch (\n  fetchParams,\n  includeCredentials = false,\n  forceNewConnection = false\n) {\n  assert(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed)\n\n  fetchParams.controller.connection = {\n    abort: null,\n    destroyed: false,\n    destroy (err, abort = true) {\n      if (!this.destroyed) {\n        this.destroyed = true\n        if (abort) {\n          this.abort?.(err ?? new DOMException('The operation was aborted.', 'AbortError'))\n        }\n      }\n    }\n  }\n\n  // 1. Let request be fetchParams\u2019s request.\n  const request = fetchParams.request\n\n  // 2. Let response be null.\n  let response = null\n\n  // 3. Let timingInfo be fetchParams\u2019s timing info.\n  const timingInfo = fetchParams.timingInfo\n\n  // 4. Let httpCache be the result of determining the HTTP cache partition,\n  // given request.\n  // TODO: cache\n  const httpCache = null\n\n  // 5. If httpCache is null, then set request\u2019s cache mode to \"no-store\".\n  if (httpCache == null) {\n    request.cache = 'no-store'\n  }\n\n  // 6. Let networkPartitionKey be the result of determining the network\n  // partition key given request.\n  // TODO\n\n  // 7. Let newConnection be \"yes\" if forceNewConnection is true; otherwise\n  // \"no\".\n  const newConnection = forceNewConnection ? 'yes' : 'no' // eslint-disable-line no-unused-vars\n\n  // 8. Switch on request\u2019s mode:\n  if (request.mode === 'websocket') {\n    // Let connection be the result of obtaining a WebSocket connection,\n    // given request\u2019s current URL.\n    // TODO\n  } else {\n    // Let connection be the result of obtaining a connection, given\n    // networkPartitionKey, request\u2019s current URL\u2019s origin,\n    // includeCredentials, and forceNewConnection.\n    // TODO\n  }\n\n  // 9. Run these steps, but abort when the ongoing fetch is terminated:\n\n  //    1. If connection is failure, then return a network error.\n\n  //    2. Set timingInfo\u2019s final connection timing info to the result of\n  //    calling clamp and coarsen connection timing info with connection\u2019s\n  //    timing info, timingInfo\u2019s post-redirect start time, and fetchParams\u2019s\n  //    cross-origin isolated capability.\n\n  //    3. If connection is not an HTTP/2 connection, request\u2019s body is non-null,\n  //    and request\u2019s body\u2019s source is null, then append (`Transfer-Encoding`,\n  //    `chunked`) to request\u2019s header list.\n\n  //    4. Set timingInfo\u2019s final network-request start time to the coarsened\n  //    shared current time given fetchParams\u2019s cross-origin isolated\n  //    capability.\n\n  //    5. Set response to the result of making an HTTP request over connection\n  //    using request with the following caveats:\n\n  //        - Follow the relevant requirements from HTTP. [HTTP] [HTTP-SEMANTICS]\n  //        [HTTP-COND] [HTTP-CACHING] [HTTP-AUTH]\n\n  //        - If request\u2019s body is non-null, and request\u2019s body\u2019s source is null,\n  //        then the user agent may have a buffer of up to 64 kibibytes and store\n  //        a part of request\u2019s body in that buffer. If the user agent reads from\n  //        request\u2019s body beyond that buffer\u2019s size and the user agent needs to\n  //        resend request, then instead return a network error.\n\n  //        - Set timingInfo\u2019s final network-response start time to the coarsened\n  //        shared current time given fetchParams\u2019s cross-origin isolated capability,\n  //        immediately after the user agent\u2019s HTTP parser receives the first byte\n  //        of the response (e.g., frame header bytes for HTTP/2 or response status\n  //        line for HTTP/1.x).\n\n  //        - Wait until all the headers are transmitted.\n\n  //        - Any responses whose status is in the range 100 to 199, inclusive,\n  //        and is not 101, are to be ignored, except for the purposes of setting\n  //        timingInfo\u2019s final network-response start time above.\n\n  //    - If request\u2019s header list contains `Transfer-Encoding`/`chunked` and\n  //    response is transferred via HTTP/1.0 or older, then return a network\n  //    error.\n\n  //    - If the HTTP request results in a TLS client certificate dialog, then:\n\n  //        1. If request\u2019s window is an environment settings object, make the\n  //        dialog available in request\u2019s window.\n\n  //        2. Otherwise, return a network error.\n\n  // To transmit request\u2019s body body, run these steps:\n  let requestBody = null\n  // 1. If body is null and fetchParams\u2019s process request end-of-body is\n  // non-null, then queue a fetch task given fetchParams\u2019s process request\n  // end-of-body and fetchParams\u2019s task destination.\n  if (request.body == null && fetchParams.processRequestEndOfBody) {\n    queueMicrotask(() => fetchParams.processRequestEndOfBody())\n  } else if (request.body != null) {\n    // 2. Otherwise, if body is non-null:\n\n    //    1. Let processBodyChunk given bytes be these steps:\n    const processBodyChunk = async function * (bytes) {\n      // 1. If the ongoing fetch is terminated, then abort these steps.\n      if (isCancelled(fetchParams)) {\n        return\n      }\n\n      // 2. Run this step in parallel: transmit bytes.\n      yield bytes\n\n      // 3. If fetchParams\u2019s process request body is non-null, then run\n      // fetchParams\u2019s process request body given bytes\u2019s length.\n      fetchParams.processRequestBodyChunkLength?.(bytes.byteLength)\n    }\n\n    // 2. Let processEndOfBody be these steps:\n    const processEndOfBody = () => {\n      // 1. If fetchParams is canceled, then abort these steps.\n      if (isCancelled(fetchParams)) {\n        return\n      }\n\n      // 2. If fetchParams\u2019s process request end-of-body is non-null,\n      // then run fetchParams\u2019s process request end-of-body.\n      if (fetchParams.processRequestEndOfBody) {\n        fetchParams.processRequestEndOfBody()\n      }\n    }\n\n    // 3. Let processBodyError given e be these steps:\n    const processBodyError = (e) => {\n      // 1. If fetchParams is canceled, then abort these steps.\n      if (isCancelled(fetchParams)) {\n        return\n      }\n\n      // 2. If e is an \"AbortError\" DOMException, then abort fetchParams\u2019s controller.\n      if (e.name === 'AbortError') {\n        fetchParams.controller.abort()\n      } else {\n        fetchParams.controller.terminate(e)\n      }\n    }\n\n    // 4. Incrementally read request\u2019s body given processBodyChunk, processEndOfBody,\n    // processBodyError, and fetchParams\u2019s task destination.\n    requestBody = (async function * () {\n      try {\n        for await (const bytes of request.body.stream) {\n          yield * processBodyChunk(bytes)\n        }\n        processEndOfBody()\n      } catch (err) {\n        processBodyError(err)\n      }\n    })()\n  }\n\n  try {\n    // socket is only provided for websockets\n    const { body, status, statusText, headersList, socket } = await dispatch({ body: requestBody })\n\n    if (socket) {\n      response = makeResponse({ status, statusText, headersList, socket })\n    } else {\n      const iterator = body[Symbol.asyncIterator]()\n      fetchParams.controller.next = () => iterator.next()\n\n      response = makeResponse({ status, statusText, headersList })\n    }\n  } catch (err) {\n    // 10. If aborted, then:\n    if (err.name === 'AbortError') {\n      // 1. If connection uses HTTP/2, then transmit an RST_STREAM frame.\n      fetchParams.controller.connection.destroy()\n\n      // 2. Return the appropriate network error for fetchParams.\n      return makeAppropriateNetworkError(fetchParams, err)\n    }\n\n    return makeNetworkError(err)\n  }\n\n  // 11. Let pullAlgorithm be an action that resumes the ongoing fetch\n  // if it is suspended.\n  const pullAlgorithm = () => {\n    return fetchParams.controller.resume()\n  }\n\n  // 12. Let cancelAlgorithm be an algorithm that aborts fetchParams\u2019s\n  // controller with reason, given reason.\n  const cancelAlgorithm = (reason) => {\n    // If the aborted fetch was already terminated, then we do not\n    // need to do anything.\n    if (!isCancelled(fetchParams)) {\n      fetchParams.controller.abort(reason)\n    }\n  }\n\n  // 13. Let highWaterMark be a non-negative, non-NaN number, chosen by\n  // the user agent.\n  // TODO\n\n  // 14. Let sizeAlgorithm be an algorithm that accepts a chunk object\n  // and returns a non-negative, non-NaN, non-infinite number, chosen by the user agent.\n  // TODO\n\n  // 15. Let stream be a new ReadableStream.\n  // 16. Set up stream with byte reading support with pullAlgorithm set to pullAlgorithm,\n  //     cancelAlgorithm set to cancelAlgorithm.\n  const stream = new ReadableStream(\n    {\n      start (controller) {\n        fetchParams.controller.controller = controller\n      },\n      pull: pullAlgorithm,\n      cancel: cancelAlgorithm,\n      type: 'bytes'\n    }\n  )\n\n  // 17. Run these steps, but abort when the ongoing fetch is terminated:\n\n  //    1. Set response\u2019s body to a new body whose stream is stream.\n  response.body = { stream, source: null, length: null }\n\n  //    2. If response is not a network error and request\u2019s cache mode is\n  //    not \"no-store\", then update response in httpCache for request.\n  //    TODO\n\n  //    3. If includeCredentials is true and the user agent is not configured\n  //    to block cookies for request (see section 7 of [COOKIES]), then run the\n  //    \"set-cookie-string\" parsing algorithm (see section 5.2 of [COOKIES]) on\n  //    the value of each header whose name is a byte-case-insensitive match for\n  //    `Set-Cookie` in response\u2019s header list, if any, and request\u2019s current URL.\n  //    TODO\n\n  // 18. If aborted, then:\n  // TODO\n\n  // 19. Run these steps in parallel:\n\n  //    1. Run these steps, but abort when fetchParams is canceled:\n  if (!fetchParams.controller.resume) {\n    fetchParams.controller.on('terminated', onAborted)\n  }\n\n  fetchParams.controller.resume = async () => {\n    // 1. While true\n    while (true) {\n      // 1-3. See onData...\n\n      // 4. Set bytes to the result of handling content codings given\n      // codings and bytes.\n      let bytes\n      let isFailure\n      try {\n        const { done, value } = await fetchParams.controller.next()\n\n        if (isAborted(fetchParams)) {\n          break\n        }\n\n        bytes = done ? undefined : value\n      } catch (err) {\n        if (fetchParams.controller.ended && !timingInfo.encodedBodySize) {\n          // zlib doesn't like empty streams.\n          bytes = undefined\n        } else {\n          bytes = err\n\n          // err may be propagated from the result of calling readablestream.cancel,\n          // which might not be an error. https://github.com/nodejs/undici/issues/2009\n          isFailure = true\n        }\n      }\n\n      if (bytes === undefined) {\n        // 2. Otherwise, if the bytes transmission for response\u2019s message\n        // body is done normally and stream is readable, then close\n        // stream, finalize response for fetchParams and response, and\n        // abort these in-parallel steps.\n        readableStreamClose(fetchParams.controller.controller)\n\n        finalizeResponse(fetchParams, response)\n\n        return\n      }\n\n      // 5. Increase timingInfo\u2019s decoded body size by bytes\u2019s length.\n      timingInfo.decodedBodySize += bytes?.byteLength ?? 0\n\n      // 6. If bytes is failure, then terminate fetchParams\u2019s controller.\n      if (isFailure) {\n        fetchParams.controller.terminate(bytes)\n        return\n      }\n\n      // 7. Enqueue a Uint8Array wrapping an ArrayBuffer containing bytes\n      // into stream.\n      const buffer = new Uint8Array(bytes)\n      if (buffer.byteLength) {\n        fetchParams.controller.controller.enqueue(buffer)\n      }\n\n      // 8. If stream is errored, then terminate the ongoing fetch.\n      if (isErrored(stream)) {\n        fetchParams.controller.terminate()\n        return\n      }\n\n      // 9. If stream doesn\u2019t need more data ask the user agent to suspend\n      // the ongoing fetch.\n      if (fetchParams.controller.controller.desiredSize <= 0) {\n        return\n      }\n    }\n  }\n\n  //    2. If aborted, then:\n  function onAborted (reason) {\n    // 2. If fetchParams is aborted, then:\n    if (isAborted(fetchParams)) {\n      // 1. Set response\u2019s aborted flag.\n      response.aborted = true\n\n      // 2. If stream is readable, then error stream with the result of\n      //    deserialize a serialized abort reason given fetchParams\u2019s\n      //    controller\u2019s serialized abort reason and an\n      //    implementation-defined realm.\n      if (isReadable(stream)) {\n        fetchParams.controller.controller.error(\n          fetchParams.controller.serializedAbortReason\n        )\n      }\n    } else {\n      // 3. Otherwise, if stream is readable, error stream with a TypeError.\n      if (isReadable(stream)) {\n        fetchParams.controller.controller.error(new TypeError('terminated', {\n          cause: isErrorLike(reason) ? reason : undefined\n        }))\n      }\n    }\n\n    // 4. If connection uses HTTP/2, then transmit an RST_STREAM frame.\n    // 5. Otherwise, the user agent should close connection unless it would be bad for performance to do so.\n    fetchParams.controller.connection.destroy()\n  }\n\n  // 20. Return response.\n  return response\n\n  function dispatch ({ body }) {\n    const url = requestCurrentURL(request)\n    /** @type {import('../../..').Agent} */\n    const agent = fetchParams.controller.dispatcher\n\n    const path = url.pathname + url.search\n    const hasTrailingQuestionMark = url.search.length === 0 && url.href[url.href.length - url.hash.length - 1] === '?'\n\n    return new Promise((resolve, reject) => agent.dispatch(\n      {\n        path: hasTrailingQuestionMark ? `${path}?` : path,\n        origin: url.origin,\n        method: request.method,\n        body: agent.isMockActive ? request.body && (request.body.source || request.body.stream) : body,\n        headers: request.headersList.entries,\n        maxRedirections: 0,\n        upgrade: request.mode === 'websocket' ? 'websocket' : undefined\n      },\n      {\n        body: null,\n        abort: null,\n\n        onConnect (abort) {\n          // TODO (fix): Do we need connection here?\n          const { connection } = fetchParams.controller\n\n          // Set timingInfo\u2019s final connection timing info to the result of calling clamp and coarsen\n          // connection timing info with connection\u2019s timing info, timingInfo\u2019s post-redirect start\n          // time, and fetchParams\u2019s cross-origin isolated capability.\n          // TODO: implement connection timing\n          timingInfo.finalConnectionTimingInfo = clampAndCoarsenConnectionTimingInfo(undefined, timingInfo.postRedirectStartTime, fetchParams.crossOriginIsolatedCapability)\n\n          if (connection.destroyed) {\n            abort(new DOMException('The operation was aborted.', 'AbortError'))\n          } else {\n            fetchParams.controller.on('terminated', abort)\n            this.abort = connection.abort = abort\n          }\n\n          // Set timingInfo\u2019s final network-request start time to the coarsened shared current time given\n          // fetchParams\u2019s cross-origin isolated capability.\n          timingInfo.finalNetworkRequestStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)\n        },\n\n        onResponseStarted () {\n          // Set timingInfo\u2019s final network-response start time to the coarsened shared current\n          // time given fetchParams\u2019s cross-origin isolated capability, immediately after the\n          // user agent\u2019s HTTP parser receives the first byte of the response (e.g., frame header\n          // bytes for HTTP/2 or response status line for HTTP/1.x).\n          timingInfo.finalNetworkResponseStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)\n        },\n\n        onHeaders (status, rawHeaders, resume, statusText) {\n          if (status < 200) {\n            return false\n          }\n\n          const headersList = new HeadersList()\n\n          for (let i = 0; i < rawHeaders.length; i += 2) {\n            const nameStr = bufferToLowerCasedHeaderName(rawHeaders[i])\n            const value = rawHeaders[i + 1]\n            if (Array.isArray(value) && !Buffer.isBuffer(rawHeaders[i + 1])) {\n              for (const val of value) {\n                headersList.append(nameStr, val.toString('latin1'), true)\n              }\n            } else {\n              headersList.append(nameStr, value.toString('latin1'), true)\n            }\n          }\n          const location = headersList.get('location', true)\n\n          this.body = new Readable({ read: resume })\n\n          const willFollow = location && request.redirect === 'follow' &&\n            redirectStatusSet.has(status)\n\n          const decoders = []\n\n          // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding\n          if (request.method !== 'HEAD' && request.method !== 'CONNECT' && !nullBodyStatus.includes(status) && !willFollow) {\n            // https://www.rfc-editor.org/rfc/rfc7231#section-3.1.2.1\n            const contentEncoding = headersList.get('content-encoding', true)\n            // \"All content-coding values are case-insensitive...\"\n            /** @type {string[]} */\n            const codings = contentEncoding ? contentEncoding.toLowerCase().split(',') : []\n\n            // Limit the number of content-encodings to prevent resource exhaustion.\n            // CVE fix similar to urllib3 (GHSA-gm62-xv2j-4w53) and curl (CVE-2022-32206).\n            const maxContentEncodings = 5\n            if (codings.length > maxContentEncodings) {\n              reject(new Error(`too many content-encodings in response: ${codings.length}, maximum allowed is ${maxContentEncodings}`))\n              return true\n            }\n\n            for (let i = codings.length - 1; i >= 0; --i) {\n              const coding = codings[i].trim()\n              // https://www.rfc-editor.org/rfc/rfc9112.html#section-7.2\n              if (coding === 'x-gzip' || coding === 'gzip') {\n                decoders.push(zlib.createGunzip({\n                  // Be less strict when decoding compressed responses, since sometimes\n                  // servers send slightly invalid responses that are still accepted\n                  // by common browsers.\n                  // Always using Z_SYNC_FLUSH is what cURL does.\n                  flush: zlib.constants.Z_SYNC_FLUSH,\n                  finishFlush: zlib.constants.Z_SYNC_FLUSH\n                }))\n              } else if (coding === 'deflate') {\n                decoders.push(createInflate({\n                  flush: zlib.constants.Z_SYNC_FLUSH,\n                  finishFlush: zlib.constants.Z_SYNC_FLUSH\n                }))\n              } else if (coding === 'br') {\n                decoders.push(zlib.createBrotliDecompress({\n                  flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n                  finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH\n                }))\n              } else if (coding === 'zstd' && hasZstd) {\n                decoders.push(zlib.createZstdDecompress({\n                  flush: zlib.constants.ZSTD_e_continue,\n                  finishFlush: zlib.constants.ZSTD_e_end\n                }))\n              } else {\n                decoders.length = 0\n                break\n              }\n            }\n          }\n\n          const onError = this.onError.bind(this)\n\n          resolve({\n            status,\n            statusText,\n            headersList,\n            body: decoders.length\n              ? pipeline(this.body, ...decoders, (err) => {\n                if (err) {\n                  this.onError(err)\n                }\n              }).on('error', onError)\n              : this.body.on('error', onError)\n          })\n\n          return true\n        },\n\n        onData (chunk) {\n          if (fetchParams.controller.dump) {\n            return\n          }\n\n          // 1. If one or more bytes have been transmitted from response\u2019s\n          // message body, then:\n\n          //  1. Let bytes be the transmitted bytes.\n          const bytes = chunk\n\n          //  2. Let codings be the result of extracting header list values\n          //  given `Content-Encoding` and response\u2019s header list.\n          //  See pullAlgorithm.\n\n          //  3. Increase timingInfo\u2019s encoded body size by bytes\u2019s length.\n          timingInfo.encodedBodySize += bytes.byteLength\n\n          //  4. See pullAlgorithm...\n\n          return this.body.push(bytes)\n        },\n\n        onComplete () {\n          if (this.abort) {\n            fetchParams.controller.off('terminated', this.abort)\n          }\n\n          fetchParams.controller.ended = true\n\n          this.body.push(null)\n        },\n\n        onError (error) {\n          if (this.abort) {\n            fetchParams.controller.off('terminated', this.abort)\n          }\n\n          this.body?.destroy(error)\n\n          fetchParams.controller.terminate(error)\n\n          reject(error)\n        },\n\n        onRequestUpgrade (_controller, status, headers, socket) {\n          // We need to support 200 for websocket over h2 as per RFC-8441\n          // Absence of session means H1\n          if ((socket.session != null && status !== 200) || (socket.session == null && status !== 101)) {\n            return false\n          }\n\n          const headersList = new HeadersList()\n\n          for (const [name, value] of Object.entries(headers)) {\n            if (value == null) {\n              continue\n            }\n\n            const headerName = name.toLowerCase()\n\n            if (Array.isArray(value)) {\n              for (const entry of value) {\n                headersList.append(headerName, String(entry), true)\n              }\n            } else {\n              headersList.append(headerName, String(value), true)\n            }\n          }\n\n          resolve({\n            status,\n            statusText: STATUS_CODES[status],\n            headersList,\n            socket\n          })\n\n          return true\n        },\n\n        onUpgrade (status, rawHeaders, socket) {\n          // We need to support 200 for websocket over h2 as per RFC-8441\n          // Absence of session means H1\n          if ((socket.session != null && status !== 200) || (socket.session == null && status !== 101)) {\n            return false\n          }\n\n          const headersList = new HeadersList()\n\n          for (let i = 0; i < rawHeaders.length; i += 2) {\n            const nameStr = bufferToLowerCasedHeaderName(rawHeaders[i])\n            const value = rawHeaders[i + 1]\n            if (Array.isArray(value) && !Buffer.isBuffer(rawHeaders[i + 1])) {\n              for (const val of value) {\n                headersList.append(nameStr, val.toString('latin1'), true)\n              }\n            } else {\n              headersList.append(nameStr, value.toString('latin1'), true)\n            }\n          }\n\n          resolve({\n            status,\n            statusText: STATUS_CODES[status],\n            headersList,\n            socket\n          })\n\n          return true\n        }\n      }\n    ))\n  }\n}\n\nmodule.exports = {\n  fetch,\n  Fetch,\n  fetching,\n  finalizeAndReportTiming\n}\n", "'use strict'\n\nconst assert = require('node:assert')\nconst { URLSerializer } = require('../fetch/data-url')\nconst { isValidHeaderName } = require('../fetch/util')\n\n/**\n * @see https://url.spec.whatwg.org/#concept-url-equals\n * @param {URL} A\n * @param {URL} B\n * @param {boolean | undefined} excludeFragment\n * @returns {boolean}\n */\nfunction urlEquals (A, B, excludeFragment = false) {\n  const serializedA = URLSerializer(A, excludeFragment)\n\n  const serializedB = URLSerializer(B, excludeFragment)\n\n  return serializedA === serializedB\n}\n\n/**\n * @see https://github.com/chromium/chromium/blob/694d20d134cb553d8d89e5500b9148012b1ba299/content/browser/cache_storage/cache_storage_cache.cc#L260-L262\n * @param {string} header\n */\nfunction getFieldValues (header) {\n  assert(header !== null)\n\n  const values = []\n\n  for (let value of header.split(',')) {\n    value = value.trim()\n\n    if (isValidHeaderName(value)) {\n      values.push(value)\n    }\n  }\n\n  return values\n}\n\nmodule.exports = {\n  urlEquals,\n  getFieldValues\n}\n", "'use strict'\n\nconst assert = require('node:assert')\n\nconst { kConstruct } = require('../../core/symbols')\nconst { urlEquals, getFieldValues } = require('./util')\nconst { kEnumerableProperty, isDisturbed } = require('../../core/util')\nconst { webidl } = require('../webidl')\nconst { cloneResponse, fromInnerResponse, getResponseState } = require('../fetch/response')\nconst { Request, fromInnerRequest, getRequestState } = require('../fetch/request')\nconst { fetching } = require('../fetch/index')\nconst { urlIsHttpHttpsScheme, readAllBytes } = require('../fetch/util')\nconst { createDeferredPromise } = require('../../util/promise')\n\n/**\n * @see https://w3c.github.io/ServiceWorker/#dfn-cache-batch-operation\n * @typedef {Object} CacheBatchOperation\n * @property {'delete' | 'put'} type\n * @property {any} request\n * @property {any} response\n * @property {import('../../../types/cache').CacheQueryOptions} options\n */\n\n/**\n * @see https://w3c.github.io/ServiceWorker/#dfn-request-response-list\n * @typedef {[any, any][]} requestResponseList\n */\n\nclass Cache {\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-request-response-list\n   * @type {requestResponseList}\n   */\n  #relevantRequestResponseList\n\n  constructor () {\n    if (arguments[0] !== kConstruct) {\n      webidl.illegalConstructor()\n    }\n\n    webidl.util.markAsUncloneable(this)\n    this.#relevantRequestResponseList = arguments[1]\n  }\n\n  async match (request, options = {}) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.match'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n    const p = this.#internalMatchAll(request, options, 1)\n\n    if (p.length === 0) {\n      return\n    }\n\n    return p[0]\n  }\n\n  async matchAll (request = undefined, options = {}) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.matchAll'\n    if (request !== undefined) request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n    return this.#internalMatchAll(request, options)\n  }\n\n  async add (request) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.add'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    request = webidl.converters.RequestInfo(request)\n\n    // 1.\n    const requests = [request]\n\n    // 2.\n    const responseArrayPromise = this.addAll(requests)\n\n    // 3.\n    return await responseArrayPromise\n  }\n\n  async addAll (requests) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.addAll'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    // 1.\n    const responsePromises = []\n\n    // 2.\n    const requestList = []\n\n    // 3.\n    for (let request of requests) {\n      if (request === undefined) {\n        throw webidl.errors.conversionFailed({\n          prefix,\n          argument: 'Argument 1',\n          types: ['undefined is not allowed']\n        })\n      }\n\n      request = webidl.converters.RequestInfo(request)\n\n      if (typeof request === 'string') {\n        continue\n      }\n\n      // 3.1\n      const r = getRequestState(request)\n\n      // 3.2\n      if (!urlIsHttpHttpsScheme(r.url) || r.method !== 'GET') {\n        throw webidl.errors.exception({\n          header: prefix,\n          message: 'Expected http/s scheme when method is not GET.'\n        })\n      }\n    }\n\n    // 4.\n    /** @type {ReturnType<typeof fetching>[]} */\n    const fetchControllers = []\n\n    // 5.\n    for (const request of requests) {\n      // 5.1\n      const r = getRequestState(new Request(request))\n\n      // 5.2\n      if (!urlIsHttpHttpsScheme(r.url)) {\n        throw webidl.errors.exception({\n          header: prefix,\n          message: 'Expected http/s scheme.'\n        })\n      }\n\n      // 5.4\n      r.initiator = 'fetch'\n      r.destination = 'subresource'\n\n      // 5.5\n      requestList.push(r)\n\n      // 5.6\n      const responsePromise = createDeferredPromise()\n\n      // 5.7\n      fetchControllers.push(fetching({\n        request: r,\n        processResponse (response) {\n          // 1.\n          if (response.type === 'error' || response.status === 206 || response.status < 200 || response.status > 299) {\n            responsePromise.reject(webidl.errors.exception({\n              header: 'Cache.addAll',\n              message: 'Received an invalid status code or the request failed.'\n            }))\n          } else if (response.headersList.contains('vary')) { // 2.\n            // 2.1\n            const fieldValues = getFieldValues(response.headersList.get('vary'))\n\n            // 2.2\n            for (const fieldValue of fieldValues) {\n              // 2.2.1\n              if (fieldValue === '*') {\n                responsePromise.reject(webidl.errors.exception({\n                  header: 'Cache.addAll',\n                  message: 'invalid vary field value'\n                }))\n\n                for (const controller of fetchControllers) {\n                  controller.abort()\n                }\n\n                return\n              }\n            }\n          }\n        },\n        processResponseEndOfBody (response) {\n          // 1.\n          if (response.aborted) {\n            responsePromise.reject(new DOMException('aborted', 'AbortError'))\n            return\n          }\n\n          // 2.\n          responsePromise.resolve(response)\n        }\n      }))\n\n      // 5.8\n      responsePromises.push(responsePromise.promise)\n    }\n\n    // 6.\n    const p = Promise.all(responsePromises)\n\n    // 7.\n    const responses = await p\n\n    // 7.1\n    const operations = []\n\n    // 7.2\n    let index = 0\n\n    // 7.3\n    for (const response of responses) {\n      // 7.3.1\n      /** @type {CacheBatchOperation} */\n      const operation = {\n        type: 'put', // 7.3.2\n        request: requestList[index], // 7.3.3\n        response // 7.3.4\n      }\n\n      operations.push(operation) // 7.3.5\n\n      index++ // 7.3.6\n    }\n\n    // 7.5\n    const cacheJobPromise = createDeferredPromise()\n\n    // 7.6.1\n    let errorData = null\n\n    // 7.6.2\n    try {\n      this.#batchCacheOperations(operations)\n    } catch (e) {\n      errorData = e\n    }\n\n    // 7.6.3\n    queueMicrotask(() => {\n      // 7.6.3.1\n      if (errorData === null) {\n        cacheJobPromise.resolve(undefined)\n      } else {\n        // 7.6.3.2\n        cacheJobPromise.reject(errorData)\n      }\n    })\n\n    // 7.7\n    return cacheJobPromise.promise\n  }\n\n  async put (request, response) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.put'\n    webidl.argumentLengthCheck(arguments, 2, prefix)\n\n    request = webidl.converters.RequestInfo(request)\n    response = webidl.converters.Response(response, prefix, 'response')\n\n    // 1.\n    let innerRequest = null\n\n    // 2.\n    if (webidl.is.Request(request)) {\n      innerRequest = getRequestState(request)\n    } else { // 3.\n      innerRequest = getRequestState(new Request(request))\n    }\n\n    // 4.\n    if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== 'GET') {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: 'Expected an http/s scheme when method is not GET'\n      })\n    }\n\n    // 5.\n    const innerResponse = getResponseState(response)\n\n    // 6.\n    if (innerResponse.status === 206) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: 'Got 206 status'\n      })\n    }\n\n    // 7.\n    if (innerResponse.headersList.contains('vary')) {\n      // 7.1.\n      const fieldValues = getFieldValues(innerResponse.headersList.get('vary'))\n\n      // 7.2.\n      for (const fieldValue of fieldValues) {\n        // 7.2.1\n        if (fieldValue === '*') {\n          throw webidl.errors.exception({\n            header: prefix,\n            message: 'Got * vary field value'\n          })\n        }\n      }\n    }\n\n    // 8.\n    if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) {\n      throw webidl.errors.exception({\n        header: prefix,\n        message: 'Response body is locked or disturbed'\n      })\n    }\n\n    // 9.\n    const clonedResponse = cloneResponse(innerResponse)\n\n    // 10.\n    const bodyReadPromise = createDeferredPromise()\n\n    // 11.\n    if (innerResponse.body != null) {\n      // 11.1\n      const stream = innerResponse.body.stream\n\n      // 11.2\n      const reader = stream.getReader()\n\n      // 11.3\n      readAllBytes(reader, bodyReadPromise.resolve, bodyReadPromise.reject)\n    } else {\n      bodyReadPromise.resolve(undefined)\n    }\n\n    // 12.\n    /** @type {CacheBatchOperation[]} */\n    const operations = []\n\n    // 13.\n    /** @type {CacheBatchOperation} */\n    const operation = {\n      type: 'put', // 14.\n      request: innerRequest, // 15.\n      response: clonedResponse // 16.\n    }\n\n    // 17.\n    operations.push(operation)\n\n    // 19.\n    const bytes = await bodyReadPromise.promise\n\n    if (clonedResponse.body != null) {\n      clonedResponse.body.source = bytes\n    }\n\n    // 19.1\n    const cacheJobPromise = createDeferredPromise()\n\n    // 19.2.1\n    let errorData = null\n\n    // 19.2.2\n    try {\n      this.#batchCacheOperations(operations)\n    } catch (e) {\n      errorData = e\n    }\n\n    // 19.2.3\n    queueMicrotask(() => {\n      // 19.2.3.1\n      if (errorData === null) {\n        cacheJobPromise.resolve()\n      } else { // 19.2.3.2\n        cacheJobPromise.reject(errorData)\n      }\n    })\n\n    return cacheJobPromise.promise\n  }\n\n  async delete (request, options = {}) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.delete'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n    /**\n     * @type {Request}\n     */\n    let r = null\n\n    if (webidl.is.Request(request)) {\n      r = getRequestState(request)\n\n      if (r.method !== 'GET' && !options.ignoreMethod) {\n        return false\n      }\n    } else {\n      assert(typeof request === 'string')\n\n      r = getRequestState(new Request(request))\n    }\n\n    /** @type {CacheBatchOperation[]} */\n    const operations = []\n\n    /** @type {CacheBatchOperation} */\n    const operation = {\n      type: 'delete',\n      request: r,\n      options\n    }\n\n    operations.push(operation)\n\n    const cacheJobPromise = createDeferredPromise()\n\n    let errorData = null\n    let requestResponses\n\n    try {\n      requestResponses = this.#batchCacheOperations(operations)\n    } catch (e) {\n      errorData = e\n    }\n\n    queueMicrotask(() => {\n      if (errorData === null) {\n        cacheJobPromise.resolve(!!requestResponses?.length)\n      } else {\n        cacheJobPromise.reject(errorData)\n      }\n    })\n\n    return cacheJobPromise.promise\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#dom-cache-keys\n   * @param {any} request\n   * @param {import('../../../types/cache').CacheQueryOptions} options\n   * @returns {Promise<readonly Request[]>}\n   */\n  async keys (request = undefined, options = {}) {\n    webidl.brandCheck(this, Cache)\n\n    const prefix = 'Cache.keys'\n\n    if (request !== undefined) request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.CacheQueryOptions(options, prefix, 'options')\n\n    // 1.\n    let r = null\n\n    // 2.\n    if (request !== undefined) {\n      // 2.1\n      if (webidl.is.Request(request)) {\n        // 2.1.1\n        r = getRequestState(request)\n\n        // 2.1.2\n        if (r.method !== 'GET' && !options.ignoreMethod) {\n          return []\n        }\n      } else if (typeof request === 'string') { // 2.2\n        r = getRequestState(new Request(request))\n      }\n    }\n\n    // 4.\n    const promise = createDeferredPromise()\n\n    // 5.\n    // 5.1\n    const requests = []\n\n    // 5.2\n    if (request === undefined) {\n      // 5.2.1\n      for (const requestResponse of this.#relevantRequestResponseList) {\n        // 5.2.1.1\n        requests.push(requestResponse[0])\n      }\n    } else { // 5.3\n      // 5.3.1\n      const requestResponses = this.#queryCache(r, options)\n\n      // 5.3.2\n      for (const requestResponse of requestResponses) {\n        // 5.3.2.1\n        requests.push(requestResponse[0])\n      }\n    }\n\n    // 5.4\n    queueMicrotask(() => {\n      // 5.4.1\n      const requestList = []\n\n      // 5.4.2\n      for (const request of requests) {\n        const requestObject = fromInnerRequest(\n          request,\n          undefined,\n          new AbortController().signal,\n          'immutable'\n        )\n        // 5.4.2.1\n        requestList.push(requestObject)\n      }\n\n      // 5.4.3\n      promise.resolve(Object.freeze(requestList))\n    })\n\n    return promise.promise\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#batch-cache-operations-algorithm\n   * @param {CacheBatchOperation[]} operations\n   * @returns {requestResponseList}\n   */\n  #batchCacheOperations (operations) {\n    // 1.\n    const cache = this.#relevantRequestResponseList\n\n    // 2.\n    const backupCache = [...cache]\n\n    // 3.\n    const addedItems = []\n\n    // 4.1\n    const resultList = []\n\n    try {\n      // 4.2\n      for (const operation of operations) {\n        // 4.2.1\n        if (operation.type !== 'delete' && operation.type !== 'put') {\n          throw webidl.errors.exception({\n            header: 'Cache.#batchCacheOperations',\n            message: 'operation type does not match \"delete\" or \"put\"'\n          })\n        }\n\n        // 4.2.2\n        if (operation.type === 'delete' && operation.response != null) {\n          throw webidl.errors.exception({\n            header: 'Cache.#batchCacheOperations',\n            message: 'delete operation should not have an associated response'\n          })\n        }\n\n        // 4.2.3\n        if (this.#queryCache(operation.request, operation.options, addedItems).length) {\n          throw new DOMException('???', 'InvalidStateError')\n        }\n\n        // 4.2.4\n        let requestResponses\n\n        // 4.2.5\n        if (operation.type === 'delete') {\n          // 4.2.5.1\n          requestResponses = this.#queryCache(operation.request, operation.options)\n\n          // TODO: the spec is wrong, this is needed to pass WPTs\n          if (requestResponses.length === 0) {\n            return []\n          }\n\n          // 4.2.5.2\n          for (const requestResponse of requestResponses) {\n            const idx = cache.indexOf(requestResponse)\n            assert(idx !== -1)\n\n            // 4.2.5.2.1\n            cache.splice(idx, 1)\n          }\n        } else if (operation.type === 'put') { // 4.2.6\n          // 4.2.6.1\n          if (operation.response == null) {\n            throw webidl.errors.exception({\n              header: 'Cache.#batchCacheOperations',\n              message: 'put operation should have an associated response'\n            })\n          }\n\n          // 4.2.6.2\n          const r = operation.request\n\n          // 4.2.6.3\n          if (!urlIsHttpHttpsScheme(r.url)) {\n            throw webidl.errors.exception({\n              header: 'Cache.#batchCacheOperations',\n              message: 'expected http or https scheme'\n            })\n          }\n\n          // 4.2.6.4\n          if (r.method !== 'GET') {\n            throw webidl.errors.exception({\n              header: 'Cache.#batchCacheOperations',\n              message: 'not get method'\n            })\n          }\n\n          // 4.2.6.5\n          if (operation.options != null) {\n            throw webidl.errors.exception({\n              header: 'Cache.#batchCacheOperations',\n              message: 'options must not be defined'\n            })\n          }\n\n          // 4.2.6.6\n          requestResponses = this.#queryCache(operation.request)\n\n          // 4.2.6.7\n          for (const requestResponse of requestResponses) {\n            const idx = cache.indexOf(requestResponse)\n            assert(idx !== -1)\n\n            // 4.2.6.7.1\n            cache.splice(idx, 1)\n          }\n\n          // 4.2.6.8\n          cache.push([operation.request, operation.response])\n\n          // 4.2.6.10\n          addedItems.push([operation.request, operation.response])\n        }\n\n        // 4.2.7\n        resultList.push([operation.request, operation.response])\n      }\n\n      // 4.3\n      return resultList\n    } catch (e) { // 5.\n      // 5.1\n      this.#relevantRequestResponseList.length = 0\n\n      // 5.2\n      this.#relevantRequestResponseList = backupCache\n\n      // 5.3\n      throw e\n    }\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#query-cache\n   * @param {any} requestQuery\n   * @param {import('../../../types/cache').CacheQueryOptions} options\n   * @param {requestResponseList} targetStorage\n   * @returns {requestResponseList}\n   */\n  #queryCache (requestQuery, options, targetStorage) {\n    /** @type {requestResponseList} */\n    const resultList = []\n\n    const storage = targetStorage ?? this.#relevantRequestResponseList\n\n    for (const requestResponse of storage) {\n      const [cachedRequest, cachedResponse] = requestResponse\n      if (this.#requestMatchesCachedItem(requestQuery, cachedRequest, cachedResponse, options)) {\n        resultList.push(requestResponse)\n      }\n    }\n\n    return resultList\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#request-matches-cached-item-algorithm\n   * @param {any} requestQuery\n   * @param {any} request\n   * @param {any | null} response\n   * @param {import('../../../types/cache').CacheQueryOptions | undefined} options\n   * @returns {boolean}\n   */\n  #requestMatchesCachedItem (requestQuery, request, response = null, options) {\n    // if (options?.ignoreMethod === false && request.method === 'GET') {\n    //   return false\n    // }\n\n    const queryURL = new URL(requestQuery.url)\n\n    const cachedURL = new URL(request.url)\n\n    if (options?.ignoreSearch) {\n      cachedURL.search = ''\n\n      queryURL.search = ''\n    }\n\n    if (!urlEquals(queryURL, cachedURL, true)) {\n      return false\n    }\n\n    if (\n      response == null ||\n      options?.ignoreVary ||\n      !response.headersList.contains('vary')\n    ) {\n      return true\n    }\n\n    const fieldValues = getFieldValues(response.headersList.get('vary'))\n\n    for (const fieldValue of fieldValues) {\n      if (fieldValue === '*') {\n        return false\n      }\n\n      const requestValue = request.headersList.get(fieldValue)\n      const queryValue = requestQuery.headersList.get(fieldValue)\n\n      // If one has the header and the other doesn't, or one has\n      // a different value than the other, return false\n      if (requestValue !== queryValue) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  #internalMatchAll (request, options, maxResponses = Infinity) {\n    // 1.\n    let r = null\n\n    // 2.\n    if (request !== undefined) {\n      if (webidl.is.Request(request)) {\n        // 2.1.1\n        r = getRequestState(request)\n\n        // 2.1.2\n        if (r.method !== 'GET' && !options.ignoreMethod) {\n          return []\n        }\n      } else if (typeof request === 'string') {\n        // 2.2.1\n        r = getRequestState(new Request(request))\n      }\n    }\n\n    // 5.\n    // 5.1\n    const responses = []\n\n    // 5.2\n    if (request === undefined) {\n      // 5.2.1\n      for (const requestResponse of this.#relevantRequestResponseList) {\n        responses.push(requestResponse[1])\n      }\n    } else { // 5.3\n      // 5.3.1\n      const requestResponses = this.#queryCache(r, options)\n\n      // 5.3.2\n      for (const requestResponse of requestResponses) {\n        responses.push(requestResponse[1])\n      }\n    }\n\n    // 5.4\n    // We don't implement CORs so we don't need to loop over the responses, yay!\n\n    // 5.5.1\n    const responseList = []\n\n    // 5.5.2\n    for (const response of responses) {\n      // 5.5.2.1\n      const responseObject = fromInnerResponse(cloneResponse(response), 'immutable')\n\n      responseList.push(responseObject)\n\n      if (responseList.length >= maxResponses) {\n        break\n      }\n    }\n\n    // 6.\n    return Object.freeze(responseList)\n  }\n}\n\nObject.defineProperties(Cache.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'Cache',\n    configurable: true\n  },\n  match: kEnumerableProperty,\n  matchAll: kEnumerableProperty,\n  add: kEnumerableProperty,\n  addAll: kEnumerableProperty,\n  put: kEnumerableProperty,\n  delete: kEnumerableProperty,\n  keys: kEnumerableProperty\n})\n\nconst cacheQueryOptionConverters = [\n  {\n    key: 'ignoreSearch',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'ignoreMethod',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'ignoreVary',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  }\n]\n\nwebidl.converters.CacheQueryOptions = webidl.dictionaryConverter(cacheQueryOptionConverters)\n\nwebidl.converters.MultiCacheQueryOptions = webidl.dictionaryConverter([\n  ...cacheQueryOptionConverters,\n  {\n    key: 'cacheName',\n    converter: webidl.converters.DOMString\n  }\n])\n\nwebidl.converters.Response = webidl.interfaceConverter(\n  webidl.is.Response,\n  'Response'\n)\n\nwebidl.converters['sequence<RequestInfo>'] = webidl.sequenceConverter(\n  webidl.converters.RequestInfo\n)\n\nmodule.exports = {\n  Cache\n}\n", "'use strict'\n\nconst { Cache } = require('./cache')\nconst { webidl } = require('../webidl')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { kConstruct } = require('../../core/symbols')\n\nclass CacheStorage {\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-name-to-cache-map\n   * @type {Map<string, import('./cache').requestResponseList}\n   */\n  #caches = new Map()\n\n  constructor () {\n    if (arguments[0] !== kConstruct) {\n      webidl.illegalConstructor()\n    }\n\n    webidl.util.markAsUncloneable(this)\n  }\n\n  async match (request, options = {}) {\n    webidl.brandCheck(this, CacheStorage)\n    webidl.argumentLengthCheck(arguments, 1, 'CacheStorage.match')\n\n    request = webidl.converters.RequestInfo(request)\n    options = webidl.converters.MultiCacheQueryOptions(options)\n\n    // 1.\n    if (options.cacheName != null) {\n      // 1.1.1.1\n      if (this.#caches.has(options.cacheName)) {\n        // 1.1.1.1.1\n        const cacheList = this.#caches.get(options.cacheName)\n        const cache = new Cache(kConstruct, cacheList)\n\n        return await cache.match(request, options)\n      }\n    } else { // 2.\n      // 2.2\n      for (const cacheList of this.#caches.values()) {\n        const cache = new Cache(kConstruct, cacheList)\n\n        // 2.2.1.2\n        const response = await cache.match(request, options)\n\n        if (response !== undefined) {\n          return response\n        }\n      }\n    }\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#cache-storage-has\n   * @param {string} cacheName\n   * @returns {Promise<boolean>}\n   */\n  async has (cacheName) {\n    webidl.brandCheck(this, CacheStorage)\n\n    const prefix = 'CacheStorage.has'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    cacheName = webidl.converters.DOMString(cacheName, prefix, 'cacheName')\n\n    // 2.1.1\n    // 2.2\n    return this.#caches.has(cacheName)\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#dom-cachestorage-open\n   * @param {string} cacheName\n   * @returns {Promise<Cache>}\n   */\n  async open (cacheName) {\n    webidl.brandCheck(this, CacheStorage)\n\n    const prefix = 'CacheStorage.open'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    cacheName = webidl.converters.DOMString(cacheName, prefix, 'cacheName')\n\n    // 2.1\n    if (this.#caches.has(cacheName)) {\n      // await caches.open('v1') !== await caches.open('v1')\n\n      // 2.1.1\n      const cache = this.#caches.get(cacheName)\n\n      // 2.1.1.1\n      return new Cache(kConstruct, cache)\n    }\n\n    // 2.2\n    const cache = []\n\n    // 2.3\n    this.#caches.set(cacheName, cache)\n\n    // 2.4\n    return new Cache(kConstruct, cache)\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#cache-storage-delete\n   * @param {string} cacheName\n   * @returns {Promise<boolean>}\n   */\n  async delete (cacheName) {\n    webidl.brandCheck(this, CacheStorage)\n\n    const prefix = 'CacheStorage.delete'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    cacheName = webidl.converters.DOMString(cacheName, prefix, 'cacheName')\n\n    return this.#caches.delete(cacheName)\n  }\n\n  /**\n   * @see https://w3c.github.io/ServiceWorker/#cache-storage-keys\n   * @returns {Promise<string[]>}\n   */\n  async keys () {\n    webidl.brandCheck(this, CacheStorage)\n\n    // 2.1\n    const keys = this.#caches.keys()\n\n    // 2.2\n    return [...keys]\n  }\n}\n\nObject.defineProperties(CacheStorage.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'CacheStorage',\n    configurable: true\n  },\n  match: kEnumerableProperty,\n  has: kEnumerableProperty,\n  open: kEnumerableProperty,\n  delete: kEnumerableProperty,\n  keys: kEnumerableProperty\n})\n\nmodule.exports = {\n  CacheStorage\n}\n", "'use strict'\n\n// https://wicg.github.io/cookie-store/#cookie-maximum-attribute-value-size\nconst maxAttributeValueSize = 1024\n\n// https://wicg.github.io/cookie-store/#cookie-maximum-name-value-pair-size\nconst maxNameValuePairSize = 4096\n\nmodule.exports = {\n  maxAttributeValueSize,\n  maxNameValuePairSize\n}\n", "'use strict'\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction isCTLExcludingHtab (value) {\n  for (let i = 0; i < value.length; ++i) {\n    const code = value.charCodeAt(i)\n\n    if (\n      (code >= 0x00 && code <= 0x08) ||\n      (code >= 0x0A && code <= 0x1F) ||\n      code === 0x7F\n    ) {\n      return true\n    }\n  }\n  return false\n}\n\n/**\n CHAR           = <any US-ASCII character (octets 0 - 127)>\n token          = 1*<any CHAR except CTLs or separators>\n separators     = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n                | \",\" | \";\" | \":\" | \"\\\" | <\">\n                | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n                | \"{\" | \"}\" | SP | HT\n * @param {string} name\n */\nfunction validateCookieName (name) {\n  for (let i = 0; i < name.length; ++i) {\n    const code = name.charCodeAt(i)\n\n    if (\n      code < 0x21 || // exclude CTLs (0-31), SP and HT\n      code > 0x7E || // exclude non-ascii and DEL\n      code === 0x22 || // \"\n      code === 0x28 || // (\n      code === 0x29 || // )\n      code === 0x3C || // <\n      code === 0x3E || // >\n      code === 0x40 || // @\n      code === 0x2C || // ,\n      code === 0x3B || // ;\n      code === 0x3A || // :\n      code === 0x5C || // \\\n      code === 0x2F || // /\n      code === 0x5B || // [\n      code === 0x5D || // ]\n      code === 0x3F || // ?\n      code === 0x3D || // =\n      code === 0x7B || // {\n      code === 0x7D // }\n    ) {\n      throw new Error('Invalid cookie name')\n    }\n  }\n}\n\n/**\n cookie-value      = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n cookie-octet      = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n                       ; US-ASCII characters excluding CTLs,\n                       ; whitespace DQUOTE, comma, semicolon,\n                       ; and backslash\n * @param {string} value\n */\nfunction validateCookieValue (value) {\n  let len = value.length\n  let i = 0\n\n  // if the value is wrapped in DQUOTE\n  if (value[0] === '\"') {\n    if (len === 1 || value[len - 1] !== '\"') {\n      throw new Error('Invalid cookie value')\n    }\n    --len\n    ++i\n  }\n\n  while (i < len) {\n    const code = value.charCodeAt(i++)\n\n    if (\n      code < 0x21 || // exclude CTLs (0-31)\n      code > 0x7E || // non-ascii and DEL (127)\n      code === 0x22 || // \"\n      code === 0x2C || // ,\n      code === 0x3B || // ;\n      code === 0x5C // \\\n    ) {\n      throw new Error('Invalid cookie value')\n    }\n  }\n}\n\n/**\n * path-value        = <any CHAR except CTLs or \";\">\n * @param {string} path\n */\nfunction validateCookiePath (path) {\n  for (let i = 0; i < path.length; ++i) {\n    const code = path.charCodeAt(i)\n\n    if (\n      code < 0x20 || // exclude CTLs (0-31)\n      code > 0x7E || // exclude DEL and non-ascii\n      code === 0x3B // ;\n    ) {\n      throw new Error('Invalid cookie path')\n    }\n  }\n}\n\n/**\n * <let-dig> ::= <letter> | <digit>\n *\n * <letter> ::= any one of the 52 alphabetic characters A through Z in\n * upper case and a through z in lower case\n *\n * <digit> ::= any one of the ten digits 0 through 9r\n *\n * @see https://www.rfc-editor.org/rfc/rfc1034#section-3.5\n * @param {number} code\n */\nfunction isLetterOrDigit (code) {\n  return (\n    (code >= 0x30 && code <= 0x39) || // 0-9\n    (code >= 0x41 && code <= 0x5A) || // A-Z\n    (code >= 0x61 && code <= 0x7A) // a-z\n  )\n}\n\n/**\n * Validates a cookie domain against the \"preferred name syntax\".\n *\n * <domain>      ::= <subdomain> | \" \"\n * <subdomain>   ::= <label> | <subdomain> \".\" <label>\n * <label>       ::= <let-dig> [ [ <ldh-str> ] <let-dig> ]\n * <ldh-str>     ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>\n * <let-dig-hyp> ::= <let-dig> | \"-\"\n *\n * @see https://www.rfc-editor.org/rfc/rfc1034#section-3.5\n * @see https://www.rfc-editor.org/rfc/rfc1123#section-2.1\n * @see https://www.rfc-editor.org/rfc/rfc1035#section-2.3.4\n * @param {string} domain\n */\nfunction validateCookieDomain (domain) {\n  // <domain> ::= <subdomain> | \" \"\n  if (domain === ' ') {\n    return\n  }\n\n  if (domain.length > 255) {\n    throw new Error('Invalid cookie domain')\n  }\n\n  let labelLength = 0\n\n  for (let i = 0; i < domain.length; ++i) {\n    const code = domain.charCodeAt(i)\n\n    if (code === 0x2E) {\n      if (labelLength === 0) {\n        throw new Error('Invalid cookie domain')\n      }\n\n      if (domain.charCodeAt(i - 1) === 0x2D) { // \"-\"\n        throw new Error('Invalid cookie domain')\n      }\n\n      labelLength = 0\n      continue\n    }\n\n    if (labelLength === 0 && !isLetterOrDigit(code)) {\n      throw new Error('Invalid cookie domain')\n    }\n\n    if (!isLetterOrDigit(code) && code !== 0x2D) { // \"-\"\n      throw new Error('Invalid cookie domain')\n    }\n\n    if (++labelLength > 63) {\n      throw new Error('Invalid cookie domain')\n    }\n  }\n\n  if (labelLength === 0 || domain.charCodeAt(domain.length - 1) === 0x2D) { // \"-\"\n    throw new Error('Invalid cookie domain')\n  }\n}\n\nconst IMFDays = [\n  'Sun', 'Mon', 'Tue', 'Wed',\n  'Thu', 'Fri', 'Sat'\n]\n\nconst IMFMonths = [\n  'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n  'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'\n]\n\nconst IMFPaddedNumbers = Array(61).fill(0).map((_, i) => i.toString().padStart(2, '0'))\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc7231#section-7.1.1.1\n * @param {number|Date} date\n  IMF-fixdate  = day-name \",\" SP date1 SP time-of-day SP GMT\n  ; fixed length/zone/capitalization subset of the format\n  ; see Section 3.3 of [RFC5322]\n\n  day-name     = %x4D.6F.6E ; \"Mon\", case-sensitive\n              / %x54.75.65 ; \"Tue\", case-sensitive\n              / %x57.65.64 ; \"Wed\", case-sensitive\n              / %x54.68.75 ; \"Thu\", case-sensitive\n              / %x46.72.69 ; \"Fri\", case-sensitive\n              / %x53.61.74 ; \"Sat\", case-sensitive\n              / %x53.75.6E ; \"Sun\", case-sensitive\n  date1        = day SP month SP year\n                  ; e.g., 02 Jun 1982\n\n  day          = 2DIGIT\n  month        = %x4A.61.6E ; \"Jan\", case-sensitive\n              / %x46.65.62 ; \"Feb\", case-sensitive\n              / %x4D.61.72 ; \"Mar\", case-sensitive\n              / %x41.70.72 ; \"Apr\", case-sensitive\n              / %x4D.61.79 ; \"May\", case-sensitive\n              / %x4A.75.6E ; \"Jun\", case-sensitive\n              / %x4A.75.6C ; \"Jul\", case-sensitive\n              / %x41.75.67 ; \"Aug\", case-sensitive\n              / %x53.65.70 ; \"Sep\", case-sensitive\n              / %x4F.63.74 ; \"Oct\", case-sensitive\n              / %x4E.6F.76 ; \"Nov\", case-sensitive\n              / %x44.65.63 ; \"Dec\", case-sensitive\n  year         = 4DIGIT\n\n  GMT          = %x47.4D.54 ; \"GMT\", case-sensitive\n\n  time-of-day  = hour \":\" minute \":\" second\n              ; 00:00:00 - 23:59:60 (leap second)\n\n  hour         = 2DIGIT\n  minute       = 2DIGIT\n  second       = 2DIGIT\n */\nfunction toIMFDate (date) {\n  if (typeof date === 'number') {\n    date = new Date(date)\n  }\n\n  return `${IMFDays[date.getUTCDay()]}, ${IMFPaddedNumbers[date.getUTCDate()]} ${IMFMonths[date.getUTCMonth()]} ${date.getUTCFullYear()} ${IMFPaddedNumbers[date.getUTCHours()]}:${IMFPaddedNumbers[date.getUTCMinutes()]}:${IMFPaddedNumbers[date.getUTCSeconds()]} GMT`\n}\n\n/**\n max-age-av        = \"Max-Age=\" non-zero-digit *DIGIT\n                       ; In practice, both expires-av and max-age-av\n                       ; are limited to dates representable by the\n                       ; user agent.\n * @param {number} maxAge\n */\nfunction validateCookieMaxAge (maxAge) {\n  if (maxAge < 0) {\n    throw new Error('Invalid cookie max-age')\n  }\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc6265#section-4.1.1\n * @param {import('./index').Cookie} cookie\n */\nfunction stringify (cookie) {\n  if (cookie.name.length === 0) {\n    return null\n  }\n\n  validateCookieName(cookie.name)\n  validateCookieValue(cookie.value)\n\n  const out = [`${cookie.name}=${cookie.value}`]\n\n  // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-prefixes-00#section-3.1\n  // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-prefixes-00#section-3.2\n  if (cookie.name.startsWith('__Secure-')) {\n    cookie.secure = true\n  }\n\n  if (cookie.name.startsWith('__Host-')) {\n    cookie.secure = true\n    cookie.domain = null\n    cookie.path = '/'\n  }\n\n  if (cookie.secure) {\n    out.push('Secure')\n  }\n\n  if (cookie.httpOnly) {\n    out.push('HttpOnly')\n  }\n\n  if (typeof cookie.maxAge === 'number') {\n    validateCookieMaxAge(cookie.maxAge)\n    out.push(`Max-Age=${cookie.maxAge}`)\n  }\n\n  if (cookie.domain) {\n    validateCookieDomain(cookie.domain)\n    out.push(`Domain=${cookie.domain}`)\n  }\n\n  if (cookie.path) {\n    validateCookiePath(cookie.path)\n    out.push(`Path=${cookie.path}`)\n  }\n\n  if (cookie.expires && cookie.expires.toString() !== 'Invalid Date') {\n    out.push(`Expires=${toIMFDate(cookie.expires)}`)\n  }\n\n  if (cookie.sameSite) {\n    out.push(`SameSite=${cookie.sameSite}`)\n  }\n\n  for (const part of cookie.unparsed) {\n    if (!part.includes('=')) {\n      throw new Error('Invalid unparsed')\n    }\n\n    const [key, ...value] = part.split('=')\n\n    const trimmedKey = key.trim()\n    const joinedValue = value.join('=')\n\n    validateCookieName(trimmedKey)\n    validateCookieValue(joinedValue)\n\n    out.push(`${trimmedKey}=${joinedValue}`)\n  }\n\n  return out.join('; ')\n}\n\nmodule.exports = {\n  isCTLExcludingHtab,\n  validateCookieName,\n  validateCookiePath,\n  validateCookieValue,\n  toIMFDate,\n  stringify\n}\n", "'use strict'\n\nconst { collectASequenceOfCodePointsFast } = require('../infra')\nconst { maxNameValuePairSize, maxAttributeValueSize } = require('./constants')\nconst { isCTLExcludingHtab } = require('./util')\nconst assert = require('node:assert')\n\n/**\n * @description Parses the field-value attributes of a set-cookie header string.\n * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4\n * @param {string} header\n * @returns {import('./index').Cookie|null} if the header is invalid, null will be returned\n */\nfunction parseSetCookie (header) {\n  // 1. If the set-cookie-string contains a %x00-08 / %x0A-1F / %x7F\n  //    character (CTL characters excluding HTAB): Abort these steps and\n  //    ignore the set-cookie-string entirely.\n  if (isCTLExcludingHtab(header)) {\n    return null\n  }\n\n  let nameValuePair = ''\n  let unparsedAttributes = ''\n  let name = ''\n  let value = ''\n\n  // 2. If the set-cookie-string contains a %x3B (\";\") character:\n  if (header.includes(';')) {\n    // 1. The name-value-pair string consists of the characters up to,\n    //    but not including, the first %x3B (\";\"), and the unparsed-\n    //    attributes consist of the remainder of the set-cookie-string\n    //    (including the %x3B (\";\") in question).\n    const position = { position: 0 }\n\n    nameValuePair = collectASequenceOfCodePointsFast(';', header, position)\n    unparsedAttributes = header.slice(position.position)\n  } else {\n    // Otherwise:\n\n    // 1. The name-value-pair string consists of all the characters\n    //    contained in the set-cookie-string, and the unparsed-\n    //    attributes is the empty string.\n    nameValuePair = header\n  }\n\n  // 3. If the name-value-pair string lacks a %x3D (\"=\") character, then\n  //    the name string is empty, and the value string is the value of\n  //    name-value-pair.\n  if (!nameValuePair.includes('=')) {\n    value = nameValuePair\n  } else {\n    //    Otherwise, the name string consists of the characters up to, but\n    //    not including, the first %x3D (\"=\") character, and the (possibly\n    //    empty) value string consists of the characters after the first\n    //    %x3D (\"=\") character.\n    const position = { position: 0 }\n    name = collectASequenceOfCodePointsFast(\n      '=',\n      nameValuePair,\n      position\n    )\n    value = nameValuePair.slice(position.position + 1)\n  }\n\n  // 4. Remove any leading or trailing WSP characters from the name\n  //    string and the value string.\n  name = name.trim()\n  value = value.trim()\n\n  // 5. If the sum of the lengths of the name string and the value string\n  //    is more than 4096 octets, abort these steps and ignore the set-\n  //    cookie-string entirely.\n  if (name.length + value.length > maxNameValuePairSize) {\n    return null\n  }\n\n  // 6. The cookie-name is the name string, and the cookie-value is the\n  //    value string.\n  // https://datatracker.ietf.org/doc/html/rfc6265\n  // To maximize compatibility with user agents, servers that wish to\n  // store arbitrary data in a cookie-value SHOULD encode that data, for\n  // example, using Base64 [RFC4648].\n  return {\n    name, value, ...parseUnparsedAttributes(unparsedAttributes)\n  }\n}\n\n/**\n * Parses the remaining attributes of a set-cookie header\n * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4\n * @param {string} unparsedAttributes\n * @param {Object.<string, unknown>} [cookieAttributeList={}]\n */\nfunction parseUnparsedAttributes (unparsedAttributes, cookieAttributeList = {}) {\n  // 1. If the unparsed-attributes string is empty, skip the rest of\n  //    these steps.\n  if (unparsedAttributes.length === 0) {\n    return cookieAttributeList\n  }\n\n  // 2. Discard the first character of the unparsed-attributes (which\n  //    will be a %x3B (\";\") character).\n  assert(unparsedAttributes[0] === ';')\n  unparsedAttributes = unparsedAttributes.slice(1)\n\n  let cookieAv = ''\n\n  // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n  //    character:\n  if (unparsedAttributes.includes(';')) {\n    // 1. Consume the characters of the unparsed-attributes up to, but\n    //    not including, the first %x3B (\";\") character.\n    cookieAv = collectASequenceOfCodePointsFast(\n      ';',\n      unparsedAttributes,\n      { position: 0 }\n    )\n    unparsedAttributes = unparsedAttributes.slice(cookieAv.length)\n  } else {\n    // Otherwise:\n\n    // 1. Consume the remainder of the unparsed-attributes.\n    cookieAv = unparsedAttributes\n    unparsedAttributes = ''\n  }\n\n  // Let the cookie-av string be the characters consumed in this step.\n\n  let attributeName = ''\n  let attributeValue = ''\n\n  // 4. If the cookie-av string contains a %x3D (\"=\") character:\n  if (cookieAv.includes('=')) {\n    // 1. The (possibly empty) attribute-name string consists of the\n    //    characters up to, but not including, the first %x3D (\"=\")\n    //    character, and the (possibly empty) attribute-value string\n    //    consists of the characters after the first %x3D (\"=\")\n    //    character.\n    const position = { position: 0 }\n\n    attributeName = collectASequenceOfCodePointsFast(\n      '=',\n      cookieAv,\n      position\n    )\n    attributeValue = cookieAv.slice(position.position + 1)\n  } else {\n    // Otherwise:\n\n    // 1. The attribute-name string consists of the entire cookie-av\n    //    string, and the attribute-value string is empty.\n    attributeName = cookieAv\n  }\n\n  // 5. Remove any leading or trailing WSP characters from the attribute-\n  //    name string and the attribute-value string.\n  attributeName = attributeName.trim()\n  attributeValue = attributeValue.trim()\n\n  // 6. If the attribute-value is longer than 1024 octets, ignore the\n  //    cookie-av string and return to Step 1 of this algorithm.\n  if (attributeValue.length > maxAttributeValueSize) {\n    return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n  }\n\n  // 7. Process the attribute-name and attribute-value according to the\n  //    requirements in the following subsections.  (Notice that\n  //    attributes with unrecognized attribute-names are ignored.)\n  const attributeNameLowercase = attributeName.toLowerCase()\n\n  // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.1\n  // If the attribute-name case-insensitively matches the string\n  // \"Expires\", the user agent MUST process the cookie-av as follows.\n  if (attributeNameLowercase === 'expires') {\n    // 1. Let the expiry-time be the result of parsing the attribute-value\n    //    as cookie-date (see Section 5.1.1).\n    const expiryTime = new Date(attributeValue)\n\n    // 2. If the attribute-value failed to parse as a cookie date, ignore\n    //    the cookie-av.\n\n    cookieAttributeList.expires = expiryTime\n  } else if (attributeNameLowercase === 'max-age') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.2\n    // If the attribute-name case-insensitively matches the string \"Max-\n    // Age\", the user agent MUST process the cookie-av as follows.\n\n    // 1. If the first character of the attribute-value is not a DIGIT or a\n    //    \"-\" character, ignore the cookie-av.\n    const charCode = attributeValue.charCodeAt(0)\n\n    if ((charCode < 48 || charCode > 57) && attributeValue[0] !== '-') {\n      return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n    }\n\n    // 2. If the remainder of attribute-value contains a non-DIGIT\n    //    character, ignore the cookie-av.\n    if (!/^\\d+$/.test(attributeValue)) {\n      return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n    }\n\n    // 3. Let delta-seconds be the attribute-value converted to an integer.\n    const deltaSeconds = Number(attributeValue)\n\n    // 4. Let cookie-age-limit be the maximum age of the cookie (which\n    //    SHOULD be 400 days or less, see Section 4.1.2.2).\n\n    // 5. Set delta-seconds to the smaller of its present value and cookie-\n    //    age-limit.\n    // deltaSeconds = Math.min(deltaSeconds * 1000, maxExpiresMs)\n\n    // 6. If delta-seconds is less than or equal to zero (0), let expiry-\n    //    time be the earliest representable date and time.  Otherwise, let\n    //    the expiry-time be the current date and time plus delta-seconds\n    //    seconds.\n    // const expiryTime = deltaSeconds <= 0 ? Date.now() : Date.now() + deltaSeconds\n\n    // 7. Append an attribute to the cookie-attribute-list with an\n    //    attribute-name of Max-Age and an attribute-value of expiry-time.\n    cookieAttributeList.maxAge = deltaSeconds\n  } else if (attributeNameLowercase === 'domain') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.3\n    // If the attribute-name case-insensitively matches the string \"Domain\",\n    // the user agent MUST process the cookie-av as follows.\n\n    // 1. Let cookie-domain be the attribute-value.\n    let cookieDomain = attributeValue\n\n    // 2. If cookie-domain starts with %x2E (\".\"), let cookie-domain be\n    //    cookie-domain without its leading %x2E (\".\").\n    if (cookieDomain[0] === '.') {\n      cookieDomain = cookieDomain.slice(1)\n    }\n\n    // 3. Convert the cookie-domain to lower case.\n    cookieDomain = cookieDomain.toLowerCase()\n\n    // 4. Append an attribute to the cookie-attribute-list with an\n    //    attribute-name of Domain and an attribute-value of cookie-domain.\n    cookieAttributeList.domain = cookieDomain\n  } else if (attributeNameLowercase === 'path') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.4\n    // If the attribute-name case-insensitively matches the string \"Path\",\n    // the user agent MUST process the cookie-av as follows.\n\n    // 1. If the attribute-value is empty or if the first character of the\n    //    attribute-value is not %x2F (\"/\"):\n    let cookiePath = ''\n    if (attributeValue.length === 0 || attributeValue[0] !== '/') {\n      // 1. Let cookie-path be the default-path.\n      cookiePath = '/'\n    } else {\n      // Otherwise:\n\n      // 1. Let cookie-path be the attribute-value.\n      cookiePath = attributeValue\n    }\n\n    // 2. Append an attribute to the cookie-attribute-list with an\n    //    attribute-name of Path and an attribute-value of cookie-path.\n    cookieAttributeList.path = cookiePath\n  } else if (attributeNameLowercase === 'secure') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.5\n    // If the attribute-name case-insensitively matches the string \"Secure\",\n    // the user agent MUST append an attribute to the cookie-attribute-list\n    // with an attribute-name of Secure and an empty attribute-value.\n\n    cookieAttributeList.secure = true\n  } else if (attributeNameLowercase === 'httponly') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.6\n    // If the attribute-name case-insensitively matches the string\n    // \"HttpOnly\", the user agent MUST append an attribute to the cookie-\n    // attribute-list with an attribute-name of HttpOnly and an empty\n    // attribute-value.\n\n    cookieAttributeList.httpOnly = true\n  } else if (attributeNameLowercase === 'samesite') {\n    // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.7\n    // If the attribute-name case-insensitively matches the string\n    // \"SameSite\", the user agent MUST process the cookie-av as follows:\n\n    const attributeValueLowercase = attributeValue.toLowerCase()\n\n    // 1. If cookie-av's attribute-value is a case-insensitive match for\n    //    \"None\", append an attribute to the cookie-attribute-list with an\n    //    attribute-name of \"SameSite\" and an attribute-value of \"None\".\n    if (attributeValueLowercase === 'none') {\n      cookieAttributeList.sameSite = 'None'\n    } else if (attributeValueLowercase === 'strict') {\n      // 2. If cookie-av's attribute-value is a case-insensitive match for\n      //    \"Strict\", append an attribute to the cookie-attribute-list with\n      //    an attribute-name of \"SameSite\" and an attribute-value of\n      //    \"Strict\".\n      cookieAttributeList.sameSite = 'Strict'\n    } else if (attributeValueLowercase === 'lax') {\n      // 3. If cookie-av's attribute-value is a case-insensitive match for\n      //    \"Lax\", append an attribute to the cookie-attribute-list with an\n      //    attribute-name of \"SameSite\" and an attribute-value of \"Lax\".\n      cookieAttributeList.sameSite = 'Lax'\n    }\n  } else {\n    cookieAttributeList.unparsed ??= []\n\n    cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`)\n  }\n\n  // 8. Return to Step 1 of this algorithm.\n  return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList)\n}\n\nmodule.exports = {\n  parseSetCookie,\n  parseUnparsedAttributes\n}\n", "'use strict'\n\nconst { parseSetCookie } = require('./parse')\nconst { stringify } = require('./util')\nconst { webidl } = require('../webidl')\nconst { Headers } = require('../fetch/headers')\n\nconst brandChecks = webidl.brandCheckMultiple([Headers, globalThis.Headers].filter(Boolean))\n\n/**\n * @typedef {Object} Cookie\n * @property {string} name\n * @property {string} value\n * @property {Date|number} [expires]\n * @property {number} [maxAge]\n * @property {string} [domain]\n * @property {string} [path]\n * @property {boolean} [secure]\n * @property {boolean} [httpOnly]\n * @property {'Strict'|'Lax'|'None'} [sameSite]\n * @property {string[]} [unparsed]\n */\n\n/**\n * @param {Headers} headers\n * @returns {Record<string, string>}\n */\nfunction getCookies (headers) {\n  webidl.argumentLengthCheck(arguments, 1, 'getCookies')\n\n  brandChecks(headers)\n\n  const cookie = headers.get('cookie')\n\n  /** @type {Record<string, string>} */\n  const out = {}\n\n  if (!cookie) {\n    return out\n  }\n\n  for (const piece of cookie.split(';')) {\n    const [name, ...value] = piece.split('=')\n\n    out[name.trim()] = value.join('=')\n  }\n\n  return out\n}\n\n/**\n * @param {Headers} headers\n * @param {string} name\n * @param {{ path?: string, domain?: string }|undefined} attributes\n * @returns {void}\n */\nfunction deleteCookie (headers, name, attributes) {\n  brandChecks(headers)\n\n  const prefix = 'deleteCookie'\n  webidl.argumentLengthCheck(arguments, 2, prefix)\n\n  name = webidl.converters.DOMString(name, prefix, 'name')\n  attributes = webidl.converters.DeleteCookieAttributes(attributes)\n\n  // Matches behavior of\n  // https://github.com/denoland/deno_std/blob/63827b16330b82489a04614027c33b7904e08be5/http/cookie.ts#L278\n  setCookie(headers, {\n    name,\n    value: '',\n    expires: new Date(0),\n    ...attributes\n  })\n}\n\n/**\n * @param {Headers} headers\n * @returns {Cookie[]}\n */\nfunction getSetCookies (headers) {\n  webidl.argumentLengthCheck(arguments, 1, 'getSetCookies')\n\n  brandChecks(headers)\n\n  const cookies = headers.getSetCookie()\n\n  if (!cookies) {\n    return []\n  }\n\n  return cookies.map((pair) => parseSetCookie(pair))\n}\n\n/**\n * Parses a cookie string\n * @param {string} cookie\n */\nfunction parseCookie (cookie) {\n  cookie = webidl.converters.DOMString(cookie)\n\n  return parseSetCookie(cookie)\n}\n\n/**\n * @param {Headers} headers\n * @param {Cookie} cookie\n * @returns {void}\n */\nfunction setCookie (headers, cookie) {\n  webidl.argumentLengthCheck(arguments, 2, 'setCookie')\n\n  brandChecks(headers)\n\n  cookie = webidl.converters.Cookie(cookie)\n\n  const str = stringify(cookie)\n\n  if (str) {\n    headers.append('set-cookie', str, true)\n  }\n}\n\nwebidl.converters.DeleteCookieAttributes = webidl.dictionaryConverter([\n  {\n    converter: webidl.nullableConverter(webidl.converters.DOMString),\n    key: 'path',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.DOMString),\n    key: 'domain',\n    defaultValue: () => null\n  }\n])\n\nwebidl.converters.Cookie = webidl.dictionaryConverter([\n  {\n    converter: webidl.converters.DOMString,\n    key: 'name'\n  },\n  {\n    converter: webidl.converters.DOMString,\n    key: 'value'\n  },\n  {\n    converter: webidl.nullableConverter((value) => {\n      if (typeof value === 'number') {\n        return webidl.converters['unsigned long long'](value)\n      }\n\n      return new Date(value)\n    }),\n    key: 'expires',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters['long long']),\n    key: 'maxAge',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.DOMString),\n    key: 'domain',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.DOMString),\n    key: 'path',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.boolean),\n    key: 'secure',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.nullableConverter(webidl.converters.boolean),\n    key: 'httpOnly',\n    defaultValue: () => null\n  },\n  {\n    converter: webidl.converters.USVString,\n    key: 'sameSite',\n    allowedValues: ['Strict', 'Lax', 'None']\n  },\n  {\n    converter: webidl.sequenceConverter(webidl.converters.DOMString),\n    key: 'unparsed',\n    defaultValue: () => []\n  }\n])\n\nmodule.exports = {\n  getCookies,\n  deleteCookie,\n  getSetCookies,\n  setCookie,\n  parseCookie\n}\n", "'use strict'\n\nconst { webidl } = require('../webidl')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { kConstruct } = require('../../core/symbols')\n\n/**\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageevent\n */\nclass MessageEvent extends Event {\n  #eventInit\n\n  constructor (type, eventInitDict = {}) {\n    if (type === kConstruct) {\n      super(arguments[1], arguments[2])\n      webidl.util.markAsUncloneable(this)\n      return\n    }\n\n    const prefix = 'MessageEvent constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    type = webidl.converters.DOMString(type, prefix, 'type')\n    eventInitDict = webidl.converters.MessageEventInit(eventInitDict, prefix, 'eventInitDict')\n\n    super(type, eventInitDict)\n\n    this.#eventInit = eventInitDict\n    webidl.util.markAsUncloneable(this)\n  }\n\n  get data () {\n    webidl.brandCheck(this, MessageEvent)\n\n    return this.#eventInit.data\n  }\n\n  get origin () {\n    webidl.brandCheck(this, MessageEvent)\n\n    return this.#eventInit.origin\n  }\n\n  get lastEventId () {\n    webidl.brandCheck(this, MessageEvent)\n\n    return this.#eventInit.lastEventId\n  }\n\n  get source () {\n    webidl.brandCheck(this, MessageEvent)\n\n    return this.#eventInit.source\n  }\n\n  get ports () {\n    webidl.brandCheck(this, MessageEvent)\n\n    if (!Object.isFrozen(this.#eventInit.ports)) {\n      Object.freeze(this.#eventInit.ports)\n    }\n\n    return this.#eventInit.ports\n  }\n\n  initMessageEvent (\n    type,\n    bubbles = false,\n    cancelable = false,\n    data = null,\n    origin = '',\n    lastEventId = '',\n    source = null,\n    ports = []\n  ) {\n    webidl.brandCheck(this, MessageEvent)\n\n    webidl.argumentLengthCheck(arguments, 1, 'MessageEvent.initMessageEvent')\n\n    return new MessageEvent(type, {\n      bubbles, cancelable, data, origin, lastEventId, source, ports\n    })\n  }\n\n  static createFastMessageEvent (type, init) {\n    const messageEvent = new MessageEvent(kConstruct, type, init)\n    messageEvent.#eventInit = init\n    messageEvent.#eventInit.data ??= null\n    messageEvent.#eventInit.origin ??= ''\n    messageEvent.#eventInit.lastEventId ??= ''\n    messageEvent.#eventInit.source ??= null\n    messageEvent.#eventInit.ports ??= []\n    return messageEvent\n  }\n}\n\nconst { createFastMessageEvent } = MessageEvent\ndelete MessageEvent.createFastMessageEvent\n\n/**\n * @see https://websockets.spec.whatwg.org/#the-closeevent-interface\n */\nclass CloseEvent extends Event {\n  #eventInit\n\n  constructor (type, eventInitDict = {}) {\n    const prefix = 'CloseEvent constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    type = webidl.converters.DOMString(type, prefix, 'type')\n    eventInitDict = webidl.converters.CloseEventInit(eventInitDict)\n\n    super(type, eventInitDict)\n\n    this.#eventInit = eventInitDict\n    webidl.util.markAsUncloneable(this)\n  }\n\n  get wasClean () {\n    webidl.brandCheck(this, CloseEvent)\n\n    return this.#eventInit.wasClean\n  }\n\n  get code () {\n    webidl.brandCheck(this, CloseEvent)\n\n    return this.#eventInit.code\n  }\n\n  get reason () {\n    webidl.brandCheck(this, CloseEvent)\n\n    return this.#eventInit.reason\n  }\n}\n\n// https://html.spec.whatwg.org/multipage/webappapis.html#the-errorevent-interface\nclass ErrorEvent extends Event {\n  #eventInit\n\n  constructor (type, eventInitDict) {\n    const prefix = 'ErrorEvent constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    super(type, eventInitDict)\n    webidl.util.markAsUncloneable(this)\n\n    type = webidl.converters.DOMString(type, prefix, 'type')\n    eventInitDict = webidl.converters.ErrorEventInit(eventInitDict ?? {})\n\n    this.#eventInit = eventInitDict\n  }\n\n  get message () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.message\n  }\n\n  get filename () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.filename\n  }\n\n  get lineno () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.lineno\n  }\n\n  get colno () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.colno\n  }\n\n  get error () {\n    webidl.brandCheck(this, ErrorEvent)\n\n    return this.#eventInit.error\n  }\n}\n\nObject.defineProperties(MessageEvent.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'MessageEvent',\n    configurable: true\n  },\n  data: kEnumerableProperty,\n  origin: kEnumerableProperty,\n  lastEventId: kEnumerableProperty,\n  source: kEnumerableProperty,\n  ports: kEnumerableProperty,\n  initMessageEvent: kEnumerableProperty\n})\n\nObject.defineProperties(CloseEvent.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'CloseEvent',\n    configurable: true\n  },\n  reason: kEnumerableProperty,\n  code: kEnumerableProperty,\n  wasClean: kEnumerableProperty\n})\n\nObject.defineProperties(ErrorEvent.prototype, {\n  [Symbol.toStringTag]: {\n    value: 'ErrorEvent',\n    configurable: true\n  },\n  message: kEnumerableProperty,\n  filename: kEnumerableProperty,\n  lineno: kEnumerableProperty,\n  colno: kEnumerableProperty,\n  error: kEnumerableProperty\n})\n\nwebidl.converters.MessagePort = webidl.interfaceConverter(\n  webidl.is.MessagePort,\n  'MessagePort'\n)\n\nwebidl.converters['sequence<MessagePort>'] = webidl.sequenceConverter(\n  webidl.converters.MessagePort\n)\n\nconst eventInit = [\n  {\n    key: 'bubbles',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'cancelable',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'composed',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  }\n]\n\nwebidl.converters.MessageEventInit = webidl.dictionaryConverter([\n  ...eventInit,\n  {\n    key: 'data',\n    converter: webidl.converters.any,\n    defaultValue: () => null\n  },\n  {\n    key: 'origin',\n    converter: webidl.converters.USVString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'lastEventId',\n    converter: webidl.converters.DOMString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'source',\n    // Node doesn't implement WindowProxy or ServiceWorker, so the only\n    // valid value for source is a MessagePort.\n    converter: webidl.nullableConverter(webidl.converters.MessagePort),\n    defaultValue: () => null\n  },\n  {\n    key: 'ports',\n    converter: webidl.converters['sequence<MessagePort>'],\n    defaultValue: () => []\n  }\n])\n\nwebidl.converters.CloseEventInit = webidl.dictionaryConverter([\n  ...eventInit,\n  {\n    key: 'wasClean',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'code',\n    converter: webidl.converters['unsigned short'],\n    defaultValue: () => 0\n  },\n  {\n    key: 'reason',\n    converter: webidl.converters.USVString,\n    defaultValue: () => ''\n  }\n])\n\nwebidl.converters.ErrorEventInit = webidl.dictionaryConverter([\n  ...eventInit,\n  {\n    key: 'message',\n    converter: webidl.converters.DOMString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'filename',\n    converter: webidl.converters.USVString,\n    defaultValue: () => ''\n  },\n  {\n    key: 'lineno',\n    converter: webidl.converters['unsigned long'],\n    defaultValue: () => 0\n  },\n  {\n    key: 'colno',\n    converter: webidl.converters['unsigned long'],\n    defaultValue: () => 0\n  },\n  {\n    key: 'error',\n    converter: webidl.converters.any\n  }\n])\n\nmodule.exports = {\n  MessageEvent,\n  CloseEvent,\n  ErrorEvent,\n  createFastMessageEvent\n}\n", "'use strict'\n\n/**\n * This is a Globally Unique Identifier unique used to validate that the\n * endpoint accepts websocket connections.\n * @see https://www.rfc-editor.org/rfc/rfc6455.html#section-1.3\n * @type {'258EAFA5-E914-47DA-95CA-C5AB0DC85B11'}\n */\nconst uid = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'\n\n/**\n * @type {PropertyDescriptor}\n */\nconst staticPropertyDescriptors = {\n  enumerable: true,\n  writable: false,\n  configurable: false\n}\n\n/**\n * The states of the WebSocket connection.\n *\n * @readonly\n * @enum\n * @property {0} CONNECTING\n * @property {1} OPEN\n * @property {2} CLOSING\n * @property {3} CLOSED\n */\nconst states = {\n  CONNECTING: 0,\n  OPEN: 1,\n  CLOSING: 2,\n  CLOSED: 3\n}\n\n/**\n * @readonly\n * @enum\n * @property {0} NOT_SENT\n * @property {1} PROCESSING\n * @property {2} SENT\n */\nconst sentCloseFrameState = {\n  SENT: 1,\n  RECEIVED: 2\n}\n\n/**\n * The WebSocket opcodes.\n *\n * @readonly\n * @enum\n * @property {0x0} CONTINUATION\n * @property {0x1} TEXT\n * @property {0x2} BINARY\n * @property {0x8} CLOSE\n * @property {0x9} PING\n * @property {0xA} PONG\n * @see https://datatracker.ietf.org/doc/html/rfc6455#section-5.2\n */\nconst opcodes = {\n  CONTINUATION: 0x0,\n  TEXT: 0x1,\n  BINARY: 0x2,\n  CLOSE: 0x8,\n  PING: 0x9,\n  PONG: 0xA\n}\n\n/**\n * The maximum value for an unsigned 16-bit integer.\n *\n * @type {65535} 2 ** 16 - 1\n */\nconst maxUnsigned16Bit = 65535\n\n/**\n * The states of the parser.\n *\n * @readonly\n * @enum\n * @property {0} INFO\n * @property {2} PAYLOADLENGTH_16\n * @property {3} PAYLOADLENGTH_64\n * @property {4} READ_DATA\n */\nconst parserStates = {\n  INFO: 0,\n  PAYLOADLENGTH_16: 2,\n  PAYLOADLENGTH_64: 3,\n  READ_DATA: 4\n}\n\n/**\n * An empty buffer.\n *\n * @type {Buffer}\n */\nconst emptyBuffer = Buffer.allocUnsafe(0)\n\n/**\n * @readonly\n * @property {1} text\n * @property {2} typedArray\n * @property {3} arrayBuffer\n * @property {4} blob\n */\nconst sendHints = {\n  text: 1,\n  typedArray: 2,\n  arrayBuffer: 3,\n  blob: 4\n}\n\nmodule.exports = {\n  uid,\n  sentCloseFrameState,\n  staticPropertyDescriptors,\n  states,\n  opcodes,\n  maxUnsigned16Bit,\n  parserStates,\n  emptyBuffer,\n  sendHints\n}\n", "'use strict'\n\nconst { states, opcodes } = require('./constants')\nconst { isUtf8 } = require('node:buffer')\nconst { removeHTTPWhitespace } = require('../fetch/data-url')\nconst { collectASequenceOfCodePointsFast } = require('../infra')\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isConnecting (readyState) {\n  // If the WebSocket connection is not yet established, and the connection\n  // is not yet closed, then the WebSocket connection is in the CONNECTING state.\n  return readyState === states.CONNECTING\n}\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isEstablished (readyState) {\n  // If the server's response is validated as provided for above, it is\n  // said that _The WebSocket Connection is Established_ and that the\n  // WebSocket Connection is in the OPEN state.\n  return readyState === states.OPEN\n}\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isClosing (readyState) {\n  // Upon either sending or receiving a Close control frame, it is said\n  // that _The WebSocket Closing Handshake is Started_ and that the\n  // WebSocket connection is in the CLOSING state.\n  return readyState === states.CLOSING\n}\n\n/**\n * @param {number} readyState\n * @returns {boolean}\n */\nfunction isClosed (readyState) {\n  return readyState === states.CLOSED\n}\n\n/**\n * @see https://dom.spec.whatwg.org/#concept-event-fire\n * @param {string} e\n * @param {EventTarget} target\n * @param {(...args: ConstructorParameters<typeof Event>) => Event} eventFactory\n * @param {EventInit | undefined} eventInitDict\n * @returns {void}\n */\nfunction fireEvent (e, target, eventFactory = (type, init) => new Event(type, init), eventInitDict = {}) {\n  // 1. If eventConstructor is not given, then let eventConstructor be Event.\n\n  // 2. Let event be the result of creating an event given eventConstructor,\n  //    in the relevant realm of target.\n  // 3. Initialize event\u2019s type attribute to e.\n  const event = eventFactory(e, eventInitDict)\n\n  // 4. Initialize any other IDL attributes of event as described in the\n  //    invocation of this algorithm.\n\n  // 5. Return the result of dispatching event at target, with legacy target\n  //    override flag set if set.\n  target.dispatchEvent(event)\n}\n\n/**\n * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol\n * @param {import('./websocket').Handler} handler\n * @param {number} type Opcode\n * @param {Buffer} data application data\n * @returns {void}\n */\nfunction websocketMessageReceived (handler, type, data) {\n  handler.onMessage(type, data)\n}\n\n/**\n * @param {Buffer} buffer\n * @returns {ArrayBuffer}\n */\nfunction toArrayBuffer (buffer) {\n  if (buffer.byteLength === buffer.buffer.byteLength) {\n    return buffer.buffer\n  }\n  return new Uint8Array(buffer).buffer\n}\n\n/**\n * @see https://datatracker.ietf.org/doc/html/rfc6455\n * @see https://datatracker.ietf.org/doc/html/rfc2616\n * @see https://bugs.chromium.org/p/chromium/issues/detail?id=398407\n * @param {string} protocol\n * @returns {boolean}\n */\nfunction isValidSubprotocol (protocol) {\n  // If present, this value indicates one\n  // or more comma-separated subprotocol the client wishes to speak,\n  // ordered by preference.  The elements that comprise this value\n  // MUST be non-empty strings with characters in the range U+0021 to\n  // U+007E not including separator characters as defined in\n  // [RFC2616] and MUST all be unique strings.\n  if (protocol.length === 0) {\n    return false\n  }\n\n  for (let i = 0; i < protocol.length; ++i) {\n    const code = protocol.charCodeAt(i)\n\n    if (\n      code < 0x21 || // CTL, contains SP (0x20) and HT (0x09)\n      code > 0x7E ||\n      code === 0x22 || // \"\n      code === 0x28 || // (\n      code === 0x29 || // )\n      code === 0x2C || // ,\n      code === 0x2F || // /\n      code === 0x3A || // :\n      code === 0x3B || // ;\n      code === 0x3C || // <\n      code === 0x3D || // =\n      code === 0x3E || // >\n      code === 0x3F || // ?\n      code === 0x40 || // @\n      code === 0x5B || // [\n      code === 0x5C || // \\\n      code === 0x5D || // ]\n      code === 0x7B || // {\n      code === 0x7D // }\n    ) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7-4\n * @param {number} code\n * @returns {boolean}\n */\nfunction isValidStatusCode (code) {\n  if (code >= 1000 && code < 1015) {\n    return (\n      code !== 1004 && // reserved\n      code !== 1005 && // \"MUST NOT be set as a status code\"\n      code !== 1006 // \"MUST NOT be set as a status code\"\n    )\n  }\n\n  return code >= 3000 && code <= 4999\n}\n\n/**\n * @see https://datatracker.ietf.org/doc/html/rfc6455#section-5.5\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isControlFrame (opcode) {\n  return (\n    opcode === opcodes.CLOSE ||\n    opcode === opcodes.PING ||\n    opcode === opcodes.PONG\n  )\n}\n\n/**\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isContinuationFrame (opcode) {\n  return opcode === opcodes.CONTINUATION\n}\n\n/**\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isTextBinaryFrame (opcode) {\n  return opcode === opcodes.TEXT || opcode === opcodes.BINARY\n}\n\n/**\n *\n * @param {number} opcode\n * @returns {boolean}\n */\nfunction isValidOpcode (opcode) {\n  return isTextBinaryFrame(opcode) || isContinuationFrame(opcode) || isControlFrame(opcode)\n}\n\n/**\n * Parses a Sec-WebSocket-Extensions header value.\n * @param {string} extensions\n * @returns {Map<string, string>}\n */\n// TODO(@Uzlopak, @KhafraDev): make compliant https://datatracker.ietf.org/doc/html/rfc6455#section-9.1\nfunction parseExtensions (extensions) {\n  const position = { position: 0 }\n  const extensionList = new Map()\n\n  while (position.position < extensions.length) {\n    const pair = collectASequenceOfCodePointsFast(';', extensions, position)\n    const [name, value = ''] = pair.split('=', 2)\n\n    extensionList.set(\n      removeHTTPWhitespace(name, true, false),\n      removeHTTPWhitespace(value, false, true)\n    )\n\n    position.position++\n  }\n\n  return extensionList\n}\n\n/**\n * @see https://www.rfc-editor.org/rfc/rfc7692#section-7.1.2.2\n * @description \"client-max-window-bits = 1*DIGIT\"\n * @param {string} value\n * @returns {boolean}\n */\nfunction isValidClientWindowBits (value) {\n  // Must have at least one character\n  if (value.length === 0) {\n    return false\n  }\n\n  // Check all characters are ASCII digits\n  for (let i = 0; i < value.length; i++) {\n    const byte = value.charCodeAt(i)\n\n    if (byte < 0x30 || byte > 0x39) {\n      return false\n    }\n  }\n\n  // Check numeric range: zlib requires windowBits in range 8-15\n  const num = Number.parseInt(value, 10)\n  return num >= 8 && num <= 15\n}\n\n/**\n * @see https://whatpr.org/websockets/48/7b748d3...d5570f3.html#get-a-url-record\n * @param {string} url\n * @param {string} [baseURL]\n */\nfunction getURLRecord (url, baseURL) {\n  // 1. Let urlRecord be the result of applying the URL parser to url with baseURL .\n  // 2. If urlRecord is failure, then throw a \" SyntaxError \" DOMException .\n  let urlRecord\n\n  try {\n    urlRecord = new URL(url, baseURL)\n  } catch (e) {\n    throw new DOMException(e, 'SyntaxError')\n  }\n\n  // 3. If urlRecord \u2019s scheme is \" http \", then set urlRecord \u2019s scheme to \" ws \".\n  // 4. Otherwise, if urlRecord \u2019s scheme is \" https \", set urlRecord \u2019s scheme to \" wss \".\n  if (urlRecord.protocol === 'http:') {\n    urlRecord.protocol = 'ws:'\n  } else if (urlRecord.protocol === 'https:') {\n    urlRecord.protocol = 'wss:'\n  }\n\n  // 5. If urlRecord \u2019s scheme is not \" ws \" or \" wss \", then throw a \" SyntaxError \" DOMException .\n  if (urlRecord.protocol !== 'ws:' && urlRecord.protocol !== 'wss:') {\n    throw new DOMException('expected a ws: or wss: url', 'SyntaxError')\n  }\n\n  // If urlRecord \u2019s fragment is non-null, then throw a \" SyntaxError \" DOMException .\n  if (urlRecord.hash.length || urlRecord.href.endsWith('#')) {\n    throw new DOMException('hash', 'SyntaxError')\n  }\n\n  // Return urlRecord .\n  return urlRecord\n}\n\n// https://whatpr.org/websockets/48.html#validate-close-code-and-reason\nfunction validateCloseCodeAndReason (code, reason) {\n  // 1. If code is not null, but is neither an integer equal to\n  //    1000 nor an integer in the range 3000 to 4999, inclusive,\n  //    throw an \"InvalidAccessError\" DOMException.\n  if (code !== null) {\n    if (code !== 1000 && (code < 3000 || code > 4999)) {\n      throw new DOMException('invalid code', 'InvalidAccessError')\n    }\n  }\n\n  // 2. If reason is not null, then:\n  if (reason !== null) {\n    // 2.1. Let reasonBytes be the result of UTF-8 encoding reason.\n    // 2.2. If reasonBytes is longer than 123 bytes, then throw a\n    //      \"SyntaxError\" DOMException.\n    const reasonBytesLength = Buffer.byteLength(reason)\n\n    if (reasonBytesLength > 123) {\n      throw new DOMException(`Reason must be less than 123 bytes; received ${reasonBytesLength}`, 'SyntaxError')\n    }\n  }\n}\n\n/**\n * Converts a Buffer to utf-8, even on platforms without icu.\n * @type {(buffer: Buffer) => string}\n */\nconst utf8Decode = (() => {\n  if (typeof process.versions.icu === 'string') {\n    const fatalDecoder = new TextDecoder('utf-8', { fatal: true })\n    return fatalDecoder.decode.bind(fatalDecoder)\n  }\n  return function (buffer) {\n    if (isUtf8(buffer)) {\n      return buffer.toString('utf-8')\n    }\n    throw new TypeError('Invalid utf-8 received.')\n  }\n})()\n\nmodule.exports = {\n  isConnecting,\n  isEstablished,\n  isClosing,\n  isClosed,\n  fireEvent,\n  isValidSubprotocol,\n  isValidStatusCode,\n  websocketMessageReceived,\n  utf8Decode,\n  isControlFrame,\n  isContinuationFrame,\n  isTextBinaryFrame,\n  isValidOpcode,\n  parseExtensions,\n  isValidClientWindowBits,\n  toArrayBuffer,\n  getURLRecord,\n  validateCloseCodeAndReason\n}\n", "'use strict'\n\nconst { runtimeFeatures } = require('../../util/runtime-features')\nconst { maxUnsigned16Bit, opcodes } = require('./constants')\n\nconst BUFFER_SIZE = 8 * 1024\n\nlet buffer = null\nlet bufIdx = BUFFER_SIZE\n\nconst randomFillSync = runtimeFeatures.has('crypto')\n  ? require('node:crypto').randomFillSync\n  // not full compatibility, but minimum.\n  : function randomFillSync (buffer, _offset, _size) {\n    for (let i = 0; i < buffer.length; ++i) {\n      buffer[i] = Math.random() * 255 | 0\n    }\n    return buffer\n  }\n\nfunction generateMask () {\n  if (bufIdx === BUFFER_SIZE) {\n    bufIdx = 0\n    randomFillSync((buffer ??= Buffer.allocUnsafeSlow(BUFFER_SIZE)), 0, BUFFER_SIZE)\n  }\n  return [buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++]]\n}\n\nclass WebsocketFrameSend {\n  /**\n   * @param {Buffer|undefined} data\n   */\n  constructor (data) {\n    this.frameData = data\n  }\n\n  createFrame (opcode) {\n    const frameData = this.frameData\n    const maskKey = generateMask()\n    const bodyLength = frameData?.byteLength ?? 0\n\n    /** @type {number} */\n    let payloadLength = bodyLength // 0-125\n    let offset = 6\n\n    if (bodyLength > maxUnsigned16Bit) {\n      offset += 8 // payload length is next 8 bytes\n      payloadLength = 127\n    } else if (bodyLength > 125) {\n      offset += 2 // payload length is next 2 bytes\n      payloadLength = 126\n    }\n\n    const buffer = Buffer.allocUnsafe(bodyLength + offset)\n\n    // Clear first 2 bytes, everything else is overwritten\n    buffer[0] = buffer[1] = 0\n    buffer[0] |= 0x80 // FIN\n    buffer[0] = (buffer[0] & 0xF0) + opcode // opcode\n\n    /*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> */\n    buffer[offset - 4] = maskKey[0]\n    buffer[offset - 3] = maskKey[1]\n    buffer[offset - 2] = maskKey[2]\n    buffer[offset - 1] = maskKey[3]\n\n    buffer[1] = payloadLength\n\n    if (payloadLength === 126) {\n      buffer.writeUInt16BE(bodyLength, 2)\n    } else if (payloadLength === 127) {\n      // Clear extended payload length\n      buffer[2] = buffer[3] = 0\n      buffer.writeUIntBE(bodyLength, 4, 6)\n    }\n\n    buffer[1] |= 0x80 // MASK\n\n    // mask body\n    for (let i = 0; i < bodyLength; ++i) {\n      buffer[offset + i] = frameData[i] ^ maskKey[i & 3]\n    }\n\n    return buffer\n  }\n\n  /**\n   * @param {Uint8Array} buffer\n   */\n  static createFastTextFrame (buffer) {\n    const maskKey = generateMask()\n\n    const bodyLength = buffer.length\n\n    // mask body\n    for (let i = 0; i < bodyLength; ++i) {\n      buffer[i] ^= maskKey[i & 3]\n    }\n\n    let payloadLength = bodyLength\n    let offset = 6\n\n    if (bodyLength > maxUnsigned16Bit) {\n      offset += 8 // payload length is next 8 bytes\n      payloadLength = 127\n    } else if (bodyLength > 125) {\n      offset += 2 // payload length is next 2 bytes\n      payloadLength = 126\n    }\n    const head = Buffer.allocUnsafeSlow(offset)\n\n    head[0] = 0x80 /* FIN */ | opcodes.TEXT /* opcode TEXT */\n    head[1] = payloadLength | 0x80 /* MASK */\n    head[offset - 4] = maskKey[0]\n    head[offset - 3] = maskKey[1]\n    head[offset - 2] = maskKey[2]\n    head[offset - 1] = maskKey[3]\n\n    if (payloadLength === 126) {\n      head.writeUInt16BE(bodyLength, 2)\n    } else if (payloadLength === 127) {\n      head[2] = head[3] = 0\n      head.writeUIntBE(bodyLength, 4, 6)\n    }\n\n    return [head, buffer]\n  }\n}\n\nmodule.exports = {\n  WebsocketFrameSend,\n  generateMask // for benchmark\n}\n", "'use strict'\n\nconst { uid, states, sentCloseFrameState, emptyBuffer, opcodes } = require('./constants')\nconst { parseExtensions, isClosed, isClosing, isEstablished, isConnecting, validateCloseCodeAndReason } = require('./util')\nconst { makeRequest } = require('../fetch/request')\nconst { fetching } = require('../fetch/index')\nconst { Headers, getHeadersList } = require('../fetch/headers')\nconst { getDecodeSplit } = require('../fetch/util')\nconst { WebsocketFrameSend } = require('./frame')\nconst assert = require('node:assert')\nconst { runtimeFeatures } = require('../../util/runtime-features')\n\nconst crypto = runtimeFeatures.has('crypto')\n  ? require('node:crypto')\n  : null\n\nlet warningEmitted = false\n\n/**\n * @see https://websockets.spec.whatwg.org/#concept-websocket-establish\n * @param {URL} url\n * @param {string|string[]} protocols\n * @param {import('./websocket').Handler} handler\n * @param {Partial<import('../../../types/websocket').WebSocketInit>} options\n */\nfunction establishWebSocketConnection (url, protocols, client, handler, options) {\n  // 1. Let requestURL be a copy of url, with its scheme set to \"http\", if url\u2019s\n  //    scheme is \"ws\", and to \"https\" otherwise.\n  const requestURL = url\n\n  requestURL.protocol = url.protocol === 'ws:' ? 'http:' : 'https:'\n\n  // 2. Let request be a new request, whose URL is requestURL, client is client,\n  //    service-workers mode is \"none\", referrer is \"no-referrer\", mode is\n  //    \"websocket\", credentials mode is \"include\", cache mode is \"no-store\" ,\n  //    redirect mode is \"error\", and use-URL-credentials flag is set.\n  const request = makeRequest({\n    urlList: [requestURL],\n    client,\n    serviceWorkers: 'none',\n    referrer: 'no-referrer',\n    mode: 'websocket',\n    credentials: 'include',\n    cache: 'no-store',\n    redirect: 'error',\n    useURLCredentials: true\n  })\n\n  // Note: undici extension, allow setting custom headers.\n  if (options.headers) {\n    const headersList = getHeadersList(new Headers(options.headers))\n\n    request.headersList = headersList\n  }\n\n  // 3. Append (`Upgrade`, `websocket`) to request\u2019s header list.\n  // 4. Append (`Connection`, `Upgrade`) to request\u2019s header list.\n  // Note: both of these are handled by undici currently.\n  // https://github.com/nodejs/undici/blob/68c269c4144c446f3f1220951338daef4a6b5ec4/lib/client.js#L1397\n\n  // 5. Let keyValue be a nonce consisting of a randomly selected\n  //    16-byte value that has been forgiving-base64-encoded and\n  //    isomorphic encoded.\n  const keyValue = crypto.randomBytes(16).toString('base64')\n\n  // 6. Append (`Sec-WebSocket-Key`, keyValue) to request\u2019s\n  //    header list.\n  request.headersList.append('sec-websocket-key', keyValue, true)\n\n  // 7. Append (`Sec-WebSocket-Version`, `13`) to request\u2019s\n  //    header list.\n  request.headersList.append('sec-websocket-version', '13', true)\n\n  // 8. For each protocol in protocols, combine\n  //    (`Sec-WebSocket-Protocol`, protocol) in request\u2019s header\n  //    list.\n  for (const protocol of protocols) {\n    request.headersList.append('sec-websocket-protocol', protocol, true)\n  }\n\n  // 9. Let permessageDeflate be a user-agent defined\n  //    \"permessage-deflate\" extension header value.\n  // https://github.com/mozilla/gecko-dev/blob/ce78234f5e653a5d3916813ff990f053510227bc/netwerk/protocol/websocket/WebSocketChannel.cpp#L2673\n  const permessageDeflate = 'permessage-deflate; client_max_window_bits'\n\n  // 10. Append (`Sec-WebSocket-Extensions`, permessageDeflate) to\n  //     request\u2019s header list.\n  request.headersList.append('sec-websocket-extensions', permessageDeflate, true)\n\n  // 11. Fetch request with useParallelQueue set to true, and\n  //     processResponse given response being these steps:\n  const controller = fetching({\n    request,\n    useParallelQueue: true,\n    dispatcher: options.dispatcher,\n    processResponse (response) {\n      // 1. If response is a network error or its status is not 101,\n      //    fail the WebSocket connection.\n      // if (response.type === 'error' || ((response.socket?.session != null && response.status !== 200) && response.status !== 101)) {\n      if (response.type === 'error' || response.status !== 101) {\n        // The presence of a session property on the socket indicates HTTP2\n        // HTTP1\n        if (response.socket?.session == null) {\n          failWebsocketConnection(handler, 1002, 'Received network error or non-101 status code.', response.error)\n          return\n        }\n\n        // HTTP2\n        if (response.status !== 200) {\n          failWebsocketConnection(handler, 1002, 'Received network error or non-200 status code.', response.error)\n          return\n        }\n      }\n\n      if (warningEmitted === false && response.socket?.session != null) {\n        process.emitWarning('WebSocket over HTTP2 is experimental, and subject to change.', 'ExperimentalWarning')\n        warningEmitted = true\n      }\n\n      // 2. If protocols is not the empty list and extracting header\n      //    list values given `Sec-WebSocket-Protocol` and response\u2019s\n      //    header list results in null, failure, or the empty byte\n      //    sequence, then fail the WebSocket connection.\n      if (protocols.length !== 0 && !response.headersList.get('Sec-WebSocket-Protocol')) {\n        failWebsocketConnection(handler, 1002, 'Server did not respond with sent protocols.')\n        return\n      }\n\n      // 3. Follow the requirements stated step 2 to step 6, inclusive,\n      //    of the last set of steps in section 4.1 of The WebSocket\n      //    Protocol to validate response. This either results in fail\n      //    the WebSocket connection or the WebSocket connection is\n      //    established.\n\n      // 2. If the response lacks an |Upgrade| header field or the |Upgrade|\n      //    header field contains a value that is not an ASCII case-\n      //    insensitive match for the value \"websocket\", the client MUST\n      //    _Fail the WebSocket Connection_.\n      //    For H2, no upgrade header is expected.\n      if (response.socket.session == null && response.headersList.get('Upgrade')?.toLowerCase() !== 'websocket') {\n        failWebsocketConnection(handler, 1002, 'Server did not set Upgrade header to \"websocket\".')\n        return\n      }\n\n      // 3. If the response lacks a |Connection| header field or the\n      //    |Connection| header field doesn't contain a token that is an\n      //    ASCII case-insensitive match for the value \"Upgrade\", the client\n      //    MUST _Fail the WebSocket Connection_.\n      //    For H2, no connection header is expected.\n      if (response.socket.session == null && response.headersList.get('Connection')?.toLowerCase() !== 'upgrade') {\n        failWebsocketConnection(handler, 1002, 'Server did not set Connection header to \"upgrade\".')\n        return\n      }\n\n      // 4. If the response lacks a |Sec-WebSocket-Accept| header field or\n      //    the |Sec-WebSocket-Accept| contains a value other than the\n      //    base64-encoded SHA-1 of the concatenation of the |Sec-WebSocket-\n      //    Key| (as a string, not base64-decoded) with the string \"258EAFA5-\n      //    E914-47DA-95CA-C5AB0DC85B11\" but ignoring any leading and\n      //    trailing whitespace, the client MUST _Fail the WebSocket\n      //    Connection_.\n      const secWSAccept = response.headersList.get('Sec-WebSocket-Accept')\n      const digest = crypto.hash('sha1', keyValue + uid, 'base64')\n      if (secWSAccept !== digest) {\n        failWebsocketConnection(handler, 1002, 'Incorrect hash received in Sec-WebSocket-Accept header.')\n        return\n      }\n\n      // 5. If the response includes a |Sec-WebSocket-Extensions| header\n      //    field and this header field indicates the use of an extension\n      //    that was not present in the client's handshake (the server has\n      //    indicated an extension not requested by the client), the client\n      //    MUST _Fail the WebSocket Connection_.  (The parsing of this\n      //    header field to determine which extensions are requested is\n      //    discussed in Section 9.1.)\n      const secExtension = response.headersList.get('Sec-WebSocket-Extensions')\n      let extensions\n\n      if (secExtension !== null) {\n        extensions = parseExtensions(secExtension)\n\n        if (!extensions.has('permessage-deflate')) {\n          failWebsocketConnection(handler, 1002, 'Sec-WebSocket-Extensions header does not match.')\n          return\n        }\n      }\n\n      // 6. If the response includes a |Sec-WebSocket-Protocol| header field\n      //    and this header field indicates the use of a subprotocol that was\n      //    not present in the client's handshake (the server has indicated a\n      //    subprotocol not requested by the client), the client MUST _Fail\n      //    the WebSocket Connection_.\n      const secProtocol = response.headersList.get('Sec-WebSocket-Protocol')\n\n      if (secProtocol !== null) {\n        const requestProtocols = getDecodeSplit('sec-websocket-protocol', request.headersList)\n\n        // The client can request that the server use a specific subprotocol by\n        // including the |Sec-WebSocket-Protocol| field in its handshake.  If it\n        // is specified, the server needs to include the same field and one of\n        // the selected subprotocol values in its response for the connection to\n        // be established.\n        if (requestProtocols === null || !requestProtocols.includes(secProtocol)) {\n          failWebsocketConnection(handler, 1002, 'Protocol was not set in the opening handshake.')\n          return\n        }\n      }\n\n      response.socket.on('data', handler.onSocketData)\n      response.socket.on('close', handler.onSocketClose)\n      response.socket.on('error', handler.onSocketError)\n\n      handler.wasEverConnected = true\n      handler.onConnectionEstablished(response, extensions)\n    }\n  })\n\n  return controller\n}\n\n/**\n * @see https://whatpr.org/websockets/48.html#close-the-websocket\n * @param {import('./websocket').Handler} object\n * @param {number} [code=null]\n * @param {string} [reason='']\n */\nfunction closeWebSocketConnection (object, code, reason, validate = false) {\n  // 1. If code was not supplied, let code be null.\n  code ??= null\n\n  // 2. If reason was not supplied, let reason be the empty string.\n  reason ??= ''\n\n  // 3. Validate close code and reason with code and reason.\n  if (validate) validateCloseCodeAndReason(code, reason)\n\n  // 4. Run the first matching steps from the following list:\n  //     - If object\u2019s ready state is CLOSING (2) or CLOSED (3)\n  //     - If the WebSocket connection is not yet established [WSP]\n  //     - If the WebSocket closing handshake has not yet been started [WSP]\n  //     - Otherwise\n  if (isClosed(object.readyState) || isClosing(object.readyState)) {\n    // Do nothing.\n  } else if (!isEstablished(object.readyState)) {\n    // Fail the WebSocket connection and set object\u2019s ready state to CLOSING (2). [WSP]\n    failWebsocketConnection(object)\n    object.readyState = states.CLOSING\n  } else if (!object.closeState.has(sentCloseFrameState.SENT) && !object.closeState.has(sentCloseFrameState.RECEIVED)) {\n    // Upon either sending or receiving a Close control frame, it is said\n    // that _The WebSocket Closing Handshake is Started_ and that the\n    // WebSocket connection is in the CLOSING state.\n\n    const frame = new WebsocketFrameSend()\n\n    // If neither code nor reason is present, the WebSocket Close\n    // message must not have a body.\n\n    // If code is present, then the status code to use in the\n    // WebSocket Close message must be the integer given by code.\n    // If code is null and reason is the empty string, the WebSocket Close frame must not have a body.\n    // If reason is non-empty but code is null, then set code to 1000 (\"Normal Closure\").\n    if (reason.length !== 0 && code === null) {\n      code = 1000\n    }\n\n    // If code is set, then the status code to use in the WebSocket Close frame must be the integer given by code.\n    assert(code === null || Number.isInteger(code))\n\n    if (code === null && reason.length === 0) {\n      frame.frameData = emptyBuffer\n    } else if (code !== null && reason === null) {\n      frame.frameData = Buffer.allocUnsafe(2)\n      frame.frameData.writeUInt16BE(code, 0)\n    } else if (code !== null && reason !== null) {\n      // If reason is also present, then reasonBytes must be\n      // provided in the Close message after the status code.\n      frame.frameData = Buffer.allocUnsafe(2 + Buffer.byteLength(reason))\n      frame.frameData.writeUInt16BE(code, 0)\n      // the body MAY contain UTF-8-encoded data with value /reason/\n      frame.frameData.write(reason, 2, 'utf-8')\n    } else {\n      frame.frameData = emptyBuffer\n    }\n\n    object.socket.write(frame.createFrame(opcodes.CLOSE))\n\n    object.closeState.add(sentCloseFrameState.SENT)\n\n    // Upon either sending or receiving a Close control frame, it is said\n    // that _The WebSocket Closing Handshake is Started_ and that the\n    // WebSocket connection is in the CLOSING state.\n    object.readyState = states.CLOSING\n  } else {\n    // Set object\u2019s ready state to CLOSING (2).\n    object.readyState = states.CLOSING\n  }\n}\n\n/**\n * @param {import('./websocket').Handler} handler\n * @param {number} code\n * @param {string|undefined} reason\n * @param {unknown} cause\n * @returns {void}\n */\nfunction failWebsocketConnection (handler, code, reason, cause) {\n  // If _The WebSocket Connection is Established_ prior to the point where\n  // the endpoint is required to _Fail the WebSocket Connection_, the\n  // endpoint SHOULD send a Close frame with an appropriate status code\n  // (Section 7.4) before proceeding to _Close the WebSocket Connection_.\n  if (isEstablished(handler.readyState)) {\n    closeWebSocketConnection(handler, code, reason, false)\n  }\n\n  handler.controller.abort()\n\n  if (isConnecting(handler.readyState)) {\n    // If the connection was not established, we must still emit an 'error' and 'close' events\n    handler.onSocketClose()\n  } else if (handler.socket?.destroyed === false) {\n    handler.socket.destroy()\n  }\n}\n\nmodule.exports = {\n  establishWebSocketConnection,\n  failWebsocketConnection,\n  closeWebSocketConnection\n}\n", "'use strict'\n\nconst { createInflateRaw, Z_DEFAULT_WINDOWBITS } = require('node:zlib')\nconst { isValidClientWindowBits } = require('./util')\nconst { MessageSizeExceededError } = require('../../core/errors')\n\nconst tail = Buffer.from([0x00, 0x00, 0xff, 0xff])\nconst kBuffer = Symbol('kBuffer')\nconst kLength = Symbol('kLength')\n\nclass PerMessageDeflate {\n  /** @type {import('node:zlib').InflateRaw} */\n  #inflate\n\n  #options = {}\n\n  #maxPayloadSize = 0\n\n  /**\n   * @param {Map<string, string>} extensions\n   */\n  constructor (extensions, options) {\n    this.#options.serverNoContextTakeover = extensions.has('server_no_context_takeover')\n    this.#options.serverMaxWindowBits = extensions.get('server_max_window_bits')\n\n    this.#maxPayloadSize = options.maxPayloadSize\n  }\n\n  /**\n   * Decompress a compressed payload.\n   * @param {Buffer} chunk Compressed data\n   * @param {boolean} fin Final fragment flag\n   * @param {Function} callback Callback function\n   */\n  decompress (chunk, fin, callback) {\n    // An endpoint uses the following algorithm to decompress a message.\n    // 1.  Append 4 octets of 0x00 0x00 0xff 0xff to the tail end of the\n    //     payload of the message.\n    // 2.  Decompress the resulting data using DEFLATE.\n    if (!this.#inflate) {\n      let windowBits = Z_DEFAULT_WINDOWBITS\n\n      if (this.#options.serverMaxWindowBits) { // empty values default to Z_DEFAULT_WINDOWBITS\n        if (!isValidClientWindowBits(this.#options.serverMaxWindowBits)) {\n          callback(new Error('Invalid server_max_window_bits'))\n          return\n        }\n\n        windowBits = Number.parseInt(this.#options.serverMaxWindowBits)\n      }\n\n      try {\n        this.#inflate = createInflateRaw({ windowBits })\n      } catch (err) {\n        callback(err)\n        return\n      }\n      this.#inflate[kBuffer] = []\n      this.#inflate[kLength] = 0\n\n      this.#inflate.on('data', (data) => {\n        this.#inflate[kLength] += data.length\n\n        if (this.#maxPayloadSize > 0 && this.#inflate[kLength] > this.#maxPayloadSize) {\n          callback(new MessageSizeExceededError())\n          // The inflater may still hold buffered input that can emit a late\n          // zlib error. Remove the data listener, then deterministically stop\n          // the stream so a subsequent 'error' cannot fire without a listener\n          // (which would terminate the process as an unhandled error event).\n          this.#inflate.removeAllListeners()\n          this.#inflate.destroy()\n          this.#inflate = null\n          return\n        }\n\n        this.#inflate[kBuffer].push(data)\n      })\n\n      this.#inflate.on('error', (err) => {\n        this.#inflate = null\n        callback(err)\n      })\n    }\n\n    this.#inflate.write(chunk)\n    if (fin) {\n      this.#inflate.write(tail)\n    }\n\n    this.#inflate.flush(() => {\n      if (!this.#inflate) {\n        return\n      }\n\n      const full = Buffer.concat(this.#inflate[kBuffer], this.#inflate[kLength])\n\n      this.#inflate[kBuffer].length = 0\n      this.#inflate[kLength] = 0\n\n      callback(null, full)\n    })\n  }\n}\n\nmodule.exports = { PerMessageDeflate }\n", "'use strict'\n\nconst { Writable } = require('node:stream')\nconst assert = require('node:assert')\nconst { parserStates, opcodes, states, emptyBuffer, sentCloseFrameState } = require('./constants')\nconst {\n  isValidStatusCode,\n  isValidOpcode,\n  websocketMessageReceived,\n  utf8Decode,\n  isControlFrame,\n  isTextBinaryFrame,\n  isContinuationFrame\n} = require('./util')\nconst { failWebsocketConnection } = require('./connection')\nconst { WebsocketFrameSend } = require('./frame')\nconst { PerMessageDeflate } = require('./permessage-deflate')\nconst { MessageSizeExceededError } = require('../../core/errors')\n\n// This code was influenced by ws released under the MIT license.\n// Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com>\n// Copyright (c) 2013 Arnout Kazemier and contributors\n// Copyright (c) 2016 Luigi Pinca and contributors\n\nclass ByteParser extends Writable {\n  #buffers = []\n  #fragmentsBytes = 0\n  #byteOffset = 0\n  #loop = false\n\n  #state = parserStates.INFO\n\n  #info = {}\n  #fragments = []\n\n  /** @type {Map<string, PerMessageDeflate>} */\n  #extensions\n\n  /** @type {import('./websocket').Handler} */\n  #handler\n\n  /** @type {number} */\n  #maxFragments\n\n  /** @type {number} */\n  #maxPayloadSize\n\n  /**\n   * @param {import('./websocket').Handler} handler\n   * @param {Map<string, string>|null} extensions\n   * @param {{ maxFragments?: number, maxPayloadSize?: number }} [options]\n   */\n  constructor (handler, extensions, options = {}) {\n    super()\n\n    this.#handler = handler\n    this.#extensions = extensions == null ? new Map() : extensions\n    this.#maxFragments = options.maxFragments ?? 0\n    this.#maxPayloadSize = options.maxPayloadSize ?? 0\n\n    if (this.#extensions.has('permessage-deflate')) {\n      this.#extensions.set('permessage-deflate', new PerMessageDeflate(extensions, options))\n    }\n  }\n\n  /**\n   * @param {Buffer} chunk\n   * @param {() => void} callback\n   */\n  _write (chunk, _, callback) {\n    this.#buffers.push(chunk)\n    this.#byteOffset += chunk.length\n    this.#loop = true\n\n    this.run(callback)\n  }\n\n  #validatePayloadLength () {\n    if (\n      this.#maxPayloadSize > 0 &&\n      !isControlFrame(this.#info.opcode) &&\n      this.#info.payloadLength + this.#fragmentsBytes > this.#maxPayloadSize\n    ) {\n      failWebsocketConnection(this.#handler, 1009, 'Payload size exceeds maximum allowed size')\n      return false\n    }\n\n    return true\n  }\n\n  /**\n   * Runs whenever a new chunk is received.\n   * Callback is called whenever there are no more chunks buffering,\n   * or not enough bytes are buffered to parse.\n   */\n  run (callback) {\n    while (this.#loop) {\n      if (this.#state === parserStates.INFO) {\n        // If there aren't enough bytes to parse the payload length, etc.\n        if (this.#byteOffset < 2) {\n          return callback()\n        }\n\n        const buffer = this.consume(2)\n        const fin = (buffer[0] & 0x80) !== 0\n        const opcode = buffer[0] & 0x0F\n        const masked = (buffer[1] & 0x80) === 0x80\n\n        const fragmented = !fin && opcode !== opcodes.CONTINUATION\n        const payloadLength = buffer[1] & 0x7F\n\n        const rsv1 = buffer[0] & 0x40\n        const rsv2 = buffer[0] & 0x20\n        const rsv3 = buffer[0] & 0x10\n\n        if (!isValidOpcode(opcode)) {\n          failWebsocketConnection(this.#handler, 1002, 'Invalid opcode received')\n          return callback()\n        }\n\n        if (masked) {\n          failWebsocketConnection(this.#handler, 1002, 'Frame cannot be masked')\n          return callback()\n        }\n\n        // MUST be 0 unless an extension is negotiated that defines meanings\n        // for non-zero values.  If a nonzero value is received and none of\n        // the negotiated extensions defines the meaning of such a nonzero\n        // value, the receiving endpoint MUST _Fail the WebSocket\n        // Connection_.\n        // This document allocates the RSV1 bit of the WebSocket header for\n        // PMCEs and calls the bit the \"Per-Message Compressed\" bit.  On a\n        // WebSocket connection where a PMCE is in use, this bit indicates\n        // whether a message is compressed or not.\n        if (rsv1 !== 0 && !this.#extensions.has('permessage-deflate')) {\n          failWebsocketConnection(this.#handler, 1002, 'Expected RSV1 to be clear.')\n          return\n        }\n\n        if (rsv2 !== 0 || rsv3 !== 0) {\n          failWebsocketConnection(this.#handler, 1002, 'RSV1, RSV2, RSV3 must be clear')\n          return\n        }\n\n        if (fragmented && !isTextBinaryFrame(opcode)) {\n          // Only text and binary frames can be fragmented\n          failWebsocketConnection(this.#handler, 1002, 'Invalid frame type was fragmented.')\n          return\n        }\n\n        // If we are already parsing a text/binary frame and do not receive either\n        // a continuation frame or close frame, fail the connection.\n        if (isTextBinaryFrame(opcode) && this.#fragments.length > 0) {\n          failWebsocketConnection(this.#handler, 1002, 'Expected continuation frame')\n          return\n        }\n\n        if (this.#info.fragmented && fragmented) {\n          // A fragmented frame can't be fragmented itself\n          failWebsocketConnection(this.#handler, 1002, 'Fragmented frame exceeded 125 bytes.')\n          return\n        }\n\n        // \"All control frames MUST have a payload length of 125 bytes or less\n        // and MUST NOT be fragmented.\"\n        if ((payloadLength > 125 || fragmented) && isControlFrame(opcode)) {\n          failWebsocketConnection(this.#handler, 1002, 'Control frame either too large or fragmented')\n          return\n        }\n\n        if (isContinuationFrame(opcode) && this.#fragments.length === 0 && !this.#info.compressed) {\n          failWebsocketConnection(this.#handler, 1002, 'Unexpected continuation frame')\n          return\n        }\n\n        if (payloadLength <= 125) {\n          this.#info.payloadLength = payloadLength\n          this.#state = parserStates.READ_DATA\n\n          if (!this.#validatePayloadLength()) {\n            return\n          }\n        } else if (payloadLength === 126) {\n          this.#state = parserStates.PAYLOADLENGTH_16\n        } else if (payloadLength === 127) {\n          this.#state = parserStates.PAYLOADLENGTH_64\n        }\n\n        if (isTextBinaryFrame(opcode)) {\n          this.#info.binaryType = opcode\n          this.#info.compressed = rsv1 !== 0\n        }\n\n        this.#info.opcode = opcode\n        this.#info.masked = masked\n        this.#info.fin = fin\n        this.#info.fragmented = fragmented\n      } else if (this.#state === parserStates.PAYLOADLENGTH_16) {\n        if (this.#byteOffset < 2) {\n          return callback()\n        }\n\n        const buffer = this.consume(2)\n\n        this.#info.payloadLength = buffer.readUInt16BE(0)\n        this.#state = parserStates.READ_DATA\n\n        if (!this.#validatePayloadLength()) {\n          return\n        }\n      } else if (this.#state === parserStates.PAYLOADLENGTH_64) {\n        if (this.#byteOffset < 8) {\n          return callback()\n        }\n\n        const buffer = this.consume(8)\n        const upper = buffer.readUInt32BE(0)\n        const lower = buffer.readUInt32BE(4)\n\n        // 2^31 is the maximum bytes an arraybuffer can contain\n        // on 32-bit systems. Although, on 64-bit systems, this is\n        // 2^53-1 bytes.\n        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Invalid_array_length\n        // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/common/globals.h;drc=1946212ac0100668f14eb9e2843bdd846e510a1e;bpv=1;bpt=1;l=1275\n        // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/objects/js-array-buffer.h;l=34;drc=1946212ac0100668f14eb9e2843bdd846e510a1e\n        if (upper !== 0 || lower > 2 ** 31 - 1) {\n          failWebsocketConnection(this.#handler, 1009, 'Received payload length > 2^31 bytes.')\n          return\n        }\n\n        this.#info.payloadLength = lower\n        this.#state = parserStates.READ_DATA\n\n        if (!this.#validatePayloadLength()) {\n          return\n        }\n      } else if (this.#state === parserStates.READ_DATA) {\n        if (this.#byteOffset < this.#info.payloadLength) {\n          return callback()\n        }\n\n        const body = this.consume(this.#info.payloadLength)\n\n        if (isControlFrame(this.#info.opcode)) {\n          this.#loop = this.parseControlFrame(body)\n          this.#state = parserStates.INFO\n        } else {\n          if (!this.#info.compressed) {\n            if (!this.writeFragments(body)) {\n              return\n            }\n\n            // If the frame is not fragmented, a message has been received.\n            // If the frame is fragmented, it will terminate with a fin bit set\n            // and an opcode of 0 (continuation), therefore we handle that when\n            // parsing continuation frames, not here.\n            if (!this.#info.fragmented && this.#info.fin) {\n              websocketMessageReceived(this.#handler, this.#info.binaryType, this.consumeFragments())\n            }\n\n            this.#state = parserStates.INFO\n          } else {\n            this.#extensions.get('permessage-deflate').decompress(\n              body,\n              this.#info.fin,\n              (error, data) => {\n                if (error) {\n                  const code = error instanceof MessageSizeExceededError ? 1009 : 1007\n                  failWebsocketConnection(this.#handler, code, error.message)\n                  return\n                }\n\n                if (!this.writeFragments(data)) {\n                  return\n                }\n\n                // Check cumulative fragment size\n                if (this.#maxPayloadSize > 0 && this.#fragmentsBytes > this.#maxPayloadSize) {\n                  failWebsocketConnection(this.#handler, 1009, new MessageSizeExceededError().message)\n                  return\n                }\n\n                if (!this.#info.fin) {\n                  this.#state = parserStates.INFO\n                  this.#loop = true\n                  this.run(callback)\n                  return\n                }\n\n                websocketMessageReceived(this.#handler, this.#info.binaryType, this.consumeFragments())\n\n                this.#loop = true\n                this.#state = parserStates.INFO\n                this.run(callback)\n              },\n              this.#fragmentsBytes\n            )\n\n            this.#loop = false\n            break\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * Take n bytes from the buffered Buffers\n   * @param {number} n\n   * @returns {Buffer}\n   */\n  consume (n) {\n    if (n > this.#byteOffset) {\n      throw new Error('Called consume() before buffers satiated.')\n    } else if (n === 0) {\n      return emptyBuffer\n    }\n\n    this.#byteOffset -= n\n\n    const first = this.#buffers[0]\n\n    if (first.length > n) {\n      // replace with remaining buffer\n      this.#buffers[0] = first.subarray(n, first.length)\n      return first.subarray(0, n)\n    } else if (first.length === n) {\n      // prefect match\n      return this.#buffers.shift()\n    } else {\n      let offset = 0\n      // If Buffer.allocUnsafe is used, extra copies will be made because the offset is non-zero.\n      const buffer = Buffer.allocUnsafeSlow(n)\n      while (offset !== n) {\n        const next = this.#buffers[0]\n        const length = next.length\n\n        if (length + offset === n) {\n          buffer.set(this.#buffers.shift(), offset)\n          break\n        } else if (length + offset > n) {\n          buffer.set(next.subarray(0, n - offset), offset)\n          this.#buffers[0] = next.subarray(n - offset)\n          break\n        } else {\n          buffer.set(this.#buffers.shift(), offset)\n          offset += length\n        }\n      }\n\n      return buffer\n    }\n  }\n\n  writeFragments (fragment) {\n    if (\n      this.#maxFragments > 0 &&\n      this.#fragments.length === this.#maxFragments\n    ) {\n      failWebsocketConnection(this.#handler, 1008, 'Too many message fragments')\n      return false\n    }\n\n    this.#fragmentsBytes += fragment.length\n    this.#fragments.push(fragment)\n    return true\n  }\n\n  consumeFragments () {\n    const fragments = this.#fragments\n\n    if (fragments.length === 1) {\n      // single fragment\n      this.#fragmentsBytes = 0\n      return fragments.shift()\n    }\n\n    let offset = 0\n    // If Buffer.allocUnsafe is used, extra copies will be made because the offset is non-zero.\n    const output = Buffer.allocUnsafeSlow(this.#fragmentsBytes)\n\n    for (let i = 0; i < fragments.length; ++i) {\n      const buffer = fragments[i]\n      output.set(buffer, offset)\n      offset += buffer.length\n    }\n\n    this.#fragments = []\n    this.#fragmentsBytes = 0\n\n    return output\n  }\n\n  parseCloseBody (data) {\n    assert(data.length !== 1)\n\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5\n    /** @type {number|undefined} */\n    let code\n\n    if (data.length >= 2) {\n      // _The WebSocket Connection Close Code_ is\n      // defined as the status code (Section 7.4) contained in the first Close\n      // control frame received by the application\n      code = data.readUInt16BE(0)\n    }\n\n    if (code !== undefined && !isValidStatusCode(code)) {\n      return { code: 1002, reason: 'Invalid status code', error: true }\n    }\n\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.6\n    /** @type {Buffer} */\n    let reason = data.subarray(2)\n\n    // Remove BOM\n    if (reason[0] === 0xEF && reason[1] === 0xBB && reason[2] === 0xBF) {\n      reason = reason.subarray(3)\n    }\n\n    try {\n      reason = utf8Decode(reason)\n    } catch {\n      return { code: 1007, reason: 'Invalid UTF-8', error: true }\n    }\n\n    return { code, reason, error: false }\n  }\n\n  /**\n   * Parses control frames.\n   * @param {Buffer} body\n   */\n  parseControlFrame (body) {\n    const { opcode, payloadLength } = this.#info\n\n    if (opcode === opcodes.CLOSE) {\n      if (payloadLength === 1) {\n        failWebsocketConnection(this.#handler, 1002, 'Received close frame with a 1-byte body.')\n        return false\n      }\n\n      this.#info.closeInfo = this.parseCloseBody(body)\n\n      if (this.#info.closeInfo.error) {\n        const { code, reason } = this.#info.closeInfo\n\n        failWebsocketConnection(this.#handler, code, reason)\n        return false\n      }\n\n      // Upon receiving such a frame, the other peer sends a\n      // Close frame in response, if it hasn't already sent one.\n      if (!this.#handler.closeState.has(sentCloseFrameState.SENT) && !this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n        // If an endpoint receives a Close frame and did not previously send a\n        // Close frame, the endpoint MUST send a Close frame in response.  (When\n        // sending a Close frame in response, the endpoint typically echos the\n        // status code it received.)\n        let body = emptyBuffer\n        if (this.#info.closeInfo.code) {\n          body = Buffer.allocUnsafe(2)\n          body.writeUInt16BE(this.#info.closeInfo.code, 0)\n        }\n        const closeFrame = new WebsocketFrameSend(body)\n\n        this.#handler.socket.write(closeFrame.createFrame(opcodes.CLOSE))\n        this.#handler.closeState.add(sentCloseFrameState.SENT)\n      }\n\n      // Upon either sending or receiving a Close control frame, it is said\n      // that _The WebSocket Closing Handshake is Started_ and that the\n      // WebSocket connection is in the CLOSING state.\n      this.#handler.readyState = states.CLOSING\n      this.#handler.closeState.add(sentCloseFrameState.RECEIVED)\n\n      return false\n    } else if (opcode === opcodes.PING) {\n      // Upon receipt of a Ping frame, an endpoint MUST send a Pong frame in\n      // response, unless it already received a Close frame.\n      // A Pong frame sent in response to a Ping frame must have identical\n      // \"Application data\"\n\n      if (!this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n        const frame = new WebsocketFrameSend(body)\n\n        this.#handler.socket.write(frame.createFrame(opcodes.PONG))\n\n        this.#handler.onPing(body)\n      }\n    } else if (opcode === opcodes.PONG) {\n      // A Pong frame MAY be sent unsolicited.  This serves as a\n      // unidirectional heartbeat.  A response to an unsolicited Pong frame is\n      // not expected.\n      this.#handler.onPong(body)\n    }\n\n    return true\n  }\n\n  get closingInfo () {\n    return this.#info.closeInfo\n  }\n}\n\nmodule.exports = {\n  ByteParser\n}\n", "'use strict'\n\nconst { WebsocketFrameSend } = require('./frame')\nconst { opcodes, sendHints } = require('./constants')\nconst FixedQueue = require('../../dispatcher/fixed-queue')\n\n/**\n * @typedef {object} SendQueueNode\n * @property {Promise<void> | null} promise\n * @property {((...args: any[]) => any)} callback\n * @property {Buffer | null} frame\n */\n\nclass SendQueue {\n  /**\n   * @type {FixedQueue}\n   */\n  #queue = new FixedQueue()\n\n  /**\n   * @type {boolean}\n   */\n  #running = false\n\n  /** @type {import('node:net').Socket} */\n  #socket\n\n  constructor (socket) {\n    this.#socket = socket\n  }\n\n  add (item, cb, hint) {\n    if (hint !== sendHints.blob) {\n      if (!this.#running) {\n        // TODO(@tsctx): support fast-path for string on running\n        if (hint === sendHints.text) {\n          // special fast-path for string\n          const { 0: head, 1: body } = WebsocketFrameSend.createFastTextFrame(item)\n          this.#socket.cork()\n          this.#socket.write(head)\n          this.#socket.write(body, cb)\n          this.#socket.uncork()\n        } else {\n          // direct writing\n          this.#socket.write(createFrame(item, hint), cb)\n        }\n      } else {\n        /** @type {SendQueueNode} */\n        const node = {\n          promise: null,\n          callback: cb,\n          frame: createFrame(item, hint)\n        }\n        this.#queue.push(node)\n      }\n      return\n    }\n\n    /** @type {SendQueueNode} */\n    const node = {\n      promise: item.arrayBuffer().then((ab) => {\n        node.promise = null\n        node.frame = createFrame(ab, hint)\n      }),\n      callback: cb,\n      frame: null\n    }\n\n    this.#queue.push(node)\n\n    if (!this.#running) {\n      this.#run()\n    }\n  }\n\n  async #run () {\n    this.#running = true\n    const queue = this.#queue\n    while (!queue.isEmpty()) {\n      const node = queue.shift()\n      // wait pending promise\n      if (node.promise !== null) {\n        await node.promise\n      }\n      // write\n      this.#socket.write(node.frame, node.callback)\n      // cleanup\n      node.callback = node.frame = null\n    }\n    this.#running = false\n  }\n}\n\nfunction createFrame (data, hint) {\n  return new WebsocketFrameSend(toBuffer(data, hint)).createFrame(hint === sendHints.text ? opcodes.TEXT : opcodes.BINARY)\n}\n\nfunction toBuffer (data, hint) {\n  switch (hint) {\n    case sendHints.text:\n    case sendHints.typedArray:\n      return new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\n    case sendHints.arrayBuffer:\n    case sendHints.blob:\n      return new Uint8Array(data)\n  }\n}\n\nmodule.exports = { SendQueue }\n", "'use strict'\n\nconst { isArrayBuffer } = require('node:util/types')\nconst { webidl } = require('../webidl')\nconst { URLSerializer } = require('../fetch/data-url')\nconst { environmentSettingsObject } = require('../fetch/util')\nconst { staticPropertyDescriptors, states, sentCloseFrameState, sendHints, opcodes } = require('./constants')\nconst {\n  isConnecting,\n  isEstablished,\n  isClosing,\n  isClosed,\n  isValidSubprotocol,\n  fireEvent,\n  utf8Decode,\n  toArrayBuffer,\n  getURLRecord\n} = require('./util')\nconst { establishWebSocketConnection, closeWebSocketConnection, failWebsocketConnection } = require('./connection')\nconst { ByteParser } = require('./receiver')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { getGlobalDispatcher } = require('../../global')\nconst { ErrorEvent, CloseEvent, createFastMessageEvent } = require('./events')\nconst { SendQueue } = require('./sender')\nconst { WebsocketFrameSend } = require('./frame')\nconst { channels } = require('../../core/diagnostics')\n\nfunction getSocketAddress (socket) {\n  if (typeof socket?.address === 'function') {\n    return socket.address()\n  }\n\n  if (typeof socket?.session?.socket?.address === 'function') {\n    return socket.session.socket.address()\n  }\n\n  return null\n}\n\n/**\n * @typedef {object} Handler\n * @property {(response: any, extensions?: string[]) => void} onConnectionEstablished\n * @property {(opcode: number, data: Buffer) => void} onMessage\n * @property {(error: Error) => void} onParserError\n * @property {() => void} onParserDrain\n * @property {(chunk: Buffer) => void} onSocketData\n * @property {(err: Error) => void} onSocketError\n * @property {() => void} onSocketClose\n * @property {(body: Buffer) => void} onPing\n * @property {(body: Buffer) => void} onPong\n *\n * @property {number} readyState\n * @property {import('stream').Duplex} socket\n * @property {Set<number>} closeState\n * @property {import('../fetch/index').Fetch} controller\n * @property {boolean} [wasEverConnected=false]\n */\n\n// https://websockets.spec.whatwg.org/#interface-definition\nclass WebSocket extends EventTarget {\n  #events = {\n    open: null,\n    error: null,\n    close: null,\n    message: null\n  }\n\n  #bufferedAmount = 0\n  #protocol = ''\n  #extensions = ''\n\n  /** @type {SendQueue} */\n  #sendQueue\n\n  /** @type {Handler} */\n  #handler = {\n    onConnectionEstablished: (response, extensions) => this.#onConnectionEstablished(response, extensions),\n    onMessage: (opcode, data) => this.#onMessage(opcode, data),\n    onParserError: (err) => failWebsocketConnection(this.#handler, null, err.message),\n    onParserDrain: () => this.#onParserDrain(),\n    onSocketData: (chunk) => {\n      if (!this.#parser.write(chunk)) {\n        this.#handler.socket.pause()\n      }\n    },\n    onSocketError: (err) => {\n      this.#handler.readyState = states.CLOSING\n\n      if (channels.socketError.hasSubscribers) {\n        channels.socketError.publish(err)\n      }\n\n      this.#handler.socket.destroy()\n    },\n    onSocketClose: () => this.#onSocketClose(),\n    onPing: (body) => {\n      if (channels.ping.hasSubscribers) {\n        channels.ping.publish({\n          payload: body,\n          websocket: this\n        })\n      }\n    },\n    onPong: (body) => {\n      if (channels.pong.hasSubscribers) {\n        channels.pong.publish({\n          payload: body,\n          websocket: this\n        })\n      }\n    },\n\n    readyState: states.CONNECTING,\n    socket: null,\n    closeState: new Set(),\n    controller: null,\n    wasEverConnected: false\n  }\n\n  #url\n  #binaryType\n  /** @type {import('./receiver').ByteParser} */\n  #parser\n\n  /**\n   * @param {string} url\n   * @param {string|string[]} protocols\n   */\n  constructor (url, protocols = []) {\n    super()\n\n    webidl.util.markAsUncloneable(this)\n\n    const prefix = 'WebSocket constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    const options = webidl.converters['DOMString or sequence<DOMString> or WebSocketInit'](protocols, prefix, 'options')\n\n    url = webidl.converters.USVString(url)\n    protocols = options.protocols\n\n    // 1. Let baseURL be this's relevant settings object's API base URL.\n    const baseURL = environmentSettingsObject.settingsObject.baseUrl\n\n    // 2. Let urlRecord be the result of getting a URL record given url and baseURL.\n    const urlRecord = getURLRecord(url, baseURL)\n\n    // 3. If protocols is a string, set protocols to a sequence consisting\n    //    of just that string.\n    if (typeof protocols === 'string') {\n      protocols = [protocols]\n    }\n\n    // 4. If any of the values in protocols occur more than once or otherwise\n    //    fail to match the requirements for elements that comprise the value\n    //    of `Sec-WebSocket-Protocol` fields as defined by The WebSocket\n    //    protocol, then throw a \"SyntaxError\" DOMException.\n    if (protocols.length !== new Set(protocols.map(p => p.toLowerCase())).size) {\n      throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n    }\n\n    if (protocols.length > 0 && !protocols.every(p => isValidSubprotocol(p))) {\n      throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n    }\n\n    // 5. Set this's url to urlRecord.\n    this.#url = new URL(urlRecord.href)\n\n    // 6. Let client be this's relevant settings object.\n    const client = environmentSettingsObject.settingsObject\n\n    // 7. Run this step in parallel:\n    // 7.1. Establish a WebSocket connection given urlRecord, protocols,\n    //      and client.\n    this.#handler.controller = establishWebSocketConnection(\n      urlRecord,\n      protocols,\n      client,\n      this.#handler,\n      options\n    )\n\n    // Each WebSocket object has an associated ready state, which is a\n    // number representing the state of the connection. Initially it must\n    // be CONNECTING (0).\n    this.#handler.readyState = WebSocket.CONNECTING\n\n    // The extensions attribute must initially return the empty string.\n\n    // The protocol attribute must initially return the empty string.\n\n    // Each WebSocket object has an associated binary type, which is a\n    // BinaryType. Initially it must be \"blob\".\n    this.#binaryType = 'blob'\n  }\n\n  /**\n   * @see https://websockets.spec.whatwg.org/#dom-websocket-close\n   * @param {number|undefined} code\n   * @param {string|undefined} reason\n   */\n  close (code = undefined, reason = undefined) {\n    webidl.brandCheck(this, WebSocket)\n\n    const prefix = 'WebSocket.close'\n\n    if (code !== undefined) {\n      code = webidl.converters['unsigned short'](code, prefix, 'code', webidl.attributes.Clamp)\n    }\n\n    if (reason !== undefined) {\n      reason = webidl.converters.USVString(reason)\n    }\n\n    // 1. If code is the special value \"missing\", then set code to null.\n    code ??= null\n\n    // 2. If reason is the special value \"missing\", then set reason to the empty string.\n    reason ??= ''\n\n    // 3. Close the WebSocket with this, code, and reason.\n    closeWebSocketConnection(this.#handler, code, reason, true)\n  }\n\n  /**\n   * @see https://websockets.spec.whatwg.org/#dom-websocket-send\n   * @param {NodeJS.TypedArray|ArrayBuffer|Blob|string} data\n   */\n  send (data) {\n    webidl.brandCheck(this, WebSocket)\n\n    const prefix = 'WebSocket.send'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    data = webidl.converters.WebSocketSendData(data, prefix, 'data')\n\n    // 1. If this's ready state is CONNECTING, then throw an\n    //    \"InvalidStateError\" DOMException.\n    if (isConnecting(this.#handler.readyState)) {\n      throw new DOMException('Sent before connected.', 'InvalidStateError')\n    }\n\n    // 2. Run the appropriate set of steps from the following list:\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-6.1\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-5.2\n\n    if (!isEstablished(this.#handler.readyState) || isClosing(this.#handler.readyState)) {\n      return\n    }\n\n    // If data is a string\n    if (typeof data === 'string') {\n      // If the WebSocket connection is established and the WebSocket\n      // closing handshake has not yet started, then the user agent\n      // must send a WebSocket Message comprised of the data argument\n      // using a text frame opcode; if the data cannot be sent, e.g.\n      // because it would need to be buffered but the buffer is full,\n      // the user agent must flag the WebSocket as full and then close\n      // the WebSocket connection. Any invocation of this method with a\n      // string argument that does not throw an exception must increase\n      // the bufferedAmount attribute by the number of bytes needed to\n      // express the argument as UTF-8.\n\n      const buffer = Buffer.from(data)\n\n      this.#bufferedAmount += buffer.byteLength\n      this.#sendQueue.add(buffer, () => {\n        this.#bufferedAmount -= buffer.byteLength\n      }, sendHints.text)\n    } else if (isArrayBuffer(data)) {\n      // If the WebSocket connection is established, and the WebSocket\n      // closing handshake has not yet started, then the user agent must\n      // send a WebSocket Message comprised of data using a binary frame\n      // opcode; if the data cannot be sent, e.g. because it would need\n      // to be buffered but the buffer is full, the user agent must flag\n      // the WebSocket as full and then close the WebSocket connection.\n      // The data to be sent is the data stored in the buffer described\n      // by the ArrayBuffer object. Any invocation of this method with an\n      // ArrayBuffer argument that does not throw an exception must\n      // increase the bufferedAmount attribute by the length of the\n      // ArrayBuffer in bytes.\n\n      this.#bufferedAmount += data.byteLength\n      this.#sendQueue.add(data, () => {\n        this.#bufferedAmount -= data.byteLength\n      }, sendHints.arrayBuffer)\n    } else if (ArrayBuffer.isView(data)) {\n      // If the WebSocket connection is established, and the WebSocket\n      // closing handshake has not yet started, then the user agent must\n      // send a WebSocket Message comprised of data using a binary frame\n      // opcode; if the data cannot be sent, e.g. because it would need to\n      // be buffered but the buffer is full, the user agent must flag the\n      // WebSocket as full and then close the WebSocket connection. The\n      // data to be sent is the data stored in the section of the buffer\n      // described by the ArrayBuffer object that data references. Any\n      // invocation of this method with this kind of argument that does\n      // not throw an exception must increase the bufferedAmount attribute\n      // by the length of data\u2019s buffer in bytes.\n\n      this.#bufferedAmount += data.byteLength\n      this.#sendQueue.add(data, () => {\n        this.#bufferedAmount -= data.byteLength\n      }, sendHints.typedArray)\n    } else if (webidl.is.Blob(data)) {\n      // If the WebSocket connection is established, and the WebSocket\n      // closing handshake has not yet started, then the user agent must\n      // send a WebSocket Message comprised of data using a binary frame\n      // opcode; if the data cannot be sent, e.g. because it would need to\n      // be buffered but the buffer is full, the user agent must flag the\n      // WebSocket as full and then close the WebSocket connection. The data\n      // to be sent is the raw data represented by the Blob object. Any\n      // invocation of this method with a Blob argument that does not throw\n      // an exception must increase the bufferedAmount attribute by the size\n      // of the Blob object\u2019s raw data, in bytes.\n\n      this.#bufferedAmount += data.size\n      this.#sendQueue.add(data, () => {\n        this.#bufferedAmount -= data.size\n      }, sendHints.blob)\n    }\n  }\n\n  get readyState () {\n    webidl.brandCheck(this, WebSocket)\n\n    // The readyState getter steps are to return this's ready state.\n    return this.#handler.readyState\n  }\n\n  get bufferedAmount () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#bufferedAmount\n  }\n\n  get url () {\n    webidl.brandCheck(this, WebSocket)\n\n    // The url getter steps are to return this's url, serialized.\n    return URLSerializer(this.#url)\n  }\n\n  get extensions () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#extensions\n  }\n\n  get protocol () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#protocol\n  }\n\n  get onopen () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#events.open\n  }\n\n  set onopen (fn) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (this.#events.open) {\n      this.removeEventListener('open', this.#events.open)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('open', listener)\n      this.#events.open = fn\n    } else {\n      this.#events.open = null\n    }\n  }\n\n  get onerror () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#events.error\n  }\n\n  set onerror (fn) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (this.#events.error) {\n      this.removeEventListener('error', this.#events.error)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('error', listener)\n      this.#events.error = fn\n    } else {\n      this.#events.error = null\n    }\n  }\n\n  get onclose () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#events.close\n  }\n\n  set onclose (fn) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (this.#events.close) {\n      this.removeEventListener('close', this.#events.close)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('close', listener)\n      this.#events.close = fn\n    } else {\n      this.#events.close = null\n    }\n  }\n\n  get onmessage () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#events.message\n  }\n\n  set onmessage (fn) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (this.#events.message) {\n      this.removeEventListener('message', this.#events.message)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('message', listener)\n      this.#events.message = fn\n    } else {\n      this.#events.message = null\n    }\n  }\n\n  get binaryType () {\n    webidl.brandCheck(this, WebSocket)\n\n    return this.#binaryType\n  }\n\n  set binaryType (type) {\n    webidl.brandCheck(this, WebSocket)\n\n    if (type !== 'blob' && type !== 'arraybuffer') {\n      this.#binaryType = 'blob'\n    } else {\n      this.#binaryType = type\n    }\n  }\n\n  /**\n   * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol\n   */\n  #onConnectionEstablished (response, parsedExtensions) {\n    // processResponse is called when the \"response's header list has been received and initialized.\"\n    // once this happens, the connection is open\n    this.#handler.socket = response.socket\n\n    const webSocketOptions = this.#handler.controller.dispatcher?.webSocketOptions\n    const maxFragments = webSocketOptions?.maxFragments\n    const maxPayloadSize = webSocketOptions?.maxPayloadSize\n\n    const parser = new ByteParser(this.#handler, parsedExtensions, {\n      maxFragments,\n      maxPayloadSize\n    })\n    parser.on('drain', () => this.#handler.onParserDrain())\n    parser.on('error', (err) => this.#handler.onParserError(err))\n\n    this.#parser = parser\n    this.#sendQueue = new SendQueue(response.socket)\n\n    // 1. Change the ready state to OPEN (1).\n    this.#handler.readyState = states.OPEN\n\n    // 2. Change the extensions attribute\u2019s value to the extensions in use, if\n    //    it is not the null value.\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-9.1\n    const extensions = response.headersList.get('sec-websocket-extensions')\n\n    if (extensions !== null) {\n      this.#extensions = extensions\n    }\n\n    // 3. Change the protocol attribute\u2019s value to the subprotocol in use, if\n    //    it is not the null value.\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-1.9\n    const protocol = response.headersList.get('sec-websocket-protocol')\n\n    if (protocol !== null) {\n      this.#protocol = protocol\n    }\n\n    // 4. Fire an event named open at the WebSocket object.\n    fireEvent('open', this)\n\n    if (channels.open.hasSubscribers) {\n      // Convert headers to a plain object for the event\n      const headers = response.headersList.entries\n      channels.open.publish({\n        address: getSocketAddress(response.socket),\n        protocol: this.#protocol,\n        extensions: this.#extensions,\n        websocket: this,\n        handshakeResponse: {\n          status: response.status,\n          statusText: response.statusText,\n          headers\n        }\n      })\n    }\n  }\n\n  #onMessage (type, data) {\n    // 1. If ready state is not OPEN (1), then return.\n    if (this.#handler.readyState !== states.OPEN) {\n      return\n    }\n\n    // 2. Let dataForEvent be determined by switching on type and binary type:\n    let dataForEvent\n\n    if (type === opcodes.TEXT) {\n      // -> type indicates that the data is Text\n      //      a new DOMString containing data\n      try {\n        dataForEvent = utf8Decode(data)\n      } catch {\n        failWebsocketConnection(this.#handler, 1007, 'Received invalid UTF-8 in text frame.')\n        return\n      }\n    } else if (type === opcodes.BINARY) {\n      if (this.#binaryType === 'blob') {\n        // -> type indicates that the data is Binary and binary type is \"blob\"\n        //      a new Blob object, created in the relevant Realm of the WebSocket\n        //      object, that represents data as its raw data\n        dataForEvent = new Blob([data])\n      } else {\n        // -> type indicates that the data is Binary and binary type is \"arraybuffer\"\n        //      a new ArrayBuffer object, created in the relevant Realm of the\n        //      WebSocket object, whose contents are data\n        dataForEvent = toArrayBuffer(data)\n      }\n    }\n\n    // 3. Fire an event named message at the WebSocket object, using MessageEvent,\n    //    with the origin attribute initialized to the serialization of the WebSocket\n    //    object\u2019s url's origin, and the data attribute initialized to dataForEvent.\n    fireEvent('message', this, createFastMessageEvent, {\n      origin: this.#url.origin,\n      data: dataForEvent\n    })\n  }\n\n  #onParserDrain () {\n    this.#handler.socket.resume()\n  }\n\n  /**\n   * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol\n   * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.4\n   */\n  #onSocketClose () {\n    // If the TCP connection was closed after the\n    // WebSocket closing handshake was completed, the WebSocket connection\n    // is said to have been closed _cleanly_.\n    const wasClean =\n      this.#handler.closeState.has(sentCloseFrameState.SENT) &&\n      this.#handler.closeState.has(sentCloseFrameState.RECEIVED)\n\n    let code = 1005\n    let reason = ''\n\n    const result = this.#parser?.closingInfo\n\n    if (result && !result.error) {\n      code = result.code ?? 1005\n      reason = result.reason\n    }\n\n    // 1. Change the ready state to CLOSED (3).\n    this.#handler.readyState = states.CLOSED\n\n    // 2. If the user agent was required to fail the WebSocket\n    //    connection, or if the WebSocket connection was closed\n    //    after being flagged as full, fire an event named error\n    //    at the WebSocket object.\n    if (!this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n      // If _The WebSocket\n      // Connection is Closed_ and no Close control frame was received by the\n      // endpoint (such as could occur if the underlying transport connection\n      // is lost), _The WebSocket Connection Close Code_ is considered to be\n      // 1006.\n      code = 1006\n\n      fireEvent('error', this, (type, init) => new ErrorEvent(type, init), {\n        error: new TypeError(reason)\n      })\n    }\n\n    // 3. Fire an event named close at the WebSocket object,\n    //    using CloseEvent, with the wasClean attribute\n    //    initialized to true if the connection closed cleanly\n    //    and false otherwise, the code attribute initialized to\n    //    the WebSocket connection close code, and the reason\n    //    attribute initialized to the result of applying UTF-8\n    //    decode without BOM to the WebSocket connection close\n    //    reason.\n    // TODO: process.nextTick\n    fireEvent('close', this, (type, init) => new CloseEvent(type, init), {\n      wasClean, code, reason\n    })\n\n    if (channels.close.hasSubscribers) {\n      channels.close.publish({\n        websocket: this,\n        code,\n        reason\n      })\n    }\n  }\n\n  /**\n   * @param {WebSocket} ws\n   * @param {Buffer|undefined} buffer\n   */\n  static ping (ws, buffer) {\n    if (Buffer.isBuffer(buffer)) {\n      if (buffer.length > 125) {\n        throw new TypeError('A PING frame cannot have a body larger than 125 bytes.')\n      }\n    } else if (buffer !== undefined) {\n      throw new TypeError('Expected buffer payload')\n    }\n\n    // An endpoint MAY send a Ping frame any time after the connection is\n    // established and before the connection is closed.\n    const readyState = ws.#handler.readyState\n\n    if (isEstablished(readyState) && !isClosing(readyState) && !isClosed(readyState)) {\n      const frame = new WebsocketFrameSend(buffer)\n      ws.#handler.socket.write(frame.createFrame(opcodes.PING))\n    }\n  }\n}\n\nconst { ping } = WebSocket\nReflect.deleteProperty(WebSocket, 'ping')\n\n// https://websockets.spec.whatwg.org/#dom-websocket-connecting\nWebSocket.CONNECTING = WebSocket.prototype.CONNECTING = states.CONNECTING\n// https://websockets.spec.whatwg.org/#dom-websocket-open\nWebSocket.OPEN = WebSocket.prototype.OPEN = states.OPEN\n// https://websockets.spec.whatwg.org/#dom-websocket-closing\nWebSocket.CLOSING = WebSocket.prototype.CLOSING = states.CLOSING\n// https://websockets.spec.whatwg.org/#dom-websocket-closed\nWebSocket.CLOSED = WebSocket.prototype.CLOSED = states.CLOSED\n\nObject.defineProperties(WebSocket.prototype, {\n  CONNECTING: staticPropertyDescriptors,\n  OPEN: staticPropertyDescriptors,\n  CLOSING: staticPropertyDescriptors,\n  CLOSED: staticPropertyDescriptors,\n  url: kEnumerableProperty,\n  readyState: kEnumerableProperty,\n  bufferedAmount: kEnumerableProperty,\n  onopen: kEnumerableProperty,\n  onerror: kEnumerableProperty,\n  onclose: kEnumerableProperty,\n  close: kEnumerableProperty,\n  onmessage: kEnumerableProperty,\n  binaryType: kEnumerableProperty,\n  send: kEnumerableProperty,\n  extensions: kEnumerableProperty,\n  protocol: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'WebSocket',\n    writable: false,\n    enumerable: false,\n    configurable: true\n  }\n})\n\nObject.defineProperties(WebSocket, {\n  CONNECTING: staticPropertyDescriptors,\n  OPEN: staticPropertyDescriptors,\n  CLOSING: staticPropertyDescriptors,\n  CLOSED: staticPropertyDescriptors\n})\n\nwebidl.converters['sequence<DOMString>'] = webidl.sequenceConverter(\n  webidl.converters.DOMString\n)\n\nwebidl.converters['DOMString or sequence<DOMString>'] = function (V, prefix, argument) {\n  if (webidl.util.Type(V) === webidl.util.Types.OBJECT && Symbol.iterator in V) {\n    return webidl.converters['sequence<DOMString>'](V)\n  }\n\n  return webidl.converters.DOMString(V, prefix, argument)\n}\n\n// This implements the proposal made in https://github.com/whatwg/websockets/issues/42\nwebidl.converters.WebSocketInit = webidl.dictionaryConverter([\n  {\n    key: 'protocols',\n    converter: webidl.converters['DOMString or sequence<DOMString>'],\n    defaultValue: () => []\n  },\n  {\n    key: 'dispatcher',\n    converter: webidl.converters.any,\n    defaultValue: () => getGlobalDispatcher()\n  },\n  {\n    key: 'headers',\n    converter: webidl.nullableConverter(webidl.converters.HeadersInit)\n  }\n])\n\nwebidl.converters['DOMString or sequence<DOMString> or WebSocketInit'] = function (V) {\n  if (webidl.util.Type(V) === webidl.util.Types.OBJECT && !(Symbol.iterator in V)) {\n    return webidl.converters.WebSocketInit(V)\n  }\n\n  return { protocols: webidl.converters['DOMString or sequence<DOMString>'](V) }\n}\n\nwebidl.converters.WebSocketSendData = function (V) {\n  if (webidl.util.Type(V) === webidl.util.Types.OBJECT) {\n    if (webidl.is.Blob(V)) {\n      return V\n    }\n\n    if (webidl.is.BufferSource(V)) {\n      return V\n    }\n  }\n\n  return webidl.converters.USVString(V)\n}\n\nmodule.exports = {\n  WebSocket,\n  ping\n}\n", "'use strict'\n\nconst { webidl } = require('../../webidl')\nconst { validateCloseCodeAndReason } = require('../util')\nconst { kConstruct } = require('../../../core/symbols')\nconst { kEnumerableProperty } = require('../../../core/util')\n\nfunction createInheritableDOMException () {\n  // https://github.com/nodejs/node/issues/59677\n  class Test extends DOMException {\n    get reason () {\n      return ''\n    }\n  }\n\n  if (new Test().reason !== undefined) {\n    return DOMException\n  }\n\n  return new Proxy(DOMException, {\n    construct (target, args, newTarget) {\n      const instance = Reflect.construct(target, args, target)\n      Object.setPrototypeOf(instance, newTarget.prototype)\n      return instance\n    }\n  })\n}\n\nclass WebSocketError extends createInheritableDOMException() {\n  #closeCode\n  #reason\n\n  constructor (message = '', init = undefined) {\n    message = webidl.converters.DOMString(message, 'WebSocketError', 'message')\n\n    // 1. Set this 's name to \" WebSocketError \".\n    // 2. Set this 's message to message .\n    super(message, 'WebSocketError')\n\n    if (init === kConstruct) {\n      return\n    } else if (init !== null) {\n      init = webidl.converters.WebSocketCloseInfo(init)\n    }\n\n    // 3. Let code be init [\" closeCode \"] if it exists , or null otherwise.\n    let code = init.closeCode ?? null\n\n    // 4. Let reason be init [\" reason \"] if it exists , or the empty string otherwise.\n    const reason = init.reason ?? ''\n\n    // 5. Validate close code and reason with code and reason .\n    validateCloseCodeAndReason(code, reason)\n\n    // 6. If reason is non-empty, but code is not set, then set code to 1000 (\"Normal Closure\").\n    if (reason.length !== 0 && code === null) {\n      code = 1000\n    }\n\n    // 7. Set this 's closeCode to code .\n    this.#closeCode = code\n\n    // 8. Set this 's reason to reason .\n    this.#reason = reason\n  }\n\n  get closeCode () {\n    return this.#closeCode\n  }\n\n  get reason () {\n    return this.#reason\n  }\n\n  /**\n   * @param {string} message\n   * @param {number|null} code\n   * @param {string} reason\n   */\n  static createUnvalidatedWebSocketError (message, code, reason) {\n    const error = new WebSocketError(message, kConstruct)\n    error.#closeCode = code\n    error.#reason = reason\n    return error\n  }\n}\n\nconst { createUnvalidatedWebSocketError } = WebSocketError\ndelete WebSocketError.createUnvalidatedWebSocketError\n\nObject.defineProperties(WebSocketError.prototype, {\n  closeCode: kEnumerableProperty,\n  reason: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'WebSocketError',\n    writable: false,\n    enumerable: false,\n    configurable: true\n  }\n})\n\nwebidl.is.WebSocketError = webidl.util.MakeTypeAssertion(WebSocketError)\n\nmodule.exports = { WebSocketError, createUnvalidatedWebSocketError }\n", "'use strict'\n\nconst { createDeferredPromise } = require('../../../util/promise')\nconst { environmentSettingsObject } = require('../../fetch/util')\nconst { states, opcodes, sentCloseFrameState } = require('../constants')\nconst { webidl } = require('../../webidl')\nconst { getURLRecord, isValidSubprotocol, isEstablished, utf8Decode } = require('../util')\nconst { establishWebSocketConnection, failWebsocketConnection, closeWebSocketConnection } = require('../connection')\nconst { channels } = require('../../../core/diagnostics')\nconst { WebsocketFrameSend } = require('../frame')\nconst { ByteParser } = require('../receiver')\nconst { WebSocketError, createUnvalidatedWebSocketError } = require('./websocketerror')\nconst { kEnumerableProperty } = require('../../../core/util')\nconst { utf8DecodeBytes } = require('../../../encoding')\n\nlet emittedExperimentalWarning = false\n\nclass WebSocketStream {\n  // Each WebSocketStream object has an associated url , which is a URL record .\n  /** @type {URL} */\n  #url\n\n  // Each WebSocketStream object has an associated opened promise , which is a promise.\n  /** @type {import('../../../util/promise').DeferredPromise} */\n  #openedPromise\n\n  // Each WebSocketStream object has an associated closed promise , which is a promise.\n  /** @type {import('../../../util/promise').DeferredPromise} */\n  #closedPromise\n\n  // Each WebSocketStream object has an associated readable stream , which is a ReadableStream .\n  /** @type {ReadableStream} */\n  #readableStream\n  /** @type {ReadableStreamDefaultController} */\n  #readableStreamController\n\n  // Retain the controller so the writable stream can be errored while locked.\n  /** @type {WritableStreamDefaultController} */\n  #writableStreamController\n\n  // Each WebSocketStream object has an associated boolean handshake aborted , which is initially false.\n  #handshakeAborted = false\n\n  /** @type {import('../websocket').Handler} */\n  #handler = {\n    // https://whatpr.org/websockets/48/7b748d3...d5570f3.html#feedback-to-websocket-stream-from-the-protocol\n    onConnectionEstablished: (response, extensions) => this.#onConnectionEstablished(response, extensions),\n    onMessage: (opcode, data) => this.#onMessage(opcode, data),\n    onParserError: (err) => failWebsocketConnection(this.#handler, null, err.message),\n    onParserDrain: () => this.#handler.socket.resume(),\n    onSocketData: (chunk) => {\n      if (!this.#parser.write(chunk)) {\n        this.#handler.socket.pause()\n      }\n    },\n    onSocketError: (err) => {\n      this.#handler.readyState = states.CLOSING\n\n      if (channels.socketError.hasSubscribers) {\n        channels.socketError.publish(err)\n      }\n\n      this.#handler.socket.destroy()\n    },\n    onSocketClose: () => this.#onSocketClose(),\n    onPing: () => {},\n    onPong: () => {},\n\n    readyState: states.CONNECTING,\n    socket: null,\n    closeState: new Set(),\n    controller: null,\n    wasEverConnected: false\n  }\n\n  /** @type {import('../receiver').ByteParser} */\n  #parser\n\n  constructor (url, options = undefined) {\n    if (!emittedExperimentalWarning) {\n      process.emitWarning('WebSocketStream is experimental! Expect it to change at any time.', {\n        code: 'UNDICI-WSS'\n      })\n      emittedExperimentalWarning = true\n    }\n\n    webidl.argumentLengthCheck(arguments, 1, 'WebSocket')\n\n    url = webidl.converters.USVString(url)\n    if (options !== null) {\n      options = webidl.converters.WebSocketStreamOptions(options)\n    }\n\n    // 1. Let baseURL be this 's relevant settings object 's API base URL .\n    const baseURL = environmentSettingsObject.settingsObject.baseUrl\n\n    // 2. Let urlRecord be the result of getting a URL record given url and baseURL .\n    const urlRecord = getURLRecord(url, baseURL)\n\n    // 3. Let protocols be options [\" protocols \"] if it exists , otherwise an empty sequence.\n    const protocols = options.protocols\n\n    // 4. If any of the values in protocols occur more than once or otherwise fail to match the requirements for elements that comprise the value of ` Sec-WebSocket-Protocol ` fields as defined by The WebSocket Protocol , then throw a \" SyntaxError \" DOMException . [WSP]\n    if (protocols.length !== new Set(protocols.map(p => p.toLowerCase())).size) {\n      throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n    }\n\n    if (protocols.length > 0 && !protocols.every(p => isValidSubprotocol(p))) {\n      throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError')\n    }\n\n    // 5. Set this 's url to urlRecord .\n    this.#url = urlRecord.toString()\n\n    // 6. Set this 's opened promise and closed promise to new promises.\n    this.#openedPromise = createDeferredPromise()\n    this.#closedPromise = createDeferredPromise()\n\n    // 7. Apply backpressure to the WebSocket.\n    // TODO\n\n    // 8.  If options [\" signal \"] exists ,\n    if (options.signal != null) {\n      // 8.1. Let signal be options [\" signal \"].\n      const signal = options.signal\n\n      // 8.2. If signal is aborted , then reject this 's opened promise and closed promise with signal \u2019s abort reason\n      //      and return.\n      if (signal.aborted) {\n        this.#openedPromise.reject(signal.reason)\n        this.#closedPromise.reject(signal.reason)\n        return\n      }\n\n      // 8.3. Add the following abort steps to signal :\n      signal.addEventListener('abort', () => {\n        // 8.3.1. If the WebSocket connection is not yet established : [WSP]\n        if (!isEstablished(this.#handler.readyState)) {\n          // 8.3.1.1. Fail the WebSocket connection .\n          failWebsocketConnection(this.#handler)\n\n          // Set this 's ready state to CLOSING .\n          this.#handler.readyState = states.CLOSING\n\n          // Reject this 's opened promise and closed promise with signal \u2019s abort reason .\n          this.#openedPromise.reject(signal.reason)\n          this.#closedPromise.reject(signal.reason)\n\n          // Set this 's handshake aborted to true.\n          this.#handshakeAborted = true\n        }\n      }, { once: true })\n    }\n\n    // 9.  Let client be this 's relevant settings object .\n    const client = environmentSettingsObject.settingsObject\n\n    // 10. Run this step in parallel :\n    // 10.1. Establish a WebSocket connection given urlRecord , protocols , and client . [FETCH]\n    this.#handler.controller = establishWebSocketConnection(\n      urlRecord,\n      protocols,\n      client,\n      this.#handler,\n      options\n    )\n  }\n\n  // The url getter steps are to return this 's url , serialized .\n  get url () {\n    return this.#url.toString()\n  }\n\n  // The opened getter steps are to return this 's opened promise .\n  get opened () {\n    return this.#openedPromise.promise\n  }\n\n  // The closed getter steps are to return this 's closed promise .\n  get closed () {\n    return this.#closedPromise.promise\n  }\n\n  // The close( closeInfo ) method steps are:\n  close (closeInfo = undefined) {\n    if (closeInfo !== null) {\n      closeInfo = webidl.converters.WebSocketCloseInfo(closeInfo)\n    }\n\n    // 1. Let code be closeInfo [\" closeCode \"] if present, or null otherwise.\n    const code = closeInfo.closeCode ?? null\n\n    // 2. Let reason be closeInfo [\" reason \"].\n    const reason = closeInfo.reason\n\n    // 3. Close the WebSocket with this , code , and reason .\n    closeWebSocketConnection(this.#handler, code, reason, true)\n  }\n\n  #write (chunk) {\n    // See /websockets/stream/tentative/write.any.html\n    chunk = webidl.converters.WebSocketStreamWrite(chunk)\n\n    // 1. Let promise be a new promise created in stream \u2019s relevant realm .\n    const promise = createDeferredPromise()\n\n    // 2. Let data be null.\n    let data = null\n\n    // 3. Let opcode be null.\n    let opcode = null\n\n    // 4. If chunk is a BufferSource ,\n    if (webidl.is.BufferSource(chunk)) {\n      // 4.1. Set data to a copy of the bytes given chunk .\n      data = new Uint8Array(ArrayBuffer.isView(chunk) ? new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength) : chunk.slice())\n\n      // 4.2. Set opcode to a binary frame opcode.\n      opcode = opcodes.BINARY\n    } else {\n      // 5. Otherwise,\n\n      // 5.1. Let string be the result of converting chunk to an IDL USVString .\n      //    If this throws an exception, return a promise rejected with the exception.\n      let string\n\n      try {\n        string = webidl.converters.DOMString(chunk)\n      } catch (e) {\n        promise.reject(e)\n        return promise.promise\n      }\n\n      // 5.2. Set data to the result of UTF-8 encoding string .\n      data = new TextEncoder().encode(string)\n\n      // 5.3. Set opcode to a text frame opcode.\n      opcode = opcodes.TEXT\n    }\n\n    // 6. In parallel,\n    // 6.1. Wait until there is sufficient buffer space in stream to send the message.\n\n    // 6.2. If the closing handshake has not yet started , Send a WebSocket Message to stream comprised of data using opcode .\n    if (!this.#handler.closeState.has(sentCloseFrameState.SENT) && !this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n      const frame = new WebsocketFrameSend(data)\n\n      this.#handler.socket.write(frame.createFrame(opcode), () => {\n        promise.resolve(undefined)\n      })\n    }\n\n    // 6.3. Queue a global task on the WebSocket task source given stream \u2019s relevant global object to resolve promise with undefined.\n    return promise.promise\n  }\n\n  /** @type {import('../websocket').Handler['onConnectionEstablished']} */\n  #onConnectionEstablished (response, parsedExtensions) {\n    this.#handler.socket = response.socket\n\n    // Get options from dispatcher options\n    const maxFragments = this.#handler.controller.dispatcher?.webSocketOptions?.maxFragments\n    const maxPayloadSize = this.#handler.controller.dispatcher?.webSocketOptions?.maxPayloadSize\n\n    const parser = new ByteParser(this.#handler, parsedExtensions, {\n      maxFragments,\n      maxPayloadSize\n    })\n    parser.on('drain', () => this.#handler.onParserDrain())\n    parser.on('error', (err) => this.#handler.onParserError(err))\n\n    this.#parser = parser\n\n    // 1. Change stream \u2019s ready state to OPEN (1).\n    this.#handler.readyState = states.OPEN\n\n    // 2. Set stream \u2019s was ever connected to true.\n    // This is done in the opening handshake.\n\n    // 3. Let extensions be the extensions in use .\n    const extensions = parsedExtensions ?? ''\n\n    // 4. Let protocol be the subprotocol in use .\n    const protocol = response.headersList.get('sec-websocket-protocol') ?? ''\n\n    // 5. Let pullAlgorithm be an action that pulls bytes from stream .\n    // 6. Let cancelAlgorithm be an action that cancels stream with reason , given reason .\n    // 7. Let readable be a new ReadableStream .\n    // 8. Set up readable with pullAlgorithm and cancelAlgorithm .\n    const readable = new ReadableStream({\n      start: (controller) => {\n        this.#readableStreamController = controller\n      },\n      cancel: (reason) => this.#cancel(reason)\n    })\n\n    // 9. Let writeAlgorithm be an action that writes chunk to stream , given chunk .\n    // 10. Let closeAlgorithm be an action that closes stream .\n    // 11. Let abortAlgorithm be an action that aborts stream with reason , given reason .\n    // 12. Let writable be a new WritableStream .\n    // 13. Set up writable with writeAlgorithm , closeAlgorithm , and abortAlgorithm .\n    const writable = new WritableStream({\n      start: (controller) => {\n        this.#writableStreamController = controller\n      },\n      write: (chunk) => this.#write(chunk),\n      close: () => closeWebSocketConnection(this.#handler, null, null),\n      abort: (reason) => this.#closeUsingReason(reason)\n    })\n\n    // Set stream \u2019s readable stream to readable .\n    this.#readableStream = readable\n\n    // Resolve stream \u2019s opened promise with WebSocketOpenInfo \u00AB[ \" extensions \" \u2192 extensions , \" protocol \" \u2192 protocol , \" readable \" \u2192 readable , \" writable \" \u2192 writable ]\u00BB.\n    this.#openedPromise.resolve({\n      extensions,\n      protocol,\n      readable,\n      writable\n    })\n  }\n\n  /** @type {import('../websocket').Handler['onMessage']} */\n  #onMessage (type, data) {\n    // 1. If stream\u2019s ready state is not OPEN (1), then return.\n    if (this.#handler.readyState !== states.OPEN) {\n      return\n    }\n\n    // 2. Let chunk be determined by switching on type:\n    //      - type indicates that the data is Text\n    //          a new DOMString containing data\n    //      - type indicates that the data is Binary\n    //          a new Uint8Array object, created in the relevant Realm of the\n    //          WebSocketStream object, whose contents are data\n    let chunk\n\n    if (type === opcodes.TEXT) {\n      try {\n        chunk = utf8Decode(data)\n      } catch {\n        failWebsocketConnection(this.#handler, 1007, 'Received invalid UTF-8 in text frame.')\n        return\n      }\n    } else if (type === opcodes.BINARY) {\n      chunk = new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\n    }\n\n    // 3. Enqueue chunk into stream\u2019s readable stream.\n    this.#readableStreamController.enqueue(chunk)\n\n    // 4. Apply backpressure to the WebSocket.\n  }\n\n  /** @type {import('../websocket').Handler['onSocketClose']} */\n  #onSocketClose () {\n    const wasClean =\n      this.#handler.closeState.has(sentCloseFrameState.SENT) &&\n      this.#handler.closeState.has(sentCloseFrameState.RECEIVED)\n\n    // 1. Change the ready state to CLOSED (3).\n    this.#handler.readyState = states.CLOSED\n\n    // 2. If stream \u2019s handshake aborted is true, then return.\n    if (this.#handshakeAborted) {\n      return\n    }\n\n    // 3. If stream \u2019s was ever connected is false, then reject stream \u2019s opened promise with a new WebSocketError.\n    if (!this.#handler.wasEverConnected) {\n      this.#openedPromise.reject(new WebSocketError('Socket never opened'))\n    }\n\n    const result = this.#parser?.closingInfo\n\n    // 4. Let code be the WebSocket connection close code .\n    // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5\n    // If this Close control frame contains no status code, _The WebSocket\n    // Connection Close Code_ is considered to be 1005. If _The WebSocket\n    // Connection is Closed_ and no Close control frame was received by the\n    // endpoint (such as could occur if the underlying transport connection\n    // is lost), _The WebSocket Connection Close Code_ is considered to be\n    // 1006.\n    let code = result?.code ?? 1005\n\n    if (!this.#handler.closeState.has(sentCloseFrameState.SENT) && !this.#handler.closeState.has(sentCloseFrameState.RECEIVED)) {\n      code = 1006\n    }\n\n    // 5. Let reason be the result of applying UTF-8 decode without BOM to the WebSocket connection close reason .\n    const reason = result?.reason == null ? '' : utf8DecodeBytes(Buffer.from(result.reason))\n\n    // 6. If the connection was closed cleanly ,\n    if (wasClean) {\n      // 6.1. Close stream \u2019s readable stream .\n      this.#readableStreamController.close()\n\n      // 6.2. Error stream \u2019s writable stream with an \" InvalidStateError \" DOMException indicating that a closed WebSocketStream cannot be written to.\n      this.#writableStreamController.error(new DOMException('A closed WebSocketStream cannot be written to', 'InvalidStateError'))\n\n      // 6.3. Resolve stream \u2019s closed promise with WebSocketCloseInfo \u00AB[ \" closeCode \" \u2192 code , \" reason \" \u2192 reason ]\u00BB.\n      this.#closedPromise.resolve({\n        closeCode: code,\n        reason\n      })\n    } else {\n      // 7. Otherwise,\n\n      // 7.1. Let error be a new WebSocketError whose closeCode is code and reason is reason .\n      const error = createUnvalidatedWebSocketError('unclean close', code, reason)\n\n      // 7.2. Error stream \u2019s readable stream with error .\n      this.#readableStreamController?.error(error)\n\n      // 7.3. Error stream \u2019s writable stream with error .\n      this.#writableStreamController?.error(error)\n\n      // 7.4. Reject stream \u2019s closed promise with error .\n      this.#closedPromise.reject(error)\n    }\n  }\n\n  #closeUsingReason (reason) {\n    // 1. Let code be null.\n    let code = null\n\n    // 2. Let reasonString be the empty string.\n    let reasonString = ''\n\n    // 3. If reason implements WebSocketError ,\n    if (webidl.is.WebSocketError(reason)) {\n      // 3.1. Set code to reason \u2019s closeCode .\n      code = reason.closeCode\n\n      // 3.2. Set reasonString to reason \u2019s reason .\n      reasonString = reason.reason\n    }\n\n    // 4. Close the WebSocket with stream , code , and reasonString . If this throws an exception,\n    //    discard code and reasonString and close the WebSocket with stream .\n    closeWebSocketConnection(this.#handler, code, reasonString)\n  }\n\n  //  To cancel a WebSocketStream stream given reason , close using reason giving stream and reason .\n  #cancel (reason) {\n    this.#closeUsingReason(reason)\n  }\n}\n\nObject.defineProperties(WebSocketStream.prototype, {\n  url: kEnumerableProperty,\n  opened: kEnumerableProperty,\n  closed: kEnumerableProperty,\n  close: kEnumerableProperty,\n  [Symbol.toStringTag]: {\n    value: 'WebSocketStream',\n    writable: false,\n    enumerable: false,\n    configurable: true\n  }\n})\n\nwebidl.converters.WebSocketStreamOptions = webidl.dictionaryConverter([\n  {\n    key: 'protocols',\n    converter: webidl.sequenceConverter(webidl.converters.USVString),\n    defaultValue: () => []\n  },\n  {\n    key: 'signal',\n    converter: webidl.nullableConverter(webidl.converters.AbortSignal),\n    defaultValue: () => null\n  }\n])\n\nwebidl.converters.WebSocketCloseInfo = webidl.dictionaryConverter([\n  {\n    key: 'closeCode',\n    converter: (V) => webidl.converters['unsigned short'](V, webidl.attributes.EnforceRange)\n  },\n  {\n    key: 'reason',\n    converter: webidl.converters.USVString,\n    defaultValue: () => ''\n  }\n])\n\nwebidl.converters.WebSocketStreamWrite = function (V) {\n  if (typeof V === 'string') {\n    return webidl.converters.USVString(V)\n  }\n\n  return webidl.converters.BufferSource(V)\n}\n\nmodule.exports = { WebSocketStream }\n", "'use strict'\n\n/**\n * Checks if the given value is a valid LastEventId.\n * @param {string} value\n * @returns {boolean}\n */\nfunction isValidLastEventId (value) {\n  // LastEventId should not contain U+0000 NULL\n  return value.indexOf('\\u0000') === -1\n}\n\n/**\n * Checks if the given value is a base 10 digit.\n * @param {string} value\n * @returns {boolean}\n */\nfunction isASCIINumber (value) {\n  if (value.length === 0) return false\n  for (let i = 0; i < value.length; i++) {\n    if (value.charCodeAt(i) < 0x30 || value.charCodeAt(i) > 0x39) return false\n  }\n  return true\n}\n\nmodule.exports = {\n  isValidLastEventId,\n  isASCIINumber\n}\n", "'use strict'\nconst { Transform } = require('node:stream')\nconst { isASCIINumber, isValidLastEventId } = require('./util')\n\n/**\n * @type {number[]} BOM\n */\nconst BOM = [0xEF, 0xBB, 0xBF]\n/**\n * @type {10} LF\n */\nconst LF = 0x0A\n/**\n * @type {13} CR\n */\nconst CR = 0x0D\n/**\n * @type {58} COLON\n */\nconst COLON = 0x3A\n/**\n * @type {32} SPACE\n */\nconst SPACE = 0x20\n\nconst DATA = Buffer.from('data')\nconst EVENT = Buffer.from('event')\nconst ID = Buffer.from('id')\nconst RETRY = Buffer.from('retry')\n\nfunction isASCIINumberBytes (buffer, start) {\n  if (start >= buffer.length) {\n    return false\n  }\n\n  for (let i = start; i < buffer.length; i++) {\n    if (buffer[i] < 0x30 || buffer[i] > 0x39) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction isValidLastEventIdBytes (buffer, start) {\n  for (let i = start; i < buffer.length; i++) {\n    if (buffer[i] === 0x00) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction isFieldName (line, length, field) {\n  if (length !== field.length) {\n    return false\n  }\n\n  for (let i = 0; i < length; i++) {\n    if (line[i] !== field[i]) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @typedef {object} EventSourceStreamEvent\n * @type {object}\n * @property {string} [event] The event type.\n * @property {string} [data] The data of the message.\n * @property {string} [id] A unique ID for the event.\n * @property {string} [retry] The reconnection time, in milliseconds.\n */\n\n/**\n * @typedef eventSourceSettings\n * @type {object}\n * @property {string} [lastEventId] The last event ID received from the server.\n * @property {string} [origin] The origin of the event source.\n * @property {number} [reconnectionTime] The reconnection time, in milliseconds.\n */\n\nclass EventSourceStream extends Transform {\n  /**\n   * @type {eventSourceSettings}\n   */\n  state\n\n  /**\n   * Leading byte-order-mark check.\n   * @type {boolean}\n   */\n  checkBOM = true\n\n  /**\n   * @type {boolean}\n   */\n  crlfCheck = false\n\n  /**\n   * @type {boolean}\n   */\n  eventEndCheck = false\n\n  /**\n   * @type {Buffer[]}\n   */\n  chunks = []\n\n  chunkIndex = 0\n  pos = 0\n  lineChunkIndex = 0\n  linePos = 0\n\n  event = {\n    data: undefined,\n    event: undefined,\n    id: undefined,\n    retry: undefined\n  }\n\n  /**\n   * @param {object} options\n   * @param {boolean} [options.readableObjectMode]\n   * @param {eventSourceSettings} [options.eventSourceSettings]\n   * @param {(chunk: any, encoding?: BufferEncoding | undefined) => boolean} [options.push]\n   */\n  constructor (options = {}) {\n    // Enable object mode as EventSourceStream emits objects of shape\n    // EventSourceStreamEvent\n    options.readableObjectMode = true\n\n    super(options)\n\n    this.state = options.eventSourceSettings || {}\n    if (options.push) {\n      this.push = options.push\n    }\n  }\n\n  /**\n   * @param {Buffer} chunk\n   * @param {string} _encoding\n   * @param {Function} callback\n   * @returns {void}\n   */\n  _transform (chunk, _encoding, callback) {\n    if (chunk.length === 0) {\n      callback()\n      return\n    }\n\n    this.chunks.push(chunk)\n\n    // Strip leading byte-order-mark if we opened the stream and started\n    // the processing of the incoming data\n    if (this.checkBOM) {\n      if (this.handleBOM()) {\n        callback()\n        return\n      }\n    }\n\n    while (this.hasCurrentByte()) {\n      const byte = this.currentByte()\n\n      // If the previous line ended with an end-of-line, we need to check\n      // if the next character is also an end-of-line.\n      if (this.eventEndCheck) {\n        // If the the current character is an end-of-line, then the event\n        // is finished and we can process it\n\n        // If the previous line ended with a carriage return, we need to\n        // check if the current character is a line feed and remove it\n        // from the buffer.\n        if (this.crlfCheck) {\n          // If the current character is a line feed, we can remove it\n          // from the buffer and reset the crlfCheck flag\n          if (byte === LF) {\n            this.crlfCheck = false\n            this.consumeCurrentByte()\n\n            // It is possible that the line feed is not the end of the\n            // event. We need to check if the next character is an\n            // end-of-line character to determine if the event is\n            // finished. We simply continue the loop to check the next\n            // character.\n\n            // As we removed the line feed from the buffer and set the\n            // crlfCheck flag to false, we basically don't make any\n            // distinction between a line feed and a carriage return.\n            continue\n          }\n          this.crlfCheck = false\n        }\n\n        if (byte === LF || byte === CR) {\n          // If the current character is a carriage return, we need to\n          // set the crlfCheck flag to true, as we need to check if the\n          // next character is a line feed so we can remove it from the\n          // buffer\n          if (byte === CR) {\n            this.crlfCheck = true\n          }\n\n          this.consumeCurrentByte()\n          if (this.hasPendingEvent()) {\n            this.processEvent(this.event)\n          }\n          this.clearEvent()\n          continue\n        }\n        // If the current character is not an end-of-line, then the event\n        // is not finished and we have to reset the eventEndCheck flag\n        this.eventEndCheck = false\n        continue\n      }\n\n      // If the current character is an end-of-line, we can process the\n      // line\n      if (byte === LF || byte === CR) {\n        // If the current character is a carriage return, we need to\n        // set the crlfCheck flag to true, as we need to check if the\n        // next character is a line feed\n        if (byte === CR) {\n          this.crlfCheck = true\n        }\n\n        // In any case, we can process the line as we reached an\n        // end-of-line character\n        this.parseLine(this.readLine(), this.event)\n        this.consumeCurrentByte()\n        // A line was processed and this could be the end of the event. We need\n        // to check if the next line is empty to determine if the event is\n        // finished.\n        this.eventEndCheck = true\n        continue\n      }\n\n      this.advanceCursor()\n    }\n\n    callback()\n  }\n\n  /**\n   * @param {Buffer} line\n   * @param {EventSourceStreamEvent} event\n   */\n  parseLine (line, event) {\n    // If the line is empty (a blank line)\n    // Dispatch the event, as defined below.\n    // This will be handled in the _transform method\n    if (line.length === 0) {\n      return\n    }\n\n    // If the line starts with a U+003A COLON character (:)\n    // Ignore the line.\n    const colonPosition = line.indexOf(COLON)\n    if (colonPosition === 0) {\n      return\n    }\n\n    let fieldLength = line.length\n    let valueStart = line.length\n\n    // If the line contains a U+003A COLON character (:)\n    if (colonPosition !== -1) {\n      fieldLength = colonPosition\n\n      // Collect the characters on the line after the first U+003A COLON\n      // character (:), and let value be that string.\n      // If value starts with a U+0020 SPACE character, remove it from value.\n      valueStart = colonPosition + 1\n      if (line[valueStart] === SPACE) {\n        ++valueStart\n      }\n    }\n\n    if (isFieldName(line, fieldLength, DATA)) {\n      const value = line.toString('utf8', valueStart)\n\n      if (event.data === undefined) {\n        event.data = value\n      } else {\n        event.data += `\\n${value}`\n      }\n      return\n    }\n\n    if (isFieldName(line, fieldLength, RETRY)) {\n      if (isASCIINumberBytes(line, valueStart)) {\n        event.retry = line.toString('utf8', valueStart)\n      }\n      return\n    }\n\n    if (isFieldName(line, fieldLength, ID)) {\n      if (isValidLastEventIdBytes(line, valueStart)) {\n        event.id = line.toString('utf8', valueStart)\n      }\n      return\n    }\n\n    if (isFieldName(line, fieldLength, EVENT)) {\n      const value = line.toString('utf8', valueStart)\n\n      if (value.length > 0) {\n        event.event = value\n      }\n    }\n  }\n\n  /**\n   * @param {EventSourceStreamEvent} event\n   */\n  processEvent (event) {\n    if (event.retry && isASCIINumber(event.retry)) {\n      this.state.reconnectionTime = parseInt(event.retry, 10)\n    }\n\n    if (event.id !== undefined && isValidLastEventId(event.id)) {\n      this.state.lastEventId = event.id\n    }\n\n    // only dispatch event, when data is provided\n    if (event.data !== undefined) {\n      this.push({\n        type: event.event || 'message',\n        options: {\n          data: event.data,\n          lastEventId: this.state.lastEventId,\n          origin: this.state.origin\n        }\n      })\n    }\n  }\n\n  clearEvent () {\n    this.event.data = undefined\n    this.event.event = undefined\n    this.event.id = undefined\n    this.event.retry = undefined\n  }\n\n  hasPendingEvent () {\n    return this.event.data !== undefined ||\n      this.event.event !== undefined ||\n      this.event.id !== undefined ||\n      this.event.retry !== undefined\n  }\n\n  hasCurrentByte () {\n    return this.chunkIndex < this.chunks.length &&\n      this.pos < this.chunks[this.chunkIndex].length\n  }\n\n  currentByte () {\n    return this.chunks[this.chunkIndex][this.pos]\n  }\n\n  consumeCurrentByte () {\n    this.advanceCursor()\n    this.syncLineStartToCursor()\n  }\n\n  advanceCursor () {\n    this.pos++\n\n    while (this.chunkIndex < this.chunks.length && this.pos >= this.chunks[this.chunkIndex].length) {\n      this.chunkIndex++\n      this.pos = 0\n    }\n  }\n\n  syncLineStartToCursor () {\n    this.lineChunkIndex = this.chunkIndex\n    this.linePos = this.pos\n    this.dropConsumedChunks()\n  }\n\n  dropConsumedChunks () {\n    while (this.lineChunkIndex > 0) {\n      this.chunks.shift()\n      this.lineChunkIndex--\n      this.chunkIndex--\n    }\n\n    if (this.chunkIndex === this.chunks.length) {\n      this.chunks.length = 0\n      this.chunkIndex = 0\n      this.pos = 0\n      this.lineChunkIndex = 0\n      this.linePos = 0\n    }\n  }\n\n  readLine () {\n    if (this.lineChunkIndex === this.chunkIndex) {\n      return this.chunks[this.chunkIndex].subarray(this.linePos, this.pos)\n    }\n\n    const chunks = []\n    let length = 0\n\n    for (let i = this.lineChunkIndex; i <= this.chunkIndex; i++) {\n      const chunk = this.chunks[i]\n      const start = i === this.lineChunkIndex ? this.linePos : 0\n      const end = i === this.chunkIndex ? this.pos : chunk.length\n      const slice = chunk.subarray(start, end)\n      length += slice.length\n      chunks.push(slice)\n    }\n\n    return Buffer.concat(chunks, length)\n  }\n\n  peekBufferedByte (offset) {\n    let chunkIndex = this.lineChunkIndex\n    let pos = this.linePos\n\n    while (chunkIndex < this.chunks.length) {\n      const chunk = this.chunks[chunkIndex]\n      const remaining = chunk.length - pos\n\n      if (offset < remaining) {\n        return chunk[pos + offset]\n      }\n\n      offset -= remaining\n      chunkIndex++\n      pos = 0\n    }\n  }\n\n  discardLeadingBytes (count) {\n    while (count > 0 && this.lineChunkIndex < this.chunks.length) {\n      const chunk = this.chunks[this.lineChunkIndex]\n      const remaining = chunk.length - this.linePos\n\n      if (count < remaining) {\n        this.linePos += count\n        count = 0\n      } else {\n        count -= remaining\n        this.lineChunkIndex++\n        this.linePos = 0\n      }\n    }\n\n    this.chunkIndex = this.lineChunkIndex\n    this.pos = this.linePos\n    this.dropConsumedChunks()\n  }\n\n  handleBOM () {\n    const first = this.peekBufferedByte(0)\n    const second = this.peekBufferedByte(1)\n    const third = this.peekBufferedByte(2)\n\n    if (second === undefined) {\n      if (first === BOM[0]) {\n        return true\n      }\n\n      this.checkBOM = false\n      return true\n    }\n\n    if (third === undefined) {\n      if (first === BOM[0] && second === BOM[1]) {\n        return true\n      }\n\n      this.checkBOM = false\n      return false\n    }\n\n    if (first === BOM[0] && second === BOM[1] && third === BOM[2]) {\n      this.discardLeadingBytes(3)\n    }\n\n    this.checkBOM = false\n    return !this.hasCurrentByte()\n  }\n}\n\nmodule.exports = {\n  EventSourceStream\n}\n", "'use strict'\n\nconst { pipeline } = require('node:stream')\nconst { fetching } = require('../fetch')\nconst { makeRequest } = require('../fetch/request')\nconst { webidl } = require('../webidl')\nconst { EventSourceStream } = require('./eventsource-stream')\nconst { parseMIMEType } = require('../fetch/data-url')\nconst { createFastMessageEvent } = require('../websocket/events')\nconst { isNetworkError } = require('../fetch/response')\nconst { kEnumerableProperty } = require('../../core/util')\nconst { environmentSettingsObject } = require('../fetch/util')\n\nlet experimentalWarned = false\n\n/**\n * A reconnection time, in milliseconds. This must initially be an implementation-defined value,\n * probably in the region of a few seconds.\n *\n * In Comparison:\n * - Chrome uses 3000ms.\n * - Deno uses 5000ms.\n *\n * @type {3000}\n */\nconst defaultReconnectionTime = 3000\n\n/**\n * The readyState attribute represents the state of the connection.\n * @typedef ReadyState\n * @type {0|1|2}\n * @readonly\n * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#dom-eventsource-readystate-dev\n */\n\n/**\n * The connection has not yet been established, or it was closed and the user\n * agent is reconnecting.\n * @type {0}\n */\nconst CONNECTING = 0\n\n/**\n * The user agent has an open connection and is dispatching events as it\n * receives them.\n * @type {1}\n */\nconst OPEN = 1\n\n/**\n * The connection is not open, and the user agent is not trying to reconnect.\n * @type {2}\n */\nconst CLOSED = 2\n\n/**\n * Requests for the element will have their mode set to \"cors\" and their credentials mode set to \"same-origin\".\n * @type {'anonymous'}\n */\nconst ANONYMOUS = 'anonymous'\n\n/**\n * Requests for the element will have their mode set to \"cors\" and their credentials mode set to \"include\".\n * @type {'use-credentials'}\n */\nconst USE_CREDENTIALS = 'use-credentials'\n\n/**\n * The EventSource interface is used to receive server-sent events. It\n * connects to a server over HTTP and receives events in text/event-stream\n * format without closing the connection.\n * @extends {EventTarget}\n * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events\n * @api public\n */\nclass EventSource extends EventTarget {\n  #events = {\n    open: null,\n    error: null,\n    message: null\n  }\n\n  #url\n  #withCredentials = false\n\n  /**\n   * @type {ReadyState}\n   */\n  #readyState = CONNECTING\n\n  #request = null\n  #controller = null\n\n  #dispatcher\n\n  /**\n   * @type {import('./eventsource-stream').eventSourceSettings}\n   */\n  #state\n\n  /**\n   * Creates a new EventSource object.\n   * @param {string} url\n   * @param {EventSourceInit} [eventSourceInitDict={}]\n   * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#the-eventsource-interface\n   */\n  constructor (url, eventSourceInitDict = {}) {\n    // 1. Let ev be a new EventSource object.\n    super()\n\n    webidl.util.markAsUncloneable(this)\n\n    const prefix = 'EventSource constructor'\n    webidl.argumentLengthCheck(arguments, 1, prefix)\n\n    if (!experimentalWarned) {\n      experimentalWarned = true\n      process.emitWarning('EventSource is experimental, expect them to change at any time.', {\n        code: 'UNDICI-ES'\n      })\n    }\n\n    url = webidl.converters.USVString(url)\n    eventSourceInitDict = webidl.converters.EventSourceInitDict(eventSourceInitDict, prefix, 'eventSourceInitDict')\n\n    this.#dispatcher = eventSourceInitDict.node.dispatcher || eventSourceInitDict.dispatcher\n    this.#state = {\n      lastEventId: '',\n      reconnectionTime: eventSourceInitDict.node.reconnectionTime\n    }\n\n    // 2. Let settings be ev's relevant settings object.\n    // https://html.spec.whatwg.org/multipage/webappapis.html#environment-settings-object\n    const settings = environmentSettingsObject\n\n    let urlRecord\n\n    try {\n      // 3. Let urlRecord be the result of encoding-parsing a URL given url, relative to settings.\n      urlRecord = new URL(url, settings.settingsObject.baseUrl)\n      this.#state.origin = urlRecord.origin\n    } catch (e) {\n      // 4. If urlRecord is failure, then throw a \"SyntaxError\" DOMException.\n      throw new DOMException(e, 'SyntaxError')\n    }\n\n    // 5. Set ev's url to urlRecord.\n    this.#url = urlRecord.href\n\n    // 6. Let corsAttributeState be Anonymous.\n    let corsAttributeState = ANONYMOUS\n\n    // 7. If the value of eventSourceInitDict's withCredentials member is true,\n    // then set corsAttributeState to Use Credentials and set ev's\n    // withCredentials attribute to true.\n    if (eventSourceInitDict.withCredentials === true) {\n      corsAttributeState = USE_CREDENTIALS\n      this.#withCredentials = true\n    }\n\n    // 8. Let request be the result of creating a potential-CORS request given\n    // urlRecord, the empty string, and corsAttributeState.\n    const initRequest = {\n      redirect: 'follow',\n      keepalive: true,\n      // @see https://html.spec.whatwg.org/multipage/urls-and-fetching.html#cors-settings-attributes\n      mode: 'cors',\n      credentials: corsAttributeState === 'anonymous'\n        ? 'same-origin'\n        : 'omit',\n      referrer: 'no-referrer'\n    }\n\n    // 9. Set request's client to settings.\n    initRequest.client = environmentSettingsObject.settingsObject\n\n    // 10. User agents may set (`Accept`, `text/event-stream`) in request's header list.\n    initRequest.headersList = [['accept', { name: 'accept', value: 'text/event-stream' }]]\n\n    // 11. Set request's cache mode to \"no-store\".\n    initRequest.cache = 'no-store'\n\n    // 12. Set request's initiator type to \"other\".\n    initRequest.initiator = 'other'\n\n    initRequest.urlList = [new URL(this.#url)]\n\n    // 13. Set ev's request to request.\n    this.#request = makeRequest(initRequest)\n\n    this.#connect()\n  }\n\n  /**\n   * Returns the state of this EventSource object's connection. It can have the\n   * values described below.\n   * @returns {ReadyState}\n   * @readonly\n   */\n  get readyState () {\n    return this.#readyState\n  }\n\n  /**\n   * Returns the URL providing the event stream.\n   * @readonly\n   * @returns {string}\n   */\n  get url () {\n    return this.#url\n  }\n\n  /**\n   * Returns a boolean indicating whether the EventSource object was\n   * instantiated with CORS credentials set (true), or not (false, the default).\n   */\n  get withCredentials () {\n    return this.#withCredentials\n  }\n\n  #connect () {\n    if (this.#readyState === CLOSED) return\n\n    this.#readyState = CONNECTING\n\n    const fetchParams = {\n      request: this.#request,\n      dispatcher: this.#dispatcher\n    }\n\n    // 14. Let processEventSourceEndOfBody given response res be the following step: if res is not a network error, then reestablish the connection.\n    const processEventSourceEndOfBody = (response) => {\n      if (!isNetworkError(response)) {\n        return this.#reconnect()\n      }\n    }\n\n    // 15. Fetch request, with processResponseEndOfBody set to processEventSourceEndOfBody...\n    fetchParams.processResponseEndOfBody = processEventSourceEndOfBody\n\n    // and processResponse set to the following steps given response res:\n    fetchParams.processResponse = (response) => {\n      // 1. If res is an aborted network error, then fail the connection.\n\n      if (isNetworkError(response)) {\n        // 1. When a user agent is to fail the connection, the user agent\n        // must queue a task which, if the readyState attribute is set to a\n        // value other than CLOSED, sets the readyState attribute to CLOSED\n        // and fires an event named error at the EventSource object. Once the\n        // user agent has failed the connection, it does not attempt to\n        // reconnect.\n        if (response.aborted) {\n          this.close()\n          this.dispatchEvent(new Event('error'))\n          return\n          // 2. Otherwise, if res is a network error, then reestablish the\n          // connection, unless the user agent knows that to be futile, in\n          // which case the user agent may fail the connection.\n        } else {\n          this.#reconnect()\n          return\n        }\n      }\n\n      // 3. Otherwise, if res's status is not 200, or if res's `Content-Type`\n      // is not `text/event-stream`, then fail the connection.\n      const contentType = response.headersList.get('content-type', true)\n      const mimeType = contentType !== null ? parseMIMEType(contentType) : 'failure'\n      const contentTypeValid = mimeType !== 'failure' && mimeType.essence === 'text/event-stream'\n      if (\n        response.status !== 200 ||\n        contentTypeValid === false\n      ) {\n        this.close()\n        this.dispatchEvent(new Event('error'))\n        return\n      }\n\n      // 4. Otherwise, announce the connection and interpret res's body\n      // line by line.\n\n      // When a user agent is to announce the connection, the user agent\n      // must queue a task which, if the readyState attribute is set to a\n      // value other than CLOSED, sets the readyState attribute to OPEN\n      // and fires an event named open at the EventSource object.\n      // @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model\n      this.#readyState = OPEN\n      this.dispatchEvent(new Event('open'))\n\n      // If redirected to a different origin, set the origin to the new origin.\n      this.#state.origin = response.urlList[response.urlList.length - 1].origin\n\n      const eventSourceStream = new EventSourceStream({\n        eventSourceSettings: this.#state,\n        push: (event) => {\n          this.dispatchEvent(createFastMessageEvent(\n            event.type,\n            event.options\n          ))\n        }\n      })\n\n      pipeline(response.body.stream,\n        eventSourceStream,\n        (error) => {\n          if (\n            error?.aborted === false\n          ) {\n            this.close()\n            this.dispatchEvent(new Event('error'))\n          }\n        })\n    }\n\n    this.#controller = fetching(fetchParams)\n  }\n\n  /**\n   * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model\n   * @returns {void}\n   */\n  #reconnect () {\n    // When a user agent is to reestablish the connection, the user agent must\n    // run the following steps. These steps are run in parallel, not as part of\n    // a task. (The tasks that it queues, of course, are run like normal tasks\n    // and not themselves in parallel.)\n\n    // 1. Queue a task to run the following steps:\n\n    //   1. If the readyState attribute is set to CLOSED, abort the task.\n    if (this.#readyState === CLOSED) return\n\n    //   2. Set the readyState attribute to CONNECTING.\n    this.#readyState = CONNECTING\n\n    //   3. Fire an event named error at the EventSource object.\n    this.dispatchEvent(new Event('error'))\n\n    // 2. Wait a delay equal to the reconnection time of the event source.\n    setTimeout(() => {\n      // 5. Queue a task to run the following steps:\n\n      //   1. If the EventSource object's readyState attribute is not set to\n      //      CONNECTING, then return.\n      if (this.#readyState !== CONNECTING) return\n\n      //   2. Let request be the EventSource object's request.\n      //   3. If the EventSource object's last event ID string is not the empty\n      //      string, then:\n      //      1. Let lastEventIDValue be the EventSource object's last event ID\n      //         string, encoded as UTF-8.\n      //      2. Set (`Last-Event-ID`, lastEventIDValue) in request's header\n      //         list.\n      if (this.#state.lastEventId.length) {\n        this.#request.headersList.set('last-event-id', this.#state.lastEventId, true)\n      }\n\n      //   4. Fetch request and process the response obtained in this fashion, if any, as described earlier in this section.\n      this.#connect()\n    }, this.#state.reconnectionTime)?.unref()\n  }\n\n  /**\n   * Closes the connection, if any, and sets the readyState attribute to\n   * CLOSED.\n   */\n  close () {\n    webidl.brandCheck(this, EventSource)\n\n    if (this.#readyState === CLOSED) return\n    this.#readyState = CLOSED\n    this.#controller.abort()\n    this.#request = null\n  }\n\n  get onopen () {\n    return this.#events.open\n  }\n\n  set onopen (fn) {\n    if (this.#events.open) {\n      this.removeEventListener('open', this.#events.open)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('open', listener)\n      this.#events.open = fn\n    } else {\n      this.#events.open = null\n    }\n  }\n\n  get onmessage () {\n    return this.#events.message\n  }\n\n  set onmessage (fn) {\n    if (this.#events.message) {\n      this.removeEventListener('message', this.#events.message)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('message', listener)\n      this.#events.message = fn\n    } else {\n      this.#events.message = null\n    }\n  }\n\n  get onerror () {\n    return this.#events.error\n  }\n\n  set onerror (fn) {\n    if (this.#events.error) {\n      this.removeEventListener('error', this.#events.error)\n    }\n\n    const listener = webidl.converters.EventHandlerNonNull(fn)\n\n    if (listener !== null) {\n      this.addEventListener('error', listener)\n      this.#events.error = fn\n    } else {\n      this.#events.error = null\n    }\n  }\n}\n\nconst constantsPropertyDescriptors = {\n  CONNECTING: {\n    __proto__: null,\n    configurable: false,\n    enumerable: true,\n    value: CONNECTING,\n    writable: false\n  },\n  OPEN: {\n    __proto__: null,\n    configurable: false,\n    enumerable: true,\n    value: OPEN,\n    writable: false\n  },\n  CLOSED: {\n    __proto__: null,\n    configurable: false,\n    enumerable: true,\n    value: CLOSED,\n    writable: false\n  }\n}\n\nObject.defineProperties(EventSource, constantsPropertyDescriptors)\nObject.defineProperties(EventSource.prototype, constantsPropertyDescriptors)\n\nObject.defineProperties(EventSource.prototype, {\n  close: kEnumerableProperty,\n  onerror: kEnumerableProperty,\n  onmessage: kEnumerableProperty,\n  onopen: kEnumerableProperty,\n  readyState: kEnumerableProperty,\n  url: kEnumerableProperty,\n  withCredentials: kEnumerableProperty\n})\n\nwebidl.converters.EventSourceInitDict = webidl.dictionaryConverter([\n  {\n    key: 'withCredentials',\n    converter: webidl.converters.boolean,\n    defaultValue: () => false\n  },\n  {\n    key: 'dispatcher', // undici only\n    converter: webidl.converters.any\n  },\n  {\n    key: 'node', // undici only\n    converter: webidl.dictionaryConverter([\n      {\n        key: 'reconnectionTime',\n        converter: webidl.converters['unsigned long'],\n        defaultValue: () => defaultReconnectionTime\n      },\n      {\n        key: 'dispatcher',\n        converter: webidl.converters.any\n      }\n    ]),\n    defaultValue: () => ({})\n  }\n])\n\nmodule.exports = {\n  EventSource,\n  defaultReconnectionTime\n}\n", "'use strict'\n\nconst Client = require('./lib/dispatcher/client')\nconst Dispatcher = require('./lib/dispatcher/dispatcher')\nconst Pool = require('./lib/dispatcher/pool')\nconst BalancedPool = require('./lib/dispatcher/balanced-pool')\nconst RoundRobinPool = require('./lib/dispatcher/round-robin-pool')\nconst Agent = require('./lib/dispatcher/agent')\nconst ProxyAgent = require('./lib/dispatcher/proxy-agent')\nconst Socks5ProxyAgent = require('./lib/dispatcher/socks5-proxy-agent')\nconst EnvHttpProxyAgent = require('./lib/dispatcher/env-http-proxy-agent')\nconst RetryAgent = require('./lib/dispatcher/retry-agent')\nconst H2CClient = require('./lib/dispatcher/h2c-client')\nconst errors = require('./lib/core/errors')\nconst util = require('./lib/core/util')\nconst { InvalidArgumentError } = errors\nconst api = require('./lib/api')\nconst buildConnector = require('./lib/core/connect')\nconst MockClient = require('./lib/mock/mock-client')\nconst { MockCallHistory, MockCallHistoryLog } = require('./lib/mock/mock-call-history')\nconst MockAgent = require('./lib/mock/mock-agent')\nconst MockPool = require('./lib/mock/mock-pool')\nconst SnapshotAgent = require('./lib/mock/snapshot-agent')\nconst mockErrors = require('./lib/mock/mock-errors')\nconst RetryHandler = require('./lib/handler/retry-handler')\nconst { getGlobalDispatcher, setGlobalDispatcher } = require('./lib/global')\nconst DecoratorHandler = require('./lib/handler/decorator-handler')\nconst RedirectHandler = require('./lib/handler/redirect-handler')\n\nObject.assign(Dispatcher.prototype, api)\n\nmodule.exports.Dispatcher = Dispatcher\nmodule.exports.Client = Client\nmodule.exports.Pool = Pool\nmodule.exports.BalancedPool = BalancedPool\nmodule.exports.RoundRobinPool = RoundRobinPool\nmodule.exports.Agent = Agent\nmodule.exports.ProxyAgent = ProxyAgent\nmodule.exports.Socks5ProxyAgent = Socks5ProxyAgent\nmodule.exports.EnvHttpProxyAgent = EnvHttpProxyAgent\nmodule.exports.RetryAgent = RetryAgent\nmodule.exports.H2CClient = H2CClient\nmodule.exports.RetryHandler = RetryHandler\n\nmodule.exports.DecoratorHandler = DecoratorHandler\nmodule.exports.RedirectHandler = RedirectHandler\nmodule.exports.interceptors = {\n  redirect: require('./lib/interceptor/redirect'),\n  responseError: require('./lib/interceptor/response-error'),\n  retry: require('./lib/interceptor/retry'),\n  dump: require('./lib/interceptor/dump'),\n  dns: require('./lib/interceptor/dns'),\n  cache: require('./lib/interceptor/cache'),\n  decompress: require('./lib/interceptor/decompress'),\n  deduplicate: require('./lib/interceptor/deduplicate')\n}\n\nmodule.exports.cacheStores = {\n  MemoryCacheStore: require('./lib/cache/memory-cache-store')\n}\n\nconst SqliteCacheStore = require('./lib/cache/sqlite-cache-store')\nmodule.exports.cacheStores.SqliteCacheStore = SqliteCacheStore\n\nmodule.exports.buildConnector = buildConnector\nmodule.exports.errors = errors\nmodule.exports.util = {\n  parseHeaders: util.parseHeaders,\n  headerNameToString: util.headerNameToString\n}\n\nfunction makeDispatcher (fn) {\n  return (url, opts, handler) => {\n    if (typeof opts === 'function') {\n      handler = opts\n      opts = null\n    }\n\n    if (!url || (typeof url !== 'string' && typeof url !== 'object' && !(url instanceof URL))) {\n      throw new InvalidArgumentError('invalid url')\n    }\n\n    if (opts != null && typeof opts !== 'object') {\n      throw new InvalidArgumentError('invalid opts')\n    }\n\n    if (opts && opts.path != null) {\n      if (typeof opts.path !== 'string') {\n        throw new InvalidArgumentError('invalid opts.path')\n      }\n\n      let path = opts.path\n      if (!opts.path.startsWith('/')) {\n        path = `/${path}`\n      }\n\n      url = new URL(util.parseOrigin(url).origin + path)\n    } else {\n      if (!opts) {\n        opts = typeof url === 'object' ? url : {}\n      }\n\n      url = util.parseURL(url)\n    }\n\n    const { agent, dispatcher = getGlobalDispatcher() } = opts\n\n    if (agent) {\n      throw new InvalidArgumentError('unsupported opts.agent. Did you mean opts.client?')\n    }\n\n    return fn.call(dispatcher, {\n      ...opts,\n      origin: url.origin,\n      path: url.search ? `${url.pathname}${url.search}` : url.pathname,\n      method: opts.method || (opts.body ? 'PUT' : 'GET')\n    }, handler)\n  }\n}\n\nmodule.exports.setGlobalDispatcher = setGlobalDispatcher\nmodule.exports.getGlobalDispatcher = getGlobalDispatcher\n\nconst fetchImpl = require('./lib/web/fetch').fetch\n\n// Capture __filename at module load time for stack trace augmentation.\n// This may be undefined when bundled in environments like Node.js internals.\nconst currentFilename = typeof __filename !== 'undefined' ? __filename : undefined\n\nfunction appendFetchStackTrace (err, filename) {\n  if (!err || typeof err !== 'object') {\n    return\n  }\n\n  const stack = typeof err.stack === 'string' ? err.stack : ''\n  const normalizedFilename = filename.replace(/\\\\/g, '/')\n\n  if (stack && (stack.includes(filename) || stack.includes(normalizedFilename))) {\n    return\n  }\n\n  const capture = {}\n  Error.captureStackTrace(capture, appendFetchStackTrace)\n\n  if (!capture.stack) {\n    return\n  }\n\n  const captureLines = capture.stack.split('\\n').slice(1).join('\\n')\n\n  err.stack = stack ? `${stack}\\n${captureLines}` : capture.stack\n}\n\nmodule.exports.fetch = function fetch (init, options = undefined) {\n  return fetchImpl(init, options).catch(err => {\n    if (currentFilename) {\n      appendFetchStackTrace(err, currentFilename)\n    } else if (err && typeof err === 'object') {\n      Error.captureStackTrace(err, module.exports.fetch)\n    }\n    throw err\n  })\n}\nmodule.exports.Headers = require('./lib/web/fetch/headers').Headers\nmodule.exports.Response = require('./lib/web/fetch/response').Response\nmodule.exports.Request = require('./lib/web/fetch/request').Request\nmodule.exports.FormData = require('./lib/web/fetch/formdata').FormData\n\nconst { setGlobalOrigin, getGlobalOrigin } = require('./lib/web/fetch/global')\n\nmodule.exports.setGlobalOrigin = setGlobalOrigin\nmodule.exports.getGlobalOrigin = getGlobalOrigin\n\nconst { CacheStorage } = require('./lib/web/cache/cachestorage')\nconst { kConstruct } = require('./lib/core/symbols')\n\nmodule.exports.caches = new CacheStorage(kConstruct)\n\nconst { deleteCookie, getCookies, getSetCookies, setCookie, parseCookie } = require('./lib/web/cookies')\n\nmodule.exports.deleteCookie = deleteCookie\nmodule.exports.getCookies = getCookies\nmodule.exports.getSetCookies = getSetCookies\nmodule.exports.setCookie = setCookie\nmodule.exports.parseCookie = parseCookie\n\nconst { parseMIMEType, serializeAMimeType } = require('./lib/web/fetch/data-url')\n\nmodule.exports.parseMIMEType = parseMIMEType\nmodule.exports.serializeAMimeType = serializeAMimeType\n\nconst { CloseEvent, ErrorEvent, MessageEvent } = require('./lib/web/websocket/events')\nconst { WebSocket, ping } = require('./lib/web/websocket/websocket')\nmodule.exports.WebSocket = WebSocket\nmodule.exports.CloseEvent = CloseEvent\nmodule.exports.ErrorEvent = ErrorEvent\nmodule.exports.MessageEvent = MessageEvent\nmodule.exports.ping = ping\n\nmodule.exports.WebSocketStream = require('./lib/web/websocket/stream/websocketstream').WebSocketStream\nmodule.exports.WebSocketError = require('./lib/web/websocket/stream/websocketerror').WebSocketError\n\nmodule.exports.request = makeDispatcher(api.request)\nmodule.exports.stream = makeDispatcher(api.stream)\nmodule.exports.pipeline = makeDispatcher(api.pipeline)\nmodule.exports.connect = makeDispatcher(api.connect)\nmodule.exports.upgrade = makeDispatcher(api.upgrade)\n\nmodule.exports.MockClient = MockClient\nmodule.exports.MockCallHistory = MockCallHistory\nmodule.exports.MockCallHistoryLog = MockCallHistoryLog\nmodule.exports.MockPool = MockPool\nmodule.exports.MockAgent = MockAgent\nmodule.exports.SnapshotAgent = SnapshotAgent\nmodule.exports.mockErrors = mockErrors\n\nconst { EventSource } = require('./lib/web/eventsource/eventsource')\n\nmodule.exports.EventSource = EventSource\n\nfunction install () {\n  globalThis.fetch = module.exports.fetch\n  globalThis.Headers = module.exports.Headers\n  globalThis.Response = module.exports.Response\n  globalThis.Request = module.exports.Request\n  globalThis.FormData = module.exports.FormData\n  globalThis.WebSocket = module.exports.WebSocket\n  globalThis.CloseEvent = module.exports.CloseEvent\n  globalThis.ErrorEvent = module.exports.ErrorEvent\n  globalThis.MessageEvent = module.exports.MessageEvent\n  globalThis.EventSource = module.exports.EventSource\n}\n\nmodule.exports.install = install\n", "const commander = require('commander');\n\nexports = module.exports = {};\n\n// Return a different global program than commander,\n// and don't also return it as default export.\nexports.program = new commander.Command();\n\n/**\n * Expose classes. The FooT versions are just types, so return Commander original implementations!\n */\n\nexports.Argument = commander.Argument;\nexports.Command = commander.Command;\nexports.CommanderError = commander.CommanderError;\nexports.Help = commander.Help;\nexports.InvalidArgumentError = commander.InvalidArgumentError;\nexports.InvalidOptionArgumentError = commander.InvalidArgumentError; // Deprecated\nexports.Option = commander.Option;\n\nexports.createCommand = (name) => new commander.Command(name);\nexports.createOption = (flags, description) =>\n  new commander.Option(flags, description);\nexports.createArgument = (name, description) =>\n  new commander.Argument(name, description);\n", "// This is a generated file. Do not edit.\nmodule.exports.Space_Separator = /[\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/\nmodule.exports.ID_Start = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE83\\uDE86-\\uDE89\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]/\nmodule.exports.ID_Continue = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u08D4-\\u08E1\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u09FC\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9-\\u0AFF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C80-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D00-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D54-\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1CD0-\\u1CD2\\u1CD4-\\u1CF9\\u1D00-\\u1DF9\\u1DFB-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE3E\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC00-\\uDC4A\\uDC50-\\uDC59\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDE00-\\uDE3E\\uDE47\\uDE50-\\uDE83\\uDE86-\\uDE99\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD47\\uDD50-\\uDD59]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6\\uDD00-\\uDD4A\\uDD50-\\uDD59]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/\n", "const unicode = require('../lib/unicode')\n\nmodule.exports = {\n    isSpaceSeparator (c) {\n        return typeof c === 'string' && unicode.Space_Separator.test(c)\n    },\n\n    isIdStartChar (c) {\n        return typeof c === 'string' && (\n            (c >= 'a' && c <= 'z') ||\n        (c >= 'A' && c <= 'Z') ||\n        (c === '$') || (c === '_') ||\n        unicode.ID_Start.test(c)\n        )\n    },\n\n    isIdContinueChar (c) {\n        return typeof c === 'string' && (\n            (c >= 'a' && c <= 'z') ||\n        (c >= 'A' && c <= 'Z') ||\n        (c >= '0' && c <= '9') ||\n        (c === '$') || (c === '_') ||\n        (c === '\\u200C') || (c === '\\u200D') ||\n        unicode.ID_Continue.test(c)\n        )\n    },\n\n    isDigit (c) {\n        return typeof c === 'string' && /[0-9]/.test(c)\n    },\n\n    isHexDigit (c) {\n        return typeof c === 'string' && /[0-9A-Fa-f]/.test(c)\n    },\n}\n", "const util = require('./util')\n\nlet source\nlet parseState\nlet stack\nlet pos\nlet line\nlet column\nlet token\nlet key\nlet root\n\nmodule.exports = function parse (text, reviver) {\n    source = String(text)\n    parseState = 'start'\n    stack = []\n    pos = 0\n    line = 1\n    column = 0\n    token = undefined\n    key = undefined\n    root = undefined\n\n    do {\n        token = lex()\n\n        // This code is unreachable.\n        // if (!parseStates[parseState]) {\n        //     throw invalidParseState()\n        // }\n\n        parseStates[parseState]()\n    } while (token.type !== 'eof')\n\n    if (typeof reviver === 'function') {\n        return internalize({'': root}, '', reviver)\n    }\n\n    return root\n}\n\nfunction internalize (holder, name, reviver) {\n    const value = holder[name]\n    if (value != null && typeof value === 'object') {\n        if (Array.isArray(value)) {\n            for (let i = 0; i < value.length; i++) {\n                const key = String(i)\n                const replacement = internalize(value, key, reviver)\n                if (replacement === undefined) {\n                    delete value[key]\n                } else {\n                    Object.defineProperty(value, key, {\n                        value: replacement,\n                        writable: true,\n                        enumerable: true,\n                        configurable: true,\n                    })\n                }\n            }\n        } else {\n            for (const key in value) {\n                const replacement = internalize(value, key, reviver)\n                if (replacement === undefined) {\n                    delete value[key]\n                } else {\n                    Object.defineProperty(value, key, {\n                        value: replacement,\n                        writable: true,\n                        enumerable: true,\n                        configurable: true,\n                    })\n                }\n            }\n        }\n    }\n\n    return reviver.call(holder, name, value)\n}\n\nlet lexState\nlet buffer\nlet doubleQuote\nlet sign\nlet c\n\nfunction lex () {\n    lexState = 'default'\n    buffer = ''\n    doubleQuote = false\n    sign = 1\n\n    for (;;) {\n        c = peek()\n\n        // This code is unreachable.\n        // if (!lexStates[lexState]) {\n        //     throw invalidLexState(lexState)\n        // }\n\n        const token = lexStates[lexState]()\n        if (token) {\n            return token\n        }\n    }\n}\n\nfunction peek () {\n    if (source[pos]) {\n        return String.fromCodePoint(source.codePointAt(pos))\n    }\n}\n\nfunction read () {\n    const c = peek()\n\n    if (c === '\\n') {\n        line++\n        column = 0\n    } else if (c) {\n        column += c.length\n    } else {\n        column++\n    }\n\n    if (c) {\n        pos += c.length\n    }\n\n    return c\n}\n\nconst lexStates = {\n    default () {\n        switch (c) {\n        case '\\t':\n        case '\\v':\n        case '\\f':\n        case ' ':\n        case '\\u00A0':\n        case '\\uFEFF':\n        case '\\n':\n        case '\\r':\n        case '\\u2028':\n        case '\\u2029':\n            read()\n            return\n\n        case '/':\n            read()\n            lexState = 'comment'\n            return\n\n        case undefined:\n            read()\n            return newToken('eof')\n        }\n\n        if (util.isSpaceSeparator(c)) {\n            read()\n            return\n        }\n\n        // This code is unreachable.\n        // if (!lexStates[parseState]) {\n        //     throw invalidLexState(parseState)\n        // }\n\n        return lexStates[parseState]()\n    },\n\n    comment () {\n        switch (c) {\n        case '*':\n            read()\n            lexState = 'multiLineComment'\n            return\n\n        case '/':\n            read()\n            lexState = 'singleLineComment'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    multiLineComment () {\n        switch (c) {\n        case '*':\n            read()\n            lexState = 'multiLineCommentAsterisk'\n            return\n\n        case undefined:\n            throw invalidChar(read())\n        }\n\n        read()\n    },\n\n    multiLineCommentAsterisk () {\n        switch (c) {\n        case '*':\n            read()\n            return\n\n        case '/':\n            read()\n            lexState = 'default'\n            return\n\n        case undefined:\n            throw invalidChar(read())\n        }\n\n        read()\n        lexState = 'multiLineComment'\n    },\n\n    singleLineComment () {\n        switch (c) {\n        case '\\n':\n        case '\\r':\n        case '\\u2028':\n        case '\\u2029':\n            read()\n            lexState = 'default'\n            return\n\n        case undefined:\n            read()\n            return newToken('eof')\n        }\n\n        read()\n    },\n\n    value () {\n        switch (c) {\n        case '{':\n        case '[':\n            return newToken('punctuator', read())\n\n        case 'n':\n            read()\n            literal('ull')\n            return newToken('null', null)\n\n        case 't':\n            read()\n            literal('rue')\n            return newToken('boolean', true)\n\n        case 'f':\n            read()\n            literal('alse')\n            return newToken('boolean', false)\n\n        case '-':\n        case '+':\n            if (read() === '-') {\n                sign = -1\n            }\n\n            lexState = 'sign'\n            return\n\n        case '.':\n            buffer = read()\n            lexState = 'decimalPointLeading'\n            return\n\n        case '0':\n            buffer = read()\n            lexState = 'zero'\n            return\n\n        case '1':\n        case '2':\n        case '3':\n        case '4':\n        case '5':\n        case '6':\n        case '7':\n        case '8':\n        case '9':\n            buffer = read()\n            lexState = 'decimalInteger'\n            return\n\n        case 'I':\n            read()\n            literal('nfinity')\n            return newToken('numeric', Infinity)\n\n        case 'N':\n            read()\n            literal('aN')\n            return newToken('numeric', NaN)\n\n        case '\"':\n        case \"'\":\n            doubleQuote = (read() === '\"')\n            buffer = ''\n            lexState = 'string'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    identifierNameStartEscape () {\n        if (c !== 'u') {\n            throw invalidChar(read())\n        }\n\n        read()\n        const u = unicodeEscape()\n        switch (u) {\n        case '$':\n        case '_':\n            break\n\n        default:\n            if (!util.isIdStartChar(u)) {\n                throw invalidIdentifier()\n            }\n\n            break\n        }\n\n        buffer += u\n        lexState = 'identifierName'\n    },\n\n    identifierName () {\n        switch (c) {\n        case '$':\n        case '_':\n        case '\\u200C':\n        case '\\u200D':\n            buffer += read()\n            return\n\n        case '\\\\':\n            read()\n            lexState = 'identifierNameEscape'\n            return\n        }\n\n        if (util.isIdContinueChar(c)) {\n            buffer += read()\n            return\n        }\n\n        return newToken('identifier', buffer)\n    },\n\n    identifierNameEscape () {\n        if (c !== 'u') {\n            throw invalidChar(read())\n        }\n\n        read()\n        const u = unicodeEscape()\n        switch (u) {\n        case '$':\n        case '_':\n        case '\\u200C':\n        case '\\u200D':\n            break\n\n        default:\n            if (!util.isIdContinueChar(u)) {\n                throw invalidIdentifier()\n            }\n\n            break\n        }\n\n        buffer += u\n        lexState = 'identifierName'\n    },\n\n    sign () {\n        switch (c) {\n        case '.':\n            buffer = read()\n            lexState = 'decimalPointLeading'\n            return\n\n        case '0':\n            buffer = read()\n            lexState = 'zero'\n            return\n\n        case '1':\n        case '2':\n        case '3':\n        case '4':\n        case '5':\n        case '6':\n        case '7':\n        case '8':\n        case '9':\n            buffer = read()\n            lexState = 'decimalInteger'\n            return\n\n        case 'I':\n            read()\n            literal('nfinity')\n            return newToken('numeric', sign * Infinity)\n\n        case 'N':\n            read()\n            literal('aN')\n            return newToken('numeric', NaN)\n        }\n\n        throw invalidChar(read())\n    },\n\n    zero () {\n        switch (c) {\n        case '.':\n            buffer += read()\n            lexState = 'decimalPoint'\n            return\n\n        case 'e':\n        case 'E':\n            buffer += read()\n            lexState = 'decimalExponent'\n            return\n\n        case 'x':\n        case 'X':\n            buffer += read()\n            lexState = 'hexadecimal'\n            return\n        }\n\n        return newToken('numeric', sign * 0)\n    },\n\n    decimalInteger () {\n        switch (c) {\n        case '.':\n            buffer += read()\n            lexState = 'decimalPoint'\n            return\n\n        case 'e':\n        case 'E':\n            buffer += read()\n            lexState = 'decimalExponent'\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read()\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    decimalPointLeading () {\n        if (util.isDigit(c)) {\n            buffer += read()\n            lexState = 'decimalFraction'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    decimalPoint () {\n        switch (c) {\n        case 'e':\n        case 'E':\n            buffer += read()\n            lexState = 'decimalExponent'\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read()\n            lexState = 'decimalFraction'\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    decimalFraction () {\n        switch (c) {\n        case 'e':\n        case 'E':\n            buffer += read()\n            lexState = 'decimalExponent'\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read()\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    decimalExponent () {\n        switch (c) {\n        case '+':\n        case '-':\n            buffer += read()\n            lexState = 'decimalExponentSign'\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read()\n            lexState = 'decimalExponentInteger'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    decimalExponentSign () {\n        if (util.isDigit(c)) {\n            buffer += read()\n            lexState = 'decimalExponentInteger'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    decimalExponentInteger () {\n        if (util.isDigit(c)) {\n            buffer += read()\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    hexadecimal () {\n        if (util.isHexDigit(c)) {\n            buffer += read()\n            lexState = 'hexadecimalInteger'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    hexadecimalInteger () {\n        if (util.isHexDigit(c)) {\n            buffer += read()\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    string () {\n        switch (c) {\n        case '\\\\':\n            read()\n            buffer += escape()\n            return\n\n        case '\"':\n            if (doubleQuote) {\n                read()\n                return newToken('string', buffer)\n            }\n\n            buffer += read()\n            return\n\n        case \"'\":\n            if (!doubleQuote) {\n                read()\n                return newToken('string', buffer)\n            }\n\n            buffer += read()\n            return\n\n        case '\\n':\n        case '\\r':\n            throw invalidChar(read())\n\n        case '\\u2028':\n        case '\\u2029':\n            separatorChar(c)\n            break\n\n        case undefined:\n            throw invalidChar(read())\n        }\n\n        buffer += read()\n    },\n\n    start () {\n        switch (c) {\n        case '{':\n        case '[':\n            return newToken('punctuator', read())\n\n        // This code is unreachable since the default lexState handles eof.\n        // case undefined:\n        //     return newToken('eof')\n        }\n\n        lexState = 'value'\n    },\n\n    beforePropertyName () {\n        switch (c) {\n        case '$':\n        case '_':\n            buffer = read()\n            lexState = 'identifierName'\n            return\n\n        case '\\\\':\n            read()\n            lexState = 'identifierNameStartEscape'\n            return\n\n        case '}':\n            return newToken('punctuator', read())\n\n        case '\"':\n        case \"'\":\n            doubleQuote = (read() === '\"')\n            lexState = 'string'\n            return\n        }\n\n        if (util.isIdStartChar(c)) {\n            buffer += read()\n            lexState = 'identifierName'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    afterPropertyName () {\n        if (c === ':') {\n            return newToken('punctuator', read())\n        }\n\n        throw invalidChar(read())\n    },\n\n    beforePropertyValue () {\n        lexState = 'value'\n    },\n\n    afterPropertyValue () {\n        switch (c) {\n        case ',':\n        case '}':\n            return newToken('punctuator', read())\n        }\n\n        throw invalidChar(read())\n    },\n\n    beforeArrayValue () {\n        if (c === ']') {\n            return newToken('punctuator', read())\n        }\n\n        lexState = 'value'\n    },\n\n    afterArrayValue () {\n        switch (c) {\n        case ',':\n        case ']':\n            return newToken('punctuator', read())\n        }\n\n        throw invalidChar(read())\n    },\n\n    end () {\n        // This code is unreachable since it's handled by the default lexState.\n        // if (c === undefined) {\n        //     read()\n        //     return newToken('eof')\n        // }\n\n        throw invalidChar(read())\n    },\n}\n\nfunction newToken (type, value) {\n    return {\n        type,\n        value,\n        line,\n        column,\n    }\n}\n\nfunction literal (s) {\n    for (const c of s) {\n        const p = peek()\n\n        if (p !== c) {\n            throw invalidChar(read())\n        }\n\n        read()\n    }\n}\n\nfunction escape () {\n    const c = peek()\n    switch (c) {\n    case 'b':\n        read()\n        return '\\b'\n\n    case 'f':\n        read()\n        return '\\f'\n\n    case 'n':\n        read()\n        return '\\n'\n\n    case 'r':\n        read()\n        return '\\r'\n\n    case 't':\n        read()\n        return '\\t'\n\n    case 'v':\n        read()\n        return '\\v'\n\n    case '0':\n        read()\n        if (util.isDigit(peek())) {\n            throw invalidChar(read())\n        }\n\n        return '\\0'\n\n    case 'x':\n        read()\n        return hexEscape()\n\n    case 'u':\n        read()\n        return unicodeEscape()\n\n    case '\\n':\n    case '\\u2028':\n    case '\\u2029':\n        read()\n        return ''\n\n    case '\\r':\n        read()\n        if (peek() === '\\n') {\n            read()\n        }\n\n        return ''\n\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n        throw invalidChar(read())\n\n    case undefined:\n        throw invalidChar(read())\n    }\n\n    return read()\n}\n\nfunction hexEscape () {\n    let buffer = ''\n    let c = peek()\n\n    if (!util.isHexDigit(c)) {\n        throw invalidChar(read())\n    }\n\n    buffer += read()\n\n    c = peek()\n    if (!util.isHexDigit(c)) {\n        throw invalidChar(read())\n    }\n\n    buffer += read()\n\n    return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nfunction unicodeEscape () {\n    let buffer = ''\n    let count = 4\n\n    while (count-- > 0) {\n        const c = peek()\n        if (!util.isHexDigit(c)) {\n            throw invalidChar(read())\n        }\n\n        buffer += read()\n    }\n\n    return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nconst parseStates = {\n    start () {\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        push()\n    },\n\n    beforePropertyName () {\n        switch (token.type) {\n        case 'identifier':\n        case 'string':\n            key = token.value\n            parseState = 'afterPropertyName'\n            return\n\n        case 'punctuator':\n            // This code is unreachable since it's handled by the lexState.\n            // if (token.value !== '}') {\n            //     throw invalidToken()\n            // }\n\n            pop()\n            return\n\n        case 'eof':\n            throw invalidEOF()\n        }\n\n        // This code is unreachable since it's handled by the lexState.\n        // throw invalidToken()\n    },\n\n    afterPropertyName () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'punctuator' || token.value !== ':') {\n        //     throw invalidToken()\n        // }\n\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        parseState = 'beforePropertyValue'\n    },\n\n    beforePropertyValue () {\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        push()\n    },\n\n    beforeArrayValue () {\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        if (token.type === 'punctuator' && token.value === ']') {\n            pop()\n            return\n        }\n\n        push()\n    },\n\n    afterPropertyValue () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'punctuator') {\n        //     throw invalidToken()\n        // }\n\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        switch (token.value) {\n        case ',':\n            parseState = 'beforePropertyName'\n            return\n\n        case '}':\n            pop()\n        }\n\n        // This code is unreachable since it's handled by the lexState.\n        // throw invalidToken()\n    },\n\n    afterArrayValue () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'punctuator') {\n        //     throw invalidToken()\n        // }\n\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        switch (token.value) {\n        case ',':\n            parseState = 'beforeArrayValue'\n            return\n\n        case ']':\n            pop()\n        }\n\n        // This code is unreachable since it's handled by the lexState.\n        // throw invalidToken()\n    },\n\n    end () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'eof') {\n        //     throw invalidToken()\n        // }\n    },\n}\n\nfunction push () {\n    let value\n\n    switch (token.type) {\n    case 'punctuator':\n        switch (token.value) {\n        case '{':\n            value = {}\n            break\n\n        case '[':\n            value = []\n            break\n        }\n\n        break\n\n    case 'null':\n    case 'boolean':\n    case 'numeric':\n    case 'string':\n        value = token.value\n        break\n\n    // This code is unreachable.\n    // default:\n    //     throw invalidToken()\n    }\n\n    if (root === undefined) {\n        root = value\n    } else {\n        const parent = stack[stack.length - 1]\n        if (Array.isArray(parent)) {\n            parent.push(value)\n        } else {\n            Object.defineProperty(parent, key, {\n                value,\n                writable: true,\n                enumerable: true,\n                configurable: true,\n            })\n        }\n    }\n\n    if (value !== null && typeof value === 'object') {\n        stack.push(value)\n\n        if (Array.isArray(value)) {\n            parseState = 'beforeArrayValue'\n        } else {\n            parseState = 'beforePropertyName'\n        }\n    } else {\n        const current = stack[stack.length - 1]\n        if (current == null) {\n            parseState = 'end'\n        } else if (Array.isArray(current)) {\n            parseState = 'afterArrayValue'\n        } else {\n            parseState = 'afterPropertyValue'\n        }\n    }\n}\n\nfunction pop () {\n    stack.pop()\n\n    const current = stack[stack.length - 1]\n    if (current == null) {\n        parseState = 'end'\n    } else if (Array.isArray(current)) {\n        parseState = 'afterArrayValue'\n    } else {\n        parseState = 'afterPropertyValue'\n    }\n}\n\n// This code is unreachable.\n// function invalidParseState () {\n//     return new Error(`JSON5: invalid parse state '${parseState}'`)\n// }\n\n// This code is unreachable.\n// function invalidLexState (state) {\n//     return new Error(`JSON5: invalid lex state '${state}'`)\n// }\n\nfunction invalidChar (c) {\n    if (c === undefined) {\n        return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n    }\n\n    return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n}\n\nfunction invalidEOF () {\n    return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n}\n\n// This code is unreachable.\n// function invalidToken () {\n//     if (token.type === 'eof') {\n//         return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n//     }\n\n//     const c = String.fromCodePoint(token.value.codePointAt(0))\n//     return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n// }\n\nfunction invalidIdentifier () {\n    column -= 5\n    return syntaxError(`JSON5: invalid identifier character at ${line}:${column}`)\n}\n\nfunction separatorChar (c) {\n    console.warn(`JSON5: '${formatChar(c)}' in strings is not valid ECMAScript; consider escaping`)\n}\n\nfunction formatChar (c) {\n    const replacements = {\n        \"'\": \"\\\\'\",\n        '\"': '\\\\\"',\n        '\\\\': '\\\\\\\\',\n        '\\b': '\\\\b',\n        '\\f': '\\\\f',\n        '\\n': '\\\\n',\n        '\\r': '\\\\r',\n        '\\t': '\\\\t',\n        '\\v': '\\\\v',\n        '\\0': '\\\\0',\n        '\\u2028': '\\\\u2028',\n        '\\u2029': '\\\\u2029',\n    }\n\n    if (replacements[c]) {\n        return replacements[c]\n    }\n\n    if (c < ' ') {\n        const hexString = c.charCodeAt(0).toString(16)\n        return '\\\\x' + ('00' + hexString).substring(hexString.length)\n    }\n\n    return c\n}\n\nfunction syntaxError (message) {\n    const err = new SyntaxError(message)\n    err.lineNumber = line\n    err.columnNumber = column\n    return err\n}\n", "const util = require('./util')\n\nmodule.exports = function stringify (value, replacer, space) {\n    const stack = []\n    let indent = ''\n    let propertyList\n    let replacerFunc\n    let gap = ''\n    let quote\n\n    if (\n        replacer != null &&\n        typeof replacer === 'object' &&\n        !Array.isArray(replacer)\n    ) {\n        space = replacer.space\n        quote = replacer.quote\n        replacer = replacer.replacer\n    }\n\n    if (typeof replacer === 'function') {\n        replacerFunc = replacer\n    } else if (Array.isArray(replacer)) {\n        propertyList = []\n        for (const v of replacer) {\n            let item\n\n            if (typeof v === 'string') {\n                item = v\n            } else if (\n                typeof v === 'number' ||\n                v instanceof String ||\n                v instanceof Number\n            ) {\n                item = String(v)\n            }\n\n            if (item !== undefined && propertyList.indexOf(item) < 0) {\n                propertyList.push(item)\n            }\n        }\n    }\n\n    if (space instanceof Number) {\n        space = Number(space)\n    } else if (space instanceof String) {\n        space = String(space)\n    }\n\n    if (typeof space === 'number') {\n        if (space > 0) {\n            space = Math.min(10, Math.floor(space))\n            gap = '          '.substr(0, space)\n        }\n    } else if (typeof space === 'string') {\n        gap = space.substr(0, 10)\n    }\n\n    return serializeProperty('', {'': value})\n\n    function serializeProperty (key, holder) {\n        let value = holder[key]\n        if (value != null) {\n            if (typeof value.toJSON5 === 'function') {\n                value = value.toJSON5(key)\n            } else if (typeof value.toJSON === 'function') {\n                value = value.toJSON(key)\n            }\n        }\n\n        if (replacerFunc) {\n            value = replacerFunc.call(holder, key, value)\n        }\n\n        if (value instanceof Number) {\n            value = Number(value)\n        } else if (value instanceof String) {\n            value = String(value)\n        } else if (value instanceof Boolean) {\n            value = value.valueOf()\n        }\n\n        switch (value) {\n        case null: return 'null'\n        case true: return 'true'\n        case false: return 'false'\n        }\n\n        if (typeof value === 'string') {\n            return quoteString(value, false)\n        }\n\n        if (typeof value === 'number') {\n            return String(value)\n        }\n\n        if (typeof value === 'object') {\n            return Array.isArray(value) ? serializeArray(value) : serializeObject(value)\n        }\n\n        return undefined\n    }\n\n    function quoteString (value) {\n        const quotes = {\n            \"'\": 0.1,\n            '\"': 0.2,\n        }\n\n        const replacements = {\n            \"'\": \"\\\\'\",\n            '\"': '\\\\\"',\n            '\\\\': '\\\\\\\\',\n            '\\b': '\\\\b',\n            '\\f': '\\\\f',\n            '\\n': '\\\\n',\n            '\\r': '\\\\r',\n            '\\t': '\\\\t',\n            '\\v': '\\\\v',\n            '\\0': '\\\\0',\n            '\\u2028': '\\\\u2028',\n            '\\u2029': '\\\\u2029',\n        }\n\n        let product = ''\n\n        for (let i = 0; i < value.length; i++) {\n            const c = value[i]\n            switch (c) {\n            case \"'\":\n            case '\"':\n                quotes[c]++\n                product += c\n                continue\n\n            case '\\0':\n                if (util.isDigit(value[i + 1])) {\n                    product += '\\\\x00'\n                    continue\n                }\n            }\n\n            if (replacements[c]) {\n                product += replacements[c]\n                continue\n            }\n\n            if (c < ' ') {\n                let hexString = c.charCodeAt(0).toString(16)\n                product += '\\\\x' + ('00' + hexString).substring(hexString.length)\n                continue\n            }\n\n            product += c\n        }\n\n        const quoteChar = quote || Object.keys(quotes).reduce((a, b) => (quotes[a] < quotes[b]) ? a : b)\n\n        product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar])\n\n        return quoteChar + product + quoteChar\n    }\n\n    function serializeObject (value) {\n        if (stack.indexOf(value) >= 0) {\n            throw TypeError('Converting circular structure to JSON5')\n        }\n\n        stack.push(value)\n\n        let stepback = indent\n        indent = indent + gap\n\n        let keys = propertyList || Object.keys(value)\n        let partial = []\n        for (const key of keys) {\n            const propertyString = serializeProperty(key, value)\n            if (propertyString !== undefined) {\n                let member = serializeKey(key) + ':'\n                if (gap !== '') {\n                    member += ' '\n                }\n                member += propertyString\n                partial.push(member)\n            }\n        }\n\n        let final\n        if (partial.length === 0) {\n            final = '{}'\n        } else {\n            let properties\n            if (gap === '') {\n                properties = partial.join(',')\n                final = '{' + properties + '}'\n            } else {\n                let separator = ',\\n' + indent\n                properties = partial.join(separator)\n                final = '{\\n' + indent + properties + ',\\n' + stepback + '}'\n            }\n        }\n\n        stack.pop()\n        indent = stepback\n        return final\n    }\n\n    function serializeKey (key) {\n        if (key.length === 0) {\n            return quoteString(key, true)\n        }\n\n        const firstChar = String.fromCodePoint(key.codePointAt(0))\n        if (!util.isIdStartChar(firstChar)) {\n            return quoteString(key, true)\n        }\n\n        for (let i = firstChar.length; i < key.length; i++) {\n            if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) {\n                return quoteString(key, true)\n            }\n        }\n\n        return key\n    }\n\n    function serializeArray (value) {\n        if (stack.indexOf(value) >= 0) {\n            throw TypeError('Converting circular structure to JSON5')\n        }\n\n        stack.push(value)\n\n        let stepback = indent\n        indent = indent + gap\n\n        let partial = []\n        for (let i = 0; i < value.length; i++) {\n            const propertyString = serializeProperty(String(i), value)\n            partial.push((propertyString !== undefined) ? propertyString : 'null')\n        }\n\n        let final\n        if (partial.length === 0) {\n            final = '[]'\n        } else {\n            if (gap === '') {\n                let properties = partial.join(',')\n                final = '[' + properties + ']'\n            } else {\n                let separator = ',\\n' + indent\n                let properties = partial.join(separator)\n                final = '[\\n' + indent + properties + ',\\n' + stepback + ']'\n            }\n        }\n\n        stack.pop()\n        indent = stepback\n        return final\n    }\n}\n", "const parse = require('./parse')\nconst stringify = require('./stringify')\n\nconst JSON5 = {\n    parse,\n    stringify,\n}\n\nmodule.exports = JSON5\n", "'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n  'major',\n  'premajor',\n  'minor',\n  'preminor',\n  'patch',\n  'prepatch',\n  'prerelease',\n]\n\nmodule.exports = {\n  MAX_LENGTH,\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_SAFE_INTEGER,\n  RELEASE_TYPES,\n  SEMVER_SPEC_VERSION,\n  FLAG_INCLUDE_PRERELEASE: 0b001,\n  FLAG_LOOSE: 0b010,\n}\n", "'use strict'\n\nconst debug = (\n  typeof process === 'object' &&\n  process.env &&\n  process.env.NODE_DEBUG &&\n  /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n  : () => {}\n\nmodule.exports = debug\n", "'use strict'\n\nconst {\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n  ['\\\\s', 1],\n  ['\\\\d', MAX_LENGTH],\n  [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n  for (const [token, max] of safeRegexReplacements) {\n    value = value\n      .split(`${token}*`).join(`${token}{0,${max}}`)\n      .split(`${token}+`).join(`${token}{1,${max}}`)\n  }\n  return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n  const safe = makeSafeRegex(value)\n  const index = R++\n  debug(name, index, value)\n  t[name] = index\n  src[index] = value\n  safeSrc[index] = safe\n  re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n  safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numberic identifiers include numberic identifiers but can be longer.\n// Therefore non-numberic identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups.  The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:${src[t.PRERELEASE]})?${\n                     src[t.BUILD]}?` +\n                   `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:${src[t.PRERELEASELOOSE]})?${\n                          src[t.BUILD]}?` +\n                        `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n              '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n              `(?:${src[t.PRERELEASE]})?` +\n              `(?:${src[t.BUILD]})?` +\n              `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s+-\\\\s+` +\n                   `(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s+-\\\\s+` +\n                        `(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n", "'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n  if (!options) {\n    return emptyOpts\n  }\n\n  if (typeof options !== 'object') {\n    return looseOption\n  }\n\n  return options\n}\nmodule.exports = parseOptions\n", "'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n  if (typeof a === 'number' && typeof b === 'number') {\n    return a === b ? 0 : a < b ? -1 : 1\n  }\n\n  const anum = numeric.test(a)\n  const bnum = numeric.test(b)\n\n  if (anum && bnum) {\n    a = +a\n    b = +b\n  }\n\n  return a === b ? 0\n    : (anum && !bnum) ? -1\n    : (bnum && !anum) ? 1\n    : a < b ? -1\n    : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n  compareIdentifiers,\n  rcompareIdentifiers,\n}\n", "'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n  constructor (version, options) {\n    options = parseOptions(options)\n\n    if (version instanceof SemVer) {\n      if (version.loose === !!options.loose &&\n        version.includePrerelease === !!options.includePrerelease) {\n        return version\n      } else {\n        version = version.version\n      }\n    } else if (typeof version !== 'string') {\n      throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n    }\n\n    if (version.length > MAX_LENGTH) {\n      throw new TypeError(\n        `version is longer than ${MAX_LENGTH} characters`\n      )\n    }\n\n    debug('SemVer', version, options)\n    this.options = options\n    this.loose = !!options.loose\n    // this isn't actually relevant for versions, but keep it so that we\n    // don't run into trouble passing this.options around.\n    this.includePrerelease = !!options.includePrerelease\n\n    const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n    if (!m) {\n      throw new TypeError(`Invalid Version: ${version}`)\n    }\n\n    this.raw = version\n\n    // these are actually numbers\n    this.major = +m[1]\n    this.minor = +m[2]\n    this.patch = +m[3]\n\n    if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n      throw new TypeError('Invalid major version')\n    }\n\n    if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n      throw new TypeError('Invalid minor version')\n    }\n\n    if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n      throw new TypeError('Invalid patch version')\n    }\n\n    // numberify any prerelease numeric ids\n    if (!m[4]) {\n      this.prerelease = []\n    } else {\n      this.prerelease = m[4].split('.').map((id) => {\n        if (/^[0-9]+$/.test(id)) {\n          const num = +id\n          if (num >= 0 && num < MAX_SAFE_INTEGER) {\n            return num\n          }\n        }\n        return id\n      })\n    }\n\n    this.build = m[5] ? m[5].split('.') : []\n    this.format()\n  }\n\n  format () {\n    this.version = `${this.major}.${this.minor}.${this.patch}`\n    if (this.prerelease.length) {\n      this.version += `-${this.prerelease.join('.')}`\n    }\n    return this.version\n  }\n\n  toString () {\n    return this.version\n  }\n\n  compare (other) {\n    debug('SemVer.compare', this.version, this.options, other)\n    if (!(other instanceof SemVer)) {\n      if (typeof other === 'string' && other === this.version) {\n        return 0\n      }\n      other = new SemVer(other, this.options)\n    }\n\n    if (other.version === this.version) {\n      return 0\n    }\n\n    return this.compareMain(other) || this.comparePre(other)\n  }\n\n  compareMain (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    if (this.major < other.major) {\n      return -1\n    }\n    if (this.major > other.major) {\n      return 1\n    }\n    if (this.minor < other.minor) {\n      return -1\n    }\n    if (this.minor > other.minor) {\n      return 1\n    }\n    if (this.patch < other.patch) {\n      return -1\n    }\n    if (this.patch > other.patch) {\n      return 1\n    }\n    return 0\n  }\n\n  comparePre (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    // NOT having a prerelease is > having one\n    if (this.prerelease.length && !other.prerelease.length) {\n      return -1\n    } else if (!this.prerelease.length && other.prerelease.length) {\n      return 1\n    } else if (!this.prerelease.length && !other.prerelease.length) {\n      return 0\n    }\n\n    let i = 0\n    do {\n      const a = this.prerelease[i]\n      const b = other.prerelease[i]\n      debug('prerelease compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  compareBuild (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    let i = 0\n    do {\n      const a = this.build[i]\n      const b = other.build[i]\n      debug('build compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  // preminor will bump the version up to the next minor release, and immediately\n  // down to pre-release. premajor and prepatch work the same way.\n  inc (release, identifier, identifierBase) {\n    if (release.startsWith('pre')) {\n      if (!identifier && identifierBase === false) {\n        throw new Error('invalid increment argument: identifier is empty')\n      }\n      // Avoid an invalid semver results\n      if (identifier) {\n        const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n        if (!match || match[1] !== identifier) {\n          throw new Error(`invalid identifier: ${identifier}`)\n        }\n      }\n    }\n\n    switch (release) {\n      case 'premajor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor = 0\n        this.major++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'preminor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'prepatch':\n        // If this is already a prerelease, it will bump to the next version\n        // drop any prereleases that might already exist, since they are not\n        // relevant at this point.\n        this.prerelease.length = 0\n        this.inc('patch', identifier, identifierBase)\n        this.inc('pre', identifier, identifierBase)\n        break\n      // If the input is a non-prerelease version, this acts the same as\n      // prepatch.\n      case 'prerelease':\n        if (this.prerelease.length === 0) {\n          this.inc('patch', identifier, identifierBase)\n        }\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'release':\n        if (this.prerelease.length === 0) {\n          throw new Error(`version ${this.raw} is not a prerelease`)\n        }\n        this.prerelease.length = 0\n        break\n\n      case 'major':\n        // If this is a pre-major version, bump up to the same major version.\n        // Otherwise increment major.\n        // 1.0.0-5 bumps to 1.0.0\n        // 1.1.0 bumps to 2.0.0\n        if (\n          this.minor !== 0 ||\n          this.patch !== 0 ||\n          this.prerelease.length === 0\n        ) {\n          this.major++\n        }\n        this.minor = 0\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'minor':\n        // If this is a pre-minor version, bump up to the same minor version.\n        // Otherwise increment minor.\n        // 1.2.0-5 bumps to 1.2.0\n        // 1.2.1 bumps to 1.3.0\n        if (this.patch !== 0 || this.prerelease.length === 0) {\n          this.minor++\n        }\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'patch':\n        // If this is not a pre-release version, it will increment the patch.\n        // If it is a pre-release it will bump up to the same patch version.\n        // 1.2.0-5 patches to 1.2.0\n        // 1.2.0 patches to 1.2.1\n        if (this.prerelease.length === 0) {\n          this.patch++\n        }\n        this.prerelease = []\n        break\n      // This probably shouldn't be used publicly.\n      // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n      case 'pre': {\n        const base = Number(identifierBase) ? 1 : 0\n\n        if (this.prerelease.length === 0) {\n          this.prerelease = [base]\n        } else {\n          let i = this.prerelease.length\n          while (--i >= 0) {\n            if (typeof this.prerelease[i] === 'number') {\n              this.prerelease[i]++\n              i = -2\n            }\n          }\n          if (i === -1) {\n            // didn't increment anything\n            if (identifier === this.prerelease.join('.') && identifierBase === false) {\n              throw new Error('invalid increment argument: identifier already exists')\n            }\n            this.prerelease.push(base)\n          }\n        }\n        if (identifier) {\n          // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n          // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n          let prerelease = [identifier, base]\n          if (identifierBase === false) {\n            prerelease = [identifier]\n          }\n          if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n            if (isNaN(this.prerelease[1])) {\n              this.prerelease = prerelease\n            }\n          } else {\n            this.prerelease = prerelease\n          }\n        }\n        break\n      }\n      default:\n        throw new Error(`invalid increment argument: ${release}`)\n    }\n    this.raw = this.format()\n    if (this.build.length) {\n      this.raw += `+${this.build.join('.')}`\n    }\n    return this\n  }\n}\n\nmodule.exports = SemVer\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n  try {\n    return new SemVer(version, options)\n  } catch (er) {\n    if (!throwErrors) {\n      return null\n    }\n    throw er\n  }\n}\n\nmodule.exports = parse\n", "'use strict'\n\nconst parse = require('./parse')\nconst valid = (version, options) => {\n  const v = parse(version, options)\n  return v ? v.version : null\n}\nmodule.exports = valid\n", "'use strict'\n\nconst parse = require('./parse')\nconst clean = (version, options) => {\n  const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n  return s ? s.version : null\n}\nmodule.exports = clean\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n  if (typeof (options) === 'string') {\n    identifierBase = identifier\n    identifier = options\n    options = undefined\n  }\n\n  try {\n    return new SemVer(\n      version instanceof SemVer ? version.version : version,\n      options\n    ).inc(release, identifier, identifierBase).version\n  } catch (er) {\n    return null\n  }\n}\nmodule.exports = inc\n", "'use strict'\n\nconst parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n  const v1 = parse(version1, null, true)\n  const v2 = parse(version2, null, true)\n  const comparison = v1.compare(v2)\n\n  if (comparison === 0) {\n    return null\n  }\n\n  const v1Higher = comparison > 0\n  const highVersion = v1Higher ? v1 : v2\n  const lowVersion = v1Higher ? v2 : v1\n  const highHasPre = !!highVersion.prerelease.length\n  const lowHasPre = !!lowVersion.prerelease.length\n\n  if (lowHasPre && !highHasPre) {\n    // Going from prerelease -> no prerelease requires some special casing\n\n    // If the low version has only a major, then it will always be a major\n    // Some examples:\n    // 1.0.0-1 -> 1.0.0\n    // 1.0.0-1 -> 1.1.1\n    // 1.0.0-1 -> 2.0.0\n    if (!lowVersion.patch && !lowVersion.minor) {\n      return 'major'\n    }\n\n    // If the main part has no difference\n    if (lowVersion.compareMain(highVersion) === 0) {\n      if (lowVersion.minor && !lowVersion.patch) {\n        return 'minor'\n      }\n      return 'patch'\n    }\n  }\n\n  // add the `pre` prefix if we are going to a prerelease version\n  const prefix = highHasPre ? 'pre' : ''\n\n  if (v1.major !== v2.major) {\n    return prefix + 'major'\n  }\n\n  if (v1.minor !== v2.minor) {\n    return prefix + 'minor'\n  }\n\n  if (v1.patch !== v2.patch) {\n    return prefix + 'patch'\n  }\n\n  // high and low are preleases\n  return 'prerelease'\n}\n\nmodule.exports = diff\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n", "'use strict'\n\nconst parse = require('./parse')\nconst prerelease = (version, options) => {\n  const parsed = parse(version, options)\n  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n  new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n", "'use strict'\n\nconst compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n", "'use strict'\n\nconst compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n  const versionA = new SemVer(a, loose)\n  const versionB = new SemVer(b, loose)\n  return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n", "'use strict'\n\nconst compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n", "'use strict'\n\nconst compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n", "'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n", "'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n", "'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n", "'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n", "'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n", "'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n", "'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n  switch (op) {\n    case '===':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a === b\n\n    case '!==':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a !== b\n\n    case '':\n    case '=':\n    case '==':\n      return eq(a, b, loose)\n\n    case '!=':\n      return neq(a, b, loose)\n\n    case '>':\n      return gt(a, b, loose)\n\n    case '>=':\n      return gte(a, b, loose)\n\n    case '<':\n      return lt(a, b, loose)\n\n    case '<=':\n      return lte(a, b, loose)\n\n    default:\n      throw new TypeError(`Invalid operator: ${op}`)\n  }\n}\nmodule.exports = cmp\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version === 'number') {\n    version = String(version)\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  options = options || {}\n\n  let match = null\n  if (!options.rtl) {\n    match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n  } else {\n    // Find the right-most coercible string that does not share\n    // a terminus with a more left-ward coercible string.\n    // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n    // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n    //\n    // Walk through the string checking with a /g regexp\n    // Manually set the index so as to pick up overlapping matches.\n    // Stop when we get a match that ends at the string end, since no\n    // coercible string can be more right-ward without the same terminus.\n    const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n    let next\n    while ((next = coerceRtlRegex.exec(version)) &&\n        (!match || match.index + match[0].length !== version.length)\n    ) {\n      if (!match ||\n            next.index + next[0].length !== match.index + match[0].length) {\n        match = next\n      }\n      coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n    }\n    // leave it in a clean state\n    coerceRtlRegex.lastIndex = -1\n  }\n\n  if (match === null) {\n    return null\n  }\n\n  const major = match[2]\n  const minor = match[3] || '0'\n  const patch = match[4] || '0'\n  const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n  const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n  return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n", "'use strict'\n\nclass LRUCache {\n  constructor () {\n    this.max = 1000\n    this.map = new Map()\n  }\n\n  get (key) {\n    const value = this.map.get(key)\n    if (value === undefined) {\n      return undefined\n    } else {\n      // Remove the key from the map and add it to the end\n      this.map.delete(key)\n      this.map.set(key, value)\n      return value\n    }\n  }\n\n  delete (key) {\n    return this.map.delete(key)\n  }\n\n  set (key, value) {\n    const deleted = this.delete(key)\n\n    if (!deleted && value !== undefined) {\n      // If cache is full, delete the least recently used item\n      if (this.map.size >= this.max) {\n        const firstKey = this.map.keys().next().value\n        this.delete(firstKey)\n      }\n\n      this.map.set(key, value)\n    }\n\n    return this\n  }\n}\n\nmodule.exports = LRUCache\n", "'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n  constructor (range, options) {\n    options = parseOptions(options)\n\n    if (range instanceof Range) {\n      if (\n        range.loose === !!options.loose &&\n        range.includePrerelease === !!options.includePrerelease\n      ) {\n        return range\n      } else {\n        return new Range(range.raw, options)\n      }\n    }\n\n    if (range instanceof Comparator) {\n      // just put it in the set and return\n      this.raw = range.value\n      this.set = [[range]]\n      this.formatted = undefined\n      return this\n    }\n\n    this.options = options\n    this.loose = !!options.loose\n    this.includePrerelease = !!options.includePrerelease\n\n    // First reduce all whitespace as much as possible so we do not have to rely\n    // on potentially slow regexes like \\s*. This is then stored and used for\n    // future error messages as well.\n    this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n    // First, split on ||\n    this.set = this.raw\n      .split('||')\n      // map the range to a 2d array of comparators\n      .map(r => this.parseRange(r.trim()))\n      // throw out any comparator lists that are empty\n      // this generally means that it was not a valid range, which is allowed\n      // in loose mode, but will still throw if the WHOLE range is invalid.\n      .filter(c => c.length)\n\n    if (!this.set.length) {\n      throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n    }\n\n    // if we have any that are not the null set, throw out null sets.\n    if (this.set.length > 1) {\n      // keep the first one, in case they're all null sets\n      const first = this.set[0]\n      this.set = this.set.filter(c => !isNullSet(c[0]))\n      if (this.set.length === 0) {\n        this.set = [first]\n      } else if (this.set.length > 1) {\n        // if we have any that are *, then the range is just *\n        for (const c of this.set) {\n          if (c.length === 1 && isAny(c[0])) {\n            this.set = [c]\n            break\n          }\n        }\n      }\n    }\n\n    this.formatted = undefined\n  }\n\n  get range () {\n    if (this.formatted === undefined) {\n      this.formatted = ''\n      for (let i = 0; i < this.set.length; i++) {\n        if (i > 0) {\n          this.formatted += '||'\n        }\n        const comps = this.set[i]\n        for (let k = 0; k < comps.length; k++) {\n          if (k > 0) {\n            this.formatted += ' '\n          }\n          this.formatted += comps[k].toString().trim()\n        }\n      }\n    }\n    return this.formatted\n  }\n\n  format () {\n    return this.range\n  }\n\n  toString () {\n    return this.range\n  }\n\n  parseRange (range) {\n    // memoize range parsing for performance.\n    // this is a very hot path, and fully deterministic.\n    const memoOpts =\n      (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n      (this.options.loose && FLAG_LOOSE)\n    const memoKey = memoOpts + ':' + range\n    const cached = cache.get(memoKey)\n    if (cached) {\n      return cached\n    }\n\n    const loose = this.options.loose\n    // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n    const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n    range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n    debug('hyphen replace', range)\n\n    // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n    range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n    debug('comparator trim', range)\n\n    // `~ 1.2.3` => `~1.2.3`\n    range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n    debug('tilde trim', range)\n\n    // `^ 1.2.3` => `^1.2.3`\n    range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n    debug('caret trim', range)\n\n    // At this point, the range is completely trimmed and\n    // ready to be split into comparators.\n\n    let rangeList = range\n      .split(' ')\n      .map(comp => parseComparator(comp, this.options))\n      .join(' ')\n      .split(/\\s+/)\n      // >=0.0.0 is equivalent to *\n      .map(comp => replaceGTE0(comp, this.options))\n\n    if (loose) {\n      // in loose mode, throw out any that are not valid comparators\n      rangeList = rangeList.filter(comp => {\n        debug('loose invalid filter', comp, this.options)\n        return !!comp.match(re[t.COMPARATORLOOSE])\n      })\n    }\n    debug('range list', rangeList)\n\n    // if any comparators are the null set, then replace with JUST null set\n    // if more than one comparator, remove any * comparators\n    // also, don't include the same comparator more than once\n    const rangeMap = new Map()\n    const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n    for (const comp of comparators) {\n      if (isNullSet(comp)) {\n        return [comp]\n      }\n      rangeMap.set(comp.value, comp)\n    }\n    if (rangeMap.size > 1 && rangeMap.has('')) {\n      rangeMap.delete('')\n    }\n\n    const result = [...rangeMap.values()]\n    cache.set(memoKey, result)\n    return result\n  }\n\n  intersects (range, options) {\n    if (!(range instanceof Range)) {\n      throw new TypeError('a Range is required')\n    }\n\n    return this.set.some((thisComparators) => {\n      return (\n        isSatisfiable(thisComparators, options) &&\n        range.set.some((rangeComparators) => {\n          return (\n            isSatisfiable(rangeComparators, options) &&\n            thisComparators.every((thisComparator) => {\n              return rangeComparators.every((rangeComparator) => {\n                return thisComparator.intersects(rangeComparator, options)\n              })\n            })\n          )\n        })\n      )\n    })\n  }\n\n  // if ANY of the sets match ALL of its comparators, then pass\n  test (version) {\n    if (!version) {\n      return false\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    for (let i = 0; i < this.set.length; i++) {\n      if (testSet(this.set[i], version, this.options)) {\n        return true\n      }\n    }\n    return false\n  }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n  safeRe: re,\n  t,\n  comparatorTrimReplace,\n  tildeTrimReplace,\n  caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n  let result = true\n  const remainingComparators = comparators.slice()\n  let testComparator = remainingComparators.pop()\n\n  while (result && remainingComparators.length) {\n    result = remainingComparators.every((otherComparator) => {\n      return testComparator.intersects(otherComparator, options)\n    })\n\n    testComparator = remainingComparators.pop()\n  }\n\n  return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n  comp = comp.replace(re[t.BUILD], '')\n  debug('comp', comp, options)\n  comp = replaceCarets(comp, options)\n  debug('caret', comp)\n  comp = replaceTildes(comp, options)\n  debug('tildes', comp)\n  comp = replaceXRanges(comp, options)\n  debug('xrange', comp)\n  comp = replaceStars(comp, options)\n  debug('stars', comp)\n  return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceTilde(c, options))\n    .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n  const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('tilde', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      // ~1.2 == >=1.2.0 <1.3.0-0\n      ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n    } else if (pr) {\n      debug('replaceTilde pr', pr)\n      ret = `>=${M}.${m}.${p}-${pr\n      } <${M}.${+m + 1}.0-0`\n    } else {\n      // ~1.2.3 == >=1.2.3 <1.3.0-0\n      ret = `>=${M}.${m}.${p\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('tilde return', ret)\n    return ret\n  })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceCaret(c, options))\n    .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n  debug('caret', comp, options)\n  const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n  const z = options.includePrerelease ? '-0' : ''\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('caret', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      if (M === '0') {\n        ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n      } else {\n        ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n      }\n    } else if (pr) {\n      debug('replaceCaret pr', pr)\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p}-${pr\n        } <${+M + 1}.0.0-0`\n      }\n    } else {\n      debug('no pr')\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p\n          }${z} <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p\n          }${z} <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p\n        } <${+M + 1}.0.0-0`\n      }\n    }\n\n    debug('caret return', ret)\n    return ret\n  })\n}\n\nconst replaceXRanges = (comp, options) => {\n  debug('replaceXRanges', comp, options)\n  return comp\n    .split(/\\s+/)\n    .map((c) => replaceXRange(c, options))\n    .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n  comp = comp.trim()\n  const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n  return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n    debug('xRange', comp, ret, gtlt, M, m, p, pr)\n    const xM = isX(M)\n    const xm = xM || isX(m)\n    const xp = xm || isX(p)\n    const anyX = xp\n\n    if (gtlt === '=' && anyX) {\n      gtlt = ''\n    }\n\n    // if we're including prereleases in the match, then we need\n    // to fix this to -0, the lowest possible prerelease value\n    pr = options.includePrerelease ? '-0' : ''\n\n    if (xM) {\n      if (gtlt === '>' || gtlt === '<') {\n        // nothing is allowed\n        ret = '<0.0.0-0'\n      } else {\n        // nothing is forbidden\n        ret = '*'\n      }\n    } else if (gtlt && anyX) {\n      // we know patch is an x, because we have any x at all.\n      // replace X with 0\n      if (xm) {\n        m = 0\n      }\n      p = 0\n\n      if (gtlt === '>') {\n        // >1 => >=2.0.0\n        // >1.2 => >=1.3.0\n        gtlt = '>='\n        if (xm) {\n          M = +M + 1\n          m = 0\n          p = 0\n        } else {\n          m = +m + 1\n          p = 0\n        }\n      } else if (gtlt === '<=') {\n        // <=0.7.x is actually <0.8.0, since any 0.7.x should\n        // pass.  Similarly, <=7.x is actually <8.0.0, etc.\n        gtlt = '<'\n        if (xm) {\n          M = +M + 1\n        } else {\n          m = +m + 1\n        }\n      }\n\n      if (gtlt === '<') {\n        pr = '-0'\n      }\n\n      ret = `${gtlt + M}.${m}.${p}${pr}`\n    } else if (xm) {\n      ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n    } else if (xp) {\n      ret = `>=${M}.${m}.0${pr\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('xRange return', ret)\n\n    return ret\n  })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n  debug('replaceStars', comp, options)\n  // Looseness is ignored here.  star is always as loose as it gets!\n  return comp\n    .trim()\n    .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n  debug('replaceGTE0', comp, options)\n  return comp\n    .trim()\n    .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n  from, fM, fm, fp, fpr, fb,\n  to, tM, tm, tp, tpr) => {\n  if (isX(fM)) {\n    from = ''\n  } else if (isX(fm)) {\n    from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n  } else if (isX(fp)) {\n    from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n  } else if (fpr) {\n    from = `>=${from}`\n  } else {\n    from = `>=${from}${incPr ? '-0' : ''}`\n  }\n\n  if (isX(tM)) {\n    to = ''\n  } else if (isX(tm)) {\n    to = `<${+tM + 1}.0.0-0`\n  } else if (isX(tp)) {\n    to = `<${tM}.${+tm + 1}.0-0`\n  } else if (tpr) {\n    to = `<=${tM}.${tm}.${tp}-${tpr}`\n  } else if (incPr) {\n    to = `<${tM}.${tm}.${+tp + 1}-0`\n  } else {\n    to = `<=${to}`\n  }\n\n  return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n  for (let i = 0; i < set.length; i++) {\n    if (!set[i].test(version)) {\n      return false\n    }\n  }\n\n  if (version.prerelease.length && !options.includePrerelease) {\n    // Find the set of versions that are allowed to have prereleases\n    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n    // That should allow `1.2.3-pr.2` to pass.\n    // However, `1.2.4-alpha.notready` should NOT be allowed,\n    // even though it's within the range set by the comparators.\n    for (let i = 0; i < set.length; i++) {\n      debug(set[i].semver)\n      if (set[i].semver === Comparator.ANY) {\n        continue\n      }\n\n      if (set[i].semver.prerelease.length > 0) {\n        const allowed = set[i].semver\n        if (allowed.major === version.major &&\n            allowed.minor === version.minor &&\n            allowed.patch === version.patch) {\n          return true\n        }\n      }\n    }\n\n    // Version has a -pre, but it's not one of the ones we like.\n    return false\n  }\n\n  return true\n}\n", "'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n  static get ANY () {\n    return ANY\n  }\n\n  constructor (comp, options) {\n    options = parseOptions(options)\n\n    if (comp instanceof Comparator) {\n      if (comp.loose === !!options.loose) {\n        return comp\n      } else {\n        comp = comp.value\n      }\n    }\n\n    comp = comp.trim().split(/\\s+/).join(' ')\n    debug('comparator', comp, options)\n    this.options = options\n    this.loose = !!options.loose\n    this.parse(comp)\n\n    if (this.semver === ANY) {\n      this.value = ''\n    } else {\n      this.value = this.operator + this.semver.version\n    }\n\n    debug('comp', this)\n  }\n\n  parse (comp) {\n    const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n    const m = comp.match(r)\n\n    if (!m) {\n      throw new TypeError(`Invalid comparator: ${comp}`)\n    }\n\n    this.operator = m[1] !== undefined ? m[1] : ''\n    if (this.operator === '=') {\n      this.operator = ''\n    }\n\n    // if it literally is just '>' or '' then allow anything.\n    if (!m[2]) {\n      this.semver = ANY\n    } else {\n      this.semver = new SemVer(m[2], this.options.loose)\n    }\n  }\n\n  toString () {\n    return this.value\n  }\n\n  test (version) {\n    debug('Comparator.test', version, this.options.loose)\n\n    if (this.semver === ANY || version === ANY) {\n      return true\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    return cmp(version, this.operator, this.semver, this.options)\n  }\n\n  intersects (comp, options) {\n    if (!(comp instanceof Comparator)) {\n      throw new TypeError('a Comparator is required')\n    }\n\n    if (this.operator === '') {\n      if (this.value === '') {\n        return true\n      }\n      return new Range(comp.value, options).test(this.value)\n    } else if (comp.operator === '') {\n      if (comp.value === '') {\n        return true\n      }\n      return new Range(this.value, options).test(comp.semver)\n    }\n\n    options = parseOptions(options)\n\n    // Special cases where nothing can possibly be lower\n    if (options.includePrerelease &&\n      (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n      return false\n    }\n    if (!options.includePrerelease &&\n      (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n      return false\n    }\n\n    // Same direction increasing (> or >=)\n    if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n      return true\n    }\n    // Same direction decreasing (< or <=)\n    if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // same SemVer and both sides are inclusive (<= or >=)\n    if (\n      (this.semver.version === comp.semver.version) &&\n      this.operator.includes('=') && comp.operator.includes('=')) {\n      return true\n    }\n    // opposite directions less than\n    if (cmp(this.semver, '<', comp.semver, options) &&\n      this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // opposite directions greater than\n    if (cmp(this.semver, '>', comp.semver, options) &&\n      this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n      return true\n    }\n    return false\n  }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n  try {\n    range = new Range(range, options)\n  } catch (er) {\n    return false\n  }\n  return range.test(version)\n}\nmodule.exports = satisfies\n", "'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n  new Range(range, options).set\n    .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n  let max = null\n  let maxSV = null\n  let rangeObj = null\n  try {\n    rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach((v) => {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!max || maxSV.compare(v) === -1) {\n        // compare(max, v, true)\n        max = v\n        maxSV = new SemVer(max, options)\n      }\n    }\n  })\n  return max\n}\nmodule.exports = maxSatisfying\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n  let min = null\n  let minSV = null\n  let rangeObj = null\n  try {\n    rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach((v) => {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!min || minSV.compare(v) === 1) {\n        // compare(min, v, true)\n        min = v\n        minSV = new SemVer(min, options)\n      }\n    }\n  })\n  return min\n}\nmodule.exports = minSatisfying\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n  range = new Range(range, loose)\n\n  let minver = new SemVer('0.0.0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = new SemVer('0.0.0-0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = null\n  for (let i = 0; i < range.set.length; ++i) {\n    const comparators = range.set[i]\n\n    let setMin = null\n    comparators.forEach((comparator) => {\n      // Clone to avoid manipulating the comparator's semver object.\n      const compver = new SemVer(comparator.semver.version)\n      switch (comparator.operator) {\n        case '>':\n          if (compver.prerelease.length === 0) {\n            compver.patch++\n          } else {\n            compver.prerelease.push(0)\n          }\n          compver.raw = compver.format()\n          /* fallthrough */\n        case '':\n        case '>=':\n          if (!setMin || gt(compver, setMin)) {\n            setMin = compver\n          }\n          break\n        case '<':\n        case '<=':\n          /* Ignore maximum versions */\n          break\n        /* istanbul ignore next */\n        default:\n          throw new Error(`Unexpected operation: ${comparator.operator}`)\n      }\n    })\n    if (setMin && (!minver || gt(minver, setMin))) {\n      minver = setMin\n    }\n  }\n\n  if (minver && range.test(minver)) {\n    return minver\n  }\n\n  return null\n}\nmodule.exports = minVersion\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n  try {\n    // Return '*' instead of '' so that truthiness works.\n    // This will throw if it's invalid anyway\n    return new Range(range, options).range || '*'\n  } catch (er) {\n    return null\n  }\n}\nmodule.exports = validRange\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n  version = new SemVer(version, options)\n  range = new Range(range, options)\n\n  let gtfn, ltefn, ltfn, comp, ecomp\n  switch (hilo) {\n    case '>':\n      gtfn = gt\n      ltefn = lte\n      ltfn = lt\n      comp = '>'\n      ecomp = '>='\n      break\n    case '<':\n      gtfn = lt\n      ltefn = gte\n      ltfn = gt\n      comp = '<'\n      ecomp = '<='\n      break\n    default:\n      throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n  }\n\n  // If it satisfies the range it is not outside\n  if (satisfies(version, range, options)) {\n    return false\n  }\n\n  // From now on, variable terms are as if we're in \"gtr\" mode.\n  // but note that everything is flipped for the \"ltr\" function.\n\n  for (let i = 0; i < range.set.length; ++i) {\n    const comparators = range.set[i]\n\n    let high = null\n    let low = null\n\n    comparators.forEach((comparator) => {\n      if (comparator.semver === ANY) {\n        comparator = new Comparator('>=0.0.0')\n      }\n      high = high || comparator\n      low = low || comparator\n      if (gtfn(comparator.semver, high.semver, options)) {\n        high = comparator\n      } else if (ltfn(comparator.semver, low.semver, options)) {\n        low = comparator\n      }\n    })\n\n    // If the edge version comparator has a operator then our version\n    // isn't outside it\n    if (high.operator === comp || high.operator === ecomp) {\n      return false\n    }\n\n    // If the lowest version comparator has an operator and our version\n    // is less than it then it isn't higher than the range\n    if ((!low.operator || low.operator === comp) &&\n        ltefn(version, low.semver)) {\n      return false\n    } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n      return false\n    }\n  }\n  return true\n}\n\nmodule.exports = outside\n", "'use strict'\n\n// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n", "'use strict'\n\nconst outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n  r1 = new Range(r1, options)\n  r2 = new Range(r2, options)\n  return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n", "'use strict'\n\n// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n  const set = []\n  let first = null\n  let prev = null\n  const v = versions.sort((a, b) => compare(a, b, options))\n  for (const version of v) {\n    const included = satisfies(version, range, options)\n    if (included) {\n      prev = version\n      if (!first) {\n        first = version\n      }\n    } else {\n      if (prev) {\n        set.push([first, prev])\n      }\n      prev = null\n      first = null\n    }\n  }\n  if (first) {\n    set.push([first, null])\n  }\n\n  const ranges = []\n  for (const [min, max] of set) {\n    if (min === max) {\n      ranges.push(min)\n    } else if (!max && min === v[0]) {\n      ranges.push('*')\n    } else if (!max) {\n      ranges.push(`>=${min}`)\n    } else if (min === v[0]) {\n      ranges.push(`<=${max}`)\n    } else {\n      ranges.push(`${min} - ${max}`)\n    }\n  }\n  const simplified = ranges.join(' || ')\n  const original = typeof range.raw === 'string' ? range.raw : String(range)\n  return simplified.length < original.length ? simplified : range\n}\n", "'use strict'\n\nconst Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n//   some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n//   - If C is only the ANY comparator, return true\n//   - Else if in prerelease mode, return false\n//   - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n//   - if in prerelease mode, return true\n//   - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n//   - If GT, and EQ does not satisfy GT, return true (null set)\n//   - If LT, and EQ does not satisfy LT, return true (null set)\n//   - If EQ satisfies every C, return true\n//   - Else return false\n// - If GT\n//   - If GT.semver is lower than any > or >= comp in C, return false\n//   - If GT is >=, and GT.semver does not satisfy every C, return false\n//   - If GT.semver has a prerelease, and not in prerelease mode\n//     - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n//   - If LT.semver is greater than any < or <= comp in C, return false\n//   - If LT is <=, and LT.semver does not satisfy every C, return false\n//   - If GT.semver has a prerelease, and not in prerelease mode\n//     - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n  if (sub === dom) {\n    return true\n  }\n\n  sub = new Range(sub, options)\n  dom = new Range(dom, options)\n  let sawNonNull = false\n\n  OUTER: for (const simpleSub of sub.set) {\n    for (const simpleDom of dom.set) {\n      const isSub = simpleSubset(simpleSub, simpleDom, options)\n      sawNonNull = sawNonNull || isSub !== null\n      if (isSub) {\n        continue OUTER\n      }\n    }\n    // the null set is a subset of everything, but null simple ranges in\n    // a complex range should be ignored.  so if we saw a non-null range,\n    // then we know this isn't a subset, but if EVERY simple range was null,\n    // then it is a subset.\n    if (sawNonNull) {\n      return false\n    }\n  }\n  return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n  if (sub === dom) {\n    return true\n  }\n\n  if (sub.length === 1 && sub[0].semver === ANY) {\n    if (dom.length === 1 && dom[0].semver === ANY) {\n      return true\n    } else if (options.includePrerelease) {\n      sub = minimumVersionWithPreRelease\n    } else {\n      sub = minimumVersion\n    }\n  }\n\n  if (dom.length === 1 && dom[0].semver === ANY) {\n    if (options.includePrerelease) {\n      return true\n    } else {\n      dom = minimumVersion\n    }\n  }\n\n  const eqSet = new Set()\n  let gt, lt\n  for (const c of sub) {\n    if (c.operator === '>' || c.operator === '>=') {\n      gt = higherGT(gt, c, options)\n    } else if (c.operator === '<' || c.operator === '<=') {\n      lt = lowerLT(lt, c, options)\n    } else {\n      eqSet.add(c.semver)\n    }\n  }\n\n  if (eqSet.size > 1) {\n    return null\n  }\n\n  let gtltComp\n  if (gt && lt) {\n    gtltComp = compare(gt.semver, lt.semver, options)\n    if (gtltComp > 0) {\n      return null\n    } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n      return null\n    }\n  }\n\n  // will iterate one or zero times\n  for (const eq of eqSet) {\n    if (gt && !satisfies(eq, String(gt), options)) {\n      return null\n    }\n\n    if (lt && !satisfies(eq, String(lt), options)) {\n      return null\n    }\n\n    for (const c of dom) {\n      if (!satisfies(eq, String(c), options)) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  let higher, lower\n  let hasDomLT, hasDomGT\n  // if the subset has a prerelease, we need a comparator in the superset\n  // with the same tuple and a prerelease, or it's not a subset\n  let needDomLTPre = lt &&\n    !options.includePrerelease &&\n    lt.semver.prerelease.length ? lt.semver : false\n  let needDomGTPre = gt &&\n    !options.includePrerelease &&\n    gt.semver.prerelease.length ? gt.semver : false\n  // exception: <1.2.3-0 is the same as <1.2.3\n  if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n      lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n    needDomLTPre = false\n  }\n\n  for (const c of dom) {\n    hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n    hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n    if (gt) {\n      if (needDomGTPre) {\n        if (c.semver.prerelease && c.semver.prerelease.length &&\n            c.semver.major === needDomGTPre.major &&\n            c.semver.minor === needDomGTPre.minor &&\n            c.semver.patch === needDomGTPre.patch) {\n          needDomGTPre = false\n        }\n      }\n      if (c.operator === '>' || c.operator === '>=') {\n        higher = higherGT(gt, c, options)\n        if (higher === c && higher !== gt) {\n          return false\n        }\n      } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n        return false\n      }\n    }\n    if (lt) {\n      if (needDomLTPre) {\n        if (c.semver.prerelease && c.semver.prerelease.length &&\n            c.semver.major === needDomLTPre.major &&\n            c.semver.minor === needDomLTPre.minor &&\n            c.semver.patch === needDomLTPre.patch) {\n          needDomLTPre = false\n        }\n      }\n      if (c.operator === '<' || c.operator === '<=') {\n        lower = lowerLT(lt, c, options)\n        if (lower === c && lower !== lt) {\n          return false\n        }\n      } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n        return false\n      }\n    }\n    if (!c.operator && (lt || gt) && gtltComp !== 0) {\n      return false\n    }\n  }\n\n  // if there was a < or >, and nothing in the dom, then must be false\n  // UNLESS it was limited by another range in the other direction.\n  // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n  if (gt && hasDomLT && !lt && gtltComp !== 0) {\n    return false\n  }\n\n  if (lt && hasDomGT && !gt && gtltComp !== 0) {\n    return false\n  }\n\n  // we needed a prerelease range in a specific tuple, but didn't get one\n  // then this isn't a subset.  eg >=1.2.3-pre is not a subset of >=1.0.0,\n  // because it includes prereleases in the 1.2.3 tuple\n  if (needDomGTPre || needDomLTPre) {\n    return false\n  }\n\n  return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n  if (!a) {\n    return b\n  }\n  const comp = compare(a.semver, b.semver, options)\n  return comp > 0 ? a\n    : comp < 0 ? b\n    : b.operator === '>' && a.operator === '>=' ? b\n    : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n  if (!a) {\n    return b\n  }\n  const comp = compare(a.semver, b.semver, options)\n  return comp < 0 ? a\n    : comp > 0 ? b\n    : b.operator === '<' && a.operator === '<=' ? b\n    : a\n}\n\nmodule.exports = subset\n", "'use strict'\n\n// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n  parse,\n  valid,\n  clean,\n  inc,\n  diff,\n  major,\n  minor,\n  patch,\n  prerelease,\n  compare,\n  rcompare,\n  compareLoose,\n  compareBuild,\n  sort,\n  rsort,\n  gt,\n  lt,\n  eq,\n  neq,\n  gte,\n  lte,\n  cmp,\n  coerce,\n  Comparator,\n  Range,\n  satisfies,\n  toComparators,\n  maxSatisfying,\n  minSatisfying,\n  minVersion,\n  validRange,\n  outside,\n  gtr,\n  ltr,\n  intersects,\n  simplifyRange,\n  subset,\n  SemVer,\n  re: internalRe.re,\n  src: internalRe.src,\n  tokens: internalRe.t,\n  SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n  RELEASE_TYPES: constants.RELEASE_TYPES,\n  compareIdentifiers: identifiers.compareIdentifiers,\n  rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n", "'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\nconst DEFAULT_MAX_EXTGLOB_RECURSION = 0;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n  DOT_LITERAL,\n  PLUS_LITERAL,\n  QMARK_LITERAL,\n  SLASH_LITERAL,\n  ONE_CHAR,\n  QMARK,\n  END_ANCHOR,\n  DOTS_SLASH,\n  NO_DOT,\n  NO_DOTS,\n  NO_DOT_SLASH,\n  NO_DOTS_SLASH,\n  QMARK_NO_DOT,\n  STAR,\n  START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n  ...POSIX_CHARS,\n\n  SLASH_LITERAL: `[${WIN_SLASH}]`,\n  QMARK: WIN_NO_SLASH,\n  STAR: `${WIN_NO_SLASH}*?`,\n  DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n  NO_DOT: `(?!${DOT_LITERAL})`,\n  NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n  NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n  START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n  END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n  __proto__: null,\n  alnum: 'a-zA-Z0-9',\n  alpha: 'a-zA-Z',\n  ascii: '\\\\x00-\\\\x7F',\n  blank: ' \\\\t',\n  cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n  digit: '0-9',\n  graph: '\\\\x21-\\\\x7E',\n  lower: 'a-z',\n  print: '\\\\x20-\\\\x7E ',\n  punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n  space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n  upper: 'A-Z',\n  word: 'A-Za-z0-9_',\n  xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n  DEFAULT_MAX_EXTGLOB_RECURSION,\n  MAX_LENGTH: 1024 * 64,\n  POSIX_REGEX_SOURCE,\n\n  // regular expressions\n  REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n  REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n  REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n  REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n  REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n  REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n  // Replace globs with equivalent patterns to reduce parsing time.\n  REPLACEMENTS: {\n    __proto__: null,\n    '***': '*',\n    '**/**': '**',\n    '**/**/**': '**'\n  },\n\n  // Digits\n  CHAR_0: 48, /* 0 */\n  CHAR_9: 57, /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 65, /* A */\n  CHAR_LOWERCASE_A: 97, /* a */\n  CHAR_UPPERCASE_Z: 90, /* Z */\n  CHAR_LOWERCASE_Z: 122, /* z */\n\n  CHAR_LEFT_PARENTHESES: 40, /* ( */\n  CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n  CHAR_ASTERISK: 42, /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: 38, /* & */\n  CHAR_AT: 64, /* @ */\n  CHAR_BACKWARD_SLASH: 92, /* \\ */\n  CHAR_CARRIAGE_RETURN: 13, /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n  CHAR_COLON: 58, /* : */\n  CHAR_COMMA: 44, /* , */\n  CHAR_DOT: 46, /* . */\n  CHAR_DOUBLE_QUOTE: 34, /* \" */\n  CHAR_EQUAL: 61, /* = */\n  CHAR_EXCLAMATION_MARK: 33, /* ! */\n  CHAR_FORM_FEED: 12, /* \\f */\n  CHAR_FORWARD_SLASH: 47, /* / */\n  CHAR_GRAVE_ACCENT: 96, /* ` */\n  CHAR_HASH: 35, /* # */\n  CHAR_HYPHEN_MINUS: 45, /* - */\n  CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n  CHAR_LEFT_CURLY_BRACE: 123, /* { */\n  CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n  CHAR_LINE_FEED: 10, /* \\n */\n  CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n  CHAR_PERCENT: 37, /* % */\n  CHAR_PLUS: 43, /* + */\n  CHAR_QUESTION_MARK: 63, /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n  CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n  CHAR_SEMICOLON: 59, /* ; */\n  CHAR_SINGLE_QUOTE: 39, /* ' */\n  CHAR_SPACE: 32, /*   */\n  CHAR_TAB: 9, /* \\t */\n  CHAR_UNDERSCORE: 95, /* _ */\n  CHAR_VERTICAL_LINE: 124, /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n  SEP: path.sep,\n\n  /**\n   * Create EXTGLOB_CHARS\n   */\n\n  extglobChars(chars) {\n    return {\n      '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n      '?': { type: 'qmark', open: '(?:', close: ')?' },\n      '+': { type: 'plus', open: '(?:', close: ')+' },\n      '*': { type: 'star', open: '(?:', close: ')*' },\n      '@': { type: 'at', open: '(?:', close: ')' }\n    };\n  },\n\n  /**\n   * Create GLOB_CHARS\n   */\n\n  globChars(win32) {\n    return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n  }\n};\n", "'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n  REGEX_BACKSLASH,\n  REGEX_REMOVE_BACKSLASH,\n  REGEX_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n  return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n    return match === '\\\\' ? '' : match;\n  });\n};\n\nexports.supportsLookbehinds = () => {\n  const segs = process.version.slice(1).split('.').map(Number);\n  if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n    return true;\n  }\n  return false;\n};\n\nexports.isWindows = options => {\n  if (options && typeof options.windows === 'boolean') {\n    return options.windows;\n  }\n  return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n  const idx = input.lastIndexOf(char, lastIdx);\n  if (idx === -1) return input;\n  if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n  return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n  let output = input;\n  if (output.startsWith('./')) {\n    output = output.slice(2);\n    state.prefix = './';\n  }\n  return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n  const prepend = options.contains ? '' : '^';\n  const append = options.contains ? '' : '$';\n\n  let output = `${prepend}(?:${input})${append}`;\n  if (state.negated === true) {\n    output = `(?:^(?!${output}).*$)`;\n  }\n  return output;\n};\n", "'use strict';\n\nconst utils = require('./utils');\nconst {\n  CHAR_ASTERISK,             /* * */\n  CHAR_AT,                   /* @ */\n  CHAR_BACKWARD_SLASH,       /* \\ */\n  CHAR_COMMA,                /* , */\n  CHAR_DOT,                  /* . */\n  CHAR_EXCLAMATION_MARK,     /* ! */\n  CHAR_FORWARD_SLASH,        /* / */\n  CHAR_LEFT_CURLY_BRACE,     /* { */\n  CHAR_LEFT_PARENTHESES,     /* ( */\n  CHAR_LEFT_SQUARE_BRACKET,  /* [ */\n  CHAR_PLUS,                 /* + */\n  CHAR_QUESTION_MARK,        /* ? */\n  CHAR_RIGHT_CURLY_BRACE,    /* } */\n  CHAR_RIGHT_PARENTHESES,    /* ) */\n  CHAR_RIGHT_SQUARE_BRACKET  /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n  return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n  if (token.isPrefix !== true) {\n    token.depth = token.isGlobstar ? Infinity : 1;\n  }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n  const opts = options || {};\n\n  const length = input.length - 1;\n  const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n  const slashes = [];\n  const tokens = [];\n  const parts = [];\n\n  let str = input;\n  let index = -1;\n  let start = 0;\n  let lastIndex = 0;\n  let isBrace = false;\n  let isBracket = false;\n  let isGlob = false;\n  let isExtglob = false;\n  let isGlobstar = false;\n  let braceEscaped = false;\n  let backslashes = false;\n  let negated = false;\n  let negatedExtglob = false;\n  let finished = false;\n  let braces = 0;\n  let prev;\n  let code;\n  let token = { value: '', depth: 0, isGlob: false };\n\n  const eos = () => index >= length;\n  const peek = () => str.charCodeAt(index + 1);\n  const advance = () => {\n    prev = code;\n    return str.charCodeAt(++index);\n  };\n\n  while (index < length) {\n    code = advance();\n    let next;\n\n    if (code === CHAR_BACKWARD_SLASH) {\n      backslashes = token.backslashes = true;\n      code = advance();\n\n      if (code === CHAR_LEFT_CURLY_BRACE) {\n        braceEscaped = true;\n      }\n      continue;\n    }\n\n    if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n      braces++;\n\n      while (eos() !== true && (code = advance())) {\n        if (code === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (code === CHAR_LEFT_CURLY_BRACE) {\n          braces++;\n          continue;\n        }\n\n        if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (braceEscaped !== true && code === CHAR_COMMA) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (code === CHAR_RIGHT_CURLY_BRACE) {\n          braces--;\n\n          if (braces === 0) {\n            braceEscaped = false;\n            isBrace = token.isBrace = true;\n            finished = true;\n            break;\n          }\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (code === CHAR_FORWARD_SLASH) {\n      slashes.push(index);\n      tokens.push(token);\n      token = { value: '', depth: 0, isGlob: false };\n\n      if (finished === true) continue;\n      if (prev === CHAR_DOT && index === (start + 1)) {\n        start += 2;\n        continue;\n      }\n\n      lastIndex = index + 1;\n      continue;\n    }\n\n    if (opts.noext !== true) {\n      const isExtglobChar = code === CHAR_PLUS\n        || code === CHAR_AT\n        || code === CHAR_ASTERISK\n        || code === CHAR_QUESTION_MARK\n        || code === CHAR_EXCLAMATION_MARK;\n\n      if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n        isGlob = token.isGlob = true;\n        isExtglob = token.isExtglob = true;\n        finished = true;\n        if (code === CHAR_EXCLAMATION_MARK && index === start) {\n          negatedExtglob = true;\n        }\n\n        if (scanToEnd === true) {\n          while (eos() !== true && (code = advance())) {\n            if (code === CHAR_BACKWARD_SLASH) {\n              backslashes = token.backslashes = true;\n              code = advance();\n              continue;\n            }\n\n            if (code === CHAR_RIGHT_PARENTHESES) {\n              isGlob = token.isGlob = true;\n              finished = true;\n              break;\n            }\n          }\n          continue;\n        }\n        break;\n      }\n    }\n\n    if (code === CHAR_ASTERISK) {\n      if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_QUESTION_MARK) {\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_LEFT_SQUARE_BRACKET) {\n      while (eos() !== true && (next = advance())) {\n        if (next === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          isBracket = token.isBracket = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n          break;\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n      negated = token.negated = true;\n      start++;\n      continue;\n    }\n\n    if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n      isGlob = token.isGlob = true;\n\n      if (scanToEnd === true) {\n        while (eos() !== true && (code = advance())) {\n          if (code === CHAR_LEFT_PARENTHESES) {\n            backslashes = token.backslashes = true;\n            code = advance();\n            continue;\n          }\n\n          if (code === CHAR_RIGHT_PARENTHESES) {\n            finished = true;\n            break;\n          }\n        }\n        continue;\n      }\n      break;\n    }\n\n    if (isGlob === true) {\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n  }\n\n  if (opts.noext === true) {\n    isExtglob = false;\n    isGlob = false;\n  }\n\n  let base = str;\n  let prefix = '';\n  let glob = '';\n\n  if (start > 0) {\n    prefix = str.slice(0, start);\n    str = str.slice(start);\n    lastIndex -= start;\n  }\n\n  if (base && isGlob === true && lastIndex > 0) {\n    base = str.slice(0, lastIndex);\n    glob = str.slice(lastIndex);\n  } else if (isGlob === true) {\n    base = '';\n    glob = str;\n  } else {\n    base = str;\n  }\n\n  if (base && base !== '' && base !== '/' && base !== str) {\n    if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n      base = base.slice(0, -1);\n    }\n  }\n\n  if (opts.unescape === true) {\n    if (glob) glob = utils.removeBackslashes(glob);\n\n    if (base && backslashes === true) {\n      base = utils.removeBackslashes(base);\n    }\n  }\n\n  const state = {\n    prefix,\n    input,\n    start,\n    base,\n    glob,\n    isBrace,\n    isBracket,\n    isGlob,\n    isExtglob,\n    isGlobstar,\n    negated,\n    negatedExtglob\n  };\n\n  if (opts.tokens === true) {\n    state.maxDepth = 0;\n    if (!isPathSeparator(code)) {\n      tokens.push(token);\n    }\n    state.tokens = tokens;\n  }\n\n  if (opts.parts === true || opts.tokens === true) {\n    let prevIndex;\n\n    for (let idx = 0; idx < slashes.length; idx++) {\n      const n = prevIndex ? prevIndex + 1 : start;\n      const i = slashes[idx];\n      const value = input.slice(n, i);\n      if (opts.tokens) {\n        if (idx === 0 && start !== 0) {\n          tokens[idx].isPrefix = true;\n          tokens[idx].value = prefix;\n        } else {\n          tokens[idx].value = value;\n        }\n        depth(tokens[idx]);\n        state.maxDepth += tokens[idx].depth;\n      }\n      if (idx !== 0 || value !== '') {\n        parts.push(value);\n      }\n      prevIndex = i;\n    }\n\n    if (prevIndex && prevIndex + 1 < input.length) {\n      const value = input.slice(prevIndex + 1);\n      parts.push(value);\n\n      if (opts.tokens) {\n        tokens[tokens.length - 1].value = value;\n        depth(tokens[tokens.length - 1]);\n        state.maxDepth += tokens[tokens.length - 1].depth;\n      }\n    }\n\n    state.slashes = slashes;\n    state.parts = parts;\n  }\n\n  return state;\n};\n\nmodule.exports = scan;\n", "'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  POSIX_REGEX_SOURCE,\n  REGEX_NON_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_BACKREF,\n  REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n  if (typeof options.expandRange === 'function') {\n    return options.expandRange(...args, options);\n  }\n\n  args.sort();\n  const value = `[${args.join('-')}]`;\n\n  try {\n    /* eslint-disable-next-line no-new */\n    new RegExp(value);\n  } catch (ex) {\n    return args.map(v => utils.escapeRegex(v)).join('..');\n  }\n\n  return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n  return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\nconst splitTopLevel = input => {\n  const parts = [];\n  let bracket = 0;\n  let paren = 0;\n  let quote = 0;\n  let value = '';\n  let escaped = false;\n\n  for (const ch of input) {\n    if (escaped === true) {\n      value += ch;\n      escaped = false;\n      continue;\n    }\n\n    if (ch === '\\\\') {\n      value += ch;\n      escaped = true;\n      continue;\n    }\n\n    if (ch === '\"') {\n      quote = quote === 1 ? 0 : 1;\n      value += ch;\n      continue;\n    }\n\n    if (quote === 0) {\n      if (ch === '[') {\n        bracket++;\n      } else if (ch === ']' && bracket > 0) {\n        bracket--;\n      } else if (bracket === 0) {\n        if (ch === '(') {\n          paren++;\n        } else if (ch === ')' && paren > 0) {\n          paren--;\n        } else if (ch === '|' && paren === 0) {\n          parts.push(value);\n          value = '';\n          continue;\n        }\n      }\n    }\n\n    value += ch;\n  }\n\n  parts.push(value);\n  return parts;\n};\n\nconst isPlainBranch = branch => {\n  let escaped = false;\n\n  for (const ch of branch) {\n    if (escaped === true) {\n      escaped = false;\n      continue;\n    }\n\n    if (ch === '\\\\') {\n      escaped = true;\n      continue;\n    }\n\n    if (/[?*+@!()[\\]{}]/.test(ch)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\nconst normalizeSimpleBranch = branch => {\n  let value = branch.trim();\n  let changed = true;\n\n  while (changed === true) {\n    changed = false;\n\n    if (/^@\\([^\\\\()[\\]{}|]+\\)$/.test(value)) {\n      value = value.slice(2, -1);\n      changed = true;\n    }\n  }\n\n  if (!isPlainBranch(value)) {\n    return;\n  }\n\n  return value.replace(/\\\\(.)/g, '$1');\n};\n\nconst hasRepeatedCharPrefixOverlap = branches => {\n  const values = branches.map(normalizeSimpleBranch).filter(Boolean);\n\n  for (let i = 0; i < values.length; i++) {\n    for (let j = i + 1; j < values.length; j++) {\n      const a = values[i];\n      const b = values[j];\n      const char = a[0];\n\n      if (!char || a !== char.repeat(a.length) || b !== char.repeat(b.length)) {\n        continue;\n      }\n\n      if (a === b || a.startsWith(b) || b.startsWith(a)) {\n        return true;\n      }\n    }\n  }\n\n  return false;\n};\n\nconst parseRepeatedExtglob = (pattern, requireEnd = true) => {\n  if ((pattern[0] !== '+' && pattern[0] !== '*') || pattern[1] !== '(') {\n    return;\n  }\n\n  let bracket = 0;\n  let paren = 0;\n  let quote = 0;\n  let escaped = false;\n\n  for (let i = 1; i < pattern.length; i++) {\n    const ch = pattern[i];\n\n    if (escaped === true) {\n      escaped = false;\n      continue;\n    }\n\n    if (ch === '\\\\') {\n      escaped = true;\n      continue;\n    }\n\n    if (ch === '\"') {\n      quote = quote === 1 ? 0 : 1;\n      continue;\n    }\n\n    if (quote === 1) {\n      continue;\n    }\n\n    if (ch === '[') {\n      bracket++;\n      continue;\n    }\n\n    if (ch === ']' && bracket > 0) {\n      bracket--;\n      continue;\n    }\n\n    if (bracket > 0) {\n      continue;\n    }\n\n    if (ch === '(') {\n      paren++;\n      continue;\n    }\n\n    if (ch === ')') {\n      paren--;\n\n      if (paren === 0) {\n        if (requireEnd === true && i !== pattern.length - 1) {\n          return;\n        }\n\n        return {\n          type: pattern[0],\n          body: pattern.slice(2, i),\n          end: i\n        };\n      }\n    }\n  }\n};\n\nconst getStarExtglobSequenceOutput = pattern => {\n  let index = 0;\n  const chars = [];\n\n  while (index < pattern.length) {\n    const match = parseRepeatedExtglob(pattern.slice(index), false);\n\n    if (!match || match.type !== '*') {\n      return;\n    }\n\n    const branches = splitTopLevel(match.body).map(branch => branch.trim());\n    if (branches.length !== 1) {\n      return;\n    }\n\n    const branch = normalizeSimpleBranch(branches[0]);\n    if (!branch || branch.length !== 1) {\n      return;\n    }\n\n    chars.push(branch);\n    index += match.end + 1;\n  }\n\n  if (chars.length < 1) {\n    return;\n  }\n\n  const source = chars.length === 1\n    ? utils.escapeRegex(chars[0])\n    : `[${chars.map(ch => utils.escapeRegex(ch)).join('')}]`;\n\n  return `${source}*`;\n};\n\nconst repeatedExtglobRecursion = pattern => {\n  let depth = 0;\n  let value = pattern.trim();\n  let match = parseRepeatedExtglob(value);\n\n  while (match) {\n    depth++;\n    value = match.body.trim();\n    match = parseRepeatedExtglob(value);\n  }\n\n  return depth;\n};\n\nconst analyzeRepeatedExtglob = (body, options) => {\n  if (options.maxExtglobRecursion === false) {\n    return { risky: false };\n  }\n\n  const max =\n    typeof options.maxExtglobRecursion === 'number'\n      ? options.maxExtglobRecursion\n      : constants.DEFAULT_MAX_EXTGLOB_RECURSION;\n\n  const branches = splitTopLevel(body).map(branch => branch.trim());\n\n  if (branches.length > 1) {\n    if (\n      branches.some(branch => branch === '') ||\n      branches.some(branch => /^[*?]+$/.test(branch)) ||\n      hasRepeatedCharPrefixOverlap(branches)\n    ) {\n      return { risky: true };\n    }\n  }\n\n  for (const branch of branches) {\n    const safeOutput = getStarExtglobSequenceOutput(branch);\n    if (safeOutput) {\n      return { risky: true, safeOutput };\n    }\n\n    if (repeatedExtglobRecursion(branch) > max) {\n      return { risky: true };\n    }\n  }\n\n  return { risky: false };\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  input = REPLACEMENTS[input] || input;\n\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n  let len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n  const tokens = [bos];\n\n  const capture = opts.capture ? '' : '?:';\n  const win32 = utils.isWindows(options);\n\n  // create constants based on platform, for windows or posix\n  const PLATFORM_CHARS = constants.globChars(win32);\n  const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n  const {\n    DOT_LITERAL,\n    PLUS_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOT_SLASH,\n    NO_DOTS_SLASH,\n    QMARK,\n    QMARK_NO_DOT,\n    STAR,\n    START_ANCHOR\n  } = PLATFORM_CHARS;\n\n  const globstar = opts => {\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const nodot = opts.dot ? '' : NO_DOT;\n  const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n  let star = opts.bash === true ? globstar(opts) : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  // minimatch options support\n  if (typeof opts.noext === 'boolean') {\n    opts.noextglob = opts.noext;\n  }\n\n  const state = {\n    input,\n    index: -1,\n    start: 0,\n    dot: opts.dot === true,\n    consumed: '',\n    output: '',\n    prefix: '',\n    backtrack: false,\n    negated: false,\n    brackets: 0,\n    braces: 0,\n    parens: 0,\n    quotes: 0,\n    globstar: false,\n    tokens\n  };\n\n  input = utils.removePrefix(input, state);\n  len = input.length;\n\n  const extglobs = [];\n  const braces = [];\n  const stack = [];\n  let prev = bos;\n  let value;\n\n  /**\n   * Tokenizing helpers\n   */\n\n  const eos = () => state.index === len - 1;\n  const peek = state.peek = (n = 1) => input[state.index + n];\n  const advance = state.advance = () => input[++state.index] || '';\n  const remaining = () => input.slice(state.index + 1);\n  const consume = (value = '', num = 0) => {\n    state.consumed += value;\n    state.index += num;\n  };\n\n  const append = token => {\n    state.output += token.output != null ? token.output : token.value;\n    consume(token.value);\n  };\n\n  const negate = () => {\n    let count = 1;\n\n    while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n      advance();\n      state.start++;\n      count++;\n    }\n\n    if (count % 2 === 0) {\n      return false;\n    }\n\n    state.negated = true;\n    state.start++;\n    return true;\n  };\n\n  const increment = type => {\n    state[type]++;\n    stack.push(type);\n  };\n\n  const decrement = type => {\n    state[type]--;\n    stack.pop();\n  };\n\n  /**\n   * Push tokens onto the tokens array. This helper speeds up\n   * tokenizing by 1) helping us avoid backtracking as much as possible,\n   * and 2) helping us avoid creating extra tokens when consecutive\n   * characters are plain text. This improves performance and simplifies\n   * lookbehinds.\n   */\n\n  const push = tok => {\n    if (prev.type === 'globstar') {\n      const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n      const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n      if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n        state.output = state.output.slice(0, -prev.output.length);\n        prev.type = 'star';\n        prev.value = '*';\n        prev.output = star;\n        state.output += prev.output;\n      }\n    }\n\n    if (extglobs.length && tok.type !== 'paren') {\n      extglobs[extglobs.length - 1].inner += tok.value;\n    }\n\n    if (tok.value || tok.output) append(tok);\n    if (prev && prev.type === 'text' && tok.type === 'text') {\n      prev.value += tok.value;\n      prev.output = (prev.output || '') + tok.value;\n      return;\n    }\n\n    tok.prev = prev;\n    tokens.push(tok);\n    prev = tok;\n  };\n\n  const extglobOpen = (type, value) => {\n    const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n    token.prev = prev;\n    token.parens = state.parens;\n    token.output = state.output;\n    token.startIndex = state.index;\n    token.tokensIndex = tokens.length;\n    const output = (opts.capture ? '(' : '') + token.open;\n\n    increment('parens');\n    push({ type, value, output: state.output ? '' : ONE_CHAR });\n    push({ type: 'paren', extglob: true, value: advance(), output });\n    extglobs.push(token);\n  };\n\n  const extglobClose = token => {\n    const literal = input.slice(token.startIndex, state.index + 1);\n    const body = input.slice(token.startIndex + 2, state.index);\n    const analysis = analyzeRepeatedExtglob(body, opts);\n\n    if ((token.type === 'plus' || token.type === 'star') && analysis.risky) {\n      const safeOutput = analysis.safeOutput\n        ? (token.output ? '' : ONE_CHAR) + (opts.capture ? `(${analysis.safeOutput})` : analysis.safeOutput)\n        : undefined;\n      const open = tokens[token.tokensIndex];\n\n      open.type = 'text';\n      open.value = literal;\n      open.output = safeOutput || utils.escapeRegex(literal);\n\n      for (let i = token.tokensIndex + 1; i < tokens.length; i++) {\n        tokens[i].value = '';\n        tokens[i].output = '';\n        delete tokens[i].suffix;\n      }\n\n      state.output = token.output + open.output;\n      state.backtrack = true;\n\n      push({ type: 'paren', extglob: true, value, output: '' });\n      decrement('parens');\n      return;\n    }\n\n    let output = token.close + (opts.capture ? ')' : '');\n    let rest;\n\n    if (token.type === 'negate') {\n      let extglobStar = star;\n\n      if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n        extglobStar = globstar(opts);\n      }\n\n      if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n        output = token.close = `)$))${extglobStar}`;\n      }\n\n      if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n        // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n        // In this case, we need to parse the string and use it in the output of the original pattern.\n        // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n        //\n        // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n        const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n        output = token.close = `)${expression})${extglobStar})`;\n      }\n\n      if (token.prev.type === 'bos') {\n        state.negatedExtglob = true;\n      }\n    }\n\n    push({ type: 'paren', extglob: true, value, output });\n    decrement('parens');\n  };\n\n  /**\n   * Fast paths\n   */\n\n  if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n    let backslashes = false;\n\n    let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n      if (first === '\\\\') {\n        backslashes = true;\n        return m;\n      }\n\n      if (first === '?') {\n        if (esc) {\n          return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        if (index === 0) {\n          return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        return QMARK.repeat(chars.length);\n      }\n\n      if (first === '.') {\n        return DOT_LITERAL.repeat(chars.length);\n      }\n\n      if (first === '*') {\n        if (esc) {\n          return esc + first + (rest ? star : '');\n        }\n        return star;\n      }\n      return esc ? m : `\\\\${m}`;\n    });\n\n    if (backslashes === true) {\n      if (opts.unescape === true) {\n        output = output.replace(/\\\\/g, '');\n      } else {\n        output = output.replace(/\\\\+/g, m => {\n          return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n        });\n      }\n    }\n\n    if (output === input && opts.contains === true) {\n      state.output = input;\n      return state;\n    }\n\n    state.output = utils.wrapOutput(output, state, options);\n    return state;\n  }\n\n  /**\n   * Tokenize input until we reach end-of-string\n   */\n\n  while (!eos()) {\n    value = advance();\n\n    if (value === '\\u0000') {\n      continue;\n    }\n\n    /**\n     * Escaped characters\n     */\n\n    if (value === '\\\\') {\n      const next = peek();\n\n      if (next === '/' && opts.bash !== true) {\n        continue;\n      }\n\n      if (next === '.' || next === ';') {\n        continue;\n      }\n\n      if (!next) {\n        value += '\\\\';\n        push({ type: 'text', value });\n        continue;\n      }\n\n      // collapse slashes to reduce potential for exploits\n      const match = /^\\\\+/.exec(remaining());\n      let slashes = 0;\n\n      if (match && match[0].length > 2) {\n        slashes = match[0].length;\n        state.index += slashes;\n        if (slashes % 2 !== 0) {\n          value += '\\\\';\n        }\n      }\n\n      if (opts.unescape === true) {\n        value = advance();\n      } else {\n        value += advance();\n      }\n\n      if (state.brackets === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n    }\n\n    /**\n     * If we're inside a regex character class, continue\n     * until we reach the closing bracket.\n     */\n\n    if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n      if (opts.posix !== false && value === ':') {\n        const inner = prev.value.slice(1);\n        if (inner.includes('[')) {\n          prev.posix = true;\n\n          if (inner.includes(':')) {\n            const idx = prev.value.lastIndexOf('[');\n            const pre = prev.value.slice(0, idx);\n            const rest = prev.value.slice(idx + 2);\n            const posix = POSIX_REGEX_SOURCE[rest];\n            if (posix) {\n              prev.value = pre + posix;\n              state.backtrack = true;\n              advance();\n\n              if (!bos.output && tokens.indexOf(prev) === 1) {\n                bos.output = ONE_CHAR;\n              }\n              continue;\n            }\n          }\n        }\n      }\n\n      if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n        value = `\\\\${value}`;\n      }\n\n      if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n        value = `\\\\${value}`;\n      }\n\n      if (opts.posix === true && value === '!' && prev.value === '[') {\n        value = '^';\n      }\n\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * If we're inside a quoted string, continue\n     * until we reach the closing double quote.\n     */\n\n    if (state.quotes === 1 && value !== '\"') {\n      value = utils.escapeRegex(value);\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * Double quotes\n     */\n\n    if (value === '\"') {\n      state.quotes = state.quotes === 1 ? 0 : 1;\n      if (opts.keepQuotes === true) {\n        push({ type: 'text', value });\n      }\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === '(') {\n      increment('parens');\n      push({ type: 'paren', value });\n      continue;\n    }\n\n    if (value === ')') {\n      if (state.parens === 0 && opts.strictBrackets === true) {\n        throw new SyntaxError(syntaxError('opening', '('));\n      }\n\n      const extglob = extglobs[extglobs.length - 1];\n      if (extglob && state.parens === extglob.parens + 1) {\n        extglobClose(extglobs.pop());\n        continue;\n      }\n\n      push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n      decrement('parens');\n      continue;\n    }\n\n    /**\n     * Square brackets\n     */\n\n    if (value === '[') {\n      if (opts.nobracket === true || !remaining().includes(']')) {\n        if (opts.nobracket !== true && opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('closing', ']'));\n        }\n\n        value = `\\\\${value}`;\n      } else {\n        increment('brackets');\n      }\n\n      push({ type: 'bracket', value });\n      continue;\n    }\n\n    if (value === ']') {\n      if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      if (state.brackets === 0) {\n        if (opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('opening', '['));\n        }\n\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      decrement('brackets');\n\n      const prevValue = prev.value.slice(1);\n      if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n        value = `/${value}`;\n      }\n\n      prev.value += value;\n      append({ value });\n\n      // when literal brackets are explicitly disabled\n      // assume we should match with a regex character class\n      if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n        continue;\n      }\n\n      const escaped = utils.escapeRegex(prev.value);\n      state.output = state.output.slice(0, -prev.value.length);\n\n      // when literal brackets are explicitly enabled\n      // assume we should escape the brackets to match literal characters\n      if (opts.literalBrackets === true) {\n        state.output += escaped;\n        prev.value = escaped;\n        continue;\n      }\n\n      // when the user specifies nothing, try to match both\n      prev.value = `(${capture}${escaped}|${prev.value})`;\n      state.output += prev.value;\n      continue;\n    }\n\n    /**\n     * Braces\n     */\n\n    if (value === '{' && opts.nobrace !== true) {\n      increment('braces');\n\n      const open = {\n        type: 'brace',\n        value,\n        output: '(',\n        outputIndex: state.output.length,\n        tokensIndex: state.tokens.length\n      };\n\n      braces.push(open);\n      push(open);\n      continue;\n    }\n\n    if (value === '}') {\n      const brace = braces[braces.length - 1];\n\n      if (opts.nobrace === true || !brace) {\n        push({ type: 'text', value, output: value });\n        continue;\n      }\n\n      let output = ')';\n\n      if (brace.dots === true) {\n        const arr = tokens.slice();\n        const range = [];\n\n        for (let i = arr.length - 1; i >= 0; i--) {\n          tokens.pop();\n          if (arr[i].type === 'brace') {\n            break;\n          }\n          if (arr[i].type !== 'dots') {\n            range.unshift(arr[i].value);\n          }\n        }\n\n        output = expandRange(range, opts);\n        state.backtrack = true;\n      }\n\n      if (brace.comma !== true && brace.dots !== true) {\n        const out = state.output.slice(0, brace.outputIndex);\n        const toks = state.tokens.slice(brace.tokensIndex);\n        brace.value = brace.output = '\\\\{';\n        value = output = '\\\\}';\n        state.output = out;\n        for (const t of toks) {\n          state.output += (t.output || t.value);\n        }\n      }\n\n      push({ type: 'brace', value, output });\n      decrement('braces');\n      braces.pop();\n      continue;\n    }\n\n    /**\n     * Pipes\n     */\n\n    if (value === '|') {\n      if (extglobs.length > 0) {\n        extglobs[extglobs.length - 1].conditions++;\n      }\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Commas\n     */\n\n    if (value === ',') {\n      let output = value;\n\n      const brace = braces[braces.length - 1];\n      if (brace && stack[stack.length - 1] === 'braces') {\n        brace.comma = true;\n        output = '|';\n      }\n\n      push({ type: 'comma', value, output });\n      continue;\n    }\n\n    /**\n     * Slashes\n     */\n\n    if (value === '/') {\n      // if the beginning of the glob is \"./\", advance the start\n      // to the current index, and don't add the \"./\" characters\n      // to the state. This greatly simplifies lookbehinds when\n      // checking for BOS characters like \"!\" and \".\" (not \"./\")\n      if (prev.type === 'dot' && state.index === state.start + 1) {\n        state.start = state.index + 1;\n        state.consumed = '';\n        state.output = '';\n        tokens.pop();\n        prev = bos; // reset \"prev\" to the first token\n        continue;\n      }\n\n      push({ type: 'slash', value, output: SLASH_LITERAL });\n      continue;\n    }\n\n    /**\n     * Dots\n     */\n\n    if (value === '.') {\n      if (state.braces > 0 && prev.type === 'dot') {\n        if (prev.value === '.') prev.output = DOT_LITERAL;\n        const brace = braces[braces.length - 1];\n        prev.type = 'dots';\n        prev.output += value;\n        prev.value += value;\n        brace.dots = true;\n        continue;\n      }\n\n      if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n        push({ type: 'text', value, output: DOT_LITERAL });\n        continue;\n      }\n\n      push({ type: 'dot', value, output: DOT_LITERAL });\n      continue;\n    }\n\n    /**\n     * Question marks\n     */\n\n    if (value === '?') {\n      const isGroup = prev && prev.value === '(';\n      if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('qmark', value);\n        continue;\n      }\n\n      if (prev && prev.type === 'paren') {\n        const next = peek();\n        let output = value;\n\n        if (next === '<' && !utils.supportsLookbehinds()) {\n          throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n        }\n\n        if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n          output = `\\\\${value}`;\n        }\n\n        push({ type: 'text', value, output });\n        continue;\n      }\n\n      if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n        push({ type: 'qmark', value, output: QMARK_NO_DOT });\n        continue;\n      }\n\n      push({ type: 'qmark', value, output: QMARK });\n      continue;\n    }\n\n    /**\n     * Exclamation\n     */\n\n    if (value === '!') {\n      if (opts.noextglob !== true && peek() === '(') {\n        if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n          extglobOpen('negate', value);\n          continue;\n        }\n      }\n\n      if (opts.nonegate !== true && state.index === 0) {\n        negate();\n        continue;\n      }\n    }\n\n    /**\n     * Plus\n     */\n\n    if (value === '+') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('plus', value);\n        continue;\n      }\n\n      if ((prev && prev.value === '(') || opts.regex === false) {\n        push({ type: 'plus', value, output: PLUS_LITERAL });\n        continue;\n      }\n\n      if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n        push({ type: 'plus', value });\n        continue;\n      }\n\n      push({ type: 'plus', value: PLUS_LITERAL });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value === '@') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        push({ type: 'at', extglob: true, value, output: '' });\n        continue;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value !== '*') {\n      if (value === '$' || value === '^') {\n        value = `\\\\${value}`;\n      }\n\n      const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n      if (match) {\n        value += match[0];\n        state.index += match[0].length;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Stars\n     */\n\n    if (prev && (prev.type === 'globstar' || prev.star === true)) {\n      prev.type = 'star';\n      prev.star = true;\n      prev.value += value;\n      prev.output = star;\n      state.backtrack = true;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    let rest = remaining();\n    if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n      extglobOpen('star', value);\n      continue;\n    }\n\n    if (prev.type === 'star') {\n      if (opts.noglobstar === true) {\n        consume(value);\n        continue;\n      }\n\n      const prior = prev.prev;\n      const before = prior.prev;\n      const isStart = prior.type === 'slash' || prior.type === 'bos';\n      const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n      if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n      const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n      if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      // strip consecutive `/**/`\n      while (rest.slice(0, 3) === '/**') {\n        const after = input[state.index + 4];\n        if (after && after !== '/') {\n          break;\n        }\n        rest = rest.slice(3);\n        consume('/**', 3);\n      }\n\n      if (prior.type === 'bos' && eos()) {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = globstar(opts);\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n        prev.value += value;\n        state.globstar = true;\n        state.output += prior.output + prev.output;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n        const end = rest[1] !== void 0 ? '|$' : '';\n\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n        prev.value += value;\n\n        state.output += prior.output + prev.output;\n        state.globstar = true;\n\n        consume(value + advance());\n\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      if (prior.type === 'bos' && rest[0] === '/') {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value + advance());\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      // remove single star from output\n      state.output = state.output.slice(0, -prev.output.length);\n\n      // reset previous token to globstar\n      prev.type = 'globstar';\n      prev.output = globstar(opts);\n      prev.value += value;\n\n      // reset output with globstar\n      state.output += prev.output;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    const token = { type: 'star', value, output: star };\n\n    if (opts.bash === true) {\n      token.output = '.*?';\n      if (prev.type === 'bos' || prev.type === 'slash') {\n        token.output = nodot + token.output;\n      }\n      push(token);\n      continue;\n    }\n\n    if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n      token.output = value;\n      push(token);\n      continue;\n    }\n\n    if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n      if (prev.type === 'dot') {\n        state.output += NO_DOT_SLASH;\n        prev.output += NO_DOT_SLASH;\n\n      } else if (opts.dot === true) {\n        state.output += NO_DOTS_SLASH;\n        prev.output += NO_DOTS_SLASH;\n\n      } else {\n        state.output += nodot;\n        prev.output += nodot;\n      }\n\n      if (peek() !== '*') {\n        state.output += ONE_CHAR;\n        prev.output += ONE_CHAR;\n      }\n    }\n\n    push(token);\n  }\n\n  while (state.brackets > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n    state.output = utils.escapeLast(state.output, '[');\n    decrement('brackets');\n  }\n\n  while (state.parens > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n    state.output = utils.escapeLast(state.output, '(');\n    decrement('parens');\n  }\n\n  while (state.braces > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n    state.output = utils.escapeLast(state.output, '{');\n    decrement('braces');\n  }\n\n  if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n    push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n  }\n\n  // rebuild the output if we had to backtrack at any point\n  if (state.backtrack === true) {\n    state.output = '';\n\n    for (const token of state.tokens) {\n      state.output += token.output != null ? token.output : token.value;\n\n      if (token.suffix) {\n        state.output += token.suffix;\n      }\n    }\n  }\n\n  return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  const len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  input = REPLACEMENTS[input] || input;\n  const win32 = utils.isWindows(options);\n\n  // create constants based on platform, for windows or posix\n  const {\n    DOT_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOTS,\n    NO_DOTS_SLASH,\n    STAR,\n    START_ANCHOR\n  } = constants.globChars(win32);\n\n  const nodot = opts.dot ? NO_DOTS : NO_DOT;\n  const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n  const capture = opts.capture ? '' : '?:';\n  const state = { negated: false, prefix: '' };\n  let star = opts.bash === true ? '.*?' : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  const globstar = opts => {\n    if (opts.noglobstar === true) return star;\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const create = str => {\n    switch (str) {\n      case '*':\n        return `${nodot}${ONE_CHAR}${star}`;\n\n      case '.*':\n        return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*.*':\n        return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*/*':\n        return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n      case '**':\n        return nodot + globstar(opts);\n\n      case '**/*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n      case '**/*.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '**/.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      default: {\n        const match = /^(.*?)\\.(\\w+)$/.exec(str);\n        if (!match) return;\n\n        const source = create(match[1]);\n        if (!source) return;\n\n        return source + DOT_LITERAL + match[2];\n      }\n    }\n  };\n\n  const output = utils.removePrefix(input, state);\n  let source = create(output);\n\n  if (source && opts.strictSlashes !== true) {\n    source += `${SLASH_LITERAL}?`;\n  }\n\n  return source;\n};\n\nmodule.exports = parse;\n", "'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n  if (Array.isArray(glob)) {\n    const fns = glob.map(input => picomatch(input, options, returnState));\n    const arrayMatcher = str => {\n      for (const isMatch of fns) {\n        const state = isMatch(str);\n        if (state) return state;\n      }\n      return false;\n    };\n    return arrayMatcher;\n  }\n\n  const isState = isObject(glob) && glob.tokens && glob.input;\n\n  if (glob === '' || (typeof glob !== 'string' && !isState)) {\n    throw new TypeError('Expected pattern to be a non-empty string');\n  }\n\n  const opts = options || {};\n  const posix = utils.isWindows(options);\n  const regex = isState\n    ? picomatch.compileRe(glob, options)\n    : picomatch.makeRe(glob, options, false, true);\n\n  const state = regex.state;\n  delete regex.state;\n\n  let isIgnored = () => false;\n  if (opts.ignore) {\n    const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n    isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n  }\n\n  const matcher = (input, returnObject = false) => {\n    const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n    const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n    if (typeof opts.onResult === 'function') {\n      opts.onResult(result);\n    }\n\n    if (isMatch === false) {\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (isIgnored(input)) {\n      if (typeof opts.onIgnore === 'function') {\n        opts.onIgnore(result);\n      }\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (typeof opts.onMatch === 'function') {\n      opts.onMatch(result);\n    }\n    return returnObject ? result : true;\n  };\n\n  if (returnState) {\n    matcher.state = state;\n  }\n\n  return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected input to be a string');\n  }\n\n  if (input === '') {\n    return { isMatch: false, output: '' };\n  }\n\n  const opts = options || {};\n  const format = opts.format || (posix ? utils.toPosixSlashes : null);\n  let match = input === glob;\n  let output = (match && format) ? format(input) : input;\n\n  if (match === false) {\n    output = format ? format(input) : input;\n    match = output === glob;\n  }\n\n  if (match === false || opts.capture === true) {\n    if (opts.matchBase === true || opts.basename === true) {\n      match = picomatch.matchBase(input, regex, options, posix);\n    } else {\n      match = regex.exec(output);\n    }\n  }\n\n  return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n  const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n  return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n  if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n  return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n *   input: '!./foo/*.js',\n *   start: 3,\n *   base: 'foo',\n *   glob: '*.js',\n *   isBrace: false,\n *   isBracket: false,\n *   isGlob: true,\n *   isExtglob: false,\n *   isGlobstar: false,\n *   negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n  if (returnOutput === true) {\n    return state.output;\n  }\n\n  const opts = options || {};\n  const prepend = opts.contains ? '' : '^';\n  const append = opts.contains ? '' : '$';\n\n  let source = `${prepend}(?:${state.output})${append}`;\n  if (state && state.negated === true) {\n    source = `^(?!${source}).*$`;\n  }\n\n  const regex = picomatch.toRegex(source, options);\n  if (returnState === true) {\n    regex.state = state;\n  }\n\n  return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n  if (!input || typeof input !== 'string') {\n    throw new TypeError('Expected a non-empty string');\n  }\n\n  let parsed = { negated: false, fastpaths: true };\n\n  if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n    parsed.output = parse.fastpaths(input, options);\n  }\n\n  if (!parsed.output) {\n    parsed = parse(input, options);\n  }\n\n  return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n  try {\n    const opts = options || {};\n    return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n  } catch (err) {\n    if (options && options.debug === true) throw err;\n    return /$^/;\n  }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n", "'use strict';\n\nmodule.exports = require('./lib/picomatch');\n", "'use strict';\n\nconst fs = require('fs');\nconst { Readable } = require('stream');\nconst sysPath = require('path');\nconst { promisify } = require('util');\nconst picomatch = require('picomatch');\n\nconst readdir = promisify(fs.readdir);\nconst stat = promisify(fs.stat);\nconst lstat = promisify(fs.lstat);\nconst realpath = promisify(fs.realpath);\n\n/**\n * @typedef {Object} EntryInfo\n * @property {String} path\n * @property {String} fullPath\n * @property {fs.Stats=} stats\n * @property {fs.Dirent=} dirent\n * @property {String} basename\n */\n\nconst BANG = '!';\nconst RECURSIVE_ERROR_CODE = 'READDIRP_RECURSIVE_ERROR';\nconst NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP', RECURSIVE_ERROR_CODE]);\nconst FILE_TYPE = 'files';\nconst DIR_TYPE = 'directories';\nconst FILE_DIR_TYPE = 'files_directories';\nconst EVERYTHING_TYPE = 'all';\nconst ALL_TYPES = [FILE_TYPE, DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE];\n\nconst isNormalFlowError = error => NORMAL_FLOW_ERRORS.has(error.code);\nconst [maj, min] = process.versions.node.split('.').slice(0, 2).map(n => Number.parseInt(n, 10));\nconst wantBigintFsStats = process.platform === 'win32' && (maj > 10 || (maj === 10 && min >= 5));\n\nconst normalizeFilter = filter => {\n  if (filter === undefined) return;\n  if (typeof filter === 'function') return filter;\n\n  if (typeof filter === 'string') {\n    const glob = picomatch(filter.trim());\n    return entry => glob(entry.basename);\n  }\n\n  if (Array.isArray(filter)) {\n    const positive = [];\n    const negative = [];\n    for (const item of filter) {\n      const trimmed = item.trim();\n      if (trimmed.charAt(0) === BANG) {\n        negative.push(picomatch(trimmed.slice(1)));\n      } else {\n        positive.push(picomatch(trimmed));\n      }\n    }\n\n    if (negative.length > 0) {\n      if (positive.length > 0) {\n        return entry =>\n          positive.some(f => f(entry.basename)) && !negative.some(f => f(entry.basename));\n      }\n      return entry => !negative.some(f => f(entry.basename));\n    }\n    return entry => positive.some(f => f(entry.basename));\n  }\n};\n\nclass ReaddirpStream extends Readable {\n  static get defaultOptions() {\n    return {\n      root: '.',\n      /* eslint-disable no-unused-vars */\n      fileFilter: (path) => true,\n      directoryFilter: (path) => true,\n      /* eslint-enable no-unused-vars */\n      type: FILE_TYPE,\n      lstat: false,\n      depth: 2147483648,\n      alwaysStat: false\n    };\n  }\n\n  constructor(options = {}) {\n    super({\n      objectMode: true,\n      autoDestroy: true,\n      highWaterMark: options.highWaterMark || 4096\n    });\n    const opts = { ...ReaddirpStream.defaultOptions, ...options };\n    const { root, type } = opts;\n\n    this._fileFilter = normalizeFilter(opts.fileFilter);\n    this._directoryFilter = normalizeFilter(opts.directoryFilter);\n\n    const statMethod = opts.lstat ? lstat : stat;\n    // Use bigint stats if it's windows and stat() supports options (node 10+).\n    if (wantBigintFsStats) {\n      this._stat = path => statMethod(path, { bigint: true });\n    } else {\n      this._stat = statMethod;\n    }\n\n    this._maxDepth = opts.depth;\n    this._wantsDir = [DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type);\n    this._wantsFile = [FILE_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type);\n    this._wantsEverything = type === EVERYTHING_TYPE;\n    this._root = sysPath.resolve(root);\n    this._isDirent = ('Dirent' in fs) && !opts.alwaysStat;\n    this._statsProp = this._isDirent ? 'dirent' : 'stats';\n    this._rdOptions = { encoding: 'utf8', withFileTypes: this._isDirent };\n\n    // Launch stream with one parent, the root dir.\n    this.parents = [this._exploreDir(root, 1)];\n    this.reading = false;\n    this.parent = undefined;\n  }\n\n  async _read(batch) {\n    if (this.reading) return;\n    this.reading = true;\n\n    try {\n      while (!this.destroyed && batch > 0) {\n        const { path, depth, files = [] } = this.parent || {};\n\n        if (files.length > 0) {\n          const slice = files.splice(0, batch).map(dirent => this._formatEntry(dirent, path));\n          for (const entry of await Promise.all(slice)) {\n            if (this.destroyed) return;\n\n            const entryType = await this._getEntryType(entry);\n            if (entryType === 'directory' && this._directoryFilter(entry)) {\n              if (depth <= this._maxDepth) {\n                this.parents.push(this._exploreDir(entry.fullPath, depth + 1));\n              }\n\n              if (this._wantsDir) {\n                this.push(entry);\n                batch--;\n              }\n            } else if ((entryType === 'file' || this._includeAsFile(entry)) && this._fileFilter(entry)) {\n              if (this._wantsFile) {\n                this.push(entry);\n                batch--;\n              }\n            }\n          }\n        } else {\n          const parent = this.parents.pop();\n          if (!parent) {\n            this.push(null);\n            break;\n          }\n          this.parent = await parent;\n          if (this.destroyed) return;\n        }\n      }\n    } catch (error) {\n      this.destroy(error);\n    } finally {\n      this.reading = false;\n    }\n  }\n\n  async _exploreDir(path, depth) {\n    let files;\n    try {\n      files = await readdir(path, this._rdOptions);\n    } catch (error) {\n      this._onError(error);\n    }\n    return { files, depth, path };\n  }\n\n  async _formatEntry(dirent, path) {\n    let entry;\n    try {\n      const basename = this._isDirent ? dirent.name : dirent;\n      const fullPath = sysPath.resolve(sysPath.join(path, basename));\n      entry = { path: sysPath.relative(this._root, fullPath), fullPath, basename };\n      entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath);\n    } catch (err) {\n      this._onError(err);\n    }\n    return entry;\n  }\n\n  _onError(err) {\n    if (isNormalFlowError(err) && !this.destroyed) {\n      this.emit('warn', err);\n    } else {\n      this.destroy(err);\n    }\n  }\n\n  async _getEntryType(entry) {\n    // entry may be undefined, because a warning or an error were emitted\n    // and the statsProp is undefined\n    const stats = entry && entry[this._statsProp];\n    if (!stats) {\n      return;\n    }\n    if (stats.isFile()) {\n      return 'file';\n    }\n    if (stats.isDirectory()) {\n      return 'directory';\n    }\n    if (stats && stats.isSymbolicLink()) {\n      const full = entry.fullPath;\n      try {\n        const entryRealPath = await realpath(full);\n        const entryRealPathStats = await lstat(entryRealPath);\n        if (entryRealPathStats.isFile()) {\n          return 'file';\n        }\n        if (entryRealPathStats.isDirectory()) {\n          const len = entryRealPath.length;\n          if (full.startsWith(entryRealPath) && full.substr(len, 1) === sysPath.sep) {\n            const recursiveError = new Error(\n              `Circular symlink detected: \"${full}\" points to \"${entryRealPath}\"`\n            );\n            recursiveError.code = RECURSIVE_ERROR_CODE;\n            return this._onError(recursiveError);\n          }\n          return 'directory';\n        }\n      } catch (error) {\n        this._onError(error);\n      }\n    }\n  }\n\n  _includeAsFile(entry) {\n    const stats = entry && entry[this._statsProp];\n\n    return stats && this._wantsEverything && !stats.isDirectory();\n  }\n}\n\n/**\n * @typedef {Object} ReaddirpArguments\n * @property {Function=} fileFilter\n * @property {Function=} directoryFilter\n * @property {String=} type\n * @property {Number=} depth\n * @property {String=} root\n * @property {Boolean=} lstat\n * @property {Boolean=} bigint\n */\n\n/**\n * Main function which ends up calling readdirRec and reads all files and directories in given root recursively.\n * @param {String} root Root directory\n * @param {ReaddirpArguments=} options Options to specify root (start directory), filters and recursion depth\n */\nconst readdirp = (root, options = {}) => {\n  let type = options.entryType || options.type;\n  if (type === 'both') type = FILE_DIR_TYPE; // backwards-compatibility\n  if (type) options.type = type;\n  if (!root) {\n    throw new Error('readdirp: root argument is required. Usage: readdirp(root, options)');\n  } else if (typeof root !== 'string') {\n    throw new TypeError('readdirp: root argument must be a string. Usage: readdirp(root, options)');\n  } else if (type && !ALL_TYPES.includes(type)) {\n    throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(', ')}`);\n  }\n\n  options.root = root;\n  return new ReaddirpStream(options);\n};\n\nconst readdirpPromise = (root, options = {}) => {\n  return new Promise((resolve, reject) => {\n    const files = [];\n    readdirp(root, options)\n      .on('data', entry => files.push(entry))\n      .on('end', () => resolve(files))\n      .on('error', error => reject(error));\n  });\n};\n\nreaddirp.promise = readdirpPromise;\nreaddirp.ReaddirpStream = ReaddirpStream;\nreaddirp.default = readdirp;\n\nmodule.exports = readdirp;\n", "/*!\n * normalize-path <https://github.com/jonschlinkert/normalize-path>\n *\n * Copyright (c) 2014-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nmodule.exports = function(path, stripTrailing) {\n  if (typeof path !== 'string') {\n    throw new TypeError('expected path to be a string');\n  }\n\n  if (path === '\\\\' || path === '/') return '/';\n\n  var len = path.length;\n  if (len <= 1) return path;\n\n  // ensure that win32 namespaces has two leading slashes, so that the path is\n  // handled properly by the win32 version of path.parse() after being normalized\n  // https://msdn.microsoft.com/library/windows/desktop/aa365247(v=vs.85).aspx#namespaces\n  var prefix = '';\n  if (len > 4 && path[3] === '\\\\') {\n    var ch = path[2];\n    if ((ch === '?' || ch === '.') && path.slice(0, 2) === '\\\\\\\\') {\n      path = path.slice(2);\n      prefix = '//';\n    }\n  }\n\n  var segs = path.split(/[/\\\\]+/);\n  if (stripTrailing !== false && segs[segs.length - 1] === '') {\n    segs.pop();\n  }\n  return prefix + segs.join('/');\n};\n", "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\nconst picomatch = require('picomatch');\nconst normalizePath = require('normalize-path');\n\n/**\n * @typedef {(testString: string) => boolean} AnymatchFn\n * @typedef {string|RegExp|AnymatchFn} AnymatchPattern\n * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher\n */\nconst BANG = '!';\nconst DEFAULT_OPTIONS = {returnIndex: false};\nconst arrify = (item) => Array.isArray(item) ? item : [item];\n\n/**\n * @param {AnymatchPattern} matcher\n * @param {object} options\n * @returns {AnymatchFn}\n */\nconst createPattern = (matcher, options) => {\n  if (typeof matcher === 'function') {\n    return matcher;\n  }\n  if (typeof matcher === 'string') {\n    const glob = picomatch(matcher, options);\n    return (string) => matcher === string || glob(string);\n  }\n  if (matcher instanceof RegExp) {\n    return (string) => matcher.test(string);\n  }\n  return (string) => false;\n};\n\n/**\n * @param {Array<Function>} patterns\n * @param {Array<Function>} negPatterns\n * @param {String|Array} args\n * @param {Boolean} returnIndex\n * @returns {boolean|number}\n */\nconst matchPatterns = (patterns, negPatterns, args, returnIndex) => {\n  const isList = Array.isArray(args);\n  const _path = isList ? args[0] : args;\n  if (!isList && typeof _path !== 'string') {\n    throw new TypeError('anymatch: second argument must be a string: got ' +\n      Object.prototype.toString.call(_path))\n  }\n  const path = normalizePath(_path, false);\n\n  for (let index = 0; index < negPatterns.length; index++) {\n    const nglob = negPatterns[index];\n    if (nglob(path)) {\n      return returnIndex ? -1 : false;\n    }\n  }\n\n  const applied = isList && [path].concat(args.slice(1));\n  for (let index = 0; index < patterns.length; index++) {\n    const pattern = patterns[index];\n    if (isList ? pattern(...applied) : pattern(path)) {\n      return returnIndex ? index : true;\n    }\n  }\n\n  return returnIndex ? -1 : false;\n};\n\n/**\n * @param {AnymatchMatcher} matchers\n * @param {Array|string} testString\n * @param {object} options\n * @returns {boolean|number|Function}\n */\nconst anymatch = (matchers, testString, options = DEFAULT_OPTIONS) => {\n  if (matchers == null) {\n    throw new TypeError('anymatch: specify first argument');\n  }\n  const opts = typeof options === 'boolean' ? {returnIndex: options} : options;\n  const returnIndex = opts.returnIndex || false;\n\n  // Early cache for matchers.\n  const mtchers = arrify(matchers);\n  const negatedGlobs = mtchers\n    .filter(item => typeof item === 'string' && item.charAt(0) === BANG)\n    .map(item => item.slice(1))\n    .map(item => picomatch(item, opts));\n  const patterns = mtchers\n    .filter(item => typeof item !== 'string' || (typeof item === 'string' && item.charAt(0) !== BANG))\n    .map(matcher => createPattern(matcher, opts));\n\n  if (testString == null) {\n    return (testString, ri = false) => {\n      const returnIndex = typeof ri === 'boolean' ? ri : false;\n      return matchPatterns(patterns, negatedGlobs, testString, returnIndex);\n    }\n  }\n\n  return matchPatterns(patterns, negatedGlobs, testString, returnIndex);\n};\n\nanymatch.default = anymatch;\nmodule.exports = anymatch;\n", "/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function isExtglob(str) {\n  if (typeof str !== 'string' || str === '') {\n    return false;\n  }\n\n  var match;\n  while ((match = /(\\\\).|([@?!+*]\\(.*\\))/g.exec(str))) {\n    if (match[2]) return true;\n    str = str.slice(match.index + match[0].length);\n  }\n\n  return false;\n};\n", "/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nvar isExtglob = require('is-extglob');\nvar chars = { '{': '}', '(': ')', '[': ']'};\nvar strictCheck = function(str) {\n  if (str[0] === '!') {\n    return true;\n  }\n  var index = 0;\n  var pipeIndex = -2;\n  var closeSquareIndex = -2;\n  var closeCurlyIndex = -2;\n  var closeParenIndex = -2;\n  var backSlashIndex = -2;\n  while (index < str.length) {\n    if (str[index] === '*') {\n      return true;\n    }\n\n    if (str[index + 1] === '?' && /[\\].+)]/.test(str[index])) {\n      return true;\n    }\n\n    if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') {\n      if (closeSquareIndex < index) {\n        closeSquareIndex = str.indexOf(']', index);\n      }\n      if (closeSquareIndex > index) {\n        if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n          return true;\n        }\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') {\n      closeCurlyIndex = str.indexOf('}', index);\n      if (closeCurlyIndex > index) {\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') {\n      closeParenIndex = str.indexOf(')', index);\n      if (closeParenIndex > index) {\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') {\n      if (pipeIndex < index) {\n        pipeIndex = str.indexOf('|', index);\n      }\n      if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') {\n        closeParenIndex = str.indexOf(')', pipeIndex);\n        if (closeParenIndex > pipeIndex) {\n          backSlashIndex = str.indexOf('\\\\', pipeIndex);\n          if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n            return true;\n          }\n        }\n      }\n    }\n\n    if (str[index] === '\\\\') {\n      var open = str[index + 1];\n      index += 2;\n      var close = chars[open];\n\n      if (close) {\n        var n = str.indexOf(close, index);\n        if (n !== -1) {\n          index = n + 1;\n        }\n      }\n\n      if (str[index] === '!') {\n        return true;\n      }\n    } else {\n      index++;\n    }\n  }\n  return false;\n};\n\nvar relaxedCheck = function(str) {\n  if (str[0] === '!') {\n    return true;\n  }\n  var index = 0;\n  while (index < str.length) {\n    if (/[*?{}()[\\]]/.test(str[index])) {\n      return true;\n    }\n\n    if (str[index] === '\\\\') {\n      var open = str[index + 1];\n      index += 2;\n      var close = chars[open];\n\n      if (close) {\n        var n = str.indexOf(close, index);\n        if (n !== -1) {\n          index = n + 1;\n        }\n      }\n\n      if (str[index] === '!') {\n        return true;\n      }\n    } else {\n      index++;\n    }\n  }\n  return false;\n};\n\nmodule.exports = function isGlob(str, options) {\n  if (typeof str !== 'string' || str === '') {\n    return false;\n  }\n\n  if (isExtglob(str)) {\n    return true;\n  }\n\n  var check = strictCheck;\n\n  // optionally relax check\n  if (options && options.strict === false) {\n    check = relaxedCheck;\n  }\n\n  return check(str);\n};\n", "'use strict';\n\nvar isGlob = require('is-glob');\nvar pathPosixDirname = require('path').posix.dirname;\nvar isWin32 = require('os').platform() === 'win32';\n\nvar slash = '/';\nvar backslash = /\\\\/g;\nvar enclosure = /[\\{\\[].*[\\}\\]]$/;\nvar globby = /(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/;\nvar escaped = /\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;\n\n/**\n * @param {string} str\n * @param {Object} opts\n * @param {boolean} [opts.flipBackslashes=true]\n * @returns {string}\n */\nmodule.exports = function globParent(str, opts) {\n  var options = Object.assign({ flipBackslashes: true }, opts);\n\n  // flip windows path separators\n  if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {\n    str = str.replace(backslash, slash);\n  }\n\n  // special case for strings ending in enclosure containing path separator\n  if (enclosure.test(str)) {\n    str += slash;\n  }\n\n  // preserves full path in case of trailing path separator\n  str += 'a';\n\n  // remove path parts that are globby\n  do {\n    str = pathPosixDirname(str);\n  } while (isGlob(str) || globby.test(str));\n\n  // remove escape chars and return result\n  return str.replace(escaped, '$1');\n};\n", "'use strict';\n\nexports.isInteger = num => {\n  if (typeof num === 'number') {\n    return Number.isInteger(num);\n  }\n  if (typeof num === 'string' && num.trim() !== '') {\n    return Number.isInteger(Number(num));\n  }\n  return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n  if (limit === false) return false;\n  if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n  return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n  const node = block.nodes[n];\n  if (!node) return;\n\n  if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n    if (node.escaped !== true) {\n      node.value = '\\\\' + node.value;\n      node.escaped = true;\n    }\n  }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n  if (node.type !== 'brace') return false;\n  if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n    node.invalid = true;\n    return true;\n  }\n  return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n  if (block.type !== 'brace') return false;\n  if (block.invalid === true || block.dollar) return true;\n  if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n    block.invalid = true;\n    return true;\n  }\n  if (block.open !== true || block.close !== true) {\n    block.invalid = true;\n    return true;\n  }\n  return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n  if (node.type === 'open' || node.type === 'close') {\n    return true;\n  }\n  return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n  if (node.type === 'text') acc.push(node.value);\n  if (node.type === 'range') node.type = 'text';\n  return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n  const result = [];\n\n  const flat = arr => {\n    for (let i = 0; i < arr.length; i++) {\n      const ele = arr[i];\n\n      if (Array.isArray(ele)) {\n        flat(ele);\n        continue;\n      }\n\n      if (ele !== undefined) {\n        result.push(ele);\n      }\n    }\n    return result;\n  };\n\n  flat(args);\n  return result;\n};\n", "'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n  const stringify = (node, parent = {}) => {\n    const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n    const invalidNode = node.invalid === true && options.escapeInvalid === true;\n    let output = '';\n\n    if (node.value) {\n      if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n        return '\\\\' + node.value;\n      }\n      return node.value;\n    }\n\n    if (node.value) {\n      return node.value;\n    }\n\n    if (node.nodes) {\n      for (const child of node.nodes) {\n        output += stringify(child);\n      }\n    }\n    return output;\n  };\n\n  return stringify(ast);\n};\n\n", "/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n  if (typeof num === 'number') {\n    return num - num === 0;\n  }\n  if (typeof num === 'string' && num.trim() !== '') {\n    return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n  }\n  return false;\n};\n", "/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n  if (isNumber(min) === false) {\n    throw new TypeError('toRegexRange: expected the first argument to be a number');\n  }\n\n  if (max === void 0 || min === max) {\n    return String(min);\n  }\n\n  if (isNumber(max) === false) {\n    throw new TypeError('toRegexRange: expected the second argument to be a number.');\n  }\n\n  let opts = { relaxZeros: true, ...options };\n  if (typeof opts.strictZeros === 'boolean') {\n    opts.relaxZeros = opts.strictZeros === false;\n  }\n\n  let relax = String(opts.relaxZeros);\n  let shorthand = String(opts.shorthand);\n  let capture = String(opts.capture);\n  let wrap = String(opts.wrap);\n  let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n  if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n    return toRegexRange.cache[cacheKey].result;\n  }\n\n  let a = Math.min(min, max);\n  let b = Math.max(min, max);\n\n  if (Math.abs(a - b) === 1) {\n    let result = min + '|' + max;\n    if (opts.capture) {\n      return `(${result})`;\n    }\n    if (opts.wrap === false) {\n      return result;\n    }\n    return `(?:${result})`;\n  }\n\n  let isPadded = hasPadding(min) || hasPadding(max);\n  let state = { min, max, a, b };\n  let positives = [];\n  let negatives = [];\n\n  if (isPadded) {\n    state.isPadded = isPadded;\n    state.maxLen = String(state.max).length;\n  }\n\n  if (a < 0) {\n    let newMin = b < 0 ? Math.abs(b) : 1;\n    negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n    a = state.a = 0;\n  }\n\n  if (b >= 0) {\n    positives = splitToPatterns(a, b, state, opts);\n  }\n\n  state.negatives = negatives;\n  state.positives = positives;\n  state.result = collatePatterns(negatives, positives, opts);\n\n  if (opts.capture === true) {\n    state.result = `(${state.result})`;\n  } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n    state.result = `(?:${state.result})`;\n  }\n\n  toRegexRange.cache[cacheKey] = state;\n  return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n  let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n  let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n  let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n  let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n  return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n  let nines = 1;\n  let zeros = 1;\n\n  let stop = countNines(min, nines);\n  let stops = new Set([max]);\n\n  while (min <= stop && stop <= max) {\n    stops.add(stop);\n    nines += 1;\n    stop = countNines(min, nines);\n  }\n\n  stop = countZeros(max + 1, zeros) - 1;\n\n  while (min < stop && stop <= max) {\n    stops.add(stop);\n    zeros += 1;\n    stop = countZeros(max + 1, zeros) - 1;\n  }\n\n  stops = [...stops];\n  stops.sort(compare);\n  return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n  if (start === stop) {\n    return { pattern: start, count: [], digits: 0 };\n  }\n\n  let zipped = zip(start, stop);\n  let digits = zipped.length;\n  let pattern = '';\n  let count = 0;\n\n  for (let i = 0; i < digits; i++) {\n    let [startDigit, stopDigit] = zipped[i];\n\n    if (startDigit === stopDigit) {\n      pattern += startDigit;\n\n    } else if (startDigit !== '0' || stopDigit !== '9') {\n      pattern += toCharacterClass(startDigit, stopDigit, options);\n\n    } else {\n      count++;\n    }\n  }\n\n  if (count) {\n    pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n  }\n\n  return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n  let ranges = splitToRanges(min, max);\n  let tokens = [];\n  let start = min;\n  let prev;\n\n  for (let i = 0; i < ranges.length; i++) {\n    let max = ranges[i];\n    let obj = rangeToPattern(String(start), String(max), options);\n    let zeros = '';\n\n    if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n      if (prev.count.length > 1) {\n        prev.count.pop();\n      }\n\n      prev.count.push(obj.count[0]);\n      prev.string = prev.pattern + toQuantifier(prev.count);\n      start = max + 1;\n      continue;\n    }\n\n    if (tok.isPadded) {\n      zeros = padZeros(max, tok, options);\n    }\n\n    obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n    tokens.push(obj);\n    start = max + 1;\n    prev = obj;\n  }\n\n  return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n  let result = [];\n\n  for (let ele of arr) {\n    let { string } = ele;\n\n    // only push if _both_ are negative...\n    if (!intersection && !contains(comparison, 'string', string)) {\n      result.push(prefix + string);\n    }\n\n    // or _both_ are positive\n    if (intersection && contains(comparison, 'string', string)) {\n      result.push(prefix + string);\n    }\n  }\n  return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n  let arr = [];\n  for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n  return arr;\n}\n\nfunction compare(a, b) {\n  return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n  return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n  return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n  return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n  let [start = 0, stop = ''] = digits;\n  if (stop || start > 1) {\n    return `{${start + (stop ? ',' + stop : '')}}`;\n  }\n  return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n  return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n  return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n  if (!tok.isPadded) {\n    return value;\n  }\n\n  let diff = Math.abs(tok.maxLen - String(value).length);\n  let relax = options.relaxZeros !== false;\n\n  switch (diff) {\n    case 0:\n      return '';\n    case 1:\n      return relax ? '0?' : '0';\n    case 2:\n      return relax ? '0{0,2}' : '00';\n    default: {\n      return relax ? `0{0,${diff}}` : `0{${diff}}`;\n    }\n  }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n", "/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n  return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n  return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n  let value = `${input}`;\n  let index = -1;\n  if (value[0] === '-') value = value.slice(1);\n  if (value === '0') return false;\n  while (value[++index] === '0');\n  return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n  if (typeof start === 'string' || typeof end === 'string') {\n    return true;\n  }\n  return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n  if (maxLength > 0) {\n    let dash = input[0] === '-' ? '-' : '';\n    if (dash) input = input.slice(1);\n    input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n  }\n  if (toNumber === false) {\n    return String(input);\n  }\n  return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n  let negative = input[0] === '-' ? '-' : '';\n  if (negative) {\n    input = input.slice(1);\n    maxLength--;\n  }\n  while (input.length < maxLength) input = '0' + input;\n  return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options, maxLen) => {\n  parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n  parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n  let prefix = options.capture ? '' : '?:';\n  let positives = '';\n  let negatives = '';\n  let result;\n\n  if (parts.positives.length) {\n    positives = parts.positives.map(v => toMaxLen(String(v), maxLen)).join('|');\n  }\n\n  if (parts.negatives.length) {\n    negatives = `-(${prefix}${parts.negatives.map(v => toMaxLen(String(v), maxLen)).join('|')})`;\n  }\n\n  if (positives && negatives) {\n    result = `${positives}|${negatives}`;\n  } else {\n    result = positives || negatives;\n  }\n\n  if (options.wrap) {\n    return `(${prefix}${result})`;\n  }\n\n  return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n  if (isNumbers) {\n    return toRegexRange(a, b, { wrap: false, ...options });\n  }\n\n  let start = String.fromCharCode(a);\n  if (a === b) return start;\n\n  let stop = String.fromCharCode(b);\n  return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n  if (Array.isArray(start)) {\n    let wrap = options.wrap === true;\n    let prefix = options.capture ? '' : '?:';\n    return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n  }\n  return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n  return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n  if (options.strictRanges === true) throw rangeError([start, end]);\n  return [];\n};\n\nconst invalidStep = (step, options) => {\n  if (options.strictRanges === true) {\n    throw new TypeError(`Expected step \"${step}\" to be a number`);\n  }\n  return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n  let a = Number(start);\n  let b = Number(end);\n\n  if (!Number.isInteger(a) || !Number.isInteger(b)) {\n    if (options.strictRanges === true) throw rangeError([start, end]);\n    return [];\n  }\n\n  // fix negative zero\n  if (a === 0) a = 0;\n  if (b === 0) b = 0;\n\n  let descending = a > b;\n  let startString = String(start);\n  let endString = String(end);\n  let stepString = String(step);\n  step = Math.max(Math.abs(step), 1);\n\n  let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n  let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n  let toNumber = padded === false && stringify(start, end, options) === false;\n  let format = options.transform || transform(toNumber);\n\n  if (options.toRegex && step === 1) {\n    return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n  }\n\n  let parts = { negatives: [], positives: [] };\n  let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n  let range = [];\n  let index = 0;\n\n  while (descending ? a >= b : a <= b) {\n    if (options.toRegex === true && step > 1) {\n      push(a);\n    } else {\n      range.push(pad(format(a, index), maxLen, toNumber));\n    }\n    a = descending ? a - step : a + step;\n    index++;\n  }\n\n  if (options.toRegex === true) {\n    return step > 1\n      ? toSequence(parts, options, maxLen)\n      : toRegex(range, null, { wrap: false, ...options });\n  }\n\n  return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n  if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n    return invalidRange(start, end, options);\n  }\n\n  let format = options.transform || (val => String.fromCharCode(val));\n  let a = `${start}`.charCodeAt(0);\n  let b = `${end}`.charCodeAt(0);\n\n  let descending = a > b;\n  let min = Math.min(a, b);\n  let max = Math.max(a, b);\n\n  if (options.toRegex && step === 1) {\n    return toRange(min, max, false, options);\n  }\n\n  let range = [];\n  let index = 0;\n\n  while (descending ? a >= b : a <= b) {\n    range.push(format(a, index));\n    a = descending ? a - step : a + step;\n    index++;\n  }\n\n  if (options.toRegex === true) {\n    return toRegex(range, null, { wrap: false, options });\n  }\n\n  return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n  if (end == null && isValidValue(start)) {\n    return [start];\n  }\n\n  if (!isValidValue(start) || !isValidValue(end)) {\n    return invalidRange(start, end, options);\n  }\n\n  if (typeof step === 'function') {\n    return fill(start, end, 1, { transform: step });\n  }\n\n  if (isObject(step)) {\n    return fill(start, end, 0, step);\n  }\n\n  let opts = { ...options };\n  if (opts.capture === true) opts.wrap = true;\n  step = step || opts.step || 1;\n\n  if (!isNumber(step)) {\n    if (step != null && !isObject(step)) return invalidStep(step, opts);\n    return fill(start, end, 1, step);\n  }\n\n  if (isNumber(start) && isNumber(end)) {\n    return fillNumbers(start, end, step, opts);\n  }\n\n  return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n", "'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n  const walk = (node, parent = {}) => {\n    const invalidBlock = utils.isInvalidBrace(parent);\n    const invalidNode = node.invalid === true && options.escapeInvalid === true;\n    const invalid = invalidBlock === true || invalidNode === true;\n    const prefix = options.escapeInvalid === true ? '\\\\' : '';\n    let output = '';\n\n    if (node.isOpen === true) {\n      return prefix + node.value;\n    }\n\n    if (node.isClose === true) {\n      console.log('node.isClose', prefix, node.value);\n      return prefix + node.value;\n    }\n\n    if (node.type === 'open') {\n      return invalid ? prefix + node.value : '(';\n    }\n\n    if (node.type === 'close') {\n      return invalid ? prefix + node.value : ')';\n    }\n\n    if (node.type === 'comma') {\n      return node.prev.type === 'comma' ? '' : invalid ? node.value : '|';\n    }\n\n    if (node.value) {\n      return node.value;\n    }\n\n    if (node.nodes && node.ranges > 0) {\n      const args = utils.reduce(node.nodes);\n      const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });\n\n      if (range.length !== 0) {\n        return args.length > 1 && range.length > 1 ? `(${range})` : range;\n      }\n    }\n\n    if (node.nodes) {\n      for (const child of node.nodes) {\n        output += walk(child, node);\n      }\n    }\n\n    return output;\n  };\n\n  return walk(ast);\n};\n\nmodule.exports = compile;\n", "'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n  const result = [];\n\n  queue = [].concat(queue);\n  stash = [].concat(stash);\n\n  if (!stash.length) return queue;\n  if (!queue.length) {\n    return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n  }\n\n  for (const item of queue) {\n    if (Array.isArray(item)) {\n      for (const value of item) {\n        result.push(append(value, stash, enclose));\n      }\n    } else {\n      for (let ele of stash) {\n        if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n        result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele);\n      }\n    }\n  }\n  return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n  const rangeLimit = options.rangeLimit === undefined ? 1000 : options.rangeLimit;\n\n  const walk = (node, parent = {}) => {\n    node.queue = [];\n\n    let p = parent;\n    let q = parent.queue;\n\n    while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n      p = p.parent;\n      q = p.queue;\n    }\n\n    if (node.invalid || node.dollar) {\n      q.push(append(q.pop(), stringify(node, options)));\n      return;\n    }\n\n    if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n      q.push(append(q.pop(), ['{}']));\n      return;\n    }\n\n    if (node.nodes && node.ranges > 0) {\n      const args = utils.reduce(node.nodes);\n\n      if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n        throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n      }\n\n      let range = fill(...args, options);\n      if (range.length === 0) {\n        range = stringify(node, options);\n      }\n\n      q.push(append(q.pop(), range));\n      node.nodes = [];\n      return;\n    }\n\n    const enclose = utils.encloseBrace(node);\n    let queue = node.queue;\n    let block = node;\n\n    while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n      block = block.parent;\n      queue = block.queue;\n    }\n\n    for (let i = 0; i < node.nodes.length; i++) {\n      const child = node.nodes[i];\n\n      if (child.type === 'comma' && node.type === 'brace') {\n        if (i === 1) queue.push('');\n        queue.push('');\n        continue;\n      }\n\n      if (child.type === 'close') {\n        q.push(append(q.pop(), queue, enclose));\n        continue;\n      }\n\n      if (child.value && child.type !== 'open') {\n        queue.push(append(queue.pop(), child.value));\n        continue;\n      }\n\n      if (child.nodes) {\n        walk(child, node);\n      }\n    }\n\n    return queue;\n  };\n\n  return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n", "'use strict';\n\nmodule.exports = {\n  MAX_LENGTH: 10000,\n\n  // Digits\n  CHAR_0: '0', /* 0 */\n  CHAR_9: '9', /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 'A', /* A */\n  CHAR_LOWERCASE_A: 'a', /* a */\n  CHAR_UPPERCASE_Z: 'Z', /* Z */\n  CHAR_LOWERCASE_Z: 'z', /* z */\n\n  CHAR_LEFT_PARENTHESES: '(', /* ( */\n  CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n  CHAR_ASTERISK: '*', /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: '&', /* & */\n  CHAR_AT: '@', /* @ */\n  CHAR_BACKSLASH: '\\\\', /* \\ */\n  CHAR_BACKTICK: '`', /* ` */\n  CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n  CHAR_COLON: ':', /* : */\n  CHAR_COMMA: ',', /* , */\n  CHAR_DOLLAR: '$', /* . */\n  CHAR_DOT: '.', /* . */\n  CHAR_DOUBLE_QUOTE: '\"', /* \" */\n  CHAR_EQUAL: '=', /* = */\n  CHAR_EXCLAMATION_MARK: '!', /* ! */\n  CHAR_FORM_FEED: '\\f', /* \\f */\n  CHAR_FORWARD_SLASH: '/', /* / */\n  CHAR_HASH: '#', /* # */\n  CHAR_HYPHEN_MINUS: '-', /* - */\n  CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n  CHAR_LEFT_CURLY_BRACE: '{', /* { */\n  CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n  CHAR_LINE_FEED: '\\n', /* \\n */\n  CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n  CHAR_PERCENT: '%', /* % */\n  CHAR_PLUS: '+', /* + */\n  CHAR_QUESTION_MARK: '?', /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n  CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n  CHAR_SEMICOLON: ';', /* ; */\n  CHAR_SINGLE_QUOTE: '\\'', /* ' */\n  CHAR_SPACE: ' ', /*   */\n  CHAR_TAB: '\\t', /* \\t */\n  CHAR_UNDERSCORE: '_', /* _ */\n  CHAR_VERTICAL_LINE: '|', /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n", "'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  CHAR_BACKSLASH, /* \\ */\n  CHAR_BACKTICK, /* ` */\n  CHAR_COMMA, /* , */\n  CHAR_DOT, /* . */\n  CHAR_LEFT_PARENTHESES, /* ( */\n  CHAR_RIGHT_PARENTHESES, /* ) */\n  CHAR_LEFT_CURLY_BRACE, /* { */\n  CHAR_RIGHT_CURLY_BRACE, /* } */\n  CHAR_LEFT_SQUARE_BRACKET, /* [ */\n  CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n  CHAR_DOUBLE_QUOTE, /* \" */\n  CHAR_SINGLE_QUOTE, /* ' */\n  CHAR_NO_BREAK_SPACE,\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  const opts = options || {};\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  if (input.length > max) {\n    throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n  }\n\n  const ast = { type: 'root', input, nodes: [] };\n  const stack = [ast];\n  let block = ast;\n  let prev = ast;\n  let brackets = 0;\n  const length = input.length;\n  let index = 0;\n  let depth = 0;\n  let value;\n\n  /**\n   * Helpers\n   */\n\n  const advance = () => input[index++];\n  const push = node => {\n    if (node.type === 'text' && prev.type === 'dot') {\n      prev.type = 'text';\n    }\n\n    if (prev && prev.type === 'text' && node.type === 'text') {\n      prev.value += node.value;\n      return;\n    }\n\n    block.nodes.push(node);\n    node.parent = block;\n    node.prev = prev;\n    prev = node;\n    return node;\n  };\n\n  push({ type: 'bos' });\n\n  while (index < length) {\n    block = stack[stack.length - 1];\n    value = advance();\n\n    /**\n     * Invalid chars\n     */\n\n    if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n      continue;\n    }\n\n    /**\n     * Escaped chars\n     */\n\n    if (value === CHAR_BACKSLASH) {\n      push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n      continue;\n    }\n\n    /**\n     * Right square bracket (literal): ']'\n     */\n\n    if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n      push({ type: 'text', value: '\\\\' + value });\n      continue;\n    }\n\n    /**\n     * Left square bracket: '['\n     */\n\n    if (value === CHAR_LEFT_SQUARE_BRACKET) {\n      brackets++;\n\n      let next;\n\n      while (index < length && (next = advance())) {\n        value += next;\n\n        if (next === CHAR_LEFT_SQUARE_BRACKET) {\n          brackets++;\n          continue;\n        }\n\n        if (next === CHAR_BACKSLASH) {\n          value += advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          brackets--;\n\n          if (brackets === 0) {\n            break;\n          }\n        }\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === CHAR_LEFT_PARENTHESES) {\n      block = push({ type: 'paren', nodes: [] });\n      stack.push(block);\n      push({ type: 'text', value });\n      continue;\n    }\n\n    if (value === CHAR_RIGHT_PARENTHESES) {\n      if (block.type !== 'paren') {\n        push({ type: 'text', value });\n        continue;\n      }\n      block = stack.pop();\n      push({ type: 'text', value });\n      block = stack[stack.length - 1];\n      continue;\n    }\n\n    /**\n     * Quotes: '|\"|`\n     */\n\n    if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n      const open = value;\n      let next;\n\n      if (options.keepQuotes !== true) {\n        value = '';\n      }\n\n      while (index < length && (next = advance())) {\n        if (next === CHAR_BACKSLASH) {\n          value += next + advance();\n          continue;\n        }\n\n        if (next === open) {\n          if (options.keepQuotes === true) value += next;\n          break;\n        }\n\n        value += next;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Left curly brace: '{'\n     */\n\n    if (value === CHAR_LEFT_CURLY_BRACE) {\n      depth++;\n\n      const dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n      const brace = {\n        type: 'brace',\n        open: true,\n        close: false,\n        dollar,\n        depth,\n        commas: 0,\n        ranges: 0,\n        nodes: []\n      };\n\n      block = push(brace);\n      stack.push(block);\n      push({ type: 'open', value });\n      continue;\n    }\n\n    /**\n     * Right curly brace: '}'\n     */\n\n    if (value === CHAR_RIGHT_CURLY_BRACE) {\n      if (block.type !== 'brace') {\n        push({ type: 'text', value });\n        continue;\n      }\n\n      const type = 'close';\n      block = stack.pop();\n      block.close = true;\n\n      push({ type, value });\n      depth--;\n\n      block = stack[stack.length - 1];\n      continue;\n    }\n\n    /**\n     * Comma: ','\n     */\n\n    if (value === CHAR_COMMA && depth > 0) {\n      if (block.ranges > 0) {\n        block.ranges = 0;\n        const open = block.nodes.shift();\n        block.nodes = [open, { type: 'text', value: stringify(block) }];\n      }\n\n      push({ type: 'comma', value });\n      block.commas++;\n      continue;\n    }\n\n    /**\n     * Dot: '.'\n     */\n\n    if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n      const siblings = block.nodes;\n\n      if (depth === 0 || siblings.length === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n\n      if (prev.type === 'dot') {\n        block.range = [];\n        prev.value += value;\n        prev.type = 'range';\n\n        if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n          block.invalid = true;\n          block.ranges = 0;\n          prev.type = 'text';\n          continue;\n        }\n\n        block.ranges++;\n        block.args = [];\n        continue;\n      }\n\n      if (prev.type === 'range') {\n        siblings.pop();\n\n        const before = siblings[siblings.length - 1];\n        before.value += prev.value + value;\n        prev = before;\n        block.ranges--;\n        continue;\n      }\n\n      push({ type: 'dot', value });\n      continue;\n    }\n\n    /**\n     * Text\n     */\n\n    push({ type: 'text', value });\n  }\n\n  // Mark imbalanced braces and brackets as invalid\n  do {\n    block = stack.pop();\n\n    if (block.type !== 'root') {\n      block.nodes.forEach(node => {\n        if (!node.nodes) {\n          if (node.type === 'open') node.isOpen = true;\n          if (node.type === 'close') node.isClose = true;\n          if (!node.nodes) node.type = 'text';\n          node.invalid = true;\n        }\n      });\n\n      // get the location of the block on parent.nodes (block's siblings)\n      const parent = stack[stack.length - 1];\n      const index = parent.nodes.indexOf(block);\n      // replace the (invalid) block with it's nodes\n      parent.nodes.splice(index, 1, ...block.nodes);\n    }\n  } while (stack.length > 0);\n\n  push({ type: 'eos' });\n  return ast;\n};\n\nmodule.exports = parse;\n", "'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n  let output = [];\n\n  if (Array.isArray(input)) {\n    for (const pattern of input) {\n      const result = braces.create(pattern, options);\n      if (Array.isArray(result)) {\n        output.push(...result);\n      } else {\n        output.push(result);\n      }\n    }\n  } else {\n    output = [].concat(braces.create(input, options));\n  }\n\n  if (options && options.expand === true && options.nodupes === true) {\n    output = [...new Set(output)];\n  }\n  return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n  if (typeof input === 'string') {\n    return stringify(braces.parse(input, options), options);\n  }\n  return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n  if (typeof input === 'string') {\n    input = braces.parse(input, options);\n  }\n  return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n  if (typeof input === 'string') {\n    input = braces.parse(input, options);\n  }\n\n  let result = expand(input, options);\n\n  // filter out empty strings if specified\n  if (options.noempty === true) {\n    result = result.filter(Boolean);\n  }\n\n  // filter out duplicates if specified\n  if (options.nodupes === true) {\n    result = [...new Set(result)];\n  }\n\n  return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n  if (input === '' || input.length < 3) {\n    return [input];\n  }\n\n  return options.expand !== true\n    ? braces.compile(input, options)\n    : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n", "[\n\t\"3dm\",\n\t\"3ds\",\n\t\"3g2\",\n\t\"3gp\",\n\t\"7z\",\n\t\"a\",\n\t\"aac\",\n\t\"adp\",\n\t\"afdesign\",\n\t\"afphoto\",\n\t\"afpub\",\n\t\"ai\",\n\t\"aif\",\n\t\"aiff\",\n\t\"alz\",\n\t\"ape\",\n\t\"apk\",\n\t\"appimage\",\n\t\"ar\",\n\t\"arj\",\n\t\"asf\",\n\t\"au\",\n\t\"avi\",\n\t\"bak\",\n\t\"baml\",\n\t\"bh\",\n\t\"bin\",\n\t\"bk\",\n\t\"bmp\",\n\t\"btif\",\n\t\"bz2\",\n\t\"bzip2\",\n\t\"cab\",\n\t\"caf\",\n\t\"cgm\",\n\t\"class\",\n\t\"cmx\",\n\t\"cpio\",\n\t\"cr2\",\n\t\"cur\",\n\t\"dat\",\n\t\"dcm\",\n\t\"deb\",\n\t\"dex\",\n\t\"djvu\",\n\t\"dll\",\n\t\"dmg\",\n\t\"dng\",\n\t\"doc\",\n\t\"docm\",\n\t\"docx\",\n\t\"dot\",\n\t\"dotm\",\n\t\"dra\",\n\t\"DS_Store\",\n\t\"dsk\",\n\t\"dts\",\n\t\"dtshd\",\n\t\"dvb\",\n\t\"dwg\",\n\t\"dxf\",\n\t\"ecelp4800\",\n\t\"ecelp7470\",\n\t\"ecelp9600\",\n\t\"egg\",\n\t\"eol\",\n\t\"eot\",\n\t\"epub\",\n\t\"exe\",\n\t\"f4v\",\n\t\"fbs\",\n\t\"fh\",\n\t\"fla\",\n\t\"flac\",\n\t\"flatpak\",\n\t\"fli\",\n\t\"flv\",\n\t\"fpx\",\n\t\"fst\",\n\t\"fvt\",\n\t\"g3\",\n\t\"gh\",\n\t\"gif\",\n\t\"graffle\",\n\t\"gz\",\n\t\"gzip\",\n\t\"h261\",\n\t\"h263\",\n\t\"h264\",\n\t\"icns\",\n\t\"ico\",\n\t\"ief\",\n\t\"img\",\n\t\"ipa\",\n\t\"iso\",\n\t\"jar\",\n\t\"jpeg\",\n\t\"jpg\",\n\t\"jpgv\",\n\t\"jpm\",\n\t\"jxr\",\n\t\"key\",\n\t\"ktx\",\n\t\"lha\",\n\t\"lib\",\n\t\"lvp\",\n\t\"lz\",\n\t\"lzh\",\n\t\"lzma\",\n\t\"lzo\",\n\t\"m3u\",\n\t\"m4a\",\n\t\"m4v\",\n\t\"mar\",\n\t\"mdi\",\n\t\"mht\",\n\t\"mid\",\n\t\"midi\",\n\t\"mj2\",\n\t\"mka\",\n\t\"mkv\",\n\t\"mmr\",\n\t\"mng\",\n\t\"mobi\",\n\t\"mov\",\n\t\"movie\",\n\t\"mp3\",\n\t\"mp4\",\n\t\"mp4a\",\n\t\"mpeg\",\n\t\"mpg\",\n\t\"mpga\",\n\t\"mxu\",\n\t\"nef\",\n\t\"npx\",\n\t\"numbers\",\n\t\"nupkg\",\n\t\"o\",\n\t\"odp\",\n\t\"ods\",\n\t\"odt\",\n\t\"oga\",\n\t\"ogg\",\n\t\"ogv\",\n\t\"otf\",\n\t\"ott\",\n\t\"pages\",\n\t\"pbm\",\n\t\"pcx\",\n\t\"pdb\",\n\t\"pdf\",\n\t\"pea\",\n\t\"pgm\",\n\t\"pic\",\n\t\"png\",\n\t\"pnm\",\n\t\"pot\",\n\t\"potm\",\n\t\"potx\",\n\t\"ppa\",\n\t\"ppam\",\n\t\"ppm\",\n\t\"pps\",\n\t\"ppsm\",\n\t\"ppsx\",\n\t\"ppt\",\n\t\"pptm\",\n\t\"pptx\",\n\t\"psd\",\n\t\"pya\",\n\t\"pyc\",\n\t\"pyo\",\n\t\"pyv\",\n\t\"qt\",\n\t\"rar\",\n\t\"ras\",\n\t\"raw\",\n\t\"resources\",\n\t\"rgb\",\n\t\"rip\",\n\t\"rlc\",\n\t\"rmf\",\n\t\"rmvb\",\n\t\"rpm\",\n\t\"rtf\",\n\t\"rz\",\n\t\"s3m\",\n\t\"s7z\",\n\t\"scpt\",\n\t\"sgi\",\n\t\"shar\",\n\t\"snap\",\n\t\"sil\",\n\t\"sketch\",\n\t\"slk\",\n\t\"smv\",\n\t\"snk\",\n\t\"so\",\n\t\"stl\",\n\t\"suo\",\n\t\"sub\",\n\t\"swf\",\n\t\"tar\",\n\t\"tbz\",\n\t\"tbz2\",\n\t\"tga\",\n\t\"tgz\",\n\t\"thmx\",\n\t\"tif\",\n\t\"tiff\",\n\t\"tlz\",\n\t\"ttc\",\n\t\"ttf\",\n\t\"txz\",\n\t\"udf\",\n\t\"uvh\",\n\t\"uvi\",\n\t\"uvm\",\n\t\"uvp\",\n\t\"uvs\",\n\t\"uvu\",\n\t\"viv\",\n\t\"vob\",\n\t\"war\",\n\t\"wav\",\n\t\"wax\",\n\t\"wbmp\",\n\t\"wdp\",\n\t\"weba\",\n\t\"webm\",\n\t\"webp\",\n\t\"whl\",\n\t\"wim\",\n\t\"wm\",\n\t\"wma\",\n\t\"wmv\",\n\t\"wmx\",\n\t\"woff\",\n\t\"woff2\",\n\t\"wrm\",\n\t\"wvx\",\n\t\"xbm\",\n\t\"xif\",\n\t\"xla\",\n\t\"xlam\",\n\t\"xls\",\n\t\"xlsb\",\n\t\"xlsm\",\n\t\"xlsx\",\n\t\"xlt\",\n\t\"xltm\",\n\t\"xltx\",\n\t\"xm\",\n\t\"xmind\",\n\t\"xpi\",\n\t\"xpm\",\n\t\"xwd\",\n\t\"xz\",\n\t\"z\",\n\t\"zip\",\n\t\"zipx\"\n]\n", "module.exports = require('./binary-extensions.json');\n", "'use strict';\nconst path = require('path');\nconst binaryExtensions = require('binary-extensions');\n\nconst extensions = new Set(binaryExtensions);\n\nmodule.exports = filePath => extensions.has(path.extname(filePath).slice(1).toLowerCase());\n", "'use strict';\n\nconst {sep} = require('path');\nconst {platform} = process;\nconst os = require('os');\n\nexports.EV_ALL = 'all';\nexports.EV_READY = 'ready';\nexports.EV_ADD = 'add';\nexports.EV_CHANGE = 'change';\nexports.EV_ADD_DIR = 'addDir';\nexports.EV_UNLINK = 'unlink';\nexports.EV_UNLINK_DIR = 'unlinkDir';\nexports.EV_RAW = 'raw';\nexports.EV_ERROR = 'error';\n\nexports.STR_DATA = 'data';\nexports.STR_END = 'end';\nexports.STR_CLOSE = 'close';\n\nexports.FSEVENT_CREATED = 'created';\nexports.FSEVENT_MODIFIED = 'modified';\nexports.FSEVENT_DELETED = 'deleted';\nexports.FSEVENT_MOVED = 'moved';\nexports.FSEVENT_CLONED = 'cloned';\nexports.FSEVENT_UNKNOWN = 'unknown';\nexports.FSEVENT_FLAG_MUST_SCAN_SUBDIRS = 1;\nexports.FSEVENT_TYPE_FILE = 'file';\nexports.FSEVENT_TYPE_DIRECTORY = 'directory';\nexports.FSEVENT_TYPE_SYMLINK = 'symlink';\n\nexports.KEY_LISTENERS = 'listeners';\nexports.KEY_ERR = 'errHandlers';\nexports.KEY_RAW = 'rawEmitters';\nexports.HANDLER_KEYS = [exports.KEY_LISTENERS, exports.KEY_ERR, exports.KEY_RAW];\n\nexports.DOT_SLASH = `.${sep}`;\n\nexports.BACK_SLASH_RE = /\\\\/g;\nexports.DOUBLE_SLASH_RE = /\\/\\//;\nexports.SLASH_OR_BACK_SLASH_RE = /[/\\\\]/;\nexports.DOT_RE = /\\..*\\.(sw[px])$|~$|\\.subl.*\\.tmp/;\nexports.REPLACER_RE = /^\\.[/\\\\]/;\n\nexports.SLASH = '/';\nexports.SLASH_SLASH = '//';\nexports.BRACE_START = '{';\nexports.BANG = '!';\nexports.ONE_DOT = '.';\nexports.TWO_DOTS = '..';\nexports.STAR = '*';\nexports.GLOBSTAR = '**';\nexports.ROOT_GLOBSTAR = '/**/*';\nexports.SLASH_GLOBSTAR = '/**';\nexports.DIR_SUFFIX = 'Dir';\nexports.ANYMATCH_OPTS = {dot: true};\nexports.STRING_TYPE = 'string';\nexports.FUNCTION_TYPE = 'function';\nexports.EMPTY_STR = '';\nexports.EMPTY_FN = () => {};\nexports.IDENTITY_FN = val => val;\n\nexports.isWindows = platform === 'win32';\nexports.isMacos = platform === 'darwin';\nexports.isLinux = platform === 'linux';\nexports.isIBMi = os.type() === 'OS400';\n", "'use strict';\n\nconst fs = require('fs');\nconst sysPath = require('path');\nconst { promisify } = require('util');\nconst isBinaryPath = require('is-binary-path');\nconst {\n  isWindows,\n  isLinux,\n  EMPTY_FN,\n  EMPTY_STR,\n  KEY_LISTENERS,\n  KEY_ERR,\n  KEY_RAW,\n  HANDLER_KEYS,\n  EV_CHANGE,\n  EV_ADD,\n  EV_ADD_DIR,\n  EV_ERROR,\n  STR_DATA,\n  STR_END,\n  BRACE_START,\n  STAR\n} = require('./constants');\n\nconst THROTTLE_MODE_WATCH = 'watch';\n\nconst open = promisify(fs.open);\nconst stat = promisify(fs.stat);\nconst lstat = promisify(fs.lstat);\nconst close = promisify(fs.close);\nconst fsrealpath = promisify(fs.realpath);\n\nconst statMethods = { lstat, stat };\n\n// TODO: emit errors properly. Example: EMFILE on Macos.\nconst foreach = (val, fn) => {\n  if (val instanceof Set) {\n    val.forEach(fn);\n  } else {\n    fn(val);\n  }\n};\n\nconst addAndConvert = (main, prop, item) => {\n  let container = main[prop];\n  if (!(container instanceof Set)) {\n    main[prop] = container = new Set([container]);\n  }\n  container.add(item);\n};\n\nconst clearItem = cont => key => {\n  const set = cont[key];\n  if (set instanceof Set) {\n    set.clear();\n  } else {\n    delete cont[key];\n  }\n};\n\nconst delFromSet = (main, prop, item) => {\n  const container = main[prop];\n  if (container instanceof Set) {\n    container.delete(item);\n  } else if (container === item) {\n    delete main[prop];\n  }\n};\n\nconst isEmptySet = (val) => val instanceof Set ? val.size === 0 : !val;\n\n/**\n * @typedef {String} Path\n */\n\n// fs_watch helpers\n\n// object to hold per-process fs_watch instances\n// (may be shared across chokidar FSWatcher instances)\n\n/**\n * @typedef {Object} FsWatchContainer\n * @property {Set} listeners\n * @property {Set} errHandlers\n * @property {Set} rawEmitters\n * @property {fs.FSWatcher=} watcher\n * @property {Boolean=} watcherUnusable\n */\n\n/**\n * @type {Map<String,FsWatchContainer>}\n */\nconst FsWatchInstances = new Map();\n\n/**\n * Instantiates the fs_watch interface\n * @param {String} path to be watched\n * @param {Object} options to be passed to fs_watch\n * @param {Function} listener main event handler\n * @param {Function} errHandler emits info about errors\n * @param {Function} emitRaw emits raw event data\n * @returns {fs.FSWatcher} new fsevents instance\n */\nfunction createFsWatchInstance(path, options, listener, errHandler, emitRaw) {\n  const handleEvent = (rawEvent, evPath) => {\n    listener(path);\n    emitRaw(rawEvent, evPath, {watchedPath: path});\n\n    // emit based on events occurring for files from a directory's watcher in\n    // case the file's watcher misses it (and rely on throttling to de-dupe)\n    if (evPath && path !== evPath) {\n      fsWatchBroadcast(\n        sysPath.resolve(path, evPath), KEY_LISTENERS, sysPath.join(path, evPath)\n      );\n    }\n  };\n  try {\n    return fs.watch(path, options, handleEvent);\n  } catch (error) {\n    errHandler(error);\n  }\n}\n\n/**\n * Helper for passing fs_watch event data to a collection of listeners\n * @param {Path} fullPath absolute path bound to fs_watch instance\n * @param {String} type listener type\n * @param {*=} val1 arguments to be passed to listeners\n * @param {*=} val2\n * @param {*=} val3\n */\nconst fsWatchBroadcast = (fullPath, type, val1, val2, val3) => {\n  const cont = FsWatchInstances.get(fullPath);\n  if (!cont) return;\n  foreach(cont[type], (listener) => {\n    listener(val1, val2, val3);\n  });\n};\n\n/**\n * Instantiates the fs_watch interface or binds listeners\n * to an existing one covering the same file system entry\n * @param {String} path\n * @param {String} fullPath absolute path\n * @param {Object} options to be passed to fs_watch\n * @param {Object} handlers container for event listener functions\n */\nconst setFsWatchListener = (path, fullPath, options, handlers) => {\n  const {listener, errHandler, rawEmitter} = handlers;\n  let cont = FsWatchInstances.get(fullPath);\n\n  /** @type {fs.FSWatcher=} */\n  let watcher;\n  if (!options.persistent) {\n    watcher = createFsWatchInstance(\n      path, options, listener, errHandler, rawEmitter\n    );\n    return watcher.close.bind(watcher);\n  }\n  if (cont) {\n    addAndConvert(cont, KEY_LISTENERS, listener);\n    addAndConvert(cont, KEY_ERR, errHandler);\n    addAndConvert(cont, KEY_RAW, rawEmitter);\n  } else {\n    watcher = createFsWatchInstance(\n      path,\n      options,\n      fsWatchBroadcast.bind(null, fullPath, KEY_LISTENERS),\n      errHandler, // no need to use broadcast here\n      fsWatchBroadcast.bind(null, fullPath, KEY_RAW)\n    );\n    if (!watcher) return;\n    watcher.on(EV_ERROR, async (error) => {\n      const broadcastErr = fsWatchBroadcast.bind(null, fullPath, KEY_ERR);\n      cont.watcherUnusable = true; // documented since Node 10.4.1\n      // Workaround for https://github.com/joyent/node/issues/4337\n      if (isWindows && error.code === 'EPERM') {\n        try {\n          const fd = await open(path, 'r');\n          await close(fd);\n          broadcastErr(error);\n        } catch (err) {}\n      } else {\n        broadcastErr(error);\n      }\n    });\n    cont = {\n      listeners: listener,\n      errHandlers: errHandler,\n      rawEmitters: rawEmitter,\n      watcher\n    };\n    FsWatchInstances.set(fullPath, cont);\n  }\n  // const index = cont.listeners.indexOf(listener);\n\n  // removes this instance's listeners and closes the underlying fs_watch\n  // instance if there are no more listeners left\n  return () => {\n    delFromSet(cont, KEY_LISTENERS, listener);\n    delFromSet(cont, KEY_ERR, errHandler);\n    delFromSet(cont, KEY_RAW, rawEmitter);\n    if (isEmptySet(cont.listeners)) {\n      // Check to protect against issue gh-730.\n      // if (cont.watcherUnusable) {\n      cont.watcher.close();\n      // }\n      FsWatchInstances.delete(fullPath);\n      HANDLER_KEYS.forEach(clearItem(cont));\n      cont.watcher = undefined;\n      Object.freeze(cont);\n    }\n  };\n};\n\n// fs_watchFile helpers\n\n// object to hold per-process fs_watchFile instances\n// (may be shared across chokidar FSWatcher instances)\nconst FsWatchFileInstances = new Map();\n\n/**\n * Instantiates the fs_watchFile interface or binds listeners\n * to an existing one covering the same file system entry\n * @param {String} path to be watched\n * @param {String} fullPath absolute path\n * @param {Object} options options to be passed to fs_watchFile\n * @param {Object} handlers container for event listener functions\n * @returns {Function} closer\n */\nconst setFsWatchFileListener = (path, fullPath, options, handlers) => {\n  const {listener, rawEmitter} = handlers;\n  let cont = FsWatchFileInstances.get(fullPath);\n\n  /* eslint-disable no-unused-vars, prefer-destructuring */\n  let listeners = new Set();\n  let rawEmitters = new Set();\n\n  const copts = cont && cont.options;\n  if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) {\n    // \"Upgrade\" the watcher to persistence or a quicker interval.\n    // This creates some unlikely edge case issues if the user mixes\n    // settings in a very weird way, but solving for those cases\n    // doesn't seem worthwhile for the added complexity.\n    listeners = cont.listeners;\n    rawEmitters = cont.rawEmitters;\n    fs.unwatchFile(fullPath);\n    cont = undefined;\n  }\n\n  /* eslint-enable no-unused-vars, prefer-destructuring */\n\n  if (cont) {\n    addAndConvert(cont, KEY_LISTENERS, listener);\n    addAndConvert(cont, KEY_RAW, rawEmitter);\n  } else {\n    // TODO\n    // listeners.add(listener);\n    // rawEmitters.add(rawEmitter);\n    cont = {\n      listeners: listener,\n      rawEmitters: rawEmitter,\n      options,\n      watcher: fs.watchFile(fullPath, options, (curr, prev) => {\n        foreach(cont.rawEmitters, (rawEmitter) => {\n          rawEmitter(EV_CHANGE, fullPath, {curr, prev});\n        });\n        const currmtime = curr.mtimeMs;\n        if (curr.size !== prev.size || currmtime > prev.mtimeMs || currmtime === 0) {\n          foreach(cont.listeners, (listener) => listener(path, curr));\n        }\n      })\n    };\n    FsWatchFileInstances.set(fullPath, cont);\n  }\n  // const index = cont.listeners.indexOf(listener);\n\n  // Removes this instance's listeners and closes the underlying fs_watchFile\n  // instance if there are no more listeners left.\n  return () => {\n    delFromSet(cont, KEY_LISTENERS, listener);\n    delFromSet(cont, KEY_RAW, rawEmitter);\n    if (isEmptySet(cont.listeners)) {\n      FsWatchFileInstances.delete(fullPath);\n      fs.unwatchFile(fullPath);\n      cont.options = cont.watcher = undefined;\n      Object.freeze(cont);\n    }\n  };\n};\n\n/**\n * @mixin\n */\nclass NodeFsHandler {\n\n/**\n * @param {import(\"../index\").FSWatcher} fsW\n */\nconstructor(fsW) {\n  this.fsw = fsW;\n  this._boundHandleError = (error) => fsW._handleError(error);\n}\n\n/**\n * Watch file for changes with fs_watchFile or fs_watch.\n * @param {String} path to file or dir\n * @param {Function} listener on fs change\n * @returns {Function} closer for the watcher instance\n */\n_watchWithNodeFs(path, listener) {\n  const opts = this.fsw.options;\n  const directory = sysPath.dirname(path);\n  const basename = sysPath.basename(path);\n  const parent = this.fsw._getWatchedDir(directory);\n  parent.add(basename);\n  const absolutePath = sysPath.resolve(path);\n  const options = {persistent: opts.persistent};\n  if (!listener) listener = EMPTY_FN;\n\n  let closer;\n  if (opts.usePolling) {\n    options.interval = opts.enableBinaryInterval && isBinaryPath(basename) ?\n      opts.binaryInterval : opts.interval;\n    closer = setFsWatchFileListener(path, absolutePath, options, {\n      listener,\n      rawEmitter: this.fsw._emitRaw\n    });\n  } else {\n    closer = setFsWatchListener(path, absolutePath, options, {\n      listener,\n      errHandler: this._boundHandleError,\n      rawEmitter: this.fsw._emitRaw\n    });\n  }\n  return closer;\n}\n\n/**\n * Watch a file and emit add event if warranted.\n * @param {Path} file Path\n * @param {fs.Stats} stats result of fs_stat\n * @param {Boolean} initialAdd was the file added at watch instantiation?\n * @returns {Function} closer for the watcher instance\n */\n_handleFile(file, stats, initialAdd) {\n  if (this.fsw.closed) {\n    return;\n  }\n  const dirname = sysPath.dirname(file);\n  const basename = sysPath.basename(file);\n  const parent = this.fsw._getWatchedDir(dirname);\n  // stats is always present\n  let prevStats = stats;\n\n  // if the file is already being watched, do nothing\n  if (parent.has(basename)) return;\n\n  const listener = async (path, newStats) => {\n    if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5)) return;\n    if (!newStats || newStats.mtimeMs === 0) {\n      try {\n        const newStats = await stat(file);\n        if (this.fsw.closed) return;\n        // Check that change event was not fired because of changed only accessTime.\n        const at = newStats.atimeMs;\n        const mt = newStats.mtimeMs;\n        if (!at || at <= mt || mt !== prevStats.mtimeMs) {\n          this.fsw._emit(EV_CHANGE, file, newStats);\n        }\n        if (isLinux && prevStats.ino !== newStats.ino) {\n          this.fsw._closeFile(path)\n          prevStats = newStats;\n          this.fsw._addPathCloser(path, this._watchWithNodeFs(file, listener));\n        } else {\n          prevStats = newStats;\n        }\n      } catch (error) {\n        // Fix issues where mtime is null but file is still present\n        this.fsw._remove(dirname, basename);\n      }\n      // add is about to be emitted if file not already tracked in parent\n    } else if (parent.has(basename)) {\n      // Check that change event was not fired because of changed only accessTime.\n      const at = newStats.atimeMs;\n      const mt = newStats.mtimeMs;\n      if (!at || at <= mt || mt !== prevStats.mtimeMs) {\n        this.fsw._emit(EV_CHANGE, file, newStats);\n      }\n      prevStats = newStats;\n    }\n  }\n  // kick off the watcher\n  const closer = this._watchWithNodeFs(file, listener);\n\n  // emit an add event if we're supposed to\n  if (!(initialAdd && this.fsw.options.ignoreInitial) && this.fsw._isntIgnored(file)) {\n    if (!this.fsw._throttle(EV_ADD, file, 0)) return;\n    this.fsw._emit(EV_ADD, file, stats);\n  }\n\n  return closer;\n}\n\n/**\n * Handle symlinks encountered while reading a dir.\n * @param {Object} entry returned by readdirp\n * @param {String} directory path of dir being read\n * @param {String} path of this item\n * @param {String} item basename of this item\n * @returns {Promise<Boolean>} true if no more processing is needed for this entry.\n */\nasync _handleSymlink(entry, directory, path, item) {\n  if (this.fsw.closed) {\n    return;\n  }\n  const full = entry.fullPath;\n  const dir = this.fsw._getWatchedDir(directory);\n\n  if (!this.fsw.options.followSymlinks) {\n    // watch symlink directly (don't follow) and detect changes\n    this.fsw._incrReadyCount();\n\n    let linkPath;\n    try {\n      linkPath = await fsrealpath(path);\n    } catch (e) {\n      this.fsw._emitReady();\n      return true;\n    }\n\n    if (this.fsw.closed) return;\n    if (dir.has(item)) {\n      if (this.fsw._symlinkPaths.get(full) !== linkPath) {\n        this.fsw._symlinkPaths.set(full, linkPath);\n        this.fsw._emit(EV_CHANGE, path, entry.stats);\n      }\n    } else {\n      dir.add(item);\n      this.fsw._symlinkPaths.set(full, linkPath);\n      this.fsw._emit(EV_ADD, path, entry.stats);\n    }\n    this.fsw._emitReady();\n    return true;\n  }\n\n  // don't follow the same symlink more than once\n  if (this.fsw._symlinkPaths.has(full)) {\n    return true;\n  }\n\n  this.fsw._symlinkPaths.set(full, true);\n}\n\n_handleRead(directory, initialAdd, wh, target, dir, depth, throttler) {\n  // Normalize the directory name on Windows\n  directory = sysPath.join(directory, EMPTY_STR);\n\n  if (!wh.hasGlob) {\n    throttler = this.fsw._throttle('readdir', directory, 1000);\n    if (!throttler) return;\n  }\n\n  const previous = this.fsw._getWatchedDir(wh.path);\n  const current = new Set();\n\n  let stream = this.fsw._readdirp(directory, {\n    fileFilter: entry => wh.filterPath(entry),\n    directoryFilter: entry => wh.filterDir(entry),\n    depth: 0\n  }).on(STR_DATA, async (entry) => {\n    if (this.fsw.closed) {\n      stream = undefined;\n      return;\n    }\n    const item = entry.path;\n    let path = sysPath.join(directory, item);\n    current.add(item);\n\n    if (entry.stats.isSymbolicLink() && await this._handleSymlink(entry, directory, path, item)) {\n      return;\n    }\n\n    if (this.fsw.closed) {\n      stream = undefined;\n      return;\n    }\n    // Files that present in current directory snapshot\n    // but absent in previous are added to watch list and\n    // emit `add` event.\n    if (item === target || !target && !previous.has(item)) {\n      this.fsw._incrReadyCount();\n\n      // ensure relativeness of path is preserved in case of watcher reuse\n      path = sysPath.join(dir, sysPath.relative(dir, path));\n\n      this._addToNodeFs(path, initialAdd, wh, depth + 1);\n    }\n  }).on(EV_ERROR, this._boundHandleError);\n\n  return new Promise(resolve =>\n    stream.once(STR_END, () => {\n      if (this.fsw.closed) {\n        stream = undefined;\n        return;\n      }\n      const wasThrottled = throttler ? throttler.clear() : false;\n\n      resolve();\n\n      // Files that absent in current directory snapshot\n      // but present in previous emit `remove` event\n      // and are removed from @watched[directory].\n      previous.getChildren().filter((item) => {\n        return item !== directory &&\n          !current.has(item) &&\n          // in case of intersecting globs;\n          // a path may have been filtered out of this readdir, but\n          // shouldn't be removed because it matches a different glob\n          (!wh.hasGlob || wh.filterPath({\n            fullPath: sysPath.resolve(directory, item)\n          }));\n      }).forEach((item) => {\n        this.fsw._remove(directory, item);\n      });\n\n      stream = undefined;\n\n      // one more time for any missed in case changes came in extremely quickly\n      if (wasThrottled) this._handleRead(directory, false, wh, target, dir, depth, throttler);\n    })\n  );\n}\n\n/**\n * Read directory to add / remove files from `@watched` list and re-read it on change.\n * @param {String} dir fs path\n * @param {fs.Stats} stats\n * @param {Boolean} initialAdd\n * @param {Number} depth relative to user-supplied path\n * @param {String} target child path targeted for watch\n * @param {Object} wh Common watch helpers for this path\n * @param {String} realpath\n * @returns {Promise<Function>} closer for the watcher instance.\n */\nasync _handleDir(dir, stats, initialAdd, depth, target, wh, realpath) {\n  const parentDir = this.fsw._getWatchedDir(sysPath.dirname(dir));\n  const tracked = parentDir.has(sysPath.basename(dir));\n  if (!(initialAdd && this.fsw.options.ignoreInitial) && !target && !tracked) {\n    if (!wh.hasGlob || wh.globFilter(dir)) this.fsw._emit(EV_ADD_DIR, dir, stats);\n  }\n\n  // ensure dir is tracked (harmless if redundant)\n  parentDir.add(sysPath.basename(dir));\n  this.fsw._getWatchedDir(dir);\n  let throttler;\n  let closer;\n\n  const oDepth = this.fsw.options.depth;\n  if ((oDepth == null || depth <= oDepth) && !this.fsw._symlinkPaths.has(realpath)) {\n    if (!target) {\n      await this._handleRead(dir, initialAdd, wh, target, dir, depth, throttler);\n      if (this.fsw.closed) return;\n    }\n\n    closer = this._watchWithNodeFs(dir, (dirPath, stats) => {\n      // if current directory is removed, do nothing\n      if (stats && stats.mtimeMs === 0) return;\n\n      this._handleRead(dirPath, false, wh, target, dir, depth, throttler);\n    });\n  }\n  return closer;\n}\n\n/**\n * Handle added file, directory, or glob pattern.\n * Delegates call to _handleFile / _handleDir after checks.\n * @param {String} path to file or ir\n * @param {Boolean} initialAdd was the file added at watch instantiation?\n * @param {Object} priorWh depth relative to user-supplied path\n * @param {Number} depth Child path actually targeted for watch\n * @param {String=} target Child path actually targeted for watch\n * @returns {Promise}\n */\nasync _addToNodeFs(path, initialAdd, priorWh, depth, target) {\n  const ready = this.fsw._emitReady;\n  if (this.fsw._isIgnored(path) || this.fsw.closed) {\n    ready();\n    return false;\n  }\n\n  const wh = this.fsw._getWatchHelpers(path, depth);\n  if (!wh.hasGlob && priorWh) {\n    wh.hasGlob = priorWh.hasGlob;\n    wh.globFilter = priorWh.globFilter;\n    wh.filterPath = entry => priorWh.filterPath(entry);\n    wh.filterDir = entry => priorWh.filterDir(entry);\n  }\n\n  // evaluate what is at the path we're being asked to watch\n  try {\n    const stats = await statMethods[wh.statMethod](wh.watchPath);\n    if (this.fsw.closed) return;\n    if (this.fsw._isIgnored(wh.watchPath, stats)) {\n      ready();\n      return false;\n    }\n\n    const follow = this.fsw.options.followSymlinks && !path.includes(STAR) && !path.includes(BRACE_START);\n    let closer;\n    if (stats.isDirectory()) {\n      const absPath = sysPath.resolve(path);\n      const targetPath = follow ? await fsrealpath(path) : path;\n      if (this.fsw.closed) return;\n      closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath);\n      if (this.fsw.closed) return;\n      // preserve this symlink's target path\n      if (absPath !== targetPath && targetPath !== undefined) {\n        this.fsw._symlinkPaths.set(absPath, targetPath);\n      }\n    } else if (stats.isSymbolicLink()) {\n      const targetPath = follow ? await fsrealpath(path) : path;\n      if (this.fsw.closed) return;\n      const parent = sysPath.dirname(wh.watchPath);\n      this.fsw._getWatchedDir(parent).add(wh.watchPath);\n      this.fsw._emit(EV_ADD, wh.watchPath, stats);\n      closer = await this._handleDir(parent, stats, initialAdd, depth, path, wh, targetPath);\n      if (this.fsw.closed) return;\n\n      // preserve this symlink's target path\n      if (targetPath !== undefined) {\n        this.fsw._symlinkPaths.set(sysPath.resolve(path), targetPath);\n      }\n    } else {\n      closer = this._handleFile(wh.watchPath, stats, initialAdd);\n    }\n    ready();\n\n    this.fsw._addPathCloser(path, closer);\n    return false;\n\n  } catch (error) {\n    if (this.fsw._handleError(error)) {\n      ready();\n      return path;\n    }\n  }\n}\n\n}\n\nmodule.exports = NodeFsHandler;\n", "'use strict';\n\nconst fs = require('fs');\nconst sysPath = require('path');\nconst { promisify } = require('util');\n\nlet fsevents;\ntry {\n  fsevents = require('fsevents');\n} catch (error) {\n  if (process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR) console.error(error);\n}\n\nif (fsevents) {\n  // TODO: real check\n  const mtch = process.version.match(/v(\\d+)\\.(\\d+)/);\n  if (mtch && mtch[1] && mtch[2]) {\n    const maj = Number.parseInt(mtch[1], 10);\n    const min = Number.parseInt(mtch[2], 10);\n    if (maj === 8 && min < 16) {\n      fsevents = undefined;\n    }\n  }\n}\n\nconst {\n  EV_ADD,\n  EV_CHANGE,\n  EV_ADD_DIR,\n  EV_UNLINK,\n  EV_ERROR,\n  STR_DATA,\n  STR_END,\n  FSEVENT_CREATED,\n  FSEVENT_MODIFIED,\n  FSEVENT_DELETED,\n  FSEVENT_MOVED,\n  // FSEVENT_CLONED,\n  FSEVENT_UNKNOWN,\n  FSEVENT_FLAG_MUST_SCAN_SUBDIRS,\n  FSEVENT_TYPE_FILE,\n  FSEVENT_TYPE_DIRECTORY,\n  FSEVENT_TYPE_SYMLINK,\n\n  ROOT_GLOBSTAR,\n  DIR_SUFFIX,\n  DOT_SLASH,\n  FUNCTION_TYPE,\n  EMPTY_FN,\n  IDENTITY_FN\n} = require('./constants');\n\nconst Depth = (value) => isNaN(value) ? {} : {depth: value};\n\nconst stat = promisify(fs.stat);\nconst lstat = promisify(fs.lstat);\nconst realpath = promisify(fs.realpath);\n\nconst statMethods = { stat, lstat };\n\n/**\n * @typedef {String} Path\n */\n\n/**\n * @typedef {Object} FsEventsWatchContainer\n * @property {Set<Function>} listeners\n * @property {Function} rawEmitter\n * @property {{stop: Function}} watcher\n */\n\n// fsevents instance helper functions\n/**\n * Object to hold per-process fsevents instances (may be shared across chokidar FSWatcher instances)\n * @type {Map<Path,FsEventsWatchContainer>}\n */\nconst FSEventsWatchers = new Map();\n\n// Threshold of duplicate path prefixes at which to start\n// consolidating going forward\nconst consolidateThreshhold = 10;\n\nconst wrongEventFlags = new Set([\n  69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912\n]);\n\n/**\n * Instantiates the fsevents interface\n * @param {Path} path path to be watched\n * @param {Function} callback called when fsevents is bound and ready\n * @returns {{stop: Function}} new fsevents instance\n */\nconst createFSEventsInstance = (path, callback) => {\n  const stop = fsevents.watch(path, callback);\n  return {stop};\n};\n\n/**\n * Instantiates the fsevents interface or binds listeners to an existing one covering\n * the same file tree.\n * @param {Path} path           - to be watched\n * @param {Path} realPath       - real path for symlinks\n * @param {Function} listener   - called when fsevents emits events\n * @param {Function} rawEmitter - passes data to listeners of the 'raw' event\n * @returns {Function} closer\n */\nfunction setFSEventsListener(path, realPath, listener, rawEmitter) {\n  let watchPath = sysPath.extname(realPath) ? sysPath.dirname(realPath) : realPath;\n\n  const parentPath = sysPath.dirname(watchPath);\n  let cont = FSEventsWatchers.get(watchPath);\n\n  // If we've accumulated a substantial number of paths that\n  // could have been consolidated by watching one directory\n  // above the current one, create a watcher on the parent\n  // path instead, so that we do consolidate going forward.\n  if (couldConsolidate(parentPath)) {\n    watchPath = parentPath;\n  }\n\n  const resolvedPath = sysPath.resolve(path);\n  const hasSymlink = resolvedPath !== realPath;\n\n  const filteredListener = (fullPath, flags, info) => {\n    if (hasSymlink) fullPath = fullPath.replace(realPath, resolvedPath);\n    if (\n      fullPath === resolvedPath ||\n      !fullPath.indexOf(resolvedPath + sysPath.sep)\n    ) listener(fullPath, flags, info);\n  };\n\n  // check if there is already a watcher on a parent path\n  // modifies `watchPath` to the parent path when it finds a match\n  let watchedParent = false;\n  for (const watchedPath of FSEventsWatchers.keys()) {\n    if (realPath.indexOf(sysPath.resolve(watchedPath) + sysPath.sep) === 0) {\n      watchPath = watchedPath;\n      cont = FSEventsWatchers.get(watchPath);\n      watchedParent = true;\n      break;\n    }\n  }\n\n  if (cont || watchedParent) {\n    cont.listeners.add(filteredListener);\n  } else {\n    cont = {\n      listeners: new Set([filteredListener]),\n      rawEmitter,\n      watcher: createFSEventsInstance(watchPath, (fullPath, flags) => {\n        if (!cont.listeners.size) return;\n        if (flags & FSEVENT_FLAG_MUST_SCAN_SUBDIRS) return;\n        const info = fsevents.getInfo(fullPath, flags);\n        cont.listeners.forEach(list => {\n          list(fullPath, flags, info);\n        });\n\n        cont.rawEmitter(info.event, fullPath, info);\n      })\n    };\n    FSEventsWatchers.set(watchPath, cont);\n  }\n\n  // removes this instance's listeners and closes the underlying fsevents\n  // instance if there are no more listeners left\n  return () => {\n    const lst = cont.listeners;\n\n    lst.delete(filteredListener);\n    if (!lst.size) {\n      FSEventsWatchers.delete(watchPath);\n      if (cont.watcher) return cont.watcher.stop().then(() => {\n        cont.rawEmitter = cont.watcher = undefined;\n        Object.freeze(cont);\n      });\n    }\n  };\n}\n\n// Decide whether or not we should start a new higher-level\n// parent watcher\nconst couldConsolidate = (path) => {\n  let count = 0;\n  for (const watchPath of FSEventsWatchers.keys()) {\n    if (watchPath.indexOf(path) === 0) {\n      count++;\n      if (count >= consolidateThreshhold) {\n        return true;\n      }\n    }\n  }\n\n  return false;\n};\n\n// returns boolean indicating whether fsevents can be used\nconst canUse = () => fsevents && FSEventsWatchers.size < 128;\n\n// determines subdirectory traversal levels from root to path\nconst calcDepth = (path, root) => {\n  let i = 0;\n  while (!path.indexOf(root) && (path = sysPath.dirname(path)) !== root) i++;\n  return i;\n};\n\n// returns boolean indicating whether the fsevents' event info has the same type\n// as the one returned by fs.stat\nconst sameTypes = (info, stats) => (\n  info.type === FSEVENT_TYPE_DIRECTORY && stats.isDirectory() ||\n  info.type === FSEVENT_TYPE_SYMLINK && stats.isSymbolicLink() ||\n  info.type === FSEVENT_TYPE_FILE && stats.isFile()\n)\n\n/**\n * @mixin\n */\nclass FsEventsHandler {\n\n/**\n * @param {import('../index').FSWatcher} fsw\n */\nconstructor(fsw) {\n  this.fsw = fsw;\n}\ncheckIgnored(path, stats) {\n  const ipaths = this.fsw._ignoredPaths;\n  if (this.fsw._isIgnored(path, stats)) {\n    ipaths.add(path);\n    if (stats && stats.isDirectory()) {\n      ipaths.add(path + ROOT_GLOBSTAR);\n    }\n    return true;\n  }\n\n  ipaths.delete(path);\n  ipaths.delete(path + ROOT_GLOBSTAR);\n}\n\naddOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts) {\n  const event = watchedDir.has(item) ? EV_CHANGE : EV_ADD;\n  this.handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n}\n\nasync checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts) {\n  try {\n    const stats = await stat(path)\n    if (this.fsw.closed) return;\n    if (sameTypes(info, stats)) {\n      this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n    } else {\n      this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n    }\n  } catch (error) {\n    if (error.code === 'EACCES') {\n      this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n    } else {\n      this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n    }\n  }\n}\n\nhandleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts) {\n  if (this.fsw.closed || this.checkIgnored(path)) return;\n\n  if (event === EV_UNLINK) {\n    const isDirectory = info.type === FSEVENT_TYPE_DIRECTORY\n    // suppress unlink events on never before seen files\n    if (isDirectory || watchedDir.has(item)) {\n      this.fsw._remove(parent, item, isDirectory);\n    }\n  } else {\n    if (event === EV_ADD) {\n      // track new directories\n      if (info.type === FSEVENT_TYPE_DIRECTORY) this.fsw._getWatchedDir(path);\n\n      if (info.type === FSEVENT_TYPE_SYMLINK && opts.followSymlinks) {\n        // push symlinks back to the top of the stack to get handled\n        const curDepth = opts.depth === undefined ?\n          undefined : calcDepth(fullPath, realPath) + 1;\n        return this._addToFsEvents(path, false, true, curDepth);\n      }\n\n      // track new paths\n      // (other than symlinks being followed, which will be tracked soon)\n      this.fsw._getWatchedDir(parent).add(item);\n    }\n    /**\n     * @type {'add'|'addDir'|'unlink'|'unlinkDir'}\n     */\n    const eventName = info.type === FSEVENT_TYPE_DIRECTORY ? event + DIR_SUFFIX : event;\n    this.fsw._emit(eventName, path);\n    if (eventName === EV_ADD_DIR) this._addToFsEvents(path, false, true);\n  }\n}\n\n/**\n * Handle symlinks encountered during directory scan\n * @param {String} watchPath  - file/dir path to be watched with fsevents\n * @param {String} realPath   - real path (in case of symlinks)\n * @param {Function} transform  - path transformer\n * @param {Function} globFilter - path filter in case a glob pattern was provided\n * @returns {Function} closer for the watcher instance\n*/\n_watchWithFsEvents(watchPath, realPath, transform, globFilter) {\n  if (this.fsw.closed || this.fsw._isIgnored(watchPath)) return;\n  const opts = this.fsw.options;\n  const watchCallback = async (fullPath, flags, info) => {\n    if (this.fsw.closed) return;\n    if (\n      opts.depth !== undefined &&\n      calcDepth(fullPath, realPath) > opts.depth\n    ) return;\n    const path = transform(sysPath.join(\n      watchPath, sysPath.relative(watchPath, fullPath)\n    ));\n    if (globFilter && !globFilter(path)) return;\n    // ensure directories are tracked\n    const parent = sysPath.dirname(path);\n    const item = sysPath.basename(path);\n    const watchedDir = this.fsw._getWatchedDir(\n      info.type === FSEVENT_TYPE_DIRECTORY ? path : parent\n    );\n\n    // correct for wrong events emitted\n    if (wrongEventFlags.has(flags) || info.event === FSEVENT_UNKNOWN) {\n      if (typeof opts.ignored === FUNCTION_TYPE) {\n        let stats;\n        try {\n          stats = await stat(path);\n        } catch (error) {}\n        if (this.fsw.closed) return;\n        if (this.checkIgnored(path, stats)) return;\n        if (sameTypes(info, stats)) {\n          this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n        } else {\n          this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n        }\n      } else {\n        this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n      }\n    } else {\n      switch (info.event) {\n      case FSEVENT_CREATED:\n      case FSEVENT_MODIFIED:\n        return this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n      case FSEVENT_DELETED:\n      case FSEVENT_MOVED:\n        return this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n      }\n    }\n  };\n\n  const closer = setFSEventsListener(\n    watchPath,\n    realPath,\n    watchCallback,\n    this.fsw._emitRaw\n  );\n\n  this.fsw._emitReady();\n  return closer;\n}\n\n/**\n * Handle symlinks encountered during directory scan\n * @param {String} linkPath path to symlink\n * @param {String} fullPath absolute path to the symlink\n * @param {Function} transform pre-existing path transformer\n * @param {Number} curDepth level of subdirectories traversed to where symlink is\n * @returns {Promise<void>}\n */\nasync _handleFsEventsSymlink(linkPath, fullPath, transform, curDepth) {\n  // don't follow the same symlink more than once\n  if (this.fsw.closed || this.fsw._symlinkPaths.has(fullPath)) return;\n\n  this.fsw._symlinkPaths.set(fullPath, true);\n  this.fsw._incrReadyCount();\n\n  try {\n    const linkTarget = await realpath(linkPath);\n    if (this.fsw.closed) return;\n    if (this.fsw._isIgnored(linkTarget)) {\n      return this.fsw._emitReady();\n    }\n\n    this.fsw._incrReadyCount();\n\n    // add the linkTarget for watching with a wrapper for transform\n    // that causes emitted paths to incorporate the link's path\n    this._addToFsEvents(linkTarget || linkPath, (path) => {\n      let aliasedPath = linkPath;\n      if (linkTarget && linkTarget !== DOT_SLASH) {\n        aliasedPath = path.replace(linkTarget, linkPath);\n      } else if (path !== DOT_SLASH) {\n        aliasedPath = sysPath.join(linkPath, path);\n      }\n      return transform(aliasedPath);\n    }, false, curDepth);\n  } catch(error) {\n    if (this.fsw._handleError(error)) {\n      return this.fsw._emitReady();\n    }\n  }\n}\n\n/**\n *\n * @param {Path} newPath\n * @param {fs.Stats} stats\n */\nemitAdd(newPath, stats, processPath, opts, forceAdd) {\n  const pp = processPath(newPath);\n  const isDir = stats.isDirectory();\n  const dirObj = this.fsw._getWatchedDir(sysPath.dirname(pp));\n  const base = sysPath.basename(pp);\n\n  // ensure empty dirs get tracked\n  if (isDir) this.fsw._getWatchedDir(pp);\n  if (dirObj.has(base)) return;\n  dirObj.add(base);\n\n  if (!opts.ignoreInitial || forceAdd === true) {\n    this.fsw._emit(isDir ? EV_ADD_DIR : EV_ADD, pp, stats);\n  }\n}\n\ninitWatch(realPath, path, wh, processPath) {\n  if (this.fsw.closed) return;\n  const closer = this._watchWithFsEvents(\n    wh.watchPath,\n    sysPath.resolve(realPath || wh.watchPath),\n    processPath,\n    wh.globFilter\n  );\n  this.fsw._addPathCloser(path, closer);\n}\n\n/**\n * Handle added path with fsevents\n * @param {String} path file/dir path or glob pattern\n * @param {Function|Boolean=} transform converts working path to what the user expects\n * @param {Boolean=} forceAdd ensure add is emitted\n * @param {Number=} priorDepth Level of subdirectories already traversed.\n * @returns {Promise<void>}\n */\nasync _addToFsEvents(path, transform, forceAdd, priorDepth) {\n  if (this.fsw.closed) {\n    return;\n  }\n  const opts = this.fsw.options;\n  const processPath = typeof transform === FUNCTION_TYPE ? transform : IDENTITY_FN;\n\n  const wh = this.fsw._getWatchHelpers(path);\n\n  // evaluate what is at the path we're being asked to watch\n  try {\n    const stats = await statMethods[wh.statMethod](wh.watchPath);\n    if (this.fsw.closed) return;\n    if (this.fsw._isIgnored(wh.watchPath, stats)) {\n      throw null;\n    }\n    if (stats.isDirectory()) {\n      // emit addDir unless this is a glob parent\n      if (!wh.globFilter) this.emitAdd(processPath(path), stats, processPath, opts, forceAdd);\n\n      // don't recurse further if it would exceed depth setting\n      if (priorDepth && priorDepth > opts.depth) return;\n\n      // scan the contents of the dir\n      this.fsw._readdirp(wh.watchPath, {\n        fileFilter: entry => wh.filterPath(entry),\n        directoryFilter: entry => wh.filterDir(entry),\n        ...Depth(opts.depth - (priorDepth || 0))\n      }).on(STR_DATA, (entry) => {\n        // need to check filterPath on dirs b/c filterDir is less restrictive\n        if (this.fsw.closed) {\n          return;\n        }\n        if (entry.stats.isDirectory() && !wh.filterPath(entry)) return;\n\n        const joinedPath = sysPath.join(wh.watchPath, entry.path);\n        const {fullPath} = entry;\n\n        if (wh.followSymlinks && entry.stats.isSymbolicLink()) {\n          // preserve the current depth here since it can't be derived from\n          // real paths past the symlink\n          const curDepth = opts.depth === undefined ?\n            undefined : calcDepth(joinedPath, sysPath.resolve(wh.watchPath)) + 1;\n\n          this._handleFsEventsSymlink(joinedPath, fullPath, processPath, curDepth);\n        } else {\n          this.emitAdd(joinedPath, entry.stats, processPath, opts, forceAdd);\n        }\n      }).on(EV_ERROR, EMPTY_FN).on(STR_END, () => {\n        this.fsw._emitReady();\n      });\n    } else {\n      this.emitAdd(wh.watchPath, stats, processPath, opts, forceAdd);\n      this.fsw._emitReady();\n    }\n  } catch (error) {\n    if (!error || this.fsw._handleError(error)) {\n      // TODO: Strange thing: \"should not choke on an ignored watch path\" will be failed without 2 ready calls -__-\n      this.fsw._emitReady();\n      this.fsw._emitReady();\n    }\n  }\n\n  if (opts.persistent && forceAdd !== true) {\n    if (typeof transform === FUNCTION_TYPE) {\n      // realpath has already been resolved\n      this.initWatch(undefined, path, wh, processPath);\n    } else {\n      let realPath;\n      try {\n        realPath = await realpath(wh.watchPath);\n      } catch (e) {}\n      this.initWatch(realPath, path, wh, processPath);\n    }\n  }\n}\n\n}\n\nmodule.exports = FsEventsHandler;\nmodule.exports.canUse = canUse;\n", "'use strict';\n\nconst { EventEmitter } = require('events');\nconst fs = require('fs');\nconst sysPath = require('path');\nconst { promisify } = require('util');\nconst readdirp = require('readdirp');\nconst anymatch = require('anymatch').default;\nconst globParent = require('glob-parent');\nconst isGlob = require('is-glob');\nconst braces = require('braces');\nconst normalizePath = require('normalize-path');\n\nconst NodeFsHandler = require('./lib/nodefs-handler');\nconst FsEventsHandler = require('./lib/fsevents-handler');\nconst {\n  EV_ALL,\n  EV_READY,\n  EV_ADD,\n  EV_CHANGE,\n  EV_UNLINK,\n  EV_ADD_DIR,\n  EV_UNLINK_DIR,\n  EV_RAW,\n  EV_ERROR,\n\n  STR_CLOSE,\n  STR_END,\n\n  BACK_SLASH_RE,\n  DOUBLE_SLASH_RE,\n  SLASH_OR_BACK_SLASH_RE,\n  DOT_RE,\n  REPLACER_RE,\n\n  SLASH,\n  SLASH_SLASH,\n  BRACE_START,\n  BANG,\n  ONE_DOT,\n  TWO_DOTS,\n  GLOBSTAR,\n  SLASH_GLOBSTAR,\n  ANYMATCH_OPTS,\n  STRING_TYPE,\n  FUNCTION_TYPE,\n  EMPTY_STR,\n  EMPTY_FN,\n\n  isWindows,\n  isMacos,\n  isIBMi\n} = require('./lib/constants');\n\nconst stat = promisify(fs.stat);\nconst readdir = promisify(fs.readdir);\n\n/**\n * @typedef {String} Path\n * @typedef {'all'|'add'|'addDir'|'change'|'unlink'|'unlinkDir'|'raw'|'error'|'ready'} EventName\n * @typedef {'readdir'|'watch'|'add'|'remove'|'change'} ThrottleType\n */\n\n/**\n *\n * @typedef {Object} WatchHelpers\n * @property {Boolean} followSymlinks\n * @property {'stat'|'lstat'} statMethod\n * @property {Path} path\n * @property {Path} watchPath\n * @property {Function} entryPath\n * @property {Boolean} hasGlob\n * @property {Object} globFilter\n * @property {Function} filterPath\n * @property {Function} filterDir\n */\n\nconst arrify = (value = []) => Array.isArray(value) ? value : [value];\nconst flatten = (list, result = []) => {\n  list.forEach(item => {\n    if (Array.isArray(item)) {\n      flatten(item, result);\n    } else {\n      result.push(item);\n    }\n  });\n  return result;\n};\n\nconst unifyPaths = (paths_) => {\n  /**\n   * @type {Array<String>}\n   */\n  const paths = flatten(arrify(paths_));\n  if (!paths.every(p => typeof p === STRING_TYPE)) {\n    throw new TypeError(`Non-string provided as watch path: ${paths}`);\n  }\n  return paths.map(normalizePathToUnix);\n};\n\n// If SLASH_SLASH occurs at the beginning of path, it is not replaced\n//     because \"//StoragePC/DrivePool/Movies\" is a valid network path\nconst toUnix = (string) => {\n  let str = string.replace(BACK_SLASH_RE, SLASH);\n  let prepend = false;\n  if (str.startsWith(SLASH_SLASH)) {\n    prepend = true;\n  }\n  while (str.match(DOUBLE_SLASH_RE)) {\n    str = str.replace(DOUBLE_SLASH_RE, SLASH);\n  }\n  if (prepend) {\n    str = SLASH + str;\n  }\n  return str;\n};\n\n// Our version of upath.normalize\n// TODO: this is not equal to path-normalize module - investigate why\nconst normalizePathToUnix = (path) => toUnix(sysPath.normalize(toUnix(path)));\n\nconst normalizeIgnored = (cwd = EMPTY_STR) => (path) => {\n  if (typeof path !== STRING_TYPE) return path;\n  return normalizePathToUnix(sysPath.isAbsolute(path) ? path : sysPath.join(cwd, path));\n};\n\nconst getAbsolutePath = (path, cwd) => {\n  if (sysPath.isAbsolute(path)) {\n    return path;\n  }\n  if (path.startsWith(BANG)) {\n    return BANG + sysPath.join(cwd, path.slice(1));\n  }\n  return sysPath.join(cwd, path);\n};\n\nconst undef = (opts, key) => opts[key] === undefined;\n\n/**\n * Directory entry.\n * @property {Path} path\n * @property {Set<Path>} items\n */\nclass DirEntry {\n  /**\n   * @param {Path} dir\n   * @param {Function} removeWatcher\n   */\n  constructor(dir, removeWatcher) {\n    this.path = dir;\n    this._removeWatcher = removeWatcher;\n    /** @type {Set<Path>} */\n    this.items = new Set();\n  }\n\n  add(item) {\n    const {items} = this;\n    if (!items) return;\n    if (item !== ONE_DOT && item !== TWO_DOTS) items.add(item);\n  }\n\n  async remove(item) {\n    const {items} = this;\n    if (!items) return;\n    items.delete(item);\n    if (items.size > 0) return;\n\n    const dir = this.path;\n    try {\n      await readdir(dir);\n    } catch (err) {\n      if (this._removeWatcher) {\n        this._removeWatcher(sysPath.dirname(dir), sysPath.basename(dir));\n      }\n    }\n  }\n\n  has(item) {\n    const {items} = this;\n    if (!items) return;\n    return items.has(item);\n  }\n\n  /**\n   * @returns {Array<String>}\n   */\n  getChildren() {\n    const {items} = this;\n    if (!items) return;\n    return [...items.values()];\n  }\n\n  dispose() {\n    this.items.clear();\n    delete this.path;\n    delete this._removeWatcher;\n    delete this.items;\n    Object.freeze(this);\n  }\n}\n\nconst STAT_METHOD_F = 'stat';\nconst STAT_METHOD_L = 'lstat';\nclass WatchHelper {\n  constructor(path, watchPath, follow, fsw) {\n    this.fsw = fsw;\n    this.path = path = path.replace(REPLACER_RE, EMPTY_STR);\n    this.watchPath = watchPath;\n    this.fullWatchPath = sysPath.resolve(watchPath);\n    this.hasGlob = watchPath !== path;\n    /** @type {object|boolean} */\n    if (path === EMPTY_STR) this.hasGlob = false;\n    this.globSymlink = this.hasGlob && follow ? undefined : false;\n    this.globFilter = this.hasGlob ? anymatch(path, undefined, ANYMATCH_OPTS) : false;\n    this.dirParts = this.getDirParts(path);\n    this.dirParts.forEach((parts) => {\n      if (parts.length > 1) parts.pop();\n    });\n    this.followSymlinks = follow;\n    this.statMethod = follow ? STAT_METHOD_F : STAT_METHOD_L;\n  }\n\n  checkGlobSymlink(entry) {\n    // only need to resolve once\n    // first entry should always have entry.parentDir === EMPTY_STR\n    if (this.globSymlink === undefined) {\n      this.globSymlink = entry.fullParentDir === this.fullWatchPath ?\n        false : {realPath: entry.fullParentDir, linkPath: this.fullWatchPath};\n    }\n\n    if (this.globSymlink) {\n      return entry.fullPath.replace(this.globSymlink.realPath, this.globSymlink.linkPath);\n    }\n\n    return entry.fullPath;\n  }\n\n  entryPath(entry) {\n    return sysPath.join(this.watchPath,\n      sysPath.relative(this.watchPath, this.checkGlobSymlink(entry))\n    );\n  }\n\n  filterPath(entry) {\n    const {stats} = entry;\n    if (stats && stats.isSymbolicLink()) return this.filterDir(entry);\n    const resolvedPath = this.entryPath(entry);\n    const matchesGlob = this.hasGlob && typeof this.globFilter === FUNCTION_TYPE ?\n      this.globFilter(resolvedPath) : true;\n    return matchesGlob &&\n      this.fsw._isntIgnored(resolvedPath, stats) &&\n      this.fsw._hasReadPermissions(stats);\n  }\n\n  getDirParts(path) {\n    if (!this.hasGlob) return [];\n    const parts = [];\n    const expandedPath = path.includes(BRACE_START) ? braces.expand(path) : [path];\n    expandedPath.forEach((path) => {\n      parts.push(sysPath.relative(this.watchPath, path).split(SLASH_OR_BACK_SLASH_RE));\n    });\n    return parts;\n  }\n\n  filterDir(entry) {\n    if (this.hasGlob) {\n      const entryParts = this.getDirParts(this.checkGlobSymlink(entry));\n      let globstar = false;\n      this.unmatchedGlob = !this.dirParts.some((parts) => {\n        return parts.every((part, i) => {\n          if (part === GLOBSTAR) globstar = true;\n          return globstar || !entryParts[0][i] || anymatch(part, entryParts[0][i], ANYMATCH_OPTS);\n        });\n      });\n    }\n    return !this.unmatchedGlob && this.fsw._isntIgnored(this.entryPath(entry), entry.stats);\n  }\n}\n\n/**\n * Watches files & directories for changes. Emitted events:\n * `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error`\n *\n *     new FSWatcher()\n *       .add(directories)\n *       .on('add', path => log('File', path, 'was added'))\n */\nclass FSWatcher extends EventEmitter {\n// Not indenting methods for history sake; for now.\nconstructor(_opts) {\n  super();\n\n  const opts = {};\n  if (_opts) Object.assign(opts, _opts); // for frozen objects\n\n  /** @type {Map<String, DirEntry>} */\n  this._watched = new Map();\n  /** @type {Map<String, Array>} */\n  this._closers = new Map();\n  /** @type {Set<String>} */\n  this._ignoredPaths = new Set();\n\n  /** @type {Map<ThrottleType, Map>} */\n  this._throttled = new Map();\n\n  /** @type {Map<Path, String|Boolean>} */\n  this._symlinkPaths = new Map();\n\n  this._streams = new Set();\n  this.closed = false;\n\n  // Set up default options.\n  if (undef(opts, 'persistent')) opts.persistent = true;\n  if (undef(opts, 'ignoreInitial')) opts.ignoreInitial = false;\n  if (undef(opts, 'ignorePermissionErrors')) opts.ignorePermissionErrors = false;\n  if (undef(opts, 'interval')) opts.interval = 100;\n  if (undef(opts, 'binaryInterval')) opts.binaryInterval = 300;\n  if (undef(opts, 'disableGlobbing')) opts.disableGlobbing = false;\n  opts.enableBinaryInterval = opts.binaryInterval !== opts.interval;\n\n  // Enable fsevents on OS X when polling isn't explicitly enabled.\n  if (undef(opts, 'useFsEvents')) opts.useFsEvents = !opts.usePolling;\n\n  // If we can't use fsevents, ensure the options reflect it's disabled.\n  const canUseFsEvents = FsEventsHandler.canUse();\n  if (!canUseFsEvents) opts.useFsEvents = false;\n\n  // Use polling on Mac if not using fsevents.\n  // Other platforms use non-polling fs_watch.\n  if (undef(opts, 'usePolling') && !opts.useFsEvents) {\n    opts.usePolling = isMacos;\n  }\n\n  // Always default to polling on IBM i because fs.watch() is not available on IBM i.\n  if(isIBMi) {\n    opts.usePolling = true;\n  }\n\n  // Global override (useful for end-developers that need to force polling for all\n  // instances of chokidar, regardless of usage/dependency depth)\n  const envPoll = process.env.CHOKIDAR_USEPOLLING;\n  if (envPoll !== undefined) {\n    const envLower = envPoll.toLowerCase();\n\n    if (envLower === 'false' || envLower === '0') {\n      opts.usePolling = false;\n    } else if (envLower === 'true' || envLower === '1') {\n      opts.usePolling = true;\n    } else {\n      opts.usePolling = !!envLower;\n    }\n  }\n  const envInterval = process.env.CHOKIDAR_INTERVAL;\n  if (envInterval) {\n    opts.interval = Number.parseInt(envInterval, 10);\n  }\n\n  // Editor atomic write normalization enabled by default with fs.watch\n  if (undef(opts, 'atomic')) opts.atomic = !opts.usePolling && !opts.useFsEvents;\n  if (opts.atomic) this._pendingUnlinks = new Map();\n\n  if (undef(opts, 'followSymlinks')) opts.followSymlinks = true;\n\n  if (undef(opts, 'awaitWriteFinish')) opts.awaitWriteFinish = false;\n  if (opts.awaitWriteFinish === true) opts.awaitWriteFinish = {};\n  const awf = opts.awaitWriteFinish;\n  if (awf) {\n    if (!awf.stabilityThreshold) awf.stabilityThreshold = 2000;\n    if (!awf.pollInterval) awf.pollInterval = 100;\n    this._pendingWrites = new Map();\n  }\n  if (opts.ignored) opts.ignored = arrify(opts.ignored);\n\n  let readyCalls = 0;\n  this._emitReady = () => {\n    readyCalls++;\n    if (readyCalls >= this._readyCount) {\n      this._emitReady = EMPTY_FN;\n      this._readyEmitted = true;\n      // use process.nextTick to allow time for listener to be bound\n      process.nextTick(() => this.emit(EV_READY));\n    }\n  };\n  this._emitRaw = (...args) => this.emit(EV_RAW, ...args);\n  this._readyEmitted = false;\n  this.options = opts;\n\n  // Initialize with proper watcher.\n  if (opts.useFsEvents) {\n    this._fsEventsHandler = new FsEventsHandler(this);\n  } else {\n    this._nodeFsHandler = new NodeFsHandler(this);\n  }\n\n  // You\u2019re frozen when your heart\u2019s not open.\n  Object.freeze(opts);\n}\n\n// Public methods\n\n/**\n * Adds paths to be watched on an existing FSWatcher instance\n * @param {Path|Array<Path>} paths_\n * @param {String=} _origAdd private; for handling non-existent paths to be watched\n * @param {Boolean=} _internal private; indicates a non-user add\n * @returns {FSWatcher} for chaining\n */\nadd(paths_, _origAdd, _internal) {\n  const {cwd, disableGlobbing} = this.options;\n  this.closed = false;\n  let paths = unifyPaths(paths_);\n  if (cwd) {\n    paths = paths.map((path) => {\n      const absPath = getAbsolutePath(path, cwd);\n\n      // Check `path` instead of `absPath` because the cwd portion can't be a glob\n      if (disableGlobbing || !isGlob(path)) {\n        return absPath;\n      }\n      return normalizePath(absPath);\n    });\n  }\n\n  // set aside negated glob strings\n  paths = paths.filter((path) => {\n    if (path.startsWith(BANG)) {\n      this._ignoredPaths.add(path.slice(1));\n      return false;\n    }\n\n    // if a path is being added that was previously ignored, stop ignoring it\n    this._ignoredPaths.delete(path);\n    this._ignoredPaths.delete(path + SLASH_GLOBSTAR);\n\n    // reset the cached userIgnored anymatch fn\n    // to make ignoredPaths changes effective\n    this._userIgnored = undefined;\n\n    return true;\n  });\n\n  if (this.options.useFsEvents && this._fsEventsHandler) {\n    if (!this._readyCount) this._readyCount = paths.length;\n    if (this.options.persistent) this._readyCount += paths.length;\n    paths.forEach((path) => this._fsEventsHandler._addToFsEvents(path));\n  } else {\n    if (!this._readyCount) this._readyCount = 0;\n    this._readyCount += paths.length;\n    Promise.all(\n      paths.map(async path => {\n        const res = await this._nodeFsHandler._addToNodeFs(path, !_internal, 0, 0, _origAdd);\n        if (res) this._emitReady();\n        return res;\n      })\n    ).then(results => {\n      if (this.closed) return;\n      results.filter(item => item).forEach(item => {\n        this.add(sysPath.dirname(item), sysPath.basename(_origAdd || item));\n      });\n    });\n  }\n\n  return this;\n}\n\n/**\n * Close watchers or start ignoring events from specified paths.\n * @param {Path|Array<Path>} paths_ - string or array of strings, file/directory paths and/or globs\n * @returns {FSWatcher} for chaining\n*/\nunwatch(paths_) {\n  if (this.closed) return this;\n  const paths = unifyPaths(paths_);\n  const {cwd} = this.options;\n\n  paths.forEach((path) => {\n    // convert to absolute path unless relative path already matches\n    if (!sysPath.isAbsolute(path) && !this._closers.has(path)) {\n      if (cwd) path = sysPath.join(cwd, path);\n      path = sysPath.resolve(path);\n    }\n\n    this._closePath(path);\n\n    this._ignoredPaths.add(path);\n    if (this._watched.has(path)) {\n      this._ignoredPaths.add(path + SLASH_GLOBSTAR);\n    }\n\n    // reset the cached userIgnored anymatch fn\n    // to make ignoredPaths changes effective\n    this._userIgnored = undefined;\n  });\n\n  return this;\n}\n\n/**\n * Close watchers and remove all listeners from watched paths.\n * @returns {Promise<void>}.\n*/\nclose() {\n  if (this.closed) return this._closePromise;\n  this.closed = true;\n\n  // Memory management.\n  this.removeAllListeners();\n  const closers = [];\n  this._closers.forEach(closerList => closerList.forEach(closer => {\n    const promise = closer();\n    if (promise instanceof Promise) closers.push(promise);\n  }));\n  this._streams.forEach(stream => stream.destroy());\n  this._userIgnored = undefined;\n  this._readyCount = 0;\n  this._readyEmitted = false;\n  this._watched.forEach(dirent => dirent.dispose());\n  ['closers', 'watched', 'streams', 'symlinkPaths', 'throttled'].forEach(key => {\n    this[`_${key}`].clear();\n  });\n\n  this._closePromise = closers.length ? Promise.all(closers).then(() => undefined) : Promise.resolve();\n  return this._closePromise;\n}\n\n/**\n * Expose list of watched paths\n * @returns {Object} for chaining\n*/\ngetWatched() {\n  const watchList = {};\n  this._watched.forEach((entry, dir) => {\n    const key = this.options.cwd ? sysPath.relative(this.options.cwd, dir) : dir;\n    watchList[key || ONE_DOT] = entry.getChildren().sort();\n  });\n  return watchList;\n}\n\nemitWithAll(event, args) {\n  this.emit(...args);\n  if (event !== EV_ERROR) this.emit(EV_ALL, ...args);\n}\n\n// Common helpers\n// --------------\n\n/**\n * Normalize and emit events.\n * Calling _emit DOES NOT MEAN emit() would be called!\n * @param {EventName} event Type of event\n * @param {Path} path File or directory path\n * @param {*=} val1 arguments to be passed with event\n * @param {*=} val2\n * @param {*=} val3\n * @returns the error if defined, otherwise the value of the FSWatcher instance's `closed` flag\n */\nasync _emit(event, path, val1, val2, val3) {\n  if (this.closed) return;\n\n  const opts = this.options;\n  if (isWindows) path = sysPath.normalize(path);\n  if (opts.cwd) path = sysPath.relative(opts.cwd, path);\n  /** @type Array<any> */\n  const args = [event, path];\n  if (val3 !== undefined) args.push(val1, val2, val3);\n  else if (val2 !== undefined) args.push(val1, val2);\n  else if (val1 !== undefined) args.push(val1);\n\n  const awf = opts.awaitWriteFinish;\n  let pw;\n  if (awf && (pw = this._pendingWrites.get(path))) {\n    pw.lastChange = new Date();\n    return this;\n  }\n\n  if (opts.atomic) {\n    if (event === EV_UNLINK) {\n      this._pendingUnlinks.set(path, args);\n      setTimeout(() => {\n        this._pendingUnlinks.forEach((entry, path) => {\n          this.emit(...entry);\n          this.emit(EV_ALL, ...entry);\n          this._pendingUnlinks.delete(path);\n        });\n      }, typeof opts.atomic === 'number' ? opts.atomic : 100);\n      return this;\n    }\n    if (event === EV_ADD && this._pendingUnlinks.has(path)) {\n      event = args[0] = EV_CHANGE;\n      this._pendingUnlinks.delete(path);\n    }\n  }\n\n  if (awf && (event === EV_ADD || event === EV_CHANGE) && this._readyEmitted) {\n    const awfEmit = (err, stats) => {\n      if (err) {\n        event = args[0] = EV_ERROR;\n        args[1] = err;\n        this.emitWithAll(event, args);\n      } else if (stats) {\n        // if stats doesn't exist the file must have been deleted\n        if (args.length > 2) {\n          args[2] = stats;\n        } else {\n          args.push(stats);\n        }\n        this.emitWithAll(event, args);\n      }\n    };\n\n    this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit);\n    return this;\n  }\n\n  if (event === EV_CHANGE) {\n    const isThrottled = !this._throttle(EV_CHANGE, path, 50);\n    if (isThrottled) return this;\n  }\n\n  if (opts.alwaysStat && val1 === undefined &&\n    (event === EV_ADD || event === EV_ADD_DIR || event === EV_CHANGE)\n  ) {\n    const fullPath = opts.cwd ? sysPath.join(opts.cwd, path) : path;\n    let stats;\n    try {\n      stats = await stat(fullPath);\n    } catch (err) {}\n    // Suppress event when fs_stat fails, to avoid sending undefined 'stat'\n    if (!stats || this.closed) return;\n    args.push(stats);\n  }\n  this.emitWithAll(event, args);\n\n  return this;\n}\n\n/**\n * Common handler for errors\n * @param {Error} error\n * @returns {Error|Boolean} The error if defined, otherwise the value of the FSWatcher instance's `closed` flag\n */\n_handleError(error) {\n  const code = error && error.code;\n  if (error && code !== 'ENOENT' && code !== 'ENOTDIR' &&\n    (!this.options.ignorePermissionErrors || (code !== 'EPERM' && code !== 'EACCES'))\n  ) {\n    this.emit(EV_ERROR, error);\n  }\n  return error || this.closed;\n}\n\n/**\n * Helper utility for throttling\n * @param {ThrottleType} actionType type being throttled\n * @param {Path} path being acted upon\n * @param {Number} timeout duration of time to suppress duplicate actions\n * @returns {Object|false} tracking object or false if action should be suppressed\n */\n_throttle(actionType, path, timeout) {\n  if (!this._throttled.has(actionType)) {\n    this._throttled.set(actionType, new Map());\n  }\n\n  /** @type {Map<Path, Object>} */\n  const action = this._throttled.get(actionType);\n  /** @type {Object} */\n  const actionPath = action.get(path);\n\n  if (actionPath) {\n    actionPath.count++;\n    return false;\n  }\n\n  let timeoutObject;\n  const clear = () => {\n    const item = action.get(path);\n    const count = item ? item.count : 0;\n    action.delete(path);\n    clearTimeout(timeoutObject);\n    if (item) clearTimeout(item.timeoutObject);\n    return count;\n  };\n  timeoutObject = setTimeout(clear, timeout);\n  const thr = {timeoutObject, clear, count: 0};\n  action.set(path, thr);\n  return thr;\n}\n\n_incrReadyCount() {\n  return this._readyCount++;\n}\n\n/**\n * Awaits write operation to finish.\n * Polls a newly created file for size variations. When files size does not change for 'threshold' milliseconds calls callback.\n * @param {Path} path being acted upon\n * @param {Number} threshold Time in milliseconds a file size must be fixed before acknowledging write OP is finished\n * @param {EventName} event\n * @param {Function} awfEmit Callback to be called when ready for event to be emitted.\n */\n_awaitWriteFinish(path, threshold, event, awfEmit) {\n  let timeoutHandler;\n\n  let fullPath = path;\n  if (this.options.cwd && !sysPath.isAbsolute(path)) {\n    fullPath = sysPath.join(this.options.cwd, path);\n  }\n\n  const now = new Date();\n\n  const awaitWriteFinish = (prevStat) => {\n    fs.stat(fullPath, (err, curStat) => {\n      if (err || !this._pendingWrites.has(path)) {\n        if (err && err.code !== 'ENOENT') awfEmit(err);\n        return;\n      }\n\n      const now = Number(new Date());\n\n      if (prevStat && curStat.size !== prevStat.size) {\n        this._pendingWrites.get(path).lastChange = now;\n      }\n      const pw = this._pendingWrites.get(path);\n      const df = now - pw.lastChange;\n\n      if (df >= threshold) {\n        this._pendingWrites.delete(path);\n        awfEmit(undefined, curStat);\n      } else {\n        timeoutHandler = setTimeout(\n          awaitWriteFinish,\n          this.options.awaitWriteFinish.pollInterval,\n          curStat\n        );\n      }\n    });\n  };\n\n  if (!this._pendingWrites.has(path)) {\n    this._pendingWrites.set(path, {\n      lastChange: now,\n      cancelWait: () => {\n        this._pendingWrites.delete(path);\n        clearTimeout(timeoutHandler);\n        return event;\n      }\n    });\n    timeoutHandler = setTimeout(\n      awaitWriteFinish,\n      this.options.awaitWriteFinish.pollInterval\n    );\n  }\n}\n\n_getGlobIgnored() {\n  return [...this._ignoredPaths.values()];\n}\n\n/**\n * Determines whether user has asked to ignore this path.\n * @param {Path} path filepath or dir\n * @param {fs.Stats=} stats result of fs.stat\n * @returns {Boolean}\n */\n_isIgnored(path, stats) {\n  if (this.options.atomic && DOT_RE.test(path)) return true;\n  if (!this._userIgnored) {\n    const {cwd} = this.options;\n    const ign = this.options.ignored;\n\n    const ignored = ign && ign.map(normalizeIgnored(cwd));\n    const paths = arrify(ignored)\n      .filter((path) => typeof path === STRING_TYPE && !isGlob(path))\n      .map((path) => path + SLASH_GLOBSTAR);\n    const list = this._getGlobIgnored().map(normalizeIgnored(cwd)).concat(ignored, paths);\n    this._userIgnored = anymatch(list, undefined, ANYMATCH_OPTS);\n  }\n\n  return this._userIgnored([path, stats]);\n}\n\n_isntIgnored(path, stat) {\n  return !this._isIgnored(path, stat);\n}\n\n/**\n * Provides a set of common helpers and properties relating to symlink and glob handling.\n * @param {Path} path file, directory, or glob pattern being watched\n * @param {Number=} depth at any depth > 0, this isn't a glob\n * @returns {WatchHelper} object containing helpers for this path\n */\n_getWatchHelpers(path, depth) {\n  const watchPath = depth || this.options.disableGlobbing || !isGlob(path) ? path : globParent(path);\n  const follow = this.options.followSymlinks;\n\n  return new WatchHelper(path, watchPath, follow, this);\n}\n\n// Directory helpers\n// -----------------\n\n/**\n * Provides directory tracking objects\n * @param {String} directory path of the directory\n * @returns {DirEntry} the directory's tracking object\n */\n_getWatchedDir(directory) {\n  if (!this._boundRemove) this._boundRemove = this._remove.bind(this);\n  const dir = sysPath.resolve(directory);\n  if (!this._watched.has(dir)) this._watched.set(dir, new DirEntry(dir, this._boundRemove));\n  return this._watched.get(dir);\n}\n\n// File helpers\n// ------------\n\n/**\n * Check for read permissions.\n * Based on this answer on SO: https://stackoverflow.com/a/11781404/1358405\n * @param {fs.Stats} stats - object, result of fs_stat\n * @returns {Boolean} indicates whether the file can be read\n*/\n_hasReadPermissions(stats) {\n  if (this.options.ignorePermissionErrors) return true;\n\n  // stats.mode may be bigint\n  const md = stats && Number.parseInt(stats.mode, 10);\n  const st = md & 0o777;\n  const it = Number.parseInt(st.toString(8)[0], 10);\n  return Boolean(4 & it);\n}\n\n/**\n * Handles emitting unlink events for\n * files and directories, and via recursion, for\n * files and directories within directories that are unlinked\n * @param {String} directory within which the following item is located\n * @param {String} item      base path of item/directory\n * @returns {void}\n*/\n_remove(directory, item, isDirectory) {\n  // if what is being deleted is a directory, get that directory's paths\n  // for recursive deleting and cleaning of watched object\n  // if it is not a directory, nestedDirectoryChildren will be empty array\n  const path = sysPath.join(directory, item);\n  const fullPath = sysPath.resolve(path);\n  isDirectory = isDirectory != null\n    ? isDirectory\n    : this._watched.has(path) || this._watched.has(fullPath);\n\n  // prevent duplicate handling in case of arriving here nearly simultaneously\n  // via multiple paths (such as _handleFile and _handleDir)\n  if (!this._throttle('remove', path, 100)) return;\n\n  // if the only watched file is removed, watch for its return\n  if (!isDirectory && !this.options.useFsEvents && this._watched.size === 1) {\n    this.add(directory, item, true);\n  }\n\n  // This will create a new entry in the watched object in either case\n  // so we got to do the directory check beforehand\n  const wp = this._getWatchedDir(path);\n  const nestedDirectoryChildren = wp.getChildren();\n\n  // Recursively remove children directories / files.\n  nestedDirectoryChildren.forEach(nested => this._remove(path, nested));\n\n  // Check if item was on the watched list and remove it\n  const parent = this._getWatchedDir(directory);\n  const wasTracked = parent.has(item);\n  parent.remove(item);\n\n  // Fixes issue #1042 -> Relative paths were detected and added as symlinks\n  // (https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L612),\n  // but never removed from the map in case the path was deleted.\n  // This leads to an incorrect state if the path was recreated:\n  // https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L553\n  if (this._symlinkPaths.has(fullPath)) {\n    this._symlinkPaths.delete(fullPath);\n  }\n\n  // If we wait for this file to be fully written, cancel the wait.\n  let relPath = path;\n  if (this.options.cwd) relPath = sysPath.relative(this.options.cwd, path);\n  if (this.options.awaitWriteFinish && this._pendingWrites.has(relPath)) {\n    const event = this._pendingWrites.get(relPath).cancelWait();\n    if (event === EV_ADD) return;\n  }\n\n  // The Entry will either be a directory that just got removed\n  // or a bogus entry to a file, in either case we have to remove it\n  this._watched.delete(path);\n  this._watched.delete(fullPath);\n  const eventName = isDirectory ? EV_UNLINK_DIR : EV_UNLINK;\n  if (wasTracked && !this._isIgnored(path)) this._emit(eventName, path);\n\n  // Avoid conflicts if we later create another file with the same name\n  if (!this.options.useFsEvents) {\n    this._closePath(path);\n  }\n}\n\n/**\n * Closes all watchers for a path\n * @param {Path} path\n */\n_closePath(path) {\n  this._closeFile(path)\n  const dir = sysPath.dirname(path);\n  this._getWatchedDir(dir).remove(sysPath.basename(path));\n}\n\n/**\n * Closes only file-specific watchers\n * @param {Path} path\n */\n_closeFile(path) {\n  const closers = this._closers.get(path);\n  if (!closers) return;\n  closers.forEach(closer => closer());\n  this._closers.delete(path);\n}\n\n/**\n *\n * @param {Path} path\n * @param {Function} closer\n */\n_addPathCloser(path, closer) {\n  if (!closer) return;\n  let list = this._closers.get(path);\n  if (!list) {\n    list = [];\n    this._closers.set(path, list);\n  }\n  list.push(closer);\n}\n\n_readdirp(root, opts) {\n  if (this.closed) return;\n  const options = {type: EV_ALL, alwaysStat: true, lstat: true, ...opts};\n  let stream = readdirp(root, options);\n  this._streams.add(stream);\n  stream.once(STR_CLOSE, () => {\n    stream = undefined;\n  });\n  stream.once(STR_END, () => {\n    if (stream) {\n      this._streams.delete(stream);\n      stream = undefined;\n    }\n  });\n  return stream;\n}\n\n}\n\n// Export FSWatcher class\nexports.FSWatcher = FSWatcher;\n\n/**\n * Instantiates watcher with paths to be tracked.\n * @param {String|Array<String>} paths file/directory paths and/or globs\n * @param {Object=} options chokidar opts\n * @returns an instance of FSWatcher for chaining.\n */\nconst watch = (paths, options) => {\n  const watcher = new FSWatcher(options);\n  watcher.add(paths);\n  return watcher;\n};\n\nexports.watch = watch;\n", "\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar src_exports = {};\n__export(src_exports, {\n  KNOWN_AGENTS: () => KNOWN_AGENTS,\n  determineAgent: () => determineAgent\n});\nmodule.exports = __toCommonJS(src_exports);\nvar import_promises = require(\"node:fs/promises\");\nvar import_node_fs = require(\"node:fs\");\nconst DEVIN_LOCAL_PATH = \"/opt/.devin\";\nconst CURSOR = \"cursor\";\nconst CURSOR_CLI = \"cursor-cli\";\nconst CLAUDE = \"claude\";\nconst COWORK = \"cowork\";\nconst DEVIN = \"devin\";\nconst REPLIT = \"replit\";\nconst GEMINI = \"gemini\";\nconst CODEX = \"codex\";\nconst ANTIGRAVITY = \"antigravity\";\nconst AUGMENT_CLI = \"augment-cli\";\nconst OPENCODE = \"opencode\";\nconst GITHUB_COPILOT = \"github-copilot\";\nconst GITHUB_COPILOT_CLI = \"github-copilot-cli\";\nconst V0 = \"v0\";\nconst KNOWN_AGENTS = {\n  CURSOR,\n  CURSOR_CLI,\n  CLAUDE,\n  COWORK,\n  DEVIN,\n  REPLIT,\n  GEMINI,\n  CODEX,\n  ANTIGRAVITY,\n  AUGMENT_CLI,\n  OPENCODE,\n  GITHUB_COPILOT,\n  V0\n};\nasync function determineAgent() {\n  if (process.env.AI_AGENT) {\n    const name = process.env.AI_AGENT.trim();\n    if (name) {\n      if (name === GITHUB_COPILOT || name === GITHUB_COPILOT_CLI) {\n        return {\n          isAgent: true,\n          agent: { name: GITHUB_COPILOT }\n        };\n      }\n      if (name === V0) {\n        return {\n          isAgent: true,\n          agent: { name: V0 }\n        };\n      }\n      return {\n        isAgent: true,\n        agent: { name }\n      };\n    }\n  }\n  if (process.env.CURSOR_TRACE_ID) {\n    return { isAgent: true, agent: { name: CURSOR } };\n  }\n  if (process.env.CURSOR_AGENT || process.env.CURSOR_EXTENSION_HOST_ROLE === \"agent-exec\") {\n    return { isAgent: true, agent: { name: CURSOR_CLI } };\n  }\n  if (process.env.GEMINI_CLI) {\n    return { isAgent: true, agent: { name: GEMINI } };\n  }\n  if (process.env.CODEX_SANDBOX || process.env.CODEX_CI || process.env.CODEX_THREAD_ID) {\n    return { isAgent: true, agent: { name: CODEX } };\n  }\n  if (process.env.ANTIGRAVITY_AGENT) {\n    return { isAgent: true, agent: { name: ANTIGRAVITY } };\n  }\n  if (process.env.AUGMENT_AGENT) {\n    return { isAgent: true, agent: { name: AUGMENT_CLI } };\n  }\n  if (process.env.OPENCODE_CLIENT) {\n    return { isAgent: true, agent: { name: OPENCODE } };\n  }\n  if (process.env.CLAUDECODE || process.env.CLAUDE_CODE) {\n    if (process.env.CLAUDE_CODE_IS_COWORK) {\n      return { isAgent: true, agent: { name: COWORK } };\n    }\n    return { isAgent: true, agent: { name: CLAUDE } };\n  }\n  if (process.env.REPL_ID) {\n    return { isAgent: true, agent: { name: REPLIT } };\n  }\n  if (process.env.COPILOT_MODEL || process.env.COPILOT_ALLOW_ALL || process.env.COPILOT_GITHUB_TOKEN) {\n    return { isAgent: true, agent: { name: GITHUB_COPILOT } };\n  }\n  try {\n    await (0, import_promises.access)(DEVIN_LOCAL_PATH, import_node_fs.constants.F_OK);\n    return { isAgent: true, agent: { name: DEVIN } };\n  } catch (_error) {\n  }\n  return { isAgent: false, agent: void 0 };\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n  KNOWN_AGENTS,\n  determineAgent\n});\n", "const { format } = require('util');\n\nclass OPError extends Error {\n  constructor({ error_description, error, error_uri, session_state, state, scope }, response) {\n    super(!error_description ? error : `${error} (${error_description})`);\n\n    Object.assign(\n      this,\n      { error },\n      error_description && { error_description },\n      error_uri && { error_uri },\n      state && { state },\n      scope && { scope },\n      session_state && { session_state },\n    );\n\n    if (response) {\n      Object.defineProperty(this, 'response', {\n        value: response,\n      });\n    }\n\n    this.name = this.constructor.name;\n    Error.captureStackTrace(this, this.constructor);\n  }\n}\n\nclass RPError extends Error {\n  constructor(...args) {\n    if (typeof args[0] === 'string') {\n      super(format(...args));\n    } else {\n      const { message, printf, response, ...rest } = args[0];\n      if (printf) {\n        super(format(...printf));\n      } else {\n        super(message);\n      }\n      Object.assign(this, rest);\n      if (response) {\n        Object.defineProperty(this, 'response', {\n          value: response,\n        });\n      }\n    }\n\n    this.name = this.constructor.name;\n    Error.captureStackTrace(this, this.constructor);\n  }\n}\n\nmodule.exports = {\n  OPError,\n  RPError,\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst digest = (algorithm, data) => (0, crypto_1.createHash)(algorithm).update(data).digest();\nexports.default = digest;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.concatKdf = exports.lengthAndInput = exports.uint32be = exports.uint64be = exports.p2s = exports.concat = exports.decoder = exports.encoder = void 0;\nconst digest_js_1 = require(\"../runtime/digest.js\");\nexports.encoder = new TextEncoder();\nexports.decoder = new TextDecoder();\nconst MAX_INT32 = 2 ** 32;\nfunction concat(...buffers) {\n    const size = buffers.reduce((acc, { length }) => acc + length, 0);\n    const buf = new Uint8Array(size);\n    let i = 0;\n    buffers.forEach((buffer) => {\n        buf.set(buffer, i);\n        i += buffer.length;\n    });\n    return buf;\n}\nexports.concat = concat;\nfunction p2s(alg, p2sInput) {\n    return concat(exports.encoder.encode(alg), new Uint8Array([0]), p2sInput);\n}\nexports.p2s = p2s;\nfunction writeUInt32BE(buf, value, offset) {\n    if (value < 0 || value >= MAX_INT32) {\n        throw new RangeError(`value must be >= 0 and <= ${MAX_INT32 - 1}. Received ${value}`);\n    }\n    buf.set([value >>> 24, value >>> 16, value >>> 8, value & 0xff], offset);\n}\nfunction uint64be(value) {\n    const high = Math.floor(value / MAX_INT32);\n    const low = value % MAX_INT32;\n    const buf = new Uint8Array(8);\n    writeUInt32BE(buf, high, 0);\n    writeUInt32BE(buf, low, 4);\n    return buf;\n}\nexports.uint64be = uint64be;\nfunction uint32be(value) {\n    const buf = new Uint8Array(4);\n    writeUInt32BE(buf, value);\n    return buf;\n}\nexports.uint32be = uint32be;\nfunction lengthAndInput(input) {\n    return concat(uint32be(input.length), input);\n}\nexports.lengthAndInput = lengthAndInput;\nasync function concatKdf(secret, bits, value) {\n    const iterations = Math.ceil((bits >> 3) / 32);\n    const res = new Uint8Array(iterations * 32);\n    for (let iter = 0; iter < iterations; iter++) {\n        const buf = new Uint8Array(4 + secret.length + value.length);\n        buf.set(uint32be(iter + 1));\n        buf.set(secret, 4);\n        buf.set(value, 4 + secret.length);\n        res.set(await (0, digest_js_1.default)('sha256', buf), iter * 32);\n    }\n    return res.slice(0, bits >> 3);\n}\nexports.concatKdf = concatKdf;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decode = exports.encode = exports.encodeBase64 = exports.decodeBase64 = void 0;\nconst buffer_1 = require(\"buffer\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nlet encode;\nfunction normalize(input) {\n    let encoded = input;\n    if (encoded instanceof Uint8Array) {\n        encoded = buffer_utils_js_1.decoder.decode(encoded);\n    }\n    return encoded;\n}\nif (buffer_1.Buffer.isEncoding('base64url')) {\n    exports.encode = encode = (input) => buffer_1.Buffer.from(input).toString('base64url');\n}\nelse {\n    exports.encode = encode = (input) => buffer_1.Buffer.from(input).toString('base64').replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n}\nconst decodeBase64 = (input) => buffer_1.Buffer.from(input, 'base64');\nexports.decodeBase64 = decodeBase64;\nconst encodeBase64 = (input) => buffer_1.Buffer.from(input).toString('base64');\nexports.encodeBase64 = encodeBase64;\nconst decode = (input) => buffer_1.Buffer.from(normalize(input), 'base64');\nexports.decode = decode;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JWSSignatureVerificationFailed = exports.JWKSTimeout = exports.JWKSMultipleMatchingKeys = exports.JWKSNoMatchingKey = exports.JWKSInvalid = exports.JWKInvalid = exports.JWTInvalid = exports.JWSInvalid = exports.JWEInvalid = exports.JWEDecompressionFailed = exports.JWEDecryptionFailed = exports.JOSENotSupported = exports.JOSEAlgNotAllowed = exports.JWTExpired = exports.JWTClaimValidationFailed = exports.JOSEError = void 0;\nclass JOSEError extends Error {\n    static get code() {\n        return 'ERR_JOSE_GENERIC';\n    }\n    constructor(message) {\n        var _a;\n        super(message);\n        this.code = 'ERR_JOSE_GENERIC';\n        this.name = this.constructor.name;\n        (_a = Error.captureStackTrace) === null || _a === void 0 ? void 0 : _a.call(Error, this, this.constructor);\n    }\n}\nexports.JOSEError = JOSEError;\nclass JWTClaimValidationFailed extends JOSEError {\n    static get code() {\n        return 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n    }\n    constructor(message, claim = 'unspecified', reason = 'unspecified') {\n        super(message);\n        this.code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n        this.claim = claim;\n        this.reason = reason;\n    }\n}\nexports.JWTClaimValidationFailed = JWTClaimValidationFailed;\nclass JWTExpired extends JOSEError {\n    static get code() {\n        return 'ERR_JWT_EXPIRED';\n    }\n    constructor(message, claim = 'unspecified', reason = 'unspecified') {\n        super(message);\n        this.code = 'ERR_JWT_EXPIRED';\n        this.claim = claim;\n        this.reason = reason;\n    }\n}\nexports.JWTExpired = JWTExpired;\nclass JOSEAlgNotAllowed extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n    }\n    static get code() {\n        return 'ERR_JOSE_ALG_NOT_ALLOWED';\n    }\n}\nexports.JOSEAlgNotAllowed = JOSEAlgNotAllowed;\nclass JOSENotSupported extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JOSE_NOT_SUPPORTED';\n    }\n    static get code() {\n        return 'ERR_JOSE_NOT_SUPPORTED';\n    }\n}\nexports.JOSENotSupported = JOSENotSupported;\nclass JWEDecryptionFailed extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWE_DECRYPTION_FAILED';\n        this.message = 'decryption operation failed';\n    }\n    static get code() {\n        return 'ERR_JWE_DECRYPTION_FAILED';\n    }\n}\nexports.JWEDecryptionFailed = JWEDecryptionFailed;\nclass JWEDecompressionFailed extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWE_DECOMPRESSION_FAILED';\n        this.message = 'decompression operation failed';\n    }\n    static get code() {\n        return 'ERR_JWE_DECOMPRESSION_FAILED';\n    }\n}\nexports.JWEDecompressionFailed = JWEDecompressionFailed;\nclass JWEInvalid extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWE_INVALID';\n    }\n    static get code() {\n        return 'ERR_JWE_INVALID';\n    }\n}\nexports.JWEInvalid = JWEInvalid;\nclass JWSInvalid extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWS_INVALID';\n    }\n    static get code() {\n        return 'ERR_JWS_INVALID';\n    }\n}\nexports.JWSInvalid = JWSInvalid;\nclass JWTInvalid extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWT_INVALID';\n    }\n    static get code() {\n        return 'ERR_JWT_INVALID';\n    }\n}\nexports.JWTInvalid = JWTInvalid;\nclass JWKInvalid extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWK_INVALID';\n    }\n    static get code() {\n        return 'ERR_JWK_INVALID';\n    }\n}\nexports.JWKInvalid = JWKInvalid;\nclass JWKSInvalid extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWKS_INVALID';\n    }\n    static get code() {\n        return 'ERR_JWKS_INVALID';\n    }\n}\nexports.JWKSInvalid = JWKSInvalid;\nclass JWKSNoMatchingKey extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWKS_NO_MATCHING_KEY';\n        this.message = 'no applicable key found in the JSON Web Key Set';\n    }\n    static get code() {\n        return 'ERR_JWKS_NO_MATCHING_KEY';\n    }\n}\nexports.JWKSNoMatchingKey = JWKSNoMatchingKey;\nclass JWKSMultipleMatchingKeys extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n        this.message = 'multiple matching keys found in the JSON Web Key Set';\n    }\n    static get code() {\n        return 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n    }\n}\nexports.JWKSMultipleMatchingKeys = JWKSMultipleMatchingKeys;\nSymbol.asyncIterator;\nclass JWKSTimeout extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWKS_TIMEOUT';\n        this.message = 'request timed out';\n    }\n    static get code() {\n        return 'ERR_JWKS_TIMEOUT';\n    }\n}\nexports.JWKSTimeout = JWKSTimeout;\nclass JWSSignatureVerificationFailed extends JOSEError {\n    constructor() {\n        super(...arguments);\n        this.code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n        this.message = 'signature verification failed';\n    }\n    static get code() {\n        return 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n    }\n}\nexports.JWSSignatureVerificationFailed = JWSSignatureVerificationFailed;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = void 0;\nvar crypto_1 = require(\"crypto\");\nObject.defineProperty(exports, \"default\", { enumerable: true, get: function () { return crypto_1.randomFillSync; } });\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bitLength = void 0;\nconst errors_js_1 = require(\"../util/errors.js\");\nconst random_js_1 = require(\"../runtime/random.js\");\nfunction bitLength(alg) {\n    switch (alg) {\n        case 'A128GCM':\n        case 'A128GCMKW':\n        case 'A192GCM':\n        case 'A192GCMKW':\n        case 'A256GCM':\n        case 'A256GCMKW':\n            return 96;\n        case 'A128CBC-HS256':\n        case 'A192CBC-HS384':\n        case 'A256CBC-HS512':\n            return 128;\n        default:\n            throw new errors_js_1.JOSENotSupported(`Unsupported JWE Algorithm: ${alg}`);\n    }\n}\nexports.bitLength = bitLength;\nexports.default = (alg) => (0, random_js_1.default)(new Uint8Array(bitLength(alg) >> 3));\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst errors_js_1 = require(\"../util/errors.js\");\nconst iv_js_1 = require(\"./iv.js\");\nconst checkIvLength = (enc, iv) => {\n    if (iv.length << 3 !== (0, iv_js_1.bitLength)(enc)) {\n        throw new errors_js_1.JWEInvalid('Invalid Initialization Vector length');\n    }\n};\nexports.default = checkIvLength;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst util = require(\"util\");\nexports.default = util.types.isKeyObject\n    ? (obj) => util.types.isKeyObject(obj)\n    : (obj) => obj != null && obj instanceof crypto_1.KeyObject;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst errors_js_1 = require(\"../util/errors.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst checkCekLength = (enc, cek) => {\n    let expected;\n    switch (enc) {\n        case 'A128CBC-HS256':\n        case 'A192CBC-HS384':\n        case 'A256CBC-HS512':\n            expected = parseInt(enc.slice(-3), 10);\n            break;\n        case 'A128GCM':\n        case 'A192GCM':\n        case 'A256GCM':\n            expected = parseInt(enc.slice(1, 4), 10);\n            break;\n        default:\n            throw new errors_js_1.JOSENotSupported(`Content Encryption Algorithm ${enc} is not supported either by JOSE or your javascript runtime`);\n    }\n    if (cek instanceof Uint8Array) {\n        const actual = cek.byteLength << 3;\n        if (actual !== expected) {\n            throw new errors_js_1.JWEInvalid(`Invalid Content Encryption Key length. Expected ${expected} bits, got ${actual} bits`);\n        }\n        return;\n    }\n    if ((0, is_key_object_js_1.default)(cek) && cek.type === 'secret') {\n        const actual = cek.symmetricKeySize << 3;\n        if (actual !== expected) {\n            throw new errors_js_1.JWEInvalid(`Invalid Content Encryption Key length. Expected ${expected} bits, got ${actual} bits`);\n        }\n        return;\n    }\n    throw new TypeError('Invalid Content Encryption Key type');\n};\nexports.default = checkCekLength;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst timingSafeEqual = crypto_1.timingSafeEqual;\nexports.default = timingSafeEqual;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nfunction cbcTag(aad, iv, ciphertext, macSize, macKey, keySize) {\n    const macData = (0, buffer_utils_js_1.concat)(aad, iv, ciphertext, (0, buffer_utils_js_1.uint64be)(aad.length << 3));\n    const hmac = (0, crypto_1.createHmac)(`sha${macSize}`, macKey);\n    hmac.update(macData);\n    return hmac.digest().slice(0, keySize >> 3);\n}\nexports.default = cbcTag;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isCryptoKey = void 0;\nconst crypto = require(\"crypto\");\nconst util = require(\"util\");\nconst webcrypto = crypto.webcrypto;\nexports.default = webcrypto;\nexports.isCryptoKey = util.types.isCryptoKey\n    ? (key) => util.types.isCryptoKey(key)\n    :\n        (key) => false;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.checkEncCryptoKey = exports.checkSigCryptoKey = void 0;\nfunction unusable(name, prop = 'algorithm.name') {\n    return new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);\n}\nfunction isAlgorithm(algorithm, name) {\n    return algorithm.name === name;\n}\nfunction getHashLength(hash) {\n    return parseInt(hash.name.slice(4), 10);\n}\nfunction getNamedCurve(alg) {\n    switch (alg) {\n        case 'ES256':\n            return 'P-256';\n        case 'ES384':\n            return 'P-384';\n        case 'ES512':\n            return 'P-521';\n        default:\n            throw new Error('unreachable');\n    }\n}\nfunction checkUsage(key, usages) {\n    if (usages.length && !usages.some((expected) => key.usages.includes(expected))) {\n        let msg = 'CryptoKey does not support this operation, its usages must include ';\n        if (usages.length > 2) {\n            const last = usages.pop();\n            msg += `one of ${usages.join(', ')}, or ${last}.`;\n        }\n        else if (usages.length === 2) {\n            msg += `one of ${usages[0]} or ${usages[1]}.`;\n        }\n        else {\n            msg += `${usages[0]}.`;\n        }\n        throw new TypeError(msg);\n    }\n}\nfunction checkSigCryptoKey(key, alg, ...usages) {\n    switch (alg) {\n        case 'HS256':\n        case 'HS384':\n        case 'HS512': {\n            if (!isAlgorithm(key.algorithm, 'HMAC'))\n                throw unusable('HMAC');\n            const expected = parseInt(alg.slice(2), 10);\n            const actual = getHashLength(key.algorithm.hash);\n            if (actual !== expected)\n                throw unusable(`SHA-${expected}`, 'algorithm.hash');\n            break;\n        }\n        case 'RS256':\n        case 'RS384':\n        case 'RS512': {\n            if (!isAlgorithm(key.algorithm, 'RSASSA-PKCS1-v1_5'))\n                throw unusable('RSASSA-PKCS1-v1_5');\n            const expected = parseInt(alg.slice(2), 10);\n            const actual = getHashLength(key.algorithm.hash);\n            if (actual !== expected)\n                throw unusable(`SHA-${expected}`, 'algorithm.hash');\n            break;\n        }\n        case 'PS256':\n        case 'PS384':\n        case 'PS512': {\n            if (!isAlgorithm(key.algorithm, 'RSA-PSS'))\n                throw unusable('RSA-PSS');\n            const expected = parseInt(alg.slice(2), 10);\n            const actual = getHashLength(key.algorithm.hash);\n            if (actual !== expected)\n                throw unusable(`SHA-${expected}`, 'algorithm.hash');\n            break;\n        }\n        case 'EdDSA': {\n            if (key.algorithm.name !== 'Ed25519' && key.algorithm.name !== 'Ed448') {\n                throw unusable('Ed25519 or Ed448');\n            }\n            break;\n        }\n        case 'ES256':\n        case 'ES384':\n        case 'ES512': {\n            if (!isAlgorithm(key.algorithm, 'ECDSA'))\n                throw unusable('ECDSA');\n            const expected = getNamedCurve(alg);\n            const actual = key.algorithm.namedCurve;\n            if (actual !== expected)\n                throw unusable(expected, 'algorithm.namedCurve');\n            break;\n        }\n        default:\n            throw new TypeError('CryptoKey does not support this operation');\n    }\n    checkUsage(key, usages);\n}\nexports.checkSigCryptoKey = checkSigCryptoKey;\nfunction checkEncCryptoKey(key, alg, ...usages) {\n    switch (alg) {\n        case 'A128GCM':\n        case 'A192GCM':\n        case 'A256GCM': {\n            if (!isAlgorithm(key.algorithm, 'AES-GCM'))\n                throw unusable('AES-GCM');\n            const expected = parseInt(alg.slice(1, 4), 10);\n            const actual = key.algorithm.length;\n            if (actual !== expected)\n                throw unusable(expected, 'algorithm.length');\n            break;\n        }\n        case 'A128KW':\n        case 'A192KW':\n        case 'A256KW': {\n            if (!isAlgorithm(key.algorithm, 'AES-KW'))\n                throw unusable('AES-KW');\n            const expected = parseInt(alg.slice(1, 4), 10);\n            const actual = key.algorithm.length;\n            if (actual !== expected)\n                throw unusable(expected, 'algorithm.length');\n            break;\n        }\n        case 'ECDH': {\n            switch (key.algorithm.name) {\n                case 'ECDH':\n                case 'X25519':\n                case 'X448':\n                    break;\n                default:\n                    throw unusable('ECDH, X25519, or X448');\n            }\n            break;\n        }\n        case 'PBES2-HS256+A128KW':\n        case 'PBES2-HS384+A192KW':\n        case 'PBES2-HS512+A256KW':\n            if (!isAlgorithm(key.algorithm, 'PBKDF2'))\n                throw unusable('PBKDF2');\n            break;\n        case 'RSA-OAEP':\n        case 'RSA-OAEP-256':\n        case 'RSA-OAEP-384':\n        case 'RSA-OAEP-512': {\n            if (!isAlgorithm(key.algorithm, 'RSA-OAEP'))\n                throw unusable('RSA-OAEP');\n            const expected = parseInt(alg.slice(9), 10) || 1;\n            const actual = getHashLength(key.algorithm.hash);\n            if (actual !== expected)\n                throw unusable(`SHA-${expected}`, 'algorithm.hash');\n            break;\n        }\n        default:\n            throw new TypeError('CryptoKey does not support this operation');\n    }\n    checkUsage(key, usages);\n}\nexports.checkEncCryptoKey = checkEncCryptoKey;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.withAlg = void 0;\nfunction message(msg, actual, ...types) {\n    if (types.length > 2) {\n        const last = types.pop();\n        msg += `one of type ${types.join(', ')}, or ${last}.`;\n    }\n    else if (types.length === 2) {\n        msg += `one of type ${types[0]} or ${types[1]}.`;\n    }\n    else {\n        msg += `of type ${types[0]}.`;\n    }\n    if (actual == null) {\n        msg += ` Received ${actual}`;\n    }\n    else if (typeof actual === 'function' && actual.name) {\n        msg += ` Received function ${actual.name}`;\n    }\n    else if (typeof actual === 'object' && actual != null) {\n        if (actual.constructor && actual.constructor.name) {\n            msg += ` Received an instance of ${actual.constructor.name}`;\n        }\n    }\n    return msg;\n}\nexports.default = (actual, ...types) => {\n    return message('Key must be ', actual, ...types);\n};\nfunction withAlg(alg, actual, ...types) {\n    return message(`Key for the ${alg} algorithm must be `, actual, ...types);\n}\nexports.withAlg = withAlg;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nlet ciphers;\nexports.default = (algorithm) => {\n    ciphers || (ciphers = new Set((0, crypto_1.getCiphers)()));\n    return ciphers.has(algorithm);\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.types = void 0;\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nexports.default = (key) => (0, is_key_object_js_1.default)(key) || (0, webcrypto_js_1.isCryptoKey)(key);\nconst types = ['KeyObject'];\nexports.types = types;\nif (globalThis.CryptoKey || (webcrypto_js_1.default === null || webcrypto_js_1.default === void 0 ? void 0 : webcrypto_js_1.default.CryptoKey)) {\n    types.push('CryptoKey');\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst check_iv_length_js_1 = require(\"../lib/check_iv_length.js\");\nconst check_cek_length_js_1 = require(\"./check_cek_length.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst timing_safe_equal_js_1 = require(\"./timing_safe_equal.js\");\nconst cbc_tag_js_1 = require(\"./cbc_tag.js\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst crypto_key_js_1 = require(\"../lib/crypto_key.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst ciphers_js_1 = require(\"./ciphers.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nfunction cbcDecrypt(enc, cek, ciphertext, iv, tag, aad) {\n    const keySize = parseInt(enc.slice(1, 4), 10);\n    if ((0, is_key_object_js_1.default)(cek)) {\n        cek = cek.export();\n    }\n    const encKey = cek.subarray(keySize >> 3);\n    const macKey = cek.subarray(0, keySize >> 3);\n    const macSize = parseInt(enc.slice(-3), 10);\n    const algorithm = `aes-${keySize}-cbc`;\n    if (!(0, ciphers_js_1.default)(algorithm)) {\n        throw new errors_js_1.JOSENotSupported(`alg ${enc} is not supported by your javascript runtime`);\n    }\n    const expectedTag = (0, cbc_tag_js_1.default)(aad, iv, ciphertext, macSize, macKey, keySize);\n    let macCheckPassed;\n    try {\n        macCheckPassed = (0, timing_safe_equal_js_1.default)(tag, expectedTag);\n    }\n    catch {\n    }\n    if (!macCheckPassed) {\n        throw new errors_js_1.JWEDecryptionFailed();\n    }\n    let plaintext;\n    try {\n        const decipher = (0, crypto_1.createDecipheriv)(algorithm, encKey, iv);\n        plaintext = (0, buffer_utils_js_1.concat)(decipher.update(ciphertext), decipher.final());\n    }\n    catch {\n    }\n    if (!plaintext) {\n        throw new errors_js_1.JWEDecryptionFailed();\n    }\n    return plaintext;\n}\nfunction gcmDecrypt(enc, cek, ciphertext, iv, tag, aad) {\n    const keySize = parseInt(enc.slice(1, 4), 10);\n    const algorithm = `aes-${keySize}-gcm`;\n    if (!(0, ciphers_js_1.default)(algorithm)) {\n        throw new errors_js_1.JOSENotSupported(`alg ${enc} is not supported by your javascript runtime`);\n    }\n    try {\n        const decipher = (0, crypto_1.createDecipheriv)(algorithm, cek, iv, { authTagLength: 16 });\n        decipher.setAuthTag(tag);\n        if (aad.byteLength) {\n            decipher.setAAD(aad, { plaintextLength: ciphertext.length });\n        }\n        const plaintext = decipher.update(ciphertext);\n        decipher.final();\n        return plaintext;\n    }\n    catch {\n        throw new errors_js_1.JWEDecryptionFailed();\n    }\n}\nconst decrypt = (enc, cek, ciphertext, iv, tag, aad) => {\n    let key;\n    if ((0, webcrypto_js_1.isCryptoKey)(cek)) {\n        (0, crypto_key_js_1.checkEncCryptoKey)(cek, enc, 'decrypt');\n        key = crypto_1.KeyObject.from(cek);\n    }\n    else if (cek instanceof Uint8Array || (0, is_key_object_js_1.default)(cek)) {\n        key = cek;\n    }\n    else {\n        throw new TypeError((0, invalid_key_input_js_1.default)(cek, ...is_key_like_js_1.types, 'Uint8Array'));\n    }\n    (0, check_cek_length_js_1.default)(enc, key);\n    (0, check_iv_length_js_1.default)(enc, iv);\n    switch (enc) {\n        case 'A128CBC-HS256':\n        case 'A192CBC-HS384':\n        case 'A256CBC-HS512':\n            return cbcDecrypt(enc, key, ciphertext, iv, tag, aad);\n        case 'A128GCM':\n        case 'A192GCM':\n        case 'A256GCM':\n            return gcmDecrypt(enc, key, ciphertext, iv, tag, aad);\n        default:\n            throw new errors_js_1.JOSENotSupported('Unsupported JWE Content Encryption Algorithm');\n    }\n};\nexports.default = decrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.deflate = exports.inflate = void 0;\nconst util_1 = require(\"util\");\nconst zlib_1 = require(\"zlib\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst inflateRaw = (0, util_1.promisify)(zlib_1.inflateRaw);\nconst deflateRaw = (0, util_1.promisify)(zlib_1.deflateRaw);\nconst inflate = (input) => inflateRaw(input, { maxOutputLength: 250000 }).catch(() => {\n    throw new errors_js_1.JWEDecompressionFailed();\n});\nexports.inflate = inflate;\nconst deflate = (input) => deflateRaw(input);\nexports.deflate = deflate;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst isDisjoint = (...headers) => {\n    const sources = headers.filter(Boolean);\n    if (sources.length === 0 || sources.length === 1) {\n        return true;\n    }\n    let acc;\n    for (const header of sources) {\n        const parameters = Object.keys(header);\n        if (!acc || acc.size === 0) {\n            acc = new Set(parameters);\n            continue;\n        }\n        for (const parameter of parameters) {\n            if (acc.has(parameter)) {\n                return false;\n            }\n            acc.add(parameter);\n        }\n    }\n    return true;\n};\nexports.default = isDisjoint;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction isObjectLike(value) {\n    return typeof value === 'object' && value !== null;\n}\nfunction isObject(input) {\n    if (!isObjectLike(input) || Object.prototype.toString.call(input) !== '[object Object]') {\n        return false;\n    }\n    if (Object.getPrototypeOf(input) === null) {\n        return true;\n    }\n    let proto = input;\n    while (Object.getPrototypeOf(proto) !== null) {\n        proto = Object.getPrototypeOf(proto);\n    }\n    return Object.getPrototypeOf(input) === proto;\n}\nexports.default = isObject;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unwrap = exports.wrap = void 0;\nconst buffer_1 = require(\"buffer\");\nconst crypto_1 = require(\"crypto\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst crypto_key_js_1 = require(\"../lib/crypto_key.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst ciphers_js_1 = require(\"./ciphers.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nfunction checkKeySize(key, alg) {\n    if (key.symmetricKeySize << 3 !== parseInt(alg.slice(1, 4), 10)) {\n        throw new TypeError(`Invalid key size for alg: ${alg}`);\n    }\n}\nfunction ensureKeyObject(key, alg, usage) {\n    if ((0, is_key_object_js_1.default)(key)) {\n        return key;\n    }\n    if (key instanceof Uint8Array) {\n        return (0, crypto_1.createSecretKey)(key);\n    }\n    if ((0, webcrypto_js_1.isCryptoKey)(key)) {\n        (0, crypto_key_js_1.checkEncCryptoKey)(key, alg, usage);\n        return crypto_1.KeyObject.from(key);\n    }\n    throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types, 'Uint8Array'));\n}\nconst wrap = (alg, key, cek) => {\n    const size = parseInt(alg.slice(1, 4), 10);\n    const algorithm = `aes${size}-wrap`;\n    if (!(0, ciphers_js_1.default)(algorithm)) {\n        throw new errors_js_1.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n    }\n    const keyObject = ensureKeyObject(key, alg, 'wrapKey');\n    checkKeySize(keyObject, alg);\n    const cipher = (0, crypto_1.createCipheriv)(algorithm, keyObject, buffer_1.Buffer.alloc(8, 0xa6));\n    return (0, buffer_utils_js_1.concat)(cipher.update(cek), cipher.final());\n};\nexports.wrap = wrap;\nconst unwrap = (alg, key, encryptedKey) => {\n    const size = parseInt(alg.slice(1, 4), 10);\n    const algorithm = `aes${size}-wrap`;\n    if (!(0, ciphers_js_1.default)(algorithm)) {\n        throw new errors_js_1.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n    }\n    const keyObject = ensureKeyObject(key, alg, 'unwrapKey');\n    checkKeySize(keyObject, alg);\n    const cipher = (0, crypto_1.createDecipheriv)(algorithm, keyObject, buffer_1.Buffer.alloc(8, 0xa6));\n    return (0, buffer_utils_js_1.concat)(cipher.update(encryptedKey), cipher.final());\n};\nexports.unwrap = unwrap;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.setCurve = exports.weakMap = void 0;\nconst buffer_1 = require(\"buffer\");\nconst crypto_1 = require(\"crypto\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nconst p256 = buffer_1.Buffer.from([42, 134, 72, 206, 61, 3, 1, 7]);\nconst p384 = buffer_1.Buffer.from([43, 129, 4, 0, 34]);\nconst p521 = buffer_1.Buffer.from([43, 129, 4, 0, 35]);\nconst secp256k1 = buffer_1.Buffer.from([43, 129, 4, 0, 10]);\nexports.weakMap = new WeakMap();\nconst namedCurveToJOSE = (namedCurve) => {\n    switch (namedCurve) {\n        case 'prime256v1':\n            return 'P-256';\n        case 'secp384r1':\n            return 'P-384';\n        case 'secp521r1':\n            return 'P-521';\n        case 'secp256k1':\n            return 'secp256k1';\n        default:\n            throw new errors_js_1.JOSENotSupported('Unsupported key curve for this operation');\n    }\n};\nconst getNamedCurve = (kee, raw) => {\n    var _a;\n    let key;\n    if ((0, webcrypto_js_1.isCryptoKey)(kee)) {\n        key = crypto_1.KeyObject.from(kee);\n    }\n    else if ((0, is_key_object_js_1.default)(kee)) {\n        key = kee;\n    }\n    else {\n        throw new TypeError((0, invalid_key_input_js_1.default)(kee, ...is_key_like_js_1.types));\n    }\n    if (key.type === 'secret') {\n        throw new TypeError('only \"private\" or \"public\" type keys can be used for this operation');\n    }\n    switch (key.asymmetricKeyType) {\n        case 'ed25519':\n        case 'ed448':\n            return `Ed${key.asymmetricKeyType.slice(2)}`;\n        case 'x25519':\n        case 'x448':\n            return `X${key.asymmetricKeyType.slice(1)}`;\n        case 'ec': {\n            if (exports.weakMap.has(key)) {\n                return exports.weakMap.get(key);\n            }\n            let namedCurve = (_a = key.asymmetricKeyDetails) === null || _a === void 0 ? void 0 : _a.namedCurve;\n            if (!namedCurve && key.type === 'private') {\n                namedCurve = getNamedCurve((0, crypto_1.createPublicKey)(key), true);\n            }\n            else if (!namedCurve) {\n                const buf = key.export({ format: 'der', type: 'spki' });\n                const i = buf[1] < 128 ? 14 : 15;\n                const len = buf[i];\n                const curveOid = buf.slice(i + 1, i + 1 + len);\n                if (curveOid.equals(p256)) {\n                    namedCurve = 'prime256v1';\n                }\n                else if (curveOid.equals(p384)) {\n                    namedCurve = 'secp384r1';\n                }\n                else if (curveOid.equals(p521)) {\n                    namedCurve = 'secp521r1';\n                }\n                else if (curveOid.equals(secp256k1)) {\n                    namedCurve = 'secp256k1';\n                }\n                else {\n                    throw new errors_js_1.JOSENotSupported('Unsupported key curve for this operation');\n                }\n            }\n            if (raw)\n                return namedCurve;\n            const curve = namedCurveToJOSE(namedCurve);\n            exports.weakMap.set(key, curve);\n            return curve;\n        }\n        default:\n            throw new TypeError('Invalid asymmetric key type for this operation');\n    }\n};\nfunction setCurve(keyObject, curve) {\n    exports.weakMap.set(keyObject, curve);\n}\nexports.setCurve = setCurve;\nexports.default = getNamedCurve;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ecdhAllowed = exports.generateEpk = exports.deriveKey = void 0;\nconst crypto_1 = require(\"crypto\");\nconst util_1 = require(\"util\");\nconst get_named_curve_js_1 = require(\"./get_named_curve.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst crypto_key_js_1 = require(\"../lib/crypto_key.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nconst generateKeyPair = (0, util_1.promisify)(crypto_1.generateKeyPair);\nasync function deriveKey(publicKee, privateKee, algorithm, keyLength, apu = new Uint8Array(0), apv = new Uint8Array(0)) {\n    let publicKey;\n    if ((0, webcrypto_js_1.isCryptoKey)(publicKee)) {\n        (0, crypto_key_js_1.checkEncCryptoKey)(publicKee, 'ECDH');\n        publicKey = crypto_1.KeyObject.from(publicKee);\n    }\n    else if ((0, is_key_object_js_1.default)(publicKee)) {\n        publicKey = publicKee;\n    }\n    else {\n        throw new TypeError((0, invalid_key_input_js_1.default)(publicKee, ...is_key_like_js_1.types));\n    }\n    let privateKey;\n    if ((0, webcrypto_js_1.isCryptoKey)(privateKee)) {\n        (0, crypto_key_js_1.checkEncCryptoKey)(privateKee, 'ECDH', 'deriveBits');\n        privateKey = crypto_1.KeyObject.from(privateKee);\n    }\n    else if ((0, is_key_object_js_1.default)(privateKee)) {\n        privateKey = privateKee;\n    }\n    else {\n        throw new TypeError((0, invalid_key_input_js_1.default)(privateKee, ...is_key_like_js_1.types));\n    }\n    const value = (0, buffer_utils_js_1.concat)((0, buffer_utils_js_1.lengthAndInput)(buffer_utils_js_1.encoder.encode(algorithm)), (0, buffer_utils_js_1.lengthAndInput)(apu), (0, buffer_utils_js_1.lengthAndInput)(apv), (0, buffer_utils_js_1.uint32be)(keyLength));\n    const sharedSecret = (0, crypto_1.diffieHellman)({ privateKey, publicKey });\n    return (0, buffer_utils_js_1.concatKdf)(sharedSecret, keyLength, value);\n}\nexports.deriveKey = deriveKey;\nasync function generateEpk(kee) {\n    let key;\n    if ((0, webcrypto_js_1.isCryptoKey)(kee)) {\n        key = crypto_1.KeyObject.from(kee);\n    }\n    else if ((0, is_key_object_js_1.default)(kee)) {\n        key = kee;\n    }\n    else {\n        throw new TypeError((0, invalid_key_input_js_1.default)(kee, ...is_key_like_js_1.types));\n    }\n    switch (key.asymmetricKeyType) {\n        case 'x25519':\n            return generateKeyPair('x25519');\n        case 'x448': {\n            return generateKeyPair('x448');\n        }\n        case 'ec': {\n            const namedCurve = (0, get_named_curve_js_1.default)(key);\n            return generateKeyPair('ec', { namedCurve });\n        }\n        default:\n            throw new errors_js_1.JOSENotSupported('Invalid or unsupported EPK');\n    }\n}\nexports.generateEpk = generateEpk;\nconst ecdhAllowed = (key) => ['P-256', 'P-384', 'P-521', 'X25519', 'X448'].includes((0, get_named_curve_js_1.default)(key));\nexports.ecdhAllowed = ecdhAllowed;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst errors_js_1 = require(\"../util/errors.js\");\nfunction checkP2s(p2s) {\n    if (!(p2s instanceof Uint8Array) || p2s.length < 8) {\n        throw new errors_js_1.JWEInvalid('PBES2 Salt Input must be 8 or more octets');\n    }\n}\nexports.default = checkP2s;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decrypt = exports.encrypt = void 0;\nconst util_1 = require(\"util\");\nconst crypto_1 = require(\"crypto\");\nconst random_js_1 = require(\"./random.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst base64url_js_1 = require(\"./base64url.js\");\nconst aeskw_js_1 = require(\"./aeskw.js\");\nconst check_p2s_js_1 = require(\"../lib/check_p2s.js\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst crypto_key_js_1 = require(\"../lib/crypto_key.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nconst pbkdf2 = (0, util_1.promisify)(crypto_1.pbkdf2);\nfunction getPassword(key, alg) {\n    if ((0, is_key_object_js_1.default)(key)) {\n        return key.export();\n    }\n    if (key instanceof Uint8Array) {\n        return key;\n    }\n    if ((0, webcrypto_js_1.isCryptoKey)(key)) {\n        (0, crypto_key_js_1.checkEncCryptoKey)(key, alg, 'deriveBits', 'deriveKey');\n        return crypto_1.KeyObject.from(key).export();\n    }\n    throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types, 'Uint8Array'));\n}\nconst encrypt = async (alg, key, cek, p2c = 2048, p2s = (0, random_js_1.default)(new Uint8Array(16))) => {\n    (0, check_p2s_js_1.default)(p2s);\n    const salt = (0, buffer_utils_js_1.p2s)(alg, p2s);\n    const keylen = parseInt(alg.slice(13, 16), 10) >> 3;\n    const password = getPassword(key, alg);\n    const derivedKey = await pbkdf2(password, salt, p2c, keylen, `sha${alg.slice(8, 11)}`);\n    const encryptedKey = await (0, aeskw_js_1.wrap)(alg.slice(-6), derivedKey, cek);\n    return { encryptedKey, p2c, p2s: (0, base64url_js_1.encode)(p2s) };\n};\nexports.encrypt = encrypt;\nconst decrypt = async (alg, key, encryptedKey, p2c, p2s) => {\n    (0, check_p2s_js_1.default)(p2s);\n    const salt = (0, buffer_utils_js_1.p2s)(alg, p2s);\n    const keylen = parseInt(alg.slice(13, 16), 10) >> 3;\n    const password = getPassword(key, alg);\n    const derivedKey = await pbkdf2(password, salt, p2c, keylen, `sha${alg.slice(8, 11)}`);\n    return (0, aeskw_js_1.unwrap)(alg.slice(-6), derivedKey, encryptedKey);\n};\nexports.decrypt = decrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.setModulusLength = exports.weakMap = void 0;\nexports.weakMap = new WeakMap();\nconst getLength = (buf, index) => {\n    let len = buf.readUInt8(1);\n    if ((len & 0x80) === 0) {\n        if (index === 0) {\n            return len;\n        }\n        return getLength(buf.subarray(2 + len), index - 1);\n    }\n    const num = len & 0x7f;\n    len = 0;\n    for (let i = 0; i < num; i++) {\n        len <<= 8;\n        const j = buf.readUInt8(2 + i);\n        len |= j;\n    }\n    if (index === 0) {\n        return len;\n    }\n    return getLength(buf.subarray(2 + len), index - 1);\n};\nconst getLengthOfSeqIndex = (sequence, index) => {\n    const len = sequence.readUInt8(1);\n    if ((len & 0x80) === 0) {\n        return getLength(sequence.subarray(2), index);\n    }\n    const num = len & 0x7f;\n    return getLength(sequence.subarray(2 + num), index);\n};\nconst getModulusLength = (key) => {\n    var _a, _b;\n    if (exports.weakMap.has(key)) {\n        return exports.weakMap.get(key);\n    }\n    const modulusLength = (_b = (_a = key.asymmetricKeyDetails) === null || _a === void 0 ? void 0 : _a.modulusLength) !== null && _b !== void 0 ? _b : (getLengthOfSeqIndex(key.export({ format: 'der', type: 'pkcs1' }), key.type === 'private' ? 1 : 0) -\n        1) <<\n        3;\n    exports.weakMap.set(key, modulusLength);\n    return modulusLength;\n};\nconst setModulusLength = (keyObject, modulusLength) => {\n    exports.weakMap.set(keyObject, modulusLength);\n};\nexports.setModulusLength = setModulusLength;\nexports.default = (key, alg) => {\n    if (getModulusLength(key) < 2048) {\n        throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);\n    }\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decrypt = exports.encrypt = void 0;\nconst crypto_1 = require(\"crypto\");\nconst check_modulus_length_js_1 = require(\"./check_modulus_length.js\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst crypto_key_js_1 = require(\"../lib/crypto_key.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nconst checkKey = (key, alg) => {\n    if (key.asymmetricKeyType !== 'rsa') {\n        throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa');\n    }\n    (0, check_modulus_length_js_1.default)(key, alg);\n};\nconst resolvePadding = (alg) => {\n    switch (alg) {\n        case 'RSA-OAEP':\n        case 'RSA-OAEP-256':\n        case 'RSA-OAEP-384':\n        case 'RSA-OAEP-512':\n            return crypto_1.constants.RSA_PKCS1_OAEP_PADDING;\n        case 'RSA1_5':\n            return crypto_1.constants.RSA_PKCS1_PADDING;\n        default:\n            return undefined;\n    }\n};\nconst resolveOaepHash = (alg) => {\n    switch (alg) {\n        case 'RSA-OAEP':\n            return 'sha1';\n        case 'RSA-OAEP-256':\n            return 'sha256';\n        case 'RSA-OAEP-384':\n            return 'sha384';\n        case 'RSA-OAEP-512':\n            return 'sha512';\n        default:\n            return undefined;\n    }\n};\nfunction ensureKeyObject(key, alg, ...usages) {\n    if ((0, is_key_object_js_1.default)(key)) {\n        return key;\n    }\n    if ((0, webcrypto_js_1.isCryptoKey)(key)) {\n        (0, crypto_key_js_1.checkEncCryptoKey)(key, alg, ...usages);\n        return crypto_1.KeyObject.from(key);\n    }\n    throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types));\n}\nconst encrypt = (alg, key, cek) => {\n    const padding = resolvePadding(alg);\n    const oaepHash = resolveOaepHash(alg);\n    const keyObject = ensureKeyObject(key, alg, 'wrapKey', 'encrypt');\n    checkKey(keyObject, alg);\n    return (0, crypto_1.publicEncrypt)({ key: keyObject, oaepHash, padding }, cek);\n};\nexports.encrypt = encrypt;\nconst decrypt = (alg, key, encryptedKey) => {\n    const padding = resolvePadding(alg);\n    const oaepHash = resolveOaepHash(alg);\n    const keyObject = ensureKeyObject(key, alg, 'unwrapKey', 'decrypt');\n    checkKey(keyObject, alg);\n    return (0, crypto_1.privateDecrypt)({ key: keyObject, oaepHash, padding }, encryptedKey);\n};\nexports.decrypt = decrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bitLength = void 0;\nconst errors_js_1 = require(\"../util/errors.js\");\nconst random_js_1 = require(\"../runtime/random.js\");\nfunction bitLength(alg) {\n    switch (alg) {\n        case 'A128GCM':\n            return 128;\n        case 'A192GCM':\n            return 192;\n        case 'A256GCM':\n        case 'A128CBC-HS256':\n            return 256;\n        case 'A192CBC-HS384':\n            return 384;\n        case 'A256CBC-HS512':\n            return 512;\n        default:\n            throw new errors_js_1.JOSENotSupported(`Unsupported JWE Algorithm: ${alg}`);\n    }\n}\nexports.bitLength = bitLength;\nexports.default = (alg) => (0, random_js_1.default)(new Uint8Array(bitLength(alg) >> 3));\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromX509 = exports.fromSPKI = exports.fromPKCS8 = exports.toPKCS8 = exports.toSPKI = void 0;\nconst crypto_1 = require(\"crypto\");\nconst buffer_1 = require(\"buffer\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nconst genericExport = (keyType, keyFormat, key) => {\n    let keyObject;\n    if ((0, webcrypto_js_1.isCryptoKey)(key)) {\n        if (!key.extractable) {\n            throw new TypeError('CryptoKey is not extractable');\n        }\n        keyObject = crypto_1.KeyObject.from(key);\n    }\n    else if ((0, is_key_object_js_1.default)(key)) {\n        keyObject = key;\n    }\n    else {\n        throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types));\n    }\n    if (keyObject.type !== keyType) {\n        throw new TypeError(`key is not a ${keyType} key`);\n    }\n    return keyObject.export({ format: 'pem', type: keyFormat });\n};\nconst toSPKI = (key) => {\n    return genericExport('public', 'spki', key);\n};\nexports.toSPKI = toSPKI;\nconst toPKCS8 = (key) => {\n    return genericExport('private', 'pkcs8', key);\n};\nexports.toPKCS8 = toPKCS8;\nconst fromPKCS8 = (pem) => (0, crypto_1.createPrivateKey)({\n    key: buffer_1.Buffer.from(pem.replace(/(?:-----(?:BEGIN|END) PRIVATE KEY-----|\\s)/g, ''), 'base64'),\n    type: 'pkcs8',\n    format: 'der',\n});\nexports.fromPKCS8 = fromPKCS8;\nconst fromSPKI = (pem) => (0, crypto_1.createPublicKey)({\n    key: buffer_1.Buffer.from(pem.replace(/(?:-----(?:BEGIN|END) PUBLIC KEY-----|\\s)/g, ''), 'base64'),\n    type: 'spki',\n    format: 'der',\n});\nexports.fromSPKI = fromSPKI;\nconst fromX509 = (pem) => (0, crypto_1.createPublicKey)({\n    key: pem,\n    type: 'spki',\n    format: 'pem',\n});\nexports.fromX509 = fromX509;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst buffer_1 = require(\"buffer\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst tagInteger = 0x02;\nconst tagBitStr = 0x03;\nconst tagOctStr = 0x04;\nconst tagSequence = 0x30;\nconst bZero = buffer_1.Buffer.from([0x00]);\nconst bTagInteger = buffer_1.Buffer.from([tagInteger]);\nconst bTagBitStr = buffer_1.Buffer.from([tagBitStr]);\nconst bTagSequence = buffer_1.Buffer.from([tagSequence]);\nconst bTagOctStr = buffer_1.Buffer.from([tagOctStr]);\nconst encodeLength = (len) => {\n    if (len < 128)\n        return buffer_1.Buffer.from([len]);\n    const buffer = buffer_1.Buffer.alloc(5);\n    buffer.writeUInt32BE(len, 1);\n    let offset = 1;\n    while (buffer[offset] === 0)\n        offset++;\n    buffer[offset - 1] = 0x80 | (5 - offset);\n    return buffer.slice(offset - 1);\n};\nconst oids = new Map([\n    ['P-256', buffer_1.Buffer.from('06 08 2A 86 48 CE 3D 03 01 07'.replace(/ /g, ''), 'hex')],\n    ['secp256k1', buffer_1.Buffer.from('06 05 2B 81 04 00 0A'.replace(/ /g, ''), 'hex')],\n    ['P-384', buffer_1.Buffer.from('06 05 2B 81 04 00 22'.replace(/ /g, ''), 'hex')],\n    ['P-521', buffer_1.Buffer.from('06 05 2B 81 04 00 23'.replace(/ /g, ''), 'hex')],\n    ['ecPublicKey', buffer_1.Buffer.from('06 07 2A 86 48 CE 3D 02 01'.replace(/ /g, ''), 'hex')],\n    ['X25519', buffer_1.Buffer.from('06 03 2B 65 6E'.replace(/ /g, ''), 'hex')],\n    ['X448', buffer_1.Buffer.from('06 03 2B 65 6F'.replace(/ /g, ''), 'hex')],\n    ['Ed25519', buffer_1.Buffer.from('06 03 2B 65 70'.replace(/ /g, ''), 'hex')],\n    ['Ed448', buffer_1.Buffer.from('06 03 2B 65 71'.replace(/ /g, ''), 'hex')],\n]);\nclass DumbAsn1Encoder {\n    constructor() {\n        this.length = 0;\n        this.elements = [];\n    }\n    oidFor(oid) {\n        const bOid = oids.get(oid);\n        if (!bOid) {\n            throw new errors_js_1.JOSENotSupported('Invalid or unsupported OID');\n        }\n        this.elements.push(bOid);\n        this.length += bOid.length;\n    }\n    zero() {\n        this.elements.push(bTagInteger, buffer_1.Buffer.from([0x01]), bZero);\n        this.length += 3;\n    }\n    one() {\n        this.elements.push(bTagInteger, buffer_1.Buffer.from([0x01]), buffer_1.Buffer.from([0x01]));\n        this.length += 3;\n    }\n    unsignedInteger(integer) {\n        if (integer[0] & 0x80) {\n            const len = encodeLength(integer.length + 1);\n            this.elements.push(bTagInteger, len, bZero, integer);\n            this.length += 2 + len.length + integer.length;\n        }\n        else {\n            let i = 0;\n            while (integer[i] === 0 && (integer[i + 1] & 0x80) === 0)\n                i++;\n            const len = encodeLength(integer.length - i);\n            this.elements.push(bTagInteger, encodeLength(integer.length - i), integer.slice(i));\n            this.length += 1 + len.length + integer.length - i;\n        }\n    }\n    octStr(octStr) {\n        const len = encodeLength(octStr.length);\n        this.elements.push(bTagOctStr, encodeLength(octStr.length), octStr);\n        this.length += 1 + len.length + octStr.length;\n    }\n    bitStr(bitS) {\n        const len = encodeLength(bitS.length + 1);\n        this.elements.push(bTagBitStr, encodeLength(bitS.length + 1), bZero, bitS);\n        this.length += 1 + len.length + bitS.length + 1;\n    }\n    add(seq) {\n        this.elements.push(seq);\n        this.length += seq.length;\n    }\n    end(tag = bTagSequence) {\n        const len = encodeLength(this.length);\n        return buffer_1.Buffer.concat([tag, len, ...this.elements], 1 + len.length + this.length);\n    }\n}\nexports.default = DumbAsn1Encoder;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.jwkImport = exports.jwkExport = exports.rsaPssParams = exports.oneShotCallback = void 0;\nconst [major, minor] = process.versions.node.split('.').map((str) => parseInt(str, 10));\nexports.oneShotCallback = major >= 16 || (major === 15 && minor >= 13);\nexports.rsaPssParams = !('electron' in process.versions) && (major >= 17 || (major === 16 && minor >= 9));\nexports.jwkExport = major >= 16 || (major === 15 && minor >= 9);\nexports.jwkImport = major >= 16 || (major === 15 && minor >= 12);\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst buffer_1 = require(\"buffer\");\nconst crypto_1 = require(\"crypto\");\nconst base64url_js_1 = require(\"./base64url.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst get_named_curve_js_1 = require(\"./get_named_curve.js\");\nconst check_modulus_length_js_1 = require(\"./check_modulus_length.js\");\nconst asn1_sequence_encoder_js_1 = require(\"./asn1_sequence_encoder.js\");\nconst flags_js_1 = require(\"./flags.js\");\nconst parse = (jwk) => {\n    if (flags_js_1.jwkImport && jwk.kty !== 'oct') {\n        return jwk.d\n            ? (0, crypto_1.createPrivateKey)({ format: 'jwk', key: jwk })\n            : (0, crypto_1.createPublicKey)({ format: 'jwk', key: jwk });\n    }\n    switch (jwk.kty) {\n        case 'oct': {\n            return (0, crypto_1.createSecretKey)((0, base64url_js_1.decode)(jwk.k));\n        }\n        case 'RSA': {\n            const enc = new asn1_sequence_encoder_js_1.default();\n            const isPrivate = jwk.d !== undefined;\n            const modulus = buffer_1.Buffer.from(jwk.n, 'base64');\n            const exponent = buffer_1.Buffer.from(jwk.e, 'base64');\n            if (isPrivate) {\n                enc.zero();\n                enc.unsignedInteger(modulus);\n                enc.unsignedInteger(exponent);\n                enc.unsignedInteger(buffer_1.Buffer.from(jwk.d, 'base64'));\n                enc.unsignedInteger(buffer_1.Buffer.from(jwk.p, 'base64'));\n                enc.unsignedInteger(buffer_1.Buffer.from(jwk.q, 'base64'));\n                enc.unsignedInteger(buffer_1.Buffer.from(jwk.dp, 'base64'));\n                enc.unsignedInteger(buffer_1.Buffer.from(jwk.dq, 'base64'));\n                enc.unsignedInteger(buffer_1.Buffer.from(jwk.qi, 'base64'));\n            }\n            else {\n                enc.unsignedInteger(modulus);\n                enc.unsignedInteger(exponent);\n            }\n            const der = enc.end();\n            const createInput = {\n                key: der,\n                format: 'der',\n                type: 'pkcs1',\n            };\n            const keyObject = isPrivate ? (0, crypto_1.createPrivateKey)(createInput) : (0, crypto_1.createPublicKey)(createInput);\n            (0, check_modulus_length_js_1.setModulusLength)(keyObject, modulus.length << 3);\n            return keyObject;\n        }\n        case 'EC': {\n            const enc = new asn1_sequence_encoder_js_1.default();\n            const isPrivate = jwk.d !== undefined;\n            const pub = buffer_1.Buffer.concat([\n                buffer_1.Buffer.alloc(1, 4),\n                buffer_1.Buffer.from(jwk.x, 'base64'),\n                buffer_1.Buffer.from(jwk.y, 'base64'),\n            ]);\n            if (isPrivate) {\n                enc.zero();\n                const enc$1 = new asn1_sequence_encoder_js_1.default();\n                enc$1.oidFor('ecPublicKey');\n                enc$1.oidFor(jwk.crv);\n                enc.add(enc$1.end());\n                const enc$2 = new asn1_sequence_encoder_js_1.default();\n                enc$2.one();\n                enc$2.octStr(buffer_1.Buffer.from(jwk.d, 'base64'));\n                const enc$3 = new asn1_sequence_encoder_js_1.default();\n                enc$3.bitStr(pub);\n                const f2 = enc$3.end(buffer_1.Buffer.from([0xa1]));\n                enc$2.add(f2);\n                const f = enc$2.end();\n                const enc$4 = new asn1_sequence_encoder_js_1.default();\n                enc$4.add(f);\n                const f3 = enc$4.end(buffer_1.Buffer.from([0x04]));\n                enc.add(f3);\n                const der = enc.end();\n                const keyObject = (0, crypto_1.createPrivateKey)({ key: der, format: 'der', type: 'pkcs8' });\n                (0, get_named_curve_js_1.setCurve)(keyObject, jwk.crv);\n                return keyObject;\n            }\n            const enc$1 = new asn1_sequence_encoder_js_1.default();\n            enc$1.oidFor('ecPublicKey');\n            enc$1.oidFor(jwk.crv);\n            enc.add(enc$1.end());\n            enc.bitStr(pub);\n            const der = enc.end();\n            const keyObject = (0, crypto_1.createPublicKey)({ key: der, format: 'der', type: 'spki' });\n            (0, get_named_curve_js_1.setCurve)(keyObject, jwk.crv);\n            return keyObject;\n        }\n        case 'OKP': {\n            const enc = new asn1_sequence_encoder_js_1.default();\n            const isPrivate = jwk.d !== undefined;\n            if (isPrivate) {\n                enc.zero();\n                const enc$1 = new asn1_sequence_encoder_js_1.default();\n                enc$1.oidFor(jwk.crv);\n                enc.add(enc$1.end());\n                const enc$2 = new asn1_sequence_encoder_js_1.default();\n                enc$2.octStr(buffer_1.Buffer.from(jwk.d, 'base64'));\n                const f = enc$2.end(buffer_1.Buffer.from([0x04]));\n                enc.add(f);\n                const der = enc.end();\n                return (0, crypto_1.createPrivateKey)({ key: der, format: 'der', type: 'pkcs8' });\n            }\n            const enc$1 = new asn1_sequence_encoder_js_1.default();\n            enc$1.oidFor(jwk.crv);\n            enc.add(enc$1.end());\n            enc.bitStr(buffer_1.Buffer.from(jwk.x, 'base64'));\n            const der = enc.end();\n            return (0, crypto_1.createPublicKey)({ key: der, format: 'der', type: 'spki' });\n        }\n        default:\n            throw new errors_js_1.JOSENotSupported('Invalid or unsupported JWK \"kty\" (Key Type) Parameter value');\n    }\n};\nexports.default = parse;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.importJWK = exports.importPKCS8 = exports.importX509 = exports.importSPKI = void 0;\nconst base64url_js_1 = require(\"../runtime/base64url.js\");\nconst asn1_js_1 = require(\"../runtime/asn1.js\");\nconst jwk_to_key_js_1 = require(\"../runtime/jwk_to_key.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst is_object_js_1 = require(\"../lib/is_object.js\");\nasync function importSPKI(spki, alg, options) {\n    if (typeof spki !== 'string' || spki.indexOf('-----BEGIN PUBLIC KEY-----') !== 0) {\n        throw new TypeError('\"spki\" must be SPKI formatted string');\n    }\n    return (0, asn1_js_1.fromSPKI)(spki, alg, options);\n}\nexports.importSPKI = importSPKI;\nasync function importX509(x509, alg, options) {\n    if (typeof x509 !== 'string' || x509.indexOf('-----BEGIN CERTIFICATE-----') !== 0) {\n        throw new TypeError('\"x509\" must be X.509 formatted string');\n    }\n    return (0, asn1_js_1.fromX509)(x509, alg, options);\n}\nexports.importX509 = importX509;\nasync function importPKCS8(pkcs8, alg, options) {\n    if (typeof pkcs8 !== 'string' || pkcs8.indexOf('-----BEGIN PRIVATE KEY-----') !== 0) {\n        throw new TypeError('\"pkcs8\" must be PKCS#8 formatted string');\n    }\n    return (0, asn1_js_1.fromPKCS8)(pkcs8, alg, options);\n}\nexports.importPKCS8 = importPKCS8;\nasync function importJWK(jwk, alg, octAsKeyObject) {\n    var _a;\n    if (!(0, is_object_js_1.default)(jwk)) {\n        throw new TypeError('JWK must be an object');\n    }\n    alg || (alg = jwk.alg);\n    switch (jwk.kty) {\n        case 'oct':\n            if (typeof jwk.k !== 'string' || !jwk.k) {\n                throw new TypeError('missing \"k\" (Key Value) Parameter value');\n            }\n            octAsKeyObject !== null && octAsKeyObject !== void 0 ? octAsKeyObject : (octAsKeyObject = jwk.ext !== true);\n            if (octAsKeyObject) {\n                return (0, jwk_to_key_js_1.default)({ ...jwk, alg, ext: (_a = jwk.ext) !== null && _a !== void 0 ? _a : false });\n            }\n            return (0, base64url_js_1.decode)(jwk.k);\n        case 'RSA':\n            if (jwk.oth !== undefined) {\n                throw new errors_js_1.JOSENotSupported('RSA JWK \"oth\" (Other Primes Info) Parameter value is not supported');\n            }\n        case 'EC':\n        case 'OKP':\n            return (0, jwk_to_key_js_1.default)({ ...jwk, alg });\n        default:\n            throw new errors_js_1.JOSENotSupported('Unsupported \"kty\" (Key Type) Parameter value');\n    }\n}\nexports.importJWK = importJWK;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst invalid_key_input_js_1 = require(\"./invalid_key_input.js\");\nconst is_key_like_js_1 = require(\"../runtime/is_key_like.js\");\nconst symmetricTypeCheck = (alg, key) => {\n    if (key instanceof Uint8Array)\n        return;\n    if (!(0, is_key_like_js_1.default)(key)) {\n        throw new TypeError((0, invalid_key_input_js_1.withAlg)(alg, key, ...is_key_like_js_1.types, 'Uint8Array'));\n    }\n    if (key.type !== 'secret') {\n        throw new TypeError(`${is_key_like_js_1.types.join(' or ')} instances for symmetric algorithms must be of type \"secret\"`);\n    }\n};\nconst asymmetricTypeCheck = (alg, key, usage) => {\n    if (!(0, is_key_like_js_1.default)(key)) {\n        throw new TypeError((0, invalid_key_input_js_1.withAlg)(alg, key, ...is_key_like_js_1.types));\n    }\n    if (key.type === 'secret') {\n        throw new TypeError(`${is_key_like_js_1.types.join(' or ')} instances for asymmetric algorithms must not be of type \"secret\"`);\n    }\n    if (usage === 'sign' && key.type === 'public') {\n        throw new TypeError(`${is_key_like_js_1.types.join(' or ')} instances for asymmetric algorithm signing must be of type \"private\"`);\n    }\n    if (usage === 'decrypt' && key.type === 'public') {\n        throw new TypeError(`${is_key_like_js_1.types.join(' or ')} instances for asymmetric algorithm decryption must be of type \"private\"`);\n    }\n    if (key.algorithm && usage === 'verify' && key.type === 'private') {\n        throw new TypeError(`${is_key_like_js_1.types.join(' or ')} instances for asymmetric algorithm verifying must be of type \"public\"`);\n    }\n    if (key.algorithm && usage === 'encrypt' && key.type === 'private') {\n        throw new TypeError(`${is_key_like_js_1.types.join(' or ')} instances for asymmetric algorithm encryption must be of type \"public\"`);\n    }\n};\nconst checkKeyType = (alg, key, usage) => {\n    const symmetric = alg.startsWith('HS') ||\n        alg === 'dir' ||\n        alg.startsWith('PBES2') ||\n        /^A\\d{3}(?:GCM)?KW$/.test(alg);\n    if (symmetric) {\n        symmetricTypeCheck(alg, key);\n    }\n    else {\n        asymmetricTypeCheck(alg, key, usage);\n    }\n};\nexports.default = checkKeyType;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst check_iv_length_js_1 = require(\"../lib/check_iv_length.js\");\nconst check_cek_length_js_1 = require(\"./check_cek_length.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst cbc_tag_js_1 = require(\"./cbc_tag.js\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst crypto_key_js_1 = require(\"../lib/crypto_key.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst ciphers_js_1 = require(\"./ciphers.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nfunction cbcEncrypt(enc, plaintext, cek, iv, aad) {\n    const keySize = parseInt(enc.slice(1, 4), 10);\n    if ((0, is_key_object_js_1.default)(cek)) {\n        cek = cek.export();\n    }\n    const encKey = cek.subarray(keySize >> 3);\n    const macKey = cek.subarray(0, keySize >> 3);\n    const algorithm = `aes-${keySize}-cbc`;\n    if (!(0, ciphers_js_1.default)(algorithm)) {\n        throw new errors_js_1.JOSENotSupported(`alg ${enc} is not supported by your javascript runtime`);\n    }\n    const cipher = (0, crypto_1.createCipheriv)(algorithm, encKey, iv);\n    const ciphertext = (0, buffer_utils_js_1.concat)(cipher.update(plaintext), cipher.final());\n    const macSize = parseInt(enc.slice(-3), 10);\n    const tag = (0, cbc_tag_js_1.default)(aad, iv, ciphertext, macSize, macKey, keySize);\n    return { ciphertext, tag };\n}\nfunction gcmEncrypt(enc, plaintext, cek, iv, aad) {\n    const keySize = parseInt(enc.slice(1, 4), 10);\n    const algorithm = `aes-${keySize}-gcm`;\n    if (!(0, ciphers_js_1.default)(algorithm)) {\n        throw new errors_js_1.JOSENotSupported(`alg ${enc} is not supported by your javascript runtime`);\n    }\n    const cipher = (0, crypto_1.createCipheriv)(algorithm, cek, iv, { authTagLength: 16 });\n    if (aad.byteLength) {\n        cipher.setAAD(aad, { plaintextLength: plaintext.length });\n    }\n    const ciphertext = cipher.update(plaintext);\n    cipher.final();\n    const tag = cipher.getAuthTag();\n    return { ciphertext, tag };\n}\nconst encrypt = (enc, plaintext, cek, iv, aad) => {\n    let key;\n    if ((0, webcrypto_js_1.isCryptoKey)(cek)) {\n        (0, crypto_key_js_1.checkEncCryptoKey)(cek, enc, 'encrypt');\n        key = crypto_1.KeyObject.from(cek);\n    }\n    else if (cek instanceof Uint8Array || (0, is_key_object_js_1.default)(cek)) {\n        key = cek;\n    }\n    else {\n        throw new TypeError((0, invalid_key_input_js_1.default)(cek, ...is_key_like_js_1.types, 'Uint8Array'));\n    }\n    (0, check_cek_length_js_1.default)(enc, key);\n    (0, check_iv_length_js_1.default)(enc, iv);\n    switch (enc) {\n        case 'A128CBC-HS256':\n        case 'A192CBC-HS384':\n        case 'A256CBC-HS512':\n            return cbcEncrypt(enc, plaintext, key, iv, aad);\n        case 'A128GCM':\n        case 'A192GCM':\n        case 'A256GCM':\n            return gcmEncrypt(enc, plaintext, key, iv, aad);\n        default:\n            throw new errors_js_1.JOSENotSupported('Unsupported JWE Content Encryption Algorithm');\n    }\n};\nexports.default = encrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unwrap = exports.wrap = void 0;\nconst encrypt_js_1 = require(\"../runtime/encrypt.js\");\nconst decrypt_js_1 = require(\"../runtime/decrypt.js\");\nconst iv_js_1 = require(\"./iv.js\");\nconst base64url_js_1 = require(\"../runtime/base64url.js\");\nasync function wrap(alg, key, cek, iv) {\n    const jweAlgorithm = alg.slice(0, 7);\n    iv || (iv = (0, iv_js_1.default)(jweAlgorithm));\n    const { ciphertext: encryptedKey, tag } = await (0, encrypt_js_1.default)(jweAlgorithm, cek, key, iv, new Uint8Array(0));\n    return { encryptedKey, iv: (0, base64url_js_1.encode)(iv), tag: (0, base64url_js_1.encode)(tag) };\n}\nexports.wrap = wrap;\nasync function unwrap(alg, key, encryptedKey, iv, tag) {\n    const jweAlgorithm = alg.slice(0, 7);\n    return (0, decrypt_js_1.default)(jweAlgorithm, key, encryptedKey, iv, tag, new Uint8Array(0));\n}\nexports.unwrap = unwrap;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst aeskw_js_1 = require(\"../runtime/aeskw.js\");\nconst ECDH = require(\"../runtime/ecdhes.js\");\nconst pbes2kw_js_1 = require(\"../runtime/pbes2kw.js\");\nconst rsaes_js_1 = require(\"../runtime/rsaes.js\");\nconst base64url_js_1 = require(\"../runtime/base64url.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst cek_js_1 = require(\"../lib/cek.js\");\nconst import_js_1 = require(\"../key/import.js\");\nconst check_key_type_js_1 = require(\"./check_key_type.js\");\nconst is_object_js_1 = require(\"./is_object.js\");\nconst aesgcmkw_js_1 = require(\"./aesgcmkw.js\");\nasync function decryptKeyManagement(alg, key, encryptedKey, joseHeader, options) {\n    (0, check_key_type_js_1.default)(alg, key, 'decrypt');\n    switch (alg) {\n        case 'dir': {\n            if (encryptedKey !== undefined)\n                throw new errors_js_1.JWEInvalid('Encountered unexpected JWE Encrypted Key');\n            return key;\n        }\n        case 'ECDH-ES':\n            if (encryptedKey !== undefined)\n                throw new errors_js_1.JWEInvalid('Encountered unexpected JWE Encrypted Key');\n        case 'ECDH-ES+A128KW':\n        case 'ECDH-ES+A192KW':\n        case 'ECDH-ES+A256KW': {\n            if (!(0, is_object_js_1.default)(joseHeader.epk))\n                throw new errors_js_1.JWEInvalid(`JOSE Header \"epk\" (Ephemeral Public Key) missing or invalid`);\n            if (!ECDH.ecdhAllowed(key))\n                throw new errors_js_1.JOSENotSupported('ECDH with the provided key is not allowed or not supported by your javascript runtime');\n            const epk = await (0, import_js_1.importJWK)(joseHeader.epk, alg);\n            let partyUInfo;\n            let partyVInfo;\n            if (joseHeader.apu !== undefined) {\n                if (typeof joseHeader.apu !== 'string')\n                    throw new errors_js_1.JWEInvalid(`JOSE Header \"apu\" (Agreement PartyUInfo) invalid`);\n                try {\n                    partyUInfo = (0, base64url_js_1.decode)(joseHeader.apu);\n                }\n                catch {\n                    throw new errors_js_1.JWEInvalid('Failed to base64url decode the apu');\n                }\n            }\n            if (joseHeader.apv !== undefined) {\n                if (typeof joseHeader.apv !== 'string')\n                    throw new errors_js_1.JWEInvalid(`JOSE Header \"apv\" (Agreement PartyVInfo) invalid`);\n                try {\n                    partyVInfo = (0, base64url_js_1.decode)(joseHeader.apv);\n                }\n                catch {\n                    throw new errors_js_1.JWEInvalid('Failed to base64url decode the apv');\n                }\n            }\n            const sharedSecret = await ECDH.deriveKey(epk, key, alg === 'ECDH-ES' ? joseHeader.enc : alg, alg === 'ECDH-ES' ? (0, cek_js_1.bitLength)(joseHeader.enc) : parseInt(alg.slice(-5, -2), 10), partyUInfo, partyVInfo);\n            if (alg === 'ECDH-ES')\n                return sharedSecret;\n            if (encryptedKey === undefined)\n                throw new errors_js_1.JWEInvalid('JWE Encrypted Key missing');\n            return (0, aeskw_js_1.unwrap)(alg.slice(-6), sharedSecret, encryptedKey);\n        }\n        case 'RSA1_5':\n        case 'RSA-OAEP':\n        case 'RSA-OAEP-256':\n        case 'RSA-OAEP-384':\n        case 'RSA-OAEP-512': {\n            if (encryptedKey === undefined)\n                throw new errors_js_1.JWEInvalid('JWE Encrypted Key missing');\n            return (0, rsaes_js_1.decrypt)(alg, key, encryptedKey);\n        }\n        case 'PBES2-HS256+A128KW':\n        case 'PBES2-HS384+A192KW':\n        case 'PBES2-HS512+A256KW': {\n            if (encryptedKey === undefined)\n                throw new errors_js_1.JWEInvalid('JWE Encrypted Key missing');\n            if (typeof joseHeader.p2c !== 'number')\n                throw new errors_js_1.JWEInvalid(`JOSE Header \"p2c\" (PBES2 Count) missing or invalid`);\n            const p2cLimit = (options === null || options === void 0 ? void 0 : options.maxPBES2Count) || 10000;\n            if (joseHeader.p2c > p2cLimit)\n                throw new errors_js_1.JWEInvalid(`JOSE Header \"p2c\" (PBES2 Count) out is of acceptable bounds`);\n            if (typeof joseHeader.p2s !== 'string')\n                throw new errors_js_1.JWEInvalid(`JOSE Header \"p2s\" (PBES2 Salt) missing or invalid`);\n            let p2s;\n            try {\n                p2s = (0, base64url_js_1.decode)(joseHeader.p2s);\n            }\n            catch {\n                throw new errors_js_1.JWEInvalid('Failed to base64url decode the p2s');\n            }\n            return (0, pbes2kw_js_1.decrypt)(alg, key, encryptedKey, joseHeader.p2c, p2s);\n        }\n        case 'A128KW':\n        case 'A192KW':\n        case 'A256KW': {\n            if (encryptedKey === undefined)\n                throw new errors_js_1.JWEInvalid('JWE Encrypted Key missing');\n            return (0, aeskw_js_1.unwrap)(alg, key, encryptedKey);\n        }\n        case 'A128GCMKW':\n        case 'A192GCMKW':\n        case 'A256GCMKW': {\n            if (encryptedKey === undefined)\n                throw new errors_js_1.JWEInvalid('JWE Encrypted Key missing');\n            if (typeof joseHeader.iv !== 'string')\n                throw new errors_js_1.JWEInvalid(`JOSE Header \"iv\" (Initialization Vector) missing or invalid`);\n            if (typeof joseHeader.tag !== 'string')\n                throw new errors_js_1.JWEInvalid(`JOSE Header \"tag\" (Authentication Tag) missing or invalid`);\n            let iv;\n            try {\n                iv = (0, base64url_js_1.decode)(joseHeader.iv);\n            }\n            catch {\n                throw new errors_js_1.JWEInvalid('Failed to base64url decode the iv');\n            }\n            let tag;\n            try {\n                tag = (0, base64url_js_1.decode)(joseHeader.tag);\n            }\n            catch {\n                throw new errors_js_1.JWEInvalid('Failed to base64url decode the tag');\n            }\n            return (0, aesgcmkw_js_1.unwrap)(alg, key, encryptedKey, iv, tag);\n        }\n        default: {\n            throw new errors_js_1.JOSENotSupported('Invalid or unsupported \"alg\" (JWE Algorithm) header value');\n        }\n    }\n}\nexports.default = decryptKeyManagement;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst errors_js_1 = require(\"../util/errors.js\");\nfunction validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) {\n    if (joseHeader.crit !== undefined && protectedHeader.crit === undefined) {\n        throw new Err('\"crit\" (Critical) Header Parameter MUST be integrity protected');\n    }\n    if (!protectedHeader || protectedHeader.crit === undefined) {\n        return new Set();\n    }\n    if (!Array.isArray(protectedHeader.crit) ||\n        protectedHeader.crit.length === 0 ||\n        protectedHeader.crit.some((input) => typeof input !== 'string' || input.length === 0)) {\n        throw new Err('\"crit\" (Critical) Header Parameter MUST be an array of non-empty strings when present');\n    }\n    let recognized;\n    if (recognizedOption !== undefined) {\n        recognized = new Map([...Object.entries(recognizedOption), ...recognizedDefault.entries()]);\n    }\n    else {\n        recognized = recognizedDefault;\n    }\n    for (const parameter of protectedHeader.crit) {\n        if (!recognized.has(parameter)) {\n            throw new errors_js_1.JOSENotSupported(`Extension Header Parameter \"${parameter}\" is not recognized`);\n        }\n        if (joseHeader[parameter] === undefined) {\n            throw new Err(`Extension Header Parameter \"${parameter}\" is missing`);\n        }\n        else if (recognized.get(parameter) && protectedHeader[parameter] === undefined) {\n            throw new Err(`Extension Header Parameter \"${parameter}\" MUST be integrity protected`);\n        }\n    }\n    return new Set(protectedHeader.crit);\n}\nexports.default = validateCrit;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst validateAlgorithms = (option, algorithms) => {\n    if (algorithms !== undefined &&\n        (!Array.isArray(algorithms) || algorithms.some((s) => typeof s !== 'string'))) {\n        throw new TypeError(`\"${option}\" option must be an array of strings`);\n    }\n    if (!algorithms) {\n        return undefined;\n    }\n    return new Set(algorithms);\n};\nexports.default = validateAlgorithms;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.flattenedDecrypt = void 0;\nconst base64url_js_1 = require(\"../../runtime/base64url.js\");\nconst decrypt_js_1 = require(\"../../runtime/decrypt.js\");\nconst zlib_js_1 = require(\"../../runtime/zlib.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nconst is_disjoint_js_1 = require(\"../../lib/is_disjoint.js\");\nconst is_object_js_1 = require(\"../../lib/is_object.js\");\nconst decrypt_key_management_js_1 = require(\"../../lib/decrypt_key_management.js\");\nconst buffer_utils_js_1 = require(\"../../lib/buffer_utils.js\");\nconst cek_js_1 = require(\"../../lib/cek.js\");\nconst validate_crit_js_1 = require(\"../../lib/validate_crit.js\");\nconst validate_algorithms_js_1 = require(\"../../lib/validate_algorithms.js\");\nasync function flattenedDecrypt(jwe, key, options) {\n    var _a;\n    if (!(0, is_object_js_1.default)(jwe)) {\n        throw new errors_js_1.JWEInvalid('Flattened JWE must be an object');\n    }\n    if (jwe.protected === undefined && jwe.header === undefined && jwe.unprotected === undefined) {\n        throw new errors_js_1.JWEInvalid('JOSE Header missing');\n    }\n    if (typeof jwe.iv !== 'string') {\n        throw new errors_js_1.JWEInvalid('JWE Initialization Vector missing or incorrect type');\n    }\n    if (typeof jwe.ciphertext !== 'string') {\n        throw new errors_js_1.JWEInvalid('JWE Ciphertext missing or incorrect type');\n    }\n    if (typeof jwe.tag !== 'string') {\n        throw new errors_js_1.JWEInvalid('JWE Authentication Tag missing or incorrect type');\n    }\n    if (jwe.protected !== undefined && typeof jwe.protected !== 'string') {\n        throw new errors_js_1.JWEInvalid('JWE Protected Header incorrect type');\n    }\n    if (jwe.encrypted_key !== undefined && typeof jwe.encrypted_key !== 'string') {\n        throw new errors_js_1.JWEInvalid('JWE Encrypted Key incorrect type');\n    }\n    if (jwe.aad !== undefined && typeof jwe.aad !== 'string') {\n        throw new errors_js_1.JWEInvalid('JWE AAD incorrect type');\n    }\n    if (jwe.header !== undefined && !(0, is_object_js_1.default)(jwe.header)) {\n        throw new errors_js_1.JWEInvalid('JWE Shared Unprotected Header incorrect type');\n    }\n    if (jwe.unprotected !== undefined && !(0, is_object_js_1.default)(jwe.unprotected)) {\n        throw new errors_js_1.JWEInvalid('JWE Per-Recipient Unprotected Header incorrect type');\n    }\n    let parsedProt;\n    if (jwe.protected) {\n        try {\n            const protectedHeader = (0, base64url_js_1.decode)(jwe.protected);\n            parsedProt = JSON.parse(buffer_utils_js_1.decoder.decode(protectedHeader));\n        }\n        catch {\n            throw new errors_js_1.JWEInvalid('JWE Protected Header is invalid');\n        }\n    }\n    if (!(0, is_disjoint_js_1.default)(parsedProt, jwe.header, jwe.unprotected)) {\n        throw new errors_js_1.JWEInvalid('JWE Protected, JWE Unprotected Header, and JWE Per-Recipient Unprotected Header Parameter names must be disjoint');\n    }\n    const joseHeader = {\n        ...parsedProt,\n        ...jwe.header,\n        ...jwe.unprotected,\n    };\n    (0, validate_crit_js_1.default)(errors_js_1.JWEInvalid, new Map(), options === null || options === void 0 ? void 0 : options.crit, parsedProt, joseHeader);\n    if (joseHeader.zip !== undefined) {\n        if (!parsedProt || !parsedProt.zip) {\n            throw new errors_js_1.JWEInvalid('JWE \"zip\" (Compression Algorithm) Header MUST be integrity protected');\n        }\n        if (joseHeader.zip !== 'DEF') {\n            throw new errors_js_1.JOSENotSupported('Unsupported JWE \"zip\" (Compression Algorithm) Header Parameter value');\n        }\n    }\n    const { alg, enc } = joseHeader;\n    if (typeof alg !== 'string' || !alg) {\n        throw new errors_js_1.JWEInvalid('missing JWE Algorithm (alg) in JWE Header');\n    }\n    if (typeof enc !== 'string' || !enc) {\n        throw new errors_js_1.JWEInvalid('missing JWE Encryption Algorithm (enc) in JWE Header');\n    }\n    const keyManagementAlgorithms = options && (0, validate_algorithms_js_1.default)('keyManagementAlgorithms', options.keyManagementAlgorithms);\n    const contentEncryptionAlgorithms = options &&\n        (0, validate_algorithms_js_1.default)('contentEncryptionAlgorithms', options.contentEncryptionAlgorithms);\n    if (keyManagementAlgorithms && !keyManagementAlgorithms.has(alg)) {\n        throw new errors_js_1.JOSEAlgNotAllowed('\"alg\" (Algorithm) Header Parameter not allowed');\n    }\n    if (contentEncryptionAlgorithms && !contentEncryptionAlgorithms.has(enc)) {\n        throw new errors_js_1.JOSEAlgNotAllowed('\"enc\" (Encryption Algorithm) Header Parameter not allowed');\n    }\n    let encryptedKey;\n    if (jwe.encrypted_key !== undefined) {\n        try {\n            encryptedKey = (0, base64url_js_1.decode)(jwe.encrypted_key);\n        }\n        catch {\n            throw new errors_js_1.JWEInvalid('Failed to base64url decode the encrypted_key');\n        }\n    }\n    let resolvedKey = false;\n    if (typeof key === 'function') {\n        key = await key(parsedProt, jwe);\n        resolvedKey = true;\n    }\n    let cek;\n    try {\n        cek = await (0, decrypt_key_management_js_1.default)(alg, key, encryptedKey, joseHeader, options);\n    }\n    catch (err) {\n        if (err instanceof TypeError || err instanceof errors_js_1.JWEInvalid || err instanceof errors_js_1.JOSENotSupported) {\n            throw err;\n        }\n        cek = (0, cek_js_1.default)(enc);\n    }\n    let iv;\n    let tag;\n    try {\n        iv = (0, base64url_js_1.decode)(jwe.iv);\n    }\n    catch {\n        throw new errors_js_1.JWEInvalid('Failed to base64url decode the iv');\n    }\n    try {\n        tag = (0, base64url_js_1.decode)(jwe.tag);\n    }\n    catch {\n        throw new errors_js_1.JWEInvalid('Failed to base64url decode the tag');\n    }\n    const protectedHeader = buffer_utils_js_1.encoder.encode((_a = jwe.protected) !== null && _a !== void 0 ? _a : '');\n    let additionalData;\n    if (jwe.aad !== undefined) {\n        additionalData = (0, buffer_utils_js_1.concat)(protectedHeader, buffer_utils_js_1.encoder.encode('.'), buffer_utils_js_1.encoder.encode(jwe.aad));\n    }\n    else {\n        additionalData = protectedHeader;\n    }\n    let ciphertext;\n    try {\n        ciphertext = (0, base64url_js_1.decode)(jwe.ciphertext);\n    }\n    catch {\n        throw new errors_js_1.JWEInvalid('Failed to base64url decode the ciphertext');\n    }\n    let plaintext = await (0, decrypt_js_1.default)(enc, cek, ciphertext, iv, tag, additionalData);\n    if (joseHeader.zip === 'DEF') {\n        plaintext = await ((options === null || options === void 0 ? void 0 : options.inflateRaw) || zlib_js_1.inflate)(plaintext);\n    }\n    const result = { plaintext };\n    if (jwe.protected !== undefined) {\n        result.protectedHeader = parsedProt;\n    }\n    if (jwe.aad !== undefined) {\n        try {\n            result.additionalAuthenticatedData = (0, base64url_js_1.decode)(jwe.aad);\n        }\n        catch {\n            throw new errors_js_1.JWEInvalid('Failed to base64url decode the aad');\n        }\n    }\n    if (jwe.unprotected !== undefined) {\n        result.sharedUnprotectedHeader = jwe.unprotected;\n    }\n    if (jwe.header !== undefined) {\n        result.unprotectedHeader = jwe.header;\n    }\n    if (resolvedKey) {\n        return { ...result, key };\n    }\n    return result;\n}\nexports.flattenedDecrypt = flattenedDecrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.compactDecrypt = void 0;\nconst decrypt_js_1 = require(\"../flattened/decrypt.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nconst buffer_utils_js_1 = require(\"../../lib/buffer_utils.js\");\nasync function compactDecrypt(jwe, key, options) {\n    if (jwe instanceof Uint8Array) {\n        jwe = buffer_utils_js_1.decoder.decode(jwe);\n    }\n    if (typeof jwe !== 'string') {\n        throw new errors_js_1.JWEInvalid('Compact JWE must be a string or Uint8Array');\n    }\n    const { 0: protectedHeader, 1: encryptedKey, 2: iv, 3: ciphertext, 4: tag, length, } = jwe.split('.');\n    if (length !== 5) {\n        throw new errors_js_1.JWEInvalid('Invalid Compact JWE');\n    }\n    const decrypted = await (0, decrypt_js_1.flattenedDecrypt)({\n        ciphertext,\n        iv: (iv || undefined),\n        protected: protectedHeader || undefined,\n        tag: (tag || undefined),\n        encrypted_key: encryptedKey || undefined,\n    }, key, options);\n    const result = { plaintext: decrypted.plaintext, protectedHeader: decrypted.protectedHeader };\n    if (typeof key === 'function') {\n        return { ...result, key: decrypted.key };\n    }\n    return result;\n}\nexports.compactDecrypt = compactDecrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generalDecrypt = void 0;\nconst decrypt_js_1 = require(\"../flattened/decrypt.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nconst is_object_js_1 = require(\"../../lib/is_object.js\");\nasync function generalDecrypt(jwe, key, options) {\n    if (!(0, is_object_js_1.default)(jwe)) {\n        throw new errors_js_1.JWEInvalid('General JWE must be an object');\n    }\n    if (!Array.isArray(jwe.recipients) || !jwe.recipients.every(is_object_js_1.default)) {\n        throw new errors_js_1.JWEInvalid('JWE Recipients missing or incorrect type');\n    }\n    if (!jwe.recipients.length) {\n        throw new errors_js_1.JWEInvalid('JWE Recipients has no members');\n    }\n    for (const recipient of jwe.recipients) {\n        try {\n            return await (0, decrypt_js_1.flattenedDecrypt)({\n                aad: jwe.aad,\n                ciphertext: jwe.ciphertext,\n                encrypted_key: recipient.encrypted_key,\n                header: recipient.header,\n                iv: jwe.iv,\n                protected: jwe.protected,\n                tag: jwe.tag,\n                unprotected: jwe.unprotected,\n            }, key, options);\n        }\n        catch {\n        }\n    }\n    throw new errors_js_1.JWEDecryptionFailed();\n}\nexports.generalDecrypt = generalDecrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst tagInteger = 0x02;\nconst tagSequence = 0x30;\nclass Asn1SequenceDecoder {\n    constructor(buffer) {\n        if (buffer[0] !== tagSequence) {\n            throw new TypeError();\n        }\n        this.buffer = buffer;\n        this.offset = 1;\n        const len = this.decodeLength();\n        if (len !== buffer.length - this.offset) {\n            throw new TypeError();\n        }\n    }\n    decodeLength() {\n        let length = this.buffer[this.offset++];\n        if (length & 0x80) {\n            const nBytes = length & ~0x80;\n            length = 0;\n            for (let i = 0; i < nBytes; i++)\n                length = (length << 8) | this.buffer[this.offset + i];\n            this.offset += nBytes;\n        }\n        return length;\n    }\n    unsignedInteger() {\n        if (this.buffer[this.offset++] !== tagInteger) {\n            throw new TypeError();\n        }\n        let length = this.decodeLength();\n        if (this.buffer[this.offset] === 0) {\n            this.offset++;\n            length--;\n        }\n        const result = this.buffer.slice(this.offset, this.offset + length);\n        this.offset += length;\n        return result;\n    }\n    end() {\n        if (this.offset !== this.buffer.length) {\n            throw new TypeError();\n        }\n    }\n}\nexports.default = Asn1SequenceDecoder;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst base64url_js_1 = require(\"./base64url.js\");\nconst asn1_sequence_decoder_js_1 = require(\"./asn1_sequence_decoder.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst get_named_curve_js_1 = require(\"./get_named_curve.js\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst is_key_object_js_1 = require(\"./is_key_object.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nconst flags_js_1 = require(\"./flags.js\");\nconst keyToJWK = (key) => {\n    let keyObject;\n    if ((0, webcrypto_js_1.isCryptoKey)(key)) {\n        if (!key.extractable) {\n            throw new TypeError('CryptoKey is not extractable');\n        }\n        keyObject = crypto_1.KeyObject.from(key);\n    }\n    else if ((0, is_key_object_js_1.default)(key)) {\n        keyObject = key;\n    }\n    else if (key instanceof Uint8Array) {\n        return {\n            kty: 'oct',\n            k: (0, base64url_js_1.encode)(key),\n        };\n    }\n    else {\n        throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types, 'Uint8Array'));\n    }\n    if (flags_js_1.jwkExport) {\n        if (keyObject.type !== 'secret' &&\n            !['rsa', 'ec', 'ed25519', 'x25519', 'ed448', 'x448'].includes(keyObject.asymmetricKeyType)) {\n            throw new errors_js_1.JOSENotSupported('Unsupported key asymmetricKeyType');\n        }\n        return keyObject.export({ format: 'jwk' });\n    }\n    switch (keyObject.type) {\n        case 'secret':\n            return {\n                kty: 'oct',\n                k: (0, base64url_js_1.encode)(keyObject.export()),\n            };\n        case 'private':\n        case 'public': {\n            switch (keyObject.asymmetricKeyType) {\n                case 'rsa': {\n                    const der = keyObject.export({ format: 'der', type: 'pkcs1' });\n                    const dec = new asn1_sequence_decoder_js_1.default(der);\n                    if (keyObject.type === 'private') {\n                        dec.unsignedInteger();\n                    }\n                    const n = (0, base64url_js_1.encode)(dec.unsignedInteger());\n                    const e = (0, base64url_js_1.encode)(dec.unsignedInteger());\n                    let jwk;\n                    if (keyObject.type === 'private') {\n                        jwk = {\n                            d: (0, base64url_js_1.encode)(dec.unsignedInteger()),\n                            p: (0, base64url_js_1.encode)(dec.unsignedInteger()),\n                            q: (0, base64url_js_1.encode)(dec.unsignedInteger()),\n                            dp: (0, base64url_js_1.encode)(dec.unsignedInteger()),\n                            dq: (0, base64url_js_1.encode)(dec.unsignedInteger()),\n                            qi: (0, base64url_js_1.encode)(dec.unsignedInteger()),\n                        };\n                    }\n                    dec.end();\n                    return { kty: 'RSA', n, e, ...jwk };\n                }\n                case 'ec': {\n                    const crv = (0, get_named_curve_js_1.default)(keyObject);\n                    let len;\n                    let offset;\n                    let correction;\n                    switch (crv) {\n                        case 'secp256k1':\n                            len = 64;\n                            offset = 31 + 2;\n                            correction = -1;\n                            break;\n                        case 'P-256':\n                            len = 64;\n                            offset = 34 + 2;\n                            correction = -1;\n                            break;\n                        case 'P-384':\n                            len = 96;\n                            offset = 33 + 2;\n                            correction = -3;\n                            break;\n                        case 'P-521':\n                            len = 132;\n                            offset = 33 + 2;\n                            correction = -3;\n                            break;\n                        default:\n                            throw new errors_js_1.JOSENotSupported('Unsupported curve');\n                    }\n                    if (keyObject.type === 'public') {\n                        const der = keyObject.export({ type: 'spki', format: 'der' });\n                        return {\n                            kty: 'EC',\n                            crv,\n                            x: (0, base64url_js_1.encode)(der.subarray(-len, -len / 2)),\n                            y: (0, base64url_js_1.encode)(der.subarray(-len / 2)),\n                        };\n                    }\n                    const der = keyObject.export({ type: 'pkcs8', format: 'der' });\n                    if (der.length < 100) {\n                        offset += correction;\n                    }\n                    return {\n                        ...keyToJWK((0, crypto_1.createPublicKey)(keyObject)),\n                        d: (0, base64url_js_1.encode)(der.subarray(offset, offset + len / 2)),\n                    };\n                }\n                case 'ed25519':\n                case 'x25519': {\n                    const crv = (0, get_named_curve_js_1.default)(keyObject);\n                    if (keyObject.type === 'public') {\n                        const der = keyObject.export({ type: 'spki', format: 'der' });\n                        return {\n                            kty: 'OKP',\n                            crv,\n                            x: (0, base64url_js_1.encode)(der.subarray(-32)),\n                        };\n                    }\n                    const der = keyObject.export({ type: 'pkcs8', format: 'der' });\n                    return {\n                        ...keyToJWK((0, crypto_1.createPublicKey)(keyObject)),\n                        d: (0, base64url_js_1.encode)(der.subarray(-32)),\n                    };\n                }\n                case 'ed448':\n                case 'x448': {\n                    const crv = (0, get_named_curve_js_1.default)(keyObject);\n                    if (keyObject.type === 'public') {\n                        const der = keyObject.export({ type: 'spki', format: 'der' });\n                        return {\n                            kty: 'OKP',\n                            crv,\n                            x: (0, base64url_js_1.encode)(der.subarray(crv === 'Ed448' ? -57 : -56)),\n                        };\n                    }\n                    const der = keyObject.export({ type: 'pkcs8', format: 'der' });\n                    return {\n                        ...keyToJWK((0, crypto_1.createPublicKey)(keyObject)),\n                        d: (0, base64url_js_1.encode)(der.subarray(crv === 'Ed448' ? -57 : -56)),\n                    };\n                }\n                default:\n                    throw new errors_js_1.JOSENotSupported('Unsupported key asymmetricKeyType');\n            }\n        }\n        default:\n            throw new errors_js_1.JOSENotSupported('Unsupported key type');\n    }\n};\nexports.default = keyToJWK;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.exportJWK = exports.exportPKCS8 = exports.exportSPKI = void 0;\nconst asn1_js_1 = require(\"../runtime/asn1.js\");\nconst asn1_js_2 = require(\"../runtime/asn1.js\");\nconst key_to_jwk_js_1 = require(\"../runtime/key_to_jwk.js\");\nasync function exportSPKI(key) {\n    return (0, asn1_js_1.toSPKI)(key);\n}\nexports.exportSPKI = exportSPKI;\nasync function exportPKCS8(key) {\n    return (0, asn1_js_2.toPKCS8)(key);\n}\nexports.exportPKCS8 = exportPKCS8;\nasync function exportJWK(key) {\n    return (0, key_to_jwk_js_1.default)(key);\n}\nexports.exportJWK = exportJWK;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst aeskw_js_1 = require(\"../runtime/aeskw.js\");\nconst ECDH = require(\"../runtime/ecdhes.js\");\nconst pbes2kw_js_1 = require(\"../runtime/pbes2kw.js\");\nconst rsaes_js_1 = require(\"../runtime/rsaes.js\");\nconst base64url_js_1 = require(\"../runtime/base64url.js\");\nconst cek_js_1 = require(\"../lib/cek.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst export_js_1 = require(\"../key/export.js\");\nconst check_key_type_js_1 = require(\"./check_key_type.js\");\nconst aesgcmkw_js_1 = require(\"./aesgcmkw.js\");\nasync function encryptKeyManagement(alg, enc, key, providedCek, providedParameters = {}) {\n    let encryptedKey;\n    let parameters;\n    let cek;\n    (0, check_key_type_js_1.default)(alg, key, 'encrypt');\n    switch (alg) {\n        case 'dir': {\n            cek = key;\n            break;\n        }\n        case 'ECDH-ES':\n        case 'ECDH-ES+A128KW':\n        case 'ECDH-ES+A192KW':\n        case 'ECDH-ES+A256KW': {\n            if (!ECDH.ecdhAllowed(key)) {\n                throw new errors_js_1.JOSENotSupported('ECDH with the provided key is not allowed or not supported by your javascript runtime');\n            }\n            const { apu, apv } = providedParameters;\n            let { epk: ephemeralKey } = providedParameters;\n            ephemeralKey || (ephemeralKey = (await ECDH.generateEpk(key)).privateKey);\n            const { x, y, crv, kty } = await (0, export_js_1.exportJWK)(ephemeralKey);\n            const sharedSecret = await ECDH.deriveKey(key, ephemeralKey, alg === 'ECDH-ES' ? enc : alg, alg === 'ECDH-ES' ? (0, cek_js_1.bitLength)(enc) : parseInt(alg.slice(-5, -2), 10), apu, apv);\n            parameters = { epk: { x, crv, kty } };\n            if (kty === 'EC')\n                parameters.epk.y = y;\n            if (apu)\n                parameters.apu = (0, base64url_js_1.encode)(apu);\n            if (apv)\n                parameters.apv = (0, base64url_js_1.encode)(apv);\n            if (alg === 'ECDH-ES') {\n                cek = sharedSecret;\n                break;\n            }\n            cek = providedCek || (0, cek_js_1.default)(enc);\n            const kwAlg = alg.slice(-6);\n            encryptedKey = await (0, aeskw_js_1.wrap)(kwAlg, sharedSecret, cek);\n            break;\n        }\n        case 'RSA1_5':\n        case 'RSA-OAEP':\n        case 'RSA-OAEP-256':\n        case 'RSA-OAEP-384':\n        case 'RSA-OAEP-512': {\n            cek = providedCek || (0, cek_js_1.default)(enc);\n            encryptedKey = await (0, rsaes_js_1.encrypt)(alg, key, cek);\n            break;\n        }\n        case 'PBES2-HS256+A128KW':\n        case 'PBES2-HS384+A192KW':\n        case 'PBES2-HS512+A256KW': {\n            cek = providedCek || (0, cek_js_1.default)(enc);\n            const { p2c, p2s } = providedParameters;\n            ({ encryptedKey, ...parameters } = await (0, pbes2kw_js_1.encrypt)(alg, key, cek, p2c, p2s));\n            break;\n        }\n        case 'A128KW':\n        case 'A192KW':\n        case 'A256KW': {\n            cek = providedCek || (0, cek_js_1.default)(enc);\n            encryptedKey = await (0, aeskw_js_1.wrap)(alg, key, cek);\n            break;\n        }\n        case 'A128GCMKW':\n        case 'A192GCMKW':\n        case 'A256GCMKW': {\n            cek = providedCek || (0, cek_js_1.default)(enc);\n            const { iv } = providedParameters;\n            ({ encryptedKey, ...parameters } = await (0, aesgcmkw_js_1.wrap)(alg, key, cek, iv));\n            break;\n        }\n        default: {\n            throw new errors_js_1.JOSENotSupported('Invalid or unsupported \"alg\" (JWE Algorithm) header value');\n        }\n    }\n    return { cek, encryptedKey, parameters };\n}\nexports.default = encryptKeyManagement;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FlattenedEncrypt = exports.unprotected = void 0;\nconst base64url_js_1 = require(\"../../runtime/base64url.js\");\nconst encrypt_js_1 = require(\"../../runtime/encrypt.js\");\nconst zlib_js_1 = require(\"../../runtime/zlib.js\");\nconst iv_js_1 = require(\"../../lib/iv.js\");\nconst encrypt_key_management_js_1 = require(\"../../lib/encrypt_key_management.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nconst is_disjoint_js_1 = require(\"../../lib/is_disjoint.js\");\nconst buffer_utils_js_1 = require(\"../../lib/buffer_utils.js\");\nconst validate_crit_js_1 = require(\"../../lib/validate_crit.js\");\nexports.unprotected = Symbol();\nclass FlattenedEncrypt {\n    constructor(plaintext) {\n        if (!(plaintext instanceof Uint8Array)) {\n            throw new TypeError('plaintext must be an instance of Uint8Array');\n        }\n        this._plaintext = plaintext;\n    }\n    setKeyManagementParameters(parameters) {\n        if (this._keyManagementParameters) {\n            throw new TypeError('setKeyManagementParameters can only be called once');\n        }\n        this._keyManagementParameters = parameters;\n        return this;\n    }\n    setProtectedHeader(protectedHeader) {\n        if (this._protectedHeader) {\n            throw new TypeError('setProtectedHeader can only be called once');\n        }\n        this._protectedHeader = protectedHeader;\n        return this;\n    }\n    setSharedUnprotectedHeader(sharedUnprotectedHeader) {\n        if (this._sharedUnprotectedHeader) {\n            throw new TypeError('setSharedUnprotectedHeader can only be called once');\n        }\n        this._sharedUnprotectedHeader = sharedUnprotectedHeader;\n        return this;\n    }\n    setUnprotectedHeader(unprotectedHeader) {\n        if (this._unprotectedHeader) {\n            throw new TypeError('setUnprotectedHeader can only be called once');\n        }\n        this._unprotectedHeader = unprotectedHeader;\n        return this;\n    }\n    setAdditionalAuthenticatedData(aad) {\n        this._aad = aad;\n        return this;\n    }\n    setContentEncryptionKey(cek) {\n        if (this._cek) {\n            throw new TypeError('setContentEncryptionKey can only be called once');\n        }\n        this._cek = cek;\n        return this;\n    }\n    setInitializationVector(iv) {\n        if (this._iv) {\n            throw new TypeError('setInitializationVector can only be called once');\n        }\n        this._iv = iv;\n        return this;\n    }\n    async encrypt(key, options) {\n        if (!this._protectedHeader && !this._unprotectedHeader && !this._sharedUnprotectedHeader) {\n            throw new errors_js_1.JWEInvalid('either setProtectedHeader, setUnprotectedHeader, or sharedUnprotectedHeader must be called before #encrypt()');\n        }\n        if (!(0, is_disjoint_js_1.default)(this._protectedHeader, this._unprotectedHeader, this._sharedUnprotectedHeader)) {\n            throw new errors_js_1.JWEInvalid('JWE Protected, JWE Shared Unprotected and JWE Per-Recipient Header Parameter names must be disjoint');\n        }\n        const joseHeader = {\n            ...this._protectedHeader,\n            ...this._unprotectedHeader,\n            ...this._sharedUnprotectedHeader,\n        };\n        (0, validate_crit_js_1.default)(errors_js_1.JWEInvalid, new Map(), options === null || options === void 0 ? void 0 : options.crit, this._protectedHeader, joseHeader);\n        if (joseHeader.zip !== undefined) {\n            if (!this._protectedHeader || !this._protectedHeader.zip) {\n                throw new errors_js_1.JWEInvalid('JWE \"zip\" (Compression Algorithm) Header MUST be integrity protected');\n            }\n            if (joseHeader.zip !== 'DEF') {\n                throw new errors_js_1.JOSENotSupported('Unsupported JWE \"zip\" (Compression Algorithm) Header Parameter value');\n            }\n        }\n        const { alg, enc } = joseHeader;\n        if (typeof alg !== 'string' || !alg) {\n            throw new errors_js_1.JWEInvalid('JWE \"alg\" (Algorithm) Header Parameter missing or invalid');\n        }\n        if (typeof enc !== 'string' || !enc) {\n            throw new errors_js_1.JWEInvalid('JWE \"enc\" (Encryption Algorithm) Header Parameter missing or invalid');\n        }\n        let encryptedKey;\n        if (alg === 'dir') {\n            if (this._cek) {\n                throw new TypeError('setContentEncryptionKey cannot be called when using Direct Encryption');\n            }\n        }\n        else if (alg === 'ECDH-ES') {\n            if (this._cek) {\n                throw new TypeError('setContentEncryptionKey cannot be called when using Direct Key Agreement');\n            }\n        }\n        let cek;\n        {\n            let parameters;\n            ({ cek, encryptedKey, parameters } = await (0, encrypt_key_management_js_1.default)(alg, enc, key, this._cek, this._keyManagementParameters));\n            if (parameters) {\n                if (options && exports.unprotected in options) {\n                    if (!this._unprotectedHeader) {\n                        this.setUnprotectedHeader(parameters);\n                    }\n                    else {\n                        this._unprotectedHeader = { ...this._unprotectedHeader, ...parameters };\n                    }\n                }\n                else {\n                    if (!this._protectedHeader) {\n                        this.setProtectedHeader(parameters);\n                    }\n                    else {\n                        this._protectedHeader = { ...this._protectedHeader, ...parameters };\n                    }\n                }\n            }\n        }\n        this._iv || (this._iv = (0, iv_js_1.default)(enc));\n        let additionalData;\n        let protectedHeader;\n        let aadMember;\n        if (this._protectedHeader) {\n            protectedHeader = buffer_utils_js_1.encoder.encode((0, base64url_js_1.encode)(JSON.stringify(this._protectedHeader)));\n        }\n        else {\n            protectedHeader = buffer_utils_js_1.encoder.encode('');\n        }\n        if (this._aad) {\n            aadMember = (0, base64url_js_1.encode)(this._aad);\n            additionalData = (0, buffer_utils_js_1.concat)(protectedHeader, buffer_utils_js_1.encoder.encode('.'), buffer_utils_js_1.encoder.encode(aadMember));\n        }\n        else {\n            additionalData = protectedHeader;\n        }\n        let ciphertext;\n        let tag;\n        if (joseHeader.zip === 'DEF') {\n            const deflated = await ((options === null || options === void 0 ? void 0 : options.deflateRaw) || zlib_js_1.deflate)(this._plaintext);\n            ({ ciphertext, tag } = await (0, encrypt_js_1.default)(enc, deflated, cek, this._iv, additionalData));\n        }\n        else {\n            ;\n            ({ ciphertext, tag } = await (0, encrypt_js_1.default)(enc, this._plaintext, cek, this._iv, additionalData));\n        }\n        const jwe = {\n            ciphertext: (0, base64url_js_1.encode)(ciphertext),\n            iv: (0, base64url_js_1.encode)(this._iv),\n            tag: (0, base64url_js_1.encode)(tag),\n        };\n        if (encryptedKey) {\n            jwe.encrypted_key = (0, base64url_js_1.encode)(encryptedKey);\n        }\n        if (aadMember) {\n            jwe.aad = aadMember;\n        }\n        if (this._protectedHeader) {\n            jwe.protected = buffer_utils_js_1.decoder.decode(protectedHeader);\n        }\n        if (this._sharedUnprotectedHeader) {\n            jwe.unprotected = this._sharedUnprotectedHeader;\n        }\n        if (this._unprotectedHeader) {\n            jwe.header = this._unprotectedHeader;\n        }\n        return jwe;\n    }\n}\nexports.FlattenedEncrypt = FlattenedEncrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GeneralEncrypt = void 0;\nconst encrypt_js_1 = require(\"../flattened/encrypt.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nconst cek_js_1 = require(\"../../lib/cek.js\");\nconst is_disjoint_js_1 = require(\"../../lib/is_disjoint.js\");\nconst encrypt_key_management_js_1 = require(\"../../lib/encrypt_key_management.js\");\nconst base64url_js_1 = require(\"../../runtime/base64url.js\");\nconst validate_crit_js_1 = require(\"../../lib/validate_crit.js\");\nclass IndividualRecipient {\n    constructor(enc, key, options) {\n        this.parent = enc;\n        this.key = key;\n        this.options = options;\n    }\n    setUnprotectedHeader(unprotectedHeader) {\n        if (this.unprotectedHeader) {\n            throw new TypeError('setUnprotectedHeader can only be called once');\n        }\n        this.unprotectedHeader = unprotectedHeader;\n        return this;\n    }\n    addRecipient(...args) {\n        return this.parent.addRecipient(...args);\n    }\n    encrypt(...args) {\n        return this.parent.encrypt(...args);\n    }\n    done() {\n        return this.parent;\n    }\n}\nclass GeneralEncrypt {\n    constructor(plaintext) {\n        this._recipients = [];\n        this._plaintext = plaintext;\n    }\n    addRecipient(key, options) {\n        const recipient = new IndividualRecipient(this, key, { crit: options === null || options === void 0 ? void 0 : options.crit });\n        this._recipients.push(recipient);\n        return recipient;\n    }\n    setProtectedHeader(protectedHeader) {\n        if (this._protectedHeader) {\n            throw new TypeError('setProtectedHeader can only be called once');\n        }\n        this._protectedHeader = protectedHeader;\n        return this;\n    }\n    setSharedUnprotectedHeader(sharedUnprotectedHeader) {\n        if (this._unprotectedHeader) {\n            throw new TypeError('setSharedUnprotectedHeader can only be called once');\n        }\n        this._unprotectedHeader = sharedUnprotectedHeader;\n        return this;\n    }\n    setAdditionalAuthenticatedData(aad) {\n        this._aad = aad;\n        return this;\n    }\n    async encrypt(options) {\n        var _a, _b, _c;\n        if (!this._recipients.length) {\n            throw new errors_js_1.JWEInvalid('at least one recipient must be added');\n        }\n        options = { deflateRaw: options === null || options === void 0 ? void 0 : options.deflateRaw };\n        if (this._recipients.length === 1) {\n            const [recipient] = this._recipients;\n            const flattened = await new encrypt_js_1.FlattenedEncrypt(this._plaintext)\n                .setAdditionalAuthenticatedData(this._aad)\n                .setProtectedHeader(this._protectedHeader)\n                .setSharedUnprotectedHeader(this._unprotectedHeader)\n                .setUnprotectedHeader(recipient.unprotectedHeader)\n                .encrypt(recipient.key, { ...recipient.options, ...options });\n            let jwe = {\n                ciphertext: flattened.ciphertext,\n                iv: flattened.iv,\n                recipients: [{}],\n                tag: flattened.tag,\n            };\n            if (flattened.aad)\n                jwe.aad = flattened.aad;\n            if (flattened.protected)\n                jwe.protected = flattened.protected;\n            if (flattened.unprotected)\n                jwe.unprotected = flattened.unprotected;\n            if (flattened.encrypted_key)\n                jwe.recipients[0].encrypted_key = flattened.encrypted_key;\n            if (flattened.header)\n                jwe.recipients[0].header = flattened.header;\n            return jwe;\n        }\n        let enc;\n        for (let i = 0; i < this._recipients.length; i++) {\n            const recipient = this._recipients[i];\n            if (!(0, is_disjoint_js_1.default)(this._protectedHeader, this._unprotectedHeader, recipient.unprotectedHeader)) {\n                throw new errors_js_1.JWEInvalid('JWE Protected, JWE Shared Unprotected and JWE Per-Recipient Header Parameter names must be disjoint');\n            }\n            const joseHeader = {\n                ...this._protectedHeader,\n                ...this._unprotectedHeader,\n                ...recipient.unprotectedHeader,\n            };\n            const { alg } = joseHeader;\n            if (typeof alg !== 'string' || !alg) {\n                throw new errors_js_1.JWEInvalid('JWE \"alg\" (Algorithm) Header Parameter missing or invalid');\n            }\n            if (alg === 'dir' || alg === 'ECDH-ES') {\n                throw new errors_js_1.JWEInvalid('\"dir\" and \"ECDH-ES\" alg may only be used with a single recipient');\n            }\n            if (typeof joseHeader.enc !== 'string' || !joseHeader.enc) {\n                throw new errors_js_1.JWEInvalid('JWE \"enc\" (Encryption Algorithm) Header Parameter missing or invalid');\n            }\n            if (!enc) {\n                enc = joseHeader.enc;\n            }\n            else if (enc !== joseHeader.enc) {\n                throw new errors_js_1.JWEInvalid('JWE \"enc\" (Encryption Algorithm) Header Parameter must be the same for all recipients');\n            }\n            (0, validate_crit_js_1.default)(errors_js_1.JWEInvalid, new Map(), recipient.options.crit, this._protectedHeader, joseHeader);\n            if (joseHeader.zip !== undefined) {\n                if (!this._protectedHeader || !this._protectedHeader.zip) {\n                    throw new errors_js_1.JWEInvalid('JWE \"zip\" (Compression Algorithm) Header MUST be integrity protected');\n                }\n            }\n        }\n        const cek = (0, cek_js_1.default)(enc);\n        let jwe = {\n            ciphertext: '',\n            iv: '',\n            recipients: [],\n            tag: '',\n        };\n        for (let i = 0; i < this._recipients.length; i++) {\n            const recipient = this._recipients[i];\n            const target = {};\n            jwe.recipients.push(target);\n            const joseHeader = {\n                ...this._protectedHeader,\n                ...this._unprotectedHeader,\n                ...recipient.unprotectedHeader,\n            };\n            const p2c = joseHeader.alg.startsWith('PBES2') ? 2048 + i : undefined;\n            if (i === 0) {\n                const flattened = await new encrypt_js_1.FlattenedEncrypt(this._plaintext)\n                    .setAdditionalAuthenticatedData(this._aad)\n                    .setContentEncryptionKey(cek)\n                    .setProtectedHeader(this._protectedHeader)\n                    .setSharedUnprotectedHeader(this._unprotectedHeader)\n                    .setUnprotectedHeader(recipient.unprotectedHeader)\n                    .setKeyManagementParameters({ p2c })\n                    .encrypt(recipient.key, {\n                    ...recipient.options,\n                    ...options,\n                    [encrypt_js_1.unprotected]: true,\n                });\n                jwe.ciphertext = flattened.ciphertext;\n                jwe.iv = flattened.iv;\n                jwe.tag = flattened.tag;\n                if (flattened.aad)\n                    jwe.aad = flattened.aad;\n                if (flattened.protected)\n                    jwe.protected = flattened.protected;\n                if (flattened.unprotected)\n                    jwe.unprotected = flattened.unprotected;\n                target.encrypted_key = flattened.encrypted_key;\n                if (flattened.header)\n                    target.header = flattened.header;\n                continue;\n            }\n            const { encryptedKey, parameters } = await (0, encrypt_key_management_js_1.default)(((_a = recipient.unprotectedHeader) === null || _a === void 0 ? void 0 : _a.alg) ||\n                ((_b = this._protectedHeader) === null || _b === void 0 ? void 0 : _b.alg) ||\n                ((_c = this._unprotectedHeader) === null || _c === void 0 ? void 0 : _c.alg), enc, recipient.key, cek, { p2c });\n            target.encrypted_key = (0, base64url_js_1.encode)(encryptedKey);\n            if (recipient.unprotectedHeader || parameters)\n                target.header = { ...recipient.unprotectedHeader, ...parameters };\n        }\n        return jwe;\n    }\n}\nexports.GeneralEncrypt = GeneralEncrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst errors_js_1 = require(\"../util/errors.js\");\nfunction dsaDigest(alg) {\n    switch (alg) {\n        case 'PS256':\n        case 'RS256':\n        case 'ES256':\n        case 'ES256K':\n            return 'sha256';\n        case 'PS384':\n        case 'RS384':\n        case 'ES384':\n            return 'sha384';\n        case 'PS512':\n        case 'RS512':\n        case 'ES512':\n            return 'sha512';\n        case 'EdDSA':\n            return undefined;\n        default:\n            throw new errors_js_1.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n    }\n}\nexports.default = dsaDigest;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst get_named_curve_js_1 = require(\"./get_named_curve.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst check_modulus_length_js_1 = require(\"./check_modulus_length.js\");\nconst flags_js_1 = require(\"./flags.js\");\nconst PSS = {\n    padding: crypto_1.constants.RSA_PKCS1_PSS_PADDING,\n    saltLength: crypto_1.constants.RSA_PSS_SALTLEN_DIGEST,\n};\nconst ecCurveAlgMap = new Map([\n    ['ES256', 'P-256'],\n    ['ES256K', 'secp256k1'],\n    ['ES384', 'P-384'],\n    ['ES512', 'P-521'],\n]);\nfunction keyForCrypto(alg, key) {\n    switch (alg) {\n        case 'EdDSA':\n            if (!['ed25519', 'ed448'].includes(key.asymmetricKeyType)) {\n                throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be ed25519 or ed448');\n            }\n            return key;\n        case 'RS256':\n        case 'RS384':\n        case 'RS512':\n            if (key.asymmetricKeyType !== 'rsa') {\n                throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa');\n            }\n            (0, check_modulus_length_js_1.default)(key, alg);\n            return key;\n        case flags_js_1.rsaPssParams && 'PS256':\n        case flags_js_1.rsaPssParams && 'PS384':\n        case flags_js_1.rsaPssParams && 'PS512':\n            if (key.asymmetricKeyType === 'rsa-pss') {\n                const { hashAlgorithm, mgf1HashAlgorithm, saltLength } = key.asymmetricKeyDetails;\n                const length = parseInt(alg.slice(-3), 10);\n                if (hashAlgorithm !== undefined &&\n                    (hashAlgorithm !== `sha${length}` || mgf1HashAlgorithm !== hashAlgorithm)) {\n                    throw new TypeError(`Invalid key for this operation, its RSA-PSS parameters do not meet the requirements of \"alg\" ${alg}`);\n                }\n                if (saltLength !== undefined && saltLength > length >> 3) {\n                    throw new TypeError(`Invalid key for this operation, its RSA-PSS parameter saltLength does not meet the requirements of \"alg\" ${alg}`);\n                }\n            }\n            else if (key.asymmetricKeyType !== 'rsa') {\n                throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa or rsa-pss');\n            }\n            (0, check_modulus_length_js_1.default)(key, alg);\n            return { key, ...PSS };\n        case !flags_js_1.rsaPssParams && 'PS256':\n        case !flags_js_1.rsaPssParams && 'PS384':\n        case !flags_js_1.rsaPssParams && 'PS512':\n            if (key.asymmetricKeyType !== 'rsa') {\n                throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be rsa');\n            }\n            (0, check_modulus_length_js_1.default)(key, alg);\n            return { key, ...PSS };\n        case 'ES256':\n        case 'ES256K':\n        case 'ES384':\n        case 'ES512': {\n            if (key.asymmetricKeyType !== 'ec') {\n                throw new TypeError('Invalid key for this operation, its asymmetricKeyType must be ec');\n            }\n            const actual = (0, get_named_curve_js_1.default)(key);\n            const expected = ecCurveAlgMap.get(alg);\n            if (actual !== expected) {\n                throw new TypeError(`Invalid key curve for the algorithm, its curve must be ${expected}, got ${actual}`);\n            }\n            return { dsaEncoding: 'ieee-p1363', key };\n        }\n        default:\n            throw new errors_js_1.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n    }\n}\nexports.default = keyForCrypto;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst errors_js_1 = require(\"../util/errors.js\");\nfunction hmacDigest(alg) {\n    switch (alg) {\n        case 'HS256':\n            return 'sha256';\n        case 'HS384':\n            return 'sha384';\n        case 'HS512':\n            return 'sha512';\n        default:\n            throw new errors_js_1.JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n    }\n}\nexports.default = hmacDigest;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst webcrypto_js_1 = require(\"./webcrypto.js\");\nconst crypto_key_js_1 = require(\"../lib/crypto_key.js\");\nconst invalid_key_input_js_1 = require(\"../lib/invalid_key_input.js\");\nconst is_key_like_js_1 = require(\"./is_key_like.js\");\nfunction getSignVerifyKey(alg, key, usage) {\n    if (key instanceof Uint8Array) {\n        if (!alg.startsWith('HS')) {\n            throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types));\n        }\n        return (0, crypto_1.createSecretKey)(key);\n    }\n    if (key instanceof crypto_1.KeyObject) {\n        return key;\n    }\n    if ((0, webcrypto_js_1.isCryptoKey)(key)) {\n        (0, crypto_key_js_1.checkSigCryptoKey)(key, alg, usage);\n        return crypto_1.KeyObject.from(key);\n    }\n    throw new TypeError((0, invalid_key_input_js_1.default)(key, ...is_key_like_js_1.types, 'Uint8Array'));\n}\nexports.default = getSignVerifyKey;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto = require(\"crypto\");\nconst util_1 = require(\"util\");\nconst dsa_digest_js_1 = require(\"./dsa_digest.js\");\nconst hmac_digest_js_1 = require(\"./hmac_digest.js\");\nconst node_key_js_1 = require(\"./node_key.js\");\nconst get_sign_verify_key_js_1 = require(\"./get_sign_verify_key.js\");\nlet oneShotSign;\nif (crypto.sign.length > 3) {\n    oneShotSign = (0, util_1.promisify)(crypto.sign);\n}\nelse {\n    oneShotSign = crypto.sign;\n}\nconst sign = async (alg, key, data) => {\n    const keyObject = (0, get_sign_verify_key_js_1.default)(alg, key, 'sign');\n    if (alg.startsWith('HS')) {\n        const hmac = crypto.createHmac((0, hmac_digest_js_1.default)(alg), keyObject);\n        hmac.update(data);\n        return hmac.digest();\n    }\n    return oneShotSign((0, dsa_digest_js_1.default)(alg), data, (0, node_key_js_1.default)(alg, keyObject));\n};\nexports.default = sign;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto = require(\"crypto\");\nconst util_1 = require(\"util\");\nconst dsa_digest_js_1 = require(\"./dsa_digest.js\");\nconst node_key_js_1 = require(\"./node_key.js\");\nconst sign_js_1 = require(\"./sign.js\");\nconst get_sign_verify_key_js_1 = require(\"./get_sign_verify_key.js\");\nconst flags_js_1 = require(\"./flags.js\");\nlet oneShotVerify;\nif (crypto.verify.length > 4 && flags_js_1.oneShotCallback) {\n    oneShotVerify = (0, util_1.promisify)(crypto.verify);\n}\nelse {\n    oneShotVerify = crypto.verify;\n}\nconst verify = async (alg, key, signature, data) => {\n    const keyObject = (0, get_sign_verify_key_js_1.default)(alg, key, 'verify');\n    if (alg.startsWith('HS')) {\n        const expected = await (0, sign_js_1.default)(alg, keyObject, data);\n        const actual = signature;\n        try {\n            return crypto.timingSafeEqual(actual, expected);\n        }\n        catch {\n            return false;\n        }\n    }\n    const algorithm = (0, dsa_digest_js_1.default)(alg);\n    const keyInput = (0, node_key_js_1.default)(alg, keyObject);\n    try {\n        return await oneShotVerify(algorithm, data, keyInput, signature);\n    }\n    catch {\n        return false;\n    }\n};\nexports.default = verify;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.flattenedVerify = void 0;\nconst base64url_js_1 = require(\"../../runtime/base64url.js\");\nconst verify_js_1 = require(\"../../runtime/verify.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nconst buffer_utils_js_1 = require(\"../../lib/buffer_utils.js\");\nconst is_disjoint_js_1 = require(\"../../lib/is_disjoint.js\");\nconst is_object_js_1 = require(\"../../lib/is_object.js\");\nconst check_key_type_js_1 = require(\"../../lib/check_key_type.js\");\nconst validate_crit_js_1 = require(\"../../lib/validate_crit.js\");\nconst validate_algorithms_js_1 = require(\"../../lib/validate_algorithms.js\");\nasync function flattenedVerify(jws, key, options) {\n    var _a;\n    if (!(0, is_object_js_1.default)(jws)) {\n        throw new errors_js_1.JWSInvalid('Flattened JWS must be an object');\n    }\n    if (jws.protected === undefined && jws.header === undefined) {\n        throw new errors_js_1.JWSInvalid('Flattened JWS must have either of the \"protected\" or \"header\" members');\n    }\n    if (jws.protected !== undefined && typeof jws.protected !== 'string') {\n        throw new errors_js_1.JWSInvalid('JWS Protected Header incorrect type');\n    }\n    if (jws.payload === undefined) {\n        throw new errors_js_1.JWSInvalid('JWS Payload missing');\n    }\n    if (typeof jws.signature !== 'string') {\n        throw new errors_js_1.JWSInvalid('JWS Signature missing or incorrect type');\n    }\n    if (jws.header !== undefined && !(0, is_object_js_1.default)(jws.header)) {\n        throw new errors_js_1.JWSInvalid('JWS Unprotected Header incorrect type');\n    }\n    let parsedProt = {};\n    if (jws.protected) {\n        try {\n            const protectedHeader = (0, base64url_js_1.decode)(jws.protected);\n            parsedProt = JSON.parse(buffer_utils_js_1.decoder.decode(protectedHeader));\n        }\n        catch {\n            throw new errors_js_1.JWSInvalid('JWS Protected Header is invalid');\n        }\n    }\n    if (!(0, is_disjoint_js_1.default)(parsedProt, jws.header)) {\n        throw new errors_js_1.JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');\n    }\n    const joseHeader = {\n        ...parsedProt,\n        ...jws.header,\n    };\n    const extensions = (0, validate_crit_js_1.default)(errors_js_1.JWSInvalid, new Map([['b64', true]]), options === null || options === void 0 ? void 0 : options.crit, parsedProt, joseHeader);\n    let b64 = true;\n    if (extensions.has('b64')) {\n        b64 = parsedProt.b64;\n        if (typeof b64 !== 'boolean') {\n            throw new errors_js_1.JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n        }\n    }\n    const { alg } = joseHeader;\n    if (typeof alg !== 'string' || !alg) {\n        throw new errors_js_1.JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n    }\n    const algorithms = options && (0, validate_algorithms_js_1.default)('algorithms', options.algorithms);\n    if (algorithms && !algorithms.has(alg)) {\n        throw new errors_js_1.JOSEAlgNotAllowed('\"alg\" (Algorithm) Header Parameter not allowed');\n    }\n    if (b64) {\n        if (typeof jws.payload !== 'string') {\n            throw new errors_js_1.JWSInvalid('JWS Payload must be a string');\n        }\n    }\n    else if (typeof jws.payload !== 'string' && !(jws.payload instanceof Uint8Array)) {\n        throw new errors_js_1.JWSInvalid('JWS Payload must be a string or an Uint8Array instance');\n    }\n    let resolvedKey = false;\n    if (typeof key === 'function') {\n        key = await key(parsedProt, jws);\n        resolvedKey = true;\n    }\n    (0, check_key_type_js_1.default)(alg, key, 'verify');\n    const data = (0, buffer_utils_js_1.concat)(buffer_utils_js_1.encoder.encode((_a = jws.protected) !== null && _a !== void 0 ? _a : ''), buffer_utils_js_1.encoder.encode('.'), typeof jws.payload === 'string' ? buffer_utils_js_1.encoder.encode(jws.payload) : jws.payload);\n    let signature;\n    try {\n        signature = (0, base64url_js_1.decode)(jws.signature);\n    }\n    catch {\n        throw new errors_js_1.JWSInvalid('Failed to base64url decode the signature');\n    }\n    const verified = await (0, verify_js_1.default)(alg, key, signature, data);\n    if (!verified) {\n        throw new errors_js_1.JWSSignatureVerificationFailed();\n    }\n    let payload;\n    if (b64) {\n        try {\n            payload = (0, base64url_js_1.decode)(jws.payload);\n        }\n        catch {\n            throw new errors_js_1.JWSInvalid('Failed to base64url decode the payload');\n        }\n    }\n    else if (typeof jws.payload === 'string') {\n        payload = buffer_utils_js_1.encoder.encode(jws.payload);\n    }\n    else {\n        payload = jws.payload;\n    }\n    const result = { payload };\n    if (jws.protected !== undefined) {\n        result.protectedHeader = parsedProt;\n    }\n    if (jws.header !== undefined) {\n        result.unprotectedHeader = jws.header;\n    }\n    if (resolvedKey) {\n        return { ...result, key };\n    }\n    return result;\n}\nexports.flattenedVerify = flattenedVerify;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.compactVerify = void 0;\nconst verify_js_1 = require(\"../flattened/verify.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nconst buffer_utils_js_1 = require(\"../../lib/buffer_utils.js\");\nasync function compactVerify(jws, key, options) {\n    if (jws instanceof Uint8Array) {\n        jws = buffer_utils_js_1.decoder.decode(jws);\n    }\n    if (typeof jws !== 'string') {\n        throw new errors_js_1.JWSInvalid('Compact JWS must be a string or Uint8Array');\n    }\n    const { 0: protectedHeader, 1: payload, 2: signature, length } = jws.split('.');\n    if (length !== 3) {\n        throw new errors_js_1.JWSInvalid('Invalid Compact JWS');\n    }\n    const verified = await (0, verify_js_1.flattenedVerify)({ payload, protected: protectedHeader, signature }, key, options);\n    const result = { payload: verified.payload, protectedHeader: verified.protectedHeader };\n    if (typeof key === 'function') {\n        return { ...result, key: verified.key };\n    }\n    return result;\n}\nexports.compactVerify = compactVerify;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generalVerify = void 0;\nconst verify_js_1 = require(\"../flattened/verify.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nconst is_object_js_1 = require(\"../../lib/is_object.js\");\nasync function generalVerify(jws, key, options) {\n    if (!(0, is_object_js_1.default)(jws)) {\n        throw new errors_js_1.JWSInvalid('General JWS must be an object');\n    }\n    if (!Array.isArray(jws.signatures) || !jws.signatures.every(is_object_js_1.default)) {\n        throw new errors_js_1.JWSInvalid('JWS Signatures missing or incorrect type');\n    }\n    for (const signature of jws.signatures) {\n        try {\n            return await (0, verify_js_1.flattenedVerify)({\n                header: signature.header,\n                payload: jws.payload,\n                protected: signature.protected,\n                signature: signature.signature,\n            }, key, options);\n        }\n        catch {\n        }\n    }\n    throw new errors_js_1.JWSSignatureVerificationFailed();\n}\nexports.generalVerify = generalVerify;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = (date) => Math.floor(date.getTime() / 1000);\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst minute = 60;\nconst hour = minute * 60;\nconst day = hour * 24;\nconst week = day * 7;\nconst year = day * 365.25;\nconst REGEX = /^(\\d+|\\d+\\.\\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;\nexports.default = (str) => {\n    const matched = REGEX.exec(str);\n    if (!matched) {\n        throw new TypeError('Invalid time period format');\n    }\n    const value = parseFloat(matched[1]);\n    const unit = matched[2].toLowerCase();\n    switch (unit) {\n        case 'sec':\n        case 'secs':\n        case 'second':\n        case 'seconds':\n        case 's':\n            return Math.round(value);\n        case 'minute':\n        case 'minutes':\n        case 'min':\n        case 'mins':\n        case 'm':\n            return Math.round(value * minute);\n        case 'hour':\n        case 'hours':\n        case 'hr':\n        case 'hrs':\n        case 'h':\n            return Math.round(value * hour);\n        case 'day':\n        case 'days':\n        case 'd':\n            return Math.round(value * day);\n        case 'week':\n        case 'weeks':\n        case 'w':\n            return Math.round(value * week);\n        default:\n            return Math.round(value * year);\n    }\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst errors_js_1 = require(\"../util/errors.js\");\nconst buffer_utils_js_1 = require(\"./buffer_utils.js\");\nconst epoch_js_1 = require(\"./epoch.js\");\nconst secs_js_1 = require(\"./secs.js\");\nconst is_object_js_1 = require(\"./is_object.js\");\nconst normalizeTyp = (value) => value.toLowerCase().replace(/^application\\//, '');\nconst checkAudiencePresence = (audPayload, audOption) => {\n    if (typeof audPayload === 'string') {\n        return audOption.includes(audPayload);\n    }\n    if (Array.isArray(audPayload)) {\n        return audOption.some(Set.prototype.has.bind(new Set(audPayload)));\n    }\n    return false;\n};\nexports.default = (protectedHeader, encodedPayload, options = {}) => {\n    const { typ } = options;\n    if (typ &&\n        (typeof protectedHeader.typ !== 'string' ||\n            normalizeTyp(protectedHeader.typ) !== normalizeTyp(typ))) {\n        throw new errors_js_1.JWTClaimValidationFailed('unexpected \"typ\" JWT header value', 'typ', 'check_failed');\n    }\n    let payload;\n    try {\n        payload = JSON.parse(buffer_utils_js_1.decoder.decode(encodedPayload));\n    }\n    catch {\n    }\n    if (!(0, is_object_js_1.default)(payload)) {\n        throw new errors_js_1.JWTInvalid('JWT Claims Set must be a top-level JSON object');\n    }\n    const { requiredClaims = [], issuer, subject, audience, maxTokenAge } = options;\n    if (maxTokenAge !== undefined)\n        requiredClaims.push('iat');\n    if (audience !== undefined)\n        requiredClaims.push('aud');\n    if (subject !== undefined)\n        requiredClaims.push('sub');\n    if (issuer !== undefined)\n        requiredClaims.push('iss');\n    for (const claim of new Set(requiredClaims.reverse())) {\n        if (!(claim in payload)) {\n            throw new errors_js_1.JWTClaimValidationFailed(`missing required \"${claim}\" claim`, claim, 'missing');\n        }\n    }\n    if (issuer && !(Array.isArray(issuer) ? issuer : [issuer]).includes(payload.iss)) {\n        throw new errors_js_1.JWTClaimValidationFailed('unexpected \"iss\" claim value', 'iss', 'check_failed');\n    }\n    if (subject && payload.sub !== subject) {\n        throw new errors_js_1.JWTClaimValidationFailed('unexpected \"sub\" claim value', 'sub', 'check_failed');\n    }\n    if (audience &&\n        !checkAudiencePresence(payload.aud, typeof audience === 'string' ? [audience] : audience)) {\n        throw new errors_js_1.JWTClaimValidationFailed('unexpected \"aud\" claim value', 'aud', 'check_failed');\n    }\n    let tolerance;\n    switch (typeof options.clockTolerance) {\n        case 'string':\n            tolerance = (0, secs_js_1.default)(options.clockTolerance);\n            break;\n        case 'number':\n            tolerance = options.clockTolerance;\n            break;\n        case 'undefined':\n            tolerance = 0;\n            break;\n        default:\n            throw new TypeError('Invalid clockTolerance option type');\n    }\n    const { currentDate } = options;\n    const now = (0, epoch_js_1.default)(currentDate || new Date());\n    if ((payload.iat !== undefined || maxTokenAge) && typeof payload.iat !== 'number') {\n        throw new errors_js_1.JWTClaimValidationFailed('\"iat\" claim must be a number', 'iat', 'invalid');\n    }\n    if (payload.nbf !== undefined) {\n        if (typeof payload.nbf !== 'number') {\n            throw new errors_js_1.JWTClaimValidationFailed('\"nbf\" claim must be a number', 'nbf', 'invalid');\n        }\n        if (payload.nbf > now + tolerance) {\n            throw new errors_js_1.JWTClaimValidationFailed('\"nbf\" claim timestamp check failed', 'nbf', 'check_failed');\n        }\n    }\n    if (payload.exp !== undefined) {\n        if (typeof payload.exp !== 'number') {\n            throw new errors_js_1.JWTClaimValidationFailed('\"exp\" claim must be a number', 'exp', 'invalid');\n        }\n        if (payload.exp <= now - tolerance) {\n            throw new errors_js_1.JWTExpired('\"exp\" claim timestamp check failed', 'exp', 'check_failed');\n        }\n    }\n    if (maxTokenAge) {\n        const age = now - payload.iat;\n        const max = typeof maxTokenAge === 'number' ? maxTokenAge : (0, secs_js_1.default)(maxTokenAge);\n        if (age - tolerance > max) {\n            throw new errors_js_1.JWTExpired('\"iat\" claim timestamp check failed (too far in the past)', 'iat', 'check_failed');\n        }\n        if (age < 0 - tolerance) {\n            throw new errors_js_1.JWTClaimValidationFailed('\"iat\" claim timestamp check failed (it should be in the past)', 'iat', 'check_failed');\n        }\n    }\n    return payload;\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.jwtVerify = void 0;\nconst verify_js_1 = require(\"../jws/compact/verify.js\");\nconst jwt_claims_set_js_1 = require(\"../lib/jwt_claims_set.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nasync function jwtVerify(jwt, key, options) {\n    var _a;\n    const verified = await (0, verify_js_1.compactVerify)(jwt, key, options);\n    if (((_a = verified.protectedHeader.crit) === null || _a === void 0 ? void 0 : _a.includes('b64')) && verified.protectedHeader.b64 === false) {\n        throw new errors_js_1.JWTInvalid('JWTs MUST NOT use unencoded payload');\n    }\n    const payload = (0, jwt_claims_set_js_1.default)(verified.protectedHeader, verified.payload, options);\n    const result = { payload, protectedHeader: verified.protectedHeader };\n    if (typeof key === 'function') {\n        return { ...result, key: verified.key };\n    }\n    return result;\n}\nexports.jwtVerify = jwtVerify;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.jwtDecrypt = void 0;\nconst decrypt_js_1 = require(\"../jwe/compact/decrypt.js\");\nconst jwt_claims_set_js_1 = require(\"../lib/jwt_claims_set.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nasync function jwtDecrypt(jwt, key, options) {\n    const decrypted = await (0, decrypt_js_1.compactDecrypt)(jwt, key, options);\n    const payload = (0, jwt_claims_set_js_1.default)(decrypted.protectedHeader, decrypted.plaintext, options);\n    const { protectedHeader } = decrypted;\n    if (protectedHeader.iss !== undefined && protectedHeader.iss !== payload.iss) {\n        throw new errors_js_1.JWTClaimValidationFailed('replicated \"iss\" claim header parameter mismatch', 'iss', 'mismatch');\n    }\n    if (protectedHeader.sub !== undefined && protectedHeader.sub !== payload.sub) {\n        throw new errors_js_1.JWTClaimValidationFailed('replicated \"sub\" claim header parameter mismatch', 'sub', 'mismatch');\n    }\n    if (protectedHeader.aud !== undefined &&\n        JSON.stringify(protectedHeader.aud) !== JSON.stringify(payload.aud)) {\n        throw new errors_js_1.JWTClaimValidationFailed('replicated \"aud\" claim header parameter mismatch', 'aud', 'mismatch');\n    }\n    const result = { payload, protectedHeader };\n    if (typeof key === 'function') {\n        return { ...result, key: decrypted.key };\n    }\n    return result;\n}\nexports.jwtDecrypt = jwtDecrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CompactEncrypt = void 0;\nconst encrypt_js_1 = require(\"../flattened/encrypt.js\");\nclass CompactEncrypt {\n    constructor(plaintext) {\n        this._flattened = new encrypt_js_1.FlattenedEncrypt(plaintext);\n    }\n    setContentEncryptionKey(cek) {\n        this._flattened.setContentEncryptionKey(cek);\n        return this;\n    }\n    setInitializationVector(iv) {\n        this._flattened.setInitializationVector(iv);\n        return this;\n    }\n    setProtectedHeader(protectedHeader) {\n        this._flattened.setProtectedHeader(protectedHeader);\n        return this;\n    }\n    setKeyManagementParameters(parameters) {\n        this._flattened.setKeyManagementParameters(parameters);\n        return this;\n    }\n    async encrypt(key, options) {\n        const jwe = await this._flattened.encrypt(key, options);\n        return [jwe.protected, jwe.encrypted_key, jwe.iv, jwe.ciphertext, jwe.tag].join('.');\n    }\n}\nexports.CompactEncrypt = CompactEncrypt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FlattenedSign = void 0;\nconst base64url_js_1 = require(\"../../runtime/base64url.js\");\nconst sign_js_1 = require(\"../../runtime/sign.js\");\nconst is_disjoint_js_1 = require(\"../../lib/is_disjoint.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nconst buffer_utils_js_1 = require(\"../../lib/buffer_utils.js\");\nconst check_key_type_js_1 = require(\"../../lib/check_key_type.js\");\nconst validate_crit_js_1 = require(\"../../lib/validate_crit.js\");\nclass FlattenedSign {\n    constructor(payload) {\n        if (!(payload instanceof Uint8Array)) {\n            throw new TypeError('payload must be an instance of Uint8Array');\n        }\n        this._payload = payload;\n    }\n    setProtectedHeader(protectedHeader) {\n        if (this._protectedHeader) {\n            throw new TypeError('setProtectedHeader can only be called once');\n        }\n        this._protectedHeader = protectedHeader;\n        return this;\n    }\n    setUnprotectedHeader(unprotectedHeader) {\n        if (this._unprotectedHeader) {\n            throw new TypeError('setUnprotectedHeader can only be called once');\n        }\n        this._unprotectedHeader = unprotectedHeader;\n        return this;\n    }\n    async sign(key, options) {\n        if (!this._protectedHeader && !this._unprotectedHeader) {\n            throw new errors_js_1.JWSInvalid('either setProtectedHeader or setUnprotectedHeader must be called before #sign()');\n        }\n        if (!(0, is_disjoint_js_1.default)(this._protectedHeader, this._unprotectedHeader)) {\n            throw new errors_js_1.JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');\n        }\n        const joseHeader = {\n            ...this._protectedHeader,\n            ...this._unprotectedHeader,\n        };\n        const extensions = (0, validate_crit_js_1.default)(errors_js_1.JWSInvalid, new Map([['b64', true]]), options === null || options === void 0 ? void 0 : options.crit, this._protectedHeader, joseHeader);\n        let b64 = true;\n        if (extensions.has('b64')) {\n            b64 = this._protectedHeader.b64;\n            if (typeof b64 !== 'boolean') {\n                throw new errors_js_1.JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n            }\n        }\n        const { alg } = joseHeader;\n        if (typeof alg !== 'string' || !alg) {\n            throw new errors_js_1.JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n        }\n        (0, check_key_type_js_1.default)(alg, key, 'sign');\n        let payload = this._payload;\n        if (b64) {\n            payload = buffer_utils_js_1.encoder.encode((0, base64url_js_1.encode)(payload));\n        }\n        let protectedHeader;\n        if (this._protectedHeader) {\n            protectedHeader = buffer_utils_js_1.encoder.encode((0, base64url_js_1.encode)(JSON.stringify(this._protectedHeader)));\n        }\n        else {\n            protectedHeader = buffer_utils_js_1.encoder.encode('');\n        }\n        const data = (0, buffer_utils_js_1.concat)(protectedHeader, buffer_utils_js_1.encoder.encode('.'), payload);\n        const signature = await (0, sign_js_1.default)(alg, key, data);\n        const jws = {\n            signature: (0, base64url_js_1.encode)(signature),\n            payload: '',\n        };\n        if (b64) {\n            jws.payload = buffer_utils_js_1.decoder.decode(payload);\n        }\n        if (this._unprotectedHeader) {\n            jws.header = this._unprotectedHeader;\n        }\n        if (this._protectedHeader) {\n            jws.protected = buffer_utils_js_1.decoder.decode(protectedHeader);\n        }\n        return jws;\n    }\n}\nexports.FlattenedSign = FlattenedSign;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CompactSign = void 0;\nconst sign_js_1 = require(\"../flattened/sign.js\");\nclass CompactSign {\n    constructor(payload) {\n        this._flattened = new sign_js_1.FlattenedSign(payload);\n    }\n    setProtectedHeader(protectedHeader) {\n        this._flattened.setProtectedHeader(protectedHeader);\n        return this;\n    }\n    async sign(key, options) {\n        const jws = await this._flattened.sign(key, options);\n        if (jws.payload === undefined) {\n            throw new TypeError('use the flattened module for creating JWS with b64: false');\n        }\n        return `${jws.protected}.${jws.payload}.${jws.signature}`;\n    }\n}\nexports.CompactSign = CompactSign;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GeneralSign = void 0;\nconst sign_js_1 = require(\"../flattened/sign.js\");\nconst errors_js_1 = require(\"../../util/errors.js\");\nclass IndividualSignature {\n    constructor(sig, key, options) {\n        this.parent = sig;\n        this.key = key;\n        this.options = options;\n    }\n    setProtectedHeader(protectedHeader) {\n        if (this.protectedHeader) {\n            throw new TypeError('setProtectedHeader can only be called once');\n        }\n        this.protectedHeader = protectedHeader;\n        return this;\n    }\n    setUnprotectedHeader(unprotectedHeader) {\n        if (this.unprotectedHeader) {\n            throw new TypeError('setUnprotectedHeader can only be called once');\n        }\n        this.unprotectedHeader = unprotectedHeader;\n        return this;\n    }\n    addSignature(...args) {\n        return this.parent.addSignature(...args);\n    }\n    sign(...args) {\n        return this.parent.sign(...args);\n    }\n    done() {\n        return this.parent;\n    }\n}\nclass GeneralSign {\n    constructor(payload) {\n        this._signatures = [];\n        this._payload = payload;\n    }\n    addSignature(key, options) {\n        const signature = new IndividualSignature(this, key, options);\n        this._signatures.push(signature);\n        return signature;\n    }\n    async sign() {\n        if (!this._signatures.length) {\n            throw new errors_js_1.JWSInvalid('at least one signature must be added');\n        }\n        const jws = {\n            signatures: [],\n            payload: '',\n        };\n        for (let i = 0; i < this._signatures.length; i++) {\n            const signature = this._signatures[i];\n            const flattened = new sign_js_1.FlattenedSign(this._payload);\n            flattened.setProtectedHeader(signature.protectedHeader);\n            flattened.setUnprotectedHeader(signature.unprotectedHeader);\n            const { payload, ...rest } = await flattened.sign(signature.key, signature.options);\n            if (i === 0) {\n                jws.payload = payload;\n            }\n            else if (jws.payload !== payload) {\n                throw new errors_js_1.JWSInvalid('inconsistent use of JWS Unencoded Payload (RFC7797)');\n            }\n            jws.signatures.push(rest);\n        }\n        return jws;\n    }\n}\nexports.GeneralSign = GeneralSign;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ProduceJWT = void 0;\nconst epoch_js_1 = require(\"../lib/epoch.js\");\nconst is_object_js_1 = require(\"../lib/is_object.js\");\nconst secs_js_1 = require(\"../lib/secs.js\");\nclass ProduceJWT {\n    constructor(payload) {\n        if (!(0, is_object_js_1.default)(payload)) {\n            throw new TypeError('JWT Claims Set MUST be an object');\n        }\n        this._payload = payload;\n    }\n    setIssuer(issuer) {\n        this._payload = { ...this._payload, iss: issuer };\n        return this;\n    }\n    setSubject(subject) {\n        this._payload = { ...this._payload, sub: subject };\n        return this;\n    }\n    setAudience(audience) {\n        this._payload = { ...this._payload, aud: audience };\n        return this;\n    }\n    setJti(jwtId) {\n        this._payload = { ...this._payload, jti: jwtId };\n        return this;\n    }\n    setNotBefore(input) {\n        if (typeof input === 'number') {\n            this._payload = { ...this._payload, nbf: input };\n        }\n        else {\n            this._payload = { ...this._payload, nbf: (0, epoch_js_1.default)(new Date()) + (0, secs_js_1.default)(input) };\n        }\n        return this;\n    }\n    setExpirationTime(input) {\n        if (typeof input === 'number') {\n            this._payload = { ...this._payload, exp: input };\n        }\n        else {\n            this._payload = { ...this._payload, exp: (0, epoch_js_1.default)(new Date()) + (0, secs_js_1.default)(input) };\n        }\n        return this;\n    }\n    setIssuedAt(input) {\n        if (typeof input === 'undefined') {\n            this._payload = { ...this._payload, iat: (0, epoch_js_1.default)(new Date()) };\n        }\n        else {\n            this._payload = { ...this._payload, iat: input };\n        }\n        return this;\n    }\n}\nexports.ProduceJWT = ProduceJWT;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SignJWT = void 0;\nconst sign_js_1 = require(\"../jws/compact/sign.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst produce_js_1 = require(\"./produce.js\");\nclass SignJWT extends produce_js_1.ProduceJWT {\n    setProtectedHeader(protectedHeader) {\n        this._protectedHeader = protectedHeader;\n        return this;\n    }\n    async sign(key, options) {\n        var _a;\n        const sig = new sign_js_1.CompactSign(buffer_utils_js_1.encoder.encode(JSON.stringify(this._payload)));\n        sig.setProtectedHeader(this._protectedHeader);\n        if (Array.isArray((_a = this._protectedHeader) === null || _a === void 0 ? void 0 : _a.crit) &&\n            this._protectedHeader.crit.includes('b64') &&\n            this._protectedHeader.b64 === false) {\n            throw new errors_js_1.JWTInvalid('JWTs MUST NOT use unencoded payload');\n        }\n        return sig.sign(key, options);\n    }\n}\nexports.SignJWT = SignJWT;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EncryptJWT = void 0;\nconst encrypt_js_1 = require(\"../jwe/compact/encrypt.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst produce_js_1 = require(\"./produce.js\");\nclass EncryptJWT extends produce_js_1.ProduceJWT {\n    setProtectedHeader(protectedHeader) {\n        if (this._protectedHeader) {\n            throw new TypeError('setProtectedHeader can only be called once');\n        }\n        this._protectedHeader = protectedHeader;\n        return this;\n    }\n    setKeyManagementParameters(parameters) {\n        if (this._keyManagementParameters) {\n            throw new TypeError('setKeyManagementParameters can only be called once');\n        }\n        this._keyManagementParameters = parameters;\n        return this;\n    }\n    setContentEncryptionKey(cek) {\n        if (this._cek) {\n            throw new TypeError('setContentEncryptionKey can only be called once');\n        }\n        this._cek = cek;\n        return this;\n    }\n    setInitializationVector(iv) {\n        if (this._iv) {\n            throw new TypeError('setInitializationVector can only be called once');\n        }\n        this._iv = iv;\n        return this;\n    }\n    replicateIssuerAsHeader() {\n        this._replicateIssuerAsHeader = true;\n        return this;\n    }\n    replicateSubjectAsHeader() {\n        this._replicateSubjectAsHeader = true;\n        return this;\n    }\n    replicateAudienceAsHeader() {\n        this._replicateAudienceAsHeader = true;\n        return this;\n    }\n    async encrypt(key, options) {\n        const enc = new encrypt_js_1.CompactEncrypt(buffer_utils_js_1.encoder.encode(JSON.stringify(this._payload)));\n        if (this._replicateIssuerAsHeader) {\n            this._protectedHeader = { ...this._protectedHeader, iss: this._payload.iss };\n        }\n        if (this._replicateSubjectAsHeader) {\n            this._protectedHeader = { ...this._protectedHeader, sub: this._payload.sub };\n        }\n        if (this._replicateAudienceAsHeader) {\n            this._protectedHeader = { ...this._protectedHeader, aud: this._payload.aud };\n        }\n        enc.setProtectedHeader(this._protectedHeader);\n        if (this._iv) {\n            enc.setInitializationVector(this._iv);\n        }\n        if (this._cek) {\n            enc.setContentEncryptionKey(this._cek);\n        }\n        if (this._keyManagementParameters) {\n            enc.setKeyManagementParameters(this._keyManagementParameters);\n        }\n        return enc.encrypt(key, options);\n    }\n}\nexports.EncryptJWT = EncryptJWT;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.calculateJwkThumbprintUri = exports.calculateJwkThumbprint = void 0;\nconst digest_js_1 = require(\"../runtime/digest.js\");\nconst base64url_js_1 = require(\"../runtime/base64url.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst is_object_js_1 = require(\"../lib/is_object.js\");\nconst check = (value, description) => {\n    if (typeof value !== 'string' || !value) {\n        throw new errors_js_1.JWKInvalid(`${description} missing or invalid`);\n    }\n};\nasync function calculateJwkThumbprint(jwk, digestAlgorithm) {\n    if (!(0, is_object_js_1.default)(jwk)) {\n        throw new TypeError('JWK must be an object');\n    }\n    digestAlgorithm !== null && digestAlgorithm !== void 0 ? digestAlgorithm : (digestAlgorithm = 'sha256');\n    if (digestAlgorithm !== 'sha256' &&\n        digestAlgorithm !== 'sha384' &&\n        digestAlgorithm !== 'sha512') {\n        throw new TypeError('digestAlgorithm must one of \"sha256\", \"sha384\", or \"sha512\"');\n    }\n    let components;\n    switch (jwk.kty) {\n        case 'EC':\n            check(jwk.crv, '\"crv\" (Curve) Parameter');\n            check(jwk.x, '\"x\" (X Coordinate) Parameter');\n            check(jwk.y, '\"y\" (Y Coordinate) Parameter');\n            components = { crv: jwk.crv, kty: jwk.kty, x: jwk.x, y: jwk.y };\n            break;\n        case 'OKP':\n            check(jwk.crv, '\"crv\" (Subtype of Key Pair) Parameter');\n            check(jwk.x, '\"x\" (Public Key) Parameter');\n            components = { crv: jwk.crv, kty: jwk.kty, x: jwk.x };\n            break;\n        case 'RSA':\n            check(jwk.e, '\"e\" (Exponent) Parameter');\n            check(jwk.n, '\"n\" (Modulus) Parameter');\n            components = { e: jwk.e, kty: jwk.kty, n: jwk.n };\n            break;\n        case 'oct':\n            check(jwk.k, '\"k\" (Key Value) Parameter');\n            components = { k: jwk.k, kty: jwk.kty };\n            break;\n        default:\n            throw new errors_js_1.JOSENotSupported('\"kty\" (Key Type) Parameter missing or unsupported');\n    }\n    const data = buffer_utils_js_1.encoder.encode(JSON.stringify(components));\n    return (0, base64url_js_1.encode)(await (0, digest_js_1.default)(digestAlgorithm, data));\n}\nexports.calculateJwkThumbprint = calculateJwkThumbprint;\nasync function calculateJwkThumbprintUri(jwk, digestAlgorithm) {\n    digestAlgorithm !== null && digestAlgorithm !== void 0 ? digestAlgorithm : (digestAlgorithm = 'sha256');\n    const thumbprint = await calculateJwkThumbprint(jwk, digestAlgorithm);\n    return `urn:ietf:params:oauth:jwk-thumbprint:sha-${digestAlgorithm.slice(-3)}:${thumbprint}`;\n}\nexports.calculateJwkThumbprintUri = calculateJwkThumbprintUri;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EmbeddedJWK = void 0;\nconst import_js_1 = require(\"../key/import.js\");\nconst is_object_js_1 = require(\"../lib/is_object.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nasync function EmbeddedJWK(protectedHeader, token) {\n    const joseHeader = {\n        ...protectedHeader,\n        ...token === null || token === void 0 ? void 0 : token.header,\n    };\n    if (!(0, is_object_js_1.default)(joseHeader.jwk)) {\n        throw new errors_js_1.JWSInvalid('\"jwk\" (JSON Web Key) Header Parameter must be a JSON object');\n    }\n    const key = await (0, import_js_1.importJWK)({ ...joseHeader.jwk, ext: true }, joseHeader.alg, true);\n    if (key instanceof Uint8Array || key.type !== 'public') {\n        throw new errors_js_1.JWSInvalid('\"jwk\" (JSON Web Key) Header Parameter must be a public key');\n    }\n    return key;\n}\nexports.EmbeddedJWK = EmbeddedJWK;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createLocalJWKSet = exports.LocalJWKSet = exports.isJWKSLike = void 0;\nconst import_js_1 = require(\"../key/import.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst is_object_js_1 = require(\"../lib/is_object.js\");\nfunction getKtyFromAlg(alg) {\n    switch (typeof alg === 'string' && alg.slice(0, 2)) {\n        case 'RS':\n        case 'PS':\n            return 'RSA';\n        case 'ES':\n            return 'EC';\n        case 'Ed':\n            return 'OKP';\n        default:\n            throw new errors_js_1.JOSENotSupported('Unsupported \"alg\" value for a JSON Web Key Set');\n    }\n}\nfunction isJWKSLike(jwks) {\n    return (jwks &&\n        typeof jwks === 'object' &&\n        Array.isArray(jwks.keys) &&\n        jwks.keys.every(isJWKLike));\n}\nexports.isJWKSLike = isJWKSLike;\nfunction isJWKLike(key) {\n    return (0, is_object_js_1.default)(key);\n}\nfunction clone(obj) {\n    if (typeof structuredClone === 'function') {\n        return structuredClone(obj);\n    }\n    return JSON.parse(JSON.stringify(obj));\n}\nclass LocalJWKSet {\n    constructor(jwks) {\n        this._cached = new WeakMap();\n        if (!isJWKSLike(jwks)) {\n            throw new errors_js_1.JWKSInvalid('JSON Web Key Set malformed');\n        }\n        this._jwks = clone(jwks);\n    }\n    async getKey(protectedHeader, token) {\n        const { alg, kid } = { ...protectedHeader, ...token === null || token === void 0 ? void 0 : token.header };\n        const kty = getKtyFromAlg(alg);\n        const candidates = this._jwks.keys.filter((jwk) => {\n            let candidate = kty === jwk.kty;\n            if (candidate && typeof kid === 'string') {\n                candidate = kid === jwk.kid;\n            }\n            if (candidate && typeof jwk.alg === 'string') {\n                candidate = alg === jwk.alg;\n            }\n            if (candidate && typeof jwk.use === 'string') {\n                candidate = jwk.use === 'sig';\n            }\n            if (candidate && Array.isArray(jwk.key_ops)) {\n                candidate = jwk.key_ops.includes('verify');\n            }\n            if (candidate && alg === 'EdDSA') {\n                candidate = jwk.crv === 'Ed25519' || jwk.crv === 'Ed448';\n            }\n            if (candidate) {\n                switch (alg) {\n                    case 'ES256':\n                        candidate = jwk.crv === 'P-256';\n                        break;\n                    case 'ES256K':\n                        candidate = jwk.crv === 'secp256k1';\n                        break;\n                    case 'ES384':\n                        candidate = jwk.crv === 'P-384';\n                        break;\n                    case 'ES512':\n                        candidate = jwk.crv === 'P-521';\n                        break;\n                }\n            }\n            return candidate;\n        });\n        const { 0: jwk, length } = candidates;\n        if (length === 0) {\n            throw new errors_js_1.JWKSNoMatchingKey();\n        }\n        else if (length !== 1) {\n            const error = new errors_js_1.JWKSMultipleMatchingKeys();\n            const { _cached } = this;\n            error[Symbol.asyncIterator] = async function* () {\n                for (const jwk of candidates) {\n                    try {\n                        yield await importWithAlgCache(_cached, jwk, alg);\n                    }\n                    catch {\n                        continue;\n                    }\n                }\n            };\n            throw error;\n        }\n        return importWithAlgCache(this._cached, jwk, alg);\n    }\n}\nexports.LocalJWKSet = LocalJWKSet;\nasync function importWithAlgCache(cache, jwk, alg) {\n    const cached = cache.get(jwk) || cache.set(jwk, {}).get(jwk);\n    if (cached[alg] === undefined) {\n        const key = await (0, import_js_1.importJWK)({ ...jwk, ext: true }, alg);\n        if (key instanceof Uint8Array || key.type !== 'public') {\n            throw new errors_js_1.JWKSInvalid('JSON Web Key Set members must be public keys');\n        }\n        cached[alg] = key;\n    }\n    return cached[alg];\n}\nfunction createLocalJWKSet(jwks) {\n    const set = new LocalJWKSet(jwks);\n    return async function (protectedHeader, token) {\n        return set.getKey(protectedHeader, token);\n    };\n}\nexports.createLocalJWKSet = createLocalJWKSet;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst http = require(\"http\");\nconst https = require(\"https\");\nconst events_1 = require(\"events\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst fetchJwks = async (url, timeout, options) => {\n    let get;\n    switch (url.protocol) {\n        case 'https:':\n            get = https.get;\n            break;\n        case 'http:':\n            get = http.get;\n            break;\n        default:\n            throw new TypeError('Unsupported URL protocol.');\n    }\n    const { agent, headers } = options;\n    const req = get(url.href, {\n        agent,\n        timeout,\n        headers,\n    });\n    const [response] = (await Promise.race([(0, events_1.once)(req, 'response'), (0, events_1.once)(req, 'timeout')]));\n    if (!response) {\n        req.destroy();\n        throw new errors_js_1.JWKSTimeout();\n    }\n    if (response.statusCode !== 200) {\n        throw new errors_js_1.JOSEError('Expected 200 OK from the JSON Web Key Set HTTP response');\n    }\n    const parts = [];\n    for await (const part of response) {\n        parts.push(part);\n    }\n    try {\n        return JSON.parse(buffer_utils_js_1.decoder.decode((0, buffer_utils_js_1.concat)(...parts)));\n    }\n    catch {\n        throw new errors_js_1.JOSEError('Failed to parse the JSON Web Key Set HTTP response as JSON');\n    }\n};\nexports.default = fetchJwks;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createRemoteJWKSet = void 0;\nconst fetch_jwks_js_1 = require(\"../runtime/fetch_jwks.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst local_js_1 = require(\"./local.js\");\nfunction isCloudflareWorkers() {\n    return (typeof WebSocketPair !== 'undefined' ||\n        (typeof navigator !== 'undefined' && navigator.userAgent === 'Cloudflare-Workers') ||\n        (typeof EdgeRuntime !== 'undefined' && EdgeRuntime === 'vercel'));\n}\nclass RemoteJWKSet extends local_js_1.LocalJWKSet {\n    constructor(url, options) {\n        super({ keys: [] });\n        this._jwks = undefined;\n        if (!(url instanceof URL)) {\n            throw new TypeError('url must be an instance of URL');\n        }\n        this._url = new URL(url.href);\n        this._options = { agent: options === null || options === void 0 ? void 0 : options.agent, headers: options === null || options === void 0 ? void 0 : options.headers };\n        this._timeoutDuration =\n            typeof (options === null || options === void 0 ? void 0 : options.timeoutDuration) === 'number' ? options === null || options === void 0 ? void 0 : options.timeoutDuration : 5000;\n        this._cooldownDuration =\n            typeof (options === null || options === void 0 ? void 0 : options.cooldownDuration) === 'number' ? options === null || options === void 0 ? void 0 : options.cooldownDuration : 30000;\n        this._cacheMaxAge = typeof (options === null || options === void 0 ? void 0 : options.cacheMaxAge) === 'number' ? options === null || options === void 0 ? void 0 : options.cacheMaxAge : 600000;\n    }\n    coolingDown() {\n        return typeof this._jwksTimestamp === 'number'\n            ? Date.now() < this._jwksTimestamp + this._cooldownDuration\n            : false;\n    }\n    fresh() {\n        return typeof this._jwksTimestamp === 'number'\n            ? Date.now() < this._jwksTimestamp + this._cacheMaxAge\n            : false;\n    }\n    async getKey(protectedHeader, token) {\n        if (!this._jwks || !this.fresh()) {\n            await this.reload();\n        }\n        try {\n            return await super.getKey(protectedHeader, token);\n        }\n        catch (err) {\n            if (err instanceof errors_js_1.JWKSNoMatchingKey) {\n                if (this.coolingDown() === false) {\n                    await this.reload();\n                    return super.getKey(protectedHeader, token);\n                }\n            }\n            throw err;\n        }\n    }\n    async reload() {\n        if (this._pendingFetch && isCloudflareWorkers()) {\n            this._pendingFetch = undefined;\n        }\n        this._pendingFetch || (this._pendingFetch = (0, fetch_jwks_js_1.default)(this._url, this._timeoutDuration, this._options)\n            .then((json) => {\n            if (!(0, local_js_1.isJWKSLike)(json)) {\n                throw new errors_js_1.JWKSInvalid('JSON Web Key Set malformed');\n            }\n            this._jwks = { keys: json.keys };\n            this._jwksTimestamp = Date.now();\n            this._pendingFetch = undefined;\n        })\n            .catch((err) => {\n            this._pendingFetch = undefined;\n            throw err;\n        }));\n        await this._pendingFetch;\n    }\n}\nfunction createRemoteJWKSet(url, options) {\n    const set = new RemoteJWKSet(url, options);\n    return async function (protectedHeader, token) {\n        return set.getKey(protectedHeader, token);\n    };\n}\nexports.createRemoteJWKSet = createRemoteJWKSet;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UnsecuredJWT = void 0;\nconst base64url = require(\"../runtime/base64url.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst jwt_claims_set_js_1 = require(\"../lib/jwt_claims_set.js\");\nconst produce_js_1 = require(\"./produce.js\");\nclass UnsecuredJWT extends produce_js_1.ProduceJWT {\n    encode() {\n        const header = base64url.encode(JSON.stringify({ alg: 'none' }));\n        const payload = base64url.encode(JSON.stringify(this._payload));\n        return `${header}.${payload}.`;\n    }\n    static decode(jwt, options) {\n        if (typeof jwt !== 'string') {\n            throw new errors_js_1.JWTInvalid('Unsecured JWT must be a string');\n        }\n        const { 0: encodedHeader, 1: encodedPayload, 2: signature, length } = jwt.split('.');\n        if (length !== 3 || signature !== '') {\n            throw new errors_js_1.JWTInvalid('Invalid Unsecured JWT');\n        }\n        let header;\n        try {\n            header = JSON.parse(buffer_utils_js_1.decoder.decode(base64url.decode(encodedHeader)));\n            if (header.alg !== 'none')\n                throw new Error();\n        }\n        catch {\n            throw new errors_js_1.JWTInvalid('Invalid Unsecured JWT');\n        }\n        const payload = (0, jwt_claims_set_js_1.default)(header, base64url.decode(encodedPayload), options);\n        return { payload, header };\n    }\n}\nexports.UnsecuredJWT = UnsecuredJWT;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decode = exports.encode = void 0;\nconst base64url = require(\"../runtime/base64url.js\");\nexports.encode = base64url.encode;\nexports.decode = base64url.decode;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeProtectedHeader = void 0;\nconst base64url_js_1 = require(\"./base64url.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst is_object_js_1 = require(\"../lib/is_object.js\");\nfunction decodeProtectedHeader(token) {\n    let protectedB64u;\n    if (typeof token === 'string') {\n        const parts = token.split('.');\n        if (parts.length === 3 || parts.length === 5) {\n            ;\n            [protectedB64u] = parts;\n        }\n    }\n    else if (typeof token === 'object' && token) {\n        if ('protected' in token) {\n            protectedB64u = token.protected;\n        }\n        else {\n            throw new TypeError('Token does not contain a Protected Header');\n        }\n    }\n    try {\n        if (typeof protectedB64u !== 'string' || !protectedB64u) {\n            throw new Error();\n        }\n        const result = JSON.parse(buffer_utils_js_1.decoder.decode((0, base64url_js_1.decode)(protectedB64u)));\n        if (!(0, is_object_js_1.default)(result)) {\n            throw new Error();\n        }\n        return result;\n    }\n    catch {\n        throw new TypeError('Invalid Token or Protected Header formatting');\n    }\n}\nexports.decodeProtectedHeader = decodeProtectedHeader;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeJwt = void 0;\nconst base64url_js_1 = require(\"./base64url.js\");\nconst buffer_utils_js_1 = require(\"../lib/buffer_utils.js\");\nconst is_object_js_1 = require(\"../lib/is_object.js\");\nconst errors_js_1 = require(\"./errors.js\");\nfunction decodeJwt(jwt) {\n    if (typeof jwt !== 'string')\n        throw new errors_js_1.JWTInvalid('JWTs must use Compact JWS serialization, JWT must be a string');\n    const { 1: payload, length } = jwt.split('.');\n    if (length === 5)\n        throw new errors_js_1.JWTInvalid('Only JWTs using Compact JWS serialization can be decoded');\n    if (length !== 3)\n        throw new errors_js_1.JWTInvalid('Invalid JWT');\n    if (!payload)\n        throw new errors_js_1.JWTInvalid('JWTs must contain a payload');\n    let decoded;\n    try {\n        decoded = (0, base64url_js_1.decode)(payload);\n    }\n    catch {\n        throw new errors_js_1.JWTInvalid('Failed to base64url decode the payload');\n    }\n    let result;\n    try {\n        result = JSON.parse(buffer_utils_js_1.decoder.decode(decoded));\n    }\n    catch {\n        throw new errors_js_1.JWTInvalid('Failed to parse the decoded payload as JSON');\n    }\n    if (!(0, is_object_js_1.default)(result))\n        throw new errors_js_1.JWTInvalid('Invalid JWT Claims Set');\n    return result;\n}\nexports.decodeJwt = decodeJwt;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generateKeyPair = exports.generateSecret = void 0;\nconst crypto_1 = require(\"crypto\");\nconst util_1 = require(\"util\");\nconst random_js_1 = require(\"./random.js\");\nconst check_modulus_length_js_1 = require(\"./check_modulus_length.js\");\nconst errors_js_1 = require(\"../util/errors.js\");\nconst generate = (0, util_1.promisify)(crypto_1.generateKeyPair);\nasync function generateSecret(alg, options) {\n    let length;\n    switch (alg) {\n        case 'HS256':\n        case 'HS384':\n        case 'HS512':\n        case 'A128CBC-HS256':\n        case 'A192CBC-HS384':\n        case 'A256CBC-HS512':\n            length = parseInt(alg.slice(-3), 10);\n            break;\n        case 'A128KW':\n        case 'A192KW':\n        case 'A256KW':\n        case 'A128GCMKW':\n        case 'A192GCMKW':\n        case 'A256GCMKW':\n        case 'A128GCM':\n        case 'A192GCM':\n        case 'A256GCM':\n            length = parseInt(alg.slice(1, 4), 10);\n            break;\n        default:\n            throw new errors_js_1.JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n    }\n    return (0, crypto_1.createSecretKey)((0, random_js_1.default)(new Uint8Array(length >> 3)));\n}\nexports.generateSecret = generateSecret;\nasync function generateKeyPair(alg, options) {\n    var _a, _b;\n    switch (alg) {\n        case 'RS256':\n        case 'RS384':\n        case 'RS512':\n        case 'PS256':\n        case 'PS384':\n        case 'PS512':\n        case 'RSA-OAEP':\n        case 'RSA-OAEP-256':\n        case 'RSA-OAEP-384':\n        case 'RSA-OAEP-512':\n        case 'RSA1_5': {\n            const modulusLength = (_a = options === null || options === void 0 ? void 0 : options.modulusLength) !== null && _a !== void 0 ? _a : 2048;\n            if (typeof modulusLength !== 'number' || modulusLength < 2048) {\n                throw new errors_js_1.JOSENotSupported('Invalid or unsupported modulusLength option provided, 2048 bits or larger keys must be used');\n            }\n            const keypair = await generate('rsa', {\n                modulusLength,\n                publicExponent: 0x10001,\n            });\n            (0, check_modulus_length_js_1.setModulusLength)(keypair.privateKey, modulusLength);\n            (0, check_modulus_length_js_1.setModulusLength)(keypair.publicKey, modulusLength);\n            return keypair;\n        }\n        case 'ES256':\n            return generate('ec', { namedCurve: 'P-256' });\n        case 'ES256K':\n            return generate('ec', { namedCurve: 'secp256k1' });\n        case 'ES384':\n            return generate('ec', { namedCurve: 'P-384' });\n        case 'ES512':\n            return generate('ec', { namedCurve: 'P-521' });\n        case 'EdDSA': {\n            switch (options === null || options === void 0 ? void 0 : options.crv) {\n                case undefined:\n                case 'Ed25519':\n                    return generate('ed25519');\n                case 'Ed448':\n                    return generate('ed448');\n                default:\n                    throw new errors_js_1.JOSENotSupported('Invalid or unsupported crv option provided, supported values are Ed25519 and Ed448');\n            }\n        }\n        case 'ECDH-ES':\n        case 'ECDH-ES+A128KW':\n        case 'ECDH-ES+A192KW':\n        case 'ECDH-ES+A256KW':\n            const crv = (_b = options === null || options === void 0 ? void 0 : options.crv) !== null && _b !== void 0 ? _b : 'P-256';\n            switch (crv) {\n                case undefined:\n                case 'P-256':\n                case 'P-384':\n                case 'P-521':\n                    return generate('ec', { namedCurve: crv });\n                case 'X25519':\n                    return generate('x25519');\n                case 'X448':\n                    return generate('x448');\n                default:\n                    throw new errors_js_1.JOSENotSupported('Invalid or unsupported crv option provided, supported values are P-256, P-384, P-521, X25519, and X448');\n            }\n        default:\n            throw new errors_js_1.JOSENotSupported('Invalid or unsupported JWK \"alg\" (Algorithm) Parameter value');\n    }\n}\nexports.generateKeyPair = generateKeyPair;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generateKeyPair = void 0;\nconst generate_js_1 = require(\"../runtime/generate.js\");\nasync function generateKeyPair(alg, options) {\n    return (0, generate_js_1.generateKeyPair)(alg, options);\n}\nexports.generateKeyPair = generateKeyPair;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generateSecret = void 0;\nconst generate_js_1 = require(\"../runtime/generate.js\");\nasync function generateSecret(alg, options) {\n    return (0, generate_js_1.generateSecret)(alg, options);\n}\nexports.generateSecret = generateSecret;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = 'node:crypto';\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst runtime_js_1 = require(\"../runtime/runtime.js\");\nexports.default = runtime_js_1.default;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cryptoRuntime = exports.base64url = exports.generateSecret = exports.generateKeyPair = exports.errors = exports.decodeJwt = exports.decodeProtectedHeader = exports.importJWK = exports.importX509 = exports.importPKCS8 = exports.importSPKI = exports.exportJWK = exports.exportSPKI = exports.exportPKCS8 = exports.UnsecuredJWT = exports.createRemoteJWKSet = exports.createLocalJWKSet = exports.EmbeddedJWK = exports.calculateJwkThumbprintUri = exports.calculateJwkThumbprint = exports.EncryptJWT = exports.SignJWT = exports.GeneralSign = exports.FlattenedSign = exports.CompactSign = exports.FlattenedEncrypt = exports.CompactEncrypt = exports.jwtDecrypt = exports.jwtVerify = exports.generalVerify = exports.flattenedVerify = exports.compactVerify = exports.GeneralEncrypt = exports.generalDecrypt = exports.flattenedDecrypt = exports.compactDecrypt = void 0;\nvar decrypt_js_1 = require(\"./jwe/compact/decrypt.js\");\nObject.defineProperty(exports, \"compactDecrypt\", { enumerable: true, get: function () { return decrypt_js_1.compactDecrypt; } });\nvar decrypt_js_2 = require(\"./jwe/flattened/decrypt.js\");\nObject.defineProperty(exports, \"flattenedDecrypt\", { enumerable: true, get: function () { return decrypt_js_2.flattenedDecrypt; } });\nvar decrypt_js_3 = require(\"./jwe/general/decrypt.js\");\nObject.defineProperty(exports, \"generalDecrypt\", { enumerable: true, get: function () { return decrypt_js_3.generalDecrypt; } });\nvar encrypt_js_1 = require(\"./jwe/general/encrypt.js\");\nObject.defineProperty(exports, \"GeneralEncrypt\", { enumerable: true, get: function () { return encrypt_js_1.GeneralEncrypt; } });\nvar verify_js_1 = require(\"./jws/compact/verify.js\");\nObject.defineProperty(exports, \"compactVerify\", { enumerable: true, get: function () { return verify_js_1.compactVerify; } });\nvar verify_js_2 = require(\"./jws/flattened/verify.js\");\nObject.defineProperty(exports, \"flattenedVerify\", { enumerable: true, get: function () { return verify_js_2.flattenedVerify; } });\nvar verify_js_3 = require(\"./jws/general/verify.js\");\nObject.defineProperty(exports, \"generalVerify\", { enumerable: true, get: function () { return verify_js_3.generalVerify; } });\nvar verify_js_4 = require(\"./jwt/verify.js\");\nObject.defineProperty(exports, \"jwtVerify\", { enumerable: true, get: function () { return verify_js_4.jwtVerify; } });\nvar decrypt_js_4 = require(\"./jwt/decrypt.js\");\nObject.defineProperty(exports, \"jwtDecrypt\", { enumerable: true, get: function () { return decrypt_js_4.jwtDecrypt; } });\nvar encrypt_js_2 = require(\"./jwe/compact/encrypt.js\");\nObject.defineProperty(exports, \"CompactEncrypt\", { enumerable: true, get: function () { return encrypt_js_2.CompactEncrypt; } });\nvar encrypt_js_3 = require(\"./jwe/flattened/encrypt.js\");\nObject.defineProperty(exports, \"FlattenedEncrypt\", { enumerable: true, get: function () { return encrypt_js_3.FlattenedEncrypt; } });\nvar sign_js_1 = require(\"./jws/compact/sign.js\");\nObject.defineProperty(exports, \"CompactSign\", { enumerable: true, get: function () { return sign_js_1.CompactSign; } });\nvar sign_js_2 = require(\"./jws/flattened/sign.js\");\nObject.defineProperty(exports, \"FlattenedSign\", { enumerable: true, get: function () { return sign_js_2.FlattenedSign; } });\nvar sign_js_3 = require(\"./jws/general/sign.js\");\nObject.defineProperty(exports, \"GeneralSign\", { enumerable: true, get: function () { return sign_js_3.GeneralSign; } });\nvar sign_js_4 = require(\"./jwt/sign.js\");\nObject.defineProperty(exports, \"SignJWT\", { enumerable: true, get: function () { return sign_js_4.SignJWT; } });\nvar encrypt_js_4 = require(\"./jwt/encrypt.js\");\nObject.defineProperty(exports, \"EncryptJWT\", { enumerable: true, get: function () { return encrypt_js_4.EncryptJWT; } });\nvar thumbprint_js_1 = require(\"./jwk/thumbprint.js\");\nObject.defineProperty(exports, \"calculateJwkThumbprint\", { enumerable: true, get: function () { return thumbprint_js_1.calculateJwkThumbprint; } });\nObject.defineProperty(exports, \"calculateJwkThumbprintUri\", { enumerable: true, get: function () { return thumbprint_js_1.calculateJwkThumbprintUri; } });\nvar embedded_js_1 = require(\"./jwk/embedded.js\");\nObject.defineProperty(exports, \"EmbeddedJWK\", { enumerable: true, get: function () { return embedded_js_1.EmbeddedJWK; } });\nvar local_js_1 = require(\"./jwks/local.js\");\nObject.defineProperty(exports, \"createLocalJWKSet\", { enumerable: true, get: function () { return local_js_1.createLocalJWKSet; } });\nvar remote_js_1 = require(\"./jwks/remote.js\");\nObject.defineProperty(exports, \"createRemoteJWKSet\", { enumerable: true, get: function () { return remote_js_1.createRemoteJWKSet; } });\nvar unsecured_js_1 = require(\"./jwt/unsecured.js\");\nObject.defineProperty(exports, \"UnsecuredJWT\", { enumerable: true, get: function () { return unsecured_js_1.UnsecuredJWT; } });\nvar export_js_1 = require(\"./key/export.js\");\nObject.defineProperty(exports, \"exportPKCS8\", { enumerable: true, get: function () { return export_js_1.exportPKCS8; } });\nObject.defineProperty(exports, \"exportSPKI\", { enumerable: true, get: function () { return export_js_1.exportSPKI; } });\nObject.defineProperty(exports, \"exportJWK\", { enumerable: true, get: function () { return export_js_1.exportJWK; } });\nvar import_js_1 = require(\"./key/import.js\");\nObject.defineProperty(exports, \"importSPKI\", { enumerable: true, get: function () { return import_js_1.importSPKI; } });\nObject.defineProperty(exports, \"importPKCS8\", { enumerable: true, get: function () { return import_js_1.importPKCS8; } });\nObject.defineProperty(exports, \"importX509\", { enumerable: true, get: function () { return import_js_1.importX509; } });\nObject.defineProperty(exports, \"importJWK\", { enumerable: true, get: function () { return import_js_1.importJWK; } });\nvar decode_protected_header_js_1 = require(\"./util/decode_protected_header.js\");\nObject.defineProperty(exports, \"decodeProtectedHeader\", { enumerable: true, get: function () { return decode_protected_header_js_1.decodeProtectedHeader; } });\nvar decode_jwt_js_1 = require(\"./util/decode_jwt.js\");\nObject.defineProperty(exports, \"decodeJwt\", { enumerable: true, get: function () { return decode_jwt_js_1.decodeJwt; } });\nexports.errors = require(\"./util/errors.js\");\nvar generate_key_pair_js_1 = require(\"./key/generate_key_pair.js\");\nObject.defineProperty(exports, \"generateKeyPair\", { enumerable: true, get: function () { return generate_key_pair_js_1.generateKeyPair; } });\nvar generate_secret_js_1 = require(\"./key/generate_secret.js\");\nObject.defineProperty(exports, \"generateSecret\", { enumerable: true, get: function () { return generate_secret_js_1.generateSecret; } });\nexports.base64url = require(\"./util/base64url.js\");\nvar runtime_js_1 = require(\"./util/runtime.js\");\nObject.defineProperty(exports, \"cryptoRuntime\", { enumerable: true, get: function () { return runtime_js_1.default; } });\n", "const { strict: assert } = require('assert');\nconst { createHash } = require('crypto');\nconst { format } = require('util');\n\nlet encode;\nif (Buffer.isEncoding('base64url')) {\n  encode = (input) => input.toString('base64url');\n} else {\n  const fromBase64 = (base64) => base64.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n  encode = (input) => fromBase64(input.toString('base64'));\n}\n\n/** SPECIFICATION\n * Its (_hash) value is the base64url encoding of the left-most half of the hash of the octets of\n * the ASCII representation of the token value, where the hash algorithm used is the hash algorithm\n * used in the alg Header Parameter of the ID Token's JOSE Header. For instance, if the alg is\n * RS256, hash the token value with SHA-256, then take the left-most 128 bits and base64url encode\n * them. The _hash value is a case sensitive string.\n */\n\n/**\n * @name getHash\n * @api private\n *\n * returns the sha length based off the JOSE alg heade value, defaults to sha256\n *\n * @param token {String} token value to generate the hash from\n * @param alg {String} ID Token JOSE header alg value (i.e. RS256, HS384, ES512, PS256)\n * @param [crv] {String} For EdDSA the curve decides what hash algorithm is used. Required for EdDSA\n */\nfunction getHash(alg, crv) {\n  switch (alg) {\n    case 'HS256':\n    case 'RS256':\n    case 'PS256':\n    case 'ES256':\n    case 'ES256K':\n      return createHash('sha256');\n\n    case 'HS384':\n    case 'RS384':\n    case 'PS384':\n    case 'ES384':\n      return createHash('sha384');\n\n    case 'HS512':\n    case 'RS512':\n    case 'PS512':\n    case 'ES512':\n    case 'Ed25519':\n      return createHash('sha512');\n\n    case 'Ed448':\n      return createHash('shake256', { outputLength: 114 });\n\n    case 'ML-DSA-44':\n    case 'ML-DSA-65':\n    case 'ML-DSA-87':\n      return createHash('shake256', { outputLength: 64 });\n\n    case 'EdDSA':\n      switch (crv) {\n        case 'Ed25519':\n          return createHash('sha512');\n        case 'Ed448':\n          return createHash('shake256', { outputLength: 114 });\n        default:\n          throw new TypeError('unrecognized or invalid EdDSA curve provided');\n      }\n\n    default:\n      throw new TypeError('unrecognized or invalid JWS algorithm provided');\n  }\n}\n\nfunction generate(token, alg, crv) {\n  const digest = getHash(alg, crv).update(token).digest();\n  return encode(digest.slice(0, digest.length / 2));\n}\n\nfunction validate(names, actual, source, alg, crv) {\n  if (typeof names.claim !== 'string' || !names.claim) {\n    throw new TypeError('names.claim must be a non-empty string');\n  }\n\n  if (typeof names.source !== 'string' || !names.source) {\n    throw new TypeError('names.source must be a non-empty string');\n  }\n\n  assert(typeof actual === 'string' && actual, `${names.claim} must be a non-empty string`);\n  assert(typeof source === 'string' && source, `${names.source} must be a non-empty string`);\n\n  let expected;\n  let msg;\n  try {\n    expected = generate(source, alg, crv);\n  } catch (err) {\n    msg = format('%s could not be validated (%s)', names.claim, err.message);\n  }\n\n  msg = msg || format('%s mismatch, expected %s, got: %s', names.claim, expected, actual);\n\n  assert.equal(expected, actual, msg);\n}\n\nmodule.exports = {\n  validate,\n  generate,\n};\n", "const util = require('util');\nconst crypto = require('crypto');\n\nmodule.exports = util.types.isKeyObject || ((obj) => obj && obj instanceof crypto.KeyObject);\n", "let encode;\nif (Buffer.isEncoding('base64url')) {\n  encode = (input, encoding = 'utf8') => Buffer.from(input, encoding).toString('base64url');\n} else {\n  const fromBase64 = (base64) => base64.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n  encode = (input, encoding = 'utf8') =>\n    fromBase64(Buffer.from(input, encoding).toString('base64'));\n}\n\nconst decode = (input) => Buffer.from(input, 'base64');\n\nmodule.exports.decode = decode;\nmodule.exports.encode = encode;\n", "const base64url = require('./base64url');\n\nmodule.exports = (token) => {\n  if (typeof token !== 'string' || !token) {\n    throw new TypeError('JWT must be a string');\n  }\n\n  const { 0: header, 1: payload, 2: signature, length } = token.split('.');\n\n  if (length === 5) {\n    throw new TypeError('encrypted JWTs cannot be decoded');\n  }\n\n  if (length !== 3) {\n    throw new Error('JWTs must have three components');\n  }\n\n  try {\n    return {\n      header: JSON.parse(base64url.decode(header)),\n      payload: JSON.parse(base64url.decode(payload)),\n      signature,\n    };\n  } catch (err) {\n    throw new Error('JWT is malformed');\n  }\n};\n", "module.exports = (a) => !!a && a.constructor === Object;\n", "const isPlainObject = require('./is_plain_object');\n\nfunction defaults(deep, target, ...sources) {\n  for (const source of sources) {\n    if (!isPlainObject(source)) {\n      continue;\n    }\n    for (const [key, value] of Object.entries(source)) {\n      /* istanbul ignore if */\n      if (key === '__proto__' || key === 'constructor') {\n        continue;\n      }\n      if (typeof target[key] === 'undefined' && typeof value !== 'undefined') {\n        target[key] = value;\n      }\n\n      if (deep && isPlainObject(target[key]) && isPlainObject(value)) {\n        defaults(true, target[key], value);\n      }\n    }\n  }\n\n  return target;\n}\n\nmodule.exports = defaults.bind(undefined, false);\nmodule.exports.deep = defaults.bind(undefined, true);\n", "const REGEXP = /(\\w+)=(\"[^\"]*\")/g;\n\nmodule.exports = (wwwAuthenticate) => {\n  const params = {};\n  try {\n    while (REGEXP.exec(wwwAuthenticate) !== null) {\n      if (RegExp.$1 && RegExp.$2) {\n        params[RegExp.$1] = RegExp.$2.slice(1, -1);\n      }\n    }\n  } catch (err) {}\n\n  return params;\n};\n", "function assertSigningAlgValuesSupport(endpoint, issuer, properties) {\n  if (!issuer[`${endpoint}_endpoint`]) return;\n\n  const eam = `${endpoint}_endpoint_auth_method`;\n  const easa = `${endpoint}_endpoint_auth_signing_alg`;\n  const easavs = `${endpoint}_endpoint_auth_signing_alg_values_supported`;\n\n  if (properties[eam] && properties[eam].endsWith('_jwt') && !properties[easa] && !issuer[easavs]) {\n    throw new TypeError(\n      `${easavs} must be configured on the issuer if ${easa} is not defined on a client`,\n    );\n  }\n}\n\nfunction assertIssuerConfiguration(issuer, endpoint) {\n  if (!issuer[endpoint]) {\n    throw new TypeError(`${endpoint} must be configured on the issuer`);\n  }\n}\n\nmodule.exports = {\n  assertSigningAlgValuesSupport,\n  assertIssuerConfiguration,\n};\n", "module.exports = function pick(object, ...paths) {\n  const obj = {};\n  for (const path of paths) {\n    if (object[path] !== undefined) {\n      obj[path] = object[path];\n    }\n  }\n  return obj;\n};\n", "const { STATUS_CODES } = require('http');\nconst { format } = require('util');\n\nconst { OPError } = require('../errors');\nconst parseWwwAuthenticate = require('./www_authenticate_parser');\n\nconst throwAuthenticateErrors = (response) => {\n  const params = parseWwwAuthenticate(response.headers['www-authenticate']);\n\n  if (params.error) {\n    throw new OPError(params, response);\n  }\n};\n\nconst isStandardBodyError = (response) => {\n  let result = false;\n  try {\n    let jsonbody;\n    if (typeof response.body !== 'object' || Buffer.isBuffer(response.body)) {\n      jsonbody = JSON.parse(response.body);\n    } else {\n      jsonbody = response.body;\n    }\n    result = typeof jsonbody.error === 'string' && jsonbody.error.length;\n    if (result) Object.defineProperty(response, 'body', { value: jsonbody, configurable: true });\n  } catch (err) {}\n\n  return result;\n};\n\nfunction processResponse(response, { statusCode = 200, body = true, bearer = false } = {}) {\n  if (response.statusCode !== statusCode) {\n    if (bearer) {\n      throwAuthenticateErrors(response);\n    }\n\n    if (isStandardBodyError(response)) {\n      throw new OPError(response.body, response);\n    }\n\n    throw new OPError(\n      {\n        error: format(\n          'expected %i %s, got: %i %s',\n          statusCode,\n          STATUS_CODES[statusCode],\n          response.statusCode,\n          STATUS_CODES[response.statusCode],\n        ),\n      },\n      response,\n    );\n  }\n\n  if (body && !response.body) {\n    throw new OPError(\n      {\n        error: format(\n          'expected %i %s with body but no body was returned',\n          statusCode,\n          STATUS_CODES[statusCode],\n        ),\n      },\n      response,\n    );\n  }\n\n  return response.body;\n}\n\nmodule.exports = processResponse;\n", "module.exports = () => Math.floor(Date.now() / 1000);\n", "const base64url = require('./helpers/base64url');\nconst now = require('./helpers/unix_timestamp');\n\nclass TokenSet {\n  constructor(values) {\n    Object.assign(this, values);\n    const { constructor, ...properties } = Object.getOwnPropertyDescriptors(\n      this.constructor.prototype,\n    );\n\n    Object.defineProperties(this, properties);\n  }\n\n  set expires_in(value) {\n    this.expires_at = now() + Number(value);\n  }\n\n  get expires_in() {\n    return Math.max.apply(null, [this.expires_at - now(), 0]);\n  }\n\n  expired() {\n    return this.expires_in === 0;\n  }\n\n  claims() {\n    if (!this.id_token) {\n      throw new TypeError('id_token not present in TokenSet');\n    }\n\n    return JSON.parse(base64url.decode(this.id_token.split('.')[1]));\n  }\n}\n\nmodule.exports = TokenSet;\n", "const { createHash, randomBytes } = require('crypto');\n\nconst base64url = require('./base64url');\n\nconst random = (bytes = 32) => base64url.encode(randomBytes(bytes));\n\nmodule.exports = {\n  random,\n  state: random,\n  nonce: random,\n  codeVerifier: random,\n  codeChallenge: (codeVerifier) =>\n    base64url.encode(createHash('sha256').update(codeVerifier).digest()),\n};\n", "'use strict'\nmodule.exports = function (Yallist) {\n  Yallist.prototype[Symbol.iterator] = function* () {\n    for (let walker = this.head; walker; walker = walker.next) {\n      yield walker.value\n    }\n  }\n}\n", "'use strict'\nmodule.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n  var self = this\n  if (!(self instanceof Yallist)) {\n    self = new Yallist()\n  }\n\n  self.tail = null\n  self.head = null\n  self.length = 0\n\n  if (list && typeof list.forEach === 'function') {\n    list.forEach(function (item) {\n      self.push(item)\n    })\n  } else if (arguments.length > 0) {\n    for (var i = 0, l = arguments.length; i < l; i++) {\n      self.push(arguments[i])\n    }\n  }\n\n  return self\n}\n\nYallist.prototype.removeNode = function (node) {\n  if (node.list !== this) {\n    throw new Error('removing node which does not belong to this list')\n  }\n\n  var next = node.next\n  var prev = node.prev\n\n  if (next) {\n    next.prev = prev\n  }\n\n  if (prev) {\n    prev.next = next\n  }\n\n  if (node === this.head) {\n    this.head = next\n  }\n  if (node === this.tail) {\n    this.tail = prev\n  }\n\n  node.list.length--\n  node.next = null\n  node.prev = null\n  node.list = null\n\n  return next\n}\n\nYallist.prototype.unshiftNode = function (node) {\n  if (node === this.head) {\n    return\n  }\n\n  if (node.list) {\n    node.list.removeNode(node)\n  }\n\n  var head = this.head\n  node.list = this\n  node.next = head\n  if (head) {\n    head.prev = node\n  }\n\n  this.head = node\n  if (!this.tail) {\n    this.tail = node\n  }\n  this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n  if (node === this.tail) {\n    return\n  }\n\n  if (node.list) {\n    node.list.removeNode(node)\n  }\n\n  var tail = this.tail\n  node.list = this\n  node.prev = tail\n  if (tail) {\n    tail.next = node\n  }\n\n  this.tail = node\n  if (!this.head) {\n    this.head = node\n  }\n  this.length++\n}\n\nYallist.prototype.push = function () {\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    push(this, arguments[i])\n  }\n  return this.length\n}\n\nYallist.prototype.unshift = function () {\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    unshift(this, arguments[i])\n  }\n  return this.length\n}\n\nYallist.prototype.pop = function () {\n  if (!this.tail) {\n    return undefined\n  }\n\n  var res = this.tail.value\n  this.tail = this.tail.prev\n  if (this.tail) {\n    this.tail.next = null\n  } else {\n    this.head = null\n  }\n  this.length--\n  return res\n}\n\nYallist.prototype.shift = function () {\n  if (!this.head) {\n    return undefined\n  }\n\n  var res = this.head.value\n  this.head = this.head.next\n  if (this.head) {\n    this.head.prev = null\n  } else {\n    this.tail = null\n  }\n  this.length--\n  return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n  thisp = thisp || this\n  for (var walker = this.head, i = 0; walker !== null; i++) {\n    fn.call(thisp, walker.value, i, this)\n    walker = walker.next\n  }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n  thisp = thisp || this\n  for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n    fn.call(thisp, walker.value, i, this)\n    walker = walker.prev\n  }\n}\n\nYallist.prototype.get = function (n) {\n  for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n    // abort out of the list early if we hit a cycle\n    walker = walker.next\n  }\n  if (i === n && walker !== null) {\n    return walker.value\n  }\n}\n\nYallist.prototype.getReverse = function (n) {\n  for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n    // abort out of the list early if we hit a cycle\n    walker = walker.prev\n  }\n  if (i === n && walker !== null) {\n    return walker.value\n  }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n  thisp = thisp || this\n  var res = new Yallist()\n  for (var walker = this.head; walker !== null;) {\n    res.push(fn.call(thisp, walker.value, this))\n    walker = walker.next\n  }\n  return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n  thisp = thisp || this\n  var res = new Yallist()\n  for (var walker = this.tail; walker !== null;) {\n    res.push(fn.call(thisp, walker.value, this))\n    walker = walker.prev\n  }\n  return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n  var acc\n  var walker = this.head\n  if (arguments.length > 1) {\n    acc = initial\n  } else if (this.head) {\n    walker = this.head.next\n    acc = this.head.value\n  } else {\n    throw new TypeError('Reduce of empty list with no initial value')\n  }\n\n  for (var i = 0; walker !== null; i++) {\n    acc = fn(acc, walker.value, i)\n    walker = walker.next\n  }\n\n  return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n  var acc\n  var walker = this.tail\n  if (arguments.length > 1) {\n    acc = initial\n  } else if (this.tail) {\n    walker = this.tail.prev\n    acc = this.tail.value\n  } else {\n    throw new TypeError('Reduce of empty list with no initial value')\n  }\n\n  for (var i = this.length - 1; walker !== null; i--) {\n    acc = fn(acc, walker.value, i)\n    walker = walker.prev\n  }\n\n  return acc\n}\n\nYallist.prototype.toArray = function () {\n  var arr = new Array(this.length)\n  for (var i = 0, walker = this.head; walker !== null; i++) {\n    arr[i] = walker.value\n    walker = walker.next\n  }\n  return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n  var arr = new Array(this.length)\n  for (var i = 0, walker = this.tail; walker !== null; i++) {\n    arr[i] = walker.value\n    walker = walker.prev\n  }\n  return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n  to = to || this.length\n  if (to < 0) {\n    to += this.length\n  }\n  from = from || 0\n  if (from < 0) {\n    from += this.length\n  }\n  var ret = new Yallist()\n  if (to < from || to < 0) {\n    return ret\n  }\n  if (from < 0) {\n    from = 0\n  }\n  if (to > this.length) {\n    to = this.length\n  }\n  for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n    walker = walker.next\n  }\n  for (; walker !== null && i < to; i++, walker = walker.next) {\n    ret.push(walker.value)\n  }\n  return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n  to = to || this.length\n  if (to < 0) {\n    to += this.length\n  }\n  from = from || 0\n  if (from < 0) {\n    from += this.length\n  }\n  var ret = new Yallist()\n  if (to < from || to < 0) {\n    return ret\n  }\n  if (from < 0) {\n    from = 0\n  }\n  if (to > this.length) {\n    to = this.length\n  }\n  for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n    walker = walker.prev\n  }\n  for (; walker !== null && i > from; i--, walker = walker.prev) {\n    ret.push(walker.value)\n  }\n  return ret\n}\n\nYallist.prototype.splice = function (start, deleteCount, ...nodes) {\n  if (start > this.length) {\n    start = this.length - 1\n  }\n  if (start < 0) {\n    start = this.length + start;\n  }\n\n  for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n    walker = walker.next\n  }\n\n  var ret = []\n  for (var i = 0; walker && i < deleteCount; i++) {\n    ret.push(walker.value)\n    walker = this.removeNode(walker)\n  }\n  if (walker === null) {\n    walker = this.tail\n  }\n\n  if (walker !== this.head && walker !== this.tail) {\n    walker = walker.prev\n  }\n\n  for (var i = 0; i < nodes.length; i++) {\n    walker = insert(this, walker, nodes[i])\n  }\n  return ret;\n}\n\nYallist.prototype.reverse = function () {\n  var head = this.head\n  var tail = this.tail\n  for (var walker = head; walker !== null; walker = walker.prev) {\n    var p = walker.prev\n    walker.prev = walker.next\n    walker.next = p\n  }\n  this.head = tail\n  this.tail = head\n  return this\n}\n\nfunction insert (self, node, value) {\n  var inserted = node === self.head ?\n    new Node(value, null, node, self) :\n    new Node(value, node, node.next, self)\n\n  if (inserted.next === null) {\n    self.tail = inserted\n  }\n  if (inserted.prev === null) {\n    self.head = inserted\n  }\n\n  self.length++\n\n  return inserted\n}\n\nfunction push (self, item) {\n  self.tail = new Node(item, self.tail, null, self)\n  if (!self.head) {\n    self.head = self.tail\n  }\n  self.length++\n}\n\nfunction unshift (self, item) {\n  self.head = new Node(item, null, self.head, self)\n  if (!self.tail) {\n    self.tail = self.head\n  }\n  self.length++\n}\n\nfunction Node (value, prev, next, list) {\n  if (!(this instanceof Node)) {\n    return new Node(value, prev, next, list)\n  }\n\n  this.list = list\n  this.value = value\n\n  if (prev) {\n    prev.next = this\n    this.prev = prev\n  } else {\n    this.prev = null\n  }\n\n  if (next) {\n    next.prev = this\n    this.next = next\n  } else {\n    this.next = null\n  }\n}\n\ntry {\n  // add if support for Symbol.iterator is present\n  require('./iterator.js')(Yallist)\n} catch (er) {}\n", "'use strict'\n\n// A linked list to keep track of recently-used-ness\nconst Yallist = require('yallist')\n\nconst MAX = Symbol('max')\nconst LENGTH = Symbol('length')\nconst LENGTH_CALCULATOR = Symbol('lengthCalculator')\nconst ALLOW_STALE = Symbol('allowStale')\nconst MAX_AGE = Symbol('maxAge')\nconst DISPOSE = Symbol('dispose')\nconst NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')\nconst LRU_LIST = Symbol('lruList')\nconst CACHE = Symbol('cache')\nconst UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')\n\nconst naiveLength = () => 1\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest.  the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node.  This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nclass LRUCache {\n  constructor (options) {\n    if (typeof options === 'number')\n      options = { max: options }\n\n    if (!options)\n      options = {}\n\n    if (options.max && (typeof options.max !== 'number' || options.max < 0))\n      throw new TypeError('max must be a non-negative number')\n    // Kind of weird to have a default max of Infinity, but oh well.\n    const max = this[MAX] = options.max || Infinity\n\n    const lc = options.length || naiveLength\n    this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc\n    this[ALLOW_STALE] = options.stale || false\n    if (options.maxAge && typeof options.maxAge !== 'number')\n      throw new TypeError('maxAge must be a number')\n    this[MAX_AGE] = options.maxAge || 0\n    this[DISPOSE] = options.dispose\n    this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false\n    this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false\n    this.reset()\n  }\n\n  // resize the cache when the max changes.\n  set max (mL) {\n    if (typeof mL !== 'number' || mL < 0)\n      throw new TypeError('max must be a non-negative number')\n\n    this[MAX] = mL || Infinity\n    trim(this)\n  }\n  get max () {\n    return this[MAX]\n  }\n\n  set allowStale (allowStale) {\n    this[ALLOW_STALE] = !!allowStale\n  }\n  get allowStale () {\n    return this[ALLOW_STALE]\n  }\n\n  set maxAge (mA) {\n    if (typeof mA !== 'number')\n      throw new TypeError('maxAge must be a non-negative number')\n\n    this[MAX_AGE] = mA\n    trim(this)\n  }\n  get maxAge () {\n    return this[MAX_AGE]\n  }\n\n  // resize the cache when the lengthCalculator changes.\n  set lengthCalculator (lC) {\n    if (typeof lC !== 'function')\n      lC = naiveLength\n\n    if (lC !== this[LENGTH_CALCULATOR]) {\n      this[LENGTH_CALCULATOR] = lC\n      this[LENGTH] = 0\n      this[LRU_LIST].forEach(hit => {\n        hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)\n        this[LENGTH] += hit.length\n      })\n    }\n    trim(this)\n  }\n  get lengthCalculator () { return this[LENGTH_CALCULATOR] }\n\n  get length () { return this[LENGTH] }\n  get itemCount () { return this[LRU_LIST].length }\n\n  rforEach (fn, thisp) {\n    thisp = thisp || this\n    for (let walker = this[LRU_LIST].tail; walker !== null;) {\n      const prev = walker.prev\n      forEachStep(this, fn, walker, thisp)\n      walker = prev\n    }\n  }\n\n  forEach (fn, thisp) {\n    thisp = thisp || this\n    for (let walker = this[LRU_LIST].head; walker !== null;) {\n      const next = walker.next\n      forEachStep(this, fn, walker, thisp)\n      walker = next\n    }\n  }\n\n  keys () {\n    return this[LRU_LIST].toArray().map(k => k.key)\n  }\n\n  values () {\n    return this[LRU_LIST].toArray().map(k => k.value)\n  }\n\n  reset () {\n    if (this[DISPOSE] &&\n        this[LRU_LIST] &&\n        this[LRU_LIST].length) {\n      this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))\n    }\n\n    this[CACHE] = new Map() // hash of items by key\n    this[LRU_LIST] = new Yallist() // list of items in order of use recency\n    this[LENGTH] = 0 // length of items in the list\n  }\n\n  dump () {\n    return this[LRU_LIST].map(hit =>\n      isStale(this, hit) ? false : {\n        k: hit.key,\n        v: hit.value,\n        e: hit.now + (hit.maxAge || 0)\n      }).toArray().filter(h => h)\n  }\n\n  dumpLru () {\n    return this[LRU_LIST]\n  }\n\n  set (key, value, maxAge) {\n    maxAge = maxAge || this[MAX_AGE]\n\n    if (maxAge && typeof maxAge !== 'number')\n      throw new TypeError('maxAge must be a number')\n\n    const now = maxAge ? Date.now() : 0\n    const len = this[LENGTH_CALCULATOR](value, key)\n\n    if (this[CACHE].has(key)) {\n      if (len > this[MAX]) {\n        del(this, this[CACHE].get(key))\n        return false\n      }\n\n      const node = this[CACHE].get(key)\n      const item = node.value\n\n      // dispose of the old one before overwriting\n      // split out into 2 ifs for better coverage tracking\n      if (this[DISPOSE]) {\n        if (!this[NO_DISPOSE_ON_SET])\n          this[DISPOSE](key, item.value)\n      }\n\n      item.now = now\n      item.maxAge = maxAge\n      item.value = value\n      this[LENGTH] += len - item.length\n      item.length = len\n      this.get(key)\n      trim(this)\n      return true\n    }\n\n    const hit = new Entry(key, value, len, now, maxAge)\n\n    // oversized objects fall out of cache automatically.\n    if (hit.length > this[MAX]) {\n      if (this[DISPOSE])\n        this[DISPOSE](key, value)\n\n      return false\n    }\n\n    this[LENGTH] += hit.length\n    this[LRU_LIST].unshift(hit)\n    this[CACHE].set(key, this[LRU_LIST].head)\n    trim(this)\n    return true\n  }\n\n  has (key) {\n    if (!this[CACHE].has(key)) return false\n    const hit = this[CACHE].get(key).value\n    return !isStale(this, hit)\n  }\n\n  get (key) {\n    return get(this, key, true)\n  }\n\n  peek (key) {\n    return get(this, key, false)\n  }\n\n  pop () {\n    const node = this[LRU_LIST].tail\n    if (!node)\n      return null\n\n    del(this, node)\n    return node.value\n  }\n\n  del (key) {\n    del(this, this[CACHE].get(key))\n  }\n\n  load (arr) {\n    // reset the cache\n    this.reset()\n\n    const now = Date.now()\n    // A previous serialized cache has the most recent items first\n    for (let l = arr.length - 1; l >= 0; l--) {\n      const hit = arr[l]\n      const expiresAt = hit.e || 0\n      if (expiresAt === 0)\n        // the item was created without expiration in a non aged cache\n        this.set(hit.k, hit.v)\n      else {\n        const maxAge = expiresAt - now\n        // dont add already expired items\n        if (maxAge > 0) {\n          this.set(hit.k, hit.v, maxAge)\n        }\n      }\n    }\n  }\n\n  prune () {\n    this[CACHE].forEach((value, key) => get(this, key, false))\n  }\n}\n\nconst get = (self, key, doUse) => {\n  const node = self[CACHE].get(key)\n  if (node) {\n    const hit = node.value\n    if (isStale(self, hit)) {\n      del(self, node)\n      if (!self[ALLOW_STALE])\n        return undefined\n    } else {\n      if (doUse) {\n        if (self[UPDATE_AGE_ON_GET])\n          node.value.now = Date.now()\n        self[LRU_LIST].unshiftNode(node)\n      }\n    }\n    return hit.value\n  }\n}\n\nconst isStale = (self, hit) => {\n  if (!hit || (!hit.maxAge && !self[MAX_AGE]))\n    return false\n\n  const diff = Date.now() - hit.now\n  return hit.maxAge ? diff > hit.maxAge\n    : self[MAX_AGE] && (diff > self[MAX_AGE])\n}\n\nconst trim = self => {\n  if (self[LENGTH] > self[MAX]) {\n    for (let walker = self[LRU_LIST].tail;\n      self[LENGTH] > self[MAX] && walker !== null;) {\n      // We know that we're about to delete this one, and also\n      // what the next least recently used key will be, so just\n      // go ahead and set it now.\n      const prev = walker.prev\n      del(self, walker)\n      walker = prev\n    }\n  }\n}\n\nconst del = (self, node) => {\n  if (node) {\n    const hit = node.value\n    if (self[DISPOSE])\n      self[DISPOSE](hit.key, hit.value)\n\n    self[LENGTH] -= hit.length\n    self[CACHE].delete(hit.key)\n    self[LRU_LIST].removeNode(node)\n  }\n}\n\nclass Entry {\n  constructor (key, value, length, now, maxAge) {\n    this.key = key\n    this.value = value\n    this.length = length\n    this.now = now\n    this.maxAge = maxAge || 0\n  }\n}\n\nconst forEachStep = (self, fn, node, thisp) => {\n  let hit = node.value\n  if (isStale(self, hit)) {\n    del(self, node)\n    if (!self[ALLOW_STALE])\n      hit = undefined\n  }\n  if (hit)\n    fn.call(thisp, hit.value, hit.key, self)\n}\n\nmodule.exports = LRUCache\n", "{\n  \"name\": \"openid-client\",\n  \"version\": \"5.7.1\",\n  \"description\": \"OpenID Connect Relying Party (RP, Client) implementation for Node.js runtime, supports passportjs\",\n  \"keywords\": [\n    \"auth\",\n    \"authentication\",\n    \"basic\",\n    \"certified\",\n    \"client\",\n    \"connect\",\n    \"dynamic\",\n    \"electron\",\n    \"hybrid\",\n    \"identity\",\n    \"implicit\",\n    \"oauth\",\n    \"oauth2\",\n    \"oidc\",\n    \"openid\",\n    \"passport\",\n    \"relying party\",\n    \"strategy\"\n  ],\n  \"homepage\": \"https://github.com/panva/openid-client\",\n  \"repository\": \"panva/openid-client\",\n  \"funding\": {\n    \"url\": \"https://github.com/sponsors/panva\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"Filip Skokan <panva.ip@gmail.com>\",\n  \"exports\": {\n    \"types\": \"./types/index.d.ts\",\n    \"import\": \"./lib/index.mjs\",\n    \"require\": \"./lib/index.js\"\n  },\n  \"main\": \"./lib/index.js\",\n  \"types\": \"./types/index.d.ts\",\n  \"files\": [\n    \"lib\",\n    \"types/index.d.ts\"\n  ],\n  \"scripts\": {\n    \"format\": \"npx prettier --loglevel silent --write ./lib ./test ./certification ./types\",\n    \"test\": \"mocha test/**/*.test.js\"\n  },\n  \"dependencies\": {\n    \"jose\": \"^4.15.9\",\n    \"lru-cache\": \"^6.0.0\",\n    \"object-hash\": \"^2.2.0\",\n    \"oidc-token-hash\": \"^5.0.3\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"^16.18.106\",\n    \"@types/passport\": \"^1.0.16\",\n    \"base64url\": \"^3.0.1\",\n    \"chai\": \"^4.5.0\",\n    \"mocha\": \"^10.7.3\",\n    \"nock\": \"^13.5.5\",\n    \"prettier\": \"^2.8.8\",\n    \"readable-mock-req\": \"^0.2.2\",\n    \"sinon\": \"^9.2.4\",\n    \"timekeeper\": \"^2.3.1\"\n  },\n  \"standard-version\": {\n    \"scripts\": {\n      \"postchangelog\": \"sed -i '' -e 's/### \\\\[/## [/g' CHANGELOG.md\"\n    },\n    \"types\": [\n      {\n        \"type\": \"feat\",\n        \"section\": \"Features\"\n      },\n      {\n        \"type\": \"fix\",\n        \"section\": \"Fixes\"\n      },\n      {\n        \"type\": \"chore\",\n        \"hidden\": true\n      },\n      {\n        \"type\": \"docs\",\n        \"hidden\": true\n      },\n      {\n        \"type\": \"style\",\n        \"hidden\": true\n      },\n      {\n        \"type\": \"refactor\",\n        \"section\": \"Refactor\",\n        \"hidden\": false\n      },\n      {\n        \"type\": \"perf\",\n        \"section\": \"Performance\",\n        \"hidden\": false\n      },\n      {\n        \"type\": \"test\",\n        \"hidden\": true\n      }\n    ]\n  }\n}\n", "const HTTP_OPTIONS = Symbol();\nconst CLOCK_TOLERANCE = Symbol();\n\nmodule.exports = {\n  CLOCK_TOLERANCE,\n  HTTP_OPTIONS,\n};\n", "const assert = require('assert');\nconst querystring = require('querystring');\nconst http = require('http');\nconst https = require('https');\nconst { once } = require('events');\nconst { URL } = require('url');\n\nconst LRU = require('lru-cache');\n\nconst pkg = require('../../package.json');\nconst { RPError } = require('../errors');\n\nconst pick = require('./pick');\nconst { deep: defaultsDeep } = require('./defaults');\nconst { HTTP_OPTIONS } = require('./consts');\n\nlet DEFAULT_HTTP_OPTIONS;\nconst NQCHAR = /^[\\x21\\x23-\\x5B\\x5D-\\x7E]+$/;\n\nconst allowed = [\n  'agent',\n  'ca',\n  'cert',\n  'crl',\n  'headers',\n  'key',\n  'lookup',\n  'passphrase',\n  'pfx',\n  'timeout',\n];\n\nconst setDefaults = (props, options) => {\n  DEFAULT_HTTP_OPTIONS = defaultsDeep(\n    {},\n    props.length ? pick(options, ...props) : options,\n    DEFAULT_HTTP_OPTIONS,\n  );\n};\n\nsetDefaults([], {\n  headers: {\n    'User-Agent': `${pkg.name}/${pkg.version} (${pkg.homepage})`,\n    'Accept-Encoding': 'identity',\n  },\n  timeout: 3500,\n});\n\nfunction send(req, body, contentType) {\n  if (contentType) {\n    req.removeHeader('content-type');\n    req.setHeader('content-type', contentType);\n  }\n  if (body) {\n    req.removeHeader('content-length');\n    req.setHeader('content-length', Buffer.byteLength(body));\n    req.write(body);\n  }\n  req.end();\n}\n\nconst nonces = new LRU({ max: 100 });\n\nmodule.exports = async function request(options, { accessToken, mTLS = false, DPoP } = {}) {\n  let url;\n  try {\n    url = new URL(options.url);\n    delete options.url;\n    assert(/^(https?:)$/.test(url.protocol));\n  } catch (err) {\n    throw new TypeError('only valid absolute URLs can be requested');\n  }\n  const optsFn = this[HTTP_OPTIONS];\n  let opts = options;\n\n  const nonceKey = `${url.origin}${url.pathname}`;\n  if (DPoP && 'dpopProof' in this) {\n    opts.headers = opts.headers || {};\n    opts.headers.DPoP = await this.dpopProof(\n      {\n        htu: `${url.origin}${url.pathname}`,\n        htm: options.method || 'GET',\n        nonce: nonces.get(nonceKey),\n      },\n      DPoP,\n      accessToken,\n    );\n  }\n\n  let userOptions;\n  if (optsFn) {\n    userOptions = pick(\n      optsFn.call(this, url, defaultsDeep({}, opts, DEFAULT_HTTP_OPTIONS)),\n      ...allowed,\n    );\n  }\n  opts = defaultsDeep({}, userOptions, opts, DEFAULT_HTTP_OPTIONS);\n\n  if (mTLS && !opts.pfx && !(opts.key && opts.cert)) {\n    throw new TypeError('mutual-TLS certificate and key not set');\n  }\n\n  if (opts.searchParams) {\n    for (const [key, value] of Object.entries(opts.searchParams)) {\n      url.searchParams.delete(key);\n      url.searchParams.set(key, value);\n    }\n  }\n\n  let responseType;\n  let form;\n  let json;\n  let body;\n  ({ form, responseType, json, body, ...opts } = opts);\n\n  for (const [key, value] of Object.entries(opts.headers || {})) {\n    if (value === undefined) {\n      delete opts.headers[key];\n    }\n  }\n\n  let response;\n  const req = (url.protocol === 'https:' ? https.request : http.request)(url.href, opts);\n  return (async () => {\n    if (json) {\n      send(req, JSON.stringify(json), 'application/json');\n    } else if (form) {\n      send(req, querystring.stringify(form), 'application/x-www-form-urlencoded');\n    } else if (body) {\n      send(req, body);\n    } else {\n      send(req);\n    }\n\n    [response] = await Promise.race([once(req, 'response'), once(req, 'timeout')]);\n\n    // timeout reached\n    if (!response) {\n      req.destroy();\n      throw new RPError(`outgoing request timed out after ${opts.timeout}ms`);\n    }\n\n    const parts = [];\n\n    for await (const part of response) {\n      parts.push(part);\n    }\n\n    if (parts.length) {\n      switch (responseType) {\n        case 'json': {\n          Object.defineProperty(response, 'body', {\n            get() {\n              let value = Buffer.concat(parts);\n              try {\n                value = JSON.parse(value);\n              } catch (err) {\n                Object.defineProperty(err, 'response', { value: response });\n                throw err;\n              } finally {\n                Object.defineProperty(response, 'body', { value, configurable: true });\n              }\n              return value;\n            },\n            configurable: true,\n          });\n          break;\n        }\n        case undefined:\n        case 'buffer': {\n          Object.defineProperty(response, 'body', {\n            get() {\n              const value = Buffer.concat(parts);\n              Object.defineProperty(response, 'body', { value, configurable: true });\n              return value;\n            },\n            configurable: true,\n          });\n          break;\n        }\n        default:\n          throw new TypeError('unsupported responseType request option');\n      }\n    }\n\n    return response;\n  })()\n    .catch((err) => {\n      if (response) Object.defineProperty(err, 'response', { value: response });\n      throw err;\n    })\n    .finally(() => {\n      const dpopNonce = response && response.headers['dpop-nonce'];\n      if (dpopNonce && NQCHAR.test(dpopNonce)) {\n        nonces.set(nonceKey, dpopNonce);\n      }\n    });\n};\n\nmodule.exports.setDefaults = setDefaults.bind(undefined, allowed);\n", "module.exports.keystores = new WeakMap();\n", "module.exports = globalThis.structuredClone || ((obj) => JSON.parse(JSON.stringify(obj)));\n", "const jose = require('jose');\n\nconst clone = require('./deep_clone');\nconst isPlainObject = require('./is_plain_object');\n\nconst internal = Symbol();\n\nconst keyscore = (key, { alg, use }) => {\n  let score = 0;\n\n  if (alg && key.alg) {\n    score++;\n  }\n\n  if (use && key.use) {\n    score++;\n  }\n\n  return score;\n};\n\nfunction getKtyFromAlg(alg) {\n  switch (typeof alg === 'string' && alg.slice(0, 2)) {\n    case 'RS':\n    case 'PS':\n      return 'RSA';\n    case 'ES':\n      return 'EC';\n    case 'Ed':\n      return 'OKP';\n    default:\n      return undefined;\n  }\n}\n\nfunction getAlgorithms(use, alg, kty, crv) {\n  // Ed25519, Ed448, and secp256k1 always have \"alg\"\n  // OKP always has \"use\"\n  if (alg) {\n    return new Set([alg]);\n  }\n\n  switch (kty) {\n    case 'EC': {\n      let algs = [];\n\n      if (use === 'enc' || use === undefined) {\n        algs = algs.concat(['ECDH-ES', 'ECDH-ES+A128KW', 'ECDH-ES+A192KW', 'ECDH-ES+A256KW']);\n      }\n\n      if (use === 'sig' || use === undefined) {\n        switch (crv) {\n          case 'P-256':\n          case 'P-384':\n            algs = algs.concat([`ES${crv.slice(-3)}`]);\n            break;\n          case 'P-521':\n            algs = algs.concat(['ES512']);\n            break;\n          case 'secp256k1':\n            if (jose.cryptoRuntime === 'node:crypto') {\n              algs = algs.concat(['ES256K']);\n            }\n            break;\n        }\n      }\n\n      return new Set(algs);\n    }\n    case 'OKP': {\n      return new Set(['ECDH-ES', 'ECDH-ES+A128KW', 'ECDH-ES+A192KW', 'ECDH-ES+A256KW']);\n    }\n    case 'RSA': {\n      let algs = [];\n\n      if (use === 'enc' || use === undefined) {\n        algs = algs.concat(['RSA-OAEP', 'RSA-OAEP-256', 'RSA-OAEP-384', 'RSA-OAEP-512']);\n        if (jose.cryptoRuntime === 'node:crypto') {\n          algs = algs.concat(['RSA1_5']);\n        }\n      }\n\n      if (use === 'sig' || use === undefined) {\n        algs = algs.concat(['PS256', 'PS384', 'PS512', 'RS256', 'RS384', 'RS512']);\n      }\n\n      return new Set(algs);\n    }\n    default:\n      throw new Error('unreachable');\n  }\n}\n\nmodule.exports = class KeyStore {\n  #keys;\n\n  constructor(i, keys) {\n    if (i !== internal) throw new Error('invalid constructor call');\n    this.#keys = keys;\n  }\n\n  toJWKS() {\n    return {\n      keys: this.map(({ jwk: { d, p, q, dp, dq, qi, ...jwk } }) => jwk),\n    };\n  }\n\n  all({ alg, kid, use } = {}) {\n    if (!use || !alg) {\n      throw new Error();\n    }\n\n    const kty = getKtyFromAlg(alg);\n\n    const search = { alg, use };\n    return this.filter((key) => {\n      let candidate = true;\n\n      if (candidate && kty !== undefined && key.jwk.kty !== kty) {\n        candidate = false;\n      }\n\n      if (candidate && kid !== undefined && key.jwk.kid !== kid) {\n        candidate = false;\n      }\n\n      if (candidate && use !== undefined && key.jwk.use !== undefined && key.jwk.use !== use) {\n        candidate = false;\n      }\n\n      if (candidate && key.jwk.alg && key.jwk.alg !== alg) {\n        candidate = false;\n      } else if (!key.algorithms.has(alg)) {\n        candidate = false;\n      }\n\n      return candidate;\n    }).sort((first, second) => keyscore(second, search) - keyscore(first, search));\n  }\n\n  get(...args) {\n    return this.all(...args)[0];\n  }\n\n  static async fromJWKS(jwks, { onlyPublic = false, onlyPrivate = false } = {}) {\n    if (\n      !isPlainObject(jwks) ||\n      !Array.isArray(jwks.keys) ||\n      jwks.keys.some((k) => !isPlainObject(k) || !('kty' in k))\n    ) {\n      throw new TypeError('jwks must be a JSON Web Key Set formatted object');\n    }\n\n    const keys = [];\n\n    for (let jwk of jwks.keys) {\n      jwk = clone(jwk);\n      const { kty, kid, crv } = jwk;\n\n      let { alg, use } = jwk;\n\n      if (typeof kty !== 'string' || !kty) {\n        continue;\n      }\n\n      if (use !== undefined && use !== 'sig' && use !== 'enc') {\n        continue;\n      }\n\n      if (typeof alg !== 'string' && alg !== undefined) {\n        continue;\n      }\n\n      if (typeof kid !== 'string' && kid !== undefined) {\n        continue;\n      }\n\n      if (kty === 'EC' && use === 'sig') {\n        switch (crv) {\n          case 'P-256':\n            alg = 'ES256';\n            break;\n          case 'P-384':\n            alg = 'ES384';\n            break;\n          case 'P-521':\n            alg = 'ES512';\n            break;\n          default:\n            break;\n        }\n      }\n\n      if (crv === 'secp256k1') {\n        use = 'sig';\n        alg = 'ES256K';\n      }\n\n      if (kty === 'OKP') {\n        switch (crv) {\n          case 'Ed25519':\n          case 'Ed448':\n            use = 'sig';\n            alg = 'EdDSA';\n            break;\n          case 'X25519':\n          case 'X448':\n            use = 'enc';\n            break;\n          default:\n            break;\n        }\n      }\n\n      if (alg && !use) {\n        switch (true) {\n          case alg.startsWith('ECDH'):\n            use = 'enc';\n            break;\n          case alg.startsWith('RSA'):\n            use = 'enc';\n            break;\n          default:\n            break;\n        }\n      }\n\n      if (onlyPrivate && (jwk.kty === 'oct' || !jwk.d)) {\n        throw new Error('jwks must only contain private keys');\n      }\n\n      if (onlyPublic && (jwk.d || jwk.k)) {\n        continue;\n      }\n\n      keys.push({\n        jwk: { ...jwk, alg, use },\n        async keyObject(alg) {\n          if (this[alg]) {\n            return this[alg];\n          }\n\n          const keyObject = await jose.importJWK(this.jwk, alg);\n          this[alg] = keyObject;\n          return keyObject;\n        },\n        get algorithms() {\n          Object.defineProperty(this, 'algorithms', {\n            value: getAlgorithms(this.jwk.use, this.jwk.alg, this.jwk.kty, this.jwk.crv),\n            enumerable: true,\n            configurable: false,\n          });\n          return this.algorithms;\n        },\n      });\n    }\n\n    return new this(internal, keys);\n  }\n\n  filter(...args) {\n    return this.#keys.filter(...args);\n  }\n\n  find(...args) {\n    return this.#keys.find(...args);\n  }\n\n  every(...args) {\n    return this.#keys.every(...args);\n  }\n\n  some(...args) {\n    return this.#keys.some(...args);\n  }\n\n  map(...args) {\n    return this.#keys.map(...args);\n  }\n\n  forEach(...args) {\n    return this.#keys.forEach(...args);\n  }\n\n  reduce(...args) {\n    return this.#keys.reduce(...args);\n  }\n\n  sort(...args) {\n    return this.#keys.sort(...args);\n  }\n\n  *[Symbol.iterator]() {\n    for (const key of this.#keys) {\n      yield key;\n    }\n  }\n};\n", "const isPlainObject = require('./is_plain_object');\n\nfunction merge(target, ...sources) {\n  for (const source of sources) {\n    if (!isPlainObject(source)) {\n      continue;\n    }\n    for (const [key, value] of Object.entries(source)) {\n      /* istanbul ignore if */\n      if (key === '__proto__' || key === 'constructor') {\n        continue;\n      }\n      if (isPlainObject(target[key]) && isPlainObject(value)) {\n        target[key] = merge(target[key], value);\n      } else if (typeof value !== 'undefined') {\n        target[key] = value;\n      }\n    }\n  }\n\n  return target;\n}\n\nmodule.exports = merge;\n", "const jose = require('jose');\n\nconst { RPError } = require('../errors');\n\nconst { assertIssuerConfiguration } = require('./assert');\nconst { random } = require('./generators');\nconst now = require('./unix_timestamp');\nconst request = require('./request');\nconst { keystores } = require('./weak_cache');\nconst merge = require('./merge');\n\n// TODO: in v6.x additionally encode the `- _ . ! ~ * ' ( )` characters\n// https://github.com/panva/node-openid-client/commit/5a2ea80ef5e59ec0c03dbd97d82f551e24a9d348\nconst formUrlEncode = (value) => encodeURIComponent(value).replace(/%20/g, '+');\n\nasync function clientAssertion(endpoint, payload) {\n  let alg = this[`${endpoint}_endpoint_auth_signing_alg`];\n  if (!alg) {\n    assertIssuerConfiguration(\n      this.issuer,\n      `${endpoint}_endpoint_auth_signing_alg_values_supported`,\n    );\n  }\n\n  if (this[`${endpoint}_endpoint_auth_method`] === 'client_secret_jwt') {\n    if (!alg) {\n      const supported = this.issuer[`${endpoint}_endpoint_auth_signing_alg_values_supported`];\n      alg =\n        Array.isArray(supported) && supported.find((signAlg) => /^HS(?:256|384|512)/.test(signAlg));\n    }\n\n    if (!alg) {\n      throw new RPError(\n        `failed to determine a JWS Algorithm to use for ${\n          this[`${endpoint}_endpoint_auth_method`]\n        } Client Assertion`,\n      );\n    }\n\n    return new jose.CompactSign(Buffer.from(JSON.stringify(payload)))\n      .setProtectedHeader({ alg })\n      .sign(this.secretForAlg(alg));\n  }\n\n  const keystore = await keystores.get(this);\n\n  if (!keystore) {\n    throw new TypeError('no client jwks provided for signing a client assertion with');\n  }\n\n  if (!alg) {\n    const supported = this.issuer[`${endpoint}_endpoint_auth_signing_alg_values_supported`];\n    alg =\n      Array.isArray(supported) &&\n      supported.find((signAlg) => keystore.get({ alg: signAlg, use: 'sig' }));\n  }\n\n  if (!alg) {\n    throw new RPError(\n      `failed to determine a JWS Algorithm to use for ${\n        this[`${endpoint}_endpoint_auth_method`]\n      } Client Assertion`,\n    );\n  }\n\n  const key = keystore.get({ alg, use: 'sig' });\n  if (!key) {\n    throw new RPError(\n      `no key found in client jwks to sign a client assertion with using alg ${alg}`,\n    );\n  }\n\n  return new jose.CompactSign(Buffer.from(JSON.stringify(payload)))\n    .setProtectedHeader({ alg, kid: key.jwk && key.jwk.kid })\n    .sign(await key.keyObject(alg));\n}\n\nasync function authFor(endpoint, { clientAssertionPayload } = {}) {\n  const authMethod = this[`${endpoint}_endpoint_auth_method`];\n  switch (authMethod) {\n    case 'self_signed_tls_client_auth':\n    case 'tls_client_auth':\n    case 'none':\n      return { form: { client_id: this.client_id } };\n    case 'client_secret_post':\n      if (typeof this.client_secret !== 'string') {\n        throw new TypeError(\n          'client_secret_post client authentication method requires a client_secret',\n        );\n      }\n      return { form: { client_id: this.client_id, client_secret: this.client_secret } };\n    case 'private_key_jwt':\n    case 'client_secret_jwt': {\n      const timestamp = now();\n\n      const assertion = await clientAssertion.call(this, endpoint, {\n        iat: timestamp,\n        exp: timestamp + 60,\n        jti: random(),\n        iss: this.client_id,\n        sub: this.client_id,\n        aud: this.issuer.issuer,\n        ...clientAssertionPayload,\n      });\n\n      return {\n        form: {\n          client_id: this.client_id,\n          client_assertion: assertion,\n          client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',\n        },\n      };\n    }\n    case 'client_secret_basic': {\n      // This is correct behaviour, see https://tools.ietf.org/html/rfc6749#section-2.3.1 and the\n      // related appendix. (also https://github.com/panva/node-openid-client/pull/91)\n      // > The client identifier is encoded using the\n      // > \"application/x-www-form-urlencoded\" encoding algorithm per\n      // > Appendix B, and the encoded value is used as the username; the client\n      // > password is encoded using the same algorithm and used as the\n      // > password.\n      if (typeof this.client_secret !== 'string') {\n        throw new TypeError(\n          'client_secret_basic client authentication method requires a client_secret',\n        );\n      }\n      const encoded = `${formUrlEncode(this.client_id)}:${formUrlEncode(this.client_secret)}`;\n      const value = Buffer.from(encoded).toString('base64');\n      return { headers: { Authorization: `Basic ${value}` } };\n    }\n    default: {\n      throw new TypeError(`missing, or unsupported, ${endpoint}_endpoint_auth_method`);\n    }\n  }\n}\n\nfunction resolveResponseType() {\n  const { length, 0: value } = this.response_types;\n\n  if (length === 1) {\n    return value;\n  }\n\n  return undefined;\n}\n\nfunction resolveRedirectUri() {\n  const { length, 0: value } = this.redirect_uris || [];\n\n  if (length === 1) {\n    return value;\n  }\n\n  return undefined;\n}\n\nasync function authenticatedPost(\n  endpoint,\n  opts,\n  { clientAssertionPayload, endpointAuthMethod = endpoint, DPoP } = {},\n) {\n  const auth = await authFor.call(this, endpointAuthMethod, { clientAssertionPayload });\n  const requestOpts = merge(opts, auth);\n\n  const mTLS =\n    this[`${endpointAuthMethod}_endpoint_auth_method`].includes('tls_client_auth') ||\n    (endpoint === 'token' && this.tls_client_certificate_bound_access_tokens);\n\n  let targetUrl;\n  if (mTLS && this.issuer.mtls_endpoint_aliases) {\n    targetUrl = this.issuer.mtls_endpoint_aliases[`${endpoint}_endpoint`];\n  }\n\n  targetUrl = targetUrl || this.issuer[`${endpoint}_endpoint`];\n\n  if ('form' in requestOpts) {\n    for (const [key, value] of Object.entries(requestOpts.form)) {\n      if (typeof value === 'undefined') {\n        delete requestOpts.form[key];\n      }\n    }\n  }\n\n  return request.call(\n    this,\n    {\n      ...requestOpts,\n      method: 'POST',\n      url: targetUrl,\n      headers: {\n        ...(endpoint !== 'revocation'\n          ? {\n              Accept: 'application/json',\n            }\n          : undefined),\n        ...requestOpts.headers,\n      },\n    },\n    { mTLS, DPoP },\n  );\n}\n\nmodule.exports = {\n  resolveResponseType,\n  resolveRedirectUri,\n  authFor,\n  authenticatedPost,\n};\n", "'use strict';\n\nvar crypto = require('crypto');\n\n/**\n * Exported function\n *\n * Options:\n *\n *  - `algorithm` hash algo to be used by this instance: *'sha1', 'md5'\n *  - `excludeValues` {true|*false} hash object keys, values ignored\n *  - `encoding` hash encoding, supports 'buffer', '*hex', 'binary', 'base64'\n *  - `ignoreUnknown` {true|*false} ignore unknown object types\n *  - `replacer` optional function that replaces values before hashing\n *  - `respectFunctionProperties` {*true|false} consider function properties when hashing\n *  - `respectFunctionNames` {*true|false} consider 'name' property of functions for hashing\n *  - `respectType` {*true|false} Respect special properties (prototype, constructor)\n *    when hashing to distinguish between types\n *  - `unorderedArrays` {true|*false} Sort all arrays before hashing\n *  - `unorderedSets` {*true|false} Sort `Set` and `Map` instances before hashing\n *  * = default\n *\n * @param {object} object value to hash\n * @param {object} options hashing options\n * @return {string} hash value\n * @api public\n */\nexports = module.exports = objectHash;\n\nfunction objectHash(object, options){\n  options = applyDefaults(object, options);\n\n  return hash(object, options);\n}\n\n/**\n * Exported sugar methods\n *\n * @param {object} object value to hash\n * @return {string} hash value\n * @api public\n */\nexports.sha1 = function(object){\n  return objectHash(object);\n};\nexports.keys = function(object){\n  return objectHash(object, {excludeValues: true, algorithm: 'sha1', encoding: 'hex'});\n};\nexports.MD5 = function(object){\n  return objectHash(object, {algorithm: 'md5', encoding: 'hex'});\n};\nexports.keysMD5 = function(object){\n  return objectHash(object, {algorithm: 'md5', encoding: 'hex', excludeValues: true});\n};\n\n// Internals\nvar hashes = crypto.getHashes ? crypto.getHashes().slice() : ['sha1', 'md5'];\nhashes.push('passthrough');\nvar encodings = ['buffer', 'hex', 'binary', 'base64'];\n\nfunction applyDefaults(object, sourceOptions){\n  sourceOptions = sourceOptions || {};\n\n  // create a copy rather than mutating\n  var options = {};\n  options.algorithm = sourceOptions.algorithm || 'sha1';\n  options.encoding = sourceOptions.encoding || 'hex';\n  options.excludeValues = sourceOptions.excludeValues ? true : false;\n  options.algorithm = options.algorithm.toLowerCase();\n  options.encoding = options.encoding.toLowerCase();\n  options.ignoreUnknown = sourceOptions.ignoreUnknown !== true ? false : true; // default to false\n  options.respectType = sourceOptions.respectType === false ? false : true; // default to true\n  options.respectFunctionNames = sourceOptions.respectFunctionNames === false ? false : true;\n  options.respectFunctionProperties = sourceOptions.respectFunctionProperties === false ? false : true;\n  options.unorderedArrays = sourceOptions.unorderedArrays !== true ? false : true; // default to false\n  options.unorderedSets = sourceOptions.unorderedSets === false ? false : true; // default to false\n  options.unorderedObjects = sourceOptions.unorderedObjects === false ? false : true; // default to true\n  options.replacer = sourceOptions.replacer || undefined;\n  options.excludeKeys = sourceOptions.excludeKeys || undefined;\n\n  if(typeof object === 'undefined') {\n    throw new Error('Object argument required.');\n  }\n\n  // if there is a case-insensitive match in the hashes list, accept it\n  // (i.e. SHA256 for sha256)\n  for (var i = 0; i < hashes.length; ++i) {\n    if (hashes[i].toLowerCase() === options.algorithm.toLowerCase()) {\n      options.algorithm = hashes[i];\n    }\n  }\n\n  if(hashes.indexOf(options.algorithm) === -1){\n    throw new Error('Algorithm \"' + options.algorithm + '\"  not supported. ' +\n      'supported values: ' + hashes.join(', '));\n  }\n\n  if(encodings.indexOf(options.encoding) === -1 &&\n     options.algorithm !== 'passthrough'){\n    throw new Error('Encoding \"' + options.encoding + '\"  not supported. ' +\n      'supported values: ' + encodings.join(', '));\n  }\n\n  return options;\n}\n\n/** Check if the given function is a native function */\nfunction isNativeFunction(f) {\n  if ((typeof f) !== 'function') {\n    return false;\n  }\n  var exp = /^function\\s+\\w*\\s*\\(\\s*\\)\\s*{\\s+\\[native code\\]\\s+}$/i;\n  return exp.exec(Function.prototype.toString.call(f)) != null;\n}\n\nfunction hash(object, options) {\n  var hashingStream;\n\n  if (options.algorithm !== 'passthrough') {\n    hashingStream = crypto.createHash(options.algorithm);\n  } else {\n    hashingStream = new PassThrough();\n  }\n\n  if (typeof hashingStream.write === 'undefined') {\n    hashingStream.write = hashingStream.update;\n    hashingStream.end   = hashingStream.update;\n  }\n\n  var hasher = typeHasher(options, hashingStream);\n  hasher.dispatch(object);\n  if (!hashingStream.update) {\n    hashingStream.end('');\n  }\n\n  if (hashingStream.digest) {\n    return hashingStream.digest(options.encoding === 'buffer' ? undefined : options.encoding);\n  }\n\n  var buf = hashingStream.read();\n  if (options.encoding === 'buffer') {\n    return buf;\n  }\n\n  return buf.toString(options.encoding);\n}\n\n/**\n * Expose streaming API\n *\n * @param {object} object  Value to serialize\n * @param {object} options  Options, as for hash()\n * @param {object} stream  A stream to write the serializiation to\n * @api public\n */\nexports.writeToStream = function(object, options, stream) {\n  if (typeof stream === 'undefined') {\n    stream = options;\n    options = {};\n  }\n\n  options = applyDefaults(object, options);\n\n  return typeHasher(options, stream).dispatch(object);\n};\n\nfunction typeHasher(options, writeTo, context){\n  context = context || [];\n  var write = function(str) {\n    if (writeTo.update) {\n      return writeTo.update(str, 'utf8');\n    } else {\n      return writeTo.write(str, 'utf8');\n    }\n  };\n\n  return {\n    dispatch: function(value){\n      if (options.replacer) {\n        value = options.replacer(value);\n      }\n\n      var type = typeof value;\n      if (value === null) {\n        type = 'null';\n      }\n\n      //console.log(\"[DEBUG] Dispatch: \", value, \"->\", type, \" -> \", \"_\" + type);\n\n      return this['_' + type](value);\n    },\n    _object: function(object) {\n      var pattern = (/\\[object (.*)\\]/i);\n      var objString = Object.prototype.toString.call(object);\n      var objType = pattern.exec(objString);\n      if (!objType) { // object type did not match [object ...]\n        objType = 'unknown:[' + objString + ']';\n      } else {\n        objType = objType[1]; // take only the class name\n      }\n\n      objType = objType.toLowerCase();\n\n      var objectNumber = null;\n\n      if ((objectNumber = context.indexOf(object)) >= 0) {\n        return this.dispatch('[CIRCULAR:' + objectNumber + ']');\n      } else {\n        context.push(object);\n      }\n\n      if (typeof Buffer !== 'undefined' && Buffer.isBuffer && Buffer.isBuffer(object)) {\n        write('buffer:');\n        return write(object);\n      }\n\n      if(objType !== 'object' && objType !== 'function' && objType !== 'asyncfunction') {\n        if(this['_' + objType]) {\n          this['_' + objType](object);\n        } else if (options.ignoreUnknown) {\n          return write('[' + objType + ']');\n        } else {\n          throw new Error('Unknown object type \"' + objType + '\"');\n        }\n      }else{\n        var keys = Object.keys(object);\n        if (options.unorderedObjects) {\n          keys = keys.sort();\n        }\n        // Make sure to incorporate special properties, so\n        // Types with different prototypes will produce\n        // a different hash and objects derived from\n        // different functions (`new Foo`, `new Bar`) will\n        // produce different hashes.\n        // We never do this for native functions since some\n        // seem to break because of that.\n        if (options.respectType !== false && !isNativeFunction(object)) {\n          keys.splice(0, 0, 'prototype', '__proto__', 'constructor');\n        }\n\n        if (options.excludeKeys) {\n          keys = keys.filter(function(key) { return !options.excludeKeys(key); });\n        }\n\n        write('object:' + keys.length + ':');\n        var self = this;\n        return keys.forEach(function(key){\n          self.dispatch(key);\n          write(':');\n          if(!options.excludeValues) {\n            self.dispatch(object[key]);\n          }\n          write(',');\n        });\n      }\n    },\n    _array: function(arr, unordered){\n      unordered = typeof unordered !== 'undefined' ? unordered :\n        options.unorderedArrays !== false; // default to options.unorderedArrays\n\n      var self = this;\n      write('array:' + arr.length + ':');\n      if (!unordered || arr.length <= 1) {\n        return arr.forEach(function(entry) {\n          return self.dispatch(entry);\n        });\n      }\n\n      // the unordered case is a little more complicated:\n      // since there is no canonical ordering on objects,\n      // i.e. {a:1} < {a:2} and {a:1} > {a:2} are both false,\n      // we first serialize each entry using a PassThrough stream\n      // before sorting.\n      // also: we can\u2019t use the same context array for all entries\n      // since the order of hashing should *not* matter. instead,\n      // we keep track of the additions to a copy of the context array\n      // and add all of them to the global context array when we\u2019re done\n      var contextAdditions = [];\n      var entries = arr.map(function(entry) {\n        var strm = new PassThrough();\n        var localContext = context.slice(); // make copy\n        var hasher = typeHasher(options, strm, localContext);\n        hasher.dispatch(entry);\n        // take only what was added to localContext and append it to contextAdditions\n        contextAdditions = contextAdditions.concat(localContext.slice(context.length));\n        return strm.read().toString();\n      });\n      context = context.concat(contextAdditions);\n      entries.sort();\n      return this._array(entries, false);\n    },\n    _date: function(date){\n      return write('date:' + date.toJSON());\n    },\n    _symbol: function(sym){\n      return write('symbol:' + sym.toString());\n    },\n    _error: function(err){\n      return write('error:' + err.toString());\n    },\n    _boolean: function(bool){\n      return write('bool:' + bool.toString());\n    },\n    _string: function(string){\n      write('string:' + string.length + ':');\n      write(string.toString());\n    },\n    _function: function(fn){\n      write('fn:');\n      if (isNativeFunction(fn)) {\n        this.dispatch('[native]');\n      } else {\n        this.dispatch(fn.toString());\n      }\n\n      if (options.respectFunctionNames !== false) {\n        // Make sure we can still distinguish native functions\n        // by their name, otherwise String and Function will\n        // have the same hash\n        this.dispatch(\"function-name:\" + String(fn.name));\n      }\n\n      if (options.respectFunctionProperties) {\n        this._object(fn);\n      }\n    },\n    _number: function(number){\n      return write('number:' + number.toString());\n    },\n    _xml: function(xml){\n      return write('xml:' + xml.toString());\n    },\n    _null: function() {\n      return write('Null');\n    },\n    _undefined: function() {\n      return write('Undefined');\n    },\n    _regexp: function(regex){\n      return write('regex:' + regex.toString());\n    },\n    _uint8array: function(arr){\n      write('uint8array:');\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    _uint8clampedarray: function(arr){\n      write('uint8clampedarray:');\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    _int8array: function(arr){\n      write('uint8array:');\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    _uint16array: function(arr){\n      write('uint16array:');\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    _int16array: function(arr){\n      write('uint16array:');\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    _uint32array: function(arr){\n      write('uint32array:');\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    _int32array: function(arr){\n      write('uint32array:');\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    _float32array: function(arr){\n      write('float32array:');\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    _float64array: function(arr){\n      write('float64array:');\n      return this.dispatch(Array.prototype.slice.call(arr));\n    },\n    _arraybuffer: function(arr){\n      write('arraybuffer:');\n      return this.dispatch(new Uint8Array(arr));\n    },\n    _url: function(url) {\n      return write('url:' + url.toString(), 'utf8');\n    },\n    _map: function(map) {\n      write('map:');\n      var arr = Array.from(map);\n      return this._array(arr, options.unorderedSets !== false);\n    },\n    _set: function(set) {\n      write('set:');\n      var arr = Array.from(set);\n      return this._array(arr, options.unorderedSets !== false);\n    },\n    _file: function(file) {\n      write('file:');\n      return this.dispatch([file.name, file.size, file.type, file.lastModfied]);\n    },\n    _blob: function() {\n      if (options.ignoreUnknown) {\n        return write('[blob]');\n      }\n\n      throw Error('Hashing Blob objects is currently not supported\\n' +\n        '(see https://github.com/puleos/object-hash/issues/26)\\n' +\n        'Use \"options.replacer\" or \"options.ignoreUnknown\"\\n');\n    },\n    _domwindow: function() { return write('domwindow'); },\n    _bigint: function(number){\n      return write('bigint:' + number.toString());\n    },\n    /* Node.js standard native objects */\n    _process: function() { return write('process'); },\n    _timer: function() { return write('timer'); },\n    _pipe: function() { return write('pipe'); },\n    _tcp: function() { return write('tcp'); },\n    _udp: function() { return write('udp'); },\n    _tty: function() { return write('tty'); },\n    _statwatcher: function() { return write('statwatcher'); },\n    _securecontext: function() { return write('securecontext'); },\n    _connection: function() { return write('connection'); },\n    _zlib: function() { return write('zlib'); },\n    _context: function() { return write('context'); },\n    _nodescript: function() { return write('nodescript'); },\n    _httpparser: function() { return write('httpparser'); },\n    _dataview: function() { return write('dataview'); },\n    _signal: function() { return write('signal'); },\n    _fsevent: function() { return write('fsevent'); },\n    _tlswrap: function() { return write('tlswrap'); },\n  };\n}\n\n// Mini-implementation of stream.PassThrough\n// We are far from having need for the full implementation, and we can\n// make assumptions like \"many writes, then only one final read\"\n// and we can ignore encoding specifics\nfunction PassThrough() {\n  return {\n    buf: '',\n\n    write: function(b) {\n      this.buf += b;\n    },\n\n    end: function(b) {\n      this.buf += b;\n    },\n\n    read: function() {\n      return this.buf;\n    }\n  };\n}\n", "const objectHash = require('object-hash');\nconst LRU = require('lru-cache');\n\nconst { RPError } = require('../errors');\n\nconst { assertIssuerConfiguration } = require('./assert');\nconst KeyStore = require('./keystore');\nconst { keystores } = require('./weak_cache');\nconst processResponse = require('./process_response');\nconst request = require('./request');\n\nconst inFlight = new WeakMap();\nconst caches = new WeakMap();\nconst lrus = (ctx) => {\n  if (!caches.has(ctx)) {\n    caches.set(ctx, new LRU({ max: 100 }));\n  }\n  return caches.get(ctx);\n};\n\nasync function getKeyStore(reload = false) {\n  assertIssuerConfiguration(this, 'jwks_uri');\n\n  const keystore = keystores.get(this);\n  const cache = lrus(this);\n\n  if (reload || !keystore) {\n    if (inFlight.has(this)) {\n      return inFlight.get(this);\n    }\n    cache.reset();\n    inFlight.set(\n      this,\n      (async () => {\n        const response = await request\n          .call(this, {\n            method: 'GET',\n            responseType: 'json',\n            url: this.jwks_uri,\n            headers: {\n              Accept: 'application/json, application/jwk-set+json',\n            },\n          })\n          .finally(() => {\n            inFlight.delete(this);\n          });\n        const jwks = processResponse(response);\n\n        const joseKeyStore = KeyStore.fromJWKS(jwks, { onlyPublic: true });\n        cache.set('throttle', true, 60 * 1000);\n        keystores.set(this, joseKeyStore);\n\n        return joseKeyStore;\n      })(),\n    );\n\n    return inFlight.get(this);\n  }\n\n  return keystore;\n}\n\nasync function queryKeyStore({ kid, kty, alg, use }, { allowMulti = false } = {}) {\n  const cache = lrus(this);\n\n  const def = {\n    kid,\n    kty,\n    alg,\n    use,\n  };\n\n  const defHash = objectHash(def, {\n    algorithm: 'sha256',\n    ignoreUnknown: true,\n    unorderedArrays: true,\n    unorderedSets: true,\n    respectType: false,\n  });\n\n  // refresh keystore on every unknown key but also only upto once every minute\n  const freshJwksUri = cache.get(defHash) || cache.get('throttle');\n\n  const keystore = await getKeyStore.call(this, !freshJwksUri);\n  const keys = keystore.all(def);\n\n  delete def.use;\n  if (keys.length === 0) {\n    throw new RPError({\n      printf: [\"no valid key found in issuer's jwks_uri for key parameters %j\", def],\n      jwks: keystore,\n    });\n  }\n\n  if (!allowMulti && keys.length > 1 && !kid) {\n    throw new RPError({\n      printf: [\n        \"multiple matching keys found in issuer's jwks_uri for key parameters %j, kid must be provided in this case\",\n        def,\n      ],\n      jwks: keystore,\n    });\n  }\n\n  cache.set(defHash, true);\n\n  return keys;\n}\n\nmodule.exports.queryKeyStore = queryKeyStore;\nmodule.exports.keystore = getKeyStore;\n", "const { inspect } = require('util');\n\nconst { RPError, OPError } = require('./errors');\nconst now = require('./helpers/unix_timestamp');\n\nclass DeviceFlowHandle {\n  #aborted;\n  #client;\n  #clientAssertionPayload;\n  #DPoP;\n  #exchangeBody;\n  #expires_at;\n  #interval;\n  #maxAge;\n  #response;\n  constructor({ client, exchangeBody, clientAssertionPayload, response, maxAge, DPoP }) {\n    ['verification_uri', 'user_code', 'device_code'].forEach((prop) => {\n      if (typeof response[prop] !== 'string' || !response[prop]) {\n        throw new RPError(\n          `expected ${prop} string to be returned by Device Authorization Response, got %j`,\n          response[prop],\n        );\n      }\n    });\n\n    if (!Number.isSafeInteger(response.expires_in)) {\n      throw new RPError(\n        'expected expires_in number to be returned by Device Authorization Response, got %j',\n        response.expires_in,\n      );\n    }\n\n    this.#expires_at = now() + response.expires_in;\n    this.#client = client;\n    this.#DPoP = DPoP;\n    this.#maxAge = maxAge;\n    this.#exchangeBody = exchangeBody;\n    this.#clientAssertionPayload = clientAssertionPayload;\n    this.#response = response;\n    this.#interval = response.interval * 1000 || 5000;\n  }\n\n  abort() {\n    this.#aborted = true;\n  }\n\n  async poll({ signal } = {}) {\n    if ((signal && signal.aborted) || this.#aborted) {\n      throw new RPError('polling aborted');\n    }\n\n    if (this.expired()) {\n      throw new RPError(\n        'the device code %j has expired and the device authorization session has concluded',\n        this.device_code,\n      );\n    }\n\n    await new Promise((resolve) => setTimeout(resolve, this.#interval));\n\n    let tokenset;\n    try {\n      tokenset = await this.#client.grant(\n        {\n          ...this.#exchangeBody,\n          grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\n          device_code: this.device_code,\n        },\n        { clientAssertionPayload: this.#clientAssertionPayload, DPoP: this.#DPoP },\n      );\n    } catch (err) {\n      switch (err instanceof OPError && err.error) {\n        case 'slow_down':\n          this.#interval += 5000;\n        case 'authorization_pending':\n          return this.poll({ signal });\n        default:\n          throw err;\n      }\n    }\n\n    if ('id_token' in tokenset) {\n      await this.#client.decryptIdToken(tokenset);\n      await this.#client.validateIdToken(tokenset, undefined, 'token', this.#maxAge);\n    }\n\n    return tokenset;\n  }\n\n  get device_code() {\n    return this.#response.device_code;\n  }\n\n  get user_code() {\n    return this.#response.user_code;\n  }\n\n  get verification_uri() {\n    return this.#response.verification_uri;\n  }\n\n  get verification_uri_complete() {\n    return this.#response.verification_uri_complete;\n  }\n\n  get expires_in() {\n    return Math.max.apply(null, [this.#expires_at - now(), 0]);\n  }\n\n  expired() {\n    return this.expires_in === 0;\n  }\n\n  /* istanbul ignore next */\n  [inspect.custom]() {\n    return `${this.constructor.name} ${inspect(this.#response, {\n      depth: Infinity,\n      colors: process.stdout.isTTY,\n      compact: false,\n      sorted: true,\n    })}`;\n  }\n}\n\nmodule.exports = DeviceFlowHandle;\n", "const { inspect } = require('util');\nconst stdhttp = require('http');\nconst crypto = require('crypto');\nconst { strict: assert } = require('assert');\nconst querystring = require('querystring');\nconst url = require('url');\nconst { URL, URLSearchParams } = require('url');\n\nconst jose = require('jose');\nconst tokenHash = require('oidc-token-hash');\n\nconst isKeyObject = require('./helpers/is_key_object');\nconst decodeJWT = require('./helpers/decode_jwt');\nconst base64url = require('./helpers/base64url');\nconst defaults = require('./helpers/defaults');\nconst parseWwwAuthenticate = require('./helpers/www_authenticate_parser');\nconst { assertSigningAlgValuesSupport, assertIssuerConfiguration } = require('./helpers/assert');\nconst pick = require('./helpers/pick');\nconst isPlainObject = require('./helpers/is_plain_object');\nconst processResponse = require('./helpers/process_response');\nconst TokenSet = require('./token_set');\nconst { OPError, RPError } = require('./errors');\nconst now = require('./helpers/unix_timestamp');\nconst { random } = require('./helpers/generators');\nconst request = require('./helpers/request');\nconst { CLOCK_TOLERANCE } = require('./helpers/consts');\nconst { keystores } = require('./helpers/weak_cache');\nconst KeyStore = require('./helpers/keystore');\nconst clone = require('./helpers/deep_clone');\nconst { authenticatedPost, resolveResponseType, resolveRedirectUri } = require('./helpers/client');\nconst { queryKeyStore } = require('./helpers/issuer');\nconst DeviceFlowHandle = require('./device_flow_handle');\n\nconst [major, minor] = process.version\n  .slice(1)\n  .split('.')\n  .map((str) => parseInt(str, 10));\n\nconst rsaPssParams = major >= 17 || (major === 16 && minor >= 9);\nconst retryAttempt = Symbol();\nconst skipNonceCheck = Symbol();\nconst skipMaxAgeCheck = Symbol();\n\nfunction pickCb(input) {\n  return pick(\n    input,\n    'access_token', // OAuth 2.0\n    'code', // OAuth 2.0\n    'error_description', // OAuth 2.0\n    'error_uri', // OAuth 2.0\n    'error', // OAuth 2.0\n    'expires_in', // OAuth 2.0\n    'id_token', // OIDC Core 1.0\n    'iss', // draft-ietf-oauth-iss-auth-resp\n    'response', // FAPI JARM\n    'session_state', // OIDC Session Management\n    'state', // OAuth 2.0\n    'token_type', // OAuth 2.0\n  );\n}\n\nfunction authorizationHeaderValue(token, tokenType = 'Bearer') {\n  return `${tokenType} ${token}`;\n}\n\nfunction getSearchParams(input) {\n  const parsed = url.parse(input);\n  if (!parsed.search) return {};\n  return querystring.parse(parsed.search.substring(1));\n}\n\nfunction verifyPresence(payload, jwt, prop) {\n  if (payload[prop] === undefined) {\n    throw new RPError({\n      message: `missing required JWT property ${prop}`,\n      jwt,\n    });\n  }\n}\n\nfunction authorizationParams(params) {\n  const authParams = {\n    client_id: this.client_id,\n    scope: 'openid',\n    response_type: resolveResponseType.call(this),\n    redirect_uri: resolveRedirectUri.call(this),\n    ...params,\n  };\n\n  Object.entries(authParams).forEach(([key, value]) => {\n    if (value === null || value === undefined) {\n      delete authParams[key];\n    } else if (key === 'claims' && typeof value === 'object') {\n      authParams[key] = JSON.stringify(value);\n    } else if (key === 'resource' && Array.isArray(value)) {\n      authParams[key] = value;\n    } else if (typeof value !== 'string') {\n      authParams[key] = String(value);\n    }\n  });\n\n  return authParams;\n}\n\nfunction getKeystore(jwks) {\n  if (\n    !isPlainObject(jwks) ||\n    !Array.isArray(jwks.keys) ||\n    jwks.keys.some((k) => !isPlainObject(k) || !('kty' in k))\n  ) {\n    throw new TypeError('jwks must be a JSON Web Key Set formatted object');\n  }\n\n  return KeyStore.fromJWKS(jwks, { onlyPrivate: true });\n}\n\n// if an OP doesnt support client_secret_basic but supports client_secret_post, use it instead\n// this is in place to take care of most common pitfalls when first using discovered Issuers without\n// the support for default values defined by Discovery 1.0\nfunction checkBasicSupport(client, properties) {\n  try {\n    const supported = client.issuer.token_endpoint_auth_methods_supported;\n    if (!supported.includes(properties.token_endpoint_auth_method)) {\n      if (supported.includes('client_secret_post')) {\n        properties.token_endpoint_auth_method = 'client_secret_post';\n      }\n    }\n  } catch (err) {}\n}\n\nfunction handleCommonMistakes(client, metadata, properties) {\n  if (!metadata.token_endpoint_auth_method) {\n    // if no explicit value was provided\n    checkBasicSupport(client, properties);\n  }\n\n  // :fp: c'mon people... RTFM\n  if (metadata.redirect_uri) {\n    if (metadata.redirect_uris) {\n      throw new TypeError('provide a redirect_uri or redirect_uris, not both');\n    }\n    properties.redirect_uris = [metadata.redirect_uri];\n    delete properties.redirect_uri;\n  }\n\n  if (metadata.response_type) {\n    if (metadata.response_types) {\n      throw new TypeError('provide a response_type or response_types, not both');\n    }\n    properties.response_types = [metadata.response_type];\n    delete properties.response_type;\n  }\n}\n\nfunction getDefaultsForEndpoint(endpoint, issuer, properties) {\n  if (!issuer[`${endpoint}_endpoint`]) return;\n\n  const tokenEndpointAuthMethod = properties.token_endpoint_auth_method;\n  const tokenEndpointAuthSigningAlg = properties.token_endpoint_auth_signing_alg;\n\n  const eam = `${endpoint}_endpoint_auth_method`;\n  const easa = `${endpoint}_endpoint_auth_signing_alg`;\n\n  if (properties[eam] === undefined && properties[easa] === undefined) {\n    if (tokenEndpointAuthMethod !== undefined) {\n      properties[eam] = tokenEndpointAuthMethod;\n    }\n    if (tokenEndpointAuthSigningAlg !== undefined) {\n      properties[easa] = tokenEndpointAuthSigningAlg;\n    }\n  }\n}\n\nclass BaseClient {\n  #metadata;\n  #issuer;\n  #aadIssValidation;\n  #additionalAuthorizedParties;\n  constructor(issuer, aadIssValidation, metadata = {}, jwks, options) {\n    this.#metadata = new Map();\n    this.#issuer = issuer;\n    this.#aadIssValidation = aadIssValidation;\n\n    if (typeof metadata.client_id !== 'string' || !metadata.client_id) {\n      throw new TypeError('client_id is required');\n    }\n\n    const properties = {\n      grant_types: ['authorization_code'],\n      id_token_signed_response_alg: 'RS256',\n      authorization_signed_response_alg: 'RS256',\n      response_types: ['code'],\n      token_endpoint_auth_method: 'client_secret_basic',\n      ...(this.fapi1()\n        ? {\n            grant_types: ['authorization_code', 'implicit'],\n            id_token_signed_response_alg: 'PS256',\n            authorization_signed_response_alg: 'PS256',\n            response_types: ['code id_token'],\n            tls_client_certificate_bound_access_tokens: true,\n            token_endpoint_auth_method: undefined,\n          }\n        : undefined),\n      ...(this.fapi2()\n        ? {\n            id_token_signed_response_alg: 'PS256',\n            authorization_signed_response_alg: 'PS256',\n            token_endpoint_auth_method: undefined,\n          }\n        : undefined),\n      ...metadata,\n    };\n\n    if (this.fapi()) {\n      switch (properties.token_endpoint_auth_method) {\n        case 'self_signed_tls_client_auth':\n        case 'tls_client_auth':\n          break;\n        case 'private_key_jwt':\n          if (!jwks) {\n            throw new TypeError('jwks is required');\n          }\n          break;\n        case undefined:\n          throw new TypeError('token_endpoint_auth_method is required');\n        default:\n          throw new TypeError('invalid or unsupported token_endpoint_auth_method');\n      }\n    }\n\n    if (this.fapi2()) {\n      if (\n        properties.tls_client_certificate_bound_access_tokens &&\n        properties.dpop_bound_access_tokens\n      ) {\n        throw new TypeError(\n          'either tls_client_certificate_bound_access_tokens or dpop_bound_access_tokens must be set to true',\n        );\n      }\n\n      if (\n        !properties.tls_client_certificate_bound_access_tokens &&\n        !properties.dpop_bound_access_tokens\n      ) {\n        throw new TypeError(\n          'either tls_client_certificate_bound_access_tokens or dpop_bound_access_tokens must be set to true',\n        );\n      }\n    }\n\n    handleCommonMistakes(this, metadata, properties);\n\n    assertSigningAlgValuesSupport('token', this.issuer, properties);\n    ['introspection', 'revocation'].forEach((endpoint) => {\n      getDefaultsForEndpoint(endpoint, this.issuer, properties);\n      assertSigningAlgValuesSupport(endpoint, this.issuer, properties);\n    });\n\n    Object.entries(properties).forEach(([key, value]) => {\n      this.#metadata.set(key, value);\n      if (!this[key]) {\n        Object.defineProperty(this, key, {\n          get() {\n            return this.#metadata.get(key);\n          },\n          enumerable: true,\n        });\n      }\n    });\n\n    if (jwks !== undefined) {\n      const keystore = getKeystore.call(this, jwks);\n      keystores.set(this, keystore);\n    }\n\n    if (options != null && options.additionalAuthorizedParties) {\n      this.#additionalAuthorizedParties = clone(options.additionalAuthorizedParties);\n    }\n\n    this[CLOCK_TOLERANCE] = 0;\n  }\n\n  authorizationUrl(params = {}) {\n    if (!isPlainObject(params)) {\n      throw new TypeError('params must be a plain object');\n    }\n    assertIssuerConfiguration(this.issuer, 'authorization_endpoint');\n    const target = new URL(this.issuer.authorization_endpoint);\n\n    for (const [name, value] of Object.entries(authorizationParams.call(this, params))) {\n      if (Array.isArray(value)) {\n        target.searchParams.delete(name);\n        for (const member of value) {\n          target.searchParams.append(name, member);\n        }\n      } else {\n        target.searchParams.set(name, value);\n      }\n    }\n\n    // TODO: is the replace needed?\n    return target.href.replace(/\\+/g, '%20');\n  }\n\n  authorizationPost(params = {}) {\n    if (!isPlainObject(params)) {\n      throw new TypeError('params must be a plain object');\n    }\n    const inputs = authorizationParams.call(this, params);\n    const formInputs = Object.keys(inputs)\n      .map((name) => `<input type=\"hidden\" name=\"${name}\" value=\"${inputs[name]}\"/>`)\n      .join('\\n');\n\n    return `<!DOCTYPE html>\n<head>\n<title>Requesting Authorization</title>\n</head>\n<body onload=\"javascript:document.forms[0].submit()\">\n<form method=\"post\" action=\"${this.issuer.authorization_endpoint}\">\n  ${formInputs}\n</form>\n</body>\n</html>`;\n  }\n\n  endSessionUrl(params = {}) {\n    assertIssuerConfiguration(this.issuer, 'end_session_endpoint');\n\n    const { 0: postLogout, length } = this.post_logout_redirect_uris || [];\n\n    const { post_logout_redirect_uri = length === 1 ? postLogout : undefined } = params;\n\n    let id_token_hint;\n    ({ id_token_hint, ...params } = params);\n    if (id_token_hint instanceof TokenSet) {\n      if (!id_token_hint.id_token) {\n        throw new TypeError('id_token not present in TokenSet');\n      }\n      id_token_hint = id_token_hint.id_token;\n    }\n\n    const target = url.parse(this.issuer.end_session_endpoint);\n    const query = defaults(\n      getSearchParams(this.issuer.end_session_endpoint),\n      params,\n      {\n        post_logout_redirect_uri,\n        client_id: this.client_id,\n      },\n      { id_token_hint },\n    );\n\n    Object.entries(query).forEach(([key, value]) => {\n      if (value === null || value === undefined) {\n        delete query[key];\n      }\n    });\n\n    target.search = null;\n    target.query = query;\n\n    return url.format(target);\n  }\n\n  callbackParams(input) {\n    const isIncomingMessage =\n      input instanceof stdhttp.IncomingMessage || (input && input.method && input.url);\n    const isString = typeof input === 'string';\n\n    if (!isString && !isIncomingMessage) {\n      throw new TypeError(\n        '#callbackParams only accepts string urls, http.IncomingMessage or a lookalike',\n      );\n    }\n    if (isIncomingMessage) {\n      switch (input.method) {\n        case 'GET':\n          return pickCb(getSearchParams(input.url));\n        case 'POST':\n          if (input.body === undefined) {\n            throw new TypeError(\n              'incoming message body missing, include a body parser prior to this method call',\n            );\n          }\n          switch (typeof input.body) {\n            case 'object':\n            case 'string':\n              if (Buffer.isBuffer(input.body)) {\n                return pickCb(querystring.parse(input.body.toString('utf-8')));\n              }\n              if (typeof input.body === 'string') {\n                return pickCb(querystring.parse(input.body));\n              }\n\n              return pickCb(input.body);\n            default:\n              throw new TypeError('invalid IncomingMessage body object');\n          }\n        default:\n          throw new TypeError('invalid IncomingMessage method');\n      }\n    } else {\n      return pickCb(getSearchParams(input));\n    }\n  }\n\n  async callback(\n    redirectUri,\n    parameters,\n    checks = {},\n    { exchangeBody, clientAssertionPayload, DPoP } = {},\n  ) {\n    let params = pickCb(parameters);\n\n    if (checks.jarm && !('response' in parameters)) {\n      throw new RPError({\n        message: 'expected a JARM response',\n        checks,\n        params,\n      });\n    } else if ('response' in parameters) {\n      const decrypted = await this.decryptJARM(params.response);\n      params = await this.validateJARM(decrypted);\n    }\n\n    if (this.default_max_age && !checks.max_age) {\n      checks.max_age = this.default_max_age;\n    }\n\n    if (params.state && !checks.state) {\n      throw new TypeError('checks.state argument is missing');\n    }\n\n    if (!params.state && checks.state) {\n      throw new RPError({\n        message: 'state missing from the response',\n        checks,\n        params,\n      });\n    }\n\n    if (checks.state !== params.state) {\n      throw new RPError({\n        printf: ['state mismatch, expected %s, got: %s', checks.state, params.state],\n        checks,\n        params,\n      });\n    }\n\n    if ('iss' in params) {\n      assertIssuerConfiguration(this.issuer, 'issuer');\n      if (params.iss !== this.issuer.issuer) {\n        throw new RPError({\n          printf: ['iss mismatch, expected %s, got: %s', this.issuer.issuer, params.iss],\n          params,\n        });\n      }\n    } else if (\n      this.issuer.authorization_response_iss_parameter_supported &&\n      !('id_token' in params) &&\n      !('response' in parameters)\n    ) {\n      throw new RPError({\n        message: 'iss missing from the response',\n        params,\n      });\n    }\n\n    if (params.error) {\n      throw new OPError(params);\n    }\n\n    const RESPONSE_TYPE_REQUIRED_PARAMS = {\n      code: ['code'],\n      id_token: ['id_token'],\n      token: ['access_token', 'token_type'],\n    };\n\n    if (checks.response_type) {\n      for (const type of checks.response_type.split(' ')) {\n        if (type === 'none') {\n          if (params.code || params.id_token || params.access_token) {\n            throw new RPError({\n              message: 'unexpected params encountered for \"none\" response',\n              checks,\n              params,\n            });\n          }\n        } else {\n          for (const param of RESPONSE_TYPE_REQUIRED_PARAMS[type]) {\n            if (!params[param]) {\n              throw new RPError({\n                message: `${param} missing from response`,\n                checks,\n                params,\n              });\n            }\n          }\n        }\n      }\n    }\n\n    if (params.id_token) {\n      const tokenset = new TokenSet(params);\n      await this.decryptIdToken(tokenset);\n      await this.validateIdToken(\n        tokenset,\n        checks.nonce,\n        'authorization',\n        checks.max_age,\n        checks.state,\n      );\n\n      if (!params.code) {\n        return tokenset;\n      }\n    }\n\n    if (params.code) {\n      const tokenset = await this.grant(\n        {\n          ...exchangeBody,\n          grant_type: 'authorization_code',\n          code: params.code,\n          redirect_uri: redirectUri,\n          code_verifier: checks.code_verifier,\n        },\n        { clientAssertionPayload, DPoP },\n      );\n\n      await this.decryptIdToken(tokenset);\n      await this.validateIdToken(tokenset, checks.nonce, 'token', checks.max_age);\n\n      if (params.session_state) {\n        tokenset.session_state = params.session_state;\n      }\n\n      return tokenset;\n    }\n\n    return new TokenSet(params);\n  }\n\n  async oauthCallback(\n    redirectUri,\n    parameters,\n    checks = {},\n    { exchangeBody, clientAssertionPayload, DPoP } = {},\n  ) {\n    let params = pickCb(parameters);\n\n    if (checks.jarm && !('response' in parameters)) {\n      throw new RPError({\n        message: 'expected a JARM response',\n        checks,\n        params,\n      });\n    } else if ('response' in parameters) {\n      const decrypted = await this.decryptJARM(params.response);\n      params = await this.validateJARM(decrypted);\n    }\n\n    if (params.state && !checks.state) {\n      throw new TypeError('checks.state argument is missing');\n    }\n\n    if (!params.state && checks.state) {\n      throw new RPError({\n        message: 'state missing from the response',\n        checks,\n        params,\n      });\n    }\n\n    if (checks.state !== params.state) {\n      throw new RPError({\n        printf: ['state mismatch, expected %s, got: %s', checks.state, params.state],\n        checks,\n        params,\n      });\n    }\n\n    if ('iss' in params) {\n      assertIssuerConfiguration(this.issuer, 'issuer');\n      if (params.iss !== this.issuer.issuer) {\n        throw new RPError({\n          printf: ['iss mismatch, expected %s, got: %s', this.issuer.issuer, params.iss],\n          params,\n        });\n      }\n    } else if (\n      this.issuer.authorization_response_iss_parameter_supported &&\n      !('id_token' in params) &&\n      !('response' in parameters)\n    ) {\n      throw new RPError({\n        message: 'iss missing from the response',\n        params,\n      });\n    }\n\n    if (params.error) {\n      throw new OPError(params);\n    }\n\n    if (typeof params.id_token === 'string' && params.id_token.length) {\n      throw new RPError({\n        message:\n          'id_token detected in the response, you must use client.callback() instead of client.oauthCallback()',\n        params,\n      });\n    }\n    delete params.id_token;\n\n    const RESPONSE_TYPE_REQUIRED_PARAMS = {\n      code: ['code'],\n      token: ['access_token', 'token_type'],\n    };\n\n    if (checks.response_type) {\n      for (const type of checks.response_type.split(' ')) {\n        if (type === 'none') {\n          if (params.code || params.id_token || params.access_token) {\n            throw new RPError({\n              message: 'unexpected params encountered for \"none\" response',\n              checks,\n              params,\n            });\n          }\n        }\n\n        if (RESPONSE_TYPE_REQUIRED_PARAMS[type]) {\n          for (const param of RESPONSE_TYPE_REQUIRED_PARAMS[type]) {\n            if (!params[param]) {\n              throw new RPError({\n                message: `${param} missing from response`,\n                checks,\n                params,\n              });\n            }\n          }\n        }\n      }\n    }\n\n    if (params.code) {\n      const tokenset = await this.grant(\n        {\n          ...exchangeBody,\n          grant_type: 'authorization_code',\n          code: params.code,\n          redirect_uri: redirectUri,\n          code_verifier: checks.code_verifier,\n        },\n        { clientAssertionPayload, DPoP },\n      );\n\n      if (typeof tokenset.id_token === 'string' && tokenset.id_token.length) {\n        throw new RPError({\n          message:\n            'id_token detected in the response, you must use client.callback() instead of client.oauthCallback()',\n          params,\n        });\n      }\n      delete tokenset.id_token;\n\n      return tokenset;\n    }\n\n    return new TokenSet(params);\n  }\n\n  async decryptIdToken(token) {\n    if (!this.id_token_encrypted_response_alg) {\n      return token;\n    }\n\n    let idToken = token;\n\n    if (idToken instanceof TokenSet) {\n      if (!idToken.id_token) {\n        throw new TypeError('id_token not present in TokenSet');\n      }\n      idToken = idToken.id_token;\n    }\n\n    const expectedAlg = this.id_token_encrypted_response_alg;\n    const expectedEnc = this.id_token_encrypted_response_enc;\n\n    const result = await this.decryptJWE(idToken, expectedAlg, expectedEnc);\n\n    if (token instanceof TokenSet) {\n      token.id_token = result;\n      return token;\n    }\n\n    return result;\n  }\n\n  async validateJWTUserinfo(body) {\n    const expectedAlg = this.userinfo_signed_response_alg;\n\n    return this.validateJWT(body, expectedAlg, []);\n  }\n\n  async decryptJARM(response) {\n    if (!this.authorization_encrypted_response_alg) {\n      return response;\n    }\n\n    const expectedAlg = this.authorization_encrypted_response_alg;\n    const expectedEnc = this.authorization_encrypted_response_enc;\n\n    return this.decryptJWE(response, expectedAlg, expectedEnc);\n  }\n\n  async decryptJWTUserinfo(body) {\n    if (!this.userinfo_encrypted_response_alg) {\n      return body;\n    }\n\n    const expectedAlg = this.userinfo_encrypted_response_alg;\n    const expectedEnc = this.userinfo_encrypted_response_enc;\n\n    return this.decryptJWE(body, expectedAlg, expectedEnc);\n  }\n\n  async decryptJWE(jwe, expectedAlg, expectedEnc = 'A128CBC-HS256') {\n    const header = JSON.parse(base64url.decode(jwe.split('.')[0]));\n\n    if (header.alg !== expectedAlg) {\n      throw new RPError({\n        printf: ['unexpected JWE alg received, expected %s, got: %s', expectedAlg, header.alg],\n        jwt: jwe,\n      });\n    }\n\n    if (header.enc !== expectedEnc) {\n      throw new RPError({\n        printf: ['unexpected JWE enc received, expected %s, got: %s', expectedEnc, header.enc],\n        jwt: jwe,\n      });\n    }\n\n    const getPlaintext = (result) => new TextDecoder().decode(result.plaintext);\n    let plaintext;\n    if (expectedAlg.match(/^(?:RSA|ECDH)/)) {\n      const keystore = await keystores.get(this);\n\n      const protectedHeader = jose.decodeProtectedHeader(jwe);\n\n      for (const key of keystore.all({\n        ...protectedHeader,\n        use: 'enc',\n      })) {\n        plaintext = await jose\n          .compactDecrypt(jwe, await key.keyObject(protectedHeader.alg))\n          .then(getPlaintext, () => {});\n        if (plaintext) break;\n      }\n    } else {\n      plaintext = await jose\n        .compactDecrypt(jwe, this.secretForAlg(expectedAlg === 'dir' ? expectedEnc : expectedAlg))\n        .then(getPlaintext, () => {});\n    }\n\n    if (!plaintext) {\n      throw new RPError({\n        message: 'failed to decrypt JWE',\n        jwt: jwe,\n      });\n    }\n    return plaintext;\n  }\n\n  async validateIdToken(tokenSet, nonce, returnedBy, maxAge, state) {\n    let idToken = tokenSet;\n\n    const expectedAlg = this.id_token_signed_response_alg;\n\n    const isTokenSet = idToken instanceof TokenSet;\n\n    if (isTokenSet) {\n      if (!idToken.id_token) {\n        throw new TypeError('id_token not present in TokenSet');\n      }\n      idToken = idToken.id_token;\n    }\n\n    idToken = String(idToken);\n\n    const timestamp = now();\n    const { protected: header, payload, key } = await this.validateJWT(idToken, expectedAlg);\n\n    if (typeof maxAge === 'number' || (maxAge !== skipMaxAgeCheck && this.require_auth_time)) {\n      if (!payload.auth_time) {\n        throw new RPError({\n          message: 'missing required JWT property auth_time',\n          jwt: idToken,\n        });\n      }\n      if (typeof payload.auth_time !== 'number') {\n        throw new RPError({\n          message: 'JWT auth_time claim must be a JSON numeric value',\n          jwt: idToken,\n        });\n      }\n    }\n\n    if (\n      typeof maxAge === 'number' &&\n      payload.auth_time + maxAge < timestamp - this[CLOCK_TOLERANCE]\n    ) {\n      throw new RPError({\n        printf: [\n          'too much time has elapsed since the last End-User authentication, max_age %i, auth_time: %i, now %i',\n          maxAge,\n          payload.auth_time,\n          timestamp - this[CLOCK_TOLERANCE],\n        ],\n        now: timestamp,\n        tolerance: this[CLOCK_TOLERANCE],\n        auth_time: payload.auth_time,\n        jwt: idToken,\n      });\n    }\n\n    if (\n      nonce !== skipNonceCheck &&\n      (payload.nonce || nonce !== undefined) &&\n      payload.nonce !== nonce\n    ) {\n      throw new RPError({\n        printf: ['nonce mismatch, expected %s, got: %s', nonce, payload.nonce],\n        jwt: idToken,\n      });\n    }\n\n    if (returnedBy === 'authorization') {\n      if (!payload.at_hash && tokenSet.access_token) {\n        throw new RPError({\n          message: 'missing required property at_hash',\n          jwt: idToken,\n        });\n      }\n\n      if (!payload.c_hash && tokenSet.code) {\n        throw new RPError({\n          message: 'missing required property c_hash',\n          jwt: idToken,\n        });\n      }\n\n      if (this.fapi1()) {\n        if (!payload.s_hash && (tokenSet.state || state)) {\n          throw new RPError({\n            message: 'missing required property s_hash',\n            jwt: idToken,\n          });\n        }\n      }\n\n      if (payload.s_hash) {\n        if (!state) {\n          throw new TypeError('cannot verify s_hash, \"checks.state\" property not provided');\n        }\n\n        try {\n          tokenHash.validate(\n            { claim: 's_hash', source: 'state' },\n            payload.s_hash,\n            state,\n            header.alg,\n            key.jwk && key.jwk.crv,\n          );\n        } catch (err) {\n          throw new RPError({ message: err.message, jwt: idToken });\n        }\n      }\n    }\n\n    if (this.fapi() && payload.iat < timestamp - 3600) {\n      throw new RPError({\n        printf: ['JWT issued too far in the past, now %i, iat %i', timestamp, payload.iat],\n        now: timestamp,\n        tolerance: this[CLOCK_TOLERANCE],\n        iat: payload.iat,\n        jwt: idToken,\n      });\n    }\n\n    if (tokenSet.access_token && payload.at_hash !== undefined) {\n      try {\n        tokenHash.validate(\n          { claim: 'at_hash', source: 'access_token' },\n          payload.at_hash,\n          tokenSet.access_token,\n          header.alg,\n          key.jwk && key.jwk.crv,\n        );\n      } catch (err) {\n        throw new RPError({ message: err.message, jwt: idToken });\n      }\n    }\n\n    if (tokenSet.code && payload.c_hash !== undefined) {\n      try {\n        tokenHash.validate(\n          { claim: 'c_hash', source: 'code' },\n          payload.c_hash,\n          tokenSet.code,\n          header.alg,\n          key.jwk && key.jwk.crv,\n        );\n      } catch (err) {\n        throw new RPError({ message: err.message, jwt: idToken });\n      }\n    }\n\n    return tokenSet;\n  }\n\n  async validateJWT(jwt, expectedAlg, required = ['iss', 'sub', 'aud', 'exp', 'iat']) {\n    const isSelfIssued = this.issuer.issuer === 'https://self-issued.me';\n    const timestamp = now();\n    let header;\n    let payload;\n    try {\n      ({ header, payload } = decodeJWT(jwt, { complete: true }));\n    } catch (err) {\n      throw new RPError({\n        printf: ['failed to decode JWT (%s: %s)', err.name, err.message],\n        jwt,\n      });\n    }\n\n    if (header.alg !== expectedAlg) {\n      throw new RPError({\n        printf: ['unexpected JWT alg received, expected %s, got: %s', expectedAlg, header.alg],\n        jwt,\n      });\n    }\n\n    if (isSelfIssued) {\n      required = [...required, 'sub_jwk'];\n    }\n\n    required.forEach(verifyPresence.bind(undefined, payload, jwt));\n\n    if (payload.iss !== undefined) {\n      let expectedIss = this.issuer.issuer;\n\n      if (this.#aadIssValidation) {\n        expectedIss = this.issuer.issuer.replace('{tenantid}', payload.tid);\n      }\n\n      if (payload.iss !== expectedIss) {\n        throw new RPError({\n          printf: ['unexpected iss value, expected %s, got: %s', expectedIss, payload.iss],\n          jwt,\n        });\n      }\n    }\n\n    if (payload.iat !== undefined) {\n      if (typeof payload.iat !== 'number') {\n        throw new RPError({\n          message: 'JWT iat claim must be a JSON numeric value',\n          jwt,\n        });\n      }\n    }\n\n    if (payload.nbf !== undefined) {\n      if (typeof payload.nbf !== 'number') {\n        throw new RPError({\n          message: 'JWT nbf claim must be a JSON numeric value',\n          jwt,\n        });\n      }\n      if (payload.nbf > timestamp + this[CLOCK_TOLERANCE]) {\n        throw new RPError({\n          printf: [\n            'JWT not active yet, now %i, nbf %i',\n            timestamp + this[CLOCK_TOLERANCE],\n            payload.nbf,\n          ],\n          now: timestamp,\n          tolerance: this[CLOCK_TOLERANCE],\n          nbf: payload.nbf,\n          jwt,\n        });\n      }\n    }\n\n    if (payload.exp !== undefined) {\n      if (typeof payload.exp !== 'number') {\n        throw new RPError({\n          message: 'JWT exp claim must be a JSON numeric value',\n          jwt,\n        });\n      }\n      if (timestamp - this[CLOCK_TOLERANCE] >= payload.exp) {\n        throw new RPError({\n          printf: ['JWT expired, now %i, exp %i', timestamp - this[CLOCK_TOLERANCE], payload.exp],\n          now: timestamp,\n          tolerance: this[CLOCK_TOLERANCE],\n          exp: payload.exp,\n          jwt,\n        });\n      }\n    }\n\n    if (payload.aud !== undefined) {\n      if (Array.isArray(payload.aud)) {\n        if (payload.aud.length > 1 && !payload.azp) {\n          throw new RPError({\n            message: 'missing required JWT property azp',\n            jwt,\n          });\n        }\n\n        if (!payload.aud.includes(this.client_id)) {\n          throw new RPError({\n            printf: [\n              'aud is missing the client_id, expected %s to be included in %j',\n              this.client_id,\n              payload.aud,\n            ],\n            jwt,\n          });\n        }\n      } else if (payload.aud !== this.client_id) {\n        throw new RPError({\n          printf: ['aud mismatch, expected %s, got: %s', this.client_id, payload.aud],\n          jwt,\n        });\n      }\n    }\n\n    if (payload.azp !== undefined) {\n      let additionalAuthorizedParties = this.#additionalAuthorizedParties;\n\n      if (typeof additionalAuthorizedParties === 'string') {\n        additionalAuthorizedParties = [this.client_id, additionalAuthorizedParties];\n      } else if (Array.isArray(additionalAuthorizedParties)) {\n        additionalAuthorizedParties = [this.client_id, ...additionalAuthorizedParties];\n      } else {\n        additionalAuthorizedParties = [this.client_id];\n      }\n\n      if (!additionalAuthorizedParties.includes(payload.azp)) {\n        throw new RPError({\n          printf: ['azp mismatch, got: %s', payload.azp],\n          jwt,\n        });\n      }\n    }\n\n    let keys;\n\n    if (isSelfIssued) {\n      try {\n        assert(isPlainObject(payload.sub_jwk));\n        const key = await jose.importJWK(payload.sub_jwk, header.alg);\n        assert.equal(key.type, 'public');\n        keys = [\n          {\n            keyObject() {\n              return key;\n            },\n          },\n        ];\n      } catch (err) {\n        throw new RPError({\n          message: 'failed to use sub_jwk claim as an asymmetric JSON Web Key',\n          jwt,\n        });\n      }\n      if ((await jose.calculateJwkThumbprint(payload.sub_jwk)) !== payload.sub) {\n        throw new RPError({\n          message: 'failed to match the subject with sub_jwk',\n          jwt,\n        });\n      }\n    } else if (header.alg.startsWith('HS')) {\n      keys = [this.secretForAlg(header.alg)];\n    } else if (header.alg !== 'none') {\n      keys = await queryKeyStore.call(this.issuer, { ...header, use: 'sig' });\n    }\n\n    if (!keys && header.alg === 'none') {\n      return { protected: header, payload };\n    }\n\n    for (const key of keys) {\n      const verified = await jose\n        .compactVerify(jwt, key instanceof Uint8Array ? key : await key.keyObject(header.alg))\n        .catch(() => {});\n      if (verified) {\n        return {\n          payload,\n          protected: verified.protectedHeader,\n          key,\n        };\n      }\n    }\n\n    throw new RPError({\n      message: 'failed to validate JWT signature',\n      jwt,\n    });\n  }\n\n  async refresh(refreshToken, { exchangeBody, clientAssertionPayload, DPoP } = {}) {\n    let token = refreshToken;\n\n    if (token instanceof TokenSet) {\n      if (!token.refresh_token) {\n        throw new TypeError('refresh_token not present in TokenSet');\n      }\n      token = token.refresh_token;\n    }\n\n    const tokenset = await this.grant(\n      {\n        ...exchangeBody,\n        grant_type: 'refresh_token',\n        refresh_token: String(token),\n      },\n      { clientAssertionPayload, DPoP },\n    );\n\n    if (tokenset.id_token) {\n      await this.decryptIdToken(tokenset);\n      await this.validateIdToken(tokenset, skipNonceCheck, 'token', skipMaxAgeCheck);\n\n      if (refreshToken instanceof TokenSet && refreshToken.id_token) {\n        const expectedSub = refreshToken.claims().sub;\n        const actualSub = tokenset.claims().sub;\n        if (actualSub !== expectedSub) {\n          throw new RPError({\n            printf: ['sub mismatch, expected %s, got: %s', expectedSub, actualSub],\n            jwt: tokenset.id_token,\n          });\n        }\n      }\n    }\n\n    return tokenset;\n  }\n\n  async requestResource(\n    resourceUrl,\n    accessToken,\n    {\n      method,\n      headers,\n      body,\n      DPoP,\n      tokenType = DPoP\n        ? 'DPoP'\n        : accessToken instanceof TokenSet\n        ? accessToken.token_type\n        : 'Bearer',\n    } = {},\n    retry,\n  ) {\n    if (accessToken instanceof TokenSet) {\n      if (!accessToken.access_token) {\n        throw new TypeError('access_token not present in TokenSet');\n      }\n      accessToken = accessToken.access_token;\n    }\n\n    if (!accessToken) {\n      throw new TypeError('no access token provided');\n    } else if (typeof accessToken !== 'string') {\n      throw new TypeError('invalid access token provided');\n    }\n\n    const requestOpts = {\n      headers: {\n        Authorization: authorizationHeaderValue(accessToken, tokenType),\n        ...headers,\n      },\n      body,\n    };\n\n    const mTLS = !!this.tls_client_certificate_bound_access_tokens;\n\n    const response = await request.call(\n      this,\n      {\n        ...requestOpts,\n        responseType: 'buffer',\n        method,\n        url: resourceUrl,\n      },\n      { accessToken, mTLS, DPoP },\n    );\n\n    const wwwAuthenticate = response.headers['www-authenticate'];\n    if (\n      retry !== retryAttempt &&\n      wwwAuthenticate &&\n      wwwAuthenticate.toLowerCase().startsWith('dpop ') &&\n      parseWwwAuthenticate(wwwAuthenticate).error === 'use_dpop_nonce'\n    ) {\n      return this.requestResource(resourceUrl, accessToken, {\n        method,\n        headers,\n        body,\n        DPoP,\n        tokenType,\n      });\n    }\n\n    return response;\n  }\n\n  async userinfo(accessToken, { method = 'GET', via = 'header', tokenType, params, DPoP } = {}) {\n    assertIssuerConfiguration(this.issuer, 'userinfo_endpoint');\n    const options = {\n      tokenType,\n      method: String(method).toUpperCase(),\n      DPoP,\n    };\n\n    if (options.method !== 'GET' && options.method !== 'POST') {\n      throw new TypeError('#userinfo() method can only be POST or a GET');\n    }\n\n    if (via === 'body' && options.method !== 'POST') {\n      throw new TypeError('can only send body on POST');\n    }\n\n    const jwt = !!(this.userinfo_signed_response_alg || this.userinfo_encrypted_response_alg);\n\n    if (jwt) {\n      options.headers = { Accept: 'application/jwt' };\n    } else {\n      options.headers = { Accept: 'application/json' };\n    }\n    const mTLS = !!this.tls_client_certificate_bound_access_tokens;\n\n    let targetUrl;\n    if (mTLS && this.issuer.mtls_endpoint_aliases) {\n      targetUrl = this.issuer.mtls_endpoint_aliases.userinfo_endpoint;\n    }\n\n    targetUrl = new URL(targetUrl || this.issuer.userinfo_endpoint);\n\n    if (via === 'body') {\n      options.headers.Authorization = undefined;\n      options.headers['Content-Type'] = 'application/x-www-form-urlencoded';\n      options.body = new URLSearchParams();\n      options.body.append(\n        'access_token',\n        accessToken instanceof TokenSet ? accessToken.access_token : accessToken,\n      );\n    }\n\n    // handle additional parameters, GET via querystring, POST via urlencoded body\n    if (params) {\n      if (options.method === 'GET') {\n        Object.entries(params).forEach(([key, value]) => {\n          targetUrl.searchParams.append(key, value);\n        });\n      } else if (options.body) {\n        // POST && via body\n        Object.entries(params).forEach(([key, value]) => {\n          options.body.append(key, value);\n        });\n      } else {\n        // POST && via header\n        options.body = new URLSearchParams();\n        options.headers['Content-Type'] = 'application/x-www-form-urlencoded';\n        Object.entries(params).forEach(([key, value]) => {\n          options.body.append(key, value);\n        });\n      }\n    }\n\n    if (options.body) {\n      options.body = options.body.toString();\n    }\n\n    const response = await this.requestResource(targetUrl, accessToken, options);\n\n    let parsed = processResponse(response, { bearer: true });\n\n    if (jwt) {\n      if (!/^application\\/jwt/.test(response.headers['content-type'])) {\n        throw new RPError({\n          message: 'expected application/jwt response from the userinfo_endpoint',\n          response,\n        });\n      }\n\n      const body = response.body.toString();\n      const userinfo = await this.decryptJWTUserinfo(body);\n      if (!this.userinfo_signed_response_alg) {\n        try {\n          parsed = JSON.parse(userinfo);\n          assert(isPlainObject(parsed));\n        } catch (err) {\n          throw new RPError({\n            message: 'failed to parse userinfo JWE payload as JSON',\n            jwt: userinfo,\n          });\n        }\n      } else {\n        ({ payload: parsed } = await this.validateJWTUserinfo(userinfo));\n      }\n    } else {\n      try {\n        parsed = JSON.parse(response.body);\n      } catch (err) {\n        Object.defineProperty(err, 'response', { value: response });\n        throw err;\n      }\n    }\n\n    if (accessToken instanceof TokenSet && accessToken.id_token) {\n      const expectedSub = accessToken.claims().sub;\n      if (parsed.sub !== expectedSub) {\n        throw new RPError({\n          printf: ['userinfo sub mismatch, expected %s, got: %s', expectedSub, parsed.sub],\n          body: parsed,\n          jwt: accessToken.id_token,\n        });\n      }\n    }\n\n    return parsed;\n  }\n\n  encryptionSecret(len) {\n    const hash = len <= 256 ? 'sha256' : len <= 384 ? 'sha384' : len <= 512 ? 'sha512' : false;\n    if (!hash) {\n      throw new Error('unsupported symmetric encryption key derivation');\n    }\n\n    return crypto\n      .createHash(hash)\n      .update(this.client_secret)\n      .digest()\n      .slice(0, len / 8);\n  }\n\n  secretForAlg(alg) {\n    if (!this.client_secret) {\n      throw new TypeError('client_secret is required');\n    }\n\n    if (/^A(\\d{3})(?:GCM)?KW$/.test(alg)) {\n      return this.encryptionSecret(parseInt(RegExp.$1, 10));\n    }\n\n    if (/^A(\\d{3})(?:GCM|CBC-HS(\\d{3}))$/.test(alg)) {\n      return this.encryptionSecret(parseInt(RegExp.$2 || RegExp.$1, 10));\n    }\n\n    return new TextEncoder().encode(this.client_secret);\n  }\n\n  async grant(body, { clientAssertionPayload, DPoP } = {}, retry) {\n    assertIssuerConfiguration(this.issuer, 'token_endpoint');\n    const response = await authenticatedPost.call(\n      this,\n      'token',\n      {\n        form: body,\n        responseType: 'json',\n      },\n      { clientAssertionPayload, DPoP },\n    );\n    let responseBody;\n    try {\n      responseBody = processResponse(response);\n    } catch (err) {\n      if (retry !== retryAttempt && err instanceof OPError && err.error === 'use_dpop_nonce') {\n        return this.grant(body, { clientAssertionPayload, DPoP }, retryAttempt);\n      }\n      throw err;\n    }\n\n    return new TokenSet(responseBody);\n  }\n\n  async deviceAuthorization(params = {}, { exchangeBody, clientAssertionPayload, DPoP } = {}) {\n    assertIssuerConfiguration(this.issuer, 'device_authorization_endpoint');\n    assertIssuerConfiguration(this.issuer, 'token_endpoint');\n\n    const body = authorizationParams.call(this, {\n      client_id: this.client_id,\n      redirect_uri: null,\n      response_type: null,\n      ...params,\n    });\n\n    const response = await authenticatedPost.call(\n      this,\n      'device_authorization',\n      {\n        responseType: 'json',\n        form: body,\n      },\n      { clientAssertionPayload, endpointAuthMethod: 'token' },\n    );\n    const responseBody = processResponse(response);\n\n    return new DeviceFlowHandle({\n      client: this,\n      exchangeBody,\n      clientAssertionPayload,\n      response: responseBody,\n      maxAge: params.max_age,\n      DPoP,\n    });\n  }\n\n  async revoke(token, hint, { revokeBody, clientAssertionPayload } = {}) {\n    assertIssuerConfiguration(this.issuer, 'revocation_endpoint');\n    if (hint !== undefined && typeof hint !== 'string') {\n      throw new TypeError('hint must be a string');\n    }\n\n    const form = { ...revokeBody, token };\n\n    if (hint) {\n      form.token_type_hint = hint;\n    }\n\n    const response = await authenticatedPost.call(\n      this,\n      'revocation',\n      {\n        form,\n      },\n      { clientAssertionPayload },\n    );\n    processResponse(response, { body: false });\n  }\n\n  async introspect(token, hint, { introspectBody, clientAssertionPayload } = {}) {\n    assertIssuerConfiguration(this.issuer, 'introspection_endpoint');\n    if (hint !== undefined && typeof hint !== 'string') {\n      throw new TypeError('hint must be a string');\n    }\n\n    const form = { ...introspectBody, token };\n    if (hint) {\n      form.token_type_hint = hint;\n    }\n\n    const response = await authenticatedPost.call(\n      this,\n      'introspection',\n      { form, responseType: 'json' },\n      { clientAssertionPayload },\n    );\n\n    const responseBody = processResponse(response);\n\n    return responseBody;\n  }\n\n  static async register(metadata, options = {}) {\n    const { initialAccessToken, jwks, ...clientOptions } = options;\n\n    assertIssuerConfiguration(this.issuer, 'registration_endpoint');\n\n    if (jwks !== undefined && !(metadata.jwks || metadata.jwks_uri)) {\n      const keystore = await getKeystore.call(this, jwks);\n      metadata.jwks = keystore.toJWKS();\n    }\n\n    const response = await request.call(this, {\n      headers: {\n        Accept: 'application/json',\n        ...(initialAccessToken\n          ? {\n              Authorization: authorizationHeaderValue(initialAccessToken),\n            }\n          : undefined),\n      },\n      responseType: 'json',\n      json: metadata,\n      url: this.issuer.registration_endpoint,\n      method: 'POST',\n    });\n    const responseBody = processResponse(response, { statusCode: 201, bearer: true });\n\n    return new this(responseBody, jwks, clientOptions);\n  }\n\n  get metadata() {\n    return clone(Object.fromEntries(this.#metadata.entries()));\n  }\n\n  static async fromUri(registrationClientUri, registrationAccessToken, jwks, clientOptions) {\n    const response = await request.call(this, {\n      method: 'GET',\n      url: registrationClientUri,\n      responseType: 'json',\n      headers: {\n        Authorization: authorizationHeaderValue(registrationAccessToken),\n        Accept: 'application/json',\n      },\n    });\n    const responseBody = processResponse(response, { bearer: true });\n\n    return new this(responseBody, jwks, clientOptions);\n  }\n\n  async requestObject(\n    requestObject = {},\n    {\n      sign: signingAlgorithm = this.request_object_signing_alg || 'none',\n      encrypt: {\n        alg: eKeyManagement = this.request_object_encryption_alg,\n        enc: eContentEncryption = this.request_object_encryption_enc || 'A128CBC-HS256',\n      } = {},\n    } = {},\n  ) {\n    if (!isPlainObject(requestObject)) {\n      throw new TypeError('requestObject must be a plain object');\n    }\n\n    let signed;\n    let key;\n    const unix = now();\n    const header = { alg: signingAlgorithm, typ: 'oauth-authz-req+jwt' };\n    const payload = JSON.stringify(\n      defaults({}, requestObject, {\n        iss: this.client_id,\n        aud: this.issuer.issuer,\n        client_id: this.client_id,\n        jti: random(),\n        iat: unix,\n        exp: unix + 300,\n        ...(this.fapi() ? { nbf: unix } : undefined),\n      }),\n    );\n    if (signingAlgorithm === 'none') {\n      signed = [base64url.encode(JSON.stringify(header)), base64url.encode(payload), ''].join('.');\n    } else {\n      const symmetric = signingAlgorithm.startsWith('HS');\n      if (symmetric) {\n        key = this.secretForAlg(signingAlgorithm);\n      } else {\n        const keystore = await keystores.get(this);\n\n        if (!keystore) {\n          throw new TypeError(\n            `no keystore present for client, cannot sign using alg ${signingAlgorithm}`,\n          );\n        }\n        key = keystore.get({ alg: signingAlgorithm, use: 'sig' });\n        if (!key) {\n          throw new TypeError(`no key to sign with found for alg ${signingAlgorithm}`);\n        }\n      }\n\n      signed = await new jose.CompactSign(new TextEncoder().encode(payload))\n        .setProtectedHeader({\n          ...header,\n          kid: symmetric ? undefined : key.jwk.kid,\n        })\n        .sign(symmetric ? key : await key.keyObject(signingAlgorithm));\n    }\n\n    if (!eKeyManagement) {\n      return signed;\n    }\n\n    const fields = { alg: eKeyManagement, enc: eContentEncryption, cty: 'oauth-authz-req+jwt' };\n\n    if (fields.alg.match(/^(RSA|ECDH)/)) {\n      [key] = await queryKeyStore.call(\n        this.issuer,\n        { alg: fields.alg, use: 'enc' },\n        { allowMulti: true },\n      );\n    } else {\n      key = this.secretForAlg(fields.alg === 'dir' ? fields.enc : fields.alg);\n    }\n\n    return new jose.CompactEncrypt(new TextEncoder().encode(signed))\n      .setProtectedHeader({\n        ...fields,\n        kid: key instanceof Uint8Array ? undefined : key.jwk.kid,\n      })\n      .encrypt(key instanceof Uint8Array ? key : await key.keyObject(fields.alg));\n  }\n\n  async pushedAuthorizationRequest(params = {}, { clientAssertionPayload } = {}) {\n    assertIssuerConfiguration(this.issuer, 'pushed_authorization_request_endpoint');\n\n    const body = {\n      ...('request' in params ? params : authorizationParams.call(this, params)),\n      client_id: this.client_id,\n    };\n\n    const response = await authenticatedPost.call(\n      this,\n      'pushed_authorization_request',\n      {\n        responseType: 'json',\n        form: body,\n      },\n      { clientAssertionPayload, endpointAuthMethod: 'token' },\n    );\n    const responseBody = processResponse(response, { statusCode: 201 });\n\n    if (!('expires_in' in responseBody)) {\n      throw new RPError({\n        message: 'expected expires_in in Pushed Authorization Successful Response',\n        response,\n      });\n    }\n    if (typeof responseBody.expires_in !== 'number') {\n      throw new RPError({\n        message: 'invalid expires_in value in Pushed Authorization Successful Response',\n        response,\n      });\n    }\n    if (!('request_uri' in responseBody)) {\n      throw new RPError({\n        message: 'expected request_uri in Pushed Authorization Successful Response',\n        response,\n      });\n    }\n    if (typeof responseBody.request_uri !== 'string') {\n      throw new RPError({\n        message: 'invalid request_uri value in Pushed Authorization Successful Response',\n        response,\n      });\n    }\n\n    return responseBody;\n  }\n\n  get issuer() {\n    return this.#issuer;\n  }\n\n  /* istanbul ignore next */\n  [inspect.custom]() {\n    return `${this.constructor.name} ${inspect(this.metadata, {\n      depth: Infinity,\n      colors: process.stdout.isTTY,\n      compact: false,\n      sorted: true,\n    })}`;\n  }\n\n  fapi() {\n    return this.fapi1() || this.fapi2();\n  }\n\n  fapi1() {\n    return this.constructor.name === 'FAPI1Client';\n  }\n\n  fapi2() {\n    return this.constructor.name === 'FAPI2Client';\n  }\n\n  async validateJARM(response) {\n    const expectedAlg = this.authorization_signed_response_alg;\n    const { payload } = await this.validateJWT(response, expectedAlg, ['iss', 'exp', 'aud']);\n    return pickCb(payload);\n  }\n\n  /**\n   * @name dpopProof\n   * @api private\n   */\n  async dpopProof(payload, privateKeyInput, accessToken) {\n    if (!isPlainObject(payload)) {\n      throw new TypeError('payload must be a plain object');\n    }\n\n    let privateKey;\n    if (isKeyObject(privateKeyInput)) {\n      privateKey = privateKeyInput;\n    } else if (privateKeyInput[Symbol.toStringTag] === 'CryptoKey') {\n      privateKey = privateKeyInput;\n    } else if (jose.cryptoRuntime === 'node:crypto') {\n      privateKey = crypto.createPrivateKey(privateKeyInput);\n    } else {\n      throw new TypeError('unrecognized crypto runtime');\n    }\n\n    if (privateKey.type !== 'private') {\n      throw new TypeError('\"DPoP\" option must be a private key');\n    }\n    let alg = determineDPoPAlgorithm.call(this, privateKey, privateKeyInput);\n\n    if (!alg) {\n      throw new TypeError('could not determine DPoP JWS Algorithm');\n    }\n\n    return new jose.SignJWT({\n      ath: accessToken\n        ? base64url.encode(crypto.createHash('sha256').update(accessToken).digest())\n        : undefined,\n      ...payload,\n    })\n      .setProtectedHeader({\n        alg,\n        typ: 'dpop+jwt',\n        jwk: await getJwk(privateKey, privateKeyInput),\n      })\n      .setIssuedAt()\n      .setJti(random())\n      .sign(privateKey);\n  }\n}\n\nfunction determineDPoPAlgorithmFromCryptoKey(cryptoKey) {\n  switch (cryptoKey.algorithm.name) {\n    case 'Ed25519':\n    case 'Ed448':\n      return 'EdDSA';\n    case 'ECDSA': {\n      switch (cryptoKey.algorithm.namedCurve) {\n        case 'P-256':\n          return 'ES256';\n        case 'P-384':\n          return 'ES384';\n        case 'P-521':\n          return 'ES512';\n        default:\n          break;\n      }\n      break;\n    }\n    case 'RSASSA-PKCS1-v1_5':\n      return `RS${cryptoKey.algorithm.hash.name.slice(4)}`;\n    case 'RSA-PSS':\n      return `PS${cryptoKey.algorithm.hash.name.slice(4)}`;\n    default:\n      throw new TypeError('unsupported DPoP private key');\n  }\n}\n\nlet determineDPoPAlgorithm;\nif (jose.cryptoRuntime === 'node:crypto') {\n  determineDPoPAlgorithm = function (privateKey, privateKeyInput) {\n    if (privateKeyInput[Symbol.toStringTag] === 'CryptoKey') {\n      return determineDPoPAlgorithmFromCryptoKey(privateKey);\n    }\n\n    switch (privateKey.asymmetricKeyType) {\n      case 'ed25519':\n      case 'ed448':\n        return 'EdDSA';\n      case 'ec':\n        return determineEcAlgorithm(privateKey, privateKeyInput);\n      case 'rsa':\n      case rsaPssParams && 'rsa-pss':\n        return determineRsaAlgorithm(\n          privateKey,\n          privateKeyInput,\n          this.issuer.dpop_signing_alg_values_supported,\n        );\n      default:\n        throw new TypeError('unsupported DPoP private key');\n    }\n  };\n\n  const RSPS = /^(?:RS|PS)(?:256|384|512)$/;\n  function determineRsaAlgorithm(privateKey, privateKeyInput, valuesSupported) {\n    if (\n      typeof privateKeyInput === 'object' &&\n      privateKeyInput.format === 'jwk' &&\n      privateKeyInput.key &&\n      privateKeyInput.key.alg\n    ) {\n      return privateKeyInput.key.alg;\n    }\n\n    if (Array.isArray(valuesSupported)) {\n      let candidates = valuesSupported.filter(RegExp.prototype.test.bind(RSPS));\n      if (privateKey.asymmetricKeyType === 'rsa-pss') {\n        candidates = candidates.filter((value) => value.startsWith('PS'));\n      }\n      return ['PS256', 'PS384', 'PS512', 'RS256', 'RS384', 'RS384'].find((preferred) =>\n        candidates.includes(preferred),\n      );\n    }\n\n    return 'PS256';\n  }\n\n  const p256 = Buffer.from([42, 134, 72, 206, 61, 3, 1, 7]);\n  const p384 = Buffer.from([43, 129, 4, 0, 34]);\n  const p521 = Buffer.from([43, 129, 4, 0, 35]);\n  const secp256k1 = Buffer.from([43, 129, 4, 0, 10]);\n\n  function determineEcAlgorithm(privateKey, privateKeyInput) {\n    // If input was a JWK\n    switch (\n      typeof privateKeyInput === 'object' &&\n      typeof privateKeyInput.key === 'object' &&\n      privateKeyInput.key.crv\n    ) {\n      case 'P-256':\n        return 'ES256';\n      case 'secp256k1':\n        return 'ES256K';\n      case 'P-384':\n        return 'ES384';\n      case 'P-512':\n        return 'ES512';\n      default:\n        break;\n    }\n\n    const buf = privateKey.export({ format: 'der', type: 'pkcs8' });\n    const i = buf[1] < 128 ? 17 : 18;\n    const len = buf[i];\n    const curveOid = buf.slice(i + 1, i + 1 + len);\n    if (curveOid.equals(p256)) {\n      return 'ES256';\n    }\n\n    if (curveOid.equals(p384)) {\n      return 'ES384';\n    }\n    if (curveOid.equals(p521)) {\n      return 'ES512';\n    }\n\n    if (curveOid.equals(secp256k1)) {\n      return 'ES256K';\n    }\n\n    throw new TypeError('unsupported DPoP private key curve');\n  }\n} else {\n  determineDPoPAlgorithm = determineDPoPAlgorithmFromCryptoKey;\n}\n\nconst jwkCache = new WeakMap();\nasync function getJwk(keyObject, privateKeyInput) {\n  if (\n    jose.cryptoRuntime === 'node:crypto' &&\n    typeof privateKeyInput === 'object' &&\n    typeof privateKeyInput.key === 'object' &&\n    privateKeyInput.format === 'jwk'\n  ) {\n    return pick(privateKeyInput.key, 'kty', 'crv', 'x', 'y', 'e', 'n');\n  }\n\n  if (jwkCache.has(privateKeyInput)) {\n    return jwkCache.get(privateKeyInput);\n  }\n\n  const jwk = pick(await jose.exportJWK(keyObject), 'kty', 'crv', 'x', 'y', 'e', 'n');\n\n  if (isKeyObject(privateKeyInput) || jose.cryptoRuntime === 'WebCryptoAPI') {\n    jwkCache.set(privateKeyInput, jwk);\n  }\n\n  return jwk;\n}\n\nmodule.exports = (issuer, aadIssValidation = false) =>\n  class Client extends BaseClient {\n    constructor(...args) {\n      super(issuer, aadIssValidation, ...args);\n    }\n\n    static get issuer() {\n      return issuer;\n    }\n  };\n\nmodule.exports.BaseClient = BaseClient;\n", "const LRU = require('lru-cache');\n\nmodule.exports = new LRU({ max: 100 });\n", "// Credit: https://github.com/rohe/pyoidc/blob/master/src/oic/utils/webfinger.py\n\n// -- Normalization --\n// A string of any other type is interpreted as a URI either the form of scheme\n// \"://\" authority path-abempty [ \"?\" query ] [ \"#\" fragment ] or authority\n// path-abempty [ \"?\" query ] [ \"#\" fragment ] per RFC 3986 [RFC3986] and is\n// normalized according to the following rules:\n//\n// If the user input Identifier does not have an RFC 3986 [RFC3986] scheme\n// portion, the string is interpreted as [userinfo \"@\"] host [\":\" port]\n// path-abempty [ \"?\" query ] [ \"#\" fragment ] per RFC 3986 [RFC3986].\n// If the userinfo component is present and all of the path component, query\n// component, and port component are empty, the acct scheme is assumed. In this\n// case, the normalized URI is formed by prefixing acct: to the string as the\n// scheme. Per the 'acct' URI Scheme [I\u2011D.ietf\u2011appsawg\u2011acct\u2011uri], if there is an\n// at-sign character ('@') in the userinfo component, it needs to be\n// percent-encoded as described in RFC 3986 [RFC3986].\n// For all other inputs without a scheme portion, the https scheme is assumed,\n// and the normalized URI is formed by prefixing https:// to the string as the\n// scheme.\n// If the resulting URI contains a fragment portion, it MUST be stripped off\n// together with the fragment delimiter character \"#\".\n// The WebFinger [I\u2011D.ietf\u2011appsawg\u2011webfinger] Resource in this case is the\n// resulting URI, and the WebFinger Host is the authority component.\n//\n// Note: Since the definition of authority in RFC 3986 [RFC3986] is\n// [ userinfo \"@\" ] host [ \":\" port ], it is legal to have a user input\n// identifier like userinfo@host:port, e.g., alice@example.com:8080.\n\nconst PORT = /^\\d+$/;\n\nfunction hasScheme(input) {\n  if (input.includes('://')) return true;\n\n  const authority = input.replace(/(\\/|\\?)/g, '#').split('#')[0];\n  if (authority.includes(':')) {\n    const index = authority.indexOf(':');\n    const hostOrPort = authority.slice(index + 1);\n    if (!PORT.test(hostOrPort)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction acctSchemeAssumed(input) {\n  if (!input.includes('@')) return false;\n  const parts = input.split('@');\n  const host = parts[parts.length - 1];\n  return !(host.includes(':') || host.includes('/') || host.includes('?'));\n}\n\nfunction normalize(input) {\n  if (typeof input !== 'string') {\n    throw new TypeError('input must be a string');\n  }\n\n  let output;\n  if (hasScheme(input)) {\n    output = input;\n  } else if (acctSchemeAssumed(input)) {\n    output = `acct:${input}`;\n  } else {\n    output = `https://${input}`;\n  }\n\n  return output.split('#')[0];\n}\n\nmodule.exports = normalize;\n", "const { inspect } = require('util');\nconst url = require('url');\n\nconst { RPError } = require('./errors');\nconst getClient = require('./client');\nconst registry = require('./issuer_registry');\nconst processResponse = require('./helpers/process_response');\nconst webfingerNormalize = require('./helpers/webfinger_normalize');\nconst request = require('./helpers/request');\nconst clone = require('./helpers/deep_clone');\nconst { keystore } = require('./helpers/issuer');\n\nconst AAD_MULTITENANT_DISCOVERY = [\n  'https://login.microsoftonline.com/common/.well-known/openid-configuration',\n  'https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration',\n  'https://login.microsoftonline.com/organizations/v2.0/.well-known/openid-configuration',\n  'https://login.microsoftonline.com/consumers/v2.0/.well-known/openid-configuration',\n];\nconst AAD_MULTITENANT = Symbol();\nconst ISSUER_DEFAULTS = {\n  claim_types_supported: ['normal'],\n  claims_parameter_supported: false,\n  grant_types_supported: ['authorization_code', 'implicit'],\n  request_parameter_supported: false,\n  request_uri_parameter_supported: true,\n  require_request_uri_registration: false,\n  response_modes_supported: ['query', 'fragment'],\n  token_endpoint_auth_methods_supported: ['client_secret_basic'],\n};\n\nclass Issuer {\n  #metadata;\n  constructor(meta = {}) {\n    const aadIssValidation = meta[AAD_MULTITENANT];\n    delete meta[AAD_MULTITENANT];\n    ['introspection', 'revocation'].forEach((endpoint) => {\n      // if intro/revocation endpoint auth specific meta is missing use the token ones if they\n      // are defined\n      if (\n        meta[`${endpoint}_endpoint`] &&\n        meta[`${endpoint}_endpoint_auth_methods_supported`] === undefined &&\n        meta[`${endpoint}_endpoint_auth_signing_alg_values_supported`] === undefined\n      ) {\n        if (meta.token_endpoint_auth_methods_supported) {\n          meta[`${endpoint}_endpoint_auth_methods_supported`] =\n            meta.token_endpoint_auth_methods_supported;\n        }\n        if (meta.token_endpoint_auth_signing_alg_values_supported) {\n          meta[`${endpoint}_endpoint_auth_signing_alg_values_supported`] =\n            meta.token_endpoint_auth_signing_alg_values_supported;\n        }\n      }\n    });\n\n    this.#metadata = new Map();\n\n    Object.entries(meta).forEach(([key, value]) => {\n      this.#metadata.set(key, value);\n      if (!this[key]) {\n        Object.defineProperty(this, key, {\n          get() {\n            return this.#metadata.get(key);\n          },\n          enumerable: true,\n        });\n      }\n    });\n\n    registry.set(this.issuer, this);\n\n    const Client = getClient(this, aadIssValidation);\n\n    Object.defineProperties(this, {\n      Client: { value: Client, enumerable: true },\n      FAPI1Client: { value: class FAPI1Client extends Client {}, enumerable: true },\n      FAPI2Client: { value: class FAPI2Client extends Client {}, enumerable: true },\n    });\n  }\n\n  get metadata() {\n    return clone(Object.fromEntries(this.#metadata.entries()));\n  }\n\n  static async webfinger(input) {\n    const resource = webfingerNormalize(input);\n    const { host } = url.parse(resource);\n    const webfingerUrl = `https://${host}/.well-known/webfinger`;\n\n    const response = await request.call(this, {\n      method: 'GET',\n      url: webfingerUrl,\n      responseType: 'json',\n      searchParams: { resource, rel: 'http://openid.net/specs/connect/1.0/issuer' },\n      headers: {\n        Accept: 'application/json',\n      },\n    });\n    const body = processResponse(response);\n\n    const location =\n      Array.isArray(body.links) &&\n      body.links.find(\n        (link) =>\n          typeof link === 'object' &&\n          link.rel === 'http://openid.net/specs/connect/1.0/issuer' &&\n          link.href,\n      );\n\n    if (!location) {\n      throw new RPError({\n        message: 'no issuer found in webfinger response',\n        body,\n      });\n    }\n\n    if (typeof location.href !== 'string' || !location.href.startsWith('https://')) {\n      throw new RPError({\n        printf: ['invalid issuer location %s', location.href],\n        body,\n      });\n    }\n\n    const expectedIssuer = location.href;\n    if (registry.has(expectedIssuer)) {\n      return registry.get(expectedIssuer);\n    }\n\n    const issuer = await this.discover(expectedIssuer);\n\n    if (issuer.issuer !== expectedIssuer) {\n      registry.del(issuer.issuer);\n      throw new RPError(\n        'discovered issuer mismatch, expected %s, got: %s',\n        expectedIssuer,\n        issuer.issuer,\n      );\n    }\n    return issuer;\n  }\n\n  static async discover(uri) {\n    const wellKnownUri = resolveWellKnownUri(uri);\n\n    const response = await request.call(this, {\n      method: 'GET',\n      responseType: 'json',\n      url: wellKnownUri,\n      headers: {\n        Accept: 'application/json',\n      },\n    });\n    const body = processResponse(response);\n    return new Issuer({\n      ...ISSUER_DEFAULTS,\n      ...body,\n      [AAD_MULTITENANT]: !!AAD_MULTITENANT_DISCOVERY.find((discoveryURL) =>\n        wellKnownUri.startsWith(discoveryURL),\n      ),\n    });\n  }\n\n  async reloadJwksUri() {\n    await keystore.call(this, true);\n  }\n\n  /* istanbul ignore next */\n  [inspect.custom]() {\n    return `${this.constructor.name} ${inspect(this.metadata, {\n      depth: Infinity,\n      colors: process.stdout.isTTY,\n      compact: false,\n      sorted: true,\n    })}`;\n  }\n}\n\nfunction resolveWellKnownUri(uri) {\n  const parsed = url.parse(uri);\n  if (parsed.pathname.includes('/.well-known/')) {\n    return uri;\n  } else {\n    let pathname;\n    if (parsed.pathname.endsWith('/')) {\n      pathname = `${parsed.pathname}.well-known/openid-configuration`;\n    } else {\n      pathname = `${parsed.pathname}/.well-known/openid-configuration`;\n    }\n    return url.format({ ...parsed, pathname });\n  }\n}\n\nmodule.exports = Issuer;\n", "const url = require('url');\nconst { format } = require('util');\n\nconst cloneDeep = require('./helpers/deep_clone');\nconst { RPError, OPError } = require('./errors');\nconst { BaseClient } = require('./client');\nconst { random, codeChallenge } = require('./helpers/generators');\nconst pick = require('./helpers/pick');\nconst { resolveResponseType, resolveRedirectUri } = require('./helpers/client');\n\nfunction verified(err, user, info = {}) {\n  if (err) {\n    this.error(err);\n  } else if (!user) {\n    this.fail(info);\n  } else {\n    this.success(user, info);\n  }\n}\n\nfunction OpenIDConnectStrategy(\n  { client, params = {}, passReqToCallback = false, sessionKey, usePKCE = true, extras = {} } = {},\n  verify,\n) {\n  if (!(client instanceof BaseClient)) {\n    throw new TypeError('client must be an instance of openid-client Client');\n  }\n\n  if (typeof verify !== 'function') {\n    throw new TypeError('verify callback must be a function');\n  }\n\n  if (!client.issuer || !client.issuer.issuer) {\n    throw new TypeError('client must have an issuer with an identifier');\n  }\n\n  this._client = client;\n  this._issuer = client.issuer;\n  this._verify = verify;\n  this._passReqToCallback = passReqToCallback;\n  this._usePKCE = usePKCE;\n  this._key = sessionKey || `oidc:${url.parse(this._issuer.issuer).hostname}`;\n  this._params = cloneDeep(params);\n\n  // state and nonce are handled in authenticate()\n  delete this._params.state;\n  delete this._params.nonce;\n\n  this._extras = cloneDeep(extras);\n\n  if (!this._params.response_type) this._params.response_type = resolveResponseType.call(client);\n  if (!this._params.redirect_uri) this._params.redirect_uri = resolveRedirectUri.call(client);\n  if (!this._params.scope) this._params.scope = 'openid';\n\n  if (this._usePKCE === true) {\n    const supportedMethods = Array.isArray(this._issuer.code_challenge_methods_supported)\n      ? this._issuer.code_challenge_methods_supported\n      : false;\n\n    if (supportedMethods && supportedMethods.includes('S256')) {\n      this._usePKCE = 'S256';\n    } else if (supportedMethods && supportedMethods.includes('plain')) {\n      this._usePKCE = 'plain';\n    } else if (supportedMethods) {\n      throw new TypeError(\n        'neither code_challenge_method supported by the client is supported by the issuer',\n      );\n    } else {\n      this._usePKCE = 'S256';\n    }\n  } else if (typeof this._usePKCE === 'string' && !['plain', 'S256'].includes(this._usePKCE)) {\n    throw new TypeError(`${this._usePKCE} is not valid/implemented PKCE code_challenge_method`);\n  }\n\n  this.name = url.parse(client.issuer.issuer).hostname;\n}\n\nOpenIDConnectStrategy.prototype.authenticate = function authenticate(req, options) {\n  (async () => {\n    const client = this._client;\n    if (!req.session) {\n      throw new TypeError('authentication requires session support');\n    }\n    const reqParams = client.callbackParams(req);\n    const sessionKey = this._key;\n\n    const { 0: parameter, length } = Object.keys(reqParams);\n\n    /**\n     * Start authentication request if this has no authorization response parameters or\n     * this might a login initiated from a third party as per\n     * https://openid.net/specs/openid-connect-core-1_0.html#ThirdPartyInitiatedLogin.\n     */\n    if (length === 0 || (length === 1 && parameter === 'iss')) {\n      // provide options object with extra authentication parameters\n      const params = {\n        state: random(),\n        ...this._params,\n        ...options,\n      };\n\n      if (!params.nonce && params.response_type.includes('id_token')) {\n        params.nonce = random();\n      }\n\n      req.session[sessionKey] = pick(params, 'nonce', 'state', 'max_age', 'response_type');\n\n      if (this._usePKCE && params.response_type.includes('code')) {\n        const verifier = random();\n        req.session[sessionKey].code_verifier = verifier;\n\n        switch (this._usePKCE) {\n          case 'S256':\n            params.code_challenge = codeChallenge(verifier);\n            params.code_challenge_method = 'S256';\n            break;\n          case 'plain':\n            params.code_challenge = verifier;\n            break;\n        }\n      }\n\n      this.redirect(client.authorizationUrl(params));\n      return;\n    }\n    /* end authentication request */\n\n    /* start authentication response */\n\n    const session = req.session[sessionKey];\n    if (Object.keys(session || {}).length === 0) {\n      throw new Error(\n        format(\n          'did not find expected authorization request details in session, req.session[\"%s\"] is %j',\n          sessionKey,\n          session,\n        ),\n      );\n    }\n\n    const {\n      state,\n      nonce,\n      max_age: maxAge,\n      code_verifier: codeVerifier,\n      response_type: responseType,\n    } = session;\n\n    try {\n      delete req.session[sessionKey];\n    } catch (err) {}\n\n    const opts = {\n      redirect_uri: this._params.redirect_uri,\n      ...options,\n    };\n\n    const checks = {\n      state,\n      nonce,\n      max_age: maxAge,\n      code_verifier: codeVerifier,\n      response_type: responseType,\n    };\n\n    const tokenset = await client.callback(opts.redirect_uri, reqParams, checks, this._extras);\n\n    const passReq = this._passReqToCallback;\n    const loadUserinfo = this._verify.length > (passReq ? 3 : 2) && client.issuer.userinfo_endpoint;\n\n    const args = [tokenset, verified.bind(this)];\n\n    if (loadUserinfo) {\n      if (!tokenset.access_token) {\n        throw new RPError({\n          message:\n            'expected access_token to be returned when asking for userinfo in verify callback',\n          tokenset,\n        });\n      }\n      const userinfo = await client.userinfo(tokenset);\n      args.splice(1, 0, userinfo);\n    }\n\n    if (passReq) {\n      args.unshift(req);\n    }\n\n    this._verify(...args);\n    /* end authentication response */\n  })().catch((error) => {\n    if (\n      (error instanceof OPError &&\n        error.error !== 'server_error' &&\n        !error.error.startsWith('invalid')) ||\n      error instanceof RPError\n    ) {\n      this.fail(error);\n    } else {\n      this.error(error);\n    }\n  });\n};\n\nmodule.exports = OpenIDConnectStrategy;\n", "const Issuer = require('./issuer');\nconst { OPError, RPError } = require('./errors');\nconst Strategy = require('./passport_strategy');\nconst TokenSet = require('./token_set');\nconst { CLOCK_TOLERANCE, HTTP_OPTIONS } = require('./helpers/consts');\nconst generators = require('./helpers/generators');\nconst { setDefaults } = require('./helpers/request');\n\nmodule.exports = {\n  Issuer,\n  Strategy,\n  TokenSet,\n  errors: {\n    OPError,\n    RPError,\n  },\n  custom: {\n    setHttpOptionsDefaults: setDefaults,\n    http_options: HTTP_OPTIONS,\n    clock_tolerance: CLOCK_TOLERANCE,\n  },\n  generators,\n};\n", "import { chalkStderr } from \"chalk\";\nimport * as Sentry from \"@sentry/node\";\nimport { initSentry } from \"./lib/utils/sentry.js\";\nimport { format } from \"util\";\nimport dns from \"node:dns\";\nimport net from \"node:net\";\nimport { setGlobalDispatcher, EnvHttpProxyAgent } from \"undici\";\nimport { logVerbose } from \"../bundler/log.js\";\nimport { buildProgram } from \"./program.js\";\n\nconst HARD_MINIMUM_NODE_MAJOR_VERSION = 22;\nconst HARD_MINIMUM_NODE_MINOR_VERSION = 0;\n\n// console.error before it started being red by default in Node.js v20\nfunction logToStderr(...args: unknown[]) {\n  process.stderr.write(`${format(...args)}\\n`);\n}\n\nasync function main() {\n  const nodeVersion = process.versions.node;\n  const majorVersion = parseInt(nodeVersion.split(\".\")[0], 10);\n  const minorVersion = parseInt(nodeVersion.split(\".\")[1], 10);\n\n  const proxy = process.env.HTTPS_PROXY || process.env.HTTP_PROXY;\n  if (proxy) {\n    setGlobalDispatcher(new EnvHttpProxyAgent());\n    logVerbose(`[proxy-bootstrap] Using proxy: ${proxy}`);\n  }\n\n  // Use ipv4 first for 127.0.0.1 in tests\n  dns.setDefaultResultOrder(\"ipv4first\");\n\n  // Increase the timeout from default 250ms for high latency situations,\n  // see https://github.com/nodejs/node/issues/54359.\n  net.setDefaultAutoSelectFamilyAttemptTimeout?.(1000);\n\n  initSentry();\n\n  if (\n    majorVersion < HARD_MINIMUM_NODE_MAJOR_VERSION ||\n    (majorVersion === HARD_MINIMUM_NODE_MAJOR_VERSION &&\n      minorVersion < HARD_MINIMUM_NODE_MINOR_VERSION)\n  ) {\n    logToStderr(\n      chalkStderr.red(\n        `Your Node version ${nodeVersion} is too old. Convex requires at least Node v${HARD_MINIMUM_NODE_MAJOR_VERSION}.${HARD_MINIMUM_NODE_MINOR_VERSION}`,\n      ),\n    );\n    logToStderr(\n      chalkStderr.gray(\n        `You can use ${chalkStderr.bold(\n          \"nvm\",\n        )} (https://github.com/nvm-sh/nvm#installing-and-updating) to manage different versions of Node.`,\n      ),\n    );\n    logToStderr(\n      chalkStderr.gray(\n        \"After installing `nvm`, install the latest version of Node with \" +\n          chalkStderr.bold(\"`nvm install node`.\"),\n      ),\n    );\n    logToStderr(\n      chalkStderr.gray(\n        \"Then, activate the installed version in your terminal with \" +\n          chalkStderr.bold(\"`nvm use`.\"),\n      ),\n    );\n    process.exit(1);\n  }\n\n  const program = buildProgram();\n\n  // Run the command and be sure to flush Sentry before exiting.\n  try {\n    await program.parseAsync(process.argv);\n  } catch (e) {\n    Sentry.captureException(e);\n    process.exitCode = 1;\n    // This is too early to use `logError`, so just log directly.\n    // eslint-disable-next-line no-console\n    console.error(chalkStderr.red(\"Unexpected Error: \" + e));\n  } finally {\n    await Sentry.close();\n  }\n  // When stdout is a pipe, Node buffers writes and `process.exit()` does not\n  // wait for them to flush \u2014 drain first so piped output isn't truncated.\n  await Promise.all([\n    new Promise<void>((resolve) => process.stdout.write(\"\", () => resolve())),\n    new Promise<void>((resolve) => process.stderr.write(\"\", () => resolve())),\n  ]);\n  process.exit();\n}\nvoid main();\n", "import extraTypingsCommander from './index.js';\n\n// wrapper to provide named exports for ESM.\nexport const {\n  program,\n  createCommand,\n  createArgument,\n  createOption,\n  CommanderError,\n  InvalidArgumentError,\n  InvalidOptionArgumentError, // deprecated old name\n  Command,\n  Argument,\n  Option,\n  Help,\n} = extraTypingsCommander;\n", "import path from \"path\";\nimport { Command } from \"@commander-js/extra-typings\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../bundler/log.js\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { readProjectConfig } from \"./lib/config.js\";\nimport { functionsDir } from \"./lib/utils/utils.js\";\nimport {\n  installAiFiles,\n  enableAiFiles,\n  disableAiFiles,\n  removeAiFiles,\n} from \"./lib/aiFiles/index.js\";\nimport { statusAiFiles } from \"./lib/aiFiles/status.js\";\nimport { writeAiFilesConfig } from \"./lib/config.js\";\n\nasync function resolveProjectPaths() {\n  const ctx = await oneoffContext({});\n  const { configPath, projectConfig } = await readProjectConfig(ctx);\n  const convexDir = path.resolve(functionsDir(configPath, projectConfig));\n  const projectDir = path.resolve(path.dirname(configPath));\n  const aiFilesConfig = projectConfig.aiFiles;\n  return { ctx, projectDir, convexDir, aiFilesConfig, projectConfig };\n}\n\nconst aiInstall = new Command(\"install\")\n  .summary(\"Install or refresh Convex AI files\")\n  .description(\n    \"Installs the following (or refreshes them if already present):\\n\" +\n      \"  - convex/_generated/ai/guidelines.md\\n\" +\n      \"  - AGENTS.md (Convex section only)\\n\" +\n      \"  - CLAUDE.md (Convex section only)\\n\" +\n      \"  - Agent skills (installed to each coding agent's native path, configured via convex.json)\",\n  )\n  .allowExcessArguments(false)\n  .action(async () => {\n    const { ctx, projectDir, convexDir, aiFilesConfig } =\n      await resolveProjectPaths();\n\n    const result = await installAiFiles({\n      projectDir,\n      convexDir,\n      aiFilesConfig,\n    });\n\n    if (result.kind === \"error\") {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: result.message,\n      });\n    }\n\n    logMessage(`${chalkStderr.green(\"\u2714\")} Convex AI files installed.`);\n  });\n\nconst aiEnable = new Command(\"enable\")\n  .summary(\"Enable Convex AI files\")\n  .description(\n    \"Re-enables Convex AI files by writing `aiFiles.enabled: true` to\\n\" +\n      \"`convex.json`, then installs or refreshes the managed AI files.\",\n  )\n  .allowExcessArguments(false)\n  .action(async () => {\n    const { projectDir, convexDir, aiFilesConfig } =\n      await resolveProjectPaths();\n\n    const newAiFilesConfig = await enableAiFiles({\n      projectDir,\n      convexDir,\n      aiFilesConfig,\n    });\n\n    await writeAiFilesConfig({ projectDir, aiFiles: newAiFilesConfig });\n  });\n\nconst aiUpdate = new Command(\"update\")\n  .summary(\"Update Convex AI files to the latest version\")\n  .description(\n    \"Updates the following to their latest versions:\\n\" +\n      \"  - convex/_generated/ai/guidelines.md\\n\" +\n      \"  - AGENTS.md (Convex section only)\\n\" +\n      \"  - CLAUDE.md (Convex section only)\\n\" +\n      \"  - Agent skills (installed to each coding agent's native path, configured via convex.json)\",\n  )\n  .allowExcessArguments(false)\n  .action(async () => {\n    const { ctx, projectDir, convexDir, aiFilesConfig } =\n      await resolveProjectPaths();\n\n    const result = await installAiFiles({\n      projectDir,\n      convexDir,\n      aiFilesConfig,\n    });\n\n    if (result.kind === \"error\") {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: result.message,\n      });\n    }\n\n    logMessage(`${chalkStderr.green(\"\u2714\")} Convex AI files updated.`);\n  });\n\nconst aiDisable = new Command(\"disable\")\n  .summary(\"Disable Convex AI files without removing them\")\n  .description(\n    \"Writes `aiFiles.enabled: false` to `convex.json` so `npx convex dev`\\n\" +\n      \"stops prompting to install AI files and suppresses staleness messages.\\n\\n\" +\n      \"Files already installed are left untouched - use `npx convex ai-files remove`\\n\" +\n      \"if you also want to delete them.\\n\\n\" +\n      \"Run `npx convex ai-files enable` to re-enable at any time.\",\n  )\n  .allowExcessArguments(false)\n  .action(async () => {\n    const { projectDir, aiFilesConfig } = await resolveProjectPaths();\n\n    const newAiFilesConfig = disableAiFiles(aiFilesConfig);\n\n    await writeAiFilesConfig({\n      projectDir,\n      aiFiles: newAiFilesConfig,\n    });\n\n    logMessage(\n      `${chalkStderr.green(`\u2714`)} Convex AI files disabled. Run ${chalkStderr.bold(`npx convex ai-files enable`)} to re-enable.`,\n    );\n  });\n\nconst aiStatus = new Command(\"status\")\n  .summary(\"Show the current status of Convex AI files\")\n  .description(\n    \"Prints whether Convex AI files are enabled, and for each component:\\n\" +\n      \"  - convex/_generated/ai/guidelines.md\\n\" +\n      \"  - AGENTS.md (Convex section)\\n\" +\n      \"  - CLAUDE.md (if installed by Convex)\\n\" +\n      \"  - Agent skills\\n\\n\" +\n      \"Fetches the latest hashes from version.convex.dev to report whether\\n\" +\n      \"each file is up to date. If the network is unavailable the staleness\\n\" +\n      \"check is skipped silently.\",\n  )\n  .allowExcessArguments(false)\n  .action(async () => {\n    const { projectDir, convexDir, aiFilesConfig } =\n      await resolveProjectPaths();\n\n    await statusAiFiles({ projectDir, convexDir, aiFilesConfig });\n  });\n\nconst aiRemove = new Command(\"remove\")\n  .summary(\"Remove all Convex AI files from the project\")\n  .description(\n    \"Removes the following:\\n\" +\n      \"  - convex/_generated/ai/ directory (guidelines.md, ai-files.state.json)\\n\" +\n      \"  - Convex sections from AGENTS.md and CLAUDE.md\\n\" +\n      \"  - Agent skills installed by `npx convex ai-files install`\\n\\n\" +\n      \"If removing the managed section leaves AGENTS.md or CLAUDE.md empty, the\\n\" +\n      \"empty file is deleted. Otherwise the rest of the file is kept.\\n\\n\" +\n      \"Skills installed from other sources are not affected.\\n\\n\" +\n      \"Note: after `remove`, `npx convex dev` will suggest reinstalling AI files.\\n\" +\n      \"Use `npx convex ai-files disable` to opt out entirely without deleting files.\",\n  )\n  .allowExcessArguments(false)\n  .action(async () => {\n    const { ctx, projectDir, convexDir } = await resolveProjectPaths();\n    const result = await removeAiFiles({ projectDir, convexDir });\n    if (result.kind === \"error\") {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: result.message,\n      });\n    }\n  });\n\nexport const aiFiles = new Command(\"ai-files\")\n  .summary(\"Manage Convex AI files\")\n  .description(\n    \"Convex AI files help AI coding assistants (Cursor, Claude Code, etc.) understand\\n\" +\n      \"Convex patterns and APIs. They are set up during your first `npx convex dev`\\n\" +\n      \"and can be managed at any time with the commands below.\",\n  )\n  .addCommand(aiStatus)\n  .addCommand(aiInstall)\n  .addCommand(aiEnable)\n  .addCommand(aiUpdate)\n  .addCommand(aiDisable)\n  .addCommand(aiRemove)\n  .addHelpCommand(false);\n", "import * as Sentry from \"@sentry/node\";\nimport { Ora } from \"ora\";\nimport { Filesystem, nodeFs } from \"./fs.js\";\nimport { initializeBigBrainAuth } from \"../cli/lib/deploymentSelection.js\";\nimport { detectSuspiciousEnvironmentVariables } from \"../cli/lib/envvars.js\";\nimport { logFailure, logVerbose } from \"./log.js\";\n// How the error should be handled when running `npx convex dev`.\nexport type ErrorType =\n  // The error was likely caused by the state of the developer's local\n  // file system (e.g. `tsc` fails due to a syntax error). The `convex dev`\n  // command will then print out the error and wait for the file to change before\n  // retrying.\n  | \"invalid filesystem data\"\n  // The error was caused by either the local state (ie schema.ts content)\n  // or the state of the db (ie documents not matching the new schema).\n  // The `convex dev` command will wait for either file OR table data change\n  // to retry (if a table name is specified as the value in this Object).\n  | {\n      \"invalid filesystem or db data\": {\n        tableName: string;\n        componentPath?: string;\n      } | null;\n    }\n  // The error was caused by either the local state (ie schema.ts content)\n  // or the state of the deployment environment variables.\n  // The `convex dev` command will wait for either file OR env var change\n  // before retrying.\n  | \"invalid filesystem or env vars\"\n  // The error was some transient issue (e.g. a network\n  // error). This will then cause a retry after an exponential backoff.\n  | \"transient\"\n  // This error was caught, handled, and now all that needs to happen\n  // is for the proces to restart. No error is logged or reported.\n  | \"already handled\"\n  // This error is truly permanent. Exit `npx convex dev` because the\n  // developer will need to take a manual commandline action.\n  | \"fatal\";\n\nexport type BigBrainAuth = {\n  header: string;\n} & (\n  | {\n      kind: \"projectKey\";\n      projectKey: string;\n    }\n  | {\n      kind: \"deploymentKey\";\n      deploymentKey: string;\n    }\n  | {\n      kind: \"previewDeployKey\";\n      previewDeployKey: string;\n    }\n  | {\n      kind: \"accessToken\";\n      accessToken: string;\n    }\n);\n\nexport interface Context {\n  fs: Filesystem;\n  deprecationMessagePrinted: boolean;\n  // Reports to Sentry and either throws FatalError or exits the process.\n  // Prints the `printedMessage` if provided\n  crash(args: {\n    exitCode: number;\n    errorType: ErrorType;\n    errForSentry?: any;\n    printedMessage: string | null;\n  }): Promise<never>;\n  registerCleanup(fn: (exitCode: number, err?: any) => Promise<void>): string;\n  removeCleanup(\n    handle: string,\n  ): (exitCode: number, err?: any) => Promise<void> | null;\n  bigBrainAuth(): BigBrainAuth | null;\n  /**\n   * Prefer using `updateBigBrainAuthAfterLogin` in `deploymentSelection.ts` instead\n   */\n  _updateBigBrainAuth(auth: BigBrainAuth | null): void;\n}\n\nasync function flushAndExit(exitCode: number, err?: any) {\n  if (err) {\n    Sentry.captureException(err);\n  }\n  await Sentry.close();\n  return process.exit(exitCode);\n}\n\nexport type OneoffCtx = Context & {\n  // Generally `ctx.crash` is better to use since it handles printing a message\n  // for the user, and then calls this.\n  //\n  // This function reports to Sentry + exits the process, but does not handle\n  // printing a message for the user.\n  flushAndExit: (exitCode: number, err?: any) => Promise<never>;\n};\n\nclass OneoffContextImpl {\n  private _cleanupFns: Record<\n    string,\n    (exitCode: number, err?: any) => Promise<void>\n  > = {};\n  public fs: Filesystem = nodeFs;\n  public deprecationMessagePrinted: boolean = false;\n  public spinner: Ora | undefined = undefined;\n  private _bigBrainAuth: BigBrainAuth | null = null;\n\n  crash = async (args: {\n    exitCode: number;\n    errorType?: ErrorType;\n    errForSentry?: any;\n    printedMessage: string | null;\n  }) => {\n    if (args.printedMessage !== null) {\n      logFailure(args.printedMessage);\n    }\n    return await this.flushAndExit(args.exitCode, args.errForSentry);\n  };\n  flushAndExit = async (exitCode: number, err?: any) => {\n    logVerbose(\"Flushing and exiting, error:\", err);\n    if (err) {\n      logVerbose(err.stack);\n    }\n    const cleanupFns = this._cleanupFns;\n    // Clear the cleanup functions so that there's no risk of running them twice\n    // if this somehow gets triggered twice.\n    this._cleanupFns = {};\n    const fns = Object.values(cleanupFns);\n    logVerbose(`Running ${fns.length} cleanup functions`);\n    for (const fn of fns) {\n      await fn(exitCode, err);\n    }\n    logVerbose(\"All cleanup functions ran\");\n    return flushAndExit(exitCode, err);\n  };\n  registerCleanup(fn: (exitCode: number, err?: any) => Promise<void>) {\n    const handle = Math.random().toString(36).slice(2);\n    this._cleanupFns[handle] = fn;\n    return handle;\n  }\n  removeCleanup(handle: string) {\n    const value = this._cleanupFns[handle];\n    delete this._cleanupFns[handle];\n    return value ?? null;\n  }\n  bigBrainAuth(): BigBrainAuth | null {\n    return this._bigBrainAuth;\n  }\n  _updateBigBrainAuth(auth: BigBrainAuth | null): void {\n    logVerbose(`Updating big brain auth to ${auth?.kind ?? \"null\"}`);\n    this._bigBrainAuth = auth;\n  }\n}\n\n/**\n * Install a SIGINT handler that gracefully exits via ctx.flushAndExit.\n *\n * `bun run` and `npm run` can deliver a duplicate SIGINT to the child\n * process immediately while the first handler is still starting cleanup:\n *   bun:  https://github.com/oven-sh/bun/issues/14799\n *         https://github.com/oven-sh/bun/issues/11400\n *   npm:  https://github.com/npm/cli/issues/5021\n *         https://github.com/npm/cli/issues/8164\n *         https://github.com/npm/cli/issues/7693\n * We ignore a second signal within 500ms of the first to avoid\n * double-cleanup, but treat a later Ctrl+C as a force-exit escape hatch.\n */\nexport function installSigintHandler(ctx: OneoffCtx) {\n  const DUPLICATE_GRACE_MS = 500;\n  let cleanupStartTime: number | null = null;\n  process.on(\"SIGINT\", async () => {\n    if (cleanupStartTime !== null) {\n      if (Date.now() - cleanupStartTime < DUPLICATE_GRACE_MS) {\n        logVerbose(\n          \"Received SIGINT during cleanup, ignoring duplicate signal...\",\n        );\n        return;\n      }\n      logVerbose(\"Received SIGINT during cleanup, exiting immediately...\");\n      process.exit(130);\n    }\n    cleanupStartTime = Date.now();\n    logVerbose(\"Received SIGINT, cleaning up...\");\n    await ctx.flushAndExit(130);\n  });\n}\n\nexport const oneoffContext: (args: {\n  url?: string | undefined;\n  adminKey?: string | undefined;\n  envFile?: string | undefined;\n}) => Promise<OneoffCtx> = async (args) => {\n  const ctx = new OneoffContextImpl();\n  await detectSuspiciousEnvironmentVariables(\n    ctx,\n    !!process.env.CONVEX_IGNORE_SUSPICIOUS_ENV_VARS,\n  );\n  await initializeBigBrainAuth(ctx, {\n    url: args.url,\n    adminKey: args.adminKey,\n    envFile: args.envFile,\n  });\n  return ctx;\n};\n", "import { ProjectResponse } from \"@convex-dev/platform/managementApi\";\nimport { BigBrainAuth, Context } from \"../../bundler/context.js\";\nimport { logVerbose } from \"../../bundler/log.js\";\nimport {\n  AccountRequiredDeploymentType,\n  DeploymentSelectionOptions,\n  DeploymentSelectionWithinProject,\n  deploymentSelectionWithinProjectFromOptions,\n  DeploymentType,\n  fetchTeamAndProjectForKey,\n  getTeamAndProjectSlugForDeployment,\n  validateDeploymentSelectionForExistingDeployment,\n} from \"./api.js\";\nimport {\n  deploymentNameFromAdminKeyOrCrash,\n  deploymentTypeFromAdminKey,\n  getDeploymentTypeFromConfiguredDeployment,\n  isAnonymousDeployment,\n  isDeploymentKey,\n  isPreviewDeployKey,\n  isProjectKey,\n  stripDeploymentTypePrefix,\n} from \"./deployment.js\";\nimport {\n  parseDeploymentSelector,\n  ParsedDeploymentSelector,\n} from \"./deploymentSelector.js\";\nimport { loadProjectLocalConfig } from \"./localDeployment/filePaths.js\";\nimport {\n  checkLocalConfigMatchesProject,\n  targetProjectForLocalSelector,\n} from \"./localDeployment/projectMismatch.js\";\nimport { chalkStderr } from \"chalk\";\nimport { getBuildEnvironment } from \"./envvars.js\";\nimport { readGlobalConfig } from \"./utils/globalConfig.js\";\nimport {\n  CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n  CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME,\n  CONVEX_DEPLOY_KEY_ENV_VAR_NAME,\n  CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME,\n  CONVEX_SELF_HOSTED_URL_VAR_NAME,\n  ENV_VAR_FILE_PATH,\n  bigBrainAPI,\n  processDeployKeyValue,\n  readDeployKeyFromEnv,\n  typedPlatformClient,\n} from \"./utils/utils.js\";\nimport * as dotenv from \"dotenv\";\n\n// ----------------------------------------------------------------------------\n// Big Brain Auth\n// ----------------------------------------------------------------------------\n\n/**\n * The auth header can be a few different things:\n * * An access token (corresponds to device authorization, usually stored in `~/.convex/config.json`)\n * * A preview deploy key (set via the `CONVEX_DEPLOY_KEY` environment variable)\n * * A project key (set via the `CONVEX_DEPLOY_KEY` environment variable)\n * * A deployment key if a deployment key (set via `CONVEX_DEPLOY_KEY` environment variable)\n *\n * Project keys take precedence over the the access token.\n * Deployment keys take precedence over the the access token.\n * This makes using one of these keys while logged in or logged out work the same.\n *\n * We check for the `CONVEX_DEPLOY_KEY` in the `--env-file` if it's provided.\n * Otherwise, we check in the `.env` and `.env.local` files.\n *\n * If we later prompt for log in, we need to call `ctx.setBigBrainAuthHeader` to\n * update the value.\n *\n * @param ctx\n * @param envFile\n * @returns\n */\nexport async function initializeBigBrainAuth(\n  ctx: Context,\n  initialArgs: {\n    url?: string | undefined;\n    adminKey?: string | undefined;\n    envFile?: string | undefined;\n  },\n): Promise<void> {\n  if (initialArgs.url !== undefined && initialArgs.adminKey !== undefined) {\n    // Do not check any env vars if `url` and `adminKey` are specified via CLI\n    ctx._updateBigBrainAuth(\n      getBigBrainAuth(ctx, {\n        previewDeployKey: null,\n        projectKey: null,\n        deploymentKey: null,\n      }),\n    );\n    return;\n  }\n  if (initialArgs.envFile !== undefined) {\n    const existingFile = ctx.fs.exists(initialArgs.envFile)\n      ? ctx.fs.readUtf8File(initialArgs.envFile)\n      : null;\n    if (existingFile === null) {\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem or env vars\",\n        printedMessage: \"env file does not exist\",\n      });\n    }\n    const config = dotenv.parse(existingFile);\n    const rawDeployKey = readDeployKeyFromEnv((name) => config[name]);\n    const deployKey = await processDeployKeyValue(ctx, rawDeployKey);\n    if (deployKey !== undefined) {\n      const bigBrainAuth = getBigBrainAuth(ctx, {\n        previewDeployKey: isPreviewDeployKey(deployKey) ? deployKey : null,\n        projectKey: isProjectKey(deployKey) ? deployKey : null,\n        deploymentKey: isDeploymentKey(deployKey) ? deployKey : null,\n      });\n      ctx._updateBigBrainAuth(bigBrainAuth);\n      return;\n    }\n    // No deploy key was found in the env file, so fall back on using the global config\n    ctx._updateBigBrainAuth(\n      getBigBrainAuth(ctx, {\n        previewDeployKey: null,\n        projectKey: null,\n        deploymentKey: null,\n      }),\n    );\n    return;\n  }\n  dotenv.config({ path: ENV_VAR_FILE_PATH });\n  dotenv.config();\n  const rawDeployKey = readDeployKeyFromEnv((name) => process.env[name]);\n  const deployKey = await processDeployKeyValue(ctx, rawDeployKey);\n  if (deployKey !== undefined) {\n    const bigBrainAuth = getBigBrainAuth(ctx, {\n      previewDeployKey: isPreviewDeployKey(deployKey) ? deployKey : null,\n      projectKey: isProjectKey(deployKey) ? deployKey : null,\n      deploymentKey: isDeploymentKey(deployKey) ? deployKey : null,\n    });\n    ctx._updateBigBrainAuth(bigBrainAuth);\n    return;\n  }\n  ctx._updateBigBrainAuth(\n    getBigBrainAuth(ctx, {\n      previewDeployKey: null,\n      projectKey: null,\n      deploymentKey: null,\n    }),\n  );\n  return;\n}\n\nexport async function updateBigBrainAuthAfterLogin(\n  ctx: Context,\n  accessToken: string,\n) {\n  const existingAuth = ctx.bigBrainAuth();\n  if (existingAuth !== null && existingAuth.kind === \"projectKey\") {\n    logVerbose(\n      `Ignoring update to big brain auth since project key takes precedence`,\n    );\n    return;\n  }\n  ctx._updateBigBrainAuth({\n    accessToken: accessToken,\n    kind: \"accessToken\",\n    header: `Bearer ${accessToken}`,\n  });\n}\n\nexport async function clearBigBrainAuth(ctx: Context) {\n  ctx._updateBigBrainAuth(null);\n}\n\nfunction getBigBrainAuth(\n  ctx: Context,\n  opts: {\n    previewDeployKey: string | null;\n    projectKey: string | null;\n    deploymentKey: string | null;\n  },\n): BigBrainAuth | null {\n  if (process.env.CONVEX_OVERRIDE_ACCESS_TOKEN) {\n    return {\n      accessToken: process.env.CONVEX_OVERRIDE_ACCESS_TOKEN,\n      kind: \"accessToken\",\n      header: `Bearer ${process.env.CONVEX_OVERRIDE_ACCESS_TOKEN}`,\n    };\n  }\n  if (opts.projectKey !== null) {\n    // Project keys take precedence over global config.\n    return {\n      header: `Bearer ${opts.projectKey}`,\n      kind: \"projectKey\",\n      projectKey: opts.projectKey,\n    };\n  }\n  if (opts.deploymentKey !== null) {\n    // Deployment keys take precedence over global config.\n    return {\n      header: `Bearer ${opts.deploymentKey}`,\n      kind: \"deploymentKey\",\n      deploymentKey: opts.deploymentKey,\n    };\n  }\n  const globalConfig = readGlobalConfig(ctx);\n  if (globalConfig) {\n    return {\n      kind: \"accessToken\",\n      header: `Bearer ${globalConfig.accessToken}`,\n      accessToken: globalConfig.accessToken,\n    };\n  }\n  if (opts.previewDeployKey !== null) {\n    return {\n      header: `Bearer ${opts.previewDeployKey}`,\n      kind: \"previewDeployKey\",\n      previewDeployKey: opts.previewDeployKey,\n    };\n  }\n  return null;\n}\n\n// These guards mirror the management API's auth rules client-side so we can\n// fail with a clear message instead of an opaque 401; the server stays\n// authoritative. Creating a deployment also allows project keys, while the\n// deploy-key commands stay personal-access-token only.\n\n/** Crashes unless logged in with a personal access token (not a deploy key). */\nexport async function ensureLoggedInWithAccessToken(\n  ctx: Context,\n  action: string,\n): Promise<void> {\n  const auth = ctx.bigBrainAuth();\n  if (auth !== null && auth.kind === \"accessToken\") {\n    return;\n  }\n  // Name whichever deploy-key env var is in effect (CONVEX_DEPLOY_KEY wins).\n  const prefix =\n    auth === null\n      ? \"Run \"\n      : process.env[CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME] &&\n          !process.env[CONVEX_DEPLOY_KEY_ENV_VAR_NAME]\n        ? `Unset ${CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME} and run `\n        : `Unset ${CONVEX_DEPLOY_KEY_ENV_VAR_NAME} and run `;\n  return await ctx.crash({\n    exitCode: 1,\n    errorType: \"fatal\",\n    printedMessage: `${action} requires being logged in with a personal access token. ${prefix}${chalkStderr.bold(\n      \"npx convex login\",\n    )} and try again.`,\n  });\n}\n\n/**\n * Crashes unless the auth can create a deployment: personal access tokens and\n * project keys are accepted, deploy keys are not.\n */\nexport async function ensureAuthCanCreateDeployment(\n  ctx: Context,\n): Promise<void> {\n  const auth = ctx.bigBrainAuth();\n  if (\n    auth !== null &&\n    (auth.kind === \"accessToken\" || auth.kind === \"projectKey\")\n  ) {\n    return;\n  }\n  if (auth === null) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Creating a deployment requires logging in. Run ${chalkStderr.bold(\n        \"npx convex login\",\n      )} and try again.`,\n    });\n  }\n  const envVar = process.env[CONVEX_DEPLOY_KEY_ENV_VAR_NAME]\n    ? CONVEX_DEPLOY_KEY_ENV_VAR_NAME\n    : CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME;\n  return await ctx.crash({\n    exitCode: 1,\n    errorType: \"fatal\",\n    printedMessage: `Creating a deployment isn't supported with a deploy key (${envVar}). Run ${chalkStderr.bold(\n      \"npx convex login\",\n    )} (or use a project key) and try again.`,\n  });\n}\n\n// ----------------------------------------------------------------------------\n// Deployment Selection\n// ----------------------------------------------------------------------------\n/**\n * Our CLI has logic to select which deployment to act on.\n *\n * We first check whether we're targeting a deployment within a project, or if we\n * know exactly which deployment to act on (e.g. in the case of self-hosting).\n *\n * We also special case preview deploys since the presence of a preview deploy key\n * triggers different behavior in `npx convex deploy`.\n *\n * Most commands will immediately compute the deployment selection, and then combine\n * that with any relevant CLI flags to figure out which deployment to talk to.\n *\n * Different commands do different things (e.g. `dev` will allow you to create a new project,\n * `deploy` has different behavior for preview deploys)\n *\n * This should be kept in sync with `initializeBigBrainAuth` since environment variables\n * like `CONVEX_DEPLOY_KEY` are used for both deployment selection and auth.\n */\nexport type DeploymentSelection =\n  | {\n      kind: \"existingDeployment\";\n      deploymentToActOn: {\n        url: string;\n        adminKey: string;\n      } & (\n        | {\n            deploymentFields: DeploymentFields;\n            source: \"deployKey\";\n          }\n        | {\n            deploymentFields: null;\n            source: \"selfHosted\" | \"cliArgs\";\n          }\n      );\n    }\n  | {\n      kind: \"deploymentWithinProject\";\n      targetProject: ProjectSelection;\n      selectionWithinProject: DeploymentSelectionWithinProject;\n    }\n  | {\n      kind: \"preview\";\n      previewDeployKey: string;\n      selectionWithinProject: DeploymentSelectionWithinProject;\n    }\n  | {\n      kind: \"chooseProject\";\n      selectionWithinProject: DeploymentSelectionWithinProject;\n    }\n  | {\n      kind: \"anonymous\";\n      deploymentName: string | null;\n      selectionWithinProject: DeploymentSelectionWithinProject;\n    };\n\ntype DeploymentFields = {\n  deploymentName: string;\n  deploymentType: DeploymentType;\n  projectSlug: string;\n  teamSlug: string;\n  reference: string | null;\n  isDefault: boolean;\n};\n\nexport type ProjectSelection =\n  | {\n      kind: \"teamAndProjectSlugs\";\n      teamSlug: string;\n      projectSlug: string;\n    }\n  | {\n      kind: \"deploymentName\";\n      deploymentName: string;\n      deploymentType: AccountRequiredDeploymentType | null;\n    }\n  | {\n      kind: \"projectDeployKey\";\n      projectDeployKey: string;\n    };\n\nexport async function getDeploymentSelection(\n  ctx: Context,\n  cliArgs: DeploymentSelectionOptions,\n): Promise<DeploymentSelection> {\n  const metadata = await _getDeploymentSelection(ctx, cliArgs);\n  if (metadata.kind === \"existingDeployment\") {\n    const selectionWithinProject =\n      deploymentSelectionWithinProjectFromOptions(cliArgs);\n    await validateDeploymentSelectionForExistingDeployment(\n      ctx,\n      selectionWithinProject,\n      metadata.deploymentToActOn.source,\n    );\n  }\n  logDeploymentSelection(ctx, metadata);\n  return metadata;\n}\n\nfunction logDeploymentSelection(_ctx: Context, selection: DeploymentSelection) {\n  switch (selection.kind) {\n    case \"existingDeployment\": {\n      logVerbose(\n        `Existing deployment: ${selection.deploymentToActOn.url} ${selection.deploymentToActOn.source}`,\n      );\n      break;\n    }\n    case \"deploymentWithinProject\": {\n      logVerbose(\n        `Deployment within project: ${prettyProjectSelection(selection.targetProject)}`,\n      );\n      break;\n    }\n    case \"preview\": {\n      logVerbose(`Preview deploy key`);\n      break;\n    }\n    case \"chooseProject\": {\n      logVerbose(`Choose project`);\n      break;\n    }\n    case \"anonymous\": {\n      logVerbose(\n        `Anonymous, has selected deployment?: ${selection.deploymentName !== null}`,\n      );\n      break;\n    }\n    default: {\n      selection satisfies never;\n      logVerbose(`Unknown deployment selection`);\n    }\n  }\n  return null;\n}\n\nfunction prettyProjectSelection(selection: ProjectSelection) {\n  switch (selection.kind) {\n    case \"teamAndProjectSlugs\": {\n      return `Team and project slugs: ${selection.teamSlug} ${selection.projectSlug}`;\n    }\n    case \"deploymentName\": {\n      return `Deployment name: ${selection.deploymentName}`;\n    }\n    case \"projectDeployKey\": {\n      return `Project deploy key`;\n    }\n    default: {\n      selection satisfies never;\n      return `Unknown`;\n    }\n  }\n}\n\nasync function _getDeploymentSelection(\n  ctx: Context,\n  cliArgs: DeploymentSelectionOptions,\n): Promise<DeploymentSelection> {\n  const selectionWithinProject =\n    deploymentSelectionWithinProjectFromOptions(cliArgs);\n  /*\n   - url + adminKey specified via CLI\n   - Do not check any env vars (including ones relevant for auth)\n  */\n  if (cliArgs.url !== undefined && cliArgs.adminKey !== undefined) {\n    return {\n      kind: \"existingDeployment\",\n      deploymentToActOn: {\n        url: cliArgs.url,\n        adminKey: cliArgs.adminKey,\n        deploymentFields: null,\n        source: \"cliArgs\",\n      },\n    };\n  }\n\n  // If --deployment is a fully qualified selector (team:project:ref or\n  // deployment name), we don't need a current project context \u2192 handle it\n  // before env var resolution.\n  if (cliArgs.deployment !== undefined) {\n    const parsed = parseDeploymentSelector(cliArgs.deployment);\n    if (parsed.kind === \"inTeamProject\" && parsed.selector.kind !== \"local\") {\n      return {\n        kind: \"deploymentWithinProject\",\n        targetProject: {\n          kind: \"teamAndProjectSlugs\",\n          teamSlug: parsed.teamSlug,\n          projectSlug: parsed.projectSlug,\n        },\n        selectionWithinProject: {\n          kind: \"deploymentSelector\",\n          selector: cliArgs.deployment,\n        },\n      };\n    }\n    if (parsed.kind === \"deploymentName\") {\n      return {\n        kind: \"deploymentWithinProject\",\n        targetProject: {\n          kind: \"deploymentName\",\n          deploymentName: parsed.deploymentName,\n          deploymentType: null,\n        },\n        selectionWithinProject: {\n          kind: \"deploymentSelector\",\n          selector: cliArgs.deployment,\n        },\n      };\n    }\n    if (parsed.kind === \"inTeamProject\" && parsed.selector.kind === \"local\") {\n      // team:project:local \u2014 we have the cloud project context up front and\n      // don't need to consult env vars at all.\n      return await resolveLocalDeploymentSelection(\n        ctx,\n        parsed,\n        selectionWithinProject,\n        null,\n      );\n    }\n  }\n\n  const baseSelection = await resolveBaseDeploymentSelection(\n    ctx,\n    cliArgs,\n    selectionWithinProject,\n  );\n\n  // If --deployment is a project-scoped local selector (`local` or\n  // `project:local`), override the env-var-derived selection with the local\n  // deployment after performing a cloud-project-mismatch check.\n  if (cliArgs.deployment !== undefined) {\n    const parsed = parseDeploymentSelector(cliArgs.deployment);\n    if (\n      (parsed.kind === \"inCurrentProject\" || parsed.kind === \"inProject\") &&\n      parsed.selector.kind === \"local\"\n    ) {\n      return await resolveLocalDeploymentSelection(\n        ctx,\n        parsed,\n        selectionWithinProject,\n        baseSelection,\n      );\n    }\n  }\n\n  return baseSelection;\n}\n\nasync function resolveBaseDeploymentSelection(\n  ctx: Context,\n  cliArgs: DeploymentSelectionOptions,\n  selectionWithinProject: DeploymentSelectionWithinProject,\n): Promise<DeploymentSelection> {\n  if (cliArgs.envFile !== undefined) {\n    // If an `--env-file` is specified, it must contain enough information for both auth and deployment selection.\n    logVerbose(`Checking env file: ${cliArgs.envFile}`);\n    const existingFile = ctx.fs.exists(cliArgs.envFile)\n      ? ctx.fs.readUtf8File(cliArgs.envFile)\n      : null;\n    if (existingFile === null) {\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem or env vars\",\n        printedMessage: \"env file does not exist\",\n      });\n    }\n    const config = dotenv.parse(existingFile);\n    const result = await getDeploymentSelectionFromEnv(\n      ctx,\n      selectionWithinProject,\n      (name) =>\n        config[name] === undefined || config[name] === \"\" ? null : config[name],\n    );\n    if (result.kind === \"unknown\") {\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem or env vars\",\n        printedMessage:\n          `env file \\`${cliArgs.envFile}\\` did not contain environment variables for a Convex deployment. ` +\n          `Expected \\`${CONVEX_DEPLOY_KEY_ENV_VAR_NAME}\\`, \\`${CONVEX_DEPLOYMENT_ENV_VAR_NAME}\\`, or both \\`${CONVEX_SELF_HOSTED_URL_VAR_NAME}\\` and \\`${CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME}\\` to be set.`,\n      });\n    }\n    return result.metadata;\n  }\n  // start with .env.local (but doesn't override existing)\n  dotenv.config({ path: ENV_VAR_FILE_PATH });\n  // for variables not already set, use .env values\n  dotenv.config();\n  const result = await getDeploymentSelectionFromEnv(\n    ctx,\n    selectionWithinProject,\n    (name) => {\n      const value = process.env[name];\n      if (value === undefined || value === \"\") {\n        return null;\n      }\n      return value;\n    },\n  );\n  if (result.kind !== \"unknown\") {\n    return result.metadata;\n  }\n  // none of these?\n\n  const isLoggedIn = ctx.bigBrainAuth() !== null;\n  if (\n    (!isLoggedIn ||\n      process.env.CONVEX_AGENT_MODE === \"anonymous\" ||\n      !process.stdin.isTTY) &&\n    !cliArgs.implicitProd &&\n    shouldAllowAnonymousDevelopment()\n  ) {\n    return {\n      kind: \"anonymous\",\n      deploymentName: null,\n      selectionWithinProject,\n    };\n  }\n\n  // Choose a project interactively later\n  return {\n    kind: \"chooseProject\",\n    selectionWithinProject,\n  };\n}\n\n/**\n * Handles the `[team:project:]local` selector. Loads the on-disk local config\n * and (if the config has a `cloudProjectId`) verifies it matches the cloud\n * project the user is asking about. Crashes on mismatch.\n */\nasync function resolveLocalDeploymentSelection(\n  ctx: Context,\n  parsed: ParsedDeploymentSelector,\n  selectionWithinProject: DeploymentSelectionWithinProject,\n  currentSelection: DeploymentSelection | null,\n): Promise<DeploymentSelection> {\n  const localConfig = loadProjectLocalConfig(ctx);\n  if (localConfig === null) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `No local deployment found. Run ${chalkStderr.bold(\"npx convex deployment create local\")} to create one.`,\n    });\n  }\n  // Only resolve the target cloud project if the on-disk config has a\n  // `cloudProjectId` to compare against \u2014 this avoids unnecessary platform\n  // calls for older configs and anonymous mode.\n  if (localConfig.config.cloudProjectId !== undefined) {\n    const target = await targetProjectForLocalSelector(\n      ctx,\n      parsed,\n      currentSelection ?? { kind: \"chooseProject\", selectionWithinProject },\n    );\n    if (target !== null) {\n      const match = checkLocalConfigMatchesProject(\n        ctx,\n        localConfig.config,\n        target,\n      );\n      if (match === \"mismatch\") {\n        const newSelector = `${target.teamSlug}:${target.slug}:local`;\n        return ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            `The local deployment in this directory is in a different project than \\`${target.teamSlug}:${target.slug}\\`. ` +\n            `\\n${chalkStderr.dim(`${chalkStderr.bold(\"Hint\")}: If you want to move the local deployment to this project, run ${chalkStderr.bold(`npx convex deployment select ${newSelector}`)}`)}`,\n        });\n      }\n    }\n  }\n  return {\n    kind: \"deploymentWithinProject\",\n    targetProject: {\n      kind: \"deploymentName\",\n      deploymentName: localConfig.deploymentName,\n      deploymentType: \"local\",\n    },\n    selectionWithinProject,\n  };\n}\n\nasync function getDeploymentSelectionFromEnv(\n  ctx: Context,\n  selectionWithinProject: DeploymentSelectionWithinProject,\n  getEnv: (name: string) => string | null,\n): Promise<\n  { kind: \"success\"; metadata: DeploymentSelection } | { kind: \"unknown\" }\n> {\n  const rawDeployKey = readDeployKeyFromEnv(getEnv);\n  const deployKey = await processDeployKeyValue(ctx, rawDeployKey);\n  if (deployKey !== undefined) {\n    const deployKeyType = isPreviewDeployKey(deployKey)\n      ? \"preview\"\n      : isProjectKey(deployKey)\n        ? \"project\"\n        : \"deployment\";\n    switch (deployKeyType) {\n      case \"preview\": {\n        // `CONVEX_DEPLOY_KEY` is set to a preview deploy key so this takes precedence over anything else.\n        // At the moment, we don't verify that there aren't other env vars that would also be used for deployment selection (e.g. `CONVEX_DEPLOYMENT`)\n        return {\n          kind: \"success\",\n          metadata: {\n            kind: \"preview\",\n            previewDeployKey: deployKey,\n            selectionWithinProject,\n          },\n        };\n      }\n      case \"project\": {\n        // `CONVEX_DEPLOY_KEY` is set to a project deploy key.\n        // Commands can select any deployment within the project. At the moment we don't check for other env vars (e.g. `CONVEX_DEPLOYMENT`)\n        return {\n          kind: \"success\",\n          metadata: {\n            kind: \"deploymentWithinProject\",\n            targetProject: {\n              kind: \"projectDeployKey\",\n              projectDeployKey: deployKey,\n            },\n            selectionWithinProject,\n          },\n        };\n      }\n      case \"deployment\": {\n        // `CONVEX_DEPLOY_KEY` is set to a deployment's deploy key.\n        // Deploy to this deployment -- selectors like `--prod` / `--preview-name` will be ignored.\n        // At the moment, we don't verify that there aren't other env vars that would also be used for deployment selection (e.g. `CONVEX_DEPLOYMENT`)\n        const deploymentName = await deploymentNameFromAdminKeyOrCrash(\n          ctx,\n          deployKey,\n        );\n        const deploymentType = deploymentTypeFromAdminKey(deployKey);\n        // We cannot derive the deployment URL from the deploy key, because it\n        // might be a custom domain. Ask big brain for the URL.\n        const url = await bigBrainAPI({\n          ctx,\n          method: \"POST\",\n          path: \"deployment/url_for_key\",\n          data: {\n            deployKey: deployKey,\n          },\n        });\n        const slugs = await fetchTeamAndProjectForKey(ctx, deployKey);\n        return {\n          kind: \"success\",\n          metadata: {\n            kind: \"existingDeployment\",\n            deploymentToActOn: {\n              url: url,\n              adminKey: deployKey,\n              deploymentFields: {\n                deploymentName: deploymentName,\n                deploymentType: deploymentType,\n                teamSlug: slugs.team,\n                projectSlug: slugs.project,\n                reference: slugs.reference,\n                isDefault: slugs.isDefault,\n              },\n              source: \"deployKey\",\n            },\n          },\n        };\n      }\n      default: {\n        deployKeyType satisfies never;\n        return ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Unexpected deploy key type: ${deployKeyType as any}`,\n        });\n      }\n    }\n  }\n\n  const convexDeployment = getEnv(CONVEX_DEPLOYMENT_ENV_VAR_NAME);\n  const selfHostedUrl = getEnv(CONVEX_SELF_HOSTED_URL_VAR_NAME);\n  const selfHostedAdminKey = getEnv(CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME);\n\n  if (selfHostedUrl !== null && selfHostedAdminKey !== null) {\n    if (convexDeployment !== null) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem or env vars\",\n        printedMessage: `${CONVEX_DEPLOYMENT_ENV_VAR_NAME} must not be set when ${CONVEX_SELF_HOSTED_URL_VAR_NAME} and ${CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME} are set`,\n      });\n    }\n    return {\n      kind: \"success\",\n      metadata: {\n        kind: \"existingDeployment\",\n        deploymentToActOn: {\n          url: selfHostedUrl,\n          adminKey: selfHostedAdminKey,\n          deploymentFields: null,\n          source: \"selfHosted\",\n        },\n      },\n    };\n  }\n\n  // --deployment-name\u2019s deployment may be in a different project from CONVEX_DEPLOYMENT.\n  if (selectionWithinProject.kind === \"deploymentName\") {\n    return {\n      kind: \"success\",\n      metadata: {\n        kind: \"deploymentWithinProject\",\n        targetProject: {\n          kind: \"deploymentName\",\n          deploymentName: selectionWithinProject.deploymentName,\n          deploymentType: null,\n        },\n        selectionWithinProject,\n      },\n    };\n  }\n\n  if (convexDeployment !== null) {\n    if (selfHostedUrl !== null || selfHostedAdminKey !== null) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem or env vars\",\n        printedMessage: `${CONVEX_SELF_HOSTED_URL_VAR_NAME} and ${CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME} must not be set when ${CONVEX_DEPLOYMENT_ENV_VAR_NAME} is set`,\n      });\n    }\n    const targetDeploymentType =\n      getDeploymentTypeFromConfiguredDeployment(convexDeployment);\n\n    // Commands can select a deployment within the project that this deployment belongs to.\n    const targetDeploymentName = stripDeploymentTypePrefix(convexDeployment);\n    const isAnonymous = isAnonymousDeployment(targetDeploymentName);\n    if (isAnonymous) {\n      if (!shouldAllowAnonymousDevelopment()) {\n        return {\n          kind: \"unknown\",\n        };\n      }\n      return {\n        kind: \"success\",\n        metadata: {\n          kind: \"anonymous\",\n          deploymentName: targetDeploymentName,\n          selectionWithinProject,\n        },\n      };\n    }\n\n    // Overwrite the selection within project\n    const newSelectionWithinProject =\n      selectionWithinProject.kind === \"unspecified\" &&\n      // Fetching local deployment credentials uses the \"unspecified\" code path\n      targetDeploymentType !== \"local\"\n        ? {\n            kind: \"deploymentName\" as const,\n            deploymentName: targetDeploymentName,\n          }\n        : selectionWithinProject;\n    return {\n      kind: \"success\",\n      metadata: {\n        kind: \"deploymentWithinProject\",\n        targetProject: {\n          kind: \"deploymentName\",\n          deploymentName: targetDeploymentName,\n          deploymentType: targetDeploymentType,\n        },\n        selectionWithinProject: newSelectionWithinProject,\n      },\n    };\n  }\n\n  // Throw a nice error if we're in something like a CI environment where we need a valid deployment configuration\n  await checkIfBuildEnvironmentRequiresDeploymentConfig(ctx);\n\n  return { kind: \"unknown\" };\n}\n\nasync function checkIfBuildEnvironmentRequiresDeploymentConfig(ctx: Context) {\n  const buildEnvironment = getBuildEnvironment();\n  if (buildEnvironment) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        `${buildEnvironment} build environment detected but no Convex deployment configuration found.\\n` +\n        `Set one of:\\n` +\n        `  \u2022 ${CONVEX_DEPLOY_KEY_ENV_VAR_NAME} for Convex Cloud deployments\\n` +\n        `  \u2022 ${CONVEX_SELF_HOSTED_URL_VAR_NAME} and ${CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME} for self-hosted deployments\\n` +\n        `See https://docs.convex.dev/production/hosting or https://docs.convex.dev/self-hosting`,\n    });\n  }\n}\n\n/**\n * Used for things like `npx convex docs` where we want to best effort extract a deployment name\n * but don't do the full deployment selection logic.\n */\nexport const deploymentNameFromSelection = (\n  selection: DeploymentSelection,\n): string | null => {\n  return deploymentNameAndTypeFromSelection(selection)?.name ?? null;\n};\n\nexport const deploymentNameAndTypeFromSelection = (\n  selection: DeploymentSelection,\n): { name: string | null; type: string | null } | null => {\n  switch (selection.kind) {\n    case \"existingDeployment\": {\n      return {\n        name:\n          selection.deploymentToActOn.deploymentFields?.deploymentName ?? null,\n        type:\n          selection.deploymentToActOn.deploymentFields?.deploymentType ?? null,\n      };\n    }\n    case \"deploymentWithinProject\": {\n      return selection.targetProject.kind === \"deploymentName\"\n        ? {\n            name: selection.targetProject.deploymentName,\n            type: selection.targetProject.deploymentType,\n          }\n        : null;\n    }\n    case \"preview\": {\n      return null;\n    }\n    case \"chooseProject\": {\n      return null;\n    }\n    case \"anonymous\": {\n      return null;\n    }\n    default: {\n      selection satisfies never;\n    }\n  }\n  return null;\n};\n\nexport const shouldAllowAnonymousDevelopment = (): boolean => {\n  // Kill switch / temporary opt out\n  if (process.env.CONVEX_ALLOW_ANONYMOUS === \"false\") {\n    return false;\n  }\n  return true;\n};\n\n/**\n * Fetch the project details corresponding to the given ProjectSelection.\n */\nexport async function getProjectDetails(\n  ctx: Context,\n  projectSelection: ProjectSelection,\n): Promise<ProjectResponse> {\n  switch (projectSelection.kind) {\n    case \"deploymentName\": {\n      if (projectSelection.deploymentType === \"local\") {\n        const result = await getTeamAndProjectSlugForDeployment(ctx, {\n          deploymentName: projectSelection.deploymentName,\n        });\n        if (result === null) {\n          return ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage:\n              \"You don't have access to the selected project. Run `npx convex dev` to select a different project.\",\n          });\n        }\n        return await getProjectDetails(ctx, {\n          kind: \"teamAndProjectSlugs\",\n          teamSlug: result.teamSlug,\n          projectSlug: result.projectSlug,\n        });\n      }\n\n      const deployment = (\n        await typedPlatformClient(ctx).GET(\"/deployments/{deployment_name}\", {\n          params: {\n            path: { deployment_name: projectSelection.deploymentName },\n          },\n        })\n      ).data!;\n      return (\n        await typedPlatformClient(ctx).GET(\"/projects/{project_id}\", {\n          params: { path: { project_id: deployment.projectId } },\n        })\n      ).data!;\n    }\n    case \"teamAndProjectSlugs\": {\n      return (\n        await typedPlatformClient(ctx).GET(\n          \"/teams/{team_id_or_slug}/projects/{project_slug}\",\n          {\n            params: {\n              path: {\n                team_id_or_slug: projectSelection.teamSlug,\n                project_slug: projectSelection.projectSlug,\n              },\n            },\n          },\n        )\n      ).data!;\n    }\n    case \"projectDeployKey\": {\n      const result = await fetchTeamAndProjectForKey(\n        ctx,\n        projectSelection.projectDeployKey,\n      );\n      return (\n        await typedPlatformClient(ctx).GET(\"/projects/{project_id}\", {\n          params: { path: { project_id: result.projectId } },\n        })\n      ).data!;\n    }\n  }\n}\n", "import { Context } from \"../../bundler/context.js\";\nimport { logVerbose, logWarning } from \"../../bundler/log.js\";\nimport { getTeamAndProjectFromPreviewAdminKey } from \"./deployment.js\";\nimport {\n  assertLocalBackendRunning,\n  localDeploymentUrl,\n} from \"./localDeployment/run.js\";\nimport {\n  ThrowingFetchError,\n  bigBrainAPI,\n  bigBrainAPIMaybeThrows,\n  logAndHandleFetchError,\n  typedPlatformClient,\n} from \"./utils/utils.js\";\nimport { z } from \"zod\";\nimport {\n  DeploymentSelection,\n  ProjectSelection,\n} from \"./deploymentSelection.js\";\nimport { loadLocalDeploymentCredentials } from \"./localDeployment/localDeployment.js\";\nimport { loadAnonymousDeployment } from \"./localDeployment/anonymous.js\";\nimport {\n  parseDeploymentSelector,\n  InProjectSelector,\n} from \"./deploymentSelector.js\";\nimport { loadProjectLocalConfig } from \"./localDeployment/filePaths.js\";\nimport { chalkStderr } from \"chalk\";\nimport { RegionName } from \"../generatedApi.js\";\nimport type { RegionName as PublishedRegionName } from \"@convex-dev/platform/managementApi\";\nexport type DeploymentName = string;\nexport type CloudDeploymentType = \"prod\" | \"dev\" | \"preview\" | \"custom\";\nexport type AccountRequiredDeploymentType = CloudDeploymentType | \"local\";\nexport type DeploymentType = AccountRequiredDeploymentType | \"anonymous\";\n\nexport type Project = {\n  id: number;\n  name: string;\n  slug: string;\n};\n\ntype AdminKey = string;\n\n/**\n * Create a new project. If `deploymentToProvision` is specified, also provision a deployment for the project.\n */\nexport async function createProject(\n  ctx: Context,\n  {\n    teamId,\n    projectName,\n    deploymentToProvision,\n  }: {\n    teamId: number;\n    projectName: string;\n    deploymentToProvision: {\n      deploymentType: \"prod\" | \"dev\";\n      region: RegionName | null;\n    } | null;\n  },\n): Promise<{\n  projectSlug: string;\n}> {\n  const response = await typedPlatformClient(ctx).POST(\n    \"/teams/{team_id}/create_project\",\n    {\n      params: { path: { team_id: teamId } },\n      body: {\n        projectName,\n        deploymentType: deploymentToProvision?.deploymentType ?? null,\n        // The published platform types lag the CLI's own spec by a release,\n        // so the cast is deliberate: a new region needs no change here.\n        deploymentRegion: (deploymentToProvision?.region ??\n          null) as PublishedRegionName | null,\n      },\n    },\n  );\n  const projectSlug = response.data?.slug;\n  if (projectSlug === undefined) {\n    const error =\n      \"Unexpected response during provisioning: \" + JSON.stringify(response);\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      errForSentry: error,\n      printedMessage: error,\n    });\n  }\n  return {\n    projectSlug,\n  };\n}\n\n// ----------------------------------------------------------------------\n// Helpers for `deploymentSelectionFromOptions`\n// ----------------------------------------------------------------------\n\nexport const deploymentSelectionWithinProjectSchema = z.discriminatedUnion(\n  \"kind\",\n  [\n    z.object({ kind: z.literal(\"previewName\"), previewName: z.string() }),\n    z.object({ kind: z.literal(\"deploymentName\"), deploymentName: z.string() }),\n    z.object({ kind: z.literal(\"prod\") }),\n    z.object({ kind: z.literal(\"implicitProd\") }),\n    z.object({ kind: z.literal(\"unspecified\") }),\n    z.object({\n      kind: z.literal(\"deploymentSelector\"),\n      selector: z.string(),\n    }),\n  ],\n);\n\nexport type DeploymentSelectionWithinProject = z.infer<\n  typeof deploymentSelectionWithinProjectSchema\n>;\n\ntype DeploymentSelectionOptionsWithinProject = {\n  prod?: boolean | undefined;\n  // Whether this command defaults to prod when no other flags are provided. If\n  // this is not set, the default will be \"ownDev\"\n  implicitProd?: boolean;\n\n  previewName?: string | undefined;\n  deploymentName?: string | undefined;\n  deployment?: string | undefined;\n};\n\nexport type DeploymentSelectionOptions =\n  DeploymentSelectionOptionsWithinProject & {\n    url?: string | undefined;\n    adminKey?: string | undefined;\n    envFile?: string | undefined;\n  };\n\nexport function deploymentSelectionWithinProjectFromOptions(\n  options: DeploymentSelectionOptions,\n): DeploymentSelectionWithinProject {\n  if (options.deployment !== undefined) {\n    return { kind: \"deploymentSelector\", selector: options.deployment };\n  }\n  if (options.previewName !== undefined) {\n    return { kind: \"previewName\", previewName: options.previewName };\n  }\n  if (options.deploymentName !== undefined) {\n    return { kind: \"deploymentName\", deploymentName: options.deploymentName };\n  }\n  if (options.prod) {\n    return { kind: \"prod\" };\n  }\n  if (options.implicitProd) {\n    return { kind: \"implicitProd\" };\n  }\n  return { kind: \"unspecified\" };\n}\n\nexport async function validateDeploymentSelectionForExistingDeployment(\n  ctx: Context,\n  deploymentSelection: DeploymentSelectionWithinProject,\n  source: \"selfHosted\" | \"deployKey\" | \"cliArgs\",\n) {\n  if (\n    deploymentSelection.kind === \"unspecified\" ||\n    deploymentSelection.kind === \"implicitProd\"\n  ) {\n    // These are both considered the \"default\" selection depending on the command, so this is always fine\n    return;\n  }\n  if (deploymentSelection.kind === \"deploymentSelector\") {\n    switch (source) {\n      case \"selfHosted\":\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"The `--deployment` flag cannot be used with a self-hosted deployment.\",\n        });\n      case \"deployKey\":\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"The `--deployment` flag cannot be used with CONVEX_DEPLOY_KEY.\",\n        });\n      case \"cliArgs\":\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"The `--deployment` flag cannot be used with --url and --admin-key.\",\n        });\n    }\n  }\n  switch (source) {\n    case \"selfHosted\":\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"The `--prod`, `--preview-name`, and `--deployment-name` flags cannot be used with a self-hosted deployment.\",\n      });\n    case \"deployKey\":\n      logWarning(\n        \"Ignoring `--prod`, `--preview-name`, or `--deployment-name` flags and using deployment from CONVEX_DEPLOY_KEY\",\n      );\n      break;\n    case \"cliArgs\":\n      logWarning(\n        \"Ignoring `--prod`, `--preview-name`, or `--deployment-name` flags since this command was run with --url and --admin-key\",\n      );\n      break;\n  }\n}\n\n// ----------------------------------------------------------------------\n// Helpers for `checkAccessToSelectedProject`\n// ----------------------------------------------------------------------\n\nasync function hasAccessToProject(\n  ctx: Context,\n  selector: { projectSlug: string; teamSlug: string },\n): Promise<boolean> {\n  try {\n    await typedPlatformClient(ctx, { throw: true }).GET(\n      \"/teams/{team_id_or_slug}/projects/{project_slug}\",\n      {\n        params: {\n          path: {\n            team_id_or_slug: selector.teamSlug,\n            project_slug: selector.projectSlug,\n          },\n        },\n      },\n    );\n    return true;\n  } catch (err) {\n    if (\n      err instanceof ThrowingFetchError &&\n      (err.serverErrorData?.code === \"TeamNotFound\" ||\n        err.serverErrorData?.code === \"ProjectNotFound\")\n    ) {\n      return false;\n    }\n    return logAndHandleFetchError(ctx, err);\n  }\n}\n\nexport async function checkAccessToSelectedProject(\n  ctx: Context,\n  projectSelection: ProjectSelection,\n): Promise<\n  | { kind: \"hasAccess\"; teamSlug: string; projectSlug: string }\n  | { kind: \"noAccess\" }\n  | { kind: \"unknown\" }\n> {\n  switch (projectSelection.kind) {\n    case \"deploymentName\": {\n      const result = await getTeamAndProjectSlugForDeployment(ctx, {\n        deploymentName: projectSelection.deploymentName,\n      });\n      if (result === null) {\n        return { kind: \"noAccess\" };\n      }\n      return {\n        kind: \"hasAccess\",\n        teamSlug: result.teamSlug,\n        projectSlug: result.projectSlug,\n      };\n    }\n    case \"teamAndProjectSlugs\": {\n      const hasAccess = await hasAccessToProject(ctx, {\n        teamSlug: projectSelection.teamSlug,\n        projectSlug: projectSelection.projectSlug,\n      });\n      if (!hasAccess) {\n        return { kind: \"noAccess\" };\n      }\n      return {\n        kind: \"hasAccess\",\n        teamSlug: projectSelection.teamSlug,\n        projectSlug: projectSelection.projectSlug,\n      };\n    }\n    case \"projectDeployKey\":\n      // Ideally we would be able to do an explicit check here, but if the key is invalid,\n      // it will instead fail as soon as we try to use the key.\n      return { kind: \"unknown\" };\n    default: {\n      projectSelection satisfies never;\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Invalid project selection: ${(projectSelection as any).kind}`,\n      });\n    }\n  }\n}\n\nexport async function getTeamAndProjectSlugForDeployment(\n  ctx: Context,\n  selector: { deploymentName: string },\n): Promise<{ teamSlug: string; projectSlug: string } | null> {\n  try {\n    const body = await bigBrainAPIMaybeThrows({\n      ctx,\n      path: `deployment/${selector.deploymentName}/team_and_project`,\n      method: \"GET\",\n    });\n    return { teamSlug: body.team, projectSlug: body.project };\n  } catch (err) {\n    if (\n      err instanceof ThrowingFetchError &&\n      (err.serverErrorData?.code === \"DeploymentNotFound\" ||\n        err.serverErrorData?.code === \"ProjectNotFound\")\n    ) {\n      return null;\n    }\n    return logAndHandleFetchError(ctx, err);\n  }\n}\n\n// ----------------------------------------------------------------------\n// Helpers for fetching deployment credentials\n// ----------------------------------------------------------------------\n\n// Used by dev for upgrade from team and project in convex.json to CONVEX_DEPLOYMENT\nexport async function fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n  ctx: Context,\n  projectSelection:\n    | { kind: \"teamAndProjectSlugs\"; teamSlug: string; projectSlug: string }\n    | { kind: \"projectDeployKey\"; projectDeployKey: string },\n  deploymentType: \"prod\" | \"dev\",\n): Promise<{\n  deploymentName: string;\n  deploymentUrl: string;\n  adminKey: AdminKey;\n  reference: string;\n  isDefault: boolean;\n}> {\n  if (projectSelection.kind === \"projectDeployKey\") {\n    const auth = ctx.bigBrainAuth();\n    const doesAuthMatch =\n      auth !== null &&\n      auth.kind === \"projectKey\" &&\n      auth.projectKey === projectSelection.projectDeployKey;\n    if (!doesAuthMatch) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        errForSentry: new Error(\n          \"Expected project deploy key to match the big brain auth header\",\n        ),\n        printedMessage: \"Unexpected error when loading the Convex deployment\",\n      });\n    }\n  }\n  let data;\n  try {\n    data = await bigBrainAPIMaybeThrows({\n      ctx,\n      method: \"POST\",\n      path: \"deployment/provision_and_authorize\",\n      data: {\n        teamSlug:\n          projectSelection.kind === \"teamAndProjectSlugs\"\n            ? projectSelection.teamSlug\n            : null,\n        projectSlug:\n          projectSelection.kind === \"teamAndProjectSlugs\"\n            ? projectSelection.projectSlug\n            : null,\n        deploymentType: deploymentType === \"prod\" ? \"prod\" : \"dev\",\n      },\n    });\n  } catch (error) {\n    const msg = \"Unknown error during authorization: \" + error;\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      errForSentry: new Error(msg),\n      printedMessage: msg,\n    });\n  }\n  const { adminKey, url, deploymentName, reference, isDefault } = data;\n  if (adminKey === undefined || url === undefined) {\n    const msg = \"Unknown error during authorization: \" + JSON.stringify(data);\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      errForSentry: new Error(msg),\n      printedMessage: msg,\n    });\n  }\n  return { adminKey, deploymentUrl: url, deploymentName, reference, isDefault };\n}\n\nasync function fetchExistingDevDeploymentCredentialsOrCrash(\n  ctx: Context,\n  deploymentName: DeploymentName,\n): Promise<DeploymentAuthResponse> {\n  const slugs = await fetchTeamAndProject(ctx, deploymentName);\n  const credentials =\n    await fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n      ctx,\n      {\n        kind: \"teamAndProjectSlugs\",\n        teamSlug: slugs.team,\n        projectSlug: slugs.project,\n      },\n      \"dev\",\n    );\n  return {\n    deploymentName: credentials.deploymentName,\n    adminKey: credentials.adminKey,\n    url: credentials.deploymentUrl,\n    deploymentType: \"dev\",\n    reference: credentials.reference,\n    isDefault: credentials.isDefault,\n  };\n}\n\n// ----------------------------------------------------------------------\n// Helpers for `loadSelectedDeploymentCredentials`\n// ----------------------------------------------------------------------\n\ntype DeploymentAuthResponse = {\n  deploymentName: string;\n  adminKey: string;\n  url: string;\n  deploymentType: DeploymentType;\n  reference: string | null; // null = local deployment\n  isDefault: boolean;\n};\n\n// Returns the user's own dev deployment, which may be a local deployment\n// if one is configured. Used for dev commands (including `npx convex dev`)\n// when no specific deployment is specified.\nasync function handleOwnDev(\n  ctx: Context,\n  projectSelection: ProjectSelection,\n): Promise<DeploymentAuthResponse> {\n  switch (projectSelection.kind) {\n    case \"deploymentName\": {\n      if (projectSelection.deploymentType === \"local\") {\n        const credentials = await loadLocalDeploymentCredentials(\n          ctx,\n          projectSelection.deploymentName,\n        );\n        return {\n          deploymentName: projectSelection.deploymentName,\n          adminKey: credentials.adminKey,\n          url: credentials.deploymentUrl,\n          deploymentType: \"local\",\n          reference: null,\n          isDefault: false,\n        };\n      }\n      return await fetchExistingDevDeploymentCredentialsOrCrash(\n        ctx,\n        projectSelection.deploymentName,\n      );\n    }\n    case \"teamAndProjectSlugs\":\n    case \"projectDeployKey\": {\n      // Note -- this provisions a dev deployment if one doesn't exist\n      const credentials =\n        await fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n          ctx,\n          projectSelection,\n          \"dev\",\n        );\n      return {\n        url: credentials.deploymentUrl,\n        adminKey: credentials.adminKey,\n        deploymentName: credentials.deploymentName,\n        deploymentType: \"dev\",\n        reference: credentials.reference,\n        isDefault: credentials.isDefault,\n      };\n    }\n    default: {\n      projectSelection satisfies never;\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        // This should be unreachable, so don't bother with a printed message.\n        printedMessage: null,\n        errForSentry: `Unexpected project selection: ${(projectSelection as any).kind}`,\n      });\n    }\n  }\n}\n\nasync function handleProd(\n  ctx: Context,\n  projectSelection: ProjectSelection,\n): Promise<DeploymentAuthResponse & { deploymentType: \"prod\" }> {\n  switch (projectSelection.kind) {\n    case \"deploymentName\": {\n      const credentials = await bigBrainAPI({\n        ctx,\n        method: \"POST\",\n        path: \"deployment/authorize_prod\",\n        data: {\n          deploymentName: projectSelection.deploymentName,\n        },\n      });\n      return credentials;\n    }\n    case \"teamAndProjectSlugs\":\n    case \"projectDeployKey\": {\n      const credentials =\n        await fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n          ctx,\n          projectSelection,\n          \"prod\",\n        );\n      return {\n        url: credentials.deploymentUrl,\n        adminKey: credentials.adminKey,\n        deploymentName: credentials.deploymentName,\n        deploymentType: \"prod\",\n        reference: credentials.reference,\n        isDefault: credentials.isDefault,\n      };\n    }\n  }\n}\n\nasync function handlePreview(\n  ctx: Context,\n  previewName: string,\n  projectSelection: ProjectSelection,\n): Promise<DeploymentAuthResponse & { deploymentType: \"preview\" }> {\n  switch (projectSelection.kind) {\n    case \"deploymentName\":\n    case \"teamAndProjectSlugs\": {\n      const credentials = await bigBrainAPI({\n        ctx,\n        method: \"POST\",\n        path: \"deployment/authorize_preview\",\n        data: {\n          previewName: previewName,\n          projectSelection: projectSelection,\n        },\n      });\n      return credentials;\n    }\n\n    case \"projectDeployKey\":\n      // TODO -- this should be supported\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"Project deploy keys are not supported for preview deployments\",\n      });\n  }\n}\n\nasync function handleDeploymentName(\n  ctx: Context,\n  deploymentName: string,\n  projectSelection: ProjectSelection,\n): Promise<DeploymentAuthResponse> {\n  switch (projectSelection.kind) {\n    case \"deploymentName\":\n    case \"teamAndProjectSlugs\": {\n      const credentials = await bigBrainAPI({\n        ctx,\n        method: \"POST\",\n        path: \"deployment/authorize_within_current_project\",\n        data: {\n          selectedDeploymentName: deploymentName,\n          projectSelection: projectSelection,\n        },\n      });\n      return credentials;\n    }\n    case \"projectDeployKey\":\n      // TODO -- this should be supported\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"Project deploy keys are not supported with the --deployment-name flag\",\n      });\n  }\n}\n\nasync function fetchDeploymentCredentialsWithinCurrentProject(\n  ctx: Context,\n  projectSelection: ProjectSelection,\n  deploymentSelection: DeploymentSelectionWithinProject,\n): Promise<DeploymentAuthResponse> {\n  switch (deploymentSelection.kind) {\n    case \"unspecified\": {\n      // default to the user's default dev deployment\n      // TODO: this currently also handles local dev, but that should probably be split out into a different DeploymenSelection kind\n      return await handleOwnDev(ctx, projectSelection);\n    }\n    case \"implicitProd\":\n    case \"prod\": {\n      return await handleProd(ctx, projectSelection);\n    }\n    case \"previewName\":\n      return await handlePreview(\n        ctx,\n        deploymentSelection.previewName,\n        projectSelection,\n      );\n    case \"deploymentName\":\n      return await handleDeploymentName(\n        ctx,\n        deploymentSelection.deploymentName,\n        projectSelection,\n      );\n    case \"deploymentSelector\":\n      return await handleDeploymentSelector(\n        ctx,\n        deploymentSelection.selector,\n        projectSelection,\n      );\n    default: {\n      deploymentSelection satisfies never;\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        // This should be unreachable, so don't bother with a printed message.\n        printedMessage: null,\n        errForSentry: `Unexpected deployment selection: ${deploymentSelection as any}`,\n      });\n    }\n  }\n}\n\nasync function resolveDeploymentNameByReference(\n  ctx: Context,\n  teamSlug: string,\n  projectSlug: string,\n  reference: string,\n): Promise<string> {\n  try {\n    const result = await typedPlatformClient(ctx, { throw: true }).GET(\n      \"/teams/{team_id_or_slug}/projects/{project_slug}/deployment\",\n      {\n        params: {\n          path: { team_id_or_slug: teamSlug, project_slug: projectSlug },\n          query: { reference },\n        },\n      },\n    );\n\n    return result.data!.name;\n  } catch (err) {\n    if (\n      err instanceof ThrowingFetchError &&\n      err.serverErrorData?.code === \"DeploymentNotFound\"\n    ) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Deployment \u201C${reference}\u201D not found. To create a new deployment, use ${chalkStderr.bold(`npx convex deployment create ${teamSlug}:${projectSlug}:${reference} --select`)}`,\n        errForSentry: err,\n      });\n    }\n    return await logAndHandleFetchError(ctx, err);\n  }\n}\n\nasync function handleRefInProject(\n  ctx: Context,\n  selector: InProjectSelector,\n  projectSelection: ProjectSelection,\n): Promise<DeploymentAuthResponse> {\n  switch (selector.kind) {\n    case \"local\": {\n      // The mismatch check for `[team:project:]local` has already happened in\n      // `_getDeploymentSelection`, so we only need to load credentials here.\n      const localConfig = loadProjectLocalConfig(ctx);\n      if (localConfig === null) {\n        return ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `No local deployment found. Run ${chalkStderr.bold(\"npx convex deployment create local\")} to create one.`,\n        });\n      }\n      const credentials = await loadLocalDeploymentCredentials(\n        ctx,\n        localConfig.deploymentName,\n      );\n      return {\n        deploymentName: localConfig.deploymentName,\n        adminKey: credentials.adminKey,\n        url: credentials.deploymentUrl,\n        deploymentType: \"local\",\n        reference: null,\n        isDefault: false,\n      };\n    }\n    case \"dev\": {\n      const access = await checkAccessToSelectedProject(ctx, projectSelection);\n      if (access.kind !== \"hasAccess\") {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"You don't have access to the selected project. Run `npx convex dev` to select a different project.\",\n        });\n      }\n      const deploymentName = await resolveDefaultCloudDevDeploymentName(\n        ctx,\n        access.teamSlug,\n        access.projectSlug,\n      );\n      // Pass teamAndProjectSlugs instead of the original projectSelection,\n      // because handleDeploymentName sends projectSelection to Big Brain's\n      // authorize_within_current_project endpoint, which doesn't understand\n      // deploymentType \"local\".\n      return await handleDeploymentName(ctx, deploymentName, {\n        kind: \"teamAndProjectSlugs\",\n        teamSlug: access.teamSlug,\n        projectSlug: access.projectSlug,\n      });\n    }\n    case \"prod\":\n      return await handleProd(ctx, projectSelection);\n    case \"reference\": {\n      const access = await checkAccessToSelectedProject(ctx, projectSelection);\n      if (access.kind !== \"hasAccess\") {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"You don't have access to the selected project. Run `npx convex dev` to select a different project.\",\n        });\n      }\n      const deploymentName = await resolveDeploymentNameByReference(\n        ctx,\n        access.teamSlug,\n        access.projectSlug,\n        selector.reference,\n      );\n      return await handleDeploymentName(ctx, deploymentName, projectSelection);\n    }\n  }\n}\n\nasync function handleDeploymentSelector(\n  ctx: Context,\n  selector: string,\n  projectSelection: ProjectSelection,\n): Promise<DeploymentAuthResponse> {\n  const parsed = parseDeploymentSelector(selector);\n  switch (parsed.kind) {\n    case \"deploymentName\":\n      return await handleDeploymentName(\n        ctx,\n        parsed.deploymentName,\n        projectSelection,\n      );\n    case \"inCurrentProject\":\n      return await handleRefInProject(ctx, parsed.selector, projectSelection);\n    case \"inProject\": {\n      const access = await checkAccessToSelectedProject(ctx, projectSelection);\n      if (access.kind !== \"hasAccess\") {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"You don't have access to the selected project. Run `npx convex dev` to select a different project.\",\n        });\n      }\n      return await handleRefInProject(ctx, parsed.selector, {\n        kind: \"teamAndProjectSlugs\",\n        teamSlug: access.teamSlug,\n        projectSlug: parsed.projectSlug,\n      });\n    }\n    case \"inTeamProject\":\n      return await handleRefInProject(ctx, parsed.selector, {\n        kind: \"teamAndProjectSlugs\",\n        teamSlug: parsed.teamSlug,\n        projectSlug: parsed.projectSlug,\n      });\n  }\n}\n\nasync function _loadExistingDeploymentCredentialsForProject(\n  ctx: Context,\n  targetProject: ProjectSelection,\n  deploymentSelection: DeploymentSelectionWithinProject,\n  { ensureLocalRunning } = { ensureLocalRunning: true },\n): Promise<DetailedDeploymentCredentials> {\n  const accessResult = await checkAccessToSelectedProject(ctx, targetProject);\n  if (accessResult.kind === \"noAccess\") {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"You don't have access to the selected project. Run `npx convex dev` to select a different project.\",\n    });\n  }\n  const result = await fetchDeploymentCredentialsWithinCurrentProject(\n    ctx,\n    targetProject,\n    deploymentSelection,\n  );\n  logVerbose(\n    `Deployment URL: ${result.url}, Deployment Name: ${result.deploymentName}, Deployment Type: ${result.deploymentType}`,\n  );\n  if (ensureLocalRunning && result.deploymentType === \"local\") {\n    await assertLocalBackendRunning(ctx, {\n      url: result.url,\n      deploymentName: result.deploymentName,\n    });\n  }\n  return {\n    ...result,\n    deploymentFields: {\n      deploymentName: result.deploymentName,\n      deploymentType: result.deploymentType,\n      reference: result.reference,\n      isDefault: result.isDefault,\n      projectSlug:\n        accessResult.kind === \"hasAccess\" ? accessResult.projectSlug : null,\n      teamSlug:\n        accessResult.kind === \"hasAccess\" ? accessResult.teamSlug : null,\n    },\n  };\n}\n\nexport type DetailedDeploymentCredentials = {\n  adminKey: string;\n  url: string;\n  deploymentFields: {\n    deploymentName: string;\n    deploymentType: DeploymentType;\n    projectSlug: string | null;\n    teamSlug: string | null;\n    reference: string | null;\n    isDefault: boolean;\n  } | null;\n};\n\n/**\n * This is used by most commands to determine which deployment to act on, taking into account the deployment selection flags.\n */\nexport async function loadSelectedDeploymentCredentials(\n  ctx: Context,\n  deploymentSelection: DeploymentSelection,\n  { ensureLocalRunning } = { ensureLocalRunning: true },\n): Promise<DetailedDeploymentCredentials> {\n  switch (deploymentSelection.kind) {\n    case \"existingDeployment\":\n      // We're already set up.\n      logVerbose(\n        `Deployment URL: ${deploymentSelection.deploymentToActOn.url}, Deployment Name: ${deploymentSelection.deploymentToActOn.deploymentFields?.deploymentName ?? \"unknown\"}, Deployment Type: ${deploymentSelection.deploymentToActOn.deploymentFields?.deploymentType ?? \"unknown\"}`,\n      );\n      return {\n        adminKey: deploymentSelection.deploymentToActOn.adminKey,\n        url: deploymentSelection.deploymentToActOn.url,\n        deploymentFields:\n          deploymentSelection.deploymentToActOn.deploymentFields,\n      };\n    case \"chooseProject\":\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"No CONVEX_DEPLOYMENT set, run `npx convex dev` to configure a Convex project\",\n      });\n    case \"preview\": {\n      const slugs = await getTeamAndProjectFromPreviewAdminKey(\n        ctx,\n        deploymentSelection.previewDeployKey,\n      );\n      return await _loadExistingDeploymentCredentialsForProject(\n        ctx,\n        {\n          kind: \"teamAndProjectSlugs\",\n          teamSlug: slugs.teamSlug,\n          projectSlug: slugs.projectSlug,\n        },\n        // Note that the user could select a non-preview deployment here, and it would succeed if the user is logged in locally because getBigBrainAuth prefers the user's access token over the preview deploy key.\n        deploymentSelection.selectionWithinProject,\n        { ensureLocalRunning },\n      );\n    }\n    case \"deploymentWithinProject\": {\n      return await _loadExistingDeploymentCredentialsForProject(\n        ctx,\n        deploymentSelection.targetProject,\n        deploymentSelection.selectionWithinProject,\n        { ensureLocalRunning },\n      );\n    }\n    case \"anonymous\": {\n      if (deploymentSelection.deploymentName === null) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"No CONVEX_DEPLOYMENT set, run `npx convex dev` to configure a Convex project\",\n        });\n      }\n      const config = await loadAnonymousDeployment(\n        ctx,\n        deploymentSelection.deploymentName,\n      );\n      const url = localDeploymentUrl(config.ports.cloud);\n      if (ensureLocalRunning) {\n        await assertLocalBackendRunning(ctx, {\n          url,\n          deploymentName: deploymentSelection.deploymentName,\n        });\n      }\n      return {\n        adminKey: config.adminKey,\n        url,\n        deploymentFields: {\n          deploymentName: deploymentSelection.deploymentName,\n          deploymentType: \"anonymous\",\n          projectSlug: null,\n          teamSlug: null,\n          reference: null,\n          isDefault: false,\n        },\n      };\n    }\n    default: {\n      deploymentSelection satisfies never;\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: \"Unknown deployment type\",\n      });\n    }\n  }\n}\n\nexport async function fetchTeamAndProject(\n  ctx: Context,\n  deploymentName: string,\n) {\n  const data = (await bigBrainAPI({\n    ctx,\n    method: \"GET\",\n    path: `deployment/${deploymentName}/team_and_project`,\n  })) as {\n    team: string; // slug\n    project: string; // slug\n    teamId: number;\n    projectId: number;\n  };\n\n  const { team, project } = data;\n  if (team === undefined || project === undefined) {\n    const msg =\n      \"Unknown error when fetching team and project: \" + JSON.stringify(data);\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      errForSentry: new Error(msg),\n      printedMessage: msg,\n    });\n  }\n\n  return data;\n}\n\nexport async function fetchTeamAndProjectForKey(\n  ctx: Context,\n  // Deployment deploy key, like `prod:happy-animal-123|<stuff>`\n  deployKey: string,\n) {\n  const data = (await bigBrainAPI({\n    ctx,\n    method: \"POST\",\n    path: `deployment/team_and_project_for_key`,\n    data: {\n      deployKey: deployKey,\n    },\n  })) as {\n    team: string; // slug\n    project: string; // slug\n    teamId: number;\n    projectId: number;\n    reference: string | null;\n    isDefault: boolean;\n  };\n\n  const { team, project } = data;\n  if (team === undefined || project === undefined) {\n    const msg =\n      \"Unknown error when fetching team and project: \" + JSON.stringify(data);\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      errForSentry: new Error(msg),\n      printedMessage: msg,\n    });\n  }\n\n  return data;\n}\n\nexport async function getTeamsForUser(ctx: Context) {\n  const teams = await bigBrainAPI<{ id: number; name: string; slug: string }[]>(\n    {\n      ctx,\n      method: \"GET\",\n      path: \"teams\",\n    },\n  );\n  return teams;\n}\n\nasync function resolveDefaultCloudDevDeploymentName(\n  ctx: Context,\n  teamSlug: string,\n  projectSlug: string,\n): Promise<string> {\n  try {\n    const result = await typedPlatformClient(ctx, { throw: true }).GET(\n      \"/teams/{team_id_or_slug}/projects/{project_slug}/deployment\",\n      {\n        params: {\n          path: { team_id_or_slug: teamSlug, project_slug: projectSlug },\n          query: { defaultDev: true },\n        },\n      },\n    );\n    return result.data!.name;\n  } catch (err) {\n    if (\n      err instanceof ThrowingFetchError &&\n      err.serverErrorData?.code === \"DeploymentNotFound\"\n    ) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `You don\u2019t have a personal cloud dev deployment in this project. Run ${chalkStderr.bold(\"npx convex deployment create --type dev --default\")} to create one.`,\n        errForSentry: err,\n      });\n    }\n    return await logAndHandleFetchError(ctx, err);\n  }\n}\n", "import { Context } from \"../../../bundler/context.js\";\nimport {\n  logFinishedStep,\n  logVerbose,\n  logWarning,\n  showSpinner,\n  stopSpinner,\n} from \"../../../bundler/log.js\";\nimport { logAndHandleFetchError, ThrowingFetchError } from \"../utils/utils.js\";\nimport {\n  bigBrainPause,\n  bigBrainRecordActivity,\n  bigBrainStart,\n} from \"./bigBrain.js\";\nimport {\n  LocalDeploymentConfig,\n  loadDeploymentConfig,\n  loadDeploymentConfigFromDir,\n  loadProjectLocalConfig,\n  legacyDeploymentStateDir,\n  rootDeploymentStateDir,\n} from \"./filePaths.js\";\nimport {\n  ensureBackendStopped,\n  localDeploymentUrl,\n  withRunningBackend,\n} from \"./run.js\";\nimport { handlePotentialUpgradeAndStart } from \"./upgrade.js\";\nimport { LocalDeploymentError, printLocalDeploymentOnError } from \"./errors.js\";\nimport {\n  chooseLocalBackendPorts,\n  printLocalDeploymentWelcomeMessage,\n} from \"./utils.js\";\nimport { ensureBackendBinaryDownloaded } from \"./download.js\";\nimport { defaultEnvBackend } from \"../defaultEnv.js\";\nimport { deploymentEnvBackend, EnvVar } from \"../env.js\";\nimport { getProjectDetails } from \"../deploymentSelection.js\";\nimport { DeploymentDetails } from \"../deployment.js\";\nimport { LEGACY_LOCAL_BACKEND_INSTANCE_SECRET } from \"./secrets.js\";\n\nexport async function handleLocalDeployment(\n  ctx: Context,\n  options: {\n    teamSlug: string;\n    projectSlug: string;\n    ports: {\n      cloud: number | undefined;\n      site: number | undefined;\n    };\n    backendVersion?: string | undefined;\n    forceUpgrade: boolean;\n  },\n): Promise<DeploymentDetails> {\n  const existingDeploymentForProject = await getExistingDeployment(ctx, {\n    projectSlug: options.projectSlug,\n    teamSlug: options.teamSlug,\n  });\n  const isFirstTime = existingDeploymentForProject === null;\n  if (isFirstTime) {\n    printLocalDeploymentWelcomeMessage();\n  }\n  ctx.registerCleanup(async (_exitCode, err) => {\n    if (err instanceof LocalDeploymentError) {\n      printLocalDeploymentOnError();\n    }\n  });\n  if (existingDeploymentForProject !== null) {\n    logVerbose(`Found existing deployment for project ${options.projectSlug}`);\n    // If it's still running for some reason, exit and tell the user to kill it.\n    // It's fine if a different backend is running on these ports though since we'll\n    // pick new ones.\n    await ensureBackendStopped(ctx, {\n      ports: {\n        cloud: existingDeploymentForProject.config.ports.cloud,\n      },\n      maxTimeSecs: 5,\n      deploymentName: existingDeploymentForProject.deploymentName,\n      allowOtherDeployments: true,\n    });\n  }\n\n  const { binaryPath, version } = await ensureBackendBinaryDownloaded(\n    ctx,\n    options.backendVersion === undefined\n      ? {\n          kind: \"latest\",\n          allowedVersion: existingDeploymentForProject?.config.backendVersion,\n        }\n      : { kind: \"version\", version: options.backendVersion },\n  );\n  const { cloudPort, sitePort } = await chooseLocalBackendPorts(ctx, {\n    requestedPorts: options.ports,\n    suggestedPorts: existingDeploymentForProject?.config.ports,\n  });\n  const { deploymentName, projectId } = await bigBrainStart(ctx, {\n    port: cloudPort,\n    projectSlug: options.projectSlug,\n    teamSlug: options.teamSlug,\n    instanceName: existingDeploymentForProject?.deploymentName ?? null,\n  });\n\n  const { cleanupHandle, adminKey } = await handlePotentialUpgradeAndStart(\n    ctx,\n    {\n      deploymentKind: \"local\",\n      deploymentName,\n      oldVersion: existingDeploymentForProject?.config.backendVersion ?? null,\n      newBinaryPath: binaryPath,\n      newVersion: version,\n      ports: { cloud: cloudPort, site: sitePort },\n      existingCredentials: existingDeploymentForProject?.config\n        ? {\n            adminKey: existingDeploymentForProject?.config.adminKey,\n            instanceSecret:\n              existingDeploymentForProject?.config.instanceSecret ??\n              LEGACY_LOCAL_BACKEND_INSTANCE_SECRET,\n          }\n        : null,\n      forceUpgrade: options.forceUpgrade,\n      cloudProjectId: projectId,\n    },\n  );\n\n  if (isFirstTime) {\n    await importDefaultEnvVars(ctx, {\n      teamSlug: options.teamSlug,\n      projectSlug: options.projectSlug,\n      deploymentName,\n      deploymentUrl: localDeploymentUrl(cloudPort),\n      adminKey,\n    });\n  }\n\n  // Periodically report activity to BigBrain every 60 seconds.\n  // Uses self-scheduling setTimeout to avoid overlapping requests.\n  let activityTimeout: ReturnType<typeof setTimeout> | null = null;\n  let activityPingStopped = false;\n  async function activityPing() {\n    if (activityPingStopped) {\n      return;\n    }\n    try {\n      await bigBrainRecordActivity(ctx, {\n        instanceName: deploymentName,\n        adminKey,\n      });\n    } catch {\n      // Best-effort: don't crash on failed pings\n    }\n\n    if (activityPingStopped) {\n      return;\n    }\n    activityTimeout = setTimeout(async () => {\n      void activityPing();\n    }, 60_000);\n  }\n  void activityPing();\n\n  const cleanupFunc = ctx.removeCleanup(cleanupHandle);\n  ctx.registerCleanup(async (exitCode, err) => {\n    activityPingStopped = true;\n    if (activityTimeout !== null) {\n      clearTimeout(activityTimeout);\n    }\n    if (cleanupFunc !== null) {\n      await cleanupFunc(exitCode, err);\n    }\n    await bigBrainPause(ctx, {\n      projectSlug: options.projectSlug,\n      teamSlug: options.teamSlug,\n    });\n  });\n\n  return {\n    adminKey,\n    deploymentName,\n    deploymentUrl: localDeploymentUrl(cloudPort),\n    reference: null,\n    isDefault: false,\n  };\n}\n\nexport async function loadLocalDeploymentCredentials(\n  ctx: Context,\n  deploymentName: string,\n): Promise<{\n  deploymentName: string;\n  deploymentUrl: string;\n  adminKey: string;\n}> {\n  const config = loadDeploymentConfig(ctx, \"local\", deploymentName);\n  if (config === null) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"Failed to load deployment config - try running `npx convex dev --configure`\",\n    });\n  }\n  return {\n    deploymentName,\n    deploymentUrl: localDeploymentUrl(config.ports.cloud),\n    adminKey: config.adminKey,\n  };\n}\n\nasync function getExistingDeployment(\n  ctx: Context,\n  options: {\n    projectSlug: string;\n    teamSlug: string;\n  },\n): Promise<{ deploymentName: string; config: LocalDeploymentConfig } | null> {\n  const { projectSlug, teamSlug } = options;\n\n  // Check project-local storage first - this is the new default location\n  const projectLocal = loadProjectLocalConfig(ctx);\n  if (projectLocal !== null) {\n    // Verify this deployment is for the expected project (matches the naming pattern)\n    const expectedPrefix = `local-${teamSlug.replace(/-/g, \"_\")}-${projectSlug.replace(/-/g, \"_\")}`;\n    if (projectLocal.deploymentName.startsWith(expectedPrefix)) {\n      return projectLocal;\n    }\n    logVerbose(\n      `Project-local deployment ${projectLocal.deploymentName} doesn't match expected prefix ${expectedPrefix}`,\n    );\n  }\n\n  // Fall back to checking legacy home directory\n  const prefix = `local-${teamSlug.replace(/-/g, \"_\")}-${projectSlug.replace(/-/g, \"_\")}`;\n  const legacyDeployments = await getLegacyLocalDeployments(ctx);\n  const existingDeploymentForProject = legacyDeployments.find((d) =>\n    d.deploymentName.startsWith(prefix),\n  );\n  if (existingDeploymentForProject === undefined) {\n    return null;\n  }\n  return {\n    deploymentName: existingDeploymentForProject.deploymentName,\n    config: existingDeploymentForProject.config,\n  };\n}\n\n/**\n * Get local deployments from the legacy home directory location.\n * This is used for backward compatibility and for listing deployments in offline mode.\n */\nasync function getLegacyLocalDeployments(ctx: Context): Promise<\n  Array<{\n    deploymentName: string;\n    config: LocalDeploymentConfig;\n  }>\n> {\n  const dir = rootDeploymentStateDir(\"local\");\n  if (!ctx.fs.exists(dir)) {\n    return [];\n  }\n  const deploymentNames = ctx.fs\n    .listDir(dir)\n    .map((d) => d.name)\n    .filter((d) => d.startsWith(\"local-\"));\n  return deploymentNames.flatMap((deploymentName) => {\n    const legacyDir = legacyDeploymentStateDir(\"local\", deploymentName);\n    const config = loadDeploymentConfigFromDir(ctx, legacyDir);\n    if (config !== null) {\n      return [{ deploymentName, config }];\n    }\n    return [];\n  });\n}\n\n/** Copies the default dev env vars from big brain the first time the local dev backend is started */\nexport async function importDefaultEnvVars(\n  ctx: Context,\n  {\n    teamSlug,\n    projectSlug,\n    deploymentName,\n    deploymentUrl,\n    adminKey,\n  }: {\n    teamSlug: string;\n    projectSlug: string;\n    deploymentName: string;\n    deploymentUrl: string;\n    adminKey: string;\n  },\n) {\n  showSpinner(\"Importing default env vars...\");\n\n  const project = await getProjectDetails(ctx, {\n    kind: \"teamAndProjectSlugs\",\n    teamSlug,\n    projectSlug,\n  });\n  let defaults: EnvVar[];\n  try {\n    defaults = await defaultEnvBackend(ctx, project.id, \"dev\").list();\n  } catch (err) {\n    if (err instanceof ThrowingFetchError && err.response.status === 403) {\n      stopSpinner();\n      logWarning(\n        `Skipping default env var import: ${err.serverErrorData?.message ?? err.message}`,\n      );\n      return;\n    }\n    return await logAndHandleFetchError(ctx, err);\n  }\n  if (defaults.length === 0) {\n    logFinishedStep(\"No default env vars to import.\");\n    return;\n  }\n\n  const deployment = {\n    deploymentUrl,\n    deploymentFields: {\n      deploymentName,\n      deploymentType: \"local\" as const,\n      projectSlug,\n      teamSlug,\n      reference: null,\n      isDefault: false,\n    },\n  };\n\n  await withRunningBackend({\n    ctx,\n    deployment,\n    action: async () => {\n      await deploymentEnvBackend(ctx, { deploymentUrl, adminKey }).update(\n        defaults.map((v) => ({ name: v.name, value: v.value })),\n      );\n      logFinishedStep(\n        `Imported ${defaults.length} environment ${defaults.length === 1 ? \"variable\" : \"variables\"} from default environment variables: ${defaults.map((v) => v.name).join(\", \")}`,\n      );\n    },\n  });\n}\n", "import { Context } from \"../../../bundler/context.js\";\nimport {\n  logFinishedStep,\n  logVerbose,\n  logWarning,\n} from \"../../../bundler/log.js\";\nimport {\n  LocalDeploymentConfig,\n  LocalDeploymentKind,\n  saveDeploymentConfig,\n} from \"./filePaths.js\";\nimport { runLocalBackend } from \"./run.js\";\nimport { releaseDate } from \"./utils.js\";\nimport { promptYesNo } from \"../utils/prompts.js\";\nimport { ensureBackendBinaryDownloaded } from \"./download.js\";\nimport {\n  generateLocalDevSecretsWithLatestBinary,\n  LEGACY_LOCAL_BACKEND_INSTANCE_SECRET,\n} from \"./secrets.js\";\n\nexport async function handlePotentialUpgradeAndStart(\n  ctx: Context,\n  args: {\n    deploymentKind: LocalDeploymentKind;\n    deploymentName: string;\n    oldVersion: string | null;\n    newBinaryPath: string;\n    newVersion: string;\n    ports: {\n      cloud: number;\n      site: number;\n    };\n    existingCredentials: { adminKey: string; instanceSecret: string } | null;\n    forceUpgrade: boolean;\n    cloudProjectId: number | undefined;\n  },\n): Promise<{ cleanupHandle: string; adminKey: string }> {\n  const { adminKey, instanceSecret } =\n    args.existingCredentials === null ||\n    args.existingCredentials.instanceSecret ===\n      LEGACY_LOCAL_BACKEND_INSTANCE_SECRET\n      ? // Using `generateLocalDevSecretsFromLatestBinary` instead of `generateLocalDevSecrets`\n        // here, because `newBinaryPath` can be a binary that doesn\u2019t support\n        // the `keygen admin-key` subcommand (when the --local-backend-version flag is provided to the CLI)\n        //\n        // In most cases (the user is not using the flag), we have already downloaded the latest binary\n        // shortly before in handleLocalDeployment/handleAnonymousDeployment, so this doesn\u2019t cause an\n        // extra download (even if the user chooses later not to upgrade their deployment)\n        await generateLocalDevSecretsWithLatestBinary(ctx, {\n          deploymentName: args.deploymentName,\n        })\n      : args.existingCredentials;\n  const newConfig: LocalDeploymentConfig = {\n    ports: args.ports,\n    backendVersion: args.newVersion,\n    adminKey,\n    instanceSecret,\n    cloudProjectId: args.cloudProjectId,\n  };\n  if (args.oldVersion === null || args.oldVersion === args.newVersion) {\n    // No upgrade needed. Save the current config and start running the backend.\n    saveDeploymentConfig(\n      ctx,\n      args.deploymentKind,\n      args.deploymentName,\n      newConfig,\n    );\n    const { cleanupHandle } = await runLocalBackend(ctx, {\n      binaryPath: args.newBinaryPath,\n      backendVersion: args.newVersion,\n      deploymentKind: args.deploymentKind,\n      deploymentName: args.deploymentName,\n      ports: args.ports,\n      instanceSecret,\n      isLatestVersion: true,\n    });\n    return { cleanupHandle, adminKey };\n  }\n  logVerbose(\n    `Considering upgrade from ${args.oldVersion} to ${args.newVersion}`,\n  );\n  const confirmed =\n    args.forceUpgrade ||\n    !process.stdin.isTTY ||\n    (await promptYesNo(ctx, {\n      message: `This deployment is using an older version of the Convex backend. Upgrade now?`,\n      default: true,\n    }));\n  if (!confirmed) {\n    const { binaryPath: oldBinaryPath } = await ensureBackendBinaryDownloaded(\n      ctx,\n      {\n        kind: \"version\",\n        version: args.oldVersion,\n      },\n    );\n    // Skipping upgrade, save the config with the old version and run.\n    saveDeploymentConfig(ctx, args.deploymentKind, args.deploymentName, {\n      ...newConfig,\n      backendVersion: args.oldVersion,\n    });\n    const { cleanupHandle } = await runLocalBackend(ctx, {\n      binaryPath: oldBinaryPath,\n      backendVersion: args.oldVersion,\n      ports: args.ports,\n      deploymentKind: args.deploymentKind,\n      deploymentName: args.deploymentName,\n      instanceSecret,\n      isLatestVersion: false,\n    });\n    return { cleanupHandle, adminKey };\n  }\n  const { cleanupHandle } = await handleUpgrade(ctx, {\n    deploymentKind: args.deploymentKind,\n    deploymentName: args.deploymentName,\n    oldVersion: args.oldVersion,\n    newBinaryPath: args.newBinaryPath,\n    newVersion: args.newVersion,\n    ports: args.ports,\n    adminKey,\n    instanceSecret,\n    cloudProjectId: args.cloudProjectId,\n  });\n  return { cleanupHandle, adminKey };\n}\n\n/**\n * Upgrade in place: hand the existing data directory to the new binary, which\n * migrates its own on-disk state on startup (the same path self-hosted\n * deployments take).\n */\nasync function handleUpgrade(\n  ctx: Context,\n  args: {\n    deploymentName: string;\n    deploymentKind: LocalDeploymentKind;\n    oldVersion: string;\n    newBinaryPath: string;\n    newVersion: string;\n    ports: {\n      cloud: number;\n      site: number;\n    };\n    instanceSecret: string;\n    adminKey: string;\n    cloudProjectId: number | undefined;\n  },\n): Promise<{ cleanupHandle: string }> {\n  const isDowngrade = _isDowngrade(args.oldVersion, args.newVersion);\n  if (isDowngrade) {\n    logWarning(\n      `Moving a local deployment back to an older backend version (${args.oldVersion} \u2192 ${args.newVersion}) isn't supported: ` +\n        `the older backend may not be able to read data written by the newer one. ` +\n        `If it fails to start, delete the deployment's state directory to start fresh on this version.`,\n    );\n  }\n\n  logVerbose(`Running backend on new version ${args.newVersion}`);\n  const { cleanupHandle } = await runLocalBackend(ctx, {\n    binaryPath: args.newBinaryPath,\n    backendVersion: args.newVersion,\n    ports: args.ports,\n    deploymentKind: args.deploymentKind,\n    deploymentName: args.deploymentName,\n    instanceSecret: args.instanceSecret,\n    isLatestVersion: true,\n  });\n\n  logFinishedStep(\n    `Successfully ${isDowngrade ? \"moved\" : \"upgraded\"} to backend version ${args.newVersion}`,\n  );\n  saveDeploymentConfig(ctx, args.deploymentKind, args.deploymentName, {\n    ports: args.ports,\n    backendVersion: args.newVersion,\n    adminKey: args.adminKey,\n    instanceSecret: args.instanceSecret,\n    cloudProjectId: args.cloudProjectId,\n  });\n\n  return { cleanupHandle };\n}\n\n/** Whether `newVersion` predates `oldVersion`, as far as we can tell. */\nexport function _isDowngrade(oldVersion: string, newVersion: string): boolean {\n  const oldDate = releaseDate(oldVersion);\n  const newDate = releaseDate(newVersion);\n  return oldDate !== null && newDate !== null && newDate < oldDate;\n}\n", "import { Context } from \"../../../bundler/context.js\";\nimport { logVerbose } from \"../../../bundler/log.js\";\nimport { ensureBackendBinaryDownloaded } from \"./download.js\";\nimport { LocalDeploymentError } from \"./errors.js\";\nimport { execFile } from \"child_process\";\nimport { promisify } from \"util\";\nimport crypto from \"crypto\";\n\nexport const LEGACY_LOCAL_BACKEND_INSTANCE_SECRET =\n  \"4361726e697461732c206c69746572616c6c79206d65616e696e6720226c6974\";\n\n/**\n * Generates an instance secret and an admin key for a new (or just upgraded) local deployment.\n */\nexport async function generateLocalDevSecrets(\n  ctx: Context,\n  {\n    deploymentName,\n    latestBinaryPath,\n  }: {\n    deploymentName: string;\n    /**\n     * A path to the local backend binary.\n     *\n     * This must always be the latest version of the local binary that has been published,\n     * in order to make sure the `keygen admin-key` command is available. If you need to call\n     * this without having access to the latest binary, use `generateLocalDevSecretsWithLatestBinary`\n     * which will download the latest version when necessary.\n     */\n    latestBinaryPath: string;\n  },\n): Promise<{\n  instanceSecret: string;\n  adminKey: string;\n}> {\n  logVerbose(\"Generating local dev secrets\");\n\n  const instanceSecret = generateInstanceSecret();\n\n  let stdout: string;\n  try {\n    ({ stdout } = await promisify(execFile)(latestBinaryPath, [\n      \"keygen\",\n      \"admin-key\",\n      \"--instance-name\",\n      deploymentName,\n      \"--instance-secret\",\n      instanceSecret,\n    ]));\n  } catch (e) {\n    const err = e as { stderr?: string; message: string };\n    const detail = err.stderr ? err.stderr : err.message;\n    const message = `Failed to generate admin key:\\n${detail}`;\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: message,\n      errForSentry: new LocalDeploymentError(message),\n    });\n  }\n\n  const adminKey = stdout.trim();\n\n  return {\n    instanceSecret,\n    adminKey,\n  };\n}\n\nfunction generateInstanceSecret(): string {\n  return crypto.randomBytes(32).toString(\"hex\");\n}\n\n/**\n * Similar to generateLocalDevSecrets, but can be called when we\u2019re not confident\n * we have a binary that supports `keygen admin-key`\n */\nexport async function generateLocalDevSecretsWithLatestBinary(\n  ctx: Context,\n  {\n    deploymentName,\n  }: {\n    deploymentName: string;\n  },\n) {\n  const { binaryPath: latestBinaryPath } = await ensureBackendBinaryDownloaded(\n    ctx,\n    {\n      kind: \"latest\",\n    },\n  );\n  return generateLocalDevSecrets(ctx, { deploymentName, latestBinaryPath });\n}\n", "import { Context } from \"../../bundler/context.js\";\nimport { CloudDeploymentType } from \"./api.js\";\nimport { EnvVar, EnvVarBackend, EnvVarChange } from \"./env.js\";\nimport { typedPlatformClient } from \"./utils/utils.js\";\n\nexport function defaultEnvBackend(\n  ctx: Context,\n  projectId: number,\n  dtype: CloudDeploymentType,\n): EnvVarBackend {\n  return {\n    async get(name) {\n      const result = (\n        await typedPlatformClient(ctx).GET(\n          \"/projects/{project_id}/list_default_environment_variables\",\n          {\n            params: {\n              path: { project_id: projectId },\n              query: { name, deploymentType: dtype },\n            },\n          },\n        )\n      ).data!;\n      const items = result.items;\n      if (items.length === 0) return null;\n      return { name: items[0].name, value: items[0].value };\n    },\n    async list() {\n      const result = (\n        await typedPlatformClient(ctx).GET(\n          \"/projects/{project_id}/list_default_environment_variables\",\n          {\n            params: {\n              path: { project_id: projectId },\n              query: { deploymentType: dtype },\n            },\n          },\n        )\n      ).data!;\n      return result.items.map(\n        (item): EnvVar => ({ name: item.name, value: item.value }),\n      );\n    },\n    async update(changes: EnvVarChange[]) {\n      await typedPlatformClient(ctx).POST(\n        \"/projects/{project_id}/update_default_environment_variables\",\n        {\n          params: {\n            path: { project_id: projectId },\n          },\n          body: {\n            changes: changes.map((c) => ({\n              name: c.name,\n              deploymentType: dtype,\n              value: c.value ?? null,\n            })),\n          },\n        },\n      );\n    },\n    notice: ` (in default env vars for ${dtype} deployments)`,\n  };\n}\n", "import { chalkStderr } from \"chalk\";\nimport * as dotenv from \"dotenv\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n  logFailure,\n  logFinishedStep,\n  logMessage,\n  logOutput,\n} from \"../../bundler/log.js\";\nimport { runSystemQuery } from \"./run.js\";\nimport { deploymentFetch, logAndHandleFetchError } from \"./utils/utils.js\";\nimport { readFromStdin } from \"./utils/stdin.js\";\nimport { promptSecret } from \"./utils/prompts.js\";\nimport { detectAiAgent } from \"./utils/aiAgent.js\";\nimport {\n  EXPECTED_CONVEX_URL_NAMES,\n  EXPECTED_SITE_URL_NAMES,\n} from \"./envvars.js\";\nimport { formatEnvValueForDotfile } from \"./formatEnvValueForDotfile.js\";\nimport {\n  CONVEX_DEPLOY_KEY_ENV_VAR_NAME,\n  CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n  CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME,\n  CONVEX_SELF_HOSTED_URL_VAR_NAME,\n  CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME,\n} from \"./utils/utils.js\";\n\nfunction formatList(items: string[]): string {\n  if (items.length === 0) return \"\";\n  if (items.length === 1) return items[0];\n  if (items.length === 2) return `${items[0]} and ${items[1]}`;\n  return `${items.slice(0, -1).join(\", \")}, and ${items[items.length - 1]}`;\n}\n\nexport type EnvVarChange = {\n  name: string;\n  value: string | null; // null = delete\n};\n\nexport type EnvVar = {\n  name: string;\n  value: string;\n};\n\nexport interface EnvVarBackend {\n  get(name: string): Promise<EnvVar | null>;\n  list(): Promise<EnvVar[]>;\n  update(changes: EnvVarChange[]): Promise<void>;\n  notice: string;\n}\n\nexport function deploymentEnvBackend(\n  ctx: Context,\n  deployment: {\n    deploymentUrl: string;\n    adminKey: string;\n    deploymentNotice?: string;\n  },\n): EnvVarBackend {\n  return {\n    async get(name) {\n      const envVar = (await runSystemQuery(ctx, {\n        ...deployment,\n        functionName: \"_system/cli/queryEnvironmentVariables:get\",\n        componentPath: undefined,\n        args: { name },\n      })) as EnvVar | null;\n      return envVar;\n    },\n    async list() {\n      return (await runSystemQuery(ctx, {\n        ...deployment,\n        functionName: \"_system/cli/queryEnvironmentVariables\",\n        componentPath: undefined,\n        args: {},\n      })) as EnvVar[];\n    },\n    async update(changes) {\n      const fetch = deploymentFetch(ctx, deployment);\n      try {\n        await fetch(\"/api/update_environment_variables\", {\n          body: JSON.stringify({ changes }),\n          method: \"POST\",\n        });\n      } catch (e) {\n        return await logAndHandleFetchError(ctx, e);\n      }\n    },\n    notice: deployment.deploymentNotice ?? \"\",\n  };\n}\n\nexport async function envSet(\n  ctx: Context,\n  backend: EnvVarBackend,\n  originalName: string | undefined,\n  originalValue: string | undefined,\n  options?: {\n    fromFile?: string;\n    force?: boolean;\n    secret?: boolean;\n  },\n) {\n  const { fromFile, force = false } = options ?? {};\n  if (originalName) {\n    let name = originalName,\n      value: string;\n    const parsed = await allowEqualsSyntax(ctx, originalName, originalValue);\n    if (parsed) {\n      [name, value] = parsed;\n    } else if (fromFile) {\n      value = await getFileContents(ctx, fromFile);\n    } else if (!process.stdin.isTTY) {\n      value = await getStdIn(ctx);\n    } else {\n      value = await promptSecret(ctx, {\n        message: `Enter value for ${name}:`,\n      });\n    }\n    await backend.update([{ name, value }]);\n    if (options?.secret) {\n      const formatted = /\\s/.test(value) ? `\"${value}\"` : value;\n      logFinishedStep(\n        `Successfully set ${chalkStderr.bold(name)} to ${chalkStderr.bold(formatted)}${backend.notice}`,\n      );\n    } else {\n      logFinishedStep(\n        `Successfully set ${chalkStderr.bold(name)}${backend.notice}`,\n      );\n    }\n    return true;\n  }\n  let content: string, source: string;\n  if (fromFile) {\n    content = await getFileContents(ctx, fromFile);\n    source = fromFile;\n  } else if (!process.stdin.isTTY) {\n    content = await getStdIn(ctx);\n    source = \"stdin\";\n  } else {\n    return false;\n  }\n  await envSetFromContent(ctx, backend, {\n    content,\n    source,\n    force,\n  });\n  return true;\n}\n\nexport async function envGet(\n  ctx: Context,\n  backend: EnvVarBackend,\n  name: string,\n) {\n  const envVar = await backend.get(name);\n  if (envVar === null) {\n    logFailure(`Environment variable \"${name}\" not found${backend.notice}`);\n    return;\n  }\n  logOutput(`${envVar.value}`);\n}\n\nexport async function envRemove(\n  ctx: Context,\n  backend: EnvVarBackend,\n  name: string,\n) {\n  await backend.update([{ name, value: null }]);\n  logFinishedStep(\n    `Successfully unset ${chalkStderr.bold(name)}${backend.notice}`,\n  );\n}\n\nexport async function envList(\n  ctx: Context,\n  backend: EnvVarBackend,\n  options?: { namesOnly?: boolean; includeValues?: boolean },\n) {\n  const envs = await backend.list();\n  if (envs.length === 0) {\n    logMessage(`No environment variables set${backend.notice}`);\n    return;\n  }\n  // Agents tend to run `env list` to check what is set, which copies every\n  // secret into their context. They get names unless they ask for values.\n  const agent =\n    options?.namesOnly || options?.includeValues ? null : await detectAiAgent();\n  const namesOnly = options?.namesOnly || agent !== null;\n  for (const { name, value } of envs) {\n    if (namesOnly) {\n      logOutput(name);\n      continue;\n    }\n    const { formatted, warning } = formatEnvValueForDotfile(value);\n    if (warning) {\n      logMessage(`Warning (${name}): ${warning}`);\n    }\n    logOutput(`${name}=${formatted}`);\n  }\n  if (agent !== null) {\n    logMessage(\n      `Listed names only because an AI agent (${agent}) appears to be running this command. Pass --include-values to print the values too.`,\n    );\n  }\n}\n\nasync function getFileContents(\n  ctx: Context,\n  filePath: string,\n): Promise<string> {\n  if (!ctx.fs.exists(filePath)) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `error: file not found: ${filePath}`,\n    });\n  }\n  return ctx.fs.readUtf8File(filePath);\n}\n\nasync function getStdIn(ctx: Context): Promise<string> {\n  try {\n    return await readFromStdin();\n  } catch (error) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `error: failed to read from stdin: ${error instanceof Error ? error.message : String(error)}`,\n    });\n  }\n}\n\nasync function envSetFromContent(\n  ctx: Context,\n  backend: EnvVarBackend,\n  options: {\n    content: string;\n    source: string;\n    force: boolean;\n  },\n) {\n  const { content, source, force } = options;\n  const parsedEnv = dotenv.parse(content);\n\n  // Filter out CLI-managed environment variables\n  const envVars = Object.entries(parsedEnv);\n  const filteredVars: string[] = [];\n\n  const envVarsToSet: [string, string][] = [];\n  const managedVars = new Set<string>([\n    CONVEX_DEPLOY_KEY_ENV_VAR_NAME,\n    CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME,\n    CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n    CONVEX_SELF_HOSTED_URL_VAR_NAME,\n    CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME,\n    ...EXPECTED_CONVEX_URL_NAMES,\n    ...EXPECTED_SITE_URL_NAMES,\n  ]);\n  for (const [name, value] of envVars) {\n    if (managedVars.has(name)) {\n      filteredVars.push(name);\n    } else {\n      envVarsToSet.push([name, value]);\n    }\n  }\n\n  if (filteredVars.length > 0) {\n    const varNames = filteredVars.map((n) => chalkStderr.bold(n));\n    const formattedNames = formatList(varNames);\n    logMessage(\n      `Skipping ${filteredVars.length} CLI-managed environment variable${filteredVars.length === 1 ? \"\" : \"s\"}: ${formattedNames}`,\n    );\n  }\n\n  if (envVarsToSet.length === 0) {\n    if (envVars.length === 0) {\n      logMessage(`No environment variables found in ${source}.`);\n    }\n    return;\n  }\n\n  // Fetch existing environment variables\n  const existingEnvVars = await backend.list();\n\n  const existingEnvMap = new Map(\n    existingEnvVars.map((env) => [env.name, env.value]),\n  );\n\n  // Categorize the environment variables\n  const newVars: [string, string][] = [];\n  const updatedVars: [string, string][] = [];\n  const unchangedVars: [string, string][] = [];\n  const conflicts: { name: string; existing: string; new: string }[] = [];\n\n  for (const [name, value] of envVarsToSet) {\n    const existingValue = existingEnvMap.get(name);\n    if (existingValue === undefined) {\n      newVars.push([name, value]);\n    } else if (existingValue === value) {\n      unchangedVars.push([name, value]);\n    } else if (force) {\n      updatedVars.push([name, value]);\n    } else {\n      conflicts.push({ name, existing: existingValue, new: value });\n    }\n  }\n\n  // Check for conflicts if not replacing\n  if (conflicts.length > 0) {\n    const varNames = conflicts.map((c) => chalkStderr.bold(c.name));\n    const formattedNames = formatList(varNames);\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        `error: environment variable${conflicts.length === 1 ? \"\" : \"s\"} ${formattedNames} already exist${conflicts.length === 1 ? \"s\" : \"\"} with different value${conflicts.length === 1 ? \"\" : \"s\"}.\\n\\n` +\n        `Use ${chalkStderr.bold(\"--force\")} to overwrite existing values.`,\n    });\n  }\n\n  // Build the changes: only new vars when not replacing, new + updated when replacing\n  const varsToUpdate = force ? [...newVars, ...updatedVars] : newVars;\n  const changes: EnvVarChange[] = varsToUpdate.map(([name, value]) => ({\n    name,\n    value,\n  }));\n\n  if (changes.length > 0) {\n    await backend.update(changes);\n  }\n\n  const newCount = newVars.length;\n  const updatedCount = updatedVars.length;\n  const unchangedCount = unchangedVars.length;\n\n  const parts = [];\n  if (newCount > 0) parts.push(`${newCount} new`);\n  if (updatedCount > 0) parts.push(`${updatedCount} updated`);\n  if (unchangedCount > 0) parts.push(`${unchangedCount} unchanged`);\n\n  const totalProcessed = newCount + updatedCount + unchangedCount;\n  if (changes.length === 0) {\n    logMessage(\n      `All ${totalProcessed} environment variable${totalProcessed === 1 ? \"\" : \"s\"} from ${chalkStderr.bold(source)} already set${backend.notice}`,\n    );\n  } else {\n    logFinishedStep(\n      `Successfully set ${changes.length} environment variable${changes.length === 1 ? \"\" : \"s\"} from ${chalkStderr.bold(source)} (${parts.join(\", \")})${backend.notice}`,\n    );\n  }\n}\n\nasync function allowEqualsSyntax(\n  ctx: Context,\n  name: string,\n  value: string | undefined,\n): Promise<[string, string] | null> {\n  if (/^[a-zA-Z][a-zA-Z0-9_]*=/.test(name)) {\n    const [n, ...values] = name.split(\"=\");\n    if (value === undefined) {\n      return [n, values.join(\"=\")];\n    } else {\n      await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `When setting an environment variable, you can either set a value with 'NAME=value', or with NAME value, but not both. Are you missing quotes around the CLI argument? Try: \\n  npx convex env set '${name} ${value}'`,\n      });\n    }\n  }\n  if (value === undefined) return null;\n  return [name, value];\n}\n", "import { chalkStderr } from \"chalk\";\nimport util from \"util\";\nimport ws from \"ws\";\nimport { ConvexHttpClient } from \"../../browser/http_client.js\";\nimport { BaseConvexClient } from \"../../browser/index.js\";\nimport {\n  PaginationResult,\n  UserIdentityAttributes,\n  makeFunctionReference,\n} from \"../../server/index.js\";\nimport { Value, convexToJson, jsonToConvex } from \"../../values/value.js\";\nimport { Context, OneoffCtx } from \"../../bundler/context.js\";\nimport { logFinishedStep, logMessage, logOutput } from \"../../bundler/log.js\";\nimport {\n  permissionDeniedErrorMessage,\n  waitForever,\n  waitUntilCalled,\n} from \"./utils/utils.js\";\nimport JSON5 from \"json5\";\nimport path from \"path\";\nimport { readProjectConfig } from \"./config.js\";\nimport { watchAndPush } from \"./dev.js\";\nimport { Logger, DefaultLogger } from \"../../browser/logging.js\";\n\nexport async function runFunctionAndLog(\n  ctx: Context,\n  args: {\n    deploymentUrl: string;\n    adminKey: string;\n    functionName: string;\n    argsString: string;\n    identityString?: string | undefined;\n    componentPath?: string | undefined;\n    callbacks?:\n      | {\n          onSuccess?: () => void | undefined;\n        }\n      | undefined;\n  },\n) {\n  const client = new ConvexHttpClient(args.deploymentUrl, {\n    logger: instantiateStderrLogger(),\n  });\n  const identity = args.identityString\n    ? await getFakeIdentity(ctx, args.identityString)\n    : undefined;\n  client.setAdminAuth(args.adminKey, identity);\n\n  const functionArgs = await parseArgs(ctx, args.argsString);\n  const { projectConfig } = await readProjectConfig(ctx);\n  const parsedFunctionName = await parseFunctionName(\n    ctx,\n    args.functionName,\n    projectConfig.functions,\n  );\n  let result: Value;\n  try {\n    result = await client.function(\n      makeFunctionReference(parsedFunctionName),\n      args.componentPath,\n      functionArgs,\n    );\n  } catch (err) {\n    const errorMessage = (err as Error).toString().trim();\n\n    const permissionError = permissionDeniedErrorMessage(errorMessage);\n    if (permissionError !== null) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: chalkStderr.red(permissionError),\n      });\n    }\n\n    if (errorMessage.includes(\"Could not find function\")) {\n      const functions = (await runSystemQuery(ctx, {\n        deploymentUrl: args.deploymentUrl,\n        adminKey: args.adminKey,\n        functionName: \"_system/cli/modules:apiSpec\",\n        componentPath: args.componentPath,\n        args: {},\n      })) as (\n        | {\n            functionType: \"Query\" | \"Mutation\" | \"Action\";\n            identifier: string;\n          }\n        | {\n            functionType: \"HttpAction\";\n          }\n      )[];\n\n      const functionNames = functions\n        .filter(\n          (\n            fn,\n          ): fn is {\n            functionType: \"Query\" | \"Mutation\" | \"Action\";\n            identifier: string;\n          } => fn.functionType !== \"HttpAction\",\n        )\n        .map(({ identifier }) => {\n          const separatorPos = identifier.indexOf(\":\");\n\n          const path =\n            separatorPos === -1\n              ? \"\"\n              : identifier.substring(0, separatorPos).replace(/\\.js$/, \"\");\n          const name =\n            separatorPos === -1\n              ? identifier\n              : identifier.substring(separatorPos + 1);\n\n          return `\u2022 ${chalkStderr.gray(`${path}:`)}${name}`;\n        });\n\n      const availableFunctionsMessage =\n        functionNames.length > 0\n          ? `Available functions:\\n${functionNames.join(\"\\n\")}`\n          : \"No functions found.\";\n\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem data\",\n        printedMessage: `Failed to run function \"${args.functionName}\":\\n${chalkStderr.red(errorMessage)}\\n\\n${availableFunctionsMessage}`,\n      });\n    }\n\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem or env vars\",\n      printedMessage: `Failed to run function \"${args.functionName}\":\\n${chalkStderr.red(errorMessage)}`,\n    });\n  }\n\n  args.callbacks?.onSuccess?.();\n\n  // `null` is the default return type\n  if (result !== null) {\n    logOutput(formatValue(result));\n  }\n}\n\nasync function getFakeIdentity(ctx: Context, identityString: string) {\n  let identity: UserIdentityAttributes;\n  try {\n    identity = JSON5.parse(identityString);\n  } catch (err) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Failed to parse identity as JSON: \"${identityString}\"\\n${chalkStderr.red((err as Error).toString().trim())}`,\n    });\n  }\n  const subject = identity.subject ?? \"\" + simpleHash(JSON.stringify(identity));\n  const issuer = identity.issuer ?? \"https://convex.test\";\n  const tokenIdentifier =\n    identity.tokenIdentifier ?? `${issuer.toString()}|${subject.toString()}`;\n  return {\n    ...identity,\n    subject,\n    issuer,\n    tokenIdentifier,\n  };\n}\n\nexport async function parseArgs(ctx: Context, argsString: string) {\n  try {\n    const argsJson = JSON5.parse(argsString);\n    return jsonToConvex(argsJson) as Record<string, Value>;\n  } catch (err) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem or env vars\",\n      printedMessage: `Failed to parse arguments as JSON: \"${argsString}\"\\n${chalkStderr.red((err as Error).toString().trim())}`,\n    });\n  }\n}\n\nexport async function parseFunctionName(\n  ctx: Context,\n  functionName: string,\n  // Usually `convex/` -- should contain trailing slash\n  functionDirName: string,\n) {\n  // api.foo.bar -> foo:bar\n  // foo/bar -> foo/bar:default\n  // foo/bar:baz -> foo/bar:baz\n  // convex/foo/bar -> foo/bar:default\n\n  // This is the `api.foo.bar` format\n  if (functionName.startsWith(\"api.\") || functionName.startsWith(\"internal.\")) {\n    const parts = functionName.split(\".\");\n    if (parts.length < 3) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Function name has too few parts: \"${functionName}\"`,\n      });\n    }\n    const exportName = parts.pop();\n    const parsedName = `${parts.slice(1).join(\"/\")}:${exportName}`;\n    return parsedName;\n  }\n\n  // This is the `foo/bar:baz` format\n\n  // This is something like `convex/foo/bar`, which could either be addressing `foo/bar:default` or `convex/foo/bar:default`\n  // if there's a directory with the same name as the functions directory nested directly underneath.\n  // We'll prefer the `convex/foo/bar:default` version, and check if the file exists, and otherwise treat this as a relative path from the project root.\n  const filePath = functionName.split(\":\")[0];\n  const possibleExtensions = [\n    \".ts\",\n    \".js\",\n    \".tsx\",\n    \".jsx\",\n    \".mts\",\n    \".mjs\",\n    \".cts\",\n    \".cjs\",\n  ];\n  let hasExtension = false;\n  let normalizedFilePath: string = filePath;\n  for (const extension of possibleExtensions) {\n    if (filePath.endsWith(extension)) {\n      normalizedFilePath = filePath.slice(0, -extension.length);\n      hasExtension = true;\n      break;\n    }\n  }\n\n  const exportName = functionName.split(\":\")[1] ?? \"default\";\n  const normalizedName = `${normalizedFilePath}:${exportName}`;\n\n  // This isn't a relative path from the project root\n  if (!filePath.startsWith(functionDirName)) {\n    return normalizedName;\n  }\n\n  const filePathWithoutPrefix = normalizedFilePath.slice(\n    functionDirName.length,\n  );\n  const functionNameWithoutPrefix = `${filePathWithoutPrefix}:${exportName}`;\n\n  if (hasExtension) {\n    if (ctx.fs.exists(path.join(functionDirName, filePath))) {\n      return normalizedName;\n    } else {\n      return functionNameWithoutPrefix;\n    }\n  } else {\n    const exists = possibleExtensions.some((extension) =>\n      ctx.fs.exists(path.join(functionDirName, filePath + extension)),\n    );\n    if (exists) {\n      return normalizedName;\n    } else {\n      return functionNameWithoutPrefix;\n    }\n  }\n}\n\nfunction simpleHash(string: string) {\n  let hash = 0;\n  for (let i = 0; i < string.length; i++) {\n    const char = string.charCodeAt(i);\n    hash = (hash << 5) - hash + char;\n    hash = hash & hash; // Convert to 32bit integer\n  }\n  return hash;\n}\n\nexport async function runSystemPaginatedQuery(\n  ctx: Context,\n  args: {\n    deploymentUrl: string;\n    adminKey: string;\n    functionName: string;\n    componentPath: string | undefined;\n    args: Record<string, Value>;\n    limit?: number;\n  },\n) {\n  const results = [];\n  let cursor = null;\n  let isDone = false;\n  while (!isDone && (args.limit === undefined || results.length < args.limit)) {\n    const paginationResult = (await runSystemQuery(ctx, {\n      ...args,\n      args: {\n        ...args.args,\n        paginationOpts: {\n          cursor,\n          numItems:\n            args.limit === undefined ? 10000 : args.limit - results.length,\n        },\n      },\n    })) as unknown as PaginationResult<Record<string, Value>>;\n    isDone = paginationResult.isDone;\n    cursor = paginationResult.continueCursor;\n    results.push(...paginationResult.page);\n  }\n  return results;\n}\n\nexport async function runSystemQuery(\n  ctx: Context,\n  args: {\n    deploymentUrl: string;\n    adminKey: string;\n    functionName: string;\n    componentPath: string | undefined;\n    args: Record<string, Value>;\n  },\n): Promise<Value> {\n  let onResult: (result: Value) => void;\n  const resultPromise = new Promise<Value>((resolve) => {\n    onResult = resolve;\n  });\n  const [donePromise, onDone] = waitUntilCalled();\n  await subscribe(ctx, {\n    ...args,\n    parsedFunctionName: args.functionName,\n    parsedFunctionArgs: args.args,\n    until: donePromise,\n    callbacks: {\n      onChange: (result) => {\n        onDone();\n        onResult(result);\n      },\n    },\n  });\n  return resultPromise;\n}\n\nexport function formatValue(value: Value) {\n  const json = convexToJson(value);\n  if (process.stdout.isTTY) {\n    // TODO (Tom) add JSON syntax highlighting like https://stackoverflow.com/a/51319962/398212\n    // until then, just spit out something that isn't quite JSON because it's easy\n    return util.inspect(value, { colors: true, depth: null });\n  } else {\n    return JSON.stringify(json, null, 2);\n  }\n}\n\nexport async function subscribeAndLog(\n  ctx: Context,\n  args: {\n    deploymentUrl: string;\n    adminKey: string;\n    functionName: string;\n    argsString: string;\n    identityString?: string | undefined;\n    componentPath: string | undefined;\n  },\n) {\n  const { projectConfig } = await readProjectConfig(ctx);\n\n  const parsedFunctionName = await parseFunctionName(\n    ctx,\n    args.functionName,\n    projectConfig.functions,\n  );\n  const identity = args.identityString\n    ? await getFakeIdentity(ctx, args.identityString)\n    : undefined;\n  const functionArgs = await parseArgs(ctx, args.argsString);\n  return subscribe(ctx, {\n    deploymentUrl: args.deploymentUrl,\n    adminKey: args.adminKey,\n    identity,\n    parsedFunctionName,\n    parsedFunctionArgs: functionArgs,\n    componentPath: args.componentPath,\n    until: waitForever(),\n    callbacks: {\n      onStart() {\n        logFinishedStep(\n          `Watching query ${args.functionName} on ${args.deploymentUrl}...`,\n        );\n      },\n      onChange(result) {\n        logOutput(formatValue(result));\n      },\n      onStop() {\n        logMessage(`Closing connection to ${args.deploymentUrl}...`);\n      },\n    },\n  });\n}\n\nexport async function subscribe(\n  ctx: Context,\n  args: {\n    deploymentUrl: string;\n    adminKey: string;\n    identity?: UserIdentityAttributes | undefined;\n    parsedFunctionName: string;\n    parsedFunctionArgs: Record<string, Value>;\n    componentPath: string | undefined;\n    until: Promise<unknown>;\n    callbacks?:\n      | {\n          onStart?: () => void;\n          onChange?: (result: Value) => void;\n          onStop?: () => void;\n        }\n      | undefined;\n  },\n) {\n  const client = new BaseConvexClient(\n    args.deploymentUrl,\n    (updatedQueries) => {\n      for (const queryToken of updatedQueries) {\n        let result: Value;\n        try {\n          result = client.localQueryResultByToken(queryToken)!;\n        } catch (err) {\n          // A failed query (e.g. a permission error) throws here. Surface\n          // permission errors cleanly instead of an uncaught stack trace, and\n          // let any other error propagate as before.\n          const permissionError = permissionDeniedErrorMessage(\n            (err as Error).toString(),\n          );\n          if (permissionError !== null) {\n            void ctx.crash({\n              exitCode: 1,\n              errorType: \"fatal\",\n              printedMessage: chalkStderr.red(permissionError),\n            });\n            return;\n          }\n          // eslint-disable-next-line no-restricted-syntax\n          throw err;\n        }\n        args.callbacks?.onChange?.(result);\n      }\n    },\n    {\n      // pretend that a Node.js 'ws' library WebSocket is a browser WebSocket\n      webSocketConstructor: ws as unknown as typeof WebSocket,\n      unsavedChangesWarning: false,\n    },\n  );\n  client.setAdminAuth(args.adminKey, args.identity);\n  const { unsubscribe } = client.subscribe(\n    args.parsedFunctionName,\n    args.parsedFunctionArgs,\n    {\n      componentPath: args.componentPath,\n    },\n  );\n\n  args.callbacks?.onStart?.();\n\n  let done = false;\n  const [donePromise, onDone] = waitUntilCalled();\n  const stopWatching = () => {\n    if (done) {\n      return;\n    }\n    done = true;\n    unsubscribe();\n    void client.close();\n    process.off(\"SIGINT\", sigintListener);\n    onDone();\n    args.callbacks?.onStop?.();\n  };\n  function sigintListener() {\n    stopWatching();\n  }\n  process.on(\"SIGINT\", sigintListener);\n  void args.until.finally(stopWatching);\n  while (!done) {\n    // loops once per day (any large value < 2**31 would work)\n    const oneDay = 24 * 60 * 60 * 1000;\n    await Promise.race([\n      donePromise,\n      new Promise((resolve) => setTimeout(resolve, oneDay)),\n    ]);\n  }\n}\n\nexport async function runInDeployment(\n  ctx: OneoffCtx,\n  args: {\n    deploymentUrl: string;\n    adminKey: string;\n    deploymentName: string | null;\n    functionName: string;\n    argsString: string;\n    identityString?: string | undefined;\n    push: boolean;\n    watch: boolean;\n    typecheck: \"enable\" | \"try\" | \"disable\";\n    typecheckComponents: boolean;\n    codegen: boolean;\n    componentPath: string | undefined;\n    liveComponentSources: boolean;\n  },\n) {\n  if (args.push) await pushToDeployment(ctx, args);\n\n  if (args.watch) {\n    return await subscribeAndLog(ctx, args);\n  }\n  return await runFunctionAndLog(ctx, args);\n}\n\nexport async function pushToDeployment(\n  ctx: OneoffCtx,\n  args: {\n    deploymentUrl: string;\n    adminKey: string;\n    deploymentName: string | null;\n    typecheck: \"enable\" | \"try\" | \"disable\";\n    typecheckComponents: boolean;\n    codegen: boolean;\n    liveComponentSources: boolean;\n  },\n) {\n  await watchAndPush(\n    ctx,\n    {\n      url: args.deploymentUrl,\n      adminKey: args.adminKey,\n      deploymentName: args.deploymentName,\n      verbose: false,\n      dryRun: false,\n      typecheck: args.typecheck,\n      typecheckComponents: args.typecheckComponents,\n      debug: false,\n      debugNodeApis: false,\n      codegen: args.codegen,\n      liveComponentSources: args.liveComponentSources,\n      pushAllModules: false,\n      largeIndexDeletionCheck: \"no verification\", // `convex run` can\u2019t push to prod\n      largeIndexBackfillCheck: \"no verification\", // ditto\n      stagedValidatorDeletionCheck: \"no verification\", // ditto\n      warnOnSlowSchemaValidation: true,\n      message: null,\n    },\n    {\n      once: true,\n      traceEvents: false,\n      untilSuccess: true,\n    },\n  );\n}\n\nfunction instantiateStderrLogger(): Logger {\n  const logger = new DefaultLogger({ verbose: false });\n  logger.addLogLineListener((_level, ...args) => {\n    // eslint-disable-next-line no-console\n    console.error(...args);\n  });\n  return logger;\n}\n", "/**\n * A symbol for accessing the name of a {@link FunctionReference} at runtime.\n */\nexport const functionName = Symbol.for(\"functionName\");\n", "import { functionName } from \"../functionName.js\";\n\nexport const toReferencePath = Symbol.for(\"toReferencePath\");\n\n// Multiple instances of the same Symbol.for() are equal at runtime but not\n// at type-time, so `[toReferencePath]` properties aren't used in types.\n// Use this function to set the property invisibly.\nexport function setReferencePath<T>(obj: T, value: string) {\n  (obj as any)[toReferencePath] = value;\n}\n\nexport function extractReferencePath(reference: any): string | null {\n  return reference[toReferencePath] ?? null;\n}\n\nexport function isFunctionHandle(s: string): boolean {\n  return s.startsWith(\"function://\");\n}\n\nexport function getFunctionAddress(functionReference: any) {\n  // The `run*` syscalls expect either a UDF path at \"name\" or a serialized\n  // reference at \"reference\". Dispatch on `functionReference` to coerce\n  // it to one or the other.\n  let functionAddress;\n\n  // Legacy path for passing in UDF paths directly as function references.\n  if (typeof functionReference === \"string\") {\n    if (isFunctionHandle(functionReference)) {\n      functionAddress = { functionHandle: functionReference };\n    } else {\n      functionAddress = { name: functionReference };\n    }\n  }\n  // Path for passing in a `FunctionReference`, either from `api` or directly\n  // created from a UDF path with `makeFunctionReference`.\n  else if (functionReference[functionName]) {\n    functionAddress = { name: functionReference[functionName] };\n  }\n  // Reference to a component's function derived from `app` or `component`.\n  else {\n    const referencePath = extractReferencePath(functionReference);\n    if (!referencePath) {\n      throw new Error(`${functionReference} is not a functionReference`);\n    }\n    functionAddress = { reference: referencePath };\n  }\n  return functionAddress;\n}\n", "import {\n  EmptyObject,\n  DefaultFunctionArgs,\n  FunctionVisibility,\n  RegisteredAction,\n  RegisteredMutation,\n  RegisteredQuery,\n} from \"./registration.js\";\nimport { Expand, UnionToIntersection } from \"../type_utils.js\";\nimport { PaginationOptions, PaginationResult } from \"./pagination.js\";\nimport { functionName } from \"./functionName.js\";\nimport { getFunctionAddress } from \"./components/paths.js\";\n\n/**\n * The type of a Convex function.\n *\n * @public\n */\nexport type FunctionType = \"query\" | \"mutation\" | \"action\";\n\n/**\n * A reference to a registered Convex function.\n *\n * You can create a {@link FunctionReference} using the generated `api` utility:\n * ```js\n * import { api } from \"../convex/_generated/api\";\n *\n * const reference = api.myModule.myFunction;\n * ```\n *\n * If you aren't using code generation, you can create references using\n * {@link anyApi}:\n * ```js\n * import { anyApi } from \"convex/server\";\n *\n * const reference = anyApi.myModule.myFunction;\n * ```\n *\n * Function references can be used to invoke functions from the client. For\n * example, in React you can pass references to the {@link react.useQuery} hook:\n * ```js\n * const result = useQuery(api.myModule.myFunction);\n * ```\n *\n * If you want to accept a `FunctionReference` as a callback argument, prefer\n * typing the callback parameter as {@link FunctionReference_future}.\n *\n * @typeParam Type - The type of the function (\"query\", \"mutation\", or \"action\").\n * @typeParam Visibility - The visibility of the function (\"public\" or \"internal\").\n * @typeParam Args - The arguments to this function. This is an object mapping\n * argument names to their types.\n * @typeParam ReturnType - The return type of this function.\n * @public\n */\nexport type FunctionReference<\n  Type extends FunctionType,\n  Visibility extends FunctionVisibility = \"public\",\n  Args extends DefaultFunctionArgs = any,\n  ReturnType = any,\n  ComponentPath = string | undefined,\n> = {\n  _type: Type;\n  _visibility: Visibility;\n  /**\n   * To read the arguments for a `FunctionReference`, prefer\n   * {@link FunctionArgs}.\n   *\n   * This slot will be removed in a future version.\n   *\n   * @deprecated\n   */\n  _args: Args;\n  /**\n   * To read the return type of a `FunctionReference`, prefer\n   * {@link FunctionReturnType}.\n   *\n   * This slot will be removed in a future version.\n   *\n   * @deprecated\n   */\n  _returnType: ReturnType;\n  _componentPath: ComponentPath;\n  /**\n   * To read the arguments or return type of a `FunctionReference`, prefer\n   * {@link FunctionArgs} and {@link FunctionReturnType}.\n   */\n  // This phantom slot exists so that a `FunctionReference` can be checked\n  // against a `FunctionReference_future`. It changes nothing about how two\n  // `FunctionReference`s compare with each other.\n  //\n  // The slot models the function itself: it puts `Args` in a contravariant\n  // position and `ReturnType` in a covariant one, so the slot alone is enough\n  // to compare a reference the way TypeScript compares two functions.\n  //\n  // In that comparison the `keys` parameter has an important role. It carries\n  // the keys of `Args`, so that checking a `FunctionReference` against a\n  // `FunctionReference_future` also checks that every key the consumer passes\n  // is a key the function declares. TypeScript treats a surplus property as\n  // harmless, but a Convex argument validator rejects it, so this is what\n  // makes the comparison match the runtime. See `FunctionReferenceArgKeys`.\n  _fn?(args: Args, keys: FunctionReferenceArgKeys<Args>): ReturnType;\n};\n\n/**\n * The keys of a reference's arguments.\n *\n * `0 extends 1 & Args` holds only when `Args` is `any`. That maps to `any`\n * rather than `keyof any` so that an untyped reference neither imposes nor\n * fails the key check in either direction. Arguments with an index signature,\n * such as `EmptyObject` and `DefaultFunctionArgs`, map to `string`, which\n * accepts every key and leaves the decision to the first parameter.\n */\ntype ArgKeys<Args> = 0 extends 1 & Args ? any : keyof Args;\n\n/**\n * The second parameter of `FunctionReference._fn`.\n *\n * Wrapping the keys in a function of a function puts them two parameters deep,\n * so comparing this parameter contravariantly checks that every key the\n * consumer passes is one the function declares. That is the check a Convex\n * argument validator performs and an ordinary function-type comparison skips.\n *\n * The union with {@link UncheckedArgKeys} is what keeps two\n * `FunctionReference`s comparing as they did before this slot existed. Every\n * `FunctionReferenceArgKeys` is assignable to `UncheckedArgKeys`, so between\n * two `FunctionReference`s the keys always relate and only `_args` decides.\n * {@link FunctionReference_futureArgKeys} is not assignable to it, so a\n * `FunctionReference` compared against a `FunctionReference_future` has to\n * satisfy the real check.\n */\ntype FunctionReferenceArgKeys<Args> = 0 extends 1 & Args\n  ? any\n  : ((keys: (key: ArgKeys<Args>) => void) => void) | UncheckedArgKeys;\n\n/**\n * A keys parameter that every {@link FunctionReferenceArgKeys} is assignable\n * to, and that no {@link FunctionReference_futureArgKeys} is: `unknown` for\n * the second parameter accepts the former's missing parameter and rejects the\n * latter's `never`.\n */\ntype UncheckedArgKeys = (keys: never, unchecked?: unknown) => void;\n\n/**\n * The second parameter of `FunctionReference_future._fn`. The same shape as\n * {@link FunctionReferenceArgKeys} plus a `guard` parameter that keeps it out\n * of {@link UncheckedArgKeys}.\n */\ntype FunctionReference_futureArgKeys<Args> = 0 extends 1 & Args\n  ? any\n  : (keys: (key: ArgKeys<Args>) => void, guard?: never) => void;\n\n/**\n * A reference to a Convex function whose arguments are checked closer to the\n * way Convex checks them at runtime.\n *\n * Use this instead of {@link FunctionReference} when you accept someone else's\n * Convex function as a callback and know which arguments you will pass it.\n *\n * A plain `FunctionReference` gets a couple things backwards: it accepts a\n * function requiring arguments you never pass, and rejects a function\n * accepting broader values than you pass. An ordinary TypeScript function type\n * doesn't map perfectly either: it treats a surplus argument as harmless,\n * where a Convex validator rejects it.\n *\n * This type melds regular TypeScript function reference behavior with top\n * level checking of arguments to prevent surplus arguments from hitting\n * runtime validation errors. The caveat: a surplus key inside a nested object,\n * an array element, or one arm of a union passes the type check and fails the\n * validator at runtime.\n *\n * ```ts\n * import { FunctionReference_future } from \"convex/server\";\n *\n * declare function onComplete(\n *   fn: FunctionReference_future<\n *     \"mutation\",\n *     \"internal\",\n *     { taskId: string; force: boolean },\n *     null\n *   >,\n * ): void;\n *\n * // Takes exactly `{ taskId: string; force: boolean }`.\n * onComplete(internal.tasks.finish);\n * // Takes `{ taskId: string | number; force?: boolean }`: calling it is safe.\n * onComplete(internal.tasks.finishLoosely);\n * // Requires a `reason` argument that `onComplete` never passes.\n * onComplete(internal.tasks.finishWithReason);\n * //          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rejected\n * // Takes only `{ taskId: string }`: its validator would reject `force`.\n * onComplete(internal.tasks.finishById);\n * //          ~~~~~~~~~~~~~~~~~~~~~~~~ rejected\n * ```\n *\n * A value of this type is usable with `ctx.runMutation`,\n * `ctx.scheduler.runAfter`, `createFunctionHandle`, and everything else in\n * this package that takes a reference, all of which accept either kind.\n *\n * It is *not* assignable to a plain `FunctionReference`. Code that wants to\n * accept both kinds should take\n * `FunctionReference<...> | FunctionReference_future<...>` and read arguments\n * and return types through {@link FunctionArgs} and {@link FunctionReturnType}.\n *\n * Argument checking here relies on `strictFunctionTypes` (implied by `strict`)\n * and is skipped for projects that disable it. Everything else about the\n * reference is compared exactly as `FunctionReference` compares it.\n *\n * @typeParam Type - The type of the function (\"query\", \"mutation\", or \"action\").\n * @typeParam Visibility - The visibility of the function (\"public\" or \"internal\").\n * @typeParam Args - The arguments the consumer of the reference will pass.\n * @typeParam ReturnType - The return type of this function.\n * @public\n */\nexport type FunctionReference_future<\n  Type extends FunctionType,\n  Visibility extends FunctionVisibility = \"public\",\n  Args extends DefaultFunctionArgs = any,\n  ReturnType = any,\n  ComponentPath = string | undefined,\n> = {\n  _type: Type;\n  _visibility: Visibility;\n  _componentPath: ComponentPath;\n  // Declared as a *property* rather than a method: TypeScript compares method\n  // parameters bivariantly and would not check anything. The explicit\n  // `| undefined` is needed because an optional method on the source side\n  // (`FunctionReference._fn`) carries a real `undefined` in its type, which\n  // `exactOptionalPropertyTypes` would otherwise reject.\n  //\n  // Both parameters are compared contravariantly: the first checks that the\n  // consumer's arguments satisfy the function's, the second that the consumer\n  // passes no key the function does not declare. See\n  // `FunctionReference_futureArgKeys`.\n  _fn?:\n    | ((args: Args, keys: FunctionReference_futureArgKeys<Args>) => ReturnType)\n    | undefined;\n};\n\n/**\n * Get the name of a function from a {@link FunctionReference}.\n *\n * The name is a string like \"myDir/myModule:myFunction\". If the exported name\n * of the function is `\"default\"`, the function name is omitted\n * (e.g. \"myDir/myModule\").\n *\n * @param functionReference - A {@link FunctionReference} to get the name of.\n * @returns A string of the function's name.\n *\n * @public\n */\nexport function getFunctionName(\n  functionReference:\n    | FunctionReference<any, any>\n    | FunctionReference_future<any, any>,\n): string {\n  const address = getFunctionAddress(functionReference);\n\n  if (address.name === undefined) {\n    if (address.functionHandle !== undefined) {\n      throw new Error(\n        `Expected function reference like \"api.file.func\" or \"internal.file.func\", but received function handle ${address.functionHandle}`,\n      );\n    } else if (address.reference !== undefined) {\n      throw new Error(\n        `Expected function reference in the current component like \"api.file.func\" or \"internal.file.func\", but received reference ${address.reference}`,\n      );\n    }\n    throw new Error(\n      `Expected function reference like \"api.file.func\" or \"internal.file.func\", but received ${JSON.stringify(address)}`,\n    );\n  }\n  // Both a legacy thing and also a convenience for interactive use:\n  // the types won't check but a string is always allowed at runtime.\n  if (typeof functionReference === \"string\") return functionReference;\n\n  // Two different runtime values for FunctionReference implement this\n  // interface: api objects returned from `createApi()` and standalone\n  // function reference objects returned from makeFunctionReference.\n  const name = (functionReference as any)[functionName];\n  if (!name) {\n    throw new Error(`${functionReference as any} is not a functionReference`);\n  }\n  return name;\n}\n\n/**\n * FunctionReferences generally come from generated code, but in custom clients\n * it may be useful to be able to build one manually.\n *\n * Real function references are empty objects at runtime, but the same interface\n * can be implemented with an object for tests and clients which don't use\n * code generation.\n *\n * @param name - The identifier of the function. E.g. `path/to/file:functionName`\n * @public\n */\nexport function makeFunctionReference<\n  type extends FunctionType,\n  args extends DefaultFunctionArgs = any,\n  ret = any,\n>(name: string): FunctionReference<type, \"public\", args, ret> {\n  return { [functionName]: name } as unknown as FunctionReference<\n    type,\n    \"public\",\n    args,\n    ret\n  >;\n}\n\n/**\n * Create a runtime API object that implements {@link AnyApi}.\n *\n * This allows accessing any path regardless of what directories, modules,\n * or functions are defined.\n *\n * @param pathParts - The path to the current node in the API.\n * @returns An {@link AnyApi}\n * @public\n */\nfunction createApi(pathParts: string[] = []): AnyApi {\n  const handler: ProxyHandler<object> = {\n    get(_, prop: string | symbol) {\n      if (typeof prop === \"string\") {\n        const newParts = [...pathParts, prop];\n        return createApi(newParts);\n      } else if (prop === functionName) {\n        if (pathParts.length < 2) {\n          const found = [\"api\", ...pathParts].join(\".\");\n          throw new Error(\n            `API path is expected to be of the form \\`api.moduleName.functionName\\`. Found: \\`${found}\\``,\n          );\n        }\n        const path = pathParts.slice(0, -1).join(\"/\");\n        const exportName = pathParts[pathParts.length - 1];\n        if (exportName === \"default\") {\n          return path;\n        } else {\n          return path + \":\" + exportName;\n        }\n      } else if (prop === Symbol.toStringTag) {\n        return \"FunctionReference\";\n      } else {\n        return undefined;\n      }\n    },\n  };\n\n  return new Proxy({}, handler);\n}\n\n/**\n * Given an export from a module, convert it to a {@link FunctionReference}\n * if it is a Convex function.\n */\nexport type FunctionReferenceFromExport<Export> =\n  Export extends RegisteredQuery<\n    infer Visibility,\n    infer Args,\n    infer ReturnValue\n  >\n    ? FunctionReference<\n        \"query\",\n        Visibility,\n        Args,\n        ConvertReturnType<ReturnValue>\n      >\n    : Export extends RegisteredMutation<\n          infer Visibility,\n          infer Args,\n          infer ReturnValue\n        >\n      ? FunctionReference<\n          \"mutation\",\n          Visibility,\n          Args,\n          ConvertReturnType<ReturnValue>\n        >\n      : Export extends RegisteredAction<\n            infer Visibility,\n            infer Args,\n            infer ReturnValue\n          >\n        ? FunctionReference<\n            \"action\",\n            Visibility,\n            Args,\n            ConvertReturnType<ReturnValue>\n          >\n        : never;\n\n/**\n * Given a module, convert all the Convex functions into\n * {@link FunctionReference}s and remove the other exports.\n *\n * BE CAREFUL WHEN EDITING THIS!\n *\n * This is written carefully to preserve jumping to function definitions using\n * cmd+click. If you edit it, please test that cmd+click still works.\n */\ntype FunctionReferencesInModule<Module extends Record<string, any>> = {\n  -readonly [ExportName in keyof Module as Module[ExportName][\"isConvexFunction\"] extends true\n    ? ExportName\n    : never]: FunctionReferenceFromExport<Module[ExportName]>;\n};\n\n/**\n * Given a path to a module and it's type, generate an API type for this module.\n *\n * This is a nested object according to the module's path.\n */\ntype ApiForModule<\n  ModulePath extends string,\n  Module extends object,\n> = ModulePath extends `${infer First}/${infer Second}`\n  ? {\n      [_ in First]: ApiForModule<Second, Module>;\n    }\n  : { [_ in ModulePath]: FunctionReferencesInModule<Module> };\n\n/**\n * Given the types of all modules in the `convex/` directory, construct the type\n * of `api`.\n *\n * `api` is a utility for constructing {@link FunctionReference}s.\n *\n * @typeParam AllModules - A type mapping module paths (like `\"dir/myModule\"`) to\n * the types of the modules.\n * @public\n */\nexport type ApiFromModules<AllModules extends Record<string, object>> =\n  FilterApi<\n    ApiFromModulesAllowEmptyNodes<AllModules>,\n    FunctionReference<any, any, any, any>\n  >;\n\ntype ApiFromModulesAllowEmptyNodes<AllModules extends Record<string, object>> =\n  ExpandModulesAndDirs<\n    UnionToIntersection<\n      {\n        [ModulePath in keyof AllModules]: ApiForModule<\n          ModulePath & string,\n          AllModules[ModulePath]\n        >;\n      }[keyof AllModules]\n    >\n  >;\n\ntype FilterKeysInApi<key, API, Predicate> = API extends Predicate\n  ? key\n  : API extends FunctionReference<any, any, any, any>\n    ? never\n    : FilterApi<API, Predicate> extends Record<string, never>\n      ? never\n      : key;\n\n/**\n * @public\n *\n * Filter a Convex deployment api object for functions which meet criteria,\n * for example all public queries.\n */\nexport type FilterApi<API, Predicate> = Expand<{\n  [mod in keyof API as FilterKeysInApi<\n    mod,\n    API[mod],\n    Predicate\n  >]: API[mod] extends Predicate ? API[mod] : FilterApi<API[mod], Predicate>;\n}>;\n\n/**\n * Given an api of type API and a FunctionReference subtype, return an api object\n * containing only the function references that match.\n *\n * ```ts\n * const q = filterApi<typeof api, FunctionReference<\"query\">>(api)\n * ```\n *\n * @public\n */\nexport function filterApi<API, Predicate>(api: API): FilterApi<API, Predicate> {\n  return api as any;\n}\n\n// These just* API filter helpers require no type parameters so are useable from JavaScript.\n/** @public */\nexport function justInternal<API>(\n  api: API,\n): FilterApi<API, FunctionReference<any, \"internal\", any, any>> {\n  return api as any;\n}\n\n/** @public */\nexport function justPublic<API>(\n  api: API,\n): FilterApi<API, FunctionReference<any, \"public\", any, any>> {\n  return api as any;\n}\n\n/** @public */\nexport function justQueries<API>(\n  api: API,\n): FilterApi<API, FunctionReference<\"query\", any, any, any>> {\n  return api as any;\n}\n\n/** @public */\nexport function justMutations<API>(\n  api: API,\n): FilterApi<API, FunctionReference<\"mutation\", any, any, any>> {\n  return api as any;\n}\n\n/** @public */\nexport function justActions<API>(\n  api: API,\n): FilterApi<API, FunctionReference<\"action\", any, any, any>> {\n  return api as any;\n}\n\n/** @public */\nexport function justPaginatedQueries<API>(\n  api: API,\n): FilterApi<\n  API,\n  FunctionReference<\n    \"query\",\n    any,\n    { paginationOpts: PaginationOptions },\n    PaginationResult<any>\n  >\n> {\n  return api as any;\n}\n\n/** @public */\nexport function justSchedulable<API>(\n  api: API,\n): FilterApi<API, FunctionReference<\"mutation\" | \"action\", any, any, any>> {\n  return api as any;\n}\n\n/**\n * Like {@link Expand}, this simplifies how TypeScript displays object types.\n * The differences are:\n * 1. This version is recursive.\n * 2. This stops recursing when it hits a {@link FunctionReference}.\n */\ntype ExpandModulesAndDirs<ObjectType> = ObjectType extends AnyFunctionReference\n  ? ObjectType\n  : {\n      [Key in keyof ObjectType]: ExpandModulesAndDirs<ObjectType[Key]>;\n    };\n\n/**\n * A {@link FunctionReference} of any type and any visibility with any\n * arguments and any return type.\n *\n * @public\n */\nexport type AnyFunctionReference = FunctionReference<any, any>;\n\ntype AnyModuleDirOrFunc = {\n  [key: string]: AnyModuleDirOrFunc;\n} & AnyFunctionReference;\n\n/**\n * The type that Convex api objects extend. If you were writing an api from\n * scratch it should extend this type.\n *\n * @public\n */\nexport type AnyApi = Record<string, Record<string, AnyModuleDirOrFunc>>;\n\n/**\n * Recursive partial API, useful for defining a subset of an API when mocking\n * or building custom api objects.\n *\n * @public\n */\nexport type PartialApi<API> = {\n  [mod in keyof API]?: API[mod] extends FunctionReference<any, any, any, any>\n    ? API[mod]\n    : PartialApi<API[mod]>;\n};\n\n/**\n * A utility for constructing {@link FunctionReference}s in projects that\n * are not using code generation.\n *\n * You can create a reference to a function like:\n * ```js\n * const reference = anyApi.myModule.myFunction;\n * ```\n *\n * This supports accessing any path regardless of what directories and modules\n * are in your project. All function references are typed as\n * {@link AnyFunctionReference}.\n *\n *\n * If you're using code generation, use `api` from `convex/_generated/api`\n * instead. It will be more type-safe and produce better auto-complete\n * in your editor.\n *\n * @public\n */\nexport const anyApi: AnyApi = createApi() as any;\n\n/**\n * Given a {@link FunctionReference} or {@link FunctionReference_future}, get\n * the arguments of the function.\n *\n * This is represented as an object mapping argument names to values.\n *\n * @public\n */\nexport type FunctionArgs<\n  FuncRef extends\n    | FunctionReference<any, any>\n    | FunctionReference_future<any, any>,\n> = ExtractSignature<FuncRef>[\"args\"];\n\n// The arguments and return type a reference declares. A `FunctionReference`\n// declares them in `_args` and `_returnType`, a `FunctionReference_future`\n// only in its `_fn` slot. Reading the named slots first also covers a\n// reference typed by an older copy of this package, which has no `_fn`.\ntype ExtractSignature<FuncRef> = FuncRef extends {\n  _args: infer Args;\n  _returnType: infer R;\n}\n  ? { args: Args; returnType: R }\n  : FuncRef extends {\n        _fn?: ((args: infer Args, keys: never) => infer R) | undefined;\n      }\n    ? { args: Args; returnType: R }\n    : { args: any; returnType: any };\n\n/**\n * A tuple type of the (maybe optional) arguments to `FuncRef`.\n *\n * This type is used to make methods involving arguments type safe while allowing\n * skipping the arguments for functions that don't require arguments.\n *\n * @public\n */\nexport type OptionalRestArgs<\n  FuncRef extends\n    | FunctionReference<any, any>\n    | FunctionReference_future<any, any>,\n> =\n  FunctionArgs<FuncRef> extends EmptyObject\n    ? [args?: EmptyObject]\n    : [args: FunctionArgs<FuncRef>];\n\n/**\n * A tuple type of the (maybe optional) arguments to `FuncRef`, followed by an options\n * object of type `Options`.\n *\n * This type is used to make methods like `useQuery` type-safe while allowing\n * 1. Skipping arguments for functions that don't require arguments.\n * 2. Skipping the options object.\n * @public\n */\nexport type ArgsAndOptions<\n  FuncRef extends\n    | FunctionReference<any, any>\n    | FunctionReference_future<any, any>,\n  Options,\n> =\n  FunctionArgs<FuncRef> extends EmptyObject\n    ? [args?: EmptyObject, options?: Options]\n    : [args: FunctionArgs<FuncRef>, options?: Options];\n\n/**\n * Given a {@link FunctionReference} or {@link FunctionReference_future}, get\n * the return type of the function.\n *\n * @public\n */\nexport type FunctionReturnType<\n  FuncRef extends\n    | FunctionReference<any, any>\n    | FunctionReference_future<any, any>,\n> = ExtractSignature<FuncRef>[\"returnType\"];\n\ntype UndefinedToNull<T> = T extends void ? null : T;\n\ntype NullToUndefinedOrNull<T> = T extends null ? T | undefined | void : T;\n\n/**\n * Convert the return type of a function to it's client-facing format.\n *\n * This means:\n * - Converting `undefined` and `void` to `null`\n * - Removing all `Promise` wrappers\n */\nexport type ConvertReturnType<T> = UndefinedToNull<Awaited<T>>;\n\nexport type ValidatorTypeToReturnType<T> =\n  | Promise<NullToUndefinedOrNull<T>>\n  | NullToUndefinedOrNull<T>;\n", "import type { Value } from \"../values/value.js\";\n\n/**\n * Validate that the arguments to a Convex function are an object, defaulting\n * `undefined` to `{}`.\n */\nexport function parseArgs(\n  args: Record<string, Value> | undefined,\n): Record<string, Value> {\n  if (args === undefined) {\n    return {};\n  }\n  if (!isSimpleObject(args)) {\n    throw new Error(\n      `The arguments to a Convex function must be an object. Received: ${\n        args as any\n      }`,\n    );\n  }\n  return args;\n}\n\nexport function validateDeploymentUrl(deploymentUrl: string) {\n  // Don't use things like `new URL(deploymentUrl).hostname` since these aren't\n  // supported by React Native's JS environment\n  if (typeof deploymentUrl === \"undefined\") {\n    throw new Error(\n      `Client created with undefined deployment address. If you used an environment variable, check that it's set.`,\n    );\n  }\n  if (typeof deploymentUrl !== \"string\") {\n    throw new Error(\n      `Invalid deployment address: found ${deploymentUrl as any}\".`,\n    );\n  }\n  if (\n    !(deploymentUrl.startsWith(\"http:\") || deploymentUrl.startsWith(\"https:\"))\n  ) {\n    throw new Error(\n      `Invalid deployment address: Must start with \"https://\" or \"http://\". Found \"${deploymentUrl}\".`,\n    );\n  }\n\n  // Most clients should connect to \".convex.cloud\". But we also support localhost and\n  // custom custom. We validate the deployment url is a valid url, which is the most\n  // common failure pattern.\n  try {\n    new URL(deploymentUrl);\n  } catch {\n    throw new Error(\n      `Invalid deployment address: \"${deploymentUrl}\" is not a valid URL. If you believe this URL is correct, use the \\`skipConvexDeploymentUrlCheck\\` option to bypass this.`,\n    );\n  }\n\n  // If a user uses .convex.site, this is very likely incorrect.\n  if (deploymentUrl.endsWith(\".convex.site\")) {\n    throw new Error(\n      `Invalid deployment address: \"${deploymentUrl}\" ends with .convex.site, which is used for HTTP Actions. Convex deployment URLs typically end with .convex.cloud? If you believe this URL is correct, use the \\`skipConvexDeploymentUrlCheck\\` option to bypass this.`,\n    );\n  }\n}\n\n/**\n * Check whether a value is a plain old JavaScript object.\n */\nexport function isSimpleObject(value: unknown) {\n  const isObject = typeof value === \"object\";\n  const prototype = Object.getPrototypeOf(value);\n  const isSimple =\n    prototype === null ||\n    prototype === Object.prototype ||\n    // Objects generated from other contexts (e.g. across Node.js `vm` modules) will not satisfy the previous\n    // conditions but are still simple objects.\n    prototype?.constructor?.name === \"Object\";\n  return isObject && isSimple;\n}\n", "import {\n  FunctionReturnType,\n  OptionalRestArgs,\n  getFunctionName,\n  FunctionReference,\n  FunctionReference_future,\n} from \"../server/api.js\";\nimport { parseArgs, validateDeploymentUrl } from \"../common/index.js\";\nimport { version } from \"../index.js\";\nimport {\n  ConvexError,\n  JSONValue,\n  convexToJson,\n  jsonToConvex,\n} from \"../values/index.js\";\nimport {\n  instantiateDefaultLogger,\n  instantiateNoopLogger,\n  logForFunction,\n  Logger,\n} from \"./logging.js\";\nimport {\n  ArgsAndOptions,\n  FunctionArgs,\n  UserIdentityAttributes,\n} from \"../server/index.js\";\n\nexport const STATUS_CODE_OK = 200;\nexport const STATUS_CODE_BAD_REQUEST = 400;\n// Special custom 5xx HTTP status code to mean that the UDF returned an error.\n//\n// Must match the constant of the same name in the backend.\nexport const STATUS_CODE_UDF_FAILED = 560;\n\n// Allow fetch to be shimmed in for Node.js < 18\nlet specifiedFetch: typeof globalThis.fetch | undefined = undefined;\nexport function setFetch(f: typeof globalThis.fetch) {\n  specifiedFetch = f;\n}\n\nexport type HttpMutationOptions = {\n  /**\n   * Skip the default queue of mutations and run this immediately.\n   *\n   * This allows the same HttpConvexClient to be used to request multiple\n   * mutations in parallel, something not possible with WebSocket-based clients.\n   */\n  skipQueue: boolean;\n};\n\n/**\n * A Convex client that runs queries and mutations over HTTP.\n *\n * This client is stateful (it has user credentials and queues mutations)\n * so take care to avoid sharing it between requests in a server.\n *\n * This is appropriate for server-side code (like Netlify Lambdas) or non-reactive\n * webapps.\n *\n * @public\n */\nexport class ConvexHttpClient {\n  private readonly address: string;\n  private auth: string | undefined;\n  private adminAuth: string | undefined;\n  private encodedTsPromise?: Promise<string>;\n  private debug: boolean;\n  private fetchOptions?: FetchOptions;\n  private fetch?: typeof globalThis.fetch | undefined;\n  private logger: Logger;\n  private mutationQueue: Array<{\n    mutation:\n      | FunctionReference<\"mutation\">\n      | FunctionReference_future<\"mutation\">;\n    args: FunctionArgs<any>;\n    resolve: (value: any) => void;\n    reject: (error: any) => void;\n  }> = [];\n  private isProcessingQueue: boolean = false;\n\n  /**\n   * Create a new {@link ConvexHttpClient}.\n   *\n   * @param address - The url of your Convex deployment, often provided\n   * by an environment variable. E.g. `https://small-mouse-123.convex.cloud`.\n   * @param options - An object of options.\n   * - `skipConvexDeploymentUrlCheck` - Skip validating that the Convex deployment URL looks like\n   * `https://happy-animal-123.convex.cloud` or localhost. This can be useful if running a self-hosted\n   * Convex backend that uses a different URL.\n   * - `logger` - A logger or a boolean. If not provided, logs to the console.\n   * You can construct your own logger to customize logging to log elsewhere\n   * or not log at all, or use `false` as a shorthand for a no-op logger.\n   * A logger is an object with 4 methods: log(), warn(), error(), and logVerbose().\n   * These methods can receive multiple arguments of any types, like console.log().\n   * - `auth` - A JWT containing identity claims accessible in Convex functions.\n   * This identity may expire so it may be necessary to call `setAuth()` later,\n   * but for short-lived clients it's convenient to specify this value here.\n   * - `fetch` - A custom fetch implementation to use for all HTTP requests made by this client.\n   */\n  constructor(\n    address: string,\n    options?: {\n      skipConvexDeploymentUrlCheck?: boolean;\n      logger?: Logger | boolean;\n      auth?: string;\n      fetch?: typeof globalThis.fetch;\n    },\n  ) {\n    if (typeof options === \"boolean\") {\n      throw new Error(\n        \"skipConvexDeploymentUrlCheck as the second argument is no longer supported. Please pass an options object, `{ skipConvexDeploymentUrlCheck: true }`.\",\n      );\n    }\n    const opts = options ?? {};\n    if (opts.skipConvexDeploymentUrlCheck !== true) {\n      validateDeploymentUrl(address);\n    }\n    this.logger =\n      options?.logger === false\n        ? instantiateNoopLogger({ verbose: false })\n        : options?.logger !== true && options?.logger\n          ? options.logger\n          : instantiateDefaultLogger({ verbose: false });\n    this.address = address;\n    this.debug = true;\n    this.auth = undefined;\n    this.adminAuth = undefined;\n    this.fetch = options?.fetch;\n    if (options?.auth) {\n      this.setAuth(options.auth);\n    }\n  }\n\n  /**\n   * Obtain the {@link ConvexHttpClient}'s URL to its backend.\n   * @deprecated Use url, which returns the url without /api at the end.\n   *\n   * @returns The URL to the Convex backend, including the client's API version.\n   */\n  backendUrl(): string {\n    return `${this.address}/api`;\n  }\n\n  /**\n   * Return the address for this client, useful for creating a new client.\n   *\n   * Not guaranteed to match the address with which this client was constructed:\n   * it may be canonicalized.\n   */\n  get url() {\n    return this.address;\n  }\n\n  /**\n   * Set the authentication token to be used for subsequent queries and mutations.\n   *\n   * Should be called whenever the token changes (i.e. due to expiration and refresh).\n   *\n   * @param value - JWT-encoded OpenID Connect identity token.\n   */\n  setAuth(value: string) {\n    this.clearAuth();\n    this.auth = value;\n  }\n\n  /**\n   * Set admin auth token to allow calling internal queries, mutations, and actions\n   * and acting as an identity.\n   *\n   * @internal\n   */\n  setAdminAuth(token: string, actingAsIdentity?: UserIdentityAttributes) {\n    this.clearAuth();\n    if (actingAsIdentity !== undefined) {\n      // Encode the identity to a base64 string\n      const bytes = new TextEncoder().encode(JSON.stringify(actingAsIdentity));\n      const actingAsIdentityEncoded = btoa(String.fromCodePoint(...bytes));\n      this.adminAuth = `${token}:${actingAsIdentityEncoded}`;\n    } else {\n      this.adminAuth = token;\n    }\n  }\n\n  /**\n   * Clear the current authentication token if set.\n   */\n  clearAuth() {\n    this.auth = undefined;\n    this.adminAuth = undefined;\n  }\n\n  /**\n   * Sets whether the result log lines should be printed on the console or not.\n   *\n   * @internal\n   */\n  setDebug(debug: boolean) {\n    this.debug = debug;\n  }\n\n  /**\n   * Used to customize the fetch behavior in some runtimes.\n   *\n   * @internal\n   */\n  setFetchOptions(fetchOptions: FetchOptions) {\n    this.fetchOptions = fetchOptions;\n  }\n\n  /**\n   * This API is experimental: it may change or disappear.\n   *\n   * Execute a Convex query function at the same timestamp as every other\n   * consistent query execution run by this HTTP client.\n   *\n   * This doesn't make sense for long-lived ConvexHttpClients as Convex\n   * backends can read a limited amount into the past: beyond 30 seconds\n   * in the past may not be available.\n   *\n   * Create a new client to use a consistent time.\n   *\n   * @param name - The name of the query.\n   * @param args - The arguments object for the query. If this is omitted,\n   * the arguments will be `{}`.\n   * @returns A promise of the query's result.\n   *\n   * @deprecated This API is experimental: it may change or disappear.\n   */\n  async consistentQuery<\n    Query extends\n      | FunctionReference<\"query\">\n      | FunctionReference_future<\"query\">,\n  >(\n    query: Query,\n    ...args: OptionalRestArgs<Query>\n  ): Promise<FunctionReturnType<Query>> {\n    const queryArgs = parseArgs(args[0]);\n\n    const timestampPromise = this.getTimestamp();\n    return await this.queryInner(query, queryArgs, { timestampPromise });\n  }\n\n  private async getTimestamp() {\n    if (this.encodedTsPromise) {\n      return this.encodedTsPromise;\n    }\n    return (this.encodedTsPromise = this.getTimestampInner());\n  }\n\n  private async getTimestampInner() {\n    const localFetch = this.fetch || specifiedFetch || fetch;\n\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n      \"Convex-Client\": `npm-${version}`,\n    };\n    const response = await localFetch(`${this.address}/api/query_ts`, {\n      ...this.fetchOptions,\n      method: \"POST\",\n      headers: headers,\n    });\n    if (!response.ok) {\n      throw new Error(await response.text());\n    }\n    const { ts } = (await response.json()) as { ts: string };\n    return ts;\n  }\n\n  /**\n   * Execute a Convex query function.\n   *\n   * @param name - The name of the query.\n   * @param args - The arguments object for the query. If this is omitted,\n   * the arguments will be `{}`.\n   * @returns A promise of the query's result.\n   */\n  async query<\n    Query extends\n      | FunctionReference<\"query\">\n      | FunctionReference_future<\"query\">,\n  >(\n    query: Query,\n    ...args: OptionalRestArgs<Query>\n  ): Promise<FunctionReturnType<Query>> {\n    const queryArgs = parseArgs(args[0]);\n    return await this.queryInner(query, queryArgs, {});\n  }\n\n  private async queryInner<\n    Query extends\n      | FunctionReference<\"query\">\n      | FunctionReference_future<\"query\">,\n  >(\n    query: Query,\n    queryArgs: FunctionArgs<Query>,\n    options: { timestampPromise?: Promise<string> },\n  ): Promise<FunctionReturnType<Query>> {\n    const name = getFunctionName(query);\n    const args = [convexToJson(queryArgs)];\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n      \"Convex-Client\": `npm-${version}`,\n    };\n    if (this.adminAuth) {\n      headers[\"Authorization\"] = `Convex ${this.adminAuth}`;\n    } else if (this.auth) {\n      headers[\"Authorization\"] = `Bearer ${this.auth}`;\n    }\n    const localFetch = this.fetch || specifiedFetch || fetch;\n\n    const timestamp = options.timestampPromise\n      ? await options.timestampPromise\n      : undefined;\n\n    const body = JSON.stringify({\n      path: name,\n      format: \"convex_encoded_json\",\n      args,\n      ...(timestamp ? { ts: timestamp } : {}),\n    });\n    const endpoint = timestamp\n      ? `${this.address}/api/query_at_ts`\n      : `${this.address}/api/query`;\n\n    const response = await localFetch(endpoint, {\n      ...this.fetchOptions,\n      body,\n      method: \"POST\",\n      headers: headers,\n    });\n    if (!response.ok && response.status !== STATUS_CODE_UDF_FAILED) {\n      throw new Error(await response.text());\n    }\n    const respJSON = await response.json();\n\n    if (this.debug) {\n      for (const line of respJSON.logLines ?? []) {\n        logForFunction(this.logger, \"info\", \"query\", name, line);\n      }\n    }\n    switch (respJSON.status) {\n      case \"success\":\n        return jsonToConvex(respJSON.value);\n      case \"error\":\n        if (respJSON.errorData !== undefined) {\n          throw forwardErrorData(\n            respJSON.errorData,\n            new ConvexError(respJSON.errorMessage),\n          );\n        }\n        throw new Error(respJSON.errorMessage);\n      default:\n        throw new Error(`Invalid response: ${JSON.stringify(respJSON)}`);\n    }\n  }\n\n  private async mutationInner<\n    Mutation extends\n      | FunctionReference<\"mutation\">\n      | FunctionReference_future<\"mutation\">,\n  >(\n    mutation: Mutation,\n    mutationArgs: FunctionArgs<Mutation>,\n  ): Promise<FunctionReturnType<Mutation>> {\n    const name = getFunctionName(mutation);\n    const body = JSON.stringify({\n      path: name,\n      format: \"convex_encoded_json\",\n      args: [convexToJson(mutationArgs)],\n    });\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n      \"Convex-Client\": `npm-${version}`,\n    };\n    if (this.adminAuth) {\n      headers[\"Authorization\"] = `Convex ${this.adminAuth}`;\n    } else if (this.auth) {\n      headers[\"Authorization\"] = `Bearer ${this.auth}`;\n    }\n    const localFetch = this.fetch || specifiedFetch || fetch;\n    const response = await localFetch(`${this.address}/api/mutation`, {\n      ...this.fetchOptions,\n      body,\n      method: \"POST\",\n      headers: headers,\n    });\n    if (!response.ok && response.status !== STATUS_CODE_UDF_FAILED) {\n      throw new Error(await response.text());\n    }\n    const respJSON = await response.json();\n    if (this.debug) {\n      for (const line of respJSON.logLines ?? []) {\n        logForFunction(this.logger, \"info\", \"mutation\", name, line);\n      }\n    }\n    switch (respJSON.status) {\n      case \"success\":\n        return jsonToConvex(respJSON.value);\n      case \"error\":\n        if (respJSON.errorData !== undefined) {\n          throw forwardErrorData(\n            respJSON.errorData,\n            new ConvexError(respJSON.errorMessage),\n          );\n        }\n        throw new Error(respJSON.errorMessage);\n      default:\n        throw new Error(`Invalid response: ${JSON.stringify(respJSON)}`);\n    }\n  }\n\n  private async processMutationQueue() {\n    if (this.isProcessingQueue) {\n      return;\n    }\n\n    this.isProcessingQueue = true;\n    while (this.mutationQueue.length > 0) {\n      const { mutation, args, resolve, reject } = this.mutationQueue.shift()!;\n      try {\n        const result = await this.mutationInner(mutation, args);\n        resolve(result);\n      } catch (error) {\n        reject(error);\n      }\n    }\n    this.isProcessingQueue = false;\n  }\n\n  private enqueueMutation<\n    Mutation extends\n      | FunctionReference<\"mutation\">\n      | FunctionReference_future<\"mutation\">,\n  >(\n    mutation: Mutation,\n    args: FunctionArgs<Mutation>,\n  ): Promise<FunctionReturnType<Mutation>> {\n    return new Promise((resolve, reject) => {\n      this.mutationQueue.push({ mutation, args, resolve, reject });\n      void this.processMutationQueue();\n    });\n  }\n\n  /**\n   * Execute a Convex mutation function. Mutations are queued by default.\n   *\n   * @param name - The name of the mutation.\n   * @param args - The arguments object for the mutation. If this is omitted,\n   * the arguments will be `{}`.\n   * @param options - An optional object containing\n   * @returns A promise of the mutation's result.\n   */\n  async mutation<\n    Mutation extends\n      | FunctionReference<\"mutation\">\n      | FunctionReference_future<\"mutation\">,\n  >(\n    mutation: Mutation,\n    ...args: ArgsAndOptions<Mutation, HttpMutationOptions>\n  ): Promise<FunctionReturnType<Mutation>> {\n    const [fnArgs, options] = args;\n    const mutationArgs = parseArgs(fnArgs);\n    const queued = !options?.skipQueue;\n\n    if (queued) {\n      return await this.enqueueMutation(mutation, mutationArgs);\n    } else {\n      return await this.mutationInner(mutation, mutationArgs);\n    }\n  }\n\n  /**\n   * Execute a Convex action function. Actions are not queued.\n   *\n   * @param name - The name of the action.\n   * @param args - The arguments object for the action. If this is omitted,\n   * the arguments will be `{}`.\n   * @returns A promise of the action's result.\n   */\n  async action<\n    Action extends\n      | FunctionReference<\"action\">\n      | FunctionReference_future<\"action\">,\n  >(\n    action: Action,\n    ...args: OptionalRestArgs<Action>\n  ): Promise<FunctionReturnType<Action>> {\n    const actionArgs = parseArgs(args[0]);\n    const name = getFunctionName(action);\n    const body = JSON.stringify({\n      path: name,\n      format: \"convex_encoded_json\",\n      args: [convexToJson(actionArgs)],\n    });\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n      \"Convex-Client\": `npm-${version}`,\n    };\n    if (this.adminAuth) {\n      headers[\"Authorization\"] = `Convex ${this.adminAuth}`;\n    } else if (this.auth) {\n      headers[\"Authorization\"] = `Bearer ${this.auth}`;\n    }\n    const localFetch = this.fetch || specifiedFetch || fetch;\n    const response = await localFetch(`${this.address}/api/action`, {\n      ...this.fetchOptions,\n      body,\n      method: \"POST\",\n      headers: headers,\n    });\n    if (!response.ok && response.status !== STATUS_CODE_UDF_FAILED) {\n      throw new Error(await response.text());\n    }\n    const respJSON = await response.json();\n    if (this.debug) {\n      for (const line of respJSON.logLines ?? []) {\n        logForFunction(this.logger, \"info\", \"action\", name, line);\n      }\n    }\n    switch (respJSON.status) {\n      case \"success\":\n        return jsonToConvex(respJSON.value);\n      case \"error\":\n        if (respJSON.errorData !== undefined) {\n          throw forwardErrorData(\n            respJSON.errorData,\n            new ConvexError(respJSON.errorMessage),\n          );\n        }\n        throw new Error(respJSON.errorMessage);\n      default:\n        throw new Error(`Invalid response: ${JSON.stringify(respJSON)}`);\n    }\n  }\n\n  /**\n   * Execute a Convex function of an unknown type. These function calls are not queued.\n   *\n   * @param name - The name of the function.\n   * @param args - The arguments object for the function. If this is omitted,\n   * the arguments will be `{}`.\n   * @returns A promise of the function's result.\n   *\n   * @internal\n   */\n  async function<\n    AnyFunction extends\n      | FunctionReference<\"query\" | \"mutation\" | \"action\">\n      | FunctionReference_future<\"query\" | \"mutation\" | \"action\">,\n  >(\n    anyFunction: AnyFunction | string,\n    componentPath?: string,\n    ...args: OptionalRestArgs<AnyFunction>\n  ): Promise<FunctionReturnType<AnyFunction>> {\n    const functionArgs = parseArgs(args[0]);\n    const name =\n      typeof anyFunction === \"string\"\n        ? anyFunction\n        : getFunctionName(anyFunction);\n    const body = JSON.stringify({\n      componentPath: componentPath,\n      path: name,\n      format: \"convex_encoded_json\",\n      args: convexToJson(functionArgs),\n    });\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n      \"Convex-Client\": `npm-${version}`,\n    };\n    if (this.adminAuth) {\n      headers[\"Authorization\"] = `Convex ${this.adminAuth}`;\n    } else if (this.auth) {\n      headers[\"Authorization\"] = `Bearer ${this.auth}`;\n    }\n    const localFetch = this.fetch || specifiedFetch || fetch;\n    const response = await localFetch(`${this.address}/api/function`, {\n      ...this.fetchOptions,\n      body,\n      method: \"POST\",\n      headers: headers,\n    });\n    if (!response.ok && response.status !== STATUS_CODE_UDF_FAILED) {\n      throw new Error(await response.text());\n    }\n    const respJSON = await response.json();\n    if (this.debug) {\n      for (const line of respJSON.logLines ?? []) {\n        logForFunction(this.logger, \"info\", \"any\", name, line);\n      }\n    }\n    switch (respJSON.status) {\n      case \"success\":\n        return jsonToConvex(respJSON.value);\n      case \"error\":\n        if (respJSON.errorData !== undefined) {\n          throw forwardErrorData(\n            respJSON.errorData,\n            new ConvexError(respJSON.errorMessage),\n          );\n        }\n        throw new Error(respJSON.errorMessage);\n      default:\n        throw new Error(`Invalid response: ${JSON.stringify(respJSON)}`);\n    }\n  }\n}\n\nfunction forwardErrorData(errorData: JSONValue, error: ConvexError<string>) {\n  (error as ConvexError<any>).data = jsonToConvex(errorData);\n  return error;\n}\n\n/**\n * @internal\n */\ntype FetchOptions = { cache: \"force-cache\" | \"no-store\" };\n", "/*\nhttps://github.com/beatgammit/base64-js/blob/88957c9943c7e2a0f03cdf73e71d579e433627d3/index.js\nCopyright (c) 2014 Jameson Little\nThe MIT License (MIT)\n*/\n\n// Vendored because this library has no ESM build, and some environments\n// (SvelteKit) are happiest when all dependencies are ESM.\n\nvar lookup: string[] = [];\nvar revLookup: number[] = [];\nvar Arr = Uint8Array;\n\nvar code = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i];\n  revLookup[code.charCodeAt(i)] = i;\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup[\"-\".charCodeAt(0)] = 62;\nrevLookup[\"_\".charCodeAt(0)] = 63;\n\nfunction getLens(b64: string) {\n  var len = b64.length;\n\n  if (len % 4 > 0) {\n    throw new Error(\"Invalid string. Length must be a multiple of 4\");\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf(\"=\");\n  if (validLen === -1) validLen = len;\n\n  var placeHoldersLen = validLen === len ? 0 : 4 - (validLen % 4);\n\n  return [validLen, placeHoldersLen];\n}\n\n// base64 is 4/3 + up to two characters of the original data\n/** @public */\nexport function byteLength(b64: string): number {\n  var lens = getLens(b64);\n  var validLen = lens[0];\n  var placeHoldersLen = lens[1];\n  return ((validLen + placeHoldersLen) * 3) / 4 - placeHoldersLen;\n}\n\nfunction _byteLength(_b64: string, validLen: number, placeHoldersLen: number) {\n  return ((validLen + placeHoldersLen) * 3) / 4 - placeHoldersLen;\n}\n\n/** @public */\nexport function toByteArray(b64: string): Uint8Array {\n  var tmp;\n  var lens = getLens(b64);\n  var validLen = lens[0];\n  var placeHoldersLen = lens[1];\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));\n\n  var curByte = 0;\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0 ? validLen - 4 : validLen;\n\n  var i;\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)];\n    arr[curByte++] = (tmp >> 16) & 0xff;\n    arr[curByte++] = (tmp >> 8) & 0xff;\n    arr[curByte++] = tmp & 0xff;\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4);\n    arr[curByte++] = tmp & 0xff;\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2);\n    arr[curByte++] = (tmp >> 8) & 0xff;\n    arr[curByte++] = tmp & 0xff;\n  }\n\n  return arr;\n}\n\nfunction tripletToBase64(num: number) {\n  return (\n    lookup[(num >> 18) & 0x3f] +\n    lookup[(num >> 12) & 0x3f] +\n    lookup[(num >> 6) & 0x3f] +\n    lookup[num & 0x3f]\n  );\n}\n\nfunction encodeChunk(uint8: Uint8Array, start: number, end: number) {\n  var tmp;\n  var output = [];\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xff0000) +\n      ((uint8[i + 1] << 8) & 0xff00) +\n      (uint8[i + 2] & 0xff);\n    output.push(tripletToBase64(tmp));\n  }\n  return output.join(\"\");\n}\n\n/** @public */\nexport function fromByteArray(uint8: Uint8Array): string {\n  var tmp;\n  var len = uint8.length;\n  var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n  var parts = [];\n  var maxChunkLength = 16383; // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(\n      encodeChunk(\n        uint8,\n        i,\n        i + maxChunkLength > len2 ? len2 : i + maxChunkLength,\n      ),\n    );\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1];\n    parts.push(lookup[tmp >> 2] + lookup[(tmp << 4) & 0x3f] + \"==\");\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1];\n    parts.push(\n      lookup[tmp >> 10] +\n        lookup[(tmp >> 4) & 0x3f] +\n        lookup[(tmp << 2) & 0x3f] +\n        \"=\",\n    );\n  }\n\n  return parts.join(\"\");\n}\n\nexport function fromByteArrayUrlSafeNoPadding(uint8: Uint8Array): string {\n  return fromByteArray(uint8)\n    .replace(/\\+/g, \"-\")\n    .replace(/\\//g, \"_\")\n    .replace(/=/g, \"\");\n}\n", "/**\n * Utilities for working with values stored in Convex.\n *\n * You can see the full set of supported types at\n * [Types](https://docs.convex.dev/using/types).\n * @module\n */\nimport * as Base64 from \"./base64.js\";\nimport { isSimpleObject } from \"../common/index.js\";\n\nconst LITTLE_ENDIAN = true;\n// This code is used by code that may not have bigint literals.\nconst MIN_INT64 = BigInt(\"-9223372036854775808\");\nexport const MAX_INT64 = BigInt(\"9223372036854775807\");\nconst ZERO = BigInt(\"0\");\nconst EIGHT = BigInt(\"8\");\nconst TWOFIFTYSIX = BigInt(\"256\");\n\n/**\n * The type of JavaScript values serializable to JSON.\n *\n * @public\n */\nexport type JSONValue =\n  | null\n  | boolean\n  | number\n  | string\n  | JSONValue[]\n  | { [key: string]: JSONValue };\n\n/**\n * An identifier for a document in Convex.\n *\n * Convex documents are uniquely identified by their `Id`, which is accessible\n * on the `_id` field. To learn more, see [Document IDs](https://docs.convex.dev/database/document-ids).\n *\n * Documents can be loaded using `db.get(tableName, id)` in query and mutation functions.\n *\n * IDs are base 32 encoded strings which are URL safe.\n *\n * IDs are just strings at runtime, but this type can be used to distinguish them from other\n * strings at compile time.\n *\n * If you're using code generation, use the `Id` type generated for your data model in\n * `convex/_generated/dataModel.d.ts`.\n *\n * @typeParam TableName - A string literal type of the table name (like \"users\").\n *\n * @public\n */\nexport type Id<TableName extends string> = string & { __tableName: TableName };\n\n/**\n * A value supported by Convex.\n *\n * Values can be:\n * - stored inside of documents.\n * - used as arguments and return types to queries and mutation functions.\n *\n * You can see the full set of supported types at\n * [Types](https://docs.convex.dev/using/types).\n *\n * @public\n */\nexport type Value =\n  | null\n  | bigint\n  | number\n  | boolean\n  | string\n  | ArrayBuffer\n  | CommitTsPlaceholder\n  | Value[]\n  | { [key: string]: undefined | Value };\n\n/**\n * The types of {@link Value} that can be used to represent numbers.\n *\n * @public\n */\nexport type NumericValue = bigint | number;\n\nconst COMMIT_TS_UNRESOLVED =\n  \"This commit timestamp is unresolved: its value is assigned when the \" +\n  \"mutation commits. Read the document after the mutation completes to get \" +\n  \"its value.\";\n\n/**\n * The placeholder for a transaction's commit timestamp, which is not known\n * until the mutation commits. Write it into a document field via\n * `db.vars.commitTs` and it resolves to an int64 (`bigint`) at commit,\n * ordered by commit order. Reading the field back within the writing\n * mutation yields the placeholder, which cannot be used as a number.\n *\n * @public\n */\nexport class CommitTsPlaceholder {\n  // A private member makes the class nominal: no structurally-similar object\n  // type-checks as a placeholder.\n  declare private readonly __isCommitTsPlaceholder: undefined;\n  [Symbol.toPrimitive](hint: string): string {\n    // Allow string conversion so logging a read-back document doesn't throw.\n    if (hint === \"string\") {\n      return this.toString();\n    }\n    throw new Error(COMMIT_TS_UNRESOLVED);\n  }\n  valueOf(): never {\n    throw new Error(COMMIT_TS_UNRESOLVED);\n  }\n  toJSON(): never {\n    throw new Error(COMMIT_TS_UNRESOLVED);\n  }\n  toString(): string {\n    return \"[unresolved commit timestamp]\";\n  }\n}\n\n/**\n * The placeholder for a commit timestamp that is not yet known, exposed as\n * `db.vars.commitTs`. A singleton so that a value read back within the\n * writing mutation compares equal to `db.vars.commitTs`.\n *\n * @internal\n */\nexport const commitTsPlaceholder = new CommitTsPlaceholder();\n\nfunction isSpecial(n: number) {\n  return Number.isNaN(n) || !Number.isFinite(n) || Object.is(n, -0);\n}\n\nexport function slowBigIntToBase64(value: bigint): string {\n  // the conversion is easy if we pretend it's unsigned\n  if (value < ZERO) {\n    value -= MIN_INT64 + MIN_INT64;\n  }\n  let hex = value.toString(16);\n  if (hex.length % 2 === 1) hex = \"0\" + hex;\n\n  const bytes = new Uint8Array(new ArrayBuffer(8));\n  let i = 0;\n  for (const hexByte of hex.match(/.{2}/g)!.reverse()) {\n    bytes.set([parseInt(hexByte, 16)], i++);\n    value >>= EIGHT;\n  }\n  return Base64.fromByteArray(bytes);\n}\n\nexport function slowBase64ToBigInt(encoded: string): bigint {\n  const integerBytes = Base64.toByteArray(encoded);\n  if (integerBytes.byteLength !== 8) {\n    throw new Error(\n      `Received ${integerBytes.byteLength} bytes, expected 8 for $integer`,\n    );\n  }\n  let value = ZERO;\n  let power = ZERO;\n  for (const byte of integerBytes) {\n    value += BigInt(byte) * TWOFIFTYSIX ** power;\n    power++;\n  }\n  if (value > MAX_INT64) {\n    value += MIN_INT64 + MIN_INT64;\n  }\n  return value;\n}\n\nexport function modernBigIntToBase64(value: bigint): string {\n  if (value < MIN_INT64 || MAX_INT64 < value) {\n    throw new Error(\n      `BigInt ${value} does not fit into a 64-bit signed integer.`,\n    );\n  }\n  const buffer = new ArrayBuffer(8);\n  new DataView(buffer).setBigInt64(0, value, true);\n  return Base64.fromByteArray(new Uint8Array(buffer));\n}\n\nexport function modernBase64ToBigInt(encoded: string): bigint {\n  const integerBytes = Base64.toByteArray(encoded);\n  if (integerBytes.byteLength !== 8) {\n    throw new Error(\n      `Received ${integerBytes.byteLength} bytes, expected 8 for $integer`,\n    );\n  }\n  const intBytesView = new DataView(integerBytes.buffer);\n  return intBytesView.getBigInt64(0, true);\n}\n\n// Fall back to a slower version on Safari 14 which lacks these APIs.\nexport const bigIntToBase64 = (DataView.prototype as any).setBigInt64\n  ? modernBigIntToBase64\n  : slowBigIntToBase64;\nexport const base64ToBigInt = (DataView.prototype as any).getBigInt64\n  ? modernBase64ToBigInt\n  : slowBase64ToBigInt;\n\nconst MAX_IDENTIFIER_LEN = 1024;\n\nfunction validateObjectField(k: string) {\n  if (k.length > MAX_IDENTIFIER_LEN) {\n    throw new Error(\n      `Field name ${k} exceeds maximum field name length ${MAX_IDENTIFIER_LEN}.`,\n    );\n  }\n  if (k.startsWith(\"$\")) {\n    throw new Error(`Field name ${k} starts with a '$', which is reserved.`);\n  }\n  for (let i = 0; i < k.length; i += 1) {\n    const charCode = k.charCodeAt(i);\n    // Non-control ASCII characters\n    if (charCode < 32 || charCode >= 127) {\n      throw new Error(\n        `Field name ${k} has invalid character '${k[i]}': Field names can only contain non-control ASCII characters`,\n      );\n    }\n  }\n}\n\n/**\n * Parse a Convex value from its JSON representation.\n *\n * This function will deserialize serialized Int64s to `BigInt`s, Bytes to `ArrayBuffer`s etc.\n *\n * To learn more about Convex values, see [Types](https://docs.convex.dev/using/types).\n *\n * @param value - The JSON representation of a Convex value previously created with {@link convexToJson}.\n * @returns The JavaScript representation of the Convex value.\n *\n * @public\n */\nexport function jsonToConvex(value: JSONValue): Value {\n  if (value === null) {\n    return value;\n  }\n  if (typeof value === \"boolean\") {\n    return value;\n  }\n  if (typeof value === \"number\") {\n    return value;\n  }\n  if (typeof value === \"string\") {\n    return value;\n  }\n  if (Array.isArray(value)) {\n    return value.map((value) => jsonToConvex(value));\n  }\n  if (typeof value !== \"object\") {\n    throw new Error(`Unexpected type of ${value as any}`);\n  }\n  const entries = Object.entries(value);\n  if (entries.length === 1) {\n    const key = entries[0][0];\n    if (key === \"$bytes\") {\n      if (typeof value.$bytes !== \"string\") {\n        throw new Error(`Malformed $bytes field on ${value as any}`);\n      }\n      return Base64.toByteArray(value.$bytes).buffer;\n    }\n    if (key === \"$integer\") {\n      if (typeof value.$integer !== \"string\") {\n        throw new Error(`Malformed $integer field on ${value as any}`);\n      }\n      return base64ToBigInt(value.$integer);\n    }\n    if (key === \"$float\") {\n      if (typeof value.$float !== \"string\") {\n        throw new Error(`Malformed $float field on ${value as any}`);\n      }\n      const floatBytes = Base64.toByteArray(value.$float);\n      if (floatBytes.byteLength !== 8) {\n        throw new Error(\n          `Received ${floatBytes.byteLength} bytes, expected 8 for $float`,\n        );\n      }\n      const floatBytesView = new DataView(floatBytes.buffer);\n      const float = floatBytesView.getFloat64(0, LITTLE_ENDIAN);\n      if (!isSpecial(float)) {\n        throw new Error(`Float ${float} should be encoded as a number`);\n      }\n      return float;\n    }\n    if (key === \"$commitTs\") {\n      if (value.$commitTs !== null) {\n        throw new Error(`Malformed $commitTs field on ${value as any}`);\n      }\n      return commitTsPlaceholder;\n    }\n    if (key === \"$set\") {\n      throw new Error(\n        `Received a Set which is no longer supported as a Convex type.`,\n      );\n    }\n    if (key === \"$map\") {\n      throw new Error(\n        `Received a Map which is no longer supported as a Convex type.`,\n      );\n    }\n  }\n  const out: { [key: string]: Value } = {};\n  for (const [k, v] of Object.entries(value)) {\n    validateObjectField(k);\n    out[k] = jsonToConvex(v);\n  }\n  return out;\n}\n\nconst MAX_VALUE_FOR_ERROR_LEN = 16384;\n\nexport function stringifyValueForError(value: any) {\n  const str = JSON.stringify(value, (_key, value) => {\n    if (value === undefined) {\n      // JSON.stringify omits undefined object properties and converts undefined\n      // array elements to null. Preserve them in error messages.\n      return \"undefined\";\n    }\n    if (typeof value === \"function\") {\n      // A fixed placeholder also works for functions with custom string coercion.\n      return \"[Function]\";\n    }\n    if (typeof value === \"symbol\") {\n      return String(value);\n    }\n    if (typeof value === \"bigint\") {\n      // `JSON.stringify` throws on bigints by default.\n      return `${value.toString()}n`;\n    }\n    return value;\n  });\n  if (str.length > MAX_VALUE_FOR_ERROR_LEN) {\n    const rest = \"[...truncated]\";\n    let truncateAt = MAX_VALUE_FOR_ERROR_LEN - rest.length;\n    const codePoint = str.codePointAt(truncateAt - 1);\n    if (codePoint !== undefined && codePoint > 0xffff) {\n      // don't split a surrogate pair in half\n      truncateAt -= 1;\n    }\n    return str.substring(0, truncateAt) + rest;\n  }\n  return str;\n}\n\nfunction convexToJsonInternal(\n  value: Value,\n  originalValue: Value,\n  context: string,\n  includeTopLevelUndefined: boolean,\n): JSONValue {\n  if (value === undefined) {\n    const contextText =\n      context &&\n      ` (present at path ${context} in original object ${stringifyValueForError(\n        originalValue,\n      )})`;\n    throw new Error(\n      `undefined is not a valid Convex value${contextText}. To learn about Convex's supported types, see https://docs.convex.dev/using/types.`,\n    );\n  }\n  if (value === null) {\n    return value;\n  }\n  if (typeof value === \"bigint\") {\n    if (value < MIN_INT64 || MAX_INT64 < value) {\n      throw new Error(\n        `BigInt ${value} does not fit into a 64-bit signed integer.`,\n      );\n    }\n    return { $integer: bigIntToBase64(value) };\n  }\n  if (typeof value === \"number\") {\n    if (isSpecial(value)) {\n      const buffer = new ArrayBuffer(8);\n      new DataView(buffer).setFloat64(0, value, LITTLE_ENDIAN);\n      return { $float: Base64.fromByteArray(new Uint8Array(buffer)) };\n    } else {\n      return value;\n    }\n  }\n  if (typeof value === \"boolean\") {\n    return value;\n  }\n  if (typeof value === \"string\") {\n    return value;\n  }\n  if (value instanceof ArrayBuffer) {\n    return { $bytes: Base64.fromByteArray(new Uint8Array(value)) };\n  }\n  if (value instanceof CommitTsPlaceholder) {\n    return { $commitTs: null };\n  }\n  if (Array.isArray(value)) {\n    return value.map((value, i) =>\n      convexToJsonInternal(value, originalValue, context + `[${i}]`, false),\n    );\n  }\n  if (value instanceof Set) {\n    throw new Error(\n      errorMessageForUnsupportedType(context, \"Set\", [...value], originalValue),\n    );\n  }\n  if (value instanceof Map) {\n    throw new Error(\n      errorMessageForUnsupportedType(context, \"Map\", [...value], originalValue),\n    );\n  }\n\n  if (!isSimpleObject(value)) {\n    const theType = value?.constructor?.name;\n    const typeName = theType ? `${theType} ` : \"\";\n    throw new Error(\n      errorMessageForUnsupportedType(context, typeName, value, originalValue),\n    );\n  }\n\n  const out: { [key: string]: JSONValue } = {};\n  const entries = Object.entries(value);\n  entries.sort(([k1, _v1], [k2, _v2]) => (k1 === k2 ? 0 : k1 < k2 ? -1 : 1));\n  for (const [k, v] of entries) {\n    if (v !== undefined) {\n      validateObjectField(k);\n      out[k] = convexToJsonInternal(v, originalValue, context + `.${k}`, false);\n    } else if (includeTopLevelUndefined) {\n      validateObjectField(k);\n      out[k] = convexOrUndefinedToJsonInternal(\n        v,\n        originalValue,\n        context + `.${k}`,\n      );\n    }\n  }\n  return out;\n}\n\nfunction errorMessageForUnsupportedType(\n  context: string,\n  typeName: string,\n  value: any,\n  originalValue: any,\n) {\n  if (context) {\n    return `${typeName}${stringifyValueForError(\n      value,\n    )} is not a supported Convex type (present at path ${context} in original object ${stringifyValueForError(\n      originalValue,\n    )}). To learn about Convex's supported types, see https://docs.convex.dev/using/types.`;\n  } else {\n    return `${typeName}${stringifyValueForError(\n      value,\n    )} is not a supported Convex type.`;\n  }\n}\n\n// convexOrUndefinedToJsonInternal wrapper exists so we can pipe through the\n// `originalValue` and `context` through for better error messaging.\nfunction convexOrUndefinedToJsonInternal(\n  value: Value | undefined,\n  originalValue: Value | undefined,\n  context: string,\n): JSONValue {\n  if (value === undefined) {\n    return { $undefined: null };\n  } else {\n    if (originalValue === undefined) {\n      // This should not happen.\n      throw new Error(\n        `Programming error. Current value is ${stringifyValueForError(\n          value,\n        )} but original value is undefined`,\n      );\n    }\n    return convexToJsonInternal(value, originalValue, context, false);\n  }\n}\n\n/**\n * Convert a Convex value to its JSON representation.\n *\n * Use {@link jsonToConvex} to recreate the original value.\n *\n * To learn more about Convex values, see [Types](https://docs.convex.dev/using/types).\n *\n * @param value - A Convex value to convert into JSON.\n * @returns The JSON representation of `value`.\n *\n * @public\n */\nexport function convexToJson(value: Value): JSONValue {\n  return convexToJsonInternal(value, value, \"\", false);\n}\n\n// Convert a Convex value or `undefined` into its JSON representation.\n// `undefined` is used in filters to represent a missing object field.\nexport function convexOrUndefinedToJson(value: Value | undefined): JSONValue {\n  return convexOrUndefinedToJsonInternal(value, value, \"\");\n}\n\n/**\n * Similar to convexToJson but also serializes top level undefined fields\n * using convexOrUndefinedToJson().\n *\n * @param value - A Convex value to convert into JSON.\n * @returns The JSON representation of `value`.\n */\nexport function patchValueToJson(value: Value): JSONValue {\n  return convexToJsonInternal(value, value, \"\", true);\n}\n", "import { Value, stringifyValueForError } from \"./value.js\";\n\nconst IDENTIFYING_FIELD = Symbol.for(\"ConvexError\");\n\nexport class ConvexError<TData extends Value> extends Error {\n  name = \"ConvexError\";\n  data: TData;\n  [IDENTIFYING_FIELD] = true;\n\n  constructor(data: TData) {\n    super(typeof data === \"string\" ? data : stringifyValueForError(data));\n    this.data = data;\n  }\n}\n", "/* eslint-disable no-console */ // This is the one file where we can `console.log` for the default logger implementation.\nimport { ConvexError, Value } from \"../values/index.js\";\nimport { FunctionFailure } from \"./sync/function_result.js\";\n\n// This is blue #9 from https://www.radix-ui.com/docs/colors/palette-composition/the-scales\n// It must look good in both light and dark mode.\nconst INFO_COLOR = \"color:rgb(0, 145, 255)\";\n\nexport type UdfType = \"query\" | \"mutation\" | \"action\" | \"any\";\n\nfunction prefix_for_source(source: UdfType) {\n  switch (source) {\n    case \"query\":\n      return \"Q\";\n    case \"mutation\":\n      return \"M\";\n    case \"action\":\n      return \"A\";\n    case \"any\":\n      return \"?\";\n  }\n}\n\nexport type LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\n/**\n * A logger that can be used to log messages. By default, this is a wrapper\n * around `console`, but can be configured to not log at all or to log somewhere\n * else.\n */\nexport type Logger = {\n  logVerbose(...args: any[]): void;\n  log(...args: any[]): void;\n  warn(...args: any[]): void;\n  error(...args: any[]): void;\n};\n\nexport class DefaultLogger implements Logger {\n  private _onLogLineFuncs: Record<\n    string,\n    (level: LogLevel, ...args: any[]) => void\n  >;\n  private _verbose: boolean;\n\n  constructor(options: { verbose: boolean }) {\n    this._onLogLineFuncs = {};\n    this._verbose = options.verbose;\n  }\n\n  addLogLineListener(\n    func: (level: LogLevel, ...args: any[]) => void,\n  ): () => void {\n    let id = Math.random().toString(36).substring(2, 15);\n    for (let i = 0; i < 10; i++) {\n      if (this._onLogLineFuncs[id] === undefined) {\n        break;\n      }\n      id = Math.random().toString(36).substring(2, 15);\n    }\n    this._onLogLineFuncs[id] = func;\n    return () => {\n      delete this._onLogLineFuncs[id];\n    };\n  }\n\n  logVerbose(...args: any[]) {\n    if (this._verbose) {\n      for (const func of Object.values(this._onLogLineFuncs)) {\n        func(\"debug\", `${new Date().toISOString()}`, ...args);\n      }\n    }\n  }\n\n  log(...args: any[]) {\n    for (const func of Object.values(this._onLogLineFuncs)) {\n      func(\"info\", ...args);\n    }\n  }\n\n  warn(...args: any[]) {\n    for (const func of Object.values(this._onLogLineFuncs)) {\n      func(\"warn\", ...args);\n    }\n  }\n\n  error(...args: any[]) {\n    for (const func of Object.values(this._onLogLineFuncs)) {\n      func(\"error\", ...args);\n    }\n  }\n}\n\nexport function instantiateDefaultLogger(options: {\n  verbose: boolean;\n}): Logger {\n  const logger = new DefaultLogger(options);\n  logger.addLogLineListener((level, ...args) => {\n    switch (level) {\n      case \"debug\":\n        console.debug(...args);\n        break;\n      case \"info\":\n        console.log(...args);\n        break;\n      case \"warn\":\n        console.warn(...args);\n        break;\n      case \"error\":\n        console.error(...args);\n        break;\n      default: {\n        level satisfies never;\n        console.log(...args);\n      }\n    }\n  });\n  return logger;\n}\n\nexport function instantiateNoopLogger(options: { verbose: boolean }): Logger {\n  return new DefaultLogger(options);\n}\n\nexport function logForFunction(\n  logger: Logger,\n  type: \"info\" | \"error\",\n  source: UdfType,\n  udfPath: string,\n  message: string | { errorData: Value },\n) {\n  const prefix = prefix_for_source(source);\n\n  if (typeof message === \"object\") {\n    message = `ConvexError ${JSON.stringify(message.errorData, null, 2)}`;\n  }\n  if (type === \"info\") {\n    const match = message.match(/^\\[.*?\\] /);\n    if (match === null) {\n      logger.error(\n        `[CONVEX ${prefix}(${udfPath})] Could not parse console.log`,\n      );\n      return;\n    }\n    const level = message.slice(1, match[0].length - 2);\n    const args = message.slice(match[0].length);\n\n    logger.log(`%c[CONVEX ${prefix}(${udfPath})] [${level}]`, INFO_COLOR, args);\n  } else {\n    logger.error(`[CONVEX ${prefix}(${udfPath})] ${message}`);\n  }\n}\n\nexport function logFatalError(logger: Logger, message: string): Error {\n  const errorMessage = `[CONVEX FATAL ERROR] ${message}`;\n  logger.error(errorMessage);\n  return new Error(errorMessage);\n}\n\nexport function createHybridErrorStacktrace(\n  source: UdfType,\n  udfPath: string,\n  result: FunctionFailure,\n): string {\n  const prefix = prefix_for_source(source);\n  return `[CONVEX ${prefix}(${udfPath})] ${result.errorMessage}\\n  Called by client`;\n}\n\nexport function forwardData(\n  result: FunctionFailure,\n  error: ConvexError<string>,\n) {\n  (error as ConvexError<any>).data = result.errorData;\n  return error;\n}\n", "/**\n * BaseConvexClient should not be used directly and does not provide a stable\n * interface. It is a \"Base\" client not because it expects to be inherited from\n * but because other clients are built around it.\n *\n * BaseConvexClient is not Convex Function type-aware: it deals\n * with queries as functions that return Value, not the specific value.\n * Use a higher-level library to get types.\n */\nimport { version } from \"../../index.js\";\nimport { convexToJson, Value } from \"../../values/index.js\";\nimport {\n  createHybridErrorStacktrace,\n  forwardData,\n  instantiateDefaultLogger,\n  instantiateNoopLogger,\n  logFatalError,\n  Logger,\n} from \"../logging.js\";\nimport { LocalSyncState } from \"./local_state.js\";\nimport { RequestManager } from \"./request_manager.js\";\nimport {\n  OptimisticLocalStore,\n  OptimisticUpdate,\n} from \"./optimistic_updates.js\";\nimport {\n  OptimisticQueryResults,\n  QueryResultsMap,\n} from \"./optimistic_updates_impl.js\";\nimport {\n  ActionRequest,\n  MutationRequest,\n  QueryId,\n  QueryJournal,\n  ServerMessage,\n  RequestId,\n  TS,\n  UserIdentityAttributes,\n} from \"./protocol.js\";\nimport { RemoteQuerySet } from \"./remote_query_set.js\";\nimport { QueryToken, serializePathAndArgs } from \"./udf_path_utils.js\";\nimport { ReconnectMetadata, WebSocketManager } from \"./web_socket_manager.js\";\nimport { newSessionId } from \"./session.js\";\nimport { FunctionResult } from \"./function_result.js\";\nimport {\n  AuthenticationManager,\n  AuthTokenFetcher,\n} from \"./authentication_manager.js\";\nexport { type AuthTokenFetcher } from \"./authentication_manager.js\";\nimport { getMarksReport, mark, MarkName } from \"./metrics.js\";\nimport { parseArgs, validateDeploymentUrl } from \"../../common/index.js\";\nimport { ConvexError } from \"../../values/errors.js\";\nimport { jwtDecode } from \"../../vendor/jwt-decode/index.js\";\n\n/**\n * Options for {@link BaseConvexClient}.\n *\n * @public\n */\nexport interface BaseConvexClientOptions {\n  /**\n   * Whether to prompt the user if they have unsaved changes pending\n   * when navigating away or closing a web page.\n   *\n   * This is only possible when the `window` object exists, i.e. in a browser.\n   *\n   * The default value is `true` in browsers.\n   */\n  unsavedChangesWarning?: boolean;\n  /**\n   * Specifies an alternate\n   * [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket)\n   * constructor to use for client communication with the Convex cloud.\n   * The default behavior is to use `WebSocket` from the global environment.\n   */\n  webSocketConstructor?: typeof WebSocket;\n  /**\n   * Adds additional logging for debugging purposes.\n   *\n   * The default value is `false`.\n   */\n  verbose?: boolean;\n  /**\n   * A logger, `true`, or `false`. If not provided or `true`, logs to the console.\n   * If `false`, logs are not printed anywhere.\n   *\n   * You can construct your own logger to customize logging to log elsewhere.\n   * A logger is an object with 4 methods: log(), warn(), error(), and logVerbose().\n   * These methods can receive multiple arguments of any types, like console.log().\n   */\n  logger?: Logger | boolean;\n  /**\n   * Sends additional metrics to Convex for debugging purposes.\n   *\n   * The default value is `false`.\n   */\n  reportDebugInfoToConvex?: boolean;\n  /**\n   * This API is experimental: it may change or disappear.\n   *\n   * A function to call on receiving abnormal WebSocket close messages from the\n   * connected Convex deployment. The content of these messages is not stable,\n   * it is an implementation detail that may change.\n   *\n   * Consider this API an observability stopgap until higher level codes with\n   * recommendations on what to do are available, which could be a more stable\n   * interface instead of `string`.\n   *\n   * Check `connectionState` for more quantitative metrics about connection status.\n   */\n  onServerDisconnectError?: (message: string) => void;\n  /**\n   * Skip validating that the Convex deployment URL looks like\n   * `https://happy-animal-123.convex.cloud` or localhost.\n   *\n   * This can be useful if running a self-hosted Convex backend that uses a different\n   * URL.\n   *\n   * The default value is `false`\n   */\n  skipConvexDeploymentUrlCheck?: boolean;\n  /**\n   * If using auth, the number of seconds before a token expires that we should refresh it.\n   *\n   * The default value is `10`.\n   */\n  authRefreshTokenLeewaySeconds?: number;\n  /**\n   * This API is experimental: it may change or disappear.\n   *\n   * Whether query, mutation, and action requests should be held back\n   * until the first auth token can be sent.\n   *\n   * Opting into this behavior works well for pages that should\n   * only be viewed by authenticated clients.\n   *\n   * Defaults to false, not waiting for an auth token.\n   */\n  expectAuth?: boolean;\n  /**\n   * This API is experimental: it may change or disappear.\n   *\n   * When true, the client reuses the initial cached auth token instead\n   * of immediately fetching a fresh one. This avoids a second\n   * Authenticate message that causes the server to re-execute all\n   * authenticated queries.\n   *\n   * The cached token's remaining lifetime is estimated using the\n   * server's clock skew measurement, and a refresh is scheduled\n   * before it expires.\n   *\n   * Defaults to false, preserving the original behavior of immediately\n   * fetching a fresh token after the cached token is confirmed.\n   */\n  initialAuthTokenReuse?: boolean;\n}\n\n/**\n * State describing the client's connection with the Convex backend.\n *\n * @public\n */\nexport type ConnectionState = {\n  hasInflightRequests: boolean;\n  isWebSocketConnected: boolean;\n  timeOfOldestInflightRequest: Date | null;\n  /**\n   * True if the client has ever opened a WebSocket to the \"ready\" state.\n   */\n  hasEverConnected: boolean;\n  /**\n   * The number of times this client has connected to the Convex backend.\n   *\n   * A number of things can cause the client to reconnect -- server errors,\n   * bad internet, auth expiring. But this number being high is an indication\n   * that the client is having trouble keeping a stable connection.\n   */\n  connectionCount: number;\n  /**\n   * The number of times this client has tried (and failed) to connect to the Convex backend.\n   */\n  connectionRetries: number;\n  /**\n   * The number of mutations currently in flight.\n   */\n  inflightMutations: number;\n  /**\n   * The number of actions currently in flight.\n   */\n  inflightActions: number;\n};\n\n/**\n * Options for {@link BaseConvexClient.subscribe}.\n *\n * @public\n */\nexport interface SubscribeOptions {\n  /**\n   * An (optional) journal produced from a previous execution of this query\n   * function.\n   *\n   * If there is an existing subscription to a query function with the same\n   * name and arguments, this journal will have no effect.\n   */\n  journal?: QueryJournal;\n\n  /**\n   * @internal\n   */\n  componentPath?: string | undefined;\n}\n\n/**\n * Options for {@link BaseConvexClient.mutation}.\n *\n * @public\n */\nexport interface MutationOptions {\n  /**\n   * An optimistic update to apply along with this mutation.\n   *\n   * An optimistic update locally updates queries while a mutation is pending.\n   * Once the mutation completes, the update will be rolled back.\n   */\n  optimisticUpdate?: OptimisticUpdate<any> | undefined;\n}\n\n/**\n * Type describing updates to a query within a `Transition`.\n *\n * @public\n */\nexport type QueryModification =\n  // `undefined` generally comes from an optimistic update setting the query to be loading\n  { kind: \"Updated\"; result: FunctionResult | undefined } | { kind: \"Removed\" };\n\n/**\n * Object describing a transition passed into the `onTransition` handler.\n *\n * These can be from receiving a transition from the server, or from applying an\n * optimistic update locally.\n *\n * @public\n */\nexport type Transition = {\n  queries: Array<{ token: QueryToken; modification: QueryModification }>;\n  reflectedMutations: Array<{ requestId: RequestId; result: FunctionResult }>;\n  timestamp: TS;\n};\n\n/**\n * Low-level client for directly integrating state management libraries\n * with Convex.\n *\n * Most developers should use higher level clients, like\n * the {@link ConvexHttpClient} or the React hook based {@link react.ConvexReactClient}.\n *\n * @public\n */\nexport class BaseConvexClient {\n  private readonly address: string;\n  private readonly state: LocalSyncState;\n  private readonly requestManager: RequestManager;\n  private readonly webSocketManager: WebSocketManager;\n  private readonly authenticationManager: AuthenticationManager;\n  private remoteQuerySet: RemoteQuerySet;\n  private readonly optimisticQueryResults: OptimisticQueryResults;\n  private _transitionHandlerCounter = 0;\n  private _nextRequestId: RequestId;\n  private _onTransitionFns: Map<number, (transition: Transition) => void> =\n    new Map();\n  private readonly _sessionId: string;\n  private firstMessageReceived = false;\n  private readonly debug: boolean;\n  private readonly logger: Logger;\n  private maxObservedTimestamp: TS | undefined;\n  private connectionStateSubscribers = new Map<\n    number,\n    (connectionState: ConnectionState) => void\n  >();\n  private nextConnectionStateSubscriberId: number = 0;\n  private _lastPublishedConnectionState: ConnectionState | undefined;\n\n  /**\n   * @param address - The url of your Convex deployment, often provided\n   * by an environment variable. E.g. `https://small-mouse-123.convex.cloud`.\n   * @param onTransition - A callback receiving an array of query tokens\n   * corresponding to query results that have changed -- additional handlers\n   * can be added via `addOnTransitionHandler`.\n   * @param options - See {@link BaseConvexClientOptions} for a full description.\n   */\n  constructor(\n    address: string,\n    onTransition: (updatedQueries: QueryToken[]) => void,\n    options?: BaseConvexClientOptions,\n  ) {\n    if (typeof address === \"object\") {\n      throw new Error(\n        \"Passing a ClientConfig object is no longer supported. Pass the URL of the Convex deployment as a string directly.\",\n      );\n    }\n    if (options?.skipConvexDeploymentUrlCheck !== true) {\n      validateDeploymentUrl(address);\n    }\n    options = { ...options };\n    const authRefreshTokenLeewaySeconds =\n      options.authRefreshTokenLeewaySeconds ?? 10;\n    let webSocketConstructor = options.webSocketConstructor;\n    if (!webSocketConstructor && typeof WebSocket === \"undefined\") {\n      throw new Error(\n        \"No WebSocket global variable defined! To use Convex in an environment without WebSocket try the HTTP client: https://docs.convex.dev/api/classes/browser.ConvexHttpClient\",\n      );\n    }\n    webSocketConstructor = webSocketConstructor || WebSocket;\n    this.debug = options.reportDebugInfoToConvex ?? false;\n    this.address = address;\n    this.logger =\n      options.logger === false\n        ? instantiateNoopLogger({ verbose: options.verbose ?? false })\n        : options.logger !== true && options.logger\n          ? options.logger\n          : instantiateDefaultLogger({ verbose: options.verbose ?? false });\n    // Substitute http(s) with ws(s)\n    const i = address.search(\"://\");\n    if (i === -1) {\n      throw new Error(\"Provided address was not an absolute URL.\");\n    }\n    const origin = address.substring(i + 3); // move past the double slash\n    const protocol = address.substring(0, i);\n    let wsProtocol;\n    if (protocol === \"http\") {\n      wsProtocol = \"ws\";\n    } else if (protocol === \"https\") {\n      wsProtocol = \"wss\";\n    } else {\n      throw new Error(`Unknown parent protocol ${protocol}`);\n    }\n    const wsUri = `${wsProtocol}://${origin}/api/${version}/sync`;\n\n    this.state = new LocalSyncState();\n    this.remoteQuerySet = new RemoteQuerySet(\n      (queryId) => this.state.queryPath(queryId),\n      this.logger,\n    );\n    this.requestManager = new RequestManager(\n      this.logger,\n      this.markConnectionStateDirty,\n    );\n\n    // This is a callback for AuthenticationManager (which can't call\n    // this synchronously, the callback wouldn't work) so the initial\n    // pause for expectAuth we call it at the end of this constructor.\n    const pauseSocket = () => {\n      this.webSocketManager.pause();\n      this.state.pause();\n    };\n    this.authenticationManager = new AuthenticationManager(\n      this.state,\n      {\n        authenticate: (token) => {\n          const message = this.state.setAuth(token);\n          this.webSocketManager.sendMessage(message);\n          return message.baseVersion;\n        },\n        stopSocket: () => this.webSocketManager.stop(),\n        tryRestartSocket: () => this.webSocketManager.tryRestart(),\n        pauseSocket,\n        resumeSocket: () => this.webSocketManager.resume(),\n        clearAuth: () => {\n          this.clearAuth();\n        },\n      },\n      {\n        logger: this.logger,\n        refreshTokenLeewaySeconds: authRefreshTokenLeewaySeconds,\n        initialAuthTokenReuse: options.initialAuthTokenReuse ?? false,\n      },\n    );\n    this.optimisticQueryResults = new OptimisticQueryResults();\n    this.addOnTransitionHandler((transition) => {\n      onTransition(transition.queries.map((q) => q.token));\n    });\n    this._nextRequestId = 0;\n    this._sessionId = newSessionId();\n\n    const { unsavedChangesWarning } = options;\n    if (\n      typeof window === \"undefined\" ||\n      typeof window.addEventListener === \"undefined\"\n    ) {\n      if (unsavedChangesWarning === true) {\n        throw new Error(\n          \"unsavedChangesWarning requested, but window.addEventListener not found! Remove {unsavedChangesWarning: true} from Convex client options.\",\n        );\n      }\n    } else if (unsavedChangesWarning !== false) {\n      // Listen for tab close events and notify the user on unsaved changes.\n      window.addEventListener(\"beforeunload\", (e) => {\n        if (this.requestManager.hasIncompleteRequests()) {\n          // There are 3 different ways to trigger this pop up so just try all of\n          // them.\n\n          e.preventDefault();\n          // This confirmation message doesn't actually appear in most modern\n          // browsers but we tried.\n          const confirmationMessage =\n            \"Are you sure you want to leave? Your changes may not be saved.\";\n          // Recommended method for legacy (IE) browsers.\n          // casts to avoid deprecation notices\n          ((e || (window as any).event) as any).returnValue =\n            confirmationMessage;\n          return confirmationMessage;\n        }\n      });\n    }\n\n    this.webSocketManager = new WebSocketManager(\n      wsUri,\n      {\n        onOpen: (reconnectMetadata: ReconnectMetadata) => {\n          // We have a new WebSocket!\n          this.mark(\"convexWebSocketOpen\");\n          this.webSocketManager.sendMessage({\n            ...reconnectMetadata,\n            type: \"Connect\",\n            sessionId: this._sessionId,\n            maxObservedTimestamp: this.maxObservedTimestamp,\n          });\n\n          // Throw out our remote query, reissue queries\n          // and outstanding mutations, and reauthenticate.\n          this.remoteQuerySet = new RemoteQuerySet(\n            (queryId) => this.state.queryPath(queryId),\n            this.logger,\n          );\n          const [querySetModification, authModification] = this.state.restart();\n          if (authModification) {\n            this.webSocketManager.sendMessage(authModification);\n          }\n          this.webSocketManager.sendMessage(querySetModification);\n          for (const message of this.requestManager.restart()) {\n            this.webSocketManager.sendMessage(message);\n          }\n        },\n        onResume: () => {\n          const [querySetModification, authModification] = this.state.resume();\n          if (authModification) {\n            this.webSocketManager.sendMessage(authModification);\n          }\n          if (querySetModification) {\n            this.webSocketManager.sendMessage(querySetModification);\n          }\n          for (const message of this.requestManager.resume()) {\n            this.webSocketManager.sendMessage(message);\n          }\n        },\n        onMessage: (serverMessage: ServerMessage) => {\n          // Metrics events grow linearly with reconnection attempts so this\n          // conditional prevents n^2 metrics reporting.\n          if (!this.firstMessageReceived) {\n            this.firstMessageReceived = true;\n            this.mark(\"convexFirstMessageReceived\");\n            this.reportMarks();\n          }\n          switch (serverMessage.type) {\n            case \"Transition\": {\n              this.observedTimestamp(serverMessage.endVersion.ts);\n              this.authenticationManager.onTransition(serverMessage);\n              this.remoteQuerySet.transition(serverMessage);\n              this.state.transition(serverMessage);\n              const completedRequests = this.requestManager.removeCompleted(\n                this.remoteQuerySet.timestamp(),\n              );\n              this.notifyOnQueryResultChanges(completedRequests);\n              break;\n            }\n            case \"MutationResponse\": {\n              if (serverMessage.success) {\n                this.observedTimestamp(serverMessage.ts);\n              }\n              const completedMutationInfo =\n                this.requestManager.onResponse(serverMessage);\n              if (completedMutationInfo !== null) {\n                this.notifyOnQueryResultChanges(\n                  new Map([\n                    [\n                      completedMutationInfo.requestId,\n                      completedMutationInfo.result,\n                    ],\n                  ]),\n                );\n              }\n              break;\n            }\n            case \"ActionResponse\": {\n              this.requestManager.onResponse(serverMessage);\n              break;\n            }\n            case \"AuthError\": {\n              this.authenticationManager.onAuthError(serverMessage);\n              break;\n            }\n            case \"FatalError\": {\n              const error = logFatalError(this.logger, serverMessage.error);\n              void this.webSocketManager.terminate();\n              throw error;\n            }\n            default: {\n              serverMessage satisfies never;\n            }\n          }\n\n          return {\n            hasSyncedPastLastReconnect: this.hasSyncedPastLastReconnect(),\n          };\n        },\n        onServerDisconnectError: options.onServerDisconnectError,\n      },\n      webSocketConstructor,\n      this.logger,\n      this.markConnectionStateDirty,\n      this.debug,\n    );\n    this.mark(\"convexClientConstructed\");\n\n    // Begin client in a paused state waiting for an auth token.\n    if (options.expectAuth) {\n      pauseSocket();\n    }\n  }\n\n  /**\n   * Return true if there is outstanding work from prior to the time of the most recent restart.\n   * This indicates that the client has not proven itself to have gotten past the issue that\n   * potentially led to the restart. Use this to influence when to reset backoff after a failure.\n   */\n  private hasSyncedPastLastReconnect() {\n    const hasSyncedPastLastReconnect =\n      this.requestManager.hasSyncedPastLastReconnect() &&\n      this.state.hasSyncedPastLastReconnect();\n    return hasSyncedPastLastReconnect;\n  }\n\n  private observedTimestamp(observedTs: TS) {\n    if (\n      this.maxObservedTimestamp === undefined ||\n      this.maxObservedTimestamp.lessThanOrEqual(observedTs)\n    ) {\n      this.maxObservedTimestamp = observedTs;\n    }\n  }\n\n  getMaxObservedTimestamp() {\n    return this.maxObservedTimestamp;\n  }\n\n  /**\n   * Compute the current query results based on the remoteQuerySet and the\n   * current optimistic updates and call `onTransition` for all the changed\n   * queries.\n   *\n   * @param completedMutations - A set of mutation IDs whose optimistic updates\n   * are no longer needed.\n   */\n  private notifyOnQueryResultChanges(\n    completedRequests: Map<RequestId, FunctionResult>,\n  ) {\n    const remoteQueryResults: Map<QueryId, FunctionResult> =\n      this.remoteQuerySet.remoteQueryResults();\n    const queryTokenToValue: QueryResultsMap = new Map();\n    for (const [queryId, result] of remoteQueryResults) {\n      const queryToken = this.state.queryToken(queryId);\n      // It's possible that we've already unsubscribed to this query but\n      // the server hasn't learned about that yet. If so, ignore this one.\n\n      if (queryToken !== null) {\n        const query = {\n          result,\n          udfPath: this.state.queryPath(queryId)!,\n          args: this.state.queryArgs(queryId)!,\n        };\n        queryTokenToValue.set(queryToken, query);\n      }\n    }\n\n    // Query tokens that are new (because of new server results or new local optimistic updates)\n    // or differ from old values (because of changes from local optimistic updates or new results\n    // from the server).\n    const changedQueryTokens =\n      this.optimisticQueryResults.ingestQueryResultsFromServer(\n        queryTokenToValue,\n        new Set(completedRequests.keys()),\n      );\n\n    this.handleTransition({\n      queries: changedQueryTokens.map((token) => {\n        const optimisticResult =\n          this.optimisticQueryResults.rawQueryResult(token);\n        return {\n          token,\n          modification: {\n            kind: \"Updated\" as const,\n            result: optimisticResult,\n          },\n        };\n      }),\n      reflectedMutations: Array.from(completedRequests).map(\n        ([requestId, result]) => ({\n          requestId,\n          result,\n        }),\n      ),\n      timestamp: this.remoteQuerySet.timestamp(),\n    });\n  }\n\n  private handleTransition(transition: Transition) {\n    for (const fn of this._onTransitionFns.values()) {\n      fn(transition);\n    }\n  }\n\n  /**\n   * Add a handler that will be called on a transition.\n   *\n   * Any external side effects (e.g. setting React state) should be handled here.\n   *\n   * @param fn\n   *\n   * @returns\n   */\n  addOnTransitionHandler(fn: (transition: Transition) => void) {\n    const id = this._transitionHandlerCounter++;\n    this._onTransitionFns.set(id, fn);\n    return () => this._onTransitionFns.delete(id);\n  }\n\n  /**\n   * Get the current JWT auth token and decoded claims.\n   */\n  getCurrentAuthClaims():\n    | { token: string; decoded: Record<string, any> }\n    | undefined {\n    const authToken = this.state.getAuth();\n    let decoded: Record<string, any> = {};\n    if (authToken && authToken.tokenType === \"User\") {\n      try {\n        decoded = authToken ? jwtDecode(authToken.value) : {};\n      } catch {\n        decoded = {};\n      }\n    } else {\n      return undefined;\n    }\n    return { token: authToken.value, decoded };\n  }\n\n  /**\n   * Set the authentication token to be used for subsequent queries and mutations.\n   * `fetchToken` will be called automatically again if a token expires.\n   * `fetchToken` should return `null` if the token cannot be retrieved, for example\n   * when the user's rights were permanently revoked.\n   * @param fetchToken - an async function returning the JWT-encoded OpenID Connect Identity Token\n   * @param onChange - a callback that will be called when the authentication status changes\n   * @param onRefreshChange - a callback called with `true` when the socket is paused to fetch a replacement token after a server rejection, and `false` when refresh completes\n   */\n  setAuth(\n    fetchToken: AuthTokenFetcher,\n    onChange: (isAuthenticated: boolean) => void,\n    onRefreshChange?: (isRefreshing: boolean) => void,\n  ) {\n    void this.authenticationManager.setConfig(\n      fetchToken,\n      onChange,\n      onRefreshChange,\n    );\n  }\n\n  hasAuth() {\n    return this.state.hasAuth();\n  }\n\n  /** @internal */\n  setAdminAuth(value: string, fakeUserIdentity?: UserIdentityAttributes) {\n    const message = this.state.setAdminAuth(value, fakeUserIdentity);\n    this.webSocketManager.sendMessage(message);\n  }\n\n  clearAuth() {\n    const message = this.state.clearAuth();\n    this.webSocketManager.sendMessage(message);\n  }\n\n  /**\n   * Subscribe to a query function.\n   *\n   * Whenever this query's result changes, the `onTransition` callback\n   * passed into the constructor will be called.\n   *\n   * @param name - The name of the query.\n   * @param args - An arguments object for the query. If this is omitted, the\n   * arguments will be `{}`.\n   * @param options - A {@link SubscribeOptions} options object for this query.\n\n   * @returns An object containing a {@link QueryToken} corresponding to this\n   * query and an `unsubscribe` callback.\n   */\n  subscribe(\n    name: string,\n    args?: Record<string, Value>,\n    options?: SubscribeOptions,\n  ): { queryToken: QueryToken; unsubscribe: () => void } {\n    const argsObject = parseArgs(args);\n\n    const { modification, queryToken, unsubscribe } = this.state.subscribe(\n      name,\n      argsObject,\n      options?.journal,\n      options?.componentPath,\n    );\n    if (modification !== null) {\n      this.webSocketManager.sendMessage(modification);\n    }\n    return {\n      queryToken,\n      unsubscribe: () => {\n        const modification = unsubscribe();\n        if (modification) {\n          this.webSocketManager.sendMessage(modification);\n        }\n      },\n    };\n  }\n\n  /**\n   * A query result based only on the current, local state.\n   *\n   * The only way this will return a value is if we're already subscribed to the\n   * query or its value has been set optimistically.\n   */\n  localQueryResult(\n    udfPath: string,\n    args?: Record<string, Value>,\n  ): Value | undefined {\n    const argsObject = parseArgs(args);\n    const queryToken = serializePathAndArgs(udfPath, argsObject);\n    return this.optimisticQueryResults.queryResult(queryToken);\n  }\n\n  /**\n   * Get query result by query token based on current, local state\n   *\n   * The only way this will return a value is if we're already subscribed to the\n   * query or its value has been set optimistically.\n   *\n   * @internal\n   */\n  localQueryResultByToken(queryToken: QueryToken): Value | undefined {\n    return this.optimisticQueryResults.queryResult(queryToken);\n  }\n\n  /**\n   * Whether local query result is available for a token.\n   *\n   * This method does not throw if the result is an error.\n   *\n   * @internal\n   */\n  hasLocalQueryResultByToken(queryToken: QueryToken): boolean {\n    return this.optimisticQueryResults.hasQueryResult(queryToken);\n  }\n\n  /**\n   * @internal\n   */\n  localQueryLogs(\n    udfPath: string,\n    args?: Record<string, Value>,\n  ): string[] | undefined {\n    const argsObject = parseArgs(args);\n    const queryToken = serializePathAndArgs(udfPath, argsObject);\n    return this.optimisticQueryResults.queryLogs(queryToken);\n  }\n\n  /**\n   * Retrieve the current {@link QueryJournal} for this query function.\n   *\n   * If we have not yet received a result for this query, this will be `undefined`.\n   *\n   * @param name - The name of the query.\n   * @param args - The arguments object for this query.\n   * @returns The query's {@link QueryJournal} or `undefined`.\n   */\n  queryJournal(\n    name: string,\n    args?: Record<string, Value>,\n  ): QueryJournal | undefined {\n    const argsObject = parseArgs(args);\n    const queryToken = serializePathAndArgs(name, argsObject);\n    return this.state.queryJournal(queryToken);\n  }\n\n  /**\n   * Get the current {@link ConnectionState} between the client and the Convex\n   * backend.\n   *\n   * @returns The {@link ConnectionState} with the Convex backend.\n   */\n  connectionState(): ConnectionState {\n    const wsConnectionState = this.webSocketManager.connectionState();\n    return {\n      hasInflightRequests: this.requestManager.hasInflightRequests(),\n      isWebSocketConnected: wsConnectionState.isConnected,\n      hasEverConnected: wsConnectionState.hasEverConnected,\n      connectionCount: wsConnectionState.connectionCount,\n      connectionRetries: wsConnectionState.connectionRetries,\n      timeOfOldestInflightRequest:\n        this.requestManager.timeOfOldestInflightRequest(),\n      inflightMutations: this.requestManager.inflightMutations(),\n      inflightActions: this.requestManager.inflightActions(),\n    };\n  }\n\n  /**\n   * Call this whenever the connection state may have changed in a way that could\n   * require publishing it. Schedules a possibly update.\n   */\n  private markConnectionStateDirty = () => {\n    void Promise.resolve().then(() => {\n      const curConnectionState = this.connectionState();\n      if (\n        JSON.stringify(curConnectionState) !==\n        JSON.stringify(this._lastPublishedConnectionState)\n      ) {\n        this._lastPublishedConnectionState = curConnectionState;\n        for (const cb of this.connectionStateSubscribers.values()) {\n          // One of these callback throwing will prevent other callbacks\n          // from running but will not leave the client in a undefined state.\n          cb(curConnectionState);\n        }\n      }\n    });\n  };\n\n  /**\n   * Subscribe to the {@link ConnectionState} between the client and the Convex\n   * backend, calling a callback each time it changes.\n   *\n   * Subscribed callbacks will be called when any part of ConnectionState changes.\n   * ConnectionState may grow in future versions (e.g. to provide a array of\n   * inflight requests) in which case callbacks would be called more frequently.\n   *\n   * @returns An unsubscribe function to stop listening.\n   */\n  subscribeToConnectionState(\n    cb: (connectionState: ConnectionState) => void,\n  ): () => void {\n    const id = this.nextConnectionStateSubscriberId++;\n    this.connectionStateSubscribers.set(id, cb);\n    return () => {\n      this.connectionStateSubscribers.delete(id);\n    };\n  }\n\n  /**\n   * Execute a mutation function.\n   *\n   * @param name - The name of the mutation.\n   * @param args - An arguments object for the mutation. If this is omitted,\n   * the arguments will be `{}`.\n   * @param options - A {@link MutationOptions} options object for this mutation.\n\n   * @returns - A promise of the mutation's result.\n   */\n  async mutation(\n    name: string,\n    args?: Record<string, Value>,\n    options?: MutationOptions,\n  ): Promise<any> {\n    const result = await this.mutationInternal(name, args, options);\n    if (!result.success) {\n      if (result.errorData !== undefined) {\n        throw forwardData(\n          result,\n          new ConvexError(\n            createHybridErrorStacktrace(\"mutation\", name, result),\n          ),\n        );\n      }\n      throw new Error(createHybridErrorStacktrace(\"mutation\", name, result));\n    }\n    return result.value;\n  }\n\n  /**\n   * @internal\n   */\n  async mutationInternal(\n    udfPath: string,\n    args?: Record<string, Value>,\n    options?: MutationOptions,\n    componentPath?: string,\n  ): Promise<FunctionResult> {\n    const { mutationPromise } = this.enqueueMutation(\n      udfPath,\n      args,\n      options,\n      componentPath,\n    );\n    return mutationPromise;\n  }\n\n  /**\n   * @internal\n   */\n  enqueueMutation(\n    udfPath: string,\n    args?: Record<string, Value>,\n    options?: MutationOptions,\n    componentPath?: string,\n  ): { requestId: RequestId; mutationPromise: Promise<FunctionResult> } {\n    const mutationArgs = parseArgs(args);\n    this.tryReportLongDisconnect();\n    const requestId = this.nextRequestId;\n    this._nextRequestId++;\n\n    if (options !== undefined) {\n      const optimisticUpdate = options.optimisticUpdate;\n      if (optimisticUpdate !== undefined) {\n        const wrappedUpdate = (localQueryStore: OptimisticLocalStore) => {\n          const result: unknown = optimisticUpdate(\n            localQueryStore,\n            mutationArgs,\n          );\n          if (result instanceof Promise) {\n            this.logger.warn(\n              \"Optimistic update handler returned a Promise. Optimistic updates should be synchronous.\",\n            );\n          }\n        };\n\n        const changedQueryTokens =\n          this.optimisticQueryResults.applyOptimisticUpdate(\n            wrappedUpdate,\n            requestId,\n          );\n\n        const changedQueries = changedQueryTokens.map((token) => {\n          const localResult = this.localQueryResultByToken(token);\n          return {\n            token,\n            modification: {\n              kind: \"Updated\" as const,\n              result:\n                localResult === undefined\n                  ? undefined\n                  : {\n                      success: true as const,\n                      value: localResult,\n                      logLines: [],\n                    },\n            },\n          };\n        });\n        this.handleTransition({\n          queries: changedQueries,\n          reflectedMutations: [],\n          timestamp: this.remoteQuerySet.timestamp(),\n        });\n      }\n    }\n\n    const message: MutationRequest = {\n      type: \"Mutation\",\n      requestId,\n      udfPath,\n      componentPath,\n      args: [convexToJson(mutationArgs)],\n    };\n    const mightBeSent = this.webSocketManager.sendMessage(message);\n    const mutationPromise = this.requestManager.request(message, mightBeSent);\n    return {\n      requestId,\n      mutationPromise,\n    };\n  }\n\n  /**\n   * Execute an action function.\n   *\n   * @param name - The name of the action.\n   * @param args - An arguments object for the action. If this is omitted,\n   * the arguments will be `{}`.\n   * @returns A promise of the action's result.\n   */\n  async action(name: string, args?: Record<string, Value>): Promise<any> {\n    const result = await this.actionInternal(name, args);\n    if (!result.success) {\n      if (result.errorData !== undefined) {\n        throw forwardData(\n          result,\n          new ConvexError(createHybridErrorStacktrace(\"action\", name, result)),\n        );\n      }\n      throw new Error(createHybridErrorStacktrace(\"action\", name, result));\n    }\n    return result.value;\n  }\n\n  /**\n   * @internal\n   */\n  async actionInternal(\n    udfPath: string,\n    args?: Record<string, Value>,\n    componentPath?: string,\n  ): Promise<FunctionResult> {\n    const actionArgs = parseArgs(args);\n    const requestId = this.nextRequestId;\n    this._nextRequestId++;\n    this.tryReportLongDisconnect();\n\n    const message: ActionRequest = {\n      type: \"Action\",\n      requestId,\n      udfPath,\n      componentPath,\n      args: [convexToJson(actionArgs)],\n    };\n\n    const mightBeSent = this.webSocketManager.sendMessage(message);\n    return this.requestManager.request(message, mightBeSent);\n  }\n\n  /**\n   * Close any network handles associated with this client and stop all subscriptions.\n   *\n   * Call this method when you're done with an {@link BaseConvexClient} to\n   * dispose of its sockets and resources.\n   *\n   * @returns A `Promise` fulfilled when the connection has been completely closed.\n   */\n  async close(): Promise<void> {\n    this.authenticationManager.stop();\n    return this.webSocketManager.terminate();\n  }\n\n  /**\n   * Return the address for this client, useful for creating a new client.\n   *\n   * Not guaranteed to match the address with which this client was constructed:\n   * it may be canonicalized.\n   */\n  get url() {\n    return this.address;\n  }\n\n  /**\n   * @internal\n   */\n  get nextRequestId() {\n    return this._nextRequestId;\n  }\n\n  /**\n   * @internal\n   */\n  get sessionId() {\n    return this._sessionId;\n  }\n\n  // Instance property so that `mark()` doesn't need to be called as a method.\n  private mark = (name: MarkName) => {\n    if (this.debug) {\n      mark(name, this.sessionId);\n    }\n  };\n\n  /**\n   * Reports performance marks to the server. This should only be called when\n   * we have a functional websocket.\n   */\n  private reportMarks() {\n    if (this.debug) {\n      const report = getMarksReport(this.sessionId);\n      this.webSocketManager.sendMessage({\n        type: \"Event\",\n        eventType: \"ClientConnect\",\n        event: report,\n      });\n    }\n  }\n\n  private tryReportLongDisconnect() {\n    if (!this.debug) {\n      return;\n    }\n    const timeOfOldestRequest =\n      this.connectionState().timeOfOldestInflightRequest;\n    if (\n      timeOfOldestRequest === null ||\n      Date.now() - timeOfOldestRequest.getTime() <= 60 * 1000\n    ) {\n      return;\n    }\n    const endpoint = `${this.address}/api/debug_event`;\n    fetch(endpoint, {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"Convex-Client\": `npm-${version}`,\n      },\n      body: JSON.stringify({ event: \"LongWebsocketDisconnect\" }),\n    })\n      .then((response) => {\n        if (!response.ok) {\n          this.logger.warn(\n            \"Analytics request failed with response:\",\n            response.body,\n          );\n        }\n      })\n      .catch((error) => {\n        this.logger.warn(\"Analytics response failed with error:\", error);\n      });\n  }\n}\n\n/**\n * The public API of {@link BaseConvexClient}.\n *\n * @internal\n */\nexport interface BaseConvexClientInterface {\n  addOnTransitionHandler(fn: (transition: Transition) => void): () => void;\n\n  setAuth(\n    fetchToken: AuthTokenFetcher,\n    onChange: (isAuthenticated: boolean) => void,\n    onRefreshChange?: (isRefreshing: boolean) => void,\n  ): void;\n\n  /** @internal */\n  setAdminAuth(value: string, fakeUserIdentity?: UserIdentityAttributes): void;\n\n  clearAuth(): void;\n\n  subscribe(\n    name: string,\n    args?: Record<string, Value>,\n    options?: SubscribeOptions,\n  ): { queryToken: QueryToken; unsubscribe: () => void };\n\n  localQueryResult(\n    udfPath: string,\n    args?: Record<string, Value>,\n  ): Value | undefined;\n\n  localQueryResultByToken(queryToken: QueryToken): Value | undefined;\n\n  hasLocalQueryResultByToken(queryToken: QueryToken): boolean;\n\n  localQueryLogs(\n    udfPath: string,\n    args?: Record<string, Value>,\n  ): string[] | undefined;\n\n  queryJournal(\n    name: string,\n    args?: Record<string, Value>,\n  ): QueryJournal | undefined;\n\n  connectionState(): ConnectionState;\n\n  subscribeToConnectionState(\n    cb: (connectionState: ConnectionState) => void,\n  ): () => void;\n\n  mutation(\n    name: string,\n    args?: Record<string, Value>,\n    options?: MutationOptions,\n  ): Promise<any>;\n\n  action(name: string, args?: Record<string, Value>): Promise<any>;\n\n  close(): Promise<void>;\n\n  readonly url: string;\n}\n", "import { convexToJson, Value } from \"../../values/index.js\";\n\nexport function canonicalizeUdfPath(udfPath: string): string {\n  const pieces = udfPath.split(\":\");\n  let moduleName: string;\n  let functionName: string;\n  if (pieces.length === 1) {\n    moduleName = pieces[0];\n    functionName = \"default\";\n  } else {\n    moduleName = pieces.slice(0, pieces.length - 1).join(\":\");\n    functionName = pieces[pieces.length - 1];\n  }\n  if (moduleName.endsWith(\".js\")) {\n    moduleName = moduleName.slice(0, -3);\n  }\n  return `${moduleName}:${functionName}`;\n}\n\n/**\n * The serialization here is not stable, these strings never make it outside the client.\n */\n\n/**\n * A string representing the name and arguments of a query.\n *\n * This is used by the {@link BaseConvexClient}.\n *\n * @public\n */\nexport type QueryToken = string & { __queryToken: true };\n\n/**\n * A string representing the name and arguments of a paginated query.\n *\n * This is a specialized form of QueryToken used for paginated queries.\n */\nexport type PaginatedQueryToken = QueryToken & { __paginatedQueryToken: true };\n\nexport function serializePathAndArgs(\n  udfPath: string,\n  args: Record<string, Value>,\n): QueryToken {\n  return JSON.stringify({\n    udfPath: canonicalizeUdfPath(udfPath),\n    args: convexToJson(args),\n  }) as QueryToken;\n}\n\nexport function serializePaginatedPathAndArgs(\n  udfPath: string,\n  args: Record<string, Value>, // args WITHOUT paginationOpts\n  options: { initialNumItems: number; id: number },\n): PaginatedQueryToken {\n  const { initialNumItems, id } = options;\n  const result = JSON.stringify({\n    type: \"paginated\",\n    udfPath: canonicalizeUdfPath(udfPath),\n    args: convexToJson(args),\n    options: convexToJson({ initialNumItems, id }),\n  }) as PaginatedQueryToken;\n  return result;\n}\n\nexport function serializedQueryTokenIsPaginated(\n  token: QueryToken | PaginatedQueryToken,\n): token is PaginatedQueryToken {\n  return JSON.parse(token).type === \"paginated\";\n}\n", "/**\n * The local state of the client:\n * - which queries are subscribed to\n * - the \"Query Set Version,\" used to produce QuerySetModification messages\n * - the current auth token and \"Identity Version\"\n *\n * Local state does not include:\n * - query results (see RemoteQuerySet)\n * - locally made \"optimistic update\" modifications to query results (see OptimisticQueryResults)\n * - any query results at all\n **/\n\nimport { convexToJson, Value } from \"../../values/index.js\";\nimport {\n  AddQuery,\n  RemoveQuery,\n  QueryId,\n  QuerySetModification,\n  QuerySetVersion,\n  IdentityVersion,\n  Authenticate,\n  QueryJournal,\n  Transition,\n  AdminAuthentication,\n  UserIdentityAttributes,\n} from \"./protocol.js\";\nimport {\n  canonicalizeUdfPath,\n  QueryToken,\n  serializePathAndArgs,\n} from \"./udf_path_utils.js\";\n\ntype LocalQuery = {\n  id: QueryId;\n  canonicalizedUdfPath: string;\n  args: Record<string, Value>;\n  numSubscribers: number;\n  journal?: QueryJournal | undefined;\n  componentPath?: string | undefined;\n};\n\nexport type AuthState =\n  | {\n      tokenType: \"User\";\n      value: string;\n    }\n  | {\n      tokenType: \"Admin\";\n      value: string;\n      impersonating?: UserIdentityAttributes | undefined;\n    };\n\nexport class LocalSyncState {\n  private nextQueryId: QueryId;\n  private querySetVersion: QuerySetVersion;\n  private readonly querySet: Map<QueryToken, LocalQuery>;\n  private readonly queryIdToToken: Map<QueryId, QueryToken>;\n  private identityVersion: IdentityVersion;\n  private auth: AuthState | undefined;\n  private readonly outstandingQueriesOlderThanRestart: Set<QueryId>;\n  private outstandingAuthOlderThanRestart: boolean;\n  private paused: boolean;\n  private pendingQuerySetModifications: Map<QueryId, AddQuery | RemoveQuery>;\n\n  constructor() {\n    this.nextQueryId = 0;\n    this.querySetVersion = 0;\n    this.identityVersion = 0;\n    this.querySet = new Map();\n    this.queryIdToToken = new Map();\n    this.outstandingQueriesOlderThanRestart = new Set();\n    this.outstandingAuthOlderThanRestart = false;\n    this.paused = false;\n    this.pendingQuerySetModifications = new Map();\n  }\n\n  hasSyncedPastLastReconnect(): boolean {\n    return (\n      this.outstandingQueriesOlderThanRestart.size === 0 &&\n      !this.outstandingAuthOlderThanRestart\n    );\n  }\n\n  markAuthCompletion() {\n    this.outstandingAuthOlderThanRestart = false;\n  }\n\n  subscribe(\n    udfPath: string,\n    args: Record<string, Value>,\n    journal?: QueryJournal | undefined,\n    componentPath?: string | undefined,\n  ): {\n    queryToken: QueryToken;\n    modification: QuerySetModification | null;\n    unsubscribe: () => QuerySetModification | null;\n  } {\n    const canonicalizedUdfPath = canonicalizeUdfPath(udfPath);\n    const queryToken = serializePathAndArgs(canonicalizedUdfPath, args);\n\n    const existingEntry = this.querySet.get(queryToken);\n\n    if (existingEntry !== undefined) {\n      existingEntry.numSubscribers += 1;\n      return {\n        queryToken,\n        modification: null,\n        unsubscribe: () => this.removeSubscriber(queryToken),\n      };\n    } else {\n      const queryId = this.nextQueryId++;\n      const query: LocalQuery = {\n        id: queryId,\n        canonicalizedUdfPath,\n        args,\n        numSubscribers: 1,\n        journal,\n        componentPath,\n      };\n      this.querySet.set(queryToken, query);\n      this.queryIdToToken.set(queryId, queryToken);\n\n      const baseVersion = this.querySetVersion;\n      const newVersion = this.querySetVersion + 1;\n\n      const add: AddQuery = {\n        type: \"Add\",\n        queryId,\n        udfPath: canonicalizedUdfPath,\n        args: [convexToJson(args)],\n        journal,\n        componentPath,\n      };\n\n      if (this.paused) {\n        this.pendingQuerySetModifications.set(queryId, add);\n      } else {\n        this.querySetVersion = newVersion;\n      }\n\n      const modification: QuerySetModification = {\n        type: \"ModifyQuerySet\",\n        baseVersion,\n        newVersion,\n        modifications: [add],\n      };\n      return {\n        queryToken,\n        modification,\n        unsubscribe: () => this.removeSubscriber(queryToken),\n      };\n    }\n  }\n\n  transition(transition: Transition) {\n    for (const modification of transition.modifications) {\n      switch (modification.type) {\n        case \"QueryUpdated\":\n        case \"QueryFailed\": {\n          this.outstandingQueriesOlderThanRestart.delete(modification.queryId);\n          const journal = modification.journal;\n          if (journal !== undefined) {\n            const queryToken = this.queryIdToToken.get(modification.queryId);\n            // We may have already unsubscribed to this query by the time the server\n            // sends us the journal. If so, just ignore it.\n            if (queryToken !== undefined) {\n              this.querySet.get(queryToken)!.journal = journal;\n            }\n          }\n\n          break;\n        }\n        case \"QueryRemoved\": {\n          this.outstandingQueriesOlderThanRestart.delete(modification.queryId);\n          break;\n        }\n        default: {\n          // Enforce that the switch-case is exhaustive.\n          modification satisfies never;\n          throw new Error(`Invalid modification ${(modification as any).type}`);\n        }\n      }\n    }\n  }\n\n  queryId(udfPath: string, args: Record<string, Value>): QueryId | null {\n    const canonicalizedUdfPath = canonicalizeUdfPath(udfPath);\n    const queryToken = serializePathAndArgs(canonicalizedUdfPath, args);\n    const existingEntry = this.querySet.get(queryToken);\n    if (existingEntry !== undefined) {\n      return existingEntry.id;\n    }\n    return null;\n  }\n\n  isCurrentOrNewerAuthVersion(version: IdentityVersion): boolean {\n    return version >= this.identityVersion;\n  }\n\n  getAuth(): AuthState | undefined {\n    return this.auth;\n  }\n\n  setAuth(value: string): Authenticate {\n    this.auth = {\n      tokenType: \"User\" as const,\n      value: value,\n    };\n    const baseVersion = this.identityVersion;\n    if (!this.paused) {\n      this.identityVersion = baseVersion + 1;\n    }\n    return {\n      type: \"Authenticate\",\n      baseVersion: baseVersion,\n      ...this.auth,\n    };\n  }\n\n  setAdminAuth(\n    value: string,\n    actingAs?: UserIdentityAttributes,\n  ): AdminAuthentication {\n    const auth: typeof this.auth & {\n      tokenType: \"Admin\";\n    } = {\n      tokenType: \"Admin\",\n      value,\n      impersonating: actingAs,\n    };\n    this.auth = auth;\n    const baseVersion = this.identityVersion;\n    if (!this.paused) {\n      this.identityVersion = baseVersion + 1;\n    }\n    return {\n      type: \"Authenticate\",\n      baseVersion: baseVersion,\n      ...auth,\n    };\n  }\n\n  clearAuth(): Authenticate {\n    this.auth = undefined;\n    this.markAuthCompletion();\n    const baseVersion = this.identityVersion;\n    if (!this.paused) {\n      this.identityVersion = baseVersion + 1;\n    }\n    return {\n      type: \"Authenticate\",\n      tokenType: \"None\",\n      baseVersion: baseVersion,\n    };\n  }\n\n  hasAuth(): boolean {\n    return !!this.auth;\n  }\n\n  isNewAuth(value: string): boolean {\n    return this.auth?.value !== value;\n  }\n\n  queryPath(queryId: QueryId): string | null {\n    const pathAndArgs = this.queryIdToToken.get(queryId);\n    if (pathAndArgs) {\n      return this.querySet.get(pathAndArgs)!.canonicalizedUdfPath;\n    }\n    return null;\n  }\n\n  queryArgs(queryId: QueryId): Record<string, Value> | null {\n    const pathAndArgs = this.queryIdToToken.get(queryId);\n    if (pathAndArgs) {\n      return this.querySet.get(pathAndArgs)!.args;\n    }\n    return null;\n  }\n\n  queryToken(queryId: QueryId): QueryToken | null {\n    return this.queryIdToToken.get(queryId) ?? null;\n  }\n\n  queryJournal(queryToken: QueryToken): QueryJournal | undefined {\n    return this.querySet.get(queryToken)?.journal;\n  }\n\n  restart(): [QuerySetModification, (Authenticate | undefined)?] {\n    // Restart works whether we are paused or unpaused.\n    // The `this.pendingQuerySetModifications` is not used\n    // when restarting as the AddQuery and RemoveQuery are computed\n    // from scratch, based on the old remote query results, here.\n    this.unpause();\n\n    this.outstandingQueriesOlderThanRestart.clear();\n    const modifications = [];\n    for (const localQuery of this.querySet.values()) {\n      const add: AddQuery = {\n        type: \"Add\",\n        queryId: localQuery.id,\n        udfPath: localQuery.canonicalizedUdfPath,\n        args: [convexToJson(localQuery.args)],\n        journal: localQuery.journal,\n        componentPath: localQuery.componentPath,\n      };\n      modifications.push(add);\n\n      // Track all re-sent queries as outstanding so the backoff retry\n      // counter doesn't reset until the server has re-confirmed results\n      // for every active query.\n      this.outstandingQueriesOlderThanRestart.add(localQuery.id);\n    }\n    this.querySetVersion = 1;\n    const querySet: QuerySetModification = {\n      type: \"ModifyQuerySet\",\n      baseVersion: 0,\n      newVersion: 1,\n      modifications,\n    };\n    // If there's no auth, no need to send an update as the server will also start with an unknown identity.\n    if (!this.auth) {\n      this.identityVersion = 0;\n      return [querySet, undefined];\n    }\n    this.outstandingAuthOlderThanRestart = true;\n    const authenticate: Authenticate = {\n      type: \"Authenticate\",\n      baseVersion: 0,\n      ...this.auth,\n    };\n    this.identityVersion = 1;\n    return [querySet, authenticate];\n  }\n\n  pause() {\n    this.paused = true;\n  }\n\n  resume(): [QuerySetModification | undefined, Authenticate | undefined] {\n    const querySet: QuerySetModification | undefined =\n      this.pendingQuerySetModifications.size > 0\n        ? {\n            type: \"ModifyQuerySet\",\n            baseVersion: this.querySetVersion,\n            newVersion: ++this.querySetVersion,\n            modifications: Array.from(\n              this.pendingQuerySetModifications.values(),\n            ),\n          }\n        : undefined;\n    const authenticate: Authenticate | undefined =\n      this.auth !== undefined\n        ? {\n            type: \"Authenticate\",\n            baseVersion: this.identityVersion++,\n            ...this.auth,\n          }\n        : undefined;\n\n    this.unpause();\n\n    return [querySet, authenticate];\n  }\n\n  private unpause() {\n    this.paused = false;\n    this.pendingQuerySetModifications.clear();\n  }\n\n  private removeSubscriber(\n    queryToken: QueryToken,\n  ): QuerySetModification | null {\n    const localQuery = this.querySet.get(queryToken)!;\n\n    if (localQuery.numSubscribers > 1) {\n      localQuery.numSubscribers -= 1;\n      return null;\n    } else {\n      this.querySet.delete(queryToken);\n      this.queryIdToToken.delete(localQuery.id);\n      this.outstandingQueriesOlderThanRestart.delete(localQuery.id);\n      const baseVersion = this.querySetVersion;\n      const newVersion = this.querySetVersion + 1;\n      const remove: RemoveQuery = {\n        type: \"Remove\",\n        queryId: localQuery.id,\n      };\n      if (this.paused) {\n        if (this.pendingQuerySetModifications.has(localQuery.id)) {\n          this.pendingQuerySetModifications.delete(localQuery.id);\n        } else {\n          this.pendingQuerySetModifications.set(localQuery.id, remove);\n        }\n      } else {\n        this.querySetVersion = newVersion;\n      }\n      return {\n        type: \"ModifyQuerySet\",\n        baseVersion,\n        newVersion,\n        modifications: [remove],\n      };\n    }\n  }\n}\n", "import { jsonToConvex } from \"../../values/index.js\";\nimport { logForFunction, Logger } from \"../logging.js\";\nimport { Long } from \"../../vendor/long.js\";\nimport { FunctionResult } from \"./function_result.js\";\nimport {\n  ActionRequest,\n  ActionResponse,\n  ClientMessage,\n  MutationRequest,\n  MutationResponse,\n  RequestId,\n} from \"./protocol.js\";\n\ntype RequestStatus =\n  | {\n      status: \"Requested\" | \"NotSent\";\n      onResult: (result: FunctionResult) => void;\n      requestedAt: Date;\n    }\n  | {\n      status: \"Completed\";\n      result: FunctionResult;\n      onResolve: () => void;\n      ts: Long;\n    };\n\nexport class RequestManager {\n  private inflightRequests: Map<\n    RequestId,\n    {\n      message: MutationRequest | ActionRequest;\n      status: RequestStatus;\n    }\n  >;\n  private requestsOlderThanRestart: Set<RequestId>;\n  private inflightMutationsCount: number = 0;\n  private inflightActionsCount: number = 0;\n  constructor(\n    private readonly logger: Logger,\n    private readonly markConnectionStateDirty: () => void,\n  ) {\n    this.inflightRequests = new Map();\n    this.requestsOlderThanRestart = new Set();\n  }\n\n  request(\n    message: MutationRequest | ActionRequest,\n    sent: boolean,\n  ): Promise<FunctionResult> {\n    const result = new Promise<FunctionResult>((resolve) => {\n      const status = sent ? \"Requested\" : \"NotSent\";\n      this.inflightRequests.set(message.requestId, {\n        message,\n        status: { status, requestedAt: new Date(), onResult: resolve },\n      });\n\n      if (message.type === \"Mutation\") {\n        this.inflightMutationsCount++;\n      } else if (message.type === \"Action\") {\n        this.inflightActionsCount++;\n      }\n    });\n\n    this.markConnectionStateDirty();\n    return result;\n  }\n\n  /**\n   * Update the state after receiving a response.\n   *\n   * @returns A RequestId if the request is complete and its optimistic update\n   * can be dropped, null otherwise.\n   */\n  onResponse(\n    response: MutationResponse | ActionResponse,\n  ): { requestId: RequestId; result: FunctionResult } | null {\n    const requestInfo = this.inflightRequests.get(response.requestId);\n    if (requestInfo === undefined) {\n      // Annoyingly we can occasionally get responses to mutations that we're no\n      // longer tracking. One flow where this happens is:\n      // 1. Client sends mutation 1\n      // 2. Client gets response for mutation 1. The sever says that it was committed at ts=10.\n      // 3. Client is disconnected\n      // 4. Client reconnects and re-issues queries and this mutation.\n      // 5. Server sends transition message to ts=20\n      // 6. Client drops mutation because it's already been observed.\n      // 7. Client receives a second response for mutation 1 but doesn't know about it anymore.\n\n      // The right fix for this is probably to add a reconciliation phase on\n      // reconnection where we receive responses to all the mutations before\n      // the transition message so this flow could never happen (CX-1513).\n\n      // For now though, we can just ignore this message.\n      return null;\n    }\n\n    // Because `.restart()` re-requests completed requests, we may get some\n    // responses for requests that are already in the \"Completed\" state.\n    // We can safely ignore those because we've already notified the UI about\n    // their results.\n    if (requestInfo.status.status === \"Completed\") {\n      return null;\n    }\n\n    const udfType =\n      requestInfo.message.type === \"Mutation\" ? \"mutation\" : \"action\";\n    const udfPath = requestInfo.message.udfPath;\n\n    for (const line of response.logLines) {\n      logForFunction(this.logger, \"info\", udfType, udfPath, line);\n    }\n\n    const status = requestInfo.status;\n    let result: FunctionResult;\n    let onResolve;\n    if (response.success) {\n      result = {\n        success: true,\n        logLines: response.logLines,\n        value: jsonToConvex(response.result),\n      };\n      onResolve = () => status.onResult(result);\n    } else {\n      const errorMessage = response.result as string;\n      const { errorData } = response;\n      logForFunction(this.logger, \"error\", udfType, udfPath, errorMessage);\n      result = {\n        success: false,\n        errorMessage,\n        errorData:\n          errorData !== undefined ? jsonToConvex(errorData) : undefined,\n        logLines: response.logLines,\n      };\n      onResolve = () => status.onResult(result);\n    }\n\n    // We can resolve Mutation failures immediately since they don't have any\n    // side effects. Actions are intentionally decoupled from\n    // queries/mutations here on the sync protocol since they have different\n    // guarantees.\n    if (response.type === \"ActionResponse\" || !response.success) {\n      onResolve();\n      this.inflightRequests.delete(response.requestId);\n      this.requestsOlderThanRestart.delete(response.requestId);\n\n      if (requestInfo.message.type === \"Action\") {\n        this.inflightActionsCount--;\n      } else if (requestInfo.message.type === \"Mutation\") {\n        this.inflightMutationsCount--;\n      }\n\n      this.markConnectionStateDirty();\n      return { requestId: response.requestId, result };\n    }\n\n    // We have to wait to resolve the request promise until after we transition\n    // past this timestamp so clients can read their own writes.\n    requestInfo.status = {\n      status: \"Completed\",\n      result,\n      ts: response.ts,\n      onResolve,\n    };\n\n    return null;\n  }\n\n  // Remove and returns completed requests.\n  removeCompleted(ts: Long): Map<RequestId, FunctionResult> {\n    const completeRequests: Map<RequestId, FunctionResult> = new Map();\n    for (const [requestId, requestInfo] of this.inflightRequests.entries()) {\n      const status = requestInfo.status;\n      if (status.status === \"Completed\" && status.ts.lessThanOrEqual(ts)) {\n        status.onResolve();\n        completeRequests.set(requestId, status.result);\n\n        if (requestInfo.message.type === \"Mutation\") {\n          this.inflightMutationsCount--;\n        } else if (requestInfo.message.type === \"Action\") {\n          this.inflightActionsCount--;\n        }\n\n        this.inflightRequests.delete(requestId);\n        this.requestsOlderThanRestart.delete(requestId);\n      }\n    }\n    if (completeRequests.size > 0) {\n      this.markConnectionStateDirty();\n    }\n    return completeRequests;\n  }\n\n  restart(): ClientMessage[] {\n    // When we reconnect to the backend, re-request all requests that are safe\n    // to be resend.\n\n    this.requestsOlderThanRestart = new Set(this.inflightRequests.keys());\n    const allMessages = [];\n    for (const [requestId, value] of this.inflightRequests) {\n      if (value.status.status === \"NotSent\") {\n        value.status.status = \"Requested\";\n        allMessages.push(value.message);\n        continue;\n      }\n\n      if (value.message.type === \"Mutation\") {\n        // This includes ones that have already been completed because we still\n        // want to tell the backend to transition the client past the completed\n        // timestamp. This is safe since mutations are idempotent.\n        allMessages.push(value.message);\n      } else if (value.message.type === \"Action\") {\n        // Unlike mutations, actions are not idempotent. When we reconnect to the\n        // backend, we don't know if it is safe to resend in-flight actions, so we\n        // cancel them and consider them failed.\n        this.inflightRequests.delete(requestId);\n        this.requestsOlderThanRestart.delete(requestId);\n        this.inflightActionsCount--;\n        if (value.status.status === \"Completed\") {\n          throw new Error(\"Action should never be in 'Completed' state\");\n        }\n        value.status.onResult({\n          success: false,\n          errorMessage: \"Connection lost while action was in flight\",\n          logLines: [],\n        });\n      }\n    }\n    this.markConnectionStateDirty();\n    return allMessages;\n  }\n\n  resume(): ClientMessage[] {\n    const allMessages = [];\n    for (const [, value] of this.inflightRequests) {\n      if (value.status.status === \"NotSent\") {\n        value.status.status = \"Requested\";\n        allMessages.push(value.message);\n        continue;\n      }\n    }\n    return allMessages;\n  }\n\n  /**\n   * @returns true if there are any requests that have been requested but have\n   * not be completed yet.\n   */\n  hasIncompleteRequests(): boolean {\n    for (const requestInfo of this.inflightRequests.values()) {\n      if (requestInfo.status.status === \"Requested\") {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * @returns true if there are any inflight requests, including ones that have\n   * completed on the server, but have not been applied.\n   */\n  hasInflightRequests(): boolean {\n    return this.inflightRequests.size > 0;\n  }\n\n  /**\n   * @returns true if there are any inflight requests, that have been hanging around\n   * since prior to the most recent restart.\n   */\n  hasSyncedPastLastReconnect(): boolean {\n    return this.requestsOlderThanRestart.size === 0;\n  }\n\n  timeOfOldestInflightRequest(): Date | null {\n    if (this.inflightRequests.size === 0) {\n      return null;\n    }\n    let oldestInflightRequest = Date.now();\n    for (const request of this.inflightRequests.values()) {\n      if (request.status.status !== \"Completed\") {\n        if (request.status.requestedAt.getTime() < oldestInflightRequest) {\n          oldestInflightRequest = request.status.requestedAt.getTime();\n        }\n      }\n    }\n    return new Date(oldestInflightRequest);\n  }\n\n  /**\n   * @returns The number of mutations currently in flight.\n   */\n  inflightMutations(): number {\n    return this.inflightMutationsCount;\n  }\n\n  /**\n   * @returns The number of actions currently in flight.\n   */\n  inflightActions(): number {\n    return this.inflightActionsCount;\n  }\n}\n", "import {\n  FunctionArgs,\n  FunctionReturnType,\n  OptionalRestArgs,\n  getFunctionName,\n  FunctionReference,\n  FunctionReference_future,\n} from \"../../server/api.js\";\nimport { parseArgs } from \"../../common/index.js\";\nimport { Value } from \"../../values/index.js\";\nimport { createHybridErrorStacktrace, forwardData } from \"../logging.js\";\nimport { FunctionResult } from \"./function_result.js\";\nimport { OptimisticLocalStore } from \"./optimistic_updates.js\";\nimport { RequestId } from \"./protocol.js\";\nimport {\n  canonicalizeUdfPath,\n  QueryToken,\n  serializePathAndArgs,\n} from \"./udf_path_utils.js\";\nimport { ConvexError } from \"../../values/errors.js\";\n\n/**\n * An optimistic update function that has been curried over its arguments.\n */\ntype WrappedOptimisticUpdate = (locaQueryStore: OptimisticLocalStore) => void;\n\n/**\n * The implementation of `OptimisticLocalStore`.\n *\n * This class provides the interface for optimistic updates to modify query results.\n */\nclass OptimisticLocalStoreImpl implements OptimisticLocalStore {\n  // A references of the query results in OptimisticQueryResults\n  private readonly queryResults: QueryResultsMap;\n\n  // All of the queries modified by this class\n  readonly modifiedQueries: QueryToken[];\n\n  constructor(queryResults: QueryResultsMap) {\n    this.queryResults = queryResults;\n    this.modifiedQueries = [];\n  }\n\n  getQuery<\n    Query extends\n      | FunctionReference<\"query\">\n      | FunctionReference_future<\"query\">,\n  >(\n    query: Query,\n    ...args: OptionalRestArgs<Query>\n  ): undefined | FunctionReturnType<Query> {\n    const queryArgs = parseArgs(args[0]);\n    const name = getFunctionName(query);\n    const queryResult = this.queryResults.get(\n      serializePathAndArgs(name, queryArgs),\n    );\n    if (queryResult === undefined) {\n      return undefined;\n    }\n    return OptimisticLocalStoreImpl.queryValue(queryResult.result);\n  }\n\n  getAllQueries<\n    Query extends\n      | FunctionReference<\"query\">\n      | FunctionReference_future<\"query\">,\n  >(\n    query: Query,\n  ): {\n    args: FunctionArgs<Query>;\n    value: undefined | FunctionReturnType<Query>;\n  }[] {\n    const queriesWithName: {\n      args: FunctionArgs<Query>;\n      value: undefined | FunctionReturnType<Query>;\n    }[] = [];\n    const name = getFunctionName(query);\n    for (const queryResult of this.queryResults.values()) {\n      if (queryResult.udfPath === canonicalizeUdfPath(name)) {\n        queriesWithName.push({\n          args: queryResult.args as FunctionArgs<Query>,\n          value: OptimisticLocalStoreImpl.queryValue(queryResult.result),\n        });\n      }\n    }\n    return queriesWithName;\n  }\n\n  setQuery<\n    QueryReference extends\n      | FunctionReference<\"query\">\n      | FunctionReference_future<\"query\">,\n  >(\n    queryReference: QueryReference,\n    args: FunctionArgs<QueryReference>,\n    value: undefined | FunctionReturnType<QueryReference>,\n  ): void {\n    const queryArgs = parseArgs(args);\n    const name = getFunctionName(queryReference);\n    const queryToken = serializePathAndArgs(name, queryArgs);\n\n    let result: FunctionResult | undefined;\n    if (value === undefined) {\n      result = undefined;\n    } else {\n      result = {\n        success: true,\n        value,\n        // It's an optimistic update, so there are no function logs to show.\n        logLines: [],\n      };\n    }\n    const query: Query = {\n      udfPath: name,\n      args: queryArgs,\n      result,\n    };\n    this.queryResults.set(queryToken, query);\n    this.modifiedQueries.push(queryToken);\n  }\n\n  private static queryValue(\n    result: FunctionResult | undefined,\n  ): Value | undefined {\n    if (result === undefined) {\n      return undefined;\n    } else if (result.success) {\n      return result.value;\n    } else {\n      // If the query is an error state, just return `undefined` as though\n      // it's loading. Optimistic updates should already handle `undefined` well\n      // and there isn't a need to break the whole update because it tried\n      // to load a single query that errored.\n      return undefined;\n    }\n  }\n}\n\ntype OptimisticUpdateAndId = {\n  update: WrappedOptimisticUpdate;\n  mutationId: RequestId;\n};\n\ntype Query = {\n  // undefined means the query was set to be loading (undefined) in an optimistic update.\n  // Note that we can also have queries not present in the QueryResultMap\n  // at all because they are still loading from the server and have no optimistic update\n  // setting an optimistic value in advance.\n  result: FunctionResult | undefined;\n  udfPath: string;\n  args: Record<string, Value>;\n};\nexport type QueryResultsMap = Map<QueryToken, Query>;\n\ntype ChangedQueries = QueryToken[];\n\n/**\n * A view of all of our query results with optimistic updates applied on top.\n */\nexport class OptimisticQueryResults {\n  private queryResults: QueryResultsMap;\n  private optimisticUpdates: OptimisticUpdateAndId[];\n\n  constructor() {\n    this.queryResults = new Map();\n    this.optimisticUpdates = [];\n  }\n\n  /**\n   * Apply all optimistic updates on top of server query results\n   */\n  ingestQueryResultsFromServer(\n    serverQueryResults: QueryResultsMap,\n    optimisticUpdatesToDrop: Set<RequestId>,\n  ): ChangedQueries {\n    this.optimisticUpdates = this.optimisticUpdates.filter((updateAndId) => {\n      return !optimisticUpdatesToDrop.has(updateAndId.mutationId);\n    });\n\n    const oldQueryResults = this.queryResults;\n    this.queryResults = new Map(serverQueryResults);\n    const localStore = new OptimisticLocalStoreImpl(this.queryResults);\n    for (const updateAndId of this.optimisticUpdates) {\n      updateAndId.update(localStore);\n    }\n\n    // To find the changed queries, just do a shallow comparison\n    // TODO(CX-733): Change this so we avoid unnecessary rerenders\n    const changedQueries: ChangedQueries = [];\n    for (const [queryToken, query] of this.queryResults) {\n      const oldQuery = oldQueryResults.get(queryToken);\n      if (oldQuery === undefined || oldQuery.result !== query.result) {\n        changedQueries.push(queryToken);\n      }\n    }\n\n    return changedQueries;\n  }\n\n  applyOptimisticUpdate(\n    update: WrappedOptimisticUpdate,\n    mutationId: RequestId,\n  ): ChangedQueries {\n    // Apply the update to our store\n    this.optimisticUpdates.push({\n      update,\n      mutationId,\n    });\n    const localStore = new OptimisticLocalStoreImpl(this.queryResults);\n    update(localStore);\n\n    // Notify about any query results that changed\n    // TODO(CX-733): Change this so we avoid unnecessary rerenders\n    return localStore.modifiedQueries;\n  }\n\n  /**\n   * \"Raw\" with respect to errors vs values, but query results still have\n   * optimistic updates applied.\n   *\n   * @internal\n   */\n  rawQueryResult(queryToken: QueryToken): FunctionResult | undefined {\n    const query = this.queryResults.get(queryToken);\n    if (query === undefined) {\n      return undefined;\n    }\n    return query.result;\n  }\n\n  queryResult(queryToken: QueryToken): Value | undefined {\n    const query = this.queryResults.get(queryToken);\n    if (query === undefined) {\n      return undefined;\n    }\n    const result = query.result;\n    if (result === undefined) {\n      return undefined;\n    } else if (result.success) {\n      return result.value;\n    } else {\n      if (result.errorData !== undefined) {\n        throw forwardData(\n          result,\n          new ConvexError(\n            createHybridErrorStacktrace(\"query\", query.udfPath, result),\n          ),\n        );\n      }\n      throw new Error(\n        createHybridErrorStacktrace(\"query\", query.udfPath, result),\n      );\n    }\n  }\n\n  hasQueryResult(queryToken: QueryToken): boolean {\n    return this.queryResults.get(queryToken) !== undefined;\n  }\n\n  /**\n   * @internal\n   */\n  queryLogs(queryToken: QueryToken): string[] | undefined {\n    const query = this.queryResults.get(queryToken);\n    return query?.result?.logLines;\n  }\n}\n", "// Implements an unsigned long.\n// This is a subset of https://github.com/dcodeIO/Long.js,\n// vendored to decrease bundle size.\n// Copyright Daniel Wirtz <dcode@dcode.io>\n// License: Apache Version 2.0\n/*\n\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2023 Daniel Wirtz <dcode@dcode.io>\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n*/\n\n// This works... but don't try to compare one to a real Long.js Long!\n// For internal use only.\n// `| 0` assures the runtime that we are using integer arithmetic\nexport class Long {\n  low: number;\n  high: number;\n  __isUnsignedLong__: boolean;\n\n  static isLong(obj: Long) {\n    return (obj && obj.__isUnsignedLong__) === true;\n  }\n\n  constructor(low: number, high: number) {\n    this.low = low | 0;\n    this.high = high | 0;\n    this.__isUnsignedLong__ = true;\n  }\n\n  // prettier-ignore\n  static fromBytesLE(bytes: number[]): Long {\n    return new Long(\n      bytes[0] |\n      bytes[1] << 8 |\n      bytes[2] << 16 |\n      bytes[3] << 24,\n      bytes[4] |\n      bytes[5] << 8 |\n      bytes[6] << 16 |\n      bytes[7] << 24,\n    );\n  }\n\n  // prettier-ignore\n  toBytesLE() {\n    const hi = this.high;\n    const lo = this.low;\n    return [\n      lo & 0xff,\n      lo >>> 8 & 0xff,\n      lo >>> 16 & 0xff,\n      lo >>> 24,\n      hi & 0xff,\n      hi >>> 8 & 0xff,\n      hi >>> 16 & 0xff,\n      hi >>> 24\n    ];\n  }\n\n  static fromNumber(value: number) {\n    if (isNaN(value)) return UZERO;\n    if (value < 0) return UZERO;\n    if (value >= TWO_PWR_64_DBL) return MAX_UNSIGNED_VALUE;\n    return new Long(value % TWO_PWR_32_DBL | 0, (value / TWO_PWR_32_DBL) | 0);\n  }\n\n  toString() {\n    return (\n      BigInt(this.high) * BigInt(TWO_PWR_32_DBL) +\n      BigInt(this.low)\n    ).toString();\n  }\n\n  equals(other: Long) {\n    if (!Long.isLong(other)) other = Long.fromValue(other);\n    if (this.high >>> 31 === 1 && other.high >>> 31 === 1) return false;\n    return this.high === other.high && this.low === other.low;\n  }\n\n  notEquals(other: Long) {\n    return !this.equals(other);\n  }\n\n  comp(other: Long) {\n    if (!Long.isLong(other)) other = Long.fromValue(other);\n    if (this.equals(other)) return 0;\n    return other.high >>> 0 > this.high >>> 0 ||\n      (other.high === this.high && other.low >>> 0 > this.low >>> 0)\n      ? -1\n      : 1;\n  }\n\n  lessThanOrEqual(other: Long) {\n    return this.comp(/* validates */ other) <= 0;\n  }\n\n  static fromValue(val: any) {\n    if (typeof val === \"number\") return Long.fromNumber(val);\n    // Throws for non-objects, converts non-instanceof Long:\n    return new Long(val.low, val.high);\n  }\n}\n\nconst UZERO = new Long(0, 0);\nconst TWO_PWR_16_DBL = 1 << 16;\nconst TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\nconst TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\nconst MAX_UNSIGNED_VALUE = new Long(0xffffffff | 0, 0xffffffff | 0);\n", "import { jsonToConvex } from \"../../values/index.js\";\nimport { Long } from \"../../vendor/long.js\";\nimport { logForFunction, Logger } from \"../logging.js\";\nimport { QueryId, StateVersion, Transition } from \"./protocol.js\";\nimport { FunctionResult } from \"./function_result.js\";\n\n/**\n * A represention of the query results we've received on the current WebSocket\n * connection.\n *\n * Queries you won't find here include:\n * - queries which have been requested, but no query transition has been received yet for\n * - queries which are populated only though active optimistic updates, but are not subscribed to\n * - queries which have already been removed by the server (which it shouldn't do unless that's\n *   been requested by the client)\n */\nexport class RemoteQuerySet {\n  private version: StateVersion;\n  private readonly remoteQuerySet: Map<QueryId, FunctionResult>;\n  private readonly queryPath: (queryId: QueryId) => string | null;\n  private readonly logger: Logger;\n\n  constructor(queryPath: (queryId: QueryId) => string | null, logger: Logger) {\n    this.version = { querySet: 0, ts: Long.fromNumber(0), identity: 0 };\n    this.remoteQuerySet = new Map();\n    this.queryPath = queryPath;\n    this.logger = logger;\n  }\n\n  transition(transition: Transition): void {\n    const start = transition.startVersion;\n    if (\n      this.version.querySet !== start.querySet ||\n      this.version.ts.notEquals(start.ts) ||\n      this.version.identity !== start.identity\n    ) {\n      throw new Error(\n        `Invalid start version: ${start.ts.toString()}:${start.querySet}:${start.identity}, transitioning from ${this.version.ts.toString()}:${this.version.querySet}:${this.version.identity}`,\n      );\n    }\n    for (const modification of transition.modifications) {\n      switch (modification.type) {\n        case \"QueryUpdated\": {\n          const queryPath = this.queryPath(modification.queryId);\n          if (queryPath) {\n            for (const line of modification.logLines) {\n              logForFunction(this.logger, \"info\", \"query\", queryPath, line);\n            }\n          }\n          const value = jsonToConvex(modification.value ?? null);\n          this.remoteQuerySet.set(modification.queryId, {\n            success: true,\n            value,\n            logLines: modification.logLines,\n          });\n          break;\n        }\n        case \"QueryFailed\": {\n          const queryPath = this.queryPath(modification.queryId);\n          if (queryPath) {\n            for (const line of modification.logLines) {\n              logForFunction(this.logger, \"info\", \"query\", queryPath, line);\n            }\n          }\n          const { errorData } = modification;\n          this.remoteQuerySet.set(modification.queryId, {\n            success: false,\n            errorMessage: modification.errorMessage,\n            errorData:\n              errorData !== undefined ? jsonToConvex(errorData) : undefined,\n            logLines: modification.logLines,\n          });\n          break;\n        }\n        case \"QueryRemoved\": {\n          this.remoteQuerySet.delete(modification.queryId);\n          break;\n        }\n        default: {\n          // Enforce that the switch-case is exhaustive.\n          modification satisfies never;\n          throw new Error(`Invalid modification ${(modification as any).type}`);\n        }\n      }\n    }\n    this.version = transition.endVersion;\n  }\n\n  remoteQueryResults(): Map<QueryId, FunctionResult> {\n    return this.remoteQuerySet;\n  }\n\n  timestamp(): Long {\n    return this.version.ts;\n  }\n}\n", "import type { UserIdentityAttributes } from \"../../server/authentication.js\";\nexport type { UserIdentityAttributes } from \"../../server/authentication.js\";\nimport { JSONValue, Base64 } from \"../../values/index.js\";\nimport { Long } from \"../../vendor/long.js\";\n\n/**\n * Shared schema\n */\n\nexport function u64ToLong(encoded: EncodedU64): U64 {\n  const integerBytes = Base64.toByteArray(encoded);\n  return Long.fromBytesLE(Array.from(integerBytes));\n}\n\nexport function longToU64(raw: U64): EncodedU64 {\n  const integerBytes = new Uint8Array(raw.toBytesLE());\n  return Base64.fromByteArray(integerBytes);\n}\n\nexport function parseServerMessage(\n  encoded: EncodedServerMessage,\n): WireServerMessage {\n  switch (encoded.type) {\n    case \"FatalError\":\n    case \"AuthError\":\n    case \"ActionResponse\":\n    case \"TransitionChunk\":\n    case \"Ping\": {\n      return { ...encoded };\n    }\n    case \"MutationResponse\": {\n      if (encoded.success) {\n        return { ...encoded, ts: u64ToLong(encoded.ts) };\n      } else {\n        return { ...encoded };\n      }\n    }\n    case \"Transition\": {\n      return {\n        ...encoded,\n        startVersion: {\n          ...encoded.startVersion,\n          ts: u64ToLong(encoded.startVersion.ts),\n        },\n        endVersion: {\n          ...encoded.endVersion,\n          ts: u64ToLong(encoded.endVersion.ts),\n        },\n      };\n    }\n    default: {\n      encoded satisfies never;\n    }\n  }\n  return undefined as never;\n}\n\nexport function encodeClientMessage(\n  message: ClientMessage,\n): EncodedClientMessage {\n  switch (message.type) {\n    case \"Authenticate\":\n    case \"ModifyQuerySet\":\n    case \"Mutation\":\n    case \"Action\":\n    case \"Event\": {\n      return { ...message };\n    }\n    case \"Connect\": {\n      if (message.maxObservedTimestamp !== undefined) {\n        return {\n          ...message,\n          maxObservedTimestamp: longToU64(message.maxObservedTimestamp),\n        };\n      } else {\n        return { ...message, maxObservedTimestamp: undefined };\n      }\n    }\n    default: {\n      message satisfies never;\n    }\n  }\n  return undefined as never;\n}\n\ntype U64 = Long;\ntype EncodedU64 = string;\n\n/**\n * Unique nonnegative integer identifying a single query.\n */\nexport type QueryId = number; // nonnegative int\n\nexport type QuerySetVersion = number; // nonnegative int\n\nexport type RequestId = number; // nonnegative int\n\nexport type IdentityVersion = number; // nonnegative int\n\n/**\n * A serialized representation of decisions made during a query's execution.\n *\n * A journal is produced when a query function first executes and is re-used\n * when a query is re-executed.\n *\n * Currently this is used to store pagination end cursors to ensure\n * that pages of paginated queries will always end at the same cursor. This\n * enables gapless, reactive pagination.\n *\n * `null` is used to represent empty journals.\n * @public\n */\nexport type QueryJournal = string | null;\n\n/**\n * Client message schema\n */\n\ntype Connect = {\n  type: \"Connect\";\n  sessionId: string;\n  connectionCount: number;\n  lastCloseReason: string | null;\n  maxObservedTimestamp?: TS | undefined;\n  clientTs: number;\n};\n\nexport type AddQuery = {\n  type: \"Add\";\n  queryId: QueryId;\n  udfPath: string;\n  args: JSONValue[];\n  journal?: QueryJournal | undefined;\n  /**\n   * @internal\n   */\n  componentPath?: string | undefined;\n};\n\nexport type RemoveQuery = {\n  type: \"Remove\";\n  queryId: QueryId;\n};\n\nexport type QuerySetModification = {\n  type: \"ModifyQuerySet\";\n  baseVersion: QuerySetVersion;\n  newVersion: QuerySetVersion;\n  modifications: (AddQuery | RemoveQuery)[];\n};\n\nexport type MutationRequest = {\n  type: \"Mutation\";\n  requestId: RequestId;\n  udfPath: string;\n  args: JSONValue[];\n  // Execute the mutation on a specific component.\n  // Only admin auth is allowed to run mutations on non-root components.\n  componentPath?: string | undefined;\n};\n\nexport type ActionRequest = {\n  type: \"Action\";\n  requestId: RequestId;\n  udfPath: string;\n  args: JSONValue[];\n  // Execute the action on a specific component.\n  // Only admin auth is allowed to run actions on non-root components.\n  componentPath?: string | undefined;\n};\n\nexport type AdminAuthentication = {\n  type: \"Authenticate\";\n  tokenType: \"Admin\";\n  value: string;\n  baseVersion: IdentityVersion;\n  impersonating?: UserIdentityAttributes | undefined;\n};\n\nexport type Authenticate =\n  | AdminAuthentication\n  | {\n      type: \"Authenticate\";\n      tokenType: \"User\";\n      value: string;\n      baseVersion: IdentityVersion;\n    }\n  | {\n      type: \"Authenticate\";\n      tokenType: \"None\";\n      baseVersion: IdentityVersion;\n    };\n\nexport type Event = {\n  type: \"Event\";\n  eventType: string;\n  event: any;\n};\nexport type ClientMessage =\n  | Connect\n  | Authenticate\n  | QuerySetModification\n  | MutationRequest\n  | ActionRequest\n  | Event;\n\ntype EncodedConnect = Omit<Connect, \"maxObservedTimestamp\"> & {\n  maxObservedTimestamp?: EncodedTS | undefined;\n};\n\n// It's not a big deal to add `| undefined` to any optional properties here because\n// these messages are bound for JSON.stringify() serialization, which removes properties\n// that are undefined.\ntype EncodedClientMessage =\n  | EncodedConnect\n  | Authenticate\n  | QuerySetModification\n  | MutationRequest\n  | ActionRequest\n  | Event;\n\n/**\n * Server message schema\n */\nexport type TS = U64;\ntype EncodedTS = EncodedU64;\ntype LogLines = string[];\n\nexport type StateVersion = {\n  querySet: QuerySetVersion;\n  ts: TS;\n  identity: IdentityVersion;\n};\ntype EncodedStateVersion = Omit<StateVersion, \"ts\"> & { ts: EncodedTS };\n\ntype StateModification =\n  | {\n      type: \"QueryUpdated\";\n      queryId: QueryId;\n      value: JSONValue;\n      logLines: LogLines;\n      journal: QueryJournal;\n    }\n  | {\n      type: \"QueryFailed\";\n      queryId: QueryId;\n      errorMessage: string;\n      logLines: LogLines;\n      errorData: JSONValue;\n      journal: QueryJournal;\n    }\n  | {\n      type: \"QueryRemoved\";\n      queryId: QueryId;\n    };\n\nexport type Transition = {\n  type: \"Transition\";\n  startVersion: StateVersion;\n  endVersion: StateVersion;\n  modifications: StateModification[];\n  clientClockSkew?: number;\n  serverTs?: number;\n};\n\nexport type TransitionChunk = {\n  type: \"TransitionChunk\";\n  chunk: string;\n  partNumber: number;\n  totalParts: number;\n  transitionId: string;\n};\n\ntype MutationSuccess = {\n  type: \"MutationResponse\";\n  requestId: RequestId;\n  success: true;\n  result: JSONValue;\n  ts: TS;\n  logLines: LogLines;\n};\ntype MutationFailed = {\n  type: \"MutationResponse\";\n  requestId: RequestId;\n  success: false;\n  result: string;\n  logLines: LogLines;\n  errorData?: JSONValue;\n};\nexport type MutationResponse = MutationSuccess | MutationFailed;\ntype ActionSuccess = {\n  type: \"ActionResponse\";\n  requestId: RequestId;\n  success: true;\n  result: JSONValue;\n  logLines: LogLines;\n};\ntype ActionFailed = {\n  type: \"ActionResponse\";\n  requestId: RequestId;\n  success: false;\n  result: string;\n  logLines: LogLines;\n  errorData?: JSONValue;\n};\nexport type ActionResponse = ActionSuccess | ActionFailed;\nexport type AuthError = {\n  type: \"AuthError\";\n  error: string;\n  baseVersion: IdentityVersion;\n  // True if this error is in response to processing a new `Authenticate` message.\n  // Other AuthErrors may occur due to executing a function with expired auth and\n  // should be handled differently.\n  authUpdateAttempted: boolean;\n};\ntype FatalError = {\n  type: \"FatalError\";\n  error: string;\n};\ntype Ping = {\n  type: \"Ping\";\n};\n\n// Server Messages without the messages only visible to WebSocketManager\nexport type ServerMessage =\n  | Transition\n  | MutationResponse\n  | ActionResponse\n  | FatalError\n  | AuthError;\n\nexport type WireServerMessage =\n  | Transition\n  | TransitionChunk\n  | MutationResponse\n  | ActionResponse\n  | FatalError\n  | AuthError\n  | Ping;\n\ntype EncodedTransition = Omit<Transition, \"startVersion\" | \"endVersion\"> & {\n  startVersion: EncodedStateVersion;\n  endVersion: EncodedStateVersion;\n};\ntype EncodedMutationSuccess = Omit<MutationSuccess, \"ts\"> & { ts: EncodedTS };\ntype EncodedMutationResponse = MutationFailed | EncodedMutationSuccess;\n\ntype EncodedServerMessage =\n  | EncodedTransition\n  | TransitionChunk\n  | EncodedMutationResponse\n  | ActionResponse\n  | FatalError\n  | AuthError\n  | Ping;\n", "import { Logger } from \"../logging.js\";\nimport {\n  ClientMessage,\n  encodeClientMessage,\n  parseServerMessage,\n  ServerMessage,\n  Transition,\n  TransitionChunk,\n} from \"./protocol.js\";\n\nconst CLOSE_NORMAL = 1000;\nconst CLOSE_GOING_AWAY = 1001;\nconst CLOSE_NO_STATUS = 1005;\n/** Convex-specific close code representing a \"404 Not Found\".\n * The edge Onramp accepts websocket upgrades before confirming that the\n * intended destination exists, so this code is sent once we've discovered that\n * the destination does not exist.\n */\nconst CLOSE_NOT_FOUND = 4040;\n\n/**\n * The various states our WebSocket can be in:\n *\n * - \"disconnected\": We don't have a WebSocket, but plan to create one.\n * - \"connecting\": We have created the WebSocket and are waiting for the\n *   `onOpen` callback.\n * - \"ready\": We have an open WebSocket.\n * - \"stopped\": The WebSocket was closed and a new one can be created via `.restart()`.\n * - \"terminated\": We have closed the WebSocket and will never create a new one.\n *\n *\n * WebSocket State Machine\n * -----------------------\n * initialState: disconnected\n * validTransitions:\n *   disconnected:\n *     new WebSocket() -> connecting\n *     terminate() -> terminated\n *   connecting:\n *     onopen -> ready\n *     close() -> disconnected\n *     terminate() -> terminated\n *   ready:\n *     close() -> disconnected\n *     stop() -> stopped\n *     terminate() -> terminated\n *   stopped:\n *     restart() -> connecting\n *     terminate() -> terminated\n * terminalStates:\n *   terminated\n *\n *\n *\n *                                        \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n *                \u250C\u2500\u2500\u2500\u2500terminate()\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2502  disconnected  \u2502\u25C0\u2500\u2510\n *                \u2502                       \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502\n *                \u25BC                            \u2502       \u25B2      \u2502\n *       \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510           new WebSocket()  \u2502      \u2502\n *    \u250C\u2500\u25B6\u2502   terminated   \u2502\u25C0\u2500\u2500\u2500\u2500\u2500\u2500\u2510            \u2502       \u2502      \u2502\n *    \u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518       \u2502            \u2502       \u2502      \u2502\n *    \u2502           \u25B2          terminate()       \u2502    close() close()\n *    \u2502      terminate()          \u2502            \u2502       \u2502      \u2502\n *    \u2502           \u2502               \u2502            \u25BC       \u2502      \u2502\n *    \u2502  \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510       \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502\n *    \u2502  \u2502    stopped     \u2502\u2500\u2500restart()\u2500\u2500\u2500\u25B6\u2502   connecting   \u2502  \u2502\n *    \u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518               \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502\n *    \u2502           \u25B2                                \u2502          \u2502\n *    \u2502           \u2502                               onopen      \u2502\n *    \u2502           \u2502                                \u2502          \u2502\n *    \u2502           \u2502                                \u25BC          \u2502\n * terminate()    \u2502                       \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502\n *    \u2502           \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500stop()\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2502     ready      \u2502\u2500\u2500\u2518\n *    \u2502                                   \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n *    \u2502                                            \u2502\n *    \u2502                                            \u2502\n *    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n *\n * The `connecting` and `ready` state have a sub-state-machine for pausing.\n */\n\ntype Socket =\n  | { state: \"disconnected\" }\n  | { state: \"connecting\"; ws: WebSocket; paused: \"yes\" | \"no\" }\n  | { state: \"ready\"; ws: WebSocket; paused: \"yes\" | \"no\" | \"uninitialized\" }\n  | { state: \"stopped\" }\n  | { state: \"terminated\" };\n\nexport type ReconnectMetadata = {\n  connectionCount: number;\n  lastCloseReason: string | null;\n  clientTs: number;\n};\n\nexport type OnMessageResponse = {\n  hasSyncedPastLastReconnect: boolean;\n};\n\nlet firstTime: number | undefined;\nfunction monotonicMillis() {\n  if (firstTime === undefined) {\n    firstTime = Date.now();\n  }\n  if (typeof performance === \"undefined\" || !performance.now) {\n    return Date.now();\n  }\n  return Math.round(firstTime + performance.now());\n}\n\nfunction prettyNow() {\n  return `t=${Math.round((monotonicMillis() - firstTime!) / 100) / 10}s`;\n}\n\nconst serverDisconnectErrors = {\n  // A known error, e.g. during a restart or push\n  InternalServerError: { timeout: 1000 },\n  // ErrorMetadata::overloaded() messages that we realy should back off\n  SubscriptionsWorkerFullError: { timeout: 3000 },\n  TooManyConcurrentRequests: { timeout: 3000 },\n  CommitterFullError: { timeout: 3000 },\n  AwsTooManyRequestsException: { timeout: 3000 },\n  ExecuteFullError: { timeout: 3000 },\n  SystemTimeoutError: { timeout: 3000 },\n  ExpiredInQueue: { timeout: 3000 },\n  // ErrorMetadata::feature_temporarily_unavailable() that typically indicate a deploy just happened\n  VectorIndexesUnavailable: { timeout: 1000 },\n  SearchIndexesUnavailable: { timeout: 1000 },\n  TableSummariesUnavailable: { timeout: 1000 },\n  // More ErrorMetadata::overloaded()\n  VectorIndexTooLarge: { timeout: 3000 },\n  SearchIndexTooLarge: { timeout: 3000 },\n  TooManyWritesInTimePeriod: { timeout: 3000 },\n} as const satisfies Record<string, { timeout: number }>;\n\ntype ServerDisconnectError = keyof typeof serverDisconnectErrors | \"Unknown\";\n\nfunction classifyDisconnectError(s?: string): ServerDisconnectError {\n  if (s === undefined) return \"Unknown\";\n  // startsWith so more info could be at the end (although currently there isn't)\n\n  for (const prefix of Object.keys(\n    serverDisconnectErrors,\n  ) as ServerDisconnectError[]) {\n    if (s.startsWith(prefix)) {\n      return prefix;\n    }\n  }\n  return \"Unknown\";\n}\n\n/**\n * A wrapper around a websocket that handles errors, reconnection, and message\n * parsing.\n */\nexport class WebSocketManager {\n  private socket: Socket;\n\n  private connectionCount: number;\n  private _hasEverConnected: boolean = false;\n  private lastCloseReason:\n    | \"InitialConnect\"\n    | \"OnCloseInvoked\"\n    | (string & {}) // a full serverErrorReason (not just the prefix) or a new one\n    | null;\n\n  // State for assembling the split-up Transition currently being received.\n  private transitionChunkBuffer: {\n    chunks: string[];\n    totalParts: number;\n    transitionId: string;\n  } | null = null;\n\n  /** Upon HTTPS/WSS failure, the first jittered backoff duration, in ms. */\n  private readonly defaultInitialBackoff: number;\n\n  /** We backoff exponentially, but we need to cap that--this is the jittered max. */\n  private readonly maxBackoff: number;\n\n  /** How many times have we failed consecutively? */\n  private retries: number;\n\n  /** How long before lack of server response causes us to initiate a reconnect,\n   * in ms */\n  private readonly serverInactivityThreshold: number;\n\n  private reconnectDueToServerInactivityTimeout: ReturnType<\n    typeof setTimeout\n  > | null;\n\n  /** Scheduled reconnect state: timeout handle and timing info */\n  private scheduledReconnect: {\n    timeout: ReturnType<typeof setTimeout>;\n    scheduledAt: number;\n    backoffMs: number;\n  } | null = null;\n\n  private networkOnlineHandler: (() => void) | null = null;\n\n  /** Pending event to send after reconnecting due to network recovery */\n  private pendingNetworkRecoveryInfo: { timeSavedMs: number } | null = null;\n\n  private readonly uri: string;\n  private readonly onOpen: (reconnectMetadata: ReconnectMetadata) => void;\n  private readonly onResume: () => void;\n  private readonly onMessage: (message: ServerMessage) => OnMessageResponse;\n  private readonly webSocketConstructor: typeof WebSocket;\n  private readonly logger: Logger;\n  private readonly onServerDisconnectError:\n    | ((message: string) => void)\n    | undefined;\n\n  constructor(\n    uri: string,\n    callbacks: {\n      onOpen: (reconnectMetadata: ReconnectMetadata) => void;\n      onResume: () => void;\n      onMessage: (message: ServerMessage) => OnMessageResponse;\n      onServerDisconnectError?: ((message: string) => void) | undefined;\n    },\n    webSocketConstructor: typeof WebSocket,\n    logger: Logger,\n    private readonly markConnectionStateDirty: () => void,\n    private readonly debug: boolean,\n  ) {\n    this.webSocketConstructor = webSocketConstructor;\n    this.socket = { state: \"disconnected\" };\n    this.connectionCount = 0;\n    this.lastCloseReason = \"InitialConnect\";\n\n    // backoff for unknown errors\n    this.defaultInitialBackoff = 1000;\n    this.maxBackoff = 16000;\n    this.retries = 0;\n\n    // Ping messages (sync protocol Pings, not WebSocket protocol Pings) are\n    // sent every 15s in the absence of other messages. But a single large\n    // Transition or other downstream message can hog the line so this\n    // threshold is set higher to prevent clients from giving up.\n    this.serverInactivityThreshold = 60000;\n    this.reconnectDueToServerInactivityTimeout = null;\n\n    this.uri = uri;\n    this.onOpen = callbacks.onOpen;\n    this.onResume = callbacks.onResume;\n    this.onMessage = callbacks.onMessage;\n    this.onServerDisconnectError = callbacks.onServerDisconnectError;\n    this.logger = logger;\n\n    // Set up network online event listener\n    this.setupNetworkListener();\n\n    this.connect();\n  }\n\n  private setSocketState(state: Socket) {\n    this.socket = state;\n    this._logVerbose(\n      `socket state changed: ${this.socket.state}, paused: ${\n        \"paused\" in this.socket ? this.socket.paused : undefined\n      }`,\n    );\n    this.markConnectionStateDirty();\n  }\n\n  private setupNetworkListener() {\n    // Only set up listener if we're in a browser environment with addEventListener\n    // (React Native has window but not addEventListener)\n    if (\n      typeof window === \"undefined\" ||\n      typeof window.addEventListener !== \"function\"\n    ) {\n      return;\n    }\n    // Avoid registering duplicate listeners\n    if (this.networkOnlineHandler !== null) {\n      return;\n    }\n\n    this.networkOnlineHandler = () => {\n      this._logVerbose(\"network online event detected\");\n      this.tryReconnectImmediately();\n    };\n\n    window.addEventListener(\"online\", this.networkOnlineHandler);\n    this._logVerbose(\"network online event listener registered\");\n  }\n\n  private cleanupNetworkListener() {\n    if (\n      this.networkOnlineHandler &&\n      typeof window !== \"undefined\" &&\n      typeof window.removeEventListener === \"function\"\n    ) {\n      window.removeEventListener(\"online\", this.networkOnlineHandler);\n      this.networkOnlineHandler = null;\n      this._logVerbose(\"network online event listener removed\");\n    }\n  }\n\n  private assembleTransition(chunk: TransitionChunk): Transition | null {\n    if (\n      chunk.partNumber < 0 ||\n      chunk.partNumber >= chunk.totalParts ||\n      chunk.totalParts === 0 ||\n      (this.transitionChunkBuffer &&\n        (this.transitionChunkBuffer.totalParts !== chunk.totalParts ||\n          this.transitionChunkBuffer.transitionId !== chunk.transitionId))\n    ) {\n      // Throwing an error doesn't crash the client, so clear the buffer.\n      this.transitionChunkBuffer = null;\n      throw new Error(\"Invalid TransitionChunk\");\n    }\n\n    if (this.transitionChunkBuffer === null) {\n      this.transitionChunkBuffer = {\n        chunks: [],\n        totalParts: chunk.totalParts,\n        transitionId: chunk.transitionId,\n      };\n    }\n\n    if (chunk.partNumber !== this.transitionChunkBuffer.chunks.length) {\n      // Throwing an error doesn't crash the client, so clear the buffer.\n      const expectedLength = this.transitionChunkBuffer.chunks.length;\n      this.transitionChunkBuffer = null;\n      throw new Error(\n        `TransitionChunk received out of order: expected part ${expectedLength}, got ${chunk.partNumber}`,\n      );\n    }\n\n    this.transitionChunkBuffer.chunks.push(chunk.chunk);\n\n    if (this.transitionChunkBuffer.chunks.length === chunk.totalParts) {\n      const fullJson = this.transitionChunkBuffer.chunks.join(\"\");\n      this.transitionChunkBuffer = null;\n\n      const transition = parseServerMessage(JSON.parse(fullJson));\n      if (transition.type !== \"Transition\") {\n        throw new Error(\n          `Expected Transition, got ${transition.type} after assembling chunks`,\n        );\n      }\n      return transition;\n    }\n\n    return null;\n  }\n\n  private connect() {\n    if (this.socket.state === \"terminated\") {\n      return;\n    }\n    if (\n      this.socket.state !== \"disconnected\" &&\n      this.socket.state !== \"stopped\"\n    ) {\n      throw new Error(\n        \"Didn't start connection from disconnected state: \" + this.socket.state,\n      );\n    }\n\n    const ws = new this.webSocketConstructor(this.uri);\n    this._logVerbose(\"constructed WebSocket\");\n    this.setSocketState({\n      state: \"connecting\",\n      ws,\n      paused: \"no\",\n    });\n\n    // Kick off server inactivity timer before WebSocket connection is established\n    // so we can detect cases where handshake fails.\n    // The `onopen` event only fires after the connection is established:\n    // Source: https://datatracker.ietf.org/doc/html/rfc6455#page-19:~:text=_The%20WebSocket%20Connection%20is%20Established_,-and\n    this.resetServerInactivityTimeout();\n\n    ws.onopen = () => {\n      this.logger.logVerbose(\"begin ws.onopen\");\n      if (this.socket.state !== \"connecting\") {\n        throw new Error(\"onopen called with socket not in connecting state\");\n      }\n      this.setSocketState({\n        state: \"ready\",\n        ws,\n        paused: this.socket.paused === \"yes\" ? \"uninitialized\" : \"no\",\n      });\n      this.resetServerInactivityTimeout();\n      if (this.socket.paused === \"no\") {\n        this._hasEverConnected = true;\n        this.onOpen({\n          connectionCount: this.connectionCount,\n          lastCloseReason: this.lastCloseReason,\n          clientTs: monotonicMillis(),\n        });\n      }\n\n      if (this.lastCloseReason !== \"InitialConnect\") {\n        if (this.lastCloseReason) {\n          this.logger.log(\n            \"WebSocket reconnected at\",\n            prettyNow(),\n            \"after disconnect due to\",\n            this.lastCloseReason,\n          );\n        } else {\n          this.logger.log(\"WebSocket reconnected at\", prettyNow());\n        }\n      }\n\n      this.connectionCount += 1;\n      this.lastCloseReason = null;\n\n      // Send event for network recovery reconnect if applicable\n      if (this.pendingNetworkRecoveryInfo !== null) {\n        const { timeSavedMs } = this.pendingNetworkRecoveryInfo;\n        this.pendingNetworkRecoveryInfo = null;\n        this.sendMessage({\n          type: \"Event\",\n          eventType: \"NetworkRecoveryReconnect\",\n          event: { timeSavedMs },\n        });\n        this.logger.log(\n          `Network recovery reconnect saved ~${Math.round(timeSavedMs / 1000)}s of waiting`,\n        );\n      }\n    };\n    // NB: The WebSocket API calls `onclose` even if connection fails, so we can route all error paths through `onclose`.\n    ws.onerror = (error) => {\n      this.transitionChunkBuffer = null;\n      const message = (error as ErrorEvent).message;\n      if (message) {\n        this.logger.log(`WebSocket error message: ${message}`);\n      }\n    };\n    ws.onmessage = (message) => {\n      this.resetServerInactivityTimeout();\n      const messageLength = message.data.length;\n      let serverMessage = parseServerMessage(JSON.parse(message.data));\n      this._logVerbose(`received ws message with type ${serverMessage.type}`);\n\n      // Ping's only purpose is to reset the server inactivity timer.\n      if (serverMessage.type === \"Ping\") {\n        return;\n      }\n\n      // TransitionChunks never reach the main client logic.\n      if (serverMessage.type === \"TransitionChunk\") {\n        const transition = this.assembleTransition(serverMessage);\n        if (!transition) {\n          return;\n        }\n        serverMessage = transition;\n        this._logVerbose(\n          `assembled full ws message of type ${serverMessage.type}`,\n        );\n      }\n\n      if (this.transitionChunkBuffer !== null) {\n        this.transitionChunkBuffer = null;\n        this.logger.log(\n          `Received unexpected ${serverMessage.type} while buffering TransitionChunks`,\n        );\n      }\n\n      if (serverMessage.type === \"Transition\") {\n        this.reportLargeTransition({\n          messageLength,\n          transition: serverMessage,\n        });\n      }\n      const response = this.onMessage(serverMessage);\n      if (response.hasSyncedPastLastReconnect) {\n        // Reset backoff to 0 once all outstanding requests are complete.\n        this.retries = 0;\n        this.markConnectionStateDirty();\n      }\n    };\n    ws.onclose = (event) => {\n      this._logVerbose(\"begin ws.onclose\");\n      this.transitionChunkBuffer = null;\n      if (this.lastCloseReason === null) {\n        // event.reason is often an empty string\n        this.lastCloseReason = event.reason || `closed with code ${event.code}`;\n      }\n      if (\n        event.code !== CLOSE_NORMAL &&\n        event.code !== CLOSE_GOING_AWAY && // This commonly gets fired on mobile apps when the app is backgrounded\n        event.code !== CLOSE_NO_STATUS &&\n        event.code !== CLOSE_NOT_FOUND // Note that we want to retry on a 404, as it can be transient during a push.\n      ) {\n        let msg = `WebSocket closed with code ${event.code}`;\n        if (event.reason) {\n          msg += `: ${event.reason}`;\n        }\n        this.logger.log(msg);\n        if (this.onServerDisconnectError && event.reason) {\n          // This callback is a unstable API, InternalServerErrors in particular may be removed\n          // since they reflect expected temporary downtime. But until a quantitative measure\n          // of uptime is reported this unstable API errs on the inclusive side.\n          this.onServerDisconnectError(msg);\n        }\n      }\n      const reason = classifyDisconnectError(event.reason);\n      this.scheduleReconnect(reason);\n      return;\n    };\n  }\n\n  /**\n   * @returns The state of the {@link Socket}.\n   */\n  socketState(): string {\n    return this.socket.state;\n  }\n\n  /**\n   * @param message - A ClientMessage to send.\n   * @returns Whether the message (might have been) sent.\n   */\n  sendMessage(message: ClientMessage) {\n    const messageForLog = {\n      type: message.type,\n      ...(message.type === \"Authenticate\" && message.tokenType === \"User\"\n        ? {\n            value: `...${message.value.slice(-7)}`,\n          }\n        : {}),\n    };\n    if (this.socket.state === \"ready\" && this.socket.paused === \"no\") {\n      const encodedMessage = encodeClientMessage(message);\n      const request = JSON.stringify(encodedMessage);\n      let sent = false;\n      try {\n        this.socket.ws.send(request);\n        sent = true;\n      } catch (error: any) {\n        this.logger.log(\n          `Failed to send message on WebSocket, reconnecting: ${error}`,\n        );\n        this.closeAndReconnect(\"FailedToSendMessage\");\n      }\n      this._logVerbose(\n        `${sent ? \"sent\" : \"failed to send\"} message with type ${message.type}: ${JSON.stringify(\n          messageForLog,\n        )}`,\n      );\n      return true;\n    }\n    this._logVerbose(\n      `message not sent (socket state: ${this.socket.state}, paused: ${\"paused\" in this.socket ? this.socket.paused : undefined}): ${JSON.stringify(\n        messageForLog,\n      )}`,\n    );\n\n    return false;\n  }\n\n  private resetServerInactivityTimeout() {\n    if (this.socket.state === \"terminated\") {\n      // Don't reset any timers if we were trying to terminate.\n      return;\n    }\n    if (this.reconnectDueToServerInactivityTimeout !== null) {\n      clearTimeout(this.reconnectDueToServerInactivityTimeout);\n      this.reconnectDueToServerInactivityTimeout = null;\n    }\n    this.reconnectDueToServerInactivityTimeout = setTimeout(() => {\n      this.closeAndReconnect(\"InactiveServer\");\n    }, this.serverInactivityThreshold);\n  }\n\n  private scheduleReconnect(reason: \"client\" | ServerDisconnectError) {\n    // Cancel any existing scheduled reconnect to avoid multiple reconnects\n    if (this.scheduledReconnect) {\n      clearTimeout(this.scheduledReconnect.timeout);\n      this.scheduledReconnect = null;\n    }\n\n    this.socket = { state: \"disconnected\" };\n    const backoff = this.nextBackoff(reason);\n    this.markConnectionStateDirty();\n    this.logger.log(`Attempting reconnect in ${Math.round(backoff)}ms`);\n\n    const scheduledAt = monotonicMillis();\n    const timeoutId = setTimeout(() => {\n      // Only proceed if this timeout hasn't been cleared\n      if (this.scheduledReconnect?.timeout === timeoutId) {\n        this.scheduledReconnect = null;\n        this.connect();\n      }\n    }, backoff);\n\n    this.scheduledReconnect = {\n      timeout: timeoutId,\n      scheduledAt,\n      backoffMs: backoff,\n    };\n  }\n\n  /**\n   * Close the WebSocket and schedule a reconnect.\n   *\n   * This should be used when we hit an error and would like to restart the session.\n   */\n  private closeAndReconnect(closeReason: string) {\n    this._logVerbose(`begin closeAndReconnect with reason ${closeReason}`);\n    switch (this.socket.state) {\n      case \"disconnected\":\n      case \"terminated\":\n      case \"stopped\":\n        // Nothing to do if we don't have a WebSocket.\n        return;\n      case \"connecting\":\n      case \"ready\": {\n        this.lastCloseReason = closeReason;\n        // Close the old socket asynchronously, we'll open a new socket in reconnect.\n        void this.close();\n        this.scheduleReconnect(\"client\");\n        return;\n      }\n      default: {\n        // Enforce that the switch-case is exhaustive.\n        this.socket satisfies never;\n      }\n    }\n  }\n\n  /**\n   * Close the WebSocket, being careful to clear the onclose handler to avoid re-entrant\n   * calls. Use this instead of directly calling `ws.close()`\n   *\n   * It is the callers responsibility to update the state after this method is called so that the\n   * closed socket is not accessible or used again after this method is called\n   */\n  private close(): Promise<void> {\n    this.transitionChunkBuffer = null;\n    switch (this.socket.state) {\n      case \"disconnected\":\n      case \"terminated\":\n      case \"stopped\":\n        // Nothing to do if we don't have a WebSocket.\n        return Promise.resolve();\n      case \"connecting\": {\n        const ws = this.socket.ws;\n        // Messages can still be received after close but we're not interested.\n        ws.onmessage = (_message) => {\n          this._logVerbose(\"Ignoring message received after close\");\n        };\n        return new Promise((r) => {\n          ws.onclose = () => {\n            this._logVerbose(\"Closed after connecting\");\n            r();\n          };\n          ws.onopen = () => {\n            this._logVerbose(\"Opened after connecting\");\n            ws.close();\n          };\n        });\n      }\n      case \"ready\": {\n        this._logVerbose(\"ws.close called\");\n        const ws = this.socket.ws;\n        // Messages can still be received after close but we're not interested.\n        ws.onmessage = (_message) => {\n          this._logVerbose(\"Ignoring message received after close\");\n        };\n        const result: Promise<void> = new Promise((r) => {\n          ws.onclose = () => {\n            r();\n          };\n        });\n        ws.close();\n        return result;\n      }\n      default: {\n        // Enforce that the switch-case is exhaustive.\n        this.socket satisfies never;\n        return Promise.resolve();\n      }\n    }\n  }\n\n  /**\n   * Close the WebSocket and do not reconnect.\n   * @returns A Promise that resolves when the WebSocket `onClose` callback is called.\n   */\n  terminate(): Promise<void> {\n    if (this.reconnectDueToServerInactivityTimeout) {\n      clearTimeout(this.reconnectDueToServerInactivityTimeout);\n    }\n    if (this.scheduledReconnect) {\n      clearTimeout(this.scheduledReconnect.timeout);\n      this.scheduledReconnect = null;\n    }\n    this.cleanupNetworkListener();\n    switch (this.socket.state) {\n      case \"terminated\":\n      case \"stopped\":\n      case \"disconnected\":\n      case \"connecting\":\n      case \"ready\": {\n        const result = this.close();\n        this.setSocketState({ state: \"terminated\" });\n        return result;\n      }\n      default: {\n        // Enforce that the switch-case is exhaustive.\n        this.socket satisfies never;\n        throw new Error(\n          `Invalid websocket state: ${(this.socket as any).state}`,\n        );\n      }\n    }\n  }\n\n  stop(): Promise<void> {\n    switch (this.socket.state) {\n      case \"terminated\":\n        // If we're terminating we ignore stop\n        return Promise.resolve();\n      case \"connecting\":\n      case \"stopped\":\n      case \"disconnected\":\n      case \"ready\": {\n        this.cleanupNetworkListener();\n        const result = this.close();\n        this.socket = { state: \"stopped\" };\n        return result;\n      }\n      default: {\n        // Enforce that the switch-case is exhaustive.\n        this.socket satisfies never;\n        return Promise.resolve();\n      }\n    }\n  }\n\n  /**\n   * Create a new WebSocket after a previous `stop()`, unless `terminate()` was\n   * called before.\n   */\n  tryRestart(): void {\n    switch (this.socket.state) {\n      case \"stopped\":\n        break;\n      case \"terminated\":\n      case \"connecting\":\n      case \"ready\":\n      case \"disconnected\":\n        this.logger.logVerbose(\"Restart called without stopping first\");\n        return;\n      default: {\n        // Enforce that the switch-case is exhaustive.\n        this.socket satisfies never;\n      }\n    }\n    this.setupNetworkListener();\n    this.connect();\n  }\n\n  pause(): void {\n    switch (this.socket.state) {\n      case \"disconnected\":\n      case \"stopped\":\n      case \"terminated\":\n        // If already stopped or stopping ignore.\n        return;\n      case \"connecting\":\n      case \"ready\": {\n        this.socket = { ...this.socket, paused: \"yes\" };\n        return;\n      }\n      default: {\n        // Enforce that the switch-case is exhaustive.\n        this.socket satisfies never;\n        return;\n      }\n    }\n  }\n\n  /**\n   * Try to reconnect immediately, canceling any scheduled reconnect.\n   * This is useful when detecting network recovery.\n   * Only takes action if we're in disconnected state (waiting to reconnect).\n   */\n  tryReconnectImmediately(): void {\n    this._logVerbose(\"tryReconnectImmediately called\");\n\n    // Only reconnect if we're in disconnected state (waiting to reconnect)\n    if (this.socket.state !== \"disconnected\") {\n      this._logVerbose(\n        `tryReconnectImmediately called but socket state is ${this.socket.state}, no action taken`,\n      );\n      return;\n    }\n\n    // Track how much time we saved by reconnecting immediately\n    let timeSavedMs: number | null = null;\n    if (this.scheduledReconnect) {\n      const elapsed = monotonicMillis() - this.scheduledReconnect.scheduledAt;\n      timeSavedMs = Math.max(0, this.scheduledReconnect.backoffMs - elapsed);\n      this._logVerbose(\n        `would have waited ${Math.round(timeSavedMs)}ms more (backoff was ${Math.round(this.scheduledReconnect.backoffMs)}ms, elapsed ${Math.round(elapsed)}ms)`,\n      );\n      // Cancel the scheduled reconnect\n      clearTimeout(this.scheduledReconnect.timeout);\n      this.scheduledReconnect = null;\n      this._logVerbose(\"canceled scheduled reconnect\");\n    }\n\n    this.logger.log(\"Network recovery detected, reconnecting immediately\");\n    // Store the time saved to send as an event after we connect\n    this.pendingNetworkRecoveryInfo =\n      timeSavedMs !== null ? { timeSavedMs } : null;\n    this.connect();\n  }\n\n  /**\n   * Resume the state machine if previously paused.\n   */\n  resume(): void {\n    switch (this.socket.state) {\n      case \"connecting\":\n        this.socket = { ...this.socket, paused: \"no\" };\n        return;\n      case \"ready\":\n        if (this.socket.paused === \"uninitialized\") {\n          this.socket = { ...this.socket, paused: \"no\" };\n          this._hasEverConnected = true;\n          this.onOpen({\n            connectionCount: this.connectionCount,\n            lastCloseReason: this.lastCloseReason,\n            clientTs: monotonicMillis(),\n          });\n        } else if (this.socket.paused === \"yes\") {\n          this.socket = { ...this.socket, paused: \"no\" };\n          this.onResume();\n        }\n        return;\n      case \"terminated\":\n      case \"stopped\":\n      case \"disconnected\":\n        // Ignore resume if not paused, perhaps we already resumed.\n        return;\n      default: {\n        // Enforce that the switch-case is exhaustive.\n        this.socket satisfies never;\n      }\n    }\n    this.connect();\n  }\n\n  connectionState(): {\n    isConnected: boolean;\n    hasEverConnected: boolean;\n    connectionCount: number;\n    connectionRetries: number;\n  } {\n    return {\n      isConnected: this.socket.state === \"ready\",\n      hasEverConnected: this._hasEverConnected,\n      connectionCount: this.connectionCount,\n      connectionRetries: this.retries,\n    };\n  }\n\n  private _logVerbose(message: string) {\n    this.logger.logVerbose(message);\n  }\n\n  private nextBackoff(reason: \"client\" | ServerDisconnectError): number {\n    const initialBackoff: number =\n      reason === \"client\"\n        ? 100 // There's no evidence of a server problem, retry quickly\n        : reason === \"Unknown\"\n          ? this.defaultInitialBackoff\n          : serverDisconnectErrors[reason].timeout;\n\n    const baseBackoff = initialBackoff * Math.pow(2, this.retries);\n    this.retries += 1;\n    const actualBackoff = Math.min(baseBackoff, this.maxBackoff);\n    const jitter = actualBackoff * (Math.random() - 0.5);\n    return actualBackoff + jitter;\n  }\n\n  private reportLargeTransition({\n    transition,\n    messageLength,\n  }: {\n    transition: Transition;\n    messageLength: number;\n  }) {\n    if (\n      transition.clientClockSkew === undefined ||\n      transition.serverTs === undefined\n    ) {\n      return;\n    }\n\n    const transitionTransitTime =\n      monotonicMillis() - // client time now\n      // clientClockSkew = (server time + upstream latency) - client time\n      // clientClockSkew is \"how many milliseconds behind (slow) is the client clock\"\n      // but the latency of the Connect message inflates this, making it appear further behind\n      transition.clientClockSkew -\n      transition.serverTs / 1_000_000; // server time when transition was sent\n    const prettyTransitionTime = `${Math.round(transitionTransitTime)}ms`;\n    const prettyMessageMB = `${Math.round(messageLength / 10_000) / 100}MB`;\n    const bytesPerSecond = messageLength / (transitionTransitTime / 1000);\n    const prettyBytesPerSecond = `${Math.round(bytesPerSecond / 10_000) / 100}MB per second`;\n    this._logVerbose(\n      `received ${prettyMessageMB} transition in ${prettyTransitionTime} at ${prettyBytesPerSecond}`,\n    );\n\n    // Warnings that will show up for *all users*, so don't be too aggressive.\n    // These can be silenced (along with reconnection messages) by setting `logger: false` in client options.\n    if (messageLength > 20_000_000) {\n      // Big enough that the developer should be made aware of this.\n      this.logger.log(\n        `received query results totaling more that 20MB (${prettyMessageMB}) which will take a long time to download on slower connections`,\n      );\n    } else if (transitionTransitTime > 20_000) {\n      // Long enough that a pattern of these should be interesting to a developer, but be aware that\n      // weak connections, putting clients to sleep, backgrounding etc. could all cause this too.\n      this.logger.log(\n        `received query results totaling ${prettyMessageMB} which took more than 20s to arrive (${prettyTransitionTime})`,\n      );\n    }\n\n    if (this.debug) {\n      // debug means \"reportDebugInfoToConvex\" is set so this can be aggressive.\n      this.sendMessage({\n        type: \"Event\",\n        eventType: \"ClientReceivedTransition\",\n        event: { transitionTransitTime, messageLength },\n      });\n    }\n  }\n}\n", "export function newSessionId() {\n  return uuidv4();\n}\n\n// From https://stackoverflow.com/a/2117523\nfunction uuidv4() {\n  return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n    const r = (Math.random() * 16) | 0,\n      v = c === \"x\" ? r : (r & 0x3) | 0x8;\n    return v.toString(16);\n  });\n}\n", "export interface JwtDecodeOptions {\n  header?: boolean;\n}\n\nexport interface JwtHeader {\n  typ?: string;\n  alg?: string;\n  kid?: string;\n}\n\nexport interface JwtPayload {\n  iss?: string;\n  sub?: string;\n  aud?: string[] | string;\n  exp?: number;\n  nbf?: number;\n  iat?: number;\n  jti?: string;\n}\n\nexport class InvalidTokenError extends Error {}\n\nInvalidTokenError.prototype.name = \"InvalidTokenError\";\n\nfunction b64DecodeUnicode(str: string) {\n  return decodeURIComponent(\n    atob(str).replace(/(.)/g, (_m, p) => {\n      let code = (p as string).charCodeAt(0).toString(16).toUpperCase();\n      if (code.length < 2) {\n        code = \"0\" + code;\n      }\n      return \"%\" + code;\n    }),\n  );\n}\n\nfunction base64UrlDecode(str: string) {\n  let output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n  switch (output.length % 4) {\n    case 0:\n      break;\n    case 2:\n      output += \"==\";\n      break;\n    case 3:\n      output += \"=\";\n      break;\n    default:\n      throw new Error(\"base64 string is not of the correct length\");\n  }\n\n  try {\n    return b64DecodeUnicode(output);\n  } catch {\n    return atob(output);\n  }\n}\n\nexport function jwtDecode<T = JwtHeader>(\n  token: string,\n  options: JwtDecodeOptions & { header: true },\n): T;\nexport function jwtDecode<T = JwtPayload>(\n  token: string,\n  options?: JwtDecodeOptions,\n): T;\nexport function jwtDecode<T = JwtHeader | JwtPayload>(\n  token: string,\n  options?: JwtDecodeOptions,\n): T {\n  if (typeof token !== \"string\") {\n    throw new InvalidTokenError(\"Invalid token specified: must be a string\");\n  }\n\n  options ||= {};\n\n  const pos = options.header === true ? 0 : 1;\n  const part = token.split(\".\")[pos];\n\n  if (typeof part !== \"string\") {\n    throw new InvalidTokenError(\n      `Invalid token specified: missing part #${pos + 1}`,\n    );\n  }\n\n  let decoded: string;\n  try {\n    decoded = base64UrlDecode(part);\n  } catch (e) {\n    throw new InvalidTokenError(\n      `Invalid token specified: invalid base64 for part #${pos + 1} (${(e as Error).message})`,\n    );\n  }\n\n  try {\n    return JSON.parse(decoded) as T;\n  } catch (e) {\n    throw new InvalidTokenError(\n      `Invalid token specified: invalid json for part #${pos + 1} (${(e as Error).message})`,\n    );\n  }\n}\n", "import { Logger } from \"../logging.js\";\nimport { LocalSyncState } from \"./local_state.js\";\nimport { AuthError, IdentityVersion, Transition } from \"./protocol.js\";\nimport { jwtDecode } from \"../../vendor/jwt-decode/index.js\";\n\n// setTimout uses 32 bit integer, so it can only\n// schedule about 24 days in the future.\nconst MAXIMUM_REFRESH_DELAY = 20 * 24 * 60 * 60 * 1000; // 20 days\n\nconst MAX_TOKEN_CONFIRMATION_ATTEMPTS = 2;\n\n/**\n * An async function returning a JWT. Depending on the auth providers\n * configured in convex/auth.config.ts, this may be a JWT-encoded OpenID\n * Connect Identity Token or a traditional JWT.\n *\n * `forceRefreshToken` is `true` if the server rejected a previously\n * returned token or the token is anticipated to expiring soon\n * based on its `exp` time.\n *\n * See {@link ConvexReactClient.setAuth}.\n *\n * @public\n */\nexport type AuthTokenFetcher = (args: {\n  forceRefreshToken: boolean;\n}) => Promise<string | null | undefined>;\n\n/**\n * What is provided to the client.\n */\ntype AuthConfig = {\n  fetchToken: AuthTokenFetcher;\n  onAuthChange: (isAuthenticated: boolean) => void;\n  onRefreshChange?: ((isRefreshing: boolean) => void) | undefined;\n};\n\n/**\n * By default we take 3 steps:\n *   1. Fetch a possibly cached token and send it to the server\n *   2. Immediately fetch a fresh token without using a cache\n *   3. Repeat step 2 before the end of the fresh token's lifetime\n *\n * When `initialAuthTokenReuse` is enabled, step 2 is skipped: the\n * cached token is reused and a refetch is scheduled based on its\n * remaining lifetime (estimated via the server's clock skew). This\n * avoids a second Authenticate message that would cause the server\n * to re-execute all authenticated queries.\n *\n * If the server rejects a token before a scheduled refetch, we\n * immediately fetch a fresh token and retry.\n */\ntype AuthState =\n  | { state: \"noAuth\" }\n  | {\n      state: \"waitingForServerConfirmationOfCachedToken\";\n      config: AuthConfig;\n      hasRetried: boolean;\n    }\n  | {\n      state: \"initialRefetch\";\n      config: AuthConfig;\n    }\n  | {\n      state: \"waitingForServerConfirmationOfFreshToken\";\n      config: AuthConfig;\n      hadAuth: boolean;\n      token: string;\n    }\n  | {\n      state: \"waitingForScheduledRefetch\";\n      config: AuthConfig;\n      refetchTokenTimeoutId: ReturnType<typeof setTimeout>;\n    }\n  // Special/weird state when we got a valid token\n  // but could not fetch a new one.\n  | {\n      state: \"notRefetching\";\n      config: AuthConfig;\n    };\n\n/**\n * Handles the state transitions for auth. The server is the source\n * of truth.\n */\nexport class AuthenticationManager {\n  private authState: AuthState = { state: \"noAuth\" };\n  // Used to detect races involving `setConfig` calls\n  // while a token is being fetched.\n  private configVersion = 0;\n  // Shared by the BaseClient so that the auth manager can easily inspect it\n  private readonly syncState: LocalSyncState;\n  // Passed down by BaseClient, sends a message to the server\n  private readonly authenticate: (token: string) => IdentityVersion;\n  private readonly stopSocket: () => Promise<void>;\n  private readonly tryRestartSocket: () => void;\n  private readonly pauseSocket: () => void;\n  private readonly resumeSocket: () => void;\n  // Passed down by BaseClient, sends a message to the server\n  private readonly clearAuth: () => void;\n  private readonly logger: Logger;\n  private readonly refreshTokenLeewaySeconds: number;\n  private readonly initialAuthTokenReuse: boolean;\n  // Track last value to avoid redundant calls\n  private lastRefreshChange: boolean;\n  // Number of times we have attempted to confirm the latest token. We retry up\n  // to `MAX_TOKEN_CONFIRMATION_ATTEMPTS` times.\n  private tokenConfirmationAttempts = 0;\n  constructor(\n    syncState: LocalSyncState,\n    callbacks: {\n      authenticate: (token: string) => IdentityVersion;\n      stopSocket: () => Promise<void>;\n      tryRestartSocket: () => void;\n      pauseSocket: () => void;\n      resumeSocket: () => void;\n      clearAuth: () => void;\n    },\n    config: {\n      refreshTokenLeewaySeconds: number;\n      logger: Logger;\n      initialAuthTokenReuse: boolean;\n    },\n  ) {\n    this.syncState = syncState;\n    this.authenticate = callbacks.authenticate;\n    this.stopSocket = callbacks.stopSocket;\n    this.tryRestartSocket = callbacks.tryRestartSocket;\n    this.pauseSocket = callbacks.pauseSocket;\n    this.resumeSocket = callbacks.resumeSocket;\n    this.clearAuth = callbacks.clearAuth;\n    this.logger = config.logger;\n    this.refreshTokenLeewaySeconds = config.refreshTokenLeewaySeconds;\n    this.initialAuthTokenReuse = config.initialAuthTokenReuse;\n    this.lastRefreshChange = false;\n  }\n\n  private notifyRefreshChange(isRefreshing: boolean) {\n    if (\n      this.authState.state !== \"noAuth\" &&\n      this.authState.state !== \"initialRefetch\" &&\n      this.authState.config.onRefreshChange &&\n      this.lastRefreshChange !== isRefreshing\n    ) {\n      this.lastRefreshChange = isRefreshing;\n      this.authState.config.onRefreshChange(isRefreshing);\n    }\n  }\n\n  async setConfig(\n    fetchToken: AuthTokenFetcher,\n    onChange: (isAuthenticated: boolean) => void,\n    onRefreshChange?: (isRefreshing: boolean) => void,\n  ) {\n    this.resetAuthState();\n    this._logVerbose(\"pausing WS for auth token fetch\");\n    this.pauseSocket();\n    const token = await this.fetchTokenAndGuardAgainstRace(fetchToken, {\n      forceRefreshToken: false,\n    });\n    if (token.isFromOutdatedConfig) {\n      return;\n    }\n    const config: AuthConfig = {\n      fetchToken,\n      onAuthChange: onChange,\n      onRefreshChange,\n    };\n    if (token.value) {\n      this.setAuthState({\n        state: \"waitingForServerConfirmationOfCachedToken\",\n        config,\n        hasRetried: false,\n      });\n      this.authenticate(token.value);\n    } else {\n      this.setAuthState({\n        state: \"initialRefetch\",\n        config,\n      });\n      // Try again with `forceRefreshToken: true`\n      await this.refetchToken();\n    }\n    this._logVerbose(\"resuming WS after auth token fetch\");\n    this.resumeSocket();\n  }\n\n  onTransition(serverMessage: Transition) {\n    if (\n      !this.syncState.isCurrentOrNewerAuthVersion(\n        serverMessage.endVersion.identity,\n      )\n    ) {\n      // This is a stale transition - client has moved on to\n      // a newer auth version.\n      return;\n    }\n    if (\n      serverMessage.endVersion.identity <= serverMessage.startVersion.identity\n    ) {\n      // This transition did not change auth - it is not a response to Authenticate.\n      return;\n    }\n\n    this._logVerbose(\n      `auth state is ${this.authState.state} when handling transition`,\n    );\n\n    // This transition advanced the auth version, which means the token used was valid\n    // and the client and server auth states are in sync.\n    this.syncState.markAuthCompletion();\n\n    if (this.authState.state === \"waitingForServerConfirmationOfCachedToken\") {\n      this._logVerbose(\"server confirmed auth token is valid\");\n      const cachedToken = this.syncState.getAuth()?.value;\n      if (this.initialAuthTokenReuse && cachedToken) {\n        this.scheduleTokenRefetch(cachedToken, serverMessage.clientClockSkew);\n      } else {\n        void this.refetchToken();\n      }\n      this.authState.config.onAuthChange(true);\n      return;\n    }\n    if (this.authState.state === \"waitingForServerConfirmationOfFreshToken\") {\n      this._logVerbose(\"server confirmed new auth token is valid\");\n      this.notifyRefreshChange(false);\n      this.scheduleTokenRefetch(this.authState.token);\n      this.tokenConfirmationAttempts = 0;\n      if (!this.authState.hadAuth) {\n        this.authState.config.onAuthChange(true);\n      }\n    }\n  }\n\n  onAuthError(serverMessage: AuthError) {\n    // If the AuthError is not due to updating the token, and we're currently\n    // waiting on the result of a token update, ignore.\n    if (\n      serverMessage.authUpdateAttempted === false &&\n      (this.authState.state === \"waitingForServerConfirmationOfFreshToken\" ||\n        this.authState.state === \"waitingForServerConfirmationOfCachedToken\")\n    ) {\n      this._logVerbose(\"ignoring non-auth token expired error\");\n      return;\n    }\n    const { baseVersion } = serverMessage;\n    // Versioned AuthErrors are ignored if the client advanced to\n    // a newer auth identity\n    // Error are reporting the previous version, since the server\n    // didn't advance, hence `+ 1`.\n    if (!this.syncState.isCurrentOrNewerAuthVersion(baseVersion + 1)) {\n      this._logVerbose(\"ignoring auth error for previous auth attempt\");\n      return;\n    }\n    void this.tryToReauthenticate(serverMessage);\n    return;\n  }\n\n  // This is similar to `refetchToken` defined below, in fact we\n  // don't represent them as different states, but it is different\n  // in that we pause the WebSocket so that mutations\n  // don't retry with bad auth.\n  private async tryToReauthenticate(serverMessage: AuthError) {\n    this._logVerbose(`attempting to reauthenticate: ${serverMessage.error}`);\n    if (\n      // No way to fetch another token, kaboom\n      this.authState.state === \"noAuth\" ||\n      // We failed on a fresh token. After a small number of retries, we give up\n      // and clear the auth state to avoid infinite retries.\n      (this.authState.state === \"waitingForServerConfirmationOfFreshToken\" &&\n        this.tokenConfirmationAttempts >= MAX_TOKEN_CONFIRMATION_ATTEMPTS)\n    ) {\n      this.logger.error(\n        `Failed to authenticate: \"${serverMessage.error}\", check your server auth config`,\n      );\n      if (this.syncState.hasAuth()) {\n        this.syncState.clearAuth();\n      }\n      if (this.authState.state !== \"noAuth\") {\n        this.setAndReportAuthFailed(this.authState.config.onAuthChange);\n      }\n      return;\n    }\n    if (this.authState.state === \"waitingForServerConfirmationOfFreshToken\") {\n      this.tokenConfirmationAttempts++;\n      this._logVerbose(\n        `retrying reauthentication, ${MAX_TOKEN_CONFIRMATION_ATTEMPTS - this.tokenConfirmationAttempts} attempts remaining`,\n      );\n    }\n\n    this.notifyRefreshChange(true);\n    await this.stopSocket();\n    if ((this.authState.state as AuthState[\"state\"]) === \"noAuth\") {\n      // setConfig() or stop() ran during the await.\n      return;\n    }\n    const token = await this.fetchTokenAndGuardAgainstRace(\n      this.authState.config.fetchToken,\n      {\n        forceRefreshToken: true,\n      },\n    );\n    if (token.isFromOutdatedConfig) {\n      return;\n    }\n\n    if (token.value && this.syncState.isNewAuth(token.value)) {\n      this.authenticate(token.value);\n      this.setAuthState({\n        state: \"waitingForServerConfirmationOfFreshToken\",\n        config: this.authState.config,\n        token: token.value,\n        hadAuth:\n          this.authState.state === \"notRefetching\" ||\n          this.authState.state === \"waitingForScheduledRefetch\",\n      });\n    } else {\n      this._logVerbose(\"reauthentication failed, could not fetch a new token\");\n      if (this.syncState.hasAuth()) {\n        this.syncState.clearAuth();\n      }\n      this.setAndReportAuthFailed(this.authState.config.onAuthChange);\n    }\n    this.tryRestartSocket();\n  }\n\n  // Force refetch the token and schedule another refetch\n  // before the token expires - an active client should never\n  // need to reauthenticate.\n  private async refetchToken() {\n    if (this.authState.state === \"noAuth\") {\n      return;\n    }\n    this._logVerbose(\"refetching auth token\");\n    const token = await this.fetchTokenAndGuardAgainstRace(\n      this.authState.config.fetchToken,\n      {\n        forceRefreshToken: true,\n      },\n    );\n    if (token.isFromOutdatedConfig) {\n      return;\n    }\n\n    if (token.value) {\n      if (this.syncState.isNewAuth(token.value)) {\n        this.setAuthState({\n          state: \"waitingForServerConfirmationOfFreshToken\",\n          hadAuth: this.syncState.hasAuth(),\n          token: token.value,\n          config: this.authState.config,\n        });\n        this.authenticate(token.value);\n      } else {\n        this.setAuthState({\n          state: \"notRefetching\",\n          config: this.authState.config,\n        });\n      }\n    } else {\n      this._logVerbose(\"refetching token failed\");\n      if (this.syncState.hasAuth()) {\n        this.clearAuth();\n      }\n      this.setAndReportAuthFailed(this.authState.config.onAuthChange);\n    }\n    // Restart in case this refetch was triggered via schedule during\n    // a reauthentication attempt.\n    this._logVerbose(\n      \"restarting WS after auth token fetch (if currently stopped)\",\n    );\n    this.tryRestartSocket();\n  }\n\n  private scheduleTokenRefetch(token: string, clientClockSkewMs?: number) {\n    if (this.authState.state === \"noAuth\") {\n      return;\n    }\n    const decodedToken = this.decodeToken(token);\n    if (!decodedToken) {\n      // This is no longer really possible, because\n      // we wait on server response before scheduling token refetch,\n      // and the server currently requires JWT tokens.\n      this.logger.error(\n        \"Auth token is not a valid JWT, cannot refetch the token\",\n      );\n      return;\n    }\n    // iat: issued at time, UTC seconds timestamp at which the JWT was issued\n    // exp: expiration time, UTC seconds timestamp at which the JWT will expire\n    const { iat, exp } = decodedToken as { iat?: number; exp?: number };\n    if (!iat || !exp) {\n      this.logger.error(\n        \"Auth token does not have required fields, cannot refetch the token\",\n      );\n      return;\n    }\n    const fullLifetimeSeconds = exp - iat;\n    if (fullLifetimeSeconds <= 2) {\n      this.logger.error(\n        \"Auth token does not live long enough, cannot refetch the token\",\n      );\n      return;\n    }\n    let tokenValiditySeconds: number;\n    if (clientClockSkewMs !== undefined) {\n      // For cached tokens we use the server's clock skew estimate to\n      // compute remaining lifetime. The server computes\n      // clientClockSkew = clientTs - serverReceiveTs, so it's positive\n      // when the client is ahead and negative when behind. To recover\n      // server time: serverNow = Date.now() - clientClockSkew.\n      // Both Date.now() and setTimeout use the same client clock, so\n      // the scheduled delay is accurate regardless of absolute offset.\n      // Connect latency inflates the skew toward \"client behind,\" which\n      // is conservative \u2014 we schedule the refetch slightly early.\n      const estimatedServerNowSeconds = (Date.now() - clientClockSkewMs) / 1000;\n      tokenValiditySeconds = exp - estimatedServerNowSeconds;\n      if (tokenValiditySeconds <= 0) {\n        tokenValiditySeconds = 0;\n      }\n    } else {\n      // For freshly-fetched tokens, `exp - iat` is the full lifetime\n      // starting from now.\n      tokenValiditySeconds = fullLifetimeSeconds;\n    }\n    // Attempt to refresh the token `refreshTokenLeewaySeconds` before it expires,\n    // or immediately if the token is already expiring soon.\n    let delay = Math.min(\n      MAXIMUM_REFRESH_DELAY,\n      (tokenValiditySeconds - this.refreshTokenLeewaySeconds) * 1000,\n    );\n    if (delay <= 0) {\n      // Refetch immediately, but this might be due to configuring a `refreshTokenLeewaySeconds`\n      // that is too large compared to the token's actual lifetime.\n      this.logger.warn(\n        `Refetching auth token immediately, configured leeway ${this.refreshTokenLeewaySeconds}s is larger than the token's lifetime ${tokenValiditySeconds}s`,\n      );\n      delay = 0;\n    }\n    const refetchTokenTimeoutId = setTimeout(() => {\n      this._logVerbose(\"running scheduled token refetch\");\n      void this.refetchToken();\n    }, delay);\n    this.setAuthState({\n      state: \"waitingForScheduledRefetch\",\n      refetchTokenTimeoutId,\n      config: this.authState.config,\n    });\n    this._logVerbose(\n      `scheduled preemptive auth token refetching in ${delay}ms`,\n    );\n  }\n\n  // Protects against simultaneous calls to `setConfig`\n  // while we're fetching a token\n  private async fetchTokenAndGuardAgainstRace(\n    fetchToken: AuthTokenFetcher,\n    fetchArgs: {\n      forceRefreshToken: boolean;\n    },\n  ) {\n    const originalConfigVersion = ++this.configVersion;\n    this._logVerbose(\n      `fetching token with config version ${originalConfigVersion}`,\n    );\n    const token = await fetchToken(fetchArgs);\n    if (this.configVersion !== originalConfigVersion) {\n      // This is a stale config\n      this._logVerbose(\n        `stale config version, expected ${originalConfigVersion}, got ${this.configVersion}`,\n      );\n      return { isFromOutdatedConfig: true };\n    }\n    return { isFromOutdatedConfig: false, value: token };\n  }\n\n  stop() {\n    this.resetAuthState();\n    // Bump this in case we are mid-token-fetch when we get stopped\n    this.configVersion++;\n    this._logVerbose(`config version bumped to ${this.configVersion}`);\n  }\n\n  private setAndReportAuthFailed(\n    onAuthChange: (authenticated: boolean) => void,\n  ) {\n    onAuthChange(false);\n    this.resetAuthState();\n  }\n\n  // The sole path to `state === \"noAuth\"`; consumers rely on this firing\n  // `notifyRefreshChange(false)` to pair any in-flight `(true)`. May run\n  // when refresh state is already false.\n  private resetAuthState() {\n    this.notifyRefreshChange(false);\n    this.setAuthState({ state: \"noAuth\" });\n  }\n\n  private setAuthState(newAuth: AuthState) {\n    const authStateForLog =\n      newAuth.state === \"waitingForServerConfirmationOfFreshToken\"\n        ? {\n            hadAuth: newAuth.hadAuth,\n            state: newAuth.state,\n            token: `...${newAuth.token.slice(-7)}`,\n          }\n        : { state: newAuth.state };\n    this._logVerbose(\n      `setting auth state to ${JSON.stringify(authStateForLog)}`,\n    );\n    switch (newAuth.state) {\n      case \"waitingForScheduledRefetch\":\n      case \"notRefetching\":\n      case \"noAuth\":\n        this.tokenConfirmationAttempts = 0;\n        break;\n      case \"waitingForServerConfirmationOfFreshToken\":\n      case \"waitingForServerConfirmationOfCachedToken\":\n      case \"initialRefetch\":\n        break;\n      default: {\n        newAuth satisfies never;\n      }\n    }\n    if (this.authState.state === \"waitingForScheduledRefetch\") {\n      // TODO: this side-effect would be better situated with scheduling refetch\n      clearTimeout(this.authState.refetchTokenTimeoutId);\n    }\n    this.authState = newAuth;\n  }\n\n  private decodeToken(token: string) {\n    try {\n      return jwtDecode(token);\n    } catch (e) {\n      this._logVerbose(\n        `Error decoding token: ${e instanceof Error ? e.message : \"Unknown error\"}`,\n      );\n      return null;\n    }\n  }\n\n  private _logVerbose(message: string) {\n    this.logger.logVerbose(`${message} [v${this.configVersion}]`);\n  }\n}\n", "// Marks share a global namespace with other developer code.\nconst markNames = [\n  \"convexClientConstructed\",\n  \"convexWebSocketOpen\",\n  \"convexFirstMessageReceived\",\n] as const;\nexport type MarkName = (typeof markNames)[number];\n\n// Mark details are not reported to the server.\ntype MarkDetail = {\n  sessionId: string;\n};\n\n// `PerformanceMark`s are efficient and show up in browser's performance\n// timeline. They can be cleared with `performance.clearMarks()`.\n// This is a memory leak, but a worthwhile one: automatic\n// cleanup would make in-browser debugging more difficult.\nexport function mark(name: MarkName, sessionId: string) {\n  const detail: MarkDetail = { sessionId };\n  // `performance` APIs exists in browsers, Node.js, Deno, and more but it\n  // is not required by the Convex client.\n  if (typeof performance === \"undefined\" || !performance.mark) return;\n  performance.mark(name, { detail });\n}\n\n// `PerfomanceMark` has a built-in toJSON() but the return type varies\n// between implementations, e.g. Node.js returns details but Chrome does not.\nfunction performanceMarkToJson(mark: PerformanceMark): MarkJson {\n  // Remove \"convex\" prefix\n  let name = mark.name.slice(\"convex\".length);\n  // lowercase the first letter\n  name = name.charAt(0).toLowerCase() + name.slice(1);\n  return {\n    name,\n    startTime: mark.startTime,\n  };\n}\n\n// Similar to the return type of `PerformanceMark.toJson()`.\nexport type MarkJson = {\n  name: string;\n  // `startTime` is in milliseconds since the time origin like `performance.now()`.\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMHighResTimeStamp#the_time_origin\n  startTime: number;\n};\n\nexport function getMarksReport(sessionId: string): MarkJson[] {\n  if (typeof performance === \"undefined\" || !performance.getEntriesByName) {\n    return [];\n  }\n  const allMarks: PerformanceMark[] = [];\n  for (const name of markNames) {\n    const marks = (\n      performance\n        .getEntriesByName(name)\n        .filter((entry) => entry.entryType === \"mark\") as PerformanceMark[]\n    ).filter((mark) => mark.detail.sessionId === sessionId);\n    allMarks.push(...marks);\n  }\n  return allMarks.map(performanceMarkToJson);\n}\n", "import { chalkStderr } from \"chalk\";\nimport { spawn, ChildProcess } from \"child_process\";\nimport { OneoffCtx } from \"../../bundler/context.js\";\nimport {\n  logError,\n  logFinishedStep,\n  logMessage,\n  logWarning,\n  showSpinner,\n  showSpinnerIfSlow,\n  stopSpinner,\n} from \"../../bundler/log.js\";\nimport { runPush } from \"./components.js\";\nimport { performance } from \"perf_hooks\";\nimport path from \"path\";\nimport { LogManager, LogMode, watchLogs } from \"./logs.js\";\nimport { PushOptions } from \"./components.js\";\nimport {\n  formatDuration,\n  getCurrentTimeString,\n  waitForever,\n  waitUntilCalled,\n} from \"./utils/utils.js\";\nimport { Crash, WatchContext, Watcher } from \"./watch.js\";\nimport { runFunctionAndLog, subscribe } from \"./run.js\";\nimport { Value } from \"../../values/index.js\";\nimport { DeploymentType } from \"./api.js\";\nimport { readProjectConfig, getAuthKitConfig } from \"./config.js\";\nimport {\n  syncAuthKitConfigAfterPush,\n  ensureAuthKitProvisionedBeforeBuild,\n} from \"./workos/workos.js\";\nimport { handleDashboard } from \"./localDeployment/dashboard.js\";\nimport { loadDeploymentConfig } from \"./localDeployment/filePaths.js\";\nimport { LocalDeploymentError } from \"./localDeployment/errors.js\";\n\nexport async function devAgainstDeployment(\n  ctx: OneoffCtx,\n  credentials: {\n    url: string;\n    adminKey: string;\n    deploymentName: string | null;\n    deploymentType?: DeploymentType;\n    backendVersion?: string | undefined;\n  },\n  devOptions: {\n    verbose: boolean;\n    typecheck: \"enable\" | \"try\" | \"disable\";\n    typecheckComponents: boolean;\n    codegen: boolean;\n    once: boolean;\n    untilSuccess: boolean;\n    run?:\n      | { kind: \"function\"; name: string; component?: string | undefined }\n      | { kind: \"shell\"; command: string }\n      | undefined;\n    tailLogs: LogMode;\n    traceEvents: boolean;\n    debugBundlePath?: string | undefined;\n    debugNodeApis: boolean;\n    liveComponentSources: boolean;\n    pushAllModules: boolean;\n    allowUnstagingSchema: boolean;\n  },\n) {\n  const logManager = new LogManager(devOptions.tailLogs);\n\n  // Pre-flight check: Ensure AuthKit is provisioned before starting dev\n  const { projectConfig } = await readProjectConfig(ctx);\n  const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n\n  if (authKitConfig && credentials.deploymentName) {\n    // Only provision for cloud deployments (dev/preview/prod)\n    // Skip for local and anonymous deployments\n    const deploymentType = credentials.deploymentType;\n    if (\n      deploymentType === \"dev\" ||\n      deploymentType === \"preview\" ||\n      deploymentType === \"prod\"\n    ) {\n      await ensureAuthKitProvisionedBeforeBuild(\n        ctx,\n        credentials.deploymentName,\n        { deploymentUrl: credentials.url, adminKey: credentials.adminKey },\n        deploymentType,\n      );\n    }\n  }\n\n  // Anonymous mode starts a local dashboard server alongside long-running `npx convex dev` commands.\n  if (\n    !devOptions.once &&\n    !devOptions.untilSuccess &&\n    credentials.deploymentType === \"anonymous\" &&\n    credentials.deploymentName !== null\n  ) {\n    const deploymentConfig = loadDeploymentConfig(\n      ctx,\n      \"anonymous\",\n      credentials.deploymentName,\n    );\n    if (deploymentConfig === null) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Could not find local deployment config. This is a bug in Convex.`,\n        errForSentry: new LocalDeploymentError(\n          `Could not find local deployment config to start the anonymous dashboard.`,\n        ),\n      });\n    }\n    await handleDashboard(\n      ctx,\n      {\n        name: credentials.deploymentName,\n        cloudPort: deploymentConfig.ports.cloud,\n        adminKey: deploymentConfig.adminKey,\n      },\n      {\n        backendVersion: credentials.backendVersion,\n      },\n    );\n  }\n\n  const promises = [];\n  if (devOptions.tailLogs !== \"disable\") {\n    promises.push(\n      watchLogs(ctx, credentials.url, credentials.adminKey, \"stderr\", {\n        logManager,\n        success: false,\n      }),\n    );\n  }\n\n  promises.push(\n    watchAndPush(\n      ctx,\n      {\n        ...credentials,\n        verbose: devOptions.verbose,\n        dryRun: false,\n        typecheck: devOptions.typecheck,\n        typecheckComponents: devOptions.typecheckComponents,\n        debug: false,\n        debugBundlePath: devOptions.debugBundlePath,\n        debugNodeApis: devOptions.debugNodeApis,\n        codegen: devOptions.codegen,\n        liveComponentSources: devOptions.liveComponentSources,\n        pushAllModules: devOptions.pushAllModules,\n        logManager, // Pass logManager to control logs during deploy\n        largeIndexDeletionCheck: \"no verification\", // `convex dev` can\u2019t push to prod\n        // `convex dev --prod` pushes straight to production, where an\n        // unstaged index on a large table blocks the push for the whole\n        // backfill; dev deployments are small enough to let it through.\n        largeIndexBackfillCheck:\n          credentials.deploymentType === \"prod\"\n            ? \"ask for confirmation\"\n            : \"no verification\",\n        stagedValidatorDeletionCheck:\n          credentials.deploymentType === \"prod\"\n            ? devOptions.allowUnstagingSchema\n              ? \"has confirmation\"\n              : \"ask for confirmation\"\n            : \"no verification\",\n        warnOnSlowSchemaValidation: true,\n        message: null,\n      },\n      devOptions,\n    ),\n  );\n  await Promise.race(promises);\n  await ctx.flushAndExit(0);\n}\n\nexport async function watchAndPush(\n  outerCtx: OneoffCtx,\n  options: PushOptions,\n  cmdOptions: {\n    run?:\n      | { kind: \"function\"; name: string; component?: string | undefined }\n      | { kind: \"shell\"; command: string }\n      | undefined;\n    once: boolean;\n    untilSuccess: boolean;\n    traceEvents: boolean;\n  },\n) {\n  const watch: { watcher: Watcher | undefined } = { watcher: undefined };\n  const authKitCache: { lastAppliedConfig: string | undefined } = {\n    lastAppliedConfig: undefined,\n  };\n  let numFailures = 0;\n  let ran = false;\n  let pushed = false;\n  let shellChild: ChildProcess | undefined;\n  let shellExited: Promise<void> | undefined;\n  let shellCleanupHandle: string | undefined;\n  let shellSigintListener: (() => void) | undefined;\n  let tableNameTriggeringRetry;\n  let shouldRetryOnDeploymentEnvVarChange;\n  let isFirstPush = true; // Track if this is the first push in the session\n\n  try {\n    while (true) {\n      const start = performance.now();\n      tableNameTriggeringRetry = null;\n      shouldRetryOnDeploymentEnvVarChange = false;\n\n      const ctx = new WatchContext(\n        cmdOptions.traceEvents,\n        outerCtx.bigBrainAuth(),\n        isFirstPush,\n      );\n      options.logManager?.beginDeploy();\n      showSpinner(\"Preparing Convex functions...\");\n      try {\n        await runPush(ctx, options);\n        const end = performance.now();\n        // NOTE: If `runPush` throws, `endDeploy` will not be called.\n        // This allows you to see the output from the failed deploy without\n        // logs getting in the way.\n        options.logManager?.endDeploy();\n        numFailures = 0;\n        logFinishedStep(\n          `${getCurrentTimeString()} Convex functions ready! (${formatDuration(\n            end - start,\n          )})`,\n        );\n\n        // Sync AuthKit configuration if it has changed\n        const { projectConfig } = await readProjectConfig(ctx);\n        const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n\n        // Check if config has changed by comparing stringified versions\n        const currentConfigString = authKitConfig\n          ? JSON.stringify(authKitConfig)\n          : undefined;\n\n        // Skip sync on first push since ensureAuthKitProvisionedBeforeBuild already configured WorkOS\n        if (\n          !isFirstPush &&\n          currentConfigString !== authKitCache.lastAppliedConfig\n        ) {\n          // Config has changed, sync it\n          await syncAuthKitConfigAfterPush(ctx, projectConfig, {\n            deploymentUrl: options.url,\n            adminKey: options.adminKey,\n          });\n        }\n\n        // Always update cache after push (even if we skipped sync)\n        authKitCache.lastAppliedConfig = currentConfigString;\n        isFirstPush = false;\n        if (cmdOptions.run !== undefined && !ran) {\n          switch (cmdOptions.run.kind) {\n            case \"function\":\n              await runFunctionInDev(\n                ctx,\n                options,\n                cmdOptions.run.name,\n                cmdOptions.run.component,\n              );\n              break;\n            case \"shell\": {\n              // Spawn the shell command as a long-running child process,\n              // piping stdin/stdout/stderr. It runs alongside dev and is\n              // waited on during clean exit or killed on signal exit.\n              const shellCommand = cmdOptions.run.command;\n              const signalShellChild = (signal: NodeJS.Signals) => {\n                if (!shellChild) {\n                  return;\n                }\n                const child = shellChild;\n                // Kill the entire process group so children of the shell\n                // are also killed.\n                try {\n                  if (child.pid !== undefined) {\n                    // Kill the negative PID to signal the entire process\n                    // group. Falls back to the child directly if the\n                    // group is already gone.\n                    try {\n                      process.kill(-child.pid, signal);\n                    } catch {\n                      child.kill(signal);\n                    }\n                  } else {\n                    child.kill(signal);\n                  }\n                } catch {\n                  // Child may already be dead.\n                }\n              };\n              const clearShellSigintListener = () => {\n                if (shellSigintListener) {\n                  process.off(\"SIGINT\", shellSigintListener);\n                  shellSigintListener = undefined;\n                }\n              };\n              shellChild = spawn(shellCommand, [], {\n                shell: true,\n                stdio: \"inherit\",\n                detached: true,\n              });\n              shellSigintListener = () => {\n                clearShellSigintListener();\n                signalShellChild(\"SIGINT\");\n              };\n              process.prependListener(\"SIGINT\", shellSigintListener);\n              shellCleanupHandle = outerCtx.registerCleanup(async () => {\n                if (shellSigintListener) {\n                  clearShellSigintListener();\n                } else {\n                  // If the listener already fired (and cleared itself),\n                  // the child got SIGINT \u2014 give it a moment to exit on\n                  // its own before escalating to SIGTERM.\n                  const SIGTERM_ESCALATION_MS = 1000;\n                  await Promise.race([\n                    shellExited,\n                    new Promise((resolve) =>\n                      setTimeout(resolve, SIGTERM_ESCALATION_MS),\n                    ),\n                  ]);\n                }\n                if (shellChild) {\n                  signalShellChild(\"SIGTERM\");\n                }\n                await shellExited;\n              });\n              shellExited = new Promise<void>((resolve) => {\n                shellChild!.on(\"error\", (error) => {\n                  logError(\n                    `Failed to run command \\`${shellCommand}\\`: ${error.message}`,\n                  );\n                  shellChild = undefined;\n                  resolve();\n                  void outerCtx.flushAndExit(1);\n                });\n                shellChild!.on(\"exit\", (code, signal) => {\n                  shellChild = undefined;\n                  resolve();\n                  // If killed by a signal (e.g. from cleanup on shutdown),\n                  // don't treat it as a failure \u2014 convex dev is already\n                  // shutting down.\n                  if (signal) {\n                    return;\n                  }\n                  if (code !== null && code !== 0) {\n                    logError(\n                      `Command \\`${shellCommand}\\` exited with code ${code}`,\n                    );\n                    void outerCtx.flushAndExit(1);\n                  }\n                });\n              });\n              break;\n            }\n            default: {\n              cmdOptions.run satisfies never;\n              // Don't return this since it'll bypass the `catch` below.\n              await ctx.crash({\n                exitCode: 1,\n                errorType: \"fatal\",\n                printedMessage: `Unexpected arguments for --run`,\n                errForSentry: `Unexpected arguments for --run: ${JSON.stringify(\n                  cmdOptions.run,\n                )}`,\n              });\n            }\n          }\n          ran = true;\n        }\n        pushed = true;\n      } catch (e: any) {\n        // Crash the app on unexpected errors.\n        if (!(e instanceof Crash) || !e.errorType) {\n          // eslint-disable-next-line no-restricted-syntax\n          throw e;\n        }\n        if (e.errorType === \"fatal\") {\n          break;\n        }\n        // Retry after an exponential backoff if we hit a transient error.\n        if (e.errorType === \"transient\" || e.errorType === \"already handled\") {\n          const delay = nextBackoff(numFailures);\n          numFailures += 1;\n          if (e.errorType === \"transient\") {\n            logWarning(\n              chalkStderr.yellow(\n                `Failed due to network error, retrying in ${formatDuration(\n                  delay,\n                )}...`,\n              ),\n            );\n          }\n          await new Promise((resolve) => setTimeout(resolve, delay));\n          continue;\n        }\n\n        // Fall through if we had a filesystem-based error.\n        // TODO(sarah): Replace this with `logError`.\n        // eslint-disable-next-line no-console\n        console.assert(\n          e.errorType === \"invalid filesystem data\" ||\n            e.errorType === \"invalid filesystem or env vars\" ||\n            e.errorType[\"invalid filesystem or db data\"] !== undefined,\n        );\n        if (e.errorType === \"invalid filesystem or env vars\") {\n          shouldRetryOnDeploymentEnvVarChange = true;\n        } else if (\n          e.errorType !== \"invalid filesystem data\" &&\n          e.errorType[\"invalid filesystem or db data\"] !== undefined\n        ) {\n          tableNameTriggeringRetry =\n            e.errorType[\"invalid filesystem or db data\"];\n        }\n        if (cmdOptions.once) {\n          await outerCtx.flushAndExit(1, e.errorType);\n        }\n        // Make sure that we don't spin if this push failed\n        // in any edge cases that didn't call `logFailure`\n        // before throwing.\n        stopSpinner();\n      }\n      if (cmdOptions.once) {\n        return;\n      }\n      if (pushed && cmdOptions.untilSuccess) {\n        return;\n      }\n      const fileSystemWatch = getFileSystemWatch(ctx, watch, cmdOptions);\n      const tableWatch = getTableWatch(\n        ctx,\n        options,\n        tableNameTriggeringRetry?.tableName ?? null,\n        tableNameTriggeringRetry?.componentPath,\n      );\n      const envVarWatch = getDeplymentEnvVarWatch(\n        ctx,\n        options,\n        shouldRetryOnDeploymentEnvVarChange,\n      );\n      await Promise.race([\n        fileSystemWatch.watch(),\n        tableWatch.watch(),\n        envVarWatch.watch(),\n      ]);\n      fileSystemWatch.stop();\n      void tableWatch.stop();\n      void envVarWatch.stop();\n    }\n  } finally {\n    // On clean exit (e.g. --once, --until-success), wait for the shell\n    // command to finish naturally. Keep the SIGINT listener active so\n    // Ctrl+C during the wait still forwards to the child. On signal\n    // exit (e.g. Ctrl+C), the registered cleanup handler will have\n    // already killed it.\n    if (shellExited) {\n      await shellExited;\n    }\n    if (shellSigintListener) {\n      process.off(\"SIGINT\", shellSigintListener);\n      shellSigintListener = undefined;\n    }\n    if (shellCleanupHandle) {\n      outerCtx.removeCleanup(shellCleanupHandle);\n    }\n  }\n}\n\nasync function runFunctionInDev(\n  ctx: WatchContext,\n  credentials: {\n    url: string;\n    adminKey: string;\n  },\n  functionName: string,\n  componentPath: string | undefined,\n) {\n  await runFunctionAndLog(ctx, {\n    deploymentUrl: credentials.url,\n    adminKey: credentials.adminKey,\n    functionName,\n    argsString: \"{}\",\n    componentPath,\n    callbacks: {\n      onSuccess: () => {\n        logFinishedStep(`Finished running function \"${functionName}\"`);\n      },\n    },\n  });\n}\n\nfunction getTableWatch(\n  ctx: WatchContext,\n  credentials: {\n    url: string;\n    adminKey: string;\n  },\n  tableName: string | null,\n  componentPath: string | undefined,\n) {\n  return getFunctionWatch(ctx, {\n    deploymentUrl: credentials.url,\n    adminKey: credentials.adminKey,\n    parsedFunctionName: \"_system/cli/queryTable\",\n    getArgs: () => (tableName !== null ? { tableName } : null),\n    componentPath,\n  });\n}\n\nfunction getDeplymentEnvVarWatch(\n  ctx: WatchContext,\n  credentials: {\n    url: string;\n    adminKey: string;\n  },\n  shouldRetryOnDeploymentEnvVarChange: boolean,\n) {\n  return getFunctionWatch(ctx, {\n    deploymentUrl: credentials.url,\n    adminKey: credentials.adminKey,\n    parsedFunctionName: \"_system/cli/queryEnvironmentVariables\",\n    getArgs: () => (shouldRetryOnDeploymentEnvVarChange ? {} : null),\n    componentPath: undefined,\n  });\n}\n\nfunction getFunctionWatch(\n  ctx: WatchContext,\n  args: {\n    deploymentUrl: string;\n    adminKey: string;\n    parsedFunctionName: string;\n    getArgs: () => Record<string, Value> | null;\n    componentPath: string | undefined;\n  },\n) {\n  const [stopPromise, stop] = waitUntilCalled();\n  return {\n    watch: async () => {\n      const functionArgs = args.getArgs();\n      if (functionArgs === null) {\n        return waitForever();\n      }\n      let changes = 0;\n      return subscribe(ctx, {\n        deploymentUrl: args.deploymentUrl,\n        adminKey: args.adminKey,\n        parsedFunctionName: args.parsedFunctionName,\n        parsedFunctionArgs: functionArgs,\n        componentPath: args.componentPath,\n        until: stopPromise,\n        callbacks: {\n          onChange: () => {\n            changes++;\n            // First bump is just the initial results reporting\n            if (changes > 1) {\n              stop();\n            }\n          },\n        },\n      });\n    },\n    stop: () => {\n      stop();\n    },\n  };\n}\n\nfunction getFileSystemWatch(\n  ctx: WatchContext,\n  watch: { watcher: Watcher | undefined },\n  cmdOptions: { traceEvents: boolean },\n) {\n  let hasStopped = false;\n  return {\n    watch: async () => {\n      const observations = ctx.fs.finalize();\n      if (observations === \"invalidated\") {\n        logMessage(\"Filesystem changed during push, retrying...\");\n        return;\n      }\n      // Initialize the watcher if we haven't done it already. Chokidar expects to have a\n      // nonempty watch set at initialization, so we can't do it before running our first\n      // push.\n      if (!watch.watcher) {\n        watch.watcher = new Watcher(observations);\n        await showSpinnerIfSlow(\n          \"Preparing to watch files...\",\n          500,\n          async () => {\n            await watch.watcher!.ready();\n          },\n        );\n        stopSpinner();\n      }\n      // Watch new directories if needed.\n      watch.watcher.update(observations);\n\n      // Process events until we find one that overlaps with our previous observations.\n      let anyChanges = false;\n      do {\n        await watch.watcher.waitForEvent();\n        if (hasStopped) {\n          return;\n        }\n        for (const event of watch.watcher.drainEvents()) {\n          if (cmdOptions.traceEvents) {\n            logMessage(\n              \"Processing\",\n              event.name,\n              path.relative(\"\", event.absPath),\n            );\n          }\n          const result = observations.overlaps(event);\n          if (result.overlaps) {\n            const relPath = path.relative(\"\", event.absPath);\n            if (cmdOptions.traceEvents) {\n              logMessage(`${relPath} ${result.reason}, rebuilding...`);\n            }\n            anyChanges = true;\n            break;\n          }\n        }\n      } while (!anyChanges);\n\n      // Wait for the filesystem to quiesce before starting a new push. It's okay to\n      // drop filesystem events at this stage since we're already committed to doing\n      // a push and resubscribing based on that push's observations.\n      let deadline = performance.now() + quiescenceDelay;\n      while (true) {\n        const now = performance.now();\n        if (now >= deadline) {\n          break;\n        }\n        const remaining = deadline - now;\n        if (cmdOptions.traceEvents) {\n          logMessage(`Waiting for ${formatDuration(remaining)} to quiesce...`);\n        }\n        const remainingWait = new Promise<\"timeout\">((resolve) =>\n          setTimeout(() => resolve(\"timeout\"), deadline - now),\n        );\n        const result = await Promise.race([\n          remainingWait,\n          watch.watcher.waitForEvent().then<\"newEvents\">(() => \"newEvents\"),\n        ]);\n        if (result === \"newEvents\") {\n          for (const event of watch.watcher.drainEvents()) {\n            const result = observations.overlaps(event);\n            // Delay another `quiescenceDelay` since we had an overlapping event.\n            if (result.overlaps) {\n              if (cmdOptions.traceEvents) {\n                logMessage(\n                  `Received an overlapping event at ${event.absPath}, delaying push.`,\n                );\n              }\n              deadline = performance.now() + quiescenceDelay;\n            }\n          }\n        } else {\n          // Let the check above `break` from the loop if we're past our deadlne.\n          if (result !== \"timeout\") {\n            logError(\n              \"Assertion failed: Unexpected result from watcher: \" + result,\n            );\n          }\n        }\n      }\n    },\n    stop: () => {\n      hasStopped = true;\n    },\n  };\n}\n\nconst initialBackoff = 500;\nconst maxBackoff = 16000;\nconst quiescenceDelay = 500;\n\nexport function nextBackoff(prevFailures: number): number {\n  const baseBackoff = initialBackoff * Math.pow(2, prevFailures);\n  const actualBackoff = Math.min(baseBackoff, maxBackoff);\n  const jitter = actualBackoff * (Math.random() - 0.5);\n  return actualBackoff + jitter;\n}\n", "import path from \"path\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n  changeSpinner,\n  logFinishedStep,\n  logMessage,\n} from \"../../bundler/log.js\";\nimport {\n  ProjectConfig,\n  configFromProjectConfig,\n  debugIsolateEndpointBundles,\n  getFunctionsDirectoryPath,\n  readProjectConfig,\n  pullConfig,\n  diffConfig,\n} from \"./config.js\";\nimport {\n  finishPush,\n  reportPushCompleted,\n  startPush,\n  waitForSchema,\n} from \"./deploy2.js\";\nimport { version } from \"../version.js\";\nimport { ensureHasConvexDependency, functionsDir } from \"./utils/utils.js\";\nimport {\n  bundleDefinitions,\n  bundleImplementations,\n  componentGraph,\n} from \"./components/definition/bundle.js\";\nimport { isComponentDirectory } from \"./components/definition/directoryStructure.js\";\nimport {\n  doFinalComponentCodegen,\n  doInitialComponentCodegen,\n  CodegenOptions,\n  doInitConvexFolder,\n  doCodegen,\n} from \"./codegen.js\";\nimport {\n  AppDefinitionConfig,\n  ComponentDefinitionConfig,\n} from \"./deployApi/definitionConfig.js\";\nimport { typeCheckFunctionsInMode, TypeCheckMode } from \"./typecheck.js\";\nimport { withTmpDir } from \"../../bundler/fs.js\";\nimport { handleDebugBundlePath } from \"./debugBundlePath.js\";\nimport { chalkStderr } from \"chalk\";\nimport {\n  startPushResponseForLogging,\n  redactEnvironmentVariableValues,\n  StartPushRequest,\n  StartPushResponse,\n} from \"./deployApi/startPush.js\";\nimport { DetailedDeploymentCredentials } from \"./api.js\";\nimport { FinishPushDiff } from \"./deployApi/finishPush.js\";\nimport { Reporter, Span } from \"./tracing.js\";\nimport { DEFINITION_FILENAME_TS } from \"./components/constants.js\";\nimport { DeploymentType } from \"./api.js\";\nimport { deploymentDashboardUrlPage } from \"./dashboard.js\";\nimport { formatIndex, LargeIndexDeletionCheck } from \"./indexes.js\";\nimport { checkForLargeIndexDeletion } from \"./checkForLargeIndexDeletion.js\";\nimport { checkForSlowSchemaValidation } from \"./checkForSlowSchemaValidation.js\";\nimport {\n  checkForLargeIndexBackfill,\n  LargeIndexBackfillCheck,\n} from \"./checkForLargeIndexBackfill.js\";\nimport {\n  pushStagesValidators,\n  sharedSchemaEvaluation,\n} from \"./schemaEvaluation.js\";\nimport {\n  checkForStagedValidatorDeletion,\n  StagedValidatorDeletionCheck,\n} from \"./checkForStagedValidatorDeletion.js\";\nimport { LogManager } from \"./logs.js\";\nimport { createHash } from \"crypto\";\nimport { Bundle, BundleHash } from \"../../bundler/index.js\";\nimport { ModuleHashConfig } from \"./deployApi/modules.js\";\n\nexport type PushOptions = {\n  adminKey: string;\n  verbose: boolean;\n  dryRun: boolean;\n  typecheck: \"enable\" | \"try\" | \"disable\";\n  typecheckComponents: boolean;\n  debug: boolean;\n  debugBundlePath?: string | undefined;\n  debugNodeApis: boolean;\n  codegen: boolean;\n  url: string;\n  deploymentName: string | null;\n  deploymentType?: DeploymentType;\n  writePushRequest?: string | undefined;\n  liveComponentSources: boolean;\n  pushAllModules: boolean;\n  logManager?: LogManager | undefined;\n  largeIndexDeletionCheck: LargeIndexDeletionCheck;\n  largeIndexBackfillCheck: LargeIndexBackfillCheck;\n  stagedValidatorDeletionCheck: StagedValidatorDeletionCheck;\n  // Whether a dry run should warn when the schema change would block the\n  // deploy on a slow table walk. On for deploys; off for commands whose dry\n  // runs never deploy (e.g. codegen).\n  warnOnSlowSchemaValidation: boolean;\n  message: string | null;\n};\n\nexport async function runCodegen(\n  ctx: Context,\n  credentials: DetailedDeploymentCredentials | null,\n  options: CodegenOptions,\n) {\n  // This also ensures the current directory is the project root.\n  await ensureHasConvexDependency(ctx, \"codegen\");\n\n  const { configPath, projectConfig } = await readProjectConfig(ctx);\n  const functionsDirectoryPath = functionsDir(configPath, projectConfig);\n\n  if (options.init) {\n    await doInitConvexFolder(ctx, functionsDirectoryPath, {\n      dryRun: options.dryRun,\n      debug: options.debug,\n    });\n  }\n\n  if (!options.systemUdfs) {\n    if (credentials === null) {\n      return;\n    }\n\n    await startComponentsPushAndCodegen(\n      ctx,\n      Span.noop(),\n      projectConfig,\n      configPath,\n      {\n        ...options,\n        deploymentName: credentials.deploymentFields?.deploymentName ?? null,\n        ...(credentials.deploymentFields?.deploymentType !== undefined\n          ? { deploymentType: credentials.deploymentFields.deploymentType }\n          : {}),\n        url: credentials.url,\n        adminKey: credentials.adminKey,\n        generateCommonJSApi: options.commonjs,\n        verbose: !!process.env.CONVEX_VERBOSE,\n        codegen: true,\n        liveComponentSources: options.liveComponentSources,\n        typecheckComponents: false,\n        debugNodeApis: options.debugNodeApis,\n        // Code generation uses the source schema independently of deployment data.\n        largeIndexDeletionCheck: \"no verification\",\n        largeIndexBackfillCheck: \"no verification\",\n        stagedValidatorDeletionCheck: \"no verification\",\n        warnOnSlowSchemaValidation: false,\n      },\n    );\n  } else {\n    if (options.typecheck !== \"disable\") {\n      logMessage(chalkStderr.gray(\"Running TypeScript typecheck\u2026\"));\n    }\n\n    await doCodegen(ctx, functionsDirectoryPath, options.typecheck, {\n      dryRun: options.dryRun,\n      debug: options.debug,\n      generateCommonJSApi: options.commonjs,\n    });\n  }\n}\n\nexport async function runPush(ctx: Context, options: PushOptions) {\n  const { configPath, projectConfig } = await readProjectConfig(ctx);\n  await runComponentsPush(ctx, options, configPath, projectConfig);\n}\n\nexport function hash(bundle: Bundle) {\n  return createHash(\"sha256\")\n    .update(bundle.source)\n    .update(bundle.sourceMap || \"\")\n    .digest(\"hex\");\n}\n\nfunction isModuleTheSame(newBundle: Bundle, oldBundleHash: BundleHash) {\n  return (\n    newBundle.environment === oldBundleHash.environment &&\n    hash(newBundle) === oldBundleHash.hash\n  );\n}\n\nexport function partitionModulesByChanges(\n  functions: Bundle[],\n  remoteHashesByPath: Map<string, BundleHash>,\n): {\n  unchangedModuleHashes: ModuleHashConfig[];\n  changedModules: Bundle[];\n} {\n  // Partition modules based on whether they match the existing modules\n  const unchangedModuleHashes = functions\n    .filter((newBundle) => {\n      const oldBundleHash = remoteHashesByPath.get(newBundle.path);\n      return oldBundleHash && isModuleTheSame(newBundle, oldBundleHash);\n    })\n    .map((func) => ({\n      path: func.path,\n      environment: func.environment,\n      sha256: hash(func),\n    }));\n  const changedModules = functions.filter((newBundle) => {\n    const oldBundleHash = remoteHashesByPath.get(newBundle.path);\n    return !oldBundleHash || !isModuleTheSame(newBundle, oldBundleHash);\n  });\n  return { unchangedModuleHashes, changedModules };\n}\n\nasync function getUnchangedModuleHashesFromServer(\n  ctx: Context,\n  appImplementation: { functions: Bundle[] },\n  options: { url: string; adminKey: string },\n): Promise<{\n  unchangedModuleHashes: ModuleHashConfig[];\n  changedModules: Bundle[];\n}> {\n  const remoteConfigWithModuleHashes = await pullConfig(\n    ctx,\n    undefined,\n    undefined,\n    options.url,\n    options.adminKey,\n  );\n  const remoteHashesByPath = new Map(\n    remoteConfigWithModuleHashes.moduleHashes.map((moduleHash) => [\n      moduleHash.path,\n      moduleHash,\n    ]),\n  );\n  return partitionModulesByChanges(\n    appImplementation.functions,\n    remoteHashesByPath,\n  );\n}\n\nasync function startComponentsPushAndCodegen(\n  ctx: Context,\n  parentSpan: Span,\n  projectConfig: ProjectConfig,\n  configPath: string,\n  options: {\n    typecheck: TypeCheckMode;\n    typecheckComponents: boolean;\n    adminKey: string;\n    url: string;\n    deploymentName: string | null;\n    deploymentType?: DeploymentType;\n    verbose: boolean;\n    debugBundlePath?: string | undefined;\n    dryRun: boolean;\n    generateCommonJSApi?: boolean;\n    debug: boolean;\n    writePushRequest?: string | undefined;\n    codegen: boolean;\n    liveComponentSources?: boolean;\n    pushAllModules?: boolean;\n    debugNodeApis: boolean;\n    largeIndexDeletionCheck: LargeIndexDeletionCheck;\n    largeIndexBackfillCheck: LargeIndexBackfillCheck;\n    stagedValidatorDeletionCheck: StagedValidatorDeletionCheck;\n    warnOnSlowSchemaValidation: boolean;\n    codegenOnlyThisComponent?: string | undefined;\n  },\n): Promise<StartPushResponse | null> {\n  const convexDir = await getFunctionsDirectoryPath(ctx);\n\n  // '.' means use the process current working directory, it's the default behavior.\n  // Spelling it out here to be explicit for a future where this code can run\n  // from other directories.\n  // In esbuild the working directory is used to print error messages and resolving\n  // relatives paths passed to it. It generally doesn't matter for resolving imports,\n  // imports are resolved from the file where they are written.\n  const absWorkingDir = path.resolve(\".\");\n  const isComponent = isComponentDirectory(ctx, convexDir, true);\n  if (isComponent.kind === \"err\") {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `Invalid component root directory (${isComponent.why}): ${convexDir}`,\n    });\n  }\n\n  let rootComponent = isComponent.component;\n  if (options.codegenOnlyThisComponent) {\n    const absolutePath = path.resolve(options.codegenOnlyThisComponent);\n    let componentConfigPath: string;\n\n    // Must be a directory containing a convex.config.ts\n    componentConfigPath = path.join(absolutePath, DEFINITION_FILENAME_TS);\n    if (!ctx.fs.exists(componentConfigPath)) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem data\",\n        printedMessage: `Only directories with convex.config.ts files are supported, this directory does not: ${absolutePath}`,\n      });\n    }\n\n    const syntheticConfigPath = path.join(\n      rootComponent.path,\n      DEFINITION_FILENAME_TS,\n    );\n    rootComponent = {\n      isRoot: true,\n      path: rootComponent.path,\n      definitionPath: syntheticConfigPath,\n      isRootWithoutConfig: false,\n      syntheticComponentImport: componentConfigPath,\n    };\n  }\n\n  changeSpinner(\"Finding component definitions...\");\n  // Create a list of relevant component directories. These are just for knowing\n  // while directories to bundle in bundleDefinitions and bundleImplementations.\n  // This produces a bundle in memory as a side effect but it's thrown away.\n  const { components, dependencyGraph } = await parentSpan.enterAsync(\n    \"componentGraph\",\n    () =>\n      componentGraph(\n        ctx,\n        absWorkingDir,\n        rootComponent,\n        !!options.liveComponentSources,\n        options.verbose,\n      ),\n  );\n\n  // Initial codegen is everything we need to get code runnable:\n  // root components and other components need a basic _generated/api.ts etc.\n  // just to make the code bundleable and runnable so we can analyze.\n  if (options.codegen) {\n    changeSpinner(\"Generating server code...\");\n    await parentSpan.enterAsync(\"doInitialComponentCodegen\", () =>\n      withTmpDir(async (tmpDir) => {\n        // Skip the root in component cases\n        if (!rootComponent.syntheticComponentImport) {\n          // Do root first so if a component fails, we'll at least have a working root.\n          await doInitialComponentCodegen(ctx, tmpDir, rootComponent, options);\n        }\n        for (const directory of components.values()) {\n          if (directory.isRoot) {\n            continue;\n          }\n          // When --component-dir is used, only generate code for the target component\n          if (\n            rootComponent.syntheticComponentImport &&\n            directory.definitionPath !== rootComponent.syntheticComponentImport\n          ) {\n            continue;\n          }\n          await doInitialComponentCodegen(ctx, tmpDir, directory, options);\n        }\n      }),\n    );\n  }\n\n  changeSpinner(\"Bundling component definitions...\");\n  // This bundles everything but the actual function definitions\n  const {\n    appDefinitionSpecWithoutImpls,\n    componentDefinitionSpecsWithoutImpls,\n  } = await parentSpan.enterAsync(\"bundleDefinitions\", () =>\n    bundleDefinitions(\n      ctx,\n      absWorkingDir,\n      dependencyGraph,\n      rootComponent,\n      // Note that this *includes* the root component.\n      [...components.values()],\n      !!options.liveComponentSources,\n      options.verbose,\n    ),\n  );\n\n  if (options.debugNodeApis) {\n    await debugIsolateEndpointBundles(ctx, projectConfig, configPath);\n    logFinishedStep(\n      \"All non-'use node' entry points successfully bundled. Skipping rest of push.\",\n    );\n    return null;\n  }\n\n  changeSpinner(\"Bundling component schemas and implementations...\");\n  const { appImplementation, componentImplementations } =\n    await parentSpan.enterAsync(\"bundleImplementations\", () =>\n      bundleImplementations({\n        ctx,\n        rootComponentDirectory: rootComponent,\n        // When running codegen for a specific component, don't bundle the root.\n        componentDirectories: [...components.values()].filter(\n          (dir) => !dir.isRoot && !dir.syntheticComponentImport,\n        ),\n        nodeExternalPackages: projectConfig.node.externalPackages,\n        extraConditions: options.liveComponentSources\n          ? [\"@convex-dev/component-source\"]\n          : [],\n        verbose: options.verbose,\n        includeSourcesContent:\n          projectConfig.bundler?.includeSourcesContent ?? false,\n      }),\n    );\n  if (options.debugBundlePath) {\n    const { config: localConfig } = await configFromProjectConfig(\n      ctx,\n      projectConfig,\n      configPath,\n      options.verbose,\n    );\n    // TODO(ENG-6972): Actually write the bundles for components.\n    await handleDebugBundlePath(ctx, options.debugBundlePath, localConfig);\n    logMessage(\n      `Wrote bundle and metadata for modules in the root to ${options.debugBundlePath}. Skipping rest of push.`,\n    );\n    return null;\n  }\n\n  // We're just using the version this CLI is running with for now.\n  // This could be different than the version of `convex` the app runs with\n  // if the CLI is installed globally.\n  // TODO: This should be the version of the `convex` package used by each\n  // component, and may be different for each component.\n  const udfServerVersion = version;\n\n  const { unchangedModuleHashes, changedModules } = options.pushAllModules\n    ? {\n        unchangedModuleHashes: [],\n        changedModules: appImplementation.functions,\n      }\n    : await parentSpan.enterAsync(\"getUnchangedModuleHashesFromServer\", () =>\n        getUnchangedModuleHashesFromServer(ctx, appImplementation, options),\n      );\n\n  const appDefinition: AppDefinitionConfig = {\n    ...appDefinitionSpecWithoutImpls,\n    schema: appImplementation.schema,\n    changedModules,\n    unchangedModuleHashes,\n    udfServerVersion,\n  };\n\n  const componentDefinitions: ComponentDefinitionConfig[] = [];\n  for (const componentDefinition of componentDefinitionSpecsWithoutImpls) {\n    const impl = componentImplementations.filter(\n      (impl) => impl.definitionPath === componentDefinition.definitionPath,\n    )[0];\n    if (!impl) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `missing! couldn't find ${componentDefinition.definitionPath} in ${componentImplementations.map((impl) => impl.definitionPath).toString()}`,\n      });\n    }\n    componentDefinitions.push({\n      ...componentDefinition,\n      ...impl,\n      udfServerVersion,\n    });\n  }\n  const startPushRequest = {\n    adminKey: options.adminKey,\n    dryRun: options.dryRun,\n    functions: projectConfig.functions,\n    appDefinition,\n    componentDefinitions,\n    nodeDependencies: appImplementation.externalNodeDependencies,\n    nodeVersion: projectConfig.node.nodeVersion,\n    forCodegen: !!options.codegenOnlyThisComponent,\n  };\n  if (options.writePushRequest) {\n    const pushRequestPath = path.resolve(options.writePushRequest);\n    ctx.fs.writeUtf8File(\n      `${pushRequestPath}.json`,\n      JSON.stringify(startPushRequest),\n    );\n    return null;\n  }\n  logStartPushSizes(parentSpan, startPushRequest);\n\n  const schemaEvaluation = sharedSchemaEvaluation(\n    ctx,\n    startPushRequest,\n    options,\n  );\n  if (options.largeIndexDeletionCheck !== \"no verification\") {\n    await parentSpan.enterAsync(\"checkForLargeIndexDeletion\", (span) =>\n      checkForLargeIndexDeletion({\n        ctx,\n        span,\n        request: startPushRequest,\n        options,\n        schemaEvaluation,\n        askForConfirmation:\n          options.largeIndexDeletionCheck === \"ask for confirmation\",\n      }),\n    );\n  }\n\n  const largeIndexBackfillCheck = options.largeIndexBackfillCheck;\n  if (largeIndexBackfillCheck !== \"no verification\") {\n    await parentSpan.enterAsync(\"checkForLargeIndexBackfill\", (span) =>\n      checkForLargeIndexBackfill({\n        ctx,\n        span,\n        schemaEvaluation,\n        options,\n        // A dry run never blocks on a backfill, so it only reports.\n        mode: options.dryRun ? \"warn\" : largeIndexBackfillCheck,\n      }),\n    );\n  }\n\n  const stagedValidatorDeletionCheck = options.stagedValidatorDeletionCheck;\n  if (stagedValidatorDeletionCheck !== \"no verification\") {\n    await parentSpan.enterAsync(\n      \"checkForStagedValidatorDeletion\",\n      async (span) => {\n        const response = await schemaEvaluation(span);\n        await checkForStagedValidatorDeletion({\n          ctx,\n          response,\n          askForConfirmation:\n            stagedValidatorDeletionCheck === \"ask for confirmation\",\n          // A dry run previews the confirmation required by a real push.\n          dryRun: options.dryRun,\n        });\n      },\n    );\n  }\n\n  // A real push evaluates the schema only when the evaluation is already\n  // paid for by the unstaging check or the pushed schema stages a validator,\n  // so `dev` pushes of ordinary schemas skip the isolate evaluation and round\n  // trip that the status report would otherwise add on every save.\n  if (\n    options.warnOnSlowSchemaValidation &&\n    (options.dryRun ||\n      stagedValidatorDeletionCheck !== \"no verification\" ||\n      pushStagesValidators(startPushRequest))\n  ) {\n    await parentSpan.enterAsync(\"checkForSlowSchemaValidation\", (span) =>\n      checkForSlowSchemaValidation({\n        span,\n        schemaEvaluation,\n        dryRun: options.dryRun,\n      }),\n    );\n  }\n\n  changeSpinner(\"Uploading functions to Convex...\");\n  const startPushResponse = await parentSpan.enterAsync(\"startPush\", (span) =>\n    startPush(ctx, span, startPushRequest, options),\n  );\n\n  if (options.verbose) {\n    logMessage(\n      \"startPush: \" +\n        JSON.stringify(startPushResponseForLogging(startPushResponse), null, 2),\n    );\n  }\n\n  if (options.codegen) {\n    changeSpinner(\"Generating TypeScript bindings...\");\n    await parentSpan.enterAsync(\"doFinalComponentCodegen\", () =>\n      withTmpDir(async (tmpDir) => {\n        // TODO generating code for the root component last might be better DX\n        // When running codegen for a specific component, don't generate types for the root\n        if (!rootComponent.syntheticComponentImport) {\n          // Do the root first\n          await doFinalComponentCodegen(\n            ctx,\n            tmpDir,\n            rootComponent,\n            rootComponent,\n            startPushResponse,\n            components,\n            options,\n          );\n        }\n        for (const directory of components.values()) {\n          if (directory.isRoot) {\n            continue;\n          }\n          // When --component-dir is used, only generate code for the target component\n          if (\n            rootComponent.syntheticComponentImport &&\n            directory.definitionPath !== rootComponent.syntheticComponentImport\n          ) {\n            continue;\n          }\n          await doFinalComponentCodegen(\n            ctx,\n            tmpDir,\n            rootComponent,\n            directory,\n            startPushResponse,\n            components,\n            options,\n          );\n        }\n      }),\n    );\n  }\n\n  changeSpinner(\"Running TypeScript...\");\n  await parentSpan.enterAsync(\"typeCheckFunctionsInMode\", async () => {\n    // When running codegen for a specific component, don't typecheck the root\n    if (!rootComponent.syntheticComponentImport) {\n      await typeCheckFunctionsInMode(\n        ctx,\n        options.typecheck,\n        rootComponent.path,\n      );\n    }\n    if (options.typecheckComponents) {\n      for (const directory of components.values()) {\n        if (!directory.isRoot) {\n          await typeCheckFunctionsInMode(\n            ctx,\n            options.typecheck,\n            directory.path,\n          );\n        }\n      }\n    } else if (rootComponent.syntheticComponentImport) {\n      // When running codegen for a specific component, only typecheck that component.\n      for (const directory of components.values()) {\n        if (\n          directory.isRoot ||\n          directory.definitionPath !== rootComponent.syntheticComponentImport\n        ) {\n          continue;\n        }\n        await typeCheckFunctionsInMode(ctx, options.typecheck, directory.path);\n      }\n    }\n  });\n\n  return startPushResponse;\n}\n\nfunction logStartPushSizes(span: Span, startPushRequest: StartPushRequest) {\n  let v8Size = 0;\n  let v8Count = 0;\n  let nodeSize = 0;\n  let nodeCount = 0;\n\n  for (const componentDefinition of startPushRequest.componentDefinitions) {\n    for (const module of componentDefinition.functions) {\n      if (module.environment === \"isolate\") {\n        v8Size += module.source.length + (module.sourceMap ?? \"\").length;\n        v8Count += 1;\n      } else if (module.environment === \"node\") {\n        nodeSize += module.source.length + (module.sourceMap ?? \"\").length;\n        nodeCount += 1;\n      }\n    }\n  }\n  span.setProperty(\"v8_size\", v8Size.toString());\n  span.setProperty(\"v8_count\", v8Count.toString());\n  span.setProperty(\"node_size\", nodeSize.toString());\n  span.setProperty(\"node_count\", nodeCount.toString());\n}\n\nexport async function runComponentsPush(\n  ctx: Context,\n  options: PushOptions,\n  configPath: string,\n  projectConfig: ProjectConfig,\n) {\n  const reporter = new Reporter();\n  const pushSpan = Span.root(reporter, \"runComponentsPush\");\n  pushSpan.setProperty(\"cli_version\", version);\n  const verbose = options.verbose || options.dryRun;\n\n  await ensureHasConvexDependency(ctx, \"push\");\n\n  const startPushResponse = await pushSpan.enterAsync(\n    \"startComponentsPushAndCodegen\",\n    (span) =>\n      startComponentsPushAndCodegen(\n        ctx,\n        span,\n        projectConfig,\n        configPath,\n        options,\n      ),\n  );\n  if (!startPushResponse) {\n    return;\n  }\n\n  await pushSpan.enterAsync(\"waitForSchema\", (span) =>\n    waitForSchema(ctx, span, startPushResponse, options),\n  );\n\n  if (verbose) {\n    const remoteConfigWithModuleHashes = await pullConfig(\n      ctx,\n      undefined,\n      undefined,\n      options.url,\n      options.adminKey,\n    );\n\n    const { config: localConfig } = await configFromProjectConfig(\n      ctx,\n      projectConfig,\n      configPath,\n      options.verbose,\n    );\n\n    changeSpinner(\"Diffing local code and deployment state...\");\n    const { diffString } = diffConfig(\n      remoteConfigWithModuleHashes,\n      localConfig,\n    );\n\n    logFinishedStep(\n      `Remote config ${\n        options.dryRun ? \"would\" : \"will\"\n      } be overwritten with the following changes:\\n  ` +\n        diffString.replace(/\\n/g, \"\\n  \"),\n    );\n  }\n\n  const finishPushResponse = await pushSpan.enterAsync(\"finishPush\", (span) =>\n    finishPush(ctx, span, startPushResponse, options),\n  );\n  printDiff(startPushResponse, finishPushResponse, options);\n  pushSpan.end();\n\n  // Asynchronously report that the push completed.\n  if (!options.dryRun) {\n    void reportPushCompleted(ctx, options.adminKey, options.url, reporter);\n  }\n}\n\nfunction printDiff(\n  startPushResponse: StartPushResponse,\n  finishPushResponse: FinishPushDiff,\n  opts: { verbose: boolean; dryRun: boolean; deploymentName: string | null },\n) {\n  if (opts.verbose) {\n    const diffString = JSON.stringify(\n      redactEnvironmentVariableValues(\n        finishPushResponse,\n        startPushResponse.environmentVariables,\n      ),\n      null,\n      2,\n    );\n    logMessage(diffString);\n    return;\n  }\n  const indexDiffs = startPushResponse.schemaChange.indexDiffs;\n  const { componentDiffs } = finishPushResponse;\n\n  // Print out index diffs for the root component.\n  let rootDiff = indexDiffs?.[\"\"] || componentDiffs[\"\"]?.indexDiff;\n  if (rootDiff) {\n    if (rootDiff.removed_indexes.length > 0) {\n      let msg = `${opts.dryRun ? \"Would delete\" : \"Deleted\"} table indexes:\\n`;\n      for (const index of rootDiff.removed_indexes) {\n        msg += `  [-] ${formatIndex(index)}\\n`;\n      }\n      msg = msg.slice(0, -1); // strip last new line\n      logFinishedStep(msg);\n    }\n\n    const addedEnabled = rootDiff.added_indexes.filter((i) => !i.staged);\n    if (addedEnabled.length > 0) {\n      let msg = `${opts.dryRun ? \"Would add\" : \"Added\"} table indexes:\\n`;\n      for (const index of addedEnabled) {\n        msg += `  [+] ${formatIndex(index)}\\n`;\n      }\n      msg = msg.slice(0, -1); // strip last new line\n      logFinishedStep(msg);\n    }\n\n    const addedStaged = rootDiff.added_indexes.filter((i) => i.staged);\n    if (addedStaged.length > 0) {\n      let msg = `${opts.dryRun ? \"Would add\" : \"Added\"} staged table indexes:\\n`;\n      for (const index of addedStaged) {\n        const table = index.name.split(\".\")[0];\n        const progressLink = deploymentDashboardUrlPage(\n          opts.deploymentName,\n          `/data?table=${table}&showIndexes=true`,\n        );\n        msg += `  [+] ${formatIndex(index)}\\n`;\n        msg += `      See progress: ${progressLink}\\n`;\n      }\n      msg = msg.slice(0, -1); // strip last new line\n      logFinishedStep(msg);\n    }\n\n    if (rootDiff.enabled_indexes && rootDiff.enabled_indexes.length > 0) {\n      let msg = opts.dryRun\n        ? `These indexes would be enabled:\\n`\n        : `These indexes are now enabled:\\n`;\n      for (const index of rootDiff.enabled_indexes) {\n        msg += `  [*] ${formatIndex(index)}\\n`;\n      }\n      msg = msg.slice(0, -1); // strip last new line\n      logFinishedStep(msg);\n    }\n\n    if (rootDiff.disabled_indexes && rootDiff.disabled_indexes.length > 0) {\n      let msg = opts.dryRun\n        ? `These indexes would be staged:\\n`\n        : `These indexes are now staged:\\n`;\n      for (const index of rootDiff.disabled_indexes) {\n        msg += `  [*] ${formatIndex(index)}\\n`;\n      }\n      msg = msg.slice(0, -1); // strip last new line\n      logFinishedStep(msg);\n    }\n  }\n\n  // Only show component level diffs for other components.\n  for (const [componentPath, componentDiff] of Object.entries(componentDiffs)) {\n    if (componentPath === \"\") {\n      continue;\n    }\n    if (componentDiff.diffType.type === \"create\") {\n      logFinishedStep(`Installed component ${componentPath}.`);\n    }\n    if (componentDiff.diffType.type === \"unmount\") {\n      logFinishedStep(`Unmounted component ${componentPath}.`);\n    }\n    if (componentDiff.diffType.type === \"remount\") {\n      logFinishedStep(`Remounted component ${componentPath}.`);\n    }\n  }\n}\n", "import { Context } from \"../../bundler/context.js\";\nimport {\n  changeSpinner,\n  logError,\n  logFailure,\n  logFinishedStep,\n  logVerbose,\n  showSpinner,\n} from \"../../bundler/log.js\";\nimport { spawnSync } from \"child_process\";\nimport {\n  deploymentFetch,\n  logAndHandleFetchError,\n  typedDeploymentClient,\n} from \"./utils/utils.js\";\nimport {\n  EvaluatePushResponse,\n  evaluatePushResponse,\n  schemaStatus,\n  SchemaStatus,\n  StartPushRequest,\n  startPushResponse,\n  StartPushResponse,\n} from \"./deployApi/startPush.js\";\nimport {\n  EvaluateSchemaResponse,\n  evaluateSchemaResponse,\n} from \"./deployApi/evaluateSchema.js\";\nimport {\n  AppDefinitionConfig,\n  ComponentDefinitionConfig,\n} from \"./deployApi/definitionConfig.js\";\nimport { chalkStderr } from \"chalk\";\nimport { finishPushDiff, FinishPushDiff } from \"./deployApi/finishPush.js\";\nimport { Reporter, Span } from \"./tracing.js\";\nimport { promisify } from \"node:util\";\nimport zlib from \"node:zlib\";\nimport { PushOptions } from \"./components.js\";\nimport { DeploymentType } from \"./api.js\";\nimport { runPush } from \"./components.js\";\nimport { suggestedEnvVarNames } from \"./envvars.js\";\nimport {\n  handlePushConfigError,\n  readProjectConfig,\n  getAuthKitConfig,\n} from \"./config.js\";\nimport { deploymentDashboardUrlPage } from \"./dashboard.js\";\nimport { addProgressLinkIfSlow } from \"./indexes.js\";\nimport { ensureAuthKitProvisionedBeforeBuild } from \"./workos/workos.js\";\n\nconst brotli = promisify(zlib.brotliCompress);\n\nasync function brotliCompress(ctx: Context, data: string): Promise<Buffer> {\n  const start = performance.now();\n  const result = await brotli(data, {\n    params: {\n      [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n      [zlib.constants.BROTLI_PARAM_QUALITY]: 4,\n    },\n  });\n  const end = performance.now();\n  const duration = end - start;\n  logVerbose(\n    `Compressed ${(data.length / 1024).toFixed(2)}KiB to ${(result.length / 1024).toFixed(2)}KiB (${((result.length / data.length) * 100).toFixed(2)}%) in ${duration.toFixed(2)}ms`,\n  );\n  return result;\n}\n\n/** Push configuration2 to the given remote origin. */\nexport async function startPush(\n  ctx: Context,\n  span: Span,\n  request: StartPushRequest,\n  options: {\n    url: string;\n    deploymentName: string | null;\n    deploymentType?: DeploymentType;\n  },\n): Promise<StartPushResponse> {\n  const response = await pushCode(\n    ctx,\n    span,\n    request,\n    options,\n    \"/api/deploy2/start_push\",\n  );\n  return startPushResponse.parse(response);\n}\n\nexport async function evaluatePush(\n  ctx: Context,\n  span: Span,\n  request: StartPushRequest,\n  options: {\n    url: string;\n    deploymentName: string | null;\n    deploymentType?: DeploymentType;\n  },\n): Promise<EvaluatePushResponse> {\n  const response = await pushCode(\n    ctx,\n    span,\n    request,\n    options,\n    \"/api/deploy2/evaluate_push\",\n  );\n  return evaluatePushResponse.parse(response);\n}\n\nexport async function evaluateSchema(\n  ctx: Context,\n  span: Span,\n  request: StartPushRequest,\n  options: {\n    url: string;\n    deploymentName: string | null;\n    deploymentType?: DeploymentType;\n  },\n  // When set, a failed evaluation throws the raw error instead of crashing\n  // the process, so best-effort callers (e.g. advisory checks) can recover.\n  bestEffort?: boolean,\n): Promise<EvaluateSchemaResponse> {\n  const response = await pushCode(\n    ctx,\n    span,\n    request,\n    options,\n    \"/api/deploy2/evaluate_schema\",\n    bestEffort,\n  );\n  return evaluateSchemaResponse.parse(response);\n}\n\n// Retries for best-effort requests, where a transient failure should be\n// ridden out if possible but the command proceeds without the result\n// otherwise.\nconst BEST_EFFORT_RETRIES = 5;\n\nasync function pushCode(\n  ctx: Context,\n  span: Span,\n  request: StartPushRequest,\n  options: {\n    url: string;\n    deploymentName: string | null;\n    deploymentType?: DeploymentType;\n  },\n  endpoint:\n    | \"/api/deploy2/start_push\"\n    | \"/api/deploy2/evaluate_push\"\n    | \"/api/deploy2/evaluate_schema\",\n  bestEffort?: boolean,\n): Promise<unknown> {\n  // Log a summary of the push request instead of the full object\n  const unchangedModuleCount =\n    request.appDefinition?.unchangedModuleHashes?.length ?? 0;\n  const changedModuleCount = request.appDefinition?.changedModules?.length ?? 0;\n  const requestSummary = {\n    hasAppDefinition: request.appDefinition !== undefined,\n    appFunctionCount: unchangedModuleCount + changedModuleCount,\n    hasAppSchema: request.appDefinition?.schema !== null,\n    componentCount: request.componentDefinitions?.length ?? 0,\n    hasDependencies: request.nodeDependencies?.length > 0,\n    dryRun: request.dryRun,\n  };\n  logVerbose(`Push request summary: ${JSON.stringify(requestSummary)}`);\n  const onError = (err: any) => {\n    if (err.toString() === \"TypeError: fetch failed\") {\n      changeSpinner(`Fetch failed, is ${options.url} correct? Retrying...`);\n    }\n  };\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl: options.url,\n    adminKey: request.adminKey,\n    onError,\n    // Best-effort callers tolerate failure, so retry only plausibly\n    // transient conditions \u2014 network errors and 5xx responses (e.g. table\n    // summaries still bootstrapping) \u2014 and fail fast on everything else,\n    // like a 404 from a deployment whose backend doesn't yet expose the\n    // endpoint.\n    ...(bestEffort\n      ? {\n          maxRetries: BEST_EFFORT_RETRIES,\n          shouldRetry: (error: Error | null, response: Response | null) =>\n            error !== null || (response !== null && response.status >= 500),\n        }\n      : {}),\n  });\n  try {\n    const response = await fetch(endpoint, {\n      body: await brotliCompress(ctx, JSON.stringify(request)),\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"Content-Encoding\": \"br\",\n        traceparent: span.encodeW3CTraceparent(),\n      },\n    });\n    return await response.json();\n  } catch (error: unknown) {\n    if (bestEffort) {\n      // The caller handles this itself instead of crashing the process.\n      // eslint-disable-next-line no-restricted-syntax\n      throw error;\n    }\n    return await handlePushConfigError(\n      ctx,\n      error,\n      \"Error: Unable to start push to \" + options.url,\n      options.deploymentName,\n      {\n        adminKey: request.adminKey,\n        deploymentUrl: options.url,\n        deploymentNotice: \"\",\n      },\n      options.deploymentType,\n    );\n  }\n}\n\n// Long poll every 10s for progress on schema validation.\nconst SCHEMA_TIMEOUT_MS = 10_000;\n\nexport async function waitForSchema(\n  ctx: Context,\n  span: Span,\n  startPush: StartPushResponse,\n  options: {\n    adminKey: string;\n    url: string;\n    dryRun: boolean;\n    deploymentName: string | null;\n  },\n) {\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl: options.url,\n    adminKey: options.adminKey,\n  });\n\n  const start = Date.now();\n  changeSpinner(\"Pushing code to your Convex deployment...\");\n\n  while (true) {\n    let currentStatus: SchemaStatus;\n    try {\n      const response = await fetch(\"/api/deploy2/wait_for_schema\", {\n        body: JSON.stringify({\n          adminKey: options.adminKey,\n          schemaChange: startPush.schemaChange,\n          timeoutMs: SCHEMA_TIMEOUT_MS,\n          dryRun: options.dryRun,\n        }),\n        method: \"POST\",\n        headers: {\n          traceparent: span.encodeW3CTraceparent(),\n        },\n      });\n      currentStatus = schemaStatus.parse(await response.json());\n    } catch (error: unknown) {\n      logFailure(\"Error: Unable to wait for schema from \" + options.url);\n      return await logAndHandleFetchError(ctx, error);\n    }\n    switch (currentStatus.type) {\n      case \"inProgress\": {\n        let schemaDone = true;\n        let indexesComplete = 0;\n        let indexesTotal = 0;\n        for (const componentStatus of Object.values(currentStatus.components)) {\n          if (!componentStatus.schemaValidationComplete) {\n            schemaDone = false;\n          }\n          indexesComplete += componentStatus.indexesComplete;\n          indexesTotal += componentStatus.indexesTotal;\n        }\n        const indexesDone = indexesComplete === indexesTotal;\n        let msg: string;\n        if (!indexesDone && !schemaDone) {\n          msg = addProgressLinkIfSlow(\n            `Backfilling indexes (${indexesComplete}/${indexesTotal} ready) and checking that documents match your schema...`,\n            options.deploymentName,\n            start,\n          );\n        } else if (!indexesDone) {\n          msg = `Backfilling indexes (${indexesComplete}/${indexesTotal} ready)...`;\n          // Set a more specific message if the backfill is taking a long time\n          if (Date.now() - start > 10_000) {\n            const rootDiff = startPush.schemaChange.indexDiffs?.[\"\"];\n            const indexName = (\n              rootDiff?.added_indexes[0] || rootDiff?.enabled_indexes?.[0]\n            )?.name;\n            if (indexName) {\n              const table = indexName.split(\".\")[0];\n              const dashboardUrl = deploymentDashboardUrlPage(\n                options.deploymentName,\n                `/data?table=${table}&showIndexes=true`,\n              );\n              msg = `Backfilling index ${indexName} (${indexesComplete}/${indexesTotal} ready), see progress here: ${dashboardUrl}`;\n            }\n          }\n        } else {\n          msg = addProgressLinkIfSlow(\n            \"Checking that documents match your schema...\",\n            options.deploymentName,\n            start,\n          );\n        }\n        changeSpinner(msg);\n        break;\n      }\n      case \"failed\": {\n        // Schema validation failed. This could be either because the data\n        // is bad or the schema is wrong. Classify this as a filesystem error\n        // because adjusting `schema.ts` is the most normal next step.\n        let msg = \"Schema validation failed\";\n        if (currentStatus.componentPath) {\n          msg += ` in component \"${currentStatus.componentPath}\"`;\n        }\n        msg += \".\";\n        logFailure(msg);\n        logError(chalkStderr.red(`${currentStatus.error}`));\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: {\n            \"invalid filesystem or db data\": currentStatus.tableName\n              ? {\n                  tableName: currentStatus.tableName,\n                  componentPath: currentStatus.componentPath,\n                }\n              : null,\n          },\n          printedMessage: null, // TODO - move logging into here\n        });\n      }\n      case \"raceDetected\": {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Schema was overwritten by another push.`,\n        });\n      }\n      case \"complete\": {\n        changeSpinner(\"Schema validation complete.\");\n        return;\n      }\n    }\n  }\n}\n\nexport async function finishPush(\n  ctx: Context,\n  span: Span,\n  startPush: StartPushResponse,\n  options: {\n    adminKey: string;\n    url: string;\n    dryRun: boolean;\n    verbose?: boolean;\n    deploymentName: string | null;\n    deploymentType?: DeploymentType;\n    message: string | null;\n  },\n): Promise<FinishPushDiff> {\n  changeSpinner(\"Finalizing push...\");\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl: options.url,\n    adminKey: options.adminKey,\n  });\n  const request = {\n    adminKey: options.adminKey,\n    startPush,\n    dryRun: options.dryRun,\n    message: options.message,\n  };\n  try {\n    const response = await fetch(\"/api/deploy2/finish_push\", {\n      body: await brotliCompress(ctx, JSON.stringify(request)),\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"Content-Encoding\": \"br\",\n        traceparent: span.encodeW3CTraceparent(),\n      },\n    });\n    return finishPushDiff.parse(await response.json());\n  } catch (error: unknown) {\n    return await handlePushConfigError(\n      ctx,\n      error,\n      \"Error: Unable to finish push to \" + options.url,\n      options.deploymentName,\n      {\n        adminKey: options.adminKey,\n        deploymentUrl: options.url,\n        deploymentNotice: \"\",\n      },\n      options.deploymentType,\n    );\n  }\n}\n\nexport type ComponentDefinitionConfigWithoutImpls = Omit<\n  ComponentDefinitionConfig,\n  \"schema\" | \"functions\"\n>;\nexport type AppDefinitionConfigWithoutImpls = Omit<\n  AppDefinitionConfig,\n  \"schema\" | \"functions\" | \"auth\"\n>;\n\nexport async function reportPushCompleted(\n  ctx: Context,\n  adminKey: string,\n  url: string,\n  reporter: Reporter,\n) {\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl: url,\n    adminKey,\n  });\n  try {\n    const response = await fetch(\"/api/deploy2/report_push_completed\", {\n      body: JSON.stringify({\n        adminKey,\n        spans: reporter.spans,\n      }),\n      method: \"POST\",\n    });\n    await response.json();\n  } catch (error: unknown) {\n    logFailure(\n      \"Error: Unable to report push completed to \" + url + \": \" + error,\n    );\n  }\n}\n\nexport async function deployToDeployment(\n  ctx: Context,\n  credentials: {\n    url: string;\n    adminKey: string;\n    deploymentName: string | null;\n    deploymentType?: DeploymentType;\n  },\n  options: {\n    verbose?: boolean | undefined;\n    dryRun?: boolean | undefined;\n    yes?: boolean | undefined;\n    typecheck: \"enable\" | \"try\" | \"disable\";\n    typecheckComponents: boolean;\n    codegen: \"enable\" | \"disable\";\n    cmd?: string | undefined;\n    cmdUrlEnvVarName?: string | undefined;\n    pushAllModules?: boolean;\n\n    debugBundlePath?: string | undefined;\n    debug?: boolean | undefined;\n    writePushRequest?: string | undefined;\n    liveComponentSources?: boolean | undefined;\n    skipWorkosCheck?: boolean | undefined;\n    skipLargeIndexesCheck: boolean;\n    allowDeletingLargeIndexes: boolean;\n    allowUnstagingSchema: boolean;\n    message: string | null;\n  },\n) {\n  const { url, adminKey } = credentials;\n\n  // Pre-flight check: Ensure AuthKit is provisioned before building client bundle\n  if (!options.skipWorkosCheck) {\n    const { projectConfig } = await readProjectConfig(ctx);\n    const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n\n    if (authKitConfig && credentials.deploymentName) {\n      // Only provision for cloud deployments (dev/preview/prod)\n      // Skip for local and anonymous deployments\n      const deploymentType = credentials.deploymentType;\n      if (\n        deploymentType === \"dev\" ||\n        deploymentType === \"preview\" ||\n        deploymentType === \"prod\"\n      ) {\n        await ensureAuthKitProvisionedBeforeBuild(\n          ctx,\n          credentials.deploymentName,\n          { deploymentUrl: url, adminKey },\n          deploymentType,\n        );\n      }\n    }\n  }\n\n  await runCommand(ctx, { ...options, url, adminKey });\n\n  const pushOptions: PushOptions = {\n    deploymentName: credentials.deploymentName,\n    adminKey,\n    verbose: !!options.verbose,\n    dryRun: !!options.dryRun,\n    typecheck: options.typecheck,\n    typecheckComponents: options.typecheckComponents,\n    debug: !!options.debug,\n    debugBundlePath: options.debugBundlePath,\n    debugNodeApis: false,\n    codegen: options.codegen === \"enable\",\n    url,\n    writePushRequest: options.writePushRequest,\n    liveComponentSources: !!options.liveComponentSources,\n    pushAllModules: !!options.pushAllModules,\n    largeIndexDeletionCheck:\n      options.skipLargeIndexesCheck || options.allowDeletingLargeIndexes\n        ? \"has confirmation\"\n        : \"ask for confirmation\",\n    largeIndexBackfillCheck: options.skipLargeIndexesCheck\n      ? \"has confirmation\"\n      : \"ask for confirmation\",\n    stagedValidatorDeletionCheck: options.allowUnstagingSchema\n      ? \"has confirmation\"\n      : \"ask for confirmation\",\n    warnOnSlowSchemaValidation: true,\n    message: options.message,\n  };\n  showSpinner(`Deploying to ${url}...${options.dryRun ? \" [dry run]\" : \"\"}`);\n  await runPush(ctx, pushOptions);\n  logFinishedStep(\n    `${\n      options.dryRun ? \"Would have deployed\" : \"Deployed\"\n    } Convex functions to ${url}`,\n  );\n}\n\nexport async function runCommand(\n  ctx: Context,\n  options: {\n    cmdUrlEnvVarName?: string | undefined;\n    cmd?: string | undefined;\n    dryRun?: boolean | undefined;\n    url: string;\n    adminKey: string;\n  },\n) {\n  if (options.cmd === undefined) {\n    return;\n  }\n\n  const suggestedEnvVars = await suggestedEnvVarNames(ctx);\n  const urlVar = options.cmdUrlEnvVarName ?? suggestedEnvVars.convexUrlEnvVar;\n  const siteVar = suggestedEnvVars.convexSiteEnvVar;\n  showSpinner(\n    `Running '${options.cmd}' with environment variables \"${urlVar}\" and \"${siteVar}\" set...${\n      options.dryRun ? \" [dry run]\" : \"\"\n    }`,\n  );\n  if (!options.dryRun) {\n    const deployment = {\n      deploymentUrl: options.url,\n      adminKey: options.adminKey,\n    };\n    const {\n      convexCloudUrl: canonicalCloudUrl,\n      convexSiteUrl: canonicalSiteUrl,\n    } = await fetchDeploymentCanonicalUrls(ctx, deployment);\n\n    const env = { ...process.env };\n    env[urlVar] = canonicalCloudUrl;\n    env[siteVar] = canonicalSiteUrl;\n    const result = spawnSync(options.cmd, {\n      env,\n      stdio: \"inherit\",\n      shell: true,\n    });\n    if (result.status !== 0) {\n      await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem data\",\n        printedMessage: `'${options.cmd}' failed`,\n      });\n    }\n  }\n  logFinishedStep(\n    `${options.dryRun ? \"Would have run\" : \"Ran\"} \"${\n      options.cmd\n    }\" with environment variables \"${urlVar}\" and \"${siteVar}\" set`,\n  );\n}\n\nexport async function fetchDeploymentCanonicalUrls(\n  ctx: Context,\n  options: { deploymentUrl: string; adminKey: string },\n): Promise<{ convexCloudUrl: string; convexSiteUrl: string }> {\n  const client = typedDeploymentClient(ctx, options);\n  const result = await client.GET(\"/get_canonical_urls\");\n  return result.data!;\n}\n", "import { z } from \"zod\";\nimport { componentDefinitionPath, componentPath } from \"./paths.js\";\nimport { nodeDependency, sourcePackage } from \"./modules.js\";\nimport { checkedComponent } from \"./checkedComponent.js\";\nimport { evaluatedComponentDefinition } from \"./componentDefinition.js\";\nimport {\n  appDefinitionConfig,\n  componentDefinitionConfig,\n} from \"./definitionConfig.js\";\nimport { authInfo } from \"./types.js\";\nimport { looseObject } from \"./utils.js\";\nimport { indexDiff } from \"./finishPush.js\";\n\nexport const startPushRequest = looseObject({\n  adminKey: z.string(),\n  dryRun: z.boolean(),\n\n  functions: z.string(),\n\n  appDefinition: appDefinitionConfig,\n  componentDefinitions: z.array(componentDefinitionConfig),\n\n  nodeDependencies: z.array(nodeDependency),\n\n  nodeVersion: z.optional(z.string()),\n});\nexport type StartPushRequest = z.infer<typeof startPushRequest>;\n\nexport const schemaChange = looseObject({\n  allocatedComponentIds: z.any(),\n  schemaIds: z.any(),\n  indexDiffs: z.record(componentPath, indexDiff).optional(),\n});\nexport type SchemaChange = z.infer<typeof schemaChange>;\n\nexport const startPushResponse = looseObject({\n  environmentVariables: z.record(z.string(), z.string()),\n\n  externalDepsId: z.nullable(z.string()),\n  componentDefinitionPackages: z.record(componentDefinitionPath, sourcePackage),\n\n  appAuth: z.array(authInfo),\n  analysis: z.record(componentDefinitionPath, evaluatedComponentDefinition),\n\n  app: checkedComponent,\n\n  schemaChange,\n});\nexport type StartPushResponse = z.infer<typeof startPushResponse>;\n\n// Values this short are rarely secrets, and replacing them everywhere would\n// garble unrelated strings in the output.\nconst MIN_SCRUBBED_VALUE_LENGTH = 8;\n\n/**\n * Replaces every occurrence of an environment variable's value in `node`'s\n * strings with `<redacted>`. Values reappear in push responses wherever the\n * code read them, such as auth providers built from `process.env` in\n * `auth.config.ts`.\n */\nexport function redactEnvironmentVariableValues<T>(\n  node: T,\n  environmentVariables: Record<string, string>,\n): T {\n  const values = Object.values(environmentVariables)\n    .filter((value) => value.length >= MIN_SCRUBBED_VALUE_LENGTH)\n    // Strings that hold JSON, like `authDiff` entries, contain the escaped form.\n    .flatMap((value) => {\n      const escaped = JSON.stringify(value).slice(1, -1);\n      return escaped === value ? [value] : [value, escaped];\n    })\n    .sort((a, b) => b.length - a.length);\n  const scrub = (child: unknown): unknown => {\n    if (typeof child === \"string\") {\n      return values.reduce(\n        (scrubbed, value) => scrubbed.split(value).join(\"<redacted>\"),\n        child,\n      );\n    }\n    if (Array.isArray(child)) {\n      return child.map(scrub);\n    }\n    if (child !== null && typeof child === \"object\") {\n      return Object.fromEntries(\n        Object.entries(child).map(([key, grandchild]) => [\n          key,\n          scrub(grandchild),\n        ]),\n      );\n    }\n    return child;\n  };\n  return scrub(node) as T;\n}\n\n/**\n * A copy of the response that is safe to print. `environmentVariables` holds\n * every value on the deployment so `finish_push` can detect concurrent changes,\n * and those values are often secrets.\n */\nexport function startPushResponseForLogging(\n  response: StartPushResponse,\n): StartPushResponse {\n  return {\n    ...redactEnvironmentVariableValues(response, response.environmentVariables),\n    environmentVariables: Object.fromEntries(\n      Object.keys(response.environmentVariables).map((name) => [\n        name,\n        \"<redacted>\",\n      ]),\n    ),\n  };\n}\n\nexport const evaluatePushResponse = looseObject({\n  schemaChange,\n});\nexport type EvaluatePushResponse = z.infer<typeof evaluatePushResponse>;\n\nexport const componentSchemaStatus = looseObject({\n  schemaValidationComplete: z.boolean(),\n  indexesComplete: z.number(),\n  indexesTotal: z.number(),\n});\nexport type ComponentSchemaStatus = z.infer<typeof componentSchemaStatus>;\n\nexport const schemaStatus = z.union([\n  looseObject({\n    type: z.literal(\"inProgress\"),\n    components: z.record(componentPath, componentSchemaStatus),\n  }),\n  looseObject({\n    type: z.literal(\"failed\"),\n    error: z.string(),\n    componentPath,\n    tableName: z.nullable(z.string()),\n  }),\n  looseObject({\n    type: z.literal(\"raceDetected\"),\n  }),\n  looseObject({\n    type: z.literal(\"complete\"),\n  }),\n]);\nexport type SchemaStatus = z.infer<typeof schemaStatus>;\n", "import { z } from \"zod\";\nimport { looseObject } from \"./utils.js\";\n\n// TODO share some of these types, to distinguish between encodedComponentDefinitionPaths etc.\nexport const componentDefinitionPath = z.string();\nexport type ComponentDefinitionPath = z.infer<typeof componentDefinitionPath>;\n\nexport const componentPath = z.string();\nexport type ComponentPath = z.infer<typeof componentPath>;\n\nexport const canonicalizedModulePath = z.string();\nexport type CanonicalizedModulePath = z.infer<typeof canonicalizedModulePath>;\n\nexport const componentFunctionPath = looseObject({\n  component: z.string(),\n  udfPath: z.string(),\n});\nexport type ComponentFunctionPath = z.infer<typeof componentFunctionPath>;\n", "import { z } from \"zod\";\n\n/**\n * Convenience wrapper for z.object(...).passthrough().\n *\n * This object validator allows extra properties and passes them through.\n * This is useful for forwards compatibility if the server adds extra unknown\n * fields.\n */\nexport function looseObject<T extends z.ZodRawShape>(\n  shape: T,\n  params?: z.RawCreateParams,\n): z.ZodObject<\n  T,\n  \"passthrough\",\n  z.ZodTypeAny,\n  {\n    [k_1 in keyof z.objectUtil.addQuestionMarks<\n      z.baseObjectOutputType<T>,\n      {\n        [k in keyof z.baseObjectOutputType<T>]: undefined extends z.baseObjectOutputType<T>[k]\n          ? never\n          : k;\n      }[keyof T]\n    >]: z.objectUtil.addQuestionMarks<\n      z.baseObjectOutputType<T>,\n      {\n        [k in keyof z.baseObjectOutputType<T>]: undefined extends z.baseObjectOutputType<T>[k]\n          ? never\n          : k;\n      }[keyof T]\n    >[k_1];\n  },\n  { [k_2 in keyof z.baseObjectInputType<T>]: z.baseObjectInputType<T>[k_2] }\n> {\n  return z.object(shape, params).passthrough();\n}\n", "import { z } from \"zod\";\nimport { looseObject } from \"./utils.js\";\n\nexport const moduleEnvironment = z.union([\n  z.literal(\"isolate\"),\n  z.literal(\"node\"),\n]);\nexport type ModuleEnvironment = z.infer<typeof moduleEnvironment>;\n\nexport const moduleConfig = looseObject({\n  path: z.string(),\n  source: z.string(),\n  sourceMap: z.optional(z.string()),\n  environment: moduleEnvironment,\n});\nexport type ModuleConfig = z.infer<typeof moduleConfig>;\n\nexport const moduleHashConfig = looseObject({\n  path: z.string(),\n  environment: moduleEnvironment,\n  sha256: z.string(),\n});\nexport type ModuleHashConfig = z.infer<typeof moduleHashConfig>;\n\nexport const nodeDependency = looseObject({\n  name: z.string(),\n  version: z.string(),\n});\nexport type NodeDependency = z.infer<typeof nodeDependency>;\n\nexport const udfConfig = looseObject({\n  serverVersion: z.string(),\n  // RNG seed encoded as Convex bytes in JSON.\n  importPhaseRngSeed: z.any(),\n  // Timestamp encoded as a Convex Int64 in JSON.\n  importPhaseUnixTimestamp: z.any(),\n});\nexport type UdfConfig = z.infer<typeof udfConfig>;\n\nexport const sourcePackage = z.any();\nexport type SourcePackage = z.infer<typeof sourcePackage>;\n\nexport const visibility = z.union([\n  looseObject({ kind: z.literal(\"public\") }),\n  looseObject({ kind: z.literal(\"internal\") }),\n]);\nexport type Visibility = z.infer<typeof visibility>;\n\nexport const analyzedFunction = looseObject({\n  name: z.string(),\n  pos: z.any(),\n  udfType: z.union([\n    z.literal(\"Query\"),\n    z.literal(\"Mutation\"),\n    z.literal(\"Action\"),\n  ]),\n  visibility: z.nullable(visibility),\n  args: z.nullable(z.string()),\n  returns: z.nullable(z.string()),\n});\nexport type AnalyzedFunction = z.infer<typeof analyzedFunction>;\n\nexport const analyzedModule = looseObject({\n  functions: z.array(analyzedFunction),\n  httpRoutes: z.any(),\n  cronSpecs: z.any(),\n  sourceMapped: z.any(),\n});\nexport type AnalyzedModule = z.infer<typeof analyzedModule>;\n", "import { z } from \"zod\";\nimport {\n  componentDefinitionPath,\n  componentFunctionPath,\n  ComponentDefinitionPath,\n  ComponentPath,\n  componentPath,\n} from \"./paths.js\";\nimport { Identifier, identifier } from \"./types.js\";\nimport { looseObject } from \"./utils.js\";\n\nexport const resource = z.union([\n  looseObject({ type: z.literal(\"value\"), value: z.string() }),\n  looseObject({\n    type: z.literal(\"function\"),\n    path: componentFunctionPath,\n  }),\n]);\nexport type Resource = z.infer<typeof resource>;\n\nexport type CheckedExport =\n  | { type: \"branch\"; children: Record<Identifier, CheckedExport> }\n  | { type: \"leaf\"; resource: Resource };\nexport const checkedExport: z.ZodType<CheckedExport> = z.lazy(() =>\n  z.union([\n    looseObject({\n      type: z.literal(\"branch\"),\n      children: z.record(identifier, checkedExport),\n    }),\n    looseObject({\n      type: z.literal(\"leaf\"),\n      resource,\n    }),\n  ]),\n);\n\nexport const httpActionRoute = looseObject({\n  method: z.string(),\n  path: z.string(),\n});\n\nexport const checkedHttpRoutes = looseObject({\n  httpModuleRoutes: z.nullable(z.array(httpActionRoute)),\n  mounts: z.array(z.string()),\n});\nexport type CheckedHttpRoutes = z.infer<typeof checkedHttpRoutes>;\n\nexport type CheckedComponent = {\n  definitionPath: ComponentDefinitionPath;\n  componentPath: ComponentPath;\n  args: Record<Identifier, Resource>;\n  childComponents: Record<Identifier, CheckedComponent>;\n};\nexport const checkedComponent: z.ZodType<CheckedComponent> = z.lazy(() =>\n  looseObject({\n    definitionPath: componentDefinitionPath,\n    componentPath,\n    args: z.record(identifier, resource),\n    childComponents: z.record(identifier, checkedComponent),\n    httpRoutes: checkedHttpRoutes,\n    exports: z.record(identifier, checkedExport),\n  }),\n);\n", "import { z } from \"zod\";\n\nexport const reference = z.string();\nexport type Reference = z.infer<typeof reference>;\n\n// These validators parse the response from the backend so although\n// they roughly correspond with convex/auth.config.ts providers they\n// have been processed.\n\n// Passthrough so old CLIs can operate on new backend formats.\nconst Oidc = z\n  .object({\n    applicationID: z.string(),\n    domain: z.string(),\n  })\n  .passthrough();\nconst CustomJwt = z\n  .object({\n    type: z.literal(\"customJwt\"),\n    applicationID: z.string().nullable(),\n    issuer: z.string(),\n    jwks: z.string(),\n    algorithm: z.string(),\n  })\n  .passthrough();\n\nexport const authInfo = z.union([CustomJwt, Oidc]);\n\nexport type AuthInfo = z.infer<typeof authInfo>;\n\nexport const identifier = z.string();\nexport type Identifier = z.infer<typeof identifier>;\n", "import { z } from \"zod\";\nimport { canonicalizedModulePath, componentDefinitionPath } from \"./paths.js\";\nimport { Identifier, Reference, identifier, reference } from \"./types.js\";\nimport { analyzedModule, udfConfig } from \"./modules.js\";\nimport { looseObject } from \"./utils.js\";\nimport { ConvexValidator } from \"./validator.js\";\n\nexport const componentEnvDependencyValidator = looseObject({\n  type: z.literal(\"value\"),\n  // Validator serialized to JSON.\n  value: z.string(),\n  optional: z.boolean().optional(),\n});\n\nexport const componentDefinitionType = z.union([\n  looseObject({\n    type: z.literal(\"app\"),\n    httpPrefix: z.string().optional(),\n  }),\n  looseObject({\n    type: z.literal(\"childComponent\"),\n    name: identifier,\n  }),\n]);\n\nexport const componentEnvBinding = z.union([\n  looseObject({\n    type: z.literal(\"value\"),\n    // Value serialized to JSON.\n    value: z.string(),\n  }),\n  looseObject({\n    type: z.literal(\"envVar\"),\n    // Name of a parent-declared env var.\n    name: z.string(),\n  }),\n]);\n\nexport const componentInstantiation = looseObject({\n  name: identifier,\n  path: componentDefinitionPath,\n  env: z.array(z.tuple([identifier, componentEnvBinding])).nullish(),\n});\n\nexport type ComponentExports =\n  | { type: \"leaf\"; leaf: Reference }\n  | { type: \"branch\"; branch: [Identifier, ComponentExports][] };\n\nexport const componentExports: z.ZodType<ComponentExports> = z.lazy(() =>\n  z.union([\n    looseObject({\n      type: z.literal(\"leaf\"),\n      leaf: reference,\n    }),\n    looseObject({\n      type: z.literal(\"branch\"),\n      branch: z.array(z.tuple([identifier, componentExports])),\n    }),\n  ]),\n);\n\nexport const componentDefinitionMetadata = looseObject({\n  path: componentDefinitionPath,\n  definitionType: componentDefinitionType,\n  childComponents: z.array(componentInstantiation),\n  httpMounts: z.record(z.string(), reference),\n  exports: looseObject({\n    type: z.literal(\"branch\"),\n    branch: z.array(z.tuple([identifier, componentExports])),\n  }),\n  envVars: z\n    .array(z.tuple([identifier, componentEnvDependencyValidator]))\n    .nullish(),\n});\n\nexport const indexSchema = looseObject({\n  indexDescriptor: z.string(),\n  fields: z.array(z.string()),\n});\n\nexport const vectorIndexSchema = looseObject({\n  indexDescriptor: z.string(),\n  vectorField: z.string(),\n  dimensions: z.number().optional(),\n  filterFields: z.array(z.string()),\n});\n\nexport const searchIndexSchema = looseObject({\n  indexDescriptor: z.string(),\n  searchField: z.string(),\n  filterFields: z.array(z.string()),\n});\n\nexport const tableDefinition = looseObject({\n  tableName: z.string(),\n  indexes: z.array(indexSchema),\n  searchIndexes: z.array(searchIndexSchema).optional().nullable(),\n  vectorIndexes: z.array(vectorIndexSchema).optional().nullable(),\n  // We don't validate validators because of performance issues and since this\n  // is a server returned value.\n  documentType: z.custom<ConvexValidator>(),\n});\nexport type TableDefinition = z.infer<typeof tableDefinition>;\n\nexport const analyzedSchema = looseObject({\n  tables: z.array(tableDefinition),\n  schemaValidation: z.boolean(),\n});\nexport type AnalyzedSchema = z.infer<typeof analyzedSchema>;\n\nexport const evaluatedComponentDefinition = looseObject({\n  definition: componentDefinitionMetadata,\n  schema: analyzedSchema.optional().nullable(),\n  functions: z.record(canonicalizedModulePath, analyzedModule),\n  udfConfig,\n});\nexport type EvaluatedComponentDefinition = z.infer<\n  typeof evaluatedComponentDefinition\n>;\n", "import { z } from \"zod\";\nimport { componentDefinitionPath } from \"./paths.js\";\nimport { moduleConfig, moduleHashConfig } from \"./modules.js\";\nimport { looseObject } from \"./utils.js\";\n\nexport const appDefinitionConfig = looseObject({\n  definition: z.nullable(moduleConfig),\n  dependencies: z.array(componentDefinitionPath),\n  schema: z.nullable(moduleConfig),\n  changedModules: z.array(moduleConfig),\n  unchangedModuleHashes: z.array(moduleHashConfig),\n  udfServerVersion: z.string(),\n});\nexport type AppDefinitionConfig = z.infer<typeof appDefinitionConfig>;\n\nexport const componentDefinitionConfig = looseObject({\n  definitionPath: componentDefinitionPath,\n  definition: moduleConfig,\n  dependencies: z.array(componentDefinitionPath),\n  schema: z.nullable(moduleConfig),\n  functions: z.array(moduleConfig),\n  udfServerVersion: z.string(),\n});\nexport type ComponentDefinitionConfig = z.infer<\n  typeof componentDefinitionConfig\n>;\n", "import { z } from \"zod\";\nimport { looseObject } from \"./utils.js\";\n\nexport const authDiff = looseObject({\n  added: z.array(z.string()),\n  removed: z.array(z.string()),\n});\nexport type AuthDiff = z.infer<typeof authDiff>;\n\nexport const componentDefinitionDiff = looseObject({});\nexport type ComponentDefinitionDiff = z.infer<typeof componentDefinitionDiff>;\n\nexport const componentDiffType = z.discriminatedUnion(\"type\", [\n  looseObject({\n    type: z.literal(\"create\"),\n  }),\n  looseObject({\n    type: z.literal(\"modify\"),\n  }),\n  looseObject({\n    type: z.literal(\"unmount\"),\n  }),\n  looseObject({\n    type: z.literal(\"remount\"),\n  }),\n]);\nexport type ComponentDiffType = z.infer<typeof componentDiffType>;\n\nexport const moduleDiff = looseObject({\n  added: z.array(z.string()),\n  removed: z.array(z.string()),\n});\nexport type ModuleDiff = z.infer<typeof moduleDiff>;\n\nexport const udfConfigDiff = looseObject({\n  previous_version: z.string(),\n  next_version: z.string(),\n});\nexport type UdfConfigDiff = z.infer<typeof udfConfigDiff>;\n\nexport const cronDiff = looseObject({\n  added: z.array(z.string()),\n  updated: z.array(z.string()),\n  deleted: z.array(z.string()),\n});\nexport type CronDiff = z.infer<typeof cronDiff>;\n\nexport const developerIndexConfig = z.intersection(\n  z.discriminatedUnion(\"type\", [\n    looseObject({\n      name: z.string(),\n      type: z.literal(\"database\"),\n      fields: z.array(z.string()),\n    }),\n    looseObject({\n      name: z.string(),\n      type: z.literal(\"search\"),\n      searchField: z.string(),\n      filterFields: z.array(z.string()),\n    }),\n    looseObject({\n      name: z.string(),\n      type: z.literal(\"vector\"),\n      dimensions: z.number(),\n      vectorField: z.string(),\n      filterFields: z.array(z.string()),\n    }),\n  ]),\n  z.object({ staged: z.boolean().optional() }),\n);\nexport type DeveloperIndexConfig = z.infer<typeof developerIndexConfig>;\n\nexport const indexDiff = looseObject({\n  added_indexes: z.array(developerIndexConfig),\n  removed_indexes: z.array(developerIndexConfig),\n  enabled_indexes: z.array(developerIndexConfig).optional(),\n  disabled_indexes: z.array(developerIndexConfig).optional(),\n});\nexport type IndexDiff = z.infer<typeof indexDiff>;\n\nexport const schemaDiff = looseObject({\n  previous_schema: z.nullable(z.string()),\n  next_schema: z.nullable(z.string()),\n});\nexport type SchemaDiff = z.infer<typeof schemaDiff>;\n\nexport const componentDiff = looseObject({\n  diffType: componentDiffType,\n  moduleDiff,\n  udfConfigDiff: z.nullable(udfConfigDiff),\n  cronDiff,\n  indexDiff,\n  schemaDiff: z.nullable(schemaDiff),\n});\nexport type ComponentDiff = z.infer<typeof componentDiff>;\n\nexport const finishPushDiff = looseObject({\n  authDiff,\n  definitionDiffs: z.record(z.string(), componentDefinitionDiff),\n  componentDiffs: z.record(z.string(), componentDiff),\n});\nexport type FinishPushDiff = z.infer<typeof finishPushDiff>;\n", "import { z } from \"zod\";\nimport { componentDefinitionPath, componentPath } from \"./paths.js\";\nimport { developerIndexConfig } from \"./finishPush.js\";\nimport { looseObject } from \"./utils.js\";\n\n// Hand-mirrors `TableValidationOutcome` in\n// `crates/common/src/schemas/mod.rs` (`#[serde(rename_all = \"camelCase\")]`),\n// like the rest of this deployApi directory: there's no codegen sharing\n// types between the Rust backend and this package.\nexport const tableValidationOutcome = z.enum([\n  \"notValidated\",\n  \"supersetOfEnforced\",\n  \"supersetOfStagedValidated\",\n  \"supersetOfShape\",\n  \"mustWalk\",\n]);\nexport type TableValidationOutcome = z.infer<typeof tableValidationOutcome>;\n\nexport const indexChangePrediction = z.enum([\n  \"added\",\n  \"identical\",\n  \"enabled\",\n  \"disabled\",\n  \"dropped\",\n]);\nexport type IndexChangePrediction = z.infer<typeof indexChangePrediction>;\n\n// Mirrors `StagedValidatorState` in\n// `crates/application/src/deploy_config.rs`.\nexport const stagedValidatorState = z.union([\n  looseObject({\n    state: z.literal(\"pending\"),\n    numDocsValidated: z.number(),\n    totalDocs: z.number().nullable().optional(),\n  }),\n  looseObject({ state: z.literal(\"valid\") }),\n  looseObject({ state: z.literal(\"failed\"), error: z.string() }),\n]);\nexport type StagedValidatorState = z.infer<typeof stagedValidatorState>;\n\nexport const tablePrediction = looseObject({\n  name: z.string(),\n  outcome: tableValidationOutcome,\n  numDocs: z.number(),\n  sizeBytes: z.number(),\n  staged: stagedValidatorState.optional(),\n  canSkipAfterStagedValidation: z.boolean().optional(),\n});\nexport type TablePrediction = z.infer<typeof tablePrediction>;\n\nexport const indexPrediction = z.intersection(\n  developerIndexConfig,\n  looseObject({\n    change: indexChangePrediction,\n    needsBackfill: z.boolean(),\n    numDocs: z.number(),\n  }),\n);\nexport type IndexPrediction = z.infer<typeof indexPrediction>;\n\n// Mirrors `SerializedDiscardedStagedValidator` in\n// `crates/local_backend/src/deploy_config2.rs`. The backend never discards a\n// failed validator, since a redeploy retries it anyway.\nexport const discardedStagedValidator = looseObject({\n  tableName: z.string(),\n  state: z.union([\n    looseObject({\n      state: z.literal(\"pending\"),\n      numDocsValidated: z.number(),\n      totalDocs: z.number().nullable().optional(),\n    }),\n    looseObject({ state: z.literal(\"valid\") }),\n  ]),\n  replaced: z.boolean(),\n});\nexport type DiscardedStagedValidator = z.infer<typeof discardedStagedValidator>;\n\nexport const componentSchemaPrediction = looseObject({\n  definitionPath: z.string(),\n  schemaValidation: z.boolean(),\n  tables: z.array(tablePrediction),\n  indexes: z.array(indexPrediction),\n  // Optional: responses from backends predating the field.\n  discardedStagedValidators: z.array(discardedStagedValidator).optional(),\n});\nexport type ComponentSchemaPrediction = z.infer<\n  typeof componentSchemaPrediction\n>;\n\nexport const evaluateSchemaResponse = looseObject({\n  componentSchemaEvaluations: z.record(\n    componentPath,\n    componentSchemaPrediction,\n  ),\n  newComponentDefinitions: z.array(componentDefinitionPath),\n});\nexport type EvaluateSchemaResponse = z.infer<typeof evaluateSchemaResponse>;\n", "import { chalkStderr } from \"chalk\";\nimport { deploymentDashboardUrlPage } from \"./dashboard.js\";\nimport { DeveloperIndexConfig } from \"./deployApi/finishPush.js\";\n\nexport type IndexMetadata = {\n  table: string;\n  name: string;\n  fields:\n    | string[]\n    | {\n        searchField: string;\n        filterFields: string[];\n      }\n    | {\n        dimensions: number;\n        vectorField: string;\n        filterFields: string[];\n      };\n  backfill: {\n    state: \"in_progress\" | \"done\";\n  };\n  staged: boolean;\n};\n\nexport type LargeIndexDeletionCheck =\n  // Don\u2019t verify whether large indexes have been deleted\n  | \"no verification\"\n  // If large indexes are being deleted, ask for confirmation (and fail in non-interactive envs)\n  | \"ask for confirmation\"\n  // If large indexes are being deleted, confirm (the user has used --skip-large-indexes-check)\n  | \"has confirmation\";\n\nexport function addProgressLinkIfSlow(\n  msg: string,\n  deploymentName: string | null,\n  start: number,\n): string {\n  if (Date.now() - start > 10_000) {\n    const dashboardUrl = deploymentDashboardUrlPage(\n      deploymentName,\n      `/schema?showSchema=true`,\n    );\n    msg = msg.concat(`\\nSee progress here: ${dashboardUrl}`);\n  }\n  return msg;\n}\n\nexport function formatIndex(index: DeveloperIndexConfig) {\n  const [tableName, indexName] = index.name.split(\".\");\n  return `${tableName}.${chalkStderr.bold(indexName)} ${chalkStderr.gray(formatIndexFields(index))}${index.staged ? chalkStderr.blue(\"  (staged)\") : \"\"}`;\n}\n\nfunction formatIndexFields(index: DeveloperIndexConfig) {\n  switch (index.type) {\n    case \"database\":\n      return (\n        \"  \" + index.fields.map((f) => chalkStderr.underline(f)).join(\", \")\n      );\n    case \"search\":\n      return `${chalkStderr.cyan(\"(text)\")}   ${chalkStderr.underline(index.searchField)}${formatFilterFields(index.filterFields)}`;\n    case \"vector\":\n      return `${chalkStderr.cyan(\"(vector)\")}   ${chalkStderr.underline(index.vectorField)} (${index.dimensions} dimensions)${formatFilterFields(index.filterFields)}`;\n    default:\n      index satisfies never;\n      return \"\";\n  }\n}\n\nfunction formatFilterFields(filterFields: string[]) {\n  if (filterFields.length === 0) {\n    return \"\";\n  }\n  return `, filter${filterFields.length === 1 ? \"\" : \"s\"} on ${filterFields.map((f) => chalkStderr.underline(f)).join(\", \")}`;\n}\n", "/**\n * Programatic provisioning of WorkOS environments and configuration of these environments.\n *\n * This WorkOS integration is subject to change while in development and may require upgrading the CLI\n * to use in the future.\n */\nimport crypto from \"crypto\";\nimport * as dotenv from \"dotenv\";\nimport { Context } from \"../../../bundler/context.js\";\nimport {\n  changeSpinner,\n  logFinishedStep,\n  logMessage,\n  logOutput,\n  logVerbose,\n  logWarning,\n  showSpinner,\n  stopSpinner,\n} from \"../../../bundler/log.js\";\nimport { getTeamAndProjectSlugForDeployment } from \"../api.js\";\nimport { deploymentEnvBackend, EnvVarBackend } from \"../env.js\";\nimport { deploymentDashboardUrlPage } from \"../dashboard.js\";\nimport { changedEnvVarFile, suggestedEnvVarNames } from \"../envvars.js\";\nimport { promptOptions, promptYesNo } from \"../utils/prompts.js\";\nimport {\n  createCORSOrigin,\n  createRedirectURI,\n  updateAppHomepageUrl,\n} from \"./environmentApi.js\";\nimport {\n  createAssociatedWorkosTeam,\n  createEnvironmentAndAPIKey,\n  getCandidateEmailsForWorkIntegration,\n  getDeploymentCanProvisionWorkOSEnvironments,\n} from \"./platformApi.js\";\nimport type {\n  AuthKitConfig,\n  AuthKitEnvironmentConfig,\n  AuthKitConfigureSettings,\n  ProjectConfig,\n} from \"../config.js\";\nimport { getAuthKitConfig, readProjectConfig } from \"../config.js\";\n\n// Helper function to query WorkOS environment variables from a backend\nasync function getWorkOSEnvVars(backend: EnvVarBackend): Promise<{\n  clientId: string | null;\n  apiKey: string | null;\n  environmentId: string | null;\n}> {\n  const [clientId, apiKey, environmentId] = await Promise.all([\n    backend.get(\"WORKOS_CLIENT_ID\").then((v) => v?.value ?? null),\n    backend.get(\"WORKOS_API_KEY\").then((v) => v?.value ?? null),\n    backend.get(\"WORKOS_ENVIRONMENT_ID\").then((v) => v?.value ?? null),\n  ]);\n  return { clientId, apiKey, environmentId };\n}\n\n// Helper to resolve WorkOS credentials from all available sources\nasync function resolveWorkOSCredentials(\n  ctx: Context,\n  deployment: { deploymentUrl: string; adminKey: string },\n  deploymentName: string,\n  authKitConfig: AuthKitConfig,\n  workosDeploymentType: \"dev\" | \"preview\" | \"prod\",\n): Promise<{\n  clientId: string | null;\n  apiKey: string | null;\n  environmentId: string | null;\n  deploymentEnvVars: {\n    clientId: string | null;\n    apiKey: string | null;\n    environmentId: string | null;\n  };\n}> {\n  const backend = deploymentEnvBackend(ctx, deployment);\n  const deploymentEnvVars = await getWorkOSEnvVars(backend);\n\n  let clientId: string | null;\n  let apiKey: string | null;\n  let environmentId: string | null;\n\n  if (workosDeploymentType === \"dev\") {\n    // For dev: build environment (.env.local) takes precedence so mismatches\n    // with the deployment are caught by ensureDeploymentHasWorkOSCredentials.\n    clientId =\n      process.env.WORKOS_CLIENT_ID || deploymentEnvVars.clientId || null;\n    apiKey = deploymentEnvVars.apiKey || null;\n    environmentId =\n      process.env.WORKOS_ENVIRONMENT_ID ||\n      deploymentEnvVars.environmentId ||\n      null;\n  } else {\n    // For prod/preview: deployment credentials are authoritative. This avoids\n    // .env.local dev values overriding prod credentials and triggering a\n    // spurious mismatch error during `npx convex deploy`.\n    clientId =\n      deploymentEnvVars.clientId || process.env.WORKOS_CLIENT_ID || null;\n    apiKey = deploymentEnvVars.apiKey || null;\n    environmentId =\n      deploymentEnvVars.environmentId ||\n      process.env.WORKOS_ENVIRONMENT_ID ||\n      null;\n  }\n\n  // 3. If still no credentials, try provisioning (if we have appropriate auth)\n  if (!clientId || !apiKey) {\n    const auth = ctx.bigBrainAuth();\n    const isUsingDeploymentKey = auth?.kind === \"deploymentKey\";\n\n    if (isUsingDeploymentKey) {\n      await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: buildDeploymentKeyError(\n          deploymentName,\n          workosDeploymentType,\n        ),\n      });\n    }\n\n    // We have user auth or project key, try to provision\n    showSpinner(\"Provisioning AuthKit environment...\");\n\n    try {\n      const result = await ensureWorkosEnvironmentProvisioned(\n        ctx,\n        deploymentName,\n        { ...deployment, deploymentNotice: \"\" },\n        authKitConfig,\n        workosDeploymentType,\n      );\n\n      if (result !== \"ready\") {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: \"Failed to provision WorkOS environment\",\n        });\n      }\n\n      // After provisioning, re-fetch the credentials\n      const provisionedEnvVars = await getWorkOSEnvVars(backend);\n      clientId = provisionedEnvVars.clientId;\n      apiKey = provisionedEnvVars.apiKey;\n      environmentId = provisionedEnvVars.environmentId;\n\n      if (!clientId || !apiKey) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"Failed to retrieve WorkOS credentials after provisioning\",\n        });\n      }\n    } catch (error: any) {\n      if (\n        error.message?.includes(\"permission\") ||\n        error.message?.includes(\"deploy key\") ||\n        error.message?.includes(\"UnexpectedAuthHeaderFormat\")\n      ) {\n        await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            `Cannot provision WorkOS environment with current authentication.\\n` +\n            `You need to manually set WORKOS_CLIENT_ID and WORKOS_API_KEY\\n` +\n            `environment variables in your build environment or deployment settings.`,\n        });\n      }\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Error provisioning WorkOS environment: ${error.message}`,\n      });\n    }\n  }\n\n  return { clientId, apiKey, environmentId, deploymentEnvVars };\n}\n\n// Helper function to build error message for deployment key restrictions\nfunction buildDeploymentKeyError(\n  deploymentName: string,\n  deploymentType: string,\n): string {\n  const integrationsUrl = deploymentDashboardUrlPage(\n    deploymentName,\n    \"/settings/integrations\",\n  );\n  return (\n    `AuthKit configuration in convex.json requires WorkOS credentials.\\n\\n` +\n    `Checked for credentials in:\\n` +\n    `  1. Build environment variables (WORKOS_CLIENT_ID, WORKOS_API_KEY)\\n` +\n    `  2. Deployment environment variables, see WorkOS integration at ${integrationsUrl}\\n\\n` +\n    `When using a deployment-specific key, you cannot automatically provision WorkOS environments.\\n` +\n    `You must provide these credentials in your build platform (e.g., Vercel, Netlify)\\n` +\n    `or set them in your deployment settings.\\n\\n` +\n    `Alternatively, remove the 'authKit.${deploymentType}' section from convex.json to skip\\n` +\n    `AuthKit configuration.`\n  );\n}\n\n// Helper function to ensure deployment has the correct WorkOS credentials\nasync function ensureDeploymentHasWorkOSCredentials(\n  ctx: Context,\n  deployment: { deploymentUrl: string; adminKey: string },\n  credentials: {\n    clientId: string;\n    apiKey: string;\n    environmentId: string | null;\n  },\n  deploymentEnvVars: {\n    clientId: string | null;\n    apiKey: string | null;\n    environmentId: string | null;\n  },\n): Promise<void> {\n  const mismatches: string[] = [];\n  if (\n    deploymentEnvVars.clientId &&\n    deploymentEnvVars.clientId !== credentials.clientId\n  ) {\n    mismatches.push(\n      `  WORKOS_CLIENT_ID: deployment has '${deploymentEnvVars.clientId}' but we need '${credentials.clientId}'`,\n    );\n  }\n  if (\n    deploymentEnvVars.apiKey &&\n    deploymentEnvVars.apiKey !== credentials.apiKey\n  ) {\n    mismatches.push(\n      `  WORKOS_API_KEY: deployment has different value than what we need`,\n    );\n  }\n  if (\n    deploymentEnvVars.environmentId &&\n    credentials.environmentId &&\n    deploymentEnvVars.environmentId !== credentials.environmentId\n  ) {\n    mismatches.push(\n      `  WORKOS_ENVIRONMENT_ID: deployment has '${deploymentEnvVars.environmentId}' but we need '${credentials.environmentId}'`,\n    );\n  }\n\n  if (mismatches.length > 0) {\n    await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        `WorkOS environment variable mismatch detected!\\n\\n` +\n        `The following environment variables in your Convex deployment don't match what's needed:\\n` +\n        mismatches.join(\"\\n\") +\n        \"\\n\\n\" +\n        `This would cause your auth configuration to use different credentials at runtime than during build.\\n\\n` +\n        `To fix this, remove the conflicting environment variables from your deployment:\\n` +\n        `  npx convex env remove WORKOS_CLIENT_ID\\n` +\n        `  npx convex env remove WORKOS_API_KEY\\n` +\n        `  npx convex env remove WORKOS_ENVIRONMENT_ID\\n\\n` +\n        `Or remove them from the Convex dashboard deployment settings.\\n\\n` +\n        `Then run your deployment command again.`,\n    });\n  }\n  const updates: Array<{ name: string; value: string }> = [];\n  if (!deploymentEnvVars.clientId && credentials.clientId) {\n    updates.push({ name: \"WORKOS_CLIENT_ID\", value: credentials.clientId });\n  }\n  if (!deploymentEnvVars.apiKey && credentials.apiKey) {\n    updates.push({ name: \"WORKOS_API_KEY\", value: credentials.apiKey });\n  }\n  if (!deploymentEnvVars.environmentId && credentials.environmentId) {\n    updates.push({\n      name: \"WORKOS_ENVIRONMENT_ID\",\n      value: credentials.environmentId,\n    });\n  }\n\n  if (updates.length > 0) {\n    changeSpinner(\"Setting WorkOS credentials in deployment...\");\n    const backend = deploymentEnvBackend(ctx, deployment);\n    await backend.update(updates);\n    logVerbose(\n      `WorkOS credentials propagated to deployment: ${updates.map((u) => u.name).join(\", \")}`,\n    );\n  }\n}\n\n/**\n * Ensure the current deployment has the three expected WorkOS environment\n * variables defined with values corresponding to a valid WorkOS deployment.\n *\n * This may involve provisioning a WorkOS deployment or even (in interactive\n * terminals only) prompting to provision a new WorkOS team to be associated\n * with this Convex team.\n */\nexport async function ensureWorkosEnvironmentProvisioned(\n  ctx: Context,\n  deploymentName: string,\n  deployment: {\n    deploymentUrl: string;\n    adminKey: string;\n    deploymentNotice: string;\n  },\n  authKitConfig: AuthKitConfig | undefined,\n  deploymentType: \"dev\" | \"preview\" | \"prod\",\n): Promise<\"ready\" | \"choseNotToAssociatedTeam\"> {\n  const envConfig: AuthKitEnvironmentConfig | undefined =\n    authKitConfig?.[deploymentType];\n\n  // If no config, nothing to do\n  if (!envConfig) {\n    return \"choseNotToAssociatedTeam\";\n  }\n\n  showSpinner(\"Checking for associated AuthKit environment...\");\n  const backend = deploymentEnvBackend(ctx, deployment);\n  const existingEnvVars = await getWorkOSEnvVars(backend);\n  if (\n    existingEnvVars.clientId &&\n    existingEnvVars.environmentId &&\n    existingEnvVars.apiKey\n  ) {\n    logOutput(\n      \"Deployment already has environment variables for a WorkOS environment configured for AuthKit.\",\n    );\n\n    if (\n      envConfig.localEnvVars !== undefined &&\n      envConfig.localEnvVars !== false\n    ) {\n      await updateEnvLocal(\n        ctx,\n        existingEnvVars.clientId,\n        existingEnvVars.apiKey,\n        existingEnvVars.environmentId,\n        envConfig.localEnvVars,\n      );\n    }\n\n    // Configure WorkOS environment if configured\n    if (envConfig.configure !== undefined && envConfig.configure !== false) {\n      if (!existingEnvVars.apiKey) {\n        // API key missing - warn and skip configuration\n        logWarning(\n          `Skipping WorkOS AuthKit environment configuration: WORKOS_API_KEY is not set.\\n` +\n            `To configure redirect URIs and CORS origins, you need to set this environment variable.\\n` +\n            `You can set it at: ${deployment.deploymentUrl.replace(/\\/$/, \"\")}/settings/environment-variables`,\n        );\n      } else {\n        await updateWorkosEnvironment(\n          ctx,\n          existingEnvVars.apiKey,\n          envConfig.configure,\n          {\n            clientId: existingEnvVars.clientId,\n            apiKey: existingEnvVars.apiKey,\n            environmentId: existingEnvVars.environmentId,\n          },\n        );\n      }\n    }\n\n    logFinishedStep(\"WorkOS AuthKit environment ready\");\n    return \"ready\";\n  }\n\n  // We need to provision an environment via Big Brain\n  const response = await getDeploymentCanProvisionWorkOSEnvironments(\n    ctx,\n    deploymentName,\n  );\n  const { hasAssociatedWorkosTeam, teamId } = response;\n\n  // In case this this becomes a legacy flow that no longer works.\n  if ((response as any).disabled) {\n    return \"choseNotToAssociatedTeam\";\n  }\n\n  if (!hasAssociatedWorkosTeam) {\n    // A WorkOS workspace needs to be created for provisioning to work\n    // We'll offer to create it interactively, or fail in non-interactive mode\n    const result = await tryToCreateAssociatedWorkosTeam(\n      ctx,\n      deploymentName,\n      teamId,\n      deploymentType,\n    );\n    if (result === \"choseNotToAssociatedTeam\") {\n      return \"choseNotToAssociatedTeam\";\n    }\n    result satisfies \"ready\";\n  }\n\n  // Determine WorkOS environment type\n  // Map config's \"development\"/\"staging\"/\"production\" to API's \"production\"/\"nonproduction\"\n  // Default: dev/preview -> nonproduction, prod -> production\n  // Override: use environmentType from config (only allowed in prod)\n  let workosEnvironmentType: \"production\" | \"nonproduction\" | undefined;\n  if (envConfig.environmentType) {\n    // User explicitly set it (only allowed in prod)\n    // Map: \"production\" -> \"production\", everything else -> \"nonproduction\"\n    workosEnvironmentType =\n      envConfig.environmentType === \"production\"\n        ? \"production\"\n        : \"nonproduction\";\n  } else {\n    // Default based on Convex deployment type\n    workosEnvironmentType =\n      deploymentType === \"prod\" ? \"production\" : \"nonproduction\";\n  }\n\n  const environmentResult = await createEnvironmentAndAPIKey(\n    ctx,\n    deploymentName,\n    workosEnvironmentType,\n  );\n\n  if (!environmentResult.success) {\n    if (\n      \"error\" in environmentResult &&\n      environmentResult.error === \"team_not_provisioned\"\n    ) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Team unexpectedly has no provisioned WorkOS team: ${environmentResult.message}`,\n      });\n    }\n    // For other error cases\n    const errorMessage =\n      \"message\" in environmentResult\n        ? environmentResult.message\n        : \"Failed to provision WorkOS environment\";\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: errorMessage,\n    });\n  }\n\n  const data = environmentResult.data;\n  if (data.newlyProvisioned) {\n    logMessage(\"New AuthKit environment provisioned\");\n  } else {\n    logMessage(\n      \"Using credentials from existing AuthKit environment already created for this deployment\",\n    );\n  }\n\n  changeSpinner(\"Setting WORKOS_* deployment environment variables...\");\n  await setConvexEnvVars(\n    backend,\n    data.clientId,\n    data.environmentId,\n    data.apiKey,\n  );\n\n  if (\n    envConfig.localEnvVars !== undefined &&\n    envConfig.localEnvVars !== false\n  ) {\n    showSpinner(\"Updating .env.local with WorkOS configuration\");\n    await updateEnvLocal(\n      ctx,\n      data.clientId,\n      data.apiKey,\n      data.environmentId,\n      envConfig.localEnvVars,\n    );\n  }\n\n  // Configure WorkOS environment if configured\n  if (envConfig.configure !== undefined && envConfig.configure !== false) {\n    await updateWorkosEnvironment(ctx, data.apiKey, envConfig.configure, {\n      clientId: data.clientId,\n      apiKey: data.apiKey,\n      environmentId: data.environmentId,\n    });\n  }\n  logFinishedStep(\"WorkOS AuthKit environment ready\");\n\n  return \"ready\";\n}\n\n/**\n * Interactive flow to provision a WorkOS team for a Convex team.\n * Handles ToS agreement, email selection, and retry logic.\n */\nexport async function provisionWorkosTeamInteractive(\n  ctx: Context,\n  deploymentName: string,\n  teamId: number,\n  deploymentType: \"dev\" | \"preview\" | \"prod\",\n  options: {\n    promptPrefix?: string;\n    promptMessage?: string;\n  } = {},\n): Promise<\n  | { success: true; workosTeamId: string; workosTeamName: string }\n  | { success: false; reason: \"cancelled\" }\n> {\n  const teamInfo = await getTeamAndProjectSlugForDeployment(ctx, {\n    deploymentName,\n  });\n  if (teamInfo === null) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Can't find Convex Cloud team for deployment ${deploymentName}`,\n    });\n  }\n  stopSpinner();\n\n  const defaultPrefix = `A WorkOS team needs to be created for your Convex team \"${teamInfo.teamSlug}\" in order to use AuthKit.\n\nYou and other members of this team will be able to create WorkOS environments for each Convex dev deployment for projects in this team.\n\nBy creating this account you agree to the WorkOS Terms of Service (https://workos.com/legal/terms-of-service) and Privacy Policy (https://workos.com/legal/privacy).\nAlternately, choose no and set WORKOS_CLIENT_ID for an existing WorkOS environment.\n\\n`;\n\n  const defaultMessage = `Create a WorkOS team and enable automatic AuthKit environment provisioning for team \"${teamInfo.teamSlug}\"?`;\n\n  const agree = await promptYesNo(ctx, {\n    prefix: options.promptPrefix ?? defaultPrefix,\n    message: options.promptMessage ?? defaultMessage,\n    nonInteractiveError: `Cannot provision WorkOS AuthKit in non-interactive mode.\n\nA WorkOS workspace needs to be associated with your Convex team to enable automatic environment provisioning.\n\nTo fix this, either:\n1. Run this command in an interactive terminal to set up WorkOS provisioning\n2. Remove the authKit.${deploymentType} section from convex.json and provide your own WorkOS credentials via the dashboard\n3. Set WORKOS_CLIENT_ID and WORKOS_API_KEY environment variables before deploying`,\n  });\n  if (!agree) {\n    logMessage(\"\\nGot it. We won't create your WorkOS account.\");\n    return { success: false, reason: \"cancelled\" };\n  }\n\n  const alreadyTried = new Map<string, string>();\n\n  let email;\n  while (true) {\n    let choice = \"refresh\";\n    while (choice === \"refresh\") {\n      const { availableEmails } =\n        await getCandidateEmailsForWorkIntegration(ctx);\n      choice = await promptOptions<string>(ctx, {\n        message:\n          availableEmails.length === 1\n            ? \"Create a new WorkOS team with this email address?\"\n            : \"Create a new WorkOS team with which email address?\",\n        suffix:\n          availableEmails.length === 0\n            ? \"\\nVisit https://dashboard.convex.dev/profile to add a verified email to use to provision a WorkOS account\"\n            : availableEmails.length === 1\n              ? \"\\nCreate a new WorkOS team with this email address?\"\n              : \"\\nTo use another email address visit https://dashboard.convex.dev/profile to add and verify, then choose 'refresh'\",\n        choices: [\n          ...availableEmails.map((email: string) => ({\n            name: `${email}${alreadyTried.has(email) ? ` (can't create, a WorkOS team already exists with this email)` : \"\"}`,\n            value: email,\n          })),\n          {\n            name: \"refresh (add an email at https://dashboard.convex.dev/profile)\",\n            value: \"refresh\",\n          } as const,\n          {\n            name: \"cancel (do not create a WorkOS account)\",\n            value: \"cancel\",\n          } as const,\n        ],\n      });\n    }\n    if (choice === \"cancel\") {\n      return { success: false, reason: \"cancelled\" };\n    }\n    email = choice;\n\n    const teamResult = await createAssociatedWorkosTeam(ctx, teamId, email);\n\n    if (teamResult.result === \"emailAlreadyUsed\") {\n      logMessage(teamResult.message);\n      alreadyTried.set(email, teamResult.message);\n      continue;\n    }\n    // Success!\n    return {\n      success: true,\n      workosTeamId: teamResult.workosTeamId,\n      workosTeamName: teamResult.workosTeamName,\n    };\n  }\n}\n\nexport async function tryToCreateAssociatedWorkosTeam(\n  ctx: Context,\n  deploymentName: string,\n  teamId: number,\n  deploymentType: \"dev\" | \"preview\" | \"prod\",\n): Promise<\"ready\" | \"choseNotToAssociatedTeam\"> {\n  const result = await provisionWorkosTeamInteractive(\n    ctx,\n    deploymentName,\n    teamId,\n    deploymentType,\n  );\n\n  if (!result.success) {\n    logMessage(\n      `To provide your own WorkOS environment credentials instead, set environment variables manually:\n\nnpx convex env set WORKOS_CLIENT_ID $YOUR_CLIENT_ID_HERE\nnpx convex env set WORKOS_API_KEY $YOUR_API_KEY_HERE`,\n    );\n    return \"choseNotToAssociatedTeam\";\n  }\n\n  logFinishedStep(\"WorkOS team created successfully\");\n  return \"ready\";\n}\n\n/**\n * Pre-flight check for AuthKit provisioning.\n * Called before building the client bundle to ensure .env.local has correct values.\n * This is the main provisioning path - the error path is kept for backwards compatibility.\n */\n/**\n * Ensures WorkOS AuthKit environment is ready before building.\n *\n * Flow:\n * 1. Get authKit configuration for the deployment type\n * 2. Resolve credentials (build env \u2192 deployment env \u2192 provision via Big Brain)\n * 3. Ensure deployment has the correct credentials\n * 4. Update local .env.local if configured (interactive only)\n * 5. Configure WorkOS environment settings if needed\n */\nexport async function ensureAuthKitProvisionedBeforeBuild(\n  ctx: Context,\n  deploymentName: string,\n  deployment: {\n    deploymentUrl: string;\n    adminKey: string;\n  },\n  deploymentType?: \"dev\" | \"preview\" | \"prod\",\n): Promise<void> {\n  // 1. Get configuration\n  const { projectConfig } = await readProjectConfig(ctx);\n  const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n  if (!authKitConfig) {\n    return;\n  }\n\n  const workosDeploymentType = deploymentType || \"dev\";\n  const envConfig = authKitConfig[workosDeploymentType];\n  if (!envConfig) {\n    return;\n  }\n\n  // 2. Resolve credentials from all sources\n  const { clientId, apiKey, environmentId, deploymentEnvVars } =\n    await resolveWorkOSCredentials(\n      ctx,\n      deployment,\n      deploymentName,\n      authKitConfig,\n      workosDeploymentType,\n    );\n\n  // 3. Ensure deployment has the correct credentials\n  if (clientId && apiKey) {\n    await ensureDeploymentHasWorkOSCredentials(\n      ctx,\n      deployment,\n      { clientId, apiKey, environmentId },\n      deploymentEnvVars,\n    );\n  }\n\n  // 4. Update local environment variables if configured (interactive mode only)\n  if (envConfig.localEnvVars && process.stdin.isTTY && clientId && apiKey) {\n    await updateEnvLocal(\n      ctx,\n      clientId,\n      apiKey,\n      environmentId || \"\",\n      envConfig.localEnvVars,\n    );\n  }\n\n  // 5. Configure WorkOS environment if needed\n  if (envConfig.configure && apiKey) {\n    const configValues: {\n      clientId?: string;\n      apiKey?: string;\n      environmentId?: string;\n    } = {\n      apiKey,\n    };\n    if (clientId) {\n      configValues.clientId = clientId;\n    }\n    if (environmentId) {\n      configValues.environmentId = environmentId;\n    }\n    await updateWorkosEnvironment(\n      ctx,\n      apiKey,\n      envConfig.configure,\n      configValues,\n    );\n  }\n}\n/**\n * Syncs WorkOS configuration and local env vars after a successful push.\n * This is called on every push in dev mode to keep WorkOS settings in sync\n * with changes to convex.json.\n *\n * @returns true if any updates were made, false if config unchanged\n */\nexport async function syncAuthKitConfigAfterPush(\n  ctx: Context,\n  projectConfig: ProjectConfig,\n  deployment: {\n    deploymentUrl: string;\n    adminKey: string;\n  },\n): Promise<boolean> {\n  // Get the authKit config (may include generated defaults for templates)\n  const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n  if (!authKitConfig) {\n    // No authKit config, nothing to sync\n    return false;\n  }\n\n  // We only sync the \"dev\" environment settings during dev mode\n  const devConfig = authKitConfig.dev;\n  if (!devConfig) {\n    return false;\n  }\n\n  // Get existing credentials from deployment\n  const backend = deploymentEnvBackend(ctx, deployment);\n  const { clientId, apiKey, environmentId } = await getWorkOSEnvVars(backend);\n\n  // We need the API key to make WorkOS API calls\n  if (!apiKey) {\n    // Can't update WorkOS without an API key\n    return false;\n  }\n\n  // Update WorkOS environment configuration if specified\n  if (devConfig.configure !== undefined && devConfig.configure !== false) {\n    const provisionedValues: {\n      clientId?: string;\n      apiKey?: string;\n      environmentId?: string;\n    } = {\n      apiKey,\n    };\n    if (clientId) {\n      provisionedValues.clientId = clientId;\n    }\n    if (environmentId) {\n      provisionedValues.environmentId = environmentId;\n    }\n    await updateWorkosEnvironment(\n      ctx,\n      apiKey,\n      devConfig.configure,\n      provisionedValues,\n    );\n  }\n\n  // Note: We don't update .env.local during sync - that only happens during provisioning\n  // to ensure the client bundle build has the correct values\n\n  return true;\n}\n\n// Helpers\n\nasync function updateWorkosEnvironment(\n  ctx: Context,\n  workosApiKey: string,\n  configureSettings: AuthKitConfigureSettings,\n  provisioned?: { clientId?: string; apiKey?: string; environmentId?: string },\n): Promise<void> {\n  const isInteractive = process.stdin.isTTY;\n  const skippedConfigs: string[] = [];\n\n  // Log what we're about to configure\n  const configItems: string[] = [];\n  if (configureSettings.redirectUris?.length) {\n    configItems.push(\n      `${configureSettings.redirectUris.length} redirect URI(s)`,\n    );\n  }\n  if (configureSettings.appHomepageUrl) {\n    configItems.push(`app homepage URL`);\n  }\n  if (configureSettings.corsOrigins?.length) {\n    configItems.push(`${configureSettings.corsOrigins.length} CORS origin(s)`);\n  }\n\n  if (configItems.length > 0) {\n    logVerbose(\n      `Starting WorkOS AuthKit configuration: ${configItems.join(\", \")}`,\n    );\n  } else {\n    logVerbose(`No WorkOS AuthKit configuration settings to apply`);\n    return;\n  }\n\n  // Apply each redirect URI\n  if (configureSettings.redirectUris) {\n    for (const redirectUri of configureSettings.redirectUris) {\n      try {\n        // Resolve template with both env vars and provisioned values\n        const resolvedRedirectUri = resolveTemplate(redirectUri, provisioned);\n        const { modified: redirectUriAdded } = await createRedirectURI(\n          ctx,\n          workosApiKey,\n          resolvedRedirectUri,\n        );\n        if (redirectUriAdded) {\n          changeSpinner(\"Configuring AuthKit redirect URI...\");\n          logMessage(`AuthKit redirect URI added: ${resolvedRedirectUri}`);\n        } else {\n          logVerbose(\n            `AuthKit redirect URI already configured: ${resolvedRedirectUri}`,\n          );\n        }\n      } catch (error: any) {\n        if (\n          isInteractive &&\n          error.message?.includes(\"Cannot resolve template\")\n        ) {\n          // In interactive mode, log warning and continue\n          skippedConfigs.push(\n            `Redirect URI: ${redirectUri} - ${error.message}`,\n          );\n        } else {\n          // In non-interactive mode or for other errors, crash\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage: `Error configuring redirect URI: ${error.message}`,\n          });\n        }\n      }\n    }\n  }\n\n  // Apply app homepage URL (where users are redirected after logout)\n  if (configureSettings.appHomepageUrl) {\n    try {\n      // Resolve template with both env vars and provisioned values\n      const resolvedAppHomepageUrl = resolveTemplate(\n        configureSettings.appHomepageUrl,\n        provisioned,\n      );\n\n      const { modified: appHomepageUrlUpdated } = await updateAppHomepageUrl(\n        ctx,\n        workosApiKey,\n        resolvedAppHomepageUrl,\n      );\n\n      if (appHomepageUrlUpdated) {\n        changeSpinner(\"Configuring AuthKit app homepage URL...\");\n        logMessage(\n          `AuthKit app homepage URL updated: ${resolvedAppHomepageUrl}`,\n        );\n      } else {\n        logVerbose(\n          `AuthKit app homepage URL was not updated (may be invalid for WorkOS or already set)`,\n        );\n      }\n    } catch (error: any) {\n      if (isInteractive && error.message?.includes(\"Cannot resolve template\")) {\n        // In interactive mode, log warning and continue\n        skippedConfigs.push(\n          `App homepage URL: ${configureSettings.appHomepageUrl} - ${error.message}`,\n        );\n      } else {\n        // In non-interactive mode or for other errors, crash\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Error configuring app homepage URL: ${error.message}`,\n        });\n      }\n    }\n  } else {\n    logVerbose(`No app homepage URL configured`);\n  }\n\n  // Apply each CORS origin\n  if (configureSettings.corsOrigins) {\n    for (const corsOrigin of configureSettings.corsOrigins) {\n      try {\n        // Resolve template with both env vars and provisioned values\n        const resolvedCorsOrigin = resolveTemplate(corsOrigin, provisioned);\n        const { modified: corsAdded } = await createCORSOrigin(\n          ctx,\n          workosApiKey,\n          resolvedCorsOrigin,\n        );\n        if (corsAdded) {\n          changeSpinner(\"Configuring AuthKit CORS origin...\");\n          logMessage(`AuthKit CORS origin added: ${resolvedCorsOrigin}`);\n        } else {\n          logVerbose(\n            `AuthKit CORS origin already configured: ${resolvedCorsOrigin}`,\n          );\n        }\n      } catch (error: any) {\n        if (\n          isInteractive &&\n          error.message?.includes(\"Cannot resolve template\")\n        ) {\n          // In interactive mode, log warning and continue\n          skippedConfigs.push(`CORS origin: ${corsOrigin} - ${error.message}`);\n        } else {\n          // In non-interactive mode or for other errors, crash\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage: `Error configuring CORS origin: ${error.message}`,\n          });\n        }\n      }\n    }\n  }\n\n  // Log completion summary\n  logVerbose(`WorkOS AuthKit configuration completed`);\n\n  // If we skipped any configurations in interactive mode, let the user know\n  if (skippedConfigs.length > 0) {\n    stopSpinner();\n    logWarning(\n      `Skipped some AuthKit configurations due to missing environment variables:\\n` +\n        skippedConfigs.map((s) => `  - ${s}`).join(\"\\n\"),\n    );\n  }\n}\n\n// Helper to resolve template strings with unified syntax:\n// - ${buildEnv.ENV_VAR} for build-time environment variables\n// - ${authEnv.WORKOS_CLIENT_ID} for provisioned client ID\n// - ${authEnv.WORKOS_API_KEY} for provisioned API key\n// - ${authEnv.WORKOS_ENVIRONMENT_ID} for provisioned environment ID\n/* eslint-disable no-restricted-syntax */\nexport function resolveTemplate(\n  str: string,\n  provisioned?: { clientId?: string; apiKey?: string; environmentId?: string },\n): string {\n  return str.replace(/\\$\\{([^}]+)\\}/g, (match, expression) => {\n    // Handle auth environment values (provisioned WorkOS credentials)\n    if (expression === \"authEnv.WORKOS_CLIENT_ID\") {\n      if (!provisioned?.clientId) {\n        throw new Error(\n          `Cannot resolve template ${match}: WORKOS_CLIENT_ID not available. ` +\n            `Ensure WorkOS environment is provisioned.`,\n        );\n      }\n      return provisioned.clientId;\n    }\n    if (expression === \"authEnv.WORKOS_API_KEY\") {\n      if (!provisioned?.apiKey) {\n        throw new Error(\n          `Cannot resolve template ${match}: WORKOS_API_KEY not available. ` +\n            `Ensure WorkOS environment is provisioned.`,\n        );\n      }\n      return provisioned.apiKey;\n    }\n    if (expression === \"authEnv.WORKOS_ENVIRONMENT_ID\") {\n      if (!provisioned?.environmentId) {\n        throw new Error(\n          `Cannot resolve template ${match}: WORKOS_ENVIRONMENT_ID not available. ` +\n            `Ensure WorkOS environment is provisioned.`,\n        );\n      }\n      return provisioned.environmentId;\n    }\n\n    // Handle build environment variables\n    if (expression.startsWith(\"buildEnv.\")) {\n      const varName = expression.substring(\"buildEnv.\".length);\n      const value = process.env[varName];\n      if (!value) {\n        throw new Error(\n          `Cannot resolve template ${match}: Environment variable ${varName} is not set.`,\n        );\n      }\n      return value;\n    }\n\n    // Unknown template expression - fail loudly\n    throw new Error(\n      `Unknown template expression: ${match}. ` +\n        `Use \\${buildEnv.VAR_NAME} for environment variables or ` +\n        `\\${authEnv.WORKOS_CLIENT_ID/WORKOS_API_KEY} for provisioned values.`,\n    );\n  });\n}\n/* eslint-enable no-restricted-syntax */\n\n// Update .env.local based on configured localEnvVars\nasync function updateEnvLocal(\n  ctx: Context,\n  clientId: string,\n  apiKey: string,\n  environmentId: string,\n  localEnvVarsConfig: Record<string, string>,\n) {\n  const envPath = \".env.local\";\n\n  let existingFileContent = ctx.fs.exists(envPath)\n    ? ctx.fs.readUtf8File(envPath)\n    : null;\n\n  // Build the changes based on localEnvVarsConfig\n  let suggestedChanges: Record<\n    string,\n    {\n      value: string;\n      commentAfterValue?: string;\n      commentOnPreviousLine?: string;\n    }\n  > = {};\n\n  const { detectedFramework } = await suggestedEnvVarNames(ctx);\n\n  // Parse existing .env.local to check what's already there\n  const existingEnvVars = existingFileContent\n    ? dotenv.parse(existingFileContent)\n    : {};\n\n  for (const [envVarName, templateValue] of Object.entries(\n    localEnvVarsConfig,\n  )) {\n    // Check if already set in .env.local\n    if (existingEnvVars[envVarName]) {\n      logVerbose(`Skipping ${envVarName} update - already in .env.local`);\n      continue;\n    }\n\n    // Check if already set in environment (but not from .env.local)\n    if (process.env[envVarName]) {\n      logVerbose(\n        `Skipping ${envVarName} update in .env.local - already set in environment`,\n      );\n      continue;\n    }\n\n    // Use unified template resolution for both syntaxes\n    const resolvedValue = resolveTemplate(templateValue, {\n      clientId,\n      apiKey,\n      environmentId,\n    });\n\n    // Add comment for first WorkOS var if it's a provisioned value\n    if (\n      Object.keys(suggestedChanges).length === 0 &&\n      (templateValue.includes(\"authEnv.WORKOS_CLIENT_ID\") ||\n        templateValue === \"${authEnv.WORKOS_CLIENT_ID}\")\n    ) {\n      suggestedChanges[envVarName] = {\n        value: resolvedValue,\n        commentOnPreviousLine: `# See this environment at ${workosUrl(environmentId, \"/authentication\")}`,\n      };\n    } else {\n      suggestedChanges[envVarName] = { value: resolvedValue };\n    }\n  }\n\n  // Special handling for WORKOS_COOKIE_PASSWORD for Next.js/TanStackStart\n  if (\n    (detectedFramework === \"Next.js\" ||\n      detectedFramework === \"TanStackStart\") &&\n    !process.env[\"WORKOS_COOKIE_PASSWORD\"] && // Don't override environment\n    (!existingFileContent ||\n      !existingFileContent.includes(\"WORKOS_COOKIE_PASSWORD\"))\n  ) {\n    suggestedChanges[\"WORKOS_COOKIE_PASSWORD\"] = {\n      value: crypto.randomBytes(32).toString(\"base64url\"),\n    };\n  }\n\n  for (const [\n    envVarName,\n    { value: envVarValue, commentOnPreviousLine, commentAfterValue },\n  ] of Object.entries(suggestedChanges) as [\n    string,\n    {\n      value: string;\n      commentOnPreviousLine?: string;\n      commentAfterValue?: string;\n    },\n  ][]) {\n    existingFileContent =\n      changedEnvVarFile({\n        existingFileContent,\n        envVarName,\n        envVarValue,\n        commentAfterValue: commentAfterValue ?? null,\n        commentOnPreviousLine: commentOnPreviousLine ?? null,\n      }) || existingFileContent;\n  }\n\n  if (\n    existingFileContent !== null &&\n    Object.keys(suggestedChanges).length > 0\n  ) {\n    ctx.fs.writeUtf8File(envPath, existingFileContent);\n    logMessage(\n      `Updated .env.local with ${Object.keys(suggestedChanges).join(\", \")}`,\n    );\n  }\n}\n\nasync function setConvexEnvVars(\n  backend: EnvVarBackend,\n  workosClientId: string,\n  workosEnvironmentId: string,\n  workosEnvironmentApiKey: string,\n) {\n  await backend.update([\n    { name: \"WORKOS_CLIENT_ID\", value: workosClientId },\n    { name: \"WORKOS_ENVIRONMENT_ID\", value: workosEnvironmentId },\n    { name: \"WORKOS_API_KEY\", value: workosEnvironmentApiKey },\n  ]);\n}\n\ntype Subpaths = \"/authentication\" | \"/sessions\" | \"/redirects\" | \"/users\";\nfunction workosUrl(environmentId: string, subpath: Subpaths) {\n  return `https://dashboard.workos.com/${environmentId}${subpath}`;\n}\n", "import { Context } from \"../../../bundler/context.js\";\n\nexport interface RedirectUriResponse {\n  object: \"redirect_uri\";\n  id: string;\n  uri: string;\n  default: boolean;\n  created_at: string;\n  updated_at: string;\n}\n\nexport interface CorsOriginResponse {\n  object: \"cors_origin\";\n  id: string;\n  origin: string;\n  created_at: string;\n  updated_at: string;\n}\n\nexport async function createRedirectURI(\n  ctx: Context,\n  apiKey: string,\n  uri: string,\n): Promise<{ modified: boolean }> {\n  const response = await fetch(\n    \"https://api.workos.com/user_management/redirect_uris\",\n    {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `Bearer ${apiKey}`,\n      },\n      body: JSON.stringify({ uri }),\n    },\n  );\n\n  if (!response.ok) {\n    const errorText = await response.text();\n    if (response.status === 422 && errorText.includes(\"already exists\")) {\n      // This redirect URI already exists.\n      return { modified: false };\n    }\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Failed to create redirect URI: ${response.status} ${errorText}`,\n    });\n  }\n\n  return { modified: true };\n}\n\nexport async function updateAppHomepageUrl(\n  ctx: Context,\n  apiKey: string,\n  url: string,\n): Promise<{ modified: boolean; previousUrl?: string }> {\n  const response = await fetch(\n    \"https://api.workos.com/user_management/app_homepage_url\",\n    {\n      method: \"PUT\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `Bearer ${apiKey}`,\n      },\n      body: JSON.stringify({ url }),\n    },\n  );\n\n  if (!response.ok) {\n    const errorText = await response.text();\n\n    if (response.status === 422) {\n      // Validation error - likely localhost URL or other invalid format\n      // Don't crash, just return that we couldn't modify it\n      return { modified: false };\n    }\n\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Failed to update app homepage URL: ${response.status} ${errorText}`,\n    });\n  }\n\n  // Always returns modified: true since PUT always updates (or sets the same value)\n  return { modified: true };\n}\n\nexport async function createCORSOrigin(\n  ctx: Context,\n  apiKey: string,\n  origin: string,\n): Promise<{ modified: boolean }> {\n  const response = await fetch(\n    \"https://api.workos.com/user_management/cors_origins\",\n    {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `Bearer ${apiKey}`,\n      },\n      body: JSON.stringify({ origin }),\n    },\n  );\n\n  if (!response.ok) {\n    const errorText = await response.text();\n    if (\n      response.status === 409 &&\n      (errorText.includes(\"duplicate_cors_origin\") ||\n        errorText.includes(\"already exists\"))\n    ) {\n      // This CORS origin already exists.\n      return { modified: false };\n    }\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Failed to create CORS origin: ${response.status} ${errorText}`,\n    });\n  }\n  return { modified: true };\n}\n", "import { Context } from \"../../../bundler/context.js\";\nimport {\n  bigBrainAPI,\n  bigBrainAPIMaybeThrows,\n  ErrorData,\n  logAndHandleFetchError,\n  ThrowingFetchError,\n} from \"../utils/utils.js\";\nimport { components } from \"../../generatedApi.js\";\n\n// Re-export generated types for convenience\nexport type ProjectEnvironmentSummary =\n  components[\"schemas\"][\"ProjectEnvironmentSummary\"];\nexport type ProvisionProjectEnvironmentResponse =\n  components[\"schemas\"][\"ProvisionProjectEnvironmentResponse\"];\nexport type GetProjectEnvironmentResponse =\n  components[\"schemas\"][\"GetProjectEnvironmentResponse\"];\nexport type DeleteProjectEnvironmentResponse =\n  components[\"schemas\"][\"DeleteProjectEnvironmentResponse\"];\n\n/**\n * Verified emails for a user that aren't known to be an admin email for\n * another WorkOS integration.\n */\nexport async function getCandidateEmailsForWorkIntegration(\n  ctx: Context,\n): Promise<components[\"schemas\"][\"AvailableWorkOSTeamEmailsResponse\"]> {\n  return bigBrainAPI<\n    components[\"schemas\"][\"AvailableWorkOSTeamEmailsResponse\"]\n  >({\n    ctx,\n    method: \"GET\",\n    path: \"workos/available_workos_team_emails\",\n  });\n}\n\nexport async function getInvitationEligibleEmails(\n  ctx: Context,\n  teamId: number,\n): Promise<{\n  eligibleEmails: string[];\n  adminEmail?: string;\n}> {\n  return bigBrainAPI<{ eligibleEmails: string[]; adminEmail?: string }>({\n    ctx,\n    method: \"GET\",\n    path: `teams/${teamId}/workos_invitation_eligible_emails`,\n  });\n}\n\nexport async function getDeploymentCanProvisionWorkOSEnvironments(\n  ctx: Context,\n  deploymentName: string,\n): Promise<components[\"schemas\"][\"HasAssociatedWorkOSTeamResponse\"]> {\n  const request: components[\"schemas\"][\"HasAssociatedWorkOSTeamRequest\"] = {\n    deploymentName,\n  };\n  return bigBrainAPI<components[\"schemas\"][\"HasAssociatedWorkOSTeamResponse\"]>({\n    ctx,\n    method: \"POST\",\n    path: \"workos/has_associated_workos_team\",\n    data: request,\n  });\n}\n\nexport async function createEnvironmentAndAPIKey(\n  ctx: Context,\n  deploymentName: string,\n  environmentType?: \"production\" | \"nonproduction\",\n): Promise<\n  | {\n      success: true;\n      data: components[\"schemas\"][\"ProvisionEnvironmentResponse\"];\n    }\n  | {\n      success: false;\n      error: \"team_not_provisioned\";\n      message: string;\n    }\n> {\n  try {\n    const data = await bigBrainAPI<\n      components[\"schemas\"][\"ProvisionEnvironmentResponse\"]\n    >({\n      ctx,\n      method: \"POST\",\n      path: \"workos/get_or_provision_workos_environment\",\n      data: {\n        deploymentName,\n        environmentType,\n      },\n    });\n    return {\n      success: true,\n      data,\n    };\n  } catch (error: any) {\n    if (error?.message?.includes(\"WorkOSTeamNotProvisioned\")) {\n      return {\n        success: false,\n        error: \"team_not_provisioned\",\n        message: error.message,\n      };\n    }\n\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Error provisioning WorkOS environment: ${error}`,\n    });\n  }\n}\n\nexport async function createAssociatedWorkosTeam(\n  ctx: Context,\n  teamId: number,\n  email: string,\n): Promise<\n  | {\n      result: \"success\";\n      workosTeamId: string;\n      workosTeamName: string;\n    }\n  | {\n      result: \"emailAlreadyUsed\";\n      message: string;\n    }\n> {\n  try {\n    const request: components[\"schemas\"][\"ProvisionWorkOSTeamRequest\"] = {\n      teamId,\n      email,\n    };\n    const result = (await bigBrainAPIMaybeThrows({\n      ctx,\n      method: \"POST\",\n      path: \"workos/provision_associated_workos_team\",\n      data: JSON.stringify(request),\n    })) as components[\"schemas\"][\"ProvisionWorkOSTeamResponse\"];\n    return {\n      result: \"success\",\n      ...result,\n    };\n  } catch (error) {\n    const data: ErrorData | undefined =\n      error instanceof ThrowingFetchError ? error.serverErrorData : undefined;\n    if (data?.code === \"WorkosAccountAlreadyExistsWithThisEmail\") {\n      return {\n        result: \"emailAlreadyUsed\",\n        message:\n          data?.message || \"WorkOS account with this email already exists\",\n      };\n    }\n    return await logAndHandleFetchError(ctx, error);\n  }\n}\n\n/**\n * Check if the WorkOS team associated with a Convex team is still accessible.\n * Returns the team info if provisioned, or null if not provisioned.\n */\nexport async function getWorkosTeamHealth(\n  ctx: Context,\n  teamId: number,\n): Promise<components[\"schemas\"][\"WorkOSTeamInfo\"] | null> {\n  const response = await bigBrainAPI<\n    components[\"schemas\"][\"WorkOSTeamHealthResponse\"]\n  >({\n    ctx,\n    method: \"GET\",\n    path: `teams/${teamId}/workos_team_health`,\n  });\n\n  // Return the team info if provisioned, otherwise null\n  return response.teamProvisioned ? (response.teamInfo ?? null) : null;\n}\n\n/**\n * Check if the WorkOS environment associated with a deployment is still accessible.\n * Returns null if the environment is not provisioned or cannot be accessed.\n */\nexport async function getWorkosEnvironmentHealth(\n  ctx: Context,\n  deploymentName: string,\n): Promise<components[\"schemas\"][\"WorkOSEnvironmentHealthResponse\"] | null> {\n  try {\n    return (await bigBrainAPIMaybeThrows({\n      ctx,\n      method: \"GET\",\n      path: `deployments/${deploymentName}/workos_environment_health`,\n    })) as components[\"schemas\"][\"WorkOSEnvironmentHealthResponse\"];\n  } catch (error: any) {\n    if (error?.serverErrorData?.code === \"WorkOSEnvironmentNotProvisioned\") {\n      return null;\n    }\n    return await logAndHandleFetchError(ctx, error);\n  }\n}\n\nexport async function disconnectWorkOSTeam(\n  ctx: Context,\n  teamId: number,\n): Promise<\n  | {\n      success: true;\n      workosTeamId: string;\n      workosTeamName: string;\n    }\n  | {\n      success: false;\n      error: \"not_associated\" | \"other\";\n      message: string;\n    }\n> {\n  try {\n    const request: components[\"schemas\"][\"DisconnectWorkOSTeamRequest\"] = {\n      teamId,\n    };\n    const result = (await bigBrainAPIMaybeThrows({\n      ctx,\n      method: \"POST\",\n      path: \"workos/disconnect_workos_team\",\n      data: JSON.stringify(request),\n    })) as components[\"schemas\"][\"DisconnectWorkOSTeamResponse\"];\n    return {\n      success: true,\n      ...result,\n    };\n  } catch (error) {\n    const data: ErrorData | undefined =\n      error instanceof ThrowingFetchError ? error.serverErrorData : undefined;\n    if (data?.code === \"WorkOSTeamNotAssociated\") {\n      return {\n        success: false,\n        error: \"not_associated\",\n        message: data?.message || \"No WorkOS team is associated\",\n      };\n    }\n    return {\n      success: false,\n      error: \"other\",\n      message:\n        data?.message ||\n        (error instanceof Error ? error.message : String(error)),\n    };\n  }\n}\n\nexport async function inviteToWorkosTeam(\n  ctx: Context,\n  teamId: number,\n  email: string,\n): Promise<\n  | {\n      result: \"success\";\n      email: string;\n      roleSlug: string;\n    }\n  | {\n      result: \"teamNotProvisioned\";\n      message: string;\n    }\n  | {\n      result: \"alreadyInWorkspace\";\n      message: string;\n    }\n> {\n  try {\n    const result = await bigBrainAPIMaybeThrows({\n      ctx,\n      method: \"POST\",\n      path: \"workos/invite_team_member\",\n      data: JSON.stringify({ teamId, email }),\n    });\n    return { result: \"success\", ...result };\n  } catch (error) {\n    const data: ErrorData | undefined =\n      error instanceof ThrowingFetchError ? error.serverErrorData : undefined;\n    if (data?.code === \"WorkOSTeamNotProvisioned\") {\n      return {\n        result: \"teamNotProvisioned\",\n        message: data?.message || \"This team doesn't have a WorkOS team yet\",\n      };\n    }\n    if (data?.code === \"WorkosUserAlreadyInWorkspace\") {\n      return {\n        result: \"alreadyInWorkspace\",\n        message:\n          data?.message ||\n          \"This email is already a member of another WorkOS workspace\",\n      };\n    }\n    if (data?.code === \"WorkosUserAlreadyInvited\") {\n      return {\n        result: \"alreadyInWorkspace\", // Reuse same result type for UI consistency\n        message:\n          data?.message ||\n          \"This email has already been invited to the WorkOS team\",\n      };\n    }\n    if (data?.code === \"WorkosUserAlreadyInThisTeam\") {\n      return {\n        result: \"alreadyInWorkspace\",\n        message:\n          data?.message || \"This email is already a member of this WorkOS team\",\n      };\n    }\n    return await logAndHandleFetchError(ctx, error);\n  }\n}\n\n// Project environment API functions\nexport async function listProjectWorkOSEnvironments(\n  ctx: Context,\n  projectId: number,\n): Promise<ProjectEnvironmentSummary[]> {\n  const response = await bigBrainAPI<\n    components[\"schemas\"][\"GetProjectEnvironmentsResponse\"]\n  >({\n    ctx,\n    method: \"GET\",\n    path: `projects/${projectId}/workos_environments`,\n  });\n  return response.environments;\n}\n\nexport async function createProjectWorkOSEnvironment(\n  ctx: Context,\n  projectId: number,\n  environmentName: string,\n  isProduction?: boolean,\n): Promise<ProvisionProjectEnvironmentResponse> {\n  return bigBrainAPI<ProvisionProjectEnvironmentResponse>({\n    ctx,\n    method: \"POST\",\n    path: `projects/${projectId}/workos_environments`,\n    data: { environmentName, isProduction },\n  });\n}\n\nexport async function getProjectWorkOSEnvironment(\n  ctx: Context,\n  projectId: number,\n  clientId: string,\n): Promise<GetProjectEnvironmentResponse> {\n  return bigBrainAPI<GetProjectEnvironmentResponse>({\n    ctx,\n    method: \"GET\",\n    path: `projects/${projectId}/workos_environments/${clientId}`,\n  });\n}\n\nexport async function deleteProjectWorkOSEnvironment(\n  ctx: Context,\n  projectId: number,\n  clientId: string,\n): Promise<DeleteProjectEnvironmentResponse> {\n  return bigBrainAPI<DeleteProjectEnvironmentResponse>({\n    ctx,\n    method: \"POST\",\n    path: \"workos/delete_project_environment\",\n    data: { projectId, clientId },\n  });\n}\n", "import path from \"path\";\nimport {\n  ComponentDirectory,\n  ComponentDefinitionPath,\n  buildComponentDirectory,\n  isComponentDirectory,\n  qualifiedDefinitionPath,\n  toComponentDefinitionPath,\n} from \"./directoryStructure.js\";\nimport { Context } from \"../../../../bundler/context.js\";\nimport {\n  logMessage,\n  logWarning,\n  showSpinner,\n} from \"../../../../bundler/log.js\";\nimport esbuild, { BuildOptions, Metafile, OutputFile, Plugin } from \"esbuild\";\nimport { chalkStderr } from \"chalk\";\nimport {\n  AppDefinitionSpecWithoutImpls,\n  ComponentDefinitionSpecWithoutImpls,\n} from \"../../config.js\";\nimport {\n  Bundle,\n  bundle,\n  bundleAuthConfig,\n  bundleSchema,\n  entryPointsByEnvironment,\n} from \"../../../../bundler/index.js\";\nimport { NodeDependency } from \"../../deployApi/modules.js\";\n\nconst VIRTUAL_CONFIG_NAMESPACE = \"convex-virtual-config\";\nconst VIRTUAL_CONFIG_CONTENTS = `import { defineApp } from \"convex/server\";\\nconst app = defineApp();\\nexport default app;`;\n\n/**\n * An esbuild plugin to insert a virtual `convex.config.js` file into the bundle\n * when Convex project doesn't have one explicitly defined.\n *\n * This allows us to use the components push path even when the Convex project doesn't\n * have a config file defined.\n *\n * When importComponentPath is provided, the virtual config will import and use the\n * component found at that path.\n */\nfunction virtualConfig({\n  rootComponentDirectory,\n  importComponentPath,\n}: {\n  rootComponentDirectory: ComponentDirectory;\n  importComponentPath?: string;\n}): Plugin {\n  // Empty config with no components\n  let contents = VIRTUAL_CONFIG_CONTENTS;\n\n  if (importComponentPath) {\n    // Generate config that imports the specified component\n    const relativeImport = path.relative(\n      rootComponentDirectory.path,\n      importComponentPath,\n    );\n    let normalizedImport = relativeImport\n      .replace(/\\\\/g, \"/\")\n      .replace(/\\.ts$/, \".js\");\n\n    // We don't generate code for this synthetic root component so the name we\n    // use for the component doesn't matter.\n    contents = `import { defineApp } from \"convex/server\";\nimport component from \"${normalizedImport}\";\n\nconst app = defineApp();\napp.use(component, { name: \"exampleComponentInstance\" });\nexport default app;`;\n  }\n\n  return {\n    name: `convex-virtual-config`,\n    async setup(build) {\n      const filter = pathToRegexFilter(rootComponentDirectory);\n      build.onResolve({ filter }, async (args) => {\n        return { path: args.path, namespace: VIRTUAL_CONFIG_NAMESPACE };\n      });\n      build.onLoad(\n        { filter, namespace: VIRTUAL_CONFIG_NAMESPACE },\n        async (_args) => {\n          return {\n            contents,\n            resolveDir: rootComponentDirectory.path,\n          };\n        },\n      );\n    },\n  };\n}\n\nfunction pathToRegexFilter(root: ComponentDirectory) {\n  let path = qualifiedDefinitionPath(root);\n  const escaped = path\n    .replace(/\\\\/g, \"/\")\n    .replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n  return new RegExp(`^${escaped}$`);\n}\n\n/**\n * An esbuild plugin to mark component definitions external or return a list of\n * all component definitions.\n *\n * By default this plugin runs in \"bundle\" mode and marks all imported component\n * definition files as external, not traversing further.\n *\n * If \"discover\" mode is specified it traverses the entire tree.\n */\nfunction componentPlugin({\n  mode = \"bundle\",\n  rootComponentDirectory,\n  verbose,\n  ctx,\n}: {\n  mode: \"discover\" | \"bundle\";\n  rootComponentDirectory: ComponentDirectory;\n  verbose?: boolean;\n  ctx: Context;\n}): Plugin {\n  const components = new Map<string, ComponentDirectory>();\n  return {\n    name: `convex-${mode === \"discover\" ? \"discover-components\" : \"bundle-components\"}`,\n    async setup(build) {\n      // This regex can't be really precise since developers could import\n      // \"convex.config\", \"convex.config.js\", \"convex.config.ts\", etc.\n      build.onResolve({ filter: /.*convex.config.*/ }, async (args) => {\n        verbose && logMessage(\"esbuild resolving import:\", args);\n        if (\n          args.namespace !== \"file\" &&\n          args.namespace !== VIRTUAL_CONFIG_NAMESPACE\n        ) {\n          verbose && logMessage(\"  Not a file or virtual config.\");\n          return;\n        }\n        if (args.kind === \"entry-point\") {\n          verbose && logMessage(\"  -> Top-level entry-point.\");\n          const componentDirectory = await buildComponentDirectory(\n            ctx,\n            path.resolve(args.path),\n          );\n\n          // No attempt to resolve args.path is made for entry points so they\n          // must be relative or absolute file paths, not npm packages.\n          // Whether we're bundling or discovering, we're done.\n          if (components.get(args.path)) {\n            // We always invoke esbuild in a try/catch.\n            // eslint-disable-next-line no-restricted-syntax\n            throw new Error(\n              `Entry point component \"${args.path}\" already registered.`,\n            );\n          }\n          components.set(args.path, componentDirectory);\n          return;\n        }\n\n        const candidates = [args.path];\n        const ext = path.extname(args.path);\n        if (ext === \".js\") {\n          candidates.push(args.path.slice(0, -\".js\".length) + \".ts\");\n        }\n        if (ext !== \".js\" && ext !== \".ts\") {\n          candidates.push(args.path + \".js\");\n          candidates.push(args.path + \".ts\");\n        }\n        let resolvedPath = undefined;\n        for (const candidate of candidates) {\n          const result = await build.resolve(candidate, {\n            // We expect this to be \"import-statement\" but pass 'kind' through\n            // to say honest to normal esbuild behavior.\n            kind: args.kind,\n            resolveDir: args.resolveDir,\n          });\n          if (result.path) {\n            resolvedPath = result.path;\n            break;\n          }\n        }\n        if (resolvedPath === undefined) {\n          verbose && logMessage(`  -> ${args.path} not found.`);\n          return;\n        }\n\n        const parentDir = path.dirname(resolvedPath);\n        let imported = components.get(resolvedPath);\n        if (!imported) {\n          const isComponent = isComponentDirectory(ctx, parentDir, false);\n          if (isComponent.kind !== \"ok\") {\n            verbose && logMessage(\"  -> Not a component:\", isComponent);\n            return;\n          }\n          imported = isComponent.component;\n          components.set(resolvedPath, imported);\n        }\n\n        verbose &&\n          logMessage(\n            \"  -> Component import! Recording it.\",\n            args.path,\n            resolvedPath,\n          );\n\n        if (mode === \"discover\") {\n          return {\n            path: resolvedPath,\n          };\n        } else {\n          // In bundle mode, transform external imports to use componentPaths:\n          // import rateLimiter from \"convex_ratelimiter\";\n          // => import rateLimiter from `_componentDeps/${base64('../node_modules/convex_ratelimiter')}`;\n\n          // A componentPath is path from the root component to the directory\n          // of the this component's definition file.\n          const componentPath = toComponentDefinitionPath(\n            rootComponentDirectory,\n            imported,\n          );\n          const importPath = definitionImportPath(componentPath);\n          return {\n            path: importPath,\n            external: true,\n          };\n        }\n      });\n    },\n  };\n}\n\n/** The path on the deployment that identifier a component definition. */\nfunction definitionImportPath(componentPath: ComponentDefinitionPath): string {\n  return `./_componentDeps/${Buffer.from(componentPath).toString(\"base64url\")}`;\n}\n\n// Share configuration between the component definition discovery and bundling passes.\nfunction sharedEsbuildOptions({\n  liveComponentSources = false,\n}: {\n  liveComponentSources?: boolean;\n}) {\n  const options = {\n    bundle: true,\n    platform: \"browser\",\n    format: \"esm\",\n    target: \"esnext\",\n\n    conditions: [\"convex\", \"module\"] as string[],\n\n    // `false` is the default for splitting. It's simpler to evaluate these on\n    // the server as a single file.\n    // Splitting could be enabled for speed once the server supports it.\n    splitting: false,\n\n    // place output files in memory at their source locations\n    write: false,\n    outdir: path.parse(process.cwd()).root,\n    outbase: path.parse(process.cwd()).root,\n\n    minify: true, // Note that this implies NODE_ENV=\"production\".\n    keepNames: true,\n\n    metafile: true,\n  } as const satisfies BuildOptions;\n\n  // Link directly to component sources (usually .ts) in order to\n  // skip the build step. This also causes codegen to run for components\n  // loaded from npm packages.\n  if (liveComponentSources) {\n    options.conditions.push(\"@convex-dev/component-source\");\n  }\n  return options;\n}\n\n// Use the esbuild metafile to discover the dependency graph in which component\n// definitions are nodes.\nexport async function componentGraph(\n  ctx: Context,\n  absWorkingDir: string,\n  rootComponentDirectory: ComponentDirectory,\n  liveComponentSources: boolean,\n  verbose: boolean = true,\n): Promise<{\n  components: Map<string, ComponentDirectory>;\n  dependencyGraph: [ComponentDirectory, ComponentDirectory][];\n}> {\n  if (\n    rootComponentDirectory.isRootWithoutConfig &&\n    !rootComponentDirectory.syntheticComponentImport\n  ) {\n    return {\n      components: new Map([\n        [rootComponentDirectory.path, rootComponentDirectory],\n      ]),\n      dependencyGraph: [],\n    };\n  }\n  let result;\n  try {\n    result = await esbuild.build({\n      absWorkingDir, // This is mostly useful for formatting error messages.\n      entryPoints: [qualifiedDefinitionPath(rootComponentDirectory)],\n      plugins: [\n        componentPlugin({\n          ctx,\n          mode: \"discover\",\n          verbose,\n          rootComponentDirectory,\n        }),\n        ...(rootComponentDirectory.syntheticComponentImport\n          ? [\n              virtualConfig({\n                rootComponentDirectory,\n                importComponentPath:\n                  rootComponentDirectory.syntheticComponentImport,\n              }),\n            ]\n          : []),\n      ],\n      sourcemap: \"external\",\n      sourcesContent: false,\n\n      ...sharedEsbuildOptions({ liveComponentSources }),\n    });\n    await registerEsbuildReads(ctx, absWorkingDir, result.metafile);\n  } catch (err: any) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `esbuild failed: ${err}`,\n    });\n  }\n\n  if (result.errors.length) {\n    const message = result.errors.map((error) => error.text).join(\"\\n\");\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: message,\n    });\n  }\n  for (const warning of result.warnings) {\n    logWarning(chalkStderr.yellow(`esbuild warning: ${warning.text}`));\n  }\n\n  if (rootComponentDirectory.syntheticComponentImport) {\n    // Virtual configs appear in the metafile with a namespace prefix\n    // and can't have ComponentDirectory objects built by reading the filesystem\n    // so swap in this rootComponentDirectory.\n    return await findComponentDependencies(ctx, result.metafile, {\n      [`${VIRTUAL_CONFIG_NAMESPACE}:${qualifiedDefinitionPath(rootComponentDirectory)}`]:\n        rootComponentDirectory,\n    });\n  }\n\n  return await findComponentDependencies(ctx, result.metafile);\n}\n\n/**\n * Get dependencies of a ComponenDirectory as ComponentPaths.\n *\n * Component paths are paths relative to the root component.\n */\nexport function getDeps(\n  rootComponent: ComponentDirectory,\n  dependencyGraph: [ComponentDirectory, ComponentDirectory][],\n  definitionPath: string,\n): ComponentDefinitionPath[] {\n  return dependencyGraph\n    .filter(\n      ([importer, _imported]) => importer.definitionPath === definitionPath,\n    )\n    .map(([_importer, imported]) =>\n      toComponentDefinitionPath(rootComponent, imported),\n    );\n}\n\n/**\n * The returned dependency graph is an array of tuples of [importer, imported]\n *\n * This doesn't work on just any esbuild metafile because it assumes input\n * imports have not been transformed. We run it on the metafile produced by\n * the esbuild invocation that uses the component plugin in \"discover\" mode.\n *\n * @param inputOverrides - ComponentDirectory objects to be used for metafile.inputs\n * keys, in case they don't exist (namely virtual configs via esbuild plugin namespaces).\n */\nasync function findComponentDependencies(\n  ctx: Context,\n  metafile: Metafile,\n  inputOverrides: Record<string, ComponentDirectory> = {},\n): Promise<{\n  components: Map<string, ComponentDirectory>;\n  dependencyGraph: [ComponentDirectory, ComponentDirectory][];\n}> {\n  const { inputs } = metafile;\n\n  const componentsByKey = new Map<string, ComponentDirectory>();\n  for (const inputPath of Object.keys(inputs)) {\n    if (!inputPath.includes(\".config.\")) continue;\n\n    const override: ComponentDirectory | undefined = inputOverrides[inputPath];\n    if (override) {\n      componentsByKey.set(inputPath, override);\n    } else {\n      // Normal component - build from filesystem\n      const component = await buildComponentDirectory(ctx, inputPath);\n      componentsByKey.set(path.resolve(inputPath), component);\n    }\n  }\n\n  const dependencyGraph: [ComponentDirectory, ComponentDirectory][] = [];\n\n  for (const inputPath of Object.keys(inputs)) {\n    if (!inputPath.includes(\".config.\")) continue;\n\n    // For overridden inputs, use the original key; for normal components, use resolved path\n    const importerKey =\n      inputPath in inputOverrides ? inputPath : path.resolve(inputPath);\n\n    const importer = componentsByKey.get(importerKey);\n    if (!importer) continue;\n\n    const { imports } = inputs[inputPath];\n    const componentImports = imports.filter((imp) =>\n      imp.path.includes(\".config.\"),\n    );\n\n    for (const imp of componentImports) {\n      const imported = componentsByKey.get(path.resolve(imp.path));\n      if (!imported) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"invalid filesystem data\",\n          printedMessage: `Didn't find ${path.resolve(imp.path)} in ${[...componentsByKey.keys()].toString()}`,\n        });\n      }\n\n      // Grab the import specifier from the metafile (e.g. `@convex-dev/workpool/convex.config`) so\n      // we can use it to import component APIs\n      if (imp.original) {\n        const importSpecifier = imp.original;\n        const relativeSpecifier = importSpecifier.replace(\n          /\\/convex\\.config.*$/,\n          \"\",\n        );\n\n        imported.importSpecifier = relativeSpecifier;\n      }\n\n      dependencyGraph.push([importer, imported]);\n    }\n  }\n\n  const components = new Map<string, ComponentDirectory>();\n  for (const directory of componentsByKey.values()) {\n    components.set(directory.path, directory);\n  }\n\n  return { components, dependencyGraph };\n}\n\n// NB: If a directory linked to is not a member of the passed\n// componentDirectories array then there will be external links\n// with no corresponding definition bundle.\n// That could be made to throw an error but maybe those are already available\n// on the Convex definition filesystem somehow, e.g. builtin components.\n/** Bundle the component definitions listed. */\nexport async function bundleDefinitions(\n  ctx: Context,\n  absWorkingDir: string,\n  dependencyGraph: [ComponentDirectory, ComponentDirectory][],\n  rootComponentDirectory: ComponentDirectory,\n  componentDirectories: ComponentDirectory[],\n  liveComponentSources: boolean,\n  verbose: boolean = false,\n): Promise<{\n  appDefinitionSpecWithoutImpls: AppDefinitionSpecWithoutImpls;\n  componentDefinitionSpecsWithoutImpls: ComponentDefinitionSpecWithoutImpls[];\n}> {\n  let result;\n  try {\n    let plugins = [\n      componentPlugin({\n        ctx,\n        mode: \"bundle\",\n        verbose,\n        rootComponentDirectory,\n      }),\n    ];\n    if (\n      rootComponentDirectory.syntheticComponentImport ||\n      rootComponentDirectory.isRootWithoutConfig\n    ) {\n      // Use virtual config (either with a component import or empty)\n      plugins.push(\n        virtualConfig(\n          rootComponentDirectory.syntheticComponentImport\n            ? {\n                rootComponentDirectory,\n                importComponentPath:\n                  rootComponentDirectory.syntheticComponentImport,\n              }\n            : { rootComponentDirectory },\n        ),\n      );\n    }\n    result = await esbuild.build({\n      absWorkingDir,\n      entryPoints: componentDirectories.map((dir) =>\n        qualifiedDefinitionPath(dir),\n      ),\n      plugins,\n      sourcemap: true,\n      ...sharedEsbuildOptions({ liveComponentSources }),\n    });\n    await registerEsbuildReads(ctx, absWorkingDir, result.metafile);\n  } catch (err: any) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `esbuild failed: ${err}`,\n    });\n  }\n\n  if (result.errors.length) {\n    const message = result.errors.map((error) => error.text).join(\"\\n\");\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: message,\n    });\n  }\n  for (const warning of result.warnings) {\n    logWarning(chalkStderr.yellow(`esbuild warning: ${warning.text}`));\n  }\n\n  const outputs: {\n    outputJs: OutputFile;\n    outputJsMap?: OutputFile;\n    directory: ComponentDirectory;\n  }[] = [];\n  for (const directory of componentDirectories) {\n    const absInput = path.resolve(absWorkingDir, directory.definitionPath);\n    const expectedOutputJs =\n      absInput.slice(0, absInput.lastIndexOf(\".\")) + \".js\";\n    const expectedOutputMap =\n      absInput.slice(0, absInput.lastIndexOf(\".\")) + \".js.map\";\n    const outputJs = result.outputFiles.filter(\n      (outputFile) => outputFile.path === expectedOutputJs,\n    )[0];\n    if (!outputJs) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `no JS found matching ${expectedOutputJs} in ${result.outputFiles.map((x) => x.path).toString()}`,\n      });\n    }\n    const outputJsMap = result.outputFiles.filter(\n      (outputFile) => outputFile.path === expectedOutputMap,\n    )[0];\n    outputs.push({\n      outputJs,\n      outputJsMap,\n      directory,\n    });\n  }\n\n  const appBundles = outputs.filter(\n    (out) => out.directory.path === rootComponentDirectory.path,\n  );\n  if (appBundles.length !== 1) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"found wrong number of app bundles\",\n    });\n  }\n  const appBundle = appBundles[0];\n  const componentBundles = outputs.filter(\n    (out) => out.directory.path !== rootComponentDirectory.path,\n  );\n\n  const componentDefinitionSpecsWithoutImpls: ComponentDefinitionSpecWithoutImpls[] =\n    componentBundles.map(({ directory, outputJs, outputJsMap }) => ({\n      definitionPath: toComponentDefinitionPath(\n        rootComponentDirectory,\n        directory,\n      ),\n      definition: {\n        path: path.relative(directory.path, outputJs.path),\n        source: outputJs.text,\n        sourceMap: outputJsMap?.text,\n        environment: \"isolate\" as const,\n      },\n      dependencies: getDeps(\n        rootComponentDirectory,\n        dependencyGraph,\n        directory.definitionPath,\n      ),\n    }));\n  const appDeps = getDeps(\n    rootComponentDirectory,\n    dependencyGraph,\n    appBundle.directory.definitionPath,\n  );\n  const appDefinitionSpecWithoutImpls: AppDefinitionSpecWithoutImpls = {\n    definition: {\n      path: path.relative(rootComponentDirectory.path, appBundle.outputJs.path),\n      source: appBundle.outputJs.text,\n      sourceMap: appBundle.outputJsMap?.text,\n      environment: \"isolate\" as const,\n    },\n    dependencies: appDeps,\n  };\n  return {\n    appDefinitionSpecWithoutImpls,\n    componentDefinitionSpecsWithoutImpls,\n  };\n}\n\nexport async function bundleImplementations({\n  ctx,\n  rootComponentDirectory,\n  componentDirectories,\n  nodeExternalPackages,\n  extraConditions,\n  verbose = false,\n  includeSourcesContent = false,\n}: {\n  ctx: Context;\n  rootComponentDirectory: ComponentDirectory;\n  componentDirectories: ComponentDirectory[];\n  nodeExternalPackages: string[];\n  extraConditions: string[];\n  verbose: boolean;\n  includeSourcesContent?: boolean;\n}): Promise<{\n  appImplementation: {\n    schema: Bundle | null;\n    functions: Bundle[];\n    externalNodeDependencies: NodeDependency[];\n  };\n  componentImplementations: {\n    schema: Bundle | null;\n    functions: Bundle[];\n    definitionPath: ComponentDefinitionPath;\n  }[];\n  buildDebugInfos: BuildDebugInfo[];\n}> {\n  let appImplementation;\n  const componentImplementations = [];\n  const buildDebugInfos: BuildDebugInfo[] = [];\n\n  // For --component-dir flag, skip bundling root implementations (no real code to bundle)\n  const directoriesToBundle = rootComponentDirectory.syntheticComponentImport\n    ? componentDirectories\n    : [rootComponentDirectory, ...componentDirectories];\n\n  for (const directory of directoriesToBundle) {\n    const isRoot = directory.path === rootComponentDirectory.path;\n    const resolvedPath = path.resolve(\n      rootComponentDirectory.path,\n      directory.path,\n    );\n    // definitionPath is the canonical form\n    const definitionPath = toComponentDefinitionPath(\n      rootComponentDirectory,\n      directory,\n    );\n    let schema;\n    if (\n      ctx.fs.exists(path.resolve(resolvedPath, \"schema.ts\")) ||\n      ctx.fs.exists(path.resolve(resolvedPath, \"schema.js\"))\n    ) {\n      const schemaResult = await bundleSchema(\n        ctx,\n        resolvedPath,\n        extraConditions,\n      );\n      buildDebugInfos.push(\n        buildDebugInfo(directory, definitionPath, \"schema\", schemaResult),\n      );\n      schema = schemaResult.modules[0] || null;\n    } else {\n      schema = null;\n    }\n\n    const entryPoints = await entryPointsByEnvironment(ctx, resolvedPath);\n    const convexResult: {\n      modules: Bundle[];\n      externalDependencies: Map<string, string>;\n      bundledModuleNames: Set<string>;\n      metafile: Metafile | null;\n    } = await bundle({\n      ctx,\n      dir: resolvedPath,\n      entryPoints: entryPoints.isolate,\n      generateSourceMaps: true,\n      platform: \"browser\",\n      extraConditions,\n      includeSourcesContent,\n    });\n\n    if (convexResult.externalDependencies.size !== 0) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: \"external dependencies not supported\",\n      });\n    }\n    buildDebugInfos.push(\n      buildDebugInfo(directory, definitionPath, \"convex\", convexResult),\n    );\n    const functions = convexResult.modules;\n    if (isRoot) {\n      if (verbose) {\n        showSpinner(\"Bundling modules for Node.js runtime...\");\n      }\n      const nodeResult: {\n        modules: Bundle[];\n        externalDependencies: Map<string, string>;\n        bundledModuleNames: Set<string>;\n        metafile: Metafile | null;\n      } = await bundle({\n        ctx,\n        dir: resolvedPath,\n        entryPoints: entryPoints.node,\n        generateSourceMaps: true,\n        platform: \"node\",\n        chunksFolder: path.join(\"_deps\", \"node\"),\n        externalPackagesAllowList: nodeExternalPackages,\n        extraConditions,\n        includeSourcesContent,\n      });\n      buildDebugInfos.push(\n        buildDebugInfo(directory, definitionPath, \"node\", nodeResult),\n      );\n\n      const externalNodeDependencies: NodeDependency[] = [];\n      for (const [\n        moduleName,\n        moduleVersion,\n      ] of nodeResult.externalDependencies) {\n        externalNodeDependencies.push({\n          name: moduleName,\n          version: moduleVersion,\n        });\n      }\n      const authResult = await bundleAuthConfig(ctx, resolvedPath);\n      buildDebugInfos.push(\n        buildDebugInfo(directory, definitionPath, \"auth\", authResult),\n      );\n      appImplementation = {\n        schema,\n        functions: functions\n          .concat(nodeResult.modules)\n          .concat(authResult.modules),\n        externalNodeDependencies,\n      };\n    } else {\n      // Reject push if components have node bundles in non-root directories.\n      if (directory.path !== rootComponentDirectory.path) {\n        const nodeResult: {\n          modules: Bundle[];\n          externalDependencies: Map<string, string>;\n          bundledModuleNames: Set<string>;\n        } = await bundle({\n          ctx,\n          dir: resolvedPath,\n          entryPoints: entryPoints.node,\n          generateSourceMaps: true,\n          platform: \"node\",\n          chunksFolder: path.join(\"_deps\", \"node\"),\n          externalPackagesAllowList: nodeExternalPackages,\n          extraConditions,\n          includeSourcesContent,\n        });\n        if (nodeResult.modules.length > 0) {\n          // TODO(ENG-7116) Remove error and bundle the component node actions when we are ready to support them.\n          await ctx.crash({\n            exitCode: 1,\n            errorType: \"invalid filesystem data\",\n            printedMessage: `\"use node\" directive is not supported in components. Remove it from the component at: ${resolvedPath}.`,\n          });\n        }\n      }\n      componentImplementations.push({ definitionPath, schema, functions });\n    }\n  }\n\n  if (!appImplementation) {\n    // For --component-dir flag, we don't bundle root implementations so provide an empty one\n    if (rootComponentDirectory.syntheticComponentImport) {\n      appImplementation = {\n        schema: null,\n        functions: [],\n        externalNodeDependencies: [],\n      };\n    } else {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: \"No app implementation found\",\n      });\n    }\n  }\n\n  return { appImplementation, componentImplementations, buildDebugInfos };\n}\n\n/**\n * Debug information for a build in a push.\n */\nexport type BuildDebugInfo = {\n  directory: ComponentDirectory;\n  definitionPath: ComponentDefinitionPath;\n  kind: \"convex\" | \"node\" | \"schema\" | \"auth\";\n  metafile: Metafile | null;\n  modules: Bundle[];\n  externalDependencies: Map<string, string>;\n};\n\nfunction buildDebugInfo(\n  directory: ComponentDirectory,\n  definitionPath: ComponentDefinitionPath,\n  kind: BuildDebugInfo[\"kind\"],\n  result: {\n    modules: Bundle[];\n    metafile: Metafile | null;\n    externalDependencies?: Map<string, string>;\n  },\n): BuildDebugInfo {\n  return {\n    directory,\n    definitionPath,\n    kind,\n    metafile: result.metafile,\n    modules: result.modules,\n    externalDependencies: result.externalDependencies ?? new Map(),\n  };\n}\n\nasync function registerEsbuildReads(\n  ctx: Context,\n  absWorkingDir: string,\n  metafile: Metafile,\n) {\n  for (const [relPath, input] of Object.entries(metafile.inputs)) {\n    if (\n      // We rewrite these files so this integrity check isn't useful.\n      path.basename(relPath).includes(\"convex.config\") ||\n      // TODO: esbuild outputs paths prefixed with \"(disabled)\" when bundling our internal\n      // udf-system package. The files do actually exist locally, though.\n      relPath.indexOf(\"(disabled):\") !== -1 ||\n      relPath.startsWith(\"wasm-binary:\") ||\n      relPath.startsWith(\"wasm-stub:\")\n    ) {\n      continue;\n    }\n    const absPath = path.resolve(absWorkingDir, relPath);\n    const st = ctx.fs.stat(absPath);\n    if (st.size !== input.bytes) {\n      // Consider this a transient error so we'll try again and hopefully\n      // no files change right after esbuild next time.\n      logWarning(\n        `Bundled file ${absPath} changed right after esbuild invocation`,\n      );\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"transient\",\n        printedMessage: null,\n      });\n    }\n    ctx.fs.registerPath(absPath, st);\n  }\n}\n", "import path from \"path\";\nimport { Context } from \"../../../../bundler/context.js\";\nimport {\n  DEFINITION_FILENAME_JS,\n  DEFINITION_FILENAME_TS,\n} from \"../constants.js\";\nimport { getFunctionsDirectoryPath } from \"../../config.js\";\n\n/**\n * A component definition's location on the local filesystem using absolute paths.\n *\n * For module resolution it would be useful to avoid resolving any symlinks:\n * node modules are often symlinked by e.g. pnpm but relative paths should generally be\n * understood from their symlink location. We don't currently do this though, it made\n * Windows harder to support.\n *\n * None of these properties are the import string, which might have been an unqualifed import\n * (e.g. 'convex-waitlist' instead of '../node_modules/convex-waitlist/convex.config.ts')\n */\nexport type ComponentDirectory = {\n  /**\n   * Is this component directory for the root component?\n   */\n  isRoot: boolean;\n\n  /**\n   * Absolute local filesystem path to the component definition's directory.\n   */\n  path: string;\n\n  /**\n   * Absolute local filesystem path to the `convex.config.{ts,js}` file within the component definition.\n   */\n  definitionPath: string;\n\n  /**\n   * Is this component a root without a config file?\n   */\n  isRootWithoutConfig: boolean;\n\n  /**\n   * The import specifier used to import this component, with `/convex.config.*` stripped.\n   * For example, if imported as `@convex-dev/workpool/convex.config`, this would be `@convex-dev/workpool`.\n   * For relative imports like `../examples/foo/convex.config.js`, this would be `../examples/foo`.\n   * This is undefined for components discovered through the filesystem (not through imports).\n   */\n  importSpecifier?: string;\n\n  /**\n   * For synthetic configs (used with --component-dir flag), the path to the component\n   * that should be imported in the virtual convex.config.ts.\n   */\n  syntheticComponentImport?: string;\n};\n\n/**\n * Qualify (ensure a leading dot) a path and make it relative to a working dir.\n * Qualifying a path clarifies to esbuild that it represents a local file system\n * path, not a remote path on the npm registry.\n *\n * If this path were made relative without resolving symlinks it would be a\n * prettier identifier for the component directory, but instead symlinks are\n * always resolved.\n */\nexport function qualifiedDefinitionPath(\n  directory: ComponentDirectory,\n  workingDir = \".\",\n) {\n  const definitionPath = path.relative(workingDir, directory.definitionPath);\n  const posixDefinitionPath = definitionPath\n    .split(path.sep)\n    .join(path.posix.sep);\n  return `./${posixDefinitionPath}`;\n}\n\n// NB: The process cwd will be used to resolve the directory specified in the constructor.\nexport function isComponentDirectory(\n  ctx: Context,\n  directory: string,\n  isRoot: boolean,\n):\n  | { kind: \"ok\"; component: ComponentDirectory }\n  | { kind: \"err\"; why: string } {\n  let isRootWithoutConfig = false;\n\n  // If the directory doesn't exist, we need to create one.\n  if (!ctx.fs.exists(directory)) {\n    return {\n      kind: \"ok\",\n      component: {\n        isRoot,\n        path: path.resolve(directory),\n        definitionPath: path.resolve(\n          path.join(directory, DEFINITION_FILENAME_TS),\n        ),\n        isRootWithoutConfig: true,\n      },\n    };\n  }\n  const dirStat = ctx.fs.stat(directory);\n  if (!dirStat.isDirectory()) {\n    return { kind: \"err\", why: `Not a directory` };\n  }\n\n  // Check that we have a definition file, defaulting to `.ts` but falling back to `.js`.\n  let filename = DEFINITION_FILENAME_TS;\n  let definitionPath = path.resolve(path.join(directory, filename));\n  if (!ctx.fs.exists(definitionPath)) {\n    filename = DEFINITION_FILENAME_JS;\n    definitionPath = path.resolve(path.join(directory, filename));\n  }\n  if (!ctx.fs.exists(definitionPath)) {\n    isRootWithoutConfig = true;\n  } else {\n    const definitionStat = ctx.fs.stat(definitionPath);\n    if (!definitionStat.isFile()) {\n      return {\n        kind: \"err\",\n        why: `Component definition ${filename} isn't a file`,\n      };\n    }\n  }\n  return {\n    kind: \"ok\",\n    component: {\n      isRoot,\n      path: path.resolve(directory),\n      definitionPath: definitionPath,\n      isRootWithoutConfig,\n    },\n  };\n}\n\nexport async function buildComponentDirectory(\n  ctx: Context,\n  definitionPath: string,\n): Promise<ComponentDirectory> {\n  const convexDir = path.resolve(await getFunctionsDirectoryPath(ctx));\n  const isRoot = path.dirname(path.resolve(definitionPath)) === convexDir;\n  const isComponent = isComponentDirectory(\n    ctx,\n    path.dirname(definitionPath),\n    isRoot,\n  );\n  if (isComponent.kind === \"err\") {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `Invalid component directory (${isComponent.why}): ${path.dirname(definitionPath)}`,\n    });\n  }\n  return isComponent.component;\n}\n\n/**\n * ComponentPath is the local path identifying a\n * component definition. It is the unqualified (it never starts with \"./\")\n * relative path from the convex directory of the app (root component)\n * to the directory where a component definition lives.\n *\n * Note the convex/ directory of the root component is not necessarily\n * the working directory. It is currently never the same as the working\n * directory since `npx convex` must be invoked from the package root instead.\n */\nexport type ComponentDefinitionPath = string & {\n  __brand: \"ComponentDefinitionPath\";\n};\n\nexport function toComponentDefinitionPath(\n  rootComponent: ComponentDirectory,\n  component: ComponentDirectory,\n): ComponentDefinitionPath {\n  // First, compute a file system relative path.\n  const relativePath: string = path.relative(\n    rootComponent.path,\n    component.path,\n  );\n\n  // Then, convert it to a ComponentDefinitionPath, which always uses POSIX conventions.\n  const definitionPath = relativePath.split(path.sep).join(path.posix.sep);\n\n  return definitionPath as ComponentDefinitionPath;\n}\n\nexport function toAbsolutePath(\n  rootComponent: ComponentDirectory,\n  componentDefinitionPath: ComponentDefinitionPath,\n) {\n  // Repeat the process from `toComponentDefinitionPath` in reverse: First\n  // convert to a relative local filesystem path, and then join it to\n  // the root component's absolute path.\n  const relativePath = componentDefinitionPath\n    .split(path.posix.sep)\n    .join(path.sep);\n  return path.normalize(path.join(rootComponent.path, relativePath));\n}\n", "export const DEFINITION_FILENAME_TS = \"convex.config.ts\";\nexport const DEFINITION_FILENAME_JS = \"convex.config.js\";\n", "import path from \"path\";\nimport prettier from \"prettier\";\nimport { withTmpDir, TempDir } from \"../../bundler/fs.js\";\nimport { entryPoints } from \"../../bundler/index.js\";\nimport { apiCodegen } from \"../codegen_templates/api.js\";\nimport { apiCjsCodegen } from \"../codegen_templates/api_cjs.js\";\nimport { compareModulePaths } from \"../codegen_templates/common.js\";\nimport {\n  dynamicDataModelDTS,\n  dynamicDataModelTS,\n  noSchemaDataModelDTS,\n  noSchemaDataModelTS,\n  staticDataModelDTS,\n  staticDataModelTS,\n} from \"../codegen_templates/dataModel.js\";\nimport { readmeCodegen } from \"../codegen_templates/readme.js\";\nimport { serverCodegen, EnvVarMeta } from \"../codegen_templates/server.js\";\nimport { tsconfigCodegen } from \"../codegen_templates/tsconfig.js\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n  logError,\n  logMessage,\n  logOutput,\n  logVerbose,\n} from \"../../bundler/log.js\";\nimport { typeCheckFunctionsInMode, TypeCheckMode } from \"./typecheck.js\";\nimport {\n  readProjectConfig,\n  usesTypeScriptCodegen,\n  usesComponentApiImports,\n} from \"./config.js\";\nimport { recursivelyDelete } from \"./fsUtils.js\";\nimport { componentServerTS } from \"../codegen_templates/component_server.js\";\nimport {\n  ComponentDirectory,\n  toComponentDefinitionPath,\n} from \"./components/definition/directoryStructure.js\";\nimport { StartPushResponse } from \"./deployApi/startPush.js\";\nimport {\n  componentApiDTS,\n  componentApiJs,\n  componentApiStubDTS,\n  componentApiStubTS,\n  componentApiTSWithTypes,\n  componentTS,\n  rootComponentApiCJS,\n} from \"../codegen_templates/component_api.js\";\nimport { functionsDir } from \"./utils/utils.js\";\n\nconst PRESERVED_GENERATED_ENTRIES = new Set([\"ai\"]);\n\nexport function cleanupStaleGeneratedEntries(\n  ctx: Context,\n  codegenDir: string,\n  writtenFiles: string[],\n  opts?: { debug?: boolean; force?: boolean; dryRun?: boolean },\n) {\n  // Skip cleanup in debug mode since we don't actually write files in that mode.\n  if (opts?.debug) {\n    return;\n  }\n  for (const file of ctx.fs.listDir(codegenDir)) {\n    if (PRESERVED_GENERATED_ENTRIES.has(file.name)) {\n      continue;\n    }\n    if (!writtenFiles.includes(file.name)) {\n      recursivelyDelete(ctx, path.join(codegenDir, file.name), opts);\n    }\n  }\n}\n\nexport type CodegenOptions = {\n  url?: string | undefined;\n  adminKey?: string | undefined;\n  dryRun: boolean;\n  debug: boolean;\n  typecheck: TypeCheckMode;\n  init: boolean;\n  commonjs: boolean;\n  liveComponentSources: boolean;\n  debugNodeApis: boolean;\n  systemUdfs: boolean;\n  codegenOnlyThisComponent?: string | undefined;\n};\n\nexport async function doInitConvexFolder(\n  ctx: Context,\n  functionsFolder?: string,\n  opts?: {\n    dryRun?: boolean;\n    debug?: boolean;\n  },\n) {\n  const skipIfExists = true;\n  let folder: string;\n  if (functionsFolder) {\n    folder = functionsFolder;\n  } else {\n    const { projectConfig, configPath } = await readProjectConfig(ctx);\n    folder = functionsDir(configPath, projectConfig);\n  }\n  const { functionsDirExistedBeforeCodegen } = await prepareForCodegen(\n    ctx,\n    folder,\n    opts,\n  );\n  await withTmpDir(async (tmpDir) => {\n    await doReadmeCodegen(\n      ctx,\n      tmpDir,\n      folder,\n      skipIfExists && functionsDirExistedBeforeCodegen,\n      opts,\n    );\n    await doTsconfigCodegen(ctx, tmpDir, folder, skipIfExists, opts);\n  });\n}\n\nasync function prepareForCodegen(\n  ctx: Context,\n  functionsDir: string,\n  opts?: { dryRun?: boolean },\n) {\n  const functionsDirExistedBeforeCodegen = ctx.fs.exists(functionsDir);\n  // Delete the old _generated.ts because v0.1.2 used to put the react generated\n  // code there\n  const legacyCodegenPath = path.join(functionsDir, \"_generated.ts\");\n  if (ctx.fs.exists(legacyCodegenPath)) {\n    if (opts?.dryRun) {\n      logError(\n        `Command would delete legacy codegen file: ${legacyCodegenPath}}`,\n      );\n    } else {\n      logError(`Deleting legacy codegen file: ${legacyCodegenPath}}`);\n      ctx.fs.unlink(legacyCodegenPath);\n    }\n  }\n\n  // Create the codegen dir if it doesn't already exist.\n  const codegenDir = path.join(functionsDir, \"_generated\");\n  ctx.fs.mkdir(codegenDir, { allowExisting: true, recursive: true });\n  return { codegenDir, functionsDirExistedBeforeCodegen };\n}\n\n/** Codegen only for an application (a root component) */\nexport async function doCodegen(\n  ctx: Context,\n  functionsDir: string,\n  typeCheckMode: TypeCheckMode,\n  opts?: { dryRun?: boolean; generateCommonJSApi?: boolean; debug?: boolean },\n) {\n  const { projectConfig } = await readProjectConfig(ctx);\n  const { codegenDir } = await prepareForCodegen(ctx, functionsDir, opts);\n\n  await withTmpDir(async (tmpDir) => {\n    // Write files in dependency order so a watching dev server doesn't\n    // see inconsistent results where a file we write imports from a\n    // file that doesn't exist yet. We'll collect all the paths we write\n    // and then delete any remaining paths at the end.\n    const writtenFiles = [];\n\n    const useTypeScript = usesTypeScriptCodegen(projectConfig);\n    const generateCommonJSApi =\n      opts?.generateCommonJSApi || projectConfig.generateCommonJSApi;\n\n    // First, `dataModel.d.ts` imports from the developer's `schema.js` file.\n    const schemaFiles = await doDataModelCodegen(\n      ctx,\n      tmpDir,\n      functionsDir,\n      codegenDir,\n      useTypeScript,\n      opts,\n    );\n    writtenFiles.push(...schemaFiles);\n\n    // Next, the `server.d.ts` file imports from `dataModel.d.ts`.\n    const serverFiles = await writeServerFiles(\n      ctx,\n      tmpDir,\n      codegenDir,\n      useTypeScript,\n      undefined,\n      opts,\n    );\n    writtenFiles.push(...serverFiles);\n\n    // The `api.d.ts` file imports from the developer's modules, which then\n    // import from `server.d.ts`. Note that there's a cycle here, since the\n    // developer's modules could also import from the `api.{js,d.ts}` files.\n    const apiFiles = await doApiCodegen(\n      ctx,\n      tmpDir,\n      functionsDir,\n      codegenDir,\n      useTypeScript,\n      generateCommonJSApi,\n      opts,\n    );\n    writtenFiles.push(...apiFiles);\n\n    // Cleanup any files that weren't written in this run.\n    cleanupStaleGeneratedEntries(ctx, codegenDir, writtenFiles, opts);\n\n    // Generated code is updated, typecheck the query and mutation functions.\n    await typeCheckFunctionsInMode(ctx, typeCheckMode, functionsDir);\n  });\n}\n\n// Just enough to be able to bundle code for analysis: we need an api proxy object\n// so that imports aren't broken, we need basics in server, we need something in\n// data model.\nexport async function doInitialComponentCodegen(\n  ctx: Context,\n  tmpDir: TempDir,\n  componentDirectory: ComponentDirectory,\n  opts?: {\n    dryRun?: boolean;\n    generateCommonJSApi?: boolean;\n    debug?: boolean;\n    verbose?: boolean;\n  },\n) {\n  const { projectConfig } = await readProjectConfig(ctx);\n\n  if (isPublishedPackage(componentDirectory)) {\n    if (opts?.verbose) {\n      logMessage(\n        `skipping initial codegen for installed package ${componentDirectory.path}`,\n      );\n    }\n    return;\n  }\n\n  const { codegenDir } = await prepareForCodegen(\n    ctx,\n    componentDirectory.path,\n    opts,\n  );\n\n  // Write files in dependency order so a watching dev server doesn't\n  // see inconsistent results where a file we write imports from a\n  // file that doesn't exist yet. We'll collect all the paths we write\n  // and then delete any remaining paths at the end.\n  const writtenFiles = [];\n\n  // Non-root components always use .ts files; root components respect the config\n  // But for initial (placeholder, stub) codegen we don't care, just use .d.ts and .js.\n  const useTypeScript =\n    !componentDirectory.isRoot || usesTypeScriptCodegen(projectConfig);\n\n  const generateCommonJSApi =\n    opts?.generateCommonJSApi || projectConfig.generateCommonJSApi;\n\n  // First, `dataModel.d.ts` imports from the developer's `schema.js` file.\n  const dataModelFiles = await doInitialComponentDataModelCodegen(\n    ctx,\n    tmpDir,\n    componentDirectory,\n    codegenDir,\n    useTypeScript,\n    opts,\n  );\n  writtenFiles.push(...dataModelFiles);\n\n  // Next, the `server.d.ts` file imports from `dataModel.d.ts`.\n  const serverFiles = await doInitialComponentServerCodegen(\n    ctx,\n    componentDirectory.isRoot,\n    tmpDir,\n    codegenDir,\n    useTypeScript,\n    undefined,\n    opts,\n  );\n  writtenFiles.push(...serverFiles);\n\n  // The `api.d.ts` file imports from the developer's modules, which then\n  // import from `server.d.ts`. Note that there's a cycle here, since the\n  // developer's modules could also import from the `api.{js,d.ts}` files.\n  const apiFiles = await doInitialComponentApiCodegen(\n    ctx,\n    componentDirectory.isRoot,\n    tmpDir,\n    codegenDir,\n    useTypeScript,\n    generateCommonJSApi,\n    opts,\n  );\n  writtenFiles.push(...apiFiles);\n\n  // component.ts is generated in doFinalComponentCodegen, but don't delete\n  // if it already exists from a previous full codegen run.\n  if (!componentDirectory.isRoot) {\n    const componentTSPath = path.join(codegenDir, \"component.ts\");\n    if (ctx.fs.exists(componentTSPath)) {\n      writtenFiles.push(\"component.ts\");\n    }\n  }\n\n  // Cleanup any files that weren't written in this run.\n  cleanupStaleGeneratedEntries(ctx, codegenDir, writtenFiles, opts);\n}\n\n/* This component defined in a dist directory; it is probably in a node_module\n * directory, installed from a package. It is stuck with the files it has.\n * Heuristics for this:\n * - component definition has a dist/ directory as an ancestor\n * - component definition is a .js file\n * - presence of .js.map files\n * We may improve this heuristic.\n */\nexport function isPublishedPackage(componentDirectory: ComponentDirectory) {\n  return (\n    componentDirectory.definitionPath.endsWith(\".js\") &&\n    !componentDirectory.isRoot\n  );\n}\n\n// Handles root and non-root components; it's \"component\" codegen because\n// it's not the old legacy path.\nexport async function doFinalComponentCodegen(\n  ctx: Context,\n  tmpDir: TempDir,\n  rootComponent: ComponentDirectory,\n  componentDirectory: ComponentDirectory,\n  startPushResponse: StartPushResponse,\n  componentsMap: Map<string, ComponentDirectory>,\n  opts?: {\n    dryRun?: boolean;\n    debug?: boolean;\n    generateCommonJSApi?: boolean;\n  },\n) {\n  const { projectConfig } = await readProjectConfig(ctx);\n\n  const isPublishedPackage =\n    componentDirectory.definitionPath.endsWith(\".js\") &&\n    !componentDirectory.isRoot;\n  // We never codegen for a published package (you need to link to the convex.config.ts file instead).\n  if (isPublishedPackage) {\n    return;\n  }\n\n  const codegenDir = path.join(componentDirectory.path, \"_generated\");\n  ctx.fs.mkdir(codegenDir, { allowExisting: true, recursive: true });\n\n  // Non-root components always use .ts files; root components respect the config\n  const useTypeScript =\n    !componentDirectory.isRoot || usesTypeScriptCodegen(projectConfig);\n\n  // `dataModel` and `api` files depend on analyze results so will get replaced\n  // in the later post-analysis codegen phase,  but `server` files don't need\n  // analysis info so the stubs from initial codegen are sufficient.\n\n  // dataModel\n  const hasSchemaFile = schemaFileExists(ctx, componentDirectory.path);\n  let dataModelContents: string;\n  if (hasSchemaFile) {\n    if (projectConfig.codegen.staticDataModel) {\n      dataModelContents = useTypeScript\n        ? await staticDataModelTS(\n            ctx,\n            startPushResponse,\n            rootComponent,\n            componentDirectory,\n          )\n        : await staticDataModelDTS(\n            ctx,\n            startPushResponse,\n            rootComponent,\n            componentDirectory,\n          );\n    } else {\n      dataModelContents = useTypeScript\n        ? dynamicDataModelTS()\n        : dynamicDataModelDTS();\n    }\n  } else {\n    dataModelContents = useTypeScript\n      ? noSchemaDataModelTS()\n      : noSchemaDataModelDTS();\n  }\n  const dataModelPath = path.join(\n    codegenDir,\n    useTypeScript ? \"dataModel.ts\" : \"dataModel.d.ts\",\n  );\n  await writeFormattedFile(\n    ctx,\n    tmpDir,\n    dataModelContents,\n    \"typescript\",\n    dataModelPath,\n    opts,\n  );\n\n  // component.ts\n  if (!componentDirectory.isRoot) {\n    const componentTSPath = path.join(codegenDir, \"component.ts\");\n    const componentTSContents = await componentTS(\n      ctx,\n      startPushResponse,\n      rootComponent,\n      componentDirectory,\n    );\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      componentTSContents,\n      \"typescript\",\n      componentTSPath,\n      opts,\n    );\n  }\n\n  // server.ts - regenerate it in final codegen so we can emit typed env vars.\n  const definitionPath = toComponentDefinitionPath(\n    rootComponent,\n    componentDirectory,\n  );\n  const analysis = startPushResponse.analysis[definitionPath];\n  const envVars: EnvVarMeta[] =\n    analysis?.definition.envVars && analysis.definition.envVars.length > 0\n      ? analysis.definition.envVars\n      : [];\n  await writeServerFilesForComponent(\n    ctx,\n    componentDirectory.isRoot,\n    tmpDir,\n    codegenDir,\n    useTypeScript,\n    envVars,\n    opts,\n  );\n\n  // api\n  if (!useTypeScript) {\n    const apiDTSPath = path.join(codegenDir, \"api.d.ts\");\n    const apiContents = await componentApiDTS(\n      ctx,\n      startPushResponse,\n      rootComponent,\n      componentDirectory,\n      componentsMap,\n      {\n        staticApi: projectConfig.codegen.staticApi,\n        useComponentApiImports: usesComponentApiImports(projectConfig),\n      },\n    );\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      apiContents,\n      \"typescript\",\n      apiDTSPath,\n      opts,\n    );\n\n    if (opts?.generateCommonJSApi || projectConfig.generateCommonJSApi) {\n      const apiCjsDTSPath = path.join(codegenDir, \"api_cjs.d.cts\");\n      await writeFormattedFile(\n        ctx,\n        tmpDir,\n        apiContents,\n        \"typescript\",\n        apiCjsDTSPath,\n        opts,\n      );\n    }\n  } else {\n    const apiTSPath = path.join(codegenDir, \"api.ts\");\n    const apiContents = await componentApiTSWithTypes(\n      ctx,\n      startPushResponse,\n      rootComponent,\n      componentDirectory,\n      componentsMap,\n      {\n        staticApi: projectConfig.codegen.staticApi,\n        useComponentApiImports: usesComponentApiImports(projectConfig),\n      },\n    );\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      apiContents,\n      \"typescript\",\n      apiTSPath,\n      opts,\n    );\n  }\n}\n\nasync function doReadmeCodegen(\n  ctx: Context,\n  tmpDir: TempDir,\n  functionsDir: string,\n  skip: boolean,\n  opts?: { dryRun?: boolean; debug?: boolean },\n) {\n  const readmePath = path.join(functionsDir, \"README.md\");\n  if (skip) {\n    logVerbose(`Not overwriting README.md.`);\n    return;\n  }\n  await writeFormattedFile(\n    ctx,\n    tmpDir,\n    readmeCodegen(),\n    \"markdown\",\n    readmePath,\n    opts,\n  );\n}\n\nasync function doTsconfigCodegen(\n  ctx: Context,\n  tmpDir: TempDir,\n  functionsDir: string,\n  skipIfExists: boolean,\n  opts?: { dryRun?: boolean; debug?: boolean },\n) {\n  const tsconfigPath = path.join(functionsDir, \"tsconfig.json\");\n  if (skipIfExists && ctx.fs.exists(tsconfigPath)) {\n    logVerbose(`Not overwriting tsconfig.json.`);\n    return;\n  }\n  await writeFormattedFile(\n    ctx,\n    tmpDir,\n    tsconfigCodegen(),\n    \"json\",\n    tsconfigPath,\n    opts,\n  );\n}\n\nfunction schemaFileExists(ctx: Context, functionsDir: string) {\n  let schemaPath = path.join(functionsDir, \"schema.ts\");\n  let hasSchemaFile = ctx.fs.exists(schemaPath);\n  if (!hasSchemaFile) {\n    schemaPath = path.join(functionsDir, \"schema.js\");\n    hasSchemaFile = ctx.fs.exists(schemaPath);\n  }\n  return hasSchemaFile;\n}\n\nasync function doDataModelCodegen(\n  ctx: Context,\n  tmpDir: TempDir,\n  functionsDir: string,\n  codegenDir: string,\n  useTypeScript: boolean,\n  opts?: { dryRun?: boolean; debug?: boolean },\n) {\n  const hasSchemaFile = schemaFileExists(ctx, functionsDir);\n  const schemaContent = hasSchemaFile\n    ? useTypeScript\n      ? dynamicDataModelTS()\n      : dynamicDataModelDTS()\n    : useTypeScript\n      ? noSchemaDataModelTS()\n      : noSchemaDataModelDTS();\n\n  const filename = useTypeScript ? \"dataModel.ts\" : \"dataModel.d.ts\";\n  await writeFormattedFile(\n    ctx,\n    tmpDir,\n    schemaContent,\n    \"typescript\",\n    path.join(codegenDir, filename),\n    opts,\n  );\n  return [filename];\n}\n\n/**\n * Write server.ts/.js/.d.ts files for root components.\n * Returns list of filenames written.\n */\nasync function writeServerFiles(\n  ctx: Context,\n  tmpDir: TempDir,\n  codegenDir: string,\n  useTypeScript: boolean,\n  envVars: EnvVarMeta[] | undefined,\n  opts?: { dryRun?: boolean; debug?: boolean },\n): Promise<string[]> {\n  if (!useTypeScript) {\n    const serverContent = serverCodegen({\n      useTypeScript: false,\n      envVars,\n    });\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      serverContent.JS!,\n      \"typescript\",\n      path.join(codegenDir, \"server.js\"),\n      opts,\n    );\n\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      serverContent.DTS!,\n      \"typescript\",\n      path.join(codegenDir, \"server.d.ts\"),\n      opts,\n    );\n\n    return [\"server.js\", \"server.d.ts\"];\n  } else {\n    const serverContent = serverCodegen({\n      useTypeScript: true,\n      envVars,\n    });\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      serverContent.TS!,\n      \"typescript\",\n      path.join(codegenDir, \"server.ts\"),\n      opts,\n    );\n\n    return [\"server.ts\"];\n  }\n}\n\n/**\n * Write server.ts file for non-root components.\n * Returns list of filenames written.\n */\nasync function writeComponentServerFile(\n  ctx: Context,\n  tmpDir: TempDir,\n  codegenDir: string,\n  envVars: EnvVarMeta[] | undefined,\n  opts?: { dryRun?: boolean; debug?: boolean },\n): Promise<string[]> {\n  const serverTSPath = path.join(codegenDir, \"server.ts\");\n  const serverTSContents = componentServerTS(false, envVars);\n  await writeFormattedFile(\n    ctx,\n    tmpDir,\n    serverTSContents,\n    \"typescript\",\n    serverTSPath,\n    opts,\n  );\n  return [\"server.ts\"];\n}\n\n/**\n * Write server files for either root or non-root components.\n * Root components get server.ts/server.js/server.d.ts based on useTypeScript.\n * Non-root components always get server.ts.\n * Returns list of filenames written.\n */\nasync function writeServerFilesForComponent(\n  ctx: Context,\n  isRoot: boolean,\n  tmpDir: TempDir,\n  codegenDir: string,\n  useTypeScript: boolean,\n  envVars: EnvVarMeta[] | undefined,\n  opts?: { dryRun?: boolean; debug?: boolean },\n): Promise<string[]> {\n  if (isRoot) {\n    return await writeServerFiles(\n      ctx,\n      tmpDir,\n      codegenDir,\n      useTypeScript,\n      envVars,\n      opts,\n    );\n  } else {\n    return await writeComponentServerFile(\n      ctx,\n      tmpDir,\n      codegenDir,\n      envVars,\n      opts,\n    );\n  }\n}\n\nasync function doInitialComponentServerCodegen(\n  ctx: Context,\n  isRoot: boolean,\n  tmpDir: TempDir,\n  codegenDir: string,\n  useTypeScript: boolean,\n  envVars: EnvVarMeta[] | undefined,\n  opts?: { dryRun?: boolean; debug?: boolean },\n) {\n  // Don't write our stub if the file already exists, since it may have\n  // better type information from `doFinalComponentCodegen` (e.g. env vars).\n  const serverFilename = useTypeScript ? \"server.ts\" : \"server.js\";\n  if (ctx.fs.exists(path.join(codegenDir, serverFilename))) {\n    const filenames = [serverFilename];\n    if (!useTypeScript) {\n      filenames.push(\"server.d.ts\");\n    }\n    return filenames;\n  }\n  return await writeServerFilesForComponent(\n    ctx,\n    isRoot,\n    tmpDir,\n    codegenDir,\n    useTypeScript,\n    envVars,\n    opts,\n  );\n}\n\nasync function doInitialComponentDataModelCodegen(\n  ctx: Context,\n  tmpDir: TempDir,\n  componentDirectory: ComponentDirectory,\n  codegenDir: string,\n  useTypeScript: boolean,\n  opts?: { dryRun?: boolean; debug?: boolean },\n) {\n  const hasSchemaFile = schemaFileExists(ctx, componentDirectory.path);\n  const dataModelContent = hasSchemaFile\n    ? useTypeScript\n      ? dynamicDataModelTS()\n      : dynamicDataModelDTS()\n    : useTypeScript\n      ? noSchemaDataModelTS()\n      : noSchemaDataModelDTS();\n  const filename = useTypeScript ? \"dataModel.ts\" : \"dataModel.d.ts\";\n  const dataModelPath = path.join(codegenDir, filename);\n\n  // Don't write our stub if the file already exists, since it may have\n  // better type information from `doFinalComponentDataModelCodegen`.\n  if (!ctx.fs.exists(dataModelPath)) {\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      dataModelContent,\n      \"typescript\",\n      dataModelPath,\n      opts,\n    );\n  }\n  return [filename];\n}\n\nasync function doInitialComponentApiCodegen(\n  ctx: Context,\n  isRoot: boolean,\n  tmpDir: TempDir,\n  codegenDir: string,\n  useTypeScript: boolean,\n  generateCommonJSApi: boolean,\n  opts?: { dryRun?: boolean; debug?: boolean },\n) {\n  const writtenFiles: string[] = [];\n\n  if (!useTypeScript) {\n    const apiJS = componentApiJs();\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      apiJS,\n      \"typescript\",\n      path.join(codegenDir, \"api.js\"),\n      opts,\n    );\n\n    // Don't write the `.d.ts` stub if it already exists.\n    const apiDTSPath = path.join(codegenDir, \"api.d.ts\");\n    const apiStubDTS = componentApiStubDTS();\n    if (!ctx.fs.exists(apiDTSPath)) {\n      await writeFormattedFile(\n        ctx,\n        tmpDir,\n        apiStubDTS,\n        \"typescript\",\n        apiDTSPath,\n        opts,\n      );\n    }\n\n    writtenFiles.push(\"api.js\", \"api.d.ts\");\n\n    if (generateCommonJSApi && isRoot) {\n      const apiCjsJS = rootComponentApiCJS();\n      await writeFormattedFile(\n        ctx,\n        tmpDir,\n        apiCjsJS,\n        \"typescript\",\n        path.join(codegenDir, \"api_cjs.cjs\"),\n        opts,\n      );\n\n      const cjsStubPath = path.join(codegenDir, \"api_cjs.d.cts\");\n      if (!ctx.fs.exists(cjsStubPath)) {\n        await writeFormattedFile(\n          ctx,\n          tmpDir,\n          apiStubDTS,\n          \"typescript\",\n          cjsStubPath,\n          opts,\n        );\n      }\n      writtenFiles.push(\"api_cjs.cjs\", \"api_cjs.d.cts\");\n    }\n  } else {\n    const apiTSPath = path.join(codegenDir, \"api.ts\");\n    const apiTS = componentApiStubTS();\n    // Don't write the `.ts` stub if it already exists.\n    if (!ctx.fs.exists(apiTSPath)) {\n      await writeFormattedFile(\n        ctx,\n        tmpDir,\n        apiTS,\n        \"typescript\",\n        apiTSPath,\n        opts,\n      );\n    }\n    writtenFiles.push(\"api.ts\");\n  }\n\n  return writtenFiles;\n}\n\nasync function doApiCodegen(\n  ctx: Context,\n  tmpDir: TempDir,\n  functionsDir: string,\n  codegenDir: string,\n  useTypeScript: boolean,\n  generateCommonJSApi: boolean,\n  opts?: { dryRun?: boolean; debug?: boolean },\n) {\n  const absModulePaths = await entryPoints(ctx, functionsDir);\n  const modulePaths = absModulePaths\n    .map((p) => path.relative(functionsDir, p))\n    .sort(compareModulePaths);\n\n  const writtenFiles: string[] = [];\n\n  if (!useTypeScript) {\n    const apiContent = apiCodegen(modulePaths, { useTypeScript: false });\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      apiContent.JS!,\n      \"typescript\",\n      path.join(codegenDir, \"api.js\"),\n      opts,\n    );\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      apiContent.DTS!,\n      \"typescript\",\n      path.join(codegenDir, \"api.d.ts\"),\n      opts,\n    );\n    writtenFiles.push(\"api.js\", \"api.d.ts\");\n\n    if (generateCommonJSApi) {\n      const apiCjsContent = apiCjsCodegen(modulePaths);\n      await writeFormattedFile(\n        ctx,\n        tmpDir,\n        apiCjsContent.JS!,\n        \"typescript\",\n        path.join(codegenDir, \"api_cjs.cjs\"),\n        opts,\n      );\n      await writeFormattedFile(\n        ctx,\n        tmpDir,\n        apiCjsContent.DTS!,\n        \"typescript\",\n        path.join(codegenDir, \"api_cjs.d.cts\"),\n        opts,\n      );\n      writtenFiles.push(\"api_cjs.cjs\", \"api_cjs.d.cts\");\n    }\n  } else {\n    const apiContent = apiCodegen(modulePaths, { useTypeScript: true });\n    await writeFormattedFile(\n      ctx,\n      tmpDir,\n      apiContent.TS!,\n      \"typescript\",\n      path.join(codegenDir, \"api.ts\"),\n      opts,\n    );\n    writtenFiles.push(\"api.ts\");\n  }\n\n  return writtenFiles;\n}\n\nasync function writeFormattedFile(\n  ctx: Context,\n  tmpDir: TempDir,\n  contents: string,\n  filetype: string,\n  destination: string,\n  options?: {\n    dryRun?: boolean;\n    debug?: boolean;\n  },\n) {\n  // Run prettier so we don't have to think about formatting!\n  //\n  // This is a little sketchy because we are using the default prettier config\n  // (not our user's one) but it's better than nothing.\n  const formattedContents = await prettier.format(contents, {\n    parser: filetype,\n    pluginSearchDirs: false,\n  });\n  if (options?.debug) {\n    // NB: The `test_codegen_projects_are_up_to_date` smoke test depends\n    // on this output format.\n    logOutput(`# ${path.resolve(destination)}`);\n    logOutput(formattedContents);\n    return;\n  }\n  try {\n    const existing = ctx.fs.readUtf8File(destination);\n    if (existing === formattedContents) {\n      return;\n    }\n  } catch (err: any) {\n    if (err.code !== \"ENOENT\") {\n      // eslint-disable-next-line no-restricted-syntax\n      throw err;\n    }\n  }\n  if (options?.dryRun) {\n    logOutput(`Command would write file: ${destination}`);\n    return;\n  }\n  const tmpPath = tmpDir.writeUtf8File(formattedContents);\n  ctx.fs.swapTmpFile(tmpPath, destination);\n}\n", "export function header(oneLineDescription: string) {\n  return `/* eslint-disable */\n  /**\n   * ${oneLineDescription}\n   *\n   * THIS CODE IS AUTOMATICALLY GENERATED.\n   *\n   * To regenerate, run \\`npx convex dev\\`.\n   * @module\n   */\n  `;\n}\n\nexport function apiComment(\n  apiName: string,\n  type: \"public\" | \"internal\" | undefined,\n) {\n  return `\n  /**\n     * A utility for referencing Convex functions in your app's${type ? ` ${type}` : \"\"} API.\n     *\n     * Usage:\n     * \\`\\`\\`js\n     * const myFunctionReference = ${apiName}.myModule.myFunction;\n     * \\`\\`\\`\n     */`;\n}\n\nconst collator = new Intl.Collator(\"en-US\", {\n  usage: \"sort\",\n  numeric: true,\n  sensitivity: \"case\",\n  ignorePunctuation: false,\n  caseFirst: \"false\",\n});\n\n/**\n * Comparison function for sorting strings alphabetically.\n *\n * Usage: array.sort(compareStrings)\n * or with entries: Object.entries(obj).sort(([a], [b]) => compareStrings(a, b))\n */\nexport function compareStrings(a: string, b: string): number {\n  return collator.compare(a, b);\n}\n\n/**\n * Comparison function for sorting module paths in codegen output.\n *\n * Compares the forward slash normalized form of each path so the resulting\n * order is identical on every platform. Sorting OS-native paths directly\n * diverges on Windows because \"\\\" (0x5C) sorts after letters while \"/\"\n * (0x2F) sorts before them. Uses plain code unit comparison to match the\n * default Array.prototype.sort() order these paths sorted with on POSIX.\n *\n * Usage: modulePaths.sort(compareModulePaths)\n */\nexport function compareModulePaths(a: string, b: string): number {\n  const aNormalized = a.replace(/\\\\/g, \"/\");\n  const bNormalized = b.replace(/\\\\/g, \"/\");\n  return aNormalized < bNormalized ? -1 : aNormalized > bNormalized ? 1 : 0;\n}\n", "import { header } from \"./common.js\";\n\nexport function importPath(modulePath: string) {\n  // Replace backslashes with forward slashes.\n  const filePath = modulePath.replace(/\\\\/g, \"/\");\n  // Strip off the file extension.\n  const lastDot = filePath.lastIndexOf(\".\");\n  return filePath.slice(0, lastDot === -1 ? undefined : lastDot);\n}\n\nexport function moduleIdentifier(modulePath: string) {\n  // TODO: This encoding is ambiguous (`foo/bar` vs `foo_bar` vs `foo-bar`).\n  // Also we should be renaming keywords like `delete`.\n  let safeModulePath = importPath(modulePath)\n    .replace(/\\//g, \"_\")\n    .replace(/-/g, \"_\");\n  // Escape existing variable names in this file\n  if ([\"fullApi\", \"api\", \"internal\", \"components\"].includes(safeModulePath)) {\n    safeModulePath = `${safeModulePath}_`;\n  }\n  // Escape reserved words which are legal property names unescaped but are not\n  // legal identifiers.\n  // see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#reserved_words\n  const reserved = [\n    \"break\",\n    \"case\",\n    \"catch\",\n    \"class\",\n    \"const\",\n    \"continue\",\n    \"debugger\",\n    \"default\",\n    \"delete\",\n    \"do\",\n    \"else\",\n    \"export\",\n    \"extends\",\n    \"false\",\n    \"finally\",\n    \"for\",\n    \"function\",\n    \"if\",\n    \"import\",\n    \"in\",\n    \"instanceof\",\n    \"new\",\n    \"null\",\n    \"return\",\n    \"super\",\n    \"switch\",\n    \"this\",\n    \"throw\",\n    \"true\",\n    \"try\",\n    \"typeof\",\n    \"var\",\n    \"void\",\n    \"while\",\n    \"with\",\n    \"let\",\n    \"static\",\n    \"yield\",\n    \"await\",\n    \"enum\",\n    \"implements\",\n    \"interface\",\n    \"package\",\n    \"private\",\n    \"protected\",\n    \"public\",\n  ];\n  if (reserved.includes(safeModulePath)) {\n    safeModulePath = `${safeModulePath}_`;\n  }\n  return safeModulePath;\n}\n\nexport function apiCodegen(\n  modulePaths: string[],\n  opts?: { useTypeScript?: boolean },\n) {\n  const useTypeScript = opts?.useTypeScript ?? false;\n\n  if (!useTypeScript) {\n    // Generate separate .js and .d.ts files\n    const apiDTS = `${header(\"Generated `api` utility.\")}\n  import type { ApiFromModules, FilterApi, FunctionReference } from \"convex/server\";\n  ${modulePaths\n    .map(\n      (modulePath) =>\n        `import type * as ${moduleIdentifier(modulePath)} from \"../${importPath(\n          modulePath,\n        )}.js\";`,\n    )\n    .join(\"\\n\")}\n\n  /**\n   * A utility for referencing Convex functions in your app's API.\n   *\n   * Usage:\n   * \\`\\`\\`js\n   * const myFunctionReference = api.myModule.myFunction;\n   * \\`\\`\\`\n   */\n  declare const fullApi: ApiFromModules<{\n    ${modulePaths\n      .map(\n        (modulePath) =>\n          `\"${importPath(modulePath)}\": typeof ${moduleIdentifier(modulePath)},`,\n      )\n      .join(\"\\n\")}\n  }>;\n  export declare const api: FilterApi<typeof fullApi, FunctionReference<any, \"public\">>;\n  export declare const internal: FilterApi<typeof fullApi, FunctionReference<any, \"internal\">>;\n  `;\n\n    const apiJS = `${header(\"Generated `api` utility.\")}\n  import { anyApi } from \"convex/server\";\n\n  /**\n   * A utility for referencing Convex functions in your app's API.\n   *\n   * Usage:\n   * \\`\\`\\`js\n   * const myFunctionReference = api.myModule.myFunction;\n   * \\`\\`\\`\n   */\n  export const api = anyApi;\n  export const internal = anyApi;\n  `;\n    return {\n      DTS: apiDTS,\n      JS: apiJS,\n    };\n  } else {\n    // Generate combined .ts file\n    const apiTS = `${header(\"Generated `api` utility.\")}\nimport type { ApiFromModules, FilterApi, FunctionReference } from \"convex/server\";\nimport { anyApi } from \"convex/server\";\n${modulePaths\n  .map(\n    (modulePath) =>\n      `import type * as ${moduleIdentifier(modulePath)} from \"../${importPath(\n        modulePath,\n      )}.js\";`,\n  )\n  .join(\"\\n\")}\n\nconst fullApi: ApiFromModules<{\n  ${modulePaths\n    .map(\n      (modulePath) =>\n        `\"${importPath(modulePath)}\": typeof ${moduleIdentifier(modulePath)},`,\n    )\n    .join(\"\\n\")}\n}> = anyApi as any;\n\n/**\n * A utility for referencing Convex functions in your app's public API.\n *\n * Usage:\n * \\`\\`\\`js\n * const myFunctionReference = api.myModule.myFunction;\n * \\`\\`\\`\n */\nexport const api: FilterApi<typeof fullApi, FunctionReference<any, \"public\">> = anyApi as any;\n\n/**\n * A utility for referencing Convex functions in your app's internal API.\n *\n * Usage:\n * \\`\\`\\`js\n * const myFunctionReference = internal.myModule.myFunction;\n * \\`\\`\\`\n */\nexport const internal: FilterApi<typeof fullApi, FunctionReference<any, \"internal\">> = anyApi as any;\n`;\n    return {\n      TS: apiTS,\n    };\n  }\n}\n", "import { apiCodegen as esmApiCodegen } from \"./api.js\";\nimport { header } from \"./common.js\";\n\nexport function apiCjsCodegen(modulePaths: string[]) {\n  const { DTS } = esmApiCodegen(modulePaths);\n  const apiJS = `${header(\"Generated `api` utility.\")}\n  const { anyApi } = require(\"convex/server\");\n  module.exports = {\n    api: anyApi,\n    internal: anyApi,\n  };\n  `;\n  return {\n    DTS,\n    JS: apiJS,\n  };\n}\n", "import { jsonToConvex, Value } from \"../../values/index.js\";\nimport { ConvexValidator } from \"../lib/deployApi/validator.js\";\n\nexport function parseValidator(\n  validator: string | null,\n): ConvexValidator | null {\n  if (!validator) {\n    return null;\n  }\n  // This is code returned from the server, so we can skip validation\n  return JSON.parse(validator) as ConvexValidator;\n}\n\nexport function validatorToType(\n  validator: ConvexValidator,\n  useIdType: boolean,\n): string {\n  if (validator.type === \"null\") {\n    return \"null\";\n  } else if (validator.type === \"number\") {\n    return \"number\";\n  } else if (validator.type === \"bigint\") {\n    return \"bigint\";\n  } else if (validator.type === \"commitTs\") {\n    // Match `Infer<v.commitTs()>`: the field holds a bigint once committed,\n    // but writes go through `db.vars.commitTs` (a `CommitTsPlaceholder`) and\n    // same-mutation read-backs yield the placeholder. The inline import keeps\n    // this valid in every generated file regardless of its header imports.\n    return 'bigint | import(\"convex/values\").CommitTsPlaceholder';\n  } else if (validator.type === \"function\") {\n    const fnType = validator.fnType ? `\"${validator.fnType}\"` : \"any\";\n    const args = validator.args\n      ? validatorToType(validator.args, useIdType)\n      : \"any\";\n    const returns = validator.returns\n      ? validatorToType(validator.returns, useIdType)\n      : \"any\";\n    return `import(\"convex/server\").FunctionHandle_future<${fnType}, ${args}, ${returns}>`;\n  } else if (validator.type === \"boolean\") {\n    return \"boolean\";\n  } else if (validator.type === \"string\") {\n    return \"string\";\n  } else if (validator.type === \"bytes\") {\n    return \"ArrayBuffer\";\n  } else if (validator.type === \"any\") {\n    return \"any\";\n  } else if (validator.type === \"literal\") {\n    const convexValue = jsonToConvex(validator.value);\n    return convexValueToLiteral(convexValue);\n  } else if (validator.type === \"id\") {\n    return useIdType ? `Id<\"${validator.tableName}\">` : \"string\";\n  } else if (validator.type === \"array\") {\n    return `Array<${validatorToType(validator.value, useIdType)}>`;\n  } else if (validator.type === \"record\") {\n    return `Record<${validatorToType(validator.keys, useIdType)}, ${validatorToType(validator.values.fieldType, useIdType)}>`;\n  } else if (validator.type === \"union\") {\n    return validator.value\n      .map((v) => validatorToType(v, useIdType))\n      .join(\" | \");\n  } else if (validator.type === \"object\") {\n    return objectValidatorToType(validator.value, useIdType);\n  } else {\n    // eslint-disable-next-line no-restricted-syntax\n    throw new Error(`Unsupported validator type`);\n  }\n}\n\nfunction objectValidatorToType(\n  fields: Record<string, { fieldType: ConvexValidator; optional: boolean }>,\n  useIdType: boolean,\n): string {\n  const fieldStrings: string[] = [];\n  for (const [fieldName, field] of Object.entries(fields)) {\n    const fieldType = validatorToType(field.fieldType, useIdType);\n    fieldStrings.push(`${fieldName}${field.optional ? \"?\" : \"\"}: ${fieldType}`);\n  }\n  return `{ ${fieldStrings.join(\", \")} }`;\n}\n\nfunction convexValueToLiteral(value: Value): string {\n  if (value === null) {\n    return \"null\";\n  }\n  if (typeof value === \"bigint\") {\n    return `${value}n`;\n  }\n  if (typeof value === \"number\") {\n    return `${value}`;\n  }\n  if (typeof value === \"boolean\") {\n    return `${value}`;\n  }\n  if (typeof value === \"string\") {\n    return `\"${value}\"`;\n  }\n  // eslint-disable-next-line no-restricted-syntax\n  throw new Error(`Unsupported literal type`);\n}\n", "import { Context } from \"../../bundler/context.js\";\nimport { SystemIndexes } from \"../../server/system_fields.js\";\nimport {\n  ComponentDirectory,\n  toComponentDefinitionPath,\n} from \"../lib/components/definition/directoryStructure.js\";\nimport {\n  AnalyzedSchema,\n  TableDefinition,\n} from \"../lib/deployApi/componentDefinition.js\";\nimport { StartPushResponse } from \"../lib/deployApi/startPush.js\";\nimport { ConvexValidator } from \"../lib/deployApi/validator.js\";\nimport { compareStrings, header } from \"./common.js\";\nimport { validatorToType } from \"./validator_helpers.js\";\n\nconst NO_SCHEMA_DATA_MODEL_CONTENT = `\n  ${header(\"Generated data model types.\")}\n  import { AnyDataModel } from \"convex/server\";\n  import type { GenericId } from \"convex/values\";\n\n  /**\n   * No \\`schema.ts\\` file found!\n   *\n   * This generated code has permissive types like \\`Doc = any\\` because\n   * Convex doesn't know your schema. If you'd like more type safety, see\n   * https://docs.convex.dev/using/schemas for instructions on how to add a\n   * schema file.\n   *\n   * After you change a schema, rerun codegen with \\`npx convex dev\\`.\n   */\n\n  /**\n   * The names of all of your Convex tables.\n   */\n  export type TableNames = string;\n\n  /**\n   * The type of a document stored in Convex.\n   */\n  export type Doc = any;\n\n  /**\n   * An identifier for a document in Convex.\n   *\n   * Convex documents are uniquely identified by their \\`Id\\`, which is accessible\n   * on the \\`_id\\` field. To learn more, see [Document IDs](https://docs.convex.dev/using/document-ids).\n   *\n   * Documents can be loaded using \\`db.get(tableName, id)\\` in query and mutation functions.\n   *\n   * IDs are just strings at runtime, but this type can be used to distinguish them from other\n   * strings when type checking.\n   */\n  export type Id<TableName extends TableNames = TableNames> = GenericId<TableName>;\n\n  /**\n   * A type describing your Convex data model.\n   *\n   * This type includes information about what tables you have, the type of\n   * documents stored in those tables, and the indexes defined on them.\n   *\n   * This type is used to parameterize methods like \\`queryGeneric\\` and\n   * \\`mutationGeneric\\` to make them type-safe.\n   */\n  export type DataModel = AnyDataModel;`;\n\nexport function noSchemaDataModelDTS() {\n  return NO_SCHEMA_DATA_MODEL_CONTENT;\n}\n\nexport function noSchemaDataModelTS() {\n  return NO_SCHEMA_DATA_MODEL_CONTENT;\n}\n\nconst dynamicDataModelContent = `\n  ${header(\"Generated data model types.\")}\n  import type { DataModelFromSchemaDefinition, DocumentByName, TableNamesInDataModel, SystemTableNames } from \"convex/server\";\n  import type { GenericId } from \"convex/values\";\n  import schema from \"../schema.js\";\n\n  /**\n   * The names of all of your Convex tables.\n   */\n  export type TableNames = TableNamesInDataModel<DataModel>;\n\n  /**\n   * The type of a document stored in Convex.\n   *\n   * @typeParam TableName - A string literal type of the table name (like \"users\").\n   */\n  export type Doc<TableName extends TableNames> = DocumentByName<DataModel, TableName>;\n\n  /**\n   * An identifier for a document in Convex.\n   *\n   * Convex documents are uniquely identified by their \\`Id\\`, which is accessible\n   * on the \\`_id\\` field. To learn more, see [Document IDs](https://docs.convex.dev/using/document-ids).\n   *\n   * Documents can be loaded using \\`db.get(tableName, id)\\` in query and mutation functions.\n   *\n   * IDs are just strings at runtime, but this type can be used to distinguish them from other\n   * strings when type checking.\n   *\n   * @typeParam TableName - A string literal type of the table name (like \"users\").\n   */\n  export type Id<TableName extends TableNames | SystemTableNames> = GenericId<TableName>;\n\n  /**\n   * A type describing your Convex data model.\n   *\n   * This type includes information about what tables you have, the type of\n   * documents stored in those tables, and the indexes defined on them.\n   *\n   * This type is used to parameterize methods like \\`queryGeneric\\` and\n   * \\`mutationGeneric\\` to make them type-safe.\n   */\n  export type DataModel = DataModelFromSchemaDefinition<typeof schema>;\n  `;\n\nexport function dynamicDataModelDTS() {\n  return dynamicDataModelContent;\n}\n\nexport function dynamicDataModelTS() {\n  return dynamicDataModelContent;\n}\n\nasync function staticDataModelImpl(\n  ctx: Context,\n  startPush: StartPushResponse,\n  rootComponent: ComponentDirectory,\n  componentDirectory: ComponentDirectory,\n  useTypeScript: boolean,\n): Promise<string> {\n  const definitionPath = toComponentDefinitionPath(\n    rootComponent,\n    componentDirectory,\n  );\n\n  const analysis = startPush.analysis[definitionPath];\n  if (!analysis) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `No analysis found for component ${definitionPath} orig: ${definitionPath}\\nin\\n${Object.keys(startPush.analysis).toString()}`,\n    });\n  }\n  if (!analysis.schema) {\n    return useTypeScript ? noSchemaDataModelTS() : noSchemaDataModelDTS();\n  }\n\n  const lines = [\n    header(\"Generated data model types.\"),\n    `import type { DocumentByName, TableNamesInDataModel, SystemTableNames, AnyDataModel } from \"convex/server\";`,\n    `import type { GenericId } from \"convex/values\";`,\n  ];\n  for await (const line of codegenDataModel(ctx, analysis.schema)) {\n    lines.push(line);\n  }\n  lines.push(`\n    /**\n     * The names of all of your Convex tables.\n     */\n    export type TableNames = TableNamesInDataModel<DataModel>;\n\n    /**\n     * The type of a document stored in Convex.\n     *\n     * @typeParam TableName - A string literal type of the table name (like \"users\").\n     */\n    export type Doc<TableName extends TableNames> = DocumentByName<DataModel, TableName>;\n\n    /**\n     * An identifier for a document in Convex.\n     *\n     * Convex documents are uniquely identified by their \\`Id\\`, which is accessible\n     * on the \\`_id\\` field. To learn more, see [Document IDs](https://docs.convex.dev/using/document-ids).\n     *\n     * Documents can be loaded using \\`db.get(tableName, id)\\` in query and mutation functions.\n     *\n     * IDs are just strings at runtime, but this type can be used to distinguish them from other\n     * strings when type checking.\n     *\n     * @typeParam TableName - A string literal type of the table name (like \"users\").\n     */\n    export type Id<TableName extends TableNames | SystemTableNames> = GenericId<TableName>;\n    `);\n\n  return lines.join(\"\\n\");\n}\n\nexport async function staticDataModelDTS(\n  ctx: Context,\n  startPush: StartPushResponse,\n  rootComponent: ComponentDirectory,\n  componentDirectory: ComponentDirectory,\n) {\n  return staticDataModelImpl(\n    ctx,\n    startPush,\n    rootComponent,\n    componentDirectory,\n    false,\n  );\n}\n\n// Used for components and root\nexport async function staticDataModelTS(\n  ctx: Context,\n  startPush: StartPushResponse,\n  rootComponent: ComponentDirectory,\n  componentDirectory: ComponentDirectory,\n) {\n  return staticDataModelImpl(\n    ctx,\n    startPush,\n    rootComponent,\n    componentDirectory,\n    true,\n  );\n}\n\nasync function* codegenDataModel(ctx: Context, schema: AnalyzedSchema) {\n  yield `\n    /**\n     * A type describing your Convex data model.\n     *\n     * This type includes information about what tables you have, the type of\n     * documents stored in those tables, and the indexes defined on them.\n     *\n     * This type is used to parameterize methods like \\`queryGeneric\\` and\n     * \\`mutationGeneric\\` to make them type-safe.\n     */\n  `;\n  const tables = [...schema.tables];\n  tables.sort((a, b) => compareStrings(a.tableName, b.tableName));\n\n  yield `export type DataModel = {`;\n  for (const table of tables) {\n    yield `  ${table.tableName}:`;\n    yield* codegenTable(ctx, table);\n    yield `,`;\n  }\n  yield `}`;\n  if (!schema.schemaValidation) {\n    yield ` & AnyDataModel`;\n  }\n  yield `;`;\n}\n\nasync function* codegenTable(ctx: Context, table: TableDefinition) {\n  const documentType = await addSystemFields(\n    ctx,\n    table.tableName,\n    table.documentType,\n  );\n\n  const indexJson: Record<string, string[]> = {};\n  for (const index of table.indexes) {\n    indexJson[index.indexDescriptor] = index.fields;\n  }\n\n  yield `{`;\n  yield `  document: ${validatorToType(documentType, true)},`;\n\n  const fieldPaths = new Set<string>();\n  for (const fieldPath of extractFieldPaths(documentType)) {\n    fieldPaths.add(fieldPath.join(\".\"));\n  }\n  yield `  fieldPaths: ${stringLiteralUnionType(Array.from(fieldPaths).sort(compareStrings))},`;\n\n  yield `  indexes: {`;\n  const systemIndexes: SystemIndexes = {\n    by_id: [\"_id\"],\n    by_creation_time: [\"_creationTime\"],\n  };\n  const indexes: Record<string, string[]> = {};\n  for (const [indexDescriptor, fields] of Object.entries(systemIndexes)) {\n    indexes[indexDescriptor] = fields;\n  }\n  for (const index of table.indexes) {\n    if (indexes[index.indexDescriptor]) {\n      yield await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Duplicate index name ${index.indexDescriptor} in table ${table.tableName}.`,\n      });\n    }\n    indexes[index.indexDescriptor] = index.fields;\n  }\n  for (const [indexDescriptor, fields] of Object.entries(indexes)) {\n    yield `    \"${indexDescriptor}\": ${JSON.stringify(fields)},`;\n  }\n  yield `  },`;\n\n  yield `  searchIndexes: {`;\n  for (const index of table.searchIndexes ?? []) {\n    yield `    \"${index.indexDescriptor}\": {`;\n    yield `      searchField: \"${index.searchField}\",`;\n    yield `      filterFields: ${stringLiteralUnionType(index.filterFields)},`;\n    yield `    },`;\n  }\n  yield `  },`;\n\n  yield `  vectorIndexes: {`;\n  for (const index of table.vectorIndexes ?? []) {\n    yield `    \"${index.indexDescriptor}\": {`;\n    yield `      vectorField: \"${index.vectorField}\",`;\n    yield `      dimensions: number,`;\n    yield `      filterFields: ${stringLiteralUnionType(index.filterFields)},`;\n    yield `    },`;\n  }\n  yield `  },`;\n  yield `}`;\n}\n\nconst SYSTEM_FIELDS = [\"_id\", \"_creationTime\"];\n\nasync function addSystemFields(\n  ctx: Context,\n  tableName: string,\n  validator: ConvexValidator,\n): Promise<ConvexValidator> {\n  if (validator.type === \"object\") {\n    return addSystemFieldsToObject(ctx, tableName, validator);\n  } else if (validator.type === \"any\") {\n    return { type: \"any\" };\n  } else if (validator.type === \"union\") {\n    const newSubValidators = [];\n    for (const subValidator of validator.value) {\n      const newSubValidator = await addSystemFieldsToObject(\n        ctx,\n        tableName,\n        subValidator,\n      );\n      newSubValidators.push(newSubValidator);\n    }\n    return { type: \"union\", value: newSubValidators };\n  } else {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Invalid top-level validator for ${tableName}.`,\n    });\n  }\n}\n\nasync function addSystemFieldsToObject(\n  ctx: Context,\n  tableName: string,\n  validator: ConvexValidator,\n): Promise<ConvexValidator> {\n  if (validator.type !== \"object\") {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `System fields can only be added to objects.`,\n    });\n  }\n  for (const systemField of SYSTEM_FIELDS) {\n    if (Object.hasOwn(validator.value, systemField)) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `System field ${systemField} present in table ${tableName}.`,\n      });\n    }\n  }\n  return {\n    type: \"object\",\n    value: {\n      ...validator.value,\n      _id: {\n        fieldType: { type: \"id\", tableName },\n        optional: false,\n      },\n      _creationTime: {\n        fieldType: { type: \"number\" },\n        optional: false,\n      },\n    },\n  };\n}\n\nfunction* extractFieldPaths(validator: ConvexValidator): Generator<string[]> {\n  if (validator.type === \"object\") {\n    for (const [fieldName, fieldValidator] of Object.entries(validator.value)) {\n      yield [fieldName];\n      for (const subFieldPath of extractFieldPaths(fieldValidator.fieldType)) {\n        if (subFieldPath.length > 0) {\n          yield [fieldName, ...subFieldPath];\n        }\n      }\n    }\n  } else if (validator.type === \"union\") {\n    for (const subValidator of validator.value) {\n      yield* extractFieldPaths(subValidator);\n    }\n  } else if (validator.type === \"record\") {\n    yield [\"${string}\"];\n  } else {\n    yield [];\n  }\n}\n\nfunction stringLiteralUnionType(fields: string[]) {\n  if (fields.length === 0) {\n    return \"never\";\n  } else {\n    return fields\n      .map((field) => (field.includes(\"${\") ? `\\`${field}\\`` : `\"${field}\"`))\n      .join(\" | \");\n  }\n}\n", "export function readmeCodegen() {\n  return `# Welcome to your Convex functions directory!\n\nWrite your Convex functions here.\nSee https://docs.convex.dev/functions for more.\n\nA query function that takes two arguments looks like:\n\n\\`\\`\\`ts\n// convex/myFunctions.ts\nimport { query } from \"./_generated/server\";\nimport { v } from \"convex/values\";\n\nexport const myQueryFunction = query({\n  // Validators for arguments.\n  args: {\n    first: v.number(),\n    second: v.string(),\n  },\n\n  // Function implementation.\n  handler: async (ctx, args) => {\n    // Read the database as many times as you need here.\n    // See https://docs.convex.dev/database/reading-data.\n    const documents = await ctx.db.query(\"tablename\").collect();\n\n    // Arguments passed from the client are properties of the args object.\n    console.log(args.first, args.second)\n\n    // Write arbitrary JavaScript here: filter, aggregate, build derived data,\n    // remove non-public properties, or create new objects.\n    return documents;\n  },\n});\n\\`\\`\\`\n\nUsing this query function in a React component looks like:\n\n\\`\\`\\`ts\nconst data = useQuery(api.myFunctions.myQueryFunction, { first: 10, second: \"hello\" });\n\\`\\`\\`\n\n\nA mutation function looks like:\n\n\\`\\`\\`ts\n// convex/myFunctions.ts\nimport { mutation } from \"./_generated/server\";\nimport { v } from \"convex/values\";\n\nexport const myMutationFunction = mutation({\n  // Validators for arguments.\n  args: {\n    first: v.string(),\n    second: v.string(),\n  },\n\n  // Function implementation.\n  handler: async (ctx, args) => {\n    // Insert or modify documents in the database here.\n    // Mutations can also read from the database like queries.\n    // See https://docs.convex.dev/database/writing-data.\n    const message = { body: args.first, author: args.second };\n    const id = await ctx.db.insert(\"messages\", message);\n\n    // Optionally, return a value from your mutation.\n    return await ctx.db.get(\"messages\", id);\n  },\n});\n\\`\\`\\`\n\nUsing this mutation function in a React component looks like:\n\n\\`\\`\\`ts\nconst mutation = useMutation(api.myFunctions.myMutationFunction);\nfunction handleButtonPress() {\n  // fire and forget, the most common way to use mutations\n  mutation({ first: \"Hello!\", second: \"me\" });\n  // OR\n  // use the result once the mutation has completed\n  mutation({ first: \"Hello!\", second: \"me\" }).then(result => console.log(result));\n}\n\\`\\`\\`\n\nUse the Convex CLI to push your functions to a deployment. See everything\nthe Convex CLI can do by running \\`npx convex -h\\` in your project root\ndirectory. To learn more, launch the docs with \\`npx convex docs\\`.\n`;\n}\n", "import { header } from \"./common.js\";\nimport { parseValidator, validatorToType } from \"./validator_helpers.js\";\n\nexport type EnvVarMeta = [\n  string,\n  { type: \"value\"; value: string; optional?: boolean | undefined },\n];\n\n// Environment variables the platform always injects into every deployment,\n// independent of the user's `convex.config.ts` declarations. Both are always\n// present, so they're typed as required `string`.\nconst PLATFORM_ENV_VARS: EnvVarMeta[] = [\n  [\"CONVEX_CLOUD_URL\", { type: \"value\", value: '{\"type\":\"string\"}' }],\n  [\"CONVEX_SITE_URL\", { type: \"value\", value: '{\"type\":\"string\"}' }],\n];\n\n// Prepend the always-present platform env vars. Users can't declare env vars\n// with these names \u2014 the backend rejects overriding built-in system env vars \u2014\n// so there's no collision to worry about.\nexport function withPlatformEnvVars(envVars: EnvVarMeta[]): EnvVarMeta[] {\n  return [...PLATFORM_ENV_VARS, ...envVars];\n}\n\nconst ENV_DOCSTRING = `/**\n * Typesafe environment variables.\n *\n * This includes platform-provided env vars and any variables declared in\n * \\`convex.config.ts\\`.\n */`;\n\nexport function serverCodegen({\n  useTypeScript,\n  envVars,\n}: {\n  useTypeScript: boolean;\n  // - undefined: env var declarations not yet known (initial codegen before\n  //   server analysis). Emits an untyped `env` stub so imports don't break.\n  // - array (empty or not): emit a typed `Env` interface and typed `env`\n  //   export. The interface always includes the platform-provided env vars, so\n  //   an empty array still yields a typed `env` with just those.\n  envVars: EnvVarMeta[] | undefined;\n}) {\n  const emittedEnvVars =\n    envVars === undefined ? undefined : withPlatformEnvVars(envVars);\n  const hasEnv = emittedEnvVars !== undefined;\n  const envInterface = hasEnv ? generateEnvInterface(emittedEnvVars!) : \"\";\n  const envDeclDTS = hasEnv\n    ? `\n${ENV_DOCSTRING}\nexport declare const env: Env;\n`\n    : `\nexport declare const env: Record<string, string | undefined>;\n`;\n  // Route through `globalThis` rather than the bare `process` global so the\n  // generated file typechecks even in projects without `@types/node`.\n  const envDeclTS = hasEnv\n    ? `\n${ENV_DOCSTRING}\nexport const env: Env = (globalThis as unknown as { process: { env: Env } }).process.env;\n`\n    : `\nexport const env: Record<string, string | undefined> = (globalThis as unknown as { process: { env: Record<string, string | undefined> } }).process.env;\n`;\n  const envDeclJS = hasEnv\n    ? `\n${ENV_DOCSTRING}\nexport const env = process.env;\n`\n    : `\nexport const env = process.env;\n`;\n\n  if (!useTypeScript) {\n    // Generate separate .js and .d.ts files\n    const serverDTS = `\n    ${header(\n      \"Generated utilities for implementing server-side Convex query and mutation functions.\",\n    )}\n    import {\n      ActionBuilder,\n      HttpActionBuilder,\n      MutationBuilder,\n      QueryBuilder,\n      GenericActionCtx,\n      GenericMutationCtx,\n      GenericQueryCtx,\n      GenericDatabaseReader,\n      GenericDatabaseWriter,\n    } from \"convex/server\";\n    import type { DataModel } from \"./dataModel.js\";\n    ${envInterface}\n\n    /**\n     * Define a query in this Convex app's public API.\n     *\n     * This function will be allowed to read your Convex database and will be accessible from the client.\n     *\n     * @param func - The query function. It receives a {@link QueryCtx} as its first argument.\n     * @returns The wrapped query. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export declare const query: QueryBuilder<DataModel, \"public\">;\n\n    /**\n     * Define a query that is only accessible from other Convex functions (but not from the client).\n     *\n     * This function will be allowed to read from your Convex database. It will not be accessible from the client.\n     *\n     * @param func - The query function. It receives a {@link QueryCtx} as its first argument.\n     * @returns The wrapped query. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export declare const internalQuery: QueryBuilder<DataModel, \"internal\">;\n\n    /**\n     * Define a mutation in this Convex app's public API.\n     *\n     * This function will be allowed to modify your Convex database and will be accessible from the client.\n     *\n     * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.\n     * @returns The wrapped mutation. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export declare const mutation: MutationBuilder<DataModel, \"public\">;\n\n    /**\n     * Define a mutation that is only accessible from other Convex functions (but not from the client).\n     *\n     * This function will be allowed to modify your Convex database. It will not be accessible from the client.\n     *\n     * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.\n     * @returns The wrapped mutation. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export declare const internalMutation: MutationBuilder<DataModel, \"internal\">;\n\n    /**\n     * Define an action in this Convex app's public API.\n     *\n     * An action is a function which can execute any JavaScript code, including non-deterministic\n     * code and code with side-effects, like calling third-party services.\n     * They can be run in Convex's JavaScript environment or in Node.js using the \"use node\" directive.\n     * They can interact with the database indirectly by calling queries and mutations using the {@link ActionCtx}.\n     *\n     * @param func - The action. It receives an {@link ActionCtx} as its first argument.\n     * @returns The wrapped action. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export declare const action: ActionBuilder<DataModel, \"public\">;\n\n    /**\n     * Define an action that is only accessible from other Convex functions (but not from the client).\n     *\n     * @param func - The function. It receives an {@link ActionCtx} as its first argument.\n     * @returns The wrapped function. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export declare const internalAction: ActionBuilder<DataModel, \"internal\">;\n\n    /**\n     * Define an HTTP action.\n     *\n     * The wrapped function will be used to respond to HTTP requests received\n     * by a Convex deployment if the requests matches the path and method where\n     * this action is routed. Be sure to route your httpAction in \\`convex/http.js\\`.\n     *\n     * @param func - The function. It receives an {@link ActionCtx} as its first argument\n     * and a Fetch API \\`Request\\` object as its second.\n     * @returns The wrapped function. Import this function from \\`convex/http.js\\` and route it to hook it up.\n     */\n    export declare const httpAction: HttpActionBuilder;\n${envDeclDTS}\n    /**\n     * A set of services for use within Convex query functions.\n     *\n     * The query context is passed as the first argument to any Convex query\n     * function run on the server.\n     *\n     * This differs from the {@link MutationCtx} because all of the services are\n     * read-only.\n     */\n    export type QueryCtx = GenericQueryCtx<DataModel>;\n\n    /**\n     * A set of services for use within Convex mutation functions.\n     *\n     * The mutation context is passed as the first argument to any Convex mutation\n     * function run on the server.\n     */\n    export type MutationCtx = GenericMutationCtx<DataModel>;\n\n    /**\n     * A set of services for use within Convex action functions.\n     *\n     * The action context is passed as the first argument to any Convex action\n     * function run on the server.\n     */\n    export type ActionCtx = GenericActionCtx<DataModel>;\n\n    /**\n     * An interface to read from the database within Convex query functions.\n     *\n     * The two entry points are {@link DatabaseReader.get}, which fetches a single\n     * document by its {@link Id}, or {@link DatabaseReader.query}, which starts\n     * building a query.\n     */\n    export type DatabaseReader = GenericDatabaseReader<DataModel>;\n\n    /**\n     * An interface to read from and write to the database within Convex mutation\n     * functions.\n     *\n     * Convex guarantees that all writes within a single mutation are\n     * executed atomically, so you never have to worry about partial writes leaving\n     * your data in an inconsistent state. See [the Convex Guide](https://docs.convex.dev/understanding/convex-fundamentals/functions#atomicity-and-optimistic-concurrency-control)\n     * for the guarantees Convex provides your functions.\n     */\n    export type DatabaseWriter = GenericDatabaseWriter<DataModel>;`;\n\n    const serverJS = `\n    ${header(\n      \"Generated utilities for implementing server-side Convex query and mutation functions.\",\n    )}\n    import {\n      actionGeneric,\n      httpActionGeneric,\n      queryGeneric,\n      mutationGeneric,\n      internalActionGeneric,\n      internalMutationGeneric,\n      internalQueryGeneric,\n    } from \"convex/server\";\n\n    /**\n     * Define a query in this Convex app's public API.\n     *\n     * This function will be allowed to read your Convex database and will be accessible from the client.\n     *\n     * @param func - The query function. It receives a {@link QueryCtx} as its first argument.\n     * @returns The wrapped query. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export const query = queryGeneric;\n\n    /**\n     * Define a query that is only accessible from other Convex functions (but not from the client).\n     *\n     * This function will be allowed to read from your Convex database. It will not be accessible from the client.\n     *\n     * @param func - The query function. It receives a {@link QueryCtx} as its first argument.\n     * @returns The wrapped query. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export const internalQuery = internalQueryGeneric;\n\n    /**\n     * Define a mutation in this Convex app's public API.\n     *\n     * This function will be allowed to modify your Convex database and will be accessible from the client.\n     *\n     * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.\n     * @returns The wrapped mutation. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export const mutation = mutationGeneric;\n\n    /**\n     * Define a mutation that is only accessible from other Convex functions (but not from the client).\n     *\n     * This function will be allowed to modify your Convex database. It will not be accessible from the client.\n     *\n     * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.\n     * @returns The wrapped mutation. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export const internalMutation = internalMutationGeneric;\n\n    /**\n     * Define an action in this Convex app's public API.\n     *\n     * An action is a function which can execute any JavaScript code, including non-deterministic\n     * code and code with side-effects, like calling third-party services.\n     * They can be run in Convex's JavaScript environment or in Node.js using the \"use node\" directive.\n     * They can interact with the database indirectly by calling queries and mutations using the {@link ActionCtx}.\n     *\n     * @param func - The action. It receives an {@link ActionCtx} as its first argument.\n     * @returns The wrapped action. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export const action = actionGeneric;\n\n    /**\n     * Define an action that is only accessible from other Convex functions (but not from the client).\n     *\n     * @param func - The function. It receives an {@link ActionCtx} as its first argument.\n     * @returns The wrapped function. Include this as an \\`export\\` to name it and make it accessible.\n     */\n    export const internalAction = internalActionGeneric;\n\n    /**\n     * Define an HTTP action.\n     *\n     * The wrapped function will be used to respond to HTTP requests received\n     * by a Convex deployment if the requests matches the path and method where\n     * this action is routed. Be sure to route your httpAction in \\`convex/http.js\\`.\n     *\n     * @param func - The function. It receives an {@link ActionCtx} as its first argument\n     * and a Fetch API \\`Request\\` object as its second.\n     * @returns The wrapped function. Import this function from \\`convex/http.js\\` and route it to hook it up.\n     */\n    export const httpAction = httpActionGeneric;\n${envDeclJS}\n    `;\n\n    return {\n      DTS: serverDTS,\n      JS: serverJS,\n    };\n  } else {\n    // Generate combined .ts file\n    const serverTS = `${header(\n      \"Generated utilities for implementing server-side Convex query and mutation functions.\",\n    )}\nimport {\n  actionGeneric,\n  httpActionGeneric,\n  queryGeneric,\n  mutationGeneric,\n  internalActionGeneric,\n  internalMutationGeneric,\n  internalQueryGeneric,\n} from \"convex/server\";\nimport type {\n  ActionBuilder,\n  HttpActionBuilder,\n  MutationBuilder,\n  QueryBuilder,\n  GenericActionCtx,\n  GenericMutationCtx,\n  GenericQueryCtx,\n  GenericDatabaseReader,\n  GenericDatabaseWriter,\n} from \"convex/server\";\nimport type { DataModel } from \"./dataModel.js\";\n${envInterface}\n\n/**\n * Define a query in this Convex app's public API.\n *\n * This function will be allowed to read your Convex database and will be accessible from the client.\n *\n * @param func - The query function. It receives a {@link QueryCtx} as its first argument.\n * @returns The wrapped query. Include this as an \\`export\\` to name it and make it accessible.\n */\nexport const query: QueryBuilder<DataModel, \"public\"> = queryGeneric;\n\n/**\n * Define a query that is only accessible from other Convex functions (but not from the client).\n *\n * This function will be allowed to read from your Convex database. It will not be accessible from the client.\n *\n * @param func - The query function. It receives a {@link QueryCtx} as its first argument.\n * @returns The wrapped query. Include this as an \\`export\\` to name it and make it accessible.\n */\nexport const internalQuery: QueryBuilder<DataModel, \"internal\"> = internalQueryGeneric;\n\n/**\n * Define a mutation in this Convex app's public API.\n *\n * This function will be allowed to modify your Convex database and will be accessible from the client.\n *\n * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.\n * @returns The wrapped mutation. Include this as an \\`export\\` to name it and make it accessible.\n */\nexport const mutation: MutationBuilder<DataModel, \"public\"> = mutationGeneric;\n\n/**\n * Define a mutation that is only accessible from other Convex functions (but not from the client).\n *\n * This function will be allowed to modify your Convex database. It will not be accessible from the client.\n *\n * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.\n * @returns The wrapped mutation. Include this as an \\`export\\` to name it and make it accessible.\n */\nexport const internalMutation: MutationBuilder<DataModel, \"internal\"> = internalMutationGeneric;\n\n/**\n * Define an action in this Convex app's public API.\n *\n * An action is a function which can execute any JavaScript code, including non-deterministic\n * code and code with side-effects, like calling third-party services.\n * They can be run in Convex's JavaScript environment or in Node.js using the \"use node\" directive.\n * They can interact with the database indirectly by calling queries and mutations using the {@link ActionCtx}.\n *\n * @param func - The action. It receives an {@link ActionCtx} as its first argument.\n * @returns The wrapped action. Include this as an \\`export\\` to name it and make it accessible.\n */\nexport const action: ActionBuilder<DataModel, \"public\"> = actionGeneric;\n\n/**\n * Define an action that is only accessible from other Convex functions (but not from the client).\n *\n * @param func - The function. It receives an {@link ActionCtx} as its first argument.\n * @returns The wrapped function. Include this as an \\`export\\` to name it and make it accessible.\n */\nexport const internalAction: ActionBuilder<DataModel, \"internal\"> = internalActionGeneric;\n\n/**\n * Define an HTTP action.\n *\n * The wrapped function will be used to respond to HTTP requests received\n * by a Convex deployment if the requests matches the path and method where\n * this action is routed. Be sure to route your httpAction in \\`convex/http.js\\`.\n *\n * @param func - The function. It receives an {@link ActionCtx} as its first argument\n * and a Fetch API \\`Request\\` object as its second.\n * @returns The wrapped function. Import this function from \\`convex/http.js\\` and route it to hook it up.\n */\nexport const httpAction: HttpActionBuilder = httpActionGeneric;\n${envDeclTS}\n/**\n * A set of services for use within Convex query functions.\n *\n * The query context is passed as the first argument to any Convex query\n * function run on the server.\n *\n * This differs from the {@link MutationCtx} because all of the services are\n * read-only.\n */\nexport type QueryCtx = GenericQueryCtx<DataModel>;\n\n/**\n * A set of services for use within Convex mutation functions.\n *\n * The mutation context is passed as the first argument to any Convex mutation\n * function run on the server.\n */\nexport type MutationCtx = GenericMutationCtx<DataModel>;\n\n/**\n * A set of services for use within Convex action functions.\n *\n * The action context is passed as the first argument to any Convex action\n * function run on the server.\n */\nexport type ActionCtx = GenericActionCtx<DataModel>;\n\n/**\n * An interface to read from the database within Convex query functions.\n *\n * The two entry points are {@link DatabaseReader.get}, which fetches a single\n * document by its {@link Id}, or {@link DatabaseReader.query}, which starts\n * building a query.\n */\nexport type DatabaseReader = GenericDatabaseReader<DataModel>;\n\n/**\n * An interface to read from and write to the database within Convex mutation\n * functions.\n *\n * Convex guarantees that all writes within a single mutation are\n * executed atomically, so you never have to worry about partial writes leaving\n * your data in an inconsistent state. See [the Convex Guide](https://docs.convex.dev/understanding/convex-fundamentals/functions#atomicity-and-optimistic-concurrency-control)\n * for the guarantees Convex provides your functions.\n */\nexport type DatabaseWriter = GenericDatabaseWriter<DataModel>;`;\n\n    return {\n      TS: serverTS,\n    };\n  }\n}\n\nexport function generateEnvInterface(envVars: EnvVarMeta[]): string {\n  const lines: string[] = [];\n  for (const [name, decl] of envVars) {\n    const parsed = parseValidator(decl.value);\n    let tsType = parsed ? validatorToType(parsed, false) : \"unknown\";\n    if (decl.optional) {\n      tsType += \" | undefined\";\n    }\n    lines.push(`  readonly ${name}: ${tsType};`);\n  }\n  return `\n${ENV_DOCSTRING}\ntype Env = {\n${lines.join(\"\\n\")}\n};`;\n}\n", "export function tsconfigCodegen() {\n  return `{\n  /* This TypeScript project config describes the environment that\n   * Convex functions run in and is used to typecheck them.\n   * You can modify it, but some settings are required to use Convex.\n   */\n  \"compilerOptions\": {\n    /* These settings are not required by Convex and can be modified. */\n    \"allowJs\": true,\n    \"strict\": true,\n    \"moduleResolution\": \"Bundler\",\n    \"jsx\": \"react-jsx\",\n    \"skipLibCheck\": true,\n    \"allowSyntheticDefaultImports\": true,\n\n    /* These compiler options are required by Convex */\n    \"target\": \"ESNext\",\n    \"lib\": [\"ES2023\", \"dom\"],\n    \"forceConsistentCasingInFileNames\": true,\n    \"module\": \"ESNext\",\n    \"isolatedModules\": true,\n    \"noEmit\": true,\n  },\n  \"include\": [\"./**/*\"],\n  \"exclude\": [\"./_generated\"]\n}`;\n}\n", "import { chalkStderr } from \"chalk\";\nimport path from \"path\";\nimport { performance } from \"perf_hooks\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n  changeSpinner,\n  logError,\n  logFailure,\n  logMessage,\n  showSpinner,\n} from \"../../bundler/log.js\";\nimport * as Sentry from \"@sentry/node\";\nimport * as semver from \"semver\";\nimport { formatDuration, spawnAsync } from \"./utils/utils.js\";\nimport { readProjectConfig } from \"./config.js\";\nimport { WatchContext } from \"./watch.js\";\nimport { Filesystem } from \"../../bundler/fs.js\";\n\nexport type TypecheckResult = \"cantTypeCheck\" | \"success\" | \"typecheckFailed\";\n\nexport type TypeCheckMode = \"enable\" | \"try\" | \"disable\";\n\nexport type TypescriptCompiler = \"tsc\" | \"tsgo\";\n\nconst SLOW_TYPECHECK_THRESHOLD_MS = 10_000;\nconst SLOW_TYPECHECK_DOCS_URL =\n  \"https://docs.convex.dev/cli/troubleshooting/typecheck-performance\";\n\n/**\n * Resolves the TypeScript compiler to use based on CLI flag, config file, and default.\n * Precedence: CLI flag \u2192 config file \u2192 default \"tsc\"\n */\nexport async function resolveTypescriptCompiler(\n  ctx: Context,\n  cliOption?: TypescriptCompiler,\n): Promise<TypescriptCompiler> {\n  const { projectConfig } = await readProjectConfig(ctx);\n  return cliOption ?? projectConfig?.typescriptCompiler ?? \"tsc\";\n}\n\ntype TypecheckResultHandler = (\n  result: TypecheckResult,\n  logSpecificError?: () => void,\n  // If given, we run it to print out errors.\n  // We expect it to throw or resolve to \"success\"\n  // if a concurrent change invalidated the error result.\n  runOnError?: () => Promise<\"success\">,\n) => Promise<void>;\n\n/**\n * Conditionally run a typecheck function and interpret the result.\n *\n * If typeCheckMode === \"disable\", never run the typecheck function.\n * If typeCheckMode === \"enable\", run the typecheck and crash if typechecking\n * fails or we can't find tsc.\n * If typeCheckMode === \"try\", try and run the typecheck. crash if typechecking\n * fails but don't worry if tsc is missing and we can't run it.\n */\nexport async function typeCheckFunctionsInMode(\n  ctx: Context,\n  typeCheckMode: TypeCheckMode,\n  functionsDir: string,\n): Promise<void> {\n  if (typeCheckMode === \"disable\") {\n    return;\n  }\n  const typescriptCompiler = await resolveTypescriptCompiler(ctx);\n  const typecheckStart = performance.now();\n  const slowTypecheckTimeout = setTimeout(() => {\n    changeSpinner(\n      `Still running TypeScript... see ${SLOW_TYPECHECK_DOCS_URL} to troubleshoot.`,\n    );\n  }, SLOW_TYPECHECK_THRESHOLD_MS);\n  try {\n    await typeCheckFunctions(\n      ctx,\n      typescriptCompiler,\n      functionsDir,\n      async (result, logSpecificError, runOnError) => {\n        if (\n          (result === \"cantTypeCheck\" && typeCheckMode === \"enable\") ||\n          result === \"typecheckFailed\"\n        ) {\n          logSpecificError?.();\n          logError(\n            chalkStderr.gray(\n              \"To ignore failing typecheck, use `--typecheck=disable`.\",\n            ),\n          );\n          try {\n            const result = await runOnError?.();\n            // Concurrent change invalidated the error, don't fail\n            if (result === \"success\") {\n              return;\n            }\n          } catch {\n            // As expected, `runOnError` threw\n          }\n          await ctx.crash({\n            exitCode: 1,\n            errorType: \"invalid filesystem data\",\n            printedMessage: null,\n          });\n        }\n      },\n    );\n  } finally {\n    clearTimeout(slowTypecheckTimeout);\n  }\n  maybeLogSlowTypecheckSuggestion(ctx, performance.now() - typecheckStart);\n}\n\n// Runs TypeScript compiler to typecheck Convex query and mutation functions.\nexport async function typeCheckFunctions(\n  ctx: Context,\n  typescriptCompiler: TypescriptCompiler,\n  functionsDir: string,\n  handleResult: TypecheckResultHandler,\n): Promise<void> {\n  const tsconfig = path.join(functionsDir, \"tsconfig.json\");\n  if (!ctx.fs.exists(tsconfig)) {\n    return handleResult(\"cantTypeCheck\", () => {\n      logError(\n        \"Found no convex/tsconfig.json to use to typecheck Convex functions, so skipping typecheck.\",\n      );\n      logError(\"Run `npx convex codegen --init` to create one.\");\n    });\n  }\n  await runTsc(\n    ctx,\n    typescriptCompiler,\n    [\"--project\", functionsDir],\n    handleResult,\n  );\n}\n\nasync function runTsc(\n  ctx: Context,\n  typescriptCompiler: TypescriptCompiler,\n  tscArgs: string[],\n  handleResult: TypecheckResultHandler,\n): Promise<void> {\n  const compilerPath = findTypeScriptCompilerPath(ctx.fs, typescriptCompiler);\n  if (!compilerPath) {\n    return handleResult(\"cantTypeCheck\", () => {\n      logError(\n        chalkStderr.gray(\n          `No \\`${typescriptCompiler}\\` binary found, so skipping typecheck.`,\n        ),\n      );\n    });\n  }\n\n  // Check the TypeScript version matches the recommendation from Convex\n  const versionResult = await spawnAsync(ctx, process.execPath, [\n    compilerPath,\n    \"--version\",\n  ]);\n\n  const version = versionResult.stdout.match(/Version (.*)/)?.[1] ?? null;\n  const hasOlderTypeScriptVersion = version && semver.lt(version, \"4.8.4\");\n\n  await runTscInner(ctx, compilerPath, tscArgs, handleResult);\n\n  // Print this warning after any logs from running `tsc`\n  if (hasOlderTypeScriptVersion) {\n    logError(\n      chalkStderr.yellow(\n        \"Convex works best with TypeScript version 4.8.4 or newer -- npm i --save-dev typescript@latest to update.\",\n      ),\n    );\n  }\n}\n\nexport function findTypeScriptCompilerPath(\n  fs: Pick<Filesystem, \"exists\">,\n  typescriptCompiler: TypescriptCompiler,\n): string | undefined {\n  switch (typescriptCompiler) {\n    case \"tsgo\": {\n      // @typescript/native-preview@7.0.0-dev.20260626.1 switched to using `bin/tsgo` instead of `bin/tsgo.js`.\n      const tsgoPaths = [\"tsgo\", \"tsgo.js\"].map((filename) =>\n        path.join(\n          \"node_modules\",\n          \"@typescript\",\n          \"native-preview\",\n          \"bin\",\n          filename,\n        ),\n      );\n      return tsgoPaths.find((path) => fs.exists(path));\n    }\n    case \"tsc\": {\n      const tscPaths = [\n        // TypeScript 7's recommended alias when the TypeScript 6 API is also installed.\n        path.join(\"node_modules\", \"@typescript\", \"native\", \"bin\", \"tsc\"),\n        path.join(\"node_modules\", \"typescript\", \"bin\", \"tsc\"),\n      ];\n      return tscPaths.find((path) => fs.exists(path));\n    }\n    default:\n      typescriptCompiler satisfies never;\n  }\n}\n\nasync function runTscInner(\n  ctx: Context,\n  tscPath: string,\n  tscArgs: string[],\n  handleResult: TypecheckResultHandler,\n) {\n  // Run `tsc` once and have it print out the files it touched. This output won't\n  // be very useful if there's an error, but we'll run it again to get a nice\n  // user-facing error in this exceptional case.\n  // The `--listFiles` command prints out files touched on success or error.\n  const result = await spawnAsync(ctx, process.execPath, [\n    tscPath,\n    ...tscArgs,\n    \"--listFiles\",\n  ]);\n  if (result.status === null) {\n    return handleResult(\"typecheckFailed\", () => {\n      logFailure(`TypeScript typecheck timed out.`);\n      if (result.error) {\n        logError(chalkStderr.red(`${result.error.toString()}`));\n      }\n    });\n  }\n  // Okay, we may have failed `tsc` but at least it returned. Try to parse its\n  // output to discover which files it touched.\n  const filesTouched = result.stdout\n    .split(\"\\n\")\n    .map((s) => s.trim())\n    .filter((s) => s.length > 0);\n  let anyPathsFound = false;\n  for (const fileTouched of filesTouched) {\n    const absPath = path.resolve(fileTouched);\n    let st;\n    try {\n      st = ctx.fs.stat(absPath);\n      anyPathsFound = true;\n    } catch {\n      // Just move on if we have a bogus path from `tsc`. We'll log below if\n      // we fail to stat *any* of the paths emitted by `tsc`.\n      // TODO: Switch to using their JS API so we can get machine readable output.\n      continue;\n    }\n    ctx.fs.registerPath(absPath, st);\n  }\n  if (filesTouched.length > 0 && !anyPathsFound) {\n    const err = new Error(\n      `Failed to stat any files emitted by tsc (received ${filesTouched.length})`,\n    );\n    Sentry.captureException(err);\n  }\n\n  if (!result.error && result.status === 0) {\n    return handleResult(\"success\");\n  }\n\n  // This is the \"No inputs were found\", which is fine and we shouldn't\n  // report it to the user.\n  if (result.stdout.startsWith(\"error TS18003\")) {\n    return handleResult(\"success\");\n  }\n\n  // At this point we know that `tsc` failed. Rerun it without `--listFiles`\n  // and with stderr redirected to have it print out a nice error.\n  return handleResult(\n    \"typecheckFailed\",\n    () => {\n      logFailure(\"TypeScript typecheck via `tsc` failed.\");\n    },\n    async () => {\n      showSpinner(\"Collecting TypeScript errors\");\n      await spawnAsync(\n        ctx,\n        process.execPath,\n        [tscPath, ...tscArgs, \"--pretty\", \"true\"],\n        {\n          stdio: \"inherit\",\n        },\n      );\n      // If this passes, we had a concurrent file change that'll overlap with\n      // our observations in the first run. Invalidate our context's filesystem\n      // but allow the rest of the system to observe the success.\n      ctx.fs.invalidate();\n      return \"success\";\n    },\n  );\n}\n\nfunction maybeLogSlowTypecheckSuggestion(ctx: Context, durationMs: number) {\n  if (!(ctx instanceof WatchContext)) {\n    return;\n  }\n  if (!ctx.isFirstPush) {\n    return;\n  }\n  if (durationMs <= SLOW_TYPECHECK_THRESHOLD_MS) {\n    return;\n  }\n  const formattedDuration = formatDuration(durationMs);\n  logMessage(\n    chalkStderr.gray(\n      `Typechecking took ${formattedDuration}. For faster iteration, see ${SLOW_TYPECHECK_DOCS_URL} to troubleshoot typecheck performance.`,\n    ),\n  );\n}\n", "import chokidar from \"chokidar\";\nimport path from \"path\";\nimport { Observations, RecordingFs, WatchEvent } from \"../../bundler/fs.js\";\nimport { BigBrainAuth, Context, ErrorType } from \"../../bundler/context.js\";\nimport { logFailure } from \"../../bundler/log.js\";\nimport * as Sentry from \"@sentry/node\";\nimport { Ora } from \"ora\";\n\nexport class Watcher {\n  private watch: chokidar.FSWatcher;\n  private readyCb: Promise<void>;\n\n  private bufferedEvents: WatchEvent[];\n  private waiters: (() => void)[];\n\n  constructor(observations: Observations) {\n    this.bufferedEvents = [];\n    this.waiters = [];\n\n    const watch = chokidar.watch(observations.paths(), { persistent: true });\n    watch.on(\"all\", (eventName, eventPath) => {\n      const absPath = path.resolve(eventPath);\n      this.bufferedEvents.push({ name: eventName, absPath });\n      for (const waiter of drain(this.waiters)) {\n        waiter();\n      }\n    });\n    this.readyCb = new Promise<void>((resolve) => {\n      watch.on(\"ready\", () => resolve());\n    });\n    this.watch = watch;\n  }\n\n  update(observations: Observations) {\n    const watchedDirs = new Set(Object.keys(this.watch.getWatched()));\n    for (const newPath of observations.paths()) {\n      if (!this.isWatched(watchedDirs, newPath)) {\n        this.watch.add(newPath);\n      }\n    }\n  }\n\n  isWatched(watchedDirs: Set<string>, observedPath: string) {\n    // Walk over all of path's parents (inclusively) to see if any of them are in the watch set.\n    // This function assumes that Chokidar recursively watches all directories, which is\n    // definitely true on Mac with its FSEvents-based watcher.\n    // TODO (CX-2151): Verify this condition on Windows and Linux.\n    let curPath = observedPath;\n    while (true) {\n      const parsed = path.parse(curPath);\n\n      // TODO(CX-2152): Check to see if this condition for walking parents works on Windows.\n      if (parsed.dir === curPath) {\n        break;\n      }\n      if (watchedDirs.has(curPath)) {\n        return true;\n      }\n      curPath = parsed.dir;\n    }\n    return false;\n  }\n\n  async ready(): Promise<void> {\n    await this.readyCb;\n  }\n\n  async waitForEvent(): Promise<void> {\n    while (this.bufferedEvents.length === 0) {\n      const newEvent = new Promise<void>((resolve) => {\n        this.waiters.push(resolve);\n      });\n      await newEvent;\n    }\n  }\n\n  drainEvents(): WatchEvent[] {\n    return drain(this.bufferedEvents);\n  }\n\n  async close() {\n    await this.watch.close();\n  }\n}\nfunction drain<T>(l: T[]): T[] {\n  return l.splice(0, l.length);\n}\n\nexport class Crash extends Error {\n  errorType?: ErrorType;\n\n  constructor(errorType?: ErrorType, err?: any) {\n    super(err?.message);\n    if (errorType) {\n      this.errorType = errorType;\n    }\n  }\n}\n\nexport class WatchContext implements Context {\n  private _cleanupFns: Record<\n    string,\n    (exitCode: number, err?: any) => Promise<void>\n  > = {};\n  fs: RecordingFs;\n  deprecationMessagePrinted: boolean;\n  isFirstPush: boolean;\n  spinner: Ora | undefined;\n  private _bigBrainAuth: BigBrainAuth | null;\n\n  constructor(\n    traceEvents: boolean,\n    bigBrainAuth: BigBrainAuth | null,\n    isFirstPush: boolean,\n  ) {\n    this.fs = new RecordingFs(traceEvents);\n    this.deprecationMessagePrinted = false;\n    this.isFirstPush = isFirstPush;\n    this._bigBrainAuth = bigBrainAuth;\n  }\n\n  async crash(args: {\n    exitCode: number;\n    errorType?: ErrorType;\n    errForSentry?: any;\n    printedMessage: string | null;\n  }): Promise<never> {\n    if (args.errForSentry) {\n      Sentry.captureException(args.errForSentry);\n    }\n    if (args.printedMessage !== null) {\n      logFailure(args.printedMessage);\n    }\n    for (const fn of Object.values(this._cleanupFns)) {\n      await fn(args.exitCode, args.errForSentry);\n    }\n    // Okay to throw here. We've wrapped it in a Crash that we'll catch later.\n    // eslint-disable-next-line no-restricted-syntax\n    throw new Crash(args.errorType, args.errForSentry);\n  }\n\n  registerCleanup(fn: (exitCode: number, err?: any) => Promise<void>): string {\n    const handle = Math.random().toString(36).slice(2);\n    this._cleanupFns[handle] = fn;\n    return handle;\n  }\n\n  removeCleanup(handle: string) {\n    const value = this._cleanupFns[handle];\n    delete this._cleanupFns[handle];\n    return value ?? null;\n  }\n\n  bigBrainAuth(): BigBrainAuth | null {\n    return this._bigBrainAuth;\n  }\n\n  _updateBigBrainAuth(auth: BigBrainAuth | null): void {\n    this._bigBrainAuth = auth;\n  }\n}\n", "import { header } from \"./common.js\";\nimport {\n  EnvVarMeta,\n  generateEnvInterface,\n  withPlatformEnvVars,\n} from \"./server.js\";\n\nexport function componentServerTS(\n  isRoot: boolean,\n  // - undefined: not yet known (initial codegen). Emits an untyped `env` stub.\n  // - array (empty or not): emit a typed `Env` interface and typed `env`\n  //   export. The interface always includes the platform-provided env vars.\n  envVars: EnvVarMeta[] | undefined,\n): string {\n  const emittedEnvVars =\n    envVars === undefined ? undefined : withPlatformEnvVars(envVars);\n  const hasEnv = emittedEnvVars !== undefined;\n  const envInterface = hasEnv ? generateEnvInterface(emittedEnvVars!) : \"\";\n\n  const result = `\n  ${header(\n    \"Generated utilities for implementing server-side Convex query and mutation functions.\",\n  )}\n  import type {\n    ActionBuilder,\n    ${isRoot ? \"AnyComponents,\" : \"\"}\n    HttpActionBuilder,\n    MutationBuilder,\n    QueryBuilder,\n    GenericActionCtx,\n    GenericMutationCtx,\n    GenericQueryCtx,\n    GenericDatabaseReader,\n    GenericDatabaseWriter,\n  } from \"convex/server\";\n  import {\n    actionGeneric,\n    httpActionGeneric,\n    queryGeneric,\n    mutationGeneric,\n    internalActionGeneric,\n    internalMutationGeneric,\n    internalQueryGeneric,\n    ${isRoot ? \"componentsGeneric,\" : \"\"}\n  } from \"convex/server\";\n  import type { DataModel } from \"./dataModel.js\";\n  ${envInterface}\n\n  /**\n   * Define a query in this Convex app's public API.\n   *\n   * This function will be allowed to read your Convex database and will be accessible from the client.\n   *\n   * @param func - The query function. It receives a {@link QueryCtx} as its first argument.\n   * @returns The wrapped query. Include this as an \\`export\\` to name it and make it accessible.\n   */\n  export const query: QueryBuilder<DataModel, \"public\"> = queryGeneric;\n\n  /**\n   * Define a query that is only accessible from other Convex functions (but not from the client).\n   *\n   * This function will be allowed to read from your Convex database. It will not be accessible from the client.\n   *\n   * @param func - The query function. It receives a {@link QueryCtx} as its first argument.\n   * @returns The wrapped query. Include this as an \\`export\\` to name it and make it accessible.\n   */\n  export const internalQuery: QueryBuilder<DataModel, \"internal\"> = internalQueryGeneric;\n\n  /**\n   * Define a mutation in this Convex app's public API.\n   *\n   * This function will be allowed to modify your Convex database and will be accessible from the client.\n   *\n   * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.\n   * @returns The wrapped mutation. Include this as an \\`export\\` to name it and make it accessible.\n   */\n  export const mutation: MutationBuilder<DataModel, \"public\"> = mutationGeneric;\n\n  /**\n   * Define a mutation that is only accessible from other Convex functions (but not from the client).\n   *\n   * This function will be allowed to modify your Convex database. It will not be accessible from the client.\n   *\n   * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.\n   * @returns The wrapped mutation. Include this as an \\`export\\` to name it and make it accessible.\n   */\n  export const internalMutation: MutationBuilder<DataModel, \"internal\"> = internalMutationGeneric;\n\n  /**\n   * Define an action in this Convex app's public API.\n   *\n   * An action is a function which can execute any JavaScript code, including non-deterministic\n   * code and code with side-effects, like calling third-party services.\n   * They can be run in Convex's JavaScript environment or in Node.js using the \"use node\" directive.\n   * They can interact with the database indirectly by calling queries and mutations using the {@link ActionCtx}.\n   *\n   * @param func - The action. It receives an {@link ActionCtx} as its first argument.\n   * @returns The wrapped action. Include this as an \\`export\\` to name it and make it accessible.\n   */\n  export const action: ActionBuilder<DataModel, \"public\"> = actionGeneric;\n\n  /**\n   * Define an action that is only accessible from other Convex functions (but not from the client).\n   *\n   * @param func - The function. It receives an {@link ActionCtx} as its first argument.\n   * @returns The wrapped function. Include this as an \\`export\\` to name it and make it accessible.\n   */\n  export const internalAction: ActionBuilder<DataModel, \"internal\"> = internalActionGeneric;\n\n  /**\n   * Define an HTTP action.\n   *\n   * The wrapped function will be used to respond to HTTP requests received\n   * by a Convex deployment if the requests matches the path and method where\n   * this action is routed. Be sure to route your httpAction in \\`convex/http.js\\`.\n   *\n   * @param func - The function. It receives an {@link ActionCtx} as its first argument\n   * and a Fetch API \\`Request\\` object as its second.\n   * @returns The wrapped function. Import this function from \\`convex/http.js\\` and route it to hook it up.\n   */\n  export const httpAction: HttpActionBuilder = httpActionGeneric;\n  ${hasEnv ? \"export const env: Env = (globalThis as unknown as { process: { env: Env } }).process.env;\" : \"export const env: Record<string, string | undefined> = (globalThis as unknown as { process: { env: Record<string, string | undefined> } }).process.env;\"}\n\n  /**\n   * A set of services for use within Convex query functions.\n   *\n   * The query context is passed as the first argument to any Convex query\n   * function run on the server.\n   *\n   * If you're using code generation, use the \\`QueryCtx\\` type in \\`convex/_generated/server.d.ts\\` instead.\n   */\n  export type QueryCtx = GenericQueryCtx<DataModel>;\n\n  /**\n   * A set of services for use within Convex mutation functions.\n   *\n   * The mutation context is passed as the first argument to any Convex mutation\n   * function run on the server.\n   *\n   * If you're using code generation, use the \\`MutationCtx\\` type in \\`convex/_generated/server.d.ts\\` instead.\n   */\n  export type MutationCtx = GenericMutationCtx<DataModel>;\n\n  /**\n   * A set of services for use within Convex action functions.\n   *\n   * The action context is passed as the first argument to any Convex action\n   * function run on the server.\n   */\n  export type ActionCtx = GenericActionCtx<DataModel>;\n\n  /**\n   * An interface to read from the database within Convex query functions.\n   *\n   * The two entry points are {@link DatabaseReader.get}, which fetches a single\n   * document by its {@link Id}, or {@link DatabaseReader.query}, which starts\n   * building a query.\n   */\n  export type DatabaseReader = GenericDatabaseReader<DataModel>;\n\n  /**\n   * An interface to read from and write to the database within Convex mutation\n   * functions.\n   *\n   * Convex guarantees that all writes within a single mutation are\n   * executed atomically, so you never have to worry about partial writes leaving\n   * your data in an inconsistent state. See [the Convex Guide](https://docs.convex.dev/understanding/convex-fundamentals/functions#atomicity-and-optimistic-concurrency-control)\n   * for the guarantees Convex provides your functions.\n   */\n  export type DatabaseWriter = GenericDatabaseWriter<DataModel>;\n  ${\n    isRoot\n      ? `\n  /**\n   * Load the API for calling functions from this Convex deployment's components.\n   */\n  export const components: AnyComponents = componentsGeneric();`\n      : \"\"\n  }\n  `;\n  return result;\n}\n", "import path from \"path\";\nimport { Context } from \"../../bundler/context.js\";\nimport { entryPoints } from \"../../bundler/index.js\";\nimport {\n  ComponentDirectory,\n  toAbsolutePath,\n  toComponentDefinitionPath,\n  ComponentDefinitionPath,\n} from \"../lib/components/definition/directoryStructure.js\";\nimport { StartPushResponse } from \"../lib/deployApi/startPush.js\";\nimport { importPath, moduleIdentifier } from \"./api.js\";\nimport {\n  apiComment,\n  compareModulePaths,\n  compareStrings,\n  header,\n} from \"./common.js\";\nimport {\n  ComponentExports,\n  EvaluatedComponentDefinition,\n} from \"../lib/deployApi/componentDefinition.js\";\nimport { Identifier, Reference } from \"../lib/deployApi/types.js\";\nimport { CanonicalizedModulePath } from \"../lib/deployApi/paths.js\";\nimport {\n  AnalyzedFunction,\n  AnalyzedModule,\n  Visibility,\n} from \"../lib/deployApi/modules.js\";\nimport { parseValidator, validatorToType } from \"./validator_helpers.js\";\n\nexport function componentApiJs() {\n  const lines = [];\n  lines.push(header(\"Generated `api` utility.\"));\n  lines.push(`\n    import { anyApi, componentsGeneric } from \"convex/server\";\n\n    ${apiComment(\"api\", undefined)}\n    export const api = anyApi;\n    export const internal = anyApi;\n    export const components = componentsGeneric();\n  `);\n  return lines.join(\"\\n\");\n}\n\nexport function rootComponentApiCJS() {\n  const lines = [];\n  lines.push(header(\"Generated `api` utility.\"));\n  lines.push(`const { anyApi } = require(\"convex/server\");`);\n  lines.push(`module.exports = {\n    api: anyApi,\n    internal: anyApi,\n  };`);\n  return lines.join(\"\\n\");\n}\n\nexport function componentApiStubDTS() {\n  const lines = [];\n  lines.push(header(\"Generated `api` utility.\"));\n  lines.push(`import type { AnyApi, AnyComponents } from \"convex/server\";`);\n  lines.push(`\n    export declare const api: AnyApi;\n    export declare const internal: AnyApi;\n    export declare const components: AnyComponents;\n  `);\n\n  return lines.join(\"\\n\");\n}\n\n// This is also used for root components\nexport function componentApiStubTS() {\n  const lines = [];\n  lines.push(header(\"Generated `api` utility.\"));\n  lines.push(`\n    import type { AnyApi, AnyComponents } from \"convex/server\";\n    import { anyApi, componentsGeneric } from \"convex/server\";\n\n    export const api: AnyApi = anyApi;\n    export const internal: AnyApi = anyApi;\n    export const components: AnyComponents = componentsGeneric();\n  `);\n  return lines.join(\"\\n\");\n}\n\nexport async function componentApiDTS(\n  ctx: Context,\n  startPush: StartPushResponse,\n  rootComponent: ComponentDirectory,\n  componentDirectory: ComponentDirectory,\n  componentsMap: Map<string, ComponentDirectory>,\n  opts: { staticApi: boolean; useComponentApiImports: boolean },\n) {\n  const definitionPath = toComponentDefinitionPath(\n    rootComponent,\n    componentDirectory,\n  );\n\n  const analysis = startPush.analysis[definitionPath];\n  if (!analysis) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `No analysis found for component ${definitionPath} orig: ${definitionPath}\\nin\\n${Object.keys(startPush.analysis).toString()}`,\n    });\n  }\n\n  const lines = [];\n  lines.push(header(\"Generated `api` utility.\"));\n  let apiLines: AsyncGenerator<string>;\n  if (opts.staticApi) {\n    apiLines = codegenStaticApiObjects(ctx, analysis);\n  } else {\n    apiLines = codegenDynamicApiObjects(ctx, componentDirectory);\n  }\n  for await (const line of apiLines) {\n    lines.push(line);\n  }\n\n  lines.push(`\n  export declare const components: {`);\n  lines.push(\n    ...(await componentApiLines(\n      ctx,\n      startPush,\n      analysis,\n      rootComponent,\n      componentsMap,\n      opts,\n    )),\n  );\n  lines.push(\"};\");\n  return lines.join(\"\\n\");\n}\n\nasync function componentApiLines(\n  ctx: Context,\n  startPush: StartPushResponse,\n  analysis: EvaluatedComponentDefinition,\n  rootComponent: ComponentDirectory,\n  componentsMap: Map<string, ComponentDirectory>,\n  opts: { useComponentApiImports: boolean },\n): Promise<string[]> {\n  const lines: string[] = [];\n  for (const childComponent of analysis.definition.childComponents) {\n    if (opts.useComponentApiImports) {\n      const absolutePath = toAbsolutePath(\n        rootComponent,\n        childComponent.path as ComponentDefinitionPath,\n      );\n\n      let childComponentWithRelativePath = componentsMap?.get(absolutePath);\n      if (!childComponentWithRelativePath) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Invalid child component directory: ${childComponent.path}`,\n        });\n      }\n\n      // If the user uses a different import specifier than the absolute path of the child component, use the import specifier.\n      const importSpecifier = childComponentWithRelativePath.importSpecifier;\n      let importPath;\n      // Don't trust relative specifiers\n      if (\n        importSpecifier &&\n        !importSpecifier.startsWith(\".\") &&\n        importSpecifier !== childComponent.path\n      ) {\n        importPath = importSpecifier;\n      } else {\n        importPath = `../${childComponent.path}`;\n      }\n      lines.push(\n        `  \"${childComponent.name}\": import(\"${importPath}/_generated/component.js\").ComponentApi<\"${childComponent.name}\">,`,\n      );\n    } else {\n      const childComponentAnalysis = startPush.analysis[childComponent.path];\n      if (!childComponentAnalysis) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `No analysis found for child component ${childComponent.path}`,\n        });\n      }\n      for await (const line of codegenExports(\n        ctx,\n        childComponent.name,\n        childComponentAnalysis,\n      )) {\n        lines.push(line);\n      }\n    }\n  }\n  return lines;\n}\n\nexport async function componentTS(\n  ctx: Context,\n  startPush: StartPushResponse,\n  rootComponent: ComponentDirectory,\n  componentDirectory: ComponentDirectory,\n) {\n  const definitionPath = toComponentDefinitionPath(\n    rootComponent,\n    componentDirectory,\n  );\n  const analysis = startPush.analysis[definitionPath];\n  if (!analysis) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `No analysis found for component ${definitionPath} orig: ${definitionPath}\\nin\\n${Object.keys(startPush.analysis).toString()}`,\n    });\n  }\n\n  const lines = [];\n  lines.push(header(\"Generated `ComponentApi` utility.\"));\n  lines.push(`\n    import type { FunctionReference } from \"convex/server\";\n\n    /**\n    * A utility for referencing a Convex component's exposed API.\n    *\n    * Useful when expecting a parameter like \\`components.myComponent\\`.\n    * Usage:\n    * \\`\\`\\`ts\n    * async function myFunction(ctx: QueryCtx, component: ComponentApi) {\n    *   return ctx.runQuery(component.someFile.someQuery, { ...args });\n    * }\n    * \\`\\`\\`\n    */`);\n  lines.push(\n    `export type ComponentApi<Name extends string | undefined = string | undefined> = `,\n  );\n  for await (const line of codegenExport(\n    ctx,\n    analysis,\n    analysis.definition.exports,\n    \"Name\",\n  )) {\n    lines.push(line);\n  }\n  lines.push(`;`);\n  return lines.join(\"\\n\");\n}\n\nexport async function componentApiTSWithTypes(\n  ctx: Context,\n  startPush: StartPushResponse,\n  rootComponent: ComponentDirectory,\n  componentDirectory: ComponentDirectory,\n  componentsMap: Map<string, ComponentDirectory>,\n  opts: { staticApi: boolean; useComponentApiImports: boolean },\n) {\n  const definitionPath = toComponentDefinitionPath(\n    rootComponent,\n    componentDirectory,\n  );\n\n  const analysis = startPush.analysis[definitionPath];\n  if (!analysis) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `No analysis found for component ${definitionPath} orig: ${definitionPath}\\nin\\n${Object.keys(startPush.analysis).toString()}`,\n    });\n  }\n\n  const lines = [];\n  lines.push(header(\"Generated `api` utility.\"));\n  let apiLines: AsyncGenerator<string>;\n  if (opts.staticApi) {\n    apiLines = codegenStaticApiObjectsTS(ctx, analysis);\n  } else {\n    apiLines = codegenDynamicApiObjectsTS(ctx, componentDirectory);\n  }\n  for await (const line of apiLines) {\n    lines.push(line);\n  }\n\n  // Generate components section\n  lines.push(`\n  export const components = componentsGeneric() as unknown as {`);\n  lines.push(\n    ...(await componentApiLines(\n      ctx,\n      startPush,\n      analysis,\n      rootComponent,\n      componentsMap,\n      opts,\n    )),\n  );\n  lines.push(\"};\");\n\n  return lines.join(\"\\n\");\n}\n\nasync function* codegenStaticApiObjects(\n  ctx: Context,\n  analysis: EvaluatedComponentDefinition,\n) {\n  yield `import type { FunctionReference } from \"convex/server\";`;\n  yield `import type { GenericId as Id } from \"convex/values\";`;\n\n  const apiTree = await buildApiTree(ctx, analysis.functions, {\n    kind: \"public\",\n  });\n  yield apiComment(\"api\", \"public\");\n  yield `export declare const api:`;\n  yield* codegenApiTree(ctx, apiTree);\n  yield \";\";\n\n  yield apiComment(\"internal\", \"internal\");\n  const internalTree = await buildApiTree(ctx, analysis.functions, {\n    kind: \"internal\",\n  });\n  yield `export declare const internal:`;\n  yield* codegenApiTree(ctx, internalTree);\n  yield \";\";\n}\n\nasync function* codegenStaticApiObjectsTS(\n  ctx: Context,\n  analysis: EvaluatedComponentDefinition,\n) {\n  yield `import type { FunctionReference } from \"convex/server\";`;\n  yield `import type { GenericId as Id } from \"convex/values\";`;\n  yield `import { anyApi, componentsGeneric } from \"convex/server\";`;\n\n  const apiTree = await buildApiTree(ctx, analysis.functions, {\n    kind: \"public\",\n  });\n  yield apiComment(\"api\", \"public\");\n  yield `export const api:`;\n  yield* codegenApiTree(ctx, apiTree);\n  yield \"= anyApi as any;\";\n\n  yield apiComment(\"internal\", \"internal\");\n  const internalTree = await buildApiTree(ctx, analysis.functions, {\n    kind: \"internal\",\n  });\n  yield `export const internal:`;\n  yield* codegenApiTree(ctx, internalTree);\n  yield \"= anyApi as any;\";\n}\n\nasync function* codegenDynamicApiObjects(\n  ctx: Context,\n  componentDirectory: ComponentDirectory,\n) {\n  const absModulePaths = await entryPoints(ctx, componentDirectory.path);\n  const modulePaths = absModulePaths\n    .map((p) => path.relative(componentDirectory.path, p))\n    .sort(compareModulePaths);\n  for (const modulePath of modulePaths) {\n    const ident = moduleIdentifier(modulePath);\n    const path = importPath(modulePath);\n    yield `import type * as ${ident} from \"../${path}.js\";`;\n  }\n  yield `\n    import type {\n      ApiFromModules,\n      FilterApi,\n      FunctionReference,\n    } from \"convex/server\";\n\n    declare const fullApi: ApiFromModules<{\n  `;\n  for (const modulePath of modulePaths) {\n    const ident = moduleIdentifier(modulePath);\n    const path = importPath(modulePath);\n    yield `  \"${path}\": typeof ${ident},`;\n  }\n  yield `}>;`;\n  yield `\n    ${apiComment(\"api\", \"public\")}\n    export declare const api: FilterApi<typeof fullApi, FunctionReference<any, \"public\">>;\n    ${apiComment(\"internal\", \"internal\")}\n    export declare const internal: FilterApi<typeof fullApi, FunctionReference<any, \"internal\">>;\n  `;\n}\n\nasync function* codegenDynamicApiObjectsTS(\n  ctx: Context,\n  componentDirectory: ComponentDirectory,\n) {\n  const absModulePaths = await entryPoints(ctx, componentDirectory.path);\n  const modulePaths = absModulePaths\n    .map((p) => path.relative(componentDirectory.path, p))\n    .sort(compareModulePaths);\n  for (const modulePath of modulePaths) {\n    const ident = moduleIdentifier(modulePath);\n    const path = importPath(modulePath);\n    yield `import type * as ${ident} from \"../${path}.js\";`;\n  }\n  yield `\n    import type {\n      ApiFromModules,\n      FilterApi,\n      FunctionReference,\n    } from \"convex/server\";\n    import { anyApi, componentsGeneric } from \"convex/server\";\n\n    const fullApi: ApiFromModules<{\n  `;\n  for (const modulePath of modulePaths) {\n    const ident = moduleIdentifier(modulePath);\n    const path = importPath(modulePath);\n    yield `  \"${path}\": typeof ${ident},`;\n  }\n  yield `}> = anyApi as any;`;\n  yield `\n    ${apiComment(\"api\", \"public\")}\n    export const api: FilterApi<typeof fullApi, FunctionReference<any, \"public\">> = anyApi as any;\n    ${apiComment(\"internal\", \"internal\")}\n    export const internal: FilterApi<typeof fullApi, FunctionReference<any, \"internal\">> = anyApi as any;\n  `;\n}\n\ninterface ApiTree {\n  [identifier: string]:\n    | { type: \"branch\"; branch: ApiTree }\n    | { type: \"leaf\"; leaf: AnalyzedFunction };\n}\n\nasync function buildApiTree(\n  ctx: Context,\n  functions: Record<CanonicalizedModulePath, AnalyzedModule>,\n  visibility: Visibility,\n): Promise<ApiTree> {\n  const root: ApiTree = {};\n  for (const [modulePath, module] of Object.entries(functions)) {\n    const p = importPath(modulePath);\n    if (p.startsWith(\"_deps/\")) {\n      continue;\n    }\n    for (const f of module.functions) {\n      if (f.visibility?.kind !== visibility.kind) {\n        continue;\n      }\n      let current = root;\n      for (const pathComponent of p.split(\"/\")) {\n        let next = current[pathComponent];\n        if (!next) {\n          next = { type: \"branch\", branch: {} };\n          current[pathComponent] = next;\n        }\n        if (next.type === \"leaf\") {\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage: `Ambiguous function name: ${f.name} in ${modulePath}`,\n          });\n        }\n        current = next.branch;\n      }\n      if (current[f.name]) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Duplicate function name: ${f.name} in ${modulePath}`,\n        });\n      }\n      current[f.name] = { type: \"leaf\", leaf: f };\n    }\n  }\n  return root;\n}\n\nasync function* codegenApiTree(\n  ctx: Context,\n  tree: ApiTree,\n): AsyncGenerator<string> {\n  yield \"{\";\n  // Sort entries alphabetically for stable output\n  const sortedEntries = Object.entries(tree).sort(([a], [b]) =>\n    compareStrings(a, b),\n  );\n  for (const [identifier, subtree] of sortedEntries) {\n    if (subtree.type === \"branch\") {\n      yield `\"${identifier}\":`;\n      yield* codegenApiTree(ctx, subtree.branch);\n      yield \",\";\n    } else {\n      const visibility = subtree.leaf.visibility?.kind;\n      if (!visibility) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Function ${subtree.leaf.name} has no visibility`,\n        });\n      }\n      const ref = await codegenFunctionReference(\n        ctx,\n        subtree.leaf,\n        visibility,\n        true,\n        undefined,\n      );\n      yield `\"${identifier}\": ${ref},`;\n    }\n  }\n  yield \"}\";\n}\n\nasync function* codegenExports(\n  ctx: Context,\n  name: Identifier,\n  analysis: EvaluatedComponentDefinition,\n): AsyncGenerator<string> {\n  yield `${name}: {`;\n  const exports = analysis.definition.exports.branch;\n  const entries = Array.from(exports).sort(([a], [b]) => compareStrings(a, b));\n  for (const [name, componentExport] of entries) {\n    yield `${name}:`;\n    yield* codegenExport(ctx, analysis, componentExport, undefined);\n    yield \",\";\n  }\n  yield \"},\";\n}\n\nasync function* codegenExport(\n  ctx: Context,\n  analysis: EvaluatedComponentDefinition,\n  componentExport: ComponentExports,\n  componentPath: string | undefined,\n): AsyncGenerator<string> {\n  if (componentExport.type === \"leaf\") {\n    yield await resolveFunctionReference(\n      ctx,\n      analysis,\n      componentExport.leaf,\n      \"internal\",\n      componentPath,\n    );\n  } else if (componentExport.type === \"branch\") {\n    yield \"{\";\n    const entries = Array.from(componentExport.branch).sort(([a], [b]) =>\n      compareStrings(a, b),\n    );\n    for (const [name, childExport] of entries) {\n      yield `${name}:`;\n      yield* codegenExport(ctx, analysis, childExport, componentPath);\n      yield \",\";\n    }\n    yield \"}\";\n  }\n}\n\nexport async function resolveFunctionReference(\n  ctx: Context,\n  analysis: EvaluatedComponentDefinition,\n  reference: Reference,\n  visibility: \"public\" | \"internal\",\n  componentPath: string | undefined,\n) {\n  if (!reference.startsWith(\"_reference/function/\")) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Invalid function reference: ${reference}`,\n    });\n  }\n  const udfPath = reference.slice(\"_reference/function/\".length);\n\n  const [modulePath, functionName] = udfPath.split(\":\");\n  const canonicalizedModulePath = canonicalizeModulePath(modulePath);\n\n  const analyzedModule = analysis.functions[canonicalizedModulePath];\n  if (!analyzedModule) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Module not found: ${modulePath}`,\n    });\n  }\n  const analyzedFunction = analyzedModule.functions.find(\n    (f) => f.name === functionName,\n  );\n  if (!analyzedFunction) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Function not found: ${functionName}`,\n    });\n  }\n  return await codegenFunctionReference(\n    ctx,\n    analyzedFunction,\n    visibility,\n    false,\n    componentPath,\n  );\n}\n\nasync function codegenFunctionReference(\n  ctx: Context,\n  analyzedFunction: AnalyzedFunction,\n  visibility: \"public\" | \"internal\",\n  useIdType: boolean,\n  componentPath: string | undefined,\n): Promise<string> {\n  // The server sends down `udfType` capitalized.\n  const udfType = analyzedFunction.udfType.toLowerCase();\n\n  let argsType = \"any\";\n  try {\n    const argsValidator = parseValidator(analyzedFunction.args);\n    if (argsValidator) {\n      if (argsValidator.type === \"object\" || argsValidator.type === \"any\") {\n        argsType = validatorToType(argsValidator, useIdType);\n      } else {\n        // eslint-disable-next-line no-restricted-syntax\n        throw new Error(\n          `Unexpected argument validator type: ${argsValidator.type}`,\n        );\n      }\n    }\n  } catch (e) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Invalid function args: ${analyzedFunction.args}`,\n      errForSentry: e,\n    });\n  }\n\n  let returnsType = \"any\";\n  try {\n    const returnsValidator = parseValidator(analyzedFunction.returns);\n    if (returnsValidator) {\n      returnsType = validatorToType(returnsValidator, useIdType);\n    }\n  } catch (e) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Invalid function returns: ${analyzedFunction.returns}`,\n      errForSentry: e,\n    });\n  }\n\n  return `FunctionReference<\"${udfType}\", \"${visibility}\", ${argsType}, ${returnsType}${componentPath ? `, ${componentPath}` : \"\"}>`;\n}\n\nfunction canonicalizeModulePath(modulePath: string): CanonicalizedModulePath {\n  if (!modulePath.endsWith(\".js\")) {\n    return modulePath + \".js\";\n  }\n  return modulePath;\n}\n", "import path from \"path\";\nimport { Context } from \"../../bundler/context.js\";\nimport { Config } from \"./config.js\";\n\nexport async function handleDebugBundlePath(\n  ctx: Context,\n  debugBundleDir: string,\n  config: Config,\n) {\n  if (!ctx.fs.exists(debugBundleDir)) {\n    ctx.fs.mkdir(debugBundleDir);\n  } else if (!ctx.fs.stat(debugBundleDir).isDirectory()) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Path \\`${debugBundleDir}\\` is not a directory. Please choose an empty directory for \\`--debug-bundle-path\\`.`,\n    });\n  } else if (ctx.fs.listDir(debugBundleDir).length !== 0) {\n    await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Directory \\`${debugBundleDir}\\` is not empty. Please remove it or choose an empty directory for \\`--debug-bundle-path\\`.`,\n    });\n  }\n  ctx.fs.writeUtf8File(\n    path.join(debugBundleDir, \"fullConfig.json\"),\n    JSON.stringify(config),\n  );\n\n  for (const moduleInfo of config.modules) {\n    const trimmedPath = moduleInfo.path.endsWith(\".js\")\n      ? moduleInfo.path.slice(0, moduleInfo.path.length - \".js\".length)\n      : moduleInfo.path;\n    const environmentDir = path.join(debugBundleDir, moduleInfo.environment);\n    ctx.fs.mkdir(path.dirname(path.join(environmentDir, `${trimmedPath}.js`)), {\n      allowExisting: true,\n      recursive: true,\n    });\n    ctx.fs.writeUtf8File(\n      path.join(environmentDir, `${trimmedPath}.js`),\n      moduleInfo.source,\n    );\n    if (moduleInfo.sourceMap !== undefined) {\n      ctx.fs.writeUtf8File(\n        path.join(environmentDir, `${trimmedPath}.js.map`),\n        moduleInfo.sourceMap,\n      );\n    }\n  }\n}\n", "import crypto from \"node:crypto\";\n\ntype TraceId = string; // u128\ntype SpanId = string; // u64\n\ntype Nanoseconds = bigint;\n\n// base64 URL encoded little endian\ntype SerializedNanoseconds = string;\n\nexport class Reporter {\n  spans: CompletedSpan[] = [];\n\n  emit(span: CompletedSpan) {\n    this.spans.push(span);\n  }\n}\n\ntype EventRecord = {\n  name: string;\n  timestampUnixNs: Nanoseconds;\n  properties: Record<string, string>;\n};\n\nexport class Span {\n  private properties: Record<string, string> = {};\n  private events: EventRecord[] = [];\n\n  private constructor(\n    private reporter: Reporter | undefined,\n    private traceId: TraceId,\n    private parentId: SpanId,\n    private spanId: SpanId,\n    private beginTimeUnixNs: Nanoseconds,\n    private name: string,\n  ) {}\n\n  static noop() {\n    return new Span(\n      undefined,\n      randomTraceId(),\n      randomSpanId(),\n      randomSpanId(),\n      unixTimeNs(),\n      \"\",\n    );\n  }\n\n  static root(reporter: Reporter, name: string) {\n    const traceId = randomTraceId();\n    const parentId = emptySpanId();\n    const spanId = randomSpanId();\n    const beginTimeUnixNs = unixTimeNs();\n    return new Span(reporter, traceId, parentId, spanId, beginTimeUnixNs, name);\n  }\n\n  setProperty(key: string, value: string) {\n    this.properties[key] = value;\n  }\n\n  childSpan(name: string): Span {\n    const spanId = randomSpanId();\n    const beginTimeUnixNs = unixTimeNs();\n    return new Span(\n      this.reporter,\n      this.traceId,\n      this.spanId,\n      spanId,\n      beginTimeUnixNs,\n      name,\n    );\n  }\n\n  enter<T>(name: string, f: (span: Span) => T): T {\n    const childSpan = this.childSpan(name);\n    try {\n      const result = f(childSpan);\n      childSpan.end();\n      return result;\n    } finally {\n      childSpan.end();\n    }\n  }\n\n  async enterAsync<T>(name: string, f: (span: Span) => Promise<T>): Promise<T> {\n    const childSpan = this.childSpan(name);\n    try {\n      return await f(childSpan);\n    } finally {\n      childSpan.end();\n    }\n  }\n\n  end() {\n    const endTimeUnixNs = unixTimeNs();\n    const durationNs = endTimeUnixNs - this.beginTimeUnixNs;\n    const span = {\n      traceId: this.traceId,\n      parentId: this.parentId,\n      spanId: this.spanId,\n      beginTimeUnixNs: serializeNanoseconds(this.beginTimeUnixNs),\n      durationNs: serializeNanoseconds(durationNs),\n      name: this.name,\n      properties: this.properties,\n      events: this.events.map((event) => ({\n        name: event.name,\n        timestampUnixNs: serializeNanoseconds(event.timestampUnixNs),\n        properties: event.properties,\n      })),\n    };\n    if (this.reporter) {\n      this.reporter.emit(span);\n    }\n  }\n\n  encodeW3CTraceparent() {\n    // Encode traceId and spanId as a big-endian hex strings.\n    const traceIdBytes = Buffer.from(this.traceId, \"base64url\");\n    const traceIdBigInt =\n      traceIdBytes.readBigUInt64LE(0) |\n      (traceIdBytes.readBigUInt64LE(8) << 64n);\n    const traceIdHex = traceIdBigInt.toString(16).padStart(32, \"0\");\n\n    const spanIdBytes = Buffer.from(this.spanId, \"base64url\");\n    const spanIdBigInt = spanIdBytes.readBigUInt64LE(0);\n    const spanIdHex = spanIdBigInt.toString(16).padStart(16, \"0\");\n\n    return `00-${traceIdHex}-${spanIdHex}-01`;\n  }\n}\n\nfunction randomTraceId() {\n  return Buffer.from(crypto.getRandomValues(new Uint8Array(16))).toString(\n    \"base64url\",\n  );\n}\n\nfunction emptySpanId() {\n  return Buffer.from(new Uint8Array(8)).toString(\"base64url\");\n}\n\nfunction randomSpanId() {\n  return Buffer.from(crypto.getRandomValues(new Uint8Array(8))).toString(\n    \"base64url\",\n  );\n}\n\nfunction unixTimeNs() {\n  // Note that as a unix nanosecond timestamp, performance.timeOrigin * 1000 is less than\n  // Number.MAX_SAFE_INTEGER, so multiply by 1000 to convert to microseconds, round, convert\n  // to bigint, and then multiply again to convert to nanoseconds.\n  return (\n    BigInt(Math.floor(performance.timeOrigin * 1000)) * 1000n +\n    BigInt(Math.floor(performance.now() * 1000)) * 1000n\n  );\n}\n\nfunction serializeNanoseconds(ns: Nanoseconds): SerializedNanoseconds {\n  const buffer = Buffer.alloc(8);\n  buffer.writeBigUInt64LE(ns, 0);\n  return buffer.toString(\"base64url\");\n}\n\ntype CompletedSpan = {\n  traceId: TraceId;\n  parentId: SpanId;\n  spanId: SpanId;\n  beginTimeUnixNs: SerializedNanoseconds;\n  durationNs: SerializedNanoseconds;\n  name: string;\n  properties: Record<string, string>;\n  events: SerializedEventRecord[];\n};\n\ntype SerializedEventRecord = {\n  name: string;\n  timestampUnixNs: SerializedNanoseconds;\n  properties: Record<string, string>;\n};\n", "import { chalkStderr } from \"chalk\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n  changeSpinner,\n  logFinishedStep,\n  logMessage,\n  logVerbose,\n  stopSpinner,\n} from \"../../bundler/log.js\";\nimport { formatIndex } from \"./indexes.js\";\nimport { promptYesNo } from \"./utils/prompts.js\";\nimport { Span } from \"./tracing.js\";\nimport { StartPushRequest } from \"./deployApi/startPush.js\";\nimport { evaluatePush } from \"./deploy2.js\";\nimport { DeveloperIndexConfig } from \"./deployApi/finishPush.js\";\nimport { EvaluateSchemaResponse } from \"./deployApi/evaluateSchema.js\";\nimport { runSystemQuery } from \"./run.js\";\nimport { SchemaEvaluation } from \"./schemaEvaluation.js\";\nimport { integerFromEnv } from \"./utils/utils.js\";\n\nconst MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING = 100_000;\n\ntype CheckOptions = {\n  url: string;\n  deploymentName: string | null;\n  adminKey: string;\n};\n\ntype DeletedIndex = {\n  // The component instance path (\"\" for the root component), matching the\n  // keys of both `componentSchemaEvaluations` and `indexDiffs`.\n  componentPath: string;\n  index: DeveloperIndexConfig;\n  documentsCount: number;\n  replacedBy: DeveloperIndexConfig | null;\n};\n\nexport async function checkForLargeIndexDeletion({\n  ctx,\n  span,\n  request,\n  options,\n  schemaEvaluation,\n  askForConfirmation,\n}: {\n  ctx: Context;\n  span: Span;\n  request: StartPushRequest;\n  options: CheckOptions;\n  schemaEvaluation: SchemaEvaluation;\n  askForConfirmation: boolean;\n}): Promise<void> {\n  changeSpinner(\"Verifying that the push isn\u2019t deleting large indexes...\");\n\n  const schemaEvaluationResponse = await schemaEvaluation(span);\n  let deletedIndexes: DeletedIndex[];\n  if (schemaEvaluationResponse !== null) {\n    deletedIndexes = deletedIndexesFromSchemaEvaluation(\n      schemaEvaluationResponse,\n    );\n  } else {\n    logVerbose(\n      \"Schema evaluation unavailable, sizing deleted indexes per table\",\n    );\n    deletedIndexes = await deletedIndexesFromTableSizes({\n      ctx,\n      span,\n      request,\n      options,\n    });\n  }\n\n  if (deletedIndexes.length === 0) {\n    logFinishedStep(\"No indexes are deleted by this push\");\n    return;\n  }\n\n  const minDocumentsForWarning = minDocumentsForIndexDeleteWarning();\n  if (\n    !deletedIndexes.some(\n      ({ documentsCount }) => documentsCount >= minDocumentsForWarning,\n    )\n  ) {\n    logFinishedStep(\"No large indexes are deleted by this push\");\n    return;\n  }\n\n  logMessage(`\u26A0\uFE0F  This code push will ${chalkStderr.bold(\"delete\")} the following ${deletedIndexes.length === 1 ? \"index\" : \"indexes\"}\nfrom your production deployment (${options.url}):\n\n${deletedIndexes\n  .map((deletedIndex) =>\n    formatDeletedIndex({ ...deletedIndex, minDocumentsForWarning }),\n  )\n  .join(\"\\n\")}\n\nThe documents that are in the index won\u2019t be deleted, but the index will need\nto be backfilled again if you want to restore it later.\n`);\n\n  // Either --skip-large-indexes-check or its deletion-only predecessor\n  // --allow-deleting-large-indexes gets here, so name neither.\n  if (!askForConfirmation) {\n    logFinishedStep(\n      \"Proceeding with push since deleting large indexes was allowed by flag\",\n    );\n    return;\n  }\n\n  if (!process.stdin.isTTY) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `To confirm the push:\n\u2022 run the deploy command in an ${chalkStderr.bold(\"interactive terminal\")}\n\u2022 or run the deploy command with the ${chalkStderr.bold(\"--skip-large-indexes-check\")} flag`,\n    });\n  }\n\n  stopSpinner();\n  if (\n    !(await promptYesNo(ctx, {\n      message: `Delete ${deletedIndexes.length === 1 ? \"this index\" : \"these indexes\"}?`,\n      default: false,\n    }))\n  ) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Canceling push`,\n    });\n  }\n\n  logFinishedStep(\"Proceeding with push.\");\n}\n\n// Preferred source: one schema evaluation reports every dropped index\n// together with its table's document count, requiring only the\n// `deployment:deploy` permission the push itself needs.\nexport function deletedIndexesFromSchemaEvaluation(\n  response: EvaluateSchemaResponse,\n): DeletedIndex[] {\n  return Object.entries(response.componentSchemaEvaluations).flatMap(\n    ([componentPath, prediction]) =>\n      prediction.indexes\n        .filter((index) => index.change === \"dropped\")\n        .map((index) => ({\n          componentPath,\n          index,\n          documentsCount: index.numDocs,\n          replacedBy:\n            prediction.indexes.find(\n              (other) => other.change === \"added\" && other.name === index.name,\n            ) ?? null,\n        })),\n  );\n}\n\n// Fallback for deployments without `evaluate_schema`: diff indexes with\n// `evaluate_push`, then size each affected table with a system query. The\n// system query needs the `deployment:data:view` permission, which a\n// deploy-scoped key may lack.\nexport async function deletedIndexesFromTableSizes({\n  ctx,\n  span,\n  request,\n  options,\n}: {\n  ctx: Context;\n  span: Span;\n  request: StartPushRequest;\n  options: CheckOptions;\n}): Promise<DeletedIndex[]> {\n  const { schemaChange } = await evaluatePush(ctx, span, request, options);\n\n  const indexDiffs = schemaChange.indexDiffs ?? {};\n  const deletedIndexes = Object.entries(indexDiffs).flatMap(\n    ([componentPath, indexDiff]) =>\n      indexDiff.removed_indexes.map((index) => ({\n        componentPath,\n        index,\n        replacedBy:\n          indexDiff.added_indexes.find((other) => other.name === index.name) ??\n          null,\n      })),\n  );\n\n  if (deletedIndexes.length === 0) {\n    return [];\n  }\n\n  const tablesWithDeletedIndexes = [\n    ...new Set(\n      deletedIndexes.map(\n        ({ componentPath, index }) => `${componentPath}:${getTableName(index)}`,\n      ),\n    ),\n  ].map((str) => {\n    const [componentPath, table] = str.split(\":\");\n    return { componentPath, table };\n  });\n  changeSpinner(\"Checking whether the deleted indexes are on large tables...\");\n  const documentCounts = await Promise.all(\n    tablesWithDeletedIndexes.map(async ({ componentPath, table }) => ({\n      componentPath,\n      table,\n      count: (await runSystemQuery(ctx, {\n        deploymentUrl: options.url,\n        adminKey: options.adminKey,\n        functionName: \"_system/cli/tableSize:default\",\n        componentPath,\n        args: { tableName: table },\n      })) as number,\n    })),\n  );\n  return deletedIndexes.map(({ componentPath, index, replacedBy }) => ({\n    componentPath,\n    index,\n    replacedBy,\n    documentsCount: documentCounts.find(\n      (count) =>\n        count.table === getTableName(index) &&\n        count.componentPath === componentPath,\n    )!.count,\n  }));\n}\n\nfunction formatDeletedIndex({\n  componentPath,\n  index,\n  documentsCount,\n  replacedBy,\n  minDocumentsForWarning,\n}: DeletedIndex & { minDocumentsForWarning: number }) {\n  const componentNameFormatted =\n    componentPath !== \"\" ? `${chalkStderr.gray(componentPath)}:` : \"\";\n\n  const documentsCountFormatted =\n    documentsCount >= minDocumentsForWarning\n      ? `  ${chalkStderr.yellowBright(`\u26A0\uFE0F  ${documentsCount.toLocaleString()} documents`)}`\n      : `  ${documentsCount.toLocaleString()} ${documentsCount === 1 ? \"document\" : \"documents\"}`;\n\n  const replacedByFormatted = replacedBy\n    ? `\\n   ${chalkStderr.green(\"\u2192 replaced by:\")} ${formatIndex(replacedBy)}`\n    : \"\";\n\n  return (\n    \"\u26D4 \" +\n    componentNameFormatted +\n    formatIndex(index) +\n    documentsCountFormatted +\n    replacedByFormatted\n  );\n}\n\nfunction getTableName(index: DeveloperIndexConfig) {\n  const [tableName, _indexName] = index.name.split(\".\");\n  return tableName;\n}\n\nfunction minDocumentsForIndexDeleteWarning(): number {\n  return integerFromEnv(\n    \"CONVEX_MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING\",\n    MIN_DOCUMENTS_FOR_INDEX_DELETE_WARNING,\n  );\n}\n", "import { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../bundler/log.js\";\nimport { Span } from \"./tracing.js\";\nimport {\n  EvaluateSchemaResponse,\n  TablePrediction,\n} from \"./deployApi/evaluateSchema.js\";\nimport { SchemaEvaluation } from \"./schemaEvaluation.js\";\nimport { formatSize, integerFromEnv } from \"./utils/utils.js\";\nimport {\n  formatDiscardedStagedValidator,\n  formatValidationProgress,\n} from \"./formatValidationProgress.js\";\n\nconst MIN_BYTES_FOR_SCHEMA_WALK_WARNING = 1 << 27; // 128 MiB\n\nexport async function checkForSlowSchemaValidation({\n  span,\n  schemaEvaluation,\n  dryRun,\n}: {\n  span: Span;\n  schemaEvaluation: SchemaEvaluation;\n  dryRun: boolean;\n}): Promise<void> {\n  const response = await schemaEvaluation(span);\n  if (response === null) {\n    return;\n  }\n  reportStagedValidators(response);\n  if (!dryRun) {\n    return;\n  }\n\n  const walkedTables = Object.entries(\n    response.componentSchemaEvaluations,\n  ).flatMap(([componentPath, prediction]) =>\n    prediction.tables\n      .filter((table) => table.outcome === \"mustWalk\")\n      .map((table) => ({ componentPath, table })),\n  );\n  if (walkedTables.length === 0) {\n    return;\n  }\n\n  const totalBytes = walkedTables.reduce(\n    (sum, { table }) => sum + table.sizeBytes,\n    0,\n  );\n  if (totalBytes < minBytesForSchemaWalkWarning()) {\n    return;\n  }\n\n  const shouldSuggestStaging = walkedTables.some(\n    ({ table }) => !table.canSkipAfterStagedValidation,\n  );\n  logMessage(`\u26A0\uFE0F  This schema change requires checking every document in the following ${walkedTables.length === 1 ? \"table\" : \"tables\"} against your new schema, totaling ${chalkStderr.yellowBright(formatSize(totalBytes))}. This deploy may take a while:\n\n${walkedTables\n  .map(({ componentPath, table }) =>\n    formatWalkedTable({ componentPath, table }),\n  )\n  .join(\"\\n\")}\n${\n  shouldSuggestStaging\n    ? `\\nTip: stage the new validator (\\`defineTable({...}).staged({...})\\`) to validate it in the background without blocking deploys.`\n    : \"\"\n}`);\n}\n\n// The prediction includes staged validators from active and in-flight schemas.\nfunction reportStagedValidators(response: EvaluateSchemaResponse) {\n  const stagedTables = Object.entries(\n    response.componentSchemaEvaluations,\n  ).flatMap(([componentPath, prediction]) => {\n    const discarded = new Map(\n      (prediction.discardedStagedValidators ?? []).map((validator) => [\n        validator.tableName,\n        validator,\n      ]),\n    );\n    return prediction.tables\n      .filter((table) => table.staged !== undefined)\n      .map((table) => ({\n        componentPath,\n        table,\n        discarded: discarded.get(table.name),\n      }));\n  });\n  if (stagedTables.length === 0) {\n    return;\n  }\n  const lines = stagedTables.map(({ componentPath, table, discarded }) => {\n    const componentPrefix =\n      componentPath !== \"\" ? `${chalkStderr.gray(componentPath)}: ` : \"\";\n    // The state describes the validator this push discards, so advertising\n    // it as ready to promote would contradict the unstaging warning.\n    if (discarded !== undefined) {\n      return `  ${componentPrefix}${table.name}: ${formatDiscardedStagedValidator(discarded)}`;\n    }\n    const staged = table.staged!;\n    switch (staged.state) {\n      case \"pending\": {\n        return `  ${componentPrefix}${table.name}: validating in the background (${formatValidationProgress(staged)})`;\n      }\n      case \"valid\":\n        // `supersetOfStagedValidated` means this push already promotes it.\n        return table.outcome === \"supersetOfStagedValidated\"\n          ? `  ${componentPrefix}${table.name}: ${chalkStderr.green(\"validated\")}. This deploy applies the staged schema without scanning the table.`\n          : `  ${componentPrefix}${table.name}: ${chalkStderr.green(\"validated\")}. Safe to apply the staged schema changes and deploy.`;\n      case \"failed\":\n        return `  ${componentPrefix}${table.name}: ${chalkStderr.red(\"failed\")}: ${staged.error}${chalkStderr.gray(\" (fix the offending documents and redeploy to revalidate)\")}`;\n    }\n  });\n  logMessage(`Staged schema validation status:\\n${lines.join(\"\\n\")}\\n`);\n}\n\nfunction formatWalkedTable({\n  componentPath,\n  table,\n}: {\n  componentPath: string;\n  table: TablePrediction;\n}) {\n  const componentPrefix =\n    componentPath !== \"\" ? `${chalkStderr.gray(componentPath)}: ` : \"\";\n  const docsFormatted = `${table.numDocs.toLocaleString()} documents, `;\n  const sizeFormatted = formatSize(table.sizeBytes);\n  let stagedNote = \"\";\n  if (table.staged?.state === \"pending\" && table.canSkipAfterStagedValidation) {\n    stagedNote = `. Staged schema validation in progress. Wait for validation to complete before deploying with the staged changes. Deploying now will block on a full table revalidation scan.`;\n  }\n  return `  ${componentPrefix}${table.name} (${docsFormatted}${sizeFormatted})${stagedNote}`;\n}\n\nfunction minBytesForSchemaWalkWarning(): number {\n  return integerFromEnv(\n    \"CONVEX_MIN_BYTES_FOR_SCHEMA_WALK_WARNING\",\n    MIN_BYTES_FOR_SCHEMA_WALK_WARNING,\n  );\n}\n", "import { chalkStderr } from \"chalk\";\nimport { DiscardedStagedValidator } from \"./deployApi/evaluateSchema.js\";\n\nexport function formatValidationProgress({\n  numDocsValidated,\n  totalDocs,\n}: {\n  numDocsValidated: number;\n  totalDocs?: number | null | undefined;\n}): string {\n  const checked = numDocsValidated.toLocaleString();\n  return totalDocs === null || totalDocs === undefined\n    ? `${checked} documents checked`\n    : `${checked} of approximately ${totalDocs.toLocaleString()} documents checked`;\n}\n\n/** \"validated; the push removes the staged validator\" */\nexport function formatDiscardedStagedValidator(\n  validator: DiscardedStagedValidator,\n): string {\n  let status;\n  switch (validator.state.state) {\n    case \"pending\": {\n      status = `validating in the background (${formatValidationProgress(validator.state)})`;\n      break;\n    }\n    case \"valid\":\n      status = chalkStderr.green(\"validated\");\n      break;\n  }\n  const action = validator.replaced\n    ? \"the push stages a different validator\"\n    : \"the push removes the staged validator\";\n  return `${status}; ${action}`;\n}\n", "import { chalkStderr } from \"chalk\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n  changeSpinner,\n  logFinishedStep,\n  logMessage,\n  stopSpinner,\n} from \"../../bundler/log.js\";\nimport { formatIndex } from \"./indexes.js\";\nimport { promptYesNo } from \"./utils/prompts.js\";\nimport { Span } from \"./tracing.js\";\nimport {\n  EvaluateSchemaResponse,\n  IndexPrediction,\n} from \"./deployApi/evaluateSchema.js\";\nimport { SchemaEvaluation } from \"./schemaEvaluation.js\";\nimport { integerFromEnv } from \"./utils/utils.js\";\n\n// Same size as the large index deletion check, so both index guards fire at\n// the same table size. Separate env override so tests can trigger one\n// without the other.\nconst MIN_DOCUMENTS_FOR_INDEX_BACKFILL_WARNING = 100_000;\n\nexport type LargeIndexBackfillCheck =\n  // Don\u2019t check whether the push creates indexes on large tables\n  | \"no verification\"\n  // If it does, ask for confirmation (and fail in non-interactive envs)\n  | \"ask for confirmation\"\n  // If it does, proceed (the user has used --skip-large-indexes-check)\n  | \"has confirmation\";\n\ntype BlockingIndex = {\n  // The component instance path (\"\" for the root component), matching the\n  // keys of `componentSchemaEvaluations`.\n  componentPath: string;\n  index: IndexPrediction;\n};\n\n/**\n * Warn \u2014 and on a real deploy require confirmation \u2014 when a push creates or\n * enables a non-staged index on a large table. `wait_for_schema` blocks the\n * deploy until every such index is backfilled, which can take a long time on\n * large tables; staging the index instead backfills it in the background.\n *\n * Skipped silently when the deployment doesn't support `evaluate_schema`:\n * the check protects the developer's time, not correctness.\n */\nexport async function checkForLargeIndexBackfill({\n  ctx,\n  span,\n  schemaEvaluation,\n  options,\n  mode,\n}: {\n  ctx: Context;\n  span: Span;\n  schemaEvaluation: SchemaEvaluation;\n  options: { url: string };\n  // \"warn\" prints the warning without prompting, for dry runs.\n  mode: \"warn\" | \"ask for confirmation\" | \"has confirmation\";\n}): Promise<void> {\n  changeSpinner(\"Verifying that the push isn\u2019t creating large indexes...\");\n  const response = await schemaEvaluation(span);\n  if (response === null) {\n    return;\n  }\n\n  const blockingIndexes = blockingIndexesFromSchemaEvaluation(\n    response,\n    minDocumentsForIndexBackfillWarning(),\n  );\n  if (blockingIndexes.length === 0) {\n    return;\n  }\n\n  const plural = blockingIndexes.length !== 1;\n  logMessage(`\u26A0\uFE0F  This push will ${chalkStderr.bold(\"create\")} the following ${plural ? \"indexes on large tables\" : \"index on a large table\"}\nin your deployment (${options.url}). The deploy will block until ${plural ? \"they finish\" : \"it finishes\"} backfilling:\n\n${blockingIndexes.map(formatBlockingIndex).join(\"\\n\")}\n\nTip: stage the index (e.g. \\`.index(\"by_field\", { fields: [\"field\"], staged: true })\\`) to backfill\nit in the background without blocking the deploy, then remove \\`staged\\` in a later push once it\u2019s ready.\nLearn more at https://docs.convex.dev/database/reading-data/indexes#staged-indexes\n`);\n\n  if (mode === \"warn\") {\n    return;\n  }\n\n  if (mode === \"has confirmation\") {\n    logFinishedStep(\n      \"Proceeding with push since --skip-large-indexes-check is set\",\n    );\n    return;\n  }\n\n  if (!process.stdin.isTTY) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `To confirm the push:\n\u2022 run the deploy command in an ${chalkStderr.bold(\"interactive terminal\")}\n\u2022 or run the deploy command with the ${chalkStderr.bold(\"--skip-large-indexes-check\")} flag`,\n    });\n  }\n\n  stopSpinner();\n  if (\n    !(await promptYesNo(ctx, {\n      message: `Create ${plural ? \"these indexes\" : \"this index\"} now?`,\n      default: false,\n    }))\n  ) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Canceling push`,\n    });\n  }\n\n  logFinishedStep(\"Proceeding with push.\");\n}\n\n// An index blocks the deploy when this push starts (`added`) or waits on\n// (`enabled` before its staged backfill finished) a backfill that isn't\n// staged. Added staged indexes report `needsBackfill` too but never block,\n// and an in-progress backfill an earlier push started (`identical`) isn't\n// this push's doing.\nexport function blockingIndexesFromSchemaEvaluation(\n  response: EvaluateSchemaResponse,\n  minDocuments: number,\n): BlockingIndex[] {\n  return Object.entries(response.componentSchemaEvaluations).flatMap(\n    ([componentPath, prediction]) =>\n      prediction.indexes\n        .filter(\n          (index) =>\n            index.needsBackfill &&\n            !index.staged &&\n            (index.change === \"added\" || index.change === \"enabled\") &&\n            index.numDocs >= minDocuments,\n        )\n        .map((index) => ({ componentPath, index })),\n  );\n}\n\nfunction formatBlockingIndex({ componentPath, index }: BlockingIndex) {\n  const componentNameFormatted =\n    componentPath !== \"\" ? `${chalkStderr.gray(componentPath)}:` : \"\";\n  const documentsCountFormatted = chalkStderr.yellowBright(\n    `\u26A0\uFE0F  ${index.numDocs.toLocaleString()} documents`,\n  );\n  const enabledNote =\n    index.change === \"enabled\"\n      ? `\\n   ${chalkStderr.gray(\"enabled before its staged backfill finished\")}`\n      : \"\";\n  return (\n    \"\u26D4 \" +\n    componentNameFormatted +\n    formatIndex(index) +\n    \"  \" +\n    documentsCountFormatted +\n    enabledNote\n  );\n}\n\nfunction minDocumentsForIndexBackfillWarning(): number {\n  return integerFromEnv(\n    \"CONVEX_MIN_DOCUMENTS_FOR_INDEX_BACKFILL_WARNING\",\n    MIN_DOCUMENTS_FOR_INDEX_BACKFILL_WARNING,\n  );\n}\n", "import { Context } from \"../../bundler/context.js\";\nimport { logVerbose } from \"../../bundler/log.js\";\nimport { EvaluateSchemaResponse } from \"./deployApi/evaluateSchema.js\";\nimport { StartPushRequest } from \"./deployApi/startPush.js\";\nimport { evaluateSchema } from \"./deploy2.js\";\nimport { Span } from \"./tracing.js\";\n\ntype EvaluateOptions = {\n  url: string;\n  deploymentName: string | null;\n  adminKey: string;\n};\n\n/**\n * A schema evaluation shared by the pre-push checks. Resolves to `null` when\n * the deployment doesn't support `evaluate_schema` or the request failed, in\n * which case each check skips itself.\n */\nexport type SchemaEvaluation = (\n  span: Span,\n) => Promise<EvaluateSchemaResponse | null>;\n\n/**\n * Evaluate the schema at most once per push however many checks consume it:\n * the first check to call sends the request under its own span, and the rest\n * await the same promise. Each request makes the backend evaluate the schema\n * module in an isolate and predict against a fresh snapshot, so repeating it\n * per check would add that work and a round trip to the deploy's critical\n * path for every check.\n */\n/**\n * Whether a schema module in the push calls `.staged(`. Bundles aren't\n * minified, so the call survives bundling. A false positive from a comment or\n * string costs one evaluation, while a push without staged validators skips\n * the evaluation round trip on its critical path.\n */\nexport function pushStagesValidators(request: StartPushRequest): boolean {\n  return [\n    request.appDefinition.schema,\n    ...request.componentDefinitions.map((definition) => definition.schema),\n  ].some((schema) => schema?.source.includes(\".staged(\") ?? false);\n}\n\nexport function sharedSchemaEvaluation(\n  ctx: Context,\n  request: StartPushRequest,\n  options: EvaluateOptions,\n): SchemaEvaluation {\n  let evaluation: Promise<EvaluateSchemaResponse | null> | undefined;\n  return (span) => {\n    evaluation ??= evaluateSchemaBestEffort({ ctx, span, request, options });\n    return evaluation;\n  };\n}\n\n// The checks are advisory: if evaluation fails, fall back to skipping them\n// rather than aborting the push over a check that isn't required for\n// correctness. Plausibly transient failures \u2014 network errors and 5xx\n// responses (e.g. table summaries still bootstrapping) \u2014 are retried with\n// backoff by the shared fetch wrapper (see `pushCode`); anything else is\n// deterministic, including a 2xx whose shape the CLI doesn't recognize, so\n// it skips the checks immediately.\nasync function evaluateSchemaBestEffort({\n  ctx,\n  span,\n  request,\n  options,\n}: {\n  ctx: Context;\n  span: Span;\n  request: StartPushRequest;\n  options: EvaluateOptions;\n}): Promise<EvaluateSchemaResponse | null> {\n  try {\n    return await evaluateSchema(\n      ctx,\n      span,\n      request,\n      options,\n      /* bestEffort */ true,\n    );\n  } catch (error: unknown) {\n    logVerbose(\n      `Skipping schema evaluation checks: ${error instanceof Error ? error.message : String(error)}`,\n    );\n    return null;\n  }\n}\n", "import { chalkStderr } from \"chalk\";\nimport { Context } from \"../../bundler/context.js\";\nimport { logFinishedStep, logMessage, stopSpinner } from \"../../bundler/log.js\";\nimport { promptYesNo } from \"./utils/prompts.js\";\nimport {\n  DiscardedStagedValidator,\n  EvaluateSchemaResponse,\n} from \"./deployApi/evaluateSchema.js\";\nimport { formatDiscardedStagedValidator } from \"./formatValidationProgress.js\";\n\nexport type StagedValidatorDeletionCheck =\n  | \"ask for confirmation\"\n  | \"has confirmation\"\n  | \"no verification\";\n\n/**\n * Confirm before discarding pending or successful staged validation. Unstaging\n * stops write-time checks, so restaging requires a fresh scan.\n *\n * A dry run only reports what the push would discard, so `--dry-run` previews\n * the confirmation the real push will ask for.\n */\nexport async function checkForStagedValidatorDeletion({\n  ctx,\n  response,\n  askForConfirmation,\n  dryRun = false,\n}: {\n  ctx: Context;\n  response: EvaluateSchemaResponse | null;\n  askForConfirmation: boolean;\n  dryRun?: boolean;\n}): Promise<void> {\n  // `sharedSchemaEvaluation` has already logged why evaluation failed.\n  if (response === null) {\n    return;\n  }\n  const discarded = Object.entries(response.componentSchemaEvaluations).flatMap(\n    ([componentPath, prediction]) =>\n      (prediction.discardedStagedValidators ?? []).map((validator) => ({\n        componentPath,\n        validator,\n      })),\n  );\n  if (discarded.length === 0) {\n    return;\n  }\n\n  logMessage(`\\u26a0\\ufe0f  This push ${chalkStderr.bold(dryRun ? \"would discard\" : \"discards\")} staged schema validation for the following ${discarded.length === 1 ? \"table\" : \"tables\"}:\n\n${discarded.map(formatDiscarded).join(\"\\n\")}\n\nA discarded staged validator restarts validation from zero if staged again.\n`);\n\n  if (dryRun) {\n    return;\n  }\n\n  if (!askForConfirmation) {\n    logFinishedStep(\n      \"Proceeding with push since --allow-unstaging-schema is set\",\n    );\n    return;\n  }\n\n  if (!process.stdin.isTTY) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `To confirm the push:\n\\u2022 run the deploy command in an ${chalkStderr.bold(\"interactive terminal\")}\n\\u2022 or run the deploy command with the ${chalkStderr.bold(\"--allow-unstaging-schema\")} flag`,\n    });\n  }\n\n  stopSpinner();\n  if (\n    !(await promptYesNo(ctx, {\n      message: `Discard staged validation for ${discarded.length === 1 ? \"this table\" : \"these tables\"}?`,\n      default: false,\n    }))\n  ) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Canceling push`,\n    });\n  }\n\n  logFinishedStep(\"Proceeding with push.\");\n}\n\nfunction formatDiscarded({\n  componentPath,\n  validator,\n}: {\n  componentPath: string;\n  validator: DiscardedStagedValidator;\n}): string {\n  const componentPrefix =\n    componentPath !== \"\" ? `${chalkStderr.gray(componentPath)}:` : \"\";\n  return `\\u26d4 ${componentPrefix}${validator.tableName}: ${formatDiscardedStagedValidator(validator)}`;\n}\n", "import { Context } from \"../../bundler/context.js\";\nimport { logMessage, logOutput, logWarning } from \"../../bundler/log.js\";\nimport { nextBackoff } from \"./dev.js\";\n// eslint-disable-next-line no-restricted-imports -- chalk used for writing to stdout\nimport chalk, { chalkStderr } from \"chalk\";\nimport { stripVTControlCharacters } from \"node:util\";\nimport { format } from \"node:util\";\nimport { deploymentFetch, ThrowingFetchError } from \"./utils/utils.js\";\nimport { FunctionExecution } from \"./apiTypes.js\";\n\nexport type LogMode = \"always\" | \"pause-on-deploy\" | \"disable\";\n\nexport class LogManager {\n  private paused: boolean = false;\n\n  constructor(private mode: LogMode) {}\n\n  async waitForUnpaused() {\n    while (this.paused) {\n      await new Promise((resolve) => setTimeout(resolve, 100));\n    }\n  }\n\n  beginDeploy() {\n    if (this.mode === \"pause-on-deploy\") {\n      this.paused = true;\n    }\n  }\n\n  endDeploy() {\n    if (this.mode === \"pause-on-deploy\") {\n      this.paused = false;\n    }\n  }\n}\n\nconst MAX_UDF_STREAM_FAILURE_COUNT = 5;\n\ntype LogDestination = \"stdout\" | \"stderr\";\n\nexport async function logsForDeployment(\n  ctx: Context,\n  credentials: {\n    url: string;\n    adminKey: string;\n  },\n  options: {\n    success: boolean;\n    history: number;\n    jsonl: boolean;\n    deploymentNotice: string;\n  },\n) {\n  logMessage(chalkStderr.yellow(`Watching logs${options.deploymentNotice}...`));\n  await watchLogs(ctx, credentials.url, credentials.adminKey, \"stdout\", {\n    history: options.history,\n    success: options.success,\n    jsonl: options.jsonl,\n  });\n}\n\nexport async function watchLogs(\n  ctx: Context,\n  url: string,\n  adminKey: string,\n  dest: LogDestination,\n  options?: {\n    success: boolean;\n    history?: number | boolean;\n    jsonl?: boolean;\n    logManager?: LogManager;\n  },\n) {\n  let numFailures = 0;\n  let isFirst = true;\n  let cursorMs = 0;\n\n  // Select the appropriate chalk instance and write function based on destination\n  const chalkInstance = dest === \"stdout\" ? chalk : chalkStderr;\n  const write = (s: string) => logToDestination(dest, s);\n\n  for (;;) {\n    try {\n      const { entries, newCursor } = await pollUdfLog(\n        ctx,\n        cursorMs,\n        url,\n        adminKey,\n      );\n      cursorMs = newCursor;\n      numFailures = 0;\n\n      // Delay printing logs until the log manager is unpaused.\n      await options?.logManager?.waitForUnpaused();\n\n      // The first execution, we just want to fetch the current head cursor so we don't send stale\n      // logs to the client.\n      if (isFirst) {\n        isFirst = false;\n        if (\n          options?.history === true ||\n          (typeof options?.history === \"number\" && options?.history > 0)\n        ) {\n          const entriesSlice =\n            options?.history === true\n              ? entries\n              : entries.slice(entries.length - options?.history);\n          processLogs(\n            entriesSlice,\n            write,\n            options?.success,\n            chalkInstance,\n            options?.jsonl,\n          );\n        }\n      } else {\n        processLogs(\n          entries,\n          write,\n          options?.success === true,\n          chalkInstance,\n          options?.jsonl,\n        );\n      }\n    } catch (e) {\n      // A 403 means the admin key isn't authorized for this deployment.\n      // Retrying won't help, so surface the error and fail immediately.\n      if (e instanceof ThrowingFetchError && e.response.status === 403) {\n        return await e.handle(ctx);\n      }\n      numFailures += 1;\n    }\n    // Handle backoff\n    if (numFailures > 0) {\n      const backoff = nextBackoff(numFailures);\n\n      // If we exceed a threshold number of failures, warn the user and display backoff.\n      if (numFailures > MAX_UDF_STREAM_FAILURE_COUNT) {\n        logWarning(\n          `Convex [WARN] Failed to fetch logs. Waiting ${backoff}ms before next retry.`,\n        );\n      }\n      await new Promise((resolve) => {\n        setTimeout(() => resolve(null), backoff);\n      });\n    }\n  }\n}\n\ntype UdfType = \"Query\" | \"Mutation\" | \"Action\" | \"HttpAction\";\n\ntype StructuredLogLine = {\n  messages: string[];\n  level: \"LOG\" | \"DEBUG\" | \"INFO\" | \"WARN\" | \"ERROR\";\n  timestamp: number;\n  isTruncated: boolean;\n};\ntype LogLine = string | StructuredLogLine;\n\nasync function pollUdfLog(\n  ctx: Context,\n  cursor: number,\n  url: string,\n  adminKey: string,\n): Promise<{ entries: FunctionExecution[]; newCursor: number }> {\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl: url,\n    adminKey,\n  });\n  const response = await fetch(`/api/stream_function_logs?cursor=${cursor}`, {\n    method: \"GET\",\n  });\n  return await response.json();\n}\n\nconst prefixForSource = (udfType: UdfType): string => {\n  return udfType.charAt(0);\n};\n\nfunction processLogs(\n  rawLogs: FunctionExecution[],\n  write: (message: string) => void,\n  shouldShowSuccessLogs: boolean,\n  chalkInstance: typeof chalk,\n  jsonl?: boolean,\n) {\n  if (jsonl) {\n    for (let i = 0; i < rawLogs.length; i++) {\n      const log = rawLogs[i];\n      write(JSON.stringify(log));\n    }\n    return;\n  }\n\n  for (let i = 0; i < rawLogs.length; i++) {\n    const log = rawLogs[i];\n    if (log.logLines) {\n      const id = log.identifier;\n      const udfType = log.udfType;\n      const timestampMs = log.timestamp * 1000;\n      const executionTimeMs =\n        \"executionTime\" in log ? log.executionTime * 1000 : NaN;\n\n      for (let j = 0; j < log.logLines.length; j++) {\n        const formatted = formatLogLineMessage(\n          \"info\",\n          timestampMs,\n          udfType,\n          id,\n          log.logLines[j],\n          chalkInstance,\n        );\n        write(formatted);\n      }\n\n      if (\"error\" in log && log.error) {\n        const formatted = formatLogLineMessage(\n          \"error\",\n          timestampMs,\n          udfType,\n          id,\n          log.error!,\n          chalkInstance,\n        );\n        write(formatted);\n      } else if (log.kind === \"Completion\" && shouldShowSuccessLogs) {\n        const formatted = chalkInstance.green(\n          formatFunctionExecutionMessage(\n            timestampMs,\n            udfType,\n            id,\n            executionTimeMs,\n          ),\n        );\n        write(formatted);\n      }\n    }\n  }\n}\n\nexport function formatFunctionExecutionMessage(\n  timestampMs: number,\n  udfType: UdfType,\n  udfPath: string,\n  executionTimeMs: number,\n): string {\n  return `${prefixLog(timestampMs, udfType, udfPath)} Function executed in ${Math.ceil(executionTimeMs)} ms`;\n}\n\nexport function formatLogLineMessage(\n  type: \"info\" | \"error\",\n  timestampMs: number,\n  udfType: UdfType,\n  udfPath: string,\n  message: LogLine,\n  chalkInstance: typeof chalk = chalk,\n): string {\n  const prefix = prefixForSource(udfType);\n  if (typeof message === \"string\") {\n    if (type === \"info\") {\n      const match = message.match(/^\\[.*?\\] /);\n      if (match === null) {\n        return chalkInstance.red(\n          `[CONVEX ${prefix}(${udfPath})] Could not parse console.log`,\n        );\n      }\n      const level = message.slice(1, match[0].length - 2);\n      const args = message.slice(match[0].length);\n      return `${chalkInstance.cyan(`${prefixLog(timestampMs, udfType, udfPath)} [${level}]`)} ${format(args)}`;\n    } else {\n      return chalkInstance.red(\n        `${prefixLog(timestampMs, udfType, udfPath)} ${message}`,\n      );\n    }\n  } else {\n    const level = message.level;\n    const formattedMessage = `${message.messages.join(\" \")}${message.isTruncated ? \" (truncated due to length)\" : \"\"}`;\n    return `${chalkInstance.cyan(\n      `${prefixLog(message.timestamp, udfType, udfPath)} [${level}]`,\n    )} ${formattedMessage}`;\n  }\n}\n\nfunction logToDestination(dest: LogDestination, s: string) {\n  switch (dest) {\n    case \"stdout\":\n      logOutput(s);\n      break;\n    case \"stderr\":\n      logMessage(s);\n      break;\n  }\n}\n\nfunction prefixLog(timestampMs: number, udfType: UdfType, udfPath: string) {\n  const prefix = prefixForSource(udfType);\n  const localizedTimestamp = new Date(timestampMs).toLocaleString();\n\n  return `${localizedTimestamp} [CONVEX ${prefix}(${udfPath})]`;\n}\n\nexport function formatLogsAsText(\n  rawLogs: FunctionExecution[],\n  shouldShowSuccessLogs: boolean = false,\n): string {\n  const lines: string[] = [];\n  const write = (message: string) =>\n    lines.push(stripVTControlCharacters(message));\n  processLogs(rawLogs, write, shouldShowSuccessLogs, chalk);\n  return lines.join(\"\\n\");\n}\n", "export async function readFromStdin(): Promise<string> {\n  return new Promise((resolve, reject) => {\n    let data = \"\";\n\n    process.stdin.setEncoding(\"utf8\");\n\n    process.stdin.on(\"readable\", () => {\n      let chunk;\n      while (null !== (chunk = process.stdin.read())) {\n        data += chunk;\n      }\n    });\n\n    process.stdin.on(\"end\", () => {\n      // Remove trailing newline if present\n      resolve(data.replace(/\\n$/, \"\"));\n    });\n\n    process.stdin.on(\"error\", (err) => {\n      reject(err);\n    });\n  });\n}\n", "import { determineAgent } from \"@vercel/detect-agent\";\n\n/**\n * Returns the name of the AI agent running this process, or null if none is\n * detected. `@vercel/detect-agent` recognizes the environment variables that\n * agents like Claude Code, Codex and Cursor set; `CONVEX_AGENT_MODE` is\n * Convex's own.\n */\nexport async function detectAiAgent(): Promise<string | null> {\n  if (process.env.CONVEX_AGENT_MODE) {\n    return \"CONVEX_AGENT_MODE\";\n  }\n  const result = await determineAgent();\n  return result.isAgent ? result.agent.name : null;\n}\n", "/**\n * NOTE: This file is intentionally duplicated in dashboard-common.\n * If you change this file, also update:\n * npm-packages/dashboard-common/src/features/settings/components/formatEnvValueForDotfile.ts\n * and keep the copied tests in sync.\n */\nexport function formatEnvValueForDotfile(value: string): {\n  formatted: string;\n  warning: string | undefined;\n} {\n  let formatted = value,\n    warning: string | undefined = undefined;\n\n  const containsNewline = value.includes(\"\\n\");\n  const containsSingleQuote = value.includes(\"'\");\n  const containsDoubleQuote = value.includes('\"');\n  const containsSlashN = value.includes(\"\\\\n\");\n  const commentWarning =\n    value.includes(\"#\") &&\n    `includes a '#' which may be interpreted as a comment if you save this value to a .env file, resulting in only reading a partial value.`;\n  if (containsNewline) {\n    if (!containsSingleQuote) {\n      formatted = `'${value}'`;\n    } else if (!containsSlashN) {\n      if (containsDoubleQuote && commentWarning) {\n        warning = commentWarning;\n      }\n      formatted = `\"${value.replaceAll(\"\\n\", \"\\\\n\")}\"`;\n    } else {\n      formatted = `'${value}'`;\n      warning = `includes single quotes, newlines and \"\\\\n\" in the value. If you save this value to a .env file, it may not round-trip.`;\n    }\n  } else if (\n    (value.startsWith('\"') && value.endsWith('\"')) ||\n    (value.startsWith(\"'\") && value.endsWith(\"'\")) ||\n    value.startsWith(\"`\") ||\n    value.endsWith(\"`\") ||\n    value.includes(\"\\f\") ||\n    value.includes(\"\\v\") ||\n    commentWarning\n  ) {\n    if (containsSingleQuote && !containsDoubleQuote && !containsSlashN) {\n      formatted = `\"${value}\"`;\n    } else {\n      formatted = `'${value}'`;\n      if (containsSingleQuote && commentWarning) {\n        warning = commentWarning;\n      }\n    }\n  }\n  if (value.includes(\"\\r\")) {\n    warning = warning ? `${warning} It also ` : \"\";\n    warning += `includes carriage return (\\\\r) which cannot be preserved in .env files (dotenv limitation)`;\n  }\n\n  return { formatted, warning };\n}\n", "// ----------------------------------------------------------------------------\n// Anonymous (No account)\n\nimport path from \"path\";\nimport { Context } from \"../../../bundler/context.js\";\nimport {\n  logFinishedStep,\n  logMessage,\n  logVerbose,\n  logWarning,\n} from \"../../../bundler/log.js\";\nimport { promptSearch, promptYesNo } from \"../utils/prompts.js\";\nimport { bigBrainPause, bigBrainStart } from \"./bigBrain.js\";\nimport { LocalDeploymentError, printLocalDeploymentOnError } from \"./errors.js\";\nimport {\n  LocalDeploymentKind,\n  deploymentStateDir,\n  ensureUuidForAnonymousUser,\n  legacyDeploymentStateDir,\n  loadDeploymentConfig,\n  loadDeploymentConfigFromDir,\n  loadProjectLocalConfig,\n  saveDeploymentConfig,\n} from \"./filePaths.js\";\nimport { rootDeploymentStateDir } from \"./filePaths.js\";\nimport { LocalDeploymentConfig } from \"./filePaths.js\";\nimport { ensureBackendStopped, localDeploymentUrl } from \"./run.js\";\nimport { handlePotentialUpgradeAndStart } from \"./upgrade.js\";\nimport { chooseLocalBackendPorts } from \"./utils.js\";\nimport { recursivelyDelete, recursivelyCopy } from \"../fsUtils.js\";\nimport { ensureBackendBinaryDownloaded } from \"./download.js\";\nimport { DeploymentDetails, isAnonymousDeployment } from \"../deployment.js\";\nimport { createProject } from \"../api.js\";\nimport { removeAnonymousPrefix } from \"../deployment.js\";\nimport { nodeFs } from \"../../../bundler/fs.js\";\nimport { doInitConvexFolder } from \"../codegen.js\";\nimport { readProjectConfig } from \"../config.js\";\nimport { functionsDir } from \"../utils/utils.js\";\nimport { attemptSetupAiFiles } from \"../aiFiles/index.js\";\nimport {\n  generateLocalDevSecretsWithLatestBinary,\n  LEGACY_LOCAL_BACKEND_INSTANCE_SECRET,\n} from \"./secrets.js\";\n\nexport async function handleAnonymousDeployment(\n  ctx: Context,\n  options: {\n    ports: {\n      cloud: number | undefined;\n      site: number | undefined;\n    };\n    backendVersion?: string | undefined;\n    dashboardVersion?: string | undefined;\n    forceUpgrade: boolean;\n    deploymentName: string | null;\n    chosenConfiguration: \"new\" | \"existing\" | \"ask\" | null;\n  },\n): Promise<DeploymentDetails> {\n  const deployment = await chooseDeployment(ctx, {\n    deploymentName: options.deploymentName,\n    chosenConfiguration: options.chosenConfiguration,\n  });\n  if (\n    deployment.kind === \"first\" &&\n    process.env.CONVEX_AGENT_MODE !== \"anonymous\" &&\n    process.stdin.isTTY\n  ) {\n    logMessage(\n      \"This command, `npx convex dev`, will run your Convex backend locally and update it with the function you write in the `convex/` directory.\",\n    );\n    logMessage(\n      \"Use `npx convex dashboard` to view and interact with your project from a web UI.\",\n    );\n    logMessage(\n      \"Use `npx convex docs` to read the docs and `npx convex help` to see other commands.\",\n    );\n    ensureUuidForAnonymousUser(ctx);\n    if (process.stdin.isTTY) {\n      const result = await promptYesNo(ctx, {\n        message: \"Continue?\",\n        default: true,\n      });\n      if (!result) {\n        return ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: \"Exiting\",\n        });\n      }\n    }\n  }\n  ctx.registerCleanup(async (_exitCode, err) => {\n    if (err instanceof LocalDeploymentError) {\n      printLocalDeploymentOnError();\n    }\n  });\n  const { binaryPath, version } = await ensureBackendBinaryDownloaded(\n    ctx,\n    options.backendVersion === undefined\n      ? {\n          kind: \"latest\",\n        }\n      : { kind: \"version\", version: options.backendVersion },\n  );\n\n  const existingCredentials =\n    deployment.kind === \"existing\"\n      ? {\n          adminKey: deployment.config.adminKey,\n          instanceSecret:\n            deployment.config.instanceSecret ??\n            LEGACY_LOCAL_BACKEND_INSTANCE_SECRET,\n        }\n      : null;\n  if (deployment.kind === \"existing\") {\n    // If it's still running for some reason, exit and tell the user to kill it.\n    // It's fine if a different backend is running on these ports though since we'll\n    // pick new ones.\n    await ensureBackendStopped(ctx, {\n      ports: {\n        cloud: deployment.config.ports.cloud,\n      },\n      maxTimeSecs: 5,\n      deploymentName: deployment.deploymentName,\n      allowOtherDeployments: true,\n    });\n  }\n\n  const { cloudPort, sitePort } = await chooseLocalBackendPorts(ctx, {\n    requestedPorts: options.ports,\n    suggestedPorts:\n      deployment.kind === \"existing\" ? deployment.config.ports : undefined,\n  });\n\n  const { cleanupHandle, adminKey } = await handlePotentialUpgradeAndStart(\n    ctx,\n    {\n      deploymentName: deployment.deploymentName,\n      deploymentKind: \"anonymous\",\n      oldVersion:\n        deployment.kind === \"existing\"\n          ? deployment.config.backendVersion\n          : null,\n      newBinaryPath: binaryPath,\n      newVersion: version,\n      ports: { cloud: cloudPort, site: sitePort },\n      existingCredentials,\n      forceUpgrade: options.forceUpgrade,\n      // Anonymous deployments aren't registered against a cloud project.\n      cloudProjectId: undefined,\n    },\n  );\n\n  const cleanupFunc = ctx.removeCleanup(cleanupHandle);\n  ctx.registerCleanup(async (exitCode, err) => {\n    if (cleanupFunc !== null) {\n      await cleanupFunc(exitCode, err);\n    }\n  });\n\n  if (deployment.kind === \"new\") {\n    await doInitConvexFolder(ctx);\n    const { configPath, projectConfig } = await readProjectConfig(ctx);\n    const convexDir = path.resolve(functionsDir(configPath, projectConfig));\n    const projectDir = path.resolve(path.dirname(configPath));\n    await attemptSetupAiFiles({\n      ctx,\n      aiFilesConfig: projectConfig.aiFiles,\n      convexDir,\n      projectDir,\n    });\n  }\n  return {\n    adminKey,\n    deploymentName: deployment.deploymentName,\n    deploymentUrl: localDeploymentUrl(cloudPort),\n    reference: null,\n    isDefault: false,\n  };\n}\n\nexport async function loadAnonymousDeployment(\n  ctx: Context,\n  deploymentName: string,\n): Promise<LocalDeploymentConfig> {\n  const config = loadDeploymentConfig(ctx, \"anonymous\", deploymentName);\n  if (config === null) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Could not find deployment with name ${deploymentName}!`,\n    });\n  }\n  return config;\n}\n\n/**\n * List legacy anonymous deployments from the home directory.\n * These are deployments stored in ~/.convex/anonymous-convex-backend-state/\n */\nexport function listLegacyAnonymousDeployments(ctx: Context): Array<{\n  deploymentName: string;\n  config: LocalDeploymentConfig;\n}> {\n  const deployments: Array<{\n    deploymentName: string;\n    config: LocalDeploymentConfig;\n  }> = [];\n\n  const dir = rootDeploymentStateDir(\"anonymous\");\n  if (ctx.fs.exists(dir)) {\n    const deploymentNames = ctx.fs\n      .listDir(dir)\n      .map((d) => d.name)\n      .filter((d) => isAnonymousDeployment(d));\n    for (const deploymentName of deploymentNames) {\n      const legacyDir = legacyDeploymentStateDir(\"anonymous\", deploymentName);\n      const config = loadDeploymentConfigFromDir(ctx, legacyDir);\n      if (config !== null) {\n        deployments.push({ deploymentName, config });\n      }\n    }\n  }\n\n  return deployments;\n}\n\nexport async function listExistingAnonymousDeployments(ctx: Context): Promise<\n  Array<{\n    deploymentName: string;\n    config: LocalDeploymentConfig;\n  }>\n> {\n  const deployments: Array<{\n    deploymentName: string;\n    config: LocalDeploymentConfig;\n  }> = [];\n\n  // Check project-local storage first\n  const projectLocal = loadProjectLocalConfig(ctx);\n  if (\n    projectLocal !== null &&\n    isAnonymousDeployment(projectLocal.deploymentName)\n  ) {\n    deployments.push(projectLocal);\n  }\n\n  // Check legacy home directory, avoiding duplicates\n  for (const legacy of listLegacyAnonymousDeployments(ctx)) {\n    if (!deployments.some((d) => d.deploymentName === legacy.deploymentName)) {\n      deployments.push(legacy);\n    }\n  }\n\n  return deployments;\n}\n\nasync function chooseDeployment(\n  ctx: Context,\n  options: {\n    deploymentName: string | null;\n    chosenConfiguration: \"new\" | \"existing\" | \"ask\" | null;\n  },\n): Promise<\n  | {\n      kind: \"existing\";\n      deploymentName: string;\n      config: LocalDeploymentConfig;\n    }\n  | {\n      kind: \"new\";\n      deploymentName: string;\n    }\n  | {\n      kind: \"first\";\n      deploymentName: string;\n    }\n> {\n  // Check for existing project-local deployment first - use it if it exists\n  const projectLocal = loadProjectLocalConfig(ctx);\n  if (projectLocal !== null) {\n    if (isAnonymousDeployment(projectLocal.deploymentName)) {\n      // Already an anonymous deployment - use it as-is\n      return {\n        kind: \"existing\",\n        deploymentName: projectLocal.deploymentName,\n        config: projectLocal.config,\n      };\n    }\n    // Project-local has data from a different deployment type (e.g., \"local-*\")\n    // Create a new anonymous deployment that will reuse this data and update the config\n    logVerbose(\n      `Project-local has ${projectLocal.deploymentName}, switching to anonymous`,\n    );\n    return { deploymentName: generateDeploymentName(), kind: \"new\" };\n  }\n\n  // Check if a specific deployment name was requested (legacy support)\n  if (options.deploymentName !== null && options.chosenConfiguration === null) {\n    const deployments = await listExistingAnonymousDeployments(ctx);\n    const existing = deployments.find(\n      (d) => d.deploymentName === options.deploymentName,\n    );\n    if (existing === undefined) {\n      logWarning(`Could not find project with name ${options.deploymentName}!`);\n    } else {\n      return {\n        kind: \"existing\",\n        deploymentName: existing.deploymentName,\n        config: existing.config,\n      };\n    }\n  }\n\n  // Handle agent mode - use fixed name since there's one deployment per project\n  if (process.env.CONVEX_AGENT_MODE === \"anonymous\") {\n    const deploymentName = \"anonymous-agent\";\n    logVerbose(`Deployment name: ${deploymentName}`);\n    return {\n      kind: \"new\",\n      deploymentName,\n    };\n  }\n\n  // No project-local data - check for legacy deployments in home directory\n  const legacyDeployments = listLegacyAnonymousDeployments(ctx);\n\n  // No legacy deployments - auto-create a new project without prompting\n  if (legacyDeployments.length === 0) {\n    logMessage(\"Setting up a new project...\");\n    return { deploymentName: generateDeploymentName(), kind: \"first\" };\n  }\n\n  // User explicitly wants a new deployment - create without prompting for name\n  if (options.chosenConfiguration === \"new\") {\n    return { deploymentName: generateDeploymentName(), kind: \"new\" };\n  }\n\n  // Non-interactive terminal - auto-create a new deployment\n  if (!process.stdin.isTTY) {\n    return { deploymentName: generateDeploymentName(), kind: \"new\" };\n  }\n\n  // Legacy deployments exist - prompt user to choose\n  const newOrExisting = await promptSearch(ctx, {\n    message: \"Which project would you like to use?\",\n    choices: [\n      ...(options.chosenConfiguration === \"existing\"\n        ? []\n        : [\n            {\n              name: \"Create a new one\",\n              value: \"new\",\n            },\n          ]),\n      ...legacyDeployments.map((d) => ({\n        name: d.deploymentName,\n        value: d.deploymentName,\n      })),\n    ],\n  });\n\n  if (newOrExisting !== \"new\") {\n    const existingDeployment = legacyDeployments.find(\n      (d) => d.deploymentName === newOrExisting,\n    );\n    if (existingDeployment === undefined) {\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Could not find project with name ${newOrExisting}!`,\n      });\n    }\n    return {\n      kind: \"existing\",\n      deploymentName: existingDeployment.deploymentName,\n      config: existingDeployment.config,\n    };\n  }\n\n  // User chose to create a new one - no name prompt needed\n  return { deploymentName: generateDeploymentName(), kind: \"new\" };\n}\n\n/**\n * Returns a name for a new anonymous deployment.\n */\nfunction generateDeploymentName() {\n  const baseName = path.basename(process.cwd());\n  const deploymentName = `anonymous-${baseName}`;\n  logVerbose(`Deployment name: ${deploymentName}`);\n  return deploymentName;\n}\n\n/**\n * This takes an \"anonymous\" deployment and makes it a \"local\" deployment\n * that is associated with a project in the given team.\n */\nexport async function handleLinkToProject(\n  ctx: Context,\n  args: {\n    deploymentName: string;\n    teamSlug: string;\n    teamId: number;\n    projectSlug: string | null;\n  },\n): Promise<{\n  deploymentName: string;\n  deploymentUrl: string;\n  projectSlug: string;\n}> {\n  logVerbose(\n    `Linking ${args.deploymentName} to a project in team ${args.teamSlug}`,\n  );\n  const config = loadDeploymentConfig(ctx, \"anonymous\", args.deploymentName);\n  if (config === null) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"Failed to load deployment config - try running `npx convex dev --configure`\",\n    });\n  }\n  await ensureBackendStopped(ctx, {\n    ports: {\n      cloud: config.ports.cloud,\n    },\n    deploymentName: args.deploymentName,\n    allowOtherDeployments: true,\n    maxTimeSecs: 5,\n  });\n  const projectName = removeAnonymousPrefix(args.deploymentName);\n  let projectSlug: string;\n  if (args.projectSlug !== null) {\n    projectSlug = args.projectSlug;\n  } else {\n    const { projectSlug: newProjectSlug } = await createProject(ctx, {\n      teamId: args.teamId,\n      projectName,\n      deploymentToProvision: null,\n    });\n    projectSlug = newProjectSlug;\n  }\n  logVerbose(`Creating local deployment in project ${projectSlug}`);\n  // Register it in big brain\n  const { deploymentName: localDeploymentName, projectId } =\n    await bigBrainStart(ctx, {\n      port: config.ports.cloud,\n      projectSlug,\n      teamSlug: args.teamSlug,\n      instanceName: null,\n    });\n  const { instanceSecret, adminKey } =\n    await generateLocalDevSecretsWithLatestBinary(ctx, {\n      deploymentName: localDeploymentName,\n    });\n  const localConfig = loadDeploymentConfig(ctx, \"local\", localDeploymentName);\n  if (localConfig !== null) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Project ${projectSlug} already has a local deployment, so we cannot link this anonymous local deployment to it.`,\n    });\n  }\n  logVerbose(`Moving ${args.deploymentName} to ${localDeploymentName}`);\n  await moveDeployment(\n    ctx,\n    {\n      deploymentKind: \"anonymous\",\n      deploymentName: args.deploymentName,\n    },\n    {\n      deploymentKind: \"local\",\n      deploymentName: localDeploymentName,\n    },\n  );\n  logVerbose(`Saving deployment config for ${localDeploymentName}`);\n  saveDeploymentConfig(ctx, \"local\", localDeploymentName, {\n    instanceSecret,\n    adminKey,\n    backendVersion: config.backendVersion,\n    ports: config.ports,\n    cloudProjectId: projectId,\n  });\n  await bigBrainPause(ctx, {\n    projectSlug,\n    teamSlug: args.teamSlug,\n  });\n  logFinishedStep(`Linked ${args.deploymentName} to project ${projectSlug}`);\n  return {\n    projectSlug,\n    deploymentName: localDeploymentName,\n    deploymentUrl: localDeploymentUrl(config.ports.cloud),\n  };\n}\n\nexport async function moveDeployment(\n  ctx: Context,\n  oldDeployment: {\n    deploymentKind: LocalDeploymentKind;\n    deploymentName: string;\n  },\n  newDeployment: {\n    deploymentKind: LocalDeploymentKind;\n    deploymentName: string;\n  },\n) {\n  const oldPath = deploymentStateDir(\n    ctx,\n    oldDeployment.deploymentKind,\n    oldDeployment.deploymentName,\n  );\n  const newPath = deploymentStateDir(\n    ctx,\n    newDeployment.deploymentKind,\n    newDeployment.deploymentName,\n  );\n\n  // If both paths are the same (project-local storage), no file movement needed.\n  // The config will be updated separately by saveDeploymentConfig.\n  if (oldPath === newPath) {\n    logVerbose(\n      `Source and destination are the same (${oldPath}), skipping file copy`,\n    );\n    return;\n  }\n\n  await recursivelyCopy(ctx, nodeFs, oldPath, newPath);\n  recursivelyDelete(ctx, oldPath);\n}\n", "import * as Sentry from \"@sentry/node\";\nimport path from \"path\";\nimport { Context } from \"../../../bundler/context.js\";\n// eslint-disable-next-line no-restricted-imports\nimport { promises as fs } from \"fs\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport { promptYesNo } from \"../utils/prompts.js\";\nimport { fetchAgentSkillsCatalog } from \"../versionApi.js\";\nimport { type AiFilesPaths, aiDirForConvexDir } from \"./paths.js\";\nimport {\n  installGuidelinesFile,\n  hasGuidelinesInstalled,\n} from \"./guidelinesmd.js\";\nimport {\n  attemptReadAiState,\n  readAiStateOrDefault,\n  writeAiState,\n  hasAiState,\n} from \"./state.js\";\nimport { type AiFilesProjectConfig } from \"../config.js\";\nimport { exhaustiveCheck, isInInteractiveTerminal } from \"./utils.js\";\nimport {\n  hasAgentsMdInstalled,\n  applyAgentsMdSection,\n  attemptToRemoveAgentsMdSection,\n} from \"./agentsmd.js\";\nimport {\n  hasClaudeMdInstalled,\n  applyClaudeMdSection,\n  attemptToRemoveClaudeMdSection,\n} from \"./claudemd.js\";\nimport { installSkills, removeInstalledSkills } from \"./skills.js\";\nimport { removeLegacyCursorRulesFile as removeLegacyCursorRules } from \"./cursorrules.js\";\n\nasync function hasExistingAiFilesArtifacts({\n  projectDir,\n  convexDir,\n}: AiFilesPaths): Promise<boolean> {\n  return (\n    (await hasGuidelinesInstalled(convexDir)) ||\n    (await hasAgentsMdInstalled(projectDir)) ||\n    (await hasClaudeMdInstalled(projectDir))\n  );\n}\n\ntype InstallAiFilesResult =\n  | { kind: \"success\" }\n  | { kind: \"error\"; message: string };\n\n/**\n * Install or refresh all Convex AI files.\n *\n * Reads the existing state if present, or starts from a blank one for a\n * fresh install.\n *\n * Writes everything it can even when the guidelines download or the skills\n * install fails, and returns an error if either of them failed.\n */\nexport async function installAiFiles({\n  projectDir,\n  convexDir,\n  aiFilesConfig,\n}: AiFilesPaths & {\n  aiFilesConfig?: AiFilesProjectConfig | undefined;\n}): Promise<InstallAiFilesResult> {\n  const convexDirName = path.relative(projectDir, convexDir);\n  const state = await readAiStateOrDefault(convexDir);\n\n  const guidelinesInstalled = await installGuidelinesFile({ convexDir, state });\n  await applyAgentsMdSection({ projectDir, state, convexDirName });\n  await applyClaudeMdSection({ projectDir, state, convexDirName });\n  const skillsInstalled = await installSkills({\n    projectDir,\n    state,\n    aiFilesConfig,\n  });\n  await removeLegacyCursorRules(projectDir);\n  await writeAiState({ state, convexDir });\n\n  if (!guidelinesInstalled || !skillsInstalled) {\n    return {\n      kind: \"error\",\n      message:\n        \"Some Convex AI files could not be installed. See the messages above.\",\n    };\n  }\n  return { kind: \"success\" };\n}\n\nasync function attemptToInstallAiFiles(\n  opts: Parameters<typeof installAiFiles>[0],\n): Promise<void> {\n  try {\n    await installAiFiles(opts);\n  } catch (error) {\n    Sentry.captureException(error);\n  }\n}\n\ntype AiFilesStalenessStatus = \"not-installed\" | \"stale\" | \"silent\";\n\nexport function isAiFilesDisabled(\n  aiFilesConfig: AiFilesProjectConfig | undefined,\n): boolean {\n  if (aiFilesConfig?.enabled !== undefined)\n    return aiFilesConfig.enabled === false;\n  return aiFilesConfig?.disableStalenessMessage === true;\n}\n\nasync function determineAiFilesStaleness({\n  canonicalGuidelinesHash,\n  canonicalAgentSkillsSha,\n  aiFilesConfig,\n  projectDir,\n  convexDir,\n}: {\n  canonicalGuidelinesHash: string | null;\n  canonicalAgentSkillsSha: string | null;\n  aiFilesConfig?: AiFilesProjectConfig | undefined;\n} & AiFilesPaths): Promise<AiFilesStalenessStatus> {\n  if (isAiFilesDisabled(aiFilesConfig)) return \"silent\";\n\n  const result = await attemptReadAiState(convexDir);\n\n  if (result.kind === \"no-file\" || result.kind === \"parse-error\") {\n    const hasArtifacts = await hasExistingAiFilesArtifacts({\n      projectDir,\n      convexDir,\n    });\n    return hasArtifacts ? \"silent\" : \"not-installed\";\n  }\n\n  if (result.kind === \"ok\") {\n    const { state } = result;\n\n    if (canonicalGuidelinesHash === null && canonicalAgentSkillsSha === null)\n      return \"silent\";\n\n    const guidelinesStale =\n      canonicalGuidelinesHash !== null &&\n      state.guidelinesHash !== null &&\n      state.guidelinesHash !== canonicalGuidelinesHash;\n\n    const skillsStale =\n      canonicalAgentSkillsSha !== null &&\n      state.agentSkillsSha !== null &&\n      state.agentSkillsSha !== canonicalAgentSkillsSha;\n\n    return guidelinesStale || skillsStale ? \"stale\" : \"silent\";\n  }\n\n  return exhaustiveCheck(result);\n}\n\n/**\n * Check whether the Convex AI files are out of date and log a nag message\n * if so.\n */\nexport async function checkAiFilesStalenessAndLog(\n  opts: {\n    canonicalGuidelinesHash: string | null;\n    canonicalAgentSkillsSha: string | null;\n    aiFilesConfig?: AiFilesProjectConfig | undefined;\n  } & AiFilesPaths,\n): Promise<void> {\n  const status = await determineAiFilesStaleness(opts);\n\n  if (status === \"not-installed\") {\n    logMessage(\n      chalkStderr.yellow(\n        `Convex AI files are not installed. Run ${chalkStderr.bold(`npx convex ai-files install`)} to get started or ${chalkStderr.bold(`npx convex ai-files disable`)} to hide this message.`,\n      ),\n    );\n    return;\n  }\n\n  if (status === \"stale\") {\n    logMessage(\n      chalkStderr.yellow(\n        `Your Convex AI files are out of date. Run ${chalkStderr.bold(`npx convex ai-files update`)} to get the latest.`,\n      ),\n    );\n    return;\n  }\n\n  if (status === \"silent\") return;\n\n  exhaustiveCheck(status);\n}\n\n/**\n * Installs AI files and returns the aiFiles config to write.\n */\nexport async function enableAiFiles({\n  projectDir,\n  convexDir,\n  aiFilesConfig,\n}: AiFilesPaths & {\n  aiFilesConfig?: AiFilesProjectConfig | undefined;\n}): Promise<AiFilesProjectConfig> {\n  await installAiFiles({ projectDir, convexDir, aiFilesConfig });\n  // Deleting the deprecated disableStalenessMessage key\n  const { disableStalenessMessage: _, ...rest } = aiFilesConfig ?? {};\n  return { ...rest, enabled: true };\n}\n\n/**\n * Returns the aiFiles config to write when disabling AI files.\n */\nexport function disableAiFiles(\n  aiFilesConfig?: AiFilesProjectConfig | undefined,\n): AiFilesProjectConfig {\n  // Deleting the deprecated disableStalenessMessage key\n  const { disableStalenessMessage: _, ...rest } = aiFilesConfig ?? {};\n  return { ...rest, enabled: false };\n}\n\nexport type RemoveAiFilesResult =\n  | { kind: \"success\" }\n  | { kind: \"error\"; message: string };\n\n/**\n * Remove all Convex AI files from the project.\n * Called by `npx convex ai-files remove`.\n */\nexport async function removeAiFiles({\n  projectDir,\n  convexDir,\n}: AiFilesPaths): Promise<RemoveAiFilesResult> {\n  const agentSkillsCatalog = await fetchAgentSkillsCatalog();\n  if (agentSkillsCatalog.kind === \"error\") {\n    return {\n      kind: \"error\",\n      message:\n        \"Could not fetch canonical agent skills from version.convex.dev. Aborting `convex ai-files remove`.\",\n    };\n  }\n\n  const removals = [\n    await attemptToRemoveAgentsMdSection(projectDir),\n    await attemptToRemoveClaudeMdSection(projectDir),\n    (await removeInstalledSkills({\n      projectDir,\n      skillNames: agentSkillsCatalog.data.skills.map(\n        ({ skillName }) => skillName,\n      ),\n    })) === \"removed\",\n    await removeLegacyCursorRules(projectDir),\n    await attemptToDeleteAiDir({ projectDir, convexDir }),\n  ];\n\n  if (removals.some(Boolean)) logMessage(\"Convex AI files removed.\");\n  else logMessage(\"No Convex AI files found \u2014 nothing to remove.\");\n  return { kind: \"success\" };\n}\n\nasync function attemptToDeleteAiDir({\n  projectDir,\n  convexDir,\n}: AiFilesPaths): Promise<boolean> {\n  const aiDir = aiDirForConvexDir(convexDir);\n  const relPath = path.relative(projectDir, aiDir);\n  try {\n    await fs.rm(aiDir, { recursive: true });\n    logMessage(`${chalkStderr.green(\"\u2714\")} Deleted ${relPath}/`);\n    return true;\n  } catch (error) {\n    if ((error as { code?: string }).code === \"ENOENT\") return false;\n    Sentry.captureException(error);\n    logMessage(\n      chalkStderr.yellow(`Could not delete ${relPath}/. Remove it manually.`),\n    );\n    return false;\n  }\n}\n\nasync function hasAiFilesBeenInstalledBefore({\n  projectDir,\n  convexDir,\n  aiFilesConfig,\n}: AiFilesPaths & {\n  aiFilesConfig?: AiFilesProjectConfig | undefined;\n}): Promise<boolean> {\n  if (isAiFilesDisabled(aiFilesConfig)) return false;\n  return (\n    (await hasAiState(convexDir)) ||\n    (await hasExistingAiFilesArtifacts({ projectDir, convexDir }))\n  );\n}\n\nexport async function attemptSetupAiFiles({\n  ctx,\n  convexDir,\n  projectDir,\n  aiFilesConfig,\n}: {\n  ctx: Context;\n  aiFilesConfig?: AiFilesProjectConfig | undefined;\n} & AiFilesPaths): Promise<void> {\n  if (!isInInteractiveTerminal()) return;\n  if (isAiFilesDisabled(aiFilesConfig)) return;\n\n  if (\n    await hasAiFilesBeenInstalledBefore({\n      projectDir,\n      convexDir,\n      aiFilesConfig,\n    })\n  ) {\n    await attemptToInstallAiFiles({ projectDir, convexDir, aiFilesConfig });\n    return;\n  }\n\n  const shouldInstall = await promptYesNo(ctx, {\n    message: \"Set up Convex AI files? (guidelines, AGENTS.md, agent skills)\",\n    default: true,\n  });\n\n  if (shouldInstall)\n    await attemptToInstallAiFiles({ projectDir, convexDir, aiFilesConfig });\n}\n", "import * as Sentry from \"@sentry/node\";\nimport { z } from \"zod\";\nimport { version } from \"../version.js\";\n\nconst DEFAULT_VERSION_API_ORIGIN = \"https://version.convex.dev\";\nconst VERSION_API_ORIGIN_ENV_VAR = \"CONVEX_VERSION_API_ORIGIN\";\n\nfunction versionApiOrigin() {\n  return process.env[VERSION_API_ORIGIN_ENV_VAR] ?? DEFAULT_VERSION_API_ORIGIN;\n}\n\nfunction versionApiEndpoint(path: string) {\n  return `${versionApiOrigin()}${path}`;\n}\n\nconst HEADERS: Record<string, string> = {\n  \"Convex-Client\": `npm-cli-${version}`,\n  // Useful telemetry proxy for \"human at a terminal\" vs automated/background execution.\n  \"Convex-Interactive\": process.stdin.isTTY === true ? \"true\" : \"false\",\n};\nif (process.env.CONVEX_AGENT_MODE) {\n  HEADERS[\"Convex-Agent-Mode\"] = process.env.CONVEX_AGENT_MODE;\n}\n\nconst optionalStringToNullSchema = z\n  .unknown()\n  .optional()\n  .transform((value) => (typeof value === \"string\" ? value : null));\n\nconst optionalTrueToBooleanSchema = z\n  .unknown()\n  .optional()\n  .transform((value) => value === true);\n\nconst versionResultSchema = z.object({\n  message: z.string().nullable(),\n  guidelinesHash: optionalStringToNullSchema,\n  agentSkillsSha: optionalStringToNullSchema,\n  disableSkillsCli: optionalTrueToBooleanSchema,\n  disableSkillsCliMessage: optionalStringToNullSchema,\n});\n\nconst agentSkillStatusSchema = z.discriminatedUnion(\"kind\", [\n  z.object({\n    kind: z.literal(\"active\"),\n  }),\n  z.object({\n    kind: z.literal(\"deleted\"),\n    deletedAt: z.number(),\n  }),\n]);\n\nconst agentSkillCatalogEntrySchema = z.object({\n  skillName: z.string(),\n  status: agentSkillStatusSchema,\n  hash: z.string(),\n  lastSeenRepoSha: z.string(),\n  lastSeenAt: z.number(),\n});\n\nconst agentSkillCatalogResultSchema = z.object({\n  latestRepoSha: z.string().nullable(),\n  skills: z.array(agentSkillCatalogEntrySchema),\n});\n\nexport type VersionResult = z.infer<typeof versionResultSchema>;\n\nexport type VersionFetchResult =\n  | { kind: \"ok\"; data: VersionResult }\n  | { kind: \"error\" };\n\nexport type AgentSkillStatus = z.infer<typeof agentSkillStatusSchema>;\n\nexport type AgentSkillCatalogEntry = z.infer<\n  typeof agentSkillCatalogEntrySchema\n>;\n\nexport type AgentSkillCatalogResult = z.infer<\n  typeof agentSkillCatalogResultSchema\n>;\n\nexport type AgentSkillCatalogFetchResult =\n  | { kind: \"ok\"; data: AgentSkillCatalogResult }\n  | { kind: \"error\" };\n\nexport async function getVersion(): Promise<VersionFetchResult> {\n  try {\n    const req = await fetch(versionApiEndpoint(\"/v1/version\"), {\n      headers: HEADERS,\n    });\n\n    if (!req.ok) {\n      Sentry.captureException(\n        new Error(`Failed to fetch version: status = ${req.status}`),\n      );\n      return { kind: \"error\" };\n    }\n\n    const json = await req.json();\n    const result = validateVersionResult(json);\n\n    if (result === null) return { kind: \"error\" };\n    return { kind: \"ok\", data: result };\n  } catch (error) {\n    Sentry.captureException(error);\n    return { kind: \"error\" };\n  }\n}\n\nexport function validateVersionResult(json: unknown): VersionResult | null {\n  const result = versionResultSchema.safeParse(json);\n  if (!result.success) {\n    Sentry.captureMessage(\"Invalid version result\", \"error\");\n    return null;\n  }\n  return result.data;\n}\n\nexport function validateAgentSkillCatalogResult(\n  json: unknown,\n): AgentSkillCatalogResult | null {\n  const result = agentSkillCatalogResultSchema.safeParse(json);\n  if (!result.success) {\n    Sentry.captureMessage(\"Invalid agent skill catalog result\", \"error\");\n    return null;\n  }\n  return result.data;\n}\n\n/** Fetch the latest agent skills SHA from version.convex.dev. */\nexport async function fetchAgentSkillsSha(): Promise<string | null> {\n  const versionData = await getVersion();\n  if (versionData.kind === \"error\") return null;\n  return versionData.data.agentSkillsSha;\n}\n\nexport async function fetchAgentSkillsCatalog(): Promise<AgentSkillCatalogFetchResult> {\n  try {\n    const req = await fetch(versionApiEndpoint(\"/v1/agent_skills\"), {\n      headers: HEADERS,\n    });\n\n    if (!req.ok) {\n      Sentry.captureException(\n        new Error(\n          `Failed to fetch agent skills catalog: status = ${req.status}`,\n        ),\n      );\n      return { kind: \"error\" };\n    }\n\n    const json = await req.json();\n    const result = validateAgentSkillCatalogResult(json);\n\n    if (result === null) return { kind: \"error\" };\n    return { kind: \"ok\", data: result };\n  } catch (error) {\n    Sentry.captureException(error);\n    return { kind: \"error\" };\n  }\n}\n\nexport async function downloadGuidelines(): Promise<string | null> {\n  try {\n    const req = await fetch(versionApiEndpoint(\"/v1/guidelines\"), {\n      headers: HEADERS,\n    });\n\n    if (!req.ok) {\n      Sentry.captureMessage(\n        `Failed to fetch Convex guidelines: status = ${req.status}`,\n      );\n      return null;\n    }\n\n    const text = await req.text();\n    return text;\n  } catch (error) {\n    Sentry.captureException(error);\n    return null;\n  }\n}\n", "import path from \"path\";\n\nexport type AiFilesPaths = {\n  projectDir: string;\n  convexDir: string;\n};\n\nconst AI_FILES_PARENT_DIR = \"_generated\";\nconst AI_FILES_DIR = \"ai\";\n\nexport function aiDirForConvexDir(convexDir: string): string {\n  return path.join(convexDir, AI_FILES_PARENT_DIR, AI_FILES_DIR);\n}\n\nexport function guidelinesPathForConvexDir(convexDir: string): string {\n  return path.join(aiDirForConvexDir(convexDir), \"guidelines.md\");\n}\n\nexport function aiFilesStatePathForConvexDir(convexDir: string): string {\n  return path.join(aiDirForConvexDir(convexDir), \"ai-files.state.json\");\n}\n\nexport function agentsMdPath(projectDir?: string): string {\n  return path.join(projectDir ?? process.cwd(), \"AGENTS.md\");\n}\n\nexport function claudeMdPath(projectDir?: string): string {\n  return path.join(projectDir ?? process.cwd(), \"CLAUDE.md\");\n}\n", "// eslint-disable-next-line no-restricted-imports\nimport { promises as fs } from \"fs\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport { downloadGuidelines } from \"../versionApi.js\";\nimport { hashSha256 } from \"../utils/hash.js\";\nimport { aiDirForConvexDir, guidelinesPathForConvexDir } from \"./paths.js\";\nimport { attemptReadFile, exhaustiveCheck } from \"./utils.js\";\nimport { type AiFilesState } from \"./state.js\";\n\nexport async function hasGuidelinesInstalled(\n  convexDir: string,\n): Promise<boolean> {\n  const result = await attemptReadFile(guidelinesPathForConvexDir(convexDir));\n  if (result.kind === \"content\") return true;\n  if (result.kind === \"empty\" || result.kind === \"not-found\") return false;\n  return exhaustiveCheck(result);\n}\n\n/**\n * Download and write the guidelines file.\n * Guidelines live in `_generated/` so local edits are not expected and are\n * not preserved.\n *\n * Returns false if the guidelines could not be downloaded.\n */\nexport async function installGuidelinesFile({\n  convexDir,\n  state,\n}: {\n  convexDir: string;\n  state: AiFilesState;\n}): Promise<boolean> {\n  const guidelines = await downloadGuidelines();\n\n  if (guidelines === null) {\n    logMessage(\n      chalkStderr.yellow(\n        \"Could not download Convex AI guidelines right now. You can retry with: npx convex ai-files install\",\n      ),\n    );\n    return false;\n  }\n\n  await fs.mkdir(aiDirForConvexDir(convexDir), { recursive: true });\n  await fs.writeFile(guidelinesPathForConvexDir(convexDir), guidelines, \"utf8\");\n  state.guidelinesHash = hashSha256(guidelines);\n\n  logMessage(\n    `${chalkStderr.green(\"\u2714\")} ${guidelinesPathForConvexDir(convexDir)} written`,\n  );\n\n  return true;\n}\n", "import { createHash } from \"crypto\";\n\nexport function hashSha256(value: string): string {\n  return createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\");\n}\n", "// eslint-disable-next-line no-restricted-imports\nimport { promises as fs } from \"fs\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport { hashSha256 } from \"../utils/hash.js\";\n\nexport function isInInteractiveTerminal(): boolean {\n  return process.stdin.isTTY === true;\n}\n\nexport type ReadFileResult =\n  | { kind: \"not-found\" }\n  | { kind: \"empty\" }\n  | { kind: \"content\"; content: string };\n\nexport async function attemptReadFile(\n  filePath: string,\n): Promise<ReadFileResult> {\n  try {\n    const content = await fs.readFile(filePath, \"utf8\");\n    if (content.length === 0) return { kind: \"empty\" };\n    return { kind: \"content\", content };\n  } catch (error) {\n    if ((error as NodeJS.ErrnoException).code === \"ENOENT\")\n      return { kind: \"not-found\" };\n\n    // eslint-disable-next-line no-restricted-syntax\n    throw error;\n  }\n}\n\nexport async function readFileOrNull(filePath: string): Promise<string | null> {\n  const result = await attemptReadFile(filePath);\n  if (result.kind === \"content\") return result.content;\n  if (result.kind === \"empty\") return \"\";\n  if (result.kind === \"not-found\") return null;\n  return exhaustiveCheck(result);\n}\n\n/**\n * Attempt to delete a file. Returns `true` if the file was deleted,\n * `false` if it didn't exist or the deletion failed.\n */\nexport async function safelyDeleteFile(filePath: string): Promise<boolean> {\n  try {\n    await fs.unlink(filePath);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Generic managed-section helpers\n//\n// Several files (AGENTS.md, CLAUDE.md) contain a Convex-managed section\n// delimited by start/end markers. These helpers provide the common logic\n// for injecting, stripping, and detecting those sections.\n// ---------------------------------------------------------------------------\n\nexport type ManagedSectionTarget = {\n  filePath: string;\n  startMarker: string;\n  endMarker: string;\n};\n\nexport type InjectResult = {\n  sectionHash: string;\n  didWrite: boolean;\n};\n\nexport const iife = <T>(fn: () => T): T => fn();\n\n/**\n * Inject a managed section into a file. If the file already contains the\n * markers, the section between them is replaced. Otherwise the section is\n * appended (or the file is created). Only writes when content actually\n * changes.\n */\nexport async function injectManagedSection(\n  opts: ManagedSectionTarget & { section: string },\n): Promise<InjectResult> {\n  const { filePath, startMarker, endMarker, section } = opts;\n\n  const existing = (await readFileOrNull(filePath)) ?? \"\";\n\n  const startIdx = existing.indexOf(startMarker);\n  const endIdx = existing.indexOf(endMarker);\n\n  const updated = iife(() => {\n    if (startIdx !== -1 && endIdx !== -1)\n      return (\n        existing.slice(0, startIdx) +\n        section +\n        existing.slice(endIdx + endMarker.length)\n      );\n    if (existing.length > 0)\n      return existing.trimEnd() + \"\\n\\n\" + section + \"\\n\";\n\n    return section + \"\\n\";\n  });\n\n  const didWrite = updated !== existing;\n  if (didWrite) await fs.writeFile(filePath, updated, \"utf8\");\n\n  return { sectionHash: hashSha256(section), didWrite };\n}\n\nexport type StripResult = \"none\" | \"section\" | \"file\";\n\n/**\n * Remove the managed section (between start/end markers) from a file.\n * If the file is empty after removal, it is deleted.\n *\n * Returns `\"none\"` if the file doesn't exist or has no markers,\n * `\"section\"` if the section was stripped, or `\"file\"` if the entire\n * file was deleted.\n */\nexport async function attemptToStripManagedSection(\n  opts: ManagedSectionTarget,\n): Promise<StripResult> {\n  const { filePath, startMarker, endMarker } = opts;\n\n  const content = await readFileOrNull(filePath);\n  if (content === null) return \"none\";\n\n  const startIdx = content.indexOf(startMarker);\n  const endIdx = content.indexOf(endMarker);\n  if (startIdx === -1 || endIdx === -1) {\n    return \"none\";\n  }\n\n  const before = content.slice(0, startIdx).trimEnd();\n  const after = content.slice(endIdx + endMarker.length).trimStart();\n  const updated = [before, after].filter(Boolean).join(\"\\n\\n\");\n\n  if (!updated.trim()) {\n    await safelyDeleteFile(filePath);\n    return \"file\";\n  }\n\n  await fs.writeFile(filePath, updated + \"\\n\", \"utf8\");\n  return \"section\";\n}\n\nexport function exhaustiveCheck(_param: never): never {\n  // eslint-disable-next-line no-restricted-syntax\n  throw new Error(\"Internal error: exhaustive check failed.\");\n}\n\nexport async function attemptToRemoveMarkdownSection({\n  projectDir,\n  strip,\n  fileName,\n}: {\n  projectDir: string;\n  strip: (dir: string) => Promise<StripResult>;\n  fileName: string;\n}): Promise<boolean> {\n  const result = await strip(projectDir);\n\n  if (result === \"section\") {\n    logMessage(\n      `${chalkStderr.green(\"\u2714\")} Removed Convex section from ${fileName}.`,\n    );\n    return true;\n  }\n\n  if (result === \"file\") {\n    logMessage(`${chalkStderr.green(\"\u2714\")} Deleted ${fileName}.`);\n    return true;\n  }\n\n  if (result === \"none\") return false;\n\n  return exhaustiveCheck(result);\n}\n\n/**\n * Check whether a file contains a managed section (both markers present).\n */\nexport async function hasManagedSection(\n  opts: ManagedSectionTarget,\n): Promise<boolean> {\n  const content = await readFileOrNull(opts.filePath);\n  return (\n    content !== null &&\n    content.includes(opts.startMarker) &&\n    content.includes(opts.endMarker)\n  );\n}\n", "import * as Sentry from \"@sentry/node\";\n// Use raw fs (not ctx.fs) so these operations run asynchronously and don't\n// interfere with the file-watcher used by `convex dev`.\n// eslint-disable-next-line no-restricted-imports\nimport { promises as fs } from \"fs\";\nimport { z } from \"zod\";\nimport { aiDirForConvexDir, aiFilesStatePathForConvexDir } from \"./paths.js\";\nimport { attemptReadFile, exhaustiveCheck } from \"./utils.js\";\n\nexport const aiFilesStateSchema = z.object({\n  guidelinesHash: z.string().nullable(),\n  agentsMdSectionHash: z.string().nullable(),\n  claudeMdHash: z.string().nullable(),\n  // Commit SHA from convex/agent-skills that was current when skills were\n  // last installed. Used to detect when newer skills are available.\n  agentSkillsSha: z.string().nullable(),\n});\n\nexport type AiFilesState = z.infer<typeof aiFilesStateSchema>;\n\nconst DEFAULT_AI_STATE: AiFilesState = {\n  guidelinesHash: null,\n  agentsMdSectionHash: null,\n  claudeMdHash: null,\n  agentSkillsSha: null,\n};\n\nexport type AttemptReadAiStateResult =\n  | { kind: \"no-file\" }\n  | { kind: \"ok\"; state: AiFilesState }\n  | { kind: \"parse-error\"; error: unknown };\n\nexport async function attemptReadAiState(\n  convexDir: string,\n): Promise<AttemptReadAiStateResult> {\n  const result = await attemptReadFile(aiFilesStatePathForConvexDir(convexDir));\n  if (result.kind === \"not-found\" || result.kind === \"empty\")\n    return { kind: \"no-file\" };\n\n  try {\n    const state = aiFilesStateSchema.parse(JSON.parse(result.content));\n    return { kind: \"ok\", state };\n  } catch (error) {\n    Sentry.captureException(error);\n    return { kind: \"parse-error\", error };\n  }\n}\n\nexport async function readAiStateOrDefault(\n  convexDir: string,\n): Promise<AiFilesState> {\n  const result = await attemptReadAiState(convexDir);\n  if (result.kind === \"ok\") return result.state;\n  if (result.kind === \"no-file\") return { ...DEFAULT_AI_STATE };\n  if (result.kind === \"parse-error\") return { ...DEFAULT_AI_STATE };\n  return exhaustiveCheck(result);\n}\n\nexport async function hasAiState(convexDir: string): Promise<boolean> {\n  const result = await attemptReadAiState(convexDir);\n  return result.kind === \"ok\";\n}\n\nexport async function writeAiState({\n  state,\n  convexDir,\n}: {\n  state: AiFilesState;\n  convexDir: string;\n}): Promise<void> {\n  const validated = aiFilesStateSchema.parse(state);\n  await fs.mkdir(aiDirForConvexDir(convexDir), { recursive: true });\n  await fs.writeFile(\n    aiFilesStatePathForConvexDir(convexDir),\n    JSON.stringify(validated, null, 2) + \"\\n\",\n    \"utf8\",\n  );\n}\n", "export const AGENTS_MD_START_MARKER = \"<!-- convex-ai-start -->\";\nexport const AGENTS_MD_END_MARKER = \"<!-- convex-ai-end -->\";\n\nexport function convexAiMarkdownBody(convexDir: string): string {\n  const normalizedConvexDir = convexDir.replaceAll(\"\\\\\", \"/\");\n  return `This project uses [Convex](https://convex.dev) as its backend.\n\nWhen working on Convex code, **always read\n\\`${normalizedConvexDir}/_generated/ai/guidelines.md\\` first** for important guidelines on\nhow to correctly use Convex APIs and patterns. The file contains rules that\noverride what you may have learned about Convex from training data.\n\nConvex agent skills for common tasks can be installed by running\n\\`npx convex ai-files install\\`.`;\n}\n\n/**\n * Returns the Convex section to inject into AGENTS.md.\n * The section is delimited by markers so it can be identified and updated\n * without clobbering any user-written content in the file.\n */\nexport function agentsMdConvexSection(convexDir: string): string {\n  return `${AGENTS_MD_START_MARKER}\n\n${convexAiMarkdownBody(convexDir)}\n\n${AGENTS_MD_END_MARKER}`;\n}\n", "import {\n  AGENTS_MD_START_MARKER,\n  AGENTS_MD_END_MARKER,\n  agentsMdConvexSection,\n} from \"../../codegen_templates/agentsmd.js\";\nimport { agentsMdPath } from \"./paths.js\";\nimport { type AiFilesState } from \"./state.js\";\nimport {\n  type ManagedSectionTarget,\n  type InjectResult,\n  type StripResult,\n  injectManagedSection,\n  attemptToStripManagedSection,\n  hasManagedSection,\n  attemptToRemoveMarkdownSection,\n} from \"./utils.js\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport { chalkStderr } from \"chalk\";\n\nfunction target(projectDir?: string): ManagedSectionTarget {\n  return {\n    filePath: agentsMdPath(projectDir),\n    startMarker: AGENTS_MD_START_MARKER,\n    endMarker: AGENTS_MD_END_MARKER,\n  };\n}\n\nexport async function injectAgentsMdSection({\n  section,\n  projectDir,\n}: {\n  section: string;\n  projectDir?: string;\n}): Promise<InjectResult> {\n  return injectManagedSection({ ...target(projectDir), section });\n}\n\nexport async function attemptToStripAgentsMdSection(\n  projectDir: string,\n): Promise<StripResult> {\n  return attemptToStripManagedSection(target(projectDir));\n}\n\nexport async function attemptToRemoveAgentsMdSection(\n  projectDir: string,\n): Promise<boolean> {\n  return attemptToRemoveMarkdownSection({\n    projectDir,\n    strip: attemptToStripAgentsMdSection,\n    fileName: \"AGENTS.md\",\n  });\n}\n\nexport async function hasAgentsMdInstalled(\n  projectDir: string,\n): Promise<boolean> {\n  return hasManagedSection(target(projectDir));\n}\n\n/**\n * Inject (or update) the Convex section in AGENTS.md and record the hash.\n * Returns true if the file was actually written.\n */\nexport async function applyAgentsMdSection({\n  projectDir,\n  state,\n  convexDirName,\n}: {\n  projectDir: string;\n  state: AiFilesState;\n  convexDirName: string;\n}): Promise<boolean> {\n  const result = await injectAgentsMdSection({\n    section: agentsMdConvexSection(convexDirName),\n    projectDir,\n  });\n  if (result.didWrite)\n    logMessage(`${chalkStderr.green(\"\u2714\")} AGENTS.md written`);\n  state.agentsMdSectionHash = result.sectionHash;\n  return result.didWrite;\n}\n", "import { convexAiMarkdownBody } from \"./agentsmd.js\";\n\n/**\n * Markers delimiting the Convex-managed section in CLAUDE.md.\n * Everything outside this block is user-owned and left untouched.\n */\nexport const CLAUDE_MD_START_MARKER = \"<!-- convex-ai-start -->\";\nexport const CLAUDE_MD_END_MARKER = \"<!-- convex-ai-end -->\";\n\n/**\n * Returns the Convex section to inject into CLAUDE.md.\n */\nexport function claudeMdConvexSection(convexDir: string): string {\n  return `${CLAUDE_MD_START_MARKER}\n\n${convexAiMarkdownBody(convexDir)}\n\n${CLAUDE_MD_END_MARKER}`;\n}\n", "import {\n  CLAUDE_MD_END_MARKER,\n  CLAUDE_MD_START_MARKER,\n  claudeMdConvexSection,\n} from \"../../codegen_templates/claudemd.js\";\nimport { claudeMdPath } from \"./paths.js\";\nimport { type AiFilesState } from \"./state.js\";\nimport {\n  type ManagedSectionTarget,\n  type InjectResult,\n  type StripResult,\n  injectManagedSection,\n  attemptToStripManagedSection,\n  hasManagedSection,\n  attemptToRemoveMarkdownSection,\n} from \"./utils.js\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport { chalkStderr } from \"chalk\";\n\nfunction target(projectDir?: string): ManagedSectionTarget {\n  return {\n    filePath: claudeMdPath(projectDir),\n    startMarker: CLAUDE_MD_START_MARKER,\n    endMarker: CLAUDE_MD_END_MARKER,\n  };\n}\n\nexport async function injectClaudeMdSection({\n  section,\n  projectDir,\n}: {\n  section: string;\n  projectDir?: string;\n}): Promise<InjectResult> {\n  return injectManagedSection({ ...target(projectDir), section });\n}\n\nexport async function attemptToStripClaudeMdSection(\n  projectDir: string,\n): Promise<StripResult> {\n  return attemptToStripManagedSection(target(projectDir));\n}\n\nexport async function attemptToRemoveClaudeMdSection(\n  projectDir: string,\n): Promise<boolean> {\n  return attemptToRemoveMarkdownSection({\n    projectDir,\n    strip: attemptToStripClaudeMdSection,\n    fileName: \"CLAUDE.md\",\n  });\n}\n\nexport async function hasClaudeMdInstalled(\n  projectDir: string,\n): Promise<boolean> {\n  return hasManagedSection(target(projectDir));\n}\n\n/**\n * Inject (or update) the Convex section in CLAUDE.md and record the hash.\n * Returns true if the file was actually written.\n */\nexport async function applyClaudeMdSection({\n  projectDir,\n  state,\n  convexDirName,\n}: {\n  projectDir: string;\n  state: AiFilesState;\n  convexDirName: string;\n}): Promise<boolean> {\n  const result = await injectClaudeMdSection({\n    section: claudeMdConvexSection(convexDirName),\n    projectDir,\n  });\n  if (result.didWrite)\n    logMessage(`${chalkStderr.green(\"\u2714\")} CLAUDE.md written`);\n  state.claudeMdHash = result.sectionHash;\n  return result.didWrite;\n}\n", "import child_process from \"child_process\";\nimport path from \"path\";\n// eslint-disable-next-line no-restricted-imports\nimport { promises as fs } from \"fs\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport { getVersion, fetchAgentSkillsSha } from \"../versionApi.js\";\nimport { type AiFilesState } from \"./state.js\";\nimport { exhaustiveCheck } from \"./utils.js\";\n\nimport { type AiFilesProjectConfig } from \"../config.js\";\n\n/**\n * Resolve the configured agent list, falling back to defaults.\n */\nfunction configuredSkillAgents(\n  aiFilesConfig?: AiFilesProjectConfig | undefined,\n): string[] {\n  // We default to the two most popular agents for now, \"codex\" installs to `.agents` which also\n  // covers cursor and many other tools. See: https://github.com/vercel-labs/skills?tab=readme-ov-file#supported-agents\n  const defaultAgents = [\"claude-code\", \"codex\"];\n  return aiFilesConfig?.skills?.agents ?? defaultAgents;\n}\n\n/**\n * Runs `npx skills add convex/agent-skills --yes --copy` in the given directory.\n * Returns true on success, false if the process fails or cannot be started.\n */\nfunction runSkillsAdd(cwd: string, agents: string[]): Promise<boolean> {\n  const args = [\"add\", \"convex/agent-skills\", \"--yes\", \"--copy\"];\n  for (const agent of agents) {\n    args.push(\"--agent\", agent);\n  }\n  return runSkillsCommand(cwd, args).then(({ ok }) => ok);\n}\n\n/**\n * Runs `npx skills remove <name...> --yes` to surgically remove only the\n * Convex-managed skills, leaving any skills from other sources intact.\n */\nfunction runSkillsRemove({\n  cwd,\n  skillNames,\n}: {\n  cwd: string;\n  skillNames: string[];\n}): Promise<boolean> {\n  return runSkillsCommand(cwd, [\"remove\", ...skillNames, \"--yes\"]).then(\n    ({ ok }) => ok,\n  );\n}\n\n/**\n * This function exists so we have a way to disable skills installs without pushing a new\n * version of the convex CLI\n */\nasync function shouldRunSkillsCli(): Promise<boolean> {\n  const versionData = await getVersion();\n\n  if (versionData.kind === \"error\") return true;\n\n  if (versionData.kind === \"ok\") {\n    if (versionData.data.disableSkillsCli) {\n      const message =\n        versionData.data.disableSkillsCliMessage ??\n        \"Agent skills are temporarily disabled.\";\n      logMessage(chalkStderr.yellow(message));\n      return false;\n    }\n    return true;\n  }\n\n  return exhaustiveCheck(versionData);\n}\n\n/**\n * Remove the skills-lock.json file if it only contains skills that we\n * are removing. The `npx skills remove` command leaves the lockfile behind\n * even when it's logically empty.\n */\nasync function removeSkillsLockIfEmpty({\n  projectDir,\n  removedSkillNames,\n}: {\n  projectDir: string;\n  removedSkillNames: string[];\n}): Promise<boolean> {\n  const lockPath = path.join(projectDir, \"skills-lock.json\");\n  try {\n    const content = await fs.readFile(lockPath, \"utf8\");\n    const lock = JSON.parse(content);\n\n    if (\n      !lock ||\n      typeof lock !== \"object\" ||\n      !lock.skills ||\n      typeof lock.skills !== \"object\"\n    ) {\n      return false;\n    }\n\n    const remainingSkills = Object.keys(lock.skills).filter(\n      (name) => !removedSkillNames.includes(name),\n    );\n\n    if (remainingSkills.length === 0) {\n      await fs.unlink(lockPath);\n      return true;\n    }\n    return false;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Install Convex agent skills and record the SHA into the state.\n * Handles the kill-switch check and all logging internally.\n *\n * Returns false if the skills CLI failed. Skipping skills because no agents\n * are configured or the kill switch is on counts as success.\n */\nexport async function installSkills({\n  projectDir,\n  state,\n  aiFilesConfig,\n}: {\n  projectDir: string;\n  state: AiFilesState;\n  aiFilesConfig?: AiFilesProjectConfig | undefined;\n}): Promise<boolean> {\n  const agents = configuredSkillAgents(aiFilesConfig);\n  if (agents.length === 0) return true;\n  if (!(await shouldRunSkillsCli())) return true;\n\n  logMessage(\"Installing Convex agent skills...\");\n  const skillsOk = await runSkillsAdd(projectDir, agents);\n  if (!skillsOk) {\n    logMessage(\n      chalkStderr.yellow(\n        \"Could not install agent skills. You can retry manually with: npx skills add convex/agent-skills --copy\",\n      ),\n    );\n    return false;\n  }\n\n  const sha = await fetchAgentSkillsSha();\n  if (sha) state.agentSkillsSha = sha;\n\n  logMessage(`${chalkStderr.green(\"\u2714\")} Skills installed`);\n  return true;\n}\n\nexport type RemoveInstalledSkillsStatus = \"unchanged\" | \"removed\" | \"failed\";\n\n/**\n * Remove Convex-managed agent skills and clean up the lock file if empty.\n * Returns whether removal was skipped, succeeded, or failed.\n */\nexport async function removeInstalledSkills({\n  projectDir,\n  skillNames,\n}: {\n  projectDir: string;\n  skillNames: string[];\n}): Promise<RemoveInstalledSkillsStatus> {\n  if (skillNames.length === 0) return \"unchanged\";\n  if (!(await shouldRunSkillsCli())) return \"unchanged\";\n\n  logMessage(`Removing Convex agent skills: ${skillNames.join(\", \")}`);\n  const skillsOk = await runSkillsRemove({ cwd: projectDir, skillNames });\n  if (!skillsOk) {\n    logMessage(\n      chalkStderr.yellow(\n        \"Could not remove agent skills automatically. Remove them manually with: npx skills remove\",\n      ),\n    );\n    return \"failed\";\n  }\n\n  const lockRemoved = await removeSkillsLockIfEmpty({\n    projectDir,\n    removedSkillNames: skillNames,\n  });\n\n  if (lockRemoved)\n    logMessage(`${chalkStderr.green(\"\u2714\")} Deleted skills-lock.json.`);\n\n  return \"removed\";\n}\n\nfunction runSkillsCommand(\n  cwd: string,\n  args: string[],\n): Promise<{ ok: boolean; output: string }> {\n  return new Promise((resolve) => {\n    const proc = child_process.spawn(\n      \"npx\",\n      [\"--yes\", \"skills@latest\", ...args],\n      {\n        cwd,\n        stdio: \"pipe\",\n        // .cmd files on Windows require shell execution.\n        shell: process.platform === \"win32\",\n      },\n    );\n    let capturedOutput = \"\";\n    proc.stdout?.on(\"data\", (chunk) => {\n      capturedOutput += chunk.toString();\n    });\n    proc.stderr?.on(\"data\", (chunk) => {\n      capturedOutput += chunk.toString();\n    });\n    proc.on(\"close\", (code) => {\n      if (code !== 0 && capturedOutput.trim().length > 0) {\n        const lines = capturedOutput.trim().split(/\\r?\\n/);\n        const tail = lines.slice(-10).join(\"\\n\");\n        logMessage(chalkStderr.gray(`skills output (tail):\\n${tail}`));\n      }\n      resolve({ ok: code === 0, output: capturedOutput });\n    });\n    proc.on(\"error\", () => resolve({ ok: false, output: capturedOutput }));\n  });\n}\n", "import path from \"path\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport { safelyDeleteFile } from \"./utils.js\";\n\n/**\n * Remove the legacy `.cursor/rules/convex_rules.mdc` file if it exists.\n * This file was written by the old cursor rules auto-update feature (removed\n * in favour of the AI files system). We clean it up unconditionally\n * during `writeAiFiles`, `convex ai-files update`, and `convex ai-files remove`\n * since it was always auto-managed and is now superseded by\n * `convex/_generated/ai/guidelines.md`.\n */\nexport async function removeLegacyCursorRulesFile(\n  projectDir: string,\n): Promise<boolean> {\n  const removed = await safelyDeleteFile(\n    path.join(projectDir, \".cursor\", \"rules\", \"convex_rules.mdc\"),\n  );\n  if (removed)\n    logMessage(\n      `${chalkStderr.green(\"\u2714\")} Removed legacy .cursor/rules/convex_rules.mdc (superseded by convex/_generated/ai/guidelines.md).`,\n    );\n  return removed;\n}\n", "export type InProjectSelector =\n  | { kind: \"dev\" }\n  | { kind: \"prod\" }\n  | { kind: \"local\" }\n  | { kind: \"reference\"; reference: string };\n\nexport type ParsedDeploymentSelector =\n  | { kind: \"deploymentName\"; deploymentName: string }\n  | { kind: \"inCurrentProject\"; selector: InProjectSelector }\n  | { kind: \"inProject\"; projectSlug: string; selector: InProjectSelector }\n  | {\n      kind: \"inTeamProject\";\n      teamSlug: string;\n      projectSlug: string;\n      selector: InProjectSelector;\n    };\n\nfunction parseInProjectSelector(s: string): InProjectSelector {\n  if (s === \"dev\") return { kind: \"dev\" };\n  if (s === \"prod\") return { kind: \"prod\" };\n  if (s === \"local\") return { kind: \"local\" };\n  return { kind: \"reference\", reference: s };\n}\n\n/**\n * Parses the value of the `--deployment` CLI flag\n */\nexport function parseDeploymentSelector(\n  selector: string,\n): ParsedDeploymentSelector {\n  if (/^[a-z]+-[a-z]+-[0-9]+$/.test(selector)) {\n    return { kind: \"deploymentName\", deploymentName: selector };\n  }\n  const parts = selector.split(\":\");\n  if (parts.length === 3) {\n    return {\n      kind: \"inTeamProject\",\n      teamSlug: parts[0],\n      projectSlug: parts[1],\n      selector: parseInProjectSelector(parts[2]),\n    };\n  }\n  if (parts.length === 2) {\n    return {\n      kind: \"inProject\",\n      projectSlug: parts[0],\n      selector: parseInProjectSelector(parts[1]),\n    };\n  }\n  return {\n    kind: \"inCurrentProject\",\n    selector: parseInProjectSelector(selector),\n  };\n}\n", "import { ProjectResponse } from \"@convex-dev/platform/managementApi\";\nimport { Context } from \"../../../bundler/context.js\";\nimport { logVerbose } from \"../../../bundler/log.js\";\nimport {\n  DeploymentSelection,\n  getProjectDetails,\n} from \"../deploymentSelection.js\";\nimport { ParsedDeploymentSelector } from \"../deploymentSelector.js\";\nimport { typedPlatformClient } from \"../utils/utils.js\";\nimport { bigBrainPause } from \"./bigBrain.js\";\nimport { LocalDeploymentConfig } from \"./filePaths.js\";\n\n/**\n * Returns the cloud project the user is targeting with a `[team:project:]local`\n * selector, or `null` if the project context can't be determined (e.g.\n * anonymous mode, no current project).\n */\nexport async function targetProjectForLocalSelector(\n  ctx: Context,\n  parsed: ParsedDeploymentSelector,\n  currentSelection: DeploymentSelection,\n): Promise<ProjectResponse | null> {\n  switch (parsed.kind) {\n    case \"inTeamProject\":\n      return await getProjectDetails(ctx, {\n        kind: \"teamAndProjectSlugs\",\n        teamSlug: parsed.teamSlug,\n        projectSlug: parsed.projectSlug,\n      });\n    case \"inCurrentProject\":\n      if (currentSelection.kind !== \"deploymentWithinProject\") return null;\n      return await getProjectDetails(ctx, currentSelection.targetProject);\n    case \"inProject\": {\n      if (currentSelection.kind !== \"deploymentWithinProject\") return null;\n      // For `project:local` we keep the team from the current cloud project\n      // and switch only the project slug.\n      const current = await getProjectDetails(\n        ctx,\n        currentSelection.targetProject,\n      );\n      return await getProjectDetails(ctx, {\n        kind: \"teamAndProjectSlugs\",\n        teamSlug: current.teamSlug,\n        projectSlug: parsed.projectSlug,\n      });\n    }\n    default:\n      return null;\n  }\n}\n\n/**\n * Compares the cloud project association stored in `config.json` against the\n * cloud project the user is asking about. Returns `\"skip\"` when the on-disk\n * config has no `cloudProjectId` (older configs, anonymous mode).\n */\nexport function checkLocalConfigMatchesProject(\n  _ctx: Context,\n  localConfig: LocalDeploymentConfig,\n  target: { id: number },\n): \"match\" | \"mismatch\" | \"skip\" {\n  if (localConfig.cloudProjectId === undefined) {\n    return \"skip\";\n  }\n  return localConfig.cloudProjectId === target.id ? \"match\" : \"mismatch\";\n}\n\n/**\n * Best-effort lookup of a cloud project's team/project slugs by id. Returns\n * `null` if the project can't be resolved (e.g. it was deleted from the\n * dashboard).\n */\nexport async function getCloudProjectSlugsBestEffort(\n  ctx: Context,\n  cloudProjectId: number,\n): Promise<{ teamSlug: string; slug: string } | null> {\n  try {\n    const result = await typedPlatformClient(ctx, { throw: true }).GET(\n      \"/projects/{project_id}\",\n      {\n        params: { path: { project_id: cloudProjectId } },\n      },\n    );\n    const project = result.data;\n    if (!project) return null;\n    return { teamSlug: project.teamSlug, slug: project.slug };\n  } catch (e) {\n    logVerbose(\n      `Failed to resolve cloud project ${cloudProjectId}: ${e as any}`,\n    );\n    return null;\n  }\n}\n\n/**\n * Best-effort call to `local_deployment/pause` for the local deployment\n * associated with the given cloud project. Swallows any errors.\n */\nexport async function pauseLocalDeploymentBestEffort(\n  ctx: Context,\n  project: { teamSlug: string; slug: string } | null,\n): Promise<void> {\n  if (project === null) return;\n  try {\n    await bigBrainPause(ctx, {\n      teamSlug: project.teamSlug,\n      projectSlug: project.slug,\n    });\n  } catch (e) {\n    logVerbose(`Failed to pause local deployment: ${e as any}`);\n  }\n}\n", "import { chalkStderr } from \"chalk\";\nimport os from \"os\";\nimport path from \"path\";\nimport { rootDirectory } from \"./utils.js\";\nimport { Context } from \"../../../bundler/context.js\";\nimport { logError, logVerbose } from \"../../../bundler/log.js\";\nimport { z } from \"zod\";\n\nexport function globalConfigPath(): string {\n  return path.join(rootDirectory(), \"config.json\");\n}\n\n// GlobalConfig is stored in a file that very old versions of Convex also need to access.\n// Everything besides accessToken must be optional forever.\n// GlobalConfig is deleted on logout. It is primarily used for the accessToken.\nexport type GlobalConfig = {\n  accessToken: string;\n};\n\nconst schema = z.object({\n  accessToken: z.string().min(1),\n});\n\nexport function readGlobalConfig(ctx: Context): GlobalConfig | null {\n  const configPath = globalConfigPath();\n  let configFile;\n  try {\n    configFile = ctx.fs.readUtf8File(configPath);\n  } catch {\n    return null;\n  }\n  try {\n    const storedConfig = JSON.parse(configFile);\n    const config: GlobalConfig = schema.parse(storedConfig);\n    return config;\n  } catch (err) {\n    // Print an error and act as if the file does not exist.\n    logError(\n      chalkStderr.red(\n        `Failed to parse global config in ${configPath} with error ${\n          err as any\n        }.`,\n      ),\n    );\n    return null;\n  }\n}\n\n/** Write the global config, preserving existing properties we don't understand. */\nexport async function modifyGlobalConfig(ctx: Context, config: GlobalConfig) {\n  const configPath = globalConfigPath();\n  let configFile;\n  try {\n    configFile = ctx.fs.readUtf8File(configPath);\n    // totally fine for it not to exist\n    // eslint-disable-next-line no-empty\n  } catch {}\n  // storedConfig may contain properties this version of the CLI doesn't understand.\n  let storedConfig = {};\n  if (configFile) {\n    try {\n      storedConfig = JSON.parse(configFile);\n      schema.parse(storedConfig);\n    } catch (err) {\n      logError(\n        chalkStderr.red(\n          `Failed to parse global config in ${configPath} with error ${\n            err as any\n          }.`,\n        ),\n      );\n      storedConfig = {};\n    }\n  }\n  const newConfig: GlobalConfig = { ...storedConfig, ...config };\n  await overrwriteGlobalConfig(ctx, newConfig);\n}\n\n/** Write global config, overwriting any existing settings. */\nasync function overrwriteGlobalConfig(ctx: Context, config: GlobalConfig) {\n  const dirName = rootDirectory();\n  ctx.fs.mkdir(dirName, { allowExisting: true });\n  const path = globalConfigPath();\n  try {\n    ctx.fs.writeUtf8File(path, JSON.stringify(config, null, 2));\n  } catch (err) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      errForSentry: err,\n      printedMessage: chalkStderr.red(\n        `Failed to write auth config to ${path} with error: ${err as any}`,\n      ),\n    });\n  }\n  logVerbose(`Saved credentials to ${formatPathForPrinting(path)}`);\n}\n\nexport function formatPathForPrinting(path: string) {\n  const homedir = os.homedir();\n  if (process.platform === \"darwin\" && path.startsWith(homedir)) {\n    return path.replace(homedir, \"~\");\n  }\n  return path;\n}\n", "import path from \"path\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage } from \"../../../bundler/log.js\";\nimport {\n  AGENTS_MD_START_MARKER,\n  AGENTS_MD_END_MARKER,\n  agentsMdConvexSection,\n} from \"../../codegen_templates/agentsmd.js\";\nimport {\n  CLAUDE_MD_START_MARKER,\n  CLAUDE_MD_END_MARKER,\n  claudeMdConvexSection,\n} from \"../../codegen_templates/claudemd.js\";\nimport { getVersion } from \"../versionApi.js\";\nimport { hashSha256 } from \"../utils/hash.js\";\nimport {\n  type AiFilesPaths,\n  agentsMdPath,\n  claudeMdPath,\n  guidelinesPathForConvexDir,\n} from \"./paths.js\";\nimport { type AiFilesState, attemptReadAiState } from \"./state.js\";\nimport { type AiFilesProjectConfig } from \"../config.js\";\nimport { isAiFilesDisabled } from \"./index.js\";\nimport { readFileOrNull } from \"./utils.js\";\n\nfunction logGuidelinesStatus({\n  guidelinesFile,\n  guidelinesRelPath,\n  state,\n  canonicalGuidelinesHash,\n  networkAvailable,\n}: {\n  guidelinesFile: string | null;\n  guidelinesRelPath: string;\n  state: AiFilesState;\n  canonicalGuidelinesHash: string | null;\n  networkAvailable: boolean;\n}): void {\n  if (guidelinesFile === null || guidelinesFile === \"\") {\n    logMessage(\n      `  ${chalkStderr.yellow(\"\u26A0\")} ${guidelinesRelPath}: not on disk \u2014 run ${chalkStderr.bold(\"npx convex ai-files install\")} to reinstall`,\n    );\n    return;\n  }\n\n  const isLocallyModified =\n    state.guidelinesHash !== null &&\n    hashSha256(guidelinesFile) !== state.guidelinesHash;\n\n  if (isLocallyModified) {\n    logMessage(\n      `  ${chalkStderr.yellow(\"\u26A0\")} ${guidelinesRelPath}: installed, modified locally (changes will be overwritten on next update)`,\n    );\n    return;\n  }\n\n  const isOutOfDate =\n    networkAvailable &&\n    canonicalGuidelinesHash !== null &&\n    state.guidelinesHash !== null &&\n    state.guidelinesHash !== canonicalGuidelinesHash;\n\n  if (isOutOfDate) {\n    logMessage(\n      `  ${chalkStderr.yellow(\"\u26A0\")} ${guidelinesRelPath}: installed, out of date \u2014 run ${chalkStderr.bold(\"npx convex ai-files update\")}`,\n    );\n    return;\n  }\n\n  logMessage(\n    `  ${chalkStderr.green(\"\u2714\")} ${guidelinesRelPath}: installed${networkAvailable ? \", up to date\" : \"\"}`,\n  );\n}\n\nfunction logAgentsMdStatus({\n  agentsContent,\n  state,\n  convexDirName,\n}: {\n  agentsContent: string | null;\n  state: AiFilesState;\n  convexDirName: string;\n}): void {\n  const hasSection =\n    agentsContent !== null &&\n    agentsContent.includes(AGENTS_MD_START_MARKER) &&\n    agentsContent.includes(AGENTS_MD_END_MARKER);\n\n  if (!hasSection) {\n    logMessage(\n      `  ${chalkStderr.yellow(\"\u26A0\")} AGENTS.md: Convex section missing \u2014 run ${chalkStderr.bold(\"npx convex ai-files install\")} to reinstall`,\n    );\n    return;\n  }\n\n  const currentHash = hashSha256(agentsMdConvexSection(convexDirName));\n  if (\n    state.agentsMdSectionHash !== null &&\n    state.agentsMdSectionHash !== currentHash\n  ) {\n    logMessage(\n      `  ${chalkStderr.yellow(\"\u26A0\")} AGENTS.md: Convex section out of date \u2014 run ${chalkStderr.bold(\"npx convex ai-files update\")}`,\n    );\n  } else {\n    logMessage(\n      `  ${chalkStderr.green(\"\u2714\")} AGENTS.md: Convex section present, up to date`,\n    );\n  }\n}\n\nfunction logClaudeMdStatus({\n  claudeContent,\n  state,\n  convexDirName,\n}: {\n  claudeContent: string | null;\n  state: AiFilesState;\n  convexDirName: string;\n}): void {\n  const hasSection =\n    claudeContent !== null &&\n    claudeContent.includes(CLAUDE_MD_START_MARKER) &&\n    claudeContent.includes(CLAUDE_MD_END_MARKER);\n\n  if (!hasSection) {\n    if (claudeContent === null) {\n      logMessage(\n        `  ${chalkStderr.yellow(\"\u26A0\")} CLAUDE.md: missing - run ${chalkStderr.bold(\"npx convex ai-files install\")} to create it`,\n      );\n    } else {\n      logMessage(\n        `  ${chalkStderr.yellow(\"\u26A0\")} CLAUDE.md: no Convex section present - run ${chalkStderr.bold(\"npx convex ai-files update\")} to add it`,\n      );\n    }\n    return;\n  }\n\n  const currentHash = hashSha256(claudeMdConvexSection(convexDirName));\n  if (state.claudeMdHash !== null && state.claudeMdHash !== currentHash) {\n    logMessage(\n      `  ${chalkStderr.yellow(\"\u26A0\")} CLAUDE.md: Convex section out of date - run ${chalkStderr.bold(\"npx convex ai-files update\")}`,\n    );\n  } else {\n    logMessage(\n      `  ${chalkStderr.green(\"\u2714\")} CLAUDE.md: Convex section present, up to date`,\n    );\n  }\n}\n\nfunction logSkillsStatus({\n  state,\n  canonicalAgentSkillsSha,\n  networkAvailable,\n}: {\n  state: AiFilesState;\n  canonicalAgentSkillsSha: string | null;\n  networkAvailable: boolean;\n}): void {\n  if (state.agentSkillsSha === null) {\n    logMessage(\n      `  ${chalkStderr.yellow(\"\u26A0\")} Agent skills: not installed \u2014 run ${chalkStderr.bold(\"npx convex ai-files install\")} to install`,\n    );\n    return;\n  }\n\n  const isStale =\n    networkAvailable &&\n    canonicalAgentSkillsSha !== null &&\n    state.agentSkillsSha !== null &&\n    state.agentSkillsSha !== canonicalAgentSkillsSha;\n\n  if (isStale) {\n    logMessage(\n      `  ${chalkStderr.yellow(\"\u26A0\")} Agent skills: installed, out of date \u2014 run ${chalkStderr.bold(\"npx convex ai-files update\")}`,\n    );\n  } else {\n    logMessage(\n      `  ${chalkStderr.green(\"\u2714\")} Agent skills: installed${networkAvailable ? \", up to date\" : \"\"}`,\n    );\n  }\n}\n\nexport async function statusAiFiles({\n  projectDir,\n  convexDir,\n  aiFilesConfig,\n}: AiFilesPaths & {\n  aiFilesConfig?: AiFilesProjectConfig | undefined;\n}): Promise<void> {\n  const convexDirName = path.relative(projectDir, convexDir);\n  const guidelinesRelPath = path.relative(\n    projectDir,\n    guidelinesPathForConvexDir(convexDir),\n  );\n\n  if (isAiFilesDisabled(aiFilesConfig)) {\n    logMessage(`Convex AI files: ${chalkStderr.yellow(\"disabled\")}`);\n    logMessage(\n      `  Run ${chalkStderr.bold(\"npx convex ai-files enable\")} to re-enable.`,\n    );\n    return;\n  }\n\n  const stateResult = await attemptReadAiState(convexDir);\n\n  if (stateResult.kind !== \"ok\") {\n    logMessage(`Convex AI files: ${chalkStderr.yellow(\"not installed\")}`);\n    logMessage(\n      `Run ${chalkStderr.bold(\"npx convex ai-files install\")} to get started.`,\n    );\n    return;\n  }\n\n  const { state } = stateResult;\n\n  logMessage(`Convex AI files: ${chalkStderr.green(\"enabled\")}`);\n\n  const [versionData, guidelinesFile, agentsContent, claudeContent] =\n    await Promise.all([\n      getVersion(),\n      readFileOrNull(guidelinesPathForConvexDir(convexDir)),\n      readFileOrNull(agentsMdPath(projectDir)),\n      readFileOrNull(claudeMdPath(projectDir)),\n    ]);\n\n  const networkAvailable = versionData.kind === \"ok\";\n  const canonicalGuidelinesHash = networkAvailable\n    ? versionData.data.guidelinesHash\n    : null;\n  const canonicalAgentSkillsSha = networkAvailable\n    ? versionData.data.agentSkillsSha\n    : null;\n\n  logGuidelinesStatus({\n    guidelinesFile,\n    guidelinesRelPath,\n    state,\n    canonicalGuidelinesHash,\n    networkAvailable,\n  });\n  logAgentsMdStatus({ agentsContent, state, convexDirName });\n  logClaudeMdStatus({ claudeContent, state, convexDirName });\n  logSkillsStatus({ state, canonicalAgentSkillsSha, networkAvailable });\n}\n", "import { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\n\nconst list = new Command(\"list\").action(async () => {\n  const ctx = await oneoffContext({\n    url: undefined,\n    adminKey: undefined,\n    envFile: undefined,\n  });\n  await ctx.crash({\n    exitCode: 1,\n    errorType: \"fatal\",\n    errForSentry: \"Ran deprecated `convex auth list`\",\n    printedMessage:\n      \"convex auth commands were removed, see https://docs.convex.dev/auth for up to date instructions.\",\n  });\n});\n\nconst rm = new Command(\"remove\").action(async () => {\n  const ctx = await oneoffContext({\n    url: undefined,\n    adminKey: undefined,\n    envFile: undefined,\n  });\n  await ctx.crash({\n    exitCode: 1,\n    errorType: \"fatal\",\n    errForSentry: \"Ran deprecated `convex auth remove`\",\n    printedMessage:\n      \"convex auth commands were removed, see https://docs.convex.dev/auth for up to date instructions.\",\n  });\n});\n\nconst add = new Command(\"add\")\n  .addOption(new Option(\"--identity-provider-url <url>\").hideHelp())\n  .addOption(new Option(\"--application-id <applicationId>\").hideHelp())\n  .action(async () => {\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n    await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      errForSentry: \"Ran deprecated `convex auth add`\",\n      printedMessage:\n        \"convex auth commands were removed, see https://docs.convex.dev/auth for up to date instructions.\",\n    });\n  });\n\nexport const auth = new Command(\"auth\")\n  .addCommand(list)\n  .addCommand(rm)\n  .addCommand(add);\n", "import { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { runCodegen } from \"./lib/components.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport {\n  DetailedDeploymentCredentials,\n  loadSelectedDeploymentCredentials,\n} from \"./lib/api.js\";\nimport { withRunningBackend } from \"./lib/localDeployment/run.js\";\nexport const codegen = new Command(\"codegen\")\n  .summary(\"Generate backend type definitions\")\n  .description(\n    [\n      \"Generate code in `convex/_generated/` based on the current contents of `convex/`.\",\n      \"\",\n      \"This code is generated automatically while running `npx convex dev` and should be committed to the repo (your code won't typecheck without it!). Regenerating it explicitly is rarely needed (e.g. in CI to ensure the correct code was checked in).\",\n      \"\",\n      \"This doesn't modify the code running on the deployment.\",\n    ].join(\"\\n\"),\n  )\n  .allowExcessArguments(false)\n  .option(\n    \"--dry-run\",\n    \"Print out the generated configuration to stdout instead of writing to convex directory\",\n  )\n  .addOption(new Option(\"--debug\").hideHelp())\n  .addOption(\n    new Option(\n      \"--typecheck <mode>\",\n      `Whether to check TypeScript files with \\`tsc --noEmit\\`.`,\n    )\n      .choices([\"enable\", \"try\", \"disable\"] as const)\n      .default(\"try\" as const),\n  )\n  .option(\n    \"--init\",\n    \"Also (over-)write the default convex/README.md and convex/tsconfig.json files, otherwise only written when creating a new Convex project.\",\n  )\n  .addOption(new Option(\"--admin-key <adminKey>\").hideHelp())\n  .addOption(new Option(\"--url <url>\").hideHelp())\n  .addOption(new Option(\"--live-component-sources\").hideHelp())\n  // Experimental option\n  .addOption(\n    new Option(\n      \"--commonjs\",\n      \"Generate CommonJS modules (CJS) instead of ECMAScript modules, the default. Bundlers typically take care of this conversion while bundling, so this setting is generally only useful for projects which do not use a bundler, typically Node.js projects. Convex functions can be written with either syntax.\",\n    ).hideHelp(),\n  )\n  // Only for doing codegen on system UDFs\n  .addOption(new Option(\"--system-udfs\").hideHelp())\n  .option(\n    \"--component-dir <path>\",\n    \"Generate code for a specific component directory instead of the current application.\",\n  )\n  .action(async (options) => {\n    const ctx = await oneoffContext(options);\n    const deploymentSelection = await getDeploymentSelection(ctx, options);\n\n    const codegenOptions = {\n      dryRun: !!options.dryRun,\n      debug: !!options.debug,\n      typecheck: options.typecheck,\n      init: !!options.init,\n      commonjs: !!options.commonjs,\n      url: options.url,\n      adminKey: options.adminKey,\n      liveComponentSources: !!options.liveComponentSources,\n      debugNodeApis: false,\n      systemUdfs: !!options.systemUdfs,\n      codegenOnlyThisComponent: options.componentDir,\n    };\n\n    if (options.systemUdfs) {\n      await runCodegen(ctx, null, codegenOptions);\n      return;\n    }\n\n    // Early exit for a better error message trying to use a preview key.\n    if (deploymentSelection.kind === \"preview\") {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem data\",\n        printedMessage: `Codegen requires an existing deployment so doesn't support CONVEX_DEPLOY_KEY.\\nGenerate code in dev and commit it to the repo instead.\\nhttps://docs.convex.dev/understanding/best-practices/other-recommendations#check-generated-code-into-version-control`,\n      });\n    }\n\n    const credentials: DetailedDeploymentCredentials =\n      await loadSelectedDeploymentCredentials(ctx, deploymentSelection, {\n        ensureLocalRunning: false,\n      });\n\n    await withRunningBackend({\n      ctx,\n      deployment: {\n        deploymentUrl: credentials.url,\n        deploymentFields: credentials.deploymentFields,\n      },\n      action: async () => {\n        await runCodegen(ctx, credentials, codegenOptions);\n      },\n    });\n  });\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { chalkStderr } from \"chalk\";\nimport { ensureHasConvexDependency } from \"./lib/utils/utils.js\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { deploymentDashboardUrlPage } from \"./lib/dashboard.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { exportFromDeployment } from \"./lib/convexExport.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nexport const convexExport = new Command(\"export\")\n  .summary(\"Export data from your deployment to a ZIP file\")\n  .description(\n    [\n      \"Export data, and optionally file storage, from your Convex deployment to a ZIP file.\",\n      \"\",\n      \"\u2022 Export to a directory: `npx convex export --path dir/`\",\n      \"\u2022 Export to a ZIP file: `npx convex export --path snapshot.zip`\",\n      \"\u2022 Include file storage: `npx convex export --include-file-storage --path dir/`\",\n      \"\",\n      \"By default, this exports from your dev deployment.\",\n      \"\",\n      \"See the data export guide (https://docs.convex.dev/database/import-export/export) for details and use cases.\",\n    ].join(\"\\n\"),\n  )\n  .allowExcessArguments(false)\n  .addExportOptions()\n  .addDeploymentSelectionOptions(actionDescription(\"Export data from\"))\n  .showHelpAfterError()\n  .action(async (options) => {\n    const ctx = await oneoffContext(options);\n    await ensureHasConvexDependency(ctx, \"export\");\n\n    const deploymentSelection = await getDeploymentSelection(ctx, options);\n    const deployment = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n\n    const deploymentNotice = options.prod\n      ? ` in your ${chalkStderr.bold(\"prod\")} deployment`\n      : \"\";\n    await exportFromDeployment(ctx, {\n      ...options,\n      deploymentUrl: deployment.url,\n      adminKey: deployment.adminKey,\n      deploymentNotice,\n      snapshotExportDashboardLink: deploymentDashboardUrlPage(\n        deployment.deploymentFields?.deploymentName ?? null,\n        \"/settings/snapshots\",\n      ),\n    });\n  });\n", "import { Command, Option, OptionValues } from \"@commander-js/extra-typings\";\nimport { OneoffCtx } from \"../../bundler/context.js\";\nimport { LogMode } from \"./logs.js\";\nimport {\n  CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n  CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME,\n  CONVEX_SELF_HOSTED_URL_VAR_NAME,\n  parseInteger,\n  parsePositiveInteger,\n} from \"./utils/utils.js\";\nimport { INLINE_QUERY_DESCRIPTION } from \"./runTestFunction.js\";\n\ndeclare module \"@commander-js/extra-typings\" {\n  interface Command<Args extends any[] = [], Opts extends OptionValues = {}> {\n    /**\n     * For a command that talks to the configured dev deployment by default,\n     * add flags for talking to prod, preview, or other deployment in the same\n     * project.\n     *\n     * These flags are added to the end of `command` (ordering matters for `--help`\n     * output). `action` should look like \"Import data into\" because it is prefixed\n     * onto help strings.\n     *\n     * The options can be passed to `deploymentSelectionFromOptions`.\n     *\n     * NOTE: This method only exists at runtime if this file is imported.\n     * To help avoid this bug, this method takes in an `ActionDescription` which\n     * can only be constructed via `actionDescription` from this file.\n     *\n     * @param action - The action description\n     * @param options - Optional settings\n     * @param options.showUrlHelp - If true, show the --url option in help output\n     */\n    addDeploymentSelectionOptions(\n      action: ActionDescription,\n      options?: { showUrlHelp?: boolean },\n    ): Command<\n      Args,\n      Opts & {\n        envFile?: string;\n        url?: string;\n        adminKey?: string;\n        prod?: boolean;\n        previewName?: string;\n        deploymentName?: string;\n        deployment?: string;\n      }\n    >;\n\n    /**\n     * Adds options for the `deploy` command.\n     */\n    addDeployOptions(): Command<\n      Args,\n      Opts & {\n        verbose?: boolean;\n        dryRun?: boolean;\n        yes?: boolean;\n        typecheck: \"enable\" | \"try\" | \"disable\";\n        typecheckComponents: boolean;\n        codegen: \"enable\" | \"disable\";\n        cmd?: string;\n        cmdUrlEnvVarName?: string;\n        debugBundlePath?: string;\n        debug?: boolean;\n        writePushRequest?: string;\n        liveComponentSources?: boolean;\n      }\n    >;\n\n    /**\n     * Adds options for `self-host` subcommands.\n     */\n    addSelfHostOptions(): Command<\n      Args,\n      Opts & {\n        url?: string;\n        adminKey?: string;\n        env?: string;\n      }\n    >;\n\n    /**\n     * Adds options and arguments for the `run` command.\n     */\n    addRunOptions(): Command<\n      [...Args, string | undefined, string | undefined],\n      Opts & {\n        watch?: boolean;\n        push?: boolean;\n        identity?: string;\n        inlineQuery?: string;\n        typecheck: \"enable\" | \"try\" | \"disable\";\n        typecheckComponents: boolean;\n        codegen: \"enable\" | \"disable\";\n        component?: string;\n        liveComponentSources?: boolean;\n      }\n    >;\n\n    /**\n     * Adds options for the `import` command.\n     */\n    addImportOptions(): Command<\n      [...Args, string],\n      Opts & {\n        table?: string;\n        format?: \"csv\" | \"jsonLines\" | \"jsonArray\" | \"zip\";\n        replace?: boolean;\n        append?: boolean;\n        replaceAll?: boolean;\n        yes?: boolean;\n        component?: string;\n      }\n    >;\n\n    /**\n     * Adds options for the `export` command.\n     */\n    addExportOptions(): Command<\n      Args,\n      Opts & {\n        path: string;\n        includeFileStorage?: boolean;\n      }\n    >;\n\n    /**\n     * Adds options for the `data` command.\n     */\n    addDataOptions(): Command<\n      [...Args, string | undefined],\n      Opts & {\n        limit: number;\n        order: \"asc\" | \"desc\";\n        component?: string;\n        format?: \"json\" | \"jsonArray\" | \"jsonLines\" | \"jsonl\" | \"pretty\";\n      }\n    >;\n\n    /**\n     * Adds options for the `logs` command.\n     */\n    addLogsOptions(): Command<\n      Args,\n      Opts & {\n        history: number;\n        success: boolean;\n        jsonl: boolean;\n        tail?: number | boolean;\n      }\n    >;\n\n    /**\n     * Adds options for the `network-test` command.\n     */\n    addNetworkTestOptions(): Command<\n      Args,\n      Opts & {\n        timeout?: string;\n        ipFamily?: string;\n        speedTest?: boolean;\n      }\n    >;\n  }\n}\n\nCommand.prototype.addDeploymentSelectionOptions = function (\n  action: ActionDescription,\n  options?: { showUrlHelp?: boolean },\n) {\n  const urlOption = new Option(\n    \"--url <url>\",\n    options?.showUrlHelp\n      ? action + \" the deployment at the given URL.\"\n      : undefined,\n  ).conflicts([\n    \"--prod\",\n    \"--preview-name\",\n    \"--deployment-name\",\n    \"--deployment\",\n  ]);\n  if (!options?.showUrlHelp) {\n    urlOption.hideHelp();\n  }\n  return this.addOption(urlOption)\n    .addOption(new Option(\"--admin-key <adminKey>\").hideHelp())\n    .addOption(\n      new Option(\n        \"--prod\",\n        action + \" this project's default production deployment.\",\n      ).conflicts([\n        \"--preview-name\",\n        \"--deployment-name\",\n        \"--url\",\n        \"--deployment\",\n      ]),\n    )\n    .addOption(\n      new Option(\n        \"--preview-name <previewName>\",\n        action + \" the preview deployment with the given name.\",\n      )\n        .conflicts([\"--prod\", \"--deployment-name\", \"--url\", \"--deployment\"])\n        .hideHelp(),\n    )\n    .addOption(\n      new Option(\n        \"--deployment-name <deploymentName>\",\n        action + \" the specified deployment.\",\n      )\n        .conflicts([\"--prod\", \"--preview-name\", \"--url\", \"--deployment\"])\n        .hideHelp(),\n    )\n    .addOption(\n      new Option(\n        \"--deployment <deployment>\",\n        action +\n          \" a specific deployment. Accepts:\\n\" +\n          \"\u2022 a deployment name (e.g. joyful-capybara-123)\\n\" +\n          \"\u2022 a deployment reference (e.g. dev/james, staging)\\n\" +\n          \"\u2022 `dev` (for your personal dev deployment)\\n\" +\n          \"\u2022 `prod` (for your project\u2019s default production deployment)\\n\" +\n          \"\u2022 `local` (for your local dev deployment).\" +\n          \"\\nYou can also select deployments in other projects with `project-slug:reference` or `team-slug:project-slug:reference`.\",\n      ).conflicts([\"--prod\", \"--preview-name\", \"--deployment-name\", \"--url\"]),\n    )\n    .addOption(\n      new Option(\n        \"--env-file <envFile>\",\n        `Path to a custom file of environment variables, for choosing the \\\ndeployment, e.g. ${CONVEX_DEPLOYMENT_ENV_VAR_NAME} or ${CONVEX_SELF_HOSTED_URL_VAR_NAME}. \\\nSame format as .env.local or .env files, and overrides them.`,\n      ).hideHelp(),\n    ) as any;\n};\n\ndeclare const tag: unique symbol;\ntype ActionDescription = string & { readonly [tag]: \"noop\" };\nexport function actionDescription(action: string): ActionDescription {\n  return action as any;\n}\n\nexport async function normalizeDevOptions(\n  ctx: OneoffCtx,\n  cmdOptions: {\n    verbose?: boolean;\n    typecheck: \"enable\" | \"try\" | \"disable\";\n    typecheckComponents?: boolean;\n    codegen: \"enable\" | \"disable\";\n    once?: boolean;\n    untilSuccess: boolean;\n    start?: string;\n    runSh?: string;\n    run?: string | undefined;\n    runComponent?: string;\n    tailLogs?: string | true;\n    traceEvents: boolean;\n    debugBundlePath?: string | undefined;\n    debugNodeApis?: boolean;\n    liveComponentSources?: boolean;\n    pushAllModules?: boolean;\n    allowUnstagingSchema?: boolean;\n    while?: string;\n  },\n): Promise<{\n  verbose: boolean;\n  typecheck: \"enable\" | \"try\" | \"disable\";\n  typecheckComponents: boolean;\n  codegen: boolean;\n  once: boolean;\n  untilSuccess: boolean;\n  run?:\n    | { kind: \"function\"; name: string; component?: string | undefined }\n    | { kind: \"shell\"; command: string }\n    | undefined;\n  tailLogs: LogMode;\n  traceEvents: boolean;\n  debugBundlePath?: string | undefined;\n  debugNodeApis: boolean;\n  liveComponentSources: boolean;\n  pushAllModules: boolean;\n  allowUnstagingSchema: boolean;\n}> {\n  if (cmdOptions.runComponent && !cmdOptions.run) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"Can't specify `--run-component` option without `--run`\",\n    });\n  }\n\n  if (cmdOptions.debugBundlePath !== undefined && !cmdOptions.once) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"`--debug-bundle-path` can only be used with `--once`.\",\n    });\n  }\n  if (cmdOptions.debugNodeApis && !cmdOptions.once) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"`--debug-node-apis` can only be used with `--once`.\",\n    });\n  }\n\n  return {\n    verbose: !!cmdOptions.verbose,\n    typecheck: cmdOptions.typecheck,\n    typecheckComponents: !!cmdOptions.typecheckComponents,\n    codegen: cmdOptions.codegen === \"enable\",\n    once: !!cmdOptions.once,\n    untilSuccess: cmdOptions.untilSuccess,\n    run:\n      cmdOptions.run !== undefined\n        ? {\n            kind: \"function\",\n            name: cmdOptions.run,\n            component: cmdOptions.runComponent,\n          }\n        : (cmdOptions.start ?? cmdOptions.runSh) !== undefined\n          ? {\n              kind: \"shell\",\n              command: (cmdOptions.start ?? cmdOptions.runSh)!,\n            }\n          : undefined,\n    tailLogs:\n      typeof cmdOptions.tailLogs === \"string\"\n        ? (cmdOptions.tailLogs as LogMode)\n        : \"pause-on-deploy\",\n    traceEvents: cmdOptions.traceEvents,\n    debugBundlePath: cmdOptions.debugBundlePath,\n    debugNodeApis: !!cmdOptions.debugNodeApis,\n    liveComponentSources: !!cmdOptions.liveComponentSources,\n    pushAllModules: !!cmdOptions.pushAllModules,\n    allowUnstagingSchema: !!cmdOptions.allowUnstagingSchema,\n  };\n}\n\nCommand.prototype.addDeployOptions = function () {\n  return this.option(\"-v, --verbose\", \"Show full listing of changes\")\n    .option(\n      \"--dry-run\",\n      \"Print out the generated configuration without deploying to your Convex deployment\",\n    )\n    .addOption(\n      new Option(\n        \"-y, --yes\",\n        \"Skip confirmation prompt when running interactively. Warning: this deploys to PRODUCTION. To deploy to your current dev environment, run npx convex dev --once\",\n      ).hideHelp(),\n    )\n    .addOption(\n      new Option(\n        \"--typecheck <mode>\",\n        `Whether to check TypeScript files with \\`tsc --noEmit\\` before deploying.`,\n      )\n        .choices([\"enable\", \"try\", \"disable\"] as const)\n        .default(\"try\" as const),\n    )\n    .option(\n      \"--typecheck-components\",\n      \"Check TypeScript files within component implementations with `tsc --noEmit`.\",\n      false,\n    )\n    .addOption(\n      new Option(\n        \"--codegen <mode>\",\n        \"Whether to regenerate code in `convex/_generated/` before pushing.\",\n      )\n        .choices([\"enable\", \"disable\"] as const)\n        .default(\"enable\" as const),\n    )\n    .addOption(\n      new Option(\n        \"--cmd <command>\",\n        \"Command to run as part of deploying your app (e.g. `vite build`). This command can depend on the environment variables specified in `--cmd-url-env-var-name` being set.\",\n      ),\n    )\n    .addOption(\n      new Option(\n        \"--cmd-url-env-var-name <name>\",\n        \"Environment variable name to set Convex deployment URL (e.g. `VITE_CONVEX_URL`) when using `--cmd`\",\n      ),\n    )\n    .addOption(new Option(\"--debug-bundle-path <path>\").hideHelp())\n    .addOption(new Option(\"--debug\").hideHelp())\n    .addOption(new Option(\"--write-push-request <writePushRequest>\").hideHelp())\n    .addOption(new Option(\"--live-component-sources\").hideHelp())\n    .addOption(\n      new Option(\n        \"--push-all-modules\",\n        \"Push all modules without checking for unchanged module hashes from the server\",\n      )\n        .default(false)\n        .hideHelp(),\n    );\n};\n\nCommand.prototype.addSelfHostOptions = function () {\n  return this.option(\n    \"--admin-key <adminKey>\",\n    `An admin key for the deployment. Can alternatively be set as \\`${CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME}\\` environment variable.`,\n  )\n    .option(\n      \"--url <url>\",\n      `The url of the deployment. Can alternatively be set as \\`${CONVEX_SELF_HOSTED_URL_VAR_NAME}\\` environment variable.`,\n    )\n    .option(\n      \"--env <env>\",\n      `Path to a custom file of environment variables, containing \\`${CONVEX_SELF_HOSTED_URL_VAR_NAME}\\` and \\`${CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME}\\`.`,\n    );\n};\n\nCommand.prototype.addRunOptions = function () {\n  return (\n    this.argument(\n      \"[functionName]\",\n      \"identifier of the function to run, like `listMessages` or `dir/file:myFunction`\",\n    )\n      .argument(\n        \"[args]\",\n        \"JSON-formatted arguments object to pass to the function.\",\n      )\n      .option(\n        \"-w, --watch\",\n        \"Watch a query, printing its result if the underlying data changes. Given function must be a query.\",\n      )\n      .addOption(\n        new Option(\n          \"--inline-query <query>\",\n          INLINE_QUERY_DESCRIPTION,\n        ).conflicts(\"--watch\"),\n      )\n      .option(\"--push\", \"Push code to deployment before running the function.\")\n      .addOption(\n        new Option(\n          \"--identity <identity>\",\n          'JSON-formatted UserIdentity object, e.g. \\'{ name: \"John\", address: \"0x123\" }\\'',\n        ),\n      )\n      // For backwards compatibility we still support --no-push which is a noop\n      .addOption(new Option(\"--no-push\").hideHelp())\n      // Options for the deploy that --push does\n      .addOption(\n        new Option(\n          \"--typecheck <mode>\",\n          `Whether to check TypeScript files with \\`tsc --noEmit\\`.`,\n        )\n          .choices([\"enable\", \"try\", \"disable\"] as const)\n          .default(\"try\" as const),\n      )\n      .option(\n        \"--typecheck-components\",\n        \"Check TypeScript files within component implementations with `tsc --noEmit`.\",\n        false,\n      )\n      .addOption(\n        new Option(\n          \"--codegen <mode>\",\n          \"Regenerate code in `convex/_generated/`\",\n        )\n          .choices([\"enable\", \"disable\"] as const)\n          .default(\"enable\" as const),\n      )\n      .addOption(\n        new Option(\n          \"--component <path>\",\n          'Path to the component (e.g. \"workflow\" or \"workflow/workpool\")',\n        ),\n      )\n      .addOption(new Option(\"--live-component-sources\").hideHelp())\n  );\n};\n\nCommand.prototype.addImportOptions = function () {\n  return this.argument(\"<path>\", \"Path to the input file\")\n    .addOption(\n      new Option(\n        \"--table <table>\",\n        \"Destination table name. Required if format is csv, jsonLines, or jsonArray. Not supported if format is zip.\",\n      ),\n    )\n    .addOption(\n      new Option(\n        \"--replace\",\n        \"Replace all existing data in any of the imported tables\",\n      )\n        .conflicts(\"--append\")\n        .conflicts(\"--replace-all\"),\n    )\n    .addOption(\n      new Option(\"--append\", \"Append imported data to any existing tables\")\n        .conflicts(\"--replace-all\")\n        .conflicts(\"--replace\"),\n    )\n    .addOption(\n      new Option(\n        \"--replace-all\",\n        \"Replace all existing data in the deployment with the imported tables,\\n\" +\n          \"deleting tables that don't appear in the import file or the schema,\\n\" +\n          \"and clearing tables that appear in the schema but not in the import file\",\n      )\n        .conflicts(\"--append\")\n        .conflicts(\"--replace\"),\n    )\n    .option(\n      \"-y, --yes\",\n      \"Skip confirmation prompt when import leads to deleting existing documents\",\n    )\n    .addOption(\n      new Option(\n        \"--format <format>\",\n        \"Input file format. This flag is only required if the filename is missing an extension.\\n\" +\n          \"- CSV files must have a header, and each row's entries are interpreted either as a (floating point) number or a string.\\n\" +\n          \"- JSON files must be an array of JSON objects.\\n\" +\n          \"- JSONLines files must have a JSON object per line.\\n\" +\n          \"- ZIP files must have one directory per table, containing <table>/documents.jsonl. Snapshot exports from the Convex dashboard have this format.\",\n      ).choices([\"csv\", \"jsonLines\", \"jsonArray\", \"zip\"]),\n    )\n    .addOption(\n      new Option(\n        \"--component <path>\",\n        'Path to the component (e.g. \"workflow\" or \"workflow/workpool\")',\n      ),\n    );\n};\n\nCommand.prototype.addExportOptions = function () {\n  return this.requiredOption(\n    \"--path <zipFilePath>\",\n    \"Exports data into a ZIP file at this path, which may be a directory or unoccupied .zip path\",\n  ).addOption(\n    new Option(\n      \"--include-file-storage\",\n      \"Includes stored files (https://dashboard.convex.dev/deployment/files) in a _storage folder within the ZIP file\",\n    ),\n  );\n};\n\nCommand.prototype.addDataOptions = function () {\n  return this.addOption(\n    new Option(\n      \"--limit <n>\",\n      \"List only the `n` the most recently created documents.\",\n    )\n      .default(100)\n      .argParser(parsePositiveInteger),\n  )\n    .addOption(\n      new Option(\n        \"--order <choice>\",\n        \"Order the documents by their `_creationTime`.\",\n      )\n        .choices([\"asc\", \"desc\"])\n        .default(\"desc\"),\n    )\n    .addOption(\n      new Option(\n        \"--component <path>\",\n        'Path to the component (e.g. \"workflow\" or \"workflow/workpool\")',\n      ),\n    )\n    .addOption(\n      new Option(\n        \"--format <format>\",\n        \"Format to print the data in. This flag is only required if the filename is missing an extension.\\n\" +\n          \"- jsonArray (aka json): print the data as a JSON array of objects.\\n\" +\n          \"- jsonLines (aka jsonl): print the data as a JSON object per line.\\n\" +\n          \"- pretty: print the data in a human-readable format.\",\n      ).choices([\"jsonArray\", \"json\", \"jsonLines\", \"jsonl\", \"pretty\"]),\n    )\n    .argument(\"[table]\", \"If specified, list documents in this table.\");\n};\n\nCommand.prototype.addLogsOptions = function () {\n  return this.option(\n    \"--history [n]\",\n    \"Show `n` most recent logs. Defaults to showing all available logs.\",\n    parseInteger,\n  )\n    .option(\n      \"--success\",\n      \"Print a log line for every successful function execution\",\n      false,\n    )\n    .option(\"--jsonl\", \"Output raw log events as JSONL\", false)\n    .addOption(\n      new Option(\n        \"--tail [n]\",\n        \"Deprecated/unnecessary: `convex logs` already tails by default. Accepted as an alias for --history for compatibility with agents that pass it.\",\n      )\n        .argParser(parseInteger)\n        .hideHelp(),\n    );\n};\n\nCommand.prototype.addNetworkTestOptions = function () {\n  return this.addOption(\n    new Option(\n      \"--timeout <timeout>\",\n      \"Timeout in seconds for the network test (default: 30).\",\n    ),\n  )\n    .addOption(\n      new Option(\n        \"--ip-family <ipFamily>\",\n        \"IP family to use (ipv4, ipv6, or auto)\",\n      ),\n    )\n    .addOption(\n      new Option(\n        \"--speed-test\",\n        \"Perform a large echo test to measure network speed.\",\n      ),\n    );\n};\n", "import type { Context } from \"../../bundler/context.js\";\nimport { deploymentFetch } from \"./utils/utils.js\";\n\nconst QUERY_MODULE_PREAMBLE =\n  'import { query, internalQuery } from \"convex:/_system/repl/wrappers.js\";';\n\n/** Shared help text for the query/module string (CLI argument + MCP input). */\nexport const RUN_ONEOFF_QUERY_SOURCE_DESCRIPTION =\n  'JavaScript module source for a single file (testQuery.js) that exports a default readonly query, for example: export default query({ handler: async (ctx) => ({ count: (await ctx.db.query(\"messages\").take(10)).length }) });';\n\nexport const INLINE_QUERY_DESCRIPTION = [\n  \"JavaScript to evaluate as a readonly query. The query is completely sandboxed, so it can only read data and cannot modify the database or access the network.\",\n  \"\",\n  \"This is a one-shot query and cannot be combined with `--watch`.\",\n  \"Use `--component` to target a mounted component.\",\n  \"\",\n  \"To format the query:\",\n  '\u2022 Simple expressions are returned automatically, for example: `await ctx.db.query(\"messages\").take(5)`.',\n  '\u2022 For multi-statement queries, use an explicit return, for example: `const firstMessage = await ctx.db.query(\"messages\").first(); console.log(firstMessage?._id); return firstMessage;`.',\n  '\u2022 For full control, pass a module source that exports a default query, for example: `export default query({ handler: async (ctx) => { return await ctx.db.query(\"messages\").take(10); } })`.',\n].join(\"\\n\");\n\nexport type RunTestFunctionQuerySuccess = {\n  kind: \"success\";\n  value: unknown;\n  logLines: string[];\n};\n\nexport type RunTestFunctionQueryApplicationFailure = {\n  kind: \"applicationFailure\";\n  payload: unknown;\n};\n\nexport type RunTestFunctionQueryResult =\n  | RunTestFunctionQuerySuccess\n  | RunTestFunctionQueryApplicationFailure;\n\nexport function inlineQueryToQuerySource(inlineQuery: string) {\n  const trimmedQuery = inlineQuery.trim();\n  if (looksLikeQueryModuleSource(trimmedQuery)) {\n    return injectQueryModulePreamble(trimmedQuery);\n  }\n\n  const queryBody = inlineQueryBody(trimmedQuery);\n  return `${QUERY_MODULE_PREAMBLE}\n\nexport default query({\n  handler: async (ctx) => {\n${indent(queryBody, 4)}\n  },\n});`;\n}\n\n/**\n * POST /api/run_test_function with the same body shape as the dashboard and MCP.\n * Uses deploymentFetch for Convex-Client, auth headers, retries, and error typing.\n * On HTTP failure, throws ThrowingFetchError (from deploymentFetch).\n */\nexport async function runTestFunctionQuery(\n  ctx: Context,\n  args: {\n    deploymentUrl: string;\n    adminKey: string;\n    querySource: string;\n    componentId?: string;\n  },\n): Promise<RunTestFunctionQueryResult> {\n  const fetchDeployment = deploymentFetch(ctx, {\n    deploymentUrl: args.deploymentUrl,\n    adminKey: args.adminKey,\n  });\n  const response = await fetchDeployment(\"/api/run_test_function\", {\n    method: \"POST\",\n    body: JSON.stringify({\n      adminKey: args.adminKey,\n      args: {},\n      bundle: {\n        path: \"testQuery.js\",\n        source: args.querySource,\n      },\n      format: \"convex_encoded_json\",\n      ...(args.componentId !== undefined\n        ? { componentId: args.componentId }\n        : {}),\n    }),\n  });\n  const result: unknown = await response.json();\n  if (\n    typeof result !== \"object\" ||\n    result === null ||\n    !(\"status\" in result) ||\n    (result as { status: string }).status !== \"success\"\n  ) {\n    return { kind: \"applicationFailure\", payload: result };\n  }\n  const ok = result as {\n    status: \"success\";\n    value: unknown;\n    logLines?: string[];\n  };\n  return {\n    kind: \"success\",\n    value: ok.value,\n    logLines: ok.logLines ?? [],\n  };\n}\n\nfunction looksLikeQueryModuleSource(querySource: string) {\n  if (!querySource.includes(\"export default\")) return false;\n  return /\\b(?:query|internalQuery)\\s*\\(/.test(querySource);\n}\n\nfunction injectQueryModulePreamble(querySource: string) {\n  if (querySource.includes(\"convex:/_system/repl/wrappers.js\"))\n    return querySource;\n  return `${QUERY_MODULE_PREAMBLE}\n\n${querySource}`;\n}\n\nfunction inlineQueryBody(inlineQuery: string) {\n  const trimmed = inlineQuery.trim();\n  if (!isExpression(trimmed)) return trimmed;\n  return `return (${trimmed.replace(/;$/, \"\")});`;\n}\n\nfunction isExpression(inlineQuery: string) {\n  if (inlineQuery.includes(\"\\n\")) return false;\n  return !/^(const|let|var|if|for|while|switch|try|throw|return)\\b/.test(\n    inlineQuery,\n  );\n}\n\nfunction indent(text: string, spaces: number) {\n  const prefix = \" \".repeat(spaces);\n  return text\n    .split(\"\\n\")\n    .map((line) => `${prefix}${line}`)\n    .join(\"\\n\");\n}\n", "import { chalkStderr } from \"chalk\";\nimport {\n  waitUntilCalled,\n  deploymentFetch,\n  logAndHandleFetchError,\n  ThrowingFetchError,\n} from \"./utils/utils.js\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n  logFailure,\n  showSpinner,\n  logFinishedStep,\n  logError,\n  stopSpinner,\n  changeSpinner,\n  failExistingSpinner,\n} from \"../../bundler/log.js\";\nimport { subscribe } from \"./run.js\";\nimport { nodeFs } from \"../../bundler/fs.js\";\nimport path from \"path\";\nimport { Readable } from \"stream\";\nimport { stringifyValueForError } from \"../../values/value.js\";\n\nexport async function exportFromDeployment(\n  ctx: Context,\n  options: {\n    deploymentUrl: string;\n    adminKey: string;\n    path: string;\n    includeFileStorage?: boolean;\n    deploymentNotice: string;\n    snapshotExportDashboardLink: string | undefined;\n  },\n) {\n  const includeStorage = !!options.includeFileStorage;\n  const {\n    deploymentUrl,\n    adminKey,\n    path: inputPath,\n    deploymentNotice,\n    snapshotExportDashboardLink,\n  } = options;\n\n  showSpinner(`Creating snapshot export${deploymentNotice}`);\n\n  const snapshotExportState = await startSnapshotExport(ctx, {\n    includeStorage,\n    inputPath,\n    adminKey,\n    deploymentUrl,\n    snapshotExportDashboardLink,\n  });\n\n  switch (snapshotExportState.state) {\n    case \"completed\":\n      stopSpinner();\n      logFinishedStep(\n        `Created snapshot export at timestamp ${snapshotExportState.start_ts}`,\n      );\n      if (snapshotExportDashboardLink !== undefined) {\n        logFinishedStep(\n          `Export is available at ${snapshotExportDashboardLink}`,\n        );\n      }\n      break;\n    case \"requested\":\n    case \"in_progress\": {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `WARNING: Export is continuing to run on the server.`,\n      });\n    }\n    case \"failed\": {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Export failed. Please try again later or contact support@convex.dev for help.`,\n      });\n    }\n    default: {\n      snapshotExportState satisfies never;\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `unknown error: unexpected state ${stringifyValueForError(snapshotExportState as any)}`,\n        errForSentry: `unexpected snapshot export state ${(snapshotExportState as any).state}`,\n      });\n    }\n  }\n\n  showSpinner(`Downloading snapshot export to ${chalkStderr.bold(inputPath)}`);\n  const { filePath } = await downloadSnapshotExport(ctx, {\n    snapshotExportTs: snapshotExportState.start_ts,\n    inputPath,\n    adminKey,\n    deploymentUrl,\n  });\n  stopSpinner();\n  logFinishedStep(\n    `Downloaded snapshot export to ${chalkStderr.bold(filePath)}`,\n  );\n}\n\ntype SnapshotExportState =\n  | { state: \"requested\" }\n  | { state: \"in_progress\" }\n  | { state: \"failed\" }\n  | {\n      state: \"completed\";\n      complete_ts: bigint;\n      start_ts: bigint;\n      zip_object_key: string;\n    };\n\nasync function waitForStableExportState(\n  ctx: Context,\n  deploymentUrl: string,\n  adminKey: string,\n): Promise<SnapshotExportState> {\n  const [donePromise, onDone] = waitUntilCalled();\n  let snapshotExportState: SnapshotExportState;\n  await subscribe(ctx, {\n    deploymentUrl,\n    adminKey,\n    parsedFunctionName: \"_system/cli/exports:getLatest\",\n    parsedFunctionArgs: {},\n    componentPath: undefined,\n    until: donePromise,\n    callbacks: {\n      onChange: (value: any) => {\n        // NOTE: `value` would only be `null` if there has never been an export\n        // requested.\n        snapshotExportState = value;\n        switch (snapshotExportState.state) {\n          case \"requested\":\n          case \"in_progress\":\n            // Not a stable state.\n            break;\n          case \"completed\":\n          case \"failed\":\n            onDone();\n            break;\n          default: {\n            snapshotExportState satisfies never;\n            onDone();\n          }\n        }\n      },\n    },\n  });\n  return snapshotExportState!;\n}\n\nexport async function startSnapshotExport(\n  ctx: Context,\n  args: {\n    includeStorage: boolean;\n    inputPath: string;\n    adminKey: string;\n    deploymentUrl: string;\n    snapshotExportDashboardLink?: string | undefined;\n  },\n) {\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl: args.deploymentUrl,\n    adminKey: args.adminKey,\n  });\n  try {\n    await fetch(\n      `/api/export/request/zip?includeStorage=${args.includeStorage}`,\n      {\n        method: \"POST\",\n      },\n    );\n  } catch (e) {\n    if (\n      e instanceof ThrowingFetchError &&\n      e.serverErrorData?.code === \"ExportInProgress\"\n    ) {\n      failExistingSpinner();\n      const progressAdvice =\n        args.snapshotExportDashboardLink === undefined\n          ? \"\"\n          : `\\nCheck its progress at ${args.snapshotExportDashboardLink}`;\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"A snapshot export is already requested or in progress. Only one can run at a time, so wait for it to finish and try again.\" +\n          progressAdvice,\n      });\n    }\n    return await logAndHandleFetchError(ctx, e);\n  }\n\n  const snapshotExportState = await waitForStableExportState(\n    ctx,\n    args.deploymentUrl,\n    args.adminKey,\n  );\n  return snapshotExportState;\n}\n\nexport async function downloadSnapshotExport(\n  ctx: Context,\n  args: {\n    snapshotExportTs: bigint;\n    inputPath: string;\n    adminKey: string;\n    deploymentUrl: string;\n  },\n): Promise<{ filePath: string }> {\n  const inputPath = args.inputPath;\n  const exportUrl = `/api/export/zip/${args.snapshotExportTs.toString()}`;\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl: args.deploymentUrl,\n    adminKey: args.adminKey,\n  });\n  let response: Response;\n  try {\n    response = await fetch(exportUrl, {\n      method: \"GET\",\n    });\n  } catch (e) {\n    return await logAndHandleFetchError(ctx, e);\n  }\n\n  let filePath;\n  if (ctx.fs.exists(inputPath)) {\n    const st = ctx.fs.stat(inputPath);\n    if (st.isDirectory()) {\n      const contentDisposition =\n        response.headers.get(\"content-disposition\") ?? \"\";\n      let filename = `snapshot_${args.snapshotExportTs.toString()}.zip`;\n      if (contentDisposition.startsWith(\"attachment; filename=\")) {\n        filename = contentDisposition.slice(\"attachment; filename=\".length);\n      }\n      filePath = path.join(inputPath, filename);\n    } else {\n      // TODO(sarah) -- if this is called elsewhere, I'd like to catch the error + potentially\n      // have different logging\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem data\",\n        printedMessage: `Error: Path ${chalkStderr.bold(inputPath)} already exists.`,\n      });\n    }\n  } else {\n    filePath = inputPath;\n  }\n  changeSpinner(`Downloading snapshot export to ${chalkStderr.bold(filePath)}`);\n\n  try {\n    await nodeFs.writeFileStream(\n      filePath,\n      Readable.fromWeb(response.body! as any),\n    );\n  } catch (e) {\n    logFailure(`Exporting data failed`);\n    logError(chalkStderr.red(e));\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Exporting data failed: ${chalkStderr.red(e)}`,\n    });\n  }\n  return { filePath };\n}\n", "import { chalkStderr } from \"chalk\";\nimport { ensureHasConvexDependency } from \"./lib/utils/utils.js\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { Command } from \"@commander-js/extra-typings\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { DASHBOARD_HOST, deploymentDashboardUrlPage } from \"./lib/dashboard.js\";\nimport { importIntoDeployment } from \"./lib/convexImport.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\n\nexport const convexImport = new Command(\"import\")\n  .summary(\"Import data from a file to your deployment\")\n  .description(\n    [\n      \"Import data from a file to your Convex deployment.\",\n      \"\",\n      \"\u2022 From a snapshot: `npx convex import snapshot.zip`\",\n      \"\u2022 For a single table: `npx convex import --table tableName file.json`\",\n      \"\",\n      \"By default, this imports into your dev deployment.\",\n      \"\",\n      \"See the data import guide (https://docs.convex.dev/database/import-export/import) for details and use cases.\",\n    ].join(\"\\n\"),\n  )\n  .allowExcessArguments(false)\n  .addImportOptions()\n  .addDeploymentSelectionOptions(actionDescription(\"Import data into\"))\n  .showHelpAfterError()\n  .action(async (filePath, options) => {\n    const ctx = await oneoffContext(options);\n\n    await ensureHasConvexDependency(ctx, \"import\");\n\n    const deploymentSelection = await getDeploymentSelection(ctx, options);\n    const deployment = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n\n    const deploymentNotice = options.prod\n      ? ` in your ${chalkStderr.bold(\"prod\")} deployment`\n      : \"\";\n\n    await importIntoDeployment(ctx, filePath, {\n      ...options,\n      deploymentUrl: deployment.url,\n      adminKey: deployment.adminKey,\n      deploymentNotice,\n      snapshotImportDashboardLink: snapshotImportDashboardLink(\n        deployment.deploymentFields?.deploymentName ?? null,\n      ),\n    });\n  });\n\nfunction snapshotImportDashboardLink(deploymentName: string | null) {\n  return deploymentName === null\n    ? `${DASHBOARD_HOST}/deployment/settings/snapshots`\n    : deploymentDashboardUrlPage(deploymentName, \"/settings/snapshots\");\n}\n", "import { chalkStderr } from \"chalk\";\nimport {\n  formatSize,\n  waitUntilCalled,\n  deploymentFetch,\n  logAndHandleFetchError,\n} from \"./utils/utils.js\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n  logFailure,\n  showSpinner,\n  logFinishedStep,\n  logWarning,\n  logMessage,\n  stopSpinner,\n  changeSpinner,\n} from \"../../bundler/log.js\";\nimport path from \"path\";\nimport { subscribe } from \"./run.js\";\nimport { ConvexHttpClient } from \"../../browser/http_client.js\";\nimport { makeFunctionReference } from \"../../server/index.js\";\nimport { promptYesNo } from \"./utils/prompts.js\";\n\n// Backend has minimum chunk size of 5MiB except for the last chunk,\n// so we use 5MiB as highWaterMark which makes fs.ReadStream[asyncIterator]\n// output 5MiB chunks before the last one. This value can be overridden by\n// setting `CONVEX_IMPORT_CHUNK_SIZE` (bytes) in the environment.\nconst DEFAULT_CHUNK_SIZE = 5 * 1024 * 1024;\nconst ENV_CHUNK_SIZE = process.env.CONVEX_IMPORT_CHUNK_SIZE\n  ? parseInt(process.env.CONVEX_IMPORT_CHUNK_SIZE, 10)\n  : undefined;\n\nexport async function importIntoDeployment(\n  ctx: Context,\n  filePath: string,\n  options: {\n    deploymentUrl: string;\n    adminKey: string;\n    deploymentNotice: string;\n    snapshotImportDashboardLink: string | undefined;\n    table?: string;\n    format?: \"csv\" | \"jsonLines\" | \"jsonArray\" | \"zip\";\n    replace?: boolean;\n    append?: boolean;\n    replaceAll?: boolean;\n    yes?: boolean;\n    component?: string;\n  },\n) {\n  if (!ctx.fs.exists(filePath)) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      printedMessage: `Error: Path ${chalkStderr.bold(filePath)} does not exist.`,\n    });\n  }\n\n  const format = await determineFormat(ctx, filePath, options.format ?? null);\n  const tableName = options.table ?? null;\n  if (tableName === null) {\n    if (format !== \"zip\") {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Error: The \\`--table\\` option is required for format ${format}`,\n      });\n    }\n  } else {\n    if (format === \"zip\") {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Error: The \\`--table\\` option is not allowed for format ${format}`,\n      });\n    }\n  }\n\n  const convexClient = new ConvexHttpClient(options.deploymentUrl);\n  convexClient.setAdminAuth(options.adminKey);\n  const existingImports = await convexClient.query(\n    makeFunctionReference<\"query\", Record<string, never>, Array<unknown>>(\n      \"_system/cli/queryImport:list\",\n    ),\n    {},\n  );\n  const ongoingImports = existingImports.filter(\n    (i) => (i as any).state.state === \"in_progress\",\n  );\n  if (ongoingImports.length > 0) {\n    await askToConfirmImportWithExistingImports(\n      ctx,\n      options.snapshotImportDashboardLink,\n      options.yes,\n    );\n  }\n\n  const fileStats = ctx.fs.stat(filePath);\n  showSpinner(`Importing ${filePath} (${formatSize(fileStats.size)})`);\n\n  let mode = \"requireEmpty\";\n  if (options.append) {\n    mode = \"append\";\n  } else if (options.replace) {\n    mode = \"replace\";\n  } else if (options.replaceAll) {\n    mode = \"replaceAll\";\n  }\n  const importArgs = {\n    tableName: tableName === null ? undefined : tableName,\n    componentPath: options.component,\n    mode,\n    format,\n  };\n  const tableNotice = tableName\n    ? ` to table \"${chalkStderr.bold(tableName)}\"`\n    : \"\";\n  const onFailure = async () => {\n    logFailure(\n      `Importing data from \"${chalkStderr.bold(\n        filePath,\n      )}\"${tableNotice}${options.deploymentNotice} failed`,\n    );\n  };\n  const importId = await uploadForImport(ctx, {\n    deploymentUrl: options.deploymentUrl,\n    adminKey: options.adminKey,\n    filePath,\n    importArgs,\n    onImportFailed: onFailure,\n  });\n  changeSpinner(\"Parsing uploaded data\");\n  const onProgress = (\n    _ctx: Context,\n    state: InProgressImportState,\n    checkpointCount: number,\n  ) => {\n    stopSpinner();\n    while ((state.checkpoint_messages?.length ?? 0) > checkpointCount) {\n      logFinishedStep(state.checkpoint_messages![checkpointCount]);\n      checkpointCount += 1;\n    }\n    showSpinner(state.progress_message ?? \"Importing\");\n    return checkpointCount;\n  };\n  while (true) {\n    const snapshotImportState = await waitForStableImportState(ctx, {\n      importId,\n      deploymentUrl: options.deploymentUrl,\n      adminKey: options.adminKey,\n      onProgress,\n    });\n    switch (snapshotImportState.state) {\n      case \"completed\":\n        logFinishedStep(\n          `Added ${snapshotImportState.num_rows_written} documents${tableNotice}${options.deploymentNotice}.`,\n        );\n        return;\n      case \"failed\":\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Importing data from \"${chalkStderr.bold(\n            filePath,\n          )}\"${tableNotice}${options.deploymentNotice} failed\\n\\n${chalkStderr.red(snapshotImportState.error_message)}`,\n        });\n      case \"waiting_for_confirmation\": {\n        // Clear spinner state so we can log and prompt without clobbering lines.\n        stopSpinner();\n        await askToConfirmImport(\n          ctx,\n          snapshotImportState.message_to_confirm,\n          snapshotImportState.require_manual_confirmation,\n          options.yes,\n        );\n        showSpinner(`Importing`);\n        await confirmImport(ctx, {\n          importId,\n          adminKey: options.adminKey,\n          deploymentUrl: options.deploymentUrl,\n          onError: async () => {\n            logFailure(\n              `Importing data from \"${chalkStderr.bold(\n                filePath,\n              )}\"${tableNotice}${options.deploymentNotice} failed`,\n            );\n          },\n        });\n        // Now we have kicked off the rest of the import, go around the loop again.\n        break;\n      }\n      case \"uploaded\": {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Import canceled while parsing uploaded file`,\n        });\n      }\n      case \"in_progress\": {\n        const visitDashboardLink = options.snapshotImportDashboardLink\n          ? ` Visit ${options.snapshotImportDashboardLink} to monitor its progress.`\n          : \"\";\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `WARNING: Import is continuing to run on the server.${visitDashboardLink}`,\n        });\n      }\n      default: {\n        snapshotImportState satisfies never;\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `unknown error: unexpected state ${snapshotImportState as any}`,\n          errForSentry: `unexpected snapshot import state ${(snapshotImportState as any).state}`,\n        });\n      }\n    }\n  }\n}\n\nasync function askToConfirmImport(\n  ctx: Context,\n  messageToConfirm: string | undefined,\n  requireManualConfirmation: boolean | undefined,\n  yes: boolean | undefined,\n) {\n  if (!messageToConfirm?.length) {\n    return;\n  }\n  logMessage(messageToConfirm);\n  if (requireManualConfirmation !== false && !yes) {\n    const confirmed = await promptYesNo(ctx, {\n      message: \"Perform import?\",\n      default: true,\n    });\n    if (!confirmed) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: \"Import canceled\",\n      });\n    }\n  }\n}\n\nasync function askToConfirmImportWithExistingImports(\n  ctx: Context,\n  snapshotImportDashboardLink: string | undefined,\n  yes: boolean | undefined,\n) {\n  const atDashboardLink = snapshotImportDashboardLink\n    ? ` You can view its progress at ${snapshotImportDashboardLink}.`\n    : \"\";\n  logMessage(\n    `There is already a snapshot import in progress.${atDashboardLink}`,\n  );\n  if (yes) {\n    return;\n  }\n  const confirmed = await promptYesNo(ctx, {\n    message: \"Start another import?\",\n    default: true,\n  });\n  if (!confirmed) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"Import canceled\",\n    });\n  }\n}\n\ntype InProgressImportState = {\n  state: \"in_progress\";\n  progress_message?: string | undefined;\n  checkpoint_messages?: string[] | undefined;\n};\n\ntype SnapshotImportState =\n  | { state: \"uploaded\" }\n  | {\n      state: \"waiting_for_confirmation\";\n      message_to_confirm?: string;\n      require_manual_confirmation?: boolean;\n    }\n  | InProgressImportState\n  | { state: \"completed\"; num_rows_written: bigint }\n  | { state: \"failed\"; error_message: string };\n\nexport async function waitForStableImportState(\n  ctx: Context,\n  args: {\n    importId: string;\n    deploymentUrl: string;\n    adminKey: string;\n    onProgress: (\n      ctx: Context,\n      state: InProgressImportState,\n      checkpointCount: number,\n    ) => number;\n  },\n): Promise<SnapshotImportState> {\n  const { importId, deploymentUrl, adminKey, onProgress } = args;\n  const [donePromise, onDone] = waitUntilCalled();\n  let snapshotImportState: SnapshotImportState;\n  let checkpointCount = 0;\n  await subscribe(ctx, {\n    deploymentUrl,\n    adminKey,\n    parsedFunctionName: \"_system/cli/queryImport\",\n    parsedFunctionArgs: { importId },\n    componentPath: undefined,\n    until: donePromise,\n    callbacks: {\n      onChange: (value: any) => {\n        snapshotImportState = value.state;\n        switch (snapshotImportState.state) {\n          case \"waiting_for_confirmation\":\n          case \"completed\":\n          case \"failed\":\n            onDone();\n            break;\n          case \"uploaded\":\n            // Not a stable state. Ignore while the server continues working.\n            return;\n          case \"in_progress\":\n            // Not a stable state. Ignore while the server continues working.\n            checkpointCount = onProgress(\n              ctx,\n              snapshotImportState,\n              checkpointCount,\n            );\n            return;\n        }\n      },\n    },\n  });\n  return snapshotImportState!;\n}\n\nasync function determineFormat(\n  ctx: Context,\n  filePath: string,\n  format: string | null,\n) {\n  const fileExtension = path.extname(filePath);\n  if (fileExtension !== \"\") {\n    const formatToExtension: Record<string, string> = {\n      csv: \".csv\",\n      jsonLines: \".jsonl\",\n      jsonArray: \".json\",\n      zip: \".zip\",\n    };\n    const extensionToFormat = Object.fromEntries(\n      Object.entries(formatToExtension).map((a) => a.reverse()),\n    );\n    if (format !== null && fileExtension !== formatToExtension[format]) {\n      logWarning(\n        chalkStderr.yellow(\n          `Warning: Extension of file ${filePath} (${fileExtension}) does not match specified format: ${format} (${formatToExtension[format]}).`,\n        ),\n      );\n    }\n    format ??= extensionToFormat[fileExtension] ?? null;\n  }\n  if (format === null) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"No input file format inferred by the filename extension or specified. Specify your input file's format using the `--format` flag.\",\n    });\n  }\n  return format;\n}\n\nexport async function confirmImport(\n  ctx: Context,\n  args: {\n    importId: string;\n    adminKey: string;\n    deploymentUrl: string;\n    onError: (e: any) => Promise<void>;\n  },\n) {\n  const { importId, adminKey, deploymentUrl } = args;\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl,\n    adminKey,\n  });\n  const performUrl = `/api/perform_import`;\n  try {\n    await fetch(performUrl, {\n      method: \"POST\",\n      body: JSON.stringify({ importId }),\n    });\n  } catch (e) {\n    await args.onError(e);\n    return await logAndHandleFetchError(ctx, e);\n  }\n}\n\nexport async function uploadForImport(\n  ctx: Context,\n  args: {\n    deploymentUrl: string;\n    adminKey: string;\n    filePath: string;\n    importArgs: {\n      tableName?: string | undefined;\n      componentPath?: string | undefined;\n      mode: string;\n      format: string;\n    };\n    onImportFailed: (e: any) => Promise<void>;\n  },\n) {\n  const { deploymentUrl, adminKey, filePath } = args;\n  const fetch = deploymentFetch(ctx, {\n    deploymentUrl,\n    adminKey,\n  });\n\n  const fileStats = ctx.fs.stat(filePath);\n  // The backend rejects uploads of 10k or more parts. We use 9999 instead of\n  // 10000 so rounding errors can't push us over the limit.\n  const minChunkSize = Math.ceil(fileStats.size / 9999);\n  let chunkSize = ENV_CHUNK_SIZE ?? DEFAULT_CHUNK_SIZE;\n  if (chunkSize < minChunkSize) {\n    chunkSize = minChunkSize;\n  }\n  const data: AsyncIterable<Buffer> & {\n    bytesRead: number;\n  } = ctx.fs.createReadStream(filePath, {\n    highWaterMark: chunkSize,\n  });\n\n  showSpinner(`Importing ${filePath} (${formatSize(fileStats.size)})`);\n  let importId: string;\n  try {\n    const startResp = await fetch(\"/api/import/start_upload\", {\n      method: \"POST\",\n    });\n    const { uploadToken } = await startResp.json();\n\n    const partTokens = [];\n    let partNumber = 1;\n\n    for await (const chunk of data) {\n      // Strip BOM markers from the first chunk.\n      // Note that we don\u2019t have to worry about the BOM marker being split in multiple chunks:\n      // the chunk size is controlled by `highWaterMark`, so the first chunk will always be larger\n      // than 3 bytes (except for smaller files).\n      const chunkWithoutBom =\n        partNumber === 1 && hasBomMarker(chunk) ? chunk.subarray(3) : chunk;\n\n      const partUrl = `/api/import/upload_part?uploadToken=${encodeURIComponent(\n        uploadToken,\n      )}&partNumber=${partNumber}`;\n      const partResp = await fetch(partUrl, {\n        headers: {\n          \"Content-Type\": \"application/octet-stream\",\n        },\n        body: chunkWithoutBom,\n        method: \"POST\",\n      });\n      partTokens.push(await partResp.json());\n      partNumber += 1;\n      changeSpinner(\n        `Uploading ${filePath} (${formatSize(data.bytesRead)}/${formatSize(\n          fileStats.size,\n        )})`,\n      );\n    }\n\n    const finishResp = await fetch(\"/api/import/finish_upload\", {\n      body: JSON.stringify({\n        import: args.importArgs,\n        uploadToken,\n        partTokens,\n      }),\n      method: \"POST\",\n    });\n    const body = await finishResp.json();\n    importId = body.importId;\n  } catch (e) {\n    await args.onImportFailed(e);\n    return await logAndHandleFetchError(ctx, e);\n  }\n  return importId;\n}\n\nfunction hasBomMarker(chunk: Buffer) {\n  return (\n    chunk.length >= 3 &&\n    chunk[0] === 0xef &&\n    chunk[1] === 0xbb &&\n    chunk[2] === 0xbf\n  );\n}\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { chalkStderr } from \"chalk\";\nimport open from \"open\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { logMessage, logOutput, logWarning } from \"../bundler/log.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport { DASHBOARD_HOST, getDashboardUrl } from \"./lib/dashboard.js\";\nimport { isAnonymousDeployment } from \"./lib/deployment.js\";\n\nexport const dashboard = new Command(\"dashboard\")\n  .alias(\"dash\")\n  .description(\"Open the dashboard in the browser\")\n  .allowExcessArguments(false)\n  .option(\n    \"--no-open\",\n    \"Don't automatically open the dashboard in the default browser\",\n  )\n  .addDeploymentSelectionOptions(actionDescription(\"Open the dashboard for\"))\n  .showHelpAfterError()\n  .action(async (options) => {\n    const ctx = await oneoffContext(options);\n\n    const deploymentSelection = await getDeploymentSelection(ctx, options);\n    const deployment = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n      { ensureLocalRunning: false },\n    );\n\n    if (deployment.deploymentFields === null) {\n      const msg = `Self-hosted deployment configured.\\n\\`${chalkStderr.bold(\"npx convex dashboard\")}\\` is not supported for self-hosted deployments.\\nSee self-hosting instructions for how to self-host the dashboard.`;\n      logMessage(chalkStderr.yellow(msg));\n      return;\n    }\n    const dashboardUrl = await getDashboardUrl(\n      ctx,\n      deployment.deploymentFields,\n    );\n    if (isAnonymousDeployment(deployment.deploymentFields.deploymentName)) {\n      const warningMessage = `You are not currently running the dashboard locally. Make sure \\`npx convex dev\\` is running and try again.`;\n      if (dashboardUrl === null) {\n        logWarning(warningMessage);\n        return;\n      }\n      // The anonymous-mode dashboard is a separate local HTTP server; confirm\n      // it's actually serving by hitting its API rather than inferring from the\n      // backend.\n      if (\n        !(await isAnonymousDashboardRunning(\n          dashboardUrl,\n          deployment.deploymentFields.deploymentName,\n        ))\n      ) {\n        logWarning(warningMessage);\n        return;\n      }\n      await logOrOpenUrl(ctx, dashboardUrl, options.open);\n      return;\n    }\n\n    await logOrOpenUrl(ctx, dashboardUrl ?? DASHBOARD_HOST, options.open);\n  });\n\nasync function isAnonymousDashboardRunning(\n  dashboardUrl: string,\n  deploymentName: string,\n): Promise<boolean> {\n  try {\n    // `dashboardUrl` ends with a trailing slash.\n    const resp = await fetch(`${dashboardUrl}api/current_deployment`);\n    if (resp.status !== 200) {\n      return false;\n    }\n    // The dashboard port is stored per deployment but can be reused by a\n    // different anonymous dev session, so confirm this dashboard is actually\n    // serving the selected deployment.\n    const currentDeployment = (await resp.json()) as { name?: unknown };\n    return currentDeployment.name === deploymentName;\n  } catch {\n    return false;\n  }\n}\n\nasync function logOrOpenUrl(ctx: Context, url: string, shouldOpen: boolean) {\n  if (shouldOpen) {\n    logMessage(chalkStderr.gray(`Opening ${url} in the default browser...`));\n    try {\n      // This can fail e.g. on a headless dev machine.\n      await open(url);\n    } catch {\n      logWarning(\n        `\u26A0\uFE0F Could not open dashboard in the default browser.\\nPlease visit: ${url}`,\n      );\n    }\n  } else {\n    logOutput(url);\n  }\n}\n", "import process from 'node:process';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\nimport {\n\tisWsl,\n\tpowerShellPath,\n\tconvertWslPathToWindows,\n\tcanAccessPowerShell,\n\twslDefaultBrowser,\n} from 'wsl-utils';\nimport {executePowerShell} from 'powershell-utils';\nimport defineLazyProperty from 'define-lazy-prop';\nimport defaultBrowser, {_windowsBrowserProgIdMap} from 'default-browser';\nimport isInsideContainer from 'is-inside-container';\nimport isInSsh from 'is-in-ssh';\n\nconst fallbackAttemptSymbol = Symbol('fallbackAttempt');\n\n// Path to included `xdg-open`.\nconst __dirname = import.meta.url ? path.dirname(fileURLToPath(import.meta.url)) : '';\nconst localXdgOpenPath = path.join(__dirname, 'xdg-open');\n\nconst {platform, arch} = process;\n\nconst tryEachApp = async (apps, opener) => {\n\tif (apps.length === 0) {\n\t\t// No app was provided\n\t\treturn;\n\t}\n\n\tconst errors = [];\n\n\tfor (const app of apps) {\n\t\ttry {\n\t\t\treturn await opener(app); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\terrors.push(error);\n\t\t}\n\t}\n\n\tthrow new AggregateError(errors, 'Failed to open in all supported apps');\n};\n\n// eslint-disable-next-line complexity\nconst baseOpen = async options => {\n\toptions = {\n\t\twait: false,\n\t\tbackground: false,\n\t\tnewInstance: false,\n\t\tallowNonzeroExitCode: false,\n\t\t...options,\n\t};\n\n\tconst isFallbackAttempt = options[fallbackAttemptSymbol] === true;\n\tdelete options[fallbackAttemptSymbol];\n\n\tif (Array.isArray(options.app)) {\n\t\treturn tryEachApp(options.app, singleApp => baseOpen({\n\t\t\t...options,\n\t\t\tapp: singleApp,\n\t\t\t[fallbackAttemptSymbol]: true,\n\t\t}));\n\t}\n\n\tlet {name: app, arguments: appArguments = []} = options.app ?? {};\n\tappArguments = [...appArguments];\n\n\tif (Array.isArray(app)) {\n\t\treturn tryEachApp(app, appName => baseOpen({\n\t\t\t...options,\n\t\t\tapp: {\n\t\t\t\tname: appName,\n\t\t\t\targuments: appArguments,\n\t\t\t},\n\t\t\t[fallbackAttemptSymbol]: true,\n\t\t}));\n\t}\n\n\tif (app === 'browser' || app === 'browserPrivate') {\n\t\t// IDs from default-browser for macOS and windows are the same.\n\t\t// IDs are lowercased to increase chances of a match.\n\t\tconst ids = {\n\t\t\t'com.google.chrome': 'chrome',\n\t\t\t'google-chrome.desktop': 'chrome',\n\t\t\t'com.brave.browser': 'brave',\n\t\t\t'org.mozilla.firefox': 'firefox',\n\t\t\t'firefox.desktop': 'firefox',\n\t\t\t'com.microsoft.msedge': 'edge',\n\t\t\t'com.microsoft.edge': 'edge',\n\t\t\t'com.microsoft.edgemac': 'edge',\n\t\t\t'microsoft-edge.desktop': 'edge',\n\t\t\t'com.apple.safari': 'safari',\n\t\t};\n\n\t\t// Incognito flags for each browser in `apps`.\n\t\tconst flags = {\n\t\t\tchrome: '--incognito',\n\t\t\tbrave: '--incognito',\n\t\t\tfirefox: '--private-window',\n\t\t\tedge: '--inPrivate',\n\t\t\t// Safari doesn't support private mode via command line\n\t\t};\n\n\t\tlet browser;\n\t\tif (isWsl) {\n\t\t\tconst progId = await wslDefaultBrowser();\n\t\t\tconst browserInfo = _windowsBrowserProgIdMap.get(progId);\n\t\t\tbrowser = browserInfo ?? {};\n\t\t} else {\n\t\t\tbrowser = await defaultBrowser();\n\t\t}\n\n\t\tif (browser.id in ids) {\n\t\t\tconst browserName = ids[browser.id.toLowerCase()];\n\n\t\t\tif (app === 'browserPrivate') {\n\t\t\t\t// Safari doesn't support private mode via command line\n\t\t\t\tif (browserName === 'safari') {\n\t\t\t\t\tthrow new Error('Safari doesn\\'t support opening in private mode via command line');\n\t\t\t\t}\n\n\t\t\t\tappArguments.push(flags[browserName]);\n\t\t\t}\n\n\t\t\treturn baseOpen({\n\t\t\t\t...options,\n\t\t\t\tapp: {\n\t\t\t\t\tname: apps[browserName],\n\t\t\t\t\targuments: appArguments,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tthrow new Error(`${browser.name} is not supported as a default browser`);\n\t}\n\n\tlet command;\n\tconst cliArguments = [];\n\tconst childProcessOptions = {};\n\n\t// Determine if we should use Windows/PowerShell behavior in WSL.\n\t// We only use Windows integration if PowerShell is actually accessible.\n\t// This allows the package to work in sandboxed WSL environments where Windows access is restricted.\n\tlet shouldUseWindowsInWsl = false;\n\tif (isWsl && !isInsideContainer() && !isInSsh && !app) {\n\t\tshouldUseWindowsInWsl = await canAccessPowerShell();\n\t}\n\n\tif (platform === 'darwin') {\n\t\tcommand = 'open';\n\n\t\tif (options.wait) {\n\t\t\tcliArguments.push('--wait-apps');\n\t\t}\n\n\t\tif (options.background) {\n\t\t\tcliArguments.push('--background');\n\t\t}\n\n\t\tif (options.newInstance) {\n\t\t\tcliArguments.push('--new');\n\t\t}\n\n\t\tif (app) {\n\t\t\tcliArguments.push('-a', app);\n\t\t}\n\t} else if (platform === 'win32' || shouldUseWindowsInWsl) {\n\t\tcommand = await powerShellPath();\n\n\t\tcliArguments.push(...executePowerShell.argumentsPrefix);\n\n\t\tif (!isWsl) {\n\t\t\tchildProcessOptions.windowsVerbatimArguments = true;\n\t\t}\n\n\t\t// Convert WSL Linux paths to Windows paths\n\t\tif (isWsl && options.target) {\n\t\t\toptions.target = await convertWslPathToWindows(options.target);\n\t\t}\n\n\t\t// Suppress PowerShell progress messages that are written to stderr\n\t\tconst encodedArguments = ['$ProgressPreference = \\'SilentlyContinue\\';', 'Start'];\n\n\t\tif (options.wait) {\n\t\t\tencodedArguments.push('-Wait');\n\t\t}\n\n\t\tif (app) {\n\t\t\tencodedArguments.push(executePowerShell.escapeArgument(app));\n\t\t\tif (options.target) {\n\t\t\t\tappArguments.push(options.target);\n\t\t\t}\n\t\t} else if (options.target) {\n\t\t\tencodedArguments.push(executePowerShell.escapeArgument(options.target));\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tappArguments = appArguments.map(argument => executePowerShell.escapeArgument(argument));\n\t\t\tencodedArguments.push('-ArgumentList', appArguments.join(','));\n\t\t}\n\n\t\t// Using Base64-encoded command, accepted by PowerShell, to allow special characters.\n\t\toptions.target = executePowerShell.encodeCommand(encodedArguments.join(' '));\n\n\t\tif (!options.wait) {\n\t\t\t// PowerShell will keep the parent process alive unless stdio is ignored.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t}\n\t} else {\n\t\tif (app) {\n\t\t\tcommand = app;\n\t\t} else {\n\t\t\t// When bundled by Webpack, there's no actual package file path and no local `xdg-open`.\n\t\t\tconst isBundled = !__dirname || __dirname === '/';\n\n\t\t\t// Check if local `xdg-open` exists and is executable.\n\t\t\tlet exeLocalXdgOpen = false;\n\t\t\ttry {\n\t\t\t\tawait fs.access(localXdgOpenPath, fsConstants.X_OK);\n\t\t\t\texeLocalXdgOpen = true;\n\t\t\t} catch {}\n\n\t\t\tconst useSystemXdgOpen = process.versions.electron\n\t\t\t\t?? (platform === 'android' || isBundled || !exeLocalXdgOpen);\n\t\t\tcommand = useSystemXdgOpen ? 'xdg-open' : localXdgOpenPath;\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tcliArguments.push(...appArguments);\n\t\t}\n\n\t\tif (!options.wait) {\n\t\t\t// `xdg-open` will block the process unless stdio is ignored\n\t\t\t// and it's detached from the parent even if it's unref'd.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t\tchildProcessOptions.detached = true;\n\t\t}\n\t}\n\n\tif (platform === 'darwin' && appArguments.length > 0) {\n\t\tcliArguments.push('--args', ...appArguments);\n\t}\n\n\t// IMPORTANT: On macOS, the target MUST come AFTER '--args'.\n\t// When using --args, ALL following arguments are passed to the app.\n\t// Example: open -a \"chrome\" --args --incognito https://site.com\n\t// This passes BOTH --incognito AND https://site.com to Chrome.\n\t// Without this order, Chrome won't open in incognito. See #332.\n\tif (options.target) {\n\t\tcliArguments.push(options.target);\n\t}\n\n\tconst subprocess = childProcess.spawn(command, cliArguments, childProcessOptions);\n\n\tif (options.wait) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\tif (!options.allowNonzeroExitCode && exitCode !== 0) {\n\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolve(subprocess);\n\t\t\t});\n\t\t});\n\t}\n\n\t// When we're in a fallback attempt, we need to detect launch failures before trying the next app.\n\t// Wait for the close event to check the exit code before unreffing.\n\t// The launcher (open/xdg-open/PowerShell) exits quickly (~10-30ms) even on success.\n\tif (isFallbackAttempt) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('spawn', () => {\n\t\t\t\t// Keep error handler active for post-spawn errors\n\t\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\t\tsubprocess.off('error', reject);\n\n\t\t\t\t\tif (exitCode !== 0) {\n\t\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tsubprocess.unref();\n\t\t\t\t\tresolve(subprocess);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\n\tsubprocess.unref();\n\n\t// Handle spawn errors before the caller can attach listeners.\n\t// This prevents unhandled error events from crashing the process.\n\treturn new Promise((resolve, reject) => {\n\t\tsubprocess.once('error', reject);\n\n\t\t// Wait for the subprocess to spawn before resolving.\n\t\t// This ensures the process is established before the caller continues,\n\t\t// preventing issues when process.exit() is called immediately after.\n\t\tsubprocess.once('spawn', () => {\n\t\t\tsubprocess.off('error', reject);\n\t\t\tresolve(subprocess);\n\t\t});\n\t});\n};\n\nconst open = (target, options) => {\n\tif (typeof target !== 'string') {\n\t\tthrow new TypeError('Expected a `target`');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\ttarget,\n\t});\n};\n\nexport const openApp = (name, options) => {\n\tif (typeof name !== 'string' && !Array.isArray(name)) {\n\t\tthrow new TypeError('Expected a valid `name`');\n\t}\n\n\tconst {arguments: appArguments = []} = options ?? {};\n\tif (appArguments !== undefined && appArguments !== null && !Array.isArray(appArguments)) {\n\t\tthrow new TypeError('Expected `appArguments` as Array type');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\tapp: {\n\t\t\tname,\n\t\t\targuments: appArguments,\n\t\t},\n\t});\n};\n\nfunction detectArchBinary(binary) {\n\tif (typeof binary === 'string' || Array.isArray(binary)) {\n\t\treturn binary;\n\t}\n\n\tconst {[arch]: archBinary} = binary;\n\n\tif (!archBinary) {\n\t\tthrow new Error(`${arch} is not supported`);\n\t}\n\n\treturn archBinary;\n}\n\nfunction detectPlatformBinary({[platform]: platformBinary}, {wsl} = {}) {\n\tif (wsl && isWsl) {\n\t\treturn detectArchBinary(wsl);\n\t}\n\n\tif (!platformBinary) {\n\t\tthrow new Error(`${platform} is not supported`);\n\t}\n\n\treturn detectArchBinary(platformBinary);\n}\n\nexport const apps = {\n\tbrowser: 'browser',\n\tbrowserPrivate: 'browserPrivate',\n};\n\ndefineLazyProperty(apps, 'chrome', () => detectPlatformBinary({\n\tdarwin: 'google chrome',\n\twin32: 'chrome',\n\t// `chromium-browser` is the older deb package name used by Ubuntu/Debian before snap.\n\tlinux: ['google-chrome', 'google-chrome-stable', 'chromium', 'chromium-browser'],\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe',\n\t\tx64: ['/mnt/c/Program Files/Google/Chrome/Application/chrome.exe', '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe'],\n\t},\n}));\n\ndefineLazyProperty(apps, 'brave', () => detectPlatformBinary({\n\tdarwin: 'brave browser',\n\twin32: 'brave',\n\tlinux: ['brave-browser', 'brave'],\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe',\n\t\tx64: ['/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe', '/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe'],\n\t},\n}));\n\ndefineLazyProperty(apps, 'firefox', () => detectPlatformBinary({\n\tdarwin: 'firefox',\n\twin32: String.raw`C:\\Program Files\\Mozilla Firefox\\firefox.exe`,\n\tlinux: 'firefox',\n}, {\n\twsl: '/mnt/c/Program Files/Mozilla Firefox/firefox.exe',\n}));\n\ndefineLazyProperty(apps, 'edge', () => detectPlatformBinary({\n\tdarwin: 'microsoft edge',\n\twin32: 'msedge',\n\tlinux: ['microsoft-edge', 'microsoft-edge-dev'],\n}, {\n\twsl: '/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe',\n}));\n\ndefineLazyProperty(apps, 'safari', () => detectPlatformBinary({\n\tdarwin: 'Safari',\n}));\n\nexport default open;\n", "import {promisify} from 'node:util';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\nimport isWsl from 'is-wsl';\nimport {powerShellPath as windowsPowerShellPath, executePowerShell} from 'powershell-utils';\nimport {parseMountPointFromConfig} from './utilities.js';\n\nconst execFile = promisify(childProcess.execFile);\n\nexport const wslDrivesMountPoint = (() => {\n\t// Default value for \"root\" param\n\t// according to https://docs.microsoft.com/en-us/windows/wsl/wsl-config\n\tconst defaultMountPoint = '/mnt/';\n\n\tlet mountPoint;\n\n\treturn async function () {\n\t\tif (mountPoint) {\n\t\t\t// Return memoized mount point value\n\t\t\treturn mountPoint;\n\t\t}\n\n\t\tconst configFilePath = '/etc/wsl.conf';\n\n\t\tlet isConfigFileExists = false;\n\t\ttry {\n\t\t\tawait fs.access(configFilePath, fsConstants.F_OK);\n\t\t\tisConfigFileExists = true;\n\t\t} catch {}\n\n\t\tif (!isConfigFileExists) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tconst configContent = await fs.readFile(configFilePath, {encoding: 'utf8'});\n\t\tconst parsedMountPoint = parseMountPointFromConfig(configContent);\n\n\t\tif (parsedMountPoint === undefined) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tmountPoint = parsedMountPoint;\n\t\tmountPoint = mountPoint.endsWith('/') ? mountPoint : `${mountPoint}/`;\n\n\t\treturn mountPoint;\n\t};\n})();\n\nexport const powerShellPathFromWsl = async () => {\n\tconst mountPoint = await wslDrivesMountPoint();\n\treturn `${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`;\n};\n\nexport const powerShellPath = isWsl ? powerShellPathFromWsl : windowsPowerShellPath;\n\n// Cache for PowerShell accessibility check\nlet canAccessPowerShellPromise;\n\nexport const canAccessPowerShell = async () => {\n\tcanAccessPowerShellPromise ??= (async () => {\n\t\ttry {\n\t\t\tconst psPath = await powerShellPath();\n\t\t\tawait fs.access(psPath, fsConstants.X_OK);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\t// PowerShell is not accessible (either doesn't exist, no execute permission, or other error)\n\t\t\treturn false;\n\t\t}\n\t})();\n\n\treturn canAccessPowerShellPromise;\n};\n\nexport const wslDefaultBrowser = async () => {\n\tconst psPath = await powerShellPath();\n\tconst command = String.raw`(Get-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice\").ProgId`;\n\n\tconst {stdout} = await executePowerShell(command, {powerShellPath: psPath});\n\n\treturn stdout.trim();\n};\n\nexport const convertWslPathToWindows = async path => {\n\t// Don't convert URLs\n\tif (/^[a-z]+:\\/\\//i.test(path)) {\n\t\treturn path;\n\t}\n\n\ttry {\n\t\tconst {stdout} = await execFile('wslpath', ['-aw', path], {encoding: 'utf8'});\n\t\treturn stdout.trim();\n\t} catch {\n\t\t// If wslpath fails, return the original path\n\t\treturn path;\n\t}\n};\n\nexport {default as isWsl} from 'is-wsl';\n", "import process from 'node:process';\nimport os from 'node:os';\nimport fs from 'node:fs';\nimport isInsideContainer from 'is-inside-container';\n\nconst isWsl = () => {\n\tif (process.platform !== 'linux') {\n\t\treturn false;\n\t}\n\n\tif (os.release().toLowerCase().includes('microsoft')) {\n\t\tif (isInsideContainer()) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\ttry {\n\t\treturn fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft')\n\t\t\t? !isInsideContainer() : false;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nexport default process.env.__IS_WSL_TEST__ ? isWsl : isWsl();\n", "import fs from 'node:fs';\nimport isDocker from 'is-docker';\n\nlet cachedResult;\n\n// Podman detection\nconst hasContainerEnv = () => {\n\ttry {\n\t\tfs.statSync('/run/.containerenv');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nexport default function isInsideContainer() {\n\t// TODO: Use `??=` when targeting Node.js 16.\n\tif (cachedResult === undefined) {\n\t\tcachedResult = hasContainerEnv() || isDocker();\n\t}\n\n\treturn cachedResult;\n}\n", "import fs from 'node:fs';\n\nlet isDockerCached;\n\nfunction hasDockerEnv() {\n\ttry {\n\t\tfs.statSync('/.dockerenv');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction hasDockerCGroup() {\n\ttry {\n\t\treturn fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport default function isDocker() {\n\t// TODO: Use `??=` when targeting Node.js 16.\n\tif (isDockerCached === undefined) {\n\t\tisDockerCached = hasDockerEnv() || hasDockerCGroup();\n\t}\n\n\treturn isDockerCached;\n}\n", "import process from 'node:process';\nimport {Buffer} from 'node:buffer';\nimport {promisify} from 'node:util';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\n\nconst execFile = promisify(childProcess.execFile);\n\nexport const powerShellPath = () => `${process.env.SYSTEMROOT || process.env.windir || String.raw`C:\\Windows`}\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe`;\n\n// Cache for PowerShell accessibility check\nlet canAccessCache;\n\nexport const canAccessPowerShell = async () => {\n\tcanAccessCache ??= (async () => {\n\t\ttry {\n\t\t\tawait fs.access(powerShellPath(), fsConstants.X_OK);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t})();\n\n\treturn canAccessCache;\n};\n\nexport const executePowerShell = async (command, options = {}) => {\n\tconst {\n\t\tpowerShellPath: psPath,\n\t\t...execFileOptions\n\t} = options;\n\n\tconst encodedCommand = executePowerShell.encodeCommand(command);\n\n\treturn execFile(\n\t\tpsPath ?? powerShellPath(),\n\t\t[\n\t\t\t...executePowerShell.argumentsPrefix,\n\t\t\tencodedCommand,\n\t\t],\n\t\t{\n\t\t\tencoding: 'utf8',\n\t\t\t...execFileOptions,\n\t\t},\n\t);\n};\n\nexecutePowerShell.argumentsPrefix = [\n\t'-NoProfile',\n\t'-NonInteractive',\n\t'-ExecutionPolicy',\n\t'Bypass',\n\t'-EncodedCommand',\n];\n\nexecutePowerShell.encodeCommand = command => Buffer.from(command, 'utf16le').toString('base64');\n\nexecutePowerShell.escapeArgument = value => `'${String(value).replaceAll('\\'', '\\'\\'')}'`;\n", "export function parseMountPointFromConfig(content) {\n\tfor (const line of content.split('\\n')) {\n\t\t// Skip comment lines\n\t\tif (/^\\s*#/.test(line)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Match root at start of line (after optional whitespace)\n\t\tconst match = /^\\s*root\\s*=\\s*(?<mountPoint>\"[^\"]*\"|'[^']*'|[^#]*)/.exec(line);\n\t\tif (!match) {\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn match.groups.mountPoint\n\t\t\t.trim()\n\t\t\t// Strip surrounding quotes\n\t\t\t.replaceAll(/^[\"']|[\"']$/g, '');\n\t}\n}\n", "export default function defineLazyProperty(object, propertyName, valueGetter) {\n\tconst define = value => Object.defineProperty(object, propertyName, {value, enumerable: true, writable: true});\n\n\tObject.defineProperty(object, propertyName, {\n\t\tconfigurable: true,\n\t\tenumerable: true,\n\t\tget() {\n\t\t\tconst result = valueGetter();\n\t\t\tdefine(result);\n\t\t\treturn result;\n\t\t},\n\t\tset(value) {\n\t\t\tdefine(value);\n\t\t}\n\t});\n\n\treturn object;\n}\n", "import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\nimport defaultBrowserId from 'default-browser-id';\nimport bundleName from 'bundle-name';\nimport windows from './windows.js';\n\nexport {_windowsBrowserProgIdMap} from './windows.js';\n\nconst execFileAsync = promisify(execFile);\n\n// Inlined: https://github.com/sindresorhus/titleize/blob/main/index.js\nconst titleize = string => string.toLowerCase().replaceAll(/(?:^|\\s|-)\\S/g, x => x.toUpperCase());\n\nexport default async function defaultBrowser() {\n\tif (process.platform === 'darwin') {\n\t\tconst id = await defaultBrowserId();\n\t\tconst name = await bundleName(id);\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'linux') {\n\t\tconst {stdout} = await execFileAsync('xdg-mime', ['query', 'default', 'x-scheme-handler/http']);\n\t\tconst id = stdout.trim();\n\t\tconst name = titleize(id.replace(/.desktop$/, '').replace('-', ' '));\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'win32') {\n\t\treturn windows();\n\t}\n\n\tthrow new Error('Only macOS, Linux, and Windows are supported');\n}\n", "import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport default async function defaultBrowserId() {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst {stdout} = await execFileAsync('defaults', ['read', 'com.apple.LaunchServices/com.apple.launchservices.secure', 'LSHandlers']);\n\n\t// `(?!-)` is to prevent matching `LSHandlerRoleAll = \"-\";`.\n\tconst match = /LSHandlerRoleAll = \"(?!-)(?<id>[^\"]+?)\";\\s+?LSHandlerURLScheme = (?:http|https);/.exec(stdout);\n\n\treturn match?.groups.id ?? 'com.apple.Safari';\n}\n", "import process from 'node:process';\nimport {promisify} from 'node:util';\nimport {execFile, execFileSync} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport async function runAppleScript(script, {humanReadableOutput = true, signal} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst execOptions = {};\n\tif (signal) {\n\t\texecOptions.signal = signal;\n\t}\n\n\tconst {stdout} = await execFileAsync('osascript', ['-e', script, outputArguments], execOptions);\n\treturn stdout.trim();\n}\n\nexport function runAppleScriptSync(script, {humanReadableOutput = true} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst stdout = execFileSync('osascript', ['-e', script, ...outputArguments], {\n\t\tencoding: 'utf8',\n\t\tstdio: ['ignore', 'pipe', 'ignore'],\n\t\ttimeout: 500,\n\t});\n\n\treturn stdout.trim();\n}\n", "import {runAppleScript} from 'run-applescript';\n\nexport default async function bundleName(bundleId) {\n\treturn runAppleScript(`tell application \"Finder\" to set app_path to application file id \"${bundleId}\" as string\\ntell application \"System Events\" to get value of property list item \"CFBundleName\" of property list file (app_path & \":Contents:Info.plist\")`);\n}\n", "import {promisify} from 'node:util';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\n// TODO: Fix the casing of bundle identifiers in the next major version.\n\n// Windows doesn't have browser IDs in the same way macOS/Linux does so we give fake\n// ones that look real and match the macOS/Linux versions for cross-platform apps.\nconst windowsBrowserProgIds = {\n\tMSEdgeHTM: {name: 'Edge', id: 'com.microsoft.edge'}, // The missing `L` is correct.\n\tMSEdgeBHTML: {name: 'Edge Beta', id: 'com.microsoft.edge.beta'},\n\tMSEdgeDHTML: {name: 'Edge Dev', id: 'com.microsoft.edge.dev'},\n\tAppXq0fevzme2pys62n3e0fbqa7peapykr8v: {name: 'Edge', id: 'com.microsoft.edge.old'},\n\tChromeHTML: {name: 'Chrome', id: 'com.google.chrome'},\n\tChromeBHTML: {name: 'Chrome Beta', id: 'com.google.chrome.beta'},\n\tChromeDHTML: {name: 'Chrome Dev', id: 'com.google.chrome.dev'},\n\tChromiumHTM: {name: 'Chromium', id: 'org.chromium.Chromium'},\n\tBraveHTML: {name: 'Brave', id: 'com.brave.Browser'},\n\tBraveBHTML: {name: 'Brave Beta', id: 'com.brave.Browser.beta'},\n\tBraveDHTML: {name: 'Brave Dev', id: 'com.brave.Browser.dev'},\n\tBraveSSHTM: {name: 'Brave Nightly', id: 'com.brave.Browser.nightly'},\n\tFirefoxURL: {name: 'Firefox', id: 'org.mozilla.firefox'},\n\tOperaStable: {name: 'Opera', id: 'com.operasoftware.Opera'},\n\tVivaldiHTM: {name: 'Vivaldi', id: 'com.vivaldi.Vivaldi'},\n\t'IE.HTTP': {name: 'Internet Explorer', id: 'com.microsoft.ie'},\n};\n\nexport const _windowsBrowserProgIdMap = new Map(Object.entries(windowsBrowserProgIds));\n\nexport class UnknownBrowserError extends Error {}\n\nexport default async function defaultBrowser(_execFileAsync = execFileAsync) {\n\tconst {stdout} = await _execFileAsync('reg', [\n\t\t'QUERY',\n\t\t' HKEY_CURRENT_USER\\\\Software\\\\Microsoft\\\\Windows\\\\Shell\\\\Associations\\\\UrlAssociations\\\\http\\\\UserChoice',\n\t\t'/v',\n\t\t'ProgId',\n\t]);\n\n\tconst match = /ProgId\\s*REG_SZ\\s*(?<id>\\S+)/.exec(stdout);\n\tif (!match) {\n\t\tthrow new UnknownBrowserError(`Cannot find Windows browser in stdout: ${JSON.stringify(stdout)}`);\n\t}\n\n\tconst {id} = match.groups;\n\n\t// Windows can append a hash suffix to ProgIds using a dot or hyphen\n\t// (e.g., `ChromeHTML.ABC123`, `FirefoxURL-6F193CCC56814779`).\n\t// Try exact match first, then try without the suffix.\n\tconst dotIndex = id.lastIndexOf('.');\n\tconst hyphenIndex = id.lastIndexOf('-');\n\tconst baseIdByDot = dotIndex === -1 ? undefined : id.slice(0, dotIndex);\n\tconst baseIdByHyphen = hyphenIndex === -1 ? undefined : id.slice(0, hyphenIndex);\n\n\treturn windowsBrowserProgIds[id] ?? windowsBrowserProgIds[baseIdByDot] ?? windowsBrowserProgIds[baseIdByHyphen] ?? {name: id, id};\n}\n", "import process from 'node:process';\n\nconst isInSsh = Boolean(process.env.SSH_CONNECTION\n\t|| process.env.SSH_CLIENT\n\t|| process.env.SSH_TTY);\n\nexport default isInSsh;\n", "import { chalkStderr } from \"chalk\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { Command } from \"@commander-js/extra-typings\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { dataInDeployment } from \"./lib/data.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\n\nexport const data = new Command(\"data\")\n  .summary(\"List tables and print data from your database\")\n  .description(\n    [\n      \"Inspect your Convex deployment's database.\",\n      \"\",\n      \"\u2022 List tables: `npx convex data`\",\n      \"\u2022 List documents in a table: `npx convex data tableName`\",\n      \"\",\n      \"By default, this inspects your dev deployment.\",\n      \"\",\n      \"This works with system tables, such as `_storage`, in addition to your own tables.\",\n    ].join(\"\\n\"),\n  )\n  .allowExcessArguments(false)\n  .addDataOptions()\n  .addDeploymentSelectionOptions(actionDescription(\"Inspect the database in\"))\n  .showHelpAfterError()\n  .action(async (tableName, options) => {\n    const ctx = await oneoffContext(options);\n\n    const deploymentSelection = await getDeploymentSelection(ctx, options);\n    const deployment = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n\n    const deploymentNotice = deployment.deploymentFields?.deploymentName\n      ? `${chalkStderr.bold(deployment.deploymentFields.deploymentName)} deployment's `\n      : \"\";\n\n    await dataInDeployment(ctx, {\n      deploymentUrl: deployment.url,\n      adminKey: deployment.adminKey,\n      deploymentNotice,\n      tableName,\n      ...options,\n    });\n  });\n", "import { chalkStderr } from \"chalk\";\nimport { Context } from \"../../bundler/context.js\";\nimport { logError, logOutput, logWarning } from \"../../bundler/log.js\";\nimport { Base64 } from \"../../values/index.js\";\nimport { Value } from \"../../values/value.js\";\nimport { runSystemPaginatedQuery } from \"./run.js\";\n\nexport async function dataInDeployment(\n  ctx: Context,\n  options: {\n    deploymentUrl: string;\n    adminKey: string;\n    deploymentNotice: string;\n    tableName?: string | undefined;\n    limit: number;\n    order: \"asc\" | \"desc\";\n    component?: string | undefined;\n    format?:\n      | \"json\"\n      | \"jsonArray\"\n      | \"jsonLines\"\n      | \"jsonl\"\n      | \"pretty\"\n      | undefined;\n  },\n) {\n  if (options.tableName !== undefined) {\n    await listDocuments(\n      ctx,\n      options.deploymentUrl,\n      options.adminKey,\n      options.tableName,\n      {\n        limit: options.limit,\n        order: options.order as \"asc\" | \"desc\",\n        componentPath: options.component ?? \"\",\n        format: options.format,\n      },\n    );\n  } else {\n    await listTables(\n      ctx,\n      options.deploymentUrl,\n      options.adminKey,\n      options.deploymentNotice,\n      options.component ?? \"\",\n    );\n  }\n}\n\nasync function listTables(\n  ctx: Context,\n  deploymentUrl: string,\n  adminKey: string,\n  deploymentNotice: string,\n  componentPath: string,\n) {\n  const tables = (await runSystemPaginatedQuery(ctx, {\n    deploymentUrl,\n    adminKey,\n    functionName: \"_system/cli/tables\",\n    componentPath,\n    args: {},\n  })) as { name: string }[];\n  if (tables.length === 0) {\n    logError(`There are no tables in the ${deploymentNotice}database.`);\n    return;\n  }\n  const tableNames = tables.map((table) => table.name);\n  tableNames.sort();\n  logOutput(tableNames.join(\"\\n\"));\n}\n\nasync function listDocuments(\n  ctx: Context,\n  deploymentUrl: string,\n  adminKey: string,\n  tableName: string,\n  options: {\n    limit: number;\n    order: \"asc\" | \"desc\";\n    componentPath: string;\n    format?:\n      | \"json\"\n      | \"jsonArray\"\n      | \"jsonLines\"\n      | \"jsonl\"\n      | \"pretty\"\n      | undefined;\n  },\n) {\n  const data = (await runSystemPaginatedQuery(ctx, {\n    deploymentUrl,\n    adminKey,\n    functionName: \"_system/cli/tableData\",\n    componentPath: options.componentPath,\n    args: {\n      table: tableName,\n      order: options.order ?? \"desc\",\n    },\n    limit: options.limit + 1,\n  })) as Record<string, Value>[];\n\n  if (data.length === 0) {\n    logError(\"There are no documents in this table.\");\n    return;\n  }\n\n  if (options.format === \"json\" || options.format === \"jsonArray\") {\n    logOutput(\n      \"[\\n\" + data.slice(0, options.limit).map(stringify).join(\",\\n\") + \"\\n]\",\n    );\n  } else if (options.format === \"jsonLines\" || options.format === \"jsonl\") {\n    logOutput(\n      data\n        .slice(0, options.limit)\n        .map((document) => stringify(document))\n        .join(\"\\n\"),\n    );\n  } else {\n    logDocumentsTable(\n      ctx,\n      data.slice(0, options.limit).map((document) => {\n        const printed: Record<string, string> = {};\n        for (const key in document) {\n          printed[key] = stringify(document[key]);\n        }\n        return printed;\n      }),\n    );\n    if (data.length > options.limit) {\n      logWarning(\n        chalkStderr.yellow(\n          `Showing the ${options.limit} ${\n            options.order === \"desc\" ? \"most recently\" : \"oldest\"\n          } created document${\n            options.limit > 1 ? \"s\" : \"\"\n          }. Use the --limit option to see more.`,\n        ),\n      );\n    }\n  }\n}\n\nfunction logDocumentsTable(_ctx: Context, rows: Record<string, string>[]) {\n  const columnsToWidths: Record<string, number> = {};\n  for (const row of rows) {\n    for (const column in row) {\n      const value = row[column];\n      columnsToWidths[column] = Math.max(\n        value.length,\n        columnsToWidths[column] ?? 0,\n      );\n    }\n  }\n  const unsortedFields = Object.keys(columnsToWidths);\n  unsortedFields.sort();\n  const fields = Array.from(\n    new Set([\"_id\", \"_creationTime\", ...unsortedFields]),\n  );\n  const columnWidths = fields.map((field) => columnsToWidths[field]);\n  const lineLimit = process.stdout.isTTY ? process.stdout.columns : undefined;\n\n  let didTruncate = false;\n\n  function limitLine(line: string, limit: number | undefined) {\n    if (limit === undefined) {\n      return line;\n    }\n    const limitWithBufferForUnicode = limit - 10;\n    if (line.length > limitWithBufferForUnicode) {\n      didTruncate = true;\n    }\n    return line.slice(0, limitWithBufferForUnicode);\n  }\n\n  logOutput(\n    limitLine(\n      fields.map((field, i) => field.padEnd(columnWidths[i])).join(\" | \"),\n      lineLimit,\n    ),\n  );\n  logOutput(\n    limitLine(\n      columnWidths.map((width) => \"-\".repeat(width)).join(\"-|-\"),\n      lineLimit,\n    ),\n  );\n  for (const row of rows) {\n    logOutput(\n      limitLine(\n        fields\n          .map((field, i) => (row[field] ?? \"\").padEnd(columnWidths[i]))\n          .join(\" | \"),\n        lineLimit,\n      ),\n    );\n  }\n  if (didTruncate) {\n    logWarning(\n      chalkStderr.yellow(\n        \"Lines were truncated to fit the terminal width. Pipe the command to see \" +\n          \"the full output, such as:\\n  `npx convex data tableName | less -S`\",\n      ),\n    );\n  }\n}\n\nfunction stringify(value: Value): string {\n  if (value === null) {\n    return \"null\";\n  }\n  if (typeof value === \"bigint\") {\n    return `${value.toString()}n`;\n  }\n  if (typeof value === \"number\") {\n    return value.toString();\n  }\n  if (typeof value === \"boolean\") {\n    return value.toString();\n  }\n  if (typeof value === \"string\") {\n    return JSON.stringify(value);\n  }\n  if (value instanceof ArrayBuffer) {\n    const base64Encoded = Base64.fromByteArray(new Uint8Array(value));\n    return `Bytes(\"${base64Encoded}\")`;\n  }\n  if (value instanceof Array) {\n    return `[${value.map(stringify).join(\", \")}]`;\n  }\n  const pairs = Object.entries(value)\n    .map(([k, v]) => `\"${k}\": ${stringify(v!)}`)\n    .join(\", \");\n  return `{ ${pairs} }`;\n}\n", "import { chalkStderr } from \"chalk\";\nimport { Command, Option } from \"@commander-js/extra-typings\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep, logMessage, showSpinner } from \"../bundler/log.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { announceDeploymentTarget } from \"./lib/announceDeploymentTarget.js\";\nimport {\n  getDefaultDeployMessage,\n  gitBranchFromEnvironment,\n  isNonProdBuildEnvironment,\n  suggestedEnvVarNames,\n} from \"./lib/envvars.js\";\nimport { PushOptions } from \"./lib/components.js\";\nimport {\n  CONVEX_DEPLOY_KEY_ENV_VAR_NAME,\n  CONVEX_SELF_HOSTED_URL_VAR_NAME,\n  CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n  bigBrainAPI,\n} from \"./lib/utils/utils.js\";\nimport { runFunctionAndLog } from \"./lib/run.js\";\nimport { usageStateWarning } from \"./lib/usage.js\";\nimport { getTeamAndProjectFromPreviewAdminKey } from \"./lib/deployment.js\";\nimport { runPush } from \"./lib/components.js\";\nimport { promptYesNo } from \"./lib/utils/prompts.js\";\nimport { deployToDeployment, runCommand } from \"./lib/deploy2.js\";\nimport {\n  DeploymentSelection,\n  getDeploymentSelection,\n} from \"./lib/deploymentSelection.js\";\nimport { deploymentNameAndTypeFromSelection } from \"./lib/deploymentSelection.js\";\nimport { checkVersionAndAiFilesStaleness } from \"./lib/updates.js\";\nimport { readProjectConfig, getAuthKitConfig } from \"./lib/config.js\";\nimport { ensureAuthKitProvisionedBeforeBuild } from \"./lib/workos/workos.js\";\nimport { DASHBOARD_HOST } from \"./lib/dashboard.js\";\nimport { extractDeploymentNameForWorkOS } from \"./lib/extractDeploymentNameForWorkOS.js\";\n\nexport const deploy = new Command(\"deploy\")\n  .summary(\"Deploy to a production or preview deployment\")\n  .description(\n    [\n      \"Deploys code to a deployment.\",\n      \"This is typically used for deploying to a prod or preview deployment manually or from CI; to deploy to your dev deployment when developing, use `npx convex dev`.\",\n      \"\",\n      \"The target deployment is chosen like this:\",\n      `\u2022 If the \\`${CONVEX_DEPLOYMENT_ENV_VAR_NAME}\\` environment variable is set (typical during local development), the target is the project\u2019s default production deployment.`,\n      `\u2022 If the \\`${CONVEX_DEPLOY_KEY_ENV_VAR_NAME}\\` environment variable is set (typical in CI), it is the deployment associated with that key.`,\n      `  \u2022 When it\u2019s set to a preview deploy key, it will deploy to a preview deployment:`,\n      `    \u2022 with the name of the current Git branch when running in CI (Vercel, Netlify, Cloudflare Pages, GitHub)`,\n      `    \u2022 or with the name specified by the \\`--preview-name\\` or \\`--preview-create\\` flags`,\n      \"\",\n      \"`npx convex deploy` will:\",\n      \"  1. Run a command if specified with `--cmd`, with the deployment URL available as an environment variable.\",\n      \"  2. Typecheck your Convex functions.\",\n      \"  3. Regenerate the generated code in the `convex/_generated` directory.\",\n      \"  4. Bundle your Convex functions and their dependencies.\",\n      \"  5. Push your functions, indexes, and schema to the deployment.\",\n      \"  6. When deploying to a preview deployment, it runs the function specified by `--preview-run`.\",\n      \"If any step fails, the next steps do not run.\",\n    ].join(\"\\n\"),\n  )\n  .allowExcessArguments(false)\n  .addDeployOptions()\n  .addOption(\n    new Option(\n      \"--preview-run <functionName>\",\n      \"Function to run if deploying to a preview deployment. This is ignored if deploying to a production deployment.\",\n    ),\n  )\n  .addOption(\n    new Option(\n      \"--preview-name <name>\",\n      \"The name to associate with this preview deployment. Defaults to the current Git branch name in Vercel, Netlify, Cloudflare Pages and GitHub CI. Reuses the existing deployment if one exists.\",\n    ).conflicts(\"preview-create\"),\n  )\n  .addOption(\n    new Option(\n      \"--preview-create <name>\",\n      \"Like --preview-name, but deletes and recreates an existing preview deployment with the same name. This parameter can only be used with a preview deploy key (when used with another type of key, the command will return an error).\",\n    ).conflicts(\"preview-name\"),\n  )\n  .addOption(\n    new Option(\n      \"--check-build-environment <mode>\",\n      \"Whether to check for a non-production build environment before deploying to a production Convex deployment.\",\n    )\n      .choices([\"enable\", \"disable\"] as const)\n      .default(\"enable\" as const)\n      .hideHelp(),\n  )\n  // Hidden options to pass in admin key and url for tests and local development\n  .addOption(new Option(\"--admin-key <adminKey>\").hideHelp())\n  .addOption(new Option(\"--url <url>\").hideHelp())\n  .addOption(\n    new Option(\n      \"--env-file <envFile>\",\n      `Path to a custom file of environment variables, for choosing the \\\ndeployment, e.g. ${CONVEX_DEPLOYMENT_ENV_VAR_NAME} or ${CONVEX_SELF_HOSTED_URL_VAR_NAME}. \\\nSame format as .env.local or .env files, and overrides them.`,\n    ),\n  )\n  .addOption(\n    new Option(\n      \"--message <message>\",\n      \"Optional message to attach to this deployment in the audit log.\",\n    ),\n  )\n  .addOption(\n    new Option(\n      \"--skip-workos-check\",\n      \"Skip WorkOS AuthKit provisioning and credential checks during deploy.\",\n    ).hideHelp(),\n  )\n  .addOption(\n    new Option(\n      \"--skip-large-indexes-check\",\n      \"Skip the confirmation prompt when this push creates, changes, or deletes an index on a large table. Creating or changing an index blocks the deploy until it is backfilled; consider staging it instead so it backfills in the background.\",\n    ),\n  )\n  .addOption(\n    // Predecessor of --skip-large-indexes-check, kept hidden so existing\n    // deploy scripts keep working. It still skips only the deletion\n    // confirmation: scripts that opted into that never agreed to let a\n    // blocking backfill through.\n    new Option(\"--allow-deleting-large-indexes\").hideHelp(),\n  )\n  .addOption(\n    new Option(\n      \"--allow-unstaging-schema\",\n      \"Skip the confirmation prompt when this push discards a staged table validator that is validating or already validated.\",\n    ),\n  )\n  .showHelpAfterError()\n  .action(async (cmdOptions) => {\n    const ctx = await oneoffContext(cmdOptions);\n\n    const deploymentSelection = await getDeploymentSelection(ctx, {\n      ...cmdOptions,\n      implicitProd: true,\n    });\n    if (\n      cmdOptions.checkBuildEnvironment === \"enable\" &&\n      isNonProdBuildEnvironment() &&\n      deploymentSelection.kind === \"existingDeployment\" &&\n      deploymentSelection.deploymentToActOn.source === \"deployKey\" &&\n      deploymentSelection.deploymentToActOn.deploymentFields?.deploymentType ===\n        \"prod\"\n    ) {\n      await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem data\",\n        printedMessage: `Detected a non-production build environment and \"${CONVEX_DEPLOY_KEY_ENV_VAR_NAME}\" for a production Convex deployment.\\n\n          This is probably unintentional.\n          `,\n      });\n    }\n\n    if (deploymentSelection.kind === \"anonymous\") {\n      logMessage(\n        \"You are currently developing anonymously with a locally running project.\\n\" +\n          \"To deploy your Convex app to the cloud, log in by running `npx convex login`.\\n\" +\n          \"See https://docs.convex.dev/production for more information on how Convex cloud works and instructions on how to set up hosting.\",\n      );\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: null,\n      });\n    }\n\n    if (deploymentSelection.kind === \"preview\") {\n      // TODO -- add usage state warnings here too once we can do it without a deployment name\n      // await usageStateWarning(ctx);\n      const previewName =\n        cmdOptions.previewCreate ??\n        cmdOptions.previewName ??\n        gitBranchFromEnvironment();\n      const reuse = cmdOptions.previewCreate === undefined;\n\n      const teamAndProjectSlugs = await getTeamAndProjectFromPreviewAdminKey(\n        ctx,\n        deploymentSelection.previewDeployKey,\n      );\n      await deployToNewPreviewDeployment(\n        ctx,\n        {\n          previewDeployKey: deploymentSelection.previewDeployKey,\n          projectSelection: {\n            kind: \"teamAndProjectSlugs\",\n            teamSlug: teamAndProjectSlugs.teamSlug,\n            projectSlug: teamAndProjectSlugs.projectSlug,\n          },\n        },\n        {\n          ...cmdOptions,\n          previewName: previewName ?? undefined,\n          reuse,\n          skipLargeIndexesCheck: cmdOptions.skipLargeIndexesCheck ?? false,\n          message: cmdOptions.message ?? getDefaultDeployMessage(),\n        },\n      );\n    } else {\n      if (cmdOptions.previewCreate !== undefined) {\n        const source =\n          deploymentSelection.kind === \"deploymentWithinProject\" &&\n          deploymentSelection.targetProject.kind === \"deploymentName\"\n            ? `at ${chalkStderr.blue.underline(`${DASHBOARD_HOST}/dp/${deploymentSelection.targetProject.deploymentName}/settings#preview-deploy-keys`)}`\n            : deploymentSelection.kind === \"existingDeployment\" &&\n                deploymentSelection.deploymentToActOn.deploymentFields !== null\n              ? `at ${chalkStderr.blue.underline(`${DASHBOARD_HOST}/dp/${deploymentSelection.deploymentToActOn.deploymentFields.deploymentName}/settings#preview-deploy-keys`)}`\n              : \"on the dashboard\";\n        await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Preview deployments can only be created with preview deploy keys. Generate a preview deploy key ${source} and set the ${chalkStderr.bold(`CONVEX_DEPLOY_KEY`)} environment variable with it.`,\n        });\n      }\n\n      await deployToExistingDeployment(ctx, deploymentSelection, {\n        ...cmdOptions,\n        skipWorkosCheck: cmdOptions.skipWorkosCheck ?? false,\n        skipLargeIndexesCheck: cmdOptions.skipLargeIndexesCheck ?? false,\n        allowDeletingLargeIndexes:\n          cmdOptions.allowDeletingLargeIndexes ?? false,\n        allowUnstagingSchema: cmdOptions.allowUnstagingSchema ?? false,\n        message: cmdOptions.message ?? getDefaultDeployMessage(),\n      });\n    }\n  });\n\nasync function deployToNewPreviewDeployment(\n  ctx: Context,\n  deploymentSelection: {\n    previewDeployKey: string;\n    projectSelection: {\n      kind: \"teamAndProjectSlugs\";\n      teamSlug: string;\n      projectSlug: string;\n    };\n  },\n  options: {\n    dryRun?: boolean | undefined;\n    previewName?: string | undefined;\n    reuse: boolean;\n    previewRun?: string | undefined;\n    cmdUrlEnvVarName?: string | undefined;\n    cmd?: string | undefined;\n    verbose?: boolean | undefined;\n    typecheck: \"enable\" | \"try\" | \"disable\";\n    typecheckComponents: boolean;\n    codegen: \"enable\" | \"disable\";\n    pushAllModules?: boolean;\n\n    debug?: boolean | undefined;\n    debugBundlePath?: string | undefined;\n    skipWorkosCheck?: boolean | undefined;\n    skipLargeIndexesCheck: boolean;\n    message: string | null;\n  },\n) {\n  const previewName = options.previewName ?? null;\n  if (previewName === null) {\n    await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"`npx convex deploy` to a preview deployment could not determine the preview name. Provide one using `--preview-name`\",\n    });\n  }\n\n  if (options.dryRun) {\n    logFinishedStep(\n      `Would have claimed preview deployment for \"${previewName}\"`,\n    );\n    await runCommand(ctx, {\n      cmdUrlEnvVarName: options.cmdUrlEnvVarName,\n      cmd: options.cmd,\n      dryRun: !!options.dryRun,\n      url: \"https://<PREVIEW DEPLOYMENT>.convex.cloud\",\n      adminKey: \"preview-deployment-admin-key\",\n    });\n    logFinishedStep(\n      `Would have deployed Convex functions to preview deployment for \"${previewName}\"`,\n    );\n    if (options.previewRun !== undefined) {\n      logMessage(`Would have run function \"${options.previewRun}\"`);\n    }\n    return;\n  }\n  const data = await bigBrainAPI({\n    ctx,\n    method: \"POST\",\n    path: \"claim_preview_deployment\",\n    data: {\n      projectSelection: deploymentSelection.projectSelection,\n      identifier: previewName,\n      reuse: options.reuse,\n    },\n  });\n\n  const previewAdminKey = data.adminKey;\n  const previewUrl = data.instanceUrl;\n\n  // Extract deployment name from URL for WorkOS provisioning\n  const deploymentNameForWorkOS = extractDeploymentNameForWorkOS(previewUrl);\n\n  announceDeploymentTarget(\"Deploying code to deployment:\", {\n    url: previewUrl,\n    deploymentFields: {\n      deploymentName: data.deploymentName,\n      deploymentType: \"preview\",\n      teamSlug: deploymentSelection.projectSelection.teamSlug,\n      projectSlug: deploymentSelection.projectSelection.projectSlug,\n      reference: data.reference,\n      // Preview deployments are never default\n      isDefault: false,\n    },\n  });\n\n  // Provision WorkOS before building the client bundle (if configured)\n  const { projectConfig } = await readProjectConfig(ctx);\n  const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n\n  if (authKitConfig && deploymentNameForWorkOS && !options.skipWorkosCheck) {\n    await ensureAuthKitProvisionedBeforeBuild(\n      ctx,\n      deploymentNameForWorkOS,\n      { deploymentUrl: previewUrl, adminKey: previewAdminKey },\n      \"preview\",\n    );\n  }\n\n  await runCommand(ctx, {\n    ...options,\n    url: previewUrl,\n    adminKey: previewAdminKey,\n  });\n\n  const pushOptions: PushOptions = {\n    deploymentName: data.deploymentName,\n    deploymentType: \"preview\",\n    adminKey: previewAdminKey,\n    verbose: !!options.verbose,\n    dryRun: false,\n    typecheck: options.typecheck,\n    typecheckComponents: options.typecheckComponents,\n    debug: !!options.debug,\n    debugBundlePath: options.debugBundlePath,\n    debugNodeApis: false,\n    codegen: options.codegen === \"enable\",\n    url: previewUrl,\n    liveComponentSources: false,\n    pushAllModules: !!options.pushAllModules,\n    largeIndexDeletionCheck: \"no verification\", // fine for preview deployments\n    // A freshly claimed preview has no data to backfill. A reused one keeps\n    // the data earlier pushes wrote, so an unstaged index there can block\n    // the deploy like on any other deployment.\n    largeIndexBackfillCheck: data.isNewDeployment\n      ? \"no verification\"\n      : options.skipLargeIndexesCheck\n        ? \"has confirmation\"\n        : \"ask for confirmation\",\n    // Staged validation on throwaway preview data is cheap to redo, so\n    // discarding it needs no confirmation.\n    stagedValidatorDeletionCheck: \"no verification\",\n    warnOnSlowSchemaValidation: true,\n    message: options.message,\n  };\n  showSpinner(`Deploying to ${previewUrl}...`);\n  await runPush(ctx, pushOptions);\n  logFinishedStep(`Deployed Convex functions to ${previewUrl}`);\n\n  if (options.previewRun !== undefined && data.isNewDeployment) {\n    await runFunctionAndLog(ctx, {\n      deploymentUrl: previewUrl,\n      adminKey: previewAdminKey,\n      functionName: options.previewRun,\n      argsString: \"{}\",\n      componentPath: undefined,\n      callbacks: {\n        onSuccess: () => {\n          logFinishedStep(`Finished running function \"${options.previewRun}\"`);\n        },\n      },\n    });\n  }\n}\n\nasync function deployToExistingDeployment(\n  ctx: Context,\n  deploymentSelection: DeploymentSelection,\n  options: {\n    verbose?: boolean | undefined;\n    dryRun?: boolean | undefined;\n    yes?: boolean | undefined;\n    typecheck: \"enable\" | \"try\" | \"disable\";\n    typecheckComponents: boolean;\n    codegen: \"enable\" | \"disable\";\n    cmd?: string | undefined;\n    cmdUrlEnvVarName?: string | undefined;\n    pushAllModules?: boolean;\n\n    debugBundlePath?: string | undefined;\n    debug?: boolean | undefined;\n    adminKey?: string | undefined;\n    url?: string | undefined;\n    writePushRequest?: string | undefined;\n    liveComponentSources?: boolean | undefined;\n    envFile?: string | undefined;\n    skipWorkosCheck?: boolean | undefined;\n    skipLargeIndexesCheck: boolean;\n    allowDeletingLargeIndexes: boolean;\n    allowUnstagingSchema: boolean;\n    message: string | null;\n  },\n) {\n  const deploymentToActOn = await loadSelectedDeploymentCredentials(\n    ctx,\n    deploymentSelection,\n  );\n  announceDeploymentTarget(\"Deploying code to deployment:\", deploymentToActOn);\n  const { deploymentFields } = deploymentToActOn;\n\n  const configuredDeployment =\n    deploymentNameAndTypeFromSelection(deploymentSelection);\n  if (configuredDeployment !== null && configuredDeployment.name !== null) {\n    const shouldPushToProd =\n      configuredDeployment.name === deploymentFields?.deploymentName ||\n      (options.yes ??\n        (await askToConfirmPush(\n          ctx,\n          {\n            configuredName: configuredDeployment.name,\n            configuredType: configuredDeployment.type,\n            requestedName: deploymentFields?.deploymentName!,\n            requestedType: deploymentFields?.deploymentType!,\n          },\n          deploymentToActOn.url,\n        )));\n    if (!shouldPushToProd) {\n      await ctx.crash({\n        exitCode: 1,\n        printedMessage: null,\n        errorType: \"fatal\",\n      });\n    }\n  }\n\n  const isCloudDeployment = deploymentFields !== null;\n  await Promise.all([\n    deployToDeployment(\n      ctx,\n      {\n        url: deploymentToActOn.url,\n        adminKey: deploymentToActOn.adminKey,\n        deploymentName: deploymentFields?.deploymentName ?? null,\n        ...(deploymentFields?.deploymentType !== undefined\n          ? { deploymentType: deploymentFields.deploymentType }\n          : {}),\n      },\n      { ...options, skipWorkosCheck: options.skipWorkosCheck },\n    ),\n    ...(isCloudDeployment\n      ? [\n          usageStateWarning(ctx, deploymentFields.deploymentName),\n          checkVersionAndAiFilesStaleness(ctx),\n        ]\n      : []),\n  ]);\n}\n\nasync function askToConfirmPush(\n  ctx: Context,\n  deployment: {\n    configuredName: string;\n    configuredType: string | null;\n    requestedName: string;\n    requestedType: string;\n  },\n  prodUrl: string,\n) {\n  logMessage(\n    `\\\nYou're currently developing against your ${chalkStderr.bold(\n      deployment.configuredType ?? \"dev\",\n    )} deployment\n\n  ${deployment.configuredName} (set in CONVEX_DEPLOYMENT)\n\nYour ${chalkStderr.bold(deployment.requestedType)} deployment ${chalkStderr.bold(\n      deployment.requestedName,\n    )} serves traffic at:\n\n  ${(await suggestedEnvVarNames(ctx)).convexUrlEnvVar}=${chalkStderr.bold(prodUrl)}\n\nMake sure that your published client is configured with this URL (for instructions see https://docs.convex.dev/hosting)\\n`,\n  );\n  return promptYesNo(ctx, {\n    message: `Do you want to push your code to your ${deployment.requestedType} deployment ${deployment.requestedName} now?`,\n    default: true,\n  });\n}\n", "import { ChalkInstance } from \"chalk\";\nimport { logMessage } from \"../../bundler/log.js\";\nimport { chalkStderr } from \"chalk\";\nimport {\n  deploymentDashboardUrl,\n  deploymentDashboardUrlPage,\n} from \"./dashboard.js\";\nimport type { DeploymentType, DetailedDeploymentCredentials } from \"./api.js\";\n\ntype AnnouncedDeployment = Omit<DetailedDeploymentCredentials, \"adminKey\">;\n\nfunction stylesFor(dtype: DeploymentType | null): {\n  label: string;\n\n  bg: string;\n  fg: string;\n  bar: string;\n} {\n  switch (dtype) {\n    case \"prod\":\n      return {\n        label: \"Production\",\n        bg: \"#eacae7\",\n        fg: \"#641aa9\",\n        bar: \"#8b21f1\",\n      };\n    case \"dev\":\n      return {\n        label: \"Development\",\n        bg: \"#d2ecbb\",\n        fg: \"#2b6536\",\n        bar: \"#3ea34b\",\n      };\n    case \"local\":\n      return {\n        label: \"Local\",\n        bg: \"#d2ecbb\",\n        fg: \"#2b6536\",\n        bar: \"#3ea34b\",\n      };\n    case \"anonymous\":\n      return {\n        label: \"Local\",\n        bg: \"#d2ecbb\",\n        fg: \"#2b6536\",\n        bar: \"#3ea34b\",\n      };\n    case \"preview\":\n      return {\n        label: \"Preview\",\n        bg: \"#fcedd7\",\n        fg: \"#933615\",\n        bar: \"#e25706\",\n      };\n    case \"custom\":\n      return {\n        label: \"Custom\",\n        bg: \"#dfe2e9\",\n        fg: \"#292b30\",\n        bar: \"#989aa3\",\n      };\n    case null:\n      // Self-hosted / --url + --admin-key\n      return {\n        label: \"\",\n        bg: \"#dfe2e9\",\n        fg: \"#292b30\",\n        bar: \"#989aa3\",\n      };\n    default:\n      dtype satisfies never;\n      return {\n        label: \"Unknown\",\n        bg: \"#dfe2e9\",\n        fg: \"#292b30\",\n        bar: \"#989aa3\",\n      };\n  }\n}\n\nfunction osc8Link(text: string, url: string): string {\n  if (!process.stderr.isTTY) return text;\n  return `\\x1b]8;;${url}\\x1b\\\\${text}\\x1b]8;;\\x1b\\\\`;\n}\n\nexport type DeploymentAnnouncementHeader =\n  | \"Developing against deployment:\"\n  | \"Showing logs of deployment:\"\n  | \"Deploying code to deployment:\"\n  | null;\n\nexport function formatTargetedDeployment(\n  header: DeploymentAnnouncementHeader,\n  creds: AnnouncedDeployment,\n  chalk: ChalkInstance,\n): string {\n  const fields = creds.deploymentFields;\n\n  const style = stylesFor(fields?.deploymentType ?? null);\n  const bar = chalk.hex(style.bar)(\"\u258C\");\n  const tag =\n    chalk.level > 0\n      ? chalk.bold.bgHex(style.bg).hex(style.fg)(` ${style.label} `)\n      : `[${style.label}]`;\n  const urlStyled = chalk.dim.underline(osc8Link(creds.url, creds.url));\n\n  const dashUrl = dashboardUrlFor(fields);\n  const dashboardSuffix = dashUrl\n    ? process.stderr.isTTY\n      ? ` (${osc8Link(chalk.underline(\"dashboard\"), dashUrl)})`\n      : ` (dashboard: ${dashUrl})`\n    : \"\";\n\n  let refLine: string | null;\n  if (fields === null) {\n    refLine = null;\n  } else if (fields.deploymentType === \"local\") {\n    const port = portFromUrl(creds.url);\n    const portPart = port !== null ? `Port ${chalk.bold(port)}` : creds.url;\n    const projectPart =\n      fields.teamSlug && fields.projectSlug\n        ? ` \u2022 in ${fields.teamSlug}${chalk.dim(\":\")}${fields.projectSlug}`\n        : \"\";\n    refLine = `${tag} ${portPart}${projectPart}${dashboardSuffix}`;\n  } else if (fields.deploymentType === \"anonymous\") {\n    const port = portFromUrl(creds.url);\n    const portPart = port !== null ? `Port ${chalk.bold(port)}` : creds.url;\n    refLine = `${tag} ${portPart} \u2022 No Convex account (run ${chalk.bold(\"npx convex login\")} to link to a project)`;\n  } else {\n    // We display the deployment using the `team:project:ref`\n    // syntax so that users can copy-paste the value when using `--deployment`.\n    const { dimPrefix, boldTail, defaultAlias } = deploymentRefFor(fields);\n    const aliasPart =\n      defaultAlias === null\n        ? \"\"\n        : ` ${chalk.dim(\"(\")}${chalk.bold(defaultAlias)}${chalk.dim(\")\")}`;\n    refLine = `${tag} ${chalk.dim(dimPrefix)}${chalk.bold(boldTail)}${aliasPart}${dashboardSuffix}`;\n  }\n\n  return [\n    header === null ? null : `${bar} ${header}`,\n    refLine === null ? null : `${bar} ${refLine}`,\n    `${bar} ${chalk.dim(\"\u2514\u2500\")} ${urlStyled}`,\n  ]\n    .filter((x) => x !== null)\n    .join(\"\\n\");\n}\n\nfunction portFromUrl(url: string): string | null {\n  try {\n    const parsed = new URL(url);\n    return parsed.port || null;\n  } catch {\n    return null;\n  }\n}\n\nexport function announceDeploymentTarget(\n  header: DeploymentAnnouncementHeader,\n  creds: AnnouncedDeployment,\n) {\n  logMessage(formatTargetedDeployment(header, creds, chalkStderr));\n}\n\nfunction deploymentRefFor(\n  fields: DetailedDeploymentCredentials[\"deploymentFields\"] | null,\n): {\n  dimPrefix: string;\n  boldTail: string;\n  // For default dev/prod deployments, the short-form alias to append after\n  // the reference in parens (e.g. \"dev\" or \"prod\"). `null` otherwise.\n  defaultAlias: \"dev\" | \"prod\" | null;\n} {\n  if (fields === null) {\n    return { dimPrefix: \"\", boldTail: \"\", defaultAlias: null };\n  }\n  if (fields.deploymentType === \"local\") {\n    return { dimPrefix: \"\", boldTail: \"local\", defaultAlias: null };\n  }\n  const isCloud =\n    fields.deploymentType === \"dev\" ||\n    fields.deploymentType === \"preview\" ||\n    fields.deploymentType === \"prod\" ||\n    fields.deploymentType === \"custom\";\n  if (isCloud && fields.teamSlug && fields.projectSlug && fields.reference) {\n    const defaultAlias =\n      fields.isDefault &&\n      (fields.deploymentType === \"dev\" || fields.deploymentType === \"prod\")\n        ? fields.deploymentType\n        : null;\n    return {\n      dimPrefix: `${fields.teamSlug}:${fields.projectSlug}:`,\n      boldTail: fields.reference,\n      defaultAlias,\n    };\n  }\n  return { dimPrefix: \"\", boldTail: fields.deploymentName, defaultAlias: null };\n}\n\nfunction dashboardUrlFor(\n  fields: DetailedDeploymentCredentials[\"deploymentFields\"] | null,\n): string | null {\n  if (fields === null || fields.deploymentType === \"anonymous\") {\n    return null;\n  }\n  if (fields.teamSlug && fields.projectSlug) {\n    return deploymentDashboardUrl(\n      fields.teamSlug,\n      fields.projectSlug,\n      fields.deploymentName,\n    );\n  }\n  return deploymentDashboardUrlPage(fields.deploymentName, \"\");\n}\n", "import { chalkStderr } from \"chalk\";\nimport { Context } from \"../../bundler/context.js\";\nimport { logVerbose, logWarning } from \"../../bundler/log.js\";\nimport { teamDashboardUrl } from \"./dashboard.js\";\nimport { fetchTeamAndProject } from \"./api.js\";\nimport { isAnonymousDeployment } from \"./deployment.js\";\nimport { bigBrainAPIMaybeThrows } from \"./utils/utils.js\";\n\nasync function warn(\n  ctx: Context,\n  options: { title: string; subtitle: string; teamSlug: string },\n) {\n  const { title, subtitle, teamSlug } = options;\n  logWarning(chalkStderr.bold.yellow(title));\n  logWarning(chalkStderr.yellow(subtitle));\n  logWarning(\n    chalkStderr.yellow(`Visit ${teamDashboardUrl(teamSlug)} to learn more.`),\n  );\n}\n\nasync function teamUsageState(ctx: Context, teamId: number) {\n  const { usageState } = (await bigBrainAPIMaybeThrows({\n    ctx,\n    method: \"GET\",\n    path: \"dashboard/teams/\" + teamId + \"/usage/team_usage_state\",\n  })) as {\n    usageState: \"Default\" | \"Approaching\" | \"Exceeded\" | \"Disabled\" | \"Paused\";\n  };\n\n  return usageState;\n}\n\nasync function teamSpendingLimitsState(ctx: Context, teamId: number) {\n  const response = (await bigBrainAPIMaybeThrows({\n    ctx,\n    method: \"GET\",\n    path: \"dashboard/teams/\" + teamId + \"/get_spending_limits\",\n  })) as {\n    disableThresholdCents: number | null;\n    state: null | \"Running\" | \"Disabled\" | \"Warning\";\n  };\n\n  return response.state;\n}\n\nexport async function usageStateWarning(\n  ctx: Context,\n  targetDeployment: string,\n) {\n  // Skip the warning if the user doesn\u2019t have an auth token\n  // (which can happen for instance when using a deploy key)\n  const auth = ctx.bigBrainAuth();\n  if (\n    auth === null ||\n    auth.kind === \"projectKey\" ||\n    auth.kind === \"deploymentKey\" ||\n    process.env.CONVEX_AGENT_MODE === \"anonymous\" ||\n    isAnonymousDeployment(targetDeployment)\n  ) {\n    return;\n  }\n\n  const { teamId, team } = await fetchTeamAndProject(ctx, targetDeployment);\n\n  let usageState: Awaited<ReturnType<typeof teamUsageState>>;\n  let spendingLimitsState: Awaited<ReturnType<typeof teamSpendingLimitsState>>;\n  try {\n    [usageState, spendingLimitsState] = await Promise.all([\n      teamUsageState(ctx, teamId),\n      teamSpendingLimitsState(ctx, teamId),\n    ]);\n  } catch (err) {\n    // Non-fatal: usage warnings are advisory, so don't block `convex dev`\n    // if these endpoints error.\n    logVerbose(\"Skipping usage state warning:\", err);\n    return;\n  }\n  if (spendingLimitsState === \"Disabled\") {\n    await warn(ctx, {\n      title:\n        \"Your projects are disabled because you exceeded your spending limit.\",\n      subtitle: \"Increase it from the dashboard to re-enable your projects.\",\n      teamSlug: team,\n    });\n  } else if (usageState === \"Approaching\") {\n    await warn(ctx, {\n      title: \"Your projects are approaching the Free plan limits.\",\n      subtitle: \"Consider upgrading to avoid service interruption.\",\n      teamSlug: team,\n    });\n  } else if (usageState === \"Exceeded\") {\n    await warn(ctx, {\n      title: \"Your projects are above the Free plan limits.\",\n      subtitle: \"Decrease your usage or upgrade to avoid service interruption.\",\n      teamSlug: team,\n    });\n  } else if (usageState === \"Disabled\") {\n    await warn(ctx, {\n      title:\n        \"Your projects are disabled because the team exceeded Free plan limits.\",\n      subtitle: \"Decrease your usage or upgrade to reenable your projects.\",\n      teamSlug: team,\n    });\n  } else if (usageState === \"Paused\") {\n    await warn(ctx, {\n      title:\n        \"Your projects are disabled because the team previously exceeded Free plan limits.\",\n      subtitle: \"Restore your projects by going to the dashboard.\",\n      teamSlug: team,\n    });\n  }\n}\n", "import path from \"path\";\nimport { logMessage } from \"../../bundler/log.js\";\nimport type { Context } from \"../../bundler/context.js\";\nimport { readProjectConfig } from \"./config.js\";\nimport { functionsDir } from \"./utils/utils.js\";\nimport {\n  checkAiFilesStalenessAndLog,\n  isAiFilesDisabled,\n} from \"./aiFiles/index.js\";\nimport { getVersion } from \"./versionApi.js\";\n\n/**\n * Fetch the latest version data, log any server nag message, and warn if\n * Convex AI files are out of date. Both checks share the one getVersion()\n * round-trip.\n */\nexport async function checkVersionAndAiFilesStaleness(ctx: Context) {\n  const version = await getVersion();\n  if (version.kind === \"error\") return;\n\n  if (version.data.message) logMessage(version.data.message);\n\n  try {\n    const { configPath, projectConfig } = await readProjectConfig(ctx);\n    const aiFilesConfig = projectConfig.aiFiles;\n    if (isAiFilesDisabled(aiFilesConfig)) return;\n    const convexDir = path.resolve(functionsDir(configPath, projectConfig));\n    const projectDir = path.resolve(path.dirname(configPath));\n    await checkAiFilesStalenessAndLog({\n      canonicalGuidelinesHash: version.data.guidelinesHash,\n      canonicalAgentSkillsSha: version.data.agentSkillsSha,\n      aiFilesConfig,\n      projectDir,\n      convexDir,\n    });\n  } catch {\n    // Non-fatal: skip staleness check if project config can't be resolved.\n  }\n}\n", "/**\n * Extract deployment name from a Convex cloud URL for WorkOS provisioning.\n * Returns the deployment name if the URL matches the expected format, null otherwise.\n */\nexport function extractDeploymentNameForWorkOS(url: string): string | null {\n  return (\n    url.match(\n      /^https:\\/\\/([a-z]+-[a-z]+-[0-9]+)\\.(?:[^.]+\\.)?convex\\.cloud$/,\n    )?.[1] ?? null\n  );\n}\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { logFinishedStep } from \"../bundler/log.js\";\nimport { announceDeploymentTarget } from \"./lib/announceDeploymentTarget.js\";\nimport {\n  DeploymentSelection,\n  getDeploymentSelection,\n  deploymentNameFromSelection,\n} from \"./lib/deploymentSelection.js\";\nimport {\n  parseDeploymentSelector,\n  ParsedDeploymentSelector,\n} from \"./lib/deploymentSelector.js\";\nimport {\n  deploymentUrlForApplicationEnv,\n  updateEnvAndConfigForDeploymentSelection,\n} from \"./configure.js\";\nimport { fetchDeploymentCanonicalUrls } from \"./lib/deploy2.js\";\nimport {\n  loadProjectLocalConfig,\n  saveDeploymentConfig,\n} from \"./lib/localDeployment/filePaths.js\";\nimport {\n  checkLocalConfigMatchesProject,\n  getCloudProjectSlugsBestEffort,\n  pauseLocalDeploymentBestEffort,\n  targetProjectForLocalSelector,\n} from \"./lib/localDeployment/projectMismatch.js\";\nimport { bigBrainStart } from \"./lib/localDeployment/bigBrain.js\";\nimport { promptYesNo } from \"./lib/utils/prompts.js\";\nimport { createLocalDeployment } from \"./deploymentCreate.js\";\nimport { chalkStderr } from \"chalk\";\nimport { logWarning } from \"../bundler/log.js\";\n\nexport const deploymentSelect = new Command(\"select\")\n  .summary(\"Select the deployment to use when running commands\")\n  .description(\n    [\n      \"Select the deployment to use when running commands.\",\n      \"\",\n      \"The deployment will be used by all `npx convex` commands, except `npx convex deploy`. You can also run individual commands on another deployment by using the --deployment flag on that command.\",\n      \"\",\n      \"\u2022 Select your personal cloud dev deployment in the current project: `npx convex deployment select dev`\",\n      \"\u2022 Select your local deployment: `npx convex deployment select local`\",\n      \"\u2022 Select a deployment in the same project by its reference: `npx convex deployment select dev/james`\",\n      \"\u2022 Select a deployment in another project in the same team: `npx convex deployment select some-project:dev/james`\",\n      \"\u2022 Select a deployment in a particular team/project: `npx convex deployment select some-team:some-project:dev/james`\",\n    ].join(\"\\n\"),\n  )\n  .argument(\"<deployment>\", \"The deployment to use\")\n  .allowExcessArguments(false)\n  .action(async (selector) => {\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n\n    // Get the current deployment selection (no flags, just env/config state)\n    const currentSelection = await getDeploymentSelection(ctx, {});\n\n    const parsed = parseDeploymentSelector(selector);\n    const isLocalSelector = isLocalDeploymentSelector(parsed);\n\n    // If no project is configured and the selector needs project context, show a specific error\n    if (\n      currentSelection.kind === \"chooseProject\" &&\n      parsed.kind !== \"inTeamProject\" &&\n      parsed.kind !== \"deploymentName\" &&\n      !isLocalSelector\n    ) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `No project configured. Run \\`npx convex dev\\` to set up a project first, or use a full selector like 'my-team:my-project:dev/james' or 'happy-capybara-123'.`,\n      });\n    }\n\n    if (isLocalSelector) {\n      await handleLocalSelect(ctx, selector, parsed, currentSelection);\n      return;\n    }\n\n    // Resolve the new deployment using the selector relative to the current project\n    const newSelection = await getDeploymentSelection(ctx, {\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n      deployment: selector,\n    });\n\n    const deployment = await saveSelectedDeployment(\n      ctx,\n      selector,\n      newSelection,\n      deploymentNameFromSelection(currentSelection),\n    );\n    logFinishedStep(\"Selected deployment:\");\n    announceDeploymentTarget(null, deployment);\n  });\n\nfunction isLocalDeploymentSelector(parsed: ParsedDeploymentSelector): boolean {\n  return (\n    (parsed.kind === \"inCurrentProject\" ||\n      parsed.kind === \"inProject\" ||\n      parsed.kind === \"inTeamProject\") &&\n    parsed.selector.kind === \"local\"\n  );\n}\n\nasync function handleLocalSelect(\n  ctx: Context,\n  selector: string,\n  parsed: ParsedDeploymentSelector,\n  currentSelection: DeploymentSelection,\n): Promise<void> {\n  const existing = loadProjectLocalConfig(ctx);\n\n  if (existing === null) {\n    // No local deployment on disk. Offer to create one (interactive only).\n    if (!process.stdin.isTTY) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `No local deployment found. Run ${chalkStderr.bold(\"npx convex deployment create local\")} to create one.`,\n      });\n    }\n    if (\n      currentSelection.kind === \"chooseProject\" &&\n      parsed.kind !== \"inTeamProject\"\n    ) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `No project configured. Run \\`npx convex dev\\` to set up a project first.`,\n      });\n    }\n\n    // Refusing to create a project if the user didn\u2019t explicitly specify a team.\n    if (parsed.kind === \"inProject\") {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `No local deployment found. To create one in ${chalkStderr.bold(parsed.projectSlug)}, run ${chalkStderr.bold(`npx convex deployment create local --project ${parsed.projectSlug}`)}, or use a fully qualified selector like ${chalkStderr.bold(`my-team:${parsed.projectSlug}:local`)}.`,\n      });\n    }\n\n    const wantsToCreate = await promptYesNo(ctx, {\n      message: \"No local deployment found. Create one now?\",\n      default: true,\n    });\n    if (!wantsToCreate) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `No local deployment found. Run ${chalkStderr.bold(\"npx convex deployment create local\")} to create one.`,\n      });\n    }\n    const teamAndProject = teamAndProjectFromParsed(parsed);\n    await createLocalDeployment(ctx, currentSelection, true, teamAndProject);\n    return;\n  }\n\n  // Resolve the target cloud project the user is asking about\n  const target = await targetProjectForLocalSelector(\n    ctx,\n    parsed,\n    currentSelection,\n  );\n\n  let resolvedDeploymentName = existing.deploymentName;\n\n  if (target !== null) {\n    const match = checkLocalConfigMatchesProject(ctx, existing.config, target);\n    if (match === \"mismatch\") {\n      // The on-disk local deployment is tied to a different cloud project.\n      // Move it to the new project (warn, pause old, re-register).\n      const oldProjectId = existing.config.cloudProjectId!;\n      const oldProject = await getCloudProjectSlugsBestEffort(\n        ctx,\n        oldProjectId,\n      );\n      const oldProjectLabel =\n        oldProject !== null\n          ? `project ${chalkStderr.bold(`${oldProject.teamSlug}:${oldProject.slug}`)}`\n          : `an unknown cloud project (ID ${oldProjectId})`;\n      logWarning(\n        chalkStderr.yellow(\n          `\u26A0\uFE0F This local deployment was previously in ${oldProjectLabel}. Moving it to project ${chalkStderr.bold(`${target.teamSlug}:${target.slug}`)}.`,\n        ),\n      );\n      await pauseLocalDeploymentBestEffort(ctx, oldProject);\n      const { deploymentName: newDeploymentName } = await bigBrainStart(ctx, {\n        port: existing.config.ports.cloud,\n        teamSlug: target.teamSlug,\n        projectSlug: target.slug,\n        instanceName: null,\n      });\n      saveDeploymentConfig(ctx, \"local\", newDeploymentName, {\n        ...existing.config,\n        cloudProjectId: target.id,\n      });\n      resolvedDeploymentName = newDeploymentName;\n    } else if (match === \"skip\") {\n      // The on-disk config has no `cloudProjectId` \u2014 write the resolved id back\n      // so future invocations have it.\n      saveDeploymentConfig(ctx, \"local\", existing.deploymentName, {\n        ...existing.config,\n        cloudProjectId: target.id,\n      });\n    }\n  }\n\n  const newSelection: DeploymentSelection = {\n    kind: \"deploymentWithinProject\",\n    targetProject: {\n      kind: \"deploymentName\",\n      deploymentName: resolvedDeploymentName,\n      deploymentType: \"local\",\n    },\n    selectionWithinProject: {\n      kind: \"deploymentSelector\",\n      selector,\n    },\n  };\n  await saveSelectedDeployment(\n    ctx,\n    selector,\n    newSelection,\n    deploymentNameFromSelection(currentSelection),\n  );\n}\n\nfunction teamAndProjectFromParsed(\n  parsed: ParsedDeploymentSelector,\n): { teamSlug: string; projectSlug: string } | null {\n  if (parsed.kind === \"inTeamProject\") {\n    return { teamSlug: parsed.teamSlug, projectSlug: parsed.projectSlug };\n  }\n  return null;\n}\n\nexport async function saveSelectedDeployment(\n  ctx: Context,\n  selector: string,\n  selection: DeploymentSelection,\n  previousDeploymentName: string | null,\n) {\n  const deployment = await loadSelectedDeploymentCredentials(ctx, selection, {\n    ensureLocalRunning: false,\n  });\n\n  if (deployment.deploymentFields === null) {\n    // Should be unreachable since for now, `select` only allows users\n    // to select deployments that exist in Big Brain\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: null,\n      errForSentry: `Unexpected selection in select: ${JSON.stringify(deployment)}`,\n    });\n  }\n\n  if (deployment.deploymentFields.deploymentType === \"prod\") {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `Selecting a production deployment is unsupported. To run commands on a production deployment, pass the ${chalkStderr.bold(`--deployment ${selector}`)} flag to each command.`,\n    });\n  }\n\n  const { convexCloudUrl, convexSiteUrl: siteUrl } =\n    deployment.deploymentFields.deploymentType === \"local\"\n      ? { convexCloudUrl: deployment.url, convexSiteUrl: null }\n      : await fetchDeploymentCanonicalUrls(ctx, {\n          adminKey: deployment.adminKey,\n          deploymentUrl: deployment.url,\n        });\n\n  await updateEnvAndConfigForDeploymentSelection(\n    ctx,\n    {\n      url: deploymentUrlForApplicationEnv(deployment, convexCloudUrl),\n      siteUrl,\n      deploymentName: deployment.deploymentFields.deploymentName,\n      teamSlug: deployment.deploymentFields.teamSlug,\n      projectSlug: deployment.deploymentFields.projectSlug,\n      deploymentType: deployment.deploymentFields.deploymentType,\n    },\n    previousDeploymentName,\n  );\n\n  return deployment;\n}\n", "import { chalkStderr } from \"chalk\";\nimport { Context } from \"../bundler/context.js\";\nimport {\n  logFailure,\n  logFinishedStep,\n  logMessage,\n  logWarning,\n  showSpinner,\n} from \"../bundler/log.js\";\nimport {\n  DeploymentType,\n  DeploymentName,\n  fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows,\n  createProject,\n  loadSelectedDeploymentCredentials,\n  checkAccessToSelectedProject,\n  DeploymentSelectionWithinProject,\n} from \"./lib/api.js\";\nimport { readProjectConfig, ensureConvexFunctionsDir } from \"./lib/config.js\";\nimport {\n  DeploymentDetails,\n  eraseDeploymentEnvVar,\n  writeDeploymentEnvVar,\n} from \"./lib/deployment.js\";\nimport { finalizeConfiguration } from \"./lib/init.js\";\nimport {\n  CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n  functionsDir,\n  hasProjects,\n  logAndHandleFetchError,\n  selectDevDeploymentType,\n  selectRegionOrUseDefault,\n  validateOrSelectProject,\n  validateOrSelectTeam,\n} from \"./lib/utils/utils.js\";\nimport { writeUrlsToEnvFile } from \"./lib/envvars.js\";\nimport path from \"path\";\nimport { projectDashboardUrl } from \"./lib/dashboard.js\";\nimport { doInitConvexFolder } from \"./lib/codegen.js\";\nimport { handleLocalDeployment } from \"./lib/localDeployment/localDeployment.js\";\nimport {\n  promptOptions,\n  promptString,\n  promptYesNo,\n} from \"./lib/utils/prompts.js\";\nimport { attemptSetupAiFiles } from \"./lib/aiFiles/index.js\";\nimport {\n  DeploymentSelection,\n  deploymentNameFromSelection,\n  shouldAllowAnonymousDevelopment,\n} from \"./lib/deploymentSelection.js\";\nimport { ensureLoggedIn } from \"./lib/login.js\";\nimport { handleAnonymousDeployment } from \"./lib/localDeployment/anonymous.js\";\nimport { fetchDeploymentCanonicalUrls } from \"./lib/deploy2.js\";\ntype DeploymentCredentials = {\n  url: string;\n  adminKey: string;\n};\n\ntype ChosenConfiguration =\n  // `--configure new`\n  | \"new\"\n  // `--configure existing`\n  | \"existing\"\n  // `--configure`\n  | \"ask\"\n  // `--configure` was not specified\n  | null;\n\ntype ConfigureCmdOptions = {\n  prod: boolean;\n  localOptions: {\n    ports: {\n      cloud: number | undefined;\n      site: number | undefined;\n    };\n    backendVersion?: string | undefined;\n    dashboardVersion?: string | undefined;\n    forceUpgrade: boolean;\n  };\n  team?: string | undefined;\n  project?: string | undefined;\n  devDeployment?: \"cloud\" | \"local\" | undefined;\n  url?: string | undefined;\n  adminKey?: string | undefined;\n  envFile?: string | undefined;\n  overrideAuthUrl?: string | undefined;\n  overrideAuthClient?: string | undefined;\n  overrideAuthUsername?: string | undefined;\n  overrideAuthPassword?: string | undefined;\n};\n\n/**\n * As of writing, this is used by:\n * - `npx convex dev`\n * - `npx convex init`\n *\n * But is not used by `npx convex deploy`, `npx convex codegen`,\n * `npx convex env`, or other commands.\n */\nexport async function deploymentCredentialsOrConfigure(\n  ctx: Context,\n  deploymentSelection: DeploymentSelection,\n  chosenConfiguration: ChosenConfiguration,\n  cmdOptions: ConfigureCmdOptions,\n): Promise<\n  DeploymentCredentials & {\n    deploymentFields: {\n      deploymentName: DeploymentName;\n      deploymentType: DeploymentType;\n      projectSlug: string | null;\n      teamSlug: string | null;\n      siteUrl: string | null;\n      reference: string | null;\n      isDefault: boolean;\n    } | null;\n  }\n> {\n  const selectedDeployment = await _deploymentCredentialsOrConfigure(\n    ctx,\n    deploymentSelection,\n    chosenConfiguration,\n    cmdOptions,\n  );\n  const { convexCloudUrl, convexSiteUrl: siteUrl } =\n    await fetchDeploymentCanonicalUrls(ctx, {\n      adminKey: selectedDeployment.adminKey,\n      deploymentUrl: selectedDeployment.url,\n    });\n  const applicationUrl = deploymentUrlForApplicationEnv(\n    selectedDeployment,\n    convexCloudUrl,\n  );\n\n  if (selectedDeployment.deploymentFields !== null) {\n    // Set the `CONVEX_DEPLOYMENT` env var + the `CONVEX_URL` env var\n    await updateEnvAndConfigForDeploymentSelection(\n      ctx,\n      {\n        url: applicationUrl,\n        siteUrl,\n        deploymentName: selectedDeployment.deploymentFields.deploymentName,\n        teamSlug: selectedDeployment.deploymentFields.teamSlug,\n        projectSlug: selectedDeployment.deploymentFields.projectSlug,\n        deploymentType: selectedDeployment.deploymentFields.deploymentType,\n      },\n      deploymentNameFromSelection(deploymentSelection),\n    );\n  } else {\n    // Clear the `CONVEX_DEPLOYMENT` env var + set the `CONVEX_URL` and\n    // `CONVEX_SITE_URL` env vars.\n    await handleManuallySetUrlAndAdminKey(ctx, {\n      url: selectedDeployment.url,\n      siteUrl,\n      adminKey: selectedDeployment.adminKey,\n    });\n  }\n  return {\n    url: selectedDeployment.url,\n    adminKey: selectedDeployment.adminKey,\n    deploymentFields:\n      selectedDeployment.deploymentFields === null\n        ? null\n        : { ...selectedDeployment.deploymentFields, siteUrl: siteUrl },\n  };\n}\n\nexport function deploymentUrlForApplicationEnv(\n  selectedDeployment: {\n    url: string;\n    deploymentFields: { deploymentType: DeploymentType } | null;\n  },\n  canonicalCloudUrl: string,\n): string {\n  const deploymentType = selectedDeployment.deploymentFields?.deploymentType;\n  return deploymentType !== undefined &&\n    deploymentType !== \"local\" &&\n    deploymentType !== \"anonymous\"\n    ? canonicalCloudUrl\n    : selectedDeployment.url;\n}\n\nexport async function _deploymentCredentialsOrConfigure(\n  ctx: Context,\n  deploymentSelection: DeploymentSelection,\n  chosenConfiguration: ChosenConfiguration,\n  cmdOptions: ConfigureCmdOptions,\n): Promise<\n  DeploymentCredentials & {\n    deploymentFields: {\n      deploymentName: DeploymentName;\n      deploymentType: DeploymentType;\n      projectSlug: string | null;\n      teamSlug: string | null;\n      reference: string | null;\n      isDefault: boolean;\n    } | null;\n  }\n> {\n  switch (deploymentSelection.kind) {\n    case \"existingDeployment\":\n      await assertLocalOptionsAreDefault(ctx, cmdOptions.localOptions);\n      return {\n        url: deploymentSelection.deploymentToActOn.url,\n        adminKey: deploymentSelection.deploymentToActOn.adminKey,\n        deploymentFields:\n          deploymentSelection.deploymentToActOn.deploymentFields,\n      };\n    case \"chooseProject\": {\n      await ensureLoggedIn(ctx, {\n        overrideAuthUrl: cmdOptions.overrideAuthUrl,\n        overrideAuthClient: cmdOptions.overrideAuthClient,\n        overrideAuthUsername: cmdOptions.overrideAuthUsername,\n        overrideAuthPassword: cmdOptions.overrideAuthPassword,\n      });\n      return await handleChooseProject(\n        ctx,\n        chosenConfiguration,\n        deploymentSelection.selectionWithinProject,\n        cmdOptions,\n      );\n    }\n    case \"preview\":\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: \"Use `npx convex deploy` to use preview deployments.\",\n      });\n    case \"deploymentWithinProject\": {\n      return await handleDeploymentWithinProject(ctx, {\n        chosenConfiguration,\n        deploymentSelection,\n        cmdOptions,\n      });\n    }\n    case \"anonymous\": {\n      const hasAuth = ctx.bigBrainAuth() !== null;\n      const isAgentMode = process.env.CONVEX_AGENT_MODE === \"anonymous\";\n      if (\n        !isAgentMode &&\n        process.stdin.isTTY &&\n        hasAuth &&\n        deploymentSelection.deploymentName !== null\n      ) {\n        const shouldConfigure =\n          chosenConfiguration !== null ||\n          (await promptYesNo(ctx, {\n            message: `${CONVEX_DEPLOYMENT_ENV_VAR_NAME} is configured with deployment ${deploymentSelection.deploymentName}, which is not linked with your account. Would you like to link it now?`,\n          }));\n        if (shouldConfigure) {\n          return await handleChooseProject(\n            ctx,\n            chosenConfiguration,\n            deploymentSelection.selectionWithinProject,\n            cmdOptions,\n          );\n        }\n      }\n      const alreadyHasConfiguredAnonymousDeployment =\n        deploymentSelection.deploymentName !== null &&\n        chosenConfiguration === null;\n      if (isAgentMode) {\n        logWarning(\n          chalkStderr.yellow.bold(\n            \"CONVEX_AGENT_MODE=anonymous mode is in beta, functionality may change in the future.\",\n          ),\n        );\n      }\n\n      const shouldPromptForLogin =\n        isAgentMode || !process.stdin.isTTY\n          ? \"no\"\n          : alreadyHasConfiguredAnonymousDeployment\n            ? \"no\"\n            : await promptOptions(ctx, {\n                message:\n                  \"Welcome to Convex! Would you like to login to your account?\",\n                choices: [\n                  {\n                    name: \"Start without an account (run Convex locally)\",\n                    value: \"no\",\n                  },\n                  { name: \"Login or create an account\", value: \"yes\" },\n                ],\n                default: \"no\",\n              });\n      if (shouldPromptForLogin === \"no\") {\n        const result = await handleAnonymousDeployment(ctx, {\n          chosenConfiguration,\n          deploymentName: deploymentSelection.deploymentName,\n          ...cmdOptions.localOptions,\n        });\n        return {\n          adminKey: result.adminKey,\n          url: result.deploymentUrl,\n          deploymentFields: {\n            deploymentName: result.deploymentName,\n            deploymentType: \"anonymous\",\n            projectSlug: null,\n            teamSlug: null,\n            reference: null,\n            isDefault: false,\n          },\n        };\n      }\n      return await handleChooseProject(\n        ctx,\n        chosenConfiguration,\n        deploymentSelection.selectionWithinProject,\n        cmdOptions,\n      );\n    }\n  }\n}\n\nasync function handleDeploymentWithinProject(\n  ctx: Context,\n  {\n    chosenConfiguration,\n    deploymentSelection,\n    cmdOptions,\n  }: {\n    chosenConfiguration: ChosenConfiguration;\n    deploymentSelection: DeploymentSelection & {\n      kind: \"deploymentWithinProject\";\n    };\n    cmdOptions: ConfigureCmdOptions;\n  },\n) {\n  const hasAuth = ctx.bigBrainAuth() !== null;\n  const loginMessage =\n    hasAuth && shouldAllowAnonymousDevelopment()\n      ? undefined\n      : \"Tip: You can try out Convex without creating an account by clearing the \" +\n        `${CONVEX_DEPLOYMENT_ENV_VAR_NAME} environment variable (often in .env.local).`;\n  await ensureLoggedIn(ctx, {\n    message: loginMessage,\n    overrideAuthUrl: cmdOptions.overrideAuthUrl,\n    overrideAuthClient: cmdOptions.overrideAuthClient,\n    overrideAuthUsername: cmdOptions.overrideAuthUsername,\n    overrideAuthPassword: cmdOptions.overrideAuthPassword,\n  });\n  if (chosenConfiguration !== null) {\n    const result = await handleChooseProject(\n      ctx,\n      chosenConfiguration,\n      deploymentSelection.selectionWithinProject,\n      cmdOptions,\n    );\n    return result;\n  }\n\n  const accessResult = await checkAccessToSelectedProject(\n    ctx,\n    deploymentSelection.targetProject,\n  );\n  if (accessResult.kind === \"noAccess\") {\n    logMessage(\"You don't have access to the selected project.\");\n    const result = await handleChooseProject(\n      ctx,\n      chosenConfiguration,\n      deploymentSelection.selectionWithinProject,\n      cmdOptions,\n    );\n    return result;\n  }\n\n  const selectedDeployment = await loadSelectedDeploymentCredentials(\n    ctx,\n    deploymentSelection,\n    // We'll start running it below\n    { ensureLocalRunning: false },\n  );\n  if (\n    selectedDeployment.deploymentFields !== null &&\n    selectedDeployment.deploymentFields.deploymentType === \"local\"\n  ) {\n    // Start running the local backend, which may bind to different ports\n    // than what was saved from a previous run.\n    const localDeployment = await handleLocalDeployment(ctx, {\n      teamSlug: selectedDeployment.deploymentFields.teamSlug!,\n      projectSlug: selectedDeployment.deploymentFields.projectSlug!,\n      forceUpgrade: cmdOptions.localOptions.forceUpgrade,\n      ports: cmdOptions.localOptions.ports,\n      backendVersion: cmdOptions.localOptions.backendVersion,\n    });\n    return {\n      url: localDeployment.deploymentUrl,\n      adminKey: localDeployment.adminKey,\n      deploymentFields: selectedDeployment.deploymentFields,\n    };\n  }\n  await assertLocalOptionsAreDefault(ctx, cmdOptions.localOptions);\n  return {\n    url: selectedDeployment.url,\n    adminKey: selectedDeployment.adminKey,\n    deploymentFields: selectedDeployment.deploymentFields,\n  };\n}\n\nasync function handleChooseProject(\n  ctx: Context,\n  chosenConfiguration: ChosenConfiguration,\n  selectionWithinProject: DeploymentSelectionWithinProject,\n  cmdOptions: ConfigureCmdOptions,\n): Promise<\n  DeploymentCredentials & {\n    deploymentFields: {\n      deploymentName: DeploymentName;\n      deploymentType: DeploymentType;\n      projectSlug: string;\n      teamSlug: string;\n      reference: string | null;\n      isDefault: boolean;\n    };\n  }\n> {\n  await ensureLoggedIn(ctx, {\n    overrideAuthUrl: cmdOptions.overrideAuthUrl,\n    overrideAuthClient: cmdOptions.overrideAuthClient,\n    overrideAuthUsername: cmdOptions.overrideAuthUsername,\n    overrideAuthPassword: cmdOptions.overrideAuthPassword,\n  });\n  const project = await selectProject(ctx, chosenConfiguration, {\n    team: cmdOptions.team,\n    project: cmdOptions.project,\n    devDeployment: cmdOptions.devDeployment,\n  });\n  if (\n    selectionWithinProject.kind === \"prod\" ||\n    project.devDeployment !== \"local\"\n  ) {\n    await assertLocalOptionsAreDefault(ctx, cmdOptions.localOptions);\n  }\n  const deploymentOptions: DeploymentOptions =\n    selectionWithinProject.kind === \"prod\"\n      ? { kind: \"prod\" }\n      : project.devDeployment === \"local\"\n        ? { kind: \"local\", ...cmdOptions.localOptions }\n        : { kind: \"dev\" };\n  const {\n    deploymentName,\n    deploymentUrl: url,\n    adminKey,\n    reference,\n    isDefault,\n  } = await ensureDeploymentProvisioned(ctx, {\n    teamSlug: project.teamSlug,\n    projectSlug: project.projectSlug,\n    deploymentOptions,\n  });\n  return {\n    url,\n    adminKey,\n    deploymentFields: {\n      deploymentName,\n      deploymentType: deploymentOptions.kind,\n      projectSlug: project.projectSlug,\n      teamSlug: project.teamSlug,\n      reference,\n      isDefault,\n    },\n  };\n}\n\nasync function handleManuallySetUrlAndAdminKey(\n  ctx: Context,\n  cmdOptions: { url: string; siteUrl: string; adminKey: string },\n) {\n  const { url, siteUrl, adminKey } = cmdOptions;\n  const didErase = await eraseDeploymentEnvVar(ctx);\n  if (didErase) {\n    logMessage(\n      chalkStderr.yellowBright(\n        `Removed the CONVEX_DEPLOYMENT environment variable from .env.local`,\n      ),\n    );\n  }\n  const envFileConfig = await writeUrlsToEnvFile(ctx, {\n    convexUrl: url,\n    siteUrl,\n  });\n  if (\n    envFileConfig !== null &&\n    (envFileConfig.convexUrlEnvVar || envFileConfig.siteUrlEnvVar)\n  ) {\n    // Join both names with \" and \" if both exist, otherwise just use one of them.\n    const updatedVars = [\n      envFileConfig.convexUrlEnvVar,\n      envFileConfig.siteUrlEnvVar,\n    ]\n      .filter(Boolean)\n      .join(\" and \");\n    logMessage(\n      chalkStderr.green(`Saved ${updatedVars} to ${envFileConfig.envFile}`),\n    );\n  }\n  return { url, adminKey };\n}\n\nexport async function selectProject(\n  ctx: Context,\n  chosenConfiguration: ChosenConfiguration,\n  cmdOptions: {\n    team?: string | undefined;\n    project?: string | undefined;\n    devDeployment?: \"cloud\" | \"local\" | undefined;\n    defaultProjectName?: string | undefined;\n  },\n): Promise<{\n  teamSlug: string;\n  projectSlug: string;\n  devDeployment: \"cloud\" | \"local\";\n}> {\n  // Prompt the user to select a project.\n  const choice =\n    chosenConfiguration !== \"ask\" && chosenConfiguration !== null\n      ? chosenConfiguration\n      : await askToConfigure(ctx);\n  switch (choice) {\n    case \"new\":\n      return selectNewProject(ctx, chosenConfiguration, cmdOptions);\n    case \"existing\":\n      return selectExistingProject(ctx, chosenConfiguration, cmdOptions);\n    default:\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: \"No project selected.\",\n      });\n  }\n}\n\nconst cwd = path.basename(process.cwd());\nasync function selectNewProject(\n  ctx: Context,\n  chosenConfiguration: ChosenConfiguration,\n  config: {\n    team?: string | undefined;\n    project?: string | undefined;\n    devDeployment?: \"cloud\" | \"local\" | undefined;\n    defaultProjectName?: string | undefined;\n  },\n) {\n  const { team: selectedTeam, chosen: didChooseBetweenTeams } =\n    await validateOrSelectTeam(ctx, config.team, \"Team:\");\n  let projectName: string = config.project || cwd;\n  let choseProjectInteractively = false;\n  if (!config.project) {\n    projectName = await promptString(ctx, {\n      message: \"Project name:\",\n      default: config.defaultProjectName || cwd,\n    });\n    choseProjectInteractively = true;\n  }\n\n  const { devDeployment } = await selectDevDeploymentType(ctx, {\n    chosenConfiguration,\n    newOrExisting: \"new\",\n    teamSlug: selectedTeam.slug,\n    userHasChosenSomethingInteractively:\n      didChooseBetweenTeams || choseProjectInteractively,\n    projectSlug: undefined,\n    devDeploymentFromFlag: config.devDeployment,\n  });\n\n  const region =\n    devDeployment === \"cloud\"\n      ? await selectRegionOrUseDefault(ctx, selectedTeam, \"dev\")\n      : null;\n\n  showSpinner(\"Creating new Convex project...\");\n\n  const deploymentToProvision =\n    devDeployment === \"cloud\"\n      ? {\n          deploymentType: \"dev\" as const,\n          region,\n        }\n      : null;\n\n  let projectSlug;\n  try {\n    ({ projectSlug } = await createProject(ctx, {\n      teamId: selectedTeam.id,\n      projectName,\n      deploymentToProvision,\n    }));\n  } catch (err) {\n    logFailure(\"Unable to create project.\");\n    return await logAndHandleFetchError(ctx, err);\n  }\n  const teamSlug = selectedTeam.slug;\n  const teamMessage = didChooseBetweenTeams\n    ? \" in team \" + chalkStderr.bold(teamSlug)\n    : \"\";\n  logFinishedStep(\n    `Created project ${chalkStderr.bold(\n      projectSlug,\n    )}${teamMessage}, manage it at ${chalkStderr.bold(\n      projectDashboardUrl(teamSlug, projectSlug),\n    )}`,\n  );\n\n  await doInitConvexFolder(ctx);\n  const { configPath, projectConfig } = await readProjectConfig(ctx);\n  const folder = functionsDir(configPath, projectConfig);\n  await attemptSetupAiFiles({\n    ctx,\n    aiFilesConfig: projectConfig.aiFiles,\n    convexDir: path.resolve(folder),\n    projectDir: path.resolve(path.dirname(configPath)),\n  });\n  return { teamSlug, projectSlug, devDeployment };\n}\n\nasync function selectExistingProject(\n  ctx: Context,\n  chosenConfiguration: ChosenConfiguration,\n  config: {\n    team?: string | undefined;\n    project?: string | undefined;\n    devDeployment?: \"cloud\" | \"local\" | undefined;\n  },\n): Promise<{\n  teamSlug: string;\n  projectSlug: string;\n  devDeployment: \"cloud\" | \"local\";\n}> {\n  const {\n    team: { id: teamId, slug: teamSlug },\n    chosen,\n  } = await validateOrSelectTeam(ctx, config.team, \"Team:\");\n\n  const projectSlug = await validateOrSelectProject(\n    ctx,\n    config.project,\n    teamId,\n    \"Configure project\",\n    \"Project:\",\n  );\n  if (projectSlug === null) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"Run the command again to create a new project instead.\",\n    });\n  }\n  const { devDeployment } = await selectDevDeploymentType(ctx, {\n    chosenConfiguration,\n    newOrExisting: \"existing\",\n    teamSlug,\n    projectSlug,\n    userHasChosenSomethingInteractively: chosen || !config.project,\n    devDeploymentFromFlag: config.devDeployment,\n  });\n\n  logFinishedStep(`Reinitialized project ${chalkStderr.bold(projectSlug)}`);\n\n  return { teamSlug, projectSlug, devDeployment };\n}\n\nasync function askToConfigure(ctx: Context): Promise<\"new\" | \"existing\"> {\n  if (!(await hasProjects(ctx))) {\n    return \"new\";\n  }\n  return await promptOptions(ctx, {\n    message: \"What would you like to configure?\",\n    default: \"new\",\n    choices: [\n      { name: \"create a new project\", value: \"new\" },\n      { name: \"choose an existing project\", value: \"existing\" },\n    ],\n  });\n}\n\ntype DeploymentOptions =\n  | {\n      kind: \"prod\";\n    }\n  | { kind: \"dev\" }\n  | {\n      kind: \"local\";\n      ports: {\n        cloud: number | undefined;\n        site: number | undefined;\n      };\n      backendVersion?: string | undefined;\n      forceUpgrade: boolean;\n    };\n\n/**\n * This method assumes that the member has access to the selected project.\n */\nasync function ensureDeploymentProvisioned(\n  ctx: Context,\n  options: {\n    teamSlug: string;\n    projectSlug: string;\n    deploymentOptions: DeploymentOptions;\n  },\n): Promise<DeploymentDetails> {\n  switch (options.deploymentOptions.kind) {\n    case \"dev\":\n    case \"prod\": {\n      const credentials =\n        await fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n          ctx,\n          {\n            kind: \"teamAndProjectSlugs\",\n            teamSlug: options.teamSlug,\n            projectSlug: options.projectSlug,\n          },\n          options.deploymentOptions.kind,\n        );\n      return credentials;\n    }\n    case \"local\": {\n      const credentials = await handleLocalDeployment(ctx, {\n        teamSlug: options.teamSlug,\n        projectSlug: options.projectSlug,\n        ...options.deploymentOptions,\n      });\n      return credentials;\n    }\n    default:\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Invalid deployment type: ${(options.deploymentOptions as any).kind}`,\n        errForSentry: `Invalid deployment type: ${(options.deploymentOptions as any).kind}`,\n      });\n  }\n}\n\nexport async function updateEnvAndConfigForDeploymentSelection(\n  ctx: Context,\n  options: {\n    url: string;\n    siteUrl?: string | null;\n    deploymentName: string;\n    teamSlug: string | null;\n    projectSlug: string | null;\n    deploymentType: DeploymentType;\n  },\n  existingValue: string | null,\n) {\n  const { configPath, projectConfig } = await readProjectConfig(ctx);\n\n  const { wroteToGitIgnore, changedDeploymentEnvVar } =\n    options.deploymentType !== \"prod\"\n      ? await writeDeploymentEnvVar(\n          ctx,\n          options.deploymentType,\n          {\n            team: options.teamSlug,\n            project: options.projectSlug,\n            deploymentName: options.deploymentName,\n          },\n          existingValue,\n        )\n      : { wroteToGitIgnore: false, changedDeploymentEnvVar: false };\n  await ensureConvexFunctionsDir(ctx, projectConfig);\n  await finalizeConfiguration(ctx, {\n    deploymentType: options.deploymentType,\n    deploymentName: options.deploymentName,\n    url: options.url,\n    siteUrl: options.siteUrl,\n    wroteToGitIgnore,\n    changedDeploymentEnvVar,\n    functionsPath: functionsDir(configPath, projectConfig),\n  });\n}\n\nasync function assertLocalOptionsAreDefault(\n  ctx: Context,\n  localOptions: ConfigureCmdOptions[\"localOptions\"],\n) {\n  if (localOptions.ports.cloud !== undefined) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"`--local-cloud-port` can only be used when developing with a local deployment. \" +\n        \"Use `npx convex deployment select local` to use a local deployment.\",\n    });\n  }\n  if (localOptions.ports.site !== undefined) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"`--local-site-port` can only be used when developing with a local deployment. \" +\n        \"Use `npx convex deployment select local` to use a local deployment.\",\n    });\n  }\n  if (localOptions.backendVersion !== undefined) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"`--local-backend-version` can only be used when developing with a local deployment. \" +\n        \"Use `npx convex deployment select local` to use a local deployment.\",\n    });\n  }\n  if (localOptions.dashboardVersion !== undefined) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"`--local-dashboard-version` can only be used when developing with a local deployment. \" +\n        \"Use `npx convex deployment select local` to use a local deployment.\",\n    });\n  }\n  if (localOptions.forceUpgrade === true) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"`--local-force-upgrade` can only be used when developing with a local deployment. \" +\n        \"Use `npx convex deployment select local` to use a local deployment.\",\n    });\n  }\n}\n", "import { chalkStderr } from \"chalk\";\nimport { Context } from \"../../bundler/context.js\";\nimport { logFinishedStep, logMessage } from \"../../bundler/log.js\";\nimport { DeploymentType } from \"./api.js\";\nimport { writeUrlsToEnvFile } from \"./envvars.js\";\nimport { getDashboardUrl } from \"./dashboard.js\";\n\nexport async function finalizeConfiguration(\n  ctx: Context,\n  options: {\n    functionsPath: string;\n    deploymentType: DeploymentType;\n    deploymentName: string;\n    url: string;\n    siteUrl: string | null | undefined;\n    wroteToGitIgnore: boolean;\n    changedDeploymentEnvVar: boolean;\n  },\n) {\n  const envFileConfig = await writeUrlsToEnvFile(ctx, {\n    convexUrl: options.url,\n    siteUrl: options.siteUrl,\n  });\n  const isEnvFileConfigChanged =\n    envFileConfig !== null &&\n    (envFileConfig.convexUrlEnvVar || envFileConfig.siteUrlEnvVar);\n\n  if (isEnvFileConfigChanged) {\n    const deploymentEnvVarMessage = options.changedDeploymentEnvVar\n      ? `    name as CONVEX_DEPLOYMENT\\n`\n      : \"\";\n    const urlUpdateMessages = [];\n    if (envFileConfig.convexUrlEnvVar) {\n      urlUpdateMessages.push(\n        `    client URL as ${envFileConfig.convexUrlEnvVar}\\n`,\n      );\n    }\n    if (envFileConfig.siteUrlEnvVar) {\n      urlUpdateMessages.push(\n        `    HTTP actions URL as ${envFileConfig.siteUrlEnvVar}\\n`,\n      );\n    }\n    logFinishedStep(\n      `${messageForDeploymentType(options.deploymentType, options.url)} and saved its:\\n` +\n        deploymentEnvVarMessage +\n        urlUpdateMessages.join(\"\") +\n        ` to ${envFileConfig.envFile}`,\n    );\n  } else if (options.changedDeploymentEnvVar) {\n    logFinishedStep(\n      `${messageForDeploymentType(options.deploymentType, options.url)} and saved its name as CONVEX_DEPLOYMENT to .env.local`,\n    );\n  }\n  if (options.wroteToGitIgnore) {\n    logMessage(chalkStderr.gray(`  Added \".env.local\" to .gitignore`));\n  }\n  const anyChanges =\n    options.wroteToGitIgnore ||\n    options.changedDeploymentEnvVar ||\n    isEnvFileConfigChanged;\n  if (anyChanges) {\n    const dashboardUrl = await getDashboardUrl(ctx, {\n      deploymentName: options.deploymentName,\n      deploymentType: options.deploymentType,\n    });\n    logMessage(\n      `\\nWrite your Convex functions in ${chalkStderr.bold(options.functionsPath)}\\n` +\n        \"Give us feedback at https://convex.dev/community or support@convex.dev\\n\" +\n        `View the Convex dashboard at ${dashboardUrl}\\n`,\n    );\n  }\n}\n\nfunction messageForDeploymentType(deploymentType: DeploymentType, url: string) {\n  switch (deploymentType) {\n    case \"anonymous\":\n      return `Configured a local deployment for ${url}`;\n    case \"local\":\n      return `Configured a local deployment for ${url}`;\n    case \"dev\":\n    case \"prod\":\n    case \"preview\":\n    case \"custom\":\n      return `Provisioned a ${deploymentType} deployment`;\n    default: {\n      deploymentType satisfies never;\n      return `Provisioned a ${deploymentType as any} deployment`;\n    }\n  }\n}\n", "import mod from './index.js';\n\nexport default mod;\nexport const Issuer = mod.Issuer;\nexport const Strategy = mod.Strategy;\nexport const TokenSet = mod.TokenSet;\nexport const errors = mod.errors;\nexport const custom = mod.custom;\nexport const generators = mod.generators;\n", "import { errors, BaseClient, custom } from \"openid-client\";\nimport {\n  bigBrainAPI,\n  bigBrainFetch,\n  logAndHandleFetchError,\n  throwingFetch,\n  isWebContainer,\n  typedPlatformClient,\n} from \"./utils/utils.js\";\nimport open from \"open\";\nimport { chalkStderr } from \"chalk\";\nimport { provisionHost } from \"./config.js\";\nimport { version } from \"../version.js\";\nimport { Context } from \"../../bundler/context.js\";\nimport {\n  changeSpinner,\n  logError,\n  logFailure,\n  logFinishedStep,\n  logMessage,\n  logOutput,\n  logVerbose,\n  showSpinner,\n} from \"../../bundler/log.js\";\nimport { Issuer } from \"openid-client\";\nimport { hostname } from \"os\";\nimport { execSync } from \"child_process\";\nimport { promptString, promptYesNo } from \"./utils/prompts.js\";\nimport {\n  formatPathForPrinting,\n  globalConfigPath,\n  modifyGlobalConfig,\n} from \"./utils/globalConfig.js\";\nimport { updateBigBrainAuthAfterLogin } from \"./deploymentSelection.js\";\n\n// Per https://github.com/panva/node-openid-client/tree/main/docs#customizing\ncustom.setHttpOptionsDefaults({\n  timeout: parseInt(process.env.OPENID_CLIENT_TIMEOUT || \"10000\"),\n});\n\n/**\n * Whether Big Brain accepts this credential. Takes the header explicitly so\n * callers can check a credential other than the one `ctx` resolved to.\n */\nexport async function isAuthorizedHeader(\n  ctx: Context,\n  header: string,\n): Promise<boolean> {\n  try {\n    const resp = await fetch(`${provisionHost}/api/authorize`, {\n      method: \"HEAD\",\n      headers: {\n        Authorization: header,\n        \"Convex-Client\": `npm-cli-${version}`,\n      },\n    });\n    // Don't throw an error if this request returns a non-200 status.\n    // Big Brain responds with a variety of error codes -- 401 if the token is correctly-formed but not valid, and either 400 or 500 if the token is ill-formed.\n    // We only care if this check returns a 200 code (so we can skip logging in again) -- any other errors should be silently skipped and we'll run the whole login flow again.\n    return resp.status === 200;\n  } catch (e: any) {\n    // This `catch` block should only be hit if a network error was encountered\n    logError(\n      `Unexpected error when authorizing - are you connected to the internet?`,\n    );\n    return await logAndHandleFetchError(ctx, e);\n  }\n}\n\nexport async function checkAuthorization(\n  ctx: Context,\n  acceptOptIns: boolean,\n): Promise<boolean> {\n  const header = ctx.bigBrainAuth()?.header ?? null;\n  if (header === null) {\n    return false;\n  }\n  if (!(await isAuthorizedHeader(ctx, header))) {\n    return false;\n  }\n\n  // Check that we have optin as well\n  const shouldContinue = await optins(ctx, acceptOptIns);\n  if (!shouldContinue) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: null,\n    });\n  }\n  return true;\n}\n\nasync function performDeviceAuthorization(\n  ctx: Context,\n  authClient: BaseClient,\n  shouldOpen: boolean,\n  vercel?: boolean,\n  vercelOverride?: string,\n): Promise<string> {\n  // Device authorization flow follows this guide: https://github.com/auth0/auth0-device-flow-cli-sample/blob/9f0f3b76a6cd56ea8d99e76769187ea5102d519d/cli.js\n  // License: MIT License\n  // Copyright (c) 2019 Auth0 Samples\n  /*\n  The MIT License (MIT)\n\n  Copyright (c) 2019 Auth0 Samples\n\n  Permission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to deal\n  in the Software without restriction, including without limitation the rights\n  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n  copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be included in all\n  copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n  */\n\n  // Device Authorization Request - https://tools.ietf.org/html/rfc8628#section-3.1\n  // Get authentication URL\n  let handle;\n  try {\n    handle = await authClient.deviceAuthorization();\n  } catch {\n    // We couldn't get verification URL from the auth provider, proceed with manual auth\n    return promptString(ctx, {\n      message:\n        \"Open https://dashboard.convex.dev/auth, log in and paste the token here:\",\n    });\n  }\n\n  // Device Authorization Response - https://tools.ietf.org/html/rfc8628#section-3.2\n  // Open authentication URL\n  const { verification_uri_complete, user_code, expires_in } = handle;\n\n  // Construct Vercel URL if --vercel flag is used\n  const urlToOpen = vercel\n    ? `https://vercel.com/sso/integrations/${vercelOverride || \"convex\"}?url=${verification_uri_complete}`\n    : verification_uri_complete;\n\n  logMessage(\n    `Visit ${urlToOpen} to finish logging in.\\n` +\n      `You should see the following code which expires in ${\n        expires_in % 60 === 0\n          ? `${expires_in / 60} minutes`\n          : `${expires_in} seconds`\n      }: ${user_code}`,\n  );\n  if (shouldOpen) {\n    shouldOpen = await promptYesNo(ctx, {\n      message: `Open the browser?`,\n      default: true,\n    });\n  }\n\n  if (shouldOpen) {\n    showSpinner(`Opening ${urlToOpen} in your browser to log in...\\n`);\n    try {\n      const p = await open(urlToOpen);\n      p.once(\"error\", () => {\n        changeSpinner(`Manually open ${urlToOpen} in your browser to log in.`);\n      });\n      changeSpinner(\"Waiting for the confirmation...\");\n    } catch {\n      logError(chalkStderr.red(`Unable to open browser.`));\n      changeSpinner(`Manually open ${urlToOpen} in your browser to log in.`);\n    }\n  } else {\n    showSpinner(`Open ${urlToOpen} in your browser to log in.`);\n  }\n\n  // Device Access Token Request - https://tools.ietf.org/html/rfc8628#section-3.4\n  // Device Access Token Response - https://tools.ietf.org/html/rfc8628#section-3.5\n  try {\n    const tokens = await handle.poll();\n    if (typeof tokens.access_token === \"string\") {\n      return tokens.access_token;\n    } else {\n      // Unexpected error\n      // eslint-disable-next-line no-restricted-syntax\n      throw Error(\"Access token is missing\");\n    }\n  } catch (err: any) {\n    switch (err.error) {\n      case \"access_denied\": // end-user declined the device confirmation prompt, consent or rules failed\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: \"Access denied.\",\n          errForSentry: err,\n        });\n      case \"expired_token\": // end-user did not complete the interaction in time\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: \"Device flow expired.\",\n          errForSentry: err,\n        });\n      default: {\n        const message =\n          err instanceof errors.OPError\n            ? `Error = ${err.error}; error_description = ${err.error_description}`\n            : `Login failed with error: ${err}`;\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: message,\n          errForSentry: err,\n        });\n      }\n    }\n  }\n}\n\nasync function performPasswordAuthentication(\n  ctx: Context,\n  clientId: string,\n  username: string,\n  password: string,\n): Promise<string> {\n  if (!process.env.WORKOS_API_SECRET) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"WORKOS_API_SECRET environment variable is not set\",\n    });\n  }\n\n  // Unfortunately, `openid-client` doesn't support the resource owner password credentials flow so we need to manually send the requests.\n  const options: Parameters<typeof throwingFetch>[1] = {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application/json\" },\n    body: JSON.stringify({\n      grant_type: \"password\",\n      email: username,\n      password: password,\n      client_id: clientId,\n      client_secret: process.env.WORKOS_API_SECRET,\n    }),\n  };\n\n  try {\n    const response = await throwingFetch(\n      \"https://apiauth.convex.dev/user_management/authenticate\",\n      options,\n    );\n    const data = await response.json();\n    if (typeof data.access_token === \"string\") {\n      return data.access_token;\n    } else {\n      // Unexpected error\n      // eslint-disable-next-line no-restricted-syntax\n      throw Error(\"Access token is missing\");\n    }\n  } catch (err: any) {\n    logFailure(`Password flow failed: ${err}`);\n    if (err.response) {\n      logError(chalkStderr.red(`${JSON.stringify(err.response.data)}`));\n    }\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      errForSentry: err,\n      printedMessage: null,\n    });\n  }\n}\n\nexport async function performLogin(\n  ctx: Context,\n  {\n    overrideAuthUrl,\n    overrideAuthClient,\n    overrideAuthUsername,\n    overrideAuthPassword,\n    overrideAccessToken,\n    loginFlow,\n    open,\n    acceptOptIns,\n    dumpAccessToken,\n    deviceName: deviceNameOverride,\n    anonymousId,\n    vercel,\n    vercelOverride,\n  }: {\n    overrideAuthUrl?: string | undefined;\n    overrideAuthClient?: string | undefined;\n    overrideAuthUsername?: string | undefined;\n    overrideAuthPassword?: string | undefined;\n    overrideAccessToken?: string | undefined;\n    loginFlow?: \"auto\" | \"paste\" | \"poll\" | undefined;\n    // default `true`\n    open?: boolean | undefined;\n    // default `false`\n    acceptOptIns?: boolean | undefined;\n    dumpAccessToken?: boolean | undefined;\n    deviceName?: string | undefined;\n    anonymousId?: string | undefined;\n    vercel?: boolean | undefined;\n    vercelOverride?: string | undefined;\n  } = {},\n) {\n  loginFlow = loginFlow || \"auto\";\n  // Get access token from big-brain\n  // Default the device name to the hostname, but allow the user to change this if the terminal is interactive.\n  // On Macs, the `hostname()` may be a weirdly-truncated form of the computer name. Attempt to read the \"real\" name before falling back to hostname.\n  let deviceName = deviceNameOverride ?? \"\";\n  if (!deviceName && process.platform === \"darwin\") {\n    try {\n      deviceName = execSync(\"scutil --get ComputerName\").toString().trim();\n    } catch {\n      // Just fall back to the hostname default below.\n    }\n  }\n  if (!deviceName) {\n    deviceName = hostname();\n  }\n  if (!deviceNameOverride) {\n    logMessage(\n      chalkStderr.bold(\n        `Welcome to developing with Convex, let's get you logged in.`,\n      ),\n    );\n    deviceName = await promptString(ctx, {\n      message: \"Device name:\",\n      default: deviceName,\n    });\n  }\n\n  const issuer = overrideAuthUrl ?? \"https://auth.convex.dev\";\n  const clientId = overrideAuthClient ?? \"HFtA247jp9iNs08NTLIB7JsNPMmRIyfi\";\n  let accessToken: string;\n\n  if (overrideAccessToken) {\n    // Access token was supplied directly.\n    accessToken = overrideAccessToken;\n  } else if (overrideAuthUsername && overrideAuthPassword) {\n    // Username/Password auth\n    accessToken = await performPasswordAuthentication(\n      ctx,\n      clientId,\n      overrideAuthUsername,\n      overrideAuthPassword,\n    );\n  } else if (\n    loginFlow === \"paste\" ||\n    (loginFlow === \"auto\" && isWebContainer())\n  ) {\n    accessToken = await promptString(ctx, {\n      message:\n        \"Open https://dashboard.convex.dev/auth, log in and paste the token here:\",\n    });\n  } else {\n    // Device authorization flow. Contact OIDC issuer.\n    let authIssuer;\n    try {\n      authIssuer = await Issuer.discover(issuer);\n    } catch {\n      // Couldn't contact https://auth.convex.dev/.well-known/openid-configuration,\n      // proceed with manual auth.\n      authIssuer = undefined;\n    }\n    if (authIssuer) {\n      const authClient = new authIssuer.Client({\n        client_id: clientId,\n        token_endpoint_auth_method: \"none\",\n        id_token_signed_response_alg: \"RS256\",\n      });\n      accessToken = await performDeviceAuthorization(\n        ctx,\n        authClient,\n        open ?? true,\n        vercel,\n        vercelOverride,\n      );\n    } else {\n      accessToken = await promptString(ctx, {\n        message:\n          \"Open https://dashboard.convex.dev/auth, log in and paste the token here:\",\n      });\n    }\n  }\n\n  if (dumpAccessToken) {\n    logOutput(`${accessToken}`);\n    return await ctx.crash({\n      exitCode: 0,\n      errorType: \"fatal\",\n      printedMessage: null,\n    });\n  }\n\n  // Exchange the WorkOS access token for a Convex personal access token.\n  ctx._updateBigBrainAuth({\n    accessToken: accessToken,\n    kind: \"accessToken\",\n    header: `Bearer ${accessToken}`,\n  });\n  const response = await typedPlatformClient(ctx).POST(\n    \"/create_personal_access_token\",\n    {\n      // `anonymousId` links a prior anonymous session to this account. It's\n      // intentionally absent from the generated platform API types,\n      // so cast to pass it through.\n      body: { name: deviceName, anonymousId } as { name: string },\n    },\n  );\n  const newAccessToken = response.data!.accessToken;\n  const globalConfig = { accessToken: newAccessToken };\n  try {\n    await modifyGlobalConfig(ctx, globalConfig);\n    const path = globalConfigPath();\n    logFinishedStep(`Saved credentials to ${formatPathForPrinting(path)}`);\n  } catch (err: unknown) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"invalid filesystem data\",\n      errForSentry: err,\n      printedMessage: null,\n    });\n  }\n\n  logVerbose(`performLogin: updating big brain auth after login`);\n  await updateBigBrainAuthAfterLogin(ctx, newAccessToken);\n\n  logVerbose(`performLogin: checking opt ins, acceptOptIns: ${acceptOptIns}`);\n  // Do opt in to TOS and Privacy Policy stuff\n  const shouldContinue = await optins(ctx, acceptOptIns ?? false);\n  if (!shouldContinue) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: null,\n    });\n  }\n\n  if (vercel) {\n    await promptJoinVercelTeams(ctx);\n  }\n}\n\ntype PotentialVercelTeam = {\n  teamId: number;\n  teamName: string;\n  teamSlug: string;\n  planId: string;\n  planName: string;\n  pricingNotice: string | null;\n};\n\n// After `--vercel` login, surface any Vercel-marketplace teams the user has\n// access to but isn't yet a member of, and prompt to join each.\nasync function promptJoinVercelTeams(ctx: Context): Promise<void> {\n  const fetch = bigBrainFetch(ctx);\n  let teams: PotentialVercelTeam[];\n  try {\n    const res = await fetch(\n      new URL(\"vercel/potential_teams\", `${provisionHost}/`),\n    );\n    if (!res.ok) {\n      logVerbose(\n        `vercel/potential_teams returned ${res.status}; skipping team-join prompt`,\n      );\n      return;\n    }\n    teams = await res.json();\n  } catch (err) {\n    logVerbose(`Failed to fetch potential Vercel teams: ${String(err)}`);\n    return;\n  }\n  if (teams.length === 0) return;\n\n  for (const [index, team] of teams.entries()) {\n    const displayName = team.teamName.replace(/ \\(Vercel\\)$/, \"\");\n    const counter = teams.length > 1 ? `[${index + 1}/${teams.length}] ` : \"\";\n    const lines = [\n      chalkStderr.bold(`${counter}You've been invited to join ${displayName}`) +\n        ` (${team.planName}) through the Vercel marketplace.`,\n    ];\n    if (team.pricingNotice) {\n      lines.push(chalkStderr.yellow(team.pricingNotice));\n    }\n    lines.push(`Join \"${displayName}\"?`);\n    const join = await promptYesNo(ctx, {\n      message: `${lines.join(\"\\n\")}`,\n      default: true,\n    });\n    if (!join) continue;\n    try {\n      await fetch(\n        new URL(\n          `vercel/potential_teams/${team.teamId}/join`,\n          `${provisionHost}/`,\n        ),\n        { method: \"POST\" },\n      );\n      logFinishedStep(`Joined ${displayName}`);\n    } catch (err) {\n      logFailure(`Failed to join ${displayName}: ${String(err)}`);\n    }\n  }\n}\n\n/// There are fields like version, but we keep them opaque\ntype OptIn = Record<string, unknown>;\n\ntype OptInToAccept = {\n  optIn: OptIn;\n  message: string;\n};\n\ntype AcceptOptInsArgs = {\n  optInsAccepted: OptIn[];\n};\n\n// Returns whether we can proceed or not.\nasync function optins(ctx: Context, acceptOptIns: boolean): Promise<boolean> {\n  const bbAuth = ctx.bigBrainAuth();\n  if (bbAuth === null) {\n    // This should never happen, but if we're not even logged in, we can't proceed.\n    return false;\n  }\n  switch (bbAuth.kind) {\n    case \"accessToken\":\n      break;\n    case \"deploymentKey\":\n    case \"projectKey\":\n    case \"previewDeployKey\":\n      // If we have a key configured as auth, we do not need to check opt ins.\n      return true;\n    default: {\n      bbAuth satisfies never;\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        errForSentry: `Unexpected auth kind ${(bbAuth as any).kind}`,\n        printedMessage: \"Hit an unexpected error while logging in.\",\n      });\n    }\n  }\n  const data = await bigBrainAPI({\n    ctx,\n    method: \"POST\",\n    path: \"check_opt_ins\",\n  });\n  if (data.optInsToAccept.length === 0) {\n    return true;\n  }\n  for (const optInToAccept of data.optInsToAccept) {\n    const confirmed =\n      acceptOptIns ||\n      (await promptYesNo(ctx, {\n        message: optInToAccept.message,\n      }));\n    if (!confirmed) {\n      logFailure(\"Please accept the Terms of Service to use Convex.\");\n      return Promise.resolve(false);\n    }\n  }\n\n  const optInsAccepted = data.optInsToAccept.map((o: OptInToAccept) => o.optIn);\n  const args: AcceptOptInsArgs = { optInsAccepted };\n  await bigBrainAPI({\n    ctx,\n    method: \"POST\",\n    path: \"accept_opt_ins\",\n    data: args,\n  });\n  return true;\n}\n\nexport async function ensureLoggedIn(\n  ctx: Context,\n  options?: {\n    message?: string | undefined;\n    overrideAuthUrl?: string | undefined;\n    overrideAuthClient?: string | undefined;\n    overrideAuthUsername?: string | undefined;\n    overrideAuthPassword?: string | undefined;\n  },\n) {\n  const isLoggedIn = await checkAuthorization(ctx, false);\n  if (!isLoggedIn) {\n    if (options?.message) {\n      logMessage(options.message);\n    }\n    await performLogin(ctx, {\n      acceptOptIns: false,\n      overrideAuthUrl: options?.overrideAuthUrl,\n      overrideAuthClient: options?.overrideAuthClient,\n      overrideAuthUsername: options?.overrideAuthUsername,\n      overrideAuthPassword: options?.overrideAuthPassword,\n    });\n  }\n}\n", "import { execSync } from \"child_process\";\nimport { Command, Option } from \"@commander-js/extra-typings\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport {\n  logFailure,\n  logFinishedStep,\n  logMessage,\n  showSpinner,\n} from \"../bundler/log.js\";\nimport {\n  DeploymentSelection,\n  ensureAuthCanCreateDeployment,\n  getDeploymentSelection,\n  getProjectDetails,\n  deploymentNameFromSelection,\n} from \"./lib/deploymentSelection.js\";\nimport {\n  logNoDefaultRegionMessage,\n  selectRegion,\n  typedBigBrainClient,\n  typedPlatformClient,\n} from \"./lib/utils/utils.js\";\nimport { ProjectResponse } from \"@convex-dev/platform/managementApi\";\nimport { getTeamAndProjectFromPreviewAdminKey } from \"./lib/deployment.js\";\nimport { saveSelectedDeployment } from \"./deploymentSelect.js\";\nimport { promptOptions, promptString } from \"./lib/utils/prompts.js\";\nimport { chalkStderr } from \"chalk\";\nimport { parseDeploymentSelector } from \"./lib/deploymentSelector.js\";\nimport {\n  parseExpiration,\n  resolveExpiration,\n  validateExpiration,\n} from \"./lib/expiration.js\";\nimport { ensureBackendBinaryDownloaded } from \"./lib/localDeployment/download.js\";\nimport {\n  loadProjectLocalConfig,\n  saveDeploymentConfig,\n} from \"./lib/localDeployment/filePaths.js\";\nimport { chooseLocalBackendPorts } from \"./lib/localDeployment/utils.js\";\nimport { bigBrainStart } from \"./lib/localDeployment/bigBrain.js\";\nimport { importDefaultEnvVars } from \"./lib/localDeployment/localDeployment.js\";\nimport { localDeploymentUrl } from \"./lib/localDeployment/run.js\";\nimport { announceDeploymentTarget } from \"./lib/announceDeploymentTarget.js\";\nimport { generateLocalDevSecrets } from \"./lib/localDeployment/secrets.js\";\n\nconst SUPPORTED_TYPES = [\"dev\", \"prod\", \"preview\"] as const;\n\nexport const deploymentCreate = new Command(\"create\")\n  .summary(\"Create a new deployment for a project\")\n  .description(\n    [\n      \"Create a new deployment for a project.\",\n      \"\",\n      \"\u2022 Create a dev deployment and select it: `npx convex deployment create dev/my-new-feature --type dev --select`\",\n      \"\u2022 Create a prod deployment named \u201Cstaging\u201D: `npx convex deployment create staging --type prod`\",\n    ].join(\"\\n\"),\n  )\n  .argument(\n    \"[reference]\",\n    \"The reference for the new deployment, e.g. `staging` or `dev/my-feature`. \\n\" +\n      \"Use `local` to create a local deployment. \\n\" +\n      \"You can specify a team and project with `team-slug:project-slug:ref` (e.g. `my-team:my-project:staging` or `my-team:my-project:local`). \\n\" +\n      \"Can be omitted when using `--default`.\",\n  )\n  .allowExcessArguments(false)\n  .addOption(\n    new Option(\"--type <type>\", \"Deployment type\").choices(SUPPORTED_TYPES),\n  )\n  .option(\"--region <region>\", \"Deployment region\")\n  .addOption(new Option(\"--class <class>\", \"Deployment class\").hideHelp())\n  .option(\n    \"--select\",\n    \"Select the new deployment. This will update the Convex environment variables in .env.local. Subsequent `npx convex` commands will run against this deployment.\",\n  )\n  .option(\n    \"--default\",\n    \"Make the new deployment your default production deployment (used by `npx convex deploy`) or your personal dev deployment.\",\n  )\n  .option(\n    \"--expiration <value>\",\n    'When the deployment expires (e.g. \"none\", \"in 7 days\", \"2026-04-01T00:00:00Z\", or a UNIX timestamp in seconds or milliseconds)',\n  )\n  .addOption(new Option(\"--expiry <value>\").hideHelp())\n  .addOption(new Option(\"--expires <value>\").hideHelp())\n  .action(async (refParam, options) => {\n    const expiration = options.expiration ?? options.expiry ?? options.expires;\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n\n    // Creating a deployment goes through the platform API, which accepts\n    // personal access tokens and project keys but not deployment/preview deploy\n    // keys. Fail fast (and clearly) for the unsupported keys rather than\n    // surfacing an opaque 401 from the lookup below.\n    await ensureAuthCanCreateDeployment(ctx);\n\n    const currentDeployment = await getDeploymentSelection(ctx, {\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n\n    // Handle `deployment create [team:project:]local`\n    if (refParam !== undefined) {\n      const localTarget = parseLocalCreateTarget(refParam);\n      if (localTarget !== null) {\n        const cloudOnlyFlags = [\"type\", \"region\", \"class\", \"default\"] as const;\n        for (const flag of cloudOnlyFlags) {\n          if (options[flag]) {\n            return await ctx.crash({\n              exitCode: 1,\n              errorType: \"fatal\",\n              printedMessage: `--${flag} cannot be used when creating a local deployment`,\n            });\n          }\n        }\n        if (expiration !== undefined) {\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage: `--expiration cannot be used when creating a local deployment`,\n          });\n        }\n        if (localTarget.kind === \"needsTeam\") {\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage:\n              \"Please use `team:project:local` to specify the team when creating a local deployment in a different project.\",\n          });\n        }\n        await createLocalDeployment(\n          ctx,\n          currentDeployment,\n          options.select ?? false,\n          localTarget.kind === \"inTeamProject\"\n            ? {\n                teamSlug: localTarget.teamSlug,\n                projectSlug: localTarget.projectSlug,\n              }\n            : null,\n        );\n        return;\n      }\n    }\n\n    const expiresAt = await resolveExpiresAtOrCrash(ctx, expiration);\n\n    const {\n      ref,\n      regionDetails,\n      classDetails,\n      projectId,\n      type,\n      isDefault,\n      teamSlug,\n      projectSlug,\n    } = process.stdin.isTTY\n      ? await resolveOptionsInteractively(\n          ctx,\n          currentDeployment,\n          refParam,\n          options,\n        )\n      : await resolveOptionsNoninteractively(\n          ctx,\n          currentDeployment,\n          refParam,\n          options,\n        );\n\n    showSpinner(\n      `Creating ${type} deployment` +\n        (regionDetails ? ` in region ${regionDetails.displayName}` : \"\") +\n        (classDetails ? ` with class ${classDetails.type}` : \"\") +\n        \"...\",\n    );\n\n    const created = (\n      await typedPlatformClient(ctx).POST(\n        \"/projects/{project_id}/create_deployment\",\n        {\n          params: {\n            path: { project_id: projectId },\n          },\n          body: {\n            type,\n            region: regionDetails?.name ?? null,\n            reference: ref ?? null,\n            isDefault,\n            ...(expiresAt !== undefined ? { expiresAt } : {}),\n            ...(classDetails ? { class: classDetails.type } : {}),\n          },\n        },\n      )\n    ).data!;\n\n    if (created.kind !== \"cloud\") {\n      // This should be impossible\n      const err = `Expected cloud deployment to be created but got ${created.kind}`;\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: err,\n        errForSentry: err,\n      });\n    }\n\n    logFinishedStep(\n      options.select\n        ? `Created and selected new ${created.deploymentType} deployment:`\n        : `Created new ${created.isDefault ? \"default \" : \"\"}${created.deploymentType} deployment:`,\n    );\n    announceDeploymentTarget(null, {\n      url: created.deploymentUrl,\n      deploymentFields: {\n        deploymentName: created.name,\n        deploymentType: created.deploymentType,\n        teamSlug,\n        projectSlug,\n        reference: created.reference,\n        isDefault: created.isDefault,\n      },\n    });\n\n    if (!options.select) {\n      if (type !== \"prod\") {\n        const selectRef = `${teamSlug}:${projectSlug}:${created.reference}`;\n        logMessage(\n          `\\nTo make \\`npx convex\\` use this deployment, run ${chalkStderr.bold(`npx convex deployment select ${selectRef}`)}`,\n        );\n        logMessage(\n          chalkStderr.gray(\n            \"Hint: use `--select` to immediately select the newly created deployment.\",\n          ),\n        );\n      }\n    } else {\n      const selection: DeploymentSelection = {\n        kind: \"deploymentWithinProject\",\n        targetProject: {\n          kind: \"teamAndProjectSlugs\",\n          teamSlug,\n          projectSlug,\n        },\n        selectionWithinProject: {\n          kind: \"deploymentSelector\",\n          selector: created.reference,\n        },\n      };\n      await saveSelectedDeployment(\n        ctx,\n        created.reference,\n        selection,\n        deploymentNameFromSelection(currentDeployment),\n      );\n    }\n  });\n\nexport async function createLocalDeployment(\n  ctx: Context,\n  currentDeployment: DeploymentSelection,\n  select: boolean,\n  baseDeployment: { teamSlug: string; projectSlug: string } | null,\n): Promise<void> {\n  const existing = loadProjectLocalConfig(ctx);\n  if (existing) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"A local deployment already exists.\",\n    });\n  }\n\n  const {\n    teamSlug,\n    slug: projectSlug,\n    id: cloudProjectId,\n  } = baseDeployment\n    ? await getProjectDetails(ctx, {\n        kind: \"teamAndProjectSlugs\",\n        teamSlug: baseDeployment.teamSlug,\n        projectSlug: baseDeployment.projectSlug,\n      })\n    : await resolveProject(ctx, currentDeployment);\n\n  showSpinner(\"Downloading local backend...\");\n  const { version, binaryPath: latestBinaryPath } =\n    await ensureBackendBinaryDownloaded(ctx, {\n      kind: \"latest\",\n    });\n\n  const { cloudPort, sitePort } = await chooseLocalBackendPorts(ctx);\n\n  showSpinner(\"Registering local deployment...\");\n  const { deploymentName } = await bigBrainStart(ctx, {\n    port: cloudPort,\n    projectSlug,\n    teamSlug,\n    instanceName: null,\n  });\n  const { instanceSecret, adminKey } = await generateLocalDevSecrets(ctx, {\n    deploymentName,\n    latestBinaryPath,\n  });\n\n  saveDeploymentConfig(ctx, \"local\", deploymentName, {\n    backendVersion: version,\n    ports: { cloud: cloudPort, site: sitePort },\n    adminKey,\n    instanceSecret,\n    cloudProjectId,\n  });\n\n  logFinishedStep(\n    select\n      ? \"Created and selected local deployment:\"\n      : \"Created local deployment:\",\n  );\n\n  announceDeploymentTarget(null, {\n    url: `http://127.0.0.1:${cloudPort}`,\n    deploymentFields: {\n      deploymentName,\n      deploymentType: \"local\",\n      teamSlug,\n      projectSlug,\n      reference: null,\n      isDefault: false,\n    },\n  });\n\n  await importDefaultEnvVars(ctx, {\n    teamSlug,\n    projectSlug,\n    deploymentName,\n    deploymentUrl: localDeploymentUrl(cloudPort),\n    adminKey,\n  });\n\n  if (select) {\n    const selection: DeploymentSelection = {\n      kind: \"deploymentWithinProject\",\n      targetProject: {\n        kind: \"deploymentName\",\n        deploymentName,\n        deploymentType: \"local\",\n      },\n      selectionWithinProject: {\n        kind: \"deploymentSelector\",\n        selector: \"local\",\n      },\n    };\n    await saveSelectedDeployment(\n      ctx,\n      \"local\",\n      selection,\n      deploymentNameFromSelection(currentDeployment),\n    );\n  }\n\n  const devCommand = \"npx convex dev\";\n  if (select) {\n    logMessage(`\\nRun ${chalkStderr.bold(devCommand)} to start it.`);\n  } else {\n    logMessage(\n      `\\nTo use this deployment, run:\\n` +\n        chalkStderr.bold(`      npx convex deployment select local\\n`) +\n        `  Then, run ${chalkStderr.bold(devCommand)} to start it.`,\n    );\n  }\n}\n\ntype RefParam = Parameters<Parameters<typeof deploymentCreate.action>[0]>[0];\ntype OptionsParam = Parameters<\n  Parameters<typeof deploymentCreate.action>[0]\n>[1];\n\nasync function resolveOptionsNoninteractively(\n  ctx: Context,\n  currentDeployment: DeploymentSelection,\n  refParam: RefParam,\n  options: OptionsParam,\n) {\n  let ref: string | undefined;\n  let teamAndProject: { teamSlug: string; projectSlug: string } | undefined;\n  if (refParam) {\n    const result = parseSelectorForNewDeployment(refParam);\n    if (result.kind === \"invalid\") {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: result.message,\n      });\n    }\n    ref = result.ref;\n    teamAndProject = result.teamAndProject;\n  }\n\n  if (!ref && !options.default) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"Specify a deployment ref or use --default:\\n\" +\n        \"  `npx convex deployment create my-deployment-ref --type dev`\\n\" +\n        \"  `npx convex deployment create --type prod --default`\",\n    });\n  }\n\n  if (!options.type) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `--type is required (supported values: ${SUPPORTED_TYPES.join(\", \")})`,\n    });\n  }\n\n  const project = teamAndProject\n    ? await getProjectDetails(ctx, {\n        kind: \"teamAndProjectSlugs\",\n        teamSlug: teamAndProject.teamSlug,\n        projectSlug: teamAndProject.projectSlug,\n      })\n    : await resolveProject(ctx, currentDeployment);\n  const projectId = project.id;\n\n  // If no region is passed in, the team's default region will be used\n  let regionDetails: AvailableRegion | null = null;\n  if (options.region) {\n    const availableRegions = await fetchAvailableRegions(ctx, project.teamId);\n    regionDetails = await resolveRegionDetailsOrCrash(\n      ctx,\n      availableRegions,\n      options.region,\n    );\n  }\n\n  // If no class is passed in, the team's default class will be used\n  let classDetails: AvailableClass | null = null;\n  if (options.class) {\n    const availableClasses = await fetchAvailableClasses(ctx, project.teamId);\n    classDetails = await resolveClassDetailsOrCrash(\n      ctx,\n      availableClasses,\n      options.class,\n    );\n  }\n\n  return {\n    ref,\n    isDefault: options.default ?? null,\n    projectId,\n    regionDetails,\n    classDetails,\n    type: options.type,\n    teamSlug: project.teamSlug,\n    projectSlug: project.slug,\n  };\n}\n\nasync function resolveOptionsInteractively(\n  ctx: Context,\n  currentDeployment: DeploymentSelection,\n  refParam: RefParam,\n  options: OptionsParam,\n) {\n  let deploymentType: \"dev\" | \"prod\" | \"preview\";\n  if (options.type) {\n    deploymentType = logAndUse(\"type\", options.type);\n  } else {\n    const dtypeChoices = [\n      {\n        name: \"dev\",\n        value: \"dev\" as const,\n      },\n      {\n        name: \"preview\",\n        value: \"preview\" as const,\n      },\n      {\n        name: \"prod\",\n        value: \"prod\" as const,\n      },\n    ];\n    deploymentType = await promptOptions(ctx, {\n      message: \"Deployment type?\",\n      choices: dtypeChoices,\n    });\n  }\n\n  let ref: string | undefined;\n  let teamAndProject: { teamSlug: string; projectSlug: string } | undefined;\n  if (refParam) {\n    const result = parseSelectorForNewDeployment(refParam);\n    if (result.kind === \"invalid\") {\n      logFailure(result.message);\n    } else {\n      ref = logAndUse(\"ref\", result.ref);\n      teamAndProject = result.teamAndProject;\n    }\n  }\n  while (ref === undefined) {\n    const gitDefault = defaultRef(localGitBranch(), deploymentType);\n    const input = await promptString(ctx, {\n      message:\n        \"What do you want to call this deployment?\\n\" +\n        chalkStderr.reset.dim(\n          \"The deployment reference will be used to identify your deployment on the dashboard and in CLI commands.\\nExamples: staging, dev/james/feature\",\n        ) +\n        \"\\n>\",\n      ...(gitDefault !== undefined ? { default: gitDefault } : {}),\n      validate: validateTentativeReference,\n    });\n    const result = parseSelectorForNewDeployment(input);\n    if (result.kind === \"invalid\") {\n      logFailure(result.message);\n      continue;\n    }\n    ref = result.ref;\n    teamAndProject = result.teamAndProject;\n  }\n\n  const project = teamAndProject\n    ? await getProjectDetails(ctx, {\n        kind: \"teamAndProjectSlugs\",\n        teamSlug: teamAndProject.teamSlug,\n        projectSlug: teamAndProject.projectSlug,\n      })\n    : await resolveProject(ctx, currentDeployment);\n\n  const availableRegions = await fetchAvailableRegions(ctx, project.teamId);\n  let regionDetails: AvailableRegion;\n  if (options.region) {\n    regionDetails = await resolveRegionDetailsOrCrash(\n      ctx,\n      availableRegions,\n      options.region,\n    );\n    logAndUse(\"region\", regionDetails.displayName);\n  } else {\n    // Use the team's default region if set, or prompt the user to pick\n    // TODO: this duplicates some of the logic in selectRegionOrUseDefault (npm-packages/convex/src/cli/lib/utils/utils.ts)\n    const teams = (await typedBigBrainClient(ctx).GET(\"/teams\")).data!;\n    const team = teams.find((team) => team.slug === project.teamSlug);\n    if (!team) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Error: Team ${project.teamSlug} not found.`,\n      });\n    }\n    const regionName =\n      team.defaultRegion ?? (await selectRegion(ctx, team.id, deploymentType));\n    regionDetails = await resolveRegionDetailsOrCrash(\n      ctx,\n      availableRegions,\n      regionName,\n    );\n    if (team.defaultRegion) {\n      logFinishedStep(\n        `Using team default region of ${regionDetails.displayName}`,\n      );\n    } else {\n      await logNoDefaultRegionMessage(team.slug);\n    }\n  }\n\n  let classDetails: AvailableClass | null = null;\n  if (options.class) {\n    const availableClasses = await fetchAvailableClasses(ctx, project.teamId);\n    classDetails = await resolveClassDetailsOrCrash(\n      ctx,\n      availableClasses,\n      options.class,\n    );\n    logAndUse(\"class\", classDetails.type);\n  }\n\n  return {\n    ref,\n    isDefault: options.default ?? null,\n    projectId: project.id,\n    regionDetails,\n    classDetails,\n    type: deploymentType,\n    teamSlug: project.teamSlug,\n    projectSlug: project.slug,\n  };\n}\n\ntype NewDeploymentSelectorResult =\n  | {\n      kind: \"valid\";\n      ref: string;\n      teamAndProject?: { teamSlug: string; projectSlug: string };\n    }\n  | { kind: \"invalid\"; message: string };\n\nfunction parseSelectorForNewDeployment(\n  selectorString: string,\n): NewDeploymentSelectorResult {\n  const selector = parseDeploymentSelector(selectorString);\n  switch (selector.kind) {\n    case \"deploymentName\":\n      return {\n        kind: \"invalid\",\n        message: `\"${selector.deploymentName}\" is not a valid deployment reference. References can't look like \"word-word-123\" \u2014 that format is reserved for automatically-generated deployment names.`,\n      };\n    case \"inCurrentProject\": {\n      const inner = selector.selector;\n      if (inner.kind === \"dev\") {\n        return {\n          kind: \"invalid\",\n          message: `\"dev\" is reserved as an alias for your default dev deployment.`,\n        };\n      }\n      if (inner.kind === \"prod\") {\n        return {\n          kind: \"invalid\",\n          message: `\"prod\" is reserved as an alias for your default production deployment.`,\n        };\n      }\n      if (inner.kind === \"local\") {\n        return {\n          kind: \"invalid\",\n          message: `\"local\" is reserved as an alias for your local deployment. To create one, run ${chalkStderr.bold(\"npx convex deployment create local\")}`,\n        };\n      }\n      return { kind: \"valid\", ref: inner.reference };\n    }\n    case \"inProject\": {\n      return {\n        kind: \"invalid\",\n        message: `Please use \"team:project:ref\" to specify the team when creating a new deployment in a different project.`,\n      };\n    }\n    case \"inTeamProject\": {\n      const inner = selector.selector;\n      if (inner.kind === \"dev\") {\n        return {\n          kind: \"invalid\",\n          message: `\"dev\" is reserved as an alias for your default dev deployment.`,\n        };\n      }\n      if (inner.kind === \"prod\") {\n        return {\n          kind: \"invalid\",\n          message: `\"prod\" is reserved as an alias for your default production deployment.`,\n        };\n      }\n      if (inner.kind === \"local\") {\n        return {\n          kind: \"invalid\",\n          message: `\"local\" is reserved as an alias for your local deployment. To create one, run ${chalkStderr.bold(`npx convex deployment create ${selector.teamSlug}:${selector.projectSlug}:local`)}`,\n        };\n      }\n      return {\n        kind: \"valid\",\n        ref: inner.reference,\n        teamAndProject: {\n          teamSlug: selector.teamSlug,\n          projectSlug: selector.projectSlug,\n        },\n      };\n    }\n    default:\n      selector satisfies never;\n      return {\n        kind: \"invalid\",\n        message: \"Unknown state. This is a bug in Convex.\",\n      };\n  }\n}\n\n/**\n * Detect whether the user is creating a local deployment.\n * Returns:\n *   - `null` if `refParam` is not a local-deployment selector\n *   - `inCurrentProject` for plain `local`\n *   - `needsTeam` for `project:local` (which we reject \u2014 same rule as cloud)\n *   - `inTeamProject` for `team:project:local`\n */\nfunction parseLocalCreateTarget(\n  refParam: string,\n):\n  | null\n  | { kind: \"inCurrentProject\" }\n  | { kind: \"needsTeam\" }\n  | { kind: \"inTeamProject\"; teamSlug: string; projectSlug: string } {\n  const parsed = parseDeploymentSelector(refParam);\n  if (parsed.kind === \"inCurrentProject\" && parsed.selector.kind === \"local\") {\n    return { kind: \"inCurrentProject\" };\n  }\n  if (parsed.kind === \"inProject\" && parsed.selector.kind === \"local\") {\n    return { kind: \"needsTeam\" };\n  }\n  if (parsed.kind === \"inTeamProject\" && parsed.selector.kind === \"local\") {\n    return {\n      kind: \"inTeamProject\",\n      teamSlug: parsed.teamSlug,\n      projectSlug: parsed.projectSlug,\n    };\n  }\n  return null;\n}\n\nasync function resolveProject(\n  ctx: Context,\n  deploymentSelection: DeploymentSelection,\n): Promise<ProjectResponse> {\n  switch (deploymentSelection.kind) {\n    case \"existingDeployment\": {\n      const { deploymentFields } = deploymentSelection.deploymentToActOn;\n      if (deploymentFields) {\n        return await getProjectDetails(ctx, {\n          kind: \"deploymentName\",\n          deploymentName: deploymentFields.deploymentName,\n          deploymentType: null,\n        });\n      }\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"Cannot infer project from the current deployment configuration. Use `team:project:ref` to specify team and project slugs.\",\n      });\n    }\n    case \"deploymentWithinProject\": {\n      return await getProjectDetails(ctx, deploymentSelection.targetProject);\n    }\n    case \"preview\": {\n      const slugs = await getTeamAndProjectFromPreviewAdminKey(\n        ctx,\n        deploymentSelection.previewDeployKey,\n      );\n      return await getProjectDetails(ctx, {\n        kind: \"teamAndProjectSlugs\",\n        teamSlug: slugs.teamSlug,\n        projectSlug: slugs.projectSlug,\n      });\n    }\n    case \"chooseProject\":\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"No project configured yet. Use `team:project:ref` to specify team and project slugs.\",\n      });\n    case \"anonymous\":\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"Cannot create a deployment in anonymous mode. \" +\n          \"Run `npx convex login` and configure a project first.\",\n      });\n    default: {\n      deploymentSelection satisfies never;\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Unexpected deployment selection kind.`,\n      });\n    }\n  }\n}\n\nconst REGION_NAME_TO_ALIAS: Record<string, string> = {\n  \"aws-us-east-1\": \"us\",\n  \"aws-eu-west-1\": \"eu\",\n};\n\nconst REGION_ALIAS_TO_NAME = Object.fromEntries(\n  Object.entries(REGION_NAME_TO_ALIAS).map(([name, alias]) => [alias, name]),\n);\n\nexport async function fetchAvailableRegions(ctx: Context, teamId: number) {\n  const regionsResponse = (\n    await typedPlatformClient(ctx).GET(\n      \"/teams/{team_id}/list_deployment_regions\",\n      {\n        params: {\n          path: { team_id: `${teamId}` },\n        },\n      },\n    )\n  ).data!;\n  return regionsResponse.items.filter((item) => item.available);\n}\n\ntype AvailableRegion = Awaited<\n  ReturnType<typeof fetchAvailableRegions>\n>[number];\n\nexport function resolveRegionDetails(\n  availableRegions: AvailableRegion[],\n  region: string,\n) {\n  const resolvedRegion = REGION_ALIAS_TO_NAME[region] ?? region;\n  return availableRegions.find((item) => item.name === resolvedRegion) ?? null;\n}\n\nasync function resolveRegionDetailsOrCrash(\n  ctx: Context,\n  availableRegions: AvailableRegion[],\n  region: string,\n) {\n  const regionDetails = resolveRegionDetails(availableRegions, region);\n  if (!regionDetails) {\n    return await crashInvalidRegion(ctx, availableRegions, region);\n  }\n  return regionDetails;\n}\n\nfunction invalidRegionMessage(\n  availableRegions: AvailableRegion[],\n  region: string,\n): string {\n  const formatted = availableRegions\n    .map(\n      (item) =>\n        `    Use \\`--region ${REGION_NAME_TO_ALIAS[item.name] ?? item.name}\\` for ${item.displayName}`,\n    )\n    .join(\"\\n\");\n  return `Invalid region \"${region}\".\\n\\n` + formatted;\n}\n\nasync function crashInvalidRegion(\n  ctx: Context,\n  availableRegions: AvailableRegion[],\n  region: string,\n): Promise<never> {\n  return await ctx.crash({\n    exitCode: 1,\n    errorType: \"fatal\",\n    printedMessage: invalidRegionMessage(availableRegions, region),\n  });\n}\n\nexport async function fetchAvailableClasses(ctx: Context, teamId: number) {\n  const classesResponse = (\n    await typedPlatformClient(ctx).GET(\n      \"/teams/{team_id}/list_deployment_classes\",\n      {\n        params: {\n          path: { team_id: `${teamId}` },\n        },\n      },\n    )\n  ).data!;\n  return classesResponse.items.filter((item) => item.available);\n}\n\ntype AvailableClass = Awaited<ReturnType<typeof fetchAvailableClasses>>[number];\n\nexport function resolveClassDetails(\n  availableClasses: AvailableClass[],\n  className: string,\n) {\n  return availableClasses.find((item) => item.type === className) ?? null;\n}\n\nasync function resolveClassDetailsOrCrash(\n  ctx: Context,\n  availableClasses: AvailableClass[],\n  className: string,\n) {\n  const classDetails = resolveClassDetails(availableClasses, className);\n  if (!classDetails) {\n    return await crashInvalidClass(ctx, availableClasses, className);\n  }\n  return classDetails;\n}\n\nfunction invalidClassMessage(\n  availableClasses: AvailableClass[],\n  className: string,\n): string {\n  const formatted = availableClasses\n    .map((item) => `    \\`--class ${item.type}\\``)\n    .join(\"\\n\");\n  return `Invalid class \"${className}\".\\n\\nAvailable classes:\\n` + formatted;\n}\n\nasync function crashInvalidClass(\n  ctx: Context,\n  availableClasses: AvailableClass[],\n  className: string,\n): Promise<never> {\n  return await ctx.crash({\n    exitCode: 1,\n    errorType: \"fatal\",\n    printedMessage: invalidClassMessage(availableClasses, className),\n  });\n}\n\nasync function resolveExpiresAtOrCrash(\n  ctx: Context,\n  expiration: string | undefined,\n): Promise<number | null | undefined> {\n  if (!expiration) {\n    return undefined;\n  }\n  const parsed = parseExpiration(expiration);\n  if (parsed.kind === \"error\") {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: parsed.message,\n    });\n  }\n  const now = Date.now();\n  const resolved = resolveExpiration(parsed, now);\n  if (resolved !== null) {\n    const validation = validateExpiration(resolved, now);\n    if (validation.kind === \"error\") {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: validation.message,\n      });\n    }\n  }\n  return resolved;\n}\n\n/**\n * Helper to log a value passed in as a CLI argument in the interactive flow.\n */\nfunction logAndUse<T extends string | boolean>(label: string, value: T): T {\n  logFinishedStep(`Using ${label}: ${chalkStderr.bold(value)}`);\n  return value;\n}\n\n// This is an oversimplification, it\u2019s fine if it fails later\nfunction validateTentativeReference(tentativeReference: string): true | string {\n  if (tentativeReference.length < 3) {\n    return \"References must be at least 3 characters\";\n  }\n  if (tentativeReference.length > 100) {\n    return \"References must be at most 100 characters\";\n  }\n  if (!/^[a-z0-9/-]+$/.test(tentativeReference)) {\n    return \"References can only contain lowercase letters, numbers, `-`, and `/`\";\n  }\n  if (tentativeReference === \"dev\") {\n    return '\"dev\" is reserved as an alias for your default dev deployment.';\n  }\n  if (tentativeReference === \"prod\") {\n    return '\"prod\" is reserved as an alias for your default production deployment.';\n  }\n  if (tentativeReference === \"local\") {\n    return `\"local\" is reserved as an alias for your local deployment. To create one, run ${chalkStderr.bold(\"npx convex deployment create local\")}`;\n  }\n  if (/^[a-z]+-[a-z]+-\\d+$/.test(tentativeReference)) {\n    return 'References can\\'t look like \"word-word-123\" \u2014 that format is reserved for automatically-generated deployment names. Try something like dev/my-feature or staging instead.';\n  }\n\n  return true;\n}\n\n/**\n * Get the current local git branch name by shelling out to git.\n * Returns null if git is unavailable, the repo is in detached HEAD state,\n * or the branch is main/master.\n */\nfunction localGitBranch(): string | null {\n  try {\n    const branch = (\n      execSync(\"git rev-parse --abbrev-ref HEAD\", {\n        stdio: [\"pipe\", \"pipe\", \"pipe\"],\n        timeout: 5000,\n      }) as Buffer\n    )\n      .toString()\n      .trim();\n    if (\n      !branch ||\n      branch === \"HEAD\" ||\n      branch === \"main\" ||\n      branch === \"master\"\n    ) {\n      return null;\n    }\n    return branch;\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Slugify a git branch name into a valid deployment reference.\n * Returns undefined if the result would fail validation.\n */\nfunction defaultRef(\n  branch: string | null,\n  deploymentType: \"dev\" | \"prod\" | \"preview\",\n): string | undefined {\n  if (deploymentType !== \"dev\" && deploymentType !== \"preview\") {\n    return undefined;\n  }\n  if (!branch) return undefined;\n  const slug = branch\n    .replace(/[^a-z0-9/-]/g, \"-\")\n    .replace(/-+/g, \"-\")\n    .replace(/^-|-$/g, \"\");\n  if (!slug) return undefined;\n  const ref = `${deploymentType}/${slug}`;\n  const valid = validateTentativeReference(ref);\n  if (valid !== true) return undefined;\n  return ref;\n}\n", "type ParsedExpirationSuccess =\n  | { kind: \"none\" }\n  | { kind: \"absolute\"; timestampMs: number }\n  | { kind: \"relative\"; amount: number; unit: \"minute\" | \"hour\" | \"day\" };\n\ntype ParsedExpiration =\n  | ParsedExpirationSuccess\n  | { kind: \"error\"; message: string };\n\nconst PARSE_ERROR_MESSAGE =\n  `Supported formats:\\n` +\n  `  \"none\"                          \u2014 no expiration\\n` +\n  `  \"in 7 days\"                     \u2014 relative (minutes, hours, days)\\n` +\n  `  \"2026-04-01T00:00:00Z\"          \u2014 UTC datetime\\n` +\n  `  \"1711828382\"                    \u2014 Unix timestamp (seconds)\\n` +\n  `  \"1711828382000\"                 \u2014 Unix timestamp (milliseconds)`;\n\nconst UNIT_MS = {\n  minute: 60 * 1000,\n  hour: 60 * 60 * 1000,\n  day: 24 * 60 * 60 * 1000,\n} as const;\n\n/**\n * Parse an expiration input string into a structured representation.\n * Does not depend on the current time.\n */\nexport function parseExpiration(input: string): ParsedExpiration {\n  const trimmed = input.trim();\n\n  if (trimmed.toLowerCase() === \"none\") {\n    return { kind: \"none\" };\n  }\n\n  // All digits \u2192 Unix timestamp\n  if (/^\\d+$/.test(trimmed)) {\n    const n = Number(trimmed);\n\n    return {\n      kind: \"absolute\",\n      timestampMs:\n        n < 1e12 // 1e12 milliseconds is a date in 2001 \u2192 unambiguous\n          ? n * 1000 // seconds \u2192 convert to ms\n          : n, // already milliseconds\n    };\n  }\n\n  // UTC datetime: \"2026-04-01T00:00:00Z\"\n  if (/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$/.test(trimmed)) {\n    const date = new Date(trimmed);\n    if (isNaN(date.getTime())) {\n      return {\n        kind: \"error\",\n        message: `Invalid UTC datetime: \"${trimmed}\". ${PARSE_ERROR_MESSAGE}`,\n      };\n    }\n    return { kind: \"absolute\", timestampMs: date.getTime() };\n  }\n\n  // Relative: \"in 3 hours\", \"in 1 day\", \"in 45 minutes\"\n  const relativeMatch = trimmed.match(/^in\\s+(\\d+)\\s+(minute|hour|day)s?$/i);\n  if (relativeMatch) {\n    const amount = Number(relativeMatch[1]);\n    const unit = relativeMatch[2].toLowerCase() as \"minute\" | \"hour\" | \"day\";\n    return { kind: \"relative\", amount, unit };\n  }\n\n  return {\n    kind: \"error\",\n    message: `Invalid expiration format: \"${trimmed}\". ${PARSE_ERROR_MESSAGE}`,\n  };\n}\n\n/**\n * Resolve a parsed expiration into a timestamp in milliseconds, or null for \"none\".\n */\nexport function resolveExpiration(\n  parsed: ParsedExpirationSuccess,\n  now?: number,\n): number | null {\n  switch (parsed.kind) {\n    case \"none\":\n      return null;\n    case \"absolute\":\n      return parsed.timestampMs;\n    case \"relative\": {\n      const base = now ?? Date.now();\n      return base + parsed.amount * UNIT_MS[parsed.unit];\n    }\n  }\n}\n\ntype ValidationResult =\n  | { kind: \"success\" }\n  | { kind: \"error\"; message: string };\n\n/**\n * Validate that a resolved expiration timestamp is acceptable.\n */\nexport function validateExpiration(\n  timestampMs: number,\n  now?: number,\n): ValidationResult {\n  const base = now ?? Date.now();\n  const thirtyMinutes = 30 * 60 * 1000;\n  const oneYear = 365 * 24 * 60 * 60 * 1000;\n\n  if (timestampMs <= base) {\n    return { kind: \"error\", message: \"Expiration must be in the future.\" };\n  }\n  if (timestampMs - base < thirtyMinutes) {\n    return {\n      kind: \"error\",\n      message: \"Expiration must be at least 30 minutes from now.\",\n    };\n  }\n  if (timestampMs - base > oneYear) {\n    return {\n      kind: \"error\",\n      message: \"Expiration must be at most 1 year from now.\",\n    };\n  }\n  return { kind: \"success\" };\n}\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep, logOutput, showSpinner } from \"../bundler/log.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport {\n  ensureLoggedInWithAccessToken,\n  getDeploymentSelection,\n} from \"./lib/deploymentSelection.js\";\nimport { changedEnvVarFile } from \"./lib/envvars.js\";\nimport {\n  CONVEX_DEPLOY_KEY_ENV_VAR_NAME,\n  ENV_VAR_FILE_PATH,\n  typedPlatformClient,\n} from \"./lib/utils/utils.js\";\n\nexport const deploymentTokenCreate = new Command(\"create\")\n  .summary(\"Create an access token\")\n  .description(\n    [\n      `Creates a deploy key that, when set as \\`${CONVEX_DEPLOY_KEY_ENV_VAR_NAME}\\`, scopes all commands to the target deployment.`,\n      \"\",\n      \"\u2022 Print a new deploy key to stdout: `npx convex deployment token create my-token`\",\n      `\u2022 Save a new deploy key in \\`${ENV_VAR_FILE_PATH}\\`: \\`npx convex deployment token create my-token --save-env\\``,\n      \"\u2022 Save a new deploy key in a custom env file: `npx convex deployment token create ci-token --save-env .env.production`\",\n      \"\u2022 Create a key for the project's prod: `npx convex deployment token create ci-token --deployment prod`\",\n    ].join(\"\\n\"),\n  )\n  .argument(\"<name>\", \"Name for the new deploy key\")\n  .allowExcessArguments(false)\n  .option(\n    \"--save-env [path]\",\n    `Save the new key as ${CONVEX_DEPLOY_KEY_ENV_VAR_NAME} in an env file instead of printing it. Defaults to ${ENV_VAR_FILE_PATH}.`,\n  )\n  .addDeploymentSelectionOptions(actionDescription(\"Create a deploy key for\"))\n  .showHelpAfterError()\n  .action(async (name, options) => {\n    const ctx = await oneoffContext(options);\n\n    await ensureLoggedInWithAccessToken(ctx, \"Creating a deploy key\");\n\n    const deploymentSelection = await getDeploymentSelection(ctx, options);\n    const deployment = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n      { ensureLocalRunning: false },\n    );\n\n    if (deployment.deploymentFields === null) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"Cannot create a deploy key for a self-hosted deployment.\",\n      });\n    }\n\n    const { deploymentName, deploymentType } = deployment.deploymentFields;\n    if (deploymentType === \"local\" || deploymentType === \"anonymous\") {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Cannot create a deploy key for a ${deploymentType} deployment.`,\n      });\n    }\n\n    showSpinner(`Creating deploy key for ${deploymentName}...`);\n    const response = await typedPlatformClient(ctx).POST(\n      \"/deployments/{deployment_name}/create_deploy_key\",\n      {\n        params: { path: { deployment_name: deploymentName } },\n        body: { name },\n      },\n    );\n    const deployKey = response.data!.deployKey;\n\n    if (options.saveEnv === undefined) {\n      logFinishedStep(`Created deploy key \"${name}\" for ${deploymentName}.`);\n      logOutput(deployKey);\n      return;\n    }\n\n    const envFile =\n      typeof options.saveEnv === \"string\" ? options.saveEnv : ENV_VAR_FILE_PATH;\n    const existingFileContent = ctx.fs.exists(envFile)\n      ? ctx.fs.readUtf8File(envFile)\n      : null;\n    const updatedContent = changedEnvVarFile({\n      existingFileContent,\n      envVarName: CONVEX_DEPLOY_KEY_ENV_VAR_NAME,\n      envVarValue: deployKey,\n      commentAfterValue: null,\n      commentOnPreviousLine: null,\n    });\n\n    if (updatedContent === null) {\n      logFinishedStep(\n        `Deploy key for ${deploymentName} already present in ${envFile}; no changes made.`,\n      );\n      return;\n    }\n\n    ctx.fs.writeUtf8File(envFile, updatedContent);\n    logFinishedStep(\n      `Saved deploy key \"${name}\" for ${deploymentName} as ${CONVEX_DEPLOY_KEY_ENV_VAR_NAME} in ${envFile}.`,\n    );\n  });\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { chalkStderr } from \"chalk\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep, showSpinner } from \"../bundler/log.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport {\n  ensureLoggedInWithAccessToken,\n  getDeploymentSelection,\n} from \"./lib/deploymentSelection.js\";\nimport { typedPlatformClient } from \"./lib/utils/utils.js\";\n\nexport const deploymentTokenDelete = new Command(\"delete\")\n  .summary(\"Delete an access token\")\n  .description(\n    [\n      \"Delete an access token. Currently only deploy keys (deployment-scoped access tokens) are supported.\",\n      \"\",\n      \"The positional `<nameOrToken>` can be the unique name of the deploy key (as passed to `token create`) or the deploy key value itself. The target deployment defaults to the currently-selected one; pass `--deployment` to target a different deployment.\",\n      \"\",\n      \"\u2022 Delete by name: `npx convex deployment token delete my-token`\",\n      \"\u2022 Delete by value: `npx convex deployment token delete 'dev:happy-animal-123|ey...'`\",\n      \"\u2022 Target prod: `npx convex deployment token delete ci-token --deployment prod`\",\n    ].join(\"\\n\"),\n  )\n  .argument(\n    \"<nameOrToken>\",\n    \"The unique name of the deploy key, or the deploy key value itself.\",\n  )\n  .allowExcessArguments(false)\n  .addDeploymentSelectionOptions(actionDescription(\"Delete a deploy key for\"))\n  .showHelpAfterError()\n  .action(async (nameOrToken, options) => {\n    const ctx = await oneoffContext(options);\n\n    await ensureLoggedInWithAccessToken(ctx, \"Deleting a deploy key\");\n\n    const deploymentSelection = await getDeploymentSelection(ctx, options);\n    const deployment = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n      { ensureLocalRunning: false },\n    );\n\n    if (deployment.deploymentFields === null) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"Cannot delete a deploy key for a self-hosted deployment.\",\n      });\n    }\n\n    const { deploymentName, deploymentType } = deployment.deploymentFields;\n    if (deploymentType === \"local\" || deploymentType === \"anonymous\") {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Cannot delete a deploy key for a ${deploymentType} deployment.`,\n      });\n    }\n\n    // A full deploy key has the form `<type>:<deployment-name>|<token>`. If we\n    // see the prefix without the `|`, the user almost certainly forgot to\n    // quote: the shell ate `|` and everything after.\n    if (/^(dev|prod|preview|local):[^|]*$/.test(nameOrToken)) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `\"${nameOrToken}\" looks like a partial deploy key \u2014 your shell likely consumed the \\`|\\` and everything after it. Wrap the value in single quotes (e.g. ${chalkStderr.bold(`npx convex deployment token delete '${nameOrToken}|...'`)}) and try again.`,\n      });\n    }\n    // The server matches against just the token portion, so strip the prefix\n    // when present so users can paste the value of CONVEX_DEPLOY_KEY directly.\n    const pipeIdx = nameOrToken.indexOf(\"|\");\n    const id = pipeIdx >= 0 ? nameOrToken.slice(pipeIdx + 1) : nameOrToken;\n\n    showSpinner(`Deleting deploy key for ${deploymentName}...`);\n    await typedPlatformClient(ctx).POST(\n      \"/deployments/{deployment_name}/delete_deploy_key\",\n      {\n        params: { path: { deployment_name: deploymentName } },\n        body: { id },\n      },\n    );\n\n    logFinishedStep(`Deleted deploy key for ${deploymentName}.`);\n  });\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { deploymentTokenCreate } from \"./deploymentTokenCreate.js\";\nimport { deploymentTokenDelete } from \"./deploymentTokenDelete.js\";\n\nexport const deploymentToken = new Command(\"token\")\n  .summary(\"Manage access tokens\")\n  .description(\n    \"Create and delete access tokens. Currently supports deploy keys.\",\n  )\n  .addCommand(deploymentTokenCreate)\n  .addCommand(deploymentTokenDelete);\n", "import { Command, Option } from \"@commander-js/extra-typings\";\nimport { Context } from \"../bundler/context.js\";\nimport { logFinishedStep, logMessage, logOutput } from \"../bundler/log.js\";\nimport { DeploymentSelectionOptions } from \"./lib/api.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { ensureHasConvexDependency } from \"./lib/utils/utils.js\";\nimport { withRunningBackend } from \"./lib/localDeployment/run.js\";\nimport { selectEnvDeployment } from \"./env.js\";\nimport {\n  compareMetricNames,\n  createUsageLimit,\n  deleteUsageLimit,\n  findUsageLimitByKey,\n  getCurrentUsage,\n  listUsageLimits,\n  listUsageLimitsWithStatus,\n  metricLabel,\n  updateUsageLimit,\n  USAGE_LIMIT_METRICS,\n  USAGE_LIMIT_TYPES,\n  USAGE_LIMIT_WINDOWS,\n  UsageLimitStatus,\n} from \"./lib/usageLimits.js\";\n\nasync function parseLimit(ctx: Context, value: string): Promise<number> {\n  const limit = Number(value);\n  if (!Number.isInteger(limit) || limit < 1) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `error: --limit must be a positive integer, got \"${value}\".`,\n    });\n  }\n  return limit;\n}\n\nfunction formatTable(\n  header: string[],\n  rows: string[][],\n  rightAlign: number[] = [],\n): string {\n  const right = new Set(rightAlign);\n  const widths = header.map((cell, i) =>\n    Math.max(cell.length, ...rows.map((row) => (row[i] ?? \"\").length)),\n  );\n  const pad = (cell: string, i: number) =>\n    right.has(i) ? cell.padStart(widths[i]) : cell.padEnd(widths[i]);\n  const rule = (left: string, mid: string, r: string) =>\n    left + widths.map((w) => \"\\u2500\".repeat(w + 2)).join(mid) + r;\n  const line = (cells: string[]) =>\n    \"\\u2502 \" +\n    cells.map((cell, i) => pad(cell ?? \"\", i)).join(\" \\u2502 \") +\n    \" \\u2502\";\n  return [\n    rule(\"\\u250c\", \"\\u252c\", \"\\u2510\"),\n    line(header),\n    rule(\"\\u251c\", \"\\u253c\", \"\\u2524\"),\n    ...rows.map(line),\n    rule(\"\\u2514\", \"\\u2534\", \"\\u2518\"),\n  ].join(\"\\n\");\n}\n\nconst NUMBER_FORMAT_COMPACT = new Intl.NumberFormat(\"en-US\", {\n  notation: \"compact\",\n  compactDisplay: \"short\",\n  maximumFractionDigits: 3,\n});\nfunction formatNumberCompact(value: number): string {\n  const formatted = NUMBER_FORMAT_COMPACT.format(value);\n  return formatted === \"-0\" ? \"0\" : formatted;\n}\n\n// Exact, thousands-separated amount for prose (success messages), where a\n// precise value reads clearer than the compact table form.\nconst LIMIT_FORMAT = new Intl.NumberFormat(\"en-US\");\nfunction formatLimitAmount(value: number): string {\n  return LIMIT_FORMAT.format(value);\n}\n\nconst NUMBER_FORMAT = new Intl.NumberFormat(\"en-US\");\nfunction formatNumber(value: number): string {\n  const formatted = NUMBER_FORMAT.format(value);\n  return formatted === \"-0\" ? \"0\" : formatted;\n}\n\nfunction unitFor(amount: number, unit: string): string {\n  return amount === 1 && unit === \"calls\" ? \"call\" : unit;\n}\n\nfunction formatAmount(value: number, unit: string | null): string {\n  return unit === null\n    ? formatNumberCompact(value)\n    : `${formatNumberCompact(value)} ${unitFor(value, unit)}`;\n}\n\nfunction usageLimitRow(limit: UsageLimitStatus): string[] {\n  const currentUsage =\n    limit.currentUsage === null\n      ? \"\\u2014\"\n      : `${formatAmount(limit.currentUsage, limit.unit)} (${formatNumber(\n          Math.round((limit.currentUsage / limit.limit) * 100),\n        )}%)`;\n  return [\n    metricLabel(limit.metric),\n    limit.window,\n    limit.limitType,\n    formatAmount(limit.limit, limit.unit),\n    currentUsage,\n    limit.enabled ? \"yes\" : \"no\",\n    limit.triggered ? \"yes\" : \"no\",\n  ];\n}\n\n// The (metric, window, type) triple uniquely identifies a usage limit. `set`\n// requires all three plus a limit; `update`/`remove` reuse them to locate an\n// existing limit without needing its opaque id.\nconst metricOption = new Option(\n  \"--metric <metric>\",\n  \"The metric to limit.\",\n).choices(USAGE_LIMIT_METRICS);\nconst windowOption = new Option(\n  \"--window <window>\",\n  \"The window the limit is measured over.\",\n).choices(USAGE_LIMIT_WINDOWS);\nconst typeOption = new Option(\n  \"--type <type>\",\n  \"`warning` only notifies; `disable` pauses the deployment when exceeded.\",\n).choices(USAGE_LIMIT_TYPES);\n\nfunction seedStatusMessage(\n  seedStatus: \"pending\" | \"partial\" | \"failed\",\n): string {\n  return seedStatus === \"failed\"\n    ? \"We couldn't load this deployment's historical usage, so the usage shown below may understate its actual usage. Limits are still enforced going forward.\"\n    : \"Historical usage is still being loaded, so the usage shown below may understate this deployment's actual usage. Check back shortly for accurate totals.\";\n}\n\nconst listCmd = new Command(\"list\")\n  .summary(\"List configured usage limits\")\n  .description(\n    [\n      \"List the usage limits configured on your deployment.\",\n      \"\",\n      \"\u2022 List all usage limits: `npx convex deployment usage-limits list`\",\n      \"\u2022 Print as JSON: `npx convex deployment usage-limits list --json`\",\n    ].join(\"\\n\"),\n  )\n  .option(\"--json\", \"Output the usage limits as JSON.\")\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .action(async (cmdOptions, cmd) => {\n    const options = cmd.optsWithGlobals() as DeploymentSelectionOptions & {\n      json?: boolean;\n    };\n    const { ctx, deployment } = await selectEnvDeployment(options);\n    await ensureHasConvexDependency(ctx, \"deployment usage-limits list\");\n    await withRunningBackend({\n      ctx,\n      deployment,\n      action: async () => {\n        const { limits, seedStatus } = await listUsageLimitsWithStatus(\n          ctx,\n          deployment,\n        );\n        if (cmdOptions.json) {\n          logOutput(JSON.stringify(limits, null, 2));\n          return;\n        }\n        if (limits.length === 0) {\n          logMessage(\n            `No usage limits configured${deployment.deploymentNotice}.`,\n          );\n          return;\n        }\n        // \"Triggered\" is derived from reported usage, which a non-`complete`\n        // backfill may understate.\n        if (seedStatus !== \"complete\") {\n          logMessage(seedStatusMessage(seedStatus));\n        }\n        logOutput(\n          formatTable(\n            [\n              \"Metric\",\n              \"Window\",\n              \"Type\",\n              \"Limit\",\n              \"Current Usage\",\n              \"Active\",\n              \"Triggered\",\n            ],\n            limits.map(usageLimitRow),\n            [3, 4],\n          ),\n        );\n      },\n    });\n  });\n\nconst setCmd = new Command(\"set\")\n  .summary(\"Create or update a usage limit\")\n  .description(\n    [\n      \"Create a usage limit, or update the existing one for the same\",\n      \"(metric, window, type). At most one limit exists per combination.\",\n      \"\",\n      \"\u2022 Set the amount (creates or replaces it):\",\n      \"  `npx convex deployment usage-limits set --metric functionCalls --window day --type disable --limit 1000000`\",\n      \"\u2022 Deactivate without deleting: add `--inactive` (use `--active` to re-enable).\",\n      \"\u2022 Toggle active state without changing the amount: omit `--limit`.\",\n    ].join(\"\\n\"),\n  )\n  .addOption(metricOption.makeOptionMandatory())\n  .addOption(windowOption.makeOptionMandatory())\n  .addOption(typeOption.makeOptionMandatory())\n  .option(\n    \"--limit <limit>\",\n    \"The limit amount, in the metric's native units. Required when creating; kept as-is when omitted while updating.\",\n  )\n  .option(\"--active\", \"Enforce the limit (the default for a new limit).\")\n  .option(\"--inactive\", \"Create or leave the limit unenforced.\")\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .action(async (cmdOptions, cmd) => {\n    const options = cmd.optsWithGlobals() as DeploymentSelectionOptions;\n    const { ctx, deployment } = await selectEnvDeployment(options);\n    await ensureHasConvexDependency(ctx, \"deployment usage-limits set\");\n    if (cmdOptions.active && cmdOptions.inactive) {\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: \"error: Pass at most one of --active and --inactive.\",\n      });\n    }\n    const newLimit =\n      cmdOptions.limit === undefined\n        ? undefined\n        : await parseLimit(ctx, cmdOptions.limit);\n    await withRunningBackend({\n      ctx,\n      deployment,\n      action: async () => {\n        const existing = (await listUsageLimits(ctx, deployment)).find(\n          (l) =>\n            l.metric === cmdOptions.metric &&\n            l.window === cmdOptions.window &&\n            l.limitType === cmdOptions.type,\n        );\n        const label = `${cmdOptions.type} usage limit on ${metricLabel(cmdOptions.metric)} per ${cmdOptions.window}`;\n\n        // No existing limit: create one. A limit amount is required.\n        if (existing === undefined) {\n          if (newLimit === undefined) {\n            return ctx.crash({\n              exitCode: 1,\n              errorType: \"fatal\",\n              printedMessage:\n                \"error: --limit is required when creating a usage limit.\",\n            });\n          }\n          const enabled = !cmdOptions.inactive;\n          const created = await createUsageLimit(ctx, deployment, {\n            metric: cmdOptions.metric,\n            window: cmdOptions.window,\n            limitType: cmdOptions.type,\n            limit: newLimit,\n            enabled,\n          });\n          logFinishedStep(\n            `Created ${label}: ${formatLimitAmount(created.limit)}, ${created.enabled ? \"active\" : \"inactive\"}${deployment.deploymentNotice}.`,\n          );\n          return;\n        }\n\n        // Existing limit: update it, surfacing exactly which fields changed.\n        const enabled = cmdOptions.active\n          ? true\n          : cmdOptions.inactive\n            ? false\n            : existing.enabled;\n        const limit = newLimit ?? existing.limit;\n        const changes: string[] = [];\n        if (limit !== existing.limit) {\n          changes.push(\n            `limit ${formatLimitAmount(existing.limit)} \\u2192 ${formatLimitAmount(limit)}`,\n          );\n        }\n        if (enabled !== existing.enabled) {\n          changes.push(\n            `${existing.enabled ? \"active\" : \"inactive\"} \\u2192 ${enabled ? \"active\" : \"inactive\"}`,\n          );\n        }\n        if (changes.length === 0) {\n          logFinishedStep(\n            `No changes to ${label} (${formatLimitAmount(existing.limit)}, ${existing.enabled ? \"active\" : \"inactive\"})${deployment.deploymentNotice}.`,\n          );\n          return;\n        }\n        await updateUsageLimit(ctx, deployment, existing.id, {\n          metric: existing.metric,\n          window: existing.window,\n          limitType: existing.limitType,\n          limit,\n          enabled,\n        });\n        logFinishedStep(\n          `Updated ${label}: ${changes.join(\", \")}${deployment.deploymentNotice}.`,\n        );\n      },\n    });\n  });\n\nconst removeCmd = new Command(\"remove\")\n  .alias(\"rm\")\n  .alias(\"delete\")\n  .summary(\"Delete a usage limit\")\n  .description(\n    [\n      \"Delete a usage limit, identified by its (metric, window, type).\",\n      \"\",\n      \"\u2022 `npx convex deployment usage-limits remove --metric functionCalls --window day --type warning`\",\n    ].join(\"\\n\"),\n  )\n  .addOption(metricOption.makeOptionMandatory())\n  .addOption(windowOption.makeOptionMandatory())\n  .addOption(typeOption.makeOptionMandatory())\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .action(async (cmdOptions, cmd) => {\n    const options = cmd.optsWithGlobals() as DeploymentSelectionOptions;\n    const { ctx, deployment } = await selectEnvDeployment(options);\n    await ensureHasConvexDependency(ctx, \"deployment usage-limits remove\");\n    await withRunningBackend({\n      ctx,\n      deployment,\n      action: async () => {\n        const existing = await findUsageLimitByKey(ctx, deployment, {\n          metric: cmdOptions.metric,\n          window: cmdOptions.window,\n          limitType: cmdOptions.type,\n        });\n        await deleteUsageLimit(ctx, deployment, existing.id);\n        logFinishedStep(\n          `Deleted ${existing.limitType} usage limit on ${metricLabel(existing.metric)} per ${existing.window}${deployment.deploymentNotice}.`,\n        );\n      },\n    });\n  });\n\nexport const usage = new Command(\"usage\")\n  .summary(\"Show current usage for each metric\")\n  .description(\n    [\n      \"Show usage so far in the current day and calendar month for every metric.\",\n      \"\",\n      \"\u2022 Show current usage: `npx convex deployment usage`\",\n      \"\u2022 Print as JSON: `npx convex deployment usage --json`\",\n    ].join(\"\\n\"),\n  )\n  .option(\"--json\", \"Output the usage as JSON.\")\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .addDeploymentSelectionOptions(actionDescription(\"Show current usage for\"))\n  .action(async (cmdOptions, cmd) => {\n    const options = cmd.optsWithGlobals() as DeploymentSelectionOptions & {\n      json?: boolean;\n    };\n    const { ctx, deployment } = await selectEnvDeployment(options);\n    await ensureHasConvexDependency(ctx, \"deployment usage\");\n    await withRunningBackend({\n      ctx,\n      deployment,\n      action: async () => {\n        const usage = await getCurrentUsage(ctx, deployment);\n        if (cmdOptions.json) {\n          logOutput(JSON.stringify(usage, null, 2));\n          return;\n        }\n        // A non-`complete` backfill means the numbers can understate reality.\n        if (usage.seedStatus !== \"complete\") {\n          logMessage(seedStatusMessage(usage.seedStatus));\n        }\n        logOutput(\n          formatTable(\n            [\"Metric\", \"Day\", \"Month\"],\n            Object.entries(usage.metrics)\n              .sort(([a], [b]) => compareMetricNames(a, b))\n              .map(([metric, m]) => [\n                metricLabel(metric),\n                formatAmount(m.usage.current_day, m.unit),\n                formatAmount(m.usage.current_month, m.unit),\n              ]),\n          ),\n        );\n      },\n    });\n  });\n\nexport const usageLimits = new Command(\"usage-limits\")\n  .summary(\"List and configure deployment usage limits\")\n  .description(\n    [\n      \"List and configure usage limits on your deployment.\",\n      \"\",\n      \"A usage limit either warns or pauses your deployment when a metric\",\n      \"(function calls, database bandwidth, \u2026) crosses a threshold within a\",\n      \"daily or monthly window. Each limit is identified by its\",\n      \"(metric, window, type).\",\n      \"\",\n      \"\u2022 List usage limits: `npx convex deployment usage-limits list`\",\n      \"\u2022 Create or update one: `npx convex deployment usage-limits set --metric functionCalls --window day --type disable --limit 1000000`\",\n      \"\u2022 Delete one: `npx convex deployment usage-limits remove --metric functionCalls --window day --type disable`\",\n    ].join(\"\\n\"),\n  )\n  .addCommand(listCmd)\n  .addCommand(setCmd)\n  .addCommand(removeCmd)\n  .helpCommand(false)\n  .addDeploymentSelectionOptions(\n    actionDescription(\"List and configure usage limits on\"),\n  );\n", "import { Command, Option } from \"@commander-js/extra-typings\";\nimport { chalkStderr } from \"chalk\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport {\n  DeploymentSelectionOptions,\n  DetailedDeploymentCredentials,\n  loadSelectedDeploymentCredentials,\n} from \"./lib/api.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { ensureHasConvexDependency } from \"./lib/utils/utils.js\";\nimport {\n  deploymentEnvBackend,\n  envGet,\n  envList,\n  envRemove,\n  envSet,\n} from \"./lib/env.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport { withRunningBackend } from \"./lib/localDeployment/run.js\";\nimport { envDefault } from \"./envDefault.js\";\n\nconst envSetCmd = new Command(\"set\")\n  // Pretend value is required\n  .usage(\"[options] <name> <value>\")\n  .argument(\"[name]\", \"The name of the environment variable to set.\")\n  .argument(\n    \"[value]\",\n    \"The value to set the variable to. Omit to set it interactively.\",\n  )\n  .summary(\"Set a variable\")\n  .description(\n    [\n      \"Set environment variables on your deployment.\",\n      \"\",\n      \"\u2022 `npx convex env set NAME 'value'`\",\n      \"\u2022 `npx convex env set NAME # omit a value to set one interactively`\",\n      \"\u2022 `npx convex env set NAME --from-file value.txt`\",\n      \"\u2022 `npx convex env set --from-file .env.defaults`\",\n      \"\",\n      \"When setting multiple values, it will refuse all changes if any variables are already set to different values by default. Pass --force to overwrite the provided values.\",\n      \"\",\n      \"To keep secrets out of your shell history, omit the value to pipe it in via stdin, for instance:\",\n      \"\u2022 `pbpaste | npx convex env set API_KEY` (macOS)\",\n      \"\u2022 `Get-Clipboard | npx convex env set API_KEY` (Windows PowerShell)\",\n      \"\",\n      \"To update many variables at once, save them with `npx convex env list --include-values > .env.convex`, edit the file, then reapply the changes with `npx convex env set --force < .env.convex`.\",\n    ].join(\"\\n\"),\n  )\n  .option(\n    \"--from-file <file>\",\n    \"Read environment variables from a .env file. Without --force, fails if any existing variable has a different value.\",\n  )\n  .option(\n    \"--force\",\n    \"When setting multiple variables, overwrite existing environment variable values instead of failing on mismatch.\",\n  )\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .action(async (name, value, cmdOptions, cmd) => {\n    // Note: We use `as` here because optsWithGlobals() type inference doesn't\n    // include global options from the parent command (added via addDeploymentSelectionOptions)\n    const options = cmd.optsWithGlobals() as DeploymentSelectionOptions;\n    const { ctx, deployment } = await selectEnvDeployment(options);\n    await ensureHasConvexDependency(ctx, \"env set\");\n    await withRunningBackend({\n      ctx,\n      deployment,\n      action: async () => {\n        const backend = deploymentEnvBackend(ctx, deployment);\n        const didAnything = await envSet(ctx, backend, name, value, cmdOptions);\n        if (didAnything === false) {\n          cmd.outputHelp({ error: true });\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"fatal\",\n            printedMessage:\n              \"error: No environment variables specified to be set.\",\n          });\n        }\n      },\n    });\n  });\n\nexport async function selectEnvDeployment(\n  options: DeploymentSelectionOptions,\n): Promise<{\n  ctx: Context;\n  deployment: {\n    deploymentUrl: string;\n    adminKey: string;\n    deploymentNotice: string;\n    deploymentFields: DetailedDeploymentCredentials[\"deploymentFields\"];\n  };\n}> {\n  const ctx = await oneoffContext(options);\n  const deploymentSelection = await getDeploymentSelection(ctx, options);\n  const {\n    adminKey,\n    url: deploymentUrl,\n    deploymentFields,\n  } = await loadSelectedDeploymentCredentials(ctx, deploymentSelection, {\n    ensureLocalRunning: false,\n  });\n\n  const deploymentNotice =\n    deploymentFields !== null\n      ? ` (on ${chalkStderr.bold(deploymentFields.deploymentType)} deployment ${chalkStderr.bold(deploymentFields.deploymentName)})`\n      : \"\";\n  const result = {\n    ctx,\n    deployment: {\n      deploymentUrl,\n      adminKey,\n      deploymentNotice,\n      deploymentFields,\n    },\n  };\n  return result;\n}\n\nconst envGetCmd = new Command(\"get\")\n  .argument(\"<name>\", \"The name of the environment variable to print.\")\n  .summary(\"Print a variable's value\")\n  .description(\"Print a variable's value: `npx convex env get NAME`\")\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .action(async (envVarName, _options, cmd) => {\n    const options = cmd.optsWithGlobals();\n    const { ctx, deployment } = await selectEnvDeployment(options);\n    await ensureHasConvexDependency(ctx, \"env get\");\n    await withRunningBackend({\n      ctx,\n      deployment,\n      action: async () => {\n        const backend = deploymentEnvBackend(ctx, deployment);\n        await envGet(ctx, backend, envVarName);\n      },\n    });\n  });\n\nconst envRemoveCmd = new Command(\"remove\")\n  .alias(\"rm\")\n  .alias(\"unset\")\n  .argument(\"<name>\", \"The name of the environment variable to unset.\")\n  .summary(\"Unset a variable\")\n  .description(\n    \"Unset a variable: `npx convex env remove NAME`\\n\" +\n      \"If the variable doesn't exist, the command doesn't do anything and succeeds.\",\n  )\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .action(async (name, _options, cmd) => {\n    const options = cmd.optsWithGlobals();\n    const { ctx, deployment } = await selectEnvDeployment(options);\n    await ensureHasConvexDependency(ctx, \"env remove\");\n    await withRunningBackend({\n      ctx,\n      deployment,\n      action: async () => {\n        const backend = deploymentEnvBackend(ctx, deployment);\n        await envRemove(ctx, backend, name);\n      },\n    });\n  });\n\nconst envListCmd = new Command(\"list\")\n  .summary(\"List all environment variables and their values\")\n  .description(\n    [\n      \"\u2022 List only variable names (no values): `npx convex env list --names-only`\",\n      \"\u2022 List all variables and their values: `npx convex env list --include-values`\",\n      \"\u2022 Save all variables to a file: `npx convex env list --include-values > .env.convex`\",\n      \"\u2022 Append to a file: `npx convex env list --include-values >> .env.convex`\",\n      \"\",\n      \"When an AI agent runs this command (detected from environment variables like AI_AGENT or CLAUDECODE), only names are listed unless --include-values is passed.\",\n    ].join(\"\\n\"),\n  )\n  .option(\n    \"--names-only\",\n    \"List only the names of environment variables, without their values\",\n  )\n  .addOption(\n    new Option(\n      \"--include-values\",\n      \"Print each variable's value alongside its name, in .env format. This is the default unless an AI agent is detected, so pass it explicitly in scripts that rely on the values.\",\n    ).conflicts(\"namesOnly\"),\n  )\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .action(async (cmdOptions, cmd) => {\n    // Note: We use `as` here because optsWithGlobals() type inference doesn't\n    // include global options from the parent command (added via addDeploymentSelectionOptions)\n    const options = cmd.optsWithGlobals() as DeploymentSelectionOptions;\n    const { ctx, deployment } = await selectEnvDeployment(options);\n    await ensureHasConvexDependency(ctx, \"env list\");\n    await withRunningBackend({\n      ctx,\n      deployment,\n      action: async () => {\n        const backend = deploymentEnvBackend(ctx, deployment);\n        await envList(ctx, backend, {\n          namesOnly: cmdOptions.namesOnly ?? false,\n          includeValues: cmdOptions.includeValues ?? false,\n        });\n      },\n    });\n  });\n\nexport const env = new Command(\"env\")\n  .summary(\"Set and view environment variables\")\n  .description(\n    [\n      \"Set and view environment variables on your deployment\",\n      \"\",\n      \"\u2022 Set a variable: `npx convex env set NAME 'value'`\",\n      \"\u2022 Set interactively: `npx convex env set NAME`\",\n      \"\u2022 Set multiple from file: `npx convex env set --from-file .env`\",\n      \"\u2022 Unset a variable: `npx convex env remove NAME`\",\n      \"\u2022 List only variable names (no values): `npx convex env list --names-only`\",\n      \"\u2022 List all variables and their values: `npx convex env list --include-values`\",\n      \"\u2022 Print a variable's value: `npx convex env get NAME`\",\n      \"\",\n      \"By default, this sets and views variables on your dev deployment.\",\n      \"\",\n      \"See the environment variables guide (https://docs.convex.dev/production/environment-variables) to learn more.\",\n    ].join(\"\\n\"),\n  )\n  .addCommand(envSetCmd)\n  .addCommand(envGetCmd)\n  .addCommand(envRemoveCmd)\n  .addCommand(envListCmd)\n  .addCommand(envDefault)\n  .helpCommand(false)\n  .addDeploymentSelectionOptions(\n    actionDescription(\"Set and view environment variables on\"),\n  );\n", "import { Command, Option } from \"@commander-js/extra-typings\";\nimport {\n  envGet,\n  envList,\n  envRemove,\n  envSet,\n  EnvVarBackend,\n} from \"./lib/env.js\";\nimport { ensureHasConvexDependency } from \"./lib/utils/utils.js\";\nimport { defaultEnvBackend } from \"./lib/defaultEnv.js\";\nimport {\n  CloudDeploymentType,\n  DeploymentSelectionOptions,\n  DeploymentType,\n  fetchTeamAndProject,\n} from \"./lib/api.js\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { selectEnvDeployment } from \"./env.js\";\nimport { getProjectDetails } from \"./lib/deploymentSelection.js\";\n\ntype EnvDefaultExtraOptions = {\n  type?: string;\n  project?: string;\n};\n\nfunction addEnvDefaultOptions<T extends Command<any, any>>(cmd: T): T {\n  return cmd\n    .addOption(\n      new Option(\n        \"--type <type>\",\n        \"Manage default env vars for the given deployment type (dev, preview, prod) instead of inferring from the current deployment.\",\n      ),\n    )\n    .addOption(\n      new Option(\n        \"--project <project>\",\n        \"Select a project manually. Accepts `team-slug:project-slug` or just `project-slug` (team inferred from your current project). Requires --type.\",\n      ),\n    ) as T;\n}\n\nconst envDefaultSet = addEnvDefaultOptions(\n  new Command(\"set\")\n    .usage(\"[options] <name> <value>\")\n    .argument(\"[name]\", \"The name of the default environment variable to set.\")\n    .argument(\n      \"[value]\",\n      \"The value to set the variable to. Omit to set it interactively.\",\n    )\n    .summary(\"Set a default variable\")\n    .description(\n      [\n        \"Set default environment variables for your project's deployment type.\",\n        \"\",\n        \"\u2022 `npx convex env default set NAME 'value'`\",\n        \"\u2022 `npx convex env default set NAME # omit a value to set one interactively`\",\n        \"\u2022 `npx convex env default set NAME --from-file value.txt`\",\n        \"\u2022 `npx convex env default set --from-file .env.defaults`\",\n        \"\",\n        \"When setting multiple values, it will refuse all changes if any variables are already set to different values by default. Pass --force to overwrite the provided values.\",\n        \"\",\n        \"The deployment type is determined by the current deployment (local maps to dev), or by --type if provided.\",\n      ].join(\"\\n\"),\n    )\n    .option(\n      \"--from-file <file>\",\n      \"Read environment variables from a .env file. Without --force, fails if any existing variable has a different value.\",\n    )\n    .option(\n      \"--force\",\n      \"When setting multiple variables, overwrite existing environment variable values instead of failing on mismatch.\",\n    )\n    .configureHelp({ showGlobalOptions: true })\n    .allowExcessArguments(false),\n).action(async (name, value, cmdOptions, cmd) => {\n  const options = cmd.optsWithGlobals() as DeploymentSelectionOptions &\n    EnvDefaultExtraOptions;\n  const { ctx, backend } = await resolveEnvDefaultBackend(options);\n  await ensureHasConvexDependency(ctx, \"env default set\");\n  const didAnything = await envSet(ctx, backend, name, value, cmdOptions);\n  if (didAnything === false) {\n    cmd.outputHelp({ error: true });\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"error: No environment variables specified to be set.\",\n    });\n  }\n});\n\nconst envDefaultGet = addEnvDefaultOptions(\n  new Command(\"get\")\n    .argument(\n      \"<name>\",\n      \"The name of the default environment variable to print.\",\n    )\n    .summary(\"Print a default variable's value\")\n    .description(\n      \"Print a default variable's value: `npx convex env default get NAME`\\n\" +\n        \"The deployment type is determined by the current deployment (local maps to dev), or by --type if provided.\",\n    )\n    .configureHelp({ showGlobalOptions: true })\n    .allowExcessArguments(false),\n).action(async (envVarName, _options, cmd) => {\n  const options = cmd.optsWithGlobals() as DeploymentSelectionOptions &\n    EnvDefaultExtraOptions;\n  const { ctx, backend } = await resolveEnvDefaultBackend(options);\n  await ensureHasConvexDependency(ctx, \"env default get\");\n  await envGet(ctx, backend, envVarName);\n});\n\nconst envDefaultRemove = addEnvDefaultOptions(\n  new Command(\"remove\")\n    .alias(\"rm\")\n    .alias(\"unset\")\n    .argument(\n      \"<name>\",\n      \"The name of the default environment variable to unset.\",\n    )\n    .summary(\"Unset a default variable\")\n    .description(\n      [\n        \"Unset a default variable.\",\n        \"\",\n        \"\u2022 `npx convex env default remove NAME`\",\n        \"\",\n        \"If the variable doesn't exist, the command doesn't do anything and succeeds.\",\n        \"\",\n        \"The deployment type is determined by the current deployment (local maps to dev), or by --type if provided.\",\n      ].join(\"\\n\"),\n    )\n    .configureHelp({ showGlobalOptions: true })\n    .allowExcessArguments(false),\n).action(async (name, _options, cmd) => {\n  const options = cmd.optsWithGlobals() as DeploymentSelectionOptions &\n    EnvDefaultExtraOptions;\n  const { ctx, backend } = await resolveEnvDefaultBackend(options);\n  await ensureHasConvexDependency(ctx, \"env default remove\");\n  await envRemove(ctx, backend, name);\n});\n\nconst envDefaultList = addEnvDefaultOptions(\n  new Command(\"list\")\n    .summary(\"List all default environment variables and their values\")\n    .description(\n      [\n        \"\u2022 List only default variable names (no values): `npx convex env default list --names-only`\",\n        \"\u2022 List all default variables and their values: `npx convex env default list --include-values`\",\n        \"\",\n        \"When an AI agent runs this command (detected from environment variables like AI_AGENT or CLAUDECODE), only names are listed unless --include-values is passed.\",\n        \"\",\n        \"The deployment type is determined by the current deployment (local maps to dev), or by --type if provided.\",\n      ].join(\"\\n\"),\n    )\n    .option(\n      \"--names-only\",\n      \"List only the names of environment variables, without their values\",\n    )\n    .addOption(\n      new Option(\n        \"--include-values\",\n        \"Print each variable's value alongside its name, in .env format. This is the default unless an AI agent is detected, so pass it explicitly in scripts that rely on the values.\",\n      ).conflicts(\"namesOnly\"),\n    )\n    .configureHelp({ showGlobalOptions: true })\n    .allowExcessArguments(false),\n).action(async (cmdOptions, cmd) => {\n  const options = cmd.optsWithGlobals() as DeploymentSelectionOptions &\n    EnvDefaultExtraOptions;\n  const { ctx, backend } = await resolveEnvDefaultBackend(options);\n  await ensureHasConvexDependency(ctx, \"env default list\");\n  await envList(ctx, backend, {\n    namesOnly: cmdOptions.namesOnly ?? false,\n    includeValues: cmdOptions.includeValues ?? false,\n  });\n});\n\nexport const envDefault = new Command(\"default\")\n  .summary(\"Manage project-level default environment variables\")\n  .description(\n    [\n      \"Manage default environment variables for your project.\",\n      \"\",\n      \"The default environment variables read and written to by this command are the ones for the deployment type of the current deployment (i.e. dev in most cases), unless --type is provided.\",\n      \"\",\n      \"\u2022 Set a default variable: `npx convex env default set NAME 'value'`\",\n      \"\u2022 Unset a default variable: `npx convex env default remove NAME`\",\n      \"\u2022 List only default variable names (no values): `npx convex env default list --names-only`\",\n      \"\u2022 List all default variables and their values: `npx convex env default list --include-values`\",\n      \"\u2022 Print a default variable's value: `npx convex env default get NAME`\",\n    ].join(\"\\n\"),\n  )\n  .addCommand(envDefaultSet)\n  .addCommand(envDefaultGet)\n  .addCommand(envDefaultRemove)\n  .addCommand(envDefaultList)\n  .helpCommand(false);\n\ntype ParsedProjectOption =\n  | { kind: \"teamAndProject\"; teamSlug: string; projectSlug: string }\n  | { kind: \"projectOnly\"; projectSlug: string };\n\nasync function resolveEnvDefaultBackend(\n  options: DeploymentSelectionOptions & EnvDefaultExtraOptions,\n): Promise<{ ctx: Context; backend: EnvVarBackend }> {\n  const dtypeOverride = normalizeTypeOption(options.type);\n\n  if (options.project !== undefined) {\n    const parsedProject = parseProjectOption(options.project);\n    if (parsedProject === null) {\n      const ctx = await oneoffContext(options);\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"error: --project must be `team-slug:project-slug` or `project-slug`.\",\n      });\n    }\n    if (dtypeOverride === undefined) {\n      const ctx = await oneoffContext(options);\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: \"error: --project requires --type to also be set.\",\n      });\n    }\n\n    let ctx: Context;\n    let resolved: { teamSlug: string; projectSlug: string };\n    if (parsedProject.kind === \"teamAndProject\") {\n      ctx = await oneoffContext(options);\n      resolved = {\n        teamSlug: parsedProject.teamSlug,\n        projectSlug: parsedProject.projectSlug,\n      };\n    } else {\n      const selected = await selectEnvDeployment(options);\n      ctx = selected.ctx;\n      if (selected.deployment.deploymentFields === null) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"error: --project <project-slug> requires a current cloud deployment to infer the team from. Use `team-slug:project-slug` to specify the team explicitly.\",\n        });\n      }\n      const { team } = await fetchTeamAndProject(\n        ctx,\n        selected.deployment.deploymentFields.deploymentName,\n      );\n      resolved = { teamSlug: team, projectSlug: parsedProject.projectSlug };\n    }\n\n    const details = await getProjectDetails(ctx, {\n      kind: \"teamAndProjectSlugs\",\n      teamSlug: resolved.teamSlug,\n      projectSlug: resolved.projectSlug,\n    });\n    return {\n      ctx,\n      backend: defaultEnvBackend(ctx, details.id, dtypeOverride),\n    };\n  }\n\n  const { ctx, deployment } = await selectEnvDeployment(options);\n  const backend = await resolveDefaultEnvBackend(\n    ctx,\n    deployment.deploymentFields,\n    dtypeOverride,\n  );\n  return { ctx, backend };\n}\n\nfunction normalizeTypeOption(\n  type: string | undefined,\n): CloudDeploymentType | undefined {\n  if (type === undefined) return undefined;\n  if (type === \"development\") return \"dev\";\n  if (type === \"production\") return \"prod\";\n  return type as CloudDeploymentType;\n}\n\nfunction parseProjectOption(value: string): ParsedProjectOption | null {\n  const parts = value.split(\":\");\n  if (parts.length === 1 && parts[0].length > 0) {\n    return { kind: \"projectOnly\", projectSlug: parts[0] };\n  }\n  if (parts.length === 2 && parts[0].length > 0 && parts[1].length > 0) {\n    return {\n      kind: \"teamAndProject\",\n      teamSlug: parts[0],\n      projectSlug: parts[1],\n    };\n  }\n  return null;\n}\n\nexport async function resolveDefaultEnvBackend(\n  ctx: Context,\n  deploymentFields: {\n    deploymentName: string;\n    deploymentType: DeploymentType;\n  } | null,\n  dtypeOverride?: CloudDeploymentType,\n): Promise<EnvVarBackend> {\n  if (deploymentFields === null) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"Default environment variables are only available for cloud projects.\",\n    });\n  }\n  if (deploymentFields.deploymentType === \"anonymous\") {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"Default environment variables are not available for anonymous deployments.\",\n    });\n  }\n  const dtype =\n    dtypeOverride ?? resolveDefaultEnvDtype(deploymentFields.deploymentType);\n  const { projectId } = await fetchTeamAndProject(\n    ctx,\n    deploymentFields.deploymentName,\n  );\n  return defaultEnvBackend(ctx, projectId, dtype);\n}\n\nfunction resolveDefaultEnvDtype(\n  deploymentType: Exclude<DeploymentType, \"anonymous\">,\n): CloudDeploymentType {\n  if (deploymentType === \"local\") return \"dev\";\n  return deploymentType;\n}\n", "import type {\n  GetCurrentUsageResponse,\n  UsageLimitConfigRequest,\n  UsageLimitConfigResponse,\n  UsageLimitMetric,\n} from \"@convex-dev/platform/deploymentApi\";\nimport { Context } from \"../../bundler/context.js\";\nimport { deploymentFetch, logAndHandleFetchError } from \"./utils/utils.js\";\n\nexport type UsageLimitDeployment = {\n  deploymentUrl: string;\n  adminKey: string;\n};\n\nexport const USAGE_LIMIT_METRICS = [\n  \"functionCalls\",\n  \"queryMutationComputeGbHours\",\n  \"actionComputeConvexGbHours\",\n  \"actionComputeNodeJsGbHours\",\n  \"actionComputeCpuGbHours\",\n  \"databaseIoGb\",\n  \"searchQueryGb\",\n  \"dataEgressGb\",\n  \"aiGatewayCostDollars\",\n] as const satisfies readonly UsageLimitMetric[];\n\n// Fails to compile if the backend's `UsageLimitMetric` gains a metric not listed\n// above, so the CLI's `--metric` choices and ordering stay complete.\ntype MissingMetric = Exclude<\n  UsageLimitMetric,\n  (typeof USAGE_LIMIT_METRICS)[number]\n>;\nconst _metricsExhaustive: [MissingMetric] extends [never] ? true : never = true;\nvoid _metricsExhaustive;\n\nexport const USAGE_LIMIT_WINDOWS = [\"day\", \"month\"] as const;\nexport type UsageLimitWindow = (typeof USAGE_LIMIT_WINDOWS)[number];\n\nexport const USAGE_LIMIT_TYPES = [\"warning\", \"disable\"] as const;\nexport type UsageLimitType = (typeof USAGE_LIMIT_TYPES)[number];\n\nexport const METRIC_LABELS: Record<UsageLimitMetric, string> = {\n  functionCalls: \"Function calls\",\n  queryMutationComputeGbHours: \"Query/Mutation compute\",\n  actionComputeConvexGbHours: \"Action compute\",\n  actionComputeNodeJsGbHours: \"Action compute (Node.js)\",\n  actionComputeCpuGbHours: \"Action compute (CPU)\",\n  databaseIoGb: \"Database I/O\",\n  searchQueryGb: \"Search queries\",\n  dataEgressGb: \"Data egress\",\n  aiGatewayCostDollars: \"AI Gateway\",\n};\n\nexport function metricLabel(metric: string): string {\n  // Look up permissively: a newer backend may report a metric this CLI's label\n  // map doesn't know, in which case fall back to the raw id.\n  return (METRIC_LABELS as Record<string, string>)[metric] ?? metric;\n}\n\nasync function usageLimitFetch(\n  ctx: Context,\n  deployment: UsageLimitDeployment,\n  path: string,\n  init?: { method?: string; body?: unknown },\n): Promise<unknown> {\n  const fetch = deploymentFetch(ctx, deployment);\n  try {\n    const response = await fetch(`/api/v1${path}`, {\n      method: init?.method ?? \"GET\",\n      ...(init?.body !== undefined ? { body: JSON.stringify(init.body) } : {}),\n    });\n    const text = await response.text();\n    return text.length > 0 ? JSON.parse(text) : undefined;\n  } catch (e) {\n    return await logAndHandleFetchError(ctx, e);\n  }\n}\n\nexport async function listUsageLimits(\n  ctx: Context,\n  deployment: UsageLimitDeployment,\n): Promise<UsageLimitConfigResponse[]> {\n  const result = (await usageLimitFetch(\n    ctx,\n    deployment,\n    \"/list_usage_limits\",\n  )) as {\n    usageLimits: UsageLimitConfigResponse[];\n  };\n  return result.usageLimits;\n}\n\nexport async function createUsageLimit(\n  ctx: Context,\n  deployment: UsageLimitDeployment,\n  config: UsageLimitConfigRequest,\n): Promise<UsageLimitConfigResponse> {\n  const result = (await usageLimitFetch(\n    ctx,\n    deployment,\n    \"/create_usage_limit\",\n    {\n      method: \"POST\",\n      body: config,\n    },\n  )) as { usageLimit: UsageLimitConfigResponse };\n  return result.usageLimit;\n}\n\nexport async function updateUsageLimit(\n  ctx: Context,\n  deployment: UsageLimitDeployment,\n  id: string,\n  config: UsageLimitConfigRequest,\n): Promise<UsageLimitConfigResponse> {\n  const result = (await usageLimitFetch(\n    ctx,\n    deployment,\n    `/update_usage_limit/${id}`,\n    { method: \"POST\", body: config },\n  )) as { usageLimit: UsageLimitConfigResponse };\n  return result.usageLimit;\n}\n\nexport async function deleteUsageLimit(\n  ctx: Context,\n  deployment: UsageLimitDeployment,\n  id: string,\n): Promise<void> {\n  await usageLimitFetch(ctx, deployment, `/delete_usage_limit/${id}`, {\n    method: \"POST\",\n  });\n}\n\nexport async function getCurrentUsage(\n  ctx: Context,\n  deployment: UsageLimitDeployment,\n): Promise<GetCurrentUsageResponse> {\n  return (await usageLimitFetch(\n    ctx,\n    deployment,\n    \"/get_current_usage\",\n  )) as GetCurrentUsageResponse;\n}\n\nfunction metricRank(metric: string): number {\n  const i = (USAGE_LIMIT_METRICS as readonly string[]).indexOf(metric);\n  // Unknown metrics (e.g. a newer backend adds one) sort last, stably.\n  return i === -1 ? USAGE_LIMIT_METRICS.length : i;\n}\n\n// Windows coarsest-first and warning-before-disable,.\nconst windowRank = (w: string) => (w === \"month\" ? 0 : 1);\nconst typeRank = (t: string) => (t === \"warning\" ? 0 : 1);\n\nexport function compareUsageLimits(\n  a: { metric: string; window: string; limitType: string },\n  b: { metric: string; window: string; limitType: string },\n): number {\n  return (\n    metricRank(a.metric) - metricRank(b.metric) ||\n    windowRank(a.window) - windowRank(b.window) ||\n    typeRank(a.limitType) - typeRank(b.limitType)\n  );\n}\n\nexport function compareMetricNames(a: string, b: string): number {\n  return metricRank(a) - metricRank(b);\n}\n\n// A limit annotated with the current usage in its window and whether it's\n// currently triggered.\nexport type UsageLimitStatus = UsageLimitConfigResponse & {\n  currentUsage: number | null;\n  unit: string | null;\n  triggered: boolean;\n};\n\nfunction usageInWindow(\n  usage: GetCurrentUsageResponse,\n  metric: string,\n  window: string,\n): number | null {\n  const m = usage.metrics[metric];\n  if (m === undefined) {\n    return null;\n  }\n  return window === \"day\" ? m.usage.current_day : m.usage.current_month;\n}\n\n// List usage limits annotated with current usage and triggered state, sorted in\n// dashboard order. Fetches the limits and current usage together.\nexport async function listUsageLimitsWithStatus(\n  ctx: Context,\n  deployment: UsageLimitDeployment,\n): Promise<{\n  limits: UsageLimitStatus[];\n  seedStatus: GetCurrentUsageResponse[\"seedStatus\"];\n}> {\n  const [limits, usage] = await Promise.all([\n    listUsageLimits(ctx, deployment),\n    getCurrentUsage(ctx, deployment),\n  ]);\n  const withStatus = limits\n    .map((limit): UsageLimitStatus => {\n      const currentUsage = usageInWindow(usage, limit.metric, limit.window);\n      const unit = usage.metrics[limit.metric]?.unit ?? null;\n      const triggered =\n        limit.enabled && currentUsage !== null && currentUsage >= limit.limit;\n      return { ...limit, currentUsage, unit, triggered };\n    })\n    .sort(compareUsageLimits);\n  return { limits: withStatus, seedStatus: usage.seedStatus };\n}\n\n// A usage limit is uniquely identified by (metric, window, limitType) \u2014 the\n// same key the backend enforces uniqueness on. The HTTP API addresses limits by\n// document id, so callers who know the natural key list and resolve it here.\nexport type UsageLimitKey = {\n  metric: UsageLimitMetric;\n  window: string;\n  limitType: string;\n};\n\nexport async function findUsageLimitByKey(\n  ctx: Context,\n  deployment: UsageLimitDeployment & { deploymentNotice: string },\n  key: UsageLimitKey,\n): Promise<UsageLimitConfigResponse> {\n  const match = (await listUsageLimits(ctx, deployment)).find(\n    (limit) =>\n      limit.metric === key.metric &&\n      limit.window === key.window &&\n      limit.limitType === key.limitType,\n  );\n  if (match === undefined) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `error: No ${key.limitType} usage limit on ${key.metric} per ${key.window}${deployment.deploymentNotice}.`,\n    });\n  }\n  return match;\n}\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { deploymentSelect } from \"./deploymentSelect.js\";\nimport { deploymentCreate } from \"./deploymentCreate.js\";\nimport { deploymentToken } from \"./deploymentToken.js\";\nimport { usage, usageLimits } from \"./usageLimits.js\";\n\nexport const deployment = new Command(\"deployment\")\n  .summary(\"Manage deployments\")\n  .description(\"Manage deployments in your project.\")\n  .addCommand(deploymentSelect)\n  .addCommand(deploymentCreate)\n  .addCommand(deploymentToken)\n  .addCommand(usage)\n  .addCommand(usageLimits);\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { oneoffContext, Context } from \"../bundler/context.js\";\nimport { logMessage } from \"../bundler/log.js\";\nimport {\n  getDeploymentSelection,\n  DeploymentSelection,\n} from \"./lib/deploymentSelection.js\";\nimport { fetchTeamAndProject } from \"./lib/api.js\";\n\n// This is a debugging command: it's output is not stable, don't write scripts\n// that depend on its output.\n\n// TODO: for the deployments command to list all deployments in a project\n// we need a stable endpoint for listing projects (check) and a way to\n// get a project ID in all cases to use it. We have an endpoint that lists\n// deployments by team/project slug today but it's not in use and we'll\n// be able to deprecate it if we avoid using it.\n\nexport const deployments = new Command(\"deployments\")\n  .description(\"List deployments associated with a project\")\n  .allowExcessArguments(false)\n  .action(async () => {\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n\n    const deploymentSelection = await getDeploymentSelection(ctx, {\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n\n    await displayCurrentDeploymentInfo(ctx, deploymentSelection);\n  });\n\nasync function displayCurrentDeploymentInfo(\n  ctx: Context,\n  selection: DeploymentSelection,\n) {\n  logMessage(\"Currently configured deployment:\");\n\n  switch (selection.kind) {\n    case \"existingDeployment\": {\n      const { deploymentToActOn } = selection;\n      logMessage(`  URL: ${deploymentToActOn.url}`);\n\n      if (deploymentToActOn.deploymentFields) {\n        const fields = deploymentToActOn.deploymentFields;\n        logMessage(\n          `  Deployment: ${fields.deploymentName} (${fields.deploymentType})`,\n        );\n        logMessage(`  Team: ${fields.teamSlug}`);\n        logMessage(`  Project: ${fields.projectSlug}`);\n      } else {\n        logMessage(`  Type: ${deploymentToActOn.source}`);\n      }\n      break;\n    }\n    case \"deploymentWithinProject\": {\n      const { targetProject } = selection;\n      if (targetProject.kind === \"teamAndProjectSlugs\") {\n        logMessage(`  Team: ${targetProject.teamSlug}`);\n        logMessage(`  Project: ${targetProject.projectSlug}`);\n      } else if (targetProject.kind === \"deploymentName\") {\n        const slugs = await fetchTeamAndProject(\n          ctx,\n          targetProject.deploymentName,\n        );\n        logMessage(`  Team: ${slugs.team}`);\n        logMessage(`  Project: ${slugs.project}`);\n        logMessage(`  Deployment: ${targetProject.deploymentName}`);\n        if (targetProject.deploymentType) {\n          logMessage(`  Type: ${targetProject.deploymentType}`);\n        }\n      } else {\n        logMessage(`  Project deploy key configured`);\n      }\n      break;\n    }\n    case \"preview\": {\n      logMessage(`  Preview deployment (deploy key configured)`);\n      break;\n    }\n    case \"anonymous\": {\n      if (selection.deploymentName) {\n        logMessage(`  Anonymous deployment: ${selection.deploymentName}`);\n      } else {\n        logMessage(`  Anonymous development (no deployment selected)`);\n      }\n      break;\n    }\n    case \"chooseProject\": {\n      logMessage(`  No project configured - will prompt interactively`);\n      break;\n    }\n    default: {\n      logMessage(`  Unknown deployment configuration`);\n    }\n  }\n}\n", "import { Command, Option } from \"@commander-js/extra-typings\";\nimport { chalkStderr } from \"chalk\";\nimport { installSigintHandler, oneoffContext } from \"../bundler/context.js\";\nimport { deploymentCredentialsOrConfigure } from \"./configure.js\";\nimport { announceDeploymentTarget } from \"./lib/announceDeploymentTarget.js\";\nimport { usageStateWarning } from \"./lib/usage.js\";\nimport { normalizeDevOptions } from \"./lib/command.js\";\nimport { devAgainstDeployment } from \"./lib/dev.js\";\nimport {\n  CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n  CONVEX_SELF_HOSTED_URL_VAR_NAME,\n  ensureHasConvexDependency,\n} from \"./lib/utils/utils.js\";\nimport {\n  getDeploymentSelection,\n  type DeploymentSelection,\n} from \"./lib/deploymentSelection.js\";\nimport { checkVersionAndAiFilesStaleness } from \"./lib/updates.js\";\n\nexport const dev = new Command(\"dev\")\n  .summary(\"Develop against a dev deployment, watching for changes\")\n  .description(\n    \"Develop against a dev deployment, watching for changes\\n\\n\" +\n      \"  1. Configures a new or existing project (if needed)\\n\" +\n      \"  2. Updates generated types and pushes code to the configured dev deployment\\n\" +\n      \"  3. Runs the provided command (if `--start` or `--run` is used)\\n\" +\n      \"  4. Watches for file changes, and repeats step 2\\n\",\n  )\n  .allowExcessArguments(false)\n  .option(\"-v, --verbose\", \"Show full listing of changes\")\n  .addOption(\n    new Option(\n      \"--typecheck <mode>\",\n      `Check TypeScript files with \\`tsc --noEmit\\`.`,\n    )\n      .choices([\"enable\", \"try\", \"disable\"] as const)\n      .default(\"try\" as const),\n  )\n  .option(\n    \"--typecheck-components\",\n    \"Check TypeScript files within component implementations with `tsc --noEmit`.\",\n    false,\n  )\n  .addOption(\n    new Option(\"--codegen <mode>\", \"Regenerate code in `convex/_generated/`\")\n      .choices([\"enable\", \"disable\"] as const)\n      .default(\"enable\" as const),\n  )\n  .addOption(\n    new Option(\n      \"--push-all-modules\",\n      \"Push all modules without checking for unchanged module hashes from the server\",\n    )\n      .default(false)\n      .hideHelp(),\n  )\n  .option(\n    \"--once\",\n    \"Execute only the first 3 steps, stop on any failure\",\n    false,\n  )\n  .option(\n    \"--until-success\",\n    \"Execute only the first 3 steps, on failure watch for local and remote changes and retry steps 2 and 3\",\n    false,\n  )\n  .addOption(\n    new Option(\n      \"--start <command>\",\n      \"Start a long-running command alongside `npx convex dev`, like a frontend \" +\n        \"dev server. The command inherits stdin/stdout so you can interact \" +\n        \"with it directly. Example: npx convex dev --start 'vite --open'\",\n    ).conflicts([\"--run\", \"--run-sh\"]),\n  )\n  .addOption(\n    new Option(\"--run-sh <command>\", \"Deprecated: use --start instead.\")\n      .conflicts([\"--start\", \"--run\"])\n      .hideHelp(),\n  )\n  .addOption(\n    new Option(\n      \"--run <functionName>\",\n      \"The identifier of the function to run in step 3, \" +\n        \"like `api.init.createData` or `myDir/myFile:myFunction`\",\n    ).conflicts([\"--start\"]),\n  )\n  .option(\n    \"--run-component <functionName>\",\n    'If --run is used and the function is in a component, the path to the component (e.g. \"workflow\" or \"workflow/workpool\"). ' +\n      \"Components are a beta feature. This flag is unstable and may change in subsequent releases.\",\n  )\n  .addOption(\n    new Option(\n      \"--tail-logs [mode]\",\n      [\n        \"Choose whether to tail Convex function logs in this terminal: \",\n        \"\u2022 `always` shows logs continuously\",\n        \"\u2022 `pause-on-deploy` (the default) pauses logs during deploys so you can spot sync issues\",\n        \"\u2022 `disable` hides logs while developing.\",\n      ].join(\"\\n\"),\n    )\n      .choices([\"always\", \"pause-on-deploy\", \"disable\"] as const)\n      .default(\"pause-on-deploy\"),\n  )\n  .addOption(new Option(\"--trace-events\").default(false).hideHelp())\n  .addOption(new Option(\"--debug-bundle-path <path>\").hideHelp())\n  .addOption(new Option(\"--debug-node-apis\").hideHelp())\n  .addOption(new Option(\"--live-component-sources\").hideHelp())\n  .addOption(\n    new Option(\n      \"--configure [choice]\",\n      \"Ignore existing configuration and configure new or existing project, interactively or set by --team <team_slug>, --project <project_slug>, and --dev-deployment local|cloud\",\n    )\n      .choices([\"new\", \"existing\"] as const)\n      .conflicts([\"--url\", \"--admin-key\", \"--env-file\"]),\n  )\n  .addOption(\n    new Option(\n      \"--team <team_slug>\",\n      \"The team you'd like to use for this project\",\n    ).hideHelp(),\n  )\n  .addOption(\n    new Option(\n      \"--project <project_slug>\",\n      \"The name of the project you'd like to configure\",\n    ).hideHelp(),\n  )\n  .addOption(\n    new Option(\n      \"--dev-deployment <mode>\",\n      \"Use a local or cloud deployment for dev for this project\",\n    )\n      .choices([\"cloud\", \"local\"] as const)\n      .conflicts([\"--prod\"])\n      .hideHelp(),\n  )\n  .addOption(\n    new Option(\n      \"--prod\",\n      \"Develop live against this project's production deployment.\",\n    )\n      .default(false)\n      .hideHelp(),\n  )\n  .addOption(\n    // Only `--prod` pushes check this; hidden alongside it.\n    new Option(\n      \"--allow-unstaging-schema\",\n      \"Skip the confirmation prompt when a push to production discards a staged table validator that is validating or already validated.\",\n    )\n      .default(false)\n      .hideHelp(),\n  )\n  .addOption(\n    new Option(\n      \"--env-file <envFile>\",\n      `Path to a custom file of environment variables, for choosing the \\\ndeployment, e.g. ${CONVEX_DEPLOYMENT_ENV_VAR_NAME} or ${CONVEX_SELF_HOSTED_URL_VAR_NAME}. \\\nSame format as .env.local or .env files, and overrides them.`,\n    ),\n  )\n  .addOption(new Option(\"--skip-push\").default(false).hideHelp())\n  .addOption(new Option(\"--admin-key <adminKey>\").hideHelp())\n  .addOption(new Option(\"--url <url>\").hideHelp())\n  // Options for testing\n  .addOption(new Option(\"--override-auth-url <url>\").hideHelp())\n  .addOption(new Option(\"--override-auth-client <id>\").hideHelp())\n  .addOption(new Option(\"--override-auth-username <username>\").hideHelp())\n  .addOption(new Option(\"--override-auth-password <password>\").hideHelp())\n  .addOption(new Option(\"--local-cloud-port <port>\").hideHelp())\n  .addOption(new Option(\"--local-site-port <port>\").hideHelp())\n  .addOption(new Option(\"--local-backend-version <version>\").hideHelp())\n  .addOption(new Option(\"--local-force-upgrade\").default(false).hideHelp())\n  .addOption(new Option(\"--deployment <deployment>\").hideHelp())\n  .addOption(new Option(\"--local\").default(false).hideHelp())\n  .addOption(new Option(\"--cloud\").default(false).hideHelp())\n  .showHelpAfterError()\n  .action(async (cmdOptions) => {\n    const ctx = await oneoffContext(cmdOptions);\n    installSigintHandler(ctx);\n\n    if (cmdOptions.deployment !== undefined) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"`--deployment` can\u2019t be used with `npx convex dev`. \\n\\n\" +\n          \"  To select this deployment for development, run: \\n\" +\n          chalkStderr.bold(\n            `      npx convex deployment select ${cmdOptions.deployment}\\n`,\n          ) +\n          \"  Then, run `npx convex dev` again.\",\n      });\n    }\n\n    if (cmdOptions.local) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"`--local` is deprecated. \\n\\n\" +\n          \"  To select your local deployment, run: \\n\" +\n          chalkStderr.bold(\"      npx convex deployment select local\\n\") +\n          \"  Then, run `npx convex dev` again.\",\n      });\n    }\n\n    if (cmdOptions.cloud) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"`--cloud` is deprecated. \\n\\n\" +\n          \"  To select your personal cloud dev deployment, run: \\n\" +\n          chalkStderr.bold(\"      npx convex deployment select dev\\n\") +\n          \"  Then, run `npx convex dev` again.\",\n      });\n    }\n\n    const devOptions = await normalizeDevOptions(ctx, cmdOptions);\n\n    // Check that we're in a Convex project (a package.json with a `convex`\n    // dependency) before doing anything else, so we fail fast with a clear\n    // error instead of prompting to create/select a project and only then\n    // crashing because there's nothing to push.\n    await ensureHasConvexDependency(ctx, \"run `npx convex dev`\");\n\n    if (cmdOptions.configure === undefined) {\n      if (cmdOptions.team || cmdOptions.project || cmdOptions.devDeployment)\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"`--team, --project, and --dev-deployment can can only be used with `--configure`.\",\n        });\n    }\n\n    const localOptions: {\n      ports: { cloud: number | undefined; site: number | undefined };\n      backendVersion: string | undefined;\n      forceUpgrade: boolean;\n    } = {\n      ports: {\n        cloud:\n          cmdOptions.localCloudPort !== undefined\n            ? parseInt(cmdOptions.localCloudPort)\n            : undefined,\n        site:\n          cmdOptions.localSitePort !== undefined\n            ? parseInt(cmdOptions.localSitePort)\n            : undefined,\n      },\n      backendVersion: cmdOptions.localBackendVersion,\n      forceUpgrade: cmdOptions.localForceUpgrade,\n    };\n\n    const configure =\n      cmdOptions.configure === true ? \"ask\" : (cmdOptions.configure ?? null);\n    // --configure means \"pick a project\" \u2014 skip deployment selection entirely\n    const deploymentSelection =\n      configure !== null\n        ? ({\n            kind: \"chooseProject\",\n            selectionWithinProject: {\n              // For backwards compatibility, allow `--configure --prod`\n              kind: cmdOptions.prod ? \"prod\" : \"unspecified\",\n            },\n          } satisfies DeploymentSelection)\n        : await getDeploymentSelection(ctx, cmdOptions);\n    const credentials = await deploymentCredentialsOrConfigure(\n      ctx,\n      deploymentSelection,\n      configure,\n      {\n        ...cmdOptions,\n        localOptions,\n      },\n    );\n\n    announceDeploymentTarget(\"Developing against deployment:\", credentials);\n\n    await Promise.all([\n      ...(!cmdOptions.skipPush\n        ? [\n            devAgainstDeployment(\n              ctx,\n              {\n                url: credentials.url,\n                adminKey: credentials.adminKey,\n                deploymentName:\n                  credentials.deploymentFields?.deploymentName ?? null,\n                ...(credentials.deploymentFields?.deploymentType !== undefined\n                  ? {\n                      deploymentType:\n                        credentials.deploymentFields.deploymentType,\n                    }\n                  : {}),\n                backendVersion: localOptions.backendVersion,\n              },\n              devOptions,\n            ),\n          ]\n        : []),\n      ...(credentials.deploymentFields !== null\n        ? [\n            usageStateWarning(ctx, credentials.deploymentFields.deploymentName),\n            checkVersionAndAiFilesStaleness(ctx),\n          ]\n        : []),\n    ]);\n  });\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { chalkStderr } from \"chalk\";\nimport open from \"open\";\nimport { logMessage } from \"../bundler/log.js\";\n\nexport const docs = new Command(\"docs\")\n  .description(\"Open the docs in the browser\")\n  .allowExcessArguments(false)\n  .option(\"--no-open\", \"Print docs URL instead of opening it in your browser\")\n  .action(async (options) => {\n    await openDocs(options.open);\n  });\n\nasync function openDocs(toOpen: boolean) {\n  const docsUrl = \"https://docs.convex.dev/?utm_source=convex-cli\";\n  if (toOpen) {\n    await open(docsUrl);\n    logMessage(chalkStderr.green(\"Docs have launched! Check your browser.\"));\n  } else {\n    logMessage(chalkStderr.green(`Find Convex docs here: ${docsUrl}`));\n  }\n}\n", "// eslint-disable-next-line no-restricted-imports -- chalk used for formatting stdout via logOutput()\nimport chalk from \"chalk\";\nimport { logOutput } from \"../../bundler/log.js\";\nimport { runSystemQuery } from \"./run.js\";\nimport { Context } from \"../../bundler/context.js\";\nimport { convexToJson } from \"../../values/value.js\";\n\nexport async function functionSpecForDeployment(\n  ctx: Context,\n  options: {\n    deploymentUrl: string;\n    adminKey: string;\n    file: boolean;\n  },\n) {\n  const functions = (await runSystemQuery(ctx, {\n    deploymentUrl: options.deploymentUrl,\n    adminKey: options.adminKey,\n    functionName: \"_system/cli/modules:apiSpec\",\n    componentPath: undefined,\n    args: {},\n  })) as any[];\n  const url = (await runSystemQuery(ctx, {\n    deploymentUrl: options.deploymentUrl,\n    adminKey: options.adminKey,\n    functionName: \"_system/cli/convexUrl:cloudUrl\",\n    componentPath: undefined,\n    args: {},\n  })) as string;\n\n  const output = JSON.stringify(\n    { url, functions: convexToJson(functions) },\n    null,\n    2,\n  );\n\n  if (options.file) {\n    const fileName = `function_spec_${Date.now().valueOf()}.json`;\n    ctx.fs.writeUtf8File(fileName, output);\n    logOutput(chalk.green(`Wrote function spec to ${fileName}`));\n  } else {\n    logOutput(output);\n  }\n}\n", "import { oneoffContext } from \"../bundler/context.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { Command, Option } from \"@commander-js/extra-typings\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { functionSpecForDeployment } from \"./lib/functionSpec.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nexport const functionSpec = new Command(\"function-spec\")\n  .summary(\"List function metadata from your deployment\")\n  .description(\n    \"List argument and return values to your Convex functions.\\n\\n\" +\n      \"By default, this inspects your dev deployment.\",\n  )\n  .allowExcessArguments(false)\n  .addOption(new Option(\"--file\", \"Output as JSON to a file.\"))\n  .addDeploymentSelectionOptions(\n    actionDescription(\"Read function metadata from\"),\n  )\n  .showHelpAfterError()\n  .action(async (options) => {\n    const ctx = await oneoffContext(options);\n    const deploymentSelection = await getDeploymentSelection(ctx, options);\n    const { adminKey, url: deploymentUrl } =\n      await loadSelectedDeploymentCredentials(ctx, deploymentSelection);\n\n    await functionSpecForDeployment(ctx, {\n      deploymentUrl,\n      adminKey,\n      file: !!options.file,\n    });\n  });\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { installSigintHandler, oneoffContext } from \"../bundler/context.js\";\nimport { deploymentCredentialsOrConfigure } from \"./configure.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport { checkVersionAndAiFilesStaleness } from \"./lib/updates.js\";\nimport { usageStateWarning } from \"./lib/usage.js\";\n\n// Equivalent to `npx convex dev --once --skip-push`.\nexport const init = new Command(\"init\")\n  .description(\n    \"Ensures a Convex project is configured and initialized in the current directory. Does nothing if one is already configured. Unlike `npx convex dev`, it will not push code or typecheck.\\nTypically you can skip this and run `npx convex dev` directly which will both initialize and continously deploy code. \\n\\nTo initialize an agent: `export CONVEX_AGENT_MODE=anonymous && npx convex init && npx convex env set < .env.defaults && npx convex dev`.\",\n  )\n  .summary(\n    \"Ensures a Convex project is configured. Does not push code. No-ops if already configured.\",\n  )\n  .allowExcessArguments(false)\n  .action(async () => {\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n    installSigintHandler(ctx);\n\n    const deploymentSelection = await getDeploymentSelection(ctx, {});\n    const credentials = await deploymentCredentialsOrConfigure(\n      ctx,\n      deploymentSelection,\n      null,\n      {\n        prod: false,\n        localOptions: {\n          ports: {\n            cloud: undefined,\n            site: undefined,\n          },\n          forceUpgrade: false,\n        },\n      },\n    );\n\n    if (credentials.deploymentFields !== null) {\n      await Promise.all([\n        usageStateWarning(ctx, credentials.deploymentFields.deploymentName),\n        checkVersionAndAiFilesStaleness(ctx),\n      ]);\n    }\n\n    await ctx.flushAndExit(0);\n  });\n", "import { Command } from \"@commander-js/extra-typings\";\n// eslint-disable-next-line no-restricted-imports -- stdout output uses default chalk\nimport chalk from \"chalk\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logOutput } from \"../bundler/log.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { deploymentDashboardUrlPage } from \"./lib/dashboard.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport { type Insight, fetchInsights } from \"./lib/insights.js\";\n\nfunction formatInsightKind(kind: string): string {\n  switch (kind) {\n    case \"occRetried\":\n      return \"OCC Retried\";\n    case \"occFailedPermanently\":\n      return \"OCC Failed Permanently\";\n    case \"bytesReadLimit\":\n      return \"Bytes Read Limit Exceeded\";\n    case \"bytesReadThreshold\":\n      return \"Bytes Read Near Limit\";\n    case \"documentsReadLimit\":\n      return \"Documents Read Limit Exceeded\";\n    case \"documentsReadThreshold\":\n      return \"Documents Read Near Limit\";\n    default:\n      return kind;\n  }\n}\n\nfunction formatFunctionName(insight: Insight): string {\n  if (insight.componentPath) {\n    return `${insight.componentPath}:${insight.functionId}`;\n  }\n  return insight.functionId;\n}\n\nfunction formatInsight(insight: Insight, details: boolean): string {\n  const severity =\n    insight.severity === \"error\"\n      ? chalk.red(`[ERROR]`)\n      : chalk.yellow(`[WARNING]`);\n  const kind = formatInsightKind(insight.kind);\n  const fn = chalk.bold(formatFunctionName(insight));\n\n  let detail: string;\n  if (\"occCalls\" in insight) {\n    const table = insight.occTableName\n      ? ` on table ${chalk.cyan(insight.occTableName)}`\n      : \"\";\n    detail = `${insight.occCalls} OCC conflict${insight.occCalls !== 1 ? \"s\" : \"\"}${table}`;\n  } else {\n    detail = `${insight.count} occurrence${insight.count !== 1 ? \"s\" : \"\"}`;\n  }\n\n  let output = `${severity} ${kind}: ${fn} \u2014 ${detail}`;\n\n  if (details && insight.recentEvents && insight.recentEvents.length > 0) {\n    output += \"\\n\";\n    for (const event of insight.recentEvents) {\n      const time = chalk.dim(new Date(event.timestamp).toLocaleString());\n      const reqId = chalk.dim(`req:${event.request_id}`);\n\n      if (\"occ_retry_count\" in event) {\n        const docId = event.occ_document_id\n          ? ` doc:${event.occ_document_id}`\n          : \"\";\n        const source = event.occ_write_source\n          ? ` source:${event.occ_write_source}`\n          : \"\";\n        output += `    ${time}  ${reqId}  retries:${event.occ_retry_count}${docId}${source}\\n`;\n      } else {\n        const status = event.success ? chalk.green(\"ok\") : chalk.red(\"fail\");\n        const calls = event.calls\n          .map(\n            (c) =>\n              `${c.table_name}(${c.documents_read} docs, ${c.bytes_read} bytes)`,\n          )\n          .join(\", \");\n        output += `    ${time}  ${reqId}  ${status}  ${calls}\\n`;\n      }\n    }\n  }\n\n  return output;\n}\n\nexport const insights = new Command(\"insights\")\n  .summary(\"Show health insights for your deployment\")\n  .description(\n    [\n      \"Show health insights for a Convex deployment over the last 72 hours.\",\n      \"Displays OCC conflicts and resource limit issues that may indicate performance problems.\",\n      \"\",\n      \"\u2022 Show insights: `npx convex insights`\",\n      \"\u2022 Include recent events for each insight: `npx convex insights --details`\",\n      \"\u2022 Check the production deployment: `npx convex insights --prod`\",\n      \"\",\n      \"This command is only available for Convex cloud deployments when logged in as a user.\",\n    ].join(\"\\n\"),\n  )\n  .allowExcessArguments(false)\n  .option(\"--details\", \"Show recent events for each insight\", false)\n  .option(\"--json\", \"Output insights as JSON\", false)\n  .addDeploymentSelectionOptions(actionDescription(\"Show insights for\"))\n  .showHelpAfterError()\n  .action(async (cmdOptions) => {\n    const ctx = await oneoffContext(cmdOptions);\n\n    const deploymentSelection = await getDeploymentSelection(ctx, cmdOptions);\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n\n    const deploymentName = credentials.deploymentFields?.deploymentName ?? null;\n    if (deploymentName === null) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"Insights are only available for cloud deployments. Local deployments do not have insights data.\",\n      });\n    }\n\n    const auth = ctx.bigBrainAuth();\n    if (\n      auth === null ||\n      auth.kind === \"deploymentKey\" ||\n      auth.kind === \"projectKey\"\n    ) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"Insights require to be logged in as a user. Deploy keys and project keys cannot access team usage data.\",\n      });\n    }\n\n    const insightsList = await fetchInsights(ctx, deploymentName, {\n      includeRecentEvents: cmdOptions.details,\n    });\n\n    const dashboardUrl = deploymentDashboardUrlPage(\n      deploymentName,\n      \"?view=insights\",\n    );\n\n    if (cmdOptions.json) {\n      logOutput(\n        JSON.stringify(\n          { deploymentName, dashboardUrl, insights: insightsList },\n          null,\n          2,\n        ),\n      );\n      return;\n    }\n\n    if (insightsList.length === 0) {\n      logOutput(\n        chalk.green(\n          \"No issues found. The deployment is healthy over the last 72 hours.\",\n        ),\n      );\n    } else {\n      const errorCount = insightsList.filter(\n        (i) => i.severity === \"error\",\n      ).length;\n      const warningCount = insightsList.filter(\n        (i) => i.severity === \"warning\",\n      ).length;\n\n      const parts: string[] = [];\n      if (errorCount > 0)\n        parts.push(\n          chalk.red(`${errorCount} error${errorCount > 1 ? \"s\" : \"\"}`),\n        );\n      if (warningCount > 0)\n        parts.push(\n          chalk.yellow(`${warningCount} warning${warningCount > 1 ? \"s\" : \"\"}`),\n        );\n      logOutput(`Found ${parts.join(\" and \")} in the last 72 hours:\\n`);\n\n      for (const insight of insightsList) {\n        logOutput(formatInsight(insight, cmdOptions.details));\n      }\n    }\n\n    logOutput(`\\nDashboard: ${chalk.cyan(dashboardUrl)}`);\n  });\n", "import { Context } from \"../../bundler/context.js\";\nimport { fetchTeamAndProject } from \"./api.js\";\nimport { BIG_BRAIN_URL, bigBrainFetch, provisionHost } from \"./utils/utils.js\";\n\nexport const ROOT_COMPONENT_PATH = \"-root-component-\";\n// Query ID for the insights dataset (shared with dashboard/src/api/insights.ts).\nexport const INSIGHTS_QUERY_ID = \"9ab3b74e-a725-480b-88a6-43e6bd70bd82\";\n\nexport type OccRecentEvent = {\n  timestamp: string;\n  id: string;\n  request_id: string;\n  occ_document_id?: string;\n  occ_write_source?: string;\n  occ_retry_count: number;\n};\n\nexport type ResourceRecentEvent = {\n  timestamp: string;\n  id: string;\n  request_id: string;\n  calls: {\n    table_name: string;\n    bytes_read: number;\n    documents_read: number;\n  }[];\n  success: boolean;\n};\n\nexport type OccInsight = {\n  kind: \"occRetried\" | \"occFailedPermanently\";\n  severity: \"error\" | \"warning\";\n  functionId: string;\n  componentPath: string | null;\n  occCalls: number;\n  occTableName?: string | undefined;\n  recentEvents?: OccRecentEvent[] | undefined;\n};\n\nexport type ResourceInsight = {\n  kind:\n    | \"bytesReadLimit\"\n    | \"bytesReadThreshold\"\n    | \"documentsReadLimit\"\n    | \"documentsReadThreshold\";\n  severity: \"error\" | \"warning\";\n  functionId: string;\n  componentPath: string | null;\n  count: number;\n  recentEvents?: ResourceRecentEvent[] | undefined;\n};\n\nexport type Insight = OccInsight | ResourceInsight;\n\n// Sorted from most to least severe.\nconst insightKinds: { kind: string; severity: \"error\" | \"warning\" }[] = [\n  { kind: \"documentsReadLimit\", severity: \"error\" },\n  { kind: \"bytesReadLimit\", severity: \"error\" },\n  { kind: \"occFailedPermanently\", severity: \"error\" },\n  { kind: \"documentsReadThreshold\", severity: \"warning\" },\n  { kind: \"bytesReadThreshold\", severity: \"warning\" },\n  { kind: \"occRetried\", severity: \"warning\" },\n];\n\nconst insightKindMap = new Map(\n  insightKinds.map((ik, i) => [ik.kind, { severity: ik.severity, order: i }]),\n);\n\nexport function orderForKind(kind: string): number {\n  return insightKindMap.get(kind)?.order ?? insightKinds.length;\n}\n\nexport function severityForKind(kind: string): \"error\" | \"warning\" | undefined {\n  return insightKindMap.get(kind)?.severity;\n}\n\nconst MAX_RECENT_EVENTS = 5;\n\nfunction parseRow(row: string[], includeRecentEvents: boolean): Insight | null {\n  const kind = row[0];\n  const functionId = row[1];\n  const componentPath = row[2] === ROOT_COMPONENT_PATH ? null : row[2];\n  const details = JSON.parse(row[3]);\n  const common = { functionId, componentPath };\n  const recentEvents = includeRecentEvents\n    ? (details.recentEvents as any[]).slice(0, MAX_RECENT_EVENTS)\n    : undefined;\n\n  switch (kind) {\n    case \"occRetried\":\n      return {\n        kind,\n        severity: \"warning\" as const,\n        ...common,\n        occCalls: details.occCalls,\n        occTableName: details.occTableName,\n        recentEvents,\n      };\n    case \"occFailedPermanently\":\n      return {\n        kind,\n        severity: \"error\" as const,\n        ...common,\n        occCalls: details.occCalls,\n        occTableName: details.occTableName,\n        recentEvents,\n      };\n    case \"bytesReadLimit\":\n      return {\n        kind,\n        severity: \"error\" as const,\n        ...common,\n        count: details.count,\n        recentEvents,\n      };\n    case \"bytesReadThreshold\":\n      return {\n        kind,\n        severity: \"warning\" as const,\n        ...common,\n        count: details.count,\n        recentEvents,\n      };\n    case \"documentsReadLimit\":\n      return {\n        kind,\n        severity: \"error\" as const,\n        ...common,\n        count: details.count,\n        recentEvents,\n      };\n    case \"documentsReadThreshold\":\n      return {\n        kind,\n        severity: \"warning\" as const,\n        ...common,\n        count: details.count,\n        recentEvents,\n      };\n    default:\n      return null;\n  }\n}\n\n/**\n * Fetch raw insight rows from the Big Brain usage API.\n * Returns the raw string[][] from the API response.\n */\nexport async function fetchRawInsightsData(\n  ctx: Context,\n  deploymentName: string,\n): Promise<string[][]> {\n  const { teamId } = await fetchTeamAndProject(ctx, deploymentName);\n\n  const now = new Date();\n  const hoursAgo72 = new Date(now.getTime() - 72 * 60 * 60 * 1000);\n  const fromDate = hoursAgo72.toISOString().split(\"T\")[0];\n  const toDate = now.toISOString().split(\"T\")[0];\n\n  const queryParams = new URLSearchParams({\n    queryId: INSIGHTS_QUERY_ID,\n    deploymentName,\n    from: fromDate,\n    to: toDate,\n  });\n  const bbFetch = bigBrainFetch(ctx);\n  const res = await bbFetch(\n    new URL(\n      `dashboard/teams/${teamId}/usage/query?${queryParams.toString()}`,\n      BIG_BRAIN_URL,\n    ),\n    {\n      method: \"GET\",\n      headers: { Origin: provisionHost },\n    },\n  );\n  return (await res.json()) as string[][];\n}\n\n/**\n * Fetch and parse insights from the Big Brain usage API for a deployment.\n * Returns insights sorted by severity (errors first).\n *\n * Pass `includeRecentEvents: true` to include up to 5 recent events per insight.\n */\nexport async function fetchInsights(\n  ctx: Context,\n  deploymentName: string,\n  options?: { includeRecentEvents?: boolean },\n): Promise<Insight[]> {\n  const rawData = await fetchRawInsightsData(ctx, deploymentName);\n  const includeRecentEvents = options?.includeRecentEvents ?? false;\n\n  const insights: Insight[] = rawData.flatMap((row) => {\n    const parsed = parseRow(row, includeRecentEvents);\n    return parsed ? [parsed] : [];\n  });\n\n  insights.sort((a, b) => orderForKind(a.kind) - orderForKind(b.kind));\n  return insights;\n}\n", "/**\n * Debugging commands for the WorkOS integration; these are unstable, undocumented, and will change or disappear as the WorkOS integration evolves.\n **/\nimport { Command } from \"@commander-js/extra-typings\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { chalkStderr } from \"chalk\";\nimport {\n  DeploymentSelectionOptions,\n  fetchTeamAndProject,\n  getTeamAndProjectSlugForDeployment,\n  loadSelectedDeploymentCredentials,\n} from \"./lib/api.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { ensureHasConvexDependency } from \"./lib/utils/utils.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport {\n  ensureWorkosEnvironmentProvisioned,\n  provisionWorkosTeamInteractive,\n} from \"./lib/workos/workos.js\";\nimport {\n  disconnectWorkOSTeam,\n  getCandidateEmailsForWorkIntegration,\n  getDeploymentCanProvisionWorkOSEnvironments,\n  getInvitationEligibleEmails,\n  getWorkosEnvironmentHealth,\n  getWorkosTeamHealth,\n  inviteToWorkosTeam,\n  listProjectWorkOSEnvironments,\n  createProjectWorkOSEnvironment,\n  deleteProjectWorkOSEnvironment,\n} from \"./lib/workos/platformApi.js\";\nimport {\n  logFinishedStep,\n  logMessage,\n  logWarning,\n  showSpinner,\n  stopSpinner,\n} from \"../bundler/log.js\";\nimport { readProjectConfig, getAuthKitConfig } from \"./lib/config.js\";\nimport { promptOptions, promptYesNo } from \"./lib/utils/prompts.js\";\n\nasync function selectEnvDeployment(\n  options: DeploymentSelectionOptions,\n): Promise<{\n  ctx: Context;\n  deployment: {\n    deploymentUrl: string;\n    deploymentName: string;\n    deploymentType: \"dev\" | \"preview\" | \"prod\";\n    adminKey: string;\n    deploymentNotice: string;\n  };\n}> {\n  const ctx = await oneoffContext(options);\n  const deploymentSelection = await getDeploymentSelection(ctx, options);\n  const {\n    adminKey,\n    url: deploymentUrl,\n    deploymentFields,\n  } = await loadSelectedDeploymentCredentials(ctx, deploymentSelection);\n  // WorkOS integration only works with cloud deployments\n  if (!deploymentFields) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"WorkOS integration requires a configured deployment\",\n    });\n  }\n\n  const deploymentNotice = ` (on ${chalkStderr.bold(deploymentFields.deploymentType)} deployment ${chalkStderr.bold(deploymentFields.deploymentName)})`;\n\n  const deploymentType = deploymentFields.deploymentType;\n\n  if (deploymentType === \"custom\") {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `The WorkOS integration is not available for custom deployments yet.`,\n    });\n  }\n\n  if (\n    deploymentType !== \"dev\" &&\n    deploymentType !== \"preview\" &&\n    deploymentType !== \"prod\"\n  ) {\n    return await ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: `The WorkOS integration is only available for cloud deployments (dev, preview, prod), not ${deploymentType}`,\n    });\n  }\n\n  // Now TypeScript knows deploymentType is CloudDeploymentType\n  return {\n    ctx,\n    deployment: {\n      deploymentName: deploymentFields.deploymentName,\n      deploymentType,\n      deploymentUrl,\n      adminKey,\n      deploymentNotice,\n    },\n  };\n}\n\nconst workosTeamStatus = new Command(\"status\")\n  .summary(\"Status of associated WorkOS team and environment\")\n  .addDeploymentSelectionOptions(actionDescription(\"Check WorkOS status for\"))\n  .action(async (_options, cmd) => {\n    const options = cmd.optsWithGlobals();\n    const { ctx, deployment } = await selectEnvDeployment(options);\n\n    const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n    // Check team status\n    const teamHealth = await getWorkosTeamHealth(ctx, info.teamId);\n    if (!teamHealth) {\n      logMessage(`WorkOS team: Not provisioned`);\n      const { availableEmails } =\n        await getCandidateEmailsForWorkIntegration(ctx);\n      if (availableEmails.length > 0) {\n        logMessage(\n          `  Verified emails that can provision: ${availableEmails.join(\", \")}`,\n        );\n      }\n    } else if (teamHealth.productionState === \"inactive\") {\n      logMessage(\n        `WorkOS team: ${teamHealth.name} (no credit card added on workos.com, so production auth environments cannot be created)`,\n      );\n    } else {\n      logMessage(`WorkOS team: ${teamHealth.name}`);\n    }\n\n    // Check environment status\n    const envHealth = await getWorkosEnvironmentHealth(\n      ctx,\n      deployment.deploymentName,\n    );\n    if (!envHealth) {\n      logMessage(`WorkOS environment: Not provisioned`);\n    } else {\n      logMessage(`WorkOS environment: ${envHealth.name}`);\n      const workosUrl = `https://dashboard.workos.com/${envHealth.id}/authentication`;\n      logMessage(`${workosUrl}`);\n    }\n\n    try {\n      const { projectConfig } = await readProjectConfig(ctx);\n      const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n\n      if (!authKitConfig) {\n        logMessage(\n          `AuthKit config: ${chalkStderr.dim(\"Not configured in convex.json\")}`,\n        );\n      } else {\n        logMessage(`AuthKit config:`);\n\n        // Show config for each deployment type\n        for (const deploymentType of [\"dev\", \"preview\", \"prod\"] as const) {\n          const envConfig = authKitConfig[deploymentType];\n          if (!envConfig) {\n            logMessage(\n              `  ${deploymentType}: ${chalkStderr.dim(\"not configured\")}`,\n            );\n            continue;\n          }\n\n          // Build description based on what's configured\n          let description = \"\";\n\n          // Show environment type for prod deployments\n          if (deploymentType === \"prod\" && envConfig.environmentType) {\n            description = `environment type: ${envConfig.environmentType}`;\n          }\n\n          const configureStatus =\n            envConfig.configure === false\n              ? \", configure: disabled\"\n              : envConfig.configure\n                ? \", will configure WorkOS\"\n                : \"\";\n\n          const localEnvVarsStatus =\n            envConfig.localEnvVars === false\n              ? \"\"\n              : envConfig.localEnvVars\n                ? `, ${Object.keys(envConfig.localEnvVars).length} local env vars`\n                : \"\";\n\n          // Show deployment type with its configuration\n          const configInfo = [description, configureStatus, localEnvVarsStatus]\n            .filter((s) => s)\n            .join(\"\");\n\n          logMessage(`  ${deploymentType}: ${configInfo || \"configured\"}`);\n        }\n      }\n    } catch (error) {\n      logMessage(\n        `AuthKit config: ${chalkStderr.yellow(`Error reading config: ${String(error)}`)}`,\n      );\n    }\n  });\n\nconst workosProvisionEnvironment = new Command(\"provision-environment\")\n  .summary(\"Provision a WorkOS environment\")\n  .description(\n    \"Create or get the WorkOS environment and API key for this deployment\",\n  )\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .addDeploymentSelectionOptions(\n    actionDescription(\"Provision WorkOS environment for\"),\n  )\n  .option(\n    \"--name <name>\",\n    \"Custom name for the WorkOS environment (if not provided, uses deployment name)\",\n  )\n  .action(async (_options, cmd) => {\n    const options = cmd.optsWithGlobals();\n    const { ctx, deployment } = await selectEnvDeployment(options);\n    await ensureHasConvexDependency(\n      ctx,\n      \"integration workos provision-environment\",\n    );\n\n    try {\n      const { projectConfig } = await readProjectConfig(ctx);\n      const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n      const config = authKitConfig || { dev: {} };\n\n      if (!authKitConfig) {\n        logWarning(\n          \"Consider using the 'authKit' config in convex.json for automatic provisioning.\",\n        );\n        logMessage(\n          \"Learn more at https://docs.convex.dev/auth/authkit/auto-provision\",\n        );\n        logMessage(\"\");\n      }\n\n      await ensureWorkosEnvironmentProvisioned(\n        ctx,\n        deployment.deploymentName,\n        deployment,\n        config,\n        deployment.deploymentType,\n      );\n    } catch (error) {\n      await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        errForSentry: error,\n        printedMessage: `Failed to provision WorkOS environment: ${String(error)}`,\n      });\n    }\n  });\n\nconst workosProvisionTeam = new Command(\"provision-team\")\n  .summary(\"Provision a WorkOS team for this Convex team\")\n  .description(\n    \"Create a WorkOS team and associate it with this Convex team. \" +\n      \"This enables automatic provisioning of WorkOS environments for deployments on this team.\",\n  )\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .addDeploymentSelectionOptions(actionDescription(\"Provision WorkOS team for\"))\n  .action(async (_options, cmd) => {\n    const options = cmd.optsWithGlobals();\n    const { ctx, deployment } = await selectEnvDeployment(options);\n\n    // Check if there's already an associated WorkOS team\n    const { hasAssociatedWorkosTeam, teamId } =\n      await getDeploymentCanProvisionWorkOSEnvironments(\n        ctx,\n        deployment.deploymentName,\n      );\n\n    if (hasAssociatedWorkosTeam) {\n      logMessage(\n        chalkStderr.yellow(\n          \"This Convex team already has an associated WorkOS team.\",\n        ),\n      );\n      logMessage(\n        chalkStderr.dim(\n          \"Use 'npx convex integration workos status' to view details.\",\n        ),\n      );\n      return;\n    }\n\n    // Use the shared provisioning flow\n    const result = await provisionWorkosTeamInteractive(\n      ctx,\n      deployment.deploymentName,\n      teamId,\n      deployment.deploymentType,\n    );\n\n    if (!result.success) {\n      logMessage(chalkStderr.gray(\"Cancelled.\"));\n      return;\n    }\n\n    // Success!\n    logMessage(\n      chalkStderr.green(\n        `\\n\u2713 Successfully created WorkOS team \"${result.workosTeamName}\" (${result.workosTeamId})`,\n      ),\n    );\n    logMessage(\n      chalkStderr.dim(\n        \"You can now provision WorkOS environments for deployments on this team.\",\n      ),\n    );\n  });\n\nconst workosDisconnectTeam = new Command(\"disconnect-team\")\n  .summary(\"Disconnect WorkOS team from Convex team\")\n  .description(\n    \"Remove the associated WorkOS team from this Convex team. \" +\n      \"This is a destructive action that will prevent new WorkOS environments from being provisioned. \" +\n      \"Existing environments will continue to work with their current API keys.\",\n  )\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .addDeploymentSelectionOptions(\n    actionDescription(\"Disconnect WorkOS team for\"),\n  )\n  .action(async (_options, cmd) => {\n    const options = cmd.optsWithGlobals();\n    const { ctx, deployment } = await selectEnvDeployment(options);\n\n    // Check if there's an associated WorkOS team\n    const { hasAssociatedWorkosTeam, teamId } =\n      await getDeploymentCanProvisionWorkOSEnvironments(\n        ctx,\n        deployment.deploymentName,\n      );\n\n    if (!hasAssociatedWorkosTeam) {\n      logMessage(\n        chalkStderr.yellow(\n          \"This Convex team does not have an associated WorkOS team.\",\n        ),\n      );\n      return;\n    }\n\n    const info = await getTeamAndProjectSlugForDeployment(ctx, {\n      deploymentName: deployment.deploymentName,\n    });\n\n    logMessage(\n      chalkStderr.yellow(\n        `Warning: This will disconnect the WorkOS team from Convex team \"${info?.teamSlug}\".`,\n      ),\n    );\n    logMessage(\n      \"AuthKit environments provisioned for Convex deployments on this team will no longer use this WorkOS team to provision environments.\",\n    );\n    logMessage(\n      chalkStderr.dim(\n        \"Existing WorkOS environments will continue to work with their current API keys.\",\n      ),\n    );\n\n    const confirmed = await promptYesNo(ctx, {\n      message: \"Are you sure you want to disconnect this WorkOS team?\",\n      default: false,\n    });\n\n    if (!confirmed) {\n      logMessage(chalkStderr.gray(\"Cancelled.\"));\n      return;\n    }\n\n    const result = await disconnectWorkOSTeam(ctx, teamId);\n\n    if (!result.success) {\n      if (result.error === \"not_associated\") {\n        logMessage(\n          chalkStderr.yellow(\n            \"This Convex team does not have an associated WorkOS team.\",\n          ),\n        );\n        return;\n      }\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Failed to disconnect WorkOS team: ${result.message}`,\n      });\n    }\n\n    logFinishedStep(\n      `Successfully disconnected WorkOS team \"${result.workosTeamName}\" (${result.workosTeamId})`,\n    );\n  });\n\nconst workosInvite = new Command(\"invite\")\n  .summary(\"Invite yourself to the WorkOS team\")\n  .description(\n    \"Send an invitation to join the WorkOS team associated with your Convex team\",\n  )\n  .option(\"--email <email>\", \"Email address to invite (skips validation)\")\n  .configureHelp({ showGlobalOptions: true })\n  .allowExcessArguments(false)\n  .addDeploymentSelectionOptions(\n    actionDescription(\"Invite yourself to WorkOS team for\"),\n  )\n  .action(async (options, cmd) => {\n    const allOptions = cmd.optsWithGlobals();\n    const { ctx, deployment } = await selectEnvDeployment(allOptions);\n\n    // Get team info first\n    const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n    let emailToInvite: string;\n\n    // If email was provided as flag, use it directly (skip CLI validation)\n    if (options.email) {\n      emailToInvite = options.email;\n    } else {\n      // Get emails eligible for invitation (all verified emails except those that are admin of a different team)\n      const { eligibleEmails, adminEmail } = await getInvitationEligibleEmails(\n        ctx,\n        info.teamId,\n      );\n\n      // Combine eligible emails with admin email (admin email is always an option for re-invitation)\n      const allInvitableEmails = [...eligibleEmails];\n      if (adminEmail && !allInvitableEmails.includes(adminEmail)) {\n        allInvitableEmails.push(adminEmail);\n      }\n\n      if (allInvitableEmails.length === 0) {\n        logMessage(\n          \"You don't have any verified emails available for invitation.\",\n        );\n        logMessage(\n          \"This could be because all your verified emails are already admin of other WorkOS teams.\",\n        );\n        return;\n      }\n\n      // Let user select which email to use\n      emailToInvite = await promptOptions(ctx, {\n        message: \"Which email would you like to invite to the WorkOS team?\",\n        choices: allInvitableEmails.map((email) => ({\n          name: email + (email === adminEmail ? \" (admin email)\" : \"\"),\n          value: email,\n        })),\n        default: allInvitableEmails[0],\n      });\n\n      // Confirm before sending\n      const confirmed = await promptYesNo(ctx, {\n        message: `Send invitation to ${emailToInvite}?`,\n        default: true,\n      });\n\n      if (!confirmed) {\n        logMessage(\"Invitation cancelled.\");\n        return;\n      }\n    }\n\n    logMessage(`Sending invitation to ${emailToInvite}...`);\n\n    const result = await inviteToWorkosTeam(ctx, info.teamId, emailToInvite);\n\n    if (result.result === \"success\") {\n      logMessage(\n        `\u2713 Successfully sent invitation to ${result.email} with role ${result.roleSlug}`,\n      );\n      logMessage(\n        \"Check your email for the invitation link to join the WorkOS team.\",\n      );\n    } else if (result.result === \"teamNotProvisioned\") {\n      logMessage(\n        `\u2717 ${result.message}. Run 'npx convex integration workos provision-environment' first.`,\n      );\n    } else if (result.result === \"alreadyInWorkspace\") {\n      logMessage(\n        `\u2717 ${result.message}. This usually means the email is already used in another WorkOS workspace.`,\n      );\n    }\n  });\n\n// Project environment commands\nconst workosProjectEnvList = new Command(\"list-project-environments\")\n  .summary(\"List WorkOS environments for current project\")\n  .description(\n    \"List all WorkOS AuthKit environments created for the current project.\\n\" +\n      \"These environments can be used across multiple deployments.\",\n  )\n  .addDeploymentSelectionOptions(\n    actionDescription(\"List project environments for\"),\n  )\n  .action(async (_options, cmd) => {\n    const options = cmd.optsWithGlobals();\n    const { ctx, deployment } = await selectEnvDeployment(options);\n\n    const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n    logMessage(\"Fetching project WorkOS environments...\");\n\n    try {\n      const environments = await listProjectWorkOSEnvironments(\n        ctx,\n        info.projectId,\n      );\n\n      if (environments.length === 0) {\n        logMessage(\"No WorkOS environments found for this project.\");\n        logMessage(\n          chalkStderr.gray(\n            \"Create one with: npx convex integration workos create-project-environment --name <name>\",\n          ),\n        );\n      } else {\n        logMessage(chalkStderr.bold(\"WorkOS Project Environments:\"));\n        for (const env of environments) {\n          const prodLabel = env.isProduction\n            ? chalkStderr.yellow(\" (production)\")\n            : \"\";\n          logMessage(\n            `  ${chalkStderr.green(env.userEnvironmentName)}${prodLabel} - Client ID: ${env.workosClientId}`,\n          );\n        }\n      }\n    } catch (error) {\n      logMessage(\n        chalkStderr.red(`Failed to list environments: ${String(error)}`),\n      );\n    }\n  });\n\nconst workosProjectEnvCreate = new Command(\"create-project-environment\")\n  .summary(\"Create a new WorkOS environment for the project\")\n  .description(\n    \"Create a new WorkOS AuthKit environment for this project.\\n\" +\n      \"The environment can be used across multiple deployments.\",\n  )\n  .requiredOption(\"--name <name>\", \"Name for the new environment\")\n  .option(\"--production\", \"Mark this environment as a production environment\")\n  .addDeploymentSelectionOptions(\n    actionDescription(\"Create project environment for\"),\n  )\n  .action(async (_options, cmd) => {\n    const options = cmd.optsWithGlobals();\n    const environmentName = options.name as string;\n    const isProduction = options.production as boolean | undefined;\n    const { ctx, deployment } = await selectEnvDeployment(options);\n\n    const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n    showSpinner(\n      `Creating project-level WorkOS environment '${environmentName}'...`,\n    );\n\n    try {\n      const response = await createProjectWorkOSEnvironment(\n        ctx,\n        info.projectId,\n        environmentName,\n        isProduction,\n      );\n\n      stopSpinner();\n      logFinishedStep(`Created WorkOS environment '${environmentName}'`);\n\n      logMessage(\"\");\n      logMessage(chalkStderr.bold(\"Environment Details:\"));\n      logMessage(`  Name: ${response.userEnvironmentName}`);\n      logMessage(`  Client ID: ${response.workosClientId}`);\n      logMessage(`  API Key: ${response.workosApiKey}`);\n    } catch (error: any) {\n      stopSpinner();\n      if (error?.message?.includes(\"NoWorkOSTeam\")) {\n        logMessage(\n          chalkStderr.red(\n            \"Your team doesn't have a WorkOS integration configured yet.\",\n          ),\n        );\n        logMessage(\n          \"Please run 'npx convex integration workos provision-team' first.\",\n        );\n      } else if (error?.message?.includes(\"duplicate\")) {\n        logMessage(\n          chalkStderr.red(\n            `An environment named '${environmentName}' already exists for this project.`,\n          ),\n        );\n      } else if (error?.message?.includes(\"TooManyEnvironments\")) {\n        logMessage(\n          chalkStderr.red(\n            \"You've reached the limit of 10 WorkOS environments per project. If you need more, please contact support.\",\n          ),\n        );\n      } else {\n        logMessage(chalkStderr.red(`Failed to create environment: ${error}`));\n      }\n    }\n  });\n\nconst workosProjectEnvDelete = new Command(\"delete-project-environment\")\n  .summary(\"Delete a WorkOS environment from the project\")\n  .description(\n    \"Delete a WorkOS environment from this project.\\n\" +\n      \"This will permanently remove the environment and its credentials.\\n\" +\n      \"Use the client ID shown in list-project-environments output.\",\n  )\n  .requiredOption(\n    \"--client-id <clientId>\",\n    \"WorkOS client ID of the environment to delete (shown in list output)\",\n  )\n  .addDeploymentSelectionOptions(\n    actionDescription(\"Delete project environment for\"),\n  )\n  .action(async (_options, cmd) => {\n    const options = cmd.optsWithGlobals();\n    const clientId = options.clientId as string;\n    const { ctx, deployment } = await selectEnvDeployment(options);\n\n    const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n    // Confirm deletion\n    const confirmed = await promptYesNo(ctx, {\n      message: `Are you sure you want to delete environment with client ID '${clientId}'?`,\n      default: false,\n    });\n\n    if (!confirmed) {\n      logMessage(\"Deletion cancelled.\");\n      return;\n    }\n\n    showSpinner(\n      `Deleting project WorkOS environment (this can take a while)...`,\n    );\n\n    try {\n      await deleteProjectWorkOSEnvironment(ctx, info.projectId, clientId);\n      stopSpinner();\n      logFinishedStep(`Deleted environment with client ID '${clientId}'`);\n    } catch (error: any) {\n      stopSpinner();\n      if (error?.message?.includes(\"not found\")) {\n        logMessage(\n          chalkStderr.red(\n            `Environment with client ID '${clientId}' not found.`,\n          ),\n        );\n      } else {\n        logMessage(chalkStderr.red(`Failed to delete environment: ${error}`));\n      }\n    }\n  });\n\nconst workos = new Command(\"workos\")\n  .summary(\"WorkOS integration commands\")\n  .description(\"Manage WorkOS team provisioning and environment setup\")\n  .addCommand(workosProvisionEnvironment)\n  .addCommand(workosTeamStatus)\n  .addCommand(workosProvisionTeam)\n  .addCommand(workosDisconnectTeam)\n  .addCommand(workosInvite)\n  .addCommand(workosProjectEnvList)\n  .addCommand(workosProjectEnvCreate)\n  .addCommand(workosProjectEnvDelete);\n\nexport const integration = new Command(\"integration\")\n  .summary(\"Integration commands\")\n  .description(\"Commands for managing third-party integrations\")\n  .addCommand(workos);\n", "import { Command, Option } from \"@commander-js/extra-typings\";\nimport * as dotenv from \"dotenv\";\nimport { BigBrainAuth, Context, oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep, logMessage, logWarning } from \"../bundler/log.js\";\nimport {\n  checkAuthorization,\n  isAuthorizedHeader,\n  performLogin,\n} from \"./lib/login.js\";\nimport {\n  loadProjectLocalConfig,\n  loadUuidForAnonymousUser,\n} from \"./lib/localDeployment/filePaths.js\";\nimport {\n  handleLinkToProject,\n  listLegacyAnonymousDeployments,\n} from \"./lib/localDeployment/anonymous.js\";\nimport {\n  DASHBOARD_HOST,\n  deploymentDashboardUrlPage,\n  teamDashboardUrl,\n} from \"./lib/dashboard.js\";\nimport { promptSearch, promptYesNo } from \"./lib/utils/prompts.js\";\nimport {\n  CONVEX_DEPLOY_KEY_ENV_VAR_NAME,\n  CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME,\n  ENV_VAR_FILE_PATH,\n  validateOrSelectTeam,\n} from \"./lib/utils/utils.js\";\nimport {\n  selectProject,\n  updateEnvAndConfigForDeploymentSelection,\n} from \"./configure.js\";\nimport {\n  getDeploymentSelection,\n  shouldAllowAnonymousDevelopment,\n} from \"./lib/deploymentSelection.js\";\nimport {\n  isAnonymousDeployment,\n  removeAnonymousPrefix,\n} from \"./lib/deployment.js\";\nimport {\n  readGlobalConfig,\n  globalConfigPath,\n} from \"./lib/utils/globalConfig.js\";\nimport { getTeamsForUser } from \"./lib/api.js\";\n\n/**\n * The env file a deploy key came from, or null if it came from the shell.\n * `dotenv` doesn't overwrite variables that are already set, so a value from\n * the shell outranks these files -- match on the value to tell them apart.\n */\nfunction deployKeyEnvFile(\n  ctx: Context,\n  envVarName: string,\n  value: string,\n): string | null {\n  for (const file of [ENV_VAR_FILE_PATH, \".env\"]) {\n    if (!ctx.fs.exists(file)) {\n      continue;\n    }\n    if (dotenv.parse(ctx.fs.readUtf8File(file))[envVarName] === value) {\n      return file;\n    }\n  }\n  return null;\n}\n\n/**\n * A project or deployment key in the environment outranks the account token for\n * commands run from this directory, and an expired one makes the CLI look\n * logged out, so report it separately from the account.\n */\nasync function reportDeployKeyInWorkingDirectory(\n  ctx: Context,\n  auth: BigBrainAuth | null,\n) {\n  // A preview deploy key is only used when there's no account token at all.\n  if (\n    auth === null ||\n    auth.kind === \"accessToken\" ||\n    auth.kind === \"previewDeployKey\"\n  ) {\n    return;\n  }\n  const key = auth.kind === \"projectKey\" ? auth.projectKey : auth.deploymentKey;\n  const envVarName = process.env[CONVEX_DEPLOY_KEY_ENV_VAR_NAME]\n    ? CONVEX_DEPLOY_KEY_ENV_VAR_NAME\n    : CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME;\n  const envFile = deployKeyEnvFile(ctx, envVarName, key);\n  const source = envFile ?? \"shell environment\";\n  // Big Brain only strips a `project:`/`team:` prefix itself, so a deployment\n  // key authorizes only without its `dev:`/`prod:` prefix. Split on the first\n  // `|` like the server does, so a secret containing one survives.\n  const secret = key.slice(key.indexOf(\"|\") + 1);\n  if (await isAuthorizedHeader(ctx, `Bearer ${secret}`)) {\n    logMessage(`Working Directory: Valid ${envVarName} in ${source}`);\n    return;\n  }\n  logWarning(`Working Directory: Invalid ${envVarName} in ${source}`);\n}\n\nconst loginStatus = new Command(\"status\")\n  .description(\"Check login status and list accessible teams\")\n  .allowExcessArguments(false)\n  .action(async () => {\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n\n    // `_updateBigBrainAuth` below replaces any deploy key in `ctx` with the\n    // account token, so read the deploy key first.\n    const auth = ctx.bigBrainAuth();\n\n    const globalConfig = readGlobalConfig(ctx);\n    if (globalConfig === null) {\n      logMessage(`No Convex account token found in: ${globalConfigPath()}`);\n      logMessage(\"Status: Not logged in\");\n      await reportDeployKeyInWorkingDirectory(ctx, auth);\n      return;\n    }\n    logMessage(`Convex account token found in: ${globalConfigPath()}`);\n\n    const accessToken = globalConfig.accessToken;\n    if (!(await isAuthorizedHeader(ctx, `Bearer ${accessToken}`))) {\n      logMessage(\"Status: Not logged in\");\n      await reportDeployKeyInWorkingDirectory(ctx, auth);\n      return;\n    }\n\n    logMessage(\"Status: Logged in\");\n    // Describe the account, even if a deploy key outranks it for other commands.\n    ctx._updateBigBrainAuth({\n      kind: \"accessToken\",\n      header: `Bearer ${accessToken}`,\n      accessToken,\n    });\n    const teams = await getTeamsForUser(ctx);\n    logMessage(\n      `Teams: ${teams.length} team${teams.length === 1 ? \"\" : \"s\"} accessible`,\n    );\n    for (const team of teams) {\n      logMessage(`  - ${team.name} (${team.slug})`);\n    }\n    await reportDeployKeyInWorkingDirectory(ctx, auth);\n  });\n\nexport const login = new Command(\"login\")\n  .description(\"Login to Convex\")\n  .allowExcessArguments(false)\n  .option(\n    \"--device-name <name>\",\n    \"Provide a name for the device being authorized\",\n  )\n  .option(\n    \"-f, --force\",\n    \"Proceed with login even if a valid access token already exists for this device\",\n  )\n  .option(\n    \"--no-open\",\n    \"Don't automatically open the login link in the default browser\",\n  )\n  .addOption(\n    new Option(\n      \"--login-flow <mode>\",\n      `How to log in; defaults to guessing based on the environment.`,\n    )\n      .choices([\"paste\", \"auto\", \"poll\"] as const)\n      .default(\"auto\" as const),\n  )\n  .addOption(new Option(\"--link-deployments\").hideHelp())\n  // These options are hidden from the help/usage message, but allow overriding settings for testing.\n  // Change the auth credentials with the auth provider\n  .addOption(new Option(\"--override-auth-url <url>\").hideHelp())\n  .addOption(new Option(\"--override-auth-client <id>\").hideHelp())\n  .addOption(new Option(\"--override-auth-username <username>\").hideHelp())\n  .addOption(new Option(\"--override-auth-password <password>\").hideHelp())\n  // Skip the auth provider login and directly use this access token\n  .addOption(new Option(\"--override-access-token <token>\").hideHelp())\n  // Automatically accept opt ins without prompting\n  .addOption(new Option(\"--accept-opt-ins\").hideHelp())\n  // Dump the access token from the auth provider and skip authorization with Convex\n  .addOption(new Option(\"--dump-access-token\").hideHelp())\n  // Hidden option for tests to check if the user is logged in.\n  .addOption(new Option(\"--check-login\").hideHelp())\n  // Redirect to Vercel SSO integration URL\n  .addOption(\n    new Option(\n      \"--vercel\",\n      \"Redirect to Vercel SSO integration for login\",\n    ).hideHelp(),\n  )\n  // Override the Vercel URL slug (defaults to 'convex')\n  .addOption(new Option(\"--vercel-override <slug>\").hideHelp())\n  .addCommand(loginStatus)\n  .addHelpCommand(false)\n  .action(async (options, cmd: Command) => {\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n    if (\n      !options.force &&\n      (await checkAuthorization(ctx, !!options.acceptOptIns))\n    ) {\n      logFinishedStep(\n        \"This device has previously been authorized and is ready for use with Convex.\",\n      );\n      await handleLinkingDeployments(ctx, {\n        interactive: !!options.linkDeployments,\n      });\n      return;\n    }\n    if (!options.force && options.checkLogin) {\n      const isLoggedIn = await checkAuthorization(ctx, !!options.acceptOptIns);\n      if (!isLoggedIn) {\n        return ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          errForSentry: \"You are not logged in.\",\n          printedMessage: \"You are not logged in.\",\n        });\n      }\n    }\n    if (!!options.overrideAuthUsername !== !!options.overrideAuthPassword) {\n      cmd.error(\n        \"If overriding credentials, both username and password must be provided\",\n      );\n    }\n\n    const uuid = loadUuidForAnonymousUser(ctx);\n    await performLogin(ctx, {\n      ...options,\n      anonymousId: uuid,\n      vercel: options.vercel,\n      vercelOverride: options.vercelOverride,\n    });\n\n    await handleLinkingDeployments(ctx, {\n      interactive: !!options.linkDeployments,\n    });\n  });\n\nasync function handleLinkingDeployments(\n  ctx: Context,\n  args: {\n    interactive: boolean;\n  },\n) {\n  if (!shouldAllowAnonymousDevelopment()) {\n    return;\n  }\n\n  // Check for project-local anonymous deployment first - this takes priority\n  const projectLocal = loadProjectLocalConfig(ctx);\n  if (\n    projectLocal !== null &&\n    isAnonymousDeployment(projectLocal.deploymentName)\n  ) {\n    const shouldLink = await promptYesNo(ctx, {\n      message: `Would you like to link your existing deployment to your account? (\"${projectLocal.deploymentName}\")`,\n      default: true,\n    });\n    if (!shouldLink) {\n      logMessage(\n        \"Not linking your existing deployment. If you want to link it later, run `npx convex login --link-deployments`.\",\n      );\n      logMessage(\n        `Visit ${DASHBOARD_HOST} or run \\`npx convex dev\\` to get started with your new account.`,\n      );\n      return;\n    }\n\n    const { dashboardUrl } = await linkSingleDeployment(\n      ctx,\n      projectLocal.deploymentName,\n      projectLocal.deploymentName,\n    );\n    logFinishedStep(`Visit ${dashboardUrl} to get started.`);\n    return;\n  }\n\n  // No project-local deployment - check for legacy deployments\n  const legacyDeployments = listLegacyAnonymousDeployments(ctx);\n  if (legacyDeployments.length === 0) {\n    if (args.interactive) {\n      logMessage(\n        \"It doesn't look like you have any deployments to link. You can run `npx convex dev` to set up a new project or select an existing one.\",\n      );\n    }\n    return;\n  }\n\n  // Get the currently configured deployment (if any) for env var updates\n  const deploymentSelection = await getDeploymentSelection(ctx, {\n    url: undefined,\n    adminKey: undefined,\n    envFile: undefined,\n  });\n  const configuredDeployment =\n    deploymentSelection.kind === \"anonymous\"\n      ? deploymentSelection.deploymentName\n      : null;\n\n  if (!args.interactive) {\n    // Non-interactive: link all legacy deployments automatically\n    const message = getMessage(legacyDeployments.map((d) => d.deploymentName));\n    const createProjects = await promptYesNo(ctx, {\n      message,\n      default: true,\n    });\n    if (!createProjects) {\n      logMessage(\n        \"Not linking your existing deployments. If you want to link them later, run `npx convex login --link-deployments`.\",\n      );\n      logMessage(\n        `Visit ${DASHBOARD_HOST} or run \\`npx convex dev\\` to get started with your new account.`,\n      );\n      return;\n    }\n\n    const {\n      team: { slug: teamSlug },\n    } = await validateOrSelectTeam(\n      ctx,\n      undefined,\n      \"Choose a team for your deployments:\",\n    );\n    let dashboardUrl = teamDashboardUrl(teamSlug);\n    for (const deployment of legacyDeployments) {\n      const result = await linkSingleDeployment(\n        ctx,\n        deployment.deploymentName,\n        configuredDeployment,\n        { teamSlug, projectSlug: null },\n      );\n      if (deployment.deploymentName === configuredDeployment) {\n        dashboardUrl = result.dashboardUrl;\n      }\n    }\n    logFinishedStep(\n      `Successfully linked your deployments! Visit ${dashboardUrl} to get started.`,\n    );\n    return;\n  }\n\n  // Interactive mode: let user choose which legacy deployments to link\n  while (true) {\n    const currentLegacyDeployments = listLegacyAnonymousDeployments(ctx);\n    if (currentLegacyDeployments.length === 0) {\n      logMessage(\"All deployments have been linked.\");\n      break;\n    }\n    logMessage(\n      getDeploymentListMessage(\n        currentLegacyDeployments.map((d) => d.deploymentName),\n      ),\n    );\n    const deploymentToLink = await promptSearch(ctx, {\n      message: \"Which deployment would you like to link to your account?\",\n      choices: currentLegacyDeployments.map((d) => ({\n        name: d.deploymentName,\n        value: d.deploymentName,\n      })),\n    });\n\n    await linkSingleDeployment(ctx, deploymentToLink, configuredDeployment);\n\n    const shouldContinue = await promptYesNo(ctx, {\n      message: \"Would you like to link another deployment?\",\n      default: true,\n    });\n    if (!shouldContinue) {\n      break;\n    }\n  }\n}\n\n/**\n * Link a single deployment to a project, prompting for team and project selection.\n * Updates env vars if this is the currently configured deployment.\n */\nasync function linkSingleDeployment(\n  ctx: Context,\n  deploymentName: string,\n  configuredDeployment: string | null,\n  options?: {\n    teamSlug?: string;\n    projectSlug?: string | null;\n  },\n): Promise<{ dashboardUrl: string }> {\n  const { team } = await validateOrSelectTeam(\n    ctx,\n    options?.teamSlug,\n    \"Choose a team for your deployment:\",\n  );\n\n  const projectSlug =\n    options?.projectSlug ??\n    (\n      await selectProject(ctx, \"ask\", {\n        team: team.slug,\n        devDeployment: \"local\",\n        defaultProjectName: removeAnonymousPrefix(deploymentName),\n      })\n    ).projectSlug;\n\n  const linkedDeployment = await handleLinkToProject(ctx, {\n    deploymentName,\n    teamSlug: team.slug,\n    teamId: team.id,\n    projectSlug,\n  });\n\n  if (deploymentName === configuredDeployment) {\n    await updateEnvAndConfigForDeploymentSelection(\n      ctx,\n      {\n        url: linkedDeployment.deploymentUrl,\n        deploymentName: linkedDeployment.deploymentName,\n        teamSlug: team.slug,\n        projectSlug: linkedDeployment.projectSlug,\n        deploymentType: \"local\",\n      },\n      configuredDeployment,\n    );\n  }\n\n  return {\n    dashboardUrl: deploymentDashboardUrlPage(\n      linkedDeployment.deploymentName,\n      \"\",\n    ),\n  };\n}\n\nfunction getDeploymentListMessage(anonymousDeploymentNames: string[]) {\n  let message = `You have ${anonymousDeploymentNames.length} existing deployments.`;\n  message += `\\n\\nDeployments:`;\n  for (const deploymentName of anonymousDeploymentNames) {\n    message += `\\n- ${deploymentName}`;\n  }\n  return message;\n}\n\nfunction getMessage(anonymousDeploymentNames: string[]) {\n  if (anonymousDeploymentNames.length === 1) {\n    return `Would you like to link your existing deployment to your account? (\"${anonymousDeploymentNames[0]}\")`;\n  }\n  let message = `You have ${anonymousDeploymentNames.length} existing deployments. Would you like to link them to your account?`;\n  message += `\\n\\nDeployments:`;\n  for (const deploymentName of anonymousDeploymentNames) {\n    message += `\\n- ${deploymentName}`;\n  }\n  message += `\\n\\nYou can alternatively run \\`npx convex login --link-deployments\\` to interactively choose which deployments to add.`;\n  return message;\n}\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep } from \"../bundler/log.js\";\nimport { recursivelyDelete } from \"./lib/fsUtils.js\";\nimport { globalConfigPath } from \"./lib/utils/globalConfig.js\";\n\nexport const logout = new Command(\"logout\")\n  .description(\"Log out of Convex on this machine\")\n  .allowExcessArguments(false)\n  .action(async () => {\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n\n    if (ctx.fs.exists(globalConfigPath())) {\n      recursivelyDelete(ctx, globalConfigPath());\n    }\n\n    logFinishedStep(\n      \"You have been logged out of Convex.\\n  Run `npx convex dev` to log in.\",\n    );\n  });\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logWarning } from \"../bundler/log.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { logsForDeployment } from \"./lib/logs.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport { announceDeploymentTarget } from \"./lib/announceDeploymentTarget.js\";\n\nexport const logs = new Command(\"logs\")\n  .summary(\"Watch logs from your deployment\")\n  .description(\n    \"Stream function logs from your Convex deployment.\\nBy default, this streams from your project's dev deployment.\",\n  )\n  .allowExcessArguments(false)\n  .addLogsOptions()\n  .addDeploymentSelectionOptions(actionDescription(\"Watch logs from\"))\n  .showHelpAfterError()\n  .action(async (cmdOptions) => {\n    const ctx = await oneoffContext(cmdOptions);\n\n    const deploymentSelection = await getDeploymentSelection(ctx, cmdOptions);\n    const deployment = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    announceDeploymentTarget(\"Showing logs of deployment:\", deployment);\n    const deploymentName = deployment.deploymentFields?.deploymentName\n      ? ` ${deployment.deploymentFields.deploymentName}`\n      : \"\";\n    const deploymentNotice = ` for ${cmdOptions.prod ? \"production\" : \"dev\"} deployment${deploymentName}`;\n    let history = cmdOptions.history;\n    if (cmdOptions.tail !== undefined) {\n      logWarning(\n        \"`--tail` is unnecessary: `convex logs` already tails by default. Treating it as `--history`.\",\n      );\n      if (typeof cmdOptions.tail === \"number\" && history === undefined) {\n        history = cmdOptions.tail;\n      }\n    }\n    await logsForDeployment(ctx, deployment, {\n      history,\n      success: cmdOptions.success,\n      jsonl: cmdOptions.jsonl,\n      deploymentNotice,\n    });\n  });\n", "import { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logError } from \"../bundler/log.js\";\nimport { CallToolRequest, Server } from \"@modelcontextprotocol/server\";\nimport { serveStdio } from \"@modelcontextprotocol/server/stdio\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { checkAuthorization } from \"./lib/login.js\";\nimport {\n  McpOptions,\n  RequestContext,\n  RequestCrash,\n} from \"./lib/mcp/requestContext.js\";\nimport { mcpTool, convexTools, ConvexTool } from \"./lib/mcp/tools/index.js\";\nimport { Mutex } from \"./lib/utils/mutex.js\";\nimport { initializeBigBrainAuth } from \"./lib/deploymentSelection.js\";\n\nconst allToolNames = convexTools.map((t) => t.name).sort();\n\nexport const mcp = new Command(\"mcp\")\n  .summary(\"Manage the Model Context Protocol server for Convex [BETA]\")\n  .description(\n    \"Commands to initialize and run a Model Context Protocol server for Convex that can be used with AI tools.\\n\" +\n      \"This server exposes your Convex codebase to AI tools in a structured way.\",\n  )\n  .allowExcessArguments(false);\n\nmcp\n  .command(\"start\")\n  .summary(\"Start the MCP server\")\n  .description(\n    \"Start the Model Context Protocol server for Convex that can be used with AI tools.\",\n  )\n  .option(\n    \"--project-dir <project-dir>\",\n    \"Run the MCP server for a single project. By default, the MCP server can run for multiple projects, and each tool call specifies its project directory.\",\n  )\n  .option(\n    \"--disable-tools <tool-names>\",\n    `Comma separated list of tool names to disable (options: ${allToolNames.join(\", \")})`,\n  )\n  .option(\n    \"--cautiously-allow-production-pii\",\n    \"Allow read-only tools (data, logs, queries) on production deployments. These tools may expose PII. Defaults to false.\",\n    false,\n  )\n  .option(\n    \"--dangerously-enable-production-deployments\",\n    \"DANGEROUSLY allow the MCP server to access production deployments, including mutating tools. Defaults to false.\",\n    false,\n  )\n  // Deprecated option, we swapped the default. no-op.\n  .addOption(\n    new Option(\"--disable-production-deployments\")\n      .conflicts(\"--dangerously-enable-production-deployments\")\n      .hideHelp(),\n  )\n  .addDeploymentSelectionOptions(actionDescription(\"Run the MCP server on\"))\n  .action(async (options) => {\n    const ctx = await oneoffContext(options);\n    try {\n      // `serveStdio` only calls the factory once a client connects, and answers\n      // a factory throw with an opaque `-32603`, so reject a bad\n      // `--disable-tools` here instead.\n      enabledTools(options);\n    } catch (error: any) {\n      await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        errForSentry: `Failed to start MCP server: ${error}`,\n        printedMessage: `Failed to start MCP server: ${error}`,\n      });\n    }\n    // The SDK picks the era from the client's opening message: a request\n    // carrying the 2026-07-28 `_meta` envelope pins a stateless connection,\n    // while an `initialize` is still served by the same factory over the legacy\n    // protocol.\n    // The returned handle's `close()` is intentionally never called: the\n    // server lives until the client kills the process, and process exit tears\n    // the transport down.\n    serveStdio(() => makeServer(options), {\n      legacy: \"serve\",\n      // The only channel for out-of-band failures (transport errors, dropped\n      // malformed notifications). stdout carries the protocol, so they go to\n      // stderr.\n      onerror: (error) => logError(`MCP server error: ${error.message}`),\n    });\n    // Keep the process running\n    await new Promise(() => {});\n  });\n\nfunction enabledTools(\n  options: McpOptions,\n): Record<string, ConvexTool<any, any>> {\n  const disabledToolNames = new Set<string>();\n  for (const toolName of options.disableTools?.split(\",\") ?? []) {\n    const name = toolName.trim();\n    if (!allToolNames.includes(name)) {\n      // eslint-disable-next-line no-restricted-syntax\n      throw new Error(\n        `Disabled tool ${name} not found (valid tools: ${allToolNames.join(\", \")})`,\n      );\n    }\n    disabledToolNames.add(name);\n  }\n\n  const enabledToolsByName: Record<string, ConvexTool<any, any>> = {};\n  for (const tool of convexTools) {\n    if (!disabledToolNames.has(tool.name)) {\n      enabledToolsByName[tool.name] = tool;\n    }\n  }\n  return enabledToolsByName;\n}\n\nexport function makeServer(options: McpOptions) {\n  const enabledToolsByName = enabledTools(options);\n  const mutex = new Mutex();\n  const server = new Server(\n    {\n      name: \"Convex MCP Server\",\n      version: \"0.0.1\",\n    },\n    {\n      capabilities: {\n        tools: {},\n      },\n    },\n  );\n  server.setRequestHandler(\"tools/call\", async (request: CallToolRequest) => {\n    const ctx = new RequestContext(options);\n    await initializeBigBrainAuth(ctx, options);\n    try {\n      const authorized = await checkAuthorization(ctx, false);\n      if (!authorized) {\n        await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"Not Authorized: Run `npx convex dev` to login to your Convex project.\",\n        });\n      }\n      if (!request.params.arguments) {\n        await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: \"No arguments provided\",\n        });\n      }\n      const convexTool = enabledToolsByName[request.params.name];\n      if (!convexTool) {\n        await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Tool ${request.params.name} not found`,\n        });\n      }\n      const input = convexTool.inputSchema.parse(request.params.arguments);\n\n      // Serialize tool handlers since they're mutating the current working directory.\n      const result = await mutex.runExclusive(async () => {\n        return await convexTool.handler(ctx, input);\n      });\n      return {\n        content: [\n          {\n            type: \"text\",\n            text: JSON.stringify(result),\n          },\n        ],\n      };\n    } catch (error: any) {\n      let message: string;\n      if (error instanceof RequestCrash) {\n        message = error.printedMessage;\n      } else if (error instanceof Error) {\n        message = error.message;\n      } else {\n        message = String(error);\n      }\n      return {\n        content: [\n          {\n            type: \"text\",\n            text: JSON.stringify({ error: message }),\n          },\n        ],\n        isError: true,\n      };\n    }\n  });\n  server.setRequestHandler(\"tools/list\", async () => {\n    return {\n      tools: Object.values(enabledToolsByName).map(mcpTool),\n    };\n  });\n  return server;\n}\n", "//#region rolldown:runtime\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);\nvar __exportAll = (all, symbols) => {\n\tlet target = {};\n\tfor (var name in all) {\n\t\t__defProp(target, name, {\n\t\t\tget: all[name],\n\t\t\tenumerable: true\n\t\t});\n\t}\n\tif (symbols) {\n\t\t__defProp(target, Symbol.toStringTag, { value: \"Module\" });\n\t}\n\treturn target;\n};\nvar __copyProps = (to, from, except, desc) => {\n\tif (from && typeof from === \"object\" || typeof from === \"function\") {\n\t\tfor (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {\n\t\t\tkey = keys[i];\n\t\t\tif (!__hasOwnProp.call(to, key) && key !== except) {\n\t\t\t\t__defProp(to, key, {\n\t\t\t\t\tget: ((k) => from[k]).bind(null, key),\n\t\t\t\t\tenumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\treturn to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", {\n\tvalue: mod,\n\tenumerable: true\n}) : target, mod));\n\n//#endregion\nexport { __exportAll as n, __toESM as r, __commonJSMin as t };", "/**\n * Declared-dialect classification shared by the default validator providers.\n */\n\nimport type { JsonSchemaType } from './types';\n\n/**\n * Canonical `$schema` URIs per supported dialect (http + https variants, trailing-`#` stripped).\n */\nconst DRAFT_2020_12_URIS: ReadonlySet<string> = new Set([\n    'https://json-schema.org/draft/2020-12/schema',\n    'http://json-schema.org/draft/2020-12/schema'\n]);\nconst DRAFT_2019_09_URIS: ReadonlySet<string> = new Set([\n    'https://json-schema.org/draft/2019-09/schema',\n    'http://json-schema.org/draft/2019-09/schema'\n]);\nconst DRAFT_07_URIS: ReadonlySet<string> = new Set(['https://json-schema.org/draft-07/schema', 'http://json-schema.org/draft-07/schema']);\nconst DRAFT_06_URIS: ReadonlySet<string> = new Set(['https://json-schema.org/draft-06/schema', 'http://json-schema.org/draft-06/schema']);\n\n/**\n * Dialects the default providers dispatch on. draft-06 maps to `'draft-7'`: draft-07 only adds\n * keywords over draft-06 (`if`/`then`/`else`), and enforcing them on a draft-06 schema is the\n * accepted downlevel.\n */\nexport type DeclaredDialect = '2020-12' | '2019-09' | 'draft-7';\n\n/**\n * Whether a `$schema` value declares the 2019-09 dialect — the only supported dialect with\n * `$recursiveRef`/`$recursiveAnchor`. Non-throwing (unlike {@linkcode declaredDialect}) so\n * wire-layer callers can consult it for documents whose dialect may be unsupported.\n */\nexport function declares2019Dialect($schema: unknown): boolean {\n    return typeof $schema === 'string' && DRAFT_2019_09_URIS.has($schema.replace(/#$/, ''));\n}\n\n/**\n * Classify a schema's declared `$schema` dialect. No `$schema` (or a non-string one) means\n * 2020-12. Any other dialect throws a plain `Error` with a clear message rather than letting the\n * engine crash on an opaque internal error or silently mis-validate; `remedy` names the calling\n * provider's escape hatch in that message.\n */\nexport function declaredDialect(schema: JsonSchemaType, remedy: string): DeclaredDialect {\n    if (!('$schema' in schema) || typeof schema.$schema !== 'string') {\n        return '2020-12';\n    }\n    const declared = schema.$schema.replace(/#$/, '');\n    if (DRAFT_2020_12_URIS.has(declared)) {\n        return '2020-12';\n    }\n    if (DRAFT_2019_09_URIS.has(declared)) {\n        return '2019-09';\n    }\n    if (DRAFT_07_URIS.has(declared) || DRAFT_06_URIS.has(declared)) {\n        return 'draft-7';\n    }\n    throw new Error(\n        `JSON Schema declares an unsupported dialect (\"$schema\": \"${schema.$schema.slice(0, 200)}\"). ` +\n            `The default validator supports JSON Schema 2020-12, 2019-09, draft-07, and draft-06; ${remedy}`\n    );\n}\n", "import { globalConfig } from \"./core.js\";\n// functions\nexport function assertEqual(val) {\n    return val;\n}\nexport function assertNotEqual(val) {\n    return val;\n}\nexport function toZod() {\n    return (schema) => schema;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n    throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n    const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n    const values = Object.entries(entries)\n        .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n        .map(([_, v]) => v);\n    return values;\n}\nexport function joinValues(array, separator = \"|\") {\n    return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n    if (typeof value === \"bigint\")\n        return value.toString();\n    return value;\n}\n// the accessor lives on a shared prototype: an own accessor makes every box a dictionary-mode object (~360 B and a slow load per read against ~100 B and an inlined getter here)\nclass Cached {\n    constructor(getter) {\n        this._getter = getter;\n        this._value = undefined;\n    }\n    get value() {\n        const getter = this._getter;\n        if (getter !== undefined) {\n            this._value = getter();\n            this._getter = undefined;\n        }\n        return this._value;\n    }\n}\nexport function cached(getter) {\n    return new Cached(getter);\n}\nexport function nullish(input) {\n    return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n    const start = source.startsWith(\"^\") ? 1 : 0;\n    const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n    return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n    const ratio = val / step;\n    const roundedRatio = Math.round(ratio);\n    // `val` and `step` each round to a double before the division rounds again, so a true decimal multiple's quotient can sit up to 1.5 of these scaled epsilons from the integer. A 1x tolerance therefore rejected 2.03 as a multiple of 0.07; 4x covers the worst case with margin.\n    const tolerance = 4 * Number.EPSILON * Math.max(Math.abs(ratio), 1);\n    if (Math.abs(ratio - roundedRatio) < tolerance)\n        return 0;\n    return ratio - roundedRatio;\n}\nconst EVALUATING = /* @__PURE__*/ Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n    let value = undefined;\n    Object.defineProperty(object, key, {\n        get() {\n            if (value === EVALUATING) {\n                // Circular reference detected, return undefined to break the cycle\n                return undefined;\n            }\n            if (value === undefined) {\n                value = EVALUATING;\n                value = getter();\n            }\n            return value;\n        },\n        set(v) {\n            Object.defineProperty(object, key, {\n                value: v,\n                // configurable: true,\n            });\n            // object[key] = v;\n        },\n        configurable: true,\n    });\n}\nexport function objectClone(obj) {\n    return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n    Object.defineProperty(target, prop, {\n        value,\n        writable: true,\n        enumerable: true,\n        configurable: true,\n    });\n}\n/**\n * Whichever object a def's `shape` currently answers from: the one the caller passed until the first read, the frozen copy after it.\n *\n * Its keys and descriptors read without invoking anything, which is what lets a discriminated union check its discriminator, and the cycle walk read a shape, without resolving a getter that references the schema being constructed. A def that answers `shape` from an accessor of its own has none.\n */\nexport function rawShape(def) {\n    const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n    return desc?.get ? desc.get.raw : desc?.value;\n}\n// where a builder reads its source's keys and descriptors, resolving only a shape a def answers for itself. A shape resolves by object spread, so only its enumerable keys are ever part of it.\nfunction sourceShape(schema) {\n    return rawShape(schema._zod.def) ?? schema._zod.def.shape;\n}\n// a key whose value is not settled yet, self-caching so every read after the first gets the same one\nfunction deferProp(target, key, getter) {\n    Object.defineProperty(target, key, {\n        get() {\n            const value = getter();\n            assignProp(this, key, value);\n            return value;\n        },\n        enumerable: true,\n        configurable: true,\n    });\n}\n// Writes a settled key. A plain assignment is much cheaper than `defineProperty` and produces the same descriptor, but it runs whatever setter already answers to the key \u2014 an accessor this shape deferred, or an inherited one, which `__proto__` has on every object and prototype pollution can add for any name.\nfunction putProp(target, key, value) {\n    if (key in target)\n        assignProp(target, key, value);\n    else\n        target[key] = value;\n}\n/**\n * Copies `keys` of `source`'s shape onto `target`, each value passed through `wrap`.\n *\n * A key the source has resolved is copied through now, so the derived shape states it outright and nothing has to resolve it to learn what it holds. A key the source still defers stays deferred, and reads back through the source's own `shape`, so it resolves once and both shapes get that one schema.\n */\nfunction mirrorShape(target, source, keys, wrap) {\n    const raw = sourceShape(source);\n    for (const key of keys) {\n        const desc = Object.getOwnPropertyDescriptor(raw, key);\n        if (!desc.enumerable)\n            continue;\n        if (desc.get) {\n            deferProp(target, key, () => {\n                const value = source._zod.def.shape[key];\n                return wrap ? wrap(value, key) : value;\n            });\n        }\n        else\n            putProp(target, key, wrap ? wrap(desc.value, key) : desc.value);\n    }\n}\n// same, for a plain shape a caller passed rather than a schema's\nfunction mirrorProps(target, source) {\n    for (const key of Reflect.ownKeys(source)) {\n        const desc = Object.getOwnPropertyDescriptor(source, key);\n        if (!desc.enumerable)\n            continue;\n        if (desc.get)\n            deferProp(target, key, () => source[key]);\n        else\n            putProp(target, key, desc.value);\n    }\n}\nexport function mergeDefs(...defs) {\n    const mergedDescriptors = {};\n    for (const def of defs) {\n        const descriptors = Object.getOwnPropertyDescriptors(def);\n        Object.assign(mergedDescriptors, descriptors);\n    }\n    return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n    return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n    if (!path)\n        return obj;\n    return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n    const keys = Object.keys(promisesObj);\n    const promises = keys.map((key) => promisesObj[key]);\n    return Promise.all(promises).then((results) => {\n        const resolvedObj = {};\n        for (let i = 0; i < keys.length; i++) {\n            resolvedObj[keys[i]] = results[i];\n        }\n        return resolvedObj;\n    });\n}\nexport function randomString(length = 10) {\n    const chars = \"abcdefghijklmnopqrstuvwxyz\";\n    let str = \"\";\n    for (let i = 0; i < length; i++) {\n        str += chars[Math.floor(Math.random() * chars.length)];\n    }\n    return str;\n}\nexport function esc(str) {\n    return JSON.stringify(str);\n}\nexport function slugify(input) {\n    return input\n        .toLowerCase()\n        .trim()\n        .replace(/[^\\w\\s-]/g, \"\")\n        .replace(/[\\s_-]+/g, \"-\")\n        .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n    return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = /* @__PURE__*/ cached(() => {\n    // Skip the probe under `jitless`: strict CSPs report the caught `new Function` as a `securitypolicyviolation` even though the throw is swallowed.\n    if (globalConfig.jitless) {\n        return false;\n    }\n    // @ts-ignore\n    if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n        return false;\n    }\n    try {\n        const F = Function;\n        new F(\"\");\n        return true;\n    }\n    catch (_) {\n        return false;\n    }\n});\nexport function isPlainObject(o) {\n    if (isObject(o) === false)\n        return false;\n    // modified constructor\n    const ctor = o.constructor;\n    if (ctor === undefined)\n        return true;\n    if (typeof ctor !== \"function\")\n        return true;\n    // modified prototype\n    const prot = ctor.prototype;\n    if (isObject(prot) === false)\n        return false;\n    // ctor doesn't have static `isPrototypeOf`\n    if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n        return false;\n    }\n    return true;\n}\nexport function shallowClone(o) {\n    if (isPlainObject(o))\n        return { ...o };\n    if (Array.isArray(o))\n        return [...o];\n    if (o instanceof Map)\n        return new Map(o);\n    if (o instanceof Set)\n        return new Set(o);\n    return o;\n}\nexport function numKeys(data) {\n    let keyCount = 0;\n    for (const key in data) {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n            keyCount++;\n        }\n    }\n    return keyCount;\n}\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return \"undefined\";\n        case \"string\":\n            return \"string\";\n        case \"number\":\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        case \"boolean\":\n            return \"boolean\";\n        case \"function\":\n            return \"function\";\n        case \"bigint\":\n            return \"bigint\";\n        case \"symbol\":\n            return \"symbol\";\n        case \"object\":\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return \"promise\";\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return \"map\";\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return \"set\";\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return \"date\";\n            }\n            // @ts-ignore\n            if (typeof File !== \"undefined\" && data instanceof File) {\n                return \"file\";\n            }\n            return \"object\";\n        default:\n            throw new Error(`Unknown data type: ${t}`);\n    }\n};\nexport const propertyKeyTypes = /* @__PURE__*/ new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = /* @__PURE__*/ new Set([\n    \"string\",\n    \"number\",\n    \"bigint\",\n    \"boolean\",\n    \"symbol\",\n    \"undefined\",\n]);\nexport function escapeRegex(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n    const cl = new inst._zod.constr(def ?? inst._zod.def);\n    if (!def || params?.parent)\n        cl._zod.parent = inst;\n    return cl;\n}\nexport function normalizeParams(_params) {\n    const params = _params;\n    if (!params)\n        return {};\n    if (typeof params === \"string\")\n        return { error: () => params };\n    if (params?.message !== undefined) {\n        if (params?.error !== undefined)\n            throw new Error(\"Cannot specify both `message` and `error` params\");\n        params.error = params.message;\n    }\n    delete params.message;\n    if (typeof params.error === \"string\")\n        return { ...params, error: () => params.error };\n    return params;\n}\nexport function createTransparentProxy(getter) {\n    let target;\n    return new Proxy({}, {\n        get(_, prop, receiver) {\n            target ?? (target = getter());\n            return Reflect.get(target, prop, receiver);\n        },\n        set(_, prop, value, receiver) {\n            target ?? (target = getter());\n            return Reflect.set(target, prop, value, receiver);\n        },\n        has(_, prop) {\n            target ?? (target = getter());\n            return Reflect.has(target, prop);\n        },\n        deleteProperty(_, prop) {\n            target ?? (target = getter());\n            return Reflect.deleteProperty(target, prop);\n        },\n        ownKeys(_) {\n            target ?? (target = getter());\n            return Reflect.ownKeys(target);\n        },\n        getOwnPropertyDescriptor(_, prop) {\n            target ?? (target = getter());\n            return Reflect.getOwnPropertyDescriptor(target, prop);\n        },\n        defineProperty(_, prop, descriptor) {\n            target ?? (target = getter());\n            return Reflect.defineProperty(target, prop, descriptor);\n        },\n    });\n}\nexport function stringifyPrimitive(value) {\n    if (typeof value === \"bigint\")\n        return value.toString() + \"n\";\n    if (typeof value === \"string\")\n        return `\"${value}\"`;\n    return `${value}`;\n}\nexport function optionalKeys(shape) {\n    return Object.keys(shape).filter((k) => {\n        return shape[k]._zod.optin !== undefined && shape[k]._zod.optout === \"optional\";\n    });\n}\n// Wrapped in a `@__PURE__` IIFE: esbuild never tree-shakes a top-level initializer that contains a member access on `Number`, so the bare object literal survived into every bundle.\nexport const NUMBER_FORMAT_RANGES = /*@__PURE__*/ (() => ({\n    safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n    int32: [-2147483648, 2147483647],\n    uint32: [0, 4294967295],\n    float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n    float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n}))();\nexport const BIGINT_FORMAT_RANGES = {\n    int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n    uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n    }\n    const newShape = {};\n    mirrorShape(newShape, schema, maskedKeys(schema, mask));\n    return clone(schema, mergeDefs(currDef, { shape: newShape, checks: [] }));\n}\n// the mask keys that select something, checked against the source's shape without resolving it\nfunction maskedKeys(schema, mask) {\n    const raw = sourceShape(schema);\n    const keys = [];\n    // `for...in` skips symbols, so a symbol in the mask would select nothing\n    for (const key of Reflect.ownKeys(mask)) {\n        if (!Object.getOwnPropertyDescriptor(raw, key)?.enumerable) {\n            throw new Error(`Unrecognized key: \"${String(key)}\"`);\n        }\n        if (mask[key])\n            keys.push(key);\n    }\n    return keys;\n}\nexport function omit(schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n    }\n    const omitted = new Set(maskedKeys(schema, mask));\n    const newShape = {};\n    mirrorShape(newShape, schema, Reflect.ownKeys(sourceShape(schema)).filter((key) => !omitted.has(key)));\n    return clone(schema, mergeDefs(currDef, { shape: newShape, checks: [] }));\n}\nexport function extend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to extend: expected a plain object\");\n    }\n    const checks = schema._zod.def.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        // Only throw if new shape overlaps with existing shape. Use getOwnPropertyDescriptor to check key existence without accessing values\n        const existingShape = sourceShape(schema);\n        for (const key of Reflect.ownKeys(shape)) {\n            if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n                throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n            }\n        }\n    }\n    return clone(schema, mergeDefs(schema._zod.def, { shape: extended(schema, shape) }));\n}\n// the source's keys, then the caller's overlaid on top\nfunction extended(schema, shape) {\n    const newShape = {};\n    mirrorShape(newShape, schema, Reflect.ownKeys(sourceShape(schema)));\n    mirrorProps(newShape, shape);\n    return newShape;\n}\nexport function safeExtend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n    }\n    return clone(schema, mergeDefs(schema._zod.def, { shape: extended(schema, shape) }));\n}\nexport function merge(a, b) {\n    if (!b?._zod?.def) {\n        throw new Error(\"Invalid input to merge: expected an object schema. To merge a plain shape, use `.extend()`.\");\n    }\n    if (a._zod.def.checks?.length) {\n        throw new Error(\".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.\");\n    }\n    const newShape = {};\n    mirrorShape(newShape, a, Reflect.ownKeys(sourceShape(a)));\n    mirrorShape(newShape, b, Reflect.ownKeys(sourceShape(b)));\n    const def = mergeDefs(a._zod.def, {\n        shape: newShape,\n        get catchall() {\n            return b._zod.def.catchall;\n        },\n        checks: b._zod.def.checks ?? [],\n    });\n    return clone(a, def);\n}\nexport function partial(Class, schema, mask, name = \"partial\") {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(`.${name}() cannot be used on object schemas containing refinements`);\n    }\n    const selected = mask ? new Set(maskedKeys(schema, mask)) : undefined;\n    const newShape = {};\n    mirrorShape(newShape, schema, Reflect.ownKeys(sourceShape(schema)), Class &&\n        ((value, key) => (selected && !selected.has(key) ? value : new Class({ type: \"optional\", innerType: value }))));\n    return clone(schema, mergeDefs(schema._zod.def, { shape: newShape, checks: [] }));\n}\nexport function required(Class, schema, mask) {\n    const selected = mask ? new Set(maskedKeys(schema, mask)) : undefined;\n    const newShape = {};\n    mirrorShape(newShape, schema, Reflect.ownKeys(sourceShape(schema)), (value, key) => \n    // overwrite with non-optional\n    selected && !selected.has(key) ? value : new Class({ type: \"nonoptional\", innerType: value }));\n    return clone(schema, mergeDefs(schema._zod.def, { shape: newShape }));\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n    if (x.aborted === true)\n        return true;\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue !== true) {\n            return true;\n        }\n    }\n    return false;\n}\n// Checks for explicit abort (continue === false), as opposed to implicit abort (continue === undefined). Used to respect `abort: true` in .refine() even for checks that have a `when` function.\nexport function explicitlyAborted(x, startIndex = 0) {\n    if (x.aborted === true)\n        return true;\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue === false) {\n            return true;\n        }\n    }\n    return false;\n}\nexport function prefixIssues(path, issues) {\n    return issues.map((iss) => {\n        var _a;\n        (_a = iss).path ?? (_a.path = []);\n        iss.path.unshift(path);\n        return iss;\n    });\n}\nexport function unwrapMessage(message) {\n    return typeof message === \"string\" ? message : message?.message;\n}\n/* A check holds no link back to the schema it is attached to \u2014 the same check instance is shared by every clone of that schema \u2014 so the owner is stamped onto the issues a check just raised, at the only point where both are in scope. Runs on the failure path only; `start` is the issue count from before the check ran. */\n/** The leading size checks of `defChecks` that set an upper bound, each paired with it. */\nexport function sizeCaps(defChecks) {\n    const caps = [];\n    for (const ch of defChecks ?? []) {\n        const d = ch._zod.def;\n        // a later check may rewrite the value\n        if (!/_(length|size)$|_equals$/.test(d.check))\n            break;\n        const max = d.maximum ?? d.length ?? d.size;\n        if (max >= 0)\n            caps.push([max, ch]);\n    }\n    return caps;\n}\nexport function attachSchema(issues, start, inst) {\n    var _a;\n    for (let i = start; i < issues.length; i++) {\n        (_a = issues[i]).schema ?? (_a.schema = inst);\n    }\n}\nexport function finalizeIssue(iss, ctx, config) {\n    var _a;\n    // A schema that raised an issue itself owns it outright, and outranks any stamp an enclosing check left in `attachSchema`. String formats and z.custom() are schema and check at once, so when they act as a check they defer to that stamp instead.\n    const traits = iss.inst?._zod?.traits;\n    if (traits?.has(\"$ZodType\")) {\n        if (traits.has(\"$ZodCheck\"))\n            (_a = iss).schema ?? (_a.schema = iss.inst);\n        else\n            iss.schema = iss.inst;\n    }\n    // Decreasing specificity, first map to return a message wins. `inst` is whatever raised the issue, so a check's own map outranks the owning schema's.\n    const schemaError = iss.schema !== iss.inst ? iss.schema?._zod.def?.error : undefined;\n    const message = iss.message\n        ? iss.message\n        : (unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n            unwrapMessage(schemaError?.(iss)) ??\n            unwrapMessage(ctx?.error?.(iss)) ??\n            unwrapMessage(config.customError?.(iss)) ??\n            unwrapMessage(config.localeError?.(iss)) ??\n            \"Invalid input\");\n    // an explicit own-key copy beats object rest with excluded keys, which v8 routes through a generic runtime call; Object.keys rather than for-in so an issue pushed with a prototype does not leak inherited keys, and an own __proto__ key is dropped rather than assigned through the setter\n    const full = {};\n    for (const k of Object.keys(iss)) {\n        if (k === \"inst\" || k === \"schema\" || k === \"continue\" || k === \"input\" || k === \"__proto__\")\n            continue;\n        full[k] = iss[k];\n    }\n    full.path ?? (full.path = []);\n    full.message = message;\n    if (ctx?.reportInput) {\n        full.input = iss.input;\n    }\n    return full;\n}\nexport function getSizableOrigin(input) {\n    if (input instanceof Set)\n        return \"set\";\n    if (input instanceof Map)\n        return \"map\";\n    // @ts-ignore\n    if (input instanceof File)\n        return \"file\";\n    return \"unknown\";\n}\nconst highSurrogate = /[\\uD800-\\uDBFF]/;\n// Code points in `str`: a surrogate pair counts once, a lone surrogate as itself. Hand-rolled because the string iterator allocates and runs ~250x slower on this path; the regex probe exits ~50x quicker for a string with no astral characters.\nexport function codePointLength(str) {\n    const units = str.length;\n    if (!highSurrogate.test(str))\n        return units;\n    let count = units;\n    for (let i = 0; i < units - 1; i++) {\n        if ((str.charCodeAt(i) & 0xfc00) === 0xd800 && (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\n            count--;\n            i++;\n        }\n    }\n    return count;\n}\nexport function getLengthableOrigin(input) {\n    if (Array.isArray(input))\n        return \"array\";\n    if (typeof input === \"string\")\n        return \"string\";\n    return \"unknown\";\n}\nexport function parsedType(data) {\n    const t = typeof data;\n    switch (t) {\n        case \"number\": {\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        }\n        case \"object\": {\n            if (data === null) {\n                return \"null\";\n            }\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            const obj = data;\n            if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n                return obj.constructor.name;\n            }\n        }\n    }\n    return t;\n}\nexport function issue(...args) {\n    const [iss, input, inst] = args;\n    if (typeof iss === \"string\") {\n        return {\n            message: iss,\n            code: \"custom\",\n            input,\n            inst,\n        };\n    }\n    return { ...iss };\n}\nexport function cleanEnum(obj) {\n    return Object.entries(obj)\n        .filter(([k, _]) => {\n        // return true if NaN, meaning it's not a number, thus a string key\n        return Number.isNaN(Number.parseInt(k, 10));\n    })\n        .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n    const binaryString = atob(base64);\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n        bytes[i] = binaryString.charCodeAt(i);\n    }\n    return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n    let binaryString = \"\";\n    for (let i = 0; i < bytes.length; i++) {\n        binaryString += String.fromCharCode(bytes[i]);\n    }\n    return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n    const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n    const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n    return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n    return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n    const cleanHex = hex.replace(/^0x/, \"\");\n    if (cleanHex.length % 2 !== 0) {\n        throw new Error(\"Invalid hex string length\");\n    }\n    const bytes = new Uint8Array(cleanHex.length / 2);\n    for (let i = 0; i < cleanHex.length; i += 2) {\n        bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n    }\n    return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n    return Array.from(bytes)\n        .map((b) => b.toString(16).padStart(2, \"0\"))\n        .join(\"\");\n}\n// instanceof\nexport class Class {\n    constructor(..._args) { }\n}\n//////////    PROTOTYPE INSTALLERS     //////////\n//\n// Members live on the prototype and materialize per instance on first read, which keeps own-property count under the step where V8 stops using inline slots. Changing anything here means re-measuring runtime, memory and bundle size together \u2014 see \"The three axes\" in AGENTS.md.\n/**\n * Installs a trait's members on its prototype. Each value builds that member for the instance on first read; the built value shadows the accessor as an own property, so a detached `const { parse } = schema` keeps working.\n *\n * Call this from a `proto` initializer, which runs once per prototype \u2014 never per instance.\n */\nexport function members(proto, table) {\n    for (const key in table) {\n        const desc = Object.getOwnPropertyDescriptor(table, key);\n        // a getter installs as written, so it stays live: `description` reads through to the registry on every access. not enumerable: an object literal's is, and a prototype member never was\n        if (desc.get)\n            Object.defineProperty(proto, key, { ...desc, enumerable: false });\n        // a method materializes bound on first read, which is what keeps a detached member working: `const opt = schema.optional; opt()`\n        else\n            defineBound(proto, key, desc.value);\n    }\n}\n/** Shadows a prototype member with an own value, so a getter that builds from the instance runs once. */\nexport function own(inst, key, value, enumerable = true) {\n    Object.defineProperty(inst, key, { configurable: true, writable: true, enumerable, value });\n    return value;\n}\n/** Like {@link own}, for a member that was never an own data property and has to stay out of `Object.keys`. */\nexport function hide(inst, key, value) {\n    return own(inst, key, value, false);\n}\n/** Adds members a table derives from the instance: each builds on first read and shadows as own data, and assignment shadows the same way, as when these were own properties. */\nexport /*@__NO_SIDE_EFFECTS__*/ function derived(computes, table) {\n    for (const key in computes) {\n        const compute = computes[key];\n        // an object literal's accessor is configurable and enumerable, and `members` copies the descriptor as written\n        Object.defineProperty(table, key, {\n            configurable: true,\n            enumerable: true,\n            get() {\n                return own(this, key, compute(this));\n            },\n            set(value) {\n                own(this, key, value);\n            },\n        });\n    }\n    return table;\n}\nfunction defineBound(proto, key, fn) {\n    Object.defineProperty(proto, key, {\n        configurable: true,\n        get() {\n            // vitest's spyOn calls a prototype getter bare to find the function it wraps, so a nullish receiver answers the raw method\n            return this == null ? fn : own(this, key, fn.bind(this));\n        },\n        set(value) {\n            own(this, key, value);\n        },\n    });\n}\n/** Returns the prototype to install on, or `undefined` if this group is already installed on it. */\nfunction claim(inst, sentinel) {\n    const proto = Object.getPrototypeOf(inst);\n    // Runs on every construction, so `in` rather than the costlier `hasOwnProperty.call`. Sentinels are keys the group itself defines.\n    return sentinel in proto ? undefined : proto;\n}\n// The internals whose init chain is installing. A second call for the same one is a derived constructor overriding its base, so it must not construct another schema in between or the override is dropped.\nlet installing;\n// Set while a getter is running, so a value that resolved through a recursion break is not memoized. One shared descriptor shadows the key for the duration, which costs no per-key allocation.\nlet broke = false;\nconst breaker = {\n    configurable: true,\n    get() {\n        broke = true;\n        return undefined;\n    },\n};\n/**\n * Installs a lazily-derived internal on the `_zod` prototype of `inst`'s\n * constructor, computed from the internals object itself and cached there on\n * first read. One accessor per constructor rather than one per instance.\n */\nexport function defineLazyInternal(inst, key, compute) {\n    const proto = Object.getPrototypeOf(inst._zod);\n    if (key in proto && installing !== inst._zod) {\n        // A repeat construction: everything is installed already. Cleared here so the reference is not held past the first construction of every type.\n        installing = undefined;\n        return;\n    }\n    installing = inst._zod;\n    Object.defineProperty(proto, key, {\n        configurable: true,\n        get() {\n            // Shadowed before computing so a re-entrant read from a recursive schema resolves to undefined instead of running the getter again.\n            Object.defineProperty(this, key, breaker);\n            const outer = broke;\n            broke = false;\n            try {\n                const value = compute(this);\n                // A result that resolved through a recursion break is recomputed once the graph is complete; everything else memoizes, undefined included.\n                if (broke)\n                    delete this[key];\n                else\n                    Object.defineProperty(this, key, { configurable: true, writable: true, value });\n                broke = broke || outer;\n                return value;\n            }\n            catch (err) {\n                // A compute that threw memoizes nothing, so a later read runs it again and fails the same way. The shadow goes with it, since leaving it installed would answer undefined for every later read.\n                delete this[key];\n                broke = broke || outer;\n                throw err;\n            }\n        },\n        set(value) {\n            Object.defineProperty(this, key, { configurable: true, writable: true, value });\n        },\n    });\n}\n/**\n * Installs `key` on `inst`'s prototype, computed by `make` on first read and cached there as an own\n * data property. One accessor per constructor rather than one per instance, because an own accessor\n * puts every instance after the first into v8 dictionary mode. The key doubles as the sentinel.\n */\nexport function installLazyProp(inst, key, make, enumerable) {\n    const proto = claim(inst, key);\n    if (!proto)\n        return;\n    Object.defineProperty(proto, key, {\n        configurable: true,\n        get() {\n            // Shadowed before computing, so a re-entrant read from a self-referential shape resolves to undefined instead of running the getter again. A data property rather than an accessor: an own accessor is the dictionary-mode transition this exists to avoid.\n            const desc = { configurable: true, writable: true, enumerable, value: undefined };\n            Object.defineProperty(this, key, desc);\n            // a compute that throws leaves the shadow behind, so later reads answer undefined instead of re-throwing; `defineLazy` did the same, and `defineLazyInternal`'s delete-on-catch would cost bytes in every bundle for a case only a throwing user getter reaches\n            desc.value = make(this);\n            Object.defineProperty(this, key, desc);\n            return desc.value;\n        },\n        set(value) {\n            Object.defineProperty(this, key, { configurable: true, writable: true, enumerable, value });\n        },\n    });\n}\n/** Marks the thunk `_catch` synthesises for a constant catch value. `Function.length` cannot tell that thunk from a user callback \u2014 rest and defaulted parameters both report arity 0 \u2014 and a user callback reads `ctx.error`, whose issues only finalize correctly against the caller's per-parse error map. Provenance can say what arity cannot. A plain string key rather than `Symbol.for`, whose call at module scope no bundler can prove pure \u2014 the same shape that anchored `urlCanParse` into every build. */\nexport const CONSTANT_CATCH = \"~constantCatch\";\n/** Wraps a constant catch value in a thunk tagged with {@link CONSTANT_CATCH}. */\nexport function constantCatch(value) {\n    const fn = () => value;\n    fn[CONSTANT_CATCH] = true;\n    return fn;\n}\n", "var _a;\nimport { members as installMembers } from \"./util.js\";\n/** A special constant with type `never` */\nexport const NEVER = /*@__PURE__*/ Object.freeze({\n    status: \"aborted\",\n});\n/* Shared descriptor for installing `_zod`; defineProperty reads it\n * synchronously, so reusing one object avoids a per-instance allocation. */\nconst _zodDesc = { value: undefined, enumerable: false };\n// null where suppressing the capture would be unrecoverable: `parse()` puts the frames back with `captureStackTrace`, so without it the throw would lose its stack. also latched to null once `stackTraceLimit` proves unassignable, which a realm can do at any point by hardening Error\nlet _E = \"captureStackTrace\" in Error ? Error : null;\n// v8 captures a stack trace inside the Error constructor, which dominates a failed parse; costs only the frames, and parse() restores those. the constructor must RUN: Object.create is cheaper and passes instanceof, but Error.isError and util.types.isNativeError check an internal slot\nfunction newError(Definition) {\n    const E = _E;\n    if (E) {\n        const saved = E.stackTraceLimit;\n        if (typeof saved === \"number\") {\n            try {\n                E.stackTraceLimit = 0;\n            }\n            catch {\n                _E = null;\n                return new Definition();\n            }\n            try {\n                return new Definition();\n            }\n            finally {\n                E.stackTraceLimit = saved;\n            }\n        }\n    }\n    return new Definition();\n}\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, \n/** This trait's members, installed once on every prototype that composes it. They cannot be declared in the initializer above: that runs per instance, and the prototype is shared. */\nproto, params) {\n    // Prototype for this constructor's `_zod` internals. Lazily-derived fields (`values`, `pattern`, `optin`, \u2026) install here once rather than as an accessor on every instance.\n    const zodProto = {};\n    // Assigning the fields in the constructor body is what gives instances in-object slots; building the object literally and reparenting it costs a second allocation and a generic property copy.\n    function Internals(def) {\n        this.def = def;\n        this.constr = _;\n        this.traits = new Set();\n    }\n    Internals.prototype = zodProto;\n    const protoMembers = proto;\n    // One trait's members land on every prototype whose chain composes it, so the answer is per prototype rather than per trait.\n    const initialized = protoMembers && new WeakSet();\n    function init(inst, def) {\n        if (!inst._zod) {\n            _zodDesc.value = new Internals(def);\n            try {\n                Object.defineProperty(inst, \"_zod\", _zodDesc);\n            }\n            finally {\n                // Cleared even on throw, so the shared descriptor never leaks one instance's internals into the next.\n                _zodDesc.value = undefined;\n            }\n        }\n        else if (inst._zod.traits.has(name)) {\n            return;\n        }\n        inst._zod.traits.add(name);\n        initializer(inst, def);\n        if (initialized) {\n            // `super(def)` from a user subclass gives `this` a prototype the subclass owns, and installing there would overwrite whatever the subclass declared. `constr` built the instance, so its prototype is the one below the subclass's that should carry the members. A receiver whose chain never reaches that prototype installs on its own, which for a plain object handed straight to `init` means `Object.prototype` \u2014 unchanged from before.\n            const own = Object.getPrototypeOf(inst);\n            const ctorProto = inst._zod.constr.prototype;\n            let up = own;\n            while (up && up !== ctorProto)\n                up = Object.getPrototypeOf(up);\n            const target = up ?? own;\n            if (!initialized.has(target)) {\n                initialized.add(target);\n                installMembers(target, protoMembers);\n            }\n        }\n        // support prototype modifications; for-in avoids the array allocation of Object.keys on the (usually empty) prototype\n        const proto = _.prototype;\n        for (const k in proto) {\n            if (!Object.prototype.hasOwnProperty.call(proto, k))\n                continue;\n            if (!(k in inst)) {\n                inst[k] = proto[k].bind(inst);\n            }\n        }\n    }\n    // doesn't work if Parent has a constructor with arguments\n    const Parent = params?.Parent ?? Object;\n    class Definition extends Parent {\n    }\n    Object.defineProperty(Definition, \"name\", { value: name });\n    function _(def) {\n        const inst = params?.Parent ? newError(Definition) : this;\n        init(inst, def);\n        const deferred = inst._zod.deferred;\n        if (deferred) {\n            for (const fn of deferred) {\n                fn();\n            }\n            // Released: initializers run once, and the list would otherwise be retained for the schema's lifetime.\n            inst._zod.deferred = undefined;\n        }\n        // Global post-processor hook. Internal: installed by `import \"zod/compile\"` to enable AOT compilation for every constructed schema. Runs last, once the instance is fully built, because it hands the instance to compile(). The post-processor is expected to be reentrancy-guarded by its own implementation.\n        const pp = globalThis.__zod_globalConfig?.postProcessor;\n        if (pp)\n            pp(inst);\n        return inst;\n    }\n    Object.defineProperty(_, \"init\", { value: init });\n    Object.defineProperty(_, Symbol.hasInstance, {\n        value: (inst) => {\n            if (params?.Parent && inst instanceof params.Parent)\n                return true;\n            return inst?._zod?.traits?.has(name);\n        },\n    });\n    Object.defineProperty(_, \"name\", { value: name });\n    return _;\n}\n//////////////////////////////   UTILITIES   ///////////////////////////////////////\nexport const $brand = /*@__PURE__*/ Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n    constructor() {\n        super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n    }\n}\nexport class $ZodEncodeError extends Error {\n    constructor(name) {\n        super(`Encountered unidirectional transform during encode: ${name}`);\n        this.name = \"ZodEncodeError\";\n    }\n}\n(_a = globalThis).__zod_globalConfig ?? (_a.__zod_globalConfig = {});\nexport const globalConfig = globalThis.__zod_globalConfig;\nexport function config(newConfig) {\n    if (newConfig)\n        Object.assign(globalConfig, newConfig);\n    return globalConfig;\n}\n", "import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\n/* Computing the message eagerly is expensive (pretty-printed JSON of all\n * issues), so defer it until first read. The accessor functions and\n * descriptors are shared across instances to keep error construction\n * cheap; the computed message is cached on the internals object. The\n * setter preserves plain assignment semantics for consumers that\n * overwrite `message`. */\nfunction _getMessage() {\n    const internals = this._zod;\n    internals.message ?? (internals.message = JSON.stringify(internals.def, util.jsonStringifyReplacer, 2));\n    return internals.message;\n}\nfunction _setMessage(value) {\n    this._zod.message = value;\n}\nconst _messageDesc = {\n    get: _getMessage,\n    set: _setMessage,\n    enumerable: true,\n    configurable: true,\n};\nconst _issuesDesc = { value: undefined, enumerable: false };\n/* Prototypes that already carry the lazy `toString`. Seeded with the\n * intrinsics so that `init` on a foreign object \u2014 it accepts any object \u2014\n * can never install an accessor onto a prototype we do not own. */\nconst _installedToString = /* @__PURE__ */ new WeakSet([Object.prototype, Error.prototype]);\nconst initializer = (inst, def) => {\n    inst.name = \"$ZodError\";\n    // `_zod` is already non-enumerable: $constructor's init defined it with this same descriptor\n    _issuesDesc.value = def;\n    Object.defineProperty(inst, \"issues\", _issuesDesc);\n    // Clear the shared slot; a retained `value` pins the last error's issues.\n    _issuesDesc.value = undefined;\n    Object.defineProperty(inst, \"message\", _messageDesc);\n    /* `toString` lives as a non-enumerable lazy getter on the shared\n     * prototype; on first access it caches a per-instance closure so\n     * detached usage still works. */\n    const proto = Object.getPrototypeOf(inst);\n    if (!_installedToString.has(proto)) {\n        _installedToString.add(proto);\n        Object.defineProperty(proto, \"toString\", {\n            configurable: true,\n            enumerable: false,\n            get() {\n                const value = () => this.message;\n                Object.defineProperty(this, \"toString\", { value, configurable: true, writable: true });\n                return value;\n            },\n            set(value) {\n                Object.defineProperty(this, \"toString\", { value, configurable: true, writable: true });\n            },\n        });\n    }\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, undefined, {\n    Parent: Error,\n});\n/** Get-or-create `obj[key]` as an own data property. A path segment naming an inherited member\n * (\"toString\", \"constructor\") would otherwise read through to the prototype, and assigning\n * \"__proto__\" would hit the setter instead of creating a key. */\nfunction node(obj, key, make) {\n    if (!Object.prototype.hasOwnProperty.call(obj, key)) {\n        if (key === \"__proto__\") {\n            Object.defineProperty(obj, key, { value: make(), writable: true, enumerable: true, configurable: true });\n        }\n        else {\n            obj[key] = make();\n        }\n    }\n    return obj[key];\n}\nexport function flattenError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = {};\n    const formErrors = [];\n    for (const sub of error.issues) {\n        if (sub.path.length > 0) {\n            node(fieldErrors, sub.path[0], () => []).push(mapper(sub));\n        }\n        else {\n            formErrors.push(mapper(sub));\n        }\n    }\n    return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = { _errors: [] };\n    const processError = (error, path = []) => {\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < fullpath.length) {\n                        const el = fullpath[i];\n                        const terminal = i === fullpath.length - 1;\n                        // `_errors` is reserved by this legacy format, so merge a matching path segment into the current node instead of treating its array as a child.\n                        if (el === \"_errors\") {\n                            if (terminal)\n                                curr._errors.push(mapper(issue));\n                            i++;\n                            continue;\n                        }\n                        // A path element may collide with an inherited property name such as\n                        // \"__proto__\" or \"constructor\". Truthiness checks read the prototype\n                        // (so no node is created, then ._errors.push throws), and bracket\n                        // assignment of \"__proto__\" hits the setter instead of creating an\n                        // own key. Guard the read with hasOwnProperty and create the node\n                        // with defineProperty so any path element becomes a real own key.\n                        if (!Object.prototype.hasOwnProperty.call(curr, el)) {\n                            Object.defineProperty(curr, el, {\n                                value: { _errors: [] },\n                                enumerable: true,\n                                writable: true,\n                                configurable: true,\n                            });\n                        }\n                        const node = curr[el];\n                        if (terminal) {\n                            node._errors.push(mapper(issue));\n                        }\n                        curr = node;\n                        i++;\n                    }\n                }\n            }\n        }\n    };\n    processError(error);\n    return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n    const result = { errors: [] };\n    const processError = (error, path = []) => {\n        var _a;\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                // regular union error\n                issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    result.errors.push(mapper(issue));\n                    continue;\n                }\n                let curr = result;\n                let i = 0;\n                while (i < fullpath.length) {\n                    const el = fullpath[i];\n                    const terminal = i === fullpath.length - 1;\n                    if (typeof el === \"string\") {\n                        curr.properties ?? (curr.properties = {});\n                        // el may collide with an inherited property name (\"__proto__\",\n                        // \"constructor\", ...); ??= reads the prototype so the node is never\n                        // created and curr.errors.push throws. Guard with hasOwnProperty and\n                        // create the node with defineProperty so \"__proto__\" becomes a real\n                        // own key rather than invoking the prototype setter.\n                        if (!Object.prototype.hasOwnProperty.call(curr.properties, el)) {\n                            Object.defineProperty(curr.properties, el, {\n                                value: { errors: [] },\n                                enumerable: true,\n                                writable: true,\n                                configurable: true,\n                            });\n                        }\n                        curr = curr.properties[el];\n                    }\n                    else {\n                        curr.items ?? (curr.items = []);\n                        (_a = curr.items)[el] ?? (_a[el] = { errors: [] });\n                        curr = curr.items[el];\n                    }\n                    if (terminal) {\n                        curr.errors.push(mapper(issue));\n                    }\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n *   issues: [\n *     {\n *       expected: 'string',\n *       code: 'invalid_type',\n *       path: [ 'username' ],\n *       message: 'Invalid input: expected string'\n *     },\n *     {\n *       expected: 'number',\n *       code: 'invalid_type',\n *       path: [ 'favoriteNumbers', 1 ],\n *       message: 'Invalid input: expected number'\n *     }\n *   ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n *   \u2716 Expected number, received string at \"username\n * favoriteNumbers[0]\n *   \u2716 Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n    const segs = [];\n    const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n    for (const seg of path) {\n        if (typeof seg === \"number\")\n            segs.push(`[${seg}]`);\n        else if (typeof seg === \"symbol\")\n            segs.push(`[${JSON.stringify(String(seg))}]`);\n        else if (/[^\\w$]/.test(seg))\n            segs.push(`[${JSON.stringify(seg)}]`);\n        else {\n            if (segs.length)\n                segs.push(\".\");\n            segs.push(seg);\n        }\n    }\n    return segs.join(\"\");\n}\nexport function prettifyError(error) {\n    const lines = [];\n    // sort by path length\n    const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n    // Process each issue\n    for (const issue of issues) {\n        lines.push(`\u2716 ${issue.message}`);\n        if (issue.path?.length)\n            lines.push(`  \u2192 at ${toDotPath(issue.path)}`);\n    }\n    // Convert Map to formatted string\n    return lines.join(\"\\n\");\n}\n", "import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\n// Always both keys, so the `_params` read site in `_parse` sees one object shape rather than two.\nfunction finalizeParams(callee, params) {\n    return { callee: params?.callee ?? callee, Err: params?.Err };\n}\nexport const _parse = (_Err) => {\n    const fn = (schema, value, _ctx, _params) => {\n        const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n        const result = schema._zod.run({ value, issues: [] }, ctx);\n        if (result instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        if (result.issues.length) {\n            const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n            util.captureStackTrace(e, _params?.callee ?? fn);\n            throw e;\n        }\n        return result.value;\n    };\n    return fn;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => {\n    const fn = async (schema, value, _ctx, params) => {\n        const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n        let result = schema._zod.run({ value, issues: [] }, ctx);\n        if (result instanceof Promise)\n            result = await result;\n        if (result.issues.length) {\n            const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n            util.captureStackTrace(e, params?.callee ?? fn);\n            throw e;\n        }\n        return result.value;\n    };\n    return fn;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length ? failure(_Err, result.issues, ctx) : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\n// the error is built on the first read of `error`: finalizing the issues and constructing the instance is most of a failing parse, and a caller that only branches on `success` never pays it. a getter in the literal keeps this small; the alternative, one shared accessor descriptor plus a hidden state slot, reads ~15% faster but costs ~75 B gzipped in every bundle\nfunction failure(Err, issues, ctx) {\n    let error;\n    return {\n        success: false,\n        get error() {\n            if (!error) {\n                error = new Err(issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n                // finalizeIssue drops `input`, so the built error holds nothing; keeping the raw issues past this point pins the parsed value for the life of the result\n                issues = undefined;\n                ctx = undefined;\n            }\n            return error;\n        },\n        set error(e) {\n            error = e;\n            // a replacement makes the getter's branch unreachable, so the captures have to go here too\n            issues = undefined;\n            ctx = undefined;\n        },\n    };\n}\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length ? failure(_Err, result.issues, ctx) : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\n// registry mirrors of the compiler's sentinels, so this module never imports the compiler\nconst COMPILE_INVALID = /* @__PURE__ */ Symbol.for(\"zod.compile.invalid\");\nconst COMPILE_FALLBACK = /* @__PURE__ */ Symbol.for(\"zod.compile.fallback\");\n// Deliberately tiny, because v8 will not inline a body carrying the fallback's object literals and throw. Everything that is not the compiled happy path lives in validateFallback, and that split is worth ~35% on a compiled schema.\nexport const validate = ((schema, value, _ctx) => {\n    const validator = schema._zod.bag.validator;\n    if (validator !== undefined) {\n        if (validator(value) !== COMPILE_INVALID)\n            return true;\n        // a definite sentinel means the runtime would reject, so skip the re-parse; a ctx can still change the answer\n        if (validator.definite === true && _ctx === undefined)\n            return false;\n    }\n    return validateFallback(schema, value, _ctx);\n});\nfunction validateFallback(schema, value, _ctx) {\n    const ctx = _ctx\n        ? { ..._ctx, async: false, abortEarly: true }\n        : { async: false, abortEarly: true };\n    const fallbackRun = schema._zod.bag.fallbackRun;\n    let result;\n    if (fallbackRun) {\n        // skip nested fast paths on the fallback, so user callbacks keep the at-most-twice bound\n        ctx[COMPILE_FALLBACK] = true;\n        result = fallbackRun({ value, issues: [] }, ctx);\n    }\n    else {\n        result = schema._zod.run({ value, issues: [] }, ctx);\n    }\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length === 0;\n}\n// no fast path: the compiler keeps async parses on the runtime, because a promise-returning callback that is not declared async compiles to a throw\nexport const validateAsync = async (schema, value, _ctx) => {\n    const ctx = _ctx\n        ? { ..._ctx, async: true, abortEarly: true }\n        : { async: true, abortEarly: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length === 0;\n};\nexport const _encode = (_Err) => {\n    const parse = _parse(_Err);\n    const fn = (schema, value, _ctx, _params) => {\n        const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n        return parse(schema, value, ctx, finalizeParams(fn, _params));\n    };\n    return fn;\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => {\n    const parse = _parse(_Err);\n    const fn = (schema, value, _ctx, _params) => {\n        return parse(schema, value, _ctx, finalizeParams(fn, _params));\n    };\n    return fn;\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => {\n    const parseAsync = _parseAsync(_Err);\n    const fn = async (schema, value, _ctx, _params) => {\n        const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n        return (await parseAsync(schema, value, ctx, finalizeParams(fn, _params)));\n    };\n    return fn;\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => {\n    const parseAsync = _parseAsync(_Err);\n    const fn = async (schema, value, _ctx, _params) => {\n        return await parseAsync(schema, value, _ctx, finalizeParams(fn, _params));\n    };\n    return fn;\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n    return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n    return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n    return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n", "import * as util from \"./util.js\";\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const cuid = /^[cC][0-9a-z]{6,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\nexport function nanoidOfLength(length) {\n    return new RegExp(`^[a-zA-Z0-9_-]{${length}}$`);\n}\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n    if (!version)\n        return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n    return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\n// Single character class, not an alternation: the two properties overlap (U+1F9B0-U+1F9B3), so `(A|B)+` backtracks exponentially on a failed match. The leading lookahead then demands one anchor \u2014 a pictograph, a regional indicator, or the enclosing keycap \u2014 because `\\p{Emoji_Component}` on its own covers ASCII digits, `#`, `*`, ZWJ, variation selectors and skin tone modifiers, none of which is an emoji without a base.\nconst _emoji = `^(?=[\\\\s\\\\S]*[\\\\p{Extended_Pictographic}\\\\p{Regional_Indicator}\\\\u20E3])[\\\\p{Extended_Pictographic}\\\\p{Emoji_Component}]+$`;\nexport function emoji() {\n    return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n    const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n    return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2,3})?$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^(?=.{1,253}$)([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,63}$/;\nexport const httpProtocol = /^https?$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces) E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// Credit card shape: 12\u201319 digits, optionally separated by single spaces or single hyphens. ISO/IEC 7812 caps the PAN at 19 digits; 12 is the shortest issued length (Maestro).\nexport const creditCard = /^\\d(?:[ -]?\\d){11,18}$/;\n// ISO 4217 alpha codes from the SIX list, regenerated by scripts/update-iso-4217.ts\nexport const currencyCode = /^(?:AED|AFN|ALL|AMD|AOA|ARS|AUD|AWG|AZN|BAM|BBD|BDT|BHD|BIF|BMD|BND|BOB|BOV|BRL|BSD|BTN|BWP|BYN|BZD|CAD|CDF|CHE|CHF|CHW|CLF|CLP|CNY|COP|COU|CRC|CUP|CVE|CZK|DJF|DKK|DOP|DZD|EGP|ERN|ETB|EUR|FJD|FKP|GBP|GEL|GHS|GIP|GMD|GNF|GTQ|GYD|HKD|HNL|HTG|HUF|IDR|ILS|INR|IQD|IRR|ISK|JMD|JOD|JPY|KES|KGS|KHR|KMF|KPW|KRW|KWD|KYD|KZT|LAK|LBP|LKR|LRD|LSL|LYD|MAD|MDL|MGA|MKD|MMK|MNT|MOP|MRU|MUR|MVR|MWK|MXN|MXV|MYR|MZN|NAD|NGN|NIO|NOK|NPR|NZD|OMR|PAB|PEN|PGK|PHP|PKR|PLN|PYG|QAR|RON|RSD|RUB|RWF|SAR|SBD|SCR|SDG|SEK|SGD|SHP|SLE|SOS|SRD|SSP|STN|SVC|SYP|SZL|THB|TJS|TMT|TND|TOP|TRY|TTD|TWD|TZS|UAH|UGX|USD|USN|UYI|UYU|UYW|UZS|VED|VES|VND|VUV|WST|XAD|XAF|XAG|XAU|XBA|XBB|XBC|XBD|XCD|XCG|XDR|XOF|XPD|XPF|XPT|XSU|XTS|XUA|XXX|YER|ZAR|ZMW|ZWG)$/;\n// iban electronic format: 2-letter country, check digits 02-98 (the only values `98 - remainder` can produce), 11-30 bban characters\nexport const iban = /^[A-Z]{2}(?!00|01|99)\\d{2}[A-Z0-9]{11,30}$/;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\n/** Anchors a pattern source. The interpolation lives here rather than at the call site because\n * esbuild will not drop a `@__PURE__` call whose own argument interpolates a variable, but it\n * will drop `anchor(dateSource)`. Keeping it inline pinned `date` into every bundle. */\nfunction anchor(source) {\n    return new RegExp(`^${source}$`);\n}\nexport const date = /*@__PURE__*/ anchor(dateSource);\nfunction timeSource(args) {\n    const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n    const regex = typeof args.precision === \"number\"\n        ? args.precision === -1\n            ? `${hhmm}`\n            : args.precision === 0\n                ? `${hhmm}:[0-5]\\\\d`\n                : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n        : args.seconds\n            ? `${hhmm}:[0-5]\\\\d(?:\\\\.\\\\d+)?`\n            : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n    return regex;\n}\nexport function time(args) {\n    return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n    const opts = [\"Z\"];\n    // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n    if (args.offset)\n        opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n    // RFC 3339 mandates seconds wherever the time carries a `Z` or an offset, so only the unqualified form `local` adds may omit them\n    const qualified = `${timeSource({ precision: args.precision, seconds: true })}(?:${opts.join(\"|\")})`;\n    const timeRegex = args.local ? `${qualified}|${timeSource({ precision: args.precision })}` : qualified;\n    return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\n// the unbounded form of `string()` as a literal, so every plain string shares one instance instead of building its own\nexport const anyString = /^[\\s\\S]{0,}$/;\nexport const string = (params) => {\n    const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n    return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n    return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n    return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n", "// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n    var _a;\n    inst._zod ?? (inst._zod = {});\n    inst._zod.def = def;\n    (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\n/** Default `when` for size-based checks: run only on non-nullish values with a `size`. */\nconst _whenHasSize = (payload) => {\n    const val = payload.value;\n    return !util.nullish(val) && val.size !== undefined;\n};\n/** Default `when` for length-based checks: run only on non-nullish values with a `length`. */\nconst _whenHasLength = (payload) => {\n    const val = payload.value;\n    return !util.nullish(val) && val.length !== undefined;\n};\nconst numericOriginMap = {\n    number: \"number\",\n    bigint: \"bigint\",\n    object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin: numericOriginMap[typeof payload.value] ?? origin,\n            code: \"too_big\",\n            maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin: numericOriginMap[typeof payload.value] ?? origin,\n            code: \"too_small\",\n            minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (typeof payload.value !== typeof def.value)\n            throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n        const isMultiple = typeof payload.value === \"bigint\"\n            ? // `value % 0n` throws, and nothing is a multiple of zero \u2014 the number branch already fails this way via NaN\n                def.value !== BigInt(0) && payload.value % def.value === BigInt(0)\n            : util.floatSafeRemainder(payload.value, def.value) === 0;\n        if (isMultiple)\n            return;\n        payload.issues.push({\n            origin: typeof payload.value,\n            code: \"not_multiple_of\",\n            divisor: def.value,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    def.format = def.format || \"float64\";\n    const isInt = def.format?.includes(\"int\");\n    const origin = isInt ? \"int\" : \"number\";\n    const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (isInt) {\n            if (!Number.isInteger(input)) {\n                // invalid_format issue\n                // payload.issues.push({\n                //   expected: def.format,\n                //   format: def.format,\n                //   code: \"invalid_format\",\n                //   input,\n                //   inst,\n                // });\n                // invalid_type issue\n                payload.issues.push({\n                    expected: origin,\n                    format: def.format,\n                    code: \"invalid_type\",\n                    continue: false,\n                    input,\n                    inst,\n                });\n                return;\n                // not_multiple_of issue\n                // payload.issues.push({\n                //   code: \"not_multiple_of\",\n                //   origin: \"number\",\n                //   input,\n                //   inst,\n                //   divisor: 1,\n                // });\n            }\n            if (!Number.isSafeInteger(input)) {\n                if (input > 0) {\n                    // too_big\n                    payload.issues.push({\n                        input,\n                        code: \"too_big\",\n                        maximum: Number.MAX_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        inclusive: true,\n                        continue: !def.abort,\n                    });\n                }\n                else {\n                    // too_small\n                    payload.issues.push({\n                        input,\n                        code: \"too_small\",\n                        minimum: Number.MIN_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        inclusive: true,\n                        continue: !def.abort,\n                    });\n                }\n                return;\n            }\n        }\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_small\",\n                minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_small\",\n                minimum: minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = _whenHasSize);\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size <= def.maximum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = _whenHasSize);\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size >= def.minimum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = _whenHasSize);\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size === def.size)\n            return;\n        const tooBig = size > def.size;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = _whenHasLength);\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const units = input.length;\n        // Strings are measured in Unicode code points, not UTF-16 units. A code point is at most two units, so a string that already fits in units fits in code points; only an overflow has to be counted.\n        const length = typeof input === \"string\" && units > def.maximum ? util.codePointLength(input) : units;\n        if (length <= def.maximum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = _whenHasLength);\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const units = input.length;\n        // A code point is one or two UTF-16 units, so fewer units than the floor can never reach it and twice the floor always clears it. Only in between is the exact count in doubt.\n        const length = typeof input === \"string\" && units >= def.minimum && units < def.minimum * 2\n            ? util.codePointLength(input)\n            : units;\n        if (length >= def.minimum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = _whenHasLength);\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const units = input.length;\n        // A code point is one or two UTF-16 units, so outside `[length, length * 2]` units the target is missed either way \u2014 and missed in the same direction in both measures.\n        const length = typeof input === \"string\" && units >= def.length && units <= def.length * 2\n            ? util.codePointLength(input)\n            : units;\n        if (length === def.length)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        const tooBig = length > def.length;\n        payload.issues.push({\n            origin,\n            ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n    var _a, _b;\n    $ZodCheck.init(inst, def);\n    if (def.pattern)\n        (_a = inst._zod).check ?? (_a.check = (payload) => {\n            def.pattern.lastIndex = 0;\n            if (def.pattern.test(payload.value))\n                return;\n            payload.issues.push({\n                origin: \"string\",\n                code: \"invalid_format\",\n                format: def.format,\n                input: payload.value,\n                ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n                inst,\n                continue: !def.abort,\n            });\n        });\n    else\n        (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n    $ZodCheckStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        def.pattern.lastIndex = 0;\n        if (def.pattern.test(payload.value))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"regex\",\n            input: payload.value,\n            pattern: def.pattern.toString(),\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.lowercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.uppercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const escapedRegex = util.escapeRegex(def.includes);\n    // `String.prototype.includes(sub, position)` matches `sub` at `position`\n    // OR LATER, so the pattern must allow at least `position` leading chars\n    // (`{N,}`), not exactly `position` chars (`{N}`).\n    const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position},}${escapedRegex}` : escapedRegex);\n    def.pattern = pattern;\n    inst._zod.check = (payload) => {\n        if (payload.value.includes(def.includes, def.position))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"includes\",\n            includes: def.includes,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.check = (payload) => {\n        if (payload.value.startsWith(def.prefix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"starts_with\",\n            prefix: def.prefix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.check = (payload) => {\n        if (payload.value.endsWith(def.suffix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"ends_with\",\n            suffix: def.suffix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n///////////////////////////////////\n/////    $ZodCheckProperty    /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n    if (result.issues.length) {\n        payload.issues.push(...util.prefixIssues(property, result.issues));\n    }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        const result = def.schema._zod.run({\n            value: payload.value[def.property],\n            issues: [],\n        }, {});\n        if (result instanceof Promise) {\n            return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n        }\n        handleCheckPropertyResult(result, payload, def.property);\n        return;\n    };\n});\nexport const $ZodCheckProperties = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperties\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    util.hide(inst, Symbol.iterator, function* () {\n        yield inst;\n    });\n    // key and schema snapshotted together: reading one live and the other cached lets a later mutation of the caller's shape object pair a stale key with a missing schema\n    let entries;\n    inst._zod.check = (payload) => {\n        // the base schema already typed the value, so only a nullish one is rejected here: the properties read on a primitive too, matching z.property() on a string's length\n        if (payload.value == null) {\n            payload.issues.push({ expected: \"object\", code: \"invalid_type\", input: payload.value, inst });\n            return undefined;\n        }\n        entries ?? (entries = Reflect.ownKeys(def.shape).map((key) => [key, def.shape[key]]));\n        const input = payload.value;\n        let proms;\n        for (const [key, schema] of entries) {\n            const result = schema._zod.run({ value: input[key], issues: [] }, {});\n            if (result instanceof Promise) {\n                proms ?? (proms = []);\n                proms.push(result.then((result) => handleCheckPropertyResult(result, payload, key)));\n            }\n            else {\n                handleCheckPropertyResult(result, payload, key);\n            }\n        }\n        if (proms)\n            return Promise.all(proms).then(() => undefined);\n        return undefined;\n    };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const mimeSet = new Set(def.mime);\n    inst._zod.check = (payload) => {\n        if (mimeSet.has(payload.value.type))\n            return;\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.mime,\n            input: payload.value.type,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        payload.value = def.tx(payload.value);\n    };\n});\n", "export class Doc {\n    constructor(args = [], closed = {}) {\n        this.content = [];\n        this.indent = 0;\n        this.args = args;\n        this.closed = closed;\n    }\n    // the compiler catches a child's throw and keeps writing into this doc, so the indent has to unwind with it\n    indented(fn) {\n        this.indent += 1;\n        try {\n            fn(this);\n        }\n        finally {\n            this.indent -= 1;\n        }\n    }\n    write(arg) {\n        if (typeof arg === \"function\") {\n            arg(this, { execution: \"sync\" });\n            arg(this, { execution: \"async\" });\n            return;\n        }\n        const content = arg;\n        const lines = content.split(\"\\n\").filter((x) => x);\n        const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n        const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n        for (const line of dedented) {\n            this.content.push(line);\n        }\n    }\n    compile() {\n        const F = Function;\n        const content = this?.content ?? [``];\n        const factory = new F(...Object.keys(this.closed), `return function (${this.args.join(\", \")}) {\\n${content.join(\"\\n\")}\\n};`);\n        return factory(...Object.values(this.closed));\n    }\n}\n", "export const version = {\n    major: 4,\n    minor: 6,\n    patch: 7,\n};\n", "import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n    var _a;\n    inst ?? (inst = {});\n    inst._zod.def = def; // set _def property\n    inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n    inst._zod.version = version;\n    const defChecks = inst._zod.def.checks;\n    // if inst is itself a checks.$ZodCheck, run it as a check\n    const checks = inst._zod.traits.has(\"$ZodCheck\")\n        ? [inst, ...(defChecks ?? [])]\n        : defChecks?.length\n            ? [...defChecks]\n            : [];\n    for (const ch of checks) {\n        for (const fn of ch._zod.onattach) {\n            fn(inst);\n        }\n    }\n    if (checks.length === 0) {\n        // deferred initializer inst._zod.parse is not yet defined\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred?.push(() => {\n            inst._zod.run = inst._zod.parse;\n        });\n    }\n    else {\n        const runChecks = (payload, checks, ctx) => {\n            if (payload.memo)\n                return payload;\n            let isAborted = util.aborted(payload);\n            let asyncResult;\n            for (const ch of checks) {\n                if (ch._zod.def.when) {\n                    if (util.explicitlyAborted(payload))\n                        continue;\n                    const shouldRun = ch._zod.def.when(payload);\n                    if (!shouldRun)\n                        continue;\n                }\n                else if (isAborted) {\n                    continue;\n                }\n                const currLen = payload.issues.length;\n                const _ = ch._zod.check(payload);\n                if (_ instanceof Promise && ctx?.async === false) {\n                    throw new core.$ZodAsyncError();\n                }\n                if (asyncResult || _ instanceof Promise) {\n                    asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n                        await _;\n                        const nextLen = payload.issues.length;\n                        if (nextLen === currLen)\n                            return;\n                        util.attachSchema(payload.issues, currLen, inst);\n                        if (!isAborted)\n                            isAborted = util.aborted(payload, currLen);\n                    });\n                }\n                else {\n                    const nextLen = payload.issues.length;\n                    if (nextLen === currLen)\n                        continue;\n                    util.attachSchema(payload.issues, currLen, inst);\n                    if (!isAborted)\n                        isAborted = util.aborted(payload, currLen);\n                }\n            }\n            if (asyncResult) {\n                return asyncResult.then(() => {\n                    return payload;\n                });\n            }\n            return payload;\n        };\n        const handleCanaryResult = (canary, payload, ctx) => {\n            // abort if the canary is aborted\n            if (util.aborted(canary)) {\n                canary.aborted = true;\n                return canary;\n            }\n            // run checks first, then\n            const checkResult = runChecks(payload, checks, ctx);\n            if (checkResult instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n            }\n            return inst._zod.parse(checkResult, ctx);\n        };\n        inst._zod.run = (payload, ctx) => {\n            if (ctx.skipChecks) {\n                return inst._zod.parse(payload, ctx);\n            }\n            if (ctx.direction === \"backward\") {\n                // run canary initial pass (no checks)\n                const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n                if (canary instanceof Promise) {\n                    return canary.then((canary) => {\n                        return handleCanaryResult(canary, payload, ctx);\n                    });\n                }\n                return handleCanaryResult(canary, payload, ctx);\n            }\n            // forward\n            const result = inst._zod.parse(payload, ctx);\n            if (result instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return result.then((result) => runChecks(result, checks, ctx));\n            }\n            return runChecks(result, checks, ctx);\n        };\n    }\n}, {\n    // Wrappers extend this by installing a richer factory over it; reading it eagerly would defeat the laziness.\n    get \"~standard\"() {\n        return util.hide(this, \"~standard\", standardProps(this));\n    },\n    set \"~standard\"(value) {\n        util.own(this, \"~standard\", value);\n    },\n});\n/** The Standard Schema surface for `inst`. Shared so wrappers can extend it without forcing it. */\n// a Standard Schema result only reports issues, so a failure finalizes them straight off the raw payload: no ZodError, and no lazy result to read through\nconst toStandardResult = (r, ctx) => r.issues.length ? { issues: r.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())) } : { value: r.value };\nasync function validateAsync(inst, value) {\n    const ctx = { async: true };\n    return toStandardResult((await inst._zod.run({ value, issues: [] }, ctx)), ctx);\n}\nexport function standardProps(inst) {\n    return {\n        validate: (value) => {\n            const ctx = { async: false };\n            try {\n                const r = inst._zod.run({ value, issues: [] }, ctx);\n                if (!(r instanceof Promise))\n                    return toStandardResult(r, ctx);\n            }\n            catch (_) { }\n            // async function so a synchronously throwing check rejects instead of escaping validate\n            return validateAsync(inst, value);\n        },\n        vendor: \"zod\",\n        version: 1,\n    };\n}\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // a format's own pattern, else unbounded; a template literal derives the check-aware form itself\n    inst._zod.pattern = def.pattern ?? regexes.anyString;\n    inst._zod.parse = (payload, _) => {\n        if (def.coerce)\n            try {\n                payload.value = String(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"string\")\n            return payload;\n        payload.issues.push({\n            expected: \"string\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n    // check initialization must come first\n    checks.$ZodCheckStringFormat.init(inst, def);\n    $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.guid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n    if (def.version) {\n        const versionMap = {\n            v1: 1,\n            v2: 2,\n            v3: 3,\n            v4: 4,\n            v5: 5,\n            v6: 6,\n            v7: 7,\n            v8: 8,\n        };\n        const v = versionMap[def.version];\n        if (v === undefined)\n            throw new Error(`Invalid UUID version: \"${def.version}\"`);\n        def.pattern ?? (def.pattern = regexes.uuid(v));\n    }\n    else\n        def.pattern ?? (def.pattern = regexes.uuid());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.email);\n    $ZodStringFormat.init(inst, def);\n});\n/** The `://` guard rejected the input before the URL constructor saw it. */\nexport const URL_BAD_FORMAT = 1;\n/** The URL parser rejected the input. */\nexport const URL_UNPARSEABLE = 2;\nexport function canParseURL(input) {\n    try {\n        if (typeof URL !== \"undefined\" && typeof URL.canParse === \"function\")\n            return URL.canParse(input);\n        new URL(input);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport function validateURL(trimmed, def) {\n    if (!(\"normalize\" in def) && !(\"hostname\" in def) && !(\"protocol\" in def)) {\n        return canParseURL(trimmed) || URL_UNPARSEABLE;\n    }\n    return parseURLObject(trimmed, def);\n}\n/** Parses a URL while preserving the non-normalizing HTTP guard. */\nexport function parseURLObject(trimmed, def) {\n    // When normalize is off, require :// for http/https URLs. This prevents strings like \"http:example.com\" or \"https:/path\" from being silently accepted\n    if (!def.normalize && def.protocol?.source === regexes.httpProtocol.source && !/^https?:\\/\\//i.test(trimmed)) {\n        return URL_BAD_FORMAT;\n    }\n    try {\n        if (typeof URL !== \"undefined\") {\n            const URLStatic = URL;\n            if (typeof URLStatic.parse === \"function\")\n                return URLStatic.parse(trimmed) ?? URL_UNPARSEABLE;\n        }\n        // @ts-ignore\n        return new URL(trimmed);\n    }\n    catch {\n        return URL_UNPARSEABLE;\n    }\n}\nconst asciiTabOrNewline = /[\\t\\n\\r]/g;\n/** The URL parser deletes every ASCII tab, LF and CR from its input before it parses, so `new URL(\"https://exa\\nmple.com\")` reports on `example.com`. Applying the same deletion to the returned value closes the half of that divergence which can move the host; the parser's other rewrite, stripping C0 controls at the edges, cannot. */\nexport function stripTabAndNewline(value) {\n    return value.replace(asciiTabOrNewline, \"\");\n}\nexport function urlHostnameOk(url, hostname) {\n    hostname.lastIndex = 0;\n    return hostname.test(url.hostname);\n}\nexport function urlProtocolOk(url, protocol) {\n    protocol.lastIndex = 0;\n    return protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol);\n}\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        try {\n            // Trim whitespace from input\n            const trimmed = payload.value.trim();\n            const url = validateURL(trimmed, def);\n            if (url === URL_BAD_FORMAT) {\n                payload.issues.push({\n                    code: \"invalid_format\",\n                    format: \"url\",\n                    note: \"Invalid URL format\",\n                    input: payload.value,\n                    inst,\n                    continue: !def.abort,\n                });\n                return;\n            }\n            if (url === URL_UNPARSEABLE) {\n                payload.issues.push({\n                    code: \"invalid_format\",\n                    format: \"url\",\n                    input: payload.value,\n                    inst,\n                    continue: !def.abort,\n                });\n                return;\n            }\n            if (url === true) {\n                payload.value = stripTabAndNewline(trimmed);\n                return;\n            }\n            if (def.hostname && !urlHostnameOk(url, def.hostname)) {\n                payload.issues.push({\n                    code: \"invalid_format\",\n                    format: \"url\",\n                    note: \"Invalid hostname\",\n                    pattern: def.hostname.source,\n                    input: payload.value,\n                    inst,\n                    continue: !def.abort,\n                });\n            }\n            if (def.protocol && !urlProtocolOk(url, def.protocol)) {\n                payload.issues.push({\n                    code: \"invalid_format\",\n                    format: \"url\",\n                    note: \"Invalid protocol\",\n                    pattern: def.protocol.source,\n                    input: payload.value,\n                    inst,\n                    continue: !def.abort,\n                });\n            }\n            // Set the output value based on normalize flag\n            payload.value = def.normalize ? url.href : stripTabAndNewline(trimmed);\n            return;\n        }\n        catch (_) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"url\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.emoji());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n    if (def.length !== undefined && (!Number.isInteger(def.length) || def.length < 1))\n        throw new Error(`Invalid nanoid length: ${def.length}`);\n    def.pattern ?? (def.pattern = def.length === undefined ? regexes.nanoid : regexes.nanoidOfLength(def.length));\n    $ZodStringFormat.init(inst, def);\n});\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link $ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid2);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ulid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.xid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ksuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.datetime(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.date);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.time(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.duration);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv4);\n    $ZodStringFormat.init(inst, def);\n});\n/** An IPv6 address is written with hex digits, colons and dots, and nothing else. The guard is what makes the check below an IPv6 check: `new URL(\"http://[...]\")` parses an authority, not an address, so `@` and `\\` re-delimit it and `\"::@1\\\\\"` validates against the host `0.0.0.1`. The URL parser also deletes ASCII tab, LF and CR rather than failing, which is how `\"::1\\n\"` validated as `::1`. */\nconst ipv6Alphabet = /^[0-9a-fA-F:.]+$/;\nexport function isValidIPv6(value) {\n    if (!ipv6Alphabet.test(value))\n        return false;\n    return canParseURL(`http://[${value}]`);\n}\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv6);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (!isValidIPv6(payload.value)) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"ipv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv4);\n    $ZodStringFormat.init(inst, def);\n});\nexport function isValidCIDRv6(value) {\n    const parts = value.split(\"/\");\n    if (parts.length !== 2)\n        return false;\n    const [address, prefix] = parts;\n    if (!prefix)\n        return false;\n    const prefixNum = Number(prefix);\n    if (`${prefixNum}` !== prefix)\n        return false;\n    if (prefixNum < 0 || prefixNum > 128)\n        return false;\n    return isValidIPv6(address);\n}\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (!isValidCIDRv6(payload.value)) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"cidrv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64(data) {\n    if (data === \"\")\n        return true;\n    // atob ignores whitespace, so reject it up front.\n    if (/\\s/.test(data))\n        return false;\n    if (data.length % 4 !== 0)\n        return false;\n    try {\n        // @ts-ignore\n        atob(data);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\n// lax on purpose: the quantified regexes.base64 overflows the regex stack on multi-MB input and its leading ^$| alternation leaks through template-literal composition; isValidBase64 enforces length and padding\nexport const base64Charset = /^[0-9a-zA-Z+/]*={0,2}$/;\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n    def.pattern ?? (def.pattern = base64Charset);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidBase64(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodBase64URL   //////////////////////////////\n// lax on purpose: the quantified regexes.base64url overflows the regex stack on multi-MB input; isValidBase64 enforces length on the padded string\nexport const base64urlCharset = /^[A-Za-z0-9_-]*$/;\nexport function isValidBase64URL(data) {\n    if (!base64urlCharset.test(data))\n        return false;\n    const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n    const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n    return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n    def.pattern ?? (def.pattern = base64urlCharset);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidBase64URL(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64url\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.e164);\n    $ZodStringFormat.init(inst, def);\n});\n//////////////////////////////   ZodCreditCard   //////////////////////////////\nconst CC_SANITIZE = /[- ]/g;\n/** Luhn checksum on a digit-only string. Adapted from valibot (MIT). */\nfunction isLuhnAlgo(digits) {\n    let length = digits.length;\n    let bit = 1;\n    let sum = 0;\n    while (length) {\n        const value = digits.charCodeAt(--length) - 48;\n        bit ^= 1;\n        sum += bit ? [0, 2, 4, 6, 8, 1, 3, 5, 7, 9][value] : value;\n    }\n    return sum % 10 === 0;\n}\nexport function isValidCreditCard(input) {\n    if (!regexes.creditCard.test(input))\n        return false;\n    return isLuhnAlgo(input.replace(CC_SANITIZE, \"\"));\n}\nexport const $ZodCreditCard = /*@__PURE__*/ core.$constructor(\"$ZodCreditCard\", (inst, def) => {\n    // Shape only \u2014 the Luhn check below is not expressible as a pattern, so consumers of `pattern` (JSON Schema, template literals) get the length and separator rules alone.\n    def.pattern ?? (def.pattern = regexes.creditCard);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidCreditCard(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"credit_card\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodIBAN   //////////////////////////////\n// iso 7064 mod 97-10 checksum without BigInt\nfunction isIso7064Mod97(iban) {\n    let remainder = 0;\n    const len = iban.length;\n    for (let i = 4; i < len; i++) {\n        const code = iban.charCodeAt(i);\n        remainder = (code >= 65 ? remainder * 100 + (code - 55) : remainder * 10 + (code - 48)) % 97;\n    }\n    for (let i = 0; i < 4; i++) {\n        const code = iban.charCodeAt(i);\n        remainder = (code >= 65 ? remainder * 100 + (code - 55) : remainder * 10 + (code - 48)) % 97;\n    }\n    return remainder === 1;\n}\nexport function isValidIBAN(input) {\n    if (!regexes.iban.test(input))\n        return false;\n    return isIso7064Mod97(input);\n}\nexport const $ZodIBAN = /*@__PURE__*/ core.$constructor(\"$ZodIBAN\", (inst, def) => {\n    // shape only \u2014 checksum is not expressible as a pattern\n    def.pattern ?? (def.pattern = regexes.iban);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidIBAN(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"iban\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodJWT   //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n    try {\n        const tokensParts = token.split(\".\");\n        if (tokensParts.length !== 3)\n            return false;\n        const [header] = tokensParts;\n        if (!header)\n            return false;\n        // @ts-ignore\n        const parsedHeader = JSON.parse(atob(header));\n        if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n            return false;\n        if (!parsedHeader.alg)\n            return false;\n        if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidJWT(payload.value, def.alg))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"jwt\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (def.fn(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: def.format,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.number;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Number(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n            return payload;\n        }\n        const received = typeof input === \"number\"\n            ? Number.isNaN(input)\n                ? \"NaN\"\n                : !Number.isFinite(input)\n                    ? String(input)\n                    : undefined\n            : undefined;\n        payload.issues.push({\n            expected: \"number\",\n            code: \"invalid_type\",\n            input,\n            inst,\n            ...(received ? { received } : {}),\n        });\n        return payload;\n    };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n    checks.$ZodCheckNumberFormat.init(inst, def);\n    $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.boolean;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Boolean(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"boolean\")\n            return payload;\n        payload.issues.push({\n            expected: \"boolean\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.bigint;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = BigInt(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"bigint\")\n            return payload;\n        payload.issues.push({\n            expected: \"bigint\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n    checks.$ZodCheckBigIntFormat.init(inst, def);\n    $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"symbol\")\n            return payload;\n        payload.issues.push({\n            expected: \"symbol\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.undefined;\n    inst._zod.values = new Set([undefined]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"undefined\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.null;\n    inst._zod.values = new Set([null]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input === null)\n            return payload;\n        payload.issues.push({\n            expected: \"null\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.issues.push({\n            expected: \"never\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"void\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce) {\n            try {\n                payload.value = new Date(payload.value);\n            }\n            catch (_err) { }\n        }\n        const input = payload.value;\n        const isDate = input instanceof Date;\n        const isValidDate = isDate && !Number.isNaN(input.getTime());\n        if (isValidDate)\n            return payload;\n        payload.issues.push({\n            expected: \"date\",\n            code: \"invalid_type\",\n            input,\n            ...(isDate ? { received: \"Invalid Date\" } : {}),\n            inst,\n        });\n        return payload;\n    };\n});\n// an oversized container fails its leading size checks before any element is parsed\nfunction capSize(inst, size) {\n    const caps = util.sizeCaps(inst._zod.def.checks);\n    if (!caps.length)\n        return;\n    const cap = Math.min(...caps.map((c) => c[0]));\n    const parse = inst._zod.parse;\n    inst._zod.parse = (payload, ctx) => {\n        const n = size(payload.value);\n        if (n > cap && !ctx?.skipChecks && ctx?.direction !== \"backward\") {\n            for (const [max, ch] of util.sizeCaps(inst._zod.def.checks)) {\n                if (n > max && ch._zod.def.when(payload)) {\n                    const start = payload.issues.length;\n                    ch._zod.check(payload);\n                    // the value is still the raw input, so no later check may read it\n                    payload.issues[start].continue = false;\n                    util.attachSchema(payload.issues, start, inst);\n                    return payload;\n                }\n            }\n        }\n        return parse(payload, ctx);\n    };\n}\nconst arraySize = (input) => (Array.isArray(input) ? input.length : -1);\nconst mapSize = (input) => (input instanceof Map ? input.size : -1);\nconst setSize = (input) => (input instanceof Set ? input.size : -1);\nfunction handleArrayResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const memo = core.globalConfig.memoizer;\n    memo?.attach(inst);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                expected: \"array\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = memo ? memo.alloc(inst, payload, Array(input.length), ctx) : Array(input.length);\n        const proms = [];\n        const abortEarly = ctx?.abortEarly;\n        for (let i = 0; i < input.length; i++) {\n            const item = input[i];\n            const result = def.element._zod.run({\n                value: item,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n            }\n            else {\n                handleArrayResult(result, payload, i);\n                // the element's payload is authoritative here, since handleArrayResult forwards every issue; an object's is not, because it drops a failed absent optional\n                if (abortEarly && result.issues.length !== 0 && util.aborted(result))\n                    break;\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload; //handleArrayResultsAsync(parseResults, final);\n    };\n    capSize(inst, arraySize);\n});\nfunction handlePropertyResult(result, final, key, input, optin, optout) {\n    const isPresent = key in input;\n    const isOptionalOut = optout === \"optional\";\n    // The middle rung means \"absence permitted, nothing supplied in its place\", so an absent key contributes nothing \u2014 whatever the schema made of `undefined` is invented, not substituted. Only `optional` reaches this with a value: `defaulted` substitutes, and a schema that isn't optional-out has to keep the key.\n    if (!isPresent && isOptionalOut && optin === \"optional\") {\n        return;\n    }\n    if (result.issues.length) {\n        // For optional-in/out schemas, ignore errors on absent keys.\n        if (optin !== undefined && isOptionalOut && !isPresent) {\n            return;\n        }\n        final.issues.push(...util.prefixIssues(key, result.issues));\n    }\n    if (!isPresent && optin === undefined) {\n        if (!result.issues.length) {\n            final.issues.push({\n                code: \"invalid_type\",\n                expected: \"nonoptional\",\n                input: undefined,\n                path: [key],\n            });\n        }\n        return;\n    }\n    if (result.value === undefined) {\n        if (isPresent || (optin === \"defaulted\" && !isOptionalOut)) {\n            final.value[key] = undefined;\n        }\n    }\n    else {\n        final.value[key] = result.value;\n    }\n}\n// one shared instance; a fresh [] per schema cost 56 bytes retained\nconst NO_SYMBOL_KEYS = [];\nfunction normalizeDef(def) {\n    const keys = Object.keys(def.shape);\n    const ownSymbols = Object.getOwnPropertySymbols(def.shape);\n    const symbolKeys = ownSymbols.length ? ownSymbols : NO_SYMBOL_KEYS;\n    // aliases `keys` when there are no symbols, so a string-only shape keeps one array\n    const allKeys = symbolKeys.length ? [...keys, ...symbolKeys] : keys;\n    for (const k of allKeys) {\n        if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n            throw new Error(`Invalid element at key \"${String(k)}\": expected a Zod schema`);\n        }\n    }\n    const okeys = util.optionalKeys(def.shape);\n    return {\n        ...def,\n        allKeys,\n        symbolKeys,\n        // string-only: handleCatchall matches it against `for...in`, which never yields a symbol\n        keySet: new Set(keys),\n        numKeys: keys.length,\n        optionalKeys: new Set(okeys),\n    };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst, abortEarly) {\n    const unrecognized = [];\n    const keySet = def.keySet;\n    const _catchall = def.catchall._zod;\n    const t = _catchall.def.type;\n    const optin = _catchall.optin;\n    const optout = _catchall.optout;\n    // starts at 0, not the current length: the shape phase already ran and may have aborted\n    let seen = 0;\n    for (const key in input) {\n        if (abortEarly && payload.issues.length !== seen) {\n            if (util.aborted(payload, seen))\n                break;\n            seen = payload.issues.length;\n        }\n        // Must precede the __proto__ branch: a declared key is not unrecognized, even though the shape loop deliberately strips __proto__ from the parsed output.\n        if (keySet.has(key))\n            continue;\n        // Don't copy an undeclared __proto__ into the result; assignment to a plain {} would replace the result prototype. But in strict mode it is still an unknown key, so report it before skipping.\n        if (key === \"__proto__\") {\n            if (t === \"never\")\n                unrecognized.push(key);\n            continue;\n        }\n        if (t === \"never\") {\n            unrecognized.push(key);\n            continue;\n        }\n        const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n        if (r instanceof Promise) {\n            proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, optin, optout)));\n        }\n        else {\n            handlePropertyResult(r, payload, key, input, optin, optout);\n        }\n    }\n    if (unrecognized.length) {\n        payload.issues.push({\n            code: \"unrecognized_keys\",\n            keys: unrecognized,\n            input,\n            inst,\n            // Describes the shape of the input, not the validity of the parsed value, so it never aborts. The parse still fails; the schema's own checks just get to run first, and an enclosing intersection can reconcile the key against a sibling operand.\n            continue: true,\n        });\n    }\n    if (!proms.length)\n        return payload;\n    return Promise.all(proms).then(() => {\n        return payload;\n    });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodType.init(inst, def);\n    const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n    // a cloned def carries its source's accessor, which knows the shape it answers from; adopting that keeps the clone's keys readable without running it\n    const sh = desc?.get ? desc.get.raw : (def.shape ?? {});\n    if (sh) {\n        // Freezes the shape on first read, so its getters resolve once and every later read sees the same schemas.\n        const get = () => {\n            const newSh = { ...sh };\n            Object.defineProperty(def, \"shape\", { value: newSh });\n            get.raw = newSh;\n            return newSh;\n        };\n        get.raw = sh;\n        Object.defineProperty(def, \"shape\", { get });\n    }\n    const _normalized = util.cached(() => normalizeDef(def));\n    util.defineLazyInternal(inst, \"propValues\", (zod) => {\n        const shape = zod.def.shape;\n        const propValues = {};\n        for (const key in shape) {\n            const field = shape[key]._zod;\n            if (field.values) {\n                if (!Object.prototype.hasOwnProperty.call(propValues, key)) {\n                    util.assignProp(propValues, key, new Set());\n                }\n                for (const v of field.values)\n                    propValues[key].add(v);\n                // An omittable slot reads back as undefined at a discriminator lookup, so it has to claim undefined: two options that can both omit the key are not discriminable on it.\n                if (field.optin !== undefined)\n                    propValues[key].add(undefined);\n            }\n        }\n        return propValues;\n    });\n    const isObject = util.isObject;\n    const catchall = def.catchall;\n    let value;\n    const memo = core.globalConfig.memoizer;\n    memo?.attach(inst);\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = memo ? memo.alloc(inst, payload, {}, ctx) : {};\n        const proms = [];\n        const shape = value.shape;\n        const abortEarly = ctx?.abortEarly;\n        let seen = payload.issues.length;\n        for (const key of value.allKeys) {\n            if (abortEarly && payload.issues.length !== seen) {\n                if (util.aborted(payload, seen))\n                    break;\n                seen = payload.issues.length;\n            }\n            if (key === \"__proto__\")\n                continue;\n            const el = shape[key];\n            const optin = el._zod.optin;\n            const optout = el._zod.optout;\n            const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, optin, optout)));\n            }\n            else {\n                handlePropertyResult(r, payload, key, input, optin, optout);\n            }\n        }\n        if (!catchall) {\n            return proms.length ? Promise.all(proms).then(() => payload) : payload;\n        }\n        return handleCatchall(proms, input, payload, ctx, _normalized.value, inst, abortEarly === true);\n    };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodObject.init(inst, def);\n    const superParse = inst._zod.parse;\n    const _normalized = util.cached(() => normalizeDef(def));\n    const memo = core.globalConfig.memoizer;\n    const generateFastpass = (shape) => {\n        const normalized = _normalized.value;\n        const syms = normalized.symbolKeys;\n        // a symbol has no source literal, so it is read as `syms[i]` off the closed-over scope\n        const doc = new Doc([\"payload\", \"ctx\"], { shape, inst, memo, syms });\n        const parseStr = (k) => `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n        // prefixes in place, like util.prefixIssues. newResult must land before the early return: a catchall runs after this and would otherwise write onto the caller's input\n        const prefixStr = (id, k) => `\n          let ${id}_ab = false;\n          for (let i = 0; i < ${id}.issues.length; i++) {\n            const iss = ${id}.issues[i];\n            iss.path = iss.path ? [${k}, ...iss.path] : [${k}];\n            payload.issues.push(iss);\n            if (iss.continue !== true) ${id}_ab = true;\n          }\n          if (${id}_ab && ctx && ctx.abortEarly) {\n            payload.value = newResult;\n            return payload;\n          }`;\n        doc.write(`const input = payload.value;`);\n        const ids = Object.create(null);\n        let counter = 0;\n        for (const key of normalized.allKeys) {\n            ids[key] = `key_${counter++}`;\n        }\n        // A: preserve key order {\n        doc.write(memo ? `const newResult = memo.alloc(inst, payload, {}, ctx);` : `const newResult = {};`);\n        for (const key of normalized.allKeys) {\n            if (key === \"__proto__\")\n                continue;\n            const id = ids[key];\n            const k = typeof key === \"symbol\" ? `syms[${syms.indexOf(key)}]` : util.esc(key);\n            const isPresent = `${k} in input`;\n            const schema = shape[key];\n            const optin = schema?._zod?.optin;\n            const isOptionalIn = optin !== undefined;\n            const isOptionalOut = schema?._zod?.optout === \"optional\";\n            doc.write(`const ${id} = ${parseStr(k)};`);\n            if (isOptionalIn && isOptionalOut) {\n                // For optional-in/out schemas, ignore errors on absent keys \u2014 and, like the interpreted path, drop the value produced alongside them. The middle rung goes further: it permits absence without supplying anything in its place, so an absent key contributes nothing at all.\n                const assign = optin === \"optional\" ? `${id}_present` : `${id}.value !== undefined || ${id}_present`;\n                doc.write(`\n        const ${id}_present = ${isPresent};\n        if (!${id}.issues.length || ${id}_present) {\n          if (${id}.issues.length) {${prefixStr(id, k)}\n          }\n\n          if (${assign}) {\n            newResult[${k}] = ${id}.value;\n          }\n        }\n\n      `);\n            }\n            else if (!isOptionalIn) {\n                doc.write(`\n        const ${id}_present = ${isPresent};\n        if (${id}.issues.length) {${prefixStr(id, k)}\n        }\n        if (!${id}_present && !${id}.issues.length) {\n          payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: undefined,\n            path: [${k}]\n          });\n          if (ctx && ctx.abortEarly) {\n            payload.value = newResult;\n            return payload;\n          }\n        }\n\n        if (${id}_present) {\n          newResult[${k}] = ${id}.value;\n        }\n\n      `);\n            }\n            else {\n                doc.write(`\n        if (${id}.issues.length) {${prefixStr(id, k)}\n        }\n      `);\n                if (optin === \"defaulted\") {\n                    doc.write(`newResult[${k}] = ${id}.value;`);\n                }\n                else {\n                    doc.write(`\n        if (${id}.value !== undefined || ${isPresent}) {\n          newResult[${k}] = ${id}.value;\n        }\n      `);\n                }\n            }\n        }\n        doc.write(`payload.value = newResult;`);\n        doc.write(`return payload;`);\n        // closing `shape` in is what pays: turbofan specializes the parser against that one shape object, so every `shape[k]._zod.run` folds to a known callee. as a parameter it stays a generic load and measures 13% slower even with the forwarding frame gone\n        return doc.compile();\n    };\n    let fastpass;\n    const isObject = util.isObject;\n    const jit = !core.globalConfig.jitless;\n    const allowsEval = util.allowsEval;\n    const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n            // always synchronous\n            if (!fastpass)\n                fastpass = generateFastpass(def.shape);\n            payload = fastpass(payload, ctx);\n            if (!catchall)\n                return payload;\n            return handleCatchall([], input, payload, ctx, value, inst, ctx?.abortEarly === true);\n        }\n        return superParse(payload, ctx);\n    };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n    for (const result of results) {\n        if (result.issues.length === 0) {\n            final.value = result.value;\n            return final;\n        }\n    }\n    const nonaborted = results.filter((r) => !util.aborted(r));\n    if (nonaborted.length === 1) {\n        final.value = nonaborted[0].value;\n        return nonaborted[0];\n    }\n    final.issues.push({\n        code: \"invalid_union\",\n        input: final.value,\n        inst,\n        errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n    });\n    return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.options.some((o) => o._zod.optin === \"defaulted\")\n        ? \"defaulted\"\n        : zod.def.options.some((o) => o._zod.optin !== undefined)\n            ? \"optional\"\n            : undefined);\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n    util.defineLazyInternal(inst, \"values\", (zod) => {\n        if (zod.def.options.every((o) => o._zod.values)) {\n            return new Set(zod.def.options.flatMap((option) => Array.from(option._zod.values)));\n        }\n        return undefined;\n    });\n    util.defineLazyInternal(inst, \"pattern\", (zod) => {\n        if (zod.def.options.every((o) => o._zod.pattern)) {\n            const patterns = zod.def.options.map((o) => o._zod.pattern);\n            return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n        }\n        return undefined;\n    });\n    const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n    inst._zod.parse = (payload, ctx) => {\n        if (first) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                if (result.issues.length === 0)\n                    return result;\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n    const matches = [];\n    for (let i = 0; i < results.length; i++) {\n        if (results[i].issues.length === 0)\n            matches.push(i);\n    }\n    if (matches.length === 1) {\n        final.value = results[matches[0]].value;\n        return final;\n    }\n    if (matches.length === 0) {\n        // No matches - same as regular union\n        final.issues.push({\n            code: \"invalid_union\",\n            input: final.value,\n            inst,\n            errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        });\n    }\n    else {\n        // Multiple matches - exclusive union failure\n        final.issues.push({\n            code: \"invalid_union\",\n            input: final.value,\n            inst,\n            errors: [],\n            inclusive: false,\n            matches,\n        });\n    }\n    return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n    $ZodUnion.init(inst, def);\n    def.inclusive = false;\n    const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n    inst._zod.parse = (payload, ctx) => {\n        if (first) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleExclusiveUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleExclusiveUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\n/** Returns the option whose discriminator claims `value`, or throws if ambiguous. */\nexport function getDiscriminatedOption(union, value) {\n    const internals = union._zod;\n    let map = internals.bag.optionsMap;\n    if (!map) {\n        map = discriminatorMap(internals.def);\n        internals.bag.optionsMap = map;\n    }\n    const option = map.get(value);\n    if (option === null)\n        throw new Error(`Ambiguous discriminator value \"${String(value)}\"`);\n    return option;\n}\nfunction discriminatorMap(def) {\n    const map = new Map();\n    for (const option of def.options) {\n        const values = option._zod.propValues?.[def.discriminator];\n        if (!values || values.size === 0)\n            throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n        for (const value of values) {\n            if (map.has(value)) {\n                if (value !== undefined)\n                    throw new Error(`Duplicate discriminator value \"${String(value)}\"`);\n                // keep the collision marked so a later member cannot reclaim it\n                map.set(value, null);\n            }\n            else {\n                map.set(value, option);\n            }\n        }\n    }\n    return map;\n}\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n    def.inclusive = false;\n    $ZodUnion.init(inst, def);\n    const _super = inst._zod.parse;\n    util.defineLazyInternal(inst, \"propValues\", (zod) => {\n        const propValues = {};\n        let undefinedCount = 0;\n        for (const option of zod.def.options) {\n            const pv = option._zod.propValues;\n            if (!pv || Object.keys(pv).length === 0)\n                throw new Error(`Invalid discriminated union option at index \"${zod.def.options.indexOf(option)}\"`);\n            if (pv[zod.def.discriminator]?.has(undefined))\n                undefinedCount++;\n            for (const [k, v] of Object.entries(pv)) {\n                if (!Object.prototype.hasOwnProperty.call(propValues, k)) {\n                    util.assignProp(propValues, k, new Set());\n                }\n                for (const val of v) {\n                    propValues[k].add(val);\n                }\n            }\n        }\n        if (!zod.def.unionFallback && undefinedCount > 1)\n            propValues[zod.def.discriminator]?.delete(undefined);\n        return propValues;\n    });\n    // Checked now rather than in the lookup map below, so an option that lacks the discriminator fails at the `discriminatedUnion` call instead of on the first object parsed. Options whose shape cannot be enumerated without resolving it \u2014 pipes and lazies \u2014 are left to the map.\n    def.options.forEach((option, i) => {\n        const propShape = util.rawShape(option._zod.def);\n        if (propShape && !Object.prototype.hasOwnProperty.call(propShape, def.discriminator)) {\n            throw new Error(`Invalid discriminated union option at index \"${i}\"`);\n        }\n    });\n    const disc = util.cached(() => discriminatorMap(def));\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isObject(input)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"object\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const value = input?.[def.discriminator];\n        const opt = disc.value.get(value);\n        // forward metadata cannot choose an encoder for an absent tag\n        if (opt && (value !== undefined || ctx.direction !== \"backward\")) {\n            return opt._zod.run(payload, ctx);\n        }\n        // Fall back to union matching when the fast discriminator path fails:\n        // - explicitly enabled via unionFallback, or\n        // - during backward direction (encode), since codec-based discriminators have different values in forward vs backward directions\n        if (def.unionFallback || ctx.direction === \"backward\") {\n            return _super(payload, ctx);\n        }\n        // no matching discriminator\n        payload.issues.push({\n            code: \"invalid_union\",\n            errors: [],\n            note: \"No matching discriminator\",\n            discriminator: def.discriminator,\n            options: Array.from(disc.value.keys()).filter((value) => disc.value.get(value) !== null),\n            input,\n            path: [def.discriminator],\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n        const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n        const async = left instanceof Promise || right instanceof Promise;\n        if (async) {\n            return Promise.all([left, right]).then(([left, right]) => {\n                return handleIntersectionResults(payload, left, right);\n            });\n        }\n        return handleIntersectionResults(payload, left, right);\n    };\n});\nexport function mergeValues(a, b) {\n    // const aType = parse.t(a);\n    // const bType = parse.t(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    if (a instanceof Date && b instanceof Date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    if (util.isPlainObject(a) && util.isPlainObject(b)) {\n        const bKeys = Object.keys(b);\n        const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        if (Object.prototype.hasOwnProperty.call(newObj, \"__proto__\"))\n            delete newObj.__proto__;\n        for (const key of sharedKeys) {\n            if (key === \"__proto__\")\n                continue;\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    if (Array.isArray(a) && Array.isArray(b)) {\n        if (a.length !== b.length) {\n            return { valid: false, mergeErrorPath: [] };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n    // Track which side(s) reject each key. A key rejection is reported only when BOTH sides reject it, so a key owned by one branch survives the other's key schema. strictObject reports these as unrecognized_keys; a record with an open key schema reports one invalid_key per key.\n    const unrecKeys = new Map();\n    let unrecIssue;\n    const keyIssues = new Map();\n    const collect = (iss, side) => {\n        let keys;\n        if (iss.code === \"unrecognized_keys\" && !iss.path?.length) {\n            unrecIssue ?? (unrecIssue = iss);\n            keys = iss.keys;\n        }\n        else if (iss.code === \"invalid_key\" && iss.origin === \"record\" && iss.path?.length === 1) {\n            const k = String(iss.path[0]);\n            if (!keyIssues.has(k))\n                keyIssues.set(k, iss);\n            keys = [k];\n        }\n        else {\n            return false;\n        }\n        for (const k of keys) {\n            if (!unrecKeys.has(k))\n                unrecKeys.set(k, {});\n            unrecKeys.get(k)[side] = true;\n        }\n        return true;\n    };\n    for (const iss of left.issues) {\n        if (!collect(iss, \"l\"))\n            result.issues.push(iss);\n    }\n    for (const iss of right.issues) {\n        if (!collect(iss, \"r\"))\n            result.issues.push(iss);\n    }\n    // Report only keys rejected by BOTH sides\n    const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n    if (bothKeys.length) {\n        const aggregated = unrecIssue ? bothKeys.filter((k) => unrecIssue.keys.includes(k)) : [];\n        if (aggregated.length)\n            result.issues.push({ ...unrecIssue, keys: aggregated });\n        for (const k of bothKeys) {\n            if (!aggregated.includes(k) && keyIssues.has(k))\n                result.issues.push(keyIssues.get(k));\n        }\n    }\n    const merged = mergeValues(left.value, right.value);\n    if (!merged.valid) {\n        if (util.aborted(result))\n            return result;\n        throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n    }\n    result.value = merged.data;\n    return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const items = def.items;\n    const memo = core.globalConfig.memoizer;\n    memo?.attach(inst);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"tuple\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        payload.value = memo ? memo.alloc(inst, payload, [], ctx) : [];\n        const proms = [];\n        const optinStart = getTupleOptStart(items, \"optin\");\n        const optoutStart = getTupleOptStart(items, \"optout\");\n        if (!def.rest) {\n            if (input.length < optinStart) {\n                payload.issues.push({\n                    code: \"too_small\",\n                    minimum: optinStart,\n                    inclusive: true,\n                    input,\n                    inst,\n                    origin: \"array\",\n                });\n                return payload;\n            }\n            if (input.length > items.length) {\n                payload.issues.push({\n                    code: \"too_big\",\n                    maximum: items.length,\n                    inclusive: true,\n                    input,\n                    inst,\n                    origin: \"array\",\n                });\n            }\n        }\n        // Run every item in parallel, collecting results into an indexed array. The post-processing in `handleTupleResults` walks them in order so it can decide whether an absent optional-output error can truncate the tail or must be reported to preserve required output.\n        const itemResults = new Array(items.length);\n        // only tracked when there is a rest loop to skip\n        const abortEarly = def.rest ? ctx?.abortEarly : undefined;\n        let itemAborted = false;\n        for (let i = 0; i < items.length; i++) {\n            const r = items[i]._zod.run({ value: input[i], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((rr) => {\n                    itemResults[i] = rr;\n                }));\n            }\n            else {\n                itemResults[i] = r;\n                if (abortEarly && !itemAborted && r.issues.length)\n                    itemAborted = util.aborted(r);\n            }\n        }\n        // sound because rest is non-empty exactly when every fixed index is present, the one case handleTupleResults cannot discard an item's issues\n        if (def.rest && !itemAborted) {\n            let i = items.length - 1;\n            const rest = input.slice(items.length);\n            let seen = payload.issues.length;\n            for (const el of rest) {\n                if (abortEarly && payload.issues.length !== seen) {\n                    if (util.aborted(payload, seen))\n                        break;\n                    seen = payload.issues.length;\n                }\n                i++;\n                const result = def.rest._zod.run({ value: el, issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((r) => handleTupleResult(r, payload, i)));\n                }\n                else {\n                    handleTupleResult(result, payload, i);\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => handleTupleResults(itemResults, payload, items, input, optoutStart));\n        }\n        return handleTupleResults(itemResults, payload, items, input, optoutStart);\n    };\n});\nfunction getTupleOptStart(items, key) {\n    for (let i = items.length - 1; i >= 0; i--) {\n        // optin is a three-rung ladder so any rung above `undefined` permits an absent slot; optout stays two-valued.\n        const omittable = key === \"optin\" ? items[i]._zod.optin !== undefined : items[i]._zod.optout === \"optional\";\n        if (!omittable)\n            return i + 1;\n    }\n    return 0;\n}\nfunction handleTupleResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nfunction handleTupleResults(itemResults, final, items, input, optoutStart) {\n    // Walk results in order. Mirror $ZodObject's swallow-on-absent-optional rule, but only after `optoutStart`: the first index where the output tuple tail can be absent.\n    for (let i = 0; i < items.length; i++) {\n        const r = itemResults[i];\n        const isPresent = i < input.length;\n        // The array analog of `handlePropertyResult`'s absent-key early return: the middle rung permits absence without supplying anything in its place, so the tail truncates here instead of materializing whatever the item made of `undefined`.\n        if (!isPresent && i >= optoutStart && items[i]._zod.optin === \"optional\") {\n            final.value.length = i;\n            break;\n        }\n        if (r.issues.length) {\n            if (!isPresent && i >= optoutStart) {\n                final.value.length = i;\n                break;\n            }\n            final.issues.push(...util.prefixIssues(i, r.issues));\n        }\n        final.value[i] = r.value;\n    }\n    // Drop trailing slots that produced `undefined` for absent input\n    // (the array analog of an absent optional key on an object). The\n    // `i >= input.length` floor is critical: an explicit `undefined`\n    // *inside* the input must be preserved even when the schema is\n    // optional-out (e.g. `z.string().or(z.undefined())` accepting an\n    // explicit undefined value).\n    for (let i = final.value.length - 1; i >= input.length; i--) {\n        if (items[i]._zod.optout === \"optional\" && final.value[i] === undefined) {\n            final.value.length = i;\n        }\n        else {\n            break;\n        }\n    }\n    return final;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const memo = core.globalConfig.memoizer;\n    memo?.attach(inst);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isPlainObject(input)) {\n            payload.issues.push({\n                expected: \"record\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        // no guard in either loop below: a record's invalid_key aborts but an enclosing intersection can reconcile it, so a stopped loop hides keys the sibling does not own and the intersection then rejects nothing\n        const proms = [];\n        const values = def.keyType._zod.values;\n        if (values && !def.partial) {\n            payload.value = memo ? memo.alloc(inst, payload, {}, ctx) : {};\n            const recordKeys = new Set();\n            for (const key of values) {\n                if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n                    recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n                    // A declared __proto__ is stripped but is not an unrecognized key.\n                    if (key === \"__proto__\")\n                        continue;\n                    const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                    if (keyResult instanceof Promise) {\n                        throw new Error(\"Async schemas not supported in object keys currently\");\n                    }\n                    if (keyResult.issues.length) {\n                        payload.issues.push({\n                            code: \"invalid_key\",\n                            origin: \"record\",\n                            issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                            input: key,\n                            path: [key],\n                            inst,\n                        });\n                        continue;\n                    }\n                    const outKey = keyResult.value;\n                    if (outKey === \"__proto__\")\n                        continue;\n                    const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                    if (result instanceof Promise) {\n                        proms.push(result.then((result) => {\n                            if (result.issues.length) {\n                                payload.issues.push(...util.prefixIssues(key, result.issues));\n                            }\n                            payload.value[outKey] = result.value;\n                        }));\n                    }\n                    else {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[outKey] = result.value;\n                    }\n                }\n            }\n            let unrecognized;\n            for (const key in input) {\n                if (!recordKeys.has(key)) {\n                    if (def.mode === \"loose\") {\n                        // skip __proto__ so it can't replace the result prototype via the assignment setter on the plain {} we build into\n                        if (key === \"__proto__\")\n                            continue;\n                        payload.value[key] = input[key];\n                    }\n                    else {\n                        unrecognized = unrecognized ?? [];\n                        unrecognized.push(key);\n                    }\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                    continue: true,\n                });\n            }\n        }\n        else {\n            payload.value = memo ? memo.alloc(inst, payload, {}, ctx) : {};\n            // An enumerable key schema declares which keys the record owns, so a key outside the set is unrecognized. A non-enumerable one (regex, refine) is a constraint every key must satisfy, so a failing key is invalid. Only the former is reconcilable against the other side of an intersection.\n            let unrecognized;\n            // Reflect.ownKeys for Symbol-key support; filter non-enumerable to match z.object()\n            for (const key of Reflect.ownKeys(input)) {\n                if (key === \"__proto__\")\n                    continue;\n                if (!Object.prototype.propertyIsEnumerable.call(input, key))\n                    continue;\n                let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                if (keyResult instanceof Promise) {\n                    throw new Error(\"Async schemas not supported in object keys currently\");\n                }\n                // Numeric string fallback: if key is a numeric string and failed, retry with Number(key). This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n                const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n                if (checkNumericKey) {\n                    const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n                    if (retryResult instanceof Promise) {\n                        throw new Error(\"Async schemas not supported in object keys currently\");\n                    }\n                    if (retryResult.issues.length === 0) {\n                        keyResult = retryResult;\n                    }\n                }\n                if (keyResult.issues.length) {\n                    if (def.mode === \"loose\") {\n                        // Pass through unchanged\n                        payload.value[key] = input[key];\n                    }\n                    else if (values) {\n                        unrecognized = unrecognized ?? [];\n                        unrecognized.push(key);\n                    }\n                    else {\n                        // Default \"strict\" behavior: error on invalid key\n                        payload.issues.push({\n                            code: \"invalid_key\",\n                            origin: \"record\",\n                            issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                            input: key,\n                            path: [key],\n                            inst,\n                        });\n                    }\n                    continue;\n                }\n                // the guard above tests the raw input key, but the key schema can normalize an ordinary key into __proto__; re-check the key we actually write under\n                const outKey = keyResult.value;\n                if (outKey === \"__proto__\")\n                    continue;\n                const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[outKey] = result.value;\n                    }));\n                }\n                else {\n                    if (result.issues.length) {\n                        payload.issues.push(...util.prefixIssues(key, result.issues));\n                    }\n                    payload.value[outKey] = result.value;\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                    continue: true,\n                });\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload;\n    };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const memo = core.globalConfig.memoizer;\n    memo?.attach(inst);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Map)) {\n            payload.issues.push({\n                expected: \"map\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = memo ? memo.alloc(inst, payload, new Map(), ctx) : new Map();\n        const abortEarly = ctx?.abortEarly;\n        let seen = payload.issues.length;\n        for (const [key, value] of input) {\n            if (abortEarly && payload.issues.length !== seen) {\n                if (util.aborted(payload, seen))\n                    break;\n                seen = payload.issues.length;\n            }\n            const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n            const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n            if (keyResult instanceof Promise || valueResult instanceof Promise) {\n                proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n                    handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n                }));\n            }\n            else {\n                handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n    capSize(inst, mapSize);\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n    if (keyResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, keyResult.issues));\n        }\n        else {\n            final.issues.push({\n                code: \"invalid_key\",\n                origin: \"map\",\n                input,\n                inst,\n                issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    if (valueResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, valueResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_element\",\n                input,\n                inst,\n                key: key,\n                issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const memo = core.globalConfig.memoizer;\n    memo?.attach(inst);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Set)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"set\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = memo ? memo.alloc(inst, payload, new Set(), ctx) : new Set();\n        const abortEarly = ctx?.abortEarly;\n        let seen = payload.issues.length;\n        for (const item of input) {\n            if (abortEarly && payload.issues.length !== seen) {\n                if (util.aborted(payload, seen))\n                    break;\n                seen = payload.issues.length;\n            }\n            const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleSetResult(result, payload)));\n            }\n            else\n                handleSetResult(result, payload);\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n    capSize(inst, setSize);\n});\nfunction handleSetResult(result, final) {\n    if (result.issues.length) {\n        final.issues.push(...result.issues);\n    }\n    final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const values = util.getEnumValues(def.entries);\n    const valuesSet = new Set(values);\n    inst._zod.values = valuesSet;\n    util.defineLazyInternal(inst, \"pattern\", (zod) => {\n        const patternValues = util.getEnumValues(zod.def.entries).filter((k) => util.propertyKeyTypes.has(typeof k));\n        // unmatchable fallback, RE2-safe: an empty alternation would compile to /^()$/, which matches \"\"\n        return new RegExp(patternValues.length ? `^(${patternValues.map((o) => util.escapeRegex(o.toString())).join(\"|\")})$` : \"^[^\\\\s\\\\S]$\");\n    });\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (valuesSet.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const values = new Set(def.values);\n    inst._zod.values = values;\n    util.defineLazyInternal(inst, \"pattern\", (zod) => {\n        const vals = zod.def.values;\n        // unmatchable fallback, RE2-safe: an empty alternation would compile to /^()$/, which matches \"\"\n        return new RegExp(vals.length\n            ? `^(${vals\n                .map((o) => typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o))\n                .join(\"|\")})$`\n            : \"^[^\\\\s\\\\S]$\");\n    });\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        // @ts-ignore\n        if (input instanceof File)\n            return payload;\n        payload.issues.push({\n            expected: \"file\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    core.globalConfig.memoizer?.guard(inst);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        const _out = def.transform(payload.value, payload);\n        if (ctx.async) {\n            const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        if (_out instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        payload.value = _out;\n        return payload;\n    };\n});\nfunction handleOptionalResult(payload, result) {\n    // A substituting schema that still failed has no usable answer; yield undefined. Its issues are simply dropped: it ran on a payload of its own, so there is no shared array to truncate and nothing of the caller's to lose with it.\n    payload.value = result.issues.length ? undefined : result.value;\n    return payload;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // .optional() propagates absence rather than substituting for it, so a defaulted inner keeps its rung.\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType._zod.optin === \"defaulted\" ? \"defaulted\" : \"optional\");\n    inst._zod.optout = \"optional\";\n    util.defineLazyInternal(inst, \"values\", (zod) => {\n        const values = zod.def.innerType._zod.values;\n        return values ? new Set([...values, undefined]) : undefined;\n    });\n    util.defineLazyInternal(inst, \"pattern\", (zod) => {\n        const pattern = zod.def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (payload.value === undefined) {\n            // Only the top rung substitutes a value for absence; everything else leaves it intact, which is what .optional() means.\n            if (def.innerType._zod.optin !== \"defaulted\")\n                return payload;\n            // Its own payload, for the same reason $ZodCatch gets one: a pipe forwards an unrecognized key through the caller's issues array, and this must not read that as the substituting schema failing and drop it.\n            const result = def.innerType._zod.run({ value: payload.value, issues: [] }, ctx);\n            if (result instanceof Promise)\n                return result.then((result) => handleOptionalResult(payload, result));\n            return handleOptionalResult(payload, result);\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n    // Call parent init - inherits optin/optout = \"optional\"\n    $ZodOptional.init(inst, def);\n    // Override values/pattern to NOT add undefined\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n    util.defineLazyInternal(inst, \"pattern\", (zod) => zod.def.innerType._zod.pattern);\n    // Override parse to just delegate (no undefined handling)\n    inst._zod.parse = (payload, ctx) => {\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType._zod.optin);\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.innerType._zod.optout);\n    util.defineLazyInternal(inst, \"pattern\", (zod) => {\n        const pattern = zod.def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n    });\n    util.defineLazyInternal(inst, \"values\", (zod) => {\n        return zod.def.innerType._zod.values ? new Set([...zod.def.innerType._zod.values, null]) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        // Forward direction (decode): allow null to pass through\n        if (payload.value === null)\n            return payload;\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // inst._zod.qin = \"true\";\n    inst._zod.optin = \"defaulted\";\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply defaults for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n            /**\n             * $ZodDefault returns the default value immediately in forward direction.\n             * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe.   */\n            return payload;\n        }\n        // Forward direction: continue with default handling\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleDefaultResult(result, def));\n        }\n        return handleDefaultResult(result, def);\n    };\n});\nfunction handleDefaultResult(payload, def) {\n    if (payload.value === undefined) {\n        payload.value = def.defaultValue;\n    }\n    return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"defaulted\";\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply prefault for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"values\", (zod) => {\n        const v = zod.def.innerType._zod.values;\n        return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleNonOptionalResult(result, inst));\n        }\n        return handleNonOptionalResult(result, inst);\n    };\n});\nfunction handleNonOptionalResult(payload, inst) {\n    if (!payload.issues.length && payload.value === undefined) {\n        payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: payload.value,\n            inst,\n        });\n    }\n    return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(\"ZodSuccess\");\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.issues.length === 0;\n                return payload;\n            });\n        }\n        payload.value = result.issues.length === 0;\n        return payload;\n    };\n});\nfunction handleCatchResult(payload, result, def, ctx) {\n    if (!result.issues.length) {\n        payload.value = result.value;\n        // The value carries up, so the flag describing it has to carry with it: a back-edge into a node still being parsed must not be frozen by an enclosing readonly, and its checks belong to the node itself. Guarded so the ordinary case adds no own property.\n        if (result.memo)\n            payload.memo = true;\n        return payload;\n    }\n    // Spread the inner's own payload, not ours: `value` has to stay the input the catch was handed, and the inner ran on a payload of its own so its issues are already private to this call.\n    payload.value = def.catchValue({\n        ...result,\n        value: payload.value,\n        error: {\n            issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n        },\n        input: payload.value,\n    });\n    return payload;\n}\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType._zod.optin === \"defaulted\" ? \"defaulted\" : \"optional\");\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.innerType._zod.optout);\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply catch logic\n        const result = def.innerType._zod.run({ value: payload.value, issues: [] }, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleCatchResult(payload, result, def, ctx));\n        }\n        return handleCatchResult(payload, result, def, ctx);\n    };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"nan\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.in._zod.values);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.in._zod.optin);\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.out._zod.optout);\n    util.defineLazyInternal(inst, \"propValues\", (zod) => zod.def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handlePipeResult(right, def.in, ctx));\n            }\n            return handlePipeResult(right, def.in, ctx);\n        }\n        const left = def.in._zod.run(payload, ctx);\n        if (left instanceof Promise) {\n            return left.then((left) => handlePipeResult(left, def.out, ctx));\n        }\n        return handlePipeResult(left, def.out, ctx);\n    };\n});\nfunction handlePipeResult(left, next, ctx) {\n    // Any issue stops the pipe, so a failing refinement never feeds its transform. An unrecognized key is the exception: it describes the input's extra properties, not the value being piped, and an enclosing intersection may yet reconcile it.\n    if (left.issues.some((iss) => iss.code !== \"unrecognized_keys\")) {\n        // prevent further checks\n        left.aborted = true;\n        return left;\n    }\n    return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.in._zod.values);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.in._zod.optin);\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.out._zod.optout);\n    util.defineLazyInternal(inst, \"propValues\", (zod) => zod.def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        const direction = ctx.direction || \"forward\";\n        if (direction === \"forward\") {\n            const left = def.in._zod.run(payload, ctx);\n            if (left instanceof Promise) {\n                return left.then((left) => handleCodecAResult(left, def, ctx));\n            }\n            return handleCodecAResult(left, def, ctx);\n        }\n        else {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handleCodecAResult(right, def, ctx));\n            }\n            return handleCodecAResult(right, def, ctx);\n        }\n    };\n});\nfunction handleCodecAResult(result, def, ctx) {\n    if (result.issues.length) {\n        // prevent further checks\n        result.aborted = true;\n        return result;\n    }\n    const direction = ctx.direction || \"forward\";\n    if (direction === \"forward\") {\n        const transformed = def.transform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.out, ctx);\n    }\n    else {\n        const transformed = def.reverseTransform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.in, ctx);\n    }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n    // Check if transform added any issues\n    if (left.issues.length) {\n        left.aborted = true;\n        return left;\n    }\n    return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodPreprocess = /*@__PURE__*/ core.$constructor(\"$ZodPreprocess\", (inst, def) => {\n    $ZodPipe.init(inst, def);\n});\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazyInternal(inst, \"propValues\", (zod) => zod.def.innerType._zod.propValues);\n    util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType?._zod?.optin);\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.innerType?._zod?.optout);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then(handleReadonlyResult);\n        }\n        return handleReadonlyResult(result);\n    };\n});\nfunction handleReadonlyResult(payload) {\n    // A repeat visit hands back a node that is still being built; freezing it here would make the rest of its keys fail to assign.\n    if (!payload.memo)\n        payload.value = Object.freeze(payload.value);\n    return payload;\n}\n// a leaf's pattern source with its own checks folded in: the last pattern-carrying check wins, else length bounds narrow the catch-all, else an integer format narrows the number form. the fold lives here instead of on `_zod.pattern` so a bundle without template literals never pays for it\nfunction leafPattern(schema) {\n    const def = schema._zod.def;\n    let pattern = def.pattern;\n    let isInt = !!def.format?.includes(\"int\");\n    let minimum;\n    let maximum;\n    for (const ch of def.checks ?? []) {\n        const d = ch._zod.def;\n        if (d.pattern)\n            pattern = d.pattern;\n        isInt || (isInt = !!d.format?.includes(\"int\"));\n        const lo = d.minimum ?? d.length;\n        const hi = d.maximum ?? d.length;\n        if (lo !== undefined && (minimum === undefined || lo > minimum))\n            minimum = lo;\n        if (hi !== undefined && (maximum === undefined || hi < maximum))\n            maximum = hi;\n    }\n    if (pattern)\n        return pattern.source;\n    // an empty range matches nothing at runtime, and `{8,5}` is not a legal quantifier\n    if (minimum !== undefined && maximum !== undefined && minimum > maximum)\n        return \"(?!)\";\n    if (minimum !== undefined || maximum !== undefined)\n        return regexes.string({ minimum, maximum }).source;\n    const own = schema._zod.pattern;\n    return (isInt && own === regexes.number ? regexes.integer : own)?.source;\n}\n// a part's pattern source. a wrapper's pattern embeds its inner pattern's source verbatim, so the folded form is substituted in place without knowing the wrapper's own composition; a union's options are joined the way the union builds its own pattern\nfunction partPattern(schema) {\n    const def = schema._zod.def;\n    const own = schema._zod.pattern?.source;\n    // lazy resolves its inner on the internals, not the def\n    const inner = def.innerType ?? schema._zod.innerType;\n    if (inner) {\n        const before = inner._zod.pattern?.source;\n        const after = partPattern(inner);\n        if (own && before && after && after !== before) {\n            return own.replace(util.cleanRegex(before), () => util.cleanRegex(after));\n        }\n        return own;\n    }\n    if (def.options) {\n        const sources = def.options.map(partPattern);\n        if (sources.every(Boolean))\n            return `^(${sources.map((s) => util.cleanRegex(s)).join(\"|\")})$`;\n    }\n    return leafPattern(schema);\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const regexParts = [];\n    for (const part of def.parts) {\n        if (typeof part === \"object\" && part !== null) {\n            // is Zod schema\n            const source = partPattern(part);\n            if (!source) {\n                throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n            }\n            regexParts.push(util.cleanRegex(source));\n        }\n        else if (part === null || util.primitiveTypes.has(typeof part)) {\n            regexParts.push(util.escapeRegex(`${part}`));\n        }\n        else {\n            throw new Error(`Invalid template literal part: ${part}`);\n        }\n    }\n    inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"string\") {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"string\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        inst._zod.pattern.lastIndex = 0;\n        if (!inst._zod.pattern.test(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                code: \"invalid_format\",\n                format: def.format ?? \"template_literal\",\n                pattern: inst._zod.pattern.source,\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // Defined, not assigned: the classic prototype exposes `_def` as a getter with no setter.\n    Object.defineProperty(inst, \"_def\", { value: def });\n    inst._zod.def = def;\n    inst.implement = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implement() must be called with a function\");\n        }\n        // Defined inline so the closure stays anonymous: binding it to a `const` first names it, which costs 256 bytes per implemented function.\n        return Object.defineProperty(function (...args) {\n            const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n            const result = Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return parse(inst._def.output, result);\n            }\n            return result;\n        }, \"_zod\", { value: inst._zod, enumerable: false });\n    };\n    inst.implementAsync = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implementAsync() must be called with a function\");\n        }\n        return Object.defineProperty(async function (...args) {\n            const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n            const result = await Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return await parseAsync(inst._def.output, result);\n            }\n            return result;\n        }, \"_zod\", { value: inst._zod, enumerable: false });\n    };\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"function\") {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"function\",\n                input: payload.value,\n                inst,\n            });\n            return payload;\n        }\n        // Check if output is a promise type to determine if we should use async implementation\n        const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n        if (hasPromiseOutput) {\n            payload.value = inst.implementAsync(payload.value);\n        }\n        else {\n            payload.value = inst.implement(payload.value);\n        }\n        return payload;\n    };\n    inst.input = (...args) => {\n        const F = inst.constructor;\n        if (Array.isArray(args[0])) {\n            return new F({\n                type: \"function\",\n                input: new $ZodTuple({\n                    type: \"tuple\",\n                    items: args[0],\n                    rest: args[1],\n                }),\n                output: inst._def.output,\n            });\n        }\n        return new F({\n            type: \"function\",\n            input: args[0],\n            output: inst._def.output,\n        });\n    };\n    inst.output = (output) => {\n        const F = inst.constructor;\n        return new F({\n            type: \"function\",\n            input: inst._def.input,\n            output,\n        });\n    };\n    return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n    };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // Cache the resolved inner type on the shared `def` so all clones of this lazy (e.g. via `.describe()`/`.meta()`) share the same inner instance, preserving identity for cycle detection on recursive schemas.\n    util.defineLazy(inst._zod, \"innerType\", () => {\n        const d = def;\n        if (!d._cachedInner)\n            d._cachedInner = def.getter();\n        return d._cachedInner;\n    });\n    util.defineLazyInternal(inst, \"pattern\", (zod) => zod.innerType?._zod?.pattern);\n    util.defineLazyInternal(inst, \"propValues\", (zod) => zod.innerType?._zod?.propValues);\n    util.defineLazyInternal(inst, \"optin\", (zod) => zod.innerType?._zod?.optin ?? undefined);\n    util.defineLazyInternal(inst, \"optout\", (zod) => zod.innerType?._zod?.optout ?? undefined);\n    inst._zod.parse = (payload, ctx) => {\n        const inner = inst._zod.innerType;\n        return inner._zod.run(payload, ctx);\n    };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n    checks.$ZodCheck.init(inst, def);\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _) => {\n        return payload;\n    };\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const r = def.fn(input);\n        if (r instanceof Promise) {\n            return r.then((r) => handleRefineResult(r, payload, input, inst));\n        }\n        handleRefineResult(r, payload, input, inst);\n        return;\n    };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n    if (!result) {\n        const _iss = {\n            code: \"custom\",\n            input,\n            inst, // incorporates params.error into issue reporting\n            path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n            continue: !inst._zod.def.abort,\n            // params: inst._zod.def.params,\n        };\n        if (inst._zod.def.params)\n            _iss.params = inst._zod.def.params;\n        payload.issues.push(util.issue(_iss));\n    }\n}\n", "import * as util from \"./util.js\";\nexport class $ZodCyclicError extends Error {\n    constructor() {\n        super(`Cannot parse a reference cycle that closes through a transform`);\n        this.name = \"ZodCyclicError\";\n    }\n}\n/** Keyed off the context object every schema in one parse call already shares. */\nconst STATE = \"~memo\";\nconst NO_ISSUES = [];\n// a value a cycle can close through\nfunction isRef(value) {\n    return value !== null && typeof value === \"object\";\n}\n// Receivers prefix paths in place, so the cache and every hand-out need their own copies.\nfunction cloneIssues(issues) {\n    return issues.map((iss) => (iss.path ? { ...iss, path: iss.path.slice() } : { ...iss }));\n}\nconst recursive = /*@__PURE__*/ new WeakMap();\n/** What the walk established, in order of certainty: ordered so the strongest answer among children wins. */\nconst NONE = 0;\nconst ASSUMED = 1;\nconst PROVEN = 2;\n/** Whether this schema's subtree contains a cycle, so one parse can re-enter it. */\nfunction isRecursive(inst, stack, resolve) {\n    const cached = recursive.get(inst);\n    if (cached !== undefined)\n        return cached ? PROVEN : NONE;\n    // Relative to the walk in progress, so not cached.\n    if (stack.has(inst))\n        return PROVEN;\n    stack.add(inst);\n    let result = NONE;\n    const check = (child) => {\n        if (result !== PROVEN && child?._zod) {\n            const answer = isRecursive(child, stack, resolve);\n            if (answer > result)\n                result = answer;\n        }\n    };\n    // `Reflect.ownKeys` rather than `Object.keys`, so a cycle through a declared symbol key is still seen\n    const shape = (sh, spread) => {\n        let answer = NONE;\n        for (const key of Reflect.ownKeys(sh)) {\n            const desc = Object.getOwnPropertyDescriptor(sh, key);\n            // an object resolves its shape by spread, so a key it does not enumerate is never parsed; `z.properties` reads every own key and so keeps them all\n            if (spread && !desc.enumerable)\n                continue;\n            // resolving runs user code, and a factory mints a fresh subtree per read, so an edge the walk can't follow counts as a cycle\n            const child = desc.get ? ASSUMED : desc.value?._zod ? isRecursive(desc.value, stack, resolve) : NONE;\n            if (child > answer)\n                answer = child;\n        }\n        return answer;\n    };\n    const merge = (answer) => {\n        if (answer > result)\n            result = answer;\n    };\n    const def = inst._zod.def;\n    const kind = def.type;\n    switch (kind) {\n        case \"object\": {\n            const raw = util.rawShape(def);\n            // a def with no raw shape answers `shape` from an accessor of its own, and running that can mint a whole fresh subtree\n            merge(raw ? shape(raw, true) : ASSUMED);\n            check(def.catchall);\n            break;\n        }\n        case \"array\":\n            check(def.element);\n            break;\n        case \"tuple\":\n            for (const el of def.items)\n                check(el);\n            check(def.rest);\n            break;\n        case \"record\":\n        case \"map\":\n            check(def.keyType);\n            check(def.valueType);\n            break;\n        case \"set\":\n            check(def.valueType);\n            break;\n        case \"union\":\n            for (const el of def.options)\n                check(el);\n            break;\n        case \"intersection\":\n            check(def.left);\n            check(def.right);\n            break;\n        case \"optional\":\n        case \"nullable\":\n        case \"default\":\n        case \"prefault\":\n        case \"catch\":\n        case \"readonly\":\n        case \"nonoptional\":\n        case \"promise\":\n        case \"success\":\n            check(def.innerType);\n            break;\n        case \"pipe\":\n            check(def.in);\n            check(def.out);\n            break;\n        case \"function\":\n            check(def.input);\n            check(def.output);\n            break;\n        // `$ZodLazy` caches its inner on the def, so a resolved edge is followed exactly\n        case \"lazy\": {\n            const inner = def._cachedInner ?? (resolve ? inst._zod.innerType : undefined);\n            // walked with resolution off: one hop sees past the deferral, and a lazy that yields only another unresolved lazy is generative, so it stops there\n            merge(inner ? isRecursive(inner, stack, false) : ASSUMED);\n            break;\n        }\n        // a leaf by choice: `parts` are regex fragments, not data positions\n        case \"template_literal\":\n        // leaves\n        case \"string\":\n        case \"number\":\n        case \"int\":\n        case \"boolean\":\n        case \"bigint\":\n        case \"symbol\":\n        case \"undefined\":\n        case \"null\":\n        case \"void\":\n        case \"never\":\n        case \"any\":\n        case \"unknown\":\n        case \"date\":\n        case \"nan\":\n        case \"enum\":\n        case \"literal\":\n        case \"file\":\n        case \"transform\":\n        case \"custom\":\n            break;\n        default: {\n            // a new built-in kind becomes a compile error here\n            kind;\n            // a user-defined kind can still hold children, and only its author knows where, so fall back to scanning the def \u2014 skipping accessors, since reading one can run user code\n            for (const key in def) {\n                const desc = Object.getOwnPropertyDescriptor(def, key);\n                if (!desc || desc.get)\n                    continue;\n                const value = desc.value;\n                if (!value || typeof value !== \"object\")\n                    continue;\n                if (value._zod)\n                    check(value);\n                else if (Array.isArray(value))\n                    for (const el of value)\n                        check(el);\n            }\n        }\n    }\n    stack.delete(inst);\n    return settle(inst, result);\n}\n/** An assumed answer must not outlive the resolution that settles it, so only a certain one is cached. */\nfunction settle(inst, answer) {\n    if (answer !== ASSUMED)\n        recursive.set(inst, answer === PROVEN);\n    return answer;\n}\n/**\n * Whether one parse can re-enter this schema, i.e. its subtree contains a cycle.\n * Exported for `z.compile`, which refuses to compile such a schema: cycle\n * breaking is driven from here off state keyed on the parse context, and a\n * generated fast path has no context to key on.\n */\nexport function isRecursiveSchema(inst) {\n    // z.compile never parses, so nothing would ever resolve a lazy for it; it runs once and already treats a throw here as recursive\n    return isRecursive(inst, new Set(), true) !== NONE;\n}\nfunction bucketFor(state, inst) {\n    let bucket = state.buckets.get(inst);\n    if (!bucket) {\n        bucket = new WeakMap();\n        state.buckets.set(inst, bucket);\n    }\n    return bucket;\n}\n// Set immediately before delegating to core and cleared immediately after, so `alloc` registers only for a visit this module is driving.\nlet handoff;\n// Allocated but unfinished entries. `alloc` and the matching pop both happen in the synchronous part of a parse, so they nest even when children are async, and one stack serves every schema.\nconst open = [];\nconst memo = {\n    alloc(_inst, payload, empty) {\n        const bucket = handoff;\n        if (!bucket)\n            return empty;\n        handoff = undefined;\n        const entry = { value: empty, issues: null };\n        bucket.set(payload.value, entry);\n        open.push(entry);\n        return empty;\n    },\n    guard(inst) {\n        var _a;\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred.push(() => {\n            const base = inst._zod.parse;\n            const wrapped = (payload, ctx) => {\n                // The value is a placeholder a back-edge is still waiting on, so the cycle closes through this transform. Its output can't exist in time to bind.\n                if (ctx.direction !== \"backward\" && isBackEdge(ctx, payload.value))\n                    throw new $ZodCyclicError();\n                return base(payload, ctx);\n            };\n            inst._zod.parse = wrapped;\n            if (inst._zod.run === base)\n                inst._zod.run = wrapped;\n        });\n    },\n    attach(inst) {\n        var _a;\n        let isRecursiveInst;\n        let rechecked = false;\n        // a recursive schema is re-entered many times per parse and its bucket never changes\n        let lastCtx;\n        let lastBucket;\n        // Wraps `parse` in a deferred so it sees the container's final parse. Core's own deferred copies `parse` into `run` when there are no checks, and it ran first, so `run` is patched to match; with checks, `run` reads `parse` dynamically.\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred.push(() => {\n            const base = inst._zod.parse;\n            const wrapped = (payload, ctx) => {\n                if (isRecursiveInst === undefined) {\n                    const walked = isRecursive(inst, new Set(), false);\n                    if (walked === NONE) {\n                        // Nothing here can ever fire, so take it back out.\n                        inst._zod.parse = base;\n                        if (inst._zod.run === wrapped)\n                            inst._zod.run = base;\n                        return base(payload, ctx);\n                    }\n                    // this parse resolves the deferred edges on its own path, so ask once more before latching\n                    if (walked === PROVEN || rechecked)\n                        isRecursiveInst = true;\n                    else\n                        rechecked = true;\n                }\n                const input = payload.value;\n                if (!isRef(input))\n                    return base(payload, ctx);\n                let state = ctx[STATE];\n                if (!state) {\n                    state = { buckets: new WeakMap(), backEdges: undefined };\n                    ctx[STATE] = state;\n                }\n                let bucket;\n                if (lastCtx === ctx) {\n                    bucket = lastBucket;\n                }\n                else {\n                    bucket = bucketFor(state, inst);\n                    lastCtx = ctx;\n                    lastBucket = bucket;\n                }\n                const hit = bucket.get(input);\n                if (hit) {\n                    payload.value = hit.value;\n                    if (hit.issues) {\n                        if (hit.issues.length)\n                            payload.issues.push(...cloneIssues(hit.issues));\n                    }\n                    else {\n                        // Still being parsed: its own checks cover it, so skip them here.\n                        payload.memo = true;\n                        state.backEdges ?? (state.backEdges = new WeakSet());\n                        state.backEdges.add(hit.value);\n                    }\n                    return payload;\n                }\n                handoff = bucket;\n                const depth = open.length;\n                const result = base(payload, ctx);\n                handoff = undefined;\n                // A container that rejected its input outright allocated nothing.\n                const entry = open.length > depth ? open.pop() : undefined;\n                // Both paths written out so the sync one allocates no closure. It runs once per node, and capturing here cost more than everything else combined.\n                if (result instanceof Promise) {\n                    return result.then((r) => {\n                        if (entry)\n                            entry.issues = r.issues.length ? cloneIssues(r.issues) : NO_ISSUES;\n                        return r;\n                    });\n                }\n                if (entry)\n                    entry.issues = result.issues.length ? cloneIssues(result.issues) : NO_ISSUES;\n                return result;\n            };\n            inst._zod.parse = wrapped;\n            if (inst._zod.run === base)\n                inst._zod.run = wrapped;\n        });\n    },\n};\n/** The memoizer that gives containers cycle support. `zod` installs it by default; `zod/mini` opts in with `config({ memoizer: memoizer() })`. */\nexport function memoizer() {\n    return memo;\n}\n/** Whether this value is a node a back-edge resolved to before it finished. */\nexport function isBackEdge(ctx, value) {\n    const backEdges = ctx[STATE]?.backEdges;\n    return backEdges !== undefined && isRef(value) && backEdges.has(value);\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"characters\", verb: \"to have\" },\n        file: { unit: \"bytes\", verb: \"to have\" },\n        array: { unit: \"items\", verb: \"to have\" },\n        set: { unit: \"items\", verb: \"to have\" },\n        map: { unit: \"entries\", verb: \"to have\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"email address\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datetime\",\n        date: \"ISO date\",\n        time: \"ISO time\",\n        duration: \"ISO duration\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        mac: \"MAC address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded string\",\n        base64url: \"base64url-encoded string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 number\",\n        currency_code: \"currency code\",\n        credit_card: \"credit card number\",\n        iban: \"IBAN\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    // type names: missing keys = do not translate (use raw value via ?? fallback)\n    const TypeDictionary = {\n        // Compatibility: \"nan\" -> \"NaN\" for display\n        nan: \"NaN\",\n        // All other type names omitted - they fall back to raw values via ?? operator\n    };\n    function getTypeName(type, input) {\n        if (type === \"number\" && typeof input === \"number\" && !Number.isFinite(input)) {\n            return String(input);\n        }\n        return TypeDictionary[type] ?? type;\n    }\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = getTypeName(issue.expected);\n                const receivedType = util.parsedType(issue.input);\n                const received = getTypeName(receivedType, issue.input);\n                return `Invalid input: expected ${expected}, received ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Invalid option: expected one of ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.exact ? \"exactly \" : issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Too big: expected ${issue.origin ?? \"value\"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `Too big: expected ${issue.origin ?? \"value\"} to be ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.exact ? \"exactly \" : issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Invalid string: must start with \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Invalid string: must end with \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Invalid string: must include \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Invalid string: must match pattern ${_issue.pattern}`;\n                return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Invalid number: must be a multiple of ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Unrecognized key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Invalid key in ${issue.origin}`;\n            case \"invalid_union\":\n                if (issue.options && Array.isArray(issue.options) && issue.options.length > 0) {\n                    const opts = issue.options.map((o) => `'${o}'`).join(\" | \");\n                    return `Invalid discriminator value. Expected ${opts}`;\n                }\n                if (issue.inclusive === false) {\n                    return \"Invalid input: more than one option matched\";\n                }\n                return \"Invalid input\";\n            case \"invalid_element\":\n                return `Invalid value in ${issue.origin}`;\n            default:\n                return `Invalid input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n", "var _a;\nexport const $output = /*@__PURE__*/ Symbol(\"ZodOutput\");\nexport const $input = /*@__PURE__*/ Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n    constructor() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n    }\n    add(schema, ..._meta) {\n        const meta = _meta[0];\n        this._map.set(schema, meta);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.set(meta.id, schema);\n        }\n        return this;\n    }\n    clear() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n        return this;\n    }\n    remove(schema) {\n        const meta = this._map.get(schema);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.delete(meta.id);\n        }\n        this._map.delete(schema);\n        return this;\n    }\n    get(schema) {\n        // return this._map.get(schema) as any;\n        // inherit metadata\n        const p = schema._zod.parent;\n        if (p) {\n            const pm = { ...(this.get(p) ?? {}) };\n            delete pm.id; // do not inherit id\n            const f = { ...pm, ...this._map.get(schema) };\n            return Object.keys(f).length ? f : undefined;\n        }\n        return this._map.get(schema);\n    }\n    has(schema) {\n        return this._map.has(schema);\n    }\n}\n// registries\nexport function registry() {\n    return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n", "import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\nfunction snapshotChecks(def) {\n    if (def.checks)\n        def.checks = [...def.checks];\n    return def;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n    return new Class(snapshotChecks({ type: \"string\", ...util.normalizeParams(params) }));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n    return new Class(snapshotChecks({ type: \"string\", coerce: true, ...util.normalizeParams(params) }));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"email\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"guid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v4\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v6\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v7\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"emoji\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"nanoid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link _cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid2\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ulid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"xid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ksuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"mac\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"e164\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _creditCard(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"credit_card\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _iban(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"iban\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"jwt\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const TimePrecision = {\n    Any: null,\n    Minute: -1,\n    Second: 0,\n    Millisecond: 3,\n    Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"datetime\",\n        check: \"string_format\",\n        offset: false,\n        local: false,\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"date\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"time\",\n        check: \"string_format\",\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"duration\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n    return new Class(snapshotChecks({ type: \"number\", checks: [], ...util.normalizeParams(params) }));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n    return new Class(snapshotChecks({ type: \"number\", coerce: true, checks: [], ...util.normalizeParams(params) }));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"safeint\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"int32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"uint32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"int64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"uint64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n    return new Class({\n        type: \"symbol\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n    return new Class({\n        type: \"undefined\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n    return new Class({\n        type: \"null\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n    return new Class({\n        type: \"any\",\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n    return new Class({\n        type: \"unknown\",\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n    return new Class({\n        type: \"never\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n    return new Class({\n        type: \"void\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n    return new Class({\n        type: \"date\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n    return new Class({\n        type: \"date\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n    return new Class({\n        type: \"nan\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n    return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n    return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n    return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n    return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n    return new checks.$ZodCheckMultipleOf({\n        check: \"multiple_of\",\n        ...util.normalizeParams(params),\n        value,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n    return new checks.$ZodCheckMaxSize({\n        check: \"max_size\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n    return new checks.$ZodCheckMinSize({\n        check: \"min_size\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n    return new checks.$ZodCheckSizeEquals({\n        check: \"size_equals\",\n        ...util.normalizeParams(params),\n        size,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n    const ch = new checks.$ZodCheckMaxLength({\n        check: \"max_length\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n    return new checks.$ZodCheckMinLength({\n        check: \"min_length\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n    return new checks.$ZodCheckLengthEquals({\n        check: \"length_equals\",\n        ...util.normalizeParams(params),\n        length,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n    return new checks.$ZodCheckRegex({\n        check: \"string_format\",\n        format: \"regex\",\n        ...util.normalizeParams(params),\n        pattern,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n    return new checks.$ZodCheckLowerCase({\n        check: \"string_format\",\n        format: \"lowercase\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n    return new checks.$ZodCheckUpperCase({\n        check: \"string_format\",\n        format: \"uppercase\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n    return new checks.$ZodCheckIncludes({\n        check: \"string_format\",\n        format: \"includes\",\n        ...util.normalizeParams(params),\n        includes,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n    return new checks.$ZodCheckStartsWith({\n        check: \"string_format\",\n        format: \"starts_with\",\n        ...util.normalizeParams(params),\n        prefix,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n    return new checks.$ZodCheckEndsWith({\n        check: \"string_format\",\n        format: \"ends_with\",\n        ...util.normalizeParams(params),\n        suffix,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n    return new checks.$ZodCheckProperty({\n        check: \"property\",\n        property,\n        schema,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _properties(shape, params) {\n    return new checks.$ZodCheckProperties({\n        check: \"properties\",\n        shape,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n    return new checks.$ZodCheckMimeType({\n        check: \"mime_type\",\n        mime: types,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n    return new checks.$ZodCheckOverwrite({\n        check: \"overwrite\",\n        tx,\n    });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n    return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n    return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n    return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n    return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n    return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n    return new Class({\n        type: \"array\",\n        element,\n        // get element() {\n        //   return element;\n        // },\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _xor(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        inclusive: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n    return new Class({\n        type: \"union\",\n        options: options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n    return new Class({\n        type: \"intersection\",\n        left,\n        right,\n    });\n}\n// export function _tuple(\n//   Class: util.SchemaClass<schemas.$ZodTuple>,\n//   items: [],\n//   params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new Class({\n        type: \"tuple\",\n        items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"record\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"map\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n    return new Class({\n        type: \"set\",\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    // if (Array.isArray(values)) {\n    //   for (const value of values) {\n    //     entries[value] = value;\n    //   }\n    // } else {\n    //   Object.assign(entries, values);\n    // }\n    // const entries: util.EnumLike = {};\n    // for (const val of values) {\n    //   entries[val] = val;\n    // }\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n    return new Class({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n    return new Class({\n        type: \"file\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n    return new Class({\n        type: \"transform\",\n        transform: fn,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n    return new Class({\n        type: \"optional\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n    return new Class({\n        type: \"nullable\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n    return new Class({\n        type: \"default\",\n        innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n    return new Class({\n        type: \"nonoptional\",\n        innerType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n    return new Class({\n        type: \"success\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n    return new Class({\n        type: \"catch\",\n        innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : util.constantCatch(catchValue)),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n    return new Class({\n        type: \"pipe\",\n        in: in_,\n        out,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n    return new Class({\n        type: \"readonly\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n    return new Class({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n    return new Class({\n        type: \"lazy\",\n        getter,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n    return new Class({\n        type: \"promise\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n    const norm = util.normalizeParams(_params);\n    norm.abort ?? (norm.abort = true); // default to abort:false\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...norm,\n    });\n    return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...util.normalizeParams(_params),\n    });\n    return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn, params) {\n    const ch = _check((payload) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                if (!(\"input\" in _issue))\n                    _issue.input = payload.value;\n                _issue.inst ?? (_issue.inst = ch);\n                _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        return fn(payload.value, payload);\n    }, params);\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n    const ch = new checks.$ZodCheck({\n        check: \"custom\",\n        ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n    const ch = new checks.$ZodCheck({ check: \"describe\" });\n    ch._zod.onattach = [\n        (inst) => {\n            const existing = registries.globalRegistry.get(inst) ?? {};\n            registries.globalRegistry.add(inst, { ...existing, description });\n        },\n    ];\n    ch._zod.check = () => { }; // no-op check\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n    const ch = new checks.$ZodCheck({ check: \"meta\" });\n    ch._zod.onattach = [\n        (inst) => {\n            const existing = registries.globalRegistry.get(inst) ?? {};\n            registries.globalRegistry.add(inst, { ...existing, ...metadata });\n        },\n    ];\n    ch._zod.check = () => { }; // no-op check\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n    const params = util.normalizeParams(_params);\n    let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n    let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n    if (params.case !== \"sensitive\") {\n        truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n        falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n    }\n    const truthySet = new Set(truthyArray);\n    const falsySet = new Set(falsyArray);\n    const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n    const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n    const _String = Classes.String ?? schemas.$ZodString;\n    const stringSchema = new _String({ type: \"string\", error: params.error });\n    const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n    const codec = new _Codec({\n        type: \"pipe\",\n        in: stringSchema,\n        out: booleanSchema,\n        transform: ((input, payload) => {\n            let data = input;\n            if (params.case !== \"sensitive\")\n                data = data.toLowerCase();\n            if (truthySet.has(data)) {\n                return true;\n            }\n            else if (falsySet.has(data)) {\n                return false;\n            }\n            else {\n                payload.issues.push({\n                    code: \"invalid_value\",\n                    expected: \"stringbool\",\n                    values: [...truthySet, ...falsySet],\n                    input: payload.value,\n                    inst: codec,\n                    continue: false,\n                });\n                return {};\n            }\n        }),\n        reverseTransform: ((input, _payload) => {\n            if (input === true) {\n                return truthyArray[0] || \"true\";\n            }\n            else {\n                return falsyArray[0] || \"false\";\n            }\n        }),\n        error: params.error,\n    });\n    codec._zod.bag.truthy = truthyArray;\n    codec._zod.bag.falsy = falsyArray;\n    codec._zod.bag.case = params.case ?? \"insensitive\";\n    return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n    const params = util.normalizeParams(_params);\n    const def = {\n        check: \"string_format\",\n        type: \"string\",\n        format,\n        fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n        ...params,\n    };\n    if (fnOrRegex instanceof RegExp) {\n        def.pattern = fnOrRegex;\n    }\n    const inst = new Class(def);\n    return inst;\n}\n", "import { globalRegistry } from \"./registries.js\";\nimport { assignProp } from \"./util.js\";\nfunction assignProps(target, ...sources) {\n    for (const source of sources) {\n        for (const key of Reflect.ownKeys(source)) {\n            if (Object.prototype.propertyIsEnumerable.call(source, key)) {\n                assignProp(target, key, source[key]);\n            }\n        }\n    }\n    return target;\n}\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n//   return {\n//     processor: inputs.processor,\n//     metadataRegistry: inputs.metadata ?? globalRegistry,\n//     target: inputs.target ?? \"draft-2020-12\",\n//     unrepresentable: inputs.unrepresentable ?? \"throw\",\n//   };\n// }\nexport function initializeContext(params) {\n    // Normalize target: convert old non-hyphenated versions to hyphenated versions\n    let target = params?.target ?? \"draft-2020-12\";\n    if (target === \"draft-4\")\n        target = \"draft-04\";\n    if (target === \"draft-7\")\n        target = \"draft-07\";\n    return {\n        processors: params.processors ?? {},\n        metadataRegistry: params?.metadata ?? globalRegistry,\n        target,\n        unrepresentable: params?.unrepresentable ?? \"throw\",\n        override: params?.override ?? (() => { }),\n        io: params?.io ?? \"output\",\n        counter: 0,\n        seen: new Map(),\n        sharedDefsExtractedFor: undefined,\n        sharedEmitDoneFor: undefined,\n        cycles: params?.cycles ?? \"ref\",\n        reused: params?.reused ?? \"inline\",\n        intersections: [],\n        deferred: [],\n        external: params?.external ?? undefined,\n    };\n}\n/**\n * Applies the `unrepresentable` setting at a site that has no JSON Schema equivalent. Throws\n * `message` unless the setting (or the handler's return value) says otherwise. Returns `true` if a\n * custom JSON Schema was written into `json`, in which case the caller must not write its own.\n */\nexport function handleUnrepresentable(schema, ctx, json, params, message) {\n    const result = typeof ctx.unrepresentable === \"function\"\n        ? ctx.unrepresentable({ zodSchema: schema, path: params.path, message })\n        : ctx.unrepresentable;\n    if (result === \"any\")\n        return false;\n    if (result === undefined || result === \"throw\")\n        throw new Error(message);\n    Object.assign(json, result);\n    return true;\n}\n// never rename this back to `process`: bundler polyfills inject a top-level `const process` that a lexical declaration of the same name collides with (#6397)\nexport function processSchema(schema, ctx, _params = { path: [], schemaPath: [] }) {\n    var _a;\n    const def = schema._zod.def;\n    // check for schema in seens\n    const seen = ctx.seen.get(schema);\n    if (seen) {\n        seen.count++;\n        // check if cycle\n        const isCycle = _params.schemaPath.includes(schema);\n        if (isCycle) {\n            seen.cycle = _params.path;\n        }\n        return seen.schema;\n    }\n    // initialize\n    const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n    ctx.seen.set(schema, result);\n    ctx.sharedDefsExtractedFor = undefined;\n    ctx.sharedEmitDoneFor = undefined;\n    // custom method overrides default behavior\n    const overrideSchema = schema._zod.toJSONSchema?.();\n    if (overrideSchema) {\n        result.schema = overrideSchema;\n    }\n    else {\n        const params = {\n            ..._params,\n            schemaPath: [..._params.schemaPath, schema],\n            path: _params.path,\n        };\n        if (schema._zod.processJSONSchema) {\n            schema._zod.processJSONSchema(ctx, result.schema, params);\n        }\n        else {\n            const _json = result.schema;\n            const processor = ctx.processors[def.type];\n            if (!processor) {\n                throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n            }\n            processor(schema, ctx, _json, params);\n        }\n        const parent = schema._zod.parent;\n        if (parent) {\n            // Also set ref if processor didn't (for inheritance)\n            if (!result.ref)\n                result.ref = parent;\n            processSchema(parent, ctx, params);\n            ctx.seen.get(parent).isParent = true;\n        }\n    }\n    // metadata\n    const meta = ctx.metadataRegistry.get(schema);\n    if (meta)\n        assignProps(result.schema, meta);\n    if (ctx.io === \"input\" && isTransforming(schema)) {\n        // examples/defaults only apply to output type of pipe\n        delete result.schema.examples;\n        delete result.schema.default;\n    }\n    // set prefault as default\n    if (ctx.io === \"input\" && \"_prefault\" in result.schema)\n        (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n    delete result.schema._prefault;\n    // pulling fresh from ctx.seen in case it was overwritten\n    const _result = ctx.seen.get(schema);\n    return _result.schema;\n}\n/** @deprecated Renamed to `processSchema`. An export alias declares no binding, so it is safe to keep. */\nexport { processSchema as process };\n// Escape a reference token for use in a JSON Pointer fragment (RFC 6901): `~` becomes `~0` and `/` becomes `~1`. The `~` replacement must run first.\nfunction encodeJSONPointerSegment(segment) {\n    return segment.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n    // iterate over seen map;\n    const root = ctx.seen.get(schema);\n    if (!root)\n        throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n    // With `external` set, every registered schema resolves through the external branch of `makeURI`, so the root branch below produces the same ref the external branch would \u2014 this pass is identical whichever schema it is called with, and only needs to run once.\n    if (ctx.external && ctx.sharedDefsExtractedFor === ctx.external)\n        return;\n    // Track ids to detect duplicates across different schemas\n    const idToSchema = new Map();\n    for (const entry of ctx.seen.entries()) {\n        const id = ctx.metadataRegistry.get(entry[0])?.id;\n        if (id) {\n            const existing = idToSchema.get(id);\n            if (existing && existing !== entry[0]) {\n                throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n            }\n            idToSchema.set(id, entry[0]);\n        }\n    }\n    // returns a ref to the schema defId will be empty if the ref points to an external schema (or #)\n    const makeURI = (entry) => {\n        // comparing the seen objects because sometimes multiple schemas map to the same seen object. e.g. lazy\n        // external is configured\n        const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n        if (ctx.external) {\n            const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n            // check if schema is in the external registry\n            const uriGenerator = ctx.external.uri ?? ((id) => id);\n            if (externalId) {\n                return { ref: uriGenerator(externalId) };\n            }\n            // otherwise, add to __shared\n            const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n            entry[1].defId = id; // set defId so it will be reused if needed\n            return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${encodeJSONPointerSegment(id)}` };\n        }\n        const uriPrefix = `#`;\n        const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n        // an id-less root has nowhere to be extracted to, so it stays inline and self-references as `#`\n        if (entry[1] === root && !entry[1].schema.id) {\n            return { ref: uriPrefix };\n        }\n        // self-contained schema\n        const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n        return { defId, ref: defUriPrefix + encodeJSONPointerSegment(defId) };\n    };\n    // stored cached version in `def` property remove all properties, set $ref\n    const extractToDef = (entry) => {\n        // if the schema is already a reference, do not extract it\n        if (entry[1].schema.$ref) {\n            return;\n        }\n        const seen = entry[1];\n        const { ref, defId } = makeURI(entry);\n        seen.def = { ...seen.schema };\n        // defId won't be set if the schema is a reference to an external schema or if the schema is the root schema\n        if (defId)\n            seen.defId = defId;\n        // wipe away all properties except $ref\n        const schema = seen.schema;\n        for (const key in schema) {\n            delete schema[key];\n        }\n        schema.$ref = ref;\n    };\n    // throw on cycles\n    // break cycles\n    if (ctx.cycles === \"throw\") {\n        for (const entry of ctx.seen.entries()) {\n            const seen = entry[1];\n            if (seen.cycle) {\n                throw new Error(\"Cycle detected: \" +\n                    `#/${seen.cycle?.join(\"/\")}/<root>` +\n                    '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n            }\n        }\n    }\n    // extract schemas into $defs\n    for (const entry of ctx.seen.entries()) {\n        const seen = entry[1];\n        // convert root schema to # $ref\n        if (schema === entry[0]) {\n            extractToDef(entry); // this has special handling for the root schema\n            continue;\n        }\n        // extract schemas that are in the external registry\n        if (ctx.external) {\n            const ext = ctx.external.registry.get(entry[0])?.id;\n            if (schema !== entry[0] && ext) {\n                extractToDef(entry);\n                continue;\n            }\n        }\n        // extract schemas with `id` meta\n        const id = ctx.metadataRegistry.get(entry[0])?.id;\n        if (id) {\n            extractToDef(entry);\n            continue;\n        }\n        // break cycles\n        if (seen.cycle) {\n            // any\n            extractToDef(entry);\n            continue;\n        }\n        // extract reused schemas\n        if (seen.count > 1) {\n            if (ctx.reused === \"ref\") {\n                extractToDef(entry);\n            }\n        }\n    }\n    if (ctx.external)\n        ctx.sharedDefsExtractedFor = ctx.external;\n}\n/** Rewrites `anyOf: [{type: \"a\"}, {type: \"b\"}]` to `type: [\"a\", \"b\"]`, which every JSON Schema draft treats as equivalent and most consumers render far better for the nullable case. Only branches that are a bare type assertion qualify \u2014 anything carrying a constraint, `$ref`, `const` or metadata is left alone. Runs after `flattenRef`, so a branch an override decorated or `$defs` extraction turned into a `$ref` is no longer bare and correctly stays in `anyOf`. `oneOf` is excluded: `integer` and `number` overlap, so \"exactly one\" and \"at least one\" are not the same there. OpenAPI 3.0 is excluded: its `type` must be a single string. */\nfunction compactTypeUnion(schema) {\n    const options = schema.anyOf;\n    if (!Array.isArray(options) || options.length === 0 || schema.type !== undefined)\n        return;\n    const types = [];\n    for (const option of options) {\n        if (!option || typeof option !== \"object\")\n            return;\n        // A branch that is itself a compactible union folds into this one \u2014 nested `anyOf` and a flat `type` array say the same thing. Compacting it first also makes the result independent of the order this pass walks the seen map in.\n        compactTypeUnion(option);\n        const keys = Object.keys(option);\n        if (keys.length !== 1 || keys[0] !== \"type\")\n            return;\n        const type = option.type;\n        for (const member of Array.isArray(type) ? type : [type]) {\n            if (typeof member !== \"string\")\n                return;\n            if (!types.includes(member))\n                types.push(member);\n        }\n    }\n    delete schema.anyOf;\n    // A `type` array must be non-empty and unique (metaschema); a single member is spelled as a bare string.\n    schema.type = types.length === 1 ? types[0] : types;\n}\n/** Keywords `foldIntersection` knows how to combine. Anything else \u2014 `$ref`, `patternProperties`,\n * an annotation like `description` \u2014 makes a member unfoldable, so a constraint this does not\n * understand leaves the `allOf` alone instead of being silently dropped or misattributed. */\nconst FOLDABLE_KEYS = new Set([\"type\", \"properties\", \"required\", \"additionalProperties\"]);\nconst UNION_KEYS = [\"oneOf\", \"anyOf\"];\n/** A member's constraint on a key it does not declare itself. A `catchall` states one; `false`, an absent `additionalProperties`, and the empty schema a loose object emits state nothing. */\nfunction undeclaredConstraint(member) {\n    const extra = member.additionalProperties;\n    if (extra === undefined || extra === false || typeof extra !== \"object\" || extra === null)\n        return null;\n    return Object.keys(extra).length ? extra : null;\n}\n/** Combines object members into the single object they describe together, or returns `null` if any of them carries a keyword outside {@link FOLDABLE_KEYS}. */\nfunction foldObjects(members) {\n    const objects = [];\n    for (const member of members) {\n        // A boolean subschema is legal JSON Schema and carries no keywords to fold.\n        if (typeof member !== \"object\" || member.type !== \"object\")\n            return null;\n        for (const key in member) {\n            if (!FOLDABLE_KEYS.has(key))\n                return null;\n        }\n        objects.push(member);\n    }\n    const properties = {};\n    const required = new Set();\n    for (const object of objects) {\n        for (const key in object.properties) {\n            // `in` would report a `__proto__` key as already present via the prototype chain and skip it.\n            if (Object.prototype.hasOwnProperty.call(properties, key))\n                continue;\n            // Every member constrains this key: the ones that declare it say how, and a `catchall` member constrains it too even though it does not name it. The key has to satisfy all of them, which is the same intersection one level down.\n            const parts = [];\n            for (const other of objects) {\n                const part = other.properties?.[key] ?? undeclaredConstraint(other);\n                if (part === null || part === undefined)\n                    continue;\n                if (!parts.some((seen) => JSON.stringify(seen) === JSON.stringify(part)))\n                    parts.push(part);\n            }\n            const merged = parts.length === 1\n                ? parts[0]\n                : (foldObjects(parts) ?? { allOf: parts });\n            assignProp(properties, key, merged);\n        }\n        for (const key of object.required ?? [])\n            required.add(key);\n    }\n    const folded = { type: \"object\", properties };\n    if (required.size)\n        folded.required = [...required];\n    // A key no member declares is rejected only when every member rejects it, so the fold is closed only when every member is. Otherwise it carries whatever the `catchall` members demand of such a key.\n    if (objects.every((object) => object.additionalProperties === false)) {\n        folded.additionalProperties = false;\n    }\n    else {\n        const constraints = [];\n        for (const object of objects) {\n            const constraint = undeclaredConstraint(object);\n            if (constraint && !constraints.some((seen) => JSON.stringify(seen) === JSON.stringify(constraint)))\n                constraints.push(constraint);\n        }\n        if (constraints.length === 1)\n            folded.additionalProperties = constraints[0];\n        else if (constraints.length > 1)\n            folded.additionalProperties = { allOf: constraints };\n    }\n    return folded;\n}\n/** `additionalProperties` in an `allOf` member sees only that member's own `properties`, so two\n * closed object members reject each other's keys and the schema validates nothing. Zod's parser\n * pools the key sets instead \u2014 `handleIntersectionResults` reports a key as unrecognized only when\n * *every* side rejects it \u2014 so the emitted schema has to pool them too, and folding the members\n * into one object is the encoding that says so on every target.\n *\n * This runs from `finalize`, after `extractDefs`, which is what keeps it clear of the `$ref`\n * machinery: a member extracted into `$defs` is already a `$ref` by now and declines to fold, so it\n * keeps its reference and its own closedness rather than being inlined as a stale copy. */\nfunction foldIntersection(json) {\n    const allOf = json.allOf;\n    if (!Array.isArray(allOf) || allOf.length < 2)\n        return;\n    // An `override` runs before this pass and may have written object keywords onto the intersection itself. Those are deliberate, so decline rather than overwrite them.\n    for (const key of FOLDABLE_KEYS)\n        if (key in json)\n            return;\n    // An intersection distributes over a union: `A & (X | Y)` is `(A & X) | (A & Y)`. Only the first union is distributed over; a second one stays among the members every branch folds against, where it fails the object check and declines the whole intersection rather than multiplying out.\n    const unions = allOf.filter((m) => UNION_KEYS.some((k) => Array.isArray(m[k])));\n    let folded = null;\n    if (!unions.length) {\n        folded = foldObjects(allOf);\n    }\n    else {\n        const union = unions[0];\n        const keyword = UNION_KEYS.find((k) => Array.isArray(union[k]));\n        if (Object.keys(union).length !== 1)\n            return;\n        const rest = allOf.filter((m) => m !== union);\n        const branches = union[keyword].map((branch) => foldObjects([...rest, branch]));\n        if (branches.some((b) => !b))\n            return;\n        folded = { [keyword]: branches };\n    }\n    if (!folded)\n        return;\n    delete json.allOf;\n    assignProps(json, folded);\n}\nexport function finalize(ctx, schema) {\n    const root = ctx.seen.get(schema);\n    if (!root)\n        throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n    // flatten refs - inherit properties from parent schemas\n    const flattenRef = (zodSchema) => {\n        const seen = ctx.seen.get(zodSchema);\n        // already processed\n        if (seen.ref === null)\n            return;\n        const schema = seen.def ?? seen.schema;\n        const _cached = { ...schema };\n        const ref = seen.ref;\n        seen.ref = null; // prevent infinite recursion\n        if (ref) {\n            flattenRef(ref);\n            const refSeen = ctx.seen.get(ref);\n            const refSchema = refSeen.schema;\n            // merge referenced schema into current\n            if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n                // older drafts can't combine $ref with other properties\n                schema.allOf = schema.allOf ?? [];\n                schema.allOf.push(refSchema);\n            }\n            else {\n                assignProps(schema, refSchema);\n            }\n            // restore child's own properties (child wins)\n            assignProps(schema, _cached);\n            const isParentRef = zodSchema._zod.parent === ref;\n            // For parent chain, child is a refinement - remove parent-only properties\n            if (isParentRef) {\n                for (const key in schema) {\n                    if (key === \"$ref\" || key === \"allOf\")\n                        continue;\n                    if (!(key in _cached)) {\n                        delete schema[key];\n                    }\n                }\n            }\n            // When ref was extracted to $defs, remove properties that match the definition\n            if (refSchema.$ref && refSeen.def) {\n                for (const key in schema) {\n                    if (key === \"$ref\" || key === \"allOf\")\n                        continue;\n                    if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n                        delete schema[key];\n                    }\n                }\n            }\n        }\n        // If parent was extracted (has $ref), propagate $ref to this schema. This handles cases like: readonly().meta({id}).describe() where processor sets ref to innerType but parent should be referenced\n        const parent = zodSchema._zod.parent;\n        if (parent && parent !== ref) {\n            // Ensure parent is processed first so its def has inherited properties\n            flattenRef(parent);\n            const parentSeen = ctx.seen.get(parent);\n            if (parentSeen?.schema.$ref) {\n                schema.$ref = parentSeen.schema.$ref;\n                // De-duplicate with parent's definition\n                if (parentSeen.def) {\n                    for (const key in schema) {\n                        if (key === \"$ref\" || key === \"allOf\")\n                            continue;\n                        if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n                            delete schema[key];\n                        }\n                    }\n                }\n            }\n        }\n        // execute overrides\n        ctx.override({\n            zodSchema: zodSchema,\n            jsonSchema: schema,\n            path: seen.path ?? [],\n        });\n    };\n    // Flattening walks the whole map and clears each `ref` as it goes, so a second call over the same map is a no-op scan. Skip it outright once it has run for a registry conversion.\n    if (!ctx.external || ctx.sharedEmitDoneFor !== ctx.external) {\n        for (const entry of [...ctx.seen.entries()].reverse()) {\n            flattenRef(entry[0]);\n        }\n        if (ctx.target !== \"openapi-3.0\") {\n            for (const entry of ctx.seen.entries()) {\n                compactTypeUnion(entry[1].def ?? entry[1].schema);\n            }\n        }\n        for (const rewrite of ctx.deferred)\n            rewrite();\n        // After flattening, every member that was extracted is a `$ref`, so the fold sees the final shape. A schema that inherits an intersection \u2014 through `z.lazy`, or any `ref` chain \u2014 holds the same `allOf` array, so fold by array identity to catch every copy.\n        if (ctx.intersections.length) {\n            const carriers = new Map();\n            for (const seen of ctx.seen.values()) {\n                for (const json of [seen.schema, seen.def]) {\n                    const allOf = json?.allOf;\n                    if (!Array.isArray(allOf))\n                        continue;\n                    const existing = carriers.get(allOf);\n                    if (existing)\n                        existing.push(json);\n                    else\n                        carriers.set(allOf, [json]);\n                }\n            }\n            for (const allOf of ctx.intersections) {\n                for (const json of carriers.get(allOf) ?? [])\n                    foldIntersection(json);\n            }\n        }\n    }\n    const result = {};\n    if (ctx.target === \"draft-2020-12\") {\n        result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n    }\n    else if (ctx.target === \"draft-07\") {\n        result.$schema = \"http://json-schema.org/draft-07/schema#\";\n    }\n    else if (ctx.target === \"draft-04\") {\n        result.$schema = \"http://json-schema.org/draft-04/schema#\";\n    }\n    else if (ctx.target === \"openapi-3.0\") {\n        // OpenAPI 3.0 schema objects should not include a $schema property\n    }\n    else {\n        // Arbitrary string values are allowed but won't have a $schema property set\n    }\n    if (ctx.external?.uri) {\n        const id = ctx.external.registry.get(schema)?.id;\n        if (!id)\n            throw new Error(\"Schema is missing an `id` property\");\n        result.$id = ctx.external.uri(id);\n    }\n    // when the root was extracted into $defs, `root.schema` is the `$ref` wrapper and `root.def` is the body that now lives under $defs\n    assignProps(result, root.defId ? root.schema : (root.def ?? root.schema));\n    // The `id` in `.meta()` is a Zod-specific registration tag used to extract schemas into $defs \u2014 it is not user-facing JSON Schema metadata. Strip it from the output body where it would otherwise leak. The id is preserved implicitly via the $defs key (and via $ref paths).\n    const rootMetaId = ctx.metadataRegistry.get(schema)?.id;\n    if (rootMetaId !== undefined && result.id === rootMetaId)\n        delete result.id;\n    // build defs object. With `external`, `defs` is the shared object every schema writes into, so the same entries are reassigned on every call. Without it, `defs` is fresh per call and must be rebuilt.\n    const defs = ctx.external?.defs ?? {};\n    if (!ctx.external || ctx.sharedEmitDoneFor !== ctx.external) {\n        for (const entry of ctx.seen.entries()) {\n            const seen = entry[1];\n            if (seen.def && seen.defId) {\n                if (seen.def.id === seen.defId)\n                    delete seen.def.id;\n                assignProp(defs, seen.defId, seen.def);\n            }\n        }\n    }\n    if (ctx.external)\n        ctx.sharedEmitDoneFor = ctx.external;\n    // set definitions in result\n    if (ctx.external) {\n    }\n    else {\n        if (Object.keys(defs).length > 0) {\n            if (ctx.target === \"draft-2020-12\") {\n                result.$defs = defs;\n            }\n            else {\n                result.definitions = defs;\n            }\n        }\n    }\n    try {\n        // this \"finalizes\" this schema and ensures all cycles are removed each call to finalize() is functionally independent though the seen map is shared\n        const finalized = JSON.parse(JSON.stringify(result));\n        Object.defineProperty(finalized, \"~standard\", {\n            value: {\n                ...schema[\"~standard\"],\n                jsonSchema: {\n                    input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n                    output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n                },\n            },\n            enumerable: false,\n            writable: false,\n        });\n        return finalized;\n    }\n    catch (_err) {\n        throw new Error(\"Error converting schema to JSON.\");\n    }\n}\nfunction isTransforming(_schema, _ctx) {\n    const ctx = _ctx ?? { seen: new Set() };\n    if (ctx.seen.has(_schema))\n        return false;\n    ctx.seen.add(_schema);\n    const def = _schema._zod.def;\n    if (def.type === \"transform\")\n        return true;\n    if (def.type === \"array\")\n        return isTransforming(def.element, ctx);\n    if (def.type === \"set\")\n        return isTransforming(def.valueType, ctx);\n    if (def.type === \"lazy\")\n        return isTransforming(def.getter(), ctx);\n    if (def.type === \"promise\" ||\n        def.type === \"optional\" ||\n        def.type === \"nonoptional\" ||\n        def.type === \"nullable\" ||\n        def.type === \"readonly\" ||\n        def.type === \"default\" ||\n        def.type === \"prefault\" ||\n        def.type === \"catch\") {\n        return isTransforming(def.innerType, ctx);\n    }\n    if (def.type === \"intersection\") {\n        return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n    }\n    if (def.type === \"record\" || def.type === \"map\") {\n        return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n    }\n    if (def.type === \"pipe\") {\n        if (_schema._zod.traits.has(\"$ZodCodec\"))\n            return true;\n        return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n    }\n    if (def.type === \"object\") {\n        for (const key in def.shape) {\n            if (isTransforming(def.shape[key], ctx))\n                return true;\n        }\n        return false;\n    }\n    if (def.type === \"union\") {\n        for (const option of def.options) {\n            if (isTransforming(option, ctx))\n                return true;\n        }\n        return false;\n    }\n    if (def.type === \"tuple\") {\n        for (const item of def.items) {\n            if (isTransforming(item, ctx))\n                return true;\n        }\n        if (def.rest && isTransforming(def.rest, ctx))\n            return true;\n        return false;\n    }\n    return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n    const ctx = initializeContext({ ...params, processors });\n    processSchema(schema, ctx);\n    extractDefs(ctx, schema);\n    return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n    const { libraryOptions, target } = params ?? {};\n    const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n    processSchema(schema, ctx);\n    extractDefs(ctx, schema);\n    return finalize(ctx, schema);\n};\n", "import * as regexes from \"./regexes.js\";\nimport { base64Charset, base64urlCharset } from \"./schemas.js\";\nimport { extractDefs, finalize, handleUnrepresentable, initializeContext, processSchema, } from \"./to-json-schema.js\";\nimport { BIGINT_FORMAT_RANGES, NUMBER_FORMAT_RANGES, assignProp, getEnumValues } from \"./util.js\";\nconst narrowMin = (agg, key, value) => {\n    if (agg[key] === undefined || value > agg[key])\n        agg[key] = value;\n};\nconst narrowMax = (agg, key, value) => {\n    if (agg[key] === undefined || value < agg[key])\n        agg[key] = value;\n};\nconst narrowBoth = (agg, value) => {\n    narrowMin(agg, \"minimum\", value);\n    narrowMax(agg, \"maximum\", value);\n};\nconst addDivisor = (agg, value) => {\n    agg.multipleOf ?? (agg.multipleOf = []);\n    if (!agg.multipleOf.includes(value))\n        agg.multipleOf.push(value);\n};\nconst addPattern = (agg, pattern) => {\n    agg.patterns ?? (agg.patterns = new Set());\n    agg.patterns.add(pattern);\n};\nconst intersectMime = (agg, mime) => {\n    agg.mime = agg.mime ? agg.mime.filter((m) => mime.includes(m)) : [...mime];\n};\n// last-wins, matching the bag's historical write order; the flag keeps an integer format from being lost to a later float one\nconst setFormat = (agg, format) => {\n    agg.format = format;\n    if (format.includes(\"int\"))\n        agg.isInt = true;\n};\nconst minContributor = (agg, def) => narrowMin(agg, \"minimum\", def.minimum);\nconst maxContributor = (agg, def) => narrowMax(agg, \"maximum\", def.maximum);\nconst formatContributor = (ranges) => (agg, def) => {\n    setFormat(agg, def.format);\n    const [minimum, maximum] = ranges[def.format];\n    narrowMin(agg, \"minimum\", minimum);\n    narrowMax(agg, \"maximum\", maximum);\n};\nconst contributors = {\n    greater_than: (agg, def) => narrowMin(agg, def.inclusive ? \"minimum\" : \"exclusiveMinimum\", def.value),\n    less_than: (agg, def) => narrowMax(agg, def.inclusive ? \"maximum\" : \"exclusiveMaximum\", def.value),\n    multiple_of: (agg, def) => addDivisor(agg, def.value),\n    number_format: formatContributor(NUMBER_FORMAT_RANGES),\n    bigint_format: formatContributor(BIGINT_FORMAT_RANGES),\n    min_length: minContributor,\n    max_length: maxContributor,\n    length_equals: (agg, def) => narrowBoth(agg, def.length),\n    min_size: minContributor,\n    max_size: maxContributor,\n    size_equals: (agg, def) => narrowBoth(agg, def.size),\n    string_format: (agg, def) => {\n        setFormat(agg, def.format);\n        if (def.pattern)\n            addPattern(agg, def.pattern);\n        if (def.format === \"base64\" || def.format === \"base64url\")\n            agg.contentEncoding = def.format;\n        if (def.local || def.precision === -1)\n            agg.laxFormat = true;\n    },\n    mime_type: (agg, def) => intersectMime(agg, def.mime),\n};\nexport function aggregateChecks(schema) {\n    const agg = {};\n    const def = schema._zod.def;\n    // a format schema is its own first check, same rule as $ZodType init\n    const list = schema._zod.traits.has(\"$ZodCheck\")\n        ? [schema, ...(def.checks ?? [])]\n        : (def.checks ?? []);\n    for (const ch of list)\n        contributors[ch._zod.def.check]?.(agg, ch._zod.def);\n    // reconcile with the bag so third-party onattach contributions still land; first-party residue is never tighter than the fold, so merging it back is idempotent for one and additive for the other\n    const bag = schema._zod.bag;\n    if (bag.minimum !== undefined)\n        narrowMin(agg, \"minimum\", bag.minimum);\n    if (bag.exclusiveMinimum !== undefined)\n        narrowMin(agg, \"exclusiveMinimum\", bag.exclusiveMinimum);\n    if (bag.maximum !== undefined)\n        narrowMax(agg, \"maximum\", bag.maximum);\n    if (bag.exclusiveMaximum !== undefined)\n        narrowMax(agg, \"exclusiveMaximum\", bag.exclusiveMaximum);\n    if (bag.multipleOf !== undefined)\n        addDivisor(agg, bag.multipleOf);\n    if (bag.format !== undefined) {\n        agg.format ?? (agg.format = bag.format);\n        if (bag.format.includes(\"int\"))\n            agg.isInt = true;\n    }\n    if (bag.mime)\n        intersectMime(agg, bag.mime);\n    for (const pattern of bag.patterns ?? [])\n        addPattern(agg, pattern);\n    return agg;\n}\nconst formatMap = {\n    guid: \"uuid\",\n    url: \"uri\",\n    datetime: \"date-time\",\n    json_string: \"json-string\",\n    regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\n// the runtime patterns are lax so parse paths never overflow the regex stack; the emitted schema swaps in the exact block forms, which zod itself never executes\nconst exactPatterns = new Map([\n    [base64Charset, regexes.base64],\n    [base64urlCharset, regexes.base64url],\n]);\nconst exactPattern = (p) => exactPatterns.get(p) ?? p;\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n    const json = _json;\n    json.type = \"string\";\n    const { minimum, maximum, format, patterns, contentEncoding, laxFormat } = aggregateChecks(schema);\n    if (typeof minimum === \"number\")\n        json.minLength = minimum;\n    if (typeof maximum === \"number\")\n        json.maxLength = maximum;\n    // custom pattern overrides format\n    if (format) {\n        json.format = formatMap[format] ?? format;\n        if (json.format === \"\")\n            delete json.format; // empty format is not valid\n        // `z.iso.time()` is never full-time, and `laxFormat` carries the datetime shapes that also accept what their keyword forbids\n        if (format === \"time\" || laxFormat) {\n            delete json.format;\n        }\n    }\n    if (contentEncoding)\n        json.contentEncoding = contentEncoding;\n    if (patterns && patterns.size > 0) {\n        const patternList = [...patterns].map(exactPattern);\n        if (patternList.length === 1)\n            json.pattern = patternList[0].source;\n        else if (patternList.length > 1) {\n            json.allOf = [\n                ...patternList.map((regex) => ({\n                    ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n                        ? { type: \"string\" }\n                        : {}),\n                    pattern: regex.source,\n                })),\n            ];\n        }\n    }\n};\nexport const numberProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const { minimum, maximum, multipleOf, exclusiveMaximum, exclusiveMinimum, isInt } = aggregateChecks(schema);\n    json.type = isInt ? \"integer\" : \"number\";\n    // when both minimum and exclusiveMinimum exist, pick the more restrictive one\n    const exMin = typeof exclusiveMinimum === \"number\" && exclusiveMinimum >= (minimum ?? Number.NEGATIVE_INFINITY);\n    const exMax = typeof exclusiveMaximum === \"number\" && exclusiveMaximum <= (maximum ?? Number.POSITIVE_INFINITY);\n    const legacy = ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\";\n    if (exMin) {\n        if (legacy) {\n            json.minimum = exclusiveMinimum;\n            json.exclusiveMinimum = true;\n        }\n        else {\n            json.exclusiveMinimum = exclusiveMinimum;\n        }\n    }\n    else if (typeof minimum === \"number\") {\n        json.minimum = minimum;\n    }\n    if (exMax) {\n        if (legacy) {\n            json.maximum = exclusiveMaximum;\n            json.exclusiveMaximum = true;\n        }\n        else {\n            json.exclusiveMaximum = exclusiveMaximum;\n        }\n    }\n    else if (typeof maximum === \"number\") {\n        json.maximum = maximum;\n    }\n    if (multipleOf) {\n        // JSON Schema requires a divisor strictly greater than zero, and a non-finite one does not survive JSON at all. A negative divisor accepts exactly what its absolute value accepts, so it still maps; zero, NaN and Infinity have no keyword form.\n        const divisors = new Set();\n        for (const divisor of multipleOf) {\n            if (Number.isFinite(divisor) && divisor !== 0)\n                divisors.add(Math.abs(divisor));\n            else\n                handleUnrepresentable(schema, ctx, json, params, `A multipleOf divisor of ${divisor} cannot be represented in JSON Schema`);\n        }\n        // chained divisors are a conjunction the keyword cannot carry alone, so extras ride an allOf, same as stacked patterns\n        const [first, ...rest] = divisors;\n        if (first !== undefined)\n            json.multipleOf = first;\n        if (rest.length)\n            json.allOf = [...(json.allOf ?? []), ...rest.map((m) => ({ multipleOf: m }))];\n    }\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n    json.type = \"boolean\";\n};\nexport const bigintProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"BigInt cannot be represented in JSON Schema\");\n};\nexport const symbolProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"Symbols cannot be represented in JSON Schema\");\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n    if (ctx.target === \"openapi-3.0\") {\n        json.type = \"string\";\n        json.nullable = true;\n        json.enum = [null];\n    }\n    else {\n        json.type = \"null\";\n    }\n};\nexport const undefinedProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"Undefined cannot be represented in JSON Schema\");\n};\nexport const voidProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"Void cannot be represented in JSON Schema\");\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n    json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n    // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n    // empty schema accepts anything\n};\nexport const dateProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"Date cannot be represented in JSON Schema\");\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n    const def = schema._zod.def;\n    const values = getEnumValues(def.entries);\n    // an empty enum accepts nothing, same as z.never()\n    if (values.length === 0) {\n        json.not = {};\n        return;\n    }\n    // Number enums can have both string and number values\n    if (values.every((v) => typeof v === \"number\"))\n        json.type = \"number\";\n    if (values.every((v) => typeof v === \"string\"))\n        json.type = \"string\";\n    json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    // a literal with no values accepts nothing, same as z.never()\n    if (def.values.length === 0) {\n        json.not = {};\n        return;\n    }\n    const vals = [];\n    for (const val of def.values) {\n        if (val === undefined) {\n            // a custom schema replaces the whole literal, so there is nothing left to accumulate\n            if (handleUnrepresentable(schema, ctx, json, params, \"Literal `undefined` cannot be represented in JSON Schema\"))\n                return;\n            // otherwise do not add to vals\n        }\n        else if (typeof val === \"bigint\") {\n            if (handleUnrepresentable(schema, ctx, json, params, \"BigInt literals cannot be represented in JSON Schema\"))\n                return;\n            vals.push(Number(val));\n        }\n        else {\n            vals.push(val);\n        }\n    }\n    if (vals.length === 0) {\n        // do nothing (an undefined literal was stripped)\n    }\n    else if (vals.length === 1) {\n        const val = vals[0];\n        json.type = val === null ? \"null\" : typeof val;\n        if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n            json.enum = [val];\n        }\n        else {\n            json.const = val;\n        }\n    }\n    else {\n        if (vals.every((v) => typeof v === \"number\"))\n            json.type = \"number\";\n        if (vals.every((v) => typeof v === \"string\"))\n            json.type = \"string\";\n        if (vals.every((v) => typeof v === \"boolean\"))\n            json.type = \"boolean\";\n        if (vals.every((v) => v === null))\n            json.type = \"null\";\n        json.enum = vals;\n    }\n};\nexport const nanProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"NaN cannot be represented in JSON Schema\");\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n    const _json = json;\n    const pattern = schema._zod.pattern;\n    if (!pattern)\n        throw new Error(\"Pattern not found in template literal\");\n    _json.type = \"string\";\n    _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n    const _json = json;\n    _json.type = \"string\";\n    _json.format = \"binary\";\n    _json.contentEncoding = \"binary\";\n    const { minimum, maximum, mime } = aggregateChecks(schema);\n    if (minimum !== undefined)\n        _json.minLength = minimum;\n    if (maximum !== undefined)\n        _json.maxLength = maximum;\n    if (!mime)\n        return;\n    // an empty intersection means the mime checks share no value, so nothing passes at runtime; `anyOf` must be non-empty, so the false schema is `not: {}`\n    if (mime.length === 0)\n        _json.not = {};\n    else if (mime.length === 1)\n        _json.contentMediaType = mime[0];\n    // only contentMediaType differs, so the shared props stay at the root\n    else\n        _json.anyOf = mime.map((m) => ({ contentMediaType: m }));\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n    json.type = \"boolean\";\n};\nexport const customProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"Custom types cannot be represented in JSON Schema\");\n};\nexport const functionProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"Function types cannot be represented in JSON Schema\");\n};\nexport const transformProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"Transforms cannot be represented in JSON Schema\");\n};\nexport const mapProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"Map cannot be represented in JSON Schema\");\n};\nexport const setProcessor = (schema, ctx, json, params) => {\n    handleUnrepresentable(schema, ctx, json, params, \"Set cannot be represented in JSON Schema\");\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    const { minimum, maximum } = aggregateChecks(schema);\n    if (typeof minimum === \"number\")\n        json.minItems = minimum;\n    if (typeof maximum === \"number\")\n        json.maxItems = maximum;\n    json.type = \"array\";\n    json.items = processSchema(def.element, ctx, {\n        ...params,\n        path: [...params.path, \"items\"],\n    });\n};\n// Transform and catch set `optin = \"optional\"` at runtime so the parser lets them observe an\n// absent key, but their declared input type stays required. An input JSON Schema describes the\n// declared type, so resolve past them to the schema that actually carries the optionality.\n// Used by both `objectProcessor` (for `required`) and `tupleProcessor` (for `minItems`); see\n// wiki/optionality.md, \"The JSON Schema emitter reads the *static* value\".\nfunction inputOptin(schema) {\n    const def = schema._zod.def;\n    if (def.type === \"pipe\" && def.in._zod.traits.has(\"$ZodTransform\")) {\n        return inputOptin(def.out);\n    }\n    if (def.type === \"catch\") {\n        return inputOptin(def.innerType);\n    }\n    return schema._zod.optin;\n}\nexport const objectProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    const shape = def.shape;\n    // dropping it while still emitting `additionalProperties: false` would emit a schema that rejects data this one requires\n    const symbolKeys = Object.getOwnPropertySymbols(shape);\n    if (symbolKeys.length &&\n        handleUnrepresentable(schema, ctx, json, params, \"Symbol keys cannot be represented in JSON Schema\")) {\n        return;\n    }\n    json.type = \"object\";\n    json.properties = {};\n    for (const key in shape) {\n        // assignProp so a __proto__ key becomes an own property instead of hitting the inherited setter on the plain {} we build into\n        assignProp(json.properties, key, processSchema(shape[key], ctx, {\n            ...params,\n            path: [...params.path, \"properties\", key],\n        }));\n    }\n    // required keys\n    const requiredKeys = [];\n    for (const key of Object.keys(shape)) {\n        const field = def.shape[key];\n        if (ctx.io === \"input\" ? inputOptin(field) === undefined : field._zod.optout === undefined) {\n            requiredKeys.push(key);\n        }\n    }\n    if (requiredKeys.length > 0) {\n        json.required = requiredKeys;\n    }\n    // catchall\n    if (def.catchall?._zod.def.type === \"never\") {\n        // strict\n        json.additionalProperties = false;\n    }\n    else if (!def.catchall) {\n        // regular\n        if (ctx.io === \"output\")\n            json.additionalProperties = false;\n    }\n    else if (def.catchall) {\n        json.additionalProperties = processSchema(def.catchall, ctx, {\n            ...params,\n            path: [...params.path, \"additionalProperties\"],\n        });\n    }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches). This includes both z.xor() and discriminated unions\n    const isExclusive = def.inclusive === false;\n    const options = def.options.map((x, i) => processSchema(x, ctx, {\n        ...params,\n        path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n    }));\n    if (isExclusive) {\n        json.oneOf = options;\n    }\n    else {\n        json.anyOf = options;\n    }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    const a = processSchema(def.left, ctx, {\n        ...params,\n        path: [...params.path, \"allOf\", 0],\n    });\n    const b = processSchema(def.right, ctx, {\n        ...params,\n        path: [...params.path, \"allOf\", 1],\n    });\n    const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n    const allOf = [\n        ...(isSimpleIntersection(a) ? a.allOf : [a]),\n        ...(isSimpleIntersection(b) ? b.allOf : [b]),\n    ];\n    json.allOf = allOf;\n    // Recorded innermost first, so a nested intersection has already folded by the time this one is considered. The array is the handle rather than the schema, because a wrapper that inherits this schema shares the same array; `finalize` folds every object holding it. See `foldIntersection`.\n    ctx.intersections.push(allOf);\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"array\";\n    const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n    const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n    const prefixItems = def.items.map((x, i) => processSchema(x, ctx, {\n        ...params,\n        path: [...params.path, prefixPath, i],\n    }));\n    const rest = def.rest\n        ? processSchema(def.rest, ctx, {\n            ...params,\n            path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n        })\n        : null;\n    let minItems = def.items.length;\n    while (minItems > 0) {\n        const item = def.items[minItems - 1];\n        const optional = ctx.io === \"input\" ? inputOptin(item) !== undefined : item._zod.optout === \"optional\";\n        if (!optional)\n            break;\n        minItems--;\n    }\n    const maxItems = def.items.length;\n    const isClosed = !def.rest;\n    if (ctx.target === \"draft-2020-12\") {\n        json.prefixItems = prefixItems;\n        if (isClosed) {\n            json.items = false;\n        }\n        else if (rest) {\n            json.items = rest;\n        }\n        if (minItems > 0)\n            json.minItems = minItems;\n        if (isClosed)\n            json.maxItems = maxItems;\n    }\n    else if (ctx.target === \"openapi-3.0\") {\n        json.items = {\n            anyOf: prefixItems,\n        };\n        if (rest) {\n            json.items.anyOf.push(rest);\n        }\n        if (minItems > 0)\n            json.minItems = minItems;\n        if (isClosed)\n            json.maxItems = maxItems;\n    }\n    else {\n        json.items = prefixItems;\n        if (isClosed) {\n            json.additionalItems = false;\n        }\n        else if (rest) {\n            json.additionalItems = rest;\n        }\n        if (minItems > 0)\n            json.minItems = minItems;\n        if (isClosed)\n            json.maxItems = maxItems;\n    }\n    // explicit user-defined length checks take precedence\n    const { minimum, maximum } = aggregateChecks(schema);\n    if (typeof minimum === \"number\")\n        json.minItems = minimum;\n    if (typeof maximum === \"number\")\n        json.maxItems = maximum;\n};\n/** JSON object keys are always strings, so a numeric record key schema is re-expressed over the\n * numeric-string form the record parser matches. Deferred to `finalize`, after the flatten: a key\n * behind a wrapper only carries its own `type` before then, and a union key only has its branches.\n *\n * A numeric bound cannot apply to a property name, so `minimum` and its siblings are dropped rather\n * than carried over: keeping them beside `type: \"string\"` reproduces the match-nothing schema this\n * exists to fix. A key that carries one therefore emits wider than the record parses \u2014 `z.record(z.number().min(5), V)`\n * accepts `\"3\"` \u2014 which is the deliberate trade, since throwing on it would reject an ordinary schema\n * outright. */\nfunction stringifyKeyNames(bySchema, json, visited) {\n    // an extracted key that rewrites cannot go on sharing its definition \u2014 the string form a key position needs is not the number form every other reference wants \u2014 so it inlines. One that does not rewrite keeps the `$ref`.\n    if (json.$ref) {\n        // a recursive key holds its own reference inside its definition, so a node already on the path is left alone rather than resolved again\n        if (visited.has(json))\n            return json;\n        visited.add(json);\n        const def = bySchema.get(json)?.def;\n        if (!def)\n            return json;\n        const inlined = stringifyKeyNames(bySchema, def, visited);\n        return inlined === def ? json : inlined;\n    }\n    for (const keyword of [\"anyOf\", \"oneOf\"]) {\n        const branches = json[keyword];\n        if (!Array.isArray(branches))\n            continue;\n        const mapped = branches.map((branch) => stringifyKeyNames(bySchema, branch, visited));\n        // rebuilding regardless would detach a key that had nothing to re-express, dropping its `$ref` and leaking the internal `id`\n        if (mapped.some((branch, i) => branch !== branches[i]))\n            json = { ...json, [keyword]: mapped };\n    }\n    // a member that already admits a string leaves the key unconstrained, so the node's own type re-expresses only when every member is numeric\n    const types = Array.isArray(json.type) ? json.type : [json.type];\n    const numericType = !types.includes(\"string\") && types.some((t) => t === \"number\" || t === \"integer\");\n    // a heterogeneous key carries no type at all, so its numeric members are caught here instead\n    const values = json.enum ?? (json.const !== undefined ? [json.const] : undefined);\n    if (!numericType && !values?.some((v) => typeof v === \"number\"))\n        return json;\n    const { minimum, maximum, exclusiveMinimum, exclusiveMaximum, multipleOf, format, id, ...rest } = json;\n    if (rest.enum)\n        rest.enum = rest.enum.map((v) => (typeof v === \"number\" ? String(v) : v));\n    else if (typeof rest.const === \"number\")\n        rest.const = String(rest.const);\n    // a heterogeneous key keeps its absent type: the stringified members already say what a key may be\n    if (!numericType)\n        return rest;\n    rest.type = \"string\";\n    if (!values)\n        rest.pattern = (types.includes(\"number\") ? regexes.number : regexes.integer).source;\n    return rest;\n}\n/** Every record of one conversion, so the carriers are found in a single pass rather than once per record. */\nconst pendingRecords = new WeakMap();\nfunction rewriteKeyNames(ctx) {\n    // an extracted key is resolved by the object `extractToDef` left in its place, so the map is built once rather than searched per reference. `_zod.toJSONSchema` can hand the same object to two schemas, so the first entry carrying a body wins, as a search would have found it.\n    const bySchema = new Map();\n    for (const entry of ctx.seen.values()) {\n        if (entry.def && !bySchema.has(entry.schema))\n            bySchema.set(entry.schema, entry);\n    }\n    const rewrites = new Map();\n    for (const record of pendingRecords.get(ctx) ?? []) {\n        const seen = ctx.seen.get(record);\n        const names = (seen?.def ?? seen?.schema)?.propertyNames;\n        if (!names || names === true || rewrites.has(names))\n            continue;\n        const rewritten = stringifyKeyNames(bySchema, names, new Set());\n        if (rewritten !== names)\n            rewrites.set(names, rewritten);\n    }\n    if (!rewrites.size)\n        return;\n    // the flatten has already copied each record's own properties onto every wrapper by reference, and an extracted body is another such copy, so every carrier holding a rewritten key is updated together\n    for (const entry of ctx.seen.values()) {\n        for (const carrier of [entry.schema, entry.def]) {\n            const rewritten = carrier && rewrites.get(carrier.propertyNames);\n            if (rewritten)\n                carrier.propertyNames = rewritten;\n        }\n    }\n}\nexport const recordProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"object\";\n    // For looseRecord with regex patterns, use patternProperties. This correctly represents \"only validate keys matching the pattern\" semantics and composes well with allOf (intersections)\n    const keyType = def.keyType;\n    const patterns = aggregateChecks(keyType).patterns;\n    if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n        // Use patternProperties for looseRecord with regex patterns\n        const valueSchema = processSchema(def.valueType, ctx, {\n            ...params,\n            path: [...params.path, \"patternProperties\", \"*\"],\n        });\n        json.patternProperties = {};\n        for (const pattern of patterns) {\n            assignProp(json.patternProperties, exactPattern(pattern).source, valueSchema);\n        }\n    }\n    else {\n        // Default behavior: use propertyNames + additionalProperties\n        if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n            json.propertyNames = processSchema(def.keyType, ctx, {\n                ...params,\n                path: [...params.path, \"propertyNames\"],\n            });\n            let pending = pendingRecords.get(ctx);\n            if (!pending) {\n                pending = [];\n                pendingRecords.set(ctx, pending);\n                ctx.deferred.push(() => rewriteKeyNames(ctx));\n            }\n            pending.push(schema);\n        }\n        json.additionalProperties = processSchema(def.valueType, ctx, {\n            ...params,\n            path: [...params.path, \"additionalProperties\"],\n        });\n    }\n    // Add required for keys with discrete values (enum, literal, etc.)\n    const keyValues = keyType._zod.values;\n    // Every key shares one value schema, so an optional-in value makes the whole key set omittable on input. Output keeps them: the exhaustive branch assigns every key, even one whose value came back undefined.\n    const omittableOnInput = ctx.io === \"input\" && inputOptin(def.valueType) !== undefined;\n    if (keyValues && !def.partial && !omittableOnInput) {\n        const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n        if (validKeyValues.length > 0) {\n            json.required = validKeyValues.map(String);\n        }\n    }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    const inner = processSchema(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    if (ctx.target === \"openapi-3.0\") {\n        seen.ref = def.innerType;\n        json.nullable = true;\n    }\n    else {\n        json.anyOf = [inner, { type: \"null\" }];\n    }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    processSchema(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\n/** Round-trips a default value through JSON so the emitted schema is guaranteed to be valid JSON.\n * A BigInt has no reliable encoding, so it goes through `unrepresentable` like any other\n * unrepresentable value. Returns a sentinel when the caller must not write a default of its own. */\nconst UNREPRESENTABLE_DEFAULT = Symbol();\nfunction serializeDefaultValue(value, schema, ctx, json, params) {\n    let unrepresentable = false;\n    const serialized = JSON.stringify(value, (_, val) => {\n        if (typeof val !== \"bigint\")\n            return val;\n        unrepresentable = true;\n        return null;\n    });\n    if (!unrepresentable)\n        return JSON.parse(serialized);\n    handleUnrepresentable(schema, ctx, json, params, \"BigInt defaults cannot be represented in JSON Schema\");\n    return UNREPRESENTABLE_DEFAULT;\n}\nexport const defaultProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    processSchema(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    const value = serializeDefaultValue(def.defaultValue, schema, ctx, json, params);\n    if (value !== UNREPRESENTABLE_DEFAULT)\n        json.default = value;\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    processSchema(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    if (ctx.io !== \"input\")\n        return;\n    const value = serializeDefaultValue(def.defaultValue, schema, ctx, json, params);\n    if (value !== UNREPRESENTABLE_DEFAULT)\n        json._prefault = value;\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    processSchema(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    let catchValue;\n    try {\n        catchValue = def.catchValue(undefined);\n    }\n    catch {\n        handleUnrepresentable(schema, ctx, json, params, \"Dynamic catch values are not supported in JSON Schema\");\n        return;\n    }\n    json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    const inIsTransform = def.in._zod.traits.has(\"$ZodTransform\");\n    const innerType = ctx.io === \"input\" ? (inIsTransform ? def.out : def.in) : def.out;\n    processSchema(innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    processSchema(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    processSchema(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    processSchema(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n    const innerType = schema._zod.innerType;\n    processSchema(innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n    string: stringProcessor,\n    number: numberProcessor,\n    boolean: booleanProcessor,\n    bigint: bigintProcessor,\n    symbol: symbolProcessor,\n    null: nullProcessor,\n    undefined: undefinedProcessor,\n    void: voidProcessor,\n    never: neverProcessor,\n    any: anyProcessor,\n    unknown: unknownProcessor,\n    date: dateProcessor,\n    enum: enumProcessor,\n    literal: literalProcessor,\n    nan: nanProcessor,\n    template_literal: templateLiteralProcessor,\n    file: fileProcessor,\n    success: successProcessor,\n    custom: customProcessor,\n    function: functionProcessor,\n    transform: transformProcessor,\n    map: mapProcessor,\n    set: setProcessor,\n    array: arrayProcessor,\n    object: objectProcessor,\n    union: unionProcessor,\n    intersection: intersectionProcessor,\n    tuple: tupleProcessor,\n    record: recordProcessor,\n    nullable: nullableProcessor,\n    nonoptional: nonoptionalProcessor,\n    default: defaultProcessor,\n    prefault: prefaultProcessor,\n    catch: catchProcessor,\n    pipe: pipeProcessor,\n    readonly: readonlyProcessor,\n    promise: promiseProcessor,\n    optional: optionalProcessor,\n    lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n    if (\"_idmap\" in input) {\n        // Registry case\n        const registry = input;\n        const ctx = initializeContext({ ...params, processors: allProcessors });\n        const defs = {};\n        // First pass: process all schemas to build the seen map\n        for (const entry of registry._idmap.entries()) {\n            const [_, schema] = entry;\n            processSchema(schema, ctx);\n        }\n        const schemas = {};\n        const external = {\n            registry,\n            uri: params?.uri,\n            defs,\n        };\n        // Update the context with external configuration\n        ctx.external = external;\n        // Second pass: emit each schema\n        for (const entry of registry._idmap.entries()) {\n            const [key, schema] = entry;\n            extractDefs(ctx, schema);\n            assignProp(schemas, key, finalize(ctx, schema));\n        }\n        if (Object.keys(defs).length > 0) {\n            const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n            schemas.__shared = {\n                [defsSegment]: defs,\n            };\n        }\n        return { schemas };\n    }\n    // Single schema case\n    const ctx = initializeContext({ ...params, processors: allProcessors });\n    processSchema(input, ctx);\n    extractDefs(ctx, input);\n    return finalize(ctx, input);\n}\n", "import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\n/* Prototypes that already carry the lazy helper methods. Seeded with the\n * intrinsics so that `init` on a foreign object \u2014 it accepts any object \u2014\n * can never install an accessor onto a prototype we do not own. */\nconst _installedErrorProtos = /* @__PURE__ */ new WeakSet([Object.prototype, Error.prototype]);\n/* Helper methods live as non-enumerable lazy getters on the shared\n * prototype instead of own properties on every instance. On first\n * access the getter allocates the per-instance closure and caches it\n * as a non-enumerable own property, so detached usage still works and\n * the allocation only happens for methods actually touched. */\nfunction _lazyMethod(proto, key, make) {\n    Object.defineProperty(proto, key, {\n        configurable: true,\n        enumerable: false,\n        get() {\n            const value = make(this);\n            Object.defineProperty(this, key, { value, configurable: true, writable: true });\n            return value;\n        },\n        set(value) {\n            Object.defineProperty(this, key, { value, configurable: true, writable: true });\n        },\n    });\n}\nconst initializer = (inst, issues) => {\n    $ZodError.init(inst, issues);\n    inst.name = \"ZodError\";\n    const proto = Object.getPrototypeOf(inst);\n    if (_installedErrorProtos.has(proto))\n        return;\n    _installedErrorProtos.add(proto);\n    _lazyMethod(proto, \"format\", (self) => (mapper) => core.formatError(self, mapper));\n    _lazyMethod(proto, \"flatten\", (self) => (mapper) => core.flattenError(self, mapper));\n    _lazyMethod(proto, \"addIssue\", (self) => (issue) => {\n        self.issues.push(issue);\n        self.message = JSON.stringify(self.issues, util.jsonStringifyReplacer, 2);\n    });\n    _lazyMethod(proto, \"addIssues\", (self) => (issues) => {\n        self.issues.push(...issues);\n        self.message = JSON.stringify(self.issues, util.jsonStringifyReplacer, 2);\n    });\n    Object.defineProperty(proto, \"isEmpty\", {\n        configurable: true,\n        enumerable: false,\n        get() {\n            return this.issues.length === 0;\n        },\n    });\n};\nexport const ZodError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer, undefined, {\n    Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n", "import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\nexport { validate, validateAsync } from \"../core/index.js\";\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n", "import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport * as regexes from \"../core/regexes.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport en from \"../locales/en.js\";\nimport * as checks from \"./checks.js\";\nimport * as parse from \"./parse.js\";\n// Register English as the default locale on first ZodType construction. Hooked into the `ZodType` `$constructor` (rather than a top-level `config(en())` in `external.ts`) so bundlers honoring `sideEffects: false` can't tree-shake it out \u2014 see #5953, #5725. An explicit `z.config(z.locales.xx())` call wins regardless of order, since this only sets the default when none is present.\nfunction _ensureDefaultLocale() {\n    if (!core.globalConfig.localeError)\n        core.config(en());\n}\n// the default memoizer is read by the core container init, which runs before `ZodType.init`, so each container calls this first\nfunction _ensureDefaultMemoizer() {\n    if (!core.globalConfig.memoizer)\n        core.config({ memoizer: core.memoizer() });\n}\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n    _ensureDefaultLocale();\n    core.$ZodType.init(inst, def);\n    inst.def = def;\n    inst.type = def.type;\n    return inst;\n}, {\n    check(...chks) {\n        const def = this.def;\n        return this.clone(util.mergeDefs(def, {\n            checks: [\n                ...(def.checks ?? []),\n                ...chks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n            ],\n        }), { parent: true });\n    },\n    with(...chks) {\n        return this.check(...chks);\n    },\n    clone(def, params) {\n        return core.clone(this, def, params);\n    },\n    brand() {\n        return this;\n    },\n    register(reg, meta) {\n        reg.add(this, meta);\n        return this;\n    },\n    refine(check, params) {\n        return this.check(refine(check, params));\n    },\n    superRefine(refinement, params) {\n        return this.check(superRefine(refinement, params));\n    },\n    overwrite(fn) {\n        return this.check(checks.overwrite(fn));\n    },\n    optional() {\n        return optional(this);\n    },\n    exactOptional() {\n        return exactOptional(this);\n    },\n    nullable() {\n        return nullable(this);\n    },\n    nullish() {\n        return optional(nullable(this));\n    },\n    nonoptional(params) {\n        return nonoptional(this, params);\n    },\n    array() {\n        return array(this);\n    },\n    or(arg) {\n        return union([this, arg]);\n    },\n    and(arg) {\n        return intersection(this, arg);\n    },\n    transform(tx) {\n        return pipe(this, transform(tx));\n    },\n    default(d) {\n        return _default(this, d);\n    },\n    prefault(d) {\n        return prefault(this, d);\n    },\n    catch(params) {\n        return _catch(this, params);\n    },\n    pipe(target) {\n        return pipe(this, target);\n    },\n    readonly() {\n        return readonly(this);\n    },\n    describe(description) {\n        const cl = this.clone();\n        core.globalRegistry.add(cl, { description });\n        return cl;\n    },\n    meta(...args) {\n        // overloaded: meta() returns the registered metadata, meta(data) returns a clone with `data` registered. The mapped type picks up the second overload, so we accept variadic any-args and return `any` to satisfy both at runtime.\n        if (args.length === 0)\n            return core.globalRegistry.get(this);\n        const cl = this.clone();\n        core.globalRegistry.add(cl, args[0]);\n        return cl;\n    },\n    isOptional() {\n        return this.safeParse(undefined).success;\n    },\n    isNullable() {\n        return this.safeParse(null).success;\n    },\n    apply(fn, ...args) {\n        return args.length === 0 ? fn(this) : fn(this, ...args);\n    },\n    // Overrides core's `~standard` to add `jsonSchema`. Must stay a prototype entry: redefining it per instance demotes instances to dictionary mode.\n    get \"~standard\"() {\n        return util.hide(this, \"~standard\", {\n            ...core.standardProps(this),\n            jsonSchema: {\n                input: createStandardJSONSchemaMethod(this, \"input\"),\n                output: createStandardJSONSchemaMethod(this, \"output\"),\n            },\n        });\n    },\n    set \"~standard\"(value) {\n        util.own(this, \"~standard\", value);\n    },\n    parse: function _parse(data, params) {\n        return parse.parse(this, data, params, { callee: _parse });\n    },\n    parseAsync: async function _parseAsync(data, params) {\n        return await parse.parseAsync(this, data, params, { callee: _parseAsync });\n    },\n    safeParse(data, params) {\n        return parse.safeParse(this, data, params);\n    },\n    async safeParseAsync(data, params) {\n        return parse.safeParseAsync(this, data, params);\n    },\n    // `spa` is an alias: same function object as `safeParseAsync`, as before.\n    get spa() {\n        return this?.safeParseAsync;\n    },\n    set spa(value) {\n        util.own(this, \"spa\", value);\n    },\n    validate(data, params) {\n        return parse.validate(this, data, params);\n    },\n    validateAsync(data, params) {\n        return parse.validateAsync(this, data, params);\n    },\n    encode: function _encode(data, params) {\n        return parse.encode(this, data, params, { callee: _encode });\n    },\n    decode: function _decode(data, params) {\n        return parse.decode(this, data, params, { callee: _decode });\n    },\n    encodeAsync: async function _encodeAsync(data, params) {\n        return await parse.encodeAsync(this, data, params, { callee: _encodeAsync });\n    },\n    decodeAsync: async function _decodeAsync(data, params) {\n        return await parse.decodeAsync(this, data, params, { callee: _decodeAsync });\n    },\n    safeEncode(data, params) {\n        return parse.safeEncode(this, data, params);\n    },\n    safeDecode(data, params) {\n        return parse.safeDecode(this, data, params);\n    },\n    async safeEncodeAsync(data, params) {\n        return parse.safeEncodeAsync(this, data, params);\n    },\n    async safeDecodeAsync(data, params) {\n        return parse.safeDecodeAsync(this, data, params);\n    },\n    toJSONSchema(params) {\n        return createToJSONSchemaMethod(this, {})(params);\n    },\n    // Reads through to the registry on every access, so it must not cache.\n    get description() {\n        return core.globalRegistry.get(this)?.description;\n    },\n    // No setter: `schema._def = x` throws, as it did when `_def` was a non-writable own property.\n    get _def() {\n        return this._zod.def;\n    },\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n}, \n/*@__PURE__*/ util.derived({\n    format: (inst) => processors.aggregateChecks(inst).format ?? null,\n    minLength: (inst) => processors.aggregateChecks(inst).minimum ?? null,\n    maxLength: (inst) => processors.aggregateChecks(inst).maximum ?? null,\n}, {\n    regex(...args) {\n        return this.check(checks.regex(...args));\n    },\n    includes(...args) {\n        return this.check(checks.includes(...args));\n    },\n    startsWith(...args) {\n        return this.check(checks.startsWith(...args));\n    },\n    endsWith(...args) {\n        return this.check(checks.endsWith(...args));\n    },\n    min(...args) {\n        return this.check(checks.minLength(...args));\n    },\n    max(...args) {\n        return this.check(checks.maxLength(...args));\n    },\n    length(...args) {\n        return this.check(checks.length(...args));\n    },\n    nonempty(...args) {\n        return this.check(checks.minLength(1, ...args));\n    },\n    lowercase(params) {\n        return this.check(checks.lowercase(params));\n    },\n    uppercase(params) {\n        return this.check(checks.uppercase(params));\n    },\n    trim() {\n        return this.check(checks.trim());\n    },\n    normalize(...args) {\n        return this.check(checks.normalize(...args));\n    },\n    toLowerCase() {\n        return this.check(checks.toLowerCase());\n    },\n    toUpperCase() {\n        return this.check(checks.toUpperCase());\n    },\n    slugify() {\n        return this.check(checks.slugify());\n    },\n}));\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    _ZodString.init(inst, def);\n}, {\n    email(params) {\n        return this.check(core._email(ZodEmail, params));\n    },\n    url(params) {\n        return this.check(core._url(ZodURL, params));\n    },\n    jwt(params) {\n        return this.check(core._jwt(ZodJWT, params));\n    },\n    emoji(params) {\n        return this.check(core._emoji(ZodEmoji, params));\n    },\n    guid(params) {\n        return this.check(core._guid(ZodGUID, params));\n    },\n    uuid(params) {\n        return this.check(core._uuid(ZodUUID, params));\n    },\n    uuidv4(params) {\n        return this.check(core._uuidv4(ZodUUID, params));\n    },\n    uuidv6(params) {\n        return this.check(core._uuidv6(ZodUUID, params));\n    },\n    uuidv7(params) {\n        return this.check(core._uuidv7(ZodUUID, params));\n    },\n    nanoid(params) {\n        return this.check(core._nanoid(ZodNanoID, params));\n    },\n    cuid(params) {\n        return this.check(core._cuid(ZodCUID, params));\n    },\n    cuid2(params) {\n        return this.check(core._cuid2(ZodCUID2, params));\n    },\n    ulid(params) {\n        return this.check(core._ulid(ZodULID, params));\n    },\n    base64(params) {\n        return this.check(core._base64(ZodBase64, params));\n    },\n    base64url(params) {\n        return this.check(core._base64url(ZodBase64URL, params));\n    },\n    xid(params) {\n        return this.check(core._xid(ZodXID, params));\n    },\n    ksuid(params) {\n        return this.check(core._ksuid(ZodKSUID, params));\n    },\n    ipv4(params) {\n        return this.check(core._ipv4(ZodIPv4, params));\n    },\n    ipv6(params) {\n        return this.check(core._ipv6(ZodIPv6, params));\n    },\n    cidrv4(params) {\n        return this.check(core._cidrv4(ZodCIDRv4, params));\n    },\n    cidrv6(params) {\n        return this.check(core._cidrv6(ZodCIDRv6, params));\n    },\n    e164(params) {\n        return this.check(core._e164(ZodE164, params));\n    },\n    datetime(params) {\n        return this.check(core._isoDateTime(ZodISODateTime, params));\n    },\n    date(params) {\n        return this.check(core._isoDate(ZodISODate, params));\n    },\n    time(params) {\n        return this.check(core._isoTime(ZodISOTime, params));\n    },\n    duration(params) {\n        return this.check(core._isoDuration(ZodISODuration, params));\n    },\n});\nexport function string(params) {\n    return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    _ZodString.init(inst, def);\n});\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n    core.$ZodISODateTime.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n    core.$ZodISODate.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n    core.$ZodISOTime.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n    core.$ZodISODuration.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmail.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n    return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodGUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n    return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodUUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n    return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n    return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n    return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n    return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodURL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n    return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n    return core._url(ZodURL, {\n        protocol: regexes.httpProtocol,\n        hostname: regexes.domain,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmoji.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n    return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodNanoID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n    return core._nanoid(ZodNanoID, params);\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\n/**\n * Validates a CUID v1 string.\n *\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2 | `z.cuid2()`} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport function cuid(params) {\n    return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID2.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n    return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodULID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n    return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodXID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n    return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodKSUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n    return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n    return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodMAC.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n    return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n    return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n    return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n    return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n    return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64URL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n    return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodE164.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n    return core._e164(ZodE164, params);\n}\nexport const ZodCreditCard = /*@__PURE__*/ core.$constructor(\"ZodCreditCard\", (inst, def) => {\n    core.$ZodCreditCard.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function creditCard(params) {\n    return core._creditCard(ZodCreditCard, params);\n}\nexport const ZodIBAN = /*@__PURE__*/ core.$constructor(\"ZodIBAN\", (inst, def) => {\n    core.$ZodIBAN.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function iban(params) {\n    return core._iban(ZodIBAN, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodJWT.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n    return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCustomStringFormat.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hostname\", regexes.hostname, _params);\n}\nexport function hex(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hex\", regexes.hex, _params);\n}\nexport function currencyCode(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"currency_code\", regexes.currencyCode, _params);\n}\nexport function hash(alg, params) {\n    const enc = params?.enc ?? \"hex\";\n    const format = `${alg}_${enc}`;\n    const regex = core.regexes[format];\n    if (!regex)\n        throw new Error(`Unrecognized hash format: ${format}`);\n    return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n    inst.isFinite = true;\n}, \n/*@__PURE__*/ util.derived({\n    minValue: (inst) => {\n        const { minimum, exclusiveMinimum } = processors.aggregateChecks(inst);\n        return Math.max(minimum ?? Number.NEGATIVE_INFINITY, exclusiveMinimum ?? Number.NEGATIVE_INFINITY);\n    },\n    maxValue: (inst) => {\n        const { maximum, exclusiveMaximum } = processors.aggregateChecks(inst);\n        return Math.min(maximum ?? Number.POSITIVE_INFINITY, exclusiveMaximum ?? Number.POSITIVE_INFINITY);\n    },\n    isInt: (inst) => {\n        const { isInt, multipleOf } = processors.aggregateChecks(inst);\n        return !!isInt || !!multipleOf?.some(Number.isSafeInteger);\n    },\n    format: (inst) => processors.aggregateChecks(inst).format ?? null,\n}, {\n    gt(value, params) {\n        return this.check(checks.gt(value, params));\n    },\n    gte(value, params) {\n        return this.check(checks.gte(value, params));\n    },\n    min(value, params) {\n        return this.check(checks.gte(value, params));\n    },\n    lt(value, params) {\n        return this.check(checks.lt(value, params));\n    },\n    lte(value, params) {\n        return this.check(checks.lte(value, params));\n    },\n    max(value, params) {\n        return this.check(checks.lte(value, params));\n    },\n    int(params) {\n        return this.check(int(params));\n    },\n    safe(params) {\n        return this.check(int(params));\n    },\n    positive(params) {\n        return this.check(checks.gt(0, params));\n    },\n    nonnegative(params) {\n        return this.check(checks.gte(0, params));\n    },\n    negative(params) {\n        return this.check(checks.lt(0, params));\n    },\n    nonpositive(params) {\n        return this.check(checks.lte(0, params));\n    },\n    multipleOf(value, params) {\n        return this.check(checks.multipleOf(value, params));\n    },\n    step(value, params) {\n        return this.check(checks.multipleOf(value, params));\n    },\n    finite() {\n        return this;\n    },\n}));\nexport function number(params) {\n    return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    ZodNumber.init(inst, def);\n});\nexport function int(params) {\n    return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n    return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n    return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n    return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n    return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n    return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n}, \n/*@__PURE__*/ util.derived({\n    minValue: (inst) => processors.aggregateChecks(inst).minimum ?? null,\n    maxValue: (inst) => processors.aggregateChecks(inst).maximum ?? null,\n    format: (inst) => processors.aggregateChecks(inst).format ?? null,\n}, {\n    gte(value, params) {\n        return this.check(checks.gte(value, params));\n    },\n    min(value, params) {\n        return this.check(checks.gte(value, params));\n    },\n    gt(value, params) {\n        return this.check(checks.gt(value, params));\n    },\n    lt(value, params) {\n        return this.check(checks.lt(value, params));\n    },\n    lte(value, params) {\n        return this.check(checks.lte(value, params));\n    },\n    max(value, params) {\n        return this.check(checks.lte(value, params));\n    },\n    positive(params) {\n        return this.check(checks.gt(BigInt(0), params));\n    },\n    negative(params) {\n        return this.check(checks.lt(BigInt(0), params));\n    },\n    nonpositive(params) {\n        return this.check(checks.lte(BigInt(0), params));\n    },\n    nonnegative(params) {\n        return this.check(checks.gte(BigInt(0), params));\n    },\n    multipleOf(value, params) {\n        return this.check(checks.multipleOf(value, params));\n    },\n}));\nexport function bigint(params) {\n    return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    ZodBigInt.init(inst, def);\n});\nexport function int64(params) {\n    return core._int64(ZodBigIntFormat, params);\n}\nexport function uint64(params) {\n    return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n    return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n    return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n    return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n    return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n    return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n    return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n    return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n}, \n/*@__PURE__*/ util.derived({\n    minDate: (inst) => {\n        const { minimum } = processors.aggregateChecks(inst);\n        return minimum ? new Date(minimum) : null;\n    },\n    maxDate: (inst) => {\n        const { maximum } = processors.aggregateChecks(inst);\n        return maximum ? new Date(maximum) : null;\n    },\n}, {}));\nexport function date(params) {\n    return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n    _ensureDefaultMemoizer();\n    core.$ZodArray.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n    inst.element = def.element;\n}, {\n    min(n, params) {\n        return this.check(checks.minLength(n, params));\n    },\n    nonempty(params) {\n        return this.check(checks.minLength(1, params));\n    },\n    max(n, params) {\n        return this.check(checks.maxLength(n, params));\n    },\n    length(n, params) {\n        return this.check(checks.length(n, params));\n    },\n    unwrap() {\n        return this.element;\n    },\n});\nexport function array(element, params) {\n    return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n    _ensureDefaultMemoizer();\n    core.$ZodObjectJIT.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n    util.installLazyProp(inst, \"shape\", (self) => self._zod.def.shape, false);\n}, {\n    keyof() {\n        return _enum(Object.keys(this._zod.def.shape));\n    },\n    catchall(catchall) {\n        // `mergeDefs` rather than a spread: spreading reads `shape`, and resolving it can mint a whole fresh subtree\n        return this.clone(util.mergeDefs(this._zod.def, { catchall: catchall }));\n    },\n    passthrough() {\n        return this.clone(util.mergeDefs(this._zod.def, { catchall: unknown() }));\n    },\n    loose() {\n        return this.clone(util.mergeDefs(this._zod.def, { catchall: unknown() }));\n    },\n    strict() {\n        return this.clone(util.mergeDefs(this._zod.def, { catchall: never() }));\n    },\n    strip() {\n        return this.clone(util.mergeDefs(this._zod.def, { catchall: undefined }));\n    },\n    extend(incoming) {\n        return util.extend(this, incoming);\n    },\n    safeExtend(incoming) {\n        return util.safeExtend(this, incoming);\n    },\n    merge(other) {\n        return util.merge(this, other);\n    },\n    pick(mask) {\n        return util.pick(this, mask);\n    },\n    omit(mask) {\n        return util.omit(this, mask);\n    },\n    partial(...args) {\n        return util.partial(ZodOptional, this, args[0]);\n    },\n    exactPartial(...args) {\n        return util.partial(ZodExactOptional, this, args[0], \"exactPartial\");\n    },\n    required(...args) {\n        return util.required(ZodNonOptional, this, args[0]);\n    },\n});\nexport function object(shape, params) {\n    const def = {\n        type: \"object\",\n        shape: shape ?? {},\n        ...util.normalizeParams(params),\n    };\n    return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: never(),\n        ...util.normalizeParams(params),\n    });\n}\n// looseObject\nexport function looseObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: unknown(),\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n    inst.options = def.options;\n});\nexport function union(options, params) {\n    return new ZodUnion({\n        type: \"union\",\n        options: options,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodXor.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n    inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n    return new ZodXor({\n        type: \"union\",\n        options: options,\n        inclusive: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n    // const [options, params] = args;\n    return new ZodDiscriminatedUnion({\n        type: \"union\",\n        options: options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n    return new ZodIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n    _ensureDefaultMemoizer();\n    core.$ZodTuple.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n}, {\n    rest(rest) {\n        return this.clone({\n            ...this._zod.def,\n            rest: rest,\n        });\n    },\n    partial() {\n        const def = this._zod.def;\n        // a refinement was authored against the full arity; partialing would run it on a shorter array\n        if (def.checks?.length)\n            throw new Error(\".partial() cannot be used on tuple schemas containing refinements\");\n        return this.clone({\n            ...def,\n            items: def.items.map((item) => new ZodOptional({ type: \"optional\", innerType: item })),\n        });\n    },\n});\nexport function tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new ZodTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n    _ensureDefaultMemoizer();\n    core.$ZodRecord.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n    // v3-compat: z.record(valueType, params?) \u2014 defaults keyType to z.string()\n    if (!valueType || !valueType._zod) {\n        return new ZodRecord({\n            type: \"record\",\n            keyType: string(),\n            valueType: keyType,\n            ...util.normalizeParams(valueType),\n        });\n    }\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n        partial: true,\n    });\n}\nexport function looseRecord(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        mode: \"loose\",\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n    _ensureDefaultMemoizer();\n    core.$ZodMap.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n    return new ZodMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n    _ensureDefaultMemoizer();\n    core.$ZodSet.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n    return new ZodSet({\n        type: \"set\",\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n    inst.enum = def.entries;\n    // reuse the parsed value set so a numeric TS enum's reverse-mapping keys stay out\n    inst.options = [...inst._zod.values];\n    const keys = new Set(Object.keys(def.entries));\n    inst.extract = (values, params) => {\n        const newEntries = {};\n        for (const value of values) {\n            if (keys.has(value)) {\n                newEntries[value] = def.entries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n    inst.exclude = (values, params) => {\n        const newEntries = { ...def.entries };\n        for (const value of values) {\n            if (keys.has(value)) {\n                delete newEntries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n});\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n    inst.values = new Set(def.values);\n    Object.defineProperty(inst, \"value\", {\n        get() {\n            if (def.values.length > 1) {\n                throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n            }\n            return def.values[0];\n        },\n    });\n});\nexport function literal(value, params) {\n    return new ZodLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n    inst.min = (size, params) => inst.check(core._minSize(size, params));\n    inst.max = (size, params) => inst.check(core._maxSize(size, params));\n    inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n    return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n    _ensureDefaultMemoizer();\n    core.$ZodTransform.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n    inst._zod.parse = (payload, _ctx) => {\n        if (_ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                if (!(\"input\" in _issue))\n                    _issue.input = payload.value;\n                _issue.inst ?? (_issue.inst = inst);\n                // _issue.continue ??= true;\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        const output = def.transform(payload.value, payload);\n        if (output instanceof Promise) {\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        payload.value = output;\n        return payload;\n    };\n});\nexport function transform(fn) {\n    return new ZodTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n    return new ZodOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n    core.$ZodExactOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n    return new ZodExactOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n    return new ZodNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\nexport function nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n    return new ZodDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n    return new ZodPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n    return new ZodNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n    return new ZodSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n    return new ZodCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : core.util.constantCatch(catchValue)),\n    });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n    return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n    inst.in = def.in;\n    inst.out = def.out;\n});\nexport function pipe(in_, out) {\n    return new ZodPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        // ...util.normalizeParams(params),\n    });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n    ZodPipe.init(inst, def);\n    core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n    return new ZodCodec({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        transform: params.decode,\n        reverseTransform: params.encode,\n    });\n}\nexport function invertCodec(codec) {\n    const def = codec._zod.def;\n    return new ZodCodec({\n        type: \"pipe\",\n        in: def.out,\n        out: def.in,\n        transform: def.reverseTransform,\n        reverseTransform: def.transform,\n    });\n}\nexport const ZodPreprocess = /*@__PURE__*/ core.$constructor(\"ZodPreprocess\", (inst, def) => {\n    ZodPipe.init(inst, def);\n    core.$ZodPreprocess.init(inst, def);\n});\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n    return new ZodReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n    return new ZodTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n    return new ZodLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n    return new ZodPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n    core.$ZodFunction.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n    return new ZodFunction({\n        type: \"function\",\n        input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n        output: params?.output ?? unknown(),\n    });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        // ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nexport function custom(fn, _params) {\n    return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n    return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn, params) {\n    return core._superRefine(fn, params);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nexport const ZodInstanceOf = /*@__PURE__*/ core.$constructor(\"ZodInstanceOf\", (inst, def) => {\n    ZodCustom.init(inst, def);\n}, {\n    properties(shape, params) {\n        // asserts in place, so the narrowed output type is truthful without a wrapper\n        return this.check(core._properties(shape, params));\n    },\n});\nfunction _instanceof(cls, params = {}) {\n    const inst = new ZodInstanceOf({\n        type: \"custom\",\n        check: \"custom\",\n        fn: (data) => data instanceof cls,\n        abort: true,\n        ...util.normalizeParams(params),\n    });\n    inst._zod.bag.Class = cls;\n    // Override check to emit invalid_type instead of custom\n    inst._zod.check = (payload) => {\n        if (!(payload.value instanceof cls)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: cls.name,\n                input: payload.value,\n                inst,\n                path: [...(inst._zod.def.path ?? [])],\n            });\n        }\n    };\n    return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n    Codec: ZodCodec,\n    Boolean: ZodBoolean,\n    String: ZodString,\n}, ...args);\nexport function json(params) {\n    const jsonSchema = lazy(() => {\n        return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\n// preprocess\nexport function preprocess(fn, schema) {\n    return new ZodPreprocess({\n        type: \"pipe\",\n        in: transform(fn),\n        out: schema,\n    });\n}\n", "// Zod 3 compat layer\nimport * as core from \"../core/index.js\";\n/** @deprecated Use the raw string literal codes instead, e.g. \"invalid_type\". */\nexport const ZodIssueCode = {\n    invalid_type: \"invalid_type\",\n    too_big: \"too_big\",\n    too_small: \"too_small\",\n    invalid_format: \"invalid_format\",\n    not_multiple_of: \"not_multiple_of\",\n    unrecognized_keys: \"unrecognized_keys\",\n    invalid_union: \"invalid_union\",\n    invalid_key: \"invalid_key\",\n    invalid_element: \"invalid_element\",\n    invalid_value: \"invalid_value\",\n    custom: \"custom\",\n};\nexport { $brand, config } from \"../core/index.js\";\n/** @deprecated Use `z.config(params)` instead. */\nexport function setErrorMap(map) {\n    core.config({\n        customError: map,\n    });\n}\n/** @deprecated Use `z.config()` instead. */\nexport function getErrorMap() {\n    return core.config().customError;\n}\n/** @deprecated Do not use. Stub definition, only included for zod-to-json-schema compatibility. */\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n", "import * as core from \"../core/index.js\";\nimport { ZodISODate, ZodISODateTime, ZodISODuration, ZodISOTime } from \"./schemas.js\";\nexport { ZodISODate, ZodISODateTime, ZodISODuration, ZodISOTime } from \"./schemas.js\";\nexport function datetime(params) {\n    return core._isoDateTime(ZodISODateTime, params);\n}\nexport function date(params) {\n    return core._isoDate(ZodISODate, params);\n}\nexport function time(params) {\n    return core._isoTime(ZodISOTime, params);\n}\nexport function duration(params) {\n    return core._isoDuration(ZodISODuration, params);\n}\n", "import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport function string(params) {\n    return core._coercedString(schemas.ZodString, params);\n}\nexport function number(params) {\n    return core._coercedNumber(schemas.ZodNumber, params);\n}\nexport function boolean(params) {\n    return core._coercedBoolean(schemas.ZodBoolean, params);\n}\nexport function bigint(params) {\n    return core._coercedBigint(schemas.ZodBigInt, params);\n}\nexport function date(params) {\n    return core._coercedDate(schemas.ZodDate, params);\n}\n", "export const LATEST_PROTOCOL_VERSION = '2025-11-25';\nexport const DEFAULT_NEGOTIATED_PROTOCOL_VERSION = '2025-03-26';\nexport const SUPPORTED_PROTOCOL_VERSIONS = [LATEST_PROTOCOL_VERSION, '2025-06-18', '2025-03-26', '2024-11-05', '2024-10-07'];\n\n/**\n * `_meta` key associating a message with a 2025-11-25 task.\n *\n * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n */\nexport const RELATED_TASK_META_KEY = 'io.modelcontextprotocol/related-task';\n\n/* Reserved `_meta` keys for the per-request envelope (protocol revision 2026-07-28) */\n\n/**\n * `_meta` key carrying the MCP protocol version governing a request.\n *\n * For the HTTP transport, the value must match the `MCP-Protocol-Version` header.\n */\nexport const PROTOCOL_VERSION_META_KEY = 'io.modelcontextprotocol/protocolVersion';\n\n/**\n * `_meta` key identifying the client software making a request.\n *\n * Clients SHOULD include it on every request; the value is self-reported and\n * intended for display, logging, and debugging — servers should not rely on\n * it for behavior or security decisions.\n */\nexport const CLIENT_INFO_META_KEY = 'io.modelcontextprotocol/clientInfo';\n\n/**\n * `_meta` key identifying the server software producing a response.\n *\n * Servers SHOULD include it on every response; the value is self-reported and\n * intended for display, logging, and debugging — clients should not rely on\n * it for behavior or security decisions.\n */\nexport const SERVER_INFO_META_KEY = 'io.modelcontextprotocol/serverInfo';\n\n/**\n * `_meta` key carrying the client's capabilities for a request.\n *\n * Capabilities are declared per request rather than once at initialization;\n * servers must not infer capabilities from prior requests.\n */\nexport const CLIENT_CAPABILITIES_META_KEY = 'io.modelcontextprotocol/clientCapabilities';\n\n/**\n * `_meta` key carrying the JSON-RPC ID of the `subscriptions/listen` request\n * that opened the stream a notification was delivered on.\n *\n * Stamped by the server on every notification delivered via a\n * `subscriptions/listen` stream (including the leading\n * `notifications/subscriptions/acknowledged`); on stdio, where all messages\n * share one channel, clients use it to correlate notifications with their\n * originating subscription. The value is the listen request's JSON-RPC ID\n * verbatim.\n */\nexport const SUBSCRIPTION_ID_META_KEY = 'io.modelcontextprotocol/subscriptionId';\n\n/**\n * `_meta` key carrying the desired log level for a request.\n *\n * When absent, the server must not send `notifications/message` notifications\n * for the request.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months.\n */\nexport const LOG_LEVEL_META_KEY = 'io.modelcontextprotocol/logLevel';\n\n/*\n * Reserved `_meta` keys for distributed trace context propagation (SEP-414).\n *\n * These unprefixed keys are reserved by the MCP specification as an explicit\n * exception to the `_meta` key prefix rule. The SDK does not interpret them;\n * they pass through `_meta` untouched for OpenTelemetry-style propagation.\n */\n\n/**\n * `_meta` key carrying W3C Trace Context for distributed tracing (SEP-414).\n *\n * When present, the value MUST follow the W3C `traceparent` header format,\n * e.g. `00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01`.\n *\n * @see https://www.w3.org/TR/trace-context/#traceparent-header\n */\nexport const TRACEPARENT_META_KEY = 'traceparent';\n\n/**\n * `_meta` key carrying vendor-specific trace state for distributed tracing (SEP-414).\n *\n * When present, the value MUST follow the W3C `tracestate` header format,\n * e.g. `vendor1=value1,vendor2=value2`.\n *\n * @see https://www.w3.org/TR/trace-context/#tracestate-header\n */\nexport const TRACESTATE_META_KEY = 'tracestate';\n\n/**\n * `_meta` key carrying cross-cutting propagation values for distributed tracing (SEP-414).\n *\n * When present, the value MUST follow the W3C Baggage header format,\n * e.g. `userId=alice,serverRegion=us-east-1`.\n *\n * @see https://www.w3.org/TR/baggage/\n */\nexport const BAGGAGE_META_KEY = 'baggage';\n\n/* JSON-RPC types */\nexport const JSONRPC_VERSION = '2.0';\n\n/* Standard JSON-RPC error code constants */\nexport const PARSE_ERROR = -32_700;\nexport const INVALID_REQUEST = -32_600;\nexport const METHOD_NOT_FOUND = -32_601;\nexport const INVALID_PARAMS = -32_602;\nexport const INTERNAL_ERROR = -32_603;\n", "import * as z from 'zod/v4';\n\nimport { JSONRPC_VERSION, RELATED_TASK_META_KEY, SERVER_INFO_META_KEY, SUBSCRIPTION_ID_META_KEY } from './constants';\nimport type { JSONArray, JSONObject, JSONValue } from './types';\n\nexport const JSONValueSchema: z.ZodType<JSONValue, JSONValue> = z.lazy(() =>\n    z.union([z.string(), z.number(), z.boolean(), z.null(), z.record(z.string(), JSONValueSchema), z.array(JSONValueSchema)])\n);\nexport const JSONObjectSchema: z.ZodType<JSONObject, JSONObject> = z.record(z.string(), JSONValueSchema);\nexport const JSONArraySchema: z.ZodType<JSONArray, JSONArray> = z.array(JSONValueSchema);\n/**\n * A progress token, used to associate progress notifications with the original request.\n */\nexport const ProgressTokenSchema = z.union([z.string(), z.number().int()]);\n\n/**\n * An opaque token used to represent a cursor for pagination.\n */\nexport const CursorSchema = z.string();\n\n/** @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only. */\nexport const TaskMetadataSchema = z.object({\n    ttl: z.number().optional()\n});\n\n/**\n * Metadata for associating messages with a task.\n * Include this in the `_meta` field under the key `io.modelcontextprotocol/related-task`.\n *\n * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n */\nexport const RelatedTaskMetadataSchema = z.object({\n    taskId: z.string()\n});\n\nexport const RequestMetaSchema = z.looseObject({\n    /**\n     * If specified, the caller is requesting out-of-band progress notifications for this request (as represented by notifications/progress). The value of this parameter is an opaque token that will be attached to any subsequent notifications. The receiver is not obligated to provide these notifications.\n     */\n    progressToken: ProgressTokenSchema.optional(),\n    /**\n     * If specified, this request is related to the provided task.\n     */\n    [RELATED_TASK_META_KEY]: RelatedTaskMetadataSchema.optional()\n});\n\n/**\n * Common params for any request.\n */\nexport const BaseRequestParamsSchema = z.object({\n    /**\n     * See [General fields: `_meta`](https://modelcontextprotocol.io/specification/2026-07-28/basic/index#meta) for notes on `_meta` usage.\n     */\n    _meta: RequestMetaSchema.optional()\n});\n\n/**\n * Common params for any task-augmented request.\n *\n * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n */\nexport const TaskAugmentedRequestParamsSchema = BaseRequestParamsSchema.extend({\n    /**\n     * If specified, the caller is requesting task-augmented execution for this request.\n     * The request will return a `CreateTaskResult` immediately, and the actual result can be\n     * retrieved later via `tasks/result`.\n     *\n     * Task augmentation is subject to capability negotiation - receivers MUST declare support\n     * for task augmentation of specific request types in their capabilities.\n     */\n    task: TaskMetadataSchema.optional()\n});\n\nexport const RequestSchema = z.object({\n    method: z.string(),\n    params: BaseRequestParamsSchema.loose().optional()\n});\n\nexport const NotificationsParamsSchema = z.object({\n    /**\n     * See [MCP specification](https://modelcontextprotocol.io/specification/2026-07-28/basic/index#general-fields)\n     * for notes on `_meta` usage.\n     */\n    _meta: RequestMetaSchema.optional()\n});\n\nexport const NotificationSchema = z.object({\n    method: z.string(),\n    params: NotificationsParamsSchema.loose().optional()\n});\n\n/**\n * The contents of a result's `_meta` field (the 2026-07-28 `ResultMetaObject`).\n * Loose — implementation-specific keys pass through.\n *\n * The serverInfo key identifies the server software producing the response\n * (servers SHOULD include it on every response; the value is self-reported\n * and intended for display, logging, and debugging). The getter defers the\n * `ImplementationSchema` reference, which is declared later in this file.\n */\nexport const ResultMetaObjectSchema = z.looseObject({\n    get [SERVER_INFO_META_KEY]() {\n        // Malformed drops to absent, matching the wire layer: the value \"is\n        // not verified by the protocol\" and clients \"SHOULD NOT use it to\n        // change their behavior\". Load-bearing beyond leniency — this schema\n        // sits inside JSONRPCResultResponseSchema, whose guard classifies\n        // every inbound message, so a strict key here would drop whole\n        // responses over a bad display-only stamp.\n        // eslint-disable-next-line unicorn/prefer-top-level-await -- Zod `.catch()`, not a Promise\n        return ImplementationSchema.optional().catch(undefined);\n    }\n});\n\nexport const ResultSchema = z.looseObject({\n    /**\n     * See [MCP specification](https://modelcontextprotocol.io/specification/2026-07-28/basic/index#general-fields)\n     * for notes on `_meta` usage.\n     */\n    _meta: ResultMetaObjectSchema.optional()\n    // `resultType` is wire-only vocabulary (protocol revision 2026-07-28) and\n    // is deliberately NOT modeled here: the neutral result schemas carry no\n    // slot for it. It exists only inside the 2026-era wire codec, which\n    // consumes it on decode and stamps it on encode. (Q1 increment 2 - the\n    // former optional member here was the masking surface that let modern\n    // vocabulary leak through every legacy-leg parse.)\n});\n\n/**\n * A uniquely identifying ID for a request in JSON-RPC.\n */\nexport const RequestIdSchema = z.union([z.string(), z.number().int()]);\n\n/**\n * A request that expects a response.\n */\nexport const JSONRPCRequestSchema = z\n    .object({\n        jsonrpc: z.literal(JSONRPC_VERSION),\n        id: RequestIdSchema,\n        ...RequestSchema.shape\n    })\n    .strict();\n\n/**\n * A notification which does not expect a response.\n */\nexport const JSONRPCNotificationSchema = z\n    .object({\n        jsonrpc: z.literal(JSONRPC_VERSION),\n        ...NotificationSchema.shape\n    })\n    .strict();\n\n/**\n * A successful (non-error) response to a request.\n */\nexport const JSONRPCResultResponseSchema = z\n    .object({\n        jsonrpc: z.literal(JSONRPC_VERSION),\n        id: RequestIdSchema,\n        result: ResultSchema\n    })\n    .strict();\n\n/**\n * A response to a request that indicates an error occurred.\n */\nexport const JSONRPCErrorResponseSchema = z\n    .object({\n        jsonrpc: z.literal(JSONRPC_VERSION),\n        id: RequestIdSchema.optional(),\n        error: z.object({\n            /**\n             * The error type that occurred.\n             */\n            code: z.number().int(),\n            /**\n             * A short description of the error. The message SHOULD be limited to a concise single sentence.\n             */\n            message: z.string(),\n            /**\n             * Additional information about the error. The value of this member is defined by the sender (e.g. detailed error information, nested errors etc.).\n             */\n            data: z.unknown().optional()\n        })\n    })\n    .strict();\n\nexport const JSONRPCMessageSchema = z.union([\n    JSONRPCRequestSchema,\n    JSONRPCNotificationSchema,\n    JSONRPCResultResponseSchema,\n    JSONRPCErrorResponseSchema\n]);\n\nexport const JSONRPCResponseSchema = z.union([JSONRPCResultResponseSchema, JSONRPCErrorResponseSchema]);\n\n/* Empty result */\n/**\n * A response that indicates success but carries no data.\n */\nexport const EmptyResultSchema = ResultSchema.strict();\n\nexport const CancelledNotificationParamsSchema = NotificationsParamsSchema.extend({\n    /**\n     * The ID of the request to cancel.\n     *\n     * This MUST correspond to the ID of a request previously issued in the same direction.\n     */\n    requestId: RequestIdSchema.optional(),\n    /**\n     * An optional string describing the reason for the cancellation. This MAY be logged or presented to the user.\n     */\n    reason: z.string().optional()\n});\n/* Cancellation */\n/**\n * This notification can be sent by either side to indicate that it is cancelling a previously-issued request.\n *\n * The request SHOULD still be in-flight, but due to communication latency, it is always possible that this notification MAY arrive after the request has already finished.\n *\n * This notification indicates that the result will be unused, so any associated processing SHOULD cease.\n *\n * A client MUST NOT attempt to cancel its {@linkcode InitializeRequest | initialize} request.\n */\nexport const CancelledNotificationSchema = NotificationSchema.extend({\n    method: z.literal('notifications/cancelled'),\n    params: CancelledNotificationParamsSchema\n});\n\n/* Base Metadata */\n/**\n * Icon schema for use in {@link Tool | tools}, {@link Prompt | prompts}, {@link Resource | resources}, and {@link Implementation | implementations}.\n */\nexport const IconSchema = z.object({\n    /**\n     * URL or data URI for the icon.\n     */\n    src: z.string(),\n    /**\n     * Optional MIME type for the icon.\n     */\n    mimeType: z.string().optional(),\n    /**\n     * Optional array of strings that specify sizes at which the icon can be used.\n     * Each string should be in WxH format (e.g., `\"48x48\"`, `\"96x96\"`) or `\"any\"` for scalable formats like SVG.\n     *\n     * If not provided, the client should assume that the icon can be used at any size.\n     */\n    sizes: z.array(z.string()).optional(),\n    /**\n     * Optional specifier for the theme this icon is designed for. `light` indicates\n     * the icon is designed to be used with a light background, and `dark` indicates\n     * the icon is designed to be used with a dark background.\n     *\n     * If not provided, the client should assume the icon can be used with any theme.\n     */\n    theme: z.enum(['light', 'dark']).optional()\n});\n\n/**\n * Base schema to add `icons` property.\n *\n */\nexport const IconsSchema = z.object({\n    /**\n     * Optional set of sized icons that the client can display in a user interface.\n     *\n     * Clients that support rendering icons MUST support at least the following MIME types:\n     * - `image/png` - PNG images (safe, universal compatibility)\n     * - `image/jpeg` (and `image/jpg`) - JPEG images (safe, universal compatibility)\n     *\n     * Clients that support rendering icons SHOULD also support:\n     * - `image/svg+xml` - SVG images (scalable but requires security precautions)\n     * - `image/webp` - WebP images (modern, efficient format)\n     */\n    icons: z.array(IconSchema).optional()\n});\n\n/**\n * Base metadata interface for common properties across {@link Resource | resources}, {@link Tool | tools}, {@link Prompt | prompts}, and {@link Implementation | implementations}.\n */\nexport const BaseMetadataSchema = z.object({\n    /** Intended for programmatic or logical use, but used as a display name in past specs or fallback */\n    name: z.string(),\n    /**\n     * Intended for UI and end-user contexts — optimized to be human-readable and easily understood,\n     * even by those unfamiliar with domain-specific terminology.\n     *\n     * If not provided, the `name` should be used for display (except for `Tool`,\n     * where `annotations.title` should be given precedence over using `name`,\n     * if present).\n     */\n    title: z.string().optional()\n});\n\n/* Initialization */\n/**\n * Describes the name and version of an MCP implementation.\n */\nexport const ImplementationSchema = BaseMetadataSchema.extend({\n    ...BaseMetadataSchema.shape,\n    ...IconsSchema.shape,\n    version: z.string(),\n    /**\n     * An optional URL of the website for this implementation.\n     */\n    websiteUrl: z.string().optional(),\n\n    /**\n     * An optional human-readable description of what this implementation does.\n     *\n     * This can be used by clients or servers to provide context about their purpose\n     * and capabilities. For example, a server might describe the types of resources\n     * or tools it provides, while a client might describe its intended use case.\n     */\n    description: z.string().optional()\n});\n\nconst FormElicitationCapabilitySchema = z.intersection(\n    z.object({\n        applyDefaults: z.boolean().optional()\n    }),\n    JSONObjectSchema\n);\n\nconst ElicitationCapabilitySchema = z.preprocess(\n    value => {\n        if (value && typeof value === 'object' && !Array.isArray(value) && Object.keys(value as Record<string, unknown>).length === 0) {\n            return { form: {} };\n        }\n        return value;\n    },\n    z.intersection(\n        z.object({\n            form: FormElicitationCapabilitySchema.optional(),\n            url: JSONObjectSchema.optional()\n        }),\n        JSONObjectSchema.optional()\n    )\n);\n\n/**\n * Task capabilities for clients, indicating which request types support task creation.\n *\n * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n */\nexport const ClientTasksCapabilitySchema = z.looseObject({\n    /**\n     * Present if the client supports listing tasks.\n     */\n    list: JSONObjectSchema.optional(),\n    /**\n     * Present if the client supports cancelling tasks.\n     */\n    cancel: JSONObjectSchema.optional(),\n    /**\n     * Capabilities for task creation on specific request types.\n     */\n    requests: z\n        .looseObject({\n            /**\n             * Task support for sampling requests.\n             */\n            sampling: z\n                .looseObject({\n                    createMessage: JSONObjectSchema.optional()\n                })\n                .optional(),\n            /**\n             * Task support for elicitation requests.\n             */\n            elicitation: z\n                .looseObject({\n                    create: JSONObjectSchema.optional()\n                })\n                .optional()\n        })\n        .optional()\n});\n\n/**\n * Task capabilities for servers, indicating which request types support task creation.\n *\n * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n */\nexport const ServerTasksCapabilitySchema = z.looseObject({\n    /**\n     * Present if the server supports listing tasks.\n     */\n    list: JSONObjectSchema.optional(),\n    /**\n     * Present if the server supports cancelling tasks.\n     */\n    cancel: JSONObjectSchema.optional(),\n    /**\n     * Capabilities for task creation on specific request types.\n     */\n    requests: z\n        .looseObject({\n            /**\n             * Task support for tool requests.\n             */\n            tools: z\n                .looseObject({\n                    call: JSONObjectSchema.optional()\n                })\n                .optional()\n        })\n        .optional()\n});\n\n/**\n * Capabilities a client may support. Known capabilities are defined here, in this schema, but this is not a closed set: any client can define its own, additional capabilities.\n */\nexport const ClientCapabilitiesSchema = z.object({\n    /**\n     * Experimental, non-standard capabilities that the client supports.\n     */\n    experimental: z.record(z.string(), JSONObjectSchema).optional(),\n    /**\n     * Present if the client supports sampling from an LLM.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to calling LLM\n     * provider APIs directly.\n     */\n    sampling: z\n        .object({\n            /**\n             * Present if the client supports context inclusion via `includeContext` parameter.\n             * If not declared, servers SHOULD only use `includeContext: \"none\"` (or omit it).\n             */\n            context: JSONObjectSchema.optional(),\n            /**\n             * Present if the client supports tool use via `tools` and `toolChoice` parameters.\n             */\n            tools: JSONObjectSchema.optional()\n        })\n        .optional(),\n    /**\n     * Present if the client supports eliciting user input.\n     */\n    elicitation: ElicitationCapabilitySchema.optional(),\n    /**\n     * Present if the client supports listing roots.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to passing paths via\n     * tool parameters, resource URIs, or configuration.\n     */\n    roots: z\n        .object({\n            /**\n             * Whether the client supports issuing notifications for changes to the roots list.\n             */\n            listChanged: z.boolean().optional()\n        })\n        .optional(),\n    /**\n     * Present if the client supports task creation.\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; parsed for interoperability only — servers built on this SDK never advertise it.\n     */\n    tasks: ClientTasksCapabilitySchema.optional(),\n    /**\n     * Extensions that the client supports. Keys are extension identifiers (vendor-prefix/extension-name).\n     */\n    extensions: z.record(z.string(), JSONObjectSchema).optional()\n});\n\nexport const InitializeRequestParamsSchema = BaseRequestParamsSchema.extend({\n    /**\n     * The latest version of the Model Context Protocol that the client supports. The client MAY decide to support older versions as well.\n     */\n    protocolVersion: z.string(),\n    capabilities: ClientCapabilitiesSchema,\n    clientInfo: ImplementationSchema\n});\n/**\n * This request is sent from the client to the server when it first connects, asking it to begin initialization.\n */\nexport const InitializeRequestSchema = RequestSchema.extend({\n    method: z.literal('initialize'),\n    params: InitializeRequestParamsSchema\n});\n\n/**\n * Capabilities that a server may support. Known capabilities are defined here, in this schema, but this is not a closed set: any server can define its own, additional capabilities.\n */\nexport const ServerCapabilitiesSchema = z.object({\n    /**\n     * Experimental, non-standard capabilities that the server supports.\n     */\n    experimental: z.record(z.string(), JSONObjectSchema).optional(),\n    /**\n     * Present if the server supports sending log messages to the client.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to stderr logging\n     * (STDIO servers) or OpenTelemetry.\n     */\n    logging: JSONObjectSchema.optional(),\n    /**\n     * Present if the server supports sending completions to the client.\n     */\n    completions: JSONObjectSchema.optional(),\n    /**\n     * Present if the server offers any prompt templates.\n     */\n    prompts: z\n        .object({\n            /**\n             * Whether this server supports issuing notifications for changes to the prompt list.\n             */\n            listChanged: z.boolean().optional()\n        })\n        .optional(),\n    /**\n     * Present if the server offers any resources to read.\n     */\n    resources: z\n        .object({\n            /**\n             * Whether this server supports clients subscribing to resource updates.\n             */\n            subscribe: z.boolean().optional(),\n\n            /**\n             * Whether this server supports issuing notifications for changes to the resource list.\n             */\n            listChanged: z.boolean().optional()\n        })\n        .optional(),\n    /**\n     * Present if the server offers any tools to call.\n     */\n    tools: z\n        .object({\n            /**\n             * Whether this server supports issuing notifications for changes to the tool list.\n             */\n            listChanged: z.boolean().optional()\n        })\n        .optional(),\n    /**\n     * Present if the server supports task creation.\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; parsed for interoperability only — servers built on this SDK never advertise it.\n     */\n    tasks: ServerTasksCapabilitySchema.optional(),\n    /**\n     * Extensions that the server supports. Keys are extension identifiers (vendor-prefix/extension-name).\n     */\n    extensions: z.record(z.string(), JSONObjectSchema).optional()\n});\n\n/**\n * After receiving an initialize request from the client, the server sends this response.\n */\nexport const InitializeResultSchema = ResultSchema.extend({\n    /**\n     * The version of the Model Context Protocol that the server wants to use. This may not match the version that the client requested. If the client cannot support this version, it MUST disconnect.\n     */\n    protocolVersion: z.string(),\n    capabilities: ServerCapabilitiesSchema,\n    serverInfo: ImplementationSchema,\n    /**\n     * Instructions describing how to use the server and its features.\n     *\n     * This can be used by clients to improve the LLM's understanding of available tools, resources, etc. It can be thought of like a \"hint\" to the model. For example, this information MAY be added to the system prompt.\n     */\n    instructions: z.string().optional()\n});\n\n/**\n * This notification is sent from the client to the server after initialization has finished.\n */\nexport const InitializedNotificationSchema = NotificationSchema.extend({\n    method: z.literal('notifications/initialized'),\n    params: NotificationsParamsSchema.optional()\n});\n\n/* Discovery */\n/**\n * A request from the client asking the server to advertise its supported protocol\n * versions, capabilities, and other metadata (protocol revision 2026-07-28). Servers\n * MUST implement `server/discover`. Clients MAY call it but are not required to —\n * version negotiation can also happen inline via the per-request `_meta` envelope.\n */\nexport const DiscoverRequestSchema = RequestSchema.extend({\n    method: z.literal('server/discover'),\n    params: BaseRequestParamsSchema.optional()\n});\n\n/**\n * The result returned by the server for a `server/discover` request.\n */\nexport const DiscoverResultSchema = ResultSchema.extend({\n    /**\n     * MCP protocol versions this server supports. The client should choose a\n     * version from this list for use in subsequent requests.\n     */\n    supportedVersions: z.array(z.string()),\n    /**\n     * The capabilities of the server.\n     */\n    capabilities: ServerCapabilitiesSchema,\n    /**\n     * Instructions describing how to use the server and its features.\n     *\n     * This can be used by clients to improve the LLM's understanding of available tools, resources, etc. It can be thought of like a \"hint\" to the model. For example, this information MAY be added to the system prompt.\n     *\n     * Server identity is not a body field: it travels in\n     * `_meta['io.modelcontextprotocol/serverInfo']` (spec PR #3002).\n     */\n    instructions: z.string().optional()\n});\n\n/* Ping */\n/**\n * A ping, issued by either the server or the client, to check that the other party is still alive. The receiver must promptly respond, or else may be disconnected.\n */\nexport const PingRequestSchema = RequestSchema.extend({\n    method: z.literal('ping'),\n    params: BaseRequestParamsSchema.optional()\n});\n\n/* Progress notifications */\nexport const ProgressSchema = z.object({\n    /**\n     * The progress thus far. This should increase every time progress is made, even if the total is unknown.\n     */\n    progress: z.number(),\n    /**\n     * Total number of items to process (or total progress required), if known.\n     */\n    total: z.optional(z.number()),\n    /**\n     * An optional message describing the current progress.\n     */\n    message: z.optional(z.string())\n});\n\nexport const ProgressNotificationParamsSchema = z.object({\n    ...NotificationsParamsSchema.shape,\n    ...ProgressSchema.shape,\n    /**\n     * The progress token which was given in the initial request, used to associate this notification with the request that is proceeding.\n     */\n    progressToken: ProgressTokenSchema\n});\n/**\n * An out-of-band notification used to inform the receiver of a progress update for a long-running request.\n *\n * @category notifications/progress\n */\nexport const ProgressNotificationSchema = NotificationSchema.extend({\n    method: z.literal('notifications/progress'),\n    params: ProgressNotificationParamsSchema\n});\n\nexport const PaginatedRequestParamsSchema = BaseRequestParamsSchema.extend({\n    /**\n     * An opaque token representing the current pagination position.\n     * If provided, the server should return results starting after this cursor.\n     */\n    cursor: CursorSchema.optional()\n});\n\n/* Pagination */\nexport const PaginatedRequestSchema = RequestSchema.extend({\n    params: PaginatedRequestParamsSchema.optional()\n});\n\nexport const PaginatedResultSchema = ResultSchema.extend({\n    /**\n     * An opaque token representing the pagination position after the last returned result.\n     * If present, there may be more results available.\n     */\n    nextCursor: CursorSchema.optional()\n});\n\n/* Resources */\n/**\n * The contents of a specific resource or sub-resource.\n */\nexport const ResourceContentsSchema = z.object({\n    /**\n     * The URI of this resource.\n     */\n    uri: z.string(),\n    /**\n     * The MIME type of this resource, if known.\n     */\n    mimeType: z.optional(z.string()),\n    /**\n     * See [MCP specification](https://modelcontextprotocol.io/specification/2026-07-28/basic/index#general-fields)\n     * for notes on `_meta` usage.\n     */\n    _meta: z.record(z.string(), z.unknown()).optional()\n});\n\nexport const TextResourceContentsSchema = ResourceContentsSchema.extend({\n    /**\n     * The text of the item. This must only be set if the item can actually be represented as text (not binary data).\n     */\n    text: z.string()\n});\n\n/**\n * A Zod schema for validating Base64 strings that is more performant and\n * robust for very large inputs than the default regex-based check. It avoids\n * stack overflows by using the native `atob` function for validation.\n */\nconst Base64Schema = z.string().refine(\n    val => {\n        try {\n            // atob throws a DOMException if the string contains characters\n            // that are not part of the Base64 character set.\n            atob(val);\n            return true;\n        } catch {\n            return false;\n        }\n    },\n    { message: 'Invalid Base64 string' }\n);\n\nexport const BlobResourceContentsSchema = ResourceContentsSchema.extend({\n    /**\n     * A base64-encoded string representing the binary data of the item.\n     */\n    blob: Base64Schema\n});\n\n/**\n * The sender or recipient of messages and data in a conversation.\n */\nexport const RoleSchema = z.enum(['user', 'assistant']);\n\n/**\n * Optional annotations providing clients additional context about a resource.\n */\nexport const AnnotationsSchema = z.object({\n    /**\n     * Intended audience(s) for the resource.\n     */\n    audience: z.array(RoleSchema).optional(),\n\n    /**\n     * Importance hint for the resource, from 0 (least) to 1 (most).\n     */\n    priority: z.number().min(0).max(1).optional(),\n\n    /**\n     * ISO 8601 timestamp for the most recent modification.\n     */\n    lastModified: z.iso.datetime({ offset: true }).optional()\n});\n\n/**\n * A known resource that the server is capable of reading.\n */\nexport const ResourceSchema = z.object({\n    ...BaseMetadataSchema.shape,\n    ...IconsSchema.shape,\n    /**\n     * The URI of this resource.\n     */\n    uri: z.string(),\n\n    /**\n     * A description of what this resource represents.\n     *\n     * This can be used by clients to improve the LLM's understanding of available resources. It can be thought of like a \"hint\" to the model.\n     */\n    description: z.optional(z.string()),\n\n    /**\n     * The MIME type of this resource, if known.\n     */\n    mimeType: z.optional(z.string()),\n\n    /**\n     * The size of the raw resource content, in bytes (i.e., before base64 encoding or any tokenization), if known.\n     *\n     * This can be used by Hosts to display file sizes and estimate context window usage.\n     */\n    size: z.optional(z.number()),\n\n    /**\n     * Optional annotations for the client.\n     */\n    annotations: AnnotationsSchema.optional(),\n\n    /**\n     * See [MCP specification](https://modelcontextprotocol.io/specification/2026-07-28/basic/index#general-fields)\n     * for notes on `_meta` usage.\n     */\n    _meta: z.optional(z.looseObject({}))\n});\n\n/**\n * A template description for resources available on the server.\n */\nexport const ResourceTemplateSchema = z.object({\n    ...BaseMetadataSchema.shape,\n    ...IconsSchema.shape,\n    /**\n     * A URI template (according to RFC 6570) that can be used to construct resource URIs.\n     */\n    uriTemplate: z.string(),\n\n    /**\n     * A description of what this template is for.\n     *\n     * This can be used by clients to improve the LLM's understanding of available resources. It can be thought of like a \"hint\" to the model.\n     */\n    description: z.optional(z.string()),\n\n    /**\n     * The MIME type for all resources that match this template. This should only be included if all resources matching this template have the same type.\n     */\n    mimeType: z.optional(z.string()),\n\n    /**\n     * Optional annotations for the client.\n     */\n    annotations: AnnotationsSchema.optional(),\n\n    /**\n     * See [MCP specification](https://modelcontextprotocol.io/specification/2026-07-28/basic/index#general-fields)\n     * for notes on `_meta` usage.\n     */\n    _meta: z.optional(z.looseObject({}))\n});\n\n/**\n * Sent from the client to request a list of resources the server has.\n */\nexport const ListResourcesRequestSchema = PaginatedRequestSchema.extend({\n    method: z.literal('resources/list')\n});\n\n/**\n * The server's response to a {@linkcode ListResourcesRequest | resources/list} request from the client.\n */\nexport const ListResourcesResultSchema = PaginatedResultSchema.extend({\n    resources: z.array(ResourceSchema)\n});\n\n/**\n * Sent from the client to request a list of resource templates the server has.\n */\nexport const ListResourceTemplatesRequestSchema = PaginatedRequestSchema.extend({\n    method: z.literal('resources/templates/list')\n});\n\n/**\n * The server's response to a {@linkcode ListResourceTemplatesRequest | resources/templates/list} request from the client.\n */\nexport const ListResourceTemplatesResultSchema = PaginatedResultSchema.extend({\n    resourceTemplates: z.array(ResourceTemplateSchema)\n});\n\nexport const ResourceRequestParamsSchema = BaseRequestParamsSchema.extend({\n    /**\n     * The URI of the resource to read. The URI can use any protocol; it is up to the server how to interpret it.\n     *\n     * @format uri\n     */\n    uri: z.string()\n});\n\n/**\n * Parameters for a {@linkcode ReadResourceRequest | resources/read} request.\n */\nexport const ReadResourceRequestParamsSchema = ResourceRequestParamsSchema;\n\n/**\n * Sent from the client to the server, to read a specific resource URI.\n */\nexport const ReadResourceRequestSchema = RequestSchema.extend({\n    method: z.literal('resources/read'),\n    params: ReadResourceRequestParamsSchema\n});\n\n/**\n * The server's response to a {@linkcode ReadResourceRequest | resources/read} request from the client.\n */\nexport const ReadResourceResultSchema = ResultSchema.extend({\n    contents: z.array(z.union([TextResourceContentsSchema, BlobResourceContentsSchema]))\n});\n\n/**\n * An optional notification from the server to the client, informing it that the list of resources it can read from has changed. This may be issued by servers without any previous subscription from the client.\n */\nexport const ResourceListChangedNotificationSchema = NotificationSchema.extend({\n    method: z.literal('notifications/resources/list_changed'),\n    params: NotificationsParamsSchema.optional()\n});\n\nexport const SubscribeRequestParamsSchema = ResourceRequestParamsSchema;\n/**\n * Sent from the client to request `resources/updated` notifications from the server whenever a particular resource changes.\n */\nexport const SubscribeRequestSchema = RequestSchema.extend({\n    method: z.literal('resources/subscribe'),\n    params: SubscribeRequestParamsSchema\n});\n\nexport const UnsubscribeRequestParamsSchema = ResourceRequestParamsSchema;\n/**\n * Sent from the client to request cancellation of {@linkcode ResourceUpdatedNotification | resources/updated} notifications from the server. This should follow a previous {@linkcode SubscribeRequest | resources/subscribe} request.\n */\nexport const UnsubscribeRequestSchema = RequestSchema.extend({\n    method: z.literal('resources/unsubscribe'),\n    params: UnsubscribeRequestParamsSchema\n});\n\n/* Subscriptions (protocol revision 2026-07-28) */\n/**\n * The set of notification types a client opts in to on a `subscriptions/listen`\n * request. Each type is opt-in; the server MUST NOT send a notification type\n * the client has not explicitly requested here.\n */\nexport const SubscriptionFilterSchema = z.object({\n    /**\n     * If true, receive `notifications/tools/list_changed`.\n     */\n    toolsListChanged: z.boolean().optional(),\n    /**\n     * If true, receive `notifications/prompts/list_changed`.\n     */\n    promptsListChanged: z.boolean().optional(),\n    /**\n     * If true, receive `notifications/resources/list_changed`.\n     */\n    resourcesListChanged: z.boolean().optional(),\n    /**\n     * Subscribe to `notifications/resources/updated` for these resource URIs.\n     * Replaces the former `resources/subscribe` RPC on the 2026-07-28 revision.\n     */\n    resourceSubscriptions: z.array(z.string()).optional()\n});\n\nexport const SubscriptionsListenRequestParamsSchema = BaseRequestParamsSchema.extend({\n    /**\n     * The notifications the client opts in to on this stream. The server MUST\n     * NOT send notification types the client has not explicitly requested.\n     */\n    notifications: SubscriptionFilterSchema\n});\n\n/**\n * Sent from the client to open a long-lived channel for receiving notifications\n * outside the context of a specific request (protocol revision 2026-07-28).\n * Replaces the previous HTTP GET endpoint and `resources/subscribe`.\n */\nexport const SubscriptionsListenRequestSchema = RequestSchema.extend({\n    method: z.literal('subscriptions/listen'),\n    params: SubscriptionsListenRequestParamsSchema\n});\n\nexport const SubscriptionsAcknowledgedNotificationParamsSchema = NotificationsParamsSchema.extend({\n    /**\n     * The subset of requested notification types the server agreed to honor.\n     */\n    notifications: SubscriptionFilterSchema\n});\n\n/**\n * Sent by the server as the first message on a `subscriptions/listen` stream\n * to acknowledge that the subscription has been established and report which\n * notification types it agreed to honor (protocol revision 2026-07-28).\n */\nexport const SubscriptionsAcknowledgedNotificationSchema = NotificationSchema.extend({\n    method: z.literal('notifications/subscriptions/acknowledged'),\n    params: SubscriptionsAcknowledgedNotificationParamsSchema\n});\n\n/**\n * `_meta` for a {@linkcode SubscriptionsListenResult}: the listen request's\n * JSON-RPC ID under the canonical subscription-id key (mirroring the same key\n * on every notification delivered on the stream). Extends\n * {@linkcode ResultMetaObjectSchema}, so the optional serverInfo key is typed\n * here too.\n */\nexport const SubscriptionsListenResultMetaSchema = ResultMetaObjectSchema.extend({\n    [SUBSCRIPTION_ID_META_KEY]: RequestIdSchema\n});\n\n/**\n * The response to a `subscriptions/listen` request, signalling that the\n * subscription has ended gracefully (for example, during server shutdown).\n * Because the listen stream is long-lived, this result is sent only when the\n * server tears the subscription down; an abrupt transport close carries no\n * response. The result body is otherwise empty.\n */\nexport const SubscriptionsListenResultSchema = ResultSchema.extend({\n    _meta: SubscriptionsListenResultMetaSchema\n});\n\n/**\n * Parameters for a {@linkcode ResourceUpdatedNotification | notifications/resources/updated} notification.\n */\nexport const ResourceUpdatedNotificationParamsSchema = NotificationsParamsSchema.extend({\n    /**\n     * The URI of the resource that has been updated. This might be a sub-resource of the one that the client actually subscribed to.\n     */\n    uri: z.string()\n});\n\n/**\n * A notification from the server to the client, informing it that a resource has changed and may need to be read again. This should only be sent if the client previously sent a {@linkcode SubscribeRequest | resources/subscribe} request.\n */\nexport const ResourceUpdatedNotificationSchema = NotificationSchema.extend({\n    method: z.literal('notifications/resources/updated'),\n    params: ResourceUpdatedNotificationParamsSchema\n});\n\n/* Prompts */\n/**\n * Describes an argument that a prompt can accept.\n */\nexport const PromptArgumentSchema = z.object({\n    /**\n     * The name of the argument.\n     */\n    name: z.string(),\n    /**\n     * A human-readable description of the argument.\n     */\n    description: z.optional(z.string()),\n    /**\n     * Whether this argument must be provided.\n     */\n    required: z.optional(z.boolean())\n});\n\n/**\n * A prompt or prompt template that the server offers.\n */\nexport const PromptSchema = z.object({\n    ...BaseMetadataSchema.shape,\n    ...IconsSchema.shape,\n    /**\n     * An optional description of what this prompt provides\n     */\n    description: z.optional(z.string()),\n    /**\n     * A list of arguments to use for templating the prompt.\n     */\n    arguments: z.optional(z.array(PromptArgumentSchema)),\n    /**\n     * See [MCP specification](https://modelcontextprotocol.io/specification/2026-07-28/basic/index#general-fields)\n     * for notes on `_meta` usage.\n     */\n    _meta: z.optional(z.looseObject({}))\n});\n\n/**\n * Sent from the client to request a list of prompts and prompt templates the server has.\n */\nexport const ListPromptsRequestSchema = PaginatedRequestSchema.extend({\n    method: z.literal('prompts/list')\n});\n\n/**\n * The server's response to a {@linkcode ListPromptsRequest | prompts/list} request from the client.\n */\nexport const ListPromptsResultSchema = PaginatedResultSchema.extend({\n    prompts: z.array(PromptSchema)\n});\n\n/**\n * Parameters for a {@linkcode GetPromptRequest | prompts/get} request.\n */\nexport const GetPromptRequestParamsSchema = BaseRequestParamsSchema.extend({\n    /**\n     * The name of the prompt or prompt template.\n     */\n    name: z.string(),\n    /**\n     * Arguments to use for templating the prompt.\n     */\n    arguments: z.record(z.string(), z.string()).optional()\n});\n/**\n * Used by the client to get a prompt provided by the server.\n */\nexport const GetPromptRequestSchema = RequestSchema.extend({\n    method: z.literal('prompts/get'),\n    params: GetPromptRequestParamsSchema\n});\n\n/**\n * Text provided to or from an LLM.\n */\nexport const TextContentSchema = z.object({\n    type: z.literal('text'),\n    /**\n     * The text content of the message.\n     */\n    text: z.string(),\n\n    /**\n     * Optional annotations for the client.\n     */\n    annotations: AnnotationsSchema.optional(),\n\n    /**\n     * See [MCP specification](https://modelcontextprotocol.io/specification/2026-07-28/basic/index#general-fields)\n     * for notes on `_meta` usage.\n     */\n    _meta: z.record(z.string(), z.unknown()).optional()\n});\n\n/**\n * An image provided to or from an LLM.\n */\nexport const ImageContentSchema = z.object({\n    type: z.literal('image'),\n    /**\n     * The base64-encoded image data.\n     */\n    data: Base64Schema,\n    /**\n     * The MIME type of the image. Different providers may support different image types.\n     */\n    mimeType: z.string(),\n\n    /**\n     * Optional annotations for the client.\n     */\n    annotations: AnnotationsSchema.optional(),\n\n    /**\n     * See [MCP specification](https://modelcontextprotocol.io/specification/2026-07-28/basic/index#general-fields)\n     * for notes on `_meta` usage.\n     */\n    _meta: z.record(z.string(), z.unknown()).optional()\n});\n\n/**\n * Audio content provided to or from an LLM.\n */\nexport const AudioContentSchema = z.object({\n    type: z.literal('audio'),\n    /**\n     * The base64-encoded audio data.\n     */\n    data: Base64Schema,\n    /**\n     * The MIME type of the audio. Different providers may support different audio types.\n     */\n    mimeType: z.string(),\n\n    /**\n     * Optional annotations for the client.\n     */\n    annotations: AnnotationsSchema.optional(),\n\n    /**\n     * See [MCP specification](https://modelcontextprotocol.io/specification/2026-07-28/basic/index#general-fields)\n     * for notes on `_meta` usage.\n     */\n    _meta: z.record(z.string(), z.unknown()).optional()\n});\n\n/**\n * A tool call request from an assistant (LLM).\n * Represents the assistant's request to use a tool.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to calling LLM\n * provider APIs directly.\n */\nexport const ToolUseContentSchema = z.object({\n    type: z.literal('tool_use'),\n    /**\n     * The name of the tool to invoke.\n     * Must match a tool name from the request's tools array.\n     */\n    name: z.string(),\n    /**\n     * Unique identifier for this tool call.\n     * Used to correlate with `ToolResultContent` in subsequent messages.\n     */\n    id: z.string(),\n    /**\n     * Arguments to pass to the tool.\n     * Must conform to the tool's `inputSchema`.\n     */\n    input: z.record(z.string(), z.unknown()),\n    /**\n     * See [MCP specification](https://modelcontextprotocol.io/specification/2026-07-28/basic/index#general-fields)\n     * for notes on `_meta` usage.\n     */\n    _meta: z.record(z.string(), z.unknown()).optional()\n});\n\n/**\n * The contents of a resource, embedded into a prompt or tool call result.\n */\nexport const EmbeddedResourceSchema = z.object({\n    type: z.literal('resource'),\n    resource: z.union([TextResourceContentsSchema, BlobResourceContentsSchema]),\n    /**\n     * Optional annotations for the client.\n     */\n    annotations: AnnotationsSchema.optional(),\n    /**\n     * See [MCP specification](https://modelcontextprotocol.io/specification/2026-07-28/basic/index#general-fields)\n     * for notes on `_meta` usage.\n     */\n    _meta: z.record(z.string(), z.unknown()).optional()\n});\n\n/**\n * A resource that the server is capable of reading, included in a prompt or tool call result.\n *\n * Note: resource links returned by tools are not guaranteed to appear in the results of {@linkcode ListResourcesRequest | resources/list} requests.\n */\nexport const ResourceLinkSchema = ResourceSchema.extend({\n    type: z.literal('resource_link')\n});\n\n/**\n * A content block that can be used in prompts and tool results.\n */\nexport const ContentBlockSchema = z.union([\n    TextContentSchema,\n    ImageContentSchema,\n    AudioContentSchema,\n    ResourceLinkSchema,\n    EmbeddedResourceSchema\n]);\n\n/**\n * Describes a message returned as part of a prompt.\n */\nexport const PromptMessageSchema = z.object({\n    role: RoleSchema,\n    content: ContentBlockSchema\n});\n\n/**\n * The server's response to a {@linkcode GetPromptRequest | prompts/get} request from the client.\n */\nexport const GetPromptResultSchema = ResultSchema.extend({\n    /**\n     * An optional description for the prompt.\n     */\n    description: z.string().optional(),\n    messages: z.array(PromptMessageSchema)\n});\n\n/**\n * An optional notification from the server to the client, informing it that the list of prompts it offers has changed. This may be issued by servers without any previous subscription from the client.\n */\nexport const PromptListChangedNotificationSchema = NotificationSchema.extend({\n    method: z.literal('notifications/prompts/list_changed'),\n    params: NotificationsParamsSchema.optional()\n});\n\n/* Tools */\n/**\n * Additional properties describing a `Tool` to clients.\n *\n * NOTE: all properties in {@linkcode ToolAnnotations} are **hints**.\n * They are not guaranteed to provide a faithful description of\n * tool behavior (including descriptive properties like `title`).\n *\n * Clients should never make tool use decisions based on `ToolAnnotations`\n * received from untrusted servers.\n */\nexport const ToolAnnotationsSchema = z.object({\n    /**\n     * A human-readable title for the tool.\n     */\n    title: z.string().optional(),\n\n    /**\n     * If `true`, the tool does not modify its environment.\n     *\n     * Default: `false`\n     */\n    readOnlyHint: z.boolean().optional(),\n\n    /**\n     * If `true`, the tool may perform destructive updates to its environment.\n     * If `false`, the tool performs only additive updates.\n     *\n     * (This property is meaningful only when `readOnlyHint == false`)\n     *\n     * Default: `true`\n     */\n    destructiveHint: z.boolean().optional(),\n\n    /**\n     * If `true`, calling the tool repeatedly with the same arguments\n     * will have no additional effect on its environment.\n     *\n     * (This property is meaningful only when `readOnlyHint == false`)\n     *\n     * Default: `false`\n     */\n    idempotentHint: z.boolean().optional(),\n\n    /**\n     * If `true`, this tool may interact with an \"open world\" of external\n     * entities. If `false`, the tool's domain of interaction is closed.\n     * For example, the world of a web search tool is open, whereas that\n     * of a memory tool is not.\n     *\n     * Default: `true`\n     */\n    openWorldHint: z.boolean().optional()\n});\n\n/**\n * Execution-related properties for a tool.\n */\nexport const ToolExecutionSchema = z.object({\n    /**\n     * Indicates the tool's preference for task-augmented execution.\n     * - `\"required\"`: Clients MUST invoke the tool as a task\n     * - `\"optional\"`: Clients MAY invoke the tool as a task or normal request\n     * - `\"forbidden\"`: Clients MUST NOT attempt to invoke the tool as a task\n     *\n     * If not present, defaults to `\"forbidden\"`.\n     */\n    taskSupport: z.enum(['required', 'optional', 'forbidden']).optional()\n});\n\n/**\n * Definition for a tool the client can call.\n */\nexport const ToolSchema = z.object({\n    ...BaseMetadataSchema.shape,\n    ...IconsSchema.shape,\n    /**\n     * A human-readable description of the tool.\n     */\n    description: z.string().optional(),\n    /**\n     * A JSON Schema 2020-12 object defining the expected parameters for the tool.\n     * Must have `type: 'object'` at the root level per MCP spec.\n     */\n    inputSchema: z\n        .object({\n            type: z.literal('object'),\n            properties: z.record(z.string(), JSONValueSchema).optional(),\n            required: z.array(z.string()).optional()\n        })\n        .catchall(z.unknown()),\n    /**\n     * An optional JSON Schema 2020-12 document describing the structure of the tool's output\n     * returned in the `structuredContent` field of a `CallToolResult`.\n     *\n     * SEP-2106: any JSON Schema root is permitted (e.g. `type:'array'`, `oneOf`, `$ref`).\n     * The 2025-11-25 wire parse retains the `type:'object'` constraint via the frozen schema in\n     * `wire/rev2025-11-25/schemas.ts`; this neutral/public schema widens.\n     */\n    outputSchema: z.looseObject({ $schema: z.string().optional() }).optional(),\n    /**\n     * Optional additional tool information.\n     */\n    annotations: ToolAnnotationsSchema.optional(),\n    /**\n     * Execution-related properties for this tool.\n     */\n    execution: ToolExecutionSchema.optional(),\n\n    /**\n     * See [MCP specification](https://modelcontextprotocol.io/specification/2026-07-28/basic/index#general-fields)\n     * for notes on `_meta` usage.\n     */\n    _meta: z.record(z.string(), z.unknown()).optional()\n});\n\n/**\n * Sent from the client to request a list of tools the server has.\n */\nexport const ListToolsRequestSchema = PaginatedRequestSchema.extend({\n    method: z.literal('tools/list')\n});\n\n/**\n * The server's response to a {@linkcode ListToolsRequest | tools/list} request from the client.\n */\nexport const ListToolsResultSchema = PaginatedResultSchema.extend({\n    tools: z.array(ToolSchema)\n});\n\n/**\n * The server's response to a tool call.\n */\nexport const CallToolResultSchema = ResultSchema.extend({\n    /**\n     * A list of content objects that represent the result of the tool call.\n     *\n     * If the `Tool` does not define an outputSchema, this field MUST be present in the result.\n     * Required on the wire per the specification (it may be an empty array).\n     *\n     * Parse-tolerant: absent `content` defaults to `[]` (v1 parity — deployed\n     * servers omit it alongside `structuredContent`).\n     */\n    content: z.array(ContentBlockSchema).default([]),\n\n    /**\n     * Structured tool output.\n     *\n     * If the `Tool` defines an `outputSchema`, this field MUST be present in the result and\n     * contain a JSON value that matches the schema.\n     *\n     * SEP-2106: any JSON value is permitted (arrays, primitives, `null`). Narrow before property\n     * access. The 2025-11-25 wire parse retains the object-only constraint via the frozen schema\n     * in `wire/rev2025-11-25/schemas.ts`; this neutral/public schema widens.\n     */\n    structuredContent: z.unknown().optional(),\n\n    /**\n     * Whether the tool call ended in an error.\n     *\n     * If not set, this is assumed to be `false` (the call was successful).\n     *\n     * Any errors that originate from the tool SHOULD be reported inside the result\n     * object, with `isError` set to `true`, _not_ as an MCP protocol-level error\n     * response. Otherwise, the LLM would not be able to see that an error occurred\n     * and self-correct.\n     *\n     * However, any errors in _finding_ the tool, an error indicating that the\n     * server does not support tool calls, or any other exceptional conditions,\n     * should be reported as an MCP error response.\n     */\n    isError: z.boolean().optional()\n});\n\n/**\n * {@linkcode CallToolResultSchema} extended with backwards compatibility to protocol version 2024-10-07.\n */\nexport const CompatibilityCallToolResultSchema = CallToolResultSchema.or(\n    ResultSchema.extend({\n        toolResult: z.unknown()\n    })\n);\n\n/**\n * Parameters for a `tools/call` request.\n */\nexport const CallToolRequestParamsSchema = TaskAugmentedRequestParamsSchema.extend({\n    /**\n     * The name of the tool to call.\n     */\n    name: z.string(),\n    /**\n     * Arguments to pass to the tool.\n     */\n    arguments: z.record(z.string(), z.unknown()).optional()\n});\n\n/**\n * Used by the client to invoke a tool provided by the server.\n */\nexport const CallToolRequestSchema = RequestSchema.extend({\n    method: z.literal('tools/call'),\n    params: CallToolRequestParamsSchema\n});\n\n/**\n * An optional notification from the server to the client, informing it that the list of tools it offers has changed. This may be issued by servers without any previous subscription from the client.\n */\nexport const ToolListChangedNotificationSchema = NotificationSchema.extend({\n    method: z.literal('notifications/tools/list_changed'),\n    params: NotificationsParamsSchema.optional()\n});\n\n/**\n * Base schema for list changed subscription options (without callback).\n * Used internally for Zod validation of `autoRefresh` and `debounceMs`.\n */\nexport const ListChangedOptionsBaseSchema = z.object({\n    /**\n     * If `true`, the list will be refreshed automatically when a list changed notification is received.\n     * The callback will be called with the updated list.\n     *\n     * If `false`, the callback will be called with `null` items, allowing manual refresh.\n     *\n     * @default true\n     */\n    autoRefresh: z.boolean().default(true),\n    /**\n     * Debounce time in milliseconds for list changed notification processing.\n     *\n     * Multiple notifications received within this timeframe will only trigger one refresh.\n     * Set to `0` to disable debouncing.\n     *\n     * @default 300\n     */\n    debounceMs: z.number().int().nonnegative().default(300)\n});\n\n/* Logging */\n/**\n * The severity of a log message.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to stderr logging\n * (STDIO servers) or OpenTelemetry.\n */\nexport const LoggingLevelSchema = z.enum(['debug', 'info', 'notice', 'warning', 'error', 'critical', 'alert', 'emergency']);\n\n/**\n * Parameters for a `logging/setLevel` request.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to stderr logging\n * (STDIO servers) or OpenTelemetry.\n */\nexport const SetLevelRequestParamsSchema = BaseRequestParamsSchema.extend({\n    /**\n     * The level of logging that the client wants to receive from the server. The server should send all logs at this level and higher (i.e., more severe) to the client as `notifications/logging/message`.\n     */\n    level: LoggingLevelSchema\n});\n/**\n * A request from the client to the server, to enable or adjust logging.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to stderr logging\n * (STDIO servers) or OpenTelemetry.\n */\nexport const SetLevelRequestSchema = RequestSchema.extend({\n    method: z.literal('logging/setLevel'),\n    params: SetLevelRequestParamsSchema\n});\n\n/**\n * Parameters for a `notifications/message` notification.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to stderr logging\n * (STDIO servers) or OpenTelemetry.\n */\nexport const LoggingMessageNotificationParamsSchema = NotificationsParamsSchema.extend({\n    /**\n     * The severity of this log message.\n     */\n    level: LoggingLevelSchema,\n    /**\n     * An optional name of the logger issuing this message.\n     */\n    logger: z.string().optional(),\n    /**\n     * The data to be logged, such as a string message or an object. Any JSON serializable type is allowed here.\n     */\n    data: z.unknown()\n});\n/**\n * Notification of a log message passed from server to client. If no `logging/setLevel` request has been sent from the client, the server MAY decide which messages to send automatically.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to stderr logging\n * (STDIO servers) or OpenTelemetry.\n */\nexport const LoggingMessageNotificationSchema = NotificationSchema.extend({\n    method: z.literal('notifications/message'),\n    params: LoggingMessageNotificationParamsSchema\n});\n\n/* Sampling */\n/**\n * Hints to use for model selection.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to calling LLM\n * provider APIs directly.\n */\nexport const ModelHintSchema = z.object({\n    /**\n     * A hint for a model name.\n     */\n    name: z.string().optional()\n});\n\n/**\n * The server's preferences for model selection, requested of the client during sampling.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to calling LLM\n * provider APIs directly.\n */\nexport const ModelPreferencesSchema = z.object({\n    /**\n     * Optional hints to use for model selection.\n     */\n    hints: z.array(ModelHintSchema).optional(),\n    /**\n     * How much to prioritize cost when selecting a model.\n     */\n    costPriority: z.number().min(0).max(1).optional(),\n    /**\n     * How much to prioritize sampling speed (latency) when selecting a model.\n     */\n    speedPriority: z.number().min(0).max(1).optional(),\n    /**\n     * How much to prioritize intelligence and capabilities when selecting a model.\n     */\n    intelligencePriority: z.number().min(0).max(1).optional()\n});\n\n/**\n * Controls tool usage behavior in sampling requests.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to calling LLM\n * provider APIs directly.\n */\nexport const ToolChoiceSchema = z.object({\n    /**\n     * Controls when tools are used:\n     * - `\"auto\"`: Model decides whether to use tools (default)\n     * - `\"required\"`: Model MUST use at least one tool before completing\n     * - `\"none\"`: Model MUST NOT use any tools\n     */\n    mode: z.enum(['auto', 'required', 'none']).optional()\n});\n\n/**\n * The result of a tool execution, provided by the user (server).\n * Represents the outcome of invoking a tool requested via `ToolUseContent`.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to calling LLM\n * provider APIs directly.\n */\nexport const ToolResultContentSchema = z.object({\n    type: z.literal('tool_result'),\n    toolUseId: z.string().describe('The unique identifier for the corresponding tool call.'),\n    content: z.array(ContentBlockSchema),\n    /**\n     * SEP-2106: any JSON value is permitted. The 2025-11-25 wire parse retains the object-only\n     * constraint via the frozen schema in `wire/rev2025-11-25/schemas.ts`.\n     */\n    structuredContent: z.unknown().optional(),\n    isError: z.boolean().optional(),\n\n    /**\n     * See [MCP specification](https://modelcontextprotocol.io/specification/2026-07-28/basic/index#general-fields)\n     * for notes on `_meta` usage.\n     */\n    _meta: z.record(z.string(), z.unknown()).optional()\n});\n\n/**\n * Basic content types for sampling responses (without tool use).\n * Used for backwards-compatible {@linkcode CreateMessageResult} when tools are not used.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to calling LLM\n * provider APIs directly.\n */\nexport const SamplingContentSchema = z.discriminatedUnion('type', [TextContentSchema, ImageContentSchema, AudioContentSchema]);\n\n/**\n * Content block types allowed in sampling messages.\n * This includes text, image, audio, tool use requests, and tool results.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to calling LLM\n * provider APIs directly.\n */\nexport const SamplingMessageContentBlockSchema = z.discriminatedUnion('type', [\n    TextContentSchema,\n    ImageContentSchema,\n    AudioContentSchema,\n    ToolUseContentSchema,\n    ToolResultContentSchema\n]);\n\n/**\n * Describes a message issued to or received from an LLM API.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to calling LLM\n * provider APIs directly.\n */\nexport const SamplingMessageSchema = z.object({\n    role: RoleSchema,\n    content: z.union([SamplingMessageContentBlockSchema, z.array(SamplingMessageContentBlockSchema)]),\n    /**\n     * See [MCP specification](https://modelcontextprotocol.io/specification/2026-07-28/basic/index#general-fields)\n     * for notes on `_meta` usage.\n     */\n    _meta: z.record(z.string(), z.unknown()).optional()\n});\n\n/**\n * Parameters for a `sampling/createMessage` request.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to calling LLM\n * provider APIs directly.\n */\nexport const CreateMessageRequestParamsSchema = TaskAugmentedRequestParamsSchema.extend({\n    messages: z.array(SamplingMessageSchema),\n    /**\n     * The server's preferences for which model to select. The client MAY modify or omit this request.\n     */\n    modelPreferences: ModelPreferencesSchema.optional(),\n    /**\n     * An optional system prompt the server wants to use for sampling. The client MAY modify or omit this prompt.\n     */\n    systemPrompt: z.string().optional(),\n    /**\n     * A request to include context from one or more MCP servers (including the caller), to be attached to the prompt.\n     * The client MAY ignore this request.\n     *\n     * Default is `\"none\"`. The values `\"thisServer\"` and `\"allServers\"` are deprecated (SEP-2596): servers SHOULD\n     * omit this field or use `\"none\"`, and SHOULD only use the deprecated values if the client declares\n     * `ClientCapabilities`.`sampling.context`.\n     *\n     * @deprecated The `\"thisServer\"` and `\"allServers\"` values are deprecated as of protocol version 2025-11-25\n     * (SEP-2596) and will be removed no later than the Sampling feature itself (SEP-2577). Omit this field or use `\"none\"`.\n     */\n    includeContext: z.enum(['none', 'thisServer', 'allServers']).optional(),\n    temperature: z.number().optional(),\n    /**\n     * The requested maximum number of tokens to sample (to prevent runaway completions).\n     *\n     * The client MAY choose to sample fewer tokens than the requested maximum.\n     */\n    maxTokens: z.number().int(),\n    stopSequences: z.array(z.string()).optional(),\n    /**\n     * Optional metadata to pass through to the LLM provider. The format of this metadata is provider-specific.\n     */\n    metadata: JSONObjectSchema.optional(),\n    /**\n     * Tools that the model may use during generation.\n     * The client MUST return an error if this field is provided but `ClientCapabilities`.`sampling.tools` is not declared.\n     */\n    tools: z.array(ToolSchema).optional(),\n    /**\n     * Controls how the model uses tools.\n     * The client MUST return an error if this field is provided but `ClientCapabilities`.`sampling.tools` is not declared.\n     * Default is `{ mode: \"auto\" }`.\n     */\n    toolChoice: ToolChoiceSchema.optional()\n});\n/**\n * A request from the server to sample an LLM via the client. The client has full discretion over which model to select. The client should also inform the user before beginning sampling, to allow them to inspect the request (human in the loop) and decide whether to approve it.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to calling LLM\n * provider APIs directly.\n */\nexport const CreateMessageRequestSchema = RequestSchema.extend({\n    method: z.literal('sampling/createMessage'),\n    params: CreateMessageRequestParamsSchema\n});\n\n/**\n * The client's response to a `sampling/create_message` request from the server.\n * This is the backwards-compatible version that returns single content (no arrays).\n * Used when the request does not include tools.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to calling LLM\n * provider APIs directly.\n */\nexport const CreateMessageResultSchema = ResultSchema.extend({\n    /**\n     * The name of the model that generated the message.\n     */\n    model: z.string(),\n    /**\n     * The reason why sampling stopped, if known.\n     *\n     * Standard values:\n     * - `\"endTurn\"`: Natural end of the assistant's turn\n     * - `\"stopSequence\"`: A stop sequence was encountered\n     * - `\"maxTokens\"`: Maximum token limit was reached\n     *\n     * This field is an open string to allow for provider-specific stop reasons.\n     */\n    stopReason: z.optional(z.enum(['endTurn', 'stopSequence', 'maxTokens']).or(z.string())),\n    role: RoleSchema,\n    /**\n     * Response content. Single content block (text, image, or audio).\n     */\n    content: SamplingContentSchema\n});\n\n/**\n * The client's response to a `sampling/create_message` request when tools were provided.\n * This version supports array content for tool use flows.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to calling LLM\n * provider APIs directly.\n */\nexport const CreateMessageResultWithToolsSchema = ResultSchema.extend({\n    /**\n     * The name of the model that generated the message.\n     */\n    model: z.string(),\n    /**\n     * The reason why sampling stopped, if known.\n     *\n     * Standard values:\n     * - `\"endTurn\"`: Natural end of the assistant's turn\n     * - `\"stopSequence\"`: A stop sequence was encountered\n     * - `\"maxTokens\"`: Maximum token limit was reached\n     * - `\"toolUse\"`: The model wants to use one or more tools\n     *\n     * This field is an open string to allow for provider-specific stop reasons.\n     */\n    stopReason: z.optional(z.enum(['endTurn', 'stopSequence', 'maxTokens', 'toolUse']).or(z.string())),\n    role: RoleSchema,\n    /**\n     * Response content. May be a single block or array. May include `ToolUseContent` if `stopReason` is `\"toolUse\"`.\n     */\n    content: z.union([SamplingMessageContentBlockSchema, z.array(SamplingMessageContentBlockSchema)])\n});\n\n/* Elicitation */\n/**\n * Primitive schema definition for boolean fields.\n */\nexport const BooleanSchemaSchema = z.object({\n    type: z.literal('boolean'),\n    title: z.string().optional(),\n    description: z.string().optional(),\n    default: z.boolean().optional()\n});\n\n/**\n * Primitive schema definition for string fields.\n */\nexport const StringSchemaSchema = z.object({\n    type: z.literal('string'),\n    title: z.string().optional(),\n    description: z.string().optional(),\n    minLength: z.number().optional(),\n    maxLength: z.number().optional(),\n    format: z.enum(['email', 'uri', 'date', 'date-time']).optional(),\n    default: z.string().optional()\n});\n\n/**\n * Primitive schema definition for number fields.\n */\nexport const NumberSchemaSchema = z.object({\n    type: z.enum(['number', 'integer']),\n    title: z.string().optional(),\n    description: z.string().optional(),\n    minimum: z.number().optional(),\n    maximum: z.number().optional(),\n    default: z.number().optional()\n});\n\n/**\n * Schema for single-selection enumeration without display titles for options.\n */\nexport const UntitledSingleSelectEnumSchemaSchema = z.object({\n    type: z.literal('string'),\n    title: z.string().optional(),\n    description: z.string().optional(),\n    enum: z.array(z.string()),\n    default: z.string().optional()\n});\n\n/**\n * Schema for single-selection enumeration with display titles for each option.\n */\nexport const TitledSingleSelectEnumSchemaSchema = z.object({\n    type: z.literal('string'),\n    title: z.string().optional(),\n    description: z.string().optional(),\n    oneOf: z.array(\n        z.object({\n            const: z.string(),\n            title: z.string()\n        })\n    ),\n    default: z.string().optional()\n});\n\n/**\n * Use {@linkcode TitledSingleSelectEnumSchema} instead.\n * This interface will be removed in a future version.\n */\nexport const LegacyTitledEnumSchemaSchema = z.object({\n    type: z.literal('string'),\n    title: z.string().optional(),\n    description: z.string().optional(),\n    enum: z.array(z.string()),\n    enumNames: z.array(z.string()).optional(),\n    default: z.string().optional()\n});\n\n// Combined single selection enumeration\nexport const SingleSelectEnumSchemaSchema = z.union([UntitledSingleSelectEnumSchemaSchema, TitledSingleSelectEnumSchemaSchema]);\n\n/**\n * Schema for multiple-selection enumeration without display titles for options.\n */\nexport const UntitledMultiSelectEnumSchemaSchema = z.object({\n    type: z.literal('array'),\n    title: z.string().optional(),\n    description: z.string().optional(),\n    minItems: z.number().optional(),\n    maxItems: z.number().optional(),\n    items: z.object({\n        type: z.literal('string'),\n        enum: z.array(z.string())\n    }),\n    default: z.array(z.string()).optional()\n});\n\n/**\n * Schema for multiple-selection enumeration with display titles for each option.\n */\nexport const TitledMultiSelectEnumSchemaSchema = z.object({\n    type: z.literal('array'),\n    title: z.string().optional(),\n    description: z.string().optional(),\n    minItems: z.number().optional(),\n    maxItems: z.number().optional(),\n    items: z.object({\n        anyOf: z.array(\n            z.object({\n                const: z.string(),\n                title: z.string()\n            })\n        )\n    }),\n    default: z.array(z.string()).optional()\n});\n\n/**\n * Combined schema for multiple-selection enumeration\n */\nexport const MultiSelectEnumSchemaSchema = z.union([UntitledMultiSelectEnumSchemaSchema, TitledMultiSelectEnumSchemaSchema]);\n\n/**\n * Primitive schema definition for enum fields.\n */\nexport const EnumSchemaSchema = z.union([LegacyTitledEnumSchemaSchema, SingleSelectEnumSchemaSchema, MultiSelectEnumSchemaSchema]);\n\n/**\n * Union of all primitive schema definitions.\n */\nexport const PrimitiveSchemaDefinitionSchema = z.union([EnumSchemaSchema, BooleanSchemaSchema, StringSchemaSchema, NumberSchemaSchema]);\n\n/**\n * Parameters for an `elicitation/create` request for form-based elicitation.\n */\nexport const ElicitRequestFormParamsSchema = TaskAugmentedRequestParamsSchema.extend({\n    /**\n     * The elicitation mode.\n     *\n     * Optional for backward compatibility. Clients MUST treat missing `mode` as `\"form\"`.\n     */\n    mode: z.literal('form').optional(),\n    /**\n     * The message to present to the user describing what information is being requested.\n     */\n    message: z.string(),\n    /**\n     * A restricted subset of JSON Schema.\n     * Only top-level properties are allowed, without nesting.\n     */\n    requestedSchema: z\n        .object({\n            type: z.literal('object'),\n            properties: z.record(z.string(), PrimitiveSchemaDefinitionSchema),\n            required: z.array(z.string()).optional()\n        })\n        .catchall(z.unknown())\n});\n\n/**\n * Parameters for an {@linkcode ElicitRequest | elicitation/create} request for URL-based elicitation.\n */\nexport const ElicitRequestURLParamsSchema = TaskAugmentedRequestParamsSchema.extend({\n    /**\n     * The elicitation mode.\n     */\n    mode: z.literal('url'),\n    /**\n     * The message to present to the user explaining why the interaction is needed.\n     */\n    message: z.string(),\n    /**\n     * The ID of the elicitation, which must be unique within the context of the server.\n     * The client MUST treat this ID as an opaque value.\n     *\n     * @deprecated Removed from the spec by #2891 (2026-07-28). The client learns the\n     * outcome of an out-of-band interaction by retrying the original request; no\n     * server-initiated completion signal exists in the 2026-07-28 revision. Kept here\n     * for the 2025-era URL-mode flow only.\n     */\n    elicitationId: z.string(),\n    /**\n     * The URL that the user should navigate to.\n     */\n    url: z.string().url()\n});\n\n/**\n * The parameters for a request to elicit additional information from the user via the client.\n */\nexport const ElicitRequestParamsSchema = z.union([ElicitRequestFormParamsSchema, ElicitRequestURLParamsSchema]);\n\n/**\n * A request from the server to elicit user input via the client.\n * The client should present the message and form fields to the user (form mode)\n * or navigate to a URL (URL mode).\n */\nexport const ElicitRequestSchema = RequestSchema.extend({\n    method: z.literal('elicitation/create'),\n    params: ElicitRequestParamsSchema\n});\n\n/**\n * Parameters for a {@linkcode ElicitationCompleteNotification | notifications/elicitation/complete} notification.\n *\n * @deprecated Removed from the spec by #2891 (2026-07-28). The client learns the outcome\n * of an out-of-band interaction by retrying the original request; no server-initiated\n * completion signal exists in the 2026-07-28 revision. Kept here for the 2025-era flow\n * only. The 2026-07-28 wire codec excludes this notification.\n * @category notifications/elicitation/complete\n */\nexport const ElicitationCompleteNotificationParamsSchema = NotificationsParamsSchema.extend({\n    /**\n     * The ID of the elicitation that completed.\n     *\n     * @deprecated See {@linkcode ElicitationCompleteNotificationParamsSchema}.\n     */\n    elicitationId: z.string()\n});\n\n/**\n * A notification from the server to the client, informing it of a completion of an out-of-band elicitation request.\n *\n * @deprecated Removed from the spec by #2891 (2026-07-28). The client learns the outcome\n * of an out-of-band interaction by retrying the original request; no server-initiated\n * completion signal exists in the 2026-07-28 revision. Kept here for the 2025-era flow\n * only. The 2026-07-28 wire codec excludes this notification.\n * @category notifications/elicitation/complete\n */\nexport const ElicitationCompleteNotificationSchema = NotificationSchema.extend({\n    method: z.literal('notifications/elicitation/complete'),\n    params: ElicitationCompleteNotificationParamsSchema\n});\n\n/**\n * The client's response to an {@linkcode ElicitRequest | elicitation/create} request from the server.\n */\nexport const ElicitResultSchema = ResultSchema.extend({\n    /**\n     * The user action in response to the elicitation.\n     * - `\"accept\"`: User submitted the form/confirmed the action\n     * - `\"decline\"`: User explicitly declined the action\n     * - `\"cancel\"`: User dismissed without making an explicit choice\n     */\n    action: z.enum(['accept', 'decline', 'cancel']),\n    /**\n     * The submitted form data, only present when action is `\"accept\"`.\n     * Contains values matching the requested schema.\n     * Per MCP spec, content is \"typically omitted\" for decline/cancel actions.\n     * We normalize `null` to `undefined` for leniency while maintaining type compatibility.\n     */\n    content: z.preprocess(\n        val => (val === null ? undefined : val),\n        z.record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.array(z.string())])).optional()\n    )\n});\n\n/* Autocomplete */\n/**\n * A reference to a resource or resource template definition.\n */\nexport const ResourceTemplateReferenceSchema = z.object({\n    type: z.literal('ref/resource'),\n    /**\n     * The URI or URI template of the resource.\n     */\n    uri: z.string()\n});\n\n/**\n * Identifies a prompt.\n */\nexport const PromptReferenceSchema = z.object({\n    type: z.literal('ref/prompt'),\n    /**\n     * The name of the prompt or prompt template\n     */\n    name: z.string()\n});\n\n/**\n * Parameters for a {@linkcode CompleteRequest | completion/complete} request.\n */\nexport const CompleteRequestParamsSchema = BaseRequestParamsSchema.extend({\n    ref: z.union([PromptReferenceSchema, ResourceTemplateReferenceSchema]),\n    /**\n     * The argument's information\n     */\n    argument: z.object({\n        /**\n         * The name of the argument\n         */\n        name: z.string(),\n        /**\n         * The value of the argument to use for completion matching.\n         */\n        value: z.string()\n    }),\n    context: z\n        .object({\n            /**\n             * Previously-resolved variables in a URI template or prompt.\n             */\n            arguments: z.record(z.string(), z.string()).optional()\n        })\n        .optional()\n});\n/**\n * A request from the client to the server, to ask for completion options.\n */\nexport const CompleteRequestSchema = RequestSchema.extend({\n    method: z.literal('completion/complete'),\n    params: CompleteRequestParamsSchema\n});\n\n/**\n * The server's response to a {@linkcode CompleteRequest | completion/complete} request\n */\nexport const CompleteResultSchema = ResultSchema.extend({\n    completion: z.looseObject({\n        /**\n         * An array of completion values. Must not exceed 100 items.\n         */\n        values: z.array(z.string()).max(100),\n        /**\n         * The total number of completion options available. This can exceed the number of values actually sent in the response.\n         */\n        total: z.optional(z.number().int()),\n        /**\n         * Indicates whether there are additional completion options beyond those provided in the current response, even if the exact total is unknown.\n         */\n        hasMore: z.optional(z.boolean())\n    })\n});\n\n/* Roots */\n/**\n * Represents a root directory or file that the server can operate on.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to passing paths via\n * tool parameters, resource URIs, or configuration.\n */\nexport const RootSchema = z.object({\n    /**\n     * The URI identifying the root. This *must* start with `file://` for now.\n     */\n    uri: z.string().startsWith('file://'),\n    /**\n     * An optional name for the root.\n     */\n    name: z.string().optional(),\n\n    /**\n     * See [MCP specification](https://modelcontextprotocol.io/specification/2026-07-28/basic/index#general-fields)\n     * for notes on `_meta` usage.\n     */\n    _meta: z.record(z.string(), z.unknown()).optional()\n});\n\n/**\n * Sent from the server to request a list of root URIs from the client.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to passing paths via\n * tool parameters, resource URIs, or configuration.\n */\nexport const ListRootsRequestSchema = RequestSchema.extend({\n    method: z.literal('roots/list'),\n    params: BaseRequestParamsSchema.optional()\n});\n\n/**\n * The client's response to a `roots/list` request from the server.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to passing paths via\n * tool parameters, resource URIs, or configuration.\n */\nexport const ListRootsResultSchema = ResultSchema.extend({\n    roots: z.array(RootSchema)\n});\n\n/**\n * A notification from the client to the server, informing it that the list of roots has changed.\n *\n * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n * in the specification for at least twelve months. Migrate to passing paths via\n * tool parameters, resource URIs, or configuration.\n */\nexport const RootsListChangedNotificationSchema = NotificationSchema.extend({\n    method: z.literal('notifications/roots/list_changed'),\n    params: NotificationsParamsSchema.optional()\n});\n\n/* ───────────────────────────────────────────────────────────────────────────\n * Tasks (2025-11-25 wire vocabulary, DEPRECATED)\n *\n * The task message surface defined by the 2025-11-25 protocol revision. These\n * schemas are kept in the neutral layer so the public Task* types stay\n * nameable without a cross-layer import into wire/rev*; the wire-parse\n * contract for them is the FROZEN copy in wire/rev2025-11-25/schemas.ts.\n *\n * They appear in NO role aggregate below and no API signature — nameable-only\n * vocabulary for interop with task-capable 2025 peers (#2248). Removable at\n * the major version that drops 2025-era support.\n * ─────────────────────────────────────────────────────────────────────────── */\n\n/**\n * Task creation parameters, used to ask that the server create a task to represent a request.\n *\n * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n */\nexport const TaskCreationParamsSchema = z.looseObject({\n    /**\n     * Requested duration in milliseconds to retain task from creation.\n     */\n    ttl: z.number().optional(),\n\n    /**\n     * Time in milliseconds to wait between task status requests.\n     */\n    pollInterval: z.number().optional()\n});\n\n/**\n * The status of a task.\n *\n * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n */\nexport const TaskStatusSchema = z.enum(['working', 'input_required', 'completed', 'failed', 'cancelled']);\n\n/**\n * A pollable state object associated with a request.\n *\n * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n */\nexport const TaskSchema = z.object({\n    taskId: z.string(),\n    status: TaskStatusSchema,\n    /**\n     * Time in milliseconds to keep task results available after completion.\n     * If `null`, the task has unlimited lifetime until manually cleaned up.\n     */\n    ttl: z.union([z.number(), z.null()]),\n    /**\n     * ISO 8601 timestamp when the task was created.\n     */\n    createdAt: z.string(),\n    /**\n     * ISO 8601 timestamp when the task was last updated.\n     */\n    lastUpdatedAt: z.string(),\n    pollInterval: z.optional(z.number()),\n    /**\n     * Optional diagnostic message for failed tasks or other status information.\n     */\n    statusMessage: z.optional(z.string())\n});\n\n/**\n * Result returned when a task is created, containing the task data wrapped in a `task` field.\n *\n * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n */\nexport const CreateTaskResultSchema = ResultSchema.extend({\n    task: TaskSchema\n});\n\n/**\n * Parameters for task status notification.\n *\n * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n */\nexport const TaskStatusNotificationParamsSchema = NotificationsParamsSchema.merge(TaskSchema);\n\n/**\n * A notification sent when a task's status changes.\n *\n * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n */\nexport const TaskStatusNotificationSchema = NotificationSchema.extend({\n    method: z.literal('notifications/tasks/status'),\n    params: TaskStatusNotificationParamsSchema\n});\n\n/**\n * A request to get the state of a specific task.\n *\n * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n */\nexport const GetTaskRequestSchema = RequestSchema.extend({\n    method: z.literal('tasks/get'),\n    params: BaseRequestParamsSchema.extend({\n        taskId: z.string()\n    })\n});\n\n/**\n * The response to a {@linkcode GetTaskRequest | tasks/get} request.\n *\n * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n */\nexport const GetTaskResultSchema = ResultSchema.merge(TaskSchema);\n\n/**\n * A request to get the result of a specific task.\n *\n * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n */\nexport const GetTaskPayloadRequestSchema = RequestSchema.extend({\n    method: z.literal('tasks/result'),\n    params: BaseRequestParamsSchema.extend({\n        taskId: z.string()\n    })\n});\n\n/**\n * The response to a `tasks/result` request.\n * The structure matches the result type of the original request.\n * For example, a {@linkcode CallToolRequest | tools/call} task would return the `CallToolResult` structure.\n *\n *\n * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n */\nexport const GetTaskPayloadResultSchema = ResultSchema.loose();\n\n/**\n * A request to list tasks.\n *\n * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n */\nexport const ListTasksRequestSchema = PaginatedRequestSchema.extend({\n    method: z.literal('tasks/list')\n});\n\n/**\n * The response to a {@linkcode ListTasksRequest | tasks/list} request.\n *\n * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n */\nexport const ListTasksResultSchema = PaginatedResultSchema.extend({\n    tasks: z.array(TaskSchema)\n});\n\n/**\n * A request to cancel a specific task.\n *\n * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n */\nexport const CancelTaskRequestSchema = RequestSchema.extend({\n    method: z.literal('tasks/cancel'),\n    params: BaseRequestParamsSchema.extend({\n        taskId: z.string()\n    })\n});\n\n/**\n * The response to a {@linkcode CancelTaskRequest | tasks/cancel} request.\n *\n * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n */\nexport const CancelTaskResultSchema = ResultSchema.merge(TaskSchema);\n\n/* Client messages */\n// NOTE (Q1 increment 2): the role unions below are the NEUTRAL message sets.\n// The 2025-era task vocabulary (tasks/* methods, task results, the task\n// status notification) is 2025-only WIRE vocabulary; the deprecated Task*\n// schemas above are nameable-only and appear in NO role aggregate and no API\n// signature. The era's full wire role unions live in\n// `wire/rev2025-11-25/schemas.ts`.\nexport const ClientRequestSchema = z.union([\n    PingRequestSchema,\n    InitializeRequestSchema,\n    DiscoverRequestSchema,\n    CompleteRequestSchema,\n    SetLevelRequestSchema,\n    GetPromptRequestSchema,\n    ListPromptsRequestSchema,\n    ListResourcesRequestSchema,\n    ListResourceTemplatesRequestSchema,\n    ReadResourceRequestSchema,\n    SubscribeRequestSchema,\n    UnsubscribeRequestSchema,\n    SubscriptionsListenRequestSchema,\n    CallToolRequestSchema,\n    ListToolsRequestSchema\n]);\n\nexport const ClientNotificationSchema = z.union([\n    CancelledNotificationSchema,\n    ProgressNotificationSchema,\n    InitializedNotificationSchema,\n    RootsListChangedNotificationSchema\n]);\n\nexport const ClientResultSchema = z.union([\n    EmptyResultSchema,\n    CreateMessageResultSchema,\n    CreateMessageResultWithToolsSchema,\n    ElicitResultSchema,\n    ListRootsResultSchema\n]);\n\n/* Server messages */\nexport const ServerRequestSchema = z.union([PingRequestSchema, CreateMessageRequestSchema, ElicitRequestSchema, ListRootsRequestSchema]);\n\nexport const ServerNotificationSchema = z.union([\n    CancelledNotificationSchema,\n    ProgressNotificationSchema,\n    LoggingMessageNotificationSchema,\n    ResourceUpdatedNotificationSchema,\n    ResourceListChangedNotificationSchema,\n    ToolListChangedNotificationSchema,\n    PromptListChangedNotificationSchema,\n    SubscriptionsAcknowledgedNotificationSchema,\n    ElicitationCompleteNotificationSchema\n]);\n\nexport const ServerResultSchema = z.union([\n    EmptyResultSchema,\n    InitializeResultSchema,\n    DiscoverResultSchema,\n    CompleteResultSchema,\n    GetPromptResultSchema,\n    ListPromptsResultSchema,\n    ListResourcesResultSchema,\n    ListResourceTemplatesResultSchema,\n    ReadResourceResultSchema,\n    CallToolResultSchema,\n    ListToolsResultSchema,\n    SubscriptionsListenResultSchema\n]);\n", "import * as z from 'zod/v4';\n\n/**\n * Reusable URL validation that disallows `javascript:` scheme\n */\nexport const SafeUrlSchema = z\n    .url()\n    .superRefine((val, ctx) => {\n        if (!URL.canParse(val)) {\n            ctx.addIssue({\n                code: z.ZodIssueCode.custom,\n                message: 'URL must be parseable',\n                fatal: true\n            });\n\n            return z.NEVER;\n        }\n    })\n    .refine(\n        url => {\n            const u = new URL(url);\n            return u.protocol !== 'javascript:' && u.protocol !== 'data:' && u.protocol !== 'vbscript:';\n        },\n        { message: 'URL cannot use javascript:, data:, or vbscript: scheme' }\n    );\n\n/**\n * RFC 9728 OAuth Protected Resource Metadata\n */\nexport const OAuthProtectedResourceMetadataSchema = z.looseObject({\n    resource: z.string().url(),\n    authorization_servers: z.array(SafeUrlSchema).optional(),\n    jwks_uri: z.string().url().optional(),\n    scopes_supported: z.array(z.string()).optional(),\n    bearer_methods_supported: z.array(z.string()).optional(),\n    resource_signing_alg_values_supported: z.array(z.string()).optional(),\n    resource_name: z.string().optional(),\n    resource_documentation: z.string().optional(),\n    resource_policy_uri: z.string().url().optional(),\n    resource_tos_uri: z.string().url().optional(),\n    tls_client_certificate_bound_access_tokens: z.boolean().optional(),\n    authorization_details_types_supported: z.array(z.string()).optional(),\n    dpop_signing_alg_values_supported: z.array(z.string()).optional(),\n    dpop_bound_access_tokens_required: z.boolean().optional()\n});\n\n/**\n * RFC 8414 OAuth 2.0 Authorization Server Metadata\n */\nexport const OAuthMetadataSchema = z.looseObject({\n    issuer: z.string(),\n    authorization_endpoint: SafeUrlSchema,\n    token_endpoint: SafeUrlSchema,\n    registration_endpoint: SafeUrlSchema.optional(),\n    scopes_supported: z.array(z.string()).optional(),\n    response_types_supported: z.array(z.string()),\n    response_modes_supported: z.array(z.string()).optional(),\n    grant_types_supported: z.array(z.string()).optional(),\n    token_endpoint_auth_methods_supported: z.array(z.string()).optional(),\n    token_endpoint_auth_signing_alg_values_supported: z.array(z.string()).optional(),\n    service_documentation: SafeUrlSchema.optional(),\n    revocation_endpoint: SafeUrlSchema.optional(),\n    revocation_endpoint_auth_methods_supported: z.array(z.string()).optional(),\n    revocation_endpoint_auth_signing_alg_values_supported: z.array(z.string()).optional(),\n    introspection_endpoint: z.string().optional(),\n    introspection_endpoint_auth_methods_supported: z.array(z.string()).optional(),\n    introspection_endpoint_auth_signing_alg_values_supported: z.array(z.string()).optional(),\n    code_challenge_methods_supported: z.array(z.string()).optional(),\n    client_id_metadata_document_supported: z.boolean().optional(),\n    // eslint-disable-next-line unicorn/prefer-top-level-await -- Zod .catch(), not a Promise chain\n    authorization_response_iss_parameter_supported: z.boolean().optional().catch(undefined),\n    /**\n     * RFC 9449 §5.1 (DPoP, SEP-1932): the JWS `alg` values this authorization server accepts for\n     * DPoP proofs at the token endpoint. A server supporting DPoP MUST publish this field.\n     */\n    dpop_signing_alg_values_supported: z.array(z.string()).optional()\n});\n\n/**\n * OpenID Connect Discovery 1.0 Provider Metadata\n *\n * @see https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata\n */\nexport const OpenIdProviderMetadataSchema = z.looseObject({\n    issuer: z.string(),\n    authorization_endpoint: SafeUrlSchema,\n    token_endpoint: SafeUrlSchema,\n    userinfo_endpoint: SafeUrlSchema.optional(),\n    jwks_uri: SafeUrlSchema,\n    registration_endpoint: SafeUrlSchema.optional(),\n    scopes_supported: z.array(z.string()).optional(),\n    response_types_supported: z.array(z.string()),\n    response_modes_supported: z.array(z.string()).optional(),\n    grant_types_supported: z.array(z.string()).optional(),\n    acr_values_supported: z.array(z.string()).optional(),\n    subject_types_supported: z.array(z.string()),\n    id_token_signing_alg_values_supported: z.array(z.string()),\n    id_token_encryption_alg_values_supported: z.array(z.string()).optional(),\n    id_token_encryption_enc_values_supported: z.array(z.string()).optional(),\n    userinfo_signing_alg_values_supported: z.array(z.string()).optional(),\n    userinfo_encryption_alg_values_supported: z.array(z.string()).optional(),\n    userinfo_encryption_enc_values_supported: z.array(z.string()).optional(),\n    request_object_signing_alg_values_supported: z.array(z.string()).optional(),\n    request_object_encryption_alg_values_supported: z.array(z.string()).optional(),\n    request_object_encryption_enc_values_supported: z.array(z.string()).optional(),\n    token_endpoint_auth_methods_supported: z.array(z.string()).optional(),\n    token_endpoint_auth_signing_alg_values_supported: z.array(z.string()).optional(),\n    display_values_supported: z.array(z.string()).optional(),\n    claim_types_supported: z.array(z.string()).optional(),\n    claims_supported: z.array(z.string()).optional(),\n    service_documentation: z.string().optional(),\n    claims_locales_supported: z.array(z.string()).optional(),\n    ui_locales_supported: z.array(z.string()).optional(),\n    claims_parameter_supported: z.boolean().optional(),\n    request_parameter_supported: z.boolean().optional(),\n    request_uri_parameter_supported: z.boolean().optional(),\n    require_request_uri_registration: z.boolean().optional(),\n    op_policy_uri: SafeUrlSchema.optional(),\n    op_tos_uri: SafeUrlSchema.optional(),\n    client_id_metadata_document_supported: z.boolean().optional(),\n    // eslint-disable-next-line unicorn/prefer-top-level-await -- Zod .catch(), not a Promise chain\n    authorization_response_iss_parameter_supported: z.boolean().optional().catch(undefined)\n});\n\n/**\n * OpenID Connect Discovery metadata that may include OAuth 2.0 fields\n * This schema represents the real-world scenario where OIDC providers\n * return a mix of OpenID Connect and OAuth 2.0 metadata fields\n */\nexport const OpenIdProviderDiscoveryMetadataSchema = z.object({\n    ...OpenIdProviderMetadataSchema.shape,\n    ...OAuthMetadataSchema.pick({\n        code_challenge_methods_supported: true\n    }).shape\n});\n\n/**\n * OAuth 2.1 token response\n */\nexport const OAuthTokensSchema = z\n    .object({\n        access_token: z.string(),\n        id_token: z.string().optional(), // Optional for OAuth 2.1, but necessary in OpenID Connect\n        token_type: z.string(),\n        expires_in: z.coerce.number().optional(),\n        scope: z.string().optional(),\n        refresh_token: z.string().optional(),\n        /**\n         * Not part of the wire format: the authorization server this value was obtained from, added by\n         * the client's `auth()` before it is stored and compared when it is read back (SEP-2352).\n         */\n        // eslint-disable-next-line unicorn/prefer-top-level-await -- Zod .catch(), not a Promise chain\n        issuer: z.string().optional().catch(undefined)\n    })\n    .strip();\n\n/**\n * RFC 8693 §2.2.1 Token Exchange response for ID-JAG tokens.\n *\n * `token_type` is intentionally optional: per RFC 8693 §2.2.1 it is informational when\n * the issued token is not an access token, and per RFC 6749 §5.1 it is case-insensitive,\n * so strict checking rejects conformant IdPs.\n */\nexport const IdJagTokenExchangeResponseSchema = z\n    .object({\n        issued_token_type: z.literal('urn:ietf:params:oauth:token-type:id-jag'),\n        access_token: z.string(),\n        token_type: z.string().optional(),\n        expires_in: z.number().optional(),\n        scope: z.string().optional()\n    })\n    .strip();\n\nexport type IdJagTokenExchangeResponse = z.infer<typeof IdJagTokenExchangeResponseSchema>;\n\n/**\n * OAuth 2.1 error response\n */\nexport const OAuthErrorResponseSchema = z.object({\n    error: z.string(),\n    error_description: z.string().optional(),\n    error_uri: z.string().optional()\n});\n\n/**\n * Optional version of {@linkcode SafeUrlSchema} that allows empty string for backward compatibility on `tos_uri` and `logo_uri`\n */\n// eslint-disable-next-line unicorn/no-useless-undefined\nexport const OptionalSafeUrlSchema = SafeUrlSchema.optional().or(z.literal('').transform(() => undefined));\n\n/**\n * RFC 7591 OAuth 2.0 Dynamic Client Registration metadata\n */\nexport const OAuthClientMetadataSchema = z\n    .object({\n        redirect_uris: z.array(SafeUrlSchema),\n        token_endpoint_auth_method: z.string().optional(),\n        grant_types: z.array(z.string()).optional(),\n        response_types: z.array(z.string()).optional(),\n        /**\n         * OIDC Dynamic Client Registration `application_type`. MCP clients MUST set\n         * this to `'native'` or `'web'` when registering (SEP-837); the SDK defaults\n         * it from `redirect_uris` when omitted. Typed as `string` (not an enum) so\n         * that parsing an authorization server's registration response — which under\n         * RFC 7591 may echo extension values — never rejects the document on this\n         * field alone.\n         */\n        application_type: z.string().optional(),\n        client_name: z.string().optional(),\n        client_uri: SafeUrlSchema.optional(),\n        logo_uri: OptionalSafeUrlSchema,\n        scope: z.string().optional(),\n        contacts: z.array(z.string()).optional(),\n        tos_uri: OptionalSafeUrlSchema,\n        policy_uri: z.string().optional(),\n        jwks_uri: SafeUrlSchema.optional(),\n        jwks: z.any().optional(),\n        software_id: z.string().optional(),\n        software_version: z.string().optional(),\n        software_statement: z.string().optional()\n    })\n    .strip();\n\n/**\n * RFC 7591 OAuth 2.0 Dynamic Client Registration client information\n */\nexport const OAuthClientInformationSchema = z\n    .object({\n        client_id: z.string(),\n        client_secret: z.string().optional(),\n        client_id_issued_at: z.number().optional(),\n        client_secret_expires_at: z.number().optional(),\n        /**\n         * Not part of the wire format: the authorization server this value was obtained from, added by\n         * the client's `auth()` before it is stored and compared when it is read back (SEP-2352).\n         */\n        // eslint-disable-next-line unicorn/prefer-top-level-await -- Zod .catch(), not a Promise chain\n        issuer: z.string().optional().catch(undefined)\n    })\n    .strip();\n\n/**\n * RFC 7591 OAuth 2.0 Dynamic Client Registration full response (client information plus metadata)\n */\nexport const OAuthClientInformationFullSchema = OAuthClientMetadataSchema.merge(OAuthClientInformationSchema);\n\n/**\n * RFC 7591 OAuth 2.0 Dynamic Client Registration error response\n */\nexport const OAuthClientRegistrationErrorSchema = z\n    .object({\n        error: z.string(),\n        error_description: z.string().optional()\n    })\n    .strip();\n\n/**\n * RFC 7009 OAuth 2.0 Token Revocation request\n */\nexport const OAuthTokenRevocationRequestSchema = z\n    .object({\n        token: z.string(),\n        token_type_hint: z.string().optional()\n    })\n    .strip();\n\nexport type OAuthMetadata = z.infer<typeof OAuthMetadataSchema>;\nexport type OpenIdProviderMetadata = z.infer<typeof OpenIdProviderMetadataSchema>;\nexport type OpenIdProviderDiscoveryMetadata = z.infer<typeof OpenIdProviderDiscoveryMetadataSchema>;\n\nexport type OAuthTokens = z.infer<typeof OAuthTokensSchema>;\nexport type OAuthErrorResponse = z.infer<typeof OAuthErrorResponseSchema>;\nexport type OAuthClientMetadata = z.infer<typeof OAuthClientMetadataSchema>;\nexport type OAuthClientInformation = z.infer<typeof OAuthClientInformationSchema>;\nexport type OAuthClientInformationFull = z.infer<typeof OAuthClientInformationFullSchema>;\nexport type OAuthClientInformationMixed = OAuthClientInformation | OAuthClientInformationFull;\n\n/**\n * {@linkcode OAuthTokens} as persisted by an `OAuthClientProvider`. Adds an\n * SDK-stamped authorization-server `issuer` identifier so stored tokens are\n * bound to the AS that issued them. The `issuer` field is **not** part of the\n * RFC 6749 wire response; the client SDK writes it before calling `saveTokens`.\n */\nexport type StoredOAuthTokens = OAuthTokens & { issuer?: string | undefined };\n\n/**\n * {@linkcode OAuthClientInformationMixed} as persisted by an\n * `OAuthClientProvider`. Adds an SDK-stamped authorization-server `issuer`\n * identifier so stored client credentials are bound to the AS that issued them.\n * The `issuer` field is **not** part of the RFC 7591 wire response; the client SDK\n * writes it before calling `saveClientInformation`.\n */\nexport type StoredOAuthClientInformation = OAuthClientInformationMixed & { issuer?: string | undefined };\n\nexport type OAuthClientRegistrationError = z.infer<typeof OAuthClientRegistrationErrorSchema>;\nexport type OAuthTokenRevocationRequest = z.infer<typeof OAuthTokenRevocationRequestSchema>;\nexport type OAuthProtectedResourceMetadata = z.infer<typeof OAuthProtectedResourceMetadataSchema>;\n\n// Unified type for authorization server metadata\nexport type AuthorizationServerMetadata = OAuthMetadata | OpenIdProviderDiscoveryMetadata;\n", "/**\n * Cross-bundle `instanceof` support for the SDK error classes.\n *\n * `@modelcontextprotocol/client` and `@modelcontextprotocol/server` each bundle their\n * own copy of `core-internal`, so an error constructed by one package fails a\n * prototype-identity `instanceof` against the same class re-exported by the other —\n * exactly the check a dual-role process (gateway, host, in-process test) writes.\n *\n * Instead of prototype identity, branded classes stamp every instance with the brand\n * strings of its class chain under a registry symbol (`Symbol.for`, shared across\n * bundles and realms), and resolve `instanceof` via `Symbol.hasInstance` against the\n * brand set. Ordinary prototype-based `instanceof` is kept as a fallback so behavior\n * is unchanged for anything unbranded.\n *\n * A class participates by defining an **own** `mcpBrand` static (via a `static {}`\n * block, so nothing reaches the declaration files — a declared `protected static`\n * field would make the constructor types nominally incompatible across the bundled\n * copies) and (for hierarchy roots) installing {@linkcode brandedHasInstance} as\n * `Symbol.hasInstance`. User-defined subclasses that do not declare their own brand\n * keep plain prototype semantics — a foreign base-class instance never satisfies\n * `instanceof UserSubclass`.\n *\n * Prior art — the same stamp-and-hook shape ships at scale elsewhere: Node core\n * (stream.Writable since 2017, Console via a marker symbol, diagnostics_channel),\n * undici's whole error hierarchy (vendored into Node as fetch), googleapis/gaxios\n * (GaxiosError, Symbol.for marker), AWS SDK v3's ServiceException (which pairs a\n * Symbol.hasInstance override with a static isInstance guard, as we do), and zod v4\n * (Symbol.hasInstance on every schema class for cross-version interop).\n *\n * Contract notes:\n * - Participation criterion: **every error class exported from a public package that\n *   callers are documented to `instanceof` must be branded.** The per-package\n *   errorBrandConformance tests walk the export surfaces and fail naming any\n *   exported Error subclass that has not opted in.\n * - Brands assert **identity, not shape**: brand strings are version-less, so an\n *   instance from one SDK version matches the class of another. Members added to a\n *   branded class in a later version may be absent on a matched instance — read\n *   fields defensively, and treat branded classes as additive-only. The escape\n *   hatch when a release must break a branded class's read contract: change that\n *   class's brand string in the same release, which cleanly severs cross-version\n *   matching for that class. The per-package brand pins make the rename\n *   deliberate: errorSurfacePins.test.ts owns the core-internal brands, and each\n *   package's errorBrandConformance test pins its package-local ones.\n * - Cross-bundle matching requires **both** copies to be at or after the release\n *   that introduced branding; against an older copy, behavior degrades to plain\n *   prototype `instanceof` in both directions.\n * - A consumer re-bundling the SDK with property mangling (`mangle.props`) would\n *   break the brand statics; default esbuild/webpack/terser settings do not.\n */\n\n/** Registry symbol — identical across bundled copies and realms. */\nconst BRANDS: unique symbol = Symbol.for('mcp.sdk.errorBrands') as never;\n\ninterface BrandCarrier {\n    [BRANDS]?: { has(brand: string): boolean };\n}\n\ninterface BrandedConstructor {\n    mcpBrand?: string;\n}\n\n/**\n * Stamp `instance` with the brand of every class in `ctor`'s chain that declares an\n * own `mcpBrand`. Call once from the hierarchy root's constructor with `new.target` —\n * subclasses inherit the stamping without touching their constructors.\n *\n * Constructor-time only: never stamp arbitrary objects. A stamped non-instance would\n * satisfy `instanceof` while lacking the prototype members (getters like `.status`)\n * that callers reach for after the check.\n */\nexport function stampErrorBrands(instance: object, ctor: unknown): void {\n    const brands = new Set<string>();\n    let current: unknown = ctor;\n    while (typeof current === 'function') {\n        const brand = (current as BrandedConstructor).mcpBrand;\n        if (Object.prototype.hasOwnProperty.call(current, 'mcpBrand') && typeof brand === 'string') {\n            brands.add(brand);\n        }\n        current = Object.getPrototypeOf(current);\n    }\n    if (brands.size === 0) return;\n    // configurable so userland instrumentation that clones/replaces error objects\n    // (e.g. wrapping via Object.defineProperties) is not broken by a frozen stamp;\n    // deleting the stamp merely degrades that instance to prototype `instanceof`.\n    Object.defineProperty(instance, BRANDS, { value: brands, enumerable: false, configurable: true });\n}\n\n/**\n * `Symbol.hasInstance` implementation for branded hierarchy roots. Matches when the\n * value carries the **own** brand of the class being tested against (cross-bundle\n * path), falling back to ordinary prototype-based `instanceof` otherwise.\n */\nexport function brandedHasInstance(cls: object, value: unknown): boolean {\n    try {\n        if (\n            typeof value === 'object' &&\n            value !== null &&\n            Object.prototype.hasOwnProperty.call(cls, 'mcpBrand') &&\n            typeof (cls as BrandedConstructor).mcpBrand === 'string' &&\n            // Own-property only: a brand inherited via the prototype chain is never\n            // honored, so polluting Object.prototype with the registry symbol cannot\n            // make arbitrary objects satisfy instanceof (real instances are stamped\n            // with an own property by stampErrorBrands).\n            Object.prototype.hasOwnProperty.call(value, BRANDS)\n        ) {\n            const carried = (value as BrandCarrier)[BRANDS];\n            if (carried && typeof carried.has === 'function' && carried.has((cls as BrandedConstructor).mcpBrand!)) {\n                return true;\n            }\n        }\n    } catch {\n        // A hostile Proxy trap or throwing accessor must not make `instanceof`\n        // throw where it previously returned false — fall through to the\n        // ordinary prototype check.\n    }\n    return Function.prototype[Symbol.hasInstance].call(cls, value);\n}\n", "import { brandedHasInstance, stampErrorBrands } from '../errors/crossBundleBrand';\nimport type { OAuthErrorResponse } from '../shared/auth';\n\n/**\n * OAuth error codes as defined by {@link https://datatracker.ietf.org/doc/html/rfc6749#section-5.2 | RFC 6749}\n * and extensions.\n */\nexport enum OAuthErrorCode {\n    /**\n     * The request is missing a required parameter, includes an invalid parameter value,\n     * includes a parameter more than once, or is otherwise malformed.\n     */\n    InvalidRequest = 'invalid_request',\n\n    /**\n     * Client authentication failed (e.g., unknown client, no client authentication included,\n     * or unsupported authentication method).\n     */\n    InvalidClient = 'invalid_client',\n\n    /**\n     * The provided authorization grant or refresh token is invalid, expired, revoked,\n     * does not match the redirection URI used in the authorization request, or was issued to another client.\n     */\n    InvalidGrant = 'invalid_grant',\n\n    /**\n     * The authenticated client is not authorized to use this authorization grant type.\n     */\n    UnauthorizedClient = 'unauthorized_client',\n\n    /**\n     * The authorization grant type is not supported by the authorization server.\n     */\n    UnsupportedGrantType = 'unsupported_grant_type',\n\n    /**\n     * The requested scope is invalid, unknown, malformed, or exceeds the scope granted by the resource owner.\n     */\n    InvalidScope = 'invalid_scope',\n\n    /**\n     * The resource owner or authorization server denied the request.\n     */\n    AccessDenied = 'access_denied',\n\n    /**\n     * The authorization server encountered an unexpected condition that prevented it from fulfilling the request.\n     */\n    ServerError = 'server_error',\n\n    /**\n     * The authorization server is currently unable to handle the request due to temporary overloading or maintenance.\n     */\n    TemporarilyUnavailable = 'temporarily_unavailable',\n\n    /**\n     * The authorization server does not support obtaining an authorization code using this method.\n     */\n    UnsupportedResponseType = 'unsupported_response_type',\n\n    /**\n     * The authorization server does not support the requested token type.\n     */\n    UnsupportedTokenType = 'unsupported_token_type',\n\n    /**\n     * The access token provided is expired, revoked, malformed, or invalid for other reasons.\n     */\n    InvalidToken = 'invalid_token',\n\n    /**\n     * The HTTP method used is not allowed for this endpoint. (Custom, non-standard error)\n     */\n    MethodNotAllowed = 'method_not_allowed',\n\n    /**\n     * Rate limit exceeded. (Custom, non-standard error based on RFC 6585)\n     */\n    TooManyRequests = 'too_many_requests',\n\n    /**\n     * The client metadata is invalid. (Custom error for dynamic client registration - RFC 7591)\n     */\n    InvalidClientMetadata = 'invalid_client_metadata',\n\n    /**\n     * The value of one or more redirection URIs is invalid. (Dynamic client registration - RFC 7591 §3.2.2)\n     */\n    InvalidRedirectUri = 'invalid_redirect_uri',\n\n    /**\n     * The request requires higher privileges than provided by the access token.\n     */\n    InsufficientScope = 'insufficient_scope',\n\n    /**\n     * The requested resource is invalid, missing, unknown, or malformed. (Custom error for resource indicators - RFC 8707)\n     */\n    InvalidTarget = 'invalid_target',\n\n    /**\n     * The DPoP proof accompanying the request is invalid, or does not match the key the grant\n     * (e.g. a refresh token) is bound to. (RFC 9449 §5 / §7.1)\n     */\n    InvalidDpopProof = 'invalid_dpop_proof',\n\n    /**\n     * The server requires a server-supplied nonce in the DPoP proof; retry with the `DPoP-Nonce`\n     * it returned. (RFC 9449 §8 / §9)\n     */\n    UseDpopNonce = 'use_dpop_nonce'\n}\n\n/**\n * OAuth error class for all OAuth-related errors.\n */\nexport class OAuthError extends Error {\n    static {\n        Object.defineProperty(this, 'mcpBrand', { value: 'mcp.OAuthError' });\n    }\n\n    static override [Symbol.hasInstance](value: unknown): boolean {\n        return brandedHasInstance(this, value);\n    }\n\n    /**\n     * Brand-based type guard: equivalent to `value instanceof this`, as an\n     * explicit static predicate (the axios/AWS-SDK `isInstance` style). Reads\n     * the caller's own brand via `this`, so every branded subclass gets a\n     * correctly-scoped guard by inheritance. Must be invoked on the class —\n     * in callback position write `v => SdkError.isInstance(v)`, not\n     * `.filter(SdkError.isInstance)` (detached calls throw rather than\n     * silently matching nothing).\n     */\n    static isInstance<T extends abstract new (...args: never[]) => unknown>(this: T, value: unknown): value is InstanceType<T> {\n        if (typeof this !== 'function') {\n            throw new TypeError(\n                'isInstance must be called on the class (e.g. `SdkError.isInstance(value)`); for callbacks use `v => SdkError.isInstance(v)`'\n            );\n        }\n        return brandedHasInstance(this, value);\n    }\n\n    constructor(\n        public readonly code: OAuthErrorCode | string,\n        message: string,\n        public readonly errorUri?: string\n    ) {\n        super(message);\n        this.name = 'OAuthError';\n        stampErrorBrands(this, new.target);\n    }\n\n    /**\n     * Converts the error to a standard OAuth error response object.\n     */\n    toResponseObject(): OAuthErrorResponse {\n        const response: OAuthErrorResponse = {\n            error: this.code,\n            error_description: this.message\n        };\n\n        if (this.errorUri) {\n            response.error_uri = this.errorUri;\n        }\n\n        return response;\n    }\n\n    /**\n     * Creates an {@linkcode OAuthError} from an OAuth error response.\n     */\n    static fromResponse(response: OAuthErrorResponse): OAuthError {\n        return new OAuthError(response.error as OAuthErrorCode, response.error_description ?? response.error, response.error_uri);\n    }\n}\n", "import { brandedHasInstance, stampErrorBrands } from './crossBundleBrand';\n\n/**\n * Error codes for SDK errors (local errors that never cross the wire).\n * Unlike {@linkcode ProtocolErrorCode} which uses numeric JSON-RPC codes, `SdkErrorCode` uses\n * descriptive string values for better developer experience.\n *\n * These errors are thrown locally by the SDK and are never serialized as\n * JSON-RPC error responses.\n */\nexport enum SdkErrorCode {\n    // State errors\n    /** Transport is not connected */\n    NotConnected = 'NOT_CONNECTED',\n    /** Transport is already connected */\n    AlreadyConnected = 'ALREADY_CONNECTED',\n    /** Protocol is not initialized */\n    NotInitialized = 'NOT_INITIALIZED',\n\n    // Capability errors\n    /** Required capability is not supported by the remote side */\n    CapabilityNotSupported = 'CAPABILITY_NOT_SUPPORTED',\n\n    // Transport errors\n    /** Request timed out waiting for response */\n    RequestTimeout = 'REQUEST_TIMEOUT',\n    /** Connection was closed */\n    ConnectionClosed = 'CONNECTION_CLOSED',\n    /** Failed to send message */\n    SendFailed = 'SEND_FAILED',\n    /** Response result failed local schema validation */\n    InvalidResult = 'INVALID_RESULT',\n    /**\n     * The response carried a `resultType` discriminator (protocol revision\n     * 2026-07-28) naming a result kind this client cannot consume yet, e.g.\n     * `input_required`. The kind is carried in `data.resultType`.\n     */\n    UnsupportedResultType = 'UNSUPPORTED_RESULT_TYPE',\n    /**\n     * The multi-round-trip auto-fulfilment driver exhausted its round cap\n     * (`inputRequired.maxRounds`) without the server returning a complete\n     * result. `data.rounds` carries the cap that was hit and\n     * `data.lastResult` carries the last `input_required` payload received\n     * (`{ inputRequests, requestState? }`), so callers can inspect or resume\n     * the flow manually.\n     */\n    InputRequiredRoundsExceeded = 'INPUT_REQUIRED_ROUNDS_EXCEEDED',\n    /**\n     * The auto-aggregating no-`cursor` `listTools()` / `listPrompts()` /\n     * `listResources()` / `listResourceTemplates()` walk hit the\n     * `ClientOptions.listMaxPages` cap without the server's pagination\n     * converging. `data.method` carries the list verb and\n     * `data.listMaxPages` the cap that was hit; raise the cap or fall back to\n     * explicit per-page `{ cursor }` calls.\n     */\n    ListPaginationExceeded = 'LIST_PAGINATION_EXCEEDED',\n    /**\n     * The spec method being sent does not exist on the negotiated protocol\n     * version's wire era (e.g. `tasks/get` toward a 2026-07-28 peer, or\n     * `server/discover` toward a 2025-era peer). Raised locally, before\n     * anything reaches the transport. The method and era are carried in\n     * `data.method` / `data.era`.\n     */\n    MethodNotSupportedByProtocolVersion = 'METHOD_NOT_SUPPORTED_BY_PROTOCOL_VERSION',\n    /**\n     * Protocol-era negotiation at connect time failed without producing either a\n     * usable modern (2026-07-28+) era or a definitive legacy fallback signal —\n     * e.g. the negotiation mode forbids falling back (`pin`), the probe hit a\n     * network failure, or the server answered the probe with a 5xx (a typed\n     * connect error, never an era verdict).\n     *\n     * Negotiation-phase only: this code is never used once an era is\n     * established. Auth walls never carry it: a 401/403 rejecting the probe\n     * uses {@linkcode ClientHttpAuthentication} / {@linkcode ClientHttpForbidden}\n     * instead, so era-recovery flows keyed on this code (e.g. cached-verdict\n     * gateways) can never persist a verdict for an unauthorized exchange.\n     */\n    EraNegotiationFailed = 'ERA_NEGOTIATION_FAILED',\n\n    // Transport errors\n    ClientHttpNotImplemented = 'CLIENT_HTTP_NOT_IMPLEMENTED',\n    /**\n     * HTTP 401 authentication failure: the transport's re-auth retry still got\n     * 401 (`Server returned 401 after re-authentication`), or the version\n     * negotiation probe was rejected 401 with no `authProvider` configured\n     * (`Version negotiation failed: the server requires authorization (HTTP 401)`).\n     * Carried on an {@linkcode SdkHttpError} with `status: 401`.\n     */\n    ClientHttpAuthentication = 'CLIENT_HTTP_AUTHENTICATION',\n    /**\n     * HTTP 403 denial: the step-up re-authorization retry limit was reached,\n     * or the version negotiation probe was rejected 403\n     * (`Version negotiation failed: the server denied access (HTTP 403)`).\n     * Carried on an {@linkcode SdkHttpError} with `status: 403`.\n     */\n    ClientHttpForbidden = 'CLIENT_HTTP_FORBIDDEN',\n    ClientHttpUnexpectedContent = 'CLIENT_HTTP_UNEXPECTED_CONTENT',\n    ClientHttpFailedToOpenStream = 'CLIENT_HTTP_FAILED_TO_OPEN_STREAM',\n    ClientHttpFailedToTerminateSession = 'CLIENT_HTTP_FAILED_TO_TERMINATE_SESSION'\n}\n\n/**\n * SDK errors are local errors that never cross the wire.\n * They are distinct from {@linkcode ProtocolError} which represents JSON-RPC protocol errors\n * that are serialized and sent as error responses.\n *\n * @example\n * ```ts source=\"./sdkErrors.examples.ts#SdkError_basicUsage\"\n * try {\n *     // Throwing an SDK error\n *     throw new SdkError(SdkErrorCode.NotConnected, 'Transport is not connected');\n * } catch (error) {\n *     // Checking error type by code\n *     if (error instanceof SdkError && error.code === SdkErrorCode.RequestTimeout) {\n *         // Handle timeout\n *     }\n * }\n * ```\n */\nexport class SdkError extends Error {\n    static {\n        Object.defineProperty(this, 'mcpBrand', { value: 'mcp.SdkError' });\n    }\n\n    static override [Symbol.hasInstance](value: unknown): boolean {\n        return brandedHasInstance(this, value);\n    }\n\n    /**\n     * Brand-based type guard: equivalent to `value instanceof this`, as an\n     * explicit static predicate (the axios/AWS-SDK `isInstance` style). Reads\n     * the caller's own brand via `this`, so every branded subclass gets a\n     * correctly-scoped guard by inheritance. Must be invoked on the class —\n     * in callback position write `v => SdkError.isInstance(v)`, not\n     * `.filter(SdkError.isInstance)` (detached calls throw rather than\n     * silently matching nothing).\n     */\n    static isInstance<T extends abstract new (...args: never[]) => unknown>(this: T, value: unknown): value is InstanceType<T> {\n        if (typeof this !== 'function') {\n            throw new TypeError(\n                'isInstance must be called on the class (e.g. `SdkError.isInstance(value)`); for callbacks use `v => SdkError.isInstance(v)`'\n            );\n        }\n        return brandedHasInstance(this, value);\n    }\n\n    /**\n     * @param code - Stable string code identifying the failure ({@linkcode SdkErrorCode}).\n     * @param message - Human-readable description.\n     * @param data - Optional structured payload (for example the HTTP status carried by\n     * {@linkcode SdkHttpError}). Opaque to the SDK: a `cause` key inside `data` is not\n     * promoted to `Error.cause`.\n     * @param options - Standard `ErrorOptions`, forwarded to `Error`. Pass the underlying\n     * failure as `{ cause }` so it is reachable through the `Error.cause` chain that\n     * loggers and error trackers walk.\n     */\n    constructor(\n        public readonly code: SdkErrorCode,\n        message: string,\n        public readonly data?: unknown,\n        options?: ErrorOptions\n    ) {\n        super(message, options);\n        this.name = 'SdkError';\n        stampErrorBrands(this, new.target);\n    }\n}\n\n/**\n * Typed shape for HTTP error data carried by {@linkcode SdkHttpError}.\n */\nexport interface SdkHttpErrorData {\n    status: number;\n    statusText?: string;\n    [key: string]: unknown;\n}\n\n/**\n * An {@linkcode SdkError} subclass for HTTP transport failures.\n *\n * Thrown by the streamable HTTP transport when the server responds with a\n * non-OK status code. Narrows {@linkcode SdkError.data | data} to\n * {@linkcode SdkHttpErrorData} so consumers can inspect the HTTP status\n * without unsafe casting.\n *\n * @example\n * ```ts source=\"./sdkErrors.examples.ts#SdkHttpError_basicUsage\"\n * if (error instanceof SdkHttpError) {\n *     console.log(error.status); // number\n *     console.log(error.statusText); // string | undefined\n * }\n * ```\n */\nexport class SdkHttpError extends SdkError {\n    static {\n        Object.defineProperty(this, 'mcpBrand', { value: 'mcp.SdkHttpError' });\n    }\n\n    declare readonly data: SdkHttpErrorData;\n\n    /**\n     * @param options - Standard `ErrorOptions`, forwarded to `Error` (see {@linkcode SdkError}).\n     */\n    constructor(code: SdkErrorCode, message: string, data: SdkHttpErrorData, options?: ErrorOptions) {\n        super(code, message, data, options);\n        this.name = 'SdkHttpError';\n    }\n\n    get status(): number {\n        return this.data.status;\n    }\n\n    get statusText(): string | undefined {\n        return this.data.statusText;\n    }\n}\n", "/**\n * Utilities for handling OAuth resource URIs.\n */\n\n/**\n * Converts a server URL to a resource URL by removing the fragment.\n * {@link https://datatracker.ietf.org/doc/html/rfc8707#section-2 | RFC 8707 section 2}\n * states that resource URIs \"MUST NOT include a fragment component\".\n * Keeps everything else unchanged (scheme, domain, port, path, query).\n */\nexport function resourceUrlFromServerUrl(url: URL | string): URL {\n    const resourceURL = typeof url === 'string' ? new URL(url) : new URL(url.href);\n    resourceURL.hash = ''; // Remove fragment\n    return resourceURL;\n}\n\n/** Returns an authorization-server response body without `issuer`, which only the client sets, when it stores a value (SEP-2352). */\nexport function withoutIssuer(body: unknown): unknown {\n    if (typeof body !== 'object' || body === null || Array.isArray(body)) return body;\n    const copy: Record<string, unknown> = { ...body };\n    delete copy.issuer;\n    return copy;\n}\n\n/**\n * Checks if a requested resource URL matches a configured resource URL.\n * A requested resource matches if it has the same scheme, domain, port,\n * and its path starts with the configured resource's path.\n *\n * @param options - The options object\n * @param options.requestedResource - The resource URL being requested\n * @param options.configuredResource - The resource URL that has been configured\n * @returns true if the requested resource matches the configured resource, false otherwise\n */\nexport function checkResourceAllowed({\n    requestedResource,\n    configuredResource\n}: {\n    requestedResource: URL | string;\n    configuredResource: URL | string;\n}): boolean {\n    const requested = typeof requestedResource === 'string' ? new URL(requestedResource) : new URL(requestedResource.href);\n    const configured = typeof configuredResource === 'string' ? new URL(configuredResource) : new URL(configuredResource.href);\n\n    // Compare the origin (scheme, domain, and port)\n    if (requested.origin !== configured.origin) {\n        return false;\n    }\n\n    // Handle cases like requested=/foo and configured=/foo/\n    if (requested.pathname.length < configured.pathname.length) {\n        return false;\n    }\n\n    // Check if the requested path starts with the configured path\n    // Ensure both paths end with / for proper comparison\n    // This ensures that if we have paths like \"/api\" and \"/api/users\",\n    // we properly detect that \"/api/users\" is a subpath of \"/api\"\n    // By adding a trailing slash if missing, we avoid false positives\n    // where paths like \"/api123\" would incorrectly match \"/api\"\n    const requestedPath = requested.pathname.endsWith('/') ? requested.pathname : requested.pathname + '/';\n    const configuredPath = configured.pathname.endsWith('/') ? configured.pathname : configured.pathname + '/';\n\n    return requestedPath.startsWith(configuredPath);\n}\n", "/**\n * Client-capability requirements for inbound requests (protocol revision\n * 2026-07-28).\n *\n * The 2026-07-28 revision carries the client's declared capabilities on every\n * request (`io.modelcontextprotocol/clientCapabilities`), and a server MUST\n * NOT rely on capabilities the client did not declare: when processing a\n * request requires an undeclared capability, the server answers\n * `MissingRequiredClientCapabilityError` (`-32021`) with\n * `data.requiredCapabilities` listing what is missing — HTTP status `400` on\n * HTTP transports.\n *\n * This module is the shared, pure half of that rule. It is written for three\n * call sites:\n *\n * 1. the pre-dispatch feature gate at the HTTP entry (a request to a method\n *    whose processing structurally requires a client capability is refused\n *    before dispatch),\n * 2. the outbound input-request leg of multi round-trip requests (a server\n *    must not embed an input request the client cannot satisfy) — lands with\n *    the input-request engine,\n * 3. the legacy-session pre-check before bridging input requests onto a\n *    2025-era session — lands with that bridge.\n *\n * All three share {@linkcode missingClientCapabilities}; the per-method\n * requirement table below feeds call site 1 only.\n */\nimport type { ClientCapabilities } from '../types/types';\n\n/**\n * Inbound request methods whose processing structurally requires a client\n * capability, keyed by method, valued by the capabilities required.\n *\n * Currently empty: none of the request methods served on the 2026-07-28\n * registry unconditionally requires a client capability. Entries appear here\n * when such methods exist — for example requests whose handling embeds\n * elicitation or sampling input requests (the input-request engine), or\n * opt-in subscription delivery. Handler-conditional requirements (a specific\n * tool that needs sampling) are not expressible as a static method table and\n * are enforced at the point the requirement arises instead.\n */\nexport const REQUIRED_CLIENT_CAPABILITIES_BY_METHOD: Readonly<Record<string, ClientCapabilities>> = {};\n\n/**\n * The client capabilities a request method structurally requires, or\n * `undefined` when the method has no static requirement.\n */\nexport function requiredClientCapabilitiesForRequest(method: string): ClientCapabilities | undefined {\n    return Object.hasOwn(REQUIRED_CLIENT_CAPABILITIES_BY_METHOD, method) ? REQUIRED_CLIENT_CAPABILITIES_BY_METHOD[method] : undefined;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n    return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\n/**\n * Whether a required nested member counts as declared even though it is not\n * spelled out: a bare `elicitation: {}` declaration (no mode sub-capability at\n * all) is read as form support — the pre-mode (2025) meaning of a bare\n * declaration — so an `elicitation.form` requirement treats it as satisfied.\n * Declaring any mode explicitly (for example `elicitation: { url: {} }`)\n * removes the implication.\n */\nfunction isImpliedCapabilityMember(capability: string, member: string, declaredValue: Record<string, unknown>): boolean {\n    return capability === 'elicitation' && member === 'form' && declaredValue['form'] === undefined && declaredValue['url'] === undefined;\n}\n\n/**\n * The client capabilities an embedded multi-round-trip input request requires\n * (call site 2 — the outbound input-request leg): a server MUST NOT send an\n * `inputRequests` kind the request's declared client capabilities do not\n * cover. Returns `undefined` for entries whose method is not one of the\n * embedded input-request kinds (those are a server bug handled separately,\n * not a capability question).\n *\n * The requirement is mode-aware where the capability is: URL-mode elicitation\n * requires `elicitation.url`; form-mode (or mode-omitted) elicitation requires\n * `elicitation.form` (modes are sub-capabilities, and a server MUST NOT send a\n * mode the client did not declare); sampling with `tools`/`toolChoice`\n * requires `sampling.tools`. A bare `elicitation: {}` declaration satisfies\n * the form requirement — see {@linkcode missingClientCapabilities}.\n */\nexport function requiredClientCapabilitiesForInputRequest(entry: {\n    method: string;\n    params?: Record<string, unknown>;\n}): ClientCapabilities | undefined {\n    switch (entry.method) {\n        case 'elicitation/create': {\n            if (entry.params?.['mode'] === 'url') {\n                return { elicitation: { url: {} } };\n            }\n            return { elicitation: { form: {} } };\n        }\n        case 'sampling/createMessage': {\n            const params = entry.params;\n            if (params !== undefined && (params['tools'] !== undefined || params['toolChoice'] !== undefined)) {\n                return { sampling: { tools: {} } };\n            }\n            return { sampling: {} };\n        }\n        case 'roots/list': {\n            return { roots: {} };\n        }\n        default: {\n            return undefined;\n        }\n    }\n}\n\n/**\n * Computes the subset of `required` client capabilities the client did not\n * declare. Returns `undefined` when every required capability is declared;\n * otherwise returns an object in the `ClientCapabilities` shape containing\n * exactly the missing capabilities (suitable for\n * `data.requiredCapabilities` on the `-32021` error).\n *\n * A capability counts as declared when its top-level key is present on the\n * declared capabilities; when the requirement names nested members (for\n * example `elicitation: { url: {} }`), each named member must also be present\n * under the declared capability. One lenient reading applies: a bare\n * `elicitation: {}` declaration (no mode sub-capability at all) counts as\n * declaring `elicitation.form` — the pre-mode (2025) meaning of a bare\n * declaration. An absent or empty `declared` value means\n * nothing is declared — every required capability is missing (the structural\n * clean-refusal posture for sessions with no per-request capability view).\n */\nexport function missingClientCapabilities(\n    required: ClientCapabilities,\n    declared: ClientCapabilities | undefined\n): ClientCapabilities | undefined {\n    const missing: Record<string, unknown> = {};\n\n    for (const [capability, requirement] of Object.entries(required)) {\n        if (requirement === undefined) {\n            continue;\n        }\n        const declaredValue = declared === undefined ? undefined : (declared as Record<string, unknown>)[capability];\n        if (declaredValue === undefined) {\n            missing[capability] = requirement;\n            continue;\n        }\n        if (isPlainObject(requirement) && isPlainObject(declaredValue)) {\n            const missingMembers: Record<string, unknown> = {};\n            for (const [member, memberRequirement] of Object.entries(requirement)) {\n                if (\n                    memberRequirement !== undefined &&\n                    declaredValue[member] === undefined &&\n                    !isImpliedCapabilityMember(capability, member, declaredValue)\n                ) {\n                    missingMembers[member] = memberRequirement;\n                }\n            }\n            if (Object.keys(missingMembers).length > 0) {\n                missing[capability] = missingMembers;\n            }\n        }\n    }\n\n    return Object.keys(missing).length > 0 ? (missing as ClientCapabilities) : undefined;\n}\n", "/**\n * Protocol-era helpers (pure module). The MCP wire protocol splits into two eras:\n * legacy (the 2025-11-25 family and earlier; the version is negotiated via the\n * `initialize` handshake) and modern (2026-07-28 and later; no `initialize` —\n * servers advertise versions via `server/discover` and every request carries a\n * `_meta` envelope).\n *\n * An operation that belongs to one era must only ever consult that era's subset\n * of a supported-versions list: `initialize` never accepts or counter-offers a\n * modern revision, and the `server/discover` advertisement only ever contains\n * modern revisions.\n */\n\n/**\n * The protocol era of a connection: `'legacy'` for the 2025-11-25 family and\n * earlier (negotiated via `initialize`), `'modern'` for 2026-07-28 and later\n * (negotiated via `server/discover`; every request carries a `_meta` envelope).\n */\nexport type ProtocolEra = 'legacy' | 'modern';\n\n/**\n * The first protocol revision of the modern (2026-07-28) era. Revision identifiers\n * are ISO dates, so lexicographic comparison orders them chronologically.\n */\nexport const FIRST_MODERN_PROTOCOL_VERSION = '2026-07-28';\n\n/**\n * Modern-era protocol revisions this SDK can negotiate via `server/discover`.\n * Deliberately separate from {@linkcode SUPPORTED_PROTOCOL_VERSIONS} (the legacy\n * `initialize` list), so adding a revision here can never leak a modern version\n * string into a 2025-era handshake. Internal — not part of the public API surface.\n */\nexport const SUPPORTED_MODERN_PROTOCOL_VERSIONS = [FIRST_MODERN_PROTOCOL_VERSION];\n\n/** Whether the given protocol revision belongs to the modern (2026-07-28+) era. */\nexport function isModernProtocolVersion(version: string): boolean {\n    return version >= FIRST_MODERN_PROTOCOL_VERSION;\n}\n\n/** The legacy-era (pre-2026-07-28) subset of a supported-versions list, in the list's own preference order. */\nexport function legacyProtocolVersions(versions: readonly string[]): string[] {\n    return versions.filter(version => !isModernProtocolVersion(version));\n}\n\n/** The modern-era (2026-07-28+) subset of a supported-versions list, in the list's own preference order. */\nexport function modernProtocolVersions(versions: readonly string[]): string[] {\n    return versions.filter(version => isModernProtocolVersion(version));\n}\n", "import type { CallToolResult } from '../types/types';\n\n/**\n * SEP-2106 §4.3 TextContent auto-append, era-agnostic, called from BOTH\n * codecs' {@link WireCodec.projectCallToolResult}: when `structuredContent`\n * is a non-object value (array/primitive/`null`) and the handler authored no\n * `type:'text'` block, append `{type:'text', text: JSON.stringify(value)}`.\n * Object-shaped (or absent) `structuredContent` returns the same reference.\n *\n * Leaf module: imported by both era codec modules, so it must NOT import from\n * `./codec.js` (which value-imports the rev codecs at top level — that would\n * make a runtime cycle and a TDZ hazard for entries that evaluate a rev codec\n * module first).\n */\nexport function appendTextFallbackForNonObject(result: CallToolResult): CallToolResult {\n    const sc = result.structuredContent;\n    if (sc === undefined) return result;\n    const isNonObjectValue = typeof sc !== 'object' || sc === null || Array.isArray(sc);\n    if (!isNonObjectValue) return result;\n    const hasTextContent = result.content?.some(c => c.type === 'text') ?? false;\n    if (hasTextContent) return result;\n    return { ...result, content: [...(result.content ?? []), { type: 'text' as const, text: JSON.stringify(sc) }] };\n}\n", "/**\n * Result-family keys that must never default into a `{content: []}` tools/call\n * success. Shared by the 2025 wire-seam schema and server normalization.\n * Leaf module (like `textFallback.ts`): imported by registry/server paths, so\n * it must NOT import from `./codec.js` — that would close a runtime cycle.\n */\nexport const TOOL_RESULT_FOREIGN_FAMILY_KEYS = ['task', 'inputRequests', 'requestState'] as const;\n\n/**\n * Single owner of the v1-parity ruling: a plain-object tool result without `content` (and\n * without foreign-family keys) gains `content: []`. Shared by the 2025 wire seam and server-side handler normalization.\n */\nexport function normalizeContentlessToolResult(value: unknown): unknown {\n    if (\n        value === null ||\n        typeof value !== 'object' ||\n        Array.isArray(value) ||\n        (value as { content?: unknown }).content !== undefined ||\n        TOOL_RESULT_FOREIGN_FAMILY_KEYS.some(key => key in value)\n    ) {\n        return value;\n    }\n    return { ...value, content: [] };\n}\n", "/**\n * Complete frozen 2025-11-25 wire schemas. Self-contained — no imports from\n * the public/neutral types/schemas.ts. The neutral layer is the public-API\n * superset and is free to evolve (e.g., SEP-2106 widening); this file is the\n * 2025 wire-parse contract (Q10-L2 byte-identity) and is BEHAVIOR-FROZEN.\n *\n * This is the era's complete frozen wire-parse contract — both the 2025-only\n * delta (the deprecated task family, the era role unions) AND frozen copies of\n * every era-shared shape (Tool, CallToolResult, Initialize*, ContentBlock,\n * prompts/resources/completion/elicitation, …). The 2026-era codec\n * (`wire/rev2026-07-28/`) is symmetrically self-contained in the same way.\n *\n * The 2025-only delta (the task message surface, restored types-only by #2248\n * for interop with task-capable 2025 peers) is parsed ONLY through this era's\n * registry; the deprecated Task* schemas also live (marked `@deprecated`) in\n * the neutral schema layer so the public types stay nameable without a\n * cross-layer import — nameability is constant, runtime availability is\n * version-keyed — but appear in no API signature. Q1 increment 2 — deletions\n * are physical: the\n * 2026-era REGISTRY has no Task* methods (its frozen building-block copies do\n * carry the deprecated Task* sub-schemas by composition — soft contamination,\n * tracked for anchor-exactness adjudication).\n *\n * The only cross-layer dependency is `import type { JSONObject, JSONValue }`\n * from the neutral types barrel — pure structural type aliases with no parse\n * behavior. No runtime schema is shared with the neutral layer.\n */\nimport * as z from 'zod/v4';\n\nimport type { JSONObject, JSONValue } from '../../types/types';\nimport { normalizeContentlessToolResult, TOOL_RESULT_FOREIGN_FAMILY_KEYS } from '../resultFamilies';\n\nfunction build() {\n    /* ───────────────────────────────────────────────────────────────────────────\n     * Building blocks\n     * ─────────────────────────────────────────────────────────────────────────── */\n\n    const JSONValueSchema: z.ZodType<JSONValue, JSONValue> = z.lazy(() =>\n        z.union([z.string(), z.number(), z.boolean(), z.null(), z.record(z.string(), JSONValueSchema), z.array(JSONValueSchema)])\n    );\n    const JSONObjectSchema: z.ZodType<JSONObject, JSONObject> = z.record(z.string(), JSONValueSchema);\n\n    /**\n     * A progress token, used to associate progress notifications with the original request.\n     */\n    const ProgressTokenSchema = z.union([z.string(), z.number().int()]);\n\n    /**\n     * An opaque token used to represent a cursor for pagination.\n     */\n    const CursorSchema = z.string();\n\n    /** @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only. */\n    const TaskMetadataSchema = z.object({\n        ttl: z.number().optional()\n    });\n\n    /**\n     * Metadata for associating messages with a task.\n     * Include this in the `_meta` field under the key `io.modelcontextprotocol/related-task`.\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n     */\n    const RelatedTaskMetadataSchema = z.object({\n        taskId: z.string()\n    });\n\n    const RequestMetaSchema = z.looseObject({\n        /**\n         * If specified, the caller is requesting out-of-band progress notifications for this request (as represented by notifications/progress). The value of this parameter is an opaque token that will be attached to any subsequent notifications. The receiver is not obligated to provide these notifications.\n         */\n        progressToken: ProgressTokenSchema.optional(),\n        /**\n         * If specified, this request is related to the provided task.\n         */\n        'io.modelcontextprotocol/related-task': RelatedTaskMetadataSchema.optional()\n    });\n\n    /**\n     * Common params for any request.\n     */\n    const BaseRequestParamsSchema = z.object({\n        /**\n         * See [General fields: `_meta`](/specification/draft/basic/index#meta) for notes on `_meta` usage.\n         */\n        _meta: RequestMetaSchema.optional()\n    });\n\n    /**\n     * Common params for any task-augmented request.\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n     */\n    const TaskAugmentedRequestParamsSchema = BaseRequestParamsSchema.extend({\n        /**\n         * If specified, the caller is requesting task-augmented execution for this request.\n         * The request will return a `CreateTaskResult` immediately, and the actual result can be\n         * retrieved later via `tasks/result`.\n         *\n         * Task augmentation is subject to capability negotiation - receivers MUST declare support\n         * for task augmentation of specific request types in their capabilities.\n         */\n        task: TaskMetadataSchema.optional()\n    });\n\n    const RequestSchema = z.object({\n        method: z.string(),\n        params: BaseRequestParamsSchema.loose().optional()\n    });\n\n    const NotificationsParamsSchema = z.object({\n        /**\n         * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n         * for notes on `_meta` usage.\n         */\n        _meta: RequestMetaSchema.optional()\n    });\n\n    const NotificationSchema = z.object({\n        method: z.string(),\n        params: NotificationsParamsSchema.loose().optional()\n    });\n\n    const ResultSchema = z.looseObject({\n        /**\n         * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n         * for notes on `_meta` usage.\n         */\n        _meta: RequestMetaSchema.optional()\n    });\n\n    /**\n     * A uniquely identifying ID for a request in JSON-RPC.\n     */\n    const RequestIdSchema = z.union([z.string(), z.number().int()]);\n\n    /* Empty result */\n    /**\n     * A response that indicates success but carries no data.\n     */\n    const EmptyResultSchema = ResultSchema.strict();\n\n    const CancelledNotificationParamsSchema = NotificationsParamsSchema.extend({\n        /**\n         * The ID of the request to cancel.\n         *\n         * This MUST correspond to the ID of a request previously issued in the same direction.\n         */\n        requestId: RequestIdSchema.optional(),\n        /**\n         * An optional string describing the reason for the cancellation. This MAY be logged or presented to the user.\n         */\n        reason: z.string().optional()\n    });\n    /* Cancellation */\n    /**\n     * This notification can be sent by either side to indicate that it is cancelling a previously-issued request.\n     *\n     * The request SHOULD still be in-flight, but due to communication latency, it is always possible that this notification MAY arrive after the request has already finished.\n     *\n     * This notification indicates that the result will be unused, so any associated processing SHOULD cease.\n     *\n     * A client MUST NOT attempt to cancel its {@linkcode InitializeRequest | initialize} request.\n     */\n    const CancelledNotificationSchema = NotificationSchema.extend({\n        method: z.literal('notifications/cancelled'),\n        params: CancelledNotificationParamsSchema\n    });\n\n    /* Base Metadata */\n    /**\n     * Icon schema for use in {@link Tool | tools}, {@link Prompt | prompts}, {@link Resource | resources}, and {@link Implementation | implementations}.\n     */\n    const IconSchema = z.object({\n        /**\n         * URL or data URI for the icon.\n         */\n        src: z.string(),\n        /**\n         * Optional MIME type for the icon.\n         */\n        mimeType: z.string().optional(),\n        /**\n         * Optional array of strings that specify sizes at which the icon can be used.\n         * Each string should be in WxH format (e.g., `\"48x48\"`, `\"96x96\"`) or `\"any\"` for scalable formats like SVG.\n         *\n         * If not provided, the client should assume that the icon can be used at any size.\n         */\n        sizes: z.array(z.string()).optional(),\n        /**\n         * Optional specifier for the theme this icon is designed for. `light` indicates\n         * the icon is designed to be used with a light background, and `dark` indicates\n         * the icon is designed to be used with a dark background.\n         *\n         * If not provided, the client should assume the icon can be used with any theme.\n         */\n        theme: z.enum(['light', 'dark']).optional()\n    });\n\n    /**\n     * Base schema to add `icons` property.\n     *\n     */\n    const IconsSchema = z.object({\n        /**\n         * Optional set of sized icons that the client can display in a user interface.\n         *\n         * Clients that support rendering icons MUST support at least the following MIME types:\n         * - `image/png` - PNG images (safe, universal compatibility)\n         * - `image/jpeg` (and `image/jpg`) - JPEG images (safe, universal compatibility)\n         *\n         * Clients that support rendering icons SHOULD also support:\n         * - `image/svg+xml` - SVG images (scalable but requires security precautions)\n         * - `image/webp` - WebP images (modern, efficient format)\n         */\n        icons: z.array(IconSchema).optional()\n    });\n\n    /**\n     * Base metadata interface for common properties across {@link Resource | resources}, {@link Tool | tools}, {@link Prompt | prompts}, and {@link Implementation | implementations}.\n     */\n    const BaseMetadataSchema = z.object({\n        /** Intended for programmatic or logical use, but used as a display name in past specs or fallback */\n        name: z.string(),\n        /**\n         * Intended for UI and end-user contexts — optimized to be human-readable and easily understood,\n         * even by those unfamiliar with domain-specific terminology.\n         *\n         * If not provided, the `name` should be used for display (except for `Tool`,\n         * where `annotations.title` should be given precedence over using `name`,\n         * if present).\n         */\n        title: z.string().optional()\n    });\n\n    /* Initialization */\n    /**\n     * Describes the name and version of an MCP implementation.\n     */\n    const ImplementationSchema = BaseMetadataSchema.extend({\n        ...BaseMetadataSchema.shape,\n        ...IconsSchema.shape,\n        version: z.string(),\n        /**\n         * An optional URL of the website for this implementation.\n         */\n        websiteUrl: z.string().optional(),\n\n        /**\n         * An optional human-readable description of what this implementation does.\n         *\n         * This can be used by clients or servers to provide context about their purpose\n         * and capabilities. For example, a server might describe the types of resources\n         * or tools it provides, while a client might describe its intended use case.\n         */\n        description: z.string().optional()\n    });\n\n    const FormElicitationCapabilitySchema = z.intersection(\n        z.object({\n            applyDefaults: z.boolean().optional()\n        }),\n        JSONObjectSchema\n    );\n\n    const ElicitationCapabilitySchema = z.preprocess(\n        value => {\n            if (value && typeof value === 'object' && !Array.isArray(value) && Object.keys(value as Record<string, unknown>).length === 0) {\n                return { form: {} };\n            }\n            return value;\n        },\n        z.intersection(\n            z.object({\n                form: FormElicitationCapabilitySchema.optional(),\n                url: JSONObjectSchema.optional()\n            }),\n            JSONObjectSchema.optional()\n        )\n    );\n\n    /**\n     * Task capabilities for clients, indicating which request types support task creation.\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n     */\n    const ClientTasksCapabilitySchema = z.looseObject({\n        /**\n         * Present if the client supports listing tasks.\n         */\n        list: JSONObjectSchema.optional(),\n        /**\n         * Present if the client supports cancelling tasks.\n         */\n        cancel: JSONObjectSchema.optional(),\n        /**\n         * Capabilities for task creation on specific request types.\n         */\n        requests: z\n            .looseObject({\n                /**\n                 * Task support for sampling requests.\n                 */\n                sampling: z\n                    .looseObject({\n                        createMessage: JSONObjectSchema.optional()\n                    })\n                    .optional(),\n                /**\n                 * Task support for elicitation requests.\n                 */\n                elicitation: z\n                    .looseObject({\n                        create: JSONObjectSchema.optional()\n                    })\n                    .optional()\n            })\n            .optional()\n    });\n\n    /**\n     * Task capabilities for servers, indicating which request types support task creation.\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n     */\n    const ServerTasksCapabilitySchema = z.looseObject({\n        /**\n         * Present if the server supports listing tasks.\n         */\n        list: JSONObjectSchema.optional(),\n        /**\n         * Present if the server supports cancelling tasks.\n         */\n        cancel: JSONObjectSchema.optional(),\n        /**\n         * Capabilities for task creation on specific request types.\n         */\n        requests: z\n            .looseObject({\n                /**\n                 * Task support for tool requests.\n                 */\n                tools: z\n                    .looseObject({\n                        call: JSONObjectSchema.optional()\n                    })\n                    .optional()\n            })\n            .optional()\n    });\n\n    /**\n     * Capabilities a client may support. Known capabilities are defined here, in this schema, but this is not a closed set: any client can define its own, additional capabilities.\n     */\n    const ClientCapabilitiesSchema = z.object({\n        /**\n         * Experimental, non-standard capabilities that the client supports.\n         */\n        experimental: z.record(z.string(), JSONObjectSchema).optional(),\n        /**\n         * Present if the client supports sampling from an LLM.\n         *\n         * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n         * in the specification for at least twelve months. Migrate to calling LLM\n         * provider APIs directly.\n         */\n        sampling: z\n            .object({\n                /**\n                 * Present if the client supports context inclusion via `includeContext` parameter.\n                 * If not declared, servers SHOULD only use `includeContext: \"none\"` (or omit it).\n                 */\n                context: JSONObjectSchema.optional(),\n                /**\n                 * Present if the client supports tool use via `tools` and `toolChoice` parameters.\n                 */\n                tools: JSONObjectSchema.optional()\n            })\n            .optional(),\n        /**\n         * Present if the client supports eliciting user input.\n         */\n        elicitation: ElicitationCapabilitySchema.optional(),\n        /**\n         * Present if the client supports listing roots.\n         *\n         * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n         * in the specification for at least twelve months. Migrate to passing paths via\n         * tool parameters, resource URIs, or configuration.\n         */\n        roots: z\n            .object({\n                /**\n                 * Whether the client supports issuing notifications for changes to the roots list.\n                 */\n                listChanged: z.boolean().optional()\n            })\n            .optional(),\n        /**\n         * Present if the client supports task creation.\n         *\n         * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; parsed for interoperability only — servers built on this SDK never advertise it.\n         */\n        tasks: ClientTasksCapabilitySchema.optional(),\n        /**\n         * Extensions that the client supports. Keys are extension identifiers (vendor-prefix/extension-name).\n         */\n        extensions: z.record(z.string(), JSONObjectSchema).optional()\n    });\n\n    const InitializeRequestParamsSchema = BaseRequestParamsSchema.extend({\n        /**\n         * The latest version of the Model Context Protocol that the client supports. The client MAY decide to support older versions as well.\n         */\n        protocolVersion: z.string(),\n        capabilities: ClientCapabilitiesSchema,\n        clientInfo: ImplementationSchema\n    });\n    /**\n     * This request is sent from the client to the server when it first connects, asking it to begin initialization.\n     */\n    const InitializeRequestSchema = RequestSchema.extend({\n        method: z.literal('initialize'),\n        params: InitializeRequestParamsSchema\n    });\n\n    /**\n     * Capabilities that a server may support. Known capabilities are defined here, in this schema, but this is not a closed set: any server can define its own, additional capabilities.\n     */\n    const ServerCapabilitiesSchema = z.object({\n        /**\n         * Experimental, non-standard capabilities that the server supports.\n         */\n        experimental: z.record(z.string(), JSONObjectSchema).optional(),\n        /**\n         * Present if the server supports sending log messages to the client.\n         *\n         * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n         * in the specification for at least twelve months. Migrate to stderr logging\n         * (STDIO servers) or OpenTelemetry.\n         */\n        logging: JSONObjectSchema.optional(),\n        /**\n         * Present if the server supports sending completions to the client.\n         */\n        completions: JSONObjectSchema.optional(),\n        /**\n         * Present if the server offers any prompt templates.\n         */\n        prompts: z\n            .object({\n                /**\n                 * Whether this server supports issuing notifications for changes to the prompt list.\n                 */\n                listChanged: z.boolean().optional()\n            })\n            .optional(),\n        /**\n         * Present if the server offers any resources to read.\n         */\n        resources: z\n            .object({\n                /**\n                 * Whether this server supports clients subscribing to resource updates.\n                 */\n                subscribe: z.boolean().optional(),\n\n                /**\n                 * Whether this server supports issuing notifications for changes to the resource list.\n                 */\n                listChanged: z.boolean().optional()\n            })\n            .optional(),\n        /**\n         * Present if the server offers any tools to call.\n         */\n        tools: z\n            .object({\n                /**\n                 * Whether this server supports issuing notifications for changes to the tool list.\n                 */\n                listChanged: z.boolean().optional()\n            })\n            .optional(),\n        /**\n         * Present if the server supports task creation.\n         *\n         * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; parsed for interoperability only — servers built on this SDK never advertise it.\n         */\n        tasks: ServerTasksCapabilitySchema.optional(),\n        /**\n         * Extensions that the server supports. Keys are extension identifiers (vendor-prefix/extension-name).\n         */\n        extensions: z.record(z.string(), JSONObjectSchema).optional()\n    });\n\n    /**\n     * After receiving an initialize request from the client, the server sends this response.\n     */\n    const InitializeResultSchema = ResultSchema.extend({\n        /**\n         * The version of the Model Context Protocol that the server wants to use. This may not match the version that the client requested. If the client cannot support this version, it MUST disconnect.\n         */\n        protocolVersion: z.string(),\n        capabilities: ServerCapabilitiesSchema,\n        serverInfo: ImplementationSchema,\n        /**\n         * Instructions describing how to use the server and its features.\n         *\n         * This can be used by clients to improve the LLM's understanding of available tools, resources, etc. It can be thought of like a \"hint\" to the model. For example, this information MAY be added to the system prompt.\n         */\n        instructions: z.string().optional()\n    });\n\n    /**\n     * This notification is sent from the client to the server after initialization has finished.\n     */\n    const InitializedNotificationSchema = NotificationSchema.extend({\n        method: z.literal('notifications/initialized'),\n        params: NotificationsParamsSchema.optional()\n    });\n\n    /* Ping */\n    /**\n     * A ping, issued by either the server or the client, to check that the other party is still alive. The receiver must promptly respond, or else may be disconnected.\n     */\n    const PingRequestSchema = RequestSchema.extend({\n        method: z.literal('ping'),\n        params: BaseRequestParamsSchema.optional()\n    });\n\n    /* Progress notifications */\n    const ProgressSchema = z.object({\n        /**\n         * The progress thus far. This should increase every time progress is made, even if the total is unknown.\n         */\n        progress: z.number(),\n        /**\n         * Total number of items to process (or total progress required), if known.\n         */\n        total: z.optional(z.number()),\n        /**\n         * An optional message describing the current progress.\n         */\n        message: z.optional(z.string())\n    });\n\n    const ProgressNotificationParamsSchema = z.object({\n        ...NotificationsParamsSchema.shape,\n        ...ProgressSchema.shape,\n        /**\n         * The progress token which was given in the initial request, used to associate this notification with the request that is proceeding.\n         */\n        progressToken: ProgressTokenSchema\n    });\n    /**\n     * An out-of-band notification used to inform the receiver of a progress update for a long-running request.\n     *\n     * @category notifications/progress\n     */\n    const ProgressNotificationSchema = NotificationSchema.extend({\n        method: z.literal('notifications/progress'),\n        params: ProgressNotificationParamsSchema\n    });\n\n    const PaginatedRequestParamsSchema = BaseRequestParamsSchema.extend({\n        /**\n         * An opaque token representing the current pagination position.\n         * If provided, the server should return results starting after this cursor.\n         */\n        cursor: CursorSchema.optional()\n    });\n\n    /* Pagination */\n    const PaginatedRequestSchema = RequestSchema.extend({\n        params: PaginatedRequestParamsSchema.optional()\n    });\n\n    const PaginatedResultSchema = ResultSchema.extend({\n        /**\n         * An opaque token representing the pagination position after the last returned result.\n         * If present, there may be more results available.\n         */\n        nextCursor: CursorSchema.optional()\n    });\n\n    /* Resources */\n    /**\n     * The contents of a specific resource or sub-resource.\n     */\n    const ResourceContentsSchema = z.object({\n        /**\n         * The URI of this resource.\n         */\n        uri: z.string(),\n        /**\n         * The MIME type of this resource, if known.\n         */\n        mimeType: z.optional(z.string()),\n        /**\n         * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n         * for notes on `_meta` usage.\n         */\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    const TextResourceContentsSchema = ResourceContentsSchema.extend({\n        /**\n         * The text of the item. This must only be set if the item can actually be represented as text (not binary data).\n         */\n        text: z.string()\n    });\n\n    /**\n     * A Zod schema for validating Base64 strings that is more performant and\n     * robust for very large inputs than the default regex-based check. It avoids\n     * stack overflows by using the native `atob` function for validation.\n     */\n    const Base64Schema = z.string().refine(\n        val => {\n            try {\n                // atob throws a DOMException if the string contains characters\n                // that are not part of the Base64 character set.\n                atob(val);\n                return true;\n            } catch {\n                return false;\n            }\n        },\n        { message: 'Invalid Base64 string' }\n    );\n\n    const BlobResourceContentsSchema = ResourceContentsSchema.extend({\n        /**\n         * A base64-encoded string representing the binary data of the item.\n         */\n        blob: Base64Schema\n    });\n\n    /**\n     * The sender or recipient of messages and data in a conversation.\n     */\n    const RoleSchema = z.enum(['user', 'assistant']);\n\n    /**\n     * Optional annotations providing clients additional context about a resource.\n     */\n    const AnnotationsSchema = z.object({\n        /**\n         * Intended audience(s) for the resource.\n         */\n        audience: z.array(RoleSchema).optional(),\n\n        /**\n         * Importance hint for the resource, from 0 (least) to 1 (most).\n         */\n        priority: z.number().min(0).max(1).optional(),\n\n        /**\n         * ISO 8601 timestamp for the most recent modification.\n         */\n        lastModified: z.iso.datetime({ offset: true }).optional()\n    });\n\n    /**\n     * A known resource that the server is capable of reading.\n     */\n    const ResourceSchema = z.object({\n        ...BaseMetadataSchema.shape,\n        ...IconsSchema.shape,\n        /**\n         * The URI of this resource.\n         */\n        uri: z.string(),\n\n        /**\n         * A description of what this resource represents.\n         *\n         * This can be used by clients to improve the LLM's understanding of available resources. It can be thought of like a \"hint\" to the model.\n         */\n        description: z.optional(z.string()),\n\n        /**\n         * The MIME type of this resource, if known.\n         */\n        mimeType: z.optional(z.string()),\n\n        /**\n         * The size of the raw resource content, in bytes (i.e., before base64 encoding or any tokenization), if known.\n         *\n         * This can be used by Hosts to display file sizes and estimate context window usage.\n         */\n        size: z.optional(z.number()),\n\n        /**\n         * Optional annotations for the client.\n         */\n        annotations: AnnotationsSchema.optional(),\n\n        /**\n         * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n         * for notes on `_meta` usage.\n         */\n        _meta: z.optional(z.looseObject({}))\n    });\n\n    /**\n     * A template description for resources available on the server.\n     */\n    const ResourceTemplateSchema = z.object({\n        ...BaseMetadataSchema.shape,\n        ...IconsSchema.shape,\n        /**\n         * A URI template (according to RFC 6570) that can be used to construct resource URIs.\n         */\n        uriTemplate: z.string(),\n\n        /**\n         * A description of what this template is for.\n         *\n         * This can be used by clients to improve the LLM's understanding of available resources. It can be thought of like a \"hint\" to the model.\n         */\n        description: z.optional(z.string()),\n\n        /**\n         * The MIME type for all resources that match this template. This should only be included if all resources matching this template have the same type.\n         */\n        mimeType: z.optional(z.string()),\n\n        /**\n         * Optional annotations for the client.\n         */\n        annotations: AnnotationsSchema.optional(),\n\n        /**\n         * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n         * for notes on `_meta` usage.\n         */\n        _meta: z.optional(z.looseObject({}))\n    });\n\n    /**\n     * Sent from the client to request a list of resources the server has.\n     */\n    const ListResourcesRequestSchema = PaginatedRequestSchema.extend({\n        method: z.literal('resources/list')\n    });\n\n    /**\n     * The server's response to a {@linkcode ListResourcesRequest | resources/list} request from the client.\n     */\n    const ListResourcesResultSchema = PaginatedResultSchema.extend({\n        resources: z.array(ResourceSchema)\n    });\n\n    /**\n     * Sent from the client to request a list of resource templates the server has.\n     */\n    const ListResourceTemplatesRequestSchema = PaginatedRequestSchema.extend({\n        method: z.literal('resources/templates/list')\n    });\n\n    /**\n     * The server's response to a {@linkcode ListResourceTemplatesRequest | resources/templates/list} request from the client.\n     */\n    const ListResourceTemplatesResultSchema = PaginatedResultSchema.extend({\n        resourceTemplates: z.array(ResourceTemplateSchema)\n    });\n\n    const ResourceRequestParamsSchema = BaseRequestParamsSchema.extend({\n        /**\n         * The URI of the resource to read. The URI can use any protocol; it is up to the server how to interpret it.\n         *\n         * @format uri\n         */\n        uri: z.string()\n    });\n\n    /**\n     * Parameters for a {@linkcode ReadResourceRequest | resources/read} request.\n     */\n    const ReadResourceRequestParamsSchema = ResourceRequestParamsSchema;\n\n    /**\n     * Sent from the client to the server, to read a specific resource URI.\n     */\n    const ReadResourceRequestSchema = RequestSchema.extend({\n        method: z.literal('resources/read'),\n        params: ReadResourceRequestParamsSchema\n    });\n\n    /**\n     * The server's response to a {@linkcode ReadResourceRequest | resources/read} request from the client.\n     */\n    const ReadResourceResultSchema = ResultSchema.extend({\n        contents: z.array(z.union([TextResourceContentsSchema, BlobResourceContentsSchema]))\n    });\n\n    /**\n     * An optional notification from the server to the client, informing it that the list of resources it can read from has changed. This may be issued by servers without any previous subscription from the client.\n     */\n    const ResourceListChangedNotificationSchema = NotificationSchema.extend({\n        method: z.literal('notifications/resources/list_changed'),\n        params: NotificationsParamsSchema.optional()\n    });\n\n    const SubscribeRequestParamsSchema = ResourceRequestParamsSchema;\n    /**\n     * Sent from the client to request `resources/updated` notifications from the server whenever a particular resource changes.\n     */\n    const SubscribeRequestSchema = RequestSchema.extend({\n        method: z.literal('resources/subscribe'),\n        params: SubscribeRequestParamsSchema\n    });\n\n    const UnsubscribeRequestParamsSchema = ResourceRequestParamsSchema;\n    /**\n     * Sent from the client to request cancellation of {@linkcode ResourceUpdatedNotification | resources/updated} notifications from the server. This should follow a previous {@linkcode SubscribeRequest | resources/subscribe} request.\n     */\n    const UnsubscribeRequestSchema = RequestSchema.extend({\n        method: z.literal('resources/unsubscribe'),\n        params: UnsubscribeRequestParamsSchema\n    });\n\n    /**\n     * Parameters for a {@linkcode ResourceUpdatedNotification | notifications/resources/updated} notification.\n     */\n    const ResourceUpdatedNotificationParamsSchema = NotificationsParamsSchema.extend({\n        /**\n         * The URI of the resource that has been updated. This might be a sub-resource of the one that the client actually subscribed to.\n         */\n        uri: z.string()\n    });\n\n    /**\n     * A notification from the server to the client, informing it that a resource has changed and may need to be read again. This should only be sent if the client previously sent a {@linkcode SubscribeRequest | resources/subscribe} request.\n     */\n    const ResourceUpdatedNotificationSchema = NotificationSchema.extend({\n        method: z.literal('notifications/resources/updated'),\n        params: ResourceUpdatedNotificationParamsSchema\n    });\n\n    /* Prompts */\n    /**\n     * Describes an argument that a prompt can accept.\n     */\n    const PromptArgumentSchema = z.object({\n        /**\n         * The name of the argument.\n         */\n        name: z.string(),\n        /**\n         * A human-readable description of the argument.\n         */\n        description: z.optional(z.string()),\n        /**\n         * Whether this argument must be provided.\n         */\n        required: z.optional(z.boolean())\n    });\n\n    /**\n     * A prompt or prompt template that the server offers.\n     */\n    const PromptSchema = z.object({\n        ...BaseMetadataSchema.shape,\n        ...IconsSchema.shape,\n        /**\n         * An optional description of what this prompt provides\n         */\n        description: z.optional(z.string()),\n        /**\n         * A list of arguments to use for templating the prompt.\n         */\n        arguments: z.optional(z.array(PromptArgumentSchema)),\n        /**\n         * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n         * for notes on `_meta` usage.\n         */\n        _meta: z.optional(z.looseObject({}))\n    });\n\n    /**\n     * Sent from the client to request a list of prompts and prompt templates the server has.\n     */\n    const ListPromptsRequestSchema = PaginatedRequestSchema.extend({\n        method: z.literal('prompts/list')\n    });\n\n    /**\n     * The server's response to a {@linkcode ListPromptsRequest | prompts/list} request from the client.\n     */\n    const ListPromptsResultSchema = PaginatedResultSchema.extend({\n        prompts: z.array(PromptSchema)\n    });\n\n    /**\n     * Parameters for a {@linkcode GetPromptRequest | prompts/get} request.\n     */\n    const GetPromptRequestParamsSchema = BaseRequestParamsSchema.extend({\n        /**\n         * The name of the prompt or prompt template.\n         */\n        name: z.string(),\n        /**\n         * Arguments to use for templating the prompt.\n         */\n        arguments: z.record(z.string(), z.string()).optional()\n    });\n    /**\n     * Used by the client to get a prompt provided by the server.\n     */\n    const GetPromptRequestSchema = RequestSchema.extend({\n        method: z.literal('prompts/get'),\n        params: GetPromptRequestParamsSchema\n    });\n\n    /**\n     * Text provided to or from an LLM.\n     */\n    const TextContentSchema = z.object({\n        type: z.literal('text'),\n        /**\n         * The text content of the message.\n         */\n        text: z.string(),\n\n        /**\n         * Optional annotations for the client.\n         */\n        annotations: AnnotationsSchema.optional(),\n\n        /**\n         * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n         * for notes on `_meta` usage.\n         */\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    /**\n     * An image provided to or from an LLM.\n     */\n    const ImageContentSchema = z.object({\n        type: z.literal('image'),\n        /**\n         * The base64-encoded image data.\n         */\n        data: Base64Schema,\n        /**\n         * The MIME type of the image. Different providers may support different image types.\n         */\n        mimeType: z.string(),\n\n        /**\n         * Optional annotations for the client.\n         */\n        annotations: AnnotationsSchema.optional(),\n\n        /**\n         * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n         * for notes on `_meta` usage.\n         */\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    /**\n     * Audio content provided to or from an LLM.\n     */\n    const AudioContentSchema = z.object({\n        type: z.literal('audio'),\n        /**\n         * The base64-encoded audio data.\n         */\n        data: Base64Schema,\n        /**\n         * The MIME type of the audio. Different providers may support different audio types.\n         */\n        mimeType: z.string(),\n\n        /**\n         * Optional annotations for the client.\n         */\n        annotations: AnnotationsSchema.optional(),\n\n        /**\n         * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n         * for notes on `_meta` usage.\n         */\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    /**\n     * A tool call request from an assistant (LLM).\n     * Represents the assistant's request to use a tool.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to calling LLM\n     * provider APIs directly.\n     */\n    const ToolUseContentSchema = z.object({\n        type: z.literal('tool_use'),\n        /**\n         * The name of the tool to invoke.\n         * Must match a tool name from the request's tools array.\n         */\n        name: z.string(),\n        /**\n         * Unique identifier for this tool call.\n         * Used to correlate with `ToolResultContent` in subsequent messages.\n         */\n        id: z.string(),\n        /**\n         * Arguments to pass to the tool.\n         * Must conform to the tool's `inputSchema`.\n         */\n        input: z.record(z.string(), z.unknown()),\n        /**\n         * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n         * for notes on `_meta` usage.\n         */\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    /**\n     * The contents of a resource, embedded into a prompt or tool call result.\n     */\n    const EmbeddedResourceSchema = z.object({\n        type: z.literal('resource'),\n        resource: z.union([TextResourceContentsSchema, BlobResourceContentsSchema]),\n        /**\n         * Optional annotations for the client.\n         */\n        annotations: AnnotationsSchema.optional(),\n        /**\n         * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n         * for notes on `_meta` usage.\n         */\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    /**\n     * A resource that the server is capable of reading, included in a prompt or tool call result.\n     *\n     * Note: resource links returned by tools are not guaranteed to appear in the results of {@linkcode ListResourcesRequest | resources/list} requests.\n     */\n    const ResourceLinkSchema = ResourceSchema.extend({\n        type: z.literal('resource_link')\n    });\n\n    /**\n     * A content block that can be used in prompts and tool results.\n     */\n    const ContentBlockSchema = z.union([\n        TextContentSchema,\n        ImageContentSchema,\n        AudioContentSchema,\n        ResourceLinkSchema,\n        EmbeddedResourceSchema\n    ]);\n\n    /**\n     * Describes a message returned as part of a prompt.\n     */\n    const PromptMessageSchema = z.object({\n        role: RoleSchema,\n        content: ContentBlockSchema\n    });\n\n    /**\n     * The server's response to a {@linkcode GetPromptRequest | prompts/get} request from the client.\n     */\n    const GetPromptResultSchema = ResultSchema.extend({\n        /**\n         * An optional description for the prompt.\n         */\n        description: z.string().optional(),\n        messages: z.array(PromptMessageSchema)\n    });\n\n    /**\n     * An optional notification from the server to the client, informing it that the list of prompts it offers has changed. This may be issued by servers without any previous subscription from the client.\n     */\n    const PromptListChangedNotificationSchema = NotificationSchema.extend({\n        method: z.literal('notifications/prompts/list_changed'),\n        params: NotificationsParamsSchema.optional()\n    });\n\n    /* Tools */\n    /**\n     * Additional properties describing a `Tool` to clients.\n     *\n     * NOTE: all properties in {@linkcode ToolAnnotations} are **hints**.\n     * They are not guaranteed to provide a faithful description of\n     * tool behavior (including descriptive properties like `title`).\n     *\n     * Clients should never make tool use decisions based on `ToolAnnotations`\n     * received from untrusted servers.\n     */\n    const ToolAnnotationsSchema = z.object({\n        /**\n         * A human-readable title for the tool.\n         */\n        title: z.string().optional(),\n\n        /**\n         * If `true`, the tool does not modify its environment.\n         *\n         * Default: `false`\n         */\n        readOnlyHint: z.boolean().optional(),\n\n        /**\n         * If `true`, the tool may perform destructive updates to its environment.\n         * If `false`, the tool performs only additive updates.\n         *\n         * (This property is meaningful only when `readOnlyHint == false`)\n         *\n         * Default: `true`\n         */\n        destructiveHint: z.boolean().optional(),\n\n        /**\n         * If `true`, calling the tool repeatedly with the same arguments\n         * will have no additional effect on its environment.\n         *\n         * (This property is meaningful only when `readOnlyHint == false`)\n         *\n         * Default: `false`\n         */\n        idempotentHint: z.boolean().optional(),\n\n        /**\n         * If `true`, this tool may interact with an \"open world\" of external\n         * entities. If `false`, the tool's domain of interaction is closed.\n         * For example, the world of a web search tool is open, whereas that\n         * of a memory tool is not.\n         *\n         * Default: `true`\n         */\n        openWorldHint: z.boolean().optional()\n    });\n\n    /**\n     * Execution-related properties for a tool.\n     */\n    const ToolExecutionSchema = z.object({\n        /**\n         * Indicates the tool's preference for task-augmented execution.\n         * - `\"required\"`: Clients MUST invoke the tool as a task\n         * - `\"optional\"`: Clients MAY invoke the tool as a task or normal request\n         * - `\"forbidden\"`: Clients MUST NOT attempt to invoke the tool as a task\n         *\n         * If not present, defaults to `\"forbidden\"`.\n         */\n        taskSupport: z.enum(['required', 'optional', 'forbidden']).optional()\n    });\n\n    /**\n     * Definition for a tool the client can call.\n     */\n    const ToolSchema = z.object({\n        ...BaseMetadataSchema.shape,\n        ...IconsSchema.shape,\n        /**\n         * A human-readable description of the tool.\n         */\n        description: z.string().optional(),\n        /**\n         * A JSON Schema 2020-12 object defining the expected parameters for the tool.\n         * Must have `type: 'object'` at the root level per MCP spec.\n         */\n        inputSchema: z\n            .object({\n                type: z.literal('object'),\n                properties: z.record(z.string(), JSONValueSchema).optional(),\n                required: z.array(z.string()).optional()\n            })\n            .catchall(z.unknown()),\n        /**\n         * An optional JSON Schema 2020-12 object defining the structure of the tool's output\n         * returned in the `structuredContent` field of a `CallToolResult`.\n         * Must have `type: 'object'` at the root level per MCP spec.\n         */\n        outputSchema: z\n            .object({\n                type: z.literal('object'),\n                properties: z.record(z.string(), JSONValueSchema).optional(),\n                required: z.array(z.string()).optional()\n            })\n            .catchall(z.unknown())\n            .optional(),\n        /**\n         * Optional additional tool information.\n         */\n        annotations: ToolAnnotationsSchema.optional(),\n        /**\n         * Execution-related properties for this tool.\n         */\n        execution: ToolExecutionSchema.optional(),\n\n        /**\n         * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n         * for notes on `_meta` usage.\n         */\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    /**\n     * Sent from the client to request a list of tools the server has.\n     */\n    const ListToolsRequestSchema = PaginatedRequestSchema.extend({\n        method: z.literal('tools/list')\n    });\n\n    /**\n     * The server's response to a {@linkcode ListToolsRequest | tools/list} request from the client.\n     */\n    const ListToolsResultSchema = PaginatedResultSchema.extend({\n        tools: z.array(ToolSchema)\n    });\n\n    /**\n     * The server's response to a tool call.\n     */\n    const CallToolResultSchema = ResultSchema.extend({\n        /**\n         * A list of content objects that represent the result of the tool call.\n         *\n         * If the `Tool` does not define an outputSchema, this field MUST be present in the result.\n         * Required on the wire per the specification (it may be an empty array).\n         */\n        content: z.array(ContentBlockSchema),\n\n        /**\n         * An object containing structured tool output.\n         *\n         * If the `Tool` defines an outputSchema, this field MUST be present in the result, and contain a JSON object that matches the schema.\n         */\n        structuredContent: z.record(z.string(), z.unknown()).optional(),\n\n        /**\n         * Whether the tool call ended in an error.\n         *\n         * If not set, this is assumed to be `false` (the call was successful).\n         *\n         * Any errors that originate from the tool SHOULD be reported inside the result\n         * object, with `isError` set to `true`, _not_ as an MCP protocol-level error\n         * response. Otherwise, the LLM would not be able to see that an error occurred\n         * and self-correct.\n         *\n         * However, any errors in _finding_ the tool, an error indicating that the\n         * server does not support tool calls, or any other exceptional conditions,\n         * should be reported as an MCP error response.\n         */\n        isError: z.boolean().optional()\n    });\n\n    /**\n     * Parameters for a `tools/call` request.\n     */\n    const CallToolRequestParamsSchema = TaskAugmentedRequestParamsSchema.extend({\n        /**\n         * The name of the tool to call.\n         */\n        name: z.string(),\n        /**\n         * Arguments to pass to the tool.\n         */\n        arguments: z.record(z.string(), z.unknown()).optional()\n    });\n\n    /**\n     * Used by the client to invoke a tool provided by the server.\n     */\n    const CallToolRequestSchema = RequestSchema.extend({\n        method: z.literal('tools/call'),\n        params: CallToolRequestParamsSchema\n    });\n\n    /**\n     * An optional notification from the server to the client, informing it that the list of tools it offers has changed. This may be issued by servers without any previous subscription from the client.\n     */\n    const ToolListChangedNotificationSchema = NotificationSchema.extend({\n        method: z.literal('notifications/tools/list_changed'),\n        params: NotificationsParamsSchema.optional()\n    });\n\n    /* Logging */\n    /**\n     * The severity of a log message.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to stderr logging\n     * (STDIO servers) or OpenTelemetry.\n     */\n    const LoggingLevelSchema = z.enum(['debug', 'info', 'notice', 'warning', 'error', 'critical', 'alert', 'emergency']);\n\n    /**\n     * Parameters for a `logging/setLevel` request.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to stderr logging\n     * (STDIO servers) or OpenTelemetry.\n     */\n    const SetLevelRequestParamsSchema = BaseRequestParamsSchema.extend({\n        /**\n         * The level of logging that the client wants to receive from the server. The server should send all logs at this level and higher (i.e., more severe) to the client as `notifications/logging/message`.\n         */\n        level: LoggingLevelSchema\n    });\n    /**\n     * A request from the client to the server, to enable or adjust logging.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to stderr logging\n     * (STDIO servers) or OpenTelemetry.\n     */\n    const SetLevelRequestSchema = RequestSchema.extend({\n        method: z.literal('logging/setLevel'),\n        params: SetLevelRequestParamsSchema\n    });\n\n    /**\n     * Parameters for a `notifications/message` notification.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to stderr logging\n     * (STDIO servers) or OpenTelemetry.\n     */\n    const LoggingMessageNotificationParamsSchema = NotificationsParamsSchema.extend({\n        /**\n         * The severity of this log message.\n         */\n        level: LoggingLevelSchema,\n        /**\n         * An optional name of the logger issuing this message.\n         */\n        logger: z.string().optional(),\n        /**\n         * The data to be logged, such as a string message or an object. Any JSON serializable type is allowed here.\n         */\n        data: z.unknown()\n    });\n    /**\n     * Notification of a log message passed from server to client. If no `logging/setLevel` request has been sent from the client, the server MAY decide which messages to send automatically.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to stderr logging\n     * (STDIO servers) or OpenTelemetry.\n     */\n    const LoggingMessageNotificationSchema = NotificationSchema.extend({\n        method: z.literal('notifications/message'),\n        params: LoggingMessageNotificationParamsSchema\n    });\n\n    /* Sampling */\n    /**\n     * Hints to use for model selection.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to calling LLM\n     * provider APIs directly.\n     */\n    const ModelHintSchema = z.object({\n        /**\n         * A hint for a model name.\n         */\n        name: z.string().optional()\n    });\n\n    /**\n     * The server's preferences for model selection, requested of the client during sampling.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to calling LLM\n     * provider APIs directly.\n     */\n    const ModelPreferencesSchema = z.object({\n        /**\n         * Optional hints to use for model selection.\n         */\n        hints: z.array(ModelHintSchema).optional(),\n        /**\n         * How much to prioritize cost when selecting a model.\n         */\n        costPriority: z.number().min(0).max(1).optional(),\n        /**\n         * How much to prioritize sampling speed (latency) when selecting a model.\n         */\n        speedPriority: z.number().min(0).max(1).optional(),\n        /**\n         * How much to prioritize intelligence and capabilities when selecting a model.\n         */\n        intelligencePriority: z.number().min(0).max(1).optional()\n    });\n\n    /**\n     * Controls tool usage behavior in sampling requests.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to calling LLM\n     * provider APIs directly.\n     */\n    const ToolChoiceSchema = z.object({\n        /**\n         * Controls when tools are used:\n         * - `\"auto\"`: Model decides whether to use tools (default)\n         * - `\"required\"`: Model MUST use at least one tool before completing\n         * - `\"none\"`: Model MUST NOT use any tools\n         */\n        mode: z.enum(['auto', 'required', 'none']).optional()\n    });\n\n    /**\n     * The result of a tool execution, provided by the user (server).\n     * Represents the outcome of invoking a tool requested via `ToolUseContent`.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to calling LLM\n     * provider APIs directly.\n     */\n    const ToolResultContentSchema = z.object({\n        type: z.literal('tool_result'),\n        toolUseId: z.string().describe('The unique identifier for the corresponding tool call.'),\n        content: z.array(ContentBlockSchema),\n        structuredContent: z.object({}).loose().optional(),\n        isError: z.boolean().optional(),\n\n        /**\n         * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n         * for notes on `_meta` usage.\n         */\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    /**\n     * Basic content types for sampling responses (without tool use).\n     * Used for backwards-compatible {@linkcode CreateMessageResult} when tools are not used.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to calling LLM\n     * provider APIs directly.\n     */\n    const SamplingContentSchema = z.discriminatedUnion('type', [TextContentSchema, ImageContentSchema, AudioContentSchema]);\n\n    /**\n     * Content block types allowed in sampling messages.\n     * This includes text, image, audio, tool use requests, and tool results.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to calling LLM\n     * provider APIs directly.\n     */\n    const SamplingMessageContentBlockSchema = z.discriminatedUnion('type', [\n        TextContentSchema,\n        ImageContentSchema,\n        AudioContentSchema,\n        ToolUseContentSchema,\n        ToolResultContentSchema\n    ]);\n\n    /**\n     * Describes a message issued to or received from an LLM API.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to calling LLM\n     * provider APIs directly.\n     */\n    const SamplingMessageSchema = z.object({\n        role: RoleSchema,\n        content: z.union([SamplingMessageContentBlockSchema, z.array(SamplingMessageContentBlockSchema)]),\n        /**\n         * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n         * for notes on `_meta` usage.\n         */\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    /**\n     * Parameters for a `sampling/createMessage` request.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to calling LLM\n     * provider APIs directly.\n     */\n    const CreateMessageRequestParamsSchema = TaskAugmentedRequestParamsSchema.extend({\n        messages: z.array(SamplingMessageSchema),\n        /**\n         * The server's preferences for which model to select. The client MAY modify or omit this request.\n         */\n        modelPreferences: ModelPreferencesSchema.optional(),\n        /**\n         * An optional system prompt the server wants to use for sampling. The client MAY modify or omit this prompt.\n         */\n        systemPrompt: z.string().optional(),\n        /**\n         * A request to include context from one or more MCP servers (including the caller), to be attached to the prompt.\n         * The client MAY ignore this request.\n         *\n         * Default is `\"none\"`. The values `\"thisServer\"` and `\"allServers\"` are deprecated (SEP-2596): servers SHOULD\n         * omit this field or use `\"none\"`, and SHOULD only use the deprecated values if the client declares\n         * `ClientCapabilities`.`sampling.context`.\n         *\n         * @deprecated The `\"thisServer\"` and `\"allServers\"` values are deprecated as of protocol version 2025-11-25\n         * (SEP-2596) and will be removed no later than the Sampling feature itself (SEP-2577). Omit this field or use `\"none\"`.\n         */\n        includeContext: z.enum(['none', 'thisServer', 'allServers']).optional(),\n        temperature: z.number().optional(),\n        /**\n         * The requested maximum number of tokens to sample (to prevent runaway completions).\n         *\n         * The client MAY choose to sample fewer tokens than the requested maximum.\n         */\n        maxTokens: z.number().int(),\n        stopSequences: z.array(z.string()).optional(),\n        /**\n         * Optional metadata to pass through to the LLM provider. The format of this metadata is provider-specific.\n         */\n        metadata: JSONObjectSchema.optional(),\n        /**\n         * Tools that the model may use during generation.\n         * The client MUST return an error if this field is provided but `ClientCapabilities`.`sampling.tools` is not declared.\n         */\n        tools: z.array(ToolSchema).optional(),\n        /**\n         * Controls how the model uses tools.\n         * The client MUST return an error if this field is provided but `ClientCapabilities`.`sampling.tools` is not declared.\n         * Default is `{ mode: \"auto\" }`.\n         */\n        toolChoice: ToolChoiceSchema.optional()\n    });\n    /**\n     * A request from the server to sample an LLM via the client. The client has full discretion over which model to select. The client should also inform the user before beginning sampling, to allow them to inspect the request (human in the loop) and decide whether to approve it.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to calling LLM\n     * provider APIs directly.\n     */\n    const CreateMessageRequestSchema = RequestSchema.extend({\n        method: z.literal('sampling/createMessage'),\n        params: CreateMessageRequestParamsSchema\n    });\n\n    /**\n     * The client's response to a `sampling/create_message` request from the server.\n     * This is the backwards-compatible version that returns single content (no arrays).\n     * Used when the request does not include tools.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to calling LLM\n     * provider APIs directly.\n     */\n    const CreateMessageResultSchema = ResultSchema.extend({\n        /**\n         * The name of the model that generated the message.\n         */\n        model: z.string(),\n        /**\n         * The reason why sampling stopped, if known.\n         *\n         * Standard values:\n         * - `\"endTurn\"`: Natural end of the assistant's turn\n         * - `\"stopSequence\"`: A stop sequence was encountered\n         * - `\"maxTokens\"`: Maximum token limit was reached\n         *\n         * This field is an open string to allow for provider-specific stop reasons.\n         */\n        stopReason: z.optional(z.enum(['endTurn', 'stopSequence', 'maxTokens']).or(z.string())),\n        role: RoleSchema,\n        /**\n         * Response content. Single content block (text, image, or audio).\n         */\n        content: SamplingContentSchema\n    });\n\n    /**\n     * The client's response to a `sampling/create_message` request when tools were provided.\n     * This version supports array content for tool use flows.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to calling LLM\n     * provider APIs directly.\n     */\n    const CreateMessageResultWithToolsSchema = ResultSchema.extend({\n        /**\n         * The name of the model that generated the message.\n         */\n        model: z.string(),\n        /**\n         * The reason why sampling stopped, if known.\n         *\n         * Standard values:\n         * - `\"endTurn\"`: Natural end of the assistant's turn\n         * - `\"stopSequence\"`: A stop sequence was encountered\n         * - `\"maxTokens\"`: Maximum token limit was reached\n         * - `\"toolUse\"`: The model wants to use one or more tools\n         *\n         * This field is an open string to allow for provider-specific stop reasons.\n         */\n        stopReason: z.optional(z.enum(['endTurn', 'stopSequence', 'maxTokens', 'toolUse']).or(z.string())),\n        role: RoleSchema,\n        /**\n         * Response content. May be a single block or array. May include `ToolUseContent` if `stopReason` is `\"toolUse\"`.\n         */\n        content: z.union([SamplingMessageContentBlockSchema, z.array(SamplingMessageContentBlockSchema)])\n    });\n\n    /* Elicitation */\n    /**\n     * Primitive schema definition for boolean fields.\n     */\n    const BooleanSchemaSchema = z.object({\n        type: z.literal('boolean'),\n        title: z.string().optional(),\n        description: z.string().optional(),\n        default: z.boolean().optional()\n    });\n\n    /**\n     * Primitive schema definition for string fields.\n     */\n    const StringSchemaSchema = z.object({\n        type: z.literal('string'),\n        title: z.string().optional(),\n        description: z.string().optional(),\n        minLength: z.number().optional(),\n        maxLength: z.number().optional(),\n        format: z.enum(['email', 'uri', 'date', 'date-time']).optional(),\n        default: z.string().optional()\n    });\n\n    /**\n     * Primitive schema definition for number fields.\n     */\n    const NumberSchemaSchema = z.object({\n        type: z.enum(['number', 'integer']),\n        title: z.string().optional(),\n        description: z.string().optional(),\n        minimum: z.number().optional(),\n        maximum: z.number().optional(),\n        default: z.number().optional()\n    });\n\n    /**\n     * Schema for single-selection enumeration without display titles for options.\n     */\n    const UntitledSingleSelectEnumSchemaSchema = z.object({\n        type: z.literal('string'),\n        title: z.string().optional(),\n        description: z.string().optional(),\n        enum: z.array(z.string()),\n        default: z.string().optional()\n    });\n\n    /**\n     * Schema for single-selection enumeration with display titles for each option.\n     */\n    const TitledSingleSelectEnumSchemaSchema = z.object({\n        type: z.literal('string'),\n        title: z.string().optional(),\n        description: z.string().optional(),\n        oneOf: z.array(\n            z.object({\n                const: z.string(),\n                title: z.string()\n            })\n        ),\n        default: z.string().optional()\n    });\n\n    /**\n     * Use {@linkcode TitledSingleSelectEnumSchema} instead.\n     * This interface will be removed in a future version.\n     */\n    const LegacyTitledEnumSchemaSchema = z.object({\n        type: z.literal('string'),\n        title: z.string().optional(),\n        description: z.string().optional(),\n        enum: z.array(z.string()),\n        enumNames: z.array(z.string()).optional(),\n        default: z.string().optional()\n    });\n\n    // Combined single selection enumeration\n    const SingleSelectEnumSchemaSchema = z.union([UntitledSingleSelectEnumSchemaSchema, TitledSingleSelectEnumSchemaSchema]);\n\n    /**\n     * Schema for multiple-selection enumeration without display titles for options.\n     */\n    const UntitledMultiSelectEnumSchemaSchema = z.object({\n        type: z.literal('array'),\n        title: z.string().optional(),\n        description: z.string().optional(),\n        minItems: z.number().optional(),\n        maxItems: z.number().optional(),\n        items: z.object({\n            type: z.literal('string'),\n            enum: z.array(z.string())\n        }),\n        default: z.array(z.string()).optional()\n    });\n\n    /**\n     * Schema for multiple-selection enumeration with display titles for each option.\n     */\n    const TitledMultiSelectEnumSchemaSchema = z.object({\n        type: z.literal('array'),\n        title: z.string().optional(),\n        description: z.string().optional(),\n        minItems: z.number().optional(),\n        maxItems: z.number().optional(),\n        items: z.object({\n            anyOf: z.array(\n                z.object({\n                    const: z.string(),\n                    title: z.string()\n                })\n            )\n        }),\n        default: z.array(z.string()).optional()\n    });\n\n    /**\n     * Combined schema for multiple-selection enumeration\n     */\n    const MultiSelectEnumSchemaSchema = z.union([UntitledMultiSelectEnumSchemaSchema, TitledMultiSelectEnumSchemaSchema]);\n\n    /**\n     * Primitive schema definition for enum fields.\n     */\n    const EnumSchemaSchema = z.union([LegacyTitledEnumSchemaSchema, SingleSelectEnumSchemaSchema, MultiSelectEnumSchemaSchema]);\n\n    /**\n     * Union of all primitive schema definitions.\n     */\n    const PrimitiveSchemaDefinitionSchema = z.union([EnumSchemaSchema, BooleanSchemaSchema, StringSchemaSchema, NumberSchemaSchema]);\n\n    /**\n     * Parameters for an `elicitation/create` request for form-based elicitation.\n     */\n    const ElicitRequestFormParamsSchema = TaskAugmentedRequestParamsSchema.extend({\n        /**\n         * The elicitation mode.\n         *\n         * Optional for backward compatibility. Clients MUST treat missing `mode` as `\"form\"`.\n         */\n        mode: z.literal('form').optional(),\n        /**\n         * The message to present to the user describing what information is being requested.\n         */\n        message: z.string(),\n        /**\n         * A restricted subset of JSON Schema.\n         * Only top-level properties are allowed, without nesting.\n         */\n        requestedSchema: z\n            .object({\n                type: z.literal('object'),\n                properties: z.record(z.string(), PrimitiveSchemaDefinitionSchema),\n                required: z.array(z.string()).optional()\n            })\n            .catchall(z.unknown())\n    });\n\n    /**\n     * Parameters for an {@linkcode ElicitRequest | elicitation/create} request for URL-based elicitation.\n     */\n    const ElicitRequestURLParamsSchema = TaskAugmentedRequestParamsSchema.extend({\n        /**\n         * The elicitation mode.\n         */\n        mode: z.literal('url'),\n        /**\n         * The message to present to the user explaining why the interaction is needed.\n         */\n        message: z.string(),\n        /**\n         * The ID of the elicitation, which must be unique within the context of the server.\n         * The client MUST treat this ID as an opaque value.\n         */\n        elicitationId: z.string(),\n        /**\n         * The URL that the user should navigate to.\n         */\n        url: z.string().url()\n    });\n\n    /**\n     * The parameters for a request to elicit additional information from the user via the client.\n     */\n    const ElicitRequestParamsSchema = z.union([ElicitRequestFormParamsSchema, ElicitRequestURLParamsSchema]);\n\n    /**\n     * A request from the server to elicit user input via the client.\n     * The client should present the message and form fields to the user (form mode)\n     * or navigate to a URL (URL mode).\n     */\n    const ElicitRequestSchema = RequestSchema.extend({\n        method: z.literal('elicitation/create'),\n        params: ElicitRequestParamsSchema\n    });\n\n    /**\n     * Parameters for a {@linkcode ElicitationCompleteNotification | notifications/elicitation/complete} notification.\n     *\n     * @category notifications/elicitation/complete\n     */\n    const ElicitationCompleteNotificationParamsSchema = NotificationsParamsSchema.extend({\n        /**\n         * The ID of the elicitation that completed.\n         */\n        elicitationId: z.string()\n    });\n\n    /**\n     * A notification from the server to the client, informing it of a completion of an out-of-band elicitation request.\n     *\n     * @category notifications/elicitation/complete\n     */\n    const ElicitationCompleteNotificationSchema = NotificationSchema.extend({\n        method: z.literal('notifications/elicitation/complete'),\n        params: ElicitationCompleteNotificationParamsSchema\n    });\n\n    /**\n     * The client's response to an {@linkcode ElicitRequest | elicitation/create} request from the server.\n     */\n    const ElicitResultSchema = ResultSchema.extend({\n        /**\n         * The user action in response to the elicitation.\n         * - `\"accept\"`: User submitted the form/confirmed the action\n         * - `\"decline\"`: User explicitly declined the action\n         * - `\"cancel\"`: User dismissed without making an explicit choice\n         */\n        action: z.enum(['accept', 'decline', 'cancel']),\n        /**\n         * The submitted form data, only present when action is `\"accept\"`.\n         * Contains values matching the requested schema.\n         * Per MCP spec, content is \"typically omitted\" for decline/cancel actions.\n         * We normalize `null` to `undefined` for leniency while maintaining type compatibility.\n         */\n        content: z.preprocess(\n            val => (val === null ? undefined : val),\n            z.record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.array(z.string())])).optional()\n        )\n    });\n\n    /* Autocomplete */\n    /**\n     * A reference to a resource or resource template definition.\n     */\n    const ResourceTemplateReferenceSchema = z.object({\n        type: z.literal('ref/resource'),\n        /**\n         * The URI or URI template of the resource.\n         */\n        uri: z.string()\n    });\n\n    /**\n     * Identifies a prompt.\n     */\n    const PromptReferenceSchema = z.object({\n        type: z.literal('ref/prompt'),\n        /**\n         * The name of the prompt or prompt template\n         */\n        name: z.string()\n    });\n\n    /**\n     * Parameters for a {@linkcode CompleteRequest | completion/complete} request.\n     */\n    const CompleteRequestParamsSchema = BaseRequestParamsSchema.extend({\n        ref: z.union([PromptReferenceSchema, ResourceTemplateReferenceSchema]),\n        /**\n         * The argument's information\n         */\n        argument: z.object({\n            /**\n             * The name of the argument\n             */\n            name: z.string(),\n            /**\n             * The value of the argument to use for completion matching.\n             */\n            value: z.string()\n        }),\n        context: z\n            .object({\n                /**\n                 * Previously-resolved variables in a URI template or prompt.\n                 */\n                arguments: z.record(z.string(), z.string()).optional()\n            })\n            .optional()\n    });\n    /**\n     * A request from the client to the server, to ask for completion options.\n     */\n    const CompleteRequestSchema = RequestSchema.extend({\n        method: z.literal('completion/complete'),\n        params: CompleteRequestParamsSchema\n    });\n\n    /**\n     * The server's response to a {@linkcode CompleteRequest | completion/complete} request\n     */\n    const CompleteResultSchema = ResultSchema.extend({\n        completion: z.looseObject({\n            /**\n             * An array of completion values. Must not exceed 100 items.\n             */\n            values: z.array(z.string()).max(100),\n            /**\n             * The total number of completion options available. This can exceed the number of values actually sent in the response.\n             */\n            total: z.optional(z.number().int()),\n            /**\n             * Indicates whether there are additional completion options beyond those provided in the current response, even if the exact total is unknown.\n             */\n            hasMore: z.optional(z.boolean())\n        })\n    });\n\n    /* Roots */\n    /**\n     * Represents a root directory or file that the server can operate on.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to passing paths via\n     * tool parameters, resource URIs, or configuration.\n     */\n    const RootSchema = z.object({\n        /**\n         * The URI identifying the root. This *must* start with `file://` for now.\n         */\n        uri: z.string().startsWith('file://'),\n        /**\n         * An optional name for the root.\n         */\n        name: z.string().optional(),\n\n        /**\n         * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)\n         * for notes on `_meta` usage.\n         */\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    /**\n     * Sent from the server to request a list of root URIs from the client.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to passing paths via\n     * tool parameters, resource URIs, or configuration.\n     */\n    const ListRootsRequestSchema = RequestSchema.extend({\n        method: z.literal('roots/list'),\n        params: BaseRequestParamsSchema.optional()\n    });\n\n    /**\n     * The client's response to a `roots/list` request from the server.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to passing paths via\n     * tool parameters, resource URIs, or configuration.\n     */\n    const ListRootsResultSchema = ResultSchema.extend({\n        roots: z.array(RootSchema)\n    });\n\n    /**\n     * A notification from the client to the server, informing it that the list of roots has changed.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n     * in the specification for at least twelve months. Migrate to passing paths via\n     * tool parameters, resource URIs, or configuration.\n     */\n    const RootsListChangedNotificationSchema = NotificationSchema.extend({\n        method: z.literal('notifications/roots/list_changed'),\n        params: NotificationsParamsSchema.optional()\n    });\n\n    /* ───────────────────────────────────────────────────────────────────────────\n     * Tasks (2025-11-25 wire vocabulary; restored types-only by #2248 for interop\n     * with task-capable 2025 peers — parsed ONLY through this era's registry).\n     * ─────────────────────────────────────────────────────────────────────────── */\n\n    /**\n     * Task creation parameters, used to ask that the server create a task to represent a request.\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n     */\n    const TaskCreationParamsSchema = z.looseObject({\n        /**\n         * Requested duration in milliseconds to retain task from creation.\n         */\n        ttl: z.number().optional(),\n\n        /**\n         * Time in milliseconds to wait between task status requests.\n         */\n        pollInterval: z.number().optional()\n    });\n\n    /**\n     * The status of a task.\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n     */\n    const TaskStatusSchema = z.enum(['working', 'input_required', 'completed', 'failed', 'cancelled']);\n\n    /**\n     * A pollable state object associated with a request.\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n     */\n    const TaskSchema = z.object({\n        taskId: z.string(),\n        status: TaskStatusSchema,\n        /**\n         * Time in milliseconds to keep task results available after completion.\n         * If `null`, the task has unlimited lifetime until manually cleaned up.\n         */\n        ttl: z.union([z.number(), z.null()]),\n        /**\n         * ISO 8601 timestamp when the task was created.\n         */\n        createdAt: z.string(),\n        /**\n         * ISO 8601 timestamp when the task was last updated.\n         */\n        lastUpdatedAt: z.string(),\n        pollInterval: z.optional(z.number()),\n        /**\n         * Optional diagnostic message for failed tasks or other status information.\n         */\n        statusMessage: z.optional(z.string())\n    });\n\n    /**\n     * Result returned when a task is created, containing the task data wrapped in a `task` field.\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n     */\n    const CreateTaskResultSchema = ResultSchema.extend({\n        task: TaskSchema\n    });\n\n    /**\n     * Parameters for task status notification.\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n     */\n    const TaskStatusNotificationParamsSchema = NotificationsParamsSchema.merge(TaskSchema);\n\n    /**\n     * A notification sent when a task's status changes.\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n     */\n    const TaskStatusNotificationSchema = NotificationSchema.extend({\n        method: z.literal('notifications/tasks/status'),\n        params: TaskStatusNotificationParamsSchema\n    });\n\n    /**\n     * A request to get the state of a specific task.\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n     */\n    const GetTaskRequestSchema = RequestSchema.extend({\n        method: z.literal('tasks/get'),\n        params: BaseRequestParamsSchema.extend({\n            taskId: z.string()\n        })\n    });\n\n    /**\n     * The response to a {@linkcode GetTaskRequest | tasks/get} request.\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n     */\n    const GetTaskResultSchema = ResultSchema.merge(TaskSchema);\n\n    /**\n     * A request to get the result of a specific task.\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n     */\n    const GetTaskPayloadRequestSchema = RequestSchema.extend({\n        method: z.literal('tasks/result'),\n        params: BaseRequestParamsSchema.extend({\n            taskId: z.string()\n        })\n    });\n\n    /**\n     * The response to a `tasks/result` request.\n     * The structure matches the result type of the original request.\n     * For example, a {@linkcode CallToolRequest | tools/call} task would return the `CallToolResult` structure.\n     *\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n     */\n    const GetTaskPayloadResultSchema = ResultSchema.loose();\n\n    /**\n     * A request to list tasks.\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n     */\n    const ListTasksRequestSchema = PaginatedRequestSchema.extend({\n        method: z.literal('tasks/list')\n    });\n\n    /**\n     * The response to a {@linkcode ListTasksRequest | tasks/list} request.\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n     */\n    const ListTasksResultSchema = PaginatedResultSchema.extend({\n        tasks: z.array(TaskSchema)\n    });\n\n    /**\n     * A request to cancel a specific task.\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n     */\n    const CancelTaskRequestSchema = RequestSchema.extend({\n        method: z.literal('tasks/cancel'),\n        params: BaseRequestParamsSchema.extend({\n            taskId: z.string()\n        })\n    });\n\n    /**\n     * The response to a {@linkcode CancelTaskRequest | tasks/cancel} request.\n     *\n     * @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only.\n     */\n    const CancelTaskResultSchema = ResultSchema.merge(TaskSchema);\n\n    /* ───────────────────────────────────────────────────────────────────────────\n     * The 2025-era wire role unions: the era-faithful aggregates (what a\n     * 2025-11-25 peer may legally put on the wire, per role) and the source the\n     * era registry is built from. Member order preserves the pre-split unions\n     * (task members last for requests/results; notification members are\n     * method-discriminated, so ordering is not observable).\n     * ─────────────────────────────────────────────────────────────────────────── */\n\n    const ClientRequestSchema = z.union([\n        PingRequestSchema,\n        InitializeRequestSchema,\n        CompleteRequestSchema,\n        SetLevelRequestSchema,\n        GetPromptRequestSchema,\n        ListPromptsRequestSchema,\n        ListResourcesRequestSchema,\n        ListResourceTemplatesRequestSchema,\n        ReadResourceRequestSchema,\n        SubscribeRequestSchema,\n        UnsubscribeRequestSchema,\n        CallToolRequestSchema,\n        ListToolsRequestSchema,\n        GetTaskRequestSchema,\n        GetTaskPayloadRequestSchema,\n        ListTasksRequestSchema,\n        CancelTaskRequestSchema\n    ]);\n\n    const ClientNotificationSchema = z.union([\n        CancelledNotificationSchema,\n        ProgressNotificationSchema,\n        InitializedNotificationSchema,\n        RootsListChangedNotificationSchema,\n        TaskStatusNotificationSchema\n    ]);\n\n    const ClientResultSchema = z.union([\n        EmptyResultSchema,\n        CreateMessageResultSchema,\n        CreateMessageResultWithToolsSchema,\n        ElicitResultSchema,\n        ListRootsResultSchema,\n        GetTaskResultSchema,\n        ListTasksResultSchema,\n        CreateTaskResultSchema\n    ]);\n\n    const ServerRequestSchema = z.union([\n        PingRequestSchema,\n        CreateMessageRequestSchema,\n        ElicitRequestSchema,\n        ListRootsRequestSchema,\n        GetTaskRequestSchema,\n        GetTaskPayloadRequestSchema,\n        ListTasksRequestSchema,\n        CancelTaskRequestSchema\n    ]);\n\n    const ServerNotificationSchema = z.union([\n        CancelledNotificationSchema,\n        ProgressNotificationSchema,\n        LoggingMessageNotificationSchema,\n        ResourceUpdatedNotificationSchema,\n        ResourceListChangedNotificationSchema,\n        ToolListChangedNotificationSchema,\n        PromptListChangedNotificationSchema,\n        TaskStatusNotificationSchema,\n        ElicitationCompleteNotificationSchema\n    ]);\n\n    const ServerResultSchema = z.union([\n        EmptyResultSchema,\n        InitializeResultSchema,\n        CompleteResultSchema,\n        GetPromptResultSchema,\n        ListPromptsResultSchema,\n        ListResourcesResultSchema,\n        ListResourceTemplatesResultSchema,\n        ReadResourceResultSchema,\n        CallToolResultSchema,\n        ListToolsResultSchema,\n        GetTaskResultSchema,\n        ListTasksResultSchema,\n        CreateTaskResultSchema\n    ]);\n\n    /**\n     * Wire seam: owns both halves of the v1-parity ruling — the guard (a content-less body\n     * carrying another result family's keys fails loudly; the era is frozen so the key list is\n     * complete) and the tolerance (`content` defaults to `[]`). The era file stays twin-conformant.\n     * Definition verbatim from the pre-lazy registry.ts; it lives with the era schemas so the\n     * registry's lazy result map and the eager shim serve the SAME object through the memo.\n     */\n    const CallToolResultWireSchema = z\n        .unknown()\n        .superRefine((value, ctx) => {\n            // content === undefined covers both an absent key and an explicit\n            // undefined from server-side authoring objects.\n            if (\n                typeof value !== 'object' ||\n                value === null ||\n                Array.isArray(value) ||\n                (value as Record<string, unknown>).content !== undefined\n            )\n                return;\n            for (const key of TOOL_RESULT_FOREIGN_FAMILY_KEYS) {\n                if (key in value) {\n                    ctx.addIssue({\n                        code: 'custom',\n                        message: `content is required when the body carries '${key}' — another result family cannot default into an empty tools/call success`\n                    });\n                    return;\n                }\n            }\n        })\n        .transform(normalizeContentlessToolResult)\n        .pipe(CallToolResultSchema);\n\n    return {\n        JSONValueSchema,\n        JSONObjectSchema,\n        ProgressTokenSchema,\n        CursorSchema,\n        TaskMetadataSchema,\n        RelatedTaskMetadataSchema,\n        RequestMetaSchema,\n        BaseRequestParamsSchema,\n        TaskAugmentedRequestParamsSchema,\n        RequestSchema,\n        NotificationsParamsSchema,\n        NotificationSchema,\n        ResultSchema,\n        RequestIdSchema,\n        EmptyResultSchema,\n        CancelledNotificationParamsSchema,\n        CancelledNotificationSchema,\n        IconSchema,\n        IconsSchema,\n        BaseMetadataSchema,\n        ImplementationSchema,\n        ClientTasksCapabilitySchema,\n        ServerTasksCapabilitySchema,\n        ClientCapabilitiesSchema,\n        InitializeRequestParamsSchema,\n        InitializeRequestSchema,\n        ServerCapabilitiesSchema,\n        InitializeResultSchema,\n        InitializedNotificationSchema,\n        PingRequestSchema,\n        ProgressSchema,\n        ProgressNotificationParamsSchema,\n        ProgressNotificationSchema,\n        PaginatedRequestParamsSchema,\n        PaginatedRequestSchema,\n        PaginatedResultSchema,\n        ResourceContentsSchema,\n        TextResourceContentsSchema,\n        BlobResourceContentsSchema,\n        RoleSchema,\n        AnnotationsSchema,\n        ResourceSchema,\n        ResourceTemplateSchema,\n        ListResourcesRequestSchema,\n        ListResourcesResultSchema,\n        ListResourceTemplatesRequestSchema,\n        ListResourceTemplatesResultSchema,\n        ResourceRequestParamsSchema,\n        ReadResourceRequestParamsSchema,\n        ReadResourceRequestSchema,\n        ReadResourceResultSchema,\n        ResourceListChangedNotificationSchema,\n        SubscribeRequestParamsSchema,\n        SubscribeRequestSchema,\n        UnsubscribeRequestParamsSchema,\n        UnsubscribeRequestSchema,\n        ResourceUpdatedNotificationParamsSchema,\n        ResourceUpdatedNotificationSchema,\n        PromptArgumentSchema,\n        PromptSchema,\n        ListPromptsRequestSchema,\n        ListPromptsResultSchema,\n        GetPromptRequestParamsSchema,\n        GetPromptRequestSchema,\n        TextContentSchema,\n        ImageContentSchema,\n        AudioContentSchema,\n        ToolUseContentSchema,\n        EmbeddedResourceSchema,\n        ResourceLinkSchema,\n        ContentBlockSchema,\n        PromptMessageSchema,\n        GetPromptResultSchema,\n        PromptListChangedNotificationSchema,\n        ToolAnnotationsSchema,\n        ToolExecutionSchema,\n        ToolSchema,\n        ListToolsRequestSchema,\n        ListToolsResultSchema,\n        CallToolResultSchema,\n        CallToolRequestParamsSchema,\n        CallToolRequestSchema,\n        ToolListChangedNotificationSchema,\n        LoggingLevelSchema,\n        SetLevelRequestParamsSchema,\n        SetLevelRequestSchema,\n        LoggingMessageNotificationParamsSchema,\n        LoggingMessageNotificationSchema,\n        ModelHintSchema,\n        ModelPreferencesSchema,\n        ToolChoiceSchema,\n        ToolResultContentSchema,\n        SamplingContentSchema,\n        SamplingMessageContentBlockSchema,\n        SamplingMessageSchema,\n        CreateMessageRequestParamsSchema,\n        CreateMessageRequestSchema,\n        CreateMessageResultSchema,\n        CreateMessageResultWithToolsSchema,\n        BooleanSchemaSchema,\n        StringSchemaSchema,\n        NumberSchemaSchema,\n        UntitledSingleSelectEnumSchemaSchema,\n        TitledSingleSelectEnumSchemaSchema,\n        LegacyTitledEnumSchemaSchema,\n        SingleSelectEnumSchemaSchema,\n        UntitledMultiSelectEnumSchemaSchema,\n        TitledMultiSelectEnumSchemaSchema,\n        MultiSelectEnumSchemaSchema,\n        EnumSchemaSchema,\n        PrimitiveSchemaDefinitionSchema,\n        ElicitRequestFormParamsSchema,\n        ElicitRequestURLParamsSchema,\n        ElicitRequestParamsSchema,\n        ElicitRequestSchema,\n        ElicitationCompleteNotificationParamsSchema,\n        ElicitationCompleteNotificationSchema,\n        ElicitResultSchema,\n        ResourceTemplateReferenceSchema,\n        PromptReferenceSchema,\n        CompleteRequestParamsSchema,\n        CompleteRequestSchema,\n        CompleteResultSchema,\n        RootSchema,\n        ListRootsRequestSchema,\n        ListRootsResultSchema,\n        RootsListChangedNotificationSchema,\n        TaskCreationParamsSchema,\n        TaskStatusSchema,\n        TaskSchema,\n        CreateTaskResultSchema,\n        TaskStatusNotificationParamsSchema,\n        TaskStatusNotificationSchema,\n        GetTaskRequestSchema,\n        GetTaskResultSchema,\n        GetTaskPayloadRequestSchema,\n        GetTaskPayloadResultSchema,\n        ListTasksRequestSchema,\n        ListTasksResultSchema,\n        CancelTaskRequestSchema,\n        CancelTaskResultSchema,\n        ClientRequestSchema,\n        ClientNotificationSchema,\n        ClientResultSchema,\n        ServerRequestSchema,\n        ServerNotificationSchema,\n        ServerResultSchema,\n        CallToolResultWireSchema\n    };\n}\n\n/** The full set of frozen 2025-11-25 wire schemas, as one built object (the memo target). */\nexport type Rev2025WireSchemas = ReturnType<typeof build>;\n\nlet memo: Rev2025WireSchemas | undefined;\n\n/**\n * Builds the era wire-schema set on first call and returns the same object\n * thereafter. Module evaluation stays construction-free so importing the\n * era codec/registry costs nothing until the first validation actually\n * needs a schema; the registry, the codec, and the eager `schemas.ts`\n * shim all pull through this memo, so reference identity holds across\n * every consumer.\n */\nexport function buildSchemas2025(): Rev2025WireSchemas {\n    return (memo ??= build());\n}\n", "/**\n * SEP-2106 legacy `outputSchema` wrap helpers (2025-era projection only).\n *\n * The neutral / 2026-07-28 model lets a tool's `outputSchema` carry any JSON\n * Schema root. The 2025-11-25 wire shape requires `type:'object'` at the root,\n * so when an era-blind handler advertises a non-object root, the 2025 codec's\n * `encodeResult('tools/list', …)` projects it down to\n * `{type:'object', properties:{result:<natural>}, required:['result']}`, and\n * `projectCallToolResult` wraps the matching `structuredContent` as\n * `{result:<value>}`. The 2026 codec's projections are the identity.\n *\n * These helpers are wire-layer property — they exist so the projection can\n * live behind {@link WireCodec.encodeResult} / {@link WireCodec.projectCallToolResult}\n * and never be re-derived in shared/ or server-side code.\n */\n\nimport { declares2019Dialect } from '../../validators/dialects';\n\n/**\n * Whether a JSON Schema's root is non-object: either an explicit non-object\n * `type`, or a typeless root such as `{anyOf:[…]}`. Object-shaped typeless\n * roots that the schema-conversion layer can prove are objects are stamped\n * `type:'object'` upstream, so they reach this predicate as object roots.\n */\nexport function isNonObjectJsonSchemaRoot(json: Readonly<Record<string, unknown>>): boolean {\n    return json['type'] !== 'object';\n}\n\n/**\n * Keyword-position keys whose values are instance data (not subschemas). A\n * `{$ref:…}` appearing inside one is a literal value, not a JSON Pointer to\n * rewrite. Only consulted when the current object is in keyword position —\n * a PROPERTY named `default`/`const` (under `properties`/`$defs`/…) is a name\n * position whose value IS a subschema and is recursed into.\n */\nconst REF_REWRITE_DATA_POSITION_KEYS: ReadonlySet<string> = new Set(['const', 'enum', 'default', 'examples']);\n\n/**\n * Keyword-position keys whose value is a name→subschema map. Entries inside\n * such a map are in NAME position: their keys are author-chosen property\n * names (which may collide with JSON Schema keywords), their values are\n * subschemas to recurse into.\n */\nconst REF_REWRITE_NAME_MAP_KEYS: ReadonlySet<string> = new Set([\n    'properties',\n    'patternProperties',\n    '$defs',\n    'definitions',\n    'dependentSchemas',\n    // draft-07's dependentSchemas predecessor; its array-of-strings form is\n    // unaffected (string arrays contain no refs).\n    'dependencies'\n]);\n\n/**\n * Whether a subtree's `$id` establishes a new resolution base. A fragment-only\n * `$id` (`\"#item\"`, the draft-07/06 spelling of 2020-12's `$anchor`) does not\n * change the RFC 3986 base URI — same-document pointers inside still resolve\n * against the document root and must be rewritten.\n */\nfunction establishesNewBase(id: unknown): boolean {\n    return id !== undefined && !(typeof id === 'string' && id.startsWith('#'));\n}\n\n/*\n * Reference/base-affecting keyword coverage across the four supported dialects\n * (2020-12, 2019-09, draft-07, draft-06). Every entry is rewritten, position-guarded,\n * or N/A with the reason; legacyWrap.test.ts pins each handled row:\n * - `$ref` (all dialects): JSON-Pointer forms `#`/`#/…` rewritten; other values untouched.\n * - `$dynamicRef` (2020-12): pointer forms rewritten like `$ref`; plain-name form (`#name`)\n *   untouched — see `$anchor`.\n * - `$dynamicAnchor` (2020-12): N/A — location-independent plain name; the envelope adds no\n *   anchors and the natural schema moves whole, so dynamic resolution is unchanged.\n * - `$anchor` (2019-09/2020-12): N/A — same as `$dynamicAnchor`; `#name` refs are fragments,\n *   not pointers, and are never rewritten.\n * - `$recursiveRef` (2019-09): handled only in documents whose DECLARED dialect is 2019-09.\n *   Elsewhere it is off-spec input copied verbatim — KNOWN LIMITATION: the engines already\n *   disagree on it there (only classic Ajv ignores it; Ajv2020 and @cfworker enforce it in\n *   every draft mode), so no consistent wrap behavior exists — the verbatim `#` mis-resolves\n *   to the envelope on the enforcing legs, while converting would manufacture a constraint\n *   on the classic-Ajv leg. Inherent to envelope relocation plus engine disagreement; the\n *   escape is the 2026 era or authoring the schema with a proper 2019-09 stamp. Within\n *   2019-09: value restricted to `#`, and per core §8.2.4.2.1 a root-base ref is dynamic\n *   only when the DOCUMENT ROOT carries `$recursiveAnchor: true` (a non-root anchor can\n *   never be the initial target and is inert). Root-anchor-less documents: converted to the\n *   statically equivalent `$ref: '#/properties/result'`; when `$ref` co-occurs (legal,\n *   conjunctive in 2019-09) the conversion joins as an `allOf` entry instead. Documents\n *   whose root carries `$recursiveAnchor: true`: left verbatim — KNOWN LIMITATION:\n *   relocation cannot preserve dynamic re-resolution (a static rewrite would freeze it and\n *   the envelope root carries no anchor), so root-anchored recursion still mis-resolves on\n *   the 2025 projection.\n * - `$recursiveAnchor` (2019-09): boolean, not a location — only the ROOT occurrence gates the\n *   conversion above; nested occurrences are copied verbatim and stay inert.\n * - `$id`, URI form (all dialects): establishes a new base — subtree skipped (root and nested).\n * - `$id`, fragment form (draft-07/06 anchor spelling; illegal in 2019-09/2020-12): does not\n *   change the base — descended into.\n * - `$schema`: hoisted to the wrapper root so dialect dispatch and the graceful\n *   unsupported-dialect rejection see it.\n * - `$vocabulary` (2019-09/2020-12): N/A — meta-schema-only keyword, inert in tool schemas.\n * - Name→subschema maps (`properties`, `patternProperties`, `$defs`, `definitions`,\n *   `dependentSchemas`, draft-07/06 `dependencies`): entries are name positions; their keys\n *   are never treated as keywords.\n * - Data-position keywords (`const`/`enum`/`default`/`examples`): values are instance data,\n *   never descended into.\n */\n/**\n * Wrap a non-object output schema in the 2025-era envelope:\n * `{type:'object', properties:{result:<natural>}, required:['result']}`.\n *\n * Same-document `$ref` / `$dynamicRef` JSON Pointers inside the natural schema\n * (e.g. `#/properties/foo` produced by zod for de-duplicated/recursive types)\n * are rewritten to account for the new `#/properties/result` root: bare `#` →\n * `#/properties/result`, `#/…` → `#/properties/result/…`. Cross-document refs\n * (anything not starting with `#`) are left untouched.\n *\n * The rewrite is position-aware: data-valued keywords\n * (`const`/`enum`/`default`/`examples`) in keyword position are NOT descended\n * into; the same names appearing as property names under\n * `properties`/`patternProperties`/`$defs`/`definitions`/`dependentSchemas`/\n * `dependencies` ARE descended into (they're subschemas). The rewrite is also\n * `$id`-scoped: if the natural root carries a base-establishing `$id` no\n * pointer is rewritten (same-document refs inside resolve against the embedded\n * `$id` base, not the wrapper root), and any subtree that establishes its own\n * `$id` is left untouched for the same reason. Fragment-only `$id` (`\"#item\"`,\n * draft-07's anchor spelling) does not establish a base and IS descended into.\n */\nexport function wrapOutputSchemaForLegacy(natural: Readonly<Record<string, unknown>>): Record<string, unknown> {\n    // A root `$schema` is hoisted to the wrapper root: it's a document-level\n    // dialect declaration and the built-in providers' dialect dispatch only\n    // inspects the root, so leaving it under `properties.result` would make\n    // the wrapper compile under the default 2020-12 engine (an opaque Ajv2020\n    // compile error on draft-07 tuple-form `items` instead of the classic\n    // engine's tuple semantics) while the same tool dispatches to the declared\n    // dialect on the 2026 era — and hide an unsupported dialect from the\n    // graceful rejection.\n    const $schema = typeof natural['$schema'] === 'string' ? natural['$schema'] : undefined;\n    // A base-establishing `$id` at the natural root: every same-document `#/…`\n    // ref inside resolves against that base URI, not against the wrapper root —\n    // skip the rewrite. Fragment-only `$id` keeps the document-root base.\n    if (establishesNewBase(natural['$id'])) {\n        return { ...($schema !== undefined && { $schema }), type: 'object', properties: { result: natural }, required: ['result'] };\n    }\n    // `$recursiveRef` is a 2019-09-only keyword: the conversion applies solely to documents\n    // whose DECLARED dialect is 2019-09 (one document-level check). Elsewhere it is copied\n    // verbatim — converting would manufacture a constraint on the classic-Ajv leg, which\n    // ignores the member; the legs that enforce it are a KNOWN LIMITATION (coverage block).\n    // Within 2019-09, a root-base `$recursiveRef: '#'` is dynamic only when the DOCUMENT\n    // ROOT carries `$recursiveAnchor: true` (core §8.2.4.2.1); otherwise it is statically\n    // `$ref: '#'`-equivalent and is converted. See the coverage block above.\n    const convertRecursiveRefs = declares2019Dialect(natural['$schema']) && natural['$recursiveAnchor'] !== true;\n    const rewriteRefs = (node: unknown, parentIsNameMap: boolean): unknown => {\n        if (Array.isArray(node)) return node.map(item => rewriteRefs(item, false));\n        if (node === null || typeof node !== 'object') return node;\n        // A nested base-establishing `$id` owns resolution for the subtree —\n        // same-document refs inside are no longer relative to the wrapper root.\n        // Only applies in keyword position (a property NAMED `$id` is just a name).\n        if (!parentIsNameMap && establishesNewBase((node as Record<string, unknown>)['$id'])) return node;\n        const out: Record<string, unknown> = {};\n        let convertedRecursion = false;\n        for (const [k, v] of Object.entries(node)) {\n            if (parentIsNameMap) {\n                // Name position: `k` is an author-chosen property/def name, `v` is a\n                // subschema in keyword position. Never treat `k` as a keyword here.\n                out[k] = rewriteRefs(v, false);\n            } else if ((k === '$ref' || k === '$dynamicRef') && typeof v === 'string') {\n                out[k] = v === '#' ? '#/properties/result' : v.startsWith('#/') ? `#/properties/result${v.slice(1)}` : v;\n            } else if (k === '$recursiveRef' && v === '#' && convertRecursiveRefs) {\n                // Emitted after the loop: plain `$ref` when free, `allOf` join when `$ref`\n                // co-occurs ($ref and $recursiveRef are conjunctive in-place applicators).\n                convertedRecursion = true;\n            } else if (REF_REWRITE_DATA_POSITION_KEYS.has(k)) {\n                out[k] = v;\n            } else if (REF_REWRITE_NAME_MAP_KEYS.has(k)) {\n                out[k] = rewriteRefs(v, true);\n            } else {\n                out[k] = rewriteRefs(v, false);\n            }\n        }\n        if (convertedRecursion) {\n            if ('$ref' in out) {\n                out['allOf'] = [...(Array.isArray(out['allOf']) ? out['allOf'] : []), { $ref: '#/properties/result' }];\n            } else {\n                out['$ref'] = '#/properties/result';\n            }\n        }\n        return out;\n    };\n    return {\n        ...($schema !== undefined && { $schema }),\n        type: 'object',\n        properties: { result: rewriteRefs(natural, false) },\n        required: ['result']\n    };\n}\n", "/**\n * The 2025-era method registries — re-homed verbatim from\n * `types/schemas.ts` (Q1 increment-2 step 1: mechanical relocation behind the\n * codec interface; the registry CONTENT is byte-identical to the pre-split\n * maps and is pinned by reference in `test/types/registryPins.test.ts`).\n *\n * This era serves all five legacy protocol versions (2024-10-07 …\n * 2025-11-25), exactly as the single schema set did before the split. It is\n * BEHAVIOR-FROZEN behind the Q10-L2 byte-identity suite: the request and\n * notification maps carry the full deliberate 2025-11-25 wire vocabulary,\n * including the task family (the #2248 wire-interop restore). The RESULT map\n * is the runtime/typed ALIGNED map (PR #2293 review): keyed by this era's\n * subset of the typed `RequestMethod` set so it cannot drift from the typed\n * `ResultTypeMap` — no\n * task-result union members and no `tasks/*` entries; a task-capable 2025\n * peer's `CreateTaskResult` answer fails the plain per-method schema as a\n * typed invalid-result error, and callers needing task interop pass an\n * explicit result schema (see `test/shared/typedMapAlignment.test.ts`).\n *\n * 2026-only vocabulary (`server/discover`, `subscriptions/listen`, the MRTR\n * shells, `resultType`, the `_meta` envelope) has NO entry and NO code path\n * here — the inverse-leak guarantee is physical absence, not discipline.\n *\n * LAZY SCHEMA CONSTRUCTION: method membership and the exported method lists\n * are static (null-valued key objects below — the mapped-type keying keeps\n * the both-direction drift guard), while the schema VALUES are pulled through\n * the era's memoized `buildSchemas2025()` factory on first lookup. Importing\n * this module therefore constructs no zod schemas; the first validation does,\n * once, and every consumer (registry, codec, the eager `schemas.ts` shim)\n * sees the same objects, so the by-reference pins keep holding.\n */\nimport type * as z from 'zod/v4';\n\nimport type { NotificationMethod, NotificationTypeMap, RequestMethod, RequestTypeMap, ResultTypeMap } from '../../types/types';\nimport type { Rev2025WireSchemas } from './buildSchemas';\nimport { buildSchemas2025 } from './buildSchemas';\n\n/* The era's wire vocabulary, derived from the wire role unions in\n * `./buildSchemas.ts` (the same unions the registries used to be built from\n * at runtime). Keying the maps by these derived unions makes drift a compile\n * error in BOTH directions: a union member without a map entry, a map entry\n * the unions do not know, and an entry pointing at a different method's\n * schema all fail to typecheck. */\ntype WireRequest = z.output<Rev2025WireSchemas['ClientRequestSchema']> | z.output<Rev2025WireSchemas['ServerRequestSchema']>;\ntype WireNotification = z.output<Rev2025WireSchemas['ClientNotificationSchema']> | z.output<Rev2025WireSchemas['ServerNotificationSchema']>;\n\n/** Every request method in the 2025-era wire vocabulary (the typed `RequestMethod` surface plus the task family). */\nexport type Rev2025RequestMethod = WireRequest['method'];\n/** Every notification method in the 2025-era wire vocabulary. */\nexport type Rev2025NotificationMethod = WireNotification['method'];\n\n/**\n * The typed-method surface this era serves: the typed `RequestMethod` set\n * minus methods whose wire vocabulary does not exist on this era (e.g.\n * `server/discover`, which the typed maps carry but only the 2026-era\n * registry serves). Deriving the subset from the era's own wire role unions\n * keeps the both-direction drift guard: a typed 2025-era method without a map\n * entry, or a map entry the era's wire vocabulary does not know, is a compile\n * error.\n */\ntype Rev2025TypedRequestMethod = Extract<RequestMethod, Rev2025RequestMethod>;\n\n/* Static method membership — the schema-free half of the registry.\n *\n * These null-valued objects carry ONLY the method keys, in the same order the\n * eager schema maps used to declare them (so the exported method lists stay\n * byte-identical to the pre-lazy builder). The mapped-type keying preserves\n * the both-direction drift guard: a union member without a key, or a key the\n * union does not know, is a compile error. Membership checks and the exported\n * lists read these objects and never touch the schema memo. */\nconst requestMethodKeys: { readonly [M in Rev2025RequestMethod]: null } = {\n    ping: null,\n    initialize: null,\n    'completion/complete': null,\n    'logging/setLevel': null,\n    'prompts/get': null,\n    'prompts/list': null,\n    'resources/list': null,\n    'resources/templates/list': null,\n    'resources/read': null,\n    'resources/subscribe': null,\n    'resources/unsubscribe': null,\n    'tools/call': null,\n    'tools/list': null,\n    'tasks/get': null,\n    'tasks/result': null,\n    'tasks/list': null,\n    'tasks/cancel': null,\n    'sampling/createMessage': null,\n    'elicitation/create': null,\n    'roots/list': null\n};\n\nconst notificationMethodKeys: { readonly [M in Rev2025NotificationMethod]: null } = {\n    'notifications/cancelled': null,\n    'notifications/progress': null,\n    'notifications/initialized': null,\n    'notifications/roots/list_changed': null,\n    'notifications/tasks/status': null,\n    'notifications/message': null,\n    'notifications/resources/updated': null,\n    'notifications/resources/list_changed': null,\n    'notifications/tools/list_changed': null,\n    'notifications/prompts/list_changed': null,\n    'notifications/elicitation/complete': null\n};\n\nconst resultMethodKeys: { readonly [M in Rev2025TypedRequestMethod]: null } = {\n    ping: null,\n    initialize: null,\n    'completion/complete': null,\n    'logging/setLevel': null,\n    'prompts/get': null,\n    'prompts/list': null,\n    'resources/list': null,\n    'resources/templates/list': null,\n    'resources/read': null,\n    'resources/subscribe': null,\n    'resources/unsubscribe': null,\n    'tools/call': null,\n    'tools/list': null,\n    'sampling/createMessage': null,\n    'elicitation/create': null,\n    'roots/list': null\n};\n\n/* Lazy schema maps — built once, on the first schema lookup, from the era's\n * memoized schema factory. The entries are the SAME schema objects the wire\n * role unions are built from (reference identity is pinned by\n * `test/types/registryPins.test.ts`), and the key order preserves the\n * pre-split union iteration order. The mapped types below are unchanged from\n * the eager maps, so the drift guards still apply entry by entry. */\ninterface RegistryMaps {\n    /* Runtime schema lookup — request and notification schemas by method. */\n    readonly requestSchemas: { readonly [M in Rev2025RequestMethod]: z.ZodType<Extract<WireRequest, { method: M }>> };\n    readonly notificationSchemas: { readonly [M in Rev2025NotificationMethod]: z.ZodType<Extract<WireNotification, { method: M }>> };\n    /* Runtime schema lookup — result schemas by method.\n     *\n     * Keyed by the era's typed-method subset and valued by\n     * `z.ZodType<ResultTypeMap[M]>` so the runtime map and the typed\n     * `ResultTypeMap` cannot drift: a missing entry, an extra key, or an entry\n     * that does not parse to the typed map's result type is a compile error. No\n     * entry may be looser than the typed map (no task-result union members) and\n     * no key may fall outside it (no `tasks/*` entries — the task methods are\n     * 2025-11-25 wire vocabulary with no SDK runtime; callers needing task\n     * interop pass an explicit schema). The `tools/call` entry is the wire-seam\n     * wrapper `CallToolResultWireSchema` (content-default guard + tolerance),\n     * which lives with the era schemas in `./buildSchemas.ts`. */\n    readonly resultSchemas: { readonly [M in Rev2025TypedRequestMethod]: z.ZodType<ResultTypeMap[M]> };\n}\n\nlet maps: RegistryMaps | undefined;\n\nfunction registryMaps(): RegistryMaps {\n    if (maps) return maps;\n    const s = buildSchemas2025();\n    maps = {\n        requestSchemas: {\n            ping: s.PingRequestSchema,\n            initialize: s.InitializeRequestSchema,\n            'completion/complete': s.CompleteRequestSchema,\n            'logging/setLevel': s.SetLevelRequestSchema,\n            'prompts/get': s.GetPromptRequestSchema,\n            'prompts/list': s.ListPromptsRequestSchema,\n            'resources/list': s.ListResourcesRequestSchema,\n            'resources/templates/list': s.ListResourceTemplatesRequestSchema,\n            'resources/read': s.ReadResourceRequestSchema,\n            'resources/subscribe': s.SubscribeRequestSchema,\n            'resources/unsubscribe': s.UnsubscribeRequestSchema,\n            'tools/call': s.CallToolRequestSchema,\n            'tools/list': s.ListToolsRequestSchema,\n            'tasks/get': s.GetTaskRequestSchema,\n            'tasks/result': s.GetTaskPayloadRequestSchema,\n            'tasks/list': s.ListTasksRequestSchema,\n            'tasks/cancel': s.CancelTaskRequestSchema,\n            'sampling/createMessage': s.CreateMessageRequestSchema,\n            'elicitation/create': s.ElicitRequestSchema,\n            'roots/list': s.ListRootsRequestSchema\n        },\n        notificationSchemas: {\n            'notifications/cancelled': s.CancelledNotificationSchema,\n            'notifications/progress': s.ProgressNotificationSchema,\n            'notifications/initialized': s.InitializedNotificationSchema,\n            'notifications/roots/list_changed': s.RootsListChangedNotificationSchema,\n            'notifications/tasks/status': s.TaskStatusNotificationSchema,\n            'notifications/message': s.LoggingMessageNotificationSchema,\n            'notifications/resources/updated': s.ResourceUpdatedNotificationSchema,\n            'notifications/resources/list_changed': s.ResourceListChangedNotificationSchema,\n            'notifications/tools/list_changed': s.ToolListChangedNotificationSchema,\n            'notifications/prompts/list_changed': s.PromptListChangedNotificationSchema,\n            'notifications/elicitation/complete': s.ElicitationCompleteNotificationSchema\n        },\n        resultSchemas: {\n            ping: s.EmptyResultSchema,\n            initialize: s.InitializeResultSchema,\n            'completion/complete': s.CompleteResultSchema,\n            'logging/setLevel': s.EmptyResultSchema,\n            'prompts/get': s.GetPromptResultSchema,\n            'prompts/list': s.ListPromptsResultSchema,\n            'resources/list': s.ListResourcesResultSchema,\n            'resources/templates/list': s.ListResourceTemplatesResultSchema,\n            'resources/read': s.ReadResourceResultSchema,\n            'resources/subscribe': s.EmptyResultSchema,\n            'resources/unsubscribe': s.EmptyResultSchema,\n            'tools/call': s.CallToolResultWireSchema,\n            'tools/list': s.ListToolsResultSchema,\n            'sampling/createMessage': s.CreateMessageResultWithToolsSchema,\n            'elicitation/create': s.ElicitResultSchema,\n            'roots/list': s.ListRootsResultSchema\n        }\n    };\n    return maps;\n}\n\n/**\n * Forces the lazy registry maps (and, through them, the era's schema memo).\n * Warm-up hook for `preloadSchemas()` — no-op once the maps exist.\n */\nexport function warmRegistryMaps2025(): void {\n    registryMaps();\n}\n\n/** The 2025-era request-method set (registry membership = the deletion story). */\nexport function hasRequestMethod2025(method: string): method is Rev2025RequestMethod {\n    return Object.prototype.hasOwnProperty.call(requestMethodKeys, method);\n}\n\n/** The 2025-era notification-method set. */\nexport function hasNotificationMethod2025(method: string): method is Rev2025NotificationMethod {\n    return Object.prototype.hasOwnProperty.call(notificationMethodKeys, method);\n}\n\n/** Result-map membership: exactly the era's typed-method subset (no task entries, no 2026-only methods). */\nfunction hasResultMethod(method: string): method is Rev2025TypedRequestMethod {\n    return Object.prototype.hasOwnProperty.call(resultMethodKeys, method);\n}\n\n/**\n * Gets the Zod schema for validating results of a given request method.\n * Returns `undefined` for non-spec methods and 2026-only methods.\n * The typed overload is backed by the map's own typing (`z.ZodType<ResultTypeMap[M]>`\n * per entry), so callers with a statically known 2025-era method can use the\n * parsed value without a type assertion.\n */\nexport function getResultSchema<M extends Rev2025TypedRequestMethod>(method: M): z.ZodType<ResultTypeMap[M]>;\nexport function getResultSchema(method: string): z.ZodType | undefined;\nexport function getResultSchema(method: string): z.ZodType | undefined {\n    return hasResultMethod(method) ? registryMaps().resultSchemas[method] : undefined;\n}\n\n/**\n * Gets the Zod schema for a given request method.\n * Returns `undefined` for non-spec methods and 2026-only methods.\n * The typed overload returns a ZodType that parses to `RequestTypeMap[M]`,\n * allowing callers to use `schema.parse()` without additional type assertions.\n */\nexport function getRequestSchema<M extends Rev2025TypedRequestMethod>(method: M): z.ZodType<RequestTypeMap[M]>;\nexport function getRequestSchema(method: string): z.ZodType | undefined;\nexport function getRequestSchema(method: string): z.ZodType | undefined {\n    return hasRequestMethod2025(method) ? registryMaps().requestSchemas[method] : undefined;\n}\n\n/**\n * Gets the Zod schema for a given notification method.\n * Returns `undefined` for non-spec methods.\n * @see getRequestSchema for the typed-overload contract.\n */\nexport function getNotificationSchema<M extends NotificationMethod>(method: M): z.ZodType<NotificationTypeMap[M]>;\nexport function getNotificationSchema(method: string): z.ZodType | undefined;\nexport function getNotificationSchema(method: string): z.ZodType | undefined {\n    return hasNotificationMethod2025(method) ? registryMaps().notificationSchemas[method] : undefined;\n}\n\n/** Registry method lists (for the spec-method universe and the CI registry-diff oracle). */\nexport const rev2025RequestMethods: readonly string[] = Object.keys(requestMethodKeys);\nexport const rev2025NotificationMethods: readonly string[] = Object.keys(notificationMethodKeys);\n", "/**\n * The 2025-era wire codec: decode/encode ≈ identity.\n *\n * This codec serves every legacy protocol version (2024-10-07 … 2025-11-25).\n * It is BEHAVIOR-FROZEN behind the Q10-L2 byte-identity suite — its schemas\n * are today's schemas, its registry is today's method map, and its encode\n * path is the identity.\n *\n * Never-stamp guarantee: this module NEVER WRITES 2026 vocabulary\n * (`resultType`, `ttlMs`, `cacheScope`, the `_meta` envelope keys) — there is\n * no code path that can. `encodeResult` is the identity for every result\n * EXCEPT the SEP-2106 `tools/list` projection: when a tool's neutral\n * `outputSchema` has a non-object root, the 2025 wire shape requires\n * `type:'object'` there, so the codec PROJECTS the public superset down by\n * wrapping the advertised schema as `{type:'object',\n * properties:{result:<natural>}, required:['result']}`. That projection\n * narrows neutral→2025-wire; it never adds 2026 vocabulary.\n *\n * One deliberate exception to \"no 2026 code path\" (Q1-SD3 ii, amending the\n * V-2 'no code path at all' design claim): `decodeResult` STRIPS a foreign\n * `resultType` key from inbound results before validation (strip-on-lift).\n * `resultType` is not 2025 vocabulary — a 2025 peer that sends it is\n * misbehaving — and the ruled posture is tolerate-and-drop so the foreign key\n * can neither surface to consumers (the neutral types have no slot for it)\n * nor leak through the retained loose-object passthrough. This is the ONLY\n * 2026-vocabulary code path in the 2025 codec, it exists on the decode side\n * only, and it deletes — never reads, maps, or emits — the foreign value.\n */\nimport type * as z from 'zod/v4';\n\nimport type { CallToolResult, Result } from '../../types/types';\nimport type { DecodedResult, EnvelopeIssue, LiftedWireMaterial, OutboundEnvelopeMaterial, ValidateOutcome, WireCodec } from '../codec';\nimport { appendTextFallbackForNonObject } from '../textFallback';\nimport { buildSchemas2025 } from './buildSchemas';\nimport { isNonObjectJsonSchemaRoot, wrapOutputSchemaForLegacy } from './legacyWrap';\nimport { getNotificationSchema, getRequestSchema, getResultSchema, hasNotificationMethod2025, hasRequestMethod2025 } from './registry';\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n    return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\n/** Tri-state wrap of an optional Zod schema lookup (the function-only contract). */\nfunction triState<T>(schema: z.ZodType<T> | undefined, raw: unknown): ValidateOutcome<T> {\n    if (schema === undefined) return { ok: false, reason: 'not-in-era' };\n    const parsed = schema.safeParse(raw);\n    return parsed.success ? { ok: true, value: parsed.data } : { ok: false, reason: 'invalid', message: String(parsed.error) };\n}\n\nconst NOT_IN_ERA: ValidateOutcome<never> = { ok: false, reason: 'not-in-era' };\n\n/** Whether a `tools/list` entry advertises a non-object `outputSchema` root that needs the SEP-2106 legacy wrap. */\nfunction toolNeedsLegacyWrap(t: unknown): t is { outputSchema: Record<string, unknown> } {\n    return isPlainObject(t) && isPlainObject(t['outputSchema']) && isNonObjectJsonSchemaRoot(t['outputSchema']);\n}\n\n/** The wire→neutral trust boundary: a decoded 2025-era wire result is adopted as the neutral `Result` here (the module's single deliberate assertion). */\nfunction toNeutralResult(value: unknown): Result {\n    return value as Result;\n}\n\nexport const rev2025Codec: WireCodec = {\n    era: '2025-11-25',\n\n    hasRequestMethod: hasRequestMethod2025,\n    hasNotificationMethod: hasNotificationMethod2025,\n\n    // ── Function-only validation surface ──\n    validateRequest: (method: string, raw: unknown) => triState(getRequestSchema(method), raw),\n    validateResult: (method: string, raw: unknown) => triState(getResultSchema(method), raw),\n    validateNotification: (method: string, raw: unknown) => triState(getNotificationSchema(method), raw),\n    // No in-band input-request vocabulary on this era: elicitation, sampling\n    // and roots are real wire request methods here (see the registry).\n    hasInputRequestMethod: (): boolean => false,\n    validateInputRequest: (): ValidateOutcome<never> => NOT_IN_ERA,\n    validateInputResponse: (): ValidateOutcome<never> => NOT_IN_ERA,\n\n    // Arrow literals can't carry overload signatures; the cast is sound (the\n    // boolean dispatches to exactly the schema each overload names). The\n    // schemas are pulled through the era's memo so the codec module itself\n    // stays construction-free at import time.\n    samplingResultVariant: ((hasTools: boolean, raw: unknown) => {\n        const s = buildSchemas2025();\n        return triState(hasTools ? s.CreateMessageResultWithToolsSchema : s.CreateMessageResultSchema, raw);\n    }) as WireCodec['samplingResultVariant'],\n\n    // The 2025 era carries no per-request `_meta` envelope — legacy wire\n    // bytes stay identical (the never-stamp guarantee, outbound-request half).\n    outboundEnvelope: (_material: OutboundEnvelopeMaterial): undefined => undefined,\n    validateEnvelopeMeta: (_meta: Readonly<Record<string, unknown>>): EnvelopeIssue[] => [],\n\n    projectCallToolResult(result: CallToolResult, advertisedOutputSchema): CallToolResult {\n        // Era-agnostic SEP-2106 §4.3 TextContent auto-append first (value-shape-based).\n        const withText = appendTextFallbackForNonObject(result);\n        const sc = withText.structuredContent;\n        if (sc === undefined) return withText;\n        // SEP-2106 result-side projection. Wrap as `{result:<sc>}` when EITHER:\n        //  - the value is non-object (array/primitive/`null`) — REGARDLESS of\n        //    advertised schema, because the 2025 wire shape requires\n        //    `structuredContent` to be an object (a schema-less tool returning\n        //    `[1,2,3]` would otherwise ship wire-illegal bytes), or\n        //  - the advertised `outputSchema` has a non-object root — so the\n        //    result satisfies the wrapped schema this codec's\n        //    `encodeResult('tools/list', …)` advertised for the same tool.\n        const valueIsNonObject = typeof sc !== 'object' || sc === null || Array.isArray(sc);\n        const schemaWrapped = advertisedOutputSchema !== undefined && isNonObjectJsonSchemaRoot(advertisedOutputSchema);\n        if (!valueIsNonObject && !schemaWrapped) return withText;\n        return { ...withText, structuredContent: { result: sc } };\n    },\n\n    decodeResult(_method: string, raw: unknown): DecodedResult {\n        // Strip-on-lift (Q1-SD3 ii): a foreign `resultType` on the 2025 leg is\n        // dropped before validation, whatever its value. Validation judges the\n        // husk — the registry wire-seam schema on the plain path, the caller's\n        // schema on the explicit path (task interop).\n        if (isPlainObject(raw) && 'resultType' in raw) {\n            const stripped = { ...raw };\n            delete stripped['resultType'];\n            return { kind: 'complete', result: toNeutralResult(stripped) };\n        }\n        return { kind: 'complete', result: toNeutralResult(raw) };\n    },\n\n    // The never-stamp guarantee: never writes 2026 vocabulary. Identity for\n    // every result EXCEPT the SEP-2106 `tools/list` projection (see header).\n    // Copy-on-write: a listing with no non-object outputSchema roots returns\n    // the same reference (the byte-identity suite pins this).\n    encodeResult(method: string, result: Result): Result {\n        if (method !== 'tools/list') return result;\n        const tools = (result as { tools?: unknown }).tools;\n        if (!Array.isArray(tools) || !tools.some(t => toolNeedsLegacyWrap(t))) return result;\n        return {\n            ...result,\n            tools: tools.map(t => (toolNeedsLegacyWrap(t) ? { ...t, outputSchema: wrapOutputSchemaForLegacy(t.outputSchema) } : t))\n        } as Result;\n    },\n\n    // The −32002 resource-not-found domain code maps to −32602 on the wire on\n    // this era too (matching what the deployed v1.x SDK already emits — this\n    // is not a behavior change for v1.x peers). There is deliberately no era\n    // branch that preserves −32002.\n    encodeErrorCode: (code: number): number => (code === -32_002 ? -32_602 : code),\n\n    // The 2025 era never requires a per-request envelope.\n    checkInboundEnvelope: (_material: LiftedWireMaterial): string | undefined => undefined\n};\n", "/**\n * 2026-era wire schemas (protocol revision 2026-07-28).\n *\n * Fully self-contained — no runtime imports from types/schemas.ts. The\n * neutral types/schemas.ts layer is the public-API superset and is free to\n * evolve; this file is the 2026 wire-parse contract and is BEHAVIOR-FROZEN\n * against the 2026-07-28 anchor. Every era-shared building block (content\n * blocks, resources, prompts, capabilities, notifications, …) that the wire\n * shapes compose is a frozen LOCAL copy — verbatim from the neutral layer at\n * the point this revision was sealed, dependencies first. The only cross-layer\n * dependency is `import type { JSONObject, JSONValue }` from the neutral types\n * barrel — pure structural type aliases with no parse behavior.\n *\n * This module is the only place the per-request `_meta` envelope is modeled.\n * The envelope is wire-only vocabulary: the protocol layer lifts it off\n * inbound requests before any handler runs and surfaces it at\n * `ctx.mcpReq.envelope`; the 2026-era codec enforces its requiredness at\n * dispatch time (`checkInboundEnvelope`) - the former neutral-schema JSDoc\n * deferral (\"enforced per request at dispatch time, not here\") is now\n * discharged by that codec step.\n *\n * No 2025-era traffic ever touches this module, so requiredness here is\n * bare and spec-exact (the shared-schema `.catch` hazards do not apply).\n *\n * SPEC-CURRENCY RE-SEAL (2026-07-17): the 2026-07-28 revision was re-sealed\n * upstream by spec PR #3002 (commit 71e30695, merged 2026-07-15 — after the\n * previous anchor pin f68d864a): the envelope's `clientInfo` demoted from\n * required to SHOULD, and `DiscoverResult.serverInfo` moved from the result\n * body to the new `ResultMetaObject` key\n * `_meta['io.modelcontextprotocol/serverInfo']` (optional on every result).\n * The shapes below are the re-sealed anchor, exactly — no pre-#3002 shape is\n * modeled anywhere (per ruling: the final revision is the only 2026-07-28).\n */\nimport * as z from 'zod/v4';\n\nimport {\n    CLIENT_CAPABILITIES_META_KEY,\n    CLIENT_INFO_META_KEY,\n    LOG_LEVEL_META_KEY,\n    PROTOCOL_VERSION_META_KEY,\n    SERVER_INFO_META_KEY\n} from '../../types/constants';\nimport type { JSONObject, JSONValue } from '../../types/types';\n\n/**\n * The 2026-era request-method set — the hand-registry seed (see registry.ts\n * for the seed decisions). The dispatch maps below are mapped types over this\n * union, so a missing entry, an extra entry, or an entry pointing at another\n * method's schema is a compile error; the CI registry-diff oracle pins the\n * same set against the anchor at runtime.\n */\nexport type Rev2026RequestMethod =\n    | 'tools/call'\n    | 'tools/list'\n    | 'prompts/get'\n    | 'prompts/list'\n    | 'resources/list'\n    | 'resources/templates/list'\n    | 'resources/read'\n    | 'completion/complete'\n    | 'server/discover'\n    | 'subscriptions/listen';\n\n/** The 2026-era notification-method set (the hand-registry seed; see the deletion list above). */\nexport type Rev2026NotificationMethod =\n    | 'notifications/cancelled'\n    | 'notifications/progress'\n    | 'notifications/message'\n    | 'notifications/resources/updated'\n    | 'notifications/resources/list_changed'\n    | 'notifications/tools/list_changed'\n    | 'notifications/prompts/list_changed'\n    | 'notifications/subscriptions/acknowledged';\n\nfunction build() {\n    /* ════════════════════════════════════════════════════════════════════════════\n     * Frozen neutral-layer building blocks\n     *\n     * Everything from this point until the next ═-banner is a verbatim frozen\n     * copy of a schema that, at the time this revision was sealed, lived in the\n     * neutral types/schemas.ts. They are copied dependencies-first so no forward\n     * references exist. They are NOT re-derived from the public layer at runtime —\n     * a widening or tightening landed on types/schemas.ts has no effect here until\n     * a deliberate per-revision re-freeze.\n     * ════════════════════════════════════════════════════════════════════════════ */\n\n    const JSONValueSchema: z.ZodType<JSONValue, JSONValue> = z.lazy(() =>\n        z.union([z.string(), z.number(), z.boolean(), z.null(), z.record(z.string(), JSONValueSchema), z.array(JSONValueSchema)])\n    );\n    const JSONObjectSchema: z.ZodType<JSONObject, JSONObject> = z.record(z.string(), JSONValueSchema);\n\n    /**\n     * A progress token, used to associate progress notifications with the original request.\n     */\n    const ProgressTokenSchema = z.union([z.string(), z.number().int()]);\n\n    /**\n     * An opaque token used to represent a cursor for pagination.\n     */\n    const CursorSchema = z.string();\n\n    /**\n     * A uniquely identifying ID for a request in JSON-RPC.\n     */\n    const RequestIdSchema = z.union([z.string(), z.number().int()]);\n\n    /**\n     * The sender or recipient of messages and data in a conversation.\n     */\n    const RoleSchema = z.enum(['user', 'assistant']);\n\n    /**\n     * The severity of a log message.\n     */\n    const LoggingLevelSchema = z.enum(['debug', 'info', 'notice', 'warning', 'error', 'critical', 'alert', 'emergency']);\n\n    /**\n     * A Zod schema for validating Base64 strings that is more performant and\n     * robust for very large inputs than the default regex-based check. It avoids\n     * stack overflows by using the native `atob` function for validation.\n     */\n    const Base64Schema = z.string().refine(\n        val => {\n            try {\n                atob(val);\n                return true;\n            } catch {\n                return false;\n            }\n        },\n        { message: 'Invalid Base64 string' }\n    );\n\n    /* ─── Request/notification meta and base params ─── */\n\n    /** @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only. */\n    const TaskMetadataSchema = z.object({\n        ttl: z.number().optional()\n    });\n\n    /** @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only. */\n    const RelatedTaskMetadataSchema = z.object({\n        taskId: z.string()\n    });\n\n    const RequestMetaSchema = z.looseObject({\n        /**\n         * If specified, the caller is requesting out-of-band progress notifications for this request (as represented by notifications/progress). The value of this parameter is an opaque token that will be attached to any subsequent notifications. The receiver is not obligated to provide these notifications.\n         */\n        progressToken: ProgressTokenSchema.optional(),\n        /**\n         * If specified, this request is related to the provided task.\n         */\n        'io.modelcontextprotocol/related-task': RelatedTaskMetadataSchema.optional()\n    });\n\n    const BaseRequestParamsSchema = z.object({\n        _meta: RequestMetaSchema.optional()\n    });\n\n    /** @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only. */\n    const TaskAugmentedRequestParamsSchema = BaseRequestParamsSchema.extend({\n        task: TaskMetadataSchema.optional()\n    });\n\n    const NotificationsParamsSchema = z.object({\n        _meta: RequestMetaSchema.optional()\n    });\n\n    const NotificationSchema = z.object({\n        method: z.string(),\n        params: NotificationsParamsSchema.loose().optional()\n    });\n\n    /* ─── Icons / base metadata / implementation ─── */\n\n    const IconSchema = z.object({\n        src: z.string(),\n        mimeType: z.string().optional(),\n        sizes: z.array(z.string()).optional(),\n        theme: z.enum(['light', 'dark']).optional()\n    });\n\n    const IconsSchema = z.object({\n        icons: z.array(IconSchema).optional()\n    });\n\n    const BaseMetadataSchema = z.object({\n        name: z.string(),\n        title: z.string().optional()\n    });\n\n    const ImplementationSchema = BaseMetadataSchema.extend({\n        ...BaseMetadataSchema.shape,\n        ...IconsSchema.shape,\n        version: z.string(),\n        websiteUrl: z.string().optional(),\n        description: z.string().optional()\n    });\n\n    /* ─── Capability schemas ─── */\n\n    const FormElicitationCapabilitySchema = z.intersection(\n        z.object({\n            applyDefaults: z.boolean().optional()\n        }),\n        JSONObjectSchema\n    );\n\n    const ElicitationCapabilitySchema = z.preprocess(\n        value => {\n            if (value && typeof value === 'object' && !Array.isArray(value) && Object.keys(value as Record<string, unknown>).length === 0) {\n                return { form: {} };\n            }\n            return value;\n        },\n        z.intersection(\n            z.object({\n                form: FormElicitationCapabilitySchema.optional(),\n                url: JSONObjectSchema.optional()\n            }),\n            JSONObjectSchema.optional()\n        )\n    );\n\n    /** @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only. */\n    const ClientTasksCapabilitySchema = z.looseObject({\n        list: JSONObjectSchema.optional(),\n        cancel: JSONObjectSchema.optional(),\n        requests: z\n            .looseObject({\n                sampling: z\n                    .looseObject({\n                        createMessage: JSONObjectSchema.optional()\n                    })\n                    .optional(),\n                elicitation: z\n                    .looseObject({\n                        create: JSONObjectSchema.optional()\n                    })\n                    .optional()\n            })\n            .optional()\n    });\n\n    /** @deprecated 2025-11-25 wire vocabulary with no SDK runtime; kept importable for interoperability only. */\n    const ServerTasksCapabilitySchema = z.looseObject({\n        list: JSONObjectSchema.optional(),\n        cancel: JSONObjectSchema.optional(),\n        requests: z\n            .looseObject({\n                tools: z\n                    .looseObject({\n                        call: JSONObjectSchema.optional()\n                    })\n                    .optional()\n            })\n            .optional()\n    });\n\n    const ClientCapabilitiesSchema = z.object({\n        experimental: z.record(z.string(), JSONObjectSchema).optional(),\n        sampling: z\n            .object({\n                context: JSONObjectSchema.optional(),\n                tools: JSONObjectSchema.optional()\n            })\n            .optional(),\n        elicitation: ElicitationCapabilitySchema.optional(),\n        roots: z\n            .object({\n                listChanged: z.boolean().optional()\n            })\n            .optional(),\n        tasks: ClientTasksCapabilitySchema.optional(),\n        extensions: z.record(z.string(), JSONObjectSchema).optional()\n    });\n\n    const ServerCapabilitiesSchema = z.object({\n        experimental: z.record(z.string(), JSONObjectSchema).optional(),\n        logging: JSONObjectSchema.optional(),\n        completions: JSONObjectSchema.optional(),\n        prompts: z\n            .object({\n                listChanged: z.boolean().optional()\n            })\n            .optional(),\n        resources: z\n            .object({\n                subscribe: z.boolean().optional(),\n                listChanged: z.boolean().optional()\n            })\n            .optional(),\n        tools: z\n            .object({\n                listChanged: z.boolean().optional()\n            })\n            .optional(),\n        tasks: ServerTasksCapabilitySchema.optional(),\n        extensions: z.record(z.string(), JSONObjectSchema).optional()\n    });\n\n    /* ─── Progress / logging notifications ─── */\n\n    const ProgressSchema = z.object({\n        progress: z.number(),\n        total: z.optional(z.number()),\n        message: z.optional(z.string())\n    });\n\n    const ProgressNotificationParamsSchema = z.object({\n        ...NotificationsParamsSchema.shape,\n        ...ProgressSchema.shape,\n        progressToken: ProgressTokenSchema\n    });\n\n    const ProgressNotificationSchema = NotificationSchema.extend({\n        method: z.literal('notifications/progress'),\n        params: ProgressNotificationParamsSchema\n    });\n\n    const LoggingMessageNotificationParamsSchema = NotificationsParamsSchema.extend({\n        level: LoggingLevelSchema,\n        logger: z.string().optional(),\n        data: z.unknown()\n    });\n\n    const LoggingMessageNotificationSchema = NotificationSchema.extend({\n        method: z.literal('notifications/message'),\n        params: LoggingMessageNotificationParamsSchema\n    });\n\n    /* ─── Resource contents / annotations ─── */\n\n    const ResourceContentsSchema = z.object({\n        uri: z.string(),\n        mimeType: z.optional(z.string()),\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    const TextResourceContentsSchema = ResourceContentsSchema.extend({\n        text: z.string()\n    });\n\n    const BlobResourceContentsSchema = ResourceContentsSchema.extend({\n        blob: Base64Schema\n    });\n\n    const AnnotationsSchema = z.object({\n        audience: z.array(RoleSchema).optional(),\n        priority: z.number().min(0).max(1).optional(),\n        lastModified: z.iso.datetime({ offset: true }).optional()\n    });\n\n    /* ─── Resources / templates / list-changed notifications ─── */\n\n    const ResourceSchema = z.object({\n        ...BaseMetadataSchema.shape,\n        ...IconsSchema.shape,\n        uri: z.string(),\n        description: z.optional(z.string()),\n        mimeType: z.optional(z.string()),\n        size: z.optional(z.number()),\n        annotations: AnnotationsSchema.optional(),\n        _meta: z.optional(z.looseObject({}))\n    });\n\n    const ResourceTemplateSchema = z.object({\n        ...BaseMetadataSchema.shape,\n        ...IconsSchema.shape,\n        uriTemplate: z.string(),\n        description: z.optional(z.string()),\n        mimeType: z.optional(z.string()),\n        annotations: AnnotationsSchema.optional(),\n        _meta: z.optional(z.looseObject({}))\n    });\n\n    const ResourceListChangedNotificationSchema = NotificationSchema.extend({\n        method: z.literal('notifications/resources/list_changed'),\n        params: NotificationsParamsSchema.optional()\n    });\n\n    const ResourceUpdatedNotificationParamsSchema = NotificationsParamsSchema.extend({\n        uri: z.string()\n    });\n\n    const ResourceUpdatedNotificationSchema = NotificationSchema.extend({\n        method: z.literal('notifications/resources/updated'),\n        params: ResourceUpdatedNotificationParamsSchema\n    });\n\n    /* ─── Prompts / content blocks ─── */\n\n    const PromptArgumentSchema = z.object({\n        name: z.string(),\n        description: z.optional(z.string()),\n        required: z.optional(z.boolean())\n    });\n\n    const PromptSchema = z.object({\n        ...BaseMetadataSchema.shape,\n        ...IconsSchema.shape,\n        description: z.optional(z.string()),\n        arguments: z.optional(z.array(PromptArgumentSchema)),\n        _meta: z.optional(z.looseObject({}))\n    });\n\n    const PromptListChangedNotificationSchema = NotificationSchema.extend({\n        method: z.literal('notifications/prompts/list_changed'),\n        params: NotificationsParamsSchema.optional()\n    });\n\n    const TextContentSchema = z.object({\n        type: z.literal('text'),\n        text: z.string(),\n        annotations: AnnotationsSchema.optional(),\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    const ImageContentSchema = z.object({\n        type: z.literal('image'),\n        data: Base64Schema,\n        mimeType: z.string(),\n        annotations: AnnotationsSchema.optional(),\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    const AudioContentSchema = z.object({\n        type: z.literal('audio'),\n        data: Base64Schema,\n        mimeType: z.string(),\n        annotations: AnnotationsSchema.optional(),\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    const ToolUseContentSchema = z.object({\n        type: z.literal('tool_use'),\n        name: z.string(),\n        id: z.string(),\n        input: z.record(z.string(), z.unknown()),\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    const EmbeddedResourceSchema = z.object({\n        type: z.literal('resource'),\n        resource: z.union([TextResourceContentsSchema, BlobResourceContentsSchema]),\n        annotations: AnnotationsSchema.optional(),\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    const ResourceLinkSchema = ResourceSchema.extend({\n        type: z.literal('resource_link')\n    });\n\n    const ContentBlockSchema = z.union([\n        TextContentSchema,\n        ImageContentSchema,\n        AudioContentSchema,\n        ResourceLinkSchema,\n        EmbeddedResourceSchema\n    ]);\n\n    const PromptMessageSchema = z.object({\n        role: RoleSchema,\n        content: ContentBlockSchema\n    });\n\n    /* ─── Tool annotations / tool list-changed / sampling primitives ─── */\n\n    const ToolAnnotationsSchema = z.object({\n        title: z.string().optional(),\n        readOnlyHint: z.boolean().optional(),\n        destructiveHint: z.boolean().optional(),\n        idempotentHint: z.boolean().optional(),\n        openWorldHint: z.boolean().optional()\n    });\n\n    const ToolListChangedNotificationSchema = NotificationSchema.extend({\n        method: z.literal('notifications/tools/list_changed'),\n        params: NotificationsParamsSchema.optional()\n    });\n\n    const ModelHintSchema = z.object({\n        name: z.string().optional()\n    });\n\n    const ModelPreferencesSchema = z.object({\n        hints: z.array(ModelHintSchema).optional(),\n        costPriority: z.number().min(0).max(1).optional(),\n        speedPriority: z.number().min(0).max(1).optional(),\n        intelligencePriority: z.number().min(0).max(1).optional()\n    });\n\n    const ToolChoiceSchema = z.object({\n        mode: z.enum(['auto', 'required', 'none']).optional()\n    });\n\n    /* ─── Elicitation primitive-schema vocabulary ─── */\n\n    const BooleanSchemaSchema = z.object({\n        type: z.literal('boolean'),\n        title: z.string().optional(),\n        description: z.string().optional(),\n        default: z.boolean().optional()\n    });\n\n    const StringSchemaSchema = z.object({\n        type: z.literal('string'),\n        title: z.string().optional(),\n        description: z.string().optional(),\n        minLength: z.number().optional(),\n        maxLength: z.number().optional(),\n        format: z.enum(['email', 'uri', 'date', 'date-time']).optional(),\n        default: z.string().optional()\n    });\n\n    const NumberSchemaSchema = z.object({\n        type: z.enum(['number', 'integer']),\n        title: z.string().optional(),\n        description: z.string().optional(),\n        minimum: z.number().optional(),\n        maximum: z.number().optional(),\n        default: z.number().optional()\n    });\n\n    const UntitledSingleSelectEnumSchemaSchema = z.object({\n        type: z.literal('string'),\n        title: z.string().optional(),\n        description: z.string().optional(),\n        enum: z.array(z.string()),\n        default: z.string().optional()\n    });\n\n    const TitledSingleSelectEnumSchemaSchema = z.object({\n        type: z.literal('string'),\n        title: z.string().optional(),\n        description: z.string().optional(),\n        oneOf: z.array(\n            z.object({\n                const: z.string(),\n                title: z.string()\n            })\n        ),\n        default: z.string().optional()\n    });\n\n    const LegacyTitledEnumSchemaSchema = z.object({\n        type: z.literal('string'),\n        title: z.string().optional(),\n        description: z.string().optional(),\n        enum: z.array(z.string()),\n        enumNames: z.array(z.string()).optional(),\n        default: z.string().optional()\n    });\n\n    const SingleSelectEnumSchemaSchema = z.union([UntitledSingleSelectEnumSchemaSchema, TitledSingleSelectEnumSchemaSchema]);\n\n    const UntitledMultiSelectEnumSchemaSchema = z.object({\n        type: z.literal('array'),\n        title: z.string().optional(),\n        description: z.string().optional(),\n        minItems: z.number().optional(),\n        maxItems: z.number().optional(),\n        items: z.object({\n            type: z.literal('string'),\n            enum: z.array(z.string())\n        }),\n        default: z.array(z.string()).optional()\n    });\n\n    const TitledMultiSelectEnumSchemaSchema = z.object({\n        type: z.literal('array'),\n        title: z.string().optional(),\n        description: z.string().optional(),\n        minItems: z.number().optional(),\n        maxItems: z.number().optional(),\n        items: z.object({\n            anyOf: z.array(\n                z.object({\n                    const: z.string(),\n                    title: z.string()\n                })\n            )\n        }),\n        default: z.array(z.string()).optional()\n    });\n\n    const MultiSelectEnumSchemaSchema = z.union([UntitledMultiSelectEnumSchemaSchema, TitledMultiSelectEnumSchemaSchema]);\n\n    const EnumSchemaSchema = z.union([LegacyTitledEnumSchemaSchema, SingleSelectEnumSchemaSchema, MultiSelectEnumSchemaSchema]);\n\n    const PrimitiveSchemaDefinitionSchema = z.union([EnumSchemaSchema, BooleanSchemaSchema, StringSchemaSchema, NumberSchemaSchema]);\n\n    const ElicitRequestFormParamsSchema = TaskAugmentedRequestParamsSchema.extend({\n        mode: z.literal('form').optional(),\n        message: z.string(),\n        requestedSchema: z\n            .object({\n                type: z.literal('object'),\n                properties: z.record(z.string(), PrimitiveSchemaDefinitionSchema),\n                required: z.array(z.string()).optional()\n            })\n            .catchall(z.unknown())\n    });\n\n    /* ─── Completion references / roots ─── */\n\n    const ResourceTemplateReferenceSchema = z.object({\n        type: z.literal('ref/resource'),\n        uri: z.string()\n    });\n\n    const PromptReferenceSchema = z.object({\n        type: z.literal('ref/prompt'),\n        name: z.string()\n    });\n\n    const RootSchema = z.object({\n        uri: z.string().startsWith('file://'),\n        name: z.string().optional(),\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    /* ════════════════════════════════════════════════════════════════════════════\n     * End of frozen neutral-layer building blocks. Everything below is the\n     * 2026-07-28 wire-specific vocabulary (envelope, forks, results, requests,\n     * notifications) composed against the frozen copies above.\n     * ════════════════════════════════════════════════════════════════════════════ */\n\n    /* 2026-era capability forks (defined ahead of the envelope, which composes\n     * the client fork). The frozen shapes minus the deleted `tasks` key: `tasks`\n     * is 2025-only vocabulary with no slot on this revision, consistent with the\n     * encode-side deletion (Q1-SD3 iii).\n     *\n     * Both forks list their members EXPLICITLY (composing the frozen member\n     * schemas by reference) rather than using `.omit()`: the envelope schema\n     * below reaches the bundled package declarations, and an `.omit()` inference\n     * is a mapped type whose printed member order is unstable across dts-rollup\n     * builds (api-report flap). The explicit list doubles as the fork's deletion\n     * statement — a member added to the frozen shape must be re-adjudicated here. */\n    const sharedClientCapabilityShape = ClientCapabilitiesSchema.shape;\n    const ClientCapabilities2026Schema = z.object({\n        experimental: sharedClientCapabilityShape.experimental,\n        sampling: sharedClientCapabilityShape.sampling,\n        elicitation: sharedClientCapabilityShape.elicitation,\n        roots: sharedClientCapabilityShape.roots,\n        extensions: sharedClientCapabilityShape.extensions\n    });\n    const sharedServerCapabilityShape = ServerCapabilitiesSchema.shape;\n    const ServerCapabilities2026Schema = z.object({\n        experimental: sharedServerCapabilityShape.experimental,\n        logging: sharedServerCapabilityShape.logging,\n        completions: sharedServerCapabilityShape.completions,\n        prompts: sharedServerCapabilityShape.prompts,\n        resources: sharedServerCapabilityShape.resources,\n        tools: sharedServerCapabilityShape.tools,\n        extensions: sharedServerCapabilityShape.extensions\n    });\n\n    /* Per-request `_meta` envelope */\n    /**\n     * The per-request `_meta` envelope carried by every request under protocol revision\n     * 2026-07-28: the protocol version governing the request, the client implementation\n     * info, and the client's capabilities — declared per request rather than once at\n     * initialization — plus the optional log-level opt-in.\n     *\n     * This schema models the complete envelope on its own (loose: foreign keys\n     * pass through - the lift extracts exactly the reserved keys, so enforcement\n     * never sees extension material). Requiredness is enforced per request at\n     * dispatch time by the 2026-era codec's `checkInboundEnvelope` step.\n     */\n    const RequestMetaEnvelopeSchema = z.looseObject({\n        /**\n         * If specified, the caller is requesting out-of-band progress notifications for this request (as represented by notifications/progress). The value of this parameter is an opaque token that will be attached to any subsequent notifications. The receiver is not obligated to provide these notifications.\n         */\n        progressToken: ProgressTokenSchema.optional(),\n        /**\n         * The MCP protocol version being used for this request. For the HTTP transport,\n         * the value must match the `MCP-Protocol-Version` header.\n         */\n        [PROTOCOL_VERSION_META_KEY]: z.string(),\n        /**\n         * Identifies the client software making the request. Optional since\n         * spec PR #3002 (clients SHOULD send it; servers must not require it).\n         */\n        [CLIENT_INFO_META_KEY]: ImplementationSchema.optional(),\n        /**\n         * The client's capabilities for this specific request. An empty object means the\n         * client supports no optional capabilities. Servers must not infer capabilities\n         * from prior requests. Validated with the 2026 fork: `tasks` has no slot on\n         * this revision (deleted vocabulary), matching the server-side fork wired\n         * into `DiscoverResultSchema`.\n         */\n        [CLIENT_CAPABILITIES_META_KEY]: ClientCapabilities2026Schema,\n        /**\n         * The desired log level for this request. When absent, the server must not send\n         * `notifications/message` notifications for the request.\n         *\n         * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577); remains\n         * in the specification for at least twelve months.\n         */\n        [LOG_LEVEL_META_KEY]: LoggingLevelSchema.optional()\n    });\n\n    /* ------------------------------------------------------------------------ *\n     * Forked payload vocabulary (shared-tier admission rule, ATK-B section 1):\n     * `Tool` and `SamplingMessage` are bidirectionally incomparable between the\n     * 2025-11-25 and 2026-07-28 anchors, so they FORK per wire module instead of\n     * sitting in the shared tier. The forks below are 2026-anchor-exact:\n     * - Tool (2026) has NO `execution` member (ToolExecution and its\n     *   `taskSupport` carrier are deleted vocabulary) — a 2026 peer's tool that\n     *   carries one is stripped on parse, and the encode side strips it from\n     *   outbound tools (Q1-SD3 iii).\n     * - SamplingMessage (2026) is composed against the 2026 anchor shape.\n     * ------------------------------------------------------------------------ */\n\n    /** 2026-era Tool: anchor-exact — no `execution` (deleted vocabulary). */\n    const ToolSchema = z.object({\n        ...BaseMetadataSchema.shape,\n        ...IconsSchema.shape,\n        description: z.string().optional(),\n        // Anchor-exact: { $schema?: string; type: 'object'; [key: string]: unknown }\n        inputSchema: z.looseObject({\n            $schema: z.string().optional(),\n            type: z.literal('object')\n        }),\n        // Anchor-exact: { $schema?: string; [key: string]: unknown }\n        outputSchema: z\n            .looseObject({\n                $schema: z.string().optional()\n            })\n            .optional(),\n        annotations: ToolAnnotationsSchema.optional(),\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    /** 2026-era ToolResultContent (anchor-exact: `structuredContent?: unknown`). */\n    const ToolResultContentSchema = z.object({\n        type: z.literal('tool_result'),\n        toolUseId: z.string(),\n        content: z.array(ContentBlockSchema),\n        structuredContent: z.unknown().optional(),\n        isError: z.boolean().optional(),\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    /** 2026-era sampling content union (composes the forked tool-result shape). */\n    const SamplingMessageContentBlockSchema = z.union([\n        TextContentSchema,\n        ImageContentSchema,\n        AudioContentSchema,\n        ToolUseContentSchema,\n        ToolResultContentSchema\n    ]);\n\n    /** 2026-era SamplingMessage (anchor-exact: single block or array). */\n    const SamplingMessageSchema = z.object({\n        role: RoleSchema,\n        content: z.union([SamplingMessageContentBlockSchema, z.array(SamplingMessageContentBlockSchema)]),\n        _meta: z.record(z.string(), z.unknown()).optional()\n    });\n\n    /* ------------------------------------------------------------------------ *\n     * Result side. `resultType` is a sender obligation (spec.types.2026-07-28\n     * Result.resultType: \"Servers implementing this protocol version MUST\n     * include this field\") and a receiver default (schema.ts:208 — clients MUST\n     * treat absent `resultType` as 'complete'). These are the WIRE-TRUE\n     * artifacts — the corpus and the parity suite parse them; `decodeResult`\n     * parses with them and then LIFTS (drops resultType) to the neutral shape.\n     * Sender-side requiredness is enforced by construction (`encodeResult`\n     * stamps it), so the parse side carries the receiver default.\n     * ------------------------------------------------------------------------ */\n\n    /** Open union per the anchor: 'complete' | 'input_required' | string. */\n    const ResultTypeSchema = z.string();\n\n    /**\n     * Result `_meta` (anchor `ResultMetaObject`, added by spec PR #3002):\n     * loose, with the serverInfo key typed when present; the outbound stamp\n     * is the encode contract's `stampServerInfoMeta` step.\n     */\n    const ResultMetaSchema = z.looseObject({\n        // Malformed drops to absent, per the spec: the value \"is not verified\n        // by the protocol\" and clients \"SHOULD NOT use it to change their behavior\".\n        // eslint-disable-next-line unicorn/prefer-top-level-await -- Zod `.catch()`, not a Promise\n        [SERVER_INFO_META_KEY]: ImplementationSchema.optional().catch(undefined)\n    });\n\n    const wireMeta = ResultMetaSchema.optional();\n\n    function wireResult<T extends z.core.$ZodLooseShape>(shape: T) {\n        return z.looseObject({\n            _meta: wireMeta,\n            /** Sender MUST set; receiver defaults absent → 'complete' (spec receiver leniency). */\n            resultType: ResultTypeSchema.default('complete'),\n            ...shape\n        });\n    }\n\n    const ResultSchema = wireResult({});\n\n    const PaginatedResultSchema = wireResult({\n        nextCursor: CursorSchema.optional()\n    });\n\n    const CallToolResultSchema = wireResult({\n        content: z.array(ContentBlockSchema),\n        structuredContent: z.unknown().optional(),\n        isError: z.boolean().optional()\n    });\n\n    const ListToolsResultSchema = wireResult({\n        ttlMs: z.number().int().min(0),\n        cacheScope: z.enum(['public', 'private']),\n        tools: z.array(ToolSchema),\n        nextCursor: CursorSchema.optional()\n    });\n\n    const ListPromptsResultSchema = wireResult({\n        ttlMs: z.number().int().min(0),\n        cacheScope: z.enum(['public', 'private']),\n        prompts: z.array(PromptSchema),\n        nextCursor: CursorSchema.optional()\n    });\n\n    const GetPromptResultSchema = wireResult({\n        description: z.string().optional(),\n        messages: z.array(PromptMessageSchema)\n    });\n\n    const ListResourcesResultSchema = wireResult({\n        ttlMs: z.number().int().min(0),\n        cacheScope: z.enum(['public', 'private']),\n        resources: z.array(ResourceSchema),\n        nextCursor: CursorSchema.optional()\n    });\n\n    const ListResourceTemplatesResultSchema = wireResult({\n        ttlMs: z.number().int().min(0),\n        cacheScope: z.enum(['public', 'private']),\n        resourceTemplates: z.array(ResourceTemplateSchema),\n        nextCursor: CursorSchema.optional()\n    });\n\n    const ReadResourceResultSchema = wireResult({\n        ttlMs: z.number().int().min(0),\n        cacheScope: z.enum(['public', 'private']),\n        contents: z.array(z.union([TextResourceContentsSchema, BlobResourceContentsSchema]))\n    });\n\n    const CompleteResultSchema = wireResult({\n        completion: z\n            .object({\n                values: z.array(z.string()).max(100),\n                total: z.number().int().optional(),\n                hasMore: z.boolean().optional()\n            })\n            .loose()\n    });\n\n    /** CacheableResult (SEP-2549): ttlMs and cacheScope REQUIRED per the anchor. */\n    const CacheableResultSchema = wireResult({\n        ttlMs: z.number().int().min(0),\n        cacheScope: z.enum(['public', 'private'])\n    });\n\n    const DiscoverResultSchema = wireResult({\n        // Receiver-side leniency per caching.mdx:56-58 — the probe classifier must\n        // accept a DiscoverResult that omits OR malforms the cache hints (spec:\n        // \"if ttlMs is negative, clients SHOULD ignore it and treat it as 0\").\n        // `.catch()` returns the fallback for both absence and parse failure;\n        // sender obligation is enforced by `encodeResult`, not by parse.\n        // eslint-disable-next-line unicorn/prefer-top-level-await -- Zod `.catch()`, not a Promise\n        ttlMs: z.number().int().min(0).catch(0),\n        // eslint-disable-next-line unicorn/prefer-top-level-await -- Zod `.catch()`, not a Promise\n        cacheScope: z.enum(['public', 'private']).catch('private'),\n        supportedVersions: z.array(z.string()),\n        capabilities: ServerCapabilities2026Schema,\n        // No body `serverInfo` (spec PR #3002) — identity lives in the result\n        // `_meta['io.modelcontextprotocol/serverInfo']`.\n        instructions: z.string().optional()\n    });\n\n    /* ------------------------------------------------------------------------ *\n     * Multi round-trip requests (SEP-2322). The in-band vocabulary of this\n     * revision: server→client interactions are carried as de-JSON-RPC'd embedded\n     * requests inside an `input_required` result, fulfilled by the client, and\n     * echoed back as embedded responses on the retry. The shapes below are\n     * anchor-exact wire artifacts (corpus + parity); the lenient dispatch-time\n     * schemas the multi-round-trip driver parses embedded requests with live in\n     * `inputRequired.ts`.\n     *\n     * The sampling shapes fork here (they compose the forked SamplingMessage /\n     * Tool payloads); the URL-mode elicitation params fork here (the draft\n     * removed `elicitationId`; the shared schema keeps it because it is required\n     * on the frozen 2025-11-25 revision); form-mode elicitation params are\n     * revision-identical and are composed by reference from the shared schema.\n     * ------------------------------------------------------------------------ */\n\n    /** 2026-era CreateMessageRequestParams (anchor-exact: forked SamplingMessage/Tool, no task augmentation). */\n    const CreateMessageRequestParamsSchema = z.object({\n        messages: z.array(SamplingMessageSchema),\n        modelPreferences: ModelPreferencesSchema.optional(),\n        systemPrompt: z.string().optional(),\n        includeContext: z.enum(['none', 'thisServer', 'allServers']).optional(),\n        temperature: z.number().optional(),\n        maxTokens: z.number().int(),\n        stopSequences: z.array(z.string()).optional(),\n        metadata: JSONObjectSchema.optional(),\n        tools: z.array(ToolSchema).optional(),\n        toolChoice: ToolChoiceSchema.optional()\n    });\n\n    /** 2026-era embedded sampling request (de-JSON-RPC'd). */\n    const CreateMessageRequestSchema = z.object({\n        method: z.literal('sampling/createMessage'),\n        params: CreateMessageRequestParamsSchema\n    });\n\n    /**\n     * 2026-era embedded roots listing request (de-JSON-RPC'd). Embedded input\n     * requests do NOT carry the per-request `_meta` envelope on this revision —\n     * the anchor declares a bare optional `_meta` on `params`.\n     */\n    const ListRootsRequestSchema = z.object({\n        method: z.literal('roots/list'),\n        params: z.object({ _meta: z.record(z.string(), z.unknown()).optional() }).optional()\n    });\n\n    /** 2026-era embedded sampling response (anchor-exact: extends the forked SamplingMessage). */\n    const CreateMessageResultSchema = z.object({\n        ...SamplingMessageSchema.shape,\n        model: z.string(),\n        stopReason: z.string().optional()\n    });\n\n    /** 2026-era embedded roots listing response (anchor-exact: bare `roots` array). */\n    const ListRootsResultSchema = z.object({\n        roots: z.array(RootSchema)\n    });\n\n    /** 2026-era embedded elicitation response (anchor-exact: bare result, restricted content value types). */\n    const ElicitResultSchema = z.object({\n        action: z.enum(['accept', 'decline', 'cancel']),\n        content: z.record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.array(z.string())])).optional()\n    });\n\n    /**\n     * 2026-era URL-mode elicitation params (anchor-exact fork): the draft removed\n     * `elicitationId` (and the `notifications/elicitation/complete` channel it\n     * keyed) — the shared schema keeps the field because it is required on the\n     * frozen 2025-11-25 revision.\n     */\n    const ElicitRequestURLParamsSchema = z.object({\n        mode: z.literal('url'),\n        message: z.string(),\n        url: z.string().url()\n    });\n\n    /** 2026-era elicitation params (form mode is revision-identical; URL mode is the fork above). */\n    const ElicitRequestParamsSchema = z.union([ElicitRequestFormParamsSchema, ElicitRequestURLParamsSchema]);\n\n    /** 2026-era embedded elicitation request (de-JSON-RPC'd; see the URL-mode fork above). */\n    const ElicitRequestSchema = z.object({\n        method: z.literal('elicitation/create'),\n        params: ElicitRequestParamsSchema\n    });\n\n    /** A single embedded input request (one of the three demoted server→client requests). */\n    const InputRequestSchema = z.union([CreateMessageRequestSchema, ListRootsRequestSchema, ElicitRequestSchema]);\n\n    /** A single embedded input response — the BARE result union (never a `{method, result}` wrapper). */\n    const InputResponseSchema = z.union([CreateMessageResultSchema, ListRootsResultSchema, ElicitResultSchema]);\n\n    /** Map of embedded input requests, keyed by server-assigned identifiers. */\n    const InputRequestsSchema = z.record(z.string(), InputRequestSchema);\n\n    /** Map of embedded input responses, keyed by the corresponding request identifiers. */\n    const InputResponsesSchema = z.record(z.string(), InputResponseSchema);\n\n    /**\n     * The wire InputRequiredResult: `resultType: 'input_required'` plus at least\n     * one of `inputRequests` / `requestState` (the at-least-one rule is enforced\n     * at the server seam, not by this parse shape).\n     */\n    const InputRequiredResultSchema = wireResult({\n        inputRequests: InputRequestsSchema.optional(),\n        requestState: z.string().optional()\n    });\n\n    /** The retry-channel members carried by client-initiated requests on this revision. */\n    const retryParamsShape = {\n        inputResponses: InputResponsesSchema.optional(),\n        requestState: z.string().optional()\n    };\n\n    /** Anchor InputResponseRequestParams: the retry channel on top of the required request `_meta` envelope. */\n    const InputResponseRequestParamsSchema = z.object({\n        _meta: RequestMetaEnvelopeSchema,\n        ...retryParamsShape\n    });\n\n    /* ------------------------------------------------------------------------ *\n     * Request side. Two views per method:\n     * - WIRE-TRUE (`<Name>RequestSchema`): params `_meta` carries the REQUIRED\n     *   envelope (anchor RequestParams._meta is required). The corpus and parity\n     *   suite consume these.\n     * - DISPATCH (post-lift, internal to the registry): the protocol layer's\n     *   universal lift has already extracted the envelope, so dispatch parses a\n     *   2025-like shape with optional `_meta` (progressToken/extension keys\n     *   only) and NO 2025-only members (`task` is undeclared and strips —\n     *   payload-level deletion is physical on this leg).\n     * ------------------------------------------------------------------------ */\n\n    /** Post-lift request `_meta` (progressToken + extension keys; loose). */\n    const DispatchRequestMetaSchema = z.looseObject({\n        progressToken: ProgressTokenSchema.optional()\n    });\n\n    function wireRequest<M extends string, T extends z.core.$ZodLooseShape>(method: M, paramsShape: T) {\n        return z.object({\n            method: z.literal(method),\n            params: z.object({ _meta: RequestMetaEnvelopeSchema, ...paramsShape })\n        });\n    }\n\n    function dispatchRequest<M extends string, T extends z.core.$ZodLooseShape>(method: M, paramsShape: T) {\n        return z.object({\n            method: z.literal(method),\n            params: z.object({ _meta: DispatchRequestMetaSchema.optional(), ...paramsShape }).optional()\n        });\n    }\n\n    const callToolParamsShape = {\n        name: z.string(),\n        arguments: z.record(z.string(), z.unknown()).optional(),\n        // Multi-round-trip retry channel (the wire-true view models it; dispatch\n        // never sees it — the protocol layer lifts it before any handler runs).\n        ...retryParamsShape\n    };\n    const paginatedParamsShape = { cursor: CursorSchema.optional() };\n\n    const CallToolRequestSchema = wireRequest('tools/call', callToolParamsShape);\n    const ListToolsRequestSchema = wireRequest('tools/list', paginatedParamsShape);\n    const ListPromptsRequestSchema = wireRequest('prompts/list', paginatedParamsShape);\n    const GetPromptRequestSchema = wireRequest('prompts/get', {\n        name: z.string(),\n        arguments: z.record(z.string(), z.string()).optional(),\n        ...retryParamsShape\n    });\n    const ListResourcesRequestSchema = wireRequest('resources/list', paginatedParamsShape);\n    const ListResourceTemplatesRequestSchema = wireRequest('resources/templates/list', paginatedParamsShape);\n    const ReadResourceRequestSchema = wireRequest('resources/read', { uri: z.string(), ...retryParamsShape });\n    const completeParamsShape = {\n        ref: z.union([PromptReferenceSchema, ResourceTemplateReferenceSchema]),\n        argument: z.object({ name: z.string(), value: z.string() }),\n        context: z.object({ arguments: z.record(z.string(), z.string()).optional() }).optional()\n    };\n    const CompleteRequestSchema = wireRequest('completion/complete', completeParamsShape);\n    const DiscoverRequestSchema = wireRequest('server/discover', {});\n\n    /** Anchor SubscriptionFilter (2026-only). */\n    const SubscriptionFilterSchema = z.object({\n        toolsListChanged: z.boolean().optional(),\n        promptsListChanged: z.boolean().optional(),\n        resourcesListChanged: z.boolean().optional(),\n        resourceSubscriptions: z.array(z.string()).optional()\n    });\n    const subscriptionsListenParamsShape = { notifications: SubscriptionFilterSchema };\n    const SubscriptionsListenRequestSchema = wireRequest('subscriptions/listen', subscriptionsListenParamsShape);\n\n    /**\n     * Anchor SubscriptionsListenResultMetaObject — required subscriptionId stamp on\n     * the graceful-close result. Extends `ResultMetaObject` since spec PR\n     * #3002 (composed, so the serverInfo key and its leniency stay single-sourced).\n     */\n    const SubscriptionsListenResultMetaSchema = ResultMetaSchema.extend({\n        'io.modelcontextprotocol/subscriptionId': RequestIdSchema\n    });\n\n    /**\n     * Anchor SubscriptionsListenResult (2026-only). The empty `subscriptions/listen`\n     * response signalling that the subscription has ended gracefully (server\n     * shutdown). An abrupt transport close carries no response — the client treats\n     * stream-close-without-result as a disconnect.\n     */\n    const SubscriptionsListenResultSchema = z.looseObject({\n        /** Required `_meta` (the subscriptionId stamp); the result body is otherwise empty. */\n        _meta: SubscriptionsListenResultMetaSchema,\n        resultType: ResultTypeSchema.default('complete')\n    });\n\n    /** Dispatch (post-lift) request schemas, keyed by method — registry-internal. */\n    const dispatchRequestSchemas: { readonly [M in Rev2026RequestMethod]: z.ZodType<{ method: M }> } = {\n        'tools/call': dispatchRequest('tools/call', callToolParamsShape),\n        'tools/list': dispatchRequest('tools/list', paginatedParamsShape),\n        'prompts/get': dispatchRequest('prompts/get', {\n            name: z.string(),\n            arguments: z.record(z.string(), z.string()).optional()\n        }),\n        'prompts/list': dispatchRequest('prompts/list', paginatedParamsShape),\n        'resources/list': dispatchRequest('resources/list', paginatedParamsShape),\n        'resources/templates/list': dispatchRequest('resources/templates/list', paginatedParamsShape),\n        'resources/read': dispatchRequest('resources/read', { uri: z.string() }),\n        'completion/complete': dispatchRequest('completion/complete', completeParamsShape),\n        'server/discover': dispatchRequest('server/discover', {}),\n        'subscriptions/listen': dispatchRequest('subscriptions/listen', subscriptionsListenParamsShape)\n    };\n\n    /** Dispatch (post-lift) result schemas, keyed by method — what the funnel\n     * validates AFTER `decodeResult` consumed `resultType`. */\n    function liftedResult<T extends z.core.$ZodLooseShape>(shape: T) {\n        return z.looseObject({ _meta: wireMeta, ...shape });\n    }\n\n    const dispatchResultSchemas: { readonly [M in Rev2026RequestMethod]: z.ZodType } = {\n        'tools/call': liftedResult({\n            content: z.array(ContentBlockSchema),\n            structuredContent: z.unknown().optional(),\n            isError: z.boolean().optional()\n        }),\n        'tools/list': liftedResult({\n            ttlMs: z.number().int().min(0),\n            cacheScope: z.enum(['public', 'private']),\n            tools: z.array(ToolSchema),\n            nextCursor: CursorSchema.optional()\n        }),\n        'prompts/get': liftedResult({\n            description: z.string().optional(),\n            messages: z.array(PromptMessageSchema)\n        }),\n        'prompts/list': liftedResult({\n            ttlMs: z.number().int().min(0),\n            cacheScope: z.enum(['public', 'private']),\n            prompts: z.array(PromptSchema),\n            nextCursor: CursorSchema.optional()\n        }),\n        'resources/list': liftedResult({\n            ttlMs: z.number().int().min(0),\n            cacheScope: z.enum(['public', 'private']),\n            resources: z.array(ResourceSchema),\n            nextCursor: CursorSchema.optional()\n        }),\n        'resources/templates/list': liftedResult({\n            ttlMs: z.number().int().min(0),\n            cacheScope: z.enum(['public', 'private']),\n            resourceTemplates: z.array(ResourceTemplateSchema),\n            nextCursor: CursorSchema.optional()\n        }),\n        'resources/read': liftedResult({\n            ttlMs: z.number().int().min(0),\n            cacheScope: z.enum(['public', 'private']),\n            contents: z.array(z.union([TextResourceContentsSchema, BlobResourceContentsSchema]))\n        }),\n        'completion/complete': liftedResult({\n            completion: z\n                .object({\n                    values: z.array(z.string()).max(100),\n                    total: z.number().int().optional(),\n                    hasMore: z.boolean().optional()\n                })\n                .loose()\n        }),\n        'server/discover': liftedResult({\n            // eslint-disable-next-line unicorn/prefer-top-level-await -- Zod `.catch()`, not a Promise\n            ttlMs: z.number().int().min(0).catch(0),\n            // eslint-disable-next-line unicorn/prefer-top-level-await -- Zod `.catch()`, not a Promise\n            cacheScope: z.enum(['public', 'private']).catch('private'),\n            supportedVersions: z.array(z.string()),\n            capabilities: ServerCapabilities2026Schema,\n            // No body `serverInfo` (spec PR #3002; see DiscoverResultSchema).\n            instructions: z.string().optional()\n        }),\n        // `subscriptions/listen` receives a JSON-RPC result only on a server-side\n        // graceful close (the empty `SubscriptionsListenResult` — `_meta` carries\n        // the subscriptionId stamp). The dispatch result schema stays the lifted\n        // empty body so the mapped type is total; the listen-response demux is\n        // entry-layer (`Client._onresponse`) and never reaches `decodeResult`.\n        'subscriptions/listen': liftedResult({})\n    };\n\n    /* ------------------------------------------------------------------------ *\n     * Notifications. The 2026 notification set: cancelled, progress, message,\n     * resources/updated, resources/list_changed, tools/list_changed,\n     * prompts/list_changed. Deleted: initialized, roots/list_changed,\n     * tasks/status, elicitation/complete (removed from the draft together with\n     * URL-elicitation's elicitationId — both remain 2025-11-25 vocabulary only).\n     * The shapes are revision-identical to the shared schemas, which are\n     * composed by reference, EXCEPT cancelled (forks below: this revision\n     * requires `requestId`) and the 2026-only subscriptions/acknowledged.\n     * ------------------------------------------------------------------------ */\n\n    /**\n     * Notification `_meta` (anchor `NotificationMetaObject`): loose, with the\n     * subscriptions/listen demux key typed when present. Only the anchor-exact\n     * SHAPE is modeled here — listen delivery itself (filter gating, demux,\n     * teardown) is #14 scope and not implemented by this module.\n     */\n    const NotificationMetaSchema = z.looseObject({\n        /**\n         * The JSON-RPC ID of the `subscriptions/listen` request that opened the\n         * stream a notification was delivered on; absent on notifications not\n         * delivered via a subscription stream.\n         */\n        'io.modelcontextprotocol/subscriptionId': RequestIdSchema.optional()\n    });\n\n    /** Anchor SubscriptionsAcknowledgedNotification (2026-only). */\n    const SubscriptionsAcknowledgedNotificationSchema = z.object({\n        method: z.literal('notifications/subscriptions/acknowledged'),\n        params: z.object({\n            _meta: NotificationMetaSchema.optional(),\n            notifications: SubscriptionFilterSchema\n        })\n    });\n\n    /**\n     * 2026-era `notifications/cancelled` params (anchor-exact fork): `requestId`\n     * is REQUIRED on this revision — the shared schema keeps it optional because\n     * the frozen 2025-11-25 shape declares it optional (task cancellation goes\n     * through `tasks/cancel` there). Requiredness is bare because no 2025-era\n     * traffic touches this module.\n     */\n    const CancelledNotificationParamsSchema = z.object({\n        _meta: NotificationMetaSchema.optional(),\n        /**\n         * The ID of the request to cancel. This MUST correspond to the ID of a\n         * request the client previously issued.\n         */\n        requestId: RequestIdSchema,\n        /**\n         * An optional string describing the reason for the cancellation. This MAY\n         * be logged or presented to the user.\n         */\n        reason: z.string().optional()\n    });\n\n    /** 2026-era `notifications/cancelled` (see the params fork above). */\n    const CancelledNotificationSchema = z.object({\n        method: z.literal('notifications/cancelled'),\n        params: CancelledNotificationParamsSchema\n    });\n\n    const notificationSchemas2026: { readonly [M in Rev2026NotificationMethod]: z.ZodType<{ method: M }> } = {\n        'notifications/cancelled': CancelledNotificationSchema,\n        'notifications/progress': ProgressNotificationSchema,\n        'notifications/message': LoggingMessageNotificationSchema,\n        'notifications/resources/updated': ResourceUpdatedNotificationSchema,\n        'notifications/resources/list_changed': ResourceListChangedNotificationSchema,\n        'notifications/tools/list_changed': ToolListChangedNotificationSchema,\n        'notifications/prompts/list_changed': PromptListChangedNotificationSchema,\n        'notifications/subscriptions/acknowledged': SubscriptionsAcknowledgedNotificationSchema\n    };\n\n    /* ------------------------------------------------------------------------ *\n     * Response envelopes (wire-true; parity/corpus artifacts).\n     * ------------------------------------------------------------------------ */\n    const wireResultResponse = <T extends z.ZodType>(result: T) =>\n        z\n            .object({\n                jsonrpc: z.literal('2.0'),\n                id: z.union([z.string(), z.number().int()]),\n                result\n            })\n            .strict();\n\n    const JSONRPCResultResponseSchema = wireResultResponse(ResultSchema);\n    // The multi-round-trip methods may answer with either their final result or an\n    // InputRequiredResult (anchor: `result: CallToolResult | InputRequiredResult`).\n    const CallToolResultResponseSchema = wireResultResponse(z.union([CallToolResultSchema, InputRequiredResultSchema]));\n    const ListToolsResultResponseSchema = wireResultResponse(ListToolsResultSchema);\n    const ListPromptsResultResponseSchema = wireResultResponse(ListPromptsResultSchema);\n    const GetPromptResultResponseSchema = wireResultResponse(z.union([GetPromptResultSchema, InputRequiredResultSchema]));\n    const ListResourcesResultResponseSchema = wireResultResponse(ListResourcesResultSchema);\n    const ListResourceTemplatesResultResponseSchema = wireResultResponse(ListResourceTemplatesResultSchema);\n    const ReadResourceResultResponseSchema = wireResultResponse(z.union([ReadResourceResultSchema, InputRequiredResultSchema]));\n    const CompleteResultResponseSchema = wireResultResponse(CompleteResultSchema);\n    const DiscoverResultResponseSchema = wireResultResponse(DiscoverResultSchema);\n    const SubscriptionsListenResultResponseSchema = wireResultResponse(SubscriptionsListenResultSchema);\n\n    return {\n        JSONValueSchema,\n        JSONObjectSchema,\n        ProgressTokenSchema,\n        CursorSchema,\n        RequestIdSchema,\n        RoleSchema,\n        LoggingLevelSchema,\n        TaskMetadataSchema,\n        RelatedTaskMetadataSchema,\n        RequestMetaSchema,\n        BaseRequestParamsSchema,\n        TaskAugmentedRequestParamsSchema,\n        NotificationsParamsSchema,\n        NotificationSchema,\n        IconSchema,\n        IconsSchema,\n        BaseMetadataSchema,\n        ImplementationSchema,\n        ClientTasksCapabilitySchema,\n        ServerTasksCapabilitySchema,\n        ClientCapabilitiesSchema,\n        ServerCapabilitiesSchema,\n        ProgressSchema,\n        ProgressNotificationParamsSchema,\n        ProgressNotificationSchema,\n        LoggingMessageNotificationParamsSchema,\n        LoggingMessageNotificationSchema,\n        ResourceContentsSchema,\n        TextResourceContentsSchema,\n        BlobResourceContentsSchema,\n        AnnotationsSchema,\n        ResourceSchema,\n        ResourceTemplateSchema,\n        ResourceListChangedNotificationSchema,\n        ResourceUpdatedNotificationParamsSchema,\n        ResourceUpdatedNotificationSchema,\n        PromptArgumentSchema,\n        PromptSchema,\n        PromptListChangedNotificationSchema,\n        TextContentSchema,\n        ImageContentSchema,\n        AudioContentSchema,\n        ToolUseContentSchema,\n        EmbeddedResourceSchema,\n        ResourceLinkSchema,\n        ContentBlockSchema,\n        PromptMessageSchema,\n        ToolAnnotationsSchema,\n        ToolListChangedNotificationSchema,\n        ModelHintSchema,\n        ModelPreferencesSchema,\n        ToolChoiceSchema,\n        BooleanSchemaSchema,\n        StringSchemaSchema,\n        NumberSchemaSchema,\n        UntitledSingleSelectEnumSchemaSchema,\n        TitledSingleSelectEnumSchemaSchema,\n        LegacyTitledEnumSchemaSchema,\n        SingleSelectEnumSchemaSchema,\n        UntitledMultiSelectEnumSchemaSchema,\n        TitledMultiSelectEnumSchemaSchema,\n        MultiSelectEnumSchemaSchema,\n        EnumSchemaSchema,\n        PrimitiveSchemaDefinitionSchema,\n        ElicitRequestFormParamsSchema,\n        ResourceTemplateReferenceSchema,\n        PromptReferenceSchema,\n        RootSchema,\n        ClientCapabilities2026Schema,\n        ServerCapabilities2026Schema,\n        RequestMetaEnvelopeSchema,\n        ToolSchema,\n        ToolResultContentSchema,\n        SamplingMessageContentBlockSchema,\n        SamplingMessageSchema,\n        ResultTypeSchema,\n        ResultMetaSchema,\n        ResultSchema,\n        PaginatedResultSchema,\n        CallToolResultSchema,\n        ListToolsResultSchema,\n        ListPromptsResultSchema,\n        GetPromptResultSchema,\n        ListResourcesResultSchema,\n        ListResourceTemplatesResultSchema,\n        ReadResourceResultSchema,\n        CompleteResultSchema,\n        CacheableResultSchema,\n        DiscoverResultSchema,\n        CreateMessageRequestParamsSchema,\n        CreateMessageRequestSchema,\n        ListRootsRequestSchema,\n        CreateMessageResultSchema,\n        ListRootsResultSchema,\n        ElicitResultSchema,\n        ElicitRequestURLParamsSchema,\n        ElicitRequestParamsSchema,\n        ElicitRequestSchema,\n        InputRequestSchema,\n        InputResponseSchema,\n        InputRequestsSchema,\n        InputResponsesSchema,\n        InputRequiredResultSchema,\n        InputResponseRequestParamsSchema,\n        CallToolRequestSchema,\n        ListToolsRequestSchema,\n        ListPromptsRequestSchema,\n        GetPromptRequestSchema,\n        ListResourcesRequestSchema,\n        ListResourceTemplatesRequestSchema,\n        ReadResourceRequestSchema,\n        CompleteRequestSchema,\n        DiscoverRequestSchema,\n        SubscriptionFilterSchema,\n        SubscriptionsListenRequestSchema,\n        SubscriptionsListenResultMetaSchema,\n        SubscriptionsListenResultSchema,\n        dispatchRequestSchemas,\n        dispatchResultSchemas,\n        NotificationMetaSchema,\n        SubscriptionsAcknowledgedNotificationSchema,\n        CancelledNotificationParamsSchema,\n        CancelledNotificationSchema,\n        notificationSchemas2026,\n        JSONRPCResultResponseSchema,\n        CallToolResultResponseSchema,\n        ListToolsResultResponseSchema,\n        ListPromptsResultResponseSchema,\n        GetPromptResultResponseSchema,\n        ListResourcesResultResponseSchema,\n        ListResourceTemplatesResultResponseSchema,\n        ReadResourceResultResponseSchema,\n        CompleteResultResponseSchema,\n        DiscoverResultResponseSchema,\n        SubscriptionsListenResultResponseSchema\n    };\n}\n\n/** The full set of frozen 2026-07-28 wire schemas, as one built object (the memo target). */\nexport type Rev2026WireSchemas = ReturnType<typeof build>;\n\nlet memo: Rev2026WireSchemas | undefined;\n\n/**\n * Builds the era wire-schema set on first call and returns the same object\n * thereafter. Module evaluation stays construction-free so importing the\n * era codec/registry costs nothing until the first validation actually\n * needs a schema; the registry, the codec, and the eager `schemas.ts`\n * shim all pull through this memo, so reference identity holds across\n * every consumer.\n */\nexport function buildSchemas2026(): Rev2026WireSchemas {\n    return (memo ??= build());\n}\n", "/**\n * Cache-hint plumbing for cacheable results (protocol revision 2026-07-28).\n *\n * The 2026-07-28 revision requires `ttlMs`/`cacheScope` on the cacheable\n * result types (SEP-2549 `CacheableResult`). The values are resolved at the\n * era-aware encode seam (the 2026 wire codec's `encodeResult`), most specific\n * author first:\n *\n *   1. fields the handler returned on the result itself (when valid),\n *   2. a configured cache hint attached by the server layer\n *      (per-registration hint, then the server-level per-operation hint,\n *      combined per field — see {@linkcode attachCacheHintFallback}),\n *   3. the conservative defaults `{ ttlMs: 0, cacheScope: 'private' }`.\n *\n * The configured hint travels from the (era-blind) server configuration to the\n * (era-aware) encode seam on a symbol-keyed property of the result object —\n * {@linkcode RESULT_CACHE_HINT_FALLBACK}. Symbol-keyed properties are never\n * serialized to JSON, so attaching a hint can never change what a 2025-era\n * response looks like on the wire: only the 2026-era codec reads (and removes)\n * it while filling the required fields. The 2025-era codec has no cache code\n * path at all.\n */\n\n/** The cache scopes defined for cacheable results (SEP-2549). */\nexport type CacheScope = 'public' | 'private';\n\n/**\n * A cache hint for a cacheable result (protocol revision 2026-07-28): the\n * values to emit for `ttlMs` / `cacheScope` when the handler does not provide\n * them itself. Absent fields fall back to the conservative defaults\n * (`ttlMs: 0`, `cacheScope: 'private'`).\n */\nexport interface CacheHint {\n    /** Cache lifetime in milliseconds. Must be a non-negative safe integer. */\n    ttlMs?: number;\n    /** Whether the result may be cached by shared caches (`public`) or only by the requesting client (`private`). */\n    cacheScope?: CacheScope;\n}\n\n/**\n * The operations whose results are cacheable on the 2026-07-28 revision (the\n * `CacheableResult` extenders). This list is closed: no other operation's\n * result ever receives cache fields from the SDK.\n */\nexport const CACHEABLE_RESULT_METHODS = [\n    'tools/list',\n    'prompts/list',\n    'resources/list',\n    'resources/templates/list',\n    'resources/read',\n    'server/discover'\n] as const;\n\n/** A method whose result is cacheable on the 2026-07-28 revision. */\nexport type CacheableResultMethod = (typeof CACHEABLE_RESULT_METHODS)[number];\n\n/** Whether the given method's result is cacheable on the 2026-07-28 revision. */\nexport function isCacheableResultMethod(method: string): method is CacheableResultMethod {\n    return (CACHEABLE_RESULT_METHODS as readonly string[]).includes(method);\n}\n\n/**\n * The symbol-keyed carrier for a configured cache hint on a result object.\n * Symbol properties are invisible to JSON serialization, so the carrier can be\n * attached era-blind: only the 2026-era encode seam consumes it.\n */\nexport const RESULT_CACHE_HINT_FALLBACK: unique symbol = Symbol('modelcontextprotocol.resultCacheHintFallback');\n\n/** A result object that may carry a configured cache-hint fallback. */\ninterface CacheHintCarrier {\n    [RESULT_CACHE_HINT_FALLBACK]?: CacheHint;\n}\n\n/**\n * Attaches a configured cache hint to a result as the encode-time fallback.\n * Returns the result unchanged when there is nothing to attach. When a more\n * specific hint is already attached, the two hints are combined per field\n * (most-specific-author-wins for each of `ttlMs` and `cacheScope`): the\n * per-registration hint attached by the feature layer keeps every field it\n * sets, and the server-level per-operation hint only fills the fields the\n * more specific hint leaves unset.\n */\nexport function attachCacheHintFallback<T extends object>(result: T, hint: CacheHint | undefined): T {\n    if (hint === undefined) {\n        return result;\n    }\n    const attached = (result as CacheHintCarrier)[RESULT_CACHE_HINT_FALLBACK];\n    if (attached === undefined) {\n        return { ...result, [RESULT_CACHE_HINT_FALLBACK]: hint };\n    }\n    const merged: CacheHint = {};\n    const ttlMs = attached.ttlMs ?? hint.ttlMs;\n    if (ttlMs !== undefined) {\n        merged.ttlMs = ttlMs;\n    }\n    const cacheScope = attached.cacheScope ?? hint.cacheScope;\n    if (cacheScope !== undefined) {\n        merged.cacheScope = cacheScope;\n    }\n    return { ...result, [RESULT_CACHE_HINT_FALLBACK]: merged };\n}\n\n/** Reads the configured cache-hint fallback attached to a result, if any. */\nexport function cacheHintFallbackOf(result: object): CacheHint | undefined {\n    return (result as CacheHintCarrier)[RESULT_CACHE_HINT_FALLBACK];\n}\n\n/**\n * Whether a value is a valid `ttlMs`: a non-negative safe integer. Safe\n * integers are required because the wire schemas validate `ttlMs` as an\n * integer within `Number.MIN_SAFE_INTEGER`/`Number.MAX_SAFE_INTEGER`; a value\n * outside that range is treated as invalid here so it falls through to the\n * next author instead of being emitted and rejected downstream.\n */\nexport function isValidCacheTtlMs(value: unknown): value is number {\n    return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0;\n}\n\n/** Whether a value is a valid `cacheScope`. */\nexport function isValidCacheScope(value: unknown): value is CacheScope {\n    return value === 'public' || value === 'private';\n}\n\n/**\n * Validates a configured cache hint at configuration time. Throws a\n * `RangeError` naming the offending field, so misconfiguration fails at\n * startup/registration rather than silently degrading at encode time.\n */\nexport function assertValidCacheHint(hint: CacheHint, context: string): void {\n    if (hint.ttlMs !== undefined && !isValidCacheTtlMs(hint.ttlMs)) {\n        throw new RangeError(`Invalid cache hint for ${context}: ttlMs must be a non-negative safe integer (got ${String(hint.ttlMs)})`);\n    }\n    if (hint.cacheScope !== undefined && !isValidCacheScope(hint.cacheScope)) {\n        throw new RangeError(\n            `Invalid cache hint for ${context}: cacheScope must be 'public' or 'private' (got ${String(hint.cacheScope)})`\n        );\n    }\n}\n", "/**\n * Error codes for protocol errors that cross the wire as JSON-RPC error responses.\n * These follow the JSON-RPC specification and MCP-specific extensions.\n */\nexport enum ProtocolErrorCode {\n    // Standard JSON-RPC error codes\n    ParseError = -32_700,\n    InvalidRequest = -32_600,\n    MethodNotFound = -32_601,\n    InvalidParams = -32_602,\n    InternalError = -32_603,\n\n    // MCP-specific error codes\n    /**\n     * Resource not found.\n     *\n     * Receive-tolerated only: the SDK never EMITS `-32002` — `resources/read`\n     * misses answer `-32602` (Invalid Params) on every protocol revision per\n     * the 2026-07-28 spec MUST, and a handler-thrown `-32002` is mapped to\n     * `-32602` at the era encode seam. The member stays importable so clients\n     * can recognise `-32002` from peers built on earlier SDK releases (the\n     * spec's \"clients SHOULD also accept `-32002`\" backwards-compatibility\n     * clause). Throw `ResourceNotFoundError` instead.\n     */\n    ResourceNotFound = -32_002,\n    /**\n     * Processing the request requires a capability the client did not declare\n     * in the request's `clientCapabilities` (protocol revision 2026-07-28).\n     */\n    MissingRequiredClientCapability = -32_021,\n    /**\n     * The request's protocol version is unknown to the server or unsupported\n     * by it (protocol revision 2026-07-28).\n     */\n    UnsupportedProtocolVersion = -32_022,\n    UrlElicitationRequired = -32_042\n}\n", "import { brandedHasInstance, stampErrorBrands } from '../errors/crossBundleBrand';\nimport { ProtocolErrorCode } from './enums';\nimport type {\n    ClientCapabilities,\n    ElicitRequestURLParams,\n    MissingRequiredClientCapabilityErrorData,\n    UnsupportedProtocolVersionErrorData\n} from './types';\n\n/**\n * Protocol errors are JSON-RPC errors that cross the wire as error responses.\n * They use numeric error codes from the {@linkcode ProtocolErrorCode} enum.\n *\n * `instanceof` on this class (and its subclasses) is brand-matched, so it works\n * across separately bundled copies of the SDK — e.g. an error constructed by\n * `@modelcontextprotocol/client` matches the class re-exported by\n * `@modelcontextprotocol/server` in the same process.\n */\nexport class ProtocolError extends Error {\n    static {\n        Object.defineProperty(this, 'mcpBrand', { value: 'mcp.ProtocolError' });\n    }\n\n    static override [Symbol.hasInstance](value: unknown): boolean {\n        return brandedHasInstance(this, value);\n    }\n\n    /**\n     * Brand-based type guard: equivalent to `value instanceof this`, as an\n     * explicit static predicate (the axios/AWS-SDK `isInstance` style). Reads\n     * the caller's own brand via `this`, so every branded subclass gets a\n     * correctly-scoped guard by inheritance. Must be invoked on the class —\n     * in callback position write `v => SdkError.isInstance(v)`, not\n     * `.filter(SdkError.isInstance)` (detached calls throw rather than\n     * silently matching nothing).\n     */\n    static isInstance<T extends abstract new (...args: never[]) => unknown>(this: T, value: unknown): value is InstanceType<T> {\n        if (typeof this !== 'function') {\n            throw new TypeError(\n                'isInstance must be called on the class (e.g. `SdkError.isInstance(value)`); for callbacks use `v => SdkError.isInstance(v)`'\n            );\n        }\n        return brandedHasInstance(this, value);\n    }\n\n    constructor(\n        public readonly code: number,\n        message: string,\n        public readonly data?: unknown\n    ) {\n        super(message);\n        this.name = 'ProtocolError';\n        stampErrorBrands(this, new.target);\n    }\n\n    /**\n     * Factory method to create the appropriate error type based on the error code and data\n     */\n    static fromError(code: number, message: string, data?: unknown): ProtocolError {\n        // Check for specific error types\n        if (code === ProtocolErrorCode.UrlElicitationRequired && data) {\n            const errorData = data as { elicitations?: unknown[] };\n            if (errorData.elicitations) {\n                return new UrlElicitationRequiredError(errorData.elicitations as ElicitRequestURLParams[], message);\n            }\n        }\n\n        if (code === ProtocolErrorCode.UnsupportedProtocolVersion && data) {\n            const errorData = data as Partial<UnsupportedProtocolVersionErrorData>;\n            if (Array.isArray(errorData.supported) && typeof errorData.requested === 'string') {\n                return new UnsupportedProtocolVersionError({ supported: errorData.supported, requested: errorData.requested }, message);\n            }\n        }\n\n        // Resource not found is recognised on BOTH the spec-mandated −32602 and\n        // the legacy −32002 (the spec's \"clients SHOULD also accept −32002\"\n        // backwards-compatibility clause). On −32602 the data-shape parse is\n        // narrowed to \"exactly `{ uri: string }` and nothing else\": a server's\n        // own Invalid Params that happens to carry `data.uri` alongside other\n        // keys (e.g. `{ uri, reason: 'uri must be https' }`) stays a generic\n        // ProtocolError. On −32002 the code itself is the discriminator, so any\n        // `data.uri` string suffices.\n        if (code === ProtocolErrorCode.InvalidParams || code === ProtocolErrorCode.ResourceNotFound) {\n            const errorData = data as Record<string, unknown> | undefined;\n            if (\n                typeof errorData?.uri === 'string' &&\n                (code === ProtocolErrorCode.ResourceNotFound || Object.keys(errorData).length === 1)\n            ) {\n                return new ResourceNotFoundError(errorData.uri, message);\n            }\n        }\n\n        if (code === ProtocolErrorCode.MissingRequiredClientCapability && data) {\n            const errorData = data as Partial<MissingRequiredClientCapabilityErrorData>;\n            if (\n                errorData.requiredCapabilities !== null &&\n                typeof errorData.requiredCapabilities === 'object' &&\n                !Array.isArray(errorData.requiredCapabilities)\n            ) {\n                return new MissingRequiredClientCapabilityError({ requiredCapabilities: errorData.requiredCapabilities }, message);\n            }\n        }\n\n        // Default to generic ProtocolError\n        return new ProtocolError(code, message, data);\n    }\n}\n\n/**\n * Error type for a `resources/read` miss: the requested resource does not\n * exist. The wire code is `-32602` (Invalid Params) on every protocol\n * revision — the spec MUST for revision 2026-07-28, and the value the v1.x\n * SDK has always emitted on earlier revisions. The error data echoes the\n * requested URI.\n *\n * Recognise this error by checking `error.data` is exactly `{ uri: string }`\n * (a `-32602` whose data carries `uri` and nothing else is resource-not-found;\n * any other `-32602` is an ordinary Invalid Params). For backwards compatibility, clients should also\n * accept `-32002` as resource not found — earlier SDK builds emitted that\n * code, and {@linkcode ProtocolError.fromError} reconstructs this class for\n * either code **when `error.data` carries `uri`** (a bare `-32002` without\n * `data.uri` stays a generic {@linkcode ProtocolError}). `instanceof` checks\n * are brand-matched and work across separately bundled copies of the SDK.\n */\nexport class ResourceNotFoundError extends ProtocolError {\n    static {\n        Object.defineProperty(this, 'mcpBrand', { value: 'mcp.ResourceNotFoundError' });\n    }\n\n    constructor(uri: string, message: string = `Resource not found: ${uri}`) {\n        super(ProtocolErrorCode.InvalidParams, message, { uri });\n    }\n\n    /** The URI that was requested and not found. */\n    get uri(): string {\n        return (this.data as { uri: string }).uri;\n    }\n}\n\n/**\n * Specialized error type when a tool requires a URL mode elicitation.\n * This makes it nicer for the client to handle since there is specific data to work with instead of just a code to check against.\n */\nexport class UrlElicitationRequiredError extends ProtocolError {\n    static {\n        Object.defineProperty(this, 'mcpBrand', { value: 'mcp.UrlElicitationRequiredError' });\n    }\n\n    constructor(elicitations: ElicitRequestURLParams[], message: string = `URL elicitation${elicitations.length > 1 ? 's' : ''} required`) {\n        super(ProtocolErrorCode.UrlElicitationRequired, message, {\n            elicitations: elicitations\n        });\n    }\n\n    get elicitations(): ElicitRequestURLParams[] {\n        return (this.data as { elicitations: ElicitRequestURLParams[] })?.elicitations ?? [];\n    }\n}\n\n/**\n * Error type for the `-32022` UnsupportedProtocolVersion protocol error (protocol\n * revision 2026-07-28): the request's protocol version is unknown to the server or\n * unsupported by it.\n *\n * The error data lists the protocol versions the receiver supports (`supported`),\n * so the sender can choose a mutually supported version and retry, and echoes the\n * version that was requested (`requested`).\n */\nexport class UnsupportedProtocolVersionError extends ProtocolError {\n    static {\n        Object.defineProperty(this, 'mcpBrand', { value: 'mcp.UnsupportedProtocolVersionError' });\n    }\n\n    constructor(data: UnsupportedProtocolVersionErrorData, message: string = `Unsupported protocol version: ${data.requested}`) {\n        super(ProtocolErrorCode.UnsupportedProtocolVersion, message, data);\n    }\n\n    /**\n     * Protocol versions the receiver supports.\n     */\n    get supported(): string[] {\n        return (this.data as UnsupportedProtocolVersionErrorData).supported;\n    }\n\n    /**\n     * The protocol version that was requested.\n     */\n    get requested(): string {\n        return (this.data as UnsupportedProtocolVersionErrorData).requested;\n    }\n}\n\n/**\n * Error type for the `-32021` MissingRequiredClientCapability protocol error\n * (protocol revision 2026-07-28): processing the request requires a capability\n * the client did not declare in the request's `clientCapabilities`.\n *\n * The error data lists the missing capabilities (`requiredCapabilities`) in\n * the `ClientCapabilities` shape, so the client can see exactly what it would\n * have to declare for the request to be served. On HTTP, the response status\n * is `400 Bad Request`.\n *\n * Recognize this error by its code and `data.requiredCapabilities`, or by\n * `instanceof` — checks are brand-matched and work across separately bundled\n * copies of the SDK.\n */\nexport class MissingRequiredClientCapabilityError extends ProtocolError {\n    static {\n        Object.defineProperty(this, 'mcpBrand', { value: 'mcp.MissingRequiredClientCapabilityError' });\n    }\n\n    constructor(\n        data: MissingRequiredClientCapabilityErrorData,\n        message: string = `Missing required client capabilities: ${Object.keys(data.requiredCapabilities).join(', ')}`\n    ) {\n        super(ProtocolErrorCode.MissingRequiredClientCapability, message, data);\n    }\n\n    /**\n     * The capabilities the server requires from the client to process the\n     * request (only the missing capabilities are listed).\n     */\n    get requiredCapabilities(): ClientCapabilities {\n        return (this.data as MissingRequiredClientCapabilityErrorData).requiredCapabilities;\n    }\n}\n", "/**\n * The outbound result encode contract for the 2026-07-28 wire codec, as pure,\n * individually-testable steps. `encodeResult` applies them in order:\n *\n *  1. {@linkcode stampResultType} — the `resultType` discriminator. The SDK\n *     stamps `'complete'`; a handler-provided value passes through only for\n *     methods whose spec result vocabulary goes beyond `'complete'` (the\n *     multi round-trip request methods, whose results may be\n *     `input_required`). A non-`'complete'` value returned by a handler for\n *     any other method is a server bug and fails loudly (internal error)\n *     rather than being mis-typed on the wire.\n *  2. {@linkcode fillCacheFields} — the required `ttlMs`/`cacheScope` fields\n *     on cacheable results (SEP-2549), filled only when the post-stamp\n *     `resultType` is `'complete'` and the method is one of the cacheable\n *     operations. Resolution is most-specific-author-first: valid\n *     handler-returned values, then the configured cache hint attached by the\n *     server layer, then the conservative defaults\n *     `{ ttlMs: 0, cacheScope: 'private' }`. Invalid handler-returned values\n *     never reach the wire — they fall through to the next author.\n *  3. {@linkcode stampServerInfoMeta} — the `_meta` serverInfo key on every\n *     result (spec PR #3002: servers SHOULD identify themselves on every\n *     response). A handler-authored value wins; without a supplied identity\n *     the step is the identity function.\n *\n * Ordering matters and is pinned by tests: the stamp runs before the fill, so\n * an `input_required` result is never given cache fields.\n */\nimport type { CacheHint } from '../../shared/resultCacheHints';\nimport {\n    cacheHintFallbackOf,\n    isCacheableResultMethod,\n    isValidCacheScope,\n    isValidCacheTtlMs,\n    RESULT_CACHE_HINT_FALLBACK\n} from '../../shared/resultCacheHints';\nimport { SERVER_INFO_META_KEY } from '../../types/constants';\nimport { ProtocolErrorCode } from '../../types/enums';\nimport { ProtocolError } from '../../types/errors';\nimport type { Implementation, Result } from '../../types/types';\n\n/** The default cache policy when neither the handler nor configuration provides one. */\nexport const DEFAULT_CACHE_TTL_MS = 0;\nexport const DEFAULT_CACHE_SCOPE = 'private';\n\n/**\n * Request methods whose spec result vocabulary goes beyond `'complete'` on the\n * 2026-07-28 revision: their results may be `input_required` (multi\n * round-trip requests), so a handler-provided `resultType` passes through the\n * stamp untouched. `subscriptions/listen` is NOT in this set: it never emits\n * a JSON-RPC result — termination is stream close (HTTP) or\n * `notifications/cancelled` (stdio) per the spec.\n */\nexport const EXTENDED_RESULT_TYPE_METHODS: readonly string[] = ['tools/call', 'prompts/get', 'resources/read'];\n\n/**\n * Step 1 of the encode contract: ensure the outbound result carries the\n * required `resultType` discriminator.\n *\n * - No handler-provided value → stamp `'complete'`.\n * - Handler-provided `'complete'` → kept as-is.\n * - Handler-provided non-`'complete'` value on a method whose vocabulary\n *   allows it ({@linkcode EXTENDED_RESULT_TYPE_METHODS}) → passes through.\n *   The value is forwarded verbatim — the wire vocabulary is an open union and\n *   the SDK does not validate the string, so emitting a `resultType` the\n *   negotiated revision does not define is the handler author's\n *   responsibility.\n * - Handler-provided non-`'complete'` value on any other method → internal\n *   error (loud): the value would be mis-typed on the wire, and silently\n *   rewriting it would hide a server bug.\n */\nexport function stampResultType(method: string, result: Result): Result {\n    const provided = (result as Record<string, unknown>)['resultType'];\n    if (provided === undefined) {\n        return { ...result, resultType: 'complete' } as Result;\n    }\n    if (provided === 'complete') {\n        return result;\n    }\n    if (EXTENDED_RESULT_TYPE_METHODS.includes(method)) {\n        return result;\n    }\n    throw new ProtocolError(\n        ProtocolErrorCode.InternalError,\n        `Handler for ${method} returned resultType '${String(provided)}', but results of ${method} only support 'complete' on protocol revision 2026-07-28`\n    );\n}\n\n/**\n * Step 2 of the encode contract: fill the required `ttlMs`/`cacheScope` fields\n * on cacheable results.\n *\n * Applies only when the (post-stamp) `resultType` is `'complete'` and the\n * method is one of the cacheable operations; everything else is returned\n * untouched apart from removing the configured-hint carrier. Field resolution\n * is per field, most specific author first: a valid handler-returned value,\n * then the configured cache hint attached by the server layer, then the\n * defaults. Handler-returned values are validated at encode time (`ttlMs`\n * must be a non-negative integer, `cacheScope` must be `'public'` or\n * `'private'`); invalid values are ignored rather than emitted.\n */\nexport function fillCacheFields(method: string, result: Result): Result {\n    const fallback = cacheHintFallbackOf(result);\n    const resultType = (result as Record<string, unknown>)['resultType'];\n\n    if (resultType !== 'complete' || !isCacheableResultMethod(method)) {\n        // Not a cache-fill target. Drop the configured-hint carrier if one was\n        // attached so it never travels past the encode seam.\n        return fallback === undefined ? result : stripCacheHintFallback(result);\n    }\n\n    const provided = result as Record<string, unknown>;\n    const ttlMs = isValidCacheTtlMs(provided['ttlMs']) ? (provided['ttlMs'] as number) : resolveTtlMs(fallback);\n    const cacheScope = isValidCacheScope(provided['cacheScope']) ? (provided['cacheScope'] as string) : resolveCacheScope(fallback);\n\n    const filled = { ...provided, ttlMs, cacheScope } as Record<string | symbol, unknown>;\n    delete filled[RESULT_CACHE_HINT_FALLBACK];\n    return filled as Result;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n    return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\n/**\n * Step 3 of the encode contract: stamp the server's identity into the\n * result's `_meta` under `io.modelcontextprotocol/serverInfo` (spec PR #3002:\n * servers SHOULD include it on every response).\n *\n * - No `serverInfo` supplied (a client instance, or a hand-constructed\n *   protocol object) → identity function.\n * - The result's `_meta` already carries the key → kept as-is (the handler\n *   is the more specific author; mirrors the cache-fill resolution order).\n * - A present-but-non-object `_meta` (a dynamic-caller bug) → kept as-is:\n *   the stamp never rewrites handler material, and the malformed value fails\n *   loudly at the peer instead of being silently replaced here.\n * - Otherwise → the key is added, preserving any other `_meta` entries.\n *\n * Runs for every result regardless of `resultType`: the anchor types\n * `Result._meta` as `ResultMetaObject` on all results, `input_required`\n * included.\n */\nexport function stampServerInfoMeta(result: Result, serverInfo: Implementation | undefined): Result {\n    if (serverInfo === undefined) return result;\n    const meta = (result as Record<string, unknown>)['_meta'];\n    if (meta === undefined) {\n        return { ...result, _meta: { [SERVER_INFO_META_KEY]: serverInfo } } as Result;\n    }\n    if (!isPlainObject(meta)) return result;\n    // Value check, not `in`: a present-but-undefined key (an unset optional in\n    // handler code) must not suppress the stamp — JSON would drop the key and\n    // the response would ship with no identity at all.\n    if (meta[SERVER_INFO_META_KEY] !== undefined) return result;\n    return { ...result, _meta: { ...meta, [SERVER_INFO_META_KEY]: serverInfo } } as Result;\n}\n\nfunction resolveTtlMs(fallback: CacheHint | undefined): number {\n    return fallback !== undefined && isValidCacheTtlMs(fallback.ttlMs) ? fallback.ttlMs : DEFAULT_CACHE_TTL_MS;\n}\n\nfunction resolveCacheScope(fallback: CacheHint | undefined): string {\n    return fallback !== undefined && isValidCacheScope(fallback.cacheScope) ? fallback.cacheScope : DEFAULT_CACHE_SCOPE;\n}\n\nfunction stripCacheHintFallback(result: Result): Result {\n    const copy = { ...result } as Record<string | symbol, unknown>;\n    delete copy[RESULT_CACHE_HINT_FALLBACK];\n    return copy as Result;\n}\n", "/**\n * In-band input-request vocabulary of the 2026-07-28 revision (SEP-2322\n * multi round-trip requests), dispatch view.\n *\n * The three former server→client wire requests (`elicitation/create`,\n * `sampling/createMessage`, `roots/list`) are NOT wire request methods on\n * this revision — they are demoted to de-JSON-RPC'd payloads embedded in an\n * `input_required` result. The multi-round-trip driver dispatches those\n * embedded payloads to the client's registered handlers through the normal\n * handler machinery, and these are the schemas that dispatch parses them\n * with: lenient where the anchor's wire-true artifacts are strict (an\n * embedded request never carries the per-request `_meta` envelope), exact\n * where the vocabulary forks (the sampling shapes compose the forked\n * SamplingMessage/Tool payloads).\n *\n * Registry membership is intentionally NOT granted here — these methods stay\n * absent from the 2026-era request registry (a peer sending one as a wire\n * request still gets −32601 by absence). Only the codec's\n * `inputRequestSchema`/`inputResponseSchema` accessors expose them.\n */\nimport * as z from 'zod/v4';\n\nimport type { RequestMethod, RequestTypeMap, ResultTypeMap } from '../../types/types';\nimport { buildSchemas2026 } from './buildSchemas';\n\n/** The embedded input-request methods of the 2026-07-28 revision. */\nexport const INPUT_REQUEST_METHODS_2026 = ['elicitation/create', 'sampling/createMessage', 'roots/list'] as const;\n\nexport type InputRequestMethod2026 = (typeof INPUT_REQUEST_METHODS_2026)[number];\n\n/* The embedded-request maps are built lazily through the era's memoized\n * schema factory (`buildSchemas2026`) so importing this module constructs no\n * zod schemas; the maps themselves are memoized alongside. */\ninterface InputSchemaMaps {\n    /** Dispatch-time (lenient) embedded request schemas, keyed by method. */\n    readonly request: Record<InputRequestMethod2026, z.ZodType>;\n    /** Embedded (bare) response schemas, keyed by the request method they answer. */\n    readonly response: Record<InputRequestMethod2026, z.ZodType>;\n}\n\nlet maps: InputSchemaMaps | undefined;\n\nfunction inputSchemaMaps(): InputSchemaMaps {\n    if (maps) return maps;\n    const s = buildSchemas2026();\n    maps = {\n        request: {\n            'elicitation/create': z.object({\n                method: z.literal('elicitation/create'),\n                params: s.ElicitRequestParamsSchema\n            }),\n            'sampling/createMessage': z.object({\n                method: z.literal('sampling/createMessage'),\n                params: s.CreateMessageRequestParamsSchema\n            }),\n            'roots/list': z.object({\n                method: z.literal('roots/list'),\n                params: z.looseObject({}).optional()\n            })\n        },\n        response: {\n            'elicitation/create': s.ElicitResultSchema,\n            'sampling/createMessage': s.CreateMessageResultSchema,\n            'roots/list': s.ListRootsResultSchema\n        }\n    };\n    return maps;\n}\n\n/**\n * Forces the lazy embedded-request maps (and, through them, the era's schema\n * memo). Warm-up hook for `preloadSchemas()` — no-op once the maps exist.\n */\nexport function warmInputSchemaMaps2026(): void {\n    inputSchemaMaps();\n}\n\nexport function isInputRequestMethod2026(method: string): method is InputRequestMethod2026 {\n    return (INPUT_REQUEST_METHODS_2026 as readonly string[]).includes(method);\n}\n\n/**\n * Gets the dispatch (lenient) schema for an embedded input request, or\n * `undefined` for methods that are not in-band vocabulary on this era.\n * The typed overload mirrors `WireCodec.inputRequestSchema`.\n */\nexport function getInputRequestSchema2026<M extends RequestMethod>(method: M): z.ZodType<RequestTypeMap[M]> | undefined;\nexport function getInputRequestSchema2026(method: string): z.ZodType | undefined;\nexport function getInputRequestSchema2026(method: string): z.ZodType | undefined {\n    return isInputRequestMethod2026(method) ? inputSchemaMaps().request[method] : undefined;\n}\n\n/**\n * Gets the bare embedded-response schema answering an embedded input request,\n * or `undefined` for methods that are not in-band vocabulary on this era.\n */\nexport function getInputResponseSchema2026<M extends RequestMethod>(method: M): z.ZodType<ResultTypeMap[M]> | undefined;\nexport function getInputResponseSchema2026(method: string): z.ZodType | undefined;\nexport function getInputResponseSchema2026(method: string): z.ZodType | undefined {\n    return isInputRequestMethod2026(method) ? inputSchemaMaps().response[method] : undefined;\n}\n", "/**\n * The 2026-era method registries (protocol revision 2026-07-28).\n *\n * Registry membership IS the deletion story: there are NO entries for\n * `initialize`, `notifications/initialized`, `ping`, `logging/setLevel`,\n * `resources/subscribe`, `resources/unsubscribe`,\n * `notifications/roots/list_changed`, `notifications/elicitation/complete`\n * (removed from the draft schema; 2025-11-25-only vocabulary), the task\n * family, or the server→client wire-request channel — so an era-mismatched\n * method falls to −32601 by absence inbound and a typed local error outbound,\n * with no table to forget.\n *\n * HAND-REGISTRY SEED DECISIONS (pinned by the CI registry-diff oracle, which\n * fails LOUD if this list and the anchor diff ever disagree):\n * - `sampling/createMessage`, `elicitation/create`, `roots/list`: the anchor\n *   still carries their method literals on bare interfaces, but 2026 DEMOTES\n *   them from wire requests to in-band `InputRequest` payloads — the entire\n *   server→client JSON-RPC request channel is deleted (`ServerRequest` has\n *   no 2026 export). A generator walking method literals would re-admit them\n *   (the ATK-D flavor-b trap); this hand registry excludes them by\n *   construction. Their in-band role lands with the MRTR driver (#13).\n * - `subscriptions/listen` + `notifications/subscriptions/acknowledged`\n *   (SEP-1865): 2026-only vocabulary, present here as registry shells.\n *   Dispatch never reaches a registered handler — the serving entries\n *   (`createMcpHandler`, `serveStdio`) recognize listen at the entry layer\n *   and own ack/filter/stamp/teardown themselves; on the client side\n *   `Client.listen()` sends directly on the transport (string-typed\n *   request id, transport-level demux) rather than via `request()`.\n *\n * LAZY SCHEMA CONSTRUCTION: method membership and the exported method lists\n * are static (null-valued key objects below, mapped over the hand-registry\n * unions so drift is a compile error in both directions), while the dispatch\n * schema maps are pulled through the era's memoized `buildSchemas2026()`\n * factory on first lookup — importing this module constructs no zod schemas.\n */\nimport type * as z from 'zod/v4';\n\nimport type { NotificationMethod, NotificationTypeMap, RequestMethod, RequestTypeMap, ResultTypeMap } from '../../types/types';\nimport type { Rev2026NotificationMethod, Rev2026RequestMethod } from './buildSchemas';\nimport { buildSchemas2026 } from './buildSchemas';\n\n/* Static method membership — the schema-free half of the registry. Key order\n * matches the dispatch maps in `./buildSchemas.ts` so the exported method\n * lists are byte-identical to the pre-lazy `Object.keys(map)` derivation. */\nconst requestMethodKeys: { readonly [M in Rev2026RequestMethod]: null } = {\n    'tools/call': null,\n    'tools/list': null,\n    'prompts/get': null,\n    'prompts/list': null,\n    'resources/list': null,\n    'resources/templates/list': null,\n    'resources/read': null,\n    'completion/complete': null,\n    'server/discover': null,\n    'subscriptions/listen': null\n};\n\nconst notificationMethodKeys: { readonly [M in Rev2026NotificationMethod]: null } = {\n    'notifications/cancelled': null,\n    'notifications/progress': null,\n    'notifications/message': null,\n    'notifications/resources/updated': null,\n    'notifications/resources/list_changed': null,\n    'notifications/tools/list_changed': null,\n    'notifications/prompts/list_changed': null,\n    'notifications/subscriptions/acknowledged': null\n};\n\n/** The 2026-era request-method set (registry membership = the deletion story). */\nexport function hasRequestMethod2026(method: string): method is Rev2026RequestMethod {\n    return Object.prototype.hasOwnProperty.call(requestMethodKeys, method);\n}\n\n/** The 2026-era notification-method set. */\nexport function hasNotificationMethod2026(method: string): method is Rev2026NotificationMethod {\n    return Object.prototype.hasOwnProperty.call(notificationMethodKeys, method);\n}\n\n/** Result-map membership (same key set as the request map on this era). */\nfunction hasResultMethod2026(method: string): method is Rev2026RequestMethod {\n    return Object.prototype.hasOwnProperty.call(requestMethodKeys, method);\n}\n\n/**\n * Gets the dispatch (post-lift) Zod schema for a given request method.\n * Returns `undefined` for methods this era's registry does not define.\n * The typed overload mirrors `WireCodec.requestSchema` so call sites with a\n * statically known method need no type assertion.\n */\nexport function getRequestSchema2026<M extends RequestMethod>(method: M): z.ZodType<RequestTypeMap[M]> | undefined;\nexport function getRequestSchema2026(method: string): z.ZodType | undefined;\nexport function getRequestSchema2026(method: string): z.ZodType | undefined {\n    return hasRequestMethod2026(method) ? buildSchemas2026().dispatchRequestSchemas[method] : undefined;\n}\n\n/**\n * Gets the dispatch (post-lift) Zod schema for validating results of a given\n * request method. Returns `undefined` for methods this era's registry does\n * not define.\n * @see getRequestSchema2026 for the typed-overload contract.\n */\nexport function getResultSchema2026<M extends RequestMethod>(method: M): z.ZodType<ResultTypeMap[M]> | undefined;\nexport function getResultSchema2026(method: string): z.ZodType | undefined;\nexport function getResultSchema2026(method: string): z.ZodType | undefined {\n    return hasResultMethod2026(method) ? buildSchemas2026().dispatchResultSchemas[method] : undefined;\n}\n\n/**\n * Gets the Zod schema for a given notification method.\n * Returns `undefined` for methods this era's registry does not define.\n * @see getRequestSchema2026 for the typed-overload contract.\n */\nexport function getNotificationSchema2026<M extends NotificationMethod>(method: M): z.ZodType<NotificationTypeMap[M]> | undefined;\nexport function getNotificationSchema2026(method: string): z.ZodType | undefined;\nexport function getNotificationSchema2026(method: string): z.ZodType | undefined {\n    return hasNotificationMethod2026(method) ? buildSchemas2026().notificationSchemas2026[method] : undefined;\n}\n\n/** Registry method lists (for the spec-method universe and the CI registry-diff oracle). */\nexport const rev2026RequestMethods: readonly string[] = Object.keys(requestMethodKeys);\nexport const rev2026NotificationMethods: readonly string[] = Object.keys(notificationMethodKeys);\n", "/**\n * The 2026-era wire codec (protocol revision 2026-07-28).\n *\n * Decode = raw-first `resultType` discrimination (the structural V-1 home:\n * the RAW value is inspected BEFORE any schema validation, so a non-complete\n * result can never be masked into a hollow success by a tolerant schema),\n * then wire-exact parse, then lift (drop the wire member). Encode = the\n * stamp seam: the known deleted-field set is strictly enforced (Q1-SD3 iii) —\n * the 2026 wire types have no slot for `execution.taskSupport` or\n * `capabilities.tasks`, so the encode mapping deletes them; era-blind\n * handlers stay era-invisible while deleted vocabulary cannot cross eras\n * through the parse-free outbound path — and then the encode contract steps\n * run (see `encodeContract.ts`): the `resultType` stamp (with handler\n * pass-through for the multi round-trip methods) followed by the required\n * `ttlMs`/`cacheScope` fill on cacheable results.\n *\n * Q1-SD3 postures implemented here:\n * (i)  absent `resultType` from a 2026-classified peer → typed error NAMING\n *      the violation. The spec's absent⇒complete bridge is scoped to\n *      EARLIER-revision servers (spec.types.2026-07-28.ts Result.resultType:\n *      \"Servers implementing this protocol version MUST include this field\")\n *      and is deliberately NOT extended to modern traffic.\n * (ii) `input_required` → the driver-seam payload (the multi-round-trip\n *      driver, M4.1/#13, consumes it; until then the protocol layer surfaces\n *      the discriminated kind as a typed local error, no retry).\n * (iii) unrecognized kinds → invalid, no retry (DQ5).\n */\nimport type * as z from 'zod/v4';\n\nimport { SdkError, SdkErrorCode } from '../../errors/sdkErrors';\nimport { CLIENT_CAPABILITIES_META_KEY, CLIENT_INFO_META_KEY, LOG_LEVEL_META_KEY, PROTOCOL_VERSION_META_KEY } from '../../types/constants';\nimport type { CallToolResult, Implementation, Result, ResultMetaObject } from '../../types/types';\nimport type { DecodedResult, EnvelopeIssue, LiftedWireMaterial, OutboundEnvelopeMaterial, ValidateOutcome, WireCodec } from '../codec';\nimport { appendTextFallbackForNonObject } from '../textFallback';\nimport { buildSchemas2026 } from './buildSchemas';\nimport { fillCacheFields, stampResultType, stampServerInfoMeta } from './encodeContract';\nimport { getInputRequestSchema2026, getInputResponseSchema2026 } from './inputRequired';\nimport {\n    getNotificationSchema2026,\n    getRequestSchema2026,\n    getResultSchema2026,\n    hasNotificationMethod2026,\n    hasRequestMethod2026\n} from './registry';\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n    return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\n/** Tri-state wrap of an optional Zod schema lookup (the function-only contract). */\nfunction triState<T>(schema: z.ZodType<T> | undefined, raw: unknown): ValidateOutcome<T> {\n    if (schema === undefined) return { ok: false, reason: 'not-in-era' };\n    const parsed = schema.safeParse(raw);\n    return parsed.success ? { ok: true, value: parsed.data } : { ok: false, reason: 'invalid', message: String(parsed.error) };\n}\n\nconst NOT_IN_ERA: ValidateOutcome<never> = { ok: false, reason: 'not-in-era' };\n\n/**\n * The reserved `_meta` keys an envelope must carry on this era (in reporting\n * order). `clientInfo` is NOT here: spec PR #3002 demoted it to SHOULD, so a\n * request without it is accepted (a present-but-malformed value still fails\n * the envelope schema parse below).\n */\nconst REQUIRED_ENVELOPE_KEYS: readonly string[] = [PROTOCOL_VERSION_META_KEY, CLIENT_CAPABILITIES_META_KEY];\n\n/** Strip the known deleted-field set from an outbound result (Q1-SD3 iii). */\nfunction enforceDeletedFields(method: string, result: Result): Result {\n    let next: Record<string, unknown> = result as Record<string, unknown>;\n    let copied = false;\n    const copy = () => {\n        if (!copied) {\n            next = { ...next };\n            copied = true;\n        }\n        return next;\n    };\n\n    // tools arrays: execution (the taskSupport carrier) is deleted vocabulary.\n    const tools = (result as { tools?: unknown }).tools;\n    if (method === 'tools/list' && Array.isArray(tools) && tools.some(tool => isPlainObject(tool) && 'execution' in tool)) {\n        copy().tools = tools.map(tool => {\n            if (!isPlainObject(tool) || !('execution' in tool)) return tool;\n            const rest = { ...tool };\n            delete rest['execution'];\n            return rest;\n        });\n    }\n\n    // capability objects: the `tasks` capability is deleted vocabulary.\n    const capabilities = (result as { capabilities?: unknown }).capabilities;\n    if (isPlainObject(capabilities) && 'tasks' in capabilities) {\n        const rest = { ...capabilities };\n        delete rest['tasks'];\n        copy().capabilities = rest;\n    }\n\n    return next as Result;\n}\n\nexport const rev2026Codec: WireCodec & {\n    /**\n     * @deprecated Off-interface in-band registry probe retained for the\n     * existing inputRequiredFunnel pin. Use {@link WireCodec.validateInputRequest}\n     * — its `not-in-era` outcome is the membership signal.\n     */\n    inputRequestSchema(method: string): unknown;\n} = {\n    era: '2026-07-28',\n\n    hasRequestMethod: hasRequestMethod2026,\n    hasNotificationMethod: hasNotificationMethod2026,\n    hasInputRequestMethod: (method: string): boolean => getInputRequestSchema2026(method) !== undefined,\n\n    // ── Function-only validation surface ──\n    validateRequest: (method: string, raw: unknown) => triState(getRequestSchema2026(method), raw),\n    validateResult: (method: string, raw: unknown) => triState(getResultSchema2026(method), raw),\n    validateNotification: (method: string, raw: unknown) => triState(getNotificationSchema2026(method), raw),\n    // In-band multi-round-trip vocabulary: the demoted elicitation/sampling/\n    // roots shapes carried inside `input_required` results (NOT wire request\n    // methods on this era — registry membership is deliberately not granted).\n    validateInputRequest: (method: string, raw: unknown) => triState(getInputRequestSchema2026(method), raw),\n    validateInputResponse: (method: string, raw: unknown) => triState(getInputResponseSchema2026(method), raw),\n\n    // Sampling is in-band on this era — callers fall through to\n    // `validateInputResponse('sampling/createMessage', …)`.\n    samplingResultVariant: (): ValidateOutcome<never> => NOT_IN_ERA,\n\n    outboundEnvelope(material: OutboundEnvelopeMaterial): Readonly<Record<string, unknown>> {\n        return {\n            [PROTOCOL_VERSION_META_KEY]: material.protocolVersion,\n            [CLIENT_INFO_META_KEY]: material.clientInfo,\n            [CLIENT_CAPABILITIES_META_KEY]: material.clientCapabilities,\n            ...(material.logLevel !== undefined && { [LOG_LEVEL_META_KEY]: material.logLevel })\n        };\n    },\n\n    validateEnvelopeMeta(meta: Readonly<Record<string, unknown>>): EnvelopeIssue[] {\n        const issues: EnvelopeIssue[] = [];\n        for (const key of REQUIRED_ENVELOPE_KEYS) {\n            if (!(key in meta)) issues.push({ key, problem: 'missing' });\n        }\n        const parsed = buildSchemas2026().RequestMetaEnvelopeSchema.safeParse(meta);\n        if (!parsed.success) {\n            for (const issue of parsed.error.issues) {\n                const path = issue.path.map(String);\n                const key = path.length > 0 ? path.join('.') : '_meta';\n                // Missing required keys were already reported above in canonical order.\n                if (path.length === 1 && issues.some(existing => existing.key === key && existing.problem === 'missing')) {\n                    continue;\n                }\n                issues.push({ key, problem: issue.message });\n            }\n        }\n        return issues;\n    },\n\n    // SEP-2106 result-side projection: no `{result:…}` wrap on the modern era\n    // (the wire shape carries the natural `structuredContent` directly), but\n    // the era-agnostic §4.3 TextContent auto-append still applies.\n    projectCallToolResult: (result: CallToolResult): CallToolResult => appendTextFallbackForNonObject(result),\n\n    // Retained off-interface for the inputRequiredFunnel registry-membership\n    // pin (asserts the in-band schema set without exercising parse): the\n    // function-only WireCodec contract carries no schema-returning members,\n    // so this lives only on the concrete object's widened type.\n    inputRequestSchema: getInputRequestSchema2026,\n\n    decodeResult(method: string, raw: unknown): DecodedResult {\n        if (!isPlainObject(raw)) {\n            return {\n                kind: 'invalid',\n                error: new SdkError(SdkErrorCode.InvalidResult, `Invalid result for ${method}: not an object`, { method })\n            };\n        }\n\n        // Step 1 — RAW discrimination, before any schema (V-1).\n        const rawResultType = raw['resultType'];\n        if (rawResultType === undefined) {\n            // Q1-SD3 (i): hard error naming the violation.\n            return {\n                kind: 'invalid',\n                error: new SdkError(\n                    SdkErrorCode.InvalidResult,\n                    `Invalid result for ${method}: missing required resultType — servers implementing protocol revision 2026-07-28 ` +\n                        `MUST include it (the absent-means-complete bridge applies only to earlier-revision servers)`,\n                    { method, violation: 'missing-resultType' }\n                )\n            };\n        }\n        if (typeof rawResultType !== 'string') {\n            return {\n                kind: 'invalid',\n                error: new SdkError(SdkErrorCode.InvalidResult, `Invalid result for ${method}: non-string resultType`, {\n                    method,\n                    resultType: rawResultType\n                })\n            };\n        }\n        if (rawResultType === 'input_required') {\n            // The driver seam (#13 consumes this payload).\n            const rawInputRequests = raw['inputRequests'];\n            const inputRequests = isPlainObject(rawInputRequests) ? rawInputRequests : {};\n            const requestState = raw['requestState'];\n            // Carry result-level `_meta` through, parsed as on complete results (malformed drops to absent).\n            const metaParse = raw['_meta'] === undefined ? undefined : buildSchemas2026().ResultMetaSchema.safeParse(raw['_meta']);\n            const meta = metaParse?.success ? (metaParse.data as ResultMetaObject) : undefined;\n            if (Object.keys(inputRequests).length === 0 && typeof requestState !== 'string') {\n                // At-least-one rule, client side: with neither inputRequests\n                // nor requestState there is nothing to fulfil and nothing to\n                // echo — retrying would only resend the original params until\n                // the round cap is exhausted, so fail fast instead.\n                return {\n                    kind: 'invalid',\n                    error: new SdkError(\n                        SdkErrorCode.InvalidResult,\n                        `Invalid result for ${method}: input_required carries neither inputRequests nor requestState ` +\n                            `(every input_required result must include at least one of the two)`,\n                        { method, violation: 'input-required-missing-both' }\n                    )\n                };\n            }\n            return {\n                kind: 'input_required',\n                inputRequests,\n                ...(typeof requestState === 'string' && { requestState }),\n                ...(meta !== undefined && { _meta: meta })\n            };\n        }\n        if (rawResultType !== 'complete') {\n            // Unrecognized kind ⇒ invalid, no retry (DQ5).\n            return {\n                kind: 'invalid',\n                error: new SdkError(SdkErrorCode.UnsupportedResultType, `Unsupported result type '${rawResultType}' for ${method}`, {\n                    resultType: rawResultType,\n                    method\n                })\n            };\n        }\n\n        // Step 2 — wire-exact parse (registry methods), with resultType present.\n        // Own-key lookup: `method` is peer-influenced on related-request\n        // paths, and a prototype-chain hit (e.g. 'constructor') must not\n        // masquerade as a schema and throw out of the decode hop.\n        const wireResultSchemas = getWireResultSchemas();\n        const wireSchema = Object.hasOwn(wireResultSchemas, method) ? wireResultSchemas[method] : undefined;\n        if (wireSchema !== undefined) {\n            const parsed = wireSchema.safeParse(raw);\n            if (!parsed.success) {\n                return {\n                    kind: 'invalid',\n                    error: new SdkError(SdkErrorCode.InvalidResult, `Invalid result for ${method}: ${parsed.error}`, { method })\n                };\n            }\n        }\n\n        // Step 3 — lift: the wire discriminator is consumed.\n        const lifted = { ...raw };\n        delete lifted['resultType'];\n        return { kind: 'complete', result: lifted as Result };\n    },\n\n    encodeResult(method: string, result: Result, serverInfo?: Implementation): Result {\n        // The stamp seam, in pinned order: deleted-field strictness, then the\n        // resultType stamp (handler pass-through only for methods whose\n        // vocabulary goes beyond 'complete'), then the cache fill for the\n        // cacheable operations (only on post-stamp 'complete' results), then\n        // the `_meta` serverInfo identity stamp (#3002 — every result,\n        // handler-authored value wins).\n        return stampServerInfoMeta(fillCacheFields(method, stampResultType(method, enforceDeletedFields(method, result))), serverInfo);\n    },\n\n    // The −32002 resource-not-found domain code maps to −32602 Invalid Params\n    // on the wire (the 2026-07-28 spec MUST for resources/read misses).\n    encodeErrorCode: (code: number): number => (code === -32_002 ? -32_602 : code),\n\n    checkInboundEnvelope(material: LiftedWireMaterial): string | undefined {\n        if (material.envelope === undefined) {\n            return (\n                'Request is missing the required _meta envelope for protocol revision 2026-07-28 ' +\n                '(io.modelcontextprotocol/protocolVersion, io.modelcontextprotocol/clientCapabilities)'\n            );\n        }\n        const parsed = buildSchemas2026().RequestMetaEnvelopeSchema.safeParse(material.envelope);\n        if (!parsed.success) {\n            return `Invalid _meta envelope for protocol revision 2026-07-28: ${parsed.error.issues.map(issue => issue.message).join('; ')}`;\n        }\n        return undefined;\n    }\n};\n\n/** Wire-true result wrappers consulted by decode step 2, keyed by method —\n * built once through the era's schema memo on the first decode. */\nlet wireResultSchemasMemo: Record<string, z.ZodType> | undefined;\n\nfunction getWireResultSchemas(): Record<string, z.ZodType> {\n    if (wireResultSchemasMemo) return wireResultSchemasMemo;\n    const s = buildSchemas2026();\n    wireResultSchemasMemo = {\n        'tools/call': s.CallToolResultSchema,\n        'tools/list': s.ListToolsResultSchema,\n        'prompts/get': s.GetPromptResultSchema,\n        'prompts/list': s.ListPromptsResultSchema,\n        'resources/list': s.ListResourcesResultSchema,\n        'resources/templates/list': s.ListResourceTemplatesResultSchema,\n        'resources/read': s.ReadResourceResultSchema,\n        'completion/complete': s.CompleteResultSchema,\n        'server/discover': s.DiscoverResultSchema\n    };\n    return wireResultSchemasMemo;\n}\n\n/**\n * Forces the lazy wire-result wrapper map (and, through it, the era's schema\n * memo). Warm-up hook for `preloadSchemas()` — no-op once the map exists.\n */\nexport function warmWireResultSchemas2026(): void {\n    getWireResultSchemas();\n}\n", "/**\n * The era-granular wire-codec layer (Q1 increment 2).\n *\n * The SDK separates a revision-neutral model layer (the public types — no\n * `resultType`, no `_meta` envelope keys, no retry fields) from per-revision\n * WIRE CODECS that own revision-exact schemas, method registries, and the\n * decode (wire → neutral lift) / encode (neutral → wire stamp) transforms.\n * The codec is a pure function of the negotiated protocol version, which is\n * ordinary connection state on the `Protocol` instance: the client stores it\n * when its handshake completes, the server stores it at `_oninitialize` (and\n * modern-era server instances get it set at instance binding by the entry).\n * There is no side table — era resolution is `codecForVersion(<instance\n * state>)`, with the pre-negotiation window covered by the outbound method\n * pins in `bootstrap.ts`.\n *\n * REQUIRED DISCLOSURE (Q1-SD1, era granularity): \"the negotiated version\n * determines which types are serialized/deserialized over the wire\" cashes\n * out as \"the negotiated wire ERA determines them\". All five legacy protocol\n * versions (2024-10-07 … 2025-11-25) share one wire vocabulary and map to the\n * single 2025-era codec — exactly how the single schema set already served\n * all five — and '2026-07-28' maps to the 2026-era codec. A new codec exists\n * only when wire vocabulary actually diverges; intra-era vocabulary is NOT\n * keyed by exact version.\n *\n * Deletions are physical: registry membership is the deletion story. The\n * 2026-era registry has no `tasks/*`, `initialize`, `ping`, `logging/setLevel`,\n * `resources/(un)subscribe` or server→client wire-request entries, so an\n * inbound era-mismatched method falls to −32601 by absence — even when a\n * handler is registered — and an outbound one dies locally with a typed\n * `SdkError` before anything reaches the transport. The 2025-era registry has\n * no `server/discover`/`subscriptions/listen`/MRTR entries, symmetrically.\n *\n * Custom-handler shadowing policy (both directions): a method that belongs to\n * the SPEC-METHOD UNIVERSE — the union of every codec's registry, derived,\n * not hand-curated — is ALWAYS era-gated, so a custom handler registered for\n * a deleted spec method (e.g. `tasks/result`) serves it only on the era that\n * defines it. Methods outside the universe are consumer-owned extension\n * methods: they are era-blind and require explicit schemas, exactly as today.\n * Exception: `isExtensionReusedRequestMethod`, the Tasks extension names sent or served with an explicit schema.\n *\n * Everything in `wire/` is internal to the bundled, `private: true` core —\n * nothing per-revision is public surface, and nothing here may ever be\n * exported from `core/public`.\n */\nimport type { SdkError } from '../errors/sdkErrors';\nimport { isModernProtocolVersion } from '../shared/protocolEras';\nimport type {\n    CallToolResult,\n    ClientCapabilities,\n    CreateMessageResult,\n    CreateMessageResultWithTools,\n    Implementation,\n    LoggingLevel,\n    MessageClassification,\n    NotificationMethod,\n    NotificationTypeMap,\n    RequestMetaEnvelope,\n    RequestMethod,\n    RequestTypeMap,\n    Result,\n    ResultMetaObject,\n    ResultTypeMap\n} from '../types/types';\nimport { rev2025Codec } from './rev2025-11-25/codec';\nimport { rev2026Codec } from './rev2026-07-28/codec';\n\n/** Wire eras with distinct vocabulary. */\nexport type WireEra = '2025-11-25' | '2026-07-28';\n\n/**\n * The modern wire revision literal. Internal only — deliberately NOT a public\n * constant (G-D2-4: no public modern-version constant ships before era-aware\n * list semantics exist).\n */\nexport const MODERN_WIRE_REVISION = '2026-07-28';\n\n/**\n * Wire-only material lifted off an inbound message by the protocol layer\n * before dispatch (the V-3 seam): the reserved `_meta` envelope keys and the\n * multi-round-trip driver fields. This is the typed driver-material channel\n * of the codec contract — handlers never see it; the protocol layer surfaces\n * it via `ctx.mcpReq.envelope` / `.inputResponses` / `.requestState`, and the\n * MRTR driver (M4.1) consumes the retry fields from here.\n */\nexport interface LiftedWireMaterial {\n    // Partial: the lift surfaces whichever reserved keys the message actually\n    // carried — a peer on an adjacent revision may legally send a subset, and\n    // envelope requiredness is enforced per request at dispatch time\n    // (`checkInboundEnvelope`), not by the lift.\n    envelope?: Partial<RequestMetaEnvelope>;\n    inputResponses?: Record<string, unknown>;\n    requestState?: string;\n}\n\n/**\n * Tri-state validation outcome — the function-only contract for what the\n * schema-getter pair (`hasRequestMethod` ⇒ −32601-by-absence; `…Schema(m)\n * .parse` throw ⇒ −32602) used to encode in two pieces. Preserving the split\n * is the point: collapsing 'absent from this era's registry' into 'invalid'\n * would make the in-band fallback chain (validate → on `not-in-era` fall to\n * validateInputRequest) treat absence as failure and never fall through.\n */\nexport type ValidateOutcome<T> =\n    | { readonly ok: true; readonly value: T }\n    /**\n     * Method is spec vocabulary but absent from THIS era's registry. Callers\n     * map to −32601 (inbound) or a typed local SdkError (outbound), or fall\n     * through to the in-band validator.\n     */\n    | { readonly ok: false; readonly reason: 'not-in-era' }\n    /**\n     * Method is in this era's registry; payload failed the era-exact schema.\n     * Callers map to −32602.\n     */\n    | { readonly ok: false; readonly reason: 'invalid'; readonly message: string };\n\n/** A single self-identifying problem found while validating a per-request `_meta` envelope. */\nexport interface EnvelopeIssue {\n    /**\n     * The envelope key the problem is about: one of the reserved `_meta`\n     * keys, or a dotted path inside one.\n     */\n    readonly key: string;\n    /** A short description of what is wrong with that key (`missing`, or a validation message). */\n    readonly problem: string;\n}\n\n/** Material a Client supplies for an era to build its per-request `_meta` envelope from. */\nexport interface OutboundEnvelopeMaterial {\n    readonly protocolVersion: string;\n    readonly clientInfo: Implementation;\n    readonly clientCapabilities: ClientCapabilities;\n    readonly logLevel?: LoggingLevel;\n}\n\n/** Result decode outcomes — the raw-first discrimination (V-1) lives in `decodeResult`. */\nexport type DecodedResult =\n    | {\n          kind: 'complete';\n          /** The neutral result value: wire-only material consumed/stripped. */\n          result: Result;\n      }\n    | {\n          kind: 'input_required';\n          /**\n           * Driver-only material (never consumer-visible). The full\n           * multi-round-trip driver is M4.1 scope; this seam carries the\n           * discriminated payload to it.\n           */\n          inputRequests: Record<string, unknown>;\n          requestState?: string;\n          /** Result-level `_meta`, carried through so a manual caller sees it. */\n          _meta?: ResultMetaObject;\n      }\n    | { kind: 'invalid'; error: SdkError };\n\n/**\n * The per-era wire codec contract (design C §3, adapted to the live funnel\n * layout: the universal wire-only LIFT runs once in the protocol layer for\n * every message — spec, custom, and fallback paths alike — and codecs consume\n * the lifted material rather than re-implementing the strip per era).\n */\nexport interface WireCodec {\n    readonly era: WireEra;\n\n    /** Registry membership — the deletion story (inbound −32601 by absence; outbound typed local error). */\n    hasRequestMethod(method: string): boolean;\n    hasNotificationMethod(method: string): boolean;\n    hasInputRequestMethod(method: string): boolean;\n\n    // ── Function-only validation surface ──────────────────────────────────\n    // The validator-agnostic contract: callers never see a Zod schema, only a\n    // tri-state outcome. The method-literal overloads carry the typed parse\n    // result exactly as the (now-deprecated) *Schema getters did.\n\n    /** Era-exact request validation. `not-in-era` ≡ −32601-by-absence; `invalid` ≡ −32602. */\n    validateRequest<M extends RequestMethod>(method: M, raw: unknown): ValidateOutcome<RequestTypeMap[M]>;\n    validateRequest(method: string, raw: unknown): ValidateOutcome<unknown>;\n\n    /** Era-exact result validation (same registry as `validateRequest`). */\n    validateResult<M extends RequestMethod>(method: M, raw: unknown): ValidateOutcome<ResultTypeMap[M]>;\n    validateResult(method: string, raw: unknown): ValidateOutcome<unknown>;\n\n    /** Era-exact notification validation. */\n    validateNotification<M extends NotificationMethod>(method: M, raw: unknown): ValidateOutcome<NotificationTypeMap[M]>;\n    validateNotification(method: string, raw: unknown): ValidateOutcome<unknown>;\n\n    /**\n     * In-band (de-JSON-RPC'd) input-request validation — the embedded\n     * requests a multi-round-trip `input_required` result may carry. Always\n     * `not-in-era` on the 2025 era (elicitation/sampling/roots are wire\n     * request methods there). Does NOT grant registry membership.\n     */\n    validateInputRequest<M extends RequestMethod>(method: M, raw: unknown): ValidateOutcome<RequestTypeMap[M]>;\n    validateInputRequest(method: string, raw: unknown): ValidateOutcome<unknown>;\n\n    /** In-band bare-response validation answering an embedded input request. */\n    validateInputResponse<M extends RequestMethod>(method: M, raw: unknown): ValidateOutcome<ResultTypeMap[M]>;\n    validateInputResponse(method: string, raw: unknown): ValidateOutcome<unknown>;\n\n    /**\n     * Param-conditional `sampling/createMessage` result validation — the one\n     * spec result whose schema depends on REQUEST params (tools vs no tools).\n     * The 2025 era owns the with-tools/plain frozen schemas; the 2026 era\n     * returns `not-in-era` (sampling is in-band there — callers fall through\n     * to `validateInputResponse`).\n     */\n    samplingResultVariant(hasTools: true, raw: unknown): ValidateOutcome<CreateMessageResultWithTools>;\n    samplingResultVariant(hasTools: false, raw: unknown): ValidateOutcome<CreateMessageResult>;\n    samplingResultVariant(hasTools: boolean, raw: unknown): ValidateOutcome<CreateMessageResult | CreateMessageResultWithTools>;\n\n    /**\n     * Outbound per-request `_meta` envelope encode. Returns the keyed object\n     * to merge into `params._meta` on this era, or `undefined` when this era\n     * carries no per-request envelope (the 2025 era — legacy wire stays\n     * byte-identical).\n     */\n    outboundEnvelope(material: OutboundEnvelopeMaterial): Readonly<Record<string, unknown>> | undefined;\n\n    /**\n     * Structured envelope validation: maps a `_meta` object to\n     * self-identifying issues. The 2025 era never requires an envelope and\n     * always returns `[]`; the 2026 era owns the required-key pre-pass plus\n     * the wire-exact `RequestMetaEnvelopeSchema` parse.\n     */\n    validateEnvelopeMeta(meta: Readonly<Record<string, unknown>>): EnvelopeIssue[];\n\n    /**\n     * Per-registration `tools/call` result projection. Two independent\n     * decisions, both owned here so server-side code never re-derives them:\n     *\n     * - SEP-2106 §4.3 TextContent auto-append (EVERY era, value-shape-based):\n     *   when `structuredContent` is a non-object value (array/primitive/\n     *   `null`) and the handler authored no `type:'text'` block, append\n     *   `{type:'text', text: JSON.stringify(value)}` so consumers that read\n     *   only `content` still receive a rendering. The author opts out by\n     *   returning any `text` block themselves.\n     *\n     * - `{result:…}` wrap (2025 era only): wrap as `{result:<value>}` when the\n     *   value is non-object (the 2025 wire shape requires `structuredContent`\n     *   to be an object — a schema-less tool returning `[1,2,3]` would\n     *   otherwise ship wire-illegal bytes) OR when the tool's ADVERTISED\n     *   `outputSchema` has a non-object root (so the result matches the\n     *   `encodeResult('tools/list')` projection of the same tool). Identity on\n     *   the 2026 era — the wire shape carries the natural value directly.\n     */\n    projectCallToolResult(result: CallToolResult, advertisedOutputSchema: Readonly<Record<string, unknown>> | undefined): CallToolResult;\n\n    /**\n     * Step 1 of result decoding: RAW `resultType` handling BEFORE any schema\n     * validation (V-1's structural home). Era postures (Q1-SD3):\n     * - 2026 era: required discriminator — absent ⇒ typed error naming the\n     *   spec violation; `input_required` ⇒ driver payload; unknown ⇒ invalid,\n     *   no retry; `complete` ⇒ consume + lift.\n     * - 2025 era: `resultType` is foreign vocabulary ⇒ strip-on-lift.\n     */\n    decodeResult(method: string, raw: unknown): DecodedResult;\n\n    /**\n     * Outbound result mapping (the stamp seam). The 2025-era codec is the\n     * identity — it has NO stamp code path (the never-stamp guarantee; it\n     * never reads `serverInfo`). The 2026-era codec strictly enforces the\n     * 2026 wire shape for the known deleted-field set\n     * (`execution.taskSupport`, `capabilities.tasks` — Q1-SD3 iii), stamps\n     * `resultType`, fills the required `ttlMs`/`cacheScope` fields on\n     * cacheable results, and — when the caller supplies its identity —\n     * stamps `_meta['io.modelcontextprotocol/serverInfo']` on every result\n     * (spec PR #3002 SHOULD; a handler-authored value wins). `Server`\n     * instances pass their identity; clients and hand-constructed protocol\n     * objects pass nothing and no identity is ever invented.\n     */\n    encodeResult(method: string, result: Result, serverInfo?: Implementation): Result;\n\n    /**\n     * Outbound error-code mapping (the error half of the stamp seam). A\n     * handler-thrown `ProtocolError`'s numeric code passes through here on\n     * its way to the JSON-RPC error response, so per-era wire-code selection\n     * lives in the codec rather than in handler/funnel code. The current\n     * mapping is identical on both eras (the `-32002` resource-not-found\n     * domain code maps to `-32602` Invalid Params on the wire — the\n     * 2026-07-28 spec MUST, and what the deployed v1.x SDK already emits on\n     * earlier revisions); the seam is the structural home for any future\n     * per-era divergence. Unknown codes pass through unchanged.\n     */\n    encodeErrorCode(code: number): number;\n\n    /**\n     * @deprecated Use {@link validateEnvelopeMeta}. Inbound envelope\n     * enforcement for era-classified traffic: validates the lifted envelope\n     * material of a request. Returns an error message when the era requires\n     * an envelope and it is missing/invalid (→ −32602 at the dispatch\n     * layer); `undefined` when acceptable. The 2025 era never requires an\n     * envelope.\n     */\n    checkInboundEnvelope(material: LiftedWireMaterial): string | undefined;\n}\n\n/**\n * Era resolution, many-to-one (Q1-SD1): every modern-era revision\n * (`>= 2026-07-28`) → the 2026-era codec; every legacy revision (the five\n * `SUPPORTED_PROTOCOL_VERSIONS`) and `undefined`/unknown → the 2025-era\n * codec (the DV-13 default posture — hand-constructed instances and\n * unclassified traffic are legacy-era). This is the same era predicate the\n * rest of the SDK uses ({@link isModernProtocolVersion}); a pinned modern\n * revision other than the literal '2026-07-28' must still resolve modern.\n */\nexport function codecForVersion(version: string | undefined): WireCodec {\n    return version !== undefined && isModernProtocolVersion(version) ? rev2026Codec : rev2025Codec;\n}\n\n/**\n * The wire era an edge classification names (Q2 — produced at the\n * transport/entry edge; this layer only CONSUMES it). The dispatch funnel no\n * longer resolves a codec FROM the classification: era is instance state, and\n * a classified inbound message is VALIDATED against the instance era — a\n * mismatch is an entry/routing error, never a per-message era switch. The\n * exact `revision` wins over the coarse era flag when both are present.\n */\nexport function classifiedWireEra(classification: MessageClassification): WireEra {\n    if (classification.revision !== undefined) return codecForVersion(classification.revision).era;\n    return classification.era === 'modern' ? rev2026Codec.era : rev2025Codec.era;\n}\n\n/**\n * The derived spec-method universe: the union of every codec registry. A\n * method in this set is era-gated at dispatch and send time; a method outside\n * it is a consumer-owned extension method (era-blind, schema-explicit).\n * Derived from the registries — never hand-curated (the LEGACY_ONLY_METHODS\n * table class is exactly what registry membership replaces).\n */\nexport function isSpecRequestMethod(method: string): boolean {\n    return ALL_CODECS.some(codec => codec.hasRequestMethod(method));\n}\n\nexport function isSpecNotificationMethod(method: string): boolean {\n    return ALL_CODECS.some(codec => codec.hasNotificationMethod(method));\n}\n\n/** The names SEP-2663 re-defines for the Tasks extension on the era that removed them from core. */\nexport function isExtensionReusedRequestMethod(method: string): boolean {\n    return method === 'tasks/get' || method === 'tasks/cancel';\n}\n\nconst ALL_CODECS: readonly WireCodec[] = [rev2025Codec, rev2026Codec];\n", "/**\n * Per-request `_meta` envelope claim helpers (protocol revision 2026-07-28).\n *\n * Pure, value-returning helpers used by the inbound HTTP classifier\n * (`classifyInboundRequest`): claim detection and envelope validation with\n * self-identifying issues. The envelope schema itself stays the wire layer's\n * single source of truth (`RequestMetaEnvelopeSchema`); this module only maps\n * its outcomes into the shapes the validation ladder emits.\n *\n * Claim detection is deliberately narrow: a message claims the 2026-07-28\n * envelope mechanism if and only if the reserved protocol-version `_meta` key\n * is present in `params._meta`. Other reserved keys (client info, client\n * capabilities, log level), a bare `progressToken`, or unrelated keys under\n * the `io.modelcontextprotocol/` prefix do NOT constitute a claim on their\n * own — but once the claim key is present, a malformed envelope is a\n * validation error, never a silent fall back to legacy handling.\n *\n * The wire-exact envelope schema, the required-key set, and the per-key issue\n * mapping live in the wire layer (the 2026-era codec's `validateEnvelopeMeta`).\n * This module never reaches into a per-revision wire module directly.\n */\nimport { PROTOCOL_VERSION_META_KEY } from '../types/constants';\nimport type { EnvelopeIssue } from '../wire/codec';\nimport { codecForVersion, MODERN_WIRE_REVISION } from '../wire/codec';\n\n// Re-export from the wire layer (the canonical home): the issue shape is part\n// of the function-only WireCodec contract. Imported above for the local return\n// type, so the bare re-export form is used.\n// eslint-disable-next-line unicorn/prefer-export-from\nexport type { EnvelopeIssue };\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n    return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\n/** The `_meta` object of a message's params, when present. */\nexport function requestMetaOf(params: unknown): Record<string, unknown> | undefined {\n    if (!isPlainObject(params)) return undefined;\n    const meta = params['_meta'];\n    return isPlainObject(meta) ? meta : undefined;\n}\n\n/**\n * Whether a message's params carry the per-request envelope claim: the\n * reserved protocol-version `_meta` key is present (regardless of whether the\n * rest of the envelope is valid — validation is a separate, later step).\n */\nexport function hasEnvelopeClaim(params: unknown): boolean {\n    const meta = requestMetaOf(params);\n    return meta !== undefined && PROTOCOL_VERSION_META_KEY in meta;\n}\n\n/**\n * The protocol version named by a message's envelope claim, when the claim is\n * present and carries a string value. A present claim with a non-string value\n * still counts as a claim ({@linkcode hasEnvelopeClaim}); it surfaces as a\n * validation issue instead of a version.\n */\nexport function envelopeClaimVersion(params: unknown): string | undefined {\n    const meta = requestMetaOf(params);\n    const value = meta?.[PROTOCOL_VERSION_META_KEY];\n    return typeof value === 'string' ? value : undefined;\n}\n\n/**\n * Validates a request's `_meta` object as a 2026-07-28 per-request envelope\n * and reports problems as self-identifying issues (which key, what problem).\n *\n * Returns an empty array when the envelope is valid. Missing required keys are\n * reported first (as `problem: 'missing'`), then schema violations inside\n * present keys, in a stable order.\n */\nexport function validateEnvelopeMeta(meta: Record<string, unknown>): EnvelopeIssue[] {\n    // Delegate to the era codec: the required-key pre-pass and the wire-exact\n    // `RequestMetaEnvelopeSchema` parse live in `wire/rev2026-07-28/` — this\n    // module never reaches into per-revision wire vocabulary.\n    return codecForVersion(MODERN_WIRE_REVISION).validateEnvelopeMeta(meta);\n}\n", "// Moved: the spec Zod schemas now live in @modelcontextprotocol/core (packages/core/src/schemas.ts).\n// This module re-exports them one-to-one so every existing import path keeps working; a name\n// added to core/src/schemas.ts must be added here too (specTypeSchema.ts imports through this\n// module, so a missing name fails typecheck loudly).\n//\n// Add new schemas in packages/core/src/schemas.ts, never here — this file only forwards, and\n// core-internal's schemaShims test enforces that it stays free of zod imports and definitions.\nexport {\n    AnnotationsSchema,\n    AudioContentSchema,\n    BaseMetadataSchema,\n    BaseRequestParamsSchema,\n    BlobResourceContentsSchema,\n    BooleanSchemaSchema,\n    CallToolRequestParamsSchema,\n    CallToolRequestSchema,\n    CallToolResultSchema,\n    CancelledNotificationParamsSchema,\n    CancelledNotificationSchema,\n    CancelTaskRequestSchema,\n    CancelTaskResultSchema,\n    ClientCapabilitiesSchema,\n    ClientNotificationSchema,\n    ClientRequestSchema,\n    ClientResultSchema,\n    ClientTasksCapabilitySchema,\n    CompatibilityCallToolResultSchema,\n    CompleteRequestParamsSchema,\n    CompleteRequestSchema,\n    CompleteResultSchema,\n    ContentBlockSchema,\n    CreateMessageRequestParamsSchema,\n    CreateMessageRequestSchema,\n    CreateMessageResultSchema,\n    CreateMessageResultWithToolsSchema,\n    CreateTaskResultSchema,\n    CursorSchema,\n    DiscoverRequestSchema,\n    DiscoverResultSchema,\n    ElicitationCompleteNotificationParamsSchema,\n    ElicitationCompleteNotificationSchema,\n    ElicitRequestFormParamsSchema,\n    ElicitRequestParamsSchema,\n    ElicitRequestSchema,\n    ElicitRequestURLParamsSchema,\n    ElicitResultSchema,\n    EmbeddedResourceSchema,\n    EmptyResultSchema,\n    EnumSchemaSchema,\n    GetPromptRequestParamsSchema,\n    GetPromptRequestSchema,\n    GetPromptResultSchema,\n    GetTaskPayloadRequestSchema,\n    GetTaskPayloadResultSchema,\n    GetTaskRequestSchema,\n    GetTaskResultSchema,\n    IconSchema,\n    IconsSchema,\n    ImageContentSchema,\n    ImplementationSchema,\n    InitializedNotificationSchema,\n    InitializeRequestParamsSchema,\n    InitializeRequestSchema,\n    InitializeResultSchema,\n    JSONArraySchema,\n    JSONObjectSchema,\n    JSONRPCErrorResponseSchema,\n    JSONRPCMessageSchema,\n    JSONRPCNotificationSchema,\n    JSONRPCRequestSchema,\n    JSONRPCResponseSchema,\n    JSONRPCResultResponseSchema,\n    JSONValueSchema,\n    LegacyTitledEnumSchemaSchema,\n    ListChangedOptionsBaseSchema,\n    ListPromptsRequestSchema,\n    ListPromptsResultSchema,\n    ListResourcesRequestSchema,\n    ListResourcesResultSchema,\n    ListResourceTemplatesRequestSchema,\n    ListResourceTemplatesResultSchema,\n    ListRootsRequestSchema,\n    ListRootsResultSchema,\n    ListTasksRequestSchema,\n    ListTasksResultSchema,\n    ListToolsRequestSchema,\n    ListToolsResultSchema,\n    LoggingLevelSchema,\n    LoggingMessageNotificationParamsSchema,\n    LoggingMessageNotificationSchema,\n    ModelHintSchema,\n    ModelPreferencesSchema,\n    MultiSelectEnumSchemaSchema,\n    NotificationSchema,\n    NotificationsParamsSchema,\n    NumberSchemaSchema,\n    PaginatedRequestParamsSchema,\n    PaginatedRequestSchema,\n    PaginatedResultSchema,\n    PingRequestSchema,\n    PrimitiveSchemaDefinitionSchema,\n    ProgressNotificationParamsSchema,\n    ProgressNotificationSchema,\n    ProgressSchema,\n    ProgressTokenSchema,\n    PromptArgumentSchema,\n    PromptListChangedNotificationSchema,\n    PromptMessageSchema,\n    PromptReferenceSchema,\n    PromptSchema,\n    ReadResourceRequestParamsSchema,\n    ReadResourceRequestSchema,\n    ReadResourceResultSchema,\n    RelatedTaskMetadataSchema,\n    RequestIdSchema,\n    RequestMetaSchema,\n    RequestSchema,\n    ResourceContentsSchema,\n    ResourceLinkSchema,\n    ResourceListChangedNotificationSchema,\n    ResourceRequestParamsSchema,\n    ResourceSchema,\n    ResourceTemplateReferenceSchema,\n    ResourceTemplateSchema,\n    ResourceUpdatedNotificationParamsSchema,\n    ResourceUpdatedNotificationSchema,\n    ResultMetaObjectSchema,\n    ResultSchema,\n    RoleSchema,\n    RootSchema,\n    RootsListChangedNotificationSchema,\n    SamplingContentSchema,\n    SamplingMessageContentBlockSchema,\n    SamplingMessageSchema,\n    ServerCapabilitiesSchema,\n    ServerNotificationSchema,\n    ServerRequestSchema,\n    ServerResultSchema,\n    ServerTasksCapabilitySchema,\n    SetLevelRequestParamsSchema,\n    SetLevelRequestSchema,\n    SingleSelectEnumSchemaSchema,\n    StringSchemaSchema,\n    SubscribeRequestParamsSchema,\n    SubscribeRequestSchema,\n    SubscriptionFilterSchema,\n    SubscriptionsAcknowledgedNotificationParamsSchema,\n    SubscriptionsAcknowledgedNotificationSchema,\n    SubscriptionsListenRequestParamsSchema,\n    SubscriptionsListenRequestSchema,\n    SubscriptionsListenResultMetaSchema,\n    SubscriptionsListenResultSchema,\n    TaskAugmentedRequestParamsSchema,\n    TaskCreationParamsSchema,\n    TaskMetadataSchema,\n    TaskSchema,\n    TaskStatusNotificationParamsSchema,\n    TaskStatusNotificationSchema,\n    TaskStatusSchema,\n    TextContentSchema,\n    TextResourceContentsSchema,\n    TitledMultiSelectEnumSchemaSchema,\n    TitledSingleSelectEnumSchemaSchema,\n    ToolAnnotationsSchema,\n    ToolChoiceSchema,\n    ToolExecutionSchema,\n    ToolListChangedNotificationSchema,\n    ToolResultContentSchema,\n    ToolSchema,\n    ToolUseContentSchema,\n    UnsubscribeRequestParamsSchema,\n    UnsubscribeRequestSchema,\n    UntitledMultiSelectEnumSchemaSchema,\n    UntitledSingleSelectEnumSchemaSchema\n} from '@modelcontextprotocol/core/internal';\n", "import {\n    CallToolResultSchema,\n    InitializedNotificationSchema,\n    InitializeRequestSchema,\n    JSONRPCErrorResponseSchema,\n    JSONRPCMessageSchema,\n    JSONRPCNotificationSchema,\n    JSONRPCRequestSchema,\n    JSONRPCResponseSchema,\n    JSONRPCResultResponseSchema,\n    TaskAugmentedRequestParamsSchema\n} from './schemas';\nimport type {\n    CallToolResult,\n    CompleteRequest,\n    CompleteRequestPrompt,\n    CompleteRequestResourceTemplate,\n    InitializedNotification,\n    InitializeRequest,\n    InputRequiredResult,\n    JSONRPCErrorResponse,\n    JSONRPCMessage,\n    JSONRPCNotification,\n    JSONRPCRequest,\n    JSONRPCResponse,\n    JSONRPCResultResponse,\n    TaskAugmentedRequestParams\n} from './types';\n\n/**\n * Validates and parses an unknown value as a JSON-RPC message.\n *\n * Use this to validate incoming messages in custom transport implementations.\n * Throws if the value does not conform to the JSON-RPC message schema.\n *\n * @param value - The value to validate (typically a parsed JSON object).\n * @returns The validated {@linkcode JSONRPCMessage}.\n * @throws If validation fails.\n */\nexport function parseJSONRPCMessage(value: unknown): JSONRPCMessage {\n    return JSONRPCMessageSchema.parse(value);\n}\n\nexport const isJSONRPCRequest = (value: unknown): value is JSONRPCRequest => JSONRPCRequestSchema.safeParse(value).success;\n\nexport const isJSONRPCNotification = (value: unknown): value is JSONRPCNotification => JSONRPCNotificationSchema.safeParse(value).success;\n\n/**\n * Checks if a value is a valid {@linkcode JSONRPCResultResponse}.\n * @param value - The value to check.\n *\n * @returns True if the value is a valid {@linkcode JSONRPCResultResponse}, false otherwise.\n */\nexport const isJSONRPCResultResponse = (value: unknown): value is JSONRPCResultResponse =>\n    JSONRPCResultResponseSchema.safeParse(value).success;\n\n/**\n * Checks if a value is a valid {@linkcode JSONRPCErrorResponse}.\n * @param value - The value to check.\n *\n * @returns True if the value is a valid {@linkcode JSONRPCErrorResponse}, false otherwise.\n */\nexport const isJSONRPCErrorResponse = (value: unknown): value is JSONRPCErrorResponse =>\n    JSONRPCErrorResponseSchema.safeParse(value).success;\n\n/**\n * Checks if a value is a valid {@linkcode JSONRPCResponse} (either a result or error response).\n * @param value - The value to check.\n *\n * @returns True if the value is a valid {@linkcode JSONRPCResponse}, false otherwise.\n */\nexport const isJSONRPCResponse = (value: unknown): value is JSONRPCResponse => JSONRPCResponseSchema.safeParse(value).success;\n\n/**\n * Checks if a value is a valid {@linkcode CallToolResult}.\n *\n * This is a consumer-side VALUE check against the neutral model, not a wire\n * validator: a raw wire object that additionally carries wire-only members\n * (e.g. `resultType`) still passes through the loose index signature. Use a\n * transport-level parse to validate raw wire traffic.\n *\n * @param value - The value to check.\n *\n * @returns True if the value is a valid {@linkcode CallToolResult}, false otherwise.\n */\nexport const isCallToolResult = (value: unknown): value is CallToolResult => {\n    // content === undefined covers an explicit undefined key too: the schema's\n    // .default([]) would parse it, but the narrowed type requires the array.\n    if (typeof value !== 'object' || value === null || (value as { content?: unknown }).content === undefined) return false;\n    return CallToolResultSchema.safeParse(value).success;\n};\n\n/**\n * Checks whether a value is an input-required result (protocol revision\n * 2026-07-28): the multi-round-trip return shape discriminated by\n * `resultType: 'input_required'`.\n *\n * This is a discriminator check, not a full validator — the at-least-one rule\n * (`inputRequests` or `requestState`) is enforced by the `inputRequired()`\n * builder and re-checked by the server seam for hand-built values.\n *\n * @param value - The value to check.\n * @returns True if the value carries the `input_required` discriminator.\n */\nexport const isInputRequiredResult = (value: unknown): value is InputRequiredResult =>\n    typeof value === 'object' &&\n    value !== null &&\n    !Array.isArray(value) &&\n    (value as { resultType?: unknown }).resultType === 'input_required';\n\n/**\n * Checks if a value is a valid {@linkcode TaskAugmentedRequestParams}.\n * @param value - The value to check.\n *\n * @returns True if the value is a valid {@linkcode TaskAugmentedRequestParams}, false otherwise.\n *\n * @deprecated Recognizes 2025-11-25 task wire vocabulary, which has no SDK\n * runtime; kept importable for interoperability only.\n */\nexport const isTaskAugmentedRequestParams = (value: unknown): value is TaskAugmentedRequestParams =>\n    TaskAugmentedRequestParamsSchema.safeParse(value).success;\n\nexport const isInitializeRequest = (value: unknown): value is InitializeRequest => InitializeRequestSchema.safeParse(value).success;\n\nexport const isInitializedNotification = (value: unknown): value is InitializedNotification =>\n    InitializedNotificationSchema.safeParse(value).success;\n\nexport function assertCompleteRequestPrompt(request: CompleteRequest): asserts request is CompleteRequestPrompt {\n    if (request.params.ref.type !== 'ref/prompt') {\n        throw new TypeError(`Expected CompleteRequestPrompt, but got ${request.params.ref.type}`);\n    }\n    void (request as CompleteRequestPrompt);\n}\n\nexport function assertCompleteRequestResourceTemplate(request: CompleteRequest): asserts request is CompleteRequestResourceTemplate {\n    if (request.params.ref.type !== 'ref/resource') {\n        throw new TypeError(`Expected CompleteRequestResourceTemplate, but got ${request.params.ref.type}`);\n    }\n    void (request as CompleteRequestResourceTemplate);\n}\n", "/**\n * SEP-2243 `Mcp-Param-*` header codec (protocol revision 2026-07-28).\n *\n * Pure functions for the custom-header half of SEP-2243: scanning a tool's\n * `inputSchema` for `x-mcp-header` declarations, encoding argument values into\n * `Mcp-Param-{Name}` HTTP headers (with the `=?base64?…?=` sentinel for values\n * that cannot be safely represented as plain ASCII field values), decoding\n * those headers, and validating that the headers a request carries match the\n * argument values in its body.\n *\n * The standard-header half (`MCP-Protocol-Version`, `Mcp-Method`, `Mcp-Name`)\n * lives with the inbound classifier — this module is the custom-header half\n * only, and it consumes the same `-32020` (`HeaderMismatch`) emission shape the\n * classifier established for header/body cross-check failures.\n *\n * Spec text at the implementation's spec pin:\n * - draft/basic/transports/streamable-http.mdx § \"Custom Headers from Tool Parameters\"\n *   (constraints, value encoding, the 5-step client algorithm, the\n *   server-behavior table, the `400` + `-32020` rejection)\n * - draft/server/tools.mdx § \"x-mcp-header\" (the schema-extension property and\n *   its constraints)\n */\nimport type { InboundLadderRejection } from './inboundClassification';\nimport { HEADER_MISMATCH_ERROR_CODE } from './inboundClassification';\n\n/* ------------------------------------------------------------------------ *\n * Declaration scan\n * ------------------------------------------------------------------------ */\n\n/** The fixed prefix every custom-parameter header carries. */\nexport const MCP_PARAM_HEADER_PREFIX = 'Mcp-Param-';\n\n/** The schema-extension property name a tool's `inputSchema` carries. */\nexport const X_MCP_HEADER_KEY = 'x-mcp-header';\n\n/**\n * One `x-mcp-header` declaration found inside a tool's `inputSchema`.\n *\n * `path` is the property path from the arguments root (the spec permits\n * declarations at any nesting depth under `properties`); `headerName` is the\n * `{Name}` portion as declared (case preserved for emission; comparison is\n * case-insensitive); `type` is the JSON Schema `type` of the declaring\n * property.\n */\nexport interface XMcpHeaderDeclaration {\n    path: readonly string[];\n    headerName: string;\n    type: string;\n}\n\n/** The result of scanning a tool's `inputSchema` for `x-mcp-header` declarations. */\nexport type XMcpHeaderScanResult = { valid: true; declarations: readonly XMcpHeaderDeclaration[] } | { valid: false; reason: string };\n\n/**\n * RFC 9110 §5.1 `token` syntax (`1*tchar`). Rejects empty, space, control\n * characters (including CR/LF), and the listed delimiters.\n */\nconst RFC9110_TOKEN = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\n\n/**\n * JSON Schema `type` values the spec admits on an `x-mcp-header` property.\n *\n * The spec text names `integer`, `string`, `boolean` and explicitly excludes\n * `number`. The published conformance referee at the pinned release ships its\n * `http-custom-headers` scenario with two `type: \"number\"` `x-mcp-header`\n * parameters and expects the client to mirror them, so `number` is accepted\n * here so that the conformance gate passes; the discrepancy is tracked\n * upstream. Everything else (`object`, `array`, `null`, absent) is rejected.\n */\nconst PERMITTED_X_MCP_HEADER_TYPES: ReadonlySet<string> = new Set(['string', 'integer', 'boolean', 'number']);\n\n/**\n * Scan a tool's JSON-serialized `inputSchema` for `x-mcp-header` declarations\n * and validate every constraint the spec places on them. Returns either the\n * collected declarations (possibly empty) or the first violated constraint.\n *\n * The walk descends through `properties` at any depth (the spec's \"any nesting\n * depth\" clause). The static-reachability MUST is enforced as a structural\n * sweep: every position the chain MUST NOT pass through (`items`/\n * `additionalProperties`, `oneOf`/`anyOf`/`allOf`/`not`, `if`/`then`/`else`,\n * `$defs`, `$ref` targets within `$defs`) is visited too, and an\n * `x-mcp-header` found anywhere on that path invalidates the schema — \"an\n * annotation anywhere else makes the tool definition invalid\".\n */\nexport function scanXMcpHeaderDeclarations(inputSchema: unknown): XMcpHeaderScanResult {\n    const declarations: XMcpHeaderDeclaration[] = [];\n    const seenLower = new Map<string, string>();\n\n    const visit = (node: unknown, path: readonly string[], reachable: boolean): string | undefined => {\n        if (node === null || typeof node !== 'object') return undefined;\n        const schema = node as Record<string, unknown>;\n\n        if (X_MCP_HEADER_KEY in schema) {\n            if (!reachable || path.length === 0) {\n                return `${pathName(path)}: x-mcp-header is only permitted on properties statically reachable via a chain of 'properties' keys (not under items, additionalProperties, oneOf/anyOf/allOf/not, if/then/else, or $ref)`;\n            }\n            const raw = schema[X_MCP_HEADER_KEY];\n            if (typeof raw !== 'string' || raw.length === 0) {\n                return `${pathName(path)}: x-mcp-header MUST be a non-empty string`;\n            }\n            if (!RFC9110_TOKEN.test(raw)) {\n                return `${pathName(path)}: x-mcp-header '${raw}' is not a valid RFC 9110 token (no spaces, control characters or HTTP delimiters)`;\n            }\n            const type = typeof schema.type === 'string' ? schema.type : undefined;\n            if (type === undefined || !PERMITTED_X_MCP_HEADER_TYPES.has(type)) {\n                return `${pathName(path)}: x-mcp-header is only permitted on primitive-typed properties (string, integer, boolean); got ${type ?? '<none>'}`;\n            }\n            const lower = raw.toLowerCase();\n            const prior = seenLower.get(lower);\n            if (prior !== undefined) {\n                return `x-mcp-header '${raw}' is not case-insensitively unique (also declared as '${prior}')`;\n            }\n            seenLower.set(lower, raw);\n            declarations.push({ path, headerName: raw, type });\n        }\n\n        const properties = schema.properties;\n        if (properties !== null && typeof properties === 'object') {\n            for (const [key, child] of Object.entries(properties as Record<string, unknown>)) {\n                const fault = visit(child, [...path, key], reachable);\n                if (fault !== undefined) return fault;\n            }\n        }\n        // Static-reachability sweep: descend the keywords the chain MUST NOT\n        // pass through with `reachable: false` so an annotation under any of\n        // them is reported (rather than silently ignored). `$defs` covers\n        // `$ref`-within-`$defs` — chasing arbitrary `$ref` URIs is out of scope.\n        for (const k of NON_REACHABLE_SUBSCHEMA_KEYWORDS) {\n            const sub = schema[k];\n            if (sub === undefined) continue;\n            const branches: unknown[] = Array.isArray(sub)\n                ? sub\n                : sub !== null && typeof sub === 'object' && OBJECT_VALUED_SUBSCHEMA_KEYWORDS.has(k)\n                  ? Object.values(sub as Record<string, unknown>)\n                  : [sub];\n            for (const branch of branches) {\n                const fault = visit(branch, [...path, `<${k}>`], false);\n                if (fault !== undefined) return fault;\n            }\n        }\n        return undefined;\n    };\n\n    const fault = visit(inputSchema, [], true);\n    return fault === undefined ? { valid: true, declarations } : { valid: false, reason: fault };\n}\n\n/**\n * JSON Schema keywords whose subschemas the SEP-2243 static-reachability\n * constraint excludes from the `properties`-only chain. An `x-mcp-header`\n * found under any of these invalidates the tool definition.\n */\nconst NON_REACHABLE_SUBSCHEMA_KEYWORDS = [\n    'items',\n    'prefixItems',\n    'contains',\n    'additionalProperties',\n    'unevaluatedProperties',\n    'unevaluatedItems',\n    'propertyNames',\n    'patternProperties',\n    'dependentSchemas',\n    'oneOf',\n    'anyOf',\n    'allOf',\n    'not',\n    'if',\n    'then',\n    'else',\n    '$defs',\n    'definitions'\n] as const;\n\n/**\n * Subschema-carrying keywords whose value is a `name → subschema` object\n * (not a single subschema or array of subschemas). The visit branches over\n * `Object.values()` for these.\n */\nconst OBJECT_VALUED_SUBSCHEMA_KEYWORDS: ReadonlySet<string> = new Set(['patternProperties', 'dependentSchemas', '$defs', 'definitions']);\n\nfunction pathName(path: readonly string[]): string {\n    return path.length === 0 ? '<root>' : path.join('.');\n}\n\n/* ------------------------------------------------------------------------ *\n * Value encoding\n * ------------------------------------------------------------------------ */\n\nconst BASE64_SENTINEL_PREFIX = '=?base64?';\nconst BASE64_SENTINEL_SUFFIX = '?=';\n// RFC 4648 §4, padding required (the spec's encoding-examples table and the\n// conformance referee's invalid-padding cell both require canonical padding).\nconst BASE64_CANONICAL = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;\n// Strict decimal — gates the numeric comparison in `validateMcpParamHeaders`\n// so `Number()` never sees the looser forms it would otherwise accept\n// (`'0x1a'`, `' 42 '`, `'1e3'`).\nconst CANONICAL_DECIMAL = /^-?\\d+(\\.\\d+)?$/;\n\n/**\n * Convert a primitive argument value to its string representation per the\n * spec's type-conversion rules: strings pass through, integers and numbers\n * become their decimal string, booleans become lowercase `'true'` / `'false'`.\n * Non-finite numbers and integers outside the safe range are refused (the\n * caller treats `undefined` as \"do not emit a header for this value\").\n */\nexport function mcpParamPrimitiveToString(value: unknown): string | undefined {\n    if (typeof value === 'string') return value;\n    if (typeof value === 'boolean') return value ? 'true' : 'false';\n    if (typeof value === 'number') {\n        if (!Number.isFinite(value)) return undefined;\n        if (Number.isInteger(value) && !Number.isSafeInteger(value)) return undefined;\n        return String(value);\n    }\n    return undefined;\n}\n\n/**\n * `true` when `s` cannot be safely represented as a plain ASCII HTTP field\n * value per RFC 9110 §5.5: it contains a byte outside `0x20–0x7E` / `0x09`, it\n * has leading or trailing whitespace (which field parsing strips), or it\n * already matches the Base64 sentinel pattern (the spec's \"to avoid ambiguity\"\n * rule).\n */\nfunction needsBase64(s: string): boolean {\n    if (s.length === 0) return true;\n    if (s.startsWith(BASE64_SENTINEL_PREFIX) && s.endsWith(BASE64_SENTINEL_SUFFIX)) return true;\n    if (s !== s.trim()) return true;\n    for (let i = 0; i < s.length; i++) {\n        const c = s.codePointAt(i)!;\n        // Visible ASCII 0x21–0x7E, plus space 0x20 and horizontal tab 0x09; a\n        // tab is only safe when it is interior whitespace (the trim() check\n        // above already covered leading/trailing).\n        if (c === 0x09 || (c >= 0x20 && c <= 0x7e)) continue;\n        return true;\n    }\n    return false;\n}\n\nfunction utf8ToBase64(s: string): string {\n    const bytes = new TextEncoder().encode(s);\n    let bin = '';\n    for (const b of bytes) bin += String.fromCodePoint(b);\n    return btoa(bin);\n}\n\nfunction base64ToUtf8(b64: string): string {\n    const bin = atob(b64);\n    const bytes = new Uint8Array(bin.length);\n    for (let i = 0; i < bin.length; i++) bytes[i] = bin.codePointAt(i)!;\n    return new TextDecoder('utf-8', { fatal: true }).decode(bytes);\n}\n\n/**\n * Encode a string value as an HTTP field value per the spec's value-encoding\n * rules: a value that is already a safe plain-ASCII field value is passed\n * through unchanged; anything else is wrapped as `=?base64?{b64-of-utf8}?=`.\n */\nexport function encodeMcpParamValue(value: string): string {\n    return needsBase64(value) ? `${BASE64_SENTINEL_PREFIX}${utf8ToBase64(value)}${BASE64_SENTINEL_SUFFIX}` : value;\n}\n\n/**\n * Decode an `Mcp-Param-*` header value: when it carries the Base64 sentinel,\n * the payload is decoded as UTF-8; otherwise the value is returned as-is.\n * Returns `undefined` when the sentinel is present but the payload is not\n * canonical Base64 (or not valid UTF-8) — the spec requires servers to reject\n * such values.\n */\nexport function decodeMcpParamValue(value: string): string | undefined {\n    if (!(value.startsWith(BASE64_SENTINEL_PREFIX) && value.endsWith(BASE64_SENTINEL_SUFFIX))) {\n        return value;\n    }\n    const b64 = value.slice(BASE64_SENTINEL_PREFIX.length, value.length - BASE64_SENTINEL_SUFFIX.length);\n    if (!BASE64_CANONICAL.test(b64)) return undefined;\n    try {\n        return base64ToUtf8(b64);\n    } catch {\n        return undefined;\n    }\n}\n\n/* ------------------------------------------------------------------------ *\n * Client-side header construction (the 5-step MUST algorithm, steps 3–5)\n * ------------------------------------------------------------------------ */\n\nfunction valueAtPath(root: unknown, path: readonly string[]): unknown {\n    let node: unknown = root;\n    for (const key of path) {\n        if (node === null || typeof node !== 'object') return undefined;\n        node = (node as Record<string, unknown>)[key];\n    }\n    return node;\n}\n\n/**\n * Build the `Mcp-Param-{Name}` headers for one `tools/call` from a scan of the\n * tool's `inputSchema` and the call's `arguments`. A declaration whose value is\n * `null` or absent in `arguments` is omitted (the spec's \"client MUST omit the\n * header\" rows); a value that is not a primitive of the declared kind is\n * omitted rather than emitted malformed.\n */\nexport function buildMcpParamHeaders(\n    declarations: readonly XMcpHeaderDeclaration[],\n    args: Record<string, unknown> | undefined\n): Record<string, string> {\n    const out: Record<string, string> = {};\n    for (const decl of declarations) {\n        const raw = valueAtPath(args, decl.path);\n        if (raw === undefined || raw === null) continue;\n        const stringValue = mcpParamPrimitiveToString(raw);\n        if (stringValue === undefined) continue;\n        out[`${MCP_PARAM_HEADER_PREFIX}${decl.headerName}`] = encodeMcpParamValue(stringValue);\n    }\n    return out;\n}\n\n/* ------------------------------------------------------------------------ *\n * Server-side validation\n * ------------------------------------------------------------------------ */\n\n/**\n * The header/body comparison the server performs at tool-resolution time.\n *\n * For each `x-mcp-header` declaration on the named tool: when the body\n * `arguments` carries a value, the matching `Mcp-Param-{Name}` header MUST be\n * present and decode to an equal value; when the body value is `null` or\n * absent the server MUST NOT expect the header (a present header is ignored).\n * A sentinel-carrying header whose payload is not canonical Base64 / valid\n * UTF-8 is rejected as invalid characters.\n *\n * Integer-typed declarations are compared numerically (the spec's SHOULD —\n * `42.0` and `42` are equal); everything else is compared as decoded strings.\n *\n * Returns `undefined` when every check passes, or an\n * {@linkcode InboundLadderRejection} carrying the same `-32020`\n * (`HeaderMismatch`) shape the inbound classifier emits for the\n * standard-header cross-checks — `400 Bad Request` with the disagreeing pair\n * in `data.mismatch`.\n */\nexport function validateMcpParamHeaders(\n    declarations: readonly XMcpHeaderDeclaration[],\n    args: Record<string, unknown> | undefined,\n    headers: Headers\n): InboundLadderRejection | undefined {\n    for (const decl of declarations) {\n        const headerKey = `${MCP_PARAM_HEADER_PREFIX}${decl.headerName}`;\n        const headerValue = headers.get(headerKey);\n        const bodyRaw = valueAtPath(args, decl.path);\n\n        if (bodyRaw === undefined || bodyRaw === null) {\n            // Server MUST NOT expect the header for a null/absent value.\n            continue;\n        }\n        const bodyString = mcpParamPrimitiveToString(bodyRaw);\n        if (bodyString === undefined) {\n            // Body carries a non-primitive where the schema declares one;\n            // params validation owns that fault. Skip the header check.\n            continue;\n        }\n        if (headerValue === null) {\n            return paramHeaderMismatchRejection(\n                'param-header-missing',\n                headerKey,\n                `the body carries ${pathName(decl.path)}=${JSON.stringify(bodyRaw)} but the ${headerKey} header is absent`\n            );\n        }\n        const decoded = decodeMcpParamValue(headerValue);\n        if (decoded === undefined) {\n            return paramHeaderMismatchRejection(\n                'param-header-invalid-encoding',\n                headerKey,\n                `the ${headerKey} header carries an invalid Base64 sentinel value`\n            );\n        }\n        // Integer/number-typed declarations compare numerically (the spec's\n        // SHOULD — `42.0` and `42` are equal). The strict-decimal gate is\n        // applied to the *header* side only (so `'0x1a'`, `' 42 '`, `'1e3'`\n        // etc. never coerce); the body side is gated on being an actual JS\n        // number — `String(0.0000001) === '1e-7'` would fail the regex even\n        // though the value is perfectly canonical. A non-numeric body\n        // primitive (e.g. `'abc'` where the schema declares `integer`) is a\n        // body-vs-schema fault that params validation owns; fall back to\n        // string comparison and let dispatch emit `-32602` instead so an\n        // identical non-numeric pair never reports a mismatch.\n        const numericComparable =\n            (decl.type === 'integer' || decl.type === 'number') && CANONICAL_DECIMAL.test(decoded) && typeof bodyRaw === 'number';\n        const equal = numericComparable ? Number(decoded) === bodyRaw : decoded === bodyString;\n        if (!equal) {\n            return paramHeaderMismatchRejection(\n                'param-header-mismatch',\n                headerKey,\n                `the ${headerKey} header decodes to ${JSON.stringify(decoded)} but the body carries ${pathName(decl.path)}=${JSON.stringify(bodyRaw)}`\n            );\n        }\n    }\n    return undefined;\n}\n\n/**\n * Build the `-32020` (`HeaderMismatch`) rejection for an `Mcp-Param-*`\n * disagreement. Same shape as the inbound classifier's standard-header\n * cross-check mismatch (HTTP `400`, `data.mismatch` naming the disagreeing\n * pair, `settled: true`); only the rung differs because this check runs at the\n * pre-dispatch step against a known tool's schema rather than at the edge.\n */\nexport function paramHeaderMismatchRejection(cell: string, header: string, body: string): InboundLadderRejection {\n    return {\n        kind: 'reject',\n        rung: 'param-header-validation',\n        cell,\n        httpStatus: 400,\n        code: HEADER_MISMATCH_ERROR_CODE,\n        message: `Bad Request: the request headers and body disagree: ${body}`,\n        data: { mismatch: { header, body } },\n        settled: true\n    };\n}\n", "/**\n * Inbound HTTP request classification and the inbound validation ladder\n * (protocol revision 2026-07-28).\n *\n * `classifyInboundRequest` is the body-primary era predicate for an HTTP\n * entry that serves both protocol eras on one endpoint. It is evaluated\n * exactly once, at the entry boundary, on the already-parsed request body:\n *\n * - `initialize` is a legacy-era request by definition (the modern era has no\n *   `initialize` handshake) — unless it carries a valid envelope claim naming\n *   a modern revision, in which case the claim wins and the request is\n *   classified like any other enveloped request (the modern era then answers\n *   it with method-not-found, exactly like every other method it does not\n *   define).\n * - A request whose `params._meta` carries the reserved protocol-version key\n *   claims the per-request envelope mechanism and classifies into the era the\n *   named revision belongs to (a malformed envelope behind a present claim is\n *   a validation error, never a silent fall back to legacy handling).\n * - A request without a claim is legacy-era traffic.\n * - The `MCP-Protocol-Version` header is a cross-check only *for\n *   classification*: it never upgrades or downgrades a body-derived\n *   classification, and a disagreement between header and body is an explicit\n *   ladder outcome. Its absence likewise never changes the era — but the spec\n *   requires the header on every modern *request* POST, so a\n *   modern-classified request that omits it is refused one rung later, by\n *   {@linkcode validateStandardRequestHeaders}, not here. Notification POSTs\n *   are exempt (see the next bullet), and that rung enforces presence on\n *   requests only.\n * - Notifications carry no envelope claim of their own under the current\n *   spec, so for notification POSTs without a body claim the modern header is\n *   determinative; the `Mcp-Method` header is validated against the body when\n *   the message classifies modern and is never enforced on legacy traffic.\n *   A notification that does carry a claim is treated body-primary like a\n *   request, and a malformed claim is rejected the same way a request's\n *   malformed claim is — never silently resolved against the header.\n *   The notification-POST header cross-checks here are an SDK-defensive\n *   posture, not a spec requirement: the spec leaves header rules for posted\n *   notifications undefined (core client notifications do not occur over\n *   Streamable HTTP); applying the request rules symmetrically is what an\n *   ecosystem custom-notification POST expects, and the −32020 cells stay\n *   passing for them.\n * - `GET`/`DELETE` (and any other non-`POST` method) are body-less 2025-era\n *   session operations: the modern era is `POST`-only, so they are routed to\n *   legacy serving when it is configured and rejected otherwise.\n * - Array (batch) bodies are classified element-wise: an array containing a\n *   modern-claiming or invalid element is rejected, an all-legacy array is\n *   legacy traffic unchanged, and a single-element array is still an array.\n *\n * The classifier returns plain values (it never throws and never touches a\n * transport): a routing outcome (`legacy`/`modern`) or a ladder rejection\n * carrying the JSON-RPC error to emit and the HTTP status to emit it with.\n * Legacy routing outcomes deliberately carry NO `MessageClassification` —\n * legacy and hand-wired traffic is never classified, which keeps its\n * dispatch behavior byte-identical to today's.\n *\n * Error codes for the modern-path rejection cells follow the published\n * conformance suite (and the spec text it asserts):\n *\n * - A header/body cross-check mismatch (the `MCP-Protocol-Version` header\n *   disagreeing with the body, or the `Mcp-Method` header disagreeing with the\n *   body method) is rejected with `-32020` (`HeaderMismatch`) on HTTP 400.\n * - A request whose protocol-version header names a modern revision but whose\n *   body carries no `_meta` envelope claim — including an envelope present but\n *   missing the required protocol-version key — is rejected with `-32602`\n *   (invalid params) naming the missing key(s), on HTTP 400.\n *\n * Should a future spec revision or conformance release change these\n * assignments, the affected cells are re-derived against that release; the\n * `settled` flag on {@linkcode InboundLadderRejection} stays available to mark\n * a cell provisional again while such a change is in flight.\n */\nimport { PROTOCOL_VERSION_META_KEY } from '../types/constants';\nimport { ProtocolErrorCode } from '../types/enums';\nimport { ProtocolError, UnsupportedProtocolVersionError } from '../types/errors';\nimport { isJSONRPCErrorResponse, isJSONRPCNotification, isJSONRPCRequest, isJSONRPCResultResponse } from '../types/guards';\nimport type { JSONRPCNotification, JSONRPCRequest, MessageClassification } from '../types/types';\nimport { envelopeClaimVersion, hasEnvelopeClaim, requestMetaOf, validateEnvelopeMeta } from './envelope';\n// Value encoding is shared between the standard `Mcp-Name` header and the\n// custom `Mcp-Param-*` headers; the codec module already imports the\n// `HeaderMismatch` constant and rejection type from here, so this is a benign\n// two-module cycle (both sides only consume the other's exports inside\n// function bodies, never at module-evaluation time).\nimport { decodeMcpParamValue } from './mcpParamHeaders';\nimport { isModernProtocolVersion } from './protocolEras';\n\n/* ------------------------------------------------------------------------ *\n * Classifier input\n * ------------------------------------------------------------------------ */\n\n/**\n * The transport-neutral description of an inbound HTTP request the classifier\n * evaluates. The caller (the HTTP entry) reads the body exactly once and\n * extracts the two protocol headers; the classifier never touches a request\n * object itself.\n */\nexport interface InboundHttpRequest {\n    /** The HTTP request method, e.g. `POST`, `GET`, `DELETE`. */\n    httpMethod: string;\n    /** The value of the `MCP-Protocol-Version` header, when present. */\n    protocolVersionHeader?: string;\n    /** The value of the `Mcp-Method` header, when present. */\n    mcpMethodHeader?: string;\n    /** The value of the `Mcp-Name` header, when present. */\n    mcpNameHeader?: string;\n    /** The parsed JSON request body (`undefined` for body-less methods). */\n    body?: unknown;\n}\n\n/* ------------------------------------------------------------------------ *\n * Classifier outcomes\n * ------------------------------------------------------------------------ */\n\n/** Why an inbound request was routed to legacy-era serving. */\nexport type InboundLegacyRouteReason =\n    /** Non-`POST` HTTP method: a body-less 2025-era session operation. */\n    | 'http-method'\n    /** An `initialize` request without a valid modern envelope claim — the legacy handshake by definition. */\n    | 'initialize'\n    /** A request without a per-request envelope claim. */\n    | 'no-claim'\n    /** A notification without a body claim or a modern protocol-version header. */\n    | 'notification'\n    /** An all-legacy JSON-RPC batch array. */\n    | 'batch'\n    /** A JSON-RPC response posted to the endpoint (2025-era session traffic). */\n    | 'response';\n\n/**\n * The request is legacy-era traffic. It carries no classification on purpose:\n * legacy serving receives it exactly as a hand-wired 2025 transport would.\n */\nexport interface InboundLegacyRoute {\n    kind: 'legacy';\n    reason: InboundLegacyRouteReason;\n    /**\n     * The protocol version the request named, when it named one (an\n     * `initialize` body's `protocolVersion`, or the `MCP-Protocol-Version`\n     * header). Used to echo `requested` when legacy serving is not configured.\n     */\n    requestedVersion?: string;\n}\n\n/**\n * The request claims the per-request envelope mechanism and is served on the\n * modern path. Discriminated by `messageKind` so the typed `message` narrows\n * with it — the classifier has already proved the JSON-RPC shape via the\n * `isJSONRPCRequest` / `isJSONRPCNotification` guards, so consumers never\n * cast the body again.\n */\nexport type InboundModernRoute =\n    | {\n          kind: 'modern';\n          messageKind: 'request';\n          /** The classified body — guard-proved {@linkcode JSONRPCRequest} shape. */\n          message: JSONRPCRequest;\n          /**\n           * The classification handed to the per-request transport and validated by\n           * the protocol layer against the serving instance's negotiated era.\n           */\n          classification: MessageClassification;\n      }\n    | {\n          kind: 'modern';\n          messageKind: 'notification';\n          /** The classified body — guard-proved {@linkcode JSONRPCNotification} shape. */\n          message: JSONRPCNotification;\n          classification: MessageClassification;\n      };\n\n/** The named steps of the inbound validation ladder, in evaluation order. */\nexport type InboundValidationRung =\n    | 'http-method'\n    | 'jsonrpc-shape'\n    | 'era-classification'\n    | 'envelope'\n    | 'method-registry'\n    | 'request-params'\n    | 'standard-header-validation'\n    | 'client-capabilities'\n    | 'param-header-validation';\n\n/** A ladder rejection: the JSON-RPC error to emit and the HTTP status to emit it with. */\nexport interface InboundLadderRejection {\n    kind: 'reject';\n    /** The ladder rung that produced the rejection. */\n    rung: InboundValidationRung;\n    /** The cell this rejection corresponds to on the ladder cell sheet (stable identifier for tests). */\n    cell: string;\n    /** The HTTP status the rejection is emitted with. */\n    httpStatus: number;\n    /** The JSON-RPC error code. */\n    code: number;\n    /** The JSON-RPC error message. */\n    message: string;\n    /** Structured error data (recognizers parse this; they never rely on class identity). */\n    data?: unknown;\n    /**\n     * `false` when the exact error code for this cell is not settled upstream\n     * yet and the emitted code is provisional.\n     */\n    settled: boolean;\n}\n\n/** The outcome of classifying one inbound HTTP request. */\nexport type InboundClassificationOutcome = InboundLegacyRoute | InboundModernRoute | InboundLadderRejection;\n\n/* ------------------------------------------------------------------------ *\n * Header cross-check mismatches\n * ------------------------------------------------------------------------ */\n\n/**\n * The error code emitted for header/body cross-check mismatches: the\n * `MCP-Protocol-Version` header disagreeing with the body's envelope claim (or\n * with the body's classification), and the `Mcp-Method` header disagreeing\n * with the body method.\n *\n * `-32020` is the draft schema's `HEADER_MISMATCH` constant (the SEP-2243\n * `HeaderMismatch` code; the spec requires HTTP 400 for it), as also asserted\n * by the published conformance suite for header-validation failures. It has no\n * {@linkcode ProtocolErrorCode} member because it is not part of the 2025-era\n * wire vocabulary; the validation ladder is its only emitter.\n */\nexport const HEADER_MISMATCH_ERROR_CODE = -32_020;\n\n/* ------------------------------------------------------------------------ *\n * The validation ladder as data\n * ------------------------------------------------------------------------ */\n\n/** One rung of the inbound validation ladder. */\nexport interface InboundValidationRungDescriptor {\n    rung: InboundValidationRung;\n    /** Evaluation order: lower runs first; an earlier rung's outcome wins over a later rung's. */\n    order: number;\n    /**\n     * Where the rung is evaluated: at the HTTP entry edge by\n     * {@linkcode classifyInboundRequest} (`edge`), by the HTTP entry after\n     * classification but before dispatch (`pre-dispatch`), or by the protocol\n     * layer at dispatch (`dispatch`).\n     */\n    evaluatedAt: 'edge' | 'pre-dispatch' | 'dispatch';\n    /** The JSON-RPC error codes this rung can produce (empty when the rung only routes). */\n    codes: readonly number[];\n    /** Conformance scenarios that exercise this rung (where one exists). */\n    conformance: readonly string[];\n    /** Why the rung sits where it does. */\n    rationale: string;\n}\n\n/**\n * The inbound validation ladder, expressed as data rather than control flow.\n *\n * The edge rungs are evaluated by {@linkcode classifyInboundRequest}; the\n * dispatch rungs are evaluated by the protocol layer once the classified\n * message is injected into a per-request server instance (the era registry\n * gate, the envelope requiredness check, and per-method params validation).\n * The client-capability rung is evaluated by the HTTP entry itself,\n * pre-dispatch, on the validated envelope the classifier produced — see that\n * rung's rationale for the ordering caveat. The order is the precedence: a\n * request that fails several rungs is answered by the earliest one.\n */\nexport const INBOUND_VALIDATION_LADDER: readonly InboundValidationRungDescriptor[] = [\n    {\n        rung: 'http-method',\n        order: 1,\n        evaluatedAt: 'edge',\n        codes: [-32_000],\n        conformance: [],\n        rationale:\n            'The modern era is POST-only; GET/DELETE are body-less 2025-era session operations and are method-routed to legacy ' +\n            'serving (405 when legacy serving is not configured), before any body is read.'\n    },\n    {\n        rung: 'jsonrpc-shape',\n        order: 2,\n        evaluatedAt: 'edge',\n        codes: [ProtocolErrorCode.InvalidRequest],\n        conformance: ['server-stateless'],\n        rationale:\n            'The body must be a JSON-RPC request or notification: posted responses and batch arrays containing a modern or ' +\n            'invalid element are rejected before classification (element-wise batch rule); all-legacy arrays stay legacy traffic.'\n    },\n    {\n        rung: 'era-classification',\n        order: 3,\n        evaluatedAt: 'edge',\n        codes: [HEADER_MISMATCH_ERROR_CODE, ProtocolErrorCode.UnsupportedProtocolVersion],\n        conformance: ['server-stateless', 'http-header-validation', 'http-custom-header-server-validation'],\n        rationale:\n            'Body-primary era classification with the protocol-version header as a cross-check; a header/body disagreement is rejected ' +\n            'with -32020 (HeaderMismatch), and an envelope-less request on a modern-only endpoint is answered with the ' +\n            'unsupported-protocol-version error naming the supported revisions.'\n    },\n    {\n        rung: 'envelope',\n        order: 4,\n        evaluatedAt: 'edge',\n        codes: [ProtocolErrorCode.InvalidParams],\n        conformance: ['server-stateless'],\n        rationale:\n            'A present envelope claim with a malformed envelope — and a missing envelope on a request whose protocol-version header ' +\n            'names a modern revision — is an invalid-params rejection naming the offending or missing key(s); never a silent fall ' +\n            'back to legacy handling. This is the only place an invalid-params rejection maps to HTTP 400.'\n    },\n    {\n        rung: 'method-registry',\n        order: 5,\n        evaluatedAt: 'dispatch',\n        codes: [ProtocolErrorCode.MethodNotFound],\n        conformance: ['server-stateless'],\n        rationale:\n            'Method existence outranks parameter validity: a method absent from the negotiated revision’s registry (or with no ' +\n            'handler installed) answers method-not-found before params or capabilities are looked at.'\n    },\n    {\n        rung: 'request-params',\n        order: 6,\n        evaluatedAt: 'dispatch',\n        codes: [ProtocolErrorCode.InvalidParams],\n        conformance: [],\n        rationale: 'Per-method params validation; emitted in-band by the dispatch layer (HTTP 200), never via the ladder status table.'\n    },\n    {\n        rung: 'standard-header-validation',\n        order: 7,\n        evaluatedAt: 'pre-dispatch',\n        codes: [HEADER_MISMATCH_ERROR_CODE],\n        conformance: ['http-header-validation'],\n        rationale:\n            'SEP-2243 standard `MCP-Protocol-Version` / `Mcp-Method` / `Mcp-Name` headers — presence, sentinel decoding, and ' +\n            '`Mcp-Name` ↔ body cross-check — are validated by the HTTP entry on a modern-classified request after the ' +\n            'supported-revision gate and before dispatch. The spec requires `MCP-Protocol-Version` and `Mcp-Method` on every ' +\n            'modern *request* POST (`Mcp-Name` only for the methods that mirror `params.name` / `params.uri` / `params.taskId`, ' +\n            'see `MCP_NAME_HEADER_SOURCE`) and names them ' +\n            'in that order, so a request missing several is answered by the earliest. Notification POSTs are exempt: the ' +\n            'presence half runs on requests only, so a modern-enveloped notification is dispatched even with no standard ' +\n            'headers at all. The classifier’s own header-mismatch cells ' +\n            '(protocol-version, `Mcp-Method` mismatch) stay on the edge ' +\n            '`era-classification` rung; this rung carries the entry-layer presence/`Mcp-Name` half — including the missing ' +\n            '`MCP-Protocol-Version` cell, which cannot live on the edge rung without breaking body-primary classification. ' +\n            'Evaluated before the ' +\n            'capability gate, the factory call, and the `Mcp-Param-*` rung so a request that fails several rungs is answered by ' +\n            'the standard-header rung first. The documented order (after method-registry 5 and request-params 6) is NOT the ' +\n            'observed precedence: serveModern evaluates this rung immediately after the supported-revision gate, so a request ' +\n            'that also fails a dispatch rung is answered here before the dispatch rungs (5–6) are consulted.'\n    },\n    {\n        rung: 'client-capabilities',\n        order: 8,\n        evaluatedAt: 'pre-dispatch',\n        codes: [ProtocolErrorCode.MissingRequiredClientCapability],\n        conformance: ['server-stateless'],\n        rationale:\n            'The capability requirement is checked by the HTTP entry, pre-dispatch, against the validated envelope the ' +\n            'classifier produced — pinning the spec-mandated HTTP 400 independently of how dispatch- and handler-produced ' +\n            'errors are mapped. The documented order (after method resolution and params validation) is preserved observably ' +\n            'only while the requirement table is empty: once a served method gains a requirement entry, a request that is ' +\n            'missing the capability and would also fail a dispatch rung is answered by this gate first, so the entry must ' +\n            'consult the method registry before the gate if the documented precedence is to stay observable.'\n    },\n    {\n        rung: 'param-header-validation',\n        order: 9,\n        evaluatedAt: 'pre-dispatch',\n        codes: [HEADER_MISMATCH_ERROR_CODE],\n        conformance: ['http-custom-header-server-validation'],\n        rationale:\n            'SEP-2243 `Mcp-Param-*` headers are validated against the named tool’s `x-mcp-header` declarations and the body ' +\n            '`arguments` after the tool registry is known and before dispatch reaches the handler; a missing/disagreeing/malformed ' +\n            'header is rejected 400 / -32020 with the same shape as the standard-header cross-checks. The documented order ' +\n            '(after method resolution and params validation) is preserved observably only when the body `arguments` would ' +\n            'otherwise validate: the check runs pre-dispatch, so a `tools/call` that fails BOTH this rung and a dispatch-time ' +\n            'rung (e.g. order-6 `request-params`, -32602) is answered by this gate first with 400 / -32020, not by the ' +\n            'earlier-ordered rung.'\n    }\n];\n\n/* ------------------------------------------------------------------------ *\n * HTTP status mapping for ladder-originated errors\n * ------------------------------------------------------------------------ */\n\n/**\n * HTTP status for ladder-originated JSON-RPC error codes.\n *\n * Keyed on origin, not on the bare code: this table only applies to errors\n * the ladder (or a pre-handler protocol gate) produced. Errors produced by\n * request handlers — whatever their code — stay in-band on HTTP 200, and are\n * never mapped to an HTTP status by this table; in particular `-32603` and\n * domain-specific codes never become a blanket 500. The single exception is\n * `MissingRequiredClientCapability` (-32021) — see\n * {@linkcode httpStatusForErrorCode}.\n *\n * `-32602` (invalid params) deliberately has NO entry: the only invalid-params\n * rejection that maps to HTTP 400 is the classifier's own envelope rung\n * short-circuit, which carries its HTTP status directly. A dispatch- or\n * handler-produced invalid-params error is always in-band.\n */\nexport const LADDER_ERROR_HTTP_STATUS: Readonly<Record<number, number>> = {\n    [ProtocolErrorCode.ParseError]: 400,\n    [ProtocolErrorCode.InvalidRequest]: 400,\n    [ProtocolErrorCode.MethodNotFound]: 404,\n    [ProtocolErrorCode.UnsupportedProtocolVersion]: 400,\n    [ProtocolErrorCode.MissingRequiredClientCapability]: 400,\n    [HEADER_MISMATCH_ERROR_CODE]: 400\n};\n\n/**\n * The HTTP status to answer a JSON-RPC error with, keyed on the error's\n * origin. `in-band` errors (anything produced by a request handler) are\n * HTTP 200 — the JSON-RPC error response is the payload, not an HTTP\n * failure — with ONE exception: `MissingRequiredClientCapability` (-32021),\n * whose 400 the spec mandates on the error itself with no origin condition,\n * and which the SDK genuinely produces after dispatch (the `input_required`\n * capability gate). A handler relaying some downstream peer's `-32020`/`-32022`\n * is NOT that peer's spec error and stays in-band like every other handler\n * code. `ladder` errors map through {@linkcode LADDER_ERROR_HTTP_STATUS}.\n *\n * The per-request transport intentionally does NOT delegate to this function:\n * its `?? 400` ladder fallback is only correct for entry-gate codes known to\n * the table, and would wrongly map dispatch-window errors outside it (a\n * window `-32602` must stay in-band on 200). The transport indexes the table\n * directly; keep the two in agreement when editing either.\n */\nexport function httpStatusForErrorCode(code: number, origin: 'ladder' | 'in-band'): number {\n    if (origin === 'in-band') {\n        return code === ProtocolErrorCode.MissingRequiredClientCapability ? 400 : 200;\n    }\n    return LADDER_ERROR_HTTP_STATUS[code] ?? 400;\n}\n\n/* ------------------------------------------------------------------------ *\n * The classifier\n * ------------------------------------------------------------------------ */\n\nfunction rejection(\n    rung: InboundValidationRung,\n    cell: string,\n    httpStatus: number,\n    error: ProtocolError,\n    settled: boolean\n): InboundLadderRejection {\n    return {\n        kind: 'reject',\n        rung,\n        cell,\n        httpStatus,\n        code: error.code,\n        message: error.message,\n        ...(error.data !== undefined && { data: error.data }),\n        settled\n    };\n}\n\nfunction crossCheckMismatch(\n    cell: string,\n    header: string,\n    body: string,\n    rung: InboundValidationRung = 'era-classification'\n): InboundLadderRejection {\n    return rejection(\n        rung,\n        cell,\n        400,\n        new ProtocolError(HEADER_MISMATCH_ERROR_CODE, `Bad Request: the request headers and body disagree: ${body}`, {\n            mismatch: { header, body }\n        }),\n        true\n    );\n}\n\n/** The body field the `Mcp-Name` header mirrors for a method on {@linkcode MCP_NAME_HEADER_SOURCE}. */\nexport type McpNameSourceField = 'name' | 'uri' | 'taskId';\n\n/**\n * The methods whose body carries a `params.name` / `params.uri` /\n * `params.taskId` value the `Mcp-Name` header must mirror, and which body\n * field supplies it. The core rows come from SEP-2243 § Standard Request\n * Headers (`Required For` column); the `tasks/*` rows come from SEP-2663's\n * Streamable HTTP binding (\"the client MUST set the `Mcp-Name` header to the\n * value of `params.taskId`\" for `tasks/get` / `tasks/update` /\n * `tasks/cancel`, so intermediaries can route every request for a task to the\n * instance holding its state). Shared by the client transport (header\n * emission) and the server ladder (validation) so both sides derive from one\n * table.\n */\nexport const MCP_NAME_HEADER_SOURCE: Readonly<Record<string, McpNameSourceField>> = {\n    'tools/call': 'name',\n    'prompts/get': 'name',\n    'resources/read': 'uri',\n    'tasks/get': 'taskId',\n    'tasks/update': 'taskId',\n    'tasks/cancel': 'taskId'\n};\n\n/**\n * Resolve the `Mcp-Name` source for one request against\n * {@linkcode MCP_NAME_HEADER_SOURCE}: which body field the header mirrors for\n * `method`, and the string value that field carries in `params`.\n *\n * Returns `undefined` when `method` is off-table (no `Mcp-Name` is emitted or\n * required). Otherwise `value` is the field's string value, or `undefined`\n * when `params` is not a plain object or the field is absent / not a string —\n * the client emits no header then, and the server leaves that body to the\n * rungs further down the ladder.\n *\n * `method` is peer-supplied on the server and caller-supplied on the client,\n * so the table lookup is `Object.hasOwn`-guarded against `Object.prototype`\n * collisions (`constructor`, `toString`, …). Shared by the client transport\n * (emission) and {@linkcode validateStandardRequestHeaders} (validation) so\n * the extraction — not just the table — cannot drift between the two sides.\n */\nexport function mcpNameSource(method: string, params: unknown): { field: McpNameSourceField; value: string | undefined } | undefined {\n    const field = Object.hasOwn(MCP_NAME_HEADER_SOURCE, method) ? MCP_NAME_HEADER_SOURCE[method] : undefined;\n    if (field === undefined) {\n        return undefined;\n    }\n    const raw = isPlainObject(params) ? params[field] : undefined;\n    return { field, value: typeof raw === 'string' ? raw : undefined };\n}\n\n/** Strip RFC 9110 optional whitespace (SP / HTAB) around a field value in linear time. */\nfunction stripHttpOws(value: string): string {\n    let start = 0;\n    while (start < value.length) {\n        const code = value.codePointAt(start);\n        if (code !== 0x09 && code !== 0x20) break;\n        start += 1;\n    }\n\n    let end = value.length;\n    while (end > start) {\n        const code = value.codePointAt(end - 1);\n        if (code !== 0x09 && code !== 0x20) break;\n        end -= 1;\n    }\n\n    return start === 0 && end === value.length ? value : value.slice(start, end);\n}\n\n/**\n * SEP-2243 standard-header server-side validation, evaluated by the HTTP\n * entry on a modern-classified request immediately after\n * {@linkcode classifyInboundRequest} returns a modern route.\n *\n * Returns the `-32020` (`HeaderMismatch`) ladder rejection (HTTP `400`,\n * `standard-header-validation` rung — the same shape\n * {@linkcode classifyInboundRequest} already emits on the edge\n * `era-classification` rung for the `MCP-Protocol-Version` and\n * `Mcp-Method` *mismatch* cells) when:\n *\n * - the required `MCP-Protocol-Version` header is absent (SEP-2243 requires it\n *   on every modern *request* POST, and lists it first among the required\n *   standard headers — so a request missing it *and* `Mcp-Method` is answered\n *   by this cell);\n * - the required `Mcp-Method` header is absent;\n * - the required `Mcp-Name` header is absent on a `tools/call`,\n *   `prompts/get`, `resources/read`, or (per SEP-2663's Streamable HTTP\n *   binding) `tasks/get` / `tasks/update` / `tasks/cancel` request whose\n *   body carries the `params.name` / `params.uri` / `params.taskId` value\n *   the header mirrors;\n * - the `Mcp-Name` header carries an invalid `=?base64?…?=` sentinel; or\n * - the (decoded) `Mcp-Name` value disagrees with the body's\n *   `params.name` / `params.uri` / `params.taskId`.\n *\n * Returns `undefined` (pass) for notifications (the spec table reads\n * \"All requests\"), for methods that have no `Mcp-Name` source, and when the\n * headers agree with the body. Never enforced on legacy traffic — the entry\n * only calls this on a modern route.\n *\n * Kept separate from {@linkcode classifyInboundRequest} so that a body-only\n * call to the classifier (no headers passed) keeps routing a modern request\n * unchanged: the classifier remains a pure body-primary router, and this\n * function is the presence/`Mcp-Name` half of the standard-header rung the\n * entry layers on top. That separation is what lets the missing\n * `MCP-Protocol-Version` cell live here without disturbing the body-primary\n * rule — classification still resolves from the body (a proxy stripping the\n * header must not change the era), and only this rung refuses to serve it.\n */\nexport function validateStandardRequestHeaders(request: InboundHttpRequest, route: InboundModernRoute): InboundLadderRejection | undefined {\n    if (route.messageKind !== 'request') {\n        return undefined;\n    }\n    const method = route.message.method;\n\n    // SEP-2243 names `MCP-Protocol-Version` first among the required standard\n    // headers, so a request missing both it and `Mcp-Method` is answered by\n    // the header the spec names first. The presence check lives here rather\n    // than in `classifyInboundRequest` on purpose: classification stays\n    // body-primary (a proxy stripping the header must not change the era), and\n    // only this rung refuses to serve the request.\n    if (request.protocolVersionHeader === undefined) {\n        const claimed = route.classification.revision;\n        return crossCheckMismatch(\n            'version-header-missing',\n            '(missing)',\n            claimed === undefined\n                ? 'the body carries a modern per-request envelope but the required MCP-Protocol-Version header is absent'\n                : `the body envelope names protocol version ${claimed} but the required MCP-Protocol-Version header is absent`,\n            'standard-header-validation'\n        );\n    }\n\n    if (request.mcpMethodHeader === undefined) {\n        return crossCheckMismatch(\n            'method-header-missing',\n            '(missing)',\n            `the body names method ${method} but the required Mcp-Method header is absent`,\n            'standard-header-validation'\n        );\n    }\n\n    const source = mcpNameSource(method, route.message.params);\n    if (source === undefined) {\n        return undefined;\n    }\n    const { field: sourceField, value: bodyValue } = source;\n\n    if (request.mcpNameHeader === undefined) {\n        // The header is required for these methods whenever the body carries\n        // the source value. A body without the source field (`params.name` /\n        // `params.uri` / `params.taskId`) is answered by the rungs further\n        // down the ladder; this rung only answers the missing-header case it\n        // can observe.\n        if (bodyValue === undefined) {\n            return undefined;\n        }\n        return crossCheckMismatch(\n            'name-header-missing',\n            '(missing)',\n            `the body carries params.${sourceField}=\"${bodyValue}\" but the required Mcp-Name header is absent`,\n            'standard-header-validation'\n        );\n    }\n\n    const normalizedNameHeader = stripHttpOws(request.mcpNameHeader);\n    const decoded = decodeMcpParamValue(normalizedNameHeader);\n    if (decoded === undefined) {\n        return crossCheckMismatch(\n            'name-header-invalid-encoding',\n            normalizedNameHeader,\n            'the Mcp-Name header carries an invalid Base64 sentinel value',\n            'standard-header-validation'\n        );\n    }\n    if (bodyValue !== undefined && decoded !== bodyValue) {\n        return crossCheckMismatch(\n            'name-header-mismatch',\n            normalizedNameHeader,\n            `the body carries params.${sourceField}=\"${bodyValue}\" but the Mcp-Name header names \"${decoded}\"`,\n            'standard-header-validation'\n        );\n    }\n    return undefined;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n    return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction classificationForClaim(claimedVersion: string | undefined): MessageClassification {\n    if (claimedVersion === undefined) {\n        return { era: 'modern' };\n    }\n    return { era: isModernProtocolVersion(claimedVersion) ? 'modern' : 'legacy', revision: claimedVersion };\n}\n\n/**\n * Whether a request's params carry a per-request envelope claim that is both\n * well-formed and names a modern protocol revision.\n *\n * Used by the `initialize` precedence rule: only such a claim overrides the\n * `initialize` ⇒ legacy-handshake classification — a request carrying a valid\n * modern envelope is a modern request regardless of its method name, and the\n * modern era then answers `initialize` exactly like any other method it does\n * not define (method-not-found). A malformed claim, or one naming a pre-2026\n * revision, keeps the legacy-handshake routing unchanged.\n *\n * Exported on the core internal barrel for the stdio serving entry, which\n * applies the same precedence rule to a connection's opening message; not\n * public API.\n */\nexport function carriesValidModernEnvelopeClaim(params: unknown): boolean {\n    if (!hasEnvelopeClaim(params)) {\n        return false;\n    }\n    const claimedVersion = envelopeClaimVersion(params);\n    if (claimedVersion === undefined || !isModernProtocolVersion(claimedVersion)) {\n        return false;\n    }\n    const meta = requestMetaOf(params);\n    return meta !== undefined && validateEnvelopeMeta(meta).length === 0;\n}\n\nfunction classifyBatch(body: readonly unknown[]): InboundClassificationOutcome {\n    if (body.length === 0) {\n        return rejection(\n            'jsonrpc-shape',\n            'empty-batch',\n            400,\n            new ProtocolError(ProtocolErrorCode.InvalidRequest, 'Bad Request: empty JSON-RPC batch'),\n            true\n        );\n    }\n    for (const element of body) {\n        const params = isPlainObject(element) ? element['params'] : undefined;\n        if (hasEnvelopeClaim(params)) {\n            // Element-wise rule: a single modern element makes the whole array\n            // unservable — modern requests are single-message POSTs, and the\n            // legacy path must never serve an envelope-claiming element.\n            return rejection(\n                'jsonrpc-shape',\n                'batch-with-modern-element',\n                400,\n                new ProtocolError(\n                    ProtocolErrorCode.InvalidRequest,\n                    'Bad Request: JSON-RPC batches may not contain requests for protocol revision 2026-07-28 or later'\n                ),\n                true\n            );\n        }\n        const valid =\n            isJSONRPCRequest(element) ||\n            isJSONRPCNotification(element) ||\n            isJSONRPCResultResponse(element) ||\n            isJSONRPCErrorResponse(element);\n        if (!valid) {\n            return rejection(\n                'jsonrpc-shape',\n                'batch-with-invalid-element',\n                400,\n                new ProtocolError(ProtocolErrorCode.InvalidRequest, 'Bad Request: JSON-RPC batch contains an invalid message'),\n                true\n            );\n        }\n    }\n    // All elements are legacy-era messages: legacy serving takes the array unchanged.\n    return { kind: 'legacy', reason: 'batch' };\n}\n\nfunction classifyRequestBody(request: InboundHttpRequest, body: JSONRPCRequest): InboundClassificationOutcome {\n    const params = body.params;\n    const method = body.method;\n    const headerVersion = request.protocolVersionHeader;\n    const headerNamesModern = headerVersion !== undefined && isModernProtocolVersion(headerVersion);\n\n    // `initialize` is the legacy handshake by definition — unless the request\n    // carries a valid envelope claim naming a modern revision, in which case\n    // the claim wins: the request is classified like any other enveloped\n    // request and served on the modern path, where the modern registry answers\n    // `initialize` as method-not-found like every other method it does not\n    // define. A malformed or absent claim, or a claim naming a pre-2026\n    // revision, keeps the legacy-handshake classification below.\n    if (method === 'initialize' && !carriesValidModernEnvelopeClaim(params)) {\n        if (headerNamesModern) {\n            return crossCheckMismatch(\n                'initialize-with-modern-header',\n                headerVersion,\n                'an initialize request (legacy handshake) was sent with a modern MCP-Protocol-Version header'\n            );\n        }\n        const requestedVersion =\n            isPlainObject(params) && typeof params['protocolVersion'] === 'string' ? params['protocolVersion'] : undefined;\n        return { kind: 'legacy', reason: 'initialize', ...(requestedVersion !== undefined && { requestedVersion }) };\n    }\n\n    if (hasEnvelopeClaim(params)) {\n        // A present claim is validated, never silently ignored: a malformed\n        // envelope behind the claim is an invalid-params rejection naming the\n        // offending key, not a fall back to legacy handling.\n        const meta = requestMetaOf(params);\n        const issues = meta === undefined ? [] : validateEnvelopeMeta(meta);\n        const firstIssue = issues[0];\n        if (firstIssue !== undefined) {\n            return rejection(\n                'envelope',\n                'envelope-invalid',\n                400,\n                new ProtocolError(\n                    ProtocolErrorCode.InvalidParams,\n                    `Invalid _meta envelope for protocol revision 2026-07-28: ${firstIssue.key}: ${firstIssue.problem}`,\n                    { envelope: firstIssue }\n                ),\n                true\n            );\n        }\n\n        const claimedVersion = envelopeClaimVersion(params);\n        if (headerVersion !== undefined && claimedVersion !== undefined && headerVersion !== claimedVersion) {\n            return crossCheckMismatch(\n                'header-body-version-mismatch',\n                headerVersion,\n                `the body envelope names protocol version ${claimedVersion} but the MCP-Protocol-Version header names ${headerVersion}`\n            );\n        }\n        if (request.mcpMethodHeader !== undefined && request.mcpMethodHeader !== method) {\n            return crossCheckMismatch(\n                'method-header-mismatch',\n                request.mcpMethodHeader,\n                `the body names method ${method} but the Mcp-Method header names ${request.mcpMethodHeader}`\n            );\n        }\n        return { kind: 'modern', messageKind: 'request', message: body, classification: classificationForClaim(claimedVersion) };\n    }\n\n    // No claim: legacy-era traffic — unless the protocol-version header names a\n    // modern revision. The modern revisions carry their request metadata in the\n    // per-request `_meta` envelope, so a modern-classified request without one\n    // is missing required params: it is rejected with invalid params naming the\n    // missing key(s), never silently served as legacy traffic and never\n    // upgraded from the header alone.\n    if (headerNamesModern) {\n        const meta = requestMetaOf(params);\n        const missingFromEnvelope = validateEnvelopeMeta(meta ?? {})\n            .filter(issue => issue.problem === 'missing')\n            .map(issue => issue.key);\n        const missing = meta === undefined ? ['_meta'] : missingFromEnvelope.length > 0 ? missingFromEnvelope : [PROTOCOL_VERSION_META_KEY];\n        return rejection(\n            'envelope',\n            'modern-header-without-claim',\n            400,\n            new ProtocolError(\n                ProtocolErrorCode.InvalidParams,\n                `Invalid params: the MCP-Protocol-Version header names protocol revision ${headerVersion}, but the request is missing ` +\n                    `the required per-request envelope key(s): ${missing.join(', ')}`,\n                { envelope: { missing } }\n            ),\n            true\n        );\n    }\n    return { kind: 'legacy', reason: 'no-claim', ...(headerVersion !== undefined && { requestedVersion: headerVersion }) };\n}\n\nfunction classifyNotificationBody(request: InboundHttpRequest, body: JSONRPCNotification): InboundClassificationOutcome {\n    const params = body.params;\n    const method = body.method;\n    const headerVersion = request.protocolVersionHeader;\n    const headerNamesModern = headerVersion !== undefined && isModernProtocolVersion(headerVersion);\n\n    if (hasEnvelopeClaim(params)) {\n        // Body-primary even for notifications: a body claim wins over the\n        // header, and a disagreement between them is rejected rather than\n        // letting either signal silently pick the serving path.\n        const claimedVersion = envelopeClaimVersion(params);\n        if (claimedVersion === undefined) {\n            // The claim key is present but its value is malformed (not a\n            // string). Validated exactly like a request claim: an\n            // invalid-params rejection naming the offending key — never a\n            // silent win against (or loss to) a disagreeing header.\n            const meta = requestMetaOf(params);\n            const issues = meta === undefined ? [] : validateEnvelopeMeta(meta);\n            const claimIssue = issues.find(issue => issue.key === PROTOCOL_VERSION_META_KEY) ?? {\n                key: PROTOCOL_VERSION_META_KEY,\n                problem: 'expected a protocol version string'\n            };\n            return rejection(\n                'envelope',\n                'notification-envelope-invalid',\n                400,\n                new ProtocolError(\n                    ProtocolErrorCode.InvalidParams,\n                    `Invalid _meta envelope for protocol revision 2026-07-28: ${claimIssue.key}: ${claimIssue.problem}`,\n                    { envelope: claimIssue }\n                ),\n                true\n            );\n        }\n        if (headerVersion !== undefined && headerVersion !== claimedVersion) {\n            return crossCheckMismatch(\n                'notification-header-body-version-mismatch',\n                headerVersion,\n                `the notification envelope names protocol version ${claimedVersion} but the MCP-Protocol-Version header names ${headerVersion}`\n            );\n        }\n        const classification = classificationForClaim(claimedVersion);\n        if (classification.era === 'modern' && request.mcpMethodHeader !== undefined && request.mcpMethodHeader !== method) {\n            return crossCheckMismatch(\n                'notification-method-header-mismatch',\n                request.mcpMethodHeader,\n                `the notification body names method ${method} but the Mcp-Method header names ${request.mcpMethodHeader}`\n            );\n        }\n        return { kind: 'modern', messageKind: 'notification', message: body, classification };\n    }\n\n    // Notifications carry no body claim under the current spec, so the\n    // protocol-version header is determinative for them: a modern header\n    // routes the notification to modern serving; a missing or legacy header\n    // keeps it legacy traffic. The Mcp-Method header is validated only when\n    // the notification classifies modern — it is never enforced on legacy\n    // notifications.\n    if (headerNamesModern) {\n        if (request.mcpMethodHeader !== undefined && request.mcpMethodHeader !== method) {\n            return crossCheckMismatch(\n                'notification-method-header-mismatch',\n                request.mcpMethodHeader,\n                `the notification body names method ${method} but the Mcp-Method header names ${request.mcpMethodHeader}`\n            );\n        }\n        return {\n            kind: 'modern',\n            messageKind: 'notification',\n            message: body,\n            classification: { era: 'modern', revision: headerVersion }\n        };\n    }\n    return { kind: 'legacy', reason: 'notification', ...(headerVersion !== undefined && { requestedVersion: headerVersion }) };\n}\n\n/**\n * Classifies one inbound HTTP request for dual-era serving.\n *\n * The body-primary predicate, evaluated once at the entry boundary: see the\n * module documentation for the rules. Returns a routing outcome (`legacy` or\n * `modern`) or a ladder rejection; it never throws.\n */\nexport function classifyInboundRequest(request: InboundHttpRequest): InboundClassificationOutcome {\n    // RFC 9110 §5.5: field parsing excludes optional whitespace around a\n    // field value. Fetch implementations normally perform this normalization,\n    // but transport-neutral callers and some runtimes can expose raw OWS.\n    request = {\n        ...request,\n        ...(request.protocolVersionHeader !== undefined && {\n            protocolVersionHeader: stripHttpOws(request.protocolVersionHeader)\n        }),\n        ...(request.mcpMethodHeader !== undefined && { mcpMethodHeader: stripHttpOws(request.mcpMethodHeader) }),\n        ...(request.mcpNameHeader !== undefined && { mcpNameHeader: stripHttpOws(request.mcpNameHeader) })\n    };\n\n    if (request.httpMethod.toUpperCase() !== 'POST') {\n        // Body-less 2025-era session operations (and any other non-POST\n        // method): the modern era is POST-only.\n        return { kind: 'legacy', reason: 'http-method' };\n    }\n\n    const body = request.body;\n    if (Array.isArray(body)) {\n        return classifyBatch(body);\n    }\n    if (isJSONRPCResultResponse(body) || isJSONRPCErrorResponse(body)) {\n        // Posted responses are 2025-era session traffic (replies to\n        // server-initiated requests over a session); the modern era has no\n        // such channel.\n        return { kind: 'legacy', reason: 'response' };\n    }\n    if (isPlainObject(body) && isJSONRPCRequest(body)) {\n        return classifyRequestBody(request, body);\n    }\n    if (isPlainObject(body) && isJSONRPCNotification(body)) {\n        return classifyNotificationBody(request, body);\n    }\n    return rejection(\n        'jsonrpc-shape',\n        'invalid-json-rpc-body',\n        400,\n        new ProtocolError(ProtocolErrorCode.InvalidRequest, 'Bad Request: the request body is not a valid JSON-RPC message'),\n        true\n    );\n}\n\n/* ------------------------------------------------------------------------ *\n * Modern-only (strict) mapping of legacy routes\n * ------------------------------------------------------------------------ */\n\n/**\n * The rejection a modern-only endpoint (no legacy serving configured)\n * answers a legacy-classified request with.\n *\n * - Envelope-less requests (including `initialize`) are answered with the\n *   unsupported-protocol-version error carrying the endpoint's supported\n *   versions and echoing the version the request named (when it named one —\n *   `requested` is omitted rather than fabricated when the request named no\n *   version at all), so a legacy client can discover what the endpoint serves\n *   from the error alone.\n * - Posted responses and batch arrays are invalid requests on the modern era.\n * - Non-`POST` methods are not allowed.\n * - Legacy-classified notifications return `undefined`: the caller answers\n *   202 with no body and does not dispatch the notification (accept-and-drop).\n */\nexport function modernOnlyStrictRejection(\n    route: InboundLegacyRoute,\n    supportedVersions: readonly string[]\n): InboundLadderRejection | undefined {\n    switch (route.reason) {\n        case 'http-method': {\n            return rejection('http-method', 'modern-only-method-not-allowed', 405, new ProtocolError(-32_000, 'Method not allowed.'), true);\n        }\n        case 'batch': {\n            return rejection(\n                'jsonrpc-shape',\n                'modern-only-batch-not-supported',\n                400,\n                new ProtocolError(ProtocolErrorCode.InvalidRequest, 'Bad Request: JSON-RPC batches are not supported by this endpoint'),\n                true\n            );\n        }\n        case 'response': {\n            return rejection(\n                'jsonrpc-shape',\n                'modern-only-response-post',\n                400,\n                new ProtocolError(ProtocolErrorCode.InvalidRequest, 'Bad Request: JSON-RPC responses cannot be posted to this endpoint'),\n                true\n            );\n        }\n        case 'notification': {\n            return undefined;\n        }\n        case 'initialize':\n        case 'no-claim': {\n            // `requested` reflects what the request actually named (an\n            // initialize body's `protocolVersion` or the protocol-version\n            // header); when the request named no version at all the field is\n            // omitted rather than fabricated.\n            const requested = route.requestedVersion;\n            const error =\n                requested === undefined\n                    ? new ProtocolError(\n                          ProtocolErrorCode.UnsupportedProtocolVersion,\n                          'Unsupported protocol version: the request did not name a protocol version',\n                          { supported: [...supportedVersions] }\n                      )\n                    : new UnsupportedProtocolVersionError({ supported: [...supportedVersions], requested });\n            return rejection('era-classification', 'modern-only-missing-envelope', 400, error, true);\n        }\n    }\n}\n", "/**\n * Internal Zod schema utilities for protocol handling.\n * These are used internally by the SDK for protocol message validation.\n */\n\nimport * as z from 'zod/v4';\n\n/**\n * Base type for any Zod schema.\n */\nexport type AnySchema = z.core.$ZodType;\n\n/**\n * A Zod schema for objects specifically.\n */\nexport type AnyObjectSchema = z.core.$ZodObject;\n\n/**\n * Extracts the output type from a Zod schema.\n */\nexport type SchemaOutput<T extends AnySchema> = z.output<T>;\n\n/**\n * Parses data against a Zod schema (synchronous).\n * Returns a discriminated union with success/error.\n */\nexport function parseSchema<T extends AnySchema>(\n    schema: T,\n    data: unknown\n): { success: true; data: z.output<T> } | { success: false; error: z.core.$ZodError } {\n    return z.safeParse(schema, data);\n}\n\n/**\n * Union of the declared shape keys across several Zod object schemas.\n */\nexport function shapeKeys(schemas: Array<{ shape: Record<string, unknown> }>): ReadonlySet<string> {\n    return new Set(schemas.flatMap(schema => Object.keys(schema.shape)));\n}\n", "/**\n * Standard Schema utilities for user-provided schemas.\n * Supports Zod v4, Valibot, ArkType, and other Standard Schema implementations.\n * @see https://standardschema.dev\n */\n\n/* eslint-disable @typescript-eslint/no-namespace */\n\nimport * as z from 'zod/v4';\n\nimport type { StringSchema } from '../types/types';\n\n// Standard Schema interfaces — vendored from https://standardschema.dev (spec v1, Jan 2025)\n\nexport interface StandardTypedV1<Input = unknown, Output = Input> {\n    readonly '~standard': StandardTypedV1.Props<Input, Output>;\n}\n\nexport namespace StandardTypedV1 {\n    export interface Props<Input = unknown, Output = Input> {\n        readonly version: 1;\n        readonly vendor: string;\n        readonly types?: Types<Input, Output> | undefined;\n    }\n\n    export interface Types<Input = unknown, Output = Input> {\n        readonly input: Input;\n        readonly output: Output;\n    }\n\n    export type InferInput<Schema extends StandardTypedV1> = NonNullable<Schema['~standard']['types']>['input'];\n    export type InferOutput<Schema extends StandardTypedV1> = NonNullable<Schema['~standard']['types']>['output'];\n}\n\nexport interface StandardSchemaV1<Input = unknown, Output = Input> {\n    readonly '~standard': StandardSchemaV1.Props<Input, Output>;\n}\n\nexport namespace StandardSchemaV1 {\n    export interface Props<Input = unknown, Output = Input> extends StandardTypedV1.Props<Input, Output> {\n        readonly validate: (value: unknown, options?: Options | undefined) => Result<Output> | Promise<Result<Output>>;\n    }\n\n    export interface Options {\n        readonly libraryOptions?: Record<string, unknown> | undefined;\n    }\n\n    export type Result<Output> = SuccessResult<Output> | FailureResult;\n\n    export interface SuccessResult<Output> {\n        readonly value: Output;\n        readonly issues?: undefined;\n    }\n\n    export interface FailureResult {\n        readonly issues: ReadonlyArray<Issue>;\n    }\n\n    export interface Issue {\n        readonly message: string;\n        readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;\n    }\n\n    export interface PathSegment {\n        readonly key: PropertyKey;\n    }\n\n    export type InferInput<Schema extends StandardTypedV1> = StandardTypedV1.InferInput<Schema>;\n    export type InferOutput<Schema extends StandardTypedV1> = StandardTypedV1.InferOutput<Schema>;\n}\n\nexport interface StandardJSONSchemaV1<Input = unknown, Output = Input> {\n    readonly '~standard': StandardJSONSchemaV1.Props<Input, Output>;\n}\n\nexport namespace StandardJSONSchemaV1 {\n    export interface Props<Input = unknown, Output = Input> extends StandardTypedV1.Props<Input, Output> {\n        readonly jsonSchema: Converter;\n    }\n\n    export interface Converter {\n        readonly input: (options: Options) => Record<string, unknown>;\n        readonly output: (options: Options) => Record<string, unknown>;\n    }\n\n    export type Target = 'draft-2020-12' | 'draft-07' | 'openapi-3.0' | (object & string);\n\n    export interface Options {\n        readonly target: Target;\n        readonly libraryOptions?: Record<string, unknown> | undefined;\n    }\n\n    export type InferInput<Schema extends StandardTypedV1> = StandardTypedV1.InferInput<Schema>;\n    export type InferOutput<Schema extends StandardTypedV1> = StandardTypedV1.InferOutput<Schema>;\n}\n\n/**\n * Combined interface for schemas with both validation and JSON Schema conversion —\n * the intersection of {@linkcode StandardSchemaV1} and {@linkcode StandardJSONSchemaV1}.\n *\n * This is the type accepted by `registerTool` / `registerPrompt`. The SDK needs\n * `~standard.jsonSchema` to advertise the tool's argument shape in `tools/list`, and\n * `~standard.validate` to check incoming arguments when a `tools/call` arrives.\n *\n * Zod v4, ArkType, and Valibot (via `@valibot/to-json-schema`'s `toStandardJsonSchema`)\n * all implement both interfaces.\n *\n * @see https://standardschema.dev/ for the Standard Schema specification\n */\nexport interface StandardSchemaWithJSON<Input = unknown, Output = Input> {\n    readonly '~standard': StandardSchemaV1.Props<Input, Output> & StandardJSONSchemaV1.Props<Input, Output>;\n}\n\nexport namespace StandardSchemaWithJSON {\n    export type InferInput<Schema extends StandardTypedV1> = StandardTypedV1.InferInput<Schema>;\n    export type InferOutput<Schema extends StandardTypedV1> = StandardTypedV1.InferOutput<Schema>;\n}\n\n/**\n * Narrowing of {@linkcode StandardSchemaV1} whose `validate` is guaranteed synchronous.\n *\n * The Zod schemas backing `specTypeSchemas` contain no async refinements or transforms,\n * so every entry satisfies this interface. Consumers can call `validate()` and access\n * `.issues` / `.value` on the result without `await`.\n *\n * `StandardSchemaV1Sync` is assignable to `StandardSchemaV1` — it is a strict subtype.\n */\nexport interface StandardSchemaV1Sync<Input = unknown, Output = Input> extends StandardSchemaV1<Input, Output> {\n    readonly '~standard': StandardSchemaV1Sync.Props<Input, Output>;\n}\n\nexport namespace StandardSchemaV1Sync {\n    export interface Props<Input = unknown, Output = Input> extends StandardSchemaV1.Props<Input, Output> {\n        readonly validate: (value: unknown, options?: StandardSchemaV1.Options | undefined) => StandardSchemaV1.Result<Output>;\n    }\n\n    export type InferInput<Schema extends StandardTypedV1> = StandardTypedV1.InferInput<Schema>;\n    export type InferOutput<Schema extends StandardTypedV1> = StandardTypedV1.InferOutput<Schema>;\n}\n\n// Type guards\n\nexport function isStandardJSONSchema(schema: unknown): schema is StandardJSONSchemaV1 {\n    if (schema == null) return false;\n    const schemaType = typeof schema;\n    if (schemaType !== 'object' && schemaType !== 'function') return false;\n    if (!('~standard' in (schema as object))) return false;\n    const std = (schema as StandardJSONSchemaV1)['~standard'];\n    return typeof std?.jsonSchema?.input === 'function' && typeof std?.jsonSchema?.output === 'function';\n}\n\nexport function isStandardSchema(schema: unknown): schema is StandardSchemaV1 {\n    if (schema == null) return false;\n    const schemaType = typeof schema;\n    if (schemaType !== 'object' && schemaType !== 'function') return false;\n    if (!('~standard' in (schema as object))) return false;\n    const std = (schema as StandardSchemaV1)['~standard'];\n    return typeof std?.validate === 'function';\n}\n\nexport function isStandardSchemaWithJSON(schema: unknown): schema is StandardSchemaWithJSON {\n    return isStandardJSONSchema(schema) && isStandardSchema(schema);\n}\n\n// JSON Schema conversion\n\nlet warnedZodFallback = false;\n\n/** JSON Schema draft targeted by every conversion; shared so pattern references above stay in lockstep. */\nexport const JSON_SCHEMA_CONVERSION_TARGET = 'draft-2020-12';\n\n/**\n * Converts a StandardSchema to JSON Schema for use as an MCP tool/prompt schema.\n *\n * MCP requires `type: \"object\"` at the root of tool `inputSchema` and prompt\n * argument schemas; `outputSchema` may have any JSON Schema root (SEP-2106).\n * Zod's discriminated unions emit `{oneOf: [...]}` without a top-level `type`,\n * so for `io: 'input'` this function defaults `type` to `\"object\"` when absent\n * and throws on an explicit non-object `type` (e.g. `z.string()`). For\n * `io: 'output'` a non-object root is returned as-is; the `\"object\"` default is\n * applied only when the root is provably object-shaped.\n */\nexport function standardSchemaToJsonSchema(schema: StandardJSONSchemaV1, io: 'input' | 'output' = 'input'): Record<string, unknown> {\n    const std = schema['~standard'];\n    let result: Record<string, unknown>;\n    if (std.jsonSchema) {\n        result = std.jsonSchema[io]({ target: JSON_SCHEMA_CONVERSION_TARGET });\n    } else if (std.vendor === 'zod') {\n        // zod 4.0–4.1 implements StandardSchemaV1 but not StandardJSONSchemaV1 (`~standard.jsonSchema`).\n        // The SDK already bundles zod 4, so fall back to its converter rather than crashing on tools/list.\n        // zod 3 schemas (which also report vendor 'zod') have `_def` but not `_zod`; the SDK-bundled\n        // zod 4 `z.toJSONSchema()` cannot introspect them, so throw a clear error instead of crashing.\n        if (!('_zod' in (schema as object))) {\n            throw new Error(\n                'Schema appears to be from zod 3, which the SDK cannot convert to JSON Schema. ' +\n                    'Upgrade to zod >=4.2.0, or wrap your JSON Schema with fromJsonSchema().'\n            );\n        }\n        if (!warnedZodFallback) {\n            warnedZodFallback = true;\n            console.warn(\n                '[mcp-sdk] Your zod version does not implement `~standard.jsonSchema` (added in zod 4.2.0). ' +\n                    'Falling back to z.toJSONSchema(). Upgrade to zod >=4.2.0 to silence this warning.'\n            );\n        }\n        result = z.toJSONSchema(schema as unknown as z.ZodType, { target: JSON_SCHEMA_CONVERSION_TARGET, io }) as Record<string, unknown>;\n    } else {\n        throw new Error(\n            `Schema library \"${std.vendor}\" does not implement StandardJSONSchemaV1 (\\`~standard.jsonSchema\\`). ` +\n                `Upgrade to a version that does, or wrap your JSON Schema with fromJsonSchema().`\n        );\n    }\n    if (io === 'output') {\n        // SEP-2106: outputSchema may have any JSON Schema root. An explicit `type` (object or\n        // not) is returned as-is. A typeless root only gets `type:'object'` defaulted when it is\n        // PROVABLY object-shaped — either it carries object keywords at the root, or every\n        // member of a root `oneOf`/`anyOf`/`allOf` is itself `type:'object'` (the\n        // `z.discriminatedUnion(...)`, `z.union([z.object(...), ...])`, `z.intersection(...)`\n        // cases). Those pre-SEP schemas were valid 2025 wire data via the unconditional stamp,\n        // so the stamp is kept where it is provably safe. A typeless root that is NOT provably\n        // object-shaped (e.g. `z.union([z.string(), z.number()])` → `{anyOf:[…]}`) is returned\n        // as-is — stamping there would be self-contradictory. Anything that does not end up\n        // `type:'object'` is wrapped as `{type:'object', properties:{result:…}}` by the 2025\n        // codec's legacy projection (see `wire/rev2025-11-25/legacyWrap.ts`).\n        if (result.type !== undefined) return result;\n        return isProvablyObjectShapedRoot(result) ? { type: 'object', ...result } : result;\n    }\n    if (result.type !== undefined && result.type !== 'object') {\n        throw new Error(\n            `MCP tool and prompt schemas must describe objects (got type: ${JSON.stringify(result.type)}). ` +\n                `Wrap your schema in z.object({...}) or equivalent.`\n        );\n    }\n    return { type: 'object', ...result };\n}\n\n/**\n * A typeless JSON Schema root is \"provably object-shaped\" when either it carries object keywords\n * directly (`properties`/`patternProperties`/`additionalProperties`/`required`), or it is a\n * composition (`oneOf`/`anyOf`/`allOf`) whose every member is itself `type:'object'` or recursively\n * provably object-shaped (e.g. a nested `discriminatedUnion`). `$ref` is not followed. Used to\n * decide whether stamping `type:'object'` is safe (redundant-but-valid) versus self-contradictory.\n */\nfunction isProvablyObjectShapedRoot(schema: Record<string, unknown>): boolean {\n    if ('properties' in schema || 'patternProperties' in schema || 'additionalProperties' in schema || 'required' in schema) {\n        return true;\n    }\n    for (const key of ['oneOf', 'anyOf', 'allOf'] as const) {\n        const members = schema[key];\n        if (Array.isArray(members) && members.length > 0) {\n            return members.every(\n                m =>\n                    m !== null &&\n                    typeof m === 'object' &&\n                    ((m as Record<string, unknown>).type === 'object' || isProvablyObjectShapedRoot(m as Record<string, unknown>))\n            );\n        }\n    }\n    return false;\n}\n\n// Validation\n\nexport type StandardSchemaValidationResult<T> = { success: true; data: T } | { success: false; error: string };\n\nfunction formatIssue(issue: StandardSchemaV1.Issue): string {\n    if (!issue.path?.length) return issue.message;\n    const path = issue.path.map(p => String(typeof p === 'object' ? p.key : p)).join('.');\n    return `${path}: ${issue.message}`;\n}\n\nexport async function validateStandardSchema<T extends StandardSchemaV1>(\n    schema: T,\n    data: unknown\n): Promise<StandardSchemaValidationResult<StandardSchemaV1.InferOutput<T>>> {\n    const result = await schema['~standard'].validate(data);\n    if (result.issues && result.issues.length > 0) {\n        return { success: false, error: result.issues.map(i => formatIssue(i)).join(', ') };\n    }\n    return { success: true, data: (result as StandardSchemaV1.SuccessResult<unknown>).value as StandardSchemaV1.InferOutput<T> };\n}\n\n/*\n * Format-companion patterns: libraries realize a string `format` check as a companion\n * `pattern` regex, which the elicitation wire schema cannot carry. zod's are derived\n * from the resolved zod at runtime (never vendored — in-range releases change them), so\n * customized zod patterns are distinguishable and reject; other vendors' realizations\n * are unknowable (e.g. ArkType's `string.email`), so their patterns are trusted-and-dropped.\n */\n\nfunction zodEmittedPattern(schema: z.ZodType): string | undefined {\n    const jsonSchema = z.toJSONSchema(schema, { target: JSON_SCHEMA_CONVERSION_TARGET, io: 'input' }) as Record<string, unknown>;\n    return typeof jsonSchema.pattern === 'string' ? jsonSchema.pattern : undefined;\n}\n\nconst DATETIME_FRACTION_DIGITS = /\\\\\\.\\\\d\\{(\\d+)\\}/;\n\nfunction datetimeReferenceSchemas(pattern: string): z.ZodType[] {\n    // Options (offset/local/precision) vary the emission; recovering the fraction-digit\n    // count keeps the candidate set finite.\n    const fractionDigits = DATETIME_FRACTION_DIGITS.exec(pattern);\n    const precisions: Array<number | undefined> = [undefined, -1, 0];\n    if (fractionDigits) {\n        precisions.push(Number(fractionDigits[1]));\n    }\n    return [false, true].flatMap(local =>\n        [false, true].flatMap(offset => precisions.map(precision => z.iso.datetime({ local, offset, precision })))\n    );\n}\n\n// Exhaustive over the wire's format enum: a new spec format is a compile error here.\nfunction referencePatternsForFormat(format: NonNullable<StringSchema['format']>, pattern: string): ReadonlySet<string> {\n    let referenceSchemas: z.ZodType[];\n    switch (format) {\n        case 'email': {\n            referenceSchemas = [z.email()];\n            break;\n        }\n        case 'uri': {\n            referenceSchemas = [z.url()];\n            break;\n        }\n        case 'date': {\n            referenceSchemas = [z.iso.date()];\n            break;\n        }\n        case 'date-time': {\n            referenceSchemas = datetimeReferenceSchemas(pattern);\n            break;\n        }\n    }\n    return new Set(referenceSchemas.map(schema => zodEmittedPattern(schema)).filter((emitted): emitted is string => emitted !== undefined));\n}\n\n/** Whether `pattern` is the library's own realization of `format` (droppable) rather than a user customization. */\nexport function isLibraryFormatPattern(format: NonNullable<StringSchema['format']>, pattern: string, vendor: string): boolean {\n    if (vendor !== 'zod') {\n        return true;\n    }\n    return referencePatternsForFormat(format, pattern).has(pattern);\n}\n\n// Prompt argument extraction\n\nexport function promptArgumentsFromStandardSchema(\n    schema: StandardJSONSchemaV1\n): Array<{ name: string; description?: string; required: boolean }> {\n    const jsonSchema = standardSchemaToJsonSchema(schema, 'input');\n    const properties = (jsonSchema.properties as Record<string, { description?: string }>) || {};\n    const required = (jsonSchema.required as string[]) || [];\n\n    return Object.entries(properties).map(([name, prop]) => ({\n        name,\n        description: prop?.description,\n        required: required.includes(name)\n    }));\n}\n", "import { ProtocolErrorCode } from '../types/enums';\nimport { ProtocolError } from '../types/errors';\nimport {\n    BooleanSchemaSchema,\n    ElicitRequestFormParamsSchema,\n    LegacyTitledEnumSchemaSchema,\n    NumberSchemaSchema,\n    PrimitiveSchemaDefinitionSchema,\n    StringSchemaSchema,\n    TitledMultiSelectEnumSchemaSchema,\n    TitledSingleSelectEnumSchemaSchema,\n    UntitledMultiSelectEnumSchemaSchema,\n    UntitledSingleSelectEnumSchemaSchema\n} from '../types/schemas';\nimport type { ElicitRequestFormParams, StringSchema } from '../types/types';\nimport { parseSchema, shapeKeys } from '../util/schema';\nimport type { StandardSchemaWithJSON } from '../util/standardSchema';\nimport { isLibraryFormatPattern, isStandardSchema, standardSchemaToJsonSchema } from '../util/standardSchema';\n\n/** Input accepted by `inputRequired.elicit()`: a wire-ready elicitation JSON Schema or a Standard Schema. */\nexport type ElicitInputParams = Omit<ElicitRequestFormParams, 'requestedSchema'> & {\n    requestedSchema: ElicitRequestFormParams['requestedSchema'] | StandardSchemaWithJSON;\n};\n\nfunction isJsonObject(value: unknown): value is Record<string, unknown> {\n    return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction convertStandardElicitationSchema(schema: StandardSchemaWithJSON): Record<string, unknown> {\n    try {\n        return standardSchemaToJsonSchema(schema, 'input');\n    } catch (error) {\n        const detail = error instanceof Error ? error.message : String(error);\n        throw new ProtocolError(\n            ProtocolErrorCode.InvalidParams,\n            `Elicitation requestedSchema must describe an object with flat primitive properties: ${detail}`\n        );\n    }\n}\n\n// JSON Schema metadata-vocabulary keys: positions that cannot carry them drop them silently.\nconst ANNOTATION_ONLY_JSON_SCHEMA_KEYWORDS = new Set([\n    '$comment',\n    'deprecated',\n    'description',\n    'examples',\n    'readOnly',\n    'title',\n    'writeOnly'\n]);\n\nfunction isAnnotationOnlyJsonSchemaKeyword(key: string): boolean {\n    return ANNOTATION_ONLY_JSON_SCHEMA_KEYWORDS.has(key) || key.startsWith('x-');\n}\n\n// The wire grammar, derived from the wire schemas so it tracks spec revisions. `$schema`\n// is spec-declared on the root but reaches the wire type via its catchall.\nconst ROOT_KEYS = new Set(['$schema', ...Object.keys(ElicitRequestFormParamsSchema.shape.requestedSchema.shape)]);\n\nconst PROPERTY_KEYS_BY_TYPE: Record<string, ReadonlySet<string>> = {\n    string: shapeKeys([\n        StringSchemaSchema,\n        UntitledSingleSelectEnumSchemaSchema,\n        TitledSingleSelectEnumSchemaSchema,\n        LegacyTitledEnumSchemaSchema\n    ]),\n    number: shapeKeys([NumberSchemaSchema]),\n    integer: shapeKeys([NumberSchemaSchema]),\n    boolean: shapeKeys([BooleanSchemaSchema]),\n    array: shapeKeys([UntitledMultiSelectEnumSchemaSchema, TitledMultiSelectEnumSchemaSchema])\n};\n\nconst SUPPORTED_STRING_FORMATS: ReadonlySet<string> = new Set(StringSchemaSchema.shape.format.unwrap().options);\n\n/** Walks one property node: keeps grammar keys, drops the library format pattern, rejects unknown constraints. */\nfunction walkProperty(node: unknown, path: string, vendor: string, unsupported: string[]): unknown {\n    if (!isJsonObject(node)) {\n        return node;\n    }\n    // Object.hasOwn: a `type` like 'constructor' must not resolve through the prototype chain.\n    const allowedKeys =\n        typeof node.type === 'string' && Object.hasOwn(PROPERTY_KEYS_BY_TYPE, node.type) ? PROPERTY_KEYS_BY_TYPE[node.type] : undefined;\n    if (allowedKeys === undefined) {\n        // Unknown `type` — value validation rejects the node and names it.\n        return node;\n    }\n\n    const pruned: Record<string, unknown> = {};\n    for (const [key, value] of Object.entries(node)) {\n        if (allowedKeys.has(key) || isAnnotationOnlyJsonSchemaKeyword(key)) {\n            pruned[key] = value;\n        } else if (key === 'pattern' && node.type === 'string' && typeof node.format === 'string') {\n            if (!SUPPORTED_STRING_FORMATS.has(node.format)) {\n                pruned[key] = value; // the unsupported format itself fails value validation\n            } else if (\n                typeof value !== 'string' ||\n                !isLibraryFormatPattern(node.format as NonNullable<StringSchema['format']>, value, vendor)\n            ) {\n                // A customized pattern must not be silently weakened.\n                unsupported.push(`${path}.${key}`);\n            }\n        } else {\n            unsupported.push(`${path}.${key}`);\n        }\n    }\n    return pruned;\n}\n\n/** Walks the schema root: keeps the spec root keys, drops annotations, rejects the rest. */\nfunction walkRequestedSchema(converted: Record<string, unknown>, vendor: string): Record<string, unknown> {\n    const pruned: Record<string, unknown> = {};\n    const unsupported: string[] = [];\n    for (const [key, value] of Object.entries(converted)) {\n        if (key === 'properties' && isJsonObject(value)) {\n            pruned[key] = Object.fromEntries(\n                Object.entries(value).map(([name, node]) => [name, walkProperty(node, `properties.${name}`, vendor, unsupported)])\n            );\n        } else if (ROOT_KEYS.has(key)) {\n            pruned[key] = value;\n        } else if (!isAnnotationOnlyJsonSchemaKeyword(key)) {\n            unsupported.push(key);\n        }\n    }\n    if (unsupported.length > 0) {\n        throw new ProtocolError(\n            ProtocolErrorCode.InvalidParams,\n            `Elicitation requestedSchema contains unsupported JSON Schema constraint(s) after Standard Schema conversion: ${unsupported.join(', ')}`\n        );\n    }\n    return pruned;\n}\n\n/** Names the properties that fail value validation, instead of surfacing a raw union dump. */\nfunction describeUnsupportedProperties(pruned: Record<string, unknown>, fallback: string): string {\n    if (!isJsonObject(pruned.properties)) {\n        return fallback;\n    }\n    const offenders = Object.entries(pruned.properties)\n        .filter(([, node]) => !parseSchema(PrimitiveSchemaDefinitionSchema, node).success)\n        .map(([name]) => `properties.${name}`);\n    return offenders.length > 0 ? offenders.join(', ') : fallback;\n}\n\n// Safety net: value validation strips key combinations no single wire shape carries\n// (e.g. `format` beside `enum`); a dropped non-annotation key must reject.\nfunction findDroppedConstraintPaths(original: unknown, parsed: unknown, path = ''): string[] {\n    if (Array.isArray(original) && Array.isArray(parsed)) {\n        return original.flatMap((item, index) => findDroppedConstraintPaths(item, parsed[index], `${path}[${index}]`));\n    }\n    if (!isJsonObject(original) || !isJsonObject(parsed)) {\n        return [];\n    }\n    return Object.entries(original).flatMap(([key, value]) => {\n        const childPath = path ? `${path}.${key}` : key;\n        if (!Object.prototype.hasOwnProperty.call(parsed, key)) {\n            return isAnnotationOnlyJsonSchemaKeyword(key) ? [] : [childPath];\n        }\n        return findDroppedConstraintPaths(value, parsed[key], childPath);\n    });\n}\n\n/** Converts an authoring-friendly elicitation input into its wire-ready form. */\nexport function normalizeElicitInputParams(input: ElicitInputParams): ElicitRequestFormParams {\n    // Route on `~standard.validate`: the converter owns the per-vendor fallback (zod\n    // 4.0/4.1 has no `~standard.jsonSchema`) — same decision as normalizeRawShapeSchema.\n    if (!isStandardSchema(input.requestedSchema)) {\n        return { ...input, mode: 'form', requestedSchema: input.requestedSchema };\n    }\n\n    const vendor = input.requestedSchema['~standard'].vendor;\n    const pruned = walkRequestedSchema(convertStandardElicitationSchema(input.requestedSchema), vendor);\n\n    // Scoped to the converted schema so params-level fields behave as on the raw branch.\n    const parsed = parseSchema(ElicitRequestFormParamsSchema.shape.requestedSchema, pruned);\n    if (!parsed.success) {\n        throw new ProtocolError(\n            ProtocolErrorCode.InvalidParams,\n            `Elicitation requestedSchema only supports flat primitive properties (string, number, integer, boolean, and string enums): ${describeUnsupportedProperties(pruned, parsed.error.message)}`\n        );\n    }\n\n    const droppedConstraints = findDroppedConstraintPaths(pruned, parsed.data);\n    if (droppedConstraints.length > 0) {\n        throw new ProtocolError(\n            ProtocolErrorCode.InvalidParams,\n            `Elicitation requestedSchema contains unsupported JSON Schema constraint(s) after Standard Schema conversion: ${droppedConstraints.join(', ')}`\n        );\n    }\n\n    // Converters can lose exotic property names from `properties` while keeping them in\n    // `required` (zod's toJSONSchema does for `__proto__`).\n    const danglingRequired = (parsed.data.required ?? []).filter(key => !Object.prototype.hasOwnProperty.call(parsed.data.properties, key));\n    if (danglingRequired.length > 0) {\n        throw new ProtocolError(\n            ProtocolErrorCode.InvalidParams,\n            `Elicitation requestedSchema lists required properties that are not defined in properties: ${danglingRequired.join(', ')}`\n        );\n    }\n\n    return { ...input, mode: 'form', requestedSchema: parsed.data };\n}\n", "/**\n * Authoring helpers for multi-round-trip requests (protocol revision\n * 2026-07-28).\n *\n * A handler for one of the multi-round-trip methods (`tools/call`,\n * `prompts/get`, `resources/read`) requests additional client input by\n * returning an {@linkcode InputRequiredResult} instead of a final result. The\n * helpers here build that return value and its embedded requests as NEUTRAL\n * values; only the 2026-07-28 wire codec maps them to/from the wire. The\n * 2025-era codec has no input-required vocabulary — on a 2025-era request the\n * server's legacy shim (on by default) fulfils the embedded requests as real\n * server→client requests and re-enters the handler, so the same return shape\n * serves both eras; `ServerOptions.inputRequired.legacyShim: false` restores\n * the pre-shim loud failure.\n *\n * There is no nominal brand: `resultType: 'input_required'` is the\n * discriminator, and hand-built result literals are equally legal — the\n * server seam re-checks the at-least-one rule for them.\n */\nimport { ProtocolError } from '../types/errors';\nimport { isInputRequiredResult } from '../types/guards';\nimport type {\n    CreateMessageRequestParams,\n    CreateMessageResult,\n    CreateMessageResultWithTools,\n    ElicitRequestURLParams,\n    InputRequest,\n    InputRequests,\n    InputRequiredResult,\n    InputResponses,\n    Root\n} from '../types/types';\nimport type { StandardSchemaV1 } from '../util/standardSchema';\nimport type { ElicitInputParams } from './elicitation';\nimport { normalizeElicitInputParams } from './elicitation';\n\nexport type { ElicitInputParams } from './elicitation';\n\n/** The shape accepted by {@linkcode inputRequired}. */\nexport interface InputRequiredSpec {\n    /** Embedded requests the client must fulfil before retrying. */\n    inputRequests?: InputRequests;\n    /** Opaque server state echoed back verbatim by the client on retry. */\n    requestState?: string;\n}\n\ninterface InputRequiredBuilder {\n    /**\n     * Builds the input-required return value for a multi-round-trip handler.\n     *\n     * At least one of `inputRequests` or `requestState` must be provided\n     * (spec: basic/patterns/mrtr, server requirements) — the builder throws a\n     * `TypeError` otherwise, and the server seam re-checks the same rule for\n     * hand-built results.\n     *\n     * `requestState` is opaque, server-minted state. It round-trips through\n     * the client and comes back as attacker-controlled input: a server that\n     * lets it influence authorization, resource access, or business logic\n     * MUST integrity-protect it (e.g. HMAC or AEAD) and MUST reject state\n     * that fails verification. The SDK does not do this for you.\n     */\n    (spec: InputRequiredSpec): InputRequiredResult;\n\n    /**\n     * Builds an embedded form-mode elicitation request (`elicitation/create`).\n     *\n     * A Standard Schema `requestedSchema` is converted to the restricted wire shape;\n     * shapes it cannot express throw a `TypeError` before anything is sent. Responses\n     * are not validated against it — pass the same schema to `acceptedContent()` on\n     * re-entry for validated, typed content.\n     */\n    elicit(params: ElicitInputParams): InputRequest;\n\n    /**\n     * Builds an embedded URL-mode elicitation request (`elicitation/create`).\n     * On the 2026-07-28 revision URL elicitation rides the multi-round-trip\n     * flow — the `-32042` error of earlier revisions never appears on this\n     * era's wire. The 2025-era `elicitationId` is not part of the 2026-07-28\n     * URL-mode shape; correlation across retries is the server's own\n     * identifier inside `requestState`.\n     */\n    elicitUrl(params: Omit<ElicitRequestURLParams, 'mode' | 'elicitationId'>): InputRequest;\n\n    /** Builds an embedded sampling request (`sampling/createMessage`). */\n    createMessage(params: CreateMessageRequestParams): InputRequest;\n\n    /** Builds an embedded roots listing request (`roots/list`). */\n    listRoots(): InputRequest;\n}\n\nfunction buildInputRequired(spec: InputRequiredSpec): InputRequiredResult {\n    const hasInputRequests = spec.inputRequests !== undefined && Object.keys(spec.inputRequests).length > 0;\n    const hasRequestState = typeof spec.requestState === 'string';\n    if (!hasInputRequests && !hasRequestState) {\n        throw new TypeError(\n            'inputRequired() requires at least one of inputRequests (with at least one entry) or requestState ' +\n                '(spec: every InputRequiredResult MUST include at least one of the two)'\n        );\n    }\n    return {\n        resultType: 'input_required',\n        ...(spec.inputRequests !== undefined && { inputRequests: spec.inputRequests }),\n        ...(spec.requestState !== undefined && { requestState: spec.requestState })\n    };\n}\n\n/**\n * Builder for the input-required return value of multi-round-trip handlers,\n * with per-kind constructors for the embedded requests\n * (`inputRequired.elicit`, `inputRequired.elicitUrl`,\n * `inputRequired.createMessage`, `inputRequired.listRoots`).\n *\n * @example Write-once tool requesting confirmation\n * ```ts\n * server.registerTool('deploy', { inputSchema: z.object({ env: z.string() }) }, async ({ env }, ctx) => {\n *     const confirmationSchema = z.object({ confirm: z.boolean() });\n *     const confirmed = acceptedContent(ctx.mcpReq.inputResponses, 'confirm', confirmationSchema);\n *     if (confirmed?.confirm !== true) {\n *         return inputRequired({\n *             inputRequests: {\n *                 confirm: inputRequired.elicit({\n *                     message: `Deploy to ${env}?`,\n *                     requestedSchema: confirmationSchema\n *                 })\n *             }\n *         });\n *     }\n *     return { content: [{ type: 'text', text: `deployed to ${env}` }] };\n * });\n * ```\n */\nexport const inputRequired: InputRequiredBuilder = Object.assign(buildInputRequired, {\n    elicit(params: ElicitInputParams): InputRequest {\n        try {\n            return { method: 'elicitation/create', params: normalizeElicitInputParams(params) };\n        } catch (error) {\n            throw error instanceof ProtocolError ? new TypeError(error.message, { cause: error }) : error;\n        }\n    },\n    elicitUrl(params: Omit<ElicitRequestURLParams, 'mode' | 'elicitationId'>): InputRequest {\n        // The neutral ElicitRequestURLParams keeps `elicitationId` (it is required on the\n        // frozen 2025-11-25 revision); the 2026-07-28 in-band shape does not carry it.\n        return { method: 'elicitation/create', params: { ...params, mode: 'url' } as ElicitRequestURLParams };\n    },\n    createMessage(params: CreateMessageRequestParams): InputRequest {\n        return { method: 'sampling/createMessage', params };\n    },\n    listRoots(): InputRequest {\n        return { method: 'roots/list' };\n    }\n});\n\n/**\n * Reads the accepted content of a form-mode elicitation response from a\n * retried request's `inputResponses` (`ctx.mcpReq.inputResponses`).\n *\n * Returns the response's `content` for `key` when the entry is an accepted\n * elicitation result, and `undefined` otherwise (missing key, declined or\n * cancelled elicitation, or a response of another kind). The values arrive\n * from the client and are not re-validated here — treat them as untrusted\n * input.\n */\nexport function acceptedContent<T extends Record<string, unknown> = Record<string, unknown>>(\n    responses: InputResponses | Record<string, unknown> | undefined,\n    key: string\n): T | undefined;\n\n/**\n * Schema-aware overload: validates the accepted content against the given\n * schema (any Standard Schema, e.g. a zod object) before returning it, so the\n * untrusted client value arrives in the handler already validated and typed.\n *\n * Returns `undefined` when the response is missing/declined/of another kind\n * (as the two-argument form does) AND when the accepted content fails schema\n * validation — handlers treat both the same way (re-issue the request or\n * give up). Only synchronous schemas are supported (zod schemas without async\n * refinements are synchronous); an asynchronously-validating schema throws a\n * `TypeError`.\n */\nexport function acceptedContent<S extends StandardSchemaV1>(\n    responses: InputResponses | Record<string, unknown> | undefined,\n    key: string,\n    schema: S\n): StandardSchemaV1.InferOutput<S> | undefined;\n\nexport function acceptedContent(\n    responses: InputResponses | Record<string, unknown> | undefined,\n    key: string,\n    schema?: StandardSchemaV1\n): unknown {\n    const view = inputResponse(responses, key);\n    if (view.kind !== 'elicit' || view.action !== 'accept' || view.content === undefined) return undefined;\n    if (schema === undefined) return view.content;\n    const outcome = schema['~standard'].validate(view.content);\n    if (outcome instanceof Promise) {\n        throw new TypeError('acceptedContent(responses, key, schema) requires a synchronously-validating schema');\n    }\n    return outcome.issues === undefined ? outcome.value : undefined;\n}\n\n/**\n * The discriminated view {@linkcode inputResponse} returns: which kind of\n * embedded response (if any) a retried request carried for a key. Bare\n * response objects are discriminated structurally — an `action` member means\n * an elicitation result, a `roots` array a roots listing, a `role` + `content`\n * pair a sampling result. A missing key or an entry that matches none of the\n * three shapes reads as `{ kind: 'missing' }`.\n */\nexport type InputResponseView =\n    | { kind: 'missing' }\n    | { kind: 'elicit'; action: 'accept' | 'decline' | 'cancel'; content?: Record<string, unknown> }\n    | { kind: 'sampling'; result: CreateMessageResult | CreateMessageResultWithTools }\n    | { kind: 'roots'; roots: Root[] };\n\n/**\n * Reads one entry of a retried request's `inputResponses`\n * (`ctx.mcpReq.inputResponses`) as a discriminated view, covering\n * decline/cancel detection and the non-elicitation response kinds that\n * {@linkcode acceptedContent} does not surface.\n *\n * The values arrive from the client and are not re-validated here — treat\n * them as untrusted input (validate elicitation content with the\n * schema-aware {@linkcode acceptedContent} overload where it matters).\n */\nexport function inputResponse(responses: InputResponses | Record<string, unknown> | undefined, key: string): InputResponseView {\n    if (responses === undefined || typeof responses !== 'object' || responses === null) return { kind: 'missing' };\n    const entry = (responses as Record<string, unknown>)[key];\n    if (entry === null || typeof entry !== 'object' || Array.isArray(entry)) return { kind: 'missing' };\n    const candidate = entry as Record<string, unknown>;\n    if (candidate['action'] === 'accept' || candidate['action'] === 'decline' || candidate['action'] === 'cancel') {\n        const content = candidate['content'];\n        return {\n            kind: 'elicit',\n            action: candidate['action'],\n            ...(content !== null &&\n                typeof content === 'object' &&\n                !Array.isArray(content) && { content: content as Record<string, unknown> })\n        };\n    }\n    if (Array.isArray(candidate['roots'])) {\n        return { kind: 'roots', roots: candidate['roots'] as Root[] };\n    }\n    if (typeof candidate['role'] === 'string' && candidate['content'] !== undefined) {\n        return { kind: 'sampling', result: candidate as unknown as CreateMessageResult | CreateMessageResultWithTools };\n    }\n    return { kind: 'missing' };\n}\n\n/**\n * Wraps a result schema so a request issued through `client.request()` /\n * `ctx.mcpReq.send()` with `allowInputRequired: true` is typed as either the\n * schema's result or an {@linkcode InputRequiredResult}.\n *\n * The manual multi-round-trip path: pass `{ allowInputRequired: true }` in the\n * request options so an `input_required` response is handed back to the\n * caller instead of being auto-fulfilled (or rejected), and wrap the result\n * schema with `withInputRequired()` so the returned value is typed and\n * validated correctly for both outcomes — `input_required` values pass\n * through as-is, complete results validate against the wrapped schema.\n */\nexport function withInputRequired<S extends StandardSchemaV1>(\n    schema: S\n): StandardSchemaV1<unknown, StandardSchemaV1.InferOutput<S> | InputRequiredResult> {\n    return {\n        '~standard': {\n            version: 1,\n            vendor: 'modelcontextprotocol',\n            validate: (value: unknown, options?: StandardSchemaV1.Options) => {\n                if (isInputRequiredResult(value)) {\n                    return { value };\n                }\n                return schema['~standard'].validate(value, options) as\n                    | StandardSchemaV1.Result<StandardSchemaV1.InferOutput<S> | InputRequiredResult>\n                    | Promise<StandardSchemaV1.Result<StandardSchemaV1.InferOutput<S> | InputRequiredResult>>;\n            }\n        }\n    };\n}\n", "/**\n * The multi-round-trip auto-fulfilment driver (protocol revision 2026-07-28).\n *\n * When a request to one of the multi-round-trip methods comes back as\n * `input_required`, the driver fulfils the embedded input requests by\n * dispatching them to the client's already-registered handlers (elicitation,\n * sampling, roots — one generic engine, no per-feature API), then retries the\n * original request with the collected `inputResponses` and a byte-exact echo\n * of `requestState`, on a fresh request id, until the server returns a\n * complete result or the round cap is exhausted.\n *\n * The driver is a LAYER OVER THE MANUAL PATH: each retry is issued with the\n * same primitive a manual caller uses (`allowInputRequired` semantics — the\n * retry hands back the next `input_required` payload instead of recursing),\n * so the loop, the cap, and the pacing live in one place and disabling\n * auto-fulfilment (`inputRequired.autoFulfill: false`) simply skips this\n * module. Timeouts ride the EXISTING knobs: the per-leg `timeout` applies to\n * every wire leg unchanged, and `maxTotalTimeout` bounds the whole flow by\n * shrinking the budget passed to each leg — no new timer system.\n */\nimport { SdkError, SdkErrorCode } from '../errors/sdkErrors';\nimport { isInputRequiredResult } from '../types/guards';\nimport type { Progress } from '../types/types';\n\n/**\n * Whether the multi-round-trip driver fulfils `input_required` results\n * automatically when the consumer has not configured\n * `inputRequired.autoFulfill`. The single switch for the default posture.\n */\nexport const DEFAULT_INPUT_REQUIRED_AUTO_FULFILL = true;\n\n/**\n * Default round cap for the auto-fulfilment driver (both request legs and\n * requestState-only legs count). Aligned with the other SDK client engines.\n */\nexport const DEFAULT_INPUT_REQUIRED_MAX_ROUNDS = 10;\n\n/**\n * Fixed pacing applied before retrying a requestState-only (load-shedding)\n * leg — a leg that carries no embedded input requests, so nothing slows the\n * loop down naturally. Counted in the same round cap.\n */\nexport const REQUEST_STATE_ONLY_LEG_PACING_MS = 250;\n\n/**\n * Multi-round-trip driver options (`inputRequired` on the client options bag).\n */\nexport interface InputRequiredOptions {\n    /**\n     * Fulfil `input_required` results automatically by dispatching the\n     * embedded requests to the registered handlers and retrying.\n     *\n     * Set to `false` for manual mode: an `input_required` response then\n     * surfaces as a typed error unless the individual call opts in with\n     * `allowInputRequired: true` (and, for typed results on the explicit\n     * schema path, `withInputRequired()`).\n     *\n     * @default true\n     */\n    autoFulfill?: boolean;\n\n    /**\n     * Maximum number of rounds (retries) the driver performs for a single\n     * call before failing with a typed\n     * {@linkcode SdkErrorCode.InputRequiredRoundsExceeded} error.\n     *\n     * @default 10\n     */\n    maxRounds?: number;\n}\n\n/** The driver configuration with defaults applied. */\nexport interface ResolvedInputRequiredDriverConfig {\n    autoFulfill: boolean;\n    maxRounds: number;\n}\n\nexport function resolveInputRequiredDriverConfig(options: InputRequiredOptions | undefined): ResolvedInputRequiredDriverConfig {\n    return {\n        autoFulfill: options?.autoFulfill ?? DEFAULT_INPUT_REQUIRED_AUTO_FULFILL,\n        maxRounds: options?.maxRounds ?? DEFAULT_INPUT_REQUIRED_MAX_ROUNDS\n    };\n}\n\n/** The discriminated `input_required` payload the wire codec hands to the driver. */\nexport interface InputRequiredPayload {\n    inputRequests: Record<string, unknown>;\n    requestState?: string;\n}\n\n/** The slice of per-request options the driver consumes. */\nexport interface InputRequiredDriverRequestOptions {\n    timeout?: number;\n    maxTotalTimeout?: number;\n    onprogress?: (progress: Progress) => void;\n}\n\n/** Per-leg options the driver passes back to the funnel for each retry. */\nexport interface InputRequiredRetryLegOptions {\n    timeout?: number;\n    maxTotalTimeout?: number;\n}\n\n/** The hooks the engine provides to the driver. */\nexport interface InputRequiredDriverHooks {\n    /**\n     * Dispatches one embedded input request to the locally registered handler\n     * and resolves with the bare response value. Rejections fail the whole\n     * call (typed errors: unknown kind, missing handler, handler failure).\n     * The signal is the per-round abort: when one sibling fails (or the\n     * caller aborts the originating call) the remaining dispatches are\n     * cancelled.\n     */\n    dispatchInputRequest(key: string, entry: unknown, signal: AbortSignal): Promise<unknown>;\n\n    /**\n     * Re-issues the original request with the given params on a fresh request\n     * id, using the manual primitive: a complete result resolves validated,\n     * and a further `input_required` response resolves as the raw\n     * input-required value (never recursing into another driver run).\n     */\n    retry(params: Record<string, unknown> | undefined, legOptions: InputRequiredRetryLegOptions): Promise<unknown>;\n}\n\n/** Builds the retry params: original params + this round's responses + byte-exact requestState echo. */\nexport function buildInputRequiredRetryParams(\n    originalParams: Record<string, unknown> | undefined,\n    responses: Record<string, unknown> | undefined,\n    requestState: string | undefined\n): Record<string, unknown> | undefined {\n    const hasResponses = responses !== undefined && Object.keys(responses).length > 0;\n    if (!hasResponses && requestState === undefined) {\n        return originalParams;\n    }\n    return {\n        ...originalParams,\n        ...(hasResponses && { inputResponses: responses }),\n        // Byte-exact echo: the opaque string is copied verbatim, never parsed.\n        // When the result carried no requestState, the retry carries none.\n        ...(requestState !== undefined && { requestState })\n    };\n}\n\n/**\n * The message both multi-round-trip loops emit when the round cap is\n * exhausted — the client driver as a typed error, the server-side legacy\n * shim as its per-family failure. One formatter so the texts cannot drift\n * (hosts and models read the tool-result copy verbatim).\n */\nexport function inputRequiredRoundsExceededMessage(method: string, maxRounds: number): string {\n    return `Multi-round-trip request '${method}' still required input after ${maxRounds} rounds (inputRequired.maxRounds)`;\n}\n\n/**\n * Abortable delay: resolves after `ms`, or rejects with the signal's reason\n * (wrapped in an `SdkError` when it isn't already one) if the signal aborts\n * first. Aborting after resolution is a no-op. Shared with the server-side\n * legacy shim (the pacing semantics must match per era).\n */\nexport function sleep(ms: number, signal: AbortSignal | undefined): Promise<void> {\n    return new Promise((resolve, reject) => {\n        if (signal?.aborted) {\n            reject(signal.reason instanceof SdkError ? signal.reason : new SdkError(SdkErrorCode.RequestTimeout, String(signal.reason)));\n            return;\n        }\n        const timer = setTimeout(() => {\n            signal?.removeEventListener('abort', onAbort);\n            resolve();\n        }, ms);\n        const onAbort = (): void => {\n            clearTimeout(timer);\n            reject(signal?.reason instanceof SdkError ? signal.reason : new SdkError(SdkErrorCode.RequestTimeout, String(signal?.reason)));\n        };\n        signal?.addEventListener('abort', onAbort, { once: true });\n    });\n}\n\n/**\n * A per-round abort linked to the caller's signal: the embedded sibling\n * dispatches share it, so the first failure (or a caller abort) cancels the\n * others instead of leaving them running. Shared with the server-side legacy\n * shim (the abort-linkage semantics must match per era).\n */\nexport function linkedRoundAbort(outer: AbortSignal | undefined): {\n    signal: AbortSignal;\n    abort: (reason: unknown) => void;\n    dispose: () => void;\n} {\n    const controller = new AbortController();\n    const onOuterAbort = (): void => controller.abort(outer?.reason);\n    outer?.addEventListener('abort', onOuterAbort, { once: true });\n    if (outer?.aborted) controller.abort(outer.reason);\n    return {\n        signal: controller.signal,\n        abort: reason => controller.abort(reason),\n        dispose: () => outer?.removeEventListener('abort', onOuterAbort)\n    };\n}\n\n/**\n * Runs the auto-fulfilment loop for one originating request. Resolves with\n * the final complete result (already validated by the retry leg) or rejects\n * with a typed error.\n *\n * `flowStartedAt` is the timestamp the ORIGINAL request was issued at (not\n * when the driver started): `maxTotalTimeout` bounds the whole flow, so the\n * first wire leg counts against the budget too. When omitted, accounting\n * starts when the driver starts.\n */\nexport async function runInputRequiredDriver(args: {\n    config: ResolvedInputRequiredDriverConfig;\n    method: string;\n    originalParams: Record<string, unknown> | undefined;\n    firstPayload: InputRequiredPayload;\n    requestOptions: InputRequiredDriverRequestOptions;\n    hooks: InputRequiredDriverHooks;\n    /** The originating call's abort signal — chains through every round and the pacing sleep. */\n    signal?: AbortSignal;\n    flowStartedAt?: number;\n}): Promise<unknown> {\n    const { config, method, originalParams, requestOptions, hooks, signal } = args;\n    const startedAt = args.flowStartedAt ?? Date.now();\n    let payload = args.firstPayload;\n    let round = 0;\n\n    // eslint-disable-next-line no-constant-condition\n    while (true) {\n        round += 1;\n        if (round > config.maxRounds) {\n            throw new SdkError(SdkErrorCode.InputRequiredRoundsExceeded, inputRequiredRoundsExceededMessage(method, config.maxRounds), {\n                rounds: config.maxRounds,\n                lastResult: {\n                    inputRequests: payload.inputRequests,\n                    ...(payload.requestState !== undefined && { requestState: payload.requestState })\n                }\n            });\n        }\n\n        // Surface the round as synthetic progress: long interactive flows stay\n        // observable, and consumers composing `resetTimeoutOnProgress`-style\n        // watchdogs around the call see liveness instead of silence.\n        requestOptions.onprogress?.({ progress: round, message: `Fulfilling input required by '${method}' (round ${round})` });\n\n        const entries = Object.entries(payload.inputRequests ?? {});\n        let responses: Record<string, unknown> | undefined;\n        if (entries.length > 0) {\n            // Fulfil concurrently (the embedded requests are independent); a\n            // single failure fails the call AND aborts the siblings via the\n            // linked per-round signal so they do not keep running.\n            const round = linkedRoundAbort(signal);\n            try {\n                const fulfilled = await Promise.all(\n                    entries.map(async ([key, entry]) => {\n                        try {\n                            return [key, await hooks.dispatchInputRequest(key, entry, round.signal)] as const;\n                        } catch (error) {\n                            round.abort(error);\n                            throw error;\n                        }\n                    })\n                );\n                responses = Object.fromEntries(fulfilled);\n            } finally {\n                round.dispose();\n            }\n        } else {\n            // requestState-only (load-shedding) leg: fixed pacing so the loop\n            // never hot-spins; counted in the same round cap. The sleep\n            // honors the caller's abort signal.\n            await sleep(REQUEST_STATE_ONLY_LEG_PACING_MS, signal);\n        }\n\n        const legOptions: InputRequiredRetryLegOptions = {\n            ...(requestOptions.timeout !== undefined && { timeout: requestOptions.timeout })\n        };\n        if (requestOptions.maxTotalTimeout !== undefined) {\n            const totalElapsed = Date.now() - startedAt;\n            const remaining = requestOptions.maxTotalTimeout - totalElapsed;\n            if (remaining <= 0) {\n                throw new SdkError(SdkErrorCode.RequestTimeout, 'Maximum total timeout exceeded', {\n                    maxTotalTimeout: requestOptions.maxTotalTimeout,\n                    totalElapsed\n                });\n            }\n            legOptions.maxTotalTimeout = remaining;\n        }\n\n        const result = await hooks.retry(buildInputRequiredRetryParams(originalParams, responses, payload.requestState), legOptions);\n        if (isInputRequiredResult(result)) {\n            payload = {\n                inputRequests: result.inputRequests ?? {},\n                ...(result.requestState !== undefined && { requestState: result.requestState })\n            };\n            continue;\n        }\n        return result;\n    }\n}\n", "import type * as z from 'zod/v4';\n\nimport {\n    IdJagTokenExchangeResponseSchema,\n    OAuthClientInformationFullSchema,\n    OAuthClientInformationSchema,\n    OAuthClientMetadataSchema,\n    OAuthClientRegistrationErrorSchema,\n    OAuthErrorResponseSchema,\n    OAuthMetadataSchema,\n    OAuthProtectedResourceMetadataSchema,\n    OAuthTokenRevocationRequestSchema,\n    OAuthTokensSchema,\n    OpenIdProviderDiscoveryMetadataSchema,\n    OpenIdProviderMetadataSchema\n} from '../shared/auth';\nimport type { StandardSchemaV1, StandardSchemaV1Sync } from '../util/standardSchema';\nimport * as schemas from './schemas';\n\n/**\n * Explicit allowlist of protocol Zod schemas that correspond to a public spec type in `types.ts`.\n *\n * This intentionally excludes internal helper schemas exported from `schemas.ts` that have no\n * matching public type (e.g. `ListChangedOptionsBaseSchema`, `BaseRequestParamsSchema`,\n * `NotificationsParamsSchema`, `ClientTasksCapabilitySchema`, `ServerTasksCapabilitySchema`).\n * Keeping the list explicit means new public spec types must be added here deliberately, and\n * internals never leak into `SpecTypeName`.\n *\n * `ResourceTemplateSchema` is included; its public type is exported as `ResourceTemplateType`\n * (the bare name collides with the server package's `ResourceTemplate` class), so\n * `SpecTypes['ResourceTemplate']` is structurally equal to `ResourceTemplateType` rather than to\n * a type literally named `ResourceTemplate`.\n */\nconst SPEC_SCHEMA_KEYS = [\n    'AnnotationsSchema',\n    'AudioContentSchema',\n    'BaseMetadataSchema',\n    'BlobResourceContentsSchema',\n    'BooleanSchemaSchema',\n    'CallToolRequestSchema',\n    'CallToolRequestParamsSchema',\n    'CallToolResultSchema',\n    'CancelledNotificationSchema',\n    'CancelledNotificationParamsSchema',\n    'CancelTaskRequestSchema',\n    'CancelTaskResultSchema',\n    'ClientCapabilitiesSchema',\n    'ClientNotificationSchema',\n    'ClientRequestSchema',\n    'ClientResultSchema',\n    'CompatibilityCallToolResultSchema',\n    'CompleteRequestSchema',\n    'CompleteRequestParamsSchema',\n    'CompleteResultSchema',\n    'ContentBlockSchema',\n    'CreateMessageRequestSchema',\n    'CreateMessageRequestParamsSchema',\n    'CreateMessageResultSchema',\n    'CreateMessageResultWithToolsSchema',\n    'CreateTaskResultSchema',\n    'CursorSchema',\n    'DiscoverRequestSchema',\n    'DiscoverResultSchema',\n    'ElicitationCompleteNotificationSchema',\n    'ElicitationCompleteNotificationParamsSchema',\n    'ElicitRequestSchema',\n    'ElicitRequestFormParamsSchema',\n    'ElicitRequestParamsSchema',\n    'ElicitRequestURLParamsSchema',\n    'ElicitResultSchema',\n    'EmbeddedResourceSchema',\n    'EmptyResultSchema',\n    'EnumSchemaSchema',\n    'GetPromptRequestSchema',\n    'GetPromptRequestParamsSchema',\n    'GetPromptResultSchema',\n    'GetTaskPayloadRequestSchema',\n    'GetTaskPayloadResultSchema',\n    'GetTaskRequestSchema',\n    'GetTaskResultSchema',\n    'IconSchema',\n    'IconsSchema',\n    'ImageContentSchema',\n    'ImplementationSchema',\n    'InitializedNotificationSchema',\n    'InitializeRequestSchema',\n    'InitializeRequestParamsSchema',\n    'InitializeResultSchema',\n    'JSONArraySchema',\n    'JSONObjectSchema',\n    'JSONRPCErrorResponseSchema',\n    'JSONRPCMessageSchema',\n    'JSONRPCNotificationSchema',\n    'JSONRPCRequestSchema',\n    'JSONRPCResponseSchema',\n    'JSONRPCResultResponseSchema',\n    'JSONValueSchema',\n    'LegacyTitledEnumSchemaSchema',\n    'ListPromptsRequestSchema',\n    'ListPromptsResultSchema',\n    'ListResourcesRequestSchema',\n    'ListResourcesResultSchema',\n    'ListResourceTemplatesRequestSchema',\n    'ListResourceTemplatesResultSchema',\n    'ListRootsRequestSchema',\n    'ListRootsResultSchema',\n    'ListTasksRequestSchema',\n    'ListTasksResultSchema',\n    'ListToolsRequestSchema',\n    'ListToolsResultSchema',\n    'LoggingLevelSchema',\n    'LoggingMessageNotificationSchema',\n    'LoggingMessageNotificationParamsSchema',\n    'ModelHintSchema',\n    'ModelPreferencesSchema',\n    'MultiSelectEnumSchemaSchema',\n    'NotificationSchema',\n    'NumberSchemaSchema',\n    'PaginatedRequestSchema',\n    'PaginatedRequestParamsSchema',\n    'PaginatedResultSchema',\n    'PingRequestSchema',\n    'PrimitiveSchemaDefinitionSchema',\n    'ProgressSchema',\n    'ProgressNotificationSchema',\n    'ProgressNotificationParamsSchema',\n    'ProgressTokenSchema',\n    'PromptSchema',\n    'PromptArgumentSchema',\n    'PromptListChangedNotificationSchema',\n    'PromptMessageSchema',\n    'PromptReferenceSchema',\n    'ReadResourceRequestSchema',\n    'ReadResourceRequestParamsSchema',\n    'ReadResourceResultSchema',\n    'RelatedTaskMetadataSchema',\n    'RequestSchema',\n    'RequestIdSchema',\n    'RequestMetaSchema',\n    'ResourceSchema',\n    'ResourceContentsSchema',\n    'ResourceLinkSchema',\n    'ResourceListChangedNotificationSchema',\n    'ResourceRequestParamsSchema',\n    'ResourceTemplateSchema',\n    'ResourceTemplateReferenceSchema',\n    'ResourceUpdatedNotificationSchema',\n    'ResourceUpdatedNotificationParamsSchema',\n    'ResultMetaObjectSchema',\n    'ResultSchema',\n    'RoleSchema',\n    'RootSchema',\n    'RootsListChangedNotificationSchema',\n    'SamplingContentSchema',\n    'SamplingMessageSchema',\n    'SamplingMessageContentBlockSchema',\n    'ServerCapabilitiesSchema',\n    'ServerNotificationSchema',\n    'ServerRequestSchema',\n    'ServerResultSchema',\n    'SetLevelRequestSchema',\n    'SetLevelRequestParamsSchema',\n    'SingleSelectEnumSchemaSchema',\n    'StringSchemaSchema',\n    'SubscribeRequestSchema',\n    'SubscribeRequestParamsSchema',\n    'SubscriptionFilterSchema',\n    'SubscriptionsAcknowledgedNotificationSchema',\n    'SubscriptionsAcknowledgedNotificationParamsSchema',\n    'SubscriptionsListenRequestSchema',\n    'SubscriptionsListenRequestParamsSchema',\n    'SubscriptionsListenResultSchema',\n    'SubscriptionsListenResultMetaSchema',\n    'TaskAugmentedRequestParamsSchema',\n    'TaskCreationParamsSchema',\n    'TaskMetadataSchema',\n    'TaskSchema',\n    'TaskStatusSchema',\n    'TaskStatusNotificationSchema',\n    'TaskStatusNotificationParamsSchema',\n    'TextContentSchema',\n    'TextResourceContentsSchema',\n    'TitledMultiSelectEnumSchemaSchema',\n    'TitledSingleSelectEnumSchemaSchema',\n    'ToolSchema',\n    'ToolAnnotationsSchema',\n    'ToolChoiceSchema',\n    'ToolExecutionSchema',\n    'ToolListChangedNotificationSchema',\n    'ToolResultContentSchema',\n    'ToolUseContentSchema',\n    'UnsubscribeRequestSchema',\n    'UnsubscribeRequestParamsSchema',\n    'UntitledMultiSelectEnumSchemaSchema',\n    'UntitledSingleSelectEnumSchemaSchema'\n] as const satisfies readonly (keyof typeof schemas)[];\n\nconst authSchemas = {\n    IdJagTokenExchangeResponseSchema,\n    OAuthClientInformationFullSchema,\n    OAuthClientInformationSchema,\n    OAuthClientMetadataSchema,\n    OAuthClientRegistrationErrorSchema,\n    OAuthErrorResponseSchema,\n    OAuthMetadataSchema,\n    OAuthProtectedResourceMetadataSchema,\n    OAuthTokenRevocationRequestSchema,\n    OAuthTokensSchema,\n    OpenIdProviderDiscoveryMetadataSchema,\n    OpenIdProviderMetadataSchema\n} as const;\n\ntype ProtocolSchemaKey = (typeof SPEC_SCHEMA_KEYS)[number];\ntype AuthSchemaKey = keyof typeof authSchemas;\ntype SchemaKey = ProtocolSchemaKey | AuthSchemaKey;\n\ntype SchemaFor<K extends SchemaKey> = K extends ProtocolSchemaKey\n    ? (typeof schemas)[K]\n    : K extends AuthSchemaKey\n      ? (typeof authSchemas)[K]\n      : never;\n\ntype StripSchemaSuffix<K> = K extends `${infer N}Schema` ? N : never;\n\n/**\n * Union of every named type in the SDK's protocol and OAuth schemas (e.g. `'CallToolResult'`,\n * `'ContentBlock'`, `'Tool'`, `'OAuthTokens'`). Derived from the internal Zod schemas, so it stays\n * in sync with the spec.\n */\nexport type SpecTypeName = StripSchemaSuffix<SchemaKey>;\n\n/**\n * Maps each {@linkcode SpecTypeName} to its TypeScript type.\n *\n * `SpecTypes['Tool']` is equivalent to importing the `Tool` type directly.\n * These validators cover the NEUTRAL model — the consumer-facing shapes with\n * no wire-only members (`resultType`, the reserved `_meta` envelope keys).\n * Per-revision WIRE validators are deliberately not public surface; they are\n * planned to return as versioned `zod-schemas/<revision>` exports for\n * consumers who validate raw wire traffic themselves.\n */\nexport type SpecTypes = {\n    [K in SchemaKey as StripSchemaSuffix<K>]: SchemaFor<K> extends z.ZodType ? z.output<SchemaFor<K>> : never;\n};\n\n/**\n * Input shape for each {@linkcode SpecTypeName}. For most types this equals {@linkcode SpecTypes},\n * but a few schemas apply defaults/preprocessing, so the accepted input may be looser than the\n * resulting output type.\n */\ntype SpecTypeInputs = {\n    [K in SchemaKey as StripSchemaSuffix<K>]: SchemaFor<K> extends z.ZodType ? z.input<SchemaFor<K>> : never;\n};\n\ntype SchemaRecord = { readonly [K in SpecTypeName]: StandardSchemaV1Sync<SpecTypeInputs[K], SpecTypes[K]> };\ntype GuardRecord = { readonly [K in SpecTypeName]: (value: unknown) => value is SpecTypeInputs[K] };\n\nconst _specTypeSchemas: Record<string, StandardSchemaV1> = {};\nconst _isSpecType: Record<string, (value: unknown) => boolean> = {};\nfunction register(key: string, schema: z.ZodType): void {\n    const name = key.slice(0, -'Schema'.length);\n    _specTypeSchemas[name] = schema;\n    _isSpecType[name] = (v: unknown) => schema.safeParse(v).success;\n}\nfor (const key of SPEC_SCHEMA_KEYS) {\n    // eslint-disable-next-line import/namespace -- key is constrained to keyof typeof schemas via the satisfies clause above\n    register(key, schemas[key]);\n}\nfor (const [key, schema] of Object.entries(authSchemas)) {\n    register(key, schema);\n}\n\n/**\n * Runtime validators for every MCP spec type, keyed by type name.\n *\n * Use this when you need to validate a spec-defined shape at a boundary the SDK does not own, for\n * example an extension's custom-method payload that embeds a `CallToolResult`, or a value read from\n * storage that should be a `Tool`.\n *\n * Each entry implements the Standard Schema interface, so it composes with any\n * Standard-Schema-aware library. For a simple boolean check, use {@linkcode isSpecType} instead.\n *\n * @example\n * ```ts source=\"./specTypeSchema.examples.ts#specTypeSchemas_basicUsage\"\n * const result = specTypeSchemas.CallToolResult['~standard'].validate(untrusted);\n * if (result.issues === undefined) {\n *     // result.value is CallToolResult\n * }\n * ```\n */\nexport const specTypeSchemas: SchemaRecord = Object.freeze(_specTypeSchemas as SchemaRecord);\n\n/**\n * Type predicates for every MCP spec type, keyed by type name.\n *\n * Returns `true` if the value satisfies the schema's input type (`z.input<>`, before defaults and\n * transforms are applied), and narrows to that input type. For schemas with `.default()` or\n * `.preprocess()`, this may accept values that do not structurally match the named output type;\n * for example `isSpecType.CallToolResult({})` is `true` because `content` has a default. Use\n * `specTypeSchemas.X['~standard'].validate(value)` when you need the validated output value.\n *\n * Each guard is a standalone function, so it can be passed directly as a callback.\n *\n * @example\n * ```ts source=\"./specTypeSchema.examples.ts#isSpecType_basicUsage\"\n * if (isSpecType.ContentBlock(value)) {\n *     // value is ContentBlock\n * }\n *\n * const blocks = mixed.filter(isSpecType.ContentBlock);\n * ```\n */\nexport const isSpecType: GuardRecord = Object.freeze(_isSpecType as GuardRecord);\n", "/**\n * Static era pins for lifecycle messages on the OUTBOUND path (the\n * chicken-and-egg bootstrap): these messages are sent while the instance's\n * negotiated protocol version is still unset, and they self-identify their\n * era by construction — `initialize`/`notifications/initialized` ARE the\n * legacy handshake (`initialize` ⇒ legacy), and `server/discover` exists only\n * on the 2026 era. The pins apply only during that pre-negotiation window\n * (`Protocol._resolveOutboundCodec` consults them when the negotiated version\n * is `undefined`); once a version is negotiated, every send resolves through\n * the instance's era.\n *\n * Scope notes:\n * - OUTBOUND ONLY. Inbound era truth is the instance's negotiated protocol\n *   version (connection state); an edge classification, when present, is\n *   VALIDATED against that instance era — never used to pick a codec per\n *   message — so pinning inbound would have nothing to attach to. An\n *   inbound `server/discover` on a legacy-era instance correctly falls to\n *   −32601 by registry absence; serving it requires an instance bound to\n *   the modern era.\n * - `ping` is deliberately NOT pinned. A bare `{method: 'ping'}` carries no\n *   era marker, and pinning it would let a negotiated-modern session emit a\n *   2025-only method onto the modern leg (the exact inverse leak registry\n *   membership exists to prevent). `ping` era-gates like any other method:\n *   present on the 2025 era, absent from the 2026 era (the modern keepalive\n *   story is owned by the negotiation milestones).\n */\nimport type { WireCodec } from './codec';\nimport { codecForVersion, MODERN_WIRE_REVISION } from './codec';\n\nexport function bootstrapOutboundCodec(method: string): WireCodec | undefined {\n    switch (method) {\n        case 'initialize':\n        case 'notifications/initialized': {\n            // The legacy handshake, by definition (Q2).\n            return codecForVersion(undefined);\n        }\n        case 'server/discover': {\n            // The modern discovery exchange, 2026-era only.\n            return codecForVersion(MODERN_WIRE_REVISION);\n        }\n        default: {\n            return undefined;\n        }\n    }\n}\n", "import { SdkError, SdkErrorCode } from '../errors/sdkErrors';\nimport type {\n    AuthInfo,\n    CancelledNotification,\n    ClientCapabilities,\n    CreateMessageRequest,\n    CreateMessageResult,\n    CreateMessageResultWithTools,\n    ElicitRequestFormParams,\n    ElicitRequestURLParams,\n    ElicitResult,\n    HandlerResultTypeMap,\n    Implementation,\n    JSONRPCErrorResponse,\n    JSONRPCNotification,\n    JSONRPCRequest,\n    JSONRPCResponse,\n    JSONRPCResultResponse,\n    LoggingLevel,\n    MessageExtraInfo,\n    Notification,\n    NotificationMethod,\n    NotificationTypeMap,\n    Progress,\n    ProgressNotification,\n    Request,\n    RequestId,\n    RequestMeta,\n    RequestMetaEnvelope,\n    RequestMethod,\n    RequestTypeMap,\n    Result,\n    ResultTypeMap,\n    ServerCapabilities\n} from '../types/index';\nimport {\n    CLIENT_CAPABILITIES_META_KEY,\n    CLIENT_INFO_META_KEY,\n    isJSONRPCErrorResponse,\n    isJSONRPCNotification,\n    isJSONRPCRequest,\n    isJSONRPCResultResponse,\n    LOG_LEVEL_META_KEY,\n    PROTOCOL_VERSION_META_KEY,\n    ProtocolError,\n    ProtocolErrorCode,\n    SUPPORTED_PROTOCOL_VERSIONS\n} from '../types/index';\nimport type { StandardSchemaV1 } from '../util/standardSchema';\nimport { isStandardSchema, validateStandardSchema } from '../util/standardSchema';\nimport { bootstrapOutboundCodec } from '../wire/bootstrap';\nimport type { LiftedWireMaterial, WireCodec } from '../wire/codec';\nimport {\n    classifiedWireEra,\n    codecForVersion,\n    isExtensionReusedRequestMethod,\n    isSpecNotificationMethod,\n    isSpecRequestMethod,\n    MODERN_WIRE_REVISION\n} from '../wire/codec';\nimport { manualInputRequiredValue, partitionInputResponses } from './inputRequiredEngine';\nimport type { Transport, TransportSendOptions } from './transport';\n\n/**\n * Callback for progress notifications.\n */\nexport type ProgressCallback = (progress: Progress) => void;\n\n/**\n * Additional initialization options.\n */\nexport type ProtocolOptions = {\n    /**\n     * Protocol versions supported. The legacy `initialize` handshake offers and\n     * falls back to the first 2025-era entry in the list (the client sends it,\n     * the server counter-offers it); 2026-era entries are only ever selected via\n     * `server/discover`. Passed to transport during {@linkcode Protocol.connect | connect()}.\n     *\n     * @default {@linkcode SUPPORTED_PROTOCOL_VERSIONS}\n     */\n    supportedProtocolVersions?: string[];\n\n    /**\n     * Whether to restrict emitted requests to only those that the remote side has indicated that they can handle, through their advertised capabilities.\n     *\n     * Note that this DOES NOT affect checking of _local_ side capabilities, as it is considered a logic error to mis-specify those.\n     *\n     * Currently this defaults to `false`, for backwards compatibility with SDK versions that did not advertise capabilities correctly. In future, this will default to `true`.\n     */\n    enforceStrictCapabilities?: boolean;\n    /**\n     * An array of notification method names that should be automatically debounced.\n     * Any notifications with a method in this list will be coalesced if they\n     * occur in the same tick of the event loop.\n     * e.g., `['notifications/tools/list_changed']`\n     */\n    debouncedNotificationMethods?: string[];\n};\n\n/**\n * The default request timeout, in milliseconds.\n */\nexport const DEFAULT_REQUEST_TIMEOUT_MSEC = 60_000;\n\n/**\n * Options that can be given per request.\n */\nexport type RequestOptions = {\n    /**\n     * If set, requests progress notifications from the remote end (if supported). When progress notifications are received, this callback will be invoked.\n     */\n    onprogress?: ProgressCallback;\n\n    /**\n     * Can be used to cancel an in-flight request. This will cause an `AbortError` to be raised from {@linkcode Protocol.request | request()}.\n     */\n    signal?: AbortSignal;\n\n    /**\n     * A timeout (in milliseconds) for this request. If exceeded, an {@linkcode SdkError} with code {@linkcode SdkErrorCode.RequestTimeout} will be raised from {@linkcode Protocol.request | request()}.\n     *\n     * If not specified, {@linkcode DEFAULT_REQUEST_TIMEOUT_MSEC} will be used as the timeout.\n     */\n    timeout?: number;\n\n    /**\n     * If `true`, receiving a progress notification will reset the request timeout.\n     * This is useful for long-running operations that send periodic progress updates.\n     * Default: `false`\n     */\n    resetTimeoutOnProgress?: boolean;\n\n    /**\n     * Maximum total time (in milliseconds) to wait for a response.\n     * If exceeded, an {@linkcode SdkError} with code {@linkcode SdkErrorCode.RequestTimeout} will be raised, regardless of progress notifications.\n     * If not specified, there is no maximum total timeout.\n     *\n     * For multi-round-trip requests fulfilled by the auto-fulfilment driver\n     * (protocol revision 2026-07-28), the budget bounds the WHOLE flow: every\n     * retry leg is given only the time remaining.\n     */\n    maxTotalTimeout?: number;\n\n    /**\n     * Manual multi-round-trip mode for this call (protocol revision\n     * 2026-07-28): when the response is an `input_required` result, hand it\n     * back to the caller instead of auto-fulfilling it (or raising a typed\n     * error). The resolved value is the neutral input-required shape\n     * (`resultType: 'input_required'`, `inputRequests?`, `requestState?`);\n     * wrap the result schema with `withInputRequired()` on the explicit\n     * schema path to type both outcomes. The caller is then responsible for\n     * gathering the requested input and retrying the original request with\n     * `inputResponses` / `requestState` params and a fresh request.\n     *\n     * Default: `false`.\n     */\n    allowInputRequired?: boolean;\n} & TransportSendOptions;\n\n/**\n * Flow context handed to {@linkcode Protocol._resolveNonCompleteResult}: the\n * originating request, its options, the wire codec that decoded the response,\n * the timestamp the originating leg was issued at (for whole-flow timeout\n * accounting), and a `retry` closure that re-enters the request funnel with\n * fresh params on a fresh request id.\n */\nexport interface NonCompleteResultFlow<T extends StandardSchemaV1 = StandardSchemaV1> {\n    codec: WireCodec;\n    request: Request;\n    resultSchema: T;\n    options: RequestOptions | undefined;\n    flowStartedAt: number;\n    /** Re-issue the originating request with the given params and per-leg options. */\n    retry(params: Record<string, unknown> | undefined, legOptions: RequestOptions): Promise<unknown>;\n}\n\n/**\n * Options that can be given per notification.\n */\nexport type NotificationOptions = {\n    /**\n     * May be used to indicate to the transport which incoming request to associate this outgoing notification with.\n     */\n    relatedRequestId?: RequestId;\n};\n\n/**\n * The reserved per-request `_meta` envelope keys (protocol revision\n * 2026-07-28). The protocol layer lifts these out of inbound `_meta` before\n * handlers run and surfaces them at `ctx.mcpReq.envelope` — they are\n * wire-level bookkeeping, not handler material.\n */\nconst RESERVED_ENVELOPE_META_KEYS: readonly string[] = [\n    PROTOCOL_VERSION_META_KEY,\n    CLIENT_INFO_META_KEY,\n    CLIENT_CAPABILITIES_META_KEY,\n    LOG_LEVEL_META_KEY\n];\n\n/**\n * Top-level params members carrying multi-round-trip driver material\n * (protocol revision 2026-07-28). The spec reserves these names on\n * client-initiated REQUESTS only — notification params keep them untouched\n * (a vendor notification may legitimately use the same names).\n */\nconst RETRY_PARAMS_KEYS = ['inputResponses', 'requestState'] as const;\n\n/**\n * Lift wire-only material out of an inbound message so handlers see exactly\n * the 2025-era shape, and surface it for the protocol layer (requests: via\n * `ctx.mcpReq`). What counts as wire-only depends on the message kind: the\n * reserved envelope `_meta` keys are reserved on every message, while the\n * multi-round-trip retry fields (`inputResponses`/`requestState`) are\n * reserved on client-initiated requests only — so notifications get only the\n * envelope lift, and their top-level params stay untouched. Messages without\n * wire-only material are returned unchanged (same reference).\n */\nfunction liftWireOnlyMaterial<T extends JSONRPCRequest | JSONRPCNotification>(\n    message: T,\n    kind: 'request' | 'notification'\n): { message: T; lifted: LiftedWireMaterial } {\n    const params = (message as { params?: unknown }).params;\n    if (!isPlainObject(params)) return { message, lifted: {} };\n\n    const meta = params._meta;\n    const envelopeKeys = isPlainObject(meta) ? RESERVED_ENVELOPE_META_KEYS.filter(key => key in meta) : [];\n    const retryKeys = kind === 'request' ? RETRY_PARAMS_KEYS.filter(key => key in params) : [];\n    if (envelopeKeys.length === 0 && retryKeys.length === 0) return { message, lifted: {} };\n\n    const lifted: LiftedWireMaterial = {};\n    const nextParams: Record<string, unknown> = { ...params };\n\n    if (envelopeKeys.length > 0 && isPlainObject(meta)) {\n        const envelope: Record<string, unknown> = {};\n        const nextMeta: Record<string, unknown> = { ...meta };\n        for (const key of envelopeKeys) {\n            envelope[key] = meta[key];\n            delete nextMeta[key];\n        }\n        // Surfaced as received; validation/enforcement is the dispatch-time\n        // classifier's job, not the lift's.\n        lifted.envelope = envelope as Partial<RequestMetaEnvelope>;\n        if (Object.keys(nextMeta).length > 0) {\n            nextParams._meta = nextMeta;\n        } else {\n            delete nextParams._meta;\n        }\n    }\n\n    for (const key of retryKeys) {\n        // Driver material reaches the protocol layer un-deleted, verbatim.\n        if (key === 'inputResponses') lifted.inputResponses = nextParams[key] as Record<string, unknown>;\n        if (key === 'requestState') lifted.requestState = nextParams[key] as string;\n        delete nextParams[key];\n    }\n\n    return { message: { ...message, params: nextParams } as T, lifted };\n}\n\n/**\n * Standard Schema adapter over the era codec's `validateResult` function (the\n * function-only WireCodec contract exposes no schema objects). Used by the\n * spec-method `request()` overload so the request funnel keeps a single\n * `StandardSchemaV1`-shaped validation seam for both spec and explicit-schema\n * paths.\n *\n * Returns `undefined` when the method has no result entry on this era's\n * registry — the caller maps that to the synchronous \"pass a result schema\"\n * TypeError, exactly matching the pre-function-only behavior the\n * typedMapAlignment suite pins (the result map deliberately excludes the\n * `tasks/*` methods, so the spec-method overload refuses them up front).\n */\nfunction codecResultValidator(codec: WireCodec, method: string): StandardSchemaV1 | undefined {\n    // Probe for result-registry membership through the function-only\n    // contract: a `not-in-era` outcome means no result entry for this method\n    // (the probe value is irrelevant — every spec result schema rejects\n    // `undefined`, so a method with an entry returns `invalid`, never\n    // `not-in-era`).\n    const probe = codec.validateResult(method, undefined);\n    if (!probe.ok && probe.reason === 'not-in-era') return undefined;\n    return {\n        '~standard': {\n            version: 1,\n            vendor: 'mcp-wire-codec',\n            validate(value: unknown): StandardSchemaV1.Result<unknown> {\n                const outcome = codec.validateResult(method, value);\n                if (outcome.ok) return { value: outcome.value };\n                return { issues: [{ message: outcome.reason === 'invalid' ? outcome.message : `not-in-era: ${method}` }] };\n            }\n        }\n    };\n}\n\n/**\n * The type of `ctx.mcpReq.requestState`. The type parameter is\n * caller-asserted (no validation, like the two-argument `acceptedContent<T>`)\n * — pair with `createRequestStateCodec<T>` so the claim is backed by the\n * codec's verification.\n */\nexport type RequestStateAccessor = <T = unknown>() => T | undefined;\n\n/**\n * Builds the `ctx.mcpReq.requestState` accessor for a resolved value. The\n * `as T` below is the one place {@linkcode RequestStateAccessor}'s\n * caller-asserted typing is implemented — no implementation can produce an\n * arbitrary `T` from a runtime value honestly.\n */\nexport function requestStateAccessor(value: unknown): RequestStateAccessor {\n    return <T>(): T | undefined => value as T | undefined;\n}\n\n/** Shared no-state accessor: the common case allocates nothing per request. */\nconst NO_REQUEST_STATE = requestStateAccessor(undefined);\n\n/**\n * Returns a context whose `requestState` accessor reads the given value —\n * how the server seam hands a verify hook's decoded payload (or the legacy\n * shim's per-round echo) to the handler without mutating the original\n * context.\n */\nexport function withRequestStateValue<ContextT extends BaseContext>(ctx: ContextT, value: unknown): ContextT {\n    return {\n        ...ctx,\n        mcpReq: {\n            ...ctx.mcpReq,\n            requestState: requestStateAccessor(value)\n        }\n    };\n}\n\n/**\n * Base context provided to all request handlers.\n */\nexport type BaseContext = {\n    /**\n     * The session ID from the transport, if available.\n     */\n    sessionId?: string;\n\n    /**\n     * Information about the MCP request being handled.\n     */\n    mcpReq: {\n        /**\n         * The JSON-RPC ID of the request being handled.\n         */\n        id: RequestId;\n\n        /**\n         * The method name of the request (e.g., 'tools/call', 'ping').\n         */\n        method: string;\n\n        /**\n         * Metadata from the original request, with the reserved\n         * `io.modelcontextprotocol/*` envelope keys already lifted out\n         * (readable via `ctx.mcpReq.envelope`).\n         */\n        _meta?: RequestMeta;\n\n        /**\n         * The per-request `_meta` envelope (protocol revision 2026-07-28):\n         * the reserved `io.modelcontextprotocol/*` keys carried by the\n         * request, lifted out of the `_meta` the handler sees. Surfaced as\n         * received — `Partial` because only the keys the request actually\n         * carried are present (envelope requiredness is enforced per request\n         * at dispatch time, not by the lift); only present at all when the\n         * request carried envelope keys.\n         */\n        envelope?: Partial<RequestMetaEnvelope>;\n\n        /**\n         * Multi-round-trip input responses carried by a retried request\n         * (protocol revision 2026-07-28), lifted out of the params the\n         * handler sees. Entries are the BARE response objects keyed by the\n         * identifiers the server assigned in `inputRequests`; entries that do\n         * not look like bare responses (e.g. a `{method, result}` wrapper)\n         * are dropped and their keys recorded in `droppedInputResponseKeys`.\n         *\n         * The values arrive from the client and are NOT validated by the SDK\n         * — treat them as untrusted input.\n         */\n        inputResponses?: Record<string, unknown>;\n\n        /**\n         * Keys of `inputResponses` entries the SDK dropped because they were\n         * not bare response objects (for example the wrapped `{method,\n         * result}` shape some peers emit). Surfaced so a handler can re-issue\n         * the corresponding input request rather than hard-fail.\n         */\n        droppedInputResponseKeys?: string[];\n\n        /**\n         * Reads the multi-round-trip request state for the current round:\n         * the value the configured `ServerOptions.requestState.verify` hook\n         * resolved with (e.g. `createRequestStateCodec.verify`'s decoded\n         * payload — `mint<T>`/`requestState<T>()` are the typed pair), the\n         * raw wire string when no hook is configured, or `undefined` when\n         * the round carried no state. The type parameter is a compile-time\n         * cast only.\n         *\n         * SECURITY: `requestState` round-trips through the client and MUST\n         * be treated as attacker-controlled input. The SDK applies no\n         * integrity protection by default — servers whose state influences\n         * authorization or business logic MUST integrity-protect it and\n         * verify via the `requestState.verify` hook (spec:\n         * basic/patterns/mrtr, server requirements 4–5).\n         */\n        requestState: RequestStateAccessor;\n\n        /**\n         * An abort signal used to communicate if the request was cancelled from the sender's side.\n         */\n        signal: AbortSignal;\n\n        /**\n         * Sends a request that relates to the current request being handled.\n         *\n         * This is used by certain transports to correctly associate related messages.\n         *\n         * For spec methods the result type is inferred from the method name.\n         * For custom (non-spec) methods, pass a result schema as the second argument.\n         */\n        send: {\n            <M extends RequestMethod>(\n                request: { method: M; params?: Record<string, unknown> },\n                options?: RequestOptions\n            ): Promise<ResultTypeMap[M]>;\n            <T extends StandardSchemaV1>(\n                request: Request,\n                resultSchema: T,\n                options?: RequestOptions\n            ): Promise<StandardSchemaV1.InferOutput<T>>;\n        };\n\n        /**\n         * Sends a notification that relates to the current request being handled.\n         *\n         * This is used by certain transports to correctly associate related messages.\n         */\n        notify: (notification: Notification) => Promise<void>;\n    };\n\n    /**\n     * HTTP transport information, only available when using an HTTP-based transport.\n     */\n    http?: {\n        /**\n         * Information about a validated access token, provided to request handlers.\n         */\n        authInfo?: AuthInfo;\n    };\n};\n\n/**\n * Context provided to server-side request handlers, extending {@linkcode BaseContext} with server-specific fields.\n */\nexport type ServerContext = BaseContext & {\n    mcpReq: {\n        /**\n         * Send a log message notification to the client.\n         * Respects the client's log level filter set via logging/setLevel.\n         *\n         * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).\n         * Remains functional during the deprecation window (at least twelve months).\n         * Migrate to stderr logging (STDIO servers) or OpenTelemetry.\n         */\n        log: (level: LoggingLevel, data: unknown, logger?: string) => Promise<void>;\n\n        /**\n         * Send an elicitation request to the client, requesting user input.\n         *\n         * @deprecated Throws on a 2026-07-28-era request — return `inputRequired(...)`\n         * (multi-round-trip) from the handler instead. The 2025 push-style server-to-client request model is\n         * replaced by input_required results in the 2026-07-28 protocol. If your factory serves\n         * both eras, this only works on the legacy path.\n         */\n        elicitInput: (params: ElicitRequestFormParams | ElicitRequestURLParams, options?: RequestOptions) => Promise<ElicitResult>;\n\n        /**\n         * Request LLM sampling from the client.\n         *\n         * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).\n         * Throws on a 2026-07-28-era request — return `inputRequired(...)` (multi-round-trip)\n         * from the handler instead, or migrate to calling LLM provider APIs directly. The 2025 push-style\n         * server-to-client request model is replaced by input_required results in the 2026-07-28\n         * protocol. If your factory serves both eras, this only works on the legacy path.\n         */\n        requestSampling: (\n            params: CreateMessageRequest['params'],\n            options?: RequestOptions\n        ) => Promise<CreateMessageResult | CreateMessageResultWithTools>;\n    };\n\n    http?: {\n        /**\n         * The original HTTP request.\n         */\n        req?: globalThis.Request;\n\n        /**\n         * Closes the SSE stream for this request, triggering client reconnection.\n         * Only available when using a StreamableHTTPServerTransport with eventStore configured.\n         */\n        closeSSE?: () => void;\n\n        /**\n         * Closes the standalone GET SSE stream, triggering client reconnection.\n         * Only available when using a StreamableHTTPServerTransport with eventStore configured.\n         */\n        closeStandaloneSSE?: () => void;\n    };\n};\n\n/**\n * Context provided to client-side request handlers.\n */\nexport type ClientContext = BaseContext;\n\n/**\n * Information about a request's timeout state\n */\ntype TimeoutInfo = {\n    timeoutId: ReturnType<typeof setTimeout>;\n    startTime: number;\n    timeout: number;\n    maxTotalTimeout?: number;\n    resetTimeoutOnProgress: boolean;\n    onTimeout: () => void;\n};\n\n/*\n * Package-internal write access to Protocol's negotiated-protocol-version state.\n *\n * The negotiated version is a protected field on Protocol that the role classes\n * (Client/Server) assign directly. Tests and the modern-era server entry still\n * need to set it from outside the class hierarchy, so Protocol's static\n * initializer hands this module-scoped closure privileged access and\n * `setNegotiatedProtocolVersion` re-exports it on the core INTERNAL barrel\n * only — deliberately not public API.\n */\nlet writeNegotiatedProtocolVersion: <ContextT extends BaseContext>(instance: Protocol<ContextT>, version: string | undefined) => void;\n\n/**\n * Package-internal write channel for a {@linkcode Protocol} instance's\n * negotiated protocol version, for callers outside the class hierarchy:\n * tests and the (future) modern-era server entry that marks a factory\n * instance modern at binding time. Exported on the core internal barrel\n * only — never public API.\n */\nexport function setNegotiatedProtocolVersion<ContextT extends BaseContext>(\n    instance: Protocol<ContextT>,\n    version: string | undefined\n): void {\n    writeNegotiatedProtocolVersion(instance, version);\n}\n\n/**\n * Implements MCP protocol framing on top of a pluggable transport, including\n * features like request/response linking, notifications, and progress.\n *\n * `Protocol` is abstract; `Client` and `Server` are the concrete role-specific\n * implementations most code should use.\n */\nexport abstract class Protocol<ContextT extends BaseContext> {\n    private _transport?: Transport;\n    private _requestMessageId = 0;\n    private _requestHandlers: Map<string, (request: JSONRPCRequest, ctx: ContextT) => Promise<Result>> = new Map();\n    /** Methods registered with an explicit schema; the era gate in `_onrequest` reads it for the Tasks extension names. */\n    private _customSchemaRequestMethods = new Set<string>();\n    private _requestHandlerAbortControllers: Map<RequestId, AbortController> = new Map();\n    private _notificationHandlers: Map<string, (notification: JSONRPCNotification, codec: WireCodec) => Promise<void>> = new Map();\n    private _responseHandlers: Map<number, (response: JSONRPCResultResponse | Error) => void> = new Map();\n    private _progressHandlers: Map<number, ProgressCallback> = new Map();\n    private _timeoutInfo: Map<number, TimeoutInfo> = new Map();\n    private _pendingDebouncedNotifications = new Set<string>();\n\n    /**\n     * The protocol version negotiated for the current connection (`undefined`\n     * before negotiation completes), which determines the wire era this\n     * instance speaks. Set by the SDK's negotiation and initialize paths\n     * (`Client.connect`, `Server._oninitialize`).\n     */\n    protected _negotiatedProtocolVersion?: string;\n\n    static {\n        writeNegotiatedProtocolVersion = (instance, version) => {\n            instance._negotiatedProtocolVersion = version;\n        };\n    }\n\n    protected _supportedProtocolVersions: string[];\n\n    /**\n     * Callback for when the connection is closed for any reason.\n     *\n     * This is invoked when {@linkcode Protocol.close | close()} is called as well.\n     */\n    onclose?: () => void;\n\n    /**\n     * Callback for when an error occurs.\n     *\n     * Note that errors are not necessarily fatal; they are used for reporting any kind of exceptional condition out of band.\n     */\n    onerror?: (error: Error) => void;\n\n    /**\n     * A handler to invoke for any request types that do not have their own handler installed.\n     */\n    fallbackRequestHandler?: (request: JSONRPCRequest, ctx: ContextT) => Promise<Result>;\n\n    /**\n     * A handler to invoke for any notification types that do not have their own handler installed.\n     */\n    fallbackNotificationHandler?: (notification: Notification) => Promise<void>;\n\n    constructor(private _options?: ProtocolOptions) {\n        this._supportedProtocolVersions = _options?.supportedProtocolVersions ?? SUPPORTED_PROTOCOL_VERSIONS;\n\n        this.setNotificationHandler('notifications/cancelled', notification => {\n            this._oncancel(notification);\n        });\n\n        this.setNotificationHandler('notifications/progress', notification => {\n            this._onprogress(notification);\n        });\n\n        this.setRequestHandler(\n            'ping',\n            // Automatic pong by default.\n            _request => ({}) as Result\n        );\n    }\n\n    /**\n     * Builds the context object for request handlers. Subclasses must override\n     * to return the appropriate context type (e.g., ServerContext adds HTTP request info).\n     */\n    protected abstract buildContext(ctx: BaseContext, transportInfo?: MessageExtraInfo): ContextT;\n\n    /**\n     * Drop consult for inbound messages whose transport did not classify them\n     * at the edge — long-lived channels such as stdio, where a role class may\n     * need to decline traffic the negotiated era has no answer for (the\n     * client-side inbound-request drop on modern-era connections: the\n     * 2026-07-28 era has no server→client request channel, and on stdio the\n     * client must never write JSON-RPC responses).\n     *\n     * Consulted ONLY when the transport supplied no\n     * {@linkcode MessageExtraInfo.classification}: edge-classified traffic\n     * never reaches the hook. Returning `'drop'` discards the message without\n     * writing any response (requests are surfaced via `onerror`). The base\n     * implementation returns `undefined`: unclassified traffic keeps today's\n     * dispatch path unchanged. Era selection never happens here — era is\n     * instance state, owned by the serving entry that constructed and\n     * connected the instance.\n     */\n    protected _shouldDropInbound(_message: JSONRPCRequest | JSONRPCNotification): 'drop' | undefined {\n        return undefined;\n    }\n\n    /**\n     * The per-request `_meta` envelope this instance attaches to every outgoing\n     * request and notification, when one applies. The base implementation\n     * returns `undefined` (no envelope — the 2025-era posture, so legacy-era\n     * outbound traffic is byte-identical to a build without this seam).\n     * `Client` overrides it on a connection that negotiated a modern (2026-07-28+)\n     * era to return the reserved protocol-version / client-info /\n     * client-capabilities keys. User-supplied `_meta` keys take precedence over\n     * the auto-attached ones.\n     */\n    protected _outboundMetaEnvelope(): Readonly<Record<string, unknown>> | undefined {\n        return undefined;\n    }\n\n    /**\n     * Attach this instance's outbound `_meta` envelope (when one is configured)\n     * to a request or notification. A no-op when the seam returns `undefined`\n     * — the message returns by reference, so the legacy-era wire stays\n     * byte-identical. User-supplied `_meta` keys are spread last so they win\n     * over the auto-attached envelope keys.\n     */\n    private _envelopeOutbound<T extends JSONRPCRequest | JSONRPCNotification>(message: T): T {\n        const envelope = this._outboundMetaEnvelope();\n        if (envelope === undefined) {\n            return message;\n        }\n        const params = (message.params ?? {}) as { _meta?: Record<string, unknown> };\n        return {\n            ...message,\n            params: { ...params, _meta: { ...envelope, ...params._meta } }\n        };\n    }\n\n    /**\n     * Extension point for non-`complete` decoded results in the response\n     * funnel: a result the wire codec discriminated into a kind other than\n     * `'complete'` or `'invalid'` is handed here for the role class to\n     * resolve. The base default surfaces it as a typed\n     * {@linkcode SdkErrorCode.UnsupportedResultType} error (no retry).\n     *\n     * Intended consumers (named so the seam stays accountable):\n     * - the `Client`'s multi-round-trip auto-fulfilment engine, which fulfils\n     *   `'input_required'` results through the registered\n     *   elicitation/sampling/roots handlers and retries via `flow.retry`;\n     * - a future client-side terminal-result handler for\n     *   `subscriptions/listen`, when the spec defines one.\n     *\n     * `Server` instances never receive `input_required` responses on their\n     * outbound legs and leave the base behavior in place.\n     */\n    protected _resolveNonCompleteResult<T extends StandardSchemaV1>(\n        decoded: ReturnType<WireCodec['decodeResult']> & { kind: 'input_required' },\n        flow: NonCompleteResultFlow<T>\n    ): Promise<unknown> {\n        return Promise.reject(\n            new SdkError(SdkErrorCode.UnsupportedResultType, `Unsupported result type '${decoded.kind}' for ${flow.request.method}`, {\n                resultType: decoded.kind,\n                method: flow.request.method\n            })\n        );\n    }\n\n    /**\n     * Protected accessor for a registered request handler. Used by role\n     * classes that dispatch synthesized requests through the same stored\n     * handler chain (e.g. the `Client` fulfilling an embedded multi-round-trip\n     * input request).\n     */\n    protected _getRequestHandler(method: string): ((request: JSONRPCRequest, ctx: ContextT) => Promise<Result>) | undefined {\n        return this._requestHandlers.get(method);\n    }\n\n    private async _oncancel(notification: CancelledNotification): Promise<void> {\n        // `requestId` is optional on the 2025-era wire schema. Absent is the\n        // only thing that means \"no id\": `0` and `''` are legal request ids.\n        if (notification.params.requestId === undefined) {\n            return;\n        }\n        // Handle request cancellation\n        const controller = this._requestHandlerAbortControllers.get(notification.params.requestId);\n        controller?.abort(notification.params.reason);\n    }\n\n    private _setupTimeout(\n        messageId: number,\n        timeout: number,\n        maxTotalTimeout: number | undefined,\n        onTimeout: () => void,\n        resetTimeoutOnProgress: boolean = false\n    ) {\n        this._timeoutInfo.set(messageId, {\n            timeoutId: setTimeout(onTimeout, timeout),\n            startTime: Date.now(),\n            timeout,\n            maxTotalTimeout,\n            resetTimeoutOnProgress,\n            onTimeout\n        });\n    }\n\n    private _resetTimeout(messageId: number): boolean {\n        const info = this._timeoutInfo.get(messageId);\n        if (!info) return false;\n\n        const totalElapsed = Date.now() - info.startTime;\n        if (info.maxTotalTimeout && totalElapsed >= info.maxTotalTimeout) {\n            this._timeoutInfo.delete(messageId);\n            throw new SdkError(SdkErrorCode.RequestTimeout, 'Maximum total timeout exceeded', {\n                maxTotalTimeout: info.maxTotalTimeout,\n                totalElapsed\n            });\n        }\n\n        clearTimeout(info.timeoutId);\n        info.timeoutId = setTimeout(info.onTimeout, info.timeout);\n        return true;\n    }\n\n    private _cleanupTimeout(messageId: number) {\n        const info = this._timeoutInfo.get(messageId);\n        if (info) {\n            clearTimeout(info.timeoutId);\n            this._timeoutInfo.delete(messageId);\n        }\n    }\n\n    /**\n     * Attaches to the given transport, starts it, and starts listening for messages.\n     *\n     * The caller assumes ownership of the {@linkcode Transport}, replacing any callbacks that have already been set, and expects that it is the only user of the {@linkcode Transport} instance going forward.\n     */\n    async connect(transport: Transport): Promise<void> {\n        this._transport = transport;\n        const _onclose = this.transport?.onclose;\n        this._transport.onclose = () => {\n            try {\n                _onclose?.();\n            } finally {\n                this._onclose();\n            }\n        };\n\n        const _onerror = this.transport?.onerror;\n        this._transport.onerror = (error: Error) => {\n            _onerror?.(error);\n            this._onerror(error);\n        };\n\n        const _onmessage = this._transport?.onmessage;\n        this._transport.onmessage = (message, extra) => {\n            _onmessage?.(message, extra);\n            if (isJSONRPCResultResponse(message) || isJSONRPCErrorResponse(message)) {\n                this._onresponse(message);\n            } else if (isJSONRPCRequest(message)) {\n                this._onrequest(message, extra);\n            } else if (isJSONRPCNotification(message)) {\n                this._onnotification(message, extra);\n            } else {\n                this._onerror(new Error(`Unknown message type: ${JSON.stringify(message)}`));\n            }\n        };\n\n        // Pass supported protocol versions to transport for header validation\n        transport.setSupportedProtocolVersions?.(this._supportedProtocolVersions);\n\n        await this._transport.start();\n    }\n\n    /**\n     * Transport-close hook. Subclass overrides MUST call `super._onclose()`\n     * after their own cleanup — base teardown (response-handler settlement,\n     * timeout clearing, in-flight request abort) does not run otherwise.\n     */\n    protected _onclose(): void {\n        const responseHandlers = this._responseHandlers;\n        this._responseHandlers = new Map();\n        this._progressHandlers.clear();\n        this._pendingDebouncedNotifications.clear();\n\n        for (const info of this._timeoutInfo.values()) {\n            clearTimeout(info.timeoutId);\n        }\n        this._timeoutInfo.clear();\n\n        const requestHandlerAbortControllers = this._requestHandlerAbortControllers;\n        this._requestHandlerAbortControllers = new Map();\n\n        const error = new SdkError(SdkErrorCode.ConnectionClosed, 'Connection closed');\n\n        this._transport = undefined;\n\n        try {\n            this.onclose?.();\n        } finally {\n            for (const handler of responseHandlers.values()) {\n                handler(error);\n            }\n\n            for (const controller of requestHandlerAbortControllers.values()) {\n                controller.abort(error);\n            }\n        }\n    }\n\n    private _onerror(error: Error): void {\n        this.onerror?.(error);\n    }\n\n    /**\n     * Inbound-notification dispatch. Subclass overrides MUST delegate\n     * unmatched traffic to `super._onnotification(rawNotification, extra)` —\n     * an override that consumes only what it owns and falls through to base\n     * dispatch for everything else.\n     */\n    protected _onnotification(rawNotification: JSONRPCNotification, extra?: MessageExtraInfo): void {\n        // Hide wire-only material from notification handlers too — but ONLY\n        // the reserved envelope `_meta` keys (the retry params names are\n        // reserved on requests, not notifications). There is no\n        // per-notification context, so the lifted envelope keys are dropped,\n        // not surfaced; the protocol layer owns them.\n        const { message: notification } = liftWireOnlyMaterial(rawNotification, 'notification');\n\n        // Era is instance state: the negotiated protocol version selects the\n        // codec for everything this connection receives (legacy until\n        // negotiated). Classification is never a per-message era switch — an\n        // edge classification is validated against the instance era below.\n        const codec = this._negotiatedWireCodec();\n\n        // Drop consult (only when the transport did not classify; edge-\n        // classified traffic never reaches the hook): a role class may decline\n        // unclassified inbound traffic the negotiated era has no answer for.\n        if (extra?.classification === undefined && this._shouldDropInbound(rawNotification) === 'drop') {\n            return;\n        }\n\n        // Edge→instance handoff check: a classification that disagrees with\n        // the instance era means the entry routed another era's traffic onto\n        // this instance. That is a routing error — drop the notification and\n        // surface it out of band; never serve it on a guessed era.\n        if (extra?.classification !== undefined) {\n            const classified = classifiedWireEra(extra.classification);\n            if (classified !== codec.era) {\n                this._onerror(\n                    new Error(\n                        `Era mismatch on inbound notification '${notification.method}': classified as ${classified} but this instance serves ${codec.era}`\n                    )\n                );\n                return;\n            }\n        }\n\n        // Era gate — deletions are physical: a spec notification that is not\n        // in this era's registry is dropped even when a handler is\n        // registered (notifications get no error response; silent drop is\n        // the protocol-correct outcome, matching today's unknown-method\n        // posture). Methods outside the spec universe are consumer-owned\n        // extension notifications and stay era-blind.\n        if (isSpecNotificationMethod(notification.method) && !codec.hasNotificationMethod(notification.method)) {\n            return;\n        }\n\n        const handler = this._notificationHandlers.get(notification.method);\n        const fallback = this.fallbackNotificationHandler;\n\n        // Ignore notifications not being subscribed to.\n        if (handler === undefined && fallback === undefined) {\n            return;\n        }\n\n        // Starting with Promise.resolve() puts any synchronous errors into the monad as well.\n        Promise.resolve()\n            .then(() => (handler === undefined ? fallback!(notification) : handler(notification, codec)))\n            .catch(error => this._onerror(new Error(`Uncaught error in notification handler: ${error}`)));\n    }\n\n    private _onrequest(rawRequest: JSONRPCRequest, extra?: MessageExtraInfo): void {\n        // Lift wire-only material before dispatch: handlers (including the\n        // fallback handler and the per-method schema parse) see exactly the\n        // 2025-era shape; the envelope and retry fields surface via ctx.\n        const { message: request, lifted } = liftWireOnlyMaterial(rawRequest, 'request');\n\n        // Era is instance state: the negotiated protocol version selects the\n        // codec for everything this connection receives (legacy until\n        // negotiated). Classification (Q2; produced at the transport/entry\n        // edge — this layer only CONSUMES MessageExtraInfo.classification) is\n        // never a per-message era switch — it is validated against the\n        // instance era below. Hand-wired legacy transports never classify, so\n        // their behavior is untouched.\n        const codec = this._negotiatedWireCodec();\n\n        // Drop consult (only when the transport did not classify; edge-\n        // classified traffic never reaches the hook): a role class may decline\n        // unclassified inbound traffic the negotiated era has no answer for.\n        if (extra?.classification === undefined && this._shouldDropInbound(rawRequest) === 'drop') {\n            this._onerror(new Error(`Dropped inbound request '${rawRequest.method}': not servable on this connection's protocol era`));\n            return;\n        }\n\n        // Capture the current transport at request time to ensure responses go to the correct client\n        const capturedTransport = this._transport;\n\n        const sendErrorResponse = (code: number, message: string, data?: unknown) => {\n            const errorResponse: JSONRPCErrorResponse = {\n                jsonrpc: '2.0',\n                id: request.id,\n                error: { code, message, ...(data !== undefined && { data }) }\n            };\n            capturedTransport?.send(errorResponse).catch(error => this._onerror(new Error(`Failed to send an error response: ${error}`)));\n        };\n\n        // Edge→instance handoff check: a classification that disagrees with\n        // the instance era means the entry routed another era's traffic onto\n        // this instance. That is a routing error: answer with the typed era\n        // error (−32022 Unsupported protocol version) and surface it out of\n        // band — never serve the request on a guessed era.\n        if (extra?.classification !== undefined) {\n            const classified = classifiedWireEra(extra.classification);\n            if (classified !== codec.era) {\n                this._onerror(\n                    new Error(\n                        `Era mismatch on inbound request '${request.method}': classified as ${classified} but this instance serves ${codec.era}`\n                    )\n                );\n                // `requested` echoes the protocol version the classification\n                // actually named when it carried one; the wire-era label is\n                // only the fallback for classifications without an exact\n                // revision.\n                const requested = extra.classification.revision ?? classified;\n                sendErrorResponse(ProtocolErrorCode.UnsupportedProtocolVersion, `Unsupported protocol version: ${requested}`, {\n                    // Per spec, `supported` is the full list of protocol\n                    // versions the receiver supports — not just the version\n                    // this connection is on — so the peer can pick a mutually\n                    // supported version from the error alone. (Revisit when\n                    // instances are bound to the modern era at the entry: a\n                    // bound instance's configured list may not name the\n                    // revision it was bound to.)\n                    supported: this._supportedProtocolVersions,\n                    requested\n                });\n                return;\n            }\n        }\n\n        // Era gate — deletions are physical: a spec method that is not in\n        // this era's registry is −32601 BY ABSENCE, before any handler\n        // lookup, even when a handler is registered (a custom handler cannot\n        // shadow a deleted spec method across eras). Methods outside the\n        // spec universe are consumer-owned extension methods and stay\n        // era-blind.\n        // Exception: the Tasks extension names (SEP-2663), when registered with an explicit schema.\n        if (\n            isSpecRequestMethod(request.method) &&\n            !codec.hasRequestMethod(request.method) &&\n            !(isExtensionReusedRequestMethod(request.method) && this._customSchemaRequestMethods.has(request.method))\n        ) {\n            sendErrorResponse(ProtocolErrorCode.MethodNotFound, 'Method not found');\n            return;\n        }\n\n        const handler = this._requestHandlers.get(request.method) ?? this.fallbackRequestHandler;\n\n        if (handler === undefined) {\n            sendErrorResponse(ProtocolErrorCode.MethodNotFound, 'Method not found');\n            return;\n        }\n\n        // Envelope enforcement: the 2026 era requires the per-request `_meta`\n        // envelope on every request (spec.types.2026-07-28 RequestParams).\n        // The lift extracted it above; the era codec validates requiredness.\n        // Deliberately AFTER the era gate and the handler-existence check:\n        // an unknown method answers −32601 even when the envelope is also\n        // missing — method existence outranks parameter validity. (The\n        // canonical precedence table for the full inbound validation ladder\n        // arrives with the validation-ladder milestone; this site encodes\n        // only the −32601-over-−32602 rule.)\n        const envelopeError = codec.checkInboundEnvelope(lifted);\n        if (envelopeError !== undefined) {\n            sendErrorResponse(ProtocolErrorCode.InvalidParams, envelopeError);\n            return;\n        }\n\n        // Related sends resolve through the SAME instance era as every other\n        // sender (the per-request/instance asymmetry is deliberately gone):\n        // the codec is resolved at send time from the connection state.\n        const sendNotification = (notification: Notification, options?: NotificationOptions) =>\n            this._notificationViaCodec(this._resolveOutboundCodec(notification.method), notification, {\n                ...options,\n                relatedRequestId: request.id\n            });\n        const sendRequest = <U extends StandardSchemaV1>(r: Request, resultSchema: U, options?: RequestOptions) =>\n            this._requestWithSchemaViaCodec(this._resolveOutboundCodec(r.method), r, resultSchema, {\n                ...options,\n                relatedRequestId: request.id\n            });\n\n        const abortController = new AbortController();\n        this._requestHandlerAbortControllers.set(request.id, abortController);\n\n        // Multi-round-trip retry material: only BARE response objects are\n        // surfaced to the handler; entries that look like a wrapped\n        // `{method, result}` shape (or are not objects at all) are dropped\n        // and their keys recorded so the handler can re-issue the input\n        // request instead of hard-failing (D-059 posture).\n        const partitionedInputResponses = lifted.inputResponses === undefined ? undefined : partitionInputResponses(lifted.inputResponses);\n\n        const baseCtx: BaseContext = {\n            sessionId: capturedTransport?.sessionId,\n            mcpReq: {\n                id: request.id,\n                method: request.method,\n                _meta: request.params?._meta,\n                ...(lifted.envelope !== undefined && { envelope: lifted.envelope }),\n                ...(partitionedInputResponses !== undefined && { inputResponses: partitionedInputResponses.accepted }),\n                ...(partitionedInputResponses !== undefined &&\n                    partitionedInputResponses.droppedKeys.length > 0 && {\n                        droppedInputResponseKeys: partitionedInputResponses.droppedKeys\n                    }),\n                // The accessor surfaces the raw lifted value (captured as the\n                // string primitive so the lift record stays collectable); the\n                // server seam swaps in the verify hook's decoded payload\n                // before the handler runs.\n                requestState: lifted.requestState === undefined ? NO_REQUEST_STATE : requestStateAccessor(lifted.requestState),\n                signal: abortController.signal,\n                // BaseContext.mcpReq.send is declared with two overloads (spec-method-keyed and explicit-schema). Arrow\n                // literals can't carry overload signatures, so the inferred single-signature type isn't assignable to\n                // that overloaded property type. The cast is sound: this impl dispatches both overload paths via the\n                // isStandardSchema guard, and sendRequest validates the result against the resolved schema either way.\n                send: ((r: Request, schemaOrOptions?: StandardSchemaV1 | RequestOptions, maybeOptions?: RequestOptions) => {\n                    // Related requests resolve through the instance era at\n                    // send time, exactly like direct sends: era-gate first,\n                    // then method-keyed schema resolution.\n                    const sendCodec = this._resolveOutboundCodec(r.method);\n                    this._assertOutboundRequestInEra(sendCodec, r.method);\n                    if (isStandardSchema(schemaOrOptions)) {\n                        return sendRequest(r, schemaOrOptions, maybeOptions);\n                    }\n                    const validate = codecResultValidator(sendCodec, r.method);\n                    if (validate === undefined) {\n                        throw new TypeError(\n                            `'${r.method}' is not a spec method; pass a result schema as the second argument to ctx.mcpReq.send().`\n                        );\n                    }\n                    return sendRequest(r, validate, schemaOrOptions);\n                }) as BaseContext['mcpReq']['send'],\n                notify: sendNotification\n            },\n            http: extra?.authInfo ? { authInfo: extra.authInfo } : undefined\n        };\n        const ctx = this.buildContext(baseCtx, extra);\n\n        // Starting with Promise.resolve() puts any synchronous errors into the monad as well.\n        Promise.resolve()\n            .then(() => handler(request, ctx))\n            .then(\n                async result => {\n                    if (abortController.signal.aborted) {\n                        // Request was cancelled\n                        return;\n                    }\n\n                    // The outbound stamp seam: the era codec maps the neutral\n                    // handler result to its wire shape. The 2025-era codec is\n                    // the identity (never-stamp); the 2026-era codec stamps\n                    // `resultType` and enforces the deleted-field set. A throw\n                    // here is a NEW failure mode between handler success and\n                    // the transport send (and the seam grows ttlMs/cacheScope\n                    // stamping content in M3.2) — it must answer the peer with\n                    // −32603 rather than stranding the request until timeout.\n                    let encoded: Result;\n                    try {\n                        encoded = codec.encodeResult(request.method, result, this._outboundServerInfo());\n                    } catch (error) {\n                        this._onerror(new Error(`Failed to encode result for ${request.method}: ${error}`));\n                        sendErrorResponse(ProtocolErrorCode.InternalError, 'Internal error');\n                        return;\n                    }\n\n                    const response: JSONRPCResponse = {\n                        result: encoded,\n                        jsonrpc: '2.0',\n                        id: request.id\n                    };\n                    await capturedTransport?.send(response);\n                },\n                async error => {\n                    if (abortController.signal.aborted) {\n                        // Request was cancelled\n                        return;\n                    }\n\n                    // The error half of the encode seam: the era codec selects\n                    // the wire code for a handler-thrown error, so per-era\n                    // wire-code policy lives in the codec rather than in any\n                    // handler. Non-integer codes still fall through to −32603.\n                    const thrownCode = Number.isSafeInteger(error['code']) ? (error['code'] as number) : ProtocolErrorCode.InternalError;\n                    const errorResponse: JSONRPCErrorResponse = {\n                        jsonrpc: '2.0',\n                        id: request.id,\n                        error: {\n                            code: codec.encodeErrorCode(thrownCode),\n                            message: error.message ?? 'Internal error',\n                            ...(error['data'] !== undefined && { data: error['data'] })\n                        }\n                    };\n                    await capturedTransport?.send(errorResponse);\n                }\n            )\n            .catch(error => this._onerror(new Error(`Failed to send response: ${error}`)))\n            .finally(() => {\n                if (this._requestHandlerAbortControllers.get(request.id) === abortController) {\n                    this._requestHandlerAbortControllers.delete(request.id);\n                }\n            });\n    }\n\n    private _onprogress(notification: ProgressNotification): void {\n        const { progressToken, ...params } = notification.params;\n        const messageId = Number(progressToken);\n\n        const handler = this._progressHandlers.get(messageId);\n        if (!handler) {\n            this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(notification)}`));\n            return;\n        }\n\n        const responseHandler = this._responseHandlers.get(messageId);\n        const timeoutInfo = this._timeoutInfo.get(messageId);\n\n        if (timeoutInfo && responseHandler && timeoutInfo.resetTimeoutOnProgress) {\n            try {\n                this._resetTimeout(messageId);\n            } catch (error) {\n                // Clean up if maxTotalTimeout was exceeded\n                this._responseHandlers.delete(messageId);\n                this._progressHandlers.delete(messageId);\n                this._cleanupTimeout(messageId);\n                responseHandler(error as Error);\n                return;\n            }\n        }\n\n        handler(params);\n    }\n\n    /**\n     * Inbound-response dispatch. Subclass overrides MUST delegate unmatched\n     * traffic to `super._onresponse(response)` — an override that consumes\n     * only what it owns and falls through to base dispatch for everything\n     * else.\n     */\n    protected _onresponse(response: JSONRPCResponse | JSONRPCErrorResponse): void {\n        const messageId = Number(response.id);\n\n        const handler = this._responseHandlers.get(messageId);\n        if (handler === undefined) {\n            this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(response)}`));\n            return;\n        }\n\n        this._responseHandlers.delete(messageId);\n        this._cleanupTimeout(messageId);\n        this._progressHandlers.delete(messageId);\n\n        if (isJSONRPCResultResponse(response)) {\n            handler(response);\n        } else {\n            const error = ProtocolError.fromError(response.error.code, response.error.message, response.error.data);\n            handler(error);\n        }\n    }\n\n    get transport(): Transport | undefined {\n        return this._transport;\n    }\n\n    /**\n     * Closes the connection.\n     */\n    async close(): Promise<void> {\n        await this._transport?.close();\n    }\n\n    /**\n     * A method to check if a capability is supported by the remote side, for the given method to be called.\n     *\n     * This should be implemented by subclasses.\n     */\n    protected abstract assertCapabilityForMethod(method: RequestMethod | string): void;\n\n    /**\n     * A method to check if a notification is supported by the local side, for the given method to be sent.\n     *\n     * This should be implemented by subclasses.\n     */\n    protected abstract assertNotificationCapability(method: NotificationMethod | string): void;\n\n    /**\n     * A method to check if a request handler is supported by the local side, for the given method to be handled.\n     *\n     * This should be implemented by subclasses.\n     */\n    protected abstract assertRequestHandlerCapability(method: string): void;\n\n    /**\n     * Sends a request and waits for a response.\n     *\n     * For spec methods the result schema is resolved automatically from the method name\n     * and the return type is method-keyed. For custom (non-spec) methods, pass a\n     * `resultSchema` as the second argument; the response is validated against it and\n     * the return type is inferred from the schema.\n     *\n     * Do not use this method to emit notifications! Use {@linkcode Protocol.notification | notification()} instead.\n     */\n    request<M extends RequestMethod>(\n        request: { method: M; params?: Record<string, unknown> },\n        options?: RequestOptions\n    ): Promise<ResultTypeMap[M]>;\n    request<T extends StandardSchemaV1>(\n        request: Request,\n        resultSchema: T,\n        options?: RequestOptions\n    ): Promise<StandardSchemaV1.InferOutput<T>>;\n    request(request: Request, schemaOrOptions?: StandardSchemaV1 | RequestOptions, maybeOptions?: RequestOptions): Promise<unknown> {\n        const codec = this._resolveOutboundCodec(request.method);\n        if (isStandardSchema(schemaOrOptions)) {\n            // Only the Tasks extension names skip the era gate here; every other spec method stays gated.\n            if (!isExtensionReusedRequestMethod(request.method)) this._assertOutboundRequestInEra(codec, request.method);\n            return this._requestWithSchemaViaCodec(codec, request, schemaOrOptions, maybeOptions);\n        }\n        this._assertOutboundRequestInEra(codec, request.method);\n        const validate = codecResultValidator(codec, request.method);\n        if (validate === undefined) {\n            throw new TypeError(`'${request.method}' is not a spec method; pass a result schema as the second argument to request().`);\n        }\n        return this._requestWithSchemaViaCodec(codec, request, validate, schemaOrOptions);\n    }\n\n    /**\n     * The wire codec for this instance's negotiated era — the phase-2 truth:\n     * everything an established connection sends and receives resolves\n     * through it. Legacy until a version has been negotiated.\n     */\n    private _negotiatedWireCodec(): WireCodec {\n        return codecForVersion(this._negotiatedProtocolVersion);\n    }\n\n    /**\n     * Protected accessor for the instance's negotiated wire codec, for role\n     * classes (Client/Server/McpServer) routing era-dependent behavior\n     * through the codec's function-only surface — `samplingResultVariant`,\n     * `outboundEnvelope`, `projectCallToolResult` — instead of branching on\n     * the protocol version themselves.\n     */\n    protected _wireCodec(): WireCodec {\n        return this._negotiatedWireCodec();\n    }\n\n    /**\n     * Outbound codec resolution: while the negotiated version is still unset\n     * (the negotiation window), lifecycle messages are bootstrap-pinned BY\n     * METHOD — they self-identify their era (`initialize` IS the legacy\n     * handshake, `server/discover` IS the modern probe). Once a version has\n     * been negotiated, the instance era is authoritative for everything — a\n     * negotiated session never re-routes a method onto the other era.\n     */\n    private _resolveOutboundCodec(method: string): WireCodec {\n        if (this._negotiatedProtocolVersion === undefined) {\n            const pinned = bootstrapOutboundCodec(method);\n            if (pinned) return pinned;\n        }\n        return this._negotiatedWireCodec();\n    }\n\n    /**\n     * Era gate for outbound requests — deletions are physical in BOTH\n     * directions: sending a spec method that the resolved era does not define\n     * dies locally with a typed error before anything reaches the transport.\n     * Methods outside the spec universe are consumer-owned extension methods\n     * and stay era-blind.\n     */\n    private _assertOutboundRequestInEra(codec: WireCodec, method: string): void {\n        if (isSpecRequestMethod(method) && !codec.hasRequestMethod(method)) {\n            throw new SdkError(\n                SdkErrorCode.MethodNotSupportedByProtocolVersion,\n                `Method '${method}' is not supported by the negotiated protocol version (wire era ${codec.era})`,\n                { method, era: codec.era }\n            );\n        }\n    }\n\n    /**\n     * Sends a request and waits for a response, using the provided schema for\n     * validation instead of the era registry's method-keyed entry.\n     *\n     * This is the internal implementation used by SDK methods whose result\n     * schema cannot be expressed as a method-keyed registry entry — the one\n     * surviving case is `server.createMessage`, whose result schema depends\n     * on the REQUEST params (tools vs no tools) — and by callers passing\n     * explicit compatibility schemas. Spec methods are still era-gated here:\n     * an explicit schema never smuggles a deleted method onto the wire.\n     */\n    protected _requestWithSchema<T extends StandardSchemaV1>(\n        request: Request,\n        resultSchema: T,\n        options?: RequestOptions\n    ): Promise<StandardSchemaV1.InferOutput<T>> {\n        const codec = this._resolveOutboundCodec(request.method);\n        this._assertOutboundRequestInEra(codec, request.method);\n        return this._requestWithSchemaViaCodec(codec, request, resultSchema, options);\n    }\n\n    /**\n     * The request funnel proper, keyed by the resolved era codec: the codec\n     * owns result decoding (raw-first `resultType` discrimination — V-1 —\n     * and the era's lift posture) before the schema validation step.\n     */\n    private _requestWithSchemaViaCodec<T extends StandardSchemaV1>(\n        codec: WireCodec,\n        request: Request,\n        resultSchema: T,\n        options?: RequestOptions\n    ): Promise<StandardSchemaV1.InferOutput<T>> {\n        const { relatedRequestId, resumptionToken, onresumptiontoken, headers } = options ?? {};\n        // Flow start for non-complete result resolution: `maxTotalTimeout`\n        // bounds the WHOLE flow, so the budget is measured from the original\n        // request, not from when an extension takes over after the first leg.\n        const flowStartedAt = Date.now();\n\n        let onAbort: (() => void) | undefined;\n        let cleanupMessageId: number | undefined;\n\n        // Send the request\n        return new Promise<StandardSchemaV1.InferOutput<T>>((resolve, reject) => {\n            const earlyReject = (error: unknown) => {\n                reject(error);\n            };\n\n            if (!this._transport) {\n                earlyReject(new Error('Not connected'));\n                return;\n            }\n\n            if (this._options?.enforceStrictCapabilities === true) {\n                try {\n                    this.assertCapabilityForMethod(request.method);\n                } catch (error) {\n                    earlyReject(error);\n                    return;\n                }\n            }\n\n            // An already-aborted caller signal must surface the same way an\n            // in-flight abort does (`SdkError(RequestTimeout, reason)` via\n            // `cancel()` below). Bare `throwIfAborted()` would propagate the\n            // raw `signal.reason` instead, so callers that introduce an async\n            // hop before `request()` (e.g. a cache freshness check) would see\n            // a different rejection type depending on where the abort lands.\n            if (options?.signal?.aborted) {\n                const reason = options.signal.reason;\n                throw reason instanceof SdkError ? reason : new SdkError(SdkErrorCode.RequestTimeout, String(reason));\n            }\n\n            // Spec basic/patterns/cancellation §Transport-Specific (2026-07-28):\n            // on Streamable HTTP, closing the per-request SSE stream IS the\n            // cancellation signal — \"no notifications/cancelled message is\n            // required or expected\". When the negotiated era is modern AND the\n            // transport opens a per-request stream (`hasPerRequestStream`),\n            // cancel() aborts that stream via `requestSignal` INSTEAD OF\n            // POSTing `notifications/cancelled`. Every other (era × transport)\n            // combination — legacy era on any transport, modern era on stdio /\n            // in-memory — keeps today's `notifications/cancelled` POST path\n            // unchanged.\n            const streamCloseCancels = codec.era === MODERN_WIRE_REVISION && this._transport.hasPerRequestStream === true;\n            const requestAbort = streamCloseCancels ? new AbortController() : undefined;\n\n            const messageId = this._requestMessageId++;\n            cleanupMessageId = messageId;\n            const jsonrpcRequest: JSONRPCRequest = {\n                ...request,\n                jsonrpc: '2.0',\n                id: messageId\n            };\n\n            if (options?.onprogress) {\n                this._progressHandlers.set(messageId, options.onprogress);\n                jsonrpcRequest.params = {\n                    ...request.params,\n                    _meta: {\n                        ...request.params?._meta,\n                        progressToken: messageId\n                    }\n                };\n            }\n\n            // Per-request envelope auto-attach (after the progressToken merge so\n            // both share the same `_meta`): a no-op on the legacy era — the\n            // envelope seam returns undefined and the request goes out exactly as\n            // built above.\n            const outbound = this._envelopeOutbound(jsonrpcRequest);\n\n            let responseReceived = false;\n\n            const cancel = (reason: unknown) => {\n                if (responseReceived) {\n                    return;\n                }\n                this._progressHandlers.delete(messageId);\n\n                if (requestAbort === undefined) {\n                    // \"A client MUST NOT attempt to cancel its `initialize`\n                    // request\" (spec basic/lifecycle, mirrored on\n                    // `CancelledNotification`). The handshake is the one request\n                    // whose cancellation is forbidden outright, so an abort or\n                    // timeout on it settles purely locally: the promise still\n                    // rejects below, but nothing goes on the wire. Only the\n                    // legacy era can reach this — `initialize` is absent from the\n                    // modern registry, which negotiates via `server/discover`.\n                    if (request.method !== 'initialize') {\n                        this._transport\n                            ?.send(\n                                this._envelopeOutbound({\n                                    jsonrpc: '2.0',\n                                    method: 'notifications/cancelled',\n                                    params: {\n                                        requestId: messageId,\n                                        reason: String(reason)\n                                    }\n                                }),\n                                { relatedRequestId, resumptionToken, onresumptiontoken }\n                            )\n                            .catch(error => this._onerror(new Error(`Failed to send cancellation: ${error}`)));\n                    }\n                } else {\n                    // Modern-era per-request-stream transport: aborting the\n                    // request's underlying stream IS the spec cancel signal.\n                    // The transport already swallows the resulting AbortError\n                    // (no spurious `onerror`); a post-abort send() rejection\n                    // re-hits an already-settled promise below and is a no-op.\n                    requestAbort.abort();\n                }\n\n                // Wrap the reason in an SdkError if it isn't already\n                const error = reason instanceof SdkError ? reason : new SdkError(SdkErrorCode.RequestTimeout, String(reason));\n                reject(error);\n            };\n\n            this._responseHandlers.set(messageId, response => {\n                if (options?.signal?.aborted) {\n                    return;\n                }\n                responseReceived = true;\n\n                if (response instanceof Error) {\n                    return reject(response);\n                }\n\n                // Codec decode hop — the structural V-1 home. The era codec\n                // owns the raw-first resultType postures (Q1-SD3):\n                // - 2026 era: REQUIRED discriminator; absent → typed error\n                //   naming the spec violation; input_required → driver seam;\n                //   unknown kind → invalid, no retry; complete → wire-exact\n                //   parse then lift.\n                // - 2025 era: resultType is foreign vocabulary → strip-on-\n                //   lift, then today's schema validation decides.\n                // Either way a non-complete body can never be masked into a\n                // hollow success by a tolerant result schema.\n                // Guarded: this callback runs synchronously inside\n                // `_onresponse`, so a throw out of the decode hop would\n                // otherwise propagate into the transport's onmessage instead\n                // of failing this request.\n                let decoded: ReturnType<WireCodec['decodeResult']>;\n                try {\n                    decoded = codec.decodeResult(request.method, response.result);\n                } catch (error) {\n                    return reject(error instanceof Error ? error : new Error(String(error)));\n                }\n                if (decoded.kind === 'invalid') {\n                    return reject(decoded.error);\n                }\n                if (decoded.kind === 'input_required') {\n                    // Manual mode (the primitive any driver layers over):\n                    // hand the input-required value back to the caller.\n                    if (options?.allowInputRequired === true) {\n                        return resolve(manualInputRequiredValue(decoded) as StandardSchemaV1.InferOutput<T>);\n                    }\n                    // Non-complete result extension point: the role class may\n                    // resolve the flow itself (the Client wires the\n                    // multi-round-trip auto-fulfilment engine here). The base\n                    // default is the typed UnsupportedResultType error.\n                    const flow: NonCompleteResultFlow<T> = {\n                        codec,\n                        request,\n                        resultSchema,\n                        options,\n                        flowStartedAt,\n                        retry: (params, legOptions) =>\n                            this._requestWithSchemaViaCodec(\n                                codec,\n                                params === undefined ? { method: request.method } : { method: request.method, params },\n                                resultSchema,\n                                legOptions\n                            )\n                    };\n                    return resolve(this._resolveNonCompleteResult(decoded, flow) as Promise<StandardSchemaV1.InferOutput<T>>);\n                }\n                const result = decoded.result;\n\n                validateStandardSchema(resultSchema, result).then(parseResult => {\n                    if (parseResult.success) {\n                        resolve(parseResult.data);\n                    } else {\n                        reject(new SdkError(SdkErrorCode.InvalidResult, `Invalid result for ${request.method}: ${parseResult.error}`));\n                    }\n                }, reject);\n            });\n\n            onAbort = () => cancel(options?.signal?.reason);\n            options?.signal?.addEventListener('abort', onAbort, { once: true });\n\n            const timeout = options?.timeout ?? DEFAULT_REQUEST_TIMEOUT_MSEC;\n            const timeoutHandler = () => cancel(new SdkError(SdkErrorCode.RequestTimeout, 'Request timed out', { timeout }));\n\n            this._setupTimeout(messageId, timeout, options?.maxTotalTimeout, timeoutHandler, options?.resetTimeoutOnProgress ?? false);\n\n            this._transport\n                .send(outbound, { relatedRequestId, resumptionToken, onresumptiontoken, headers, requestSignal: requestAbort?.signal })\n                .catch(error => {\n                    this._progressHandlers.delete(messageId);\n                    reject(error);\n                });\n        }).finally(() => {\n            // Per-request cleanup that must run on every exit path. Consolidated\n            // here so new exit paths added to the promise body can't forget it.\n            // _progressHandlers is NOT cleaned up here: _onresponse deletes it\n            // on resolution, and error paths above delete it inline.\n            if (onAbort) {\n                options?.signal?.removeEventListener('abort', onAbort);\n            }\n            if (cleanupMessageId !== undefined) {\n                this._responseHandlers.delete(cleanupMessageId);\n                this._cleanupTimeout(cleanupMessageId);\n            }\n        });\n    }\n\n    /**\n     * Emits a notification, which is a one-way message that does not expect a response.\n     */\n    async notification(notification: Notification, options?: NotificationOptions): Promise<void> {\n        return await this._notificationViaCodec(this._resolveOutboundCodec(notification.method), notification, options);\n    }\n\n    /**\n     * The notification funnel proper, keyed by the resolved era codec —\n     * direct sends and related notifications (`ctx.mcpReq.notify`) alike\n     * resolve through the instance's negotiated era at send time.\n     */\n    private async _notificationViaCodec(codec: WireCodec, notification: Notification, options?: NotificationOptions): Promise<void> {\n        if (!this._transport) {\n            throw new SdkError(SdkErrorCode.NotConnected, 'Not connected');\n        }\n\n        // Era gate — outbound deletions are physical for notifications too: a\n        // spec notification the resolved era does not define dies locally.\n        if (isSpecNotificationMethod(notification.method) && !codec.hasNotificationMethod(notification.method)) {\n            throw new SdkError(\n                SdkErrorCode.MethodNotSupportedByProtocolVersion,\n                `Notification '${notification.method}' is not supported by the negotiated protocol version (wire era ${codec.era})`,\n                { method: notification.method, era: codec.era }\n            );\n        }\n\n        this.assertNotificationCapability(notification.method);\n\n        const jsonrpcNotification = this._envelopeOutbound({ jsonrpc: '2.0' as const, ...notification });\n\n        const debouncedMethods = this._options?.debouncedNotificationMethods ?? [];\n        // A notification can only be debounced if it's in the list AND it's \"simple\"\n        // (i.e., has no parameters and no related request ID that could be lost).\n        // Absent is the only thing that means \"no id\" here too: `0` and `''` are\n        // legal request ids, and the pending set is keyed by method alone, so\n        // treating them as absent lets a related notification be coalesced away.\n        const canDebounce =\n            debouncedMethods.includes(notification.method) && !notification.params && options?.relatedRequestId === undefined;\n\n        if (canDebounce) {\n            // If a notification of this type is already scheduled, do nothing.\n            if (this._pendingDebouncedNotifications.has(notification.method)) {\n                return;\n            }\n\n            // Mark this notification type as pending.\n            this._pendingDebouncedNotifications.add(notification.method);\n\n            // Schedule the actual send to happen in the next microtask.\n            // This allows all synchronous calls in the current event loop tick to be coalesced.\n            Promise.resolve().then(() => {\n                // Un-mark the notification so the next one can be scheduled.\n                this._pendingDebouncedNotifications.delete(notification.method);\n\n                // SAFETY CHECK: If the connection was closed while this was pending, abort.\n                if (!this._transport) {\n                    return;\n                }\n\n                // Send the notification, but don't await it here to avoid blocking.\n                // Handle potential errors with a .catch().\n                this._transport?.send(jsonrpcNotification, options).catch(error => this._onerror(error));\n            });\n\n            // Return immediately.\n            return;\n        }\n\n        await this._transport.send(jsonrpcNotification, options);\n    }\n\n    /**\n     * Registers a handler to invoke when this protocol object receives a request with the given method.\n     *\n     * Note that this will replace any previous request handler for the same method.\n     *\n     * For spec methods, pass `(method, handler)`; the request is parsed with the spec\n     * schema and the handler receives the typed `Request`. For custom (non-spec)\n     * methods, pass `(method, schemas, handler)`; `params` are validated against\n     * `schemas.params` and the handler receives the parsed params object directly.\n     * Supplying `schemas.result` types the handler's return value.\n     *\n     * @example Custom request method\n     * ```ts source=\"./protocol.examples.ts#Protocol_setRequestHandler_customMethod\"\n     * const SearchParams = z.object({ query: z.string(), limit: z.number().optional() });\n     * const SearchResult = z.object({ hits: z.array(z.string()) });\n     *\n     * protocol.setRequestHandler('acme/search', { params: SearchParams, result: SearchResult }, async (params, _ctx) => {\n     *     return { hits: [`result for ${params.query}`] };\n     * });\n     * ```\n     */\n    setRequestHandler<M extends RequestMethod>(\n        method: M,\n        handler: (request: RequestTypeMap[M], ctx: ContextT) => HandlerResultTypeMap[M] | Promise<HandlerResultTypeMap[M]>\n    ): void;\n    setRequestHandler<P extends StandardSchemaV1, R extends StandardSchemaV1 | undefined = undefined>(\n        method: string,\n        schemas: { params: P; result?: R },\n        handler: (params: StandardSchemaV1.InferOutput<P>, ctx: ContextT) => InferHandlerResult<R> | Promise<InferHandlerResult<R>>\n    ): void;\n    setRequestHandler(\n        method: string,\n        schemasOrHandler: RequestHandlerSchemas | ((request: unknown, ctx: ContextT) => Result | Promise<Result>),\n        maybeHandler?: (params: unknown, ctx: ContextT) => Result | Promise<Result>\n    ): void {\n        this.assertRequestHandlerCapability(method);\n\n        let stored: (request: JSONRPCRequest, ctx: ContextT) => Promise<Result>;\n\n        if (typeof schemasOrHandler === 'function') {\n            if (!isSpecRequestMethod(method)) {\n                throw new TypeError(\n                    `'${method}' is not a spec request method; pass schemas as the second argument to setRequestHandler().`\n                );\n            }\n            // Dispatch-time schema resolution: the request is parsed with the\n            // schema of the era serving this connection (the instance era at\n            // dispatch time), never with a schema captured at registration\n            // time. On the 2026-07-28 era the demoted server→client methods\n            // (elicitation/sampling/roots) are not wire request methods —\n            // they reach a handler only as embedded input requests dispatched\n            // by the multi-round-trip driver, and parse with the era's\n            // in-band schema instead.\n            stored = (request, ctx) => {\n                const dispatchCodec = this._negotiatedWireCodec();\n                let outcome = dispatchCodec.validateRequest(method, request);\n                if (!outcome.ok && outcome.reason === 'not-in-era') {\n                    outcome = dispatchCodec.validateInputRequest(method, request);\n                }\n                if (!outcome.ok) {\n                    if (outcome.reason === 'not-in-era') {\n                        // Unreachable: the dispatch era gate rejects\n                        // era-mismatched spec methods with −32601 before any\n                        // handler runs.\n                        throw new ProtocolError(ProtocolErrorCode.InternalError, `No wire schema for ${method} in the resolved era`);\n                    }\n                    // Preserves the pre-function-only error surface: the Zod\n                    // parse threw out of the handler and the funnel mapped it\n                    // to −32603 Internal error (specCorpusDispatch pins this).\n                    throw new Error(outcome.message);\n                }\n                return Promise.resolve(schemasOrHandler(outcome.value, ctx));\n            };\n        } else if (maybeHandler) {\n            stored = async (request, ctx) => {\n                // Custom handlers receive `_meta` present-minus-reserved: the\n                // wire-only lift already removed the reserved envelope keys,\n                // and the remaining metadata (progressToken, extension keys)\n                // is handler material — consistent with the spec-method path.\n                // (Behavior migration: `_meta` used to be deleted here.)\n                const parsed = await validateStandardSchema(schemasOrHandler.params, { ...request.params });\n                if (!parsed.success) {\n                    throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Invalid params for ${method}: ${parsed.error}`);\n                }\n                return maybeHandler(parsed.data, ctx);\n            };\n        } else {\n            throw new TypeError('setRequestHandler: handler is required');\n        }\n\n        // The era gate reads how the handler was registered; a method-keyed re-registration ends the exemption.\n        if (typeof schemasOrHandler === 'function') {\n            this._customSchemaRequestMethods.delete(method);\n        } else {\n            this._customSchemaRequestMethods.add(method);\n        }\n\n        this._requestHandlers.set(method, this._wrapHandler(method, stored));\n    }\n\n    /**\n     * Hook for subclasses to wrap a registered request handler with role-specific\n     * validation or behavior (e.g. `Server` validates `tools/call` results, `Client`\n     * validates `elicitation/create` mode and result). Runs for both the 2-arg and\n     * 3-arg registration paths. The default implementation is identity.\n     *\n     * Subclasses overriding this hook avoid redeclaring `setRequestHandler`'s overload set.\n     */\n    protected _wrapHandler(\n        _method: string,\n        handler: (request: JSONRPCRequest, ctx: ContextT) => Promise<Result>\n    ): (request: JSONRPCRequest, ctx: ContextT) => Promise<Result> {\n        return handler;\n    }\n\n    /**\n     * Hook for subclasses to supply the implementation identity the 2026-era\n     * encode seam stamps into outbound result `_meta` under\n     * `io.modelcontextprotocol/serverInfo` (spec PR #3002: servers SHOULD\n     * identify themselves on every response). The default is `undefined` — no\n     * stamp. Only `Server` overrides this: the key identifies the software\n     * producing a response, and the 2025-era codec never stamps anything\n     * regardless (the never-stamp guarantee).\n     */\n    protected _outboundServerInfo(): Implementation | undefined {\n        return undefined;\n    }\n\n    /**\n     * Removes the request handler for the given method.\n     */\n    removeRequestHandler(method: RequestMethod | string): void {\n        this._requestHandlers.delete(method);\n        this._customSchemaRequestMethods.delete(method);\n    }\n\n    /**\n     * Asserts that a request handler has not already been set for the given method, in preparation for a new one being automatically installed.\n     */\n    assertCanSetRequestHandler(method: RequestMethod | string): void {\n        if (this._requestHandlers.has(method)) {\n            throw new Error(`A request handler for ${method} already exists, which would be overridden`);\n        }\n    }\n\n    /**\n     * Registers a handler to invoke when this protocol object receives a notification with the given method.\n     *\n     * Note that this will replace any previous notification handler for the same method.\n     *\n     * For spec methods, pass `(method, handler)`; the notification is parsed with the\n     * spec schema. For custom (non-spec) methods, pass `(method, schemas, handler)`;\n     * `params` are validated against `schemas.params` and the handler receives the\n     * parsed params object directly. The raw notification is passed as the second\n     * argument; `_meta` is recoverable via `notification.params?._meta` (minus the\n     * reserved `io.modelcontextprotocol/*` envelope keys, which the protocol layer\n     * lifts out before dispatch).\n     */\n    setNotificationHandler<M extends NotificationMethod>(\n        method: M,\n        handler: (notification: NotificationTypeMap[M]) => void | Promise<void>\n    ): void;\n    setNotificationHandler<P extends StandardSchemaV1>(\n        method: string,\n        schemas: { params: P },\n        handler: (params: StandardSchemaV1.InferOutput<P>, notification: Notification) => void | Promise<void>\n    ): void;\n    setNotificationHandler(\n        method: string,\n        schemasOrHandler: { params: StandardSchemaV1 } | ((notification: unknown) => void | Promise<void>),\n        maybeHandler?: (params: unknown, notification: Notification) => void | Promise<void>\n    ): void {\n        if (typeof schemasOrHandler === 'function') {\n            if (!isSpecNotificationMethod(method)) {\n                throw new TypeError(\n                    `'${method}' is not a spec notification method; pass schemas as the second argument to setNotificationHandler().`\n                );\n            }\n            // Dispatch-time schema resolution, same as setRequestHandler: the\n            // era serving the message picks the schema.\n            this._notificationHandlers.set(method, (notification, codec) => {\n                const outcome = codec.validateNotification(method, notification);\n                if (!outcome.ok) {\n                    if (outcome.reason === 'not-in-era') {\n                        // Unreachable: the dispatch era gate drops\n                        // era-mismatched spec notifications before any\n                        // handler runs.\n                        throw new ProtocolError(ProtocolErrorCode.InternalError, `No wire schema for ${method} in the resolved era`);\n                    }\n                    // Preserves the pre-function-only error surface (parse\n                    // threw out of the handler).\n                    throw new Error(outcome.message);\n                }\n                return Promise.resolve(schemasOrHandler(outcome.value));\n            });\n            return;\n        }\n\n        if (!maybeHandler) {\n            throw new TypeError('setNotificationHandler: handler is required');\n        }\n        this._notificationHandlers.set(method, async notification => {\n            // `_meta` present-minus-reserved, matching the custom request\n            // path (the lift already removed the reserved envelope keys).\n            const parsed = await validateStandardSchema(schemasOrHandler.params, { ...notification.params });\n            if (!parsed.success) {\n                throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Invalid params for notification ${method}: ${parsed.error}`);\n            }\n            await maybeHandler(parsed.data, notification);\n        });\n    }\n\n    /**\n     * Removes the notification handler for the given method.\n     */\n    removeNotificationHandler(method: NotificationMethod | string): void {\n        this._notificationHandlers.delete(method);\n    }\n}\n\n/**\n * Schema bundle accepted by {@linkcode Protocol.setRequestHandler | setRequestHandler}'s 3-arg form.\n *\n * `params` is required and validates the inbound `request.params`. `result` is optional;\n * when supplied it types the handler's return value (no runtime validation is performed\n * on the result).\n */\nexport interface RequestHandlerSchemas<\n    P extends StandardSchemaV1 = StandardSchemaV1,\n    R extends StandardSchemaV1 | undefined = StandardSchemaV1 | undefined\n> {\n    params: P;\n    result?: R;\n}\n\ntype InferHandlerResult<R extends StandardSchemaV1 | undefined> = R extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<R> : Result;\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n    return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport function mergeCapabilities(base: ServerCapabilities, additional: Partial<ServerCapabilities>): ServerCapabilities;\nexport function mergeCapabilities(base: ClientCapabilities, additional: Partial<ClientCapabilities>): ClientCapabilities;\nexport function mergeCapabilities<T extends ServerCapabilities | ClientCapabilities>(base: T, additional: Partial<T>): T {\n    const result: T = { ...base };\n    for (const key in additional) {\n        const k = key as keyof T;\n        const addValue = additional[k];\n        if (addValue === undefined) continue;\n        const baseValue = result[k];\n        result[k] =\n            isPlainObject(baseValue) && isPlainObject(addValue)\n                ? ({ ...(baseValue as Record<string, unknown>), ...(addValue as Record<string, unknown>) } as T[typeof k])\n                : (addValue as T[typeof k]);\n    }\n    return result;\n}\n", "/**\n * The multi-round-trip auto-fulfilment ENGINE (protocol revision 2026-07-28):\n * the wiring between the protocol layer's response funnel, the\n * already-registered input handlers, and the pure {@link runInputRequiredDriver}\n * loop. The engine is what the `Client` plugs into the funnel's\n * `_resolveNonCompleteResult` extension point — `Protocol` itself only knows\n * the input-required branch exists.\n *\n * Relocated here so the shared `Protocol` base stays generic: the only\n * MRTR-specific code that remains in `protocol.ts` is the irreducible\n * input-required branch in the response path, the type surface (the\n * `allowInputRequired` request option and the `inputResponses`/`requestState`/\n * `droppedInputResponseKeys` context fields), and the named extension point.\n */\nimport { SdkError, SdkErrorCode } from '../errors/sdkErrors';\nimport type { InputRequiredResult, JSONRPCRequest, RequestMeta, Result, ResultMetaObject } from '../types/types';\nimport type { StandardSchemaV1 } from '../util/standardSchema';\nimport type { WireCodec } from '../wire/codec';\nimport type {\n    InputRequiredDriverHooks,\n    InputRequiredPayload,\n    InputRequiredRetryLegOptions,\n    ResolvedInputRequiredDriverConfig\n} from './inputRequiredDriver';\nimport { runInputRequiredDriver } from './inputRequiredDriver';\nimport type { BaseContext, NonCompleteResultFlow, RequestOptions } from './protocol';\nimport { requestStateAccessor } from './protocol';\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n    return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/**\n * Splits a retried request's `inputResponses` map into the BARE response\n * entries the spec defines and everything else. The spec's embedded responses\n * are the bare result objects (an `ElicitResult`, `CreateMessageResult`, or\n * `ListRootsResult`); a wrapped `{method, result}` envelope (a shape some\n * peers emit) is never accepted as a response — its key is recorded so the\n * handler can re-issue the corresponding input request.\n */\nexport function partitionInputResponses(inputResponses: unknown): { accepted: Record<string, unknown>; droppedKeys: string[] } {\n    const accepted: Record<string, unknown> = {};\n    const droppedKeys: string[] = [];\n    if (!isPlainObject(inputResponses)) {\n        return { accepted, droppedKeys };\n    }\n    for (const [key, entry] of Object.entries(inputResponses)) {\n        // Bare responses never carry `method` or `result` members — both are\n        // the signature of the wrapped (JSON-RPC-shaped) form.\n        if (!isPlainObject(entry) || 'method' in entry || 'result' in entry) {\n            droppedKeys.push(key);\n            continue;\n        }\n        accepted[key] = entry;\n    }\n    return { accepted, droppedKeys };\n}\n\n/**\n * Related send/notify are unavailable inside an embedded input-request\n * handler: the request is fulfilled locally by the multi-round-trip driver,\n * so there is no live peer request to relate messages to.\n */\nfunction relatedMessagingUnavailable(member: string): never {\n    throw new SdkError(\n        SdkErrorCode.SendFailed,\n        `ctx.mcpReq.${member} is not available while fulfilling an embedded input request: ` +\n            `the request is fulfilled locally and has no related peer request`\n    );\n}\n\n/**\n * The synthesized {@linkcode BaseContext} for an embedded input request: the\n * id is the `inputRequests` key (correlation only — it is not a JSON-RPC\n * message id), the supplied abort signal chains the originating call's signal\n * through, and related `send`/`notify` are unavailable because there is no\n * live peer request to relate them to.\n */\nexport function synthesizeInputRequestContext(\n    key: string,\n    method: string,\n    params: Record<string, unknown> | undefined,\n    signal: AbortSignal,\n    sessionId: string | undefined\n): BaseContext {\n    return {\n        sessionId,\n        mcpReq: {\n            id: key,\n            method,\n            _meta: params?.['_meta'] as RequestMeta | undefined,\n            // Embedded input requests never carry multi-round-trip state.\n            requestState: requestStateAccessor(undefined),\n            signal,\n            send: (() => relatedMessagingUnavailable('send')) as BaseContext['mcpReq']['send'],\n            notify: () => relatedMessagingUnavailable('notify')\n        }\n    };\n}\n\n/**\n * Hooks the engine needs from the consuming role class (the `Client`): how to\n * look up a registered handler and how to enrich a base context.\n */\nexport interface InputRequiredEngineHost {\n    /** The handler registered for the given method, or `undefined`. */\n    getRequestHandler(method: string): ((request: JSONRPCRequest, ctx: unknown) => Promise<Result>) | undefined;\n    /** Builds the role-specific context from a {@linkcode BaseContext}. */\n    buildContext(baseCtx: BaseContext): unknown;\n    /** The transport's session identifier, when there is one. */\n    sessionId: string | undefined;\n}\n\n/**\n * Dispatches one embedded (de-JSON-RPC'd) input request to the locally\n * registered handler for its method and resolves with the bare response.\n *\n * The handler runs through the same stored handler chain as a wire request\n * (including role-specific validation installed by `_wrapHandler`), with a\n * synthesized context (see {@link synthesizeInputRequestContext}).\n */\nexport async function dispatchInputRequest(\n    host: InputRequiredEngineHost,\n    codec: WireCodec,\n    key: string,\n    entry: unknown,\n    signal: AbortSignal\n): Promise<unknown> {\n    if (!isPlainObject(entry) || typeof entry['method'] !== 'string') {\n        throw new SdkError(\n            SdkErrorCode.InvalidResult,\n            `Invalid input request '${key}': each inputRequests entry must be an embedded request object with a method`,\n            { key }\n        );\n    }\n    const method = entry['method'];\n    if (!codec.hasInputRequestMethod(method)) {\n        throw new SdkError(\n            SdkErrorCode.InvalidResult,\n            `Invalid input request '${key}': '${method}' is not an embedded request the ${codec.era} revision defines ` +\n                `(expected elicitation/create, sampling/createMessage, or roots/list)`,\n            { key, method }\n        );\n    }\n    const handler = host.getRequestHandler(method);\n    if (handler === undefined) {\n        throw new SdkError(\n            SdkErrorCode.CapabilityNotSupported,\n            `Cannot fulfil input request '${key}': no handler is registered for '${method}' on this client. ` +\n                `Declare the corresponding capability and register a handler, or handle input_required results manually.`,\n            { key, method }\n        );\n    }\n\n    const params = isPlainObject(entry['params']) ? (entry['params'] as Record<string, unknown>) : undefined;\n    const synthesizedRequest: JSONRPCRequest = {\n        jsonrpc: '2.0',\n        id: key,\n        method,\n        ...(params !== undefined && { params })\n    };\n    const ctx = host.buildContext(synthesizeInputRequestContext(key, method, params, signal, host.sessionId));\n    return await handler(synthesizedRequest, ctx);\n}\n\n/**\n * Builds the per-retry-leg {@linkcode RequestOptions} from the originating\n * call's options.\n *\n * Only the fields that are correct to apply to every leg carry over (a\n * deliberate whitelist): the per-leg `timeout`, the (shrinking) total budget\n * `maxTotalTimeout`, the caller's `onprogress`/`resetTimeoutOnProgress`, and\n * the caller's abort `signal`. Everything else — in particular\n * `relatedRequestId`, `resumptionToken`, and `onresumptiontoken` — is scoped\n * to the originating wire leg and is NOT inherited by retries.\n */\nexport function buildRetryLegRequestOptions(options: RequestOptions | undefined, legOptions: InputRequiredRetryLegOptions): RequestOptions {\n    return {\n        ...(options?.signal !== undefined && { signal: options.signal }),\n        ...(options?.onprogress !== undefined && { onprogress: options.onprogress }),\n        ...(options?.resetTimeoutOnProgress !== undefined && { resetTimeoutOnProgress: options.resetTimeoutOnProgress }),\n        // Per-request HTTP headers (SEP-2243 `Mcp-Param-*`) carry over: the\n        // retry's `arguments` are byte-identical to the originating leg (the\n        // driver only adds `inputResponses`/`requestState`), so the param\n        // headers built for the first leg remain correct for every retry leg.\n        ...(options?.headers !== undefined && { headers: options.headers }),\n        ...(legOptions.timeout !== undefined && { timeout: legOptions.timeout }),\n        ...(legOptions.maxTotalTimeout !== undefined && { maxTotalTimeout: legOptions.maxTotalTimeout }),\n        // The driver re-enters the funnel with the manual primitive: a further\n        // input_required answer is handed back to the loop instead of\n        // recursing into another driver run (the round cap is global to the\n        // flow).\n        allowInputRequired: true\n    };\n}\n\n/**\n * Runs the auto-fulfilment flow for one originating request whose response\n * came back as `input_required`: builds the driver hooks (embedded-request\n * dispatch + retry through the funnel) and hands them to\n * {@link runInputRequiredDriver}. Resolves with the final complete result\n * (already validated by the retry leg) or rejects with a typed error.\n */\nexport function runInputRequiredFlow<T extends StandardSchemaV1>(\n    host: InputRequiredEngineHost,\n    config: ResolvedInputRequiredDriverConfig,\n    decoded: { inputRequests: Record<string, unknown>; requestState?: string },\n    flow: NonCompleteResultFlow<T>\n): Promise<unknown> {\n    const { codec, request, options, flowStartedAt } = flow;\n    const firstPayload: InputRequiredPayload = {\n        inputRequests: decoded.inputRequests,\n        ...(decoded.requestState !== undefined && { requestState: decoded.requestState })\n    };\n    const hooks: InputRequiredDriverHooks = {\n        dispatchInputRequest: (key, entry, signal) => dispatchInputRequest(host, codec, key, entry, signal),\n        retry: (params, legOptions) => flow.retry(params, buildRetryLegRequestOptions(options, legOptions))\n    };\n    return runInputRequiredDriver({\n        config,\n        method: request.method,\n        originalParams: request.params,\n        firstPayload,\n        flowStartedAt,\n        signal: options?.signal,\n        requestOptions: {\n            ...(options?.timeout !== undefined && { timeout: options.timeout }),\n            ...(options?.maxTotalTimeout !== undefined && { maxTotalTimeout: options.maxTotalTimeout }),\n            ...(options?.onprogress !== undefined && { onprogress: options.onprogress })\n        },\n        hooks\n    });\n}\n\n/**\n * Builds the manual-mode {@linkcode InputRequiredResult} value from the\n * codec's decoded payload — what an `allowInputRequired: true` caller\n * receives instead of the auto-fulfilled complete result.\n */\nexport function manualInputRequiredValue(decoded: {\n    inputRequests: Record<string, unknown>;\n    requestState?: string;\n    _meta?: ResultMetaObject;\n}): InputRequiredResult {\n    return {\n        resultType: 'input_required',\n        inputRequests: decoded.inputRequests as InputRequiredResult['inputRequests'],\n        ...(decoded.requestState !== undefined && { requestState: decoded.requestState }),\n        ...(decoded._meta !== undefined && { _meta: decoded._meta })\n    };\n}\n", "/*!\n * content-type\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 7231 sec 3.1.1.1\n *\n * parameter     = token \"=\" ( token / quoted-string )\n * token         = 1*tchar\n * tchar         = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n *               / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n *               / DIGIT / ALPHA\n *               ; any VCHAR, except delimiters\n * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE\n * qdtext        = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text\n * obs-text      = %x80-FF\n * quoted-pair   = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n */\nvar PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *(\"(?:[\\u000b\\u0020\\u0021\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u000b\\u0020-\\u00ff])*\"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\u000b\\u0020-\\u007e\\u0080-\\u00ff]+$/ // eslint-disable-line no-control-regex\nvar TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 7230 sec 3.2.6\n *\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n * obs-text    = %x80-FF\n */\nvar QESC_REGEXP = /\\\\([\\u000b\\u0020-\\u00ff])/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6\n */\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp to match type in RFC 7231 sec 3.1.1.1\n *\n * media-type = type \"/\" subtype\n * type       = token\n * subtype    = token\n */\nvar TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * Module exports.\n * @public\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @public\n */\n\nfunction format (obj) {\n  if (!obj || typeof obj !== 'object') {\n    throw new TypeError('argument obj is required')\n  }\n\n  var parameters = obj.parameters\n  var type = obj.type\n\n  if (!type || !TYPE_REGEXP.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  var string = type\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param\n    var params = Object.keys(parameters).sort()\n\n    for (var i = 0; i < params.length; i++) {\n      param = params[i]\n\n      if (!TOKEN_REGEXP.test(param)) {\n        throw new TypeError('invalid parameter name')\n      }\n\n      string += '; ' + param + '=' + qstring(parameters[param])\n    }\n  }\n\n  return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @public\n */\n\nfunction parse (string) {\n  if (!string) {\n    throw new TypeError('argument string is required')\n  }\n\n  // support req/res-like objects as argument\n  var header = typeof string === 'object'\n    ? getcontenttype(string)\n    : string\n\n  if (typeof header !== 'string') {\n    throw new TypeError('argument string is required to be a string')\n  }\n\n  var index = header.indexOf(';')\n  var type = index !== -1\n    ? header.slice(0, index).trim()\n    : header.trim()\n\n  if (!TYPE_REGEXP.test(type)) {\n    throw new TypeError('invalid media type')\n  }\n\n  var obj = new ContentType(type.toLowerCase())\n\n  // parse parameters\n  if (index !== -1) {\n    var key\n    var match\n    var value\n\n    PARAM_REGEXP.lastIndex = index\n\n    while ((match = PARAM_REGEXP.exec(header))) {\n      if (match.index !== index) {\n        throw new TypeError('invalid parameter format')\n      }\n\n      index += match[0].length\n      key = match[1].toLowerCase()\n      value = match[2]\n\n      if (value.charCodeAt(0) === 0x22 /* \" */) {\n        // remove quotes\n        value = value.slice(1, -1)\n\n        // remove escapes\n        if (value.indexOf('\\\\') !== -1) {\n          value = value.replace(QESC_REGEXP, '$1')\n        }\n      }\n\n      obj.parameters[key] = value\n    }\n\n    if (index !== header.length) {\n      throw new TypeError('invalid parameter format')\n    }\n  }\n\n  return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @private\n */\n\nfunction getcontenttype (obj) {\n  var header\n\n  if (typeof obj.getHeader === 'function') {\n    // res-like\n    header = obj.getHeader('content-type')\n  } else if (typeof obj.headers === 'object') {\n    // req-like\n    header = obj.headers && obj.headers['content-type']\n  }\n\n  if (typeof header !== 'string') {\n    throw new TypeError('content-type header is missing from object')\n  }\n\n  return header\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring (val) {\n  var str = String(val)\n\n  // no need to quote tokens\n  if (TOKEN_REGEXP.test(str)) {\n    return str\n  }\n\n  if (str.length > 0 && !TEXT_REGEXP.test(str)) {\n    throw new TypeError('invalid parameter value')\n  }\n\n  return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Class to represent a content type.\n * @private\n */\nfunction ContentType (type) {\n  this.parameters = Object.create(null)\n  this.type = type\n}\n", "import contentType from 'content-type';\n\n/**\n * Extracts the media type (the lowercased `type/subtype` pair, without\n * parameters) from a raw `Content-Type` header value, or `undefined` when the\n * header is missing or empty.\n *\n * Content-Type comparisons must use the parsed media type, never a substring\n * search of the raw header: a value like `text/plain; a=application/json`\n * contains the substring `application/json` but its media type is\n * `text/plain`, and case variants or parameters make naive string comparison\n * wrong in both directions.\n *\n * \"Essence\" is the WHATWG MIME Sniffing standard's term for the bare\n * `type/subtype` pair (https://mimesniff.spec.whatwg.org/#mime-type-essence);\n * the Fetch standard's request classification is defined against it\n * (https://fetch.spec.whatwg.org/#cors-safelisted-request-header).\n *\n * Parsing is RFC 9110 (`content-type` package) first. When the parameter\n * section is malformed (`application/json;`, `application/json; charset=`),\n * browsers and most HTTP stacks still derive the media type from the segment\n * before the first `;` — the fallback matches that widely-implemented\n * behavior, so a header whose media type is unambiguous is not rejected for\n * a sloppy parameter section.\n */\nexport function mediaTypeEssence(header: string | null | undefined): string | undefined {\n    if (!header) {\n        return undefined;\n    }\n    try {\n        return contentType.parse(header).type;\n    } catch {\n        const essence = (header.split(';', 1)[0] ?? '').trim().toLowerCase();\n        // A comma in the parameter tail of an unparseable value indicates\n        // joined duplicate headers — ambiguous, so no essence at all (keeps\n        // duplicate-header handling uniform whether or not the first copy\n        // carries parameters).\n        if (essence === '' || header.slice(essence.length).includes(',')) {\n            return undefined;\n        }\n        return essence;\n    }\n}\n\n/**\n * Whether a raw `Content-Type` header value denotes `application/json`.\n * Parameters (for example `charset=utf-8`) are allowed and ignored; malformed\n * parameter sections do not reject a header whose media type is unambiguously\n * `application/json` (see `mediaTypeEssence` for the exact grammar).\n */\nexport function isJsonContentType(header: string | null | undefined): boolean {\n    // Fast path: the exact literal is what SDK clients send on every POST.\n    if (header === 'application/json') {\n        return true;\n    }\n    return mediaTypeEssence(header) === 'application/json';\n}\n", "import type { BaseMetadata } from '../types/index';\n\n/**\n * Utilities for working with {@linkcode BaseMetadata} objects.\n */\n\n/**\n * Gets the display name for an object with {@linkcode BaseMetadata}.\n * For tools, the precedence is: `title` → {@linkcode index.ToolAnnotations | annotations}.`title` → `name`\n * For other objects: `title` → `name`\n * This implements the spec requirement: \"if no title is provided, name should be used for display purposes\"\n */\nexport function getDisplayName(metadata: BaseMetadata | (BaseMetadata & { annotations?: { title?: string } })): string {\n    // First check for title (not undefined and not empty string)\n    if (metadata.title !== undefined && metadata.title !== '') {\n        return metadata.title;\n    }\n\n    // Then check for annotations.title (only present in Tool objects)\n    if ('annotations' in metadata && metadata.annotations?.title) {\n        return metadata.annotations.title;\n    }\n\n    // Finally fall back to name\n    return metadata.name;\n}\n", "import type { JSONRPCMessage } from '../types/index';\nimport { JSONRPCMessageSchema } from '../types/index';\n\nexport const STDIO_DEFAULT_MAX_BUFFER_SIZE = 10 * 1024 * 1024;\n\n/**\n * Buffers a continuous stdio stream into discrete JSON-RPC messages.\n */\nexport class ReadBuffer {\n    private _buffer?: Buffer;\n    private _maxBufferSize: number;\n\n    constructor(options?: { maxBufferSize?: number }) {\n        this._maxBufferSize = options?.maxBufferSize ?? STDIO_DEFAULT_MAX_BUFFER_SIZE;\n    }\n\n    append(chunk: Buffer): void {\n        const newSize = (this._buffer?.length ?? 0) + chunk.length;\n        if (newSize > this._maxBufferSize) {\n            this.clear();\n            throw new Error(`ReadBuffer exceeded maximum size of ${this._maxBufferSize} bytes`);\n        }\n        this._buffer = this._buffer ? Buffer.concat([this._buffer, chunk]) : chunk;\n    }\n\n    readMessage(): JSONRPCMessage | null {\n        while (this._buffer) {\n            const index = this._buffer.indexOf('\\n');\n            if (index === -1) {\n                return null;\n            }\n\n            const line = this._buffer.toString('utf8', 0, index).replace(/\\r$/, '');\n            this._buffer = this._buffer.subarray(index + 1);\n\n            try {\n                return deserializeMessage(line);\n            } catch (error) {\n                // Skip non-JSON lines (e.g., debug output from hot-reload tools like\n                // tsx or nodemon that write to stdout). Schema validation errors still\n                // throw so malformed-but-valid-JSON messages surface via onerror.\n                if (error instanceof SyntaxError) {\n                    continue;\n                }\n                throw error;\n            }\n        }\n        return null;\n    }\n\n    clear(): void {\n        this._buffer = undefined;\n    }\n}\n\nexport function deserializeMessage(line: string): JSONRPCMessage {\n    return JSONRPCMessageSchema.parse(JSON.parse(line));\n}\n\nexport function serializeMessage(message: JSONRPCMessage): string {\n    return JSON.stringify(message) + '\\n';\n}\n", "/**\n * Tool name validation utilities according to SEP: Specify Format for Tool Names\n *\n * Tool names SHOULD be between 1 and 128 characters in length (inclusive).\n * Tool names are case-sensitive.\n * Allowed characters: uppercase and lowercase ASCII letters (`A-Z`, `a-z`), digits\n * (`0-9`), underscore (`_`), dash (`-`), and dot (`.`).\n * Tool names SHOULD NOT contain spaces, commas, or other special characters.\n *\n * @see {@link https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986 | SEP-986: Specify Format for Tool Names}\n */\n\n/**\n * Regular expression for valid tool names according to SEP-986 specification\n */\nconst TOOL_NAME_REGEX = /^[A-Za-z0-9._-]{1,128}$/;\n\n/**\n * Validates a tool name according to the SEP specification\n * @param name - The tool name to validate\n * @returns An object containing validation result and any warnings\n */\nexport function validateToolName(name: string): {\n    isValid: boolean;\n    warnings: string[];\n} {\n    const warnings: string[] = [];\n\n    // Check length\n    if (name.length === 0) {\n        return {\n            isValid: false,\n            warnings: ['Tool name cannot be empty']\n        };\n    }\n\n    if (name.length > 128) {\n        return {\n            isValid: false,\n            warnings: [`Tool name exceeds maximum length of 128 characters (current: ${name.length})`]\n        };\n    }\n\n    // Check for specific problematic patterns (these are warnings, not validation failures)\n    if (name.includes(' ')) {\n        warnings.push('Tool name contains spaces, which may cause parsing issues');\n    }\n\n    if (name.includes(',')) {\n        warnings.push('Tool name contains commas, which may cause parsing issues');\n    }\n\n    // Check for potentially confusing patterns (leading/trailing dashes, dots, slashes)\n    if (name.startsWith('-') || name.endsWith('-')) {\n        warnings.push('Tool name starts or ends with a dash, which may cause parsing issues in some contexts');\n    }\n\n    if (name.startsWith('.') || name.endsWith('.')) {\n        warnings.push('Tool name starts or ends with a dot, which may cause parsing issues in some contexts');\n    }\n\n    // Check for invalid characters\n    if (!TOOL_NAME_REGEX.test(name)) {\n        const invalidChars = [...name]\n            .filter(char => !/[A-Za-z0-9._-]/.test(char))\n            .filter((char, index, arr) => arr.indexOf(char) === index); // Remove duplicates\n\n        warnings.push(\n            `Tool name contains invalid characters: ${invalidChars.map(c => `\"${c}\"`).join(', ')}`,\n            'Allowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)'\n        );\n\n        return {\n            isValid: false,\n            warnings\n        };\n    }\n\n    return {\n        isValid: true,\n        warnings\n    };\n}\n\n/**\n * Issues warnings for non-conforming tool names\n * @param name - The tool name that triggered the warnings\n * @param warnings - Array of warning messages\n */\nexport function issueToolNameWarning(name: string, warnings: string[]): void {\n    if (warnings.length > 0) {\n        console.warn(`Tool name validation warning for \"${name}\":`);\n        for (const warning of warnings) {\n            console.warn(`  - ${warning}`);\n        }\n        console.warn('Tool registration will proceed, but this may cause compatibility issues.');\n        console.warn('Consider updating the tool name to conform to the MCP tool naming standard.');\n        console.warn(\n            'See SEP: Specify Format for Tool Names (https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) for more details.'\n        );\n    }\n}\n\n/**\n * Validates a tool name and issues warnings for non-conforming names\n * @param name - The tool name to validate\n * @returns `true` if the name is valid, `false` otherwise\n */\nexport function validateAndWarnToolName(name: string): boolean {\n    const result = validateToolName(name);\n\n    // Always issue warnings for any validation issues (both invalid names and warnings)\n    issueToolNameWarning(name, result.warnings);\n\n    return result.isValid;\n}\n", "import type { JSONRPCMessage, MessageExtraInfo, RequestId } from '../types/index';\n\nexport type FetchLike = (url: string | URL, init?: RequestInit) => Promise<Response>;\n\n/**\n * Normalizes `HeadersInit` to a plain `Record<string, string>` for manipulation.\n * Handles `Headers` objects, arrays of tuples, and plain objects.\n */\nexport function normalizeHeaders(headers: RequestInit['headers'] | undefined): Record<string, string> {\n    if (!headers) return {};\n\n    if (headers instanceof Headers) {\n        return Object.fromEntries(headers.entries());\n    }\n\n    if (Array.isArray(headers)) {\n        return Object.fromEntries(headers);\n    }\n\n    return { ...(headers as Record<string, string>) };\n}\n\n/**\n * Creates a fetch function that includes base `RequestInit` options.\n * This ensures requests inherit settings like credentials, mode, headers, etc. from the base init.\n *\n * @param baseFetch - The base fetch function to wrap (defaults to global `fetch`)\n * @param baseInit - The base `RequestInit` to merge with each request\n * @returns A wrapped fetch function that merges base options with call-specific options\n */\nexport function createFetchWithInit(baseFetch: FetchLike = fetch, baseInit?: RequestInit): FetchLike {\n    if (!baseInit) {\n        return baseFetch;\n    }\n\n    // Return a wrapped fetch that merges base RequestInit with call-specific init\n    return async (url: string | URL, init?: RequestInit): Promise<Response> => {\n        const mergedInit: RequestInit = {\n            ...baseInit,\n            ...init,\n            // Headers need special handling - merge instead of replace\n            headers: init?.headers ? { ...normalizeHeaders(baseInit.headers), ...normalizeHeaders(init.headers) } : baseInit.headers\n        };\n        return baseFetch(url, mergedInit);\n    };\n}\n\nconst REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);\nconst MAX_REDIRECTS = 5;\n\n/** Whether `to` has the scheme, host and port of `from`, or is its https form with both on the default port. */\nexport function isWithinOrigin(from: URL, to: URL): boolean {\n    if (from.protocol === to.protocol && from.host === to.host) return true;\n    return from.protocol === 'http:' && to.protocol === 'https:' && from.hostname === to.hostname && !from.port && !to.port;\n}\n\n/** The URL that a redirect `response` to a request for `url` points at, if it names one. */\nfunction redirectTarget(url: string | URL, response: Response): URL | undefined {\n    const location = REDIRECT_STATUSES.has(response.status) ? response.headers?.get('location') : undefined;\n    if (!location) return undefined;\n    try {\n        return new URL(location, url);\n    } catch {\n        return undefined;\n    }\n}\n\nconst leftToFetch = new WeakSet<FetchLike>();\n\n/** A copy of `baseFetch` that `fetchWithinOrigin` returns as it is, which leaves redirects to `baseFetch`. */\nexport function fetchLeavingRedirects(baseFetch: FetchLike): FetchLike {\n    const copy: FetchLike = (url, init) => baseFetch(url, init);\n    leftToFetch.add(copy);\n    return copy;\n}\n\n/** Wraps `baseFetch` to follow a redirect only when it keeps the method and stays within the origin of the request. */\nexport function fetchWithinOrigin(baseFetch: FetchLike): FetchLike {\n    if (leftToFetch.has(baseFetch)) return baseFetch;\n    return async (url, init) => {\n        // A request that sets `redirect` to 'error' or 'manual' is handed to the base fetch as it is.\n        if (init?.redirect === 'error' || init?.redirect === 'manual') return baseFetch(url, init);\n        const method = (init?.method ?? 'GET').toUpperCase();\n        let current = url;\n        for (let followed = 0; ; followed++) {\n            // Browsers answer a manual redirect with an opaque response (status 0, no Location); it is returned as it is.\n            const response = await baseFetch(current, { ...init, redirect: 'manual' });\n            const target = redirectTarget(current, response);\n            if (!target || followed === MAX_REDIRECTS) return response;\n            const from = new URL(current);\n            const keepsMethod = method === 'GET' || response.status === 307 || response.status === 308;\n            const keepsUserinfo =\n                !(target.username || target.password) || (target.username === from.username && target.password === from.password);\n            if (!keepsMethod || !keepsUserinfo || !isWithinOrigin(from, target)) return response;\n            await response.text?.().catch(() => {});\n            current = target;\n        }\n    };\n}\n\n/** Error text for a redirect `response` to a request for `url` that was not followed, or `undefined` for any other response. */\nexport function unfollowedRedirect(url: string | URL, response: Response): string | undefined {\n    if (response.type === 'opaqueredirect') return 'Redirect not followed: this runtime does not expose where it points';\n    const target = redirectTarget(response.url || url, response);\n    if (!target) return undefined;\n    target.username = target.password = target.search = target.hash = '';\n    if (target.protocol === 'http:' && new URL(response.url || url).protocol === 'https:') {\n        target.protocol = 'https:';\n        return `Redirect from https to plain http not followed; try ${target.href} as the endpoint`;\n    }\n    return `Redirect to ${target.href} not followed; use that URL as the endpoint if it is the intended server`;\n}\n\n/**\n * Options for sending a JSON-RPC message.\n */\nexport type TransportSendOptions = {\n    /**\n     * If present, `relatedRequestId` is used to indicate to the transport which incoming request to associate this outgoing message with.\n     */\n    relatedRequestId?: RequestId | undefined;\n\n    /**\n     * The resumption token used to continue long-running requests that were interrupted.\n     *\n     * This allows clients to reconnect and continue from where they left off, if supported by the transport.\n     */\n    resumptionToken?: string | undefined;\n\n    /**\n     * A callback that is invoked when the resumption token changes, if supported by the transport.\n     *\n     * This allows clients to persist the latest token for potential reconnection.\n     */\n    onresumptiontoken?: ((token: string) => void) | undefined;\n\n    /**\n     * An abort signal for THIS outbound message's underlying request, when the\n     * transport sends one outbound message per underlying request (the\n     * Streamable HTTP transport's POST-per-request model). Aborting it cancels\n     * the underlying request (and its SSE response stream) without closing the\n     * transport. Transports that share a single channel (stdio, in-memory)\n     * ignore it.\n     */\n    requestSignal?: AbortSignal | undefined;\n\n    /**\n     * Fired by transports that open a per-request stream (the Streamable HTTP\n     * transport's POST-per-request SSE response) when that stream ends or\n     * errors for any reason OTHER than a deliberate `requestSignal` abort —\n     * i.e. the server closed the stream, the network dropped it, or\n     * reconnection was exhausted. Transports that share a single channel\n     * (stdio, in-memory) ignore it.\n     */\n    onRequestStreamEnd?: (() => void) | undefined;\n\n    /**\n     * Additional HTTP headers to send with THIS outbound message, when the\n     * transport sends one outbound message per underlying HTTP request (the\n     * Streamable HTTP transport's POST-per-request model). Transports that\n     * share a single channel (stdio, in-memory) ignore it.\n     *\n     * The Client uses this to attach SEP-2243 `Mcp-Param-{Name}` headers to a\n     * `tools/call` request on a 2026-07-28 connection. Values are sent\n     * verbatim — encode anything that is not a safe RFC 9110 field value\n     * before passing it here.\n     */\n    headers?: Readonly<Record<string, string>> | undefined;\n};\n/**\n * Describes the minimal contract for an MCP transport that a client or server can communicate over.\n */\nexport interface Transport {\n    /**\n     * Starts processing messages on the transport, including any connection steps that might need to be taken.\n     *\n     * This method should only be called after callbacks are installed, or else messages may be lost.\n     *\n     * NOTE: This method should not be called explicitly when using {@linkcode @modelcontextprotocol/client!client/client.Client | Client} or {@linkcode @modelcontextprotocol/server!server/server.Server | Server} classes, as they will implicitly call {@linkcode Transport.start | start()}.\n     */\n    start(): Promise<void>;\n\n    /**\n     * Sends a JSON-RPC message (request or response).\n     *\n     * If present, `relatedRequestId` is used to indicate to the transport which incoming request to associate this outgoing message with.\n     */\n    send(message: JSONRPCMessage, options?: TransportSendOptions): Promise<void>;\n\n    /**\n     * Closes the connection.\n     */\n    close(): Promise<void>;\n\n    /**\n     * `true` when this transport opens one underlying request per outbound\n     * JSON-RPC request (the Streamable HTTP POST-per-request model) and\n     * therefore honors {@linkcode TransportSendOptions.requestSignal}. The\n     * 2026-07-28 spec makes closing that per-request stream the cancellation\n     * signal — the protocol layer aborts `requestSignal` instead of POSTing\n     * `notifications/cancelled` when this flag is set on a 2026-era\n     * connection. Transports that share a single channel (stdio, in-memory)\n     * leave it `undefined`.\n     */\n    readonly hasPerRequestStream?: boolean;\n\n    /**\n     * Callback for when the connection is closed for any reason.\n     *\n     * This should be invoked when {@linkcode Transport.close | close()} is called as well.\n     */\n    onclose?: (() => void) | undefined;\n\n    /**\n     * Callback for when an error occurs.\n     *\n     * Note that errors are not necessarily fatal; they are used for reporting any kind of exceptional condition out of band.\n     */\n    onerror?: ((error: Error) => void) | undefined;\n\n    /**\n     * Callback for when a message (request or response) is received over the connection.\n     *\n     * Includes the {@linkcode MessageExtraInfo.request | request} and {@linkcode MessageExtraInfo.authInfo | authInfo} if the transport is authenticated.\n     *\n     * The {@linkcode MessageExtraInfo.request | request} can be used to get the original request information (headers, etc.)\n     */\n    onmessage?: (<T extends JSONRPCMessage>(message: T, extra?: MessageExtraInfo) => void) | undefined;\n\n    /**\n     * The session ID generated for this connection.\n     */\n    sessionId?: string | undefined;\n\n    /**\n     * Sets the protocol version used for the connection (called when the initialize response is received).\n     */\n    setProtocolVersion?: ((version: string) => void) | undefined;\n\n    /**\n     * Sets the supported protocol versions for header validation (called during connect).\n     * This allows the server to pass its supported versions to the transport.\n     */\n    setSupportedProtocolVersions?: ((versions: string[]) => void) | undefined;\n}\n", "// Claude-authored implementation of RFC 6570 URI Templates\n\nexport type Variables = Record<string, string | string[]>;\n\nconst MAX_TEMPLATE_LENGTH = 1_000_000; // 1MB\nconst MAX_VARIABLE_LENGTH = 1_000_000; // 1MB\nconst MAX_TEMPLATE_EXPRESSIONS = 10_000;\nconst MAX_REGEX_LENGTH = 1_000_000; // 1MB\n\nexport class UriTemplate {\n    /**\n     * Returns true if the given string contains any URI template expressions.\n     * A template expression is a sequence of characters enclosed in curly braces,\n     * like `{foo}` or `{?bar}`.\n     */\n    static isTemplate(str: string): boolean {\n        // Look for any sequence of characters between curly braces\n        // that isn't just whitespace\n        return /\\{[^}\\s]+\\}/.test(str);\n    }\n\n    private static validateLength(str: string, max: number, context: string): void {\n        if (str.length > max) {\n            throw new Error(`${context} exceeds maximum length of ${max} characters (got ${str.length})`);\n        }\n    }\n    private readonly template: string;\n    private readonly parts: Array<string | { name: string; operator: string; names: string[]; exploded: boolean }>;\n\n    get variableNames(): string[] {\n        return this.parts.flatMap(part => (typeof part === 'string' ? [] : part.names));\n    }\n\n    constructor(template: string) {\n        UriTemplate.validateLength(template, MAX_TEMPLATE_LENGTH, 'Template');\n        this.template = template;\n        this.parts = this.parse(template);\n    }\n\n    toString(): string {\n        return this.template;\n    }\n\n    private parse(template: string): Array<string | { name: string; operator: string; names: string[]; exploded: boolean }> {\n        const parts: Array<string | { name: string; operator: string; names: string[]; exploded: boolean }> = [];\n        let currentText = '';\n        let i = 0;\n        let expressionCount = 0;\n\n        while (i < template.length) {\n            if (template[i] === '{') {\n                if (currentText) {\n                    parts.push(currentText);\n                    currentText = '';\n                }\n                const end = template.indexOf('}', i);\n                if (end === -1) throw new Error('Unclosed template expression');\n\n                expressionCount++;\n                if (expressionCount > MAX_TEMPLATE_EXPRESSIONS) {\n                    throw new Error(`Template contains too many expressions (max ${MAX_TEMPLATE_EXPRESSIONS})`);\n                }\n\n                const expr = template.slice(i + 1, end);\n                const operator = this.getOperator(expr);\n                const exploded = expr.includes('*');\n                const names = this.getNames(expr);\n                const name = names[0]!;\n\n                // Validate variable name length\n                for (const name of names) {\n                    UriTemplate.validateLength(name, MAX_VARIABLE_LENGTH, 'Variable name');\n                }\n\n                parts.push({ name, operator, names, exploded });\n                i = end + 1;\n            } else {\n                currentText += template[i];\n                i++;\n            }\n        }\n\n        if (currentText) {\n            parts.push(currentText);\n        }\n\n        return parts;\n    }\n\n    private getOperator(expr: string): string {\n        const operators = ['+', '#', '.', '/', '?', '&'];\n        return operators.find(op => expr.startsWith(op)) || '';\n    }\n\n    private getNames(expr: string): string[] {\n        const operator = this.getOperator(expr);\n        return expr\n            .slice(operator.length)\n            .split(',')\n            .map(name => name.replace('*', '').trim())\n            .filter(name => name.length > 0);\n    }\n\n    private encodeValue(value: string, operator: string): string {\n        UriTemplate.validateLength(value, MAX_VARIABLE_LENGTH, 'Variable value');\n        if (operator === '+' || operator === '#') {\n            return encodeURI(value);\n        }\n        return encodeURIComponent(value);\n    }\n\n    private expandPart(\n        part: {\n            name: string;\n            operator: string;\n            names: string[];\n            exploded: boolean;\n        },\n        variables: Variables\n    ): string {\n        if (part.operator === '?' || part.operator === '&') {\n            const pairs = part.names\n                .map(name => {\n                    const value = variables[name];\n                    if (value === undefined) return '';\n                    const encoded = Array.isArray(value)\n                        ? value.map(v => this.encodeValue(v, part.operator)).join(',')\n                        : this.encodeValue(value.toString(), part.operator);\n                    return `${name}=${encoded}`;\n                })\n                .filter(pair => pair.length > 0);\n\n            if (pairs.length === 0) return '';\n            const separator = part.operator === '?' ? '?' : '&';\n            return separator + pairs.join('&');\n        }\n\n        if (part.names.length > 1) {\n            const values = part.names.map(name => variables[name]).filter(v => v !== undefined);\n            if (values.length === 0) return '';\n            return values.map(v => (Array.isArray(v) ? v[0] : v)).join(',');\n        }\n\n        const value = variables[part.name];\n        if (value === undefined) return '';\n\n        const values = Array.isArray(value) ? value : [value];\n        const encoded = values.map(v => this.encodeValue(v, part.operator));\n\n        switch (part.operator) {\n            case '': {\n                return encoded.join(',');\n            }\n            case '+': {\n                return encoded.join(',');\n            }\n            case '#': {\n                return '#' + encoded.join(',');\n            }\n            case '.': {\n                return '.' + encoded.join('.');\n            }\n            case '/': {\n                return '/' + encoded.join('/');\n            }\n            default: {\n                return encoded.join(',');\n            }\n        }\n    }\n\n    expand(variables: Variables): string {\n        let result = '';\n        let hasQueryParam = false;\n\n        for (const part of this.parts) {\n            if (typeof part === 'string') {\n                result += part;\n                continue;\n            }\n\n            const expanded = this.expandPart(part, variables);\n            if (!expanded) continue;\n\n            // Convert ? to & if we already have a query parameter\n            result += (part.operator === '?' || part.operator === '&') && hasQueryParam ? expanded.replace('?', '&') : expanded;\n\n            if (part.operator === '?' || part.operator === '&') {\n                hasQueryParam = true;\n            }\n        }\n\n        return result;\n    }\n\n    private escapeRegExp(str: string): string {\n        return str.replaceAll(/[.*+?^${}()|[\\]\\\\]/g, String.raw`\\$&`);\n    }\n\n    private partToRegExp(part: {\n        name: string;\n        operator: string;\n        names: string[];\n        exploded: boolean;\n    }): Array<{ pattern: string; name: string }> {\n        const patterns: Array<{ pattern: string; name: string }> = [];\n\n        // Validate variable name length for matching\n        for (const name of part.names) {\n            UriTemplate.validateLength(name, MAX_VARIABLE_LENGTH, 'Variable name');\n        }\n\n        if (part.operator === '?' || part.operator === '&') {\n            for (let i = 0; i < part.names.length; i++) {\n                const name = part.names[i]!;\n                const prefix = i === 0 ? '\\\\' + part.operator : '&';\n                patterns.push({\n                    pattern: prefix + this.escapeRegExp(name) + '=([^&]+)',\n                    name\n                });\n            }\n            return patterns;\n        }\n\n        let pattern: string;\n        const name = part.name;\n\n        switch (part.operator) {\n            case '': {\n                pattern = part.exploded ? '([^/,]+(?:,[^/,]+)*)' : '([^/,]+)';\n                break;\n            }\n            case '+':\n            case '#': {\n                pattern = '(.+)';\n                break;\n            }\n            case '.': {\n                pattern = String.raw`\\.([^/,]+)`;\n                break;\n            }\n            case '/': {\n                pattern = '/' + (part.exploded ? '([^/,]+(?:,[^/,]+)*)' : '([^/,]+)');\n                break;\n            }\n            default: {\n                pattern = '([^/]+)';\n            }\n        }\n\n        patterns.push({ pattern, name });\n        return patterns;\n    }\n\n    match(uri: string): Variables | null {\n        UriTemplate.validateLength(uri, MAX_TEMPLATE_LENGTH, 'URI');\n        let pattern = '^';\n        const names: Array<{ name: string; exploded: boolean }> = [];\n\n        for (const part of this.parts) {\n            if (typeof part === 'string') {\n                pattern += this.escapeRegExp(part);\n            } else {\n                const patterns = this.partToRegExp(part);\n                for (const { pattern: partPattern, name } of patterns) {\n                    pattern += partPattern;\n                    names.push({ name, exploded: part.exploded });\n                }\n            }\n        }\n\n        pattern += '$';\n        UriTemplate.validateLength(pattern, MAX_REGEX_LENGTH, 'Generated regex pattern');\n        const regex = new RegExp(pattern);\n        const match = uri.match(regex);\n\n        if (!match) return null;\n\n        const result: Variables = {};\n        for (const [i, name_] of names.entries()) {\n            const { name, exploded } = name_!;\n            const value = match[i + 1]!;\n            const cleanName = name.replace('*', '');\n\n            result[cleanName] = exploded && value.includes(',') ? value.split(',') : value;\n        }\n\n        return result;\n    }\n}\n", "import { SdkError, SdkErrorCode } from '../errors/sdkErrors';\nimport type { Transport } from '../shared/transport';\nimport type { AuthInfo, JSONRPCMessage, RequestId } from '../types/index';\n\ninterface QueuedMessage {\n    message: JSONRPCMessage;\n    extra?: { authInfo?: AuthInfo };\n}\n\n/**\n * In-memory transport for creating clients and servers that talk to each other within the same process.\n *\n * Intended for testing and development. For production in-process connections, use\n * `StreamableHTTPClientTransport` against a local server URL.\n */\nexport class InMemoryTransport implements Transport {\n    private _otherTransport?: InMemoryTransport;\n    private _messageQueue: QueuedMessage[] = [];\n    private _closed = false;\n\n    onclose?: () => void;\n    onerror?: (error: Error) => void;\n    onmessage?: (message: JSONRPCMessage, extra?: { authInfo?: AuthInfo }) => void;\n    sessionId?: string;\n\n    /**\n     * Creates a pair of linked in-memory transports that can communicate with each other. One should be passed to a {@linkcode @modelcontextprotocol/client!client/client.Client | Client} and one to a {@linkcode @modelcontextprotocol/server!server/server.Server | Server}.\n     */\n    static createLinkedPair(): [InMemoryTransport, InMemoryTransport] {\n        const clientTransport = new InMemoryTransport();\n        const serverTransport = new InMemoryTransport();\n        clientTransport._otherTransport = serverTransport;\n        serverTransport._otherTransport = clientTransport;\n        return [clientTransport, serverTransport];\n    }\n\n    async start(): Promise<void> {\n        // Process any messages that were queued before start was called\n        while (this._messageQueue.length > 0) {\n            const queuedMessage = this._messageQueue.shift()!;\n            this.onmessage?.(queuedMessage.message, queuedMessage.extra);\n        }\n    }\n\n    async close(): Promise<void> {\n        if (this._closed) return;\n        this._closed = true;\n\n        const other = this._otherTransport;\n        this._otherTransport = undefined;\n        try {\n            await other?.close();\n        } finally {\n            this.onclose?.();\n        }\n    }\n\n    /**\n     * Sends a message with optional auth info.\n     * This is useful for testing authentication scenarios.\n     */\n    async send(message: JSONRPCMessage, options?: { relatedRequestId?: RequestId; authInfo?: AuthInfo }): Promise<void> {\n        if (!this._otherTransport) {\n            throw new SdkError(SdkErrorCode.NotConnected, 'Not connected');\n        }\n\n        if (this._otherTransport.onmessage) {\n            this._otherTransport.onmessage(message, { authInfo: options?.authInfo });\n        } else {\n            this._otherTransport._messageQueue.push({ message, extra: { authInfo: options?.authInfo } });\n        }\n    }\n}\n", "/**\n * Zod-specific helpers for the v1-compat raw-shape shorthand on\n * `registerTool`/`registerPrompt`. Kept separate from `standardSchema.ts` so\n * that file stays library-agnostic per the Standard Schema spec.\n */\n\nimport * as z from 'zod/v4';\n\nimport type { StandardSchemaWithJSON } from './standardSchema';\nimport { isStandardSchema } from './standardSchema';\n\nfunction isZodV4Schema(v: unknown): v is z.ZodType {\n    // `_zod` is the v4 internal namespace property. Zod v3 schemas have `_def`\n    // and (since 3.24) `~standard.vendor === 'zod'`, but never `_zod`. We require\n    // v4 because the wrap path below uses v4's `z.object()`, which cannot consume\n    // v3 field schemas.\n    return typeof v === 'object' && v !== null && '_zod' in v;\n}\n\nfunction looksLikeZodV3(v: unknown): boolean {\n    // v3 schemas have `_def.typeName` (e.g. 'ZodString') and no `_zod`.\n    return (\n        typeof v === 'object' &&\n        v !== null &&\n        !('_zod' in v) &&\n        '_def' in v &&\n        typeof (v as { _def?: { typeName?: unknown } })._def?.typeName === 'string'\n    );\n}\n\n/**\n * Detects a \"raw shape\" — a plain object whose values are Zod field schemas,\n * e.g. `{ name: z.string() }`. Powers the auto-wrap in\n * {@linkcode normalizeRawShapeSchema}, which wraps with `z.object()`, so only\n * Zod values are supported.\n *\n * @internal\n */\nexport function isZodRawShape(obj: unknown): obj is Record<string, z.ZodType> {\n    if (typeof obj !== 'object' || obj === null) return false;\n    if (isStandardSchema(obj)) return false;\n    // Require a plain object literal: rejects arrays, Date, Map, RegExp, class instances, etc.\n    // Object.create(null) is also accepted.\n    const proto = Object.getPrototypeOf(obj);\n    if (proto !== Object.prototype && proto !== null) return false;\n    // [].every() is true, so an empty plain object is a valid raw shape (matches v1).\n    return Object.values(obj).every(v => isZodV4Schema(v));\n}\n\n/**\n * Accepts either a {@linkcode StandardSchemaWithJSON} or a raw Zod shape\n * `{ field: z.string() }` and returns a {@linkcode StandardSchemaWithJSON}.\n * Raw shapes are wrapped with `z.object()` so the rest of the pipeline sees a\n * uniform schema type; already-wrapped schemas pass through unchanged.\n *\n * @internal\n */\nexport function normalizeRawShapeSchema(\n    schema: StandardSchemaWithJSON | Record<string, z.ZodType> | undefined\n): StandardSchemaWithJSON | undefined {\n    if (schema === undefined) return undefined;\n    if (isZodRawShape(schema)) {\n        return z.object(schema) as StandardSchemaWithJSON;\n    }\n    if (typeof schema === 'object' && schema !== null && !isStandardSchema(schema) && Object.values(schema).some(v => looksLikeZodV3(v))) {\n        throw new TypeError(\n            'Raw-shape inputSchema/outputSchema/argsSchema fields must be Zod v4 schemas. Got a Zod v3 field schema. Import from `zod/v4` (or upgrade your zod import), or wrap with `z.object({...})` yourself.'\n        );\n    }\n    if (!isStandardSchema(schema)) {\n        throw new TypeError(\n            'inputSchema/outputSchema/argsSchema must be a Standard Schema (e.g. z.object({...})) or a raw Zod shape ({ field: z.string() }).'\n        );\n    }\n    // Any StandardSchema passes through; standardSchemaToJsonSchema owns the per-vendor\n    // handling for schemas without `~standard.jsonSchema` (zod 4.0-4.1 fallback, zod 3\n    // and non-zod errors). Gating on `~standard.jsonSchema` here would unreachably\n    // front-run that fallback.\n    return schema;\n}\n", "/**\n * Explicit warm-up entry for the lazy wire-schema layers.\n *\n * The per-revision wire schemas are built lazily: each era's schema set sits\n * behind a memoized factory (`buildSchemas2025`/`buildSchemas2026`), and the\n * registry/codec lookup maps above those factories are memoized the same way.\n * That laziness is the right default on process-per-invocation runtimes (CLI\n * tools, dev servers), where module evaluation IS startup latency and most\n * short-lived processes never validate a message on both eras.\n *\n * On platforms that bill request CPU but not module evaluation — isolate-based\n * edge/serverless runtimes such as Cloudflare Workers — the trade inverts:\n * module-scope work runs during isolate warm-up outside any request, while\n * lazy construction lands inside the first request's billed (and latency\n * budgeted) CPU. `preloadSchemas()` lets deployments on such platforms move\n * the one-time construction cost back to module scope by calling it at module\n * scope themselves. The packages' own workerd shims already do this, so\n * Workers deployments get eager construction automatically.\n */\nimport { buildSchemas2025 } from './rev2025-11-25/buildSchemas';\nimport { warmRegistryMaps2025 } from './rev2025-11-25/registry';\nimport { buildSchemas2026 } from './rev2026-07-28/buildSchemas';\nimport { warmWireResultSchemas2026 } from './rev2026-07-28/codec';\nimport { warmInputSchemaMaps2026 } from './rev2026-07-28/inputRequired';\n\n/**\n * Eagerly builds every lazily-constructed wire-schema layer, so that no later\n * validation pays schema-construction cost.\n *\n * Synchronous and idempotent: every layer is a memo, so the first call does\n * all the work and subsequent calls return immediately. Reference identity is\n * unaffected — this forces the same memos every lazy consumer pulls through.\n *\n * Call it at module scope on platforms that bill per-request CPU but not\n * module evaluation (isolate-based edge/serverless runtimes), where deferring\n * construction would move it into the first request of every fresh isolate:\n *\n * ```ts\n * // from '@modelcontextprotocol/server' or '@modelcontextprotocol/client' —\n * // each package bundles its own schema copy, so warm the one(s) you import.\n * preloadSchemas(); // module scope — runs during isolate warm-up\n * ```\n *\n * On Node CLIs and other process-per-invocation runtimes, prefer the lazy\n * default — there, module-scope construction is pure added boot latency.\n */\nexport function preloadSchemas(): void {\n    // The era schema factories — the bulk of the construction cost.\n    buildSchemas2025();\n    buildSchemas2026();\n    // The memoized lookup layers above the factories. (The 2026 registry has\n    // no map memo of its own — it reads the dispatch maps straight off the\n    // built schema set.)\n    warmRegistryMaps2025();\n    warmInputSchemaMaps2026();\n    warmWireResultSchemas2026();\n}\n", "import type { StandardSchemaV1, StandardSchemaWithJSON } from '../util/standardSchema';\nimport type { JsonSchemaType, jsonSchemaValidator } from './types';\n\n/**\n * Wrap a raw JSON Schema object as a {@linkcode StandardSchemaWithJSON} so it can be\n * passed to `registerTool` / `registerPrompt`. Use this when you already have JSON\n * Schema (e.g. from TypeBox, or hand-written) and want to register it without going\n * through a Standard Schema library.\n *\n * The callback arguments will be typed `unknown` (raw JSON Schema has no TypeScript\n * types attached). Cast at the call site, or use the generic `fromJsonSchema<MyType>(...)`.\n *\n * @param schema - A JSON Schema object describing the expected shape\n * @param validator - A validator provider. When importing `fromJsonSchema` from\n *   `@modelcontextprotocol/server` or `@modelcontextprotocol/client`, a runtime-appropriate\n *   default is provided automatically (AJV on Node.js, CfWorker on edge runtimes).\n *\n * @example\n * ```ts source=\"./fromJsonSchema.examples.ts#fromJsonSchema_basicUsage\"\n * const inputSchema = fromJsonSchema<{ name: string }>(\n *     { type: 'object', properties: { name: { type: 'string' } }, required: ['name'] },\n *     validator\n * );\n * // Use with server.registerTool('greet', { inputSchema }, handler)\n * ```\n */\nexport function fromJsonSchema<T = unknown>(schema: JsonSchemaType, validator: jsonSchemaValidator): StandardSchemaWithJSON<T, T> {\n    const check = validator.getValidator<T>(schema);\n    return {\n        '~standard': {\n            version: 1,\n            vendor: 'mcp',\n            jsonSchema: {\n                input: () => schema as Record<string, unknown>,\n                output: () => schema as Record<string, unknown>\n            },\n            validate: (data: unknown): StandardSchemaV1.Result<T> => {\n                const result = check(data);\n                return result.valid ? { value: result.data } : { issues: [{ message: result.errorMessage }] };\n            }\n        }\n    };\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.regexpCode = exports.getEsmExportName = exports.getProperty = exports.safeStringify = exports.stringify = exports.strConcat = exports.addCodeArg = exports.str = exports._ = exports.nil = exports._Code = exports.Name = exports.IDENTIFIER = exports._CodeOrName = void 0;\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nclass _CodeOrName {\n}\nexports._CodeOrName = _CodeOrName;\nexports.IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;\nclass Name extends _CodeOrName {\n    constructor(s) {\n        super();\n        if (!exports.IDENTIFIER.test(s))\n            throw new Error(\"CodeGen: name must be a valid identifier\");\n        this.str = s;\n    }\n    toString() {\n        return this.str;\n    }\n    emptyStr() {\n        return false;\n    }\n    get names() {\n        return { [this.str]: 1 };\n    }\n}\nexports.Name = Name;\nclass _Code extends _CodeOrName {\n    constructor(code) {\n        super();\n        this._items = typeof code === \"string\" ? [code] : code;\n    }\n    toString() {\n        return this.str;\n    }\n    emptyStr() {\n        if (this._items.length > 1)\n            return false;\n        const item = this._items[0];\n        return item === \"\" || item === '\"\"';\n    }\n    get str() {\n        var _a;\n        return ((_a = this._str) !== null && _a !== void 0 ? _a : (this._str = this._items.reduce((s, c) => `${s}${c}`, \"\")));\n    }\n    get names() {\n        var _a;\n        return ((_a = this._names) !== null && _a !== void 0 ? _a : (this._names = this._items.reduce((names, c) => {\n            if (c instanceof Name)\n                names[c.str] = (names[c.str] || 0) + 1;\n            return names;\n        }, {})));\n    }\n}\nexports._Code = _Code;\nexports.nil = new _Code(\"\");\nfunction _(strs, ...args) {\n    const code = [strs[0]];\n    let i = 0;\n    while (i < args.length) {\n        addCodeArg(code, args[i]);\n        code.push(strs[++i]);\n    }\n    return new _Code(code);\n}\nexports._ = _;\nconst plus = new _Code(\"+\");\nfunction str(strs, ...args) {\n    const expr = [safeStringify(strs[0])];\n    let i = 0;\n    while (i < args.length) {\n        expr.push(plus);\n        addCodeArg(expr, args[i]);\n        expr.push(plus, safeStringify(strs[++i]));\n    }\n    optimize(expr);\n    return new _Code(expr);\n}\nexports.str = str;\nfunction addCodeArg(code, arg) {\n    if (arg instanceof _Code)\n        code.push(...arg._items);\n    else if (arg instanceof Name)\n        code.push(arg);\n    else\n        code.push(interpolate(arg));\n}\nexports.addCodeArg = addCodeArg;\nfunction optimize(expr) {\n    let i = 1;\n    while (i < expr.length - 1) {\n        if (expr[i] === plus) {\n            const res = mergeExprItems(expr[i - 1], expr[i + 1]);\n            if (res !== undefined) {\n                expr.splice(i - 1, 3, res);\n                continue;\n            }\n            expr[i++] = \"+\";\n        }\n        i++;\n    }\n}\nfunction mergeExprItems(a, b) {\n    if (b === '\"\"')\n        return a;\n    if (a === '\"\"')\n        return b;\n    if (typeof a == \"string\") {\n        if (b instanceof Name || a[a.length - 1] !== '\"')\n            return;\n        if (typeof b != \"string\")\n            return `${a.slice(0, -1)}${b}\"`;\n        if (b[0] === '\"')\n            return a.slice(0, -1) + b.slice(1);\n        return;\n    }\n    if (typeof b == \"string\" && b[0] === '\"' && !(a instanceof Name))\n        return `\"${a}${b.slice(1)}`;\n    return;\n}\nfunction strConcat(c1, c2) {\n    return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str `${c1}${c2}`;\n}\nexports.strConcat = strConcat;\n// TODO do not allow arrays here\nfunction interpolate(x) {\n    return typeof x == \"number\" || typeof x == \"boolean\" || x === null\n        ? x\n        : safeStringify(Array.isArray(x) ? x.join(\",\") : x);\n}\nfunction stringify(x) {\n    return new _Code(safeStringify(x));\n}\nexports.stringify = stringify;\nfunction safeStringify(x) {\n    return JSON.stringify(x)\n        .replace(/\\u2028/g, \"\\\\u2028\")\n        .replace(/\\u2029/g, \"\\\\u2029\");\n}\nexports.safeStringify = safeStringify;\nfunction getProperty(key) {\n    return typeof key == \"string\" && exports.IDENTIFIER.test(key) ? new _Code(`.${key}`) : _ `[${key}]`;\n}\nexports.getProperty = getProperty;\n//Does best effort to format the name properly\nfunction getEsmExportName(key) {\n    if (typeof key == \"string\" && exports.IDENTIFIER.test(key)) {\n        return new _Code(`${key}`);\n    }\n    throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`);\n}\nexports.getEsmExportName = getEsmExportName;\nfunction regexpCode(rx) {\n    return new _Code(rx.toString());\n}\nexports.regexpCode = regexpCode;\n//# sourceMappingURL=code.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ValueScope = exports.ValueScopeName = exports.Scope = exports.varKinds = exports.UsedValueState = void 0;\nconst code_1 = require(\"./code\");\nclass ValueError extends Error {\n    constructor(name) {\n        super(`CodeGen: \"code\" for ${name} not defined`);\n        this.value = name.value;\n    }\n}\nvar UsedValueState;\n(function (UsedValueState) {\n    UsedValueState[UsedValueState[\"Started\"] = 0] = \"Started\";\n    UsedValueState[UsedValueState[\"Completed\"] = 1] = \"Completed\";\n})(UsedValueState || (exports.UsedValueState = UsedValueState = {}));\nexports.varKinds = {\n    const: new code_1.Name(\"const\"),\n    let: new code_1.Name(\"let\"),\n    var: new code_1.Name(\"var\"),\n};\nclass Scope {\n    constructor({ prefixes, parent } = {}) {\n        this._names = {};\n        this._prefixes = prefixes;\n        this._parent = parent;\n    }\n    toName(nameOrPrefix) {\n        return nameOrPrefix instanceof code_1.Name ? nameOrPrefix : this.name(nameOrPrefix);\n    }\n    name(prefix) {\n        return new code_1.Name(this._newName(prefix));\n    }\n    _newName(prefix) {\n        const ng = this._names[prefix] || this._nameGroup(prefix);\n        return `${prefix}${ng.index++}`;\n    }\n    _nameGroup(prefix) {\n        var _a, _b;\n        if (((_b = (_a = this._parent) === null || _a === void 0 ? void 0 : _a._prefixes) === null || _b === void 0 ? void 0 : _b.has(prefix)) || (this._prefixes && !this._prefixes.has(prefix))) {\n            throw new Error(`CodeGen: prefix \"${prefix}\" is not allowed in this scope`);\n        }\n        return (this._names[prefix] = { prefix, index: 0 });\n    }\n}\nexports.Scope = Scope;\nclass ValueScopeName extends code_1.Name {\n    constructor(prefix, nameStr) {\n        super(nameStr);\n        this.prefix = prefix;\n    }\n    setValue(value, { property, itemIndex }) {\n        this.value = value;\n        this.scopePath = (0, code_1._) `.${new code_1.Name(property)}[${itemIndex}]`;\n    }\n}\nexports.ValueScopeName = ValueScopeName;\nconst line = (0, code_1._) `\\n`;\nclass ValueScope extends Scope {\n    constructor(opts) {\n        super(opts);\n        this._values = {};\n        this._scope = opts.scope;\n        this.opts = { ...opts, _n: opts.lines ? line : code_1.nil };\n    }\n    get() {\n        return this._scope;\n    }\n    name(prefix) {\n        return new ValueScopeName(prefix, this._newName(prefix));\n    }\n    value(nameOrPrefix, value) {\n        var _a;\n        if (value.ref === undefined)\n            throw new Error(\"CodeGen: ref must be passed in value\");\n        const name = this.toName(nameOrPrefix);\n        const { prefix } = name;\n        const valueKey = (_a = value.key) !== null && _a !== void 0 ? _a : value.ref;\n        let vs = this._values[prefix];\n        if (vs) {\n            const _name = vs.get(valueKey);\n            if (_name)\n                return _name;\n        }\n        else {\n            vs = this._values[prefix] = new Map();\n        }\n        vs.set(valueKey, name);\n        const s = this._scope[prefix] || (this._scope[prefix] = []);\n        const itemIndex = s.length;\n        s[itemIndex] = value.ref;\n        name.setValue(value, { property: prefix, itemIndex });\n        return name;\n    }\n    getValue(prefix, keyOrRef) {\n        const vs = this._values[prefix];\n        if (!vs)\n            return;\n        return vs.get(keyOrRef);\n    }\n    scopeRefs(scopeName, values = this._values) {\n        return this._reduceValues(values, (name) => {\n            if (name.scopePath === undefined)\n                throw new Error(`CodeGen: name \"${name}\" has no value`);\n            return (0, code_1._) `${scopeName}${name.scopePath}`;\n        });\n    }\n    scopeCode(values = this._values, usedValues, getCode) {\n        return this._reduceValues(values, (name) => {\n            if (name.value === undefined)\n                throw new Error(`CodeGen: name \"${name}\" has no value`);\n            return name.value.code;\n        }, usedValues, getCode);\n    }\n    _reduceValues(values, valueCode, usedValues = {}, getCode) {\n        let code = code_1.nil;\n        for (const prefix in values) {\n            const vs = values[prefix];\n            if (!vs)\n                continue;\n            const nameSet = (usedValues[prefix] = usedValues[prefix] || new Map());\n            vs.forEach((name) => {\n                if (nameSet.has(name))\n                    return;\n                nameSet.set(name, UsedValueState.Started);\n                let c = valueCode(name);\n                if (c) {\n                    const def = this.opts.es5 ? exports.varKinds.var : exports.varKinds.const;\n                    code = (0, code_1._) `${code}${def} ${name} = ${c};${this.opts._n}`;\n                }\n                else if ((c = getCode === null || getCode === void 0 ? void 0 : getCode(name))) {\n                    code = (0, code_1._) `${code}${c}${this.opts._n}`;\n                }\n                else {\n                    throw new ValueError(name);\n                }\n                nameSet.set(name, UsedValueState.Completed);\n            });\n        }\n        return code;\n    }\n}\nexports.ValueScope = ValueScope;\n//# sourceMappingURL=scope.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.or = exports.and = exports.not = exports.CodeGen = exports.operators = exports.varKinds = exports.ValueScopeName = exports.ValueScope = exports.Scope = exports.Name = exports.regexpCode = exports.stringify = exports.getProperty = exports.nil = exports.strConcat = exports.str = exports._ = void 0;\nconst code_1 = require(\"./code\");\nconst scope_1 = require(\"./scope\");\nvar code_2 = require(\"./code\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return code_2._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return code_2.str; } });\nObject.defineProperty(exports, \"strConcat\", { enumerable: true, get: function () { return code_2.strConcat; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return code_2.nil; } });\nObject.defineProperty(exports, \"getProperty\", { enumerable: true, get: function () { return code_2.getProperty; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return code_2.stringify; } });\nObject.defineProperty(exports, \"regexpCode\", { enumerable: true, get: function () { return code_2.regexpCode; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return code_2.Name; } });\nvar scope_2 = require(\"./scope\");\nObject.defineProperty(exports, \"Scope\", { enumerable: true, get: function () { return scope_2.Scope; } });\nObject.defineProperty(exports, \"ValueScope\", { enumerable: true, get: function () { return scope_2.ValueScope; } });\nObject.defineProperty(exports, \"ValueScopeName\", { enumerable: true, get: function () { return scope_2.ValueScopeName; } });\nObject.defineProperty(exports, \"varKinds\", { enumerable: true, get: function () { return scope_2.varKinds; } });\nexports.operators = {\n    GT: new code_1._Code(\">\"),\n    GTE: new code_1._Code(\">=\"),\n    LT: new code_1._Code(\"<\"),\n    LTE: new code_1._Code(\"<=\"),\n    EQ: new code_1._Code(\"===\"),\n    NEQ: new code_1._Code(\"!==\"),\n    NOT: new code_1._Code(\"!\"),\n    OR: new code_1._Code(\"||\"),\n    AND: new code_1._Code(\"&&\"),\n    ADD: new code_1._Code(\"+\"),\n};\nclass Node {\n    optimizeNodes() {\n        return this;\n    }\n    optimizeNames(_names, _constants) {\n        return this;\n    }\n}\nclass Def extends Node {\n    constructor(varKind, name, rhs) {\n        super();\n        this.varKind = varKind;\n        this.name = name;\n        this.rhs = rhs;\n    }\n    render({ es5, _n }) {\n        const varKind = es5 ? scope_1.varKinds.var : this.varKind;\n        const rhs = this.rhs === undefined ? \"\" : ` = ${this.rhs}`;\n        return `${varKind} ${this.name}${rhs};` + _n;\n    }\n    optimizeNames(names, constants) {\n        if (!names[this.name.str])\n            return;\n        if (this.rhs)\n            this.rhs = optimizeExpr(this.rhs, names, constants);\n        return this;\n    }\n    get names() {\n        return this.rhs instanceof code_1._CodeOrName ? this.rhs.names : {};\n    }\n}\nclass Assign extends Node {\n    constructor(lhs, rhs, sideEffects) {\n        super();\n        this.lhs = lhs;\n        this.rhs = rhs;\n        this.sideEffects = sideEffects;\n    }\n    render({ _n }) {\n        return `${this.lhs} = ${this.rhs};` + _n;\n    }\n    optimizeNames(names, constants) {\n        if (this.lhs instanceof code_1.Name && !names[this.lhs.str] && !this.sideEffects)\n            return;\n        this.rhs = optimizeExpr(this.rhs, names, constants);\n        return this;\n    }\n    get names() {\n        const names = this.lhs instanceof code_1.Name ? {} : { ...this.lhs.names };\n        return addExprNames(names, this.rhs);\n    }\n}\nclass AssignOp extends Assign {\n    constructor(lhs, op, rhs, sideEffects) {\n        super(lhs, rhs, sideEffects);\n        this.op = op;\n    }\n    render({ _n }) {\n        return `${this.lhs} ${this.op}= ${this.rhs};` + _n;\n    }\n}\nclass Label extends Node {\n    constructor(label) {\n        super();\n        this.label = label;\n        this.names = {};\n    }\n    render({ _n }) {\n        return `${this.label}:` + _n;\n    }\n}\nclass Break extends Node {\n    constructor(label) {\n        super();\n        this.label = label;\n        this.names = {};\n    }\n    render({ _n }) {\n        const label = this.label ? ` ${this.label}` : \"\";\n        return `break${label};` + _n;\n    }\n}\nclass Throw extends Node {\n    constructor(error) {\n        super();\n        this.error = error;\n    }\n    render({ _n }) {\n        return `throw ${this.error};` + _n;\n    }\n    get names() {\n        return this.error.names;\n    }\n}\nclass AnyCode extends Node {\n    constructor(code) {\n        super();\n        this.code = code;\n    }\n    render({ _n }) {\n        return `${this.code};` + _n;\n    }\n    optimizeNodes() {\n        return `${this.code}` ? this : undefined;\n    }\n    optimizeNames(names, constants) {\n        this.code = optimizeExpr(this.code, names, constants);\n        return this;\n    }\n    get names() {\n        return this.code instanceof code_1._CodeOrName ? this.code.names : {};\n    }\n}\nclass ParentNode extends Node {\n    constructor(nodes = []) {\n        super();\n        this.nodes = nodes;\n    }\n    render(opts) {\n        return this.nodes.reduce((code, n) => code + n.render(opts), \"\");\n    }\n    optimizeNodes() {\n        const { nodes } = this;\n        let i = nodes.length;\n        while (i--) {\n            const n = nodes[i].optimizeNodes();\n            if (Array.isArray(n))\n                nodes.splice(i, 1, ...n);\n            else if (n)\n                nodes[i] = n;\n            else\n                nodes.splice(i, 1);\n        }\n        return nodes.length > 0 ? this : undefined;\n    }\n    optimizeNames(names, constants) {\n        const { nodes } = this;\n        let i = nodes.length;\n        while (i--) {\n            // iterating backwards improves 1-pass optimization\n            const n = nodes[i];\n            if (n.optimizeNames(names, constants))\n                continue;\n            subtractNames(names, n.names);\n            nodes.splice(i, 1);\n        }\n        return nodes.length > 0 ? this : undefined;\n    }\n    get names() {\n        return this.nodes.reduce((names, n) => addNames(names, n.names), {});\n    }\n}\nclass BlockNode extends ParentNode {\n    render(opts) {\n        return \"{\" + opts._n + super.render(opts) + \"}\" + opts._n;\n    }\n}\nclass Root extends ParentNode {\n}\nclass Else extends BlockNode {\n}\nElse.kind = \"else\";\nclass If extends BlockNode {\n    constructor(condition, nodes) {\n        super(nodes);\n        this.condition = condition;\n    }\n    render(opts) {\n        let code = `if(${this.condition})` + super.render(opts);\n        if (this.else)\n            code += \"else \" + this.else.render(opts);\n        return code;\n    }\n    optimizeNodes() {\n        super.optimizeNodes();\n        const cond = this.condition;\n        if (cond === true)\n            return this.nodes; // else is ignored here\n        let e = this.else;\n        if (e) {\n            const ns = e.optimizeNodes();\n            e = this.else = Array.isArray(ns) ? new Else(ns) : ns;\n        }\n        if (e) {\n            if (cond === false)\n                return e instanceof If ? e : e.nodes;\n            if (this.nodes.length)\n                return this;\n            return new If(not(cond), e instanceof If ? [e] : e.nodes);\n        }\n        if (cond === false || !this.nodes.length)\n            return undefined;\n        return this;\n    }\n    optimizeNames(names, constants) {\n        var _a;\n        this.else = (_a = this.else) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants);\n        if (!(super.optimizeNames(names, constants) || this.else))\n            return;\n        this.condition = optimizeExpr(this.condition, names, constants);\n        return this;\n    }\n    get names() {\n        const names = super.names;\n        addExprNames(names, this.condition);\n        if (this.else)\n            addNames(names, this.else.names);\n        return names;\n    }\n}\nIf.kind = \"if\";\nclass For extends BlockNode {\n}\nFor.kind = \"for\";\nclass ForLoop extends For {\n    constructor(iteration) {\n        super();\n        this.iteration = iteration;\n    }\n    render(opts) {\n        return `for(${this.iteration})` + super.render(opts);\n    }\n    optimizeNames(names, constants) {\n        if (!super.optimizeNames(names, constants))\n            return;\n        this.iteration = optimizeExpr(this.iteration, names, constants);\n        return this;\n    }\n    get names() {\n        return addNames(super.names, this.iteration.names);\n    }\n}\nclass ForRange extends For {\n    constructor(varKind, name, from, to) {\n        super();\n        this.varKind = varKind;\n        this.name = name;\n        this.from = from;\n        this.to = to;\n    }\n    render(opts) {\n        const varKind = opts.es5 ? scope_1.varKinds.var : this.varKind;\n        const { name, from, to } = this;\n        return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts);\n    }\n    get names() {\n        const names = addExprNames(super.names, this.from);\n        return addExprNames(names, this.to);\n    }\n}\nclass ForIter extends For {\n    constructor(loop, varKind, name, iterable) {\n        super();\n        this.loop = loop;\n        this.varKind = varKind;\n        this.name = name;\n        this.iterable = iterable;\n    }\n    render(opts) {\n        return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts);\n    }\n    optimizeNames(names, constants) {\n        if (!super.optimizeNames(names, constants))\n            return;\n        this.iterable = optimizeExpr(this.iterable, names, constants);\n        return this;\n    }\n    get names() {\n        return addNames(super.names, this.iterable.names);\n    }\n}\nclass Func extends BlockNode {\n    constructor(name, args, async) {\n        super();\n        this.name = name;\n        this.args = args;\n        this.async = async;\n    }\n    render(opts) {\n        const _async = this.async ? \"async \" : \"\";\n        return `${_async}function ${this.name}(${this.args})` + super.render(opts);\n    }\n}\nFunc.kind = \"func\";\nclass Return extends ParentNode {\n    render(opts) {\n        return \"return \" + super.render(opts);\n    }\n}\nReturn.kind = \"return\";\nclass Try extends BlockNode {\n    render(opts) {\n        let code = \"try\" + super.render(opts);\n        if (this.catch)\n            code += this.catch.render(opts);\n        if (this.finally)\n            code += this.finally.render(opts);\n        return code;\n    }\n    optimizeNodes() {\n        var _a, _b;\n        super.optimizeNodes();\n        (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNodes();\n        (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNodes();\n        return this;\n    }\n    optimizeNames(names, constants) {\n        var _a, _b;\n        super.optimizeNames(names, constants);\n        (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants);\n        (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNames(names, constants);\n        return this;\n    }\n    get names() {\n        const names = super.names;\n        if (this.catch)\n            addNames(names, this.catch.names);\n        if (this.finally)\n            addNames(names, this.finally.names);\n        return names;\n    }\n}\nclass Catch extends BlockNode {\n    constructor(error) {\n        super();\n        this.error = error;\n    }\n    render(opts) {\n        return `catch(${this.error})` + super.render(opts);\n    }\n}\nCatch.kind = \"catch\";\nclass Finally extends BlockNode {\n    render(opts) {\n        return \"finally\" + super.render(opts);\n    }\n}\nFinally.kind = \"finally\";\nclass CodeGen {\n    constructor(extScope, opts = {}) {\n        this._values = {};\n        this._blockStarts = [];\n        this._constants = {};\n        this.opts = { ...opts, _n: opts.lines ? \"\\n\" : \"\" };\n        this._extScope = extScope;\n        this._scope = new scope_1.Scope({ parent: extScope });\n        this._nodes = [new Root()];\n    }\n    toString() {\n        return this._root.render(this.opts);\n    }\n    // returns unique name in the internal scope\n    name(prefix) {\n        return this._scope.name(prefix);\n    }\n    // reserves unique name in the external scope\n    scopeName(prefix) {\n        return this._extScope.name(prefix);\n    }\n    // reserves unique name in the external scope and assigns value to it\n    scopeValue(prefixOrName, value) {\n        const name = this._extScope.value(prefixOrName, value);\n        const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set());\n        vs.add(name);\n        return name;\n    }\n    getScopeValue(prefix, keyOrRef) {\n        return this._extScope.getValue(prefix, keyOrRef);\n    }\n    // return code that assigns values in the external scope to the names that are used internally\n    // (same names that were returned by gen.scopeName or gen.scopeValue)\n    scopeRefs(scopeName) {\n        return this._extScope.scopeRefs(scopeName, this._values);\n    }\n    scopeCode() {\n        return this._extScope.scopeCode(this._values);\n    }\n    _def(varKind, nameOrPrefix, rhs, constant) {\n        const name = this._scope.toName(nameOrPrefix);\n        if (rhs !== undefined && constant)\n            this._constants[name.str] = rhs;\n        this._leafNode(new Def(varKind, name, rhs));\n        return name;\n    }\n    // `const` declaration (`var` in es5 mode)\n    const(nameOrPrefix, rhs, _constant) {\n        return this._def(scope_1.varKinds.const, nameOrPrefix, rhs, _constant);\n    }\n    // `let` declaration with optional assignment (`var` in es5 mode)\n    let(nameOrPrefix, rhs, _constant) {\n        return this._def(scope_1.varKinds.let, nameOrPrefix, rhs, _constant);\n    }\n    // `var` declaration with optional assignment\n    var(nameOrPrefix, rhs, _constant) {\n        return this._def(scope_1.varKinds.var, nameOrPrefix, rhs, _constant);\n    }\n    // assignment code\n    assign(lhs, rhs, sideEffects) {\n        return this._leafNode(new Assign(lhs, rhs, sideEffects));\n    }\n    // `+=` code\n    add(lhs, rhs) {\n        return this._leafNode(new AssignOp(lhs, exports.operators.ADD, rhs));\n    }\n    // appends passed SafeExpr to code or executes Block\n    code(c) {\n        if (typeof c == \"function\")\n            c();\n        else if (c !== code_1.nil)\n            this._leafNode(new AnyCode(c));\n        return this;\n    }\n    // returns code for object literal for the passed argument list of key-value pairs\n    object(...keyValues) {\n        const code = [\"{\"];\n        for (const [key, value] of keyValues) {\n            if (code.length > 1)\n                code.push(\",\");\n            code.push(key);\n            if (key !== value || this.opts.es5) {\n                code.push(\":\");\n                (0, code_1.addCodeArg)(code, value);\n            }\n        }\n        code.push(\"}\");\n        return new code_1._Code(code);\n    }\n    // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed)\n    if(condition, thenBody, elseBody) {\n        this._blockNode(new If(condition));\n        if (thenBody && elseBody) {\n            this.code(thenBody).else().code(elseBody).endIf();\n        }\n        else if (thenBody) {\n            this.code(thenBody).endIf();\n        }\n        else if (elseBody) {\n            throw new Error('CodeGen: \"else\" body without \"then\" body');\n        }\n        return this;\n    }\n    // `else if` clause - invalid without `if` or after `else` clauses\n    elseIf(condition) {\n        return this._elseNode(new If(condition));\n    }\n    // `else` clause - only valid after `if` or `else if` clauses\n    else() {\n        return this._elseNode(new Else());\n    }\n    // end `if` statement (needed if gen.if was used only with condition)\n    endIf() {\n        return this._endBlockNode(If, Else);\n    }\n    _for(node, forBody) {\n        this._blockNode(node);\n        if (forBody)\n            this.code(forBody).endFor();\n        return this;\n    }\n    // a generic `for` clause (or statement if `forBody` is passed)\n    for(iteration, forBody) {\n        return this._for(new ForLoop(iteration), forBody);\n    }\n    // `for` statement for a range of values\n    forRange(nameOrPrefix, from, to, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.let) {\n        const name = this._scope.toName(nameOrPrefix);\n        return this._for(new ForRange(varKind, name, from, to), () => forBody(name));\n    }\n    // `for-of` statement (in es5 mode replace with a normal for loop)\n    forOf(nameOrPrefix, iterable, forBody, varKind = scope_1.varKinds.const) {\n        const name = this._scope.toName(nameOrPrefix);\n        if (this.opts.es5) {\n            const arr = iterable instanceof code_1.Name ? iterable : this.var(\"_arr\", iterable);\n            return this.forRange(\"_i\", 0, (0, code_1._) `${arr}.length`, (i) => {\n                this.var(name, (0, code_1._) `${arr}[${i}]`);\n                forBody(name);\n            });\n        }\n        return this._for(new ForIter(\"of\", varKind, name, iterable), () => forBody(name));\n    }\n    // `for-in` statement.\n    // With option `ownProperties` replaced with a `for-of` loop for object keys\n    forIn(nameOrPrefix, obj, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.const) {\n        if (this.opts.ownProperties) {\n            return this.forOf(nameOrPrefix, (0, code_1._) `Object.keys(${obj})`, forBody);\n        }\n        const name = this._scope.toName(nameOrPrefix);\n        return this._for(new ForIter(\"in\", varKind, name, obj), () => forBody(name));\n    }\n    // end `for` loop\n    endFor() {\n        return this._endBlockNode(For);\n    }\n    // `label` statement\n    label(label) {\n        return this._leafNode(new Label(label));\n    }\n    // `break` statement\n    break(label) {\n        return this._leafNode(new Break(label));\n    }\n    // `return` statement\n    return(value) {\n        const node = new Return();\n        this._blockNode(node);\n        this.code(value);\n        if (node.nodes.length !== 1)\n            throw new Error('CodeGen: \"return\" should have one node');\n        return this._endBlockNode(Return);\n    }\n    // `try` statement\n    try(tryBody, catchCode, finallyCode) {\n        if (!catchCode && !finallyCode)\n            throw new Error('CodeGen: \"try\" without \"catch\" and \"finally\"');\n        const node = new Try();\n        this._blockNode(node);\n        this.code(tryBody);\n        if (catchCode) {\n            const error = this.name(\"e\");\n            this._currNode = node.catch = new Catch(error);\n            catchCode(error);\n        }\n        if (finallyCode) {\n            this._currNode = node.finally = new Finally();\n            this.code(finallyCode);\n        }\n        return this._endBlockNode(Catch, Finally);\n    }\n    // `throw` statement\n    throw(error) {\n        return this._leafNode(new Throw(error));\n    }\n    // start self-balancing block\n    block(body, nodeCount) {\n        this._blockStarts.push(this._nodes.length);\n        if (body)\n            this.code(body).endBlock(nodeCount);\n        return this;\n    }\n    // end the current self-balancing block\n    endBlock(nodeCount) {\n        const len = this._blockStarts.pop();\n        if (len === undefined)\n            throw new Error(\"CodeGen: not in self-balancing block\");\n        const toClose = this._nodes.length - len;\n        if (toClose < 0 || (nodeCount !== undefined && toClose !== nodeCount)) {\n            throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`);\n        }\n        this._nodes.length = len;\n        return this;\n    }\n    // `function` heading (or definition if funcBody is passed)\n    func(name, args = code_1.nil, async, funcBody) {\n        this._blockNode(new Func(name, args, async));\n        if (funcBody)\n            this.code(funcBody).endFunc();\n        return this;\n    }\n    // end function definition\n    endFunc() {\n        return this._endBlockNode(Func);\n    }\n    optimize(n = 1) {\n        while (n-- > 0) {\n            this._root.optimizeNodes();\n            this._root.optimizeNames(this._root.names, this._constants);\n        }\n    }\n    _leafNode(node) {\n        this._currNode.nodes.push(node);\n        return this;\n    }\n    _blockNode(node) {\n        this._currNode.nodes.push(node);\n        this._nodes.push(node);\n    }\n    _endBlockNode(N1, N2) {\n        const n = this._currNode;\n        if (n instanceof N1 || (N2 && n instanceof N2)) {\n            this._nodes.pop();\n            return this;\n        }\n        throw new Error(`CodeGen: not in block \"${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}\"`);\n    }\n    _elseNode(node) {\n        const n = this._currNode;\n        if (!(n instanceof If)) {\n            throw new Error('CodeGen: \"else\" without \"if\"');\n        }\n        this._currNode = n.else = node;\n        return this;\n    }\n    get _root() {\n        return this._nodes[0];\n    }\n    get _currNode() {\n        const ns = this._nodes;\n        return ns[ns.length - 1];\n    }\n    set _currNode(node) {\n        const ns = this._nodes;\n        ns[ns.length - 1] = node;\n    }\n}\nexports.CodeGen = CodeGen;\nfunction addNames(names, from) {\n    for (const n in from)\n        names[n] = (names[n] || 0) + (from[n] || 0);\n    return names;\n}\nfunction addExprNames(names, from) {\n    return from instanceof code_1._CodeOrName ? addNames(names, from.names) : names;\n}\nfunction optimizeExpr(expr, names, constants) {\n    if (expr instanceof code_1.Name)\n        return replaceName(expr);\n    if (!canOptimize(expr))\n        return expr;\n    return new code_1._Code(expr._items.reduce((items, c) => {\n        if (c instanceof code_1.Name)\n            c = replaceName(c);\n        if (c instanceof code_1._Code)\n            items.push(...c._items);\n        else\n            items.push(c);\n        return items;\n    }, []));\n    function replaceName(n) {\n        const c = constants[n.str];\n        if (c === undefined || names[n.str] !== 1)\n            return n;\n        delete names[n.str];\n        return c;\n    }\n    function canOptimize(e) {\n        return (e instanceof code_1._Code &&\n            e._items.some((c) => c instanceof code_1.Name && names[c.str] === 1 && constants[c.str] !== undefined));\n    }\n}\nfunction subtractNames(names, from) {\n    for (const n in from)\n        names[n] = (names[n] || 0) - (from[n] || 0);\n}\nfunction not(x) {\n    return typeof x == \"boolean\" || typeof x == \"number\" || x === null ? !x : (0, code_1._) `!${par(x)}`;\n}\nexports.not = not;\nconst andCode = mappend(exports.operators.AND);\n// boolean AND (&&) expression with the passed arguments\nfunction and(...args) {\n    return args.reduce(andCode);\n}\nexports.and = and;\nconst orCode = mappend(exports.operators.OR);\n// boolean OR (||) expression with the passed arguments\nfunction or(...args) {\n    return args.reduce(orCode);\n}\nexports.or = or;\nfunction mappend(op) {\n    return (x, y) => (x === code_1.nil ? y : y === code_1.nil ? x : (0, code_1._) `${par(x)} ${op} ${par(y)}`);\n}\nfunction par(x) {\n    return x instanceof code_1.Name ? x : (0, code_1._) `(${x})`;\n}\n//# sourceMappingURL=index.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.checkStrictMode = exports.getErrorPath = exports.Type = exports.useFunc = exports.setEvaluated = exports.evaluatedPropsToName = exports.mergeEvaluated = exports.eachItem = exports.unescapeJsonPointer = exports.escapeJsonPointer = exports.escapeFragment = exports.unescapeFragment = exports.schemaRefOrVal = exports.schemaHasRulesButRef = exports.schemaHasRules = exports.checkUnknownRules = exports.alwaysValidSchema = exports.toHash = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst code_1 = require(\"./codegen/code\");\n// TODO refactor to use Set\nfunction toHash(arr) {\n    const hash = {};\n    for (const item of arr)\n        hash[item] = true;\n    return hash;\n}\nexports.toHash = toHash;\nfunction alwaysValidSchema(it, schema) {\n    if (typeof schema == \"boolean\")\n        return schema;\n    if (Object.keys(schema).length === 0)\n        return true;\n    checkUnknownRules(it, schema);\n    return !schemaHasRules(schema, it.self.RULES.all);\n}\nexports.alwaysValidSchema = alwaysValidSchema;\nfunction checkUnknownRules(it, schema = it.schema) {\n    const { opts, self } = it;\n    if (!opts.strictSchema)\n        return;\n    if (typeof schema === \"boolean\")\n        return;\n    const rules = self.RULES.keywords;\n    for (const key in schema) {\n        if (!rules[key])\n            checkStrictMode(it, `unknown keyword: \"${key}\"`);\n    }\n}\nexports.checkUnknownRules = checkUnknownRules;\nfunction schemaHasRules(schema, rules) {\n    if (typeof schema == \"boolean\")\n        return !schema;\n    for (const key in schema)\n        if (rules[key])\n            return true;\n    return false;\n}\nexports.schemaHasRules = schemaHasRules;\nfunction schemaHasRulesButRef(schema, RULES) {\n    if (typeof schema == \"boolean\")\n        return !schema;\n    for (const key in schema)\n        if (key !== \"$ref\" && RULES.all[key])\n            return true;\n    return false;\n}\nexports.schemaHasRulesButRef = schemaHasRulesButRef;\nfunction schemaRefOrVal({ topSchemaRef, schemaPath }, schema, keyword, $data) {\n    if (!$data) {\n        if (typeof schema == \"number\" || typeof schema == \"boolean\")\n            return schema;\n        if (typeof schema == \"string\")\n            return (0, codegen_1._) `${schema}`;\n    }\n    return (0, codegen_1._) `${topSchemaRef}${schemaPath}${(0, codegen_1.getProperty)(keyword)}`;\n}\nexports.schemaRefOrVal = schemaRefOrVal;\nfunction unescapeFragment(str) {\n    return unescapeJsonPointer(decodeURIComponent(str));\n}\nexports.unescapeFragment = unescapeFragment;\nfunction escapeFragment(str) {\n    return encodeURIComponent(escapeJsonPointer(str));\n}\nexports.escapeFragment = escapeFragment;\nfunction escapeJsonPointer(str) {\n    if (typeof str == \"number\")\n        return `${str}`;\n    return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n}\nexports.escapeJsonPointer = escapeJsonPointer;\nfunction unescapeJsonPointer(str) {\n    return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n}\nexports.unescapeJsonPointer = unescapeJsonPointer;\nfunction eachItem(xs, f) {\n    if (Array.isArray(xs)) {\n        for (const x of xs)\n            f(x);\n    }\n    else {\n        f(xs);\n    }\n}\nexports.eachItem = eachItem;\nfunction makeMergeEvaluated({ mergeNames, mergeToName, mergeValues, resultToName, }) {\n    return (gen, from, to, toName) => {\n        const res = to === undefined\n            ? from\n            : to instanceof codegen_1.Name\n                ? (from instanceof codegen_1.Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to)\n                : from instanceof codegen_1.Name\n                    ? (mergeToName(gen, to, from), from)\n                    : mergeValues(from, to);\n        return toName === codegen_1.Name && !(res instanceof codegen_1.Name) ? resultToName(gen, res) : res;\n    };\n}\nexports.mergeEvaluated = {\n    props: makeMergeEvaluated({\n        mergeNames: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true && ${from} !== undefined`, () => {\n            gen.if((0, codegen_1._) `${from} === true`, () => gen.assign(to, true), () => gen.assign(to, (0, codegen_1._) `${to} || {}`).code((0, codegen_1._) `Object.assign(${to}, ${from})`));\n        }),\n        mergeToName: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true`, () => {\n            if (from === true) {\n                gen.assign(to, true);\n            }\n            else {\n                gen.assign(to, (0, codegen_1._) `${to} || {}`);\n                setEvaluated(gen, to, from);\n            }\n        }),\n        mergeValues: (from, to) => (from === true ? true : { ...from, ...to }),\n        resultToName: evaluatedPropsToName,\n    }),\n    items: makeMergeEvaluated({\n        mergeNames: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true && ${from} !== undefined`, () => gen.assign(to, (0, codegen_1._) `${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)),\n        mergeToName: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true`, () => gen.assign(to, from === true ? true : (0, codegen_1._) `${to} > ${from} ? ${to} : ${from}`)),\n        mergeValues: (from, to) => (from === true ? true : Math.max(from, to)),\n        resultToName: (gen, items) => gen.var(\"items\", items),\n    }),\n};\nfunction evaluatedPropsToName(gen, ps) {\n    if (ps === true)\n        return gen.var(\"props\", true);\n    const props = gen.var(\"props\", (0, codegen_1._) `{}`);\n    if (ps !== undefined)\n        setEvaluated(gen, props, ps);\n    return props;\n}\nexports.evaluatedPropsToName = evaluatedPropsToName;\nfunction setEvaluated(gen, props, ps) {\n    Object.keys(ps).forEach((p) => gen.assign((0, codegen_1._) `${props}${(0, codegen_1.getProperty)(p)}`, true));\n}\nexports.setEvaluated = setEvaluated;\nconst snippets = {};\nfunction useFunc(gen, f) {\n    return gen.scopeValue(\"func\", {\n        ref: f,\n        code: snippets[f.code] || (snippets[f.code] = new code_1._Code(f.code)),\n    });\n}\nexports.useFunc = useFunc;\nvar Type;\n(function (Type) {\n    Type[Type[\"Num\"] = 0] = \"Num\";\n    Type[Type[\"Str\"] = 1] = \"Str\";\n})(Type || (exports.Type = Type = {}));\nfunction getErrorPath(dataProp, dataPropType, jsPropertySyntax) {\n    // let path\n    if (dataProp instanceof codegen_1.Name) {\n        const isNumber = dataPropType === Type.Num;\n        return jsPropertySyntax\n            ? isNumber\n                ? (0, codegen_1._) `\"[\" + ${dataProp} + \"]\"`\n                : (0, codegen_1._) `\"['\" + ${dataProp} + \"']\"`\n            : isNumber\n                ? (0, codegen_1._) `\"/\" + ${dataProp}`\n                : (0, codegen_1._) `\"/\" + ${dataProp}.replace(/~/g, \"~0\").replace(/\\\\//g, \"~1\")`; // TODO maybe use global escapePointer\n    }\n    return jsPropertySyntax ? (0, codegen_1.getProperty)(dataProp).toString() : \"/\" + escapeJsonPointer(dataProp);\n}\nexports.getErrorPath = getErrorPath;\nfunction checkStrictMode(it, msg, mode = it.opts.strictSchema) {\n    if (!mode)\n        return;\n    msg = `strict mode: ${msg}`;\n    if (mode === true)\n        throw new Error(msg);\n    it.self.logger.warn(msg);\n}\nexports.checkStrictMode = checkStrictMode;\n//# sourceMappingURL=util.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"./codegen\");\nconst names = {\n    // validation function arguments\n    data: new codegen_1.Name(\"data\"), // data passed to validation function\n    // args passed from referencing schema\n    valCxt: new codegen_1.Name(\"valCxt\"), // validation/data context - should not be used directly, it is destructured to the names below\n    instancePath: new codegen_1.Name(\"instancePath\"),\n    parentData: new codegen_1.Name(\"parentData\"),\n    parentDataProperty: new codegen_1.Name(\"parentDataProperty\"),\n    rootData: new codegen_1.Name(\"rootData\"), // root data - same as the data passed to the first/top validation function\n    dynamicAnchors: new codegen_1.Name(\"dynamicAnchors\"), // used to support recursiveRef and dynamicRef\n    // function scoped variables\n    vErrors: new codegen_1.Name(\"vErrors\"), // null or array of validation errors\n    errors: new codegen_1.Name(\"errors\"), // counter of validation errors\n    this: new codegen_1.Name(\"this\"),\n    // \"globals\"\n    self: new codegen_1.Name(\"self\"),\n    scope: new codegen_1.Name(\"scope\"),\n    // JTD serialize/parse name for JSON string and position\n    json: new codegen_1.Name(\"json\"),\n    jsonPos: new codegen_1.Name(\"jsonPos\"),\n    jsonLen: new codegen_1.Name(\"jsonLen\"),\n    jsonPart: new codegen_1.Name(\"jsonPart\"),\n};\nexports.default = names;\n//# sourceMappingURL=names.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extendErrors = exports.resetErrorsCount = exports.reportExtraError = exports.reportError = exports.keyword$DataError = exports.keywordError = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst util_1 = require(\"./util\");\nconst names_1 = require(\"./names\");\nexports.keywordError = {\n    message: ({ keyword }) => (0, codegen_1.str) `must pass \"${keyword}\" keyword validation`,\n};\nexports.keyword$DataError = {\n    message: ({ keyword, schemaType }) => schemaType\n        ? (0, codegen_1.str) `\"${keyword}\" keyword must be ${schemaType} ($data)`\n        : (0, codegen_1.str) `\"${keyword}\" keyword is invalid ($data)`,\n};\nfunction reportError(cxt, error = exports.keywordError, errorPaths, overrideAllErrors) {\n    const { it } = cxt;\n    const { gen, compositeRule, allErrors } = it;\n    const errObj = errorObjectCode(cxt, error, errorPaths);\n    if (overrideAllErrors !== null && overrideAllErrors !== void 0 ? overrideAllErrors : (compositeRule || allErrors)) {\n        addError(gen, errObj);\n    }\n    else {\n        returnErrors(it, (0, codegen_1._) `[${errObj}]`);\n    }\n}\nexports.reportError = reportError;\nfunction reportExtraError(cxt, error = exports.keywordError, errorPaths) {\n    const { it } = cxt;\n    const { gen, compositeRule, allErrors } = it;\n    const errObj = errorObjectCode(cxt, error, errorPaths);\n    addError(gen, errObj);\n    if (!(compositeRule || allErrors)) {\n        returnErrors(it, names_1.default.vErrors);\n    }\n}\nexports.reportExtraError = reportExtraError;\nfunction resetErrorsCount(gen, errsCount) {\n    gen.assign(names_1.default.errors, errsCount);\n    gen.if((0, codegen_1._) `${names_1.default.vErrors} !== null`, () => gen.if(errsCount, () => gen.assign((0, codegen_1._) `${names_1.default.vErrors}.length`, errsCount), () => gen.assign(names_1.default.vErrors, null)));\n}\nexports.resetErrorsCount = resetErrorsCount;\nfunction extendErrors({ gen, keyword, schemaValue, data, errsCount, it, }) {\n    /* istanbul ignore if */\n    if (errsCount === undefined)\n        throw new Error(\"ajv implementation error\");\n    const err = gen.name(\"err\");\n    gen.forRange(\"i\", errsCount, names_1.default.errors, (i) => {\n        gen.const(err, (0, codegen_1._) `${names_1.default.vErrors}[${i}]`);\n        gen.if((0, codegen_1._) `${err}.instancePath === undefined`, () => gen.assign((0, codegen_1._) `${err}.instancePath`, (0, codegen_1.strConcat)(names_1.default.instancePath, it.errorPath)));\n        gen.assign((0, codegen_1._) `${err}.schemaPath`, (0, codegen_1.str) `${it.errSchemaPath}/${keyword}`);\n        if (it.opts.verbose) {\n            gen.assign((0, codegen_1._) `${err}.schema`, schemaValue);\n            gen.assign((0, codegen_1._) `${err}.data`, data);\n        }\n    });\n}\nexports.extendErrors = extendErrors;\nfunction addError(gen, errObj) {\n    const err = gen.const(\"err\", errObj);\n    gen.if((0, codegen_1._) `${names_1.default.vErrors} === null`, () => gen.assign(names_1.default.vErrors, (0, codegen_1._) `[${err}]`), (0, codegen_1._) `${names_1.default.vErrors}.push(${err})`);\n    gen.code((0, codegen_1._) `${names_1.default.errors}++`);\n}\nfunction returnErrors(it, errs) {\n    const { gen, validateName, schemaEnv } = it;\n    if (schemaEnv.$async) {\n        gen.throw((0, codegen_1._) `new ${it.ValidationError}(${errs})`);\n    }\n    else {\n        gen.assign((0, codegen_1._) `${validateName}.errors`, errs);\n        gen.return(false);\n    }\n}\nconst E = {\n    keyword: new codegen_1.Name(\"keyword\"),\n    schemaPath: new codegen_1.Name(\"schemaPath\"), // also used in JTD errors\n    params: new codegen_1.Name(\"params\"),\n    propertyName: new codegen_1.Name(\"propertyName\"),\n    message: new codegen_1.Name(\"message\"),\n    schema: new codegen_1.Name(\"schema\"),\n    parentSchema: new codegen_1.Name(\"parentSchema\"),\n};\nfunction errorObjectCode(cxt, error, errorPaths) {\n    const { createErrors } = cxt.it;\n    if (createErrors === false)\n        return (0, codegen_1._) `{}`;\n    return errorObject(cxt, error, errorPaths);\n}\nfunction errorObject(cxt, error, errorPaths = {}) {\n    const { gen, it } = cxt;\n    const keyValues = [\n        errorInstancePath(it, errorPaths),\n        errorSchemaPath(cxt, errorPaths),\n    ];\n    extraErrorProps(cxt, error, keyValues);\n    return gen.object(...keyValues);\n}\nfunction errorInstancePath({ errorPath }, { instancePath }) {\n    const instPath = instancePath\n        ? (0, codegen_1.str) `${errorPath}${(0, util_1.getErrorPath)(instancePath, util_1.Type.Str)}`\n        : errorPath;\n    return [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, instPath)];\n}\nfunction errorSchemaPath({ keyword, it: { errSchemaPath } }, { schemaPath, parentSchema }) {\n    let schPath = parentSchema ? errSchemaPath : (0, codegen_1.str) `${errSchemaPath}/${keyword}`;\n    if (schemaPath) {\n        schPath = (0, codegen_1.str) `${schPath}${(0, util_1.getErrorPath)(schemaPath, util_1.Type.Str)}`;\n    }\n    return [E.schemaPath, schPath];\n}\nfunction extraErrorProps(cxt, { params, message }, keyValues) {\n    const { keyword, data, schemaValue, it } = cxt;\n    const { opts, propertyName, topSchemaRef, schemaPath } = it;\n    keyValues.push([E.keyword, keyword], [E.params, typeof params == \"function\" ? params(cxt) : params || (0, codegen_1._) `{}`]);\n    if (opts.messages) {\n        keyValues.push([E.message, typeof message == \"function\" ? message(cxt) : message]);\n    }\n    if (opts.verbose) {\n        keyValues.push([E.schema, schemaValue], [E.parentSchema, (0, codegen_1._) `${topSchemaRef}${schemaPath}`], [names_1.default.data, data]);\n    }\n    if (propertyName)\n        keyValues.push([E.propertyName, propertyName]);\n}\n//# sourceMappingURL=errors.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.boolOrEmptySchema = exports.topBoolOrEmptySchema = void 0;\nconst errors_1 = require(\"../errors\");\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst boolError = {\n    message: \"boolean schema is false\",\n};\nfunction topBoolOrEmptySchema(it) {\n    const { gen, schema, validateName } = it;\n    if (schema === false) {\n        falseSchemaError(it, false);\n    }\n    else if (typeof schema == \"object\" && schema.$async === true) {\n        gen.return(names_1.default.data);\n    }\n    else {\n        gen.assign((0, codegen_1._) `${validateName}.errors`, null);\n        gen.return(true);\n    }\n}\nexports.topBoolOrEmptySchema = topBoolOrEmptySchema;\nfunction boolOrEmptySchema(it, valid) {\n    const { gen, schema } = it;\n    if (schema === false) {\n        gen.var(valid, false); // TODO var\n        falseSchemaError(it);\n    }\n    else {\n        gen.var(valid, true); // TODO var\n    }\n}\nexports.boolOrEmptySchema = boolOrEmptySchema;\nfunction falseSchemaError(it, overrideAllErrors) {\n    const { gen, data } = it;\n    // TODO maybe some other interface should be used for non-keyword validation errors...\n    const cxt = {\n        gen,\n        keyword: \"false schema\",\n        data,\n        schema: false,\n        schemaCode: false,\n        schemaValue: false,\n        params: {},\n        it,\n    };\n    (0, errors_1.reportError)(cxt, boolError, undefined, overrideAllErrors);\n}\n//# sourceMappingURL=boolSchema.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRules = exports.isJSONType = void 0;\nconst _jsonTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"object\", \"array\"];\nconst jsonTypes = new Set(_jsonTypes);\nfunction isJSONType(x) {\n    return typeof x == \"string\" && jsonTypes.has(x);\n}\nexports.isJSONType = isJSONType;\nfunction getRules() {\n    const groups = {\n        number: { type: \"number\", rules: [] },\n        string: { type: \"string\", rules: [] },\n        array: { type: \"array\", rules: [] },\n        object: { type: \"object\", rules: [] },\n    };\n    return {\n        types: { ...groups, integer: true, boolean: true, null: true },\n        rules: [{ rules: [] }, groups.number, groups.string, groups.array, groups.object],\n        post: { rules: [] },\n        all: {},\n        keywords: {},\n    };\n}\nexports.getRules = getRules;\n//# sourceMappingURL=rules.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shouldUseRule = exports.shouldUseGroup = exports.schemaHasRulesForType = void 0;\nfunction schemaHasRulesForType({ schema, self }, type) {\n    const group = self.RULES.types[type];\n    return group && group !== true && shouldUseGroup(schema, group);\n}\nexports.schemaHasRulesForType = schemaHasRulesForType;\nfunction shouldUseGroup(schema, group) {\n    return group.rules.some((rule) => shouldUseRule(schema, rule));\n}\nexports.shouldUseGroup = shouldUseGroup;\nfunction shouldUseRule(schema, rule) {\n    var _a;\n    return (schema[rule.keyword] !== undefined ||\n        ((_a = rule.definition.implements) === null || _a === void 0 ? void 0 : _a.some((kwd) => schema[kwd] !== undefined)));\n}\nexports.shouldUseRule = shouldUseRule;\n//# sourceMappingURL=applicability.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reportTypeError = exports.checkDataTypes = exports.checkDataType = exports.coerceAndCheckDataType = exports.getJSONTypes = exports.getSchemaTypes = exports.DataType = void 0;\nconst rules_1 = require(\"../rules\");\nconst applicability_1 = require(\"./applicability\");\nconst errors_1 = require(\"../errors\");\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nvar DataType;\n(function (DataType) {\n    DataType[DataType[\"Correct\"] = 0] = \"Correct\";\n    DataType[DataType[\"Wrong\"] = 1] = \"Wrong\";\n})(DataType || (exports.DataType = DataType = {}));\nfunction getSchemaTypes(schema) {\n    const types = getJSONTypes(schema.type);\n    const hasNull = types.includes(\"null\");\n    if (hasNull) {\n        if (schema.nullable === false)\n            throw new Error(\"type: null contradicts nullable: false\");\n    }\n    else {\n        if (!types.length && schema.nullable !== undefined) {\n            throw new Error('\"nullable\" cannot be used without \"type\"');\n        }\n        if (schema.nullable === true)\n            types.push(\"null\");\n    }\n    return types;\n}\nexports.getSchemaTypes = getSchemaTypes;\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nfunction getJSONTypes(ts) {\n    const types = Array.isArray(ts) ? ts : ts ? [ts] : [];\n    if (types.every(rules_1.isJSONType))\n        return types;\n    throw new Error(\"type must be JSONType or JSONType[]: \" + types.join(\",\"));\n}\nexports.getJSONTypes = getJSONTypes;\nfunction coerceAndCheckDataType(it, types) {\n    const { gen, data, opts } = it;\n    const coerceTo = coerceToTypes(types, opts.coerceTypes);\n    const checkTypes = types.length > 0 &&\n        !(coerceTo.length === 0 && types.length === 1 && (0, applicability_1.schemaHasRulesForType)(it, types[0]));\n    if (checkTypes) {\n        const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong);\n        gen.if(wrongType, () => {\n            if (coerceTo.length)\n                coerceData(it, types, coerceTo);\n            else\n                reportTypeError(it);\n        });\n    }\n    return checkTypes;\n}\nexports.coerceAndCheckDataType = coerceAndCheckDataType;\nconst COERCIBLE = new Set([\"string\", \"number\", \"integer\", \"boolean\", \"null\"]);\nfunction coerceToTypes(types, coerceTypes) {\n    return coerceTypes\n        ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === \"array\" && t === \"array\"))\n        : [];\n}\nfunction coerceData(it, types, coerceTo) {\n    const { gen, data, opts } = it;\n    const dataType = gen.let(\"dataType\", (0, codegen_1._) `typeof ${data}`);\n    const coerced = gen.let(\"coerced\", (0, codegen_1._) `undefined`);\n    if (opts.coerceTypes === \"array\") {\n        gen.if((0, codegen_1._) `${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () => gen\n            .assign(data, (0, codegen_1._) `${data}[0]`)\n            .assign(dataType, (0, codegen_1._) `typeof ${data}`)\n            .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data)));\n    }\n    gen.if((0, codegen_1._) `${coerced} !== undefined`);\n    for (const t of coerceTo) {\n        if (COERCIBLE.has(t) || (t === \"array\" && opts.coerceTypes === \"array\")) {\n            coerceSpecificType(t);\n        }\n    }\n    gen.else();\n    reportTypeError(it);\n    gen.endIf();\n    gen.if((0, codegen_1._) `${coerced} !== undefined`, () => {\n        gen.assign(data, coerced);\n        assignParentData(it, coerced);\n    });\n    function coerceSpecificType(t) {\n        switch (t) {\n            case \"string\":\n                gen\n                    .elseIf((0, codegen_1._) `${dataType} == \"number\" || ${dataType} == \"boolean\"`)\n                    .assign(coerced, (0, codegen_1._) `\"\" + ${data}`)\n                    .elseIf((0, codegen_1._) `${data} === null`)\n                    .assign(coerced, (0, codegen_1._) `\"\"`);\n                return;\n            case \"number\":\n                gen\n                    .elseIf((0, codegen_1._) `${dataType} == \"boolean\" || ${data} === null\n              || (${dataType} == \"string\" && ${data} && ${data} == +${data})`)\n                    .assign(coerced, (0, codegen_1._) `+${data}`);\n                return;\n            case \"integer\":\n                gen\n                    .elseIf((0, codegen_1._) `${dataType} === \"boolean\" || ${data} === null\n              || (${dataType} === \"string\" && ${data} && ${data} == +${data} && !(${data} % 1))`)\n                    .assign(coerced, (0, codegen_1._) `+${data}`);\n                return;\n            case \"boolean\":\n                gen\n                    .elseIf((0, codegen_1._) `${data} === \"false\" || ${data} === 0 || ${data} === null`)\n                    .assign(coerced, false)\n                    .elseIf((0, codegen_1._) `${data} === \"true\" || ${data} === 1`)\n                    .assign(coerced, true);\n                return;\n            case \"null\":\n                gen.elseIf((0, codegen_1._) `${data} === \"\" || ${data} === 0 || ${data} === false`);\n                gen.assign(coerced, null);\n                return;\n            case \"array\":\n                gen\n                    .elseIf((0, codegen_1._) `${dataType} === \"string\" || ${dataType} === \"number\"\n              || ${dataType} === \"boolean\" || ${data} === null`)\n                    .assign(coerced, (0, codegen_1._) `[${data}]`);\n        }\n    }\n}\nfunction assignParentData({ gen, parentData, parentDataProperty }, expr) {\n    // TODO use gen.property\n    gen.if((0, codegen_1._) `${parentData} !== undefined`, () => gen.assign((0, codegen_1._) `${parentData}[${parentDataProperty}]`, expr));\n}\nfunction checkDataType(dataType, data, strictNums, correct = DataType.Correct) {\n    const EQ = correct === DataType.Correct ? codegen_1.operators.EQ : codegen_1.operators.NEQ;\n    let cond;\n    switch (dataType) {\n        case \"null\":\n            return (0, codegen_1._) `${data} ${EQ} null`;\n        case \"array\":\n            cond = (0, codegen_1._) `Array.isArray(${data})`;\n            break;\n        case \"object\":\n            cond = (0, codegen_1._) `${data} && typeof ${data} == \"object\" && !Array.isArray(${data})`;\n            break;\n        case \"integer\":\n            cond = numCond((0, codegen_1._) `!(${data} % 1) && !isNaN(${data})`);\n            break;\n        case \"number\":\n            cond = numCond();\n            break;\n        default:\n            return (0, codegen_1._) `typeof ${data} ${EQ} ${dataType}`;\n    }\n    return correct === DataType.Correct ? cond : (0, codegen_1.not)(cond);\n    function numCond(_cond = codegen_1.nil) {\n        return (0, codegen_1.and)((0, codegen_1._) `typeof ${data} == \"number\"`, _cond, strictNums ? (0, codegen_1._) `isFinite(${data})` : codegen_1.nil);\n    }\n}\nexports.checkDataType = checkDataType;\nfunction checkDataTypes(dataTypes, data, strictNums, correct) {\n    if (dataTypes.length === 1) {\n        return checkDataType(dataTypes[0], data, strictNums, correct);\n    }\n    let cond;\n    const types = (0, util_1.toHash)(dataTypes);\n    if (types.array && types.object) {\n        const notObj = (0, codegen_1._) `typeof ${data} != \"object\"`;\n        cond = types.null ? notObj : (0, codegen_1._) `!${data} || ${notObj}`;\n        delete types.null;\n        delete types.array;\n        delete types.object;\n    }\n    else {\n        cond = codegen_1.nil;\n    }\n    if (types.number)\n        delete types.integer;\n    for (const t in types)\n        cond = (0, codegen_1.and)(cond, checkDataType(t, data, strictNums, correct));\n    return cond;\n}\nexports.checkDataTypes = checkDataTypes;\nconst typeError = {\n    message: ({ schema }) => `must be ${schema}`,\n    params: ({ schema, schemaValue }) => typeof schema == \"string\" ? (0, codegen_1._) `{type: ${schema}}` : (0, codegen_1._) `{type: ${schemaValue}}`,\n};\nfunction reportTypeError(it) {\n    const cxt = getTypeErrorContext(it);\n    (0, errors_1.reportError)(cxt, typeError);\n}\nexports.reportTypeError = reportTypeError;\nfunction getTypeErrorContext(it) {\n    const { gen, data, schema } = it;\n    const schemaCode = (0, util_1.schemaRefOrVal)(it, schema, \"type\");\n    return {\n        gen,\n        keyword: \"type\",\n        data,\n        schema: schema.type,\n        schemaCode,\n        schemaValue: schemaCode,\n        parentSchema: schema,\n        params: {},\n        it,\n    };\n}\n//# sourceMappingURL=dataType.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.assignDefaults = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nfunction assignDefaults(it, ty) {\n    const { properties, items } = it.schema;\n    if (ty === \"object\" && properties) {\n        for (const key in properties) {\n            assignDefault(it, key, properties[key].default);\n        }\n    }\n    else if (ty === \"array\" && Array.isArray(items)) {\n        items.forEach((sch, i) => assignDefault(it, i, sch.default));\n    }\n}\nexports.assignDefaults = assignDefaults;\nfunction assignDefault(it, prop, defaultValue) {\n    const { gen, compositeRule, data, opts } = it;\n    if (defaultValue === undefined)\n        return;\n    const childData = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(prop)}`;\n    if (compositeRule) {\n        (0, util_1.checkStrictMode)(it, `default is ignored for: ${childData}`);\n        return;\n    }\n    let condition = (0, codegen_1._) `${childData} === undefined`;\n    if (opts.useDefaults === \"empty\") {\n        condition = (0, codegen_1._) `${condition} || ${childData} === null || ${childData} === \"\"`;\n    }\n    // `${childData} === undefined` +\n    // (opts.useDefaults === \"empty\" ? ` || ${childData} === null || ${childData} === \"\"` : \"\")\n    gen.if(condition, (0, codegen_1._) `${childData} = ${(0, codegen_1.stringify)(defaultValue)}`);\n}\n//# sourceMappingURL=defaults.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateUnion = exports.validateArray = exports.usePattern = exports.callValidateCode = exports.schemaProperties = exports.allSchemaProperties = exports.noPropertyInData = exports.propertyInData = exports.isOwnProperty = exports.hasPropFunc = exports.reportMissingProp = exports.checkMissingProp = exports.checkReportMissingProp = void 0;\nconst codegen_1 = require(\"../compile/codegen\");\nconst util_1 = require(\"../compile/util\");\nconst names_1 = require(\"../compile/names\");\nconst util_2 = require(\"../compile/util\");\nfunction checkReportMissingProp(cxt, prop) {\n    const { gen, data, it } = cxt;\n    gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => {\n        cxt.setParams({ missingProperty: (0, codegen_1._) `${prop}` }, true);\n        cxt.error();\n    });\n}\nexports.checkReportMissingProp = checkReportMissingProp;\nfunction checkMissingProp({ gen, data, it: { opts } }, properties, missing) {\n    return (0, codegen_1.or)(...properties.map((prop) => (0, codegen_1.and)(noPropertyInData(gen, data, prop, opts.ownProperties), (0, codegen_1._) `${missing} = ${prop}`)));\n}\nexports.checkMissingProp = checkMissingProp;\nfunction reportMissingProp(cxt, missing) {\n    cxt.setParams({ missingProperty: missing }, true);\n    cxt.error();\n}\nexports.reportMissingProp = reportMissingProp;\nfunction hasPropFunc(gen) {\n    return gen.scopeValue(\"func\", {\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        ref: Object.prototype.hasOwnProperty,\n        code: (0, codegen_1._) `Object.prototype.hasOwnProperty`,\n    });\n}\nexports.hasPropFunc = hasPropFunc;\nfunction isOwnProperty(gen, data, property) {\n    return (0, codegen_1._) `${hasPropFunc(gen)}.call(${data}, ${property})`;\n}\nexports.isOwnProperty = isOwnProperty;\nfunction propertyInData(gen, data, property, ownProperties) {\n    const cond = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(property)} !== undefined`;\n    return ownProperties ? (0, codegen_1._) `${cond} && ${isOwnProperty(gen, data, property)}` : cond;\n}\nexports.propertyInData = propertyInData;\nfunction noPropertyInData(gen, data, property, ownProperties) {\n    const cond = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(property)} === undefined`;\n    return ownProperties ? (0, codegen_1.or)(cond, (0, codegen_1.not)(isOwnProperty(gen, data, property))) : cond;\n}\nexports.noPropertyInData = noPropertyInData;\nfunction allSchemaProperties(schemaMap) {\n    return schemaMap ? Object.keys(schemaMap).filter((p) => p !== \"__proto__\") : [];\n}\nexports.allSchemaProperties = allSchemaProperties;\nfunction schemaProperties(it, schemaMap) {\n    return allSchemaProperties(schemaMap).filter((p) => !(0, util_1.alwaysValidSchema)(it, schemaMap[p]));\n}\nexports.schemaProperties = schemaProperties;\nfunction callValidateCode({ schemaCode, data, it: { gen, topSchemaRef, schemaPath, errorPath }, it }, func, context, passSchema) {\n    const dataAndSchema = passSchema ? (0, codegen_1._) `${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data;\n    const valCxt = [\n        [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, errorPath)],\n        [names_1.default.parentData, it.parentData],\n        [names_1.default.parentDataProperty, it.parentDataProperty],\n        [names_1.default.rootData, names_1.default.rootData],\n    ];\n    if (it.opts.dynamicRef)\n        valCxt.push([names_1.default.dynamicAnchors, names_1.default.dynamicAnchors]);\n    const args = (0, codegen_1._) `${dataAndSchema}, ${gen.object(...valCxt)}`;\n    return context !== codegen_1.nil ? (0, codegen_1._) `${func}.call(${context}, ${args})` : (0, codegen_1._) `${func}(${args})`;\n}\nexports.callValidateCode = callValidateCode;\nconst newRegExp = (0, codegen_1._) `new RegExp`;\nfunction usePattern({ gen, it: { opts } }, pattern) {\n    const u = opts.unicodeRegExp ? \"u\" : \"\";\n    const { regExp } = opts.code;\n    const rx = regExp(pattern, u);\n    return gen.scopeValue(\"pattern\", {\n        key: rx.toString(),\n        ref: rx,\n        code: (0, codegen_1._) `${regExp.code === \"new RegExp\" ? newRegExp : (0, util_2.useFunc)(gen, regExp)}(${pattern}, ${u})`,\n    });\n}\nexports.usePattern = usePattern;\nfunction validateArray(cxt) {\n    const { gen, data, keyword, it } = cxt;\n    const valid = gen.name(\"valid\");\n    if (it.allErrors) {\n        const validArr = gen.let(\"valid\", true);\n        validateItems(() => gen.assign(validArr, false));\n        return validArr;\n    }\n    gen.var(valid, true);\n    validateItems(() => gen.break());\n    return valid;\n    function validateItems(notValid) {\n        const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n        gen.forRange(\"i\", 0, len, (i) => {\n            cxt.subschema({\n                keyword,\n                dataProp: i,\n                dataPropType: util_1.Type.Num,\n            }, valid);\n            gen.if((0, codegen_1.not)(valid), notValid);\n        });\n    }\n}\nexports.validateArray = validateArray;\nfunction validateUnion(cxt) {\n    const { gen, schema, keyword, it } = cxt;\n    /* istanbul ignore if */\n    if (!Array.isArray(schema))\n        throw new Error(\"ajv implementation error\");\n    const alwaysValid = schema.some((sch) => (0, util_1.alwaysValidSchema)(it, sch));\n    if (alwaysValid && !it.opts.unevaluated)\n        return;\n    const valid = gen.let(\"valid\", false);\n    const schValid = gen.name(\"_valid\");\n    gen.block(() => schema.forEach((_sch, i) => {\n        const schCxt = cxt.subschema({\n            keyword,\n            schemaProp: i,\n            compositeRule: true,\n        }, schValid);\n        gen.assign(valid, (0, codegen_1._) `${valid} || ${schValid}`);\n        const merged = cxt.mergeValidEvaluated(schCxt, schValid);\n        // can short-circuit if `unevaluatedProperties/Items` not supported (opts.unevaluated !== true)\n        // or if all properties and items were evaluated (it.props === true && it.items === true)\n        if (!merged)\n            gen.if((0, codegen_1.not)(valid));\n    }));\n    cxt.result(valid, () => cxt.reset(), () => cxt.error(true));\n}\nexports.validateUnion = validateUnion;\n//# sourceMappingURL=code.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateKeywordUsage = exports.validSchemaType = exports.funcKeywordCode = exports.macroKeywordCode = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst code_1 = require(\"../../vocabularies/code\");\nconst errors_1 = require(\"../errors\");\nfunction macroKeywordCode(cxt, def) {\n    const { gen, keyword, schema, parentSchema, it } = cxt;\n    const macroSchema = def.macro.call(it.self, schema, parentSchema, it);\n    const schemaRef = useKeyword(gen, keyword, macroSchema);\n    if (it.opts.validateSchema !== false)\n        it.self.validateSchema(macroSchema, true);\n    const valid = gen.name(\"valid\");\n    cxt.subschema({\n        schema: macroSchema,\n        schemaPath: codegen_1.nil,\n        errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n        topSchemaRef: schemaRef,\n        compositeRule: true,\n    }, valid);\n    cxt.pass(valid, () => cxt.error(true));\n}\nexports.macroKeywordCode = macroKeywordCode;\nfunction funcKeywordCode(cxt, def) {\n    var _a;\n    const { gen, keyword, schema, parentSchema, $data, it } = cxt;\n    checkAsyncKeyword(it, def);\n    const validate = !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate;\n    const validateRef = useKeyword(gen, keyword, validate);\n    const valid = gen.let(\"valid\");\n    cxt.block$data(valid, validateKeyword);\n    cxt.ok((_a = def.valid) !== null && _a !== void 0 ? _a : valid);\n    function validateKeyword() {\n        if (def.errors === false) {\n            assignValid();\n            if (def.modifying)\n                modifyData(cxt);\n            reportErrs(() => cxt.error());\n        }\n        else {\n            const ruleErrs = def.async ? validateAsync() : validateSync();\n            if (def.modifying)\n                modifyData(cxt);\n            reportErrs(() => addErrs(cxt, ruleErrs));\n        }\n    }\n    function validateAsync() {\n        const ruleErrs = gen.let(\"ruleErrs\", null);\n        gen.try(() => assignValid((0, codegen_1._) `await `), (e) => gen.assign(valid, false).if((0, codegen_1._) `${e} instanceof ${it.ValidationError}`, () => gen.assign(ruleErrs, (0, codegen_1._) `${e}.errors`), () => gen.throw(e)));\n        return ruleErrs;\n    }\n    function validateSync() {\n        const validateErrs = (0, codegen_1._) `${validateRef}.errors`;\n        gen.assign(validateErrs, null);\n        assignValid(codegen_1.nil);\n        return validateErrs;\n    }\n    function assignValid(_await = def.async ? (0, codegen_1._) `await ` : codegen_1.nil) {\n        const passCxt = it.opts.passContext ? names_1.default.this : names_1.default.self;\n        const passSchema = !((\"compile\" in def && !$data) || def.schema === false);\n        gen.assign(valid, (0, codegen_1._) `${_await}${(0, code_1.callValidateCode)(cxt, validateRef, passCxt, passSchema)}`, def.modifying);\n    }\n    function reportErrs(errors) {\n        var _a;\n        gen.if((0, codegen_1.not)((_a = def.valid) !== null && _a !== void 0 ? _a : valid), errors);\n    }\n}\nexports.funcKeywordCode = funcKeywordCode;\nfunction modifyData(cxt) {\n    const { gen, data, it } = cxt;\n    gen.if(it.parentData, () => gen.assign(data, (0, codegen_1._) `${it.parentData}[${it.parentDataProperty}]`));\n}\nfunction addErrs(cxt, errs) {\n    const { gen } = cxt;\n    gen.if((0, codegen_1._) `Array.isArray(${errs})`, () => {\n        gen\n            .assign(names_1.default.vErrors, (0, codegen_1._) `${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`)\n            .assign(names_1.default.errors, (0, codegen_1._) `${names_1.default.vErrors}.length`);\n        (0, errors_1.extendErrors)(cxt);\n    }, () => cxt.error());\n}\nfunction checkAsyncKeyword({ schemaEnv }, def) {\n    if (def.async && !schemaEnv.$async)\n        throw new Error(\"async keyword in sync schema\");\n}\nfunction useKeyword(gen, keyword, result) {\n    if (result === undefined)\n        throw new Error(`keyword \"${keyword}\" failed to compile`);\n    return gen.scopeValue(\"keyword\", typeof result == \"function\" ? { ref: result } : { ref: result, code: (0, codegen_1.stringify)(result) });\n}\nfunction validSchemaType(schema, schemaType, allowUndefined = false) {\n    // TODO add tests\n    return (!schemaType.length ||\n        schemaType.some((st) => st === \"array\"\n            ? Array.isArray(schema)\n            : st === \"object\"\n                ? schema && typeof schema == \"object\" && !Array.isArray(schema)\n                : typeof schema == st || (allowUndefined && typeof schema == \"undefined\")));\n}\nexports.validSchemaType = validSchemaType;\nfunction validateKeywordUsage({ schema, opts, self, errSchemaPath }, def, keyword) {\n    /* istanbul ignore if */\n    if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) {\n        throw new Error(\"ajv implementation error\");\n    }\n    const deps = def.dependencies;\n    if (deps === null || deps === void 0 ? void 0 : deps.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) {\n        throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(\",\")}`);\n    }\n    if (def.validateSchema) {\n        const valid = def.validateSchema(schema[keyword]);\n        if (!valid) {\n            const msg = `keyword \"${keyword}\" value is invalid at path \"${errSchemaPath}\": ` +\n                self.errorsText(def.validateSchema.errors);\n            if (opts.validateSchema === \"log\")\n                self.logger.error(msg);\n            else\n                throw new Error(msg);\n        }\n    }\n}\nexports.validateKeywordUsage = validateKeywordUsage;\n//# sourceMappingURL=keyword.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extendSubschemaMode = exports.extendSubschemaData = exports.getSubschema = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nfunction getSubschema(it, { keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef }) {\n    if (keyword !== undefined && schema !== undefined) {\n        throw new Error('both \"keyword\" and \"schema\" passed, only one allowed');\n    }\n    if (keyword !== undefined) {\n        const sch = it.schema[keyword];\n        return schemaProp === undefined\n            ? {\n                schema: sch,\n                schemaPath: (0, codegen_1._) `${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}`,\n                errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n            }\n            : {\n                schema: sch[schemaProp],\n                schemaPath: (0, codegen_1._) `${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}${(0, codegen_1.getProperty)(schemaProp)}`,\n                errSchemaPath: `${it.errSchemaPath}/${keyword}/${(0, util_1.escapeFragment)(schemaProp)}`,\n            };\n    }\n    if (schema !== undefined) {\n        if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) {\n            throw new Error('\"schemaPath\", \"errSchemaPath\" and \"topSchemaRef\" are required with \"schema\"');\n        }\n        return {\n            schema,\n            schemaPath,\n            topSchemaRef,\n            errSchemaPath,\n        };\n    }\n    throw new Error('either \"keyword\" or \"schema\" must be passed');\n}\nexports.getSubschema = getSubschema;\nfunction extendSubschemaData(subschema, it, { dataProp, dataPropType: dpType, data, dataTypes, propertyName }) {\n    if (data !== undefined && dataProp !== undefined) {\n        throw new Error('both \"data\" and \"dataProp\" passed, only one allowed');\n    }\n    const { gen } = it;\n    if (dataProp !== undefined) {\n        const { errorPath, dataPathArr, opts } = it;\n        const nextData = gen.let(\"data\", (0, codegen_1._) `${it.data}${(0, codegen_1.getProperty)(dataProp)}`, true);\n        dataContextProps(nextData);\n        subschema.errorPath = (0, codegen_1.str) `${errorPath}${(0, util_1.getErrorPath)(dataProp, dpType, opts.jsPropertySyntax)}`;\n        subschema.parentDataProperty = (0, codegen_1._) `${dataProp}`;\n        subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty];\n    }\n    if (data !== undefined) {\n        const nextData = data instanceof codegen_1.Name ? data : gen.let(\"data\", data, true); // replaceable if used once?\n        dataContextProps(nextData);\n        if (propertyName !== undefined)\n            subschema.propertyName = propertyName;\n        // TODO something is possibly wrong here with not changing parentDataProperty and not appending dataPathArr\n    }\n    if (dataTypes)\n        subschema.dataTypes = dataTypes;\n    function dataContextProps(_nextData) {\n        subschema.data = _nextData;\n        subschema.dataLevel = it.dataLevel + 1;\n        subschema.dataTypes = [];\n        it.definedProperties = new Set();\n        subschema.parentData = it.data;\n        subschema.dataNames = [...it.dataNames, _nextData];\n    }\n}\nexports.extendSubschemaData = extendSubschemaData;\nfunction extendSubschemaMode(subschema, { jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors }) {\n    if (compositeRule !== undefined)\n        subschema.compositeRule = compositeRule;\n    if (createErrors !== undefined)\n        subschema.createErrors = createErrors;\n    if (allErrors !== undefined)\n        subschema.allErrors = allErrors;\n    subschema.jtdDiscriminator = jtdDiscriminator; // not inherited\n    subschema.jtdMetadata = jtdMetadata; // not inherited\n}\nexports.extendSubschemaMode = extendSubschemaMode;\n//# sourceMappingURL=subschema.js.map", "'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n", "'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n  // Legacy support for v0.3.1 and earlier.\n  if (typeof opts == 'function') {\n    cb = opts;\n    opts = {};\n  }\n\n  cb = opts.cb || cb;\n  var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n  var post = cb.post || function() {};\n\n  _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n  additionalItems: true,\n  items: true,\n  contains: true,\n  additionalProperties: true,\n  propertyNames: true,\n  not: true,\n  if: true,\n  then: true,\n  else: true\n};\n\ntraverse.arrayKeywords = {\n  items: true,\n  allOf: true,\n  anyOf: true,\n  oneOf: true\n};\n\ntraverse.propsKeywords = {\n  $defs: true,\n  definitions: true,\n  properties: true,\n  patternProperties: true,\n  dependencies: true\n};\n\ntraverse.skipKeywords = {\n  default: true,\n  enum: true,\n  const: true,\n  required: true,\n  maximum: true,\n  minimum: true,\n  exclusiveMaximum: true,\n  exclusiveMinimum: true,\n  multipleOf: true,\n  maxLength: true,\n  minLength: true,\n  pattern: true,\n  format: true,\n  maxItems: true,\n  minItems: true,\n  uniqueItems: true,\n  maxProperties: true,\n  minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n  if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n    pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n    for (var key in schema) {\n      var sch = schema[key];\n      if (Array.isArray(sch)) {\n        if (key in traverse.arrayKeywords) {\n          for (var i=0; i<sch.length; i++)\n            _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);\n        }\n      } else if (key in traverse.propsKeywords) {\n        if (sch && typeof sch == 'object') {\n          for (var prop in sch)\n            _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);\n        }\n      } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {\n        _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);\n      }\n    }\n    post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n  }\n}\n\n\nfunction escapeJsonPtr(str) {\n  return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getSchemaRefs = exports.resolveUrl = exports.normalizeId = exports._getFullPath = exports.getFullPath = exports.inlineRef = void 0;\nconst util_1 = require(\"./util\");\nconst equal = require(\"fast-deep-equal\");\nconst traverse = require(\"json-schema-traverse\");\n// TODO refactor to use keyword definitions\nconst SIMPLE_INLINED = new Set([\n    \"type\",\n    \"format\",\n    \"pattern\",\n    \"maxLength\",\n    \"minLength\",\n    \"maxProperties\",\n    \"minProperties\",\n    \"maxItems\",\n    \"minItems\",\n    \"maximum\",\n    \"minimum\",\n    \"uniqueItems\",\n    \"multipleOf\",\n    \"required\",\n    \"enum\",\n    \"const\",\n]);\nfunction inlineRef(schema, limit = true) {\n    if (typeof schema == \"boolean\")\n        return true;\n    if (limit === true)\n        return !hasRef(schema);\n    if (!limit)\n        return false;\n    return countKeys(schema) <= limit;\n}\nexports.inlineRef = inlineRef;\nconst REF_KEYWORDS = new Set([\n    \"$ref\",\n    \"$recursiveRef\",\n    \"$recursiveAnchor\",\n    \"$dynamicRef\",\n    \"$dynamicAnchor\",\n]);\nfunction hasRef(schema) {\n    for (const key in schema) {\n        if (REF_KEYWORDS.has(key))\n            return true;\n        const sch = schema[key];\n        if (Array.isArray(sch) && sch.some(hasRef))\n            return true;\n        if (typeof sch == \"object\" && hasRef(sch))\n            return true;\n    }\n    return false;\n}\nfunction countKeys(schema) {\n    let count = 0;\n    for (const key in schema) {\n        if (key === \"$ref\")\n            return Infinity;\n        count++;\n        if (SIMPLE_INLINED.has(key))\n            continue;\n        if (typeof schema[key] == \"object\") {\n            (0, util_1.eachItem)(schema[key], (sch) => (count += countKeys(sch)));\n        }\n        if (count === Infinity)\n            return Infinity;\n    }\n    return count;\n}\nfunction getFullPath(resolver, id = \"\", normalize) {\n    if (normalize !== false)\n        id = normalizeId(id);\n    const p = resolver.parse(id);\n    return _getFullPath(resolver, p);\n}\nexports.getFullPath = getFullPath;\nfunction _getFullPath(resolver, p) {\n    const serialized = resolver.serialize(p);\n    return serialized.split(\"#\")[0] + \"#\";\n}\nexports._getFullPath = _getFullPath;\nconst TRAILING_SLASH_HASH = /#\\/?$/;\nfunction normalizeId(id) {\n    return id ? id.replace(TRAILING_SLASH_HASH, \"\") : \"\";\n}\nexports.normalizeId = normalizeId;\nfunction resolveUrl(resolver, baseId, id) {\n    id = normalizeId(id);\n    return resolver.resolve(baseId, id);\n}\nexports.resolveUrl = resolveUrl;\nconst ANCHOR = /^[a-z_][-a-z0-9._]*$/i;\nfunction getSchemaRefs(schema, baseId) {\n    if (typeof schema == \"boolean\")\n        return {};\n    const { schemaId, uriResolver } = this.opts;\n    const schId = normalizeId(schema[schemaId] || baseId);\n    const baseIds = { \"\": schId };\n    const pathPrefix = getFullPath(uriResolver, schId, false);\n    const localRefs = {};\n    const schemaRefs = new Set();\n    traverse(schema, { allKeys: true }, (sch, jsonPtr, _, parentJsonPtr) => {\n        if (parentJsonPtr === undefined)\n            return;\n        const fullPath = pathPrefix + jsonPtr;\n        let innerBaseId = baseIds[parentJsonPtr];\n        if (typeof sch[schemaId] == \"string\")\n            innerBaseId = addRef.call(this, sch[schemaId]);\n        addAnchor.call(this, sch.$anchor);\n        addAnchor.call(this, sch.$dynamicAnchor);\n        baseIds[jsonPtr] = innerBaseId;\n        function addRef(ref) {\n            // eslint-disable-next-line @typescript-eslint/unbound-method\n            const _resolve = this.opts.uriResolver.resolve;\n            ref = normalizeId(innerBaseId ? _resolve(innerBaseId, ref) : ref);\n            if (schemaRefs.has(ref))\n                throw ambiguos(ref);\n            schemaRefs.add(ref);\n            let schOrRef = this.refs[ref];\n            if (typeof schOrRef == \"string\")\n                schOrRef = this.refs[schOrRef];\n            if (typeof schOrRef == \"object\") {\n                checkAmbiguosRef(sch, schOrRef.schema, ref);\n            }\n            else if (ref !== normalizeId(fullPath)) {\n                if (ref[0] === \"#\") {\n                    checkAmbiguosRef(sch, localRefs[ref], ref);\n                    localRefs[ref] = sch;\n                }\n                else {\n                    this.refs[ref] = fullPath;\n                }\n            }\n            return ref;\n        }\n        function addAnchor(anchor) {\n            if (typeof anchor == \"string\") {\n                if (!ANCHOR.test(anchor))\n                    throw new Error(`invalid anchor \"${anchor}\"`);\n                addRef.call(this, `#${anchor}`);\n            }\n        }\n    });\n    return localRefs;\n    function checkAmbiguosRef(sch1, sch2, ref) {\n        if (sch2 !== undefined && !equal(sch1, sch2))\n            throw ambiguos(ref);\n    }\n    function ambiguos(ref) {\n        return new Error(`reference \"${ref}\" resolves to more than one schema`);\n    }\n}\nexports.getSchemaRefs = getSchemaRefs;\n//# sourceMappingURL=resolve.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getData = exports.KeywordCxt = exports.validateFunctionCode = void 0;\nconst boolSchema_1 = require(\"./boolSchema\");\nconst dataType_1 = require(\"./dataType\");\nconst applicability_1 = require(\"./applicability\");\nconst dataType_2 = require(\"./dataType\");\nconst defaults_1 = require(\"./defaults\");\nconst keyword_1 = require(\"./keyword\");\nconst subschema_1 = require(\"./subschema\");\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst resolve_1 = require(\"../resolve\");\nconst util_1 = require(\"../util\");\nconst errors_1 = require(\"../errors\");\n// schema compilation - generates validation function, subschemaCode (below) is used for subschemas\nfunction validateFunctionCode(it) {\n    if (isSchemaObj(it)) {\n        checkKeywords(it);\n        if (schemaCxtHasRules(it)) {\n            topSchemaObjCode(it);\n            return;\n        }\n    }\n    validateFunction(it, () => (0, boolSchema_1.topBoolOrEmptySchema)(it));\n}\nexports.validateFunctionCode = validateFunctionCode;\nfunction validateFunction({ gen, validateName, schema, schemaEnv, opts }, body) {\n    if (opts.code.es5) {\n        gen.func(validateName, (0, codegen_1._) `${names_1.default.data}, ${names_1.default.valCxt}`, schemaEnv.$async, () => {\n            gen.code((0, codegen_1._) `\"use strict\"; ${funcSourceUrl(schema, opts)}`);\n            destructureValCxtES5(gen, opts);\n            gen.code(body);\n        });\n    }\n    else {\n        gen.func(validateName, (0, codegen_1._) `${names_1.default.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () => gen.code(funcSourceUrl(schema, opts)).code(body));\n    }\n}\nfunction destructureValCxt(opts) {\n    return (0, codegen_1._) `{${names_1.default.instancePath}=\"\", ${names_1.default.parentData}, ${names_1.default.parentDataProperty}, ${names_1.default.rootData}=${names_1.default.data}${opts.dynamicRef ? (0, codegen_1._) `, ${names_1.default.dynamicAnchors}={}` : codegen_1.nil}}={}`;\n}\nfunction destructureValCxtES5(gen, opts) {\n    gen.if(names_1.default.valCxt, () => {\n        gen.var(names_1.default.instancePath, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.instancePath}`);\n        gen.var(names_1.default.parentData, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.parentData}`);\n        gen.var(names_1.default.parentDataProperty, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.parentDataProperty}`);\n        gen.var(names_1.default.rootData, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.rootData}`);\n        if (opts.dynamicRef)\n            gen.var(names_1.default.dynamicAnchors, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.dynamicAnchors}`);\n    }, () => {\n        gen.var(names_1.default.instancePath, (0, codegen_1._) `\"\"`);\n        gen.var(names_1.default.parentData, (0, codegen_1._) `undefined`);\n        gen.var(names_1.default.parentDataProperty, (0, codegen_1._) `undefined`);\n        gen.var(names_1.default.rootData, names_1.default.data);\n        if (opts.dynamicRef)\n            gen.var(names_1.default.dynamicAnchors, (0, codegen_1._) `{}`);\n    });\n}\nfunction topSchemaObjCode(it) {\n    const { schema, opts, gen } = it;\n    validateFunction(it, () => {\n        if (opts.$comment && schema.$comment)\n            commentKeyword(it);\n        checkNoDefault(it);\n        gen.let(names_1.default.vErrors, null);\n        gen.let(names_1.default.errors, 0);\n        if (opts.unevaluated)\n            resetEvaluated(it);\n        typeAndKeywords(it);\n        returnResults(it);\n    });\n    return;\n}\nfunction resetEvaluated(it) {\n    // TODO maybe some hook to execute it in the end to check whether props/items are Name, as in assignEvaluated\n    const { gen, validateName } = it;\n    it.evaluated = gen.const(\"evaluated\", (0, codegen_1._) `${validateName}.evaluated`);\n    gen.if((0, codegen_1._) `${it.evaluated}.dynamicProps`, () => gen.assign((0, codegen_1._) `${it.evaluated}.props`, (0, codegen_1._) `undefined`));\n    gen.if((0, codegen_1._) `${it.evaluated}.dynamicItems`, () => gen.assign((0, codegen_1._) `${it.evaluated}.items`, (0, codegen_1._) `undefined`));\n}\nfunction funcSourceUrl(schema, opts) {\n    const schId = typeof schema == \"object\" && schema[opts.schemaId];\n    return schId && (opts.code.source || opts.code.process) ? (0, codegen_1._) `/*# sourceURL=${schId} */` : codegen_1.nil;\n}\n// schema compilation - this function is used recursively to generate code for sub-schemas\nfunction subschemaCode(it, valid) {\n    if (isSchemaObj(it)) {\n        checkKeywords(it);\n        if (schemaCxtHasRules(it)) {\n            subSchemaObjCode(it, valid);\n            return;\n        }\n    }\n    (0, boolSchema_1.boolOrEmptySchema)(it, valid);\n}\nfunction schemaCxtHasRules({ schema, self }) {\n    if (typeof schema == \"boolean\")\n        return !schema;\n    for (const key in schema)\n        if (self.RULES.all[key])\n            return true;\n    return false;\n}\nfunction isSchemaObj(it) {\n    return typeof it.schema != \"boolean\";\n}\nfunction subSchemaObjCode(it, valid) {\n    const { schema, gen, opts } = it;\n    if (opts.$comment && schema.$comment)\n        commentKeyword(it);\n    updateContext(it);\n    checkAsyncSchema(it);\n    const errsCount = gen.const(\"_errs\", names_1.default.errors);\n    typeAndKeywords(it, errsCount);\n    // TODO var\n    gen.var(valid, (0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n}\nfunction checkKeywords(it) {\n    (0, util_1.checkUnknownRules)(it);\n    checkRefsAndKeywords(it);\n}\nfunction typeAndKeywords(it, errsCount) {\n    if (it.opts.jtd)\n        return schemaKeywords(it, [], false, errsCount);\n    const types = (0, dataType_1.getSchemaTypes)(it.schema);\n    const checkedTypes = (0, dataType_1.coerceAndCheckDataType)(it, types);\n    schemaKeywords(it, types, !checkedTypes, errsCount);\n}\nfunction checkRefsAndKeywords(it) {\n    const { schema, errSchemaPath, opts, self } = it;\n    if (schema.$ref && opts.ignoreKeywordsWithRef && (0, util_1.schemaHasRulesButRef)(schema, self.RULES)) {\n        self.logger.warn(`$ref: keywords ignored in schema at path \"${errSchemaPath}\"`);\n    }\n}\nfunction checkNoDefault(it) {\n    const { schema, opts } = it;\n    if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) {\n        (0, util_1.checkStrictMode)(it, \"default is ignored in the schema root\");\n    }\n}\nfunction updateContext(it) {\n    const schId = it.schema[it.opts.schemaId];\n    if (schId)\n        it.baseId = (0, resolve_1.resolveUrl)(it.opts.uriResolver, it.baseId, schId);\n}\nfunction checkAsyncSchema(it) {\n    if (it.schema.$async && !it.schemaEnv.$async)\n        throw new Error(\"async schema in sync schema\");\n}\nfunction commentKeyword({ gen, schemaEnv, schema, errSchemaPath, opts }) {\n    const msg = schema.$comment;\n    if (opts.$comment === true) {\n        gen.code((0, codegen_1._) `${names_1.default.self}.logger.log(${msg})`);\n    }\n    else if (typeof opts.$comment == \"function\") {\n        const schemaPath = (0, codegen_1.str) `${errSchemaPath}/$comment`;\n        const rootName = gen.scopeValue(\"root\", { ref: schemaEnv.root });\n        gen.code((0, codegen_1._) `${names_1.default.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`);\n    }\n}\nfunction returnResults(it) {\n    const { gen, schemaEnv, validateName, ValidationError, opts } = it;\n    if (schemaEnv.$async) {\n        // TODO assign unevaluated\n        gen.if((0, codegen_1._) `${names_1.default.errors} === 0`, () => gen.return(names_1.default.data), () => gen.throw((0, codegen_1._) `new ${ValidationError}(${names_1.default.vErrors})`));\n    }\n    else {\n        gen.assign((0, codegen_1._) `${validateName}.errors`, names_1.default.vErrors);\n        if (opts.unevaluated)\n            assignEvaluated(it);\n        gen.return((0, codegen_1._) `${names_1.default.errors} === 0`);\n    }\n}\nfunction assignEvaluated({ gen, evaluated, props, items }) {\n    if (props instanceof codegen_1.Name)\n        gen.assign((0, codegen_1._) `${evaluated}.props`, props);\n    if (items instanceof codegen_1.Name)\n        gen.assign((0, codegen_1._) `${evaluated}.items`, items);\n}\nfunction schemaKeywords(it, types, typeErrors, errsCount) {\n    const { gen, schema, data, allErrors, opts, self } = it;\n    const { RULES } = self;\n    if (schema.$ref && (opts.ignoreKeywordsWithRef || !(0, util_1.schemaHasRulesButRef)(schema, RULES))) {\n        gen.block(() => keywordCode(it, \"$ref\", RULES.all.$ref.definition)); // TODO typecast\n        return;\n    }\n    if (!opts.jtd)\n        checkStrictTypes(it, types);\n    gen.block(() => {\n        for (const group of RULES.rules)\n            groupKeywords(group);\n        groupKeywords(RULES.post);\n    });\n    function groupKeywords(group) {\n        if (!(0, applicability_1.shouldUseGroup)(schema, group))\n            return;\n        if (group.type) {\n            gen.if((0, dataType_2.checkDataType)(group.type, data, opts.strictNumbers));\n            iterateKeywords(it, group);\n            if (types.length === 1 && types[0] === group.type && typeErrors) {\n                gen.else();\n                (0, dataType_2.reportTypeError)(it);\n            }\n            gen.endIf();\n        }\n        else {\n            iterateKeywords(it, group);\n        }\n        // TODO make it \"ok\" call?\n        if (!allErrors)\n            gen.if((0, codegen_1._) `${names_1.default.errors} === ${errsCount || 0}`);\n    }\n}\nfunction iterateKeywords(it, group) {\n    const { gen, schema, opts: { useDefaults }, } = it;\n    if (useDefaults)\n        (0, defaults_1.assignDefaults)(it, group.type);\n    gen.block(() => {\n        for (const rule of group.rules) {\n            if ((0, applicability_1.shouldUseRule)(schema, rule)) {\n                keywordCode(it, rule.keyword, rule.definition, group.type);\n            }\n        }\n    });\n}\nfunction checkStrictTypes(it, types) {\n    if (it.schemaEnv.meta || !it.opts.strictTypes)\n        return;\n    checkContextTypes(it, types);\n    if (!it.opts.allowUnionTypes)\n        checkMultipleTypes(it, types);\n    checkKeywordTypes(it, it.dataTypes);\n}\nfunction checkContextTypes(it, types) {\n    if (!types.length)\n        return;\n    if (!it.dataTypes.length) {\n        it.dataTypes = types;\n        return;\n    }\n    types.forEach((t) => {\n        if (!includesType(it.dataTypes, t)) {\n            strictTypesError(it, `type \"${t}\" not allowed by context \"${it.dataTypes.join(\",\")}\"`);\n        }\n    });\n    narrowSchemaTypes(it, types);\n}\nfunction checkMultipleTypes(it, ts) {\n    if (ts.length > 1 && !(ts.length === 2 && ts.includes(\"null\"))) {\n        strictTypesError(it, \"use allowUnionTypes to allow union type keyword\");\n    }\n}\nfunction checkKeywordTypes(it, ts) {\n    const rules = it.self.RULES.all;\n    for (const keyword in rules) {\n        const rule = rules[keyword];\n        if (typeof rule == \"object\" && (0, applicability_1.shouldUseRule)(it.schema, rule)) {\n            const { type } = rule.definition;\n            if (type.length && !type.some((t) => hasApplicableType(ts, t))) {\n                strictTypesError(it, `missing type \"${type.join(\",\")}\" for keyword \"${keyword}\"`);\n            }\n        }\n    }\n}\nfunction hasApplicableType(schTs, kwdT) {\n    return schTs.includes(kwdT) || (kwdT === \"number\" && schTs.includes(\"integer\"));\n}\nfunction includesType(ts, t) {\n    return ts.includes(t) || (t === \"integer\" && ts.includes(\"number\"));\n}\nfunction narrowSchemaTypes(it, withTypes) {\n    const ts = [];\n    for (const t of it.dataTypes) {\n        if (includesType(withTypes, t))\n            ts.push(t);\n        else if (withTypes.includes(\"integer\") && t === \"number\")\n            ts.push(\"integer\");\n    }\n    it.dataTypes = ts;\n}\nfunction strictTypesError(it, msg) {\n    const schemaPath = it.schemaEnv.baseId + it.errSchemaPath;\n    msg += ` at \"${schemaPath}\" (strictTypes)`;\n    (0, util_1.checkStrictMode)(it, msg, it.opts.strictTypes);\n}\nclass KeywordCxt {\n    constructor(it, def, keyword) {\n        (0, keyword_1.validateKeywordUsage)(it, def, keyword);\n        this.gen = it.gen;\n        this.allErrors = it.allErrors;\n        this.keyword = keyword;\n        this.data = it.data;\n        this.schema = it.schema[keyword];\n        this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data;\n        this.schemaValue = (0, util_1.schemaRefOrVal)(it, this.schema, keyword, this.$data);\n        this.schemaType = def.schemaType;\n        this.parentSchema = it.schema;\n        this.params = {};\n        this.it = it;\n        this.def = def;\n        if (this.$data) {\n            this.schemaCode = it.gen.const(\"vSchema\", getData(this.$data, it));\n        }\n        else {\n            this.schemaCode = this.schemaValue;\n            if (!(0, keyword_1.validSchemaType)(this.schema, def.schemaType, def.allowUndefined)) {\n                throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`);\n            }\n        }\n        if (\"code\" in def ? def.trackErrors : def.errors !== false) {\n            this.errsCount = it.gen.const(\"_errs\", names_1.default.errors);\n        }\n    }\n    result(condition, successAction, failAction) {\n        this.failResult((0, codegen_1.not)(condition), successAction, failAction);\n    }\n    failResult(condition, successAction, failAction) {\n        this.gen.if(condition);\n        if (failAction)\n            failAction();\n        else\n            this.error();\n        if (successAction) {\n            this.gen.else();\n            successAction();\n            if (this.allErrors)\n                this.gen.endIf();\n        }\n        else {\n            if (this.allErrors)\n                this.gen.endIf();\n            else\n                this.gen.else();\n        }\n    }\n    pass(condition, failAction) {\n        this.failResult((0, codegen_1.not)(condition), undefined, failAction);\n    }\n    fail(condition) {\n        if (condition === undefined) {\n            this.error();\n            if (!this.allErrors)\n                this.gen.if(false); // this branch will be removed by gen.optimize\n            return;\n        }\n        this.gen.if(condition);\n        this.error();\n        if (this.allErrors)\n            this.gen.endIf();\n        else\n            this.gen.else();\n    }\n    fail$data(condition) {\n        if (!this.$data)\n            return this.fail(condition);\n        const { schemaCode } = this;\n        this.fail((0, codegen_1._) `${schemaCode} !== undefined && (${(0, codegen_1.or)(this.invalid$data(), condition)})`);\n    }\n    error(append, errorParams, errorPaths) {\n        if (errorParams) {\n            this.setParams(errorParams);\n            this._error(append, errorPaths);\n            this.setParams({});\n            return;\n        }\n        this._error(append, errorPaths);\n    }\n    _error(append, errorPaths) {\n        ;\n        (append ? errors_1.reportExtraError : errors_1.reportError)(this, this.def.error, errorPaths);\n    }\n    $dataError() {\n        (0, errors_1.reportError)(this, this.def.$dataError || errors_1.keyword$DataError);\n    }\n    reset() {\n        if (this.errsCount === undefined)\n            throw new Error('add \"trackErrors\" to keyword definition');\n        (0, errors_1.resetErrorsCount)(this.gen, this.errsCount);\n    }\n    ok(cond) {\n        if (!this.allErrors)\n            this.gen.if(cond);\n    }\n    setParams(obj, assign) {\n        if (assign)\n            Object.assign(this.params, obj);\n        else\n            this.params = obj;\n    }\n    block$data(valid, codeBlock, $dataValid = codegen_1.nil) {\n        this.gen.block(() => {\n            this.check$data(valid, $dataValid);\n            codeBlock();\n        });\n    }\n    check$data(valid = codegen_1.nil, $dataValid = codegen_1.nil) {\n        if (!this.$data)\n            return;\n        const { gen, schemaCode, schemaType, def } = this;\n        gen.if((0, codegen_1.or)((0, codegen_1._) `${schemaCode} === undefined`, $dataValid));\n        if (valid !== codegen_1.nil)\n            gen.assign(valid, true);\n        if (schemaType.length || def.validateSchema) {\n            gen.elseIf(this.invalid$data());\n            this.$dataError();\n            if (valid !== codegen_1.nil)\n                gen.assign(valid, false);\n        }\n        gen.else();\n    }\n    invalid$data() {\n        const { gen, schemaCode, schemaType, def, it } = this;\n        return (0, codegen_1.or)(wrong$DataType(), invalid$DataSchema());\n        function wrong$DataType() {\n            if (schemaType.length) {\n                /* istanbul ignore if */\n                if (!(schemaCode instanceof codegen_1.Name))\n                    throw new Error(\"ajv implementation error\");\n                const st = Array.isArray(schemaType) ? schemaType : [schemaType];\n                return (0, codegen_1._) `${(0, dataType_2.checkDataTypes)(st, schemaCode, it.opts.strictNumbers, dataType_2.DataType.Wrong)}`;\n            }\n            return codegen_1.nil;\n        }\n        function invalid$DataSchema() {\n            if (def.validateSchema) {\n                const validateSchemaRef = gen.scopeValue(\"validate$data\", { ref: def.validateSchema }); // TODO value.code for standalone\n                return (0, codegen_1._) `!${validateSchemaRef}(${schemaCode})`;\n            }\n            return codegen_1.nil;\n        }\n    }\n    subschema(appl, valid) {\n        const subschema = (0, subschema_1.getSubschema)(this.it, appl);\n        (0, subschema_1.extendSubschemaData)(subschema, this.it, appl);\n        (0, subschema_1.extendSubschemaMode)(subschema, appl);\n        const nextContext = { ...this.it, ...subschema, items: undefined, props: undefined };\n        subschemaCode(nextContext, valid);\n        return nextContext;\n    }\n    mergeEvaluated(schemaCxt, toName) {\n        const { it, gen } = this;\n        if (!it.opts.unevaluated)\n            return;\n        if (it.props !== true && schemaCxt.props !== undefined) {\n            it.props = util_1.mergeEvaluated.props(gen, schemaCxt.props, it.props, toName);\n        }\n        if (it.items !== true && schemaCxt.items !== undefined) {\n            it.items = util_1.mergeEvaluated.items(gen, schemaCxt.items, it.items, toName);\n        }\n    }\n    mergeValidEvaluated(schemaCxt, valid) {\n        const { it, gen } = this;\n        if (it.opts.unevaluated && (it.props !== true || it.items !== true)) {\n            gen.if(valid, () => this.mergeEvaluated(schemaCxt, codegen_1.Name));\n            return true;\n        }\n    }\n}\nexports.KeywordCxt = KeywordCxt;\nfunction keywordCode(it, keyword, def, ruleType) {\n    const cxt = new KeywordCxt(it, def, keyword);\n    if (\"code\" in def) {\n        def.code(cxt, ruleType);\n    }\n    else if (cxt.$data && def.validate) {\n        (0, keyword_1.funcKeywordCode)(cxt, def);\n    }\n    else if (\"macro\" in def) {\n        (0, keyword_1.macroKeywordCode)(cxt, def);\n    }\n    else if (def.compile || def.validate) {\n        (0, keyword_1.funcKeywordCode)(cxt, def);\n    }\n}\nconst JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/;\nconst RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;\nfunction getData($data, { dataLevel, dataNames, dataPathArr }) {\n    let jsonPointer;\n    let data;\n    if ($data === \"\")\n        return names_1.default.rootData;\n    if ($data[0] === \"/\") {\n        if (!JSON_POINTER.test($data))\n            throw new Error(`Invalid JSON-pointer: ${$data}`);\n        jsonPointer = $data;\n        data = names_1.default.rootData;\n    }\n    else {\n        const matches = RELATIVE_JSON_POINTER.exec($data);\n        if (!matches)\n            throw new Error(`Invalid JSON-pointer: ${$data}`);\n        const up = +matches[1];\n        jsonPointer = matches[2];\n        if (jsonPointer === \"#\") {\n            if (up >= dataLevel)\n                throw new Error(errorMsg(\"property/index\", up));\n            return dataPathArr[dataLevel - up];\n        }\n        if (up > dataLevel)\n            throw new Error(errorMsg(\"data\", up));\n        data = dataNames[dataLevel - up];\n        if (!jsonPointer)\n            return data;\n    }\n    let expr = data;\n    const segments = jsonPointer.split(\"/\");\n    for (const segment of segments) {\n        if (segment) {\n            data = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)((0, util_1.unescapeJsonPointer)(segment))}`;\n            expr = (0, codegen_1._) `${expr} && ${data}`;\n        }\n    }\n    return expr;\n    function errorMsg(pointerType, up) {\n        return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`;\n    }\n}\nexports.getData = getData;\n//# sourceMappingURL=index.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass ValidationError extends Error {\n    constructor(errors) {\n        super(\"validation failed\");\n        this.errors = errors;\n        this.ajv = this.validation = true;\n    }\n}\nexports.default = ValidationError;\n//# sourceMappingURL=validation_error.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst resolve_1 = require(\"./resolve\");\nclass MissingRefError extends Error {\n    constructor(resolver, baseId, ref, msg) {\n        super(msg || `can't resolve reference ${ref} from id ${baseId}`);\n        this.missingRef = (0, resolve_1.resolveUrl)(resolver, baseId, ref);\n        this.missingSchema = (0, resolve_1.normalizeId)((0, resolve_1.getFullPath)(resolver, this.missingRef));\n    }\n}\nexports.default = MissingRefError;\n//# sourceMappingURL=ref_error.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolveSchema = exports.getCompilingSchema = exports.resolveRef = exports.compileSchema = exports.SchemaEnv = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst validation_error_1 = require(\"../runtime/validation_error\");\nconst names_1 = require(\"./names\");\nconst resolve_1 = require(\"./resolve\");\nconst util_1 = require(\"./util\");\nconst validate_1 = require(\"./validate\");\nclass SchemaEnv {\n    constructor(env) {\n        var _a;\n        this.refs = {};\n        this.dynamicAnchors = {};\n        let schema;\n        if (typeof env.schema == \"object\")\n            schema = env.schema;\n        this.schema = env.schema;\n        this.schemaId = env.schemaId;\n        this.root = env.root || this;\n        this.baseId = (_a = env.baseId) !== null && _a !== void 0 ? _a : (0, resolve_1.normalizeId)(schema === null || schema === void 0 ? void 0 : schema[env.schemaId || \"$id\"]);\n        this.schemaPath = env.schemaPath;\n        this.localRefs = env.localRefs;\n        this.meta = env.meta;\n        this.$async = schema === null || schema === void 0 ? void 0 : schema.$async;\n        this.refs = {};\n    }\n}\nexports.SchemaEnv = SchemaEnv;\n// let codeSize = 0\n// let nodeCount = 0\n// Compiles schema in SchemaEnv\nfunction compileSchema(sch) {\n    // TODO refactor - remove compilations\n    const _sch = getCompilingSchema.call(this, sch);\n    if (_sch)\n        return _sch;\n    const rootId = (0, resolve_1.getFullPath)(this.opts.uriResolver, sch.root.baseId); // TODO if getFullPath removed 1 tests fails\n    const { es5, lines } = this.opts.code;\n    const { ownProperties } = this.opts;\n    const gen = new codegen_1.CodeGen(this.scope, { es5, lines, ownProperties });\n    let _ValidationError;\n    if (sch.$async) {\n        _ValidationError = gen.scopeValue(\"Error\", {\n            ref: validation_error_1.default,\n            code: (0, codegen_1._) `require(\"ajv/dist/runtime/validation_error\").default`,\n        });\n    }\n    const validateName = gen.scopeName(\"validate\");\n    sch.validateName = validateName;\n    const schemaCxt = {\n        gen,\n        allErrors: this.opts.allErrors,\n        data: names_1.default.data,\n        parentData: names_1.default.parentData,\n        parentDataProperty: names_1.default.parentDataProperty,\n        dataNames: [names_1.default.data],\n        dataPathArr: [codegen_1.nil], // TODO can its length be used as dataLevel if nil is removed?\n        dataLevel: 0,\n        dataTypes: [],\n        definedProperties: new Set(),\n        topSchemaRef: gen.scopeValue(\"schema\", this.opts.code.source === true\n            ? { ref: sch.schema, code: (0, codegen_1.stringify)(sch.schema) }\n            : { ref: sch.schema }),\n        validateName,\n        ValidationError: _ValidationError,\n        schema: sch.schema,\n        schemaEnv: sch,\n        rootId,\n        baseId: sch.baseId || rootId,\n        schemaPath: codegen_1.nil,\n        errSchemaPath: sch.schemaPath || (this.opts.jtd ? \"\" : \"#\"),\n        errorPath: (0, codegen_1._) `\"\"`,\n        opts: this.opts,\n        self: this,\n    };\n    let sourceCode;\n    try {\n        this._compilations.add(sch);\n        (0, validate_1.validateFunctionCode)(schemaCxt);\n        gen.optimize(this.opts.code.optimize);\n        // gen.optimize(1)\n        const validateCode = gen.toString();\n        sourceCode = `${gen.scopeRefs(names_1.default.scope)}return ${validateCode}`;\n        // console.log((codeSize += sourceCode.length), (nodeCount += gen.nodeCount))\n        if (this.opts.code.process)\n            sourceCode = this.opts.code.process(sourceCode, sch);\n        // console.log(\"\\n\\n\\n *** \\n\", sourceCode)\n        const makeValidate = new Function(`${names_1.default.self}`, `${names_1.default.scope}`, sourceCode);\n        const validate = makeValidate(this, this.scope.get());\n        this.scope.value(validateName, { ref: validate });\n        validate.errors = null;\n        validate.schema = sch.schema;\n        validate.schemaEnv = sch;\n        if (sch.$async)\n            validate.$async = true;\n        if (this.opts.code.source === true) {\n            validate.source = { validateName, validateCode, scopeValues: gen._values };\n        }\n        if (this.opts.unevaluated) {\n            const { props, items } = schemaCxt;\n            validate.evaluated = {\n                props: props instanceof codegen_1.Name ? undefined : props,\n                items: items instanceof codegen_1.Name ? undefined : items,\n                dynamicProps: props instanceof codegen_1.Name,\n                dynamicItems: items instanceof codegen_1.Name,\n            };\n            if (validate.source)\n                validate.source.evaluated = (0, codegen_1.stringify)(validate.evaluated);\n        }\n        sch.validate = validate;\n        return sch;\n    }\n    catch (e) {\n        delete sch.validate;\n        delete sch.validateName;\n        if (sourceCode)\n            this.logger.error(\"Error compiling schema, function code:\", sourceCode);\n        // console.log(\"\\n\\n\\n *** \\n\", sourceCode, this.opts)\n        throw e;\n    }\n    finally {\n        this._compilations.delete(sch);\n    }\n}\nexports.compileSchema = compileSchema;\nfunction resolveRef(root, baseId, ref) {\n    var _a;\n    ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, ref);\n    const schOrFunc = root.refs[ref];\n    if (schOrFunc)\n        return schOrFunc;\n    let _sch = resolve.call(this, root, ref);\n    if (_sch === undefined) {\n        const schema = (_a = root.localRefs) === null || _a === void 0 ? void 0 : _a[ref]; // TODO maybe localRefs should hold SchemaEnv\n        const { schemaId } = this.opts;\n        if (schema)\n            _sch = new SchemaEnv({ schema, schemaId, root, baseId });\n    }\n    if (_sch === undefined)\n        return;\n    return (root.refs[ref] = inlineOrCompile.call(this, _sch));\n}\nexports.resolveRef = resolveRef;\nfunction inlineOrCompile(sch) {\n    if ((0, resolve_1.inlineRef)(sch.schema, this.opts.inlineRefs))\n        return sch.schema;\n    return sch.validate ? sch : compileSchema.call(this, sch);\n}\n// Index of schema compilation in the currently compiled list\nfunction getCompilingSchema(schEnv) {\n    for (const sch of this._compilations) {\n        if (sameSchemaEnv(sch, schEnv))\n            return sch;\n    }\n}\nexports.getCompilingSchema = getCompilingSchema;\nfunction sameSchemaEnv(s1, s2) {\n    return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;\n}\n// resolve and compile the references ($ref)\n// TODO returns AnySchemaObject (if the schema can be inlined) or validation function\nfunction resolve(root, // information about the root schema for the current schema\nref // reference to resolve\n) {\n    let sch;\n    while (typeof (sch = this.refs[ref]) == \"string\")\n        ref = sch;\n    return sch || this.schemas[ref] || resolveSchema.call(this, root, ref);\n}\n// Resolve schema, its root and baseId\nfunction resolveSchema(root, // root object with properties schema, refs TODO below SchemaEnv is assigned to it\nref // reference to resolve\n) {\n    const p = this.opts.uriResolver.parse(ref);\n    const refPath = (0, resolve_1._getFullPath)(this.opts.uriResolver, p);\n    let baseId = (0, resolve_1.getFullPath)(this.opts.uriResolver, root.baseId, undefined);\n    // TODO `Object.keys(root.schema).length > 0` should not be needed - but removing breaks 2 tests\n    if (Object.keys(root.schema).length > 0 && refPath === baseId) {\n        return getJsonPointer.call(this, p, root);\n    }\n    const id = (0, resolve_1.normalizeId)(refPath);\n    const schOrRef = this.refs[id] || this.schemas[id];\n    if (typeof schOrRef == \"string\") {\n        const sch = resolveSchema.call(this, root, schOrRef);\n        if (typeof (sch === null || sch === void 0 ? void 0 : sch.schema) !== \"object\")\n            return;\n        return getJsonPointer.call(this, p, sch);\n    }\n    if (typeof (schOrRef === null || schOrRef === void 0 ? void 0 : schOrRef.schema) !== \"object\")\n        return;\n    if (!schOrRef.validate)\n        compileSchema.call(this, schOrRef);\n    if (id === (0, resolve_1.normalizeId)(ref)) {\n        const { schema } = schOrRef;\n        const { schemaId } = this.opts;\n        const schId = schema[schemaId];\n        if (schId)\n            baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId);\n        return new SchemaEnv({ schema, schemaId, root, baseId });\n    }\n    return getJsonPointer.call(this, p, schOrRef);\n}\nexports.resolveSchema = resolveSchema;\nconst PREVENT_SCOPE_CHANGE = new Set([\n    \"properties\",\n    \"patternProperties\",\n    \"enum\",\n    \"dependencies\",\n    \"definitions\",\n]);\nfunction getJsonPointer(parsedRef, { baseId, schema, root }) {\n    var _a;\n    if (((_a = parsedRef.fragment) === null || _a === void 0 ? void 0 : _a[0]) !== \"/\")\n        return;\n    for (const part of parsedRef.fragment.slice(1).split(\"/\")) {\n        if (typeof schema === \"boolean\")\n            return;\n        const partSchema = schema[(0, util_1.unescapeFragment)(part)];\n        if (partSchema === undefined)\n            return;\n        schema = partSchema;\n        // TODO PREVENT_SCOPE_CHANGE could be defined in keyword def?\n        const schId = typeof schema === \"object\" && schema[this.opts.schemaId];\n        if (!PREVENT_SCOPE_CHANGE.has(part) && schId) {\n            baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId);\n        }\n    }\n    let env;\n    if (typeof schema != \"boolean\" && schema.$ref && !(0, util_1.schemaHasRulesButRef)(schema, this.RULES)) {\n        const $ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schema.$ref);\n        env = resolveSchema.call(this, root, $ref);\n    }\n    // even though resolution failed we need to return SchemaEnv to throw exception\n    // so that compileAsync loads missing schema.\n    const { schemaId } = this.opts;\n    env = env || new SchemaEnv({ schema, schemaId, root, baseId });\n    if (env.schema !== env.root.schema)\n        return env;\n    return undefined;\n}\n//# sourceMappingURL=index.js.map", "", "'use strict'\n\n/** @type {(value: string) => boolean} */\nconst isUUID = RegExp.prototype.test.bind(/^[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)$/u)\n\n/**\n * @param {Array<string>} input\n * @returns {string}\n */\nfunction stringArrayToHexStripped (input) {\n  let acc = ''\n  let code = 0\n  let i = 0\n\n  for (i = 0; i < input.length; i++) {\n    code = input[i].charCodeAt(0)\n    if (code === 48) {\n      continue\n    }\n    if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n      return ''\n    }\n    acc += input[i]\n    break\n  }\n\n  for (i += 1; i < input.length; i++) {\n    code = input[i].charCodeAt(0)\n    if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n      return ''\n    }\n    acc += input[i]\n  }\n  return acc\n}\n\n/**\n * @typedef {Object} GetIPV6Result\n * @property {boolean} error - Indicates if there was an error parsing the IPv6 address.\n * @property {string} address - The parsed IPv6 address.\n * @property {string} [zone] - The zone identifier, if present.\n */\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nconst nonSimpleDomain = RegExp.prototype.test.bind(/[^!\"$&'()*+,\\-.;=_`a-z{}~]/u)\n\n/**\n * @param {Array<string>} buffer\n * @returns {boolean}\n */\nfunction consumeIsZone (buffer) {\n  buffer.length = 0\n  return true\n}\n\n/**\n * @param {Array<string>} buffer\n * @param {Array<string>} address\n * @param {GetIPV6Result} output\n * @returns {boolean}\n */\nfunction consumeHextets (buffer, address, output) {\n  if (buffer.length) {\n    const hex = stringArrayToHexStripped(buffer)\n    if (hex !== '') {\n      address.push(hex)\n    } else {\n      output.error = true\n      return false\n    }\n    buffer.length = 0\n  }\n  return true\n}\n\n/**\n * @param {string} input\n * @returns {GetIPV6Result}\n */\nfunction getIPV6 (input) {\n  let tokenCount = 0\n  const output = { error: false, address: '', zone: '' }\n  /** @type {Array<string>} */\n  const address = []\n  /** @type {Array<string>} */\n  const buffer = []\n  let endipv6Encountered = false\n  let endIpv6 = false\n\n  let consume = consumeHextets\n\n  for (let i = 0; i < input.length; i++) {\n    const cursor = input[i]\n    if (cursor === '[' || cursor === ']') { continue }\n    if (cursor === ':') {\n      if (endipv6Encountered === true) {\n        endIpv6 = true\n      }\n      if (!consume(buffer, address, output)) { break }\n      if (++tokenCount > 7) {\n        // not valid\n        output.error = true\n        break\n      }\n      if (i > 0 && input[i - 1] === ':') {\n        endipv6Encountered = true\n      }\n      address.push(':')\n      continue\n    } else if (cursor === '%') {\n      if (!consume(buffer, address, output)) { break }\n      // switch to zone detection\n      consume = consumeIsZone\n    } else {\n      buffer.push(cursor)\n      continue\n    }\n  }\n  if (buffer.length) {\n    if (consume === consumeIsZone) {\n      output.zone = buffer.join('')\n    } else if (endIpv6) {\n      address.push(buffer.join(''))\n    } else {\n      address.push(stringArrayToHexStripped(buffer))\n    }\n  }\n  output.address = address.join('')\n  return output\n}\n\n/**\n * @typedef {Object} NormalizeIPv6Result\n * @property {string} host - The normalized host.\n * @property {string} [escapedHost] - The escaped host.\n * @property {boolean} isIPV6 - Indicates if the host is an IPv6 address.\n */\n\n/**\n * @param {string} host\n * @returns {NormalizeIPv6Result}\n */\nfunction normalizeIPv6 (host) {\n  if (findToken(host, ':') < 2) { return { host, isIPV6: false } }\n  const ipv6 = getIPV6(host)\n\n  if (!ipv6.error) {\n    let newHost = ipv6.address\n    let escapedHost = ipv6.address\n    if (ipv6.zone) {\n      newHost += '%' + ipv6.zone\n      escapedHost += '%25' + ipv6.zone\n    }\n    return { host: newHost, isIPV6: true, escapedHost }\n  } else {\n    return { host, isIPV6: false }\n  }\n}\n\n/**\n * @param {string} str\n * @param {string} token\n * @returns {number}\n */\nfunction findToken (str, token) {\n  let ind = 0\n  for (let i = 0; i < str.length; i++) {\n    if (str[i] === token) ind++\n  }\n  return ind\n}\n\n/**\n * @param {string} path\n * @returns {string}\n *\n * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4\n */\nfunction removeDotSegments (path) {\n  let input = path\n  const output = []\n  let nextSlash = -1\n  let len = 0\n\n  // eslint-disable-next-line no-cond-assign\n  while (len = input.length) {\n    if (len === 1) {\n      if (input === '.') {\n        break\n      } else if (input === '/') {\n        output.push('/')\n        break\n      } else {\n        output.push(input)\n        break\n      }\n    } else if (len === 2) {\n      if (input[0] === '.') {\n        if (input[1] === '.') {\n          break\n        } else if (input[1] === '/') {\n          input = input.slice(2)\n          continue\n        }\n      } else if (input[0] === '/') {\n        if (input[1] === '.' || input[1] === '/') {\n          output.push('/')\n          break\n        }\n      }\n    } else if (len === 3) {\n      if (input === '/..') {\n        if (output.length !== 0) {\n          output.pop()\n        }\n        output.push('/')\n        break\n      }\n    }\n    if (input[0] === '.') {\n      if (input[1] === '.') {\n        if (input[2] === '/') {\n          input = input.slice(3)\n          continue\n        }\n      } else if (input[1] === '/') {\n        input = input.slice(2)\n        continue\n      }\n    } else if (input[0] === '/') {\n      if (input[1] === '.') {\n        if (input[2] === '/') {\n          input = input.slice(2)\n          continue\n        } else if (input[2] === '.') {\n          if (input[3] === '/') {\n            input = input.slice(3)\n            if (output.length !== 0) {\n              output.pop()\n            }\n            continue\n          }\n        }\n      }\n    }\n\n    // Rule 2E: Move normal path segment to output\n    if ((nextSlash = input.indexOf('/', 1)) === -1) {\n      output.push(input)\n      break\n    } else {\n      output.push(input.slice(0, nextSlash))\n      input = input.slice(nextSlash)\n    }\n  }\n\n  return output.join('')\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @param {boolean} esc\n * @returns {import('../types/index').URIComponent}\n */\nfunction normalizeComponentEncoding (component, esc) {\n  const func = esc !== true ? escape : unescape\n  if (component.scheme !== undefined) {\n    component.scheme = func(component.scheme)\n  }\n  if (component.userinfo !== undefined) {\n    component.userinfo = func(component.userinfo)\n  }\n  if (component.host !== undefined) {\n    component.host = func(component.host)\n  }\n  if (component.path !== undefined) {\n    component.path = func(component.path)\n  }\n  if (component.query !== undefined) {\n    component.query = func(component.query)\n  }\n  if (component.fragment !== undefined) {\n    component.fragment = func(component.fragment)\n  }\n  return component\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @returns {string|undefined}\n */\nfunction recomposeAuthority (component) {\n  const uriTokens = []\n\n  if (component.userinfo !== undefined) {\n    uriTokens.push(component.userinfo)\n    uriTokens.push('@')\n  }\n\n  if (component.host !== undefined) {\n    let host = unescape(component.host)\n    if (!isIPv4(host)) {\n      const ipV6res = normalizeIPv6(host)\n      if (ipV6res.isIPV6 === true) {\n        host = `[${ipV6res.escapedHost}]`\n      } else {\n        host = component.host\n      }\n    }\n    uriTokens.push(host)\n  }\n\n  if (typeof component.port === 'number' || typeof component.port === 'string') {\n    uriTokens.push(':')\n    uriTokens.push(String(component.port))\n  }\n\n  return uriTokens.length ? uriTokens.join('') : undefined\n};\n\nmodule.exports = {\n  nonSimpleDomain,\n  recomposeAuthority,\n  normalizeComponentEncoding,\n  removeDotSegments,\n  isIPv4,\n  isUUID,\n  normalizeIPv6,\n  stringArrayToHexStripped\n}\n", "'use strict'\n\nconst { isUUID } = require('./utils')\nconst URN_REG = /([\\da-z][\\d\\-a-z]{0,31}):((?:[\\w!$'()*+,\\-.:;=@]|%[\\da-f]{2})+)/iu\n\nconst supportedSchemeNames = /** @type {const} */ (['http', 'https', 'ws',\n  'wss', 'urn', 'urn:uuid'])\n\n/** @typedef {supportedSchemeNames[number]} SchemeName */\n\n/**\n * @param {string} name\n * @returns {name is SchemeName}\n */\nfunction isValidSchemeName (name) {\n  return supportedSchemeNames.indexOf(/** @type {*} */ (name)) !== -1\n}\n\n/**\n * @callback SchemeFn\n * @param {import('../types/index').URIComponent} component\n * @param {import('../types/index').Options} options\n * @returns {import('../types/index').URIComponent}\n */\n\n/**\n * @typedef {Object} SchemeHandler\n * @property {SchemeName} scheme - The scheme name.\n * @property {boolean} [domainHost] - Indicates if the scheme supports domain hosts.\n * @property {SchemeFn} parse - Function to parse the URI component for this scheme.\n * @property {SchemeFn} serialize - Function to serialize the URI component for this scheme.\n * @property {boolean} [skipNormalize] - Indicates if normalization should be skipped for this scheme.\n * @property {boolean} [absolutePath] - Indicates if the scheme uses absolute paths.\n * @property {boolean} [unicodeSupport] - Indicates if the scheme supports Unicode.\n */\n\n/**\n * @param {import('../types/index').URIComponent} wsComponent\n * @returns {boolean}\n */\nfunction wsIsSecure (wsComponent) {\n  if (wsComponent.secure === true) {\n    return true\n  } else if (wsComponent.secure === false) {\n    return false\n  } else if (wsComponent.scheme) {\n    return (\n      wsComponent.scheme.length === 3 &&\n      (wsComponent.scheme[0] === 'w' || wsComponent.scheme[0] === 'W') &&\n      (wsComponent.scheme[1] === 's' || wsComponent.scheme[1] === 'S') &&\n      (wsComponent.scheme[2] === 's' || wsComponent.scheme[2] === 'S')\n    )\n  } else {\n    return false\n  }\n}\n\n/** @type {SchemeFn} */\nfunction httpParse (component) {\n  if (!component.host) {\n    component.error = component.error || 'HTTP URIs must have a host.'\n  }\n\n  return component\n}\n\n/** @type {SchemeFn} */\nfunction httpSerialize (component) {\n  const secure = String(component.scheme).toLowerCase() === 'https'\n\n  // normalize the default port\n  if (component.port === (secure ? 443 : 80) || component.port === '') {\n    component.port = undefined\n  }\n\n  // normalize the empty path\n  if (!component.path) {\n    component.path = '/'\n  }\n\n  // NOTE: We do not parse query strings for HTTP URIs\n  // as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n  // and not the HTTP spec.\n\n  return component\n}\n\n/** @type {SchemeFn} */\nfunction wsParse (wsComponent) {\n// indicate if the secure flag is set\n  wsComponent.secure = wsIsSecure(wsComponent)\n\n  // construct resouce name\n  wsComponent.resourceName = (wsComponent.path || '/') + (wsComponent.query ? '?' + wsComponent.query : '')\n  wsComponent.path = undefined\n  wsComponent.query = undefined\n\n  return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction wsSerialize (wsComponent) {\n// normalize the default port\n  if (wsComponent.port === (wsIsSecure(wsComponent) ? 443 : 80) || wsComponent.port === '') {\n    wsComponent.port = undefined\n  }\n\n  // ensure scheme matches secure flag\n  if (typeof wsComponent.secure === 'boolean') {\n    wsComponent.scheme = (wsComponent.secure ? 'wss' : 'ws')\n    wsComponent.secure = undefined\n  }\n\n  // reconstruct path from resource name\n  if (wsComponent.resourceName) {\n    const [path, query] = wsComponent.resourceName.split('?')\n    wsComponent.path = (path && path !== '/' ? path : undefined)\n    wsComponent.query = query\n    wsComponent.resourceName = undefined\n  }\n\n  // forbid fragment component\n  wsComponent.fragment = undefined\n\n  return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnParse (urnComponent, options) {\n  if (!urnComponent.path) {\n    urnComponent.error = 'URN can not be parsed'\n    return urnComponent\n  }\n  const matches = urnComponent.path.match(URN_REG)\n  if (matches) {\n    const scheme = options.scheme || urnComponent.scheme || 'urn'\n    urnComponent.nid = matches[1].toLowerCase()\n    urnComponent.nss = matches[2]\n    const urnScheme = `${scheme}:${options.nid || urnComponent.nid}`\n    const schemeHandler = getSchemeHandler(urnScheme)\n    urnComponent.path = undefined\n\n    if (schemeHandler) {\n      urnComponent = schemeHandler.parse(urnComponent, options)\n    }\n  } else {\n    urnComponent.error = urnComponent.error || 'URN can not be parsed.'\n  }\n\n  return urnComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnSerialize (urnComponent, options) {\n  if (urnComponent.nid === undefined) {\n    throw new Error('URN without nid cannot be serialized')\n  }\n  const scheme = options.scheme || urnComponent.scheme || 'urn'\n  const nid = urnComponent.nid.toLowerCase()\n  const urnScheme = `${scheme}:${options.nid || nid}`\n  const schemeHandler = getSchemeHandler(urnScheme)\n\n  if (schemeHandler) {\n    urnComponent = schemeHandler.serialize(urnComponent, options)\n  }\n\n  const uriComponent = urnComponent\n  const nss = urnComponent.nss\n  uriComponent.path = `${nid || options.nid}:${nss}`\n\n  options.skipEscape = true\n  return uriComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidParse (urnComponent, options) {\n  const uuidComponent = urnComponent\n  uuidComponent.uuid = uuidComponent.nss\n  uuidComponent.nss = undefined\n\n  if (!options.tolerant && (!uuidComponent.uuid || !isUUID(uuidComponent.uuid))) {\n    uuidComponent.error = uuidComponent.error || 'UUID is not valid.'\n  }\n\n  return uuidComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidSerialize (uuidComponent) {\n  const urnComponent = uuidComponent\n  // normalize UUID\n  urnComponent.nss = (uuidComponent.uuid || '').toLowerCase()\n  return urnComponent\n}\n\nconst http = /** @type {SchemeHandler} */ ({\n  scheme: 'http',\n  domainHost: true,\n  parse: httpParse,\n  serialize: httpSerialize\n})\n\nconst https = /** @type {SchemeHandler} */ ({\n  scheme: 'https',\n  domainHost: http.domainHost,\n  parse: httpParse,\n  serialize: httpSerialize\n})\n\nconst ws = /** @type {SchemeHandler} */ ({\n  scheme: 'ws',\n  domainHost: true,\n  parse: wsParse,\n  serialize: wsSerialize\n})\n\nconst wss = /** @type {SchemeHandler} */ ({\n  scheme: 'wss',\n  domainHost: ws.domainHost,\n  parse: ws.parse,\n  serialize: ws.serialize\n})\n\nconst urn = /** @type {SchemeHandler} */ ({\n  scheme: 'urn',\n  parse: urnParse,\n  serialize: urnSerialize,\n  skipNormalize: true\n})\n\nconst urnuuid = /** @type {SchemeHandler} */ ({\n  scheme: 'urn:uuid',\n  parse: urnuuidParse,\n  serialize: urnuuidSerialize,\n  skipNormalize: true\n})\n\nconst SCHEMES = /** @type {Record<SchemeName, SchemeHandler>} */ ({\n  http,\n  https,\n  ws,\n  wss,\n  urn,\n  'urn:uuid': urnuuid\n})\n\nObject.setPrototypeOf(SCHEMES, null)\n\n/**\n * @param {string|undefined} scheme\n * @returns {SchemeHandler|undefined}\n */\nfunction getSchemeHandler (scheme) {\n  return (\n    scheme && (\n      SCHEMES[/** @type {SchemeName} */ (scheme)] ||\n      SCHEMES[/** @type {SchemeName} */(scheme.toLowerCase())])\n  ) ||\n    undefined\n}\n\nmodule.exports = {\n  wsIsSecure,\n  SCHEMES,\n  isValidSchemeName,\n  getSchemeHandler,\n}\n", "'use strict'\n\nconst { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizeComponentEncoding, isIPv4, nonSimpleDomain } = require('./lib/utils')\nconst { SCHEMES, getSchemeHandler } = require('./lib/schemes')\n\n/**\n * @template {import('./types/index').URIComponent|string} T\n * @param {T} uri\n * @param {import('./types/index').Options} [options]\n * @returns {T}\n */\nfunction normalize (uri, options) {\n  if (typeof uri === 'string') {\n    uri = /** @type {T} */ (serialize(parse(uri, options), options))\n  } else if (typeof uri === 'object') {\n    uri = /** @type {T} */ (parse(serialize(uri, options), options))\n  }\n  return uri\n}\n\n/**\n * @param {string} baseURI\n * @param {string} relativeURI\n * @param {import('./types/index').Options} [options]\n * @returns {string}\n */\nfunction resolve (baseURI, relativeURI, options) {\n  const schemelessOptions = options ? Object.assign({ scheme: 'null' }, options) : { scheme: 'null' }\n  const resolved = resolveComponent(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true)\n  schemelessOptions.skipEscape = true\n  return serialize(resolved, schemelessOptions)\n}\n\n/**\n * @param {import ('./types/index').URIComponent} base\n * @param {import ('./types/index').URIComponent} relative\n * @param {import('./types/index').Options} [options]\n * @param {boolean} [skipNormalization=false]\n * @returns {import ('./types/index').URIComponent}\n */\nfunction resolveComponent (base, relative, options, skipNormalization) {\n  /** @type {import('./types/index').URIComponent} */\n  const target = {}\n  if (!skipNormalization) {\n    base = parse(serialize(base, options), options) // normalize base component\n    relative = parse(serialize(relative, options), options) // normalize relative component\n  }\n  options = options || {}\n\n  if (!options.tolerant && relative.scheme) {\n    target.scheme = relative.scheme\n    // target.authority = relative.authority;\n    target.userinfo = relative.userinfo\n    target.host = relative.host\n    target.port = relative.port\n    target.path = removeDotSegments(relative.path || '')\n    target.query = relative.query\n  } else {\n    if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n      // target.authority = relative.authority;\n      target.userinfo = relative.userinfo\n      target.host = relative.host\n      target.port = relative.port\n      target.path = removeDotSegments(relative.path || '')\n      target.query = relative.query\n    } else {\n      if (!relative.path) {\n        target.path = base.path\n        if (relative.query !== undefined) {\n          target.query = relative.query\n        } else {\n          target.query = base.query\n        }\n      } else {\n        if (relative.path[0] === '/') {\n          target.path = removeDotSegments(relative.path)\n        } else {\n          if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n            target.path = '/' + relative.path\n          } else if (!base.path) {\n            target.path = relative.path\n          } else {\n            target.path = base.path.slice(0, base.path.lastIndexOf('/') + 1) + relative.path\n          }\n          target.path = removeDotSegments(target.path)\n        }\n        target.query = relative.query\n      }\n      // target.authority = base.authority;\n      target.userinfo = base.userinfo\n      target.host = base.host\n      target.port = base.port\n    }\n    target.scheme = base.scheme\n  }\n\n  target.fragment = relative.fragment\n\n  return target\n}\n\n/**\n * @param {import ('./types/index').URIComponent|string} uriA\n * @param {import ('./types/index').URIComponent|string} uriB\n * @param {import ('./types/index').Options} options\n * @returns {boolean}\n */\nfunction equal (uriA, uriB, options) {\n  if (typeof uriA === 'string') {\n    uriA = unescape(uriA)\n    uriA = serialize(normalizeComponentEncoding(parse(uriA, options), true), { ...options, skipEscape: true })\n  } else if (typeof uriA === 'object') {\n    uriA = serialize(normalizeComponentEncoding(uriA, true), { ...options, skipEscape: true })\n  }\n\n  if (typeof uriB === 'string') {\n    uriB = unescape(uriB)\n    uriB = serialize(normalizeComponentEncoding(parse(uriB, options), true), { ...options, skipEscape: true })\n  } else if (typeof uriB === 'object') {\n    uriB = serialize(normalizeComponentEncoding(uriB, true), { ...options, skipEscape: true })\n  }\n\n  return uriA.toLowerCase() === uriB.toLowerCase()\n}\n\n/**\n * @param {Readonly<import('./types/index').URIComponent>} cmpts\n * @param {import('./types/index').Options} [opts]\n * @returns {string}\n */\nfunction serialize (cmpts, opts) {\n  const component = {\n    host: cmpts.host,\n    scheme: cmpts.scheme,\n    userinfo: cmpts.userinfo,\n    port: cmpts.port,\n    path: cmpts.path,\n    query: cmpts.query,\n    nid: cmpts.nid,\n    nss: cmpts.nss,\n    uuid: cmpts.uuid,\n    fragment: cmpts.fragment,\n    reference: cmpts.reference,\n    resourceName: cmpts.resourceName,\n    secure: cmpts.secure,\n    error: ''\n  }\n  const options = Object.assign({}, opts)\n  const uriTokens = []\n\n  // find scheme handler\n  const schemeHandler = getSchemeHandler(options.scheme || component.scheme)\n\n  // perform scheme specific serialization\n  if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(component, options)\n\n  if (component.path !== undefined) {\n    if (!options.skipEscape) {\n      component.path = escape(component.path)\n\n      if (component.scheme !== undefined) {\n        component.path = component.path.split('%3A').join(':')\n      }\n    } else {\n      component.path = unescape(component.path)\n    }\n  }\n\n  if (options.reference !== 'suffix' && component.scheme) {\n    uriTokens.push(component.scheme, ':')\n  }\n\n  const authority = recomposeAuthority(component)\n  if (authority !== undefined) {\n    if (options.reference !== 'suffix') {\n      uriTokens.push('//')\n    }\n\n    uriTokens.push(authority)\n\n    if (component.path && component.path[0] !== '/') {\n      uriTokens.push('/')\n    }\n  }\n  if (component.path !== undefined) {\n    let s = component.path\n\n    if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n      s = removeDotSegments(s)\n    }\n\n    if (\n      authority === undefined &&\n      s[0] === '/' &&\n      s[1] === '/'\n    ) {\n      // don't allow the path to start with \"//\"\n      s = '/%2F' + s.slice(2)\n    }\n\n    uriTokens.push(s)\n  }\n\n  if (component.query !== undefined) {\n    uriTokens.push('?', component.query)\n  }\n\n  if (component.fragment !== undefined) {\n    uriTokens.push('#', component.fragment)\n  }\n  return uriTokens.join('')\n}\n\nconst URI_PARSE = /^(?:([^#/:?]+):)?(?:\\/\\/((?:([^#/?@]*)@)?(\\[[^#/?\\]]+\\]|[^#/:?]*)(?::(\\d*))?))?([^#?]*)(?:\\?([^#]*))?(?:#((?:.|[\\n\\r])*))?/u\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns\n */\nfunction parse (uri, opts) {\n  const options = Object.assign({}, opts)\n  /** @type {import('./types/index').URIComponent} */\n  const parsed = {\n    scheme: undefined,\n    userinfo: undefined,\n    host: '',\n    port: undefined,\n    path: '',\n    query: undefined,\n    fragment: undefined\n  }\n\n  let isIP = false\n  if (options.reference === 'suffix') {\n    if (options.scheme) {\n      uri = options.scheme + ':' + uri\n    } else {\n      uri = '//' + uri\n    }\n  }\n\n  const matches = uri.match(URI_PARSE)\n\n  if (matches) {\n    // store each component\n    parsed.scheme = matches[1]\n    parsed.userinfo = matches[3]\n    parsed.host = matches[4]\n    parsed.port = parseInt(matches[5], 10)\n    parsed.path = matches[6] || ''\n    parsed.query = matches[7]\n    parsed.fragment = matches[8]\n\n    // fix port number\n    if (isNaN(parsed.port)) {\n      parsed.port = matches[5]\n    }\n    if (parsed.host) {\n      const ipv4result = isIPv4(parsed.host)\n      if (ipv4result === false) {\n        const ipv6result = normalizeIPv6(parsed.host)\n        parsed.host = ipv6result.host.toLowerCase()\n        isIP = ipv6result.isIPV6\n      } else {\n        isIP = true\n      }\n    }\n    if (parsed.scheme === undefined && parsed.userinfo === undefined && parsed.host === undefined && parsed.port === undefined && parsed.query === undefined && !parsed.path) {\n      parsed.reference = 'same-document'\n    } else if (parsed.scheme === undefined) {\n      parsed.reference = 'relative'\n    } else if (parsed.fragment === undefined) {\n      parsed.reference = 'absolute'\n    } else {\n      parsed.reference = 'uri'\n    }\n\n    // check for reference errors\n    if (options.reference && options.reference !== 'suffix' && options.reference !== parsed.reference) {\n      parsed.error = parsed.error || 'URI is not a ' + options.reference + ' reference.'\n    }\n\n    // find scheme handler\n    const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme)\n\n    // check if scheme can't handle IRIs\n    if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n      // if host component is a domain name\n      if (parsed.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost)) && isIP === false && nonSimpleDomain(parsed.host)) {\n        // convert Unicode IDN -> ASCII IDN\n        try {\n          parsed.host = URL.domainToASCII(parsed.host.toLowerCase())\n        } catch (e) {\n          parsed.error = parsed.error || \"Host's domain name can not be converted to ASCII: \" + e\n        }\n      }\n      // convert IRI -> URI\n    }\n\n    if (!schemeHandler || (schemeHandler && !schemeHandler.skipNormalize)) {\n      if (uri.indexOf('%') !== -1) {\n        if (parsed.scheme !== undefined) {\n          parsed.scheme = unescape(parsed.scheme)\n        }\n        if (parsed.host !== undefined) {\n          parsed.host = unescape(parsed.host)\n        }\n      }\n      if (parsed.path) {\n        parsed.path = escape(unescape(parsed.path))\n      }\n      if (parsed.fragment) {\n        parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment))\n      }\n    }\n\n    // perform scheme specific parsing\n    if (schemeHandler && schemeHandler.parse) {\n      schemeHandler.parse(parsed, options)\n    }\n  } else {\n    parsed.error = parsed.error || 'URI can not be parsed.'\n  }\n  return parsed\n}\n\nconst fastUri = {\n  SCHEMES,\n  normalize,\n  resolve,\n  resolveComponent,\n  equal,\n  serialize,\n  parse\n}\n\nmodule.exports = fastUri\nmodule.exports.default = fastUri\nmodule.exports.fastUri = fastUri\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst uri = require(\"fast-uri\");\nuri.code = 'require(\"ajv/dist/runtime/uri\").default';\nexports.default = uri;\n//# sourceMappingURL=uri.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = void 0;\nvar validate_1 = require(\"./compile/validate\");\nObject.defineProperty(exports, \"KeywordCxt\", { enumerable: true, get: function () { return validate_1.KeywordCxt; } });\nvar codegen_1 = require(\"./compile/codegen\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return codegen_1._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return codegen_1.str; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return codegen_1.stringify; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return codegen_1.nil; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return codegen_1.Name; } });\nObject.defineProperty(exports, \"CodeGen\", { enumerable: true, get: function () { return codegen_1.CodeGen; } });\nconst validation_error_1 = require(\"./runtime/validation_error\");\nconst ref_error_1 = require(\"./compile/ref_error\");\nconst rules_1 = require(\"./compile/rules\");\nconst compile_1 = require(\"./compile\");\nconst codegen_2 = require(\"./compile/codegen\");\nconst resolve_1 = require(\"./compile/resolve\");\nconst dataType_1 = require(\"./compile/validate/dataType\");\nconst util_1 = require(\"./compile/util\");\nconst $dataRefSchema = require(\"./refs/data.json\");\nconst uri_1 = require(\"./runtime/uri\");\nconst defaultRegExp = (str, flags) => new RegExp(str, flags);\ndefaultRegExp.code = \"new RegExp\";\nconst META_IGNORE_OPTIONS = [\"removeAdditional\", \"useDefaults\", \"coerceTypes\"];\nconst EXT_SCOPE_NAMES = new Set([\n    \"validate\",\n    \"serialize\",\n    \"parse\",\n    \"wrapper\",\n    \"root\",\n    \"schema\",\n    \"keyword\",\n    \"pattern\",\n    \"formats\",\n    \"validate$data\",\n    \"func\",\n    \"obj\",\n    \"Error\",\n]);\nconst removedOptions = {\n    errorDataPath: \"\",\n    format: \"`validateFormats: false` can be used instead.\",\n    nullable: '\"nullable\" keyword is supported by default.',\n    jsonPointers: \"Deprecated jsPropertySyntax can be used instead.\",\n    extendRefs: \"Deprecated ignoreKeywordsWithRef can be used instead.\",\n    missingRefs: \"Pass empty schema with $id that should be ignored to ajv.addSchema.\",\n    processCode: \"Use option `code: {process: (code, schemaEnv: object) => string}`\",\n    sourceCode: \"Use option `code: {source: true}`\",\n    strictDefaults: \"It is default now, see option `strict`.\",\n    strictKeywords: \"It is default now, see option `strict`.\",\n    uniqueItems: '\"uniqueItems\" keyword is always validated.',\n    unknownFormats: \"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).\",\n    cache: \"Map is used as cache, schema object as key.\",\n    serialize: \"Map is used as cache, schema object as key.\",\n    ajvErrors: \"It is default now.\",\n};\nconst deprecatedOptions = {\n    ignoreKeywordsWithRef: \"\",\n    jsPropertySyntax: \"\",\n    unicode: '\"minLength\"/\"maxLength\" account for unicode characters by default.',\n};\nconst MAX_EXPRESSION = 200;\n// eslint-disable-next-line complexity\nfunction requiredOptions(o) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;\n    const s = o.strict;\n    const _optz = (_a = o.code) === null || _a === void 0 ? void 0 : _a.optimize;\n    const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0;\n    const regExp = (_c = (_b = o.code) === null || _b === void 0 ? void 0 : _b.regExp) !== null && _c !== void 0 ? _c : defaultRegExp;\n    const uriResolver = (_d = o.uriResolver) !== null && _d !== void 0 ? _d : uri_1.default;\n    return {\n        strictSchema: (_f = (_e = o.strictSchema) !== null && _e !== void 0 ? _e : s) !== null && _f !== void 0 ? _f : true,\n        strictNumbers: (_h = (_g = o.strictNumbers) !== null && _g !== void 0 ? _g : s) !== null && _h !== void 0 ? _h : true,\n        strictTypes: (_k = (_j = o.strictTypes) !== null && _j !== void 0 ? _j : s) !== null && _k !== void 0 ? _k : \"log\",\n        strictTuples: (_m = (_l = o.strictTuples) !== null && _l !== void 0 ? _l : s) !== null && _m !== void 0 ? _m : \"log\",\n        strictRequired: (_p = (_o = o.strictRequired) !== null && _o !== void 0 ? _o : s) !== null && _p !== void 0 ? _p : false,\n        code: o.code ? { ...o.code, optimize, regExp } : { optimize, regExp },\n        loopRequired: (_q = o.loopRequired) !== null && _q !== void 0 ? _q : MAX_EXPRESSION,\n        loopEnum: (_r = o.loopEnum) !== null && _r !== void 0 ? _r : MAX_EXPRESSION,\n        meta: (_s = o.meta) !== null && _s !== void 0 ? _s : true,\n        messages: (_t = o.messages) !== null && _t !== void 0 ? _t : true,\n        inlineRefs: (_u = o.inlineRefs) !== null && _u !== void 0 ? _u : true,\n        schemaId: (_v = o.schemaId) !== null && _v !== void 0 ? _v : \"$id\",\n        addUsedSchema: (_w = o.addUsedSchema) !== null && _w !== void 0 ? _w : true,\n        validateSchema: (_x = o.validateSchema) !== null && _x !== void 0 ? _x : true,\n        validateFormats: (_y = o.validateFormats) !== null && _y !== void 0 ? _y : true,\n        unicodeRegExp: (_z = o.unicodeRegExp) !== null && _z !== void 0 ? _z : true,\n        int32range: (_0 = o.int32range) !== null && _0 !== void 0 ? _0 : true,\n        uriResolver: uriResolver,\n    };\n}\nclass Ajv {\n    constructor(opts = {}) {\n        this.schemas = {};\n        this.refs = {};\n        this.formats = {};\n        this._compilations = new Set();\n        this._loading = {};\n        this._cache = new Map();\n        opts = this.opts = { ...opts, ...requiredOptions(opts) };\n        const { es5, lines } = this.opts.code;\n        this.scope = new codegen_2.ValueScope({ scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines });\n        this.logger = getLogger(opts.logger);\n        const formatOpt = opts.validateFormats;\n        opts.validateFormats = false;\n        this.RULES = (0, rules_1.getRules)();\n        checkOptions.call(this, removedOptions, opts, \"NOT SUPPORTED\");\n        checkOptions.call(this, deprecatedOptions, opts, \"DEPRECATED\", \"warn\");\n        this._metaOpts = getMetaSchemaOptions.call(this);\n        if (opts.formats)\n            addInitialFormats.call(this);\n        this._addVocabularies();\n        this._addDefaultMetaSchema();\n        if (opts.keywords)\n            addInitialKeywords.call(this, opts.keywords);\n        if (typeof opts.meta == \"object\")\n            this.addMetaSchema(opts.meta);\n        addInitialSchemas.call(this);\n        opts.validateFormats = formatOpt;\n    }\n    _addVocabularies() {\n        this.addKeyword(\"$async\");\n    }\n    _addDefaultMetaSchema() {\n        const { $data, meta, schemaId } = this.opts;\n        let _dataRefSchema = $dataRefSchema;\n        if (schemaId === \"id\") {\n            _dataRefSchema = { ...$dataRefSchema };\n            _dataRefSchema.id = _dataRefSchema.$id;\n            delete _dataRefSchema.$id;\n        }\n        if (meta && $data)\n            this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false);\n    }\n    defaultMeta() {\n        const { meta, schemaId } = this.opts;\n        return (this.opts.defaultMeta = typeof meta == \"object\" ? meta[schemaId] || meta : undefined);\n    }\n    validate(schemaKeyRef, // key, ref or schema object\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    data // to be validated\n    ) {\n        let v;\n        if (typeof schemaKeyRef == \"string\") {\n            v = this.getSchema(schemaKeyRef);\n            if (!v)\n                throw new Error(`no schema with key or ref \"${schemaKeyRef}\"`);\n        }\n        else {\n            v = this.compile(schemaKeyRef);\n        }\n        const valid = v(data);\n        if (!(\"$async\" in v))\n            this.errors = v.errors;\n        return valid;\n    }\n    compile(schema, _meta) {\n        const sch = this._addSchema(schema, _meta);\n        return (sch.validate || this._compileSchemaEnv(sch));\n    }\n    compileAsync(schema, meta) {\n        if (typeof this.opts.loadSchema != \"function\") {\n            throw new Error(\"options.loadSchema should be a function\");\n        }\n        const { loadSchema } = this.opts;\n        return runCompileAsync.call(this, schema, meta);\n        async function runCompileAsync(_schema, _meta) {\n            await loadMetaSchema.call(this, _schema.$schema);\n            const sch = this._addSchema(_schema, _meta);\n            return sch.validate || _compileAsync.call(this, sch);\n        }\n        async function loadMetaSchema($ref) {\n            if ($ref && !this.getSchema($ref)) {\n                await runCompileAsync.call(this, { $ref }, true);\n            }\n        }\n        async function _compileAsync(sch) {\n            try {\n                return this._compileSchemaEnv(sch);\n            }\n            catch (e) {\n                if (!(e instanceof ref_error_1.default))\n                    throw e;\n                checkLoaded.call(this, e);\n                await loadMissingSchema.call(this, e.missingSchema);\n                return _compileAsync.call(this, sch);\n            }\n        }\n        function checkLoaded({ missingSchema: ref, missingRef }) {\n            if (this.refs[ref]) {\n                throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`);\n            }\n        }\n        async function loadMissingSchema(ref) {\n            const _schema = await _loadSchema.call(this, ref);\n            if (!this.refs[ref])\n                await loadMetaSchema.call(this, _schema.$schema);\n            if (!this.refs[ref])\n                this.addSchema(_schema, ref, meta);\n        }\n        async function _loadSchema(ref) {\n            const p = this._loading[ref];\n            if (p)\n                return p;\n            try {\n                return await (this._loading[ref] = loadSchema(ref));\n            }\n            finally {\n                delete this._loading[ref];\n            }\n        }\n    }\n    // Adds schema to the instance\n    addSchema(schema, // If array is passed, `key` will be ignored\n    key, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n    _meta, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n    _validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead.\n    ) {\n        if (Array.isArray(schema)) {\n            for (const sch of schema)\n                this.addSchema(sch, undefined, _meta, _validateSchema);\n            return this;\n        }\n        let id;\n        if (typeof schema === \"object\") {\n            const { schemaId } = this.opts;\n            id = schema[schemaId];\n            if (id !== undefined && typeof id != \"string\") {\n                throw new Error(`schema ${schemaId} must be string`);\n            }\n        }\n        key = (0, resolve_1.normalizeId)(key || id);\n        this._checkUnique(key);\n        this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true);\n        return this;\n    }\n    // Add schema that will be used to validate other schemas\n    // options in META_IGNORE_OPTIONS are alway set to false\n    addMetaSchema(schema, key, // schema key\n    _validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema\n    ) {\n        this.addSchema(schema, key, true, _validateSchema);\n        return this;\n    }\n    //  Validate schema against its meta-schema\n    validateSchema(schema, throwOrLogError) {\n        if (typeof schema == \"boolean\")\n            return true;\n        let $schema;\n        $schema = schema.$schema;\n        if ($schema !== undefined && typeof $schema != \"string\") {\n            throw new Error(\"$schema must be a string\");\n        }\n        $schema = $schema || this.opts.defaultMeta || this.defaultMeta();\n        if (!$schema) {\n            this.logger.warn(\"meta-schema not available\");\n            this.errors = null;\n            return true;\n        }\n        const valid = this.validate($schema, schema);\n        if (!valid && throwOrLogError) {\n            const message = \"schema is invalid: \" + this.errorsText();\n            if (this.opts.validateSchema === \"log\")\n                this.logger.error(message);\n            else\n                throw new Error(message);\n        }\n        return valid;\n    }\n    // Get compiled schema by `key` or `ref`.\n    // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id)\n    getSchema(keyRef) {\n        let sch;\n        while (typeof (sch = getSchEnv.call(this, keyRef)) == \"string\")\n            keyRef = sch;\n        if (sch === undefined) {\n            const { schemaId } = this.opts;\n            const root = new compile_1.SchemaEnv({ schema: {}, schemaId });\n            sch = compile_1.resolveSchema.call(this, root, keyRef);\n            if (!sch)\n                return;\n            this.refs[keyRef] = sch;\n        }\n        return (sch.validate || this._compileSchemaEnv(sch));\n    }\n    // Remove cached schema(s).\n    // If no parameter is passed all schemas but meta-schemas are removed.\n    // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n    // Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n    removeSchema(schemaKeyRef) {\n        if (schemaKeyRef instanceof RegExp) {\n            this._removeAllSchemas(this.schemas, schemaKeyRef);\n            this._removeAllSchemas(this.refs, schemaKeyRef);\n            return this;\n        }\n        switch (typeof schemaKeyRef) {\n            case \"undefined\":\n                this._removeAllSchemas(this.schemas);\n                this._removeAllSchemas(this.refs);\n                this._cache.clear();\n                return this;\n            case \"string\": {\n                const sch = getSchEnv.call(this, schemaKeyRef);\n                if (typeof sch == \"object\")\n                    this._cache.delete(sch.schema);\n                delete this.schemas[schemaKeyRef];\n                delete this.refs[schemaKeyRef];\n                return this;\n            }\n            case \"object\": {\n                const cacheKey = schemaKeyRef;\n                this._cache.delete(cacheKey);\n                let id = schemaKeyRef[this.opts.schemaId];\n                if (id) {\n                    id = (0, resolve_1.normalizeId)(id);\n                    delete this.schemas[id];\n                    delete this.refs[id];\n                }\n                return this;\n            }\n            default:\n                throw new Error(\"ajv.removeSchema: invalid parameter\");\n        }\n    }\n    // add \"vocabulary\" - a collection of keywords\n    addVocabulary(definitions) {\n        for (const def of definitions)\n            this.addKeyword(def);\n        return this;\n    }\n    addKeyword(kwdOrDef, def // deprecated\n    ) {\n        let keyword;\n        if (typeof kwdOrDef == \"string\") {\n            keyword = kwdOrDef;\n            if (typeof def == \"object\") {\n                this.logger.warn(\"these parameters are deprecated, see docs for addKeyword\");\n                def.keyword = keyword;\n            }\n        }\n        else if (typeof kwdOrDef == \"object\" && def === undefined) {\n            def = kwdOrDef;\n            keyword = def.keyword;\n            if (Array.isArray(keyword) && !keyword.length) {\n                throw new Error(\"addKeywords: keyword must be string or non-empty array\");\n            }\n        }\n        else {\n            throw new Error(\"invalid addKeywords parameters\");\n        }\n        checkKeyword.call(this, keyword, def);\n        if (!def) {\n            (0, util_1.eachItem)(keyword, (kwd) => addRule.call(this, kwd));\n            return this;\n        }\n        keywordMetaschema.call(this, def);\n        const definition = {\n            ...def,\n            type: (0, dataType_1.getJSONTypes)(def.type),\n            schemaType: (0, dataType_1.getJSONTypes)(def.schemaType),\n        };\n        (0, util_1.eachItem)(keyword, definition.type.length === 0\n            ? (k) => addRule.call(this, k, definition)\n            : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t)));\n        return this;\n    }\n    getKeyword(keyword) {\n        const rule = this.RULES.all[keyword];\n        return typeof rule == \"object\" ? rule.definition : !!rule;\n    }\n    // Remove keyword\n    removeKeyword(keyword) {\n        // TODO return type should be Ajv\n        const { RULES } = this;\n        delete RULES.keywords[keyword];\n        delete RULES.all[keyword];\n        for (const group of RULES.rules) {\n            const i = group.rules.findIndex((rule) => rule.keyword === keyword);\n            if (i >= 0)\n                group.rules.splice(i, 1);\n        }\n        return this;\n    }\n    // Add format\n    addFormat(name, format) {\n        if (typeof format == \"string\")\n            format = new RegExp(format);\n        this.formats[name] = format;\n        return this;\n    }\n    errorsText(errors = this.errors, // optional array of validation errors\n    { separator = \", \", dataVar = \"data\" } = {} // optional options with properties `separator` and `dataVar`\n    ) {\n        if (!errors || errors.length === 0)\n            return \"No errors\";\n        return errors\n            .map((e) => `${dataVar}${e.instancePath} ${e.message}`)\n            .reduce((text, msg) => text + separator + msg);\n    }\n    $dataMetaSchema(metaSchema, keywordsJsonPointers) {\n        const rules = this.RULES.all;\n        metaSchema = JSON.parse(JSON.stringify(metaSchema));\n        for (const jsonPointer of keywordsJsonPointers) {\n            const segments = jsonPointer.split(\"/\").slice(1); // first segment is an empty string\n            let keywords = metaSchema;\n            for (const seg of segments)\n                keywords = keywords[seg];\n            for (const key in rules) {\n                const rule = rules[key];\n                if (typeof rule != \"object\")\n                    continue;\n                const { $data } = rule.definition;\n                const schema = keywords[key];\n                if ($data && schema)\n                    keywords[key] = schemaOrData(schema);\n            }\n        }\n        return metaSchema;\n    }\n    _removeAllSchemas(schemas, regex) {\n        for (const keyRef in schemas) {\n            const sch = schemas[keyRef];\n            if (!regex || regex.test(keyRef)) {\n                if (typeof sch == \"string\") {\n                    delete schemas[keyRef];\n                }\n                else if (sch && !sch.meta) {\n                    this._cache.delete(sch.schema);\n                    delete schemas[keyRef];\n                }\n            }\n        }\n    }\n    _addSchema(schema, meta, baseId, validateSchema = this.opts.validateSchema, addSchema = this.opts.addUsedSchema) {\n        let id;\n        const { schemaId } = this.opts;\n        if (typeof schema == \"object\") {\n            id = schema[schemaId];\n        }\n        else {\n            if (this.opts.jtd)\n                throw new Error(\"schema must be object\");\n            else if (typeof schema != \"boolean\")\n                throw new Error(\"schema must be object or boolean\");\n        }\n        let sch = this._cache.get(schema);\n        if (sch !== undefined)\n            return sch;\n        baseId = (0, resolve_1.normalizeId)(id || baseId);\n        const localRefs = resolve_1.getSchemaRefs.call(this, schema, baseId);\n        sch = new compile_1.SchemaEnv({ schema, schemaId, meta, baseId, localRefs });\n        this._cache.set(sch.schema, sch);\n        if (addSchema && !baseId.startsWith(\"#\")) {\n            // TODO atm it is allowed to overwrite schemas without id (instead of not adding them)\n            if (baseId)\n                this._checkUnique(baseId);\n            this.refs[baseId] = sch;\n        }\n        if (validateSchema)\n            this.validateSchema(schema, true);\n        return sch;\n    }\n    _checkUnique(id) {\n        if (this.schemas[id] || this.refs[id]) {\n            throw new Error(`schema with key or id \"${id}\" already exists`);\n        }\n    }\n    _compileSchemaEnv(sch) {\n        if (sch.meta)\n            this._compileMetaSchema(sch);\n        else\n            compile_1.compileSchema.call(this, sch);\n        /* istanbul ignore if */\n        if (!sch.validate)\n            throw new Error(\"ajv implementation error\");\n        return sch.validate;\n    }\n    _compileMetaSchema(sch) {\n        const currentOpts = this.opts;\n        this.opts = this._metaOpts;\n        try {\n            compile_1.compileSchema.call(this, sch);\n        }\n        finally {\n            this.opts = currentOpts;\n        }\n    }\n}\nAjv.ValidationError = validation_error_1.default;\nAjv.MissingRefError = ref_error_1.default;\nexports.default = Ajv;\nfunction checkOptions(checkOpts, options, msg, log = \"error\") {\n    for (const key in checkOpts) {\n        const opt = key;\n        if (opt in options)\n            this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`);\n    }\n}\nfunction getSchEnv(keyRef) {\n    keyRef = (0, resolve_1.normalizeId)(keyRef); // TODO tests fail without this line\n    return this.schemas[keyRef] || this.refs[keyRef];\n}\nfunction addInitialSchemas() {\n    const optsSchemas = this.opts.schemas;\n    if (!optsSchemas)\n        return;\n    if (Array.isArray(optsSchemas))\n        this.addSchema(optsSchemas);\n    else\n        for (const key in optsSchemas)\n            this.addSchema(optsSchemas[key], key);\n}\nfunction addInitialFormats() {\n    for (const name in this.opts.formats) {\n        const format = this.opts.formats[name];\n        if (format)\n            this.addFormat(name, format);\n    }\n}\nfunction addInitialKeywords(defs) {\n    if (Array.isArray(defs)) {\n        this.addVocabulary(defs);\n        return;\n    }\n    this.logger.warn(\"keywords option as map is deprecated, pass array\");\n    for (const keyword in defs) {\n        const def = defs[keyword];\n        if (!def.keyword)\n            def.keyword = keyword;\n        this.addKeyword(def);\n    }\n}\nfunction getMetaSchemaOptions() {\n    const metaOpts = { ...this.opts };\n    for (const opt of META_IGNORE_OPTIONS)\n        delete metaOpts[opt];\n    return metaOpts;\n}\nconst noLogs = { log() { }, warn() { }, error() { } };\nfunction getLogger(logger) {\n    if (logger === false)\n        return noLogs;\n    if (logger === undefined)\n        return console;\n    if (logger.log && logger.warn && logger.error)\n        return logger;\n    throw new Error(\"logger must implement log, warn and error methods\");\n}\nconst KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i;\nfunction checkKeyword(keyword, def) {\n    const { RULES } = this;\n    (0, util_1.eachItem)(keyword, (kwd) => {\n        if (RULES.keywords[kwd])\n            throw new Error(`Keyword ${kwd} is already defined`);\n        if (!KEYWORD_NAME.test(kwd))\n            throw new Error(`Keyword ${kwd} has invalid name`);\n    });\n    if (!def)\n        return;\n    if (def.$data && !(\"code\" in def || \"validate\" in def)) {\n        throw new Error('$data keyword must have \"code\" or \"validate\" function');\n    }\n}\nfunction addRule(keyword, definition, dataType) {\n    var _a;\n    const post = definition === null || definition === void 0 ? void 0 : definition.post;\n    if (dataType && post)\n        throw new Error('keyword with \"post\" flag cannot have \"type\"');\n    const { RULES } = this;\n    let ruleGroup = post ? RULES.post : RULES.rules.find(({ type: t }) => t === dataType);\n    if (!ruleGroup) {\n        ruleGroup = { type: dataType, rules: [] };\n        RULES.rules.push(ruleGroup);\n    }\n    RULES.keywords[keyword] = true;\n    if (!definition)\n        return;\n    const rule = {\n        keyword,\n        definition: {\n            ...definition,\n            type: (0, dataType_1.getJSONTypes)(definition.type),\n            schemaType: (0, dataType_1.getJSONTypes)(definition.schemaType),\n        },\n    };\n    if (definition.before)\n        addBeforeRule.call(this, ruleGroup, rule, definition.before);\n    else\n        ruleGroup.rules.push(rule);\n    RULES.all[keyword] = rule;\n    (_a = definition.implements) === null || _a === void 0 ? void 0 : _a.forEach((kwd) => this.addKeyword(kwd));\n}\nfunction addBeforeRule(ruleGroup, rule, before) {\n    const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before);\n    if (i >= 0) {\n        ruleGroup.rules.splice(i, 0, rule);\n    }\n    else {\n        ruleGroup.rules.push(rule);\n        this.logger.warn(`rule ${before} is not defined`);\n    }\n}\nfunction keywordMetaschema(def) {\n    let { metaSchema } = def;\n    if (metaSchema === undefined)\n        return;\n    if (def.$data && this.opts.$data)\n        metaSchema = schemaOrData(metaSchema);\n    def.validateSchema = this.compile(metaSchema, true);\n}\nconst $dataRef = {\n    $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n};\nfunction schemaOrData(schema) {\n    return { anyOf: [schema, $dataRef] };\n}\n//# sourceMappingURL=core.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst def = {\n    keyword: \"id\",\n    code() {\n        throw new Error('NOT SUPPORTED: keyword \"id\", use \"$id\" for schema ID');\n    },\n};\nexports.default = def;\n//# sourceMappingURL=id.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.callRef = exports.getValidate = void 0;\nconst ref_error_1 = require(\"../../compile/ref_error\");\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst compile_1 = require(\"../../compile\");\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n    keyword: \"$ref\",\n    schemaType: \"string\",\n    code(cxt) {\n        const { gen, schema: $ref, it } = cxt;\n        const { baseId, schemaEnv: env, validateName, opts, self } = it;\n        const { root } = env;\n        if (($ref === \"#\" || $ref === \"#/\") && baseId === root.baseId)\n            return callRootRef();\n        const schOrEnv = compile_1.resolveRef.call(self, root, baseId, $ref);\n        if (schOrEnv === undefined)\n            throw new ref_error_1.default(it.opts.uriResolver, baseId, $ref);\n        if (schOrEnv instanceof compile_1.SchemaEnv)\n            return callValidate(schOrEnv);\n        return inlineRefSchema(schOrEnv);\n        function callRootRef() {\n            if (env === root)\n                return callRef(cxt, validateName, env, env.$async);\n            const rootName = gen.scopeValue(\"root\", { ref: root });\n            return callRef(cxt, (0, codegen_1._) `${rootName}.validate`, root, root.$async);\n        }\n        function callValidate(sch) {\n            const v = getValidate(cxt, sch);\n            callRef(cxt, v, sch, sch.$async);\n        }\n        function inlineRefSchema(sch) {\n            const schName = gen.scopeValue(\"schema\", opts.code.source === true ? { ref: sch, code: (0, codegen_1.stringify)(sch) } : { ref: sch });\n            const valid = gen.name(\"valid\");\n            const schCxt = cxt.subschema({\n                schema: sch,\n                dataTypes: [],\n                schemaPath: codegen_1.nil,\n                topSchemaRef: schName,\n                errSchemaPath: $ref,\n            }, valid);\n            cxt.mergeEvaluated(schCxt);\n            cxt.ok(valid);\n        }\n    },\n};\nfunction getValidate(cxt, sch) {\n    const { gen } = cxt;\n    return sch.validate\n        ? gen.scopeValue(\"validate\", { ref: sch.validate })\n        : (0, codegen_1._) `${gen.scopeValue(\"wrapper\", { ref: sch })}.validate`;\n}\nexports.getValidate = getValidate;\nfunction callRef(cxt, v, sch, $async) {\n    const { gen, it } = cxt;\n    const { allErrors, schemaEnv: env, opts } = it;\n    const passCxt = opts.passContext ? names_1.default.this : codegen_1.nil;\n    if ($async)\n        callAsyncRef();\n    else\n        callSyncRef();\n    function callAsyncRef() {\n        if (!env.$async)\n            throw new Error(\"async schema referenced by sync schema\");\n        const valid = gen.let(\"valid\");\n        gen.try(() => {\n            gen.code((0, codegen_1._) `await ${(0, code_1.callValidateCode)(cxt, v, passCxt)}`);\n            addEvaluatedFrom(v); // TODO will not work with async, it has to be returned with the result\n            if (!allErrors)\n                gen.assign(valid, true);\n        }, (e) => {\n            gen.if((0, codegen_1._) `!(${e} instanceof ${it.ValidationError})`, () => gen.throw(e));\n            addErrorsFrom(e);\n            if (!allErrors)\n                gen.assign(valid, false);\n        });\n        cxt.ok(valid);\n    }\n    function callSyncRef() {\n        cxt.result((0, code_1.callValidateCode)(cxt, v, passCxt), () => addEvaluatedFrom(v), () => addErrorsFrom(v));\n    }\n    function addErrorsFrom(source) {\n        const errs = (0, codegen_1._) `${source}.errors`;\n        gen.assign(names_1.default.vErrors, (0, codegen_1._) `${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`); // TODO tagged\n        gen.assign(names_1.default.errors, (0, codegen_1._) `${names_1.default.vErrors}.length`);\n    }\n    function addEvaluatedFrom(source) {\n        var _a;\n        if (!it.opts.unevaluated)\n            return;\n        const schEvaluated = (_a = sch === null || sch === void 0 ? void 0 : sch.validate) === null || _a === void 0 ? void 0 : _a.evaluated;\n        // TODO refactor\n        if (it.props !== true) {\n            if (schEvaluated && !schEvaluated.dynamicProps) {\n                if (schEvaluated.props !== undefined) {\n                    it.props = util_1.mergeEvaluated.props(gen, schEvaluated.props, it.props);\n                }\n            }\n            else {\n                const props = gen.var(\"props\", (0, codegen_1._) `${source}.evaluated.props`);\n                it.props = util_1.mergeEvaluated.props(gen, props, it.props, codegen_1.Name);\n            }\n        }\n        if (it.items !== true) {\n            if (schEvaluated && !schEvaluated.dynamicItems) {\n                if (schEvaluated.items !== undefined) {\n                    it.items = util_1.mergeEvaluated.items(gen, schEvaluated.items, it.items);\n                }\n            }\n            else {\n                const items = gen.var(\"items\", (0, codegen_1._) `${source}.evaluated.items`);\n                it.items = util_1.mergeEvaluated.items(gen, items, it.items, codegen_1.Name);\n            }\n        }\n    }\n}\nexports.callRef = callRef;\nexports.default = def;\n//# sourceMappingURL=ref.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst id_1 = require(\"./id\");\nconst ref_1 = require(\"./ref\");\nconst core = [\n    \"$schema\",\n    \"$id\",\n    \"$defs\",\n    \"$vocabulary\",\n    { keyword: \"$comment\" },\n    \"definitions\",\n    id_1.default,\n    ref_1.default,\n];\nexports.default = core;\n//# sourceMappingURL=index.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst ops = codegen_1.operators;\nconst KWDs = {\n    maximum: { okStr: \"<=\", ok: ops.LTE, fail: ops.GT },\n    minimum: { okStr: \">=\", ok: ops.GTE, fail: ops.LT },\n    exclusiveMaximum: { okStr: \"<\", ok: ops.LT, fail: ops.GTE },\n    exclusiveMinimum: { okStr: \">\", ok: ops.GT, fail: ops.LTE },\n};\nconst error = {\n    message: ({ keyword, schemaCode }) => (0, codegen_1.str) `must be ${KWDs[keyword].okStr} ${schemaCode}`,\n    params: ({ keyword, schemaCode }) => (0, codegen_1._) `{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}`,\n};\nconst def = {\n    keyword: Object.keys(KWDs),\n    type: \"number\",\n    schemaType: \"number\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { keyword, data, schemaCode } = cxt;\n        cxt.fail$data((0, codegen_1._) `${data} ${KWDs[keyword].fail} ${schemaCode} || isNaN(${data})`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=limitNumber.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n    message: ({ schemaCode }) => (0, codegen_1.str) `must be multiple of ${schemaCode}`,\n    params: ({ schemaCode }) => (0, codegen_1._) `{multipleOf: ${schemaCode}}`,\n};\nconst def = {\n    keyword: \"multipleOf\",\n    type: \"number\",\n    schemaType: \"number\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { gen, data, schemaCode, it } = cxt;\n        // const bdt = bad$DataType(schemaCode, <string>def.schemaType, $data)\n        const prec = it.opts.multipleOfPrecision;\n        const res = gen.let(\"res\");\n        const invalid = prec\n            ? (0, codegen_1._) `Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`\n            : (0, codegen_1._) `${res} !== parseInt(${res})`;\n        cxt.fail$data((0, codegen_1._) `(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=multipleOf.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nfunction ucs2length(str) {\n    const len = str.length;\n    let length = 0;\n    let pos = 0;\n    let value;\n    while (pos < len) {\n        length++;\n        value = str.charCodeAt(pos++);\n        if (value >= 0xd800 && value <= 0xdbff && pos < len) {\n            // high surrogate, and there is a next character\n            value = str.charCodeAt(pos);\n            if ((value & 0xfc00) === 0xdc00)\n                pos++; // low surrogate\n        }\n    }\n    return length;\n}\nexports.default = ucs2length;\nucs2length.code = 'require(\"ajv/dist/runtime/ucs2length\").default';\n//# sourceMappingURL=ucs2length.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst ucs2length_1 = require(\"../../runtime/ucs2length\");\nconst error = {\n    message({ keyword, schemaCode }) {\n        const comp = keyword === \"maxLength\" ? \"more\" : \"fewer\";\n        return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} characters`;\n    },\n    params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n    keyword: [\"maxLength\", \"minLength\"],\n    type: \"string\",\n    schemaType: \"number\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { keyword, data, schemaCode, it } = cxt;\n        const op = keyword === \"maxLength\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n        const len = it.opts.unicode === false ? (0, codegen_1._) `${data}.length` : (0, codegen_1._) `${(0, util_1.useFunc)(cxt.gen, ucs2length_1.default)}(${data})`;\n        cxt.fail$data((0, codegen_1._) `${len} ${op} ${schemaCode}`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=limitLength.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst util_1 = require(\"../../compile/util\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n    message: ({ schemaCode }) => (0, codegen_1.str) `must match pattern \"${schemaCode}\"`,\n    params: ({ schemaCode }) => (0, codegen_1._) `{pattern: ${schemaCode}}`,\n};\nconst def = {\n    keyword: \"pattern\",\n    type: \"string\",\n    schemaType: \"string\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { gen, data, $data, schema, schemaCode, it } = cxt;\n        const u = it.opts.unicodeRegExp ? \"u\" : \"\";\n        if ($data) {\n            const { regExp } = it.opts.code;\n            const regExpCode = regExp.code === \"new RegExp\" ? (0, codegen_1._) `new RegExp` : (0, util_1.useFunc)(gen, regExp);\n            const valid = gen.let(\"valid\");\n            gen.try(() => gen.assign(valid, (0, codegen_1._) `${regExpCode}(${schemaCode}, ${u}).test(${data})`), () => gen.assign(valid, false));\n            cxt.fail$data((0, codegen_1._) `!${valid}`);\n        }\n        else {\n            const regExp = (0, code_1.usePattern)(cxt, schema);\n            cxt.fail$data((0, codegen_1._) `!${regExp}.test(${data})`);\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=pattern.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n    message({ keyword, schemaCode }) {\n        const comp = keyword === \"maxProperties\" ? \"more\" : \"fewer\";\n        return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} properties`;\n    },\n    params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n    keyword: [\"maxProperties\", \"minProperties\"],\n    type: \"object\",\n    schemaType: \"number\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { keyword, data, schemaCode } = cxt;\n        const op = keyword === \"maxProperties\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n        cxt.fail$data((0, codegen_1._) `Object.keys(${data}).length ${op} ${schemaCode}`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=limitProperties.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: ({ params: { missingProperty } }) => (0, codegen_1.str) `must have required property '${missingProperty}'`,\n    params: ({ params: { missingProperty } }) => (0, codegen_1._) `{missingProperty: ${missingProperty}}`,\n};\nconst def = {\n    keyword: \"required\",\n    type: \"object\",\n    schemaType: \"array\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { gen, schema, schemaCode, data, $data, it } = cxt;\n        const { opts } = it;\n        if (!$data && schema.length === 0)\n            return;\n        const useLoop = schema.length >= opts.loopRequired;\n        if (it.allErrors)\n            allErrorsMode();\n        else\n            exitOnErrorMode();\n        if (opts.strictRequired) {\n            const props = cxt.parentSchema.properties;\n            const { definedProperties } = cxt.it;\n            for (const requiredKey of schema) {\n                if ((props === null || props === void 0 ? void 0 : props[requiredKey]) === undefined && !definedProperties.has(requiredKey)) {\n                    const schemaPath = it.schemaEnv.baseId + it.errSchemaPath;\n                    const msg = `required property \"${requiredKey}\" is not defined at \"${schemaPath}\" (strictRequired)`;\n                    (0, util_1.checkStrictMode)(it, msg, it.opts.strictRequired);\n                }\n            }\n        }\n        function allErrorsMode() {\n            if (useLoop || $data) {\n                cxt.block$data(codegen_1.nil, loopAllRequired);\n            }\n            else {\n                for (const prop of schema) {\n                    (0, code_1.checkReportMissingProp)(cxt, prop);\n                }\n            }\n        }\n        function exitOnErrorMode() {\n            const missing = gen.let(\"missing\");\n            if (useLoop || $data) {\n                const valid = gen.let(\"valid\", true);\n                cxt.block$data(valid, () => loopUntilMissing(missing, valid));\n                cxt.ok(valid);\n            }\n            else {\n                gen.if((0, code_1.checkMissingProp)(cxt, schema, missing));\n                (0, code_1.reportMissingProp)(cxt, missing);\n                gen.else();\n            }\n        }\n        function loopAllRequired() {\n            gen.forOf(\"prop\", schemaCode, (prop) => {\n                cxt.setParams({ missingProperty: prop });\n                gen.if((0, code_1.noPropertyInData)(gen, data, prop, opts.ownProperties), () => cxt.error());\n            });\n        }\n        function loopUntilMissing(missing, valid) {\n            cxt.setParams({ missingProperty: missing });\n            gen.forOf(missing, schemaCode, () => {\n                gen.assign(valid, (0, code_1.propertyInData)(gen, data, missing, opts.ownProperties));\n                gen.if((0, codegen_1.not)(valid), () => {\n                    cxt.error();\n                    gen.break();\n                });\n            }, codegen_1.nil);\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=required.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n    message({ keyword, schemaCode }) {\n        const comp = keyword === \"maxItems\" ? \"more\" : \"fewer\";\n        return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} items`;\n    },\n    params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n    keyword: [\"maxItems\", \"minItems\"],\n    type: \"array\",\n    schemaType: \"number\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { keyword, data, schemaCode } = cxt;\n        const op = keyword === \"maxItems\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n        cxt.fail$data((0, codegen_1._) `${data}.length ${op} ${schemaCode}`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=limitItems.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// https://github.com/ajv-validator/ajv/issues/889\nconst equal = require(\"fast-deep-equal\");\nequal.code = 'require(\"ajv/dist/runtime/equal\").default';\nexports.default = equal;\n//# sourceMappingURL=equal.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dataType_1 = require(\"../../compile/validate/dataType\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n    message: ({ params: { i, j } }) => (0, codegen_1.str) `must NOT have duplicate items (items ## ${j} and ${i} are identical)`,\n    params: ({ params: { i, j } }) => (0, codegen_1._) `{i: ${i}, j: ${j}}`,\n};\nconst def = {\n    keyword: \"uniqueItems\",\n    type: \"array\",\n    schemaType: \"boolean\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { gen, data, $data, schema, parentSchema, schemaCode, it } = cxt;\n        if (!$data && !schema)\n            return;\n        const valid = gen.let(\"valid\");\n        const itemTypes = parentSchema.items ? (0, dataType_1.getSchemaTypes)(parentSchema.items) : [];\n        cxt.block$data(valid, validateUniqueItems, (0, codegen_1._) `${schemaCode} === false`);\n        cxt.ok(valid);\n        function validateUniqueItems() {\n            const i = gen.let(\"i\", (0, codegen_1._) `${data}.length`);\n            const j = gen.let(\"j\");\n            cxt.setParams({ i, j });\n            gen.assign(valid, true);\n            gen.if((0, codegen_1._) `${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j));\n        }\n        function canOptimize() {\n            return itemTypes.length > 0 && !itemTypes.some((t) => t === \"object\" || t === \"array\");\n        }\n        function loopN(i, j) {\n            const item = gen.name(\"item\");\n            const wrongType = (0, dataType_1.checkDataTypes)(itemTypes, item, it.opts.strictNumbers, dataType_1.DataType.Wrong);\n            const indices = gen.const(\"indices\", (0, codegen_1._) `{}`);\n            gen.for((0, codegen_1._) `;${i}--;`, () => {\n                gen.let(item, (0, codegen_1._) `${data}[${i}]`);\n                gen.if(wrongType, (0, codegen_1._) `continue`);\n                if (itemTypes.length > 1)\n                    gen.if((0, codegen_1._) `typeof ${item} == \"string\"`, (0, codegen_1._) `${item} += \"_\"`);\n                gen\n                    .if((0, codegen_1._) `typeof ${indices}[${item}] == \"number\"`, () => {\n                    gen.assign(j, (0, codegen_1._) `${indices}[${item}]`);\n                    cxt.error();\n                    gen.assign(valid, false).break();\n                })\n                    .code((0, codegen_1._) `${indices}[${item}] = ${i}`);\n            });\n        }\n        function loopN2(i, j) {\n            const eql = (0, util_1.useFunc)(gen, equal_1.default);\n            const outer = gen.name(\"outer\");\n            gen.label(outer).for((0, codegen_1._) `;${i}--;`, () => gen.for((0, codegen_1._) `${j} = ${i}; ${j}--;`, () => gen.if((0, codegen_1._) `${eql}(${data}[${i}], ${data}[${j}])`, () => {\n                cxt.error();\n                gen.assign(valid, false).break(outer);\n            })));\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=uniqueItems.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n    message: \"must be equal to constant\",\n    params: ({ schemaCode }) => (0, codegen_1._) `{allowedValue: ${schemaCode}}`,\n};\nconst def = {\n    keyword: \"const\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { gen, data, $data, schemaCode, schema } = cxt;\n        if ($data || (schema && typeof schema == \"object\")) {\n            cxt.fail$data((0, codegen_1._) `!${(0, util_1.useFunc)(gen, equal_1.default)}(${data}, ${schemaCode})`);\n        }\n        else {\n            cxt.fail((0, codegen_1._) `${schema} !== ${data}`);\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=const.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n    message: \"must be equal to one of the allowed values\",\n    params: ({ schemaCode }) => (0, codegen_1._) `{allowedValues: ${schemaCode}}`,\n};\nconst def = {\n    keyword: \"enum\",\n    schemaType: \"array\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { gen, data, $data, schema, schemaCode, it } = cxt;\n        if (!$data && schema.length === 0)\n            throw new Error(\"enum must have non-empty array\");\n        const useLoop = schema.length >= it.opts.loopEnum;\n        let eql;\n        const getEql = () => (eql !== null && eql !== void 0 ? eql : (eql = (0, util_1.useFunc)(gen, equal_1.default)));\n        let valid;\n        if (useLoop || $data) {\n            valid = gen.let(\"valid\");\n            cxt.block$data(valid, loopEnum);\n        }\n        else {\n            /* istanbul ignore if */\n            if (!Array.isArray(schema))\n                throw new Error(\"ajv implementation error\");\n            const vSchema = gen.const(\"vSchema\", schemaCode);\n            valid = (0, codegen_1.or)(...schema.map((_x, i) => equalCode(vSchema, i)));\n        }\n        cxt.pass(valid);\n        function loopEnum() {\n            gen.assign(valid, false);\n            gen.forOf(\"v\", schemaCode, (v) => gen.if((0, codegen_1._) `${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break()));\n        }\n        function equalCode(vSchema, i) {\n            const sch = schema[i];\n            return typeof sch === \"object\" && sch !== null\n                ? (0, codegen_1._) `${getEql()}(${data}, ${vSchema}[${i}])`\n                : (0, codegen_1._) `${data} === ${sch}`;\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=enum.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst limitNumber_1 = require(\"./limitNumber\");\nconst multipleOf_1 = require(\"./multipleOf\");\nconst limitLength_1 = require(\"./limitLength\");\nconst pattern_1 = require(\"./pattern\");\nconst limitProperties_1 = require(\"./limitProperties\");\nconst required_1 = require(\"./required\");\nconst limitItems_1 = require(\"./limitItems\");\nconst uniqueItems_1 = require(\"./uniqueItems\");\nconst const_1 = require(\"./const\");\nconst enum_1 = require(\"./enum\");\nconst validation = [\n    // number\n    limitNumber_1.default,\n    multipleOf_1.default,\n    // string\n    limitLength_1.default,\n    pattern_1.default,\n    // object\n    limitProperties_1.default,\n    required_1.default,\n    // array\n    limitItems_1.default,\n    uniqueItems_1.default,\n    // any\n    { keyword: \"type\", schemaType: [\"string\", \"array\"] },\n    { keyword: \"nullable\", schemaType: \"boolean\" },\n    const_1.default,\n    enum_1.default,\n];\nexports.default = validation;\n//# sourceMappingURL=index.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateAdditionalItems = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: ({ params: { len } }) => (0, codegen_1.str) `must NOT have more than ${len} items`,\n    params: ({ params: { len } }) => (0, codegen_1._) `{limit: ${len}}`,\n};\nconst def = {\n    keyword: \"additionalItems\",\n    type: \"array\",\n    schemaType: [\"boolean\", \"object\"],\n    before: \"uniqueItems\",\n    error,\n    code(cxt) {\n        const { parentSchema, it } = cxt;\n        const { items } = parentSchema;\n        if (!Array.isArray(items)) {\n            (0, util_1.checkStrictMode)(it, '\"additionalItems\" is ignored when \"items\" is not an array of schemas');\n            return;\n        }\n        validateAdditionalItems(cxt, items);\n    },\n};\nfunction validateAdditionalItems(cxt, items) {\n    const { gen, schema, data, keyword, it } = cxt;\n    it.items = true;\n    const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n    if (schema === false) {\n        cxt.setParams({ len: items.length });\n        cxt.pass((0, codegen_1._) `${len} <= ${items.length}`);\n    }\n    else if (typeof schema == \"object\" && !(0, util_1.alwaysValidSchema)(it, schema)) {\n        const valid = gen.var(\"valid\", (0, codegen_1._) `${len} <= ${items.length}`); // TODO var\n        gen.if((0, codegen_1.not)(valid), () => validateItems(valid));\n        cxt.ok(valid);\n    }\n    function validateItems(valid) {\n        gen.forRange(\"i\", items.length, len, (i) => {\n            cxt.subschema({ keyword, dataProp: i, dataPropType: util_1.Type.Num }, valid);\n            if (!it.allErrors)\n                gen.if((0, codegen_1.not)(valid), () => gen.break());\n        });\n    }\n}\nexports.validateAdditionalItems = validateAdditionalItems;\nexports.default = def;\n//# sourceMappingURL=additionalItems.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateTuple = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nconst def = {\n    keyword: \"items\",\n    type: \"array\",\n    schemaType: [\"object\", \"array\", \"boolean\"],\n    before: \"uniqueItems\",\n    code(cxt) {\n        const { schema, it } = cxt;\n        if (Array.isArray(schema))\n            return validateTuple(cxt, \"additionalItems\", schema);\n        it.items = true;\n        if ((0, util_1.alwaysValidSchema)(it, schema))\n            return;\n        cxt.ok((0, code_1.validateArray)(cxt));\n    },\n};\nfunction validateTuple(cxt, extraItems, schArr = cxt.schema) {\n    const { gen, parentSchema, data, keyword, it } = cxt;\n    checkStrictTuple(parentSchema);\n    if (it.opts.unevaluated && schArr.length && it.items !== true) {\n        it.items = util_1.mergeEvaluated.items(gen, schArr.length, it.items);\n    }\n    const valid = gen.name(\"valid\");\n    const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n    schArr.forEach((sch, i) => {\n        if ((0, util_1.alwaysValidSchema)(it, sch))\n            return;\n        gen.if((0, codegen_1._) `${len} > ${i}`, () => cxt.subschema({\n            keyword,\n            schemaProp: i,\n            dataProp: i,\n        }, valid));\n        cxt.ok(valid);\n    });\n    function checkStrictTuple(sch) {\n        const { opts, errSchemaPath } = it;\n        const l = schArr.length;\n        const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false);\n        if (opts.strictTuples && !fullTuple) {\n            const msg = `\"${keyword}\" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path \"${errSchemaPath}\"`;\n            (0, util_1.checkStrictMode)(it, msg, opts.strictTuples);\n        }\n    }\n}\nexports.validateTuple = validateTuple;\nexports.default = def;\n//# sourceMappingURL=items.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst items_1 = require(\"./items\");\nconst def = {\n    keyword: \"prefixItems\",\n    type: \"array\",\n    schemaType: [\"array\"],\n    before: \"uniqueItems\",\n    code: (cxt) => (0, items_1.validateTuple)(cxt, \"items\"),\n};\nexports.default = def;\n//# sourceMappingURL=prefixItems.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nconst additionalItems_1 = require(\"./additionalItems\");\nconst error = {\n    message: ({ params: { len } }) => (0, codegen_1.str) `must NOT have more than ${len} items`,\n    params: ({ params: { len } }) => (0, codegen_1._) `{limit: ${len}}`,\n};\nconst def = {\n    keyword: \"items\",\n    type: \"array\",\n    schemaType: [\"object\", \"boolean\"],\n    before: \"uniqueItems\",\n    error,\n    code(cxt) {\n        const { schema, parentSchema, it } = cxt;\n        const { prefixItems } = parentSchema;\n        it.items = true;\n        if ((0, util_1.alwaysValidSchema)(it, schema))\n            return;\n        if (prefixItems)\n            (0, additionalItems_1.validateAdditionalItems)(cxt, prefixItems);\n        else\n            cxt.ok((0, code_1.validateArray)(cxt));\n    },\n};\nexports.default = def;\n//# sourceMappingURL=items2020.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: ({ params: { min, max } }) => max === undefined\n        ? (0, codegen_1.str) `must contain at least ${min} valid item(s)`\n        : (0, codegen_1.str) `must contain at least ${min} and no more than ${max} valid item(s)`,\n    params: ({ params: { min, max } }) => max === undefined ? (0, codegen_1._) `{minContains: ${min}}` : (0, codegen_1._) `{minContains: ${min}, maxContains: ${max}}`,\n};\nconst def = {\n    keyword: \"contains\",\n    type: \"array\",\n    schemaType: [\"object\", \"boolean\"],\n    before: \"uniqueItems\",\n    trackErrors: true,\n    error,\n    code(cxt) {\n        const { gen, schema, parentSchema, data, it } = cxt;\n        let min;\n        let max;\n        const { minContains, maxContains } = parentSchema;\n        if (it.opts.next) {\n            min = minContains === undefined ? 1 : minContains;\n            max = maxContains;\n        }\n        else {\n            min = 1;\n        }\n        const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n        cxt.setParams({ min, max });\n        if (max === undefined && min === 0) {\n            (0, util_1.checkStrictMode)(it, `\"minContains\" == 0 without \"maxContains\": \"contains\" keyword ignored`);\n            return;\n        }\n        if (max !== undefined && min > max) {\n            (0, util_1.checkStrictMode)(it, `\"minContains\" > \"maxContains\" is always invalid`);\n            cxt.fail();\n            return;\n        }\n        if ((0, util_1.alwaysValidSchema)(it, schema)) {\n            let cond = (0, codegen_1._) `${len} >= ${min}`;\n            if (max !== undefined)\n                cond = (0, codegen_1._) `${cond} && ${len} <= ${max}`;\n            cxt.pass(cond);\n            return;\n        }\n        it.items = true;\n        const valid = gen.name(\"valid\");\n        if (max === undefined && min === 1) {\n            validateItems(valid, () => gen.if(valid, () => gen.break()));\n        }\n        else if (min === 0) {\n            gen.let(valid, true);\n            if (max !== undefined)\n                gen.if((0, codegen_1._) `${data}.length > 0`, validateItemsWithCount);\n        }\n        else {\n            gen.let(valid, false);\n            validateItemsWithCount();\n        }\n        cxt.result(valid, () => cxt.reset());\n        function validateItemsWithCount() {\n            const schValid = gen.name(\"_valid\");\n            const count = gen.let(\"count\", 0);\n            validateItems(schValid, () => gen.if(schValid, () => checkLimits(count)));\n        }\n        function validateItems(_valid, block) {\n            gen.forRange(\"i\", 0, len, (i) => {\n                cxt.subschema({\n                    keyword: \"contains\",\n                    dataProp: i,\n                    dataPropType: util_1.Type.Num,\n                    compositeRule: true,\n                }, _valid);\n                block();\n            });\n        }\n        function checkLimits(count) {\n            gen.code((0, codegen_1._) `${count}++`);\n            if (max === undefined) {\n                gen.if((0, codegen_1._) `${count} >= ${min}`, () => gen.assign(valid, true).break());\n            }\n            else {\n                gen.if((0, codegen_1._) `${count} > ${max}`, () => gen.assign(valid, false).break());\n                if (min === 1)\n                    gen.assign(valid, true);\n                else\n                    gen.if((0, codegen_1._) `${count} >= ${min}`, () => gen.assign(valid, true));\n            }\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=contains.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateSchemaDeps = exports.validatePropertyDeps = exports.error = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nexports.error = {\n    message: ({ params: { property, depsCount, deps } }) => {\n        const property_ies = depsCount === 1 ? \"property\" : \"properties\";\n        return (0, codegen_1.str) `must have ${property_ies} ${deps} when property ${property} is present`;\n    },\n    params: ({ params: { property, depsCount, deps, missingProperty } }) => (0, codegen_1._) `{property: ${property},\n    missingProperty: ${missingProperty},\n    depsCount: ${depsCount},\n    deps: ${deps}}`, // TODO change to reference\n};\nconst def = {\n    keyword: \"dependencies\",\n    type: \"object\",\n    schemaType: \"object\",\n    error: exports.error,\n    code(cxt) {\n        const [propDeps, schDeps] = splitDependencies(cxt);\n        validatePropertyDeps(cxt, propDeps);\n        validateSchemaDeps(cxt, schDeps);\n    },\n};\nfunction splitDependencies({ schema }) {\n    const propertyDeps = {};\n    const schemaDeps = {};\n    for (const key in schema) {\n        if (key === \"__proto__\")\n            continue;\n        const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps;\n        deps[key] = schema[key];\n    }\n    return [propertyDeps, schemaDeps];\n}\nfunction validatePropertyDeps(cxt, propertyDeps = cxt.schema) {\n    const { gen, data, it } = cxt;\n    if (Object.keys(propertyDeps).length === 0)\n        return;\n    const missing = gen.let(\"missing\");\n    for (const prop in propertyDeps) {\n        const deps = propertyDeps[prop];\n        if (deps.length === 0)\n            continue;\n        const hasProperty = (0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties);\n        cxt.setParams({\n            property: prop,\n            depsCount: deps.length,\n            deps: deps.join(\", \"),\n        });\n        if (it.allErrors) {\n            gen.if(hasProperty, () => {\n                for (const depProp of deps) {\n                    (0, code_1.checkReportMissingProp)(cxt, depProp);\n                }\n            });\n        }\n        else {\n            gen.if((0, codegen_1._) `${hasProperty} && (${(0, code_1.checkMissingProp)(cxt, deps, missing)})`);\n            (0, code_1.reportMissingProp)(cxt, missing);\n            gen.else();\n        }\n    }\n}\nexports.validatePropertyDeps = validatePropertyDeps;\nfunction validateSchemaDeps(cxt, schemaDeps = cxt.schema) {\n    const { gen, data, keyword, it } = cxt;\n    const valid = gen.name(\"valid\");\n    for (const prop in schemaDeps) {\n        if ((0, util_1.alwaysValidSchema)(it, schemaDeps[prop]))\n            continue;\n        gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties), () => {\n            const schCxt = cxt.subschema({ keyword, schemaProp: prop }, valid);\n            cxt.mergeValidEvaluated(schCxt, valid);\n        }, () => gen.var(valid, true) // TODO var\n        );\n        cxt.ok(valid);\n    }\n}\nexports.validateSchemaDeps = validateSchemaDeps;\nexports.default = def;\n//# sourceMappingURL=dependencies.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: \"property name must be valid\",\n    params: ({ params }) => (0, codegen_1._) `{propertyName: ${params.propertyName}}`,\n};\nconst def = {\n    keyword: \"propertyNames\",\n    type: \"object\",\n    schemaType: [\"object\", \"boolean\"],\n    error,\n    code(cxt) {\n        const { gen, schema, data, it } = cxt;\n        if ((0, util_1.alwaysValidSchema)(it, schema))\n            return;\n        const valid = gen.name(\"valid\");\n        gen.forIn(\"key\", data, (key) => {\n            cxt.setParams({ propertyName: key });\n            cxt.subschema({\n                keyword: \"propertyNames\",\n                data: key,\n                dataTypes: [\"string\"],\n                propertyName: key,\n                compositeRule: true,\n            }, valid);\n            gen.if((0, codegen_1.not)(valid), () => {\n                cxt.error(true);\n                if (!it.allErrors)\n                    gen.break();\n            });\n        });\n        cxt.ok(valid);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=propertyNames.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: \"must NOT have additional properties\",\n    params: ({ params }) => (0, codegen_1._) `{additionalProperty: ${params.additionalProperty}}`,\n};\nconst def = {\n    keyword: \"additionalProperties\",\n    type: [\"object\"],\n    schemaType: [\"boolean\", \"object\"],\n    allowUndefined: true,\n    trackErrors: true,\n    error,\n    code(cxt) {\n        const { gen, schema, parentSchema, data, errsCount, it } = cxt;\n        /* istanbul ignore if */\n        if (!errsCount)\n            throw new Error(\"ajv implementation error\");\n        const { allErrors, opts } = it;\n        it.props = true;\n        if (opts.removeAdditional !== \"all\" && (0, util_1.alwaysValidSchema)(it, schema))\n            return;\n        const props = (0, code_1.allSchemaProperties)(parentSchema.properties);\n        const patProps = (0, code_1.allSchemaProperties)(parentSchema.patternProperties);\n        checkAdditionalProperties();\n        cxt.ok((0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n        function checkAdditionalProperties() {\n            gen.forIn(\"key\", data, (key) => {\n                if (!props.length && !patProps.length)\n                    additionalPropertyCode(key);\n                else\n                    gen.if(isAdditional(key), () => additionalPropertyCode(key));\n            });\n        }\n        function isAdditional(key) {\n            let definedProp;\n            if (props.length > 8) {\n                // TODO maybe an option instead of hard-coded 8?\n                const propsSchema = (0, util_1.schemaRefOrVal)(it, parentSchema.properties, \"properties\");\n                definedProp = (0, code_1.isOwnProperty)(gen, propsSchema, key);\n            }\n            else if (props.length) {\n                definedProp = (0, codegen_1.or)(...props.map((p) => (0, codegen_1._) `${key} === ${p}`));\n            }\n            else {\n                definedProp = codegen_1.nil;\n            }\n            if (patProps.length) {\n                definedProp = (0, codegen_1.or)(definedProp, ...patProps.map((p) => (0, codegen_1._) `${(0, code_1.usePattern)(cxt, p)}.test(${key})`));\n            }\n            return (0, codegen_1.not)(definedProp);\n        }\n        function deleteAdditional(key) {\n            gen.code((0, codegen_1._) `delete ${data}[${key}]`);\n        }\n        function additionalPropertyCode(key) {\n            if (opts.removeAdditional === \"all\" || (opts.removeAdditional && schema === false)) {\n                deleteAdditional(key);\n                return;\n            }\n            if (schema === false) {\n                cxt.setParams({ additionalProperty: key });\n                cxt.error();\n                if (!allErrors)\n                    gen.break();\n                return;\n            }\n            if (typeof schema == \"object\" && !(0, util_1.alwaysValidSchema)(it, schema)) {\n                const valid = gen.name(\"valid\");\n                if (opts.removeAdditional === \"failing\") {\n                    applyAdditionalSchema(key, valid, false);\n                    gen.if((0, codegen_1.not)(valid), () => {\n                        cxt.reset();\n                        deleteAdditional(key);\n                    });\n                }\n                else {\n                    applyAdditionalSchema(key, valid);\n                    if (!allErrors)\n                        gen.if((0, codegen_1.not)(valid), () => gen.break());\n                }\n            }\n        }\n        function applyAdditionalSchema(key, valid, errors) {\n            const subschema = {\n                keyword: \"additionalProperties\",\n                dataProp: key,\n                dataPropType: util_1.Type.Str,\n            };\n            if (errors === false) {\n                Object.assign(subschema, {\n                    compositeRule: true,\n                    createErrors: false,\n                    allErrors: false,\n                });\n            }\n            cxt.subschema(subschema, valid);\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=additionalProperties.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst validate_1 = require(\"../../compile/validate\");\nconst code_1 = require(\"../code\");\nconst util_1 = require(\"../../compile/util\");\nconst additionalProperties_1 = require(\"./additionalProperties\");\nconst def = {\n    keyword: \"properties\",\n    type: \"object\",\n    schemaType: \"object\",\n    code(cxt) {\n        const { gen, schema, parentSchema, data, it } = cxt;\n        if (it.opts.removeAdditional === \"all\" && parentSchema.additionalProperties === undefined) {\n            additionalProperties_1.default.code(new validate_1.KeywordCxt(it, additionalProperties_1.default, \"additionalProperties\"));\n        }\n        const allProps = (0, code_1.allSchemaProperties)(schema);\n        for (const prop of allProps) {\n            it.definedProperties.add(prop);\n        }\n        if (it.opts.unevaluated && allProps.length && it.props !== true) {\n            it.props = util_1.mergeEvaluated.props(gen, (0, util_1.toHash)(allProps), it.props);\n        }\n        const properties = allProps.filter((p) => !(0, util_1.alwaysValidSchema)(it, schema[p]));\n        if (properties.length === 0)\n            return;\n        const valid = gen.name(\"valid\");\n        for (const prop of properties) {\n            if (hasDefault(prop)) {\n                applyPropertySchema(prop);\n            }\n            else {\n                gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties));\n                applyPropertySchema(prop);\n                if (!it.allErrors)\n                    gen.else().var(valid, true);\n                gen.endIf();\n            }\n            cxt.it.definedProperties.add(prop);\n            cxt.ok(valid);\n        }\n        function hasDefault(prop) {\n            return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined;\n        }\n        function applyPropertySchema(prop) {\n            cxt.subschema({\n                keyword: \"properties\",\n                schemaProp: prop,\n                dataProp: prop,\n            }, valid);\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=properties.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst util_2 = require(\"../../compile/util\");\nconst def = {\n    keyword: \"patternProperties\",\n    type: \"object\",\n    schemaType: \"object\",\n    code(cxt) {\n        const { gen, schema, data, parentSchema, it } = cxt;\n        const { opts } = it;\n        const patterns = (0, code_1.allSchemaProperties)(schema);\n        const alwaysValidPatterns = patterns.filter((p) => (0, util_1.alwaysValidSchema)(it, schema[p]));\n        if (patterns.length === 0 ||\n            (alwaysValidPatterns.length === patterns.length &&\n                (!it.opts.unevaluated || it.props === true))) {\n            return;\n        }\n        const checkProperties = opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties;\n        const valid = gen.name(\"valid\");\n        if (it.props !== true && !(it.props instanceof codegen_1.Name)) {\n            it.props = (0, util_2.evaluatedPropsToName)(gen, it.props);\n        }\n        const { props } = it;\n        validatePatternProperties();\n        function validatePatternProperties() {\n            for (const pat of patterns) {\n                if (checkProperties)\n                    checkMatchingProperties(pat);\n                if (it.allErrors) {\n                    validateProperties(pat);\n                }\n                else {\n                    gen.var(valid, true); // TODO var\n                    validateProperties(pat);\n                    gen.if(valid);\n                }\n            }\n        }\n        function checkMatchingProperties(pat) {\n            for (const prop in checkProperties) {\n                if (new RegExp(pat).test(prop)) {\n                    (0, util_1.checkStrictMode)(it, `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`);\n                }\n            }\n        }\n        function validateProperties(pat) {\n            gen.forIn(\"key\", data, (key) => {\n                gen.if((0, codegen_1._) `${(0, code_1.usePattern)(cxt, pat)}.test(${key})`, () => {\n                    const alwaysValid = alwaysValidPatterns.includes(pat);\n                    if (!alwaysValid) {\n                        cxt.subschema({\n                            keyword: \"patternProperties\",\n                            schemaProp: pat,\n                            dataProp: key,\n                            dataPropType: util_2.Type.Str,\n                        }, valid);\n                    }\n                    if (it.opts.unevaluated && props !== true) {\n                        gen.assign((0, codegen_1._) `${props}[${key}]`, true);\n                    }\n                    else if (!alwaysValid && !it.allErrors) {\n                        // can short-circuit if `unevaluatedProperties` is not supported (opts.next === false)\n                        // or if all properties were evaluated (props === true)\n                        gen.if((0, codegen_1.not)(valid), () => gen.break());\n                    }\n                });\n            });\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=patternProperties.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n    keyword: \"not\",\n    schemaType: [\"object\", \"boolean\"],\n    trackErrors: true,\n    code(cxt) {\n        const { gen, schema, it } = cxt;\n        if ((0, util_1.alwaysValidSchema)(it, schema)) {\n            cxt.fail();\n            return;\n        }\n        const valid = gen.name(\"valid\");\n        cxt.subschema({\n            keyword: \"not\",\n            compositeRule: true,\n            createErrors: false,\n            allErrors: false,\n        }, valid);\n        cxt.failResult(valid, () => cxt.reset(), () => cxt.error());\n    },\n    error: { message: \"must NOT be valid\" },\n};\nexports.default = def;\n//# sourceMappingURL=not.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst def = {\n    keyword: \"anyOf\",\n    schemaType: \"array\",\n    trackErrors: true,\n    code: code_1.validateUnion,\n    error: { message: \"must match a schema in anyOf\" },\n};\nexports.default = def;\n//# sourceMappingURL=anyOf.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: \"must match exactly one schema in oneOf\",\n    params: ({ params }) => (0, codegen_1._) `{passingSchemas: ${params.passing}}`,\n};\nconst def = {\n    keyword: \"oneOf\",\n    schemaType: \"array\",\n    trackErrors: true,\n    error,\n    code(cxt) {\n        const { gen, schema, parentSchema, it } = cxt;\n        /* istanbul ignore if */\n        if (!Array.isArray(schema))\n            throw new Error(\"ajv implementation error\");\n        if (it.opts.discriminator && parentSchema.discriminator)\n            return;\n        const schArr = schema;\n        const valid = gen.let(\"valid\", false);\n        const passing = gen.let(\"passing\", null);\n        const schValid = gen.name(\"_valid\");\n        cxt.setParams({ passing });\n        // TODO possibly fail straight away (with warning or exception) if there are two empty always valid schemas\n        gen.block(validateOneOf);\n        cxt.result(valid, () => cxt.reset(), () => cxt.error(true));\n        function validateOneOf() {\n            schArr.forEach((sch, i) => {\n                let schCxt;\n                if ((0, util_1.alwaysValidSchema)(it, sch)) {\n                    gen.var(schValid, true);\n                }\n                else {\n                    schCxt = cxt.subschema({\n                        keyword: \"oneOf\",\n                        schemaProp: i,\n                        compositeRule: true,\n                    }, schValid);\n                }\n                if (i > 0) {\n                    gen\n                        .if((0, codegen_1._) `${schValid} && ${valid}`)\n                        .assign(valid, false)\n                        .assign(passing, (0, codegen_1._) `[${passing}, ${i}]`)\n                        .else();\n                }\n                gen.if(schValid, () => {\n                    gen.assign(valid, true);\n                    gen.assign(passing, i);\n                    if (schCxt)\n                        cxt.mergeEvaluated(schCxt, codegen_1.Name);\n                });\n            });\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=oneOf.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n    keyword: \"allOf\",\n    schemaType: \"array\",\n    code(cxt) {\n        const { gen, schema, it } = cxt;\n        /* istanbul ignore if */\n        if (!Array.isArray(schema))\n            throw new Error(\"ajv implementation error\");\n        const valid = gen.name(\"valid\");\n        schema.forEach((sch, i) => {\n            if ((0, util_1.alwaysValidSchema)(it, sch))\n                return;\n            const schCxt = cxt.subschema({ keyword: \"allOf\", schemaProp: i }, valid);\n            cxt.ok(valid);\n            cxt.mergeEvaluated(schCxt);\n        });\n    },\n};\nexports.default = def;\n//# sourceMappingURL=allOf.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: ({ params }) => (0, codegen_1.str) `must match \"${params.ifClause}\" schema`,\n    params: ({ params }) => (0, codegen_1._) `{failingKeyword: ${params.ifClause}}`,\n};\nconst def = {\n    keyword: \"if\",\n    schemaType: [\"object\", \"boolean\"],\n    trackErrors: true,\n    error,\n    code(cxt) {\n        const { gen, parentSchema, it } = cxt;\n        if (parentSchema.then === undefined && parentSchema.else === undefined) {\n            (0, util_1.checkStrictMode)(it, '\"if\" without \"then\" and \"else\" is ignored');\n        }\n        const hasThen = hasSchema(it, \"then\");\n        const hasElse = hasSchema(it, \"else\");\n        if (!hasThen && !hasElse)\n            return;\n        const valid = gen.let(\"valid\", true);\n        const schValid = gen.name(\"_valid\");\n        validateIf();\n        cxt.reset();\n        if (hasThen && hasElse) {\n            const ifClause = gen.let(\"ifClause\");\n            cxt.setParams({ ifClause });\n            gen.if(schValid, validateClause(\"then\", ifClause), validateClause(\"else\", ifClause));\n        }\n        else if (hasThen) {\n            gen.if(schValid, validateClause(\"then\"));\n        }\n        else {\n            gen.if((0, codegen_1.not)(schValid), validateClause(\"else\"));\n        }\n        cxt.pass(valid, () => cxt.error(true));\n        function validateIf() {\n            const schCxt = cxt.subschema({\n                keyword: \"if\",\n                compositeRule: true,\n                createErrors: false,\n                allErrors: false,\n            }, schValid);\n            cxt.mergeEvaluated(schCxt);\n        }\n        function validateClause(keyword, ifClause) {\n            return () => {\n                const schCxt = cxt.subschema({ keyword }, schValid);\n                gen.assign(valid, schValid);\n                cxt.mergeValidEvaluated(schCxt, valid);\n                if (ifClause)\n                    gen.assign(ifClause, (0, codegen_1._) `${keyword}`);\n                else\n                    cxt.setParams({ ifClause: keyword });\n            };\n        }\n    },\n};\nfunction hasSchema(it, keyword) {\n    const schema = it.schema[keyword];\n    return schema !== undefined && !(0, util_1.alwaysValidSchema)(it, schema);\n}\nexports.default = def;\n//# sourceMappingURL=if.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n    keyword: [\"then\", \"else\"],\n    schemaType: [\"object\", \"boolean\"],\n    code({ keyword, parentSchema, it }) {\n        if (parentSchema.if === undefined)\n            (0, util_1.checkStrictMode)(it, `\"${keyword}\" without \"if\" is ignored`);\n    },\n};\nexports.default = def;\n//# sourceMappingURL=thenElse.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst additionalItems_1 = require(\"./additionalItems\");\nconst prefixItems_1 = require(\"./prefixItems\");\nconst items_1 = require(\"./items\");\nconst items2020_1 = require(\"./items2020\");\nconst contains_1 = require(\"./contains\");\nconst dependencies_1 = require(\"./dependencies\");\nconst propertyNames_1 = require(\"./propertyNames\");\nconst additionalProperties_1 = require(\"./additionalProperties\");\nconst properties_1 = require(\"./properties\");\nconst patternProperties_1 = require(\"./patternProperties\");\nconst not_1 = require(\"./not\");\nconst anyOf_1 = require(\"./anyOf\");\nconst oneOf_1 = require(\"./oneOf\");\nconst allOf_1 = require(\"./allOf\");\nconst if_1 = require(\"./if\");\nconst thenElse_1 = require(\"./thenElse\");\nfunction getApplicator(draft2020 = false) {\n    const applicator = [\n        // any\n        not_1.default,\n        anyOf_1.default,\n        oneOf_1.default,\n        allOf_1.default,\n        if_1.default,\n        thenElse_1.default,\n        // object\n        propertyNames_1.default,\n        additionalProperties_1.default,\n        dependencies_1.default,\n        properties_1.default,\n        patternProperties_1.default,\n    ];\n    // array\n    if (draft2020)\n        applicator.push(prefixItems_1.default, items2020_1.default);\n    else\n        applicator.push(additionalItems_1.default, items_1.default);\n    applicator.push(contains_1.default);\n    return applicator;\n}\nexports.default = getApplicator;\n//# sourceMappingURL=index.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n    message: ({ schemaCode }) => (0, codegen_1.str) `must match format \"${schemaCode}\"`,\n    params: ({ schemaCode }) => (0, codegen_1._) `{format: ${schemaCode}}`,\n};\nconst def = {\n    keyword: \"format\",\n    type: [\"number\", \"string\"],\n    schemaType: \"string\",\n    $data: true,\n    error,\n    code(cxt, ruleType) {\n        const { gen, data, $data, schema, schemaCode, it } = cxt;\n        const { opts, errSchemaPath, schemaEnv, self } = it;\n        if (!opts.validateFormats)\n            return;\n        if ($data)\n            validate$DataFormat();\n        else\n            validateFormat();\n        function validate$DataFormat() {\n            const fmts = gen.scopeValue(\"formats\", {\n                ref: self.formats,\n                code: opts.code.formats,\n            });\n            const fDef = gen.const(\"fDef\", (0, codegen_1._) `${fmts}[${schemaCode}]`);\n            const fType = gen.let(\"fType\");\n            const format = gen.let(\"format\");\n            // TODO simplify\n            gen.if((0, codegen_1._) `typeof ${fDef} == \"object\" && !(${fDef} instanceof RegExp)`, () => gen.assign(fType, (0, codegen_1._) `${fDef}.type || \"string\"`).assign(format, (0, codegen_1._) `${fDef}.validate`), () => gen.assign(fType, (0, codegen_1._) `\"string\"`).assign(format, fDef));\n            cxt.fail$data((0, codegen_1.or)(unknownFmt(), invalidFmt()));\n            function unknownFmt() {\n                if (opts.strictSchema === false)\n                    return codegen_1.nil;\n                return (0, codegen_1._) `${schemaCode} && !${format}`;\n            }\n            function invalidFmt() {\n                const callFormat = schemaEnv.$async\n                    ? (0, codegen_1._) `(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`\n                    : (0, codegen_1._) `${format}(${data})`;\n                const validData = (0, codegen_1._) `(typeof ${format} == \"function\" ? ${callFormat} : ${format}.test(${data}))`;\n                return (0, codegen_1._) `${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`;\n            }\n        }\n        function validateFormat() {\n            const formatDef = self.formats[schema];\n            if (!formatDef) {\n                unknownFormat();\n                return;\n            }\n            if (formatDef === true)\n                return;\n            const [fmtType, format, fmtRef] = getFormat(formatDef);\n            if (fmtType === ruleType)\n                cxt.pass(validCondition());\n            function unknownFormat() {\n                if (opts.strictSchema === false) {\n                    self.logger.warn(unknownMsg());\n                    return;\n                }\n                throw new Error(unknownMsg());\n                function unknownMsg() {\n                    return `unknown format \"${schema}\" ignored in schema at path \"${errSchemaPath}\"`;\n                }\n            }\n            function getFormat(fmtDef) {\n                const code = fmtDef instanceof RegExp\n                    ? (0, codegen_1.regexpCode)(fmtDef)\n                    : opts.code.formats\n                        ? (0, codegen_1._) `${opts.code.formats}${(0, codegen_1.getProperty)(schema)}`\n                        : undefined;\n                const fmt = gen.scopeValue(\"formats\", { key: schema, ref: fmtDef, code });\n                if (typeof fmtDef == \"object\" && !(fmtDef instanceof RegExp)) {\n                    return [fmtDef.type || \"string\", fmtDef.validate, (0, codegen_1._) `${fmt}.validate`];\n                }\n                return [\"string\", fmtDef, fmt];\n            }\n            function validCondition() {\n                if (typeof formatDef == \"object\" && !(formatDef instanceof RegExp) && formatDef.async) {\n                    if (!schemaEnv.$async)\n                        throw new Error(\"async format in sync schema\");\n                    return (0, codegen_1._) `await ${fmtRef}(${data})`;\n                }\n                return typeof format == \"function\" ? (0, codegen_1._) `${fmtRef}(${data})` : (0, codegen_1._) `${fmtRef}.test(${data})`;\n            }\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=format.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst format_1 = require(\"./format\");\nconst format = [format_1.default];\nexports.default = format;\n//# sourceMappingURL=index.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.contentVocabulary = exports.metadataVocabulary = void 0;\nexports.metadataVocabulary = [\n    \"title\",\n    \"description\",\n    \"default\",\n    \"deprecated\",\n    \"readOnly\",\n    \"writeOnly\",\n    \"examples\",\n];\nexports.contentVocabulary = [\n    \"contentMediaType\",\n    \"contentEncoding\",\n    \"contentSchema\",\n];\n//# sourceMappingURL=metadata.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst core_1 = require(\"./core\");\nconst validation_1 = require(\"./validation\");\nconst applicator_1 = require(\"./applicator\");\nconst format_1 = require(\"./format\");\nconst metadata_1 = require(\"./metadata\");\nconst draft7Vocabularies = [\n    core_1.default,\n    validation_1.default,\n    (0, applicator_1.default)(),\n    format_1.default,\n    metadata_1.metadataVocabulary,\n    metadata_1.contentVocabulary,\n];\nexports.default = draft7Vocabularies;\n//# sourceMappingURL=draft7.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DiscrError = void 0;\nvar DiscrError;\n(function (DiscrError) {\n    DiscrError[\"Tag\"] = \"tag\";\n    DiscrError[\"Mapping\"] = \"mapping\";\n})(DiscrError || (exports.DiscrError = DiscrError = {}));\n//# sourceMappingURL=types.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst types_1 = require(\"../discriminator/types\");\nconst compile_1 = require(\"../../compile\");\nconst ref_error_1 = require(\"../../compile/ref_error\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: ({ params: { discrError, tagName } }) => discrError === types_1.DiscrError.Tag\n        ? `tag \"${tagName}\" must be string`\n        : `value of tag \"${tagName}\" must be in oneOf`,\n    params: ({ params: { discrError, tag, tagName } }) => (0, codegen_1._) `{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`,\n};\nconst def = {\n    keyword: \"discriminator\",\n    type: \"object\",\n    schemaType: \"object\",\n    error,\n    code(cxt) {\n        const { gen, data, schema, parentSchema, it } = cxt;\n        const { oneOf } = parentSchema;\n        if (!it.opts.discriminator) {\n            throw new Error(\"discriminator: requires discriminator option\");\n        }\n        const tagName = schema.propertyName;\n        if (typeof tagName != \"string\")\n            throw new Error(\"discriminator: requires propertyName\");\n        if (schema.mapping)\n            throw new Error(\"discriminator: mapping is not supported\");\n        if (!oneOf)\n            throw new Error(\"discriminator: requires oneOf keyword\");\n        const valid = gen.let(\"valid\", false);\n        const tag = gen.const(\"tag\", (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(tagName)}`);\n        gen.if((0, codegen_1._) `typeof ${tag} == \"string\"`, () => validateMapping(), () => cxt.error(false, { discrError: types_1.DiscrError.Tag, tag, tagName }));\n        cxt.ok(valid);\n        function validateMapping() {\n            const mapping = getMapping();\n            gen.if(false);\n            for (const tagValue in mapping) {\n                gen.elseIf((0, codegen_1._) `${tag} === ${tagValue}`);\n                gen.assign(valid, applyTagSchema(mapping[tagValue]));\n            }\n            gen.else();\n            cxt.error(false, { discrError: types_1.DiscrError.Mapping, tag, tagName });\n            gen.endIf();\n        }\n        function applyTagSchema(schemaProp) {\n            const _valid = gen.name(\"valid\");\n            const schCxt = cxt.subschema({ keyword: \"oneOf\", schemaProp }, _valid);\n            cxt.mergeEvaluated(schCxt, codegen_1.Name);\n            return _valid;\n        }\n        function getMapping() {\n            var _a;\n            const oneOfMapping = {};\n            const topRequired = hasRequired(parentSchema);\n            let tagRequired = true;\n            for (let i = 0; i < oneOf.length; i++) {\n                let sch = oneOf[i];\n                if ((sch === null || sch === void 0 ? void 0 : sch.$ref) && !(0, util_1.schemaHasRulesButRef)(sch, it.self.RULES)) {\n                    const ref = sch.$ref;\n                    sch = compile_1.resolveRef.call(it.self, it.schemaEnv.root, it.baseId, ref);\n                    if (sch instanceof compile_1.SchemaEnv)\n                        sch = sch.schema;\n                    if (sch === undefined)\n                        throw new ref_error_1.default(it.opts.uriResolver, it.baseId, ref);\n                }\n                const propSch = (_a = sch === null || sch === void 0 ? void 0 : sch.properties) === null || _a === void 0 ? void 0 : _a[tagName];\n                if (typeof propSch != \"object\") {\n                    throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have \"properties/${tagName}\"`);\n                }\n                tagRequired = tagRequired && (topRequired || hasRequired(sch));\n                addMappings(propSch, i);\n            }\n            if (!tagRequired)\n                throw new Error(`discriminator: \"${tagName}\" must be required`);\n            return oneOfMapping;\n            function hasRequired({ required }) {\n                return Array.isArray(required) && required.includes(tagName);\n            }\n            function addMappings(sch, i) {\n                if (sch.const) {\n                    addMapping(sch.const, i);\n                }\n                else if (sch.enum) {\n                    for (const tagValue of sch.enum) {\n                        addMapping(tagValue, i);\n                    }\n                }\n                else {\n                    throw new Error(`discriminator: \"properties/${tagName}\" must have \"const\" or \"enum\"`);\n                }\n            }\n            function addMapping(tagValue, i) {\n                if (typeof tagValue != \"string\" || tagValue in oneOfMapping) {\n                    throw new Error(`discriminator: \"${tagName}\" values must be unique strings`);\n                }\n                oneOfMapping[tagValue] = i;\n            }\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=index.js.map", "", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv = void 0;\nconst core_1 = require(\"./core\");\nconst draft7_1 = require(\"./vocabularies/draft7\");\nconst discriminator_1 = require(\"./vocabularies/discriminator\");\nconst draft7MetaSchema = require(\"./refs/json-schema-draft-07.json\");\nconst META_SUPPORT_DATA = [\"/properties\"];\nconst META_SCHEMA_ID = \"http://json-schema.org/draft-07/schema\";\nclass Ajv extends core_1.default {\n    _addVocabularies() {\n        super._addVocabularies();\n        draft7_1.default.forEach((v) => this.addVocabulary(v));\n        if (this.opts.discriminator)\n            this.addKeyword(discriminator_1.default);\n    }\n    _addDefaultMetaSchema() {\n        super._addDefaultMetaSchema();\n        if (!this.opts.meta)\n            return;\n        const metaSchema = this.opts.$data\n            ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA)\n            : draft7MetaSchema;\n        this.addMetaSchema(metaSchema, META_SCHEMA_ID, false);\n        this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID;\n    }\n    defaultMeta() {\n        return (this.opts.defaultMeta =\n            super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined));\n    }\n}\nexports.Ajv = Ajv;\nmodule.exports = exports = Ajv;\nmodule.exports.Ajv = Ajv;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = Ajv;\nvar validate_1 = require(\"./compile/validate\");\nObject.defineProperty(exports, \"KeywordCxt\", { enumerable: true, get: function () { return validate_1.KeywordCxt; } });\nvar codegen_1 = require(\"./compile/codegen\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return codegen_1._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return codegen_1.str; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return codegen_1.stringify; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return codegen_1.nil; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return codegen_1.Name; } });\nObject.defineProperty(exports, \"CodeGen\", { enumerable: true, get: function () { return codegen_1.CodeGen; } });\nvar validation_error_1 = require(\"./runtime/validation_error\");\nObject.defineProperty(exports, \"ValidationError\", { enumerable: true, get: function () { return validation_error_1.default; } });\nvar ref_error_1 = require(\"./compile/ref_error\");\nObject.defineProperty(exports, \"MissingRefError\", { enumerable: true, get: function () { return ref_error_1.default; } });\n//# sourceMappingURL=ajv.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dynamicAnchor = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst compile_1 = require(\"../../compile\");\nconst ref_1 = require(\"../core/ref\");\nconst def = {\n    keyword: \"$dynamicAnchor\",\n    schemaType: \"string\",\n    code: (cxt) => dynamicAnchor(cxt, cxt.schema),\n};\nfunction dynamicAnchor(cxt, anchor) {\n    const { gen, it } = cxt;\n    it.schemaEnv.root.dynamicAnchors[anchor] = true;\n    const v = (0, codegen_1._) `${names_1.default.dynamicAnchors}${(0, codegen_1.getProperty)(anchor)}`;\n    const validate = it.errSchemaPath === \"#\" ? it.validateName : _getValidate(cxt);\n    gen.if((0, codegen_1._) `!${v}`, () => gen.assign(v, validate));\n}\nexports.dynamicAnchor = dynamicAnchor;\nfunction _getValidate(cxt) {\n    const { schemaEnv, schema, self } = cxt.it;\n    const { root, baseId, localRefs, meta } = schemaEnv.root;\n    const { schemaId } = self.opts;\n    const sch = new compile_1.SchemaEnv({ schema, schemaId, root, baseId, localRefs, meta });\n    compile_1.compileSchema.call(self, sch);\n    return (0, ref_1.getValidate)(cxt, sch);\n}\nexports.default = def;\n//# sourceMappingURL=dynamicAnchor.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dynamicRef = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst ref_1 = require(\"../core/ref\");\nconst def = {\n    keyword: \"$dynamicRef\",\n    schemaType: \"string\",\n    code: (cxt) => dynamicRef(cxt, cxt.schema),\n};\nfunction dynamicRef(cxt, ref) {\n    const { gen, keyword, it } = cxt;\n    if (ref[0] !== \"#\")\n        throw new Error(`\"${keyword}\" only supports hash fragment reference`);\n    const anchor = ref.slice(1);\n    if (it.allErrors) {\n        _dynamicRef();\n    }\n    else {\n        const valid = gen.let(\"valid\", false);\n        _dynamicRef(valid);\n        cxt.ok(valid);\n    }\n    function _dynamicRef(valid) {\n        // TODO the assumption here is that `recursiveRef: #` always points to the root\n        // of the schema object, which is not correct, because there may be $id that\n        // makes # point to it, and the target schema may not contain dynamic/recursiveAnchor.\n        // Because of that 2 tests in recursiveRef.json fail.\n        // This is a similar problem to #815 (`$id` doesn't alter resolution scope for `{ \"$ref\": \"#\" }`).\n        // (This problem is not tested in JSON-Schema-Test-Suite)\n        if (it.schemaEnv.root.dynamicAnchors[anchor]) {\n            const v = gen.let(\"_v\", (0, codegen_1._) `${names_1.default.dynamicAnchors}${(0, codegen_1.getProperty)(anchor)}`);\n            gen.if(v, _callRef(v, valid), _callRef(it.validateName, valid));\n        }\n        else {\n            _callRef(it.validateName, valid)();\n        }\n    }\n    function _callRef(validate, valid) {\n        return valid\n            ? () => gen.block(() => {\n                (0, ref_1.callRef)(cxt, validate);\n                gen.let(valid, true);\n            })\n            : () => (0, ref_1.callRef)(cxt, validate);\n    }\n}\nexports.dynamicRef = dynamicRef;\nexports.default = def;\n//# sourceMappingURL=dynamicRef.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dynamicAnchor_1 = require(\"./dynamicAnchor\");\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n    keyword: \"$recursiveAnchor\",\n    schemaType: \"boolean\",\n    code(cxt) {\n        if (cxt.schema)\n            (0, dynamicAnchor_1.dynamicAnchor)(cxt, \"\");\n        else\n            (0, util_1.checkStrictMode)(cxt.it, \"$recursiveAnchor: false is ignored\");\n    },\n};\nexports.default = def;\n//# sourceMappingURL=recursiveAnchor.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dynamicRef_1 = require(\"./dynamicRef\");\nconst def = {\n    keyword: \"$recursiveRef\",\n    schemaType: \"string\",\n    code: (cxt) => (0, dynamicRef_1.dynamicRef)(cxt, cxt.schema),\n};\nexports.default = def;\n//# sourceMappingURL=recursiveRef.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dynamicAnchor_1 = require(\"./dynamicAnchor\");\nconst dynamicRef_1 = require(\"./dynamicRef\");\nconst recursiveAnchor_1 = require(\"./recursiveAnchor\");\nconst recursiveRef_1 = require(\"./recursiveRef\");\nconst dynamic = [dynamicAnchor_1.default, dynamicRef_1.default, recursiveAnchor_1.default, recursiveRef_1.default];\nexports.default = dynamic;\n//# sourceMappingURL=index.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dependencies_1 = require(\"../applicator/dependencies\");\nconst def = {\n    keyword: \"dependentRequired\",\n    type: \"object\",\n    schemaType: \"object\",\n    error: dependencies_1.error,\n    code: (cxt) => (0, dependencies_1.validatePropertyDeps)(cxt),\n};\nexports.default = def;\n//# sourceMappingURL=dependentRequired.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dependencies_1 = require(\"./dependencies\");\nconst def = {\n    keyword: \"dependentSchemas\",\n    type: \"object\",\n    schemaType: \"object\",\n    code: (cxt) => (0, dependencies_1.validateSchemaDeps)(cxt),\n};\nexports.default = def;\n//# sourceMappingURL=dependentSchemas.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n    keyword: [\"maxContains\", \"minContains\"],\n    type: \"array\",\n    schemaType: \"number\",\n    code({ keyword, parentSchema, it }) {\n        if (parentSchema.contains === undefined) {\n            (0, util_1.checkStrictMode)(it, `\"${keyword}\" without \"contains\" is ignored`);\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=limitContains.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dependentRequired_1 = require(\"./validation/dependentRequired\");\nconst dependentSchemas_1 = require(\"./applicator/dependentSchemas\");\nconst limitContains_1 = require(\"./validation/limitContains\");\nconst next = [dependentRequired_1.default, dependentSchemas_1.default, limitContains_1.default];\nexports.default = next;\n//# sourceMappingURL=next.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst names_1 = require(\"../../compile/names\");\nconst error = {\n    message: \"must NOT have unevaluated properties\",\n    params: ({ params }) => (0, codegen_1._) `{unevaluatedProperty: ${params.unevaluatedProperty}}`,\n};\nconst def = {\n    keyword: \"unevaluatedProperties\",\n    type: \"object\",\n    schemaType: [\"boolean\", \"object\"],\n    trackErrors: true,\n    error,\n    code(cxt) {\n        const { gen, schema, data, errsCount, it } = cxt;\n        /* istanbul ignore if */\n        if (!errsCount)\n            throw new Error(\"ajv implementation error\");\n        const { allErrors, props } = it;\n        if (props instanceof codegen_1.Name) {\n            gen.if((0, codegen_1._) `${props} !== true`, () => gen.forIn(\"key\", data, (key) => gen.if(unevaluatedDynamic(props, key), () => unevaluatedPropCode(key))));\n        }\n        else if (props !== true) {\n            gen.forIn(\"key\", data, (key) => props === undefined\n                ? unevaluatedPropCode(key)\n                : gen.if(unevaluatedStatic(props, key), () => unevaluatedPropCode(key)));\n        }\n        it.props = true;\n        cxt.ok((0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n        function unevaluatedPropCode(key) {\n            if (schema === false) {\n                cxt.setParams({ unevaluatedProperty: key });\n                cxt.error();\n                if (!allErrors)\n                    gen.break();\n                return;\n            }\n            if (!(0, util_1.alwaysValidSchema)(it, schema)) {\n                const valid = gen.name(\"valid\");\n                cxt.subschema({\n                    keyword: \"unevaluatedProperties\",\n                    dataProp: key,\n                    dataPropType: util_1.Type.Str,\n                }, valid);\n                if (!allErrors)\n                    gen.if((0, codegen_1.not)(valid), () => gen.break());\n            }\n        }\n        function unevaluatedDynamic(evaluatedProps, key) {\n            return (0, codegen_1._) `!${evaluatedProps} || !${evaluatedProps}[${key}]`;\n        }\n        function unevaluatedStatic(evaluatedProps, key) {\n            const ps = [];\n            for (const p in evaluatedProps) {\n                if (evaluatedProps[p] === true)\n                    ps.push((0, codegen_1._) `${key} !== ${p}`);\n            }\n            return (0, codegen_1.and)(...ps);\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=unevaluatedProperties.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n    message: ({ params: { len } }) => (0, codegen_1.str) `must NOT have more than ${len} items`,\n    params: ({ params: { len } }) => (0, codegen_1._) `{limit: ${len}}`,\n};\nconst def = {\n    keyword: \"unevaluatedItems\",\n    type: \"array\",\n    schemaType: [\"boolean\", \"object\"],\n    error,\n    code(cxt) {\n        const { gen, schema, data, it } = cxt;\n        const items = it.items || 0;\n        if (items === true)\n            return;\n        const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n        if (schema === false) {\n            cxt.setParams({ len: items });\n            cxt.fail((0, codegen_1._) `${len} > ${items}`);\n        }\n        else if (typeof schema == \"object\" && !(0, util_1.alwaysValidSchema)(it, schema)) {\n            const valid = gen.var(\"valid\", (0, codegen_1._) `${len} <= ${items}`);\n            gen.if((0, codegen_1.not)(valid), () => validateItems(valid, items));\n            cxt.ok(valid);\n        }\n        it.items = true;\n        function validateItems(valid, from) {\n            gen.forRange(\"i\", from, len, (i) => {\n                cxt.subschema({ keyword: \"unevaluatedItems\", dataProp: i, dataPropType: util_1.Type.Num }, valid);\n                if (!it.allErrors)\n                    gen.if((0, codegen_1.not)(valid), () => gen.break());\n            });\n        }\n    },\n};\nexports.default = def;\n//# sourceMappingURL=unevaluatedItems.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst unevaluatedProperties_1 = require(\"./unevaluatedProperties\");\nconst unevaluatedItems_1 = require(\"./unevaluatedItems\");\nconst unevaluated = [unevaluatedProperties_1.default, unevaluatedItems_1.default];\nexports.default = unevaluated;\n//# sourceMappingURL=index.js.map", "", "", "", "", "", "", "", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst metaSchema = require(\"./schema.json\");\nconst applicator = require(\"./meta/applicator.json\");\nconst content = require(\"./meta/content.json\");\nconst core = require(\"./meta/core.json\");\nconst format = require(\"./meta/format.json\");\nconst metadata = require(\"./meta/meta-data.json\");\nconst validation = require(\"./meta/validation.json\");\nconst META_SUPPORT_DATA = [\"/properties\"];\nfunction addMetaSchema2019($data) {\n    ;\n    [\n        metaSchema,\n        applicator,\n        content,\n        core,\n        with$data(this, format),\n        metadata,\n        with$data(this, validation),\n    ].forEach((sch) => this.addMetaSchema(sch, undefined, false));\n    return this;\n    function with$data(ajv, sch) {\n        return $data ? ajv.$dataMetaSchema(sch, META_SUPPORT_DATA) : sch;\n    }\n}\nexports.default = addMetaSchema2019;\n//# sourceMappingURL=index.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv2019 = void 0;\nconst core_1 = require(\"./core\");\nconst draft7_1 = require(\"./vocabularies/draft7\");\nconst dynamic_1 = require(\"./vocabularies/dynamic\");\nconst next_1 = require(\"./vocabularies/next\");\nconst unevaluated_1 = require(\"./vocabularies/unevaluated\");\nconst discriminator_1 = require(\"./vocabularies/discriminator\");\nconst json_schema_2019_09_1 = require(\"./refs/json-schema-2019-09\");\nconst META_SCHEMA_ID = \"https://json-schema.org/draft/2019-09/schema\";\nclass Ajv2019 extends core_1.default {\n    constructor(opts = {}) {\n        super({\n            ...opts,\n            dynamicRef: true,\n            next: true,\n            unevaluated: true,\n        });\n    }\n    _addVocabularies() {\n        super._addVocabularies();\n        this.addVocabulary(dynamic_1.default);\n        draft7_1.default.forEach((v) => this.addVocabulary(v));\n        this.addVocabulary(next_1.default);\n        this.addVocabulary(unevaluated_1.default);\n        if (this.opts.discriminator)\n            this.addKeyword(discriminator_1.default);\n    }\n    _addDefaultMetaSchema() {\n        super._addDefaultMetaSchema();\n        const { $data, meta } = this.opts;\n        if (!meta)\n            return;\n        json_schema_2019_09_1.default.call(this, $data);\n        this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID;\n    }\n    defaultMeta() {\n        return (this.opts.defaultMeta =\n            super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined));\n    }\n}\nexports.Ajv2019 = Ajv2019;\nmodule.exports = exports = Ajv2019;\nmodule.exports.Ajv2019 = Ajv2019;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = Ajv2019;\nvar validate_1 = require(\"./compile/validate\");\nObject.defineProperty(exports, \"KeywordCxt\", { enumerable: true, get: function () { return validate_1.KeywordCxt; } });\nvar codegen_1 = require(\"./compile/codegen\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return codegen_1._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return codegen_1.str; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return codegen_1.stringify; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return codegen_1.nil; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return codegen_1.Name; } });\nObject.defineProperty(exports, \"CodeGen\", { enumerable: true, get: function () { return codegen_1.CodeGen; } });\nvar validation_error_1 = require(\"./runtime/validation_error\");\nObject.defineProperty(exports, \"ValidationError\", { enumerable: true, get: function () { return validation_error_1.default; } });\nvar ref_error_1 = require(\"./compile/ref_error\");\nObject.defineProperty(exports, \"MissingRefError\", { enumerable: true, get: function () { return ref_error_1.default; } });\n//# sourceMappingURL=2019.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst core_1 = require(\"./core\");\nconst validation_1 = require(\"./validation\");\nconst applicator_1 = require(\"./applicator\");\nconst dynamic_1 = require(\"./dynamic\");\nconst next_1 = require(\"./next\");\nconst unevaluated_1 = require(\"./unevaluated\");\nconst format_1 = require(\"./format\");\nconst metadata_1 = require(\"./metadata\");\nconst draft2020Vocabularies = [\n    dynamic_1.default,\n    core_1.default,\n    validation_1.default,\n    (0, applicator_1.default)(true),\n    format_1.default,\n    metadata_1.metadataVocabulary,\n    metadata_1.contentVocabulary,\n    next_1.default,\n    unevaluated_1.default,\n];\nexports.default = draft2020Vocabularies;\n//# sourceMappingURL=draft2020.js.map", "", "", "", "", "", "", "", "", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst metaSchema = require(\"./schema.json\");\nconst applicator = require(\"./meta/applicator.json\");\nconst unevaluated = require(\"./meta/unevaluated.json\");\nconst content = require(\"./meta/content.json\");\nconst core = require(\"./meta/core.json\");\nconst format = require(\"./meta/format-annotation.json\");\nconst metadata = require(\"./meta/meta-data.json\");\nconst validation = require(\"./meta/validation.json\");\nconst META_SUPPORT_DATA = [\"/properties\"];\nfunction addMetaSchema2020($data) {\n    ;\n    [\n        metaSchema,\n        applicator,\n        unevaluated,\n        content,\n        core,\n        with$data(this, format),\n        metadata,\n        with$data(this, validation),\n    ].forEach((sch) => this.addMetaSchema(sch, undefined, false));\n    return this;\n    function with$data(ajv, sch) {\n        return $data ? ajv.$dataMetaSchema(sch, META_SUPPORT_DATA) : sch;\n    }\n}\nexports.default = addMetaSchema2020;\n//# sourceMappingURL=index.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv2020 = void 0;\nconst core_1 = require(\"./core\");\nconst draft2020_1 = require(\"./vocabularies/draft2020\");\nconst discriminator_1 = require(\"./vocabularies/discriminator\");\nconst json_schema_2020_12_1 = require(\"./refs/json-schema-2020-12\");\nconst META_SCHEMA_ID = \"https://json-schema.org/draft/2020-12/schema\";\nclass Ajv2020 extends core_1.default {\n    constructor(opts = {}) {\n        super({\n            ...opts,\n            dynamicRef: true,\n            next: true,\n            unevaluated: true,\n        });\n    }\n    _addVocabularies() {\n        super._addVocabularies();\n        draft2020_1.default.forEach((v) => this.addVocabulary(v));\n        if (this.opts.discriminator)\n            this.addKeyword(discriminator_1.default);\n    }\n    _addDefaultMetaSchema() {\n        super._addDefaultMetaSchema();\n        const { $data, meta } = this.opts;\n        if (!meta)\n            return;\n        json_schema_2020_12_1.default.call(this, $data);\n        this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID;\n    }\n    defaultMeta() {\n        return (this.opts.defaultMeta =\n            super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined));\n    }\n}\nexports.Ajv2020 = Ajv2020;\nmodule.exports = exports = Ajv2020;\nmodule.exports.Ajv2020 = Ajv2020;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = Ajv2020;\nvar validate_1 = require(\"./compile/validate\");\nObject.defineProperty(exports, \"KeywordCxt\", { enumerable: true, get: function () { return validate_1.KeywordCxt; } });\nvar codegen_1 = require(\"./compile/codegen\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return codegen_1._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return codegen_1.str; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return codegen_1.stringify; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return codegen_1.nil; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return codegen_1.Name; } });\nObject.defineProperty(exports, \"CodeGen\", { enumerable: true, get: function () { return codegen_1.CodeGen; } });\nvar validation_error_1 = require(\"./runtime/validation_error\");\nObject.defineProperty(exports, \"ValidationError\", { enumerable: true, get: function () { return validation_error_1.default; } });\nvar ref_error_1 = require(\"./compile/ref_error\");\nObject.defineProperty(exports, \"MissingRefError\", { enumerable: true, get: function () { return ref_error_1.default; } });\n//# sourceMappingURL=2020.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatNames = exports.fastFormats = exports.fullFormats = void 0;\nfunction fmtDef(validate, compare) {\n    return { validate, compare };\n}\nexports.fullFormats = {\n    // date: http://tools.ietf.org/html/rfc3339#section-5.6\n    date: fmtDef(date, compareDate),\n    // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\n    time: fmtDef(getTime(true), compareTime),\n    \"date-time\": fmtDef(getDateTime(true), compareDateTime),\n    \"iso-time\": fmtDef(getTime(), compareIsoTime),\n    \"iso-date-time\": fmtDef(getDateTime(), compareIsoDateTime),\n    // duration: https://tools.ietf.org/html/rfc3339#appendix-A\n    duration: /^P(?!$)((\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+S)?)?|(\\d+W)?)$/,\n    uri,\n    \"uri-reference\": /^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'\"()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\\?(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,\n    // uri-template: https://tools.ietf.org/html/rfc6570\n    \"uri-template\": /^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i,\n    // For the source: https://gist.github.com/dperini/729294\n    // For test cases: https://mathiasbynens.be/demo/url-regex\n    url: /^(?:https?|ftp):\\/\\/(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)(?:\\.(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu,\n    email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\n    hostname: /^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i,\n    // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n    ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)$/,\n    ipv6: /^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))$/i,\n    regex,\n    // uuid: http://tools.ietf.org/html/rfc4122\n    uuid: /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,\n    // JSON-pointer: https://tools.ietf.org/html/rfc6901\n    // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n    \"json-pointer\": /^(?:\\/(?:[^~/]|~0|~1)*)*$/,\n    \"json-pointer-uri-fragment\": /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,\n    // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\n    \"relative-json-pointer\": /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/,\n    // the following formats are used by the openapi specification: https://spec.openapis.org/oas/v3.0.0#data-types\n    // byte: https://github.com/miguelmota/is-base64\n    byte,\n    // signed 32 bit integer\n    int32: { type: \"number\", validate: validateInt32 },\n    // signed 64 bit integer\n    int64: { type: \"number\", validate: validateInt64 },\n    // C-type float\n    float: { type: \"number\", validate: validateNumber },\n    // C-type double\n    double: { type: \"number\", validate: validateNumber },\n    // hint to the UI to hide input strings\n    password: true,\n    // unchecked string payload\n    binary: true,\n};\nexports.fastFormats = {\n    ...exports.fullFormats,\n    date: fmtDef(/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/, compareDate),\n    time: fmtDef(/^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i, compareTime),\n    \"date-time\": fmtDef(/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\dt(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i, compareDateTime),\n    \"iso-time\": fmtDef(/^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i, compareIsoTime),\n    \"iso-date-time\": fmtDef(/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s](?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i, compareIsoDateTime),\n    // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\n    uri: /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\n    \"uri-reference\": /^(?:(?:[a-z][a-z0-9+\\-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\n    // email (sources from jsen validator):\n    // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n    // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'wilful violation')\n    email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\n};\nexports.formatNames = Object.keys(exports.fullFormats);\nfunction isLeapYear(year) {\n    // https://tools.ietf.org/html/rfc3339#appendix-C\n    return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\nconst DATE = /^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/;\nconst DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nfunction date(str) {\n    // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\n    const matches = DATE.exec(str);\n    if (!matches)\n        return false;\n    const year = +matches[1];\n    const month = +matches[2];\n    const day = +matches[3];\n    return (month >= 1 &&\n        month <= 12 &&\n        day >= 1 &&\n        day <= (month === 2 && isLeapYear(year) ? 29 : DAYS[month]));\n}\nfunction compareDate(d1, d2) {\n    if (!(d1 && d2))\n        return undefined;\n    if (d1 > d2)\n        return 1;\n    if (d1 < d2)\n        return -1;\n    return 0;\n}\nconst TIME = /^(\\d\\d):(\\d\\d):(\\d\\d(?:\\.\\d+)?)(z|([+-])(\\d\\d)(?::?(\\d\\d))?)?$/i;\nfunction getTime(strictTimeZone) {\n    return function time(str) {\n        const matches = TIME.exec(str);\n        if (!matches)\n            return false;\n        const hr = +matches[1];\n        const min = +matches[2];\n        const sec = +matches[3];\n        const tz = matches[4];\n        const tzSign = matches[5] === \"-\" ? -1 : 1;\n        const tzH = +(matches[6] || 0);\n        const tzM = +(matches[7] || 0);\n        if (tzH > 23 || tzM > 59 || (strictTimeZone && !tz))\n            return false;\n        if (hr <= 23 && min <= 59 && sec < 60)\n            return true;\n        // leap second\n        const utcMin = min - tzM * tzSign;\n        const utcHr = hr - tzH * tzSign - (utcMin < 0 ? 1 : 0);\n        return (utcHr === 23 || utcHr === -1) && (utcMin === 59 || utcMin === -1) && sec < 61;\n    };\n}\nfunction compareTime(s1, s2) {\n    if (!(s1 && s2))\n        return undefined;\n    const t1 = new Date(\"2020-01-01T\" + s1).valueOf();\n    const t2 = new Date(\"2020-01-01T\" + s2).valueOf();\n    if (!(t1 && t2))\n        return undefined;\n    return t1 - t2;\n}\nfunction compareIsoTime(t1, t2) {\n    if (!(t1 && t2))\n        return undefined;\n    const a1 = TIME.exec(t1);\n    const a2 = TIME.exec(t2);\n    if (!(a1 && a2))\n        return undefined;\n    t1 = a1[1] + a1[2] + a1[3];\n    t2 = a2[1] + a2[2] + a2[3];\n    if (t1 > t2)\n        return 1;\n    if (t1 < t2)\n        return -1;\n    return 0;\n}\nconst DATE_TIME_SEPARATOR = /t|\\s/i;\nfunction getDateTime(strictTimeZone) {\n    const time = getTime(strictTimeZone);\n    return function date_time(str) {\n        // http://tools.ietf.org/html/rfc3339#section-5.6\n        const dateTime = str.split(DATE_TIME_SEPARATOR);\n        return dateTime.length === 2 && date(dateTime[0]) && time(dateTime[1]);\n    };\n}\nfunction compareDateTime(dt1, dt2) {\n    if (!(dt1 && dt2))\n        return undefined;\n    const d1 = new Date(dt1).valueOf();\n    const d2 = new Date(dt2).valueOf();\n    if (!(d1 && d2))\n        return undefined;\n    return d1 - d2;\n}\nfunction compareIsoDateTime(dt1, dt2) {\n    if (!(dt1 && dt2))\n        return undefined;\n    const [d1, t1] = dt1.split(DATE_TIME_SEPARATOR);\n    const [d2, t2] = dt2.split(DATE_TIME_SEPARATOR);\n    const res = compareDate(d1, d2);\n    if (res === undefined)\n        return undefined;\n    return res || compareTime(t1, t2);\n}\nconst NOT_URI_FRAGMENT = /\\/|:/;\nconst URI = /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;\nfunction uri(str) {\n    // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n    return NOT_URI_FRAGMENT.test(str) && URI.test(str);\n}\nconst BYTE = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;\nfunction byte(str) {\n    BYTE.lastIndex = 0;\n    return BYTE.test(str);\n}\nconst MIN_INT32 = -(2 ** 31);\nconst MAX_INT32 = 2 ** 31 - 1;\nfunction validateInt32(value) {\n    return Number.isInteger(value) && value <= MAX_INT32 && value >= MIN_INT32;\n}\nfunction validateInt64(value) {\n    // JSON and javascript max Int is 2**53, so any int that passes isInteger is valid for Int64\n    return Number.isInteger(value);\n}\nfunction validateNumber() {\n    return true;\n}\nconst Z_ANCHOR = /[^\\\\]\\\\Z/;\nfunction regex(str) {\n    if (Z_ANCHOR.test(str))\n        return false;\n    try {\n        new RegExp(str);\n        return true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n//# sourceMappingURL=formats.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatLimitDefinition = void 0;\nconst ajv_1 = require(\"ajv\");\nconst codegen_1 = require(\"ajv/dist/compile/codegen\");\nconst ops = codegen_1.operators;\nconst KWDs = {\n    formatMaximum: { okStr: \"<=\", ok: ops.LTE, fail: ops.GT },\n    formatMinimum: { okStr: \">=\", ok: ops.GTE, fail: ops.LT },\n    formatExclusiveMaximum: { okStr: \"<\", ok: ops.LT, fail: ops.GTE },\n    formatExclusiveMinimum: { okStr: \">\", ok: ops.GT, fail: ops.LTE },\n};\nconst error = {\n    message: ({ keyword, schemaCode }) => (0, codegen_1.str) `should be ${KWDs[keyword].okStr} ${schemaCode}`,\n    params: ({ keyword, schemaCode }) => (0, codegen_1._) `{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}`,\n};\nexports.formatLimitDefinition = {\n    keyword: Object.keys(KWDs),\n    type: \"string\",\n    schemaType: \"string\",\n    $data: true,\n    error,\n    code(cxt) {\n        const { gen, data, schemaCode, keyword, it } = cxt;\n        const { opts, self } = it;\n        if (!opts.validateFormats)\n            return;\n        const fCxt = new ajv_1.KeywordCxt(it, self.RULES.all.format.definition, \"format\");\n        if (fCxt.$data)\n            validate$DataFormat();\n        else\n            validateFormat();\n        function validate$DataFormat() {\n            const fmts = gen.scopeValue(\"formats\", {\n                ref: self.formats,\n                code: opts.code.formats,\n            });\n            const fmt = gen.const(\"fmt\", (0, codegen_1._) `${fmts}[${fCxt.schemaCode}]`);\n            cxt.fail$data((0, codegen_1.or)((0, codegen_1._) `typeof ${fmt} != \"object\"`, (0, codegen_1._) `${fmt} instanceof RegExp`, (0, codegen_1._) `typeof ${fmt}.compare != \"function\"`, compareCode(fmt)));\n        }\n        function validateFormat() {\n            const format = fCxt.schema;\n            const fmtDef = self.formats[format];\n            if (!fmtDef || fmtDef === true)\n                return;\n            if (typeof fmtDef != \"object\" ||\n                fmtDef instanceof RegExp ||\n                typeof fmtDef.compare != \"function\") {\n                throw new Error(`\"${keyword}\": format \"${format}\" does not define \"compare\" function`);\n            }\n            const fmt = gen.scopeValue(\"formats\", {\n                key: format,\n                ref: fmtDef,\n                code: opts.code.formats ? (0, codegen_1._) `${opts.code.formats}${(0, codegen_1.getProperty)(format)}` : undefined,\n            });\n            cxt.fail$data(compareCode(fmt));\n        }\n        function compareCode(fmt) {\n            return (0, codegen_1._) `${fmt}.compare(${data}, ${schemaCode}) ${KWDs[keyword].fail} 0`;\n        }\n    },\n    dependencies: [\"format\"],\n};\nconst formatLimitPlugin = (ajv) => {\n    ajv.addKeyword(exports.formatLimitDefinition);\n    return ajv;\n};\nexports.default = formatLimitPlugin;\n//# sourceMappingURL=limit.js.map", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst formats_1 = require(\"./formats\");\nconst limit_1 = require(\"./limit\");\nconst codegen_1 = require(\"ajv/dist/compile/codegen\");\nconst fullName = new codegen_1.Name(\"fullFormats\");\nconst fastName = new codegen_1.Name(\"fastFormats\");\nconst formatsPlugin = (ajv, opts = { keywords: true }) => {\n    if (Array.isArray(opts)) {\n        addFormats(ajv, opts, formats_1.fullFormats, fullName);\n        return ajv;\n    }\n    const [formats, exportName] = opts.mode === \"fast\" ? [formats_1.fastFormats, fastName] : [formats_1.fullFormats, fullName];\n    const list = opts.formats || formats_1.formatNames;\n    addFormats(ajv, list, formats, exportName);\n    if (opts.keywords)\n        (0, limit_1.default)(ajv);\n    return ajv;\n};\nformatsPlugin.get = (name, mode = \"full\") => {\n    const formats = mode === \"fast\" ? formats_1.fastFormats : formats_1.fullFormats;\n    const f = formats[name];\n    if (!f)\n        throw new Error(`Unknown format \"${name}\"`);\n    return f;\n};\nfunction addFormats(ajv, list, fs, exportName) {\n    var _a;\n    var _b;\n    (_a = (_b = ajv.opts.code).formats) !== null && _a !== void 0 ? _a : (_b.formats = (0, codegen_1._) `require(\"ajv-formats/dist/formats\").${exportName}`);\n    for (const f of list)\n        ajv.addFormat(f, fs[f]);\n}\nmodule.exports = exports = formatsPlugin;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = formatsPlugin;\n//# sourceMappingURL=index.js.map", "/**\n * AJV-based JSON Schema validator provider\n */\n\nimport { Ajv as Draft7Ajv } from 'ajv';\nimport { Ajv2019 } from 'ajv/dist/2019.js';\nimport { Ajv2020 } from 'ajv/dist/2020.js';\nimport _addFormats from 'ajv-formats';\n\nimport { declaredDialect } from './dialects';\nimport type { JsonSchemaType, JsonSchemaValidator, jsonSchemaValidator, JsonSchemaValidatorResult } from './types';\n\n/** Structural subset of the AJV interface used by {@link AjvJsonSchemaValidator}. */\ninterface AjvLike {\n    compile: (schema: unknown) => AjvValidateFunction;\n    getSchema: (keyRef: string) => AjvValidateFunction | undefined;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    errorsText: (errors?: any) => string;\n}\n\ninterface AjvValidateFunction {\n    (input: unknown): boolean;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    errors?: any;\n}\n\n/** `ajv-formats` default export, normalised through the CJS/ESM interop wrapper. */\nconst addFormats = _addFormats as unknown as typeof _addFormats.default;\n\nfunction createDefaultAjvInstance(engineClass: typeof Ajv2020 | typeof Ajv2019 | typeof Draft7Ajv): AjvLike {\n    const ajv = new engineClass({\n        strict: false,\n        validateFormats: true,\n        validateSchema: false,\n        allErrors: true\n    });\n    addFormats(ajv);\n    return ajv;\n}\n\n/**\n * AJV-backed JSON Schema validator. See `@modelcontextprotocol/{client,server}/validators/ajv`\n * for the customisation entry point (re-exports `Ajv` and `addFormats` from the bundled copy).\n *\n * Default dispatches on the schema's declared dialect: no `$schema` or 2020-12 → `Ajv2020`\n * (SEP-1613); 2019-09 → `Ajv2019`; draft-07 or draft-06 → the classic draft-07 `Ajv` class\n * (draft-07's changes over draft-06 are additive, so one engine covers both). Known draft-07 deviation: classic Ajv\n * evaluates keywords adjacent to `$ref` (stricter than draft-07's ignore-siblings rule, matching\n * v1's default engine), while the cfworker provider ignores them per spec.\n * Schemas declaring any other `$schema` are\n * rejected with a plain `Error`; pass a pre-configured Ajv instance to validate\n * other dialects. The SDK bundles ajv internally but does not re-export `Ajv2020` (its type\n * graph tips downstream declaration bundling — see #2339). To construct a custom 2020-12\n * instance, add `ajv` to your own dependencies (matching the SDK's pinned version) and\n * `import { Ajv2020 } from 'ajv/dist/2020.js'` — `new Ajv(...)` is the draft-07 class and would\n * silently downgrade dialect.\n *\n * @example Use with default configuration\n * ```ts source=\"./ajvProvider.examples.ts#AjvJsonSchemaValidator_default\"\n * const validator = new AjvJsonSchemaValidator();\n * ```\n *\n * @example Use with a custom AJV instance\n * ```ts source=\"./ajvProvider.examples.ts#AjvJsonSchemaValidator_customInstance\"\n * // import { Ajv2020 } from 'ajv/dist/2020.js';\n * const ajv = new Ajv2020({ strict: false, validateSchema: false, allErrors: true });\n * const validator = new AjvJsonSchemaValidator(ajv);\n * ```\n *\n * @example Register ajv-formats\n * ```ts source=\"./ajvProvider.examples.ts#AjvJsonSchemaValidator_withFormats\"\n * // import { Ajv2020 } from 'ajv/dist/2020.js';\n * const ajv = new Ajv2020({ strict: false, validateSchema: false, allErrors: true });\n * addFormats(ajv);\n * const validator = new AjvJsonSchemaValidator(ajv);\n * ```\n */\nexport class AjvJsonSchemaValidator implements jsonSchemaValidator {\n    private _ajv: AjvLike | undefined;\n    /** Lazy classic (draft-07) engine, built on the first draft-07/draft-06-declared schema. */\n    private _ajvDraft7: AjvLike | undefined;\n    /** Lazy 2019-09 engine, built on the first 2019-09-declared schema. */\n    private _ajv2019: AjvLike | undefined;\n    /** True iff the constructor received a caller-supplied engine; the `$schema` dispatch is skipped. */\n    private readonly _userAjv: boolean;\n\n    /**\n     * @param ajv - Optional pre-configured AJV-compatible instance. When supplied, this instance is\n     * used for **every** schema regardless of its declared `$schema` (the caller owns dialect\n     * choice). When omitted, the provider constructs per-dialect engines (`Ajv2020`, `Ajv2019`,\n     * and the classic draft-07 `Ajv` for draft-07/06-declared schemas) with\n     * `strict: false`, `validateFormats: true`, `validateSchema: false`, `allErrors: true`, and\n     * `ajv-formats` registered — **lazily, on the first {@linkcode getValidator} call needing each**, so\n     * constructing the provider (e.g. as the default validator of a `Client`/`Server` that never\n     * validates a JSON Schema) does not pay the ajv + ajv-formats instantiation cost. The parameter\n     * is typed structurally so consumers who don't pass an instance need not have `ajv` installed.\n     */\n    constructor(ajv?: AjvLike) {\n        this._userAjv = ajv !== undefined;\n        this._ajv = ajv;\n    }\n\n    /** The underlying 2020-12 engine — the default instance is created on first use. */\n    private get ajv(): AjvLike {\n        return (this._ajv ??= createDefaultAjvInstance(Ajv2020));\n    }\n\n    /**\n     * Pick the engine for a schema's declared dialect. A caller-supplied engine is used for\n     * every schema — do not second-guess by `$schema` (bring-your-own-validator means\n     * bring-your-own-dialect). Otherwise: no `$schema` or 2020-12 → `Ajv2020`; 2019-09 →\n     * `Ajv2019`; draft-07 or draft-06 → classic `Ajv`; anything else → `Error`.\n     */\n    private _engineFor(schema: JsonSchemaType): AjvLike {\n        if (this._userAjv) {\n            return this.ajv;\n        }\n        const dialect = declaredDialect(\n            schema,\n            'pass a pre-configured Ajv instance to AjvJsonSchemaValidator(ajv) to validate other dialects.'\n        );\n        if (dialect === '2020-12') {\n            return this.ajv;\n        }\n        if (dialect === '2019-09') {\n            return (this._ajv2019 ??= createDefaultAjvInstance(Ajv2019));\n        }\n        return (this._ajvDraft7 ??= createDefaultAjvInstance(Draft7Ajv));\n    }\n\n    getValidator<T>(schema: JsonSchemaType): JsonSchemaValidator<T> {\n        const engine = this._engineFor(schema);\n        const ajvValidator =\n            '$id' in schema && typeof schema.$id === 'string'\n                ? (engine.getSchema(schema.$id) ?? engine.compile(schema))\n                : engine.compile(schema);\n\n        return (input: unknown): JsonSchemaValidatorResult<T> => {\n            const valid = ajvValidator(input);\n\n            return valid\n                ? {\n                      valid: true,\n                      data: input as T,\n                      errorMessage: undefined\n                  }\n                : {\n                      valid: false,\n                      data: undefined,\n                      errorMessage: engine.errorsText(ajvValidator.errors)\n                  };\n        };\n    }\n}\n\n/**\n * Draft-07 AJV class, re-exported for consumers who need to opt back to the pre-SEP-1613 default.\n * The full v1-equivalent construction is:\n *\n * ```ts\n * const ajv = new Ajv({ strict: false, validateFormats: true, validateSchema: false, allErrors: true });\n * addFormats(ajv);\n * new AjvJsonSchemaValidator(ajv);\n * ```\n *\n * (omitting `validateSchema: false` makes a 2020-12-stamped `$schema` fail with an opaque\n * \"no schema with key or ref …\" engine error; omitting `addFormats` silently drops `format`\n * validation that the v1 default had).\n *\n * The SDK bundles ajv internally but does not re-export `Ajv2020` (its type graph tips downstream\n * declaration bundling — see #2339). To construct a custom 2020-12 instance, add `ajv` to your own\n * dependencies (matching the SDK's pinned version) and `import { Ajv2020 } from 'ajv/dist/2020.js'`.\n */\nconst Ajv = Draft7Ajv;\n\nexport { addFormats, Ajv };\n", "import { n as AjvJsonSchemaValidator } from \"./ajvProvider-CEoC__sr.mjs\";\nimport process from \"node:process\";\n\nexport { AjvJsonSchemaValidator as DefaultJsonSchemaValidator, process };", "import type { StandardSchemaV1 } from '@modelcontextprotocol/core-internal';\n\nexport const COMPLETABLE_SYMBOL: unique symbol = Symbol.for('mcp.completable');\n\nexport type CompleteCallback<T extends StandardSchemaV1 = StandardSchemaV1> = (\n    value: StandardSchemaV1.InferInput<T>,\n    context?: {\n        arguments?: Record<string, string>;\n    }\n) => StandardSchemaV1.InferInput<T>[] | Promise<StandardSchemaV1.InferInput<T>[]>;\n\nexport type CompletableMeta<T extends StandardSchemaV1 = StandardSchemaV1> = {\n    complete: CompleteCallback<T>;\n};\n\nexport type CompletableSchema<T extends StandardSchemaV1> = T & {\n    [COMPLETABLE_SYMBOL]: CompletableMeta<T>;\n};\n\n/**\n * Wraps a schema to provide autocompletion capabilities. Useful for, e.g., prompt arguments in MCP.\n *\n * @example\n * ```ts source=\"./completable.examples.ts#completable_basicUsage\"\n * server.registerPrompt(\n *     'review-code',\n *     {\n *         title: 'Code Review',\n *         argsSchema: z.object({\n *             language: completable(z.string().describe('Programming language'), value =>\n *                 ['typescript', 'javascript', 'python', 'rust', 'go'].filter(lang => lang.startsWith(value))\n *             )\n *         })\n *     },\n *     ({ language }) => ({\n *         messages: [\n *             {\n *                 role: 'user' as const,\n *                 content: {\n *                     type: 'text' as const,\n *                     text: `Review this ${language} code.`\n *                 }\n *             }\n *         ]\n *     })\n * );\n * ```\n *\n * @see {@linkcode server/mcp.McpServer.registerPrompt | McpServer.registerPrompt} for using completable schemas in prompt argument definitions\n */\nexport function completable<T extends StandardSchemaV1>(schema: T, complete: CompleteCallback<T>): CompletableSchema<T> {\n    Object.defineProperty(schema as object, COMPLETABLE_SYMBOL, {\n        value: { complete } as CompletableMeta<T>,\n        enumerable: false,\n        writable: false,\n        configurable: false\n    });\n    return schema as CompletableSchema<T>;\n}\n\n/**\n * Checks if a schema is completable (has completion metadata).\n */\nexport function isCompletable(schema: unknown): schema is CompletableSchema<StandardSchemaV1> {\n    return !!schema && typeof schema === 'object' && COMPLETABLE_SYMBOL in (schema as object);\n}\n\n/**\n * Gets the completer callback from a completable schema, if it exists.\n */\nexport function getCompleter<T extends StandardSchemaV1>(schema: T): CompleteCallback<T> | undefined {\n    const meta = (schema as unknown as { [COMPLETABLE_SYMBOL]?: CompletableMeta<T> })[COMPLETABLE_SYMBOL];\n    return meta?.complete as CompleteCallback<T> | undefined;\n}\n", "/** Default interval between SSE keep-alive comment frames. */\nexport const DEFAULT_SSE_KEEP_ALIVE_MS = 15_000;\n\nconst MAX_TIMER_DELAY_MS = 2 ** 31 - 1;\n\n/** Arms an unref'd timer, or disables keep-alive for invalid delays. */\nexport function armSseKeepAlive(intervalMs: number, onTick: () => void): ReturnType<typeof setInterval> | undefined {\n    if (!Number.isFinite(intervalMs) || intervalMs < 1) {\n        return undefined;\n    }\n\n    const timer = setInterval(onTick, Math.min(intervalMs, MAX_TIMER_DELAY_MS));\n    (timer as { unref?: () => void }).unref?.();\n    return timer;\n}\n", "import type { ServerCapabilities, SubscriptionFilter } from '@modelcontextprotocol/core-internal';\n\n/**\n * A change event a server publishes for delivery on open `subscriptions/listen`\n * streams. Each variant maps onto exactly one notification method:\n *\n * - `tools_list_changed` → `notifications/tools/list_changed`\n * - `prompts_list_changed` → `notifications/prompts/list_changed`\n * - `resources_list_changed` → `notifications/resources/list_changed`\n * - `resource_updated` → `notifications/resources/updated` (carries the URI)\n *\n * The bus carries the EVENT, not the wire shape — the entry's listen router\n * owns subscription-id stamping and per-stream filtering.\n */\nexport type ServerEvent =\n    | { kind: 'tools_list_changed' }\n    | { kind: 'prompts_list_changed' }\n    | { kind: 'resources_list_changed' }\n    | { kind: 'resource_updated'; uri: string };\n\n/**\n * The server-side change-event seam for `subscriptions/listen`.\n *\n * The serving entry (`createMcpHandler`) owns the per-stream listen router:\n * each open `subscriptions/listen` stream registers a listener via\n * `subscribe()`, and consumer code (typically via `handler.notify.*` sugar)\n * publishes change events via `publish()`. In-process servers can use the\n * default {@linkcode InMemoryServerEventBus}; multi-process deployments\n * implement this interface over their own pub/sub.\n *\n * The SDK owns wire semantics (ack-first, filtering, subscription-id\n * stamping, teardown); a `ServerEventBus` only sources the events. It MUST\n * NOT echo back to the listener that published an event when called from\n * inside that listener (no surprise here — the default delivers\n * synchronously and listeners never publish).\n */\nexport interface ServerEventBus {\n    /**\n     * Publish a change event to every registered listener.\n     */\n    publish(event: ServerEvent): void;\n    /**\n     * Register a listener; returns an idempotent unsubscribe function.\n     */\n    subscribe(listener: (event: ServerEvent) => void): () => void;\n}\n\n/**\n * A `ServerEventBus` backed by an in-process listener set.\n *\n * `publish()` delivers synchronously to the live listener set (a listener\n * unsubscribing itself mid-dispatch is safe; the entry's listen-router\n * listeners never unsubscribe peers). A throwing listener does not stop\n * delivery to the others.\n */\nexport class InMemoryServerEventBus implements ServerEventBus {\n    private readonly _listeners = new Set<(event: ServerEvent) => void>();\n\n    /**\n     * @param onerror - Optional callback for errors thrown by listeners\n     *   during dispatch.\n     */\n    constructor(private readonly onerror?: (error: Error) => void) {}\n\n    publish(event: ServerEvent): void {\n        for (const listener of this._listeners) {\n            try {\n                listener(event);\n            } catch (error) {\n                this.onerror?.(error instanceof Error ? error : new Error(String(error)));\n            }\n        }\n    }\n\n    subscribe(listener: (event: ServerEvent) => void): () => void {\n        this._listeners.add(listener);\n        let live = true;\n        return () => {\n            if (!live) return;\n            live = false;\n            this._listeners.delete(listener);\n        };\n    }\n\n    /** The number of currently registered listeners (test/introspection only — the routers track capacity via their own open-subscription set). */\n    get listenerCount(): number {\n        return this._listeners.size;\n    }\n}\n\n/**\n * Typed publish-side facade over `bus.publish` returned by `createMcpHandler`:\n * each method publishes the corresponding {@linkcode ServerEvent}. Prefer this\n * over calling `bus.publish` directly — the names match the wire methods.\n */\nexport interface ServerNotifier {\n    /** Publish `notifications/tools/list_changed` to every open subscription that opted in. */\n    toolsChanged(): void;\n    /** Publish `notifications/prompts/list_changed` to every open subscription that opted in. */\n    promptsChanged(): void;\n    /** Publish `notifications/resources/list_changed` to every open subscription that opted in. */\n    resourcesChanged(): void;\n    /** Publish `notifications/resources/updated` for `uri` to every open subscription that opted in to that URI. */\n    resourceUpdated(uri: string): void;\n}\n\n/** Build a {@linkcode ServerNotifier} over a bus. */\nexport function createServerNotifier(bus: ServerEventBus): ServerNotifier {\n    return {\n        toolsChanged: () => bus.publish({ kind: 'tools_list_changed' }),\n        promptsChanged: () => bus.publish({ kind: 'prompts_list_changed' }),\n        resourcesChanged: () => bus.publish({ kind: 'resources_list_changed' }),\n        resourceUpdated: (uri: string) => bus.publish({ kind: 'resource_updated', uri })\n    };\n}\n\n/**\n * Whether a `subscriptions/listen` filter accepts a given change event.\n *\n * Pure: no I/O, no mutation. The filter governs ONLY the four\n * subscription-gated change types — non-gated notifications never reach the\n * bus and are not modeled here.\n *\n * `resource_updated` matches only when `resourceSubscriptions` is present and\n * contains the event's URI exactly (per the spec: \"for these resource URIs\").\n */\nexport function listenFilterAccepts(filter: SubscriptionFilter, event: ServerEvent): boolean {\n    switch (event.kind) {\n        case 'tools_list_changed': {\n            return filter.toolsListChanged === true;\n        }\n        case 'prompts_list_changed': {\n            return filter.promptsListChanged === true;\n        }\n        case 'resources_list_changed': {\n            return filter.resourcesListChanged === true;\n        }\n        case 'resource_updated': {\n            return filter.resourceSubscriptions !== undefined && filter.resourceSubscriptions.includes(event.uri);\n        }\n    }\n}\n\n/**\n * The honored subset of a requested filter: keeps only the fields the client\n * explicitly opted in to (drops `false` and absent fields), narrowed against\n * the server's declared capabilities when supplied. The serving entry sends\n * this back in `notifications/subscriptions/acknowledged` so the ack reflects\n * what the server can actually deliver.\n *\n * - `toolsListChanged` is honored only when `capabilities.tools.listChanged`\n *   is advertised; likewise `promptsListChanged` / `resourcesListChanged`.\n * - `resourceSubscriptions` is honored only when\n *   `capabilities.resources.subscribe` is advertised.\n *\n * `capabilities` is optional on this pure helper for test convenience only —\n * both wired routers REQUIRE capabilities at the call site (the HTTP router's\n * `serve()` takes a required parameter; `StdioListenRouter.serve()` throws\n * before `setServerCapabilities()` was called), so the fail-open\n * `undefined → honor everything` branch is never reachable on a wired entry.\n */\nexport function honoredSubset(requested: SubscriptionFilter, capabilities?: ServerCapabilities): SubscriptionFilter {\n    const honored: SubscriptionFilter = {};\n    const allow = (bit: unknown): boolean => capabilities === undefined || bit === true;\n    if (requested.toolsListChanged === true && allow(capabilities?.tools?.listChanged)) honored.toolsListChanged = true;\n    if (requested.promptsListChanged === true && allow(capabilities?.prompts?.listChanged)) honored.promptsListChanged = true;\n    if (requested.resourcesListChanged === true && allow(capabilities?.resources?.listChanged)) honored.resourcesListChanged = true;\n    if (\n        requested.resourceSubscriptions !== undefined &&\n        requested.resourceSubscriptions.length > 0 &&\n        allow(capabilities?.resources?.subscribe)\n    ) {\n        honored.resourceSubscriptions = [...requested.resourceSubscriptions];\n    }\n    return honored;\n}\n\n/** Map a {@linkcode ServerEvent} onto its wire notification `{method, params}`. */\nexport function serverEventToNotification(event: ServerEvent): { method: string; params?: { uri: string } } {\n    switch (event.kind) {\n        case 'tools_list_changed': {\n            return { method: 'notifications/tools/list_changed' };\n        }\n        case 'prompts_list_changed': {\n            return { method: 'notifications/prompts/list_changed' };\n        }\n        case 'resources_list_changed': {\n            return { method: 'notifications/resources/list_changed' };\n        }\n        case 'resource_updated': {\n            return { method: 'notifications/resources/updated', params: { uri: event.uri } };\n        }\n    }\n}\n", "/**\n * The entry-handled `subscriptions/listen` router for the HTTP serving entry.\n *\n * `createMcpHandler` recognizes a modern-classified `subscriptions/listen`\n * request and routes it here: the entry owns ack-first, per-stream filtering,\n * subscription-id stamping, keepalive, capacity guarding, and teardown. The\n * consumer's factory IS constructed for listen, to read the instance's\n * declared `ServerCapabilities` only — the probe instance is never connected\n * and is closed immediately after the capabilities read. Token verification\n * and any per-request authorization still belong at the middleware layer\n * mounted in front of `createMcpHandler` (the entry's documented authz\n * posture).\n *\n * Per the spec at protocol revision 2026-07-28:\n * - The acknowledged notification is the FIRST message on the stream and\n *   carries the honored subset of the requested filter.\n * - Every notification on the stream (including the ack) carries the listen\n *   request's JSON-RPC id under `_meta['io.modelcontextprotocol/subscriptionId']`.\n * - The server MUST NOT deliver a notification type the client did not request.\n * - Server-side graceful close (`closeAll()`) emits the empty\n *   `subscriptions/listen` JSON-RPC result (the `SubscriptionsListenResult` —\n *   `_meta` carries the subscription id) before closing the stream; an abrupt\n *   transport close carries no response and the client treats it as a\n *   disconnect.\n */\nimport type {\n    Implementation,\n    JSONRPCRequest,\n    RequestId,\n    ServerCapabilities,\n    SubscriptionFilter\n} from '@modelcontextprotocol/core-internal';\nimport { codecForVersion, MODERN_WIRE_REVISION, SERVER_INFO_META_KEY, SUBSCRIPTION_ID_META_KEY } from '@modelcontextprotocol/core-internal';\n\nimport type { ServerEventBus } from './serverEventBus';\nimport { honoredSubset, listenFilterAccepts, serverEventToNotification } from './serverEventBus';\nimport { armSseKeepAlive, DEFAULT_SSE_KEEP_ALIVE_MS } from './sseKeepAlive';\n\n/** Default capacity guard: refuse a new subscription when this many are already open. */\nexport const DEFAULT_MAX_SUBSCRIPTIONS = 1024;\n\n/** Options for {@linkcode createListenRouter}. */\nexport interface ListenRouterOptions {\n    /** The event bus listen streams subscribe to. */\n    bus: ServerEventBus;\n    /** Reject a new listen with `-32603` when this many subscriptions are already open (default 1024). */\n    maxSubscriptions?: number;\n    /** SSE comment-frame keepalive interval; `0` disables keepalive (default 15000). */\n    keepAliveMs?: number;\n    /** Out-of-band error reporting (never alters the response). */\n    onerror?: (error: Error) => void;\n}\n\n/**\n * A wire-shape notification body (method + loose params).\n * @internal\n */\nexport interface NotificationBody {\n    method: string;\n    params: { _meta?: Record<string, unknown>; [key: string]: unknown };\n}\n\nfunction jsonRpcError(id: RequestId | null, code: number, message: string): Response {\n    return Response.json({ jsonrpc: '2.0', error: { code, message }, id }, { status: 200 });\n}\n\n/** Stamp the subscription id onto a notification's `_meta`. Non-mutating. */\nfunction stampSubscriptionId(\n    notification: { method: string; params?: { _meta?: Record<string, unknown>; [key: string]: unknown } },\n    subscriptionId: RequestId\n): NotificationBody {\n    return {\n        method: notification.method,\n        params: {\n            ...notification.params,\n            _meta: { ...notification.params?._meta, [SUBSCRIPTION_ID_META_KEY]: subscriptionId }\n        }\n    };\n}\n\n/**\n * Read the requested filter off a `subscriptions/listen` request body.\n * Returns the validated filter, or `undefined` when `params.notifications`\n * is absent or fails the schema (the caller answers `-32602` — the spec\n * marks `notifications` REQUIRED on the listen request).\n */\nexport function parseListenFilter(message: JSONRPCRequest): SubscriptionFilter | undefined {\n    // `subscriptions/listen` is 2026-only vocabulary; route through the era\n    // codec's request validator (the wire layer owns the filter schema).\n    const outcome = codecForVersion(MODERN_WIRE_REVISION).validateRequest('subscriptions/listen', message);\n    return outcome.ok ? outcome.value.params?.notifications : undefined;\n}\n\n/**\n * The HTTP listen router: holds the set of open subscriptions and serves\n * each listen request as an SSE response.\n */\nexport interface ListenRouter {\n    /**\n     * Serve one `subscriptions/listen` request and return the SSE `Response`\n     * (or, on capacity / params rejection, the in-band JSON-RPC error\n     * `Response`). The ack notification is the first SSE frame.\n     *\n     * `capabilities` is required: the acknowledged filter is always narrowed\n     * against what the serving instance advertises (honoring a filter without\n     * capabilities would fail open and deliver unadvertised types).\n     * `serverInfo` is the serving instance's identity, stamped onto the\n     * graceful-close result's `_meta` (the spec's `SubscriptionsListenResultMetaObject`\n     * extends `ResultMetaObject`, so the serverInfo SHOULD applies there too).\n     */\n    serve(message: JSONRPCRequest, signal: AbortSignal | undefined, capabilities: ServerCapabilities, serverInfo: Implementation): Response;\n    /**\n     * Gracefully close every open subscription stream: emits the empty\n     * `subscriptions/listen` JSON-RPC result (the spec's graceful-close\n     * signal) as the final SSE frame, then closes the stream.\n     */\n    closeAll(): void;\n    /** The number of currently open subscription streams (for tests / introspection). */\n    readonly openCount: number;\n}\n\nexport function createListenRouter(options: ListenRouterOptions): ListenRouter {\n    const { bus, onerror } = options;\n    const maxSubscriptions = options.maxSubscriptions ?? DEFAULT_MAX_SUBSCRIPTIONS;\n    const keepAliveMs = options.keepAliveMs ?? DEFAULT_SSE_KEEP_ALIVE_MS;\n\n    const open = new Set<(graceful: boolean) => void>();\n\n    function serve(\n        message: JSONRPCRequest,\n        signal: AbortSignal | undefined,\n        capabilities: ServerCapabilities,\n        serverInfo: Implementation\n    ): Response {\n        // Capacity guard, pre-ack: in-band -32603 on HTTP 200.\n        if (open.size >= maxSubscriptions) {\n            onerror?.(new Error(`subscriptions/listen refused: subscription limit reached (${maxSubscriptions})`));\n            return jsonRpcError(message.id, -32_603, 'Subscription limit reached');\n        }\n        const filter = parseListenFilter(message);\n        if (filter === undefined) {\n            return jsonRpcError(message.id, -32_602, \"Invalid params: 'notifications' is required and must be a valid SubscriptionFilter\");\n        }\n        const honored = honoredSubset(filter, capabilities);\n        // The spec carries the listen request's JSON-RPC id verbatim as the\n        // subscription id; demux is per-connection (each HTTP listen has its\n        // own SSE stream) so client-chosen ids cannot route across requests.\n        const subscriptionId = message.id;\n\n        const encoder = new TextEncoder();\n        let controller!: ReadableStreamDefaultController<Uint8Array>;\n        let closed = false;\n        let unsubscribe: (() => void) | undefined;\n        let keepAliveTimer: ReturnType<typeof setInterval> | undefined;\n        let abortCleanup: (() => void) | undefined;\n\n        const writeFrame = (frame: string) => {\n            if (closed) return;\n            try {\n                controller.enqueue(encoder.encode(frame));\n            } catch (error) {\n                onerror?.(error instanceof Error ? error : new Error(String(error)));\n            }\n        };\n        const writeNotification = (method: string, params: { _meta?: Record<string, unknown>; [key: string]: unknown }) => {\n            writeFrame(`event: message\\ndata: ${JSON.stringify({ jsonrpc: '2.0', method, params })}\\n\\n`);\n        };\n\n        const teardown = (graceful: boolean) => {\n            if (closed) return;\n            if (graceful) {\n                // Server-side graceful close: emit the empty\n                // `subscriptions/listen` JSON-RPC result before closing the\n                // stream so the client distinguishes graceful end from a\n                // transport drop. Written before `closed = true` so writeFrame\n                // still enqueues.\n                writeFrame(\n                    `event: message\\ndata: ${JSON.stringify({\n                        jsonrpc: '2.0',\n                        id: subscriptionId,\n                        result: {\n                            resultType: 'complete',\n                            _meta: { [SUBSCRIPTION_ID_META_KEY]: subscriptionId, [SERVER_INFO_META_KEY]: serverInfo }\n                        }\n                    })}\\n\\n`\n                );\n            }\n            closed = true;\n            try {\n                unsubscribe?.();\n            } catch (error) {\n                onerror?.(error instanceof Error ? error : new Error(String(error)));\n            }\n            if (keepAliveTimer !== undefined) clearInterval(keepAliveTimer);\n            abortCleanup?.();\n            open.delete(teardown);\n            try {\n                controller.close();\n            } catch {\n                // Already closed/cancelled by the consumer.\n            }\n        };\n\n        const readable = new ReadableStream<Uint8Array>({\n            start(streamController) {\n                controller = streamController;\n\n                // Ack-first MUST: the acknowledged notification is the first\n                // frame on the stream, stamped with the subscription id.\n                const ack = stampSubscriptionId(\n                    { method: 'notifications/subscriptions/acknowledged', params: { notifications: honored } },\n                    subscriptionId\n                );\n                writeNotification(ack.method, ack.params);\n\n                // Nothing honored means nothing can ever be delivered: complete the subscription instead of holding the stream.\n                if (Object.keys(honored).length === 0) {\n                    teardown(true);\n                    return;\n                }\n\n                // Only after the ack frame is enqueued does delivery activate.\n                unsubscribe = bus.subscribe(event => {\n                    if (closed || !listenFilterAccepts(honored, event)) return;\n                    const note = stampSubscriptionId(serverEventToNotification(event), subscriptionId);\n                    writeNotification(note.method, note.params);\n                });\n\n                keepAliveTimer = armSseKeepAlive(keepAliveMs, () => writeFrame(': keepalive\\n\\n'));\n\n                open.add(teardown);\n            },\n            cancel() {\n                // The client closed the SSE stream — the spec's HTTP cancel\n                // signal. Not a server-side graceful close, so no listen\n                // result is written (and the consumer is gone anyway).\n                teardown(false);\n            }\n        });\n\n        if (signal !== undefined) {\n            if (signal.aborted) {\n                teardown(false);\n            } else {\n                const onAbort = () => teardown(false);\n                signal.addEventListener('abort', onAbort, { once: true });\n                abortCleanup = () => signal.removeEventListener('abort', onAbort);\n            }\n        }\n\n        return new Response(readable, {\n            status: 200,\n            headers: {\n                'Content-Type': 'text/event-stream',\n                'Cache-Control': 'no-cache, no-transform',\n                Connection: 'keep-alive',\n                'X-Accel-Buffering': 'no'\n            }\n        });\n    }\n\n    return {\n        serve,\n        closeAll() {\n            for (const teardown of open) teardown(true);\n        },\n        get openCount() {\n            return open.size;\n        }\n    };\n}\n\n/* ------------------------------------------------------------------------ *\n * Stdio listen router\n * ------------------------------------------------------------------------ */\n\n/** A graceful-close `subscriptions/listen` result frame emitted by {@linkcode StdioListenRouter.teardownAll}. */\nexport interface ListenCloseFrame {\n    jsonrpc: '2.0';\n    id: RequestId;\n    result: {\n        resultType: 'complete';\n        _meta: { [SUBSCRIPTION_ID_META_KEY]: RequestId; [SERVER_INFO_META_KEY]?: Implementation };\n    };\n}\n\nconst CHANGE_NOTIFICATION_METHODS: ReadonlySet<string> = new Set([\n    'notifications/tools/list_changed',\n    'notifications/prompts/list_changed',\n    'notifications/resources/list_changed',\n    'notifications/resources/updated'\n]);\n\n/**\n * Per-connection listen state for the stdio entry. One instance is held by\n * `serveStdio` for the connection lifetime; it routes inbound\n * `subscriptions/listen` / `notifications/cancelled` and rewrites outbound\n * change notifications onto the active subscriptions. No bus — the long-lived\n * pinned instance's existing `send*ListChanged()` calls feed straight into\n * `routeOutbound()`.\n */\nexport class StdioListenRouter {\n    /** Active subscriptions, keyed by the listen request's JSON-RPC id verbatim. */\n    private readonly _subs = new Map<RequestId, SubscriptionFilter>();\n    /**\n     * The serving instance's declared capabilities. Filled in by the entry\n     * once the modern instance is constructed (the router is created before\n     * the instance exists), so the acknowledged filter is narrowed against\n     * what the server can actually deliver.\n     */\n    private _serverCapabilities: ServerCapabilities | undefined;\n    /**\n     * The serving instance's identity, stamped onto the graceful-close\n     * results' `_meta` (the spec's `SubscriptionsListenResultMetaObject` extends\n     * `ResultMetaObject`). Handed over together with the capabilities.\n     */\n    private _serverInfo: Implementation | undefined;\n\n    constructor(\n        private readonly _maxSubscriptions: number = DEFAULT_MAX_SUBSCRIPTIONS,\n        serverCapabilities?: ServerCapabilities,\n        serverInfo?: Implementation\n    ) {\n        this._serverCapabilities = serverCapabilities;\n        this._serverInfo = serverInfo;\n    }\n\n    /**\n     * Record the serving instance's declared capabilities and identity once\n     * it has been constructed. Called by `serveStdio`'s connect path;\n     * subsequent `serve()` calls narrow the honored filter against the\n     * capabilities, and `teardownAll()` stamps the identity.\n     */\n    setServerCapabilities(capabilities: ServerCapabilities, serverInfo?: Implementation): void {\n        this._serverCapabilities = capabilities;\n        if (serverInfo !== undefined) this._serverInfo = serverInfo;\n    }\n\n    /** Whether `id` is an active listen subscription on this connection. */\n    has(id: RequestId): boolean {\n        return this._subs.has(id);\n    }\n\n    /**\n     * Serve one inbound `subscriptions/listen` request: registers the\n     * subscription and returns the stamped acknowledged notification (or, on\n     * capacity / params rejection, the in-band JSON-RPC error response).\n     *\n     * @throws when called before {@linkcode setServerCapabilities} (or the\n     * constructor) has supplied the serving instance's capabilities. Honoring a\n     * filter without knowing the server's advertised capabilities would fail\n     * open (deliver unadvertised types); the entry guarantees capabilities are\n     * set before any listen request is routed here.\n     */\n    serve(message: JSONRPCRequest): NotificationBody | { jsonrpc: '2.0'; id: RequestId; error: { code: number; message: string } } {\n        if (this._serverCapabilities === undefined) {\n            throw new Error(\n                'StdioListenRouter.serve() called before setServerCapabilities(); refusing to honor a filter without capabilities'\n            );\n        }\n        if (this._subs.size >= this._maxSubscriptions) {\n            return { jsonrpc: '2.0', id: message.id, error: { code: -32_603, message: 'Subscription limit reached' } };\n        }\n        const filter = parseListenFilter(message);\n        if (filter === undefined) {\n            return {\n                jsonrpc: '2.0',\n                id: message.id,\n                error: { code: -32_602, message: \"Invalid params: 'notifications' is required and must be a valid SubscriptionFilter\" }\n            };\n        }\n        const honored = honoredSubset(filter, this._serverCapabilities);\n        this._subs.set(message.id, honored);\n        return stampSubscriptionId({ method: 'notifications/subscriptions/acknowledged', params: { notifications: honored } }, message.id);\n    }\n\n    /**\n     * Tear down one subscription (inbound `notifications/cancelled`). Returns\n     * `true` when a subscription was removed. After this call NOTHING further\n     * is delivered for that subscription id (the post-cancel hardening).\n     */\n    cancel(id: RequestId): boolean {\n        return this._subs.delete(id);\n    }\n\n    /**\n     * Route an outbound notification through the active subscriptions.\n     *\n     * - For a subscription-gated change notification, returns one stamped copy\n     *   per subscription that opted in to it (an empty array means it is\n     *   dropped — the modern era never delivers an un-requested change type).\n     * - For any other outbound message, returns `'passthrough'` (the entry\n     *   forwards it as-is).\n     */\n    routeOutbound(message: { method: string; params?: { [key: string]: unknown } }): NotificationBody[] | 'passthrough' {\n        if (!CHANGE_NOTIFICATION_METHODS.has(message.method)) {\n            return 'passthrough';\n        }\n        const uriParam: unknown = message.params?.['uri'];\n        const uri = typeof uriParam === 'string' ? uriParam : undefined;\n        const event = notificationToServerEvent(message.method, uri);\n        const out: NotificationBody[] = [];\n        for (const [subscriptionId, filter] of this._subs) {\n            if (listenFilterAccepts(filter, event)) {\n                out.push(stampSubscriptionId({ method: message.method, params: message.params ?? {} }, subscriptionId));\n            }\n        }\n        return out;\n    }\n\n    /**\n     * Server-side graceful teardown of every active subscription: returns the\n     * empty `subscriptions/listen` JSON-RPC result for each subscription id —\n     * the spec's graceful-close signal, `_meta` carrying the subscription id\n     * and the serving instance's identity — for the entry to emit before\n     * closing the wire. Clears the set so nothing further is delivered.\n     */\n    teardownAll(): ListenCloseFrame[] {\n        const out: ListenCloseFrame[] = [];\n        for (const id of this._subs.keys()) {\n            out.push({\n                jsonrpc: '2.0',\n                id,\n                result: {\n                    resultType: 'complete',\n                    _meta: {\n                        [SUBSCRIPTION_ID_META_KEY]: id,\n                        ...(this._serverInfo !== undefined && { [SERVER_INFO_META_KEY]: this._serverInfo })\n                    }\n                }\n            });\n        }\n        this._subs.clear();\n        return out;\n    }\n}\n\nfunction notificationToServerEvent(method: string, uri: string | undefined): import('./serverEventBus').ServerEvent {\n    switch (method) {\n        case 'notifications/tools/list_changed': {\n            return { kind: 'tools_list_changed' };\n        }\n        case 'notifications/prompts/list_changed': {\n            return { kind: 'prompts_list_changed' };\n        }\n        case 'notifications/resources/list_changed': {\n            return { kind: 'resources_list_changed' };\n        }\n        default: {\n            return { kind: 'resource_updated', uri: uri ?? '' };\n        }\n    }\n}\n", "import type { AuthInfo } from '@modelcontextprotocol/core-internal';\nimport { OAuthError, OAuthErrorCode } from '@modelcontextprotocol/core-internal';\n\n/**\n * Minimal token-verifier interface for MCP servers acting as an OAuth 2.0\n * Resource Server. Implementations introspect or locally validate an access\n * token and return the resulting {@link AuthInfo}, which the serving entry\n * surfaces to MCP request handlers via `ctx.http.authInfo`.\n *\n * This is intentionally narrower than a full OAuth Authorization Server\n * provider — it only covers the verification step a Resource Server needs.\n */\nexport interface OAuthTokenVerifier {\n    /**\n     * Verifies an access token and returns information about it.\n     *\n     * Implementations should throw an {@link OAuthError} with\n     * `OAuthErrorCode.InvalidToken` when the token is unknown, revoked, or\n     * otherwise invalid; the bearer-auth helpers map that to a `401` with a\n     * `WWW-Authenticate` challenge.\n     *\n     * Note: bearer-auth verification rejects tokens whose\n     * `AuthInfo.expiresAt` is unset (matches v1 behavior). Ensure your\n     * verifier populates it (e.g. from RFC 7662 introspection `exp` or the\n     * JWT `exp` claim).\n     */\n    verifyAccessToken(token: string): Promise<AuthInfo>;\n}\n\n/**\n * Options for {@link verifyBearerToken}, {@link requireBearerAuth}, and\n * {@link bearerAuthChallengeResponse}.\n */\nexport interface BearerAuthOptions {\n    /**\n     * A verifier used to validate access tokens.\n     */\n    verifier: OAuthTokenVerifier;\n\n    /**\n     * Optional scopes that the token must have. When any are missing the\n     * request is refused with `403 insufficient_scope`.\n     */\n    requiredScopes?: string[];\n\n    /**\n     * Optional Protected Resource Metadata URL to advertise in the\n     * `WWW-Authenticate` header on 401/403 responses, per\n     * {@link https://datatracker.ietf.org/doc/html/rfc9728 | RFC 9728}.\n     *\n     * Typically built with `getOAuthProtectedResourceMetadataUrl`, exported\n     * from this package.\n     *\n     * When verification succeeds the value is also stamped onto the returned\n     * {@link AuthInfo} (`authInfo.resourceMetadataUrl`, unless the verifier\n     * already set one), so challenges built after authentication — such as\n     * per-operation `insufficient_scope` scope challenges — advertise the\n     * same document without being configured separately.\n     */\n    resourceMetadataUrl?: string;\n}\n\n/**\n * Options for {@link verifyBearerToken} and {@link requireBearerAuth}:\n * {@link BearerAuthOptions} plus `expectedResource`.\n */\nexport interface VerifyBearerTokenOptions extends BearerAuthOptions {\n    /**\n     * Accept only tokens issued for this resource (the token's audience):\n     * the value your authorization server puts into tokens meant for this\n     * server, usually the server's URL (its\n     * {@link https://datatracker.ietf.org/doc/html/rfc8707 | RFC 8707}\n     * resource identifier).\n     *\n     * When set, a token is accepted only if the verifier reports that value\n     * in `AuthInfo.resource`. The two are compared as strings, ignoring a\n     * fragment and one trailing slash. A token reported for another value, or\n     * for none, is refused with `401 invalid_token`, so the verifier has to\n     * fill `AuthInfo.resource`, for example from the token's `aud` claim.\n     * When unset, `AuthInfo.resource` is not compared with anything.\n     */\n    expectedResource?: URL;\n}\n\n// The serialized value without its fragment and without one trailing slash.\nfunction comparableResource(value: URL): string {\n    const text = String(value);\n    const hash = text.indexOf('#');\n    return (hash === -1 ? text : text.slice(0, hash)).replace(/\\/$/, '');\n}\n\n// A reported resource matches when it serializes to the same string as the expected one, fragment and one trailing slash aside.\nfunction sameResource(reported: URL | undefined, expected: URL): boolean {\n    if (!reported) return false;\n    return comparableResource(reported) === comparableResource(expected);\n}\n\nfunction headerQuotedValue(value: string): string {\n    // HTTP quoted-string per RFC 7235: escape backslash and double quote, and\n    // replace characters a header cannot carry (controls, anything beyond\n    // printable ASCII) so a verifier-authored message can never make the\n    // challenge Response constructor throw.\n    return value.replaceAll(/[\\\\\"]/g, String.raw`\\$&`).replaceAll(/[^\\u0020-\\u007E]/g, ' ');\n}\n\n/**\n * Build a `WWW-Authenticate: Bearer …` challenge header value (RFC 6750).\n *\n * The single formatter behind every challenge this package emits — the\n * bearer-auth 401/403 answers and the per-operation scope-challenge 403 — so\n * all challenges from one server agree on parameter order and quoting. Every\n * parameter value is emitted as an HTTP quoted-string with `\\` and `\"`\n * escaped and non-printable characters replaced.\n */\nexport function buildWwwAuthenticateHeader(\n    errorCode: string,\n    description: string,\n    requiredScopes: readonly string[],\n    resourceMetadataUrl: string | undefined\n): string {\n    let header = `Bearer error=\"${headerQuotedValue(errorCode)}\", error_description=\"${headerQuotedValue(description)}\"`;\n    if (requiredScopes.length > 0) {\n        header += `, scope=\"${headerQuotedValue(requiredScopes.join(' '))}\"`;\n    }\n    if (resourceMetadataUrl) {\n        header += `, resource_metadata=\"${headerQuotedValue(resourceMetadataUrl)}\"`;\n    }\n    return header;\n}\n\n/**\n * Validate a raw `Authorization` header value as a Bearer token and return\n * the verified {@link AuthInfo}.\n *\n * The runtime-neutral core of Bearer authentication: it parses the header,\n * runs the verifier, compares the token's resource with `expectedResource`,\n * enforces `requiredScopes`, and rejects tokens without an\n * expiration or past it. On any failure it throws an {@link OAuthError} —\n * pass that to {@link bearerAuthChallengeResponse} for the matching HTTP\n * answer, or use {@link requireBearerAuth} to get both steps as one call.\n *\n * Framework adapters build on this: `requireBearerAuth` from\n * `@modelcontextprotocol/express` feeds it `req.headers.authorization`.\n */\nexport async function verifyBearerToken(\n    authorizationHeader: string | null | undefined,\n    options: VerifyBearerTokenOptions\n): Promise<AuthInfo> {\n    const { verifier, requiredScopes = [], expectedResource } = options;\n\n    if (!authorizationHeader) {\n        throw new OAuthError(OAuthErrorCode.InvalidToken, 'Missing Authorization header');\n    }\n\n    const [type, token] = authorizationHeader.split(' ');\n    if (type?.toLowerCase() !== 'bearer' || !token) {\n        throw new OAuthError(OAuthErrorCode.InvalidToken, \"Invalid Authorization header format, expected 'Bearer TOKEN'\");\n    }\n\n    const authInfo = await verifier.verifyAccessToken(token);\n\n    // Check if the token was issued for this server (if configured)\n    if (expectedResource !== undefined && !sameResource(authInfo.resource, expectedResource)) {\n        throw new OAuthError(OAuthErrorCode.InvalidToken, 'Token was not issued for this resource');\n    }\n\n    // Check if token has the required scopes (if any)\n    if (requiredScopes.length > 0) {\n        const hasAllScopes = requiredScopes.every(scope => authInfo.scopes.includes(scope));\n        if (!hasAllScopes) {\n            throw new OAuthError(OAuthErrorCode.InsufficientScope, 'Insufficient scope');\n        }\n    }\n\n    // Check if the token is set to expire or if it is expired\n    if (typeof authInfo.expiresAt !== 'number' || Number.isNaN(authInfo.expiresAt)) {\n        throw new OAuthError(OAuthErrorCode.InvalidToken, 'Token has no expiration time');\n    } else if (authInfo.expiresAt < Date.now() / 1000) {\n        throw new OAuthError(OAuthErrorCode.InvalidToken, 'Token has expired');\n    }\n\n    // Hand the gate's discovery configuration inward with the verified token,\n    // so challenges built after authentication (per-operation scope\n    // challenges) advertise the same metadata document. A verifier-set value\n    // wins over the gate's configuration.\n    if (options.resourceMetadataUrl !== undefined && authInfo.resourceMetadataUrl === undefined) {\n        return { ...authInfo, resourceMetadataUrl: options.resourceMetadataUrl };\n    }\n\n    return authInfo;\n}\n\n/**\n * Build the HTTP answer for a Bearer authentication failure.\n *\n * Maps an {@link OAuthError} to its status — `401` for `invalid_token` and\n * `403` for `insufficient_scope` (both carrying the `WWW-Authenticate: Bearer …`\n * challenge, with `resource_metadata` when configured so clients can discover\n * the Authorization Server), `500` for `server_error`, `400` for anything\n * else. A non-`OAuthError` value answers `500 server_error`. The body is the\n * OAuth error JSON.\n */\nexport function bearerAuthChallengeResponse(\n    error: unknown,\n    options?: Pick<BearerAuthOptions, 'requiredScopes' | 'resourceMetadataUrl'>\n): Response {\n    const { requiredScopes = [], resourceMetadataUrl } = options ?? {};\n\n    if (!(error instanceof OAuthError)) {\n        const serverError = new OAuthError(OAuthErrorCode.ServerError, 'Internal Server Error');\n        return Response.json(serverError.toResponseObject(), { status: 500 });\n    }\n\n    switch (error.code) {\n        case OAuthErrorCode.InvalidToken: {\n            const challenge = buildWwwAuthenticateHeader(error.code, error.message, requiredScopes, resourceMetadataUrl);\n            return Response.json(error.toResponseObject(), { status: 401, headers: { 'WWW-Authenticate': challenge } });\n        }\n        case OAuthErrorCode.InsufficientScope: {\n            const challenge = buildWwwAuthenticateHeader(error.code, error.message, requiredScopes, resourceMetadataUrl);\n            return Response.json(error.toResponseObject(), { status: 403, headers: { 'WWW-Authenticate': challenge } });\n        }\n        case OAuthErrorCode.ServerError: {\n            return Response.json(error.toResponseObject(), { status: 500 });\n        }\n        default: {\n            return Response.json(error.toResponseObject(), { status: 400 });\n        }\n    }\n}\n\n/**\n * Require a valid Bearer token on web-standard requests.\n *\n * The framework-free counterpart of `requireBearerAuth` from\n * `@modelcontextprotocol/express`, for hosts whose HTTP surface is a\n * `fetch(request)` handler — Cloudflare Workers, Deno, Bun, Hono. The\n * returned gate resolves to the verified {@link AuthInfo}, or to the\n * ready-to-return challenge `Response` when the request must be refused.\n *\n * @example\n * ```ts source=\"./bearerAuth.examples.ts#requireBearerAuth_fetchGate\"\n * const gate = requireBearerAuth({ verifier, requiredScopes: ['mcp'] });\n *\n * async function fetchHandler(request: Request): Promise<Response> {\n *     const auth: AuthInfo | Response = await gate(request);\n *     if (auth instanceof Response) return auth;\n *     return handler.fetch(request, { authInfo: auth });\n * }\n * ```\n */\nexport function requireBearerAuth(options: VerifyBearerTokenOptions): (request: Request) => Promise<AuthInfo | Response> {\n    // Destructure at creation so a plain-JS caller passing undefined or\n    // malformed options crashes at startup, not on the first request.\n    const { verifier, requiredScopes = [], resourceMetadataUrl, expectedResource } = options;\n    const resolved = { verifier, requiredScopes, resourceMetadataUrl, expectedResource };\n    return async request => {\n        // Outside the try: a wrong-framework misuse (no web-standard Request)\n        // should throw loudly, not surface as a 500 challenge. Fetch's\n        // Headers.get comma-joins repeated headers where Node keeps the\n        // first; take the first segment so both adapters agree (the token68\n        // alphabet has no comma, so this is lossless).\n        const [authorizationHeader] = (request.headers.get('authorization') ?? '').split(',');\n        try {\n            return await verifyBearerToken(authorizationHeader || undefined, resolved);\n        } catch (error) {\n            return bearerAuthChallengeResponse(error, resolved);\n        }\n    };\n}\n", "import type { OAuthMetadata, OAuthProtectedResourceMetadata } from '@modelcontextprotocol/core-internal';\nimport { OAuthError, OAuthErrorCode } from '@modelcontextprotocol/core-internal';\n\n/**\n * Options for {@link oauthMetadataResponse} and\n * {@link buildOAuthProtectedResourceMetadata}.\n */\nexport interface AuthMetadataOptions {\n    /**\n     * Authorization Server metadata (RFC 8414) for the AS this MCP server\n     * relies on. Served at `/.well-known/oauth-authorization-server` so\n     * legacy clients that probe the resource origin still discover the AS.\n     */\n    oauthMetadata: OAuthMetadata;\n\n    /**\n     * The public URL of this MCP server, used as the `resource` value in the\n     * Protected Resource Metadata document. Any path component is reflected\n     * in the well-known route per RFC 9728.\n     */\n    resourceServerUrl: URL;\n\n    /**\n     * Optional documentation URL advertised as `resource_documentation`.\n     */\n    serviceDocumentationUrl?: URL;\n\n    /**\n     * Optional list of scopes this MCP server understands, advertised as\n     * `scopes_supported`.\n     */\n    scopesSupported?: string[];\n\n    /**\n     * Optional human-readable name advertised as `resource_name`.\n     */\n    resourceName?: string;\n\n    /**\n     * Allow a non-HTTPS issuer URL. Local testing only — never enable in\n     * production. The Express adapter maps its\n     * `MCP_DANGEROUSLY_ALLOW_INSECURE_ISSUER_URL` environment variable here.\n     */\n    dangerouslyAllowInsecureIssuerUrl?: boolean;\n}\n\nfunction checkIssuerUrl(issuer: URL, allowInsecure: boolean | undefined): void {\n    // RFC 8414 technically does not permit a localhost HTTPS exemption, but it is necessary for local testing.\n    if (issuer.protocol !== 'https:' && issuer.hostname !== 'localhost' && issuer.hostname !== '127.0.0.1' && !allowInsecure) {\n        throw new Error('Issuer URL must be HTTPS');\n    }\n    if (issuer.hash) {\n        throw new Error(`Issuer URL must not have a fragment: ${issuer}`);\n    }\n    if (issuer.search) {\n        throw new Error(`Issuer URL must not have a query string: ${issuer}`);\n    }\n}\n\n/**\n * Derive the RFC 9728 Protected Resource Metadata document from\n * {@link AuthMetadataOptions}, validating the Authorization Server issuer URL\n * (HTTPS required outside localhost) in the process.\n *\n * `oauthMetadataResponse` and the Express `mcpAuthMetadataRouter` both build\n * on this; use it directly when serving the document through your own\n * routing — or call it once at startup to fail fast on a misconfigured\n * issuer before any request arrives.\n */\nexport function buildOAuthProtectedResourceMetadata(options: AuthMetadataOptions): OAuthProtectedResourceMetadata {\n    checkIssuerUrl(new URL(options.oauthMetadata.issuer), options.dangerouslyAllowInsecureIssuerUrl);\n    return {\n        resource: options.resourceServerUrl.href,\n        authorization_servers: [options.oauthMetadata.issuer],\n        scopes_supported: options.scopesSupported,\n        resource_name: options.resourceName,\n        resource_documentation: options.serviceDocumentationUrl?.href\n    };\n}\n\n/**\n * Builds the RFC 9728 Protected Resource Metadata URL for a given MCP server\n * URL by inserting `/.well-known/oauth-protected-resource` ahead of the path.\n *\n * @example\n * ```ts\n * getOAuthProtectedResourceMetadataUrl(new URL('https://api.example.com/mcp'))\n * // → 'https://api.example.com/.well-known/oauth-protected-resource/mcp'\n * ```\n */\nexport function getOAuthProtectedResourceMetadataUrl(serverUrl: URL): string {\n    const metadataUrl = new URL(serverUrl);\n    metadataUrl.pathname = protectedResourceMetadataPath(serverUrl);\n    metadataUrl.hash = '';\n    return metadataUrl.href;\n}\n\n/** The RFC 9728 path-aware well-known path for a resource URL. */\nfunction protectedResourceMetadataPath(resourceServerUrl: URL): string {\n    // Normalized like the request path in `oauthMetadataResponse`: a resource\n    // URL with a trailing slash must not make its own PRM route unreachable.\n    const rsPath = stripTrailingSlash(resourceServerUrl.pathname);\n    return `/.well-known/oauth-protected-resource${rsPath === '/' ? '' : rsPath}`;\n}\n\nfunction stripTrailingSlash(path: string): string {\n    return path.length > 1 && path.endsWith('/') ? path.slice(0, -1) : path;\n}\n\nconst ALLOWED_METHODS = 'GET, HEAD, OPTIONS';\n\nfunction metadataDocumentResponse(request: Request, metadata: OAuthMetadata | OAuthProtectedResourceMetadata): Response {\n    // Metadata documents must be fetchable from web-based MCP clients on any\n    // origin, so every response carries permissive CORS headers.\n    if (request.method === 'OPTIONS') {\n        const requestedHeaders = request.headers.get('access-control-request-headers');\n        return new Response(null, {\n            status: 204,\n            headers: {\n                'Access-Control-Allow-Origin': '*',\n                'Access-Control-Allow-Methods': ALLOWED_METHODS,\n                // The reflected allow-list makes the response vary by request:\n                // without this a shared cache would replay one preflight's\n                // allow-list against another's headers.\n                ...(requestedHeaders === null\n                    ? {}\n                    : { 'Access-Control-Allow-Headers': requestedHeaders, Vary: 'Access-Control-Request-Headers' })\n            }\n        });\n    }\n    if (request.method !== 'GET' && request.method !== 'HEAD') {\n        const error = new OAuthError(OAuthErrorCode.MethodNotAllowed, `The method ${request.method} is not allowed for this endpoint`);\n        return Response.json(error.toResponseObject(), {\n            status: 405,\n            headers: { Allow: ALLOWED_METHODS, 'Access-Control-Allow-Origin': '*' }\n        });\n    }\n    const response = Response.json(metadata, { headers: { 'Access-Control-Allow-Origin': '*' } });\n    // RFC 9110: HEAD is GET without the body, same headers.\n    return request.method === 'HEAD' ? new Response(null, { status: response.status, headers: response.headers }) : response;\n}\n\n/**\n * Serve the two OAuth discovery documents an MCP server acting as a Resource\n * Server exposes, from a web-standard `fetch(request)` handler:\n *\n *  - `/.well-known/oauth-protected-resource[/<path>]` — RFC 9728 Protected\n *    Resource Metadata, derived from the supplied options (path-aware: the\n *    resource URL's path is reflected in the route).\n *  - `/.well-known/oauth-authorization-server` — RFC 8414 Authorization\n *    Server Metadata, passed through verbatim.\n *\n * Returns the matched document `Response` (JSON with permissive CORS, `405`\n * with an `Allow` header for non-GET methods, `204` for CORS preflight), or\n * `undefined` when the request path is neither well-known route — fall\n * through to your own routing. The framework-free counterpart of\n * `mcpAuthMetadataRouter` from `@modelcontextprotocol/express`; pair it with\n * `requireBearerAuth` and `getOAuthProtectedResourceMetadataUrl` so\n * unauthenticated clients can discover the AS from the `401` challenge.\n *\n * @example\n * ```ts source=\"./oauthMetadata.examples.ts#oauthMetadataResponse_fetchHandler\"\n * async function fetchHandler(request: Request): Promise<Response> {\n *     return oauthMetadataResponse(request, options) ?? serveMcp(request);\n * }\n * ```\n */\nexport function oauthMetadataResponse(request: Request, options: AuthMetadataOptions): Response | undefined {\n    // Match before building: unmatched traffic must fall through untouched,\n    // even when the options are misconfigured — a bad issuer surfaces on the\n    // discovery routes (or at startup via buildOAuthProtectedResourceMetadata),\n    // never on the host's own traffic.\n    // Tolerate a single trailing slash, as path-mounted routers do.\n    const requestPath = stripTrailingSlash(new URL(request.url).pathname);\n    if (requestPath === protectedResourceMetadataPath(options.resourceServerUrl)) {\n        return metadataDocumentResponse(request, buildOAuthProtectedResourceMetadata(options));\n    }\n    if (requestPath === '/.well-known/oauth-authorization-server') {\n        buildOAuthProtectedResourceMetadata(options); // issuer validation\n        return metadataDocumentResponse(request, options.oauthMetadata);\n    }\n    return undefined;\n}\n", "import type { AuthInfo, JSONRPCRequest } from '@modelcontextprotocol/core-internal';\nimport { OAuthError, OAuthErrorCode } from '@modelcontextprotocol/core-internal';\n\nimport { bearerAuthChallengeResponse } from './middleware/bearerAuth';\nimport { getOAuthProtectedResourceMetadataUrl } from './middleware/oauthMetadata';\n\n/** OAuth scopes to request before handling an MCP request. */\nexport interface ScopeChallenge {\n    /** The exact, complete scope set to include in the challenge. Each scope must satisfy the OAuth `scope-token` grammar. */\n    scopes: readonly [string, ...string[]];\n    /** Optional human-readable detail satisfying the RFC 6750 `error-description` grammar. */\n    errorDescription?: string;\n}\n\n/** Determines whether an MCP request needs an OAuth scope challenge. */\nexport type ScopeChallengeHandler = (context: {\n    request: JSONRPCRequest;\n    authInfo?: AuthInfo;\n}) => ScopeChallenge | undefined | Promise<ScopeChallenge | undefined>;\n\n/** @internal */\nexport function supportsScopeChallengeResolver(\n    transport: unknown\n): transport is { setScopeChallengeResolver(resolver: ScopeChallengeHandler): void } {\n    return (\n        typeof transport === 'object' &&\n        transport !== null &&\n        'setScopeChallengeResolver' in transport &&\n        typeof (transport as { setScopeChallengeResolver: unknown }).setScopeChallengeResolver === 'function'\n    );\n}\n\nfunction assertScope(scope: unknown, location: string): asserts scope is string {\n    if (typeof scope !== 'string' || !/^[\\u0021\\u0023-\\u005B\\u005D-\\u007E]+$/.test(scope)) {\n        throw new TypeError(`${location} must satisfy the OAuth scope-token grammar`);\n    }\n}\n\nfunction validateScopeChallenge(challenge: ScopeChallenge): ScopeChallenge {\n    if (challenge === null || typeof challenge !== 'object' || !Array.isArray(challenge.scopes) || challenge.scopes.length === 0) {\n        throw new TypeError('scope challenge must contain at least one scope');\n    }\n    for (const [index, scope] of challenge.scopes.entries()) {\n        assertScope(scope, `scope challenge scopes[${index}]`);\n    }\n    if (challenge.errorDescription !== undefined && typeof challenge.errorDescription !== 'string') {\n        throw new TypeError('scope challenge errorDescription must be a string');\n    }\n    if (challenge.errorDescription !== undefined && !/^[\\u0020-\\u0021\\u0023-\\u005B\\u005D-\\u007E]+$/.test(challenge.errorDescription)) {\n        throw new TypeError('scope challenge errorDescription must satisfy the RFC 6750 error-description grammar');\n    }\n    return challenge;\n}\n\n/**\n * Creates a handler that requires every supplied scope exactly.\n *\n * Requests without authentication are left to the server's authentication gate.\n */\nexport function requireScopes(...scopes: readonly [string, ...string[]]): ScopeChallengeHandler {\n    if (scopes.length === 0) {\n        throw new TypeError('requireScopes must contain at least one scope');\n    }\n    for (const [index, scope] of scopes.entries()) {\n        assertScope(scope, `requireScopes scope[${index}]`);\n    }\n    const requiredScopes = [...scopes] as [string, ...string[]];\n    return ({ authInfo }) => {\n        if (authInfo === undefined) return;\n        const activeScopes = new Set(authInfo.scopes);\n        if (requiredScopes.every(scope => activeScopes.has(scope))) return;\n        return { scopes: requiredScopes };\n    };\n}\n\n/** @internal */\nexport async function findScopeChallenge(\n    requests: readonly JSONRPCRequest[],\n    authInfo: AuthInfo | undefined,\n    resolve: ScopeChallengeHandler\n): Promise<ScopeChallenge | undefined> {\n    for (const request of requests) {\n        const challenge = await resolve({ request, ...(authInfo !== undefined && { authInfo }) });\n        if (challenge !== undefined) {\n            return validateScopeChallenge(challenge);\n        }\n    }\n    return undefined;\n}\n\n/**\n * The RFC 9728 Protected Resource Metadata URL to advertise on a scope\n * challenge, derived from the verified {@link AuthInfo}: the URL the\n * authentication gate stamped (`authInfo.resourceMetadataUrl`, set by the\n * bearer-auth helpers from their `resourceMetadataUrl` option), falling back\n * to the well-known location for an HTTP(S) RFC 8707 `resource` identifier, or\n * `undefined` when neither is available (the `resource_metadata` parameter is\n * then omitted, matching the bearer-auth challenges).\n *\n * @internal\n */\nexport function scopeChallengeResourceMetadataUrl(authInfo: AuthInfo | undefined): string | undefined {\n    if (authInfo?.resourceMetadataUrl !== undefined) {\n        return authInfo.resourceMetadataUrl;\n    }\n    if (authInfo?.resource?.protocol === 'https:' || authInfo?.resource?.protocol === 'http:') {\n        return getOAuthProtectedResourceMetadataUrl(authInfo.resource);\n    }\n    return undefined;\n}\n\n/** @internal */\nexport function createScopeChallengeResponse(challenge: ScopeChallenge, resourceMetadataUrl: string | undefined): Response {\n    return bearerAuthChallengeResponse(\n        new OAuthError(OAuthErrorCode.InsufficientScope, challenge.errorDescription ?? 'Insufficient scope'),\n        {\n            requiredScopes: [...challenge.scopes],\n            resourceMetadataUrl\n        }\n    );\n}\n", "/**\n * The legacy `input_required` shim: serves write-once handlers on 2025-era\n * sessions. `Server` holds one instance and delegates to it from the\n * multi-round-trip seam when a handler returns an input-required result on a\n * 2025-era request: each embedded request goes out as a real server→client\n * request (`elicitation/create` / `sampling/createMessage` / `roots/list`,\n * stamped with the originating request id for stream association), and the\n * handler is re-entered with the collected `inputResponses` until it returns\n * a final result or the round cap is exhausted.\n *\n * Semantics mirror the modern client driver so a handler cannot tell which\n * era fulfilled it: per-round REPLACED `inputResponses`, byte-exact\n * `requestState` echo (re-verified by the configured hook each round), paced\n * requestState-only rounds. The loop lives inside the originating request's\n * lifetime — nothing is parked, cancellation chains through every leg.\n * Failures surface per family: tools/call → `isError` tool results,\n * prompts/resources → JSON-RPC errors; malformed results fail loudly as\n * server bugs. Package-internal — not exported from the index.\n */\nimport type {\n    ClientCapabilities,\n    CreateMessageRequest,\n    ElicitRequestFormParams,\n    ElicitRequestURLParams,\n    JSONRPCRequest,\n    RequestOptions,\n    Result,\n    ServerContext\n} from '@modelcontextprotocol/core-internal';\nimport {\n    inputRequiredRoundsExceededMessage,\n    isInputRequiredResult,\n    linkedRoundAbort,\n    missingClientCapabilities,\n    ProtocolError,\n    ProtocolErrorCode,\n    REQUEST_STATE_ONLY_LEG_PACING_MS,\n    requestStateAccessor,\n    requiredClientCapabilitiesForInputRequest,\n    sleep,\n    withRequestStateValue\n} from '@modelcontextprotocol/core-internal';\n\n/**\n * Default handler re-entries per originating request — tighter than the\n * client driver's 10 because the shim holds a live wire request open.\n */\nconst DEFAULT_LEGACY_SHIM_MAX_ROUNDS = 8;\n\n/** Default per-leg timeout: legs are human-paced, so the 60s protocol default is wrong. */\nconst DEFAULT_LEGACY_SHIM_ROUND_TIMEOUT_MS = 600_000;\n\n/** The `ServerOptions.inputRequired` bag with defaults applied. */\nexport interface ResolvedLegacyShimOptions {\n    maxRounds: number;\n    roundTimeoutMs: number;\n    legacyShim: boolean;\n}\n\n/** Resolves and validates `ServerOptions.inputRequired`, failing loudly at construction time. */\nexport function resolveLegacyShimOptions(\n    options: { maxRounds?: number; roundTimeoutMs?: number; legacyShim?: boolean } | undefined\n): ResolvedLegacyShimOptions {\n    if (options?.maxRounds !== undefined && (!Number.isInteger(options.maxRounds) || options.maxRounds < 1)) {\n        throw new RangeError(`inputRequired.maxRounds must be a positive integer (got ${options.maxRounds})`);\n    }\n    if (options?.roundTimeoutMs !== undefined && (!Number.isFinite(options.roundTimeoutMs) || options.roundTimeoutMs <= 0)) {\n        throw new RangeError(`inputRequired.roundTimeoutMs must be a positive number (got ${options.roundTimeoutMs})`);\n    }\n    return {\n        maxRounds: options?.maxRounds ?? DEFAULT_LEGACY_SHIM_MAX_ROUNDS,\n        roundTimeoutMs: options?.roundTimeoutMs ?? DEFAULT_LEGACY_SHIM_ROUND_TIMEOUT_MS,\n        legacyShim: options?.legacyShim ?? true\n    };\n}\n\n/** The embedded input-request kinds the 2026-07-28 revision defines. */\nexport type EmbeddedInputRequestMethod = 'elicitation/create' | 'sampling/createMessage' | 'roots/list';\n\n/** A coerced `inputRequests` entry: the kind-narrowed embedded request. */\nexport interface CoercedEmbeddedInputRequest {\n    method: EmbeddedInputRequestMethod;\n    params?: Record<string, unknown>;\n}\n\n/**\n * Validates one `inputRequests` entry: malformed or unknown kinds are server\n * bugs and fail loudly on both eras. Shared by the modern seam's capability\n * check and the shim's gate.\n */\nexport function coerceEmbeddedInputRequest(\n    method: string,\n    key: string,\n    entry: unknown\n): { embedded: CoercedEmbeddedInputRequest; required: ClientCapabilities } {\n    if (entry === null || typeof entry !== 'object' || typeof (entry as { method?: unknown }).method !== 'string') {\n        throw new ProtocolError(\n            ProtocolErrorCode.InternalError,\n            `Handler for ${method} returned an invalid input request '${key}': each inputRequests entry must be an ` +\n                `embedded elicitation/create, sampling/createMessage, or roots/list request`\n        );\n    }\n    const embedded = entry as { method: string; params?: Record<string, unknown> };\n    const required = requiredClientCapabilitiesForInputRequest(embedded);\n    if (required === undefined) {\n        throw new ProtocolError(\n            ProtocolErrorCode.InternalError,\n            `Handler for ${method} returned an input request '${key}' of kind '${embedded.method}', which is not an ` +\n                `embedded request the 2026-07-28 revision defines`\n        );\n    }\n    return { embedded: embedded as CoercedEmbeddedInputRequest, required };\n}\n\n/**\n * The 2025-11-25 URL-mode wire shape requires an `elicitationId`; the 2026\n * in-band shape has none, so URL legs mint one (CSPRNG-backed, with a\n * getRandomValues fallback for runtimes without `randomUUID`).\n */\nfunction syntheticElicitationId(): string {\n    const webCrypto = globalThis.crypto;\n    if (webCrypto?.randomUUID !== undefined) {\n        return webCrypto.randomUUID();\n    }\n    const bytes = new Uint8Array(16);\n    webCrypto.getRandomValues(bytes);\n    bytes[6] = (bytes[6]! & 0x0f) | 0x40;\n    bytes[8] = (bytes[8]! & 0x3f) | 0x80;\n    const hex = [...bytes].map(byte => byte.toString(16).padStart(2, '0')).join('');\n    return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\n/** Per-family surfacing: tools/call → isError result (the 2025 idiom); prompts/resources → JSON-RPC error. */\nfunction legacyShimFailure(method: string, message: string): Result {\n    if (method === 'tools/call') {\n        return { content: [{ type: 'text', text: message }], isError: true };\n    }\n    throw new ProtocolError(ProtocolErrorCode.InternalError, message);\n}\n\n/**\n * Everything the shim needs from `Server`: the knobs, the per-request\n * resolved capability view (initialize state on sessionful legacy; empty on\n * per-request stateless instances), the requestState verify runner\n * (deny-on-error → the frozen `-32602`), and the 2025-era senders. The\n * shim's own gate is authoritative; elicitation accepted content passes\n * through UNVALIDATED for parity with the modern client driver.\n */\nexport interface LegacyInputRequiredShimHost {\n    readonly maxRounds: number;\n    readonly roundTimeoutMs: number;\n    resolvedClientCapabilities(ctx: ServerContext): ClientCapabilities | undefined;\n    verifyRequestState(state: string, ctx: ServerContext, method: string): Promise<unknown>;\n    sendElicitation(params: ElicitRequestFormParams | ElicitRequestURLParams, options: RequestOptions): Promise<unknown>;\n    sendSampling(params: CreateMessageRequest['params'], options: RequestOptions): Promise<unknown>;\n    listRoots(params: Record<string, unknown> | undefined, options: RequestOptions): Promise<unknown>;\n}\n\n/** The fulfilment loop — see the module doc for the contract. */\nexport class LegacyInputRequiredShim {\n    constructor(private readonly _host: LegacyInputRequiredShimHost) {}\n\n    async fulfill(\n        method: string,\n        handler: (request: JSONRPCRequest, ctx: ServerContext) => Promise<Result>,\n        request: JSONRPCRequest,\n        ctx: ServerContext,\n        firstResult: Result\n    ): Promise<Result> {\n        const { maxRounds, roundTimeoutMs } = this._host;\n        const outerSignal = ctx.mcpReq.signal;\n        let current = firstResult;\n        let round = 0;\n\n        // eslint-disable-next-line no-constant-condition\n        while (true) {\n            round += 1;\n            if (round > maxRounds) {\n                return legacyShimFailure(method, inputRequiredRoundsExceededMessage(method, maxRounds));\n            }\n\n            // At-least-one re-check per round (server bug → loud, as on modern).\n            const inputRequests = current.inputRequests as Record<string, unknown> | null | undefined;\n            const hasInputRequests = inputRequests != null && Object.keys(inputRequests).length > 0;\n            const requestState = typeof current.requestState === 'string' ? current.requestState : undefined;\n            if (!hasInputRequests && requestState === undefined) {\n                throw new ProtocolError(\n                    ProtocolErrorCode.InternalError,\n                    `Handler for ${method} returned an input-required result with neither inputRequests nor requestState ` +\n                        `(every InputRequiredResult must include at least one of the two)`\n                );\n            }\n\n            let responses: Record<string, unknown> | undefined;\n            if (hasInputRequests) {\n                // The shim's own capability pre-check (never gated on\n                // enforceStrictCapabilities). The whole round gates before\n                // any wire traffic, so a refusal has no side effects.\n                const declared = this._host.resolvedClientCapabilities(ctx);\n                const coerced: [string, CoercedEmbeddedInputRequest][] = [];\n                for (const [key, entry] of Object.entries(inputRequests!)) {\n                    const { embedded, required } = coerceEmbeddedInputRequest(method, key, entry);\n                    // Request-carrying kinds need params; absent = server bug.\n                    if (embedded.method !== 'roots/list' && embedded.params === undefined) {\n                        throw new ProtocolError(\n                            ProtocolErrorCode.InternalError,\n                            `Handler for ${method} returned an input request '${key}' of kind '${embedded.method}' without params`\n                        );\n                    }\n                    const missing = missingClientCapabilities(required, declared);\n                    if (missing !== undefined) {\n                        return legacyShimFailure(\n                            method,\n                            `Cannot request input '${key}' (${embedded.method}): the client on this 2025-era connection did not ` +\n                                `declare the required capability${declared === undefined ? ' (no client capabilities are available on this connection — per-request legacy serving cannot receive server-to-client requests)' : ''}`\n                        );\n                    }\n                    coerced.push([key, embedded]);\n                }\n\n                // Fulfil concurrently (driver parity); first failure aborts siblings.\n                const roundAbort = linkedRoundAbort(outerSignal);\n                try {\n                    const legOptions: RequestOptions = {\n                        relatedRequestId: ctx.mcpReq.id,\n                        timeout: roundTimeoutMs,\n                        resetTimeoutOnProgress: true,\n                        // The no-op handler stamps a progressToken on the leg —\n                        // without one, resetTimeoutOnProgress could never fire.\n                        onprogress: () => {},\n                        signal: roundAbort.signal\n                    };\n                    const fulfilled = await Promise.all(\n                        coerced.map(async ([key, embedded]) => {\n                            try {\n                                return [key, await this._dispatchLeg(embedded, legOptions)] as const;\n                            } catch (error) {\n                                roundAbort.abort(error);\n                                throw error;\n                            }\n                        })\n                    );\n                    responses = Object.fromEntries(fulfilled);\n                } catch (error) {\n                    if (outerSignal.aborted) {\n                        // Cancelled requests are never answered — propagate.\n                        throw error;\n                    }\n                    return legacyShimFailure(\n                        method,\n                        `Fulfilling input required by '${method}' failed: ${error instanceof Error ? error.message : String(error)}`\n                    );\n                } finally {\n                    roundAbort.dispose();\n                }\n            } else {\n                // requestState-only round: paced so the loop never hot-spins\n                // (driver parity); counted in the same round cap.\n                await sleep(REQUEST_STATE_ONLY_LEG_PACING_MS, outerSignal);\n            }\n\n            // Byte-exact requestState echo: build the round's context first,\n            // verify against it (the order and view a modern wire retry\n            // gets), then swap in the decoded payload. Deny-on-error → -32602.\n            let ctxNext: ServerContext = {\n                ...ctx,\n                mcpReq: {\n                    ...ctx.mcpReq,\n                    // REPLACE semantics: this round's responses only — multi-step\n                    // flows thread earlier answers through requestState.\n                    inputResponses: responses,\n                    droppedInputResponseKeys: undefined,\n                    requestState: requestStateAccessor(requestState)\n                }\n            };\n            if (requestState !== undefined) {\n                const decoded = await this._host.verifyRequestState(requestState, ctxNext, method);\n                if (decoded !== undefined) {\n                    ctxNext = withRequestStateValue(ctxNext, decoded);\n                }\n            }\n\n            // Re-entry hits the same stored handler a wire retry would\n            // (for McpServer: the full funnel).\n            const next = await handler(request, ctxNext);\n            if (!isInputRequiredResult(next)) {\n                return next;\n            }\n            current = next;\n        }\n    }\n\n    /** Routes one embedded request through the host's existing 2025-era senders (gate already ran). */\n    private async _dispatchLeg(embedded: CoercedEmbeddedInputRequest, options: RequestOptions): Promise<unknown> {\n        switch (embedded.method) {\n            case 'elicitation/create': {\n                let params = embedded.params as ElicitRequestFormParams | ElicitRequestURLParams;\n                if (params.mode === 'url' && (params as ElicitRequestURLParams).elicitationId === undefined) {\n                    params = { ...(params as ElicitRequestURLParams), elicitationId: syntheticElicitationId() };\n                }\n                return await this._host.sendElicitation(params, options);\n            }\n            case 'sampling/createMessage': {\n                return await this._host.sendSampling(embedded.params as CreateMessageRequest['params'], options);\n            }\n            case 'roots/list': {\n                return await this._host.listRoots(embedded.params, options);\n            }\n        }\n    }\n}\n", "import type {\n    BaseContext,\n    CacheableResultMethod,\n    CacheHint,\n    CallToolResult,\n    ClientCapabilities,\n    CreateMessageRequest,\n    CreateMessageRequestParamsBase,\n    CreateMessageRequestParamsWithTools,\n    CreateMessageResult,\n    CreateMessageResultWithTools,\n    DiscoverResult,\n    ElicitRequestFormParams,\n    ElicitRequestURLParams,\n    ElicitResult,\n    EmptyResult,\n    Implementation,\n    InitializeRequest,\n    InitializeResult,\n    JSONRPCRequest,\n    JsonSchemaType,\n    jsonSchemaValidator,\n    ListRootsRequest,\n    ListRootsResult,\n    LoggingLevel,\n    LoggingMessageNotification,\n    MessageExtraInfo,\n    NotificationMethod,\n    NotificationOptions,\n    ProtocolOptions,\n    RequestMethod,\n    RequestOptions,\n    ResourceUpdatedNotification,\n    Result,\n    ServerCapabilities,\n    ServerContext,\n    ToolResultContent,\n    ToolUseContent,\n    Transport\n} from '@modelcontextprotocol/core-internal';\nimport {\n    assertValidCacheHint,\n    attachCacheHintFallback,\n    CLIENT_CAPABILITIES_META_KEY,\n    codecForVersion,\n    isInputRequiredResult,\n    isModernProtocolVersion,\n    LATEST_PROTOCOL_VERSION,\n    legacyProtocolVersions,\n    LOG_LEVEL_META_KEY,\n    LoggingLevelSchema,\n    mergeCapabilities,\n    missingClientCapabilities,\n    MissingRequiredClientCapabilityError,\n    modernProtocolVersions,\n    normalizeContentlessToolResult,\n    parseSchema,\n    Protocol,\n    ProtocolError,\n    ProtocolErrorCode,\n    SdkError,\n    SdkErrorCode,\n    withRequestStateValue\n} from '@modelcontextprotocol/core-internal';\nimport { DefaultJsonSchemaValidator } from '@modelcontextprotocol/server/_shims';\n\nimport { coerceEmbeddedInputRequest, LegacyInputRequiredShim, resolveLegacyShimOptions } from './legacyInputRequiredShim';\n\n/**\n * The request methods whose 2026-07-28 result vocabulary includes\n * `input_required` (the multi round-trip methods). Returning an\n * input-required result from any other handler is a server bug.\n */\nconst INPUT_REQUIRED_CAPABLE_METHODS: ReadonlySet<string> = new Set(['tools/call', 'prompts/get', 'resources/read']);\n\nexport type ServerOptions = ProtocolOptions & {\n    /**\n     * Capabilities to advertise as being supported by this server.\n     *\n     * Note: per the MCP spec, a server that declares a capability MUST respond to that\n     * capability's requests (e.g. `tools/list` for `tools`) — potentially with an empty\n     * result — rather than with a \"Method not found\" error. {@linkcode server/mcp.McpServer | McpServer}\n     * handles this automatically for capabilities declared here; when using the low-level\n     * {@linkcode Server} directly, you are responsible for registering a request handler for\n     * every capability you declare.\n     */\n    capabilities?: ServerCapabilities;\n\n    /**\n     * Optional instructions describing how to use the server and its features.\n     */\n    instructions?: string;\n\n    /**\n     * JSON Schema validator for elicitation response validation.\n     *\n     * The validator is used to validate user input returned from elicitation\n     * requests against the requested schema.\n     *\n     * @default Runtime-selected validator (AJV-backed on Node.js, `@cfworker/json-schema`-backed on browser/workerd runtimes)\n     */\n    jsonSchemaValidator?: jsonSchemaValidator;\n\n    /**\n     * Cache hints for the cacheable results of the 2026-07-28 protocol\n     * revision (`ttlMs` / `cacheScope`), keyed by operation. The cacheable\n     * operations are `tools/list`, `prompts/list`, `resources/list`,\n     * `resources/templates/list`, `resources/read` and `server/discover`. The\n     * hint is used when the result for that operation does not provide its own\n     * cache fields — most useful for the list results and `server/discover`,\n     * which the SDK builds itself. A hint registered with an individual\n     * resource (`registerResource(..., { cacheHint })`) takes precedence for\n     * that resource's `resources/read` results, field by field: a field the\n     * per-resource hint leaves unset still falls back to the per-operation\n     * hint configured here.\n     *\n     * Absent hints (or omitting this option entirely) keep today's behavior:\n     * cacheable 2026-07-28 results are emitted with `ttlMs: 0` and\n     * `cacheScope: 'private'`. Responses to 2025-era requests are never\n     * affected. Invalid values throw a `RangeError` at construction time.\n     */\n    cacheHints?: Partial<Record<CacheableResultMethod, CacheHint>>;\n\n    /**\n     * Multi-round-trip serving knobs. On 2026-era requests the client\n     * fulfils `input_required` returns; on 2025-era connections the SDK's\n     * legacy shim fulfils them server-side (real server→client requests +\n     * handler re-entry), so handlers are written once and serve both eras.\n     */\n    inputRequired?: {\n        /**\n         * Handler re-entries per originating request before the shim fails\n         * (tools/call: `isError` result; prompts/resources: JSON-RPC error).\n         * @default 8\n         */\n        maxRounds?: number;\n\n        /**\n         * Per-leg timeout (ms) for the shim's embedded server→client\n         * requests, sent with `resetTimeoutOnProgress: true`. Human-paced —\n         * deliberately far above the 60s protocol default.\n         * @default 600_000\n         */\n        roundTimeoutMs?: number;\n\n        /**\n         * `false` disables the shim: an `input_required` return on a\n         * 2025-era request fails loudly (the pre-shim behavior).\n         * @default true\n         */\n        legacyShim?: boolean;\n    };\n\n    /**\n     * Multi-round-trip `requestState` integrity hook (protocol revision\n     * 2026-07-28).\n     */\n    requestState?: {\n        /**\n         * Called on every multi-round-trip request round whose echoed\n         * `requestState` is a string (i.e. whenever\n         * `ctx.mcpReq.requestState()` would return one), BEFORE the handler\n         * runs — including the legacy shim's in-process rounds. Throw or\n         * reject to refuse the request: the seam answers with a wire-level\n         * `-32602` Invalid Params error whose message is frozen to\n         * `\"Invalid or expired requestState\"` and whose `data.reason` is\n         * `'invalid_request_state'` — the thrown reason is surfaced via the\n         * server's `onerror` callback only and never reaches the wire.\n         *\n         * This is the place to put HMAC or AEAD verification of\n         * `requestState`. The spec MUST for integrity-protecting state that\n         * influences authorization, resource access, or business logic is on\n         * the server author (basic/patterns/mrtr, server requirements 4–5);\n         * the SDK provides NO default verification —\n         * {@linkcode server/requestStateCodec.createRequestStateCodec | createRequestStateCodec}\n         * is the SDK-provided HMAC helper whose `verify` drops in here\n         * directly. Leaving this option unconfigured keeps the passthrough\n         * behavior — `ctx.mcpReq.requestState()` returns the raw wire string,\n         * which MUST be treated as attacker-controlled input.\n         *\n         * The resolved value is LOAD-BEARING: when the hook resolves with a\n         * non-`undefined` value — as\n         * {@linkcode server/requestStateCodec.RequestStateCodec | RequestStateCodec}`.verify`\n         * does (the decoded payload) — the seam hands THAT value to the\n         * handler via the typed `ctx.mcpReq.requestState<T>()` accessor, so a\n         * codec-using handler reads its verified state with no second decode\n         * call. A verifier that is not also the decoder should resolve\n         * `undefined` (return nothing) to keep the accessor on the raw wire\n         * string — resolving an incidental value (e.g. a boolean\n         * verification flag) would replace what the handler reads.\n         */\n        verify?: (state: string, ctx: ServerContext) => unknown | Promise<unknown>;\n    };\n};\n\n/*\n * Package-internal hooks for the 2026-07-28 serving entries (the per-request\n * HTTP entry `createMcpHandler` and the connection-pinned stdio entry\n * `serveStdio`).\n *\n * The connection-scoped client-identity fields and the modern-only handler set are\n * private to `Server`; the serving entries in this package need to write/install\n * them on the fresh instance they get from a consumer factory. The static initializer\n * below hands these module-scoped closures privileged access; the exported wrappers\n * are imported by sibling modules in this package only and are deliberately NOT\n * re-exported from the package index (they are not public API).\n */\nlet writeClientIdentity: (server: Server, identity: PerRequestClientIdentity) => void;\nlet installDiscoverHandler: (server: Server, servedModernVersions: readonly string[]) => void;\nlet readServerIdentity: (server: Server) => Implementation;\n\n/** Connection-scoped client-identity fields backfilled per request from a validated `_meta` envelope. */\nexport interface PerRequestClientIdentity {\n    /** The client's name/version information, when the envelope carried it. */\n    clientInfo?: Implementation;\n    /** The client's declared capabilities, when the envelope carried them. */\n    clientCapabilities?: ClientCapabilities;\n}\n\n/**\n * Package-internal: backfills the connection-scoped client-identity fields of a\n * per-request server instance from the request's validated `_meta` envelope, so the\n * (deprecated) {@linkcode Server.getClientCapabilities} / {@linkcode Server.getClientVersion}\n * accessors keep answering on instances that never see an `initialize` handshake.\n * Not public API.\n */\nexport function seedClientIdentityFromEnvelope(server: Server, identity: PerRequestClientIdentity): void {\n    writeClientIdentity(server, identity);\n}\n\n/**\n * Package-internal: installs the modern-only `server/discover` handler on an instance\n * the HTTP entry has marked as serving the 2026-07-28 era, and makes sure the modern\n * revisions the entry serves appear in the instance's supported-versions list (so the\n * discover advertisement and version-mismatch errors name them). Idempotent.\n * Hand-constructed instances are unaffected: nothing else calls this, so they keep\n * answering `-32601` unless their own supported-versions list opts into a modern\n * revision. Not public API.\n */\nexport function installModernOnlyHandlers(server: Server, servedModernVersions: readonly string[]): void {\n    installDiscoverHandler(server, servedModernVersions);\n}\n\n/**\n * Package-internal: the instance's implementation identity, for the serving\n * entries to stamp onto entry-built results (the `subscriptions/listen`\n * graceful-close result — built outside the encode seam, but the spec's\n * `SubscriptionsListenResultMetaObject` extends `ResultMetaObject`, so it carries\n * the serverInfo SHOULD like every other result). Not public API.\n */\nexport function serverIdentityOf(server: Server): Implementation {\n    return readServerIdentity(server);\n}\n\n/**\n * An MCP server on top of a pluggable transport.\n *\n * This server will automatically respond to the initialization flow as initiated from the client.\n *\n * @deprecated Use {@linkcode server/mcp.McpServer | McpServer} instead for the high-level API. Only use `Server` for advanced use cases.\n */\nexport class Server extends Protocol<ServerContext> {\n    private _clientCapabilities?: ClientCapabilities;\n    private _clientVersion?: Implementation;\n\n    static {\n        writeClientIdentity = (server, identity) => {\n            if (identity.clientCapabilities !== undefined) {\n                server._clientCapabilities = identity.clientCapabilities;\n            }\n            if (identity.clientInfo !== undefined) {\n                server._clientVersion = identity.clientInfo;\n            }\n        };\n        installDiscoverHandler = (server, servedModernVersions) => {\n            const missing = servedModernVersions.filter(version => !server._supportedProtocolVersions.includes(version));\n            if (missing.length > 0) {\n                // Never mutate the existing array in place: the default supported-versions\n                // list is a shared module constant.\n                server._supportedProtocolVersions = [...server._supportedProtocolVersions, ...missing];\n            }\n            server.setRequestHandler('server/discover', () => server._ondiscover());\n        };\n        readServerIdentity = server => server._serverInfo;\n    }\n    private _capabilities: ServerCapabilities;\n    private _instructions?: string;\n    private _jsonSchemaValidator: jsonSchemaValidator;\n    private _cacheHints?: ServerOptions['cacheHints'];\n    private _requestStateVerify?: (state: string, ctx: ServerContext) => unknown | Promise<unknown>;\n    private _inputRequiredServing: { maxRounds: number; roundTimeoutMs: number; legacyShim: boolean };\n    private _legacyShim?: LegacyInputRequiredShim;\n\n    /** Lazily-built legacy shim; the loop lives in legacyInputRequiredShim.ts behind a narrow host contract. */\n    private _legacyInputRequiredShim(): LegacyInputRequiredShim {\n        return (this._legacyShim ??= new LegacyInputRequiredShim({\n            maxRounds: this._inputRequiredServing.maxRounds,\n            roundTimeoutMs: this._inputRequiredServing.roundTimeoutMs,\n            resolvedClientCapabilities: ctx => this._inputRequestCapabilityView(ctx),\n            verifyRequestState: (state, ctx, method) => this._verifyRequestState(state, ctx, method),\n            sendElicitation: (params, options) => this._sendElicitationLeg(params, options, { validateAcceptedContent: false }),\n            sendSampling: (params, options) => this.createMessage(params, options),\n            listRoots: (params, options) => this.listRoots(params, options)\n        }));\n    }\n\n    /**\n     * Callback for when initialization has fully completed (i.e., the client has sent an `notifications/initialized` notification).\n     */\n    oninitialized?: () => void;\n\n    /**\n     * Initializes this server with the given name and version information.\n     */\n    constructor(\n        private _serverInfo: Implementation,\n        options?: ServerOptions\n    ) {\n        super(options);\n        this._capabilities = options?.capabilities ? { ...options.capabilities } : {};\n        this._instructions = options?.instructions;\n        this._jsonSchemaValidator = options?.jsonSchemaValidator ?? new DefaultJsonSchemaValidator();\n        this._requestStateVerify = options?.requestState?.verify;\n\n        this._inputRequiredServing = resolveLegacyShimOptions(options?.inputRequired);\n\n        // Configured cache hints fail loudly at construction time (before any\n        // handler registration consults them).\n        if (options?.cacheHints !== undefined) {\n            for (const [operation, hint] of Object.entries(options.cacheHints)) {\n                if (hint !== undefined) {\n                    assertValidCacheHint(hint, `cacheHints['${operation}']`);\n                }\n            }\n            this._cacheHints = options.cacheHints;\n        }\n\n        this.setRequestHandler('initialize', request => this._oninitialize(request));\n        this.setNotificationHandler('notifications/initialized', () => this.oninitialized?.());\n\n        // server/discover is installed only when the supported-versions list\n        // carries a modern revision: a legacy-only server keeps answering -32601.\n        // A hand-constructed instance is never era-bound, so the handler stays\n        // unreachable behind the era gate until a serving entry (createMcpHandler,\n        // serveStdio) marks the instance as serving the 2026-07-28 era.\n        if (modernProtocolVersions(this._supportedProtocolVersions).length > 0) {\n            this.setRequestHandler('server/discover', () => this._ondiscover());\n        }\n\n        if (this._capabilities.logging) {\n            this._registerLoggingHandler();\n        }\n    }\n\n    /** Attaches to the given transport; rejects while this instance is connected to another one. */\n    override async connect(transport: Transport): Promise<void> {\n        if (this.transport !== undefined) {\n            throw new SdkError(\n                SdkErrorCode.AlreadyConnected,\n                'Use a separate Server instance per connection: this instance is already connected to a transport. To connect it to a new transport, call close() first.'\n            );\n        }\n        await super.connect(transport);\n    }\n\n    /**\n     * Registers the built-in `logging/setLevel` request handler.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).\n     * Remains functional during the deprecation window (at least twelve months).\n     * Migrate to stderr logging (STDIO servers) or OpenTelemetry.\n     */\n    private _registerLoggingHandler(): void {\n        this.setRequestHandler('logging/setLevel', async (request, ctx) => {\n            const transportSessionId: string | undefined =\n                ctx.sessionId || (ctx.http?.req?.headers.get('mcp-session-id') as string) || undefined;\n            const { level } = request.params;\n            const parseResult = parseSchema(LoggingLevelSchema, level);\n            if (parseResult.success) {\n                this._loggingLevels.set(transportSessionId, parseResult.data);\n            }\n            return {};\n        });\n    }\n\n    protected override buildContext(ctx: BaseContext, transportInfo?: MessageExtraInfo): ServerContext {\n        // Only create http when there's actual HTTP transport info or auth info\n        const hasHttpInfo = ctx.http || transportInfo?.request || transportInfo?.closeSSEStream || transportInfo?.closeStandaloneSSEStream;\n        return {\n            ...ctx,\n            mcpReq: {\n                ...ctx.mcpReq,\n                // Deprecated as of protocol version 2026-07-28 (SEP-2577): `log` and\n                // `requestSampling` remain functional during the deprecation window\n                // (at least twelve months). See ServerContext for migration guidance.\n                log: (level, data, logger) => {\n                    if (!this._capabilities.logging) {\n                        return Promise.resolve();\n                    }\n                    // Level filter: on a 2026-era request the client declares its\n                    // threshold per request via the `_meta.logLevel` envelope key\n                    // (the modern equivalent of `logging/setLevel`, which is not a\n                    // request method on that revision). The spec at 2026-07-28\n                    // says an absent key means the server MUST NOT send\n                    // `notifications/message` for the request — so an absent key\n                    // suppresses, it does not mean \"send everything\". On\n                    // 2025-era connections the session-scoped level set via\n                    // `logging/setLevel` applies exactly as before (an absent\n                    // session level there continues to mean no filter).\n                    let threshold: LoggingLevel | undefined;\n                    if (this._servedModernEra()) {\n                        threshold = ctx.mcpReq.envelope?.[LOG_LEVEL_META_KEY] as LoggingLevel | undefined;\n                        if (threshold === undefined) {\n                            return Promise.resolve();\n                        }\n                    } else {\n                        threshold = this._loggingLevels.get(ctx.sessionId) ?? this._loggingLevels.get(undefined);\n                    }\n                    if (threshold !== undefined && this.LOG_LEVEL_SEVERITY.get(level)! < this.LOG_LEVEL_SEVERITY.get(threshold)!) {\n                        return Promise.resolve();\n                    }\n                    // Emit request-related (like progress and `ctx.mcpReq.notify`)\n                    // so the notification rides the in-flight exchange. Without the\n                    // related-request stamp, per-request hosting (`createMcpHandler`,\n                    // either era) silently drops the message because it has no\n                    // session-wide stream to deliver it on.\n                    return ctx.mcpReq.notify({ method: 'notifications/message', params: { level, data, logger } });\n                },\n                elicitInput: (params, options) => this.elicitInput(params, options),\n                requestSampling: (params, options) => this.createMessage(params, options)\n            },\n            http: hasHttpInfo\n                ? {\n                      ...ctx.http,\n                      req: transportInfo?.request,\n                      closeSSE: transportInfo?.closeSSEStream,\n                      closeStandaloneSSE: transportInfo?.closeStandaloneSSEStream\n                  }\n                : undefined\n        };\n    }\n\n    // Map log levels by session id\n    private _loggingLevels = new Map<string | undefined, LoggingLevel>();\n\n    // Map LogLevelSchema to severity index\n    private readonly LOG_LEVEL_SEVERITY = new Map(LoggingLevelSchema.options.map((level, index) => [level, index]));\n\n    // Is a message with the given level ignored in the log level set for the given session id?\n    private isMessageIgnored = (level: LoggingLevel, sessionId?: string): boolean => {\n        const currentLevel = this._loggingLevels.get(sessionId);\n        return currentLevel ? this.LOG_LEVEL_SEVERITY.get(level)! < this.LOG_LEVEL_SEVERITY.get(currentLevel)! : false;\n    };\n\n    /**\n     * Registers new capabilities. This can only be called before connecting to a transport.\n     *\n     * The new capabilities will be merged with any existing capabilities previously given (e.g., at initialization).\n     */\n    public registerCapabilities(capabilities: ServerCapabilities): void {\n        if (this.transport) {\n            throw new SdkError(SdkErrorCode.AlreadyConnected, 'Cannot register capabilities after connecting to transport');\n        }\n        const hadLogging = !!this._capabilities.logging;\n        this._capabilities = mergeCapabilities(this._capabilities, capabilities);\n        if (!hadLogging && this._capabilities.logging) {\n            this._registerLoggingHandler();\n        }\n    }\n\n    /**\n     * Enforces server-side validation for `tools/call` results regardless of how the\n     * handler was registered, attaches the configured per-operation cache hint\n     * (when one exists) so the 2026-07-28 encode seam can fill `ttlMs`/`cacheScope`\n     * for results that do not provide their own, and owns the multi-round-trip\n     * seam: on the methods whose 2026-07-28 result vocabulary includes\n     * `input_required` (`tools/call`, `prompts/get`, `resources/read`) an\n     * input-required return skips result-schema validation and is checked\n     * against the served era, the at-least-one rule, and the request's own\n     * declared client capabilities; on every other method an input-required\n     * return is a server bug and fails loudly. The hint rides a symbol-keyed\n     * property that is never serialized, so 2025-era responses are unaffected.\n     */\n    protected override _wrapHandler(\n        method: string,\n        handler: (request: JSONRPCRequest, ctx: ServerContext) => Promise<Result>\n    ): (request: JSONRPCRequest, ctx: ServerContext) => Promise<Result> {\n        if (method !== 'tools/call') {\n            const cacheHint = (this._cacheHints as Record<string, CacheHint | undefined> | undefined)?.[method];\n            const isInputRequiredCapable = INPUT_REQUIRED_CAPABLE_METHODS.has(method);\n            if (cacheHint === undefined && !isInputRequiredCapable) {\n                // Server-bug guard: an input-required return from a method\n                // whose result vocabulary does not include it is never\n                // mis-typed onto the wire.\n                return async (request, ctx) => {\n                    const result = await handler(request, ctx);\n                    if (isInputRequiredResult(result)) {\n                        throw new ProtocolError(\n                            ProtocolErrorCode.InternalError,\n                            `Handler for ${method} returned an input-required result, but only tools/call, prompts/get and ` +\n                                `resources/read support input_required (protocol revision 2026-07-28)`\n                        );\n                    }\n                    return result;\n                };\n            }\n            return async (request, ctx) => {\n                const result = isInputRequiredCapable\n                    ? await this._invokeInputRequiredCapableHandler(method, handler, request, ctx)\n                    : await handler(request, ctx);\n                if (isInputRequiredResult(result)) {\n                    if (!isInputRequiredCapable) {\n                        throw new ProtocolError(\n                            ProtocolErrorCode.InternalError,\n                            `Handler for ${method} returned an input-required result, but only tools/call, prompts/get and ` +\n                                `resources/read support input_required (protocol revision 2026-07-28)`\n                        );\n                    }\n                    // Never cache-stamped (the encode contract skips\n                    // non-complete results); the hint is not attached.\n                    return result;\n                }\n                return cacheHint === undefined ? result : attachCacheHintFallback(result, cacheHint);\n            };\n        }\n        return async (request, ctx) => {\n            // Era-exact validation via the function-only WireCodec contract:\n            // resolved from the instance era at dispatch time (the era gate\n            // guarantees tools/call exists on the serving era, so the\n            // `not-in-era` arm is an internal error). The era registry entry\n            // IS the plain CallToolResult schema (the result map is aligned\n            // to the typed map — no widened unions), so no narrower surface\n            // is needed.\n            const codec = codecForVersion(this._negotiatedProtocolVersion);\n            const validatedRequest = codec.validateRequest('tools/call', request);\n            if (!validatedRequest.ok) {\n                throw new ProtocolError(\n                    validatedRequest.reason === 'not-in-era' ? ProtocolErrorCode.InternalError : ProtocolErrorCode.InvalidParams,\n                    validatedRequest.reason === 'not-in-era'\n                        ? 'No wire schema for tools/call in the resolved era'\n                        : `Invalid tools/call request: ${validatedRequest.message}`\n                );\n            }\n\n            const result = await this._invokeInputRequiredCapableHandler('tools/call', handler, request, ctx);\n            if (isInputRequiredResult(result)) {\n                // Already checked by the seam; the CallToolResult schema does\n                // not apply to it (no widening — InputRequiredResult travels\n                // alongside).\n                return result;\n            }\n\n            // v1-parity authoring affordance, era-independent: a content-less\n            // handler result normalizes to content: [] before era validation.\n            // Other result families' bodies stay un-normalized and fail loudly.\n            const normalizedResult = normalizeContentlessToolResult(result);\n\n            const validationResult = codec.validateResult('tools/call', normalizedResult);\n            if (!validationResult.ok) {\n                throw new ProtocolError(\n                    validationResult.reason === 'not-in-era' ? ProtocolErrorCode.InternalError : ProtocolErrorCode.InvalidParams,\n                    validationResult.reason === 'not-in-era'\n                        ? 'No wire schema for tools/call in the resolved era'\n                        : `Invalid tools/call result: ${validationResult.message}`\n                );\n            }\n\n            return validationResult.value;\n        };\n    }\n\n    /**\n     * Whether this instance is bound to a 2026-07-28-or-later protocol\n     * revision. Era is instance state — a serving entry (`createMcpHandler`,\n     * `serveStdio`) marks the instance modern at construction; a 2025-era\n     * `initialize` handshake binds it legacy. The multi-round-trip seam reads\n     * this directly: there is no per-request era consult.\n     */\n    private _servedModernEra(): boolean {\n        return this._negotiatedProtocolVersion !== undefined && isModernProtocolVersion(this._negotiatedProtocolVersion);\n    }\n\n    /**\n     * Invokes a handler for one of the multi-round-trip methods and applies\n     * the input-required seam:\n     *\n     * - a `UrlElicitationRequiredError` (or any 2025-style server→client\n     *   request idiom) escaping the handler on a request served on the\n     *   2026-07-28 era fails LOUDLY with a clear steer to\n     *   `inputRequired.elicitUrl(...)` — the `-32042` error never reaches the\n     *   2026-07-28 wire and the throw is not silently converted. Requests\n     *   served on the 2025 era keep today's `-32042` behavior byte-exact (the\n     *   error is rethrown unchanged).\n     * - an input-required RETURN toward a 2026-07-28 request must satisfy\n     *   the at-least-one rule, and every embedded request must be covered by\n     *   the capabilities declared on the request's envelope (violations\n     *   answer the typed `-32021` error). Toward a 2025-era request the\n     *   return is fulfilled by the default-on legacy shim, whose own gate\n     *   consults the initialize-declared capabilities and surfaces\n     *   violations per family; `inputRequired.legacyShim: false` restores\n     *   the pre-shim loud failure.\n     */\n    private async _invokeInputRequiredCapableHandler(\n        method: string,\n        handler: (request: JSONRPCRequest, ctx: ServerContext) => Promise<Result>,\n        request: JSONRPCRequest,\n        ctx: ServerContext\n    ): Promise<Result> {\n        const servedModern = this._servedModernEra();\n\n        // The configured requestState.verify hook runs above the handler (and\n        // therefore above the McpServer tools/call funnel), so a rejection\n        // reaches the wire as a real JSON-RPC error rather than an `isError`\n        // tool result. The wire message is FROZEN — the thrown reason is\n        // surfaced via `onerror` only. A non-string `requestState` value (the\n        // wire field is `string | undefined`) is treated as invalid regardless\n        // of whether a hook is configured, so a malformed value cannot bypass\n        // verification.\n        const rawRequestState: unknown = ctx.mcpReq.requestState();\n        if (rawRequestState !== undefined && typeof rawRequestState !== 'string') {\n            throw new ProtocolError(ProtocolErrorCode.InvalidParams, 'Invalid or expired requestState', {\n                reason: 'invalid_request_state'\n            });\n        }\n        let ctxForHandler = ctx;\n        if (typeof rawRequestState === 'string') {\n            const decoded = await this._verifyRequestState(rawRequestState, ctx, method);\n            if (decoded !== undefined) {\n                ctxForHandler = withRequestStateValue(ctx, decoded);\n            }\n        }\n\n        let result: Result;\n        try {\n            result = await handler(request, ctxForHandler);\n        } catch (error) {\n            if (error instanceof ProtocolError && error.code === ProtocolErrorCode.UrlElicitationRequired) {\n                if (!servedModern) {\n                    // 2025-era behavior is frozen: the error reaches the wire\n                    // exactly as it does today.\n                    throw error;\n                }\n                // 2026-era requests do not carry the -32042 surface. A\n                // 2025-style throw fails loudly with a clear steer rather than\n                // being converted: the handler should return\n                // inputRequired.elicitUrl(...) instead.\n                throw new ProtocolError(\n                    ProtocolErrorCode.InternalError,\n                    `URL elicitation cannot be signalled by throwing UrlElicitationRequiredError on protocol revision ` +\n                        `${this._negotiatedProtocolVersion}: return inputRequired({ inputRequests: { …: inputRequired.elicitUrl(...) } }) ` +\n                        `from the handler instead. The urlElicitationRequired error (-32042) of earlier revisions is not ` +\n                        `available on this revision.`\n                );\n            }\n            throw error;\n        }\n\n        if (!isInputRequiredResult(result)) {\n            return result;\n        }\n\n        if (!servedModern) {\n            if (!this._inputRequiredServing.legacyShim) {\n                // The escape hatch (`inputRequired.legacyShim: false`)\n                // restores the pre-shim posture: the 2025-era wire has no\n                // input_required vocabulary, so fail loudly rather than\n                // putting a mis-typed result on the wire.\n                throw new ProtocolError(\n                    ProtocolErrorCode.InternalError,\n                    `Handler for ${method} returned an input-required result, but this request is served on protocol revision ` +\n                        `${this._negotiatedProtocolVersion ?? LATEST_PROTOCOL_VERSION}, which has no input_required vocabulary`\n                );\n            }\n            // Write-once handlers served to deployed 2025 clients.\n            return await this._legacyInputRequiredShim().fulfill(method, handler, request, ctxForHandler, result);\n        }\n\n        // F7 at-least-one re-check (hand-built results are legal; the rule is\n        // re-checked at the seam).\n        const inputRequests = result.inputRequests as Record<string, unknown> | null | undefined;\n        const hasInputRequests = inputRequests != null && Object.keys(inputRequests).length > 0;\n        const hasRequestState = typeof result.requestState === 'string';\n        if (!hasInputRequests && !hasRequestState) {\n            throw new ProtocolError(\n                ProtocolErrorCode.InternalError,\n                `Handler for ${method} returned an input-required result with neither inputRequests nor requestState ` +\n                    `(every InputRequiredResult must include at least one of the two)`\n            );\n        }\n\n        // Per-embedded-request capability check against the request's own\n        // envelope declaration (-32021 on violation).\n        if (hasInputRequests) {\n            const declared = this._inputRequestCapabilityView(ctx);\n            for (const [key, entry] of Object.entries(inputRequests)) {\n                const { embedded, required } = coerceEmbeddedInputRequest(method, key, entry);\n                const missing = missingClientCapabilities(required, declared);\n                if (missing !== undefined) {\n                    throw new MissingRequiredClientCapabilityError(\n                        { requiredCapabilities: missing },\n                        `Cannot request input '${key}' (${embedded.method}): the request's client capabilities do not declare ` +\n                            `the required capability`\n                    );\n                }\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     * Runs the configured `requestState.verify` hook and returns its\n     * resolved value (`undefined` when unconfigured or the hook returns\n     * nothing). Deny-on-error: any hook failure answers the frozen `-32602`;\n     * the reason goes to `onerror` only.\n     */\n    private async _verifyRequestState(state: string, ctx: ServerContext, method: string): Promise<unknown> {\n        if (this._requestStateVerify === undefined) {\n            return undefined;\n        }\n        try {\n            return await this._requestStateVerify(state, ctx);\n        } catch (error) {\n            this.onerror?.(\n                new Error(`requestState verification rejected ${method}: ${error instanceof Error ? error.message : String(error)}`)\n            );\n            throw new ProtocolError(ProtocolErrorCode.InvalidParams, 'Invalid or expired requestState', {\n                reason: 'invalid_request_state'\n            });\n        }\n    }\n\n    /**\n     * The per-request resolved client-capabilities view: the request's own\n     * `_meta` envelope on the 2026 era; the `initialize`-declared state on a\n     * 2025-era connection. Per-request instances that never saw an\n     * initialize (stateless legacy) hold nothing, so gates refuse there.\n     */\n    private _inputRequestCapabilityView(ctx: ServerContext): ClientCapabilities | undefined {\n        return this._servedModernEra()\n            ? (ctx.mcpReq.envelope?.[CLIENT_CAPABILITIES_META_KEY] as ClientCapabilities | undefined)\n            : this._clientCapabilities;\n    }\n\n    /**\n     * Guard for the push-style server→client request APIs ({@linkcode createMessage},\n     * {@linkcode elicitInput}, {@linkcode listRoots}, {@linkcode ping}) on a\n     * modern-era instance: the 2026-07-28 revision has no server→client request\n     * channel, so the call fails before any wire traffic with a typed error\n     * whose message steers to `inputRequired(...)`. The base era gate would\n     * also reject it; this guard runs first to carry the steer.\n     */\n    private _assertPushApiInServedEra(method: string): void {\n        if (this._servedModernEra()) {\n            throw new SdkError(\n                SdkErrorCode.MethodNotSupportedByProtocolVersion,\n                `Server-to-client requests are not available on protocol revision ${this._negotiatedProtocolVersion}: ` +\n                    `'${method}' cannot be sent while serving a request on that revision. ` +\n                    `Return inputRequired({ ... }) from the handler instead — the client fulfils the embedded ` +\n                    `requests and retries the original request (multi round-trip requests).`,\n                { method, era: '2026-07-28' }\n            );\n        }\n    }\n\n    protected assertCapabilityForMethod(method: RequestMethod | string): void {\n        switch (method) {\n            case 'sampling/createMessage': {\n                if (!this._clientCapabilities?.sampling) {\n                    throw new SdkError(SdkErrorCode.CapabilityNotSupported, `Client does not support sampling (required for ${method})`);\n                }\n                break;\n            }\n\n            case 'elicitation/create': {\n                if (!this._clientCapabilities?.elicitation) {\n                    throw new SdkError(SdkErrorCode.CapabilityNotSupported, `Client does not support elicitation (required for ${method})`);\n                }\n                break;\n            }\n\n            case 'roots/list': {\n                if (!this._clientCapabilities?.roots) {\n                    throw new SdkError(\n                        SdkErrorCode.CapabilityNotSupported,\n                        `Client does not support listing roots (required for ${method})`\n                    );\n                }\n                break;\n            }\n\n            case 'ping': {\n                // No specific capability required for ping\n                break;\n            }\n        }\n    }\n\n    protected assertNotificationCapability(method: NotificationMethod | string): void {\n        switch (method) {\n            case 'notifications/message': {\n                if (!this._capabilities.logging) {\n                    throw new SdkError(SdkErrorCode.CapabilityNotSupported, `Server does not support logging (required for ${method})`);\n                }\n                break;\n            }\n\n            case 'notifications/resources/updated':\n            case 'notifications/resources/list_changed': {\n                if (!this._capabilities.resources) {\n                    throw new SdkError(\n                        SdkErrorCode.CapabilityNotSupported,\n                        `Server does not support notifying about resources (required for ${method})`\n                    );\n                }\n                break;\n            }\n\n            case 'notifications/tools/list_changed': {\n                if (!this._capabilities.tools) {\n                    throw new SdkError(\n                        SdkErrorCode.CapabilityNotSupported,\n                        `Server does not support notifying of tool list changes (required for ${method})`\n                    );\n                }\n                break;\n            }\n\n            case 'notifications/prompts/list_changed': {\n                if (!this._capabilities.prompts) {\n                    throw new SdkError(\n                        SdkErrorCode.CapabilityNotSupported,\n                        `Server does not support notifying of prompt list changes (required for ${method})`\n                    );\n                }\n                break;\n            }\n\n            case 'notifications/elicitation/complete': {\n                if (!this._clientCapabilities?.elicitation?.url) {\n                    throw new SdkError(\n                        SdkErrorCode.CapabilityNotSupported,\n                        `Client does not support URL elicitation (required for ${method})`\n                    );\n                }\n                break;\n            }\n\n            case 'notifications/cancelled': {\n                // Cancellation notifications are always allowed\n                break;\n            }\n\n            case 'notifications/progress': {\n                // Progress notifications are always allowed\n                break;\n            }\n        }\n    }\n\n    protected assertRequestHandlerCapability(method: string): void {\n        switch (method) {\n            case 'completion/complete': {\n                if (!this._capabilities.completions) {\n                    throw new SdkError(SdkErrorCode.CapabilityNotSupported, `Server does not support completions (required for ${method})`);\n                }\n                break;\n            }\n\n            case 'logging/setLevel': {\n                if (!this._capabilities.logging) {\n                    throw new SdkError(SdkErrorCode.CapabilityNotSupported, `Server does not support logging (required for ${method})`);\n                }\n                break;\n            }\n\n            case 'prompts/get':\n            case 'prompts/list': {\n                if (!this._capabilities.prompts) {\n                    throw new SdkError(SdkErrorCode.CapabilityNotSupported, `Server does not support prompts (required for ${method})`);\n                }\n                break;\n            }\n\n            case 'resources/list':\n            case 'resources/templates/list':\n            case 'resources/read': {\n                if (!this._capabilities.resources) {\n                    throw new SdkError(SdkErrorCode.CapabilityNotSupported, `Server does not support resources (required for ${method})`);\n                }\n                break;\n            }\n\n            case 'tools/call':\n            case 'tools/list': {\n                if (!this._capabilities.tools) {\n                    throw new SdkError(SdkErrorCode.CapabilityNotSupported, `Server does not support tools (required for ${method})`);\n                }\n                break;\n            }\n\n            case 'ping':\n            case 'initialize': {\n                // No specific capability required for these methods\n                break;\n            }\n        }\n    }\n\n    private async _oninitialize(request: InitializeRequest): Promise<InitializeResult> {\n        const requestedVersion = request.params.protocolVersion;\n\n        this._clientCapabilities = request.params.capabilities;\n        this._clientVersion = request.params.clientInfo;\n\n        // A 2026-07-28-or-later revision is NEVER negotiated via the legacy\n        // `initialize` handshake — only ever selected through `server/discover` —\n        // so the accept check and counter-offer consult only the legacy subset.\n        const legacyVersions = legacyProtocolVersions(this._supportedProtocolVersions);\n        const protocolVersion = legacyVersions.includes(requestedVersion)\n            ? requestedVersion\n            : (legacyVersions[0] ?? LATEST_PROTOCOL_VERSION);\n\n        // The negotiated version is the instance's connection state — it IS\n        // the wire-era selection for everything this instance sends and\n        // receives from here on (legacy handshake ⇒ a legacy-era version).\n        this._negotiatedProtocolVersion = protocolVersion;\n        this.transport?.setProtocolVersion?.(protocolVersion);\n\n        return {\n            protocolVersion,\n            capabilities: this.getCapabilities(),\n            serverInfo: this._serverInfo,\n            ...(this._instructions && { instructions: this._instructions })\n        };\n    }\n\n    /**\n     * Answers `server/discover` (protocol revision 2026-07-28). `supportedVersions`\n     * lists only modern revisions (2025-era versions are negotiated via `initialize`);\n     * the capabilities are advertised as-is, listChanged/subscribe bits included\n     * (see {@linkcode discoverAdvertisedCapabilities}).\n     */\n    private _ondiscover(): DiscoverResult {\n        // Server identity is not a body field: the encode seam stamps it into\n        // the result `_meta` via `_outboundServerInfo` (spec PR #3002).\n        return {\n            supportedVersions: modernProtocolVersions(this._supportedProtocolVersions),\n            capabilities: discoverAdvertisedCapabilities(this.getCapabilities()),\n            ...(this._instructions && { instructions: this._instructions })\n        };\n    }\n\n    /**\n     * The identity the 2026-era encode seam stamps into every outbound\n     * result's `_meta` under `io.modelcontextprotocol/serverInfo` (spec PR\n     * #3002: servers SHOULD identify themselves on every response).\n     */\n    protected override _outboundServerInfo(): Implementation | undefined {\n        return this._serverInfo;\n    }\n\n    /**\n     * After initialization has completed, this will be populated with the client's reported capabilities.\n     *\n     * @deprecated Read client identity from the per-request handler context instead: on\n     * 2026-07-28 (per-request envelope) requests `ctx.mcpReq.envelope` carries the client's\n     * declared capabilities, while on 2025-era connections this accessor keeps returning the\n     * `initialize`-scoped value. The accessor remains functional — instances serving the\n     * 2026-07-28 era are backfilled per request from the validated envelope.\n     */\n    getClientCapabilities(): ClientCapabilities | undefined {\n        return this._clientCapabilities;\n    }\n\n    /**\n     * After initialization has completed, this will be populated with information about the client's name and version.\n     *\n     * @deprecated Read client identity from the per-request handler context instead: on\n     * 2026-07-28 (per-request envelope) requests `ctx.mcpReq.envelope` carries the client's\n     * name and version, while on 2025-era connections this accessor keeps returning the\n     * `initialize`-scoped value. The accessor remains functional — instances serving the\n     * 2026-07-28 era are backfilled per request from the validated envelope.\n     */\n    getClientVersion(): Implementation | undefined {\n        return this._clientVersion;\n    }\n\n    /**\n     * After initialization has completed, this will be populated with the protocol version negotiated\n     * with the client (the version the server responded with during the initialize handshake), or\n     * `undefined` before initialization.\n     *\n     * @deprecated Read the protocol revision from the per-request handler context instead: on\n     * 2026-07-28 (per-request envelope) requests `ctx.mcpReq.envelope` names the revision the\n     * request was sent for, while on 2025-era connections this accessor keeps returning the\n     * `initialize`-negotiated version. The accessor remains functional — instances serving the\n     * 2026-07-28 era report that revision.\n     */\n    getNegotiatedProtocolVersion(): string | undefined {\n        return this._negotiatedProtocolVersion;\n    }\n\n    /**\n     * Project a `tools/call` result through this instance's negotiated wire\n     * codec — the era-agnostic SEP-2106 §4.3 TextContent auto-append, plus on\n     * the 2025 era the `{result:…}` wrap when `structuredContent` is a\n     * non-object value or the advertised `outputSchema` had a non-object root.\n     * Identity for object-shaped `structuredContent` on the 2026 era.\n     *\n     * `McpServer`'s built-in `tools/call` handler routes through this method.\n     * Low-level `setRequestHandler('tools/call', …)` authors call it\n     * themselves so the projection lives in one place (the codec) and the\n     * server-side handler stays era-blind.\n     *\n     * This is the only codec function exposed on `Server` — the full\n     * `WireCodec` is intentionally not part of the public surface.\n     */\n    public projectCallToolResult(\n        result: CallToolResult,\n        advertisedOutputSchema: Readonly<Record<string, unknown>> | undefined\n    ): CallToolResult {\n        return this._wireCodec().projectCallToolResult(result, advertisedOutputSchema);\n    }\n\n    /**\n     * Returns the current server capabilities.\n     */\n    public getCapabilities(): ServerCapabilities {\n        return this._capabilities;\n    }\n\n    /**\n     * Sends a `ping` request to the connected client.\n     *\n     * @deprecated The 2026-07-28 protocol removed ping; it throws on a 2026-07-28-era instance.\n     * If your factory serves both eras, this only works on the legacy path.\n     */\n    async ping(): Promise<EmptyResult> {\n        this._assertPushApiInServedEra('ping');\n        return this.request({ method: 'ping' });\n    }\n\n    /**\n     * Request LLM sampling from the client (without tools).\n     * Returns single content block for backwards compatibility.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).\n     * Throws on a 2026-07-28-era request — use {@link index.inputRequired | inputRequired} (multi-round-trip) instead,\n     * or migrate to calling LLM provider APIs directly. The 2025 push-style server-to-client\n     * request model is replaced by input_required results in the 2026-07-28 protocol. If your\n     * factory serves both eras, this only works on the legacy path.\n     */\n    async createMessage(params: CreateMessageRequestParamsBase, options?: RequestOptions): Promise<CreateMessageResult>;\n\n    /**\n     * Request LLM sampling from the client with tool support.\n     * Returns content that may be a single block or array (for parallel tool calls).\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).\n     * Throws on a 2026-07-28-era request — use {@link index.inputRequired | inputRequired} (multi-round-trip) instead,\n     * or migrate to calling LLM provider APIs directly. The 2025 push-style server-to-client\n     * request model is replaced by input_required results in the 2026-07-28 protocol. If your\n     * factory serves both eras, this only works on the legacy path.\n     */\n    async createMessage(params: CreateMessageRequestParamsWithTools, options?: RequestOptions): Promise<CreateMessageResultWithTools>;\n\n    /**\n     * Request LLM sampling from the client.\n     * When tools may or may not be present, returns the union type.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).\n     * Throws on a 2026-07-28-era request — use {@link index.inputRequired | inputRequired} (multi-round-trip) instead,\n     * or migrate to calling LLM provider APIs directly. The 2025 push-style server-to-client\n     * request model is replaced by input_required results in the 2026-07-28 protocol. If your\n     * factory serves both eras, this only works on the legacy path.\n     */\n    async createMessage(\n        params: CreateMessageRequest['params'],\n        options?: RequestOptions\n    ): Promise<CreateMessageResult | CreateMessageResultWithTools>;\n\n    // Implementation\n    async createMessage(\n        params: CreateMessageRequest['params'],\n        options?: RequestOptions\n    ): Promise<CreateMessageResult | CreateMessageResultWithTools> {\n        this._assertPushApiInServedEra('sampling/createMessage');\n        // Capability check - only required when tools/toolChoice are provided\n        if ((params.tools || params.toolChoice) && !this._clientCapabilities?.sampling?.tools) {\n            throw new SdkError(SdkErrorCode.CapabilityNotSupported, 'Client does not support sampling tools capability.');\n        }\n\n        // Message structure validation - always validate tool_use/tool_result pairs.\n        // These may appear even without tools/toolChoice in the current request when\n        // a previous sampling request returned tool_use and this is a follow-up with results.\n        if (params.messages.length > 0) {\n            const lastMessage = params.messages.at(-1)!;\n            const lastContent = Array.isArray(lastMessage.content) ? lastMessage.content : [lastMessage.content];\n            const hasToolResults = lastContent.some(c => c.type === 'tool_result');\n\n            const previousMessage = params.messages.length > 1 ? params.messages.at(-2) : undefined;\n            const previousContent = previousMessage\n                ? Array.isArray(previousMessage.content)\n                    ? previousMessage.content\n                    : [previousMessage.content]\n                : [];\n            const hasPreviousToolUse = previousContent.some(c => c.type === 'tool_use');\n\n            if (hasToolResults) {\n                if (lastContent.some(c => c.type !== 'tool_result')) {\n                    throw new ProtocolError(\n                        ProtocolErrorCode.InvalidParams,\n                        'The last message must contain only tool_result content if any is present'\n                    );\n                }\n                if (!hasPreviousToolUse) {\n                    throw new ProtocolError(\n                        ProtocolErrorCode.InvalidParams,\n                        'tool_result blocks are not matching any tool_use from the previous message'\n                    );\n                }\n            }\n            if (hasPreviousToolUse) {\n                const toolUseIds = new Set(previousContent.filter(c => c.type === 'tool_use').map(c => (c as ToolUseContent).id));\n                const toolResultIds = new Set(\n                    lastContent.filter(c => c.type === 'tool_result').map(c => (c as ToolResultContent).toolUseId)\n                );\n                if (toolUseIds.size !== toolResultIds.size || ![...toolUseIds].every(id => toolResultIds.has(id))) {\n                    throw new ProtocolError(\n                        ProtocolErrorCode.InvalidParams,\n                        'ids of tool_result blocks and tool_use blocks from previous message do not match'\n                    );\n                }\n            }\n        }\n\n        // The result schema depends on the REQUEST params (tools vs no tools),\n        // which a method-keyed registry entry cannot express — the era codec's\n        // `samplingResultVariant` owns the with-tools/plain pair. The funnel's\n        // registry-result path runs first (era-gated: sampling/createMessage\n        // is not a wire request on the 2026 era, so a modern-era instance\n        // fails with the typed era error before anything reaches the\n        // transport), then the variant validator narrows the wide result.\n        const hasTools = Boolean(params.tools || params.toolChoice);\n        const wide = await this.request({ method: 'sampling/createMessage', params }, options);\n        const outcome = this._wireCodec().samplingResultVariant(hasTools, wide);\n        if (!outcome.ok) {\n            // `not-in-era` is unreachable on the path that gets here (the era\n            // gate above filters out 2026 instances); `invalid` is a peer bug.\n            throw new SdkError(\n                SdkErrorCode.InvalidResult,\n                `Invalid sampling/createMessage result: ${outcome.reason === 'invalid' ? outcome.message : outcome.reason}`\n            );\n        }\n        return outcome.value;\n    }\n\n    /**\n     * Creates an elicitation request for the given parameters.\n     * For backwards compatibility, `mode` may be omitted for form requests and will default to `\"form\"`.\n     * @param params The parameters for the elicitation request.\n     * @param options Optional request options.\n     * @returns The result of the elicitation request.\n     *\n     * @deprecated Throws on a 2026-07-28-era request — use {@link index.inputRequired | inputRequired} (multi-round-trip)\n     * instead. The 2025 push-style server-to-client request model is replaced by input_required\n     * results in the 2026-07-28 protocol. If your factory serves both eras, this only works on the\n     * legacy path.\n     */\n    async elicitInput(params: ElicitRequestFormParams | ElicitRequestURLParams, options?: RequestOptions): Promise<ElicitResult> {\n        this._assertPushApiInServedEra('elicitation/create');\n        const mode = (params.mode ?? 'form') as 'form' | 'url';\n\n        switch (mode) {\n            case 'url': {\n                if (!this._clientCapabilities?.elicitation?.url) {\n                    throw new SdkError(SdkErrorCode.CapabilityNotSupported, 'Client does not support url elicitation.');\n                }\n                break;\n            }\n            case 'form': {\n                if (!this._clientCapabilities?.elicitation?.form) {\n                    throw new SdkError(SdkErrorCode.CapabilityNotSupported, 'Client does not support form elicitation.');\n                }\n                break;\n            }\n        }\n\n        return this._sendElicitationLeg(params, options);\n    }\n\n    /**\n     * The capability-check-free core of {@linkcode elicitInput}. The shim\n     * uses it because its gate differs from the public checks: a bare\n     * `elicitation: {}` counts as form support (the pre-mode rule), and\n     * accepted content passes through unvalidated for parity with the\n     * modern client driver (handlers validate via the schema-aware\n     * `acceptedContent` overload and can re-ask).\n     */\n    private async _sendElicitationLeg(\n        params: ElicitRequestFormParams | ElicitRequestURLParams,\n        options?: RequestOptions,\n        behavior?: { validateAcceptedContent: boolean }\n    ): Promise<ElicitResult> {\n        const mode = (params.mode ?? 'form') as 'form' | 'url';\n        const validateAcceptedContent = behavior?.validateAcceptedContent ?? true;\n\n        switch (mode) {\n            case 'url': {\n                const urlParams = params as ElicitRequestURLParams;\n                // Method-keyed request(): the era registry's plain\n                // ElicitResult schema is exactly the narrow surface.\n                return this.request({ method: 'elicitation/create', params: urlParams }, options);\n            }\n            case 'form': {\n                const formParams: ElicitRequestFormParams =\n                    params.mode === 'form' ? (params as ElicitRequestFormParams) : { ...(params as ElicitRequestFormParams), mode: 'form' };\n\n                const result = await this.request({ method: 'elicitation/create', params: formParams }, options);\n\n                if (validateAcceptedContent && result.action === 'accept' && result.content && formParams.requestedSchema) {\n                    try {\n                        const validator = this._jsonSchemaValidator.getValidator(formParams.requestedSchema as JsonSchemaType);\n                        const validationResult = validator(result.content);\n\n                        if (!validationResult.valid) {\n                            throw new ProtocolError(\n                                ProtocolErrorCode.InvalidParams,\n                                `Elicitation response content does not match requested schema: ${validationResult.errorMessage}`\n                            );\n                        }\n                    } catch (error) {\n                        if (error instanceof ProtocolError) {\n                            throw error;\n                        }\n                        throw new ProtocolError(\n                            ProtocolErrorCode.InternalError,\n                            `Error validating elicitation response: ${error instanceof Error ? error.message : String(error)}`\n                        );\n                    }\n                }\n                return result;\n            }\n        }\n    }\n\n    /**\n     * Creates a reusable callback that, when invoked, will send a `notifications/elicitation/complete`\n     * notification for the specified elicitation ID.\n     *\n     * The notification (and the `elicitationId` it references) exists only on protocol revision\n     * 2025-11-25 — the 2026-07-28 revision removed both. On a connection negotiated at 2026-07-28 the\n     * returned callback rejects with a typed local error before anything reaches the transport\n     * (the method is not part of that revision's wire registry).\n     *\n     * @param elicitationId The ID of the elicitation to mark as complete.\n     * @param options Optional notification options. Useful when the completion notification should be related to a prior request.\n     * @returns A function that emits the completion notification when awaited.\n     */\n    createElicitationCompletionNotifier(elicitationId: string, options?: NotificationOptions): () => Promise<void> {\n        if (!this._clientCapabilities?.elicitation?.url) {\n            throw new SdkError(\n                SdkErrorCode.CapabilityNotSupported,\n                'Client does not support URL elicitation (required for notifications/elicitation/complete)'\n            );\n        }\n\n        return () =>\n            this.notification(\n                {\n                    method: 'notifications/elicitation/complete',\n                    params: {\n                        elicitationId\n                    }\n                },\n                options\n            );\n    }\n\n    /**\n     * Requests the list of roots from the client.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).\n     * Throws on a 2026-07-28-era request — use {@link index.inputRequired | inputRequired} (multi-round-trip) instead,\n     * or migrate to passing paths via tool parameters, resource URIs, or configuration. The 2025\n     * push-style server-to-client request model is replaced by input_required results in the\n     * 2026-07-28 protocol. If your factory serves both eras, this only works on the legacy path.\n     */\n    async listRoots(params?: ListRootsRequest['params'], options?: RequestOptions): Promise<ListRootsResult> {\n        this._assertPushApiInServedEra('roots/list');\n        return this.request({ method: 'roots/list', params }, options);\n    }\n\n    /**\n     * Sends a logging message to the client, if connected.\n     * Note: You only need to send the parameters object, not the entire JSON-RPC message.\n     * @see {@linkcode LoggingMessageNotification}\n     * @param params\n     * @param sessionId Optional for stateless transports and backward compatibility.\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).\n     * Remains functional during the deprecation window (at least twelve months).\n     * Migrate to stderr logging (STDIO servers) or OpenTelemetry.\n     */\n    async sendLoggingMessage(params: LoggingMessageNotification['params'], sessionId?: string) {\n        if (this._capabilities.logging && !this.isMessageIgnored(params.level, sessionId)) {\n            return this.notification({ method: 'notifications/message', params });\n        }\n    }\n\n    async sendResourceUpdated(params: ResourceUpdatedNotification['params']) {\n        return this.notification({\n            method: 'notifications/resources/updated',\n            params\n        });\n    }\n\n    async sendResourceListChanged() {\n        return this.notification({\n            method: 'notifications/resources/list_changed'\n        });\n    }\n\n    async sendToolListChanged() {\n        return this.notification({ method: 'notifications/tools/list_changed' });\n    }\n\n    async sendPromptListChanged() {\n        return this.notification({ method: 'notifications/prompts/list_changed' });\n    }\n}\n\n/**\n * The capability set a server advertises on `server/discover`. Pure — never\n * mutates the input; the legacy `initialize` advertisement is untouched.\n *\n * The serving entries serve `subscriptions/listen` themselves, so the\n * `listChanged` and `resources.subscribe` capability bits are advertised\n * as-is: a modern-era client uses them to decide which notification types to\n * request on its listen filter.\n */\nexport function discoverAdvertisedCapabilities(capabilities: ServerCapabilities): ServerCapabilities {\n    return { ...capabilities };\n}\n", "import type {\n    BaseMetadata,\n    CacheHint,\n    CallToolResult,\n    CompleteRequestPrompt,\n    CompleteRequestResourceTemplate,\n    CompleteResult,\n    GetPromptResult,\n    Icon,\n    Implementation,\n    InputRequiredResult,\n    ListPromptsResult,\n    ListResourcesResult,\n    ListToolsResult,\n    LoggingMessageNotification,\n    Prompt,\n    PromptReference,\n    ReadResourceResult,\n    Resource,\n    ResourceTemplateReference,\n    Result,\n    ServerContext,\n    StandardSchemaWithJSON,\n    Tool,\n    ToolAnnotations,\n    ToolExecution,\n    Transport,\n    Variables\n} from '@modelcontextprotocol/core-internal';\nimport {\n    assertCompleteRequestPrompt,\n    assertCompleteRequestResourceTemplate,\n    assertValidCacheHint,\n    attachCacheHintFallback,\n    isInputRequiredResult,\n    normalizeRawShapeSchema,\n    promptArgumentsFromStandardSchema,\n    ProtocolError,\n    ProtocolErrorCode,\n    ResourceNotFoundError,\n    scanXMcpHeaderDeclarations,\n    standardSchemaToJsonSchema,\n    UriTemplate,\n    validateAndWarnToolName,\n    validateStandardSchema\n} from '@modelcontextprotocol/core-internal';\nimport type * as z from 'zod/v4';\n\nimport { getCompleter, isCompletable } from './completable';\nimport type { ScopeChallengeHandler } from './scopeChallenge';\nimport { supportsScopeChallengeResolver } from './scopeChallenge';\nimport type { ServerOptions } from './server';\nimport { Server } from './server';\n\n// Counts array elements and object members in `value`, stopping once the running total passes `max`.\nfunction toolInputElementCount(value: unknown, max: number): number {\n    let count = 0;\n    const stack: unknown[] = [value];\n    while (stack.length > 0) {\n        const node = stack.pop();\n        if (node === null || typeof node !== 'object') continue;\n        if (Array.isArray(node)) {\n            for (const child of node) {\n                if (++count > max) return count;\n                if (child !== null && typeof child === 'object') stack.push(child);\n            }\n        } else {\n            for (const key in node) {\n                if (!Object.prototype.hasOwnProperty.call(node, key)) continue;\n                if (++count > max) return count;\n                const child = (node as Record<string, unknown>)[key];\n                if (child !== null && typeof child === 'object') stack.push(child);\n            }\n        }\n    }\n    return count;\n}\n\n// Resolves the configured element ceiling: no limit when unset or Infinity, else a number of at least 1.\nfunction resolveMaxToolInputElements(value: number | undefined): number | undefined {\n    if (value === undefined || value === Infinity) return undefined;\n    if (typeof value !== 'number' || Number.isNaN(value) || value < 1) {\n        throw new RangeError(`maxToolInputElements must be a number of at least 1, or Infinity, got ${String(value)}`);\n    }\n    return value;\n}\n\n/**\n * Options for {@linkcode McpServer}: everything {@linkcode ServerOptions} accepts, plus `maxToolInputElements`.\n */\nexport type McpServerOptions = ServerOptions & {\n    /**\n     * Largest combined number of array elements and object members a single `tools/call` `arguments` payload may contain.\n     * A number of at least 1; unset or `Infinity` means no limit.\n     */\n    maxToolInputElements?: number;\n};\n\n/**\n * High-level MCP server that provides a simpler API for working with resources, tools, and prompts.\n * For advanced usage (like sending notifications or setting custom request handlers), use the underlying\n * {@linkcode Server} instance available via the {@linkcode McpServer.server | server} property.\n *\n * @example\n * ```ts source=\"./mcp.examples.ts#McpServer_basicUsage\"\n * const server = new McpServer({\n *     name: 'my-server',\n *     version: '1.0.0'\n * });\n * ```\n */\nexport class McpServer {\n    /**\n     * The underlying {@linkcode Server} instance, useful for advanced operations like sending notifications.\n     */\n    public readonly server: Server;\n\n    private readonly _maxToolInputElements: number | undefined;\n\n    private _registeredResources: { [uri: string]: RegisteredResource } = {};\n    private _registeredResourceTemplates: {\n        [name: string]: RegisteredResourceTemplate;\n    } = {};\n    private _registeredTools: { [name: string]: RegisteredTool } = {};\n    private _registeredPrompts: { [name: string]: RegisteredPrompt } = {};\n    /** Per-tool JSON-converted `inputSchema`, filled on first use by `toolInputSchemaJson()`. */\n    private _toolInputSchemaJson: { [name: string]: Record<string, unknown> } = {};\n\n    /**\n     * The JSON-serialized `inputSchema` of a registered tool, or `undefined`\n     * when no such tool is registered. Used by the HTTP entry's pre-dispatch\n     * SEP-2243 `Mcp-Param-*` validation step (which needs the same JSON Schema\n     * `tools/list` would emit, before dispatch reaches the handler).\n     *\n     * @internal\n     */\n    toolInputSchemaJson(name: string): Record<string, unknown> | undefined {\n        const tool = this._registeredTools[name];\n        if (tool === undefined || !tool.enabled) return undefined;\n        if (Object.hasOwn(this._toolInputSchemaJson, name)) return this._toolInputSchemaJson[name];\n        if (tool.inputSchema === undefined) return EMPTY_OBJECT_JSON_SCHEMA;\n        // A conversion failure returns `undefined` so it surfaces where it always has (`tools/list`).\n        try {\n            const json = standardSchemaToJsonSchema(tool.inputSchema, 'input');\n            this._toolInputSchemaJson[name] = json;\n            return json;\n        } catch {\n            return undefined;\n        }\n    }\n\n    constructor(serverInfo: Implementation, options?: McpServerOptions) {\n        this.server = new Server(serverInfo, options);\n        this._maxToolInputElements = resolveMaxToolInputElements(options?.maxToolInputElements);\n\n        // Per the MCP spec, a server that declares a primitive capability MUST respond to its\n        // list method (potentially with an empty result) rather than \"Method not found\" — even\n        // if nothing has been registered yet. Handlers are normally installed lazily on first\n        // registration, so eagerly install them here for any capability declared up front.\n        // (Users of the low-level `Server` class remain responsible for their own handlers.)\n        if (options?.capabilities?.tools) {\n            this.setToolRequestHandlers();\n        }\n        if (options?.capabilities?.resources) {\n            this.setResourceRequestHandlers();\n        }\n        if (options?.capabilities?.prompts) {\n            this.setPromptRequestHandlers();\n        }\n    }\n\n    /**\n     * Attaches to the given transport, starts it, and starts listening for messages.\n     *\n     * The `server` object assumes ownership of the {@linkcode Transport}, replacing any callbacks that have already been set, and expects that it is the only user of the {@linkcode Transport} instance going forward.\n     *\n     * @example\n     * ```ts source=\"./mcp.examples.ts#McpServer_connect_stdio\"\n     * const server = new McpServer({ name: 'my-server', version: '1.0.0' });\n     * const transport = new StdioServerTransport();\n     * await server.connect(transport);\n     * ```\n     */\n    async connect(transport: Transport): Promise<void> {\n        if (supportsScopeChallengeResolver(transport)) {\n            transport.setScopeChallengeResolver(context => this.resolveScopeChallenge(context));\n        }\n        return await this.server.connect(transport);\n    }\n\n    /**\n     * Closes the connection.\n     */\n    async close(): Promise<void> {\n        await this.server.close();\n    }\n\n    /** @internal */\n    resolveScopeChallenge: ScopeChallengeHandler = context => {\n        switch (context.request.method) {\n            case 'tools/call': {\n                const toolName = (context.request.params as { name?: unknown } | undefined)?.name;\n                if (typeof toolName !== 'string') return;\n                const tool = this._registeredTools[toolName];\n                if (tool === undefined || !tool.enabled) return;\n                return tool.scopeChallenge?.(context);\n            }\n            case 'resources/read': {\n                const resourceUri = (context.request.params as { uri?: unknown } | undefined)?.uri;\n                if (typeof resourceUri !== 'string') return;\n\n                let uri: URL;\n                try {\n                    uri = new URL(resourceUri);\n                } catch {\n                    return;\n                }\n\n                const resource = this._registeredResources[uri.toString()];\n                if (resource !== undefined) {\n                    return resource.enabled ? resource.scopeChallenge?.(context) : undefined;\n                }\n\n                for (const template of Object.values(this._registeredResourceTemplates)) {\n                    const variables = template.resourceTemplate.uriTemplate.match(uri.toString());\n                    if (variables) {\n                        return template.enabled ? template.scopeChallenge?.(context) : undefined;\n                    }\n                }\n                return;\n            }\n            case 'prompts/get': {\n                const promptName = (context.request.params as { name?: unknown } | undefined)?.name;\n                if (typeof promptName !== 'string') return;\n                const prompt = this._registeredPrompts[promptName];\n                if (prompt === undefined || !prompt.enabled) return;\n                return prompt.scopeChallenge?.(context);\n            }\n            default: {\n                return;\n            }\n        }\n    };\n\n    private _toolHandlersInitialized = false;\n\n    private setToolRequestHandlers() {\n        if (this._toolHandlersInitialized) {\n            return;\n        }\n\n        this.server.assertCanSetRequestHandler('tools/list');\n        this.server.assertCanSetRequestHandler('tools/call');\n\n        this.server.registerCapabilities({\n            tools: {\n                listChanged: this.server.getCapabilities().tools?.listChanged ?? true\n            }\n        });\n\n        // Note: tools are listed in registration (insertion) order, which keeps the ordering\n        // deterministic across requests when the underlying tool set has not changed, as\n        // recommended by the spec.\n        this.server.setRequestHandler(\n            'tools/list',\n            (): ListToolsResult => ({\n                tools: Object.entries(this._registeredTools)\n                    .filter(([, tool]) => tool.enabled)\n                    .map(([name, tool]): Tool => {\n                        const toolDefinition: Tool = {\n                            name,\n                            title: tool.title,\n                            description: tool.description,\n                            inputSchema: tool.inputSchema\n                                ? (convertListedInputSchema(name, tool.inputSchema) as Tool['inputSchema'])\n                                : EMPTY_OBJECT_JSON_SCHEMA,\n                            annotations: tool.annotations,\n                            icons: tool.icons,\n                            execution: tool.execution,\n                            _meta: tool._meta\n                        };\n\n                        if (tool.outputSchema) {\n                            // SEP-2106 legacy interop (non-object outputSchema roots wrapped in\n                            // `{type:'object',properties:{result:<natural>},required:['result']}` toward\n                            // 2025-era clients) lives in the 2025 wire codec's `encodeResult('tools/list', …)`\n                            // — this handler is era-blind and emits the natural converted schema.\n                            toolDefinition.outputSchema = standardSchemaToJsonSchema(tool.outputSchema, 'output') as Tool['outputSchema'];\n                        }\n\n                        return toolDefinition;\n                    })\n            })\n        );\n\n        this.server.setRequestHandler('tools/call', async (request, ctx): Promise<CallToolResult | InputRequiredResult> => {\n            const tool = this._registeredTools[request.params.name];\n            if (!tool) {\n                throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Tool ${request.params.name} not found`);\n            }\n            if (!tool.enabled) {\n                throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Tool ${request.params.name} disabled`);\n            }\n\n            try {\n                const args = await this.validateToolInput(tool, request.params.arguments, request.params.name);\n                const result = await this.executeToolHandler(tool, args, ctx);\n                await this.validateToolOutput(tool, result, request.params.name);\n                if (isInputRequiredResult(result)) return result;\n                // SEP-2106 result-side projection (the era-agnostic TextContent auto-append; the\n                // `{result:…}` wrap on the 2025 era) lives behind the wire codec's\n                // `projectCallToolResult`. The codec receives the SAME advertised JSON Schema\n                // `tools/list` emits (and that the codec's `encodeResult('tools/list', …)` may have\n                // wrapped) so the listing and the call cannot diverge.\n                return this.server.projectCallToolResult(result, tool.outputSchemaJson);\n            } catch (error) {\n                if (error instanceof ProtocolError && error.code === ProtocolErrorCode.UrlElicitationRequired) {\n                    throw error; // Return the error to the caller without wrapping in CallToolResult\n                }\n                return this.createToolError(error instanceof Error ? error.message : String(error));\n            }\n        });\n\n        this._toolHandlersInitialized = true;\n    }\n\n    /**\n     * Creates a tool error result.\n     *\n     * @param errorMessage - The error message.\n     * @returns The tool error result.\n     */\n    private createToolError(errorMessage: string): CallToolResult {\n        return {\n            content: [\n                {\n                    type: 'text',\n                    text: errorMessage\n                }\n            ],\n            isError: true\n        };\n    }\n\n    /**\n     * Validates tool input arguments against the tool's input schema.\n     */\n    private async validateToolInput<\n        ToolType extends RegisteredTool,\n        Args extends ToolType['inputSchema'] extends infer InputSchema\n            ? InputSchema extends StandardSchemaWithJSON\n                ? StandardSchemaWithJSON.InferOutput<InputSchema>\n                : undefined\n            : undefined\n    >(tool: ToolType, args: Args, toolName: string): Promise<Args> {\n        if (\n            this._maxToolInputElements !== undefined &&\n            toolInputElementCount(args, this._maxToolInputElements) > this._maxToolInputElements\n        ) {\n            throw new ProtocolError(\n                ProtocolErrorCode.InvalidParams,\n                `Invalid arguments for tool ${toolName}: arguments contain more than the maximum of ${this._maxToolInputElements} elements`\n            );\n        }\n\n        if (!tool.inputSchema) {\n            return undefined as Args;\n        }\n\n        const parseResult = await validateStandardSchema(tool.inputSchema, args ?? {});\n        if (!parseResult.success) {\n            throw new ProtocolError(\n                ProtocolErrorCode.InvalidParams,\n                `Input validation error: Invalid arguments for tool ${toolName}: ${parseResult.error}`\n            );\n        }\n\n        return parseResult.data as unknown as Args;\n    }\n\n    /**\n     * Validates tool output against the tool's output schema.\n     */\n    private async validateToolOutput(tool: RegisteredTool, result: CallToolResult | InputRequiredResult, toolName: string): Promise<void> {\n        if (!tool.outputSchema) {\n            return;\n        }\n\n        // An input-required result is not the tool's final output: structured\n        // content is only required (and validated) on the completing result.\n        if (isInputRequiredResult(result)) {\n            return;\n        }\n\n        if (result.isError) {\n            return;\n        }\n\n        // SEP-2106: `structuredContent` may legally be any JSON value including `null`, `0`,\n        // `false`, `\"\"`. The presence check is therefore `=== undefined` (not falsy); when present,\n        // the value is ALWAYS validated against the output schema — a falsy value against an\n        // object-typed schema fails validation, so this is not a guard weakening.\n        if (result.structuredContent === undefined) {\n            throw new ProtocolError(\n                ProtocolErrorCode.InvalidParams,\n                `Output validation error: Tool ${toolName} has an output schema but no structured content was provided`\n            );\n        }\n\n        // if the tool has an output schema, validate structured content\n        const parseResult = await validateStandardSchema(tool.outputSchema, result.structuredContent);\n        if (!parseResult.success) {\n            throw new ProtocolError(\n                ProtocolErrorCode.InvalidParams,\n                `Output validation error: Invalid structured content for tool ${toolName}: ${parseResult.error}`\n            );\n        }\n    }\n\n    /**\n     * Executes a tool handler.\n     */\n    private async executeToolHandler(\n        tool: RegisteredTool,\n        args: unknown,\n        ctx: ServerContext\n    ): Promise<CallToolResult | InputRequiredResult> {\n        // Executor encapsulates handler invocation with proper types\n        return tool.executor(args, ctx);\n    }\n\n    private _completionHandlerInitialized = false;\n\n    private setCompletionRequestHandler() {\n        if (this._completionHandlerInitialized) {\n            return;\n        }\n\n        this.server.assertCanSetRequestHandler('completion/complete');\n\n        this.server.registerCapabilities({\n            completions: {}\n        });\n\n        this.server.setRequestHandler('completion/complete', async (request): Promise<CompleteResult> => {\n            switch (request.params.ref.type) {\n                case 'ref/prompt': {\n                    assertCompleteRequestPrompt(request);\n                    return this.handlePromptCompletion(request, request.params.ref);\n                }\n\n                case 'ref/resource': {\n                    assertCompleteRequestResourceTemplate(request);\n                    return this.handleResourceCompletion(request, request.params.ref);\n                }\n\n                default: {\n                    throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Invalid completion reference: ${request.params.ref}`);\n                }\n            }\n        });\n\n        this._completionHandlerInitialized = true;\n    }\n\n    private async handlePromptCompletion(request: CompleteRequestPrompt, ref: PromptReference): Promise<CompleteResult> {\n        const prompt = this._registeredPrompts[ref.name];\n        if (!prompt) {\n            throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Prompt ${ref.name} not found`);\n        }\n\n        if (!prompt.enabled) {\n            throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Prompt ${ref.name} disabled`);\n        }\n\n        if (!prompt.argsSchema) {\n            return EMPTY_COMPLETION_RESULT;\n        }\n\n        const promptShape = getSchemaShape(prompt.argsSchema);\n        const field = unwrapOptionalSchema(promptShape?.[request.params.argument.name]);\n        if (!isCompletable(field)) {\n            return EMPTY_COMPLETION_RESULT;\n        }\n\n        const completer = getCompleter(field);\n        if (!completer) {\n            return EMPTY_COMPLETION_RESULT;\n        }\n\n        const suggestions = await completer(request.params.argument.value, request.params.context);\n        return createCompletionResult(suggestions);\n    }\n\n    private async handleResourceCompletion(\n        request: CompleteRequestResourceTemplate,\n        ref: ResourceTemplateReference\n    ): Promise<CompleteResult> {\n        const template = Object.values(this._registeredResourceTemplates).find(t => t.resourceTemplate.uriTemplate.toString() === ref.uri);\n\n        if (!template) {\n            if (this._registeredResources[ref.uri]) {\n                // Attempting to autocomplete a fixed resource URI is not an error in the spec (but probably should be).\n                return EMPTY_COMPLETION_RESULT;\n            }\n\n            throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Resource template ${request.params.ref.uri} not found`);\n        }\n\n        const completer = template.resourceTemplate.completeCallback(request.params.argument.name);\n        if (!completer) {\n            return EMPTY_COMPLETION_RESULT;\n        }\n\n        const suggestions = await completer(request.params.argument.value, request.params.context);\n        return createCompletionResult(suggestions);\n    }\n\n    private _resourceHandlersInitialized = false;\n\n    private setResourceRequestHandlers() {\n        if (this._resourceHandlersInitialized) {\n            return;\n        }\n\n        this.server.assertCanSetRequestHandler('resources/list');\n        this.server.assertCanSetRequestHandler('resources/templates/list');\n        this.server.assertCanSetRequestHandler('resources/read');\n\n        this.server.registerCapabilities({\n            resources: {\n                listChanged: this.server.getCapabilities().resources?.listChanged ?? true\n            }\n        });\n\n        this.server.setRequestHandler('resources/list', async (_request, ctx) => {\n            const resources = Object.entries(this._registeredResources)\n                .filter(([_, resource]) => resource.enabled)\n                .map(([uri, resource]) => ({\n                    uri,\n                    name: resource.name,\n                    ...resource.metadata\n                }));\n\n            const templateResources: Resource[] = [];\n            for (const template of Object.values(this._registeredResourceTemplates)) {\n                if (!template.resourceTemplate.listCallback) {\n                    continue;\n                }\n\n                const result = await template.resourceTemplate.listCallback(ctx);\n                for (const resource of result.resources) {\n                    templateResources.push({\n                        ...template.metadata,\n                        // the defined resource metadata should override the template metadata if present\n                        ...resource\n                    });\n                }\n            }\n\n            return { resources: [...resources, ...templateResources] };\n        });\n\n        this.server.setRequestHandler('resources/templates/list', async () => {\n            const resourceTemplates = Object.entries(this._registeredResourceTemplates).map(([name, template]) => ({\n                name,\n                uriTemplate: template.resourceTemplate.uriTemplate.toString(),\n                ...template.metadata\n            }));\n\n            return { resourceTemplates };\n        });\n\n        this.server.setRequestHandler('resources/read', async (request, ctx) => {\n            let uri: URL;\n            try {\n                uri = new URL(request.params.uri);\n            } catch {\n                throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Resource URI ${request.params.uri} is invalid`, {\n                    uri: request.params.uri,\n                    reason: 'invalid_uri'\n                });\n            }\n\n            // First check for exact resource match\n            const resource = this._registeredResources[uri.toString()];\n            if (resource) {\n                if (!resource.enabled) {\n                    throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Resource ${uri} disabled`);\n                }\n                // A per-resource cache hint is the most specific configured\n                // author for this result's 2026-07-28 cache fields; it rides a\n                // never-serialized carrier and is resolved at the encode seam.\n                return attachCacheHintFallback(await resource.readCallback(uri, ctx), resource.cacheHint);\n            }\n\n            // Then check templates\n            for (const template of Object.values(this._registeredResourceTemplates)) {\n                const variables = template.resourceTemplate.uriTemplate.match(uri.toString());\n                if (variables) {\n                    if (!template.enabled) {\n                        throw new ProtocolError(\n                            ProtocolErrorCode.InvalidParams,\n                            `Resource template ${template.resourceTemplate.uriTemplate} disabled`\n                        );\n                    }\n                    return attachCacheHintFallback(await template.readCallback(uri, variables, ctx), template.cacheHint);\n                }\n            }\n\n            // Domain layer throws one neutral resource-not-found error; the\n            // era-aware encode seam (WireCodec.encodeErrorCode) selects the\n            // wire code (−32602 on every era).\n            throw new ResourceNotFoundError(request.params.uri);\n        });\n\n        this._resourceHandlersInitialized = true;\n    }\n\n    private _promptHandlersInitialized = false;\n\n    private setPromptRequestHandlers() {\n        if (this._promptHandlersInitialized) {\n            return;\n        }\n\n        this.server.assertCanSetRequestHandler('prompts/list');\n        this.server.assertCanSetRequestHandler('prompts/get');\n\n        this.server.registerCapabilities({\n            prompts: {\n                listChanged: this.server.getCapabilities().prompts?.listChanged ?? true\n            }\n        });\n\n        this.server.setRequestHandler(\n            'prompts/list',\n            (): ListPromptsResult => ({\n                prompts: Object.entries(this._registeredPrompts)\n                    .filter(([, prompt]) => prompt.enabled)\n                    .map(([name, prompt]): Prompt => {\n                        return {\n                            name,\n                            title: prompt.title,\n                            description: prompt.description,\n                            arguments: prompt.argsSchema ? promptArgumentsFromStandardSchema(prompt.argsSchema) : undefined,\n                            icons: prompt.icons,\n                            _meta: prompt._meta\n                        };\n                    })\n            })\n        );\n\n        this.server.setRequestHandler('prompts/get', async (request, ctx): Promise<GetPromptResult | InputRequiredResult> => {\n            const prompt = this._registeredPrompts[request.params.name];\n            if (!prompt) {\n                throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Prompt ${request.params.name} not found`);\n            }\n\n            if (!prompt.enabled) {\n                throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Prompt ${request.params.name} disabled`);\n            }\n\n            // Handler encapsulates parsing and callback invocation with proper types\n            return prompt.handler(request.params.arguments, ctx);\n        });\n\n        this._promptHandlersInitialized = true;\n    }\n\n    /**\n     * Registers a resource with a config object and callback.\n     * For static resources, use a URI string. For dynamic resources, use a {@linkcode ResourceTemplate}.\n     *\n     * @example\n     * ```ts source=\"./mcp.examples.ts#McpServer_registerResource_static\"\n     * server.registerResource(\n     *     'config',\n     *     'config://app',\n     *     {\n     *         title: 'Application Config',\n     *         mimeType: 'text/plain'\n     *     },\n     *     async uri => ({\n     *         contents: [{ uri: uri.href, text: 'App configuration here' }]\n     *     })\n     * );\n     * ```\n     */\n    registerResource(\n        name: string,\n        uriOrTemplate: string,\n        config: ResourceMetadata & { cacheHint?: CacheHint; scopeChallenge?: ScopeChallengeHandler },\n        readCallback: ReadResourceCallback\n    ): RegisteredResource;\n    registerResource(\n        name: string,\n        uriOrTemplate: ResourceTemplate,\n        config: ResourceMetadata & { cacheHint?: CacheHint; scopeChallenge?: ScopeChallengeHandler },\n        readCallback: ReadResourceTemplateCallback\n    ): RegisteredResourceTemplate;\n    registerResource(\n        name: string,\n        uriOrTemplate: string | ResourceTemplate,\n        config: ResourceMetadata & { cacheHint?: CacheHint; scopeChallenge?: ScopeChallengeHandler },\n        readCallback: ReadResourceCallback | ReadResourceTemplateCallback\n    ): RegisteredResource | RegisteredResourceTemplate {\n        // These options configure request handling and are not advertised as\n        // resource metadata by `resources/list`.\n        const { cacheHint, scopeChallenge, ...resourceMetadata } = config;\n        const metadata: ResourceMetadata = resourceMetadata;\n        if (cacheHint !== undefined) {\n            assertValidCacheHint(cacheHint, `resource ${name}`);\n        }\n\n        if (typeof uriOrTemplate === 'string') {\n            if (this._registeredResources[uriOrTemplate]) {\n                throw new Error(`Resource ${uriOrTemplate} is already registered`);\n            }\n\n            const registeredResource = this._createRegisteredResource(\n                name,\n                (config as BaseMetadata).title,\n                uriOrTemplate,\n                metadata,\n                scopeChallenge,\n                readCallback as ReadResourceCallback\n            );\n            if (cacheHint !== undefined) {\n                registeredResource.cacheHint = cacheHint;\n            }\n\n            this.setResourceRequestHandlers();\n            this.sendResourceListChanged();\n            return registeredResource;\n        } else {\n            if (this._registeredResourceTemplates[name]) {\n                throw new Error(`Resource template ${name} is already registered`);\n            }\n\n            const registeredResourceTemplate = this._createRegisteredResourceTemplate(\n                name,\n                (config as BaseMetadata).title,\n                uriOrTemplate,\n                metadata,\n                scopeChallenge,\n                readCallback as ReadResourceTemplateCallback\n            );\n            if (cacheHint !== undefined) {\n                registeredResourceTemplate.cacheHint = cacheHint;\n            }\n\n            this.setResourceRequestHandlers();\n            this.sendResourceListChanged();\n            return registeredResourceTemplate;\n        }\n    }\n\n    private _createRegisteredResource(\n        name: string,\n        title: string | undefined,\n        uri: string,\n        metadata: ResourceMetadata | undefined,\n        scopeChallenge: ScopeChallengeHandler | undefined,\n        readCallback: ReadResourceCallback\n    ): RegisteredResource {\n        const registeredResource: RegisteredResource = {\n            name,\n            title,\n            metadata,\n            readCallback,\n            scopeChallenge,\n            enabled: true,\n            disable: () => registeredResource.update({ enabled: false }),\n            enable: () => registeredResource.update({ enabled: true }),\n            remove: () => registeredResource.update({ uri: null }),\n            update: updates => {\n                if (updates.uri !== undefined && updates.uri !== uri) {\n                    delete this._registeredResources[uri];\n                    if (updates.uri) this._registeredResources[updates.uri] = registeredResource;\n                }\n                if (updates.name !== undefined) registeredResource.name = updates.name;\n                if (updates.title !== undefined) registeredResource.title = updates.title;\n                if (updates.metadata !== undefined) registeredResource.metadata = updates.metadata;\n                if (updates.callback !== undefined) registeredResource.readCallback = updates.callback;\n                if (updates.scopeChallenge !== undefined) {\n                    registeredResource.scopeChallenge = updates.scopeChallenge === null ? undefined : updates.scopeChallenge;\n                }\n                if (updates.enabled !== undefined) registeredResource.enabled = updates.enabled;\n                this.sendResourceListChanged();\n            }\n        };\n        this._registeredResources[uri] = registeredResource;\n        return registeredResource;\n    }\n\n    private _createRegisteredResourceTemplate(\n        name: string,\n        title: string | undefined,\n        template: ResourceTemplate,\n        metadata: ResourceMetadata | undefined,\n        scopeChallenge: ScopeChallengeHandler | undefined,\n        readCallback: ReadResourceTemplateCallback\n    ): RegisteredResourceTemplate {\n        const registeredResourceTemplate: RegisteredResourceTemplate = {\n            resourceTemplate: template,\n            title,\n            metadata,\n            readCallback,\n            scopeChallenge,\n            enabled: true,\n            disable: () => registeredResourceTemplate.update({ enabled: false }),\n            enable: () => registeredResourceTemplate.update({ enabled: true }),\n            remove: () => registeredResourceTemplate.update({ name: null }),\n            update: updates => {\n                if (updates.name !== undefined && updates.name !== name) {\n                    delete this._registeredResourceTemplates[name];\n                    if (updates.name) this._registeredResourceTemplates[updates.name] = registeredResourceTemplate;\n                }\n                if (updates.title !== undefined) registeredResourceTemplate.title = updates.title;\n                if (updates.template !== undefined) registeredResourceTemplate.resourceTemplate = updates.template;\n                if (updates.metadata !== undefined) registeredResourceTemplate.metadata = updates.metadata;\n                if (updates.callback !== undefined) registeredResourceTemplate.readCallback = updates.callback;\n                if (updates.scopeChallenge !== undefined) {\n                    registeredResourceTemplate.scopeChallenge = updates.scopeChallenge === null ? undefined : updates.scopeChallenge;\n                }\n                if (updates.enabled !== undefined) registeredResourceTemplate.enabled = updates.enabled;\n                this.sendResourceListChanged();\n            }\n        };\n        this._registeredResourceTemplates[name] = registeredResourceTemplate;\n\n        // If the resource template has any completion callbacks, enable completions capability\n        const variableNames = template.uriTemplate.variableNames;\n        const hasCompleter = Array.isArray(variableNames) && variableNames.some(v => !!template.completeCallback(v));\n        if (hasCompleter) {\n            this.setCompletionRequestHandler();\n        }\n\n        return registeredResourceTemplate;\n    }\n\n    private _createRegisteredPrompt(\n        name: string,\n        title: string | undefined,\n        description: string | undefined,\n        argsSchema: StandardSchemaWithJSON | undefined,\n        callback: PromptCallback<StandardSchemaWithJSON | undefined>,\n        icons: Icon[] | undefined,\n        scopeChallenge: ScopeChallengeHandler | undefined,\n        _meta: Record<string, unknown> | undefined\n    ): RegisteredPrompt {\n        // Track current schema and callback for handler regeneration\n        let currentArgsSchema = argsSchema;\n        let currentCallback = callback;\n\n        const registeredPrompt: RegisteredPrompt = {\n            title,\n            description,\n            argsSchema,\n            icons,\n            scopeChallenge,\n            _meta,\n            handler: createPromptHandler(name, argsSchema, callback),\n            enabled: true,\n            disable: () => registeredPrompt.update({ enabled: false }),\n            enable: () => registeredPrompt.update({ enabled: true }),\n            remove: () => registeredPrompt.update({ name: null }),\n            update: updates => {\n                if (updates.name !== undefined && updates.name !== name) {\n                    delete this._registeredPrompts[name];\n                    if (updates.name) this._registeredPrompts[updates.name] = registeredPrompt;\n                }\n                if (updates.title !== undefined) registeredPrompt.title = updates.title;\n                if (updates.description !== undefined) registeredPrompt.description = updates.description;\n                if (updates.icons !== undefined) registeredPrompt.icons = updates.icons;\n                if (updates.scopeChallenge !== undefined) {\n                    registeredPrompt.scopeChallenge = updates.scopeChallenge === null ? undefined : updates.scopeChallenge;\n                }\n                if (updates._meta !== undefined) registeredPrompt._meta = updates._meta;\n\n                // Track if we need to regenerate the handler\n                let needsHandlerRegen = false;\n                if (updates.argsSchema !== undefined) {\n                    registeredPrompt.argsSchema = updates.argsSchema;\n                    currentArgsSchema = updates.argsSchema;\n                    needsHandlerRegen = true;\n                }\n                if (updates.callback !== undefined) {\n                    currentCallback = updates.callback as PromptCallback<StandardSchemaWithJSON | undefined>;\n                    needsHandlerRegen = true;\n                }\n                if (needsHandlerRegen) {\n                    registeredPrompt.handler = createPromptHandler(name, currentArgsSchema, currentCallback);\n                }\n\n                if (updates.enabled !== undefined) registeredPrompt.enabled = updates.enabled;\n                this.sendPromptListChanged();\n            }\n        };\n        this._registeredPrompts[name] = registeredPrompt;\n\n        // If any argument uses a Completable schema, enable completions capability\n        if (argsSchema) {\n            const shape = getSchemaShape(argsSchema);\n            if (shape) {\n                const hasCompletable = Object.values(shape).some(field => {\n                    const inner = unwrapOptionalSchema(field);\n                    return isCompletable(inner);\n                });\n                if (hasCompletable) {\n                    this.setCompletionRequestHandler();\n                }\n            }\n        }\n\n        return registeredPrompt;\n    }\n\n    private _createRegisteredTool(\n        name: string,\n        title: string | undefined,\n        description: string | undefined,\n        inputSchema: StandardSchemaWithJSON | undefined,\n        outputSchema: StandardSchemaWithJSON | undefined,\n        annotations: ToolAnnotations | undefined,\n        icons: Icon[] | undefined,\n        execution: ToolExecution | undefined,\n        scopeChallenge: ScopeChallengeHandler | undefined,\n        _meta: Record<string, unknown> | undefined,\n        handler: AnyToolHandler<StandardSchemaWithJSON | undefined>\n    ): RegisteredTool {\n        // Validate tool name according to SEP specification\n        validateAndWarnToolName(name);\n\n        // Track current handler for executor regeneration\n        let currentHandler = handler;\n\n        let outputSchemaJson: Record<string, unknown> | undefined;\n        const registeredTool: RegisteredTool = {\n            title,\n            description,\n            inputSchema,\n            outputSchema,\n            get outputSchemaJson() {\n                return (outputSchemaJson ??= convertOutputSchemaJson(registeredTool.outputSchema));\n            },\n            set outputSchemaJson(value) {\n                outputSchemaJson = value;\n            },\n            annotations,\n            icons,\n            execution,\n            scopeChallenge,\n            _meta,\n            handler: handler,\n            executor: createToolExecutor(inputSchema, handler),\n            enabled: true,\n            disable: () => registeredTool.update({ enabled: false }),\n            enable: () => registeredTool.update({ enabled: true }),\n            remove: () => registeredTool.update({ name: null }),\n            update: updates => {\n                // The closure's `name` tracks the CURRENT registry key, not\n                // the original registration name — renaming reassigns it so\n                // subsequent paramsSchema/rename invalidations evict the live\n                // `_toolInputSchemaJson` slot rather than the original.\n                if (updates.name !== undefined && updates.name !== name) {\n                    if (typeof updates.name === 'string') {\n                        validateAndWarnToolName(updates.name);\n                    }\n                    delete this._registeredTools[name];\n                    delete this._toolInputSchemaJson[name];\n                    if (updates.name) {\n                        // The TARGET key may already be occupied by another\n                        // tool (rename has no duplicate-name guard) — drop\n                        // its memo too, otherwise `toolInputSchemaJson()`\n                        // returns the displaced tool's converted schema and\n                        // the SEP-2243 pre-dispatch validation runs against\n                        // the wrong schema for this name.\n                        delete this._toolInputSchemaJson[updates.name];\n                        this._registeredTools[updates.name] = registeredTool;\n                        name = updates.name;\n                    }\n                }\n                if (updates.title !== undefined) registeredTool.title = updates.title;\n                if (updates.description !== undefined) registeredTool.description = updates.description;\n\n                // Track if we need to regenerate the executor\n                let needsExecutorRegen = false;\n                if (updates.paramsSchema !== undefined) {\n                    registeredTool.inputSchema = updates.paramsSchema;\n                    delete this._toolInputSchemaJson[name];\n                    needsExecutorRegen = true;\n                }\n                if (updates.callback !== undefined) {\n                    registeredTool.handler = updates.callback;\n                    currentHandler = updates.callback as AnyToolHandler<StandardSchemaWithJSON | undefined>;\n                    needsExecutorRegen = true;\n                }\n                if (needsExecutorRegen) {\n                    registeredTool.executor = createToolExecutor(registeredTool.inputSchema, currentHandler);\n                }\n\n                if (updates.outputSchema !== undefined) {\n                    registeredTool.outputSchema = updates.outputSchema;\n                    registeredTool.outputSchemaJson = convertOutputSchemaJson(updates.outputSchema);\n                }\n                if (updates.annotations !== undefined) registeredTool.annotations = updates.annotations;\n                if (updates.icons !== undefined) registeredTool.icons = updates.icons;\n                if (updates.scopeChallenge !== undefined) {\n                    registeredTool.scopeChallenge = updates.scopeChallenge === null ? undefined : updates.scopeChallenge;\n                }\n                if (updates._meta !== undefined) registeredTool._meta = updates._meta;\n                if (updates.enabled !== undefined) registeredTool.enabled = updates.enabled;\n                this.sendToolListChanged();\n            }\n        };\n        this._registeredTools[name] = registeredTool;\n\n        this.setToolRequestHandlers();\n        this.sendToolListChanged();\n\n        return registeredTool;\n    }\n\n    /**\n     * Registers a tool with a config object and callback.\n     *\n     * @example\n     * ```ts source=\"./mcp.examples.ts#McpServer_registerTool_basic\"\n     * server.registerTool(\n     *     'calculate-bmi',\n     *     {\n     *         title: 'BMI Calculator',\n     *         description: 'Calculate Body Mass Index',\n     *         inputSchema: z.object({\n     *             weightKg: z.number(),\n     *             heightM: z.number()\n     *         }),\n     *         outputSchema: z.object({ bmi: z.number() })\n     *     },\n     *     async ({ weightKg, heightM }) => {\n     *         const output = { bmi: weightKg / (heightM * heightM) };\n     *         return {\n     *             content: [{ type: 'text', text: JSON.stringify(output) }],\n     *             structuredContent: output\n     *         };\n     *     }\n     * );\n     * ```\n     */\n    registerTool<OutputArgs extends StandardSchemaWithJSON, InputArgs extends StandardSchemaWithJSON | undefined = undefined>(\n        name: string,\n        config: {\n            title?: string;\n            description?: string;\n            inputSchema?: InputArgs;\n            outputSchema?: OutputArgs;\n            annotations?: ToolAnnotations;\n            icons?: Icon[];\n            /** Determines whether this tool call needs an OAuth scope challenge. */\n            scopeChallenge?: ScopeChallengeHandler;\n            _meta?: Record<string, unknown>;\n        },\n        cb: ToolCallback<InputArgs>\n    ): RegisteredTool;\n    /** @deprecated Wrap with `z.object({...})` instead. Raw-shape form: `inputSchema`/`outputSchema` may be a plain `{ field: z.string() }` record; it is auto-wrapped with `z.object()`. */\n    registerTool<InputArgs extends ZodRawShape, OutputArgs extends ZodRawShape | StandardSchemaWithJSON | undefined = undefined>(\n        name: string,\n        config: {\n            title?: string;\n            description?: string;\n            inputSchema?: InputArgs;\n            outputSchema?: OutputArgs;\n            annotations?: ToolAnnotations;\n            icons?: Icon[];\n            scopeChallenge?: ScopeChallengeHandler;\n            _meta?: Record<string, unknown>;\n        },\n        cb: LegacyToolCallback<InputArgs>\n    ): RegisteredTool;\n    registerTool(\n        name: string,\n        config: {\n            title?: string;\n            description?: string;\n            inputSchema?: StandardSchemaWithJSON | ZodRawShape;\n            outputSchema?: StandardSchemaWithJSON | ZodRawShape;\n            annotations?: ToolAnnotations;\n            icons?: Icon[];\n            scopeChallenge?: ScopeChallengeHandler;\n            _meta?: Record<string, unknown>;\n        },\n        cb: ToolCallback<StandardSchemaWithJSON | undefined> | LegacyToolCallback<ZodRawShape>\n    ): RegisteredTool {\n        if (this._registeredTools[name]) {\n            throw new Error(`Tool ${name} is already registered`);\n        }\n\n        const { title, description, inputSchema, outputSchema, annotations, icons, scopeChallenge, _meta } = config;\n        return this._createRegisteredTool(\n            name,\n            title,\n            description,\n            normalizeRawShapeSchema(inputSchema),\n            normalizeRawShapeSchema(outputSchema),\n            annotations,\n            icons,\n            undefined,\n            scopeChallenge,\n            _meta,\n            cb as ToolCallback<StandardSchemaWithJSON | undefined>\n        );\n    }\n\n    /**\n     * Registers a prompt with a config object and callback.\n     *\n     * @example\n     * ```ts source=\"./mcp.examples.ts#McpServer_registerPrompt_basic\"\n     * server.registerPrompt(\n     *     'review-code',\n     *     {\n     *         title: 'Code Review',\n     *         description: 'Review code for best practices',\n     *         argsSchema: z.object({ code: z.string() })\n     *     },\n     *     ({ code }) => ({\n     *         messages: [\n     *             {\n     *                 role: 'user' as const,\n     *                 content: {\n     *                     type: 'text' as const,\n     *                     text: `Please review this code:\\n\\n${code}`\n     *                 }\n     *             }\n     *         ]\n     *     })\n     * );\n     * ```\n     */\n    registerPrompt(\n        name: string,\n        config: {\n            title?: string;\n            description?: string;\n            argsSchema?: undefined;\n            icons?: Icon[];\n            /** Determines whether this prompt retrieval needs an OAuth scope challenge. */\n            scopeChallenge?: ScopeChallengeHandler;\n            _meta?: Record<string, unknown>;\n        },\n        cb: PromptCallback\n    ): RegisteredPrompt;\n    registerPrompt<Args extends StandardSchemaWithJSON>(\n        name: string,\n        config: {\n            title?: string;\n            description?: string;\n            argsSchema?: Args;\n            icons?: Icon[];\n            /** Determines whether this prompt retrieval needs an OAuth scope challenge. */\n            scopeChallenge?: ScopeChallengeHandler;\n            _meta?: Record<string, unknown>;\n        },\n        cb: PromptCallback<Args>\n    ): RegisteredPrompt;\n    /** @deprecated Wrap with `z.object({...})` instead. Raw-shape form: `argsSchema` may be a plain `{ field: z.string() }` record; it is auto-wrapped with `z.object()`. */\n    registerPrompt<Args extends ZodRawShape>(\n        name: string,\n        config: {\n            title?: string;\n            description?: string;\n            argsSchema?: Args;\n            icons?: Icon[];\n            scopeChallenge?: ScopeChallengeHandler;\n            _meta?: Record<string, unknown>;\n        },\n        cb: LegacyPromptCallback<Args>\n    ): RegisteredPrompt;\n    registerPrompt(\n        name: string,\n        config: {\n            title?: string;\n            description?: string;\n            argsSchema?: StandardSchemaWithJSON | ZodRawShape;\n            icons?: Icon[];\n            scopeChallenge?: ScopeChallengeHandler;\n            _meta?: Record<string, unknown>;\n        },\n        cb: PromptCallback | PromptCallback<StandardSchemaWithJSON> | LegacyPromptCallback<ZodRawShape>\n    ): RegisteredPrompt {\n        if (this._registeredPrompts[name]) {\n            throw new Error(`Prompt ${name} is already registered`);\n        }\n\n        const { title, description, argsSchema, icons, scopeChallenge, _meta } = config;\n\n        const registeredPrompt = this._createRegisteredPrompt(\n            name,\n            title,\n            description,\n            normalizeRawShapeSchema(argsSchema),\n            cb as PromptCallback<StandardSchemaWithJSON | undefined>,\n            icons,\n            scopeChallenge,\n            _meta\n        );\n\n        this.setPromptRequestHandlers();\n        this.sendPromptListChanged();\n\n        return registeredPrompt;\n    }\n\n    /**\n     * Checks if the server is connected to a transport.\n     * @returns `true` if the server is connected\n     */\n    isConnected() {\n        return this.server.transport !== undefined;\n    }\n\n    /**\n     * Sends a logging message to the client, if connected.\n     * Note: You only need to send the parameters object, not the entire JSON-RPC message.\n     * @see {@linkcode LoggingMessageNotification}\n     * @param params\n     * @param sessionId Optional for stateless transports and backward compatibility.\n     *\n     * @example\n     * ```ts source=\"./mcp.examples.ts#McpServer_sendLoggingMessage_basic\"\n     * await server.sendLoggingMessage({\n     *     level: 'info',\n     *     data: 'Processing complete'\n     * });\n     * ```\n     *\n     * @deprecated Deprecated as of protocol version 2026-07-28 (SEP-2577).\n     * Remains functional during the deprecation window (at least twelve months).\n     * Migrate to stderr logging (STDIO servers) or OpenTelemetry.\n     */\n    async sendLoggingMessage(params: LoggingMessageNotification['params'], sessionId?: string) {\n        return this.server.sendLoggingMessage(params, sessionId);\n    }\n    /**\n     * Sends a resource list changed event to the client, if connected.\n     */\n    sendResourceListChanged() {\n        if (this.isConnected()) {\n            this.server.sendResourceListChanged();\n        }\n    }\n\n    /**\n     * Sends a tool list changed event to the client, if connected.\n     */\n    sendToolListChanged() {\n        if (this.isConnected()) {\n            this.server.sendToolListChanged();\n        }\n    }\n\n    /**\n     * Sends a prompt list changed event to the client, if connected.\n     */\n    sendPromptListChanged() {\n        if (this.isConnected()) {\n            this.server.sendPromptListChanged();\n        }\n    }\n}\n\n/**\n * A callback to complete one variable within a resource template's URI template.\n */\nexport type CompleteResourceTemplateCallback = (\n    value: string,\n    context?: {\n        arguments?: Record<string, string>;\n    }\n) => string[] | Promise<string[]>;\n\n/**\n * A resource template combines a URI pattern with optional functionality to enumerate\n * all resources matching that pattern.\n */\nexport class ResourceTemplate {\n    private _uriTemplate: UriTemplate;\n\n    constructor(\n        uriTemplate: string | UriTemplate,\n        private _callbacks: {\n            /**\n             * A callback to list all resources matching this template. This is required to be specified, even if `undefined`, to avoid accidentally forgetting resource listing.\n             */\n            list: ListResourcesCallback | undefined;\n\n            /**\n             * An optional callback to autocomplete variables within the URI template. Useful for clients and users to discover possible values.\n             */\n            complete?: {\n                [variable: string]: CompleteResourceTemplateCallback;\n            };\n        }\n    ) {\n        this._uriTemplate = typeof uriTemplate === 'string' ? new UriTemplate(uriTemplate) : uriTemplate;\n    }\n\n    /**\n     * Gets the URI template pattern.\n     */\n    get uriTemplate(): UriTemplate {\n        return this._uriTemplate;\n    }\n\n    /**\n     * Gets the list callback, if one was provided.\n     */\n    get listCallback(): ListResourcesCallback | undefined {\n        return this._callbacks.list;\n    }\n\n    /**\n     * Gets the callback for completing a specific URI template variable, if one was provided.\n     */\n    completeCallback(variable: string): CompleteResourceTemplateCallback | undefined {\n        return this._callbacks.complete?.[variable];\n    }\n}\n\n/**\n * A plain record of Zod field schemas, e.g. `{ name: z.string() }`. Accepted by\n * `registerTool`/`registerPrompt` as a shorthand; auto-wrapped with `z.object()`.\n * Zod schemas only — `z.object()` cannot wrap other Standard Schema libraries.\n */\nexport type ZodRawShape = Record<string, z.ZodType>;\n\n/** Infers the parsed-output type of a {@linkcode ZodRawShape}. */\nexport type InferRawShape<S extends ZodRawShape> = z.infer<z.ZodObject<S>>;\n\n/** {@linkcode ToolCallback} variant used when `inputSchema` is a {@linkcode ZodRawShape}. */\nexport type LegacyToolCallback<Args extends ZodRawShape | undefined> = Args extends ZodRawShape\n    ? (\n          args: InferRawShape<Args>,\n          ctx: ServerContext\n      ) => CallToolResult | InputRequiredResult | Promise<CallToolResult | InputRequiredResult>\n    : (ctx: ServerContext) => CallToolResult | InputRequiredResult | Promise<CallToolResult | InputRequiredResult>;\n\n/** {@linkcode PromptCallback} variant used when `argsSchema` is a {@linkcode ZodRawShape}. */\nexport type LegacyPromptCallback<Args extends ZodRawShape | undefined> = Args extends ZodRawShape\n    ? (\n          args: InferRawShape<Args>,\n          ctx: ServerContext\n      ) => GetPromptResult | InputRequiredResult | Promise<GetPromptResult | InputRequiredResult>\n    : (ctx: ServerContext) => GetPromptResult | InputRequiredResult | Promise<GetPromptResult | InputRequiredResult>;\n\nexport type BaseToolCallback<\n    SendResultT extends Result,\n    Ctx extends ServerContext,\n    Args extends StandardSchemaWithJSON | undefined\n> = Args extends StandardSchemaWithJSON\n    ? (args: StandardSchemaWithJSON.InferOutput<Args>, ctx: Ctx) => SendResultT | Promise<SendResultT>\n    : (ctx: Ctx) => SendResultT | Promise<SendResultT>;\n\n/**\n * Callback for a tool handler registered with {@linkcode McpServer.registerTool}.\n */\nexport type ToolCallback<Args extends StandardSchemaWithJSON | undefined = undefined> = BaseToolCallback<\n    CallToolResult | InputRequiredResult,\n    ServerContext,\n    Args\n>;\n\n/**\n * Tool handler callback type.\n */\nexport type AnyToolHandler<Args extends StandardSchemaWithJSON | undefined = undefined> = ToolCallback<Args>;\n\n/**\n * Internal executor type that encapsulates handler invocation with proper types.\n */\ntype ToolExecutor = (args: unknown, ctx: ServerContext) => Promise<CallToolResult | InputRequiredResult>;\n\nexport type RegisteredTool = {\n    title?: string;\n    description?: string;\n    inputSchema?: StandardSchemaWithJSON;\n    outputSchema?: StandardSchemaWithJSON;\n    /**\n     * @hidden\n     * The converted JSON Schema of `outputSchema`, memoised on first use (and on\n     * `update({outputSchema})`) so the `tools/call` handler passes the SAME advertised schema\n     * `tools/list` emits to the wire codec's `projectCallToolResult` — the SEP-2106 `{result:…}`\n     * wrap predicate follows the schema's root, never the runtime value shape. `undefined` when\n     * no `outputSchema` is registered or its conversion threw (see {@link convertOutputSchemaJson}).\n     */\n    outputSchemaJson?: Record<string, unknown>;\n    annotations?: ToolAnnotations;\n    icons?: Icon[];\n    execution?: ToolExecution;\n    scopeChallenge?: ScopeChallengeHandler;\n    _meta?: Record<string, unknown>;\n    handler: AnyToolHandler<StandardSchemaWithJSON | undefined>;\n    /** @hidden */\n    executor: ToolExecutor;\n    enabled: boolean;\n    enable(): void;\n    disable(): void;\n    update(updates: {\n        name?: string | null;\n        title?: string;\n        description?: string;\n        paramsSchema?: StandardSchemaWithJSON;\n        outputSchema?: StandardSchemaWithJSON;\n        annotations?: ToolAnnotations;\n        icons?: Icon[];\n        scopeChallenge?: ScopeChallengeHandler | null;\n        _meta?: Record<string, unknown>;\n        callback?: ToolCallback<StandardSchemaWithJSON>;\n        enabled?: boolean;\n    }): void;\n    remove(): void;\n};\n\n/**\n * Creates an executor that invokes the handler with the appropriate arguments.\n * When `inputSchema` is defined, the handler is called with `(args, ctx)`.\n * When `inputSchema` is undefined, the handler is called with just `(ctx)`.\n */\nfunction createToolExecutor(\n    inputSchema: StandardSchemaWithJSON | undefined,\n    handler: AnyToolHandler<StandardSchemaWithJSON | undefined>\n): ToolExecutor {\n    if (inputSchema) {\n        const callback = handler as ToolCallbackInternal;\n        return async (args, ctx) => callback(args, ctx);\n    }\n\n    // When no inputSchema, call with just ctx (the handler expects (ctx) signature)\n    const callback = handler as (\n        ctx: ServerContext\n    ) => CallToolResult | InputRequiredResult | Promise<CallToolResult | InputRequiredResult>;\n    return async (_args, ctx) => callback(ctx);\n}\n\nconst EMPTY_OBJECT_JSON_SCHEMA = {\n    type: 'object' as const,\n    properties: {}\n};\n\n/** Converts a tool's `inputSchema` for `tools/list` and warns on an invalid SEP-2243 `x-mcp-header` declaration. */\nfunction convertListedInputSchema(name: string, inputSchema: StandardSchemaWithJSON): Record<string, unknown> {\n    const json = standardSchemaToJsonSchema(inputSchema, 'input');\n    const scan = scanXMcpHeaderDeclarations(json);\n    if (!scan.valid) {\n        console.warn(\n            `[mcp-sdk] tool '${name}' carries an invalid x-mcp-header declaration and will be excluded by ` +\n                `conforming Streamable HTTP clients: ${scan.reason}`\n        );\n    }\n    return json;\n}\n\n/**\n * Convert a registered `outputSchema` to JSON Schema, memoised on {@link RegisteredTool.outputSchemaJson}\n * so `tools/call` passes the SAME advertised schema to the wire codec's `projectCallToolResult` that\n * `tools/list` emits (and that the 2025 codec's `encodeResult('tools/list', …)` may wrap). A conversion\n * failure yields `undefined` so the failure surfaces where it always has (`tools/list`).\n */\nfunction convertOutputSchemaJson(outputSchema: StandardSchemaWithJSON | undefined): Record<string, unknown> | undefined {\n    if (outputSchema === undefined) return undefined;\n    try {\n        return standardSchemaToJsonSchema(outputSchema, 'output');\n    } catch {\n        return undefined;\n    }\n}\n\n/**\n * Additional, optional information for annotating a resource.\n */\nexport type ResourceMetadata = Omit<Resource, 'uri' | 'name'>;\n\n/**\n * Callback to list all resources matching a given template.\n */\nexport type ListResourcesCallback = (ctx: ServerContext) => ListResourcesResult | Promise<ListResourcesResult>;\n\n/**\n * Callback to read a resource at a given URI.\n */\nexport type ReadResourceCallback = (\n    uri: URL,\n    ctx: ServerContext\n) => ReadResourceResult | InputRequiredResult | Promise<ReadResourceResult | InputRequiredResult>;\n\nexport type RegisteredResource = {\n    name: string;\n    title?: string;\n    metadata?: ResourceMetadata;\n    /** Cache hint applied to this resource's `resources/read` results on the 2026-07-28 revision. */\n    cacheHint?: CacheHint;\n    scopeChallenge?: ScopeChallengeHandler;\n    readCallback: ReadResourceCallback;\n    enabled: boolean;\n    enable(): void;\n    disable(): void;\n    update(updates: {\n        name?: string;\n        title?: string;\n        uri?: string | null;\n        metadata?: ResourceMetadata;\n        scopeChallenge?: ScopeChallengeHandler | null;\n        callback?: ReadResourceCallback;\n        enabled?: boolean;\n    }): void;\n    remove(): void;\n};\n\n/**\n * Callback to read a resource at a given URI, following a filled-in URI template.\n */\nexport type ReadResourceTemplateCallback = (\n    uri: URL,\n    variables: Variables,\n    ctx: ServerContext\n) => ReadResourceResult | InputRequiredResult | Promise<ReadResourceResult | InputRequiredResult>;\n\nexport type RegisteredResourceTemplate = {\n    resourceTemplate: ResourceTemplate;\n    title?: string;\n    metadata?: ResourceMetadata;\n    /** Cache hint applied to this template's `resources/read` results on the 2026-07-28 revision. */\n    cacheHint?: CacheHint;\n    scopeChallenge?: ScopeChallengeHandler;\n    readCallback: ReadResourceTemplateCallback;\n    enabled: boolean;\n    enable(): void;\n    disable(): void;\n    update(updates: {\n        name?: string | null;\n        title?: string;\n        template?: ResourceTemplate;\n        metadata?: ResourceMetadata;\n        scopeChallenge?: ScopeChallengeHandler | null;\n        callback?: ReadResourceTemplateCallback;\n        enabled?: boolean;\n    }): void;\n    remove(): void;\n};\n\nexport type PromptCallback<Args extends StandardSchemaWithJSON | undefined = undefined> = Args extends StandardSchemaWithJSON\n    ? (\n          args: StandardSchemaWithJSON.InferOutput<Args>,\n          ctx: ServerContext\n      ) => GetPromptResult | InputRequiredResult | Promise<GetPromptResult | InputRequiredResult>\n    : (ctx: ServerContext) => GetPromptResult | InputRequiredResult | Promise<GetPromptResult | InputRequiredResult>;\n\n/**\n * Internal handler type that encapsulates parsing and callback invocation.\n * This allows type-safe handling without runtime type assertions.\n */\ntype PromptHandler = (args: Record<string, unknown> | undefined, ctx: ServerContext) => Promise<GetPromptResult | InputRequiredResult>;\n\ntype ToolCallbackInternal = (\n    args: unknown,\n    ctx: ServerContext\n) => CallToolResult | InputRequiredResult | Promise<CallToolResult | InputRequiredResult>;\n\nexport type RegisteredPrompt = {\n    title?: string;\n    description?: string;\n    argsSchema?: StandardSchemaWithJSON;\n    icons?: Icon[];\n    scopeChallenge?: ScopeChallengeHandler;\n    _meta?: Record<string, unknown>;\n    /** @hidden */\n    handler: PromptHandler;\n    enabled: boolean;\n    enable(): void;\n    disable(): void;\n    update<Args extends StandardSchemaWithJSON>(updates: {\n        name?: string | null;\n        title?: string;\n        description?: string;\n        argsSchema?: Args;\n        icons?: Icon[];\n        scopeChallenge?: ScopeChallengeHandler | null;\n        _meta?: Record<string, unknown>;\n        callback?: PromptCallback<Args>;\n        enabled?: boolean;\n    }): void;\n    remove(): void;\n};\n\n/**\n * Creates a type-safe prompt handler that captures the schema and callback in a closure.\n * This eliminates the need for type assertions at the call site.\n */\nfunction createPromptHandler(\n    name: string,\n    argsSchema: StandardSchemaWithJSON | undefined,\n    callback: PromptCallback<StandardSchemaWithJSON | undefined>\n): PromptHandler {\n    if (argsSchema) {\n        const typedCallback = callback as (\n            args: unknown,\n            ctx: ServerContext\n        ) => GetPromptResult | InputRequiredResult | Promise<GetPromptResult | InputRequiredResult>;\n\n        return async (args, ctx) => {\n            const parseResult = await validateStandardSchema(argsSchema, args ?? {});\n            if (!parseResult.success) {\n                throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Invalid arguments for prompt ${name}: ${parseResult.error}`);\n            }\n            return typedCallback(parseResult.data, ctx);\n        };\n    } else {\n        const typedCallback = callback as (\n            ctx: ServerContext\n        ) => GetPromptResult | InputRequiredResult | Promise<GetPromptResult | InputRequiredResult>;\n\n        return async (_args, ctx) => {\n            return typedCallback(ctx);\n        };\n    }\n}\n\nfunction createCompletionResult(suggestions: readonly unknown[]): CompleteResult {\n    const values = suggestions.map(String).slice(0, 100);\n    return {\n        completion: {\n            values,\n            total: suggestions.length,\n            hasMore: suggestions.length > 100\n        }\n    };\n}\n\nconst EMPTY_COMPLETION_RESULT: CompleteResult = {\n    completion: {\n        values: [],\n        hasMore: false\n    }\n};\n\n/** @internal Gets the shape of a Zod object schema */\nfunction getSchemaShape(schema: unknown): Record<string, unknown> | undefined {\n    const candidate = schema as { shape?: unknown };\n    if (candidate.shape && typeof candidate.shape === 'object') {\n        return candidate.shape as Record<string, unknown>;\n    }\n    return undefined;\n}\n\n/** @internal Checks if a Zod schema is optional */\nfunction isOptionalSchema(schema: unknown): boolean {\n    const candidate = schema as { type?: string } | null | undefined;\n    return candidate?.type === 'optional';\n}\n\n/** @internal Unwraps an optional Zod schema */\nfunction unwrapOptionalSchema(schema: unknown): unknown {\n    if (!isOptionalSchema(schema)) {\n        return schema;\n    }\n    const candidate = schema as { def?: { innerType?: unknown } };\n    return candidate.def?.innerType ?? schema;\n}\n", "/**\n * A single-exchange, per-request HTTP server transport for modern-era\n * (protocol revision 2026-07-28) serving.\n *\n * One transport instance serves exactly one already-classified inbound\n * JSON-RPC message and produces exactly one HTTP `Response`:\n *\n * - a `202` with no body for notifications,\n * - a single JSON body for requests whose handler produces no streamed\n *   output, or\n * - a lazily-opened SSE stream when the handler emits related messages\n *   (notifications or server-to-client requests) before its result — the\n *   stream carries those messages and finally the terminal result, then\n *   closes.\n *\n * The transport is constructed already-classified: the entry parses and\n * classifies the request body exactly once and hands the classification in via\n * the constructor; the transport attaches it (together with the original\n * request and any caller-provided auth info) to every message it delivers, and\n * the protocol layer validates it against the serving instance's negotiated\n * era. `authInfo` is strictly pass-through — it is never derived from the\n * inbound request's headers here.\n *\n * Deliberately NOT carried over from the session-oriented streamable HTTP\n * transport: session ids and session headers, resumability (event ids,\n * priming events, `Last-Event-ID` replay, retry hints), the standalone GET\n * stream, and request-header validation (which belongs to middleware). The\n * exchange is single-use; serving another request requires a new transport\n * (and, in the per-request serving model, a fresh server instance).\n *\n * Consumers wiring this transport into a custom entry (instead of\n * `createMcpHandler`) inherit the spec's per-error HTTP mandate with it: a\n * terminal `MissingRequiredClientCapabilityError` (-32021) MUST answer 400,\n * which this transport applies whenever the response is still uncommitted.\n * A custom entry must also reject POSTs whose Content-Type media type is not\n * `application/json` (415) before parsing the body — use `isJsonContentType`\n * from the package root; this transport never sees the HTTP headers, so it\n * cannot perform that validation itself.\n */\nimport type {\n    AuthInfo,\n    JSONRPCMessage,\n    JSONRPCNotification,\n    JSONRPCRequest,\n    MessageClassification,\n    MessageExtraInfo,\n    RequestId,\n    Transport,\n    TransportSendOptions\n} from '@modelcontextprotocol/core-internal';\nimport {\n    isJSONRPCErrorResponse,\n    isJSONRPCRequest,\n    isJSONRPCResultResponse,\n    LADDER_ERROR_HTTP_STATUS,\n    ProtocolErrorCode,\n    SdkError,\n    SdkErrorCode\n} from '@modelcontextprotocol/core-internal';\n\nimport { armSseKeepAlive, DEFAULT_SSE_KEEP_ALIVE_MS } from './sseKeepAlive';\n\n/**\n * How the transport shapes its HTTP response for a request:\n *\n * - `auto` (default): answer with a single JSON body unless the handler emits\n *   a related message before its result, in which case the response upgrades\n *   to an SSE stream.\n * - `sse`: always answer handler output over an SSE stream. The stream opens\n *   once the request has passed the pre-dispatch validation gates, so ladder\n *   rejections keep their mapped HTTP status instead of being framed onto a\n *   200 stream.\n * - `json`: never stream; related messages other than the terminal response\n *   are dropped.\n */\nexport type PerRequestResponseMode = 'auto' | 'sse' | 'json';\n\n/** Constructor options for {@linkcode PerRequestHTTPServerTransport}. */\nexport interface PerRequestHTTPServerTransportOptions {\n    /** The edge classification of the message this transport will serve. */\n    classification: MessageClassification;\n    /** Response shaping for the exchange; defaults to `auto`. */\n    responseMode?: PerRequestResponseMode;\n    /** SSE keep-alive interval in milliseconds; defaults to `15000`, `0` disables. */\n    keepAliveMs?: number;\n}\n\n/** Per-exchange context handed to {@linkcode PerRequestHTTPServerTransport.handleMessage}. */\nexport interface PerRequestMessageExtra {\n    /**\n     * The original HTTP request. Used for handler context and, when the\n     * runtime provides an abort signal on it, to cancel the exchange when the\n     * client disconnects.\n     */\n    request?: globalThis.Request;\n    /**\n     * Validated authentication information supplied by the caller. Strictly\n     * pass-through: the transport never populates this from request headers.\n     */\n    authInfo?: AuthInfo;\n}\n\ninterface DeferredResponse {\n    promise: Promise<Response>;\n    resolve: (response: Response) => void;\n    reject: (error: Error) => void;\n    settled: boolean;\n}\n\ninterface SseSink {\n    controller: ReadableStreamDefaultController<Uint8Array>;\n    encoder: InstanceType<typeof TextEncoder>;\n    closed: boolean;\n    keepAliveTimer?: ReturnType<typeof setInterval>;\n}\n\n/**\n * The per-request micro-transport: a real, connected `Transport` whose whole\n * lifetime is one HTTP exchange. See the module documentation for the\n * response shapes it produces.\n */\nexport class PerRequestHTTPServerTransport implements Transport {\n    onclose?: () => void;\n    onerror?: (error: Error) => void;\n    onmessage?: <T extends JSONRPCMessage>(message: T, extra?: MessageExtraInfo) => void;\n\n    private readonly _classification: MessageClassification;\n    private readonly _responseMode: PerRequestResponseMode;\n\n    private _started = false;\n    private _used = false;\n    private _closed = false;\n    private _terminalDelivered = false;\n    /**\n     * `true` only while the inbound message is being delivered synchronously\n     * to the connected protocol layer. The pre-handler gates (the era\n     * registry gate, the edge→instance handoff check, the missing-handler\n     * rejection) answer inside this window; request handlers always run\n     * after it (the protocol layer defers them to a microtask). An error\n     * sent inside the window is therefore ladder-originated, and an error\n     * sent after it is handler-produced.\n     */\n    private _dispatchWindowOpen = false;\n    private _requestId?: RequestId;\n    private _deferredResponse?: DeferredResponse;\n    private _sse?: SseSink;\n    private _abortCleanup?: () => void;\n    private readonly _keepAliveMs: number;\n\n    constructor(options: PerRequestHTTPServerTransportOptions) {\n        this._classification = options.classification;\n        this._responseMode = options.responseMode ?? 'auto';\n        this._keepAliveMs = options.keepAliveMs ?? DEFAULT_SSE_KEEP_ALIVE_MS;\n    }\n\n    async start(): Promise<void> {\n        if (this._started) {\n            throw new Error('PerRequestHTTPServerTransport is already started');\n        }\n        this._started = true;\n    }\n\n    /**\n     * Serves the single exchange: delivers the classified message to the\n     * connected server instance and resolves with the HTTP response.\n     *\n     * Throws when called a second time (the transport is strictly\n     * single-use), or before a server has been connected to the transport.\n     * The returned promise rejects with a connection-closed error when the\n     * transport is closed before a response was produced (for example because\n     * the client disconnected).\n     */\n    async handleMessage(message: JSONRPCRequest | JSONRPCNotification, extra?: PerRequestMessageExtra): Promise<Response> {\n        if (this._used) {\n            throw new Error('PerRequestHTTPServerTransport serves exactly one exchange; construct a new transport per request');\n        }\n        if (!this._started || this.onmessage === undefined) {\n            throw new Error('PerRequestHTTPServerTransport is not connected: connect a server to this transport before handling a message');\n        }\n        if (this._closed) {\n            throw new Error('PerRequestHTTPServerTransport is closed');\n        }\n        this._used = true;\n\n        const signal = extra?.request?.signal;\n        if (signal?.aborted) {\n            await this.close();\n            throw new SdkError(SdkErrorCode.ConnectionClosed, 'The request was aborted before it could be handled');\n        }\n\n        // authInfo is strictly pass-through from the caller; it is never\n        // derived from the inbound request's headers.\n        const messageExtra: MessageExtraInfo = {\n            classification: this._classification,\n            ...(extra?.request !== undefined && { request: extra.request }),\n            ...(extra?.authInfo !== undefined && { authInfo: extra.authInfo })\n        };\n\n        if (isJSONRPCRequest(message)) {\n            this._requestId = message.id;\n\n            let resolve!: (response: Response) => void;\n            let reject!: (error: Error) => void;\n            const promise = new Promise<Response>((promiseResolve, promiseReject) => {\n                resolve = promiseResolve;\n                reject = promiseReject;\n            });\n            this._deferredResponse = { promise, resolve, reject, settled: false };\n\n            if (signal !== undefined) {\n                const onAbort = () => void this.close();\n                signal.addEventListener('abort', onAbort, { once: true });\n                this._abortCleanup = () => signal.removeEventListener('abort', onAbort);\n            }\n\n            this._dispatchWindowOpen = true;\n            try {\n                this.onmessage(message, messageExtra);\n            } finally {\n                this._dispatchWindowOpen = false;\n            }\n\n            if (this._responseMode === 'sse' && !this._closed && !this._deferredResponse.settled) {\n                // Forced-SSE exchanges open their stream as soon as the\n                // request has passed the pre-dispatch gates: a ladder\n                // rejection settles inside the dispatch window with its\n                // mapped HTTP status, while handler output — including\n                // comment frames written before the first message — streams\n                // as before.\n                this.upgradeToSse();\n            }\n            return promise;\n        }\n\n        // Notifications never get a JSON-RPC response: deliver the message and\n        // acknowledge the POST with 202 and no body.\n        this.onmessage(message, messageExtra);\n        return new Response(null, { status: 202 });\n    }\n\n    async send(message: JSONRPCMessage, options?: TransportSendOptions): Promise<void> {\n        if (this._closed) {\n            // The exchange is over; late writes are dropped.\n            return;\n        }\n\n        const isResponse = isJSONRPCResultResponse(message) || isJSONRPCErrorResponse(message);\n        const relatedId = isResponse ? (message as { id: RequestId }).id : options?.relatedRequestId;\n\n        if (this._requestId === undefined || relatedId === undefined || relatedId !== this._requestId) {\n            if (isResponse) {\n                this.onerror?.(new Error(`Received a response for an unknown request id: ${String((message as { id?: unknown }).id)}`));\n            }\n            // Messages unrelated to the single in-flight request have nowhere\n            // to go on a per-request exchange (there is no session-wide\n            // stream); they are dropped.\n            return;\n        }\n\n        if (isResponse) {\n            if (this._terminalDelivered) {\n                return;\n            }\n            this._terminalDelivered = true;\n\n            // The HTTP status is keyed on the error's origin, not on its bare\n            // code: only errors produced inside the dispatch window — the\n            // validation ladder, the era registry gate and handoff check, a\n            // missing handler — are answered with the mapped HTTP status from\n            // the ladder table. Handler-produced errors, whatever their code,\n            // stay in-band on HTTP 200 — except\n            // MissingRequiredClientCapability (-32021), whose 400 the spec\n            // mandates per-error with no origin condition and whose only\n            // SDK-produced post-window source (the input_required capability\n            // gate) cannot fire any earlier — a handler-minted -32021 gets\n            // the same 400; a handler RELAYING a downstream peer's\n            // -32020/-32022 is not that peer's spec error and stays in-band.\n            // Must agree with httpStatusForErrorCode (core-internal), which\n            // is deliberately NOT called here: its `?? 400` ladder fallback\n            // would wrongly map window codes outside the table.\n            // The mapping applies only while no response has been committed:\n            // once the stream is open — the handler streamed first, or the\n            // exchange is forced-`sse` (which settles its 200 at dispatch\n            // end) — the status is on the wire and the error rides the\n            // stream. Pre-dispatch ladder rejections always precede the\n            // forced-`sse` upgrade, so they keep their mapped status in every\n            // response mode.\n            const errorCode = isJSONRPCErrorResponse(message) ? message.error.code : undefined;\n            const ladderStatus =\n                errorCode !== undefined && (this._dispatchWindowOpen || errorCode === ProtocolErrorCode.MissingRequiredClientCapability)\n                    ? LADDER_ERROR_HTTP_STATUS[errorCode]\n                    : undefined;\n            if (ladderStatus !== undefined && this._sse === undefined) {\n                this.settleResponse(Response.json(message, { status: ladderStatus, headers: { 'Content-Type': 'application/json' } }));\n                queueMicrotask(() => void this.close());\n                return;\n            }\n\n            if (this._sse !== undefined || this._responseMode === 'sse') {\n                // Finalize the stream: serialize the terminal result onto it\n                // after everything already enqueued, then close.\n                if (this._sse === undefined) {\n                    this.upgradeToSse();\n                }\n                this.writeMessageFrame(message);\n                this.finalizeStream();\n                return;\n            }\n\n            // Single JSON body.\n            this.settleResponse(Response.json(message, { status: 200, headers: { 'Content-Type': 'application/json' } }));\n            queueMicrotask(() => void this.close());\n            return;\n        }\n\n        // A message related to the in-flight request that is not its terminal\n        // response: a mid-call notification or a server-to-client request\n        // emitted by the handler.\n        if (this._responseMode === 'json') {\n            // JSON responses cannot carry mid-call messages; they are dropped.\n            return;\n        }\n        if (this._sse === undefined) {\n            this.upgradeToSse();\n        }\n        this.writeMessageFrame(message);\n    }\n\n    /**\n     * Writes an SSE comment frame (a keep-alive heartbeat). Dropped when the\n     * exchange is not currently streaming.\n     */\n    writeCommentFrame(comment: string): void {\n        if (this._closed || this._sse === undefined || this._sse.closed) {\n            return;\n        }\n        const frame = comment\n            .split('\\n')\n            .map(line => `: ${line}`)\n            .join('\\n');\n        this.writeFrame(`${frame}\\n\\n`);\n    }\n\n    async close(): Promise<void> {\n        if (this._closed) {\n            return;\n        }\n        this._closed = true;\n\n        this._abortCleanup?.();\n        this._abortCleanup = undefined;\n\n        if (this._sse?.keepAliveTimer !== undefined) {\n            clearInterval(this._sse.keepAliveTimer);\n        }\n        if (this._sse !== undefined && !this._sse.closed) {\n            this._sse.closed = true;\n            try {\n                this._sse.controller.close();\n            } catch {\n                // The stream was already closed or cancelled by the consumer.\n            }\n        }\n\n        if (this._deferredResponse !== undefined && !this._deferredResponse.settled) {\n            this._deferredResponse.settled = true;\n            this._deferredResponse.reject(new SdkError(SdkErrorCode.ConnectionClosed, 'Connection closed before a response was produced'));\n        }\n\n        this.onclose?.();\n    }\n\n    private settleResponse(response: Response): void {\n        if (this._deferredResponse === undefined || this._deferredResponse.settled) {\n            return;\n        }\n        this._deferredResponse.settled = true;\n        this._deferredResponse.resolve(response);\n    }\n\n    private upgradeToSse(): void {\n        let controller!: ReadableStreamDefaultController<Uint8Array>;\n        const readable = new ReadableStream<Uint8Array>({\n            start: streamController => {\n                controller = streamController;\n            },\n            cancel: () => {\n                // The client went away mid-stream: tear the exchange down,\n                // which aborts the in-flight handler through the connected\n                // server's close chain.\n                void this.close();\n            }\n        });\n        this._sse = { controller, encoder: new TextEncoder(), closed: false };\n        this._sse.keepAliveTimer = armSseKeepAlive(this._keepAliveMs, () => this.writeCommentFrame('keepalive'));\n\n        this.settleResponse(\n            new Response(readable, {\n                status: 200,\n                headers: {\n                    'Content-Type': 'text/event-stream',\n                    'Cache-Control': 'no-cache, no-transform',\n                    Connection: 'keep-alive',\n                    // Disable proxy buffering so streamed messages are\n                    // delivered as they are written.\n                    'X-Accel-Buffering': 'no'\n                }\n            })\n        );\n    }\n\n    private finalizeStream(): void {\n        if (this._sse?.keepAliveTimer !== undefined) {\n            clearInterval(this._sse.keepAliveTimer);\n        }\n        if (this._sse !== undefined && !this._sse.closed) {\n            this._sse.closed = true;\n            try {\n                this._sse.controller.close();\n            } catch {\n                // The stream was already cancelled by the consumer.\n            }\n        }\n        queueMicrotask(() => void this.close());\n    }\n\n    private writeMessageFrame(message: JSONRPCMessage): void {\n        this.writeFrame(`event: message\\ndata: ${JSON.stringify(message)}\\n\\n`);\n    }\n\n    private writeFrame(frame: string): void {\n        if (this._sse === undefined || this._sse.closed) {\n            return;\n        }\n        try {\n            this._sse.controller.enqueue(this._sse.encoder.encode(frame));\n        } catch (error) {\n            this.onerror?.(new Error(`Failed to write to the response stream: ${error}`));\n        }\n    }\n}\n", "/**\n * The internal per-request invoke seam for modern-era HTTP serving.\n *\n * One classified inbound message is served by composing existing pieces, with\n * no changes to the protocol dispatch layer:\n *\n *   server instance (from the consumer's factory)\n *     → `connect(per-request transport)`\n *     → inject the classified message through the transport's message callback\n *     → capture the value (a single JSON body or an SSE stream) via the\n *       transport's send path.\n *\n * The seam is value-returning and independently testable: it resolves with the\n * HTTP `Response` for the exchange. Marking factory instances as modern-era\n * (and installing modern-only handlers) is the calling entry's responsibility\n * and happens before this seam runs; the seam itself never writes era state.\n */\nimport type { AuthInfo, JSONRPCNotification, JSONRPCRequest, MessageClassification } from '@modelcontextprotocol/core-internal';\n\nimport type { McpServer } from './mcp';\nimport type { PerRequestResponseMode } from './perRequestTransport';\nimport { PerRequestHTTPServerTransport } from './perRequestTransport';\nimport type { Server } from './server';\n\n/** Per-exchange context for {@linkcode invoke}. */\nexport interface InvokeContext {\n    /** The edge classification of the message (computed once, at the entry boundary). */\n    classification: MessageClassification;\n    /** The original HTTP request, when serving HTTP traffic. */\n    request?: globalThis.Request;\n    /**\n     * Validated authentication information supplied by the caller. Strictly\n     * pass-through — never derived from request headers by this seam.\n     */\n    authInfo?: AuthInfo;\n    /** Response shaping for the exchange; defaults to `auto` (lazy SSE upgrade). */\n    responseMode?: PerRequestResponseMode;\n    /** SSE keep-alive interval for the exchange. */\n    keepAliveMs?: number;\n}\n\n/**\n * Serves one classified inbound message on the given server instance and\n * returns the HTTP response for the exchange.\n *\n * The instance is connected to a fresh single-exchange transport, the message\n * is injected through the normal transport message path, and whatever the\n * dispatch layer produces (the handler result, a protocol-level rejection, or\n * streamed related messages followed by the result) is captured as the\n * returned `Response`. For request exchanges, teardown rides the transport's\n * close chain once the terminal response has been delivered; notification\n * exchanges resolve with the 202 response immediately and do NOT run the\n * close chain — the transport stays connected until the caller closes it or\n * drops the per-request instance, which is the caller's choice either way.\n */\nexport async function invoke(\n    server: Server | McpServer,\n    message: JSONRPCRequest | JSONRPCNotification,\n    ctx: InvokeContext\n): Promise<Response> {\n    const transport = new PerRequestHTTPServerTransport({\n        classification: ctx.classification,\n        ...(ctx.responseMode !== undefined && { responseMode: ctx.responseMode }),\n        ...(ctx.keepAliveMs !== undefined && { keepAliveMs: ctx.keepAliveMs })\n    });\n    await server.connect(transport);\n    return transport.handleMessage(message, {\n        ...(ctx.request !== undefined && { request: ctx.request }),\n        ...(ctx.authInfo !== undefined && { authInfo: ctx.authInfo })\n    });\n}\n", "/** Default upper bound, in bytes, on a request body read by the HTTP entry points (4 MiB). */\nexport const DEFAULT_MAX_REQUEST_BODY_SIZE = 4 * 1024 * 1024;\n\n/** Upper bound on the number of messages accepted in one JSON-RPC batch array. */\nexport const MAX_BATCH_SIZE = 100;\n\n/** The message answered with 413 for a request body over `maxBytes`. */\nexport function requestBodyTooLargeMessage(maxBytes: number): string {\n    return `Payload Too Large: Request body must not exceed ${maxBytes} bytes`;\n}\n\n/**\n * Resolves a `maxRequestBodySize` option to the bound to apply: the default when\n * omitted, otherwise the value itself, which must be a positive finite number of\n * bytes (a `RangeError` is thrown at configuration time for anything else).\n */\nexport function resolveMaxRequestBodySize(value: number | undefined): number {\n    if (value === undefined) {\n        return DEFAULT_MAX_REQUEST_BODY_SIZE;\n    }\n    if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0) {\n        throw new RangeError(`maxRequestBodySize must be a positive number of bytes, got ${String(value)}`);\n    }\n    return value;\n}\n\n/**\n * Reads a request body as text, up to `maxBytes` (default\n * {@linkcode DEFAULT_MAX_REQUEST_BODY_SIZE}). A declared `Content-Length` over the\n * limit is refused without reading anything; otherwise the read stops as soon as\n * more than the limit has arrived. Stream failures propagate.\n */\nexport async function readRequestBody(\n    request: Request,\n    maxBytes: number = DEFAULT_MAX_REQUEST_BODY_SIZE\n): Promise<{ tooLarge: true } | { tooLarge: false; text: string }> {\n    if (Number(request.headers.get('content-length')) > maxBytes) {\n        return { tooLarge: true };\n    }\n    if (request.body === null) {\n        return { tooLarge: false, text: '' };\n    }\n    const reader = request.body.getReader();\n    const decoder = new TextDecoder();\n    let received = 0;\n    let text = '';\n    try {\n        for (;;) {\n            const { done, value } = await reader.read();\n            if (done) {\n                break;\n            }\n            received += value.byteLength;\n            if (received > maxBytes) {\n                return { tooLarge: true };\n            }\n            text += decoder.decode(value, { stream: true });\n        }\n    } finally {\n        reader.releaseLock();\n    }\n    return { tooLarge: false, text: text + decoder.decode() };\n}\n", "/**\n * Web Standards Streamable HTTP Server Transport\n *\n * This is the core transport implementation using Web Standard APIs (`Request`, `Response`, `ReadableStream`).\n * It can run on any runtime that supports Web Standards: Node.js 18+, Cloudflare Workers, Deno, Bun, etc.\n *\n * For Node.js Express/HTTP compatibility, use {@linkcode @modelcontextprotocol/node!NodeStreamableHTTPServerTransport | NodeStreamableHTTPServerTransport} which wraps this transport.\n */\n\nimport type { AuthInfo, JSONRPCMessage, JSONRPCRequest, MessageExtraInfo, RequestId, Transport } from '@modelcontextprotocol/core-internal';\nimport {\n    DEFAULT_NEGOTIATED_PROTOCOL_VERSION,\n    isInitializeRequest,\n    isJsonContentType,\n    isJSONRPCErrorResponse,\n    isJSONRPCRequest,\n    isJSONRPCResultResponse,\n    JSONRPCMessageSchema,\n    SUPPORTED_PROTOCOL_VERSIONS\n} from '@modelcontextprotocol/core-internal';\n\nimport { MAX_BATCH_SIZE, readRequestBody, requestBodyTooLargeMessage, resolveMaxRequestBodySize } from './requestBody';\nimport type { ScopeChallengeHandler } from './scopeChallenge';\nimport { createScopeChallengeResponse, findScopeChallenge, scopeChallengeResourceMetadataUrl } from './scopeChallenge';\nimport { armSseKeepAlive, DEFAULT_SSE_KEEP_ALIVE_MS } from './sseKeepAlive';\n\nexport type StreamId = string;\nexport type EventId = string;\n\n/**\n * Interface for resumability support via event storage\n */\nexport interface EventStore {\n    /**\n     * Stores an event for later retrieval\n     * @param streamId ID of the stream the event belongs to\n     * @param message The JSON-RPC message to store\n     * @returns The generated event ID for the stored event\n     */\n    storeEvent(streamId: StreamId, message: JSONRPCMessage): Promise<EventId>;\n\n    /**\n     * Get the stream ID associated with a given event ID.\n     * @param eventId The event ID to look up\n     * @returns The stream ID, or `undefined` if not found\n     *\n     * Optional: If not provided, the SDK will use the `streamId` returned by\n     * {@linkcode replayEventsAfter} for stream mapping.\n     */\n    getStreamIdForEventId?(eventId: EventId): Promise<StreamId | undefined>;\n\n    replayEventsAfter(\n        lastEventId: EventId,\n        {\n            send\n        }: {\n            send: (eventId: EventId, message: JSONRPCMessage) => Promise<void>;\n        }\n    ): Promise<StreamId>;\n}\n\n/**\n * Internal stream mapping for managing SSE connections\n */\ninterface StreamMapping {\n    /** Stream controller for pushing SSE data - only used with `ReadableStream` approach */\n    controller?: ReadableStreamDefaultController<Uint8Array>;\n    /** Text encoder for SSE formatting */\n    encoder?: InstanceType<typeof TextEncoder>;\n    /** Promise resolver for JSON response mode */\n    resolveJson?: (response: Response) => void;\n    /**\n     * Event ids already written to this stream by `replayEventsAfter` — lets\n     * `send()` skip a duplicate write when the resumed stream registered\n     * during the `storeEvent()` await and replay already delivered the event.\n     */\n    replayedEventIds?: Set<string>;\n    /** Cleanup function to close stream and remove mapping */\n    cleanup: () => void;\n}\n\n/**\n * Configuration options for {@linkcode WebStandardStreamableHTTPServerTransport}\n */\nexport interface WebStandardStreamableHTTPServerTransportOptions {\n    /**\n     * Function that generates a session ID for the transport.\n     * The session ID SHOULD be globally unique and cryptographically secure (e.g., a securely generated UUID, a JWT, or a cryptographic hash)\n     *\n     * If not provided, session management is disabled (stateless mode).\n     */\n    sessionIdGenerator?: (() => string) | undefined;\n\n    /**\n     * A callback for session initialization events\n     * This is called when the server initializes a new session.\n     * Useful in cases when you need to register multiple mcp sessions\n     * and need to keep track of them.\n     * @param sessionId The generated session ID\n     */\n    onsessioninitialized?: ((sessionId: string) => void | Promise<void>) | undefined;\n\n    /**\n     * A callback for session close events\n     * This is called when the server closes a session due to a `DELETE` request.\n     * Useful in cases when you need to clean up resources associated with the session.\n     * Note that this is different from the transport closing, if you are handling\n     * HTTP requests from multiple nodes you might want to close each\n     * {@linkcode WebStandardStreamableHTTPServerTransport} after a request is completed while still keeping the\n     * session open/running.\n     * @param sessionId The session ID that was closed\n     */\n    onsessionclosed?: ((sessionId: string) => void | Promise<void>) | undefined;\n\n    /**\n     * If `true`, the server will return JSON responses instead of starting an SSE stream.\n     * This can be useful for simple request/response scenarios without streaming.\n     * Default is `false` (SSE streams are preferred).\n     */\n    enableJsonResponse?: boolean;\n\n    /**\n     * Event store for resumability support\n     * If provided, resumability will be enabled, allowing clients to reconnect and resume messages\n     */\n    eventStore?: EventStore;\n\n    /**\n     * List of allowed `Host` header values for DNS rebinding protection.\n     * If not specified, host validation is disabled.\n     * @deprecated Use external middleware for host validation instead.\n     */\n    allowedHosts?: string[];\n\n    /**\n     * List of allowed `Origin` header values for DNS rebinding protection.\n     * If not specified, origin validation is disabled.\n     * @deprecated Use external middleware for origin validation instead.\n     */\n    allowedOrigins?: string[];\n\n    /**\n     * Enable DNS rebinding protection (requires `allowedHosts` and/or `allowedOrigins` to be configured).\n     * Default is `false` for backwards compatibility.\n     * @deprecated Use external middleware for DNS rebinding protection instead.\n     */\n    enableDnsRebindingProtection?: boolean;\n\n    /**\n     * Retry interval in milliseconds to suggest to clients in SSE `retry` field.\n     * When set, the server will send a `retry` field in SSE priming events to control\n     * client reconnection timing for polling behavior.\n     */\n    retryInterval?: number;\n\n    /**\n     * Interval in milliseconds between SSE keep-alive comment frames.\n     * Defaults to `15000`; set to `0` to disable.\n     */\n    keepAliveMs?: number;\n\n    /**\n     * Upper bound, in bytes, on a POST body the transport reads itself. A body\n     * over the bound (declared `Content-Length`, or observed while streaming)\n     * is answered `413` before anything is parsed. Not applied when the caller\n     * supplies `parsedBody`. Must be a positive number.\n     * @default 4194304 (4 MiB)\n     */\n    maxRequestBodySize?: number;\n\n    /**\n     * List of protocol versions that this transport will accept.\n     * Used to validate the `mcp-protocol-version` header in incoming requests.\n     *\n     * Note: When using {@linkcode server/server.Server.connect | Server.connect()}, the server automatically passes its\n     * `supportedProtocolVersions` to the transport, so you typically don't need\n     * to set this option directly.\n     *\n     * @default {@linkcode SUPPORTED_PROTOCOL_VERSIONS}\n     */\n    supportedProtocolVersions?: string[];\n}\n\n/**\n * Options for handling a request\n */\nexport interface HandleRequestOptions {\n    /**\n     * Pre-parsed request body. If provided, the transport will use this instead of reading and parsing the request body.\n     * Useful when using body-parser middleware that has already parsed the body.\n     */\n    parsedBody?: unknown;\n\n    /**\n     * Authentication info from middleware. If provided, will be passed to message handlers.\n     */\n    authInfo?: AuthInfo;\n}\n\n/**\n * Server transport for Web Standards Streamable HTTP: this implements the MCP Streamable HTTP transport specification\n * using Web Standard APIs (`Request`, `Response`, `ReadableStream`).\n *\n * This transport works on any runtime that supports Web Standards: Node.js 18+, Cloudflare Workers, Deno, Bun, etc.\n *\n * In stateful mode:\n * - Session ID is generated and included in response headers\n * - Session ID is always included in initialization responses\n * - Requests with invalid session IDs are rejected with `404 Not Found`\n * - Non-initialization requests without a session ID are rejected with `400 Bad Request`\n * - State is maintained in-memory (connections, message history)\n *\n * In stateless mode:\n * - No Session ID is included in any responses\n * - No session validation is performed\n *\n * @example Stateful setup\n * ```ts source=\"./streamableHttp.examples.ts#WebStandardStreamableHTTPServerTransport_stateful\"\n * const server = new McpServer({ name: 'my-server', version: '1.0.0' });\n *\n * const transport = new WebStandardStreamableHTTPServerTransport({\n *     sessionIdGenerator: () => crypto.randomUUID()\n * });\n *\n * await server.connect(transport);\n * ```\n *\n * @example Stateless setup\n * ```ts source=\"./streamableHttp.examples.ts#WebStandardStreamableHTTPServerTransport_stateless\"\n * const transport = new WebStandardStreamableHTTPServerTransport({\n *     sessionIdGenerator: undefined\n * });\n * ```\n *\n * @example Hono.js\n * ```ts source=\"./streamableHttp.examples.ts#WebStandardStreamableHTTPServerTransport_hono\"\n * app.all('/mcp', async c => {\n *     // Stateless example: create a server and a transport per request.\n *     const server = new McpServer({ name: 'my-server', version: '1.0.0' });\n *     const transport = new WebStandardStreamableHTTPServerTransport({ sessionIdGenerator: undefined });\n *     await server.connect(transport);\n *     return transport.handleRequest(c.req.raw);\n * });\n * ```\n *\n * @example Cloudflare Workers\n * ```ts source=\"./streamableHttp.examples.ts#WebStandardStreamableHTTPServerTransport_workers\"\n * const worker = {\n *     async fetch(request: Request): Promise<Response> {\n *         // Stateless example: create a server and a transport per request.\n *         const server = new McpServer({ name: 'my-server', version: '1.0.0' });\n *         const transport = new WebStandardStreamableHTTPServerTransport({ sessionIdGenerator: undefined });\n *         await server.connect(transport);\n *         return transport.handleRequest(request);\n *     }\n * };\n * ```\n */\nexport class WebStandardStreamableHTTPServerTransport implements Transport {\n    // when sessionId is not set (undefined), it means the transport is in stateless mode\n    private sessionIdGenerator: (() => string) | undefined;\n    private _started: boolean = false;\n    private _hasHandledRequest: boolean = false;\n    private _closed: boolean = false;\n    private _streamMapping: Map<string, StreamMapping> = new Map();\n    private _requestToStreamMapping: Map<RequestId, string> = new Map();\n    private _requestResponseMap: Map<RequestId, JSONRPCMessage> = new Map();\n    private _initialized: boolean = false;\n    private _enableJsonResponse: boolean = false;\n    private _standaloneSseStreamId: string = '_GET_stream';\n    private _eventStore?: EventStore;\n    private _onsessioninitialized?: ((sessionId: string) => void | Promise<void>) | undefined;\n    private _onsessionclosed?: ((sessionId: string) => void | Promise<void>) | undefined;\n    private _allowedHosts?: string[];\n    private _allowedOrigins?: string[];\n    private _enableDnsRebindingProtection: boolean;\n    private _retryInterval?: number;\n    private _supportedProtocolVersions: string[];\n    private _keepAliveMs: number;\n    private _maxRequestBodySize: number;\n    private _scopeChallengeResolver?: ScopeChallengeHandler;\n\n    sessionId?: string;\n    onclose?: () => void;\n    onerror?: (error: Error) => void;\n    onmessage?: (message: JSONRPCMessage, extra?: MessageExtraInfo) => void;\n\n    constructor(options: WebStandardStreamableHTTPServerTransportOptions = {}) {\n        this.sessionIdGenerator = options.sessionIdGenerator;\n        this._enableJsonResponse = options.enableJsonResponse ?? false;\n        this._eventStore = options.eventStore;\n        this._onsessioninitialized = options.onsessioninitialized;\n        this._onsessionclosed = options.onsessionclosed;\n        this._allowedHosts = options.allowedHosts;\n        this._allowedOrigins = options.allowedOrigins;\n        this._enableDnsRebindingProtection = options.enableDnsRebindingProtection ?? false;\n        this._retryInterval = options.retryInterval;\n        this._supportedProtocolVersions = options.supportedProtocolVersions ?? SUPPORTED_PROTOCOL_VERSIONS;\n        this._keepAliveMs = options.keepAliveMs ?? DEFAULT_SSE_KEEP_ALIVE_MS;\n        this._maxRequestBodySize = resolveMaxRequestBodySize(options.maxRequestBodySize);\n    }\n\n    private startKeepAlive(\n        controller: ReadableStreamDefaultController<Uint8Array>,\n        encoder: InstanceType<typeof TextEncoder>\n    ): ReturnType<typeof setInterval> | undefined {\n        if (this._closed) return undefined;\n\n        const timer = armSseKeepAlive(this._keepAliveMs, () => {\n            try {\n                controller.enqueue(encoder.encode(': keepalive\\n\\n'));\n            } catch {\n                if (timer !== undefined) clearInterval(timer);\n            }\n        });\n        return timer;\n    }\n\n    /** Sets the scope challenge resolver for parsed JSON-RPC requests. */\n    setScopeChallengeResolver(resolver: ScopeChallengeHandler): void {\n        this._scopeChallengeResolver = resolver;\n    }\n\n    /**\n     * Starts the transport. This is required by the {@linkcode Transport} interface but is a no-op\n     * for the Streamable HTTP transport as connections are managed per-request.\n     */\n    async start(): Promise<void> {\n        if (this._started) {\n            throw new Error('Transport already started');\n        }\n        this._started = true;\n    }\n\n    /**\n     * Sets the supported protocol versions for header validation.\n     * Called by the server during {@linkcode server/server.Server.connect | connect()} to pass its supported versions.\n     */\n    setSupportedProtocolVersions(versions: string[]): void {\n        this._supportedProtocolVersions = versions;\n    }\n\n    /**\n     * Helper to create a JSON error response\n     */\n    private createJsonErrorResponse(\n        status: number,\n        code: number,\n        message: string,\n        options?: { headers?: Record<string, string>; data?: string }\n    ): Response {\n        const error: { code: number; message: string; data?: string } = { code, message };\n        if (options?.data !== undefined) {\n            error.data = options.data;\n        }\n        return Response.json(\n            {\n                jsonrpc: '2.0',\n                error,\n                id: null\n            },\n            {\n                status,\n                headers: {\n                    'Content-Type': 'application/json',\n                    ...options?.headers\n                }\n            }\n        );\n    }\n\n    private async _checkScopeChallenge(messages: JSONRPCMessage[], authInfo?: AuthInfo): Promise<Response | undefined> {\n        // Active whenever a connected McpServer supplied a resolver (it\n        // resolves per-primitive scopeChallenge callbacks); the challenge's\n        // resource_metadata parameter is derived from the verified AuthInfo\n        // and omitted when unavailable.\n        if (!this._scopeChallengeResolver) {\n            return undefined;\n        }\n        const requests: JSONRPCRequest[] = messages.filter(message => isJSONRPCRequest(message));\n        const challenge = await findScopeChallenge(requests, authInfo, this._scopeChallengeResolver);\n        return challenge === undefined ? undefined : createScopeChallengeResponse(challenge, scopeChallengeResourceMetadataUrl(authInfo));\n    }\n\n    /**\n     * Validates request headers for DNS rebinding protection.\n     * @returns Error response if validation fails, `undefined` if validation passes.\n     */\n    private validateRequestHeaders(req: Request): Response | undefined {\n        // Skip validation if protection is not enabled\n        if (!this._enableDnsRebindingProtection) {\n            return undefined;\n        }\n\n        // Validate Host header if allowedHosts is configured\n        if (this._allowedHosts && this._allowedHosts.length > 0) {\n            const hostHeader = req.headers.get('host');\n            if (!hostHeader || !this._allowedHosts.includes(hostHeader)) {\n                const error = `Invalid Host header: ${hostHeader}`;\n                this.onerror?.(new Error(error));\n                return this.createJsonErrorResponse(403, -32_000, error);\n            }\n        }\n\n        // Validate Origin header if allowedOrigins is configured\n        if (this._allowedOrigins && this._allowedOrigins.length > 0) {\n            const originHeader = req.headers.get('origin');\n            if (originHeader && !this._allowedOrigins.includes(originHeader)) {\n                const error = `Invalid Origin header: ${originHeader}`;\n                this.onerror?.(new Error(error));\n                return this.createJsonErrorResponse(403, -32_000, error);\n            }\n        }\n\n        return undefined;\n    }\n\n    /**\n     * Handles an incoming HTTP request, whether `GET`, `POST`, or `DELETE`\n     * Returns a `Response` object (Web Standard)\n     */\n    async handleRequest(req: Request, options?: HandleRequestOptions): Promise<Response> {\n        if (this._closed) {\n            return this.createJsonErrorResponse(404, -32_001, 'Session not found');\n        }\n\n        // A stateless transport (no sessionIdGenerator) serves exactly one request.\n        if (!this.sessionIdGenerator && this._hasHandledRequest) {\n            throw new Error('Stateless transport cannot be reused across requests. Create a new transport per request.');\n        }\n        this._hasHandledRequest = true;\n\n        // Validate request headers for DNS rebinding protection\n        const validationError = this.validateRequestHeaders(req);\n        if (validationError) {\n            return validationError;\n        }\n\n        switch (req.method) {\n            case 'POST': {\n                return this.handlePostRequest(req, options);\n            }\n            case 'GET': {\n                return this.handleGetRequest(req);\n            }\n            case 'DELETE': {\n                return this.handleDeleteRequest(req);\n            }\n            default: {\n                return this.handleUnsupportedRequest();\n            }\n        }\n    }\n\n    /**\n     * Returns true if the client's protocol version supports empty SSE data in\n     * priming events (the fix shipped with protocol version `2025-11-25`).\n     *\n     * The version is checked for membership in this transport instance's\n     * supported protocol versions rather than with an open-ended\n     * `>= '2025-11-25'` comparison: the value may come from an `initialize`\n     * request body, which (unlike the `MCP-Protocol-Version` header) is not\n     * validated against `supportedProtocolVersions` before reaching this\n     * check. An unknown future version string must not silently enable\n     * behavior reserved for versions this transport actually supports.\n     */\n    private supportsEmptySSEData(protocolVersion: string): boolean {\n        return this._supportedProtocolVersions.includes(protocolVersion) && protocolVersion >= '2025-11-25';\n    }\n\n    /**\n     * Writes a priming event to establish resumption capability.\n     * Only sends if `eventStore` is configured (opt-in for resumability) and\n     * the client's protocol version supports empty SSE data (a supported\n     * version that is >= `2025-11-25`).\n     */\n    private async writePrimingEvent(\n        controller: ReadableStreamDefaultController<Uint8Array>,\n        encoder: InstanceType<typeof TextEncoder>,\n        streamId: string,\n        protocolVersion: string\n    ): Promise<void> {\n        if (!this._eventStore) {\n            return;\n        }\n\n        // Priming events have empty data which older clients cannot handle.\n        // Only send priming events to clients whose protocol version includes\n        // the fix for handling empty SSE data.\n        if (!this.supportsEmptySSEData(protocolVersion)) {\n            return;\n        }\n\n        const primingEventId = await this._eventStore.storeEvent(streamId, {} as JSONRPCMessage);\n\n        let primingEvent = `id: ${primingEventId}\\ndata: \\n\\n`;\n        if (this._retryInterval !== undefined) {\n            primingEvent = `id: ${primingEventId}\\nretry: ${this._retryInterval}\\ndata: \\n\\n`;\n        }\n        controller.enqueue(encoder.encode(primingEvent));\n    }\n\n    /**\n     * Handles `GET` requests for SSE stream\n     */\n    private async handleGetRequest(req: Request): Promise<Response> {\n        // The client MUST include an Accept header, listing text/event-stream as a supported content type.\n        const acceptHeader = req.headers.get('accept');\n        if (!acceptHeader?.includes('text/event-stream')) {\n            this.onerror?.(new Error('Not Acceptable: Client must accept text/event-stream'));\n            return this.createJsonErrorResponse(406, -32_000, 'Not Acceptable: Client must accept text/event-stream');\n        }\n\n        // If an Mcp-Session-Id is returned by the server during initialization,\n        // clients using the Streamable HTTP transport MUST include it\n        // in the Mcp-Session-Id header on all of their subsequent HTTP requests.\n        const sessionError = this.validateSession(req);\n        if (sessionError) {\n            return sessionError;\n        }\n        const protocolError = this.validateProtocolVersion(req);\n        if (protocolError) {\n            return protocolError;\n        }\n\n        // Handle resumability: check for Last-Event-ID header\n        if (this._eventStore) {\n            const lastEventId = req.headers.get('last-event-id');\n            if (lastEventId) {\n                return this.replayEvents(lastEventId);\n            }\n        }\n\n        // Check if there's already an active standalone SSE stream for this session\n        if (this._streamMapping.get(this._standaloneSseStreamId) !== undefined) {\n            // Only one GET SSE stream is allowed per session\n            this.onerror?.(new Error('Conflict: Only one SSE stream is allowed per session'));\n            return this.createJsonErrorResponse(409, -32_000, 'Conflict: Only one SSE stream is allowed per session');\n        }\n\n        const encoder = new TextEncoder();\n        let streamController: ReadableStreamDefaultController<Uint8Array>;\n        // Captured by cancel/cleanup before it is assigned after stream setup.\n        // eslint-disable-next-line prefer-const\n        let keepAliveTimer: ReturnType<typeof setInterval> | undefined;\n\n        // Create a ReadableStream with a controller we can use to push SSE events\n        const readable = new ReadableStream<Uint8Array>({\n            start: controller => {\n                streamController = controller;\n            },\n            cancel: () => {\n                if (keepAliveTimer !== undefined) clearInterval(keepAliveTimer);\n                // Stream was cancelled by client. Only drop the mapping when\n                // it still points at THIS controller — a stale cancel must not\n                // delete a successor stream registered by a later GET/resume.\n                if (this._streamMapping.get(this._standaloneSseStreamId)?.controller === streamController) {\n                    this._streamMapping.delete(this._standaloneSseStreamId);\n                }\n            }\n        });\n\n        const headers: Record<string, string> = {\n            'Content-Type': 'text/event-stream',\n            'Cache-Control': 'no-cache, no-transform',\n            Connection: 'keep-alive',\n            'X-Accel-Buffering': 'no'\n        };\n\n        // After initialization, always include the session ID if we have one\n        if (this.sessionId !== undefined) {\n            headers['mcp-session-id'] = this.sessionId;\n        }\n\n        // Store the stream mapping with the controller for pushing data\n        this._streamMapping.set(this._standaloneSseStreamId, {\n            controller: streamController!,\n            encoder,\n            cleanup: () => {\n                if (keepAliveTimer !== undefined) clearInterval(keepAliveTimer);\n                this._streamMapping.delete(this._standaloneSseStreamId);\n                try {\n                    streamController!.close();\n                } catch {\n                    // Controller might already be closed\n                }\n            }\n        });\n\n        keepAliveTimer = this.startKeepAlive(streamController!, encoder);\n        return new Response(readable, { headers });\n    }\n\n    /**\n     * Replays events that would have been sent after the specified event ID\n     * Only used when resumability is enabled\n     */\n    private async replayEvents(lastEventId: string): Promise<Response> {\n        if (!this._eventStore) {\n            this.onerror?.(new Error('Event store not configured'));\n            return this.createJsonErrorResponse(400, -32_000, 'Event store not configured');\n        }\n\n        try {\n            // If getStreamIdForEventId is available, use it for conflict checking\n            let streamId: string | undefined;\n            if (this._eventStore.getStreamIdForEventId) {\n                streamId = await this._eventStore.getStreamIdForEventId(lastEventId);\n\n                if (!streamId) {\n                    this.onerror?.(new Error('Invalid event ID format'));\n                    return this.createJsonErrorResponse(400, -32_000, 'Invalid event ID format');\n                }\n\n                // Check conflict with the SAME streamId we'll use for mapping\n                if (this._streamMapping.get(streamId) !== undefined) {\n                    this.onerror?.(new Error('Conflict: Stream already has an active connection'));\n                    return this.createJsonErrorResponse(409, -32_000, 'Conflict: Stream already has an active connection');\n                }\n            }\n\n            const headers: Record<string, string> = {\n                'Content-Type': 'text/event-stream',\n                'Cache-Control': 'no-cache, no-transform',\n                Connection: 'keep-alive',\n                'X-Accel-Buffering': 'no'\n            };\n\n            if (this.sessionId !== undefined) {\n                headers['mcp-session-id'] = this.sessionId;\n            }\n\n            // Create a ReadableStream with controller for SSE\n            const encoder = new TextEncoder();\n            let streamController: ReadableStreamDefaultController<Uint8Array>;\n            let keepAliveTimer: ReturnType<typeof setInterval> | undefined;\n            let cancelled = false;\n            // Captured by the cancel closure below before it's assigned (after\n            // replayEventsAfter resolves) — must be `let`.\n            // eslint-disable-next-line prefer-const\n            let replayedStreamId: string | undefined;\n\n            const readable = new ReadableStream<Uint8Array>({\n                start: controller => {\n                    streamController = controller;\n                },\n                cancel: () => {\n                    cancelled = true;\n                    if (keepAliveTimer !== undefined) clearInterval(keepAliveTimer);\n                    // Stream was cancelled by client — drop the mapping so a\n                    // subsequent reconnect with the same Last-Event-ID is not\n                    // refused with 409 by the conflict check above. Only delete\n                    // when the mapped entry is still THIS closure's controller:\n                    // a stale cancel from an earlier resume must not delete a\n                    // successor resumed stream a re-poll has since registered.\n                    if (replayedStreamId !== undefined && this._streamMapping.get(replayedStreamId)?.controller === streamController) {\n                        this._streamMapping.delete(replayedStreamId);\n                    }\n                }\n            });\n\n            // Replay events - returns the streamId for backwards compatibility\n            const replayedEventIds = new Set<string>();\n            replayedStreamId = await this._eventStore.replayEventsAfter(lastEventId, {\n                send: async (eventId: string, message: JSONRPCMessage) => {\n                    replayedEventIds.add(eventId);\n                    const success = this.writeSSEEvent(streamController!, encoder, message, eventId);\n                    if (!success) {\n                        try {\n                            streamController!.close();\n                        } catch {\n                            // Controller might already be closed\n                        }\n                    }\n                }\n            });\n\n            if (this._closed || cancelled) {\n                try {\n                    streamController!.close();\n                } catch {\n                    // Controller already closed/cancelled.\n                }\n                return this.createJsonErrorResponse(404, -32_001, 'Session not found');\n            }\n\n            this._streamMapping.get(replayedStreamId)?.cleanup();\n            this._streamMapping.set(replayedStreamId, {\n                controller: streamController!,\n                encoder,\n                replayedEventIds,\n                cleanup: () => {\n                    if (keepAliveTimer !== undefined) clearInterval(keepAliveTimer);\n                    this._streamMapping.delete(replayedStreamId!);\n                    try {\n                        streamController!.close();\n                    } catch {\n                        // Controller might already be closed\n                    }\n                }\n            });\n\n            // If this is a per-request stream and no in-flight request still\n            // targets this streamId, the request was already retired by the\n            // clean-return path while disconnected and the replay above just\n            // delivered the final response. Per the spec the server SHOULD\n            // close the SSE stream after the JSON-RPC response — close and\n            // unregister so a later reconnect isn't refused with 409. The\n            // standalone GET stream is never request-scoped and stays open.\n            if (replayedStreamId !== this._standaloneSseStreamId) {\n                const hasInFlightRequest = [...this._requestToStreamMapping.values()].includes(replayedStreamId);\n                if (!hasInFlightRequest) {\n                    this._streamMapping.delete(replayedStreamId);\n                    try {\n                        streamController!.close();\n                    } catch {\n                        // Controller might already be closed\n                    }\n                }\n            }\n\n            if (this._streamMapping.get(replayedStreamId)?.controller === streamController!) {\n                keepAliveTimer = this.startKeepAlive(streamController!, encoder);\n            }\n            return new Response(readable, { headers });\n        } catch (error) {\n            this.onerror?.(error as Error);\n            return this.createJsonErrorResponse(500, -32_000, 'Error replaying events');\n        }\n    }\n\n    /**\n     * Writes an event to an SSE stream via controller with proper formatting\n     */\n    private writeSSEEvent(\n        controller: ReadableStreamDefaultController<Uint8Array>,\n        encoder: InstanceType<typeof TextEncoder>,\n        message: JSONRPCMessage,\n        eventId?: string\n    ): boolean {\n        try {\n            let eventData = `event: message\\n`;\n            // Include event ID if provided - this is important for resumability\n            if (eventId) {\n                eventData += `id: ${eventId}\\n`;\n            }\n            eventData += `data: ${JSON.stringify(message)}\\n\\n`;\n            controller.enqueue(encoder.encode(eventData));\n            return true;\n        } catch (error) {\n            this.onerror?.(error as Error);\n            return false;\n        }\n    }\n\n    /**\n     * Handles unsupported requests (`PUT`, `PATCH`, etc.)\n     */\n    private handleUnsupportedRequest(): Response {\n        this.onerror?.(new Error('Method not allowed.'));\n        return Response.json(\n            {\n                jsonrpc: '2.0',\n                error: {\n                    code: -32_000,\n                    message: 'Method not allowed.'\n                },\n                id: null\n            },\n            {\n                status: 405,\n                headers: {\n                    Allow: 'GET, POST, DELETE',\n                    'Content-Type': 'application/json'\n                }\n            }\n        );\n    }\n\n    /**\n     * Handles `POST` requests containing JSON-RPC messages\n     */\n    private async handlePostRequest(req: Request, options?: HandleRequestOptions): Promise<Response> {\n        try {\n            // Validate the Accept header\n            const acceptHeader = req.headers.get('accept');\n            // The client MUST include an Accept header, listing both application/json and text/event-stream as supported content types.\n            // Accept is a comma-separated list, so a substring check is the intended semantics here (unlike Content-Type below).\n            // eslint-disable-next-line no-restricted-syntax\n            if (!acceptHeader?.includes('application/json') || !acceptHeader.includes('text/event-stream')) {\n                this.onerror?.(new Error('Not Acceptable: Client must accept both application/json and text/event-stream'));\n                return this.createJsonErrorResponse(\n                    406,\n                    -32_000,\n                    'Not Acceptable: Client must accept both application/json and text/event-stream'\n                );\n            }\n\n            // Parsed media type, never a substring match — see\n            // isJsonContentType. This check stays here for hand-wired\n            // transports; via createMcpHandler the entry's own check answers\n            // first.\n            const ct = req.headers.get('content-type');\n            if (!isJsonContentType(ct)) {\n                this.onerror?.(new Error('Unsupported Media Type: Content-Type must be application/json'));\n                return this.createJsonErrorResponse(415, -32_000, 'Unsupported Media Type: Content-Type must be application/json');\n            }\n\n            const request = req;\n\n            let rawMessage;\n            if (options?.parsedBody === undefined) {\n                try {\n                    const body = await readRequestBody(req, this._maxRequestBodySize);\n                    if (body.tooLarge) {\n                        const message = requestBodyTooLargeMessage(this._maxRequestBodySize);\n                        this.onerror?.(new Error(message));\n                        return this.createJsonErrorResponse(413, -32_000, message);\n                    }\n                    rawMessage = JSON.parse(body.text);\n                } catch (error) {\n                    this.onerror?.(error as Error);\n                    return this.createJsonErrorResponse(400, -32_700, 'Parse error: Invalid JSON');\n                }\n            } else {\n                rawMessage = options.parsedBody;\n            }\n            if (Array.isArray(rawMessage) && rawMessage.length > MAX_BATCH_SIZE) {\n                this.onerror?.(new Error(`Invalid Request: Batch must not exceed ${MAX_BATCH_SIZE} messages`));\n                return this.createJsonErrorResponse(400, -32_600, `Invalid Request: Batch must not exceed ${MAX_BATCH_SIZE} messages`);\n            }\n\n            let messages: JSONRPCMessage[];\n\n            // handle batch and single messages\n            try {\n                messages = Array.isArray(rawMessage)\n                    ? rawMessage.map(msg => JSONRPCMessageSchema.parse(msg))\n                    : [JSONRPCMessageSchema.parse(rawMessage)];\n            } catch (error) {\n                this.onerror?.(error as Error);\n                return this.createJsonErrorResponse(400, -32_700, 'Parse error: Invalid JSON-RPC message');\n            }\n\n            if (this._closed) {\n                return this.createJsonErrorResponse(404, -32_001, 'Session not found');\n            }\n\n            // Check if this is an initialization request\n            // https://spec.modelcontextprotocol.io/specification/2025-03-26/basic/lifecycle/\n            // The schema-validated guard (types/guards.ts → types/schemas.ts —\n            // NOT a wire/rev* import) gates a transport state mutation: a\n            // malformed `initialize` must NOT set `_initialized = true` before\n            // the protocol layer rejects it.\n            const isInitializationRequest = messages.some(element => isInitializeRequest(element));\n            if (isInitializationRequest) {\n                // If it's a server with session management and the session ID is already set we should reject the request\n                // to avoid re-initialization.\n                if (this._initialized && this.sessionId !== undefined) {\n                    this.onerror?.(new Error('Invalid Request: Server already initialized'));\n                    return this.createJsonErrorResponse(400, -32_600, 'Invalid Request: Server already initialized');\n                }\n                if (messages.length > 1) {\n                    this.onerror?.(new Error('Invalid Request: Only one initialization request is allowed'));\n                    return this.createJsonErrorResponse(400, -32_600, 'Invalid Request: Only one initialization request is allowed');\n                }\n                this.sessionId = this.sessionIdGenerator?.();\n                this._initialized = true;\n\n                // If we have a session ID and an onsessioninitialized handler, call it immediately\n                // This is needed in cases where the server needs to keep track of multiple sessions\n                if (this.sessionId && this._onsessioninitialized) {\n                    await Promise.resolve(this._onsessioninitialized(this.sessionId));\n                }\n            }\n            if (!isInitializationRequest) {\n                // If an Mcp-Session-Id is returned by the server during initialization,\n                // clients using the Streamable HTTP transport MUST include it\n                // in the Mcp-Session-Id header on all of their subsequent HTTP requests.\n                const sessionError = this.validateSession(req);\n                if (sessionError) {\n                    return sessionError;\n                }\n                // Mcp-Protocol-Version header is required for all requests after initialization.\n                const protocolError = this.validateProtocolVersion(req);\n                if (protocolError) {\n                    return protocolError;\n                }\n            }\n\n            if (this._closed) {\n                return this.createJsonErrorResponse(404, -32_001, 'Session not found');\n            }\n\n            // Check before opening SSE so an insufficient token can receive HTTP 403.\n            let scopeChallengeResponse: Response | undefined;\n            try {\n                scopeChallengeResponse = await this._checkScopeChallenge(messages, options?.authInfo);\n            } catch (error) {\n                this.onerror?.(error as Error);\n                return this.createJsonErrorResponse(500, -32_603, 'Internal server error');\n            }\n            if (scopeChallengeResponse) {\n                return scopeChallengeResponse;\n            }\n\n            // check if it contains requests\n            const hasRequests = messages.some(element => isJSONRPCRequest(element));\n\n            if (!hasRequests) {\n                // if it only contains notifications or responses, return 202\n                for (const message of messages) {\n                    this.onmessage?.(message, { authInfo: options?.authInfo, request });\n                }\n                return new Response(null, { status: 202 });\n            }\n\n            // The default behavior is to use SSE streaming\n            // but in some cases server will return JSON responses\n            const streamId = crypto.randomUUID();\n\n            // Extract protocol version for priming event decision.\n            // For initialize requests, get from request params.\n            // For other requests, get from header (already validated).\n            const initRequest = messages.find(m => isInitializeRequest(m));\n            const clientProtocolVersion = initRequest\n                ? initRequest.params.protocolVersion\n                : (req.headers.get('mcp-protocol-version') ?? DEFAULT_NEGOTIATED_PROTOCOL_VERSION);\n\n            if (this._enableJsonResponse) {\n                // For JSON response mode, return a Promise that resolves when all responses are ready\n                return new Promise<Response>(resolve => {\n                    this._streamMapping.set(streamId, {\n                        resolveJson: resolve,\n                        cleanup: () => {\n                            this._streamMapping.delete(streamId);\n                        }\n                    });\n\n                    for (const message of messages) {\n                        if (isJSONRPCRequest(message)) {\n                            this._requestToStreamMapping.set(message.id, streamId);\n                        }\n                    }\n\n                    for (const message of messages) {\n                        this.onmessage?.(message, { authInfo: options?.authInfo, request });\n                    }\n                });\n            }\n\n            // SSE streaming mode - use ReadableStream with controller for more reliable data pushing\n            const encoder = new TextEncoder();\n            let streamController: ReadableStreamDefaultController<Uint8Array>;\n            let keepAliveTimer: ReturnType<typeof setInterval> | undefined;\n\n            const readable = new ReadableStream<Uint8Array>({\n                start: controller => {\n                    streamController = controller;\n                },\n                cancel: () => {\n                    if (keepAliveTimer !== undefined) clearInterval(keepAliveTimer);\n                    // Stream was cancelled by client. Only drop the mapping\n                    // when it still points at THIS controller — a stale cancel\n                    // (firing after a Last-Event-ID reconnect registered a\n                    // resumed stream under the same streamId) must not delete\n                    // the successor.\n                    if (this._streamMapping.get(streamId)?.controller === streamController) {\n                        this._streamMapping.delete(streamId);\n                    }\n                }\n            });\n\n            const headers: Record<string, string> = {\n                'Content-Type': 'text/event-stream',\n                'Cache-Control': 'no-cache, no-transform',\n                Connection: 'keep-alive',\n                'X-Accel-Buffering': 'no'\n            };\n\n            // After initialization, always include the session ID if we have one\n            if (this.sessionId !== undefined) {\n                headers['mcp-session-id'] = this.sessionId;\n            }\n\n            // Store the response for this request to send messages back through this connection\n            // We need to track by request ID to maintain the connection\n            for (const message of messages) {\n                if (isJSONRPCRequest(message)) {\n                    this._streamMapping.set(streamId, {\n                        controller: streamController!,\n                        encoder,\n                        cleanup: () => {\n                            if (keepAliveTimer !== undefined) clearInterval(keepAliveTimer);\n                            this._streamMapping.delete(streamId);\n                            try {\n                                streamController!.close();\n                            } catch {\n                                // Controller might already be closed\n                            }\n                        }\n                    });\n                    this._requestToStreamMapping.set(message.id, streamId);\n                }\n            }\n\n            // Write priming event if event store is configured (after mapping is set up)\n            await this.writePrimingEvent(streamController!, encoder, streamId, clientProtocolVersion);\n\n            // handle each message\n            for (const message of messages) {\n                // Build closeSSEStream callback for requests when eventStore is configured\n                // AND client supports resumability (a supported protocol version >= 2025-11-25).\n                // Old clients can't resume if the stream is closed early because they\n                // didn't receive a priming event with an event ID.\n                let closeSSEStream: (() => void) | undefined;\n                let closeStandaloneSSEStream: (() => void) | undefined;\n                if (isJSONRPCRequest(message) && this._eventStore && this.supportsEmptySSEData(clientProtocolVersion)) {\n                    closeSSEStream = () => {\n                        this.closeSSEStream(message.id);\n                    };\n                    closeStandaloneSSEStream = () => {\n                        this.closeStandaloneSSEStream();\n                    };\n                }\n\n                this.onmessage?.(message, { authInfo: options?.authInfo, request, closeSSEStream, closeStandaloneSSEStream });\n            }\n            // The server SHOULD NOT close the SSE stream before sending all JSON-RPC responses\n            // This will be handled by the send() method when responses are ready\n\n            if (this._streamMapping.get(streamId)?.controller === streamController!) {\n                keepAliveTimer = this.startKeepAlive(streamController!, encoder);\n            }\n            return new Response(readable, { status: 200, headers });\n        } catch (error) {\n            // return JSON-RPC formatted error\n            this.onerror?.(error as Error);\n            return this.createJsonErrorResponse(400, -32_700, 'Parse error', { data: String(error) });\n        }\n    }\n\n    /**\n     * Handles `DELETE` requests to terminate sessions\n     */\n    private async handleDeleteRequest(req: Request): Promise<Response> {\n        const sessionError = this.validateSession(req);\n        if (sessionError) {\n            return sessionError;\n        }\n        const protocolError = this.validateProtocolVersion(req);\n        if (protocolError) {\n            return protocolError;\n        }\n\n        try {\n            await Promise.resolve(this._onsessionclosed?.(this.sessionId!));\n            return new Response(null, { status: 200 });\n        } finally {\n            await this.close();\n        }\n    }\n\n    /**\n     * Validates session ID for non-initialization requests.\n     * Returns `Response` error if invalid, `undefined` otherwise\n     */\n    private validateSession(req: Request): Response | undefined {\n        if (this.sessionIdGenerator === undefined) {\n            // If the sessionIdGenerator ID is not set, the session management is disabled\n            // and we don't need to validate the session ID\n            return undefined;\n        }\n        if (!this._initialized) {\n            // If the server has not been initialized yet, reject all requests\n            this.onerror?.(new Error('Bad Request: Server not initialized'));\n            return this.createJsonErrorResponse(400, -32_000, 'Bad Request: Server not initialized');\n        }\n\n        const sessionId = req.headers.get('mcp-session-id');\n\n        if (!sessionId) {\n            // Non-initialization requests without a session ID should return 400 Bad Request\n            this.onerror?.(new Error('Bad Request: Mcp-Session-Id header is required'));\n            return this.createJsonErrorResponse(400, -32_000, 'Bad Request: Mcp-Session-Id header is required');\n        }\n\n        if (sessionId !== this.sessionId) {\n            // Reject requests with invalid session ID with 404 Not Found\n            this.onerror?.(new Error('Session not found'));\n            return this.createJsonErrorResponse(404, -32_001, 'Session not found');\n        }\n\n        return undefined;\n    }\n\n    /**\n     * Validates the `MCP-Protocol-Version` header on incoming requests.\n     *\n     * For initialization: Version negotiation handles unknown versions gracefully\n     * (server responds with its supported version).\n     *\n     * For subsequent requests with `MCP-Protocol-Version` header:\n     * - Accept if in supported list\n     * - 400 if unsupported\n     *\n     * For HTTP requests without the `MCP-Protocol-Version` header:\n     * - Accept and default to the version negotiated at initialization\n     */\n    private validateProtocolVersion(req: Request): Response | undefined {\n        const protocolVersion = req.headers.get('mcp-protocol-version');\n\n        if (protocolVersion !== null && !this._supportedProtocolVersions.includes(protocolVersion)) {\n            const error = `Bad Request: Unsupported protocol version: ${protocolVersion} (supported versions: ${this._supportedProtocolVersions.join(', ')})`;\n            this.onerror?.(new Error(error));\n            return this.createJsonErrorResponse(400, -32_000, error);\n        }\n        return undefined;\n    }\n\n    async close(): Promise<void> {\n        if (this._closed) {\n            return;\n        }\n        this._closed = true;\n\n        // Close all SSE connections\n        for (const { cleanup } of this._streamMapping.values()) {\n            cleanup();\n        }\n        this._streamMapping.clear();\n\n        // Clear any pending responses\n        this._requestResponseMap.clear();\n        this.onclose?.();\n    }\n\n    /**\n     * Close an SSE stream for a specific request, triggering client reconnection.\n     * Use this to implement polling behavior during long-running operations -\n     * client will reconnect after the retry interval specified in the priming event.\n     */\n    closeSSEStream(requestId: RequestId): void {\n        const streamId = this._requestToStreamMapping.get(requestId);\n        if (!streamId) return;\n\n        const stream = this._streamMapping.get(streamId);\n        if (stream) {\n            stream.cleanup();\n        }\n    }\n\n    /**\n     * Close the standalone `GET` SSE stream, triggering client reconnection.\n     * Use this to implement polling behavior for server-initiated notifications.\n     */\n    closeStandaloneSSEStream(): void {\n        const stream = this._streamMapping.get(this._standaloneSseStreamId);\n        if (stream) {\n            stream.cleanup();\n        }\n    }\n\n    async send(message: JSONRPCMessage, options?: { relatedRequestId?: RequestId }): Promise<void> {\n        let requestId = options?.relatedRequestId;\n        if (isJSONRPCResultResponse(message) || isJSONRPCErrorResponse(message)) {\n            // If the message is a response, use the request ID from the message\n            requestId = message.id;\n        }\n\n        // Check if this message should be sent on the standalone SSE stream (no request ID)\n        // Ignore notifications from tools (which have relatedRequestId set)\n        // Those will be sent via dedicated response SSE streams\n        if (requestId === undefined) {\n            // For standalone SSE streams, we can only send requests and notifications\n            if (isJSONRPCResultResponse(message) || isJSONRPCErrorResponse(message)) {\n                throw new Error('Cannot send a response on a standalone SSE stream unless resuming a previous client request');\n            }\n\n            // Generate and store event ID if event store is provided\n            // Store even if stream is disconnected so events can be replayed on reconnect\n            let eventId: string | undefined;\n            if (this._eventStore) {\n                // Stores the event and gets the generated event ID\n                eventId = await this._eventStore.storeEvent(this._standaloneSseStreamId, message);\n            }\n\n            const standaloneSse = this._streamMapping.get(this._standaloneSseStreamId);\n            if (standaloneSse === undefined) {\n                // Stream is disconnected - event is stored for replay, nothing more to do\n                return;\n            }\n\n            // Send the message to the standalone SSE stream — unless the\n            // resumed stream's replay already delivered this exact eventId\n            // (identity dedup; mirrors the per-request path below).\n            if (\n                standaloneSse.controller &&\n                standaloneSse.encoder &&\n                (eventId === undefined || !standaloneSse.replayedEventIds?.has(eventId))\n            ) {\n                this.writeSSEEvent(standaloneSse.controller, standaloneSse.encoder, message, eventId);\n            }\n            return;\n        }\n\n        // Get the response for this request\n        const streamId = this._requestToStreamMapping.get(requestId);\n        if (!streamId) {\n            throw new Error(`No connection established for request ID: ${String(requestId)}`);\n        }\n\n        let stream = this._streamMapping.get(streamId);\n\n        if (!this._enableJsonResponse) {\n            // Store FIRST so request-related events emitted while the per-request\n            // stream is disconnected (e.g. after `closeSSE()` or a transient\n            // client drop) are replayed on Last-Event-ID reconnect — same\n            // store-first semantics as the standalone path above. Storage is\n            // keyed on request-in-flight (`_requestToStreamMapping` resolved\n            // `streamId` above), not on whether a live SSE writer currently\n            // exists: `_streamMapping` tracks the delivery target only. Per\n            // 2025-11-25 transports.mdx, disconnection SHOULD NOT be\n            // interpreted as the client cancelling its request.\n            let eventId: string | undefined;\n            if (this._eventStore) {\n                eventId = await this._eventStore.storeEvent(streamId, message);\n                // Re-read after the await: a Last-Event-ID reconnect during\n                // storeEvent() may have registered a resumed stream under this\n                // streamId (mirrors the standalone path's post-await read).\n                stream = this._streamMapping.get(streamId);\n            }\n            // Write the event to the response stream — unless the resumed\n            // stream's replay already delivered this exact eventId (the store\n            // committed before replay scanned, so replay wrote it; identity\n            // dedup only, no ordering assumption).\n            if (stream?.controller && stream?.encoder && (eventId === undefined || !stream.replayedEventIds?.has(eventId))) {\n                this.writeSSEEvent(stream.controller, stream.encoder, message, eventId);\n            }\n        }\n\n        if (isJSONRPCResultResponse(message) || isJSONRPCErrorResponse(message)) {\n            this._requestResponseMap.set(requestId, message);\n            const relatedIds = [...this._requestToStreamMapping.entries()].filter(([_, sid]) => sid === streamId).map(([id]) => id);\n\n            // Check if we have responses for all requests using this connection\n            const allResponsesReady = relatedIds.every(id => this._requestResponseMap.has(id));\n\n            if (allResponsesReady) {\n                if (!stream) {\n                    if (this._enableJsonResponse) {\n                        // JSON-mode requires a resolveJson sink; with no stream entry the\n                        // response is undeliverable.\n                        throw new Error(`No connection established for request ID: ${String(requestId)}`);\n                    }\n                    if (!this._eventStore) {\n                        // SSE-mode with no live writer and no event store: the\n                        // response is undeliverable AND not stored. Surface via\n                        // onerror so the drop is observable (matching pre-PR\n                        // behaviour), then run the bookkeeping cleanup so the\n                        // request id is retired.\n                        this.onerror?.(\n                            new Error(\n                                `Response for request ID ${String(requestId)} is undeliverable: per-request stream is disconnected and no eventStore is configured`\n                            )\n                        );\n                        for (const id of relatedIds) {\n                            this._requestResponseMap.delete(id);\n                            this._requestToStreamMapping.delete(id);\n                        }\n                        return;\n                    }\n                    // SSE-mode with no live writer and an event store configured:\n                    // the response was stored above for replay on Last-Event-ID\n                    // reconnect. Return cleanly after running the bookkeeping\n                    // cleanup so the request id is retired.\n                    for (const id of relatedIds) {\n                        this._requestResponseMap.delete(id);\n                        this._requestToStreamMapping.delete(id);\n                    }\n                    return;\n                }\n                if (this._enableJsonResponse && stream.resolveJson) {\n                    // All responses ready, send as JSON\n                    const headers: Record<string, string> = {\n                        'Content-Type': 'application/json'\n                    };\n                    if (this.sessionId !== undefined) {\n                        headers['mcp-session-id'] = this.sessionId;\n                    }\n\n                    const responses = relatedIds.map(id => this._requestResponseMap.get(id)!);\n\n                    if (responses.length === 1) {\n                        stream.resolveJson(Response.json(responses[0], { status: 200, headers }));\n                    } else {\n                        stream.resolveJson(Response.json(responses, { status: 200, headers }));\n                    }\n                    stream.cleanup();\n                } else {\n                    // End the SSE stream\n                    stream.cleanup();\n                }\n                // Clean up\n                for (const id of relatedIds) {\n                    this._requestResponseMap.delete(id);\n                    this._requestToStreamMapping.delete(id);\n                }\n            }\n        }\n    }\n}\n", "/**\n * `createMcpHandler` — the HTTP entry point for serving the 2026-07-28 protocol\n * revision, with old-school stateless 2025-era serving as the default fallback.\n *\n * The entry classifies every inbound HTTP request exactly once (body-primary,\n * via {@linkcode classifyInboundRequest}) and routes it:\n *\n * - Requests carrying the per-request `_meta` envelope are served on the modern\n *   path: a fresh server instance from the consumer's factory, marked as\n *   serving the claimed revision, connected to a single-exchange per-request\n *   transport.\n * - Requests without an envelope claim (including `initialize`, GET/DELETE\n *   session operations, and 2025-era notification POSTs) are legacy traffic.\n *   By default they are served per request through the stateless idiom from\n *   the same factory (`legacy: 'stateless'`); with `legacy: 'reject'` the\n *   endpoint is modern-only strict and answers the documented rejection cells\n *   instead — there is no 2025 serving in that mode.\n *\n * There is no handler-valued `legacy` option: an existing legacy deployment\n * (for example a sessionful streamable HTTP wiring) keeps serving 2025 traffic\n * by routing in user land with {@linkcode isLegacyRequest} — the entry's own\n * classification step, exported as a predicate — in front of a strict\n * (`legacy: 'reject'`) handler.\n *\n * The entry performs no Origin/Host validation (mount the origin/host\n * validation middleware in front of it) and no token verification — `authInfo`\n * is pass-through from the caller and is never derived from request headers.\n */\nimport type {\n    AuthInfo,\n    ClientCapabilities,\n    Implementation,\n    InboundClassificationOutcome,\n    InboundHttpRequest,\n    InboundLadderRejection,\n    InboundLegacyRoute,\n    InboundModernRoute,\n    RequestId\n} from '@modelcontextprotocol/core-internal';\nimport {\n    classifyInboundRequest,\n    CLIENT_CAPABILITIES_META_KEY,\n    CLIENT_INFO_META_KEY,\n    httpStatusForErrorCode,\n    isJsonContentType,\n    mediaTypeEssence,\n    missingClientCapabilities,\n    MissingRequiredClientCapabilityError,\n    modernOnlyStrictRejection,\n    requestMetaOf,\n    requiredClientCapabilitiesForRequest,\n    scanXMcpHeaderDeclarations,\n    SdkError,\n    SdkErrorCode,\n    setNegotiatedProtocolVersion,\n    SUPPORTED_MODERN_PROTOCOL_VERSIONS,\n    UnsupportedProtocolVersionError,\n    validateMcpParamHeaders,\n    validateStandardRequestHeaders\n} from '@modelcontextprotocol/core-internal';\n\nimport { invoke } from './invoke';\nimport { createListenRouter, DEFAULT_MAX_SUBSCRIPTIONS } from './listenRouter';\nimport { McpServer } from './mcp';\nimport type { PerRequestResponseMode } from './perRequestTransport';\nimport { DEFAULT_MAX_REQUEST_BODY_SIZE, readRequestBody, requestBodyTooLargeMessage, resolveMaxRequestBodySize } from './requestBody';\nimport { createScopeChallengeResponse, findScopeChallenge, scopeChallengeResourceMetadataUrl } from './scopeChallenge';\nimport type { Server } from './server';\nimport { installModernOnlyHandlers, seedClientIdentityFromEnvelope, serverIdentityOf } from './server';\nimport type { ServerEventBus, ServerNotifier } from './serverEventBus';\nimport { createServerNotifier, InMemoryServerEventBus } from './serverEventBus';\nimport { DEFAULT_SSE_KEEP_ALIVE_MS } from './sseKeepAlive';\nimport { WebStandardStreamableHTTPServerTransport } from './streamableHttp';\n\n/* ------------------------------------------------------------------------ *\n * Factory and handler types\n * ------------------------------------------------------------------------ */\n\n/**\n * Construction context handed to an {@linkcode McpServerFactory}.\n *\n * Both serving entries call the factory with this context whenever they need\n * a fresh instance: {@linkcode createMcpHandler} once per HTTP request, and\n * `serveStdio` (from `@modelcontextprotocol/server/stdio`) once per\n * connection — plus once for a `server/discover` probe instance that is\n * discarded again if the client falls back to `initialize`.\n *\n * Zero-argument factories remain assignable unchanged; the context exists for\n * factories that vary by principal or era (for example multi-tenant servers\n * keyed off `authInfo`, or a factory that registers extra surface only for one\n * era).\n */\nexport interface McpRequestContext {\n    /**\n     * The protocol era the constructed instance will serve: `modern` for\n     * 2026-07-28 (per-request envelope) traffic, `legacy` for 2025-era\n     * traffic. Under {@linkcode createMcpHandler} a `legacy` instance serves\n     * one request through the stateless legacy fallback (the default —\n     * `legacy: 'reject'` endpoints are strict and never construct one); under\n     * `serveStdio` it serves a connection that opened with the 2025 handshake\n     * and stays pinned to that era for its lifetime.\n     */\n    era: 'legacy' | 'modern';\n    /**\n     * Validated authentication information passed by the caller of the\n     * handler face (pass-through; HTTP only — `serveStdio` never sets it).\n     */\n    authInfo?: AuthInfo;\n    /** The original HTTP request being served, when available (HTTP only — `serveStdio` never sets it). */\n    requestInfo?: Request;\n}\n\n/**\n * A factory producing a fresh {@linkcode McpServer} (or low-level\n * {@linkcode Server}) instance for one serving unit: one HTTP request under\n * {@linkcode createMcpHandler}, or one connection (or one discarded\n * `server/discover` probe) under `serveStdio`. The same factory backs every\n * era either entry serves — define your tools, resources and prompts once and\n * serve them to both eras.\n */\nexport type McpServerFactory = (ctx: McpRequestContext) => McpServer | Server | Promise<McpServer | Server>;\n\n/** Caller-provided per-request inputs for {@linkcode McpHttpHandler.fetch} and fetch-shaped legacy handlers ({@linkcode LegacyHttpHandler}). */\nexport interface McpHandlerRequestOptions {\n    /**\n     * Validated authentication information for the request. Strictly\n     * pass-through: the handler never populates this from request headers and\n     * performs no token verification of its own.\n     */\n    authInfo?: AuthInfo;\n    /** A pre-parsed JSON request body (e.g. `req.body` from `express.json()`). */\n    parsedBody?: unknown;\n}\n\n/**\n * A fetch-shaped handler serving 2025-era traffic: the shape produced by\n * {@linkcode legacyStatelessFallback}, and the shape a hand-wired composition\n * routes legacy requests to (see {@linkcode isLegacyRequest}). It is not a\n * `legacy` option value — the entry's own legacy serving is selected by the\n * `'stateless' | 'reject'` posture only.\n */\nexport type LegacyHttpHandler = (request: Request, options?: McpHandlerRequestOptions) => Promise<Response>;\n\n/** Options for {@linkcode createMcpHandler}. */\nexport interface CreateMcpHandlerOptions {\n    /**\n     * How 2025-era (non-envelope) traffic is served:\n     *\n     * - `'stateless'` (the default, also when the option is omitted) —\n     *   old-school stateless serving: each legacy request is answered by a\n     *   fresh instance from the same factory over a streamable HTTP transport\n     *   constructed with only `sessionIdGenerator: undefined` (the established\n     *   stateless idiom). Because serving is per-request and stateless, GET and\n     *   DELETE (2025 session operations) are answered with `405` /\n     *   `Method not allowed.`.\n     * - `'reject'` — modern-only strict: legacy-classified requests are\n     *   rejected with the unsupported-protocol-version error naming the\n     *   endpoint's supported revisions (legacy-classified notifications are\n     *   acknowledged with `202` and dropped). **There is no 2025 serving in\n     *   this mode.**\n     *\n     * There is no handler-valued option: to keep an existing legacy deployment\n     * (for example a sessionful streamable HTTP wiring) serving 2025 traffic\n     * next to this entry, route in user land with {@linkcode isLegacyRequest}\n     * in front of a `legacy: 'reject'` handler — see that predicate's\n     * documentation for the pattern.\n     */\n    legacy?: 'stateless' | 'reject';\n    /** Callback for out-of-band errors and rejected requests (reporting only; it never alters the response). */\n    onerror?: (error: Error) => void;\n    /**\n     * Response shaping for modern (2026-07-28) request exchanges:\n     *\n     * - `'auto'` (default) — a single JSON body unless the handler emits a\n     *   related message before its result, in which case the response upgrades\n     *   to an SSE stream.\n     * - `'sse'` — always stream.\n     * - `'json'` — never stream. **Mid-call notifications (progress, logging,\n     *   any related message emitted before the result) are dropped** — only the\n     *   terminal result is delivered. Listen-class subscription streams are\n     *   always served over SSE regardless of this setting.\n     */\n    responseMode?: PerRequestResponseMode;\n    /**\n     * The change-event bus `subscriptions/listen` streams subscribe to.\n     *\n     * When omitted, an in-process {@link InMemoryServerEventBus} is created\n     * and the returned handler's `notify` sugar publishes onto it.\n     * Multi-process deployments supply their own implementation over their\n     * pub/sub backend; the same instance can be shared across handlers.\n     */\n    bus?: ServerEventBus;\n    /**\n     * Reject a new `subscriptions/listen` with `-32603` 'Subscription limit\n     * reached' (in-band, HTTP 200, before the ack) when this many subscription\n     * streams are already open on this handler.\n     * @default 1024\n     */\n    maxSubscriptions?: number;\n    /**\n     * SSE comment-frame keepalive interval for every SSE stream this handler\n     * serves. In modern `auto` mode it starts after SSE upgrade. Set to `0` to disable.\n     * @default 15000\n     */\n    keepAliveMs?: number;\n    /**\n     * Upper bound, in bytes, on a POST body the handler reads itself (the\n     * classification step and the stateless legacy leg). A body over the bound\n     * is answered `413` before anything is parsed or any server instance is\n     * created. Not applied to a body supplied as `parsedBody`. Must be a\n     * positive number. Hand-wired compositions routing on\n     * {@linkcode isLegacyRequest} pass the same value to the predicate.\n     * @default 4194304 (4 MiB)\n     */\n    maxRequestBodySize?: number;\n}\n\n/**\n * The handler returned by {@linkcode createMcpHandler}: a web-standard\n * `{ fetch, close, notify, bus }` object — the shape Workers/Bun/Deno expect\n * from `export default`. `fetch` is an arrow-assigned bound property: it can be\n * detached and passed around (`const { fetch } = handler`) without losing its\n * binding.\n *\n * Node frameworks (Express, Fastify, plain `node:http`) wrap the handler once\n * with `toNodeHandler(handler)` from `@modelcontextprotocol/node`.\n */\nexport interface McpHttpHandler {\n    /** Web-standard face: serve one HTTP request and resolve with the response. */\n    fetch: (request: Request, options?: McpHandlerRequestOptions) => Promise<Response>;\n    /**\n     * Tears down the modern leg: aborts in-flight modern exchanges and closes\n     * their per-request instances. Legacy serving is unaffected — the\n     * stateless fallback is per-request by construction and holds nothing\n     * between exchanges.\n     */\n    close: () => Promise<void>;\n    /**\n     * Typed publish-side facade over the handler's `subscriptions/listen` bus:\n     * each method publishes the corresponding change event to every open\n     * subscription stream that opted in to that notification type.\n     *\n     * Safe to call when no subscription is open (no-op).\n     */\n    notify: ServerNotifier;\n    /**\n     * The change-event bus this handler's `subscriptions/listen` streams\n     * subscribe to (the supplied `bus` option, or the auto-created in-process\n     * default).\n     */\n    bus: ServerEventBus;\n}\n\n/* ------------------------------------------------------------------------ *\n * Shared response helpers\n * ------------------------------------------------------------------------ */\n\n/**\n * The JSON-RPC id to echo on an entry-built error response: the body's `id`\n * when the body is a single JSON-RPC request whose id is a string or number,\n * `null` otherwise. Error responses must carry the id of the request they\n * correspond to whenever it could be read; `null` is reserved for the cases\n * where no single request id is determinable — unparseable bodies, body-less\n * methods, notifications, posted responses and batch arrays.\n */\nfunction echoableRequestId(body: unknown): RequestId | null {\n    if (body === null || typeof body !== 'object' || Array.isArray(body)) {\n        return null;\n    }\n    const { method, id } = body as { method?: unknown; id?: unknown };\n    if (typeof method !== 'string') {\n        return null;\n    }\n    return typeof id === 'string' || typeof id === 'number' ? id : null;\n}\n\nfunction jsonRpcErrorResponse(httpStatus: number, code: number, message: string, data?: unknown, id: RequestId | null = null): Response {\n    return Response.json(\n        {\n            jsonrpc: '2.0',\n            error: { code, message, ...(data !== undefined && { data }) },\n            id\n        },\n        { status: httpStatus }\n    );\n}\n\nfunction rejectionResponse(rejection: InboundLadderRejection, id: RequestId | null = null): Response {\n    return jsonRpcErrorResponse(rejection.httpStatus, rejection.code, rejection.message, rejection.data, id);\n}\n\nfunction toError(value: unknown): Error {\n    return value instanceof Error ? value : new Error(String(value));\n}\n\nfunction internalServerErrorResponse(id: RequestId | null = null): Response {\n    return jsonRpcErrorResponse(500, -32_603, 'Internal server error', undefined, id);\n}\n\n/** Throws when the factory returned an instance that is still connected to another exchange. */\nfunction assertNotServing(server: Server): void {\n    if (server.transport !== undefined) {\n        throw new Error('The factory returned an instance that is still serving another request. Return a new instance for each request.');\n    }\n}\n\n/* ------------------------------------------------------------------------ *\n * The default legacy fallback\n * ------------------------------------------------------------------------ */\n\n/**\n * The entry's default legacy serving (`legacy: 'stateless'`): per-request\n * stateless serving of 2025-era traffic using the same factory as the modern\n * path. Exported as a standalone building block for hand-wired compositions\n * (for example mounting legacy stateless serving on its own route next to a\n * strict modern endpoint).\n *\n * Each POST is served by a fresh instance from the factory connected to a\n * fresh streamable HTTP transport constructed with only\n * `sessionIdGenerator: undefined` — the established stateless idiom, unchanged.\n * Because serving is per-request and stateless, GET and DELETE (2025 session\n * operations) are answered with `405` / `Method not allowed.`, exactly like the\n * canonical stateless example.\n *\n * The optional `onerror` callback receives factory and serving failures on\n * this leg (reporting only — the response stays the 500 internal-error body).\n * The entry passes its own `onerror` here when expanding the default, so\n * legacy-leg failures are never silently swallowed.\n */\nfunction createLegacyStatelessFallback(\n    factory: McpServerFactory,\n    onerror?: (error: Error) => void,\n    keepAliveMs?: number,\n    maxRequestBodySize?: number\n): LegacyHttpHandler {\n    return async (request, options) => {\n        if (request.method.toUpperCase() !== 'POST') {\n            return jsonRpcErrorResponse(405, -32_000, 'Method not allowed.');\n        }\n        try {\n            const product = await factory({\n                era: 'legacy',\n                ...(options?.authInfo !== undefined && { authInfo: options.authInfo }),\n                requestInfo: request\n            });\n            const transport = new WebStandardStreamableHTTPServerTransport({\n                sessionIdGenerator: undefined,\n                ...(keepAliveMs !== undefined && { keepAliveMs }),\n                ...(maxRequestBodySize !== undefined && { maxRequestBodySize })\n            });\n            await product.connect(transport);\n\n            const teardown = () => {\n                void transport.close().catch(() => {});\n                void product.close().catch(() => {});\n            };\n            // Tear the per-request pair down when the client goes away before\n            // the exchange completes.\n            request.signal?.addEventListener('abort', teardown, { once: true });\n\n            const response = await transport.handleRequest(request, {\n                ...(options?.authInfo !== undefined && { authInfo: options.authInfo }),\n                ...(options?.parsedBody !== undefined && { parsedBody: options.parsedBody })\n            });\n            if (response.body === null || mediaTypeEssence(response.headers.get('content-type')) !== 'text/event-stream') {\n                // Non-streaming exchange (a buffered JSON body or a body-less\n                // ack): the response is complete, release the pair now.\n                teardown();\n                return response;\n            }\n            // Streaming exchange: the legacy transport answers request-bearing\n            // POSTs over SSE, so the exchange is only over once the stream has\n            // been fully delivered. Wrap the body so the pair is torn down on\n            // completion, on a producer error, or when the consumer abandons\n            // the stream — the fetch-world analog of the canonical stateless\n            // example's close-on-response-end.\n            const reader = response.body.getReader();\n            let toreDown = false;\n            const completeExchange = () => {\n                if (!toreDown) {\n                    toreDown = true;\n                    teardown();\n                }\n            };\n            const monitoredBody = new ReadableStream<Uint8Array>({\n                pull: async controller => {\n                    try {\n                        const { done, value } = await reader.read();\n                        if (done) {\n                            completeExchange();\n                            controller.close();\n                            return;\n                        }\n                        if (value !== undefined) {\n                            controller.enqueue(value);\n                        }\n                    } catch (error) {\n                        completeExchange();\n                        controller.error(error);\n                    }\n                },\n                cancel: reason => {\n                    completeExchange();\n                    return reader.cancel(reason).catch(() => {});\n                }\n            });\n            return new Response(monitoredBody, {\n                status: response.status,\n                statusText: response.statusText,\n                headers: response.headers\n            });\n        } catch (error) {\n            try {\n                onerror?.(toError(error));\n            } catch {\n                // Reporting must never alter the response.\n            }\n            return internalServerErrorResponse(echoableRequestId(options?.parsedBody));\n        }\n    };\n}\n\n/** Options for {@linkcode legacyStatelessFallback}. */\nexport interface LegacyStatelessFallbackOptions {\n    /**\n     * Upper bound, in bytes, on a POST body the leg reads itself (not applied\n     * to a body supplied as `parsedBody`). Must be a positive number.\n     * @default 4194304 (4 MiB)\n     */\n    maxRequestBodySize?: number;\n}\n\nexport function legacyStatelessFallback(\n    factory: McpServerFactory,\n    onerror?: (error: Error) => void,\n    options?: LegacyStatelessFallbackOptions\n): LegacyHttpHandler {\n    return createLegacyStatelessFallback(factory, onerror, undefined, resolveMaxRequestBodySize(options?.maxRequestBodySize));\n}\n\n/* ------------------------------------------------------------------------ *\n * The entry's classification step (shared with isLegacyRequest)\n * ------------------------------------------------------------------------ */\n\n/**\n * Read the SEP-2243 standard request headers off the inbound request.\n *\n * Both halves of the standard-header story need them — the body-primary\n * classifier for its cross-check cells, and\n * {@linkcode validateStandardRequestHeaders} for the presence half — and a\n * header read at one site but not the other is precisely how a required header\n * goes unenforced: that divergence is what let a modern POST omitting\n * `MCP-Protocol-Version` be served. Read them here once so a header added to\n * {@linkcode InboundHttpRequest} reaches both sites together.\n */\nfunction standardHeadersOf(request: Request): Omit<InboundHttpRequest, 'httpMethod' | 'body'> {\n    return {\n        protocolVersionHeader: request.headers.get('mcp-protocol-version') ?? undefined,\n        mcpMethodHeader: request.headers.get('mcp-method') ?? undefined,\n        mcpNameHeader: request.headers.get('mcp-name') ?? undefined\n    };\n}\n\n/** The outcome of the entry's classification step for one inbound HTTP request. */\ntype EntryClassification =\n    /** The body bytes could not be read at all (a failing stream, not malformed JSON). */\n    | { step: 'unreadable-body' }\n    /** A POST body over the size limit; nothing past the limit was read. */\n    | { step: 'body-too-large' }\n    /** A POST with an empty or non-JSON body: nothing to classify, so there is no envelope claim. */\n    | { step: 'no-json-body'; forwardRequest: Request }\n    /** A classifiable request, with the classifier's routing outcome. */\n    | { step: 'classified'; outcome: InboundClassificationOutcome; body: unknown; parsedBody: unknown; forwardRequest: Request };\n\n/**\n * The entry's classification step: read the request body exactly once (unless\n * a pre-parsed body is supplied) and classify the request with\n * {@linkcode classifyInboundRequest}. This is the single code path behind both\n * {@linkcode createMcpHandler}'s routing and the exported\n * {@linkcode isLegacyRequest} predicate, so the two can never disagree.\n *\n * Pass `needsForward: false` when the caller never reads `forwardRequest` —\n * the body-preserving clone is then skipped and `forwardRequest` is the\n * (consumed) input request.\n */\nasync function classifyEntryRequest(\n    request: Request,\n    providedParsedBody?: unknown,\n    needsForward = true,\n    maxRequestBodySize: number = DEFAULT_MAX_REQUEST_BODY_SIZE\n): Promise<EntryClassification> {\n    const httpMethod = request.method.toUpperCase();\n\n    let body: unknown;\n    let parsedBody = providedParsedBody;\n    let forwardRequest = request;\n    let unparseable = false;\n\n    if (httpMethod === 'POST') {\n        if (parsedBody === undefined) {\n            // Read the body exactly once for classification, keeping an unread\n            // copy of the original bytes for the legacy leg (web-standard\n            // request bodies are single-use) when the caller needs it.\n            if (needsForward) {\n                forwardRequest = request.clone();\n            }\n            let bodyText: string;\n            try {\n                const read = await readRequestBody(request, maxRequestBodySize);\n                if (read.tooLarge) {\n                    return { step: 'body-too-large' };\n                }\n                bodyText = read.text;\n            } catch {\n                return { step: 'unreadable-body' };\n            }\n            try {\n                body = bodyText.length === 0 ? undefined : JSON.parse(bodyText);\n            } catch {\n                unparseable = true;\n            }\n            if (!unparseable && body !== undefined) {\n                parsedBody = body;\n            }\n        } else {\n            body = parsedBody;\n        }\n\n        if (unparseable || body === undefined) {\n            return { step: 'no-json-body', forwardRequest };\n        }\n    }\n\n    const outcome = classifyInboundRequest({\n        httpMethod,\n        ...standardHeadersOf(request),\n        ...(body !== undefined && { body })\n    });\n    return { step: 'classified', outcome, body, parsedBody, forwardRequest };\n}\n\n/** Options for {@linkcode isLegacyRequest}. */\nexport interface IsLegacyRequestOptions {\n    /**\n     * The same `maxRequestBodySize` the handler the predicate routes for was\n     * created with, so the two read the body under one bound (a body over it\n     * classifies `false`; the modern handler answers `413`).\n     * @default 4194304 (4 MiB)\n     */\n    maxRequestBodySize?: number;\n}\n\n/**\n * Whether {@linkcode createMcpHandler} would route this request to its legacy\n * (2025-era) serving rather than the modern (2026-07-28) path.\n *\n * Call it with just the request: `await isLegacyRequest(request)`. For a\n * `POST` the body is read from an internal clone, so the request you pass\n * stays fully readable for whichever handler you route it to — no second\n * argument is needed. (In a Node `(req, res)` handler, build that `Request`\n * with `toWebRequest(req)` from `@modelcontextprotocol/node`; behind a body\n * parser, which has already drained the Node stream, build it as\n * `toWebRequest(req, req.body)` so the bytes come from the parsed body —\n * either way the predicate still takes just the request.) The optional\n * `parsedBody` is a perf escape hatch for a body you already hold parsed:\n * pass it and the predicate classifies from the value directly, reading and\n * cloning nothing. It is needed, not just faster, when the request's own\n * body was already read — the internal clone is then impossible (cloning a\n * used body throws a `TypeError`), so such a single-argument call rejects\n * instead of guessing.\n *\n * This is the entry's own classification step exported as a predicate — it\n * runs exactly the code `createMcpHandler` runs to make the routing decision,\n * not a re-implementation — so a hand-wired composition that branches on it\n * can never disagree with the entry. It is classification only: hand-wired\n * compositions must validate Content-Type themselves (415 for POSTs whose\n * media type is not `application/json`, via {@linkcode isJsonContentType})\n * before dispatching either leg — routing the legacy leg into the SDK\n * transports gets their built-in check, but a custom modern leg has none. Use it to keep an existing legacy\n * deployment (for example a sessionful streamable HTTP wiring) serving 2025\n * traffic next to a strict modern endpoint, now that the entry has no\n * handler-valued `legacy` option:\n *\n * ```ts\n * import { createMcpHandler, isLegacyRequest } from '@modelcontextprotocol/server';\n *\n * const modern = createMcpHandler(factory, { legacy: 'reject' });\n *\n * export default {\n *     async fetch(request: Request): Promise<Response> {\n *         if (await isLegacyRequest(request)) {\n *             // e.g. an existing sessionful WebStandardStreamableHTTPServerTransport wiring\n *             return myExistingLegacyHandler(request);\n *         }\n *         return modern.fetch(request);\n *     }\n * };\n * ```\n *\n * Semantics (identical to the entry's routing):\n *\n * - Returns `true` only for requests with no per-request `_meta` envelope\n *   claim: claim-less POSTs (including the `initialize` handshake and 2025-era\n *   notification POSTs without a modern protocol-version header), body-less\n *   GET/DELETE session operations, all-legacy JSON-RPC batch arrays, posted\n *   JSON-RPC responses, and POSTs whose body is empty or not valid JSON.\n * - Returns `false` for everything the modern path answers, including its\n *   validation-ladder rejections: a request carrying the envelope claim (even\n *   one naming a revision the endpoint does not serve — the modern path\n *   answers it with the unsupported-protocol-version error), a malformed\n *   envelope behind a present claim (answered `-32602`), a request whose\n *   `MCP-Protocol-Version` header names a modern revision but that lacks the\n *   envelope (`-32602`), header/body mismatches (`-32020`), and a POST body\n *   over the size limit (413). Consumers\n *   routing on the predicate must send `false` traffic to the modern handler,\n *   never to a legacy handler — the modern path owns those error answers.\n * - `server/discover` probes sent by negotiating clients always carry the\n *   envelope claim, so they are never legacy; a hand-built claim-less POST to\n *   a method named `server/discover` has no claim and classifies legacy,\n *   exactly as the entry itself routes it.\n */\nexport async function isLegacyRequest(request: Request, parsedBody?: unknown, options?: IsLegacyRequestOptions): Promise<boolean> {\n    const maxRequestBodySize = resolveMaxRequestBodySize(options?.maxRequestBodySize);\n    // Classify a clone so the caller's request body stays readable; with a\n    // pre-parsed body (or a body-less method) nothing is read and no clone is\n    // needed. The predicate never reads forwardRequest, so the classification\n    // step's own forwarding clone is skipped.\n    const probe = parsedBody === undefined && request.method.toUpperCase() === 'POST' ? request.clone() : request;\n    const classified = await classifyEntryRequest(probe, parsedBody, false, maxRequestBodySize);\n    return classified.step === 'no-json-body' || (classified.step === 'classified' && classified.outcome.kind === 'legacy');\n}\n\n/* ------------------------------------------------------------------------ *\n * The entry\n * ------------------------------------------------------------------------ */\n\n/**\n * Creates an HTTP handler that serves the 2026-07-28 protocol revision from a\n * per-request server factory and, by default, falls back to old-school\n * stateless serving for 2025-era traffic. Pass `legacy: 'reject'` for a\n * modern-only strict endpoint.\n *\n * Mounting: `handler.fetch` is the web-standard face (Cloudflare Workers,\n * Deno, Bun, Hono's `c.req.raw`); for Express/Fastify/plain `node:http`, wrap\n * the handler once with `toNodeHandler(handler)` from\n * `@modelcontextprotocol/node`. When mounting bare on a fetch-native runtime,\n * put Origin/Host validation in front of the handler — the entry itself is\n * deliberately validation-free:\n *\n * ```ts\n * import { hostHeaderValidationResponse, originValidationResponse, localhostAllowedHostnames, localhostAllowedOrigins } from '@modelcontextprotocol/server';\n *\n * export default {\n *     async fetch(request: Request): Promise<Response> {\n *         const rejected =\n *             hostHeaderValidationResponse(request, localhostAllowedHostnames()) ??\n *             originValidationResponse(request, localhostAllowedOrigins());\n *         return rejected ?? handler.fetch(request);\n *     }\n * };\n * ```\n *\n * Use ONE factory for both legs: the same tools/resources/prompts definition\n * backs the modern path and the stateless legacy fallback, so the two eras can\n * never drift apart. To keep an existing legacy deployment (for example a\n * sessionful streamable HTTP wiring) serving 2025 traffic instead of the\n * stateless fallback, route in user land with {@linkcode isLegacyRequest} in\n * front of a strict handler — see that predicate's documentation for the\n * pattern. Power users composing transport-neutral routing can also use the\n * exported building blocks directly: {@linkcode classifyInboundRequest} for\n * the era decision and `PerRequestHTTPServerTransport` for single-exchange\n * serving — such compositions must reject POSTs whose Content-Type media type\n * is not `application/json` (415) before parsing the body, using\n * {@linkcode isJsonContentType}; neither building block performs this\n * validation itself.\n *\n * The entry performs no token verification: `authInfo` given to `fetch` is\n * passed through to handlers and the factory as-is and is never derived from\n * request headers.\n */\nexport function createMcpHandler(factory: McpServerFactory, options: CreateMcpHandlerOptions = {}): McpHttpHandler {\n    const { legacy, onerror, responseMode } = options;\n    const maxRequestBodySize = resolveMaxRequestBodySize(options.maxRequestBodySize);\n\n    // Construction-time guard for JavaScript callers passing a handler as the\n    // legacy value: the option only selects a posture ('stateless' | 'reject').\n    // Failing loudly here beats silently treating the handler as the default.\n    if (typeof legacy === 'function') {\n        throw new TypeError(\n            \"The 'legacy' option only accepts 'stateless' or 'reject', not a handler function. To serve 2025-era traffic with your own \" +\n                \"handler, route in user land with the exported isLegacyRequest(request) predicate in front of a strict (legacy: 'reject') handler.\"\n        );\n    }\n\n    /** Modern per-request instances with an exchange still in flight (close() tears these down). */\n    const inflight = new Set<Server>();\n    let closed = false;\n\n    const reportError = (error: Error) => {\n        try {\n            onerror?.(error);\n        } catch {\n            // Reporting must never alter the response.\n        }\n    };\n\n    const bus: ServerEventBus = options.bus ?? new InMemoryServerEventBus(reportError);\n    const notify = createServerNotifier(bus);\n    const listenRouter = createListenRouter({\n        bus,\n        maxSubscriptions: options.maxSubscriptions ?? DEFAULT_MAX_SUBSCRIPTIONS,\n        keepAliveMs: options.keepAliveMs ?? DEFAULT_SSE_KEEP_ALIVE_MS,\n        onerror: reportError\n    });\n    if (responseMode === 'json') {\n        // eslint-disable-next-line no-console\n        console.warn(\n            \"responseMode: 'json' drops mid-call notifications. subscriptions/listen streams are always served over SSE regardless; \" +\n                'other notifications emitted before a result are dropped.'\n        );\n    }\n\n    // The default posture is the stateless fallback; 'reject' is the only way\n    // to turn legacy serving off (modern-only strict).\n    const legacyHandler: LegacyHttpHandler | undefined =\n        legacy === 'reject' ? undefined : createLegacyStatelessFallback(factory, reportError, options.keepAliveMs, maxRequestBodySize);\n\n    async function serveModern(route: InboundModernRoute, request: Request, authInfo: AuthInfo | undefined): Promise<Response> {\n        const claimedRevision = route.classification.revision;\n        if (claimedRevision === undefined || !SUPPORTED_MODERN_PROTOCOL_VERSIONS.includes(claimedRevision)) {\n            // The claim names a revision this endpoint does not serve (an\n            // unknown future revision, or a 2025-era revision delivered via the\n            // envelope mechanism).\n            const error = new UnsupportedProtocolVersionError({\n                supported: [...SUPPORTED_MODERN_PROTOCOL_VERSIONS],\n                requested: claimedRevision ?? 'unknown'\n            });\n            reportError(error);\n            return jsonRpcErrorResponse(400, error.code, error.message, error.data, echoableRequestId(route.message));\n        }\n\n        // SEP-2243 standard-header presence (`MCP-Protocol-Version`,\n        // `Mcp-Method`) and `Mcp-Name` cross-check\n        // (`standard-header-validation` rung; the `MCP-Protocol-Version` and\n        // `Mcp-Method` *mismatch* cells are already answered inside\n        // `classifyInboundRequest` on the edge `era-classification` rung,\n        // which only cross-checks a protocol-version header that is present).\n        // Evaluated after the supported-revision\n        // gate so an envelope naming a revision this endpoint does not serve\n        // is still answered with `-32022` (the supported list is the more\n        // useful answer to a client speaking the wrong revision); evaluated\n        // before the capability gate, the factory call, and the\n        // `Mcp-Param-*` rung so a request that fails several rungs is\n        // answered by the standard-header rung first.\n        const stdHeaderRejection = validateStandardRequestHeaders({ httpMethod: request.method, ...standardHeadersOf(request) }, route);\n        if (stdHeaderRejection !== undefined) {\n            reportError(new Error(`Rejected inbound request (${stdHeaderRejection.cell}): ${stdHeaderRejection.message}`));\n            return rejectionResponse(stdHeaderRejection, echoableRequestId(route.message));\n        }\n\n        const meta = route.messageKind === 'request' ? requestMetaOf(route.message.params) : undefined;\n        const declaredClientCapabilities = meta?.[CLIENT_CAPABILITIES_META_KEY] as ClientCapabilities | undefined;\n\n        // Pre-dispatch capability gate: a request to a method whose processing\n        // structurally requires a client capability the request's validated\n        // envelope did not declare is refused here, before any instance is\n        // constructed or dispatched. Answering at the entry short-circuits\n        // before factory construction and pins the spec-mandated HTTP 400 for\n        // this error unconditionally; a handler-time -32021 (the\n        // input_required gate) also maps to 400 at the per-request transport,\n        // but only while no response has been committed.\n        if (route.messageKind === 'request') {\n            const required = requiredClientCapabilitiesForRequest(route.message.method);\n            if (required !== undefined) {\n                const missing = missingClientCapabilities(required, declaredClientCapabilities);\n                if (missing !== undefined) {\n                    const error = new MissingRequiredClientCapabilityError({ requiredCapabilities: missing });\n                    reportError(error);\n                    return jsonRpcErrorResponse(\n                        httpStatusForErrorCode(error.code, 'ladder'),\n                        error.code,\n                        error.message,\n                        error.data,\n                        route.message.id\n                    );\n                }\n            }\n        }\n\n        const product = await factory({\n            era: 'modern',\n            ...(authInfo !== undefined && { authInfo }),\n            requestInfo: request\n        });\n        const server = product instanceof McpServer ? product.server : product;\n        assertNotServing(server);\n\n        // Entry-handled `subscriptions/listen`: the router owns ack-first /\n        // per-stream filtering / subscription-id stamping / keepalive /\n        // capacity / teardown. The factory IS constructed for listen — to read\n        // the instance's declared capabilities only, so the acknowledged\n        // filter reflects what the server can actually deliver. Unlike the\n        // discover path (which connects via the per-request transport and tears\n        // down with it), the probe instance is never connected: capabilities\n        // are read off the unconnected instance and it is closed immediately.\n        // Authorization the consumer performs inside the factory therefore DOES\n        // see listen requests, although token verification still belongs at the\n        // middleware layer mounted in front of this entry.\n        if (route.messageKind === 'request' && route.message.method === 'subscriptions/listen') {\n            const capabilities = server.getCapabilities();\n            const serverInfo = serverIdentityOf(server);\n            void product.close().catch(reportError);\n            return listenRouter.serve(route.message, request.signal, capabilities, serverInfo);\n        }\n\n        // SEP-2243 `Mcp-Param-*` server-side validation (pre-dispatch ladder\n        // rung): for a `tools/call`, look up the named tool's JSON inputSchema\n        // on the just-produced instance and compare every `x-mcp-header`\n        // declaration against the request's `Mcp-Param-{Name}` headers and the\n        // body `arguments`. A mismatch (or a missing header for a present body\n        // value, or an invalid Base64 sentinel) emits the same `400` /\n        // `-32020` (`HeaderMismatch`) shape the edge cross-checks use. Only\n        // applied when the factory returns an `McpServer` (the registry is the\n        // schema source); a low-level `Server` factory has no registry, so\n        // there is nothing to validate against.\n        if (route.messageKind === 'request' && route.message.method === 'tools/call' && product instanceof McpServer) {\n            const callParams = route.message.params as { name?: string; arguments?: Record<string, unknown> } | undefined;\n            const toolName = typeof callParams?.name === 'string' ? callParams.name : undefined;\n            const inputSchema = toolName === undefined ? undefined : product.toolInputSchemaJson(toolName);\n            if (inputSchema !== undefined) {\n                const scan = scanXMcpHeaderDeclarations(inputSchema);\n                if (scan.valid && scan.declarations.length > 0) {\n                    const rejection = validateMcpParamHeaders(scan.declarations, callParams?.arguments, request.headers);\n                    if (rejection !== undefined) {\n                        void product.close().catch(reportError);\n                        reportError(new Error(`Rejected inbound request (${rejection.cell}): ${rejection.message}`));\n                        return rejectionResponse(rejection, route.message.id);\n                    }\n                }\n            }\n        }\n\n        // Run scope preflight after Mcp-Param headers have been checked against\n        // the body. Active whenever the factory's instance registers a\n        // per-primitive scopeChallenge callback — no handler-level\n        // configuration exists: the challenge's resource_metadata parameter is\n        // derived from the verified AuthInfo (stamped by the bearer-auth gate,\n        // or the token's RFC 8707 resource identifier) and omitted otherwise.\n        if (route.messageKind === 'request' && product instanceof McpServer) {\n            try {\n                const challenge = await findScopeChallenge([route.message], authInfo, context => product.resolveScopeChallenge(context));\n                if (challenge !== undefined) {\n                    void product.close().catch(reportError);\n                    return createScopeChallengeResponse(challenge, scopeChallengeResourceMetadataUrl(authInfo));\n                }\n            } catch (error) {\n                void product.close().catch(reportError);\n                reportError(toError(error));\n                return internalServerErrorResponse(route.message.id);\n            }\n        }\n\n        // Checked again after the awaits above, before anything is written to the instance.\n        assertNotServing(server);\n\n        // Era-write at instance binding, then modern-only handler installation —\n        // both before the instance is connected to the per-request transport.\n        setNegotiatedProtocolVersion(server, claimedRevision);\n        installModernOnlyHandlers(server, SUPPORTED_MODERN_PROTOCOL_VERSIONS);\n\n        if (meta !== undefined) {\n            seedClientIdentityFromEnvelope(server, {\n                clientInfo: meta[CLIENT_INFO_META_KEY] as Implementation | undefined,\n                clientCapabilities: declaredClientCapabilities\n            });\n        }\n\n        // Track the instance until its exchange tears down so close() can abort it.\n        const previousOnClose = server.onclose;\n        inflight.add(server);\n        const onExchangeClose = () => {\n            inflight.delete(server);\n            // Restore by identity so a handler installed during the exchange is kept.\n            if (server.onclose === onExchangeClose) {\n                server.onclose = previousOnClose;\n            }\n            previousOnClose?.();\n        };\n        server.onclose = onExchangeClose;\n\n        try {\n            const response = await invoke(product, route.message, {\n                classification: route.classification,\n                request,\n                ...(authInfo !== undefined && { authInfo }),\n                ...(responseMode !== undefined && { responseMode }),\n                ...(options.keepAliveMs !== undefined && { keepAliveMs: options.keepAliveMs })\n            });\n            if (route.messageKind === 'notification') {\n                // Notification exchanges have no terminal response to ride the\n                // transport's auto-close, so release the per-request instance here.\n                queueMicrotask(() => void server.close().catch(() => {}));\n            }\n            return response;\n        } catch (error) {\n            if (error instanceof SdkError && error.code === SdkErrorCode.ConnectionClosed) {\n                // The client went away before a response existed; there is\n                // nobody left to answer.\n                return new Response(null, { status: 499 });\n            }\n            // No terminal response will ride the transport's close chain after a\n            // failure here: close the per-request instance explicitly and drop it\n            // from the in-flight set so repeated failures cannot accumulate\n            // connected instances until handler.close().\n            await server.close().catch(() => {});\n            inflight.delete(server);\n            reportError(toError(error));\n            return internalServerErrorResponse(echoableRequestId(route.message));\n        }\n    }\n\n    async function serveLegacyRoute(\n        route: InboundLegacyRoute,\n        forwardRequest: Request,\n        authInfo: AuthInfo | undefined,\n        parsedBody: unknown\n    ): Promise<Response> {\n        if (legacyHandler !== undefined) {\n            return legacyHandler(forwardRequest, {\n                ...(authInfo !== undefined && { authInfo }),\n                ...(parsedBody !== undefined && { parsedBody })\n            });\n        }\n        const strict = modernOnlyStrictRejection(route, SUPPORTED_MODERN_PROTOCOL_VERSIONS);\n        if (strict === undefined) {\n            // Legacy-classified notification on a modern-only endpoint:\n            // acknowledged and dropped, never dispatched.\n            return new Response(null, { status: 202 });\n        }\n        reportError(new Error(`Rejected 2025-era request on a modern-only endpoint (${strict.cell}): ${strict.message}`));\n        return rejectionResponse(strict, echoableRequestId(parsedBody));\n    }\n\n    async function handle(request: Request, requestOptions?: McpHandlerRequestOptions): Promise<Response> {\n        const authInfo = requestOptions?.authInfo;\n\n        // Content-Type check, answered before the body is read (parsed media\n        // type — see isJsonContentType). Load-bearing for the modern leg,\n        // whose ladder does not inspect Content-Type; the legacy transport\n        // keeps its own check for hand-wired use, so via this entry a\n        // doubly-invalid request answers 415 here before the transport's 406\n        // Accept check would.\n        if (request.method.toUpperCase() === 'POST' && !isJsonContentType(request.headers.get('content-type'))) {\n            reportError(new Error('Unsupported Media Type: Content-Type must be application/json'));\n            return jsonRpcErrorResponse(415, -32_000, 'Unsupported Media Type: Content-Type must be application/json');\n        }\n\n        const classified = await classifyEntryRequest(request, requestOptions?.parsedBody, true, maxRequestBodySize);\n\n        if (classified.step === 'unreadable-body') {\n            return jsonRpcErrorResponse(400, -32_700, 'Parse error: the request body could not be read');\n        }\n        if (classified.step === 'body-too-large') {\n            return jsonRpcErrorResponse(413, -32_000, requestBodyTooLargeMessage(maxRequestBodySize));\n        }\n        if (classified.step === 'no-json-body') {\n            // No JSON body to classify: there is no envelope claim, so this is\n            // legacy traffic when legacy serving is configured (the legacy leg\n            // answers its own parse error, unchanged), and a parse error\n            // otherwise.\n            if (legacyHandler !== undefined) {\n                return legacyHandler(classified.forwardRequest, { ...(authInfo !== undefined && { authInfo }) });\n            }\n            return jsonRpcErrorResponse(400, -32_700, 'Parse error: the request body is not valid JSON');\n        }\n\n        const { outcome, body, parsedBody, forwardRequest } = classified;\n        try {\n            switch (outcome.kind) {\n                case 'reject': {\n                    reportError(new Error(`Rejected inbound request (${outcome.cell}): ${outcome.message}`));\n                    return rejectionResponse(outcome, echoableRequestId(body));\n                }\n                case 'modern': {\n                    return await serveModern(outcome, request, authInfo);\n                }\n                case 'legacy': {\n                    return await serveLegacyRoute(outcome, forwardRequest, authInfo, parsedBody);\n                }\n            }\n        } catch (error) {\n            // Entry-internal failure while serving a classified request (a\n            // throwing factory or a failed connect, on either leg): the parsed\n            // body is in scope here, so the 500 body echoes the request id when\n            // it could be read.\n            reportError(toError(error));\n            return internalServerErrorResponse(echoableRequestId(body));\n        }\n    }\n\n    const fetchFace = async (request: Request, requestOptions?: McpHandlerRequestOptions): Promise<Response> => {\n        if (closed) {\n            throw new Error('This MCP handler has been closed');\n        }\n        try {\n            return await handle(request, requestOptions);\n        } catch (error) {\n            reportError(toError(error));\n            return internalServerErrorResponse(echoableRequestId(requestOptions?.parsedBody));\n        }\n    };\n\n    return {\n        fetch: fetchFace,\n        notify,\n        bus,\n        close: async () => {\n            closed = true;\n            listenRouter.closeAll();\n            const closing = [...inflight].map(server => server.close().catch(() => {}));\n            inflight.clear();\n            await Promise.all(closing);\n        }\n    };\n}\n", "export type HostHeaderValidationResult =\n    | { ok: true; hostname: string }\n    | {\n          ok: false;\n          errorCode: 'missing_host' | 'invalid_host_header' | 'invalid_host';\n          message: string;\n          hostHeader?: string;\n          hostname?: string;\n      };\n\n/**\n * Parse and validate a `Host` header against an allowlist of hostnames (port-agnostic).\n *\n * - Input host header may include a port (e.g. `localhost:3000`) or IPv6 brackets (e.g. `[::1]:3000`).\n * - Allowlist items should be hostnames only (no ports). For IPv6, include brackets (e.g. `[::1]`).\n */\nexport function validateHostHeader(hostHeader: string | null | undefined, allowedHostnames: string[]): HostHeaderValidationResult {\n    if (!hostHeader) {\n        return { ok: false, errorCode: 'missing_host', message: 'Missing Host header' };\n    }\n\n    // Use URL API to parse hostname (handles IPv4, IPv6, and regular hostnames)\n    let hostname: string;\n    try {\n        hostname = new URL(`http://${hostHeader}`).hostname;\n    } catch {\n        return { ok: false, errorCode: 'invalid_host_header', message: `Invalid Host header: ${hostHeader}`, hostHeader };\n    }\n\n    if (!allowedHostnames.includes(hostname)) {\n        return { ok: false, errorCode: 'invalid_host', message: `Invalid Host: ${hostname}`, hostHeader, hostname };\n    }\n\n    return { ok: true, hostname };\n}\n\n/**\n * Convenience allowlist for `localhost` DNS rebinding protection.\n */\nexport function localhostAllowedHostnames(): string[] {\n    return ['localhost', '127.0.0.1', '[::1]'];\n}\n\n/**\n * Web-standard `Request` helper for DNS rebinding protection.\n * @example\n * ```ts source=\"./hostHeaderValidation.examples.ts#hostHeaderValidationResponse_basicUsage\"\n * const result = validateHostHeader(req.headers.get('host'), ['localhost']);\n * ```\n */\nexport function hostHeaderValidationResponse(req: Request, allowedHostnames: string[]): Response | undefined {\n    const result = validateHostHeader(req.headers.get('host'), allowedHostnames);\n    if (result.ok) return undefined;\n\n    return Response.json(\n        {\n            jsonrpc: '2.0',\n            error: {\n                code: -32_000,\n                message: result.message\n            },\n            id: null\n        },\n        {\n            status: 403,\n            headers: { 'Content-Type': 'application/json' }\n        }\n    );\n}\n", "/**\n * Framework-agnostic Origin header validation helpers.\n *\n * Browsers attach an `Origin` header to cross-origin requests; validating it\n * against an allowlist (alongside Host header validation) protects local and\n * development MCP servers against DNS rebinding and cross-site request\n * forgery. The framework middleware packages (`@modelcontextprotocol/express`,\n * `@modelcontextprotocol/hono`, `@modelcontextprotocol/fastify`,\n * `@modelcontextprotocol/node`) wrap these helpers; use them directly when\n * mounting a handler bare on a fetch-native runtime.\n *\n * Validation is deny-on-failure: a present `Origin` value that cannot be\n * parsed (including the opaque `null` origin) is rejected, never passed\n * through. Requests without an `Origin` header pass — non-browser MCP clients\n * do not send one.\n */\n\nexport type OriginValidationResult =\n    | { ok: true; origin?: string; hostname?: string }\n    | {\n          ok: false;\n          errorCode: 'invalid_origin_header' | 'invalid_origin';\n          message: string;\n          originHeader?: string;\n          hostname?: string;\n      };\n\n/**\n * Validate an `Origin` header against an allowlist of hostnames (port-agnostic).\n *\n * - A missing/empty `Origin` header passes: non-browser clients do not send one,\n *   and only browser-originated requests carry the header this check defends against.\n * - Allowlist items are hostnames only (no scheme, no port), the same convention as\n *   `validateHostHeader`. For IPv6, include brackets (e.g. `[::1]`).\n * - A browser extension's origin carries its extension ID as the hostname; list the\n *   ID to allow one extension. An allowlist item of the form `<scheme>://*`\n *   (lowercase, e.g. `moz-extension://*`) allows every origin of that scheme, which\n *   Firefox needs because its extension IDs differ on every install.\n *   `http://*` and `https://*` are not honoured: list websites by hostname.\n * - Any present value that cannot be parsed as an origin URL — including the literal\n *   `null` origin browsers send for opaque contexts — is rejected (deny on failure).\n */\nexport function validateOriginHeader(originHeader: string | null | undefined, allowedOriginHostnames: string[]): OriginValidationResult {\n    if (originHeader === null || originHeader === undefined || originHeader === '') {\n        return { ok: true };\n    }\n\n    let hostname: string;\n    let scheme: string;\n    try {\n        const url = new URL(originHeader);\n        hostname = url.hostname;\n        scheme = url.protocol;\n    } catch {\n        return { ok: false, errorCode: 'invalid_origin_header', message: `Invalid Origin header: ${originHeader}`, originHeader };\n    }\n    if (hostname === '') {\n        // Opaque origins (\"null\") and other non-hierarchical values parse without a\n        // hostname; they can never be allowlisted.\n        return { ok: false, errorCode: 'invalid_origin_header', message: `Invalid Origin header: ${originHeader}`, originHeader };\n    }\n\n    const schemeAllowed = scheme !== 'http:' && scheme !== 'https:' && allowedOriginHostnames.includes(`${scheme}//*`);\n    if (!schemeAllowed && !allowedOriginHostnames.includes(hostname)) {\n        return { ok: false, errorCode: 'invalid_origin', message: `Invalid Origin: ${hostname}`, originHeader, hostname };\n    }\n\n    return { ok: true, origin: originHeader, hostname };\n}\n\n/**\n * Convenience allowlist of localhost-class origin hostnames, mirroring\n * `localhostAllowedHostnames`.\n */\nexport function localhostAllowedOrigins(): string[] {\n    return ['localhost', '127.0.0.1', '[::1]'];\n}\n\n/**\n * Web-standard `Request` helper for Origin validation: returns a `403` JSON-RPC\n * error response when the request's `Origin` header is not allowed, and\n * `undefined` when the request may proceed.\n *\n * ```ts\n * const rejected = originValidationResponse(request, localhostAllowedOrigins());\n * if (rejected) return rejected;\n * ```\n */\nexport function originValidationResponse(req: Request, allowedOriginHostnames: string[]): Response | undefined {\n    const result = validateOriginHeader(req.headers.get('origin'), allowedOriginHostnames);\n    if (result.ok) return undefined;\n\n    return Response.json(\n        {\n            jsonrpc: '2.0',\n            error: {\n                code: -32_000,\n                message: result.message\n            },\n            id: null\n        },\n        {\n            status: 403,\n            headers: { 'Content-Type': 'application/json' }\n        }\n    );\n}\n", "import type { ServerContext } from '@modelcontextprotocol/core-internal';\n\n/**\n * Options for {@linkcode createRequestStateCodec}.\n */\nexport interface RequestStateCodecOptions {\n    /**\n     * The HMAC secret. A `string` value is UTF-8-encoded. MUST be at least\n     * 32 bytes (256 bits) long; a `RangeError` is thrown at\n     * construction otherwise. The same key must be available to every server\n     * instance that may receive an echoed `requestState` (so a per-process\n     * random key only works when one process serves every round of a flow).\n     */\n    key: Uint8Array | string;\n\n    /**\n     * How long a minted `requestState` stays valid, in seconds. An echoed\n     * value past its expiry is rejected by {@linkcode RequestStateCodec.verify}.\n     * Defaults to `600` (ten minutes).\n     */\n    ttlSeconds?: number;\n\n    /**\n     * Optional context binding. Called at mint time and again at verify time;\n     * a `requestState` minted under one binding value is rejected when echoed\n     * under a different one. Use this to bind state to the authenticated\n     * principal and/or the originating method (the spec's user-binding MUST\n     * for state that influences authorization), for example:\n     *\n     * ```ts\n     * bind: ctx => `${ctx.mcpReq.method}\\0${ctx.http?.authInfo?.clientId ?? ''}`\n     * ```\n     *\n     * The returned value is stored in the envelope as a domain-separated HMAC\n     * tag (keyed by the codec's `key`), not the raw string — so a principal\n     * identifier in the binding does not appear in the wire value the client\n     * holds.\n     *\n     * When configured, {@linkcode RequestStateCodec.mint} requires its `ctx`\n     * argument.\n     */\n    bind?: (ctx: ServerContext) => string;\n}\n\n/**\n * The codec returned by {@linkcode createRequestStateCodec}: `mint` seals a\n * JSON-serializable payload into the wire string a handler returns from\n * `inputRequired({ requestState })`; `verify` is the function to drop into\n * {@linkcode server/server.ServerOptions | ServerOptions}`.requestState.verify`\n * (it throws on any failure, which the seam answers as the frozen `-32602`).\n * The decoded payload `verify` resolves with is handed to the handler by the\n * seam via the typed `ctx.mcpReq.requestState<T>()` accessor — `mint<T>` and\n * `requestState<T>()` are the typed encode/read pair.\n */\nexport interface RequestStateCodec<T = unknown> {\n    /**\n     * Seal `payload` into an opaque wire string. The result is what the\n     * handler returns from `inputRequired({ requestState })`.\n     *\n     * @param ctx The handler's context. Required when the codec was created\n     *            with a {@linkcode RequestStateCodecOptions.bind | bind}\n     *            callback; ignored otherwise.\n     */\n    mint(payload: T, ctx?: ServerContext): Promise<string>;\n\n    /**\n     * Verify an echoed `requestState` and return the original payload. Throws\n     * on any failure (bad MAC, expired, bind mismatch, malformed). The thrown\n     * message is a fixed opaque reason code (`'malformed'` / `'mac'` /\n     * `'expired'` / `'bind'`) — never the decoded payload, the binding value,\n     * or any other context-derived field.\n     *\n     * Pass this directly as `ServerOptions.requestState.verify`.\n     */\n    verify(state: string, ctx: ServerContext): Promise<T>;\n}\n\nconst PREFIX = 'v1.';\n\n// Runtime-neutral base64url (no padding) over raw bytes. `btoa`/`atob` are\n// available in browsers, Cloudflare Workers, and Node 16+.\nfunction bytesToBase64Url(bytes: Uint8Array): string {\n    let bin = '';\n    for (const b of bytes) bin += String.fromCodePoint(b);\n    return btoa(bin).replaceAll('+', '-').replaceAll('/', '_').replace(/=+$/, '');\n}\n\n// Constant-time equality on the fixed-length base64url bind-tag string. Same\n// guarantee as the body-MAC check (which uses `subtle.verify`): the\n// per-character XOR accumulator does not vary its trip count with the position\n// of the first mismatch. Length is fixed (22 chars for the 128-bit truncated\n// tag), so the early length-check leaks nothing.\nfunction constantTimeTagEqual(a: string, b: string): boolean {\n    if (a.length !== b.length) {\n        return false;\n    }\n    let r = 0;\n    for (let i = 0; i < a.length; i++) {\n        r |= a.codePointAt(i)! ^ b.codePointAt(i)!;\n    }\n    return r === 0;\n}\n\nfunction base64UrlToBytes(s: string): Uint8Array<ArrayBuffer> {\n    const b64 = s.replaceAll('-', '+').replaceAll('_', '/');\n    const bin = atob(b64);\n    const bytes = new Uint8Array(bin.length);\n    for (let i = 0; i < bin.length; i++) bytes[i] = bin.codePointAt(i)!;\n    return bytes;\n}\n\n/**\n * Create an opt-in HMAC-SHA256 codec for the multi-round-trip `requestState`\n * (protocol revision 2026-07-28).\n *\n * `requestState` round-trips through the client and is attacker-controlled\n * input on re-entry. The SDK applies no protection of its own; this helper is\n * the convenience implementation of the spec's integrity MUST so authors don't\n * hand-roll HMAC. Wire shape:\n *\n *     \"v1.\" b64url({\"p\":<payload>,\"exp\":<unixSeconds>,\"b\":<bindTag>?}) \".\" b64url(mac)\n *\n * where `bindTag` is `b64url(HMAC(key, \"mcp.requestState.bind:\" + bind(ctx))[:16])`\n * — the binding value is never embedded raw.\n *\n * The codec is **signed, not encrypted**: the body is integrity-protected but\n * the client can base64url-decode it and read the payload (`p`) in clear. Do\n * not put secrets in the payload; use an AEAD construction if confidentiality\n * is required. The handler reads its payload back via the typed\n * `ctx.mcpReq.requestState<T>()` accessor — the seam has already run `verify`\n * (integrity proven, payload decoded) by the time the handler is entered.\n *\n * Verification is fail-closed and constant-time (WebCrypto `subtle.verify` for\n * the body MAC; a fixed-length XOR-accumulator compare for the bind tag).\n * See `examples/mrtr/server.ts` for a worked end-to-end example.\n *\n * Design comparison (mcp.d `secureRequestState`, the peer SDK's reference\n * implementation): mcp.d additionally offers an AES-256-GCM encrypted mode and\n * derives independent cipher / bind-HMAC sub-keys from the operator secret via\n * HKDF-SHA256, with an auto-generated per-process ephemeral key when none is\n * supplied. This codec deliberately ships only the signed mode and a single\n * keyed HMAC (domain-separated by input prefix) — HKDF sub-key derivation and\n * an encrypted mode are intentionally out of scope for the initial release.\n */\nexport function createRequestStateCodec<T = unknown>(options: RequestStateCodecOptions): RequestStateCodec<T> {\n    const subtle = globalThis.crypto?.subtle;\n    if (subtle === undefined) {\n        throw new TypeError(\n            'createRequestStateCodec requires the Web Crypto API (globalThis.crypto.subtle); ' +\n                'see https://ts.sdk.modelcontextprotocol.io/v2/troubleshooting for the Node.js polyfill instructions'\n        );\n    }\n\n    // Snapshot the key bytes at construction. When `options.key` is a\n    // Uint8Array, holding the caller's reference would let a post-construction\n    // mutation (e.g. zeroing the secret for hygiene) silently change the key\n    // the lazy `importedKey()` reads on first mint/verify — a TOCTOU on the\n    // secret. The owned copy here is what every later read sees.\n    const keyBytes = typeof options.key === 'string' ? new TextEncoder().encode(options.key) : Uint8Array.from(options.key);\n    if (keyBytes.byteLength < 32) {\n        throw new RangeError(`createRequestStateCodec: key must be at least 32 bytes (got ${keyBytes.byteLength})`);\n    }\n    const ttlSeconds = options.ttlSeconds ?? 600;\n    if (!Number.isFinite(ttlSeconds)) {\n        // Infinity/NaN would serialize `exp` as JSON `null`, which then fails\n        // verify() with the misleading reason 'expired' on every round-trip —\n        // fail loudly at construction instead.\n        throw new RangeError('createRequestStateCodec: ttlSeconds must be a finite number');\n    }\n    const bind = options.bind;\n\n    // The CryptoKey is imported once (lazily) and reused for every mint/verify.\n    // `keyBytes` is already an owned standalone Uint8Array (snapshot above), so\n    // it satisfies WebCrypto's BufferSource requirement on every runtime.\n    let cryptoKey: ReturnType<typeof subtle.importKey> | undefined;\n    const importedKey = (): ReturnType<typeof subtle.importKey> =>\n        (cryptoKey ??= subtle.importKey('raw', keyBytes, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign', 'verify']));\n\n    const utf8 = new TextEncoder();\n\n    // Domain-separated HMAC tag of the binding value, truncated to 128 bits and\n    // base64url'd. The label keeps the bind-tag computation separate from the\n    // body MAC even though both use the same key (the body MAC's input is the\n    // versioned wire string `\"v1.\" + base64url(...)` and can never start with\n    // this label).\n    const BIND_LABEL = 'mcp.requestState.bind:';\n    const bindTag = async (value: string): Promise<string> => {\n        const mac = new Uint8Array(await subtle.sign('HMAC', await importedKey(), utf8.encode(BIND_LABEL + value)));\n        return bytesToBase64Url(mac.slice(0, 16));\n    };\n\n    return {\n        async mint(payload, ctx) {\n            const envelope: { p: T; exp: number; b?: string } = {\n                p: payload,\n                exp: Math.floor(Date.now() / 1000) + ttlSeconds\n            };\n            if (bind !== undefined) {\n                if (ctx === undefined) {\n                    throw new TypeError('createRequestStateCodec: mint() requires ctx when a bind callback is configured');\n                }\n                envelope.b = await bindTag(bind(ctx));\n            }\n            const body = bytesToBase64Url(utf8.encode(JSON.stringify(envelope)));\n            // The MAC covers `PREFIX + body` so the version tag is bound: a\n            // valid `body.mac` pair under `v1.` cannot be transplanted to a\n            // future `v2.` codec under the same key.\n            const mac = new Uint8Array(await subtle.sign('HMAC', await importedKey(), utf8.encode(PREFIX + body)));\n            return `${PREFIX}${body}.${bytesToBase64Url(mac)}`;\n        },\n\n        async verify(state, ctx) {\n            // Envelope shape: \"v1.\" body \".\" mac. The MAC is checked FIRST so\n            // every other rejection reason is only reachable for a value we\n            // minted (or a peer with the key did).\n            const dot = state.lastIndexOf('.');\n            if (!state.startsWith(PREFIX) || dot <= PREFIX.length) {\n                throw new Error('malformed');\n            }\n            const body = state.slice(PREFIX.length, dot);\n            let macBytes: Uint8Array<ArrayBuffer>;\n            try {\n                macBytes = base64UrlToBytes(state.slice(dot + 1));\n            } catch {\n                throw new Error('malformed');\n            }\n            // SubtleCrypto.verify is constant-time by spec — no manual byte\n            // compare, no `timingSafeEqual` dependency. The MAC input mirrors\n            // mint: `PREFIX + body`, so the version tag is authenticated.\n            const ok = await subtle.verify('HMAC', await importedKey(), macBytes, utf8.encode(PREFIX + body));\n            if (!ok) {\n                throw new Error('mac');\n            }\n            // The body decoded after a good MAC is by construction the JSON we\n            // wrote; a parse failure here would indicate key compromise rather\n            // than tampering, but stays fail-closed regardless.\n            let envelope: { p: T; exp: number; b?: string };\n            try {\n                envelope = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(base64UrlToBytes(body))) as {\n                    p: T;\n                    exp: number;\n                    b?: string;\n                };\n            } catch {\n                throw new Error('malformed');\n            }\n            if (typeof envelope.exp !== 'number' || envelope.exp < Math.floor(Date.now() / 1000)) {\n                throw new Error('expired');\n            }\n            if (bind !== undefined) {\n                const expected = await bindTag(bind(ctx));\n                if (envelope.b === undefined || !constantTimeTagEqual(envelope.b, expected)) {\n                    // Opaque reason only — never interpolate the expected/actual\n                    // binding values (they may carry principal identifiers).\n                    throw new Error('bind');\n                }\n            } else if (envelope.b !== undefined) {\n                // Fail-closed on configuration drift: a token minted with a\n                // bind callback is rejected when verified by an instance that\n                // has none configured. Accepting it would silently drop the\n                // principal-binding guarantee.\n                throw new Error('bind');\n            }\n            return envelope.p;\n        }\n    };\n}\n", "import type { JsonSchemaType, jsonSchemaValidator, StandardSchemaWithJSON } from '@modelcontextprotocol/core-internal';\nimport { fromJsonSchema as coreFromJsonSchema } from '@modelcontextprotocol/core-internal';\nimport { DefaultJsonSchemaValidator } from '@modelcontextprotocol/server/_shims';\n\nlet _defaultValidator: jsonSchemaValidator | undefined;\n\nexport function fromJsonSchema<T = unknown>(schema: JsonSchemaType, validator?: jsonSchemaValidator): StandardSchemaWithJSON<T, T> {\n    return coreFromJsonSchema<T>(schema, validator ?? (_defaultValidator ??= new DefaultJsonSchemaValidator()));\n}\n", "import type { Readable, Writable } from 'node:stream';\n\nimport type { JSONRPCMessage, Transport } from '@modelcontextprotocol/core-internal';\nimport { ReadBuffer, serializeMessage } from '@modelcontextprotocol/core-internal';\nimport { process } from '@modelcontextprotocol/server/_shims';\n\n/**\n * Marks a stdout `'error'` listener that a closed transport left attached purely to\n * swallow late write failures (see {@link StdioServerTransport.close}). A fresh\n * transport taking over the same stream removes listeners carrying this tag in\n * `start()`, so repeated create→close cycles on the process-global `process.stdout`\n * don't accumulate listeners.\n */\nconst swallowsErrorsAfterClose = Symbol('swallowsErrorsAfterClose');\n\n/**\n * Server transport for stdio: this communicates with an MCP client by reading from the current process' `stdin` and writing to `stdout`.\n *\n * This transport is only available in Node.js environments.\n *\n * When the client closes its end of the pipe (stdin reaches end-of-file), the transport\n * closes itself and fires `onclose`, per the MCP stdio binding's guidance that servers\n * should exit promptly when their standard input is closed. A server that holds no other\n * keep-alive handles will then exit naturally. Requests still in flight when stdin ends are\n * aborted and not answered; a client that expects responses keeps stdin open until it has\n * read them.\n *\n * @example\n * ```ts source=\"./stdio.examples.ts#StdioServerTransport_basicUsage\"\n * const server = new McpServer({ name: 'my-server', version: '1.0.0' });\n * const transport = new StdioServerTransport();\n * await server.connect(transport);\n * ```\n */\nexport class StdioServerTransport implements Transport {\n    private _readBuffer: ReadBuffer;\n    private _started = false;\n    private _closed = false;\n\n    constructor(\n        private _stdin: Readable = process.stdin,\n        private _stdout: Writable = process.stdout,\n        options?: {\n            /**\n             * Maximum size of the read buffer in bytes. If a single message exceeds\n             * this size the transport will emit an error and close.\n             *\n             * Defaults to 10 MB.\n             */\n            maxBufferSize?: number;\n        }\n    ) {\n        this._readBuffer = new ReadBuffer({ maxBufferSize: options?.maxBufferSize });\n    }\n\n    onclose?: () => void;\n    onerror?: (error: Error) => void;\n    onmessage?: (message: JSONRPCMessage) => void;\n\n    // Arrow functions to bind `this` properly, while maintaining function identity.\n    _ondata = (chunk: Buffer) => {\n        try {\n            this._readBuffer.append(chunk);\n            this.processReadBuffer();\n        } catch (error) {\n            this.onerror?.(error as Error);\n            this.close().catch(() => {});\n        }\n    };\n    _onerror = (error: Error) => {\n        this.onerror?.(error);\n    };\n    _onstdouterror = (error: Error) => {\n        if (this._closed) {\n            // Swallow stdout errors that surface after close. A write accepted before\n            // close (`write()` returned true) can still fail asynchronously at the OS\n            // level — e.g. EPIPE when the client that hung up also stops reading our\n            // stdout. The transport is already closed, so there is nothing to do; but\n            // with no listener attached, that late 'error' event would crash the\n            // process with an uncaught exception — which is why close() leaves this\n            // listener attached.\n            return;\n        }\n        this.onerror?.(error);\n        this.close().catch(() => {\n            // Ignore errors during close — we're already in an error path\n        });\n    };\n    _onstdinclose = () => {\n        // stdin reaching EOF (or being destroyed) means the client has hung up and no\n        // further input can ever arrive. The MCP stdio binding says servers should exit\n        // promptly when their standard input closes — this is the primary graceful\n        // shutdown signal, and on some platforms (e.g. Windows) the only reliable one.\n        // Close the transport so `onclose` fires and the process can exit naturally.\n        this.close().catch(() => {\n            // Ignore errors during close — nothing more can be read anyway\n        });\n    };\n\n    /**\n     * Starts listening for messages on `stdin`.\n     */\n    async start(): Promise<void> {\n        if (this._started) {\n            throw new Error(\n                'StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.'\n            );\n        }\n\n        this._started = true;\n        // Remove swallow-only 'error' listeners left behind by previously closed\n        // transports on this stream (see close()). Our own listener covers the\n        // stream from here on, so the stale ones are no longer needed — without\n        // this sweep, repeated create→close cycles on the process-global\n        // process.stdout would accumulate listeners.\n        for (const listener of this._stdout.listeners('error')) {\n            if ((listener as { [swallowsErrorsAfterClose]?: boolean })[swallowsErrorsAfterClose]) {\n                this._stdout.off('error', listener as (error: Error) => void);\n            }\n        }\n        // A stream that already ended or was destroyed before start() ran has\n        // emitted its one 'end'/'close' event; the listeners below would never\n        // fire. This can happen with a custom stream (e.g. a net.Socket the\n        // peer reset during async setup) — treat it as the client having hung\n        // up. Deferred to the next event-loop turn (not a microtask) so it lands\n        // after the caller's start()/connect() continuation, exactly like a real\n        // 'end' would — an onclose assigned right after `await connect()` must\n        // still see it.\n        if (this._stdin.readableEnded || this._stdin.destroyed) {\n            setImmediate(this._onstdinclose);\n        }\n        this._stdin.on('data', this._ondata);\n        this._stdin.on('error', this._onerror);\n        this._stdin.on('end', this._onstdinclose);\n        this._stdin.on('close', this._onstdinclose);\n        this._stdout.on('error', this._onstdouterror);\n    }\n\n    private processReadBuffer() {\n        while (true) {\n            try {\n                const message = this._readBuffer.readMessage();\n                if (message === null) {\n                    break;\n                }\n\n                this.onmessage?.(message);\n            } catch (error) {\n                this.onerror?.(error as Error);\n            }\n        }\n    }\n\n    async close(): Promise<void> {\n        if (this._closed) {\n            return;\n        }\n        this._closed = true;\n\n        // Remove our event listeners first\n        this._stdin.off('data', this._ondata);\n        this._stdin.off('error', this._onerror);\n        this._stdin.off('end', this._onstdinclose);\n        this._stdin.off('close', this._onstdinclose);\n        // Deliberately keep _onstdouterror attached (it is a no-op now that _closed\n        // is set): a write that was accepted before close may still be pending at\n        // the OS level and can fail after close (e.g. EPIPE when the client hangs\n        // up), and an 'error' event on a listener-less stream would crash the\n        // process. Tag it so the next transport to start on this stream can sweep\n        // it away instead of letting closed transports' listeners accumulate.\n        (this._onstdouterror as { [swallowsErrorsAfterClose]?: boolean })[swallowsErrorsAfterClose] = true;\n\n        // Check if we were the only data listener\n        const remainingDataListeners = this._stdin.listenerCount('data');\n        if (remainingDataListeners === 0) {\n            // Only pause stdin if we were the only listener\n            // This prevents interfering with other parts of the application that might be using stdin\n            this._stdin.pause();\n        }\n\n        // Clear the buffer and notify closure\n        this._readBuffer.clear();\n        this.onclose?.();\n    }\n\n    send(message: JSONRPCMessage): Promise<void> {\n        if (this._closed) {\n            return Promise.reject(new Error('StdioServerTransport is closed'));\n        }\n        return new Promise((resolve, reject) => {\n            const json = serializeMessage(message);\n\n            let settled = false;\n            const onError = (error: Error) => {\n                if (settled) return;\n                settled = true;\n                this._stdout.off('error', onError);\n                this._stdout.off('drain', onDrain);\n                reject(error);\n            };\n            const onDrain = () => {\n                if (settled) return;\n                settled = true;\n                this._stdout.off('error', onError);\n                this._stdout.off('drain', onDrain);\n                resolve();\n            };\n\n            this._stdout.once('error', onError);\n\n            if (this._stdout.write(json)) {\n                if (settled) return;\n                settled = true;\n                this._stdout.off('error', onError);\n                resolve();\n            } else if (!settled) {\n                this._stdout.once('drain', onDrain);\n            }\n        });\n    }\n}\n", "/**\n * `serveStdio` — the stdio entry point for serving the 2026-07-28 protocol\n * revision on a long-lived connection, with 2025-era serving as the default\n * for clients that open with the `initialize` handshake.\n *\n * The entry owns the stdio transport and the era decision for the connection.\n * It classifies the connection's opening exchange exactly once (using the\n * same body-primary rules as the HTTP entry), constructs ONE server instance\n * from the consumer's factory for the era the client opened with, pins that\n * instance for the lifetime of the connection, and passes every later message\n * straight through to it. No per-message era classification ever runs after\n * the connection is pinned — exactly mirroring how `createMcpHandler`\n * classifies an HTTP request before any instance exists.\n *\n * The opening exchange:\n *\n * - An `initialize` request (or any claim-less message) opens a 2025-era\n *   session: the factory builds a legacy instance and the connection is\n *   pinned to it (`legacy: 'serve'`, the default). With `legacy: 'reject'`\n *   the opening is answered with the unsupported-protocol-version error\n *   naming the supported modern revisions instead.\n * - A request carrying a valid per-request `_meta` envelope naming a\n *   supported modern revision pins the connection to a modern instance\n *   (era-marked and given the modern-only handlers, exactly like the HTTP\n *   entry's modern path).\n * - A `server/discover` probe is answered by an optimistically built modern\n *   instance but does NOT pin the connection yet: the spec's stdio\n *   backward-compatibility flow lets a client probe first and then either\n *   continue with modern requests (which pins the connection modern) or fall\n *   back to the `initialize` handshake when no mutually supported modern\n *   revision exists — in which case the probe instance is discarded and a\n *   fresh legacy instance serves the handshake.\n * - Once the modern era is pinned, a later claim-less `initialize` is\n *   rejected with the unsupported-protocol-version error naming the supported\n *   revisions (the spec recommends naming them in any error returned to\n *   `initialize`, and forbids falling back once the modern era is confirmed).\n *\n * Every instance the factory produces serves exactly one era; the ambiguity\n * of the opening exchange lives entirely in this entry. In the probe-fallback\n * case the factory is called twice (once for the discarded probe instance,\n * once for the legacy instance), so factories should be cheap and\n * side-effect-free to construct — the same expectation `createMcpHandler`\n * already sets for per-request construction.\n *\n * Hand-constructed servers connected directly to a `StdioServerTransport`\n * are unaffected by this entry: they keep serving the 2025-era protocol they\n * were written for.\n */\nimport type {\n    CancelledNotificationParams,\n    JSONRPCMessage,\n    JSONRPCNotification,\n    JSONRPCRequest,\n    MessageClassification,\n    MessageExtraInfo,\n    RequestId,\n    Transport,\n    TransportSendOptions\n} from '@modelcontextprotocol/core-internal';\nimport {\n    carriesValidModernEnvelopeClaim,\n    envelopeClaimVersion,\n    hasEnvelopeClaim,\n    isJSONRPCErrorResponse,\n    isJSONRPCNotification,\n    isJSONRPCRequest,\n    isJSONRPCResultResponse,\n    modernOnlyStrictRejection,\n    ProtocolErrorCode,\n    requestMetaOf,\n    setNegotiatedProtocolVersion,\n    SUPPORTED_MODERN_PROTOCOL_VERSIONS,\n    UnsupportedProtocolVersionError,\n    validateEnvelopeMeta\n} from '@modelcontextprotocol/core-internal';\n\nimport type { McpServerFactory } from './createMcpHandler';\nimport { DEFAULT_MAX_SUBSCRIPTIONS, StdioListenRouter } from './listenRouter';\nimport { McpServer } from './mcp';\nimport type { Server } from './server';\nimport { installModernOnlyHandlers, serverIdentityOf } from './server';\nimport { StdioServerTransport } from './stdio';\n\n/** Options for {@linkcode serveStdio}. */\nexport interface ServeStdioOptions {\n    /**\n     * How a 2025-era opening (an `initialize` request, or any claim-less\n     * message) is handled:\n     *\n     * - `'serve'` (default) — the connection is pinned to a 2025-era instance\n     *   from the same factory and served exactly as a hand-wired stdio server\n     *   serves it today.\n     * - `'reject'` — the opening request is answered with the\n     *   unsupported-protocol-version error naming the supported modern\n     *   revisions (claim-less notifications are dropped); the connection\n     *   stays open for a modern opening.\n     */\n    legacy?: 'serve' | 'reject';\n    /**\n     * Bring your own transport (for example a `StdioServerTransport`\n     * constructed over a Unix domain socket or TCP stream, per the stdio\n     * binding's custom-transport guidance). Defaults to a\n     * {@linkcode StdioServerTransport} over the current process's stdio. The\n     * entry owns the transport: it starts it, receives every inbound message,\n     * and closes it when the connection ends.\n     */\n    transport?: Transport;\n    /** Callback for out-of-band errors (reporting only; it never alters what is written to the wire). */\n    onerror?: (error: Error) => void;\n    /**\n     * Reject a new `subscriptions/listen` with `-32603` 'Subscription limit\n     * reached' (in-band, before the ack) when this many subscriptions are\n     * already open on this connection.\n     * @default 1024\n     */\n    maxSubscriptions?: number;\n}\n\n/** The handle returned by {@linkcode serveStdio}. */\nexport interface StdioServerHandle {\n    /** Tears the connection down: closes the pinned instance (if any) and the underlying transport. */\n    close(): Promise<void>;\n}\n\n/* ------------------------------------------------------------------------ *\n * Per-instance channel\n * ------------------------------------------------------------------------ */\n\n/**\n * How long the probe-discard path waits for the probe instance to answer the\n * requests it was delivered before closing it. The wait normally settles as\n * soon as the DiscoverResult is handed to the wire (or immediately, when a\n * delivered cancellation already settled the probe); the bound is a backstop\n * so no edge can ever hold the connection's inbound pump indefinitely behind\n * the discard.\n */\nconst DISCARD_ANSWER_TIMEOUT_MS = 3000;\n\n/**\n * The transport a pinned instance is connected to: a thin channel that writes\n * through to the entry-owned wire transport and receives the messages the\n * entry forwards. The wire transport itself is never handed to an instance —\n * that is what lets the entry discard an optimistic probe instance (close the\n * channel) without tearing down the connection.\n */\nclass StdioConnectionChannel implements Transport {\n    onclose?: () => void;\n    onerror?: (error: Error) => void;\n    onmessage?: <T extends JSONRPCMessage>(message: T, extra?: MessageExtraInfo) => void;\n\n    private _closed = false;\n    /** Request ids the entry delivered to the instance that the instance has not yet answered. */\n    private readonly _pendingRequests = new Set<RequestId>();\n    private _drainWaiters: Array<() => void> = [];\n\n    constructor(\n        private readonly _wire: Transport,\n        private readonly _onInstanceClose: () => void,\n        /**\n         * Optional first-look on outbound messages. When set and returning\n         * `'handled'`, the channel does not write the message to the wire\n         * (the entry already wrote whatever was appropriate). Used by the\n         * modern-era listen router to fan a change notification out onto the\n         * active subscriptions instead of broadcasting it unsolicited.\n         */\n        private readonly _outboundIntercept?: (message: JSONRPCMessage) => 'handled' | undefined\n    ) {}\n\n    async start(): Promise<void> {\n        // The entry already started the wire transport; connecting an\n        // instance to its channel must not start anything again.\n    }\n\n    async send(message: JSONRPCMessage, options?: TransportSendOptions): Promise<void> {\n        if (isJSONRPCResultResponse(message) || isJSONRPCErrorResponse(message)) {\n            // The instance answered a delivered request: settle it whether or\n            // not the wire write below succeeds (write failures surface\n            // through the wire's own error reporting).\n            const { id } = message;\n            if (id !== undefined) {\n                this._settle(id);\n            }\n        }\n        if (this._closed) {\n            // A discarded or torn-down instance has nowhere to write; late\n            // sends are dropped.\n            return;\n        }\n        if (this._outboundIntercept?.(message) === 'handled') {\n            return;\n        }\n        return this._wire.send(message, options);\n    }\n\n    setProtocolVersion = (version: string): void => {\n        this._wire.setProtocolVersion?.(version);\n    };\n\n    /** Forwards one inbound message to the connected instance. */\n    deliver(message: JSONRPCMessage, extra?: MessageExtraInfo): void {\n        if (this._closed) {\n            return;\n        }\n        if (isJSONRPCRequest(message)) {\n            this._pendingRequests.add(message.id);\n        } else if (isJSONRPCNotification(message) && message.method === 'notifications/cancelled') {\n            // By protocol contract a cancelled request may legitimately go\n            // unanswered (the instance aborts the in-flight handler and writes\n            // nothing for it), so a delivered cancellation settles the request\n            // it names: nothing should keep waiting for an answer that may\n            // never come. Non-cancelled requests still settle only when their\n            // answer is handed to the wire.\n            const cancelledId = (message.params as CancelledNotificationParams | undefined)?.requestId;\n            if (cancelledId !== undefined) {\n                this._settle(cancelledId);\n            }\n        }\n        this.onmessage?.(message, extra);\n    }\n\n    /**\n     * Resolves once every request delivered to the instance has been answered\n     * through {@linkcode send}, settled by a delivered cancellation, or the\n     * channel has been closed and nothing further can be answered. The wait is\n     * bounded by `timeoutMs` as a backstop so no edge can hold the caller\n     * indefinitely; resolves `false` only when the bound elapsed with requests\n     * still unanswered. Used by the probe-discard path so a probe request the\n     * entry accepted is never silently dropped.\n     */\n    async whenRequestsAnswered(timeoutMs: number): Promise<boolean> {\n        if (this._closed || this._pendingRequests.size === 0) {\n            return true;\n        }\n        return await new Promise<boolean>(resolve => {\n            const waiter = (): void => {\n                clearTimeout(timer);\n                resolve(true);\n            };\n            const timer = setTimeout(() => {\n                this._drainWaiters = this._drainWaiters.filter(pending => pending !== waiter);\n                resolve(false);\n            }, timeoutMs);\n            this._drainWaiters.push(waiter);\n        });\n    }\n\n    async close(): Promise<void> {\n        if (this._closed) {\n            return;\n        }\n        this._closed = true;\n        // Nothing further can be answered through a closed channel; release\n        // anyone waiting on in-flight answers.\n        this._pendingRequests.clear();\n        this._releaseDrainWaiters();\n        try {\n            this._onInstanceClose();\n        } finally {\n            this.onclose?.();\n        }\n    }\n\n    private _settle(id: RequestId): void {\n        this._pendingRequests.delete(id);\n        if (this._pendingRequests.size === 0) {\n            this._releaseDrainWaiters();\n        }\n    }\n\n    private _releaseDrainWaiters(): void {\n        const waiters = this._drainWaiters;\n        this._drainWaiters = [];\n        for (const waiter of waiters) {\n            waiter();\n        }\n    }\n}\n\n/* ------------------------------------------------------------------------ *\n * Opening-exchange classification\n * ------------------------------------------------------------------------ */\n\ninterface EnvelopeIssue {\n    key: string;\n    problem: string;\n}\n\ntype OpeningClassification =\n    /** A 2025-era opening: `initialize`, or any message without an envelope claim. */\n    | { kind: 'legacy'; reason: 'initialize' | 'no-claim'; requestedVersion?: string }\n    /** A valid envelope claim naming a modern revision this entry serves. */\n    | { kind: 'modern'; revision: string; classification: MessageClassification }\n    /** A present envelope claim whose envelope is malformed. */\n    | { kind: 'invalid-envelope'; issue: EnvelopeIssue }\n    /** A valid envelope claim naming a revision this entry does not serve (unknown future or 2025-era). */\n    | { kind: 'unsupported-revision'; requested: string };\n\n/**\n * Classifies one message of the opening exchange with the same body-primary\n * rules the HTTP entry applies per request: `initialize` is the legacy\n * handshake unless it carries a valid modern envelope claim; a present claim\n * is validated (never silently ignored); a claim-less message is 2025-era\n * traffic. There is no header layer on stdio, so the body is the only signal.\n */\nfunction classifyOpeningMessage(message: JSONRPCRequest | JSONRPCNotification): OpeningClassification {\n    const params = message.params;\n\n    if (message.method === 'initialize' && !carriesValidModernEnvelopeClaim(params)) {\n        const requestedVersion =\n            params !== null && typeof params === 'object' && typeof (params as { protocolVersion?: unknown }).protocolVersion === 'string'\n                ? ((params as { protocolVersion: string }).protocolVersion as string)\n                : undefined;\n        return { kind: 'legacy', reason: 'initialize', ...(requestedVersion !== undefined && { requestedVersion }) };\n    }\n\n    if (!hasEnvelopeClaim(params)) {\n        return { kind: 'legacy', reason: 'no-claim' };\n    }\n\n    // A present claim is validated, never silently ignored — a malformed\n    // envelope behind the claim is an invalid-params answer, not a fall back\n    // to legacy serving (mirrors the HTTP entry's envelope rung).\n    const meta = requestMetaOf(params);\n    const issues = meta === undefined ? [] : validateEnvelopeMeta(meta);\n    const firstIssue = issues[0];\n    if (firstIssue !== undefined) {\n        return { kind: 'invalid-envelope', issue: firstIssue };\n    }\n\n    const claimedVersion = envelopeClaimVersion(params);\n    if (claimedVersion === undefined || !SUPPORTED_MODERN_PROTOCOL_VERSIONS.includes(claimedVersion)) {\n        // The claim names a revision this entry does not serve (an unknown\n        // future revision, or a 2025-era revision delivered via the envelope\n        // mechanism) — answered like the HTTP entry's modern path.\n        return { kind: 'unsupported-revision', requested: claimedVersion ?? 'unknown' };\n    }\n\n    return { kind: 'modern', revision: claimedVersion, classification: { era: 'modern', revision: claimedVersion } };\n}\n\n/* ------------------------------------------------------------------------ *\n * The entry\n * ------------------------------------------------------------------------ */\n\ninterface ConnectedInstance {\n    product: McpServer | Server;\n    channel: StdioConnectionChannel;\n}\n\ntype EntryState =\n    /** Waiting for the connection's opening message. */\n    | { phase: 'opening' }\n    /** A `server/discover` probe was answered; the era is not pinned yet. */\n    | { phase: 'probe'; instance: ConnectedInstance }\n    /** The connection is pinned to one instance serving one era. */\n    | { phase: 'pinned'; era: 'legacy' | 'modern'; instance: ConnectedInstance }\n    | { phase: 'closed' };\n\n/**\n * Serves MCP over stdio from a server factory, owning the era decision for\n * the connection: the opening exchange selects the era, ONE instance from the\n * factory is pinned for the connection lifetime, and everything after passes\n * straight through to it. See the module documentation for the opening rules.\n *\n * ```ts\n * import { serveStdio } from '@modelcontextprotocol/server/stdio';\n *\n * serveStdio(() => {\n *     const server = new McpServer({ name: 'my-server', version: '1.0.0' }, { capabilities: { tools: {} } });\n *     // register tools/resources/prompts once — the same factory serves both eras\n *     return server;\n * });\n * ```\n */\nexport function serveStdio(factory: McpServerFactory, options: ServeStdioOptions = {}): StdioServerHandle {\n    const legacyMode = options.legacy ?? 'serve';\n    const wire = options.transport ?? new StdioServerTransport();\n\n    let state: EntryState = { phase: 'opening' };\n    /** Channel currently being discarded (its close must not tear the connection down). */\n    let discarding: StdioConnectionChannel | undefined;\n    let closing = false;\n\n    /**\n     * Whether the connection has been torn down (`handle.close()` or the wire\n     * closing). The opening arms re-check this after every await: a close can\n     * race factory construction, and the continuation must neither resurrect\n     * the connection state nor keep a late-resolved instance around.\n     */\n    const isTornDown = (): boolean => closing || state.phase === 'closed';\n\n    const reportError = (error: Error) => {\n        try {\n            options.onerror?.(error);\n        } catch {\n            // Reporting must never affect the wire.\n        }\n    };\n\n    const writeErrorResponse = (id: RequestId, code: number, message: string, data?: unknown): Promise<void> =>\n        wire\n            .send({ jsonrpc: '2.0', id, error: { code, message, ...(data !== undefined && { data }) } })\n            .catch(error => reportError(toError(error)));\n\n    /**\n     * Entry-handled `subscriptions/listen` for this connection: holds the\n     * active subscriptions, serves inbound listen / cancelled-of-listen\n     * before the pinned instance is consulted, and rewrites the instance's\n     * outbound change notifications onto the active subscriptions. Only\n     * consulted on a modern-pinned connection — on a legacy connection\n     * change notifications pass straight through (the 2025 unsolicited\n     * delivery model is unchanged).\n     */\n    const listenRouter = new StdioListenRouter(options.maxSubscriptions ?? DEFAULT_MAX_SUBSCRIPTIONS);\n\n    /** Outbound intercept installed on a modern instance's channel. */\n    const modernOutboundIntercept = (message: JSONRPCMessage): 'handled' | undefined => {\n        if (!isJSONRPCNotification(message)) return undefined;\n        const routed = listenRouter.routeOutbound(message);\n        if (routed === 'passthrough') return undefined;\n        // A subscription-gated change notification on the modern era: one\n        // stamped copy per subscription that opted in (an empty array means\n        // it is dropped — the modern era never delivers an un-requested\n        // change type unsolicited). Nothing else from the instance is\n        // affected.\n        for (const stamped of routed) {\n            void wire.send({ jsonrpc: '2.0', ...stamped }).catch(error => reportError(toError(error)));\n        }\n        return 'handled';\n    };\n\n    /**\n     * Entry-handled inbound listen routing for a modern-pinned connection.\n     * Returns `true` when the message was served at the entry and must NOT\n     * be delivered to the pinned instance.\n     */\n    const tryServeListen = async (message: JSONRPCMessage): Promise<boolean> => {\n        if (isJSONRPCRequest(message) && message.method === 'subscriptions/listen') {\n            // Entry-handled listen is its own request-handling subsystem; it\n            // applies the same per-request envelope rung the instance's\n            // `_onrequest` would (method-existence is N/A here — the entry\n            // recognized the method — so envelope validation is the first\n            // applicable rung) and the same supported-revision check the\n            // opening classifier and the HTTP entry apply per request. Reuses\n            // the same validators the opening classifier uses.\n            const meta = requestMetaOf(message.params);\n            const issue = hasEnvelopeClaim(message.params)\n                ? (meta === undefined ? [] : validateEnvelopeMeta(meta))[0]\n                : { key: '_meta', problem: 'the per-request envelope is required on protocol revision 2026-07-28' };\n            const claimedVersion = envelopeClaimVersion(message.params);\n            let reply;\n            if (issue !== undefined) {\n                reply = {\n                    jsonrpc: '2.0' as const,\n                    id: message.id,\n                    error: { code: -32_602, message: `Invalid _meta envelope: ${issue.key}: ${issue.problem}` }\n                };\n            } else if (claimedVersion === undefined || !SUPPORTED_MODERN_PROTOCOL_VERSIONS.includes(claimedVersion)) {\n                const error = new UnsupportedProtocolVersionError({\n                    supported: [...SUPPORTED_MODERN_PROTOCOL_VERSIONS],\n                    requested: claimedVersion ?? 'unknown'\n                });\n                reply = { jsonrpc: '2.0' as const, id: message.id, error: { code: error.code, message: error.message, data: error.data } };\n            } else {\n                reply = listenRouter.serve(message);\n            }\n            await wire\n                .send('error' in reply ? reply : { jsonrpc: '2.0', method: reply.method, params: reply.params })\n                .catch(error => reportError(toError(error)));\n            return true;\n        }\n        if (isJSONRPCNotification(message) && message.method === 'notifications/cancelled') {\n            const cancelledId = (message.params as CancelledNotificationParams | undefined)?.requestId;\n            // Inbound cancel of a parked listen: tear the subscription down\n            // and DO NOT deliver to the instance (it never saw the listen\n            // request). After this point nothing further is delivered for\n            // that subscription id (post-cancel hardening).\n            if (cancelledId !== undefined && listenRouter.cancel(cancelledId)) {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    /** Answers a 2025-era request the entry will not serve (the modern-only rejection cells). */\n    const answerLegacyRejection = (\n        request: JSONRPCRequest,\n        reason: 'initialize' | 'no-claim',\n        requestedVersion?: string\n    ): Promise<void> => {\n        const rejection = modernOnlyStrictRejection(\n            { kind: 'legacy', reason, ...(requestedVersion !== undefined && { requestedVersion }) },\n            SUPPORTED_MODERN_PROTOCOL_VERSIONS\n        );\n        if (rejection === undefined) {\n            return Promise.resolve();\n        }\n        reportError(new Error(`Rejected 2025-era request on a modern-only stdio connection (${rejection.cell}): ${rejection.message}`));\n        return writeErrorResponse(request.id, rejection.code, rejection.message, rejection.data);\n    };\n\n    const onInstanceClosed = (channel: StdioConnectionChannel) => {\n        if (closing || channel === discarding) {\n            return;\n        }\n        // The pinned (or probe) instance was closed from the instance side:\n        // the connection is over.\n        void closeAll();\n    };\n\n    const connectInstance = async (era: 'legacy' | 'modern', revision?: string): Promise<ConnectedInstance> => {\n        const product = await factory({ era });\n        const server = product instanceof McpServer ? product.server : product;\n        if (era === 'modern') {\n            // Era-write at instance binding, then modern-only handler\n            // installation — the same helpers the HTTP entry's modern path\n            // uses, before the instance is connected.\n            setNegotiatedProtocolVersion(server, revision);\n            installModernOnlyHandlers(server, SUPPORTED_MODERN_PROTOCOL_VERSIONS);\n            // The listen router was created before this instance existed; now\n            // that capabilities are known, hand them over (with the identity\n            // stamped onto graceful-close results) so the acknowledged filter\n            // is narrowed against what the server actually advertises.\n            listenRouter.setServerCapabilities(server.getCapabilities(), serverIdentityOf(server));\n        }\n        const channel: StdioConnectionChannel = new StdioConnectionChannel(\n            wire,\n            () => onInstanceClosed(channel),\n            era === 'modern' ? modernOutboundIntercept : undefined\n        );\n        await product.connect(channel);\n        return { product, channel };\n    };\n\n    /** Closes an instance whose factory resolved only after the connection was torn down. */\n    const disposeLateInstance = (instance: ConnectedInstance): Promise<void> =>\n        instance.product.close().catch(error => reportError(toError(error)));\n\n    const discardProbeInstance = async (instance: ConnectedInstance): Promise<void> => {\n        // The probe instance served only the discover exchange; closing its\n        // channel must not tear down the connection the fallback is about to\n        // continue on.\n        discarding = instance.channel;\n        try {\n            // A probe request the entry accepted must never go silently\n            // unanswered: a client may pipeline its fallback `initialize`\n            // straight behind `server/discover` without waiting, and closing\n            // the instance aborts whatever it still has in flight. Let the\n            // in-flight DiscoverResult reach the wire before the instance is\n            // closed; the probe instance only ever receives `server/discover`,\n            // whose entry-installed handler always answers promptly. A probe\n            // the client cancelled is already settled by the delivered\n            // cancellation (a cancelled request may go unanswered), and the\n            // wait is bounded as a backstop so nothing can wedge the\n            // connection's pump behind the discard.\n            const answered = await instance.channel.whenRequestsAnswered(DISCARD_ANSWER_TIMEOUT_MS);\n            if (!answered) {\n                reportError(\n                    new Error(\n                        `Discarded the probe instance with requests still unanswered after ${DISCARD_ANSWER_TIMEOUT_MS}ms; continuing with the fallback`\n                    )\n                );\n            }\n            await instance.product.close();\n        } catch (error) {\n            reportError(toError(error));\n        } finally {\n            discarding = undefined;\n        }\n    };\n\n    const processMessage = async (message: JSONRPCMessage): Promise<void> => {\n        if (state.phase === 'closed') {\n            return;\n        }\n\n        if (state.phase === 'pinned') {\n            if (\n                state.era === 'modern' &&\n                isJSONRPCRequest(message) &&\n                message.method === 'initialize' &&\n                !carriesValidModernEnvelopeClaim(message.params)\n            ) {\n                // The modern era is confirmed for this connection; a late\n                // legacy handshake is answered with the version error naming\n                // the supported revisions (the specification recommends\n                // naming them in any error returned to `initialize`, and\n                // rules out falling back once the modern era is confirmed).\n                const requestedVersion =\n                    message.params !== null &&\n                    typeof message.params === 'object' &&\n                    typeof (message.params as { protocolVersion?: unknown }).protocolVersion === 'string'\n                        ? ((message.params as { protocolVersion: string }).protocolVersion as string)\n                        : undefined;\n                await answerLegacyRejection(message, 'initialize', requestedVersion);\n                return;\n            }\n            if (state.era === 'modern' && (await tryServeListen(message))) {\n                return;\n            }\n            if (isTornDown()) {\n                // Closed while entry listen routing was being checked (a\n                // buffered final message can race stdin EOF): stay closed.\n                return;\n            }\n            state.instance.channel.deliver(message);\n            return;\n        }\n\n        // Negotiation window ('opening' | 'probe').\n        if (!isJSONRPCRequest(message) && !isJSONRPCNotification(message)) {\n            // A JSON-RPC response before any era is pinned: nothing has been\n            // asked of the client yet, so there is nothing it can answer.\n            reportError(new Error('Discarded a JSON-RPC response received before the connection negotiated an era'));\n            return;\n        }\n\n        const opening = classifyOpeningMessage(message);\n        switch (opening.kind) {\n            case 'invalid-envelope': {\n                const detail = `Invalid _meta envelope for protocol revision 2026-07-28: ${opening.issue.key}: ${opening.issue.problem}`;\n                if (isJSONRPCRequest(message)) {\n                    await writeErrorResponse(message.id, ProtocolErrorCode.InvalidParams, detail, { envelope: opening.issue });\n                } else {\n                    reportError(new Error(`Discarded a notification with a malformed envelope: ${detail}`));\n                }\n                return;\n            }\n            case 'unsupported-revision': {\n                if (isJSONRPCRequest(message)) {\n                    const error = new UnsupportedProtocolVersionError({\n                        supported: [...SUPPORTED_MODERN_PROTOCOL_VERSIONS],\n                        requested: opening.requested\n                    });\n                    reportError(error);\n                    await writeErrorResponse(message.id, error.code, error.message, error.data);\n                } else {\n                    reportError(new Error(`Discarded a notification claiming unsupported protocol revision ${opening.requested}`));\n                }\n                return;\n            }\n            case 'modern': {\n                if (isJSONRPCRequest(message) && message.method === 'server/discover') {\n                    if (state.phase === 'probe') {\n                        // A repeated probe is answered by the same optimistic\n                        // instance and the negotiation window stays open: only\n                        // a non-discover enveloped request commits the\n                        // connection to the modern era, so a later fallback\n                        // `initialize` is still served by a fresh legacy\n                        // instance.\n                        state.instance.channel.deliver(message, { classification: opening.classification });\n                        return;\n                    }\n                    // Probe: answer from an optimistically built modern\n                    // instance so the advertisement reflects the real server\n                    // definition, but do not pin the connection yet — the\n                    // client may still fall back to `initialize` when it\n                    // shares no modern revision with the advertisement.\n                    const instance = await connectInstance('modern', opening.revision);\n                    if (isTornDown()) {\n                        // The connection was torn down while the factory was\n                        // building the probe instance: dispose of it and stay\n                        // closed instead of resurrecting the negotiation\n                        // window; nothing is delivered or answered.\n                        await disposeLateInstance(instance);\n                        return;\n                    }\n                    state = { phase: 'probe', instance };\n                    instance.channel.deliver(message, { classification: opening.classification });\n                    return;\n                }\n                if (state.phase === 'probe') {\n                    if (isJSONRPCNotification(message)) {\n                        // An enveloped notification during the negotiation\n                        // window (for example a notifications/cancelled for\n                        // the probe itself) is delivered to the probe instance\n                        // without committing the era: only a non-discover\n                        // enveloped request pins the connection, so a later\n                        // fallback `initialize` is still served by a fresh\n                        // legacy instance.\n                        state.instance.channel.deliver(message, { classification: opening.classification });\n                        return;\n                    }\n                    // The probe was followed by a modern request: the client\n                    // committed to the modern era — pin the probe instance.\n                    state = { phase: 'pinned', era: 'modern', instance: state.instance };\n                } else {\n                    const instance = await connectInstance('modern', opening.revision);\n                    if (isTornDown()) {\n                        // Closed while the factory was building the modern\n                        // instance: dispose of it and stay closed.\n                        await disposeLateInstance(instance);\n                        return;\n                    }\n                    state = { phase: 'pinned', era: 'modern', instance };\n                }\n                if (await tryServeListen(message)) {\n                    return;\n                }\n                if (isTornDown()) {\n                    // Closed while entry listen routing was being checked (a\n                    // buffered final message can race stdin EOF): stay closed.\n                    return;\n                }\n                state.instance.channel.deliver(message, { classification: opening.classification });\n                return;\n            }\n            case 'legacy': {\n                if (legacyMode === 'reject') {\n                    if (isJSONRPCRequest(message)) {\n                        await answerLegacyRejection(message, opening.reason, opening.requestedVersion);\n                    }\n                    // Claim-less notifications are accepted and dropped (the\n                    // stdio analog of the HTTP entry's 202-and-drop); the\n                    // connection stays open for a modern opening.\n                    return;\n                }\n                if (state.phase === 'probe') {\n                    // Probe-then-fallback: the client probed, found no\n                    // mutually supported modern revision, and fell back to\n                    // the 2025 handshake on the same connection. The probe\n                    // instance is discarded; a fresh legacy instance serves\n                    // the handshake.\n                    await discardProbeInstance(state.instance);\n                    if (isTornDown()) {\n                        // Closed while the probe was being discarded: stay closed.\n                        return;\n                    }\n                    state = { phase: 'opening' };\n                }\n                const instance = await connectInstance('legacy');\n                if (isTornDown()) {\n                    // Closed while the factory was building the legacy\n                    // instance: dispose of it and stay closed.\n                    await disposeLateInstance(instance);\n                    return;\n                }\n                state = { phase: 'pinned', era: 'legacy', instance };\n                state.instance.channel.deliver(message);\n                return;\n            }\n        }\n    };\n\n    // Inbound messages are processed strictly in arrival order: the queue\n    // absorbs anything that arrives while the opening exchange is still being\n    // decided (factory construction and instance connection are async).\n    const queue: JSONRPCMessage[] = [];\n    let pumping = false;\n    const pump = async (): Promise<void> => {\n        if (pumping) {\n            return;\n        }\n        pumping = true;\n        try {\n            while (queue.length > 0) {\n                const message = queue.shift()!;\n                try {\n                    await processMessage(message);\n                } catch (error) {\n                    // Every arm of processMessage that answers a request does\n                    // so through writeErrorResponse (which never throws — wire\n                    // failures are routed to onerror) and returns right after,\n                    // so an error escaping to here means the request was never\n                    // answered. Answer it now: a throwing factory or a failed\n                    // connect during the opening exchange must not leave the\n                    // client's request hanging (the stdio analog of the HTTP\n                    // entry's internal-server-error response). Notifications\n                    // carry no id to answer and are only reported.\n                    if (isJSONRPCRequest(message)) {\n                        await writeErrorResponse(message.id, ProtocolErrorCode.InternalError, 'Internal server error');\n                    }\n                    reportError(toError(error));\n                }\n            }\n        } finally {\n            pumping = false;\n        }\n    };\n\n    const closeAll = async (): Promise<void> => {\n        if (closing || state.phase === 'closed') {\n            return;\n        }\n        closing = true;\n        const current = state;\n        state = { phase: 'closed' };\n        // Stdio server-side graceful teardown: emit the empty\n        // `subscriptions/listen` JSON-RPC result for every active subscription\n        // (the spec's graceful-close signal — `SubscriptionsListenResult`)\n        // before the wire is closed, so the client distinguishes graceful end\n        // from a transport drop.\n        for (const result of listenRouter.teardownAll()) {\n            await wire.send(result).catch(error => reportError(toError(error)));\n        }\n        if (current.phase === 'probe' || current.phase === 'pinned') {\n            await current.instance.product.close().catch(error => reportError(toError(error)));\n        }\n        await wire.close().catch(error => reportError(toError(error)));\n    };\n\n    wire.onmessage = (message: JSONRPCMessage) => {\n        queue.push(message);\n        void pump();\n    };\n    wire.onerror = error => {\n        reportError(error);\n        if (state.phase === 'probe' || state.phase === 'pinned') {\n            state.instance.channel.onerror?.(error);\n        }\n    };\n    wire.onclose = () => {\n        if (closing || state.phase === 'closed') {\n            return;\n        }\n        closing = true;\n        const current = state;\n        state = { phase: 'closed' };\n        if (current.phase === 'probe' || current.phase === 'pinned') {\n            void current.instance.product.close().catch(error => reportError(toError(error)));\n        }\n    };\n\n    const started = wire.start().catch(error => {\n        reportError(toError(error));\n        throw error;\n    });\n    // Surface a failed start through onerror (above); close() still resolves.\n    started.catch(() => {});\n\n    return {\n        close: async () => {\n            await started.catch(() => {});\n            await closeAll();\n        }\n    };\n}\n\nfunction toError(value: unknown): Error {\n    return value instanceof Error ? value : new Error(String(value));\n}\n", "import { BigBrainAuth, Context, ErrorType } from \"../../../bundler/context.js\";\nimport { Filesystem, nodeFs } from \"../../../bundler/fs.js\";\nimport { Ora } from \"ora\";\nimport {\n  DeploymentSelectionWithinProject,\n  deploymentSelectionWithinProjectSchema,\n  DeploymentSelectionOptions,\n} from \"../api.js\";\nimport { z } from \"zod\";\nimport {\n  DeploymentSelection,\n  getDeploymentSelection,\n} from \"../deploymentSelection.js\";\n\nexport interface McpOptions extends DeploymentSelectionOptions {\n  projectDir?: string;\n  disableTools?: string;\n  dangerouslyEnableProductionDeployments?: boolean;\n  cautiouslyAllowProductionPii?: boolean;\n}\n\nexport class RequestContext implements Context {\n  fs: Filesystem;\n  deprecationMessagePrinted = false;\n  spinner: Ora | undefined;\n  _cleanupFns: Record<string, (exitCode: number, err?: any) => Promise<void>> =\n    {};\n  _bigBrainAuth: BigBrainAuth | null = null;\n  constructor(public options: McpOptions) {\n    this.fs = nodeFs;\n    this.deprecationMessagePrinted = false;\n  }\n\n  async crash(args: {\n    exitCode: number;\n    errorType?: ErrorType;\n    errForSentry?: any;\n    printedMessage: string | null;\n  }): Promise<never> {\n    const cleanupFns = this._cleanupFns;\n    this._cleanupFns = {};\n    for (const fn of Object.values(cleanupFns)) {\n      await fn(args.exitCode, args.errForSentry);\n    }\n    // eslint-disable-next-line no-restricted-syntax\n    throw new RequestCrash(args.exitCode, args.errorType, args.printedMessage);\n  }\n\n  flushAndExit() {\n    // eslint-disable-next-line no-restricted-syntax\n    throw new Error(\"Not implemented\");\n  }\n\n  registerCleanup(fn: (exitCode: number, err?: any) => Promise<void>): string {\n    const handle = crypto.randomUUID();\n    this._cleanupFns[handle] = fn;\n    return handle;\n  }\n\n  removeCleanup(handle: string) {\n    const value = this._cleanupFns[handle];\n    delete this._cleanupFns[handle];\n    return value ?? null;\n  }\n\n  bigBrainAuth(): BigBrainAuth | null {\n    return this._bigBrainAuth;\n  }\n\n  _updateBigBrainAuth(auth: BigBrainAuth | null): void {\n    this._bigBrainAuth = auth;\n  }\n\n  async decodeDeploymentSelector(encoded: string) {\n    const { projectDir, deployment } = decodeDeploymentSelector(encoded);\n    if (\n      deployment.kind === \"prod\" &&\n      !this.options.dangerouslyEnableProductionDeployments\n    ) {\n      return await this.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"This tool cannot be used with production deployments. Use a read-only tool like `insights` instead, or enable production access with --dangerously-enable-production-deployments.\",\n      });\n    }\n    return { projectDir, deployment };\n  }\n\n  /** Decode a deployment selector without checking the production guard. Use for read-only tools that don't expose PII (e.g. insights). */\n  decodeDeploymentSelectorUnchecked(encoded: string) {\n    return decodeDeploymentSelector(encoded);\n  }\n\n  /** Decode a deployment selector for read-only tools that may expose PII (e.g. data, logs, queries). Requires --cautiously-allow-production-pii. */\n  async decodeDeploymentSelectorReadOnly(encoded: string) {\n    const { projectDir, deployment } = decodeDeploymentSelector(encoded);\n    if (\n      deployment.kind === \"prod\" &&\n      !this.options.dangerouslyEnableProductionDeployments &&\n      !this.options.cautiouslyAllowProductionPii\n    ) {\n      return await this.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"This read-only tool may expose PII from production. Enable with --cautiously-allow-production-pii, or use --dangerously-enable-production-deployments for full access.\",\n      });\n    }\n    return { projectDir, deployment };\n  }\n\n  get productionDeploymentsDisabled() {\n    return !this.options.dangerouslyEnableProductionDeployments;\n  }\n\n  get productionPiiAllowed() {\n    return (\n      this.options.dangerouslyEnableProductionDeployments ||\n      this.options.cautiouslyAllowProductionPii\n    );\n  }\n}\n\nexport class RequestCrash {\n  printedMessage: string;\n  constructor(\n    private exitCode: number,\n    private errorType: ErrorType | undefined,\n    printedMessage: string | null,\n  ) {\n    this.printedMessage = printedMessage ?? \"Unknown error\";\n  }\n\n  toString(): string {\n    return this.printedMessage;\n  }\n}\n\n// Unfortunately, MCP clients don't seem to handle nested JSON objects very\n// well (even though this is within spec). To work around this, encode the\n// deployment selectors as an obfuscated string that the MCP client can\n// opaquely pass around.\nexport function encodeDeploymentSelector(\n  projectDir: string,\n  deployment: DeploymentSelectionWithinProject,\n) {\n  const payload = {\n    projectDir,\n    deployment,\n  };\n  return `${deployment.kind}:${btoa(JSON.stringify(payload))}`;\n}\n\nconst payloadSchema = z.object({\n  projectDir: z.string(),\n  deployment: deploymentSelectionWithinProjectSchema,\n});\n\nfunction decodeDeploymentSelector(encoded: string) {\n  const [_, serializedPayload] = encoded.split(\":\");\n  return payloadSchema.parse(JSON.parse(atob(serializedPayload)));\n}\n\n/**\n * Get the deployment selection for MCP tools. The agent can pass different\n * values of `selectionWithinProject` into a tool, so we overwrite the\n * `selectionWithinProject` of the `DeploymentSelection` if it exists.\n */\nexport async function getMcpDeploymentSelection(\n  ctx: RequestContext,\n  decodedDeploymentSelector: DeploymentSelectionWithinProject,\n): Promise<DeploymentSelection> {\n  const initialSelection = await getDeploymentSelection(ctx, ctx.options);\n  const hasSelectionWithinProject =\n    initialSelection.kind !== \"existingDeployment\";\n  return {\n    ...initialSelection,\n    ...(hasSelectionWithinProject && {\n      selectionWithinProject: decodedDeploymentSelector,\n    }),\n  };\n}\n", "export const ignoreOverride = Symbol(\"Let zodToJsonSchema decide on which parser to use\");\nexport const jsonDescription = (jsonSchema, def) => {\n    if (def.description) {\n        try {\n            return {\n                ...jsonSchema,\n                ...JSON.parse(def.description),\n            };\n        }\n        catch { }\n    }\n    return jsonSchema;\n};\nexport const defaultOptions = {\n    name: undefined,\n    $refStrategy: \"root\",\n    basePath: [\"#\"],\n    effectStrategy: \"input\",\n    pipeStrategy: \"all\",\n    dateStrategy: \"format:date-time\",\n    mapStrategy: \"entries\",\n    removeAdditionalStrategy: \"passthrough\",\n    allowedAdditionalProperties: true,\n    rejectedAdditionalProperties: false,\n    definitionPath: \"definitions\",\n    target: \"jsonSchema7\",\n    strictUnions: false,\n    definitions: {},\n    errorMessages: false,\n    markdownDescription: false,\n    patternStrategy: \"escape\",\n    applyRegexFlags: false,\n    emailStrategy: \"format:email\",\n    base64Strategy: \"contentEncoding:base64\",\n    nameStrategy: \"ref\",\n    openAiAnyTypeName: \"OpenAiAnyType\"\n};\nexport const getDefaultOptions = (options) => (typeof options === \"string\"\n    ? {\n        ...defaultOptions,\n        name: options,\n    }\n    : {\n        ...defaultOptions,\n        ...options,\n    });\n", "import { getDefaultOptions } from \"./Options.js\";\nexport const getRefs = (options) => {\n    const _options = getDefaultOptions(options);\n    const currentPath = _options.name !== undefined\n        ? [..._options.basePath, _options.definitionPath, _options.name]\n        : _options.basePath;\n    return {\n        ..._options,\n        flags: { hasReferencedOpenAiAnyType: false },\n        currentPath: currentPath,\n        propertyPath: undefined,\n        seen: new Map(Object.entries(_options.definitions).map(([name, def]) => [\n            def._def,\n            {\n                def: def._def,\n                path: [..._options.basePath, _options.definitionPath, name],\n                // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n                jsonSchema: undefined,\n            },\n        ])),\n    };\n};\n", "export function addErrorMessage(res, key, errorMessage, refs) {\n    if (!refs?.errorMessages)\n        return;\n    if (errorMessage) {\n        res.errorMessage = {\n            ...res.errorMessage,\n            [key]: errorMessage,\n        };\n    }\n}\nexport function setResponseValueAndErrors(res, key, value, errorMessage, refs) {\n    res[key] = value;\n    addErrorMessage(res, key, errorMessage, refs);\n}\n", "export const getRelativePath = (pathA, pathB) => {\n    let i = 0;\n    for (; i < pathA.length && i < pathB.length; i++) {\n        if (pathA[i] !== pathB[i])\n            break;\n    }\n    return [(pathA.length - i).toString(), ...pathB.slice(i)].join(\"/\");\n};\n", "import { ZodFirstPartyTypeKind } from \"zod\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nimport { parseArrayDef } from \"./parsers/array.js\";\nimport { parseBigintDef } from \"./parsers/bigint.js\";\nimport { parseBooleanDef } from \"./parsers/boolean.js\";\nimport { parseBrandedDef } from \"./parsers/branded.js\";\nimport { parseCatchDef } from \"./parsers/catch.js\";\nimport { parseDateDef } from \"./parsers/date.js\";\nimport { parseDefaultDef } from \"./parsers/default.js\";\nimport { parseEffectsDef } from \"./parsers/effects.js\";\nimport { parseEnumDef } from \"./parsers/enum.js\";\nimport { parseIntersectionDef } from \"./parsers/intersection.js\";\nimport { parseLiteralDef } from \"./parsers/literal.js\";\nimport { parseMapDef } from \"./parsers/map.js\";\nimport { parseNativeEnumDef } from \"./parsers/nativeEnum.js\";\nimport { parseNeverDef } from \"./parsers/never.js\";\nimport { parseNullDef } from \"./parsers/null.js\";\nimport { parseNullableDef } from \"./parsers/nullable.js\";\nimport { parseNumberDef } from \"./parsers/number.js\";\nimport { parseObjectDef } from \"./parsers/object.js\";\nimport { parseOptionalDef } from \"./parsers/optional.js\";\nimport { parsePipelineDef } from \"./parsers/pipeline.js\";\nimport { parsePromiseDef } from \"./parsers/promise.js\";\nimport { parseRecordDef } from \"./parsers/record.js\";\nimport { parseSetDef } from \"./parsers/set.js\";\nimport { parseStringDef } from \"./parsers/string.js\";\nimport { parseTupleDef } from \"./parsers/tuple.js\";\nimport { parseUndefinedDef } from \"./parsers/undefined.js\";\nimport { parseUnionDef } from \"./parsers/union.js\";\nimport { parseUnknownDef } from \"./parsers/unknown.js\";\nimport { parseReadonlyDef } from \"./parsers/readonly.js\";\nexport const selectParser = (def, typeName, refs) => {\n    switch (typeName) {\n        case ZodFirstPartyTypeKind.ZodString:\n            return parseStringDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodNumber:\n            return parseNumberDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodObject:\n            return parseObjectDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodBigInt:\n            return parseBigintDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodBoolean:\n            return parseBooleanDef();\n        case ZodFirstPartyTypeKind.ZodDate:\n            return parseDateDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodUndefined:\n            return parseUndefinedDef(refs);\n        case ZodFirstPartyTypeKind.ZodNull:\n            return parseNullDef(refs);\n        case ZodFirstPartyTypeKind.ZodArray:\n            return parseArrayDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodUnion:\n        case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:\n            return parseUnionDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodIntersection:\n            return parseIntersectionDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodTuple:\n            return parseTupleDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodRecord:\n            return parseRecordDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodLiteral:\n            return parseLiteralDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodEnum:\n            return parseEnumDef(def);\n        case ZodFirstPartyTypeKind.ZodNativeEnum:\n            return parseNativeEnumDef(def);\n        case ZodFirstPartyTypeKind.ZodNullable:\n            return parseNullableDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodOptional:\n            return parseOptionalDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodMap:\n            return parseMapDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodSet:\n            return parseSetDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodLazy:\n            return () => def.getter()._def;\n        case ZodFirstPartyTypeKind.ZodPromise:\n            return parsePromiseDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodNaN:\n        case ZodFirstPartyTypeKind.ZodNever:\n            return parseNeverDef(refs);\n        case ZodFirstPartyTypeKind.ZodEffects:\n            return parseEffectsDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodAny:\n            return parseAnyDef(refs);\n        case ZodFirstPartyTypeKind.ZodUnknown:\n            return parseUnknownDef(refs);\n        case ZodFirstPartyTypeKind.ZodDefault:\n            return parseDefaultDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodBranded:\n            return parseBrandedDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodReadonly:\n            return parseReadonlyDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodCatch:\n            return parseCatchDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodPipeline:\n            return parsePipelineDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodFunction:\n        case ZodFirstPartyTypeKind.ZodVoid:\n        case ZodFirstPartyTypeKind.ZodSymbol:\n            return undefined;\n        default:\n            /* c8 ignore next */\n            return ((_) => undefined)(typeName);\n    }\n};\n", "import { getRelativePath } from \"../getRelativePath.js\";\nexport function parseAnyDef(refs) {\n    if (refs.target !== \"openAi\") {\n        return {};\n    }\n    const anyDefinitionPath = [\n        ...refs.basePath,\n        refs.definitionPath,\n        refs.openAiAnyTypeName,\n    ];\n    refs.flags.hasReferencedOpenAiAnyType = true;\n    return {\n        $ref: refs.$refStrategy === \"relative\"\n            ? getRelativePath(anyDefinitionPath, refs.currentPath)\n            : anyDefinitionPath.join(\"/\"),\n    };\n}\n", "import { ZodFirstPartyTypeKind } from \"zod\";\nimport { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseArrayDef(def, refs) {\n    const res = {\n        type: \"array\",\n    };\n    if (def.type?._def &&\n        def.type?._def?.typeName !== ZodFirstPartyTypeKind.ZodAny) {\n        res.items = parseDef(def.type._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"items\"],\n        });\n    }\n    if (def.minLength) {\n        setResponseValueAndErrors(res, \"minItems\", def.minLength.value, def.minLength.message, refs);\n    }\n    if (def.maxLength) {\n        setResponseValueAndErrors(res, \"maxItems\", def.maxLength.value, def.maxLength.message, refs);\n    }\n    if (def.exactLength) {\n        setResponseValueAndErrors(res, \"minItems\", def.exactLength.value, def.exactLength.message, refs);\n        setResponseValueAndErrors(res, \"maxItems\", def.exactLength.value, def.exactLength.message, refs);\n    }\n    return res;\n}\n", "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseBigintDef(def, refs) {\n    const res = {\n        type: \"integer\",\n        format: \"int64\",\n    };\n    if (!def.checks)\n        return res;\n    for (const check of def.checks) {\n        switch (check.kind) {\n            case \"min\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMinimum = true;\n                    }\n                    setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                }\n                break;\n            case \"max\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMaximum = true;\n                    }\n                    setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                }\n                break;\n            case \"multipleOf\":\n                setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n                break;\n        }\n    }\n    return res;\n}\n", "export function parseBooleanDef() {\n    return {\n        type: \"boolean\",\n    };\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport function parseBrandedDef(_def, refs) {\n    return parseDef(_def.type._def, refs);\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport const parseCatchDef = (def, refs) => {\n    return parseDef(def.innerType._def, refs);\n};\n", "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseDateDef(def, refs, overrideDateStrategy) {\n    const strategy = overrideDateStrategy ?? refs.dateStrategy;\n    if (Array.isArray(strategy)) {\n        return {\n            anyOf: strategy.map((item, i) => parseDateDef(def, refs, item)),\n        };\n    }\n    switch (strategy) {\n        case \"string\":\n        case \"format:date-time\":\n            return {\n                type: \"string\",\n                format: \"date-time\",\n            };\n        case \"format:date\":\n            return {\n                type: \"string\",\n                format: \"date\",\n            };\n        case \"integer\":\n            return integerDateParser(def, refs);\n    }\n}\nconst integerDateParser = (def, refs) => {\n    const res = {\n        type: \"integer\",\n        format: \"unix-time\",\n    };\n    if (refs.target === \"openApi3\") {\n        return res;\n    }\n    for (const check of def.checks) {\n        switch (check.kind) {\n            case \"min\":\n                setResponseValueAndErrors(res, \"minimum\", check.value, // This is in milliseconds\n                check.message, refs);\n                break;\n            case \"max\":\n                setResponseValueAndErrors(res, \"maximum\", check.value, // This is in milliseconds\n                check.message, refs);\n                break;\n        }\n    }\n    return res;\n};\n", "import { parseDef } from \"../parseDef.js\";\nexport function parseDefaultDef(_def, refs) {\n    return {\n        ...parseDef(_def.innerType._def, refs),\n        default: _def.defaultValue(),\n    };\n}\n", "import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseEffectsDef(_def, refs) {\n    return refs.effectStrategy === \"input\"\n        ? parseDef(_def.schema._def, refs)\n        : parseAnyDef(refs);\n}\n", "export function parseEnumDef(def) {\n    return {\n        type: \"string\",\n        enum: Array.from(def.values),\n    };\n}\n", "import { parseDef } from \"../parseDef.js\";\nconst isJsonSchema7AllOfType = (type) => {\n    if (\"type\" in type && type.type === \"string\")\n        return false;\n    return \"allOf\" in type;\n};\nexport function parseIntersectionDef(def, refs) {\n    const allOf = [\n        parseDef(def.left._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n        }),\n        parseDef(def.right._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"allOf\", \"1\"],\n        }),\n    ].filter((x) => !!x);\n    let unevaluatedProperties = refs.target === \"jsonSchema2019-09\"\n        ? { unevaluatedProperties: false }\n        : undefined;\n    const mergedAllOf = [];\n    // If either of the schemas is an allOf, merge them into a single allOf\n    allOf.forEach((schema) => {\n        if (isJsonSchema7AllOfType(schema)) {\n            mergedAllOf.push(...schema.allOf);\n            if (schema.unevaluatedProperties === undefined) {\n                // If one of the schemas has no unevaluatedProperties set,\n                // the merged schema should also have no unevaluatedProperties set\n                unevaluatedProperties = undefined;\n            }\n        }\n        else {\n            let nestedSchema = schema;\n            if (\"additionalProperties\" in schema &&\n                schema.additionalProperties === false) {\n                const { additionalProperties, ...rest } = schema;\n                nestedSchema = rest;\n            }\n            else {\n                // As soon as one of the schemas has additionalProperties set not to false, we allow unevaluatedProperties\n                unevaluatedProperties = undefined;\n            }\n            mergedAllOf.push(nestedSchema);\n        }\n    });\n    return mergedAllOf.length\n        ? {\n            allOf: mergedAllOf,\n            ...unevaluatedProperties,\n        }\n        : undefined;\n}\n", "export function parseLiteralDef(def, refs) {\n    const parsedType = typeof def.value;\n    if (parsedType !== \"bigint\" &&\n        parsedType !== \"number\" &&\n        parsedType !== \"boolean\" &&\n        parsedType !== \"string\") {\n        return {\n            type: Array.isArray(def.value) ? \"array\" : \"object\",\n        };\n    }\n    if (refs.target === \"openApi3\") {\n        return {\n            type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n            enum: [def.value],\n        };\n    }\n    return {\n        type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n        const: def.value,\n    };\n}\n", "import { ZodFirstPartyTypeKind, } from \"zod\";\nimport { parseDef } from \"../parseDef.js\";\nimport { parseStringDef } from \"./string.js\";\nimport { parseBrandedDef } from \"./branded.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseRecordDef(def, refs) {\n    if (refs.target === \"openAi\") {\n        console.warn(\"Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.\");\n    }\n    if (refs.target === \"openApi3\" &&\n        def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n        return {\n            type: \"object\",\n            required: def.keyType._def.values,\n            properties: def.keyType._def.values.reduce((acc, key) => ({\n                ...acc,\n                [key]: parseDef(def.valueType._def, {\n                    ...refs,\n                    currentPath: [...refs.currentPath, \"properties\", key],\n                }) ?? parseAnyDef(refs),\n            }), {}),\n            additionalProperties: refs.rejectedAdditionalProperties,\n        };\n    }\n    const schema = {\n        type: \"object\",\n        additionalProperties: parseDef(def.valueType._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"additionalProperties\"],\n        }) ?? refs.allowedAdditionalProperties,\n    };\n    if (refs.target === \"openApi3\") {\n        return schema;\n    }\n    if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n        def.keyType._def.checks?.length) {\n        const { type, ...keyType } = parseStringDef(def.keyType._def, refs);\n        return {\n            ...schema,\n            propertyNames: keyType,\n        };\n    }\n    else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n        return {\n            ...schema,\n            propertyNames: {\n                enum: def.keyType._def.values,\n            },\n        };\n    }\n    else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodBranded &&\n        def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n        def.keyType._def.type._def.checks?.length) {\n        const { type, ...keyType } = parseBrandedDef(def.keyType._def, refs);\n        return {\n            ...schema,\n            propertyNames: keyType,\n        };\n    }\n    return schema;\n}\n", "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nlet emojiRegex = undefined;\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n    /**\n     * `c` was changed to `[cC]` to replicate /i flag\n     */\n    cuid: /^[cC][^\\s-]{8,}$/,\n    cuid2: /^[0-9a-z]+$/,\n    ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n    /**\n     * `a-z` was added to replicate /i flag\n     */\n    email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n    /**\n     * Constructed a valid Unicode RegExp\n     *\n     * Lazily instantiate since this type of regex isn't supported\n     * in all envs (e.g. React Native).\n     *\n     * See:\n     * https://github.com/colinhacks/zod/issues/2433\n     * Fix in Zod:\n     * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n     */\n    emoji: () => {\n        if (emojiRegex === undefined) {\n            emojiRegex = RegExp(\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\", \"u\");\n        }\n        return emojiRegex;\n    },\n    /**\n     * Unused\n     */\n    uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n    /**\n     * Unused\n     */\n    ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n    ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n    /**\n     * Unused\n     */\n    ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n    ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n    base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n    base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n    nanoid: /^[a-zA-Z0-9_-]{21}$/,\n    jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n};\nexport function parseStringDef(def, refs) {\n    const res = {\n        type: \"string\",\n    };\n    if (def.checks) {\n        for (const check of def.checks) {\n            switch (check.kind) {\n                case \"min\":\n                    setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n                        ? Math.max(res.minLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"max\":\n                    setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n                        ? Math.min(res.maxLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"email\":\n                    switch (refs.emailStrategy) {\n                        case \"format:email\":\n                            addFormat(res, \"email\", check.message, refs);\n                            break;\n                        case \"format:idn-email\":\n                            addFormat(res, \"idn-email\", check.message, refs);\n                            break;\n                        case \"pattern:zod\":\n                            addPattern(res, zodPatterns.email, check.message, refs);\n                            break;\n                    }\n                    break;\n                case \"url\":\n                    addFormat(res, \"uri\", check.message, refs);\n                    break;\n                case \"uuid\":\n                    addFormat(res, \"uuid\", check.message, refs);\n                    break;\n                case \"regex\":\n                    addPattern(res, check.regex, check.message, refs);\n                    break;\n                case \"cuid\":\n                    addPattern(res, zodPatterns.cuid, check.message, refs);\n                    break;\n                case \"cuid2\":\n                    addPattern(res, zodPatterns.cuid2, check.message, refs);\n                    break;\n                case \"startsWith\":\n                    addPattern(res, RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`), check.message, refs);\n                    break;\n                case \"endsWith\":\n                    addPattern(res, RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`), check.message, refs);\n                    break;\n                case \"datetime\":\n                    addFormat(res, \"date-time\", check.message, refs);\n                    break;\n                case \"date\":\n                    addFormat(res, \"date\", check.message, refs);\n                    break;\n                case \"time\":\n                    addFormat(res, \"time\", check.message, refs);\n                    break;\n                case \"duration\":\n                    addFormat(res, \"duration\", check.message, refs);\n                    break;\n                case \"length\":\n                    setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n                        ? Math.max(res.minLength, check.value)\n                        : check.value, check.message, refs);\n                    setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n                        ? Math.min(res.maxLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"includes\": {\n                    addPattern(res, RegExp(escapeLiteralCheckValue(check.value, refs)), check.message, refs);\n                    break;\n                }\n                case \"ip\": {\n                    if (check.version !== \"v6\") {\n                        addFormat(res, \"ipv4\", check.message, refs);\n                    }\n                    if (check.version !== \"v4\") {\n                        addFormat(res, \"ipv6\", check.message, refs);\n                    }\n                    break;\n                }\n                case \"base64url\":\n                    addPattern(res, zodPatterns.base64url, check.message, refs);\n                    break;\n                case \"jwt\":\n                    addPattern(res, zodPatterns.jwt, check.message, refs);\n                    break;\n                case \"cidr\": {\n                    if (check.version !== \"v6\") {\n                        addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n                    }\n                    if (check.version !== \"v4\") {\n                        addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n                    }\n                    break;\n                }\n                case \"emoji\":\n                    addPattern(res, zodPatterns.emoji(), check.message, refs);\n                    break;\n                case \"ulid\": {\n                    addPattern(res, zodPatterns.ulid, check.message, refs);\n                    break;\n                }\n                case \"base64\": {\n                    switch (refs.base64Strategy) {\n                        case \"format:binary\": {\n                            addFormat(res, \"binary\", check.message, refs);\n                            break;\n                        }\n                        case \"contentEncoding:base64\": {\n                            setResponseValueAndErrors(res, \"contentEncoding\", \"base64\", check.message, refs);\n                            break;\n                        }\n                        case \"pattern:zod\": {\n                            addPattern(res, zodPatterns.base64, check.message, refs);\n                            break;\n                        }\n                    }\n                    break;\n                }\n                case \"nanoid\": {\n                    addPattern(res, zodPatterns.nanoid, check.message, refs);\n                }\n                case \"toLowerCase\":\n                case \"toUpperCase\":\n                case \"trim\":\n                    break;\n                default:\n                    /* c8 ignore next */\n                    ((_) => { })(check);\n            }\n        }\n    }\n    return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n    return refs.patternStrategy === \"escape\"\n        ? escapeNonAlphaNumeric(literal)\n        : literal;\n}\nconst ALPHA_NUMERIC = new Set(\"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\");\nfunction escapeNonAlphaNumeric(source) {\n    let result = \"\";\n    for (let i = 0; i < source.length; i++) {\n        if (!ALPHA_NUMERIC.has(source[i])) {\n            result += \"\\\\\";\n        }\n        result += source[i];\n    }\n    return result;\n}\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(schema, value, message, refs) {\n    if (schema.format || schema.anyOf?.some((x) => x.format)) {\n        if (!schema.anyOf) {\n            schema.anyOf = [];\n        }\n        if (schema.format) {\n            schema.anyOf.push({\n                format: schema.format,\n                ...(schema.errorMessage &&\n                    refs.errorMessages && {\n                    errorMessage: { format: schema.errorMessage.format },\n                }),\n            });\n            delete schema.format;\n            if (schema.errorMessage) {\n                delete schema.errorMessage.format;\n                if (Object.keys(schema.errorMessage).length === 0) {\n                    delete schema.errorMessage;\n                }\n            }\n        }\n        schema.anyOf.push({\n            format: value,\n            ...(message &&\n                refs.errorMessages && { errorMessage: { format: message } }),\n        });\n    }\n    else {\n        setResponseValueAndErrors(schema, \"format\", value, message, refs);\n    }\n}\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(schema, regex, message, refs) {\n    if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {\n        if (!schema.allOf) {\n            schema.allOf = [];\n        }\n        if (schema.pattern) {\n            schema.allOf.push({\n                pattern: schema.pattern,\n                ...(schema.errorMessage &&\n                    refs.errorMessages && {\n                    errorMessage: { pattern: schema.errorMessage.pattern },\n                }),\n            });\n            delete schema.pattern;\n            if (schema.errorMessage) {\n                delete schema.errorMessage.pattern;\n                if (Object.keys(schema.errorMessage).length === 0) {\n                    delete schema.errorMessage;\n                }\n            }\n        }\n        schema.allOf.push({\n            pattern: stringifyRegExpWithFlags(regex, refs),\n            ...(message &&\n                refs.errorMessages && { errorMessage: { pattern: message } }),\n        });\n    }\n    else {\n        setResponseValueAndErrors(schema, \"pattern\", stringifyRegExpWithFlags(regex, refs), message, refs);\n    }\n}\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex, refs) {\n    if (!refs.applyRegexFlags || !regex.flags) {\n        return regex.source;\n    }\n    // Currently handled flags\n    const flags = {\n        i: regex.flags.includes(\"i\"),\n        m: regex.flags.includes(\"m\"),\n        s: regex.flags.includes(\"s\"), // `.` matches newlines\n    };\n    // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n    const source = flags.i ? regex.source.toLowerCase() : regex.source;\n    let pattern = \"\";\n    let isEscaped = false;\n    let inCharGroup = false;\n    let inCharRange = false;\n    for (let i = 0; i < source.length; i++) {\n        if (isEscaped) {\n            pattern += source[i];\n            isEscaped = false;\n            continue;\n        }\n        if (flags.i) {\n            if (inCharGroup) {\n                if (source[i].match(/[a-z]/)) {\n                    if (inCharRange) {\n                        pattern += source[i];\n                        pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n                        inCharRange = false;\n                    }\n                    else if (source[i + 1] === \"-\" && source[i + 2]?.match(/[a-z]/)) {\n                        pattern += source[i];\n                        inCharRange = true;\n                    }\n                    else {\n                        pattern += `${source[i]}${source[i].toUpperCase()}`;\n                    }\n                    continue;\n                }\n            }\n            else if (source[i].match(/[a-z]/)) {\n                pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n                continue;\n            }\n        }\n        if (flags.m) {\n            if (source[i] === \"^\") {\n                pattern += `(^|(?<=[\\r\\n]))`;\n                continue;\n            }\n            else if (source[i] === \"$\") {\n                pattern += `($|(?=[\\r\\n]))`;\n                continue;\n            }\n        }\n        if (flags.s && source[i] === \".\") {\n            pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n            continue;\n        }\n        pattern += source[i];\n        if (source[i] === \"\\\\\") {\n            isEscaped = true;\n        }\n        else if (inCharGroup && source[i] === \"]\") {\n            inCharGroup = false;\n        }\n        else if (!inCharGroup && source[i] === \"[\") {\n            inCharGroup = true;\n        }\n    }\n    try {\n        new RegExp(pattern);\n    }\n    catch {\n        console.warn(`Could not convert regex pattern at ${refs.currentPath.join(\"/\")} to a flag-independent form! Falling back to the flag-ignorant source`);\n        return regex.source;\n    }\n    return pattern;\n}\n", "import { parseDef } from \"../parseDef.js\";\nimport { parseRecordDef } from \"./record.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseMapDef(def, refs) {\n    if (refs.mapStrategy === \"record\") {\n        return parseRecordDef(def, refs);\n    }\n    const keys = parseDef(def.keyType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"items\", \"items\", \"0\"],\n    }) || parseAnyDef(refs);\n    const values = parseDef(def.valueType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"items\", \"items\", \"1\"],\n    }) || parseAnyDef(refs);\n    return {\n        type: \"array\",\n        maxItems: 125,\n        items: {\n            type: \"array\",\n            items: [keys, values],\n            minItems: 2,\n            maxItems: 2,\n        },\n    };\n}\n", "export function parseNativeEnumDef(def) {\n    const object = def.values;\n    const actualKeys = Object.keys(def.values).filter((key) => {\n        return typeof object[object[key]] !== \"number\";\n    });\n    const actualValues = actualKeys.map((key) => object[key]);\n    const parsedTypes = Array.from(new Set(actualValues.map((values) => typeof values)));\n    return {\n        type: parsedTypes.length === 1\n            ? parsedTypes[0] === \"string\"\n                ? \"string\"\n                : \"number\"\n            : [\"string\", \"number\"],\n        enum: actualValues,\n    };\n}\n", "import { parseAnyDef } from \"./any.js\";\nexport function parseNeverDef(refs) {\n    return refs.target === \"openAi\"\n        ? undefined\n        : {\n            not: parseAnyDef({\n                ...refs,\n                currentPath: [...refs.currentPath, \"not\"],\n            }),\n        };\n}\n", "export function parseNullDef(refs) {\n    return refs.target === \"openApi3\"\n        ? {\n            enum: [\"null\"],\n            nullable: true,\n        }\n        : {\n            type: \"null\",\n        };\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport const primitiveMappings = {\n    ZodString: \"string\",\n    ZodNumber: \"number\",\n    ZodBigInt: \"integer\",\n    ZodBoolean: \"boolean\",\n    ZodNull: \"null\",\n};\nexport function parseUnionDef(def, refs) {\n    if (refs.target === \"openApi3\")\n        return asAnyOf(def, refs);\n    const options = def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n    // This blocks tries to look ahead a bit to produce nicer looking schemas with type array instead of anyOf.\n    if (options.every((x) => x._def.typeName in primitiveMappings &&\n        (!x._def.checks || !x._def.checks.length))) {\n        // all types in union are primitive and lack checks, so might as well squash into {type: [...]}\n        const types = options.reduce((types, x) => {\n            const type = primitiveMappings[x._def.typeName]; //Can be safely casted due to row 43\n            return type && !types.includes(type) ? [...types, type] : types;\n        }, []);\n        return {\n            type: types.length > 1 ? types : types[0],\n        };\n    }\n    else if (options.every((x) => x._def.typeName === \"ZodLiteral\" && !x.description)) {\n        // all options literals\n        const types = options.reduce((acc, x) => {\n            const type = typeof x._def.value;\n            switch (type) {\n                case \"string\":\n                case \"number\":\n                case \"boolean\":\n                    return [...acc, type];\n                case \"bigint\":\n                    return [...acc, \"integer\"];\n                case \"object\":\n                    if (x._def.value === null)\n                        return [...acc, \"null\"];\n                case \"symbol\":\n                case \"undefined\":\n                case \"function\":\n                default:\n                    return acc;\n            }\n        }, []);\n        if (types.length === options.length) {\n            // all the literals are primitive, as far as null can be considered primitive\n            const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n            return {\n                type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n                enum: options.reduce((acc, x) => {\n                    return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n                }, []),\n            };\n        }\n    }\n    else if (options.every((x) => x._def.typeName === \"ZodEnum\")) {\n        return {\n            type: \"string\",\n            enum: options.reduce((acc, x) => [\n                ...acc,\n                ...x._def.values.filter((x) => !acc.includes(x)),\n            ], []),\n        };\n    }\n    return asAnyOf(def, refs);\n}\nconst asAnyOf = (def, refs) => {\n    const anyOf = (def.options instanceof Map\n        ? Array.from(def.options.values())\n        : def.options)\n        .map((x, i) => parseDef(x._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"anyOf\", `${i}`],\n    }))\n        .filter((x) => !!x &&\n        (!refs.strictUnions ||\n            (typeof x === \"object\" && Object.keys(x).length > 0)));\n    return anyOf.length ? { anyOf } : undefined;\n};\n", "import { parseDef } from \"../parseDef.js\";\nimport { primitiveMappings } from \"./union.js\";\nexport function parseNullableDef(def, refs) {\n    if ([\"ZodString\", \"ZodNumber\", \"ZodBigInt\", \"ZodBoolean\", \"ZodNull\"].includes(def.innerType._def.typeName) &&\n        (!def.innerType._def.checks || !def.innerType._def.checks.length)) {\n        if (refs.target === \"openApi3\") {\n            return {\n                type: primitiveMappings[def.innerType._def.typeName],\n                nullable: true,\n            };\n        }\n        return {\n            type: [\n                primitiveMappings[def.innerType._def.typeName],\n                \"null\",\n            ],\n        };\n    }\n    if (refs.target === \"openApi3\") {\n        const base = parseDef(def.innerType._def, {\n            ...refs,\n            currentPath: [...refs.currentPath],\n        });\n        if (base && \"$ref\" in base)\n            return { allOf: [base], nullable: true };\n        return base && { ...base, nullable: true };\n    }\n    const base = parseDef(def.innerType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"anyOf\", \"0\"],\n    });\n    return base && { anyOf: [base, { type: \"null\" }] };\n}\n", "import { addErrorMessage, setResponseValueAndErrors, } from \"../errorMessages.js\";\nexport function parseNumberDef(def, refs) {\n    const res = {\n        type: \"number\",\n    };\n    if (!def.checks)\n        return res;\n    for (const check of def.checks) {\n        switch (check.kind) {\n            case \"int\":\n                res.type = \"integer\";\n                addErrorMessage(res, \"type\", check.message, refs);\n                break;\n            case \"min\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMinimum = true;\n                    }\n                    setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                }\n                break;\n            case \"max\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMaximum = true;\n                    }\n                    setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                }\n                break;\n            case \"multipleOf\":\n                setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n                break;\n        }\n    }\n    return res;\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport function parseObjectDef(def, refs) {\n    const forceOptionalIntoNullable = refs.target === \"openAi\";\n    const result = {\n        type: \"object\",\n        properties: {},\n    };\n    const required = [];\n    const shape = def.shape();\n    for (const propName in shape) {\n        let propDef = shape[propName];\n        if (propDef === undefined || propDef._def === undefined) {\n            continue;\n        }\n        let propOptional = safeIsOptional(propDef);\n        if (propOptional && forceOptionalIntoNullable) {\n            if (propDef._def.typeName === \"ZodOptional\") {\n                propDef = propDef._def.innerType;\n            }\n            if (!propDef.isNullable()) {\n                propDef = propDef.nullable();\n            }\n            propOptional = false;\n        }\n        const parsedDef = parseDef(propDef._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"properties\", propName],\n            propertyPath: [...refs.currentPath, \"properties\", propName],\n        });\n        if (parsedDef === undefined) {\n            continue;\n        }\n        result.properties[propName] = parsedDef;\n        if (!propOptional) {\n            required.push(propName);\n        }\n    }\n    if (required.length) {\n        result.required = required;\n    }\n    const additionalProperties = decideAdditionalProperties(def, refs);\n    if (additionalProperties !== undefined) {\n        result.additionalProperties = additionalProperties;\n    }\n    return result;\n}\nfunction decideAdditionalProperties(def, refs) {\n    if (def.catchall._def.typeName !== \"ZodNever\") {\n        return parseDef(def.catchall._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"additionalProperties\"],\n        });\n    }\n    switch (def.unknownKeys) {\n        case \"passthrough\":\n            return refs.allowedAdditionalProperties;\n        case \"strict\":\n            return refs.rejectedAdditionalProperties;\n        case \"strip\":\n            return refs.removeAdditionalStrategy === \"strict\"\n                ? refs.allowedAdditionalProperties\n                : refs.rejectedAdditionalProperties;\n    }\n}\nfunction safeIsOptional(schema) {\n    try {\n        return schema.isOptional();\n    }\n    catch {\n        return true;\n    }\n}\n", "import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport const parseOptionalDef = (def, refs) => {\n    if (refs.currentPath.toString() === refs.propertyPath?.toString()) {\n        return parseDef(def.innerType._def, refs);\n    }\n    const innerSchema = parseDef(def.innerType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"anyOf\", \"1\"],\n    });\n    return innerSchema\n        ? {\n            anyOf: [\n                {\n                    not: parseAnyDef(refs),\n                },\n                innerSchema,\n            ],\n        }\n        : parseAnyDef(refs);\n};\n", "import { parseDef } from \"../parseDef.js\";\nexport const parsePipelineDef = (def, refs) => {\n    if (refs.pipeStrategy === \"input\") {\n        return parseDef(def.in._def, refs);\n    }\n    else if (refs.pipeStrategy === \"output\") {\n        return parseDef(def.out._def, refs);\n    }\n    const a = parseDef(def.in._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n    });\n    const b = parseDef(def.out._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"allOf\", a ? \"1\" : \"0\"],\n    });\n    return {\n        allOf: [a, b].filter((x) => x !== undefined),\n    };\n};\n", "import { parseDef } from \"../parseDef.js\";\nexport function parsePromiseDef(def, refs) {\n    return parseDef(def.type._def, refs);\n}\n", "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseSetDef(def, refs) {\n    const items = parseDef(def.valueType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"items\"],\n    });\n    const schema = {\n        type: \"array\",\n        uniqueItems: true,\n        items,\n    };\n    if (def.minSize) {\n        setResponseValueAndErrors(schema, \"minItems\", def.minSize.value, def.minSize.message, refs);\n    }\n    if (def.maxSize) {\n        setResponseValueAndErrors(schema, \"maxItems\", def.maxSize.value, def.maxSize.message, refs);\n    }\n    return schema;\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport function parseTupleDef(def, refs) {\n    if (def.rest) {\n        return {\n            type: \"array\",\n            minItems: def.items.length,\n            items: def.items\n                .map((x, i) => parseDef(x._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"items\", `${i}`],\n            }))\n                .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n            additionalItems: parseDef(def.rest._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"additionalItems\"],\n            }),\n        };\n    }\n    else {\n        return {\n            type: \"array\",\n            minItems: def.items.length,\n            maxItems: def.items.length,\n            items: def.items\n                .map((x, i) => parseDef(x._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"items\", `${i}`],\n            }))\n                .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n        };\n    }\n}\n", "import { parseAnyDef } from \"./any.js\";\nexport function parseUndefinedDef(refs) {\n    return {\n        not: parseAnyDef(refs),\n    };\n}\n", "import { parseAnyDef } from \"./any.js\";\nexport function parseUnknownDef(refs) {\n    return parseAnyDef(refs);\n}\n", "import { parseDef } from \"../parseDef.js\";\nexport const parseReadonlyDef = (def, refs) => {\n    return parseDef(def.innerType._def, refs);\n};\n", "import { ignoreOverride } from \"./Options.js\";\nimport { selectParser } from \"./selectParser.js\";\nimport { getRelativePath } from \"./getRelativePath.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nexport function parseDef(def, refs, forceResolution = false) {\n    const seenItem = refs.seen.get(def);\n    if (refs.override) {\n        const overrideResult = refs.override?.(def, refs, seenItem, forceResolution);\n        if (overrideResult !== ignoreOverride) {\n            return overrideResult;\n        }\n    }\n    if (seenItem && !forceResolution) {\n        const seenSchema = get$ref(seenItem, refs);\n        if (seenSchema !== undefined) {\n            return seenSchema;\n        }\n    }\n    const newItem = { def, path: refs.currentPath, jsonSchema: undefined };\n    refs.seen.set(def, newItem);\n    const jsonSchemaOrGetter = selectParser(def, def.typeName, refs);\n    // If the return was a function, then the inner definition needs to be extracted before a call to parseDef (recursive)\n    const jsonSchema = typeof jsonSchemaOrGetter === \"function\"\n        ? parseDef(jsonSchemaOrGetter(), refs)\n        : jsonSchemaOrGetter;\n    if (jsonSchema) {\n        addMeta(def, refs, jsonSchema);\n    }\n    if (refs.postProcess) {\n        const postProcessResult = refs.postProcess(jsonSchema, def, refs);\n        newItem.jsonSchema = jsonSchema;\n        return postProcessResult;\n    }\n    newItem.jsonSchema = jsonSchema;\n    return jsonSchema;\n}\nconst get$ref = (item, refs) => {\n    switch (refs.$refStrategy) {\n        case \"root\":\n            return { $ref: item.path.join(\"/\") };\n        case \"relative\":\n            return { $ref: getRelativePath(refs.currentPath, item.path) };\n        case \"none\":\n        case \"seen\": {\n            if (item.path.length < refs.currentPath.length &&\n                item.path.every((value, index) => refs.currentPath[index] === value)) {\n                console.warn(`Recursive reference detected at ${refs.currentPath.join(\"/\")}! Defaulting to any`);\n                return parseAnyDef(refs);\n            }\n            return refs.$refStrategy === \"seen\" ? parseAnyDef(refs) : undefined;\n        }\n    }\n};\nconst addMeta = (def, refs, jsonSchema) => {\n    if (def.description) {\n        jsonSchema.description = def.description;\n        if (refs.markdownDescription) {\n            jsonSchema.markdownDescription = def.description;\n        }\n    }\n    return jsonSchema;\n};\n", "import { parseDef } from \"./parseDef.js\";\nimport { getRefs } from \"./Refs.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nconst zodToJsonSchema = (schema, options) => {\n    const refs = getRefs(options);\n    let definitions = typeof options === \"object\" && options.definitions\n        ? Object.entries(options.definitions).reduce((acc, [name, schema]) => ({\n            ...acc,\n            [name]: parseDef(schema._def, {\n                ...refs,\n                currentPath: [...refs.basePath, refs.definitionPath, name],\n            }, true) ?? parseAnyDef(refs),\n        }), {})\n        : undefined;\n    const name = typeof options === \"string\"\n        ? options\n        : options?.nameStrategy === \"title\"\n            ? undefined\n            : options?.name;\n    const main = parseDef(schema._def, name === undefined\n        ? refs\n        : {\n            ...refs,\n            currentPath: [...refs.basePath, refs.definitionPath, name],\n        }, false) ?? parseAnyDef(refs);\n    const title = typeof options === \"object\" &&\n        options.name !== undefined &&\n        options.nameStrategy === \"title\"\n        ? options.name\n        : undefined;\n    if (title !== undefined) {\n        main.title = title;\n    }\n    if (refs.flags.hasReferencedOpenAiAnyType) {\n        if (!definitions) {\n            definitions = {};\n        }\n        if (!definitions[refs.openAiAnyTypeName]) {\n            definitions[refs.openAiAnyTypeName] = {\n                // Skipping \"object\" as no properties can be defined and additionalProperties must be \"false\"\n                type: [\"string\", \"number\", \"integer\", \"boolean\", \"array\", \"null\"],\n                items: {\n                    $ref: refs.$refStrategy === \"relative\"\n                        ? \"1\"\n                        : [\n                            ...refs.basePath,\n                            refs.definitionPath,\n                            refs.openAiAnyTypeName,\n                        ].join(\"/\"),\n                },\n            };\n        }\n    }\n    const combined = name === undefined\n        ? definitions\n            ? {\n                ...main,\n                [refs.definitionPath]: definitions,\n            }\n            : main\n        : {\n            $ref: [\n                ...(refs.$refStrategy === \"relative\" ? [] : refs.basePath),\n                refs.definitionPath,\n                name,\n            ].join(\"/\"),\n            [refs.definitionPath]: {\n                ...definitions,\n                [name]: main,\n            },\n        };\n    if (refs.target === \"jsonSchema7\") {\n        combined.$schema = \"http://json-schema.org/draft-07/schema#\";\n    }\n    else if (refs.target === \"jsonSchema2019-09\" || refs.target === \"openAi\") {\n        combined.$schema = \"https://json-schema.org/draft/2019-09/schema#\";\n    }\n    if (refs.target === \"openAi\" &&\n        (\"anyOf\" in combined ||\n            \"oneOf\" in combined ||\n            \"allOf\" in combined ||\n            (\"type\" in combined && Array.isArray(combined.type)))) {\n        console.warn(\"Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.\");\n    }\n    return combined;\n};\nexport { zodToJsonSchema };\n", "export * from \"./Options.js\";\nexport * from \"./Refs.js\";\nexport * from \"./errorMessages.js\";\nexport * from \"./getRelativePath.js\";\nexport * from \"./parseDef.js\";\nexport * from \"./parseTypes.js\";\nexport * from \"./parsers/any.js\";\nexport * from \"./parsers/array.js\";\nexport * from \"./parsers/bigint.js\";\nexport * from \"./parsers/boolean.js\";\nexport * from \"./parsers/branded.js\";\nexport * from \"./parsers/catch.js\";\nexport * from \"./parsers/date.js\";\nexport * from \"./parsers/default.js\";\nexport * from \"./parsers/effects.js\";\nexport * from \"./parsers/enum.js\";\nexport * from \"./parsers/intersection.js\";\nexport * from \"./parsers/literal.js\";\nexport * from \"./parsers/map.js\";\nexport * from \"./parsers/nativeEnum.js\";\nexport * from \"./parsers/never.js\";\nexport * from \"./parsers/null.js\";\nexport * from \"./parsers/nullable.js\";\nexport * from \"./parsers/number.js\";\nexport * from \"./parsers/object.js\";\nexport * from \"./parsers/optional.js\";\nexport * from \"./parsers/pipeline.js\";\nexport * from \"./parsers/promise.js\";\nexport * from \"./parsers/readonly.js\";\nexport * from \"./parsers/record.js\";\nexport * from \"./parsers/set.js\";\nexport * from \"./parsers/string.js\";\nexport * from \"./parsers/tuple.js\";\nexport * from \"./parsers/undefined.js\";\nexport * from \"./parsers/union.js\";\nexport * from \"./parsers/unknown.js\";\nexport * from \"./selectParser.js\";\nexport * from \"./zodToJsonSchema.js\";\nimport { zodToJsonSchema } from \"./zodToJsonSchema.js\";\nexport default zodToJsonSchema;\n", "import { z } from \"zod\";\nimport { ConvexTool } from \"./index.js\";\nimport { loadSelectedDeploymentCredentials } from \"../../api.js\";\nimport { runSystemQuery } from \"../../run.js\";\nimport { deploymentFetch } from \"../../utils/utils.js\";\nimport { getMcpDeploymentSelection } from \"../requestContext.js\";\n\nconst inputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\n      \"Deployment selector (from the status tool) to read tables from.\",\n    ),\n});\n\nconst outputSchema = z.object({\n  tables: z.record(\n    z.string(),\n    z.object({\n      schema: z.any().optional(),\n      inferredSchema: z.any().optional(),\n    }),\n  ),\n});\n\nexport const TablesTool: ConvexTool<typeof inputSchema, typeof outputSchema> = {\n  name: \"tables\",\n  description:\n    \"List all tables in a particular Convex deployment and their inferred and declared schema.\",\n  inputSchema,\n  outputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } = ctx.decodeDeploymentSelectorUnchecked(\n      args.deploymentSelector,\n    );\n    process.chdir(projectDir);\n    const deploymentSelection = await getMcpDeploymentSelection(\n      ctx,\n      deployment,\n    );\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    const schemaResponse: any = await runSystemQuery(ctx, {\n      deploymentUrl: credentials.url,\n      adminKey: credentials.adminKey,\n      functionName: \"_system/frontend/getSchemas\",\n      componentPath: undefined,\n      args: {},\n    });\n    const schema: Record<string, z.infer<typeof activeSchemaEntry>> = {};\n    if (schemaResponse.active) {\n      const parsed = activeSchema.parse(JSON.parse(schemaResponse.active));\n      for (const table of parsed.tables) {\n        schema[table.tableName] = table;\n      }\n    }\n    const fetch = deploymentFetch(ctx, {\n      deploymentUrl: credentials.url,\n      adminKey: credentials.adminKey,\n    });\n    const response = await fetch(\"/api/shapes2\", {});\n    const shapesResult: Record<string, any> = await response.json();\n\n    const allTablesSet = new Set([\n      ...Object.keys(shapesResult),\n      ...Object.keys(schema),\n    ]);\n    const allTables = Array.from(allTablesSet);\n    allTables.sort();\n\n    const result: z.infer<typeof outputSchema>[\"tables\"] = {};\n    for (const table of allTables) {\n      result[table] = {\n        schema: schema[table],\n        inferredSchema: shapesResult[table],\n      };\n    }\n    return { tables: result };\n  },\n};\n\nconst activeSchemaEntry = z.object({\n  tableName: z.string(),\n  indexes: z.array(z.any()),\n  searchIndexes: z.array(z.any()),\n  vectorIndexes: z.array(z.any()),\n  documentType: z.any(),\n});\n\nconst activeSchema = z.object({ tables: z.array(activeSchemaEntry) });\n", "import { z } from \"zod\";\nimport { runSystemQuery } from \"../../run.js\";\nimport { ConvexTool } from \"./index.js\";\nimport { PaginationResult } from \"../../../../server/pagination.js\";\nimport { loadSelectedDeploymentCredentials } from \"../../api.js\";\nimport { getMcpDeploymentSelection } from \"../requestContext.js\";\n\nconst inputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\"Deployment selector (from the status tool) to read data from.\"),\n  tableName: z.string().describe(\"The name of the table to read from.\"),\n  order: z.enum([\"asc\", \"desc\"]).describe(\"The order to sort the results in.\"),\n  cursor: z.string().optional().describe(\"The cursor to start reading from.\"),\n  limit: z\n    .number()\n    .max(1000)\n    .optional()\n    .describe(\"The maximum number of results to return, defaults to 100.\"),\n});\n\nconst outputSchema = z.object({\n  page: z.array(z.any()),\n  isDone: z.boolean(),\n  continueCursor: z.string(),\n});\n\nconst description = `\nRead a page of data from a table in the project's Convex deployment.\n\nOutput:\n- page: A page of results from the table.\n- isDone: Whether there are more results to read.\n- continueCursor: The cursor to use to read the next page of results.\n`.trim();\n\nexport const DataTool: ConvexTool<typeof inputSchema, typeof outputSchema> = {\n  name: \"data\",\n  description,\n  inputSchema,\n  outputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } =\n      await ctx.decodeDeploymentSelectorReadOnly(args.deploymentSelector);\n    process.chdir(projectDir);\n    const deploymentSelection = await getMcpDeploymentSelection(\n      ctx,\n      deployment,\n    );\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    const paginationResult = (await runSystemQuery(ctx, {\n      deploymentUrl: credentials.url,\n      adminKey: credentials.adminKey,\n      functionName: \"_system/cli/tableData\",\n      componentPath: undefined,\n      args: {\n        table: args.tableName,\n        order: args.order,\n        paginationOpts: {\n          numItems: args.limit ?? 100,\n          cursor: args.cursor ?? null,\n        },\n      },\n    })) as unknown as PaginationResult<any>;\n    return {\n      page: paginationResult.page,\n      isDone: paginationResult.isDone,\n      continueCursor: paginationResult.continueCursor,\n    };\n  },\n};\n", "import {\n  encodeDeploymentSelector,\n  getMcpDeploymentSelection,\n  RequestContext,\n} from \"../requestContext.js\";\nimport {\n  DeploymentSelectionWithinProject,\n  deploymentSelectionWithinProjectFromOptions,\n  loadSelectedDeploymentCredentials,\n} from \"../../api.js\";\nimport { z } from \"zod\";\nimport { ConvexTool } from \"./index.js\";\nimport { deploymentDashboardUrlPage } from \"../../../lib/dashboard.js\";\nimport { getDeploymentSelection } from \"../../../lib/deploymentSelection.js\";\n\nconst projectDirDescription = `\nThe root directory of the Convex project. This is usually the editor's workspace directory\nand often includes the 'package.json' file and the 'convex/' folder.\n\nPass this option unless explicitly instructed not to.\n`;\n\nconst inputSchema = z.object({\n  projectDir: z.string().optional().describe(projectDirDescription),\n});\nconst outputSchema = z.object({\n  availableDeployments: z.array(\n    z.object({\n      kind: z.string(),\n      deploymentSelector: z.string(),\n      url: z.string(),\n      dashboardUrl: z.string().optional(),\n      readOnly: z.boolean().optional(),\n    }),\n  ),\n});\n\nconst description = `\nGet all available deployments for a given Convex project directory.\n\nUse this tool to find the deployment selector, URL, and dashboard URL for each\ndeployment associated with the project. Pass the deployment selector to other\ntools to target a specific deployment.\n\nWhen deployed to Convex Cloud, projects have a development ({\"kind\": \"ownDev\"}) and\nproduction ({\"kind\": \"prod\"}) deployment. Generally default to using the development\ndeployment unless you'd specifically like to debug issues in production.\n\nWhen running locally, there will be a single \"urlWithAdminKey\" deployment.\n\nIf a deployment has \"readOnly: true\", it can only be used with read-only tools\nthat don't expose PII (\\`insights\\`, \\`functionSpec\\`, \\`tables\\`). Tools that read\nuser data (\\`data\\`, \\`logs\\`, \\`runOneoffQuery\\`) and mutating tools will reject it.\n\nIf \"readOnly\" is false or absent, all tools can be used with the deployment.\n`.trim();\n\nexport const StatusTool: ConvexTool<typeof inputSchema, typeof outputSchema> = {\n  name: \"status\",\n  description,\n  inputSchema,\n  outputSchema,\n  handler: async (ctx: RequestContext, input) => {\n    const projectDir = input.projectDir ?? ctx.options.projectDir;\n    if (projectDir === undefined) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"No project directory provided. Either provide the `projectDir` argument or configure the MCP server with the `--project-dir` flag.\",\n      });\n    }\n    process.chdir(projectDir);\n    const selectionWithinProject = deploymentSelectionWithinProjectFromOptions(\n      ctx.options,\n    );\n    const deploymentSelection = await getDeploymentSelection(ctx, ctx.options);\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    let availableDeployments = [\n      {\n        kind: selectionWithinProject.kind,\n        deploymentSelector: encodeDeploymentSelector(\n          projectDir,\n          selectionWithinProject,\n        ),\n        url: credentials.url,\n        dashboardUrl:\n          credentials.deploymentFields?.deploymentName &&\n          deploymentDashboardUrlPage(\n            credentials.deploymentFields.deploymentName,\n            \"\",\n          ),\n      },\n    ];\n    // Also get the prod cloud deployment if we're using a cloud-hosted dev-deployment\n    if (\n      selectionWithinProject.kind === \"unspecified\" &&\n      !(\n        deploymentSelection.kind === \"existingDeployment\" &&\n        deploymentSelection.deploymentToActOn.deploymentFields === null\n      )\n    ) {\n      const prodSelectionWithinProject: DeploymentSelectionWithinProject = {\n        kind: \"prod\",\n      };\n      const prodDeploymentSelection = await getMcpDeploymentSelection(\n        ctx,\n        prodSelectionWithinProject,\n      );\n      const prodCredentials = await loadSelectedDeploymentCredentials(\n        ctx,\n        prodDeploymentSelection,\n      );\n      if (\n        prodCredentials.deploymentFields?.deploymentName &&\n        prodCredentials.deploymentFields.deploymentType\n      ) {\n        availableDeployments.push({\n          kind: prodSelectionWithinProject.kind,\n          deploymentSelector: encodeDeploymentSelector(\n            projectDir,\n            prodSelectionWithinProject,\n          ),\n          url: prodCredentials.url,\n          dashboardUrl: deploymentDashboardUrlPage(\n            prodCredentials.deploymentFields.deploymentName,\n            \"\",\n          ),\n        });\n      }\n    }\n    if (ctx.productionDeploymentsDisabled) {\n      const readOnly = ctx.productionPiiAllowed ? false : true;\n      return {\n        availableDeployments: availableDeployments.map((d) =>\n          d.kind === \"prod\" ? { ...d, readOnly } : d,\n        ),\n      };\n    }\n    return { availableDeployments };\n  },\n};\n", "import { z } from \"zod\";\nimport { ConvexTool } from \"./index.js\";\nimport { loadSelectedDeploymentCredentials } from \"../../api.js\";\nimport { runSystemQuery } from \"../../run.js\";\nimport { getMcpDeploymentSelection } from \"../requestContext.js\";\nimport { convexToJson } from \"../../../../values/index.js\";\n\nconst inputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\n      \"Deployment selector (from the status tool) to get function metadata from.\",\n    ),\n});\n\nconst outputSchema = z\n  .any()\n  .describe(\"Function metadata including arguments and return values\");\n\nconst description = `\nGet the function metadata from a Convex deployment.\n\nReturns an array of structured objects for each function the deployment. Each function's\nmetadata contains its identifier (which is its path within the convex/ folder joined\nwith its exported name), its argument validator, its return value validator, its type\n(i.e. is it a query, mutation, or action), and its visibility (i.e. is it public or\ninternal).\n`.trim();\n\nexport const FunctionSpecTool: ConvexTool<\n  typeof inputSchema,\n  typeof outputSchema\n> = {\n  name: \"functionSpec\",\n  description,\n  inputSchema,\n  outputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } = ctx.decodeDeploymentSelectorUnchecked(\n      args.deploymentSelector,\n    );\n    process.chdir(projectDir);\n    const deploymentSelection = await getMcpDeploymentSelection(\n      ctx,\n      deployment,\n    );\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    const functions = await runSystemQuery(ctx, {\n      deploymentUrl: credentials.url,\n      adminKey: credentials.adminKey,\n      functionName: \"_system/cli/modules:apiSpec\",\n      componentPath: undefined,\n      args: {},\n    });\n    return convexToJson(functions);\n  },\n};\n", "import { z } from \"zod\";\nimport { ConvexTool } from \"./index.js\";\nimport { loadSelectedDeploymentCredentials } from \"../../api.js\";\nimport { parseArgs, parseFunctionName } from \"../../run.js\";\nimport { readProjectConfig } from \"../../config.js\";\nimport { ConvexHttpClient } from \"../../../../browser/index.js\";\nimport { Value } from \"../../../../values/index.js\";\nimport { DefaultLogger } from \"../../../../browser/logging.js\";\nimport { getMcpDeploymentSelection } from \"../requestContext.js\";\nconst inputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\n      \"Deployment selector (from the status tool) to run the function on.\",\n    ),\n  functionName: z\n    .string()\n    .describe(\n      \"The name of the function to run (e.g. 'path/to/my/module.js:myFunction').\",\n    ),\n  args: z\n    .string()\n    .describe(\n      \"The argument object to pass to the function, JSON-encoded as a string.\",\n    ),\n});\n\nconst outputSchema = z.object({\n  result: z.any().describe(\"The result returned by the function\"),\n  logLines: z\n    .array(z.string())\n    .describe(\"The log lines generated by the function\"),\n});\n\nconst description = `\nRun a Convex function (query, mutation, or action) on your deployment.\n\nReturns the result and any log lines generated by the function.\n`.trim();\n\nexport const RunTool: ConvexTool<typeof inputSchema, typeof outputSchema> = {\n  name: \"run\",\n  description,\n  inputSchema,\n  outputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } = await ctx.decodeDeploymentSelector(\n      args.deploymentSelector,\n    );\n    process.chdir(projectDir);\n    const metadata = await getMcpDeploymentSelection(ctx, deployment);\n    const credentials = await loadSelectedDeploymentCredentials(ctx, metadata);\n    const parsedArgs = await parseArgs(ctx, args.args);\n    const { projectConfig } = await readProjectConfig(ctx);\n    const parsedFunctionName = await parseFunctionName(\n      ctx,\n      args.functionName,\n      projectConfig.functions,\n    );\n    const logger = new DefaultLogger({ verbose: true });\n    const logLines: string[] = [];\n    logger.addLogLineListener((level, ...args) => {\n      logLines.push(`${level}: ${args.join(\" \")}`);\n    });\n    const client = new ConvexHttpClient(credentials.url, {\n      logger: logger,\n    });\n    client.setAdminAuth(credentials.adminKey);\n    let result: Value;\n    try {\n      result = await client.function(parsedFunctionName, undefined, parsedArgs);\n    } catch (err) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"invalid filesystem or env vars\",\n        printedMessage: `Failed to run function \"${args.functionName}\":\\n${(err as Error).toString().trim()}`,\n      });\n    }\n    return {\n      result,\n      logLines,\n    };\n  },\n};\n", "import { z } from \"zod\";\nimport { ConvexTool } from \"./index.js\";\nimport { loadSelectedDeploymentCredentials } from \"../../api.js\";\nimport { deploymentEnvBackend, envSet, envRemove, EnvVar } from \"../../env.js\";\nimport { runSystemQuery } from \"../../run.js\";\nimport { getMcpDeploymentSelection } from \"../requestContext.js\";\n\n// List Environment Variables\nconst envListInputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\n      \"Deployment selector (from the status tool) to list environment variables from.\",\n    ),\n  includeValues: z\n    .boolean()\n    .optional()\n    .describe(\n      \"Also return each variable's value. Values are often secrets like API keys, so leave this off unless you need every value, and use envGet to read a single variable instead.\",\n    ),\n});\n\nconst envListOutputSchema = z.object({\n  variables: z.array(\n    z.object({\n      name: z.string(),\n      value: z\n        .string()\n        .optional()\n        .describe(\"Only present when includeValues is true.\"),\n    }),\n  ),\n});\n\nexport const EnvListTool: ConvexTool<\n  typeof envListInputSchema,\n  typeof envListOutputSchema\n> = {\n  name: \"envList\",\n  description:\n    \"List the names of all environment variables in your Convex deployment. Values are left out unless includeValues is true.\",\n  inputSchema: envListInputSchema,\n  outputSchema: envListOutputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } = await ctx.decodeDeploymentSelector(\n      args.deploymentSelector,\n    );\n    process.chdir(projectDir);\n    const deploymentSelection = await getMcpDeploymentSelection(\n      ctx,\n      deployment,\n    );\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    const variables = (await runSystemQuery(ctx, {\n      deploymentUrl: credentials.url,\n      adminKey: credentials.adminKey,\n      functionName: \"_system/cli/queryEnvironmentVariables\",\n      componentPath: undefined,\n      args: {},\n    })) as EnvVar[];\n    return {\n      variables: variables.map(({ name, value }) =>\n        args.includeValues ? { name, value } : { name },\n      ),\n    };\n  },\n};\n\n// Get Environment Variable\nconst envGetInputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\n      \"Deployment selector (from the status tool) to get environment variable from.\",\n    ),\n  name: z\n    .string()\n    .describe(\"The name of the environment variable to retrieve.\"),\n});\n\nconst envGetOutputSchema = z.object({\n  value: z.union([z.string(), z.null()]),\n});\n\nexport const EnvGetTool: ConvexTool<\n  typeof envGetInputSchema,\n  typeof envGetOutputSchema\n> = {\n  name: \"envGet\",\n  description:\n    \"Get a specific environment variable from your Convex deployment.\",\n  inputSchema: envGetInputSchema,\n  outputSchema: envGetOutputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } = await ctx.decodeDeploymentSelector(\n      args.deploymentSelector,\n    );\n    process.chdir(projectDir);\n    const deploymentSelection = await getMcpDeploymentSelection(\n      ctx,\n      deployment,\n    );\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    const envVar = (await runSystemQuery(ctx, {\n      deploymentUrl: credentials.url,\n      adminKey: credentials.adminKey,\n      functionName: \"_system/cli/queryEnvironmentVariables:get\",\n      componentPath: undefined,\n      args: { name: args.name },\n    })) as { name: string; value: string } | null;\n    return { value: envVar?.value ?? null };\n  },\n};\n\n// Set Environment Variable\nconst envSetInputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\n      \"Deployment selector (from the status tool) to set environment variable on.\",\n    ),\n  name: z.string().describe(\"The name of the environment variable to set.\"),\n  value: z.string().describe(\"The value to set for the environment variable.\"),\n});\n\nconst envSetOutputSchema = z.object({\n  success: z.boolean(),\n});\n\nexport const EnvSetTool: ConvexTool<\n  typeof envSetInputSchema,\n  typeof envSetOutputSchema\n> = {\n  name: \"envSet\",\n  description: \"Set an environment variable in your Convex deployment.\",\n  inputSchema: envSetInputSchema,\n  outputSchema: envSetOutputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } = await ctx.decodeDeploymentSelector(\n      args.deploymentSelector,\n    );\n    process.chdir(projectDir);\n    const deploymentSelection = await getMcpDeploymentSelection(\n      ctx,\n      deployment,\n    );\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    const deploymentInfo = {\n      deploymentUrl: credentials.url,\n      adminKey: credentials.adminKey,\n      deploymentNotice: \"\",\n    };\n    const backend = deploymentEnvBackend(ctx, deploymentInfo);\n    await envSet(ctx, backend, args.name, args.value);\n    return { success: true };\n  },\n};\n\n// Remove Environment Variable\nconst envRemoveInputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\n      \"Deployment selector (from the status tool) to remove environment variable from.\",\n    ),\n  name: z.string().describe(\"The name of the environment variable to remove.\"),\n});\n\nconst envRemoveOutputSchema = z.object({\n  success: z.boolean(),\n});\n\nexport const EnvRemoveTool: ConvexTool<\n  typeof envRemoveInputSchema,\n  typeof envRemoveOutputSchema\n> = {\n  name: \"envRemove\",\n  description: \"Remove an environment variable from your Convex deployment.\",\n  inputSchema: envRemoveInputSchema,\n  outputSchema: envRemoveOutputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } = await ctx.decodeDeploymentSelector(\n      args.deploymentSelector,\n    );\n    process.chdir(projectDir);\n    const deploymentSelection = await getMcpDeploymentSelection(\n      ctx,\n      deployment,\n    );\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    const deploymentInfo = {\n      deploymentUrl: credentials.url,\n      adminKey: credentials.adminKey,\n      deploymentNotice: \"\",\n    };\n    const backend = deploymentEnvBackend(ctx, deploymentInfo);\n    await envRemove(ctx, backend, args.name);\n    return { success: true };\n  },\n};\n", "import { z } from \"zod\";\nimport { ConvexTool } from \"./index.js\";\nimport { loadSelectedDeploymentCredentials } from \"../../api.js\";\nimport {\n  RUN_ONEOFF_QUERY_SOURCE_DESCRIPTION,\n  runTestFunctionQuery,\n} from \"../../runTestFunction.js\";\nimport { ThrowingFetchError } from \"../../utils/utils.js\";\nimport { getMcpDeploymentSelection } from \"../requestContext.js\";\n\nconst inputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\n      \"Deployment selector (from the status tool) to run the query on.\",\n    ),\n  query: z.string().describe(RUN_ONEOFF_QUERY_SOURCE_DESCRIPTION),\n});\n\nconst outputSchema = z.object({\n  result: z.any().describe(\"The result returned by the query\"),\n  logLines: z\n    .array(z.string())\n    .describe(\"The log lines generated by the query\"),\n});\n\nconst description = `\nRun a one-off readonly query on your Convex deployment.\n\nThis tool executes a JavaScript string as a query in your Convex deployment.\nThe query should follow Convex guidelines and use the following setup:\n\n\\`\\`\\`js\nimport { query, internalQuery } from \"convex:/_system/repl/wrappers.js\";\n\nexport default query({\n  handler: async (ctx) => {\n    console.log(\"Write and test your query function here!\");\n  },\n});\n\\`\\`\\`\n\nNote that there are no imports available in this environment. The only import\nyou can use is the built-in \"convex:/_system/repl/wrappers.js\" module in the\ntemplate.\n\nThe function call is also completely sandboxed, so it can only read data and\ncannot modify the database or access the network.\n\nReturns the result and any log lines generated by the query.\n`.trim();\n\nexport const RunOneoffQueryTool: ConvexTool<\n  typeof inputSchema,\n  typeof outputSchema\n> = {\n  name: \"runOneoffQuery\",\n  description,\n  inputSchema,\n  outputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } =\n      await ctx.decodeDeploymentSelectorReadOnly(args.deploymentSelector);\n    process.chdir(projectDir);\n    const deploymentSelection = await getMcpDeploymentSelection(\n      ctx,\n      deployment,\n    );\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    try {\n      const outcome = await runTestFunctionQuery(ctx, {\n        deploymentUrl: credentials.url,\n        adminKey: credentials.adminKey,\n        querySource: args.query,\n      });\n      if (outcome.kind === \"applicationFailure\") {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage: `Query failed: ${JSON.stringify(outcome.payload, null, 2)}`,\n        });\n      }\n      return {\n        result: outcome.value,\n        logLines: outcome.logLines,\n      };\n    } catch (err) {\n      if (err instanceof ThrowingFetchError) {\n        return await err.handle(ctx);\n      }\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `Failed to run query: ${(err as Error).toString().trim()}`,\n      });\n    }\n  },\n};\n", "import { z } from \"zod\";\nimport { ConvexTool } from \"./index.js\";\nimport { loadSelectedDeploymentCredentials } from \"../../api.js\";\nimport { deploymentFetch } from \"../../utils/utils.js\";\nimport { FunctionExecution } from \"../../apiTypes.js\";\nimport { formatLogsAsText } from \"../../logs.js\";\nimport { getMcpDeploymentSelection } from \"../requestContext.js\";\n\nconst inputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\"Deployment selector (from the status tool) to read logs from.\"),\n  status: z\n    .enum([\"all\", \"success\", \"failure\"])\n    .default(\"all\")\n    .optional()\n    .describe(\n      'Filter by execution outcome. \"failure\" returns only executions that threw an error. \"success\" returns only successful executions. Defaults to \"all\".',\n    ),\n  cursor: z\n    .number()\n    .optional()\n    .describe(\n      \"Optional cursor (in ms) to start reading from. Use 0 to read from the beginning.\",\n    ),\n  entriesLimit: z\n    .number()\n    .int()\n    .positive()\n    .max(1000)\n    .optional()\n    .describe(\n      \"Maximum number of log entries to return (from the end). If omitted, returns all available in this chunk.\",\n    ),\n  tokensLimit: z\n    .number()\n    .int()\n    .positive()\n    .default(20000)\n    .optional()\n    .describe(\n      \"Approximate maximum number of tokens to return (applied to the JSON payload). Defaults to 20000.\",\n    ),\n  jsonl: z\n    .boolean()\n    .default(false)\n    .optional()\n    .describe(\n      \"If true, return raw log entries as JSONL. If false (default), return formatted text logs.\",\n    ),\n});\n\nconst outputSchema = z.object({\n  entries: z.string(),\n  newCursor: z.number(),\n});\n\nconst logsResponseSchema = z.object({\n  entries: z.array(z.any()),\n  newCursor: z.number(),\n});\n\nconst description = `\nFetch a chunk of recent log entries from your Convex deployment.\n\nReturns a batch of UDF execution log entries and a new cursor you can use to\nrequest the next batch. This tool does not tail; it performs a single fetch.\n\nTo see only errors and exceptions, set status to \"failure\". This filters to\nexecutions where a function threw an error, which is useful for debugging\ndeployment issues. Each failed entry includes the error message and stack trace.\n`.trim();\n\nexport const LogsTool: ConvexTool<typeof inputSchema, typeof outputSchema> = {\n  name: \"logs\",\n  description,\n  inputSchema,\n  outputSchema,\n  handler: async (ctx, args) => {\n    const { projectDir, deployment } =\n      await ctx.decodeDeploymentSelectorReadOnly(args.deploymentSelector);\n    process.chdir(projectDir);\n    const deploymentSelection = await getMcpDeploymentSelection(\n      ctx,\n      deployment,\n    );\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n\n    const fetch = deploymentFetch(ctx, {\n      deploymentUrl: credentials.url,\n      adminKey: credentials.adminKey,\n    });\n\n    const cursor = args.cursor ?? 0;\n    const response = await fetch(`/api/stream_function_logs?cursor=${cursor}`, {\n      method: \"GET\",\n    });\n\n    if (!response.ok) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: `HTTP error ${response.status}: ${await response.text()}`,\n      });\n    }\n\n    const { entries: allEntries, newCursor } = await response\n      .json()\n      .then(logsResponseSchema.parse);\n\n    const status = args.status ?? \"all\";\n    const entries =\n      status === \"all\"\n        ? allEntries\n        : allEntries.filter((entry: FunctionExecution) => {\n            if (entry.kind !== \"Completion\") return false;\n            const hasError = entry.error !== undefined && entry.error !== null;\n            return status === \"failure\" ? hasError : !hasError;\n          });\n\n    const limitedEntries = limitLogs({\n      entries,\n      tokensLimit: args.tokensLimit ?? 20000,\n      entriesLimit: args.entriesLimit ?? entries.length,\n    });\n\n    if (args.jsonl) {\n      return {\n        entries: limitedEntries\n          .map((entry) => JSON.stringify(entry))\n          .join(\"\\n\"),\n        newCursor,\n      };\n    }\n\n    return {\n      entries: formatLogsAsText(limitedEntries),\n      newCursor,\n    };\n  },\n};\n\nexport function limitLogs({\n  entries,\n  tokensLimit,\n  entriesLimit,\n}: {\n  entries: FunctionExecution[];\n  tokensLimit: number;\n  entriesLimit: number;\n}): FunctionExecution[] {\n  // 1) Apply entries limit first so we cut off neatly at entry boundaries (latest entries kept)\n  const limitedByEntries = entries.slice(entries.length - entriesLimit);\n\n  // 2) Apply token limit by iterating over log lines from newest to oldest and\n  //    only include lines while within token budget. We cut off at the nearest log line.\n  const limitedByTokens = limitEntriesByTokenBudget({\n    entries: limitedByEntries,\n    tokensLimit,\n  });\n\n  return limitedByTokens;\n}\n\nfunction limitEntriesByTokenBudget({\n  entries,\n  tokensLimit,\n}: {\n  entries: FunctionExecution[];\n  tokensLimit: number;\n}): FunctionExecution[] {\n  const result: FunctionExecution[] = [];\n  let tokens = 0;\n  for (const entry of entries) {\n    const entryString = JSON.stringify(entry);\n    const entryTokens = estimateTokenCount(entryString);\n    tokens += entryTokens;\n    if (tokens > tokensLimit) break;\n    result.push(entry);\n  }\n  return result;\n}\n\nfunction estimateTokenCount(entryString: string): number {\n  return entryString.length * 0.33;\n}\n", "import { z } from \"zod\";\nimport { ConvexTool } from \"./index.js\";\nimport { loadSelectedDeploymentCredentials } from \"../../api.js\";\nimport { deploymentDashboardUrlPage } from \"../../../lib/dashboard.js\";\nimport { fetchInsights } from \"../../insights.js\";\nimport { getMcpDeploymentSelection } from \"../requestContext.js\";\n\nconst inputSchema = z.object({\n  deploymentSelector: z\n    .string()\n    .describe(\n      \"Deployment selector (from the status tool) to fetch insights for.\",\n    ),\n});\n\nconst occRecentEventSchema = z.object({\n  timestamp: z.string(),\n  id: z.string(),\n  request_id: z.string(),\n  occ_document_id: z.string().optional(),\n  occ_write_source: z.string().optional(),\n  occ_retry_count: z.number(),\n});\n\nconst resourceRecentEventSchema = z.object({\n  timestamp: z.string(),\n  id: z.string(),\n  request_id: z.string(),\n  calls: z.array(\n    z.object({\n      table_name: z.string(),\n      bytes_read: z.number(),\n      documents_read: z.number(),\n    }),\n  ),\n  success: z.boolean(),\n});\n\nconst insightSchema = z.discriminatedUnion(\"kind\", [\n  z.object({\n    kind: z.literal(\"occRetried\"),\n    severity: z.literal(\"warning\"),\n    functionId: z.string(),\n    componentPath: z.string().nullable(),\n    occCalls: z.number(),\n    occTableName: z.string().optional(),\n    recentEvents: z.array(occRecentEventSchema),\n  }),\n  z.object({\n    kind: z.literal(\"occFailedPermanently\"),\n    severity: z.literal(\"error\"),\n    functionId: z.string(),\n    componentPath: z.string().nullable(),\n    occCalls: z.number(),\n    occTableName: z.string().optional(),\n    recentEvents: z.array(occRecentEventSchema),\n  }),\n  z.object({\n    kind: z.literal(\"bytesReadLimit\"),\n    severity: z.literal(\"error\"),\n    functionId: z.string(),\n    componentPath: z.string().nullable(),\n    count: z.number(),\n    recentEvents: z.array(resourceRecentEventSchema),\n  }),\n  z.object({\n    kind: z.literal(\"bytesReadThreshold\"),\n    severity: z.literal(\"warning\"),\n    functionId: z.string(),\n    componentPath: z.string().nullable(),\n    count: z.number(),\n    recentEvents: z.array(resourceRecentEventSchema),\n  }),\n  z.object({\n    kind: z.literal(\"documentsReadLimit\"),\n    severity: z.literal(\"error\"),\n    functionId: z.string(),\n    componentPath: z.string().nullable(),\n    count: z.number(),\n    recentEvents: z.array(resourceRecentEventSchema),\n  }),\n  z.object({\n    kind: z.literal(\"documentsReadThreshold\"),\n    severity: z.literal(\"warning\"),\n    functionId: z.string(),\n    componentPath: z.string().nullable(),\n    count: z.number(),\n    recentEvents: z.array(resourceRecentEventSchema),\n  }),\n]);\n\nconst outputSchema = z.object({\n  insights: z.array(insightSchema),\n  summary: z.string(),\n  dashboardUrl: z.string(),\n});\n\nconst description = `\nFetch health insights for a Convex deployment over the last 72 hours.\n\nReturns OCC (Optimistic Concurrency Control) conflicts and resource limit issues\nthat may indicate performance problems or failing functions.\n\n**OCC insights** (occRetried, occFailedPermanently):\n  Mutations that conflict on the same document. To fix: restructure mutations to\n  touch fewer shared documents, split hot documents, or reduce transaction scope.\n\n**Resource limit insights** (bytesReadLimit, documentsReadLimit, bytesReadThreshold, documentsReadThreshold):\n  Functions reading too much data. To fix: add indexes to avoid full table scans,\n  use pagination, or filter data more precisely in queries.\n\nSeverity levels:\n  - \"error\": Function executions are failing (permanent OCC failures or hard limits hit)\n  - \"warning\": Function executions succeed but are at risk (retried OCCs or approaching limits)\n\nUse the logs tool with status \"failure\" to see individual error messages and stack traces.\n\nOnly available for Convex cloud deployments when logged in as a user.\n`.trim();\n\nexport const InsightsTool: ConvexTool<typeof inputSchema, typeof outputSchema> =\n  {\n    name: \"insights\",\n    description,\n    inputSchema,\n    outputSchema,\n    handler: async (ctx, args) => {\n      const { projectDir, deployment } = ctx.decodeDeploymentSelectorUnchecked(\n        args.deploymentSelector,\n      );\n      process.chdir(projectDir);\n      const deploymentSelection = await getMcpDeploymentSelection(\n        ctx,\n        deployment,\n      );\n      const credentials = await loadSelectedDeploymentCredentials(\n        ctx,\n        deploymentSelection,\n      );\n\n      const deploymentName =\n        credentials.deploymentFields?.deploymentName ?? null;\n      if (deploymentName === null) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"Insights are only available for cloud deployments. Local deployments do not have insights data.\",\n        });\n      }\n\n      const auth = ctx.bigBrainAuth();\n      if (\n        auth === null ||\n        auth.kind === \"deploymentKey\" ||\n        auth.kind === \"projectKey\"\n      ) {\n        return await ctx.crash({\n          exitCode: 1,\n          errorType: \"fatal\",\n          printedMessage:\n            \"Insights require to be logged in as a user. Deploy keys and project keys cannot access team usage data.\",\n        });\n      }\n\n      const insights = await fetchInsights(ctx, deploymentName, {\n        includeRecentEvents: true,\n      });\n\n      const errorCount = insights.filter((i) => i.severity === \"error\").length;\n      const warningCount = insights.filter(\n        (i) => i.severity === \"warning\",\n      ).length;\n\n      let summary: string;\n      if (insights.length === 0) {\n        summary =\n          \"No issues found. The deployment is healthy over the last 72 hours.\";\n      } else {\n        const parts: string[] = [];\n        if (errorCount > 0)\n          parts.push(`${errorCount} error${errorCount > 1 ? \"s\" : \"\"}`);\n        if (warningCount > 0)\n          parts.push(`${warningCount} warning${warningCount > 1 ? \"s\" : \"\"}`);\n        summary = `Found ${parts.join(\" and \")} in the last 72 hours.`;\n      }\n\n      const dashboardUrl = deploymentDashboardUrlPage(\n        deploymentName,\n        \"?view=insights\",\n      );\n\n      // Cast needed: fetchInsights returns Insight[] with optional recentEvents,\n      // but the zod schema requires them. They're always present when\n      // includeRecentEvents is true.\n      return {\n        insights: insights as z.infer<typeof insightSchema>[],\n        summary,\n        dashboardUrl,\n      };\n    },\n  };\n", "import { RequestContext } from \"../requestContext.js\";\nimport { ZodTypeAny, z } from \"zod\";\nimport zodToJsonSchema from \"zod-to-json-schema\";\nimport { TablesTool } from \"./tables.js\";\nimport { DataTool } from \"./data.js\";\nimport { StatusTool } from \"./status.js\";\nimport { FunctionSpecTool } from \"./functionSpec.js\";\nimport { RunTool } from \"./run.js\";\nimport { EnvListTool, EnvGetTool, EnvSetTool, EnvRemoveTool } from \"./env.js\";\nimport { RunOneoffQueryTool } from \"./runOneoffQuery.js\";\nimport { LogsTool } from \"./logs.js\";\nimport { InsightsTool } from \"./insights.js\";\nimport { Tool } from \"@modelcontextprotocol/server\";\n\nexport type ConvexTool<Input extends ZodTypeAny, Output extends ZodTypeAny> = {\n  name: string;\n  description: string;\n  inputSchema: Input;\n  outputSchema: Output;\n  handler: (\n    ctx: RequestContext,\n    input: z.infer<Input>,\n  ) => Promise<z.infer<Output>>;\n};\n\ntype ToolInput = Tool[\"inputSchema\"];\n\nexport function mcpTool(tool: ConvexTool<ZodTypeAny, ZodTypeAny>): Tool {\n  return {\n    name: tool.name,\n    description: tool.description,\n    inputSchema: zodToJsonSchema(tool.inputSchema) as ToolInput,\n  };\n}\n\nexport const convexTools: ConvexTool<any, any>[] = [\n  StatusTool,\n  DataTool,\n  TablesTool,\n  FunctionSpecTool,\n  RunTool,\n  EnvListTool,\n  EnvGetTool,\n  EnvSetTool,\n  EnvRemoveTool,\n  RunOneoffQueryTool,\n  LogsTool,\n  InsightsTool,\n];\n", "export class Mutex {\n  private tail: Promise<void> = Promise.resolve();\n\n  async runExclusive<T>(fn: () => Promise<T>): Promise<T> {\n    const result = this.tail.then(fn);\n    // Reserve the next position before running fn, and allow the queue to\n    // continue even if fn rejects or throws synchronously.\n    this.tail = result.then(\n      () => {},\n      () => {},\n    );\n    return result;\n  }\n}\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { showSpinner, logMessage } from \"../bundler/log.js\";\nimport { chalkStderr } from \"chalk\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { runNetworkTestOnUrl, withTimeout } from \"./lib/networkTest.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\n\nexport const networkTest = new Command(\"network-test\")\n  .description(\"Run a network test to Convex's servers\")\n  .allowExcessArguments(false)\n  .addNetworkTestOptions()\n  .addDeploymentSelectionOptions(\n    actionDescription(\"Perform the network test on\"),\n    { showUrlHelp: true },\n  )\n  .action(async (options) => {\n    const ctx = await oneoffContext(options);\n    const timeoutSeconds = options.timeout\n      ? Number.parseFloat(options.timeout)\n      : 30;\n    await withTimeout(\n      ctx,\n      \"Network test\",\n      timeoutSeconds * 1000,\n      runNetworkTest(ctx, options),\n    );\n  });\n\nasync function runNetworkTest(\n  ctx: Context,\n  options: {\n    prod?: boolean | undefined;\n    previewName?: string | undefined;\n    deploymentName?: string | undefined;\n    url?: string | undefined;\n    adminKey?: string | undefined;\n    ipFamily?: string;\n    speedTest?: boolean;\n  },\n) {\n  showSpinner(\"Performing network test...\");\n  // Try to fetch the URL following the usual paths, but special case the\n  // `--url` argument in case the developer doesn't have network connectivity.\n  let url: string;\n  let adminKey: string | null;\n  if (options.url !== undefined && options.adminKey !== undefined) {\n    url = options.url;\n    adminKey = options.adminKey;\n  } else if (options.url !== undefined) {\n    url = options.url;\n    adminKey = null;\n  } else {\n    const deploymentSelection = await getDeploymentSelection(ctx, options);\n    const credentials = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n    );\n    url = credentials.url;\n    adminKey = credentials.adminKey;\n  }\n  logMessage(`${chalkStderr.green(`\u2714`)} Deployment URL: ${url}`);\n  await runNetworkTestOnUrl(ctx, { url, adminKey }, options);\n}\n", "import { Context } from \"../../bundler/context.js\";\nimport {\n  logFailure,\n  logFinishedStep,\n  logMessage,\n  logVerbose,\n  logWarning,\n} from \"../../bundler/log.js\";\nimport { chalkStderr } from \"chalk\";\nimport * as net from \"net\";\nimport * as dns from \"dns\";\nimport * as crypto from \"crypto\";\nimport {\n  bareDeploymentFetch,\n  formatDuration,\n  formatSize,\n  ThrowingFetchError,\n} from \"./utils/utils.js\";\nimport ws from \"ws\";\nimport { BaseConvexClient } from \"../../browser/index.js\";\nimport { DefaultLogger } from \"../../browser/logging.js\";\nconst ipFamilyNumbers = { ipv4: 4, ipv6: 6, auto: 0 } as const;\nconst ipFamilyNames = { 4: \"ipv4\", 6: \"ipv6\", 0: \"auto\" } as const;\n\nexport async function runNetworkTestOnUrl(\n  ctx: Context,\n  { url, adminKey }: { url: string; adminKey: string | null },\n  options: {\n    ipFamily?: string;\n    speedTest?: boolean;\n  },\n) {\n  // First, check DNS to see if we can resolve the URL's hostname.\n  await checkDns(ctx, url);\n\n  // Second, check to see if we can open a TCP connection to the hostname.\n  await checkTcp(ctx, url, options.ipFamily ?? \"auto\");\n\n  // Third, do a simple HTTPS request and check that we receive a 200.\n  await checkHttp(ctx, url);\n\n  // Fourth, check that we can open a WebSocket connection to the hostname.\n  await checkWs(ctx, { url, adminKey });\n\n  // Fifth, check a small echo request, much smaller than most networks' MTU.\n  await checkEcho(ctx, url, 128);\n\n  // Finally, try a large echo request, much larger than most networks' MTU.\n  await checkEcho(ctx, url, 4 * 1024 * 1024);\n  // Also do a 64MiB echo test if the user has requested a speed test.\n  if (options.speedTest) {\n    await checkEcho(ctx, url, 64 * 1024 * 1024);\n  }\n\n  logFinishedStep(\"Network test passed.\");\n}\n\nasync function checkDns(ctx: Context, url: string) {\n  try {\n    const hostname = new URL(\"/\", url).hostname;\n    const start = performance.now();\n    type DnsResult = { duration: number; address: string; family: number };\n    const result = await new Promise<DnsResult>((resolve, reject) => {\n      dns.lookup(hostname, (err, address, family) => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve({ duration: performance.now() - start, address, family });\n        }\n      });\n    });\n    logMessage(\n      `${chalkStderr.green(`\u2714`)} OK: DNS lookup => ${result.address}:${\n        ipFamilyNames[result.family as keyof typeof ipFamilyNames]\n      } (${formatDuration(result.duration)})`,\n    );\n  } catch (e: any) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      printedMessage: `FAIL: DNS lookup (${e})`,\n    });\n  }\n}\n\nasync function checkTcp(ctx: Context, urlString: string, ipFamilyOpt: string) {\n  const url = new URL(urlString);\n  if (url.protocol === \"http:\") {\n    const port = Number.parseInt(url.port || \"80\");\n    await checkTcpHostPort(ctx, url.hostname, port, ipFamilyOpt);\n  } else if (url.protocol === \"https:\") {\n    const port = Number.parseInt(url.port || \"443\");\n    await checkTcpHostPort(ctx, url.hostname, port, ipFamilyOpt);\n    // If we didn't specify a port, also try port 80.\n    if (!url.port) {\n      await checkTcpHostPort(ctx, url.hostname, 80, ipFamilyOpt);\n    }\n  } else {\n    // eslint-disable-next-line no-restricted-syntax\n    throw new Error(`Unknown protocol: ${url.protocol}`);\n  }\n}\n\nasync function checkTcpHostPort(\n  ctx: Context,\n  host: string,\n  port: number,\n  ipFamilyOpt: string,\n) {\n  const ipFamily = ipFamilyNumbers[ipFamilyOpt as keyof typeof ipFamilyNumbers];\n  const tcpString =\n    `TCP` + (ipFamilyOpt === \"auto\" ? \"\" : `/${ipFamilyOpt} ${host}:${port}`);\n  try {\n    const start = performance.now();\n    const duration = await new Promise<number>((resolve, reject) => {\n      const socket = net.connect(\n        {\n          host,\n          port,\n          noDelay: true,\n          family: ipFamily,\n        },\n        () => resolve(performance.now() - start),\n      );\n      socket.on(\"error\", (e) => reject(e));\n    });\n    logMessage(\n      `${chalkStderr.green(`\u2714`)} OK: ${tcpString} connect (${formatDuration(\n        duration,\n      )})`,\n    );\n  } catch (e: any) {\n    let errorMessage = `${e}`;\n    if (e instanceof AggregateError) {\n      const individualErrors = e.errors\n        .map((err, i) => `  ${i + 1}. ${err}`)\n        .join(\"\\n\");\n      errorMessage = `AggregateError with ${e.errors.length} errors:\\n${individualErrors}`;\n    }\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      printedMessage: `FAIL: ${tcpString} connect (${errorMessage})`,\n    });\n  }\n}\n\nasync function checkHttp(ctx: Context, urlString: string) {\n  const url = new URL(urlString);\n  const isHttps = url.protocol === \"https:\";\n  if (isHttps) {\n    url.protocol = \"http:\";\n    url.port = \"80\";\n    await checkHttpOnce(ctx, \"HTTP\", url.toString(), false);\n  }\n  await checkHttpOnce(ctx, isHttps ? \"HTTPS\" : \"HTTP\", urlString, true);\n}\n\n// Be sure to test this function against *prod* (with both HTTP & HTTPS) when\n// making changes.\nasync function checkHttpOnce(\n  ctx: Context,\n  name: string,\n  url: string,\n  allowRedirects: boolean,\n) {\n  const start = performance.now();\n  try {\n    // Be sure to use the same `deploymentFetch` we use elsewhere so we're actually\n    // getting coverage of our network stack.\n    const fetch = bareDeploymentFetch(ctx, { deploymentUrl: url });\n    const instanceNameUrl = new URL(\"/instance_name\", url);\n    const resp = await fetch(instanceNameUrl.toString(), {\n      redirect: allowRedirects ? \"follow\" : \"manual\",\n    });\n    if (resp.status !== 200) {\n      // eslint-disable-next-line no-restricted-syntax\n      throw new Error(`Unexpected status code: ${resp.status}`);\n    }\n  } catch (e: any) {\n    // Redirects return a 301, which causes `bareDeploymentFetch` to throw an\n    // ThrowingFetchError. Catch that here and succeed if we're not following\n    // redirects.\n    const isOkayRedirect =\n      !allowRedirects &&\n      e instanceof ThrowingFetchError &&\n      e.response.status === 301;\n    if (!isOkayRedirect) {\n      return ctx.crash({\n        exitCode: 1,\n        errorType: \"transient\",\n        printedMessage: `FAIL: ${name} check (${e})`,\n      });\n    }\n  }\n  const duration = performance.now() - start;\n  logMessage(\n    `${chalkStderr.green(`\u2714`)} OK: ${name} check (${formatDuration(duration)})`,\n  );\n}\n\nasync function checkWs(\n  ctx: Context,\n  { url, adminKey }: { url: string; adminKey: string | null },\n) {\n  if (adminKey === null) {\n    logWarning(\"Skipping WebSocket check because no admin key was provided.\");\n    return;\n  }\n  let queryPromiseResolver: ((value: string) => void) | null = null;\n  const queryPromise = new Promise<string | null>((resolve) => {\n    queryPromiseResolver = resolve;\n  });\n  const logger = new DefaultLogger({\n    verbose: process.env.CONVEX_VERBOSE !== undefined,\n  });\n  logger.addLogLineListener((level, ...args) => {\n    switch (level) {\n      case \"debug\":\n        logVerbose(...args);\n        break;\n      case \"info\":\n        logVerbose(...args);\n        break;\n      case \"warn\":\n        logWarning(...args);\n        break;\n      case \"error\":\n        // TODO: logFailure is a little hard to use here because it also interacts\n        // with the spinner and requires a string.\n        logWarning(...args);\n        break;\n    }\n  });\n  const convexClient = new BaseConvexClient(\n    url,\n    (updatedQueries) => {\n      for (const queryToken of updatedQueries) {\n        const result = convexClient.localQueryResultByToken(queryToken);\n        if (typeof result === \"string\" && queryPromiseResolver !== null) {\n          queryPromiseResolver(result);\n          queryPromiseResolver = null;\n        }\n      }\n    },\n    {\n      webSocketConstructor: ws as unknown as typeof WebSocket,\n      unsavedChangesWarning: false,\n      logger,\n    },\n  );\n  convexClient.setAdminAuth(adminKey);\n  convexClient.subscribe(\"_system/cli/convexUrl:cloudUrl\", {});\n  const racePromise = Promise.race([\n    queryPromise,\n    new Promise((resolve) => setTimeout(() => resolve(null), 10000)),\n  ]);\n  const cloudUrl = await racePromise;\n  if (cloudUrl === null) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      printedMessage: \"FAIL: Failed to connect to deployment over WebSocket.\",\n    });\n  } else {\n    logMessage(\n      `${chalkStderr.green(`\u2714`)} OK: WebSocket connection established.`,\n    );\n  }\n}\n\nasync function checkEcho(ctx: Context, url: string, size: number) {\n  try {\n    const start = performance.now();\n    const fetch = bareDeploymentFetch(ctx, {\n      deploymentUrl: url,\n      onError: (err) => {\n        logFailure(\n          chalkStderr.red(\n            `FAIL: echo ${formatSize(size)} (${err}), retrying...`,\n          ),\n        );\n      },\n    });\n    const echoUrl = new URL(`/echo`, url);\n    const data = crypto.randomBytes(size);\n    const resp = await fetch(echoUrl.toString(), {\n      body: data,\n      method: \"POST\",\n    });\n    if (resp.status !== 200) {\n      // eslint-disable-next-line no-restricted-syntax\n      throw new Error(`Unexpected status code: ${resp.status}`);\n    }\n    const respData = await resp.arrayBuffer();\n    if (!data.equals(Buffer.from(respData))) {\n      // eslint-disable-next-line no-restricted-syntax\n      throw new Error(`Response data mismatch`);\n    }\n    const duration = performance.now() - start;\n    const bytesPerSecond = size / (duration / 1000);\n    logMessage(\n      `${chalkStderr.green(`\u2714`)} OK: echo ${formatSize(size)} (${formatDuration(\n        duration,\n      )}, ${formatSize(bytesPerSecond)}/s)`,\n    );\n  } catch (e: any) {\n    return ctx.crash({\n      exitCode: 1,\n      errorType: \"transient\",\n      printedMessage: `FAIL: echo ${formatSize(size)} (${e})`,\n    });\n  }\n}\n\nexport async function withTimeout<T>(\n  ctx: Context,\n  name: string,\n  timeoutMs: number,\n  f: Promise<T>,\n) {\n  let timer: NodeJS.Timeout | null = null;\n  try {\n    type TimeoutPromise = { kind: \"ok\"; result: T } | { kind: \"timeout\" };\n    const result = await Promise.race<TimeoutPromise>([\n      f.then((r) => {\n        return { kind: \"ok\", result: r };\n      }),\n      new Promise((resolve) => {\n        timer = setTimeout(() => {\n          resolve({ kind: \"timeout\" as const });\n          timer = null;\n        }, timeoutMs);\n      }),\n    ]);\n    if (result.kind === \"ok\") {\n      return result.result;\n    } else {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"transient\",\n        printedMessage: `FAIL: ${name} timed out after ${formatDuration(timeoutMs)}.`,\n      });\n    }\n  } finally {\n    if (timer !== null) {\n      clearTimeout(timer);\n    }\n  }\n}\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { chalkStderr } from \"chalk\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport {\n  logFailure,\n  logFinishedStep,\n  logMessage,\n  logOutput,\n  logWarning,\n  showSpinner,\n} from \"../bundler/log.js\";\nimport { claudeCode } from \"./lib/plugins/claudeCode.js\";\nimport { codex } from \"./lib/plugins/codex.js\";\nimport { getNewestHarnessLocations } from \"./lib/plugins/harness.js\";\nimport { logMarketplaces } from \"./lib/plugins/marketplaces.js\";\nimport { logConvexSkills } from \"./lib/plugins/skills.js\";\nimport { capture, run } from \"./lib/plugins/utils.js\";\n\nconst harnesses = [claudeCode, codex];\n\n/**\n * Puts the latest Convex plugin in each harness on this machine, so the\n * harness knows Convex the next time it starts. It works through each\n * harness's own CLI and never edits the harnesses' files.\n *\n * Supported harnesses, on macOS and Linux:\n * - Claude Code: terminal, desktop app (macOS), VS Code extension.\n * - Codex: terminal, ChatGPT desktop app (macOS), VS Code extension.\n *\n * Windows is currently not supported.\n *\n * Success, exits 0:\n * - The harness has the latest Convex plugin: prints the version.\n * - The harness isn't installed: says so.\n *\n * Failure, exits 1:\n * - The install failed: says why and what to do.\n * - The machine runs Windows: says it isn't supported yet.\n */\nconst pluginsInstall = new Command(\"install\")\n  .summary(\"Install or upgrade the Convex plugin for Claude Code and Codex\")\n  .description(\n    \"Installs or upgrades the Convex plugin for Claude Code and Codex, in the\\n\" +\n      \"terminal, the desktop app and the VS Code extension:\\n\" +\n      harnesses.map((h) => `  - ${h.name}: ${h.plugin}\\n`).join(\"\") +\n      \"\\nClaude Code or Codex is skipped when it isn't installed. Windows isn't\\n\" +\n      \"supported yet.\",\n  )\n  .allowExcessArguments(false)\n  .action(async () => {\n    const ctx = await oneoffContext({});\n    if (process.platform === \"win32\") {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"`npx convex plugins install` doesn't support Windows yet.\",\n      });\n    }\n    const locations = await getNewestHarnessLocations();\n    let failed = false;\n    for (const {\n      id,\n      name,\n      plugin,\n      upgradeStep,\n      installSteps,\n      plugins,\n    } of harnesses) {\n      const cli = locations[id]?.path;\n      if (cli === undefined) {\n        logWarning(`${chalkStderr.yellow(\"\u26A0\")} ${name}: not installed`);\n        continue;\n      }\n      showSpinner(`Installing the Convex plugin for ${name}\u2026`);\n      let output = \"\";\n      let upgraded = true;\n      for (const args of installSteps) {\n        const step = await run(cli, args);\n        output += step.output;\n        // Only the upgrade step's failure matters. Others can fail harmlessly,\n        // like adding a marketplace that's already added from another source.\n        if (args === upgradeStep && !step.ok) upgraded = false;\n      }\n      const list = await capture(cli, [\"plugin\", \"list\", \"--json\"]);\n      const version =\n        list === null\n          ? undefined\n          : plugins(list)?.find((p) => `${p.name}@${p.marketplace}` === plugin)\n              ?.version;\n      if (version === undefined || !upgraded) {\n        failed = true;\n        logFailure(`${name}: couldn't install the Convex plugin`);\n        // The last lines of the harness's own output say why.\n        const tail = output.trim().split(/\\r?\\n/).slice(-10).join(\"\\n\");\n        if (tail !== \"\") logMessage(chalkStderr.gray(tail));\n        logMessage(\n          \"Run `npx convex plugins install` again after fixing the error above.\",\n        );\n      } else {\n        logFinishedStep(`${name}: Convex plugin ${version}`);\n      }\n    }\n    if (failed) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: null,\n      });\n    }\n  });\n\n// When status is picked up again, check it against install. Install now\n// upgrades the plugin and reports the harnesses it didn't find.\nconst pluginsStatus = new Command(\"status\")\n  .summary(\"Show the Convex plugins and skills installed\")\n  .description(\n    \"Lists the Convex setup your coding agents load:\\n\" +\n      \"  - Convex skills in the hidden folders of your home folder and this folder\\n\" +\n      \"  - Convex marketplaces and plugins in Codex and Claude Code\\n\\n\" +\n      \"It only reads, and changes nothing.\",\n  )\n  .allowExcessArguments(false)\n  .action(async () => {\n    await logConvexSkills();\n\n    const locations = await getNewestHarnessLocations();\n    for (const harness of harnesses) {\n      const cli = locations[harness.id]?.path;\n      const marketplaceList =\n        cli === undefined\n          ? null\n          : await capture(cli, [\"plugin\", \"marketplace\", \"list\", \"--json\"]);\n      const pluginList =\n        cli === undefined\n          ? null\n          : await capture(cli, [\"plugin\", \"list\", \"--json\"]);\n      if (marketplaceList === null || pluginList === null) {\n        logOutput(`${harness.name}: not installed`);\n        continue;\n      }\n      const marketplaces = harness.marketplaces(marketplaceList, pluginList);\n      if (marketplaces === null) {\n        logOutput(`${harness.name}: couldn't read its plugin lists`);\n        continue;\n      }\n      logMarketplaces(harness.name, marketplaces, await harness.latest());\n    }\n  });\n\nexport const plugins = new Command(\"plugins\")\n  .summary(\"Manage Convex plugins for coding agents\")\n  .addCommand(pluginsInstall)\n  .addCommand(pluginsStatus, { hidden: true });\n", "import os from \"os\";\nimport path from \"path\";\nimport * as Sentry from \"@sentry/node\";\nimport { z } from \"zod\";\nimport type { Cli, Places } from \"./harness.js\";\nimport {\n  convexMarketplaces,\n  type Marketplace,\n  type Plugin,\n  type Source,\n} from \"./marketplaces.js\";\nimport {\n  fetchGitHubJson,\n  onPath,\n  parseList,\n  subfolders,\n  versionOf,\n} from \"./utils.js\";\n\n/** Builds `getClaudeCodeLocations` for the given places, so tests can point it at fixtures. */\nexport const createGetClaudeCodeLocations =\n  (places: Omit<Places, \"applications\">) => async (): Promise<Cli[]> => {\n    const found: Omit<Cli, \"version\">[] = [\n      ...onPath(\"claude\", places.path).map((p) => ({\n        source: \"terminal\" as const,\n        path: p,\n      })),\n      // The desktop app keeps every version it downloaded, as\n      // `<version>/<hash>/claude.app`, next to its own state files.\n      ...subfolders(\n        path.join(\n          places.home,\n          \"Library\",\n          \"Application Support\",\n          \"Claude\",\n          \"claude-code\",\n        ),\n      )\n        .flatMap(subfolders)\n        .map((dir) => ({\n          source: \"desktop\" as const,\n          path: path.join(dir, \"claude.app\", \"Contents\", \"MacOS\", \"claude\"),\n        })),\n      ...subfolders(path.join(places.home, \".vscode\", \"extensions\"))\n        .filter((dir) =>\n          path.basename(dir).startsWith(\"anthropic.claude-code-\"),\n        )\n        .map((dir) => ({\n          source: \"vscode\" as const,\n          path: path.join(dir, \"resources\", \"native-binary\", \"claude\"),\n        })),\n    ];\n    return Promise.all(\n      found.map(async (cli) => ({\n        ...cli,\n        version: await versionOf(cli.path),\n      })),\n    );\n  };\n\n/** Every copy of Claude Code on this machine: the terminal CLI, the Claude desktop app's copies and the VS Code extension's copies. */\nexport const getClaudeCodeLocations = createGetClaudeCodeLocations({\n  home: os.homedir(),\n  path: process.env.PATH ?? \"\",\n});\n\n/** The newest Convex plugin a Claude Code user can install, which is the commit Anthropic's marketplace pins, not our main. */\nexport async function claudeCodeLatest(): Promise<Record<string, string>> {\n  const marketplace = await fetchGitHubJson<{\n    plugins: { name: string; source: { url: string; sha: string } }[];\n  }>(\"anthropics/claude-plugins-official/main/.claude-plugin/marketplace.json\");\n  if (marketplace === null) return {};\n  const source = marketplace.plugins.find((p) => p.name === \"convex\")?.source;\n  if (source === undefined) {\n    Sentry.captureMessage(\n      \"Anthropic's marketplace has no convex plugin\",\n      \"error\",\n    );\n    return {};\n  }\n  const repo = source.url\n    .replace(/^https:\\/\\/github\\.com\\//, \"\")\n    .replace(/\\.git$/, \"\");\n  const plugin = await fetchGitHubJson<{ version: string }>(\n    `${repo}/${source.sha}/.claude-plugin/plugin.json`,\n  );\n  return plugin === null ? {} : { convex: plugin.version };\n}\n\n/** `claude plugin marketplace list --json` */\nconst claudeCodeMarketplaceList = z.array(\n  z.union([\n    z.object({\n      name: z.string(),\n      source: z.literal(\"github\"),\n      repo: z.string(),\n    }),\n    z.object({ name: z.string(), source: z.literal(\"git\"), url: z.string() }),\n    z.object({\n      name: z.string(),\n      source: z.literal(\"directory\"),\n      path: z.string(),\n    }),\n    // The list holds other people's marketplaces too, so a source type we\n    // haven't seen is kept by its type name instead of rejecting the list.\n    z.object({ name: z.string(), source: z.string() }),\n  ]),\n);\n\n/** Where a Claude Code marketplace comes from. zod keeps only the fields of the shape that matched. */\nfunction claudeCodeSource(\n  m: z.infer<typeof claudeCodeMarketplaceList>[number],\n): Source {\n  if (\"repo\" in m) return { kind: \"github\", repo: m.repo };\n  if (\"url\" in m) return { kind: \"git\", url: m.url };\n  if (\"path\" in m) return { kind: \"folder\", path: m.path };\n  return { kind: \"other\", type: m.source };\n}\n\n/** `claude plugin list --json` */\nconst claudeCodePluginList = z.array(\n  z.object({\n    id: z.string(),\n    version: z.string(),\n    scope: z.string(),\n    enabled: z.boolean(),\n    folderVersion: z.string().optional(),\n  }),\n);\n\n/** Reads the plugins in `claude plugin list --json`, or returns null when it doesn't match. */\nfunction claudeCodePlugins(pluginList: string): Plugin[] | null {\n  const plugins = parseList(\n    claudeCodePluginList,\n    pluginList,\n    \"claude plugin list --json\",\n  );\n  if (plugins === null) return null;\n  return plugins.map((p) => {\n    const [name, marketplace] = p.id.split(\"@\");\n    // A folder install runs from the folder, and `version` is the copy cached at install time.\n    return {\n      name,\n      marketplace,\n      version: p.folderVersion ?? p.version,\n      scope: p.scope,\n      enabled: p.enabled,\n      cachedVersion:\n        p.folderVersion !== undefined && p.folderVersion !== p.version\n          ? p.version\n          : undefined,\n    };\n  });\n}\n\n/** Reads Claude Code's Convex marketplaces from `claude plugin marketplace list --json` and `claude plugin list --json`, or returns null when either doesn't match. */\nexport function claudeCodeMarketplaces(\n  marketplaceList: string,\n  pluginList: string,\n): Marketplace[] | null {\n  const marketplaces = parseList(\n    claudeCodeMarketplaceList,\n    marketplaceList,\n    \"claude plugin marketplace list --json\",\n  );\n  const plugins = claudeCodePlugins(pluginList);\n  if (marketplaces === null || plugins === null) return null;\n  return convexMarketplaces(\n    marketplaces.map((m) => ({ name: m.name, source: claudeCodeSource(m) })),\n    plugins,\n  );\n}\n\nconst pluginId = \"convex@claude-plugins-official\";\n/** The install step that brings an installed plugin to the latest version. When it fails, the user keeps an old version. */\nconst upgradeStep = [\"plugin\", \"update\", pluginId, \"--scope\", \"user\"];\n\n/** Claude Code as `npx convex plugins` installs and reads it. */\nexport const claudeCode = {\n  id: \"claudeCode\" as const,\n  name: \"Claude Code\",\n  plugin: pluginId,\n  upgradeStep,\n  installSteps: [\n    // Notes:\n    //\n    // 1. Claude Code updates its local copy of the marketplace when it\n    //    installs, but `plugin install` skips a plugin that's already\n    //    installed, so an old version stays until the plugin is updated.\n\n    // Add the marketplace\n    [\"plugin\", \"marketplace\", \"add\", \"anthropics/claude-plugins-official\"],\n    // Install the plugin if it isn't installed yet\n    [\"plugin\", \"install\", pluginId, \"--scope\", \"user\"],\n    // Update an installed plugin to the latest version\n    upgradeStep,\n  ],\n  plugins: claudeCodePlugins,\n  marketplaces: claudeCodeMarketplaces,\n  latest: claudeCodeLatest,\n};\n", "import { logOutput } from \"../../../bundler/log.js\";\nimport { formatRows } from \"./utils.js\";\n\n/** Names of the Convex plugins, including the old internal beta. */\nconst pluginNames = [\"convex\", \"convex-beta\"];\n\n/** A Convex plugin as its harness reports it. */\nexport type Plugin = {\n  name: string;\n  marketplace: string;\n  /** The version that runs. */\n  version: string;\n  /** Claude Code only. */\n  scope?: string;\n  enabled: boolean;\n  /** Claude Code folder installs only. The copy cached at install time, when it differs from the folder. */\n  cachedVersion?: string | undefined;\n};\n\n/** Where a marketplace comes from. `other` is a source type we haven't seen, by its type name. */\nexport type Source =\n  | { kind: \"github\"; repo: string }\n  | { kind: \"git\"; url: string }\n  | { kind: \"folder\"; path: string }\n  | { kind: \"other\"; type: string };\n\n/** A marketplace named after Convex or holding a Convex plugin, with the Convex plugins installed from it. */\nexport type Marketplace = { name: string; source: Source; plugins: Plugin[] };\n\n/** Keeps the marketplaces named after Convex or holding a Convex plugin, each with its Convex plugins. */\nexport function convexMarketplaces(\n  marketplaces: { name: string; source: Source }[],\n  plugins: Plugin[],\n): Marketplace[] {\n  const convex = plugins.filter((p) => pluginNames.includes(p.name));\n  return marketplaces\n    .map((m) => ({\n      ...m,\n      plugins: convex.filter((p) => p.marketplace === m.name),\n    }))\n    .filter((m) => m.name.startsWith(\"convex\") || m.plugins.length > 0);\n}\n\n/** Describes a marketplace's source for people. */\nfunction sourceText(source: Source): string {\n  switch (source.kind) {\n    case \"github\":\n      return `github.com/${source.repo}`;\n    case \"git\":\n      return source.url.replace(/^https?:\\/\\//, \"\").replace(/\\.git$/, \"\");\n    case \"folder\":\n      return source.path;\n    case \"other\":\n      return source.type;\n  }\n}\n\n/** Prints each Convex marketplace with its Convex plugins indented under it. */\nexport function logMarketplaces(\n  title: string,\n  marketplaces: Marketplace[],\n  latest: Record<string, string>,\n) {\n  logOutput(title);\n  if (marketplaces.length === 0) {\n    logOutput(\"  No Convex plugin installed\");\n    return;\n  }\n  const marketplaceLines = formatRows(\n    marketplaces.map((m) => [m.name, sourceText(m.source)]),\n  );\n  // Plugin rows are formatted together so their columns line up across marketplaces.\n  const pluginLines = formatRows(\n    marketplaces\n      .flatMap((m) => m.plugins)\n      .map((p) => [\n        p.name,\n        p.version,\n        latest[p.name] === undefined ? \"\" : `latest ${latest[p.name]}`,\n        p.scope ?? \"-\",\n        p.enabled ? \"enabled\" : \"disabled\",\n        p.cachedVersion === undefined ? \"\" : `cached copy ${p.cachedVersion}`,\n      ]),\n    \"    \",\n  );\n  let next = 0;\n  marketplaces.forEach((m, i) => {\n    logOutput(marketplaceLines[i]);\n    for (const line of pluginLines.slice(next, next + m.plugins.length)) {\n      logOutput(line);\n    }\n    next += m.plugins.length;\n  });\n}\n", "import child_process from \"child_process\";\nimport path from \"path\";\nimport { promisify } from \"util\";\nimport * as Sentry from \"@sentry/node\";\nimport { z } from \"zod\";\nimport { nodeFs } from \"../../../bundler/fs.js\";\n\n/** The file the shell runs for `name`, like `which`. */\nexport function onPath(name: string, pathDirs: string): string[] {\n  const dir = pathDirs\n    .split(path.delimiter)\n    .find((d) => nodeFs.exists(path.join(d, name)));\n  return dir === undefined ? [] : [path.join(dir, name)];\n}\n\n/** The folders directly inside `dir`, sorted by name, or none when `dir` doesn't exist. */\nexport function subfolders(dir: string): string[] {\n  let entries;\n  try {\n    entries = nodeFs.listDir(dir);\n  } catch {\n    return [];\n  }\n  return entries\n    .filter((entry) => entry.isDirectory())\n    .map((entry) => path.join(dir, entry.name))\n    .sort();\n}\n\n/** The first line a CLI prints for `--version`. */\nexport async function versionOf(cli: string): Promise<string> {\n  const { stdout } = await promisify(child_process.execFile)(cli, [\n    \"--version\",\n  ]);\n  return stdout.split(\"\\n\")[0];\n}\n\n/** Runs a command and resolves to whether it succeeded and everything it printed. */\nexport function run(\n  command: string,\n  args: string[],\n): Promise<{ ok: boolean; output: string }> {\n  return new Promise((resolve) => {\n    let output = \"\";\n\n    const proc = child_process.spawn(command, args, {\n      stdio: [\"ignore\", \"pipe\", \"pipe\"],\n    });\n\n    proc.stdout.on(\"data\", (chunk) => (output += chunk));\n    proc.stderr.on(\"data\", (chunk) => (output += chunk));\n    proc.on(\"error\", () => resolve({ ok: false, output }));\n    proc.on(\"close\", (code) => resolve({ ok: code === 0, output }));\n  });\n}\n\n/** Runs a command and resolves to its stdout, or null when it can't be started. */\nexport function capture(\n  command: string,\n  args: string[],\n): Promise<string | null> {\n  return new Promise((resolve) => {\n    let stdout = \"\";\n\n    const proc = child_process.spawn(command, args, {\n      stdio: [\"ignore\", \"pipe\", \"inherit\"],\n    });\n\n    proc.stdout.on(\"data\", (chunk) => (stdout += chunk));\n    proc.on(\"error\", () => resolve(null));\n    proc.on(\"close\", () => resolve(stdout));\n  });\n}\n\n/** Fetches a JSON file from GitHub, or resolves to null when it can't, reporting why to Sentry. */\nexport async function fetchGitHubJson<T>(path: string): Promise<T | null> {\n  try {\n    const response = await fetch(`https://raw.githubusercontent.com/${path}`);\n    if (!response.ok) {\n      Sentry.captureException(\n        new Error(`Failed to fetch ${path}: status = ${response.status}`),\n      );\n      return null;\n    }\n    return (await response.json()) as T;\n  } catch (error) {\n    Sentry.captureException(error);\n    return null;\n  }\n}\n\n/** Parses a JSON list from a harness CLI, or returns null and reports to Sentry when it isn't JSON or doesn't match. */\nexport function parseList<T>(\n  schema: z.ZodType<T, z.ZodTypeDef, unknown>,\n  list: string,\n  command: string,\n): T | null {\n  let result;\n  try {\n    result = schema.safeParse(JSON.parse(list));\n  } catch {\n    // A failing CLI can print nothing, which isn't JSON.\n    result = undefined;\n  }\n  if (!result?.success) {\n    Sentry.captureMessage(`Unexpected output from \\`${command}\\``, \"error\");\n    return null;\n  }\n  return result.data;\n}\n\n/** Pads each column to its widest cell and indents every row. */\nexport function formatRows(rows: string[][], indent = \"  \"): string[] {\n  if (rows.length === 0) return [];\n  const widths = rows[0].map((_, i) =>\n    Math.max(...rows.map((row) => row[i].length)),\n  );\n  return rows.map((row) =>\n    `${indent}${row.map((cell, i) => cell.padEnd(widths[i])).join(\"  \")}`.trimEnd(),\n  );\n}\n", "import os from \"os\";\nimport path from \"path\";\nimport { z } from \"zod\";\nimport { nodeFs } from \"../../../bundler/fs.js\";\nimport type { Cli, Places } from \"./harness.js\";\nimport {\n  convexMarketplaces,\n  type Marketplace,\n  type Plugin,\n} from \"./marketplaces.js\";\nimport {\n  fetchGitHubJson,\n  onPath,\n  parseList,\n  subfolders,\n  versionOf,\n} from \"./utils.js\";\n\n/** Builds `getCodexLocations` for the given places, so tests can point it at fixtures. */\nexport const createGetCodexLocations =\n  (places: Places) => async (): Promise<Cli[]> => {\n    // The ChatGPT app also has `codex-cli/bin/codex`, a script that runs this\n    // binary. Running that script from another app sets off macOS's App\n    // Management prompt, and running the binary doesn't.\n    const desktop = path.join(\n      places.applications,\n      \"ChatGPT.app\",\n      \"Contents\",\n      \"Resources\",\n      \"codex-cli\",\n      \"CodexCLI.app\",\n      \"Contents\",\n      \"MacOS\",\n      \"codex\",\n    );\n    const found: Omit<Cli, \"version\">[] = [\n      ...onPath(\"codex\", places.path).map((p) => ({\n        source: \"terminal\" as const,\n        path: p,\n      })),\n      ...(nodeFs.exists(desktop)\n        ? [{ source: \"desktop\" as const, path: desktop }]\n        : []),\n      // The extension keeps its binary in a folder named for the platform, like\n      // `bin/macos-aarch64`.\n      ...subfolders(path.join(places.home, \".vscode\", \"extensions\"))\n        .filter((dir) => path.basename(dir).startsWith(\"openai.chatgpt-\"))\n        .flatMap((dir) => subfolders(path.join(dir, \"bin\")))\n        .map((dir) => ({\n          source: \"vscode\" as const,\n          path: path.join(dir, \"codex\"),\n        })),\n    ];\n    return Promise.all(\n      found.map(async (cli) => ({\n        ...cli,\n        version: await versionOf(cli.path),\n      })),\n    );\n  };\n\n/** Every copy of Codex on this machine: the terminal CLI, the ChatGPT app's copy and the VS Code extension's copies. */\nexport const getCodexLocations = createGetCodexLocations({\n  home: os.homedir(),\n  path: process.env.PATH ?? \"\",\n  applications: \"/Applications\",\n});\n\n/** The newest Convex plugin a Codex user can install, which is main of our repo. */\nasync function codexLatest(): Promise<Record<string, string>> {\n  const plugin = await fetchGitHubJson<{ version: string }>(\n    \"convex/convex-codex-plugin/main/plugins/convex/.codex-plugin/plugin.json\",\n  );\n  return plugin === null ? {} : { convex: plugin.version };\n}\n\n/** `codex plugin marketplace list --json` */\nconst codexMarketplaceList = z.object({\n  marketplaces: z.array(\n    z.object({\n      name: z.string(),\n      root: z.string(),\n      marketplaceSource: z\n        .object({ sourceType: z.string(), source: z.string() })\n        .optional(),\n    }),\n  ),\n});\n\n/** `codex plugin list --json` */\nconst codexPluginList = z.object({\n  installed: z.array(\n    z.object({\n      name: z.string(),\n      marketplaceName: z.string(),\n      version: z.string(),\n      enabled: z.boolean(),\n    }),\n  ),\n});\n\n/** Reads the plugins in `codex plugin list --json`, or returns null when it doesn't match. */\nfunction codexPlugins(pluginList: string): Plugin[] | null {\n  const plugins = parseList(\n    codexPluginList,\n    pluginList,\n    \"codex plugin list --json\",\n  );\n  if (plugins === null) return null;\n  return plugins.installed.map((p) => ({\n    name: p.name,\n    marketplace: p.marketplaceName,\n    version: p.version,\n    enabled: p.enabled,\n  }));\n}\n\n/** Reads Codex's Convex marketplaces from `codex plugin marketplace list --json` and `codex plugin list --json`, or returns null when either doesn't match. */\nexport function codexMarketplaces(\n  marketplaceList: string,\n  pluginList: string,\n): Marketplace[] | null {\n  const marketplaces = parseList(\n    codexMarketplaceList,\n    marketplaceList,\n    \"codex plugin marketplace list --json\",\n  );\n  const plugins = codexPlugins(pluginList);\n  if (marketplaces === null || plugins === null) return null;\n  return convexMarketplaces(\n    marketplaces.marketplaces.map((m) => ({\n      name: m.name,\n      // Anything that isn't a git marketplace is shown by its folder.\n      source:\n        m.marketplaceSource?.sourceType === \"git\"\n          ? { kind: \"git\", url: m.marketplaceSource.source }\n          : { kind: \"folder\", path: m.root },\n    })),\n    plugins,\n  );\n}\n\nconst pluginId = \"convex@convex-codex-plugin\";\n/** The install step that brings an installed plugin to the latest version. When it fails, the user keeps an old version. */\nconst upgradeStep = [\"plugin\", \"marketplace\", \"upgrade\", \"convex-codex-plugin\"];\n\n/** Codex as `npx convex plugins` installs and reads it. */\nexport const codex = {\n  id: \"codex\" as const,\n  name: \"Codex\",\n  plugin: pluginId,\n  upgradeStep,\n  installSteps: [\n    // Notes:\n    //\n    // 1. The marketplace is added from the `get-convex` org, the org's name\n    //    before the rename to `convex`. Codex refuses to re-add a marketplace\n    //    from a different source, so switching would make install fail for\n    //    anyone who installed before. Switch once install handles an existing\n    //    marketplace.\n    //\n    // 2. Codex installs plugins from its own local copy of each marketplace, so\n    //    it doesn't see the new plugin versions we publish until that copy is\n    //    updated.\n\n    // Add the marketplace\n    [\"plugin\", \"marketplace\", \"add\", \"get-convex/convex-codex-plugin\"],\n    // Update the local copy from GitHub, so the latest plugin version is\n    // available to install - this is important\n    upgradeStep,\n    // Install the latest plugin from the updated marketplace\n    [\"plugin\", \"add\", pluginId],\n  ],\n  plugins: codexPlugins,\n  marketplaces: codexMarketplaces,\n  latest: codexLatest,\n};\n", "/**\n * The Claude Code and Codex CLIs found on the user's machine. Users of the\n * desktop apps or the VS Code extensions often have no CLI on PATH, but each\n * app ships its own copy, which takes the same commands and shares the same\n * plugin state as the terminal CLI.\n */\nimport * as semver from \"semver\";\nimport { getClaudeCodeLocations } from \"./claudeCode.js\";\nimport { getCodexLocations } from \"./codex.js\";\n\n/** Where a copy of a harness CLI was found. */\ntype CliSource = \"terminal\" | \"desktop\" | \"vscode\";\n\n/** A copy of a harness CLI and the first line it prints for `--version`. */\nexport type Cli = { source: CliSource; path: string; version: string };\n\n/** Where to look for harness CLIs. */\nexport type Places = {\n  home: string;\n  /** Directories separated like `$PATH`. */\n  path: string;\n  /** Where macOS apps are installed, `/Applications`. */\n  applications: string;\n};\n\n/** The copy with the highest version. Versions compare as semver, where a release beats its prereleases. */\nfunction newest(clis: Cli[]): Cli | undefined {\n  // Every copy printed its version when the finder ran it.\n  const version = (cli: Cli) =>\n    semver.coerce(cli.version, { includePrerelease: true })!;\n  return [...clis].sort((a, b) => semver.rcompare(version(a), version(b)))[0];\n}\n\n/** Builds `getNewestHarnessLocations` from the given location getters, so tests can pass fixed locations. */\nexport const createGetNewestHarnessLocations =\n  (getters: {\n    getCodexLocations: () => Promise<Cli[]>;\n    getClaudeCodeLocations: () => Promise<Cli[]>;\n  }) =>\n  async () => ({\n    codex: newest(await getters.getCodexLocations()),\n    claudeCode: newest(await getters.getClaudeCodeLocations()),\n  });\n\n/** The newest copy of each harness's CLI on this machine, or `undefined` for a harness that isn't installed. */\nexport const getNewestHarnessLocations = createGetNewestHarnessLocations({\n  getCodexLocations,\n  getClaudeCodeLocations,\n});\n", "import os from \"os\";\nimport path from \"path\";\nimport { nodeFs } from \"../../../bundler/fs.js\";\nimport { logOutput } from \"../../../bundler/log.js\";\nimport { fetchAgentSkillsCatalog } from \"../versionApi.js\";\n\n/** Finds folders named `skills` in a folder's children and grandchildren, without following links. */\nfunction skillsFolders(dir: string, depth: number): string[] {\n  let entries;\n  try {\n    entries = nodeFs.listDir(dir);\n  } catch {\n    return [];\n  }\n  return entries\n    .filter((entry) => entry.isDirectory())\n    .flatMap((entry) => {\n      const child = path.join(dir, entry.name);\n      if (entry.name === \"skills\") return [child];\n      return depth > 1 ? skillsFolders(child, depth - 1) : [];\n    });\n}\n\n/** Convex skill names from the catalog on version.convex.dev, split into current and deleted ones. */\ntype SkillNames = { current: Set<string>; deleted: Set<string> };\n\n/** A skills folder holding Convex skills. */\ntype SkillsFolder = {\n  path: string;\n  current: number;\n  deleted: number;\n  brokenLinks: number;\n};\n\n/** Finds the skills folders in a root's hidden folders that hold Convex skills, counting deleted skills and broken links. */\nexport function convexSkillsFolders(\n  root: string,\n  names: SkillNames,\n): SkillsFolder[] {\n  return nodeFs\n    .listDir(root)\n    .filter((entry) => entry.isDirectory() && entry.name.startsWith(\".\"))\n    .flatMap((entry) => skillsFolders(path.join(root, entry.name), 2))\n    .map((folder) => {\n      const entries = nodeFs.listDir(folder).map((entry) => entry.name);\n      const current = entries.filter((name) => names.current.has(name));\n      const deleted = entries.filter((name) => names.deleted.has(name));\n      // exists follows links, so it's false for a link whose target is gone.\n      const brokenLinks = [...current, ...deleted].filter(\n        (name) => !nodeFs.exists(path.join(folder, name)),\n      ).length;\n      return {\n        path: folder,\n        current: current.length,\n        deleted: deleted.length,\n        brokenLinks,\n      };\n    })\n    .filter((folder) => folder.current + folder.deleted > 0);\n}\n\n/** Prints each skills folder in a root's hidden folders that holds Convex skills, counting deleted skills and broken links. */\nfunction logSkills(\n  title: string,\n  root: string,\n  label: string,\n  names: SkillNames,\n) {\n  const folders = convexSkillsFolders(root, names);\n  logOutput(title);\n  if (folders.length === 0) {\n    logOutput(\"  No Convex skills found\");\n    return;\n  }\n  for (const folder of folders) {\n    logOutput(\n      `  ${folder.path.replace(root, label)}  ${folder.current} Convex skills, ${folder.deleted} deleted, ${folder.brokenLinks} broken links`,\n    );\n  }\n}\n\n/** Prints the Convex skills in the hidden folders of the home folder and the current folder. */\nexport async function logConvexSkills() {\n  const catalog = await fetchAgentSkillsCatalog();\n  if (catalog.kind === \"error\") {\n    logOutput(\"Skills: couldn't fetch the list of Convex skills\");\n  } else {\n    const names = (kind: \"active\" | \"deleted\") =>\n      new Set(\n        catalog.data.skills\n          .filter((skill) => skill.status.kind === kind)\n          .map((skill) => skill.skillName),\n      );\n    const skillNames = {\n      current: names(\"active\"),\n      deleted: names(\"deleted\"),\n    };\n    logSkills(\"Global skills\", os.homedir(), \"~\", skillNames);\n    logSkills(\"Project skills\", process.cwd(), \".\", skillNames);\n  }\n}\n", "import { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep, logMessage, showSpinner } from \"../bundler/log.js\";\nimport { chalkStderr } from \"chalk\";\nimport { createProject } from \"./lib/api.js\";\nimport { ensureAuthCanCreateDeployment } from \"./lib/deploymentSelection.js\";\nimport { validateOrSelectTeam } from \"./lib/utils/utils.js\";\nimport { promptString } from \"./lib/utils/prompts.js\";\nimport { projectDashboardUrl } from \"./lib/dashboard.js\";\n\ntype ProjectCreateOptions = {\n  team?: string | undefined;\n};\n\nasync function runProjectCreate(\n  nameArg: string | undefined,\n  options: ProjectCreateOptions,\n): Promise<void> {\n  const ctx = await oneoffContext({\n    url: undefined,\n    adminKey: undefined,\n    envFile: undefined,\n  });\n\n  // Creating a project goes through the platform API, which accepts personal\n  // access tokens and project keys but not deployment/preview deploy keys.\n  // Fail fast (and clearly) for the unsupported keys rather than surfacing an\n  // opaque error later.\n  await ensureAuthCanCreateDeployment(ctx);\n\n  const { team } = await validateOrSelectTeam(ctx, options.team, \"Team:\");\n\n  let projectName = nameArg;\n  if (!projectName) {\n    if (!process.stdin.isTTY) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"Specify a project name:\\n\" + \"  `npx convex project create my-app`\",\n      });\n    }\n    projectName = await promptString(ctx, {\n      message: \"Project name:\",\n    });\n  }\n\n  showSpinner(`Creating project ${projectName}...`);\n  // `project create` only creates the project. Provisioning a deployment is a\n  // separate, explicit step (`npx convex deployment create`) so this command\n  // doesn't have to mirror every deployment setting (region, class, ...).\n  const { projectSlug } = await createProject(ctx, {\n    teamId: team.id,\n    projectName,\n    deploymentToProvision: null,\n  });\n\n  logFinishedStep(\n    `Created project ${chalkStderr.bold(projectSlug)} in team ` +\n      `${chalkStderr.bold(team.slug)}, manage it at ${chalkStderr.bold(\n        projectDashboardUrl(team.slug, projectSlug),\n      )}`,\n  );\n  logMessage(\n    chalkStderr.gray(\n      `Next, add a deployment with ` +\n        `\\`npx convex deployment create ${team.slug}:${projectSlug}:dev/my-feature --type dev --select\\` ` +\n        `(pass \\`--region us\\` to choose a region).`,\n    ),\n  );\n}\n\nexport const projectCreate = new Command(\"create\")\n  .summary(\"Create a new project\")\n  .description(\n    [\n      \"Create a new project.\",\n      \"\",\n      \"Provisioning a deployment is a separate step \u2014 after creating the\",\n      \"project, run `npx convex deployment create` to add one.\",\n      \"\",\n      \"\u2022 Create a project in your only team: `npx convex project create my-app`\",\n      \"\u2022 Pick the team: `npx convex project create my-app --team my-team`\",\n    ].join(\"\\n\"),\n  )\n  .allowExcessArguments(false)\n  .argument(\n    \"[name]\",\n    \"The name of the new project. Prompted for when omitted in an \" +\n      \"interactive terminal; required otherwise.\",\n  )\n  .addOption(\n    new Option(\n      \"--team <team_slug>\",\n      \"The team to create the project in. Defaults to your only team, or \" +\n        \"prompts when you belong to several.\",\n    ),\n  )\n  .action(runProjectCreate);\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { projectCreate } from \"./projectCreate.js\";\n\nexport const project = new Command(\"project\")\n  .summary(\"Manage projects\")\n  .description(\"Manage projects in your team.\")\n  .addCommand(projectCreate);\n", "import { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\n\n// Reinitialize an existing Convex project.\n// This command is deprecated and hidden from the command help.\n// `npx convex dev --once --configure=existing` replaces it.\nexport const reinit = new Command(\"reinit\")\n  .description(\n    \"Reinitialize a Convex project in the local directory if you've lost your convex.json file\",\n  )\n  .allowExcessArguments(false)\n  .addOption(\n    new Option(\n      \"--team <team_slug>\",\n      \"The identifier of the team the project belongs to.\",\n    ),\n  )\n  .addOption(\n    new Option(\n      \"--project <project_slug>\",\n      \"The identifier of the project you'd like to reinitialize.\",\n    ),\n  )\n  .action(async (_options) => {\n    return (\n      await oneoffContext({\n        url: undefined,\n        adminKey: undefined,\n        envFile: undefined,\n      })\n    ).crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      errForSentry:\n        \"The `reinit` command is deprecated. Use `npx convex dev --once --configure=existing` instead.\",\n      printedMessage:\n        \"The `reinit` command is deprecated. Use `npx convex dev --once --configure=existing` instead.\",\n    });\n  });\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { chalkStderr } from \"chalk\";\nimport { logMessage, logOutput } from \"../bundler/log.js\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { jsonToConvex, type JSONValue } from \"../values/value.js\";\nimport { loadSelectedDeploymentCredentials } from \"./lib/api.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport {\n  formatValue,\n  pushToDeployment,\n  runInDeployment,\n  runSystemQuery,\n} from \"./lib/run.js\";\nimport { ensureHasConvexDependency } from \"./lib/utils/utils.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport { withRunningBackend } from \"./lib/localDeployment/run.js\";\nimport {\n  inlineQueryToQuerySource,\n  runTestFunctionQuery,\n} from \"./lib/runTestFunction.js\";\nimport {\n  logAndHandleFetchError,\n  ThrowingFetchError,\n} from \"./lib/utils/utils.js\";\n\nexport const run = new Command(\"run\")\n  .summary(\n    \"Run a function or evaluate an inline readonly query on your deployment\",\n  )\n  .description(\n    [\n      \"Run a function or evaluate an inline readonly query on your deployment.\",\n      \"\",\n      '\u2022 Run a function with JSON arguments: `npx convex run messages:send \\'{\"body\": \"hello\", \"author\": \"me\"}\\'`',\n      \"\u2022 Run a function on prod: `npx convex run messages:list --prod`\",\n      \"\u2022 Live-update a query's result: `npx convex run messages:list --watch`\",\n      \"\u2022 Push local code before running: `npx convex run messages:send '{}' --push`\",\n      \"\u2022 Evaluate an inline readonly query: `npx convex run --inline-query 'await ctx.db.query(\\\"messages\\\").take(5)'`\",\n      \"\",\n      \"Arguments are specified as a JSON object. By default, this runs on your dev deployment.\",\n    ].join(\"\\n\"),\n  )\n  .allowExcessArguments(false)\n  .addRunOptions()\n  .addDeploymentSelectionOptions(actionDescription(\"Run the function on\"))\n  .showHelpAfterError()\n  .action(async (functionName, argsString, options) => {\n    const ctx = await oneoffContext(options);\n    const target = await resolveRunTarget({\n      ctx,\n      functionName,\n      argsString,\n      options,\n    });\n    if (target.kind === \"function\" || options.push) {\n      await ensureHasConvexDependency(ctx, \"run\");\n    }\n\n    const deploymentSelection = await getDeploymentSelection(ctx, options);\n    const deployment = await loadSelectedDeploymentCredentials(\n      ctx,\n      deploymentSelection,\n      { ensureLocalRunning: false },\n    );\n\n    if (\n      deployment.deploymentFields?.deploymentType === \"prod\" &&\n      options.push\n    ) {\n      return await ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          `\\`convex run\\` doesn't support pushing functions to prod deployments. ` +\n          `Remove the --push flag. To push to production use \\`npx convex deploy\\`.`,\n      });\n    }\n\n    await withRunningBackend({\n      ctx,\n      deployment: {\n        deploymentUrl: deployment.url,\n        deploymentFields: deployment.deploymentFields,\n      },\n      action: async () => {\n        if (target.kind === \"inlineQuery\") {\n          if (options.push) {\n            await pushToDeployment(ctx, {\n              deploymentUrl: deployment.url,\n              adminKey: deployment.adminKey,\n              deploymentName:\n                deployment.deploymentFields?.deploymentName ?? null,\n              typecheck: options.typecheck,\n              typecheckComponents: options.typecheckComponents,\n              codegen: options.codegen === \"enable\",\n              liveComponentSources: Boolean(options.liveComponentSources),\n            });\n          }\n          return await runInlineQueryInDeployment({\n            ctx,\n            deploymentUrl: deployment.url,\n            adminKey: deployment.adminKey,\n            inlineQuery: target.inlineQuery,\n            ...(options.component !== undefined\n              ? { componentPath: options.component }\n              : {}),\n          });\n        }\n\n        await runInDeployment(ctx, {\n          deploymentUrl: deployment.url,\n          adminKey: deployment.adminKey,\n          deploymentName: deployment.deploymentFields?.deploymentName ?? null,\n          functionName: target.functionName,\n          argsString: target.argsString,\n          componentPath: options.component,\n          identityString: options.identity,\n          push: Boolean(options.push),\n          watch: Boolean(options.watch),\n          typecheck: options.typecheck,\n          typecheckComponents: options.typecheckComponents,\n          codegen: options.codegen === \"enable\",\n          liveComponentSources: Boolean(options.liveComponentSources),\n        });\n      },\n    });\n  });\n\ntype RunTarget =\n  | {\n      kind: \"function\";\n      functionName: string;\n      argsString: string;\n    }\n  | {\n      kind: \"inlineQuery\";\n      inlineQuery: string;\n    };\n\nasync function resolveRunTarget(args: {\n  ctx: Awaited<ReturnType<typeof oneoffContext>>;\n  functionName: string | undefined;\n  argsString: string | undefined;\n  options: {\n    inlineQuery?: string;\n    watch?: boolean;\n    push?: boolean;\n    identity?: string;\n    component?: string;\n  };\n}): Promise<RunTarget> {\n  const inlineQuery = args.options.inlineQuery?.trim();\n  if (inlineQuery !== undefined && args.functionName !== undefined) {\n    return await args.ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"`npx convex run` accepts either <functionName> or `--inline-query`, not both.\",\n    });\n  }\n  if (inlineQuery === undefined) {\n    if (args.functionName === undefined) {\n      return await args.ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage:\n          \"`npx convex run` requires either <functionName> or `--inline-query`.\",\n      });\n    }\n    return {\n      kind: \"function\",\n      functionName: args.functionName,\n      argsString: args.argsString ?? \"{}\",\n    };\n  }\n  if (inlineQuery.length === 0) {\n    return await args.ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"`--inline-query` must not be empty.\",\n    });\n  }\n  if (args.options.watch) {\n    return await args.ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage:\n        \"`--inline-query` can't be combined with `--watch`. Use `convex run <functionName> --watch` for named deployed queries.\",\n    });\n  }\n  if (args.options.identity !== undefined) {\n    return await args.ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"`--inline-query` can't be combined with `--identity`.\",\n    });\n  }\n  return { kind: \"inlineQuery\", inlineQuery };\n}\n\nasync function runInlineQueryInDeployment(args: {\n  ctx: Awaited<ReturnType<typeof oneoffContext>>;\n  deploymentUrl: string;\n  adminKey: string;\n  inlineQuery: string;\n  componentPath?: string;\n}) {\n  try {\n    const componentId = await resolveInlineQueryComponentId(args);\n    const outcome = await runTestFunctionQuery(args.ctx, {\n      deploymentUrl: args.deploymentUrl,\n      adminKey: args.adminKey,\n      querySource: inlineQueryToQuerySource(args.inlineQuery),\n      ...(componentId !== undefined ? { componentId } : {}),\n    });\n    if (outcome.kind === \"applicationFailure\") {\n      return await args.ctx.crash({\n        exitCode: 1,\n        errorType: \"fatal\",\n        printedMessage: chalkStderr.red(\n          `Query failed: ${JSON.stringify(outcome.payload, null, 2)}`,\n        ),\n      });\n    }\n\n    for (const line of outcome.logLines) {\n      logMessage(line);\n    }\n\n    const convexValue = jsonToConvex(outcome.value as JSONValue);\n    if (convexValue !== null) logOutput(formatValue(convexValue));\n  } catch (err) {\n    if (err instanceof ThrowingFetchError) return await err.handle(args.ctx);\n    return await logAndHandleFetchError(args.ctx, err);\n  }\n}\n\nasync function resolveInlineQueryComponentId(args: {\n  ctx: Awaited<ReturnType<typeof oneoffContext>>;\n  deploymentUrl: string;\n  adminKey: string;\n  componentPath?: string;\n}) {\n  const componentPath = args.componentPath?.trim();\n  if (componentPath === undefined || componentPath === \"_App\") {\n    return undefined;\n  }\n  if (componentPath.length === 0) {\n    return await args.ctx.crash({\n      exitCode: 1,\n      errorType: \"fatal\",\n      printedMessage: \"`--component` must not be empty.\",\n    });\n  }\n\n  const components = (await runSystemQuery(args.ctx, {\n    deploymentUrl: args.deploymentUrl,\n    adminKey: args.adminKey,\n    functionName: \"_system/frontend/components:list\",\n    componentPath: undefined,\n    args: {},\n  })) as { id: string; path: string }[];\n\n  const component = components.find(({ path }) => path === componentPath);\n  if (component !== undefined) {\n    return component.id;\n  }\n\n  const availableComponents = components\n    .map(({ path }) => path)\n    .filter((path) => path.length > 0)\n    .sort();\n  const availableComponentsMessage =\n    availableComponents.length === 0\n      ? \"This deployment has no mounted components.\"\n      : `Available components:\\n${availableComponents.map((path) => `\u2022 ${chalkStderr.gray(path)}`).join(\"\\n\")}`;\n\n  return await args.ctx.crash({\n    exitCode: 1,\n    errorType: \"fatal\",\n    printedMessage:\n      `Component path \"${componentPath}\" was not found.\\n\\n` +\n      `${availableComponentsMessage}\\n` +\n      \"Omit `--component` to target the app root.\",\n  });\n}\n", "import { chalkStderr } from \"chalk\";\nimport { functionsDir, ensureHasConvexDependency } from \"./lib/utils/utils.js\";\nimport { Command, Option } from \"@commander-js/extra-typings\";\nimport { readConfig } from \"./lib/config.js\";\nimport {\n  typeCheckFunctions,\n  resolveTypescriptCompiler,\n} from \"./lib/typecheck.js\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep, logMessage } from \"../bundler/log.js\";\n\n// Experimental (it's going to fail sometimes) TypeScript type checking.\n// Includes a separate command to help users debug their TypeScript configs.\n\nexport type TypecheckResult = \"cantTypeCheck\" | \"success\" | \"typecheckFailed\";\n\n/** Run the TypeScript compiler, as configured during  */\nexport const typecheck = new Command(\"typecheck\")\n  .description(\n    \"Run TypeScript typechecking on your Convex functions with `tsc --noEmit`.\",\n  )\n  .allowExcessArguments(false)\n  .addOption(\n    new Option(\n      \"--typescript-compiler <compiler>\",\n      \"TypeScript compiler to use for typechecking (`@typescript/native-preview` must be installed to use `tsgo`)\",\n    ).choices([\"tsc\", \"tsgo\"] as const),\n  )\n  .action(async (cmdOptions) => {\n    const ctx = await oneoffContext({\n      url: undefined,\n      adminKey: undefined,\n      envFile: undefined,\n    });\n    const typescriptCompiler = await resolveTypescriptCompiler(\n      ctx,\n      cmdOptions.typescriptCompiler,\n    );\n    const { configPath, config: localConfig } = await readConfig(ctx, false);\n    await ensureHasConvexDependency(ctx, \"typecheck\");\n    await typeCheckFunctions(\n      ctx,\n      typescriptCompiler,\n      functionsDir(configPath, localConfig.projectConfig),\n      async (typecheckResult, logSpecificError, runOnError) => {\n        logSpecificError?.();\n        if (typecheckResult === \"typecheckFailed\") {\n          logMessage(chalkStderr.gray(\"Typecheck failed\"));\n          try {\n            await runOnError?.();\n            // If runOnError doesn't throw then it worked the second time.\n            // No errors to report, but it's still a failure.\n          } catch {\n            // As expected, `runOnError` threw\n          }\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"invalid filesystem data\",\n            printedMessage: null,\n          });\n        } else if (typecheckResult === \"cantTypeCheck\") {\n          logMessage(\n            chalkStderr.gray(\"Unable to typecheck; is TypeScript installed?\"),\n          );\n          return await ctx.crash({\n            exitCode: 1,\n            errorType: \"invalid filesystem data\",\n            printedMessage: null,\n          });\n        } else {\n          logFinishedStep(\n            `Typecheck passed: \\`${typescriptCompiler} --noEmit\\` completed with exit code 0.`,\n          );\n          return await ctx.flushAndExit(0);\n        }\n      },\n    );\n  });\n", "import { chalkStderr } from \"chalk\";\nimport { Command } from \"@commander-js/extra-typings\";\nimport { logMessage } from \"../bundler/log.js\";\n\nexport const update = new Command(\"update\")\n  .description(\"Print instructions for updating the convex package\")\n  .allowExcessArguments(false)\n  .action(async () => {\n    logMessage(\n      chalkStderr.green(\n        `To view the Convex changelog, go to https://news.convex.dev/tag/releases/\\nWhen you are ready to upgrade, run the following command:\\nnpm install convex@latest\\n`,\n      ),\n    );\n  });\n", "import { Command } from \"@commander-js/extra-typings\";\nimport { aiFiles } from \"./aiFiles.js\";\nimport { auth } from \"./auth.js\";\nimport { codegen } from \"./codegen.js\";\nimport { convexExport } from \"./convexExport.js\";\nimport { convexImport } from \"./convexImport.js\";\nimport { dashboard } from \"./dashboard.js\";\nimport { data } from \"./data.js\";\nimport { deploy } from \"./deploy.js\";\nimport { deployment } from \"./deployment.js\";\nimport { deployments } from \"./deployments.js\";\nimport { dev } from \"./dev.js\";\nimport { docs } from \"./docs.js\";\nimport { env } from \"./env.js\";\nimport { functionSpec } from \"./functionSpec.js\";\nimport { init } from \"./init.js\";\nimport { insights } from \"./insights.js\";\nimport { integration } from \"./integration.js\";\nimport { login } from \"./login.js\";\nimport { logout } from \"./logout.js\";\nimport { logs } from \"./logs.js\";\nimport { mcp } from \"./mcp.js\";\nimport { networkTest } from \"./network_test.js\";\nimport { plugins } from \"./plugins.js\";\nimport { project } from \"./project.js\";\nimport { reinit } from \"./reinit.js\";\nimport { run } from \"./run.js\";\nimport { typecheck } from \"./typecheck.js\";\nimport { update } from \"./update.js\";\nimport { version } from \"./version.js\";\n\nexport function buildProgram() {\n  const program = new Command();\n  return (\n    program\n      .name(\"convex\")\n      .usage(\"<command> [options]\")\n      .description(\"Start developing with Convex by running `npx convex dev`.\")\n      .addCommand(login, { hidden: true })\n      .addCommand(init, { hidden: true })\n      .addCommand(reinit, { hidden: true })\n      .addCommand(dev)\n      .addCommand(deploy)\n      .addCommand(deployments, { hidden: true })\n      .addCommand(run)\n      .addCommand(convexImport)\n      .addCommand(dashboard)\n      .addCommand(docs)\n      .addCommand(logs)\n      .addCommand(typecheck, { hidden: true })\n      .addCommand(auth, { hidden: true })\n      .addCommand(convexExport)\n      .addCommand(env)\n      .addCommand(data)\n      .addCommand(deployment)\n      .addCommand(project)\n      .addCommand(codegen)\n      .addCommand(update)\n      .addCommand(logout)\n      .addCommand(networkTest, { hidden: true })\n      .addCommand(integration, { hidden: true })\n      .addCommand(functionSpec)\n      .addCommand(insights)\n      .addCommand(mcp)\n      .addCommand(aiFiles)\n      .addCommand(plugins)\n      .helpCommand(\"help <command>\", \"Show help for given <command>\")\n      .version(version)\n      // Hide version and help so they don't clutter\n      // the list of commands.\n      .configureHelp({ visibleOptions: () => [] })\n      .showHelpAfterError()\n  );\n}\n"],
  "mappings": "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,IAAM,iCAAiC;AAOvC,IAAM,0CACX;AASK,IAAM,uCACX;AAOK,IAAM,0CACX;AAOK,IAAM,qCAAqC;AAO3C,IAAM,qCAAqC;AAO3C,IAAM,qCAAqC;AAO3C,IAAM,sBAAsB;AAS5B,IAAM,uBAAuB;AAS7B,IAAM,sBAAsB;AAO5B,IAAM,gCAAgC;AAOtC,IAAM,+BAA+B;AAOrC,IAAM,kCAAkC;AAOxC,IAAM,kCAAkC;AAOxC,IAAM,qCAAqC;AAO3C,IAAM,wBAAwB;AAS9B,IAAM,sBAAsB;AAO5B,IAAM,mCAAmC;AAOzC,IAAM,qCAAqC;AAgtB3C,IAAM,qBACG,+BAAmC;MAC/C;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;KACD;AAUH,IAAM,+BAA+B;AACrC,IAAM,2BAA2B;AACjC,IAAM,2BAA2B;AACjC,IAAM,4BAA4B;AAClC,IAAM,yBAAyB;AAC/B,IAAM,gCAAgC;AACtC,IAAM,8BAA8B;AACpC,IAAM,0BAA0B;AAChC,IAAM,gCAAgC;AACtC,IAAM,4BAA4B;AAClC,IAAM,8BAA8B;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AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;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CA;AAAA,UACA;AAAA,QACD;AAAA,MACD;AAAA,MACA,eAAiB;AAAA,QAChB,UAAY;AAAA,QACZ,QAAU;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;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K,OACnB,KAAK,OAAS,KAAK,OACnB,KAAK,OAAS,KAAK,OACnB,MAAM,QACN,KAAK,QAAS,KAAK,QACnB,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,M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IAAG,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,GAAE,IAAG,IAAG,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,GAAE,GAAE,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,IAAG,IAAG,IAAG,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,IAAG,IAAG,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,GAAE,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,GAAE,GAAE,KAAI,IAAG,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,IAAG,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,IAAG,GAAE,GAAE,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,IAAG,IAAG,KAAI,IAAG,IAAG,GAAE,GAAE,IAAG,IAAG,GAAE,IAAG,IAAG,KAAI,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,IAAG,IAAG,KAAI,IAAG,IAAG,GAAE,GAAE,IAAG,GAAE,IAAG,KAAI,GAAE,IAAG,KAAI,KAAI,KAAI,IAAG,KAAI,MAAK,IAAG,IAAG,MAAK,IAAG,GAAE,IAAG,MAAK,GAAE,KAAI,MAAK,IAAG,MAAK,KAAI,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,GAAE,IAAG,IAAG,GAAE,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,IAAG,GAAE,IAAG,IAAG,IAAG,GAAE,GAAE,IAAG,IAAG,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,MAAK,IAAG,IAAG,IAAG,KAAI,MAAK,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,KAAI,IAAG,GAAE,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,KAAI,MAAK,KAAI,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,MAAK,IAAG,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,KAAI,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,GAAE,MAAK,IAAG,GAAE,GAAE,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,GAAE,GAAE,MAAK,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,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MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MA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;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA,SAAQ,SAAS;AAAA,MACjBA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AMA,IAAAF,QAAO,UAAU;AAAA;AAAA;;;ACzKjB;AAAA,wGAAAI,UAAAC,SAAA;AAAA,IAAAA,QAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AA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;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ,IAAM,cAAc;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAgDJ,IAAMC,mBAAqD,CAAA;AAC3D,IAAMC,cAA2D,CAAA;AACjE,SAASC,UAAS,KAAaC,SAAyB;AACpD,QAAM,OAAO,IAAI,MAAM,GAAG,EAAA;AAC1B,mBAAiB,IAAA,IAAQA;AACzB,cAAY,IAAA,IAAA,CAAS,MAAeA,QAAO,UAAU,CAAA,EAAG;;AAE5D,WAAW,OAAO,iBAEd,CAAAD,UAAS,KAAKE,iBAAQ,GAAA,CAAA;AAE1B,WAAW,CAAC,KAAKD,OAAA,KAAW,OAAO,QAAQ,WAAA,EACvC,CAAAD,UAAS,KAAKC,OAAA;AAqBlB,IAAaE,kBAAgC,OAAO,OAAO,gBAAA;AAsB3D,IAAaC,aAA0B,OAAO,OAAO,WAAA;AC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",
  "names": ["red", "green", "blue", "integer", "code", "process", "os", "version", "tty", "string", "styles", "object", "chalk", "open", "close", "self", "string", "console", "b", "path", "data", "proto", "target", "object", "memo", "crypto", "major", "performance", "context", "duration", "lastEventId", "context", "onError", "registry", "registry", "withScope", "withIsolationScope", "object", "path", "data", "span", "dsc", "version", "dscHasRequiredProps", "dsc", "description", "header", "op", "time", "strategy", "scope", "b", "onError", "withScope", "span", "flush", "capture", "withScope", "data", "version", "CODE_FUNCTION_NAME", "DB_COLLECTION_NAME", "DB_NAME", "DB_NAMESPACE", "DB_OPERATION_BATCH_SIZE", "DB_OPERATION_NAME", "DB_QUERY_TEXT", "DB_STATEMENT", "DB_SYSTEM", "DB_SYSTEM_NAME", "DB_USER", "ERROR_TYPE", "FAAS_TRIGGER", "GEN_AI_EMBEDDINGS_INPUT", "GEN_AI_FUNCTION_ID", "GEN_AI_INPUT_MESSAGES", "GEN_AI_OPERATION_NAME", "GEN_AI_OUTPUT_MESSAGES", "GEN_AI_REQUEST_AVAILABLE_TOOLS", "GEN_AI_REQUEST_MODEL", "GEN_AI_RESPONSE_FINISH_REASONS", "GEN_AI_RESPONSE_ID", "GEN_AI_RESPONSE_MODEL", "GEN_AI_RESPONSE_STREAMING", "GEN_AI_SYSTEM", "GEN_AI_TOOL_INPUT", "GEN_AI_TOOL_NAME", "GEN_AI_TOOL_OUTPUT", "GEN_AI_TOOL_TYPE", "GEN_AI_USAGE_CACHE_CREATION_INPUT_TOKENS", "GEN_AI_USAGE_CACHE_READ_INPUT_TOKENS", "GEN_AI_USAGE_INPUT_TOKENS", "GEN_AI_USAGE_OUTPUT_TOKENS", "GEN_AI_USAGE_REASONING_OUTPUT_TOKENS", "GEN_AI_USAGE_TOTAL_TOKENS", "GRAPHQL_DOCUMENT", "GRAPHQL_OPERATION_NAME", "GRAPHQL_OPERATION_TYPE", "HTTP_CLIENT_IP", "HTTP_FLAVOR", "HTTP_HOST", "HTTP_METHOD", "HTTP_REQUEST_METHOD", "HTTP_RESPONSE_STATUS_CODE", "HTTP_ROUTE", "HTTP_SCHEME", "HTTP_STATUS_CODE", "HTTP_TARGET", "HTTP_URL", "HTTP_USER_AGENT", "MESSAGING_BATCH_MESSAGE_COUNT", "MESSAGING_DESTINATION_NAME", "MESSAGING_OPERATION_NAME", "MESSAGING_OPERATION_TYPE", "MESSAGING_SYSTEM", "NETWORK_PEER_ADDRESS", "NETWORK_PEER_PORT", "NET_HOST_IP", "NET_HOST_NAME", "NET_HOST_PORT", "NET_PEER_IP", "NET_PEER_NAME", "NET_PEER_PORT", "NET_TRANSPORT", "RPC_GRPC_STATUS_CODE", "RPC_SERVICE", "SENTRY_GRAPHQL_OPERATION", "SENTRY_HTTP_PREFETCH", "SENTRY_ORIGIN", "SENTRY_SDK_NAME", "SENTRY_SDK_VERSION", "SENTRY_SEGMENT_ID", "SENTRY_SEGMENT_NAME", "SENTRY_TRACE_LIFECYCLE", "SERVER_ADDRESS", "SERVER_PORT", "SERVICE_NAME", "SERVICE_VERSION", "URL_FULL", "URL_PATH", "URL_QUERY", "URL_SCHEME", "USER_AGENT_ORIGINAL", "init_attributes", "release", "resolve", "error", "data", "release", "request", "b", "isEnabled", "context", "integration", "target", "withScope", "process", "logs", "metrics", "_getBufferMap", "add", "drain", "resolve", "header", "flush", "error", "data", "dc", "error", "isErrorEvent", "log", "estimatePrimitiveSizeInBytes", "url", "integration", "env", "resolve", "isError", "module", "data", "FILTERED", "url", "url", "url", "request", "path", "data", "url", "hostname", "name", "isEnabled", "url", "request", "url", "data", "url", "INTEGRATION_NAME", "error", "error", "ex", "INTEGRATION_NAME", "options", "ip", "regex", "ip", "INTEGRATION_NAME", "dc", "log", "path", "INTEGRATION_NAME", "unsubscribe", "INTEGRATION_NAME", "GEN_AI_CONVERSATION_ID_ATTRIBUTE", "target", "init_constants", "init_constants", "description", "integration", "trace", "GEN_AI_CONVERSATION_ID_ATTRIBUTE", "derived", "init_constants", "GEN_AI_CONVERSATION_ID_ATTRIBUTE", "usage", "error", "context", "originalResult", "instrumentedPromise", "target", "init_constants", "isErrorEvent", "isError", "error", "extractRequestAttributes", "addResponseAttributes", "error", "target", "instrumentMethod", "context", "instrumented", "init_constants", "usage", "instrumentStream", "content", "init_utils", "context", "config", "extractRequestAttributes", "addPrivateRequestAttributes", "addResponseAttributes", "usage", "instrumentMethod", "target", "instrumentStream", "error", "createDeepProxy", "init_constants", "usage", "handlers", "target", "target", "init_constants", "target", "error", "target", "error", "config", "threadId", "GEN_AI_CONVERSATION_ID_ATTRIBUTE", "exports", "init_exports", "_maxSize", "release", "getModule", "object", "functionName", "path", "error", "config", "request", "isError", "express", "target", "init_constants", "request", "hostname", "path", "request", "url", "request", "url", "request", "propagationDecisionMap", "url", "http", "propagationDecisionMap", "getConfig", "onHttpClientRequestCreated", "data", "errorMonitor", "http", "https", "request", "endSpan", "error", "aborted", "proto", "target", "thisArg", "args", "bodyByteLength", "error", "request", "target", "data", "INTEGRATION_NAME", "url", "withIsolationScope", "errorMonitor", "hostname", "endSpan", "path", "init_console", "init_internal", "init_utils", "init_constants", "init_exports", "init_version", "isCompatible", "init_version", "diag", "_a", "init_version", "init_types", "DiagLogLevel", "init_types", "init_types", "self", "_a", "init_utils", "description", "self", "context", "ValueType", "target", "API_NAME", "init_context", "context", "target", "TraceFlags", "context", "getActiveSpan", "_a", "init_context", "init_context", "context", "version", "context", "version", "_a", "SamplingDecision", "SpanKind", "SpanStatusCode", "init_utils", "init_context", "diag", "API_NAME", "version", "context", "context", "init_context", "API_NAME", "init_utils", "context", "API_NAME", "init_trace", "getActiveSpan", "success", "version", "init_trace", "diag", "init_esm", "init_utils", "init_types", "DEBUG_BUILD", "init_debug_build", "request", "INTEGRATION_NAME", "DEBUG_BUILD", "SUPPRESS_TRACING_KEY", "suppressTracing", "context", "exports", "isTracingSuppressed", "exports", "exports", "W3CBaggagePropagator", "context", "exports", "exports", "exports", "exports", "exports", "exports", "exports", "exports", "init_utils", "init_utils", "init_trace", "init_utils", "ATTR_HTTP_ROUTE", "esm_exports", "ATTR_HTTP_ROUTE", "init_esm", "init_trace", "exports", "exports", "exports", "exports", "exports", "time", "date", "time2", "exports", "ExportResultCode", "exports", "config", "context", "exports", "VALID_KEY_CHAR_RANGE", "VALID_KEY", "VALID_VENDOR_KEY", "VALID_KEY_REGEX", "VALID_VALUE_BASE_REGEX", "INVALID_VALUE_COMMA_EQUAL_REGEX", "validateKey", "exports", "validateValue", "MAX_TRACE_STATE_ITEMS", "MAX_TRACE_STATE_LEN", "LIST_MEMBERS_SEPARATOR", "LIST_MEMBER_KEY_VALUE_SPLITTER", "TraceState", "exports", "exports", "VERSION", "context", "RPCType", "exports", "setRPCMetadata", "context", "meta", "hasOwnProperty", "isPlainObject", "isObjectLike", "proto", "exports", "objectToString", "merge", "exports", "isPrimitive", "isObject", "info", "exports", "url", "exports", "resolve", "exports", "exports", "exports", "resolve", "exports", "exports", "isKnownPrefetchRequest", "isStaticAssetRequest", "path", "shouldIgnoreSpansForIncomingRequest", "request", "getRequestContentLengthAttribute", "code", "INTEGRATION_NAME", "startSpan", "DEBUG_BUILD", "hostname", "endSpan", "SeverityNumber", "exports", "exports", "exports", "version", "exports", "version", "exports", "version", "_a", "exports", "_a", "version", "exports", "exports", "exports", "registerInstrumentations", "exports", "version", "exports", "build", "b", "fp", "exports", "config", "info", "exports", "exports", "module", "parse", "exports", "module", "env", "coerce", "disable", "enable", "hash", "debug", "self", "format", "extend", "ns", "exports", "module", "load", "warned", "error", "createSupportsColor", "supports_color_default", "hasFlag", "process", "envForceColor", "env", "translateLevel", "_supportsColor", "flagForceColor", "os", "version", "import_node_process", "import_node_os", "import_node_tty", "supportsColor", "init_supports_color", "tty", "require_node", "exports", "module", "tty", "util", "init", "log", "load", "supportsColor", "error", "k", "useColors", "debug", "require_src", "exports", "module", "exports", "module", "sep", "path", "exports", "module", "path", "debug", "normalize", "isBuiltin", "mod", "self", "exports", "b", "path", "exports", "exports", "target", "register", "error", "exports", "module", "path", "fileURLToPath", "isBuiltin", "createAddHookMessageChannel", "resolve", "safeExecuteInTheMiddle", "error", "exports", "isWrapped", "path", "InstrumentationBase", "config", "module", "version", "exports", "supportedVersions", "exports", "exports", "exports", "InstrumentationNodeModuleDefinition", "supportedVersions", "exports", "InstrumentationNodeModuleFile", "supportedVersions", "exports", "SemconvStability", "exports", "exports", "url", "request", "target", "onHttpClientRequestCreated", "INTEGRATION_NAME", "request", "propagationDecisionMap", "url", "getAbsoluteUrl", "header", "data", "path", "config", "onError", "error", "major", "request", "url", "getAbsoluteUrl", "DEBUG_BUILD", "ATTR_HTTP_REQUEST_METHOD_ORIGINAL", "path", "exports", "isPromiseLike", "exports", "resource", "k", "exports", "config", "resource", "exports", "exports", "exports", "child_process", "util", "exports", "exports", "path", "exports", "exports", "process", "exports", "exports", "process", "exports", "exports", "exports", "exports", "os", "exports", "exports", "exports", "exports", "exports", "exports", "exports", "exports", "exports", "resource", "k", "time", "error", "exports", "SamplingDecision", "exports", "exports", "exports", "exports", "context", "exports", "resolve", "error", "context", "exports", "exports", "exports", "config", "context", "exports", "error", "exports", "resolve", "flush", "exports", "exports", "exports", "exports", "exports", "ForceFlushState", "version", "resolve", "error", "errors", "exports", "exports", "exports", "exports", "exports", "context", "exports", "context", "exports", "exports", "TracesSamplerValues", "exports", "exports", "BasicTracerProvider", "config", "exports", "config", "configName", "exports", "exports", "exports", "data", "url", "context", "description", "getActiveSpan", "dynamicSamplingContext", "SENTRY_BAGGAGE_HEADER", "SENTRY_TRACE_HEADER", "getActiveSpanWrapper", "suppressTracing", "isTracingSuppressed", "startSpan", "startSpanManual", "startInactiveSpan", "withActiveSpan", "continueTrace", "startNewTrace", "suppressTracingImpl", "isTracingSuppressedImpl", "node", "inferredStatus", "hasGenAiSpans", "parentSampled", "DEBUG_BUILD", "env", "SEMRESATTRS_SERVICE_NAMESPACE", "ATTR_TELEMETRY_SDK_LANGUAGE", "ATTR_TELEMETRY_SDK_NAME", "ATTR_TELEMETRY_SDK_VERSION", "getTraceData", "scope", "withScope", "getCurrentScope", "withSetScope", "withIsolationScope", "getIsolationScope", "MAX_SPAN_COUNT", "b", "spans", "version", "ADD_LISTENER_METHODS", "context", "target", "diag", "instrumented", "data", "code", "error", "threadId", "INTEGRATION_NAME", "uptime", "regex", "resolve", "error", "INTEGRATION_NAME", "path", "resolve", "DEBUG_BUILD", "range", "b", "addContextToFrame", "INTEGRATION_NAME", "enable", "disable", "b", "log", "code", "add", "INTEGRATION_NAME", "b", "hash", "data", "functionName", "error", "INTEGRATION_NAME", "error", "DEBUG_BUILD", "error", "DEBUG_BUILD", "INTEGRATION_NAME", "list", "INTEGRATION_NAME", "INTEGRATION_NAME", "url", "INTEGRATION_NAME", "consoleIntegration", "coreConsoleIntegration", "error", "INTEGRATION_NAME", "Agent", "resolve", "b", "header", "debugLog", "Agent", "auth", "connect", "http", "hostname", "request", "resolve", "path", "log", "version", "DEBUG_BUILD", "error", "consoleIntegration", "DEBUG_BUILD", "SPOTLIGHT_INTEGRATION_NAME", "required", "k", "release", "init_esm", "INTEGRATION_NAME", "httpIntegration", "request", "url", "_nativeNodeFetchIntegration", "nativeNodeFetchIntegration", "DEBUG_BUILD", "init_debug_build", "INTEGRATION_NAME", "config", "module", "DEBUG_BUILD", "AttributeNames", "FastifyTypes", "FastifyNames", "init_constants", "startSpan", "error", "config", "request", "startSpan", "GEN_AI_EXECUTE_TOOL_SPAN_OP", "GEN_AI_INVOKE_AGENT_SPAN_OP", "WEB_SERVER_GRAPHQL_SPAN_OP", "DEBUG_BUILD", "init_debug_build", "channel", "getSpan", "error", "data", "DEBUG_BUILD", "getGraphqlOperationNamesFromAttribute", "errors", "document", "tracingChannel", "data", "tracingChannel", "DEBUG_BUILD", "data", "ORIGIN", "ns", "address", "tracingChannel", "data", "ORIGIN", "DB_SYSTEM_NAME_VALUE_MYSQL", "shouldIgnoreSpan", "endSpan", "run", "DEBUG_BUILD", "INTEGRATION_NAME", "tracingChannel", "data", "setupConnectChannel", "ORIGIN", "regex", "b", "onError", "finalize", "error", "usage", "data", "tracingChannel", "error", "usage", "buildOutputMessages", "ORIGIN", "WORKERS_AI_INTEGRATION_NAME", "description", "GEN_AI_TOOL_CALL_ID_ATTRIBUTE", "GEN_AI_TOOL_DESCRIPTION_ATTRIBUTE", "normalizeFinishReason", "withScope", "request", "url", "ORIGIN", "PACKAGE_NAME", "error", "SUPPORTED_VERSIONS", "instrumentFastify", "DEBUG_BUILD", "defaultShouldHandleError", "INTEGRATION_NAME", "init_utils", "INTEGRATION_NAME", "error", "request", "defaultShouldHandleError", "DEBUG_BUILD", "INTEGRATION_NAME", "defaultShouldHandleError", "_instrumentFastify", "shouldHandleError", "ATTR_DB_MONGODB_COLLECTION", "ATTR_DB_NAME", "ATTR_NET_PEER_NAME", "ATTR_NET_PEER_PORT", "ATTR_DB_OPERATION", "ATTR_DB_SYSTEM", "init_esm", "init_vercel_ai", "INTEGRATION_NAME", "_fastifyIntegration", "fastifyIntegration", "serverUtilsFastifyIntegration", "supportedVersions", "AllowedOperationTypes", "TokenKind", "SpanNames", "AttributeNames", "init_AttributeNames", "AttributeNames", "info", "path", "document", "fieldNode", "endSpan", "error", "getRootSpan", "getConfig", "config", "isPromise", "getGraphqlOperationNamesFromAttribute", "PACKAGE_NAME", "ORIGIN", "config", "module", "endSpan", "isPromise", "error", "AttributeNames", "parse", "validate", "schema", "document", "INTEGRATION_NAME", "_graphqlIntegration", "graphqlIntegration", "graphqlChannelIntegration", "ERROR_TYPE_VALUE_OTHER", "ERROR_TYPE_VALUE_OTHER", "PACKAGE_NAME", "config", "module", "run", "transaction", "args", "record", "INTEGRATION_NAME", "PACKAGE_NAME", "withScope", "INTEGRATION_NAME", "getV4SpanAttributes", "ns", "sharedGetV4SpanAttributes", "ORIGIN", "getV3SpanAttributes", "sharedGetV3SpanAttributes", "error", "ns", "getV3SpanAttributes", "getV4SpanAttributes", "PACKAGE_NAME", "config", "patches.getV3PatchOperation", "patches.getV3PatchCommand", "patches.getV3PatchFind", "patches.getV3PatchCursor", "patches.getV4ConnectionPoolCheckOut", "patches.getV4PatchCommandCallback", "patches.getV4PatchCommandPromise", "INTEGRATION_NAME", "error", "exec", "PACKAGE_NAME", "ORIGIN", "config", "module", "self", "exec", "update", "INTEGRATION_NAME", "_mongooseIntegration", "mongooseIntegration", "mongooseChannelIntegration", "ATTR_DB_CONNECTION_STRING", "init_semconv", "config", "init_utils", "PACKAGE_NAME", "ORIGIN", "config", "withScope", "ATTR_DB_CONNECTION_STRING", "INTEGRATION_NAME", "ATTR_DB_CONNECTION_STRING", "DB_SYSTEM_VALUE_MYSQL", "init_semconv", "config", "getConfig", "ATTR_DB_CONNECTION_STRING", "getJDBCString", "format", "getSpanName", "PACKAGE_NAME", "ORIGIN", "supportedVersions", "config", "format", "DB_SYSTEM_VALUE_MYSQL", "getSpanName", "endSpan", "INTEGRATION_NAME", "_mysql2Integration", "mysql2Integration", "mysql2ChannelIntegration", "arg", "input", "ATTR_DB_CONNECTION_STRING", "init_semconv", "endSpan", "PACKAGE_NAME", "ORIGIN", "SUPPORTED_VERSIONS", "config", "module", "ATTR_DB_CONNECTION_STRING", "error", "endSpan", "runResponseHook", "url", "DEBUG_BUILD", "ATTR_DB_CONNECTION_STRING", "ORIGIN", "PACKAGE_NAME", "_RedisInstrumentationV2_V3", "config", "_RedisInstrumentationV4_V5", "error", "INTEGRATION_NAME", "_redisIntegration", "redisIntegration", "redisChannelIntegration", "SpanNames", "AttributeNames", "init_AttributeNames", "ATTR_DB_CONNECTION_STRING", "init_semconv", "SpanNames", "url", "ATTR_DB_CONNECTION_STRING", "AttributeNames", "shouldSkipInstrumentation", "ORIGIN", "module", "error", "utils.getErrorMessage", "PACKAGE_NAME", "config", "connect", "utils.shouldSkipInstrumentation", "SpanNames", "utils.getSemanticAttributesFromConnection", "utils.patchClientConnectCallback", "utils.isObjectWithTextString", "utils.handleConfigQuery", "utils.patchCallback", "result", "utils.getSemanticAttributesFromPoolConnection", "utils.patchCallbackPGPool", "INTEGRATION_NAME", "INTEGRATION_NAME", "SUPPORTED_VERSIONS", "ATTR_DB_RESPONSE_STATUS_CODE", "SQL_OPERATION_REGEX", "QUERY_FROM_INSTRUMENTED_SQL", "config", "module", "exports", "DEBUG_BUILD", "path", "self", "AttributeNames", "init_AttributeNames", "init_internal_types", "AttributeNames", "PACKAGE_NAME", "config", "module", "self", "register", "AttributeNames", "INTEGRATION_NAME", "AttributeNames", "init_constants", "PACKAGE_NAME", "config", "path", "handlers", "result", "AttributeNames", "error", "AttributeNames", "DEBUG_BUILD", "INTEGRATION_NAME", "init_types", "KoaLayerType", "AttributeNames", "init_AttributeNames", "isLayerIgnored", "context", "AttributeNames", "config", "init_internal_types", "PACKAGE_NAME", "config", "module", "patchLayer", "path", "isLayerIgnored", "context", "AttributeNames", "DEBUG_BUILD", "INTEGRATION_NAME", "AttributeNames", "init_AttributeNames", "ConnectTypes", "init_internal_types", "request", "DEBUG_BUILD", "PACKAGE_NAME", "ANONYMOUS_NAME", "config", "AttributeNames", "isEnabled", "startSpan", "INTEGRATION_NAME", "init_semconv", "getSpanName", "once", "init_utils", "PACKAGE_NAME", "_TediousInstrumentation", "config", "request", "getSpanName", "endSpan", "once", "INTEGRATION_NAME", "PACKAGE_NAME", "config", "INTEGRATION_NAME", "init_types", "EndOperation", "init_semconv", "getHeaderAsString", "channel", "CONSUMER_ORIGIN", "getPort", "url", "portFromUrl", "channel", "url", "getHeaderAsString", "PACKAGE_NAME", "supportedVersions", "config", "module", "INTEGRATION_NAME", "INTEGRATION_NAME", "init_constants", "withScope", "SUPPORTED_VERSIONS", "INSTRUMENTED_METHODS", "config", "module", "target", "isEnabled", "integration", "INTEGRATION_NAME", "error", "INTEGRATION_NAME", "serverUtilsVercelAiIntegration", "supportedVersions", "config", "module", "exports", "supportedVersions", "config", "module", "exports", "supportedVersions", "config", "module", "exports", "target", "supportedVersions", "config", "exports", "proto", "supportedVersions", "config", "exports", "instrumentLangGraph", "firestoreSupportedVersions", "reference", "data", "address", "functionsSupportedVersions", "functionName", "error", "config", "INTEGRATION_NAME", "fastifyIntegration", "graphqlIntegration", "mongooseIntegration", "mysql2Integration", "redisIntegration", "registry", "DEBUG_BUILD", "coreDebug", "getNodeCoreDefaultIntegrations", "integration", "httpIntegration", "nativeNodeFetchIntegration", "getDefaultIntegrations", "init", "_init", "initNodeCore", "init_esm", "init_sdk", "util", "init_util", "assertIs", "assertNever", "k", "object", "joinValues", "array", "objectUtil", "data", "init_util", "util", "issue", "error", "terminal", "init_util", "issue", "util", "init_errors", "issue", "init_errors", "data", "path", "maps", "errorUtil", "errorMap", "description", "regex", "ip", "version", "header", "base64", "schema", "b", "util", "data", "r", "init_types", "init_errors", "init_util", "path", "error", "transform", "target", "_ZodString", "parsedType", "ctx", "result", "shapeKeys", "issue", "issues", "elements", "processed", "preprocess", "ZodFirstPartyTypeKind", "util", "init_errors", "init_util", "init_types", "functionName", "onetime", "global", "process", "list", "code", "import_node_process", "process", "import_node_process", "process", "import_node_tty", "init_base", "tty", "open", "close", "string", "init_base", "env", "process", "import_node_process", "error", "warning", "init_symbols", "init_symbols", "string", "string", "import_node_process", "process", "import_node_process", "process", "indent", "spinner", "format", "import_util", "Position", "constructor", "line", "col", "index", "column", "SourceLocation", "start", "end", "filename", "identifierName", "createPositionWithColumnOffset", "position", "columnOffset", "code", "ModuleErrors", "ImportMetaOutsideModule", "message", "ImportOutsideModule", "NodeDescriptions", "ArrayPattern", "AssignmentExpression", "AssignmentPattern", "ArrowFunctionExpression", "ConditionalExpression", "CatchClause", "ForOfStatement", "ForInStatement", "ForStatement", "FormalParameters", "Identifier", "ImportSpecifier", "ImportDefaultSpecifier", "ImportNamespaceSpecifier", "ObjectPattern", "ParenthesizedExpression", "RestElement", "UpdateExpression", "true", "false", "VariableDeclarator", "YieldExpression", "toNodeDescription", "node", "type", "prefix", "StandardErrors", "AccessorIsGenerator", "kind", "ArgumentsInClass", "AsyncFunctionInSingleStatementContext", "AwaitBindingIdentifier", "AwaitBindingIdentifierInStaticBlock", "AwaitExpressionFormalParameter", "AwaitUsingNotInAsyncContext", "AwaitNotInAsyncContext", "BadGetterArity", "BadSetterArity", "BadSetterRestParameter", "ConstructorClassField", "ConstructorClassPrivateField", "ConstructorIsAccessor", "ConstructorIsAsync", "ConstructorIsGenerator", "DeclarationMissingInitializer", "DecoratorArgumentsOutsideParentheses", "DecoratorBeforeExport", "DecoratorsBeforeAfterExport", "DecoratorConstructor", "DecoratorExportClass", "DecoratorSemicolon", "DecoratorStaticBlock", "DeferImportRequiresNamespace", "DeletePrivateField", "DestructureNamedImport", "DuplicateConstructor", "DuplicateDefaultExport", "DuplicateExport", "exportName", "DuplicateProto", "DuplicateRegExpFlags", "ElementAfterRest", "EscapedCharNotAnIdentifier", "ExportBindingIsString", "localName", "ExportDefaultFromAsIdentifier", "ForInOfLoopInitializer", "ForInUsing", "ForOfAsync", "ForOfLet", "GeneratorInSingleStatementContext", "IllegalBreakContinue", "IllegalLanguageModeDirective", "IllegalReturn", "ImportAttributesUseAssert", "ImportBindingIsString", "importName", "ImportCallArity", "ImportCallNotNewExpression", "ImportCallSpreadArgument", "ImportJSONBindingNotDefault", "ImportReflectionHasAssertion", "ImportReflectionNotBinding", "IncompatibleRegExpUVFlags", "InvalidBigIntLiteral", "InvalidCodePoint", "InvalidCoverDiscardElement", "InvalidCoverInitializedName", "InvalidDecimal", "InvalidDigit", "radix", "InvalidEscapeSequence", "InvalidEscapeSequenceTemplate", "InvalidEscapedReservedWord", "reservedWord", "InvalidIdentifier", "InvalidLhs", "ancestor", "InvalidLhsBinding", "InvalidLhsOptionalChaining", "InvalidNumber", "InvalidOrMissingExponent", "InvalidOrUnexpectedToken", "unexpected", "InvalidParenthesizedAssignment", "InvalidPrivateFieldResolution", "InvalidPropertyBindingPattern", "InvalidRecordProperty", "InvalidRestAssignmentPattern", "LabelRedeclaration", "labelName", "LetInLexicalBinding", "LineTerminatorBeforeArrow", "MalformedRegExpFlags", "MissingClassName", "MissingEqInAssignment", "MissingSemicolon", "MissingPlugin", "missingPlugin", "map", "name", "JSON", "stringify", "join", "MissingOneOfPlugins", "MissingUnicodeEscape", "MixingCoalesceWithLogical", "ModuleAttributeDifferentFromType", "ModuleAttributeInvalidValue", "ModuleAttributesWithDuplicateKeys", "key", "ModuleExportNameHasLoneSurrogate", "surrogateCharCode", "toString", "ModuleExportUndefined", "MultipleDefaultsInSwitch", "NewlineAfterThrow", "NoCatchOrFinally", "NumberIdentifier", "NumericSeparatorInEscapeSequence", "ObsoleteAwaitStar", "OptionalChainingNoNew", "OptionalChainingNoTemplate", "OverrideOnConstructor", "ParamDupe", "PatternHasAccessor", "PatternHasMethod", "PrivateInExpectedIn", "PrivateNameRedeclaration", "RecordExpressionBarIncorrectEndSyntaxType", "RecordExpressionBarIncorrectStartSyntaxType", "RecordExpressionHashIncorrectStartSyntaxType", "RecordNoProto", "RestTrailingComma", "SloppyFunction", "SloppyFunctionAnnexB", "SourcePhaseImportRequiresDefault", "StaticPrototype", "SuperNotAllowed", "SuperPrivateField", "TrailingDecorator", "TupleExpressionBarIncorrectEndSyntaxType", "TupleExpressionBarIncorrectStartSyntaxType", "TupleExpressionHashIncorrectStartSyntaxType", "UnexpectedArgumentPlaceholder", "UnexpectedAwaitAfterPipelineBody", "UnexpectedDigitAfterHash", "UnexpectedImportExport", "UnexpectedKeyword", "keyword", "UnexpectedLeadingDecorator", "UnexpectedLexicalDeclaration", "UnexpectedNewTarget", "UnexpectedNumericSeparator", "UnexpectedPrivateField", "UnexpectedReservedWord", "UnexpectedSuper", "UnexpectedToken", "expected", "UnexpectedTokenUnaryExponentiation", "UnexpectedUsingDeclaration", "UnexpectedVoidPattern", "UnsupportedBind", "UnsupportedDecoratorExport", "UnsupportedDefaultExport", "UnsupportedImport", "UnsupportedMetaProperty", "target", "onlyValidPropertyName", "UnsupportedParameterDecorator", "UnsupportedPropertyDecorator", "UnsupportedSuper", "UnterminatedComment", "UnterminatedRegExp", "UnterminatedString", "UnterminatedTemplate", "UsingDeclarationExport", "UsingDeclarationHasBindingPattern", "VarRedeclaration", "VoidPatternCatchClauseParam", "VoidPatternInitializer", "YieldBindingIdentifier", "YieldInParameter", "YieldNotInGeneratorFunction", "ZeroDigitNumericSeparator", "StrictModeErrors", "StrictDelete", "StrictEvalArguments", "referenceName", "StrictEvalArgumentsBinding", "bindingName", "StrictFunction", "StrictNumericEscape", "StrictOctalLiteral", "StrictWith", "ParseExpressionErrors", "ParseExpressionEmptyInput", "ParseExpressionExpectsEOF", "String", "fromCodePoint", "UnparenthesizedPipeBodyDescriptions", "Set", "Object", "assign", "PipeBodyIsTighter", "PipeTopicRequiresHackPipes", "PipeTopicUnbound", "PipeTopicUnconfiguredToken", "token", "PipeTopicUnused", "PipeUnparenthesizedBody", "PipelineBodyNoArrow", "PipelineBodySequenceExpression", "PipelineHeadSequenceExpression", "PipelineTopicUnused", "PrimaryTopicNotAllowed", "PrimaryTopicRequiresSmartPipeline", "defineHidden", "obj", "value", "defineProperty", "enumerable", "configurable", "toParseErrorConstructor", "toMessage", "reasonCode", "syntaxPlugin", "hasMissingPlugin", "oldReasonCodes", "AccessorCannotDeclareThisParameter", "AccessorCannotHaveTypeParameters", "ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference", "SetAccessorCannotHaveOptionalParameter", "SetAccessorCannotHaveRestParameter", "SetAccessorCannotHaveReturnType", "loc", "details", "error", "SyntaxError", "pos", "clone", "overrides", "_overrides$loc", "get", "set", "writable", "ParseErrorEnum", "argument", "Array", "isArray", "parseErrorTemplates", "ParseErrorConstructors", "keys", "template", "_ref", "rest", "_objectWithoutPropertiesLoose", "_excluded", "Errors", "PipelineOperatorErrors", "createDefaultOptions", "sourceType", "sourceFilename", "undefined", "startIndex", "startColumn", "startLine", "allowAwaitOutsideFunction", "allowReturnOutsideFunction", "allowNewTargetOutsideFunction", "allowImportExportEverywhere", "allowSuperOutsideMethod", "allowUndeclaredExports", "allowYieldOutsideFunction", "plugins", "strictMode", "ranges", "tokens", "createImportExpressions", "createParenthesizedExpressions", "errorRecovery", "attachComment", "annexB", "getOptions", "opts", "options", "Error", "toUnenumerable", "object", "toESTreeLocation", "estree", "superClass", "ESTreeParserMixin", "parse", "file", "optionFlags", "parseRegExpLiteral", "pattern", "flags", "regex", "RegExp", "_", "estreeParseLiteral", "parseBigIntLiteral", "bigInt", "BigInt", "_unused", "bigint", "parseDecimalLiteral", "decimal", "parseLiteral", "parseStringLiteral", "parseNumericLiteral", "parseNullLiteral", "parseBooleanLiteral", "estreeParseChainExpression", "endLoc", "chain", "startNodeAtNode", "expression", "finishNodeAt", "directiveToStmt", "directive", "castNodeTo", "raw", "extra", "expressionValue", "stmt", "rawValue", "fillOptionalPropertiesForTSESLint", "cloneEstreeStringLiteral", "range", "cloned", "create", "prototype", "initFunction", "isAsync", "checkDeclaration", "isObjectProperty", "getObjectOrClassMethodParams", "method", "params", "isValidDirective", "_stmt$expression$extr", "parenthesized", "parseBlockBody", "allowDirectives", "topLevel", "afterBlockParse", "directiveStatements", "directives", "d", "body", "concat", "parsePrivateName", "getPluginOption", "convertPrivateNameToPrivateIdentifier", "getPrivateNameSV", "id", "isPrivateName", "parseFunctionBody", "allowExpression", "isMethod", "parseMethod", "isGenerator", "isConstructor", "allowDirectSuper", "inClassScope", "funcNode", "startNode", "typeParameters", "resetStartLocationFromNode", "valueNode", "computed", "shorthand", "finishNode", "nameIsConstructor", "parseClassProperty", "args", "propertyNode", "parseClassPrivateProperty", "parseClassAccessorProperty", "accessorPropertyNode", "abstract", "hasPlugin", "parseObjectProperty", "prop", "startLoc", "isPattern", "refExpressionErrors", "finishObjectProperty", "isValidLVal", "disallowCallExpression", "isUnparenthesizedInAssign", "binding", "isAssignable", "isBinding", "toAssignable", "isLHS", "classScope", "usePrivateName", "toAssignableObjectExpressionProp", "isLast", "raise", "finishCallExpression", "unfinished", "optional", "callee", "source", "arguments", "_ref2", "attributes", "toReferencedArguments", "parseExport", "decorators", "exportStartLoc", "state", "lastTokStartLoc", "exported", "specifiers", "length", "_declaration$decorato", "declaration", "resetStartLocation", "stopParseSubscript", "base", "optionalChainMember", "parseMember", "isOptionalMemberExpression", "hasPropertyAsPrivateName", "isObjectMethod", "result", "cloneIdentifier", "cloneStringLiteral", "resetEndLocation", "lastTokEndLoc", "TokContext", "preserveSpace", "types", "brace", "j_oTag", "j_cTag", "j_expr", "beforeExpr", "startsExpr", "isLoop", "isAssign", "postfix", "ExportedTokenType", "label", "conf", "rightAssociative", "binop", "updateContext", "keywords", "Map", "createKeyword", "createToken", "createBinop", "tokenTypeCounter", "tokenTypes", "tokenLabels", "tokenBinops", "tokenBeforeExprs", "tokenStartsExprs", "tokenPrefixes", "_options$binop", "_options$beforeExpr", "_options$startsExpr", "_options$prefix", "push", "createKeywordLike", "_options$binop2", "_options$beforeExpr2", "_options$startsExpr2", "_options$prefix2", "tt", "bracketL", "bracketHashL", "bracketBarL", "bracketR", "bracketBarR", "braceL", "braceBarL", "braceHashL", "braceR", "braceBarR", "parenL", "parenR", "comma", "semi", "colon", "doubleColon", "dot", "question", "questionDot", "arrow", "ellipsis", "backQuote", "dollarBraceL", "templateTail", "templateNonTail", "at", "hash", "interpreterDirective", "eq", "slashAssign", "xorAssign", "moduloAssign", "incDec", "bang", "tilde", "doubleCaret", "doubleAt", "pipeline", "nullishCoalescing", "logicalOR", "logicalAND", "bitwiseOR", "bitwiseXOR", "bitwiseAND", "equality", "lt", "gt", "relational", "bitShift", "bitShiftL", "bitShiftR", "plusMin", "modulo", "star", "slash", "exponent", "_in", "_instanceof", "_break", "_case", "_catch", "_continue", "_debugger", "_default", "_else", "_finally", "_function", "_if", "_return", "_switch", "_throw", "_try", "_var", "_const", "_with", "_new", "_this", "_super", "_class", "_extends", "_export", "_import", "_null", "_true", "_false", "_typeof", "_void", "_delete", "_do", "_for", "_while", "_as", "_assert", "_async", "_await", "_defer", "_from", "_get", "_let", "_meta", "_of", "_sent", "_set", "_source", "_static", "_using", "_yield", "_asserts", "_checks", "_exports", "_global", "_implements", "_intrinsic", "_infer", "_is", "_mixins", "_proto", "_require", "_satisfies", "_keyof", "_readonly", "_unique", "_abstract", "_declare", "_enum", "_module", "_namespace", "_interface", "_type", "_opaque", "placeholder", "string", "num", "regexp", "privateName", "eof", "jsxName", "jsxText", "jsxTagStart", "jsxTagEnd", "tokenIsIdentifier", "tokenKeywordOrIdentifierIsKeyword", "tokenIsKeywordOrIdentifier", "tokenIsLiteralPropertyName", "tokenComesBeforeExpression", "tokenCanStartExpression", "tokenIsAssignment", "tokenIsFlowInterfaceOrTypeOrOpaque", "tokenIsLoop", "tokenIsKeyword", "tokenIsOperator", "tokenIsPostfix", "tokenIsPrefix", "tokenIsTSTypeOperator", "tokenIsTSDeclarationStart", "tokenLabelName", "tokenOperatorPrecedence", "tokenIsRightAssociative", "tokenIsTemplate", "getExportedToken", "context", "pop", "tc", "nonASCIIidentifierStartChars", "nonASCIIidentifierChars", "nonASCIIidentifierStart", "nonASCIIidentifier", "astralIdentifierStartCodes", "astralIdentifierCodes", "isInAstralSet", "i", "isIdentifierStart", "test", "fromCharCode", "isIdentifierChar", "reservedWords", "strict", "strictBind", "reservedWordsStrictSet", "reservedWordsStrictBindSet", "isReservedWord", "word", "inModule", "isStrictReservedWord", "has", "isStrictBindOnlyReservedWord", "isStrictBindReservedWord", "isKeyword", "isIteratorStart", "current", "next", "next2", "reservedWordLikeSet", "canBeReservedWord", "Scope", "names", "firstLexicalName", "ScopeHandler", "parser", "scopeStack", "undefinedExports", "inTopLevel", "currentScope", "inFunction", "currentVarScopeFlags", "allowSuper", "currentThisScopeFlags", "allowNewTarget", "inClass", "inClassAndNotInNonArrowFunction", "inStaticBlock", "ScopeFlag", "inNonArrowFunction", "inBareCaseStatement", "treatFunctionsAsVar", "treatFunctionsAsVarInScope", "createScope", "enter", "exit", "scope", "declareName", "bindingType", "checkRedeclarationInScope", "maybeExportDefined", "delete", "isRedeclaredInScope", "checkLocalExport", "topLevelScope", "FlowScope", "declareFunctions", "FlowScopeHandler", "add", "reservedTypes", "FlowErrors", "AmbiguousConditionalArrow", "AmbiguousDeclareModuleKind", "AssignReservedType", "reservedType", "DeclareClassElement", "DeclareClassFieldInitializer", "DuplicateDeclareModuleExports", "EnumBooleanMemberNotInitialized", "memberName", "enumName", "EnumDuplicateMemberName", "EnumInconsistentMemberValues", "EnumInvalidExplicitType", "invalidEnumType", "EnumInvalidExplicitTypeUnknownSupplied", "EnumInvalidMemberInitializerPrimaryType", "explicitType", "EnumInvalidMemberInitializerSymbolType", "EnumInvalidMemberInitializerUnknownType", "EnumInvalidMemberName", "suggestion", "EnumNumberMemberNotInitialized", "EnumStringMemberInconsistentlyInitialized", "GetterMayNotHaveThisParam", "ImportReflectionHasImportType", "ImportTypeShorthandOnlyInPureImport", "InexactInsideExact", "InexactInsideNonObject", "InexactVariance", "InvalidNonTypeImportInDeclareModule", "MissingTypeParamDefault", "NestedDeclareModule", "NestedFlowComment", "PatternIsOptional", "SetterMayNotHaveThisParam", "SpreadVariance", "ThisParamAnnotationRequired", "ThisParamBannedInConstructor", "ThisParamMayNotBeOptional", "ThisParamMustBeFirst", "ThisParamNoDefault", "TypeBeforeInitializer", "TypeCastInPattern", "UnexpectedExplicitInexactInObject", "UnexpectedReservedType", "UnexpectedReservedUnderscore", "UnexpectedSpaceBetweenModuloChecks", "UnexpectedSpreadType", "UnexpectedSubtractionOperand", "UnexpectedTokenAfterTypeParameter", "UnexpectedTypeParameterBeforeAsyncArrowFunction", "UnsupportedDeclareExportKind", "unsupportedExportKind", "UnsupportedStatementInDeclareModule", "UnterminatedFlowComment", "isEsModuleType", "bodyElement", "hasTypeImportKind", "importKind", "exportSuggestions", "const", "let", "interface", "partition", "list", "list1", "list2", "FLOW_PRAGMA_REGEX", "flow", "FlowParserMixin", "flowPragma", "getScopeHandler", "shouldParseTypes", "finishToken", "val", "addComment", "comment", "matches", "exec", "flowParseTypeInitialiser", "tok", "oldInType", "inType", "expect", "flowParseType", "flowParsePredicate", "moduloLoc", "expectContextual", "eat", "parseExpression", "flowParseTypeAndPredicateInitialiser", "predicate", "match", "flowParseDeclareClass", "flowParseInterfaceish", "flowParseDeclareFunction", "parseIdentifier", "typeNode", "typeContainer", "flowParseTypeParameterDeclaration", "tmp", "flowParseFunctionTypeParams", "this", "returnType", "typeAnnotation", "semicolon", "flowParseDeclare", "insideModule", "flowParseDeclareVariable", "eatContextual", "flowParseDeclareModuleExports", "flowParseDeclareModule", "isContextual", "flowParseDeclareTypeAlias", "flowParseDeclareOpaqueType", "flowParseDeclareInterface", "flowParseDeclareExportDeclaration", "flowParseTypeAnnotatableIdentifier", "parseExprAtom", "bodyNode", "parseImport", "hasModuleExport", "forEach", "default", "isLet", "exportKind", "flowParseTypeAnnotation", "finished", "flowParseTypeAlias", "flowParseOpaqueType", "isClass", "flowParseRestrictedIdentifier", "extends", "flowParseInterfaceExtends", "implements", "mixins", "flowParseObjectType", "allowStatic", "allowExact", "allowSpread", "allowProto", "allowInexact", "flowParseQualifiedTypeIdentifier", "flowParseTypeParameterInstantiation", "flowParseInterface", "checkNotUnderscore", "checkReservedType", "liberal", "right", "declare", "supertype", "impltype", "flowParseTypeParameter", "requireDefault", "nodeStartLoc", "variance", "flowParseVariance", "ident", "bound", "defaultRequired", "typeParameter", "flowInTopLevelContext", "cb", "curContext", "oldContext", "flowParseTypeParameterInstantiationInExpression", "reScan_lt", "oldNoAnonFunctionType", "noAnonFunctionType", "reScan_lt_gt", "flowParseTypeParameterInstantiationCallOrNew", "flowParseTypeOrImplicitInstantiation", "flowParseInterfaceType", "flowParseObjectPropertyKey", "flowParseObjectTypeIndexer", "isStatic", "static", "lookahead", "flowParseObjectTypeInternalSlot", "flowParseObjectTypeMethodish", "startNodeAt", "flowParseFunctionTypeParam", "flowParseObjectTypeCallProperty", "nodeStart", "callProperties", "properties", "indexers", "internalSlots", "endDelim", "exact", "inexact", "protoStartLoc", "inexactStartLoc", "propOrInexact", "flowParseObjectTypeProperty", "flowObjectTypeSemicolon", "out", "isInexactToken", "proto", "flowCheckGetterSetterParams", "property", "paramCount", "node2", "qualification", "flowParseGenericType", "flowParseTypeofType", "flowParsePrimaryType", "flowParseTupleType", "first", "lh", "isThis", "reinterpretTypeAsFunctionTypeParam", "flowIdentToTypeAnnotation", "isGroupedType", "parseLiteralAtNode", "createIdentifier", "flowParsePostfixType", "seenOptionalIndexedAccess", "canInsertSemicolon", "elementType", "objectType", "indexType", "flowParsePrefixType", "flowParseAnonFunctionWithoutParens", "param", "flowParseIntersectionType", "flowParseUnionType", "allowPrimitiveOverride", "typeCastToParameter", "allowExpressionBody", "forwardNoArrowParamsConversionAt", "parseFunctionBodyAndFinish", "parseStatementLike", "flowParseEnumDeclaration", "parseExpressionStatement", "expr", "shouldParseExportDeclaration", "containsEsc", "isExportDefaultSpecifier", "parseExportDefaultExpression", "parseConditional", "maybeInArrowParameters", "nextCh", "lookaheadCharCode", "setOptionalParametersError", "originalNoArrowAt", "noArrowAt", "consequent", "failed", "tryParseConditionalConsequent", "valid", "invalid", "getArrowLikeExpressions", "alternate", "parseMaybeAssign", "noArrowParamsConversionAt", "parseMaybeAssignAllowIn", "disallowInvalid", "stack", "arrows", "finishArrowValidation", "every", "_node$extra", "toAssignableList", "trailingCommaLoc", "checkParams", "includes", "offsetToSourcePos", "parseParenItem", "newNode", "typeCastNode", "assertModuleNodeAllowed", "parseExportDeclaration", "declarationNode", "parseExportSpecifiers", "parseExportFrom", "eatExportStar", "maybeParseExportNamespaceSpecifier", "hasNamespace", "parseClassId", "isStatement", "optionalId", "parseClassMember", "classBody", "member", "parseClassMemberFromModifier", "isIterator", "readIterator", "readWord1", "fullWord", "curPosition", "getTokenFromCode", "input", "charCodeAt", "finishOp", "left", "exprList", "toReferencedList", "isParenthesizedExpr", "_expr$extra", "parseArrayLike", "close", "isTuple", "elements", "isParenthesized", "isClassMethod", "isClassProperty", "isNonstaticConstructor", "pushClassMethod", "allowsDirectSuper", "isThisParam", "pushClassPrivateMethod", "parseClassSuper", "superTypeParameters", "implemented", "checkGetterSetterParams", "parsePropertyNamePrefixOperator", "parseObjPropValue", "isAccessor", "parseFunctionParamType", "parseMaybeDefault", "checkImportReflection", "module", "parseImportSpecifierLocal", "specifier", "local", "finishImportSpecifier", "isPotentialImportPhase", "isExport", "ch", "applyImportPhase", "phase", "parseImportSpecifier", "importedIsString", "isInTypeOnlyImport", "isMaybeTypeOnly", "firstIdent", "imported", "specifierTypeKind", "isLookaheadContextual", "as_ident", "specifierIsTypeImport", "checkReservedWord", "parseBindingAtom", "parseFunctionParams", "parseVarId", "decl", "parseAsyncArrowFromCallExpression", "call", "shouldParseAsyncArrow", "afterLeftParse", "_jsx", "jsx", "tryParse", "currentContext", "_jsx2", "_jsx3", "abort", "_arrowExpression$extr", "arrowExpression", "maybeUnwrapTypeCastExpression", "aborted", "async", "failState", "thrown", "parseArrow", "shouldParseArrow", "setArrowFunctionParameters", "allowDuplicates", "isArrowFunction", "strictModeChanged", "parseParenAndDistinguishExpression", "canBeArrow", "sourceToOffsetPos", "parseSubscripts", "noCalls", "parseCallExpressionArguments", "parseAsyncArrowWithTypeParameters", "parseSubscript", "subscriptState", "isLookaheadToken_lt", "stop", "typeArguments", "parseNewCallee", "targs", "parseArrowExpression", "readToken_mult_modulo", "hasFlowComment", "nextToken", "readToken_pipe_amp", "parseTopLevel", "program", "fileNode", "skipBlockComment", "skipFlowComment", "hasFlowCommentCompletion", "commentSkip", "shiftToFirstNonWhiteSpace", "ch2", "ch3", "slice", "indexOf", "flowEnumErrorBooleanMemberNotInitialized", "flowEnumErrorInvalidMemberInitializer", "enumContext", "flowEnumErrorNumberMemberNotInitialized", "flowEnumErrorStringMemberInconsistentlyInitialized", "flowEnumMemberInit", "endOfInit", "literal", "flowEnumMemberRaw", "init", "flowEnumCheckExplicitTypeMismatch", "expectedType", "flowEnumMembers", "seenNames", "members", "booleanMembers", "numberMembers", "stringMembers", "defaultedMembers", "hasUnknownMembers", "memberNode", "toUpperCase", "flowEnumStringMembers", "initializedMembers", "flowEnumParseExplicitType", "flowEnumBody", "nameLoc", "empty", "boolsLen", "numsLen", "strsLen", "defaultedLen", "jsxParseOpeningElementAfterName", "nextTokenStart", "afterNext", "readToken_lt", "readToken_gt", "entities", "__proto__", "quot", "amp", "apos", "nbsp", "iexcl", "cent", "pound", "curren", "yen", "brvbar", "sect", "uml", "copy", "ordf", "laquo", "not", "shy", "reg", "macr", "deg", "plusmn", "sup2", "sup3", "acute", "micro", "para", "middot", "cedil", "sup1", "ordm", "raquo", "frac14", "frac12", "frac34", "iquest", "Agrave", "Aacute", "Acirc", "Atilde", "Auml", "Aring", "AElig", "Ccedil", "Egrave", "Eacute", "Ecirc", "Euml", "Igrave", "Iacute", "Icirc", "Iuml", "ETH", "Ntilde", "Ograve", "Oacute", "Ocirc", "Otilde", "Ouml", "times", "Oslash", "Ugrave", "Uacute", "Ucirc", "Uuml", "Yacute", "THORN", "szlig", "agrave", "aacute", "acirc", "atilde", "auml", "aring", "aelig", "ccedil", "egrave", "eacute", "ecirc", "euml", "igrave", "iacute", "icirc", "iuml", "eth", "ntilde", "ograve", "oacute", "ocirc", "otilde", "ouml", "divide", "oslash", "ugrave", "uacute", "ucirc", "uuml", "yacute", "thorn", "yuml", "OElig", "oelig", "Scaron", "scaron", "Yuml", "fnof", "circ", "Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa", "Lambda", "Mu", "Nu", "Xi", "Omicron", "Pi", "Rho", "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega", "alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta", "iota", "kappa", "lambda", "mu", "nu", "xi", "omicron", "pi", "rho", "sigmaf", "sigma", "tau", "upsilon", "phi", "chi", "psi", "omega", "thetasym", "upsih", "piv", "ensp", "emsp", "thinsp", "zwnj", "zwj", "lrm", "rlm", "ndash", "mdash", "lsquo", "rsquo", "sbquo", "ldquo", "rdquo", "bdquo", "dagger", "Dagger", "bull", "hellip", "permil", "prime", "Prime", "lsaquo", "rsaquo", "oline", "frasl", "euro", "image", "weierp", "real", "trade", "alefsym", "larr", "uarr", "rarr", "darr", "harr", "crarr", "lArr", "uArr", "rArr", "dArr", "hArr", "forall", "part", "exist", "nabla", "isin", "notin", "ni", "prod", "sum", "minus", "lowast", "radic", "infin", "ang", "and", "or", "cap", "cup", "int", "there4", "sim", "cong", "asymp", "ne", "equiv", "le", "ge", "sub", "sup", "nsub", "sube", "supe", "oplus", "otimes", "perp", "sdot", "lceil", "rceil", "lfloor", "rfloor", "lang", "rang", "loz", "spades", "clubs", "hearts", "diams", "lineBreak", "lineBreakG", "isNewLine", "hasNewLine", "skipWhiteSpace", "skipWhiteSpaceInLine", "isWhitespace", "JsxErrors", "AttributeIsEmpty", "MissingClosingTagElement", "openingTagName", "MissingClosingTagFragment", "UnexpectedSequenceExpression", "HTMLEntity", "UnsupportedJsxValue", "UnterminatedJsxContent", "UnwrappedAdjacentJSXElements", "isFragment", "getQualifiedJSXName", "namespace", "JSXParserMixin", "jsxReadToken", "chunkStart", "canStartJSXElement", "jsxReadEntity", "jsxReadNewLine", "normalizeCRLF", "curLine", "lineStart", "jsxReadString", "quote", "startPos", "codePointAtPos", "codePoint", "readInt", "count", "desc", "entity", "XHTMLEntities", "jsxReadWord", "jsxParseIdentifier", "jsxParseNamespacedName", "jsxParseElementName", "jsxParseAttributeValue", "setContext", "jsxParseExpressionContainer", "jsxParseEmptyExpression", "jsxParseSpreadChild", "previousContext", "jsxParseAttribute", "jsxParseOpeningElementAt", "selfClosing", "jsxParseClosingElementAt", "jsxParseElementAt", "children", "openingElement", "closingElement", "contents", "openingFragment", "closingFragment", "jsxParseElement", "newContext", "replaceToken", "skipSpace", "prevType", "splice", "TypeScriptScope", "tsNames", "TypeScriptScopeHandler", "importsStack", "hasImport", "allowShadow", "len", "isConst", "wasConst", "ProductionParameterHandler", "stacks", "currentFlags", "hasAwait", "hasYield", "hasReturn", "hasIn", "functionFlags", "BaseParser", "sawUnambiguousESM", "ambiguousScriptDifferentAst", "sourcePos", "offsetPos", "pluginConfig", "pluginName", "pluginOptions", "actualOptions", "plugin", "_this$plugins$get", "setTrailingComments", "comments", "trailingComments", "unshift", "setLeadingComments", "leadingComments", "setInnerComments", "innerComments", "adjustInnerComments", "commentWS", "lastElement", "CommentsParser", "commentsLen", "processComment", "commentStack", "commentStackLength", "lastCommentWS", "leadingNode", "commentEnd", "containingNode", "finalizeComment", "trailingNode", "_node$options", "commentStart", "finalizeRemainingComments", "resetPreviousNodeTrailingComments", "takeSurroundingComments", "State", "errors", "potentialArrowAt", "topicContext", "maxNumOfResolvableTopics", "maxTopicIndex", "labels", "ct", "firstInvalidTemplateEscapePos", "strictErrors", "tokensLength", "v", "isAmbientContext", "inAbstractClass", "inDisallowConditionalTypesContext", "soloAwait", "inFSharpPipelineDirectBody", "hasTopLevelAwait", "isDigit", "forbiddenNumericSeparatorSiblings", "decBinOct", "hex", "isAllowedNumericSeparatorSibling", "bin", "oct", "dec", "readStringContents", "initialPos", "initialLineStart", "initialCurLine", "firstInvalidLoc", "unterminated", "isStringEnd", "res", "readEscapedChar", "str", "containsInvalid", "inTemplate", "throwOnInvalid", "readHexChar", "readCodePoint", "strictNumericEscape", "octalStr", "octal", "parseInt", "forceLen", "n", "invalidEscapeSequence", "allowNumSeparator", "bailOnError", "forbiddenSiblings", "isAllowedSibling", "total", "e", "Infinity", "prev", "numericSeparatorInEscapeSequence", "Number", "isNaN", "unexpectedNumericSeparator", "_isDigit", "invalidDigit", "invalidCodePoint", "buildPosition", "VALID_REGEX_FLAGS", "Token", "Tokenizer", "isLookahead", "errorHandlers_readInt", "errorBuilder", "errorHandlers_readCodePoint", "errorHandlers_readStringContents_string", "recordStrictModeErrors", "errorHandlers_readStringContents_template", "pushToken", "checkKeywordEscapes", "createLookaheadState", "old", "curr", "nextTokenStartSince", "lastIndex", "lookaheadCharCodeSince", "nextTokenInLineStart", "nextTokenInLineStartSince", "lookaheadInLineCharCode", "cp", "trail", "setStrict", "toParseError", "clear", "skipLineComment", "startSkip", "spaceStart", "loop", "commentWhitespace", "readToken_numberSign", "readToken_interpreter", "nextPos", "expectPlugin", "readToken_dot", "readNumber", "readToken_slash", "width", "readToken_caret", "proposal", "topicToken", "lookaheadCh", "codePointAt", "readToken_atSign", "readToken_plus_min", "size", "readToken_eq_excl", "readToken_question", "readTemplateToken", "readRadixNumber", "readString", "readWord", "readRegexp", "escaped", "content", "mods", "char", "isBigInt", "replace", "startsWithDot", "isFloat", "hasExponent", "isOctal", "hasLeadingZero", "integer", "underscorePos", "isDecimal", "parseFloat", "readTemplateContinuation", "opening", "firstCode", "escStart", "identifierCheck", "esc", "keywordTypes", "raiseOverwrite", "expectOnePlugin", "pluginNames", "some", "ClassScope", "privateNames", "loneAccessors", "undefinedPrivateNames", "ClassScopeHandler", "oldClassScope", "from", "declarePrivateName", "redefined", "accessor", "oldStatic", "newStatic", "oldKind", "newKind", "ExpressionScope", "canBeArrowParameterDeclaration", "isCertainlyParameterDeclaration", "ArrowHeadParsingScope", "declarationErrors", "recordDeclarationError", "ParsingErrorClass", "clearDeclarationError", "iterateErrors", "iterator", "ExpressionScopeHandler", "recordParameterInitializerError", "origin", "recordArrowParameterBindingError", "recordAsyncArrowParametersError", "validateAsPattern", "newParameterDeclarationScope", "newArrowHeadScope", "newAsyncArrowScope", "newExpressionScope", "UtilParser", "addExtra", "isUnparsedContextual", "nameStart", "startsWith", "hasPrecedingLineBreak", "hasFollowingLineBreak", "isLineTerminator", "allowAsi", "fn", "oldState", "abortSignal", "checkExpressionErrors", "andThrow", "shorthandAssignLoc", "doubleProtoLoc", "privateKeyLoc", "optionalParametersLoc", "voidPatternLoc", "hasErrors", "isLiteralPropertyName", "initializeScopes", "oldLabels", "oldExportedIdentifiers", "exportedIdentifiers", "oldInModule", "oldScope", "oldProdParam", "prodParam", "oldExpressionScope", "expressionScope", "enterInitialScopes", "paramFlags", "isCommonJS", "scopeFlags", "checkDestructuringPrivate", "ExpressionErrors", "Node", "NodePrototype", "__clone", "NodeUtils", "locationNode", "unwrapParenthesizedExpression", "LValParser", "_node$extra3", "last", "_node$extra2", "operator", "arg", "checkToRestConversion", "elt", "toAssignableListItem", "element", "toReferencedListDeep", "parseSpread", "parseRestBinding", "parseBindingList", "ParseBindingListFlags", "parseObjectLike", "parseVoidPattern", "closeCharCode", "allowEmpty", "elts", "checkCommaAfterRest", "parseDecorator", "parseBindingElement", "parseBindingRestProperty", "parseBindingProperty", "parsePropertyName", "checkLVal", "checkClashes", "hasParenthesizedAncestor", "_expression$extra", "checkIdentifier", "unwrappedExpression", "validity", "ParseErrorClass", "isParenthesizedExpression", "nextAncestor", "child", "declareNameFromIdentifier", "identifier", "allowPattern", "keywordAndTSRelationalOperator", "nonNull", "x", "assert", "TSErrors", "AbstractMethodHasImplementation", "methodName", "AbstractPropertyHasInitializer", "propertyName", "AccessorCannotBeOptional", "ClassMethodHasDeclare", "ClassMethodHasReadonly", "ConstructorHasTypeParameters", "DeclareAccessor", "DeclareClassFieldHasInitializer", "DeclareFunctionHasImplementation", "DuplicateAccessibilityModifier", "modifier", "DuplicateModifier", "EmptyHeritageClauseType", "EmptyTypeArguments", "EmptyTypeParameters", "ExpectedAmbientAfterExportDeclare", "ImportAliasHasImportType", "IncompatibleModifiers", "modifiers", "IndexSignatureHasAbstract", "IndexSignatureHasAccessibility", "IndexSignatureHasDeclare", "IndexSignatureHasOverride", "IndexSignatureHasStatic", "InitializerNotAllowedInAmbientContext", "InvalidHeritageClauseType", "InvalidModifierOnAwaitUsingDeclaration", "InvalidModifierOnTypeMember", "InvalidModifierOnTypeParameter", "InvalidModifierOnTypeParameterPositions", "InvalidModifierOnUsingDeclaration", "InvalidModifiersOrder", "orderedModifiers", "InvalidPropertyAccessAfterInstantiationExpression", "InvalidTupleMemberLabel", "MissingInterfaceName", "NonAbstractClassHasAbstractMethod", "NonClassMethodPropertyHasAbstractModifier", "OptionalTypeBeforeRequired", "OverrideNotInSubClass", "PrivateElementHasAbstract", "PrivateElementHasAccessibility", "ReadonlyForMethodSignature", "ReservedArrowTypeParam", "ReservedTypeAssertion", "SingleTypeParameterWithoutTrailingComma", "typeParameterName", "StaticBlockCannotHaveModifier", "TupleOptionalAfterType", "TypeAnnotationAfterAssign", "TypeImportCannotSpecifyDefaultAndNamed", "TypeModifierIsUsedInTypeExports", "TypeModifierIsUsedInTypeImports", "UnexpectedParameterModifier", "UnexpectedReadonly", "UnexpectedTypeAnnotation", "UnexpectedTypeCastInParameter", "UnsupportedImportTypeArgument", "UnsupportedParameterPropertyKind", "UnsupportedSignatureParameterKind", "UsingDeclarationInAmbientContext", "keywordTypeFromName", "tsIsAccessModifier", "tsIsVarianceAnnotations", "typescript", "TypeScriptParserMixin", "tsParseInOutModifiers", "tsParseModifiers", "bind", "allowedModifiers", "disallowedModifiers", "errorTemplate", "tsParseConstModifier", "tsParseInOutConstModifiers", "tsIsIdentifier", "tsTokenCanFollowModifier", "tsNextTokenOnSameLineAndCanFollowModifier", "tsNextTokenCanFollowModifier", "tsParseModifier", "stopOnStartOfClassStaticBlock", "hasSeenStaticModifier", "tsIsStartOfStaticBlocks", "tsTryParse", "modified", "enforceOrder", "before", "after", "incompatible", "mod1", "mod2", "accessibility", "hasOwnProperty", "tsIsListTerminator", "tsParseList", "parseElement", "tsParseDelimitedList", "refTrailingCommaPos", "tsParseDelimitedListWorker", "expectSuccess", "trailingCommaPos", "tsParseBracketedList", "bracket", "skipFirstToken", "tsParseImportType", "tsParseImportTypeOptions", "qualifier", "tsParseEntityName", "tsParseEntityNameFlags", "tsParseTypeArguments", "withProperty", "tsParseImportTypeWithPropertyValue", "parsePropertyDefinition", "tsParseTypeReference", "typeName", "tsParseThisTypePredicate", "lhs", "parameterName", "tsParseTypeAnnotation", "asserts", "tsParseThisTypeNode", "tsParseTypeQuery", "exprName", "tsParseTypeParameter", "parseModifiers", "tsParseTypeParameterName", "constraint", "tsEatThenParseType", "tsTryParseTypeParameters", "tsParseTypeParameters", "tsFillSignature", "returnToken", "signature", "returnTokenRequired", "paramsKey", "returnTypeKey", "tsParseBindingListForSignature", "tsParseTypeOrTypePredicateAnnotation", "tsParseTypeMemberSemicolon", "tsParseSignatureMember", "tsIsUnambiguouslyIndexSignature", "tsTryParseIndexSignature", "tsLookAhead", "parameters", "tsTryParseTypeAnnotation", "tsParsePropertyOrMethodSignature", "readonly", "firstParameter", "tsParseTypeMember", "idx", "tsParseTypeLiteral", "tsParseObjectTypeMembers", "tsIsStartOfMappedType", "tsParseMappedType", "tsExpectThenParseType", "nameType", "tsParseType", "tsTryParseType", "tsParseTupleType", "elementTypes", "tsParseTupleElementType", "seenOptionalElement", "elementNode", "restStartLoc", "labeled", "isWord", "chAfterWord", "wordName", "typeOrLabel", "tsParseNonArrayType", "labeledNode", "optionalTypeNode", "restNode", "tsParseParenthesizedType", "tsParseFunctionOrConstructorType", "tsInAllowConditionalTypesContext", "tsParseLiteralTypeNode", "tsParseTemplateLiteralType", "parseTemplate", "parseTemplateSubstitution", "tsParseThisTypeOrThisTypePredicate", "thisKeyword", "parseMaybeUnary", "nodeType", "tsParseArrayTypeOrHigher", "tsParseTypeOperator", "tsParseTypeOperatorOrHigher", "tsCheckTypeAnnotationForReadOnly", "tsParseInferType", "tsParseConstraintForInferType", "tsInDisallowConditionalTypesContext", "isTypeOperator", "tsParseUnionOrIntersectionType", "parseConstituentType", "hasLeadingOperator", "tsParseIntersectionTypeOrHigher", "tsParseUnionTypeOrHigher", "tsIsStartOfFunctionType", "tsIsUnambiguouslyStartOfFunctionType", "tsSkipParameterStart", "previousErrorCount", "_unused2", "tsInType", "t", "tsParseTypePredicateAsserts", "thisTypePredicate", "typePredicateVariable", "tsParseTypePredicatePrefix", "tsTryParseTypeOrTypePredicateAnnotation", "eatColon", "tsParseNonConditionalType", "checkType", "extendsType", "trueType", "falseType", "isAbstractConstructorSignature", "tsParseTypeAssertion", "tsParseHeritageClause", "originalStartLoc", "delimitedList", "tsParseInterfaceDeclaration", "tsParseTypeAliasDeclaration", "tsInTopLevelContext", "oldInDisallowConditionalTypesContext", "tsNextThenParseType", "tsParseEnumMember", "initializer", "tsParseEnumDeclaration", "tsParseEnumBody", "tsParseModuleBlock", "parseBlockOrModuleBlockBody", "tsParseModuleOrNamespaceDeclaration", "nested", "inner", "tsParseAmbientExternalModuleDeclaration", "global", "tsParseImportEqualsDeclaration", "maybeDefaultIdentifier", "moduleReference", "tsParseModuleReference", "tsIsExternalModuleReference", "tsParseExternalModuleReference", "f", "tsTryParseAndCatch", "tsTryParseDeclare", "startType", "tsInAmbientContext", "parseFunctionStatement", "parseClass", "parseVarStatement", "isUsing", "isAwaitUsing", "tsParseDeclaration", "tsTryParseExportDeclaration", "tsCheckLineTerminator", "tsParseAbstractDeclaration", "tsTryParseGenericAsyncArrowFunction", "oldMaybeInArrowParameters", "tsParseTypeArgumentsInExpression", "tsIsDeclarationStart", "override", "pp", "parameter", "isSimpleParameter", "tsDisallowOptionalPattern", "bodilessType", "registerFunctionStatementId", "tsCheckForInvalidTypeCasts", "items", "isInParens", "nonNullExpression", "isOptionalCall", "missingParenErrorLoc", "atPossibleAsyncArrow", "asyncArrowFn", "parseTaggedTemplateExpression", "tokenType", "_callee$extra", "parseExprOp", "leftStartLoc", "minPrec", "isSatisfies", "checkKeywords", "checkDuplicateExports", "importNode", "parseMaybeImportPhase", "parseImportSpecifiersAndAfter", "nodeImportEquals", "isAbstractClass", "cls", "allowMissingInitializer", "declarations", "isValidAmbientConstInitializer", "parseStatementContent", "nextTokenIsIdentifierAndNotTSRelationalOperatorOnSameLine", "nextTokenIsIdentifierOrStringLiteralOnSameLine", "nextTokenIsIdentifierOnSameLine", "parseAccessModifier", "tsHasSomeModifiers", "callParseClassMemberWithIsStatic", "parseClassStaticBlock", "parseClassMemberWithIsStatic", "hadSuperClass", "parsePostMemberNameModifiers", "methodOrProp", "isDeclare", "isIdentifier", "parseClassPropertyAnnotation", "definite", "declareClassPrivateMethodInScope", "_typeCast", "_typeCast2", "typeCast", "_typeParameters", "reportReservedArrowTypeParam", "trailingComma", "sawUnary", "toAssignableParenthesizedExpression", "parseMaybeDecoratorArguments", "canHaveLeadingDecorator", "getGetterSetterExpectedParamCount", "baseCount", "firstParam", "hasContextParam", "parseCatchClauseParam", "oldIsAmbientContext", "oldStrict", "oldInAbstractClass", "maybeTakeDecorators", "hasEstreePlugin", "methodFn", "shouldParseAsAmbientContext", "getExpression", "parseExportSpecifier", "isString", "isInTypeExport", "parseTypeOnlyImportExportSpecifier", "isImport", "isInTypeOnlyImportExport", "leftOfAsKey", "rightOfAsKey", "leftOfAs", "rightOfAs", "hasTypeSpecifier", "canParseAsKeyword", "firstAs", "secondAs", "parseModuleExportName", "kindKey", "_node$directive", "_node$decorators", "_node$optional", "_node$typeAnnotation", "_node$accessibility", "_node$decorators2", "_node$override", "_node$readonly", "_node$static", "_node$declare", "_node$returnType", "_node$typeParameters", "_node$optional2", "_node$optional3", "_node$accessibility2", "_node$readonly2", "_node$static2", "_node$declare2", "_node$definite", "_node$readonly3", "_node$typeAnnotation2", "_node$accessibility3", "_node$decorators3", "_node$override2", "_node$optional4", "_node$id", "_node$abstract", "_node$declare3", "_node$decorators4", "_node$implements", "_node$superTypeArgume", "_node$typeParameters2", "_node$declare4", "_node$definite2", "_node$const", "_node$declare5", "_node$computed", "_node$qualifier", "_node$declare6", "_node$extends", "_node$optional5", "_node$readonly4", "_node$declare7", "_node$global", "_node$const2", "_node$in", "_node$out", "superTypeArguments", "in", "chStartsBindingIdentifierAndNotRelationalOperator", "endCh", "chStartsBindingIdentifier", "isPossiblyLiteralEnum", "expressions", "isUncomputedMemberExpressionChain", "isNumber", "isNegativeNumber", "PlaceholderErrors", "ClassNameIsRequired", "UnexpectedSpace", "placeholders", "PlaceholdersParserMixin", "parsePlaceholder", "expectedNode", "assertNoSpace", "finishPlaceholder", "verifyBreakContinue", "isBreak", "parseStatementOrSloppyAnnexBFunctionDeclaration", "stmtPlaceholder", "parseBlock", "createNewLexicalScope", "parseFunctionId", "requireId", "parseClassBody", "maybeParseExportDefaultSpecifier", "_specifiers", "checkExport", "filter", "hasStarImport", "maybeParseStarImportSpecifier", "parseNamedImportSpecifiers", "parseImportSource", "v8intrinsic", "V8IntrinsicMixin", "parseV8Intrinsic", "v8IntrinsicStartLoc", "parseIdentifierName", "PIPELINE_PROPOSALS", "TOPIC_TOKENS", "validatePlugins", "pluginsMap", "decoratorsBeforeExport", "allowCallParenthesized", "_pluginsMap$get2", "proposalList", "p", "tokenList", "_pluginsMap$get", "syntaxType", "moduleAttributesVersionPluginOption", "version", "deprecatedAssertSyntax", "RECORD_AND_TUPLE_SYNTAX_TYPES", "missingPlugins", "mixinPlugins", "mixinPluginNames", "ExpressionParser", "checkProto", "isRecord", "sawProto", "shouldExitDescending", "disallowIn", "disallowInAnd", "parseExpressionBase", "allowInAnd", "parseMaybeAssignDisallowIn", "isYield", "parseYield", "ownExpressionErrors", "parseMaybeConditional", "isAmbiguousPrefixOrIdentifier", "parseExprOps", "parseMaybeUnaryOrPrivate", "op", "prec", "checkPipelineAtInfixOperator", "logical", "coalesce", "parseExprOpRightExpr", "finishedNode", "nextOp", "withTopicBindingContext", "parseHackPipeBody", "withSoloAwaitPermittingContext", "parseFSharpPipelineBody", "parseSmartPipelineBodyInStyle", "parseExprOpBaseRightExpr", "_body$extra", "requiredParentheses", "topicReferenceWasUsedInCurrentContext", "checkExponentialAfterUnary", "isAwait", "recordAwaitIfAllowed", "parseAwait", "update", "isDelete", "parseUpdate", "updateExpressionNode", "parseExprSubscripts", "maybeAsyncArrow", "parseBind", "parseCoverCallAndAsyncArrowHead", "parseNoCallExpr", "tag", "quasi", "allowPlaceholder", "nodeForExtra", "oldInFSharpPipelineDirectBody", "addTrailingCommaExtraToNode", "parseExprListItem", "_call$extra", "parseSuper", "parseImportMetaPropertyOrPhaseCall", "parseImportCall", "parseDo", "parseFunctionOrFunctionSent", "parseDecorators", "parseNewOrNewTarget", "parseTopicReferenceThenEqualsSign", "parseTopicReference", "pipeProposal", "parseModuleExpression", "parseAsyncFunctionExpression", "parseAsyncArrowUnaryFunction", "topicTokenType", "topicTokenValue", "finishTopicReference", "testTopicReferenceConfiguration", "topicReferenceIsAllowedInCurrentContext", "registerTopicReference", "meta", "parseMetaProperty", "parseFunction", "isSource", "createIdentifierAt", "innerStartLoc", "spreadStartLoc", "optionalCommaStartLoc", "spreadNodeStartLoc", "parseMaybeAssignAllowInOrVoidPattern", "innerEndLoc", "arrowNode", "wrapParenthesis", "parenExpression", "metaProp", "parseNew", "parseExprList", "parseTemplateElement", "isTagged", "elemStart", "elem", "isTail", "endOffset", "elemEnd", "cooked", "tail", "curElt", "quasis", "substitutions", "maybeAsyncOrAccessorProp", "keyName", "_params", "parseObjectMethod", "finishedProp", "generator", "isExpression", "hasStrictModeDirective", "nonSimple", "isSimpleParamList", "formalParameters", "reservedTest", "isAwaitAllowed", "delegating", "delegate", "childExpr", "isSimpleReference", "checkSmartPipeTopicBodyEarlyErrors", "callback", "outerContextTopicState", "withSmartMixTopicForbiddingContext", "outerContextSoloAwaitState", "prodParamToSet", "ParamKind", "prodParamToClear", "ret", "revertScopes", "parseProgram", "nextCode", "loopLabel", "switchLabel", "loneSurrogate", "keywordRelationalOperator", "babel7CompatTokens", "hashEndPos", "hashEndLoc", "backquoteEnd", "backquoteEndLoc", "startToken", "templateValue", "templateElementEnd", "templateElementEndLoc", "endToken", "StatementParser", "interpreter", "parseInterpreterDirective", "finishedProgram", "stmtToDirective", "directiveLiteral", "hasFollowingBindingAtom", "isForUsing", "nextCharAfterOf", "chStartsBindingPattern", "hasInLineFollowingBindingIdentifierOrBrace", "allowsUsing", "parseModuleItem", "ParseStatementFlag", "parseStatementListItem", "allowLabeledFunction", "parseStatement", "allowDeclaration", "allowFunctionDeclaration", "parseBreakContinueStatement", "parseDebuggerStatement", "parseDoWhileStatement", "parseForStatement", "parseIfStatement", "parseReturnStatement", "parseSwitchStatement", "parseThrowStatement", "parseTryStatement", "parseWhileStatement", "parseWithStatement", "parseEmptyStatement", "nextTokenCharCode", "isAsyncFunction", "maybeName", "parseLabeledStatement", "decoratorsEnabledBeforeExport", "maybeDecorators", "classNode", "exportNode", "_classNode$decorators", "allowExport", "paramsStartLoc", "lab", "parseHeaderExpression", "awaitAt", "parseFor", "startsWithLet", "startsWithAwaitUsing", "starsWithUsingDeclaration", "isLetOrUsing", "initNode", "parseVar", "isForIn", "parseForIn", "startsWithAsync", "isForOf", "isHangingDeclaration", "ParseFunctionFlag", "discriminant", "cases", "cur", "sawDefault", "isCase", "block", "handler", "clause", "finalizer", "statementStart", "parsedNonDirective", "await", "isFor", "hangingDeclaration", "isDeclaration", "hadConstructor", "publicMethod", "privateMethod", "publicProp", "privateProp", "accessorProp", "publicMember", "parseClassElementName", "maybeContextualKw", "isPrivate", "maybeQuestionTokenStartLoc", "pushClassPrivateProperty", "pushClassProperty", "pushClassAccessorProperty", "_member$decorators", "parseInitializer", "hasDefault", "parseAfterDefault", "hasStar", "parseAfterNamespace", "isFromRequired", "hasSpecifiers", "maybeParseExportNamedSpecifiers", "hasDeclaration", "maybeParseExportDeclaration", "_node2$declaration", "_ref$specifiers", "isTypeExport", "assertions", "nextChar", "hasFrom", "nextAfterFrom", "maybeParseImportAttributes", "checkJSONModuleImport", "checkNames", "isDefault", "isFrom", "_node$specifiers", "_declaration$extra", "nodes", "surrogate", "isJSONModuleImport", "singleBindingType", "_node$assertions", "nonDefaultNamedSpecifier", "find", "phaseIdentifier", "phaseIdentifierName", "isImportPhase", "isPrecedingIdImportPhase", "parseImportSourceAndAttributes", "maybeParseDefaultImportSpecifier", "parseNext", "_node$specifiers2", "parseImportAttributes", "attrs", "attrNames", "parseModuleAttributes", "useWith", "importSpecifier", "Parser", "normalizedOptions", "_options", "getParser", "ast", "moduleError", "generateExportedTokenTypes", "internalTokenTypes", "tokTypes", "getParserClass", "parserClassCache", "pluginList", "os", "path", "stdFs", "crypto", "b", "import_path", "toPath", "import_path", "import_fs", "build", "path", "fs", "build", "node", "run", "resolve", "error", "cwd", "process", "fsPromises", "path", "import_node_process", "import_node_path", "import_node_fs", "toPath", "import_node_util", "import_node_child_process", "import_node_url", "init_node", "execFileCallback", "path", "toPath", "import_node_path", "init_node", "exports", "CommanderError", "code", "InvalidArgumentError", "exports", "InvalidArgumentError", "Argument", "description", "exports", "Help", "cmd", "b", "description", "exports", "InvalidArgumentError", "Option", "description", "hide", "str", "exports", "b", "exports", "EventEmitter", "childProcess", "path", "fs", "process", "Argument", "CommanderError", "Help", "Option", "Command", "description", "code", "target", "config", "regex", "signals", "unknown", "option", "getErrorMessage", "context", "error", "hasColors", "exports", "Argument", "Command", "CommanderError", "InvalidArgumentError", "Help", "Option", "description", "import_index", "init_esm", "commander", "exports", "module", "fetch", "init", "retryDelay", "resolve", "error", "version", "init_version", "init_errors", "import_node_async_hooks", "init_errors", "setState", "import_node_async_hooks", "isUnicodeSupported", "process", "import_node_process", "import_node_util", "isPlainObject", "proto", "spinner", "exports", "module", "cliWidth", "exports", "module", "stringWidth", "string", "segmenter", "emojiRegex", "init_string_width", "assembleStyles", "styles", "wrapAnsi16", "wrapAnsi256", "wrapAnsi16m", "ANSI_BACKGROUND_OFFSET", "red", "green", "blue", "integer", "code", "modifierNames", "foregroundColorNames", "backgroundColorNames", "colorNames", "ansiStyles", "ansi_styles_default", "init_ansi_styles", "string", "init_string_width", "init_ansi_styles", "code", "url", "stringWidth", "ansi_styles_default", "cliWidth", "init_utils", "init_utils", "require_lib", "exports", "module", "MuteStream", "init_dist", "import_node_util", "init_utils", "init_dist", "resolve", "config", "context", "MuteStream", "resolve", "code", "signal", "error", "readline", "import_node_async_hooks", "init_errors", "import_node_util", "init_dist", "init_errors", "dist_default", "init_dist", "config", "validate", "value", "required", "isValid", "error", "name", "import_node_util", "dist_default", "init_dist", "config", "item", "description", "isSelectable", "normalizeChoices", "import_node_util", "dist_default", "init_dist", "config", "validate", "error", "isValid", "description", "header", "dist_default", "init_dist", "config", "error", "init_dist", "dist_default", "data", "init_utils", "removeTrailingSlash", "fetch", "Request", "init", "request", "error", "url", "k", "final", "joiner", "init_dist", "path", "nodeFs", "import_path", "path", "config", "version", "uuid", "crypto", "import_path", "import_crypto", "init_utils", "platform", "os", "k", "import_node_os", "init_esm", "hostname", "debug", "port", "resolve", "import_node_util", "init_esm", "import_node_util", "debug", "esm_default", "init_esm", "port", "version", "init_utils", "init_esm", "request", "run", "error", "http", "resolve", "require_constants", "exports", "module", "exports", "errors", "require_utils", "exports", "module", "k", "self", "path", "err", "fd", "target", "recursive", "cb", "dir", "list", "date", "time", "exports", "module", "path", "fs", "exports", "module", "data", "exports", "module", "exports", "module", "_size", "data", "exports", "module", "_size", "data", "b", "exports", "exports", "module", "zlib", "data", "exports", "module", "version", "zlib", "data", "exports", "module", "b", "config", "k", "data", "header", "exports", "exports", "module", "Headers", "data", "error", "header", "exports", "module", "Headers", "b", "list", "subfolders", "exports", "module", "defaultOptions", "b", "join", "normalize", "sep", "data", "options", "self", "err", "resolve", "update", "target", "content", "fileAttr", "init_errors", "child_process", "version", "latestVersionWithBinary", "data", "ctx", "path", "url", "AdmZip", "config", "import_util", "import_path", "init_version", "init_errors", "init_utils", "version", "path", "uuid", "child_process", "auth", "code", "resolve", "esm_default", "error", "url", "deployment", "config", "import_path", "import_child_process", "import_crypto", "init_esm", "init_errors", "init_utils", "exports", "module", "path", "normalize", "exports", "module", "xs", "exports", "module", "b", "exports", "module", "target", "b", "k", "exports", "module", "path", "list", "b", "k", "minimatch", "Minimatch", "filter", "makeRe", "braceExpand", "debug", "set", "parse", "re", "self", "partial", "fl", "exports", "module", "parse", "compile", "path", "capture", "k", "optional", "re", "decode", "data", "options", "encode", "validate", "i", "exports", "module", "exports", "module", "exports", "lookup", "charset", "path", "extension", "exports", "module", "format", "parse", "exports", "module", "parse", "basename", "format", "string", "exports", "module", "path", "exports", "module", "b", "exports", "module", "code", "require_error", "exports", "module", "error", "code", "require_src", "exports", "module", "promisify", "path", "createHash", "createReadStream", "readdir", "url", "handlers", "resolve", "hash", "toPath", "target", "config", "headers", "mark", "b", "relative", "code", "request", "cwd", "deployment", "version", "request", "serveHandler", "init_utils", "project", "init_dashboard", "resource", "teamSlug", "team", "teamDashboardUrl", "b", "project", "path", "os", "platform", "version", "data", "target", "ctx", "fetch", "resolve", "findUp", "code", "error", "onError", "options", "url", "import_os", "import_path", "import_child_process", "init_utils", "init_esm", "init_version", "init_dist", "fetchRetryFactory", "path", "importPath", "build", "module", "error", "import_path", "init_external", "init_utils", "entryPoints", "build", "target", "node", "path", "entryPoints", "platform", "plugins", "build", "esbuild", "path", "error", "i", "cleanPath", "import_path", "fs", "path", "entryPoints", "platform", "error", "warning", "module", "version", "target", "parseAST", "node", "config", "import_path", "init_esm", "init_external", "exports", "module", "exports", "module", "fs", "path", "os", "crypto", "version", "parse", "error", "debug", "relative", "config", "config", "platform", "init_utils", "deployment", "config", "project", "dotenv", "init_utils", "error", "issue", "k", "path", "entryPoints", "version", "config", "project", "fetch", "data", "dashboardUrl", "deployment", "aiFiles", "nodeFs", "import_path", "import_fs", "init_version", "init_dashboard", "init_utils", "init_errors", "schema", "init", "import_util", "init_esm", "exports", "module", "exports", "module", "require_errors", "exports", "module", "InvalidArgumentError", "code", "data", "require_constants", "exports", "module", "header", "exports", "module", "code", "node", "require_util", "exports", "module", "assert", "net", "stringify", "InvalidArgumentError", "object", "url", "path", "getHostname", "idx", "isBuffer", "stream", "request", "err", "exports", "module", "exports", "module", "diagnosticsChannel", "util", "debugLog", "version", "error", "path", "address", "code", "exports", "module", "InvalidArgumentError", "assert", "isBuffer", "Request", "path", "reset", "header", "resume", "error", "request", "exports", "module", "InvalidArgumentError", "context", "resume", "data", "exports", "module", "EventEmitter", "target", "exports", "module", "InvalidArgumentError", "context", "resume", "data", "exports", "module", "InvalidArgumentError", "resolve", "data", "err", "exports", "module", "net", "assert", "util", "InvalidArgumentError", "tls", "connect", "hostname", "session", "require_utils", "exports", "require_constants", "exports", "k", "exports", "module", "Buffer", "exports", "module", "Buffer", "require_constants", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "assert", "data", "exports", "module", "assert", "url", "exports", "module", "exports", "module", "assert", "context", "keys", "b", "required", "require_util", "exports", "module", "zlib", "performance", "assert", "url", "code", "request", "object", "header", "isAborted", "target", "byteLength", "data", "list", "exports", "module", "FormData", "entry", "b", "exports", "module", "assert", "require_promise", "exports", "module", "resolve", "exports", "module", "util", "FormData", "assert", "object", "chunk", "value", "data", "exports", "module", "assert", "util", "InvalidArgumentError", "mod", "data", "request", "path", "reset", "header", "resolve", "exports", "module", "assert", "util", "InvalidArgumentError", "http2", "request", "duration", "error", "code", "path", "hostname", "headers", "header", "pipe", "resolve", "exports", "module", "assert", "net", "http", "util", "Request", "InvalidArgumentError", "Client", "url", "tls", "connect", "resume", "onError", "request", "resolve", "hostname", "ip", "err", "exports", "module", "data", "exports", "module", "client", "resolve", "exports", "module", "Client", "InvalidArgumentError", "util", "connect", "tls", "origin", "target", "error", "exports", "module", "InvalidArgumentError", "util", "b", "connect", "tls", "pool", "dispatcher", "exports", "module", "Client", "InvalidArgumentError", "util", "connect", "tls", "origin", "target", "error", "exports", "module", "InvalidArgumentError", "Client", "util", "Agent", "connect", "result", "exports", "module", "Buffer", "net", "InvalidArgumentError", "address", "error", "exports", "module", "EventEmitter", "Buffer", "InvalidArgumentError", "debuglog", "debug", "data", "request", "version", "address", "exports", "module", "URL", "tls", "InvalidArgumentError", "debuglog", "debug", "url", "resolve", "socket", "onError", "info", "exports", "module", "Agent", "InvalidArgumentError", "Client", "connect", "data", "resume", "path", "url", "origin", "protocol", "opts", "exports", "module", "Agent", "EnvHttpProxyAgent", "url", "hostname", "exports", "module", "assert", "context", "code", "exports", "module", "exports", "module", "InvalidArgumentError", "Client", "exports", "module", "assert", "Readable", "InvalidArgumentError", "util", "resume", "resolve", "consume", "exports", "module", "assert", "AsyncResource", "Readable", "InvalidArgumentError", "util", "context", "resume", "request", "resolve", "data", "exports", "module", "self", "exports", "module", "assert", "AsyncResource", "InvalidArgumentError", "util", "context", "resume", "res", "opaque", "resolve", "data", "exports", "module", "Readable", "assert", "AsyncResource", "InvalidArgumentError", "util", "resume", "context", "body", "exports", "module", "InvalidArgumentError", "AsyncResource", "assert", "util", "context", "resolve", "data", "exports", "module", "assert", "AsyncResource", "InvalidArgumentError", "util", "context", "connect", "resolve", "data", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "isPromise", "InvalidArgumentError", "clone", "mockDispatch", "path", "data", "removeTrailingSlash", "error", "aborted", "resume", "url", "exports", "module", "InvalidArgumentError", "data", "replyParameters", "newMockDispatch", "error", "exports", "module", "promisify", "Client", "InvalidArgumentError", "exports", "module", "InvalidArgumentError", "logs", "log", "url", "error", "number", "exports", "module", "promisify", "InvalidArgumentError", "exports", "module", "path", "exports", "module", "Agent", "InvalidArgumentError", "path", "result", "exports", "module", "InvalidArgumentError", "header", "crypto", "url", "exports", "module", "readFile", "dirname", "resolve", "setTimeout", "clearTimeout", "InvalidArgumentError", "url", "request", "hash", "path", "data", "error", "exports", "module", "Agent", "InvalidArgumentError", "error", "self", "context", "request", "url", "require_global", "exports", "module", "InvalidArgumentError", "Agent", "setGlobalDispatcher", "exports", "module", "assert", "exports", "module", "util", "assert", "InvalidArgumentError", "context", "path", "error", "header", "exports", "module", "exports", "module", "context", "exports", "module", "exports", "module", "InvalidArgumentError", "context", "exports", "module", "isIP", "lookup", "InvalidArgumentError", "header", "hostname", "ip", "record", "meta", "exports", "module", "array", "header", "closingQuote", "exports", "module", "date", "code", "exports", "module", "util", "array", "path", "context", "exports", "module", "EventEmitter", "key", "entries", "entry", "exports", "module", "assert", "context", "require_cache", "exports", "module", "assert", "Readable", "util", "array", "aborted", "context", "isStale", "handleResult", "headers", "success", "opts", "result", "exports", "module", "TransformStream", "InvalidArgumentError", "error", "exports", "module", "context", "exports", "module", "diagnosticsChannel", "util", "opts", "exports", "module", "VERSION", "url", "header", "require_headers", "exports", "module", "assert", "util", "code", "fill", "object", "header", "target", "b", "init", "array", "Headers", "list", "exports", "module", "Headers", "fill", "util", "isAborted", "assert", "Response", "data", "init", "url", "isError", "target", "require_request", "exports", "module", "Headers", "util", "assert", "Request", "init", "request", "window", "list", "exports", "module", "assert", "crypto", "metadata", "exports", "module", "Request", "zlib", "isAborted", "assert", "Readable", "error", "fetch", "init", "request", "recursive", "url", "path", "resolve", "resume", "onError", "require_util", "exports", "module", "assert", "header", "require_cache", "exports", "module", "assert", "Request", "request", "exports", "module", "request", "cache", "require_constants", "exports", "module", "require_util", "exports", "module", "code", "path", "date", "stringify", "exports", "module", "assert", "header", "exports", "module", "stringify", "Headers", "parseCookie", "exports", "module", "data", "lastEventId", "init", "require_constants", "exports", "module", "require_util", "exports", "module", "target", "init", "data", "code", "url", "exports", "module", "randomFillSync", "buffer", "_size", "data", "exports", "module", "Headers", "assert", "crypto", "url", "request", "object", "code", "validate", "exports", "module", "data", "exports", "module", "assert", "error", "data", "code", "body", "exports", "module", "node", "data", "exports", "module", "WebSocket", "data", "url", "code", "init", "ws", "exports", "module", "target", "init", "code", "error", "exports", "module", "data", "url", "code", "string", "error", "require_util", "exports", "module", "exports", "module", "exports", "module", "url", "error", "exports", "module", "Client", "Agent", "EnvHttpProxyAgent", "errors", "util", "InvalidArgumentError", "setGlobalDispatcher", "url", "path", "capture", "fetch", "init", "parseCookie", "WebSocket", "exports", "module", "commander", "description", "exports", "module", "require_util", "exports", "module", "require_parse", "exports", "module", "util", "parse", "key", "token", "c", "literal", "escape", "buffer", "replacements", "exports", "module", "util", "stringify", "indent", "value", "replacements", "b", "partial", "require_lib", "exports", "module", "parse", "stringify", "JSON5", "require_constants", "exports", "module", "exports", "module", "debug", "exports", "module", "debug", "re", "exports", "module", "exports", "module", "b", "require_semver", "exports", "module", "debug", "re", "version", "b", "release", "identifier", "require_parse", "exports", "module", "parse", "version", "exports", "module", "parse", "version", "exports", "module", "parse", "version", "exports", "module", "version", "release", "identifier", "exports", "module", "parse", "version2", "exports", "module", "major", "exports", "module", "exports", "module", "exports", "module", "parse", "version", "exports", "module", "b", "exports", "module", "rcompare", "b", "exports", "module", "b", "exports", "module", "b", "exports", "module", "list", "b", "exports", "module", "list", "b", "exports", "module", "b", "exports", "module", "lt", "b", "exports", "module", "b", "exports", "module", "b", "exports", "module", "b", "exports", "module", "b", "exports", "module", "lt", "b", "exports", "module", "parse", "re", "coerce", "version", "major", "build", "exports", "module", "exports", "module", "k", "cached", "re", "debug", "version", "fp", "exports", "module", "debug", "re", "version", "exports", "module", "version", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "require_valid", "exports", "module", "exports", "module", "lt", "version", "exports", "module", "version", "exports", "module", "version", "exports", "module", "exports", "module", "b", "version", "exports", "module", "lt", "b", "require_semver", "exports", "module", "parse", "major", "rcompare", "lt", "coerce", "require_constants", "exports", "module", "path", "require_utils", "exports", "path", "exports", "module", "code", "require_parse", "exports", "module", "b", "branch", "parse", "capture", "opts", "value", "literal", "open", "esc", "rest", "posix", "source", "exports", "module", "path", "parse", "isObject", "state", "posix", "regex", "format", "require_picomatch", "exports", "module", "exports", "module", "fs", "Readable", "promisify", "readdir", "error", "path", "basename", "resolve", "exports", "module", "path", "exports", "module", "normalizePath", "string", "path", "testString", "returnIndex", "exports", "module", "exports", "module", "open", "close", "exports", "module", "require_utils", "exports", "node", "require_stringify", "exports", "module", "stringify", "node", "exports", "module", "exports", "module", "capture", "b", "max", "intersection", "string", "integer", "exports", "module", "util", "isObject", "transform", "stringify", "b", "format", "fill", "exports", "module", "fill", "compile", "node", "exports", "module", "fill", "stringify", "node", "require_constants", "exports", "module", "require_parse", "exports", "module", "stringify", "parse", "node", "open", "index", "exports", "module", "stringify", "compile", "parse", "exports", "module", "require_binary_extensions", "exports", "module", "exports", "module", "path", "require_constants", "exports", "sep", "platform", "os", "exports", "module", "fs", "promisify", "open", "close", "main", "path", "error", "handlers", "rawEmitter", "listener", "basename", "dirname", "newStats", "target", "resolve", "stats", "exports", "module", "fs", "promisify", "error", "path", "info", "list", "transform", "exports", "EventEmitter", "fs", "promisify", "normalizePath", "readdir", "flatten", "list", "string", "path", "cwd", "error", "code", "now", "stat", "exports", "module", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__hasOwnProp", "__export", "target", "__copyProps", "__toCommonJS", "mod", "determineAgent", "import_promises", "import_node_fs", "require_errors", "exports", "module", "format", "error", "exports", "data", "exports", "exports", "encode", "normalize", "decode", "require_errors", "exports", "_a", "claim", "exports", "exports", "exports", "exports", "util", "exports", "exports", "exports", "exports", "crypto", "util", "exports", "hash", "exports", "exports", "exports", "exports", "exports", "exports", "header", "exports", "isObjectLike", "isObject", "proto", "exports", "usage", "exports", "_a", "exports", "exports", "exports", "exports", "_a", "exports", "exports", "exports", "exports", "integer", "exports", "major", "exports", "parse", "enc$1", "der", "keyObject", "exports", "_a", "exports", "usage", "exports", "exports", "exports", "exports", "exports", "require_decrypt", "exports", "_a", "protectedHeader", "require_decrypt", "exports", "require_decrypt", "exports", "exports", "exports", "der", "exports", "exports", "require_encrypt", "exports", "require_encrypt", "exports", "_a", "jwe", "target", "exports", "exports", "exports", "exports", "usage", "exports", "crypto", "data", "exports", "crypto", "data", "require_verify", "exports", "_a", "data", "require_verify", "exports", "require_verify", "exports", "exports", "date", "exports", "exports", "claim", "require_verify", "exports", "_a", "require_decrypt", "exports", "require_encrypt", "exports", "require_sign", "exports", "data", "require_sign", "exports", "require_sign", "exports", "exports", "require_sign", "exports", "_a", "require_encrypt", "exports", "exports", "description", "data", "exports", "exports", "clone", "jwk", "error", "cached", "exports", "http", "https", "url", "exports", "url", "exports", "base64url", "header", "require_base64url", "exports", "base64url", "exports", "exports", "exports", "_a", "exports", "exports", "exports", "require_runtime", "exports", "exports", "require_lib", "exports", "module", "assert", "createHash", "format", "encode", "base64", "validate", "require_is_key_object", "exports", "module", "util", "crypto", "require_base64url", "exports", "module", "encode", "base64", "decode", "require_decode_jwt", "exports", "module", "base64url", "header", "exports", "module", "exports", "module", "isPlainObject", "target", "exports", "module", "exports", "module", "exports", "module", "pick", "object", "path", "exports", "module", "format", "exports", "module", "exports", "module", "base64url", "TokenSet", "exports", "module", "createHash", "randomBytes", "base64url", "exports", "module", "exports", "module", "Node", "list", "self", "node", "exports", "module", "k", "node", "self", "require_package", "exports", "module", "exports", "module", "require_request", "exports", "module", "assert", "http", "https", "once", "URL", "pick", "request", "url", "exports", "module", "exports", "module", "exports", "module", "clone", "isPlainObject", "k", "alg", "require_merge", "exports", "module", "isPlainObject", "merge", "target", "require_client", "exports", "module", "request", "merge", "auth", "exports", "module", "crypto", "object", "hash", "context", "self", "date", "string", "number", "regex", "url", "b", "exports", "module", "request", "exports", "module", "resolve", "require_client", "exports", "module", "crypto", "assert", "url", "URL", "URLSearchParams", "base64url", "pick", "isPlainObject", "TokenSet", "request", "clone", "major", "k", "BaseClient", "target", "isString", "header", "required", "hash", "determineRsaAlgorithm", "determineEcAlgorithm", "exports", "module", "exports", "module", "normalize", "require_issuer", "exports", "module", "url", "getClient", "registry", "request", "clone", "Issuer", "meta", "Client", "resource", "exports", "module", "url", "format", "BaseClient", "pick", "info", "error", "require_lib", "exports", "module", "Issuer", "Strategy", "TokenSet", "generators", "init_esm", "import_util", "import_node_net", "import_index", "program", "createCommand", "createArgument", "createOption", "CommanderError", "InvalidArgumentError", "InvalidOptionArgumentError", "Command", "Argument", "Option", "Help", "extraTypingsCommander", "import_path", "init_esm", "init_utils", "init_utils", "init_utils", "init_errors", "import_child_process", "import_util", "import_crypto", "crypto", "cleanupHandle", "init_errors", "init_utils", "init_utils", "dotenv", "import_util", "reference", "getFunctionName", "address", "path", "isObject", "k", "value", "context", "data", "error", "address", "debug", "getFunctionName", "resolve", "error", "componentPath", "functionName", "componentPath", "add", "version", "auth", "resolve", "request", "getFunctionName", "update", "debug", "ws", "error", "request", "initialBackoff", "code", "config", "mark", "address", "error", "unsubscribe", "modification", "componentPath", "init_utils", "import_path", "import_child_process", "import_path", "import_child_process", "init_utils", "node", "b", "import_node_util", "import_node_zlib", "init_dashboard", "init_dashboard", "dashboardUrl", "import_crypto", "dotenv", "init_dashboard", "url", "init_utils", "request", "data", "error", "email", "deployment", "auth", "error", "data", "email", "isInteractive", "crypto", "zlib", "data", "duration", "request", "onError", "fetch", "error", "startPush", "dashboardUrl", "url", "deployment", "env", "init_version", "init_utils", "import_path", "import_path", "path", "componentDefinitionPath", "import_esbuild", "path", "build", "componentPath", "importPath", "esbuild", "error", "warning", "plugins", "schema", "entryPoints", "import_path", "b", "startPush", "schema", "b", "import_path", "init_esm", "init_utils", "import_path", "init_esm", "chokidar", "path", "resolve", "auth", "functionsDir", "result", "handleResult", "path", "version", "fs", "import_path", "startPush", "importPath", "path", "visibility", "module", "b", "identifier", "exports", "name", "componentPath", "reference", "functionName", "canonicalizedModulePath", "analyzedModule", "analyzedFunction", "init_utils", "path", "functionsDir", "startPushResponse", "isPublishedPackage", "prettier", "import_path", "config", "path", "crypto", "ns", "init_dashboard", "init_utils", "request", "componentPath", "schemaChange", "indexDiff", "init_utils", "componentPath", "sum", "init_utils", "componentPath", "request", "schema", "error", "componentPath", "import_crypto", "bundle", "path", "version", "impl", "startPushRequest", "startPushResponse", "module", "componentPath", "componentDiff", "import_perf_hooks", "import_path", "import_node_util", "init_utils", "resolve", "url", "fetch", "log", "init_utils", "init_errors", "resolve", "error", "code", "functionName", "componentPath", "subscribe", "path", "result", "parseArgs", "identifier", "path", "JSON5", "functionName", "exportName", "string", "hash", "resolve", "onDone", "subscribe", "util", "ws", "unsubscribe", "init_utils", "resolve", "data", "warning", "init_utils", "deployment", "fetch", "warning", "error", "env", "version", "config", "project", "deployment", "import_path", "init_errors", "init_utils", "init_utils", "init_esm", "import_path", "import_fs", "init_esm", "init_version", "path", "version", "error", "import_path", "path", "import_fs", "import_crypto", "import_fs", "fs", "error", "fs", "init_esm", "import_fs", "error", "fs", "target", "import_child_process", "import_path", "import_fs", "cwd", "path", "fs", "resolve", "child_process", "code", "import_path", "path", "path", "error", "fs", "deployment", "version", "path", "config", "deployments", "error", "auth", "data", "url", "reference", "config", "project", "init_utils", "target", "project", "import_os", "import_path", "init_utils", "path", "config", "os", "init_utils", "dotenv", "config", "rawDeployKey", "deployKey", "globalConfig", "auth", "config", "result", "target", "url", "isAnonymous", "deployment", "auth", "init_utils", "import_path", "path", "path", "Command", "Command", "Option", "Command", "Option", "init_utils", "init_dashboard", "init_utils", "init_utils", "Command", "Option", "init_utils", "import_path", "import_stream", "onDone", "subscribe", "fetch", "path", "Command", "deployment", "init_utils", "init_dashboard", "init_utils", "import_path", "format", "snapshotImportDashboardLink", "onDone", "subscribe", "path", "fetch", "data", "Command", "deployment", "import_node_process", "import_node_path", "import_node_url", "import_node_child_process", "import_promises", "import_node_util", "import_node_child_process", "import_node_process", "import_node_os", "import_node_fs", "import_node_fs", "import_node_fs", "fs", "fs", "process", "os", "fs", "import_node_process", "import_node_util", "import_node_child_process", "execFile", "childProcess", "process", "execFile", "execFile", "childProcess", "fs", "fsConstants", "powerShellPath", "path", "object", "define", "import_node_util", "import_node_process", "import_node_child_process", "import_node_util", "import_node_process", "import_node_child_process", "process", "import_node_process", "import_node_util", "import_node_child_process", "execFileAsync", "process", "import_node_util", "import_node_child_process", "execFileAsync", "execFileAsync", "string", "defaultBrowser", "process", "import_node_process", "process", "import_meta", "path", "platform", "arch", "process", "apps", "errors", "error", "defaultBrowser", "powerShellPath", "fs", "fsConstants", "childProcess", "resolve", "open", "target", "arch", "platform", "open", "init_dashboard", "Command", "deployment", "dashboardUrl", "url", "componentPath", "data", "stringify", "document", "k", "Command", "deployment", "init_dashboard", "url", "header", "chalk", "init_utils", "init_dashboard", "init_utils", "warn", "auth", "import_path", "init_utils", "version", "path", "init_dashboard", "url", "Command", "Option", "data", "deployment", "init_dashboard", "dashboardUrl", "url", "init_utils", "import_path", "init_dashboard", "import_index", "mod", "custom", "init_utils", "init_version", "import_os", "import_child_process", "custom", "header", "version", "data", "open", "globalConfig", "path", "fetch", "join", "project", "url", "reference", "path", "config", "import_child_process", "init_utils", "date", "init_utils", "Command", "Option", "version", "project", "team", "Command", "deployment", "target", "init_utils", "Command", "deployment", "init_utils", "Command", "deployment", "Command", "init_utils", "init_utils", "init_utils", "Option", "Command", "ctx", "deployment", "Command", "deployment", "Option", "env", "init_utils", "deployment", "path", "init", "fetch", "config", "b", "usage", "window", "header", "Option", "Command", "deployment", "enabled", "usage", "b", "Command", "Command", "init_utils", "Command", "Option", "Command", "url", "Command", "Option", "init", "Command", "init_dashboard", "init_utils", "componentPath", "common", "insights", "b", "time", "Command", "auth", "dashboardUrl", "init_utils", "selectEnvDeployment", "Command", "deployment", "info", "workosUrl", "description", "error", "config", "email", "env", "dotenv", "init_dashboard", "init_utils", "auth", "Command", "globalConfig", "Option", "uuid", "dashboardUrl", "deployment", "Command", "Command", "deployment", "__create", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__getProtoOf", "__hasOwnProp", "mod", "target", "__copyProps", "k", "__toESM", "DRAFT_2020_12_URIS: ReadonlySet<string>", "DRAFT_2019_09_URIS: ReadonlySet<string>", "DRAFT_07_URIS: ReadonlySet<string>", "DRAFT_06_URIS: ReadonlySet<string>", "schema", "cached", "floatSafeRemainder", "getParsedType", "isPlainObject", "merge", "omit", "schema", "k", "array", "cached", "floatSafeRemainder", "object", "target", "path", "data", "isPlainObject", "getParsedType", "omit", "merge", "b", "Class", "_a", "config", "base64", "base64url", "proto", "_a", "NEVER", "initializer", "proto", "init", "own", "target", "k", "_a", "config", "proto", "node", "error", "issue", "path", "terminal", "schema", "config", "schema", "config", "schema", "error", "config", "schema", "validate", "schema", "parse", "parse", "schema", "parseAsync", "schema", "parseAsync", "schema", "schema", "schema", "schema", "schema", "version", "regex", "timeRegex", "_a", "floatSafeRemainder", "_a", "version", "_a", "version", "checks", "isAborted", "checkResult", "canary", "result", "config", "validateAsync", "_", "url", "hostname", "address", "data", "base64", "isValidJWT", "header", "parse", "memo", "result", "k", "r", "cached", "isObject", "schema", "allowsEval", "config", "results", "k", "cached", "value", "left", "right", "mergeValues", "b", "isPlainObject", "memo", "isPlainObject", "config", "result", "k", "output", "result", "config", "result", "right", "left", "r", "resolve", "cached", "merge", "open", "_a", "error", "issue", "en_default", "_a", "schema", "meta", "_a", "Class", "_emoji", "Class", "Class", "Class", "Class", "Class", "_null", "Class", "Class", "Class", "Class", "schema", "issue", "target", "schema", "_a", "meta", "schema", "id", "members", "required", "object", "k", "union", "b", "target", "format", "schema", "list", "regex", "b", "optional", "record", "registry", "ctx", "proto", "initializer", "self", "issue", "issues", "initializer", "parse", "config", "en_default", "ZodType", "meta", "target", "description", "_parse", "data", "parse", "_parseAsync", "validate", "_encode", "_decode", "_encodeAsync", "_decodeAsync", "ZodString", "_emoji", "string", "email", "ZodNumber", "ZodType", "number", "ZodBoolean", "ZodType", "boolean", "ZodBigInt", "ZodNull", "ZodType", "_null", "ZodAny", "ZodType", "ZodUnknown", "ZodNever", "ZodDate", "ZodType", "ZodArray", "ZodType", "ZodObject", "ZodType", "self", "ZodOptional", "looseObject", "ZodObject", "ZodUnion", "ZodType", "ZodDiscriminatedUnion", "ZodUnion", "ZodIntersection", "ZodType", "ZodRecord", "ZodType", "string", "ZodEnum", "ZodType", "ZodLiteral", "ZodType", "ZodType", "issue", "output", "ZodOptional", "ZodNullable", "ZodDefault", "ZodType", "ZodCatch", "ZodType", "ZodType", "ZodReadonly", "ZodType", "ZodLazy", "ZodType", "ZodType", "schema", "ZodIssueCode", "ZodFirstPartyTypeKind", "date", "datetime", "duration", "time", "datetime", "date", "time", "duration", "bigint", "boolean", "date", "number", "string", "string", "ZodString", "number", "ZodNumber", "boolean", "ZodBoolean", "bigint", "ZodBigInt", "date", "ZodDate", "JSONValueSchema: z.ZodType<JSONValue, JSONValue>", "string", "number", "boolean", "_null", "JSONObjectSchema: z.ZodType<JSONObject, JSONObject>", "JSONArraySchema: z.ZodType<JSONArray, JSONArray>", "looseObject", "ZodIssueCode", "NEVER", "url", "BRANDS: unique symbol", "current: unknown", "OAuthError", "code: OAuthErrorCode | string", "errorUri?: string", "code", "response: OAuthErrorResponse", "code: SdkErrorCode", "data?: unknown", "data", "isPlainObject", "required", "missing: Record<string, unknown>", "missingMembers: Record<string, unknown>", "version", "build", "JSONValueSchema: z.ZodType<JSONValue, JSONValue>", "string", "number", "boolean", "_null", "JSONValueSchema", "JSONObjectSchema: z.ZodType<JSONObject, JSONObject>", "ProgressTokenSchema", "CursorSchema", "TaskMetadataSchema", "RelatedTaskMetadataSchema", "RequestMetaSchema", "looseObject", "BaseRequestParamsSchema", "TaskAugmentedRequestParamsSchema", "RequestSchema", "NotificationsParamsSchema", "NotificationSchema", "ResultSchema", "RequestIdSchema", "EmptyResultSchema", "CancelledNotificationParamsSchema", "CancelledNotificationSchema", "IconSchema", "IconsSchema", "BaseMetadataSchema", "ImplementationSchema", "FormElicitationCapabilitySchema", "JSONObjectSchema", "ElicitationCapabilitySchema", "ClientTasksCapabilitySchema", "ServerTasksCapabilitySchema", "ClientCapabilitiesSchema", "InitializeRequestParamsSchema", "InitializeRequestSchema", "ServerCapabilitiesSchema", "InitializeResultSchema", "InitializedNotificationSchema", "PingRequestSchema", "ProgressSchema", "ProgressNotificationParamsSchema", "ProgressNotificationSchema", "PaginatedRequestParamsSchema", "PaginatedRequestSchema", "PaginatedResultSchema", "ResourceContentsSchema", "TextResourceContentsSchema", "Base64Schema", "BlobResourceContentsSchema", "RoleSchema", "AnnotationsSchema", "ResourceSchema", "ResourceTemplateSchema", "ListResourcesRequestSchema", "ListResourcesResultSchema", "ListResourceTemplatesRequestSchema", "ListResourceTemplatesResultSchema", "ResourceRequestParamsSchema", "ReadResourceRequestParamsSchema", "ReadResourceRequestSchema", "ReadResourceResultSchema", "ResourceListChangedNotificationSchema", "SubscribeRequestParamsSchema", "SubscribeRequestSchema", "UnsubscribeRequestParamsSchema", "UnsubscribeRequestSchema", "ResourceUpdatedNotificationParamsSchema", "ResourceUpdatedNotificationSchema", "PromptArgumentSchema", "PromptSchema", "ListPromptsRequestSchema", "ListPromptsResultSchema", "GetPromptRequestParamsSchema", "GetPromptRequestSchema", "TextContentSchema", "ImageContentSchema", "AudioContentSchema", "ToolUseContentSchema", "EmbeddedResourceSchema", "ResourceLinkSchema", "ContentBlockSchema", "PromptMessageSchema", "GetPromptResultSchema", "PromptListChangedNotificationSchema", "ToolAnnotationsSchema", "ToolExecutionSchema", "ToolSchema", "ListToolsRequestSchema", "ListToolsResultSchema", "CallToolResultSchema", "CallToolRequestParamsSchema", "CallToolRequestSchema", "ToolListChangedNotificationSchema", "LoggingLevelSchema", "SetLevelRequestParamsSchema", "SetLevelRequestSchema", "LoggingMessageNotificationParamsSchema", "LoggingMessageNotificationSchema", "ModelHintSchema", "ModelPreferencesSchema", "ToolChoiceSchema", "ToolResultContentSchema", "SamplingContentSchema", "SamplingMessageContentBlockSchema", "SamplingMessageSchema", "CreateMessageRequestParamsSchema", "CreateMessageRequestSchema", "CreateMessageResultSchema", "CreateMessageResultWithToolsSchema", "BooleanSchemaSchema", "StringSchemaSchema", "NumberSchemaSchema", "UntitledSingleSelectEnumSchemaSchema", "TitledSingleSelectEnumSchemaSchema", "LegacyTitledEnumSchemaSchema", "SingleSelectEnumSchemaSchema", "UntitledMultiSelectEnumSchemaSchema", "TitledMultiSelectEnumSchemaSchema", "MultiSelectEnumSchemaSchema", "EnumSchemaSchema", "PrimitiveSchemaDefinitionSchema", "ElicitRequestFormParamsSchema", "ElicitRequestURLParamsSchema", "ElicitRequestParamsSchema", "ElicitRequestSchema", "ElicitationCompleteNotificationParamsSchema", "ElicitationCompleteNotificationSchema", "ElicitResultSchema", "ResourceTemplateReferenceSchema", "PromptReferenceSchema", "CompleteRequestParamsSchema", "CompleteRequestSchema", "CompleteResultSchema", "RootSchema", "ListRootsRequestSchema", "ListRootsResultSchema", "RootsListChangedNotificationSchema", "TaskCreationParamsSchema", "TaskStatusSchema", "TaskSchema", "CreateTaskResultSchema", "TaskStatusNotificationParamsSchema", "TaskStatusNotificationSchema", "GetTaskRequestSchema", "GetTaskResultSchema", "GetTaskPayloadRequestSchema", "GetTaskPayloadResultSchema", "ListTasksRequestSchema", "ListTasksResultSchema", "CancelTaskRequestSchema", "memo: Rev2025WireSchemas | undefined", "REF_REWRITE_DATA_POSITION_KEYS: ReadonlySet<string>", "REF_REWRITE_NAME_MAP_KEYS: ReadonlySet<string>", "node", "out: Record<string, unknown>", "k", "requestMethodKeys: { readonly [M in Rev2025RequestMethod]: null }", "notificationMethodKeys: { readonly [M in Rev2025NotificationMethod]: null }", "resultMethodKeys: { readonly [M in Rev2025TypedRequestMethod]: null }", "maps: RegistryMaps | undefined", "maps", "requestMethodKeys", "notificationMethodKeys", "rev2025RequestMethods: readonly string[]", "rev2025NotificationMethods: readonly string[]", "isPlainObject", "triState", "schema", "NOT_IN_ERA: ValidateOutcome<never>", "rev2025Codec: WireCodec", "NOT_IN_ERA", "code", "JSONValueSchema: z.ZodType<JSONValue, JSONValue>", "string", "number", "boolean", "_null", "JSONValueSchema", "JSONObjectSchema: z.ZodType<JSONObject, JSONObject>", "ProgressTokenSchema", "CursorSchema", "RequestIdSchema", "RoleSchema", "LoggingLevelSchema", "Base64Schema", "TaskMetadataSchema", "RelatedTaskMetadataSchema", "RequestMetaSchema", "looseObject", "BaseRequestParamsSchema", "TaskAugmentedRequestParamsSchema", "NotificationsParamsSchema", "NotificationSchema", "IconSchema", "IconsSchema", "BaseMetadataSchema", "ImplementationSchema", "FormElicitationCapabilitySchema", "JSONObjectSchema", "ElicitationCapabilitySchema", "ClientTasksCapabilitySchema", "ServerTasksCapabilitySchema", "ClientCapabilitiesSchema", "ServerCapabilitiesSchema", "ProgressSchema", "ProgressNotificationParamsSchema", "ProgressNotificationSchema", "LoggingMessageNotificationParamsSchema", "LoggingMessageNotificationSchema", "ResourceContentsSchema", "TextResourceContentsSchema", "BlobResourceContentsSchema", "AnnotationsSchema", "ResourceSchema", "ResourceTemplateSchema", "ResourceListChangedNotificationSchema", "ResourceUpdatedNotificationParamsSchema", "ResourceUpdatedNotificationSchema", "PromptArgumentSchema", "PromptSchema", "PromptListChangedNotificationSchema", "TextContentSchema", "ImageContentSchema", "AudioContentSchema", "ToolUseContentSchema", "EmbeddedResourceSchema", "ResourceLinkSchema", "ContentBlockSchema", "PromptMessageSchema", "ToolAnnotationsSchema", "ToolListChangedNotificationSchema", "ModelHintSchema", "ModelPreferencesSchema", "ToolChoiceSchema", "BooleanSchemaSchema", "StringSchemaSchema", "NumberSchemaSchema", "UntitledSingleSelectEnumSchemaSchema", "TitledSingleSelectEnumSchemaSchema", "LegacyTitledEnumSchemaSchema", "SingleSelectEnumSchemaSchema", "UntitledMultiSelectEnumSchemaSchema", "TitledMultiSelectEnumSchemaSchema", "MultiSelectEnumSchemaSchema", "EnumSchemaSchema", "PrimitiveSchemaDefinitionSchema", "ElicitRequestFormParamsSchema", "ResourceTemplateReferenceSchema", "PromptReferenceSchema", "RootSchema", "ToolSchema", "ToolResultContentSchema", "SamplingMessageContentBlockSchema", "SamplingMessageSchema", "ResultSchema", "PaginatedResultSchema", "CallToolResultSchema", "ListToolsResultSchema", "ListPromptsResultSchema", "GetPromptResultSchema", "ListResourcesResultSchema", "ListResourceTemplatesResultSchema", "ReadResourceResultSchema", "CompleteResultSchema", "DiscoverResultSchema", "CreateMessageRequestParamsSchema", "CreateMessageRequestSchema", "ListRootsRequestSchema", "CreateMessageResultSchema", "ListRootsResultSchema", "ElicitResultSchema", "ElicitRequestURLParamsSchema", "ElicitRequestParamsSchema", "ElicitRequestSchema", "CallToolRequestSchema", "ListToolsRequestSchema", "ListPromptsRequestSchema", "GetPromptRequestSchema", "ListResourcesRequestSchema", "ListResourceTemplatesRequestSchema", "ReadResourceRequestSchema", "CompleteRequestSchema", "DiscoverRequestSchema", "SubscriptionFilterSchema", "SubscriptionsListenRequestSchema", "SubscriptionsListenResultMetaSchema", "SubscriptionsListenResultSchema", "dispatchRequestSchemas: { readonly [M in Rev2026RequestMethod]: z.ZodType<{ method: M }> }", "dispatchResultSchemas: { readonly [M in Rev2026RequestMethod]: z.ZodType }", "SubscriptionsAcknowledgedNotificationSchema", "CancelledNotificationParamsSchema", "CancelledNotificationSchema", "notificationSchemas2026: { readonly [M in Rev2026NotificationMethod]: z.ZodType<{ method: M }> }", "memo: Rev2026WireSchemas | undefined", "memo", "RESULT_CACHE_HINT_FALLBACK: unique symbol", "merged: CacheHint", "context", "ProtocolError", "code: number", "data?: unknown", "data", "EXTENDED_RESULT_TYPE_METHODS: readonly string[]", "meta", "maps: InputSchemaMaps | undefined", "requestMethodKeys: { readonly [M in Rev2026RequestMethod]: null }", "notificationMethodKeys: { readonly [M in Rev2026NotificationMethod]: null }", "rev2026RequestMethods: readonly string[]", "rev2026NotificationMethods: readonly string[]", "isPlainObject", "schema", "NOT_IN_ERA: ValidateOutcome<never>", "REQUIRED_ENVELOPE_KEYS: readonly string[]", "next: Record<string, unknown>", "rev2026Codec: WireCodec & {\n    /**\n     * @deprecated Off-interface in-band registry probe retained for the\n     * existing inputRequiredFunnel pin. Use {@link WireCodec.validateInputRequest}\n     * \u2014 its `not-in-era` outcome is the membership signal.\n     */\n    inputRequestSchema(method: string): unknown;\n}", "meta", "issues: EnvelopeIssue[]", "issue", "path", "code", "wireResultSchemasMemo: Record<string, z.ZodType> | undefined", "version", "ALL_CODECS: readonly WireCodec[]", "isPlainObject", "meta", "request", "PERMITTED_X_MCP_HEADER_TYPES: ReadonlySet<string>", "inputSchema", "declarations: XMcpHeaderDeclaration[]", "visit", "node", "path", "schema", "fault", "k", "branches: unknown[]", "OBJECT_VALUED_SUBSCHEMA_KEYWORDS: ReadonlySet<string>", "INBOUND_VALIDATION_LADDER: readonly InboundValidationRungDescriptor[]", "LADDER_ERROR_HTTP_STATUS: Readonly<Record<number, number>>", "error", "meta", "supportedVersions", "schema", "data", "result: Record<string, unknown>", "members", "issue", "precisions: Array<number | undefined>", "format", "referenceSchemas: z.ZodType[]", "email", "required", "error", "PROPERTY_KEYS_BY_TYPE: Record<string, ReadonlySet<string>>", "SUPPORTED_STRING_FORMATS: ReadonlySet<string>", "node", "path", "pruned: Record<string, unknown>", "unsupported: string[]", "inputRequired: InputRequiredBuilder", "resolve", "_specTypeSchemas: Record<string, StandardSchemaV1>", "_isSpecType: Record<string, (value: unknown) => boolean>", "register", "schema", "schemas", "specTypeSchemas: SchemaRecord", "isSpecType: GuardRecord", "RESERVED_ENVELOPE_META_KEYS: readonly string[]", "isPlainObject", "meta", "lifted: LiftedWireMaterial", "nextParams: Record<string, unknown>", "envelope: Record<string, unknown>", "nextMeta: Record<string, unknown>", "writeNegotiatedProtocolVersion: <ContextT extends BaseContext>(instance: Protocol<ContextT>, version: string | undefined) => void", "version", "_options?: ProtocolOptions", "info", "error", "request", "code", "data", "errorResponse: JSONRPCErrorResponse", "baseCtx: BaseContext", "validate", "encoded: Result", "response: JSONRPCResponse", "onAbort: (() => void) | undefined", "cleanupMessageId: number | undefined", "jsonrpcRequest: JSONRPCRequest", "decoded: ReturnType<WireCodec['decodeResult']>", "flow: NonCompleteResultFlow<T>", "stored: (request: JSONRPCRequest, ctx: ContextT) => Promise<Result>", "result: T", "k", "accepted: Record<string, unknown>", "droppedKeys: string[]", "exports", "parse", "string", "header", "error", "warnings: string[]", "warning", "proto", "schema", "exports", "code", "_a", "b", "stringify", "UsedValueState", "Scope", "Node", "error", "If", "ns", "node", "hash", "schema", "self", "xs", "mergeValues", "Type", "require_util", "data", "require_errors", "DataType", "context", "validateAsync", "errors", "module", "normalize", "anchor", "require_defaults", "ValidationError", "getData", "env", "validate", "resolve", "address", "tokenCount", "ipv6", "path", "esc", "require_utils", "http", "https", "ws", "parse", "relative", "target", "isIP", "require_compile", "Ajv", "meta", "k", "format", "regex", "log", "DiscrError", "required", "date", "time", "addFormats", "list", "fs", "_addFormats", "Ajv2020", "Ajv2019", "Draft7Ajv", "import_node_process", "COMPLETABLE_SYMBOL: unique symbol", "schema", "honored: SubscriptionFilter", "CHANGE_NOTIFICATION_METHODS: ReadonlySet<string>", "_maxSubscriptions: number", "uriParam: unknown", "out: NotificationBody[]", "out: ListenCloseFrame[]", "required", "_host: LegacyInputRequiredShimHost", "request", "responses: Record<string, unknown> | undefined", "coerced: [string, CoercedEmbeddedInputRequest][]", "legOptions: RequestOptions", "error", "ctxNext: ServerContext", "INPUT_REQUIRED_CAPABLE_METHODS: ReadonlySet<string>", "writeClientIdentity: (server: Server, identity: PerRequestClientIdentity) => void", "installDiscoverHandler: (server: Server, servedModernVersions: readonly string[]) => void", "readServerIdentity: (server: Server) => Implementation", "version", "_serverInfo: Implementation", "request", "transportSessionId: string | undefined", "data", "threshold: LoggingLevel | undefined", "rawRequestState: unknown", "result: Result", "error", "required", "formParams: ElicitRequestFormParams", "stack: unknown[]", "node", "context", "uri: URL", "resource", "toolDefinition: Tool", "templateResources: Resource[]", "config", "metadata: ResourceMetadata", "registeredResource: RegisteredResource", "registeredResourceTemplate: RegisteredResourceTemplate", "description", "registeredPrompt: RegisteredPrompt", "inputSchema", "outputSchema", "outputSchemaJson: Record<string, unknown> | undefined", "registeredTool: RegisteredTool", "inputSchema", "callback", "outputSchema", "EMPTY_COMPLETION_RESULT: CompleteResult", "schema", "_stdin: Readable", "process", "_stdout: Writable", "error", "resolve", "onError", "_wire: Transport", "_onInstanceClose: () => void", "_outboundIntercept?: (message: JSONRPCMessage) => 'handled' | undefined", "version", "meta", "state: EntryState", "discarding: StdioConnectionChannel | undefined", "code", "data", "issue", "request", "rejection", "channel", "channel: StdioConnectionChannel", "queue: JSONRPCMessage[]", "auth", "deployment", "schema", "parsedType", "emojiRegex", "addPattern", "literal", "schema", "regex", "schema", "object", "types", "x", "base", "required", "schema", "b", "schema", "schema", "name", "main", "esm_default", "init_utils", "deployment", "schema", "fetch", "inputSchema", "outputSchema", "deployment", "init_dashboard", "inputSchema", "outputSchema", "description", "inputSchema", "outputSchema", "description", "deployment", "inputSchema", "outputSchema", "description", "deployment", "parseArgs", "args", "deployment", "init_utils", "inputSchema", "outputSchema", "description", "deployment", "init_utils", "inputSchema", "outputSchema", "description", "deployment", "fetch", "init_dashboard", "inputSchema", "outputSchema", "description", "deployment", "auth", "insights", "dashboardUrl", "esm_default", "Command", "Option", "error", "request", "net", "crypto", "init_utils", "import_ws", "url", "hostname", "resolve", "address", "duration", "fetch", "ws", "data", "Command", "url", "import_os", "import_path", "init_esm", "import_child_process", "import_path", "import_util", "init_esm", "path", "child_process", "resolve", "code", "error", "schema", "list", "indent", "plugins", "path", "os", "plugins", "import_os", "import_path", "path", "os", "plugins", "pluginId", "upgradeStep", "semver", "version", "b", "import_os", "import_path", "path", "os", "Command", "upgradeStep", "plugins", "list", "version", "init_utils", "init_dashboard", "Command", "Option", "Command", "Command", "Option", "init_utils", "init_utils", "run", "Command", "functionName", "target", "deployment", "componentPath", "path", "init_utils", "Command", "Option", "Command", "init_version", "program", "Command", "init", "run", "env", "version", "logToStderr", "majorVersion", "dns", "net", "program", "resolve"]
}
